Submitted URL: http://reliauscard.com/usbankalerts
Effective URL: https://reliauscard.myvnc.com/Card
Submission: On January 20 via manual from US — Scanned from NL

Summary

This website contacted 2 IPs in 2 countries across 5 domains to perform 9 HTTP transactions. The main IP is 64.225.111.8, located in Frankfurt am Main, Germany and belongs to DIGITALOCEAN-ASN, US. The main domain is reliauscard.myvnc.com.
TLS certificate: Issued by cPanel, Inc. Certification Authority on January 16th 2022. Valid for: 3 months.
This is the only time reliauscard.myvnc.com was scanned on urlscan.io!

urlscan.io Verdict: No classification

Domain & IP information

IP Address AS Autonomous System
1 1 23.95.80.43 36352 (AS-COLOCR...)
1 2 64.225.111.8 14061 (DIGITALOC...)
9 2
Apex Domain
Subdomains
Transfer
2 myvnc.com
reliauscard.myvnc.com
1 MB
1 reliauscard.com
reliauscard.com
1 KB
0 appdynamics.com Failed
cdn.appdynamics.com Failed
0 tiqcdn.com Failed
tags.tiqcdn.com Failed
0 google-analytics.com Failed
www.google-analytics.com Failed
9 5
Domain Requested by
2 reliauscard.myvnc.com 1 redirects reliauscard.myvnc.com
1 reliauscard.com 1 redirects
0 cdn.appdynamics.com Failed reliauscard.myvnc.com
0 tags.tiqcdn.com Failed reliauscard.myvnc.com
0 www.google-analytics.com Failed reliauscard.myvnc.com
9 5

This site contains links to these domains. Also see Links.

Domain
www.usbankreliacard.com
www.usbank.com
www.prepaidmaterials.com
Subject Issuer Validity Valid
reliauscard.myvnc.com
cPanel, Inc. Certification Authority
2022-01-16 -
2022-04-16
3 months crt.sh

This page contains 1 frames:

Primary Page: https://reliauscard.myvnc.com/Card
Frame ID: D1111827B387B7B6872F5A16496EDB24
Requests: 33 HTTP requests in this frame

Screenshot

Page Title

Confirm Your Account Information

Page URL History Show full URLs

  1. http://reliauscard.com/usbankalerts HTTP 301
    https://reliauscard.myvnc.com/ HTTP 302
    https://reliauscard.myvnc.com/Card Page URL

Detected technologies

Overall confidence: 100%
Detected patterns

Page Statistics

9
Requests

11 %
HTTPS

0 %
IPv6

5
Domains

5
Subdomains

2
IPs

2
Countries

1283 kB
Transfer

6572 kB
Size

6
Cookies

Page URL History

This captures the URL locations of the websites, including HTTP redirects and client-side redirects via JavaScript or Meta fields.

  1. http://reliauscard.com/usbankalerts HTTP 301
    https://reliauscard.myvnc.com/ HTTP 302
    https://reliauscard.myvnc.com/Card Page URL

Redirected requests

There were HTTP redirect chains for the following requests:

9 HTTP transactions

Resource
Path
Size
x-fer
Type
MIME-Type
Primary Request Card
reliauscard.myvnc.com/
Redirect Chain
  • http://reliauscard.com/usbankalerts
  • https://reliauscard.myvnc.com/
  • https://reliauscard.myvnc.com/Card
4 MB
1 MB
Document
General
Full URL
https://reliauscard.myvnc.com/Card
Protocol
HTTP/1.1
Security
TLS 1.3, , AES_128_GCM
Server
64.225.111.8 Frankfurt am Main, Germany, ASN14061 (DIGITALOCEAN-ASN, US),
Reverse DNS
Software
Apache /
Resource Hash
c09eca3258342cbc78b20a7e5ef1d79fdca51bfadd3db1e63a72c85b01e39143

Request headers

Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Accept-Language
nl-NL,nl;q=0.9

Response headers

Date
Thu, 20 Jan 2022 18:02:41 GMT
Server
Apache
Expires
Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control
no-store, no-cache, must-revalidate
Pragma
no-cache
Content-Encoding
gzip
Vary
Accept-Encoding
Keep-Alive
timeout=5, max=99
Connection
Keep-Alive
Transfer-Encoding
chunked
Content-Type
text/html; charset=UTF-8

Redirect headers

Date
Thu, 20 Jan 2022 18:02:41 GMT
Server
Apache
Expires
Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control
no-store, no-cache, must-revalidate
Pragma
no-cache
Content-Encoding
gzip
Vary
Accept-Encoding
Location
Card
Keep-Alive
timeout=5, max=100
Connection
Keep-Alive
Transfer-Encoding
chunked
Content-Type
text/html; charset=UTF-8
truncated
/
21 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
d994adb9dccaa79728cf9feaa4262fd8b7d7e29b7ad5a13562f9b7012033b372

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
application/x-javascript
truncated
/
109 B
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
11e301f1348a47453bbb63097f7672309434aff0467b10e217a170a793f06ac6

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
application/x-javascript
truncated
/
4 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
36310c9fd2c92d18fef7f82bad4e2551a294400bc06b0c929b8c7f28111d0d20

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
1 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
19c85d4ae54b8085ef9e183d871ca4041a19123b3f0e8e8080669fb199191c94

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
30 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
14e82dcfebfbe8089ec2904d6ae62236f3fda269b1bd2342a6256462c491c6fa

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
5 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
62ed2e922b527de7f63d37b9d121642ba7a80107f148ff7bf9c07c72f3d212d4

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
606 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
93f84f7b97ca285048f2c5f1f774a466457777716a3e32af3191f43ac02262ba

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
49 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
fc27aed7787a4f63d2feba50e6bc6122ac3c5479456d40c0a445899a08ad92f3

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
81 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
e5d0de278bc7272608da57b7ac2ac247df12499dd130802d6df2c63369aa6df3

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
696 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
40fef0b8a0da73493c95a417b28a3e847cf9e146605eaf095d3ec2cb6cf0272d

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
40 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
10fd97358e3e295c0dd817f2f2de51346a58befc3dce480ba825704005072ee2

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
analytics.js
www.google-analytics.com/
0
0

collect
www.google-analytics.com/j/
0
0

truncated
/
15 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
8ba8596ad0dd9da4cbcd32260e4a26c353ecfff7afb5c91009218ed0be299d67

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
/
reliauscard.myvnc.com/combo/
0
0

/
reliauscard.myvnc.com/combo/
0
0

truncated
/
61 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
555b050bd869797233fcfd1080d3494f5667b12be87a9a308572f6e39100f281

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
53 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
a5437085c1dcb711cd72c9a5ced577df6d75511ffd54391fcc16fc6509687839

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
466 B
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
6b305c807c5e6c509163a6f330f439dd52308b98173874b2918b603f9a960dc1

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
94 B
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
500330ccc9234c24ecf1dc806c5632dc1e3114323822c567c971324ccb531cf7

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
image/svg+xml
truncated
/
4 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
b75c055f47de9f69167f10e86d52053a0eecf1ae3373b2aef55de7dc1276233c

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
image/png
truncated
/
222 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
000c23b360dd3a32d131af2c43db6ad60a0f637721fe9b42f85ad7e1204701c7

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
18 B
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
5ab37111a8d0664346119976e4030a241654bd47477fded71e61bd50a1230fb6

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
77 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
7923c5df4689d8e2b03d4b24349057eb7415f9d70b6cd91975fd19814b402821

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
application/javascript
truncated
/
29 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
b56bb658575a7e0683e8ce69d261f9dd41cce63a6574eba9cfeeb522c7ddfd93

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
7 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
75dfe3d9341e1ed00993168e4ffdb46d1a9866e9ccbc9b021f29f872ff8fdd0f

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
898 B
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
826aa0764c0d6c224e3a5223e40dd7af368e386bac1d79fb760a33870fbd8240

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
text/javascript
truncated
/
96 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
3a7a992929b0af019d45d0b1707be3cfee029fb7c760300f9727ffb1e5fae507

Request headers

Accept-Language
nl-NL,nl;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

Response headers

Content-Type
application/javascript
utag.5.js
tags.tiqcdn.com/utag/usbank/prepaid/prod/
0
0

utag.sync.js
tags.tiqcdn.com/utag/usbank/prepaid/prod/
0
0

utag.js
tags.tiqcdn.com/utag/usbank/prepaid/prod/
0
0

adrum-ext.a5e921eab2dde2c5ab4b79ea636b8271.js
cdn.appdynamics.com/
0
0

Failed requests

These URLs were requested, but there was no response received. You will also see them in the list above.

Domain
www.google-analytics.com
URL
https://www.google-analytics.com/analytics.js
Domain
www.google-analytics.com
URL
https://www.google-analytics.com/j/collect?v=1&_v=j94&a=883880487&t=pageview&_s=1&dl=https%3A%2F%2Freliauscard.myvnc.com%2FCard&ul=en-us&de=UTF-8&dt=Confirm%20Your%20Account%20Information&sd=24-bit&sr=1600x1200&vp=1600x1200&je=0&_u=KEBAAEABEAAAAC~&jid=569980975&gjid=216315443&cid=697029085.1642701763&tid=UA-46038259-7&_gid=249695630.1642701763&_r=1&_slc=1&z=2036971502
Domain
reliauscard.myvnc.com
URL
https://reliauscard.myvnc.com/combo/?browserId=other&minifierType=&languageId=en_US&b=7010&t=1634972436260&/o/frontend-js-metal-web/metal/src/coreNamed.js&/o/frontend-js-metal-web/metal/src/core.js&/o/frontend-js-metal-web/metal/src/array/array.js&/o/frontend-js-metal-web/metal/src/async/async.js&/o/frontend-js-metal-web/metal/src/disposable/Disposable.js&/o/frontend-js-metal-web/metal/src/object/object.js&/o/frontend-js-metal-web/metal/src/string/string.js&/o/frontend-js-metal-web/metal/src/metal.js&/o/frontend-js-metal-web/metal-dom/src/domData.js&/o/frontend-js-metal-web/metal-events/src/EventHandle.js&/o/frontend-js-metal-web/metal-events/src/EventEmitter.js&/o/frontend-js-metal-web/metal-events/src/EventEmitterProxy.js&/o/frontend-js-metal-web/metal-events/src/EventHandler.js&/o/frontend-js-metal-web/metal-events/src/events.js&/o/frontend-js-metal-web/metal-dom/src/DomDelegatedEventHandle.js&/o/frontend-js-metal-web/metal-dom/src/DomEventHandle.js&/o/frontend-js-metal-web/metal-dom/src/domNamed.js&/o/frontend-js-metal-web/metal-dom/src/dom.js&/o/frontend-js-metal-web/metal-dom/src/DomEventEmitterProxy.js&/o/frontend-js-metal-web/metal-dom/src/features.js&/o/frontend-js-metal-web/metal-dom/src/globalEval.js&/o/frontend-js-metal-web/metal-dom/src/globalEvalStyles.js&/o/frontend-js-metal-web/metal-dom/src/events.js&/o/frontend-js-metal-web/metal-dom/src/all/dom.js&/o/frontend-js-metal-web/metal-promise/src/promise/Promise.js&/o/frontend-js-spa-web/senna/src/globals/globals.js&/o/frontend-js-metal-web/metal-uri/src/parseFromAnchor.js&/o/frontend-js-metal-web/metal-uri/src/parse.js&/o/frontend-js-metal-web/metal-structs/src/MultiMap.js&/o/frontend-js-metal-web/metal-structs/src/TreeNode.js&/o/frontend-js-metal-web/metal-structs/src/all/structs.js&/o/frontend-js-metal-web/metal-uri/src/Uri.js&/o/frontend-js-metal-web/metal-ajax/src/Ajax.js&/o/frontend-js-spa-web/senna/src/errors/errors.js&/o/frontend-js-spa-web/senna/src/utils/utils.js&/o/frontend-js-spa-web/senna/src/cacheable/Cacheable.js
Domain
reliauscard.myvnc.com
URL
https://reliauscard.myvnc.com/combo/?browserId=other&minifierType=&languageId=en_US&b=7010&t=1634972436260&/o/frontend-js-spa-web/senna/src/screen/Screen.js&/o/frontend-js-metal-web/metal-useragent/src/UA.js&/o/frontend-js-spa-web/senna/src/screen/RequestScreen.js&/o/frontend-js-spa-web/senna/src/surface/Surface.js&/o/frontend-js-spa-web/senna/src/screen/HtmlScreen.js&/o/frontend-js-spa-web/liferay/util/Utils.es.js&/o/frontend-js-spa-web/liferay/screen/EventScreen.es.js&/o/frontend-js-spa-web/liferay/screen/ActionURLScreen.es.js&/o/frontend-js-metal-web/metal-debounce/src/debounce.js&/o/frontend-js-metal-web/metal-path-parser/src/pathParser.js&/o/frontend-js-spa-web/senna/src/route/Route.js&/o/frontend-js-spa-web/senna/src/app/App.js&/o/frontend-js-spa-web/liferay/surface/Surface.es.js&/o/frontend-js-spa-web/liferay/app/App.es.js&/o/frontend-js-spa-web/liferay/screen/RenderURLScreen.es.js&/o/frontend-js-spa-web/liferay/init.es.js
Domain
tags.tiqcdn.com
URL
https://tags.tiqcdn.com/utag/usbank/prepaid/prod/utag.5.js?utv=ut4.46.202006120224
Domain
tags.tiqcdn.com
URL
https://tags.tiqcdn.com/utag/usbank/prepaid/prod/utag.sync.js
Domain
tags.tiqcdn.com
URL
https://tags.tiqcdn.com/utag/usbank/prepaid/prod/utag.js
Domain
cdn.appdynamics.com
URL
https://cdn.appdynamics.com/adrum-ext.a5e921eab2dde2c5ab4b79ea636b8271.js

Verdicts & Comments Add Verdict or Comment

122 JavaScript Global Variables

These are the non-standard "global" variables defined on the window object. These can be helpful in identifying possible client-side frameworks and code.

object| 0 boolean| utag_condload object| utag boolean| __tealium_twc_switch function| QuantumMetricInstrumentationStart object| QuantumMetricAPI boolean| qmStorageAvail function| qmSetCookie function| toLowerCase function| qmGetValFromDL function| qmFindObject function| consoleError object| Liferay object| themeDisplay object| google_tag_data function| ga object| gaplugins function| YUI function| $ function| jQuery object| __CONFIG__ function| ES6Promise object| Loader function| require function| define function| _ object| YUI_config number| qmConsoleErrCount object| __METAL_COMPATIBILITY__ string| GoogleAnalyticsObject object| gaGlobal object| gaData function| parseUrl function| makePathAbsolute function| makeUrlAbsolute function| compareURLs function| injectlinks function| FIC_checkForm function| FIC_checkField function| FIC_checkRadCbx function| FIC_checkSel function| addClassName function| removeClassName function| attachToForms function| isVisible function| searchUp function| xGetElementById function| fnHideLangConversion function| disableMailingAddress function| enableMailingAddress function| copyPhysicalToMailingAddress function| singleAddressCheck function| copyValuesForSingleInputFromPhysical function| virtualAddGovtId function| showDiv function| hideDiv function| createSelectOption function| createOption function| loadNewGovtCountryState function| populateStateOnCountryChange function| checkPhysicalAddressNotRequired function| addInputError function| checkForErrors function| removeErrors function| addFocusClass function| removeFocusClass function| initializeFocusClass function| formatCurrencyAmount function| clickIE4 function| clickNS4 function| getParameterByName string| portletState function| setAppDCurrentPage boolean| sourceGenerated boolean| scriptGenerated string| adrum-current-page function| validateAndSubmitForm function| validateForm function| onSubmitForm string| PATH_PORTLET_CONFIGURATION_CSS_WEB object| _ac object| _cf object| bmak number| bm_counter object| bm_script undefined| scripts string| bm_url object| url_split string| obfus_state_field undefined| state_field_str string| _sd_trace function| op function| initFAQ function| changeCountAmt function| showContent function| toggleContent function| outputDebug function| outputDebugNested function| removeFilter function| checkAll function| isUSCurrency undefined| oCurrencyValues function| validateCurrency function| enableEnrollment function| checkEnrollment function| openNewWindow function| removeEmptyPortlets function| getElementsByClassNameFooter function| trimLRFooter undefined| screenSize undefined| footerY function| resetScreenSize function| footerCssDisplay function| formSubmitWithAction function| hideCardlyticsDiv function| initADRUM function| extractUserData object| appDUserData string| adrum-app-key object| adrum-config object| ADRUM number| adrum-start-time

6 Cookies

Domain/Path Name / Value
reliauscard.com/ Name: XSRF-TOKEN
Value: eyJpdiI6InozWitRZUNtVHBuR1hBWFlNRjlNYVE9PSIsInZhbHVlIjoibTJ6YUNhZWJtYUVzdEZOZyt0aW5ZTXl3M21PSEYwSlcvYnZFWHIxTnloZGtxYk5GdHJldkkxRHFFaWMySnlWT0xIc0lrT3kzV1IzLytxN1dvYkY4MXU0TXdxUXJlTmtSMm5Ydk1LM0s1aDg3aUpXOG9xZmp3d2JGamJJT3FBbk4iLCJtYWMiOiI4OGZmODBiZDViMjJmYmU4N2JiOGZmMGU5ZDAzNWYwYmQzNzg2YjQ3ZDMzNmViYTJmODZlOGI0NTA2OWFmNGEzIiwidGFnIjoiIn0%3D
reliauscard.com/ Name: dawn676_url_shortner_session
Value: eyJpdiI6InBNbjdSaW1PT3I1Q2VXNmIvUDZxOVE9PSIsInZhbHVlIjoid0pld1dxaTh1cjh0QU9IM2FJN0NwRk5UM3FqT1M4TTIxSzJXS3BHT1dnWXlvdThNNGU0Mlk2aEtZQWxEWjIzQitxcTBLOWc2ZVppYlVaeFJ2RkRoMFRIbUl0TVFsWFdwK3laWVljQmV1NkZKVmRQbFZOdWpSaU9lYVNEd3lRY3UiLCJtYWMiOiIwNzk3MzA4NDlmNjg5MTNhNWM0MDQ4YTVhMWM3N2I3OTA1NzgzNTM5MDc3YThhZTI3ZWI1MzU3NDQ1NWRhNzI4IiwidGFnIjoiIn0%3D
reliauscard.myvnc.com/ Name: PHPSESSID
Value: 48e112e0a21219c1a9aadec53c6081b8
.reliauscard.myvnc.com/ Name: _ga
Value: GA1.3.697029085.1642701763
.reliauscard.myvnc.com/ Name: _gid
Value: GA1.3.249695630.1642701763
.reliauscard.myvnc.com/ Name: _gat
Value: 1

12 Console Messages

Source Level URL
Text
security error URL: https://reliauscard.myvnc.com/Card(Line 15)
Message:
Refused to load the script 'https://www.google-analytics.com/analytics.js' because it violates the following Content Security Policy directive: "script-src 'unsafe-inline' data:". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
security error URL: data:text/javascript;base64,KGZ1bmN0aW9uKCl7LyoKCiBDb3B5cmlnaHQgVGhlIENsb3N1cmUgTGlicmFyeSBBdXRob3JzLgogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKi8KdmFyIG49dGhpc3x8c2VsZixwPWZ1bmN0aW9uKGEsYil7YT1hLnNwbGl0KCIuIik7dmFyIGM9bjthWzBdaW4gY3x8InVuZGVmaW5lZCI9PXR5cGVvZiBjLmV4ZWNTY3JpcHR8fGMuZXhlY1NjcmlwdCgidmFyICIrYVswXSk7Zm9yKHZhciBkO2EubGVuZ3RoJiYoZD1hLnNoaWZ0KCkpOylhLmxlbmd0aHx8dm9pZCAwPT09Yj9jPWNbZF0mJmNbZF0hPT1PYmplY3QucHJvdG90eXBlW2RdP2NbZF06Y1tkXT17fTpjW2RdPWJ9O3ZhciBxPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjIGluIGIpYi5oYXNPd25Qcm9wZXJ0eShjKSYmKGFbY109YltjXSl9LHI9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShiKSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHQ9L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cCk6fFteOi8/I10qKD86Wy8/I118JCkpL2k7LyoKCiBDb3B5cmlnaHQgMjAyMSBUaGUgU2FmZXZhbHVlcyBBdXRob3JzCiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAoqLwp2YXIgdj13aW5kb3cseD1kb2N1bWVudCx5PWZ1bmN0aW9uKGEsYil7eC5hZGRFdmVudExpc3RlbmVyP3guYWRkRXZlbnRMaXN0ZW5lcihhLGIsITEpOnguYXR0YWNoRXZlbnQmJnguYXR0YWNoRXZlbnQoIm9uIithLGIpfTt2YXIgej17fSxBPWZ1bmN0aW9uKCl7ei5UQUdHSU5HPXouVEFHR0lOR3x8W107ei5UQUdHSU5HWzFdPSEwfTt2YXIgQj0vOlswLTldKyQvLEM9ZnVuY3Rpb24oYSxiLGMpe2E9YS5zcGxpdCgiJiIpO2Zvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hW2RdLnNwbGl0KCI9Iik7aWYoZGVjb2RlVVJJQ29tcG9uZW50KGVbMF0pLnJlcGxhY2UoL1wrL2csIiAiKT09PWIpcmV0dXJuIGI9ZS5zbGljZSgxKS5qb2luKCI9IiksYz9iOmRlY29kZVVSSUNvbXBvbmVudChiKS5yZXBsYWNlKC9cKy9nLCIgIil9fSxGPWZ1bmN0aW9uKGEsYil7YiYmKGI9U3RyaW5nKGIpLnRvTG93ZXJDYXNlKCkpO2lmKCJwcm90b2NvbCI9PT1ifHwicG9ydCI9PT1iKWEucHJvdG9jb2w9RChhLnByb3RvY29sKXx8RCh2LmxvY2F0aW9uLnByb3RvY29sKTsicG9ydCI9PT1iP2EucG9ydD1TdHJpbmcoTnVtYmVyKGEuaG9zdG5hbWU/YS5wb3J0OnYubG9jYXRpb24ucG9ydCl8fCgiaHR0cCI9PWEucHJvdG9jb2w/ODA6Imh0dHBzIj09YS5wcm90b2NvbD80NDM6IiIpKToiaG9zdCI9PT1iJiYoYS5ob3N0bmFtZT0oYS5ob3N0bmFtZXx8CnYubG9jYXRpb24uaG9zdG5hbWUpLnJlcGxhY2UoQiwiIikudG9Mb3dlckNhc2UoKSk7cmV0dXJuIEUoYSxiLHZvaWQgMCx2b2lkIDAsdm9pZCAwKX0sRT1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPUQoYS5wcm90b2NvbCk7YiYmKGI9U3RyaW5nKGIpLnRvTG93ZXJDYXNlKCkpO3N3aXRjaChiKXtjYXNlICJ1cmxfbm9fZnJhZ21lbnQiOmQ9IiI7YSYmYS5ocmVmJiYoZD1hLmhyZWYuaW5kZXhPZigiIyIpLGQ9MD5kP2EuaHJlZjphLmhyZWYuc3Vic3RyKDAsZCkpO2E9ZDticmVhaztjYXNlICJwcm90b2NvbCI6YT1mO2JyZWFrO2Nhc2UgImhvc3QiOmE9YS5ob3N0bmFtZS5yZXBsYWNlKEIsIiIpLnRvTG93ZXJDYXNlKCk7YyYmKGQ9L153d3dcZCpcLi8uZXhlYyhhKSkmJmRbMF0mJihhPWEuc3Vic3RyKGRbMF0ubGVuZ3RoKSk7YnJlYWs7Y2FzZSAicG9ydCI6YT1TdHJpbmcoTnVtYmVyKGEucG9ydCl8fCgiaHR0cCI9PWY/ODA6Imh0dHBzIj09Zj80NDM6IiIpKTticmVhaztjYXNlICJwYXRoIjphLnBhdGhuYW1lfHwKYS5ob3N0bmFtZXx8QSgpO2E9Ii8iPT1hLnBhdGhuYW1lLnN1YnN0cigwLDEpP2EucGF0aG5hbWU6Ii8iK2EucGF0aG5hbWU7YT1hLnNwbGl0KCIvIik7YTppZihkPWR8fFtdLGM9YVthLmxlbmd0aC0xXSxBcnJheS5wcm90b3R5cGUuaW5kZXhPZilkPWQuaW5kZXhPZihjKSxkPSJudW1iZXIiPT10eXBlb2YgZD9kOi0xO2Vsc2V7Zm9yKGU9MDtlPGQubGVuZ3RoO2UrKylpZihkW2VdPT09Yyl7ZD1lO2JyZWFrIGF9ZD0tMX0wPD1kJiYoYVthLmxlbmd0aC0xXT0iIik7YT1hLmpvaW4oIi8iKTticmVhaztjYXNlICJxdWVyeSI6YT1hLnNlYXJjaC5yZXBsYWNlKCI/IiwiIik7ZSYmKGE9QyhhLGUsdm9pZCAwKSk7YnJlYWs7Y2FzZSAiZXh0ZW5zaW9uIjphPWEucGF0aG5hbWUuc3BsaXQoIi4iKTthPTE8YS5sZW5ndGg/YVthLmxlbmd0aC0xXToiIjthPWEuc3BsaXQoIi8iKVswXTticmVhaztjYXNlICJmcmFnbWVudCI6YT1hLmhhc2gucmVwbGFjZSgiIyIsIiIpO2JyZWFrO2RlZmF1bHQ6YT0KYSYmYS5ocmVmfXJldHVybiBhfSxEPWZ1bmN0aW9uKGEpe3JldHVybiBhP2EucmVwbGFjZSgiOiIsIiIpLnRvTG93ZXJDYXNlKCk6IiJ9LEc9ZnVuY3Rpb24oYSl7dmFyIGI9eC5jcmVhdGVFbGVtZW50KCJhIik7YSYmKGIuaHJlZj1hKTt2YXIgYz1iLnBhdGhuYW1lOyIvIiE9PWNbMF0mJihhfHxBKCksYz0iLyIrYyk7YT1iLmhvc3RuYW1lLnJlcGxhY2UoQiwiIik7cmV0dXJue2hyZWY6Yi5ocmVmLHByb3RvY29sOmIucHJvdG9jb2wsaG9zdDpiLmhvc3QsaG9zdG5hbWU6YSxwYXRobmFtZTpjLHNlYXJjaDpiLnNlYXJjaCxoYXNoOmIuaGFzaCxwb3J0OmIucG9ydH19O2Z1bmN0aW9uIEgoKXtmb3IodmFyIGE9SSxiPXt9LGM9MDtjPGEubGVuZ3RoOysrYyliW2FbY11dPWM7cmV0dXJuIGJ9ZnVuY3Rpb24gSigpe3ZhciBhPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7YSs9YS50b0xvd2VyQ2FzZSgpKyIwMTIzNDU2Nzg5LV8iO3JldHVybiBhKyIuIn12YXIgSSxLOwpmdW5jdGlvbiBhYShhKXtmdW5jdGlvbiBiKGspe2Zvcig7ZDxhLmxlbmd0aDspe3ZhciBtPWEuY2hhckF0KGQrKyksbD1LW21dO2lmKG51bGwhPWwpcmV0dXJuIGw7aWYoIS9eW1xzXHhhMF0qJC8udGVzdChtKSl0aHJvdyBFcnJvcigiVW5rbm93biBiYXNlNjQgZW5jb2RpbmcgYXQgY2hhcjogIittKTt9cmV0dXJuIGt9ST1JfHxKKCk7Sz1LfHxIKCk7Zm9yKHZhciBjPSIiLGQ9MDs7KXt2YXIgZT1iKC0xKSxmPWIoMCksZz1iKDY0KSxoPWIoNjQpO2lmKDY0PT09aCYmLTE9PT1lKXJldHVybiBjO2MrPVN0cmluZy5mcm9tQ2hhckNvZGUoZTw8MnxmPj40KTs2NCE9ZyYmKGMrPVN0cmluZy5mcm9tQ2hhckNvZGUoZjw8NCYyNDB8Zz4+MiksNjQhPWgmJihjKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGc8PDYmMTkyfGgpKSl9fTt2YXIgTDt2YXIgTj1mdW5jdGlvbigpe3ZhciBhPWJhLGI9Y2EsYz1NKCksZD1mdW5jdGlvbihnKXthKGcudGFyZ2V0fHxnLnNyY0VsZW1lbnR8fHt9KX0sZT1mdW5jdGlvbihnKXtiKGcudGFyZ2V0fHxnLnNyY0VsZW1lbnR8fHt9KX07aWYoIWMuaW5pdCl7eSgibW91c2Vkb3duIixkKTt5KCJrZXl1cCIsZCk7eSgic3VibWl0IixlKTt2YXIgZj1IVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnN1Ym1pdDtIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnN1Ym1pdD1mdW5jdGlvbigpe2IodGhpcyk7Zi5jYWxsKHRoaXMpfTtjLmluaXQ9ITB9fSxPPWZ1bmN0aW9uKGEsYixjLGQsZSl7YT17Y2FsbGJhY2s6YSxkb21haW5zOmIsZnJhZ21lbnQ6Mj09PWMscGxhY2VtZW50OmMsZm9ybXM6ZCxzYW1lSG9zdDplfTtNKCkuZGVjb3JhdG9ycy5wdXNoKGEpfSxQPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9TSgpLmRlY29yYXRvcnMsZT17fSxmPTA7ZjxkLmxlbmd0aDsrK2Ype3ZhciBnPWRbZl0saDtpZihoPQohY3x8Zy5mb3JtcylhOntoPWcuZG9tYWluczt2YXIgaz1hLG09ISFnLnNhbWVIb3N0O2lmKGgmJihtfHxrIT09eC5sb2NhdGlvbi5ob3N0bmFtZSkpZm9yKHZhciBsPTA7bDxoLmxlbmd0aDtsKyspaWYoaFtsXWluc3RhbmNlb2YgUmVnRXhwKXtpZihoW2xdLnRlc3Qoaykpe2g9ITA7YnJlYWsgYX19ZWxzZSBpZigwPD1rLmluZGV4T2YoaFtsXSl8fG0mJjA8PWhbbF0uaW5kZXhPZihrKSl7aD0hMDticmVhayBhfWg9ITF9aCYmKGg9Zy5wbGFjZW1lbnQsdm9pZCAwPT1oJiYoaD1nLmZyYWdtZW50PzI6MSksaD09PWImJnEoZSxnLmNhbGxiYWNrKCkpKX1yZXR1cm4gZX0sTT1mdW5jdGlvbigpe3ZhciBhPXt9O3ZhciBiPXYuZ29vZ2xlX3RhZ19kYXRhO3YuZ29vZ2xlX3RhZ19kYXRhPXZvaWQgMD09PWI/YTpiO2E9di5nb29nbGVfdGFnX2RhdGE7Yj1hLmdsO2ImJmIuZGVjb3JhdG9yc3x8KGI9e2RlY29yYXRvcnM6W119LGEuZ2w9Yik7cmV0dXJuIGJ9O3ZhciBkYT0vKC4qPylcKiguKj8pXCooLiopLyxlYT0vKFtePyNdKykoXD9bXiNdKik/KCMuKik/LztmdW5jdGlvbiBRKGEpe3JldHVybiBuZXcgUmVnRXhwKCIoLio/KShefCYpIithKyI9KFteJl0qKSY/KC4qKSIpfQp2YXIgUz1mdW5jdGlvbihhKXt2YXIgYj1bXSxjO2ZvcihjIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShjKSl7dmFyIGQ9YVtjXTtpZih2b2lkIDAhPT1kJiZkPT09ZCYmbnVsbCE9PWQmJiJbb2JqZWN0IE9iamVjdF0iIT09ZC50b1N0cmluZygpKXtiLnB1c2goYyk7dmFyIGU9YixmPWUucHVzaDtkPVN0cmluZyhkKTtJPUl8fEooKTtLPUt8fEgoKTtmb3IodmFyIGc9W10saD0wO2g8ZC5sZW5ndGg7aCs9Myl7dmFyIGs9aCsxPGQubGVuZ3RoLG09aCsyPGQubGVuZ3RoLGw9ZC5jaGFyQ29kZUF0KGgpLHU9az9kLmNoYXJDb2RlQXQoaCsxKTowLHc9bT9kLmNoYXJDb2RlQXQoaCsyKTowLGZhPWw+PjI7bD0obCYzKTw8NHx1Pj40O3U9KHUmMTUpPDwyfHc+PjY7dyY9NjM7bXx8KHc9NjQsa3x8KHU9NjQpKTtnLnB1c2goSVtmYV0sSVtsXSxJW3VdLElbd10pfWYuY2FsbChlLGcuam9pbigiIikpfX1hPWIuam9pbigiKiIpO3JldHVyblsiMSIsUihhKSxhXS5qb2luKCIqIil9LFI9ZnVuY3Rpb24oYSwKYil7YT1bd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQsKG5ldyBEYXRlKS5nZXRUaW1lem9uZU9mZnNldCgpLHdpbmRvdy5uYXZpZ2F0b3IudXNlckxhbmd1YWdlfHx3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlLE1hdGguZmxvb3IoKG5ldyBEYXRlKS5nZXRUaW1lKCkvNjAvMUUzKS0odm9pZCAwPT09Yj8wOmIpLGFdLmpvaW4oIioiKTtpZighKGI9TCkpe2I9QXJyYXkoMjU2KTtmb3IodmFyIGM9MDsyNTY+YztjKyspe2Zvcih2YXIgZD1jLGU9MDs4PmU7ZSsrKWQ9ZCYxP2Q+Pj4xXjM5ODgyOTIzODQ6ZD4+PjE7YltjXT1kfX1MPWI7Yj00Mjk0OTY3Mjk1O2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYj1iPj4+OF5MWyhiXmEuY2hhckNvZGVBdChjKSkmMjU1XTtyZXR1cm4oKGJeLTEpPj4+MCkudG9TdHJpbmcoMzYpfSxpYT1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9Ryh2LmxvY2F0aW9uLmhyZWYpLGQ9Yy5zZWFyY2gucmVwbGFjZSgiPyIsIiIpO3ZhciBlPUMoZCwKIl9nbCIsITApO2IucXVlcnk9VChlfHwiIil8fHt9O2U9RihjLCJmcmFnbWVudCIpO3ZhciBmPWUubWF0Y2goUSgiX2dsIikpO2IuZnJhZ21lbnQ9VChmJiZmWzNdfHwiIil8fHt9O2EmJmhhKGMsZCxlKX19O2Z1bmN0aW9uIFUoYSxiKXtpZihhPVEoYSkuZXhlYyhiKSl7dmFyIGM9YVsyXSxkPWFbNF07Yj1hWzFdO2QmJihiPWIrYytkKX1yZXR1cm4gYn0KdmFyIGhhPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGYsZyl7Zj1VKCJfZ2wiLGYpO2YubGVuZ3RoJiYoZj1nK2YpO3JldHVybiBmfWlmKHYuaGlzdG9yeSYmdi5oaXN0b3J5LnJlcGxhY2VTdGF0ZSl7dmFyIGU9USgiX2dsIik7aWYoZS50ZXN0KGIpfHxlLnRlc3QoYykpYT1GKGEsInBhdGgiKSxiPWQoYiwiPyIpLGM9ZChjLCIjIiksdi5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSx2b2lkIDAsIiIrYStiK2MpfX0sVD1mdW5jdGlvbihhKXt2YXIgYj12b2lkIDA9PT1iPzM6Yjt0cnl7aWYoYSl7YTp7Zm9yKHZhciBjPTA7Mz5jOysrYyl7dmFyIGQ9ZGEuZXhlYyhhKTtpZihkKXt2YXIgZT1kO2JyZWFrIGF9YT1kZWNvZGVVUklDb21wb25lbnQoYSl9ZT12b2lkIDB9aWYoZSYmIjEiPT09ZVsxXSl7dmFyIGY9ZVsyXSxnPWVbM107YTp7Zm9yKGU9MDtlPGI7KytlKWlmKGY9PT1SKGcsZSkpe3ZhciBoPSEwO2JyZWFrIGF9aD0hMX1pZihoKXtiPXt9O3ZhciBrPWc/Zy5zcGxpdCgiKiIpOgpbXTtmb3IoZz0wO2c8ay5sZW5ndGg7Zys9MiliW2tbZ11dPWFhKGtbZysxXSk7cmV0dXJuIGJ9fX19Y2F0Y2gobSl7fX07ZnVuY3Rpb24gVihhLGIsYyxkKXtmdW5jdGlvbiBlKGspe2s9VShhLGspO3ZhciBtPWsuY2hhckF0KGsubGVuZ3RoLTEpO2smJiImIiE9PW0mJihrKz0iJiIpO3JldHVybiBrK2h9ZD12b2lkIDA9PT1kPyExOmQ7dmFyIGY9ZWEuZXhlYyhjKTtpZighZilyZXR1cm4iIjtjPWZbMV07dmFyIGc9ZlsyXXx8IiI7Zj1mWzNdfHwiIjt2YXIgaD1hKyI9IitiO2Q/Zj0iIyIrZShmLnN1YnN0cmluZygxKSk6Zz0iPyIrZShnLnN1YnN0cmluZygxKSk7cmV0dXJuIiIrYytnK2Z9CmZ1bmN0aW9uIFcoYSxiKXt2YXIgYz0iRk9STSI9PT0oYS50YWdOYW1lfHwiIikudG9VcHBlckNhc2UoKSxkPVAoYiwxLGMpLGU9UChiLDIsYyk7Yj1QKGIsMyxjKTtyKGQpJiYoZD1TKGQpLGM/WCgiX2dsIixkLGEpOlkoIl9nbCIsZCxhLCExKSk7IWMmJnIoZSkmJihjPVMoZSksWSgiX2dsIixjLGEsITApKTtmb3IodmFyIGYgaW4gYiliLmhhc093blByb3BlcnR5KGYpJiZaKGYsYltmXSxhKX1mdW5jdGlvbiBaKGEsYixjLGQpe2lmKGMudGFnTmFtZSl7aWYoImEiPT09Yy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIFkoYSxiLGMsZCk7aWYoImZvcm0iPT09Yy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIFgoYSxiLGMpfWlmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gVihhLGIsYyxkKX1mdW5jdGlvbiBZKGEsYixjLGQpe2MuaHJlZiYmKGE9VihhLGIsYy5ocmVmLHZvaWQgMD09PWQ/ITE6ZCksdC50ZXN0KGEpJiYoYy5ocmVmPWEpKX0KZnVuY3Rpb24gWChhLGIsYyl7aWYoYyYmYy5hY3Rpb24pe3ZhciBkPShjLm1ldGhvZHx8IiIpLnRvTG93ZXJDYXNlKCk7aWYoImdldCI9PT1kKXtkPWMuY2hpbGROb2Rlc3x8W107Zm9yKHZhciBlPSExLGY9MDtmPGQubGVuZ3RoO2YrKyl7dmFyIGc9ZFtmXTtpZihnLm5hbWU9PT1hKXtnLnNldEF0dHJpYnV0ZSgidmFsdWUiLGIpO2U9ITA7YnJlYWt9fWV8fChkPXguY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxkLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGQuc2V0QXR0cmlidXRlKCJuYW1lIixhKSxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLGIpLGMuYXBwZW5kQ2hpbGQoZCkpfWVsc2UicG9zdCI9PT1kJiYoYT1WKGEsYixjLmFjdGlvbiksdC50ZXN0KGEpJiYoYy5hY3Rpb249YSkpfX0KdmFyIGJhPWZ1bmN0aW9uKGEpe3RyeXthOntmb3IodmFyIGI9MTAwO2EmJjA8Yjspe2lmKGEuaHJlZiYmYS5ub2RlTmFtZS5tYXRjaCgvXmEoPzpyZWEpPyQvaSkpe3ZhciBjPWE7YnJlYWsgYX1hPWEucGFyZW50Tm9kZTtiLS19Yz1udWxsfWlmKGMpe3ZhciBkPWMucHJvdG9jb2w7Imh0dHA6IiE9PWQmJiJodHRwczoiIT09ZHx8VyhjLGMuaG9zdG5hbWUpfX1jYXRjaChlKXt9fSxjYT1mdW5jdGlvbihhKXt0cnl7aWYoYS5hY3Rpb24pe3ZhciBiPUYoRyhhLmFjdGlvbiksImhvc3QiKTtXKGEsYil9fWNhdGNoKGMpe319O3AoImdvb2dsZV90YWdfZGF0YS5nbEJyaWRnZS5hdXRvIixmdW5jdGlvbihhLGIsYyxkKXtOKCk7TyhhLGIsImZyYWdtZW50Ij09PWM/MjoxLCEhZCwhMSl9KTtwKCJnb29nbGVfdGFnX2RhdGEuZ2xCcmlkZ2UucGFzc3Rocm91Z2giLGZ1bmN0aW9uKGEsYixjKXtOKCk7TyhhLFtFKHYubG9jYXRpb24sImhvc3QiLCEwKV0sYiwhIWMsITApfSk7cCgiZ29vZ2xlX3RhZ19kYXRhLmdsQnJpZGdlLmRlY29yYXRlIixmdW5jdGlvbihhLGIsYyl7YT1TKGEpO3JldHVybiBaKCJfZ2wiLGEsYiwhIWMpfSk7cCgiZ29vZ2xlX3RhZ19kYXRhLmdsQnJpZGdlLmdlbmVyYXRlIixTKTtwKCJnb29nbGVfdGFnX2RhdGEuZ2xCcmlkZ2UuZ2V0IixmdW5jdGlvbihhLGIpe3ZhciBjPWlhKCEhYik7Yj1NKCk7Yi5kYXRhfHwoYi5kYXRhPXtxdWVyeTp7fSxmcmFnbWVudDp7fX0sYyhiLmRhdGEpKTtjPXt9O2lmKGI9Yi5kYXRhKXEoYyxiLnF1ZXJ5KSxhJiZxKGMsYi5mcmFnbWVudCk7cmV0dXJuIGN9KTt9KSh3aW5kb3cpOwooZnVuY3Rpb24oKXtmdW5jdGlvbiBMYShhKXt2YXIgYj0xLGM7aWYoYSlmb3IoYj0wLGM9YS5sZW5ndGgtMTswPD1jO2MtLSl7dmFyIGQ9YS5jaGFyQ29kZUF0KGMpO2I9KGI8PDYmMjY4NDM1NDU1KStkKyhkPDwxNCk7ZD1iJjI2NjMzODMwNDtiPTAhPWQ/Yl5kPj4yMTpifXJldHVybiBifTsvKgoKIENvcHlyaWdodCBUaGUgQ2xvc3VyZSBMaWJyYXJ5IEF1dGhvcnMuCiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAoqLwp2YXIgJGM9ZnVuY3Rpb24oYSl7dGhpcy5DPWF8fFtdfTskYy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEpe3RoaXMuQ1thXT0hMH07JGMucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPTA7Yjx0aGlzLkMubGVuZ3RoO2IrKyl0aGlzLkNbYl0mJihhW01hdGguZmxvb3IoYi82KV1ePTE8PGIlNik7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fIi5jaGFyQXQoYVtiXXx8MCk7cmV0dXJuIGEuam9pbigiIikrIn4ifTt2YXIgaGE9d2luZG93Lkdvb2dsZUFuYWx5dGljc09iamVjdCx3YTtpZih3YT12b2lkIDAhPWhhKXdhPS0xPChoYS5jb25zdHJ1Y3RvcisiIikuaW5kZXhPZigiU3RyaW5nIik7dmFyIHlhO2lmKHlhPXdhKXt2YXIgZmM9d2luZG93Lkdvb2dsZUFuYWx5dGljc09iamVjdDt5YT1mYz9mYy5yZXBsYWNlKC9eW1xzXHhhMF0rfFtcc1x4YTBdKyQvZywiIik6IiJ9dmFyIGdiPXlhfHwiZ2EiLGpkPS9eKD86dXRtYVwuKT9cZCtcLlxkKyQvLGtkPS9eYW1wLVtcdy4tXXsyMiw2NH0kLyxCYT0hMTt2YXIgdmQ9bmV3ICRjO2Z1bmN0aW9uIEooYSl7dmQuc2V0KGEpfXZhciBUZD1mdW5jdGlvbihhKXthPURkKGEpO2E9bmV3ICRjKGEpO2Zvcih2YXIgYj12ZC5DLnNsaWNlKCksYz0wO2M8YS5DLmxlbmd0aDtjKyspYltjXT1iW2NdfHxhLkNbY107cmV0dXJuKG5ldyAkYyhiKSkuZW5jb2RlKCl9LERkPWZ1bmN0aW9uKGEpe2E9YS5nZXQoR2QpO2thKGEpfHwoYT1bXSk7cmV0dXJuIGF9O3ZhciBlYT1mdW5jdGlvbihhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYX0sa2E9ZnVuY3Rpb24oYSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdChhKSl9LHFhPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPWEmJi0xPChhLmNvbnN0cnVjdG9yKyIiKS5pbmRleE9mKCJTdHJpbmciKX0sRD1mdW5jdGlvbihhLGIpe3JldHVybiAwPT1hLmluZGV4T2YoYil9LHNhPWZ1bmN0aW9uKGEpe3JldHVybiBhP2EucmVwbGFjZSgvXltcc1x4YTBdK3xbXHNceGEwXSskL2csIiIpOiIifSxyYT1mdW5jdGlvbigpe2Zvcih2YXIgYT1PLm5hdmlnYXRvci51c2VyQWdlbnQrKE0uY29va2llP00uY29va2llOiIiKSsoTS5yZWZlcnJlcj9NLnJlZmVycmVyOiIiKSxiPWEubGVuZ3RoLGM9Ty5oaXN0b3J5Lmxlbmd0aDswPGM7KWErPWMtLV5iKys7cmV0dXJuW2hkKCleTGEoYSkmMjE0NzQ4MzY0NyxNYXRoLnJvdW5kKChuZXcgRGF0ZSkuZ2V0VGltZSgpLwoxRTMpXS5qb2luKCIuIil9LHRhPWZ1bmN0aW9uKGEpe3ZhciBiPU0uY3JlYXRlRWxlbWVudCgiaW1nIik7Yi53aWR0aD0xO2IuaGVpZ2h0PTE7Yi5zcmM9YTtyZXR1cm4gYn0sdWE9ZnVuY3Rpb24oKXt9LEs9ZnVuY3Rpb24oYSl7aWYoZW5jb2RlVVJJQ29tcG9uZW50IGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChhKTtKKDI4KTtyZXR1cm4gYX0sTD1mdW5jdGlvbihhLGIsYyxkKXt0cnl7YS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMsISFkKTphLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrYixjKX1jYXRjaChlKXtKKDI3KX19LGY9L15bXHdcLTovLj89JiUhXFtcXV0rJC8sTmQ9L15bXHcrL18tXStbPV17MCwyfSQvLGZmPW51bGwsSWQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighZmYpe2ZmPXtjcmVhdGVTY3JpcHRVUkw6ZnVuY3Rpb24oY2Epe3JldHVybiBjYX0sY3JlYXRlSFRNTDpmdW5jdGlvbihjYSl7cmV0dXJuIGNhfX07CnRyeXtmZj13aW5kb3cudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiZ29vZ2xlLWFuYWx5dGljcyIsZmYpfWNhdGNoKGNhKXt9fWlmKGEpe3ZhciBnPU0ucXVlcnlTZWxlY3RvciYmTS5xdWVyeVNlbGVjdG9yKCJzY3JpcHRbbm9uY2VdIil8fG51bGw7Zz1nP2cubm9uY2V8fGcuZ2V0QXR0cmlidXRlJiZnLmdldEF0dHJpYnV0ZSgibm9uY2UiKXx8IiI6IiI7Yz8oZT1kPSIiLGImJmYudGVzdChiKSYmKGQ9JyBpZD0iJytiKyciJyksZyYmTmQudGVzdChnKSYmKGU9JyBub25jZT0iJytnKyciJyksZi50ZXN0KGEpJiZNLndyaXRlKGZmLmNyZWF0ZUhUTUwoIjxzY3JpcHQiK2QrZSsnIHNyYz0iJythKyciPlx4M2Mvc2NyaXB0PicpKSk6KGM9TS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxjLnR5cGU9InRleHQvamF2YXNjcmlwdCIsYy5hc3luYz0hMCxjLnNyYz1mZi5jcmVhdGVTY3JpcHRVUkwoYSksZCYmKGMub25sb2FkPWQpLGUmJihjLm9uZXJyb3I9ZSksYiYmKGMuaWQ9YiksZyYmYy5zZXRBdHRyaWJ1dGUoIm5vbmNlIiwKZyksYT1NLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXSxhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGMsYSkpfX0sYmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gRShNLmxvY2F0aW9uW2I/ImhyZWYiOiJzZWFyY2giXSxhKX0sRT1mdW5jdGlvbihhLGIpe3JldHVybihhPWEubWF0Y2goIig/OiZ8I3xcXD8pIitLKGIpLnJlcGxhY2UoLyhbLiorP149IToke30oKXxcW1xdXC9cXF0pL2csIlxcJDEiKSsiPShbXiYjXSopIikpJiYyPT1hLmxlbmd0aD9hWzFdOiIifSx4YT1mdW5jdGlvbigpe3ZhciBhPSIiK00ubG9jYXRpb24uaG9zdG5hbWU7cmV0dXJuIDA9PWEuaW5kZXhPZigid3d3LiIpP2Euc3Vic3RyaW5nKDQpOmF9LGRlPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5pbmRleE9mKGIpO2lmKDU9PWN8fDY9PWMpaWYoYT1hLmNoYXJBdChjK2IubGVuZ3RoKSwiLyI9PWF8fCI/Ij09YXx8IiI9PWF8fCI6Ij09YSlyZXR1cm4hMDtyZXR1cm4hMX0semE9ZnVuY3Rpb24oYSxiKXtpZigxPT0KYi5sZW5ndGgmJm51bGwhPWJbMF0mJiJvYmplY3QiPT09dHlwZW9mIGJbMF0pcmV0dXJuIGJbMF07Zm9yKHZhciBjPXt9LGQ9TWF0aC5taW4oYS5sZW5ndGgrMSxiLmxlbmd0aCksZT0wO2U8ZDtlKyspaWYoIm9iamVjdCI9PT10eXBlb2YgYltlXSl7Zm9yKHZhciBnIGluIGJbZV0pYltlXS5oYXNPd25Qcm9wZXJ0eShnKSYmKGNbZ109YltlXVtnXSk7YnJlYWt9ZWxzZSBlPGEubGVuZ3RoJiYoY1thW2VdXT1iW2VdKTtyZXR1cm4gY30sRWU9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihiPT1hW2NdKXJldHVybiEwO3JldHVybiExfTt2YXIgZWU9ZnVuY3Rpb24oKXt0aGlzLm9hPVtdO3RoaXMuZWE9e307dGhpcy5tPXt9fTtlZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLm9hLnB1c2goYSk7Yz90aGlzLm1bIjoiK2FdPWI6dGhpcy5lYVsiOiIrYV09Yn07ZWUucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tLmhhc093blByb3BlcnR5KCI6IithKT90aGlzLm1bIjoiK2FdOnRoaXMuZWFbIjoiK2FdfTtlZS5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wO2I8dGhpcy5vYS5sZW5ndGg7YisrKXt2YXIgYz10aGlzLm9hW2JdLGQ9dGhpcy5nZXQoYyk7ZCYmYShjLGQpfX07dmFyIE89d2luZG93LE09ZG9jdW1lbnQsamY9ZG9jdW1lbnQuY3VycmVudFNjcmlwdD9kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYzoiIix2YT1mdW5jdGlvbihhLGIpe3JldHVybiBzZXRUaW1lb3V0KGEsYil9O3ZhciBRYT13aW5kb3csWmE9ZG9jdW1lbnQsRz1mdW5jdGlvbihhKXt2YXIgYj1RYS5fZ2FVc2VyUHJlZnM7aWYoYiYmYi5pb28mJmIuaW9vKCl8fGEmJiEwPT09UWFbImdhLWRpc2FibGUtIithXSlyZXR1cm4hMDt0cnl7dmFyIGM9UWEuZXh0ZXJuYWw7aWYoYyYmYy5fZ2FVc2VyUHJlZnMmJiJvbyI9PWMuX2dhVXNlclByZWZzKXJldHVybiEwfWNhdGNoKGcpe31hPVtdO2I9U3RyaW5nKFphLmNvb2tpZSkuc3BsaXQoIjsiKTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLnNwbGl0KCI9IiksZT1kWzBdLnJlcGxhY2UoL15ccyp8XHMqJC9nLCIiKTtlJiYiQU1QX1RPS0VOIj09ZSYmKChkPWQuc2xpY2UoMSkuam9pbigiPSIpLnJlcGxhY2UoL15ccyp8XHMqJC9nLCIiKSkmJihkPWRlY29kZVVSSUNvbXBvbmVudChkKSksYS5wdXNoKGQpKX1mb3IoYj0wO2I8YS5sZW5ndGg7YisrKWlmKCIkT1BUX09VVCI9PWFbYl0pcmV0dXJuITA7cmV0dXJuIFphLmdldEVsZW1lbnRCeUlkKCJfX2dhT3B0T3V0RXh0ZW5zaW9uIik/CiEwOiExfTt2YXIgQ2E9ZnVuY3Rpb24oYSl7dmFyIGI9W10sYz1NLmNvb2tpZS5zcGxpdCgiOyIpO2E9bmV3IFJlZ0V4cCgiXlxccyoiK2ErIj1cXHMqKC4qPylcXHMqJCIpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdLm1hdGNoKGEpO2UmJmIucHVzaChlWzFdKX1yZXR1cm4gYn0semM9ZnVuY3Rpb24oYSxiLGMsZCxlLGcsY2Epe2U9RyhlKT8hMTplYi50ZXN0KE0ubG9jYXRpb24uaG9zdG5hbWUpfHwiLyI9PWMmJnZjLnRlc3QoZCk/ITE6ITA7aWYoIWUpcmV0dXJuITE7YiYmMTIwMDxiLmxlbmd0aCYmKGI9Yi5zdWJzdHJpbmcoMCwxMjAwKSk7Yz1hKyI9IitiKyI7IHBhdGg9IitjKyI7ICI7ZyYmKGMrPSJleHBpcmVzPSIrKG5ldyBEYXRlKChuZXcgRGF0ZSkuZ2V0VGltZSgpK2cpKS50b0dNVFN0cmluZygpKyI7ICIpO2QmJiJub25lIiE9PWQmJihjKz0iZG9tYWluPSIrZCsiOyIpO2NhJiYoYys9Y2ErIjsiKTtkPU0uY29va2llO00uY29va2llPWM7aWYoIShkPWQhPU0uY29va2llKSlhOnthPQpDYShhKTtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKGI9PWFbZF0pe2Q9ITA7YnJlYWsgYX1kPSExfXJldHVybiBkfSxDYz1mdW5jdGlvbihhKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50P2VuY29kZVVSSUNvbXBvbmVudChhKS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKTphfSx2Yz0vXih3d3dcLik/Z29vZ2xlKFwuY29tPyk/KFwuW2Etel17Mn0pPyQvLGViPS8oXnxcLilkb3VibGVjbGlja1wubmV0JC9pO3ZhciBPZT1mdW5jdGlvbihhKXt2YXIgYj1bXSxjPU0uY29va2llLnNwbGl0KCI7Iik7YT1uZXcgUmVnRXhwKCJeXFxzKiIrKGF8fCJfZ2FjIikrIl8oVUEtXFxkKy1cXGQrKT1cXHMqKC4rPylcXHMqJCIpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdLm1hdGNoKGEpO2UmJmIucHVzaCh7amE6ZVsxXSx2YWx1ZTplWzJdLHRpbWVzdGFtcDpOdW1iZXIoZVsyXS5zcGxpdCgiLiIpWzFdKXx8MH0pfWIuc29ydChmdW5jdGlvbihnLGNhKXtyZXR1cm4gY2EudGltZXN0YW1wLWcudGltZXN0YW1wfSk7cmV0dXJuIGJ9OwpmdW5jdGlvbiBkZihhLGIsYyl7Yj1PZShiKTt2YXIgZD17fTtpZighYnx8IWIubGVuZ3RoKXJldHVybiBkO2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZz1iW2VdLnZhbHVlLnNwbGl0KCIuIik7aWYoIjEiIT09Z1swXXx8YyYmMz5nLmxlbmd0aHx8IWMmJjMhPT1nLmxlbmd0aClhJiYoYS5uYT0hMCk7ZWxzZSBpZihOdW1iZXIoZ1sxXSkpe2RbYltlXS5qYV0/YSYmKGEucGE9ITApOmRbYltlXS5qYV09W107dmFyIGNhPXt2ZXJzaW9uOmdbMF0sdGltZXN0YW1wOjFFMypOdW1iZXIoZ1sxXSkscWE6Z1syXX07YyYmMzxnLmxlbmd0aCYmKGNhLmxhYmVscz1nLnNsaWNlKDMpKTtkW2JbZV0uamFdLnB1c2goY2EpfX1yZXR1cm4gZH07dmFyIEZhLEdhLGZiLEFiLGphPS9eaHR0cHM/OlwvXC9bXi9dKmNkblwuYW1wcHJvamVjdFwub3JnXC8vLFVlPS9eKD86d3d3XC58bVwufGFtcFwuKSsvLFViPVtdLGRhPWZ1bmN0aW9uKGEpe2lmKHllKGFbS2RdKSl7aWYodm9pZCAwPT09QWIpe3ZhciBiO2lmKGI9KGI9RGUuZ2V0KCkpJiZiLl9nYXx8dm9pZCAwKUFiPWIsSig4MSl9aWYodm9pZCAwIT09QWIpcmV0dXJuIGFbUV18fChhW1FdPUFiKSwhMX1pZihhW0tkXSl7Sig2Nyk7aWYoYVthY10mJiJjb29raWUiIT1hW2FjXSlyZXR1cm4hMTtpZih2b2lkIDAhPT1BYilhW1FdfHwoYVtRXT1BYik7ZWxzZXthOntiPVN0cmluZyhhW1ddfHx4YSgpKTt2YXIgYz1TdHJpbmcoYVtZYl18fCIvIiksZD1DYShTdHJpbmcoYVtVXXx8Il9nYSIpKTtiPW5hKGQsYixjKTtpZighYnx8amQudGVzdChiKSliPSEwO2Vsc2UgaWYoYj1DYSgiQU1QX1RPS0VOIiksMD09Yi5sZW5ndGgpYj0hMDtlbHNle2lmKDE9PWIubGVuZ3RoJiYoYj1kZWNvZGVVUklDb21wb25lbnQoYlswXSksCiIkUkVUUklFVklORyI9PWJ8fCIkT1BUX09VVCI9PWJ8fCIkRVJST1IiPT1ifHwiJE5PVF9GT1VORCI9PWIpKXtiPSEwO2JyZWFrIGF9Yj0hMX19aWYoYiYmdGMoaWMsU3RyaW5nKGFbTmFdKSkpcmV0dXJuITB9fXJldHVybiExfSxpYz1mdW5jdGlvbigpe1ouRChbdWFdKX0sdGM9ZnVuY3Rpb24oYSxiKXt2YXIgYz1DYSgiQU1QX1RPS0VOIik7aWYoMTxjLmxlbmd0aClyZXR1cm4gSig1NSksITE7Yz1kZWNvZGVVUklDb21wb25lbnQoY1swXXx8IiIpO2lmKCIkT1BUX09VVCI9PWN8fCIkRVJST1IiPT1jfHxHKGIpKXJldHVybiBKKDYyKSwhMTtpZighamEudGVzdChNLnJlZmVycmVyKSYmIiROT1RfRk9VTkQiPT1jKXJldHVybiBKKDY4KSwhMTtpZih2b2lkIDAhPT1BYilyZXR1cm4gSig1NiksdmEoZnVuY3Rpb24oKXthKEFiKX0sMCksITA7aWYoRmEpcmV0dXJuIFViLnB1c2goYSksITA7aWYoIiRSRVRSSUVWSU5HIj09YylyZXR1cm4gSig1NyksdmEoZnVuY3Rpb24oKXt0YyhhLGIpfSwKMUU0KSwhMDtGYT0hMDtjJiYiJCIhPWNbMF18fCh4YygiJFJFVFJJRVZJTkciLDNFNCksc2V0VGltZW91dChNYywzRTQpLGM9IiIpO3JldHVybiBQYyhjLGIpPyhVYi5wdXNoKGEpLCEwKTohMX0sUGM9ZnVuY3Rpb24oYSxiLGMpe2lmKCF3aW5kb3cuSlNPTilyZXR1cm4gSig1OCksITE7dmFyIGQ9Ty5YTUxIdHRwUmVxdWVzdDtpZighZClyZXR1cm4gSig1OSksITE7dmFyIGU9bmV3IGQ7aWYoISgid2l0aENyZWRlbnRpYWxzImluIGUpKXJldHVybiBKKDYwKSwhMTtlLm9wZW4oIlBPU1QiLChjfHwiaHR0cHM6Ly9hbXBjaWQuZ29vZ2xlLmNvbS92MS9wdWJsaXNoZXI6Z2V0Q2xpZW50SWQiKSsiP2tleT1BSXphU3lBNjVsRUhVRWl6SXNOdGxiTm8tbDJLMThkVDY4MG5zYU0iLCEwKTtlLndpdGhDcmVkZW50aWFscz0hMDtlLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsInRleHQvcGxhaW4iKTtlLm9ubG9hZD1mdW5jdGlvbigpe0ZhPSExO2lmKDQ9PWUucmVhZHlTdGF0ZSl7dHJ5ezIwMCE9CmUuc3RhdHVzJiYoSig2MSksUWMoIiIsIiRFUlJPUiIsM0U0KSk7dmFyIGc9SlNPTi5wYXJzZShlLnJlc3BvbnNlVGV4dCk7Zy5vcHRPdXQ/KEooNjMpLFFjKCIiLCIkT1BUX09VVCIsMzE1MzZFNikpOmcuY2xpZW50SWQ/UWMoZy5jbGllbnRJZCxnLnNlY3VyaXR5VG9rZW4sMzE1MzZFNik6IWMmJmcuYWx0ZXJuYXRlVXJsPyhHYSYmY2xlYXJUaW1lb3V0KEdhKSxGYT0hMCxQYyhhLGIsZy5hbHRlcm5hdGVVcmwpKTooSig2NCksUWMoIiIsIiROT1RfRk9VTkQiLDM2RTUpKX1jYXRjaChjYSl7Sig2NSksUWMoIiIsIiRFUlJPUiIsM0U0KX1lPW51bGx9fTtkPXtvcmlnaW5TY29wZToiQU1QX0VDSURfR09PR0xFIn07YSYmKGQuc2VjdXJpdHlUb2tlbj1hKTtlLnNlbmQoSlNPTi5zdHJpbmdpZnkoZCkpO0dhPXZhKGZ1bmN0aW9uKCl7Sig2Nik7UWMoIiIsIiRFUlJPUiIsM0U0KX0sMUU0KTtyZXR1cm4hMH0sTWM9ZnVuY3Rpb24oKXtGYT0hMX0seGM9ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDA9PT0KZmIpe2ZiPSIiO2Zvcih2YXIgYz1pZCgpLGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTtpZih6YygiQU1QX1RPS0VOIixlbmNvZGVVUklDb21wb25lbnQoYSksIi8iLGUsIiIsYikpe2ZiPWU7cmV0dXJufX19emMoIkFNUF9UT0tFTiIsZW5jb2RlVVJJQ29tcG9uZW50KGEpLCIvIixmYiwiIixiKX0sUWM9ZnVuY3Rpb24oYSxiLGMpe0dhJiZjbGVhclRpbWVvdXQoR2EpO2ImJnhjKGIsYyk7QWI9YTtiPVViO1ViPVtdO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspYltjXShhKX0seWU9ZnVuY3Rpb24oYSl7YTp7aWYoamEudGVzdChNLnJlZmVycmVyKSl7dmFyIGI9TS5sb2NhdGlvbi5ob3N0bmFtZS5yZXBsYWNlKFVlLCIiKTtiOnt2YXIgYz1NLnJlZmVycmVyO2M9Yy5yZXBsYWNlKC9eaHR0cHM/OlwvXC8vLCIiKTt2YXIgZD1jLnJlcGxhY2UoL15bXi9dKy8sIiIpLnNwbGl0KCIvIiksZT1kWzJdO2Q9KGQ9InMiPT1lP2RbM106ZSk/ZGVjb2RlVVJJQ29tcG9uZW50KGQpOmQ7aWYoIWQpe2lmKDA9PQpjLmluZGV4T2YoInhuLS0iKSl7Yz0iIjticmVhayBifShjPWMubWF0Y2goLyguKilcLmNkblwuYW1wcHJvamVjdFwub3JnXC8/JC8pKSYmMj09Yy5sZW5ndGgmJihkPWNbMV0ucmVwbGFjZSgvLS9nLCIuIikucmVwbGFjZSgvXC5cLi9nLCItIikpfWM9ZD9kLnJlcGxhY2UoVWUsIiIpOiIifShkPWI9PT1jKXx8KGM9Ii4iK2MsZD1iLnN1YnN0cmluZyhiLmxlbmd0aC1jLmxlbmd0aCxiLmxlbmd0aCk9PT1jKTtpZihkKXtiPSEwO2JyZWFrIGF9ZWxzZSBKKDc4KX1iPSExfXJldHVybiBiJiYhMSE9PWF9O3ZhciBiZD1mdW5jdGlvbihhKXtyZXR1cm4oYT8iaHR0cHM6IjpCYXx8Imh0dHBzOiI9PU0ubG9jYXRpb24ucHJvdG9jb2w/Imh0dHBzOiI6Imh0dHA6IikrIi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tIn0sR2U9ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2RlZmF1bHQ6Y2FzZSAxOnJldHVybiJodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9ndG0vanM/aWQ9IjtjYXNlIDI6cmV0dXJuImh0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0YWcvanM/aWQ9In19LERhPWZ1bmN0aW9uKGEpe3RoaXMubmFtZT0ibGVuIjt0aGlzLm1lc3NhZ2U9YSsiLTgxOTIifSxiYT1mdW5jdGlvbihhLGIsYyl7Yz1jfHx1YTtpZigyMDM2Pj1iLmxlbmd0aCl3YyhhLGIsYyk7ZWxzZSBpZig4MTkyPj1iLmxlbmd0aCl4KGEsYixjKXx8d2QoYSxiLGMpfHx3YyhhLGIsYyk7ZWxzZSB0aHJvdyBnZSgibGVuIixiLmxlbmd0aCksbmV3IERhKGIubGVuZ3RoKTt9LHBlPWZ1bmN0aW9uKGEsYiwKYyxkKXtkPWR8fHVhO3dkKGErIj8iK2IsIiIsZCxjKX0sd2M9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRhKGErIj8iK2IpO2Qub25sb2FkPWQub25lcnJvcj1mdW5jdGlvbigpe2Qub25sb2FkPW51bGw7ZC5vbmVycm9yPW51bGw7YygpfX0sd2Q9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9Ty5YTUxIdHRwUmVxdWVzdDtpZighZSlyZXR1cm4hMTt2YXIgZz1uZXcgZTtpZighKCJ3aXRoQ3JlZGVudGlhbHMiaW4gZykpcmV0dXJuITE7YT1hLnJlcGxhY2UoL15odHRwOi8sImh0dHBzOiIpO2cub3BlbigiUE9TVCIsYSwhMCk7Zy53aXRoQ3JlZGVudGlhbHM9ITA7Zy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJ0ZXh0L3BsYWluIik7Zy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZig0PT1nLnJlYWR5U3RhdGUpe2lmKGQmJiJ0ZXh0L3BsYWluIj09PWcuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKXRyeXtFYShkLGcucmVzcG9uc2VUZXh0LGMpfWNhdGNoKGNhKXtnZSgieGhyIiwKInJzcCIpLGMoKX1lbHNlIGMoKTtnPW51bGx9fTtnLnNlbmQoYik7cmV0dXJuITB9LEVhPWZ1bmN0aW9uKGEsYixjKXtpZigxPmIubGVuZ3RoKWdlKCJ4aHIiLCJ2ZXIiLCIwIiksYygpO2Vsc2UgaWYoMzxhLmNvdW50KyspZ2UoInhociIsInRtciIsIiIrYS5jb3VudCksYygpO2Vsc2V7dmFyIGQ9Yi5jaGFyQXQoMCk7aWYoIjEiPT09ZClvYyhhLGIuc3Vic3RyaW5nKDEpLGMpO2Vsc2UgaWYoYS5WJiYiMiI9PT1kKXt2YXIgZT1iLnN1YnN0cmluZygxKS5zcGxpdCgiLCIpLGc9MDtiPWZ1bmN0aW9uKCl7KytnPT09ZS5sZW5ndGgmJmMoKX07Zm9yKGQ9MDtkPGUubGVuZ3RoO2QrKylvYyhhLGVbZF0sYil9ZWxzZSBnZSgieGhyIiwidmVyIixTdHJpbmcoYi5sZW5ndGgpKSxjKCl9fSxvYz1mdW5jdGlvbihhLGIsYyl7aWYoMD09PWIubGVuZ3RoKWMoKTtlbHNle3ZhciBkPWIuY2hhckF0KDApO3N3aXRjaChkKXtjYXNlICJkIjpwZSgiaHR0cHM6Ly9zdGF0cy5nLmRvdWJsZWNsaWNrLm5ldC9qL2NvbGxlY3QiLAphLlUsYSxjKTticmVhaztjYXNlICJnIjp3YygiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9hZHMvZ2EtYXVkaWVuY2VzIixhLmdvb2dsZSxjKTsoYj1iLnN1YnN0cmluZygxKSkmJigvXlthLXouXXsxLDZ9JC8udGVzdChiKT93YygiaHR0cHM6Ly93d3cuZ29vZ2xlLiUvYWRzL2dhLWF1ZGllbmNlcyIucmVwbGFjZSgiJSIsYiksYS5nb29nbGUsdWEpOmdlKCJ0bGQiLCJiY2MiLGIpKTticmVhaztjYXNlICJHIjppZihhLlYpe2EuVigiRy0iK2Iuc3Vic3RyaW5nKDEpKTtjKCk7YnJlYWt9Y2FzZSAieCI6aWYoYS5WKXthLlYoKTtjKCk7YnJlYWt9ZGVmYXVsdDpnZSgieGhyIiwiYnJjIixkKSxjKCl9fX0seD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE8ubmF2aWdhdG9yLnNlbmRCZWFjb24/Ty5uYXZpZ2F0b3Iuc2VuZEJlYWNvbihhLGIpPyhjKCksITApOiExOiExfSxnZT1mdW5jdGlvbihhLGIsYyl7MTw9MTAwKk1hdGgucmFuZG9tKCl8fEcoIj8iKXx8KGE9WyJ0PWVycm9yIiwiX2U9IisKYSwiX3Y9ajk0Iiwic3I9MSJdLGImJmEucHVzaCgiX2Y9IitiKSxjJiZhLnB1c2goIl9tPSIrSyhjLnN1YnN0cmluZygwLDEwMCkpKSxhLnB1c2goImFpcD0xIiksYS5wdXNoKCJ6PSIraGQoKSksd2MoYmQoITApKyIvdS9kIixhLmpvaW4oIiYiKSx1YSkpfTt2YXIgcWM9ZnVuY3Rpb24oKXtyZXR1cm4gTy5nYURhdGE9Ty5nYURhdGF8fHt9fSxoPWZ1bmN0aW9uKGEpe3ZhciBiPXFjKCk7cmV0dXJuIGJbYV09YlthXXx8e319O3ZhciBIYT1mdW5jdGlvbigpe3RoaXMuTT1bXX07SGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhKXt0aGlzLk0ucHVzaChhKX07SGEucHJvdG90eXBlLkQ9ZnVuY3Rpb24oYSl7dHJ5e2Zvcih2YXIgYj0wO2I8dGhpcy5NLmxlbmd0aDtiKyspe3ZhciBjPWEuZ2V0KHRoaXMuTVtiXSk7YyYmZWEoYykmJmMuY2FsbChPLGEpfX1jYXRjaChkKXt9Yj1hLmdldChJYSk7YiE9dWEmJmVhKGIpJiYoYS5zZXQoSWEsdWEsITApLHNldFRpbWVvdXQoYiwxMCkpfTtmdW5jdGlvbiBKYShhKXtpZigxMDAhPWEuZ2V0KEthKSYmTGEoUChhLFEpKSUxRTQ+PTEwMCpSKGEsS2EpKXRocm93ImFib3J0Ijt9ZnVuY3Rpb24gTWEoYSl7aWYoRyhQKGEsTmEpKSl0aHJvdyJhYm9ydCI7fWZ1bmN0aW9uIE9hKCl7dmFyIGE9TS5sb2NhdGlvbi5wcm90b2NvbDtpZigiaHR0cDoiIT1hJiYiaHR0cHM6IiE9YSl0aHJvdyJhYm9ydCI7fQpmdW5jdGlvbiBQYShhKXt0cnl7Ty5uYXZpZ2F0b3Iuc2VuZEJlYWNvbj9KKDQyKTpPLlhNTEh0dHBSZXF1ZXN0JiYid2l0aENyZWRlbnRpYWxzImluIG5ldyBPLlhNTEh0dHBSZXF1ZXN0JiZKKDQwKX1jYXRjaChjKXt9YS5zZXQobGQsVGQoYSksITApO2Euc2V0KEFjLFIoYSxBYykrMSk7dmFyIGI9W107dWUubWFwKGZ1bmN0aW9uKGMsZCl7ZC5GJiYoYz1hLmdldChjKSx2b2lkIDAhPWMmJmMhPWQuZGVmYXVsdFZhbHVlJiYoImJvb2xlYW4iPT10eXBlb2YgYyYmKGMqPTEpLGIucHVzaChkLkYrIj0iK0soIiIrYykpKSl9KTshMT09PWEuZ2V0KHhlKSYmYi5wdXNoKCJucGE9MSIpO2IucHVzaCgiej0iK0JkKCkpO2Euc2V0KFJhLGIuam9pbigiJiIpLCEwKX0KZnVuY3Rpb24gU2EoYSl7dmFyIGI9UChhLGZhKTshYiYmYS5nZXQoVmQpJiYoYj0iYmVhY29uIik7dmFyIGM9UChhLGdkKSxkPVAoYSxvZSksZT1jfHwoZHx8YmQoITEpKyIiKSsiL2NvbGxlY3QiO3N3aXRjaChQKGEsYWQpKXtjYXNlICJkIjplPWN8fChkfHxiZCghMSkrIiIpKyIvai9jb2xsZWN0IjtiPWEuZ2V0KHFlKXx8dm9pZCAwO3BlKGUsUChhLFJhKSxiLGEuWihJYSkpO2JyZWFrO2RlZmF1bHQ6Yj8oYz1QKGEsUmEpLGQ9KGQ9YS5aKElhKSl8fHVhLCJpbWFnZSI9PWI/d2MoZSxjLGQpOiJ4aHIiPT1iJiZ3ZChlLGMsZCl8fCJiZWFjb24iPT1iJiZ4KGUsYyxkKXx8YmEoZSxjLGQpKTpiYShlLFAoYSxSYSksYS5aKElhKSl9ZT1QKGEsTmEpO2U9aChlKTtiPWUuaGl0Y291bnQ7ZS5oaXRjb3VudD1iP2IrMToxO2UuZmlyc3RfaGl0fHwoZS5maXJzdF9oaXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCkpO2U9UChhLE5hKTtkZWxldGUgaChlKS5wZW5kaW5nX2V4cGVyaW1lbnRzO2Euc2V0KElhLAp1YSwhMCl9ZnVuY3Rpb24gSGMoYSl7cWMoKS5leHBJZCYmYS5zZXQoTmMscWMoKS5leHBJZCk7cWMoKS5leHBWYXImJmEuc2V0KE9jLHFjKCkuZXhwVmFyKTt2YXIgYj1QKGEsTmEpO2lmKGI9aChiKS5wZW5kaW5nX2V4cGVyaW1lbnRzKXt2YXIgYz1bXTtmb3IoZCBpbiBiKWIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0mJmMucHVzaChlbmNvZGVVUklDb21wb25lbnQoZCkrIi4iK2VuY29kZVVSSUNvbXBvbmVudChiW2RdKSk7dmFyIGQ9Yy5qb2luKCIhIil9ZWxzZSBkPXZvaWQgMDtkJiYoKGI9YS5nZXQobSkpJiYoZD1iKyIhIitkKSxhLnNldChtLGQsITApKX1mdW5jdGlvbiBjZCgpe2lmKE8ubmF2aWdhdG9yJiYicHJldmlldyI9PU8ubmF2aWdhdG9yLmxvYWRQdXJwb3NlKXRocm93ImFib3J0Ijt9CmZ1bmN0aW9uIHlkKGEpe3ZhciBiPU8uZ2FEZXZJZHN8fFtdO2lmKGthKGIpKXt2YXIgYz1hLmdldCgiJmRpZCIpO3FhKGMpJiYwPGMubGVuZ3RoJiYoYj1iLmNvbmNhdChjLnNwbGl0KCIsIikpKTtjPVtdO2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKUVlKGMsYltkXSl8fGMucHVzaChiW2RdKTswIT1jLmxlbmd0aCYmYS5zZXQoIiZkaWQiLGMuam9pbigiLCIpLCEwKX19ZnVuY3Rpb24gdmIoYSl7aWYoIWEuZ2V0KE5hKSl0aHJvdyJhYm9ydCI7fQpmdW5jdGlvbiBQZShhKXt0cnl7aWYoIWEuZ2V0KFFlKSYmKGEuc2V0KFFlLCEwKSwhYS5nZXQoIiZndG0iKSkpe3ZhciBiPXZvaWQgMCxjPWJlKCJndG1fZGVidWciKTsieCI9PT1jJiYoYj0xKTshYiYmbGYoTnVtYmVyKGMpKSYmKGI9Mik7IWImJkQoTS5yZWZlcnJlciwiaHR0cHM6Ly90YWdhc3Npc3RhbnQuZ29vZ2xlLmNvbS8iKSYmKGI9Myk7IWImJkVlKE0uY29va2llLnNwbGl0KCI7ICIpLCJfX1RBR19BU1NJU1RBTlQ9eCIpJiYoYj00KTtpZighYil7dmFyIGQ9TnVtYmVyKE0uZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS10YWctYXNzaXN0YW50LXByZXNlbnQiKSk7bGYoZCkmJihiPTUpfWlmKGIpe09bImdvb2dsZS50YWdtYW5hZ2VyLmRlYnVndWkyLnF1ZXVlIl18fChPWyJnb29nbGUudGFnbWFuYWdlci5kZWJ1Z3VpMi5xdWV1ZSJdPVtdLElkKCJodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9kZWJ1Zy9ib290c3RyYXA/aWQ9IithLmdldChOYSkrCiImc3JjPUxFR0FDWSZjb25kPSIrYikpO3ZhciBlPU0uY3VycmVudFNjcmlwdDtPWyJnb29nbGUudGFnbWFuYWdlci5kZWJ1Z3VpMi5xdWV1ZSJdLnB1c2goe21lc3NhZ2VUeXBlOiJMRUdBQ1lfQ09OVEFJTkVSX1NUQVJUSU5HIixkYXRhOntpZDphLmdldChOYSksc2NyaXB0U291cmNlOmUmJmUuc3JjfHwiIn19KX19fWNhdGNoKGcpe319ZnVuY3Rpb24gbGYoYSl7dmFyIGI9RGF0ZS5ub3coKTtyZXR1cm4gYTxiKzNFNSYmYT5iLTlFNX07dmFyIGhkPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoMjE0NzQ4MzY0NypNYXRoLnJhbmRvbSgpKX0sQmQ9ZnVuY3Rpb24oKXt0cnl7dmFyIGE9bmV3IFVpbnQzMkFycmF5KDEpO08uY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhKTtyZXR1cm4gYVswXSYyMTQ3NDgzNjQ3fWNhdGNoKGIpe3JldHVybiBoZCgpfX07ZnVuY3Rpb24gVGEoYSl7dmFyIGI9UihhLFVhKTs1MDA8PWImJkooMTUpO3ZhciBjPVAoYSxWYSk7aWYoInRyYW5zYWN0aW9uIiE9YyYmIml0ZW0iIT1jKXtjPVIoYSxXYSk7dmFyIGQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksZT1SKGEsWGEpOzA9PWUmJmEuc2V0KFhhLGQpO2U9TWF0aC5yb3VuZCgyKihkLWUpLzFFMyk7MDxlJiYoYz1NYXRoLm1pbihjK2UsMjApLGEuc2V0KFhhLGQpKTtpZigwPj1jKXRocm93ImFib3J0IjthLnNldChXYSwtLWMpfWEuc2V0KFVhLCsrYil9O3ZhciBZYT1mdW5jdGlvbigpe3RoaXMuZGF0YT1uZXcgZWV9O1lhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7dmFyIGI9JGEoYSksYz10aGlzLmRhdGEuZ2V0KGEpO2ImJnZvaWQgMD09YyYmKGM9ZWEoYi5kZWZhdWx0VmFsdWUpP2IuZGVmYXVsdFZhbHVlKCk6Yi5kZWZhdWx0VmFsdWUpO3JldHVybiBiJiZiLlo/Yi5aKHRoaXMsYSxjKTpjfTt2YXIgUD1mdW5jdGlvbihhLGIpe2E9YS5nZXQoYik7cmV0dXJuIHZvaWQgMD09YT8iIjoiIithfSxSPWZ1bmN0aW9uKGEsYil7YT1hLmdldChiKTtyZXR1cm4gdm9pZCAwPT1hfHwiIj09PWE/MDpOdW1iZXIoYSl9O1lhLnByb3RvdHlwZS5aPWZ1bmN0aW9uKGEpe3JldHVybihhPXRoaXMuZ2V0KGEpKSYmZWEoYSk/YTp1YX07CllhLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe2lmKGEpaWYoIm9iamVjdCI9PXR5cGVvZiBhKWZvcih2YXIgZCBpbiBhKWEuaGFzT3duUHJvcGVydHkoZCkmJmFiKHRoaXMsZCxhW2RdLGMpO2Vsc2UgYWIodGhpcyxhLGIsYyl9O3ZhciBhYj1mdW5jdGlvbihhLGIsYyxkKXtpZih2b2lkIDAhPWMpc3dpdGNoKGIpe2Nhc2UgTmE6d2IudGVzdChjKX12YXIgZT0kYShiKTtlJiZlLm8/ZS5vKGEsYixjLGQpOmEuZGF0YS5zZXQoYixjLGQpfTt2YXIgdWU9bmV3IGVlLHZlPVtdLGJiPWZ1bmN0aW9uKGEsYixjLGQsZSl7dGhpcy5uYW1lPWE7dGhpcy5GPWI7dGhpcy5aPWQ7dGhpcy5vPWU7dGhpcy5kZWZhdWx0VmFsdWU9Y30sJGE9ZnVuY3Rpb24oYSl7dmFyIGI9dWUuZ2V0KGEpO2lmKCFiKWZvcih2YXIgYz0wO2M8dmUubGVuZ3RoO2MrKyl7dmFyIGQ9dmVbY10sZT1kWzBdLmV4ZWMoYSk7aWYoZSl7Yj1kWzFdKGUpO3VlLnNldChiLm5hbWUsYik7YnJlYWt9fXJldHVybiBifSx5Yz1mdW5jdGlvbihhKXt2YXIgYjt1ZS5tYXAoZnVuY3Rpb24oYyxkKXtkLkY9PWEmJihiPWQpfSk7cmV0dXJuIGImJmIubmFtZX0sUz1mdW5jdGlvbihhLGIsYyxkLGUpe2E9bmV3IGJiKGEsYixjLGQsZSk7dWUuc2V0KGEubmFtZSxhKTtyZXR1cm4gYS5uYW1lfSxjYj1mdW5jdGlvbihhLGIpe3ZlLnB1c2goW25ldyBSZWdFeHAoIl4iK2ErIiQiKSxiXSl9LFQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBTKGEsYixjLHZvaWQgMCxkYil9LGRiPWZ1bmN0aW9uKCl7fTt2YXIgaGI9VCgiYXBpVmVyc2lvbiIsInYiKSxpYj1UKCJjbGllbnRWZXJzaW9uIiwiX3YiKTtTKCJhbm9ueW1pemVJcCIsImFpcCIpO3ZhciBqYj1TKCJhZFNlbnNlSWQiLCJhIiksVmE9UygiaGl0VHlwZSIsInQiKSxJYT1TKCJoaXRDYWxsYmFjayIpLFJhPVMoImhpdFBheWxvYWQiKTtTKCJub25JbnRlcmFjdGlvbiIsIm5pIik7UygiY3VycmVuY3lDb2RlIiwiY3UiKTtTKCJkYXRhU291cmNlIiwiZHMiKTt2YXIgVmQ9UygidXNlQmVhY29uIix2b2lkIDAsITEpLGZhPVMoInRyYW5zcG9ydCIpO1MoInNlc3Npb25Db250cm9sIiwic2MiLCIiKTtTKCJzZXNzaW9uR3JvdXAiLCJzZyIpO1MoInF1ZXVlVGltZSIsInF0Iik7dmFyIEFjPVMoIl9zIiwiX3MiKTtTKCJzY3JlZW5OYW1lIiwiY2QiKTt2YXIga2I9UygibG9jYXRpb24iLCJkbCIsIiIpLGxiPVMoInJlZmVycmVyIiwiZHIiKSxtYj1TKCJwYWdlIiwiZHAiLCIiKTtTKCJob3N0bmFtZSIsImRoIik7CnZhciBuYj1TKCJsYW5ndWFnZSIsInVsIiksb2I9UygiZW5jb2RpbmciLCJkZSIpO1MoInRpdGxlIiwiZHQiLGZ1bmN0aW9uKCl7cmV0dXJuIE0udGl0bGV8fHZvaWQgMH0pO2NiKCJjb250ZW50R3JvdXAoWzAtOV0rKSIsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBiYihhWzBdLCJjZyIrYVsxXSl9KTt2YXIgcGI9Uygic2NyZWVuQ29sb3JzIiwic2QiKSxxYj1TKCJzY3JlZW5SZXNvbHV0aW9uIiwic3IiKSxyYj1TKCJ2aWV3cG9ydFNpemUiLCJ2cCIpLHNiPVMoImphdmFFbmFibGVkIiwiamUiKSx0Yj1TKCJmbGFzaFZlcnNpb24iLCJmbCIpO1MoImNhbXBhaWduSWQiLCJjaSIpO1MoImNhbXBhaWduTmFtZSIsImNuIik7UygiY2FtcGFpZ25Tb3VyY2UiLCJjcyIpO1MoImNhbXBhaWduTWVkaXVtIiwiY20iKTtTKCJjYW1wYWlnbktleXdvcmQiLCJjayIpO1MoImNhbXBhaWduQ29udGVudCIsImNjIik7CnZhciB1Yj1TKCJldmVudENhdGVnb3J5IiwiZWMiKSx4Yj1TKCJldmVudEFjdGlvbiIsImVhIikseWI9UygiZXZlbnRMYWJlbCIsImVsIiksemI9UygiZXZlbnRWYWx1ZSIsImV2IiksQmI9Uygic29jaWFsTmV0d29yayIsInNuIiksQ2I9Uygic29jaWFsQWN0aW9uIiwic2EiKSxEYj1TKCJzb2NpYWxUYXJnZXQiLCJzdCIpLEViPVMoImwxIiwicGx0IiksRmI9UygibDIiLCJwZHQiKSxHYj1TKCJsMyIsImRucyIpLEhiPVMoImw0IiwicnJ0IiksSWI9UygibDUiLCJzcnQiKSxKYj1TKCJsNiIsInRjcCIpLEtiPVMoImw3IiwiZGl0IiksTGI9UygibDgiLCJjbHQiKSxWZT1TKCJsOSIsIl9nc3QiKSxXZT1TKCJsMTAiLCJfZ2J0IiksWGU9UygibDExIiwiX2NzdCIpLFllPVMoImwxMiIsIl9jYnQiKSxNYj1TKCJ0aW1pbmdDYXRlZ29yeSIsInV0YyIpLE5iPVMoInRpbWluZ1ZhciIsInV0diIpLE9iPVMoInRpbWluZ0xhYmVsIiwidXRsIiksUGI9UygidGltaW5nVmFsdWUiLCJ1dHQiKTsKUygiYXBwTmFtZSIsImFuIik7UygiYXBwVmVyc2lvbiIsImF2IiwiIik7UygiYXBwSWQiLCJhaWQiLCIiKTtTKCJhcHBJbnN0YWxsZXJJZCIsImFpaWQiLCIiKTtTKCJleERlc2NyaXB0aW9uIiwiZXhkIik7UygiZXhGYXRhbCIsImV4ZiIpO3ZhciBOYz1TKCJleHBJZCIsInhpZCIpLE9jPVMoImV4cFZhciIsInh2YXIiKSxtPVMoImV4cCIsImV4cCIpLFJjPVMoIl91dG1hIiwiX3V0bWEiKSxTYz1TKCJfdXRteiIsIl91dG16IiksVGM9UygiX3V0bWh0IiwiX3V0bWh0IiksVWE9UygiX2hjIix2b2lkIDAsMCksWGE9UygiX3RpIix2b2lkIDAsMCksV2E9UygiX3RvIix2b2lkIDAsMjApO2NiKCJkaW1lbnNpb24oWzAtOV0rKSIsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBiYihhWzBdLCJjZCIrYVsxXSl9KTtjYigibWV0cmljKFswLTldKykiLGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgYmIoYVswXSwiY20iK2FbMV0pfSk7UygibGlua2VyUGFyYW0iLHZvaWQgMCx2b2lkIDAsQmMsZGIpOwp2YXIgWmU9VCgiX2NkMmwiLHZvaWQgMCwhMSksbGQ9UygidXNhZ2UiLCJfdSIpLEdkPVMoIl91bSIpO1MoImZvcmNlU1NMIix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEJhfSxmdW5jdGlvbihhLGIsYyl7SigzNCk7QmE9ISFjfSk7dmFyIGVkPVMoIl9qMSIsImppZCIpLGlhPVMoIl9qMiIsImdqaWQiKTtjYigiXFwmKC4qKSIsZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGJiKGFbMF0sYVsxXSksYz15YyhhWzBdLnN1YnN0cmluZygxKSk7YyYmKGIuWj1mdW5jdGlvbihkKXtyZXR1cm4gZC5nZXQoYyl9LGIubz1mdW5jdGlvbihkLGUsZyxjYSl7ZC5zZXQoYyxnLGNhKX0sYi5GPXZvaWQgMCk7cmV0dXJuIGJ9KTsKdmFyIFFiPVQoIl9vb3QiKSxkZD1TKCJwcmV2aWV3VGFzayIpLFJiPVMoImNoZWNrUHJvdG9jb2xUYXNrIiksbWQ9UygidmFsaWRhdGlvblRhc2siKSxTYj1TKCJjaGVja1N0b3JhZ2VUYXNrIiksVWM9UygiaGlzdG9yeUltcG9ydFRhc2siKSxUYj1TKCJzYW1wbGVyVGFzayIpLFZiPVMoIl9ybHQiKSxXYj1TKCJidWlsZEhpdFRhc2siKSxYYj1TKCJzZW5kSGl0VGFzayIpLFZjPVMoImNlVGFzayIpLHpkPVMoImRldklkVGFzayIpLENkPVMoInRpbWluZ1Rhc2siKSxMZD1TKCJkaXNwbGF5RmVhdHVyZXNUYXNrIiksb2E9UygiY3VzdG9tVGFzayIpLHplPVMoImZwc0Nyb3NzRG9tYWluVGFzayIpLFJlPVQoIl9jdGEiKSxWPVQoIm5hbWUiKSxRPVQoImNsaWVudElkIiwiY2lkIiksbj1UKCJjbGllbnRJZFRpbWUiKSx4ZD1UKCJzdG9yZWRDbGllbnRJZCIpLEFkPVMoInVzZXJJZCIsInVpZCIpLE5hPVQoInRyYWNraW5nSWQiLCJ0aWQiKSxVPVQoImNvb2tpZU5hbWUiLHZvaWQgMCwiX2dhIiksClc9VCgiY29va2llRG9tYWluIiksWWI9VCgiY29va2llUGF0aCIsdm9pZCAwLCIvIiksWmI9VCgiY29va2llRXhwaXJlcyIsdm9pZCAwLDYzMDcyRTMpLEhkPVQoImNvb2tpZVVwZGF0ZSIsdm9pZCAwLCEwKSxCZT1UKCJjb29raWVGbGFncyIsdm9pZCAwLCIiKSwkYj1UKCJsZWdhY3lDb29raWVEb21haW4iKSxXYz1UKCJsZWdhY3lIaXN0b3J5SW1wb3J0Iix2b2lkIDAsITApLGFjPVQoInN0b3JhZ2UiLHZvaWQgMCwiY29va2llIiksYmM9VCgiYWxsb3dMaW5rZXIiLHZvaWQgMCwhMSksY2M9VCgiYWxsb3dBbmNob3IiLHZvaWQgMCwhMCksS2E9VCgic2FtcGxlUmF0ZSIsInNmIiwxMDApLGRjPVQoInNpdGVTcGVlZFNhbXBsZVJhdGUiLHZvaWQgMCwxKSxlYz1UKCJhbHdheXNTZW5kUmVmZXJyZXIiLHZvaWQgMCwhMSksST1UKCJfZ2lkIiwiX2dpZCIpLGxhPVQoIl9nY24iKSxLZD1UKCJ1c2VBbXBDbGllbnRJZCIpLGNlPVQoIl9nY2xpZCIpLGZlPVQoIl9ndCIpLGhlPVQoIl9nZSIsdm9pZCAwLAo3Nzc2RTYpLGllPVQoIl9nY2xzcmMiKSxqZT1UKCJzdG9yZUdhYyIsdm9pZCAwLCEwKSxvZT1TKCJfeF8xOSIpLEFlPVMoIl9mcGxjIiwiX2ZwbGMiKSxGPVQoIl9jcyIpLEplPVQoIl91c2VVcCIsdm9pZCAwLCExKSxMZT1TKCJ1cCIsInVwIiksUWU9UygiX3RhYyIsdm9pZCAwLCExKSxTZT1UKCJfZ2JyYWlkIiksVGU9VCgiX2didCIpLGJmPVQoIl9nYmUiLHZvaWQgMCw3Nzc2RTYpLGdkPVMoInRyYW5zcG9ydFVybCIpLE1kPVMoIl9yIiwiX3IiKSxPZD1TKCJfc2xjIiwiX3NsYyIpLHFlPVMoIl9kcCIpLGFkPVMoIl9qdCIsdm9pZCAwLCJuIiksVWQ9UygiYWxsb3dBZEZlYXR1cmVzIix2b2lkIDAsITApLHhlPVMoImFsbG93QWRQZXJzb25hbGl6YXRpb25TaWduYWxzIix2b2lkIDAsITApOwpmdW5jdGlvbiBYKGEsYixjLGQpe2JbYV09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGQmJkooZCksYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2goZSl7dGhyb3cgZ2UoImV4YyIsYSxlJiZlLm5hbWUpLGU7fX19O3ZhciBFZD1mdW5jdGlvbihhKXtpZigiY29va2llIj09YS5nZXQoYWMpKXJldHVybiBhPUNhKCJGUExDIiksMDxhLmxlbmd0aD9hWzBdOnZvaWQgMH0sRmU9ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYj1QKGEsb2UpJiZhLmdldChaZSkpYj1EZS5nZXQoYS5nZXQoY2MpKSxiPSEoYiYmYi5fZnBsYyk7YiYmIUVkKGEpJiZhLnNldChBZSwiMCIpfTt2YXIgYWE9ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5taW4oUihhLGRjKSwxMDApO3JldHVybiBMYShQKGEsUSkpJTEwMD49Yj8hMTohMH0sZ2M9ZnVuY3Rpb24oYSl7dmFyIGI9e307aWYoRWMoYil8fEZjKGIpKXt2YXIgYz1iW0ViXTt2b2lkIDA9PWN8fEluZmluaXR5PT1jfHxpc05hTihjKXx8KDA8Yz8oWShiLEdiKSxZKGIsSmIpLFkoYixJYiksWShiLEZiKSxZKGIsSGIpLFkoYixLYiksWShiLExiKSxZKGIsVmUpLFkoYixXZSksWShiLFhlKSxZKGIsWWUpLHZhKGZ1bmN0aW9uKCl7YShiKX0sMTApKTpMKE8sImxvYWQiLGZ1bmN0aW9uKCl7Z2MoYSl9LCExKSl9fSxFYz1mdW5jdGlvbihhKXt2YXIgYj1PLnBlcmZvcm1hbmNlfHxPLndlYmtpdFBlcmZvcm1hbmNlO2I9YiYmYi50aW1pbmc7aWYoIWIpcmV0dXJuITE7dmFyIGM9Yi5uYXZpZ2F0aW9uU3RhcnQ7aWYoMD09YylyZXR1cm4hMTthW0ViXT1iLmxvYWRFdmVudFN0YXJ0LWM7YVtHYl09Yi5kb21haW5Mb29rdXBFbmQtYi5kb21haW5Mb29rdXBTdGFydDsKYVtKYl09Yi5jb25uZWN0RW5kLWIuY29ubmVjdFN0YXJ0O2FbSWJdPWIucmVzcG9uc2VTdGFydC1iLnJlcXVlc3RTdGFydDthW0ZiXT1iLnJlc3BvbnNlRW5kLWIucmVzcG9uc2VTdGFydDthW0hiXT1iLmZldGNoU3RhcnQtYzthW0tiXT1iLmRvbUludGVyYWN0aXZlLWM7YVtMYl09Yi5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydC1jO2FbVmVdPU4uTC1jO2FbV2VdPU4ueWEtYztPLmdvb2dsZV90YWdfbWFuYWdlciYmTy5nb29nbGVfdGFnX21hbmFnZXIuX2xpJiYoYj1PLmdvb2dsZV90YWdfbWFuYWdlci5fbGksYVtYZV09Yi5jc3QsYVtZZV09Yi5jYnQpO3JldHVybiEwfSxGYz1mdW5jdGlvbihhKXtpZihPLnRvcCE9TylyZXR1cm4hMTt2YXIgYj1PLmV4dGVybmFsLGM9YiYmYi5vbmxvYWRUO2ImJiFiLmlzVmFsaWRMb2FkVGltZSYmKGM9dm9pZCAwKTsyMTQ3NDgzNjQ4PGMmJihjPXZvaWQgMCk7MDxjJiZiLnNldFBhZ2VSZWFkeVRpbWUoKTtpZih2b2lkIDA9PWMpcmV0dXJuITE7CmFbRWJdPWM7cmV0dXJuITB9LFk9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hW2JdO2lmKGlzTmFOKGMpfHxJbmZpbml0eT09Y3x8MD5jKWFbYl09dm9pZCAwfSxGZD1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7aWYoInBhZ2V2aWV3Ij09Yi5nZXQoVmEpJiYhYS5JKXthLkk9ITA7dmFyIGM9YWEoYiksZD0wPEUoUChiLGtiKSwiZ2NsaWQiKS5sZW5ndGgsZT0wPEUoUChiLGtiKSwid2JyYWlkIikubGVuZ3RoOyhjfHxkfHxlKSYmZ2MoZnVuY3Rpb24oZyl7YyYmYS5zZW5kKCJ0aW1pbmciLGcpOyhkfHxlKSYmYS5zZW5kKCJhZHRpbWluZyIsZyl9KX19fTt2YXIgaGM9ITEsbWM9ZnVuY3Rpb24oYSl7aWYoImNvb2tpZSI9PVAoYSxhYykpe2lmKGEuZ2V0KEhkKXx8UChhLHhkKSE9UChhLFEpKXt2YXIgYj0xRTMqUihhLFpiKTttYShhLFEsVSxiKTthLmRhdGEuc2V0KHhkLFAoYSxRKSl9KGEuZ2V0KEhkKXx8dWMoYSkhPVAoYSxJKSkmJm1hKGEsSSxsYSw4NjRFNSk7aWYoYS5nZXQoamUpKXtpZihiPVAoYSxjZSkpe3ZhciBjPU1hdGgubWluKFIoYSxoZSksMUUzKlIoYSxaYikpO2M9MD09PWM/MDpNYXRoLm1pbihjLDFFMypSKGEsZmUpK2MtKG5ldyBEYXRlKS5nZXRUaW1lKCkpO2EuZGF0YS5zZXQoaGUsYyk7dmFyIGQ9e30sZT1QKGEsZmUpLGc9UChhLGllKSxjYT1rYyhQKGEsWWIpKSxsPWxjKFAoYSxXKSksaz1QKGEsTmEpLHc9UChhLEJlKTtnJiYiYXcuZHMiIT1nP2QmJihkLnVhPSEwKTooYj1bIjEiLGUsQ2MoYildLmpvaW4oIi4iKSwwPD1jJiYoZCYmKGQudGE9ITApLHpjKCJfZ2FjXyIrQ2MoayksYixjYSxsLGssYyx3KSkpO2xlKGQpfX1lbHNlIEooNzUpOwphLmdldChqZSkmJihiPVAoYSxTZSkpJiYoYz1NYXRoLm1pbihSKGEsYmYpLDFFMypSKGEsWmIpKSxjPTA9PT1jPzA6TWF0aC5taW4oYywxRTMqUihhLFRlKStjLShuZXcgRGF0ZSkuZ2V0VGltZSgpKSxhLmRhdGEuc2V0KGJmLGMpLGQ9e30sdz1QKGEsVGUpLGNhPWtjKFAoYSxZYikpLGw9bGMoUChhLFcpKSxrPVAoYSxOYSksYT1QKGEsQmUpLGI9WyIxIix3LENjKGIpXS5qb2luKCIuIiksMDw9YyYmKGQmJihkLnRhPSEwKSx6YygiX2dhY19nYl8iK0NjKGspLGIsY2EsbCxrLGMsYSkpLGVmKGQpKX19LG1hPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW5kKGEsYik7aWYoZSl7Yz1QKGEsYyk7dmFyIGc9a2MoUChhLFliKSksY2E9bGMoUChhLFcpKSxsPVAoYSxCZSksaz1QKGEsTmEpO2lmKCJhdXRvIiE9Y2EpemMoYyxlLGcsY2EsayxkLGwpJiYoaGM9ITApO2Vsc2V7SigzMik7Zm9yKHZhciB3PWlkKCksQ2U9MDtDZTx3Lmxlbmd0aDtDZSsrKWlmKGNhPXdbQ2VdLGEuZGF0YS5zZXQoVywKY2EpLGU9bmQoYSxiKSx6YyhjLGUsZyxjYSxrLGQsbCkpe2hjPSEwO3JldHVybn1hLmRhdGEuc2V0KFcsImF1dG8iKX19fSx1Yz1mdW5jdGlvbihhKXt2YXIgYj1DYShQKGEsbGEpKTtyZXR1cm4gWGQoYSxiKX0sbmM9ZnVuY3Rpb24oYSl7aWYoImNvb2tpZSI9PVAoYSxhYykmJiFoYyYmKG1jKGEpLCFoYykpdGhyb3ciYWJvcnQiO30sWWM9ZnVuY3Rpb24oYSl7aWYoYS5nZXQoV2MpKXt2YXIgYj1QKGEsVyksYz1QKGEsJGIpfHx4YSgpLGQ9WGMoIl9fdXRtYSIsYyxiKTtkJiYoSigxOSksYS5zZXQoVGMsKG5ldyBEYXRlKS5nZXRUaW1lKCksITApLGEuc2V0KFJjLGQuUiksKGI9WGMoIl9fdXRteiIsYyxiKSkmJmQuaGFzaD09Yi5oYXNoJiZhLnNldChTYyxiLlIpKX19LG5kPWZ1bmN0aW9uKGEsYil7Yj1DYyhQKGEsYikpO3ZhciBjPWxjKFAoYSxXKSkuc3BsaXQoIi4iKS5sZW5ndGg7YT1qYyhQKGEsWWIpKTsxPGEmJihjKz0iLSIrYSk7cmV0dXJuIGI/WyJHQTEiLGMsYl0uam9pbigiLiIpOgoiIn0sWGQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmEoYixQKGEsVyksUChhLFliKSl9LG5hPWZ1bmN0aW9uKGEsYixjKXtpZighYXx8MT5hLmxlbmd0aClKKDEyKTtlbHNle2Zvcih2YXIgZD1bXSxlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBnPWFbZV07dmFyIGNhPWcuc3BsaXQoIi4iKTt2YXIgbD1jYS5zaGlmdCgpOygiR0ExIj09bHx8IjEiPT1sKSYmMTxjYS5sZW5ndGg/KGc9Y2Euc2hpZnQoKS5zcGxpdCgiLSIpLDE9PWcubGVuZ3RoJiYoZ1sxXT0iMSIpLGdbMF0qPTEsZ1sxXSo9MSxjYT17SDpnLHM6Y2Euam9pbigiLiIpfSk6Y2E9a2QudGVzdChnKT97SDpbMCwwXSxzOmd9OnZvaWQgMDtjYSYmZC5wdXNoKGNhKX1pZigxPT1kLmxlbmd0aClyZXR1cm4gSigxMyksZFswXS5zO2lmKDA9PWQubGVuZ3RoKUooMTIpO2Vsc2V7SigxNCk7ZD1HYyhkLGxjKGIpLnNwbGl0KCIuIikubGVuZ3RoLDApO2lmKDE9PWQubGVuZ3RoKXJldHVybiBkWzBdLnM7ZD1HYyhkLGpjKGMpLDEpOzE8ZC5sZW5ndGgmJgpKKDQxKTtyZXR1cm4gZFswXSYmZFswXS5zfX19LEdjPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxnLGNhPTA7Y2E8YS5sZW5ndGg7Y2ErKyl7dmFyIGw9YVtjYV07bC5IW2NdPT1iP2QucHVzaChsKTp2b2lkIDA9PWd8fGwuSFtjXTxnPyhlPVtsXSxnPWwuSFtjXSk6bC5IW2NdPT1nJiZlLnB1c2gobCl9cmV0dXJuIDA8ZC5sZW5ndGg/ZDplfSxsYz1mdW5jdGlvbihhKXtyZXR1cm4gMD09YS5pbmRleE9mKCIuIik/YS5zdWJzdHIoMSk6YX0saWQ9ZnVuY3Rpb24oKXt2YXIgYT1bXSxiPXhhKCkuc3BsaXQoIi4iKTtpZig0PT1iLmxlbmd0aCl7dmFyIGM9YltiLmxlbmd0aC0xXTtpZihwYXJzZUludChjLDEwKT09YylyZXR1cm5bIm5vbmUiXX1mb3IoYz1iLmxlbmd0aC0yOzA8PWM7Yy0tKWEucHVzaChiLnNsaWNlKGMpLmpvaW4oIi4iKSk7Yj1NLmxvY2F0aW9uLmhvc3RuYW1lO2ViLnRlc3QoYil8fHZjLnRlc3QoYil8fGEucHVzaCgibm9uZSIpO3JldHVybiBhfSxrYz0KZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIi8iOzE8YS5sZW5ndGgmJmEubGFzdEluZGV4T2YoIi8iKT09YS5sZW5ndGgtMSYmKGE9YS5zdWJzdHIoMCxhLmxlbmd0aC0xKSk7MCE9YS5pbmRleE9mKCIvIikmJihhPSIvIithKTtyZXR1cm4gYX0samM9ZnVuY3Rpb24oYSl7YT1rYyhhKTtyZXR1cm4iLyI9PWE/MTphLnNwbGl0KCIvIikubGVuZ3RofSxsZT1mdW5jdGlvbihhKXthLnRhJiZKKDc3KTthLm5hJiZKKDc0KTthLnBhJiZKKDczKTthLnVhJiZKKDY5KX0sZWY9ZnVuY3Rpb24oYSl7YS50YSYmSig4NSk7YS5uYSYmSig4Nik7YS5wYSYmSig4Nyl9O2Z1bmN0aW9uIFhjKGEsYixjKXsibm9uZSI9PWImJihiPSIiKTt2YXIgZD1bXSxlPUNhKGEpO2E9Il9fdXRtYSI9PWE/NjoyO2Zvcih2YXIgZz0wO2c8ZS5sZW5ndGg7ZysrKXt2YXIgY2E9KCIiK2VbZ10pLnNwbGl0KCIuIik7Y2EubGVuZ3RoPj1hJiZkLnB1c2goe2hhc2g6Y2FbMF0sUjplW2ddLE86Y2F9KX1pZigwIT1kLmxlbmd0aClyZXR1cm4gMT09ZC5sZW5ndGg/ZFswXTpaYyhiLGQpfHxaYyhjLGQpfHxaYyhudWxsLGQpfHxkWzBdfWZ1bmN0aW9uIFpjKGEsYil7aWYobnVsbD09YSl2YXIgYz1hPTE7ZWxzZSBjPUxhKGEpLGE9TGEoRChhLCIuIik/YS5zdWJzdHJpbmcoMSk6Ii4iK2EpO2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKWlmKGJbZF0uaGFzaD09Y3x8YltkXS5oYXNoPT1hKXJldHVybiBiW2RdfTt2YXIgSmM9bmV3IFJlZ0V4cCgvXmh0dHBzPzpcL1wvKFteXC86XSspLyksRGU9Ty5nb29nbGVfdGFnX2RhdGEuZ2xCcmlkZ2UsS2M9UmVnRXhwKCIoLiopKFs/JiNdKSg/Ol9nYT1bXiYjXSopKD86Jj8pKC4qKSIpLG9kPVJlZ0V4cCgiKC4qKShbPyYjXSkoPzpfZ2FjPVteJiNdKikoPzomPykoLiopIik7ZnVuY3Rpb24gQmMoYSl7aWYoYS5nZXQoWmUpKXJldHVybiBKKDM1KSxEZS5nZW5lcmF0ZSgkZShhKSk7dmFyIGI9UChhLFEpLGM9UChhLEkpfHwiIjtiPSJfZ2E9Mi4iK0socGEoYytiLDApKyIuIitjKyItIitiKTsoYT1hZihhKSk/KEooNDQpLGE9IiZfZ2FjPTEuIitLKFtwYShhLnFhLDApLGEudGltZXN0YW1wLGEucWFdLmpvaW4oIi4iKSkpOmE9IiI7cmV0dXJuIGIrYX0KZnVuY3Rpb24gSWMoYSxiKXt2YXIgYz1uZXcgRGF0ZSxkPU8ubmF2aWdhdG9yLGU9ZC5wbHVnaW5zfHxbXTthPVthLGQudXNlckFnZW50LGMuZ2V0VGltZXpvbmVPZmZzZXQoKSxjLmdldFllYXIoKSxjLmdldERhdGUoKSxjLmdldEhvdXJzKCksYy5nZXRNaW51dGVzKCkrYl07Zm9yKGI9MDtiPGUubGVuZ3RoOysrYilhLnB1c2goZVtiXS5kZXNjcmlwdGlvbik7cmV0dXJuIExhKGEuam9pbigiLiIpKX1mdW5jdGlvbiBwYShhLGIpe3ZhciBjPW5ldyBEYXRlLGQ9Ty5uYXZpZ2F0b3IsZT1jLmdldEhvdXJzKCkrTWF0aC5mbG9vcigoYy5nZXRNaW51dGVzKCkrYikvNjApO3JldHVybiBMYShbYSxkLnVzZXJBZ2VudCxkLmxhbmd1YWdlfHwiIixjLmdldFRpbWV6b25lT2Zmc2V0KCksYy5nZXRZZWFyKCksYy5nZXREYXRlKCkrTWF0aC5mbG9vcihlLzI0KSwoMjQrZSklMjQsKDYwK2MuZ2V0TWludXRlcygpK2IpJTYwXS5qb2luKCIuIikpfQp2YXIgRGM9ZnVuY3Rpb24oYSl7Sig0OCk7dGhpcy50YXJnZXQ9YTt0aGlzLlQ9ITF9O0RjLnByb3RvdHlwZS5jYT1mdW5jdGlvbihhLGIpe2lmKGEpe2lmKHRoaXMudGFyZ2V0LmdldChaZSkpcmV0dXJuIERlLmRlY29yYXRlKCRlKHRoaXMudGFyZ2V0KSxhLGIpO2lmKGEudGFnTmFtZSl7aWYoImEiPT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7YS5ocmVmJiYoYS5ocmVmPXFkKHRoaXMsYS5ocmVmLGIpKTtyZXR1cm59aWYoImZvcm0iPT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gcmQodGhpcyxhKX1pZigic3RyaW5nIj09dHlwZW9mIGEpcmV0dXJuIHFkKHRoaXMsYSxiKX19Owp2YXIgcWQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUtjLmV4ZWMoYik7ZCYmMzw9ZC5sZW5ndGgmJihiPWRbMV0rKGRbM10/ZFsyXStkWzNdOiIiKSk7KGQ9b2QuZXhlYyhiKSkmJjM8PWQubGVuZ3RoJiYoYj1kWzFdKyhkWzNdP2RbMl0rZFszXToiIikpO2E9YS50YXJnZXQuZ2V0KCJsaW5rZXJQYXJhbSIpO2Q9Yi5pbmRleE9mKCI/Iik7dmFyIGU9Yi5pbmRleE9mKCIjIik7Yj1jP2IrKCgtMT09ZT8iIyI6IiYiKSthKTotMT09ZT9iKygoLTE9PT1kPyI/IjoiJiIpK2EpOmIuc3Vic3RyaW5nKDAsZSkrKC0xPT09ZHx8ZD5lPyI/IjoiJiIpK2ErYi5zdWJzdHJpbmcoZSk7Yj1iLnJlcGxhY2UoLyYrX2dhPS8sIiZfZ2E9Iik7cmV0dXJuIGI9Yi5yZXBsYWNlKFJlZ0V4cCgiJitfZ2FjPSIpLCImX2dhYz0iKX0scmQ9ZnVuY3Rpb24oYSxiKXtpZihiJiZiLmFjdGlvbilpZigiZ2V0Ij09Yi5tZXRob2QudG9Mb3dlckNhc2UoKSl7YT1hLnRhcmdldC5nZXQoImxpbmtlclBhcmFtIikuc3BsaXQoIiYiKTsKZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWFbY10uc3BsaXQoIj0iKSxlPWRbMV07ZD1kWzBdO2Zvcih2YXIgZz1iLmNoaWxkTm9kZXN8fFtdLGNhPSExLGw9MDtsPGcubGVuZ3RoO2wrKylpZihnW2xdLm5hbWU9PWQpe2dbbF0uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsZSk7Y2E9ITA7YnJlYWt9Y2F8fChnPU0uY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxnLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGcuc2V0QXR0cmlidXRlKCJuYW1lIixkKSxnLnNldEF0dHJpYnV0ZSgidmFsdWUiLGUpLGIuYXBwZW5kQ2hpbGQoZykpfX1lbHNlInBvc3QiPT1iLm1ldGhvZC50b0xvd2VyQ2FzZSgpJiYoYi5hY3Rpb249cWQoYSxiLmFjdGlvbikpfTsKRGMucHJvdG90eXBlLlM9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoZyl7dHJ5e2c9Z3x8Ty5ldmVudDthOnt2YXIgY2E9Zy50YXJnZXR8fGcuc3JjRWxlbWVudDtmb3IoZz0xMDA7Y2EmJjA8Zzspe2lmKGNhLmhyZWYmJmNhLm5vZGVOYW1lLm1hdGNoKC9eYSg/OnJlYSk/JC9pKSl7dmFyIGw9Y2E7YnJlYWsgYX1jYT1jYS5wYXJlbnROb2RlO2ctLX1sPXt9fSgiaHR0cDoiPT1sLnByb3RvY29sfHwiaHR0cHM6Ij09bC5wcm90b2NvbCkmJnNkKGEsbC5ob3N0bmFtZXx8IiIpJiZsLmhyZWYmJihsLmhyZWY9cWQoZSxsLmhyZWYsYikpfWNhdGNoKGspe0ooMjYpfX12YXIgZT10aGlzO3RoaXMudGFyZ2V0LmdldChaZSk/RGUuYXV0byhmdW5jdGlvbigpe3JldHVybiAkZShlLnRhcmdldCl9LGEsYj8iZnJhZ21lbnQiOiIiLGMpOih0aGlzLlR8fCh0aGlzLlQ9ITAsTChNLCJtb3VzZWRvd24iLGQsITEpLEwoTSwia2V5dXAiLGQsITEpKSxjJiZMKE0sInN1Ym1pdCIsZnVuY3Rpb24oZyl7Zz0KZ3x8Ty5ldmVudDtpZigoZz1nLnRhcmdldHx8Zy5zcmNFbGVtZW50KSYmZy5hY3Rpb24pe3ZhciBjYT1nLmFjdGlvbi5tYXRjaChKYyk7Y2EmJnNkKGEsY2FbMV0pJiZyZChlLGcpfX0pKX07RGMucHJvdG90eXBlLiQ9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI9dGhpcyxjPWIudGFyZ2V0LmdldChGKTt2b2lkIDAhPT1jJiZEZS5wYXNzdGhyb3VnaChmdW5jdGlvbigpe2lmKGMoImFuYWx5dGljc19zdG9yYWdlIikpcmV0dXJue307dmFyIGQ9e307cmV0dXJuIGQuX2dhPWIudGFyZ2V0LmdldChRKSxkLl91cD0iMSIsZH0sMSwhMCl9fTtmdW5jdGlvbiBzZChhLGIpe2lmKGI9PU0ubG9jYXRpb24uaG9zdG5hbWUpcmV0dXJuITE7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYVtjXWluc3RhbmNlb2YgUmVnRXhwKXtpZihhW2NdLnRlc3QoYikpcmV0dXJuITB9ZWxzZSBpZigwPD1iLmluZGV4T2YoYVtjXSkpcmV0dXJuITA7cmV0dXJuITF9CmZ1bmN0aW9uIGtlKGEsYil7cmV0dXJuIGIhPUljKGEsMCkmJmIhPUljKGEsLTEpJiZiIT1JYyhhLC0yKSYmYiE9cGEoYSwwKSYmYiE9cGEoYSwtMSkmJmIhPXBhKGEsLTIpfWZ1bmN0aW9uICRlKGEpe3ZhciBiPWFmKGEpLGM9e307Yy5fZ2E9YS5nZXQoUSk7Yy5fZ2lkPWEuZ2V0KEkpfHx2b2lkIDA7Yy5fZ2FjPWI/W2IucWEsYi50aW1lc3RhbXBdLmpvaW4oIi4iKTp2b2lkIDA7Yj1hLmdldChBZSk7YT1FZChhKTtyZXR1cm4gYy5fZnBsYz1iJiYiMCIhPT1iP2I6YSxjfWZ1bmN0aW9uIGFmKGEpe2Z1bmN0aW9uIGIoZSl7cmV0dXJuIHZvaWQgMD09ZXx8IiI9PT1lPzA6TnVtYmVyKGUpfXZhciBjPWEuZ2V0KGNlKTtpZihjJiZhLmdldChqZSkpe3ZhciBkPWIoYS5nZXQoZmUpKTtpZigxRTMqZCtiKGEuZ2V0KGhlKSk8PShuZXcgRGF0ZSkuZ2V0VGltZSgpKUooNzYpO2Vsc2UgcmV0dXJue3RpbWVzdGFtcDpkLHFhOmN9fX07dmFyIHA9L14oR1RNfE9QVCktW0EtWjAtOV0rJC8sSWU9L15HLVtBLVowLTldKyQvLHE9LztfZ2FleHA9W147XSovZyxyPS87KChfX3V0bWE9KXwoW147PV0rPUdBWD9cZCtcLikpW147XSovZyxBYT0vXmh0dHBzPzpcL1wvW1x3XC0uXStcLmdvb2dsZS5jb20oOlxkKyk/XC9vcHRpbWl6ZVwvb3B0LWxhdW5jaFwuaHRtbFw/LiokLyx0PWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoZCxlKXtlJiYoYys9IiYiK2QrIj0iK0soZSkpfXZhciBjPUdlKGEudHlwZSkrSyhhLmlkKTsiZGF0YUxheWVyIiE9YS5CJiZiKCJsIixhLkIpO2IoImN4IixhLmNvbnRleHQpO2IoInQiLGEudGFyZ2V0KTtiKCJjaWQiLGEuY2xpZW50SWQpO2IoImNpZHQiLGEua2EpO2IoImdhYyIsYS5sYSk7YigiYWlwIixhLmlhKTthLnN5bmMmJmIoIm0iLCJzeW5jIik7YigiY3ljbGUiLGEuRyk7YS5xYSYmYigiZ2NsaWQiLGEucWEpO0FhLnRlc3QoTS5yZWZlcnJlcikmJmIoImNiIixTdHJpbmcoaGQoKSkpO3JldHVybiBjfSwKSGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz0obmV3IERhdGUpLmdldFRpbWUoKTtPW2EuQl09T1thLkJdfHxbXTtjPXsiZ3RtLnN0YXJ0IjpjfTthLnN5bmN8fChjLmV2ZW50PSJndG0uanMiKTtPW2EuQl0ucHVzaChjKTsyPT09YS50eXBlJiZmdW5jdGlvbihkLGUsZyl7T1thLkJdLnB1c2goYXJndW1lbnRzKX0oImNvbmZpZyIsYS5pZCxiKX0sS2U9ZnVuY3Rpb24oYSxiLGMsZCl7Yz1jfHx7fTt2YXIgZT0xO0llLnRlc3QoYikmJihlPTIpO3ZhciBnPXtpZDpiLHR5cGU6ZSxCOmMuZGF0YUxheWVyfHwiZGF0YUxheWVyIixHOiExfSxjYT12b2lkIDA7YS5nZXQoIiZndG0iKT09YiYmKGcuRz0hMCk7MT09PWU/KGcuaWE9ISFhLmdldCgiYW5vbnltaXplSXAiKSxnLnN5bmM9ZCxiPVN0cmluZyhhLmdldCgibmFtZSIpKSwidDAiIT1iJiYoZy50YXJnZXQ9YiksRyhTdHJpbmcoYS5nZXQoInRyYWNraW5nSWQiKSkpfHwoZy5jbGllbnRJZD1TdHJpbmcoYS5nZXQoUSkpLGcua2E9TnVtYmVyKGEuZ2V0KG4pKSwKYz1jLnBhbGluZHJvbWU/cjpxLGM9KGM9TS5jb29raWUucmVwbGFjZSgvXnwoOyArKS9nLCI7IikubWF0Y2goYykpP2Muc29ydCgpLmpvaW4oIiIpLnN1YnN0cmluZygxKTp2b2lkIDAsZy5sYT1jLGcucWE9RShQKGEsa2IpLCJnY2xpZCIpKSk6Mj09PWUmJihnLmNvbnRleHQ9ImMiLGNhPXthbGxvd19nb29nbGVfc2lnbmFsczphLmdldChVZCksYWxsb3dfYWRfcGVyc29uYWxpemF0aW9uX3NpZ25hbHM6YS5nZXQoeGUpfSk7SGUoZyxjYSk7cmV0dXJuIHQoZyl9O3ZhciBIPXt9LEpkPWZ1bmN0aW9uKGEsYil7Ynx8KGI9KGI9UChhLFYpKSYmInQwIiE9Yj9XZC50ZXN0KGIpPyJfZ2F0XyIrQ2MoUChhLE5hKSk6Il9nYXRfIitDYyhiKToiX2dhdCIpO3RoaXMuWT1ifSxSZD1mdW5jdGlvbihhLGIpe3ZhciBjPWIuZ2V0KFdiKTtiLnNldChXYixmdW5jdGlvbihlKXtQZChhLGUsZWQpO1BkKGEsZSxpYSk7dmFyIGc9YyhlKTtRZChhLGUpO3JldHVybiBnfSk7dmFyIGQ9Yi5nZXQoWGIpO2Iuc2V0KFhiLGZ1bmN0aW9uKGUpe3ZhciBnPWQoZSk7aWYoc2UoZSkpe0ooODApO3ZhciBjYT17VTpyZShlLDEpLGdvb2dsZTpyZShlLDIpLGNvdW50OjB9O3BlKCJodHRwczovL3N0YXRzLmcuZG91YmxlY2xpY2submV0L2ovY29sbGVjdCIsY2EuVSxjYSk7ZS5zZXQoZWQsIiIsITApfXJldHVybiBnfSl9LFBkPWZ1bmN0aW9uKGEsYixjKXshMT09PWIuZ2V0KFVkKXx8Yi5nZXQoYyl8fCgiMSI9PUNhKGEuWSlbMF0/Yi5zZXQoYywiIiwhMCk6Yi5zZXQoYywiIitoZCgpLAohMCkpfSxRZD1mdW5jdGlvbihhLGIpe3NlKGIpJiZ6YyhhLlksIjEiLFAoYixZYiksUChiLFcpLFAoYixOYSksNkU0LFAoYixCZSkpfSxzZT1mdW5jdGlvbihhKXtyZXR1cm4hIWEuZ2V0KGVkKSYmITEhPT1hLmdldChVZCl9LE5lPWZ1bmN0aW9uKGEpe3JldHVybiFIW1AoYSxOYSldJiZ2b2lkIDA9PT1hLmdldCgiJmd0bSIpJiZ2b2lkIDA9PT1hLmdldChmYSkmJnZvaWQgMD09PWEuZ2V0KGdkKSYmdm9pZCAwPT09YS5nZXQob2UpfSxyZT1mdW5jdGlvbihhLGIpe3ZhciBjPW5ldyBlZSxkPWZ1bmN0aW9uKGcpeyRhKGcpLkYmJmMuc2V0KCRhKGcpLkYsYS5nZXQoZykpfTtkKGhiKTtkKGliKTtkKE5hKTtkKFEpO2QoZWQpOzE9PWImJihkKEFkKSxkKGlhKSxkKEkpKTshMT09PWEuZ2V0KHhlKSYmYy5zZXQoIm5wYSIsIjEiKTtjLnNldCgkYShsZCkuRixUZChhKSk7dmFyIGU9IiI7Yy5tYXAoZnVuY3Rpb24oZyxjYSl7ZSs9SyhnKSsiPSI7ZSs9SygiIitjYSkrIiYifSk7ZSs9Ino9IisKaGQoKTsxPT1iP2U9InQ9ZGMmYWlwPTEmX3I9MyYiK2U6Mj09YiYmKGU9InQ9c3ImYWlwPTEmX3I9NCZzbGZfcmQ9MSYiK2UpO3JldHVybiBlfSxNZT1mdW5jdGlvbihhKXtpZihOZShhKSlyZXR1cm4gSFtQKGEsTmEpXT0hMCxmdW5jdGlvbihiKXtpZihiJiYhSFtiXSl7dmFyIGM9S2UoYSxiKTtJZChjKTtIW2JdPSEwfX19LFdkPS9eZ3RtXGQrJC87dmFyIGZkPWZ1bmN0aW9uKGEsYil7YT1hLm1vZGVsO2lmKCFhLmdldCgiZGNMb2FkZWQiKSl7dmFyIGM9bmV3ICRjKERkKGEpKTtjLnNldCgyOSk7YS5zZXQoR2QsYy5DKTtiPWJ8fHt9O3ZhciBkO2JbVV0mJihkPUNjKGJbVV0pKTtiPW5ldyBKZChhLGQpO1JkKGIsYSk7YS5zZXQoImRjTG9hZGVkIiwhMCl9fTt2YXIgU2Q9ZnVuY3Rpb24oYSl7aWYoIWEuZ2V0KCJkY0xvYWRlZCIpJiYiY29va2llIj09YS5nZXQoYWMpKXt2YXIgYj1uZXcgSmQoYSk7UGQoYixhLGVkKTtQZChiLGEsaWEpO1FkKGIsYSk7Yj1zZShhKTt2YXIgYz1OZShhKTtiJiZhLnNldChNZCwxLCEwKTtjJiZhLnNldChPZCwxLCEwKTtpZihifHxjKWEuc2V0KGFkLCJkIiwhMCksSig3OSksYS5zZXQocWUse1U6cmUoYSwxKSxnb29nbGU6cmUoYSwyKSxWOk1lKGEpLGNvdW50OjB9LCEwKX19O3ZhciBMYz1mdW5jdGlvbigpe3ZhciBhPU8uZ2FHbG9iYWw9Ty5nYUdsb2JhbHx8e307cmV0dXJuIGEuaGlkPWEuaGlkfHxoZCgpfTt2YXIgd2I9L14oVUF8WVR8TU98R1ApLShcZCspLShcZCspJC8scGM9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihlLGcpe2QubW9kZWwuZGF0YS5zZXQoZSxnKX1mdW5jdGlvbiBjKGUsZyl7YihlLGcpO2QuZmlsdGVycy5hZGQoZSl9dmFyIGQ9dGhpczt0aGlzLm1vZGVsPW5ldyBZYTt0aGlzLmZpbHRlcnM9bmV3IEhhO2IoVixhW1ZdKTtiKE5hLHNhKGFbTmFdKSk7YihVLGFbVV0pO2IoVyxhW1ddfHx4YSgpKTtiKFliLGFbWWJdKTtiKFpiLGFbWmJdKTtiKEhkLGFbSGRdKTtiKEJlLGFbQmVdKTtiKCRiLGFbJGJdKTtiKFdjLGFbV2NdKTtiKGJjLGFbYmNdKTtiKGNjLGFbY2NdKTtiKEthLGFbS2FdKTtiKGRjLGFbZGNdKTtiKGVjLGFbZWNdKTtiKGFjLGFbYWNdKTtiKEFkLGFbQWRdKTtiKG4sYVtuXSk7YihLZCxhW0tkXSk7YihqZSxhW2plXSk7YihaZSxhW1plXSk7YihvZSxhW29lXSk7YihKZSxhW0plXSk7YihGLGFbRl0pO2IoaGIsMSk7YihpYiwiajk0Iik7YyhSZSxQZSk7YyhRYiwKTWEpO2Mob2EsdWEpO2MoZGQsY2QpO2MoUmIsT2EpO2MobWQsdmIpO2MoU2IsbmMpO2MoVWMsWWMpO2MoVGIsSmEpO2MoVmIsVGEpO2MoVmMsSGMpO2MoemQseWQpO2MoTGQsU2QpO2MoemUsRmUpO2MoV2IsUGEpO2MoWGIsU2EpO2MoQ2QsRmQodGhpcykpO3BkKHRoaXMubW9kZWwpO3RkKHRoaXMubW9kZWwsYVtRXSk7dGhpcy5tb2RlbC5zZXQoamIsTGMoKSl9O3BjLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubW9kZWwuZ2V0KGEpfTtwYy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5tb2RlbC5zZXQoYSxiKX07CnBjLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKGEpe2lmKCEoMT5hcmd1bWVudHMubGVuZ3RoKSl7aWYoInN0cmluZyI9PT10eXBlb2YgYXJndW1lbnRzWzBdKXt2YXIgYj1hcmd1bWVudHNbMF07dmFyIGM9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSl9ZWxzZSBiPWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdW1ZhXSxjPWFyZ3VtZW50cztiJiYoYz16YShtZVtiXXx8W10sYyksY1tWYV09Yix0aGlzLm1vZGVsLnNldChjLHZvaWQgMCwhMCksdGhpcy5maWx0ZXJzLkQodGhpcy5tb2RlbCksdGhpcy5tb2RlbC5kYXRhLm09e30pfX07cGMucHJvdG90eXBlLm1hPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpczt1KGEsYyxiKXx8KHYoYSxmdW5jdGlvbigpe3UoYSxjLGIpfSkseShTdHJpbmcoYy5nZXQoVikpLGEsdm9pZCAwLGIsITApKX07CnZhciB0ZD1mdW5jdGlvbihhLGIpe3ZhciBjPVAoYSxVKTthLmRhdGEuc2V0KGxhLCJfZ2EiPT1jPyJfZ2lkIjpjKyJfZ2lkIik7aWYoImNvb2tpZSI9PVAoYSxhYykpe2hjPSExO2M9Q2EoUChhLFUpKTtjPVhkKGEsYyk7aWYoIWMpe2M9UChhLFcpO3ZhciBkPVAoYSwkYil8fHhhKCk7Yz1YYygiX191dG1hIixkLGMpO3ZvaWQgMCE9Yz8oSigxMCksYz1jLk9bMV0rIi4iK2MuT1syXSk6Yz12b2lkIDB9YyYmKGhjPSEwKTtpZihkPWMmJiFhLmdldChIZCkpaWYoZD1jLnNwbGl0KCIuIiksMiE9ZC5sZW5ndGgpZD0hMTtlbHNlIGlmKGQ9TnVtYmVyKGRbMV0pKXt2YXIgZT1SKGEsWmIpO2Q9ZCtlPChuZXcgRGF0ZSkuZ2V0VGltZSgpLzFFM31lbHNlIGQ9ITE7ZCYmKGM9dm9pZCAwKTtjJiYoYS5kYXRhLnNldCh4ZCxjKSxhLmRhdGEuc2V0KFEsYyksKGM9dWMoYSkpJiZhLmRhdGEuc2V0KEksYykpO2EuZ2V0KGplKSYmKGM9YS5nZXQoY2UpLGQ9YS5nZXQoaWUpLCFjfHxkJiYiYXcuZHMiIT0KZCkmJihjPXt9LGQ9KE0/ZGYoYyk6e30pW1AoYSxOYSldLGxlKGMpLGQmJjAhPWQubGVuZ3RoJiYoYz1kWzBdLGEuZGF0YS5zZXQoZmUsYy50aW1lc3RhbXAvMUUzKSxhLmRhdGEuc2V0KGNlLGMucWEpKSk7YS5nZXQoamUpJiYoYz1hLmdldChTZSksZD17fSxlPShNP2RmKGQsIl9nYWNfZ2IiLCEwKTp7fSlbUChhLE5hKV0sZWYoZCksZSYmMCE9ZS5sZW5ndGgmJihkPWVbMF0sZT1kLnFhLGMmJmMhPT1lfHwoZC5sYWJlbHMmJmQubGFiZWxzLmxlbmd0aCYmKGUrPSIuIitkLmxhYmVscy5qb2luKCIuIikpLGEuZGF0YS5zZXQoVGUsZC50aW1lc3RhbXAvMUUzKSxhLmRhdGEuc2V0KFNlLGUpKSkpfWlmKGEuZ2V0KEhkKSl7Yz1iZSgiX2dhIiwhIWEuZ2V0KGNjKSk7dmFyIGc9YmUoIl9nbCIsISFhLmdldChjYykpO2Q9RGUuZ2V0KGEuZ2V0KGNjKSk7ZT1kLl9nYTtnJiYwPGcuaW5kZXhPZigiX2dhKiIpJiYhZSYmSigzMCk7aWYoYnx8IWEuZ2V0KEplKSlnPSExO2Vsc2UgaWYoZz1hLmdldChGKSwKdm9pZCAwPT09Z3x8ZygiYW5hbHl0aWNzX3N0b3JhZ2UiKSlnPSExO2Vsc2V7Sig4NCk7YS5kYXRhLnNldChMZSwxKTtpZihnPWQuX3VwKWlmKGc9SmMuZXhlYyhNLnJlZmVycmVyKSl7Zz1nWzFdO3ZhciBjYT1NLmxvY2F0aW9uLmhvc3RuYW1lO2c9Y2E9PT1nfHwwPD1jYS5pbmRleE9mKCIuIitnKXx8MDw9Zy5pbmRleE9mKCIuIitjYSk/ITA6ITF9ZWxzZSBnPSExO2c9Zz8hMDohMX1jYT1kLmdjbGlkO3ZhciBsPWQuX2dhYztpZihjfHxlfHxjYXx8bClpZihjJiZlJiZKKDM2KSxhLmdldChiYyl8fHllKGEuZ2V0KEtkKSl8fGcpe2lmKGUmJihKKDM4KSxhLmRhdGEuc2V0KFEsZSksZC5fZ2lkJiYoSig1MSksYS5kYXRhLnNldChJLGQuX2dpZCkpKSxjYT8oSig4MiksYS5kYXRhLnNldChjZSxjYSksZC5nY2xzcmMmJmEuZGF0YS5zZXQoaWUsZC5nY2xzcmMpKTpsJiYoZT1sLnNwbGl0KCIuIikpJiYyPT09ZS5sZW5ndGgmJihKKDM3KSxhLmRhdGEuc2V0KGNlLGVbMF0pLGEuZGF0YS5zZXQoZmUsCmVbMV0pKSwoZD1kLl9mcGxjKSYmUChhLG9lKSYmKEooODMpLGEuZGF0YS5zZXQoQWUsZCkpLGMpYjppZihkPWMuaW5kZXhPZigiLiIpLC0xPT1kKUooMjIpO2Vsc2V7ZT1jLnN1YnN0cmluZygwLGQpO2c9Yy5zdWJzdHJpbmcoZCsxKTtkPWcuaW5kZXhPZigiLiIpO2M9Zy5zdWJzdHJpbmcoMCxkKTtnPWcuc3Vic3RyaW5nKGQrMSk7aWYoIjEiPT1lKXtpZihkPWcsa2UoZCxjKSl7SigyMyk7YnJlYWsgYn19ZWxzZSBpZigiMiI9PWUpe2Q9Zy5pbmRleE9mKCItIik7ZT0iIjswPGQ/KGU9Zy5zdWJzdHJpbmcoMCxkKSxkPWcuc3Vic3RyaW5nKGQrMSkpOmQ9Zy5zdWJzdHJpbmcoMSk7aWYoa2UoZStkLGMpKXtKKDUzKTticmVhayBifWUmJihKKDIpLGEuZGF0YS5zZXQoSSxlKSl9ZWxzZXtKKDIyKTticmVhayBifUooMTEpO2EuZGF0YS5zZXQoUSxkKTtpZihjPWJlKCJfZ2FjIiwhIWEuZ2V0KGNjKSkpYz1jLnNwbGl0KCIuIiksIjEiIT1jWzBdfHw0IT1jLmxlbmd0aD9KKDcyKTprZShjWzNdLApjWzFdKT9KKDcxKTooYS5kYXRhLnNldChjZSxjWzNdKSxhLmRhdGEuc2V0KGZlLGNbMl0pLEooNzApKX19ZWxzZSBKKDIxKX1iJiYoSig5KSxhLmRhdGEuc2V0KFEsSyhiKSkpO2EuZ2V0KFEpfHwoYj0oYj1PLmdhR2xvYmFsKSYmYi5mcm9tX2Nvb2tpZSYmImNvb2tpZSIhPT1QKGEsYWMpP3ZvaWQgMDooYj1iJiZiLnZpZCkmJi0xIT09Yi5zZWFyY2goamQpP2I6dm9pZCAwLGI/KEooMTcpLGEuZGF0YS5zZXQoUSxiKSk6KEooOCksYS5kYXRhLnNldChRLHJhKCkpKSk7YS5nZXQoSSl8fChKKDMpLGEuZGF0YS5zZXQoSSxyYSgpKSk7bWMoYSk7Yj1PLmdhR2xvYmFsPU8uZ2FHbG9iYWx8fHt9O2M9UChhLFEpO2E9Yz09PVAoYSx4ZCk7aWYodm9pZCAwPT1iLnZpZHx8YSYmIWIuZnJvbV9jb29raWUpYi52aWQ9YyxiLmZyb21fY29va2llPWF9LHBkPWZ1bmN0aW9uKGEpe3ZhciBiPU8ubmF2aWdhdG9yLGM9Ty5zY3JlZW4sZD1NLmxvY2F0aW9uLGU9YS5zZXQ7YTp7dmFyIGc9ISFhLmdldChlYyksCmNhPSEhYS5nZXQoS2QpO3ZhciBsPU0ucmVmZXJyZXI7aWYoL14oaHR0cHM/fGFuZHJvaWQtYXBwKTpcL1wvL2kudGVzdChsKSl7aWYoZylicmVhayBhO2c9Ii8vIitNLmxvY2F0aW9uLmhvc3RuYW1lO2lmKCFkZShsLGcpKXtpZihjYSYmKGNhPWcucmVwbGFjZSgvXC4vZywiLSIpKyIuY2RuLmFtcHByb2plY3Qub3JnIixkZShsLGNhKSkpe2w9dm9pZCAwO2JyZWFrIGF9YnJlYWsgYX19bD12b2lkIDB9ZS5jYWxsKGEsbGIsbCk7ZCYmKGU9ZC5wYXRobmFtZXx8IiIsIi8iIT1lLmNoYXJBdCgwKSYmKEooMzEpLGU9Ii8iK2UpLGEuc2V0KGtiLGQucHJvdG9jb2wrIi8vIitkLmhvc3RuYW1lK2UrZC5zZWFyY2gpKTtjJiZhLnNldChxYixjLndpZHRoKyJ4IitjLmhlaWdodCk7YyYmYS5zZXQocGIsYy5jb2xvckRlcHRoKyItYml0Iik7Yz1NLmRvY3VtZW50RWxlbWVudDtsPShlPU0uYm9keSkmJmUuY2xpZW50V2lkdGgmJmUuY2xpZW50SGVpZ2h0O2NhPVtdO2MmJmMuY2xpZW50V2lkdGgmJgpjLmNsaWVudEhlaWdodCYmKCJDU1MxQ29tcGF0Ij09PU0uY29tcGF0TW9kZXx8IWwpP2NhPVtjLmNsaWVudFdpZHRoLGMuY2xpZW50SGVpZ2h0XTpsJiYoY2E9W2UuY2xpZW50V2lkdGgsZS5jbGllbnRIZWlnaHRdKTtjPTA+PWNhWzBdfHwwPj1jYVsxXT8iIjpjYS5qb2luKCJ4Iik7YS5zZXQocmIsYyk7Yz1hLnNldDt2YXIgaztpZigoZT0oZT1PLm5hdmlnYXRvcik/ZS5wbHVnaW5zOm51bGwpJiZlLmxlbmd0aClmb3IobD0wO2w8ZS5sZW5ndGgmJiFrO2wrKyljYT1lW2xdLC0xPGNhLm5hbWUuaW5kZXhPZigiU2hvY2t3YXZlIEZsYXNoIikmJihrPWNhLmRlc2NyaXB0aW9uKTtpZighayl0cnl7dmFyIHc9bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjciKTtrPXcuR2V0VmFyaWFibGUoIiR2ZXJzaW9uIil9Y2F0Y2goQ2Upe31pZighayl0cnl7dz1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guNiIpLGs9CiJXSU4gNiwwLDIxLDAiLHcuQWxsb3dTY3JpcHRBY2Nlc3M9ImFsd2F5cyIsaz13LkdldFZhcmlhYmxlKCIkdmVyc2lvbiIpfWNhdGNoKENlKXt9aWYoIWspdHJ5e3c9bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoIiksaz13LkdldFZhcmlhYmxlKCIkdmVyc2lvbiIpfWNhdGNoKENlKXt9ayYmKHc9ay5tYXRjaCgvW1xkXSsvZykpJiYzPD13Lmxlbmd0aCYmKGs9d1swXSsiLiIrd1sxXSsiIHIiK3dbMl0pO2MuY2FsbChhLHRiLGt8fHZvaWQgMCk7YS5zZXQob2IsTS5jaGFyYWN0ZXJTZXR8fE0uY2hhcnNldCk7YS5zZXQoc2IsYiYmImZ1bmN0aW9uIj09PXR5cGVvZiBiLmphdmFFbmFibGVkJiZiLmphdmFFbmFibGVkKCl8fCExKTthLnNldChuYiwoYiYmKGIubGFuZ3VhZ2V8fGIuYnJvd3Nlckxhbmd1YWdlKXx8IiIpLnRvTG93ZXJDYXNlKCkpO2EuZGF0YS5zZXQoY2UsYmUoImdjbGlkIiwhMCkpO2EuZGF0YS5zZXQoaWUsYmUoImdjbHNyYyIsITApKTsKYS5kYXRhLnNldChmZSxNYXRoLnJvdW5kKChuZXcgRGF0ZSkuZ2V0VGltZSgpLzFFMykpO2EuZ2V0KGNlKXx8KGEuZGF0YS5zZXQoU2UsYmUoIndicmFpZCIsITApKSxhLmRhdGEuc2V0KFRlLE1hdGgucm91bmQoKG5ldyBEYXRlKS5nZXRUaW1lKCkvMUUzKSkpO2lmKGQmJmEuZ2V0KGNjKSYmKGI9TS5sb2NhdGlvbi5oYXNoKSl7Yj1iLnNwbGl0KC9bPyYjXSsvKTtkPVtdO2ZvcihrPTA7azxiLmxlbmd0aDsrK2spKEQoYltrXSwidXRtX2lkIil8fEQoYltrXSwidXRtX2NhbXBhaWduIil8fEQoYltrXSwidXRtX3NvdXJjZSIpfHxEKGJba10sInV0bV9tZWRpdW0iKXx8RChiW2tdLCJ1dG1fdGVybSIpfHxEKGJba10sInV0bV9jb250ZW50Iil8fEQoYltrXSwiZ2NsaWQiKXx8RChiW2tdLCJkY2xpZCIpfHxEKGJba10sImdjbHNyYyIpfHxEKGJba10sIndicmFpZCIpKSYmZC5wdXNoKGJba10pOzA8ZC5sZW5ndGgmJihiPSIjIitkLmpvaW4oIiYiKSxhLnNldChrYixhLmdldChrYikrYikpfX0sCm1lPXtwYWdldmlldzpbbWJdLGV2ZW50Olt1Yix4Yix5Yix6Yl0sc29jaWFsOltCYixDYixEYl0sdGltaW5nOltNYixOYixQYixPYl19O3ZhciByYz1mdW5jdGlvbihhKXtpZigicHJlcmVuZGVyIj09TS52aXNpYmlsaXR5U3RhdGUpcmV0dXJuITE7YSgpO3JldHVybiEwfSx6PWZ1bmN0aW9uKGEpe2lmKCFyYyhhKSl7SigxNik7dmFyIGI9ITEsYz1mdW5jdGlvbigpe2lmKCFiJiZyYyhhKSl7Yj0hMDt2YXIgZD1jLGU9TTtlLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixkLCExKTplLmRldGFjaEV2ZW50JiZlLmRldGFjaEV2ZW50KCJvbnZpc2liaWxpdHljaGFuZ2UiLGQpfX07TChNLCJ2aXNpYmlsaXR5Y2hhbmdlIixjKX19O3ZhciB0ZT0vXig/OihcdyspXC4pPyg/OihcdyspOik/KFx3KykkLyxzYz1mdW5jdGlvbihhKXtpZihlYShhWzBdKSl0aGlzLnU9YVswXTtlbHNle3ZhciBiPXRlLmV4ZWMoYVswXSk7bnVsbCE9YiYmND09Yi5sZW5ndGgmJih0aGlzLmRhPWJbMV18fCJ0MCIsdGhpcy5LPWJbMl18fCIiLHRoaXMubWV0aG9kTmFtZT1iWzNdLHRoaXMuYWE9W10uc2xpY2UuY2FsbChhLDEpLHRoaXMuS3x8KHRoaXMuQT0iY3JlYXRlIj09dGhpcy5tZXRob2ROYW1lLHRoaXMuaT0icmVxdWlyZSI9PXRoaXMubWV0aG9kTmFtZSx0aGlzLmc9InByb3ZpZGUiPT10aGlzLm1ldGhvZE5hbWUsdGhpcy5iYT0icmVtb3ZlIj09dGhpcy5tZXRob2ROYW1lKSx0aGlzLmkmJigzPD10aGlzLmFhLmxlbmd0aD8odGhpcy5YPXRoaXMuYWFbMV0sdGhpcy5XPXRoaXMuYWFbMl0pOnRoaXMuYWFbMV0mJihxYSh0aGlzLmFhWzFdKT90aGlzLlg9dGhpcy5hYVsxXTp0aGlzLlc9dGhpcy5hYVsxXSkpKTtiPWFbMV07YT1hWzJdOwppZighdGhpcy5tZXRob2ROYW1lKXRocm93ImFib3J0IjtpZih0aGlzLmkmJighcWEoYil8fCIiPT1iKSl0aHJvdyJhYm9ydCI7aWYodGhpcy5nJiYoIXFhKGIpfHwiIj09Ynx8IWVhKGEpKSl0aHJvdyJhYm9ydCI7aWYodWQodGhpcy5kYSl8fHVkKHRoaXMuSykpdGhyb3ciYWJvcnQiO2lmKHRoaXMuZyYmInQwIiE9dGhpcy5kYSl0aHJvdyJhYm9ydCI7fX07ZnVuY3Rpb24gdWQoYSl7cmV0dXJuIDA8PWEuaW5kZXhPZigiLiIpfHwwPD1hLmluZGV4T2YoIjoiKX07dmFyIFlkLFpkLCRkLEE7WWQ9bmV3IGVlOyRkPW5ldyBlZTtBPW5ldyBlZTtaZD17ZWM6NDUsZWNvbW1lcmNlOjQ2LGxpbmtpZDo0N307CnZhciB1PWZ1bmN0aW9uKGEsYixjKXtiPT1OfHxiLmdldChWKTt2YXIgZD1ZZC5nZXQoYSk7aWYoIWVhKGQpKXJldHVybiExO2IucGx1Z2luc189Yi5wbHVnaW5zX3x8bmV3IGVlO2lmKGIucGx1Z2luc18uZ2V0KGEpKXJldHVybiEwO2IucGx1Z2luc18uc2V0KGEsbmV3IGQoYixjfHx7fSkpO3JldHVybiEwfSx5PWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoIWVhKFlkLmdldChiKSkmJiEkZC5nZXQoYikpe1pkLmhhc093blByb3BlcnR5KGIpJiZKKFpkW2JdKTthPU4uaihhKTt2YXIgZz12b2lkIDA7aWYocC50ZXN0KGIpKXtKKDUyKTtpZighYSlyZXR1cm4hMDtjPUtlKGEubW9kZWwsYixkLGUpO2c9ZnVuY3Rpb24oKXtaLkQoWyJwcm92aWRlIixiLGZ1bmN0aW9uKCl7fV0pO3ZhciBsPU9bZCYmZC5kYXRhTGF5ZXJ8fCJkYXRhTGF5ZXIiXTtsJiZsLmhpZGUmJmVhKGwuaGlkZS5lbmQpJiZsLmhpZGVbYl0mJihsLmhpZGUuZW5kKCksbC5oaWRlLmVuZD12b2lkIDApfX0hYyYmWmQuaGFzT3duUHJvcGVydHkoYik/CihKKDM5KSxjPWIrIi5qcyIpOkooNDMpO2lmKGMpe3ZhciBjYTthJiZhLmdldChvZSk/Y2E9YS5nZXQob2UpOmQmJihjYT1kW29lXSk7cWEoY2EpfHwoY2E9dm9pZCAwKTthPWFlKGNmKGMsY2EpKTshY2F8fG5lKGEucHJvdG9jb2wpJiZCKGEpfHwoYT1hZShjZihjKSkpO25lKGEucHJvdG9jb2wpJiZCKGEpJiYoSWQoYS51cmwsdm9pZCAwLGUsdm9pZCAwLGcpLCRkLnNldChiLCEwKSl9fX0sdj1mdW5jdGlvbihhLGIpe3ZhciBjPUEuZ2V0KGEpfHxbXTtjLnB1c2goYik7QS5zZXQoYSxjKX0sQz1mdW5jdGlvbihhLGIpe1lkLnNldChhLGIpO2I9QS5nZXQoYSl8fFtdO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10oKTtBLnNldChhLFtdKX0sQj1mdW5jdGlvbihhKXt2YXIgYj1hZShNLmxvY2F0aW9uLmhyZWYpO2lmKEQoYS51cmwsR2UoMSkpfHxEKGEudXJsLEdlKDIpKSlyZXR1cm4hMDtpZihhLnF1ZXJ5fHwwPD1hLnVybC5pbmRleE9mKCI/Iil8fDA8PWEucGF0aC5pbmRleE9mKCI6Ly8iKSlyZXR1cm4hMTsKaWYoYS5ob3N0PT1iLmhvc3QmJmEucG9ydD09Yi5wb3J0fHxqZiYmKGI9TS5jcmVhdGVFbGVtZW50KCJhIiksYi5ocmVmPWpmLGI9a2YoYiksYS5ob3N0PT09YlswXSYmYS5wb3J0PT09YlsxXSkpcmV0dXJuITA7Yj0iaHR0cDoiPT1hLnByb3RvY29sPzgwOjQ0MztyZXR1cm4id3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tIj09YS5ob3N0JiYoYS5wb3J0fHxiKT09YiYmRChhLnBhdGgsIi9wbHVnaW5zLyIpPyEwOiExfSxuZT1mdW5jdGlvbihhKXt2YXIgYj1NLmxvY2F0aW9uLnByb3RvY29sO3JldHVybiJodHRwczoiPT1hfHxhPT1iPyEwOiJodHRwOiIhPWE/ITE6Imh0dHA6Ij09Yn0sa2Y9ZnVuY3Rpb24oYSl7dmFyIGI9YS5ob3N0bmFtZXx8IiIsYz0wPD1iLmluZGV4T2YoIl0iKTtiPWIuc3BsaXQoYz8iXSI6IjoiKVswXS50b0xvd2VyQ2FzZSgpO2MmJihiKz0iXSIpO2M9KGEucHJvdG9jb2x8fCIiKS50b0xvd2VyQ2FzZSgpO2M9MSphLnBvcnR8fCgiaHR0cDoiPT1jPzgwOiJodHRwczoiPT0KYz80NDM6IiIpO2E9YS5wYXRobmFtZXx8IiI7RChhLCIvIil8fChhPSIvIithKTtyZXR1cm5bYiwiIitjLGFdfSxhZT1mdW5jdGlvbihhKXt2YXIgYj1NLmNyZWF0ZUVsZW1lbnQoImEiKTtiLmhyZWY9TS5sb2NhdGlvbi5ocmVmO3ZhciBjPShiLnByb3RvY29sfHwiIikudG9Mb3dlckNhc2UoKSxkPWtmKGIpLGU9Yi5zZWFyY2h8fCIiLGc9YysiLy8iK2RbMF0rKGRbMV0/IjoiK2RbMV06IiIpO0QoYSwiLy8iKT9hPWMrYTpEKGEsIi8iKT9hPWcrYTohYXx8RChhLCI/Iik/YT1nK2RbMl0rKGF8fGUpOjA+YS5zcGxpdCgiLyIpWzBdLmluZGV4T2YoIjoiKSYmKGE9ZytkWzJdLnN1YnN0cmluZygwLGRbMl0ubGFzdEluZGV4T2YoIi8iKSkrIi8iK2EpO2IuaHJlZj1hO2M9a2YoYik7cmV0dXJue3Byb3RvY29sOihiLnByb3RvY29sfHwiIikudG9Mb3dlckNhc2UoKSxob3N0OmNbMF0scG9ydDpjWzFdLHBhdGg6Y1syXSxxdWVyeTpiLnNlYXJjaHx8IiIsdXJsOmF8fCIifX0sY2Y9ZnVuY3Rpb24oYSwKYil7cmV0dXJuIGEmJjA8PWEuaW5kZXhPZigiLyIpP2E6KGJ8fGJkKCExKSkrIi9wbHVnaW5zL3VhLyIrYX07dmFyIFo9e2dhOmZ1bmN0aW9uKCl7Wi5mYT1bXX19O1ouZ2EoKTtaLkQ9ZnVuY3Rpb24oYSl7dmFyIGI9Wi5KLmFwcGx5KFosYXJndW1lbnRzKTtiPVouZmEuY29uY2F0KGIpO2ZvcihaLmZhPVtdOzA8Yi5sZW5ndGgmJiFaLnYoYlswXSkmJiEoYi5zaGlmdCgpLDA8Wi5mYS5sZW5ndGgpOyk7Wi5mYT1aLmZhLmNvbmNhdChiKX07Wi5yYT1mdW5jdGlvbihhKXtOLnEmJigzMDA9PT1OLnEubGVuZ3RoJiYoTi5xLnNoaWZ0KCksTi5xZCsrKSxOLnEucHVzaChhKSl9O1ouSj1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspdHJ5e3ZhciBkPW5ldyBzYyhhcmd1bWVudHNbY10pO2QuZz9DKGQuYWFbMF0sZC5hYVsxXSk6KGQuaSYmKGQuaGE9eShkLmRhLGQuYWFbMF0sZC5YLGQuVykpLGIucHVzaChkKSk7Wi5yYShhcmd1bWVudHNbY10pfWNhdGNoKGUpe31yZXR1cm4gYn07Cloudj1mdW5jdGlvbihhKXt0cnl7aWYoYS51KWEudS5jYWxsKE8sTi5qKCJ0MCIpKTtlbHNle3ZhciBiPWEuZGE9PWdiP046Ti5qKGEuZGEpO2lmKGEuQSl7aWYoInQwIj09YS5kYSYmKGI9Ti5jcmVhdGUuYXBwbHkoTixhLmFhKSxudWxsPT09YikpcmV0dXJuITB9ZWxzZSBpZihhLmJhKU4ucmVtb3ZlKGEuZGEpO2Vsc2UgaWYoYilpZihhLmkpe2lmKGEuaGEmJihhLmhhPXkoYS5kYSxhLmFhWzBdLGEuWCxhLlcpKSwhdShhLmFhWzBdLGIsYS5XKSlyZXR1cm4hMH1lbHNlIGlmKGEuSyl7dmFyIGM9YS5tZXRob2ROYW1lLGQ9YS5hYSxlPWIucGx1Z2luc18uZ2V0KGEuSyk7ZVtjXS5hcHBseShlLGQpfWVsc2UgYlthLm1ldGhvZE5hbWVdLmFwcGx5KGIsYS5hYSl9fWNhdGNoKGcpe319O3ZhciBOPWZ1bmN0aW9uKGEpe0ooMSk7Wi5ELmFwcGx5KFosW2FyZ3VtZW50c10pfTtOLmg9e307Ti5QPVtdO04uTD0wO04ueWE9MDtOLmFuc3dlcj00Mjt2YXIgd2U9W05hLFcsVl07Ti5jcmVhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9emEod2UsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtiW1ZdfHwoYltWXT0idDAiKTt2YXIgYz0iIitiW1ZdO2lmKE4uaFtjXSlyZXR1cm4gTi5oW2NdO2lmKGRhKGIpKXJldHVybiBudWxsO2I9bmV3IHBjKGIpO04uaFtjXT1iO04uUC5wdXNoKGIpO2M9cWMoKS50cmFja2VyX2NyZWF0ZWQ7aWYoZWEoYykpdHJ5e2MoYil9Y2F0Y2goZCl7fXJldHVybiBifTtOLnJlbW92ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MDtiPE4uUC5sZW5ndGg7YisrKWlmKE4uUFtiXS5nZXQoVik9PWEpe04uUC5zcGxpY2UoYiwxKTtOLmhbYV09bnVsbDticmVha319O04uaj1mdW5jdGlvbihhKXtyZXR1cm4gTi5oW2FdfTtOLmdldEFsbD1mdW5jdGlvbigpe3JldHVybiBOLlAuc2xpY2UoMCl9OwpOLk49ZnVuY3Rpb24oKXsiZ2EiIT1nYiYmSig0OSk7dmFyIGE9T1tnYl07aWYoIWF8fDQyIT1hLmFuc3dlcil7Ti5MPWEmJmEubDtOLnlhPTEqbmV3IERhdGU7Ti5sb2FkZWQ9ITA7dmFyIGI9YSYmYS5xLGM9a2EoYik7YT1bXTtjP2E9Yi5zbGljZSgwKTpKKDUwKTtOLnE9Yz9iOltdO04ucS5zcGxpY2UoMCk7Ti5xZD0wO2I9T1tnYl09TjtYKCJjcmVhdGUiLGIsYi5jcmVhdGUpO1goInJlbW92ZSIsYixiLnJlbW92ZSk7WCgiZ2V0QnlOYW1lIixiLGIuaiw1KTtYKCJnZXRBbGwiLGIsYi5nZXRBbGwsNik7Yj1wYy5wcm90b3R5cGU7WCgiZ2V0IixiLGIuZ2V0LDcpO1goInNldCIsYixiLnNldCw0KTtYKCJzZW5kIixiLGIuc2VuZCk7WCgicmVxdWlyZVN5bmMiLGIsYi5tYSk7Yj1ZYS5wcm90b3R5cGU7WCgiZ2V0IixiLGIuZ2V0KTtYKCJzZXQiLGIsYi5zZXQpO2lmKCJodHRwczoiIT1NLmxvY2F0aW9uLnByb3RvY29sJiYhQmEpe2E6e2I9TS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7CmZvcihjPTA7YzxiLmxlbmd0aCYmMTAwPmM7YysrKXt2YXIgZD1iW2NdLnNyYztpZihkJiYwPT1kLmluZGV4T2YoYmQoITApKyIvYW5hbHl0aWNzIikpe2I9ITA7YnJlYWsgYX19Yj0hMX1iJiYoQmE9ITApfShPLmdhcGx1Z2lucz1PLmdhcGx1Z2luc3x8e30pLkxpbmtlcj1EYztiPURjLnByb3RvdHlwZTtDKCJsaW5rZXIiLERjKTtYKCJkZWNvcmF0ZSIsYixiLmNhLDIwKTtYKCJhdXRvTGluayIsYixiLlMsMjUpO1goInBhc3N0aHJvdWdoIixiLGIuJCwyNSk7QygiZGlzcGxheWZlYXR1cmVzIixmZCk7QygiYWRmZWF0dXJlcyIsZmQpO1ouRC5hcHBseShOLGEpfX07dmFyIGdmPU4uTixoZj1PW2diXTtoZiYmaGYucj9nZigpOnooZ2YpO3ooZnVuY3Rpb24oKXtaLkQoWyJwcm92aWRlIiwicmVuZGVyIix1YV0pfSk7fSkod2luZG93KTsK(Line 43)
Message:
Refused to connect to 'https://www.google-analytics.com/j/collect?v=1&_v=j94&a=883880487&t=pageview&_s=1&dl=https%3A%2F%2Freliauscard.myvnc.com%2FCard&ul=en-us&de=UTF-8&dt=Confirm%20Your%20Account%20Information&sd=24-bit&sr=1600x1200&vp=1600x1200&je=0&_u=KEBAAEABEAAAAC~&jid=569980975&gjid=216315443&cid=697029085.1642701763&tid=UA-46038259-7&_gid=249695630.1642701763&_r=1&_slc=1&z=2036971502' because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'connect-src' was not explicitly set, so 'default-src' is used as a fallback.
security error URL: data:text/javascript;base64,Ly8xNjM0MzY3NDM3NjMxCi8qCgogbG9kYXNoIDMuMTAuMSAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiAtbyAuL2xvZGFzaC5qc2AKIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+CiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPgogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT4KKi8KKGZ1bmN0aW9uKGEsRSl7Im9iamVjdCI9PT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1hLmRvY3VtZW50P0UoYSwhMCk6ZnVuY3Rpb24ocSl7aWYoIXEuZG9jdW1lbnQpdGhyb3cgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTtyZXR1cm4gRShxKX06RShhKX0pKCJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEocix5LEMpe0M9Q3x8U2E7dmFyIEssTj1DLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO04udGV4dD1yO2lmKHkpZm9yKEsgaW4gSmUpKHI9eVtLXXx8eS5nZXRBdHRyaWJ1dGUmJnkuZ2V0QXR0cmlidXRlKEspKSYmTi5zZXRBdHRyaWJ1dGUoSyxyKTtDLmhlYWQuYXBwZW5kQ2hpbGQoTikucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChOKX1mdW5jdGlvbiB0KHIpe3JldHVybiBudWxsPT1yP3IrIiI6Im9iamVjdCI9PT0KdHlwZW9mIHJ8fCJmdW5jdGlvbiI9PT10eXBlb2Ygcj9sZFtXZC5jYWxsKHIpXXx8Im9iamVjdCI6dHlwZW9mIHJ9ZnVuY3Rpb24gZihyKXt2YXIgeT0hIXImJiJsZW5ndGgiaW4gciYmci5sZW5ndGgsQz10KHIpO3JldHVybiBWYShyKXx8UGMocik/ITE6ImFycmF5Ij09PUN8fDA9PT15fHwibnVtYmVyIj09PXR5cGVvZiB5JiYwPHkmJnktMSBpbiByfWZ1bmN0aW9uIGQocix5KXtyZXR1cm4gci5ub2RlTmFtZSYmci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGMocix5LEMpe3JldHVybiBWYSh5KT9MLmdyZXAocixmdW5jdGlvbihLLE4pe3JldHVybiEheS5jYWxsKEssTixLKSE9PUN9KTp5Lm5vZGVUeXBlP0wuZ3JlcChyLGZ1bmN0aW9uKEspe3JldHVybiBLPT09eSE9PUN9KToic3RyaW5nIiE9PXR5cGVvZiB5P0wuZ3JlcChyLGZ1bmN0aW9uKEspe3JldHVybi0xPFFjLmNhbGwoeSxLKSE9PUN9KTpMLmZpbHRlcih5LHIsQyl9ZnVuY3Rpb24gYihyLAp5KXtmb3IoOyhyPXJbeV0pJiYxIT09ci5ub2RlVHlwZTspO3JldHVybiByfWZ1bmN0aW9uIGcocil7dmFyIHk9e307TC5lYWNoKHIubWF0Y2goaGMpfHxbXSxmdW5jdGlvbihDLEspe3lbS109ITB9KTtyZXR1cm4geX1mdW5jdGlvbiBlKHIpe3JldHVybiByfWZ1bmN0aW9uIGsocil7dGhyb3cgcjt9ZnVuY3Rpb24gbShyLHksQyxLKXt2YXIgTjt0cnl7ciYmVmEoTj1yLnByb21pc2UpP04uY2FsbChyKS5kb25lKHkpLmZhaWwoQyk6ciYmVmEoTj1yLnRoZW4pP04uY2FsbChyLHksQyk6eS5hcHBseSh2b2lkIDAsW3JdLnNsaWNlKEspKX1jYXRjaChRKXtDLmFwcGx5KHZvaWQgMCxbUV0pfX1mdW5jdGlvbiBwKCl7U2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIscCk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixwKTtMLnJlYWR5KCl9ZnVuY3Rpb24gcyhyLHkpe3JldHVybiB5LnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gbChyKXtyZXR1cm4gci5yZXBsYWNlKEtlLAoibXMtIikucmVwbGFjZShMZSxzKX1mdW5jdGlvbiBoKCl7dGhpcy5leHBhbmRvPUwuZXhwYW5kbytoLnVpZCsrfWZ1bmN0aW9uIHUocix5LEMpe2lmKHZvaWQgMD09PUMmJjE9PT1yLm5vZGVUeXBlKWlmKEM9ImRhdGEtIit5LnJlcGxhY2UoTWUsIi0kXHgyNiIpLnRvTG93ZXJDYXNlKCksQz1yLmdldEF0dHJpYnV0ZShDKSwic3RyaW5nIj09PXR5cGVvZiBDKXt0cnl7Qz0idHJ1ZSI9PT1DPyEwOiJmYWxzZSI9PT1DPyExOiJudWxsIj09PUM/bnVsbDpDPT09K0MrIiI/K0M6cGIudGVzdChDKT9KU09OLnBhcnNlKEMpOkN9Y2F0Y2goSyl7fVhhLnNldChyLHksQyl9ZWxzZSBDPXZvaWQgMDtyZXR1cm4gQ31mdW5jdGlvbiB3KHIseSxDLEspe3ZhciBOLFEsUz0yMCxiYT1LP2Z1bmN0aW9uKCl7cmV0dXJuIEsuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIEwuY3NzKHIseSwiIil9LCQ9YmEoKSxqYT1DJiZDWzNdfHwoTC5jc3NOdW1iZXJbeV0/IiI6InB4Iiksc2E9ci5ub2RlVHlwZSYmKEwuY3NzTnVtYmVyW3ldfHwKInB4IiE9PWphJiYrJCkmJldjLmV4ZWMoTC5jc3Mocix5KSk7aWYoc2EmJnNhWzNdIT09amEpeyQvPTI7amE9amF8fHNhWzNdO2ZvcihzYT0rJHx8MTtTLS07KUwuc3R5bGUocix5LHNhK2phKSwwPj0oMS1RKSooMS0oUT1iYSgpLyR8fDAuNSkpJiYoUz0wKSxzYS89UTtzYSo9MjtMLnN0eWxlKHIseSxzYStqYSk7Qz1DfHxbXX1DJiYoc2E9K3NhfHwrJHx8MCxOPUNbMV0/c2ErKENbMV0rMSkqQ1syXTorQ1syXSxLJiYoSy51bml0PWphLEsuc3RhcnQ9c2EsSy5lbmQ9TikpO3JldHVybiBOfWZ1bmN0aW9uIHoocix5KXtmb3IodmFyIEMsSyxOPVtdLFE9MCxTPXIubGVuZ3RoO1E8UztRKyspaWYoSz1yW1FdLEsuc3R5bGUpaWYoQz1LLnN0eWxlLmRpc3BsYXkseSl7aWYoIm5vbmUiPT09QyYmKE5bUV09S2EuZ2V0KEssImRpc3BsYXkiKXx8bnVsbCxOW1FdfHwoSy5zdHlsZS5kaXNwbGF5PSIiKSksIiI9PT1LLnN0eWxlLmRpc3BsYXkmJnRjKEspKXtDPU47dmFyIGJhPVE7dmFyICQ9dm9pZCAwLAokPUsub3duZXJEb2N1bWVudDtLPUsubm9kZU5hbWU7dmFyIGphPXpkW0tdO2phfHwoJD0kLmJvZHkuYXBwZW5kQ2hpbGQoJC5jcmVhdGVFbGVtZW50KEspKSxqYT1MLmNzcygkLCJkaXNwbGF5IiksJC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCQpLCJub25lIj09PWphJiYoamE9ImJsb2NrIiksemRbS109amEpO0s9amE7Q1tiYV09S319ZWxzZSJub25lIiE9PUMmJihOW1FdPSJub25lIixLYS5zZXQoSywiZGlzcGxheSIsQykpO2ZvcihRPTA7UTxTO1ErKyludWxsIT1OW1FdJiYocltRXS5zdHlsZS5kaXNwbGF5PU5bUV0pO3JldHVybiByfWZ1bmN0aW9uIEEocix5KXt2YXIgQztDPSJ1bmRlZmluZWQiIT09dHlwZW9mIHIuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ci5nZXRFbGVtZW50c0J5VGFnTmFtZSh5fHwiKiIpOiJ1bmRlZmluZWQiIT09dHlwZW9mIHIucXVlcnlTZWxlY3RvckFsbD9yLnF1ZXJ5U2VsZWN0b3JBbGwoeXx8IioiKTpbXTtyZXR1cm4gdm9pZCAwPT09eXx8eSYmZChyLHkpPwpMLm1lcmdlKFtyXSxDKTpDfWZ1bmN0aW9uIEgocix5KXtmb3IodmFyIEM9MCxLPXIubGVuZ3RoO0M8SztDKyspS2Euc2V0KHJbQ10sImdsb2JhbEV2YWwiLCF5fHxLYS5nZXQoeVtDXSwiZ2xvYmFsRXZhbCIpKX1mdW5jdGlvbiBGKHIseSxDLEssTil7Zm9yKHZhciBRLFMsYmEsJD15LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxqYT1bXSxzYT0wLHphPXIubGVuZ3RoO3NhPHphO3NhKyspaWYoKFE9cltzYV0pfHwwPT09USlpZigib2JqZWN0Ij09PXQoUSkpTC5tZXJnZShqYSxRLm5vZGVUeXBlP1tRXTpRKTtlbHNlIGlmKFQudGVzdChRKSl7Uz1TfHwkLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgiZGl2IikpO2JhPShpYy5leGVjKFEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpO2JhPXJhW2JhXXx8cmEuX2RlZmF1bHQ7Uy5pbm5lckhUTUw9YmFbMV0rTC5odG1sUHJlZmlsdGVyKFEpK2JhWzJdO2ZvcihiYT1iYVswXTtiYS0tOylTPVMubGFzdENoaWxkO0wubWVyZ2UoamEsClMuY2hpbGROb2Rlcyk7Uz0kLmZpcnN0Q2hpbGQ7Uy50ZXh0Q29udGVudD0iIn1lbHNlIGphLnB1c2goeS5jcmVhdGVUZXh0Tm9kZShRKSk7JC50ZXh0Q29udGVudD0iIjtmb3Ioc2E9MDtRPWphW3NhKytdOylpZihLJiYtMTxMLmluQXJyYXkoUSxLKSlOJiZOLnB1c2goUSk7ZWxzZSBpZihyPXpjKFEpLFM9QSgkLmFwcGVuZENoaWxkKFEpLCJzY3JpcHQiKSxyJiZIKFMpLEMpZm9yKGJhPTA7UT1TW2JhKytdOylBYy50ZXN0KFEudHlwZXx8IiIpJiZDLnB1c2goUSk7cmV0dXJuICR9ZnVuY3Rpb24gQigpe3JldHVybiEwfWZ1bmN0aW9uIEkoKXtyZXR1cm4hMX1mdW5jdGlvbiBNKHIseSl7dmFyIEM7YTp7dHJ5e0M9U2EuYWN0aXZlRWxlbWVudDticmVhayBhfWNhdGNoKEspe31DPXZvaWQgMH1yZXR1cm4gcj09PUM9PT0oImZvY3VzIj09PXkpfWZ1bmN0aW9uIEQocix5LEMsSyxOLFEpe3ZhciBTLGJhO2lmKCJvYmplY3QiPT09dHlwZW9mIHkpeyJzdHJpbmciIT09dHlwZW9mIEMmJihLPQpLfHxDLEM9dm9pZCAwKTtmb3IoYmEgaW4geSlEKHIsYmEsQyxLLHlbYmFdLFEpO3JldHVybiByfW51bGw9PUsmJm51bGw9PU4/KE49QyxLPUM9dm9pZCAwKTpudWxsPT1OJiYoInN0cmluZyI9PT10eXBlb2YgQz8oTj1LLEs9dm9pZCAwKTooTj1LLEs9QyxDPXZvaWQgMCkpO2lmKCExPT09TilOPUk7ZWxzZSBpZighTilyZXR1cm4gcjsxPT09USYmKFM9TixOPWZ1bmN0aW9uKCQpe0woKS5vZmYoJCk7cmV0dXJuIFMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxOLmd1aWQ9Uy5ndWlkfHwoUy5ndWlkPUwuZ3VpZCsrKSk7cmV0dXJuIHIuZWFjaChmdW5jdGlvbigpe0wuZXZlbnQuYWRkKHRoaXMseSxOLEssQyl9KX1mdW5jdGlvbiBKKHIseSxDKXtDPyhLYS5zZXQocix5LCExKSxMLmV2ZW50LmFkZChyLHkse25hbWVzcGFjZTohMSxoYW5kbGVyOmZ1bmN0aW9uKEspe3ZhciBOLFEsUz1LYS5nZXQodGhpcyx5KTtpZihLLmlzVHJpZ2dlciYxJiZ0aGlzW3ldKWlmKFMpKEwuZXZlbnQuc3BlY2lhbFt5XXx8Cnt9KS5kZWxlZ2F0ZVR5cGUmJksuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZXtpZihTPVliLmNhbGwoYXJndW1lbnRzKSxLYS5zZXQodGhpcyx5LFMpLE49Qyh0aGlzLHkpLHRoaXNbeV0oKSxRPUthLmdldCh0aGlzLHkpLFMhPT1RfHxOP0thLnNldCh0aGlzLHksITEpOlE9dm9pZCAwLFMhPT1RKXJldHVybiBLLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLEsucHJldmVudERlZmF1bHQoKSxRfWVsc2UgUyYmKEthLnNldCh0aGlzLHksTC5ldmVudC50cmlnZ2VyKEwuZXh0ZW5kKFMuc2hpZnQoKSxMLkV2ZW50LnByb3RvdHlwZSksUyx0aGlzKSksSy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSkpOkwuZXZlbnQuYWRkKHIseSxCKX1mdW5jdGlvbiBQKHIseSl7cmV0dXJuIGQociwidGFibGUiKSYmZCgxMSE9PXkubm9kZVR5cGU/eTp5LmZpcnN0Q2hpbGQsInRyIik/TChyKS5jaGlsZHJlbigidGJvZHkiKVswXXx8cjpyfWZ1bmN0aW9uIFYocil7ci50eXBlPShudWxsIT09ci5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrCiIvIityLnR5cGU7cmV0dXJuIHJ9ZnVuY3Rpb24gWShyKXsidHJ1ZS8iPT09KHIudHlwZXx8IiIpLnNsaWNlKDAsNSk/ci50eXBlPXIudHlwZS5zbGljZSg1KTpyLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpO3JldHVybiByfWZ1bmN0aW9uIG5hKHIseSl7dmFyIEMsSyxOLFE7aWYoMT09PXkubm9kZVR5cGUpe2lmKEthLmhhc0RhdGEocikmJihRPUthLmFjY2VzcyhyKSxDPUthLnNldCh5LFEpLFE9US5ldmVudHMpKWZvcihOIGluIGRlbGV0ZSBDLmhhbmRsZSxDLmV2ZW50cz17fSxRKWZvcihDPTAsSz1RW05dLmxlbmd0aDtDPEs7QysrKUwuZXZlbnQuYWRkKHksTixRW05dW0NdKTtYYS5oYXNEYXRhKHIpJiYoTj1YYS5hY2Nlc3MociksTj1MLmV4dGVuZCh7fSxOKSxYYS5zZXQoeSxOKSl9fWZ1bmN0aW9uIGZhKHIseSxDLEspe3k9QmMuYXBwbHkoW10seSk7dmFyIE4sUSxTLGJhLCQ9MCxqYT1yLmxlbmd0aCxzYT1qYS0xLHphPXlbMF0saGE9VmEoemEpO2lmKGhhfHwxPGphJiYic3RyaW5nIj09PQp0eXBlb2YgemEmJiFrYi5jaGVja0Nsb25lJiZ1Yy50ZXN0KHphKSlyZXR1cm4gci5lYWNoKGZ1bmN0aW9uKE1hKXt2YXIgUmE9ci5lcShNYSk7aGEmJih5WzBdPXphLmNhbGwodGhpcyxNYSxSYS5odG1sKCkpKTtmYShSYSx5LEMsSyl9KTtpZihqYSYmKE49Rih5LHJbMF0ub3duZXJEb2N1bWVudCwhMSxyLEspLFE9Ti5maXJzdENoaWxkLDE9PT1OLmNoaWxkTm9kZXMubGVuZ3RoJiYoTj1RKSxRfHxLKSl7UT1MLm1hcChBKE4sInNjcmlwdCIpLFYpO2ZvcihTPVEubGVuZ3RoOyQ8amE7JCsrKWJhPU4sJCE9PXNhJiYoYmE9TC5jbG9uZShiYSwhMCwhMCksUyYmTC5tZXJnZShRLEEoYmEsInNjcmlwdCIpKSksQy5jYWxsKHJbJF0sYmEsJCk7aWYoUylmb3IoTj1RW1EubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsTC5tYXAoUSxZKSwkPTA7JDxTOyQrKyliYT1RWyRdLEFjLnRlc3QoYmEudHlwZXx8IiIpJiYhS2EuYWNjZXNzKGJhLCJnbG9iYWxFdmFsIikmJkwuY29udGFpbnMoTixiYSkmJihiYS5zcmMmJgoibW9kdWxlIiE9PShiYS50eXBlfHwiIikudG9Mb3dlckNhc2UoKT9MLl9ldmFsVXJsJiYhYmEubm9Nb2R1bGUmJkwuX2V2YWxVcmwoYmEuc3JjLHtub25jZTpiYS5ub25jZXx8YmEuZ2V0QXR0cmlidXRlKCJub25jZSIpfSk6cShiYS50ZXh0Q29udGVudC5yZXBsYWNlKExiLCIiKSxiYSxOKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaWEocix5LEMpe2Zvcih2YXIgSz15P0wuZmlsdGVyKHkscik6cixOPTA7bnVsbCE9KHk9S1tOXSk7TisrKUN8fDEhPT15Lm5vZGVUeXBlfHxMLmNsZWFuRGF0YShBKHkpKSx5LnBhcmVudE5vZGUmJihDJiZ6Yyh5KSYmSChBKHksInNjcmlwdCIpKSx5LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoeSkpO3JldHVybiByfWZ1bmN0aW9uIFoocix5LEMpe3ZhciBLLE4sUT1yLnN0eWxlO2lmKEM9Q3x8WGMocikpTj1DLmdldFByb3BlcnR5VmFsdWUoeSl8fENbeV0sIiIhPT1OfHx6YyhyKXx8KE49TC5zdHlsZShyLHkpKSwha2IucGl4ZWxCb3hTdHlsZXMoKSYmVmIudGVzdChOKSYmCkFkLnRlc3QoeSkmJihyPVEud2lkdGgseT1RLm1pbldpZHRoLEs9US5tYXhXaWR0aCxRLm1pbldpZHRoPVEubWF4V2lkdGg9US53aWR0aD1OLE49Qy53aWR0aCxRLndpZHRoPXIsUS5taW5XaWR0aD15LFEubWF4V2lkdGg9Syk7cmV0dXJuIHZvaWQgMCE9PU4/TisiIjpOfWZ1bmN0aW9uIGVhKHIseSl7cmV0dXJue2dldDpmdW5jdGlvbigpe2lmKHIoKSlkZWxldGUgdGhpcy5nZXQ7ZWxzZSByZXR1cm4odGhpcy5nZXQ9eSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19ZnVuY3Rpb24gb2Eocil7dmFyIHk9TC5jc3NQcm9wc1tyXXx8QmRbcl07aWYoeSlyZXR1cm4geTtpZihyIGluIFJjKXJldHVybiByO3ZhciB5PUJkLEM7YTp7Qz1yO2Zvcih2YXIgSz1DWzBdLnRvVXBwZXJDYXNlKCkrQy5zbGljZSgxKSxOPUNjLmxlbmd0aDtOLS07KWlmKEM9Q2NbTl0rSyxDIGluIFJjKWJyZWFrIGE7Qz12b2lkIDB9cmV0dXJuIHlbcl09Q3x8cn1mdW5jdGlvbiBBYShyLHksQyl7cmV0dXJuKHI9V2MuZXhlYyh5KSk/Ck1hdGgubWF4KDAsclsyXS0oQ3x8MCkpKyhyWzNdfHwicHgiKTp5fWZ1bmN0aW9uIHBhKHIseSxDLEssTixRKXt2YXIgUz0id2lkdGgiPT09eT8xOjAsYmE9MCwkPTA7aWYoQz09PShLPyJib3JkZXIiOiJjb250ZW50IikpcmV0dXJuIDA7Zm9yKDs0PlM7Uys9MikibWFyZ2luIj09PUMmJigkKz1MLmNzcyhyLEMrWmJbU10sITAsTikpLEs/KCJjb250ZW50Ij09PUMmJigkLT1MLmNzcyhyLCJwYWRkaW5nIitaYltTXSwhMCxOKSksIm1hcmdpbiIhPT1DJiYoJC09TC5jc3MociwiYm9yZGVyIitaYltTXSsiV2lkdGgiLCEwLE4pKSk6KCQrPUwuY3NzKHIsInBhZGRpbmciK1piW1NdLCEwLE4pLCJwYWRkaW5nIiE9PUM/JCs9TC5jc3MociwiYm9yZGVyIitaYltTXSsiV2lkdGgiLCEwLE4pOmJhKz1MLmNzcyhyLCJib3JkZXIiK1piW1NdKyJXaWR0aCIsITAsTikpOyFLJiYwPD1RJiYoJCs9TWF0aC5tYXgoMCxNYXRoLmNlaWwoclsib2Zmc2V0Iit5WzBdLnRvVXBwZXJDYXNlKCkreS5zbGljZSgxKV0tClEtJC1iYS0wLjUpKXx8MCk7cmV0dXJuICR9ZnVuY3Rpb24gRmEocix5LEMpe3ZhciBLPVhjKHIpLE49KCFrYi5ib3hTaXppbmdSZWxpYWJsZSgpfHxDKSYmImJvcmRlci1ib3giPT09TC5jc3MociwiYm94U2l6aW5nIiwhMSxLKSxRPU4sUz1aKHIseSxLKSxiYT0ib2Zmc2V0Iit5WzBdLnRvVXBwZXJDYXNlKCkreS5zbGljZSgxKTtpZihWYi50ZXN0KFMpKXtpZighQylyZXR1cm4gUztTPSJhdXRvIn0oIWtiLmJveFNpemluZ1JlbGlhYmxlKCkmJk58fCJhdXRvIj09PVN8fCFwYXJzZUZsb2F0KFMpJiYiaW5saW5lIj09PUwuY3NzKHIsImRpc3BsYXkiLCExLEspKSYmci5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmKE49ImJvcmRlci1ib3giPT09TC5jc3MociwiYm94U2l6aW5nIiwhMSxLKSwoUT1iYSBpbiByKSYmKFM9cltiYV0pKTtTPXBhcnNlRmxvYXQoUyl8fDA7cmV0dXJuIFMrcGEocix5LEN8fChOPyJib3JkZXIiOiJjb250ZW50IiksUSxLLFMpKyJweCJ9ZnVuY3Rpb24gRWEociwKeSxDLEssTil7cmV0dXJuIG5ldyBFYS5wcm90b3R5cGUuaW5pdChyLHksQyxLLE4pfWZ1bmN0aW9uIFdhKCl7WWMmJighMT09PVNhLmhpZGRlbiYmYS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/YS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoV2EpOmEuc2V0VGltZW91dChXYSxMLmZ4LmludGVydmFsKSxMLmZ4LnRpY2soKSl9ZnVuY3Rpb24gVWEoKXthLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtEYz12b2lkIDB9KTtyZXR1cm4gRGM9RGF0ZS5ub3coKX1mdW5jdGlvbiB3YihyLHkpe3ZhciBDLEs9MCxOPXtoZWlnaHQ6cn07Zm9yKHk9eT8xOjA7ND5LO0srPTIteSlDPVpiW0tdLE5bIm1hcmdpbiIrQ109TlsicGFkZGluZyIrQ109cjt5JiYoTi5vcGFjaXR5PU4ud2lkdGg9cik7cmV0dXJuIE59ZnVuY3Rpb24gQWIocix5LEMpe2Zvcih2YXIgSyxOPShnYS50d2VlbmVyc1t5XXx8W10pLmNvbmNhdChnYS50d2VlbmVyc1siKiJdKSxRPTAsUz1OLmxlbmd0aDtRPFM7USsrKWlmKEs9TltRXS5jYWxsKEMsCnkscikpcmV0dXJuIEt9ZnVuY3Rpb24gTWIocix5KXt2YXIgQyxLLE4sUSxTO2ZvcihDIGluIHIpaWYoSz1sKEMpLE49eVtLXSxRPXJbQ10sQXJyYXkuaXNBcnJheShRKSYmKE49UVsxXSxRPXJbQ109UVswXSksQyE9PUsmJihyW0tdPVEsZGVsZXRlIHJbQ10pLChTPUwuY3NzSG9va3NbS10pJiYiZXhwYW5kImluIFMpZm9yKEMgaW4gUT1TLmV4cGFuZChRKSxkZWxldGUgcltLXSxRKUMgaW4gcnx8KHJbQ109UVtDXSx5W0NdPU4pO2Vsc2UgeVtLXT1OfWZ1bmN0aW9uIGdhKHIseSxDKXt2YXIgSyxOPTAsUT1nYS5wcmVmaWx0ZXJzLmxlbmd0aCxTPUwuRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgYmEuZWxlbX0pLGJhPWZ1bmN0aW9uKCl7aWYoSylyZXR1cm4hMTtmb3IodmFyIGphPURjfHxVYSgpLGphPU1hdGgubWF4KDAsJC5zdGFydFRpbWUrJC5kdXJhdGlvbi1qYSksc2E9MS0oamEvJC5kdXJhdGlvbnx8MCksemE9MCxoYT0kLnR3ZWVucy5sZW5ndGg7emE8aGE7emErKykkLnR3ZWVuc1t6YV0ucnVuKHNhKTsKUy5ub3RpZnlXaXRoKHIsWyQsc2EsamFdKTtpZigxPnNhJiZoYSlyZXR1cm4gamE7aGF8fFMubm90aWZ5V2l0aChyLFskLDEsMF0pO1MucmVzb2x2ZVdpdGgocixbJF0pO3JldHVybiExfSwkPVMucHJvbWlzZSh7ZWxlbTpyLHByb3BzOkwuZXh0ZW5kKHt9LHkpLG9wdHM6TC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOkwuZWFzaW5nLl9kZWZhdWx0fSxDKSxvcmlnaW5hbFByb3BlcnRpZXM6eSxvcmlnaW5hbE9wdGlvbnM6QyxzdGFydFRpbWU6RGN8fFVhKCksZHVyYXRpb246Qy5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oamEsc2Epe3ZhciB6YT1MLlR3ZWVuKHIsJC5vcHRzLGphLHNhLCQub3B0cy5zcGVjaWFsRWFzaW5nW2phXXx8JC5vcHRzLmVhc2luZyk7JC50d2VlbnMucHVzaCh6YSk7cmV0dXJuIHphfSxzdG9wOmZ1bmN0aW9uKGphKXt2YXIgc2E9MCx6YT1qYT8kLnR3ZWVucy5sZW5ndGg6MDtpZihLKXJldHVybiB0aGlzO2ZvcihLPQohMDtzYTx6YTtzYSsrKSQudHdlZW5zW3NhXS5ydW4oMSk7amE/KFMubm90aWZ5V2l0aChyLFskLDEsMF0pLFMucmVzb2x2ZVdpdGgocixbJCxqYV0pKTpTLnJlamVjdFdpdGgocixbJCxqYV0pO3JldHVybiB0aGlzfX0pO0M9JC5wcm9wcztmb3IoTWIoQywkLm9wdHMuc3BlY2lhbEVhc2luZyk7TjxRO04rKylpZih5PWdhLnByZWZpbHRlcnNbTl0uY2FsbCgkLHIsQywkLm9wdHMpKXJldHVybiBWYSh5LnN0b3ApJiYoTC5fcXVldWVIb29rcygkLmVsZW0sJC5vcHRzLnF1ZXVlKS5zdG9wPXkuc3RvcC5iaW5kKHkpKSx5O0wubWFwKEMsQWIsJCk7VmEoJC5vcHRzLnN0YXJ0KSYmJC5vcHRzLnN0YXJ0LmNhbGwociwkKTskLnByb2dyZXNzKCQub3B0cy5wcm9ncmVzcykuZG9uZSgkLm9wdHMuZG9uZSwkLm9wdHMuY29tcGxldGUpLmZhaWwoJC5vcHRzLmZhaWwpLmFsd2F5cygkLm9wdHMuYWx3YXlzKTtMLmZ4LnRpbWVyKEwuZXh0ZW5kKGJhLHtlbGVtOnIsYW5pbTokLHF1ZXVlOiQub3B0cy5xdWV1ZX0pKTsKcmV0dXJuICR9ZnVuY3Rpb24gdGEocil7cmV0dXJuKHIubWF0Y2goaGMpfHxbXSkuam9pbigiICIpfWZ1bmN0aW9uIHFhKHIpe3JldHVybiByLmdldEF0dHJpYnV0ZSYmci5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIifWZ1bmN0aW9uIHdhKHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpP3I6InN0cmluZyI9PT10eXBlb2Ygcj9yLm1hdGNoKGhjKXx8W106W119ZnVuY3Rpb24gSmEocix5LEMsSyl7dmFyIE47aWYoQXJyYXkuaXNBcnJheSh5KSlMLmVhY2goeSxmdW5jdGlvbihRLFMpe0N8fEVjLnRlc3Qocik/SyhyLFMpOkphKHIrIlsiKygib2JqZWN0Ij09PXR5cGVvZiBTJiZudWxsIT1TP1E6IiIpKyJdIixTLEMsSyl9KTtlbHNlIGlmKEN8fCJvYmplY3QiIT09dCh5KSlLKHIseSk7ZWxzZSBmb3IoTiBpbiB5KUphKHIrIlsiK04rIl0iLHlbTl0sQyxLKX1mdW5jdGlvbiBQYShyKXtyZXR1cm4gZnVuY3Rpb24oeSxDKXsic3RyaW5nIiE9PXR5cGVvZiB5JiYoQz15LHk9IioiKTt2YXIgSywKTj0wLFE9eS50b0xvd2VyQ2FzZSgpLm1hdGNoKGhjKXx8W107aWYoVmEoQykpZm9yKDtLPVFbTisrXTspIisiPT09S1swXT8oSz1LLnNsaWNlKDEpfHwiKiIsKHJbS109cltLXXx8W10pLnVuc2hpZnQoQykpOihyW0tdPXJbS118fFtdKS5wdXNoKEMpfX1mdW5jdGlvbiBmYihyLHksQyxLKXtmdW5jdGlvbiBOKGJhKXt2YXIgJDtRW2JhXT0hMDtMLmVhY2gocltiYV18fFtdLGZ1bmN0aW9uKGphLHNhKXt2YXIgemE9c2EoeSxDLEspO2lmKCJzdHJpbmciPT09dHlwZW9mIHphJiYhUyYmIVFbemFdKXJldHVybiB5LmRhdGFUeXBlcy51bnNoaWZ0KHphKSxOKHphKSwhMTtpZihTKXJldHVybiEoJD16YSl9KTtyZXR1cm4gJH12YXIgUT17fSxTPXI9PT1QYjtyZXR1cm4gTih5LmRhdGFUeXBlc1swXSl8fCFRWyIqIl0mJk4oIioiKX1mdW5jdGlvbiB4YihyLHkpe3ZhciBDLEssTj1MLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKEMgaW4geSl2b2lkIDAhPT15W0NdJiYoKE5bQ10/CnI6S3x8KEs9e30pKVtDXT15W0NdKTtLJiZMLmV4dGVuZCghMCxyLEspO3JldHVybiByfXZhciBFYj1bXSxTYT1hLmRvY3VtZW50LGNjPU9iamVjdC5nZXRQcm90b3R5cGVPZixZYj1FYi5zbGljZSxCYz1FYi5jb25jYXQsRmM9RWIucHVzaCxRYz1FYi5pbmRleE9mLGxkPXt9LFdkPWxkLnRvU3RyaW5nLG1kPWxkLmhhc093blByb3BlcnR5LENkPW1kLnRvU3RyaW5nLFhkPUNkLmNhbGwoT2JqZWN0KSxrYj17fSxWYT1mdW5jdGlvbihyKXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIHImJiJudW1iZXIiIT09dHlwZW9mIHIubm9kZVR5cGV9LFBjPWZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT1yJiZyPT09ci53aW5kb3d9LEplPXt0eXBlOiEwLHNyYzohMCxub25jZTohMCxub01vZHVsZTohMH0sTD1mdW5jdGlvbihyLHkpe3JldHVybiBuZXcgTC5mbi5pbml0KHIseSl9LE5lPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZztMLmZuPUwucHJvdG90eXBlPXtqcXVlcnk6IjMuNC4wIiwKY29uc3RydWN0b3I6TCxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIFliLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihyKXtyZXR1cm4gbnVsbD09cj9ZYi5jYWxsKHRoaXMpOjA+cj90aGlzW3IrdGhpcy5sZW5ndGhdOnRoaXNbcl19LHB1c2hTdGFjazpmdW5jdGlvbihyKXtyPUwubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLHIpO3IucHJldk9iamVjdD10aGlzO3JldHVybiByfSxlYWNoOmZ1bmN0aW9uKHIpe3JldHVybiBMLmVhY2godGhpcyxyKX0sbWFwOmZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnB1c2hTdGFjayhMLm1hcCh0aGlzLGZ1bmN0aW9uKHksQyl7cmV0dXJuIHIuY2FsbCh5LEMseSl9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFliLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKHIpe3ZhciB5PQp0aGlzLmxlbmd0aDtyPStyKygwPnI/eTowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soMDw9ciYmcjx5P1t0aGlzW3JdXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDpGYyxzb3J0OkViLnNvcnQsc3BsaWNlOkViLnNwbGljZX07TC5leHRlbmQ9TC5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgcix5LEMsSyxOLFE9YXJndW1lbnRzWzBdfHx7fSxTPTEsYmE9YXJndW1lbnRzLmxlbmd0aCwkPSExOyJib29sZWFuIj09PXR5cGVvZiBRJiYoJD1RLFE9YXJndW1lbnRzW1NdfHx7fSxTKyspOyJvYmplY3QiPT09dHlwZW9mIFF8fFZhKFEpfHwoUT17fSk7Uz09PWJhJiYoUT10aGlzLFMtLSk7Zm9yKDtTPGJhO1MrKylpZihudWxsIT0ocj1hcmd1bWVudHNbU10pKWZvcih5IGluIHIpSz1yW3ldLCJfX3Byb3RvX18iIT09eSYmUSE9PUsmJigkJiZLJiYoTC5pc1BsYWluT2JqZWN0KEspfHwoTj1BcnJheS5pc0FycmF5KEspKSk/CihDPVFbeV0sQz1OJiYhQXJyYXkuaXNBcnJheShDKT9bXTpOfHxMLmlzUGxhaW5PYmplY3QoQyk/Qzp7fSxOPSExLFFbeV09TC5leHRlbmQoJCxDLEspKTp2b2lkIDAhPT1LJiYoUVt5XT1LKSk7cmV0dXJuIFF9O0wuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKygiMy40LjAiK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24ocil7dGhyb3cgRXJyb3Iocik7fSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKHIpe2lmKCFyfHwiW29iamVjdCBPYmplY3RdIiE9PVdkLmNhbGwocikpcmV0dXJuITE7cj1jYyhyKTtpZighcilyZXR1cm4hMDtyPW1kLmNhbGwociwiY29uc3RydWN0b3IiKSYmci5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIHImJkNkLmNhbGwocik9PT1YZH0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihyKXtmb3IodmFyIHkgaW4gcilyZXR1cm4hMTtyZXR1cm4hMH0sZ2xvYmFsRXZhbDpmdW5jdGlvbihyLAp5KXtxKHIse25vbmNlOnkmJnkubm9uY2V9KX0sZWFjaDpmdW5jdGlvbihyLHkpe3ZhciBDLEs9MDtpZihmKHIpKWZvcihDPXIubGVuZ3RoO0s8QyYmITEhPT15LmNhbGwocltLXSxLLHJbS10pO0srKyk7ZWxzZSBmb3IoSyBpbiByKWlmKCExPT09eS5jYWxsKHJbS10sSyxyW0tdKSlicmVhaztyZXR1cm4gcn0sdHJpbTpmdW5jdGlvbihyKXtyZXR1cm4gbnVsbD09cj8iIjoocisiIikucmVwbGFjZShOZSwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihyLHkpe3ZhciBDPXl8fFtdO251bGwhPXImJihmKE9iamVjdChyKSk/TC5tZXJnZShDLCJzdHJpbmciPT09dHlwZW9mIHI/W3JdOnIpOkZjLmNhbGwoQyxyKSk7cmV0dXJuIEN9LGluQXJyYXk6ZnVuY3Rpb24ocix5LEMpe3JldHVybiBudWxsPT15Py0xOlFjLmNhbGwoeSxyLEMpfSxtZXJnZTpmdW5jdGlvbihyLHkpe2Zvcih2YXIgQz0reS5sZW5ndGgsSz0wLE49ci5sZW5ndGg7SzxDO0srKylyW04rK109eVtLXTtyLmxlbmd0aD1OO3JldHVybiByfSwKZ3JlcDpmdW5jdGlvbihyLHksQyl7Zm9yKHZhciBLPVtdLE49MCxRPXIubGVuZ3RoLFM9IUM7TjxRO04rKylDPSF5KHJbTl0sTiksQyE9PVMmJksucHVzaChyW05dKTtyZXR1cm4gS30sbWFwOmZ1bmN0aW9uKHIseSxDKXt2YXIgSyxOLFE9MCxTPVtdO2lmKGYocikpZm9yKEs9ci5sZW5ndGg7UTxLO1ErKylOPXkocltRXSxRLEMpLG51bGwhPU4mJlMucHVzaChOKTtlbHNlIGZvcihRIGluIHIpTj15KHJbUV0sUSxDKSxudWxsIT1OJiZTLnB1c2goTik7cmV0dXJuIEJjLmFwcGx5KFtdLFMpfSxndWlkOjEsc3VwcG9ydDprYn0pOyJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYoTC5mbltTeW1ib2wuaXRlcmF0b3JdPUViW1N5bWJvbC5pdGVyYXRvcl0pO0wuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksZnVuY3Rpb24ocix5KXtsZFsiW29iamVjdCAiK3krIl0iXT15LnRvTG93ZXJDYXNlKCl9KTsKdmFyIEpjPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIHkoUixYLFcsZGEpe3ZhciBrYSx4YSx2YSxDYSx5YSxJYTt4YT1YJiZYLm93bmVyRG9jdW1lbnQ7SWE9WD9YLm5vZGVUeXBlOjk7Vz1XfHxbXTtpZigic3RyaW5nIiE9PXR5cGVvZiBSfHwhUnx8MSE9PUlhJiY5IT09SWEmJjExIT09SWEpcmV0dXJuIFc7aWYoIWRhJiYoKFg/WC5vd25lckRvY3VtZW50fHxYOmhiKSE9PUxhJiZuYihYKSxYPVh8fExhLHNiKSl7aWYoMTEhPT1JYSYmKHlhPVlkLmV4ZWMoUikpKWlmKGthPXlhWzFdKWlmKDk9PT1JYSlpZih2YT1YLmdldEVsZW1lbnRCeUlkKGthKSl7aWYodmEuaWQ9PT1rYSlyZXR1cm4gVy5wdXNoKHZhKSxXfWVsc2UgcmV0dXJuIFc7ZWxzZXtpZih4YSYmKHZhPXhhLmdldEVsZW1lbnRCeUlkKGthKSkmJnliKFgsdmEpJiZ2YS5pZD09PWthKXJldHVybiBXLnB1c2godmEpLFd9ZWxzZXtpZih5YVsyXSlyZXR1cm4gb2MuYXBwbHkoVyxYLmdldEVsZW1lbnRzQnlUYWdOYW1lKFIpKSxXO2lmKChrYT0KeWFbM10pJiZIYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZYLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIG9jLmFwcGx5KFcsWC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGthKSksV31pZihIYS5xc2EmJiEoZGNbUisiICJdfHxpYiYmaWIudGVzdChSKXx8MT09PUlhJiYib2JqZWN0Ij09PVgubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpe2thPVI7eGE9WDtpZigxPT09SWEmJlpkLnRlc3QoUikpeyhDYT1YLmdldEF0dHJpYnV0ZSgiaWQiKSk/Q2E9Q2EucmVwbGFjZShEZCxuZCk6WC5zZXRBdHRyaWJ1dGUoImlkIixDYT1nYik7SWE9cWIoUik7Zm9yKHhhPUlhLmxlbmd0aDt4YS0tOylJYVt4YV09IiMiK0NhKyIgIitNYShJYVt4YV0pO2thPUlhLmpvaW4oIiwiKTt4YT1vZC50ZXN0KFIpJiZ6YShYLnBhcmVudE5vZGUpfHxYfXRyeXtyZXR1cm4gb2MuYXBwbHkoVyx4YS5xdWVyeVNlbGVjdG9yQWxsKGthKSksV31jYXRjaChEYSl7ZGMoUiwhMCl9ZmluYWxseXtDYT09PWdiJiZYLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBXYihSLnJlcGxhY2UoUWIsCiIkMSIpLFgsVyxkYSl9ZnVuY3Rpb24gQygpe2Z1bmN0aW9uIFIoVyxkYSl7WC5wdXNoKFcrIiAiKT5hYi5jYWNoZUxlbmd0aCYmZGVsZXRlIFJbWC5zaGlmdCgpXTtyZXR1cm4gUltXKyIgIl09ZGF9dmFyIFg9W107cmV0dXJuIFJ9ZnVuY3Rpb24gSyhSKXtSW2diXT0hMDtyZXR1cm4gUn1mdW5jdGlvbiBOKFIpe3ZhciBYPUxhLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7dHJ5e3JldHVybiEhUihYKX1jYXRjaChXKXtyZXR1cm4hMX1maW5hbGx5e1gucGFyZW50Tm9kZSYmWC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFgpfX1mdW5jdGlvbiBRKFIsWCl7Zm9yKHZhciBXPVIuc3BsaXQoInwiKSxkYT1XLmxlbmd0aDtkYS0tOylhYi5hdHRySGFuZGxlW1dbZGFdXT1YfWZ1bmN0aW9uIFMoUixYKXt2YXIgVz1YJiZSLGRhPVcmJjE9PT1SLm5vZGVUeXBlJiYxPT09WC5ub2RlVHlwZSYmUi5zb3VyY2VJbmRleC1YLnNvdXJjZUluZGV4O2lmKGRhKXJldHVybiBkYTtpZihXKWZvcig7Vz1XLm5leHRTaWJsaW5nOylpZihXPT09ClgpcmV0dXJuLTE7cmV0dXJuIFI/MTotMX1mdW5jdGlvbiBiYShSKXtyZXR1cm4gZnVuY3Rpb24oWCl7cmV0dXJuImlucHV0Ij09PVgubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmWC50eXBlPT09Un19ZnVuY3Rpb24gJChSKXtyZXR1cm4gZnVuY3Rpb24oWCl7dmFyIFc9WC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09V3x8ImJ1dHRvbiI9PT1XKSYmWC50eXBlPT09Un19ZnVuY3Rpb24gamEoUil7cmV0dXJuIGZ1bmN0aW9uKFgpe3JldHVybiJmb3JtImluIFg/WC5wYXJlbnROb2RlJiYhMT09PVguZGlzYWJsZWQ/ImxhYmVsImluIFg/ImxhYmVsImluIFgucGFyZW50Tm9kZT9YLnBhcmVudE5vZGUuZGlzYWJsZWQ9PT1SOlguZGlzYWJsZWQ9PT1SOlguaXNEaXNhYmxlZD09PVJ8fFguaXNEaXNhYmxlZCE9PSFSJiZFZChYKT09PVI6WC5kaXNhYmxlZD09PVI6ImxhYmVsImluIFg/WC5kaXNhYmxlZD09PVI6ITF9fWZ1bmN0aW9uIHNhKFIpe3JldHVybiBLKGZ1bmN0aW9uKFgpe1g9CitYO3JldHVybiBLKGZ1bmN0aW9uKFcsZGEpe2Zvcih2YXIga2EseGE9UihbXSxXLmxlbmd0aCxYKSx2YT14YS5sZW5ndGg7dmEtLTspV1trYT14YVt2YV1dJiYoV1trYV09IShkYVtrYV09V1trYV0pKX0pfSl9ZnVuY3Rpb24gemEoUil7cmV0dXJuIFImJiJ1bmRlZmluZWQiIT09dHlwZW9mIFIuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJlJ9ZnVuY3Rpb24gaGEoKXt9ZnVuY3Rpb24gTWEoUil7Zm9yKHZhciBYPTAsVz1SLmxlbmd0aCxkYT0iIjtYPFc7WCsrKWRhKz1SW1hdLnZhbHVlO3JldHVybiBkYX1mdW5jdGlvbiBSYShSLFgsVyl7dmFyIGRhPVguZGlyLGthPVgubmV4dCx4YT1rYXx8ZGEsdmE9VyYmInBhcmVudE5vZGUiPT09eGEsQ2E9RmQrKztyZXR1cm4gWC5maXJzdD9mdW5jdGlvbih5YSxJYSxEYSl7Zm9yKDt5YT15YVtkYV07KWlmKDE9PT15YS5ub2RlVHlwZXx8dmEpcmV0dXJuIFIoeWEsSWEsRGEpO3JldHVybiExfTpmdW5jdGlvbih5YSxJYSxEYSl7dmFyIFRhLFlhLE5hPQpbQmIsQ2FdO2lmKERhKWZvcig7eWE9eWFbZGFdOyl7aWYoKDE9PT15YS5ub2RlVHlwZXx8dmEpJiZSKHlhLElhLERhKSlyZXR1cm4hMH1lbHNlIGZvcig7eWE9eWFbZGFdOylpZigxPT09eWEubm9kZVR5cGV8fHZhKWlmKFlhPXlhW2diXXx8KHlhW2diXT17fSksWWE9WWFbeWEudW5pcXVlSURdfHwoWWFbeWEudW5pcXVlSURdPXt9KSxrYSYma2E9PT15YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXlhPXlhW2RhXXx8eWE7ZWxzZXtpZigoVGE9WWFbeGFdKSYmVGFbMF09PT1CYiYmVGFbMV09PT1DYSlyZXR1cm4gTmFbMl09VGFbMl07WWFbeGFdPU5hO2lmKE5hWzJdPVIoeWEsSWEsRGEpKXJldHVybiEwfXJldHVybiExfX1mdW5jdGlvbiBHYihSKXtyZXR1cm4gMTxSLmxlbmd0aD9mdW5jdGlvbihYLFcsZGEpe2Zvcih2YXIga2E9Ui5sZW5ndGg7a2EtLTspaWYoIVJba2FdKFgsVyxkYSkpcmV0dXJuITE7cmV0dXJuITB9OlJbMF19ZnVuY3Rpb24gSmIoUixYLFcsZGEsa2Epe2Zvcih2YXIgeGEsCnZhPVtdLENhPTAseWE9Ui5sZW5ndGgsSWE9bnVsbCE9WDtDYTx5YTtDYSsrKWlmKHhhPVJbQ2FdKWlmKCFXfHxXKHhhLGRhLGthKSl2YS5wdXNoKHhhKSxJYSYmWC5wdXNoKENhKTtyZXR1cm4gdmF9ZnVuY3Rpb24gUmIoUixYLFcsZGEsa2EseGEpe2RhJiYhZGFbZ2JdJiYoZGE9UmIoZGEpKTtrYSYmIWthW2diXSYmKGthPVJiKGthLHhhKSk7cmV0dXJuIEsoZnVuY3Rpb24odmEsQ2EseWEsSWEpe3ZhciBEYSxUYSxZYT1bXSxOYT1bXSx0Yj1DYS5sZW5ndGgscmI7aWYoIShyYj12YSkpe3JiPVh8fCIqIjtmb3IodmFyIFphPXlhLm5vZGVUeXBlP1t5YV06eWEscGM9W10sR2M9MCxaYz1aYS5sZW5ndGg7R2M8WmM7R2MrKyl5KHJiLFphW0djXSxwYyk7cmI9cGN9cmI9IVJ8fCF2YSYmWD9yYjpKYihyYixZYSxSLHlhLElhKTtaYT1XP2thfHwodmE/Ujp0Ynx8ZGEpP1tdOkNhOnJiO1cmJlcocmIsWmEseWEsSWEpO2lmKGRhKWZvcihEYT1KYihaYSxOYSksZGEoRGEsW10seWEsSWEpLHlhPQpEYS5sZW5ndGg7eWEtLTspaWYoVGE9RGFbeWFdKVphW05hW3lhXV09IShyYltOYVt5YV1dPVRhKTtpZih2YSl7aWYoa2F8fFIpe2lmKGthKXtEYT1bXTtmb3IoeWE9WmEubGVuZ3RoO3lhLS07KShUYT1aYVt5YV0pJiZEYS5wdXNoKHJiW3lhXT1UYSk7a2EobnVsbCxaYT1bXSxEYSxJYSl9Zm9yKHlhPVphLmxlbmd0aDt5YS0tOykoVGE9WmFbeWFdKSYmLTE8KERhPWthP3ZjKHZhLFRhKTpZYVt5YV0pJiYodmFbRGFdPSEoQ2FbRGFdPVRhKSl9fWVsc2UgWmE9SmIoWmE9PT1DYT9aYS5zcGxpY2UodGIsWmEubGVuZ3RoKTpaYSksa2E/a2EobnVsbCxDYSxaYSxJYSk6b2MuYXBwbHkoQ2EsWmEpfSl9ZnVuY3Rpb24gemIoUil7dmFyIFgsVyxkYSxrYT1SLmxlbmd0aCx4YT1hYi5yZWxhdGl2ZVtSWzBdLnR5cGVdO1c9eGF8fGFiLnJlbGF0aXZlWyIgIl07Zm9yKHZhciB2YT14YT8xOjAsQ2E9UmEoZnVuY3Rpb24oRGEpe3JldHVybiBEYT09PVh9LFcsITApLHlhPVJhKGZ1bmN0aW9uKERhKXtyZXR1cm4tMTwKdmMoWCxEYSl9LFcsITApLElhPVtmdW5jdGlvbihEYSxUYSxZYSl7RGE9IXhhJiYoWWF8fFRhIT09cWMpfHwoKFg9VGEpLm5vZGVUeXBlP0NhKERhLFRhLFlhKTp5YShEYSxUYSxZYSkpO1g9bnVsbDtyZXR1cm4gRGF9XTt2YTxrYTt2YSsrKWlmKFc9YWIucmVsYXRpdmVbUlt2YV0udHlwZV0pSWE9W1JhKEdiKElhKSxXKV07ZWxzZXtXPWFiLmZpbHRlcltSW3ZhXS50eXBlXS5hcHBseShudWxsLFJbdmFdLm1hdGNoZXMpO2lmKFdbZ2JdKXtmb3IoZGE9Kyt2YTtkYTxrYSYmIWFiLnJlbGF0aXZlW1JbZGFdLnR5cGVdO2RhKyspO3JldHVybiBSYigxPHZhJiZHYihJYSksMTx2YSYmTWEoUi5zbGljZSgwLHZhLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09Ult2YS0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKFFiLCIkMSIpLFcsdmE8ZGEmJnpiKFIuc2xpY2UodmEsZGEpKSxkYTxrYSYmemIoUj1SLnNsaWNlKGRhKSksZGE8a2EmJk1hKFIpKX1JYS5wdXNoKFcpfXJldHVybiBHYihJYSl9ZnVuY3Rpb24gamMoUiwKWCl7dmFyIFc9MDxYLmxlbmd0aCxkYT0wPFIubGVuZ3RoLGthPWZ1bmN0aW9uKHhhLHZhLENhLHlhLElhKXt2YXIgRGEsVGEsWWEsTmE9MCx0Yj0iMCIscmI9eGEmJltdLFphPVtdLHBjPXFjLEdjPXhhfHxkYSYmYWIuZmluZC5UQUcoIioiLElhKSxaYz1CYis9bnVsbD09cGM/MTpNYXRoLnJhbmRvbSgpfHwwLjEsR2Q9R2MubGVuZ3RoO2ZvcihJYSYmKHFjPXZhPT09TGF8fHZhfHxJYSk7dGIhPT1HZCYmbnVsbCE9KERhPUdjW3RiXSk7dGIrKyl7aWYoZGEmJkRhKXtUYT0wO3ZhfHxEYS5vd25lckRvY3VtZW50PT09TGF8fChuYihEYSksQ2E9IXNiKTtmb3IoO1lhPVJbVGErK107KWlmKFlhKERhLHZhfHxMYSxDYSkpe3lhLnB1c2goRGEpO2JyZWFrfUlhJiYoQmI9WmMpfVcmJigoRGE9IVlhJiZEYSkmJk5hLS0seGEmJnJiLnB1c2goRGEpKX1OYSs9dGI7aWYoVyYmdGIhPT1OYSl7Zm9yKFRhPTA7WWE9WFtUYSsrXTspWWEocmIsWmEsdmEsQ2EpO2lmKHhhKXtpZigwPE5hKWZvcig7dGItLTspcmJbdGJdfHwKWmFbdGJdfHwoWmFbdGJdPWtjLmNhbGwoeWEpKTtaYT1KYihaYSl9b2MuYXBwbHkoeWEsWmEpO0lhJiYheGEmJjA8WmEubGVuZ3RoJiYxPE5hK1gubGVuZ3RoJiZ5LnVuaXF1ZVNvcnQoeWEpfUlhJiYoQmI9WmMscWM9cGMpO3JldHVybiByYn07cmV0dXJuIFc/SyhrYSk6a2F9dmFyIGxjLEhhLGFiLHdjLGRiLHFiLENiLFdiLHFjLFNiLGpiLG5iLExhLG1iLHNiLGliLE9hLEtiLHliLGdiPSJzaXp6bGUiKzEqbmV3IERhdGUsaGI9ci5kb2N1bWVudCxCYj0wLEZkPTAsJGQ9QygpLHBkPUMoKSxGYj1DKCksZGM9QygpLGJiPWZ1bmN0aW9uKFIsWCl7Uj09PVgmJihqYj0hMCk7cmV0dXJuIDB9LEhjPXt9Lmhhc093blByb3BlcnR5LHhjPVtdLGtjPXhjLnBvcCxhZT14Yy5wdXNoLG9jPXhjLnB1c2gsSGQ9eGMuc2xpY2UsdmM9ZnVuY3Rpb24oUixYKXtmb3IodmFyIFc9MCxkYT1SLmxlbmd0aDtXPGRhO1crKylpZihSW1ddPT09WClyZXR1cm4gVztyZXR1cm4tMX0sSWQ9L1tceDIwXHRcclxuXGZdKy9nLApRYj0vXltceDIwXHRcclxuXGZdK3woKD86XnxbXlxcXSkoPzpcXC4pKilbXHgyMFx0XHJcblxmXSskL2cseWM9L15bXHgyMFx0XHJcblxmXSosW1x4MjBcdFxyXG5cZl0qLyxiZT0vXltceDIwXHRcclxuXGZdKihbPit+XXxbXHgyMFx0XHJcblxmXSlbXHgyMFx0XHJcblxmXSovLFpkPS9bXHgyMFx0XHJcblxmXXw+LyxjZT1SZWdFeHAoIjooKD86XFxcXC58W1xcdy1dfFteXHgwMC1cXHhhMF0pKykoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXxcXFtbXFx4MjBcXHRcXHJcXG5cXGZdKigoPzpcXFxcLnxbXFx3LV18W15ceDAwLVxceGEwXSkrKSg/OltcXHgyMFxcdFxcclxcblxcZl0qKFsqXiR8IX5dP1x4M2QpW1xceDIwXFx0XFxyXFxuXFxmXSooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoKD86XFxcXC58W1xcdy1dfFteXHgwMC1cXHhhMF0pKykpfClbXFx4MjBcXHRcXHJcXG5cXGZdKlxcXSkqKXwuKilcXCl8KSIpLApkZT0vXig/OlxcLnxbXHctXXxbXlx4MDAtXHhhMF0pKyQvLFNjPXtJRDovXiMoKD86XFwufFtcdy1dfFteXHgwMC1ceGEwXSkrKS8sQ0xBU1M6L15cLigoPzpcXC58W1x3LV18W15ceDAwLVx4YTBdKSspLyxUQUc6L14oKD86XFwufFtcdy1dfFteXHgwMC1ceGEwXSkrfFsqXSkvLEFUVFI6UmVnRXhwKCJeXFxbW1xceDIwXFx0XFxyXFxuXFxmXSooKD86XFxcXC58W1xcdy1dfFteXHgwMC1cXHhhMF0pKykoPzpbXFx4MjBcXHRcXHJcXG5cXGZdKihbKl4kfCF+XT9ceDNkKVtcXHgyMFxcdFxcclxcblxcZl0qKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCg/OlxcXFwufFtcXHctXXxbXlx4MDAtXFx4YTBdKSspKXwpW1xceDIwXFx0XFxyXFxuXFxmXSpcXF0iKSxQU0VVRE86UmVnRXhwKCJeOigoPzpcXFxcLnxbXFx3LV18W15ceDAwLVxceGEwXSkrKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfFxcW1tcXHgyMFxcdFxcclxcblxcZl0qKCg/OlxcXFwufFtcXHctXXxbXlx4MDAtXFx4YTBdKSspKD86W1xceDIwXFx0XFxyXFxuXFxmXSooWypeJHwhfl0/XHgzZClbXFx4MjBcXHRcXHJcXG5cXGZdKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgoPzpcXFxcLnxbXFx3LV18W15ceDAwLVxceGEwXSkrKSl8KVtcXHgyMFxcdFxcclxcblxcZl0qXFxdKSopfC4qKVxcKXwpIiksCkNISUxEOlJlZ0V4cCgiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoW1xceDIwXFx0XFxyXFxuXFxmXSooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufClbXFx4MjBcXHRcXHJcXG5cXGZdKig/OihbKy1dfClbXFx4MjBcXHRcXHJcXG5cXGZdKihcXGQrKXwpKVtcXHgyMFxcdFxcclxcblxcZl0qXFwpfCkiLCJpIiksYm9vbDpSZWdFeHAoIl4oPzpjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCkkIiwiaSIpLG5lZWRzQ29udGV4dDpSZWdFeHAoIl5bXFx4MjBcXHRcXHJcXG5cXGZdKltceDNlK35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoW1xceDIwXFx0XFxyXFxuXFxmXSooKD86LVxcZCk/XFxkKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcKXwpKD9ceDNkW14tXXwkKSIsCiJpIil9LCRjPS9IVE1MJC9pLGVlPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksZmU9L15oXGQkL2ksSWM9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLFlkPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sb2Q9L1srfl0vLG1jPS9cXChbXGRhLWZdezEsNn1bXHgyMFx0XHJcblxmXT98KFtceDIwXHRcclxuXGZdKXwuKS9pZyxlYz1mdW5jdGlvbihSLFgsVyl7Uj0iMHgiK1gtNjU1MzY7cmV0dXJuIFIhPT1SfHxXP1g6MD5SP1N0cmluZy5mcm9tQ2hhckNvZGUoUis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShSPj4xMHw1NTI5NixSJjEwMjN8NTYzMjApfSxEZD0vKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZyxuZD1mdW5jdGlvbihSLFgpe3JldHVybiBYPyJceDAwIj09PVI/Ilx1ZmZmZCI6Ui5zbGljZSgwLC0xKSsiXFwiK1IuY2hhckNvZGVBdChSLmxlbmd0aC0xKS50b1N0cmluZygxNikrIiAiOgoiXFwiK1J9LHFkPWZ1bmN0aW9uKCl7bmIoKX0sRWQ9UmEoZnVuY3Rpb24oUil7cmV0dXJuITA9PT1SLmRpc2FibGVkJiYiZmllbGRzZXQiPT09Ui5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e29jLmFwcGx5KHhjPUhkLmNhbGwoaGIuY2hpbGROb2RlcyksaGIuY2hpbGROb2Rlcyl9Y2F0Y2goSmQpe29jPXthcHBseTp4Yy5sZW5ndGg/ZnVuY3Rpb24oUixYKXthZS5hcHBseShSLEhkLmNhbGwoWCkpfTpmdW5jdGlvbihSLFgpe2Zvcih2YXIgVz1SLmxlbmd0aCxkYT0wO1JbVysrXT1YW2RhKytdOyk7Ui5sZW5ndGg9Vy0xfX19SGE9eS5zdXBwb3J0PXt9O2RiPXkuaXNYTUw9ZnVuY3Rpb24oUil7dmFyIFg9KFIub3duZXJEb2N1bWVudHx8UikuZG9jdW1lbnRFbGVtZW50O3JldHVybiEkYy50ZXN0KFIubmFtZXNwYWNlVVJJfHxYJiZYLm5vZGVOYW1lfHwiSFRNTCIpfTtuYj15LnNldERvY3VtZW50PWZ1bmN0aW9uKFIpe3ZhciBYOwpSPVI/Ui5vd25lckRvY3VtZW50fHxSOmhiO2lmKFI9PT1MYXx8OSE9PVIubm9kZVR5cGV8fCFSLmRvY3VtZW50RWxlbWVudClyZXR1cm4gTGE7TGE9UjttYj1MYS5kb2N1bWVudEVsZW1lbnQ7c2I9IWRiKExhKTtoYiE9PUxhJiYoWD1MYS5kZWZhdWx0VmlldykmJlgudG9wIT09WCYmKFguYWRkRXZlbnRMaXN0ZW5lcj9YLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIscWQsITEpOlguYXR0YWNoRXZlbnQmJlguYXR0YWNoRXZlbnQoIm9udW5sb2FkIixxZCkpO0hhLmF0dHJpYnV0ZXM9TihmdW5jdGlvbihXKXtXLmNsYXNzTmFtZT0iaSI7cmV0dXJuIVcuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKX0pO0hhLmdldEVsZW1lbnRzQnlUYWdOYW1lPU4oZnVuY3Rpb24oVyl7Vy5hcHBlbmRDaGlsZChMYS5jcmVhdGVDb21tZW50KCIiKSk7cmV0dXJuIVcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KTtIYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPUljLnRlc3QoTGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSk7CkhhLmdldEJ5SWQ9TihmdW5jdGlvbihXKXttYi5hcHBlbmRDaGlsZChXKS5pZD1nYjtyZXR1cm4hTGEuZ2V0RWxlbWVudHNCeU5hbWV8fCFMYS5nZXRFbGVtZW50c0J5TmFtZShnYikubGVuZ3RofSk7SGEuZ2V0QnlJZD8oYWIuZmlsdGVyLklEPWZ1bmN0aW9uKFcpe3ZhciBkYT1XLnJlcGxhY2UobWMsZWMpO3JldHVybiBmdW5jdGlvbihrYSl7cmV0dXJuIGthLmdldEF0dHJpYnV0ZSgiaWQiKT09PWRhfX0sYWIuZmluZC5JRD1mdW5jdGlvbihXLGRhKXtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBkYS5nZXRFbGVtZW50QnlJZCYmc2Ipe3ZhciBrYT1kYS5nZXRFbGVtZW50QnlJZChXKTtyZXR1cm4ga2E/W2thXTpbXX19KTooYWIuZmlsdGVyLklEPWZ1bmN0aW9uKFcpe3ZhciBkYT1XLnJlcGxhY2UobWMsZWMpO3JldHVybiBmdW5jdGlvbihrYSl7cmV0dXJuKGthPSJ1bmRlZmluZWQiIT09dHlwZW9mIGthLmdldEF0dHJpYnV0ZU5vZGUmJmthLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiYKa2EudmFsdWU9PT1kYX19LGFiLmZpbmQuSUQ9ZnVuY3Rpb24oVyxkYSl7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgZGEuZ2V0RWxlbWVudEJ5SWQmJnNiKXt2YXIga2EseGEsdmEsQ2E9ZGEuZ2V0RWxlbWVudEJ5SWQoVyk7aWYoQ2Epe2lmKChrYT1DYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYma2EudmFsdWU9PT1XKXJldHVybltDYV07dmE9ZGEuZ2V0RWxlbWVudHNCeU5hbWUoVyk7Zm9yKHhhPTA7Q2E9dmFbeGErK107KWlmKChrYT1DYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYma2EudmFsdWU9PT1XKXJldHVybltDYV19cmV0dXJuW119fSk7YWIuZmluZC5UQUc9SGEuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oVyxkYSl7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgZGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUpcmV0dXJuIGRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKFcpO2lmKEhhLnFzYSlyZXR1cm4gZGEucXVlcnlTZWxlY3RvckFsbChXKX06ZnVuY3Rpb24oVyxkYSl7dmFyIGthLAp4YT1bXSx2YT0wLENhPWRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKFcpO2lmKCIqIj09PVcpe2Zvcig7a2E9Q2FbdmErK107KTE9PT1rYS5ub2RlVHlwZSYmeGEucHVzaChrYSk7cmV0dXJuIHhhfXJldHVybiBDYX07YWIuZmluZC5DTEFTUz1IYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihXLGRhKXtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBkYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZzYilyZXR1cm4gZGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShXKX07T2E9W107aWI9W107aWYoSGEucXNhPUljLnRlc3QoTGEucXVlcnlTZWxlY3RvckFsbCkpTihmdW5jdGlvbihXKXttYi5hcHBlbmRDaGlsZChXKS5pbm5lckhUTUw9Ilx4M2NhIGlkXHgzZCciK2diKyInXHgzZVx4M2MvYVx4M2VceDNjc2VsZWN0IGlkXHgzZCciK2diKyItXHJcXCcgbXNhbGxvd2NhcHR1cmVceDNkJydceDNlXHgzY29wdGlvbiBzZWxlY3RlZFx4M2QnJ1x4M2VceDNjL29wdGlvblx4M2VceDNjL3NlbGVjdFx4M2UiOwpXLnF1ZXJ5U2VsZWN0b3JBbGwoIlttc2FsbG93Y2FwdHVyZV5ceDNkJyddIikubGVuZ3RoJiZpYi5wdXNoKCJbKl4kXVx4M2RbXFx4MjBcXHRcXHJcXG5cXGZdKig/OicnfFwiXCIpIik7Vy5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RofHxpYi5wdXNoKCJcXFtbXFx4MjBcXHRcXHJcXG5cXGZdKig/OnZhbHVlfGNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkKSIpO1cucXVlcnlTZWxlY3RvckFsbCgiW2lkflx4M2QiK2diKyItXSIpLmxlbmd0aHx8aWIucHVzaCgiflx4M2QiKTtXLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxpYi5wdXNoKCI6Y2hlY2tlZCIpO1cucXVlcnlTZWxlY3RvckFsbCgiYSMiK2diKyIrKiIpLmxlbmd0aHx8aWIucHVzaCgiLiMuK1srfl0iKX0pLE4oZnVuY3Rpb24oVyl7Vy5pbm5lckhUTUw9CiJceDNjYSBocmVmXHgzZCcnIGRpc2FibGVkXHgzZCdkaXNhYmxlZCdceDNlXHgzYy9hXHgzZVx4M2NzZWxlY3QgZGlzYWJsZWRceDNkJ2Rpc2FibGVkJ1x4M2VceDNjb3B0aW9uL1x4M2VceDNjL3NlbGVjdFx4M2UiO3ZhciBkYT1MYS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2RhLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpO1cuYXBwZW5kQ2hpbGQoZGEpLnNldEF0dHJpYnV0ZSgibmFtZSIsIkQiKTtXLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lXHgzZGRdIikubGVuZ3RoJiZpYi5wdXNoKCJuYW1lW1xceDIwXFx0XFxyXFxuXFxmXSpbKl4kfCF+XT9ceDNkIik7MiE9PVcucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGgmJmliLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIik7bWIuYXBwZW5kQ2hpbGQoVykuZGlzYWJsZWQ9ITA7MiE9PVcucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoJiZpYi5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpOwpXLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKTtpYi5wdXNoKCIsLio6Iil9KTsoSGEubWF0Y2hlc1NlbGVjdG9yPUljLnRlc3QoS2I9bWIubWF0Y2hlc3x8bWIud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxtYi5tb3pNYXRjaGVzU2VsZWN0b3J8fG1iLm9NYXRjaGVzU2VsZWN0b3J8fG1iLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJk4oZnVuY3Rpb24oVyl7SGEuZGlzY29ubmVjdGVkTWF0Y2g9S2IuY2FsbChXLCIqIik7S2IuY2FsbChXLCJbcyFceDNkJyddOngiKTtPYS5wdXNoKCIhXHgzZCIsIjooKD86XFxcXC58W1xcdy1dfFteXHgwMC1cXHhhMF0pKykoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXxcXFtbXFx4MjBcXHRcXHJcXG5cXGZdKigoPzpcXFxcLnxbXFx3LV18W15ceDAwLVxceGEwXSkrKSg/OltcXHgyMFxcdFxcclxcblxcZl0qKFsqXiR8IX5dP1x4M2QpW1xceDIwXFx0XFxyXFxuXFxmXSooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoKD86XFxcXC58W1xcdy1dfFteXHgwMC1cXHhhMF0pKykpfClbXFx4MjBcXHRcXHJcXG5cXGZdKlxcXSkqKXwuKilcXCl8KSIpfSk7CmliPWliLmxlbmd0aCYmUmVnRXhwKGliLmpvaW4oInwiKSk7T2E9T2EubGVuZ3RoJiZSZWdFeHAoT2Euam9pbigifCIpKTt5Yj0oWD1JYy50ZXN0KG1iLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSl8fEljLnRlc3QobWIuY29udGFpbnMpP2Z1bmN0aW9uKFcsZGEpe3ZhciBrYT05PT09Vy5ub2RlVHlwZT9XLmRvY3VtZW50RWxlbWVudDpXLHhhPWRhJiZkYS5wYXJlbnROb2RlO3JldHVybiBXPT09eGF8fCEhKHhhJiYxPT09eGEubm9kZVR5cGUmJihrYS5jb250YWlucz9rYS5jb250YWlucyh4YSk6Vy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmVy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih4YSkmMTYpKX06ZnVuY3Rpb24oVyxkYSl7aWYoZGEpZm9yKDtkYT1kYS5wYXJlbnROb2RlOylpZihkYT09PVcpcmV0dXJuITA7cmV0dXJuITF9O2JiPVg/ZnVuY3Rpb24oVyxkYSl7aWYoVz09PWRhKXJldHVybiBqYj0hMCwwO3ZhciBrYT0hVy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hZGEuY29tcGFyZURvY3VtZW50UG9zaXRpb247CmlmKGthKXJldHVybiBrYTtrYT0oVy5vd25lckRvY3VtZW50fHxXKT09PShkYS5vd25lckRvY3VtZW50fHxkYSk/Vy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkYSk6MTtyZXR1cm4ga2EmMXx8IUhhLnNvcnREZXRhY2hlZCYmZGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oVyk9PT1rYT9XPT09TGF8fFcub3duZXJEb2N1bWVudD09PWhiJiZ5YihoYixXKT8tMTpkYT09PUxhfHxkYS5vd25lckRvY3VtZW50PT09aGImJnliKGhiLGRhKT8xOlNiP3ZjKFNiLFcpLXZjKFNiLGRhKTowOmthJjQ/LTE6MX06ZnVuY3Rpb24oVyxkYSl7aWYoVz09PWRhKXJldHVybiBqYj0hMCwwO3ZhciBrYSx4YT0wO2thPVcucGFyZW50Tm9kZTt2YXIgdmE9ZGEucGFyZW50Tm9kZSxDYT1bV10seWE9W2RhXTtpZigha2F8fCF2YSlyZXR1cm4gVz09PUxhPy0xOmRhPT09TGE/MTprYT8tMTp2YT8xOlNiP3ZjKFNiLFcpLXZjKFNiLGRhKTowO2lmKGthPT09dmEpcmV0dXJuIFMoVyxkYSk7Zm9yKGthPVc7a2E9a2EucGFyZW50Tm9kZTspQ2EudW5zaGlmdChrYSk7CmZvcihrYT1kYTtrYT1rYS5wYXJlbnROb2RlOyl5YS51bnNoaWZ0KGthKTtmb3IoO0NhW3hhXT09PXlhW3hhXTspeGErKztyZXR1cm4geGE/UyhDYVt4YV0seWFbeGFdKTpDYVt4YV09PT1oYj8tMTp5YVt4YV09PT1oYj8xOjB9O3JldHVybiBMYX07eS5tYXRjaGVzPWZ1bmN0aW9uKFIsWCl7cmV0dXJuIHkoUixudWxsLG51bGwsWCl9O3kubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKFIsWCl7KFIub3duZXJEb2N1bWVudHx8UikhPT1MYSYmbmIoUik7aWYoSGEubWF0Y2hlc1NlbGVjdG9yJiZzYiYmIShkY1tYKyIgIl18fE9hJiZPYS50ZXN0KFgpfHxpYiYmaWIudGVzdChYKSkpdHJ5e3ZhciBXPUtiLmNhbGwoUixYKTtpZihXfHxIYS5kaXNjb25uZWN0ZWRNYXRjaHx8Ui5kb2N1bWVudCYmMTEhPT1SLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBXfWNhdGNoKGRhKXtkYyhYLCEwKX1yZXR1cm4gMDx5KFgsTGEsbnVsbCxbUl0pLmxlbmd0aH07eS5jb250YWlucz1mdW5jdGlvbihSLFgpeyhSLm93bmVyRG9jdW1lbnR8fApSKSE9PUxhJiZuYihSKTtyZXR1cm4geWIoUixYKX07eS5hdHRyPWZ1bmN0aW9uKFIsWCl7KFIub3duZXJEb2N1bWVudHx8UikhPT1MYSYmbmIoUik7dmFyIFc9YWIuYXR0ckhhbmRsZVtYLnRvTG93ZXJDYXNlKCldLFc9VyYmSGMuY2FsbChhYi5hdHRySGFuZGxlLFgudG9Mb3dlckNhc2UoKSk/VyhSLFgsIXNiKTp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PVc/VzpIYS5hdHRyaWJ1dGVzfHwhc2I/Ui5nZXRBdHRyaWJ1dGUoWCk6KFc9Ui5nZXRBdHRyaWJ1dGVOb2RlKFgpKSYmVy5zcGVjaWZpZWQ/Vy52YWx1ZTpudWxsfTt5LmVzY2FwZT1mdW5jdGlvbihSKXtyZXR1cm4oUisiIikucmVwbGFjZShEZCxuZCl9O3kuZXJyb3I9ZnVuY3Rpb24oUil7dGhyb3cgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrUik7fTt5LnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oUil7dmFyIFgsVz1bXSxkYT0wLGthPTA7amI9IUhhLmRldGVjdER1cGxpY2F0ZXM7U2I9IUhhLnNvcnRTdGFibGUmJgpSLnNsaWNlKDApO1Iuc29ydChiYik7aWYoamIpe2Zvcig7WD1SW2thKytdOylYPT09UltrYV0mJihkYT1XLnB1c2goa2EpKTtmb3IoO2RhLS07KVIuc3BsaWNlKFdbZGFdLDEpfVNiPW51bGw7cmV0dXJuIFJ9O3djPXkuZ2V0VGV4dD1mdW5jdGlvbihSKXt2YXIgWCxXPSIiLGRhPTA7WD1SLm5vZGVUeXBlO2lmKCFYKWZvcig7WD1SW2RhKytdOylXKz13YyhYKTtlbHNlIGlmKDE9PT1YfHw5PT09WHx8MTE9PT1YKXtpZigic3RyaW5nIj09PXR5cGVvZiBSLnRleHRDb250ZW50KXJldHVybiBSLnRleHRDb250ZW50O2ZvcihSPVIuZmlyc3RDaGlsZDtSO1I9Ui5uZXh0U2libGluZylXKz13YyhSKX1lbHNlIGlmKDM9PT1YfHw0PT09WClyZXR1cm4gUi5ub2RlVmFsdWU7cmV0dXJuIFd9O2FiPXkuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86SyxtYXRjaDpTYyxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyJceDNlIjp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sCiIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKFIpe1JbMV09UlsxXS5yZXBsYWNlKG1jLGVjKTtSWzNdPShSWzNdfHxSWzRdfHxSWzVdfHwiIikucmVwbGFjZShtYyxlYyk7In5ceDNkIj09PVJbMl0mJihSWzNdPSIgIitSWzNdKyIgIik7cmV0dXJuIFIuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oUil7UlsxXT1SWzFdLnRvTG93ZXJDYXNlKCk7Im50aCI9PT1SWzFdLnNsaWNlKDAsMyk/KFJbM118fHkuZXJyb3IoUlswXSksUls0XT0rKFJbNF0/Uls1XSsoUls2XXx8MSk6MiooImV2ZW4iPT09UlszXXx8Im9kZCI9PT1SWzNdKSksUls1XT0rKFJbN10rUls4XXx8Im9kZCI9PT1SWzNdKSk6UlszXSYmeS5lcnJvcihSWzBdKTtyZXR1cm4gUn0sUFNFVURPOmZ1bmN0aW9uKFIpe3ZhciBYLFc9IVJbNl0mJlJbMl07aWYoU2MuQ0hJTEQudGVzdChSWzBdKSlyZXR1cm4gbnVsbDsKUlszXT9SWzJdPVJbNF18fFJbNV18fCIiOlcmJmNlLnRlc3QoVykmJihYPXFiKFcsITApKSYmKFg9Vy5pbmRleE9mKCIpIixXLmxlbmd0aC1YKS1XLmxlbmd0aCkmJihSWzBdPVJbMF0uc2xpY2UoMCxYKSxSWzJdPVcuc2xpY2UoMCxYKSk7cmV0dXJuIFIuc2xpY2UoMCwzKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKFIpe3ZhciBYPVIucmVwbGFjZShtYyxlYykudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1SP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKFcpe3JldHVybiBXLm5vZGVOYW1lJiZXLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1YfX0sQ0xBU1M6ZnVuY3Rpb24oUil7dmFyIFg9JGRbUisiICJdO3JldHVybiBYfHwoWD1SZWdFeHAoIihefFtcXHgyMFxcdFxcclxcblxcZl0pIitSKyIoW1xceDIwXFx0XFxyXFxuXFxmXXwkKSIpKSYmJGQoUixmdW5jdGlvbihXKXtyZXR1cm4gWC50ZXN0KCJzdHJpbmciPT09dHlwZW9mIFcuY2xhc3NOYW1lJiZXLmNsYXNzTmFtZXx8CiJ1bmRlZmluZWQiIT09dHlwZW9mIFcuZ2V0QXR0cmlidXRlJiZXLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oUixYLFcpe3JldHVybiBmdW5jdGlvbihkYSl7ZGE9eS5hdHRyKGRhLFIpO2lmKG51bGw9PWRhKXJldHVybiIhXHgzZCI9PT1YO2lmKCFYKXJldHVybiEwO2RhKz0iIjtyZXR1cm4iXHgzZCI9PT1YP2RhPT09VzoiIVx4M2QiPT09WD9kYSE9PVc6Il5ceDNkIj09PVg/VyYmMD09PWRhLmluZGV4T2YoVyk6IipceDNkIj09PVg/VyYmLTE8ZGEuaW5kZXhPZihXKToiJFx4M2QiPT09WD9XJiZkYS5zbGljZSgtVy5sZW5ndGgpPT09Vzoiflx4M2QiPT09WD8tMTwoIiAiK2RhLnJlcGxhY2UoSWQsIiAiKSsiICIpLmluZGV4T2YoVyk6InxceDNkIj09PVg/ZGE9PT1XfHxkYS5zbGljZSgwLFcubGVuZ3RoKzEpPT09VysiLSI6ITF9fSxDSElMRDpmdW5jdGlvbihSLFgsVyxkYSxrYSl7dmFyIHhhPSJudGgiIT09Ui5zbGljZSgwLDMpLHZhPSJsYXN0IiE9PQpSLnNsaWNlKC00KSxDYT0ib2YtdHlwZSI9PT1YO3JldHVybiAxPT09ZGEmJjA9PT1rYT9mdW5jdGlvbih5YSl7cmV0dXJuISF5YS5wYXJlbnROb2RlfTpmdW5jdGlvbih5YSxJYSxEYSl7dmFyIFRhLFlhLE5hLHRiLHJiO0lhPXhhIT09dmE/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIjt2YXIgWmE9eWEucGFyZW50Tm9kZSxwYz1DYSYmeWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtEYT0hRGEmJiFDYTtUYT0hMTtpZihaYSl7aWYoeGEpe2Zvcig7SWE7KXtmb3IoTmE9eWE7TmE9TmFbSWFdOylpZihDYT9OYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09cGM6MT09PU5hLm5vZGVUeXBlKXJldHVybiExO3JiPUlhPSJvbmx5Ij09PVImJiFyYiYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1yYj1bdmE/WmEuZmlyc3RDaGlsZDpaYS5sYXN0Q2hpbGRdO2lmKHZhJiZEYSlmb3IoTmE9WmEsWWE9TmFbZ2JdfHwoTmFbZ2JdPXt9KSxZYT1ZYVtOYS51bmlxdWVJRF18fChZYVtOYS51bmlxdWVJRF09Cnt9KSxUYT1ZYVtSXXx8W10sVGE9KHRiPVRhWzBdPT09QmImJlRhWzFdKSYmVGFbMl0sTmE9dGImJlphLmNoaWxkTm9kZXNbdGJdO05hPSsrdGImJk5hJiZOYVtJYV18fChUYT10Yj0wKXx8cmIucG9wKCk7KXtpZigxPT09TmEubm9kZVR5cGUmJisrVGEmJk5hPT09eWEpe1lhW1JdPVtCYix0YixUYV07YnJlYWt9fWVsc2UgaWYoRGEmJihOYT15YSxZYT1OYVtnYl18fChOYVtnYl09e30pLFlhPVlhW05hLnVuaXF1ZUlEXXx8KFlhW05hLnVuaXF1ZUlEXT17fSksVGE9WWFbUl18fFtdLFRhPXRiPVRhWzBdPT09QmImJlRhWzFdKSwhMT09PVRhKWZvcig7KE5hPSsrdGImJk5hJiZOYVtJYV18fChUYT10Yj0wKXx8cmIucG9wKCkpJiYoKENhP05hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT1wYzoxIT09TmEubm9kZVR5cGUpfHwhKytUYXx8KERhJiYoWWE9TmFbZ2JdfHwoTmFbZ2JdPXt9KSxZYT1ZYVtOYS51bmlxdWVJRF18fChZYVtOYS51bmlxdWVJRF09e30pLFlhW1JdPVtCYixUYV0pLApOYSE9PXlhKSk7KTtUYS09a2E7cmV0dXJuIFRhPT09ZGF8fDA9PT1UYSVkYSYmMDw9VGEvZGF9fX0sUFNFVURPOmZ1bmN0aW9uKFIsWCl7dmFyIFcsZGE9YWIucHNldWRvc1tSXXx8YWIuc2V0RmlsdGVyc1tSLnRvTG93ZXJDYXNlKCldfHx5LmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrUik7cmV0dXJuIGRhW2diXT9kYShYKToxPGRhLmxlbmd0aD8oVz1bUixSLCIiLFhdLGFiLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoUi50b0xvd2VyQ2FzZSgpKT9LKGZ1bmN0aW9uKGthLHhhKXtmb3IodmFyIHZhLENhPWRhKGthLFgpLHlhPUNhLmxlbmd0aDt5YS0tOyl2YT12YyhrYSxDYVt5YV0pLGthW3ZhXT0hKHhhW3ZhXT1DYVt5YV0pfSk6ZnVuY3Rpb24oa2Epe3JldHVybiBkYShrYSwwLFcpfSk6ZGF9fSxwc2V1ZG9zOntub3Q6SyhmdW5jdGlvbihSKXt2YXIgWD1bXSxXPVtdLGRhPUNiKFIucmVwbGFjZShRYiwiJDEiKSk7cmV0dXJuIGRhW2diXT9LKGZ1bmN0aW9uKGthLHhhLHZhLApDYSl7Q2E9ZGEoa2EsbnVsbCxDYSxbXSk7Zm9yKHZhciB5YT1rYS5sZW5ndGg7eWEtLTspaWYodmE9Q2FbeWFdKWthW3lhXT0hKHhhW3lhXT12YSl9KTpmdW5jdGlvbihrYSx4YSx2YSl7WFswXT1rYTtkYShYLG51bGwsdmEsVyk7WFswXT1udWxsO3JldHVybiFXLnBvcCgpfX0pLGhhczpLKGZ1bmN0aW9uKFIpe3JldHVybiBmdW5jdGlvbihYKXtyZXR1cm4gMDx5KFIsWCkubGVuZ3RofX0pLGNvbnRhaW5zOksoZnVuY3Rpb24oUil7Uj1SLnJlcGxhY2UobWMsZWMpO3JldHVybiBmdW5jdGlvbihYKXtyZXR1cm4tMTwoWC50ZXh0Q29udGVudHx8d2MoWCkpLmluZGV4T2YoUil9fSksbGFuZzpLKGZ1bmN0aW9uKFIpe2RlLnRlc3QoUnx8IiIpfHx5LmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK1IpO1I9Ui5yZXBsYWNlKG1jLGVjKS50b0xvd2VyQ2FzZSgpO3JldHVybiBmdW5jdGlvbihYKXt2YXIgVztkbyBpZihXPXNiP1gubGFuZzpYLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8WC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gVz0KVy50b0xvd2VyQ2FzZSgpLFc9PT1SfHwwPT09Vy5pbmRleE9mKFIrIi0iKTt3aGlsZSgoWD1YLnBhcmVudE5vZGUpJiYxPT09WC5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKFIpe3ZhciBYPXIubG9jYXRpb24mJnIubG9jYXRpb24uaGFzaDtyZXR1cm4gWCYmWC5zbGljZSgxKT09PVIuaWR9LHJvb3Q6ZnVuY3Rpb24oUil7cmV0dXJuIFI9PT1tYn0sZm9jdXM6ZnVuY3Rpb24oUil7cmV0dXJuIFI9PT1MYS5hY3RpdmVFbGVtZW50JiYoIUxhLmhhc0ZvY3VzfHxMYS5oYXNGb2N1cygpKSYmISEoUi50eXBlfHxSLmhyZWZ8fH5SLnRhYkluZGV4KX0sZW5hYmxlZDpqYSghMSksZGlzYWJsZWQ6amEoITApLGNoZWNrZWQ6ZnVuY3Rpb24oUil7dmFyIFg9Ui5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1YJiYhIVIuY2hlY2tlZHx8Im9wdGlvbiI9PT1YJiYhIVIuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKFIpe3JldHVybiEwPT09Ui5zZWxlY3RlZH0sCmVtcHR5OmZ1bmN0aW9uKFIpe2ZvcihSPVIuZmlyc3RDaGlsZDtSO1I9Ui5uZXh0U2libGluZylpZig2PlIubm9kZVR5cGUpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihSKXtyZXR1cm4hYWIucHNldWRvcy5lbXB0eShSKX0saGVhZGVyOmZ1bmN0aW9uKFIpe3JldHVybiBmZS50ZXN0KFIubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihSKXtyZXR1cm4gZWUudGVzdChSLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKFIpe3ZhciBYPVIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09WCYmImJ1dHRvbiI9PT1SLnR5cGV8fCJidXR0b24iPT09WH0sdGV4dDpmdW5jdGlvbihSKXt2YXIgWDtyZXR1cm4iaW5wdXQiPT09Ui5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1SLnR5cGUmJihudWxsPT0oWD1SLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09WC50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6c2EoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSwKbGFzdDpzYShmdW5jdGlvbihSLFgpe3JldHVybltYLTFdfSksZXE6c2EoZnVuY3Rpb24oUixYLFcpe3JldHVyblswPlc/VytYOlddfSksZXZlbjpzYShmdW5jdGlvbihSLFgpe2Zvcih2YXIgVz0wO1c8WDtXKz0yKVIucHVzaChXKTtyZXR1cm4gUn0pLG9kZDpzYShmdW5jdGlvbihSLFgpe2Zvcih2YXIgVz0xO1c8WDtXKz0yKVIucHVzaChXKTtyZXR1cm4gUn0pLGx0OnNhKGZ1bmN0aW9uKFIsWCxXKXtmb3IoWD0wPlc/VytYOlc+WD9YOlc7MDw9LS1YOylSLnB1c2goWCk7cmV0dXJuIFJ9KSxndDpzYShmdW5jdGlvbihSLFgsVyl7Zm9yKFc9MD5XP1crWDpXOysrVzxYOylSLnB1c2goVyk7cmV0dXJuIFJ9KX19O2FiLnBzZXVkb3MubnRoPWFiLnBzZXVkb3MuZXE7Zm9yKGxjIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWFiLnBzZXVkb3NbbGNdPWJhKGxjKTtmb3IobGMgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlhYi5wc2V1ZG9zW2xjXT0KJChsYyk7aGEucHJvdG90eXBlPWFiLmZpbHRlcnM9YWIucHNldWRvczthYi5zZXRGaWx0ZXJzPW5ldyBoYTtxYj15LnRva2VuaXplPWZ1bmN0aW9uKFIsWCl7dmFyIFcsZGEsa2EseGEsdmEsQ2EseWE7aWYodmE9cGRbUisiICJdKXJldHVybiBYPzA6dmEuc2xpY2UoMCk7dmE9UjtDYT1bXTtmb3IoeWE9YWIucHJlRmlsdGVyO3ZhOyl7aWYoIVd8fChkYT15Yy5leGVjKHZhKSkpZGEmJih2YT12YS5zbGljZShkYVswXS5sZW5ndGgpfHx2YSksQ2EucHVzaChrYT1bXSk7Vz0hMTtpZihkYT1iZS5leGVjKHZhKSlXPWRhLnNoaWZ0KCksa2EucHVzaCh7dmFsdWU6Vyx0eXBlOmRhWzBdLnJlcGxhY2UoUWIsIiAiKX0pLHZhPXZhLnNsaWNlKFcubGVuZ3RoKTtmb3IoeGEgaW4gYWIuZmlsdGVyKSEoZGE9U2NbeGFdLmV4ZWModmEpKXx8eWFbeGFdJiYhKGRhPXlhW3hhXShkYSkpfHwoVz1kYS5zaGlmdCgpLGthLnB1c2goe3ZhbHVlOlcsdHlwZTp4YSxtYXRjaGVzOmRhfSksdmE9dmEuc2xpY2UoVy5sZW5ndGgpKTsKaWYoIVcpYnJlYWt9cmV0dXJuIFg/dmEubGVuZ3RoOnZhP3kuZXJyb3IoUik6cGQoUixDYSkuc2xpY2UoMCl9O0NiPXkuY29tcGlsZT1mdW5jdGlvbihSLFgpe3ZhciBXLGRhPVtdLGthPVtdLHhhPUZiW1IrIiAiXTtpZigheGEpe1h8fChYPXFiKFIpKTtmb3IoVz1YLmxlbmd0aDtXLS07KXhhPXpiKFhbV10pLHhhW2diXT9kYS5wdXNoKHhhKTprYS5wdXNoKHhhKTt4YT1GYihSLGpjKGthLGRhKSk7eGEuc2VsZWN0b3I9Un1yZXR1cm4geGF9O1diPXkuc2VsZWN0PWZ1bmN0aW9uKFIsWCxXLGRhKXt2YXIga2EseGEsdmEsQ2EseWE9ImZ1bmN0aW9uIj09PXR5cGVvZiBSJiZSLElhPSFkYSYmcWIoUj15YS5zZWxlY3Rvcnx8Uik7Vz1XfHxbXTtpZigxPT09SWEubGVuZ3RoKXt4YT1JYVswXT1JYVswXS5zbGljZSgwKTtpZigyPHhhLmxlbmd0aCYmIklEIj09PSh2YT14YVswXSkudHlwZSYmOT09PVgubm9kZVR5cGUmJnNiJiZhYi5yZWxhdGl2ZVt4YVsxXS50eXBlXSl7WD0oYWIuZmluZC5JRCh2YS5tYXRjaGVzWzBdLnJlcGxhY2UobWMsCmVjKSxYKXx8W10pWzBdO2lmKCFYKXJldHVybiBXO3lhJiYoWD1YLnBhcmVudE5vZGUpO1I9Ui5zbGljZSh4YS5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9Zm9yKGthPVNjLm5lZWRzQ29udGV4dC50ZXN0KFIpPzA6eGEubGVuZ3RoO2thLS07KXt2YT14YVtrYV07aWYoYWIucmVsYXRpdmVbQ2E9dmEudHlwZV0pYnJlYWs7aWYoQ2E9YWIuZmluZFtDYV0paWYoZGE9Q2EodmEubWF0Y2hlc1swXS5yZXBsYWNlKG1jLGVjKSxvZC50ZXN0KHhhWzBdLnR5cGUpJiZ6YShYLnBhcmVudE5vZGUpfHxYKSl7eGEuc3BsaWNlKGthLDEpO1I9ZGEubGVuZ3RoJiZNYSh4YSk7aWYoIVIpcmV0dXJuIG9jLmFwcGx5KFcsZGEpLFc7YnJlYWt9fX0oeWF8fENiKFIsSWEpKShkYSxYLCFzYixXLCFYfHxvZC50ZXN0KFIpJiZ6YShYLnBhcmVudE5vZGUpfHxYKTtyZXR1cm4gV307SGEuc29ydFN0YWJsZT1nYi5zcGxpdCgiIikuc29ydChiYikuam9pbigiIik9PT1nYjtIYS5kZXRlY3REdXBsaWNhdGVzPSEhamI7bmIoKTsKSGEuc29ydERldGFjaGVkPU4oZnVuY3Rpb24oUil7cmV0dXJuIFIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oTGEuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKSkmMX0pO04oZnVuY3Rpb24oUil7Ui5pbm5lckhUTUw9Ilx4M2NhIGhyZWZceDNkJyMnXHgzZVx4M2MvYVx4M2UiO3JldHVybiIjIj09PVIuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxRKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihSLFgsVyl7aWYoIVcpcmV0dXJuIFIuZ2V0QXR0cmlidXRlKFgsInR5cGUiPT09WC50b0xvd2VyQ2FzZSgpPzE6Mil9KTtIYS5hdHRyaWJ1dGVzJiZOKGZ1bmN0aW9uKFIpe1IuaW5uZXJIVE1MPSJceDNjaW5wdXQvXHgzZSI7Ui5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKTtyZXR1cm4iIj09PVIuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8USgidmFsdWUiLGZ1bmN0aW9uKFIsWCxXKXtpZighVyYmImlucHV0Ij09PVIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gUi5kZWZhdWx0VmFsdWV9KTsKTihmdW5jdGlvbihSKXtyZXR1cm4gbnVsbD09Ui5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8USgiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLGZ1bmN0aW9uKFIsWCxXKXt2YXIgZGE7aWYoIVcpcmV0dXJuITA9PT1SW1hdP1gudG9Mb3dlckNhc2UoKTooZGE9Ui5nZXRBdHRyaWJ1dGVOb2RlKFgpKSYmZGEuc3BlY2lmaWVkP2RhLnZhbHVlOm51bGx9KTtyZXR1cm4geX0oYSk7TC5maW5kPUpjO0wuZXhwcj1KYy5zZWxlY3RvcnM7TC5leHByWyI6Il09TC5leHByLnBzZXVkb3M7TC51bmlxdWVTb3J0PUwudW5pcXVlPUpjLnVuaXF1ZVNvcnQ7TC50ZXh0PUpjLmdldFRleHQ7TC5pc1hNTERvYz1KYy5pc1hNTDtMLmNvbnRhaW5zPUpjLmNvbnRhaW5zO0wuZXNjYXBlU2VsZWN0b3I9SmMuZXNjYXBlO3ZhciBUYz0KZnVuY3Rpb24ocix5LEMpe2Zvcih2YXIgSz1bXSxOPXZvaWQgMCE9PUM7KHI9clt5XSkmJjkhPT1yLm5vZGVUeXBlOylpZigxPT09ci5ub2RlVHlwZSl7aWYoTiYmTChyKS5pcyhDKSlicmVhaztLLnB1c2gocil9cmV0dXJuIEt9LEtkPWZ1bmN0aW9uKHIseSl7Zm9yKHZhciBDPVtdO3I7cj1yLm5leHRTaWJsaW5nKTE9PT1yLm5vZGVUeXBlJiZyIT09eSYmQy5wdXNoKHIpO3JldHVybiBDfSxnZT1MLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LGhlPS9ePChbYS16XVteXC9cMD46XHgyMFx0XHJcblxmXSopW1x4MjBcdFxyXG5cZl0qXC8/Pig/OjxcL1wxPnwpJC9pO0wuZmlsdGVyPWZ1bmN0aW9uKHIseSxDKXt2YXIgSz15WzBdO0MmJihyPSI6bm90KCIrcisiKSIpO3JldHVybiAxPT09eS5sZW5ndGgmJjE9PT1LLm5vZGVUeXBlP0wuZmluZC5tYXRjaGVzU2VsZWN0b3IoSyxyKT9bS106W106TC5maW5kLm1hdGNoZXMocixMLmdyZXAoeSxmdW5jdGlvbihOKXtyZXR1cm4gMT09PU4ubm9kZVR5cGV9KSl9OwpMLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihyKXt2YXIgeSxDLEs9dGhpcy5sZW5ndGgsTj10aGlzO2lmKCJzdHJpbmciIT09dHlwZW9mIHIpcmV0dXJuIHRoaXMucHVzaFN0YWNrKEwocikuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHk9MDt5PEs7eSsrKWlmKEwuY29udGFpbnMoTlt5XSx0aGlzKSlyZXR1cm4hMH0pKTtDPXRoaXMucHVzaFN0YWNrKFtdKTtmb3IoeT0wO3k8Szt5KyspTC5maW5kKHIsTlt5XSxDKTtyZXR1cm4gMTxLP0wudW5pcXVlU29ydChDKTpDfSxmaWx0ZXI6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGModGhpcyxyfHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGModGhpcyxyfHxbXSwhMCkpfSxpczpmdW5jdGlvbihyKXtyZXR1cm4hIWModGhpcywic3RyaW5nIj09PXR5cGVvZiByJiZnZS50ZXN0KHIpP0wocik6cnx8W10sITEpLmxlbmd0aH19KTt2YXIgaWUsT2U9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0rKSkkLzsKKEwuZm4uaW5pdD1mdW5jdGlvbihyLHksQyl7dmFyIEs7aWYoIXIpcmV0dXJuIHRoaXM7Qz1DfHxpZTtpZigic3RyaW5nIj09PXR5cGVvZiByKXtLPSJceDNjIj09PXJbMF0mJiJceDNlIj09PXJbci5sZW5ndGgtMV0mJjM8PXIubGVuZ3RoP1tudWxsLHIsbnVsbF06T2UuZXhlYyhyKTtpZighS3x8IUtbMV0mJnkpcmV0dXJuIXl8fHkuanF1ZXJ5Pyh5fHxDKS5maW5kKHIpOnRoaXMuY29uc3RydWN0b3IoeSkuZmluZChyKTtpZihLWzFdKXtpZih5PXkgaW5zdGFuY2VvZiBMP3lbMF06eSxMLm1lcmdlKHRoaXMsTC5wYXJzZUhUTUwoS1sxXSx5JiZ5Lm5vZGVUeXBlP3kub3duZXJEb2N1bWVudHx8eTpTYSwhMCkpLGhlLnRlc3QoS1sxXSkmJkwuaXNQbGFpbk9iamVjdCh5KSlmb3IoSyBpbiB5KWlmKFZhKHRoaXNbS10pKXRoaXNbS10oeVtLXSk7ZWxzZSB0aGlzLmF0dHIoSyx5W0tdKX1lbHNlIGlmKHI9U2EuZ2V0RWxlbWVudEJ5SWQoS1syXSkpdGhpc1swXT1yLHRoaXMubGVuZ3RoPTE7CnJldHVybiB0aGlzfXJldHVybiByLm5vZGVUeXBlPyh0aGlzWzBdPXIsdGhpcy5sZW5ndGg9MSx0aGlzKTpWYShyKT92b2lkIDAhPT1DLnJlYWR5P0MucmVhZHkocik6cihMKTpMLm1ha2VBcnJheShyLHRoaXMpfSkucHJvdG90eXBlPUwuZm47aWU9TChTYSk7dmFyIGplPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFBlPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O0wuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24ocil7dmFyIHk9TChyLHRoaXMpLEM9eS5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBLPTA7SzxDO0srKylpZihMLmNvbnRhaW5zKHRoaXMseVtLXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihyLHkpe3ZhciBDLEs9MCxOPXRoaXMubGVuZ3RoLFE9W10sUz0ic3RyaW5nIiE9PXR5cGVvZiByJiZMKHIpO2lmKCFnZS50ZXN0KHIpKWZvcig7SzxOO0srKylmb3IoQz10aGlzW0tdO0MmJkMhPT0KeTtDPUMucGFyZW50Tm9kZSlpZigxMT5DLm5vZGVUeXBlJiYoUz8tMTxTLmluZGV4KEMpOjE9PT1DLm5vZGVUeXBlJiZMLmZpbmQubWF0Y2hlc1NlbGVjdG9yKEMscikpKXtRLnB1c2goQyk7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKDE8US5sZW5ndGg/TC51bmlxdWVTb3J0KFEpOlEpfSxpbmRleDpmdW5jdGlvbihyKXtyZXR1cm4gcj8ic3RyaW5nIj09PXR5cGVvZiByP1FjLmNhbGwoTChyKSx0aGlzWzBdKTpRYy5jYWxsKHRoaXMsci5qcXVlcnk/clswXTpyKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihyLHkpe3JldHVybiB0aGlzLnB1c2hTdGFjayhMLnVuaXF1ZVNvcnQoTC5tZXJnZSh0aGlzLmdldCgpLEwocix5KSkpKX0sYWRkQmFjazpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09cj90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihyKSl9fSk7CkwuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKHIpe3JldHVybihyPXIucGFyZW50Tm9kZSkmJjExIT09ci5ub2RlVHlwZT9yOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24ocil7cmV0dXJuIFRjKHIsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKHIseSxDKXtyZXR1cm4gVGMociwicGFyZW50Tm9kZSIsQyl9LG5leHQ6ZnVuY3Rpb24ocil7cmV0dXJuIGIociwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihyKXtyZXR1cm4gYihyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihyKXtyZXR1cm4gVGMociwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihyKXtyZXR1cm4gVGMociwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihyLHksQyl7cmV0dXJuIFRjKHIsIm5leHRTaWJsaW5nIixDKX0scHJldlVudGlsOmZ1bmN0aW9uKHIseSxDKXtyZXR1cm4gVGMociwicHJldmlvdXNTaWJsaW5nIixDKX0sc2libGluZ3M6ZnVuY3Rpb24ocil7cmV0dXJuIEtkKChyLnBhcmVudE5vZGV8fAp7fSkuZmlyc3RDaGlsZCxyKX0sY2hpbGRyZW46ZnVuY3Rpb24ocil7cmV0dXJuIEtkKHIuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKHIpe2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIHIuY29udGVudERvY3VtZW50KXJldHVybiByLmNvbnRlbnREb2N1bWVudDtkKHIsInRlbXBsYXRlIikmJihyPXIuY29udGVudHx8cik7cmV0dXJuIEwubWVyZ2UoW10sci5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKHIseSl7TC5mbltyXT1mdW5jdGlvbihDLEspe3ZhciBOPUwubWFwKHRoaXMseSxDKTsiVW50aWwiIT09ci5zbGljZSgtNSkmJihLPUMpO0smJiJzdHJpbmciPT09dHlwZW9mIEsmJihOPUwuZmlsdGVyKEssTikpOzE8dGhpcy5sZW5ndGgmJihQZVtyXXx8TC51bmlxdWVTb3J0KE4pLGplLnRlc3QocikmJk4ucmV2ZXJzZSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soTil9fSk7dmFyIGhjPS9bXlx4MjBcdFxyXG5cZl0rL2c7TC5DYWxsYmFja3M9ZnVuY3Rpb24ocil7cj0ic3RyaW5nIj09PQp0eXBlb2Ygcj9nKHIpOkwuZXh0ZW5kKHt9LHIpO3ZhciB5LEMsSyxOLFE9W10sUz1bXSxiYT0tMSwkPWZ1bmN0aW9uKCl7Tj1OfHxyLm9uY2U7Zm9yKEs9eT0hMDtTLmxlbmd0aDtiYT0tMSlmb3IoQz1TLnNoaWZ0KCk7KytiYTxRLmxlbmd0aDspITE9PT1RW2JhXS5hcHBseShDWzBdLENbMV0pJiZyLnN0b3BPbkZhbHNlJiYoYmE9US5sZW5ndGgsQz0hMSk7ci5tZW1vcnl8fChDPSExKTt5PSExO04mJihRPUM/W106IiIpfSxqYT17YWRkOmZ1bmN0aW9uKCl7USYmKEMmJiF5JiYoYmE9US5sZW5ndGgtMSxTLnB1c2goQykpLGZ1bmN0aW9uIHphKGhhKXtMLmVhY2goaGEsZnVuY3Rpb24oTWEsUmEpe1ZhKFJhKT9yLnVuaXF1ZSYmamEuaGFzKFJhKXx8US5wdXNoKFJhKTpSYSYmUmEubGVuZ3RoJiYic3RyaW5nIiE9PXQoUmEpJiZ6YShSYSl9KX0oYXJndW1lbnRzKSxDJiYheSYmJCgpKTtyZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7TC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihzYSwKemEpe2Zvcih2YXIgaGE7LTE8KGhhPUwuaW5BcnJheSh6YSxRLGhhKSk7KVEuc3BsaWNlKGhhLDEpLGhhPD1iYSYmYmEtLX0pO3JldHVybiB0aGlzfSxoYXM6ZnVuY3Rpb24oc2Epe3JldHVybiBzYT8tMTxMLmluQXJyYXkoc2EsUSk6MDxRLmxlbmd0aH0sZW1wdHk6ZnVuY3Rpb24oKXtRJiYoUT1bXSk7cmV0dXJuIHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtOPVM9W107UT1DPSIiO3JldHVybiB0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFRfSxsb2NrOmZ1bmN0aW9uKCl7Tj1TPVtdO0N8fHl8fChRPUM9IiIpO3JldHVybiB0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIU59LGZpcmVXaXRoOmZ1bmN0aW9uKHNhLHphKXtOfHwoemE9emF8fFtdLHphPVtzYSx6YS5zbGljZT96YS5zbGljZSgpOnphXSxTLnB1c2goemEpLHl8fCQoKSk7cmV0dXJuIHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtqYS5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFLfX07CnJldHVybiBqYX07TC5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKHIpe3ZhciB5PVtbIm5vdGlmeSIsInByb2dyZXNzIixMLkNhbGxiYWNrcygibWVtb3J5IiksTC5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLEwuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLEwuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixMLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxMLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxDPSJwZW5kaW5nIixLPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBDfSxhbHdheXM6ZnVuY3Rpb24oKXtOLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oUSl7cmV0dXJuIEsudGhlbihudWxsLFEpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIFE9YXJndW1lbnRzO3JldHVybiBMLkRlZmVycmVkKGZ1bmN0aW9uKFMpe0wuZWFjaCh5LApmdW5jdGlvbihiYSwkKXt2YXIgamE9VmEoUVskWzRdXSkmJlFbJFs0XV07TlskWzFdXShmdW5jdGlvbigpe3ZhciBzYT1qYSYmamEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHNhJiZWYShzYS5wcm9taXNlKSlzYS5wcm9taXNlKCkucHJvZ3Jlc3MoUy5ub3RpZnkpLmRvbmUoUy5yZXNvbHZlKS5mYWlsKFMucmVqZWN0KTtlbHNlIFNbJFswXSsiV2l0aCJdKHRoaXMsamE/W3NhXTphcmd1bWVudHMpfSl9KTtRPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24oUSxTLGJhKXtmdW5jdGlvbiAkKHNhLHphLGhhLE1hKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgUmE9dGhpcyxHYj1hcmd1bWVudHMsSmI9ZnVuY3Rpb24oKXt2YXIgemIsamM7aWYoIShzYTxqYSkpe3piPWhhLmFwcGx5KFJhLEdiKTtpZih6Yj09PXphLnByb21pc2UoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24iKTtqYz16YiYmKCJvYmplY3QiPT09dHlwZW9mIHpifHwiZnVuY3Rpb24iPT09CnR5cGVvZiB6YikmJnpiLnRoZW47VmEoamMpP01hP2pjLmNhbGwoemIsJChqYSx6YSxlLE1hKSwkKGphLHphLGssTWEpKTooamErKyxqYy5jYWxsKHpiLCQoamEsemEsZSxNYSksJChqYSx6YSxrLE1hKSwkKGphLHphLGUsemEubm90aWZ5V2l0aCkpKTooaGEhPT1lJiYoUmE9dm9pZCAwLEdiPVt6Yl0pLChNYXx8emEucmVzb2x2ZVdpdGgpKFJhLEdiKSl9fSxSYj1NYT9KYjpmdW5jdGlvbigpe3RyeXtKYigpfWNhdGNoKHpiKXtMLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJkwuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayh6YixSYi5zdGFja1RyYWNlKSxzYSsxPj1qYSYmKGhhIT09ayYmKFJhPXZvaWQgMCxHYj1bemJdKSx6YS5yZWplY3RXaXRoKFJhLEdiKSl9fTtzYT9SYigpOihMLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKFJiLnN0YWNrVHJhY2U9TC5EZWZlcnJlZC5nZXRTdGFja0hvb2soKSksYS5zZXRUaW1lb3V0KFJiKSl9fXZhciBqYT0wO3JldHVybiBMLkRlZmVycmVkKGZ1bmN0aW9uKHNhKXt5WzBdWzNdLmFkZCgkKDAsCnNhLFZhKGJhKT9iYTplLHNhLm5vdGlmeVdpdGgpKTt5WzFdWzNdLmFkZCgkKDAsc2EsVmEoUSk/UTplKSk7eVsyXVszXS5hZGQoJCgwLHNhLFZhKFMpP1M6aykpfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKFEpe3JldHVybiBudWxsIT1RP0wuZXh0ZW5kKFEsSyk6S319LE49e307TC5lYWNoKHksZnVuY3Rpb24oUSxTKXt2YXIgYmE9U1syXSwkPVNbNV07S1tTWzFdXT1iYS5hZGQ7JCYmYmEuYWRkKGZ1bmN0aW9uKCl7Qz0kfSx5WzMtUV1bMl0uZGlzYWJsZSx5WzMtUV1bM10uZGlzYWJsZSx5WzBdWzJdLmxvY2sseVswXVszXS5sb2NrKTtiYS5hZGQoU1szXS5maXJlKTtOW1NbMF1dPWZ1bmN0aW9uKCl7TltTWzBdKyJXaXRoIl0odGhpcz09PU4/dm9pZCAwOnRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc307TltTWzBdKyJXaXRoIl09YmEuZmlyZVdpdGh9KTtLLnByb21pc2UoTik7ciYmci5jYWxsKE4sTik7cmV0dXJuIE59LHdoZW46ZnVuY3Rpb24ocil7dmFyIHk9YXJndW1lbnRzLmxlbmd0aCwKQz15LEs9QXJyYXkoQyksTj1ZYi5jYWxsKGFyZ3VtZW50cyksUT1MLkRlZmVycmVkKCksUz1mdW5jdGlvbihiYSl7cmV0dXJuIGZ1bmN0aW9uKCQpe0tbYmFdPXRoaXM7TltiYV09MTxhcmd1bWVudHMubGVuZ3RoP1liLmNhbGwoYXJndW1lbnRzKTokOy0teXx8US5yZXNvbHZlV2l0aChLLE4pfX07aWYoMT49eSYmKG0ocixRLmRvbmUoUyhDKSkucmVzb2x2ZSxRLnJlamVjdCwheSksInBlbmRpbmciPT09US5zdGF0ZSgpfHxWYShOW0NdJiZOW0NdLnRoZW4pKSlyZXR1cm4gUS50aGVuKCk7Zm9yKDtDLS07KW0oTltDXSxTKEMpLFEucmVqZWN0KTtyZXR1cm4gUS5wcm9taXNlKCl9fSk7dmFyIFFlPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO0wuRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbihyLHkpe2EuY29uc29sZSYmYS5jb25zb2xlLndhcm4mJnImJlFlLnRlc3Qoci5uYW1lKSYmYS5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIrCnIubWVzc2FnZSxyLnN0YWNrLHkpfTtMLnJlYWR5RXhjZXB0aW9uPWZ1bmN0aW9uKHIpe2Euc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHI7fSl9O3ZhciBMZD1MLkRlZmVycmVkKCk7TC5mbi5yZWFkeT1mdW5jdGlvbihyKXtMZC50aGVuKHIpLmNhdGNoKGZ1bmN0aW9uKHkpe0wucmVhZHlFeGNlcHRpb24oeSl9KTtyZXR1cm4gdGhpc307TC5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlXYWl0OjEscmVhZHk6ZnVuY3Rpb24ocil7KCEwPT09cj8tLUwucmVhZHlXYWl0OkwuaXNSZWFkeSl8fChMLmlzUmVhZHk9ITAsITAhPT1yJiYwPC0tTC5yZWFkeVdhaXR8fExkLnJlc29sdmVXaXRoKFNhLFtMXSkpfX0pO0wucmVhZHkudGhlbj1MZC50aGVuOyJjb21wbGV0ZSI9PT1TYS5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1TYS5yZWFkeVN0YXRlJiYhU2EuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsP2Euc2V0VGltZW91dChMLnJlYWR5KTooU2EuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsCnApLGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscCkpO3ZhciAkYj1mdW5jdGlvbihyLHksQyxLLE4sUSxTKXt2YXIgYmE9MCwkPXIubGVuZ3RoLGphPW51bGw9PUM7aWYoIm9iamVjdCI9PT10KEMpKWZvcihiYSBpbiBOPSEwLEMpJGIocix5LGJhLENbYmFdLCEwLFEsUyk7ZWxzZSBpZih2b2lkIDAhPT1LJiYoTj0hMCxWYShLKXx8KFM9ITApLGphJiYoUz8oeS5jYWxsKHIsSykseT1udWxsKTooamE9eSx5PWZ1bmN0aW9uKHNhLHphLGhhKXtyZXR1cm4gamEuY2FsbChMKHNhKSxoYSl9KSkseSkpZm9yKDtiYTwkO2JhKyspeShyW2JhXSxDLFM/SzpLLmNhbGwocltiYV0sYmEseShyW2JhXSxDKSkpO3JldHVybiBOP3I6amE/eS5jYWxsKHIpOiQ/eShyWzBdLEMpOlF9LEtlPS9eLW1zLS8sTGU9Ly0oW2Etel0pL2cscmQ9ZnVuY3Rpb24ocil7cmV0dXJuIDE9PT1yLm5vZGVUeXBlfHw5PT09ci5ub2RlVHlwZXx8IStyLm5vZGVUeXBlfTtoLnVpZD0xO2gucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbihyKXt2YXIgeT0Kclt0aGlzLmV4cGFuZG9dO3l8fCh5PXt9LHJkKHIpJiYoci5ub2RlVHlwZT9yW3RoaXMuZXhwYW5kb109eTpPYmplY3QuZGVmaW5lUHJvcGVydHkocix0aGlzLmV4cGFuZG8se3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSkpKTtyZXR1cm4geX0sc2V0OmZ1bmN0aW9uKHIseSxDKXt2YXIgSztyPXRoaXMuY2FjaGUocik7aWYoInN0cmluZyI9PT10eXBlb2YgeSlyW2woeSldPUM7ZWxzZSBmb3IoSyBpbiB5KXJbbChLKV09eVtLXTtyZXR1cm4gcn0sZ2V0OmZ1bmN0aW9uKHIseSl7cmV0dXJuIHZvaWQgMD09PXk/dGhpcy5jYWNoZShyKTpyW3RoaXMuZXhwYW5kb10mJnJbdGhpcy5leHBhbmRvXVtsKHkpXX0sYWNjZXNzOmZ1bmN0aW9uKHIseSxDKXtpZih2b2lkIDA9PT15fHx5JiYic3RyaW5nIj09PXR5cGVvZiB5JiZ2b2lkIDA9PT1DKXJldHVybiB0aGlzLmdldChyLHkpO3RoaXMuc2V0KHIseSxDKTtyZXR1cm4gdm9pZCAwIT09Qz9DOnl9LHJlbW92ZTpmdW5jdGlvbihyLHkpe3ZhciBDLApLPXJbdGhpcy5leHBhbmRvXTtpZih2b2lkIDAhPT1LKXtpZih2b2lkIDAhPT15KWZvcihBcnJheS5pc0FycmF5KHkpP3k9eS5tYXAobCk6KHk9bCh5KSx5PXkgaW4gSz9beV06eS5tYXRjaChoYyl8fFtdKSxDPXkubGVuZ3RoO0MtLTspZGVsZXRlIEtbeVtDXV07aWYodm9pZCAwPT09eXx8TC5pc0VtcHR5T2JqZWN0KEspKXIubm9kZVR5cGU/clt0aGlzLmV4cGFuZG9dPXZvaWQgMDpkZWxldGUgclt0aGlzLmV4cGFuZG9dfX0saGFzRGF0YTpmdW5jdGlvbihyKXtyPXJbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09ciYmIUwuaXNFbXB0eU9iamVjdChyKX19O3ZhciBLYT1uZXcgaCxYYT1uZXcgaCxwYj0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLE1lPS9bQS1aXS9nO0wuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKHIpe3JldHVybiBYYS5oYXNEYXRhKHIpfHxLYS5oYXNEYXRhKHIpfSxkYXRhOmZ1bmN0aW9uKHIseSxDKXtyZXR1cm4gWGEuYWNjZXNzKHIseSxDKX0sCnJlbW92ZURhdGE6ZnVuY3Rpb24ocix5KXtYYS5yZW1vdmUocix5KX0sX2RhdGE6ZnVuY3Rpb24ocix5LEMpe3JldHVybiBLYS5hY2Nlc3Mocix5LEMpfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihyLHkpe0thLnJlbW92ZShyLHkpfX0pO0wuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKHIseSl7dmFyIEMsSyxOLFE9dGhpc1swXSxTPVEmJlEuYXR0cmlidXRlcztpZih2b2lkIDA9PT1yKXtpZih0aGlzLmxlbmd0aCYmKE49WGEuZ2V0KFEpLDE9PT1RLm5vZGVUeXBlJiYhS2EuZ2V0KFEsImhhc0RhdGFBdHRycyIpKSl7Zm9yKEM9Uy5sZW5ndGg7Qy0tOylTW0NdJiYoSz1TW0NdLm5hbWUsMD09PUsuaW5kZXhPZigiZGF0YS0iKSYmKEs9bChLLnNsaWNlKDUpKSx1KFEsSyxOW0tdKSkpO0thLnNldChRLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gTn1yZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiByP3RoaXMuZWFjaChmdW5jdGlvbigpe1hhLnNldCh0aGlzLHIpfSk6JGIodGhpcyxmdW5jdGlvbihiYSl7dmFyICQ7CmlmKFEmJnZvaWQgMD09PWJhKXskPVhhLmdldChRLHIpO2lmKHZvaWQgMCE9PSQpcmV0dXJuICQ7JD11KFEscik7aWYodm9pZCAwIT09JClyZXR1cm4gJH1lbHNlIHRoaXMuZWFjaChmdW5jdGlvbigpe1hhLnNldCh0aGlzLHIsYmEpfSl9LG51bGwseSwxPGFyZ3VtZW50cy5sZW5ndGgsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1hhLnJlbW92ZSh0aGlzLHIpfSl9fSk7TC5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKHIseSxDKXt2YXIgSztpZihyKXJldHVybiB5PSh5fHwiZngiKSsicXVldWUiLEs9S2EuZ2V0KHIseSksQyYmKCFLfHxBcnJheS5pc0FycmF5KEMpP0s9S2EuYWNjZXNzKHIseSxMLm1ha2VBcnJheShDKSk6Sy5wdXNoKEMpKSxLfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihyLHkpe3k9eXx8ImZ4Ijt2YXIgQz1MLnF1ZXVlKHIseSksSz1DLmxlbmd0aCxOPUMuc2hpZnQoKSxRPUwuX3F1ZXVlSG9va3Mocix5KSxTPQpmdW5jdGlvbigpe0wuZGVxdWV1ZShyLHkpfTsiaW5wcm9ncmVzcyI9PT1OJiYoTj1DLnNoaWZ0KCksSy0tKTtOJiYoImZ4Ij09PXkmJkMudW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBRLnN0b3AsTi5jYWxsKHIsUyxRKSk7IUsmJlEmJlEuZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihyLHkpe3ZhciBDPXkrInF1ZXVlSG9va3MiO3JldHVybiBLYS5nZXQocixDKXx8S2EuYWNjZXNzKHIsQyx7ZW1wdHk6TC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7S2EucmVtb3ZlKHIsW3krInF1ZXVlIixDXSl9KX0pfX0pO0wuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihyLHkpe3ZhciBDPTI7InN0cmluZyIhPT10eXBlb2YgciYmKHk9cixyPSJmeCIsQy0tKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDxDP0wucXVldWUodGhpc1swXSxyKTp2b2lkIDA9PT15P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIEs9TC5xdWV1ZSh0aGlzLHIseSk7CkwuX3F1ZXVlSG9va3ModGhpcyxyKTsiZngiPT09ciYmImlucHJvZ3Jlc3MiIT09S1swXSYmTC5kZXF1ZXVlKHRoaXMscil9KX0sZGVxdWV1ZTpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5kZXF1ZXVlKHRoaXMscil9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5xdWV1ZShyfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihyLHkpe3ZhciBDLEs9MSxOPUwuRGVmZXJyZWQoKSxRPXRoaXMsUz10aGlzLmxlbmd0aCxiYT1mdW5jdGlvbigpey0tS3x8Ti5yZXNvbHZlV2l0aChRLFtRXSl9OyJzdHJpbmciIT09dHlwZW9mIHImJih5PXIscj12b2lkIDApO2ZvcihyPXJ8fCJmeCI7Uy0tOykoQz1LYS5nZXQoUVtTXSxyKyJxdWV1ZUhvb2tzIikpJiZDLmVtcHR5JiYoSysrLEMuZW1wdHkuYWRkKGJhKSk7YmEoKTtyZXR1cm4gTi5wcm9taXNlKHkpfX0pO3ZhciBrZT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSwKV2M9UmVnRXhwKCJeKD86KFsrLV0pXHgzZHwpKCIra2UrIikoW2EteiVdKikkIiwiaSIpLFpiPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sYWQ9U2EuZG9jdW1lbnRFbGVtZW50LHpjPWZ1bmN0aW9uKHIpe3JldHVybiBMLmNvbnRhaW5zKHIub3duZXJEb2N1bWVudCxyKX0sYmQ9e2NvbXBvc2VkOiEwfTthZC5hdHRhY2hTaGFkb3cmJih6Yz1mdW5jdGlvbihyKXtyZXR1cm4gTC5jb250YWlucyhyLm93bmVyRG9jdW1lbnQscil8fHIuZ2V0Um9vdE5vZGUoYmQpPT09ci5vd25lckRvY3VtZW50fSk7dmFyIHRjPWZ1bmN0aW9uKHIseSl7cj15fHxyO3JldHVybiJub25lIj09PXIuc3R5bGUuZGlzcGxheXx8IiI9PT1yLnN0eWxlLmRpc3BsYXkmJnpjKHIpJiYibm9uZSI9PT1MLmNzcyhyLCJkaXNwbGF5Iil9LGxlPWZ1bmN0aW9uKHIseSxDLEspe3ZhciBOLFE9e307Zm9yKE4gaW4geSlRW05dPXIuc3R5bGVbTl0sci5zdHlsZVtOXT15W05dO0M9Qy5hcHBseShyLEt8fFtdKTtmb3IoTiBpbiB5KXIuc3R5bGVbTl09ClFbTl07cmV0dXJuIEN9LHpkPXt9O0wuZm4uZXh0ZW5kKHtzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHoodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4geih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKHIpe3JldHVybiJib29sZWFuIj09PXR5cGVvZiByP3I/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGModGhpcyk/TCh0aGlzKS5zaG93KCk6TCh0aGlzKS5oaWRlKCl9KX19KTt2YXIgY2Q9L14oPzpjaGVja2JveHxyYWRpbykkL2ksaWM9LzwoW2Etel1bXlwvXDA+XHgyMFx0XHJcblxmXSopL2ksQWM9L14kfF5tb2R1bGUkfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHJhPXtvcHRpb246WzEsIlx4M2NzZWxlY3QgbXVsdGlwbGVceDNkJ211bHRpcGxlJ1x4M2UiLCJceDNjL3NlbGVjdFx4M2UiXSx0aGVhZDpbMSwiXHgzY3RhYmxlXHgzZSIsIlx4M2MvdGFibGVceDNlIl0sY29sOlsyLCJceDNjdGFibGVceDNlXHgzY2NvbGdyb3VwXHgzZSIsIlx4M2MvY29sZ3JvdXBceDNlXHgzYy90YWJsZVx4M2UiXSwKdHI6WzIsIlx4M2N0YWJsZVx4M2VceDNjdGJvZHlceDNlIiwiXHgzYy90Ym9keVx4M2VceDNjL3RhYmxlXHgzZSJdLHRkOlszLCJceDNjdGFibGVceDNlXHgzY3Rib2R5XHgzZVx4M2N0clx4M2UiLCJceDNjL3RyXHgzZVx4M2MvdGJvZHlceDNlXHgzYy90YWJsZVx4M2UiXSxfZGVmYXVsdDpbMCwiIiwiIl19O3JhLm9wdGdyb3VwPXJhLm9wdGlvbjtyYS50Ym9keT1yYS50Zm9vdD1yYS5jb2xncm91cD1yYS5jYXB0aW9uPXJhLnRoZWFkO3JhLnRoPXJhLnRkO3ZhciBUPS88fCYjP1x3KzsvOyhmdW5jdGlvbigpe3ZhciByPVNhLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5hcHBlbmRDaGlsZChTYS5jcmVhdGVFbGVtZW50KCJkaXYiKSkseT1TYS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3kuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKTt5LnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTt5LnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKTtyLmFwcGVuZENoaWxkKHkpO2tiLmNoZWNrQ2xvbmU9CnIuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkO3IuaW5uZXJIVE1MPSJceDNjdGV4dGFyZWFceDNleFx4M2MvdGV4dGFyZWFceDNlIjtrYi5ub0Nsb25lQ2hlY2tlZD0hIXIuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlfSkoKTt2YXIgJGE9L15rZXkvLG9iPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxRYT0vXihbXi5dKikoPzpcLiguKyl8KS87TC5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihyLHksQyxLLE4pe3ZhciBRLFMsYmEsJCxqYSxzYSx6YSxoYSxNYTtpZihqYT1LYS5nZXQocikpZm9yKEMuaGFuZGxlciYmKFE9QyxDPVEuaGFuZGxlcixOPVEuc2VsZWN0b3IpLE4mJkwuZmluZC5tYXRjaGVzU2VsZWN0b3IoYWQsTiksQy5ndWlkfHwoQy5ndWlkPUwuZ3VpZCsrKSwoJD1qYS5ldmVudHMpfHwoJD1qYS5ldmVudHM9e30pLChTPWphLmhhbmRsZSl8fChTPWphLmhhbmRsZT0KZnVuY3Rpb24oUmEpe3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIEwmJkwuZXZlbnQudHJpZ2dlcmVkIT09UmEudHlwZT9MLmV2ZW50LmRpc3BhdGNoLmFwcGx5KHIsYXJndW1lbnRzKTp2b2lkIDB9KSx5PSh5fHwiIikubWF0Y2goaGMpfHxbIiJdLGphPXkubGVuZ3RoO2phLS07KWJhPVFhLmV4ZWMoeVtqYV0pfHxbXSxoYT1zYT1iYVsxXSxNYT0oYmFbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxoYSYmKGJhPUwuZXZlbnQuc3BlY2lhbFtoYV18fHt9LGhhPShOP2JhLmRlbGVnYXRlVHlwZTpiYS5iaW5kVHlwZSl8fGhhLGJhPUwuZXZlbnQuc3BlY2lhbFtoYV18fHt9LHNhPUwuZXh0ZW5kKHt0eXBlOmhhLG9yaWdUeXBlOnNhLGRhdGE6SyxoYW5kbGVyOkMsZ3VpZDpDLmd1aWQsc2VsZWN0b3I6TixuZWVkc0NvbnRleHQ6TiYmTC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KE4pLG5hbWVzcGFjZTpNYS5qb2luKCIuIil9LFEpLCh6YT0kW2hhXSl8fCh6YT0kW2hhXT1bXSx6YS5kZWxlZ2F0ZUNvdW50PQowLGJhLnNldHVwJiYhMSE9PWJhLnNldHVwLmNhbGwocixLLE1hLFMpfHxyLmFkZEV2ZW50TGlzdGVuZXImJnIuYWRkRXZlbnRMaXN0ZW5lcihoYSxTKSksYmEuYWRkJiYoYmEuYWRkLmNhbGwocixzYSksc2EuaGFuZGxlci5ndWlkfHwoc2EuaGFuZGxlci5ndWlkPUMuZ3VpZCkpLE4/emEuc3BsaWNlKHphLmRlbGVnYXRlQ291bnQrKywwLHNhKTp6YS5wdXNoKHNhKSxMLmV2ZW50Lmdsb2JhbFtoYV09ITApfSxyZW1vdmU6ZnVuY3Rpb24ocix5LEMsSyxOKXt2YXIgUSxTLGJhLCQsamEsc2EsemEsaGEsTWEsUmEsR2IsSmI9S2EuaGFzRGF0YShyKSYmS2EuZ2V0KHIpO2lmKEpiJiYoJD1KYi5ldmVudHMpKXt5PSh5fHwiIikubWF0Y2goaGMpfHxbIiJdO2ZvcihqYT15Lmxlbmd0aDtqYS0tOylpZihiYT1RYS5leGVjKHlbamFdKXx8W10sTWE9R2I9YmFbMV0sUmE9KGJhWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksTWEpe3phPUwuZXZlbnQuc3BlY2lhbFtNYV18fHt9O01hPShLP3phLmRlbGVnYXRlVHlwZToKemEuYmluZFR5cGUpfHxNYTtoYT0kW01hXXx8W107YmE9YmFbMl0mJlJlZ0V4cCgiKF58XFwuKSIrUmEuam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik7Zm9yKFM9UT1oYS5sZW5ndGg7US0tOylzYT1oYVtRXSwhTiYmR2IhPT1zYS5vcmlnVHlwZXx8QyYmQy5ndWlkIT09c2EuZ3VpZHx8YmEmJiFiYS50ZXN0KHNhLm5hbWVzcGFjZSl8fEsmJiEoSz09PXNhLnNlbGVjdG9yfHwiKioiPT09SyYmc2Euc2VsZWN0b3IpfHwoaGEuc3BsaWNlKFEsMSksc2Euc2VsZWN0b3ImJmhhLmRlbGVnYXRlQ291bnQtLSx6YS5yZW1vdmUmJnphLnJlbW92ZS5jYWxsKHIsc2EpKTtTJiYhaGEubGVuZ3RoJiYoemEudGVhcmRvd24mJiExIT09emEudGVhcmRvd24uY2FsbChyLFJhLEpiLmhhbmRsZSl8fEwucmVtb3ZlRXZlbnQocixNYSxKYi5oYW5kbGUpLGRlbGV0ZSAkW01hXSl9ZWxzZSBmb3IoTWEgaW4gJClMLmV2ZW50LnJlbW92ZShyLE1hK3lbamFdLEMsSywhMCk7TC5pc0VtcHR5T2JqZWN0KCQpJiYKS2EucmVtb3ZlKHIsImhhbmRsZSBldmVudHMiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKHIpe3ZhciB5PUwuZXZlbnQuZml4KHIpLEMsSyxOLFEsUyxiYT1BcnJheShhcmd1bWVudHMubGVuZ3RoKTtLPShLYS5nZXQodGhpcywiZXZlbnRzIil8fHt9KVt5LnR5cGVdfHxbXTt2YXIgJD1MLmV2ZW50LnNwZWNpYWxbeS50eXBlXXx8e307YmFbMF09eTtmb3IoQz0xO0M8YXJndW1lbnRzLmxlbmd0aDtDKyspYmFbQ109YXJndW1lbnRzW0NdO3kuZGVsZWdhdGVUYXJnZXQ9dGhpcztpZighJC5wcmVEaXNwYXRjaHx8ITEhPT0kLnByZURpc3BhdGNoLmNhbGwodGhpcyx5KSl7Uz1MLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyx5LEspO2ZvcihDPTA7KFE9U1tDKytdKSYmIXkuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspZm9yKHkuY3VycmVudFRhcmdldD1RLmVsZW0sSz0wOyhOPVEuaGFuZGxlcnNbSysrXSkmJiF5LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7KWlmKCF5LnJuYW1lc3BhY2V8fAohMT09PU4ubmFtZXNwYWNlfHx5LnJuYW1lc3BhY2UudGVzdChOLm5hbWVzcGFjZSkpeS5oYW5kbGVPYmo9Tix5LmRhdGE9Ti5kYXRhLE49KChMLmV2ZW50LnNwZWNpYWxbTi5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fE4uaGFuZGxlcikuYXBwbHkoUS5lbGVtLGJhKSx2b2lkIDAhPT1OJiYhMT09PSh5LnJlc3VsdD1OKSYmKHkucHJldmVudERlZmF1bHQoKSx5LnN0b3BQcm9wYWdhdGlvbigpKTskLnBvc3REaXNwYXRjaCYmJC5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLHkpO3JldHVybiB5LnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKHIseSl7dmFyIEMsSyxOLFEsUyxiYT1bXSwkPXkuZGVsZWdhdGVDb3VudCxqYT1yLnRhcmdldDtpZigkJiZqYS5ub2RlVHlwZSYmISgiY2xpY2siPT09ci50eXBlJiYxPD1yLmJ1dHRvbikpZm9yKDtqYSE9PXRoaXM7amE9amEucGFyZW50Tm9kZXx8dGhpcylpZigxPT09amEubm9kZVR5cGUmJigiY2xpY2siIT09ci50eXBlfHwhMCE9PWphLmRpc2FibGVkKSl7UT0KW107Uz17fTtmb3IoQz0wO0M8JDtDKyspSz15W0NdLE49Sy5zZWxlY3RvcisiICIsdm9pZCAwPT09U1tOXSYmKFNbTl09Sy5uZWVkc0NvbnRleHQ/LTE8TChOLHRoaXMpLmluZGV4KGphKTpMLmZpbmQoTix0aGlzLG51bGwsW2phXSkubGVuZ3RoKSxTW05dJiZRLnB1c2goSyk7US5sZW5ndGgmJmJhLnB1c2goe2VsZW06amEsaGFuZGxlcnM6UX0pfSQ8eS5sZW5ndGgmJmJhLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczp5LnNsaWNlKCQpfSk7cmV0dXJuIGJhfSxhZGRQcm9wOmZ1bmN0aW9uKHIseSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEwuRXZlbnQucHJvdG90eXBlLHIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpWYSh5KT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4geSh0aGlzLm9yaWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50W3JdfSxzZXQ6ZnVuY3Rpb24oQyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsCnIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkN9KX19KX0sZml4OmZ1bmN0aW9uKHIpe3JldHVybiByW0wuZXhwYW5kb10/cjpuZXcgTC5FdmVudChyKX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGNsaWNrOntzZXR1cDpmdW5jdGlvbihyKXtyPXRoaXN8fHI7Y2QudGVzdChyLnR5cGUpJiZyLmNsaWNrJiZkKHIsImlucHV0IikmJnZvaWQgMD09PUthLmdldChyLCJjbGljayIpJiZKKHIsImNsaWNrIixCKTtyZXR1cm4hMX0sdHJpZ2dlcjpmdW5jdGlvbihyKXtyPXRoaXN8fHI7Y2QudGVzdChyLnR5cGUpJiZyLmNsaWNrJiZkKHIsImlucHV0IikmJnZvaWQgMD09PUthLmdldChyLCJjbGljayIpJiZKKHIsImNsaWNrIik7cmV0dXJuITB9LF9kZWZhdWx0OmZ1bmN0aW9uKHIpe3I9ci50YXJnZXQ7cmV0dXJuIGNkLnRlc3Qoci50eXBlKSYmci5jbGljayYmZChyLCJpbnB1dCIpJiZLYS5nZXQociwiY2xpY2siKXx8ZChyLCJhIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihyKXt2b2lkIDAhPT0Kci5yZXN1bHQmJnIub3JpZ2luYWxFdmVudCYmKHIub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1yLnJlc3VsdCl9fX19O0wucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24ocix5LEMpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lciYmci5yZW1vdmVFdmVudExpc3RlbmVyKHksQyl9O0wuRXZlbnQ9ZnVuY3Rpb24ocix5KXtpZighKHRoaXMgaW5zdGFuY2VvZiBMLkV2ZW50KSlyZXR1cm4gbmV3IEwuRXZlbnQocix5KTtyJiZyLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1yLHRoaXMudHlwZT1yLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ci5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1yLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ci5yZXR1cm5WYWx1ZT9COkksdGhpcy50YXJnZXQ9ci50YXJnZXQmJjM9PT1yLnRhcmdldC5ub2RlVHlwZT9yLnRhcmdldC5wYXJlbnROb2RlOnIudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD1yLmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PXIucmVsYXRlZFRhcmdldCk6CnRoaXMudHlwZT1yO3kmJkwuZXh0ZW5kKHRoaXMseSk7dGhpcy50aW1lU3RhbXA9ciYmci50aW1lU3RhbXB8fERhdGUubm93KCk7dGhpc1tMLmV4cGFuZG9dPSEwfTtMLkV2ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6TC5FdmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6SSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpJLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOkksaXNTaW11bGF0ZWQ6ITEscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgcj10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9QjtyJiYhdGhpcy5pc1NpbXVsYXRlZCYmci5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgcj10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1CO3ImJiF0aGlzLmlzU2ltdWxhdGVkJiZyLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgcj0KdGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9QjtyJiYhdGhpcy5pc1NpbXVsYXRlZCYmci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTt0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX07TC5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLCJjaGFyIjohMCxjb2RlOiEwLGNoYXJDb2RlOiEwLGtleTohMCxrZXlDb2RlOiEwLGJ1dHRvbjohMCxidXR0b25zOiEwLGNsaWVudFg6ITAsY2xpZW50WTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITAscG9pbnRlcklkOiEwLHBvaW50ZXJUeXBlOiEwLHNjcmVlblg6ITAsc2NyZWVuWTohMCx0YXJnZXRUb3VjaGVzOiEwLHRvRWxlbWVudDohMCx0b3VjaGVzOiEwLHdoaWNoOmZ1bmN0aW9uKHIpe3ZhciB5PQpyLmJ1dHRvbjtyZXR1cm4gbnVsbD09ci53aGljaCYmJGEudGVzdChyLnR5cGUpP251bGwhPXIuY2hhckNvZGU/ci5jaGFyQ29kZTpyLmtleUNvZGU6IXIud2hpY2gmJnZvaWQgMCE9PXkmJm9iLnRlc3Qoci50eXBlKT95JjE/MTp5JjI/Mzp5JjQ/MjowOnIud2hpY2h9fSxMLmV2ZW50LmFkZFByb3ApO0wuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24ocix5KXtMLmV2ZW50LnNwZWNpYWxbcl09e3NldHVwOmZ1bmN0aW9uKCl7Sih0aGlzLHIsTSk7cmV0dXJuITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtKKHRoaXMscik7cmV0dXJuITB9LGRlbGVnYXRlVHlwZTp5fX0pO0wuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24ocix5KXtMLmV2ZW50LnNwZWNpYWxbcl09e2RlbGVnYXRlVHlwZTp5LGJpbmRUeXBlOnksCmhhbmRsZTpmdW5jdGlvbihDKXt2YXIgSyxOPUMucmVsYXRlZFRhcmdldCxRPUMuaGFuZGxlT2JqO2lmKCFOfHxOIT09dGhpcyYmIUwuY29udGFpbnModGhpcyxOKSlDLnR5cGU9US5vcmlnVHlwZSxLPVEuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksQy50eXBlPXk7cmV0dXJuIEt9fX0pO0wuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihyLHksQyxLKXtyZXR1cm4gRCh0aGlzLHIseSxDLEspfSxvbmU6ZnVuY3Rpb24ocix5LEMsSyl7cmV0dXJuIEQodGhpcyxyLHksQyxLLDEpfSxvZmY6ZnVuY3Rpb24ocix5LEMpe3ZhciBLO2lmKHImJnIucHJldmVudERlZmF1bHQmJnIuaGFuZGxlT2JqKXJldHVybiBLPXIuaGFuZGxlT2JqLEwoci5kZWxlZ2F0ZVRhcmdldCkub2ZmKEsubmFtZXNwYWNlP0sub3JpZ1R5cGUrIi4iK0submFtZXNwYWNlOksub3JpZ1R5cGUsSy5zZWxlY3RvcixLLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PT10eXBlb2Ygcil7Zm9yKEsgaW4gcil0aGlzLm9mZihLLAp5LHJbS10pO3JldHVybiB0aGlzfWlmKCExPT09eXx8ImZ1bmN0aW9uIj09PXR5cGVvZiB5KUM9eSx5PXZvaWQgMDshMT09PUMmJihDPUkpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtMLmV2ZW50LnJlbW92ZSh0aGlzLHIsQyx5KX0pfX0pO3ZhciBmYz0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKilbXj5dKilcLz4vZ2ksS2M9LzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksdWM9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksTGI9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nO0wuZXh0ZW5kKHtodG1sUHJlZmlsdGVyOmZ1bmN0aW9uKHIpe3JldHVybiByLnJlcGxhY2UoZmMsIlx4M2MkMVx4M2VceDNjLyQyXHgzZSIpfSxjbG9uZTpmdW5jdGlvbihyLHksQyl7dmFyIEssTixRLFMsYmE9ci5jbG9uZU5vZGUoITApLCQ9emMocik7aWYoIShrYi5ub0Nsb25lQ2hlY2tlZHx8CjEhPT1yLm5vZGVUeXBlJiYxMSE9PXIubm9kZVR5cGV8fEwuaXNYTUxEb2MocikpKWZvcihTPUEoYmEpLFE9QShyKSxLPTAsTj1RLmxlbmd0aDtLPE47SysrKXt2YXIgamE9UVtLXSxzYT1TW0tdLHphPXNhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoImlucHV0Ij09PXphJiZjZC50ZXN0KGphLnR5cGUpKXNhLmNoZWNrZWQ9amEuY2hlY2tlZDtlbHNlIGlmKCJpbnB1dCI9PT16YXx8InRleHRhcmVhIj09PXphKXNhLmRlZmF1bHRWYWx1ZT1qYS5kZWZhdWx0VmFsdWV9aWYoeSlpZihDKWZvcihRPVF8fEEociksUz1TfHxBKGJhKSxLPTAsTj1RLmxlbmd0aDtLPE47SysrKW5hKFFbS10sU1tLXSk7ZWxzZSBuYShyLGJhKTtTPUEoYmEsInNjcmlwdCIpOzA8Uy5sZW5ndGgmJkgoUywhJCYmQShyLCJzY3JpcHQiKSk7cmV0dXJuIGJhfSxjbGVhbkRhdGE6ZnVuY3Rpb24ocil7Zm9yKHZhciB5LEMsSyxOPUwuZXZlbnQuc3BlY2lhbCxRPTA7dm9pZCAwIT09KEM9cltRXSk7USsrKWlmKHJkKEMpKXtpZih5PQpDW0thLmV4cGFuZG9dKXtpZih5LmV2ZW50cylmb3IoSyBpbiB5LmV2ZW50cylOW0tdP0wuZXZlbnQucmVtb3ZlKEMsSyk6TC5yZW1vdmVFdmVudChDLEsseS5oYW5kbGUpO0NbS2EuZXhwYW5kb109dm9pZCAwfUNbWGEuZXhwYW5kb10mJihDW1hhLmV4cGFuZG9dPXZvaWQgMCl9fX0pO0wuZm4uZXh0ZW5kKHtkZXRhY2g6ZnVuY3Rpb24ocil7cmV0dXJuIGlhKHRoaXMsciwhMCl9LHJlbW92ZTpmdW5jdGlvbihyKXtyZXR1cm4gaWEodGhpcyxyKX0sdGV4dDpmdW5jdGlvbihyKXtyZXR1cm4gJGIodGhpcyxmdW5jdGlvbih5KXtyZXR1cm4gdm9pZCAwPT09eT9MLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl0aGlzLnRleHRDb250ZW50PXl9KX0sbnVsbCxyLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gZmEodGhpcyxhcmd1bWVudHMsCmZ1bmN0aW9uKHIpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHxQKHRoaXMscikuYXBwZW5kQ2hpbGQocil9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBmYSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihyKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHk9UCh0aGlzLHIpO3kuaW5zZXJ0QmVmb3JlKHIseS5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIGZhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHIpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGZhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHIpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLHRoaXMubmV4dFNpYmxpbmcpfSl9LAplbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgcix5PTA7bnVsbCE9KHI9dGhpc1t5XSk7eSsrKTE9PT1yLm5vZGVUeXBlJiYoTC5jbGVhbkRhdGEoQShyLCExKSksci50ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKHIseSl7cj1udWxsPT1yPyExOnI7eT1udWxsPT15P3I6eTtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gTC5jbG9uZSh0aGlzLHIseSl9KX0saHRtbDpmdW5jdGlvbihyKXtyZXR1cm4gJGIodGhpcyxmdW5jdGlvbih5KXt2YXIgQz10aGlzWzBdfHx7fSxLPTAsTj10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT15JiYxPT09Qy5ub2RlVHlwZSlyZXR1cm4gQy5pbm5lckhUTUw7aWYoInN0cmluZyI9PT10eXBlb2YgeSYmIUtjLnRlc3QoeSkmJiFyYVsoaWMuZXhlYyh5KXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe3k9TC5odG1sUHJlZmlsdGVyKHkpO3RyeXtmb3IoO0s8TjtLKyspQz10aGlzW0tdfHx7fSwxPT09Qy5ub2RlVHlwZSYmCihMLmNsZWFuRGF0YShBKEMsITEpKSxDLmlubmVySFRNTD15KTtDPTB9Y2F0Y2goUSl7fX1DJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKHkpfSxudWxsLHIsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIHI9W107cmV0dXJuIGZhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHkpe3ZhciBDPXRoaXMucGFyZW50Tm9kZTswPkwuaW5BcnJheSh0aGlzLHIpJiYoTC5jbGVhbkRhdGEoQSh0aGlzKSksQyYmQy5yZXBsYWNlQ2hpbGQoeSx0aGlzKSl9LHIpfX0pO0wuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKHIseSl7TC5mbltyXT1mdW5jdGlvbihDKXtmb3IodmFyIEs9W10sTj1MKEMpLFE9Ti5sZW5ndGgtMSxTPTA7Uzw9UTtTKyspQz1TPT09UT90aGlzOnRoaXMuY2xvbmUoITApLEwoTltTXSlbeV0oQyksCkZjLmFwcGx5KEssQy5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKEspfX0pO3ZhciBWYj1SZWdFeHAoIl4oIitrZSsiKSg/IXB4KVthLXolXSskIiwiaSIpLFhjPWZ1bmN0aW9uKHIpe3ZhciB5PXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldzt5JiZ5Lm9wZW5lcnx8KHk9YSk7cmV0dXJuIHkuZ2V0Q29tcHV0ZWRTdHlsZShyKX0sQWQ9UmVnRXhwKFpiLmpvaW4oInwiKSwiaSIpOyhmdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXtpZihiYSl7Uy5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7bWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowIjtiYS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElIjthZC5hcHBlbmRDaGlsZChTKS5hcHBlbmRDaGlsZChiYSk7CnZhciAkPWEuZ2V0Q29tcHV0ZWRTdHlsZShiYSk7eT0iMSUiIT09JC50b3A7UT0xMj09PU1hdGgucm91bmQocGFyc2VGbG9hdCgkLm1hcmdpbkxlZnQpKTtiYS5zdHlsZS5yaWdodD0iNjAlIjtOPTM2PT09TWF0aC5yb3VuZChwYXJzZUZsb2F0KCQucmlnaHQpKTtDPTM2PT09TWF0aC5yb3VuZChwYXJzZUZsb2F0KCQud2lkdGgpKTtiYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO0s9MTI9PT1NYXRoLnJvdW5kKHBhcnNlRmxvYXQoYmEub2Zmc2V0V2lkdGgvMykpO2FkLnJlbW92ZUNoaWxkKFMpO2JhPW51bGx9fXZhciB5LEMsSyxOLFEsUz1TYS5jcmVhdGVFbGVtZW50KCJkaXYiKSxiYT1TYS5jcmVhdGVFbGVtZW50KCJkaXYiKTtiYS5zdHlsZSYmKGJhLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsYmEuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIixrYi5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWJhLnN0eWxlLmJhY2tncm91bmRDbGlwLApMLmV4dGVuZChrYix7Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyKCk7cmV0dXJuIEN9LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cigpO3JldHVybiBOfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cigpO3JldHVybiB5fSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyKCk7cmV0dXJuIFF9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyKCk7cmV0dXJuIEt9fSkpfSkoKTt2YXIgQ2M9WyJXZWJraXQiLCJNb3oiLCJtcyJdLFJjPVNhLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLEJkPXt9LG1lPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxNZD0vXi0tLyxOZD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sVWM9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9O0wuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKHIseSl7aWYoeSl7dmFyIEM9WihyLCJvcGFjaXR5Iik7CnJldHVybiIiPT09Qz8iMSI6Q319fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsZ3JpZEFyZWE6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TdGFydDohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1N0YXJ0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24ocix5LEMsSyl7aWYociYmMyE9PXIubm9kZVR5cGUmJjghPT1yLm5vZGVUeXBlJiZyLnN0eWxlKXt2YXIgTixRLFMsYmE9bCh5KSwkPU1kLnRlc3QoeSksamE9ci5zdHlsZTskfHwoeT1vYShiYSkpO1M9TC5jc3NIb29rc1t5XXx8TC5jc3NIb29rc1tiYV07aWYodm9pZCAwIT09QylRPXR5cGVvZiBDLAoic3RyaW5nIj09PVEmJihOPVdjLmV4ZWMoQykpJiZOWzFdJiYoQz13KHIseSxOKSxRPSJudW1iZXIiKSxudWxsIT1DJiZDPT09QyYmKCJudW1iZXIiIT09UXx8JHx8KEMrPU4mJk5bM118fChMLmNzc051bWJlcltiYV0/IiI6InB4IikpLGtiLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1DfHwwIT09eS5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChqYVt5XT0iaW5oZXJpdCIpLFMmJiJzZXQiaW4gUyYmdm9pZCAwPT09KEM9Uy5zZXQocixDLEspKXx8KCQ/amEuc2V0UHJvcGVydHkoeSxDKTpqYVt5XT1DKSk7ZWxzZSByZXR1cm4gUyYmImdldCJpbiBTJiZ2b2lkIDAhPT0oTj1TLmdldChyLCExLEspKT9OOmphW3ldfX0sY3NzOmZ1bmN0aW9uKHIseSxDLEspe3ZhciBOLFE7UT1sKHkpO01kLnRlc3QoeSl8fCh5PW9hKFEpKTsoUT1MLmNzc0hvb2tzW3ldfHxMLmNzc0hvb2tzW1FdKSYmImdldCJpbiBRJiYoTj1RLmdldChyLCEwLEMpKTt2b2lkIDA9PT1OJiYoTj1aKHIseSxLKSk7Im5vcm1hbCI9PT0KTiYmeSBpbiBVYyYmKE49VWNbeV0pO3JldHVybiIiPT09Q3x8Qz8ocj1wYXJzZUZsb2F0KE4pLCEwPT09Q3x8aXNGaW5pdGUocik/cnx8MDpOKTpOfX0pO0wuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24ocix5KXtMLmNzc0hvb2tzW3ldPXtnZXQ6ZnVuY3Rpb24oQyxLLE4pe2lmKEspcmV0dXJuIW1lLnRlc3QoTC5jc3MoQywiZGlzcGxheSIpKXx8Qy5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmQy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD9GYShDLHksTik6bGUoQyxOZCxmdW5jdGlvbigpe3JldHVybiBGYShDLHksTil9KX0sc2V0OmZ1bmN0aW9uKEMsSyxOKXt2YXIgUSxTPVhjKEMpLGJhPSFrYi5zY3JvbGxib3hTaXplKCkmJiJhYnNvbHV0ZSI9PT1TLnBvc2l0aW9uLCQ9KGJhfHxOKSYmImJvcmRlci1ib3giPT09TC5jc3MoQywiYm94U2l6aW5nIiwhMSxTKTtOPU4/cGEoQyx5LE4sJCxTKTowOyQmJmJhJiYoTi09TWF0aC5jZWlsKENbIm9mZnNldCIreVswXS50b1VwcGVyQ2FzZSgpKwp5LnNsaWNlKDEpXS1wYXJzZUZsb2F0KFNbeV0pLXBhKEMseSwiYm9yZGVyIiwhMSxTKS0wLjUpKTtOJiYoUT1XYy5leGVjKEspKSYmInB4IiE9PShRWzNdfHwicHgiKSYmKEMuc3R5bGVbeV09SyxLPUwuY3NzKEMseSkpO3JldHVybiBBYShDLEssTil9fX0pO0wuY3NzSG9va3MubWFyZ2luTGVmdD1lYShrYi5yZWxpYWJsZU1hcmdpbkxlZnQsZnVuY3Rpb24ocix5KXtpZih5KXJldHVybihwYXJzZUZsb2F0KFoociwibWFyZ2luTGVmdCIpKXx8ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LWxlKHIse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KTtMLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihyLHkpe0wuY3NzSG9va3Nbcit5XT17ZXhwYW5kOmZ1bmN0aW9uKEMpe3ZhciBLPTAsTj17fTtmb3IoQz0ic3RyaW5nIj09PXR5cGVvZiBDP0Muc3BsaXQoIiAiKToKW0NdOzQ+SztLKyspTltyK1piW0tdK3ldPUNbS118fENbSy0yXXx8Q1swXTtyZXR1cm4gTn19OyJtYXJnaW4iIT09ciYmKEwuY3NzSG9va3Nbcit5XS5zZXQ9QWEpfSk7TC5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihyLHkpe3JldHVybiAkYih0aGlzLGZ1bmN0aW9uKEMsSyxOKXt2YXIgUSxTPXt9LGJhPTA7aWYoQXJyYXkuaXNBcnJheShLKSl7Tj1YYyhDKTtmb3IoUT1LLmxlbmd0aDtiYTxRO2JhKyspU1tLW2JhXV09TC5jc3MoQyxLW2JhXSwhMSxOKTtyZXR1cm4gU31yZXR1cm4gdm9pZCAwIT09Tj9MLnN0eWxlKEMsSyxOKTpMLmNzcyhDLEspfSxyLHksMTxhcmd1bWVudHMubGVuZ3RoKX19KTtMLlR3ZWVuPUVhO0VhLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RWEsaW5pdDpmdW5jdGlvbihyLHksQyxLLE4sUSl7dGhpcy5lbGVtPXI7dGhpcy5wcm9wPUM7dGhpcy5lYXNpbmc9Tnx8TC5lYXNpbmcuX2RlZmF1bHQ7dGhpcy5vcHRpb25zPXk7dGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpOwp0aGlzLmVuZD1LO3RoaXMudW5pdD1RfHwoTC5jc3NOdW1iZXJbQ10/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciByPUVhLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiByJiZyLmdldD9yLmdldCh0aGlzKTpFYS5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24ocil7dmFyIHksQz1FYS5wcm9wSG9va3NbdGhpcy5wcm9wXTt0aGlzLnBvcz10aGlzLm9wdGlvbnMuZHVyYXRpb24/eT1MLmVhc2luZ1t0aGlzLmVhc2luZ10ocix0aGlzLm9wdGlvbnMuZHVyYXRpb24qciwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp5PXI7dGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnkrdGhpcy5zdGFydDt0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyk7QyYmQy5zZXQ/Qy5zZXQodGhpcyk6RWEucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKTtyZXR1cm4gdGhpc319O0VhLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT0KRWEucHJvdG90eXBlO0VhLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihyKXtyZXR1cm4gMSE9PXIuZWxlbS5ub2RlVHlwZXx8bnVsbCE9ci5lbGVtW3IucHJvcF0mJm51bGw9PXIuZWxlbS5zdHlsZVtyLnByb3BdP3IuZWxlbVtyLnByb3BdOihyPUwuY3NzKHIuZWxlbSxyLnByb3AsIiIpKSYmImF1dG8iIT09cj9yOjB9LHNldDpmdW5jdGlvbihyKXtpZihMLmZ4LnN0ZXBbci5wcm9wXSlMLmZ4LnN0ZXBbci5wcm9wXShyKTtlbHNlIDEhPT1yLmVsZW0ubm9kZVR5cGV8fCFMLmNzc0hvb2tzW3IucHJvcF0mJm51bGw9PXIuZWxlbS5zdHlsZVtvYShyLnByb3ApXT9yLmVsZW1bci5wcm9wXT1yLm5vdzpMLnN0eWxlKHIuZWxlbSxyLnByb3Asci5ub3crci51bml0KX19fTtFYS5wcm9wSG9va3Muc2Nyb2xsVG9wPUVhLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24ocil7ci5lbGVtLm5vZGVUeXBlJiZyLmVsZW0ucGFyZW50Tm9kZSYmKHIuZWxlbVtyLnByb3BdPQpyLm5vdyl9fTtMLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKHIpe3JldHVybiByfSxzd2luZzpmdW5jdGlvbihyKXtyZXR1cm4gMC41LU1hdGguY29zKHIqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6InN3aW5nIn07TC5meD1FYS5wcm90b3R5cGUuaW5pdDtMLmZ4LnN0ZXA9e307dmFyIERjLFljLHNkPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxMYz0vcXVldWVIb29rcyQvO0wuQW5pbWF0aW9uPUwuZXh0ZW5kKGdhLHt0d2VlbmVyczp7IioiOltmdW5jdGlvbihyLHkpe3ZhciBDPXRoaXMuY3JlYXRlVHdlZW4ocix5KTt3KEMuZWxlbSxyLFdjLmV4ZWMoeSksQyk7cmV0dXJuIEN9XX0sdHdlZW5lcjpmdW5jdGlvbihyLHkpe1ZhKHIpPyh5PXIscj1bIioiXSk6cj1yLm1hdGNoKGhjKTtmb3IodmFyIEMsSz0wLE49ci5sZW5ndGg7SzxOO0srKylDPXJbS10sZ2EudHdlZW5lcnNbQ109Z2EudHdlZW5lcnNbQ118fFtdLGdhLnR3ZWVuZXJzW0NdLnVuc2hpZnQoeSl9LHByZWZpbHRlcnM6W2Z1bmN0aW9uKHIsCnksQyl7dmFyIEssTixRLFMsYmEsJCxqYTtqYT0id2lkdGgiaW4geXx8ImhlaWdodCJpbiB5O3ZhciBzYT10aGlzLHphPXt9LGhhPXIuc3R5bGUsTWE9ci5ub2RlVHlwZSYmdGMociksUmE9S2EuZ2V0KHIsImZ4c2hvdyIpO0MucXVldWV8fChTPUwuX3F1ZXVlSG9va3MociwiZngiKSxudWxsPT1TLnVucXVldWVkJiYoUy51bnF1ZXVlZD0wLGJhPVMuZW1wdHkuZmlyZSxTLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtTLnVucXVldWVkfHxiYSgpfSksUy51bnF1ZXVlZCsrLHNhLmFsd2F5cyhmdW5jdGlvbigpe3NhLmFsd2F5cyhmdW5jdGlvbigpe1MudW5xdWV1ZWQtLTtMLnF1ZXVlKHIsImZ4IikubGVuZ3RofHxTLmVtcHR5LmZpcmUoKX0pfSkpO2ZvcihLIGluIHkpaWYoTj15W0tdLHNkLnRlc3QoTikpe2RlbGV0ZSB5W0tdO1E9UXx8InRvZ2dsZSI9PT1OO2lmKE49PT0oTWE/ImhpZGUiOiJzaG93IikpaWYoInNob3ciPT09TiYmUmEmJnZvaWQgMCE9PVJhW0tdKU1hPSEwO2Vsc2UgY29udGludWU7CnphW0tdPVJhJiZSYVtLXXx8TC5zdHlsZShyLEspfWlmKCh5PSFMLmlzRW1wdHlPYmplY3QoeSkpfHwhTC5pc0VtcHR5T2JqZWN0KHphKSlmb3IoSyBpbiBqYSYmMT09PXIubm9kZVR5cGUmJihDLm92ZXJmbG93PVtoYS5vdmVyZmxvdyxoYS5vdmVyZmxvd1gsaGEub3ZlcmZsb3dZXSwkPVJhJiZSYS5kaXNwbGF5LG51bGw9PSQmJigkPUthLmdldChyLCJkaXNwbGF5IikpLGphPUwuY3NzKHIsImRpc3BsYXkiKSwibm9uZSI9PT1qYSYmKCQ/amE9JDooeihbcl0sITApLCQ9ci5zdHlsZS5kaXNwbGF5fHwkLGphPUwuY3NzKHIsImRpc3BsYXkiKSx6KFtyXSkpKSwoImlubGluZSI9PT1qYXx8ImlubGluZS1ibG9jayI9PT1qYSYmbnVsbCE9JCkmJiJub25lIj09PUwuY3NzKHIsImZsb2F0IikmJih5fHwoc2EuZG9uZShmdW5jdGlvbigpe2hhLmRpc3BsYXk9JH0pLG51bGw9PSQmJihqYT1oYS5kaXNwbGF5LCQ9Im5vbmUiPT09amE/IiI6amEpKSxoYS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksCkMub3ZlcmZsb3cmJihoYS5vdmVyZmxvdz0iaGlkZGVuIixzYS5hbHdheXMoZnVuY3Rpb24oKXtoYS5vdmVyZmxvdz1DLm92ZXJmbG93WzBdO2hhLm92ZXJmbG93WD1DLm92ZXJmbG93WzFdO2hhLm92ZXJmbG93WT1DLm92ZXJmbG93WzJdfSkpLHk9ITEsemEpeXx8KFJhPyJoaWRkZW4iaW4gUmEmJihNYT1SYS5oaWRkZW4pOlJhPUthLmFjY2VzcyhyLCJmeHNob3ciLHtkaXNwbGF5OiR9KSxRJiYoUmEuaGlkZGVuPSFNYSksTWEmJnooW3JdLCEwKSxzYS5kb25lKGZ1bmN0aW9uKCl7TWF8fHooW3JdKTtLYS5yZW1vdmUociwiZnhzaG93Iik7Zm9yKEsgaW4gemEpTC5zdHlsZShyLEssemFbS10pfSkpLHk9QWIoTWE/UmFbS106MCxLLHNhKSxLIGluIFJhfHwoUmFbS109eS5zdGFydCxNYSYmKHkuZW5kPXkuc3RhcnQseS5zdGFydD0wKSl9XSxwcmVmaWx0ZXI6ZnVuY3Rpb24ocix5KXt5P2dhLnByZWZpbHRlcnMudW5zaGlmdChyKTpnYS5wcmVmaWx0ZXJzLnB1c2gocil9fSk7TC5zcGVlZD0KZnVuY3Rpb24ocix5LEMpe3ZhciBLPXImJiJvYmplY3QiPT09dHlwZW9mIHI/TC5leHRlbmQoe30scik6e2NvbXBsZXRlOkN8fCFDJiZ5fHxWYShyKSYmcixkdXJhdGlvbjpyLGVhc2luZzpDJiZ5fHx5JiYhVmEoeSkmJnl9O0wuZngub2ZmP0suZHVyYXRpb249MDoibnVtYmVyIiE9PXR5cGVvZiBLLmR1cmF0aW9uJiYoSy5kdXJhdGlvbj1LLmR1cmF0aW9uIGluIEwuZnguc3BlZWRzP0wuZnguc3BlZWRzW0suZHVyYXRpb25dOkwuZnguc3BlZWRzLl9kZWZhdWx0KTtpZihudWxsPT1LLnF1ZXVlfHwhMD09PUsucXVldWUpSy5xdWV1ZT0iZngiO0sub2xkPUsuY29tcGxldGU7Sy5jb21wbGV0ZT1mdW5jdGlvbigpe1ZhKEsub2xkKSYmSy5vbGQuY2FsbCh0aGlzKTtLLnF1ZXVlJiZMLmRlcXVldWUodGhpcyxLLnF1ZXVlKX07cmV0dXJuIEt9O0wuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24ocix5LEMsSyl7cmV0dXJuIHRoaXMuZmlsdGVyKHRjKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5Onl9LApyLEMsSyl9LGFuaW1hdGU6ZnVuY3Rpb24ocix5LEMsSyl7dmFyIE49TC5pc0VtcHR5T2JqZWN0KHIpLFE9TC5zcGVlZCh5LEMsSyk7eT1mdW5jdGlvbigpe3ZhciBTPWdhKHRoaXMsTC5leHRlbmQoe30sciksUSk7KE58fEthLmdldCh0aGlzLCJmaW5pc2giKSkmJlMuc3RvcCghMCl9O3kuZmluaXNoPXk7cmV0dXJuIE58fCExPT09US5xdWV1ZT90aGlzLmVhY2goeSk6dGhpcy5xdWV1ZShRLnF1ZXVlLHkpfSxzdG9wOmZ1bmN0aW9uKHIseSxDKXt2YXIgSz1mdW5jdGlvbihOKXt2YXIgUT1OLnN0b3A7ZGVsZXRlIE4uc3RvcDtRKEMpfTsic3RyaW5nIiE9PXR5cGVvZiByJiYoQz15LHk9cixyPXZvaWQgMCk7eSYmITEhPT1yJiZ0aGlzLnF1ZXVlKHJ8fCJmeCIsW10pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgTj0hMCxRPW51bGwhPXImJnIrInF1ZXVlSG9va3MiLFM9TC50aW1lcnMsYmE9S2EuZ2V0KHRoaXMpO2lmKFEpYmFbUV0mJmJhW1FdLnN0b3AmJksoYmFbUV0pO2Vsc2UgZm9yKFEgaW4gYmEpYmFbUV0mJgpiYVtRXS5zdG9wJiZMYy50ZXN0KFEpJiZLKGJhW1FdKTtmb3IoUT1TLmxlbmd0aDtRLS07KVNbUV0uZWxlbSE9PXRoaXN8fG51bGwhPXImJlNbUV0ucXVldWUhPT1yfHwoU1tRXS5hbmltLnN0b3AoQyksTj0hMSxTLnNwbGljZShRLDEpKTshTiYmQ3x8TC5kZXF1ZXVlKHRoaXMscil9KX0sZmluaXNoOmZ1bmN0aW9uKHIpeyExIT09ciYmKHI9cnx8ImZ4Iik7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB5LEM9S2EuZ2V0KHRoaXMpLEs9Q1tyKyJxdWV1ZSJdO3k9Q1tyKyJxdWV1ZUhvb2tzIl07dmFyIE49TC50aW1lcnMsUT1LP0subGVuZ3RoOjA7Qy5maW5pc2g9ITA7TC5xdWV1ZSh0aGlzLHIsW10pO3kmJnkuc3RvcCYmeS5zdG9wLmNhbGwodGhpcywhMCk7Zm9yKHk9Ti5sZW5ndGg7eS0tOylOW3ldLmVsZW09PT10aGlzJiZOW3ldLnF1ZXVlPT09ciYmKE5beV0uYW5pbS5zdG9wKCEwKSxOLnNwbGljZSh5LDEpKTtmb3IoeT0wO3k8UTt5KyspS1t5XSYmS1t5XS5maW5pc2gmJgpLW3ldLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBDLmZpbmlzaH0pfX0pO0wuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24ocix5KXt2YXIgQz1MLmZuW3ldO0wuZm5beV09ZnVuY3Rpb24oSyxOLFEpe3JldHVybiBudWxsPT1LfHwiYm9vbGVhbiI9PT10eXBlb2YgSz9DLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUod2IoeSwhMCksSyxOLFEpfX0pO0wuZWFjaCh7c2xpZGVEb3duOndiKCJzaG93Iiksc2xpZGVVcDp3YigiaGlkZSIpLHNsaWRlVG9nZ2xlOndiKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKHIseSl7TC5mbltyXT1mdW5jdGlvbihDLEssTil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh5LEMsSyxOKX19KTtMLnRpbWVycz1bXTtMLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgcix5PTAsQz1MLnRpbWVycztmb3IoRGM9CkRhdGUubm93KCk7eTxDLmxlbmd0aDt5Kyspcj1DW3ldLHIoKXx8Q1t5XSE9PXJ8fEMuc3BsaWNlKHktLSwxKTtDLmxlbmd0aHx8TC5meC5zdG9wKCk7RGM9dm9pZCAwfTtMLmZ4LnRpbWVyPWZ1bmN0aW9uKHIpe0wudGltZXJzLnB1c2gocik7TC5meC5zdGFydCgpfTtMLmZ4LmludGVydmFsPTEzO0wuZnguc3RhcnQ9ZnVuY3Rpb24oKXtZY3x8KFljPSEwLFdhKCkpfTtMLmZ4LnN0b3A9ZnVuY3Rpb24oKXtZYz1udWxsfTtMLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfTtMLmZuLmRlbGF5PWZ1bmN0aW9uKHIseSl7cj1MLmZ4P0wuZnguc3BlZWRzW3JdfHxyOnI7cmV0dXJuIHRoaXMucXVldWUoeXx8ImZ4IixmdW5jdGlvbihDLEspe3ZhciBOPWEuc2V0VGltZW91dChDLHIpO0suc3RvcD1mdW5jdGlvbigpe2EuY2xlYXJUaW1lb3V0KE4pfX0pfTsoZnVuY3Rpb24oKXt2YXIgcj1TYS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHk9U2EuY3JlYXRlRWxlbWVudCgic2VsZWN0IikuYXBwZW5kQ2hpbGQoU2EuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpOwpyLnR5cGU9ImNoZWNrYm94IjtrYi5jaGVja09uPSIiIT09ci52YWx1ZTtrYi5vcHRTZWxlY3RlZD15LnNlbGVjdGVkO3I9U2EuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyLnZhbHVlPSJ0IjtyLnR5cGU9InJhZGlvIjtrYi5yYWRpb1ZhbHVlPSJ0Ij09PXIudmFsdWV9KSgpO3ZhciBPZCxyYz1MLmV4cHIuYXR0ckhhbmRsZTtMLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihyLHkpe3JldHVybiAkYih0aGlzLEwuYXR0cixyLHksMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5yZW1vdmVBdHRyKHRoaXMscil9KX19KTtMLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihyLHksQyl7dmFyIEssTixRPXIubm9kZVR5cGU7aWYoMyE9PVEmJjghPT1RJiYyIT09USl7aWYoInVuZGVmaW5lZCI9PT10eXBlb2Ygci5nZXRBdHRyaWJ1dGUpcmV0dXJuIEwucHJvcChyLHksQyk7MT09PVEmJkwuaXNYTUxEb2Mocil8fChOPUwuYXR0ckhvb2tzW3kudG9Mb3dlckNhc2UoKV18fAooTC5leHByLm1hdGNoLmJvb2wudGVzdCh5KT9PZDp2b2lkIDApKTtpZih2b2lkIDAhPT1DKXtpZihudWxsPT09Qyl7TC5yZW1vdmVBdHRyKHIseSk7cmV0dXJufWlmKE4mJiJzZXQiaW4gTiYmdm9pZCAwIT09KEs9Ti5zZXQocixDLHkpKSlyZXR1cm4gSztyLnNldEF0dHJpYnV0ZSh5LEMrIiIpO3JldHVybiBDfWlmKE4mJiJnZXQiaW4gTiYmbnVsbCE9PShLPU4uZ2V0KHIseSkpKXJldHVybiBLO0s9TC5maW5kLmF0dHIocix5KTtyZXR1cm4gbnVsbD09Sz92b2lkIDA6S319LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKHIseSl7aWYoIWtiLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT15JiZkKHIsImlucHV0Iikpe3ZhciBDPXIudmFsdWU7ci5zZXRBdHRyaWJ1dGUoInR5cGUiLHkpO0MmJihyLnZhbHVlPUMpO3JldHVybiB5fX19fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKHIseSl7dmFyIEMsSz0wLE49eSYmeS5tYXRjaChoYyk7aWYoTiYmMT09PXIubm9kZVR5cGUpZm9yKDtDPU5bSysrXTspci5yZW1vdmVBdHRyaWJ1dGUoQyl9fSk7Ck9kPXtzZXQ6ZnVuY3Rpb24ocix5LEMpeyExPT09eT9MLnJlbW92ZUF0dHIocixDKTpyLnNldEF0dHJpYnV0ZShDLEMpO3JldHVybiBDfX07TC5lYWNoKEwuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKHIseSl7dmFyIEM9cmNbeV18fEwuZmluZC5hdHRyO3JjW3ldPWZ1bmN0aW9uKEssTixRKXt2YXIgUyxiYSwkPU4udG9Mb3dlckNhc2UoKTtRfHwoYmE9cmNbJF0scmNbJF09UyxTPW51bGwhPUMoSyxOLFEpPyQ6bnVsbCxyY1skXT1iYSk7cmV0dXJuIFN9fSk7dmFyIFJlPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksU2U9L14oPzphfGFyZWEpJC9pO0wuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKHIseSl7cmV0dXJuICRiKHRoaXMsTC5wcm9wLHIseSwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tMLnByb3BGaXhbcl18fApyXX0pfX0pO0wuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKHIseSxDKXt2YXIgSyxOLFE9ci5ub2RlVHlwZTtpZigzIT09USYmOCE9PVEmJjIhPT1RKXJldHVybiAxPT09USYmTC5pc1hNTERvYyhyKXx8KHk9TC5wcm9wRml4W3ldfHx5LE49TC5wcm9wSG9va3NbeV0pLHZvaWQgMCE9PUM/TiYmInNldCJpbiBOJiZ2b2lkIDAhPT0oSz1OLnNldChyLEMseSkpP0s6clt5XT1DOk4mJiJnZXQiaW4gTiYmbnVsbCE9PShLPU4uZ2V0KHIseSkpP0s6clt5XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKHIpe3ZhciB5PUwuZmluZC5hdHRyKHIsInRhYmluZGV4Iik7cmV0dXJuIHk/cGFyc2VJbnQoeSwxMCk6UmUudGVzdChyLm5vZGVOYW1lKXx8U2UudGVzdChyLm5vZGVOYW1lKSYmci5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSk7a2Iub3B0U2VsZWN0ZWR8fChMLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKHIpe3JldHVybiBudWxsfSwKc2V0OmZ1bmN0aW9uKHIpe319KTtMLmVhY2goInRhYkluZGV4IHJlYWRPbmx5IG1heExlbmd0aCBjZWxsU3BhY2luZyBjZWxsUGFkZGluZyByb3dTcGFuIGNvbFNwYW4gdXNlTWFwIGZyYW1lQm9yZGVyIGNvbnRlbnRFZGl0YWJsZSIuc3BsaXQoIiAiKSxmdW5jdGlvbigpe0wucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KTtMLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24ocil7dmFyIHksQyxLLE4sUSxTLGJhPTA7aWYoVmEocikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigkKXtMKHRoaXMpLmFkZENsYXNzKHIuY2FsbCh0aGlzLCQscWEodGhpcykpKX0pO3k9d2Eocik7aWYoeS5sZW5ndGgpZm9yKDtDPXRoaXNbYmErK107KWlmKE49cWEoQyksSz0xPT09Qy5ub2RlVHlwZSYmIiAiK3RhKE4pKyIgIil7Zm9yKFM9MDtRPXlbUysrXTspMD5LLmluZGV4T2YoIiAiK1ErIiAiKSYmKEsrPVErIiAiKTtLPXRhKEspO04hPT1LJiZDLnNldEF0dHJpYnV0ZSgiY2xhc3MiLApLKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24ocil7dmFyIHksQyxLLE4sUSxTLGJhPTA7aWYoVmEocikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigkKXtMKHRoaXMpLnJlbW92ZUNsYXNzKHIuY2FsbCh0aGlzLCQscWEodGhpcykpKX0pO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLmF0dHIoImNsYXNzIiwiIik7eT13YShyKTtpZih5Lmxlbmd0aClmb3IoO0M9dGhpc1tiYSsrXTspaWYoTj1xYShDKSxLPTE9PT1DLm5vZGVUeXBlJiYiICIrdGEoTikrIiAiKXtmb3IoUz0wO1E9eVtTKytdOylmb3IoOy0xPEsuaW5kZXhPZigiICIrUSsiICIpOylLPUsucmVwbGFjZSgiICIrUSsiICIsIiAiKTtLPXRhKEspO04hPT1LJiZDLnNldEF0dHJpYnV0ZSgiY2xhc3MiLEspfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihyLHkpe3ZhciBDPXR5cGVvZiByLEs9InN0cmluZyI9PT1DfHxBcnJheS5pc0FycmF5KHIpO3JldHVybiJib29sZWFuIj09PXR5cGVvZiB5JiYKSz95P3RoaXMuYWRkQ2xhc3Mocik6dGhpcy5yZW1vdmVDbGFzcyhyKTpWYShyKT90aGlzLmVhY2goZnVuY3Rpb24oTil7TCh0aGlzKS50b2dnbGVDbGFzcyhyLmNhbGwodGhpcyxOLHFhKHRoaXMpLHkpLHkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIE4sUSxTLGJhO2lmKEspZm9yKFE9MCxTPUwodGhpcyksYmE9d2Eocik7Tj1iYVtRKytdOylTLmhhc0NsYXNzKE4pP1MucmVtb3ZlQ2xhc3MoTik6Uy5hZGRDbGFzcyhOKTtlbHNlIGlmKHZvaWQgMD09PXJ8fCJib29sZWFuIj09PUMpKE49cWEodGhpcykpJiZLYS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsTiksdGhpcy5zZXRBdHRyaWJ1dGUmJnRoaXMuc2V0QXR0cmlidXRlKCJjbGFzcyIsTnx8ITE9PT1yPyIiOkthLmdldCh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKX0pfSxoYXNDbGFzczpmdW5jdGlvbihyKXt2YXIgeSxDPTA7Zm9yKHI9IiAiK3IrIiAiO3k9dGhpc1tDKytdOylpZigxPT09eS5ub2RlVHlwZSYmLTE8KCIgIisKdGEocWEoeSkpKyIgIikuaW5kZXhPZihyKSlyZXR1cm4hMDtyZXR1cm4hMX19KTt2YXIgbmU9L1xyL2c7TC5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihyKXt2YXIgeSxDLEssTj10aGlzWzBdO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEs9VmEociksdGhpcy5lYWNoKGZ1bmN0aW9uKFEpezE9PT10aGlzLm5vZGVUeXBlJiYoUT1LP3IuY2FsbCh0aGlzLFEsTCh0aGlzKS52YWwoKSk6cixudWxsPT1RP1E9IiI6Im51bWJlciI9PT10eXBlb2YgUT9RKz0iIjpBcnJheS5pc0FycmF5KFEpJiYoUT1MLm1hcChRLGZ1bmN0aW9uKFMpe3JldHVybiBudWxsPT1TPyIiOlMrIiJ9KSkseT1MLnZhbEhvb2tzW3RoaXMudHlwZV18fEwudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx5JiYic2V0ImluIHkmJnZvaWQgMCE9PXkuc2V0KHRoaXMsUSwidmFsdWUiKXx8KHRoaXMudmFsdWU9USkpfSk7aWYoTil7aWYoKHk9TC52YWxIb29rc1tOLnR5cGVdfHxMLnZhbEhvb2tzW04ubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYKImdldCJpbiB5JiZ2b2lkIDAhPT0oQz15LmdldChOLCJ2YWx1ZSIpKSlyZXR1cm4gQztDPU4udmFsdWU7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgQz9DLnJlcGxhY2UobmUsIiIpOm51bGw9PUM/IiI6Q319fSk7TC5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihyKXt2YXIgeT1MLmZpbmQuYXR0cihyLCJ2YWx1ZSIpO3JldHVybiBudWxsIT15P3k6dGEoTC50ZXh0KHIpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKHIpe3ZhciB5LEM9ci5vcHRpb25zLEs9ci5zZWxlY3RlZEluZGV4LE49InNlbGVjdC1vbmUiPT09ci50eXBlLFE9Tj9udWxsOltdLFM9Tj9LKzE6Qy5sZW5ndGg7Zm9yKHI9MD5LP1M6Tj9LOjA7cjxTO3IrKylpZih5PUNbcl0sISgheS5zZWxlY3RlZCYmciE9PUt8fHkuZGlzYWJsZWR8fHkucGFyZW50Tm9kZS5kaXNhYmxlZCYmZCh5LnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXt5PUwoeSkudmFsKCk7aWYoTilyZXR1cm4geTtRLnB1c2goeSl9cmV0dXJuIFF9LApzZXQ6ZnVuY3Rpb24ocix5KXtmb3IodmFyIEMsSyxOPXIub3B0aW9ucyxRPUwubWFrZUFycmF5KHkpLFM9Ti5sZW5ndGg7Uy0tOylpZihLPU5bU10sSy5zZWxlY3RlZD0tMTxMLmluQXJyYXkoTC52YWxIb29rcy5vcHRpb24uZ2V0KEspLFEpKUM9ITA7Q3x8KHIuc2VsZWN0ZWRJbmRleD0tMSk7cmV0dXJuIFF9fX19KTtMLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtMLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24ocix5KXtpZihBcnJheS5pc0FycmF5KHkpKXJldHVybiByLmNoZWNrZWQ9LTE8TC5pbkFycmF5KEwocikudmFsKCkseSl9fTtrYi5jaGVja09ufHwoTC52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIG51bGw9PT1yLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOnIudmFsdWV9KX0pO2tiLmZvY3VzaW49Im9uZm9jdXNpbiJpbiBhO3ZhciBQZD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sTmI9ZnVuY3Rpb24ocil7ci5zdG9wUHJvcGFnYXRpb24oKX07CkwuZXh0ZW5kKEwuZXZlbnQse3RyaWdnZXI6ZnVuY3Rpb24ocix5LEMsSyl7dmFyIE4sUSxTLGJhLCQsamEsc2EsemE9W0N8fFNhXSxoYT1tZC5jYWxsKHIsInR5cGUiKT9yLnR5cGU6cjtqYT1tZC5jYWxsKHIsIm5hbWVzcGFjZSIpP3IubmFtZXNwYWNlLnNwbGl0KCIuIik6W107UT1zYT1OPUM9Q3x8U2E7aWYoMyE9PUMubm9kZVR5cGUmJjghPT1DLm5vZGVUeXBlJiYhUGQudGVzdChoYStMLmV2ZW50LnRyaWdnZXJlZCkmJigtMTxoYS5pbmRleE9mKCIuIikmJihqYT1oYS5zcGxpdCgiLiIpLGhhPWphLnNoaWZ0KCksamEuc29ydCgpKSxiYT0wPmhhLmluZGV4T2YoIjoiKSYmIm9uIitoYSxyPXJbTC5leHBhbmRvXT9yOm5ldyBMLkV2ZW50KGhhLCJvYmplY3QiPT09dHlwZW9mIHImJnIpLHIuaXNUcmlnZ2VyPUs/MjozLHIubmFtZXNwYWNlPWphLmpvaW4oIi4iKSxyLnJuYW1lc3BhY2U9ci5uYW1lc3BhY2U/UmVnRXhwKCIoXnxcXC4pIitqYS5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKToKbnVsbCxyLnJlc3VsdD12b2lkIDAsci50YXJnZXR8fChyLnRhcmdldD1DKSx5PW51bGw9PXk/W3JdOkwubWFrZUFycmF5KHksW3JdKSxqYT1MLmV2ZW50LnNwZWNpYWxbaGFdfHx7fSxLfHwhamEudHJpZ2dlcnx8ITEhPT1qYS50cmlnZ2VyLmFwcGx5KEMseSkpKXtpZighSyYmIWphLm5vQnViYmxlJiYhUGMoQykpe1M9amEuZGVsZWdhdGVUeXBlfHxoYTtQZC50ZXN0KFMraGEpfHwoUT1RLnBhcmVudE5vZGUpO2Zvcig7UTtRPVEucGFyZW50Tm9kZSl6YS5wdXNoKFEpLE49UTtOPT09KEMub3duZXJEb2N1bWVudHx8U2EpJiZ6YS5wdXNoKE4uZGVmYXVsdFZpZXd8fE4ucGFyZW50V2luZG93fHxhKX1mb3IoTj0wOyhRPXphW04rK10pJiYhci5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOylzYT1RLHIudHlwZT0xPE4/UzpqYS5iaW5kVHlwZXx8aGEsKCQ9KEthLmdldChRLCJldmVudHMiKXx8e30pW3IudHlwZV0mJkthLmdldChRLCJoYW5kbGUiKSkmJiQuYXBwbHkoUSx5KSwoJD1iYSYmUVtiYV0pJiYKJC5hcHBseSYmcmQoUSkmJihyLnJlc3VsdD0kLmFwcGx5KFEseSksITE9PT1yLnJlc3VsdCYmci5wcmV2ZW50RGVmYXVsdCgpKTtyLnR5cGU9aGE7S3x8ci5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8amEuX2RlZmF1bHQmJiExIT09amEuX2RlZmF1bHQuYXBwbHkoemEucG9wKCkseSl8fCFyZChDKXx8IWJhfHwhVmEoQ1toYV0pfHxQYyhDKXx8KChOPUNbYmFdKSYmKENbYmFdPW51bGwpLEwuZXZlbnQudHJpZ2dlcmVkPWhhLHIuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmc2EuYWRkRXZlbnRMaXN0ZW5lcihoYSxOYiksQ1toYV0oKSxyLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJnNhLnJlbW92ZUV2ZW50TGlzdGVuZXIoaGEsTmIpLEwuZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxOJiYoQ1tiYV09TikpO3JldHVybiByLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKHIseSxDKXtyPUwuZXh0ZW5kKG5ldyBMLkV2ZW50LEMse3R5cGU6cixpc1NpbXVsYXRlZDohMH0pO0wuZXZlbnQudHJpZ2dlcihyLApudWxsLHkpfX0pO0wuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKHIseSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0wuZXZlbnQudHJpZ2dlcihyLHksdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24ocix5KXt2YXIgQz10aGlzWzBdO2lmKEMpcmV0dXJuIEwuZXZlbnQudHJpZ2dlcihyLHksQywhMCl9fSk7a2IuZm9jdXNpbnx8TC5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihyLHkpe3ZhciBDPWZ1bmN0aW9uKEspe0wuZXZlbnQuc2ltdWxhdGUoeSxLLnRhcmdldCxMLmV2ZW50LmZpeChLKSl9O0wuZXZlbnQuc3BlY2lhbFt5XT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgSz10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsTj1LYS5hY2Nlc3MoSyx5KTtOfHxLLmFkZEV2ZW50TGlzdGVuZXIocixDLCEwKTtLYS5hY2Nlc3MoSyx5LChOfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgSz10aGlzLm93bmVyRG9jdW1lbnR8fAp0aGlzLE49S2EuYWNjZXNzKEsseSktMTtOP0thLmFjY2VzcyhLLHksTik6KEsucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLEMsITApLEthLnJlbW92ZShLLHkpKX19fSk7dmFyIFhiPWEubG9jYXRpb24sdGQ9RGF0ZS5ub3coKSxkZD0vXD8vO0wucGFyc2VYTUw9ZnVuY3Rpb24ocil7dmFyIHk7aWYoIXJ8fCJzdHJpbmciIT09dHlwZW9mIHIpcmV0dXJuIG51bGw7dHJ5e3k9KG5ldyBhLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHIsInRleHQveG1sIil9Y2F0Y2goQyl7eT12b2lkIDB9eSYmIXkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RofHxMLmVycm9yKCJJbnZhbGlkIFhNTDogIityKTtyZXR1cm4geX07dmFyIEVjPS9cW1xdJC8sZWQ9L1xyP1xuL2csb2U9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFFkPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtMLnBhcmFtPWZ1bmN0aW9uKHIseSl7dmFyIEMsSz0KW10sTj1mdW5jdGlvbihRLFMpe3ZhciBiYT1WYShTKT9TKCk6UztLW0subGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoUSkrIlx4M2QiK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1iYT8iIjpiYSl9O2lmKG51bGw9PXIpcmV0dXJuIiI7aWYoQXJyYXkuaXNBcnJheShyKXx8ci5qcXVlcnkmJiFMLmlzUGxhaW5PYmplY3QocikpTC5lYWNoKHIsZnVuY3Rpb24oKXtOKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKEMgaW4gcilKYShDLHJbQ10seSxOKTtyZXR1cm4gSy5qb2luKCJceDI2Iil9O0wuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gTC5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciByPUwucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiByP0wubWFrZUFycmF5KHIpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgcj10aGlzLnR5cGU7CnJldHVybiB0aGlzLm5hbWUmJiFMKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmUWQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIW9lLnRlc3QocikmJih0aGlzLmNoZWNrZWR8fCFjZC50ZXN0KHIpKX0pLm1hcChmdW5jdGlvbihyLHkpe3ZhciBDPUwodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PUM/bnVsbDpBcnJheS5pc0FycmF5KEMpP0wubWFwKEMsZnVuY3Rpb24oSyl7cmV0dXJue25hbWU6eS5uYW1lLHZhbHVlOksucmVwbGFjZShlZCwiXHJcbiIpfX0pOntuYW1lOnkubmFtZSx2YWx1ZTpDLnJlcGxhY2UoZWQsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIgZmQ9LyUyMC9nLHBlPS8jLiokLyxxZT0vKFs/Jl0pXz1bXiZdKi8sUmQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9tZyxUZT0vXig/OkdFVHxIRUFEKSQvLHJlPS9eXC9cLy8sc2U9e30sUGI9e30sdGU9IiovIi5jb25jYXQoIioiKSx1ZD1TYS5jcmVhdGVFbGVtZW50KCJhIik7dWQuaHJlZj1YYi5ocmVmO0wuZXh0ZW5kKHthY3RpdmU6MCwKbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6WGIuaHJlZix0eXBlOiJHRVQiLGlzTG9jYWw6L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8udGVzdChYYi5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXRceDNkVVRGLTgiLGFjY2VwdHM6eyIqIjp0ZSx0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LApjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6SlNPTi5wYXJzZSwidGV4dCB4bWwiOkwucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihyLHkpe3JldHVybiB5P3hiKHhiKHIsTC5hamF4U2V0dGluZ3MpLHkpOnhiKEwuYWpheFNldHRpbmdzLHIpfSxhamF4UHJlZmlsdGVyOlBhKHNlKSxhamF4VHJhbnNwb3J0OlBhKFBiKSxhamF4OmZ1bmN0aW9uKHIseSl7ZnVuY3Rpb24gQyhkYixxYixDYixXYil7dmFyIHFjLFNiLGpiLG5iO25iPXFiO2lmKCFqYSl7amE9ITA7YmEmJmEuY2xlYXJUaW1lb3V0KGJhKTtLPXZvaWQgMDtRPVdifHwiIjtIYS5yZWFkeVN0YXRlPTA8ZGI/NDowO1diPTIwMDw9ZGImJjMwMD5kYnx8MzA0PT09ZGI7aWYoQ2Ipe2piPWhhO2Zvcih2YXIgTGE9SGEsbWIsc2IsaWIsT2EsS2I9amIuY29udGVudHMseWI9amIuZGF0YVR5cGVzOyIqIj09PXliWzBdOyl5Yi5zaGlmdCgpLAp2b2lkIDA9PT1tYiYmKG1iPWpiLm1pbWVUeXBlfHxMYS5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKG1iKWZvcihzYiBpbiBLYilpZihLYltzYl0mJktiW3NiXS50ZXN0KG1iKSl7eWIudW5zaGlmdChzYik7YnJlYWt9aWYoeWJbMF1pbiBDYilpYj15YlswXTtlbHNle2ZvcihzYiBpbiBDYil7aWYoIXliWzBdfHxqYi5jb252ZXJ0ZXJzW3NiKyIgIit5YlswXV0pe2liPXNiO2JyZWFrfU9hfHwoT2E9c2IpfWliPWlifHxPYX1pYj8oaWIhPT15YlswXSYmeWIudW5zaGlmdChpYiksamI9Q2JbaWJdKTpqYj12b2lkIDB9YTp7Q2I9aGE7bWI9amI7c2I9SGE7aWI9V2I7dmFyIGdiLGhiLEJiLExhPXt9LEtiPUNiLmRhdGFUeXBlcy5zbGljZSgpO2lmKEtiWzFdKWZvcihoYiBpbiBDYi5jb252ZXJ0ZXJzKUxhW2hiLnRvTG93ZXJDYXNlKCldPUNiLmNvbnZlcnRlcnNbaGJdO2ZvcihPYT1LYi5zaGlmdCgpO09hOylpZihDYi5yZXNwb25zZUZpZWxkc1tPYV0mJihzYltDYi5yZXNwb25zZUZpZWxkc1tPYV1dPQptYiksIUJiJiZpYiYmQ2IuZGF0YUZpbHRlciYmKG1iPUNiLmRhdGFGaWx0ZXIobWIsQ2IuZGF0YVR5cGUpKSxCYj1PYSxPYT1LYi5zaGlmdCgpKWlmKCIqIj09PU9hKU9hPUJiO2Vsc2UgaWYoIioiIT09QmImJkJiIT09T2Epe2hiPUxhW0JiKyIgIitPYV18fExhWyIqICIrT2FdO2lmKCFoYilmb3IoZ2IgaW4gTGEpaWYoamI9Z2Iuc3BsaXQoIiAiKSxqYlsxXT09PU9hJiYoaGI9TGFbQmIrIiAiK2piWzBdXXx8TGFbIiogIitqYlswXV0pKXshMD09PWhiP2hiPUxhW2diXTohMCE9PUxhW2diXSYmKE9hPWpiWzBdLEtiLnVuc2hpZnQoamJbMV0pKTticmVha31pZighMCE9PWhiKWlmKGhiJiZDYi50aHJvd3MpbWI9aGIobWIpO2Vsc2UgdHJ5e21iPWhiKG1iKX1jYXRjaChGZCl7amI9e3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6aGI/RmQ6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK0JiKyIgdG8gIitPYX07YnJlYWsgYX19amI9e3N0YXRlOiJzdWNjZXNzIixkYXRhOm1ifX1pZihXYiloYS5pZk1vZGlmaWVkJiYKKChuYj1IYS5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKSYmKEwubGFzdE1vZGlmaWVkW05dPW5iKSwobmI9SGEuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSkmJihMLmV0YWdbTl09bmIpKSwyMDQ9PT1kYnx8IkhFQUQiPT09aGEudHlwZT9uYj0ibm9jb250ZW50IjozMDQ9PT1kYj9uYj0ibm90bW9kaWZpZWQiOihuYj1qYi5zdGF0ZSxxYz1qYi5kYXRhLFNiPWpiLmVycm9yLFdiPSFTYik7ZWxzZSBpZihTYj1uYixkYnx8IW5iKW5iPSJlcnJvciIsMD5kYiYmKGRiPTApO0hhLnN0YXR1cz1kYjtIYS5zdGF0dXNUZXh0PShxYnx8bmIpKyIiO1diP0diLnJlc29sdmVXaXRoKE1hLFtxYyxuYixIYV0pOkdiLnJlamVjdFdpdGgoTWEsW0hhLG5iLFNiXSk7SGEuc3RhdHVzQ29kZShSYik7UmI9dm9pZCAwO3NhJiZSYS50cmlnZ2VyKFdiPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW0hhLGhhLFdiP3FjOlNiXSk7SmIuZmlyZVdpdGgoTWEsW0hhLG5iXSk7c2EmJihSYS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLApbSGEsaGFdKSwtLUwuYWN0aXZlfHxMLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX0ib2JqZWN0Ij09PXR5cGVvZiByJiYoeT1yLHI9dm9pZCAwKTt5PXl8fHt9O3ZhciBLLE4sUSxTLGJhLCQsamEsc2EsemEsaGE9TC5hamF4U2V0dXAoe30seSksTWE9aGEuY29udGV4dHx8aGEsUmE9aGEuY29udGV4dCYmKE1hLm5vZGVUeXBlfHxNYS5qcXVlcnkpP0woTWEpOkwuZXZlbnQsR2I9TC5EZWZlcnJlZCgpLEpiPUwuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLFJiPWhhLnN0YXR1c0NvZGV8fHt9LHpiPXt9LGpjPXt9LGxjPSJjYW5jZWxlZCIsSGE9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihkYil7dmFyIHFiO2lmKGphKXtpZighUylmb3IoUz17fTtxYj1SZC5leGVjKFEpOylTW3FiWzFdLnRvTG93ZXJDYXNlKCkrIiAiXT0oU1txYlsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQocWJbMl0pO3FiPVNbZGIudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT0KcWI/bnVsbDpxYi5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gamE/UTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGRiLHFiKXtudWxsPT1qYSYmKGRiPWpjW2RiLnRvTG93ZXJDYXNlKCldPWpjW2RiLnRvTG93ZXJDYXNlKCldfHxkYix6YltkYl09cWIpO3JldHVybiB0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGRiKXtudWxsPT1qYSYmKGhhLm1pbWVUeXBlPWRiKTtyZXR1cm4gdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihkYil7dmFyIHFiO2lmKGRiKWlmKGphKUhhLmFsd2F5cyhkYltIYS5zdGF0dXNdKTtlbHNlIGZvcihxYiBpbiBkYilSYltxYl09W1JiW3FiXSxkYltxYl1dO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihkYil7ZGI9ZGJ8fGxjO0smJksuYWJvcnQoZGIpO0MoMCxkYik7cmV0dXJuIHRoaXN9fTtHYi5wcm9taXNlKEhhKTtoYS51cmw9KChyfHxoYS51cmx8fFhiLmhyZWYpKyIiKS5yZXBsYWNlKHJlLApYYi5wcm90b2NvbCsiLy8iKTtoYS50eXBlPXkubWV0aG9kfHx5LnR5cGV8fGhhLm1ldGhvZHx8aGEudHlwZTtoYS5kYXRhVHlwZXM9KGhhLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkubWF0Y2goaGMpfHxbIiJdO2lmKG51bGw9PWhhLmNyb3NzRG9tYWluKXskPVNhLmNyZWF0ZUVsZW1lbnQoImEiKTt0cnl7JC5ocmVmPWhhLnVybCwkLmhyZWY9JC5ocmVmLGhhLmNyb3NzRG9tYWluPXVkLnByb3RvY29sKyIvLyIrdWQuaG9zdCE9PSQucHJvdG9jb2wrIi8vIiskLmhvc3R9Y2F0Y2goYWIpe2hhLmNyb3NzRG9tYWluPSEwfX1oYS5kYXRhJiZoYS5wcm9jZXNzRGF0YSYmInN0cmluZyIhPT10eXBlb2YgaGEuZGF0YSYmKGhhLmRhdGE9TC5wYXJhbShoYS5kYXRhLGhhLnRyYWRpdGlvbmFsKSk7ZmIoc2UsaGEseSxIYSk7aWYoamEpcmV0dXJuIEhhOyhzYT1MLmV2ZW50JiZoYS5nbG9iYWwpJiYwPT09TC5hY3RpdmUrKyYmTC5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtoYS50eXBlPQpoYS50eXBlLnRvVXBwZXJDYXNlKCk7aGEuaGFzQ29udGVudD0hVGUudGVzdChoYS50eXBlKTtOPWhhLnVybC5yZXBsYWNlKHBlLCIiKTtoYS5oYXNDb250ZW50P2hhLmRhdGEmJmhhLnByb2Nlc3NEYXRhJiYwPT09KGhhLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJihoYS5kYXRhPWhhLmRhdGEucmVwbGFjZShmZCwiKyIpKTooJD1oYS51cmwuc2xpY2UoTi5sZW5ndGgpLGhhLmRhdGEmJihoYS5wcm9jZXNzRGF0YXx8InN0cmluZyI9PT10eXBlb2YgaGEuZGF0YSkmJihOKz0oZGQudGVzdChOKT8iXHgyNiI6Ij8iKStoYS5kYXRhLGRlbGV0ZSBoYS5kYXRhKSwhMT09PWhhLmNhY2hlJiYoTj1OLnJlcGxhY2UocWUsIiQxIiksJD0oZGQudGVzdChOKT8iXHgyNiI6Ij8iKSsiX1x4M2QiK3RkKysgKyQpLGhhLnVybD1OKyQpO2hhLmlmTW9kaWZpZWQmJihMLmxhc3RNb2RpZmllZFtOXSYmSGEuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLApMLmxhc3RNb2RpZmllZFtOXSksTC5ldGFnW05dJiZIYS5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixMLmV0YWdbTl0pKTsoaGEuZGF0YSYmaGEuaGFzQ29udGVudCYmITEhPT1oYS5jb250ZW50VHlwZXx8eS5jb250ZW50VHlwZSkmJkhhLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsaGEuY29udGVudFR5cGUpO0hhLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsaGEuZGF0YVR5cGVzWzBdJiZoYS5hY2NlcHRzW2hhLmRhdGFUeXBlc1swXV0/aGEuYWNjZXB0c1toYS5kYXRhVHlwZXNbMF1dKygiKiIhPT1oYS5kYXRhVHlwZXNbMF0/IiwgIit0ZSsiOyBxXHgzZDAuMDEiOiIiKTpoYS5hY2NlcHRzWyIqIl0pO2Zvcih6YSBpbiBoYS5oZWFkZXJzKUhhLnNldFJlcXVlc3RIZWFkZXIoemEsaGEuaGVhZGVyc1t6YV0pO2lmKGhhLmJlZm9yZVNlbmQmJighMT09PWhhLmJlZm9yZVNlbmQuY2FsbChNYSxIYSxoYSl8fGphKSlyZXR1cm4gSGEuYWJvcnQoKTtsYz0iYWJvcnQiOwpKYi5hZGQoaGEuY29tcGxldGUpO0hhLmRvbmUoaGEuc3VjY2Vzcyk7SGEuZmFpbChoYS5lcnJvcik7aWYoSz1mYihQYixoYSx5LEhhKSl7SGEucmVhZHlTdGF0ZT0xO3NhJiZSYS50cmlnZ2VyKCJhamF4U2VuZCIsW0hhLGhhXSk7aWYoamEpcmV0dXJuIEhhO2hhLmFzeW5jJiYwPGhhLnRpbWVvdXQmJihiYT1hLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtIYS5hYm9ydCgidGltZW91dCIpfSxoYS50aW1lb3V0KSk7dHJ5e2phPSExLEsuc2VuZCh6YixDKX1jYXRjaCh3Yyl7aWYoamEpdGhyb3cgd2M7QygtMSx3Yyl9fWVsc2UgQygtMSwiTm8gVHJhbnNwb3J0Iik7cmV0dXJuIEhhfSxnZXRKU09OOmZ1bmN0aW9uKHIseSxDKXtyZXR1cm4gTC5nZXQocix5LEMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKHIseSl7cmV0dXJuIEwuZ2V0KHIsdm9pZCAwLHksInNjcmlwdCIpfX0pO0wuZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihyLHkpe0xbeV09ZnVuY3Rpb24oQyxLLE4sUSl7VmEoSykmJgooUT1RfHxOLE49SyxLPXZvaWQgMCk7cmV0dXJuIEwuYWpheChMLmV4dGVuZCh7dXJsOkMsdHlwZTp5LGRhdGFUeXBlOlEsZGF0YTpLLHN1Y2Nlc3M6Tn0sTC5pc1BsYWluT2JqZWN0KEMpJiZDKSl9fSk7TC5fZXZhbFVybD1mdW5jdGlvbihyLHkpe3JldHVybiBMLmFqYXgoe3VybDpyLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsY2FjaGU6ITAsYXN5bmM6ITEsZ2xvYmFsOiExLGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oKXt9fSxkYXRhRmlsdGVyOmZ1bmN0aW9uKEMpe0wuZ2xvYmFsRXZhbChDLHkpfX0pfTtMLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihyKXt0aGlzWzBdJiYoVmEocikmJihyPXIuY2FsbCh0aGlzWzBdKSkscj1MKHIsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZyLmluc2VydEJlZm9yZSh0aGlzWzBdKSxyLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgeT10aGlzO3kuZmlyc3RFbGVtZW50Q2hpbGQ7KXk9CnkuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIHl9KS5hcHBlbmQodGhpcykpO3JldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24ocil7cmV0dXJuIFZhKHIpP3RoaXMuZWFjaChmdW5jdGlvbih5KXtMKHRoaXMpLndyYXBJbm5lcihyLmNhbGwodGhpcyx5KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgeT1MKHRoaXMpLEM9eS5jb250ZW50cygpO0MubGVuZ3RoP0Mud3JhcEFsbChyKTp5LmFwcGVuZChyKX0pfSx3cmFwOmZ1bmN0aW9uKHIpe3ZhciB5PVZhKHIpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oQyl7TCh0aGlzKS53cmFwQWxsKHk/ci5jYWxsKHRoaXMsQyk6cil9KX0sdW53cmFwOmZ1bmN0aW9uKHIpe3RoaXMucGFyZW50KHIpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtMKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KTtyZXR1cm4gdGhpc319KTtMLmV4cHIucHNldWRvcy5oaWRkZW49ZnVuY3Rpb24ocil7cmV0dXJuIUwuZXhwci5wc2V1ZG9zLnZpc2libGUocil9OwpMLmV4cHIucHNldWRvcy52aXNpYmxlPWZ1bmN0aW9uKHIpe3JldHVybiEhKHIub2Zmc2V0V2lkdGh8fHIub2Zmc2V0SGVpZ2h0fHxyLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX07TC5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgYS5YTUxIdHRwUmVxdWVzdH1jYXRjaChyKXt9fTt2YXIgdWU9ezA6MjAwLDEyMjM6MjA0fSxnZD1MLmFqYXhTZXR0aW5ncy54aHIoKTtrYi5jb3JzPSEhZ2QmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gZ2Q7a2IuYWpheD1nZD0hIWdkO0wuYWpheFRyYW5zcG9ydChmdW5jdGlvbihyKXt2YXIgeSxDO2lmKGtiLmNvcnN8fGdkJiYhci5jcm9zc0RvbWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihLLE4pe3ZhciBRLFM9ci54aHIoKTtTLm9wZW4oci50eXBlLHIudXJsLHIuYXN5bmMsci51c2VybmFtZSxyLnBhc3N3b3JkKTtpZihyLnhockZpZWxkcylmb3IoUSBpbiByLnhockZpZWxkcylTW1FdPXIueGhyRmllbGRzW1FdO3IubWltZVR5cGUmJgpTLm92ZXJyaWRlTWltZVR5cGUmJlMub3ZlcnJpZGVNaW1lVHlwZShyLm1pbWVUeXBlKTtyLmNyb3NzRG9tYWlufHxLWyJYLVJlcXVlc3RlZC1XaXRoIl18fChLWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7Zm9yKFEgaW4gSylTLnNldFJlcXVlc3RIZWFkZXIoUSxLW1FdKTt5PWZ1bmN0aW9uKCQpe3JldHVybiBmdW5jdGlvbigpe3kmJih5PUM9Uy5vbmxvYWQ9Uy5vbmVycm9yPVMub25hYm9ydD1TLm9udGltZW91dD1TLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT0kP1MuYWJvcnQoKToiZXJyb3IiPT09JD8ibnVtYmVyIiE9PXR5cGVvZiBTLnN0YXR1cz9OKDAsImVycm9yIik6TihTLnN0YXR1cyxTLnN0YXR1c1RleHQpOk4odWVbUy5zdGF0dXNdfHxTLnN0YXR1cyxTLnN0YXR1c1RleHQsInRleHQiIT09KFMucmVzcG9uc2VUeXBlfHwidGV4dCIpfHwic3RyaW5nIiE9PXR5cGVvZiBTLnJlc3BvbnNlVGV4dD97YmluYXJ5OlMucmVzcG9uc2V9Ont0ZXh0OlMucmVzcG9uc2VUZXh0fSwKUy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX07Uy5vbmxvYWQ9eSgpO0M9Uy5vbmVycm9yPVMub250aW1lb3V0PXkoImVycm9yIik7dm9pZCAwIT09Uy5vbmFib3J0P1Mub25hYm9ydD1DOlMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PVMucmVhZHlTdGF0ZSYmYS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eSYmQygpfSl9O3k9eSgiYWJvcnQiKTt0cnl7Uy5zZW5kKHIuaGFzQ29udGVudCYmci5kYXRhfHxudWxsKX1jYXRjaChiYSl7aWYoeSl0aHJvdyBiYTt9fSxhYm9ydDpmdW5jdGlvbigpe3kmJnkoKX19fSk7TC5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKHIpe3IuY3Jvc3NEb21haW4mJihyLmNvbnRlbnRzLnNjcmlwdD0hMSl9KTtMLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sCmNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24ocil7TC5nbG9iYWxFdmFsKHIpO3JldHVybiByfX19KTtMLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24ocil7dm9pZCAwPT09ci5jYWNoZSYmKHIuY2FjaGU9ITEpO3IuY3Jvc3NEb21haW4mJihyLnR5cGU9IkdFVCIpfSk7TC5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKHIpe2lmKHIuY3Jvc3NEb21haW58fHIuc2NyaXB0QXR0cnMpe3ZhciB5LEM7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oSyxOKXt5PUwoIlx4M2NzY3JpcHRceDNlIikuYXR0cihyLnNjcmlwdEF0dHJzfHx7fSkucHJvcCh7Y2hhcnNldDpyLnNjcmlwdENoYXJzZXQsc3JjOnIudXJsfSkub24oImxvYWQgZXJyb3IiLEM9ZnVuY3Rpb24oUSl7eS5yZW1vdmUoKTtDPW51bGw7USYmTigiZXJyb3IiPT09US50eXBlPzQwNDoyMDAsUS50eXBlKX0pO1NhLmhlYWQuYXBwZW5kQ2hpbGQoeVswXSl9LGFib3J0OmZ1bmN0aW9uKCl7QyYmQygpfX19fSk7CnZhciB2ZD1bXSxoZD0vKD0pXD8oPz0mfCQpfFw/XD8vO0wuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgcj12ZC5wb3AoKXx8TC5leHBhbmRvKyJfIit0ZCsrO3RoaXNbcl09ITA7cmV0dXJuIHJ9fSk7TC5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihyLHksQyl7dmFyIEssTixRLFM9ITEhPT1yLmpzb25wJiYoaGQudGVzdChyLnVybCk/InVybCI6InN0cmluZyI9PT10eXBlb2Ygci5kYXRhJiYwPT09KHIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmaGQudGVzdChyLmRhdGEpJiYiZGF0YSIpO2lmKFN8fCJqc29ucCI9PT1yLmRhdGFUeXBlc1swXSlyZXR1cm4gSz1yLmpzb25wQ2FsbGJhY2s9VmEoci5qc29ucENhbGxiYWNrKT9yLmpzb25wQ2FsbGJhY2soKTpyLmpzb25wQ2FsbGJhY2ssUz9yW1NdPXJbU10ucmVwbGFjZShoZCwiJDEiK0spOgohMSE9PXIuanNvbnAmJihyLnVybCs9KGRkLnRlc3Qoci51cmwpPyJceDI2IjoiPyIpK3IuanNvbnArIlx4M2QiK0spLHIuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe1F8fEwuZXJyb3IoSysiIHdhcyBub3QgY2FsbGVkIik7cmV0dXJuIFFbMF19LHIuZGF0YVR5cGVzWzBdPSJqc29uIixOPWFbS10sYVtLXT1mdW5jdGlvbigpe1E9YXJndW1lbnRzfSxDLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PU4/TChhKS5yZW1vdmVQcm9wKEspOmFbS109TjtyW0tdJiYoci5qc29ucENhbGxiYWNrPXkuanNvbnBDYWxsYmFjayx2ZC5wdXNoKEspKTtRJiZWYShOKSYmTihRWzBdKTtRPU49dm9pZCAwfSksInNjcmlwdCJ9KTtrYi5jcmVhdGVIVE1MRG9jdW1lbnQ9ZnVuY3Rpb24oKXt2YXIgcj1TYS5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHk7ci5pbm5lckhUTUw9Ilx4M2Nmb3JtXHgzZVx4M2MvZm9ybVx4M2VceDNjZm9ybVx4M2VceDNjL2Zvcm1ceDNlIjsKcmV0dXJuIDI9PT1yLmNoaWxkTm9kZXMubGVuZ3RofSgpO0wucGFyc2VIVE1MPWZ1bmN0aW9uKHIseSxDKXtpZigic3RyaW5nIiE9PXR5cGVvZiByKXJldHVybltdOyJib29sZWFuIj09PXR5cGVvZiB5JiYoQz15LHk9ITEpO3ZhciBLO3l8fChrYi5jcmVhdGVIVE1MRG9jdW1lbnQ/KHk9U2EuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSxLPXkuY3JlYXRlRWxlbWVudCgiYmFzZSIpLEsuaHJlZj1TYS5sb2NhdGlvbi5ocmVmLHkuaGVhZC5hcHBlbmRDaGlsZChLKSk6eT1TYSk7Sz1oZS5leGVjKHIpO0M9IUMmJltdO2lmKEspcmV0dXJuW3kuY3JlYXRlRWxlbWVudChLWzFdKV07Sz1GKFtyXSx5LEMpO0MmJkMubGVuZ3RoJiZMKEMpLnJlbW92ZSgpO3JldHVybiBMLm1lcmdlKFtdLEsuY2hpbGROb2Rlcyl9O0wuZm4ubG9hZD1mdW5jdGlvbihyLHksQyl7dmFyIEssTixRLFM9dGhpcyxiYT1yLmluZGV4T2YoIiAiKTstMTxiYSYmKEs9dGEoci5zbGljZShiYSkpLHI9CnIuc2xpY2UoMCxiYSkpO1ZhKHkpPyhDPXkseT12b2lkIDApOnkmJiJvYmplY3QiPT09dHlwZW9mIHkmJihOPSJQT1NUIik7MDxTLmxlbmd0aCYmTC5hamF4KHt1cmw6cix0eXBlOk58fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRhOnl9KS5kb25lKGZ1bmN0aW9uKCQpe1E9YXJndW1lbnRzO1MuaHRtbChLP0woIlx4M2NkaXZceDNlIikuYXBwZW5kKEwucGFyc2VIVE1MKCQpKS5maW5kKEspOiQpfSkuYWx3YXlzKEMmJmZ1bmN0aW9uKCQsamEpe1MuZWFjaChmdW5jdGlvbigpe0MuYXBwbHkodGhpcyxRfHxbJC5yZXNwb25zZVRleHQsamEsJF0pfSl9KTtyZXR1cm4gdGhpc307TC5lYWNoKCJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoIiAiKSxmdW5jdGlvbihyLHkpe0wuZm5beV09ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMub24oeSxDKX19KTtMLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbihyKXtyZXR1cm4gTC5ncmVwKEwudGltZXJzLApmdW5jdGlvbih5KXtyZXR1cm4gcj09PXkuZWxlbX0pLmxlbmd0aH07TC5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihyLHksQyl7dmFyIEssTixRLFM9TC5jc3MociwicG9zaXRpb24iKSxiYT1MKHIpLCQ9e307InN0YXRpYyI9PT1TJiYoci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKTtRPWJhLm9mZnNldCgpO049TC5jc3MociwidG9wIik7Sz1MLmNzcyhyLCJsZWZ0Iik7KCJhYnNvbHV0ZSI9PT1TfHwiZml4ZWQiPT09UykmJi0xPChOK0spLmluZGV4T2YoImF1dG8iKT8oSz1iYS5wb3NpdGlvbigpLE49Sy50b3AsSz1LLmxlZnQpOihOPXBhcnNlRmxvYXQoTil8fDAsSz1wYXJzZUZsb2F0KEspfHwwKTtWYSh5KSYmKHk9eS5jYWxsKHIsQyxMLmV4dGVuZCh7fSxRKSkpO251bGwhPXkudG9wJiYoJC50b3A9eS50b3AtUS50b3ArTik7bnVsbCE9eS5sZWZ0JiYoJC5sZWZ0PXkubGVmdC1RLmxlZnQrSyk7InVzaW5nImluIHk/eS51c2luZy5jYWxsKHIsJCk6YmEuY3NzKCQpfX07TC5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihyKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT0Kcj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihLKXtMLm9mZnNldC5zZXRPZmZzZXQodGhpcyxyLEspfSk7dmFyIHksQztpZihDPXRoaXNbMF0pe2lmKCFDLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKXJldHVybnt0b3A6MCxsZWZ0OjB9O3k9Qy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtDPUMub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm57dG9wOnkudG9wK0MucGFnZVlPZmZzZXQsbGVmdDp5LmxlZnQrQy5wYWdlWE9mZnNldH19fSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciByLHksQyxLPXRoaXNbMF0sTj17dG9wOjAsbGVmdDowfTtpZigiZml4ZWQiPT09TC5jc3MoSywicG9zaXRpb24iKSl5PUsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt5PXRoaXMub2Zmc2V0KCk7Qz1LLm93bmVyRG9jdW1lbnQ7Zm9yKHI9Sy5vZmZzZXRQYXJlbnR8fEMuZG9jdW1lbnRFbGVtZW50O3ImJihyPT09Qy5ib2R5fHxyPT09Qy5kb2N1bWVudEVsZW1lbnQpJiYic3RhdGljIj09PQpMLmNzcyhyLCJwb3NpdGlvbiIpOylyPXIucGFyZW50Tm9kZTtyJiZyIT09SyYmMT09PXIubm9kZVR5cGUmJihOPUwocikub2Zmc2V0KCksTi50b3ArPUwuY3NzKHIsImJvcmRlclRvcFdpZHRoIiwhMCksTi5sZWZ0Kz1MLmNzcyhyLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSl9cmV0dXJue3RvcDp5LnRvcC1OLnRvcC1MLmNzcyhLLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnkubGVmdC1OLmxlZnQtTC5jc3MoSywibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgcj10aGlzLm9mZnNldFBhcmVudDtyJiYic3RhdGljIj09PUwuY3NzKHIsInBvc2l0aW9uIik7KXI9ci5vZmZzZXRQYXJlbnQ7cmV0dXJuIHJ8fGFkfSl9fSk7TC5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKHIseSl7dmFyIEM9InBhZ2VZT2Zmc2V0Ij09PXk7TC5mbltyXT0KZnVuY3Rpb24oSyl7cmV0dXJuICRiKHRoaXMsZnVuY3Rpb24oTixRLFMpe3ZhciBiYTtQYyhOKT9iYT1OOjk9PT1OLm5vZGVUeXBlJiYoYmE9Ti5kZWZhdWx0Vmlldyk7aWYodm9pZCAwPT09UylyZXR1cm4gYmE/YmFbeV06TltRXTtiYT9iYS5zY3JvbGxUbyhDP2JhLnBhZ2VYT2Zmc2V0OlMsQz9TOmJhLnBhZ2VZT2Zmc2V0KTpOW1FdPVN9LHIsSyxhcmd1bWVudHMubGVuZ3RoKX19KTtMLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24ocix5KXtMLmNzc0hvb2tzW3ldPWVhKGtiLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oQyxLKXtpZihLKXJldHVybiBLPVooQyx5KSxWYi50ZXN0KEspP0woQykucG9zaXRpb24oKVt5XSsicHgiOkt9KX0pO0wuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKHIseSl7TC5lYWNoKHtwYWRkaW5nOiJpbm5lciIrcixjb250ZW50OnksIiI6Im91dGVyIityfSxmdW5jdGlvbihDLEspe0wuZm5bS109ZnVuY3Rpb24oTixRKXt2YXIgUz0KYXJndW1lbnRzLmxlbmd0aCYmKEN8fCJib29sZWFuIiE9PXR5cGVvZiBOKSxiYT1DfHwoITA9PT1OfHwhMD09PVE/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiAkYih0aGlzLGZ1bmN0aW9uKCQsamEsc2Epe3JldHVybiBQYygkKT8wPT09Sy5pbmRleE9mKCJvdXRlciIpPyRbImlubmVyIityXTokLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IityXTo5PT09JC5ub2RlVHlwZT8oamE9JC5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoJC5ib2R5WyJzY3JvbGwiK3JdLGphWyJzY3JvbGwiK3JdLCQuYm9keVsib2Zmc2V0IityXSxqYVsib2Zmc2V0IityXSxqYVsiY2xpZW50IityXSkpOnZvaWQgMD09PXNhP0wuY3NzKCQsamEsYmEpOkwuc3R5bGUoJCxqYSxzYSxiYSl9LHksUz9OOnZvaWQgMCxTKX19KX0pO0wuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSwKZnVuY3Rpb24ocix5KXtMLmZuW3ldPWZ1bmN0aW9uKEMsSyl7cmV0dXJuIDA8YXJndW1lbnRzLmxlbmd0aD90aGlzLm9uKHksbnVsbCxDLEspOnRoaXMudHJpZ2dlcih5KX19KTtMLmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24ocix5KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKHIpLm1vdXNlbGVhdmUoeXx8cil9fSk7TC5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24ocix5LEMpe3JldHVybiB0aGlzLm9uKHIsbnVsbCx5LEMpfSx1bmJpbmQ6ZnVuY3Rpb24ocix5KXtyZXR1cm4gdGhpcy5vZmYocixudWxsLHkpfSxkZWxlZ2F0ZTpmdW5jdGlvbihyLHksQyxLKXtyZXR1cm4gdGhpcy5vbih5LHIsQyxLKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihyLHksQyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKHIsIioqIik6dGhpcy5vZmYoeSxyfHwiKioiLEMpfX0pO0wucHJveHk9ZnVuY3Rpb24ocix5KXt2YXIgQyxLOyJzdHJpbmciPT09dHlwZW9mIHkmJihDPXJbeV0seT1yLApyPUMpO2lmKFZhKHIpKXJldHVybiBLPVliLmNhbGwoYXJndW1lbnRzLDIpLEM9ZnVuY3Rpb24oKXtyZXR1cm4gci5hcHBseSh5fHx0aGlzLEsuY29uY2F0KFliLmNhbGwoYXJndW1lbnRzKSkpfSxDLmd1aWQ9ci5ndWlkPXIuZ3VpZHx8TC5ndWlkKyssQ307TC5ob2xkUmVhZHk9ZnVuY3Rpb24ocil7cj9MLnJlYWR5V2FpdCsrOkwucmVhZHkoITApfTtMLmlzQXJyYXk9QXJyYXkuaXNBcnJheTtMLnBhcnNlSlNPTj1KU09OLnBhcnNlO0wubm9kZU5hbWU9ZDtMLmlzRnVuY3Rpb249VmE7TC5pc1dpbmRvdz1QYztMLmNhbWVsQ2FzZT1sO0wudHlwZT10O0wubm93PURhdGUubm93O0wuaXNOdW1lcmljPWZ1bmN0aW9uKHIpe3ZhciB5PUwudHlwZShyKTtyZXR1cm4oIm51bWJlciI9PT15fHwic3RyaW5nIj09PXkpJiYhaXNOYU4oci1wYXJzZUZsb2F0KHIpKX07ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBMfSk7CnZhciB3ZD1hLmpRdWVyeSx2ZT1hLiQ7TC5ub0NvbmZsaWN0PWZ1bmN0aW9uKHIpe2EuJD09PUwmJihhLiQ9dmUpO3ImJmEualF1ZXJ5PT09TCYmKGEualF1ZXJ5PXdkKTtyZXR1cm4gTH07RXx8KGEualF1ZXJ5PWEuJD1MKTtyZXR1cm4gTH0pO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGpRdWVyeSl0aHJvdyBFcnJvcigiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkiKTsoZnVuY3Rpb24oYSl7YT1hLmZuLmpxdWVyeS5zcGxpdCgiICIpWzBdLnNwbGl0KCIuIik7aWYoMj5hWzBdJiY5PmFbMV18fDE9PWFbMF0mJjk9PWFbMV0mJjE+YVsyXSl0aHJvdyBFcnJvcigiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkgdmVyc2lvbiAxLjkuMSBvciBoaWdoZXIiKTt9KShqUXVlcnkpOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gRSgpe3ZhciBxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvb3RzdHJhcCIpLHQ9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQiLE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9LGY7Zm9yKGYgaW4gdClpZih2b2lkIDAhPT1xLnN0eWxlW2ZdKXJldHVybntlbmQ6dFtmXX07cmV0dXJuITF9YS5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZD1mdW5jdGlvbihxKXt2YXIgdD0hMSxmPXRoaXM7YSh0aGlzKS5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZnVuY3Rpb24oKXt0PSEwfSk7c2V0VGltZW91dChmdW5jdGlvbigpe3R8fGEoZikudHJpZ2dlcihhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpfSxxKTtyZXR1cm4gdGhpc307YShmdW5jdGlvbigpe2Euc3VwcG9ydC50cmFuc2l0aW9uPUUoKTthLnN1cHBvcnQudHJhbnNpdGlvbiYmCihhLmV2ZW50LnNwZWNpYWwuYnNUcmFuc2l0aW9uRW5kPXtiaW5kVHlwZTphLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZGVsZWdhdGVUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxoYW5kbGU6ZnVuY3Rpb24ocSl7aWYoYShxLnRhcmdldCkuaXModGhpcykpcmV0dXJuIHEuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSl9KShqUXVlcnkpOwooZnVuY3Rpb24oYSl7dmFyIEU9ZnVuY3Rpb24odCl7YSh0KS5vbigiY2xpY2siLCdbZGF0YS1kaXNtaXNzXHgzZCJhbGVydCJdJyx0aGlzLmNsb3NlKX07RS5WRVJTSU9OPSIzLjMuNSI7RS5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MDtFLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBmKCl7Yi5kZXRhY2goKS50cmlnZ2VyKCJjbG9zZWQuYnMuYWxlcnQiKS5yZW1vdmUoKX12YXIgZD1hKHRoaXMpLGM9ZC5hdHRyKCJkYXRhLXRhcmdldCIpO2N8fChjPShjPWQuYXR0cigiaHJlZiIpKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKTt2YXIgYj1hKGMpO3QmJnQucHJldmVudERlZmF1bHQoKTtiLmxlbmd0aHx8KGI9ZC5jbG9zZXN0KCIuYWxlcnQiKSk7Yi50cmlnZ2VyKHQ9YS5FdmVudCgiY2xvc2UuYnMuYWxlcnQiKSk7dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGIucmVtb3ZlQ2xhc3MoImluIiksYS5zdXBwb3J0LnRyYW5zaXRpb24mJmIuaGFzQ2xhc3MoImZhZGUiKT8KYi5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZikuZW11bGF0ZVRyYW5zaXRpb25FbmQoRS5UUkFOU0lUSU9OX0RVUkFUSU9OKTpmKCkpfTt2YXIgcT1hLmZuLmFsZXJ0O2EuZm4uYWxlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWEodGhpcyksZD1mLmRhdGEoImJzLmFsZXJ0Iik7ZHx8Zi5kYXRhKCJicy5hbGVydCIsZD1uZXcgRSh0aGlzKSk7InN0cmluZyI9PXR5cGVvZiB0JiZkW3RdLmNhbGwoZil9KX07YS5mbi5hbGVydC5Db25zdHJ1Y3Rvcj1FO2EuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe2EuZm4uYWxlcnQ9cTtyZXR1cm4gdGhpc307YShkb2N1bWVudCkub24oImNsaWNrLmJzLmFsZXJ0LmRhdGEtYXBpIiwnW2RhdGEtZGlzbWlzc1x4M2QiYWxlcnQiXScsRS5wcm90b3R5cGUuY2xvc2UpfSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIEUoZil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksYz1kLmRhdGEoImJzLmJ1dHRvbiIpLGI9Im9iamVjdCI9PXR5cGVvZiBmJiZmO2N8fGQuZGF0YSgiYnMuYnV0dG9uIixjPW5ldyBxKHRoaXMsYikpOyJ0b2dnbGUiPT1mP2MudG9nZ2xlKCk6ZiYmYy5zZXRTdGF0ZShmKX0pfXZhciBxPWZ1bmN0aW9uKGYsZCl7dGhpcy4kZWxlbWVudD1hKGYpO3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxxLkRFRkFVTFRTLGQpO3RoaXMuaXNMb2FkaW5nPSExfTtxLlZFUlNJT049IjMuMy41IjtxLkRFRkFVTFRTPXtsb2FkaW5nVGV4dDoibG9hZGluZy4uLiJ9O3EucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGYpe3ZhciBkPXRoaXMuJGVsZW1lbnQsYz1kLmlzKCJpbnB1dCIpPyJ2YWwiOiJodG1sIixiPWQuZGF0YSgpO2YrPSJUZXh0IjtudWxsPT1iLnJlc2V0VGV4dCYmZC5kYXRhKCJyZXNldFRleHQiLGRbY10oKSk7c2V0VGltZW91dChhLnByb3h5KGZ1bmN0aW9uKCl7ZFtjXShudWxsPT0KYltmXT90aGlzLm9wdGlvbnNbZl06YltmXSk7ImxvYWRpbmdUZXh0Ij09Zj8odGhpcy5pc0xvYWRpbmc9ITAsZC5hZGRDbGFzcygiZGlzYWJsZWQiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIikpOnRoaXMuaXNMb2FkaW5nJiYodGhpcy5pc0xvYWRpbmc9ITEsZC5yZW1vdmVDbGFzcygiZGlzYWJsZWQiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpKX0sdGhpcyksMCl9O3EucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciBmPSEwLGQ9dGhpcy4kZWxlbWVudC5jbG9zZXN0KCdbZGF0YS10b2dnbGVceDNkImJ1dHRvbnMiXScpO2lmKGQubGVuZ3RoKXt2YXIgYz10aGlzLiRlbGVtZW50LmZpbmQoImlucHV0Iik7InJhZGlvIj09Yy5wcm9wKCJ0eXBlIik/KGMucHJvcCgiY2hlY2tlZCIpJiYoZj0hMSksZC5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoImFjdGl2ZSIpKToiY2hlY2tib3giPT1jLnByb3AoInR5cGUiKSYmCihjLnByb3AoImNoZWNrZWQiKSE9PXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpJiYoZj0hMSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygiYWN0aXZlIikpO2MucHJvcCgiY2hlY2tlZCIsdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiYWN0aXZlIikpO2YmJmMudHJpZ2dlcigiY2hhbmdlIil9ZWxzZSB0aGlzLiRlbGVtZW50LmF0dHIoImFyaWEtcHJlc3NlZCIsIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKCJhY3RpdmUiKX07dmFyIHQ9YS5mbi5idXR0b247YS5mbi5idXR0b249RTthLmZuLmJ1dHRvbi5Db25zdHJ1Y3Rvcj1xO2EuZm4uYnV0dG9uLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXthLmZuLmJ1dHRvbj10O3JldHVybiB0aGlzfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMuYnV0dG9uLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXlx4M2QiYnV0dG9uIl0nLGZ1bmN0aW9uKGYpe3ZhciBkPWEoZi50YXJnZXQpOwpkLmhhc0NsYXNzKCJidG4iKXx8KGQ9ZC5jbG9zZXN0KCIuYnRuIikpO0UuY2FsbChkLCJ0b2dnbGUiKTthKGYudGFyZ2V0KS5pcygnaW5wdXRbdHlwZVx4M2QicmFkaW8iXScpfHxhKGYudGFyZ2V0KS5pcygnaW5wdXRbdHlwZVx4M2QiY2hlY2tib3giXScpfHxmLnByZXZlbnREZWZhdWx0KCl9KS5vbigiZm9jdXMuYnMuYnV0dG9uLmRhdGEtYXBpIGJsdXIuYnMuYnV0dG9uLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXlx4M2QiYnV0dG9uIl0nLGZ1bmN0aW9uKGYpe2EoZi50YXJnZXQpLmNsb3Nlc3QoIi5idG4iKS50b2dnbGVDbGFzcygiZm9jdXMiLC9eZm9jdXMoaW4pPyQvLnRlc3QoZi50eXBlKSl9KX0pKGpRdWVyeSk7CihmdW5jdGlvbihhKXtmdW5jdGlvbiBFKGQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGI9Yy5kYXRhKCJicy5jYXJvdXNlbCIpLGc9YS5leHRlbmQoe30scS5ERUZBVUxUUyxjLmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIGQmJmQpLGU9InN0cmluZyI9PXR5cGVvZiBkP2Q6Zy5zbGlkZTtifHxjLmRhdGEoImJzLmNhcm91c2VsIixiPW5ldyBxKHRoaXMsZykpO2lmKCJudW1iZXIiPT10eXBlb2YgZCliLnRvKGQpO2Vsc2UgaWYoZSliW2VdKCk7ZWxzZSBnLmludGVydmFsJiZiLnBhdXNlKCkuY3ljbGUoKX0pfXZhciBxPWZ1bmN0aW9uKGQsYyl7dGhpcy4kZWxlbWVudD1hKGQpO3RoaXMuJGluZGljYXRvcnM9dGhpcy4kZWxlbWVudC5maW5kKCIuY2Fyb3VzZWwtaW5kaWNhdG9ycyIpO3RoaXMub3B0aW9ucz1jO3RoaXMuJGl0ZW1zPXRoaXMuJGFjdGl2ZT10aGlzLmludGVydmFsPXRoaXMuc2xpZGluZz10aGlzLnBhdXNlZD1udWxsO3RoaXMub3B0aW9ucy5rZXlib2FyZCYmCnRoaXMuJGVsZW1lbnQub24oImtleWRvd24uYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5rZXlkb3duLHRoaXMpKTsiaG92ZXIiIT10aGlzLm9wdGlvbnMucGF1c2V8fCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHx0aGlzLiRlbGVtZW50Lm9uKCJtb3VzZWVudGVyLmJzLmNhcm91c2VsIixhLnByb3h5KHRoaXMucGF1c2UsdGhpcykpLm9uKCJtb3VzZWxlYXZlLmJzLmNhcm91c2VsIixhLnByb3h5KHRoaXMuY3ljbGUsdGhpcykpfTtxLlZFUlNJT049IjMuMy41IjtxLlRSQU5TSVRJT05fRFVSQVRJT049NjAwO3EuREVGQVVMVFM9e2ludGVydmFsOjVFMyxwYXVzZToiaG92ZXIiLHdyYXA6ITAsa2V5Ym9hcmQ6ITB9O3EucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24oZCl7aWYoIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZC50YXJnZXQudGFnTmFtZSkpe3N3aXRjaChkLndoaWNoKXtjYXNlIDM3OnRoaXMucHJldigpO2JyZWFrO2Nhc2UgMzk6dGhpcy5uZXh0KCk7CmJyZWFrO2RlZmF1bHQ6cmV0dXJufWQucHJldmVudERlZmF1bHQoKX19O3EucHJvdG90eXBlLmN5Y2xlPWZ1bmN0aW9uKGQpe2R8fCh0aGlzLnBhdXNlZD0hMSk7dGhpcy5pbnRlcnZhbCYmY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTt0aGlzLm9wdGlvbnMuaW50ZXJ2YWwmJiF0aGlzLnBhdXNlZCYmKHRoaXMuaW50ZXJ2YWw9c2V0SW50ZXJ2YWwoYS5wcm94eSh0aGlzLm5leHQsdGhpcyksdGhpcy5vcHRpb25zLmludGVydmFsKSk7cmV0dXJuIHRoaXN9O3EucHJvdG90eXBlLmdldEl0ZW1JbmRleD1mdW5jdGlvbihkKXt0aGlzLiRpdGVtcz1kLnBhcmVudCgpLmNoaWxkcmVuKCIuaXRlbSIpO3JldHVybiB0aGlzLiRpdGVtcy5pbmRleChkfHx0aGlzLiRhY3RpdmUpfTtxLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uPWZ1bmN0aW9uKGQsYyl7dmFyIGI9dGhpcy5nZXRJdGVtSW5kZXgoYyk7cmV0dXJuKCJwcmV2Ij09ZCYmMD09PWJ8fCJuZXh0Ij09ZCYmYj09dGhpcy4kaXRlbXMubGVuZ3RoLQoxKSYmIXRoaXMub3B0aW9ucy53cmFwP2M6dGhpcy4kaXRlbXMuZXEoKGIrKCJwcmV2Ij09ZD8tMToxKSkldGhpcy4kaXRlbXMubGVuZ3RoKX07cS5wcm90b3R5cGUudG89ZnVuY3Rpb24oZCl7dmFyIGM9dGhpcyxiPXRoaXMuZ2V0SXRlbUluZGV4KHRoaXMuJGFjdGl2ZT10aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtLmFjdGl2ZSIpKTtpZighKGQ+dGhpcy4kaXRlbXMubGVuZ3RoLTF8fDA+ZCkpcmV0dXJuIHRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZSgic2xpZC5icy5jYXJvdXNlbCIsZnVuY3Rpb24oKXtjLnRvKGQpfSk6Yj09ZD90aGlzLnBhdXNlKCkuY3ljbGUoKTp0aGlzLnNsaWRlKGQ+Yj8ibmV4dCI6InByZXYiLHRoaXMuJGl0ZW1zLmVxKGQpKX07cS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oZCl7ZHx8KHRoaXMucGF1c2VkPSEwKTt0aGlzLiRlbGVtZW50LmZpbmQoIi5uZXh0LCAucHJldiIpLmxlbmd0aCYmYS5zdXBwb3J0LnRyYW5zaXRpb24mJih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSwKdGhpcy5jeWNsZSghMCkpO3RoaXMuaW50ZXJ2YWw9Y2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtyZXR1cm4gdGhpc307cS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe2lmKCF0aGlzLnNsaWRpbmcpcmV0dXJuIHRoaXMuc2xpZGUoIm5leHQiKX07cS5wcm90b3R5cGUucHJldj1mdW5jdGlvbigpe2lmKCF0aGlzLnNsaWRpbmcpcmV0dXJuIHRoaXMuc2xpZGUoInByZXYiKX07cS5wcm90b3R5cGUuc2xpZGU9ZnVuY3Rpb24oZCxjKXt2YXIgYj10aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtLmFjdGl2ZSIpLGc9Y3x8dGhpcy5nZXRJdGVtRm9yRGlyZWN0aW9uKGQsYiksZT10aGlzLmludGVydmFsLGs9Im5leHQiPT1kPyJsZWZ0IjoicmlnaHQiLG09dGhpcztpZihnLmhhc0NsYXNzKCJhY3RpdmUiKSlyZXR1cm4gdGhpcy5zbGlkaW5nPSExO3ZhciBwPWdbMF0scz1hLkV2ZW50KCJzbGlkZS5icy5jYXJvdXNlbCIse3JlbGF0ZWRUYXJnZXQ6cCxkaXJlY3Rpb246a30pO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihzKTsKaWYoIXMuaXNEZWZhdWx0UHJldmVudGVkKCkpe3RoaXMuc2xpZGluZz0hMDtlJiZ0aGlzLnBhdXNlKCk7dGhpcy4kaW5kaWNhdG9ycy5sZW5ndGgmJih0aGlzLiRpbmRpY2F0b3JzLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksKHM9YSh0aGlzLiRpbmRpY2F0b3JzLmNoaWxkcmVuKClbdGhpcy5nZXRJdGVtSW5kZXgoZyldKSkmJnMuYWRkQ2xhc3MoImFjdGl2ZSIpKTt2YXIgbD1hLkV2ZW50KCJzbGlkLmJzLmNhcm91c2VsIix7cmVsYXRlZFRhcmdldDpwLGRpcmVjdGlvbjprfSk7YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoInNsaWRlIik/KGcuYWRkQ2xhc3MoZCksZ1swXS5vZmZzZXRXaWR0aC50b0ZpeGVkKCksYi5hZGRDbGFzcyhrKSxnLmFkZENsYXNzKGspLGIub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7Zy5yZW1vdmVDbGFzcyhbZCxrXS5qb2luKCIgIikpLmFkZENsYXNzKCJhY3RpdmUiKTtiLnJlbW92ZUNsYXNzKFsiYWN0aXZlIiwKa10uam9pbigiICIpKTttLnNsaWRpbmc9ITE7c2V0VGltZW91dChmdW5jdGlvbigpe20uJGVsZW1lbnQudHJpZ2dlcihsKX0sMCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChxLlRSQU5TSVRJT05fRFVSQVRJT04pKTooYi5yZW1vdmVDbGFzcygiYWN0aXZlIiksZy5hZGRDbGFzcygiYWN0aXZlIiksdGhpcy5zbGlkaW5nPSExLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihsKSk7ZSYmdGhpcy5jeWNsZSgpO3JldHVybiB0aGlzfX07dmFyIHQ9YS5mbi5jYXJvdXNlbDthLmZuLmNhcm91c2VsPUU7YS5mbi5jYXJvdXNlbC5Db25zdHJ1Y3Rvcj1xO2EuZm4uY2Fyb3VzZWwubm9Db25mbGljdD1mdW5jdGlvbigpe2EuZm4uY2Fyb3VzZWw9dDtyZXR1cm4gdGhpc307dmFyIGY9ZnVuY3Rpb24oZCl7dmFyIGMsYj1hKHRoaXMpLGc9YShiLmF0dHIoImRhdGEtdGFyZ2V0Iil8fChjPWIuYXR0cigiaHJlZiIpKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKTtpZihnLmhhc0NsYXNzKCJjYXJvdXNlbCIpKXtjPQphLmV4dGVuZCh7fSxnLmRhdGEoKSxiLmRhdGEoKSk7aWYoYj1iLmF0dHIoImRhdGEtc2xpZGUtdG8iKSljLmludGVydmFsPSExO0UuY2FsbChnLGMpO2ImJmcuZGF0YSgiYnMuY2Fyb3VzZWwiKS50byhiKTtkLnByZXZlbnREZWZhdWx0KCl9fTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMuY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0iLGYpLm9uKCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRhLXNsaWRlLXRvXSIsZik7YSh3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpe2EoJ1tkYXRhLXJpZGVceDNkImNhcm91c2VsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKTtFLmNhbGwoZCxkLmRhdGEoKSl9KX0pfSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIEUoZCl7dmFyIGM7ZD1kLmF0dHIoImRhdGEtdGFyZ2V0Iil8fChjPWQuYXR0cigiaHJlZiIpKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpO3JldHVybiBhKGQpfWZ1bmN0aW9uIHEoZCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksYj1jLmRhdGEoImJzLmNvbGxhcHNlIiksZz1hLmV4dGVuZCh7fSx0LkRFRkFVTFRTLGMuZGF0YSgpLCJvYmplY3QiPT10eXBlb2YgZCYmZCk7IWImJmcudG9nZ2xlJiYvc2hvd3xoaWRlLy50ZXN0KGQpJiYoZy50b2dnbGU9ITEpO2J8fGMuZGF0YSgiYnMuY29sbGFwc2UiLGI9bmV3IHQodGhpcyxnKSk7aWYoInN0cmluZyI9PXR5cGVvZiBkKWJbZF0oKX0pfXZhciB0PWZ1bmN0aW9uKGQsYyl7dGhpcy4kZWxlbWVudD1hKGQpO3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSx0LkRFRkFVTFRTLGMpO3RoaXMuJHRyaWdnZXI9YSgnW2RhdGEtdG9nZ2xlXHgzZCJjb2xsYXBzZSJdW2hyZWZceDNkIiMnKwpkLmlkKyciXSxbZGF0YS10b2dnbGVceDNkImNvbGxhcHNlIl1bZGF0YS10YXJnZXRceDNkIiMnK2QuaWQrJyJdJyk7dGhpcy50cmFuc2l0aW9uaW5nPW51bGw7dGhpcy5vcHRpb25zLnBhcmVudD90aGlzLiRwYXJlbnQ9dGhpcy5nZXRQYXJlbnQoKTp0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLiRlbGVtZW50LHRoaXMuJHRyaWdnZXIpO3RoaXMub3B0aW9ucy50b2dnbGUmJnRoaXMudG9nZ2xlKCl9O3QuVkVSU0lPTj0iMy4zLjUiO3QuVFJBTlNJVElPTl9EVVJBVElPTj0zNTA7dC5ERUZBVUxUUz17dG9nZ2xlOiEwfTt0LnByb3RvdHlwZS5kaW1lbnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZWxlbWVudC5oYXNDbGFzcygid2lkdGgiKT8id2lkdGgiOiJoZWlnaHQifTt0LnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7aWYoIXRoaXMudHJhbnNpdGlvbmluZyYmIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpe3ZhciBkLGM9dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuY2hpbGRyZW4oIi5wYW5lbCIpLmNoaWxkcmVuKCIuaW4sIC5jb2xsYXBzaW5nIik7CmlmKGMmJmMubGVuZ3RoJiYoZD1jLmRhdGEoImJzLmNvbGxhcHNlIikpJiZkLnRyYW5zaXRpb25pbmcpcmV0dXJuO3ZhciBiPWEuRXZlbnQoInNob3cuYnMuY29sbGFwc2UiKTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoYik7aWYoIWIuaXNEZWZhdWx0UHJldmVudGVkKCkpe2MmJmMubGVuZ3RoJiYocS5jYWxsKGMsImhpZGUiKSxkfHxjLmRhdGEoImJzLmNvbGxhcHNlIixudWxsKSk7dmFyIGc9dGhpcy5kaW1lbnNpb24oKTt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJjb2xsYXBzZSIpLmFkZENsYXNzKCJjb2xsYXBzaW5nIilbZ10oMCkuYXR0cigiYXJpYS1leHBhbmRlZCIsITApO3RoaXMuJHRyaWdnZXIucmVtb3ZlQ2xhc3MoImNvbGxhcHNlZCIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEwKTt0aGlzLnRyYW5zaXRpb25pbmc9MTtkPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLmFkZENsYXNzKCJjb2xsYXBzZSBpbiIpW2ddKCIiKTt0aGlzLnRyYW5zaXRpb25pbmc9CjA7dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJzaG93bi5icy5jb2xsYXBzZSIpfTtpZighYS5zdXBwb3J0LnRyYW5zaXRpb24pcmV0dXJuIGQuY2FsbCh0aGlzKTtjPWEuY2FtZWxDYXNlKFsic2Nyb2xsIixnXS5qb2luKCItIikpO3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoZCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodC5UUkFOU0lUSU9OX0RVUkFUSU9OKVtnXSh0aGlzLiRlbGVtZW50WzBdW2NdKX19fTt0LnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMudHJhbnNpdGlvbmluZyYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKSl7dmFyIGQ9YS5FdmVudCgiaGlkZS5icy5jb2xsYXBzZSIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihkKTtpZighZC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7ZD10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnRbZF0odGhpcy4kZWxlbWVudFtkXSgpKTt0aGlzLiRlbGVtZW50LmFkZENsYXNzKCJjb2xsYXBzaW5nIikucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIGluIikuYXR0cigiYXJpYS1leHBhbmRlZCIsCiExKTt0aGlzLiR0cmlnZ2VyLmFkZENsYXNzKCJjb2xsYXBzZWQiKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMSk7dGhpcy50cmFuc2l0aW9uaW5nPTE7dmFyIGM9ZnVuY3Rpb24oKXt0aGlzLnRyYW5zaXRpb25pbmc9MDt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJjb2xsYXBzaW5nIikuYWRkQ2xhc3MoImNvbGxhcHNlIikudHJpZ2dlcigiaGlkZGVuLmJzLmNvbGxhcHNlIil9O2lmKCFhLnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gYy5jYWxsKHRoaXMpO3RoaXMuJGVsZW1lbnRbZF0oMCkub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoYyx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodC5UUkFOU0lUSU9OX0RVUkFUSU9OKX19fTt0LnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIik/ImhpZGUiOiJzaG93Il0oKX07dC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5vcHRpb25zLnBhcmVudCkuZmluZCgnW2RhdGEtdG9nZ2xlXHgzZCJjb2xsYXBzZSJdW2RhdGEtcGFyZW50XHgzZCInKwp0aGlzLm9wdGlvbnMucGFyZW50KyciXScpLmVhY2goYS5wcm94eShmdW5jdGlvbihkLGMpe3ZhciBiPWEoYyk7dGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoRShiKSxiKX0sdGhpcykpLmVuZCgpfTt0LnByb3RvdHlwZS5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3M9ZnVuY3Rpb24oZCxjKXt2YXIgYj1kLmhhc0NsYXNzKCJpbiIpO2QuYXR0cigiYXJpYS1leHBhbmRlZCIsYik7Yy50b2dnbGVDbGFzcygiY29sbGFwc2VkIiwhYikuYXR0cigiYXJpYS1leHBhbmRlZCIsYil9O3ZhciBmPWEuZm4uY29sbGFwc2U7YS5mbi5jb2xsYXBzZT1xO2EuZm4uY29sbGFwc2UuQ29uc3RydWN0b3I9dDthLmZuLmNvbGxhcHNlLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXthLmZuLmNvbGxhcHNlPWY7cmV0dXJuIHRoaXN9O2EoZG9jdW1lbnQpLm9uKCJjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZVx4M2QiY29sbGFwc2UiXScsZnVuY3Rpb24oZCl7dmFyIGM9YSh0aGlzKTsKYy5hdHRyKCJkYXRhLXRhcmdldCIpfHxkLnByZXZlbnREZWZhdWx0KCk7ZD1FKGMpO2M9ZC5kYXRhKCJicy5jb2xsYXBzZSIpPyJ0b2dnbGUiOmMuZGF0YSgpO3EuY2FsbChkLGMpfSl9KShqUXVlcnkpOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gRShiKXt2YXIgZz1iLmF0dHIoImRhdGEtdGFyZ2V0Iik7Z3x8KGc9KGc9Yi5hdHRyKCJocmVmIikpJiYvI1tBLVphLXpdLy50ZXN0KGcpJiZnLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpO3JldHVybihnPWcmJmEoZykpJiZnLmxlbmd0aD9nOmIucGFyZW50KCl9ZnVuY3Rpb24gcShiKXtiJiYzPT09Yi53aGljaHx8KGEodCkucmVtb3ZlKCksYShmKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9YSh0aGlzKSxlPUUoZyksaz17cmVsYXRlZFRhcmdldDp0aGlzfTshZS5oYXNDbGFzcygib3BlbiIpfHxiJiYiY2xpY2siPT1iLnR5cGUmJi9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoYi50YXJnZXQudGFnTmFtZSkmJmEuY29udGFpbnMoZVswXSxiLnRhcmdldCl8fChlLnRyaWdnZXIoYj1hLkV2ZW50KCJoaWRlLmJzLmRyb3Bkb3duIixrKSksYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGcuYXR0cigiYXJpYS1leHBhbmRlZCIsImZhbHNlIiksZS5yZW1vdmVDbGFzcygib3BlbiIpLnRyaWdnZXIoImhpZGRlbi5icy5kcm9wZG93biIsCmspKSl9KSl9dmFyIHQ9Ii5kcm9wZG93bi1iYWNrZHJvcCIsZj0nW2RhdGEtdG9nZ2xlXHgzZCJkcm9wZG93biJdJyxkPWZ1bmN0aW9uKGIpe2EoYikub24oImNsaWNrLmJzLmRyb3Bkb3duIix0aGlzLnRvZ2dsZSl9O2QuVkVSU0lPTj0iMy4zLjUiO2QucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXt2YXIgZz1hKHRoaXMpO2lmKCFnLmlzKCIuZGlzYWJsZWQsIDpkaXNhYmxlZCIpKXt2YXIgZT1FKGcpO2I9ZS5oYXNDbGFzcygib3BlbiIpO3EoKTtpZighYil7aWYoIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJiFlLmNsb3Nlc3QoIi5uYXZiYXItbmF2IikubGVuZ3RoKWEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmFkZENsYXNzKCJkcm9wZG93bi1iYWNrZHJvcCIpLmluc2VydEFmdGVyKGEodGhpcykpLm9uKCJjbGljayIscSk7dmFyIGs9e3JlbGF0ZWRUYXJnZXQ6dGhpc307ZS50cmlnZ2VyKGI9YS5FdmVudCgic2hvdy5icy5kcm9wZG93biIsCmspKTtpZihiLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtnLnRyaWdnZXIoImZvY3VzIikuYXR0cigiYXJpYS1leHBhbmRlZCIsInRydWUiKTtlLnRvZ2dsZUNsYXNzKCJvcGVuIikudHJpZ2dlcigic2hvd24uYnMuZHJvcGRvd24iLGspfXJldHVybiExfX07ZC5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihiKXtpZigvKDM4fDQwfDI3fDMyKS8udGVzdChiLndoaWNoKSYmIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoYi50YXJnZXQudGFnTmFtZSkpe3ZhciBnPWEodGhpcyk7Yi5wcmV2ZW50RGVmYXVsdCgpO2Iuc3RvcFByb3BhZ2F0aW9uKCk7aWYoIWcuaXMoIi5kaXNhYmxlZCwgOmRpc2FibGVkIikpe3ZhciBlPUUoZyksaz1lLmhhc0NsYXNzKCJvcGVuIik7aWYoIWsmJjI3IT1iLndoaWNofHxrJiYyNz09Yi53aGljaClyZXR1cm4gMjc9PWIud2hpY2gmJmUuZmluZChmKS50cmlnZ2VyKCJmb2N1cyIpLGcudHJpZ2dlcigiY2xpY2siKTtnPWUuZmluZCgiLmRyb3Bkb3duLW1lbnUgbGk6bm90KC5kaXNhYmxlZCk6dmlzaWJsZSBhIik7CmcubGVuZ3RoJiYoZT1nLmluZGV4KGIudGFyZ2V0KSwzOD09Yi53aGljaCYmMDxlJiZlLS0sNDA9PWIud2hpY2gmJmU8Zy5sZW5ndGgtMSYmZSsrLH5lfHwoZT0wKSxnLmVxKGUpLnRyaWdnZXIoImZvY3VzIikpfX19O3ZhciBjPWEuZm4uZHJvcGRvd247YS5mbi5kcm9wZG93bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9YSh0aGlzKSxlPWcuZGF0YSgiYnMuZHJvcGRvd24iKTtlfHxnLmRhdGEoImJzLmRyb3Bkb3duIixlPW5ldyBkKHRoaXMpKTsic3RyaW5nIj09dHlwZW9mIGImJmVbYl0uY2FsbChnKX0pfTthLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPWQ7YS5mbi5kcm9wZG93bi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7YS5mbi5kcm9wZG93bj1jO3JldHVybiB0aGlzfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGkiLHEpLm9uKCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93biBmb3JtIixmdW5jdGlvbihiKXtiLnN0b3BQcm9wYWdhdGlvbigpfSkub24oImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpIiwKZixkLnByb3RvdHlwZS50b2dnbGUpLm9uKCJrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpIixmLGQucHJvdG90eXBlLmtleWRvd24pLm9uKCJrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3duLW1lbnUiLGQucHJvdG90eXBlLmtleWRvd24pfSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIEUoZixkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxiPWMuZGF0YSgiYnMubW9kYWwiKSxnPWEuZXh0ZW5kKHt9LHEuREVGQVVMVFMsYy5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBmJiZmKTtifHxjLmRhdGEoImJzLm1vZGFsIixiPW5ldyBxKHRoaXMsZykpO2lmKCJzdHJpbmciPT10eXBlb2YgZiliW2ZdKGQpO2Vsc2UgZy5zaG93JiZiLnNob3coZCl9KX12YXIgcT1mdW5jdGlvbihmLGQpe3RoaXMub3B0aW9ucz1kO3RoaXMuJGJvZHk9YShkb2N1bWVudC5ib2R5KTt0aGlzLiRlbGVtZW50PWEoZik7dGhpcy4kZGlhbG9nPXRoaXMuJGVsZW1lbnQuZmluZCgiLm1vZGFsLWRpYWxvZyIpO3RoaXMub3JpZ2luYWxCb2R5UGFkPXRoaXMuaXNTaG93bj10aGlzLiRiYWNrZHJvcD1udWxsO3RoaXMuc2Nyb2xsYmFyV2lkdGg9MDt0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITE7dGhpcy5vcHRpb25zLnJlbW90ZSYmdGhpcy4kZWxlbWVudC5maW5kKCIubW9kYWwtY29udGVudCIpLmxvYWQodGhpcy5vcHRpb25zLnJlbW90ZSwKYS5wcm94eShmdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcigibG9hZGVkLmJzLm1vZGFsIil9LHRoaXMpKX07cS5WRVJTSU9OPSIzLjMuNSI7cS5UUkFOU0lUSU9OX0RVUkFUSU9OPTMwMDtxLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT049MTUwO3EuREVGQVVMVFM9e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwLHNob3c6ITB9O3EucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5pc1Nob3duP3RoaXMuaGlkZSgpOnRoaXMuc2hvdyhmKX07cS5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbihmKXt2YXIgZD10aGlzLGM9YS5FdmVudCgic2hvdy5icy5tb2RhbCIse3JlbGF0ZWRUYXJnZXQ6Zn0pO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihjKTt0aGlzLmlzU2hvd258fGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fCh0aGlzLmlzU2hvd249ITAsdGhpcy5jaGVja1Njcm9sbGJhcigpLHRoaXMuc2V0U2Nyb2xsYmFyKCksdGhpcy4kYm9keS5hZGRDbGFzcygibW9kYWwtb3BlbiIpLAp0aGlzLmVzY2FwZSgpLHRoaXMucmVzaXplKCksdGhpcy4kZWxlbWVudC5vbigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIsJ1tkYXRhLWRpc21pc3NceDNkIm1vZGFsIl0nLGEucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLiRkaWFsb2cub24oIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuJGVsZW1lbnQub25lKCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwiLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmlzKGQuJGVsZW1lbnQpJiYoZC5pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBiPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZkLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik7ZC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fGQuJGVsZW1lbnQuYXBwZW5kVG8oZC4kYm9keSk7ZC4kZWxlbWVudC5zaG93KCkuc2Nyb2xsVG9wKDApO2QuYWRqdXN0RGlhbG9nKCk7YiYmZC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aC50b0ZpeGVkKCk7CmQuJGVsZW1lbnQuYWRkQ2xhc3MoImluIik7ZC5lbmZvcmNlRm9jdXMoKTt2YXIgZz1hLkV2ZW50KCJzaG93bi5icy5tb2RhbCIse3JlbGF0ZWRUYXJnZXQ6Zn0pO2I/ZC4kZGlhbG9nLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmdW5jdGlvbigpe2QuJGVsZW1lbnQudHJpZ2dlcigiZm9jdXMiKS50cmlnZ2VyKGcpfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQocS5UUkFOU0lUSU9OX0RVUkFUSU9OKTpkLiRlbGVtZW50LnRyaWdnZXIoImZvY3VzIikudHJpZ2dlcihnKX0pKX07cS5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihmKXtmJiZmLnByZXZlbnREZWZhdWx0KCk7Zj1hLkV2ZW50KCJoaWRlLmJzLm1vZGFsIik7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGYpO3RoaXMuaXNTaG93biYmIWYuaXNEZWZhdWx0UHJldmVudGVkKCkmJih0aGlzLmlzU2hvd249ITEsdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLGEoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5icy5tb2RhbCIpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImluIikub2ZmKCJjbGljay5kaXNtaXNzLmJzLm1vZGFsIikub2ZmKCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwiKSwKdGhpcy4kZGlhbG9nLm9mZigibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkodGhpcy5oaWRlTW9kYWwsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHEuVFJBTlNJVElPTl9EVVJBVElPTik6dGhpcy5oaWRlTW9kYWwoKSl9O3EucHJvdG90eXBlLmVuZm9yY2VGb2N1cz1mdW5jdGlvbigpe2EoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5icy5tb2RhbCIpLm9uKCJmb2N1c2luLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGYpe3RoaXMuJGVsZW1lbnRbMF09PT1mLnRhcmdldHx8dGhpcy4kZWxlbWVudC5oYXMoZi50YXJnZXQpLmxlbmd0aHx8dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpfSx0aGlzKSl9O3EucHJvdG90eXBlLmVzY2FwZT1mdW5jdGlvbigpe2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmtleWJvYXJkKXRoaXMuJGVsZW1lbnQub24oImtleWRvd24uZGlzbWlzcy5icy5tb2RhbCIsCmEucHJveHkoZnVuY3Rpb24oZil7Mjc9PWYud2hpY2gmJnRoaXMuaGlkZSgpfSx0aGlzKSk7ZWxzZSB0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKCJrZXlkb3duLmRpc21pc3MuYnMubW9kYWwiKX07cS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1Nob3duKWEod2luZG93KS5vbigicmVzaXplLmJzLm1vZGFsIixhLnByb3h5KHRoaXMuaGFuZGxlVXBkYXRlLHRoaXMpKTtlbHNlIGEod2luZG93KS5vZmYoInJlc2l6ZS5icy5tb2RhbCIpfTtxLnByb3RvdHlwZS5oaWRlTW9kYWw9ZnVuY3Rpb24oKXt2YXIgZj10aGlzO3RoaXMuJGVsZW1lbnQuaGlkZSgpO3RoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXtmLiRib2R5LnJlbW92ZUNsYXNzKCJtb2RhbC1vcGVuIik7Zi5yZXNldEFkanVzdG1lbnRzKCk7Zi5yZXNldFNjcm9sbGJhcigpO2YuJGVsZW1lbnQudHJpZ2dlcigiaGlkZGVuLmJzLm1vZGFsIil9KX07cS5wcm90b3R5cGUucmVtb3ZlQmFja2Ryb3A9ZnVuY3Rpb24oKXt0aGlzLiRiYWNrZHJvcCYmCnRoaXMuJGJhY2tkcm9wLnJlbW92ZSgpO3RoaXMuJGJhY2tkcm9wPW51bGx9O3EucHJvdG90eXBlLmJhY2tkcm9wPWZ1bmN0aW9uKGYpe3ZhciBkPXRoaXMsYz10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2YXIgYj1hLnN1cHBvcnQudHJhbnNpdGlvbiYmYzt0aGlzLiRiYWNrZHJvcD1hKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5hZGRDbGFzcygibW9kYWwtYmFja2Ryb3AgIitjKS5hcHBlbmRUbyh0aGlzLiRib2R5KTt0aGlzLiRlbGVtZW50Lm9uKCJjbGljay5kaXNtaXNzLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGcpe3RoaXMuaWdub3JlQmFja2Ryb3BDbGljaz90aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITE6Zy50YXJnZXQ9PT1nLmN1cnJlbnRUYXJnZXQmJigic3RhdGljIj09dGhpcy5vcHRpb25zLmJhY2tkcm9wP3RoaXMuJGVsZW1lbnRbMF0uZm9jdXMoKToKdGhpcy5oaWRlKCkpfSx0aGlzKSk7YiYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgudG9GaXhlZCgpO3RoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCJpbiIpO2YmJihiP3RoaXMuJGJhY2tkcm9wLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChxLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmYoKSl9ZWxzZSF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wPyh0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygiaW4iKSxjPWZ1bmN0aW9uKCl7ZC5yZW1vdmVCYWNrZHJvcCgpO2YmJmYoKX0sYS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLiRiYWNrZHJvcC5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYykuZW11bGF0ZVRyYW5zaXRpb25FbmQocS5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKTpjKCkpOmYmJmYoKX07cS5wcm90b3R5cGUuaGFuZGxlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5hZGp1c3REaWFsb2coKX07CnEucHJvdG90eXBlLmFkanVzdERpYWxvZz1mdW5jdGlvbigpe3ZhciBmPXRoaXMuJGVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OiF0aGlzLmJvZHlJc092ZXJmbG93aW5nJiZmP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiIscGFkZGluZ1JpZ2h0OnRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJiFmP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiJ9KX07cS5wcm90b3R5cGUucmVzZXRBZGp1c3RtZW50cz1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDoiIixwYWRkaW5nUmlnaHQ6IiJ9KX07cS5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgZj13aW5kb3cuaW5uZXJXaWR0aDtmfHwoZj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj1mLnJpZ2h0LU1hdGguYWJzKGYubGVmdCkpO3RoaXMuYm9keUlzT3ZlcmZsb3dpbmc9CmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg8Zjt0aGlzLnNjcm9sbGJhcldpZHRoPXRoaXMubWVhc3VyZVNjcm9sbGJhcigpfTtxLnByb3RvdHlwZS5zZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgZj1wYXJzZUludCh0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIpfHwwLDEwKTt0aGlzLm9yaWdpbmFsQm9keVBhZD1kb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodHx8IiI7dGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmdGhpcy4kYm9keS5jc3MoInBhZGRpbmctcmlnaHQiLGYrdGhpcy5zY3JvbGxiYXJXaWR0aCl9O3EucHJvdG90eXBlLnJlc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dGhpcy4kYm9keS5jc3MoInBhZGRpbmctcmlnaHQiLHRoaXMub3JpZ2luYWxCb2R5UGFkKX07cS5wcm90b3R5cGUubWVhc3VyZVNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2YuY2xhc3NOYW1lPSJtb2RhbC1zY3JvbGxiYXItbWVhc3VyZSI7CnRoaXMuJGJvZHkuYXBwZW5kKGYpO3ZhciBkPWYub2Zmc2V0V2lkdGgtZi5jbGllbnRXaWR0aDt0aGlzLiRib2R5WzBdLnJlbW92ZUNoaWxkKGYpO3JldHVybiBkfTt2YXIgdD1hLmZuLm1vZGFsO2EuZm4ubW9kYWw9RTthLmZuLm1vZGFsLkNvbnN0cnVjdG9yPXE7YS5mbi5tb2RhbC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7YS5mbi5tb2RhbD10O3JldHVybiB0aGlzfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMubW9kYWwuZGF0YS1hcGkiLCdbZGF0YS10b2dnbGVceDNkIm1vZGFsIl0nLGZ1bmN0aW9uKGYpe3ZhciBkPWEodGhpcyksYz1kLmF0dHIoImhyZWYiKSxiPWEoZC5hdHRyKCJkYXRhLXRhcmdldCIpfHxjJiZjLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikpLGM9Yi5kYXRhKCJicy5tb2RhbCIpPyJ0b2dnbGUiOmEuZXh0ZW5kKHtyZW1vdGU6IS8jLy50ZXN0KGMpJiZjfSxiLmRhdGEoKSxkLmRhdGEoKSk7ZC5pcygiYSIpJiZmLnByZXZlbnREZWZhdWx0KCk7Yi5vbmUoInNob3cuYnMubW9kYWwiLApmdW5jdGlvbihnKXtpZighZy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSliLm9uZSgiaGlkZGVuLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuaXMoIjp2aXNpYmxlIikmJmQudHJpZ2dlcigiZm9jdXMiKX0pfSk7RS5jYWxsKGIsYyx0aGlzKX0pfSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe3ZhciBFPWZ1bmN0aW9uKHQsZil7dGhpcy5pblN0YXRlPXRoaXMuJGVsZW1lbnQ9dGhpcy5ob3ZlclN0YXRlPXRoaXMudGltZW91dD10aGlzLmVuYWJsZWQ9dGhpcy5vcHRpb25zPXRoaXMudHlwZT1udWxsO3RoaXMuaW5pdCgidG9vbHRpcCIsdCxmKX07RS5WRVJTSU9OPSIzLjMuNSI7RS5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MDtFLkRFRkFVTFRTPXthbmltYXRpb246ITAscGxhY2VtZW50OiJ0b3AiLHNlbGVjdG9yOiExLHRlbXBsYXRlOidceDNjZGl2IGNsYXNzXHgzZCJ0b29sdGlwIiByb2xlXHgzZCJ0b29sdGlwIlx4M2VceDNjZGl2IGNsYXNzXHgzZCJ0b29sdGlwLWFycm93Ilx4M2VceDNjL2Rpdlx4M2VceDNjZGl2IGNsYXNzXHgzZCJ0b29sdGlwLWlubmVyIlx4M2VceDNjL2Rpdlx4M2VceDNjL2Rpdlx4M2UnLHRyaWdnZXI6ImhvdmVyIGZvY3VzIix0aXRsZToiIixkZWxheTowLGh0bWw6ITEsY29udGFpbmVyOiExLHZpZXdwb3J0OntzZWxlY3RvcjoiYm9keSIsCnBhZGRpbmc6MH19O0UucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24odCxmLGQpe3RoaXMuZW5hYmxlZD0hMDt0aGlzLnR5cGU9dDt0aGlzLiRlbGVtZW50PWEoZik7dGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhkKTt0aGlzLiR2aWV3cG9ydD10aGlzLm9wdGlvbnMudmlld3BvcnQmJmEoYS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCk/dGhpcy5vcHRpb25zLnZpZXdwb3J0LmNhbGwodGhpcyx0aGlzLiRlbGVtZW50KTp0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3J8fHRoaXMub3B0aW9ucy52aWV3cG9ydCk7dGhpcy5pblN0YXRlPXtjbGljazohMSxob3ZlcjohMSxmb2N1czohMX07aWYodGhpcy4kZWxlbWVudFswXWluc3RhbmNlb2YgZG9jdW1lbnQuY29uc3RydWN0b3ImJiF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpdGhyb3cgRXJyb3IoImBzZWxlY3RvcmAgb3B0aW9uIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gaW5pdGlhbGl6aW5nICIrdGhpcy50eXBlKyIgb24gdGhlIHdpbmRvdy5kb2N1bWVudCBvYmplY3QhIik7CnQ9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoIiAiKTtmb3IoZj10Lmxlbmd0aDtmLS07KWlmKGQ9dFtmXSwiY2xpY2siPT1kKXRoaXMuJGVsZW1lbnQub24oImNsaWNrLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixhLnByb3h5KHRoaXMudG9nZ2xlLHRoaXMpKTtlbHNlIGlmKCJtYW51YWwiIT1kKXt2YXIgYz0iaG92ZXIiPT1kPyJtb3VzZWxlYXZlIjoiZm9jdXNvdXQiO3RoaXMuJGVsZW1lbnQub24oKCJob3ZlciI9PWQ/Im1vdXNlZW50ZXIiOiJmb2N1c2luIikrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmVudGVyLHRoaXMpKTt0aGlzLiRlbGVtZW50Lm9uKGMrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX10aGlzLm9wdGlvbnMuc2VsZWN0b3I/dGhpcy5fb3B0aW9ucz1hLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMse3RyaWdnZXI6Im1hbnVhbCIsc2VsZWN0b3I6IiJ9KToKdGhpcy5maXhUaXRsZSgpfTtFLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBFLkRFRkFVTFRTfTtFLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKHQpe3Q9YS5leHRlbmQoe30sdGhpcy5nZXREZWZhdWx0cygpLHRoaXMuJGVsZW1lbnQuZGF0YSgpLHQpO3QuZGVsYXkmJiJudW1iZXIiPT10eXBlb2YgdC5kZWxheSYmKHQuZGVsYXk9e3Nob3c6dC5kZWxheSxoaWRlOnQuZGVsYXl9KTtyZXR1cm4gdH07RS5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e30sZj10aGlzLmdldERlZmF1bHRzKCk7dGhpcy5fb3B0aW9ucyYmYS5lYWNoKHRoaXMuX29wdGlvbnMsZnVuY3Rpb24oZCxjKXtmW2RdIT1jJiYodFtkXT1jKX0pO3JldHVybiB0fTtFLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbih0KXt2YXIgZj10IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj90OmEodC5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSk7CmZ8fChmPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHQuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKHQuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsZikpO3QgaW5zdGFuY2VvZiBhLkV2ZW50JiYoZi5pblN0YXRlWyJmb2N1c2luIj09dC50eXBlPyJmb2N1cyI6ImhvdmVyIl09ITApO2lmKGYudGlwKCkuaGFzQ2xhc3MoImluIil8fCJpbiI9PWYuaG92ZXJTdGF0ZSlmLmhvdmVyU3RhdGU9ImluIjtlbHNle2NsZWFyVGltZW91dChmLnRpbWVvdXQpO2YuaG92ZXJTdGF0ZT0iaW4iO2lmKCFmLm9wdGlvbnMuZGVsYXl8fCFmLm9wdGlvbnMuZGVsYXkuc2hvdylyZXR1cm4gZi5zaG93KCk7Zi50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsiaW4iPT1mLmhvdmVyU3RhdGUmJmYuc2hvdygpfSxmLm9wdGlvbnMuZGVsYXkuc2hvdyl9fTtFLnByb3RvdHlwZS5pc0luU3RhdGVUcnVlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuaW5TdGF0ZSlpZih0aGlzLmluU3RhdGVbdF0pcmV0dXJuITA7CnJldHVybiExfTtFLnByb3RvdHlwZS5sZWF2ZT1mdW5jdGlvbih0KXt2YXIgZj10IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj90OmEodC5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSk7Znx8KGY9bmV3IHRoaXMuY29uc3RydWN0b3IodC5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEodC5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSxmKSk7dCBpbnN0YW5jZW9mIGEuRXZlbnQmJihmLmluU3RhdGVbImZvY3Vzb3V0Ij09dC50eXBlPyJmb2N1cyI6ImhvdmVyIl09ITEpO2lmKCFmLmlzSW5TdGF0ZVRydWUoKSl7Y2xlYXJUaW1lb3V0KGYudGltZW91dCk7Zi5ob3ZlclN0YXRlPSJvdXQiO2lmKCFmLm9wdGlvbnMuZGVsYXl8fCFmLm9wdGlvbnMuZGVsYXkuaGlkZSlyZXR1cm4gZi5oaWRlKCk7Zi50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsib3V0Ij09Zi5ob3ZlclN0YXRlJiZmLmhpZGUoKX0sZi5vcHRpb25zLmRlbGF5LmhpZGUpfX07CkUucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgdD1hLkV2ZW50KCJzaG93LmJzLiIrdGhpcy50eXBlKTtpZih0aGlzLmhhc0NvbnRlbnQoKSYmdGhpcy5lbmFibGVkKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIodCk7dmFyIGY9YS5jb250YWlucyh0aGlzLiRlbGVtZW50WzBdLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuJGVsZW1lbnRbMF0pO2lmKCF0LmlzRGVmYXVsdFByZXZlbnRlZCgpJiZmKXt2YXIgZD10aGlzLHQ9dGhpcy50aXAoKSxmPXRoaXMuZ2V0VUlEKHRoaXMudHlwZSk7dGhpcy5zZXRDb250ZW50KCk7dC5hdHRyKCJpZCIsZik7dGhpcy4kZWxlbWVudC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixmKTt0aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiZ0LmFkZENsYXNzKCJmYWRlIik7dmFyIGY9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsdFswXSx0aGlzLiRlbGVtZW50WzBdKToKdGhpcy5vcHRpb25zLnBsYWNlbWVudCxjPS9ccz9hdXRvP1xzPy9pLGI9Yy50ZXN0KGYpO2ImJihmPWYucmVwbGFjZShjLCIiKXx8InRvcCIpO3QuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSkuYWRkQ2xhc3MoZikuZGF0YSgiYnMuIit0aGlzLnR5cGUsdGhpcyk7dGhpcy5vcHRpb25zLmNvbnRhaW5lcj90LmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOnQuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCk7dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJpbnNlcnRlZC5icy4iK3RoaXMudHlwZSk7dmFyIGM9dGhpcy5nZXRQb3NpdGlvbigpLGc9dFswXS5vZmZzZXRXaWR0aCxlPXRbMF0ub2Zmc2V0SGVpZ2h0O2lmKGIpe3ZhciBiPWYsaz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KSxmPSJib3R0b20iPT1mJiZjLmJvdHRvbStlPmsuYm90dG9tPyJ0b3AiOiJ0b3AiPT1mJiZjLnRvcC1lPGsudG9wPyJib3R0b20iOiJyaWdodCI9PWYmJgpjLnJpZ2h0K2c+ay53aWR0aD8ibGVmdCI6ImxlZnQiPT1mJiZjLmxlZnQtZzxrLmxlZnQ/InJpZ2h0IjpmO3QucmVtb3ZlQ2xhc3MoYikuYWRkQ2xhc3MoZil9Yz10aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQoZixjLGcsZSk7dGhpcy5hcHBseVBsYWNlbWVudChjLGYpO2Y9ZnVuY3Rpb24oKXt2YXIgbT1kLmhvdmVyU3RhdGU7ZC4kZWxlbWVudC50cmlnZ2VyKCJzaG93bi5icy4iK2QudHlwZSk7ZC5ob3ZlclN0YXRlPW51bGw7Im91dCI9PW0mJmQubGVhdmUoZCl9O2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiR0aXAuaGFzQ2xhc3MoImZhZGUiKT90Lm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChFLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKX19fTtFLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbih0LGYpe3ZhciBkPXRoaXMudGlwKCksYz1kWzBdLm9mZnNldFdpZHRoLGI9ZFswXS5vZmZzZXRIZWlnaHQsZz1wYXJzZUludChkLmNzcygibWFyZ2luLXRvcCIpLAoxMCksZT1wYXJzZUludChkLmNzcygibWFyZ2luLWxlZnQiKSwxMCk7aXNOYU4oZykmJihnPTApO2lzTmFOKGUpJiYoZT0wKTt0LnRvcCs9Zzt0LmxlZnQrPWU7YS5vZmZzZXQuc2V0T2Zmc2V0KGRbMF0sYS5leHRlbmQoe3VzaW5nOmZ1bmN0aW9uKHApe2QuY3NzKHt0b3A6TWF0aC5yb3VuZChwLnRvcCksbGVmdDpNYXRoLnJvdW5kKHAubGVmdCl9KX19LHQpLDApO2QuYWRkQ2xhc3MoImluIik7dmFyIGU9ZFswXS5vZmZzZXRXaWR0aCxrPWRbMF0ub2Zmc2V0SGVpZ2h0OyJ0b3AiPT1mJiZrIT1iJiYodC50b3A9dC50b3ArYi1rKTt2YXIgbT10aGlzLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YShmLHQsZSxrKTttLmxlZnQ/dC5sZWZ0Kz1tLmxlZnQ6dC50b3ArPW0udG9wO2M9KGc9L3RvcHxib3R0b20vLnRlc3QoZikpPzIqbS5sZWZ0LWMrZToyKm0udG9wLWIraztiPWc/Im9mZnNldFdpZHRoIjoib2Zmc2V0SGVpZ2h0IjtkLm9mZnNldCh0KTt0aGlzLnJlcGxhY2VBcnJvdyhjLGRbMF1bYl0sCmcpfTtFLnByb3RvdHlwZS5yZXBsYWNlQXJyb3c9ZnVuY3Rpb24odCxmLGQpe3RoaXMuYXJyb3coKS5jc3MoZD8ibGVmdCI6InRvcCIsNTAqKDEtdC9mKSsiJSIpLmNzcyhkPyJ0b3AiOiJsZWZ0IiwiIil9O0UucHJvdG90eXBlLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRpcCgpLGY9dGhpcy5nZXRUaXRsZSgpO3QuZmluZCgiLnRvb2x0aXAtaW5uZXIiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXShmKTt0LnJlbW92ZUNsYXNzKCJmYWRlIGluIHRvcCBib3R0b20gbGVmdCByaWdodCIpfTtFLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoKXsiaW4iIT1kLmhvdmVyU3RhdGUmJmMuZGV0YWNoKCk7ZC4kZWxlbWVudC5yZW1vdmVBdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IikudHJpZ2dlcigiaGlkZGVuLmJzLiIrZC50eXBlKTt0JiZ0KCl9dmFyIGQ9dGhpcyxjPWEodGhpcy4kdGlwKSxiPWEuRXZlbnQoImhpZGUuYnMuIit0aGlzLnR5cGUpOwp0aGlzLiRlbGVtZW50LnRyaWdnZXIoYik7aWYoIWIuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuIGMucmVtb3ZlQ2xhc3MoImluIiksYS5zdXBwb3J0LnRyYW5zaXRpb24mJmMuaGFzQ2xhc3MoImZhZGUiKT9jLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChFLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzfTtFLnByb3RvdHlwZS5maXhUaXRsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJGVsZW1lbnQ7KHQuYXR0cigidGl0bGUiKXx8InN0cmluZyIhPXR5cGVvZiB0LmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiKSkmJnQuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIsdC5hdHRyKCJ0aXRsZSIpfHwiIikuYXR0cigidGl0bGUiLCIiKX07RS5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9O0UucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3Q9CnR8fHRoaXMuJGVsZW1lbnQ7dmFyIGY9dFswXSxkPSJCT0RZIj09Zi50YWdOYW1lLGY9Zi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtudWxsPT1mLndpZHRoJiYoZj1hLmV4dGVuZCh7fSxmLHt3aWR0aDpmLnJpZ2h0LWYubGVmdCxoZWlnaHQ6Zi5ib3R0b20tZi50b3B9KSk7dmFyIGM9ZD97dG9wOjAsbGVmdDowfTp0Lm9mZnNldCgpO3Q9e3Njcm9sbDpkP2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOnQuc2Nyb2xsVG9wKCl9O2Q9ZD97d2lkdGg6YSh3aW5kb3cpLndpZHRoKCksaGVpZ2h0OmEod2luZG93KS5oZWlnaHQoKX06bnVsbDtyZXR1cm4gYS5leHRlbmQoe30sZix0LGQsYyl9O0UucHJvdG90eXBlLmdldENhbGN1bGF0ZWRPZmZzZXQ9ZnVuY3Rpb24odCxmLGQsYyl7cmV0dXJuImJvdHRvbSI9PXQ/e3RvcDpmLnRvcCtmLmhlaWdodCxsZWZ0OmYubGVmdCtmLndpZHRoLzItZC8yfToidG9wIj09dD97dG9wOmYudG9wLQpjLGxlZnQ6Zi5sZWZ0K2Yud2lkdGgvMi1kLzJ9OiJsZWZ0Ij09dD97dG9wOmYudG9wK2YuaGVpZ2h0LzItYy8yLGxlZnQ6Zi5sZWZ0LWR9Ont0b3A6Zi50b3ArZi5oZWlnaHQvMi1jLzIsbGVmdDpmLmxlZnQrZi53aWR0aH19O0UucHJvdG90eXBlLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YT1mdW5jdGlvbih0LGYsZCxjKXt2YXIgYj17dG9wOjAsbGVmdDowfTtpZighdGhpcy4kdmlld3BvcnQpcmV0dXJuIGI7dmFyIGc9dGhpcy5vcHRpb25zLnZpZXdwb3J0JiZ0aGlzLm9wdGlvbnMudmlld3BvcnQucGFkZGluZ3x8MCxlPXRoaXMuZ2V0UG9zaXRpb24odGhpcy4kdmlld3BvcnQpOy9yaWdodHxsZWZ0Ly50ZXN0KHQpPyhkPWYudG9wLWctZS5zY3JvbGwsZj1mLnRvcCtnLWUuc2Nyb2xsK2MsZDxlLnRvcD9iLnRvcD1lLnRvcC1kOmY+ZS50b3ArZS5oZWlnaHQmJihiLnRvcD1lLnRvcCtlLmhlaWdodC1mKSk6KGM9Zi5sZWZ0LWcsZj1mLmxlZnQrZytkLGM8ZS5sZWZ0P2IubGVmdD1lLmxlZnQtCmM6Zj5lLnJpZ2h0JiYoYi5sZWZ0PWUubGVmdCtlLndpZHRoLWYpKTtyZXR1cm4gYn07RS5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRlbGVtZW50LGY9dGhpcy5vcHRpb25zO3JldHVybiB0LmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiKXx8KCJmdW5jdGlvbiI9PXR5cGVvZiBmLnRpdGxlP2YudGl0bGUuY2FsbCh0WzBdKTpmLnRpdGxlKX07RS5wcm90b3R5cGUuZ2V0VUlEPWZ1bmN0aW9uKHQpe2RvIHQrPX5+KDFFNipNYXRoLnJhbmRvbSgpKTt3aGlsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KSk7cmV0dXJuIHR9O0UucHJvdG90eXBlLnRpcD1mdW5jdGlvbigpe2lmKCF0aGlzLiR0aXAmJih0aGlzLiR0aXA9YSh0aGlzLm9wdGlvbnMudGVtcGxhdGUpLDEhPXRoaXMuJHRpcC5sZW5ndGgpKXRocm93IEVycm9yKHRoaXMudHlwZSsiIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhIik7CnJldHVybiB0aGlzLiR0aXB9O0UucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoIi50b29sdGlwLWFycm93Iil9O0UucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZD0hMH07RS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZD0hMX07RS5wcm90b3R5cGUudG9nZ2xlRW5hYmxlZD1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZD0hdGhpcy5lbmFibGVkfTtFLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24odCl7dmFyIGY9dGhpczt0JiYoZj1hKHQuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUpLGZ8fChmPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHQuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKHQuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsZikpKTt0PyhmLmluU3RhdGUuY2xpY2s9IWYuaW5TdGF0ZS5jbGljaywKZi5pc0luU3RhdGVUcnVlKCk/Zi5lbnRlcihmKTpmLmxlYXZlKGYpKTpmLnRpcCgpLmhhc0NsYXNzKCJpbiIpP2YubGVhdmUoZik6Zi5lbnRlcihmKX07RS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7dGhpcy5oaWRlKGZ1bmN0aW9uKCl7dC4kZWxlbWVudC5vZmYoIi4iK3QudHlwZSkucmVtb3ZlRGF0YSgiYnMuIit0LnR5cGUpO3QuJHRpcCYmdC4kdGlwLmRldGFjaCgpO3QuJHRpcD1udWxsO3QuJGFycm93PW51bGw7dC4kdmlld3BvcnQ9bnVsbH0pfTt2YXIgcT1hLmZuLnRvb2x0aXA7YS5mbi50b29sdGlwPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZj1hKHRoaXMpLGQ9Zi5kYXRhKCJicy50b29sdGlwIiksYz0ib2JqZWN0Ij09dHlwZW9mIHQmJnQ7aWYoZHx8IS9kZXN0cm95fGhpZGUvLnRlc3QodCkpaWYoZHx8Zi5kYXRhKCJicy50b29sdGlwIixkPW5ldyBFKHRoaXMsCmMpKSwic3RyaW5nIj09dHlwZW9mIHQpZFt0XSgpfSl9O2EuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj1FO2EuZm4udG9vbHRpcC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7YS5mbi50b29sdGlwPXE7cmV0dXJuIHRoaXN9fSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe3ZhciBFPWZ1bmN0aW9uKHQsZil7dGhpcy5pbml0KCJwb3BvdmVyIix0LGYpfTtpZighYS5mbi50b29sdGlwKXRocm93IEVycm9yKCJQb3BvdmVyIHJlcXVpcmVzIHRvb2x0aXAuanMiKTtFLlZFUlNJT049IjMuMy41IjtFLkRFRkFVTFRTPWEuZXh0ZW5kKHt9LGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUyx7cGxhY2VtZW50OiJyaWdodCIsdHJpZ2dlcjoiY2xpY2siLGNvbnRlbnQ6IiIsdGVtcGxhdGU6J1x4M2NkaXYgY2xhc3NceDNkInBvcG92ZXIiIHJvbGVceDNkInRvb2x0aXAiXHgzZVx4M2NkaXYgY2xhc3NceDNkImFycm93Ilx4M2VceDNjL2Rpdlx4M2VceDNjaDMgY2xhc3NceDNkInBvcG92ZXItdGl0bGUiXHgzZVx4M2MvaDNceDNlXHgzY2RpdiBjbGFzc1x4M2QicG9wb3Zlci1jb250ZW50Ilx4M2VceDNjL2Rpdlx4M2VceDNjL2Rpdlx4M2UnfSk7RS5wcm90b3R5cGU9YS5leHRlbmQoe30sYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yLnByb3RvdHlwZSk7CkUucHJvdG90eXBlLmNvbnN0cnVjdG9yPUU7RS5wcm90b3R5cGUuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gRS5ERUZBVUxUU307RS5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudGlwKCksZj10aGlzLmdldFRpdGxlKCksZD10aGlzLmdldENvbnRlbnQoKTt0LmZpbmQoIi5wb3BvdmVyLXRpdGxlIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0oZik7dC5maW5kKCIucG9wb3Zlci1jb250ZW50IikuY2hpbGRyZW4oKS5kZXRhY2goKS5lbmQoKVt0aGlzLm9wdGlvbnMuaHRtbD8ic3RyaW5nIj09dHlwZW9mIGQ/Imh0bWwiOiJhcHBlbmQiOiJ0ZXh0Il0oZCk7dC5yZW1vdmVDbGFzcygiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW4iKTt0LmZpbmQoIi5wb3BvdmVyLXRpdGxlIikuaHRtbCgpfHx0LmZpbmQoIi5wb3BvdmVyLXRpdGxlIikuaGlkZSgpfTtFLnByb3RvdHlwZS5oYXNDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGl0bGUoKXx8CnRoaXMuZ2V0Q29udGVudCgpfTtFLnByb3RvdHlwZS5nZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZWxlbWVudCxmPXRoaXMub3B0aW9ucztyZXR1cm4gdC5hdHRyKCJkYXRhLWNvbnRlbnQiKXx8KCJmdW5jdGlvbiI9PXR5cGVvZiBmLmNvbnRlbnQ/Zi5jb250ZW50LmNhbGwodFswXSk6Zi5jb250ZW50KX07RS5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZCgiLmFycm93Iil9O3ZhciBxPWEuZm4ucG9wb3ZlcjthLmZuLnBvcG92ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWEodGhpcyksZD1mLmRhdGEoImJzLnBvcG92ZXIiKSxjPSJvYmplY3QiPT10eXBlb2YgdCYmdDtpZihkfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdCh0KSlpZihkfHxmLmRhdGEoImJzLnBvcG92ZXIiLGQ9bmV3IEUodGhpcyxjKSksInN0cmluZyI9PXR5cGVvZiB0KWRbdF0oKX0pfTsKYS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPUU7YS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXthLmZuLnBvcG92ZXI9cTtyZXR1cm4gdGhpc319KShqUXVlcnkpOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gRShmLGQpe3RoaXMuJGJvZHk9YShkb2N1bWVudC5ib2R5KTt0aGlzLiRzY3JvbGxFbGVtZW50PWEoZikuaXMoZG9jdW1lbnQuYm9keSk/YSh3aW5kb3cpOmEoZik7dGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LEUuREVGQVVMVFMsZCk7dGhpcy5zZWxlY3Rvcj0odGhpcy5vcHRpb25zLnRhcmdldHx8IiIpKyIgLm5hdiBsaSBceDNlIGEiO3RoaXMub2Zmc2V0cz1bXTt0aGlzLnRhcmdldHM9W107dGhpcy5hY3RpdmVUYXJnZXQ9bnVsbDt0aGlzLnNjcm9sbEhlaWdodD0wO3RoaXMuJHNjcm9sbEVsZW1lbnQub24oInNjcm9sbC5icy5zY3JvbGxzcHkiLGEucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpKTt0aGlzLnJlZnJlc2goKTt0aGlzLnByb2Nlc3MoKX1mdW5jdGlvbiBxKGYpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGM9ZC5kYXRhKCJicy5zY3JvbGxzcHkiKSxiPSJvYmplY3QiPT10eXBlb2YgZiYmZjtjfHxkLmRhdGEoImJzLnNjcm9sbHNweSIsCmM9bmV3IEUodGhpcyxiKSk7aWYoInN0cmluZyI9PXR5cGVvZiBmKWNbZl0oKX0pfUUuVkVSU0lPTj0iMy4zLjUiO0UuREVGQVVMVFM9e29mZnNldDoxMH07RS5wcm90b3R5cGUuZ2V0U2Nyb2xsSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0fHxNYXRoLm1heCh0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KX07RS5wcm90b3R5cGUucmVmcmVzaD1mdW5jdGlvbigpe3ZhciBmPXRoaXMsZD0ib2Zmc2V0IixjPTA7dGhpcy5vZmZzZXRzPVtdO3RoaXMudGFyZ2V0cz1bXTt0aGlzLnNjcm9sbEhlaWdodD10aGlzLmdldFNjcm9sbEhlaWdodCgpO2EuaXNXaW5kb3codGhpcy4kc2Nyb2xsRWxlbWVudFswXSl8fChkPSJwb3NpdGlvbiIsYz10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpKTt0aGlzLiRib2R5LmZpbmQodGhpcy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyIGI9CmEodGhpcyksYj1iLmRhdGEoInRhcmdldCIpfHxiLmF0dHIoImhyZWYiKSxnPS9eIy4vLnRlc3QoYikmJmEoYik7cmV0dXJuIGcmJmcubGVuZ3RoJiZnLmlzKCI6dmlzaWJsZSIpJiZbW2dbZF0oKS50b3ArYyxiXV18fG51bGx9KS5zb3J0KGZ1bmN0aW9uKGIsZyl7cmV0dXJuIGJbMF0tZ1swXX0pLmVhY2goZnVuY3Rpb24oKXtmLm9mZnNldHMucHVzaCh0aGlzWzBdKTtmLnRhcmdldHMucHVzaCh0aGlzWzFdKX0pfTtFLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKCl7dmFyIGY9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LGQ9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxjPXRoaXMub3B0aW9ucy5vZmZzZXQrZC10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLGI9dGhpcy5vZmZzZXRzLGc9dGhpcy50YXJnZXRzLGU9dGhpcy5hY3RpdmVUYXJnZXQsazt0aGlzLnNjcm9sbEhlaWdodCE9ZCYmdGhpcy5yZWZyZXNoKCk7aWYoZj49YylyZXR1cm4gZSE9CihrPWdbZy5sZW5ndGgtMV0pJiZ0aGlzLmFjdGl2YXRlKGspO2lmKGUmJmY8YlswXSlyZXR1cm4gdGhpcy5hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLmNsZWFyKCk7Zm9yKGs9Yi5sZW5ndGg7ay0tOyllIT1nW2tdJiZmPj1iW2tdJiYodm9pZCAwPT09YltrKzFdfHxmPGJbaysxXSkmJnRoaXMuYWN0aXZhdGUoZ1trXSl9O0UucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGYpe3RoaXMuYWN0aXZlVGFyZ2V0PWY7dGhpcy5jbGVhcigpO2Y9YSh0aGlzLnNlbGVjdG9yKydbZGF0YS10YXJnZXRceDNkIicrZisnIl0sJyt0aGlzLnNlbGVjdG9yKydbaHJlZlx4M2QiJytmKyciXScpLnBhcmVudHMoImxpIikuYWRkQ2xhc3MoImFjdGl2ZSIpO2YucGFyZW50KCIuZHJvcGRvd24tbWVudSIpLmxlbmd0aCYmKGY9Zi5jbG9zZXN0KCJsaS5kcm9wZG93biIpLmFkZENsYXNzKCJhY3RpdmUiKSk7Zi50cmlnZ2VyKCJhY3RpdmF0ZS5icy5zY3JvbGxzcHkiKX07RS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LAoiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKX07dmFyIHQ9YS5mbi5zY3JvbGxzcHk7YS5mbi5zY3JvbGxzcHk9cTthLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1FO2EuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXthLmZuLnNjcm9sbHNweT10O3JldHVybiB0aGlzfTthKHdpbmRvdykub24oImxvYWQuYnMuc2Nyb2xsc3B5LmRhdGEtYXBpIixmdW5jdGlvbigpe2EoJ1tkYXRhLXNweVx4M2Qic2Nyb2xsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9YSh0aGlzKTtxLmNhbGwoZixmLmRhdGEoKSl9KX0pfSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIEUoZCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksYj1jLmRhdGEoImJzLnRhYiIpO2J8fGMuZGF0YSgiYnMudGFiIixiPW5ldyBxKHRoaXMpKTtpZigic3RyaW5nIj09dHlwZW9mIGQpYltkXSgpfSl9dmFyIHE9ZnVuY3Rpb24oZCl7dGhpcy5lbGVtZW50PWEoZCl9O3EuVkVSU0lPTj0iMy4zLjUiO3EuVFJBTlNJVElPTl9EVVJBVElPTj0xNTA7cS5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe3ZhciBkPXRoaXMuZWxlbWVudCxjPWQuY2xvc2VzdCgidWw6bm90KC5kcm9wZG93bi1tZW51KSIpLGI9ZC5kYXRhKCJ0YXJnZXQiKTtifHwoYj0oYj1kLmF0dHIoImhyZWYiKSkmJmIucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7aWYoIWQucGFyZW50KCJsaSIpLmhhc0NsYXNzKCJhY3RpdmUiKSl7dmFyIGc9Yy5maW5kKCIuYWN0aXZlOmxhc3QgYSIpLGU9YS5FdmVudCgiaGlkZS5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OmRbMF19KSwKaz1hLkV2ZW50KCJzaG93LmJzLnRhYiIse3JlbGF0ZWRUYXJnZXQ6Z1swXX0pO2cudHJpZ2dlcihlKTtkLnRyaWdnZXIoayk7ay5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGI9YShiKSx0aGlzLmFjdGl2YXRlKGQuY2xvc2VzdCgibGkiKSxjKSx0aGlzLmFjdGl2YXRlKGIsYi5wYXJlbnQoKSxmdW5jdGlvbigpe2cudHJpZ2dlcih7dHlwZToiaGlkZGVuLmJzLnRhYiIscmVsYXRlZFRhcmdldDpkWzBdfSk7ZC50cmlnZ2VyKHt0eXBlOiJzaG93bi5icy50YWIiLHJlbGF0ZWRUYXJnZXQ6Z1swXX0pfSkpfX07cS5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oZCxjLGIpe2Z1bmN0aW9uIGcoKXtlLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5maW5kKCJceDNlIC5kcm9wZG93bi1tZW51IFx4M2UgLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5lbmQoKS5maW5kKCdbZGF0YS10b2dnbGVceDNkInRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsCiExKTtkLmFkZENsYXNzKCJhY3RpdmUiKS5maW5kKCdbZGF0YS10b2dnbGVceDNkInRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsITApO2s/ZC5hZGRDbGFzcygiaW4iKTpkLnJlbW92ZUNsYXNzKCJmYWRlIik7ZC5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiZkLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZVx4M2QidGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCk7YiYmYigpfXZhciBlPWMuZmluZCgiXHgzZSAuYWN0aXZlIiksaz1iJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGUubGVuZ3RoJiZlLmhhc0NsYXNzKCJmYWRlIil8fCEhYy5maW5kKCJceDNlIC5mYWRlIikubGVuZ3RoKTtlLmxlbmd0aCYmaz9lLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixnKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChxLlRSQU5TSVRJT05fRFVSQVRJT04pOmcoKTtlLnJlbW92ZUNsYXNzKCJpbiIpfTt2YXIgdD0KYS5mbi50YWI7YS5mbi50YWI9RTthLmZuLnRhYi5Db25zdHJ1Y3Rvcj1xO2EuZm4udGFiLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXthLmZuLnRhYj10O3JldHVybiB0aGlzfTt2YXIgZj1mdW5jdGlvbihkKXtkLnByZXZlbnREZWZhdWx0KCk7RS5jYWxsKGEodGhpcyksInNob3ciKX07YShkb2N1bWVudCkub24oImNsaWNrLmJzLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZVx4M2QidGFiIl0nLGYpLm9uKCJjbGljay5icy50YWIuZGF0YS1hcGkiLCdbZGF0YS10b2dnbGVceDNkInBpbGwiXScsZil9KShqUXVlcnkpOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gRShmKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxjPWQuZGF0YSgiYnMuYWZmaXgiKSxiPSJvYmplY3QiPT10eXBlb2YgZiYmZjtjfHxkLmRhdGEoImJzLmFmZml4IixjPW5ldyBxKHRoaXMsYikpO2lmKCJzdHJpbmciPT10eXBlb2YgZiljW2ZdKCl9KX12YXIgcT1mdW5jdGlvbihmLGQpe3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxxLkRFRkFVTFRTLGQpO3RoaXMuJHRhcmdldD1hKHRoaXMub3B0aW9ucy50YXJnZXQpLm9uKCJzY3JvbGwuYnMuYWZmaXguZGF0YS1hcGkiLGEucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpKS5vbigiY2xpY2suYnMuYWZmaXguZGF0YS1hcGkiLGEucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcCx0aGlzKSk7dGhpcy4kZWxlbWVudD1hKGYpO3RoaXMucGlubmVkT2Zmc2V0PXRoaXMudW5waW49dGhpcy5hZmZpeGVkPW51bGw7dGhpcy5jaGVja1Bvc2l0aW9uKCl9OwpxLlZFUlNJT049IjMuMy41IjtxLlJFU0VUPSJhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tIjtxLkRFRkFVTFRTPXtvZmZzZXQ6MCx0YXJnZXQ6d2luZG93fTtxLnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbihmLGQsYyxiKXt2YXIgZz10aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKCksZT10aGlzLiRlbGVtZW50Lm9mZnNldCgpLGs9dGhpcy4kdGFyZ2V0LmhlaWdodCgpO2lmKG51bGwhPWMmJiJ0b3AiPT10aGlzLmFmZml4ZWQpcmV0dXJuIGc8Yz8idG9wIjohMTtpZigiYm90dG9tIj09dGhpcy5hZmZpeGVkKXJldHVybiBudWxsIT1jP2crdGhpcy51bnBpbjw9ZS50b3A/ITE6ImJvdHRvbSI6ZytrPD1mLWI/ITE6ImJvdHRvbSI7dmFyIG09bnVsbD09dGhpcy5hZmZpeGVkLGU9bT9nOmUudG9wO3JldHVybiBudWxsIT1jJiZnPD1jPyJ0b3AiOm51bGwhPWImJmUrKG0/azpkKT49Zi1iPyJib3R0b20iOiExfTtxLnByb3RvdHlwZS5nZXRQaW5uZWRPZmZzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLnBpbm5lZE9mZnNldClyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ7CnRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MocS5SRVNFVCkuYWRkQ2xhc3MoImFmZml4Iik7dmFyIGY9dGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpO3JldHVybiB0aGlzLnBpbm5lZE9mZnNldD10aGlzLiRlbGVtZW50Lm9mZnNldCgpLnRvcC1mfTtxLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcD1mdW5jdGlvbigpe3NldFRpbWVvdXQoYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcyksMSl9O3EucHJvdG90eXBlLmNoZWNrUG9zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLiRlbGVtZW50LmlzKCI6dmlzaWJsZSIpKXt2YXIgZj10aGlzLiRlbGVtZW50LmhlaWdodCgpLGQ9dGhpcy5vcHRpb25zLm9mZnNldCxjPWQudG9wLGI9ZC5ib3R0b20sZz1NYXRoLm1heChhKGRvY3VtZW50KS5oZWlnaHQoKSxhKGRvY3VtZW50LmJvZHkpLmhlaWdodCgpKTsib2JqZWN0IiE9dHlwZW9mIGQmJihiPWM9ZCk7ImZ1bmN0aW9uIj09dHlwZW9mIGMmJihjPWQudG9wKHRoaXMuJGVsZW1lbnQpKTsKImZ1bmN0aW9uIj09dHlwZW9mIGImJihiPWQuYm90dG9tKHRoaXMuJGVsZW1lbnQpKTtkPXRoaXMuZ2V0U3RhdGUoZyxmLGMsYik7aWYodGhpcy5hZmZpeGVkIT1kKXtudWxsIT10aGlzLnVucGluJiZ0aGlzLiRlbGVtZW50LmNzcygidG9wIiwiIik7dmFyIGM9ImFmZml4IisoZD8iLSIrZDoiIiksZT1hLkV2ZW50KGMrIi5icy5hZmZpeCIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihlKTtpZihlLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjt0aGlzLmFmZml4ZWQ9ZDt0aGlzLnVucGluPSJib3R0b20iPT1kP3RoaXMuZ2V0UGlubmVkT2Zmc2V0KCk6bnVsbDt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHEuUkVTRVQpLmFkZENsYXNzKGMpLnRyaWdnZXIoYy5yZXBsYWNlKCJhZmZpeCIsImFmZml4ZWQiKSsiLmJzLmFmZml4Iil9ImJvdHRvbSI9PWQmJnRoaXMuJGVsZW1lbnQub2Zmc2V0KHt0b3A6Zy1mLWJ9KX19O3ZhciB0PWEuZm4uYWZmaXg7YS5mbi5hZmZpeD1FO2EuZm4uYWZmaXguQ29uc3RydWN0b3I9CnE7YS5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7YS5mbi5hZmZpeD10O3JldHVybiB0aGlzfTthKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5XHgzZCJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBmPWEodGhpcyksZD1mLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e307bnVsbCE9ZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pO251bGwhPWQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKTtFLmNhbGwoZixkKX0pfSl9KShqUXVlcnkpOwooZnVuY3Rpb24oKXt2YXIgYT1MaWZlcmF5LkFVSSxFPWEuZ2V0Q29tYmluZSgpO3dpbmRvdy5fX0NPTkZJR19fPXtiYXNlUGF0aDoiIixjb21iaW5lOkUscmVwb3J0TWlzbWF0Y2hlZEFub255bW91c01vZHVsZXM6Indhcm4iLHVybDpFP2EuZ2V0Q29tYm9QYXRoKCk6dGhlbWVEaXNwbGF5LmdldFBvcnRhbFVSTCgpfTtFfHwoX19DT05GSUdfXy5kZWZhdWx0VVJMUGFyYW1zPXtsYW5ndWFnZUlkOnRoZW1lRGlzcGxheS5nZXRMYW5ndWFnZUlkKCl9KTtfX0NPTkZJR19fLm1hcHM9TGlmZXJheS5NQVBTO19fQ09ORklHX18ubW9kdWxlcz1MaWZlcmF5Lk1PRFVMRVM7X19DT05GSUdfXy5wYXRocz1MaWZlcmF5LlBBVEhTO19fQ09ORklHX18ubmFtZXNwYWNlPSJMaWZlcmF5IjtfX0NPTkZJR19fLmV4cGxhaW5SZXNvbHV0aW9ucz1MaWZlcmF5LkVYUExBSU5fUkVTT0xVVElPTlM7X19DT05GSUdfXy5leHBvc2VHbG9iYWw9TGlmZXJheS5FWFBPU0VfR0xPQkFMfSkoKTsKKGZ1bmN0aW9uKGEsRSl7Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPUUoKToiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoRSk6YS5FUzZQcm9taXNlPUUoKX0pKHRoaXMsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZCl9fWZ1bmN0aW9uIEUoKXtyZXR1cm4idW5kZWZpbmVkIiE9PXR5cGVvZiBuYT9mdW5jdGlvbigpe25hKGQpfTpmKCl9ZnVuY3Rpb24gcSgpe3ZhciBnYT0wLHRhPW5ldyBlYShkKSxxYT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7dGEub2JzZXJ2ZShxYSx7Y2hhcmFjdGVyRGF0YTohMH0pO3JldHVybiBmdW5jdGlvbigpe3FhLmRhdGE9Z2E9KytnYSUyfX1mdW5jdGlvbiB0KCl7dmFyIGdhPW5ldyBNZXNzYWdlQ2hhbm5lbDtnYS5wb3J0MS5vbm1lc3NhZ2U9ZDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ2EucG9ydDIucG9zdE1lc3NhZ2UoMCl9fQpmdW5jdGlvbiBmKCl7dmFyIGdhPXNldFRpbWVvdXQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdhKGQsMSl9fWZ1bmN0aW9uIGQoKXtmb3IodmFyIGdhPTA7Z2E8WTtnYSs9MikoMCxBYVtnYV0pKEFhW2dhKzFdKSxBYVtnYV09dm9pZCAwLEFhW2dhKzFdPXZvaWQgMDtZPTB9ZnVuY3Rpb24gYygpe3RyeXt2YXIgZ2E9cmVxdWlyZSgidmVydHgiKTtuYT1nYS5ydW5Pbkxvb3B8fGdhLnJ1bk9uQ29udGV4dDtyZXR1cm4gRSgpfWNhdGNoKHRhKXtyZXR1cm4gZigpfX1mdW5jdGlvbiBiKGdhLHRhKXt2YXIgcWE9YXJndW1lbnRzLHdhPXRoaXMsSmE9bmV3IHRoaXMuY29uc3RydWN0b3IoZSk7dm9pZCAwPT09SmFbRmFdJiZNKEphKTt2YXIgUGE9d2EuX3N0YXRlO1BhP2Z1bmN0aW9uKCl7dmFyIGZiPXFhW1BhLTFdO2lhKGZ1bmN0aW9uKCl7cmV0dXJuIEIoUGEsSmEsZmIsd2EuX3Jlc3VsdCl9KX0oKTpBKHdhLEphLGdhLHRhKTtyZXR1cm4gSmF9ZnVuY3Rpb24gZyhnYSl7aWYoZ2EmJiJvYmplY3QiPT09CnR5cGVvZiBnYSYmZ2EuY29uc3RydWN0b3I9PT10aGlzKXJldHVybiBnYTt2YXIgdGE9bmV3IHRoaXMoZSk7aCh0YSxnYSk7cmV0dXJuIHRhfWZ1bmN0aW9uIGUoKXt9ZnVuY3Rpb24gayhnYSl7dHJ5e3JldHVybiBnYS50aGVufWNhdGNoKHRhKXtyZXR1cm4gd2IuZXJyb3I9dGEsd2J9fWZ1bmN0aW9uIG0oZ2EsdGEscWEsd2Epe3RyeXtnYS5jYWxsKHRhLHFhLHdhKX1jYXRjaChKYSl7cmV0dXJuIEphfX1mdW5jdGlvbiBwKGdhLHRhLHFhKXtpYShmdW5jdGlvbih3YSl7dmFyIEphPSExLFBhPW0ocWEsdGEsZnVuY3Rpb24oZmIpe0phfHwoSmE9ITAsdGEhPT1mYj9oKHdhLGZiKTp3KHdhLGZiKSl9LGZ1bmN0aW9uKGZiKXtKYXx8KEphPSEwLHood2EsZmIpKX0sIlNldHRsZTogIisod2EuX2xhYmVsfHwiIHVua25vd24gcHJvbWlzZSIpKTshSmEmJlBhJiYoSmE9ITAseih3YSxQYSkpfSxnYSl9ZnVuY3Rpb24gcyhnYSx0YSl7dGEuX3N0YXRlPT09V2E/dyhnYSx0YS5fcmVzdWx0KTp0YS5fc3RhdGU9PT0KVWE/eihnYSx0YS5fcmVzdWx0KTpBKHRhLHZvaWQgMCxmdW5jdGlvbihxYSl7cmV0dXJuIGgoZ2EscWEpfSxmdW5jdGlvbihxYSl7cmV0dXJuIHooZ2EscWEpfSl9ZnVuY3Rpb24gbChnYSx0YSxxYSl7dGEuY29uc3RydWN0b3I9PT1nYS5jb25zdHJ1Y3RvciYmcWE9PT1iJiZ0YS5jb25zdHJ1Y3Rvci5yZXNvbHZlPT09Zz9zKGdhLHRhKTpxYT09PXdiPyh6KGdhLHdiLmVycm9yKSx3Yi5lcnJvcj1udWxsKTp2b2lkIDA9PT1xYT93KGdhLHRhKToiZnVuY3Rpb24iPT09dHlwZW9mIHFhP3AoZ2EsdGEscWEpOncoZ2EsdGEpfWZ1bmN0aW9uIGgoZ2EsdGEpe2dhPT09dGE/eihnYSxuZXcgVHlwZUVycm9yKCJZb3UgY2Fubm90IHJlc29sdmUgYSBwcm9taXNlIHdpdGggaXRzZWxmIikpOiJmdW5jdGlvbiI9PT10eXBlb2YgdGF8fCJvYmplY3QiPT09dHlwZW9mIHRhJiZudWxsIT09dGE/bChnYSx0YSxrKHRhKSk6dyhnYSx0YSl9ZnVuY3Rpb24gdShnYSl7Z2EuX29uZXJyb3ImJmdhLl9vbmVycm9yKGdhLl9yZXN1bHQpOwpIKGdhKX1mdW5jdGlvbiB3KGdhLHRhKXtnYS5fc3RhdGU9PT1FYSYmKGdhLl9yZXN1bHQ9dGEsZ2EuX3N0YXRlPVdhLDAhPT1nYS5fc3Vic2NyaWJlcnMubGVuZ3RoJiZpYShILGdhKSl9ZnVuY3Rpb24geihnYSx0YSl7Z2EuX3N0YXRlPT09RWEmJihnYS5fc3RhdGU9VWEsZ2EuX3Jlc3VsdD10YSxpYSh1LGdhKSl9ZnVuY3Rpb24gQShnYSx0YSxxYSx3YSl7dmFyIEphPWdhLl9zdWJzY3JpYmVycyxQYT1KYS5sZW5ndGg7Z2EuX29uZXJyb3I9bnVsbDtKYVtQYV09dGE7SmFbUGErV2FdPXFhO0phW1BhK1VhXT13YTswPT09UGEmJmdhLl9zdGF0ZSYmaWEoSCxnYSl9ZnVuY3Rpb24gSChnYSl7dmFyIHRhPWdhLl9zdWJzY3JpYmVycyxxYT1nYS5fc3RhdGU7aWYoMCE9PXRhLmxlbmd0aCl7Zm9yKHZhciB3YT12b2lkIDAsSmE9dm9pZCAwLFBhPWdhLl9yZXN1bHQsZmI9MDtmYjx0YS5sZW5ndGg7ZmIrPTMpd2E9dGFbZmJdLEphPXRhW2ZiK3FhXSx3YT9CKHFhLHdhLEphLFBhKTpKYShQYSk7CmdhLl9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gRigpe3RoaXMuZXJyb3I9bnVsbH1mdW5jdGlvbiBCKGdhLHRhLHFhLHdhKXt2YXIgSmE9ImZ1bmN0aW9uIj09PXR5cGVvZiBxYSxQYT12b2lkIDAsZmI9dm9pZCAwLHhiPXZvaWQgMCxFYj12b2lkIDA7aWYoSmEpe3RyeXtQYT1xYSh3YSl9Y2F0Y2goU2Epe0FiLmVycm9yPVNhLFBhPUFifVBhPT09QWI/KEViPSEwLGZiPVBhLmVycm9yLFBhLmVycm9yPW51bGwpOnhiPSEwO2lmKHRhPT09UGEpe3oodGEsbmV3IFR5cGVFcnJvcigiQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLiIpKTtyZXR1cm59fWVsc2UgUGE9d2EseGI9ITA7dGEuX3N0YXRlPT09RWEmJihKYSYmeGI/aCh0YSxQYSk6RWI/eih0YSxmYik6Z2E9PT1XYT93KHRhLFBhKTpnYT09PVVhJiZ6KHRhLFBhKSl9ZnVuY3Rpb24gSShnYSx0YSl7dHJ5e3RhKGZ1bmN0aW9uKHdhKXtoKGdhLHdhKX0sZnVuY3Rpb24od2Epe3ooZ2EsCndhKX0pfWNhdGNoKHFhKXt6KGdhLHFhKX19ZnVuY3Rpb24gTShnYSl7Z2FbRmFdPU1iKys7Z2EuX3N0YXRlPXZvaWQgMDtnYS5fcmVzdWx0PXZvaWQgMDtnYS5fc3Vic2NyaWJlcnM9W119ZnVuY3Rpb24gRChnYSx0YSl7dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3Rvcj1nYTt0aGlzLnByb21pc2U9bmV3IGdhKGUpO3RoaXMucHJvbWlzZVtGYV18fE0odGhpcy5wcm9taXNlKTtWKHRhKT8odGhpcy5faW5wdXQ9dGEsdGhpcy5fcmVtYWluaW5nPXRoaXMubGVuZ3RoPXRhLmxlbmd0aCx0aGlzLl9yZXN1bHQ9QXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD93KHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoKSwwPT09dGhpcy5fcmVtYWluaW5nJiZ3KHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6eih0aGlzLnByb21pc2UsRXJyb3IoIkFycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheSIpKX0KZnVuY3Rpb24gSihnYSl7dGhpc1tGYV09TWIrKzt0aGlzLl9yZXN1bHQ9dGhpcy5fc3RhdGU9dm9pZCAwO3RoaXMuX3N1YnNjcmliZXJzPVtdO2lmKGUhPT1nYSl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBnYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yIik7aWYodGhpcyBpbnN0YW5jZW9mIEopSSh0aGlzLGdhKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpO319dmFyIFA9dm9pZCAwLFY9UD1BcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXk6ZnVuY3Rpb24oZ2Epe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZ2EpfSwKWT0wLG5hPXZvaWQgMCxmYT12b2lkIDAsaWE9ZnVuY3Rpb24oZ2EsdGEpe0FhW1ldPWdhO0FhW1krMV09dGE7WSs9MjsyPT09WSYmKGZhP2ZhKGQpOnBhKCkpfSxaPShQPSJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwKXx8e30sZWE9Wi5NdXRhdGlvbk9ic2VydmVyfHxaLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsWj0idW5kZWZpbmVkIj09PXR5cGVvZiBzZWxmJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBwcm9jZXNzJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpLG9hPSJ1bmRlZmluZWQiIT09dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiYidW5kZWZpbmVkIiE9PXR5cGVvZiBpbXBvcnRTY3JpcHRzJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCxBYT1BcnJheSgxRTMpLHBhPXZvaWQgMCxwYT1aP2EoKTplYT9xKCk6b2E/dCgpOnZvaWQgMD09PVAmJiJmdW5jdGlvbiI9PT10eXBlb2YgcmVxdWlyZT9jKCk6CmYoKSxGYT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpLEVhPXZvaWQgMCxXYT0xLFVhPTIsd2I9bmV3IEYsQWI9bmV3IEYsTWI9MDtELnByb3RvdHlwZS5fZW51bWVyYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBnYT10aGlzLmxlbmd0aCx0YT10aGlzLl9pbnB1dCxxYT0wO3RoaXMuX3N0YXRlPT09RWEmJnFhPGdhO3FhKyspdGhpcy5fZWFjaEVudHJ5KHRhW3FhXSxxYSl9O0QucHJvdG90eXBlLl9lYWNoRW50cnk9ZnVuY3Rpb24oZ2EsdGEpe3ZhciBxYT10aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yLHdhPXFhLnJlc29sdmU7d2E9PT1nPyh3YT1rKGdhKSx3YT09PWImJmdhLl9zdGF0ZSE9PUVhP3RoaXMuX3NldHRsZWRBdChnYS5fc3RhdGUsdGEsZ2EuX3Jlc3VsdCk6ImZ1bmN0aW9uIiE9PXR5cGVvZiB3YT8odGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fcmVzdWx0W3RhXT1nYSk6cWE9PT1KPyhxYT1uZXcgcWEoZSksbChxYSxnYSx3YSksdGhpcy5fd2lsbFNldHRsZUF0KHFhLAp0YSkpOnRoaXMuX3dpbGxTZXR0bGVBdChuZXcgcWEoZnVuY3Rpb24oSmEpe3JldHVybiBKYShnYSl9KSx0YSkpOnRoaXMuX3dpbGxTZXR0bGVBdCh3YShnYSksdGEpfTtELnByb3RvdHlwZS5fc2V0dGxlZEF0PWZ1bmN0aW9uKGdhLHRhLHFhKXt2YXIgd2E9dGhpcy5wcm9taXNlO3dhLl9zdGF0ZT09PUVhJiYodGhpcy5fcmVtYWluaW5nLS0sZ2E9PT1VYT96KHdhLHFhKTp0aGlzLl9yZXN1bHRbdGFdPXFhKTswPT09dGhpcy5fcmVtYWluaW5nJiZ3KHdhLHRoaXMuX3Jlc3VsdCl9O0QucHJvdG90eXBlLl93aWxsU2V0dGxlQXQ9ZnVuY3Rpb24oZ2EsdGEpe3ZhciBxYT10aGlzO0EoZ2Esdm9pZCAwLGZ1bmN0aW9uKHdhKXtyZXR1cm4gcWEuX3NldHRsZWRBdChXYSx0YSx3YSl9LGZ1bmN0aW9uKHdhKXtyZXR1cm4gcWEuX3NldHRsZWRBdChVYSx0YSx3YSl9KX07Si5hbGw9ZnVuY3Rpb24oZ2Epe3JldHVybihuZXcgRCh0aGlzLGdhKSkucHJvbWlzZX07Si5yYWNlPWZ1bmN0aW9uKGdhKXt2YXIgdGE9CnRoaXM7cmV0dXJuIFYoZ2EpP25ldyB0YShmdW5jdGlvbihxYSx3YSl7Zm9yKHZhciBKYT1nYS5sZW5ndGgsUGE9MDtQYTxKYTtQYSsrKXRhLnJlc29sdmUoZ2FbUGFdKS50aGVuKHFhLHdhKX0pOm5ldyB0YShmdW5jdGlvbihxYSx3YSl7cmV0dXJuIHdhKG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4iKSl9KX07Si5yZXNvbHZlPWc7Si5yZWplY3Q9ZnVuY3Rpb24oZ2Epe3ZhciB0YT1uZXcgdGhpcyhlKTt6KHRhLGdhKTtyZXR1cm4gdGF9O0ouX3NldFNjaGVkdWxlcj1mdW5jdGlvbihnYSl7ZmE9Z2F9O0ouX3NldEFzYXA9ZnVuY3Rpb24oZ2Epe2lhPWdhfTtKLl9hc2FwPWlhO0oucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKLHRoZW46YiwiY2F0Y2giOmZ1bmN0aW9uKGdhKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsZ2EpfX07Si5wb2x5ZmlsbD1mdW5jdGlvbigpe3ZhciBnYT12b2lkIDA7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgZ2xvYmFsKWdhPQpnbG9iYWw7ZWxzZSBpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBzZWxmKWdhPXNlbGY7ZWxzZSB0cnl7Z2E9RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0YSl7dGhyb3cgRXJyb3IoInBvbHlmaWxsIGZhaWxlZCBiZWNhdXNlIGdsb2JhbCBvYmplY3QgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCIpO312YXIgcWE9Z2EuUHJvbWlzZTtpZihxYSl7dmFyIHdhPW51bGw7dHJ5e3dhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChxYS5yZXNvbHZlKCkpfWNhdGNoKEphKXt9aWYoIltvYmplY3QgUHJvbWlzZV0iPT09d2EmJiFxYS5jYXN0KXJldHVybn1nYS5Qcm9taXNlPUp9O3JldHVybiBKLlByb21pc2U9Sn0pOwooZnVuY3Rpb24oKXt2YXIgYT17fTthLl9fQ09ORklHX189d2luZG93Ll9fQ09ORklHX187KGZ1bmN0aW9uKHQsZil7dmFyIGQ9Zih0KTsib2JqZWN0Ij09PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmKG1vZHVsZS5leHBvcnRzPWQpOyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoZik7dC5FdmVudEVtaXR0ZXI9ZH0pKCJ1bmRlZmluZWQiIT09dHlwZW9mIGE/YTp0aGlzLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoKXt0aGlzLl9ldmVudHM9e319Zi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYsb246ZnVuY3Rpb24oZCxjKXsodGhpcy5fZXZlbnRzW2RdPXRoaXMuX2V2ZW50c1tkXXx8W10pLnB1c2goYyl9LG9mZjpmdW5jdGlvbihkLGMpe3ZhciBiPXRoaXMuX2V2ZW50c1tkXTtpZihiKXt2YXIgZz1iLmluZGV4T2YoYyk7LTE8ZyYmYi5zcGxpY2UoZywxKX19LGVtaXQ6ZnVuY3Rpb24oZCxjKXt2YXIgYj10aGlzLl9ldmVudHNbZF07aWYoYilmb3IodmFyIGI9CmIuc2xpY2UoMCksZz0wO2c8Yi5sZW5ndGg7ZysrKXt2YXIgZT1iW2ddO2UuY2FsbChlLGMpfX19O3JldHVybiBmfSk7KGZ1bmN0aW9uKHQsZil7dmFyIGQ9Zih0KTsib2JqZWN0Ij09PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmKG1vZHVsZS5leHBvcnRzPWQpOyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoZik7dC5Db25maWdQYXJzZXI9ZH0pKCJ1bmRlZmluZWQiIT09dHlwZW9mIGE/YTp0aGlzLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoZCl7dGhpcy5fY29uZmlnPXt9O3RoaXMuX21vZHVsZXM9e307dGhpcy5fY29uZGl0aW9uYWxNb2R1bGVzPXt9O3RoaXMuX3BhcnNlQ29uZmlnKGQpfWYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmLGFkZE1vZHVsZTpmdW5jdGlvbihkKXt2YXIgYz10aGlzLl9tb2R1bGVzW2QubmFtZV07aWYoYylmb3IodmFyIGIgaW4gZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCxiKSYmKGNbYl09ZFtiXSk7CmVsc2UgdGhpcy5fbW9kdWxlc1tkLm5hbWVdPWQ7dGhpcy5fcmVnaXN0ZXJDb25kaXRpb25hbE1vZHVsZShkKTtyZXR1cm4gdGhpcy5fbW9kdWxlc1tkLm5hbWVdfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29uZmlnfSxnZXRDb25kaXRpb25hbE1vZHVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29uZGl0aW9uYWxNb2R1bGVzfSxnZXRNb2R1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZHVsZXN9LG1hcE1vZHVsZTpmdW5jdGlvbihkLGMpe2lmKCF0aGlzLl9jb25maWcubWFwcyYmIWMpcmV0dXJuIGQ7dmFyIGI7Yj1BcnJheS5pc0FycmF5KGQpP2Q6W2RdO2MmJihiPWIubWFwKHRoaXMuX2dldE1vZHVsZU1hcHBlcihjKSkpO3RoaXMuX2NvbmZpZy5tYXBzJiYoYj1iLm1hcCh0aGlzLl9nZXRNb2R1bGVNYXBwZXIodGhpcy5fY29uZmlnLm1hcHMpKSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZCk/YjpiWzBdfSxfZ2V0TW9kdWxlTWFwcGVyOmZ1bmN0aW9uKGQpe3JldHVybiBmdW5jdGlvbihjKXt2YXIgYjsKKGI9dGhpcy5fbWFwRXhhY3RNYXRjaChjLGQpKXx8KGI9dGhpcy5fbWFwUGFydGlhbE1hdGNoKGMsZCkpO2J8fChiPXRoaXMuX21hcFdpbGRjYXJkTWF0Y2goYyxkKSk7cmV0dXJuIGJ8fGN9LmJpbmQodGhpcyl9LF9tYXBFeGFjdE1hdGNoOmZ1bmN0aW9uKGQsYyl7Zm9yKHZhciBiIGluIGMpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsYikpe3ZhciBnPWNbYl07aWYoZy52YWx1ZSYmZy5leGFjdE1hdGNoJiZkPT09YilyZXR1cm4gZy52YWx1ZX19LF9tYXBQYXJ0aWFsTWF0Y2g6ZnVuY3Rpb24oZCxjKXtmb3IodmFyIGIgaW4gYylpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxiKSl7dmFyIGc9Y1tiXTtpZighZy5leGFjdE1hdGNoJiYoZy52YWx1ZSYmKGc9Zy52YWx1ZSksZD09PWJ8fDA9PT1kLmluZGV4T2YoYisiLyIpKSlyZXR1cm4gZytkLnN1YnN0cmluZyhiLmxlbmd0aCl9fSxfbWFwV2lsZGNhcmRNYXRjaDpmdW5jdGlvbihkLApjKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGNbIioiXSlyZXR1cm4gY1siKiJdKGQpfSxfcGFyc2VDb25maWc6ZnVuY3Rpb24oZCl7Zm9yKHZhciBjIGluIGQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsYykmJigibW9kdWxlcyI9PT1jP3RoaXMuX3BhcnNlTW9kdWxlcyhkW2NdKTp0aGlzLl9jb25maWdbY109ZFtjXSk7cmV0dXJuIHRoaXMuX2NvbmZpZ30sX3BhcnNlTW9kdWxlczpmdW5jdGlvbihkKXtmb3IodmFyIGMgaW4gZClpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCxjKSl7dmFyIGI9ZFtjXTtiLm5hbWU9Yzt0aGlzLmFkZE1vZHVsZShiKX1yZXR1cm4gdGhpcy5fbW9kdWxlc30sX3JlZ2lzdGVyQ29uZGl0aW9uYWxNb2R1bGU6ZnVuY3Rpb24oZCl7aWYoZC5jb25kaXRpb24pe3ZhciBjPXRoaXMuX2NvbmRpdGlvbmFsTW9kdWxlc1tkLmNvbmRpdGlvbi50cmlnZ2VyXTtjfHwodGhpcy5fY29uZGl0aW9uYWxNb2R1bGVzW2QuY29uZGl0aW9uLnRyaWdnZXJdPQpjPVtdKTtjLnB1c2goZC5uYW1lKX19fTtyZXR1cm4gZn0pOyhmdW5jdGlvbih0LGYpe3ZhciBkPWYodCk7Im9iamVjdCI9PT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJihtb2R1bGUuZXhwb3J0cz1kKTsiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKGYpO3QuRGVwZW5kZW5jeUJ1aWxkZXI9ZH0pKCJ1bmRlZmluZWQiIT09dHlwZW9mIGE/YTp0aGlzLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoYyl7dGhpcy5fY29uZmlnUGFyc2VyPWM7dGhpcy5fcGF0aFJlc29sdmVyPW5ldyB0LlBhdGhSZXNvbHZlcjt0aGlzLl9yZXN1bHQ9W119dmFyIGQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZixyZXNvbHZlRGVwZW5kZW5jaWVzOmZ1bmN0aW9uKGMpe3RoaXMuX3F1ZXVlPWMuc2xpY2UoMCk7dmFyIGI7dHJ5e3RoaXMuX3Jlc29sdmVEZXBlbmRlbmNpZXMoKSxiPXRoaXMuX3Jlc3VsdC5yZXZlcnNlKCkuc2xpY2UoMCl9ZmluYWxseXt0aGlzLl9jbGVhbnVwKCl9cmV0dXJuIGJ9LApfY2xlYW51cDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuX2NvbmZpZ1BhcnNlci5nZXRNb2R1bGVzKCksYjtmb3IoYiBpbiBjKWlmKGQuY2FsbChjLGIpKXt2YXIgZz1jW2JdO2cuY29uZGl0aW9uYWxNYXJrPSExO2cubWFyaz0hMTtnLnRtcE1hcms9ITF9dGhpcy5fcXVldWUubGVuZ3RoPTA7dGhpcy5fcmVzdWx0Lmxlbmd0aD0wfSxfcHJvY2Vzc0NvbmRpdGlvbmFsTW9kdWxlczpmdW5jdGlvbihjKXt2YXIgYj10aGlzLl9jb25maWdQYXJzZXIuZ2V0Q29uZGl0aW9uYWxNb2R1bGVzKClbYy5uYW1lXTtpZihiJiYhYy5jb25kaXRpb25hbE1hcmspe2Zvcih2YXIgZz10aGlzLl9jb25maWdQYXJzZXIuZ2V0TW9kdWxlcygpLGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIGs9Z1tiW2VdXTstMT09PXRoaXMuX3F1ZXVlLmluZGV4T2Yoay5uYW1lKSYmdGhpcy5fdGVzdENvbmRpdGlvbmFsTW9kdWxlKGsuY29uZGl0aW9uLnRlc3QpJiZ0aGlzLl9xdWV1ZS5wdXNoKGsubmFtZSl9Yy5jb25kaXRpb25hbE1hcms9CiEwfX0sX3Jlc29sdmVEZXBlbmRlbmNpZXM6ZnVuY3Rpb24oKXtmb3IodmFyIGM9dGhpcy5fY29uZmlnUGFyc2VyLmdldE1vZHVsZXMoKSxiPTA7Yjx0aGlzLl9xdWV1ZS5sZW5ndGg7YisrKXt2YXIgZz1jW3RoaXMuX3F1ZXVlW2JdXTtnfHwoZz10aGlzLl9jb25maWdQYXJzZXIuYWRkTW9kdWxlKHtuYW1lOnRoaXMuX3F1ZXVlW2JdLGRlcGVuZGVuY2llczpbXX0pKTtnLm1hcmt8fHRoaXMuX3Zpc2l0KGcpfX0sX3Rlc3RDb25kaXRpb25hbE1vZHVsZTpmdW5jdGlvbihjKXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIGM/YygpOmV2YWwoImZhbHNlIHx8ICIrYykoKX0sX3Zpc2l0OmZ1bmN0aW9uKGMpe2lmKGMudG1wTWFyayl0aHJvdyBFcnJvcigiRXJyb3IgcHJvY2Vzc2luZyBtb2R1bGU6ICIrYy5uYW1lKyIuIFRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uIGlzIG5vdCBEaXJlY3RlZCBBY3ljbGljIEdyYXBoLiIpO3RoaXMuX3Byb2Nlc3NDb25kaXRpb25hbE1vZHVsZXMoYyk7aWYoIWMubWFyayl7Yy50bXBNYXJrPQohMDtmb3IodmFyIGI9dGhpcy5fY29uZmlnUGFyc2VyLmdldE1vZHVsZXMoKSxnPTA7ZzxjLmRlcGVuZGVuY2llcy5sZW5ndGg7ZysrKXt2YXIgZT1jLmRlcGVuZGVuY2llc1tnXTtpZigicmVxdWlyZSIhPT1lJiYiZXhwb3J0cyIhPT1lJiYibW9kdWxlIiE9PWUpe3ZhciBlPXRoaXMuX3BhdGhSZXNvbHZlci5yZXNvbHZlUGF0aChjLm5hbWUsZSksZT10aGlzLl9jb25maWdQYXJzZXIubWFwTW9kdWxlKGUsYy5tYXApLGs9YltlXTtrfHwoaz10aGlzLl9jb25maWdQYXJzZXIuYWRkTW9kdWxlKHtuYW1lOmUsZGVwZW5kZW5jaWVzOltdfSkpO3RoaXMuX3Zpc2l0KGspfX1jLm1hcms9ITA7Yy50bXBNYXJrPSExO3RoaXMuX3Jlc3VsdC51bnNoaWZ0KGMubmFtZSl9fSxfcXVldWU6W119O3JldHVybiBmfSk7KGZ1bmN0aW9uKHQsZil7dmFyIGQ9Zih0KTsib2JqZWN0Ij09PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmKG1vZHVsZS5leHBvcnRzPWQpOyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiYKZGVmaW5lLmFtZCYmZGVmaW5lKGYpO3QuVVJMQnVpbGRlcj1kfSkoInVuZGVmaW5lZCIhPT10eXBlb2YgYT9hOnRoaXMsZnVuY3Rpb24odCl7ZnVuY3Rpb24gZihjKXt0aGlzLl9jb25maWdQYXJzZXI9Y312YXIgZD0vXmh0dHBzPzpcL1wvfFwvXC98d3d3XC4vO2YucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmLGJ1aWxkOmZ1bmN0aW9uKGMpe3ZhciBiPVtdLGc9W10sZT1bXSxrPVtdLG09W10scD10aGlzLl9jb25maWdQYXJzZXIuZ2V0Q29uZmlnKCkscz1wLmJhc2VQYXRofHwiIixsPXRoaXMuX2NvbmZpZ1BhcnNlci5nZXRNb2R1bGVzKCk7cy5sZW5ndGgmJiIvIiE9PXMuY2hhckF0KHMubGVuZ3RoLTEpJiYocys9Ii8iKTtmb3IodmFyIGg9MDtoPGMubGVuZ3RoO2grKyl7dmFyIHU9bFtjW2hdXTtpZih1LmZ1bGxQYXRoKW0ucHVzaCh7bW9kdWxlczpbdS5uYW1lXSx1cmw6dGhpcy5fZ2V0VVJMV2l0aFBhcmFtcyh1LmZ1bGxQYXRoKX0pO2Vsc2V7dmFyIHc9dGhpcy5fZ2V0TW9kdWxlUGF0aCh1KSwKej0wPT09dy5pbmRleE9mKCIvIik7ZC50ZXN0KHcpP20ucHVzaCh7bW9kdWxlczpbdS5uYW1lXSx1cmw6dGhpcy5fZ2V0VVJMV2l0aFBhcmFtcyh3KX0pOiFwLmNvbWJpbmV8fHUuYW5vbnltb3VzP20ucHVzaCh7bW9kdWxlczpbdS5uYW1lXSx1cmw6dGhpcy5fZ2V0VVJMV2l0aFBhcmFtcyhwLnVybCsoej8iIjpzKSt3KX0pOno/KGIucHVzaCh3KSxlLnB1c2godS5uYW1lKSk6KGcucHVzaCh3KSxrLnB1c2godS5uYW1lKSl9dS5yZXF1ZXN0ZWQ9ITB9Zy5sZW5ndGgmJihtPW0uY29uY2F0KHRoaXMuX2dlbmVyYXRlQnVmZmVyVVJMcyhrLGcse2Jhc2VQYXRoOnMsdXJsOnAudXJsLHVybE1heExlbmd0aDpwLnVybE1heExlbmd0aH0pKSxnLmxlbmd0aD0wKTtiLmxlbmd0aCYmKG09bS5jb25jYXQodGhpcy5fZ2VuZXJhdGVCdWZmZXJVUkxzKGUsYix7dXJsOnAudXJsLHVybE1heExlbmd0aDpwLnVybE1heExlbmd0aH0pKSxiLmxlbmd0aD0wKTtyZXR1cm4gbX0sX2dlbmVyYXRlQnVmZmVyVVJMczpmdW5jdGlvbihjLApiLGcpe3ZhciBlLGs9Zy5iYXNlUGF0aHx8IiIsbT1bXSxwPWcudXJsTWF4TGVuZ3RofHwyRTMscz17bW9kdWxlczpbY1swXV0sdXJsOmcudXJsK2srYlswXX07Zm9yKGU9MTtlPGIubGVuZ3RoO2UrKyl7dmFyIGw9Y1tlXSxoPWJbZV07cy51cmwubGVuZ3RoK2subGVuZ3RoK2gubGVuZ3RoKzE8cD8ocy5tb2R1bGVzLnB1c2gobCkscy51cmwrPSJceDI2IitrK2gpOihtLnB1c2gocykscz17bW9kdWxlczpbbF0sdXJsOmcudXJsK2sraH0pfXMudXJsPXRoaXMuX2dldFVSTFdpdGhQYXJhbXMocy51cmwpO20ucHVzaChzKTtyZXR1cm4gbX0sX2dldE1vZHVsZVBhdGg6ZnVuY3Rpb24oYyl7dmFyIGI9Yy5wYXRofHxjLm5hbWUsZz10aGlzLl9jb25maWdQYXJzZXIuZ2V0Q29uZmlnKCkucGF0aHN8fHt9O09iamVjdC5rZXlzKGcpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoYj09PWV8fDA9PT1iLmluZGV4T2YoZSsiLyIpKWI9Z1tlXStiLnN1YnN0cmluZyhlLmxlbmd0aCl9KTsiZnVuY3Rpb24iPT09CnR5cGVvZiBnWyIqIl0mJihiPWdbIioiXShiKSk7ZC50ZXN0KGIpfHxiLmxhc3RJbmRleE9mKCIuanMiKT09PWIubGVuZ3RoLTN8fChiKz0iLmpzIik7cmV0dXJuIGJ9LF9nZXRVUkxXaXRoUGFyYW1zOmZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMuX2NvbmZpZ1BhcnNlci5nZXRDb25maWcoKS5kZWZhdWx0VVJMUGFyYW1zfHx7fSxnPU9iamVjdC5rZXlzKGIpO2lmKCFnLmxlbmd0aClyZXR1cm4gYztnPWcubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKyJceDNkIitiW2VdfSkuam9pbigiXHgyNiIpO3JldHVybiBjKygtMTxjLmluZGV4T2YoIj8iKT8iXHgyNiI6Ij8iKStnfX07cmV0dXJuIGZ9KTsoZnVuY3Rpb24odCxmKXt2YXIgZD1mKHQpOyJvYmplY3QiPT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9ZCk7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZShmKTt0LlBhdGhSZXNvbHZlcj1kfSkoInVuZGVmaW5lZCIhPT10eXBlb2YgYT8KYTp0aGlzLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoKXt9Zi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYscmVzb2x2ZVBhdGg6ZnVuY3Rpb24oZCxjKXtpZigicmVxdWlyZSI9PT1jfHwiZXhwb3J0cyI9PT1jfHwibW9kdWxlIj09PWN8fDAhPT1jLmluZGV4T2YoIi4iKSYmMCE9PWMuaW5kZXhPZigiLi4iKSlyZXR1cm4gYzt2YXIgYj1kLnNwbGl0KCIvIik7Yi5zcGxpY2UoLTEsMSk7Zm9yKHZhciBnPWMuc3BsaXQoIi8iKSxlPWcuc3BsaWNlKC0xLDEpLGs9MDtrPGcubGVuZ3RoO2srKyl7dmFyIG09Z1trXTtpZigiLiIhPT1tKWlmKCIuLiI9PT1tKWlmKGIubGVuZ3RoKWIuc3BsaWNlKC0xLDEpO2Vsc2V7Yj1iLmNvbmNhdChnLnNsaWNlKGspKTticmVha31lbHNlIGIucHVzaChtKX1iLnB1c2goZSk7cmV0dXJuIGIuam9pbigiLyIpfX07cmV0dXJuIGZ9KTsoZnVuY3Rpb24odCxmKXt2YXIgZD1mKHQpOyJvYmplY3QiPT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9CmQpOyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoZik7dC5Mb2FkZXI9bmV3IGQ7dC5yZXF1aXJlPXQuTG9hZGVyLnJlcXVpcmUuYmluZCh0LkxvYWRlcik7dC5kZWZpbmU9dC5Mb2FkZXIuZGVmaW5lLmJpbmQodC5Mb2FkZXIpO3QuZGVmaW5lLmFtZD17fX0pKCJ1bmRlZmluZWQiIT09dHlwZW9mIGE/YTp0aGlzLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoYyl7Zi5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9jb25maWc9Y3x8dC5fX0NPTkZJR19fO3RoaXMuX21vZHVsZXNNYXA9e319Zi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LkV2ZW50RW1pdHRlci5wcm90b3R5cGUpO2YucHJvdG90eXBlLmNvbnN0cnVjdG9yPWY7Zi5zdXBlcmNsYXNzPXQuRXZlbnRFbWl0dGVyLnByb3RvdHlwZTt2YXIgZD17YWRkTW9kdWxlOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9nZXRDb25maWdQYXJzZXIoKS5hZGRNb2R1bGUoYyl9LApkZWZpbmU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGI9YXJndW1lbnRzWzBdLGc9YXJndW1lbnRzWzFdLGU9YXJndW1lbnRzWzJdLGs9YXJndW1lbnRzWzNdfHx7fTtrLmFub255bW91cz0hMTt2YXIgbT1hcmd1bWVudHMubGVuZ3RoOzI+bT8oZT1hcmd1bWVudHNbMF0sZz1bIm1vZHVsZSIsImV4cG9ydHMiXSxrLmFub255bW91cz0hMCk6Mj09PW0mJigic3RyaW5nIj09PXR5cGVvZiBiPyhnPVsibW9kdWxlIiwiZXhwb3J0cyJdLGU9YXJndW1lbnRzWzFdKTooZz1hcmd1bWVudHNbMF0sZT1hcmd1bWVudHNbMV0say5hbm9ueW1vdXM9ITApKTtpZihrLmFub255bW91cyl7dmFyIHA9ZnVuY3Rpb24ocyl7Yy5vZmYoInNjcmlwdExvYWRlZCIscCk7aWYoMSE9PXMubGVuZ3RoKWMuX3JlcG9ydE1pc21hdGNoZWRBbm9ueW1vdXNNb2R1bGVzKGUudG9TdHJpbmcoKSk7ZWxzZXtzPXNbMF07dmFyIGw9Yy5nZXRNb2R1bGVzKClbc107bCYmbC5wZW5kaW5nSW1wbGVtZW50YXRpb24mJmMuX3JlcG9ydE1pc21hdGNoZWRBbm9ueW1vdXNNb2R1bGVzKGUudG9TdHJpbmcoKSk7CmMuX2RlZmluZShzLGcsZSxrKX19O2Mub24oInNjcmlwdExvYWRlZCIscCl9ZWxzZSB0aGlzLl9kZWZpbmUoYixnLGUsayl9LGdldENvbmRpdGlvbmFsTW9kdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRDb25maWdQYXJzZXIoKS5nZXRDb25kaXRpb25hbE1vZHVsZXMoKX0sZ2V0TW9kdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRDb25maWdQYXJzZXIoKS5nZXRNb2R1bGVzKCl9LHJlcXVpcmU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGIsZyxlLGs7aWYoQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMF0pKWU9YXJndW1lbnRzWzBdLGs9ImZ1bmN0aW9uIj09PXR5cGVvZiBhcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsYj0iZnVuY3Rpb24iPT09dHlwZW9mIGFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtlbHNlIGZvcihlPVtdLGc9MDtnPGFyZ3VtZW50cy5sZW5ndGg7KytnKWlmKCJzdHJpbmciPT09dHlwZW9mIGFyZ3VtZW50c1tnXSllW2ddPWFyZ3VtZW50c1tnXTsKZWxzZSBpZigiZnVuY3Rpb24iPT09dHlwZW9mIGFyZ3VtZW50c1tnXSl7az1hcmd1bWVudHNbZ107Yj0iZnVuY3Rpb24iPT09dHlwZW9mIGFyZ3VtZW50c1srK2ddP2FyZ3VtZW50c1tnXTpudWxsO2JyZWFrfXZhciBtPWMuX2dldENvbmZpZ1BhcnNlcigpLHA9bS5tYXBNb2R1bGUoZSksczsobmV3IFByb21pc2UoZnVuY3Rpb24obCxoKXtjLl9yZXNvbHZlRGVwZW5kZW5jaWVzKHApLnRoZW4oZnVuY3Rpb24odSl7Yy5fbG9nKCJSZXNvbHZlZCBtb2R1bGVzOiIscCwidG86Iix1KTt2YXIgdz11LmZpbHRlcihmdW5jdGlvbih6KXtyZXR1cm4gMD09PXouaW5kZXhPZigiOkVSUk9SOiIpfSkubWFwKGZ1bmN0aW9uKHope3JldHVybiB6LnN1YnN0cig3KX0pOzA8dy5sZW5ndGgmJmgoRXJyb3IoIlRoZSBmb2xsb3dpbmcgcHJvYmxlbXMgd2hlcmUgZGV0ZWN0ZWQgd2hpbGUgcmVzb2x2aW5nIG1vZHVsZXM6XG4iK3cuam9pbigiXG4iKSkpO3c9bS5nZXRDb25maWcoKTswIT09dy53YWl0VGltZW91dCYmCihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgej1tLmdldE1vZHVsZXMoKSxBPUVycm9yKCJMb2FkIHRpbWVvdXQgZm9yIG1vZHVsZXM6ICIrZSk7QS5kZXBlbmRlbmNpZXM9dTtBLm1hcHBlZE1vZHVsZXM9cDtBLm1pc3NpbmdEZXBlbmRlbmNpZXM9dS5maWx0ZXIoZnVuY3Rpb24oSCl7cmV0dXJuInVuZGVmaW5lZCI9PT10eXBlb2YgeltIXS5pbXBsZW1lbnRhdGlvbn0pO0EubW9kdWxlcz1lO0EuZGVwZW5kZWNpZXM9QS5kZXBlbmRlbmNpZXM7aChBKX0sdy53YWl0VGltZW91dHx8N0UzKSk7Yy5fbG9hZE1vZHVsZXModSkudGhlbihsLGgpfSxoKX0pKS50aGVuKGZ1bmN0aW9uKGwpe2NsZWFyVGltZW91dChzKTtrJiYobD1jLl9nZXRNb2R1bGVJbXBsZW1lbnRhdGlvbnMocCksay5hcHBseShrLGwpKX0sZnVuY3Rpb24obCl7Y2xlYXJUaW1lb3V0KHMpO2I/Yi5jYWxsKGIsbCk6Yy5fZXJyb3IoIlVuaGFuZGxlZCBmYWlsdXJlOiIsbCwid2hpbGUgcmVzb2x2aW5nIG1vZHVsZXM6IiwKcCl9KX0sX2NyZWF0ZU1vZHVsZVByb21pc2U6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZyxlKXt2YXIgaz1iLl9nZXRDb25maWdQYXJzZXIoKS5nZXRNb2R1bGVzKClbY107aWYoay5leHBvcnRzKXt2YXIgbT1iLl9nZXRWYWx1ZUdsb2JhbE5TKGsuZXhwb3J0cyk7aWYobSlnKG0pO2Vsc2V7dmFyIHA9ZnVuY3Rpb24obCl7MDw9bC5pbmRleE9mKGMpJiYoYi5vZmYoInNjcmlwdExvYWRlZCIscCksKGw9Yi5fZ2V0VmFsdWVHbG9iYWxOUyhrLmV4cG9ydHMpKT9nKGwpOmUoRXJyb3IoIk1vZHVsZSAiK2MrIiBkb2VzIG5vdCBleHBvcnQgdGhlIHNwZWNpZmllZCB2YWx1ZTogIitrLmV4cG9ydHMpKSl9O2Iub24oInNjcmlwdExvYWRlZCIscCl9fWVsc2V7dmFyIHM9ZnVuY3Rpb24obCl7bD09PWMmJihiLm9mZigibW9kdWxlUmVnaXN0ZXIiLHMpLGIuX21vZHVsZXNNYXBbY109ITAsZyhjKSl9O2Iub24oIm1vZHVsZVJlZ2lzdGVyIixzKX19KX0sCl9kZWZpbmU6ZnVuY3Rpb24oYyxiLGcsZSl7ZT1lfHx7fTt2YXIgaz10aGlzLl9nZXRDb25maWdQYXJzZXIoKTtpZihrLmdldENvbmZpZygpLmlnbm9yZU1vZHVsZVZlcnNpb24pe3ZhciBtPWMuc3BsaXQoIi8iKSxwPW1bMF0uc3BsaXQoIkAiKTttWzBdPXBbMF07Yz1tLmpvaW4oIi8iKX12YXIgcz10aGlzLl9nZXRQYXRoUmVzb2x2ZXIoKTtiPWIubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBzLnJlc29sdmVQYXRoKGMsbCl9KTtlLm5hbWU9YztlLmRlcGVuZGVuY2llcz1iO2UucGVuZGluZ0ltcGxlbWVudGF0aW9uPWc7ay5hZGRNb2R1bGUoZSk7dGhpcy5fbW9kdWxlc01hcFtlLm5hbWVdfHwodGhpcy5fbW9kdWxlc01hcFtlLm5hbWVdPSEwKTt0aGlzLmVtaXQoIm1vZHVsZVJlZ2lzdGVyIixjKX0sX2dldENvbmZpZ1BhcnNlcjpmdW5jdGlvbigpe3RoaXMuX2NvbmZpZ1BhcnNlcnx8KHRoaXMuX2NvbmZpZ1BhcnNlcj1uZXcgdC5Db25maWdQYXJzZXIodGhpcy5fY29uZmlnKSk7cmV0dXJuIHRoaXMuX2NvbmZpZ1BhcnNlcn0sCl9nZXREZXBlbmRlbmN5QnVpbGRlcjpmdW5jdGlvbigpe3RoaXMuX2RlcGVuZGVuY3lCdWlsZGVyfHwodGhpcy5fZGVwZW5kZW5jeUJ1aWxkZXI9bmV3IHQuRGVwZW5kZW5jeUJ1aWxkZXIodGhpcy5fZ2V0Q29uZmlnUGFyc2VyKCkpKTtyZXR1cm4gdGhpcy5fZGVwZW5kZW5jeUJ1aWxkZXJ9LF9nZXRWYWx1ZUdsb2JhbE5TOmZ1bmN0aW9uKGMpe2M9Yy5zcGxpdCgiLiIpO2Zvcih2YXIgYj0oMCxldmFsKSgidGhpcyIpW2NbMF1dLGc9MTtiJiZnPGMubGVuZ3RoO2crKylpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYixjW2ddKSliPWJbY1tnXV07ZWxzZSByZXR1cm4gbnVsbDtyZXR1cm4gYn0sX2dldE1pc3NpbmdEZXBlbmRlbmNpZXM6ZnVuY3Rpb24oYyl7Zm9yKHZhciBiPXRoaXMuX2dldENvbmZpZ1BhcnNlcigpLGc9Yi5nZXRNb2R1bGVzKCksZT1PYmplY3QuY3JlYXRlKG51bGwpLGs9MDtrPGMubGVuZ3RoO2srKylmb3IodmFyIG09Z1tjW2tdXSxtPWIubWFwTW9kdWxlKG0uZGVwZW5kZW5jaWVzLAptLm1hcCkscD0wO3A8bS5sZW5ndGg7cCsrKXt2YXIgcz1tW3BdLGw9Z1tzXTsicmVxdWlyZSI9PT1zfHwiZXhwb3J0cyI9PT1zfHwibW9kdWxlIj09PXN8fGwmJmwucGVuZGluZ0ltcGxlbWVudGF0aW9ufHwoZVtzXT0xKX1yZXR1cm4gT2JqZWN0LmtleXMoZSl9LF9nZXRNb2R1bGVJbXBsZW1lbnRhdGlvbnM6ZnVuY3Rpb24oYyl7Zm9yKHZhciBiPVtdLGc9dGhpcy5fZ2V0Q29uZmlnUGFyc2VyKCkuZ2V0TW9kdWxlcygpLGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGs9Z1tjW2VdXTtiLnB1c2goaz9rLmltcGxlbWVudGF0aW9uOnZvaWQgMCl9cmV0dXJuIGJ9LF9nZXRQYXRoUmVzb2x2ZXI6ZnVuY3Rpb24oKXt0aGlzLl9wYXRoUmVzb2x2ZXJ8fCh0aGlzLl9wYXRoUmVzb2x2ZXI9bmV3IHQuUGF0aFJlc29sdmVyKTtyZXR1cm4gdGhpcy5fcGF0aFJlc29sdmVyfSxfZ2V0VVJMQnVpbGRlcjpmdW5jdGlvbigpe3RoaXMuX3VybEJ1aWxkZXJ8fCh0aGlzLl91cmxCdWlsZGVyPW5ldyB0LlVSTEJ1aWxkZXIodGhpcy5fZ2V0Q29uZmlnUGFyc2VyKCkpKTsKcmV0dXJuIHRoaXMuX3VybEJ1aWxkZXJ9LF9maWx0ZXJNb2R1bGVzQnlQcm9wZXJ0eTpmdW5jdGlvbihjLGIpe3ZhciBnPWI7InN0cmluZyI9PT10eXBlb2YgYiYmKGc9W2JdKTtmb3IodmFyIGU9W10saz10aGlzLl9nZXRDb25maWdQYXJzZXIoKS5nZXRNb2R1bGVzKCksbT0wO208Yy5sZW5ndGg7bSsrKXt2YXIgcD1jW21dLHM9a1tjW21dXTtpZighcyllLnB1c2gocCk7ZWxzZSBpZigicmVxdWlyZSIhPT1zJiYiZXhwb3J0cyIhPT1zJiYibW9kdWxlIiE9PXMpe2Zvcih2YXIgbD0wLGg9MDtoPGcubGVuZ3RoO2grKylpZihzW2dbaF1dKXtsPSEwO2JyZWFrfWx8fGUucHVzaChwKX19cmV0dXJuIGV9LF9sb2FkTW9kdWxlczpmdW5jdGlvbihjKXt2YXIgYj10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihnLGUpe3ZhciBrPWIuX2ZpbHRlck1vZHVsZXNCeVByb3BlcnR5KGMsWyJyZXF1ZXN0ZWQiLCJwZW5kaW5nSW1wbGVtZW50YXRpb24iXSk7aWYoay5sZW5ndGgpe2Zvcih2YXIgaz0KYi5fZ2V0VVJMQnVpbGRlcigpLmJ1aWxkKGspLG09W10scD0wO3A8ay5sZW5ndGg7cCsrKW0ucHVzaChiLl9sb2FkU2NyaXB0KGtbcF0pKTtQcm9taXNlLmFsbChtKS50aGVuKGZ1bmN0aW9uKHMpe3JldHVybiBiLl93YWl0Rm9yTW9kdWxlcyhjKX0pLnRoZW4oZnVuY3Rpb24ocyl7ZyhzKX0pLmNhdGNoKGZ1bmN0aW9uKHMpe2Uocyl9KX1lbHNlIGIuX3dhaXRGb3JNb2R1bGVzKGMpLnRoZW4oZnVuY3Rpb24ocyl7ZyhzKX0pLmNhdGNoKGZ1bmN0aW9uKHMpe2Uocyl9KX0pfSxfbG9hZFNjcmlwdDpmdW5jdGlvbihjKXt2YXIgYj10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihnLGUpe3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2suc3JjPWMudXJsO2suYXN5bmM9ITE7ay5vbmxvYWQ9ay5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLnJlYWR5U3RhdGUmJiJjb21wbGV0ZSIhPT10aGlzLnJlYWR5U3RhdGUmJiJsb2FkIiE9PXRoaXMucmVhZHlTdGF0ZXx8CihrLm9ubG9hZD1rLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGcoayksYi5lbWl0KCJzY3JpcHRMb2FkZWQiLGMubW9kdWxlcykpfTtrLm9uZXJyb3I9ZnVuY3Rpb24oKXtkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGspO2Uoayl9O2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoayl9KX0sX2xvZzpmdW5jdGlvbigpe3ZhciBjPWNvbnNvbGUsYj0xPT09YXJndW1lbnRzLmxlbmd0aD9bYXJndW1lbnRzWzBdXTpBcnJheS5hcHBseShudWxsLGFyZ3VtZW50cyk7dGhpcy5fZ2V0Q29uZmlnUGFyc2VyKCkuZ2V0Q29uZmlnKCkuZXhwbGFpblJlc29sdXRpb25zJiZjLmxvZy5hcHBseShjLFsiTGlmZXJheSBBTUQgTG9hZGVyOiJdLmNvbmNhdChiKSl9LF9lcnJvcjpmdW5jdGlvbigpe3ZhciBjPWNvbnNvbGUsYj0xPT09YXJndW1lbnRzLmxlbmd0aD9bYXJndW1lbnRzWzBdXTpBcnJheS5hcHBseShudWxsLGFyZ3VtZW50cyk7Yy5sb2cuYXBwbHkoYyxbIkxpZmVyYXkgQU1EIExvYWRlcjoiXS5jb25jYXQoYikpfSwKX3Jlc29sdmVEZXBlbmRlbmNpZXM6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZyxlKXt0cnl7dmFyIGs9Yi5fZ2V0RGVwZW5kZW5jeUJ1aWxkZXIoKS5yZXNvbHZlRGVwZW5kZW5jaWVzKGMpO2coayl9Y2F0Y2gobSl7ZShtKX19KX0sX3JlcG9ydE1pc21hdGNoZWRBbm9ueW1vdXNNb2R1bGVzOmZ1bmN0aW9uKGMpe2M9Ik1pc21hdGNoZWQgYW5vbnltb3VzIGRlZmluZSgpIG1vZHVsZTogIitjO3ZhciBiPXRoaXMuX2NvbmZpZy5yZXBvcnRNaXNtYXRjaGVkQW5vbnltb3VzTW9kdWxlcztpZihiJiYiZXhjZXB0aW9uIiE9PWIpY29uc29sZSYmY29uc29sZVtiXSYmY29uc29sZVtiXS5jYWxsKGNvbnNvbGUsYyk7ZWxzZSB0aHJvdyBFcnJvcihjKTt9LF9zZXRNb2R1bGVJbXBsZW1lbnRhdGlvbjpmdW5jdGlvbihjKXtmb3IodmFyIGI9dGhpcyxnPXRoaXMuX2dldENvbmZpZ1BhcnNlcigpLmdldE1vZHVsZXMoKSxlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBrPQpjW2VdO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGsuaW1wbGVtZW50YXRpb24paWYoInVuZGVmaW5lZCIhPT10eXBlb2Ygay5leHBvcnRzKWsucGVuZGluZ0ltcGxlbWVudGF0aW9uPWsuaW1wbGVtZW50YXRpb249dGhpcy5fZ2V0VmFsdWVHbG9iYWxOUyhrLmV4cG9ydHMpO2Vsc2V7Zm9yKHZhciBtPVtdLHA9e2V4cG9ydHM6e319LHM9Yi5fZ2V0Q29uZmlnUGFyc2VyKCksbD0wO2w8ay5kZXBlbmRlbmNpZXMubGVuZ3RoO2wrKyl7dmFyIGg9ay5kZXBlbmRlbmNpZXNbbF07ImV4cG9ydHMiPT09aD9tLnB1c2gocC5leHBvcnRzKToibW9kdWxlIj09PWg/bS5wdXNoKHApOigicmVxdWlyZSI9PT1oPyhoPWIuX2NyZWF0ZUxvY2FsUmVxdWlyZShrKSxoLnRvVXJsPWZ1bmN0aW9uKHUpe3JldHVybiBiLl9nZXRVUkxCdWlsZGVyKCkuYnVpbGQoW3VdKVswXS51cmx9KTpoPWdbcy5tYXBNb2R1bGUoaCxrLm1hcCldLmltcGxlbWVudGF0aW9uLG0ucHVzaChoKSl9bT0iZnVuY3Rpb24iPT09dHlwZW9mIGsucGVuZGluZ0ltcGxlbWVudGF0aW9uPwprLnBlbmRpbmdJbXBsZW1lbnRhdGlvbi5hcHBseShrLnBlbmRpbmdJbXBsZW1lbnRhdGlvbixtKTprLnBlbmRpbmdJbXBsZW1lbnRhdGlvbjtrLmltcGxlbWVudGF0aW9uPSJ1bmRlZmluZWQiIT09dHlwZW9mIG0/bTpwLmV4cG9ydHN9fX0sX2NyZWF0ZUxvY2FsUmVxdWlyZTpmdW5jdGlvbihjKXt2YXIgYj10aGlzLl9nZXRDb25maWdQYXJzZXIoKSxnPXRoaXMuX2dldFBhdGhSZXNvbHZlcigpO3JldHVybiBmdW5jdGlvbihlKXtpZigxPGFyZ3VtZW50cy5sZW5ndGgpdC5yZXF1aXJlLmFwcGx5KHQuTG9hZGVyLGFyZ3VtZW50cyk7ZWxzZXtlPWcucmVzb2x2ZVBhdGgoYy5uYW1lLGUpO2U9Yi5tYXBNb2R1bGUoZSxjLm1hcCk7dmFyIGs9Yi5nZXRNb2R1bGVzKClbZV07aWYoIWt8fCJ1bmRlZmluZWQiPT09dHlwZW9mIGsuaW1wbGVtZW50YXRpb24pdGhyb3cgRXJyb3IoJ01vZHVsZSAiJytlKyciIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0IGZvciBjb250ZXh0OiAnK2MubmFtZSk7cmV0dXJuIGsuaW1wbGVtZW50YXRpb259fX0sCl93YWl0Rm9yTW9kdWxlOmZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMuX21vZHVsZXNNYXBbY107Ynx8KGI9dGhpcy5fY3JlYXRlTW9kdWxlUHJvbWlzZShjKSx0aGlzLl9tb2R1bGVzTWFwW2NdPWIpO3JldHVybiBifSxfd2FpdEZvck1vZHVsZXM6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZyxlKXtmb3IodmFyIGs9W10sbT0wO208Yy5sZW5ndGg7bSsrKWsucHVzaChiLl93YWl0Rm9yTW9kdWxlKGNbbV0pKTtQcm9taXNlLmFsbChrKS50aGVuKGZ1bmN0aW9uKHApe3ZhciBzPWIuX2dldENvbmZpZ1BhcnNlcigpLmdldE1vZHVsZXMoKTtwPWZ1bmN0aW9uKCl7Zm9yKHZhciBoPVtdLHU9MDt1PGMubGVuZ3RoO3UrKyloLnB1c2goc1tjW3VdXSk7Yi5fc2V0TW9kdWxlSW1wbGVtZW50YXRpb24oaCk7ZyhoKX07dmFyIGw9Yi5fZ2V0TWlzc2luZ0RlcGVuZGVuY2llcyhjKTtsLmxlbmd0aD9iLnJlcXVpcmUobCxwLGUpOnAoKX0sZSl9KX19O09iamVjdC5rZXlzKGQpLmZvckVhY2goZnVuY3Rpb24oYyl7Zi5wcm90b3R5cGVbY109CmRbY119KTtmLnByb3RvdHlwZS5kZWZpbmUuYW1kPXt9O3JldHVybiBmfSk7dmFyIEU9bnVsbCxxPSEwOyJvYmplY3QiPT09dHlwZW9mIGEuX19DT05GSUdfXyYmKCJzdHJpbmciPT09dHlwZW9mIGEuX19DT05GSUdfXy5uYW1lc3BhY2UmJihFPWEuX19DT05GSUdfXy5uYW1lc3BhY2UpLCJib29sZWFuIj09PXR5cGVvZiBhLl9fQ09ORklHX18uZXhwb3NlR2xvYmFsJiYocT1hLl9fQ09ORklHX18uZXhwb3NlR2xvYmFsKSk7RT8oRT13aW5kb3dbYS5fX0NPTkZJR19fLm5hbWVzcGFjZV0/d2luZG93W2EuX19DT05GSUdfXy5uYW1lc3BhY2VdOnt9LEUuTG9hZGVyPWEuTG9hZGVyLHdpbmRvd1thLl9fQ09ORklHX18ubmFtZXNwYWNlXT1FKTp3aW5kb3cuTG9hZGVyPWEuTG9hZGVyO3EmJih3aW5kb3cuTG9hZGVyPWEuTG9hZGVyLHdpbmRvdy5yZXF1aXJlPWEucmVxdWlyZSx3aW5kb3cuZGVmaW5lPWEuZGVmaW5lKTthLkxvYWRlci52ZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIjIuMy4wIn19KSgpOwooZnVuY3Rpb24oKXsidW5kZWZpbmVkIj09PXR5cGVvZiB3aW5kb3cuUHJvbWlzZSYmInVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93LkVTNlByb21pc2UmJih3aW5kb3cuUHJvbWlzZT13aW5kb3cuRVM2UHJvbWlzZSl9KSgpOwooZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHJhLFQpe2lmKHJhIT09VCl7dmFyICRhPW51bGw9PT1yYSxvYj1yYT09PUgsUWE9cmE9PT1yYSxmYz1udWxsPT09VCxLYz1UPT09SCx1Yz1UPT09VDtpZihyYT5UJiYhZmN8fCFRYXx8JGEmJiFLYyYmdWN8fG9iJiZ1YylyZXR1cm4gMTtpZihyYTxUJiYhJGF8fCF1Y3x8ZmMmJiFvYiYmUWF8fEtjJiZRYSlyZXR1cm4tMX1yZXR1cm4gMH1mdW5jdGlvbiBFKHJhLFQsJGEpe2Zvcih2YXIgb2I9cmEubGVuZ3RoLFFhPSRhP29iOi0xOyRhP1FhLS06KytRYTxvYjspaWYoVChyYVtRYV0sUWEscmEpKXJldHVybiBRYTtyZXR1cm4tMX1mdW5jdGlvbiBxKHJhLFQsJGEpe2lmKFQhPT1UKXJldHVybiBwKHJhLCRhKTskYS09MTtmb3IodmFyIG9iPXJhLmxlbmd0aDsrKyRhPG9iOylpZihyYVskYV09PT1UKXJldHVybiAkYTtyZXR1cm4tMX1mdW5jdGlvbiB0KHJhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgcmF8fCExfWZ1bmN0aW9uIGYocmEpe3JldHVybiBudWxsPT0KcmE/IiI6cmErIiJ9ZnVuY3Rpb24gZChyYSxUKXtmb3IodmFyICRhPS0xLG9iPXJhLmxlbmd0aDsrKyRhPG9iJiYtMTxULmluZGV4T2YocmEuY2hhckF0KCRhKSk7KTtyZXR1cm4gJGF9ZnVuY3Rpb24gYyhyYSxUKXtmb3IodmFyICRhPXJhLmxlbmd0aDskYS0tJiYtMTxULmluZGV4T2YocmEuY2hhckF0KCRhKSk7KTtyZXR1cm4gJGF9ZnVuY3Rpb24gYihyYSxUKXtyZXR1cm4gYShyYS5jcml0ZXJpYSxULmNyaXRlcmlhKXx8cmEuaW5kZXgtVC5pbmRleH1mdW5jdGlvbiBnKHJhKXtyZXR1cm4gTWVbcmFdfWZ1bmN0aW9uIGUocmEpe3JldHVybiBrZVtyYV19ZnVuY3Rpb24gayhyYSxULCRhKXtUP3JhPWFkW3JhXTokYSYmKHJhPXpjW3JhXSk7cmV0dXJuIlxcIityYX1mdW5jdGlvbiBtKHJhKXtyZXR1cm4iXFwiK3pjW3JhXX1mdW5jdGlvbiBwKHJhLFQsJGEpe3ZhciBvYj1yYS5sZW5ndGg7Zm9yKFQrPSRhPzA6LTE7JGE/VC0tOisrVDxvYjspe3ZhciBRYT1yYVtUXTtpZihRYSE9PVFhKXJldHVybiBUfXJldHVybi0xfQpmdW5jdGlvbiBzKHJhKXtyZXR1cm4hIXJhJiYib2JqZWN0Ij09dHlwZW9mIHJhfWZ1bmN0aW9uIGwocmEpe3JldHVybiAxNjA+PXJhJiY5PD1yYSYmMTM+PXJhfHwzMj09cmF8fDE2MD09cmF8fDU3NjA9PXJhfHw2MTU4PT1yYXx8ODE5Mjw9cmEmJig4MjAyPj1yYXx8ODIzMj09cmF8fDgyMzM9PXJhfHw4MjM5PT1yYXx8ODI4Nz09cmF8fDEyMjg4PT1yYXx8NjUyNzk9PXJhKX1mdW5jdGlvbiBoKHJhLFQpe2Zvcih2YXIgJGE9LTEsb2I9cmEubGVuZ3RoLFFhPS0xLGZjPVtdOysrJGE8b2I7KXJhWyRhXT09PVQmJihyYVskYV09RWEsZmNbKytRYV09JGEpO3JldHVybiBmY31mdW5jdGlvbiB1KHJhKXtmb3IodmFyIFQ9LTEsJGE9cmEubGVuZ3RoOysrVDwkYSYmbChyYS5jaGFyQ29kZUF0KFQpKTspO3JldHVybiBUfWZ1bmN0aW9uIHcocmEpe2Zvcih2YXIgVD1yYS5sZW5ndGg7VC0tJiZsKHJhLmNoYXJDb2RlQXQoVCkpOyk7cmV0dXJuIFR9ZnVuY3Rpb24geihyYSl7cmV0dXJuIFdjW3JhXX0KZnVuY3Rpb24gQShyYSl7ZnVuY3Rpb24gVChuKXtpZihzKG4pJiYhKGNiKG4pfHxuIGluc3RhbmNlb2YgUWEpKXtpZihuIGluc3RhbmNlb2Ygb2IpcmV0dXJuIG47aWYoSGIuY2FsbChuLCJfX2NoYWluX18iKSYmSGIuY2FsbChuLCJfX3dyYXBwZWRfXyIpKXJldHVybiBiZShuKX1yZXR1cm4gbmV3IG9iKG4pfWZ1bmN0aW9uICRhKCl7fWZ1bmN0aW9uIG9iKG4sdix4KXt0aGlzLl9fd3JhcHBlZF9fPW47dGhpcy5fX2FjdGlvbnNfXz14fHxbXTt0aGlzLl9fY2hhaW5fXz0hIXZ9ZnVuY3Rpb24gUWEobil7dGhpcy5fX3dyYXBwZWRfXz1uO3RoaXMuX19hY3Rpb25zX189W107dGhpcy5fX2Rpcl9fPTE7dGhpcy5fX2ZpbHRlcmVkX189ITE7dGhpcy5fX2l0ZXJhdGVlc19fPVtdO3RoaXMuX190YWtlQ291bnRfXz13ZTt0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBmYygpe3RoaXMuX19kYXRhX189e319ZnVuY3Rpb24gS2Mobil7dmFyIHY9bj9uLmxlbmd0aDowO2Zvcih0aGlzLmRhdGE9CntoYXNoOnhlKG51bGwpLHNldDpuZXcgeWV9O3YtLTspdGhpcy5wdXNoKG5bdl0pfWZ1bmN0aW9uIHVjKG4sdil7dmFyIHg9bi5kYXRhO3JldHVybigic3RyaW5nIj09dHlwZW9mIHZ8fERhKHYpP3guc2V0Lmhhcyh2KTp4Lmhhc2hbdl0pPzA6LTF9ZnVuY3Rpb24gTGIobix2KXt2YXIgeD0tMSxHPW4ubGVuZ3RoO2Zvcih2fHwodj11YihHKSk7Kyt4PEc7KXZbeF09blt4XTtyZXR1cm4gdn1mdW5jdGlvbiBWYihuLHYpe2Zvcih2YXIgeD0tMSxHPW4ubGVuZ3RoOysreDxHJiYhMSE9PXYoblt4XSx4LG4pOyk7cmV0dXJuIG59ZnVuY3Rpb24gWGMobix2KXtmb3IodmFyIHg9LTEsRz1uLmxlbmd0aDsrK3g8RzspaWYoIXYoblt4XSx4LG4pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEFkKG4sdil7Zm9yKHZhciB4PS0xLEc9bi5sZW5ndGgsTz0tMSxVPVtdOysreDxHOyl7dmFyIGFhPW5beF07dihhYSx4LG4pJiYoVVsrK09dPWFhKX1yZXR1cm4gVX1mdW5jdGlvbiBDYyhuLHYpe2Zvcih2YXIgeD0KLTEsRz1uLmxlbmd0aCxPPXViKEcpOysreDxHOylPW3hdPXYoblt4XSx4LG4pO3JldHVybiBPfWZ1bmN0aW9uIFJjKG4sdil7Zm9yKHZhciB4PS0xLEc9di5sZW5ndGgsTz1uLmxlbmd0aDsrK3g8RzspbltPK3hdPXZbeF07cmV0dXJuIG59ZnVuY3Rpb24gQmQobix2LHgsRyl7dmFyIE89LTEsVT1uLmxlbmd0aDtmb3IoRyYmVSYmKHg9blsrK09dKTsrK088VTspeD12KHgsbltPXSxPLG4pO3JldHVybiB4fWZ1bmN0aW9uIG1lKG4sdil7Zm9yKHZhciB4PS0xLEc9bi5sZW5ndGg7Kyt4PEc7KWlmKHYoblt4XSx4LG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE1kKG4sdix4LEcpe3JldHVybiBuIT09SCYmSGIuY2FsbChHLHgpP246dn1mdW5jdGlvbiBOZChuLHYseCl7Zm9yKHZhciBHPS0xLE89VGIodiksVT1PLmxlbmd0aDsrK0c8VTspe3ZhciBhYT1PW0ddLGNhPW5bYWFdLGxhPXgoY2EsdlthYV0sYWEsbix2KTsobGE9PT1sYT9sYT09PWNhOmNhIT09Y2EpJiYoY2EhPT1IfHxhYSBpbgpuKXx8KG5bYWFdPWxhKX1yZXR1cm4gbn1mdW5jdGlvbiBVYyhuLHYpe3JldHVybiBudWxsPT12P246WWModixUYih2KSxuKX1mdW5jdGlvbiBEYyhuLHYpe2Zvcih2YXIgeD0tMSxHPW51bGw9PW4sTz0hRyYmRmIobiksVT1PP24ubGVuZ3RoOjAsYWE9di5sZW5ndGgsY2E9dWIoYWEpOysreDxhYTspe3ZhciBsYT12W3hdO2NhW3hdPU8/ZGMobGEsVSk/bltsYV06SDpHP0g6bltsYV19cmV0dXJuIGNhfWZ1bmN0aW9uIFljKG4sdix4KXt4fHwoeD17fSk7Zm9yKHZhciBHPS0xLE89di5sZW5ndGg7KytHPE87KXt2YXIgVT12W0ddO3hbVV09bltVXX1yZXR1cm4geH1mdW5jdGlvbiBzZChuLHYseCl7dmFyIEc9dHlwZW9mIG47cmV0dXJuImZ1bmN0aW9uIj09Rz92PT09SD9uOkMobix2LHgpOm51bGw9PW4/aWQ6Im9iamVjdCI9PUc/ZmQobik6dj09PUg/emUobik6cGUobix2KX1mdW5jdGlvbiBMYyhuLHYseCxHLE8sVSxhYSl7dmFyIGNhO3gmJihjYT1PP3gobixHLE8pOngobikpO2lmKGNhIT09CkgpcmV0dXJuIGNhO2lmKCFEYShuKSlyZXR1cm4gbjtpZihHPWNiKG4pKXtpZihjYT1CYihuKSwhdilyZXR1cm4gTGIobixjYSl9ZWxzZXt2YXIgbGE9Z2MuY2FsbChuKSxtYT1sYT09Z2E7aWYobGE9PXFhfHxsYT09V2F8fG1hJiYhTyl7aWYoY2E9RmQobWE/e306biksIXYpcmV0dXJuIFVjKGNhLG4pfWVsc2UgcmV0dXJuIHBiW2xhXT8kZChuLGxhLHYpOk8/bjp7fX1VfHwoVT1bXSk7YWF8fChhYT1bXSk7Zm9yKE89VS5sZW5ndGg7Ty0tOylpZihVW09dPT1uKXJldHVybiBhYVtPXTtVLnB1c2gobik7YWEucHVzaChjYSk7KEc/VmI6WGIpKG4sZnVuY3Rpb24odWEsQmEpe2NhW0JhXT1MYyh1YSx2LHgsQmEsbixVLGFhKX0pO3JldHVybiBjYX1mdW5jdGlvbiBPZChuLHYseCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IG5jKEZhKTtyZXR1cm4gQWUoZnVuY3Rpb24oKXtuLmFwcGx5KEgseCl9LHYpfWZ1bmN0aW9uIHJjKG4sdil7dmFyIHg9bj9uLmxlbmd0aDowLEc9W107CmlmKCF4KXJldHVybiBHO3ZhciBPPS0xLFU9eWIoKSxhYT1VPT09cSxjYT1hYSYmdi5sZW5ndGg+PW9hP3hlJiZ5ZT9uZXcgS2Modik6bnVsbDpudWxsLGxhPXYubGVuZ3RoO2NhJiYoVT11YyxhYT0hMSx2PWNhKTthOmZvcig7KytPPHg7KWlmKGNhPW5bT10sYWEmJmNhPT09Y2Epe2Zvcih2YXIgbWE9bGE7bWEtLTspaWYodlttYV09PT1jYSljb250aW51ZSBhO0cucHVzaChjYSl9ZWxzZSAwPlUodixjYSwwKSYmRy5wdXNoKGNhKTtyZXR1cm4gR31mdW5jdGlvbiBSZShuLHYpe3ZhciB4PSEwO3NjKG4sZnVuY3Rpb24oRyxPLFUpe3JldHVybiB4PSEhdihHLE8sVSl9KTtyZXR1cm4geH1mdW5jdGlvbiBTZShuLHYseCxHKXt2YXIgTz1HLFU9TztzYyhuLGZ1bmN0aW9uKGFhLGNhLGxhKXtjYT0rdihhYSxjYSxsYSk7aWYoeChjYSxPKXx8Y2E9PT1HJiZjYT09PVUpTz1jYSxVPWFhfSk7cmV0dXJuIFV9ZnVuY3Rpb24gbmUobix2KXt2YXIgeD1bXTtzYyhuLGZ1bmN0aW9uKEcsTyxVKXt2KEcsCk8sVSkmJngucHVzaChHKX0pO3JldHVybiB4fWZ1bmN0aW9uIFBkKG4sdix4LEcpe3ZhciBPO3gobixmdW5jdGlvbihVLGFhLGNhKXtpZih2KFUsYWEsY2EpKXJldHVybiBPPUc/YWE6VSwhMX0pO3JldHVybiBPfWZ1bmN0aW9uIE5iKG4sdix4LEcpe0d8fChHPVtdKTtmb3IodmFyIE89LTEsVT1uLmxlbmd0aDsrK088VTspe3ZhciBhYT1uW09dO3MoYWEpJiZGYihhYSkmJih4fHxjYihhYSl8fHZhKGFhKSk/dj9OYihhYSx2LHgsRyk6UmMoRyxhYSk6eHx8KEdbRy5sZW5ndGhdPWFhKX1yZXR1cm4gR31mdW5jdGlvbiBYYihuLHYpe3JldHVybiBCZShuLHYsVGIpfWZ1bmN0aW9uIHRkKG4sdil7cmV0dXJuIGVmKG4sdixUYil9ZnVuY3Rpb24gZGQobix2KXtmb3IodmFyIHg9LTEsRz12Lmxlbmd0aCxPPS0xLFU9W107Kyt4PEc7KXt2YXIgYWE9dlt4XTtJYShuW2FhXSkmJihVWysrT109YWEpfXJldHVybiBVfWZ1bmN0aW9uIEVjKG4sdix4KXtpZihudWxsIT1uKXt4IT09SCYmeCBpbiBRYihuKSYmCih2PVt4XSk7eD0wO2Zvcih2YXIgRz12Lmxlbmd0aDtudWxsIT1uJiZ4PEc7KW49blt2W3grK11dO3JldHVybiB4JiZ4PT1HP246SH19ZnVuY3Rpb24gZWQobix2LHgsRyxPLFUpe2lmKG49PT12KXJldHVybiEwO2lmKG51bGw9PW58fG51bGw9PXZ8fCFEYShuKSYmIXModikpcmV0dXJuIG4hPT1uJiZ2IT09djthOnt2YXIgYWE9ZWQsY2E9Y2IobiksbGE9Y2IodiksbWE9VWEsdWE9VWE7Y2F8fChtYT1nYy5jYWxsKG4pLG1hPT1XYT9tYT1xYTptYSE9cWEmJihjYT1aYShuKSkpO2xhfHwodWE9Z2MuY2FsbCh2KSx1YT09V2E/dWE9cWE6dWEhPXFhJiZaYSh2KSk7dmFyIEJhPW1hPT1xYSxsYT11YT09cWEsdWE9bWE9PXVhO2lmKCF1YXx8Y2F8fEJhKXtpZighRyYmKG1hPUJhJiZIYi5jYWxsKG4sIl9fd3JhcHBlZF9fIiksbGE9bGEmJkhiLmNhbGwodiwiX193cmFwcGVkX18iKSxtYXx8bGEpKXtuPWFhKG1hP24udmFsdWUoKTpuLGxhP3YudmFsdWUoKTp2LHgsRyxPLFUpO2JyZWFrIGF9aWYodWEpe098fAooTz1bXSk7VXx8KFU9W10pO2ZvcihtYT1PLmxlbmd0aDttYS0tOylpZihPW21hXT09bil7bj1VW21hXT09djticmVhayBhfU8ucHVzaChuKTtVLnB1c2godik7bj0oY2E/bWI6aWIpKG4sdixhYSx4LEcsTyxVKTtPLnBvcCgpO1UucG9wKCl9ZWxzZSBuPSExfWVsc2Ugbj1zYihuLHYsbWEpfXJldHVybiBufWZ1bmN0aW9uIG9lKG4sdix4KXt2YXIgRz12Lmxlbmd0aCxPPUcsVT0heDtpZihudWxsPT1uKXJldHVybiFPO2ZvcihuPVFiKG4pO0ctLTspe3ZhciBhYT12W0ddO2lmKFUmJmFhWzJdP2FhWzFdIT09blthYVswXV06IShhYVswXWluIG4pKXJldHVybiExfWZvcig7KytHPE87KXt2YXIgYWE9dltHXSxjYT1hYVswXSxsYT1uW2NhXSxtYT1hYVsxXTtpZihVJiZhYVsyXSl7aWYobGE9PT1IJiYhKGNhIGluIG4pKXJldHVybiExfWVsc2UgaWYoYWE9eD94KGxhLG1hLGNhKTpILGFhPT09SD8hZWQobWEsbGEseCwhMCk6IWFhKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIFFkKG4sdil7dmFyIHg9Ci0xLEc9RmIobik/dWIobi5sZW5ndGgpOltdO3NjKG4sZnVuY3Rpb24oTyxVLGFhKXtHWysreF09dihPLFUsYWEpfSk7cmV0dXJuIEd9ZnVuY3Rpb24gZmQobil7dmFyIHY9Z2Iobik7aWYoMT09di5sZW5ndGgmJnZbMF1bMl0pe3ZhciB4PXZbMF1bMF0sRz12WzBdWzFdO3JldHVybiBmdW5jdGlvbihPKXtyZXR1cm4gbnVsbD09Tz8hMTpPW3hdPT09RyYmKEchPT1IfHx4IGluIFFiKE8pKX19cmV0dXJuIGZ1bmN0aW9uKE8pe3JldHVybiBvZShPLHYpfX1mdW5jdGlvbiBwZShuLHYpe3ZhciB4PWNiKG4pLEc9SGMobikmJnY9PT12JiYhRGEodiksTz1uKyIiO249eWMobik7cmV0dXJuIGZ1bmN0aW9uKFUpe2lmKG51bGw9PVUpcmV0dXJuITE7dmFyIGFhPU87VT1RYihVKTtpZighKCF4JiZHfHxhYSBpbiBVKSl7VT0xPT1uLmxlbmd0aD9VOkVjKFUsUGIobiwwLC0xKSk7aWYobnVsbD09VSlyZXR1cm4hMTthYT0kYyhuKTtVPVFiKFUpfXJldHVybiBVW2FhXT09PXY/diE9PUh8fGFhIGluIFU6CmVkKHYsVVthYV0sSCwhMCl9fWZ1bmN0aW9uIHFlKG4sdix4LEcsTyl7aWYoIURhKG4pKXJldHVybiBuO3ZhciBVPUZiKHYpJiYoY2Iodil8fFphKHYpKSxhYT1VP0g6VGIodik7VmIoYWF8fHYsZnVuY3Rpb24oY2EsbGEpe2FhJiYobGE9Y2EsY2E9dltsYV0pO2lmKHMoY2EpKXtHfHwoRz1bXSk7T3x8KE89W10pO2E6e2Zvcih2YXIgbWE9bGEsdWE9cWUsQmE9RyxHYT1PLGViPUJhLmxlbmd0aCxsYj12W21hXTtlYi0tOylpZihCYVtlYl09PWxiKXtuW21hXT1HYVtlYl07YnJlYWsgYX12YXIgZWI9blttYV0sRGI9eD94KGViLGxiLG1hLG4sdik6SCxhYz1EYj09PUg7YWMmJihEYj1sYixGYihsYikmJihjYihsYil8fFphKGxiKSk/RGI9Y2IoZWIpP2ViOkZiKGViKT9MYihlYik6W106TmEobGIpfHx2YShsYik/RGI9dmEoZWIpP1pjKGViKTpOYShlYik/ZWI6e306YWM9ITEpO0JhLnB1c2gobGIpO0dhLnB1c2goRGIpO2lmKGFjKW5bbWFdPXVhKERiLGxiLHgsQmEsR2EpO2Vsc2UgaWYoRGI9PT0KRGI/RGIhPT1lYjplYj09PWViKW5bbWFdPURifX1lbHNlIG1hPW5bbGFdLHVhPXg/eChtYSxjYSxsYSxuLHYpOkgsKEJhPXVhPT09SCkmJih1YT1jYSksdWE9PT1IJiYoIVV8fGxhIGluIG4pfHwhQmEmJih1YT09PXVhP3VhPT09bWE6bWEhPT1tYSl8fChuW2xhXT11YSl9KTtyZXR1cm4gbn1mdW5jdGlvbiBSZChuKXtyZXR1cm4gZnVuY3Rpb24odil7cmV0dXJuIG51bGw9PXY/SDp2W25dfX1mdW5jdGlvbiBUZShuKXt2YXIgdj1uKyIiO249eWMobik7cmV0dXJuIGZ1bmN0aW9uKHgpe3JldHVybiBFYyh4LG4sdil9fWZ1bmN0aW9uIHJlKG4sdil7Zm9yKHZhciB4PW4/di5sZW5ndGg6MDt4LS07KXt2YXIgRz12W3hdO2lmKEchPU8mJmRjKEcpKXt2YXIgTz1HO2ZmLmNhbGwobixHLDEpfX1yZXR1cm4gbn1mdW5jdGlvbiBzZShuLHYseCxHLE8pe08obixmdW5jdGlvbihVLGFhLGNhKXt4PUc/KEc9ITEsVSk6dih4LFUsYWEsY2EpfSk7cmV0dXJuIHh9ZnVuY3Rpb24gUGIobix2LHgpe3ZhciBHPQotMSxPPW4ubGVuZ3RoO3Y9bnVsbD09dj8wOit2fHwwOzA+diYmKHY9LXY+Tz8wOk8rdik7eD14PT09SHx8eD5PP086K3h8fDA7MD54JiYoeCs9Tyk7Tz12Png/MDp4LXY+Pj4wO3Y+Pj49MDtmb3IoeD11YihPKTsrK0c8TzspeFtHXT1uW0crdl07cmV0dXJuIHh9ZnVuY3Rpb24gdGUobix2KXt2YXIgeDtzYyhuLGZ1bmN0aW9uKEcsTyxVKXt4PXYoRyxPLFUpO3JldHVybiF4fSk7cmV0dXJuISF4fWZ1bmN0aW9uIHVkKG4sdil7dmFyIHg9bi5sZW5ndGg7Zm9yKG4uc29ydCh2KTt4LS07KW5beF09blt4XS52YWx1ZTtyZXR1cm4gbn1mdW5jdGlvbiB1ZShuLHYseCl7dmFyIEc9T2EoKSxPPS0xO3Y9Q2ModixmdW5jdGlvbihVKXtyZXR1cm4gRyhVKX0pO249UWQobixmdW5jdGlvbihVKXtyZXR1cm57Y3JpdGVyaWE6Q2ModixmdW5jdGlvbihhYSl7cmV0dXJuIGFhKFUpfSksaW5kZXg6KytPLHZhbHVlOlV9fSk7cmV0dXJuIHVkKG4sZnVuY3Rpb24oVSxhYSl7dmFyIGNhO2E6e2Zvcih2YXIgbGE9Ci0xLG1hPVUuY3JpdGVyaWEsdWE9YWEuY3JpdGVyaWEsQmE9bWEubGVuZ3RoLEdhPXgubGVuZ3RoOysrbGE8QmE7KWlmKGNhPWEobWFbbGFdLHVhW2xhXSkpe2lmKGxhPj1HYSlicmVhayBhO2xhPXhbbGFdO2NhKj0iYXNjIj09PWxhfHwhMD09PWxhPzE6LTE7YnJlYWsgYX1jYT1VLmluZGV4LWFhLmluZGV4fXJldHVybiBjYX0pfWZ1bmN0aW9uIGdkKG4sdil7dmFyIHg9MDtzYyhuLGZ1bmN0aW9uKEcsTyxVKXt4Kz0rdihHLE8sVSl8fDB9KTtyZXR1cm4geH1mdW5jdGlvbiB2ZChuLHYpe3ZhciB4PS0xLEc9eWIoKSxPPW4ubGVuZ3RoLFU9Rz09PXEsYWE9VSYmTz49b2EsY2E9YWE/eGUmJnllP25ldyBLYyh2b2lkIDApOm51bGw6bnVsbCxsYT1bXTtjYT8oRz11YyxVPSExKTooYWE9ITEsY2E9dj9bXTpsYSk7YTpmb3IoOysreDxPOyl7dmFyIG1hPW5beF0sdWE9dj92KG1hLHgsbik6bWE7aWYoVSYmbWE9PT1tYSl7Zm9yKHZhciBCYT1jYS5sZW5ndGg7QmEtLTspaWYoY2FbQmFdPT09dWEpY29udGludWUgYTsKdiYmY2EucHVzaCh1YSk7bGEucHVzaChtYSl9ZWxzZSAwPkcoY2EsdWEsMCkmJigodnx8YWEpJiZjYS5wdXNoKHVhKSxsYS5wdXNoKG1hKSl9cmV0dXJuIGxhfWZ1bmN0aW9uIGhkKG4sdil7Zm9yKHZhciB4PS0xLEc9di5sZW5ndGgsTz11YihHKTsrK3g8RzspT1t4XT1uW3ZbeF1dO3JldHVybiBPfWZ1bmN0aW9uIHdkKG4sdix4LEcpe2Zvcih2YXIgTz1uLmxlbmd0aCxVPUc/TzotMTsoRz9VLS06KytVPE8pJiZ2KG5bVV0sVSxuKTspO3JldHVybiB4P1BiKG4sRz8wOlUsRz9VKzE6Tyk6UGIobixHP1UrMTowLEc/TzpVKX1mdW5jdGlvbiB2ZShuLHYpe3ZhciB4PW47eCBpbnN0YW5jZW9mIFFhJiYoeD14LnZhbHVlKCkpO2Zvcih2YXIgRz0tMSxPPXYubGVuZ3RoOysrRzxPOyl2YXIgVT12W0ddLHg9VS5mdW5jLmFwcGx5KFUudGhpc0FyZyxSYyhbeF0sVS5hcmdzKSk7cmV0dXJuIHh9ZnVuY3Rpb24gcihuLHYseCl7dmFyIEc9MCxPPW4/bi5sZW5ndGg6RztpZigibnVtYmVyIj09dHlwZW9mIHYmJgp2PT09diYmTzw9SGYpe2Zvcig7RzxPOyl7dmFyIFU9RytPPj4+MSxhYT1uW1VdOyh4P2FhPD12OmFhPHYpJiZudWxsIT09YWE/Rz1VKzE6Tz1VfXJldHVybiBPfXJldHVybiB5KG4sdixpZCx4KX1mdW5jdGlvbiB5KG4sdix4LEcpe3Y9eCh2KTtmb3IodmFyIE89MCxVPW4/bi5sZW5ndGg6MCxhYT12IT09dixjYT1udWxsPT09dixsYT12PT09SDtPPFU7KXt2YXIgbWE9TWMoKE8rVSkvMiksdWE9eChuW21hXSksQmE9dWEhPT1ILEdhPXVhPT09dWE7KGFhP0dhfHxHOmNhP0dhJiZCYSYmKEd8fG51bGwhPXVhKTpsYT9HYSYmKEd8fEJhKTpudWxsPT11YT8wOkc/dWE8PXY6dWE8dik/Tz1tYSsxOlU9bWF9cmV0dXJuIGJjKFUsSWYpfWZ1bmN0aW9uIEMobix2LHgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXJldHVybiBpZDtpZih2PT09SClyZXR1cm4gbjtzd2l0Y2goeCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihHKXtyZXR1cm4gbi5jYWxsKHYsRyl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oRywKTyxVKXtyZXR1cm4gbi5jYWxsKHYsRyxPLFUpfTtjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKEcsTyxVLGFhKXtyZXR1cm4gbi5jYWxsKHYsRyxPLFUsYWEpfTtjYXNlIDU6cmV0dXJuIGZ1bmN0aW9uKEcsTyxVLGFhLGNhKXtyZXR1cm4gbi5jYWxsKHYsRyxPLFUsYWEsY2EpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseSh2LGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEsobil7dmFyIHY9bmV3IEpmKG4uYnl0ZUxlbmd0aCk7KG5ldyBnZih2KSkuc2V0KG5ldyBnZihuKSk7cmV0dXJuIHZ9ZnVuY3Rpb24gTihuLHYseCl7Zm9yKHZhciBHPXgubGVuZ3RoLE89LTEsVT1PYihuLmxlbmd0aC1HLDApLGFhPS0xLGNhPXYubGVuZ3RoLGxhPXViKGNhK1UpOysrYWE8Y2E7KWxhW2FhXT12W2FhXTtmb3IoOysrTzxHOylsYVt4W09dXT1uW09dO2Zvcig7VS0tOylsYVthYSsrXT1uW08rK107cmV0dXJuIGxhfWZ1bmN0aW9uIFEobix2LHgpe2Zvcih2YXIgRz0tMSxPPXgubGVuZ3RoLFU9LTEsCmFhPU9iKG4ubGVuZ3RoLU8sMCksY2E9LTEsbGE9di5sZW5ndGgsbWE9dWIoYWErbGEpOysrVTxhYTspbWFbVV09bltVXTtmb3IoYWE9VTsrK2NhPGxhOyltYVthYStjYV09dltjYV07Zm9yKDsrK0c8TzspbWFbYWEreFtHXV09bltVKytdO3JldHVybiBtYX1mdW5jdGlvbiBTKG4sdil7cmV0dXJuIGZ1bmN0aW9uKHgsRyxPKXt2YXIgVT12P3YoKTp7fTtHPU9hKEcsTywzKTtpZihjYih4KSl7Tz0tMTtmb3IodmFyIGFhPXgubGVuZ3RoOysrTzxhYTspe3ZhciBjYT14W09dO24oVSxjYSxHKGNhLE8seCkseCl9fWVsc2Ugc2MoeCxmdW5jdGlvbihsYSxtYSx1YSl7bihVLGxhLEcobGEsbWEsdWEpLHVhKX0pO3JldHVybiBVfX1mdW5jdGlvbiBiYShuKXtyZXR1cm4ga2EoZnVuY3Rpb24odix4KXt2YXIgRz0tMSxPPW51bGw9PXY/MDp4Lmxlbmd0aCxVPTI8Tz94W08tMl06SCxhYT0yPE8/eFsyXTpILGNhPTE8Tz94W08tMV06SDsiZnVuY3Rpb24iPT10eXBlb2YgVT8oVT1DKFUsY2EsNSksTy09CjIpOihVPSJmdW5jdGlvbiI9PXR5cGVvZiBjYT9jYTpILE8tPVU/MTowKTthYSYmYmIoeFswXSx4WzFdLGFhKSYmKFU9Mz5PP0g6VSxPPTEpO2Zvcig7KytHPE87KShhYT14W0ddKSYmbih2LGFhLFUpO3JldHVybiB2fSl9ZnVuY3Rpb24gJChuLHYpe3JldHVybiBmdW5jdGlvbih4LEcpe3ZhciBPPXg/U2QoeCk6MDtpZigha2MoTykpcmV0dXJuIG4oeCxHKTtmb3IodmFyIFU9dj9POi0xLGFhPVFiKHgpOyh2P1UtLTorK1U8TykmJiExIT09RyhhYVtVXSxVLGFhKTspO3JldHVybiB4fX1mdW5jdGlvbiBqYShuKXtyZXR1cm4gZnVuY3Rpb24odix4LEcpe3ZhciBPPVFiKHYpO0c9Ryh2KTtmb3IodmFyIFU9Ry5sZW5ndGgsYWE9bj9VOi0xO24/YWEtLTorK2FhPFU7KXt2YXIgY2E9R1thYV07aWYoITE9PT14KE9bY2FdLGNhLE8pKWJyZWFrfXJldHVybiB2fX1mdW5jdGlvbiBzYShuLHYpe2Z1bmN0aW9uIHgoKXtyZXR1cm4odGhpcyYmdGhpcyE9PWljJiZ0aGlzIGluc3RhbmNlb2YgeD9HOgpuKS5hcHBseSh2LGFyZ3VtZW50cyl9dmFyIEc9aGEobik7cmV0dXJuIHh9ZnVuY3Rpb24gemEobil7cmV0dXJuIGZ1bmN0aW9uKHYpe3ZhciB4PS0xO3Y9aGYoamYodikpO2Zvcih2YXIgRz12Lmxlbmd0aCxPPSIiOysreDxHOylPPW4oTyx2W3hdLHgpO3JldHVybiBPfX1mdW5jdGlvbiBoYShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj1hcmd1bWVudHM7c3dpdGNoKHYubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBuO2Nhc2UgMTpyZXR1cm4gbmV3IG4odlswXSk7Y2FzZSAyOnJldHVybiBuZXcgbih2WzBdLHZbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IG4odlswXSx2WzFdLHZbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IG4odlswXSx2WzFdLHZbMl0sdlszXSk7Y2FzZSA1OnJldHVybiBuZXcgbih2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0pO2Nhc2UgNjpyZXR1cm4gbmV3IG4odlswXSx2WzFdLHZbMl0sdlszXSx2WzRdLHZbNV0pO2Nhc2UgNzpyZXR1cm4gbmV3IG4odlswXSx2WzFdLHZbMl0sCnZbM10sdls0XSx2WzVdLHZbNl0pfXZhciB4PVRkKG4ucHJvdG90eXBlKSx2PW4uYXBwbHkoeCx2KTtyZXR1cm4gRGEodik/djp4fX1mdW5jdGlvbiBNYShuKXtmdW5jdGlvbiB2KHgsRyxPKXtPJiZiYih4LEcsTykmJihHPUgpO3g9TGEoeCxuLEgsSCxILEgsSCxHKTt4LnBsYWNlaG9sZGVyPXYucGxhY2Vob2xkZXI7cmV0dXJuIHh9cmV0dXJuIHZ9ZnVuY3Rpb24gUmEobix2KXtyZXR1cm4ga2EoZnVuY3Rpb24oeCl7dmFyIEc9eFswXTtpZihudWxsPT1HKXJldHVybiBHO3gucHVzaCh2KTtyZXR1cm4gbi5hcHBseShILHgpfSl9ZnVuY3Rpb24gR2Iobix2KXtyZXR1cm4gZnVuY3Rpb24oeCxHLE8pe08mJmJiKHgsRyxPKSYmKEc9SCk7Rz1PYShHLE8sMyk7aWYoMT09Ry5sZW5ndGgpe089eD1jYih4KT94OklkKHgpO2Zvcih2YXIgVT1HLGFhPS0xLGNhPU8ubGVuZ3RoLGxhPXYsbWE9bGE7KythYTxjYTspe3ZhciB1YT1PW2FhXSxCYT0rVSh1YSk7bihCYSxsYSkmJihsYT1CYSxtYT11YSl9Tz0KbWE7aWYoIXgubGVuZ3RofHxPIT09dilyZXR1cm4gT31yZXR1cm4gU2UoeCxHLG4sdil9fWZ1bmN0aW9uIEpiKG4sdil7cmV0dXJuIGZ1bmN0aW9uKHgsRyxPKXtHPU9hKEcsTywzKTtyZXR1cm4gY2IoeCk/KEc9RSh4LEcsdiksLTE8Rz94W0ddOkgpOlBkKHgsRyxuKX19ZnVuY3Rpb24gUmIobil7cmV0dXJuIGZ1bmN0aW9uKHYseCxHKXtpZighdnx8IXYubGVuZ3RoKXJldHVybi0xO3g9T2EoeCxHLDMpO3JldHVybiBFKHYseCxuKX19ZnVuY3Rpb24gemIobil7cmV0dXJuIGZ1bmN0aW9uKHYseCxHKXt4PU9hKHgsRywzKTtyZXR1cm4gUGQodix4LG4sITApfX1mdW5jdGlvbiBqYyhuKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHYseD1hcmd1bWVudHMubGVuZ3RoLEc9bj94Oi0xLE89MCxVPXViKHgpO24/Ry0tOisrRzx4Oyl7dmFyIGFhPVVbTysrXT1hcmd1bWVudHNbR107aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGFhKXRocm93IG5ldyBuYyhGYSk7IXYmJm9iLnByb3RvdHlwZS50aHJ1JiYKIndyYXBwZXIiPT1LYihhYSkmJih2PW5ldyBvYihbXSwhMCkpfWZvcihHPXY/LTE6eDsrK0c8eDspe3ZhciBhYT1VW0ddLE89S2IoYWEpLGNhPSJ3cmFwcGVyIj09Tz9VZShhYSk6SDt2PWNhJiZ4YyhjYVswXSkmJmNhWzFdPT0oWXxEfFB8bmEpJiYhY2FbNF0ubGVuZ3RoJiYxPT1jYVs5XT92W0tiKGNhWzBdKV0uYXBwbHkodixjYVszXSk6MT09YWEubGVuZ3RoJiZ4YyhhYSk/dltPXSgpOnYudGhydShhYSl9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGxhPWFyZ3VtZW50cyxtYT1sYVswXTtpZih2JiYxPT1sYS5sZW5ndGgmJmNiKG1hKSYmbWEubGVuZ3RoPj1vYSlyZXR1cm4gdi5wbGFudChtYSkudmFsdWUoKTtmb3IodmFyIHVhPTAsbGE9eD9VW3VhXS5hcHBseSh0aGlzLGxhKTptYTsrK3VhPHg7KWxhPVVbdWFdLmNhbGwodGhpcyxsYSk7cmV0dXJuIGxhfX19ZnVuY3Rpb24gbGMobix2KXtyZXR1cm4gZnVuY3Rpb24oeCxHLE8pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBHJiZPPT09CkgmJmNiKHgpP24oeCxHKTp2KHgsQyhHLE8sMykpfX1mdW5jdGlvbiBIYShuKXtyZXR1cm4gZnVuY3Rpb24odix4LEcpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB4fHxHIT09SCl4PUMoeCxHLDMpO3JldHVybiBuKHYseCxOYyl9fWZ1bmN0aW9uIGFiKG4pe3JldHVybiBmdW5jdGlvbih2LHgsRyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHh8fEchPT1IKXg9Qyh4LEcsMyk7cmV0dXJuIG4odix4KX19ZnVuY3Rpb24gd2Mobil7cmV0dXJuIGZ1bmN0aW9uKHYseCxHKXt2YXIgTz17fTt4PU9hKHgsRywzKTtYYih2LGZ1bmN0aW9uKFUsYWEsY2Epe2NhPXgoVSxhYSxjYSk7YWE9bj9jYTphYTtVPW4/VTpjYTtPW2FhXT1VfSk7cmV0dXJuIE99fWZ1bmN0aW9uIGRiKG4pe3JldHVybiBmdW5jdGlvbih2LHgsRyl7dj1mKHYpO3JldHVybihuP3Y6IiIpK3FjKHYseCxHKSsobj8iIjp2KX19ZnVuY3Rpb24gcWIobil7dmFyIHY9a2EoZnVuY3Rpb24oeCxHKXt2YXIgTz1oKEcsdi5wbGFjZWhvbGRlcik7CnJldHVybiBMYSh4LG4sSCxHLE8pfSk7cmV0dXJuIHZ9ZnVuY3Rpb24gQ2Iobix2KXtyZXR1cm4gZnVuY3Rpb24oeCxHLE8sVSl7dmFyIGFhPTM+YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRyYmVT09PUgmJmNiKHgpP24oeCxHLE8sYWEpOnNlKHgsT2EoRyxVLDQpLE8sYWEsdil9fWZ1bmN0aW9uIFdiKG4sdix4LEcsTyxVLGFhLGNhLGxhLG1hKXtmdW5jdGlvbiB1YSgpe2Zvcih2YXIgSWI9YXJndW1lbnRzLmxlbmd0aCxVYj1JYix2Yj11YihJYik7VWItLTspdmJbVWJdPWFyZ3VtZW50c1tVYl07RyYmKHZiPU4odmIsRyxPKSk7VSYmKHZiPVEodmIsVSxhYSkpO2lmKGxifHxhYyl7dmFyIFViPXVhLnBsYWNlaG9sZGVyLE9jPWgodmIsVWIpLEliPUliLU9jLmxlbmd0aDtpZihJYjxtYSl7dmFyIFZjPWNhP0xiKGNhKTpILEliPU9iKG1hLUliLDApLENlPWxiP09jOkgsT2M9bGI/SDpPYyxWZT1sYj92YjpILHZiPWxiP0g6dmI7dnw9bGI/UDpWO3YmPX4obGI/ClY6UCk7RGJ8fCh2Jj1+KEJ8SSkpO3ZiPVtuLHYseCxWZSxDZSx2YixPYyxWYyxsYSxJYl07VmM9V2IuYXBwbHkoSCx2Yik7eGMobikmJmtmKFZjLHZiKTtWYy5wbGFjZWhvbGRlcj1VYjtyZXR1cm4gVmN9fVViPUdhP3g6dGhpcztWYz1lYj9VYltuXTpuO2lmKGNhKWZvcihJYj1jYSxDZT12Yi5sZW5ndGgsT2M9YmMoSWIubGVuZ3RoLENlKSxWZT1MYih2Yik7T2MtLTspe3ZhciBsZj1JYltPY107dmJbT2NdPWRjKGxmLENlKT9WZVtsZl06SH1CYSYmbGE8dmIubGVuZ3RoJiYodmIubGVuZ3RoPWxhKTt0aGlzJiZ0aGlzIT09aWMmJnRoaXMgaW5zdGFuY2VvZiB1YSYmKFZjPXhkfHxoYShuKSk7cmV0dXJuIFZjLmFwcGx5KFViLHZiKX12YXIgQmE9diZZLEdhPXYmQixlYj12JkksbGI9diZELERiPXYmTSxhYz12JkoseGQ9ZWI/SDpoYShuKTtyZXR1cm4gdWF9ZnVuY3Rpb24gcWMobix2LHgpe249bi5sZW5ndGg7dj0rdjtpZihuPj12fHwheWQodikpcmV0dXJuIiI7di09bjt4PW51bGw9PQp4PyIgIjp4KyIiO3JldHVybiBtZih4LERlKHYveC5sZW5ndGgpKS5zbGljZSgwLHYpfWZ1bmN0aW9uIFNiKG4sdix4LEcpe2Z1bmN0aW9uIE8oKXtmb3IodmFyIGNhPS0xLGxhPWFyZ3VtZW50cy5sZW5ndGgsbWE9LTEsdWE9Ry5sZW5ndGgsQmE9dWIodWErbGEpOysrbWE8dWE7KUJhW21hXT1HW21hXTtmb3IoO2xhLS07KUJhW21hKytdPWFyZ3VtZW50c1srK2NhXTtyZXR1cm4odGhpcyYmdGhpcyE9PWljJiZ0aGlzIGluc3RhbmNlb2YgTz9hYTpuKS5hcHBseShVP3g6dGhpcyxCYSl9dmFyIFU9diZCLGFhPWhhKG4pO3JldHVybiBPfWZ1bmN0aW9uIGpiKG4pe3ZhciB2PWpkW25dO3JldHVybiBmdW5jdGlvbih4LEcpe3JldHVybihHPUc9PT1IPzA6K0d8fDApPyhHPUtmKDEwLEcpLHYoeCpHKS9HKTp2KHgpfX1mdW5jdGlvbiBuYihuKXtyZXR1cm4gZnVuY3Rpb24odix4LEcsTyl7dmFyIFU9T2EoRyk7cmV0dXJuIG51bGw9PUcmJlU9PT1zZD9yKHYseCxuKTp5KHYseCxVKEcsTywxKSwKbil9fWZ1bmN0aW9uIExhKG4sdix4LEcsTyxVLGFhLGNhKXt2YXIgbGE9diZJO2lmKCFsYSYmImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IG5jKEZhKTt2YXIgbWE9Rz9HLmxlbmd0aDowO21hfHwodiY9fihQfFYpLEc9Tz1IKTttYS09Tz9PLmxlbmd0aDowO2lmKHYmVil7dmFyIHVhPUcsQmE9TztHPU89SH12YXIgR2E9bGE/SDpVZShuKTt4PVtuLHYseCxHLE8sdWEsQmEsVSxhYSxjYV07aWYoR2Epe0c9eFsxXTt2PUdhWzFdO2NhPUd8djtPPXY9PVkmJkc9PUR8fHY9PVkmJkc9PW5hJiZ4WzddLmxlbmd0aDw9R2FbOF18fHY9PShZfG5hKSYmRz09RDtpZihjYTxZfHxPKXt2JkImJih4WzJdPUdhWzJdLGNhfD1HJkI/MDpNKTtpZihHPUdhWzNdKU89eFszXSx4WzNdPU8/TihPLEcsR2FbNF0pOkxiKEcpLHhbNF09Tz9oKHhbM10sRWEpOkxiKEdhWzRdKTtpZihHPUdhWzVdKU89eFs1XSx4WzVdPU8/UShPLEcsR2FbNl0pOkxiKEcpLHhbNl09Tz9oKHhbNV0sRWEpOkxiKEdhWzZdKTsKKEc9R2FbN10pJiYoeFs3XT1MYihHKSk7diZZJiYoeFs4XT1udWxsPT14WzhdP0dhWzhdOmJjKHhbOF0sR2FbOF0pKTtudWxsPT14WzldJiYoeFs5XT1HYVs5XSk7eFswXT1HYVswXTt4WzFdPWNhfXY9eFsxXTtjYT14WzldfXhbOV09bnVsbD09Y2E/bGE/MDpuLmxlbmd0aDpPYihjYS1tYSwwKXx8MDtuPXY9PUI/c2EoeFswXSx4WzJdKTp2IT1QJiZ2IT0oQnxQKXx8eFs0XS5sZW5ndGg/V2IuYXBwbHkoSCx4KTpTYi5hcHBseShILHgpO3JldHVybihHYT9uZjprZikobix4KX1mdW5jdGlvbiBtYihuLHYseCxHLE8sVSxhYSl7dmFyIGNhPS0xLGxhPW4ubGVuZ3RoLG1hPXYubGVuZ3RoO2lmKGxhIT1tYSYmIShPJiZtYT5sYSkpcmV0dXJuITE7Zm9yKDsrK2NhPGxhOyl7dmFyIHVhPW5bY2FdLG1hPXZbY2FdLEJhPUc/RyhPP21hOnVhLE8/dWE6bWEsY2EpOkg7aWYoQmEhPT1IKXtpZihCYSljb250aW51ZTtyZXR1cm4hMX1pZihPKXtpZighbWUodixmdW5jdGlvbihHYSl7cmV0dXJuIHVhPT09CkdhfHx4KHVhLEdhLEcsTyxVLGFhKX0pKXJldHVybiExfWVsc2UgaWYodWEhPT1tYSYmIXgodWEsbWEsRyxPLFUsYWEpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHNiKG4sdix4KXtzd2l0Y2goeCl7Y2FzZSB3YjpjYXNlIEFiOnJldHVybituPT0rdjtjYXNlIE1iOnJldHVybiBuLm5hbWU9PXYubmFtZSYmbi5tZXNzYWdlPT12Lm1lc3NhZ2U7Y2FzZSB0YTpyZXR1cm4gbiE9K24/diE9K3Y6bj09K3Y7Y2FzZSB3YTpjYXNlIEphOnJldHVybiBuPT12KyIifXJldHVybiExfWZ1bmN0aW9uIGliKG4sdix4LEcsTyxVLGFhKXt2YXIgY2E9VGIobiksbGE9Y2EubGVuZ3RoLG1hPVRiKHYpLmxlbmd0aDtpZihsYSE9bWEmJiFPKXJldHVybiExO2ZvcihtYT1sYTttYS0tOyl7dmFyIHVhPWNhW21hXTtpZighKE8/dWEgaW4gdjpIYi5jYWxsKHYsdWEpKSlyZXR1cm4hMX1mb3IodmFyIEJhPU87KyttYTxsYTspe3ZhciB1YT1jYVttYV0sR2E9blt1YV0sZWI9dlt1YV0sbGI9Rz9HKE8/ZWI6R2EsCk8/R2E6ZWIsdWEpOkg7aWYobGI9PT1IPyF4KEdhLGViLEcsTyxVLGFhKTohbGIpcmV0dXJuITE7QmF8fChCYT0iY29uc3RydWN0b3IiPT11YSl9cmV0dXJuIEJhfHwoeD1uLmNvbnN0cnVjdG9yLEc9di5jb25zdHJ1Y3RvciwhKHghPUcmJiJjb25zdHJ1Y3RvciJpbiBuJiYiY29uc3RydWN0b3IiaW4gdil8fCJmdW5jdGlvbiI9PXR5cGVvZiB4JiZ4IGluc3RhbmNlb2YgeCYmImZ1bmN0aW9uIj09dHlwZW9mIEcmJkcgaW5zdGFuY2VvZiBHKT8hMDohMX1mdW5jdGlvbiBPYShuLHYseCl7dmFyIEc9VC5jYWxsYmFja3x8RWUsRz1HPT09RWU/c2Q6RztyZXR1cm4geD9HKG4sdix4KTpHfWZ1bmN0aW9uIEtiKG4pe2Zvcih2YXIgdj1uLm5hbWUrIiIseD1GZVt2XSxHPXg/eC5sZW5ndGg6MDtHLS07KXt2YXIgTz14W0ddLFU9Ty5mdW5jO2lmKG51bGw9PVV8fFU9PW4pcmV0dXJuIE8ubmFtZX1yZXR1cm4gdn1mdW5jdGlvbiB5YihuLHYseCl7dmFyIEc9VC5pbmRleE9mfHxTYyxHPUc9PT1TYz8KcTpHO3JldHVybiBuP0cobix2LHgpOkd9ZnVuY3Rpb24gZ2Iobil7bj1vZihuKTtmb3IodmFyIHY9bi5sZW5ndGg7di0tOyluW3ZdWzJdPW5bdl1bMV09PT1uW3ZdWzFdJiYhRGEoblt2XVsxXSk7cmV0dXJuIG59ZnVuY3Rpb24gaGIobix2KXt2YXIgeD1udWxsPT1uP0g6blt2XTtyZXR1cm4gVGEoeCk/eDpIfWZ1bmN0aW9uIEJiKG4pe3ZhciB2PW4ubGVuZ3RoLHg9bmV3IG4uY29uc3RydWN0b3Iodik7diYmInN0cmluZyI9PXR5cGVvZiBuWzBdJiZIYi5jYWxsKG4sImluZGV4IikmJih4LmluZGV4PW4uaW5kZXgseC5pbnB1dD1uLmlucHV0KTtyZXR1cm4geH1mdW5jdGlvbiBGZChuKXtuPW4uY29uc3RydWN0b3I7ImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4gaW5zdGFuY2VvZiBufHwobj1rZCk7cmV0dXJuIG5ldyBufWZ1bmN0aW9uICRkKG4sdix4KXt2YXIgRz1uLmNvbnN0cnVjdG9yO3N3aXRjaCh2KXtjYXNlIFBhOnJldHVybiBLKG4pO2Nhc2Ugd2I6Y2FzZSBBYjpyZXR1cm4gbmV3IEcoK24pOwpjYXNlIGZiOmNhc2UgeGI6Y2FzZSBFYjpjYXNlIFNhOmNhc2UgY2M6Y2FzZSBZYjpjYXNlIEJjOmNhc2UgRmM6Y2FzZSBRYzpyZXR1cm4gdj1uLmJ1ZmZlcixuZXcgRyh4P0sodik6dixuLmJ5dGVPZmZzZXQsbi5sZW5ndGgpO2Nhc2UgdGE6Y2FzZSBKYTpyZXR1cm4gbmV3IEcobik7Y2FzZSB3YTp2YXIgTz1uZXcgRyhuLnNvdXJjZSxqZS5leGVjKG4pKTtPLmxhc3RJbmRleD1uLmxhc3RJbmRleH1yZXR1cm4gT31mdW5jdGlvbiBwZChuLHYseCl7bnVsbD09bnx8SGModixuKXx8KHY9eWModiksbj0xPT12Lmxlbmd0aD9uOkVjKG4sUGIodiwwLC0xKSksdj0kYyh2KSk7dj1udWxsPT1uP246blt2XTtyZXR1cm4gbnVsbD09dj9IOnYuYXBwbHkobix4KX1mdW5jdGlvbiBGYihuKXtyZXR1cm4gbnVsbCE9biYma2MoU2QobikpfWZ1bmN0aW9uIGRjKG4sdil7bj0ibnVtYmVyIj09dHlwZW9mIG58fFFlLnRlc3Qobik/K246LTE7dj1udWxsPT12P3BmOnY7cmV0dXJuLTE8biYmMD09biUxJiYKbjx2fWZ1bmN0aW9uIGJiKG4sdix4KXtpZighRGEoeCkpcmV0dXJuITE7dmFyIEc9dHlwZW9mIHY7cmV0dXJuKCJudW1iZXIiPT1HP0ZiKHgpJiZkYyh2LHgubGVuZ3RoKToic3RyaW5nIj09RyYmdiBpbiB4KT8odj14W3ZdLG49PT1uP249PT12OnYhPT12KTohMX1mdW5jdGlvbiBIYyhuLHYpe3ZhciB4PXR5cGVvZiBuO3JldHVybiJzdHJpbmciPT14JiZKYy50ZXN0KG4pfHwibnVtYmVyIj09eD8hMDpjYihuKT8hMTohTmUudGVzdChuKXx8bnVsbCE9diYmbiBpbiBRYih2KX1mdW5jdGlvbiB4YyhuKXt2YXIgdj1LYihuKSx4PVRbdl07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHh8fCEodiBpbiBRYS5wcm90b3R5cGUpKXJldHVybiExO2lmKG49PT14KXJldHVybiEwO3Y9VWUoeCk7cmV0dXJuISF2JiZuPT09dlswXX1mdW5jdGlvbiBrYyhuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG4mJi0xPG4mJjA9PW4lMSYmbjw9cGZ9ZnVuY3Rpb24gYWUobix2KXtyZXR1cm4gbj09PUg/djpXZShuLAp2LGFlKX1mdW5jdGlvbiBvYyhuLHYpe249UWIobik7Zm9yKHZhciB4PS0xLEc9di5sZW5ndGgsTz17fTsrK3g8Rzspe3ZhciBVPXZbeF07VSBpbiBuJiYoT1tVXT1uW1VdKX1yZXR1cm4gT31mdW5jdGlvbiBIZChuLHYpe3ZhciB4PXt9O0JlKG4sZnVuY3Rpb24oRyxPLFUpe3YoRyxPLFUpJiYoeFtPXT1HKX0sTmMpO3JldHVybiB4fWZ1bmN0aW9uIHZjKG4pe2Zvcih2YXIgdj1OYyhuKSx4PXYubGVuZ3RoLEc9eCYmbi5sZW5ndGgsTz0hIUcmJmtjKEcpJiYoY2Iobil8fHZhKG4pKSxVPS0xLGFhPVtdOysrVTx4Oyl7dmFyIGNhPXZbVV07KE8mJmRjKGNhLEcpfHxIYi5jYWxsKG4sY2EpKSYmYWEucHVzaChjYSl9cmV0dXJuIGFhfWZ1bmN0aW9uIElkKG4pe3JldHVybiBudWxsPT1uP1tdOkZiKG4pP0RhKG4pP246a2Qobik6R2Uobil9ZnVuY3Rpb24gUWIobil7cmV0dXJuIERhKG4pP246a2Qobil9ZnVuY3Rpb24geWMobil7aWYoY2IobikpcmV0dXJuIG47dmFyIHY9W107ZihuKS5yZXBsYWNlKFRjLApmdW5jdGlvbih4LEcsTyxVKXt2LnB1c2goTz9VLnJlcGxhY2UoaWUsIiQxIik6R3x8eCl9KTtyZXR1cm4gdn1mdW5jdGlvbiBiZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFFhP24uY2xvbmUoKTpuZXcgb2Iobi5fX3dyYXBwZWRfXyxuLl9fY2hhaW5fXyxMYihuLl9fYWN0aW9uc19fKSl9ZnVuY3Rpb24gWmQobix2LHgpe2lmKCFufHwhbi5sZW5ndGgpcmV0dXJuW107aWYoeD9iYihuLHYseCk6bnVsbD09dil2PTE7cmV0dXJuIFBiKG4sMD52PzA6dil9ZnVuY3Rpb24gY2Uobix2LHgpe3ZhciBHPW4/bi5sZW5ndGg6MDtpZighRylyZXR1cm5bXTtpZih4P2JiKG4sdix4KTpudWxsPT12KXY9MTt2PUctKCt2fHwwKTtyZXR1cm4gUGIobiwwLDA+dj8wOnYpfWZ1bmN0aW9uIGRlKG4pe3JldHVybiBuP25bMF06SH1mdW5jdGlvbiBTYyhuLHYseCl7dmFyIEc9bj9uLmxlbmd0aDowO2lmKCFHKXJldHVybi0xO2lmKCJudW1iZXIiPT10eXBlb2YgeCl4PTA+eD9PYihHK3gsMCk6eDtlbHNlIGlmKHgpcmV0dXJuIHg9CnIobix2KSx4PEcmJih2PT09dj92PT09blt4XTpuW3hdIT09blt4XSk/eDotMTtyZXR1cm4gcShuLHYseHx8MCl9ZnVuY3Rpb24gJGMobil7dmFyIHY9bj9uLmxlbmd0aDowO3JldHVybiB2P25bdi0xXTpIfWZ1bmN0aW9uIGVlKG4pe3JldHVybiBaZChuLDEpfWZ1bmN0aW9uIGZlKG4sdix4LEcpe2lmKCFufHwhbi5sZW5ndGgpcmV0dXJuW107bnVsbCE9diYmImJvb2xlYW4iIT10eXBlb2YgdiYmKEc9eCx4PWJiKG4sdixHKT9IOnYsdj0hMSk7dmFyIE89T2EoKTtpZihudWxsIT14fHxPIT09c2QpeD1PKHgsRywzKTtpZih2JiZ5YigpPT09cSl7dj14O3ZhciBVO3g9LTE7Rz1uLmxlbmd0aDtmb3IodmFyIE89LTEsYWE9W107Kyt4PEc7KXt2YXIgY2E9blt4XSxsYT12P3YoY2EseCxuKTpjYTt4JiZVPT09bGF8fChVPWxhLGFhWysrT109Y2EpfW49YWF9ZWxzZSBuPXZkKG4seCk7cmV0dXJuIG59ZnVuY3Rpb24gSWMobil7aWYoIW58fCFuLmxlbmd0aClyZXR1cm5bXTt2YXIgdj0tMSx4PQowO249QWQobixmdW5jdGlvbihPKXtpZihGYihPKSlyZXR1cm4geD1PYihPLmxlbmd0aCx4KSwhMH0pO2Zvcih2YXIgRz11Yih4KTsrK3Y8eDspR1t2XT1DYyhuLFJkKHYpKTtyZXR1cm4gR31mdW5jdGlvbiBZZChuLHYseCl7aWYoIW58fCFuLmxlbmd0aClyZXR1cm5bXTtuPUljKG4pO2lmKG51bGw9PXYpcmV0dXJuIG47dj1DKHYseCw0KTtyZXR1cm4gQ2MobixmdW5jdGlvbihHKXtyZXR1cm4gQmQoRyx2LEgsITApfSl9ZnVuY3Rpb24gb2Qobix2KXt2YXIgeD0tMSxHPW4/bi5sZW5ndGg6MCxPPXt9O2ZvcighR3x8dnx8Y2IoblswXSl8fCh2PVtdKTsrK3g8Rzspe3ZhciBVPW5beF07dj9PW1VdPXZbeF06VSYmKE9bVVswXV09VVsxXSl9cmV0dXJuIE99ZnVuY3Rpb24gbWMobil7bj1UKG4pO24uX19jaGFpbl9fPSEwO3JldHVybiBufWZ1bmN0aW9uIGVjKG4sdix4KXtyZXR1cm4gdi5jYWxsKHgsbil9ZnVuY3Rpb24gRGQobix2LHgpe3ZhciBHPWNiKG4pP1hjOlJlO3gmJmJiKG4sdiwKeCkmJih2PUgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB2fHx4IT09SCl2PU9hKHYseCwzKTtyZXR1cm4gRyhuLHYpfWZ1bmN0aW9uIG5kKG4sdix4KXt2YXIgRz1jYihuKT9BZDpuZTt2PU9hKHYseCwzKTtyZXR1cm4gRyhuLHYpfWZ1bmN0aW9uIHFkKG4sdix4LEcpe3ZhciBPPW4/U2Qobik6MDtrYyhPKXx8KG49R2UobiksTz1uLmxlbmd0aCk7eD0ibnVtYmVyIiE9dHlwZW9mIHh8fEcmJmJiKHYseCxHKT8wOjA+eD9PYihPK3gsMCk6eHx8MDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG58fCFjYihuKSYmcmIobik/eDw9TyYmLTE8bi5pbmRleE9mKHYseCk6ISFPJiYtMTx5YihuLHYseCl9ZnVuY3Rpb24gRWQobix2LHgpe3ZhciBHPWNiKG4pP0NjOlFkO3Y9T2Eodix4LDMpO3JldHVybiBHKG4sdil9ZnVuY3Rpb24gSmQobix2LHgpe2lmKHg/YmIobix2LHgpOm51bGw9PXYpe249SWQobik7dmFyIEc9bi5sZW5ndGg7cmV0dXJuIDA8Rz9uWzArTWMoSGUoKSooRy0xLTArMSkpXTpIfXg9Ci0xO249R2Mobik7dmFyIEc9bi5sZW5ndGgsTz1HLTE7Zm9yKHY9YmMoMD52PzA6K3Z8fDAsRyk7Kyt4PHY7KXt2YXIgRz14K01jKEhlKCkqKE8teCsxKSksVT1uW0ddO25bR109blt4XTtuW3hdPVV9bi5sZW5ndGg9djtyZXR1cm4gbn1mdW5jdGlvbiBSKG4sdix4KXt2YXIgRz1jYihuKT9tZTp0ZTt4JiZiYihuLHYseCkmJih2PUgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB2fHx4IT09SCl2PU9hKHYseCwzKTtyZXR1cm4gRyhuLHYpfWZ1bmN0aW9uIFgobix2KXt2YXIgeDtpZigiZnVuY3Rpb24iIT10eXBlb2YgdilpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil7dmFyIEc9bjtuPXY7dj1HfWVsc2UgdGhyb3cgbmV3IG5jKEZhKTtyZXR1cm4gZnVuY3Rpb24oKXswPC0tbiYmKHg9di5hcHBseSh0aGlzLGFyZ3VtZW50cykpOzE+PW4mJih2PUgpO3JldHVybiB4fX1mdW5jdGlvbiBXKG4sdix4KXtmdW5jdGlvbiBHKEliLFViKXtVYiYmVWQoVWIpO2xhPUdhPWViPUg7SWImJihsYj1WZCgpLAptYT1uLmFwcGx5KEJhLGNhKSxHYXx8bGF8fChjYT1CYT1IKSl9ZnVuY3Rpb24gTygpe3ZhciBJYj12LShWZCgpLXVhKTswPj1JYnx8SWI+dj9HKGViLGxhKTpHYT1BZShPLEliKX1mdW5jdGlvbiBVKCl7RyhhYyxHYSl9ZnVuY3Rpb24gYWEoKXtjYT1hcmd1bWVudHM7dWE9VmQoKTtCYT10aGlzO2ViPWFjJiYoR2F8fCF4ZCk7aWYoITE9PT1EYil2YXIgSWI9eGQmJiFHYTtlbHNle2xhfHx4ZHx8KGxiPXVhKTt2YXIgVWI9RGItKHVhLWxiKSx2Yj0wPj1VYnx8VWI+RGI7dmI/KGxhJiYobGE9VWQobGEpKSxsYj11YSxtYT1uLmFwcGx5KEJhLGNhKSk6bGF8fChsYT1BZShVLFViKSl9dmImJkdhP0dhPVVkKEdhKTpHYXx8dj09PURifHwoR2E9QWUoTyx2KSk7SWImJih2Yj0hMCxtYT1uLmFwcGx5KEJhLGNhKSk7IXZifHxHYXx8bGF8fChjYT1CYT1IKTtyZXR1cm4gbWF9dmFyIGNhLGxhLG1hLHVhLEJhLEdhLGViLGxiPTAsRGI9ITEsYWM9ITA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IG5jKEZhKTsKdj0wPnY/MDordnx8MDtpZighMD09PXgpdmFyIHhkPSEwLGFjPSExO2Vsc2UgRGEoeCkmJih4ZD0hIXgubGVhZGluZyxEYj0ibWF4V2FpdCJpbiB4JiZPYigreC5tYXhXYWl0fHwwLHYpLGFjPSJ0cmFpbGluZyJpbiB4PyEheC50cmFpbGluZzphYyk7YWEuY2FuY2VsPWZ1bmN0aW9uKCl7R2EmJlVkKEdhKTtsYSYmVWQobGEpO2xiPTA7bGE9R2E9ZWI9SH07cmV0dXJuIGFhfWZ1bmN0aW9uIGRhKG4sdil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG58fHYmJiJmdW5jdGlvbiIhPXR5cGVvZiB2KXRocm93IG5ldyBuYyhGYSk7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgRz1hcmd1bWVudHMsTz12P3YuYXBwbHkodGhpcyxHKTpHWzBdLFU9eC5jYWNoZTtpZihVLmhhcyhPKSlyZXR1cm4gVS5nZXQoTyk7Rz1uLmFwcGx5KHRoaXMsRyk7eC5jYWNoZT1VLnNldChPLEcpO3JldHVybiBHfTt4LmNhY2hlPW5ldyBkYS5DYWNoZTtyZXR1cm4geH1mdW5jdGlvbiBrYShuLHYpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBuYyhGYSk7CnY9T2Iodj09PUg/bi5sZW5ndGgtMTordnx8MCwwKTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHg9YXJndW1lbnRzLEc9LTEsTz1PYih4Lmxlbmd0aC12LDApLFU9dWIoTyk7KytHPE87KVVbR109eFt2K0ddO3N3aXRjaCh2KXtjYXNlIDA6cmV0dXJuIG4uY2FsbCh0aGlzLFUpO2Nhc2UgMTpyZXR1cm4gbi5jYWxsKHRoaXMseFswXSxVKTtjYXNlIDI6cmV0dXJuIG4uY2FsbCh0aGlzLHhbMF0seFsxXSxVKX1PPXViKHYrMSk7Zm9yKEc9LTE7KytHPHY7KU9bR109eFtHXTtPW3ZdPVU7cmV0dXJuIG4uYXBwbHkodGhpcyxPKX19ZnVuY3Rpb24geGEobix2KXtyZXR1cm4gbj52fWZ1bmN0aW9uIHZhKG4pe3JldHVybiBzKG4pJiZGYihuKSYmSGIuY2FsbChuLCJjYWxsZWUiKSYmIUxmLmNhbGwobiwiY2FsbGVlIil9ZnVuY3Rpb24gQ2Eobix2LHgsRyl7Rz0oeD0iZnVuY3Rpb24iPT10eXBlb2YgeD9DKHgsRywzKTpIKT94KG4sdik6SDtyZXR1cm4gRz09PUg/ZWQobix2LHgpOiEhR31mdW5jdGlvbiB5YShuKXtyZXR1cm4gcyhuKSYmCiJzdHJpbmciPT10eXBlb2Ygbi5tZXNzYWdlJiZnYy5jYWxsKG4pPT1NYn1mdW5jdGlvbiBJYShuKXtyZXR1cm4gRGEobikmJmdjLmNhbGwobik9PWdhfWZ1bmN0aW9uIERhKG4pe3ZhciB2PXR5cGVvZiBuO3JldHVybiEhbiYmKCJvYmplY3QiPT12fHwiZnVuY3Rpb24iPT12KX1mdW5jdGlvbiBUYShuKXtyZXR1cm4gbnVsbD09bj8hMTpJYShuKT9NZi50ZXN0KHFmLmNhbGwobikpOnMobikmJmhjLnRlc3Qobil9ZnVuY3Rpb24gWWEobil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBufHxzKG4pJiZnYy5jYWxsKG4pPT10YX1mdW5jdGlvbiBOYShuKXt2YXIgdjtpZighcyhuKXx8Z2MuY2FsbChuKSE9cWF8fHZhKG4pfHwhKEhiLmNhbGwobiwiY29uc3RydWN0b3IiKXx8KHY9bi5jb25zdHJ1Y3RvciwiZnVuY3Rpb24iIT10eXBlb2Ygdnx8diBpbnN0YW5jZW9mIHYpKSlyZXR1cm4hMTt2YXIgeDtCZShuLGZ1bmN0aW9uKEcsTyl7eD1PfSxOYyk7cmV0dXJuIHg9PT1IfHxIYi5jYWxsKG4seCl9CmZ1bmN0aW9uIHRiKG4pe3JldHVybiBEYShuKSYmZ2MuY2FsbChuKT09d2F9ZnVuY3Rpb24gcmIobil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBufHxzKG4pJiZnYy5jYWxsKG4pPT1KYX1mdW5jdGlvbiBaYShuKXtyZXR1cm4gcyhuKSYma2Mobi5sZW5ndGgpJiYhIVhhW2djLmNhbGwobildfWZ1bmN0aW9uIHBjKG4sdil7cmV0dXJuIG48dn1mdW5jdGlvbiBHYyhuKXt2YXIgdj1uP1NkKG4pOjA7cmV0dXJuIGtjKHYpP3Y/TGIobik6W106R2Uobil9ZnVuY3Rpb24gWmMobil7cmV0dXJuIFljKG4sTmMobikpfWZ1bmN0aW9uIEdkKG4pe3JldHVybiBkZChuLE5jKG4pKX1mdW5jdGlvbiBOYyhuKXtpZihudWxsPT1uKXJldHVybltdO0RhKG4pfHwobj1rZChuKSk7Zm9yKHZhciB2PW4ubGVuZ3RoLHY9diYma2ModikmJihjYihuKXx8dmEobikpJiZ2fHwwLHg9bi5jb25zdHJ1Y3RvcixHPS0xLHg9ImZ1bmN0aW9uIj09dHlwZW9mIHgmJngucHJvdG90eXBlPT09bixPPXViKHYpLFU9MDx2OysrRzwKdjspT1tHXT1HKyIiO2Zvcih2YXIgYWEgaW4gbilVJiZkYyhhYSx2KXx8ImNvbnN0cnVjdG9yIj09YWEmJih4fHwhSGIuY2FsbChuLGFhKSl8fE8ucHVzaChhYSk7cmV0dXJuIE99ZnVuY3Rpb24gb2Yobil7bj1RYihuKTtmb3IodmFyIHY9LTEseD1UYihuKSxHPXgubGVuZ3RoLE89dWIoRyk7Kyt2PEc7KXt2YXIgVT14W3ZdO09bdl09W1UsbltVXV19cmV0dXJuIE99ZnVuY3Rpb24gR2Uobil7cmV0dXJuIGhkKG4sVGIobikpfWZ1bmN0aW9uIGpmKG4pe3JldHVybihuPWYobikpJiZuLnJlcGxhY2UoTGQsZykucmVwbGFjZShoZSwiIil9ZnVuY3Rpb24gbWYobix2KXt2YXIgeD0iIjtuPWYobik7dj0rdjtpZigxPnZ8fCFufHwheWQodikpcmV0dXJuIHg7ZG8gdiUyJiYoeCs9biksdj1NYyh2LzIpLG4rPW47d2hpbGUodik7cmV0dXJuIHh9ZnVuY3Rpb24gcmYobix2LHgpe3ZhciBHPW47bj1mKG4pO2lmKCFuKXJldHVybiBuO2lmKHg/YmIoRyx2LHgpOm51bGw9PXYpcmV0dXJuIG4uc2xpY2UodShuKSwKdyhuKSsxKTt2Kz0iIjtyZXR1cm4gbi5zbGljZShkKG4sdiksYyhuLHYpKzEpfWZ1bmN0aW9uIGhmKG4sdix4KXt4JiZiYihuLHYseCkmJih2PUgpO249ZihuKTtyZXR1cm4gbi5tYXRjaCh2fHxMZSl8fFtdfWZ1bmN0aW9uIEVlKG4sdix4KXt4JiZiYihuLHYseCkmJih2PUgpO3JldHVybiBzKG4pP3NmKG4pOnNkKG4sdil9ZnVuY3Rpb24gaWQobil7cmV0dXJuIG59ZnVuY3Rpb24gc2Yobil7cmV0dXJuIGZkKExjKG4sITApKX1mdW5jdGlvbiBYZShuLHYseCl7aWYobnVsbD09eCl7dmFyIEc9RGEodiksTz1HP1RiKHYpOkg7KChPPU8mJk8ubGVuZ3RoP2RkKHYsTyk6SCk/Ty5sZW5ndGg6Ryl8fChPPSExLHg9dix2PW4sbj10aGlzKX1PfHwoTz1kZCh2LFRiKHYpKSk7dmFyIFU9ITAsRz0tMSxhYT1JYShuKSxjYT1PLmxlbmd0aDshMT09PXg/VT0hMTpEYSh4KSYmImNoYWluImluIHgmJihVPXguY2hhaW4pO2Zvcig7KytHPGNhOyl7eD1PW0ddO3ZhciBsYT12W3hdO25beF09bGE7YWEmJgoobi5wcm90b3R5cGVbeF09ZnVuY3Rpb24obWEpe3JldHVybiBmdW5jdGlvbigpe3ZhciB1YT10aGlzLl9fY2hhaW5fXztpZihVfHx1YSl7dmFyIEJhPW4odGhpcy5fX3dyYXBwZWRfXyk7KEJhLl9fYWN0aW9uc19fPUxiKHRoaXMuX19hY3Rpb25zX18pKS5wdXNoKHtmdW5jOm1hLGFyZ3M6YXJndW1lbnRzLHRoaXNBcmc6bn0pO0JhLl9fY2hhaW5fXz11YTtyZXR1cm4gQmF9cmV0dXJuIG1hLmFwcGx5KG4sUmMoW3RoaXMudmFsdWUoKV0sYXJndW1lbnRzKSl9fShsYSkpfXJldHVybiBufWZ1bmN0aW9uIHRmKCl7fWZ1bmN0aW9uIHplKG4pe3JldHVybiBIYyhuKT9SZChuKTpUZShuKX1yYT1yYT9BYy5kZWZhdWx0cyhpYy5PYmplY3QoKSxyYSxBYy5waWNrKGljLHJkKSk6aWM7dmFyIHViPXJhLkFycmF5LHVmPXJhLkRhdGUsTmY9cmEuRXJyb3IsdmY9cmEuRnVuY3Rpb24samQ9cmEuTWF0aCx3Zj1yYS5OdW1iZXIsa2Q9cmEuT2JqZWN0LFllPXJhLlJlZ0V4cCx4Zj1yYS5TdHJpbmcsbmM9CnJhLlR5cGVFcnJvcix5Zj11Yi5wcm90b3R5cGUsWmU9a2QucHJvdG90eXBlLE9mPXhmLnByb3RvdHlwZSxxZj12Zi5wcm90b3R5cGUudG9TdHJpbmcsSGI9WmUuaGFzT3duUHJvcGVydHksUGY9MCxnYz1aZS50b1N0cmluZyxRZj1pYy5fLE1mPVllKCJeIitxZi5jYWxsKEhiKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkXHgyNiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKSxKZj1yYS5BcnJheUJ1ZmZlcixVZD1yYS5jbGVhclRpbWVvdXQsUmY9cmEucGFyc2VGbG9hdCxLZj1qZC5wb3csTGY9WmUucHJvcGVydHlJc0VudW1lcmFibGUseWU9aGIocmEsIlNldCIpLEFlPXJhLnNldFRpbWVvdXQsZmY9eWYuc3BsaWNlLGdmPXJhLlVpbnQ4QXJyYXksemY9aGIocmEsIldlYWtNYXAiKSxEZT1qZC5jZWlsLHhlPWhiKGtkLCJjcmVhdGUiKSxNYz1qZC5mbG9vcixTZj1oYih1YiwKImlzQXJyYXkiKSx5ZD1yYS5pc0Zpbml0ZSxBZj1oYihrZCwia2V5cyIpLE9iPWpkLm1heCxiYz1qZC5taW4sVGY9aGIodWYsIm5vdyIpLFVmPXJhLnBhcnNlSW50LEhlPWpkLnJhbmRvbSxWZj13Zi5ORUdBVElWRV9JTkZJTklUWSx3ZT13Zi5QT1NJVElWRV9JTkZJTklUWSxJZj00Mjk0OTY3Mjk0LEhmPTIxNDc0ODM2NDcscGY9OTAwNzE5OTI1NDc0MDk5MSxJZT16ZiYmbmV3IHpmLEZlPXt9O1Quc3VwcG9ydD17fTtULnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpQYyxldmFsdWF0ZTpKZSxpbnRlcnBvbGF0ZTpMLHZhcmlhYmxlOiIiLGltcG9ydHM6e186VH19O3ZhciBUZD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt9cmV0dXJuIGZ1bmN0aW9uKHYpe2lmKERhKHYpKXtuLnByb3RvdHlwZT12O3ZhciB4PW5ldyBuO24ucHJvdG90eXBlPUh9cmV0dXJuIHh8fHt9fX0oKSxzYz0kKFhiKSwkZT0kKHRkLCEwKSxCZT1qYSgpLGVmPWphKCEwKSxuZj1JZT9mdW5jdGlvbihuLHYpe0llLnNldChuLAp2KTtyZXR1cm4gbn06aWQsVWU9SWU/ZnVuY3Rpb24obil7cmV0dXJuIEllLmdldChuKX06dGYsU2Q9UmQoImxlbmd0aCIpLGtmPWZ1bmN0aW9uKCl7dmFyIG49MCx2PTA7cmV0dXJuIGZ1bmN0aW9uKHgsRyl7dmFyIE89VmQoKSxVPWVhLShPLXYpO3Y9TztpZigwPFUpe2lmKCsrbj49WilyZXR1cm4geH1lbHNlIG49MDtyZXR1cm4gbmYoeCxHKX19KCksV2Y9a2EoZnVuY3Rpb24obix2KXtyZXR1cm4gcyhuKSYmRmIobik/cmMobixOYih2LCExLCEwKSk6W119KSxYZj1SYigpLFlmPVJiKCEwKSxaZj1rYShmdW5jdGlvbihuKXtmb3IodmFyIHY9bi5sZW5ndGgseD12LEc9dWIobWEpLE89eWIoKSxVPU89PT1xLGFhPVtdO3gtLTspe3ZhciBjYT1uW3hdPUZiKGNhPW5beF0pP2NhOltdO0dbeF09VSYmMTIwPD1jYS5sZW5ndGg/eGUmJnllP25ldyBLYyh4JiZjYSk6bnVsbDpudWxsfXZhciBVPW5bMF0sbGE9LTEsbWE9VT9VLmxlbmd0aDowLHVhPUdbMF07YTpmb3IoOysrbGE8bWE7KWlmKGNhPQpVW2xhXSwwPih1YT91Yyh1YSxjYSk6TyhhYSxjYSwwKSkpe2Zvcih4PXY7LS14Oyl7dmFyIEJhPUdbeF07aWYoMD4oQmE/dWMoQmEsY2EpOk8oblt4XSxjYSwwKSkpY29udGludWUgYX11YSYmdWEucHVzaChjYSk7YWEucHVzaChjYSl9cmV0dXJuIGFhfSksJGY9a2EoZnVuY3Rpb24obix2KXt2PU5iKHYpO3ZhciB4PURjKG4sdik7cmUobix2LnNvcnQoYSkpO3JldHVybiB4fSksYWc9bmIoKSxiZz1uYighMCksY2c9a2EoZnVuY3Rpb24obil7cmV0dXJuIHZkKE5iKG4sITEsITApKX0pLGRnPWthKGZ1bmN0aW9uKG4sdil7cmV0dXJuIEZiKG4pP3JjKG4sdik6W119KSxlZz1rYShJYyksZmc9a2EoZnVuY3Rpb24obil7dmFyIHY9bi5sZW5ndGgseD0yPHY/blt2LTJdOkgsRz0xPHY/blt2LTFdOkg7Mjx2JiYiZnVuY3Rpb24iPT10eXBlb2YgeD92LT0yOih4PTE8diYmImZ1bmN0aW9uIj09dHlwZW9mIEc/KC0tdixHKTpILEc9SCk7bi5sZW5ndGg9djtyZXR1cm4gWWQobix4LEcpfSksZ2c9CmthKGZ1bmN0aW9uKG4pe249TmIobik7cmV0dXJuIHRoaXMudGhydShmdW5jdGlvbih2KXt2PWNiKHYpP3Y6W1FiKHYpXTtmb3IodmFyIHg9bixHPS0xLE89di5sZW5ndGgsVT0tMSxhYT14Lmxlbmd0aCxjYT11YihPK2FhKTsrK0c8TzspY2FbR109dltHXTtmb3IoOysrVTxhYTspY2FbRysrXT14W1VdO3JldHVybiBjYX0pfSksaGc9a2EoZnVuY3Rpb24obix2KXtyZXR1cm4gRGMobixOYih2KSl9KSxpZz1TKGZ1bmN0aW9uKG4sdix4KXtIYi5jYWxsKG4seCk/KytuW3hdOm5beF09MX0pLGFmPUpiKHNjKSxqZz1KYigkZSwhMCksQmY9bGMoVmIsc2MpLENmPWxjKGZ1bmN0aW9uKG4sdil7Zm9yKHZhciB4PW4ubGVuZ3RoO3gtLSYmITEhPT12KG5beF0seCxuKTspO3JldHVybiBufSwkZSksa2c9UyhmdW5jdGlvbihuLHYseCl7SGIuY2FsbChuLHgpP25beF0ucHVzaCh2KTpuW3hdPVt2XX0pLGxnPVMoZnVuY3Rpb24obix2LHgpe25beF09dn0pLG1nPWthKGZ1bmN0aW9uKG4sdix4KXt2YXIgRz0KLTEsTz0iZnVuY3Rpb24iPT10eXBlb2YgdixVPUhjKHYpLGFhPUZiKG4pP3ViKG4ubGVuZ3RoKTpbXTtzYyhuLGZ1bmN0aW9uKGNhKXt2YXIgbGE9Tz92OlUmJm51bGwhPWNhP2NhW3ZdOkg7YWFbKytHXT1sYT9sYS5hcHBseShjYSx4KTpwZChjYSx2LHgpfSk7cmV0dXJuIGFhfSksbmc9UyhmdW5jdGlvbihuLHYseCl7blt4PzA6MV0ucHVzaCh2KX0sZnVuY3Rpb24oKXtyZXR1cm5bW10sW11dfSksYmY9Q2IoQmQsc2MpLERmPUNiKGZ1bmN0aW9uKG4sdix4LEcpe3ZhciBPPW4ubGVuZ3RoO2ZvcihHJiZPJiYoeD1uWy0tT10pO08tLTspeD12KHgsbltPXSxPLG4pO3JldHVybiB4fSwkZSksb2c9a2EoZnVuY3Rpb24obix2KXtpZihudWxsPT1uKXJldHVybltdO3ZhciB4PXZbMl07eCYmYmIodlswXSx2WzFdLHgpJiYodi5sZW5ndGg9MSk7cmV0dXJuIHVlKG4sTmIodiksW10pfSksVmQ9VGZ8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB1ZikuZ2V0VGltZSgpfSxFZj1rYShmdW5jdGlvbihuLAp2LHgpe3ZhciBHPUI7aWYoeC5sZW5ndGgpdmFyIE89aCh4LEVmLnBsYWNlaG9sZGVyKSxHPUd8UDtyZXR1cm4gTGEobixHLHYseCxPKX0pLHBnPWthKGZ1bmN0aW9uKG4sdil7dj12Lmxlbmd0aD9OYih2KTpHZChuKTtmb3IodmFyIHg9LTEsRz12Lmxlbmd0aDsrK3g8Rzspe3ZhciBPPXZbeF07bltPXT1MYShuW09dLEIsbil9cmV0dXJuIG59KSxGZj1rYShmdW5jdGlvbihuLHYseCl7dmFyIEc9QnxJO2lmKHgubGVuZ3RoKXZhciBPPWgoeCxGZi5wbGFjZWhvbGRlciksRz1HfFA7cmV0dXJuIExhKHYsRyxuLHgsTyl9KSxxZz1NYShEKSxyZz1NYShKKSxzZz1rYShmdW5jdGlvbihuLHYpe3JldHVybiBPZChuLDEsdil9KSx0Zz1rYShmdW5jdGlvbihuLHYseCl7cmV0dXJuIE9kKG4sdix4KX0pLHVnPWpjKCksY2Y9amMoITApLHZnPWthKGZ1bmN0aW9uKG4sdil7dj1OYih2KTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbnx8IVhjKHYsdCkpdGhyb3cgbmV3IG5jKEZhKTt2YXIgeD12Lmxlbmd0aDsKcmV0dXJuIGthKGZ1bmN0aW9uKEcpe2Zvcih2YXIgTz1iYyhHLmxlbmd0aCx4KTtPLS07KUdbT109dltPXShHW09dKTtyZXR1cm4gbi5hcHBseSh0aGlzLEcpfSl9KSx3Zz1xYihQKSx4Zz1xYihWKSx5Zz1rYShmdW5jdGlvbihuLHYpe3JldHVybiBMYShuLG5hLEgsSCxILE5iKHYpKX0pLGNiPVNmfHxmdW5jdGlvbihuKXtyZXR1cm4gcyhuKSYma2Mobi5sZW5ndGgpJiZnYy5jYWxsKG4pPT1VYX0sV2U9YmEocWUpLGRmPWJhKGZ1bmN0aW9uKG4sdix4KXtyZXR1cm4geD9OZChuLHYseCk6VWMobix2KX0pLHpnPVJhKGRmLGZ1bmN0aW9uKG4sdil7cmV0dXJuIG49PT1IP3Y6bn0pLEFnPVJhKFdlLGFlKSxCZz16YihYYiksQ2c9emIodGQpLERnPUhhKEJlKSxFZz1IYShlZiksRmc9YWIoWGIpLEdnPWFiKHRkKSxUYj1BZj9mdW5jdGlvbihuKXt2YXIgdj1udWxsPT1uP0g6bi5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdiYmdi5wcm90b3R5cGU9PT1ufHwiZnVuY3Rpb24iIT0KdHlwZW9mIG4mJkZiKG4pP3ZjKG4pOkRhKG4pP0FmKG4pOltdfTp2YyxIZz13YyghMCksSWc9d2MoKSxKZz1rYShmdW5jdGlvbihuLHYpe2lmKG51bGw9PW4pcmV0dXJue307aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHZbMF0pcmV0dXJuIHY9Q2MoTmIodikseGYpLG9jKG4scmMoTmMobiksdikpO3ZhciB4PUModlswXSx2WzFdLDMpO3JldHVybiBIZChuLGZ1bmN0aW9uKEcsTyxVKXtyZXR1cm4heChHLE8sVSl9KX0pLEtnPWthKGZ1bmN0aW9uKG4sdil7cmV0dXJuIG51bGw9PW4/e306ImZ1bmN0aW9uIj09dHlwZW9mIHZbMF0/SGQobixDKHZbMF0sdlsxXSwzKSk6b2MobixOYih2KSl9KSxMZz16YShmdW5jdGlvbihuLHYseCl7dj12LnRvTG93ZXJDYXNlKCk7cmV0dXJuIG4rKHg/di5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt2LnNsaWNlKDEpOnYpfSksTWc9emEoZnVuY3Rpb24obix2LHgpe3JldHVybiBuKyh4PyItIjoiIikrdi50b0xvd2VyQ2FzZSgpfSksTmc9ZGIoKSxPZz1kYighMCksClBnPXphKGZ1bmN0aW9uKG4sdix4KXtyZXR1cm4gbisoeD8iXyI6IiIpK3YudG9Mb3dlckNhc2UoKX0pLFFnPXphKGZ1bmN0aW9uKG4sdix4KXtyZXR1cm4gbisoeD8iICI6IiIpKyh2LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Yuc2xpY2UoMSkpfSksR2Y9a2EoZnVuY3Rpb24obix2KXt0cnl7cmV0dXJuIG4uYXBwbHkoSCx2KX1jYXRjaCh4KXtyZXR1cm4geWEoeCk/eDpuZXcgTmYoeCl9fSksUmc9a2EoZnVuY3Rpb24obix2KXtyZXR1cm4gZnVuY3Rpb24oeCl7cmV0dXJuIHBkKHgsbix2KX19KSxTZz1rYShmdW5jdGlvbihuLHYpe3JldHVybiBmdW5jdGlvbih4KXtyZXR1cm4gcGQobix4LHYpfX0pLFRnPWpiKCJjZWlsIiksVWc9amIoImZsb29yIiksVmc9R2IoeGEsVmYpLFdnPUdiKHBjLHdlKSxYZz1qYigicm91bmQiKTtULnByb3RvdHlwZT0kYS5wcm90b3R5cGU7b2IucHJvdG90eXBlPVRkKCRhLnByb3RvdHlwZSk7b2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPW9iO1FhLnByb3RvdHlwZT0KVGQoJGEucHJvdG90eXBlKTtRYS5wcm90b3R5cGUuY29uc3RydWN0b3I9UWE7ZmMucHJvdG90eXBlWyJkZWxldGUiXT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5oYXMobikmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW25dfTtmYy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKG4pe3JldHVybiJfX3Byb3RvX18iPT1uP0g6dGhpcy5fX2RhdGFfX1tuXX07ZmMucHJvdG90eXBlLmhhcz1mdW5jdGlvbihuKXtyZXR1cm4iX19wcm90b19fIiE9biYmSGIuY2FsbCh0aGlzLl9fZGF0YV9fLG4pfTtmYy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKG4sdil7Il9fcHJvdG9fXyIhPW4mJih0aGlzLl9fZGF0YV9fW25dPXYpO3JldHVybiB0aGlzfTtLYy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihuKXt2YXIgdj10aGlzLmRhdGE7InN0cmluZyI9PXR5cGVvZiBufHxEYShuKT92LnNldC5hZGQobik6di5oYXNoW25dPSEwfTtkYS5DYWNoZT1mYztULmFmdGVyPWZ1bmN0aW9uKG4sdil7aWYoImZ1bmN0aW9uIiE9CnR5cGVvZiB2KWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXt2YXIgeD1uO249djt2PXh9ZWxzZSB0aHJvdyBuZXcgbmMoRmEpO249eWQobj0rbik/bjowO3JldHVybiBmdW5jdGlvbigpe2lmKDE+LS1uKXJldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O1QuYXJ5PWZ1bmN0aW9uKG4sdix4KXt4JiZiYihuLHYseCkmJih2PUgpO3Y9biYmbnVsbD09dj9uLmxlbmd0aDpPYigrdnx8MCwwKTtyZXR1cm4gTGEobixZLEgsSCxILEgsdil9O1QuYXNzaWduPWRmO1QuYXQ9aGc7VC5iZWZvcmU9WDtULmJpbmQ9RWY7VC5iaW5kQWxsPXBnO1QuYmluZEtleT1GZjtULmNhbGxiYWNrPUVlO1QuY2hhaW49bWM7VC5jaHVuaz1mdW5jdGlvbihuLHYseCl7dj0oeD9iYihuLHYseCk6bnVsbD09dik/MTpPYihNYyh2KXx8MSwxKTt4PTA7Zm9yKHZhciBHPW4/bi5sZW5ndGg6MCxPPS0xLFU9dWIoRGUoRy92KSk7eDxHOylVWysrT109UGIobix4LHgrPXYpO3JldHVybiBVfTtULmNvbXBhY3Q9ZnVuY3Rpb24obil7Zm9yKHZhciB2PQotMSx4PW4/bi5sZW5ndGg6MCxHPS0xLE89W107Kyt2PHg7KXt2YXIgVT1uW3ZdO1UmJihPWysrR109VSl9cmV0dXJuIE99O1QuY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fTtULmNvdW50Qnk9aWc7VC5jcmVhdGU9ZnVuY3Rpb24obix2LHgpe3ZhciBHPVRkKG4pO3gmJmJiKG4sdix4KSYmKHY9SCk7cmV0dXJuIHY/VWMoRyx2KTpHfTtULmN1cnJ5PXFnO1QuY3VycnlSaWdodD1yZztULmRlYm91bmNlPVc7VC5kZWZhdWx0cz16ZztULmRlZmF1bHRzRGVlcD1BZztULmRlZmVyPXNnO1QuZGVsYXk9dGc7VC5kaWZmZXJlbmNlPVdmO1QuZHJvcD1aZDtULmRyb3BSaWdodD1jZTtULmRyb3BSaWdodFdoaWxlPWZ1bmN0aW9uKG4sdix4KXtyZXR1cm4gbiYmbi5sZW5ndGg/d2QobixPYSh2LHgsMyksITAsITApOltdfTtULmRyb3BXaGlsZT1mdW5jdGlvbihuLHYseCl7cmV0dXJuIG4mJm4ubGVuZ3RoP3dkKG4sT2Eodix4LDMpLCEwKTpbXX07VC5maWxsPQpmdW5jdGlvbihuLHYseCxHKXt2YXIgTz1uP24ubGVuZ3RoOjA7aWYoIU8pcmV0dXJuW107eCYmIm51bWJlciIhPXR5cGVvZiB4JiZiYihuLHYseCkmJih4PTAsRz1PKTtPPW4ubGVuZ3RoO3g9bnVsbD09eD8wOit4fHwwOzA+eCYmKHg9LXg+Tz8wOk8reCk7Rz1HPT09SHx8Rz5PP086K0d8fDA7MD5HJiYoRys9Tyk7Tz14Pkc/MDpHPj4+MDtmb3IoeD4+Pj0wO3g8Tzspblt4KytdPXY7cmV0dXJuIG59O1QuZmlsdGVyPW5kO1QuZmxhdHRlbj1mdW5jdGlvbihuLHYseCl7dmFyIEc9bj9uLmxlbmd0aDowO3gmJmJiKG4sdix4KSYmKHY9ITEpO3JldHVybiBHP05iKG4sdik6W119O1QuZmxhdHRlbkRlZXA9ZnVuY3Rpb24obil7cmV0dXJuIG4mJm4ubGVuZ3RoP05iKG4sITApOltdfTtULmZsb3c9dWc7VC5mbG93UmlnaHQ9Y2Y7VC5mb3JFYWNoPUJmO1QuZm9yRWFjaFJpZ2h0PUNmO1QuZm9ySW49RGc7VC5mb3JJblJpZ2h0PUVnO1QuZm9yT3duPUZnO1QuZm9yT3duUmlnaHQ9R2c7VC5mdW5jdGlvbnM9CkdkO1QuZ3JvdXBCeT1rZztULmluZGV4Qnk9bGc7VC5pbml0aWFsPWZ1bmN0aW9uKG4pe3JldHVybiBjZShuLDEpfTtULmludGVyc2VjdGlvbj1aZjtULmludmVydD1mdW5jdGlvbihuLHYseCl7eCYmYmIobix2LHgpJiYodj1IKTt4PS0xO2Zvcih2YXIgRz1UYihuKSxPPUcubGVuZ3RoLFU9e307Kyt4PE87KXt2YXIgYWE9R1t4XSxjYT1uW2FhXTt2P0hiLmNhbGwoVSxjYSk/VVtjYV0ucHVzaChhYSk6VVtjYV09W2FhXTpVW2NhXT1hYX1yZXR1cm4gVX07VC5pbnZva2U9bWc7VC5rZXlzPVRiO1Qua2V5c0luPU5jO1QubWFwPUVkO1QubWFwS2V5cz1IZztULm1hcFZhbHVlcz1JZztULm1hdGNoZXM9c2Y7VC5tYXRjaGVzUHJvcGVydHk9ZnVuY3Rpb24obix2KXtyZXR1cm4gcGUobixMYyh2LCEwKSl9O1QubWVtb2l6ZT1kYTtULm1lcmdlPVdlO1QubWV0aG9kPVJnO1QubWV0aG9kT2Y9U2c7VC5taXhpbj1YZTtULm1vZEFyZ3M9dmc7VC5uZWdhdGU9ZnVuY3Rpb24obil7aWYoImZ1bmN0aW9uIiE9CnR5cGVvZiBuKXRocm93IG5ldyBuYyhGYSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfX07VC5vbWl0PUpnO1Qub25jZT1mdW5jdGlvbihuKXtyZXR1cm4gWCgyLG4pfTtULnBhaXJzPW9mO1QucGFydGlhbD13ZztULnBhcnRpYWxSaWdodD14ZztULnBhcnRpdGlvbj1uZztULnBpY2s9S2c7VC5wbHVjaz1mdW5jdGlvbihuLHYpe3JldHVybiBFZChuLHplKHYpKX07VC5wcm9wZXJ0eT16ZTtULnByb3BlcnR5T2Y9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBFYyhuLHljKHYpLHYrIiIpfX07VC5wdWxsPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLHY9blswXTtpZighdnx8IXYubGVuZ3RoKXJldHVybiB2O2Zvcih2YXIgeD0wLEc9eWIoKSxPPW4ubGVuZ3RoOysreDxPOylmb3IodmFyIFU9MCxhYT1uW3hdOy0xPChVPUcodixhYSxVKSk7KWZmLmNhbGwodixVLDEpO3JldHVybiB2fTtULnB1bGxBdD0kZjtULnJhbmdlPQpmdW5jdGlvbihuLHYseCl7eCYmYmIobix2LHgpJiYodj14PUgpO249K258fDA7eD1udWxsPT14PzE6K3h8fDA7bnVsbD09dj8odj1uLG49MCk6dj0rdnx8MDt2YXIgRz0tMTt2PU9iKERlKCh2LW4pLyh4fHwxKSksMCk7Zm9yKHZhciBPPXViKHYpOysrRzx2OylPW0ddPW4sbis9eDtyZXR1cm4gT307VC5yZWFyZz15ZztULnJlamVjdD1mdW5jdGlvbihuLHYseCl7dmFyIEc9Y2Iobik/QWQ6bmU7dj1PYSh2LHgsMyk7cmV0dXJuIEcobixmdW5jdGlvbihPLFUsYWEpe3JldHVybiF2KE8sVSxhYSl9KX07VC5yZW1vdmU9ZnVuY3Rpb24obix2LHgpe3ZhciBHPVtdO2lmKCFufHwhbi5sZW5ndGgpcmV0dXJuIEc7dmFyIE89LTEsVT1bXSxhYT1uLmxlbmd0aDtmb3Iodj1PYSh2LHgsMyk7KytPPGFhOyl4PW5bT10sdih4LE8sbikmJihHLnB1c2goeCksVS5wdXNoKE8pKTtyZShuLFUpO3JldHVybiBHfTtULnJlc3Q9ZWU7VC5yZXN0UGFyYW09a2E7VC5zZXQ9ZnVuY3Rpb24obix2LHgpe2lmKG51bGw9PQpuKXJldHVybiBuO3ZhciBHPXYrIiI7dj1udWxsIT1uW0ddfHxIYyh2LG4pP1tHXTp5Yyh2KTtmb3IodmFyIEc9LTEsTz12Lmxlbmd0aCxVPU8tMSxhYT1uO251bGwhPWFhJiYrK0c8Tzspe3ZhciBjYT12W0ddO0RhKGFhKSYmKEc9PVU/YWFbY2FdPXg6bnVsbD09YWFbY2FdJiYoYWFbY2FdPWRjKHZbRysxXSk/W106e30pKTthYT1hYVtjYV19cmV0dXJuIG59O1Quc2h1ZmZsZT1mdW5jdGlvbihuKXtyZXR1cm4gSmQobix3ZSl9O1Quc2xpY2U9ZnVuY3Rpb24obix2LHgpe3ZhciBHPW4/bi5sZW5ndGg6MDtpZighRylyZXR1cm5bXTt4JiYibnVtYmVyIiE9dHlwZW9mIHgmJmJiKG4sdix4KSYmKHY9MCx4PUcpO3JldHVybiBQYihuLHYseCl9O1Quc29ydEJ5PWZ1bmN0aW9uKG4sdix4KXtpZihudWxsPT1uKXJldHVybltdO3gmJmJiKG4sdix4KSYmKHY9SCk7dmFyIEc9LTE7dj1PYSh2LHgsMyk7bj1RZChuLGZ1bmN0aW9uKE8sVSxhYSl7cmV0dXJue2NyaXRlcmlhOnYoTyxVLGFhKSxpbmRleDorK0csCnZhbHVlOk99fSk7cmV0dXJuIHVkKG4sYil9O1Quc29ydEJ5QWxsPW9nO1Quc29ydEJ5T3JkZXI9ZnVuY3Rpb24obix2LHgsRyl7aWYobnVsbD09bilyZXR1cm5bXTtHJiZiYih2LHgsRykmJih4PUgpO2NiKHYpfHwodj1udWxsPT12P1tdOlt2XSk7Y2IoeCl8fCh4PW51bGw9PXg/W106W3hdKTtyZXR1cm4gdWUobix2LHgpfTtULnNwcmVhZD1mdW5jdGlvbihuKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgbmMoRmEpO3JldHVybiBmdW5jdGlvbih2KXtyZXR1cm4gbi5hcHBseSh0aGlzLHYpfX07VC50YWtlPWZ1bmN0aW9uKG4sdix4KXtpZighbnx8IW4ubGVuZ3RoKXJldHVybltdO2lmKHg/YmIobix2LHgpOm51bGw9PXYpdj0xO3JldHVybiBQYihuLDAsMD52PzA6dil9O1QudGFrZVJpZ2h0PWZ1bmN0aW9uKG4sdix4KXt2YXIgRz1uP24ubGVuZ3RoOjA7aWYoIUcpcmV0dXJuW107aWYoeD9iYihuLHYseCk6bnVsbD09dil2PTE7dj1HLSgrdnx8MCk7cmV0dXJuIFBiKG4sCjA+dj8wOnYpfTtULnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG4sdix4KXtyZXR1cm4gbiYmbi5sZW5ndGg/d2QobixPYSh2LHgsMyksITEsITApOltdfTtULnRha2VXaGlsZT1mdW5jdGlvbihuLHYseCl7cmV0dXJuIG4mJm4ubGVuZ3RoP3dkKG4sT2Eodix4LDMpKTpbXX07VC50YXA9ZnVuY3Rpb24obix2LHgpe3YuY2FsbCh4LG4pO3JldHVybiBufTtULnRocm90dGxlPWZ1bmN0aW9uKG4sdix4KXt2YXIgRz0hMCxPPSEwO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBuYyhGYSk7ITE9PT14P0c9ITE6RGEoeCkmJihHPSJsZWFkaW5nImluIHg/ISF4LmxlYWRpbmc6RyxPPSJ0cmFpbGluZyJpbiB4PyEheC50cmFpbGluZzpPKTtyZXR1cm4gVyhuLHYse2xlYWRpbmc6RyxtYXhXYWl0Oit2LHRyYWlsaW5nOk99KX07VC50aHJ1PWVjO1QudGltZXM9ZnVuY3Rpb24obix2LHgpe249TWMobik7aWYoMT5ufHwheWQobikpcmV0dXJuW107dmFyIEc9LTEsTz11YihiYyhuLDQyOTQ5NjcyOTUpKTsKZm9yKHY9Qyh2LHgsMSk7KytHPG47KTQyOTQ5NjcyOTU+Rz9PW0ddPXYoRyk6dihHKTtyZXR1cm4gT307VC50b0FycmF5PUdjO1QudG9QbGFpbk9iamVjdD1aYztULnRyYW5zZm9ybT1mdW5jdGlvbihuLHYseCxHKXt2YXIgTz1jYihuKXx8WmEobik7dj1PYSh2LEcsNCk7bnVsbD09eCYmKE98fERhKG4pPyhHPW4uY29uc3RydWN0b3IseD1PP2NiKG4pP25ldyBHOltdOlRkKElhKEcpP0cucHJvdG90eXBlOkgpKTp4PXt9KTsoTz9WYjpYYikobixmdW5jdGlvbihVLGFhLGNhKXtyZXR1cm4gdih4LFUsYWEsY2EpfSk7cmV0dXJuIHh9O1QudW5pb249Y2c7VC51bmlxPWZlO1QudW56aXA9SWM7VC51bnppcFdpdGg9WWQ7VC52YWx1ZXM9R2U7VC52YWx1ZXNJbj1mdW5jdGlvbihuKXtyZXR1cm4gaGQobixOYyhuKSl9O1Qud2hlcmU9ZnVuY3Rpb24obix2KXtyZXR1cm4gbmQobixmZCh2KSl9O1Qud2l0aG91dD1kZztULndyYXA9ZnVuY3Rpb24obix2KXt2PW51bGw9PXY/aWQ6djtyZXR1cm4gTGEodiwKUCxILFtuXSxbXSl9O1QueG9yPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLHY9YXJndW1lbnRzLmxlbmd0aDsrK248djspe3ZhciB4PWFyZ3VtZW50c1tuXTtpZihGYih4KSl2YXIgRz1HP1JjKHJjKEcseCkscmMoeCxHKSk6eH1yZXR1cm4gRz92ZChHKTpbXX07VC56aXA9ZWc7VC56aXBPYmplY3Q9b2Q7VC56aXBXaXRoPWZnO1QuYmFja2Zsb3c9Y2Y7VC5jb2xsZWN0PUVkO1QuY29tcG9zZT1jZjtULmVhY2g9QmY7VC5lYWNoUmlnaHQ9Q2Y7VC5leHRlbmQ9ZGY7VC5pdGVyYXRlZT1FZTtULm1ldGhvZHM9R2Q7VC5vYmplY3Q9b2Q7VC5zZWxlY3Q9bmQ7VC50YWlsPWVlO1QudW5pcXVlPWZlO1hlKFQsVCk7VC5hZGQ9ZnVuY3Rpb24obix2KXtyZXR1cm4oK258fDApKygrdnx8MCl9O1QuYXR0ZW1wdD1HZjtULmNhbWVsQ2FzZT1MZztULmNhcGl0YWxpemU9ZnVuY3Rpb24obil7cmV0dXJuKG49ZihuKSkmJm4uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbi5zbGljZSgxKX07VC5jZWlsPVRnOwpULmNsb25lPWZ1bmN0aW9uKG4sdix4LEcpe3YmJiJib29sZWFuIiE9dHlwZW9mIHYmJmJiKG4sdix4KT92PSExOiJmdW5jdGlvbiI9PXR5cGVvZiB2JiYoRz14LHg9dix2PSExKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeD9MYyhuLHYsQyh4LEcsMykpOkxjKG4sdil9O1QuY2xvbmVEZWVwPWZ1bmN0aW9uKG4sdix4KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygdj9MYyhuLCEwLEModix4LDMpKTpMYyhuLCEwKX07VC5kZWJ1cnI9amY7VC5lbmRzV2l0aD1mdW5jdGlvbihuLHYseCl7bj1mKG4pO3YrPSIiO3ZhciBHPW4ubGVuZ3RoO3g9eD09PUg/RzpiYygwPng/MDoreHx8MCxHKTt4LT12Lmxlbmd0aDtyZXR1cm4gMDw9eCYmbi5pbmRleE9mKHYseCk9PXh9O1QuZXNjYXBlPWZ1bmN0aW9uKG4pe3JldHVybihuPWYobikpJiZWYS50ZXN0KG4pP24ucmVwbGFjZShYZCxlKTpufTtULmVzY2FwZVJlZ0V4cD1mdW5jdGlvbihuKXtyZXR1cm4obj1mKG4pKSYmZ2UudGVzdChuKT9uLnJlcGxhY2UoS2QsCmspOm58fCIoPzopIn07VC5ldmVyeT1EZDtULmZpbmQ9YWY7VC5maW5kSW5kZXg9WGY7VC5maW5kS2V5PUJnO1QuZmluZExhc3Q9amc7VC5maW5kTGFzdEluZGV4PVlmO1QuZmluZExhc3RLZXk9Q2c7VC5maW5kV2hlcmU9ZnVuY3Rpb24obix2KXtyZXR1cm4gYWYobixmZCh2KSl9O1QuZmlyc3Q9ZGU7VC5mbG9vcj1VZztULmdldD1mdW5jdGlvbihuLHYseCl7bj1udWxsPT1uP0g6RWMobix5Yyh2KSx2KyIiKTtyZXR1cm4gbj09PUg/eDpufTtULmd0PXhhO1QuZ3RlPWZ1bmN0aW9uKG4sdil7cmV0dXJuIG4+PXZ9O1QuaGFzPWZ1bmN0aW9uKG4sdil7aWYobnVsbD09bilyZXR1cm4hMTt2YXIgeD1IYi5jYWxsKG4sdik7aWYoIXgmJiFIYyh2KSl7dj15Yyh2KTtuPTE9PXYubGVuZ3RoP246RWMobixQYih2LDAsLTEpKTtpZihudWxsPT1uKXJldHVybiExO3Y9JGModik7eD1IYi5jYWxsKG4sdil9cmV0dXJuIHh8fGtjKG4ubGVuZ3RoKSYmZGModixuLmxlbmd0aCkmJihjYihuKXx8dmEobikpfTsKVC5pZGVudGl0eT1pZDtULmluY2x1ZGVzPXFkO1QuaW5kZXhPZj1TYztULmluUmFuZ2U9ZnVuY3Rpb24obix2LHgpe3Y9K3Z8fDA7eD09PUg/KHg9dix2PTApOng9K3h8fDA7cmV0dXJuIG4+PWJjKHYseCkmJm48T2Iodix4KX07VC5pc0FyZ3VtZW50cz12YTtULmlzQXJyYXk9Y2I7VC5pc0Jvb2xlYW49ZnVuY3Rpb24obil7cmV0dXJuITA9PT1ufHwhMT09PW58fHMobikmJmdjLmNhbGwobik9PXdifTtULmlzRGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gcyhuKSYmZ2MuY2FsbChuKT09QWJ9O1QuaXNFbGVtZW50PWZ1bmN0aW9uKG4pe3JldHVybiEhbiYmMT09PW4ubm9kZVR5cGUmJnMobikmJiFOYShuKX07VC5pc0VtcHR5PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uPyEwOkZiKG4pJiYoY2Iobil8fHJiKG4pfHx2YShuKXx8cyhuKSYmSWEobi5zcGxpY2UpKT8hbi5sZW5ndGg6IVRiKG4pLmxlbmd0aH07VC5pc0VxdWFsPUNhO1QuaXNFcnJvcj15YTtULmlzRmluaXRlPWZ1bmN0aW9uKG4pe3JldHVybiJudW1iZXIiPT0KdHlwZW9mIG4mJnlkKG4pfTtULmlzRnVuY3Rpb249SWE7VC5pc01hdGNoPWZ1bmN0aW9uKG4sdix4LEcpe3g9ImZ1bmN0aW9uIj09dHlwZW9mIHg/Qyh4LEcsMyk6SDtyZXR1cm4gb2UobixnYih2KSx4KX07VC5pc05hTj1mdW5jdGlvbihuKXtyZXR1cm4gWWEobikmJm4hPStufTtULmlzTmF0aXZlPVRhO1QuaXNOdWxsPWZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT09bn07VC5pc051bWJlcj1ZYTtULmlzT2JqZWN0PURhO1QuaXNQbGFpbk9iamVjdD1OYTtULmlzUmVnRXhwPXRiO1QuaXNTdHJpbmc9cmI7VC5pc1R5cGVkQXJyYXk9WmE7VC5pc1VuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gbj09PUh9O1Qua2ViYWJDYXNlPU1nO1QubGFzdD0kYztULmxhc3RJbmRleE9mPWZ1bmN0aW9uKG4sdix4KXt2YXIgRz1uP24ubGVuZ3RoOjA7aWYoIUcpcmV0dXJuLTE7dmFyIE89RztpZigibnVtYmVyIj09dHlwZW9mIHgpTz0oMD54P09iKEcreCwwKTpiYyh4fHwwLEctMSkpKzE7ZWxzZSBpZih4KXJldHVybiBPPQpyKG4sdiwhMCktMSxuPW5bT10sKHY9PT12P3Y9PT1uOm4hPT1uKT9POi0xO2lmKHYhPT12KXJldHVybiBwKG4sTywhMCk7Zm9yKDtPLS07KWlmKG5bT109PT12KXJldHVybiBPO3JldHVybi0xfTtULmx0PXBjO1QubHRlPWZ1bmN0aW9uKG4sdil7cmV0dXJuIG48PXZ9O1QubWF4PVZnO1QubWluPVdnO1Qubm9Db25mbGljdD1mdW5jdGlvbigpe2ljLl89UWY7cmV0dXJuIHRoaXN9O1Qubm9vcD10ZjtULm5vdz1WZDtULnBhZD1mdW5jdGlvbihuLHYseCl7bj1mKG4pO3Y9K3Y7dmFyIEc9bi5sZW5ndGg7aWYoRz49dnx8IXlkKHYpKXJldHVybiBuO0c9KHYtRykvMjt2PU1jKEcpO0c9RGUoRyk7eD1xYygiIixHLHgpO3JldHVybiB4LnNsaWNlKDAsdikrbit4fTtULnBhZExlZnQ9Tmc7VC5wYWRSaWdodD1PZztULnBhcnNlSW50PWZ1bmN0aW9uKG4sdix4KXsoeD9iYihuLHYseCk6bnVsbD09dik/dj0wOnYmJih2PSt2KTtuPXJmKG4pO3JldHVybiBVZihuLHZ8fChQZS50ZXN0KG4pPzE2OjEwKSl9OwpULnJhbmRvbT1mdW5jdGlvbihuLHYseCl7eCYmYmIobix2LHgpJiYodj14PUgpO3ZhciBHPW51bGw9PW4sTz1udWxsPT12O251bGw9PXgmJihPJiYiYm9vbGVhbiI9PXR5cGVvZiBuPyh4PW4sbj0xKToiYm9vbGVhbiI9PXR5cGVvZiB2JiYoeD12LE89ITApKTtHJiZPJiYodj0xLE89ITEpO249K258fDA7Tz8odj1uLG49MCk6dj0rdnx8MDtyZXR1cm4geHx8biUxfHx2JTE/KHg9SGUoKSxiYyhuK3gqKHYtbitSZigiMWUtIisoKHgrIiIpLmxlbmd0aC0xKSkpLHYpKTpuK01jKEhlKCkqKHYtbisxKSl9O1QucmVkdWNlPWJmO1QucmVkdWNlUmlnaHQ9RGY7VC5yZXBlYXQ9bWY7VC5yZXN1bHQ9ZnVuY3Rpb24obix2LHgpe3ZhciBHPW51bGw9PW4/SDpuW3ZdO0c9PT1IJiYobnVsbD09bnx8SGModixuKXx8KHY9eWModiksbj0xPT12Lmxlbmd0aD9uOkVjKG4sUGIodiwwLC0xKSksRz1udWxsPT1uP0g6blskYyh2KV0pLEc9Rz09PUg/eDpHKTtyZXR1cm4gSWEoRyk/Ry5jYWxsKG4pOkd9O1Qucm91bmQ9ClhnO1QucnVuSW5Db250ZXh0PUE7VC5zaXplPWZ1bmN0aW9uKG4pe3ZhciB2PW4/U2Qobik6MDtyZXR1cm4ga2Modik/djpUYihuKS5sZW5ndGh9O1Quc25ha2VDYXNlPVBnO1Quc29tZT1SO1Quc29ydGVkSW5kZXg9YWc7VC5zb3J0ZWRMYXN0SW5kZXg9Ymc7VC5zdGFydENhc2U9UWc7VC5zdGFydHNXaXRoPWZ1bmN0aW9uKG4sdix4KXtuPWYobik7eD1udWxsPT14PzA6YmMoMD54PzA6K3h8fDAsbi5sZW5ndGgpO3JldHVybiBuLmxhc3RJbmRleE9mKHYseCk9PXh9O1Quc3VtPWZ1bmN0aW9uKG4sdix4KXt4JiZiYihuLHYseCkmJih2PUgpO3Y9T2Eodix4LDMpO2lmKDE9PXYubGVuZ3RoKXtuPWNiKG4pP246SWQobik7eD1uLmxlbmd0aDtmb3IodmFyIEc9MDt4LS07KUcrPSt2KG5beF0pfHwwO249R31lbHNlIG49Z2Qobix2KTtyZXR1cm4gbn07VC50ZW1wbGF0ZT1mdW5jdGlvbihuLHYseCl7dmFyIEc9VC50ZW1wbGF0ZVNldHRpbmdzO3gmJmJiKG4sdix4KSYmKHY9eD1IKTtuPWYobik7CnY9TmQoVWMoe30seHx8diksRyxNZCk7eD1OZChVYyh7fSx2LmltcG9ydHMpLEcuaW1wb3J0cyxNZCk7dmFyIE89VGIoeCksVT1oZCh4LE8pLGFhLGNhLGxhPTA7eD12LmludGVycG9sYXRlfHwkYjt2YXIgbWE9Il9fcCArXHgzZCAnIjt4PVllKCh2LmVzY2FwZXx8JGIpLnNvdXJjZSsifCIreC5zb3VyY2UrInwiKyh4PT09TD9PZTokYikuc291cmNlKyJ8Iisodi5ldmFsdWF0ZXx8JGIpLnNvdXJjZSsifCQiLCJnIik7dmFyIHVhPSIvLyMgc291cmNlVVJMXHgzZCIrKCJzb3VyY2VVUkwiaW4gdj92LnNvdXJjZVVSTDoibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK0thKyJdIikrIlxuIjtuLnJlcGxhY2UoeCxmdW5jdGlvbihCYSxHYSxlYixsYixEYixhYyl7ZWJ8fChlYj1sYik7bWErPW4uc2xpY2UobGEsYWMpLnJlcGxhY2UoS2UsbSk7R2EmJihhYT0hMCxtYSs9IicgK1xuX19lKCIrR2ErIikgK1xuJyIpO0RiJiYoY2E9ITAsbWErPSInO1xuIitEYisiO1xuX19wICtceDNkICciKTsKZWImJihtYSs9IicgK1xuKChfX3QgXHgzZCAoIitlYisiKSkgXHgzZFx4M2QgbnVsbCA/ICcnIDogX190KSArXG4nIik7bGE9YWMrQmEubGVuZ3RoO3JldHVybiBCYX0pO21hKz0iJztcbiI7KHY9di52YXJpYWJsZSl8fChtYT0id2l0aCAob2JqKSB7XG4iK21hKyJcbn1cbiIpO21hPShjYT9tYS5yZXBsYWNlKGxkLCIiKTptYSkucmVwbGFjZShXZCwiJDEiKS5yZXBsYWNlKG1kLCIkMTsiKTttYT0iZnVuY3Rpb24oIisodnx8Im9iaiIpKyIpIHtcbiIrKHY/IiI6Im9iaiB8fCAob2JqIFx4M2Qge30pO1xuIikrInZhciBfX3QsIF9fcCBceDNkICcnIisoYWE/IiwgX19lIFx4M2QgXy5lc2NhcGUiOiIiKSsoY2E/IiwgX19qIFx4M2QgQXJyYXkucHJvdG90eXBlLmpvaW47XG5mdW5jdGlvbiBwcmludCgpIHsgX19wICtceDNkIF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cbiI6IjtcbiIpK21hKyJyZXR1cm4gX19wXG59Ijt2PUdmKGZ1bmN0aW9uKCl7cmV0dXJuIHZmKE8sdWErInJldHVybiAiKwptYSkuYXBwbHkoSCxVKX0pO3Yuc291cmNlPW1hO2lmKHlhKHYpKXRocm93IHY7cmV0dXJuIHZ9O1QudHJpbT1yZjtULnRyaW1MZWZ0PWZ1bmN0aW9uKG4sdix4KXt2YXIgRz1uO3JldHVybihuPWYobikpPyh4P2JiKEcsdix4KTpudWxsPT12KT9uLnNsaWNlKHUobikpOm4uc2xpY2UoZChuLHYrIiIpKTpufTtULnRyaW1SaWdodD1mdW5jdGlvbihuLHYseCl7dmFyIEc9bjtyZXR1cm4obj1mKG4pKT8oeD9iYihHLHYseCk6bnVsbD09dik/bi5zbGljZSgwLHcobikrMSk6bi5zbGljZSgwLGMobix2KyIiKSsxKTpufTtULnRydW5jPWZ1bmN0aW9uKG4sdix4KXt4JiZiYihuLHYseCkmJih2PUgpO3ZhciBHPWZhO3g9aWE7aWYobnVsbCE9dilpZihEYSh2KSl7dmFyIE89InNlcGFyYXRvciJpbiB2P3Yuc2VwYXJhdG9yOk8sRz0ibGVuZ3RoImluIHY/K3YubGVuZ3RofHwwOkc7eD0ib21pc3Npb24iaW4gdj9mKHYub21pc3Npb24pOnh9ZWxzZSBHPSt2fHwwO249ZihuKTtpZihHPj1uLmxlbmd0aClyZXR1cm4gbjsKRy09eC5sZW5ndGg7aWYoMT5HKXJldHVybiB4O3Y9bi5zbGljZSgwLEcpO2lmKG51bGw9PU8pcmV0dXJuIHYreDtpZih0YihPKSl7aWYobi5zbGljZShHKS5zZWFyY2goTykpe3ZhciBVLGFhPW4uc2xpY2UoMCxHKTtPLmdsb2JhbHx8KE89WWUoTy5zb3VyY2UsKGplLmV4ZWMoTyl8fCIiKSsiZyIpKTtmb3IoTy5sYXN0SW5kZXg9MDtuPU8uZXhlYyhhYSk7KVU9bi5pbmRleDt2PXYuc2xpY2UoMCxudWxsPT1VP0c6VSl9fWVsc2Ugbi5pbmRleE9mKE8sRykhPUcmJihPPXYubGFzdEluZGV4T2YoTyksLTE8TyYmKHY9di5zbGljZSgwLE8pKSk7cmV0dXJuIHYreH07VC51bmVzY2FwZT1mdW5jdGlvbihuKXtyZXR1cm4obj1mKG4pKSYma2IudGVzdChuKT9uLnJlcGxhY2UoQ2Qseik6bn07VC51bmlxdWVJZD1mdW5jdGlvbihuKXt2YXIgdj0rK1BmO3JldHVybiBmKG4pK3Z9O1Qud29yZHM9aGY7VC5hbGw9RGQ7VC5hbnk9UjtULmNvbnRhaW5zPXFkO1QuZXE9Q2E7VC5kZXRlY3Q9YWY7VC5mb2xkbD0KYmY7VC5mb2xkcj1EZjtULmhlYWQ9ZGU7VC5pbmNsdWRlPXFkO1QuaW5qZWN0PWJmO1hlKFQsZnVuY3Rpb24oKXt2YXIgbj17fTtYYihULGZ1bmN0aW9uKHYseCl7VC5wcm90b3R5cGVbeF18fChuW3hdPXYpfSk7cmV0dXJuIG59KCksITEpO1Quc2FtcGxlPUpkO1QucHJvdG90eXBlLnNhbXBsZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fX2NoYWluX198fG51bGwhPW4/dGhpcy50aHJ1KGZ1bmN0aW9uKHYpe3JldHVybiBKZCh2LG4pfSk6SmQodGhpcy52YWx1ZSgpKX07VC5WRVJTSU9OPUY7VmIoImJpbmQgYmluZEtleSBjdXJyeSBjdXJyeVJpZ2h0IHBhcnRpYWwgcGFydGlhbFJpZ2h0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKG4pe1Rbbl0ucGxhY2Vob2xkZXI9VH0pO1ZiKFsiZHJvcCIsInRha2UiXSxmdW5jdGlvbihuLHYpe1FhLnByb3RvdHlwZVtuXT1mdW5jdGlvbih4KXt2YXIgRz10aGlzLl9fZmlsdGVyZWRfXztpZihHJiYhdilyZXR1cm4gbmV3IFFhKHRoaXMpO3g9bnVsbD09Cng/MTpPYihNYyh4KXx8MCwwKTt2YXIgTz10aGlzLmNsb25lKCk7Rz9PLl9fdGFrZUNvdW50X189YmMoTy5fX3Rha2VDb3VudF9fLHgpOk8uX192aWV3c19fLnB1c2goe3NpemU6eCx0eXBlOm4rKDA+Ty5fX2Rpcl9fPyJSaWdodCI6IiIpfSk7cmV0dXJuIE99O1FhLnByb3RvdHlwZVtuKyJSaWdodCJdPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLnJldmVyc2UoKVtuXSh4KS5yZXZlcnNlKCl9fSk7VmIoWyJmaWx0ZXIiLCJtYXAiLCJ0YWtlV2hpbGUiXSxmdW5jdGlvbihuLHYpe3ZhciB4PXYrMSxHPXghPXBhO1FhLnByb3RvdHlwZVtuXT1mdW5jdGlvbihPLFUpe3ZhciBhYT10aGlzLmNsb25lKCk7YWEuX19pdGVyYXRlZXNfXy5wdXNoKHtpdGVyYXRlZTpPYShPLFUsMSksdHlwZTp4fSk7YWEuX19maWx0ZXJlZF9fPWFhLl9fZmlsdGVyZWRfX3x8RztyZXR1cm4gYWF9fSk7VmIoWyJmaXJzdCIsImxhc3QiXSxmdW5jdGlvbihuLHYpe3ZhciB4PSJ0YWtlIisodj8iUmlnaHQiOiIiKTtRYS5wcm90b3R5cGVbbl09CmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbeF0oMSkudmFsdWUoKVswXX19KTtWYihbImluaXRpYWwiLCJyZXN0Il0sZnVuY3Rpb24obix2KXt2YXIgeD0iZHJvcCIrKHY/IiI6IlJpZ2h0Iik7UWEucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19maWx0ZXJlZF9fP25ldyBRYSh0aGlzKTp0aGlzW3hdKDEpfX0pO1ZiKFsicGx1Y2siLCJ3aGVyZSJdLGZ1bmN0aW9uKG4sdil7dmFyIHg9dj8iZmlsdGVyIjoibWFwIixHPXY/ZmQ6emU7UWEucHJvdG90eXBlW25dPWZ1bmN0aW9uKE8pe3JldHVybiB0aGlzW3hdKEcoTykpfX0pO1FhLnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyKGlkKX07UWEucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbihuLHYpe249T2Eobix2LDEpO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4hbih4KX0pfTtRYS5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24obix2KXtuPW51bGw9PW4/MDorbnx8CjA7dmFyIHg9dGhpcztpZih4Ll9fZmlsdGVyZWRfXyYmKDA8bnx8MD52KSlyZXR1cm4gbmV3IFFhKHgpOzA+bj94PXgudGFrZVJpZ2h0KC1uKTpuJiYoeD14LmRyb3AobikpO3YhPT1IJiYodj0rdnx8MCx4PTA+dj94LmRyb3BSaWdodCgtdik6eC50YWtlKHYtbikpO3JldHVybiB4fTtRYS5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24obix2KXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkudGFrZVdoaWxlKG4sdikucmV2ZXJzZSgpfTtRYS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2Uod2UpfTtYYihRYS5wcm90b3R5cGUsZnVuY3Rpb24obix2KXt2YXIgeD0vXig/OmZpbHRlcnxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QodiksRz0vXig/OmZpcnN0fGxhc3QpJC8udGVzdCh2KSxPPVRbRz8idGFrZSIrKCJsYXN0Ij09dj8iUmlnaHQiOiIiKTp2XTtPJiYoVC5wcm90b3R5cGVbdl09ZnVuY3Rpb24oKXt2YXIgVT1HP1sxXTphcmd1bWVudHMsYWE9CnRoaXMuX19jaGFpbl9fLGNhPXRoaXMuX193cmFwcGVkX18sbGE9ISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxtYT1jYSBpbnN0YW5jZW9mIFFhLHVhPVVbMF0sQmE9bWF8fGNiKGNhKTtCYSYmeCYmImZ1bmN0aW9uIj09dHlwZW9mIHVhJiYxIT11YS5sZW5ndGgmJihtYT1CYT0hMSk7dmFyIEdhPWZ1bmN0aW9uKGViKXtyZXR1cm4gRyYmYWE/TyhlYiwxKVswXTpPLmFwcGx5KEgsUmMoW2ViXSxVKSl9LHVhPXtmdW5jOmVjLGFyZ3M6W0dhXSx0aGlzQXJnOkh9LGxhPW1hJiYhbGE7cmV0dXJuIEcmJiFhYT9sYT8oY2E9Y2EuY2xvbmUoKSxjYS5fX2FjdGlvbnNfXy5wdXNoKHVhKSxuLmNhbGwoY2EpKTpPLmNhbGwoSCx0aGlzLnZhbHVlKCkpWzBdOiFHJiZCYT8oY2E9bGE/Y2E6bmV3IFFhKHRoaXMpLGNhPW4uYXBwbHkoY2EsVSksY2EuX19hY3Rpb25zX18ucHVzaCh1YSksbmV3IG9iKGNhLGFhKSk6dGhpcy50aHJ1KEdhKX0pfSk7VmIoImpvaW4gcG9wIHB1c2ggcmVwbGFjZSBzaGlmdCBzb3J0IHNwbGljZSBzcGxpdCB1bnNoaWZ0Ii5zcGxpdCgiICIpLApmdW5jdGlvbihuKXt2YXIgdj0oL14oPzpyZXBsYWNlfHNwbGl0KSQvLnRlc3Qobik/T2Y6eWYpW25dLHg9L14oPzpwdXNofHNvcnR8dW5zaGlmdCkkLy50ZXN0KG4pPyJ0YXAiOiJ0aHJ1IixHPS9eKD86am9pbnxwb3B8cmVwbGFjZXxzaGlmdCkkLy50ZXN0KG4pO1QucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7dmFyIE89YXJndW1lbnRzO3JldHVybiBHJiYhdGhpcy5fX2NoYWluX18/di5hcHBseSh0aGlzLnZhbHVlKCksTyk6dGhpc1t4XShmdW5jdGlvbihVKXtyZXR1cm4gdi5hcHBseShVLE8pfSl9fSk7WGIoUWEucHJvdG90eXBlLGZ1bmN0aW9uKG4sdil7dmFyIHg9VFt2XTtpZih4KXt2YXIgRz14Lm5hbWUrIiI7KEZlW0ddfHwoRmVbR109W10pKS5wdXNoKHtuYW1lOnYsZnVuYzp4fSl9fSk7RmVbV2IoSCxJKS5uYW1lXT1be25hbWU6IndyYXBwZXIiLGZ1bmM6SH1dO1FhLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBuPW5ldyBRYSh0aGlzLl9fd3JhcHBlZF9fKTtuLl9fYWN0aW9uc19fPQpMYih0aGlzLl9fYWN0aW9uc19fKTtuLl9fZGlyX189dGhpcy5fX2Rpcl9fO24uX19maWx0ZXJlZF9fPXRoaXMuX19maWx0ZXJlZF9fO24uX19pdGVyYXRlZXNfXz1MYih0aGlzLl9faXRlcmF0ZWVzX18pO24uX190YWtlQ291bnRfXz10aGlzLl9fdGFrZUNvdW50X187bi5fX3ZpZXdzX189TGIodGhpcy5fX3ZpZXdzX18pO3JldHVybiBufTtRYS5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbigpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgbj1uZXcgUWEodGhpcyk7bi5fX2Rpcl9fPS0xO24uX19maWx0ZXJlZF9fPSEwfWVsc2Ugbj10aGlzLmNsb25lKCksbi5fX2Rpcl9fKj0tMTtyZXR1cm4gbn07UWEucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLHY9dGhpcy5fX2Rpcl9fLHg9Y2IobiksRz0wPnYsTz14P24ubGVuZ3RoOjAsVTtVPTA7Zm9yKHZhciBhYT1PLGNhPXRoaXMuX192aWV3c19fLGxhPS0xLG1hPWNhLmxlbmd0aDsrK2xhPAptYTspe3ZhciB1YT1jYVtsYV0sQmE9dWEuc2l6ZTtzd2l0Y2godWEudHlwZSl7Y2FzZSAiZHJvcCI6VSs9QmE7YnJlYWs7Y2FzZSAiZHJvcFJpZ2h0IjphYS09QmE7YnJlYWs7Y2FzZSAidGFrZSI6YWE9YmMoYWEsVStCYSk7YnJlYWs7Y2FzZSAidGFrZVJpZ2h0IjpVPU9iKFUsYWEtQmEpfX1VPXtzdGFydDpVLGVuZDphYX07YWE9VS5zdGFydDtjYT1VLmVuZDtVPWNhLWFhO0c9Rz9jYTphYS0xO2FhPXRoaXMuX19pdGVyYXRlZXNfXztjYT1hYS5sZW5ndGg7bGE9MDttYT1iYyhVLHRoaXMuX190YWtlQ291bnRfXyk7aWYoIXh8fE88b2F8fE89PVUmJm1hPT1VKXJldHVybiB2ZShuLHRoaXMuX19hY3Rpb25zX18pO3g9W107YTpmb3IoO1UtLSYmbGE8bWE7KXtHKz12O089LTE7Zm9yKHVhPW5bR107KytPPGNhOyl7dmFyIEdhPWFhW09dLEJhPUdhLml0ZXJhdGVlLEdhPUdhLnR5cGUsQmE9QmEodWEpO2lmKEdhPT1wYSl1YT1CYTtlbHNlIGlmKCFCYSlpZihHYT09QWEpY29udGludWUgYTsKZWxzZSBicmVhayBhfXhbbGErK109dWF9cmV0dXJuIHh9O1QucHJvdG90eXBlLmNoYWluPWZ1bmN0aW9uKCl7cmV0dXJuIG1jKHRoaXMpfTtULnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG9iKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9O1QucHJvdG90eXBlLmNvbmNhdD1nZztULnByb3RvdHlwZS5wbGFudD1mdW5jdGlvbihuKXtmb3IodmFyIHYseD10aGlzO3ggaW5zdGFuY2VvZiAkYTspe3ZhciBHPWJlKHgpO3Y/Ty5fX3dyYXBwZWRfXz1HOnY9Rzt2YXIgTz1HLHg9eC5fX3dyYXBwZWRfX31PLl9fd3JhcHBlZF9fPW47cmV0dXJuIHZ9O1QucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXt2YXIgbj10aGlzLl9fd3JhcHBlZF9fLHY9ZnVuY3Rpb24oeCl7cmV0dXJuIHgucmV2ZXJzZSgpfTtyZXR1cm4gbiBpbnN0YW5jZW9mIFFhPyh0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCYmKG49bmV3IFFhKHRoaXMpKSxuPW4ucmV2ZXJzZSgpLG4uX19hY3Rpb25zX18ucHVzaCh7ZnVuYzplYywKYXJnczpbdl0sdGhpc0FyZzpIfSksbmV3IG9iKG4sdGhpcy5fX2NoYWluX18pKTp0aGlzLnRocnUodil9O1QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWUoKSsiIn07VC5wcm90b3R5cGUucnVuPVQucHJvdG90eXBlLnRvSlNPTj1ULnByb3RvdHlwZS52YWx1ZU9mPVQucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHZlKHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9O1QucHJvdG90eXBlLmNvbGxlY3Q9VC5wcm90b3R5cGUubWFwO1QucHJvdG90eXBlLmhlYWQ9VC5wcm90b3R5cGUuZmlyc3Q7VC5wcm90b3R5cGUuc2VsZWN0PVQucHJvdG90eXBlLmZpbHRlcjtULnByb3RvdHlwZS50YWlsPVQucHJvdG90eXBlLnJlc3Q7cmV0dXJuIFR9dmFyIEgsRj0iMy4xMC4xIixCPTEsST0yLE09NCxEPTgsSj0xNixQPTMyLFY9NjQsWT0xMjgsbmE9MjU2LGZhPTMwLGlhPSIuLi4iLFo9MTUwLGVhPTE2LG9hPTIwMCxBYT0xLHBhPQoyLEZhPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIixFYT0iX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyIsV2E9IltvYmplY3QgQXJndW1lbnRzXSIsVWE9IltvYmplY3QgQXJyYXldIix3Yj0iW29iamVjdCBCb29sZWFuXSIsQWI9IltvYmplY3QgRGF0ZV0iLE1iPSJbb2JqZWN0IEVycm9yXSIsZ2E9IltvYmplY3QgRnVuY3Rpb25dIix0YT0iW29iamVjdCBOdW1iZXJdIixxYT0iW29iamVjdCBPYmplY3RdIix3YT0iW29iamVjdCBSZWdFeHBdIixKYT0iW29iamVjdCBTdHJpbmddIixQYT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGZiPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLHhiPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLEViPSJbb2JqZWN0IEludDhBcnJheV0iLFNhPSJbb2JqZWN0IEludDE2QXJyYXldIixjYz0iW29iamVjdCBJbnQzMkFycmF5XSIsWWI9IltvYmplY3QgVWludDhBcnJheV0iLEJjPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsRmM9IltvYmplY3QgVWludDE2QXJyYXldIiwKUWM9IltvYmplY3QgVWludDMyQXJyYXldIixsZD0vXGJfX3AgXCs9ICcnOy9nLFdkPS9cYihfX3AgXCs9KSAnJyBcKy9nLG1kPS8oX19lXCguKj9cKXxcYl9fdFwpKSBcK1xuJyc7L2csQ2Q9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzl8Izk2KTsvZyxYZD0vWyY8PiInYF0vZyxrYj1SZWdFeHAoQ2Quc291cmNlKSxWYT1SZWdFeHAoWGQuc291cmNlKSxQYz0vPCUtKFtcc1xTXSs/KSU+L2csSmU9LzwlKFtcc1xTXSs/KSU+L2csTD0vPCU9KFtcc1xTXSs/KSU+L2csTmU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxuXFxdfFxcLikqP1wxKVxdLyxKYz0vXlx3KiQvLFRjPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxuXFxdfFxcLikqPylcMilcXS9nLEtkPS9eWzohLF18W1xcXiQuKis/KClbXF17fXxcL118KF5bMC05YS1mQS1GbnJ0dXZ4XSl8KFtcblxyXHUyMDI4XHUyMDI5XSkvZyxnZT1SZWdFeHAoS2Quc291cmNlKSxoZT0KL1tcdTAzMDAtXHUwMzZmXHVmZTIwLVx1ZmUyM10vZyxpZT0vXFwoXFwpPy9nLE9lPS9cJFx7KFteXFx9XSooPzpcXC5bXlxcfV0qKSopXH0vZyxqZT0vXHcqJC8sUGU9L14wW3hYXS8saGM9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sUWU9L15cZCskLyxMZD0vW1x4YzAtXHhkNlx4ZDgtXHhkZVx4ZGYtXHhmNlx4ZjgtXHhmZl0vZywkYj0vKCReKS8sS2U9L1snXG5cclx1MjAyOFx1MjAyOVxcXS9nLExlPVJlZ0V4cCgiW0EtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdKyg/XHgzZFtBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXVthLXpcXHhkZi1cXHhmNlxceGY4LVxceGZmXSspfFtBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXT9bYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZl0rfFtBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXSt8WzAtOV0rIiwiZyIpLHJkPSJBcnJheSBBcnJheUJ1ZmZlciBEYXRlIEVycm9yIEZsb2F0MzJBcnJheSBGbG9hdDY0QXJyYXkgRnVuY3Rpb24gSW50OEFycmF5IEludDE2QXJyYXkgSW50MzJBcnJheSBNYXRoIE51bWJlciBPYmplY3QgUmVnRXhwIFNldCBTdHJpbmcgXyBjbGVhclRpbWVvdXQgaXNGaW5pdGUgcGFyc2VGbG9hdCBwYXJzZUludCBzZXRUaW1lb3V0IFR5cGVFcnJvciBVaW50OEFycmF5IFVpbnQ4Q2xhbXBlZEFycmF5IFVpbnQxNkFycmF5IFVpbnQzMkFycmF5IFdlYWtNYXAiLnNwbGl0KCIgIiksCkthPS0xLFhhPXt9O1hhW2ZiXT1YYVt4Yl09WGFbRWJdPVhhW1NhXT1YYVtjY109WGFbWWJdPVhhW0JjXT1YYVtGY109WGFbUWNdPSEwO1hhW1dhXT1YYVtVYV09WGFbUGFdPVhhW3diXT1YYVtBYl09WGFbTWJdPVhhW2dhXT1YYVsiW29iamVjdCBNYXBdIl09WGFbdGFdPVhhW3FhXT1YYVt3YV09WGFbIltvYmplY3QgU2V0XSJdPVhhW0phXT1YYVsiW29iamVjdCBXZWFrTWFwXSJdPSExO3ZhciBwYj17fTtwYltXYV09cGJbVWFdPXBiW1BhXT1wYlt3Yl09cGJbQWJdPXBiW2ZiXT1wYlt4Yl09cGJbRWJdPXBiW1NhXT1wYltjY109cGJbdGFdPXBiW3FhXT1wYlt3YV09cGJbSmFdPXBiW1liXT1wYltCY109cGJbRmNdPXBiW1FjXT0hMDtwYltNYl09cGJbZ2FdPXBiWyJbb2JqZWN0IE1hcF0iXT1wYlsiW29iamVjdCBTZXRdIl09cGJbIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgTWU9eyJcdTAwYzAiOiJBIiwiXHUwMGMxIjoiQSIsIlx1MDBjMiI6IkEiLCJcdTAwYzMiOiJBIiwiXHUwMGM0IjoiQSIsCiJcdTAwYzUiOiJBIiwiXHUwMGUwIjoiYSIsIlx1MDBlMSI6ImEiLCJcdTAwZTIiOiJhIiwiXHUwMGUzIjoiYSIsIlx1MDBlNCI6ImEiLCJcdTAwZTUiOiJhIiwiXHUwMGM3IjoiQyIsIlx1MDBlNyI6ImMiLCJcdTAwZDAiOiJEIiwiXHUwMGYwIjoiZCIsIlx1MDBjOCI6IkUiLCJcdTAwYzkiOiJFIiwiXHUwMGNhIjoiRSIsIlx1MDBjYiI6IkUiLCJcdTAwZTgiOiJlIiwiXHUwMGU5IjoiZSIsIlx1MDBlYSI6ImUiLCJcdTAwZWIiOiJlIiwiXHUwMGNjIjoiSSIsIlx1MDBjZCI6IkkiLCJcdTAwY2UiOiJJIiwiXHUwMGNmIjoiSSIsIlx1MDBlYyI6ImkiLCJcdTAwZWQiOiJpIiwiXHUwMGVlIjoiaSIsIlx1MDBlZiI6ImkiLCJcdTAwZDEiOiJOIiwiXHUwMGYxIjoibiIsIlx1MDBkMiI6Ik8iLCJcdTAwZDMiOiJPIiwiXHUwMGQ0IjoiTyIsIlx1MDBkNSI6Ik8iLCJcdTAwZDYiOiJPIiwiXHUwMGQ4IjoiTyIsIlx1MDBmMiI6Im8iLCJcdTAwZjMiOiJvIiwiXHUwMGY0IjoibyIsIlx1MDBmNSI6Im8iLAoiXHUwMGY2IjoibyIsIlx1MDBmOCI6Im8iLCJcdTAwZDkiOiJVIiwiXHUwMGRhIjoiVSIsIlx1MDBkYiI6IlUiLCJcdTAwZGMiOiJVIiwiXHUwMGY5IjoidSIsIlx1MDBmYSI6InUiLCJcdTAwZmIiOiJ1IiwiXHUwMGZjIjoidSIsIlx1MDBkZCI6IlkiLCJcdTAwZmQiOiJ5IiwiXHUwMGZmIjoieSIsIlx1MDBjNiI6IkFlIiwiXHUwMGU2IjoiYWUiLCJcdTAwZGUiOiJUaCIsIlx1MDBmZSI6InRoIiwiXHUwMGRmIjoic3MifSxrZT17Ilx4MjYiOiJceDI2YW1wOyIsIlx4M2MiOiJceDI2bHQ7IiwiXHgzZSI6Ilx4MjZndDsiLCciJzoiXHgyNnF1b3Q7IiwiJyI6Ilx4MjYjMzk7IiwiYCI6Ilx4MjYjOTY7In0sV2M9eyJceDI2YW1wOyI6Ilx4MjYiLCJceDI2bHQ7IjoiXHgzYyIsIlx4MjZndDsiOiJceDNlIiwiXHgyNnF1b3Q7IjonIicsIlx4MjYjMzk7IjoiJyIsIlx4MjYjOTY7IjoiYCJ9LFpiPXsiZnVuY3Rpb24iOiEwLG9iamVjdDohMH0sYWQ9ezA6IngzMCIsMToieDMxIiwyOiJ4MzIiLAozOiJ4MzMiLDQ6IngzNCIsNToieDM1Iiw2OiJ4MzYiLDc6IngzNyIsODoieDM4Iiw5OiJ4MzkiLEE6Ing0MSIsQjoieDQyIixDOiJ4NDMiLEQ6Ing0NCIsRToieDQ1IixGOiJ4NDYiLGE6Ing2MSIsYjoieDYyIixjOiJ4NjMiLGQ6Ing2NCIsZToieDY1IixmOiJ4NjYiLG46Ing2ZSIscjoieDcyIix0OiJ4NzQiLHU6Ing3NSIsdjoieDc2Iix4OiJ4NzgifSx6Yz17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxiZD1aYlt0eXBlb2YgZXhwb3J0c10mJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLHRjPVpiW3R5cGVvZiBtb2R1bGVdJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxsZT1aYlt0eXBlb2Ygc2VsZl0mJnNlbGYmJnNlbGYuT2JqZWN0JiZzZWxmLHpkPVpiW3R5cGVvZiB3aW5kb3ddJiZ3aW5kb3cmJndpbmRvdy5PYmplY3QmJndpbmRvdyxjZD10YyYmdGMuZXhwb3J0cz09PQpiZCYmYmQsaWM9YmQmJnRjJiYib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0JiZnbG9iYWx8fHpkIT09KHRoaXMmJnRoaXMud2luZG93KSYmemR8fGxlfHx0aGlzLEFjPUEoKTtiZCYmdGM/Y2Q/KHRjLmV4cG9ydHM9QWMpLl89QWM6YmQuXz1BYzppYy5fPUFjfSkuY2FsbCh0aGlzKTsidW5kZWZpbmVkIiE9dHlwZW9mIFlVSSYmKFlVSS5fWVVJPVlVSSk7CnZhciBZVUk9ZnVuY3Rpb24oKXt2YXIgYT0wLEU9dGhpcyxxPWFyZ3VtZW50cyx0PXEubGVuZ3RoLGY9ZnVuY3Rpb24oYyxiKXtyZXR1cm4gYyYmYy5oYXNPd25Qcm9wZXJ0eSYmYyBpbnN0YW5jZW9mIGJ9LGQ9InVuZGVmaW5lZCIhPT10eXBlb2YgWVVJX2NvbmZpZyYmWVVJX2NvbmZpZztmKEUsWVVJKT8oRS5faW5pdCgpLFlVSS5HbG9iYWxDb25maWcmJkUuYXBwbHlDb25maWcoWVVJLkdsb2JhbENvbmZpZyksZCYmRS5hcHBseUNvbmZpZyhkKSx0fHwoRS5fYWZ0ZXJDb25maWcoKSxFLl9zZXR1cCgpKSk6RT1uZXcgWVVJO2lmKHQpe2Zvcig7YTx0O2ErKylFLmFwcGx5Q29uZmlnKHFbYV0pO0UuX2FmdGVyQ29uZmlnKCk7RS5fc2V0dXAoKX1FLmluc3RhbmNlT2Y9ZjtyZXR1cm4gRX07CihmdW5jdGlvbigpe3ZhciBhLEUscT0icGF0Y2hlZC12My4xOC4xIix0PWZ1bmN0aW9uKCl7fSxmPUFycmF5LnByb3RvdHlwZS5zbGljZSxkPXsiaW8ueGRyUmVhZHkiOjEsImlvLnhkclJlc3BvbnNlIjoxLCJTV0YuZXZlbnRIYW5kbGVyIjoxfSxjPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LGI9Yz93aW5kb3c6bnVsbCxnPWM/Yi5kb2N1bWVudDpudWxsLGU9ZyYmZy5kb2N1bWVudEVsZW1lbnQ7YT1lJiZlLmNsYXNzTmFtZTt2YXIgaz17fSxtPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHA9ZnVuY3Rpb24oQSxILEYsQil7QSYmQS5hZGRFdmVudExpc3RlbmVyP0EuYWRkRXZlbnRMaXN0ZW5lcihILEYsQik6QSYmQS5hdHRhY2hFdmVudCYmQS5hdHRhY2hFdmVudCgib24iK0gsRil9LHM9ZnVuY3Rpb24oQSxILEYsQil7aWYoQSYmQS5yZW1vdmVFdmVudExpc3RlbmVyKXRyeXtBLnJlbW92ZUV2ZW50TGlzdGVuZXIoSCxGLEIpfWNhdGNoKEkpe31lbHNlIEEmJkEuZGV0YWNoRXZlbnQmJgpBLmRldGFjaEV2ZW50KCJvbiIrSCxGKX0sbD1mdW5jdGlvbigpe1lVSS5FbnYuRE9NUmVhZHk9ITA7YyYmcyhnLCJET01Db250ZW50TG9hZGVkIixsKX0saD1mdW5jdGlvbigpe1lVSS5FbnYud2luZG93TG9hZGVkPSEwO1lVSS5FbnYuRE9NUmVhZHk9ITA7YyYmcyh3aW5kb3csImxvYWQiLGgpfSx1PWZ1bmN0aW9uKEEsSCl7dmFyIEY9QS5FbnYuX2xvYWRlcixCPVsibG9hZGVyLWJhc2UiXSxJPVlVSS5FbnYubW9kcztGPyhGLmlnbm9yZVJlZ2lzdGVyZWQ9ITEsRi5vbkVuZD1udWxsLEYuZGF0YT1udWxsLEYucmVxdWlyZWQ9W10sRi5sb2FkVHlwZT1udWxsKTooRj1uZXcgQS5Mb2FkZXIoQS5jb25maWcpLEEuRW52Ll9sb2FkZXI9Rik7SSYmSS5sb2FkZXImJihCPVtdLmNvbmNhdChCLFlVSS5FbnYubG9hZGVyRXh0cmFzKSk7WVVJLkVudi5jb3JlPUEuQXJyYXkuZGVkdXBlKFtdLmNvbmNhdChZVUkuRW52LmNvcmUsQikpO3JldHVybiBGfSx3PWZ1bmN0aW9uKEEsSCl7Zm9yKHZhciBGIGluIEgpSC5oYXNPd25Qcm9wZXJ0eShGKSYmCihBW0ZdPUhbRl0pfSx6PXtzdWNjZXNzOiEwfTtlJiYtMT09YS5pbmRleE9mKCJ5dWkzLWpzLWVuYWJsZWQiKSYmKGEmJihhKz0iICIpLGUuY2xhc3NOYW1lPWErInl1aTMtanMtZW5hYmxlZCIpOy0xPHEuaW5kZXhPZigiQCIpJiYocT0iMy41LjAiKTthPXthcHBseUNvbmZpZzpmdW5jdGlvbihBKXtBPUF8fHQ7dmFyIEgsRixCPXRoaXMuY29uZmlnLEk9Qi5tb2R1bGVzLE09Qi5ncm91cHMsRD1CLmFsaWFzZXMsSj10aGlzLkVudi5fbG9hZGVyO2ZvcihGIGluIEEpQS5oYXNPd25Qcm9wZXJ0eShGKSYmKEg9QVtGXSxJJiYibW9kdWxlcyI9PUY/dyhJLEgpOkQmJiJhbGlhc2VzIj09Rj93KEQsSCk6TSYmImdyb3VwcyI9PUY/dyhNLEgpOiJ3aW4iPT1GPyhCW0ZdPUgmJkguY29udGVudFdpbmRvd3x8SCxCLmRvYz1CW0ZdP0JbRl0uZG9jdW1lbnQ6bnVsbCk6Il95dWlkIiE9RiYmKEJbRl09SCkpO0omJkouX2NvbmZpZyhBKX0sX2NvbmZpZzpmdW5jdGlvbihBKXt0aGlzLmFwcGx5Q29uZmlnKEEpfSwKX2luaXQ6ZnVuY3Rpb24oKXt2YXIgQSxILEY9dGhpcztIPVlVSS5FbnY7dmFyIEI9Ri5FbnYsSTtGLnZlcnNpb249cTtpZighQil7Ri5FbnY9e2NvcmU6ImdldCBmZWF0dXJlcyBpbnRsLWJhc2UgeXVpLWxvZyB5dWktbGF0ZXIgbG9hZGVyLWJhc2UgbG9hZGVyLXJvbGx1cCBsb2FkZXIteXVpMyIuc3BsaXQoIiAiKSxsb2FkZXJFeHRyYXM6WyJsb2FkZXItcm9sbHVwIiwibG9hZGVyLXl1aTMiXSxtb2RzOnt9LHZlcnNpb25zOnt9LGJhc2U6Imh0dHA6Ly95dWkueWFob29hcGlzLmNvbS8iLGNkbjoiaHR0cDovL3l1aS55YWhvb2FwaXMuY29tLyIrcSsiLyIsX2lkeDowLF91c2VkOnt9LF9hdHRhY2hlZDp7fSxfZXhwb3J0ZWQ6e30sX21pc3NlZDpbXSxfeWlkeDowLF91aWR4OjAsX2d1aWRwOiJ5IixfbG9hZGVkOnt9LF9CQVNFX1JFOi8oPzpcPyg/OlteJl0qJikqKFteJl0qKSk/XGIoYXVpfHl1aSg/Oi1cdyspPylcL1wyKD86LShtaW58ZGVidWcpKT9cLmpzLyxwYXJzZUJhc2VQYXRoOmZ1bmN0aW9uKE0sCkQpe3ZhciBKPU0ubWF0Y2goRCksUCxWO0omJihQPVJlZ0V4cC5sZWZ0Q29udGV4dHx8TS5zbGljZSgwLE0uaW5kZXhPZihKWzBdKSksVj1KWzNdLEpbMV0mJihQKz0iPyIrSlsxXSksUD17ZmlsdGVyOlYscGF0aDpQfSk7cmV0dXJuIFB9LGdldEJhc2U6SCYmSC5nZXRCYXNlfHxmdW5jdGlvbihNKXt2YXIgRD1nJiZnLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKXx8W10sSj1CLmNkbixQLFYsWTtWPTA7Zm9yKFk9RC5sZW5ndGg7VjxZOysrVilpZihQPURbVl0uc3JjKWlmKFA9Ri5FbnYucGFyc2VCYXNlUGF0aChQLE0pKXtBPVAuZmlsdGVyO0o9UC5wYXRoO2JyZWFrfXJldHVybiBKfX07Qj1GLkVudjtCLl9sb2FkZWRbcV09e307aWYoSCYmRiE9PVlVSSlCLl95aWR4PSsrSC5feWlkeCxCLl9ndWlkcD0oInl1aV8iK3ErIl8iK0IuX3lpZHgrIl8iK20pLnJlcGxhY2UoL1teYS16MC05X10rL2csIl8iKTtlbHNlIGlmKFlVSS5fWVVJKXtIPVlVSS5fWVVJLkVudjtCLl95aWR4Kz0KSC5feWlkeDtCLl91aWR4Kz1ILl91aWR4O2ZvcihJIGluIEgpSSBpbiBCfHwoQltJXT1IW0ldKTtkZWxldGUgWVVJLl9ZVUl9Ri5pZD1GLnN0YW1wKEYpO2tbRi5pZF09Rn1GLmNvbnN0cnVjdG9yPVlVSTtGLmNvbmZpZz1GLmNvbmZpZ3x8e2Jvb3RzdHJhcDohMCxjYWNoZVVzZTohMCxkZWJ1ZzohMCxkb2M6ZyxmZXRjaENTUzohMCx0aHJvd0ZhaWw6ITAsdXNlQnJvd3NlckNvbnNvbGU6ITAsdXNlTmF0aXZlRVM1OiEwLHdpbjpifTtnJiYhZy5nZXRFbGVtZW50QnlJZCgieXVpMy1jc3Mtc3RhbXAiKT8oSD1nLmNyZWF0ZUVsZW1lbnQoImRpdiIpLEguaW5uZXJIVE1MPSdceDNjZGl2IGlkXHgzZCJ5dWkzLWNzcy1zdGFtcCIgc3R5bGVceDNkInBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OyB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudCJceDNlXHgzYy9kaXZceDNlJyxZVUkuRW52LmNzc1N0YW1wRWw9SC5maXJzdENoaWxkLGcuYm9keT9nLmJvZHkuYXBwZW5kQ2hpbGQoWVVJLkVudi5jc3NTdGFtcEVsKToKZS5pbnNlcnRCZWZvcmUoWVVJLkVudi5jc3NTdGFtcEVsLGUuZmlyc3RDaGlsZCkpOmcmJmcuZ2V0RWxlbWVudEJ5SWQoInl1aTMtY3NzLXN0YW1wIikmJiFZVUkuRW52LmNzc1N0YW1wRWwmJihZVUkuRW52LmNzc1N0YW1wRWw9Zy5nZXRFbGVtZW50QnlJZCgieXVpMy1jc3Mtc3RhbXAiKSk7Ri5jb25maWcubGFuZz1GLmNvbmZpZy5sYW5nfHwiZW4tVVMiO0YuY29uZmlnLmJhc2U9WVVJLmNvbmZpZy5iYXNlfHxZVUkuY29uZmlnLmRlZmF1bHRCYXNlJiZZVUkuY29uZmlnLnJvb3QmJllVSS5jb25maWcuZGVmYXVsdEJhc2UrWVVJLmNvbmZpZy5yb290fHxGLkVudi5nZXRCYXNlKEYuRW52Ll9CQVNFX1JFKTtBJiYibWluZGVidWciLmluZGV4T2YoQSl8fChBPSJtaW4iKTtBPUE/Ii0iK0E6QTtGLmNvbmZpZy5sb2FkZXJQYXRoPVlVSS5jb25maWcubG9hZGVyUGF0aHx8ImxvYWRlci9sb2FkZXIiK0ErIi5qcyJ9LF9hZnRlckNvbmZpZzpmdW5jdGlvbigpe3RoaXMuY29uZmlnLmhhc093blByb3BlcnR5KCJnbG9iYWwiKXx8Cih0aGlzLmNvbmZpZy5nbG9iYWw9RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSl9LF9zZXR1cDpmdW5jdGlvbigpe3ZhciBBLEg9W10sRj1ZVUkuRW52Lm1vZHM7QT10aGlzLmNvbmZpZy5leHRlbmRlZENvcmV8fFtdO3ZhciBCPXRoaXMuY29uZmlnLmNvcmV8fFtdLmNvbmNhdChZVUkuRW52LmNvcmUpLmNvbmNhdChBKTtmb3IoQT0wO0E8Qi5sZW5ndGg7QSsrKUZbQltBXV0mJkgucHVzaChCW0FdKTt0aGlzLl9hdHRhY2goWyJ5dWktYmFzZSJdKTt0aGlzLl9hdHRhY2goSCk7dGhpcy5Mb2FkZXImJnUodGhpcyl9LGFwcGx5VG86ZnVuY3Rpb24oQSxILEYpe2lmKCEoSCBpbiBkKSlyZXR1cm4gdGhpcy5sb2coSCsiOiBhcHBseVRvIG5vdCBhbGxvd2VkIiwid2FybiIsInl1aSIpLG51bGw7QT1rW0FdO3ZhciBCLEksTTtpZihBKXtCPUguc3BsaXQoIi4iKTtJPUE7Zm9yKE09MDtNPEIubGVuZ3RoO00rPTEpKEk9SVtCW01dXSl8fHRoaXMubG9nKCJhcHBseVRvIG5vdCBmb3VuZDogIitILAoid2FybiIsInl1aSIpO3JldHVybiBJJiZJLmFwcGx5KEEsRil9cmV0dXJuIG51bGx9LGFkZDpmdW5jdGlvbihBLEgsRixCKXtCPUJ8fHt9O3ZhciBJPVlVSS5FbnYsTT17bmFtZTpBLGZuOkgsdmVyc2lvbjpGLGRldGFpbHM6Qn07SD17fTt2YXIgRCxKPUkudmVyc2lvbnM7SS5tb2RzW0FdPU07SltGXT1KW0ZdfHx7fTtKW0ZdW0FdPU07Zm9yKEQgaW4gaylrLmhhc093blByb3BlcnR5KEQpJiYoRj1rW0RdLCFIW0YuaWRdJiYoSFtGLmlkXT0hMCxGPUYuRW52Ll9sb2FkZXIpKSYmKChJPUYuZ2V0TW9kdWxlSW5mbyhBKSkmJiFJLnRlbXB8fEYuYWRkTW9kdWxlKEIsQSkpO3JldHVybiB0aGlzfSxfYXR0YWNoOmZ1bmN0aW9uKEEsSCl7dmFyIEYsQixJLE0sRCxKLFAsVj1ZVUkuRW52Lm1vZHMsWT1ZVUkuRW52LmFsaWFzZXMsbmE9WVVJLkVudi5fcmVuZGVyZWRNb2RzLGZhPXRoaXMuRW52Ll9sb2FkZXIsaWE9dGhpcy5FbnYuX2F0dGFjaGVkLFo9dGhpcy5FbnYuX2V4cG9ydGVkLGVhPUEubGVuZ3RoOwpKPVtdO3ZhciBvYSxBYSxwYSxGYTtmb3IoRj0wO0Y8ZWE7RisrKWlmKEI9QVtGXSxKLnB1c2goQiksZmEmJmZhLmNvbmRpdGlvbnNbQl0pZm9yKE0gaW4gZmEuY29uZGl0aW9uc1tCXSlmYS5jb25kaXRpb25zW0JdLmhhc093blByb3BlcnR5KE0pJiYoRD0oST1mYS5jb25kaXRpb25zW0JdW01dKSYmKEkudWEmJnRoaXMuVUFbSS51YV18fEkudGVzdCYmSS50ZXN0KHRoaXMpKSkmJkoucHVzaChJLm5hbWUpO0E9SjtlYT1BLmxlbmd0aDtmb3IoRj0wO0Y8ZWE7RisrKWlmKCFpYVtBW0ZdXSlpZihCPUFbRl0sST1WW0JdLFkmJllbQl0mJiFJKXRoaXMuX2F0dGFjaChZW0JdKTtlbHNlIGlmKEkpe2lhW0JdPSEwO2ZvcihNPTA7TTx0aGlzLkVudi5fbWlzc2VkLmxlbmd0aDtNKyspdGhpcy5FbnYuX21pc3NlZFtNXT09PUImJih0aGlzLm1lc3NhZ2UoIkZvdW5kOiAiK0IrIiAod2FzIHJlcG9ydGVkIGFzIG1pc3NpbmcgZWFybGllcikiLCJ3YXJuIiwieXVpIiksdGhpcy5FbnYuX21pc3NlZC5zcGxpY2UoTSwKMSkpO2lmKGZhJiYhZmEuX2NhbkJlQXR0YWNoZWQoQikpYnJlYWs7aWYoZmEmJm5hJiZuYVtCXSYmbmFbQl0udGVtcCl7ZmEuZ2V0UmVxdWlyZXMobmFbQl0pO0Q9W107Sj1mYS5nZXRNb2R1bGVJbmZvKEIpO2ZvcihNIGluIEouZXhwYW5kZWRfbWFwKUouZXhwYW5kZWRfbWFwLmhhc093blByb3BlcnR5KE0pJiZELnB1c2goTSk7dGhpcy5fYXR0YWNoKEQpfU09SS5kZXRhaWxzO0Q9TS5yZXF1aXJlcztvYT1NLmVzO0o9TS51c2U7UD1NLmFmdGVyO00ubGFuZyYmKEQ9RHx8W10sRC51bnNoaWZ0KCJpbnRsIikpO2lmKEQpZm9yKEFhPUQubGVuZ3RoLE09MDtNPEFhO00rKylpZighaWFbRFtNXV0pe2lmKCF0aGlzLl9hdHRhY2goRCkpcmV0dXJuITE7YnJlYWt9aWYoUClmb3IoTT0wO008UC5sZW5ndGg7TSsrKWlmKCFpYVtQW01dXSl7aWYoIXRoaXMuX2F0dGFjaChQLCEwKSlyZXR1cm4hMTticmVha31pZihJLmZuKXtQPVt0aGlzLEJdO2lmKG9hJiYoRmE9e30scGE9e30sUC5wdXNoKEZhLApwYSksRCkpZm9yKEFhPUQubGVuZ3RoLE09MDtNPEFhO00rKylGYVtEW01dXT1aLmhhc093blByb3BlcnR5KERbTV0pP1pbRFtNXV06dGhpcztpZih0aGlzLmNvbmZpZy50aHJvd0ZhaWwpcGE9SS5mbi5hcHBseShvYT92b2lkIDA6SSxQKTtlbHNlIHRyeXtwYT1JLmZuLmFwcGx5KG9hP3ZvaWQgMDpJLFApfWNhdGNoKEVhKXtyZXR1cm4gdGhpcy5lcnJvcigiQXR0YWNoIGVycm9yOiAiK0IsRWEsQiksITF9b2EmJihaW0JdPXBhLChCPUkuZGV0YWlscy5jb25kaXRpb24pJiYiaW5zdGVhZCI9PT1CLndoZW4mJihaW0IudHJpZ2dlcl09cGEpKX1pZihKKWZvcihNPTA7TTxKLmxlbmd0aDtNKyspaWYoIWlhW0pbTV1dKXtpZighdGhpcy5fYXR0YWNoKEopKXJldHVybiExO2JyZWFrfX1lbHNlKEo9ZmEmJmZhLmdldE1vZHVsZUluZm8oQikpJiYoSD0hMCksIUgmJkImJi0xPT09Qi5pbmRleE9mKCJza2luLSIpJiYtMT09PUIuaW5kZXhPZigiY3NzIikmJih0aGlzLkVudi5fbWlzc2VkLnB1c2goQiksCnRoaXMuRW52Ll9taXNzZWQ9dGhpcy5BcnJheS5kZWR1cGUodGhpcy5FbnYuX21pc3NlZCksdGhpcy5tZXNzYWdlKCJOT1QgbG9hZGVkOiAiK0IsIndhcm4iLCJ5dWkiKSk7cmV0dXJuITB9LF9kZWxheUNhbGxiYWNrOmZ1bmN0aW9uKEEsSCl7dmFyIEY9dGhpcyxCPVsiZXZlbnQtYmFzZSJdO0g9Ri5MYW5nLmlzT2JqZWN0KEgpP0g6e2V2ZW50Okh9OyJsb2FkIj09PUguZXZlbnQmJkIucHVzaCgiZXZlbnQtc3ludGhldGljIik7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIEk9YXJndW1lbnRzO0YuX3VzZShCLGZ1bmN0aW9uKCl7Ri5vbihILmV2ZW50LGZ1bmN0aW9uKCl7SVsxXS5kZWxheVVudGlsPUguZXZlbnQ7QS5hcHBseShGLEkpfSxILmFyZ3MpfSl9fSx1c2U6ZnVuY3Rpb24oKXt2YXIgQT1mLmNhbGwoYXJndW1lbnRzLDApLEg9QVtBLmxlbmd0aC0xXSxGPTAsQixJPXRoaXMuRW52LE09ITA7dGhpcy5MYW5nLmlzRnVuY3Rpb24oSCk/KEEucG9wKCksdGhpcy5jb25maWcuZGVsYXlVbnRpbCYmCihIPXRoaXMuX2RlbGF5Q2FsbGJhY2soSCx0aGlzLmNvbmZpZy5kZWxheVVudGlsKSkpOkg9bnVsbDt0aGlzLkxhbmcuaXNBcnJheShBWzBdKSYmKEE9QVswXSk7aWYodGhpcy5jb25maWcuY2FjaGVVc2Upe2Zvcig7Qj1BW0YrK107KWlmKCFJLl9hdHRhY2hlZFtCXSl7TT0hMTticmVha31pZihNKXJldHVybiB0aGlzLl9ub3RpZnkoSCx6LEEpLHRoaXN9dGhpcy5fbG9hZGluZz8odGhpcy5fdXNlUXVldWU9dGhpcy5fdXNlUXVldWV8fG5ldyB0aGlzLlF1ZXVlLHRoaXMuX3VzZVF1ZXVlLmFkZChbQSxIXSkpOnRoaXMuX3VzZShBLGZ1bmN0aW9uKEQsSil7RC5fbm90aWZ5KEgsSixBKX0pO3JldHVybiB0aGlzfSxyZXF1aXJlOmZ1bmN0aW9uKCl7dmFyIEE9Zi5jYWxsKGFyZ3VtZW50cyksSDsiZnVuY3Rpb24iPT09dHlwZW9mIEFbQS5sZW5ndGgtMV0mJihIPUEucG9wKCksQS5wdXNoKGZ1bmN0aW9uKEYpe3ZhciBCLEk9QS5sZW5ndGgsTT1GLkVudi5fZXhwb3J0ZWQsRD17fTtmb3IoQj0KMDtCPEk7QisrKU0uaGFzT3duUHJvcGVydHkoQVtCXSkmJihEW0FbQl1dPU1bQVtCXV0pO0guY2FsbCh2b2lkIDAsRixEKX0pKTt0aGlzLnVzZS5hcHBseSh0aGlzLEEpfSxfbm90aWZ5OmZ1bmN0aW9uKEEsSCxGKXtpZighSC5zdWNjZXNzJiZ0aGlzLmNvbmZpZy5sb2FkRXJyb3JGbil0aGlzLmNvbmZpZy5sb2FkRXJyb3JGbi5jYWxsKHRoaXMsdGhpcyxBLEgsRik7ZWxzZSBpZihBKWlmKHRoaXMuRW52Ll9taXNzZWQmJnRoaXMuRW52Ll9taXNzZWQubGVuZ3RoJiYoSC5tc2c9Ik1pc3NpbmcgbW9kdWxlczogIit0aGlzLkVudi5fbWlzc2VkLmpvaW4oKSxILnN1Y2Nlc3M9ITEpLHRoaXMuY29uZmlnLnRocm93RmFpbClBKHRoaXMsSCk7ZWxzZSB0cnl7QSh0aGlzLEgpfWNhdGNoKEIpe3RoaXMuZXJyb3IoInVzZSBjYWxsYmFjayBlcnJvciIsQixGKX19LF91c2U6ZnVuY3Rpb24oQSxIKXt0aGlzLkFycmF5fHx0aGlzLl9hdHRhY2goWyJ5dWktYmFzZSJdKTt2YXIgRixCLEk9dGhpcyxNPQpZVUkuRW52LEQ9TS5tb2RzLEo9SS5FbnYsUD1KLl91c2VkLFY9TS5hbGlhc2VzLFk9TS5fbG9hZGVyUXVldWU7Qj1JLkFycmF5O3ZhciBuYT1JLmNvbmZpZyxmYT1uYS5ib290c3RyYXAsaWE9W10sWj1bXSxlYT0hMCxlYT1uYS5mZXRjaENTUyxvYT1mdW5jdGlvbihwYSxGYSl7dmFyIEVhPTAsV2E9W10sVWEsd2IsQWIsTWI7aWYocGEubGVuZ3RoKXtpZihWKXtVYT1wYS5sZW5ndGg7Zm9yKEVhPTA7RWE8VWE7RWErKylWW3BhW0VhXV0mJiFEW3BhW0VhXV0/V2E9W10uY29uY2F0KFdhLFZbcGFbRWFdXSk6V2EucHVzaChwYVtFYV0pO3BhPVdhfVVhPXBhLmxlbmd0aDtmb3IoRWE9MDtFYTxVYTtFYSsrKVdhPXBhW0VhXSxGYXx8Wi5wdXNoKFdhKSxQW1dhXXx8KHdiPURbV2FdLE1iPUFiPW51bGwsd2I/KFBbV2FdPSEwLEFiPXdiLmRldGFpbHMucmVxdWlyZXMsTWI9d2IuZGV0YWlscy51c2UpOk0uX2xvYWRlZFtxXVtXYV0/UFtXYV09ITA6aWEucHVzaChXYSksQWImJkFiLmxlbmd0aCYmCm9hKEFiKSxNYiYmTWIubGVuZ3RoJiZvYShNYiwxKSl9fSxBYT1mdW5jdGlvbihwYSl7dmFyIEZhPXBhfHx7c3VjY2VzczohMCxtc2c6Im5vdCBkeW5hbWljIn0sRWEsV2E9ITAsVWE9RmEuZGF0YTtJLl9sb2FkaW5nPSExO1VhJiYocGE9aWEsaWE9W10sWj1bXSxvYShVYSksKEVhPWlhLmxlbmd0aCkmJltdLmNvbmNhdChpYSkuc29ydCgpLmpvaW4oKT09cGEuc29ydCgpLmpvaW4oKSYmKEVhPSExKSk7RWEmJlVhPyhJLl9sb2FkaW5nPSEwLEkuX3VzZShpYSxmdW5jdGlvbigpe0kuX2F0dGFjaChVYSkmJkkuX25vdGlmeShILEZhLFVhKX0pKTooVWEmJihXYT1JLl9hdHRhY2goVWEpKSxXYSYmSS5fbm90aWZ5KEgsRmEsQSkpO0kuX3VzZVF1ZXVlJiZJLl91c2VRdWV1ZS5zaXplKCkmJiFJLl9sb2FkaW5nJiZJLl91c2UuYXBwbHkoSSxJLl91c2VRdWV1ZS5uZXh0KCkpfTtpZigiKiI9PT1BWzBdKXtBPVtdO2ZvcihGIGluIEQpRC5oYXNPd25Qcm9wZXJ0eShGKSYmQS5wdXNoKEYpOyhlYT0KSS5fYXR0YWNoKEEpKSYmQWEoKTtyZXR1cm4gSX0hRC5sb2FkZXImJiFEWyJsb2FkZXItYmFzZSJdfHxJLkxvYWRlcnx8SS5fYXR0YWNoKFsibG9hZGVyIisoRC5sb2FkZXI/IiI6Ii1iYXNlIildKTtmYSYmSS5Mb2FkZXImJkEubGVuZ3RoJiYoRj11KEkpLEYucmVxdWlyZShBKSxGLmlnbm9yZVJlZ2lzdGVyZWQ9ITAsRi5fYm9vdD0hMCxGLmNhbGN1bGF0ZShudWxsLGVhP251bGw6ImpzIiksQT1GLnNvcnRlZCxGLl9ib290PSExKTtvYShBKTtpZihGPWlhLmxlbmd0aClpYT1CLmRlZHVwZShpYSksRj1pYS5sZW5ndGg7ZmEmJkYmJkkuTG9hZGVyPyhJLl9sb2FkaW5nPSEwLEY9dShJKSxGLm9uRW5kPUFhLEYuY29udGV4dD1JLEYuZGF0YT1BLEYuaWdub3JlUmVnaXN0ZXJlZD0hMSxGLnJlcXVpcmUoaWEpLEYuaW5zZXJ0KG51bGwsZWE/bnVsbDoianMiKSk6ZmEmJkYmJkkuR2V0JiYhSi5ib290c3RyYXBwZWQ/KEkuX2xvYWRpbmc9ITAsQj1mdW5jdGlvbigpe0kuX2xvYWRpbmc9ITE7ClkucnVubmluZz0hMTtKLmJvb3RzdHJhcHBlZD0hMDtNLl9ib290c3RyYXBwaW5nPSExO0kuX2F0dGFjaChbImxvYWRlciJdKSYmSS5fdXNlKEEsSCl9LE0uX2Jvb3RzdHJhcHBpbmc/WS5hZGQoQik6KE0uX2Jvb3RzdHJhcHBpbmc9ITAsSS5HZXQuc2NyaXB0KG5hLmJhc2UrbmEubG9hZGVyUGF0aCx7b25FbmQ6Qn0pKSk6KGVhPUkuX2F0dGFjaChBKSkmJkFhKCk7cmV0dXJuIEl9LG5hbWVzcGFjZTpmdW5jdGlvbigpe2Zvcih2YXIgQT1hcmd1bWVudHMsSCxGPTAsQixJO0Y8QS5sZW5ndGg7RisrKWlmKEg9dGhpcyxCPUFbRl0sLTE8Qi5pbmRleE9mKCIuIikpZm9yKEk9Qi5zcGxpdCgiLiIpLEI9IllBSE9PIj09SVswXT8xOjA7QjxJLmxlbmd0aDtCKyspSFtJW0JdXT1IW0lbQl1dfHx7fSxIPUhbSVtCXV07ZWxzZSBIW0JdPUhbQl18fHt9LEg9SFtCXTtyZXR1cm4gSH0sbG9nOnQsbWVzc2FnZTp0LGR1bXA6ZnVuY3Rpb24oQSl7cmV0dXJuIiIrQX0sZXJyb3I6ZnVuY3Rpb24oQSxILApGKXt2YXIgQjt0aGlzLmNvbmZpZy5lcnJvckZuJiYoQj10aGlzLmNvbmZpZy5lcnJvckZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7aWYoQil0aGlzLm1lc3NhZ2UoQSwiZXJyb3IiLCIiK0YpO2Vsc2UgdGhyb3cgSHx8RXJyb3IoQSk7cmV0dXJuIHRoaXN9LGd1aWQ6ZnVuY3Rpb24oQSl7dmFyIEg9dGhpcy5FbnYuX2d1aWRwKyJfIisgKyt0aGlzLkVudi5fdWlkeDtyZXR1cm4gQT9BK0g6SH0sc3RhbXA6ZnVuY3Rpb24oQSxIKXt2YXIgRjtpZighQSlyZXR1cm4gQTtGPUEudW5pcXVlSUQmJkEubm9kZVR5cGUmJjkhPT1BLm5vZGVUeXBlP0EudW5pcXVlSUQ6InN0cmluZyI9PT10eXBlb2YgQT9BOkEuX3l1aWQ7aWYoIUYmJihGPXRoaXMuZ3VpZCgpLCFIKSl0cnl7QS5feXVpZD1GfWNhdGNoKEIpe0Y9bnVsbH1yZXR1cm4gRn0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuRXZlbnQmJnRoaXMuRXZlbnQuX3VubG9hZCgpO2RlbGV0ZSBrW3RoaXMuaWRdO2RlbGV0ZSB0aGlzLkVudjtkZWxldGUgdGhpcy5jb25maWd9fTsKWVVJLnByb3RvdHlwZT1hO2ZvcihFIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShFKSYmKFlVSVtFXT1hW0VdKTtZVUkuYXBwbHlDb25maWc9ZnVuY3Rpb24oQSl7QSYmKFlVSS5HbG9iYWxDb25maWcmJnRoaXMucHJvdG90eXBlLmFwcGx5Q29uZmlnLmNhbGwodGhpcyxZVUkuR2xvYmFsQ29uZmlnKSx0aGlzLnByb3RvdHlwZS5hcHBseUNvbmZpZy5jYWxsKHRoaXMsQSksWVVJLkdsb2JhbENvbmZpZz10aGlzLmNvbmZpZyl9O1lVSS5faW5pdCgpO2M/KHAoZywiRE9NQ29udGVudExvYWRlZCIsbCkscCh3aW5kb3csImxvYWQiLGgpKToobCgpLGgoKSk7WVVJLkVudi5hZGQ9cDtZVUkuRW52LnJlbW92ZT1zOyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmKGV4cG9ydHMuWVVJPVlVSSxZVUkuc2V0TG9hZEhvb2s9ZnVuY3Rpb24oQSl7WVVJLl9nZXRMb2FkSG9vaz1BfSxZVUkuX2dldExvYWRIb29rPW51bGwpO1lVSS5FbnZbcV09e319KSgpOwpZVUkuYWRkKCJ5dWktYmFzZSIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKEIsSSxNKXt2YXIgRDtJfHwoST0wKTtpZihNfHxxLnRlc3QoQikpdHJ5e3JldHVybiBsLnNsaWNlLmNhbGwoQixJKX1jYXRjaChKKXtEPVtdO2ZvcihNPUIubGVuZ3RoO0k8TTsrK0kpRC5wdXNoKEJbSV0pO3JldHVybiBEfXJldHVybltCXX1mdW5jdGlvbiB0KCl7dGhpcy5faW5pdCgpO3RoaXMuYWRkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZj1hLkxhbmd8fChhLkxhbmc9e30pLGQ9U3RyaW5nLnByb3RvdHlwZSxjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsYj17dW5kZWZpbmVkOiJ1bmRlZmluZWQiLG51bWJlcjoibnVtYmVyIiwiYm9vbGVhbiI6ImJvb2xlYW4iLHN0cmluZzoic3RyaW5nIiwiW29iamVjdCBGdW5jdGlvbl0iOiJmdW5jdGlvbiIsIltvYmplY3QgUmVnRXhwXSI6InJlZ2V4cCIsIltvYmplY3QgQXJyYXldIjoiYXJyYXkiLCJbb2JqZWN0IERhdGVdIjoiZGF0ZSIsIltvYmplY3QgRXJyb3JdIjoiZXJyb3IifSwKZz0vXHtccyooW158fV0rPylccyooPzpcfChbXn1dKikpP1xzKlx9L2csZT0vXltcdC1cciBcdTAwYTBcdTE2ODBcdTE4MGVcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmXSsvLGs9L1tcdC1cciBcdTAwYTBcdTE2ODBcdTE4MGVcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmXSskLyxtPVJlZ0V4cChlLnNvdXJjZSsifCIray5zb3VyY2UsImciKSxwPS9ce1xzKlxbKD86bmF0aXZlIGNvZGV8ZnVuY3Rpb24pXF1ccypcfS9pO2YuX2lzTmF0aXZlPWZ1bmN0aW9uKEIpe3JldHVybiEhKGEuY29uZmlnLnVzZU5hdGl2ZUVTNSYmQiYmcC50ZXN0KEIpKX07Zi5pc0FycmF5PWYuX2lzTmF0aXZlKEFycmF5LmlzQXJyYXkpP0FycmF5LmlzQXJyYXk6ZnVuY3Rpb24oQil7cmV0dXJuImFycmF5Ij09PWYudHlwZShCKX07Zi5pc0Jvb2xlYW49ZnVuY3Rpb24oQil7cmV0dXJuImJvb2xlYW4iPT09dHlwZW9mIEJ9O2YuaXNEYXRlPQpmdW5jdGlvbihCKXtyZXR1cm4iZGF0ZSI9PT1mLnR5cGUoQikmJiJJbnZhbGlkIERhdGUiIT09Qi50b1N0cmluZygpJiYhaXNOYU4oQil9O2YuaXNGdW5jdGlvbj1mdW5jdGlvbihCKXtyZXR1cm4iZnVuY3Rpb24iPT09Zi50eXBlKEIpfTtmLmlzTnVsbD1mdW5jdGlvbihCKXtyZXR1cm4gbnVsbD09PUJ9O2YuaXNOdW1iZXI9ZnVuY3Rpb24oQil7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgQiYmaXNGaW5pdGUoQil9O2YuaXNPYmplY3Q9ZnVuY3Rpb24oQixJKXt2YXIgTT10eXBlb2YgQjtyZXR1cm4gQiYmKCJvYmplY3QiPT09TXx8IUkmJigiZnVuY3Rpb24iPT09TXx8Zi5pc0Z1bmN0aW9uKEIpKSl8fCExfTtmLmlzUmVnRXhwPWZ1bmN0aW9uKEIpe3JldHVybiJyZWdleHAiPT09Zi50eXBlKEIpfTtmLmlzU3RyaW5nPWZ1bmN0aW9uKEIpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIEJ9O2YuaXNVbmRlZmluZWQ9ZnVuY3Rpb24oQil7cmV0dXJuInVuZGVmaW5lZCI9PT10eXBlb2YgQn07CmYuaXNWYWx1ZT1mdW5jdGlvbihCKXt2YXIgST1mLnR5cGUoQik7c3dpdGNoKEkpe2Nhc2UgIm51bWJlciI6cmV0dXJuIGlzRmluaXRlKEIpO2Nhc2UgIm51bGwiOmNhc2UgInVuZGVmaW5lZCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hIUl9fTtmLm5vdz1EYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07Zi5zdWI9ZnVuY3Rpb24oQixJKXtmdW5jdGlvbiBNKEQsSil7dmFyIFA7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgRFtKXSlyZXR1cm4gRFtKXTtKPUouc3BsaXQoIi4iKTtQPUouc2xpY2UoMSkuam9pbigiLiIpO0o9SlswXTtpZihQJiYib2JqZWN0Ij09PXR5cGVvZiBEW0pdJiZudWxsIT09RFtKXSlyZXR1cm4gTShEW0pdLFApfXJldHVybiBCLnJlcGxhY2U/Qi5yZXBsYWNlKGcsZnVuY3Rpb24oRCxKKXt2YXIgUD0tMTxKLmluZGV4T2YoIi4iKT9NKEksSik6SVtKXTtyZXR1cm4idW5kZWZpbmVkIj09PXR5cGVvZiBQP0Q6UH0pOkJ9O2YudHJpbT0KZi5faXNOYXRpdmUoZC50cmltKSYmISJcdFxuXHgwQlxmXHIgXHUwMGEwXHUxNjgwXHUxODBlXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmIi50cmltKCk/ZnVuY3Rpb24oQil7cmV0dXJuIEImJkIudHJpbT9CLnRyaW0oKTpCfTpmdW5jdGlvbihCKXt0cnl7cmV0dXJuIEIucmVwbGFjZShtLCIiKX1jYXRjaChJKXtyZXR1cm4gQn19O2YudHJpbUxlZnQ9Zi5faXNOYXRpdmUoZC50cmltTGVmdCkmJiEiXHRcblx4MEJcZlxyIFx1MDBhMFx1MTY4MFx1MTgwZVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZiIudHJpbUxlZnQoKT9mdW5jdGlvbihCKXtyZXR1cm4gQi50cmltTGVmdCgpfTpmdW5jdGlvbihCKXtyZXR1cm4gQi5yZXBsYWNlKGUsCiIiKX07Zi50cmltUmlnaHQ9Zi5faXNOYXRpdmUoZC50cmltUmlnaHQpJiYhIlx0XG5ceDBCXGZcciBcdTAwYTBcdTE2ODBcdTE4MGVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFcdTIwMjhcdTIwMjlcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmYiLnRyaW1SaWdodCgpP2Z1bmN0aW9uKEIpe3JldHVybiBCLnRyaW1SaWdodCgpfTpmdW5jdGlvbihCKXtyZXR1cm4gQi5yZXBsYWNlKGssIiIpfTtmLnR5cGU9ZnVuY3Rpb24oQil7cmV0dXJuIGJbdHlwZW9mIEJdfHxiW2MuY2FsbChCKV18fChCPyJvYmplY3QiOiJudWxsIil9O3ZhciBzPWEuTGFuZyxsPUFycmF5LnByb3RvdHlwZSxoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7YS5BcnJheT1xO3EuZGVkdXBlPXMuX2lzTmF0aXZlKE9iamVjdC5jcmVhdGUpP2Z1bmN0aW9uKEIpe3ZhciBJPU9iamVjdC5jcmVhdGUobnVsbCksTT1bXSxELEosUDtEPTA7Zm9yKFA9CkIubGVuZ3RoO0Q8UDsrK0QpSj1CW0RdLElbSl18fChJW0pdPTEsTS5wdXNoKEopKTtyZXR1cm4gTX06ZnVuY3Rpb24oQil7dmFyIEk9e30sTT1bXSxELEosUDtEPTA7Zm9yKFA9Qi5sZW5ndGg7RDxQOysrRClKPUJbRF0saC5jYWxsKEksSil8fChJW0pdPTEsTS5wdXNoKEopKTtyZXR1cm4gTX07cS5lYWNoPXEuZm9yRWFjaD1zLl9pc05hdGl2ZShsLmZvckVhY2gpP2Z1bmN0aW9uKEIsSSxNKXtsLmZvckVhY2guY2FsbChCfHxbXSxJLE18fGEpO3JldHVybiBhfTpmdW5jdGlvbihCLEksTSl7Zm9yKHZhciBEPTAsSj1CJiZCLmxlbmd0aHx8MDtEPEo7KytEKUQgaW4gQiYmSS5jYWxsKE18fGEsQltEXSxELEIpO3JldHVybiBhfTtxLmhhc2g9ZnVuY3Rpb24oQixJKXt2YXIgTT17fSxEPUkmJkkubGVuZ3RofHwwLEosUDtKPTA7Zm9yKFA9Qi5sZW5ndGg7SjxQOysrSilKIGluIEImJihNW0JbSl1dPUQ+SiYmSiBpbiBJP0lbSl06ITApO3JldHVybiBNfTtxLmluZGV4T2Y9cy5faXNOYXRpdmUobC5pbmRleE9mKT8KZnVuY3Rpb24oQixJLE0pe3JldHVybiBsLmluZGV4T2YuY2FsbChCLEksTSl9OmZ1bmN0aW9uKEIsSSxNKXt2YXIgRD1CLmxlbmd0aDtNPStNfHwwO009KDA8TXx8LTEpKk1hdGguZmxvb3IoTWF0aC5hYnMoTSkpOzA+TSYmKE0rPUQsMD5NJiYoTT0wKSk7Zm9yKDtNPEQ7KytNKWlmKE0gaW4gQiYmQltNXT09PUkpcmV0dXJuIE07cmV0dXJuLTF9O3EubnVtZXJpY1NvcnQ9ZnVuY3Rpb24oQixJKXtyZXR1cm4gQi1JfTtxLnNvbWU9cy5faXNOYXRpdmUobC5zb21lKT9mdW5jdGlvbihCLEksTSl7cmV0dXJuIGwuc29tZS5jYWxsKEIsSSxNKX06ZnVuY3Rpb24oQixJLE0pe2Zvcih2YXIgRD0wLEo9Qi5sZW5ndGg7RDxKOysrRClpZihEIGluIEImJkkuY2FsbChNLEJbRF0sRCxCKSlyZXR1cm4hMDtyZXR1cm4hMX07cS50ZXN0PWZ1bmN0aW9uKEIpe3ZhciBJPTA7aWYocy5pc0FycmF5KEIpKUk9MTtlbHNlIGlmKHMuaXNPYmplY3QoQikpdHJ5eyJsZW5ndGgiaW4gQiYmIShCLnRhZ05hbWV8fApCLnNjcm9sbFRvJiZCLmRvY3VtZW50fHxCLmFwcGx5KSYmKEk9Mil9Y2F0Y2goTSl7fXJldHVybiBJfTt0LnByb3RvdHlwZT17X2luaXQ6ZnVuY3Rpb24oKXt0aGlzLl9xPVtdfSxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Euc2hpZnQoKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xLnBvcCgpfSxhZGQ6ZnVuY3Rpb24oKXt0aGlzLl9xLnB1c2guYXBwbHkodGhpcy5fcSxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3EubGVuZ3RofX07YS5RdWV1ZT10O1lVSS5FbnYuX2xvYWRlclF1ZXVlPVlVSS5FbnYuX2xvYWRlclF1ZXVlfHxuZXcgdDt2YXIgaD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHU9YS5MYW5nLmlzT2JqZWN0O2EuY2FjaGVkPWZ1bmN0aW9uKEIsSSxNKXtJfHwoST17fSk7cmV0dXJuIGZ1bmN0aW9uKEQpe3ZhciBKPTE8YXJndW1lbnRzLmxlbmd0aD9BcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywKIl9fIik6U3RyaW5nKEQpO2lmKCEoSiBpbiBJKXx8TSYmSVtKXT09TSlJW0pdPUIuYXBwbHkoQixhcmd1bWVudHMpO3JldHVybiBJW0pdfX07YS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3ZhciBCPWEuY29uZmlnLndpbjtyZXR1cm4gQiYmQi5sb2NhdGlvbn07YS5tZXJnZT1mdW5jdGlvbigpe2Zvcih2YXIgQj0wLEk9YXJndW1lbnRzLmxlbmd0aCxNPXt9LEQsSjtCPEk7KytCKWZvcihEIGluIEo9YXJndW1lbnRzW0JdLEopaC5jYWxsKEosRCkmJihNW0RdPUpbRF0pO3JldHVybiBNfTthLm1peD1mdW5jdGlvbihCLEksTSxELEosUCl7dmFyIFYsWSxuYSxmYSxpYTtpZighQnx8IUkpcmV0dXJuIEJ8fGE7aWYoSil7aWYoMj09PUomJmEubWl4KEIucHJvdG90eXBlLEkucHJvdG90eXBlLE0sRCwwLFApLFk9MT09PUp8fDM9PT1KP0kucHJvdG90eXBlOkksaWE9MT09PUp8fDQ9PT1KP0IucHJvdG90eXBlOkIsIVl8fCFpYSlyZXR1cm4gQn1lbHNlIFk9SSxpYT1CO0k9TSYmIVA7aWYoRClmb3IoSj0KMCxmYT1ELmxlbmd0aDtKPGZhOysrSil7aWYobmE9RFtKXSxoLmNhbGwoWSxuYSkpaWYoVj1JPyExOm5hIGluIGlhLFAmJlYmJnUoaWFbbmFdLCEwKSYmdShZW25hXSwhMCkpYS5taXgoaWFbbmFdLFlbbmFdLE0sbnVsbCwwLFApO2Vsc2UgaWYoTXx8IVYpaWFbbmFdPVlbbmFdfWVsc2V7Zm9yKG5hIGluIFkpaWYoaC5jYWxsKFksbmEpKWlmKFY9ST8hMTpuYSBpbiBpYSxQJiZWJiZ1KGlhW25hXSwhMCkmJnUoWVtuYV0sITApKWEubWl4KGlhW25hXSxZW25hXSxNLG51bGwsMCxQKTtlbHNlIGlmKE18fCFWKWlhW25hXT1ZW25hXTthLk9iamVjdC5faGFzRW51bUJ1ZyYmYS5taXgoaWEsWSxNLGEuT2JqZWN0Ll9mb3JjZUVudW0sSixQKX1yZXR1cm4gQn07dmFyIHM9YS5MYW5nLGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx3PWEuT2JqZWN0PXMuX2lzTmF0aXZlKE9iamVjdC5jcmVhdGUpP2Z1bmN0aW9uKEIpe3JldHVybiBPYmplY3QuY3JlYXRlKEIpfTpmdW5jdGlvbigpe2Z1bmN0aW9uIEIoKXt9CnJldHVybiBmdW5jdGlvbihJKXtCLnByb3RvdHlwZT1JO3JldHVybiBuZXcgQn19KCksej13Ll9mb3JjZUVudW09Imhhc093blByb3BlcnR5IGlzUHJvdG90eXBlT2YgcHJvcGVydHlJc0VudW1lcmFibGUgdG9TdHJpbmcgdG9Mb2NhbGVTdHJpbmcgdmFsdWVPZiIuc3BsaXQoIiAiKSxBPXcuX2hhc0VudW1CdWc9IXt2YWx1ZU9mOjB9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJ2YWx1ZU9mIiksSD13Ll9oYXNQcm90b0VudW1CdWc9ZnVuY3Rpb24oKXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJwcm90b3R5cGUiKSxGPXcub3ducz1mdW5jdGlvbihCLEkpe3JldHVybiEhQiYmaC5jYWxsKEIsSSl9O3cuaGFzS2V5PUY7dy5rZXlzPXMuX2lzTmF0aXZlKE9iamVjdC5rZXlzKSYmIUg/T2JqZWN0LmtleXM6ZnVuY3Rpb24oQil7aWYoIXMuaXNPYmplY3QoQikpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpO3ZhciBJPVtdLE0sRCxKO2lmKEgmJgoiZnVuY3Rpb24iPT09dHlwZW9mIEIpZm9yKEQgaW4gQilGKEIsRCkmJiJwcm90b3R5cGUiIT09RCYmSS5wdXNoKEQpO2Vsc2UgZm9yKEQgaW4gQilGKEIsRCkmJkkucHVzaChEKTtpZihBKWZvcihNPTAsSj16Lmxlbmd0aDtNPEo7KytNKUQ9eltNXSxGKEIsRCkmJkkucHVzaChEKTtyZXR1cm4gSX07dy52YWx1ZXM9ZnVuY3Rpb24oQil7Zm9yKHZhciBJPXcua2V5cyhCKSxNPTAsRD1JLmxlbmd0aCxKPVtdO008RDsrK00pSi5wdXNoKEJbSVtNXV0pO3JldHVybiBKfTt3LnNpemU9ZnVuY3Rpb24oQil7dHJ5e3JldHVybiB3LmtleXMoQikubGVuZ3RofWNhdGNoKEkpe3JldHVybiAwfX07dy5oYXNWYWx1ZT1mdW5jdGlvbihCLEkpe3JldHVybi0xPGEuQXJyYXkuaW5kZXhPZih3LnZhbHVlcyhCKSxJKX07dy5lYWNoPWZ1bmN0aW9uKEIsSSxNLEQpe2Zvcih2YXIgSiBpbiBCKShEfHxGKEIsSikpJiZJLmNhbGwoTXx8YSxCW0pdLEosQik7cmV0dXJuIGF9O3cuc29tZT1mdW5jdGlvbihCLEksCk0sRCl7Zm9yKHZhciBKIGluIEIpaWYoKER8fEYoQixKKSkmJkkuY2FsbChNfHxhLEJbSl0sSixCKSlyZXR1cm4hMDtyZXR1cm4hMX07dy5nZXRWYWx1ZT1mdW5jdGlvbihCLEkpe2lmKHMuaXNPYmplY3QoQikpe3ZhciBNLEQ9YS5BcnJheShJKSxKPUQubGVuZ3RoO2ZvcihNPTA7dm9pZCAwIT09QiYmTTxKO00rKylCPUJbRFtNXV07cmV0dXJuIEJ9fTt3LnNldFZhbHVlPWZ1bmN0aW9uKEIsSSxNKXt2YXIgRD1hLkFycmF5KEkpLEo9RC5sZW5ndGgtMSxQPUI7aWYoMDw9Sil7Zm9yKEk9MDt2b2lkIDAhPT1QJiZJPEo7SSsrKVA9UFtEW0ldXTtpZih2b2lkIDAhPT1QKVBbRFtJXV09TTtlbHNlIHJldHVybn1yZXR1cm4gQn07dy5pc0VtcHR5PWZ1bmN0aW9uKEIpe3JldHVybiF3LmtleXMoT2JqZWN0KEIpKS5sZW5ndGh9O1lVSS5FbnYucGFyc2VVQT1mdW5jdGlvbihCKXt2YXIgST1mdW5jdGlvbihZKXt2YXIgbmE9MDtyZXR1cm4gcGFyc2VGbG9hdChZLnJlcGxhY2UoL1wuL2csZnVuY3Rpb24oKXtyZXR1cm4gMT09PQpuYSsrPyIiOiIuIn0pKX0sTT1hLmNvbmZpZy53aW4sRD1NJiZNLm5hdmlnYXRvcixKPXtpZTowLG9wZXJhOjAsZ2Vja286MCx3ZWJraXQ6MCxzYWZhcmk6MCxjaHJvbWU6MCxtb2JpbGU6bnVsbCxhaXI6MCxwaGFudG9tanM6MCxpcGFkOjAsaXBob25lOjAsaXBvZDowLGlvczpudWxsLGFuZHJvaWQ6MCxzaWxrOjAsdWJ1bnR1OjAsYWNjZWw6ITEsd2Vib3M6MCxjYWphOkQmJkQuY2FqYVZlcnNpb24sc2VjdXJlOiExLG9zOm51bGwsbm9kZWpzOjAsd2luanM6ISgidW5kZWZpbmVkIj09PXR5cGVvZiBXaW5kb3dzfHwhV2luZG93cy5TeXN0ZW0pLHRvdWNoRW5hYmxlZDohMX0sUD1CfHxEJiZELnVzZXJBZ2VudCxWPU0mJk0ubG9jYXRpb24sVj1WJiZWLmhyZWY7Si51c2VyQWdlbnQ9UDtKLnNlY3VyZT1WJiYwPT09Vi50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImh0dHBzIik7aWYoUCl7L3dpbmRvd3N8d2luMzIvaS50ZXN0KFApP0oub3M9IndpbmRvd3MiOi9tYWNpbnRvc2h8bWFjX3Bvd2VycGMvaS50ZXN0KFApPwpKLm9zPSJtYWNpbnRvc2giOi9hbmRyb2lkL2kudGVzdChQKT9KLm9zPSJhbmRyb2lkIjovc3ltYm9zL2kudGVzdChQKT9KLm9zPSJzeW1ib3MiOi9saW51eC9pLnRlc3QoUCk/Si5vcz0ibGludXgiOi9yaGluby9pLnRlc3QoUCkmJihKLm9zPSJyaGlubyIpOy9LSFRNTC8udGVzdChQKSYmKEoud2Via2l0PTEpOy9JRU1vYmlsZXxYQkxXUDcvLnRlc3QoUCkmJihKLm1vYmlsZT0id2luZG93cyIpOy9GZW5uZWMvLnRlc3QoUCkmJihKLm1vYmlsZT0iZ2Vja28iKTtpZigoVj1QLm1hdGNoKC9BcHBsZVdlYktpdFwvKFteXHNdKikvKSkmJlZbMV0pe0oud2Via2l0PUkoVlsxXSk7Si5zYWZhcmk9Si53ZWJraXQ7L1BoYW50b21KUy8udGVzdChQKSYmKFY9UC5tYXRjaCgvUGhhbnRvbUpTXC8oW15cc10qKS8pKSYmVlsxXSYmKEoucGhhbnRvbWpzPUkoVlsxXSkpO2lmKC8gTW9iaWxlXC8vLnRlc3QoUCl8fC9pUGFkfGlQb2R8aVBob25lLy50ZXN0KFApKUoubW9iaWxlPSJBcHBsZSIsKFY9UC5tYXRjaCgvT1MgKFteXHNdKikvKSkmJgpWWzFdJiYoVj1JKFZbMV0ucmVwbGFjZSgiXyIsIi4iKSkpLEouaW9zPVYsSi5vcz0iaW9zIixKLmlwYWQ9Si5pcG9kPUouaXBob25lPTAsKFY9UC5tYXRjaCgvaVBhZHxpUG9kfGlQaG9uZS8pKSYmVlswXSYmKEpbVlswXS50b0xvd2VyQ2FzZSgpXT1KLmlvcyk7ZWxzZXtpZihWPVAubWF0Y2goL05va2lhTlteXC9dKnx3ZWJPU1wvXGRcLlxkLykpSi5tb2JpbGU9VlswXTsvd2ViT1MvLnRlc3QoUCkmJihKLm1vYmlsZT0iV2ViT1MiLChWPVAubWF0Y2goL3dlYk9TXC8oW15cc10qKTsvKSkmJlZbMV0mJihKLndlYm9zPUkoVlsxXSkpKTsvIEFuZHJvaWQvLnRlc3QoUCkmJihKLm1vYmlsZT0iQW5kcm9pZCIsKFY9UC5tYXRjaCgvQW5kcm9pZCAoW15cc10qKTsvKSkmJlZbMV0mJihKLmFuZHJvaWQ9SShWWzFdKSkpOy9TaWxrLy50ZXN0KFApJiYoKFY9UC5tYXRjaCgvU2lsa1wvKFteXHNdKikvKSkmJlZbMV0mJihKLnNpbGs9SShWWzFdKSksSi5hbmRyb2lkfHwoSi5hbmRyb2lkPTIuMzQsCkoub3M9IkFuZHJvaWQiKSwvQWNjZWxlcmF0ZWQ9dHJ1ZS8udGVzdChQKSYmKEouYWNjZWw9ITApKX1pZigoVj1QLm1hdGNoKC9PUFJcLyhcZCtcLlxkKykvKSkmJlZbMV0pSi5vcGVyYT1JKFZbMV0pO2Vsc2UgaWYoKFY9UC5tYXRjaCgvKENocm9tZXxDck1vfENyaU9TKVwvKFteXHNdKikvKSkmJlZbMV0mJlZbMl0pSi5jaHJvbWU9SShWWzJdKSxKLnNhZmFyaT0wLCJDck1vIj09PVZbMV0mJihKLm1vYmlsZT0iY2hyb21lIik7ZWxzZSBpZihWPVAubWF0Y2goL0Fkb2JlQUlSXC8oW15cc10qKS8pKUouYWlyPVZbMF19KFY9UC5tYXRjaCgvVWJ1bnR1XCAoXGQrXC5cZCspLykpJiZWWzFdJiYoSi5vcz0ibGludXgiLEoudWJ1bnR1PUkoVlsxXSksKFY9UC5tYXRjaCgvXCBXZWJLaXRcLyhbXlxzXSopLykpJiZWWzFdJiYoSi53ZWJraXQ9SShWWzFdKSksKFY9UC5tYXRjaCgvXCBDaHJvbWl1bVwvKFteXHNdKikvKSkmJlZbMV0mJihKLmNocm9tZT1JKFZbMV0pKSwvIE1vYmlsZSQvLnRlc3QoUCkmJgooSi5tb2JpbGU9IlVidW50dSIpKTtpZighSi53ZWJraXQpaWYoL09wZXJhLy50ZXN0KFApKXtpZigoVj1QLm1hdGNoKC9PcGVyYVtcc1wvXShbXlxzXSopLykpJiZWWzFdJiYoSi5vcGVyYT1JKFZbMV0pKSwoVj1QLm1hdGNoKC9WZXJzaW9uXC8oW15cc10qKS8pKSYmVlsxXSYmKEoub3BlcmE9SShWWzFdKSksL09wZXJhIE1vYmkvLnRlc3QoUCkmJihKLm1vYmlsZT0ib3BlcmEiLChWPVAucmVwbGFjZSgiT3BlcmEgTW9iaSIsIiIpLm1hdGNoKC9PcGVyYSAoW15cc10qKS8pKSYmVlsxXSYmKEoub3BlcmE9SShWWzFdKSkpLFY9UC5tYXRjaCgvT3BlcmEgTWluaVteO10qLykpSi5tb2JpbGU9VlswXX1lbHNlIGlmKChWPVAubWF0Y2goL01TSUUgKFteO10qKXxUcmlkZW50Lio7IHJ2OihbMC05Ll0rKS8pKSYmKFZbMV18fFZbMl0pKUouaWU9SShWWzFdfHxWWzJdKTtlbHNlIGlmKFY9UC5tYXRjaCgvR2Vja29cLyhbXlxzXSopLykpSi5nZWNrbz0xLChWPVAubWF0Y2goL3J2OihbXlxzXCldKikvKSkmJgpWWzFdJiYoSi5nZWNrbz1JKFZbMV0pLC9Nb2JpbGV8VGFibGV0Ly50ZXN0KFApJiYoSi5tb2JpbGU9ImZmb3MiKSl9IU18fCFEfHxKLmNocm9tZSYmNj5KLmNocm9tZXx8KEoudG91Y2hFbmFibGVkPSJvbnRvdWNoc3RhcnQiaW4gTXx8Im1zTWF4VG91Y2hQb2ludHMiaW4gRCYmMDxELm1zTWF4VG91Y2hQb2ludHMpO0J8fCgib2JqZWN0Ij09PXR5cGVvZiBwcm9jZXNzJiZwcm9jZXNzLnZlcnNpb25zJiZwcm9jZXNzLnZlcnNpb25zLm5vZGUmJihKLm9zPXByb2Nlc3MucGxhdGZvcm0sSi5ub2RlanM9SShwcm9jZXNzLnZlcnNpb25zLm5vZGUpKSxZVUkuRW52LlVBPUopO3JldHVybiBKfTthLlVBPVlVSS5FbnYuVUF8fFlVSS5FbnYucGFyc2VVQSgpO2EuVUEuY29tcGFyZVZlcnNpb25zPWZ1bmN0aW9uKEIsSSl7dmFyIE0sRCxKLFAsVixZO2lmKEI9PT1JKXJldHVybiAwO0Q9KEIrIiIpLnNwbGl0KCIuIik7UD0oSSsiIikuc3BsaXQoIi4iKTtWPTA7Zm9yKFk9TWF0aC5tYXgoRC5sZW5ndGgsClAubGVuZ3RoKTtWPFk7KytWKXtNPXBhcnNlSW50KERbVl0sMTApO0o9cGFyc2VJbnQoUFtWXSwxMCk7aXNOYU4oTSkmJihNPTApO2lzTmFOKEopJiYoSj0wKTtpZihNPEopcmV0dXJuLTE7aWYoTT5KKXJldHVybiAxfXJldHVybiAwfTtZVUkuRW52LmFsaWFzZXM9e2FuaW06ImFuaW0tYmFzZSBhbmltLWNvbG9yIGFuaW0tY3VydmUgYW5pbS1lYXNpbmcgYW5pbS1ub2RlLXBsdWdpbiBhbmltLXNjcm9sbCBhbmltLXh5Ii5zcGxpdCgiICIpLCJhbmltLXNoYXBlLXRyYW5zZm9ybSI6WyJhbmltLXNoYXBlIl0sYXBwOiJhcHAtYmFzZSBhcHAtY29udGVudCBhcHAtdHJhbnNpdGlvbnMgbGF6eS1tb2RlbC1saXN0IG1vZGVsIG1vZGVsLWxpc3QgbW9kZWwtc3luYy1yZXN0IG1vZGVsLXN5bmMtbG9jYWwgcm91dGVyIHZpZXcgdmlldy1ub2RlLW1hcCIuc3BsaXQoIiAiKSxhdHRyaWJ1dGU6WyJhdHRyaWJ1dGUtYmFzZSIsImF0dHJpYnV0ZS1jb21wbGV4Il0sImF0dHJpYnV0ZS1ldmVudHMiOlsiYXR0cmlidXRlLW9ic2VydmFibGUiXSwKYXV0b2NvbXBsZXRlOlsiYXV0b2NvbXBsZXRlLWJhc2UiLCJhdXRvY29tcGxldGUtc291cmNlcyIsImF1dG9jb21wbGV0ZS1saXN0IiwiYXV0b2NvbXBsZXRlLXBsdWdpbiJdLGF4ZXM6WyJheGlzLW51bWVyaWMiLCJheGlzLWNhdGVnb3J5IiwiYXhpcy10aW1lIiwiYXhpcy1zdGFja2VkIl0sImF4ZXMtYmFzZSI6WyJheGlzLW51bWVyaWMtYmFzZSIsImF4aXMtY2F0ZWdvcnktYmFzZSIsImF4aXMtdGltZS1iYXNlIiwiYXhpcy1zdGFja2VkLWJhc2UiXSxiYXNlOlsiYmFzZS1iYXNlIiwiYmFzZS1wbHVnaW5ob3N0IiwiYmFzZS1idWlsZCJdLGNhY2hlOlsiY2FjaGUtYmFzZSIsImNhY2hlLW9mZmxpbmUiLCJjYWNoZS1wbHVnaW4iXSxjaGFydHM6WyJjaGFydHMtYmFzZSJdLGNvbGxlY3Rpb246WyJhcnJheS1leHRyYXMiLCJhcnJheWxpc3QiLCJhcnJheWxpc3QtYWRkIiwiYXJyYXlsaXN0LWZpbHRlciIsImFycmF5LWludm9rZSJdLGNvbG9yOlsiY29sb3ItYmFzZSIsImNvbG9yLWhzbCIsCiJjb2xvci1oYXJtb255Il0sY29udHJvbGxlcjpbInJvdXRlciJdLGRhdGFzY2hlbWE6WyJkYXRhc2NoZW1hLWJhc2UiLCJkYXRhc2NoZW1hLWpzb24iLCJkYXRhc2NoZW1hLXhtbCIsImRhdGFzY2hlbWEtYXJyYXkiLCJkYXRhc2NoZW1hLXRleHQiXSxkYXRhc291cmNlOiJkYXRhc291cmNlLWxvY2FsIGRhdGFzb3VyY2UtaW8gZGF0YXNvdXJjZS1nZXQgZGF0YXNvdXJjZS1mdW5jdGlvbiBkYXRhc291cmNlLWNhY2hlIGRhdGFzb3VyY2UtanNvbnNjaGVtYSBkYXRhc291cmNlLXhtbHNjaGVtYSBkYXRhc291cmNlLWFycmF5c2NoZW1hIGRhdGFzb3VyY2UtdGV4dHNjaGVtYSBkYXRhc291cmNlLXBvbGxpbmciLnNwbGl0KCIgIiksZGF0YXRhYmxlOiJkYXRhdGFibGUtY29yZSBkYXRhdGFibGUtdGFibGUgZGF0YXRhYmxlLWhlYWQgZGF0YXRhYmxlLWJvZHkgZGF0YXRhYmxlLWJhc2UgZGF0YXRhYmxlLWNvbHVtbi13aWR0aHMgZGF0YXRhYmxlLW1lc3NhZ2UgZGF0YXRhYmxlLW11dGFibGUgZGF0YXRhYmxlLXNvcnQgZGF0YXRhYmxlLWRhdGFzb3VyY2UiLnNwbGl0KCIgIiksCmRhdGF0eXBlOlsiZGF0YXR5cGUtZGF0ZSIsImRhdGF0eXBlLW51bWJlciIsImRhdGF0eXBlLXhtbCJdLCJkYXRhdHlwZS1kYXRlIjpbImRhdGF0eXBlLWRhdGUtcGFyc2UiLCJkYXRhdHlwZS1kYXRlLWZvcm1hdCIsImRhdGF0eXBlLWRhdGUtbWF0aCJdLCJkYXRhdHlwZS1udW1iZXIiOlsiZGF0YXR5cGUtbnVtYmVyLXBhcnNlIiwiZGF0YXR5cGUtbnVtYmVyLWZvcm1hdCJdLCJkYXRhdHlwZS14bWwiOlsiZGF0YXR5cGUteG1sLXBhcnNlIiwiZGF0YXR5cGUteG1sLWZvcm1hdCJdLGRkOiJkZC1kZG0tYmFzZSBkZC1kZG0gZGQtZGRtLWRyb3AgZGQtZHJhZyBkZC1wcm94eSBkZC1jb25zdHJhaW4gZGQtZHJvcCBkZC1zY3JvbGwgZGQtZGVsZWdhdGUiLnNwbGl0KCIgIiksZG9tOlsiZG9tLWJhc2UiLCJkb20tc2NyZWVuIiwiZG9tLXN0eWxlIiwic2VsZWN0b3ItbmF0aXZlIiwic2VsZWN0b3IiXSxlZGl0b3I6ImZyYW1lIGVkaXRvci1zZWxlY3Rpb24gZXhlYy1jb21tYW5kIGVkaXRvci1iYXNlIGVkaXRvci1wYXJhIGVkaXRvci1iciBlZGl0b3ItYmlkaSBlZGl0b3ItdGFiIGNyZWF0ZWxpbmstYmFzZSIuc3BsaXQoIiAiKSwKZXZlbnQ6ImV2ZW50LWJhc2UgZXZlbnQtZGVsZWdhdGUgZXZlbnQtc3ludGhldGljIGV2ZW50LW1vdXNld2hlZWwgZXZlbnQtbW91c2VlbnRlciBldmVudC1rZXkgZXZlbnQtZm9jdXMgZXZlbnQtcmVzaXplIGV2ZW50LWhvdmVyIGV2ZW50LW91dHNpZGUgZXZlbnQtdG91Y2ggZXZlbnQtbW92ZSBldmVudC1mbGljayBldmVudC12YWx1ZWNoYW5nZSBldmVudC10YXAiLnNwbGl0KCIgIiksImV2ZW50LWN1c3RvbSI6WyJldmVudC1jdXN0b20tYmFzZSIsImV2ZW50LWN1c3RvbS1jb21wbGV4Il0sImV2ZW50LWdlc3R1cmVzIjpbImV2ZW50LWZsaWNrIiwiZXZlbnQtbW92ZSJdLGhhbmRsZWJhcnM6WyJoYW5kbGViYXJzLWNvbXBpbGVyIl0saGlnaGxpZ2h0OlsiaGlnaGxpZ2h0LWJhc2UiLCJoaWdobGlnaHQtYWNjZW50Zm9sZCJdLGhpc3Rvcnk6WyJoaXN0b3J5LWJhc2UiLCJoaXN0b3J5LWhhc2giLCJoaXN0b3J5LWh0bWw1Il0saW86WyJpby1iYXNlIiwiaW8teGRyIiwiaW8tZm9ybSIsCiJpby11cGxvYWQtaWZyYW1lIiwiaW8tcXVldWUiXSxqc29uOlsianNvbi1wYXJzZSIsImpzb24tc3RyaW5naWZ5Il0sbG9hZGVyOlsibG9hZGVyLWJhc2UiLCJsb2FkZXItcm9sbHVwIiwibG9hZGVyLXl1aTMiXSwibG9hZGVyLXBhdGhvZ2VuLWVuY29kZXIiOlsibG9hZGVyLWJhc2UiLCJsb2FkZXItcm9sbHVwIiwibG9hZGVyLXl1aTMiLCJsb2FkZXItcGF0aG9nZW4tY29tYm9oYW5kbGVyIl0sbm9kZTpbIm5vZGUtYmFzZSIsIm5vZGUtZXZlbnQtZGVsZWdhdGUiLCJub2RlLXBsdWdpbmhvc3QiLCJub2RlLXNjcmVlbiIsIm5vZGUtc3R5bGUiXSxwbHVnaW5ob3N0OlsicGx1Z2luaG9zdC1iYXNlIiwicGx1Z2luaG9zdC1jb25maWciXSxxdWVyeXN0cmluZzpbInF1ZXJ5c3RyaW5nLXBhcnNlIiwicXVlcnlzdHJpbmctc3RyaW5naWZ5Il0scmVjb3Jkc2V0OlsicmVjb3Jkc2V0LWJhc2UiLCJyZWNvcmRzZXQtc29ydCIsInJlY29yZHNldC1maWx0ZXIiLCJyZWNvcmRzZXQtaW5kZXhlciJdLApyZXNpemU6WyJyZXNpemUtYmFzZSIsInJlc2l6ZS1wcm94eSIsInJlc2l6ZS1jb25zdHJhaW4iXSxzbGlkZXI6WyJzbGlkZXItYmFzZSIsInNsaWRlci12YWx1ZS1yYW5nZSIsImNsaWNrYWJsZS1yYWlsIiwicmFuZ2Utc2xpZGVyIl0sdGVtcGxhdGU6WyJ0ZW1wbGF0ZS1iYXNlIiwidGVtcGxhdGUtbWljcm8iXSx0ZXh0OlsidGV4dC1hY2NlbnRmb2xkIiwidGV4dC13b3JkYnJlYWsiXSx3aWRnZXQ6WyJ3aWRnZXQtYmFzZSIsIndpZGdldC1odG1scGFyc2VyIiwid2lkZ2V0LXNraW4iLCJ3aWRnZXQtdWlldmVudHMiXX19LCJwYXRjaGVkLXYzLjE4LjEiLHt1c2U6Inl1aS1iYXNlIGdldCBmZWF0dXJlcyBpbnRsLWJhc2UgeXVpLWxvZyB5dWktbGF0ZXIgbG9hZGVyLWJhc2UgbG9hZGVyLXJvbGx1cCBsb2FkZXIteXVpMyIuc3BsaXQoIiAiKX0pOwpZVUkuYWRkKCJnZXQiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5MYW5nLHQsZixkO2EuR2V0PWY9e2Nzc09wdGlvbnM6e2F0dHJpYnV0ZXM6e3JlbDoic3R5bGVzaGVldCJ9LGRvYzphLmNvbmZpZy5saW5rRG9jfHxhLmNvbmZpZy5kb2MscG9sbEludGVydmFsOjUwfSxqc09wdGlvbnM6e2F1dG9wdXJnZTohMCxkb2M6YS5jb25maWcuc2NyaXB0RG9jfHxhLmNvbmZpZy5kb2N9LG9wdGlvbnM6e2F0dHJpYnV0ZXM6e2NoYXJzZXQ6InV0Zi04In0scHVyZ2V0aHJlc2hvbGQ6MjB9LFJFR0VYX0NTUzovXC5jc3MoPzpbPztdLiopPyQvaSxSRUdFWF9KUzovXC5qcyg/Ols/O10uKik/JC9pLF9pbnNlcnRDYWNoZTp7fSxfcGVuZGluZzpudWxsLF9wdXJnZU5vZGVzOltdLF9xdWV1ZTpbXSxhYm9ydDpmdW5jdGlvbihjKXt2YXIgYixnLGUsaztpZighYy5hYm9ydClpZihnPWMsYj10aGlzLl9wZW5kaW5nLGM9bnVsbCxiJiZiLnRyYW5zYWN0aW9uLmlkPT09ZyljPWIudHJhbnNhY3Rpb24sdGhpcy5fcGVuZGluZz0KbnVsbDtlbHNlIGZvcihiPTAsaz10aGlzLl9xdWV1ZS5sZW5ndGg7YjxrOysrYilpZihlPXRoaXMuX3F1ZXVlW2JdLnRyYW5zYWN0aW9uLGUuaWQ9PT1nKXtjPWU7dGhpcy5fcXVldWUuc3BsaWNlKGIsMSk7YnJlYWt9YyYmYy5hYm9ydCgpfSxjc3M6ZnVuY3Rpb24oYyxiLGcpe3JldHVybiB0aGlzLl9sb2FkKCJjc3MiLGMsYixnKX0sanM6ZnVuY3Rpb24oYyxiLGcpe3JldHVybiB0aGlzLl9sb2FkKCJqcyIsYyxiLGcpfSxsb2FkOmZ1bmN0aW9uKGMsYixnKXtyZXR1cm4gdGhpcy5fbG9hZChudWxsLGMsYixnKX0sX2F1dG9QdXJnZTpmdW5jdGlvbihjKXtjJiZ0aGlzLl9wdXJnZU5vZGVzLmxlbmd0aD49YyYmdGhpcy5fcHVyZ2UodGhpcy5fcHVyZ2VOb2Rlcyl9LF9nZXRFbnY6ZnVuY3Rpb24oKXt2YXIgYz1hLmNvbmZpZy5kb2MsYj1hLlVBO3JldHVybiB0aGlzLl9lbnY9e2FzeW5jOmMmJiEwPT09Yy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKS5hc3luY3x8MTA8PWIuaWUsY3NzRmFpbDo5PD0KYi5nZWNrb3x8MDw9Yi5jb21wYXJlVmVyc2lvbnMoYi53ZWJraXQsNTM1LjI0KSxjc3NMb2FkOighYi5nZWNrbyYmIWIud2Via2l0fHw5PD1iLmdlY2tvfHwwPD1iLmNvbXBhcmVWZXJzaW9ucyhiLndlYmtpdCw1MzUuMjQpKSYmIShiLmNocm9tZSYmMTg+PWIuY2hyb21lKSxwcmVzZXJ2ZXNTY3JpcHRPcmRlcjohIShiLmdlY2tvfHxiLm9wZXJhfHxiLmllJiYxMDw9Yi5pZSl9fSxfZ2V0VHJhbnNhY3Rpb246ZnVuY3Rpb24oYyxiKXt2YXIgZz1bXSxlLGssbSxwO3EuaXNBcnJheShjKXx8KGM9W2NdKTtiPWEubWVyZ2UodGhpcy5vcHRpb25zLGIpO2IuYXR0cmlidXRlcz1hLm1lcmdlKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzLGIuYXR0cmlidXRlcyk7ZT0wO2ZvcihrPWMubGVuZ3RoO2U8azsrK2Upe3A9Y1tlXTttPXthdHRyaWJ1dGVzOnt9fTtpZigic3RyaW5nIj09PXR5cGVvZiBwKW0udXJsPXA7ZWxzZSBpZihwLnVybClhLm1peChtLHAsITEsbnVsbCwwLCEwKSxwPXAudXJsO2Vsc2UgY29udGludWU7CmEubWl4KG0sYiwhMSxudWxsLDAsITApO20udHlwZXx8KHRoaXMuUkVHRVhfQ1NTLnRlc3QocCk/bS50eXBlPSJjc3MiOih0aGlzLlJFR0VYX0pTLnRlc3QocCksbS50eXBlPSJqcyIpKTthLm1peChtLCJqcyI9PT1tLnR5cGU/dGhpcy5qc09wdGlvbnM6dGhpcy5jc3NPcHRpb25zLCExLG51bGwsMCwhMCk7bS5hdHRyaWJ1dGVzLmlkfHwobS5hdHRyaWJ1dGVzLmlkPWEuZ3VpZCgpKTttLndpbj9tLmRvYz1tLndpbi5kb2N1bWVudDptLndpbj1tLmRvYy5kZWZhdWx0Vmlld3x8bS5kb2MucGFyZW50V2luZG93O20uY2hhcnNldCYmKG0uYXR0cmlidXRlcy5jaGFyc2V0PW0uY2hhcnNldCk7Zy5wdXNoKG0pfXJldHVybiBuZXcgZChnLGIpfSxfbG9hZDpmdW5jdGlvbihjLGIsZyxlKXsiZnVuY3Rpb24iPT09dHlwZW9mIGcmJihlPWcsZz17fSk7Z3x8KGc9e30pO2cudHlwZT1jO2cuX29uRmluaXNoPWYuX29uVHJhbnNhY3Rpb25GaW5pc2g7dGhpcy5fZW52fHx0aGlzLl9nZXRFbnYoKTtjPQp0aGlzLl9nZXRUcmFuc2FjdGlvbihiLGcpO3RoaXMuX3F1ZXVlLnB1c2goe2NhbGxiYWNrOmUsdHJhbnNhY3Rpb246Y30pO3RoaXMuX25leHQoKTtyZXR1cm4gY30sX29uVHJhbnNhY3Rpb25GaW5pc2g6ZnVuY3Rpb24oKXtmLl9wZW5kaW5nPW51bGw7Zi5fbmV4dCgpfSxfbmV4dDpmdW5jdGlvbigpe3ZhciBjOyF0aGlzLl9wZW5kaW5nJiYoYz10aGlzLl9xdWV1ZS5zaGlmdCgpKSYmKHRoaXMuX3BlbmRpbmc9YyxjLnRyYW5zYWN0aW9uLmV4ZWN1dGUoYy5jYWxsYmFjaykpfSxfcHVyZ2U6ZnVuY3Rpb24oYyl7Zm9yKHZhciBiPXRoaXMuX3B1cmdlTm9kZXMsZz1jIT09YixlO2U9Yy5wb3AoKTspZS5feXVpZ2V0X2ZpbmlzaGVkJiYoZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksZyYmKGU9YS5BcnJheS5pbmRleE9mKGIsZSksLTE8ZSYmYi5zcGxpY2UoZSwxKSkpfX07Zi5zY3JpcHQ9Zi5qcztmLlRyYW5zYWN0aW9uPWQ9ZnVuY3Rpb24oYyxiKXt0aGlzLmlkPQpkLl9sYXN0SWQrPTE7dGhpcy5kYXRhPWIuZGF0YTt0aGlzLmVycm9ycz1bXTt0aGlzLm5vZGVzPVtdO3RoaXMub3B0aW9ucz1iO3RoaXMucmVxdWVzdHM9Yzt0aGlzLl9jYWxsYmFja3M9W107dGhpcy5fcXVldWU9W107dGhpcy5fcmVxc1dhaXRpbmc9MDt0aGlzLnRJZD10aGlzLmlkO3RoaXMud2luPWIud2lufHxhLmNvbmZpZy53aW59O2QuX2xhc3RJZD0wO2QucHJvdG90eXBlPXtfc3RhdGU6Im5ldyIsYWJvcnQ6ZnVuY3Rpb24oYyl7dGhpcy5fcGVuZGluZ0NTUz10aGlzLl9wZW5kaW5nPW51bGw7dGhpcy5fcG9sbFRpbWVyPWNsZWFyVGltZW91dCh0aGlzLl9wb2xsVGltZXIpO3RoaXMuX3F1ZXVlPVtdO3RoaXMuX3JlcXNXYWl0aW5nPTA7dGhpcy5lcnJvcnMucHVzaCh7ZXJyb3I6Y3x8IkFib3J0ZWQifSk7dGhpcy5fZmluaXNoKCl9LGV4ZWN1dGU6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcyxnPWIucmVxdWVzdHMsZT1iLl9zdGF0ZSxrLG07aWYoImRvbmUiPT09ZSljJiZjKGIuZXJyb3JzLmxlbmd0aD8KYi5lcnJvcnM6bnVsbCxiKTtlbHNlIGlmKGMmJmIuX2NhbGxiYWNrcy5wdXNoKGMpLCJleGVjdXRpbmciIT09ZSl7Yi5fc3RhdGU9ImV4ZWN1dGluZyI7Yi5fcXVldWU9az1bXTtiLm9wdGlvbnMudGltZW91dCYmKGIuX3RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2IuYWJvcnQoIlRpbWVvdXQiKX0sYi5vcHRpb25zLnRpbWVvdXQpKTtiLl9yZXFzV2FpdGluZz1nLmxlbmd0aDtjPTA7Zm9yKGU9Zy5sZW5ndGg7YzxlOysrYyltPWdbY10sbS5hc3luY3x8ImNzcyI9PT1tLnR5cGU/Yi5faW5zZXJ0KG0pOmsucHVzaChtKTtiLl9uZXh0KCl9fSxwdXJnZTpmdW5jdGlvbigpe2YuX3B1cmdlKHRoaXMubm9kZXMpfSxfY3JlYXRlTm9kZTpmdW5jdGlvbihjLGIsZyl7Yz1nLmNyZWF0ZUVsZW1lbnQoYyk7dmFyIGU7dHx8KGc9Zy5jcmVhdGVFbGVtZW50KCJkaXYiKSxnLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJhIiksdD0iYSI9PT1nLmNsYXNzTmFtZT97fTp7ImZvciI6Imh0bWxGb3IiLAoiY2xhc3MiOiJjbGFzc05hbWUifSk7Zm9yKGUgaW4gYiliLmhhc093blByb3BlcnR5KGUpJiZjLnNldEF0dHJpYnV0ZSh0W2VdfHxlLGJbZV0pO3JldHVybiBjfSxfZmluaXNoOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5lcnJvcnMubGVuZ3RoP3RoaXMuZXJyb3JzOm51bGwsYj10aGlzLm9wdGlvbnMsZz1iLmNvbnRleHR8fHRoaXMsZSxrO2lmKCJkb25lIiE9PXRoaXMuX3N0YXRlKXt0aGlzLl9zdGF0ZT0iZG9uZSI7ZT0wO2ZvcihrPXRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7ZTxrOysrZSl0aGlzLl9jYWxsYmFja3NbZV0uY2FsbChnLGMsdGhpcyk7ZT10aGlzLl9nZXRFdmVudERhdGEoKTtjPyhiLm9uVGltZW91dCYmIlRpbWVvdXQiPT09Y1tjLmxlbmd0aC0xXS5lcnJvciYmYi5vblRpbWVvdXQuY2FsbChnLGUpLGIub25GYWlsdXJlJiZiLm9uRmFpbHVyZS5jYWxsKGcsZSkpOmIub25TdWNjZXNzJiZiLm9uU3VjY2Vzcy5jYWxsKGcsZSk7Yi5vbkVuZCYmYi5vbkVuZC5jYWxsKGcsZSk7CmIuX29uRmluaXNoJiZiLl9vbkZpbmlzaCgpfX0sX2dldEV2ZW50RGF0YTpmdW5jdGlvbihjKXtyZXR1cm4gYz9hLm1lcmdlKHRoaXMse2Fib3J0OnRoaXMuYWJvcnQscHVyZ2U6dGhpcy5wdXJnZSxyZXF1ZXN0OmMsdXJsOmMudXJsLHdpbjpjLndpbn0pOnRoaXN9LF9nZXRJbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYyl7dmFyIGI9Yy5kb2M7Yz1jLmluc2VydEJlZm9yZTt2YXIgZyxlO2lmKGMpcmV0dXJuInN0cmluZyI9PT10eXBlb2YgYz9iLmdldEVsZW1lbnRCeUlkKGMpOmM7Zz1mLl9pbnNlcnRDYWNoZTtlPWEuc3RhbXAoYik7cmV0dXJuKGM9Z1tlXSk/YzooYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJiYXNlIilbMF0pP2dbZV09YzooYz1iLmhlYWR8fGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSk/KGMuYXBwZW5kQ2hpbGQoYi5jcmVhdGVUZXh0Tm9kZSgiIikpLGdbZV09Yy5sYXN0Q2hpbGQpOmdbZV09Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF19LApfaW5zZXJ0OmZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXtzLl9wcm9ncmVzcygiRmFpbGVkIHRvIGxvYWQgIitjLnVybCxjKX1mdW5jdGlvbiBnKCl7aCYmY2xlYXJUaW1lb3V0KGgpO3MuX3Byb2dyZXNzKG51bGwsYyl9dmFyIGU9Zi5fZW52LGs9dGhpcy5fZ2V0SW5zZXJ0QmVmb3JlKGMpLG09ImpzIj09PWMudHlwZSxwPWMubm9kZSxzPXRoaXMsbD1hLlVBLGgsdTtwfHwodT1tPyJzY3JpcHQiOiFlLmNzc0xvYWQmJmwuZ2Vja28/InN0eWxlIjoibGluayIscD1jLm5vZGU9dGhpcy5fY3JlYXRlTm9kZSh1LGMuYXR0cmlidXRlcyxjLmRvYykpO20/KHAuc2V0QXR0cmlidXRlKCJzcmMiLGMudXJsKSxjLmFzeW5jP3AuYXN5bmM9ITA6KGUuYXN5bmMmJihwLmFzeW5jPSExKSxlLnByZXNlcnZlc1NjcmlwdE9yZGVyfHwodGhpcy5fcGVuZGluZz1jKSkpOiFlLmNzc0xvYWQmJmwuZ2Vja28/cC5pbm5lckhUTUw9KGMuYXR0cmlidXRlcy5jaGFyc2V0PydAY2hhcnNldCAiJytjLmF0dHJpYnV0ZXMuY2hhcnNldCsKJyI7JzoiIikrJ0BpbXBvcnQgIicrYy51cmwrJyI7JzpwLnNldEF0dHJpYnV0ZSgiaHJlZiIsYy51cmwpO20mJmwuaWUmJig5PmwuaWV8fGRvY3VtZW50LmRvY3VtZW50TW9kZSYmOT5kb2N1bWVudC5kb2N1bWVudE1vZGUpP3Aub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7L2xvYWRlZHxjb21wbGV0ZS8udGVzdChwLnJlYWR5U3RhdGUpJiYocC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxnKCkpfTptfHxlLmNzc0xvYWQ/KDEwPD1sLmllPyhwLm9uZXJyb3I9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGIsMCl9LHAub25sb2FkPWZ1bmN0aW9uKCl7c2V0VGltZW91dChnLDApfSk6KHAub25lcnJvcj1iLHAub25sb2FkPWcpLGUuY3NzRmFpbHx8bXx8KGg9c2V0VGltZW91dChiLGMudGltZW91dHx8M0UzKSkpOnRoaXMuX3BvbGwoYyk7dGhpcy5ub2Rlcy5wdXNoKHApO2sucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocCxrKX0sX25leHQ6ZnVuY3Rpb24oKXt0aGlzLl9wZW5kaW5nfHwodGhpcy5fcXVldWUubGVuZ3RoPwp0aGlzLl9pbnNlcnQodGhpcy5fcXVldWUuc2hpZnQoKSk6dGhpcy5fcmVxc1dhaXRpbmd8fHRoaXMuX2ZpbmlzaCgpKX0sX3BvbGw6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcyxnPWIuX3BlbmRpbmdDU1MsZT1hLlVBLndlYmtpdCxrLG0scCxzO2lmKGMmJihnfHwoZz1iLl9wZW5kaW5nQ1NTPVtdKSxnLnB1c2goYyksYi5fcG9sbFRpbWVyKSlyZXR1cm47Yi5fcG9sbFRpbWVyPW51bGw7Zm9yKGM9MDtjPGcubGVuZ3RoOysrYylpZihwPWdbY10sZSlmb3Iocz1wLmRvYy5zdHlsZVNoZWV0cyxrPXMubGVuZ3RoLG09cC5ub2RlLmhyZWY7MDw9LS1rOyl7aWYoc1trXS5ocmVmPT09bSl7Zy5zcGxpY2UoYywxKTtjLT0xO2IuX3Byb2dyZXNzKG51bGwscCk7YnJlYWt9fWVsc2UgdHJ5e2cuc3BsaWNlKGMsMSksYy09MSxiLl9wcm9ncmVzcyhudWxsLHApfWNhdGNoKGwpe31nLmxlbmd0aCYmKGIuX3BvbGxUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5fcG9sbC5jYWxsKGIpfSxiLm9wdGlvbnMucG9sbEludGVydmFsKSl9LApfcHJvZ3Jlc3M6ZnVuY3Rpb24oYyxiKXt2YXIgZz10aGlzLm9wdGlvbnM7YyYmKGIuZXJyb3I9Yyx0aGlzLmVycm9ycy5wdXNoKHtlcnJvcjpjLHJlcXVlc3Q6Yn0pKTtiLm5vZGUuX3l1aWdldF9maW5pc2hlZD1iLmZpbmlzaGVkPSEwO2cub25Qcm9ncmVzcyYmZy5vblByb2dyZXNzLmNhbGwoZy5jb250ZXh0fHx0aGlzLHRoaXMuX2dldEV2ZW50RGF0YShiKSk7Yi5hdXRvcHVyZ2UmJihmLl9hdXRvUHVyZ2UodGhpcy5vcHRpb25zLnB1cmdldGhyZXNob2xkKSxmLl9wdXJnZU5vZGVzLnB1c2goYi5ub2RlKSk7dGhpcy5fcGVuZGluZz09PWImJih0aGlzLl9wZW5kaW5nPW51bGwpO3RoaXMuX3JlcXNXYWl0aW5nLT0xO3RoaXMuX25leHQoKX19fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoImZlYXR1cmVzIixmdW5jdGlvbihhLEUpe3ZhciBxPXt9O2EubWl4KGEubmFtZXNwYWNlKCJGZWF0dXJlcyIpLHt0ZXN0czpxLGFkZDpmdW5jdGlvbihmLGQsYyl7cVtmXT1xW2ZdfHx7fTtxW2ZdW2RdPWN9LGFsbDpmdW5jdGlvbihmLGQpe3ZhciBjPXFbZl0sYj1bXTtjJiZhLk9iamVjdC5lYWNoKGMsZnVuY3Rpb24oZyxlKXtiLnB1c2goZSsiOiIrKGEuRmVhdHVyZXMudGVzdChmLGUsZCk/MTowKSl9KTtyZXR1cm4gYi5sZW5ndGg/Yi5qb2luKCI7Iik6IiJ9LHRlc3Q6ZnVuY3Rpb24oZixkLGMpe2M9Y3x8W107dmFyIGIsZz0oZj1xW2ZdKSYmZltkXTtnJiYoYj1nLnJlc3VsdCxhLkxhbmcuaXNVbmRlZmluZWQoYikmJigoZD1nLnVhKSYmKGI9YS5VQVtkXSksZj1nLnRlc3QsIWZ8fGQmJiFifHwoYj1mLmFwcGx5KGEsYykpLGcucmVzdWx0PWIpKTtyZXR1cm4gYn19KTt2YXIgdD1hLkZlYXR1cmVzLmFkZDt0KCJsb2FkIiwiMCIse25hbWU6ImFwcC10cmFuc2l0aW9ucy1uYXRpdmUiLAp0ZXN0OmZ1bmN0aW9uKGYpe3JldHVybihmPShmPWYuY29uZmlnLmRvYyk/Zi5kb2N1bWVudEVsZW1lbnQ6bnVsbCkmJmYuc3R5bGU/Ik1velRyYW5zaXRpb24iaW4gZi5zdHlsZXx8IldlYmtpdFRyYW5zaXRpb24iaW4gZi5zdHlsZXx8InRyYW5zaXRpb24iaW4gZi5zdHlsZTohMX0sdHJpZ2dlcjoiYXBwLXRyYW5zaXRpb25zIn0pO3QoImxvYWQiLCIxIix7bmFtZToiYXV0b2NvbXBsZXRlLWxpc3Qta2V5cyIsdGVzdDpmdW5jdGlvbihmKXtyZXR1cm4hKGYuVUEuaW9zfHxmLlVBLmFuZHJvaWQpfSx0cmlnZ2VyOiJhdXRvY29tcGxldGUtbGlzdCJ9KTt0KCJsb2FkIiwiMiIse25hbWU6ImRkLWdlc3R1cmVzIix0cmlnZ2VyOiJkZC1kcmFnIix1YToidG91Y2hFbmFibGVkIn0pO3QoImxvYWQiLCIzIix7bmFtZToiZG9tLXN0eWxlLWllIix0ZXN0OmZ1bmN0aW9uKGYpe3ZhciBkPWYuRmVhdHVyZXMudGVzdCxjPWYuRmVhdHVyZXMuYWRkLGI9Zi5jb25maWcud2luLGc9Zi5jb25maWcuZG9jOwpmPSExO2MoInN0eWxlIiwiY29tcHV0ZWRTdHlsZSIse3Rlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gYiYmImdldENvbXB1dGVkU3R5bGUiaW4gYn19KTtjKCJzdHlsZSIsIm9wYWNpdHkiLHt0ZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIGcmJiJvcGFjaXR5ImluIGcuZG9jdW1lbnRFbGVtZW50LnN0eWxlfX0pO3JldHVybiBmPSFkKCJzdHlsZSIsIm9wYWNpdHkiKSYmIWQoInN0eWxlIiwiY29tcHV0ZWRTdHlsZSIpfSx0cmlnZ2VyOiJkb20tc3R5bGUifSk7dCgibG9hZCIsIjQiLHtuYW1lOiJlZGl0b3ItcGFyYS1pZSIsdHJpZ2dlcjoiZWRpdG9yLXBhcmEiLHVhOiJpZSIsd2hlbjoiaW5zdGVhZCJ9KTt0KCJsb2FkIiwiNSIse25hbWU6ImV2ZW50LWJhc2UtaWUiLHRlc3Q6ZnVuY3Rpb24oZil7cmV0dXJuKGY9Zi5jb25maWcuZG9jJiZmLmNvbmZpZy5kb2MuaW1wbGVtZW50YXRpb24pJiYhZi5oYXNGZWF0dXJlKCJFdmVudHMiLCIyLjAiKX0sdHJpZ2dlcjoibm9kZS1iYXNlIn0pO3QoImxvYWQiLAoiNiIse25hbWU6ImdyYXBoaWNzLWNhbnZhcyIsdGVzdDpmdW5jdGlvbihmKXt2YXIgZD1mLmNvbmZpZy5kb2M7Zj1mLmNvbmZpZy5kZWZhdWx0R3JhcGhpY0VuZ2luZSYmImNhbnZhcyI9PWYuY29uZmlnLmRlZmF1bHRHcmFwaGljRW5naW5lO3ZhciBjPWQmJmQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cmV0dXJuKCEoZCYmZC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0Jhc2ljU3RydWN0dXJlIiwiMS4xIikpfHxmKSYmYyYmYy5nZXRDb250ZXh0JiZjLmdldENvbnRleHQoIjJkIil9LHRyaWdnZXI6ImdyYXBoaWNzIn0pO3QoImxvYWQiLCI3Iix7bmFtZToiZ3JhcGhpY3MtY2FudmFzLWRlZmF1bHQiLHRlc3Q6ZnVuY3Rpb24oZil7dmFyIGQ9Zi5jb25maWcuZG9jO2Y9Zi5jb25maWcuZGVmYXVsdEdyYXBoaWNFbmdpbmUmJiJjYW52YXMiPT1mLmNvbmZpZy5kZWZhdWx0R3JhcGhpY0VuZ2luZTt2YXIgYz1kJiZkLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwpyZXR1cm4oIShkJiZkLmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjQmFzaWNTdHJ1Y3R1cmUiLCIxLjEiKSl8fGYpJiZjJiZjLmdldENvbnRleHQmJmMuZ2V0Q29udGV4dCgiMmQiKX0sdHJpZ2dlcjoiZ3JhcGhpY3MifSk7dCgibG9hZCIsIjgiLHtuYW1lOiJncmFwaGljcy1zdmciLHRlc3Q6ZnVuY3Rpb24oZil7dmFyIGQ9Zi5jb25maWcuZG9jO2Y9IWYuY29uZmlnLmRlZmF1bHRHcmFwaGljRW5naW5lfHwiY2FudmFzIiE9Zi5jb25maWcuZGVmYXVsdEdyYXBoaWNFbmdpbmU7dmFyIGM9ZCYmZC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gZCYmZC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0Jhc2ljU3RydWN0dXJlIiwiMS4xIikmJihmfHwhYyl9LHRyaWdnZXI6ImdyYXBoaWNzIn0pO3QoImxvYWQiLCI5Iix7bmFtZToiZ3JhcGhpY3Mtc3ZnLWRlZmF1bHQiLAp0ZXN0OmZ1bmN0aW9uKGYpe3ZhciBkPWYuY29uZmlnLmRvYztmPSFmLmNvbmZpZy5kZWZhdWx0R3JhcGhpY0VuZ2luZXx8ImNhbnZhcyIhPWYuY29uZmlnLmRlZmF1bHRHcmFwaGljRW5naW5lO3ZhciBjPWQmJmQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cmV0dXJuIGQmJmQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZSIsIjEuMSIpJiYoZnx8IWMpfSx0cmlnZ2VyOiJncmFwaGljcyJ9KTt0KCJsb2FkIiwiMTAiLHtuYW1lOiJncmFwaGljcy12bWwiLHRlc3Q6ZnVuY3Rpb24oZil7dmFyIGQ9KGY9Zi5jb25maWcuZG9jKSYmZi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gZiYmIWYuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZSIsIjEuMSIpJiYoIWR8fCFkLmdldENvbnRleHR8fCFkLmdldENvbnRleHQoIjJkIikpfSwKdHJpZ2dlcjoiZ3JhcGhpY3MifSk7dCgibG9hZCIsIjExIix7bmFtZToiZ3JhcGhpY3Mtdm1sLWRlZmF1bHQiLHRlc3Q6ZnVuY3Rpb24oZil7dmFyIGQ9KGY9Zi5jb25maWcuZG9jKSYmZi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gZiYmIWYuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZSIsIjEuMSIpJiYoIWR8fCFkLmdldENvbnRleHR8fCFkLmdldENvbnRleHQoIjJkIikpfSx0cmlnZ2VyOiJncmFwaGljcyJ9KTt0KCJsb2FkIiwiMTIiLHtuYW1lOiJoaXN0b3J5LWhhc2gtaWUiLHRlc3Q6ZnVuY3Rpb24oZil7dmFyIGQ9Zi5jb25maWcuZG9jJiZmLmNvbmZpZy5kb2MuZG9jdW1lbnRNb2RlO3JldHVybiBmLlVBLmllJiYoISgib25oYXNoY2hhbmdlImluIGYuY29uZmlnLndpbil8fCFkfHw4PmQpfSx0cmlnZ2VyOiJoaXN0b3J5LWhhc2gifSk7dCgibG9hZCIsIjEzIix7bmFtZToiaW8tbm9kZWpzIiwKdHJpZ2dlcjoiaW8tYmFzZSIsdWE6Im5vZGVqcyJ9KTt0KCJsb2FkIiwiMTQiLHtuYW1lOiJqc29uLXBhcnNlLXNoaW0iLHRlc3Q6ZnVuY3Rpb24oZil7ZnVuY3Rpb24gZChnLGUpe3JldHVybiJvayI9PT1nPyEwOmV9dmFyIGM9Zi5jb25maWcuZ2xvYmFsLkpTT04sYz0iW29iamVjdCBKU09OXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykmJmM7aWYoZj0hMSE9PWYuY29uZmlnLnVzZU5hdGl2ZUpTT05QYXJzZSYmISFjKXRyeXtmPWMucGFyc2UoJ3sib2siOmZhbHNlfScsZCkub2t9Y2F0Y2goYil7Zj0hMX1yZXR1cm4hZn0sdHJpZ2dlcjoianNvbi1wYXJzZSJ9KTt0KCJsb2FkIiwiMTUiLHtuYW1lOiJqc29uLXN0cmluZ2lmeS1zaGltIix0ZXN0OmZ1bmN0aW9uKGYpe3ZhciBkPWYuY29uZmlnLmdsb2JhbC5KU09OLGQ9IltvYmplY3QgSlNPTl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGQpJiZkO2lmKGY9ITEhPT1mLmNvbmZpZy51c2VOYXRpdmVKU09OU3RyaW5naWZ5JiYKISFkKXRyeXtmPSIwIj09PWQuc3RyaW5naWZ5KDApfWNhdGNoKGMpe2Y9ITF9cmV0dXJuIWZ9LHRyaWdnZXI6Impzb24tc3RyaW5naWZ5In0pO3QoImxvYWQiLCIxNiIse25hbWU6InNjcm9sbHZpZXctYmFzZS1pZSIsdHJpZ2dlcjoic2Nyb2xsdmlldy1iYXNlIix1YToiaWUifSk7dCgibG9hZCIsIjE3Iix7bmFtZToic2VsZWN0b3ItY3NzMiIsdGVzdDpmdW5jdGlvbihmKXtyZXR1cm4oZj1mLmNvbmZpZy5kb2MpJiYhKCJxdWVyeVNlbGVjdG9yQWxsImluIGYpfSx0cmlnZ2VyOiJzZWxlY3RvciJ9KTt0KCJsb2FkIiwiMTgiLHtuYW1lOiJ0cmFuc2l0aW9uLXRpbWVyIix0ZXN0OmZ1bmN0aW9uKGYpe2Y9KGY9Zi5jb25maWcuZG9jKT9mLmRvY3VtZW50RWxlbWVudDpudWxsO3ZhciBkPSEwO2YmJmYuc3R5bGUmJihkPSEoIk1velRyYW5zaXRpb24iaW4gZi5zdHlsZXx8IldlYmtpdFRyYW5zaXRpb24iaW4gZi5zdHlsZXx8InRyYW5zaXRpb24iaW4gZi5zdHlsZSkpO3JldHVybiBkfSx0cmlnZ2VyOiJ0cmFuc2l0aW9uIn0pOwp0KCJsb2FkIiwiMTkiLHtuYW1lOiJ3aWRnZXQtYmFzZS1pZSIsdHJpZ2dlcjoid2lkZ2V0LWJhc2UiLHVhOiJpZSJ9KTt0KCJsb2FkIiwiMjAiLHtuYW1lOiJ5cWwtanNvbnAiLHRlc3Q6ZnVuY3Rpb24oZil7cmV0dXJuIWYuVUEubm9kZWpzJiYhZi5VQS53aW5qc30sdHJpZ2dlcjoieXFsIn0pO3QoImxvYWQiLCIyMSIse25hbWU6InlxbC1ub2RlanMiLHRyaWdnZXI6InlxbCIsdWE6Im5vZGVqcyJ9KTt0KCJsb2FkIiwiMjIiLHtuYW1lOiJ5cWwtd2luanMiLHRyaWdnZXI6InlxbCIsdWE6IndpbmpzIn0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoImludGwtYmFzZSIsZnVuY3Rpb24oYSxFKXt2YXIgcT0vWywgXS87YS5taXgoYS5uYW1lc3BhY2UoIkludGwiKSx7bG9va3VwQmVzdExhbmc6ZnVuY3Rpb24odCxmKXt2YXIgZCxjLGI7YS5MYW5nLmlzU3RyaW5nKHQpJiYodD10LnNwbGl0KHEpKTtmb3IoZD0wO2Q8dC5sZW5ndGg7ZCs9MSlpZigoYz10W2RdKSYmIioiIT09Yylmb3IoOzA8Yy5sZW5ndGg7KXthOntiPWM7Zm9yKHZhciBnPXZvaWQgMCxnPTA7ZzxmLmxlbmd0aDtnKz0xKWlmKGIudG9Mb3dlckNhc2UoKT09PWZbZ10udG9Mb3dlckNhc2UoKSl7Yj1mW2ddO2JyZWFrIGF9Yj12b2lkIDB9aWYoYilyZXR1cm4gYjtiPWMubGFzdEluZGV4T2YoIi0iKTtpZigwPD1iKWM9Yy5zdWJzdHJpbmcoMCxiKSwyPD1iJiYiLSI9PT1jLmNoYXJBdChiLTIpJiYoYz1jLnN1YnN0cmluZygwLGItMikpO2Vsc2UgYnJlYWt9cmV0dXJuIiJ9fSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInl1aS1iYXNlIl19KTsKWVVJLmFkZCgieXVpLWxvZyIsZnVuY3Rpb24oYSxFKXt2YXIgcT17ZGVidWc6MSxpbmZvOjIsd2Fybjo0LGVycm9yOjh9O2EubG9nPWZ1bmN0aW9uKHQsZixkLGMpe3ZhciBiLGcsZSxrO2s9YS5jb25maWc7dmFyIG09YS5maXJlP2E6WVVJLkVudi5nbG9iYWxFdmVudHM7ay5kZWJ1ZyYmKGQ9ZHx8IiIsInVuZGVmaW5lZCIhPT10eXBlb2YgZCYmKGc9ay5sb2dFeGNsdWRlLGU9ay5sb2dJbmNsdWRlLCFlfHxkIGluIGU/ZSYmZCBpbiBlP2I9IWVbZF06ZyYmZCBpbiBnJiYoYj1nW2RdKTpiPTEsInVuZGVmaW5lZCI9PT10eXBlb2YgZiYmKGY9ImluZm8iKSxhLmNvbmZpZy5sb2dMZXZlbD1hLmNvbmZpZy5sb2dMZXZlbHx8ImRlYnVnIixnPXFbYS5jb25maWcubG9nTGV2ZWwudG9Mb3dlckNhc2UoKV0sZiBpbiBxJiZxW2ZdPGcmJihiPTEpKSxifHwoay51c2VCcm93c2VyQ29uc29sZSYmKGI9ZD9kKyI6ICIrdDp0LGEuTGFuZy5pc0Z1bmN0aW9uKGsubG9nRm4pP2subG9nRm4uY2FsbChhLAp0LGYsZCk6InVuZGVmaW5lZCIhPT10eXBlb2YgY29uc29sZSYmY29uc29sZS5sb2c/KGs9ZiYmY29uc29sZVtmXSYmZiBpbiBxP2Y6ImxvZyIsY29uc29sZVtrXShiKSk6InVuZGVmaW5lZCIhPT10eXBlb2Ygb3BlcmEmJm9wZXJhLnBvc3RFcnJvcihiKSksbSYmIWMmJihtIT09YXx8bS5nZXRFdmVudCgieXVpOmxvZyIpfHxtLnB1Ymxpc2goInl1aTpsb2ciLHticm9hZGNhc3Q6Mn0pLG0uZmlyZSgieXVpOmxvZyIse21zZzp0LGNhdDpmLHNyYzpkfSkpKSk7cmV0dXJuIGF9O2EubWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiBhLmxvZy5hcHBseShhLGFyZ3VtZW50cyl9fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoInl1aS1sYXRlciIsZnVuY3Rpb24oYSxFKXt2YXIgcT1bXTthLmxhdGVyPWZ1bmN0aW9uKHQsZixkLGMsYil7dD10fHwwO2M9YS5MYW5nLmlzVW5kZWZpbmVkKGMpP3E6YS5BcnJheShjKTtmPWZ8fGEuY29uZmlnLndpbnx8YTt2YXIgZz0hMSxlPWYmJmEuTGFuZy5pc1N0cmluZyhkKT9mW2RdOmQ7ZD1mdW5jdGlvbigpe2d8fChlLmFwcGx5P2UuYXBwbHkoZixjfHxxKTplKGNbMF0sY1sxXSxjWzJdLGNbM10pKX07dmFyIGs9Yj9zZXRJbnRlcnZhbChkLHQpOnNldFRpbWVvdXQoZCx0KTtyZXR1cm57aWQ6ayxpbnRlcnZhbDpiLGNhbmNlbDpmdW5jdGlvbigpe2c9ITA7dGhpcy5pbnRlcnZhbD9jbGVhckludGVydmFsKGspOmNsZWFyVGltZW91dChrKX19fTthLkxhbmcubGF0ZXI9YS5sYXRlcn0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsieXVpLWJhc2UiXX0pOwpZVUkuYWRkKCJsb2FkZXItYmFzZSIsZnVuY3Rpb24oYSxFKXsoZnVuY3Rpb24oKXt2YXIgaD1hLnZlcnNpb24sdT1hLkVudi5iYXNlLHc9dSsiY29tYm8/Iix6PXt2ZXJzaW9uOmgscm9vdDpoKyIvIixiYXNlOmEuRW52LmJhc2UsY29tYm9CYXNlOncsc2tpbjp7ZGVmYXVsdFNraW46InNhbSIsYmFzZToiYXNzZXRzL3NraW5zLyIscGF0aDoic2tpbi5jc3MiLGFmdGVyOiJjc3NyZXNldCBjc3Nmb250cyBjc3NncmlkcyBjc3NiYXNlIGNzc3Jlc2V0LWNvbnRleHQgY3NzZm9udHMtY29udGV4dCIuc3BsaXQoIiAiKX0sZ3JvdXBzOnt9LHBhdHRlcm5zOnt9fSxBPXouZ3JvdXBzLEg9ZnVuY3Rpb24oQixJLE0pe0I9IjJpbjMuIisoQnx8IjQiKSsiLyIrKEl8fCIyLjkuMCIpKyIvYnVpbGQvIjtJPU0mJk0uY29tYm9CYXNlP00uY29tYm9CYXNlOnc7QS55dWkyLmJhc2U9KE0mJk0uYmFzZT9NLmJhc2U6dSkrQjtBLnl1aTIucm9vdD1CO0EueXVpMi5jb21ib0Jhc2U9SX0sRj1mdW5jdGlvbihCLApJKXt2YXIgTT0oQnx8ImdhbGxlcnktMjAxNC4wNi4wNC0yMS0zOCIpKyIvYnVpbGQvIixEPUkmJkkuY29tYm9CYXNlP0kuY29tYm9CYXNlOnc7QS5nYWxsZXJ5LmJhc2U9KEkmJkkuYmFzZT9JLmJhc2U6dSkrTTtBLmdhbGxlcnkucm9vdD1NO0EuZ2FsbGVyeS5jb21ib0Jhc2U9RH07QVtoXT17fTtBLmdhbGxlcnk9e2V4dDohMSxjb21iaW5lOiEwLGNvbWJvQmFzZTp3LHVwZGF0ZTpGLHBhdHRlcm5zOnsiZ2FsbGVyeS0iOnt9LCJsYW5nL2dhbGxlcnktIjp7fSwiZ2FsbGVyeWNzcy0iOnt0eXBlOiJjc3MifX19O0EueXVpMj17Y29tYmluZTohMCxleHQ6ITEsY29tYm9CYXNlOncsdXBkYXRlOkgscGF0dGVybnM6eyJ5dWkyLSI6e2NvbmZpZ0ZuOmZ1bmN0aW9uKEIpey8tc2tpbnxyZXNldHxmb250c3xncmlkc3xiYXNlLy50ZXN0KEIubmFtZSkmJihCLnR5cGU9ImNzcyIsQi5wYXRoPUIucGF0aC5yZXBsYWNlKC9cLmpzLywiLmNzcyIpLEIucGF0aD1CLnBhdGgucmVwbGFjZSgvXC95dWkyLXNraW4vLAoiL2Fzc2V0cy9za2lucy9zYW0veXVpMi1za2luIikpfX19fTtGKCk7SCgpO1lVSS5FbnZbaF0mJmEubWl4KHosWVVJLkVudltoXSwhMSxbIm1vZHVsZXMiLCJncm91cHMiLCJza2luIl0sMCwhMCk7WVVJLkVudltoXT16fSkoKTt2YXIgcT17fSx0PVtdLGY9WVVJLkVudixkPWYuX2xvYWRlZCxjPWEudmVyc2lvbixiPWEuT2JqZWN0LGc9Yi5lYWNoLGU9YS5BcnJheSxrPWYuX2xvYWRlclF1ZXVlLG09ZltjXSxwPWEuTGFuZyxzPWYubW9kcyxsPWZ1bmN0aW9uKGgsdSx3LHope2g9aCsiLyIrdTt6fHwoaCs9Ii1taW4iKTtyZXR1cm4gaCsoIi4iKyh3fHwiY3NzIikpfTtZVUkuRW52Ll9jc3NMb2FkZWR8fChZVUkuRW52Ll9jc3NMb2FkZWQ9e30pO2EuRW52Lm1ldGE9bTthLkxvYWRlcj1mdW5jdGlvbihoKXtoPWh8fHt9O3RoaXMuY29udGV4dD1hO2guZG9CZWZvcmVMb2FkZXImJmguZG9CZWZvcmVMb2FkZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuYmFzZT1hLkVudi5tZXRhLmJhc2UrCmEuRW52Lm1ldGEucm9vdDt0aGlzLmNvbWJvQmFzZT1hLkVudi5tZXRhLmNvbWJvQmFzZTt0aGlzLmNvbWJpbmU9aC5iYXNlJiYtMTxoLmJhc2UuaW5kZXhPZih0aGlzLmNvbWJvQmFzZS5zdWJzdHIoMCwyMCkpO3RoaXMuY29tYm9TZXA9Ilx4MjYiO3RoaXMubWF4VVJMTGVuZ3RoPTEwMjQ7dGhpcy5pZ25vcmVSZWdpc3RlcmVkPWguaWdub3JlUmVnaXN0ZXJlZDt0aGlzLnJvb3Q9YS5FbnYubWV0YS5yb290O3RoaXMudGltZW91dD0wO3RoaXMuZm9yY2VNYXA9e307dGhpcy5hbGxvd1JvbGx1cD0hMTt0aGlzLmZpbHRlcnM9e307dGhpcy5yZXF1aXJlZD17fTt0aGlzLnBhdHRlcm5zPXt9O3RoaXMubW9kdWxlSW5mbz17fTt0aGlzLmdyb3Vwcz1hLm1lcmdlKGEuRW52Lm1ldGEuZ3JvdXBzKTt0aGlzLnNraW49YS5tZXJnZShhLkVudi5tZXRhLnNraW4pO3RoaXMuY29uZGl0aW9ucz17fTt0aGlzLmNvbmZpZz1oO3RoaXMuX2ludGVybmFsPSEwO3RoaXMuX3BvcHVsYXRlQ29uZGl0aW9uc0NhY2hlKCk7CnRoaXMubG9hZGVkPWRbY107dGhpcy5hc3luYz0hMDt0aGlzLl9pbnNwZWN0UGFnZSgpO3RoaXMuX2ludGVybmFsPSExO3RoaXMuX2NvbmZpZyhoKTt0aGlzLmZvcmNlTWFwPXRoaXMuZm9yY2U/YS5BcnJheS5oYXNoKHRoaXMuZm9yY2UpOnt9O3RoaXMudGVzdHJlc3VsdHM9bnVsbDthLmNvbmZpZy50ZXN0cyYmKHRoaXMudGVzdHJlc3VsdHM9YS5jb25maWcudGVzdHMpO3RoaXMuc29ydGVkPVtdO3RoaXMuZGlydHk9ITA7dGhpcy5pbnNlcnRlZD17fTt0aGlzLnNraXBwZWQ9e307dGhpcy50ZXN0ZWQ9e307dGhpcy5pZ25vcmVSZWdpc3RlcmVkJiZ0aGlzLl9yZXNldE1vZHVsZXMoKX07YS5Mb2FkZXIucHJvdG90eXBlPXtnZXRNb2R1bGVJbmZvOmZ1bmN0aW9uKGgpe3ZhciB1PXRoaXMubW9kdWxlSW5mb1toXSx3LHo7aWYodSlyZXR1cm4gdTt3PW0ubW9kdWxlczt6PWYuX3JlbmRlcmVkTW9kczt1PXRoaXMuX2ludGVybmFsO3omJnouaGFzT3duUHJvcGVydHkoaCkmJiF0aGlzLmlnbm9yZVJlZ2lzdGVyZWQ/CnRoaXMubW9kdWxlSW5mb1toXT1hLm1lcmdlKHpbaF0pOncuaGFzT3duUHJvcGVydHkoaCkmJih0aGlzLl9pbnRlcm5hbD0hMCwodz10aGlzLmFkZE1vZHVsZSh3W2hdLGgpKSYmImNzcyI9PT13LnR5cGUmJnRoaXMuaXNDU1NMb2FkZWQody5uYW1lLCEwKSYmKHRoaXMubG9hZGVkW3cubmFtZV09ITApLHRoaXMuX2ludGVybmFsPXUpO3JldHVybiB0aGlzLm1vZHVsZUluZm9baF19LF9leHBhbmRBbGlhc2VzOmZ1bmN0aW9uKGgpe3ZhciB1PVtdLHc9WVVJLkVudi5hbGlhc2VzLHosQTtoPWEuQXJyYXkoaCk7Zm9yKHo9MDt6PGgubGVuZ3RoO3orPTEpQT1oW3pdLHUucHVzaC5hcHBseSh1LHdbQV0/d1tBXTpbQV0pO3JldHVybiB1fSxfcG9wdWxhdGVDb25kaXRpb25zQ2FjaGU6ZnVuY3Rpb24oKXt2YXIgaD1tLm1vZHVsZXMsdT1mLl9jb25kaXRpb25zLHcseixBO2lmKHUmJiF0aGlzLmlnbm9yZVJlZ2lzdGVyZWQpZm9yKHcgaW4gdSl1Lmhhc093blByb3BlcnR5KHcpJiYodGhpcy5jb25kaXRpb25zW3ddPQphLm1lcmdlKHVbd10pKTtlbHNle2Zvcih3IGluIGgpaWYoaC5oYXNPd25Qcm9wZXJ0eSh3KSYmaFt3XS5jb25kaXRpb24pZm9yKHo9dGhpcy5fZXhwYW5kQWxpYXNlcyhoW3ddLmNvbmRpdGlvbi50cmlnZ2VyKSx1PTA7dTx6Lmxlbmd0aDt1Kz0xKUE9elt1XSx0aGlzLmNvbmRpdGlvbnNbQV09dGhpcy5jb25kaXRpb25zW0FdfHx7fSx0aGlzLmNvbmRpdGlvbnNbQV1baFt3XS5uYW1lfHx3XT1oW3ddLmNvbmRpdGlvbjtmLl9jb25kaXRpb25zPXRoaXMuY29uZGl0aW9uc319LF9yZXNldE1vZHVsZXM6ZnVuY3Rpb24oKXt2YXIgaCx1LHcseixBO2ZvcihoIGluIHRoaXMubW9kdWxlSW5mbylpZih0aGlzLm1vZHVsZUluZm8uaGFzT3duUHJvcGVydHkoaCkmJnRoaXMubW9kdWxlSW5mb1toXSl7dz10aGlzLm1vZHVsZUluZm9baF07ej13Lm5hbWU7aWYoQT1ZVUkuRW52Lm1vZHNbel0/WVVJLkVudi5tb2RzW3pdLmRldGFpbHM6bnVsbCl0aGlzLm1vZHVsZUluZm9bel0uX3Jlc2V0PSEwLHRoaXMubW9kdWxlSW5mb1t6XS5yZXF1aXJlcz0KQS5yZXF1aXJlc3x8W10sdGhpcy5tb2R1bGVJbmZvW3pdLm9wdGlvbmFsPUEub3B0aW9uYWx8fFtdLHRoaXMubW9kdWxlSW5mb1t6XS5zdXBlcnNlZGVzPUEuc3VwZXJjZWRlc3x8W107aWYody5kZWZhdWx0cylmb3IodSBpbiB3LmRlZmF1bHRzKXcuZGVmYXVsdHMuaGFzT3duUHJvcGVydHkodSkmJndbdV0mJih3W3VdPXcuZGVmYXVsdHNbdV0pO3cubGFuZ0NhY2hlPXZvaWQgMDt3LnNraW5DYWNoZT12b2lkIDA7dy5za2lubmFibGUmJnRoaXMuX2FkZFNraW4odGhpcy5za2luLmRlZmF1bHRTa2luLHcubmFtZSl9fSxSRUdFWF9DU1M6L1wuY3NzKD86Wz87XS4qKT8kL2ksRklMVEVSX0RFRlM6e1JBVzp7c2VhcmNoRXhwOiItbWluXFwuanMiLHJlcGxhY2VTdHI6Ii5qcyJ9LERFQlVHOntzZWFyY2hFeHA6Ii1taW5cXC5qcyIscmVwbGFjZVN0cjoiLWRlYnVnLmpzIn0sQ09WRVJBR0U6e3NlYXJjaEV4cDoiLW1pblxcLmpzIixyZXBsYWNlU3RyOiItY292ZXJhZ2UuanMifX0sX2luc3BlY3RQYWdlOmZ1bmN0aW9uKCl7dmFyIGgsCnUsdyx6LEE7Zm9yKEEgaW4gcylzLmhhc093blByb3BlcnR5KEEpJiYoaD1zW0FdLGguZGV0YWlscyYmKHU9dGhpcy5nZXRNb2R1bGVJbmZvKGgubmFtZSksdz1oLmRldGFpbHMucmVxdWlyZXMsej11JiZ1LnJlcXVpcmVzLHU/IXUuX2luc3BlY3RlZCYmdyYmei5sZW5ndGghPT13Lmxlbmd0aCYmZGVsZXRlIHUuZXhwYW5kZWQ6dT10aGlzLmFkZE1vZHVsZShoLmRldGFpbHMsQSksdS5faW5zcGVjdGVkPSEwKSl9LF9yZXF1aXJlczpmdW5jdGlvbihoLHUpe3ZhciB3LHosQSxIPXRoaXMuZ2V0TW9kdWxlSW5mbyhoKSxGPXRoaXMuZ2V0TW9kdWxlSW5mbyh1KTtpZighSHx8IUYpcmV0dXJuITE7ej1ILmV4cGFuZGVkX21hcDtpZigodz1ILmFmdGVyX21hcCkmJnUgaW4gdylyZXR1cm4hMDtpZigodz1GLmFmdGVyX21hcCkmJmggaW4gdylyZXR1cm4hMTtpZihBPUYuc3VwZXJzZWRlcylmb3Iodz0wO3c8QS5sZW5ndGg7dysrKWlmKHRoaXMuX3JlcXVpcmVzKGgsQVt3XSkpcmV0dXJuITA7aWYoQT0KSC5zdXBlcnNlZGVzKWZvcih3PTA7dzxBLmxlbmd0aDt3KyspaWYodGhpcy5fcmVxdWlyZXModSxBW3ddKSlyZXR1cm4hMTtyZXR1cm4geiYmdSBpbiB6fHxILmV4dCYmImNzcyI9PT1ILnR5cGUmJiFGLmV4dCYmImNzcyI9PT1GLnR5cGU/ITA6ITF9LF9jb25maWc6ZnVuY3Rpb24oaCl7dmFyIHUsdyx6LEEsSCxGLEI9dGhpcyxJPVtdO2lmKGgpZm9yKHUgaW4gaClpZihoLmhhc093blByb3BlcnR5KHUpKWlmKHo9aFt1XSwicmVxdWlyZSI9PT11KUIucmVxdWlyZSh6KTtlbHNlIGlmKCJza2luIj09PXUpInN0cmluZyI9PT10eXBlb2YgeiYmKEIuc2tpbi5kZWZhdWx0U2tpbj1oLnNraW4sej17ZGVmYXVsdFNraW46en0pLGEubWl4KEIuc2tpbix6LCEwKTtlbHNlIGlmKCJncm91cHMiPT09dSlmb3IodyBpbiB6KXtpZih6Lmhhc093blByb3BlcnR5KHcpJiYoRj13LEg9elt3XSxCLmFkZEdyb3VwKEgsRiksSC5hbGlhc2VzKSlmb3IoQSBpbiBILmFsaWFzZXMpSC5hbGlhc2VzLmhhc093blByb3BlcnR5KEEpJiYKQi5hZGRBbGlhcyhILmFsaWFzZXNbQV0sQSl9ZWxzZSBpZigibW9kdWxlcyI9PT11KWZvcih3IGluIHopei5oYXNPd25Qcm9wZXJ0eSh3KSYmQi5hZGRNb2R1bGUoelt3XSx3KTtlbHNlIGlmKCJhbGlhc2VzIj09PXUpZm9yKHcgaW4geil6Lmhhc093blByb3BlcnR5KHcpJiZCLmFkZEFsaWFzKHpbd10sdyk7ZWxzZSJnYWxsZXJ5Ij09PXU/dGhpcy5ncm91cHMuZ2FsbGVyeS51cGRhdGUmJnRoaXMuZ3JvdXBzLmdhbGxlcnkudXBkYXRlKHosaCk6Inl1aTIiPT09dXx8IjJpbjMiPT09dT90aGlzLmdyb3Vwcy55dWkyLnVwZGF0ZSYmdGhpcy5ncm91cHMueXVpMi51cGRhdGUoaFsiMmluMyJdLGgueXVpMixoKTpCW3VdPXo7dT1CLmZpbHRlcjtwLmlzU3RyaW5nKHUpJiYodT11LnRvVXBwZXJDYXNlKCksQi5maWx0ZXJOYW1lPXUsQi5maWx0ZXI9Qi5GSUxURVJfREVGU1t1XSwiREVCVUciPT09dSYmQi5yZXF1aXJlKCJ5dWktbG9nIiwiZHVtcCIpKTtpZihCLmZpbHRlck5hbWUmJkIuY292ZXJhZ2UmJgoiQ09WRVJBR0UiPT09Qi5maWx0ZXJOYW1lJiZwLmlzQXJyYXkoQi5jb3ZlcmFnZSkmJkIuY292ZXJhZ2UubGVuZ3RoKXtmb3IodT0wO3U8Qi5jb3ZlcmFnZS5sZW5ndGg7dSsrKWg9Qi5jb3ZlcmFnZVt1XSwodz1CLmdldE1vZHVsZUluZm8oaCkpJiZ3LnVzZT9JPUkuY29uY2F0KHcudXNlKTpJLnB1c2goaCk7Qi5maWx0ZXJzPUIuZmlsdGVyc3x8e307YS5BcnJheS5lYWNoKEksZnVuY3Rpb24oTSl7Qi5maWx0ZXJzW01dPUIuRklMVEVSX0RFRlMuQ09WRVJBR0V9KTtCLmZpbHRlck5hbWU9IlJBVyI7Qi5maWx0ZXI9Qi5GSUxURVJfREVGU1tCLmZpbHRlck5hbWVdfX0sZm9ybWF0U2tpbjpmdW5jdGlvbihoLHUpe3ZhciB3PSJza2luLSIraDt1JiYodz13KyItIit1KTtyZXR1cm4gd30sX2FkZFNraW46ZnVuY3Rpb24oaCx1LHcpe3ZhciB6LEEsSD10aGlzLnNraW4sRj11JiZ0aGlzLmdldE1vZHVsZUluZm8odSksQj1GJiZGLmV4dDt1JiYoQT10aGlzLmZvcm1hdFNraW4oaCx1KSx0aGlzLmdldE1vZHVsZUluZm8oQSl8fAooej1GLnBrZ3x8dSxoPXtza2luOiEwLG5hbWU6QSxncm91cDpGLmdyb3VwLHR5cGU6ImNzcyIsYWZ0ZXI6SC5hZnRlcixwYXRoOih3fHx6KSsiLyIrSC5iYXNlK2grIi8iK3UrIi5jc3MiLGV4dDpCfSxGLmJhc2UmJihoLmJhc2U9Ri5iYXNlKSxGLmNvbmZpZ0ZuJiYoaC5jb25maWdGbj1GLmNvbmZpZ0ZuKSx0aGlzLmFkZE1vZHVsZShoLEEpKSk7cmV0dXJuIEF9LGFkZEFsaWFzOmZ1bmN0aW9uKGgsdSl7WVVJLkVudi5hbGlhc2VzW3VdPWg7dGhpcy5hZGRNb2R1bGUoe25hbWU6dSx1c2U6aH0pfSxhZGRHcm91cDpmdW5jdGlvbihoLHUpe3ZhciB3PWgubW9kdWxlcyx6PWguZGVmYXVsdEJhc2V8fGEuY29uZmlnLmRlZmF1bHRCYXNlLEE7dT11fHxoLm5hbWU7aC5uYW1lPXU7dGhpcy5ncm91cHNbdV09aDshaC5iYXNlJiZ6JiZoLnJvb3QmJihoLmJhc2U9eitoLnJvb3QpO2lmKGgucGF0dGVybnMpZm9yKEEgaW4gaC5wYXR0ZXJucyloLnBhdHRlcm5zLmhhc093blByb3BlcnR5KEEpJiYKKGgucGF0dGVybnNbQV0uZ3JvdXA9dSx0aGlzLnBhdHRlcm5zW0FdPWgucGF0dGVybnNbQV0pO2lmKHcpZm9yKEEgaW4gdyl3Lmhhc093blByb3BlcnR5KEEpJiYoej13W0FdLCJzdHJpbmciPT09dHlwZW9mIHomJih6PXtuYW1lOkEsZnVsbHBhdGg6en0pLHouZ3JvdXA9dSx0aGlzLmFkZE1vZHVsZSh6LEEpKX0sYWRkTW9kdWxlOmZ1bmN0aW9uKGgsdSl7dT11fHxoLm5hbWU7InN0cmluZyI9PT10eXBlb2YgaCYmKGg9e25hbWU6dSxmdWxscGF0aDpofSk7dmFyIHcseixBLEgsRixCLEksTSxELEosUCxWO3c9dGhpcy5tb2R1bGVJbmZvW3VdO3ZhciBZPXRoaXMuY29uZGl0aW9uczt3JiZ3LnRlbXAmJihoPWEubWVyZ2UodyxoKSk7aC5uYW1lPXU7aWYoIWh8fCFoLm5hbWUpcmV0dXJuIG51bGw7aC50eXBlfHwoaC50eXBlPSJqcyIsKHc9aC5wYXRofHxoLmZ1bGxwYXRoKSYmdGhpcy5SRUdFWF9DU1MudGVzdCh3KSYmKGgudHlwZT0iY3NzIikpO2gucGF0aHx8aC5mdWxscGF0aHx8KGgucGF0aD0KbCh1LHUsaC50eXBlKSk7aC5zdXBlcnNlZGVzPWguc3VwZXJzZWRlc3x8aC51c2U7aC5leHQ9ImV4dCJpbiBoP2guZXh0OnRoaXMuX2ludGVybmFsPyExOiEwO3c9aC5zdWJtb2R1bGVzO3RoaXMubW9kdWxlSW5mb1t1XT1oO2gucmVxdWlyZXM9aC5yZXF1aXJlc3x8W107aWYodGhpcy5yZXF1aXJlcylmb3Ioej0wO3o8dGhpcy5yZXF1aXJlcy5sZW5ndGg7eisrKWgucmVxdWlyZXMucHVzaCh0aGlzLnJlcXVpcmVzW3pdKTtpZihoLmdyb3VwJiZ0aGlzLmdyb3VwcyYmdGhpcy5ncm91cHNbaC5ncm91cF0mJihBPXRoaXMuZ3JvdXBzW2guZ3JvdXBdLEEucmVxdWlyZXMpKWZvcih6PTA7ejxBLnJlcXVpcmVzLmxlbmd0aDt6KyspaC5yZXF1aXJlcy5wdXNoKEEucmVxdWlyZXNbel0pO2guZGVmYXVsdHN8fChoLmRlZmF1bHRzPXtyZXF1aXJlczpoLnJlcXVpcmVzP1tdLmNvbmNhdChoLnJlcXVpcmVzKTpudWxsLHN1cGVyc2VkZXM6aC5zdXBlcnNlZGVzP1tdLmNvbmNhdChoLnN1cGVyc2VkZXMpOgpudWxsLG9wdGlvbmFsOmgub3B0aW9uYWw/W10uY29uY2F0KGgub3B0aW9uYWwpOm51bGx9KTtoLnNraW5uYWJsZSYmaC5leHQmJmgudGVtcCYmKEo9dGhpcy5fYWRkU2tpbih0aGlzLnNraW4uZGVmYXVsdFNraW4sdSksaC5yZXF1aXJlcy51bnNoaWZ0KEopKTtoLnJlcXVpcmVzLmxlbmd0aCYmKGgucmVxdWlyZXM9dGhpcy5maWx0ZXJSZXF1aXJlcyhoLnJlcXVpcmVzKXx8W10pO2lmKCFoLmxhbmdQYWNrJiZoLmxhbmcpZm9yKEo9dGhpcy5nZXRMYW5nUGFja05hbWUoIiIsdSksKEk9dGhpcy5nZXRNb2R1bGVJbmZvKEopKXx8dGhpcy5fYWRkTGFuZ1BhY2sobnVsbCxoLEopLEI9ZShoLmxhbmcpLEQ9MDtEPEIubGVuZ3RoO0QrKylWPUJbRF0sSj10aGlzLmdldExhbmdQYWNrTmFtZShWLHUpLChJPXRoaXMuZ2V0TW9kdWxlSW5mbyhKKSl8fHRoaXMuX2FkZExhbmdQYWNrKFYsaCxKKTtpZih3KXtGPWguc3VwZXJzZWRlc3x8W107QT0wO2Zvcih6IGluIHcpaWYody5oYXNPd25Qcm9wZXJ0eSh6KSl7Qj0Kd1t6XTtCLnBhdGg9Qi5wYXRofHxsKHUseixoLnR5cGUpO0IucGtnPXU7Qi5ncm91cD1oLmdyb3VwO0Iuc3VwZXJzZWRlcyYmKEY9Ri5jb25jYXQoQi5zdXBlcnNlZGVzKSk7ST10aGlzLmFkZE1vZHVsZShCLHopO0YucHVzaCh6KTtpZihJLnNraW5uYWJsZSl7aC5za2lubmFibGU9ITA7aWYoKEk9dGhpcy5za2luLm92ZXJyaWRlcykmJklbel0pZm9yKEQ9MDtEPElbel0ubGVuZ3RoO0QrKylKPXRoaXMuX2FkZFNraW4oSVt6XVtEXSx6LHUpLEYucHVzaChKKTtKPXRoaXMuX2FkZFNraW4odGhpcy5za2luLmRlZmF1bHRTa2luLHosdSk7Ri5wdXNoKEopfWlmKEIubGFuZyYmQi5sYW5nLmxlbmd0aClmb3IoSj10aGlzLmdldExhbmdQYWNrTmFtZSgiIix1KSwoST10aGlzLmdldE1vZHVsZUluZm8oSikpfHx0aGlzLl9hZGRMYW5nUGFjayhudWxsLGgsSiksQj1lKEIubGFuZyksRD0wO0Q8Qi5sZW5ndGg7RCsrKVY9QltEXSxKPXRoaXMuZ2V0TGFuZ1BhY2tOYW1lKFYsdSksUD10aGlzLmdldExhbmdQYWNrTmFtZShWLAp6KSwoST10aGlzLmdldE1vZHVsZUluZm8oSikpfHwoST10aGlzLl9hZGRMYW5nUGFjayhWLGgsSikpLEg9SHx8ZS5oYXNoKEkuc3VwZXJzZWRlcyksUCBpbiBIfHxJLnN1cGVyc2VkZXMucHVzaChQKSxoLmxhbmc9aC5sYW5nfHxbXSxNPU18fGUuaGFzaChoLmxhbmcpLFYgaW4gTXx8aC5sYW5nLnB1c2goViksSj10aGlzLmdldExhbmdQYWNrTmFtZSgiIix1KSxQPXRoaXMuZ2V0TGFuZ1BhY2tOYW1lKCIiLHopLChJPXRoaXMuZ2V0TW9kdWxlSW5mbyhKKSl8fChJPXRoaXMuX2FkZExhbmdQYWNrKFYsaCxKKSksUCBpbiBIfHxJLnN1cGVyc2VkZXMucHVzaChQKTtBKyt9aC5zdXBlcnNlZGVzPWUuZGVkdXBlKEYpO3RoaXMuYWxsb3dSb2xsdXAmJihoLnJvbGx1cD00PkE/QTpNYXRoLm1pbihBLTEsNCkpfWlmKEg9aC5wbHVnaW5zKWZvcih6IGluIEgpSC5oYXNPd25Qcm9wZXJ0eSh6KSYmKE09SFt6XSxNLnBrZz11LE0ucGF0aD1NLnBhdGh8fGwodSx6LGgudHlwZSksTS5yZXF1aXJlcz0KTS5yZXF1aXJlc3x8W10sTS5ncm91cD1oLmdyb3VwLHRoaXMuYWRkTW9kdWxlKE0seiksaC5za2lubmFibGUmJnRoaXMuX2FkZFNraW4odGhpcy5za2luLmRlZmF1bHRTa2luLHosdSkpO2lmKGguY29uZGl0aW9uKWZvcihIPXRoaXMuX2V4cGFuZEFsaWFzZXMoaC5jb25kaXRpb24udHJpZ2dlciksej0wO3o8SC5sZW5ndGg7eisrKXc9SFt6XSxNPWguY29uZGl0aW9uLndoZW4sWVt3XT1ZW3ddfHx7fSxZW3ddW3VdPWguY29uZGl0aW9uLE0mJiJhZnRlciIhPT1NPyJpbnN0ZWFkIj09PU0mJihoLnN1cGVyc2VkZXM9aC5zdXBlcnNlZGVzfHxbXSxoLnN1cGVyc2VkZXMucHVzaCh3KSk6KGguYWZ0ZXI9aC5hZnRlcnx8W10saC5hZnRlci5wdXNoKHcpKTtoLnN1cGVyc2VkZXMmJihoLnN1cGVyc2VkZXM9dGhpcy5maWx0ZXJSZXF1aXJlcyhoLnN1cGVyc2VkZXMpKTtoLmFmdGVyJiYoaC5hZnRlcj10aGlzLmZpbHRlclJlcXVpcmVzKGguYWZ0ZXIpLGguYWZ0ZXJfbWFwPWUuaGFzaChoLmFmdGVyKSk7CmguY29uZmlnRm4mJih6PWguY29uZmlnRm4oaCksITE9PT16JiYoZGVsZXRlIHRoaXMubW9kdWxlSW5mb1t1XSxkZWxldGUgZi5fcmVuZGVyZWRNb2RzW3VdLGg9bnVsbCkpO2gmJihmLl9yZW5kZXJlZE1vZHN8fChmLl9yZW5kZXJlZE1vZHM9e30pLGYuX3JlbmRlcmVkTW9kc1t1XT1hLm1peChmLl9yZW5kZXJlZE1vZHNbdV18fHt9LGgpLGYuX2NvbmRpdGlvbnM9WSk7cmV0dXJuIGh9LHJlcXVpcmU6ZnVuY3Rpb24oaCl7dmFyIHU9InN0cmluZyI9PT10eXBlb2YgaD9lKGFyZ3VtZW50cyk6aDt0aGlzLmRpcnR5PSEwO3RoaXMucmVxdWlyZWQ9YS5tZXJnZSh0aGlzLnJlcXVpcmVkLGUuaGFzaCh0aGlzLmZpbHRlclJlcXVpcmVzKHUpKSk7dGhpcy5fZXhwbG9kZVJvbGx1cHMoKX0sX2V4cGxvZGVSb2xsdXBzOmZ1bmN0aW9uKCl7dmFyIGgsdSx3LHosQSxILEYsQj10aGlzLnJlcXVpcmVkO2lmKCF0aGlzLmFsbG93Um9sbHVwKXtmb3IodyBpbiBCKWlmKEIuaGFzT3duUHJvcGVydHkodykmJgooaD10aGlzLmdldE1vZHVsZSh3KSkmJmgudXNlKWZvcihIPWgudXNlLmxlbmd0aCx6PTA7ejxIO3orKylpZigodT10aGlzLmdldE1vZHVsZShoLnVzZVt6XSkpJiZ1LnVzZSlmb3IoRj11LnVzZS5sZW5ndGgsQT0wO0E8RjtBKyspQlt1LnVzZVtBXV09ITA7ZWxzZSBCW2gudXNlW3pdXT0hMDt0aGlzLnJlcXVpcmVkPUJ9fSxmaWx0ZXJSZXF1aXJlczpmdW5jdGlvbihoKXtpZihoKXthLkxhbmcuaXNBcnJheShoKXx8KGg9W2hdKTtoPWEuQXJyYXkoaCk7dmFyIHU9W10sdyx6LEEsSDtmb3Iodz0wO3c8aC5sZW5ndGg7dysrKWlmKCh6PXRoaXMuZ2V0TW9kdWxlKGhbd10pKSYmei51c2UpZm9yKEE9MDtBPHoudXNlLmxlbmd0aDtBKyspKEg9dGhpcy5nZXRNb2R1bGUoei51c2VbQV0pKSYmSC51c2UmJkgubmFtZSE9PXoubmFtZT91PWEuQXJyYXkuZGVkdXBlKFtdLmNvbmNhdCh1LHRoaXMuZmlsdGVyUmVxdWlyZXMoSC51c2UpKSk6dS5wdXNoKHoudXNlW0FdKTtlbHNlIHUucHVzaChoW3ddKTsKaD11fXJldHVybiBofSxfY2FuQmVBdHRhY2hlZDpmdW5jdGlvbihoKXtyZXR1cm4oaD10aGlzLmdldE1vZHVsZShoKSkmJmgudGVzdD8oaC5oYXNPd25Qcm9wZXJ0eSgiX3Rlc3RSZXN1bHQiKXx8KGguX3Rlc3RSZXN1bHQ9aC50ZXN0KGEpKSxoLl90ZXN0UmVzdWx0KTohMH0sZ2V0UmVxdWlyZXM6ZnVuY3Rpb24oaCl7aWYoIWgpcmV0dXJuIHQ7aWYoaC5fcGFyc2VkKXJldHVybiBoLmV4cGFuZGVkfHx0O3ZhciB1LHcseixBLEgsRj10aGlzLnRlc3RyZXN1bHRzLEI9aC5uYW1lO3U9c1tCXSYmc1tCXS5kZXRhaWxzO3ZhciBJPWgub3B0aW9uYWxSZXF1aXJlcyxNLEQ7SD1oLmxhbmd8fGguaW50bDt2YXIgSj1hLkZlYXR1cmVzJiZhLkZlYXR1cmVzLnRlc3RzLmxvYWQsUDtoLnRlbXAmJnUmJih6PWgsaD10aGlzLmFkZE1vZHVsZSh1LEIpLGguZ3JvdXA9ei5ncm91cCxoLnBrZz16LnBrZyxkZWxldGUgaC5leHBhbmRlZCk7dT0hKCghdGhpcy5sYW5nfHxoLmxhbmdDYWNoZT09PXRoaXMubGFuZykmJgpoLnNraW5DYWNoZT09PXRoaXMuc2tpbi5kZWZhdWx0U2tpbik7aWYoaC5leHBhbmRlZCYmIXUpcmV0dXJuIGguZXhwYW5kZWQ7aWYoSSlmb3IodT0wLHo9SS5sZW5ndGg7dTx6O3UrKyl0aGlzLl9jYW5CZUF0dGFjaGVkKElbdV0pJiZoLnJlcXVpcmVzLnB1c2goSVt1XSk7TT1bXTtQPXt9O0k9dGhpcy5maWx0ZXJSZXF1aXJlcyhoLnJlcXVpcmVzKTtoLmxhbmcmJihNLnVuc2hpZnQoImludGwiKSxJLnVuc2hpZnQoImludGwiKSxIPSEwKTt6PXRoaXMuZmlsdGVyUmVxdWlyZXMoaC5vcHRpb25hbCk7aC5fcGFyc2VkPSEwO2gubGFuZ0NhY2hlPXRoaXMubGFuZztoLnNraW5DYWNoZT10aGlzLnNraW4uZGVmYXVsdFNraW47Zm9yKHU9MDt1PEkubGVuZ3RoO3UrKylpZighUFtJW3VdXSYmKE0ucHVzaChJW3VdKSxQW0lbdV1dPSEwLHc9dGhpcy5nZXRNb2R1bGUoSVt1XSkpKWZvcihBPXRoaXMuZ2V0UmVxdWlyZXModyksSD1IfHx3LmV4cGFuZGVkX21hcCYmKCJpbnRsImluIHcuZXhwYW5kZWRfbWFwKSwKdz0wO3c8QS5sZW5ndGg7dysrKU0ucHVzaChBW3ddKTtpZihJPXRoaXMuZmlsdGVyUmVxdWlyZXMoaC5zdXBlcnNlZGVzKSlmb3IodT0wO3U8SS5sZW5ndGg7dSsrKWlmKCFQW0lbdV1dJiYoaC5zdWJtb2R1bGVzJiZNLnB1c2goSVt1XSksUFtJW3VdXT0hMCx3PXRoaXMuZ2V0TW9kdWxlKElbdV0pKSlmb3IoQT10aGlzLmdldFJlcXVpcmVzKHcpLEg9SHx8dy5leHBhbmRlZF9tYXAmJigiaW50bCJpbiB3LmV4cGFuZGVkX21hcCksdz0wO3c8QS5sZW5ndGg7dysrKU0ucHVzaChBW3ddKTtpZih6JiZ0aGlzLmxvYWRPcHRpb25hbClmb3IodT0wO3U8ei5sZW5ndGg7dSsrKWlmKCFQW3pbdV1dJiYoTS5wdXNoKHpbdV0pLFBbelt1XV09ITAsdz10aGlzLmdldE1vZHVsZUluZm8oelt1XSkpKWZvcihBPXRoaXMuZ2V0UmVxdWlyZXModyksSD1IfHx3LmV4cGFuZGVkX21hcCYmKCJpbnRsImluIHcuZXhwYW5kZWRfbWFwKSx3PTA7dzxBLmxlbmd0aDt3KyspTS5wdXNoKEFbd10pO2lmKHo9dGhpcy5jb25kaXRpb25zW0JdKWlmKGguX3BhcnNlZD0KITEsRiYmSilnKEYsZnVuY3Rpb24oVixZKXt2YXIgbmE9SltZXS5uYW1lOyFQW25hXSYmSltZXS50cmlnZ2VyPT09QiYmViYmSltZXSYmKFBbbmFdPSEwLE0ucHVzaChuYSkpfSk7ZWxzZSBmb3IodSBpbiB6KWlmKHouaGFzT3duUHJvcGVydHkodSkmJiFQW3VdJiYoRj0oRj16W3VdKSYmKCFGLnVhJiYhRi50ZXN0fHxGLnVhJiZhLlVBW0YudWFdfHxGLnRlc3QmJkYudGVzdChhLEkpKSkmJihQW3VdPSEwLE0ucHVzaCh1KSx3PXRoaXMuZ2V0TW9kdWxlKHUpKSlmb3IoQT10aGlzLmdldFJlcXVpcmVzKHcpLHc9MDt3PEEubGVuZ3RoO3crKylNLnB1c2goQVt3XSk7aWYoaC5za2lubmFibGUpe0Y9dGhpcy5za2luLm92ZXJyaWRlcztmb3IodSBpbiBZVUkuRW52LmFsaWFzZXMpWVVJLkVudi5hbGlhc2VzLmhhc093blByb3BlcnR5KHUpJiYtMTxhLkFycmF5LmluZGV4T2YoWVVJLkVudi5hbGlhc2VzW3VdLEIpJiYoRD11KTtpZihGJiYoRltCXXx8RCYmRltEXSkpZm9yKEk9QixGW0RdJiYoST0KRCksdT0wO3U8RltJXS5sZW5ndGg7dSsrKUQ9dGhpcy5fYWRkU2tpbihGW0ldW3VdLEIpLHRoaXMuaXNDU1NMb2FkZWQoRCx0aGlzLl9ib290KXx8TS5wdXNoKEQpO2Vsc2UgRD10aGlzLl9hZGRTa2luKHRoaXMuc2tpbi5kZWZhdWx0U2tpbixCKSx0aGlzLmlzQ1NTTG9hZGVkKEQsdGhpcy5fYm9vdCl8fE0ucHVzaChEKX1oLl9wYXJzZWQ9ITE7SCYmKGgubGFuZyYmIWgubGFuZ1BhY2smJmEuSW50bCYmKEg9YS5JbnRsLmxvb2t1cEJlc3RMYW5nKHRoaXMubGFuZ3x8IiIsaC5sYW5nKSwoSD10aGlzLmdldExhbmdQYWNrTmFtZShILEIpKSYmTS51bnNoaWZ0KEgpKSxNLnVuc2hpZnQoImludGwiKSk7aC5leHBhbmRlZF9tYXA9ZS5oYXNoKE0pO2guZXhwYW5kZWQ9Yi5rZXlzKGguZXhwYW5kZWRfbWFwKTtyZXR1cm4gaC5leHBhbmRlZH0saXNDU1NMb2FkZWQ6ZnVuY3Rpb24oaCx1KXtpZighaHx8IVlVSS5FbnYuY3NzU3RhbXBFbHx8IXUmJnRoaXMuaWdub3JlUmVnaXN0ZXJlZClyZXR1cm4hMTsKdmFyIHc9WVVJLkVudi5jc3NTdGFtcEVsLHo9ITEsQT1ZVUkuRW52Ll9jc3NMb2FkZWRbaF0sSD13LmN1cnJlbnRTdHlsZTtpZih2b2lkIDAhPT1BKXJldHVybiBBO3cuY2xhc3NOYW1lPWg7SHx8KEg9YS5jb25maWcuZG9jLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodyxudWxsKSk7SCYmIm5vbmUiPT09SC5kaXNwbGF5JiYoej0hMCk7dy5jbGFzc05hbWU9IiI7cmV0dXJuIFlVSS5FbnYuX2Nzc0xvYWRlZFtoXT16fSxnZXRQcm92aWRlczpmdW5jdGlvbihoKXt2YXIgdT10aGlzLmdldE1vZHVsZShoKSx3LHo7aWYoIXUpcmV0dXJuIHE7dSYmIXUucHJvdmlkZXMmJih3PXt9LCh6PXUuc3VwZXJzZWRlcykmJmUuZWFjaCh6LGZ1bmN0aW9uKEEpe2EubWl4KHcsdGhpcy5nZXRQcm92aWRlcyhBKSl9LHRoaXMpLHdbaF09ITAsdS5wcm92aWRlcz13KTtyZXR1cm4gdS5wcm92aWRlc30sY2FsY3VsYXRlOmZ1bmN0aW9uKGgsdSl7aWYoaHx8dXx8dGhpcy5kaXJ0eSloJiZ0aGlzLl9jb25maWcoaCksCnRoaXMuX2luaXR8fHRoaXMuX3NldHVwKCksdGhpcy5fZXhwbG9kZSgpLHRoaXMuYWxsb3dSb2xsdXA/dGhpcy5fcm9sbHVwKCk6dGhpcy5fZXhwbG9kZVJvbGx1cHMoKSx0aGlzLl9yZWR1Y2UoKSx0aGlzLl9zb3J0KCl9LF9hZGRMYW5nUGFjazpmdW5jdGlvbihoLHUsdyl7dmFyIHo9dS5uYW1lLEE7dGhpcy5nZXRNb2R1bGVJbmZvKHcpfHwoQT1sKHUucGtnfHx6LHcsImpzIiwhMCksQT17cGF0aDpBLGludGw6ITAsbGFuZ1BhY2s6ITAsZXh0OnUuZXh0LGdyb3VwOnUuZ3JvdXAsc3VwZXJzZWRlczpbXX0sdS5yb290JiYoQS5yb290PXUucm9vdCksdS5iYXNlJiYoQS5iYXNlPXUuYmFzZSksdS5jb25maWdGbiYmKEEuY29uZmlnRm49dS5jb25maWdGbiksdGhpcy5hZGRNb2R1bGUoQSx3KSxoJiYoYS5FbnYubGFuZz1hLkVudi5sYW5nfHx7fSxhLkVudi5sYW5nW2hdPWEuRW52LmxhbmdbaF18fHt9LGEuRW52LmxhbmdbaF1bel09ITApKTtyZXR1cm4gdGhpcy5nZXRNb2R1bGVJbmZvKHcpfSwKX3NldHVwOmZ1bmN0aW9uKCl7dmFyIGg9dGhpcy5tb2R1bGVJbmZvLHUsdyx6LEE7Zm9yKHUgaW4gaCloLmhhc093blByb3BlcnR5KHUpJiYoej1oW3VdKSYmKHoucmVxdWlyZXM9ZS5kZWR1cGUoei5yZXF1aXJlcyksei5sYW5nJiYoQT10aGlzLmdldExhbmdQYWNrTmFtZSgiIix1KSx0aGlzLl9hZGRMYW5nUGFjayhudWxsLHosQSkpKTtoPXt9O3RoaXMuaWdub3JlUmVnaXN0ZXJlZHx8YS5taXgoaCxmLm1vZHMpO3RoaXMuaWdub3JlJiZhLm1peChoLGUuaGFzaCh0aGlzLmlnbm9yZSkpO2Zvcih3IGluIGgpaC5oYXNPd25Qcm9wZXJ0eSh3KSYmYS5taXgoaCx0aGlzLmdldFByb3ZpZGVzKHcpKTtpZih0aGlzLmZvcmNlKWZvcih3PTA7dzx0aGlzLmZvcmNlLmxlbmd0aDt3KyspdGhpcy5mb3JjZVt3XWluIGgmJmRlbGV0ZSBoW3RoaXMuZm9yY2Vbd11dO2EubWl4KHRoaXMubG9hZGVkLGgpO3RoaXMuX2luaXQ9ITB9LGdldExhbmdQYWNrTmFtZTpmdW5jdGlvbihoLHUpe3JldHVybiJsYW5nLyIrCnUrKGg/Il8iK2g6IiIpfSxfZXhwbG9kZTpmdW5jdGlvbigpe3ZhciBoPXRoaXMucmVxdWlyZWQsdSx3LHo9e30sQTt0aGlzLmRpcnR5PSExO3RoaXMuX2V4cGxvZGVSb2xsdXBzKCk7aD10aGlzLnJlcXVpcmVkO2ZvcihBIGluIGgpaWYoaC5oYXNPd25Qcm9wZXJ0eShBKSYmIXpbQV0mJih6W0FdPSEwLHU9dGhpcy5nZXRNb2R1bGUoQSkpKXtpZih3PXUuZXhwb3VuZCloW3ddPXRoaXMuZ2V0TW9kdWxlKHcpLHc9dGhpcy5nZXRSZXF1aXJlcyhoW3ddKSxhLm1peChoLGUuaGFzaCh3KSk7dz10aGlzLmdldFJlcXVpcmVzKHUpO2EubWl4KGgsZS5oYXNoKHcpKX19LF9wYXR0ZXJuVGVzdDpmdW5jdGlvbihoLHUpe3JldHVybi0xPGguaW5kZXhPZih1KX0sZ2V0TW9kdWxlOmZ1bmN0aW9uKGgpe2lmKCFoKXJldHVybiBudWxsO3ZhciB1LHcseixBPXRoaXMuZ2V0TW9kdWxlSW5mbyhoKSxIPXRoaXMucGF0dGVybnM7aWYoIUF8fEEmJkEuZXh0KWZvcih6IGluIEgpaWYoSC5oYXNPd25Qcm9wZXJ0eSh6KSYmCih1PUhbel0sdS50ZXN0fHwodS50ZXN0PXRoaXMuX3BhdHRlcm5UZXN0KSx1LnRlc3QoaCx6KSkpe3c9dTticmVha31BP3cmJkEmJncuY29uZmlnRm4mJiFBLmNvbmZpZ0ZuJiYoQS5jb25maWdGbj13LmNvbmZpZ0ZuLEEuY29uZmlnRm4oQSkpOncmJih1LmFjdGlvbj91LmFjdGlvbi5jYWxsKHRoaXMsaCx6KTooQT10aGlzLmFkZE1vZHVsZShhLm1lcmdlKHcse3Rlc3Q6dm9pZCAwLHRlbXA6ITB9KSxoKSkmJncuY29uZmlnRm4mJihBLmNvbmZpZ0ZuPXcuY29uZmlnRm4pKTtyZXR1cm4gQX0sX3JvbGx1cDpmdW5jdGlvbigpe30sX3JlZHVjZTpmdW5jdGlvbihoKXtoPWh8fHRoaXMucmVxdWlyZWQ7dmFyIHUsdyx6LEE9dGhpcy5sb2FkVHlwZSxIPXRoaXMuaWdub3JlP2UuaGFzaCh0aGlzLmlnbm9yZSk6ITE7Zm9yKHUgaW4gaClpZihoLmhhc093blByb3BlcnR5KHUpJiYodz10aGlzLmdldE1vZHVsZSh1KSwoKHRoaXMubG9hZGVkW3VdfHxzW3VdKSYmIXRoaXMuZm9yY2VNYXBbdV0mJgohdGhpcy5pZ25vcmVSZWdpc3RlcmVkfHxBJiZ3JiZ3LnR5cGUhPT1BKSYmZGVsZXRlIGhbdV0sSCYmSFt1XSYmZGVsZXRlIGhbdV0sej13JiZ3LnN1cGVyc2VkZXMpKWZvcih3PTA7dzx6Lmxlbmd0aDt3Kyspelt3XWluIGgmJmRlbGV0ZSBoW3pbd11dO3JldHVybiBofSxfZmluaXNoOmZ1bmN0aW9uKGgsdSl7ay5ydW5uaW5nPSExO3ZhciB3PXRoaXMub25FbmQ7dyYmdy5jYWxsKHRoaXMuY29udGV4dCx7bXNnOmgsZGF0YTp0aGlzLmRhdGEsc3VjY2Vzczp1fSk7dGhpcy5fY29udGludWUoKX0sX29uU3VjY2VzczpmdW5jdGlvbigpe3ZhciBoPWEubWVyZ2UodGhpcy5za2lwcGVkKSx1LHc9W107dT10aGlzLnJlcXVpcmVSZWdpc3RyYXRpb247dmFyIHosQTtmb3IoeiBpbiBoKWguaGFzT3duUHJvcGVydHkoeikmJmRlbGV0ZSB0aGlzLmluc2VydGVkW3pdO3RoaXMuc2tpcHBlZD17fTtmb3IoeiBpbiB0aGlzLmluc2VydGVkKXRoaXMuaW5zZXJ0ZWQuaGFzT3duUHJvcGVydHkoeikmJihBPQp0aGlzLmdldE1vZHVsZSh6KSwhQXx8IXV8fCJqcyIhPT1BLnR5cGV8fHogaW4gWVVJLkVudi5tb2RzP2EubWl4KHRoaXMubG9hZGVkLHRoaXMuZ2V0UHJvdmlkZXMoeikpOncucHVzaCh6KSk7dT10aGlzLm9uU3VjY2VzcztBPXcubGVuZ3RoPyJub3RyZWdpc3RlcmVkIjoic3VjY2VzcyI7ej0hdy5sZW5ndGg7dSYmdS5jYWxsKHRoaXMuY29udGV4dCx7bXNnOkEsZGF0YTp0aGlzLmRhdGEsc3VjY2Vzczp6LGZhaWxlZDp3LHNraXBwZWQ6aH0pO3RoaXMuX2ZpbmlzaChBLHopfSxfb25Qcm9ncmVzczpmdW5jdGlvbihoKXt2YXIgdTtpZihoLmRhdGEmJmguZGF0YS5sZW5ndGgpZm9yKHU9MDt1PGguZGF0YS5sZW5ndGg7dSsrKWguZGF0YVt1XT10aGlzLmdldE1vZHVsZShoLmRhdGFbdV0ubmFtZSk7dGhpcy5vblByb2dyZXNzJiZ0aGlzLm9uUHJvZ3Jlc3MuY2FsbCh0aGlzLmNvbnRleHQse25hbWU6aC51cmwsZGF0YTpoLmRhdGF9KX0sX29uRmFpbHVyZTpmdW5jdGlvbihoKXtmb3IodmFyIHU9CnRoaXMub25GYWlsdXJlLHc9W10sej0wLEE9aC5lcnJvcnMubGVuZ3RoO3o8QTt6Kyspdy5wdXNoKGguZXJyb3JzW3pdLmVycm9yKTt3PXcuam9pbigiLCIpO3UmJnUuY2FsbCh0aGlzLmNvbnRleHQse21zZzp3LGRhdGE6dGhpcy5kYXRhLHN1Y2Nlc3M6ITF9KTt0aGlzLl9maW5pc2godywhMSl9LF9vblRpbWVvdXQ6ZnVuY3Rpb24oaCl7dmFyIHU9dGhpcy5vblRpbWVvdXQ7dSYmdS5jYWxsKHRoaXMuY29udGV4dCx7bXNnOiJ0aW1lb3V0IixkYXRhOnRoaXMuZGF0YSxzdWNjZXNzOiExLHRyYW5zYWN0aW9uOmh9KX0sX3NvcnQ6ZnVuY3Rpb24oKXt2YXIgaCx1PXRoaXMucmVxdWlyZWQsdz17fTt0aGlzLnNvcnRlZD1bXTtmb3IoaCBpbiB1KSF3W2hdJiZ1Lmhhc093blByb3BlcnR5KGgpJiZ0aGlzLl92aXNpdChoLHcpfSxfdmlzaXQ6ZnVuY3Rpb24oaCx1KXt2YXIgdyx6LEEsSCxGLEIsSTt1W2hdPSEwO3c9dGhpcy5yZXF1aXJlZDtBPXRoaXMubW9kdWxlSW5mb1toXTt6PXRoaXMuY29uZGl0aW9uc1toXXx8Cnt9O2lmKEEpZm9yKEg9QS5leHBhbmRlZHx8QS5yZXF1aXJlcyxCPTAsST1ILmxlbmd0aDtCPEk7KytCKUE9SFtCXSxGPShGPXpbQV0pJiYoIUYud2hlbnx8ImFmdGVyIj09PUYud2hlbiksIXdbQV18fHVbQV18fEZ8fHRoaXMuX3Zpc2l0KEEsdSk7dGhpcy5zb3J0ZWQucHVzaChoKX0sX2luc2VydDpmdW5jdGlvbihoLHUsdyx6KXtoJiZ0aGlzLl9jb25maWcoaCk7aD10aGlzLnJlc29sdmUoIXopO3ZhciBBPXRoaXMsSD0wLEY9MCxCPXt9LEksTTtBLl9yZWZldGNoPVtdO3cmJihoWyJqcyI9PT13PyJjc3MiOiJqcyJdPVtdKTtBLmZldGNoQ1NTfHwoaC5jc3M9W10pO2guanMubGVuZ3RoJiZIKys7aC5jc3MubGVuZ3RoJiZIKys7TT1mdW5jdGlvbihEKXtGKys7dmFyIEo9MCxQPTA7aWYoRCYmRC5lcnJvcnMpZm9yKEo9MDtKPEQuZXJyb3JzLmxlbmd0aDtKKyspO2lmKEQmJkQuZGF0YSYmRC5kYXRhLmxlbmd0aCYmInN1Y2Nlc3MiPT09RC50eXBlKWZvcihKPTA7SjxELmRhdGEubGVuZ3RoO0orKylpZihBLmluc2VydGVkW0QuZGF0YVtKXS5uYW1lXT0KITAsRC5kYXRhW0pdLmxhbmd8fEQuZGF0YVtKXS5za2lubmFibGUpZGVsZXRlIEEuaW5zZXJ0ZWRbRC5kYXRhW0pdLm5hbWVdLEEuX3JlZmV0Y2gucHVzaChELmRhdGFbSl0ubmFtZSk7aWYoRj09PUgpe0EuX2xvYWRpbmc9bnVsbDtpZihBLl9yZWZldGNoLmxlbmd0aCl7Zm9yKEo9MDtKPEEuX3JlZmV0Y2gubGVuZ3RoO0orKylmb3IoST1BLmdldFJlcXVpcmVzKEEuZ2V0TW9kdWxlKEEuX3JlZmV0Y2hbSl0pKSxQPTA7UDxJLmxlbmd0aDtQKyspQS5pbnNlcnRlZFtJW1BdXXx8KEJbSVtQXV09SVtQXSk7Qj1hLk9iamVjdC5rZXlzKEIpO2lmKEIubGVuZ3RoKXtBLnJlcXVpcmUoQik7UD1BLnJlc29sdmUoITApO2lmKFAuY3NzTW9kcy5sZW5ndGgpe2ZvcihKPTA7SjxQLmNzc01vZHMubGVuZ3RoO0orKylEPVAuY3NzTW9kc1tKXS5uYW1lLGRlbGV0ZSBZVUkuRW52Ll9jc3NMb2FkZWRbRF0sQS5pc0NTU0xvYWRlZChEKSYmKEEuaW5zZXJ0ZWRbRF09ITAsZGVsZXRlIEEucmVxdWlyZWRbRF0pOwpBLnNvcnRlZD1bXTtBLl9zb3J0KCl9RD1udWxsO0EuX2luc2VydCgpfX1EJiZELmZuJiYoSj1ELmZuLGRlbGV0ZSBELmZuLEouY2FsbChBLEQpKX19O3RoaXMuX2xvYWRpbmc9ITA7aC5qcy5sZW5ndGh8fGguY3NzLmxlbmd0aD8oaC5jc3MubGVuZ3RoJiZhLkdldC5jc3MoaC5jc3Mse2RhdGE6aC5jc3NNb2RzLGF0dHJpYnV0ZXM6QS5jc3NBdHRyaWJ1dGVzLGluc2VydEJlZm9yZTpBLmluc2VydEJlZm9yZSxjaGFyc2V0OkEuY2hhcnNldCx0aW1lb3V0OkEudGltZW91dCxjb250ZXh0OkEsb25Qcm9ncmVzczpmdW5jdGlvbihEKXtBLl9vblByb2dyZXNzLmNhbGwoQSxEKX0sb25UaW1lb3V0OmZ1bmN0aW9uKEQpe0EuX29uVGltZW91dC5jYWxsKEEsRCl9LG9uU3VjY2VzczpmdW5jdGlvbihEKXtELnR5cGU9InN1Y2Nlc3MiO0QuZm49QS5fb25TdWNjZXNzO00uY2FsbChBLEQpfSxvbkZhaWx1cmU6ZnVuY3Rpb24oRCl7RC50eXBlPSJmYWlsdXJlIjtELmZuPUEuX29uRmFpbHVyZTtNLmNhbGwoQSwKRCl9fSksaC5qcy5sZW5ndGgmJmEuR2V0LmpzKGguanMse2RhdGE6aC5qc01vZHMsaW5zZXJ0QmVmb3JlOkEuaW5zZXJ0QmVmb3JlLGF0dHJpYnV0ZXM6QS5qc0F0dHJpYnV0ZXMsY2hhcnNldDpBLmNoYXJzZXQsdGltZW91dDpBLnRpbWVvdXQsYXV0b3B1cmdlOiExLGNvbnRleHQ6QSxhc3luYzpBLmFzeW5jLG9uUHJvZ3Jlc3M6ZnVuY3Rpb24oRCl7QS5fb25Qcm9ncmVzcy5jYWxsKEEsRCl9LG9uVGltZW91dDpmdW5jdGlvbihEKXtBLl9vblRpbWVvdXQuY2FsbChBLEQpfSxvblN1Y2Nlc3M6ZnVuY3Rpb24oRCl7RC50eXBlPSJzdWNjZXNzIjtELmZuPUEuX29uU3VjY2VzcztNLmNhbGwoQSxEKX0sb25GYWlsdXJlOmZ1bmN0aW9uKEQpe0QudHlwZT0iZmFpbHVyZSI7RC5mbj1BLl9vbkZhaWx1cmU7TS5jYWxsKEEsRCl9fSkpOihGPS0xLE0oe2ZuOkEuX29uU3VjY2Vzc30pKX0sX2NvbnRpbnVlOmZ1bmN0aW9uKCl7IWsucnVubmluZyYmMDxrLnNpemUoKSYmKGsucnVubmluZz0hMCxrLm5leHQoKSgpKX0sCmluc2VydDpmdW5jdGlvbihoLHUsdyl7dmFyIHo9dGhpcyxBPWEubWVyZ2UodGhpcyk7ZGVsZXRlIEEucmVxdWlyZTtkZWxldGUgQS5kaXJ0eTtrLmFkZChmdW5jdGlvbigpe3ouX2luc2VydChBLGgsdSx3KX0pO3RoaXMuX2NvbnRpbnVlKCl9LGxvYWROZXh0OmZ1bmN0aW9uKCl7fSxfZmlsdGVyOmZ1bmN0aW9uKGgsdSx3KXt2YXIgej10aGlzLmZpbHRlcixBPXUmJnUgaW4gdGhpcy5maWx0ZXJzLEg9QSYmdGhpcy5maWx0ZXJzW3VdOyh1PXd8fCh0aGlzLmdldE1vZHVsZUluZm8odSl8fHt9KS5ncm91cHx8bnVsbCkmJnRoaXMuZ3JvdXBzW3VdJiZ0aGlzLmdyb3Vwc1t1XS5maWx0ZXImJihIPXRoaXMuZ3JvdXBzW3VdLmZpbHRlcixBPSEwKTtoJiYoQSYmKHo9cC5pc1N0cmluZyhIKT90aGlzLkZJTFRFUl9ERUZTW0gudG9VcHBlckNhc2UoKV18fG51bGw6SCkseiYmKGg9aC5yZXBsYWNlKFJlZ0V4cCh6LnNlYXJjaEV4cCwiZyIpLHoucmVwbGFjZVN0cikpKTtyZXR1cm4gaH0sX3VybDpmdW5jdGlvbihoLAp1LHcpe3JldHVybiB0aGlzLl9maWx0ZXIoKHd8fHRoaXMuYmFzZXx8IiIpK2gsdSl9LHJlc29sdmU6ZnVuY3Rpb24oaCx1KXt2YXIgdz10aGlzLHo9e2pzOltdLGpzTW9kczpbXSxjc3M6W10sY3NzTW9kczpbXX0sQSxIPWEuY29uZmlnLmNvbWJvTG9hZGVyJiZhLmNvbmZpZy5jdXN0b21Db21ib0Jhc2U7KHcuc2tpbi5vdmVycmlkZXN8fCJzYW0iIT09dy5za2luLmRlZmF1bHRTa2lufHx3Lmlnbm9yZVJlZ2lzdGVyZWQpJiZ3Ll9yZXNldE1vZHVsZXMoKTtoJiZ3LmNhbGN1bGF0ZSgpO3U9dXx8dy5zb3J0ZWQ7QT1mdW5jdGlvbihmYSl7aWYoZmEpe3ZhciBpYT1mYS5ncm91cCYmdy5ncm91cHNbZmEuZ3JvdXBdfHxxOyExPT09aWEuYXN5bmMmJihmYS5hc3luYz1pYS5hc3luYyk7aWE9ZmEuZnVsbHBhdGg/dy5fZmlsdGVyKGZhLmZ1bGxwYXRoLGZhLm5hbWUpOncuX3VybChmYS5wYXRoLGZhLm5hbWUsaWEuYmFzZXx8ZmEuYmFzZSk7aWYoZmEuYXR0cmlidXRlc3x8ITE9PT1mYS5hc3luYylpYT0Ke3VybDppYSxhc3luYzpmYS5hc3luY30sZmEuYXR0cmlidXRlcyYmKGlhLmF0dHJpYnV0ZXM9ZmEuYXR0cmlidXRlcyk7eltmYS50eXBlXS5wdXNoKGlhKTt6W2ZhLnR5cGUrIk1vZHMiXS5wdXNoKGZhKX19O3ZhciBGPXcuaWdub3JlUmVnaXN0ZXJlZD97fTp3Lmluc2VydGVkLEIsSSxNLEQsSixQLFYsWSxuYT0hMTtZPTA7Zm9yKFY9dS5sZW5ndGg7WTxWO1krKylpZigoUD13LmdldE1vZHVsZSh1W1ldKSkmJiFGW1AubmFtZV0pe0o9dy5ncm91cHNbUC5ncm91cF07TT13LmNvbWJvQmFzZTtpZihKKXtpZighSi5jb21iaW5lfHxQLmZ1bGxwYXRoKXtBKFApO2NvbnRpbnVlfVAuY29tYmluZT0hMDsic3RyaW5nIj09PXR5cGVvZiBKLnJvb3QmJihQLnJvb3Q9Si5yb290KTtNPUouY29tYm9CYXNlfHxNO0Q9Si5jb21ib1NlcDtJPUoubWF4VVJMTGVuZ3RofWVsc2UgaWYoIXcuY29tYmluZSl7QShQKTtjb250aW51ZX0hUC5jb21iaW5lJiZQLmV4dD9BKFApOihuYT0hMCxCPUJ8fHt9LEJbTV09CkJbTV18fHtqczpbXSxqc01vZHM6W10sY3NzOltdLGNzc01vZHM6W119LE09QltNXSxNLmdyb3VwPVAuZ3JvdXAsTS5jb21ib1NlcD1EfHx3LmNvbWJvU2VwLE0ubWF4VVJMTGVuZ3RoPUl8fHcubWF4VVJMTGVuZ3RoLE1bUC50eXBlKyJNb2RzIl0ucHVzaChQKSwianMiIT09UC50eXBlJiYiY3NzIiE9PVAudHlwZXx8eltQLnR5cGUrIk1vZHMiXS5wdXNoKFApKX1uYSYmKHo9SD90aGlzLl9wYXRob2dlbkVuY29kZUNvbWJvU291cmNlcyh6KTp0aGlzLl9lbmNvZGVDb21ib1NvdXJjZXMoeixCKSk7cmV0dXJuIHp9LF9lbmNvZGVDb21ib1NvdXJjZXM6ZnVuY3Rpb24oaCx1KXt2YXIgdyx6LEEsSCxGLEIsSSxNLEQsSixQO2ZvcihJIGluIHUpaWYodS5oYXNPd25Qcm9wZXJ0eShJKSlmb3IoRiBpbiBNPXVbSV0sRD1NLmNvbWJvU2VwLEI9TS5tYXhVUkxMZW5ndGgsTSlpZigianMiPT09Rnx8ImNzcyI9PT1GKXt6PU1bRisiTW9kcyJdO0g9W107Sj0wO2ZvcihQPXoubGVuZ3RoO0o8UDtKKz0KMSl3PXpbSl0sQT0oInN0cmluZyI9PT10eXBlb2Ygdy5yb290P3cucm9vdDp0aGlzLnJvb3QpKyh3LnBhdGh8fHcuZnVsbHBhdGgpLEgucHVzaCh0aGlzLl9maWx0ZXIoQSx3Lm5hbWUpKTt6PUkrSC5qb2luKEQpO0E9ei5sZW5ndGg7Qjw9SS5sZW5ndGgmJihCPTEwMjQpO2lmKEgubGVuZ3RoKWlmKEE+Qil7dz1bXTtKPTA7Zm9yKFA9SC5sZW5ndGg7SjxQO0orKyl3LnB1c2goSFtKXSksej1JK3cuam9pbihEKSx6Lmxlbmd0aD5CJiYoQT13LnBvcCgpLHo9SSt3LmpvaW4oRCksaFtGXS5wdXNoKHRoaXMuX2ZpbHRlcih6LG51bGwsTS5ncm91cCkpLHc9W10sQSYmdy5wdXNoKEEpKTt3Lmxlbmd0aCYmKHo9SSt3LmpvaW4oRCksaFtGXS5wdXNoKHRoaXMuX2ZpbHRlcih6LG51bGwsTS5ncm91cCkpKX1lbHNlIGhbRl0ucHVzaCh0aGlzLl9maWx0ZXIoeixudWxsLE0uZ3JvdXApKX1yZXR1cm4gaH0sbG9hZDpmdW5jdGlvbihoKXtpZihoKXt2YXIgdT10aGlzLHc9dS5yZXNvbHZlKCEwKTt1LmRhdGE9Cnc7dS5vbkVuZD1mdW5jdGlvbigpe2guYXBwbHkodS5jb250ZXh0fHx1LGFyZ3VtZW50cyl9O3UuaW5zZXJ0KCl9fX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImdldCIsImZlYXR1cmVzIl19KTsKWVVJLmFkZCgibG9hZGVyLXJvbGx1cCIsZnVuY3Rpb24oYSxFKXthLkxvYWRlci5wcm90b3R5cGUuX3JvbGx1cD1mdW5jdGlvbigpe3ZhciBxLHQsZixkLGM9dGhpcy5yZXF1aXJlZCxiLGc9dGhpcy5tb2R1bGVJbmZvLGUsayxtO2lmKHRoaXMuZGlydHl8fCF0aGlzLnJvbGx1cHMpZm9yKHEgaW4gdGhpcy5yb2xsdXBzPXt9LGcpZy5oYXNPd25Qcm9wZXJ0eShxKSYmKGY9dGhpcy5nZXRNb2R1bGUocSkpJiZmLnJvbGx1cCYmKHRoaXMucm9sbHVwc1txXT1mKTtmb3IoOzspe2U9ITE7Zm9yKHEgaW4gdGhpcy5yb2xsdXBzKWlmKHRoaXMucm9sbHVwcy5oYXNPd25Qcm9wZXJ0eShxKSYmIWNbcV0mJighdGhpcy5sb2FkZWRbcV18fHRoaXMuZm9yY2VNYXBbcV0pJiYoZj10aGlzLmdldE1vZHVsZShxKSxkPWYuc3VwZXJzZWRlc3x8W10sYj0hMSxmLnJvbGx1cCkpe2Zvcih0PWs9MDt0PGQubGVuZ3RoO3QrKylpZihtPWdbZFt0XV0sdGhpcy5sb2FkZWRbZFt0XV0mJiF0aGlzLmZvcmNlTWFwW2RbdF1dKXtiPQohMTticmVha31lbHNlIGlmKGNbZFt0XV0mJmYudHlwZT09PW0udHlwZSYmKGsrKyxiPWs+PWYucm9sbHVwKSlicmVhaztiJiYoZT1jW3FdPSEwLHRoaXMuZ2V0UmVxdWlyZXMoZikpfWlmKCFlKWJyZWFrfX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImxvYWRlci1iYXNlIl19KTsKWVVJLmFkZCgibG9hZGVyLXl1aTMiLGZ1bmN0aW9uKGEsRSl7WVVJLkVudlthLnZlcnNpb25dLm1vZHVsZXM9WVVJLkVudlthLnZlcnNpb25dLm1vZHVsZXN8fHt9O2EubWl4KFlVSS5FbnZbYS52ZXJzaW9uXS5tb2R1bGVzLHsiYWxpZ24tcGx1Z2luIjp7cmVxdWlyZXM6WyJub2RlLXNjcmVlbiIsIm5vZGUtcGx1Z2luaG9zdCJdfSxhbmltOnt1c2U6ImFuaW0tYmFzZSBhbmltLWNvbG9yIGFuaW0tY3VydmUgYW5pbS1lYXNpbmcgYW5pbS1ub2RlLXBsdWdpbiBhbmltLXNjcm9sbCBhbmltLXh5Ii5zcGxpdCgiICIpfSwiYW5pbS1iYXNlIjp7cmVxdWlyZXM6WyJiYXNlLWJhc2UiLCJub2RlLXN0eWxlIiwiY29sb3ItYmFzZSJdfSwiYW5pbS1jb2xvciI6e3JlcXVpcmVzOlsiYW5pbS1iYXNlIl19LCJhbmltLWN1cnZlIjp7cmVxdWlyZXM6WyJhbmltLXh5Il19LCJhbmltLWVhc2luZyI6e3JlcXVpcmVzOlsiYW5pbS1iYXNlIl19LCJhbmltLW5vZGUtcGx1Z2luIjp7cmVxdWlyZXM6WyJub2RlLXBsdWdpbmhvc3QiLAoiYW5pbS1iYXNlIl19LCJhbmltLXNjcm9sbCI6e3JlcXVpcmVzOlsiYW5pbS1iYXNlIl19LCJhbmltLXNoYXBlIjp7cmVxdWlyZXM6WyJhbmltLWJhc2UiLCJhbmltLWVhc2luZyIsImFuaW0tY29sb3IiLCJtYXRyaXgiXX0sImFuaW0tc2hhcGUtdHJhbnNmb3JtIjp7dXNlOlsiYW5pbS1zaGFwZSJdfSwiYW5pbS14eSI6e3JlcXVpcmVzOlsiYW5pbS1iYXNlIiwibm9kZS1zY3JlZW4iXX0sYXBwOnt1c2U6ImFwcC1iYXNlIGFwcC1jb250ZW50IGFwcC10cmFuc2l0aW9ucyBsYXp5LW1vZGVsLWxpc3QgbW9kZWwgbW9kZWwtbGlzdCBtb2RlbC1zeW5jLXJlc3QgbW9kZWwtc3luYy1sb2NhbCByb3V0ZXIgdmlldyB2aWV3LW5vZGUtbWFwIi5zcGxpdCgiICIpfSwiYXBwLWJhc2UiOntyZXF1aXJlczpbImNsYXNzbmFtZW1hbmFnZXIiLCJwamF4LWJhc2UiLCJyb3V0ZXIiLCJ2aWV3Il19LCJhcHAtY29udGVudCI6e3JlcXVpcmVzOlsiYXBwLWJhc2UiLCJwamF4LWNvbnRlbnQiXX0sImFwcC10cmFuc2l0aW9ucyI6e3JlcXVpcmVzOlsiYXBwLWJhc2UiXX0sCiJhcHAtdHJhbnNpdGlvbnMtY3NzIjp7dHlwZToiY3NzIn0sImFwcC10cmFuc2l0aW9ucy1uYXRpdmUiOntjb25kaXRpb246e25hbWU6ImFwcC10cmFuc2l0aW9ucy1uYXRpdmUiLHRlc3Q6ZnVuY3Rpb24ocSl7cmV0dXJuKHE9KHE9cS5jb25maWcuZG9jKT9xLmRvY3VtZW50RWxlbWVudDpudWxsKSYmcS5zdHlsZT8iTW96VHJhbnNpdGlvbiJpbiBxLnN0eWxlfHwiV2Via2l0VHJhbnNpdGlvbiJpbiBxLnN0eWxlfHwidHJhbnNpdGlvbiJpbiBxLnN0eWxlOiExfSx0cmlnZ2VyOiJhcHAtdHJhbnNpdGlvbnMifSxyZXF1aXJlczpbImFwcC10cmFuc2l0aW9ucyIsImFwcC10cmFuc2l0aW9ucy1jc3MiLCJwYXJhbGxlbCIsInRyYW5zaXRpb24iXX0sImFycmF5LWV4dHJhcyI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sImFycmF5LWludm9rZSI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sYXJyYXlsaXN0OntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJhcnJheWxpc3QtYWRkIjp7cmVxdWlyZXM6WyJhcnJheWxpc3QiXX0sCiJhcnJheWxpc3QtZmlsdGVyIjp7cmVxdWlyZXM6WyJhcnJheWxpc3QiXX0sYXJyYXlzb3J0OntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJhc3luYy1xdWV1ZSI6e3JlcXVpcmVzOlsiZXZlbnQtY3VzdG9tIl19LGF0dHJpYnV0ZTp7dXNlOlsiYXR0cmlidXRlLWJhc2UiLCJhdHRyaWJ1dGUtY29tcGxleCJdfSwiYXR0cmlidXRlLWJhc2UiOntyZXF1aXJlczpbImF0dHJpYnV0ZS1jb3JlIiwiYXR0cmlidXRlLW9ic2VydmFibGUiLCJhdHRyaWJ1dGUtZXh0cmFzIl19LCJhdHRyaWJ1dGUtY29tcGxleCI6e3JlcXVpcmVzOlsiYXR0cmlidXRlLWJhc2UiXX0sImF0dHJpYnV0ZS1jb3JlIjp7cmVxdWlyZXM6WyJvb3AiXX0sImF0dHJpYnV0ZS1ldmVudHMiOnt1c2U6WyJhdHRyaWJ1dGUtb2JzZXJ2YWJsZSJdfSwiYXR0cmlidXRlLWV4dHJhcyI6e3JlcXVpcmVzOlsib29wIl19LCJhdHRyaWJ1dGUtb2JzZXJ2YWJsZSI6e3JlcXVpcmVzOlsiZXZlbnQtY3VzdG9tIl19LGF1dG9jb21wbGV0ZTp7dXNlOlsiYXV0b2NvbXBsZXRlLWJhc2UiLAoiYXV0b2NvbXBsZXRlLXNvdXJjZXMiLCJhdXRvY29tcGxldGUtbGlzdCIsImF1dG9jb21wbGV0ZS1wbHVnaW4iXX0sImF1dG9jb21wbGV0ZS1iYXNlIjp7b3B0aW9uYWw6WyJhdXRvY29tcGxldGUtc291cmNlcyJdLHJlcXVpcmVzOlsiYXJyYXktZXh0cmFzIiwiYmFzZS1idWlsZCIsImVzY2FwZSIsImV2ZW50LXZhbHVlY2hhbmdlIiwibm9kZS1iYXNlIl19LCJhdXRvY29tcGxldGUtZmlsdGVycyI6e3JlcXVpcmVzOlsiYXJyYXktZXh0cmFzIiwidGV4dC13b3JkYnJlYWsiXX0sImF1dG9jb21wbGV0ZS1maWx0ZXJzLWFjY2VudGZvbGQiOntyZXF1aXJlczpbImFycmF5LWV4dHJhcyIsInRleHQtYWNjZW50Zm9sZCIsInRleHQtd29yZGJyZWFrIl19LCJhdXRvY29tcGxldGUtaGlnaGxpZ2h0ZXJzIjp7cmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLCJoaWdobGlnaHQtYmFzZSJdfSwiYXV0b2NvbXBsZXRlLWhpZ2hsaWdodGVycy1hY2NlbnRmb2xkIjp7cmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLAoiaGlnaGxpZ2h0LWFjY2VudGZvbGQiXX0sImF1dG9jb21wbGV0ZS1saXN0Ijp7YWZ0ZXI6WyJhdXRvY29tcGxldGUtc291cmNlcyJdLGxhbmc6WyJlbiIsImVzIiwiaHUiLCJpdCJdLHJlcXVpcmVzOiJhdXRvY29tcGxldGUtYmFzZSBldmVudC1yZXNpemUgbm9kZS1zY3JlZW4gc2VsZWN0b3ItY3NzMyBzaGltLXBsdWdpbiB3aWRnZXQgd2lkZ2V0LXBvc2l0aW9uIHdpZGdldC1wb3NpdGlvbi1hbGlnbiIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdXRvY29tcGxldGUtbGlzdC1rZXlzIjp7Y29uZGl0aW9uOntuYW1lOiJhdXRvY29tcGxldGUtbGlzdC1rZXlzIix0ZXN0OmZ1bmN0aW9uKHEpe3JldHVybiEocS5VQS5pb3N8fHEuVUEuYW5kcm9pZCl9LHRyaWdnZXI6ImF1dG9jb21wbGV0ZS1saXN0In0scmVxdWlyZXM6WyJhdXRvY29tcGxldGUtbGlzdCIsImJhc2UtYnVpbGQiXX0sImF1dG9jb21wbGV0ZS1wbHVnaW4iOntyZXF1aXJlczpbImF1dG9jb21wbGV0ZS1saXN0Iiwibm9kZS1wbHVnaW5ob3N0Il19LAoiYXV0b2NvbXBsZXRlLXNvdXJjZXMiOntvcHRpb25hbDpbImlvLWJhc2UiLCJqc29uLXBhcnNlIiwianNvbnAiLCJ5cWwiXSxyZXF1aXJlczpbImF1dG9jb21wbGV0ZS1iYXNlIl19LGF4ZXM6e3VzZTpbImF4aXMtbnVtZXJpYyIsImF4aXMtY2F0ZWdvcnkiLCJheGlzLXRpbWUiLCJheGlzLXN0YWNrZWQiXX0sImF4ZXMtYmFzZSI6e3VzZTpbImF4aXMtbnVtZXJpYy1iYXNlIiwiYXhpcy1jYXRlZ29yeS1iYXNlIiwiYXhpcy10aW1lLWJhc2UiLCJheGlzLXN0YWNrZWQtYmFzZSJdfSxheGlzOntyZXF1aXJlczoiZG9tIHdpZGdldCB3aWRnZXQtcG9zaXRpb24gd2lkZ2V0LXN0YWNrIGdyYXBoaWNzIGF4aXMtYmFzZSIuc3BsaXQoIiAiKX0sImF4aXMtYmFzZSI6e3JlcXVpcmVzOlsiY2xhc3NuYW1lbWFuYWdlciIsImRhdGF0eXBlLW51bWJlciIsImRhdGF0eXBlLWRhdGUiLCJiYXNlIiwiZXZlbnQtY3VzdG9tIl19LCJheGlzLWNhdGVnb3J5Ijp7cmVxdWlyZXM6WyJheGlzIiwiYXhpcy1jYXRlZ29yeS1iYXNlIl19LAoiYXhpcy1jYXRlZ29yeS1iYXNlIjp7cmVxdWlyZXM6WyJheGlzLWJhc2UiXX0sImF4aXMtbnVtZXJpYyI6e3JlcXVpcmVzOlsiYXhpcyIsImF4aXMtbnVtZXJpYy1iYXNlIl19LCJheGlzLW51bWVyaWMtYmFzZSI6e3JlcXVpcmVzOlsiYXhpcy1iYXNlIl19LCJheGlzLXN0YWNrZWQiOntyZXF1aXJlczpbImF4aXMtbnVtZXJpYyIsImF4aXMtc3RhY2tlZC1iYXNlIl19LCJheGlzLXN0YWNrZWQtYmFzZSI6e3JlcXVpcmVzOlsiYXhpcy1udW1lcmljLWJhc2UiXX0sImF4aXMtdGltZSI6e3JlcXVpcmVzOlsiYXhpcyIsImF4aXMtdGltZS1iYXNlIl19LCJheGlzLXRpbWUtYmFzZSI6e3JlcXVpcmVzOlsiYXhpcy1iYXNlIl19LGJhc2U6e3VzZTpbImJhc2UtYmFzZSIsImJhc2UtcGx1Z2luaG9zdCIsImJhc2UtYnVpbGQiXX0sImJhc2UtYmFzZSI6e3JlcXVpcmVzOlsiYXR0cmlidXRlLWJhc2UiLCJiYXNlLWNvcmUiLCJiYXNlLW9ic2VydmFibGUiXX0sImJhc2UtYnVpbGQiOntyZXF1aXJlczpbImJhc2UtYmFzZSJdfSwKImJhc2UtY29yZSI6e3JlcXVpcmVzOlsiYXR0cmlidXRlLWNvcmUiXX0sImJhc2Utb2JzZXJ2YWJsZSI6e3JlcXVpcmVzOlsiYXR0cmlidXRlLW9ic2VydmFibGUiLCJiYXNlLWNvcmUiXX0sImJhc2UtcGx1Z2luaG9zdCI6e3JlcXVpcmVzOlsiYmFzZS1iYXNlIiwicGx1Z2luaG9zdCJdfSxidXR0b246e3JlcXVpcmVzOlsiYnV0dG9uLWNvcmUiLCJjc3NidXR0b24iLCJ3aWRnZXQiXX0sImJ1dHRvbi1jb3JlIjp7cmVxdWlyZXM6WyJhdHRyaWJ1dGUtY29yZSIsImNsYXNzbmFtZW1hbmFnZXIiLCJub2RlLWJhc2UiLCJlc2NhcGUiXX0sImJ1dHRvbi1ncm91cCI6e3JlcXVpcmVzOlsiYnV0dG9uLXBsdWdpbiIsImNzc2J1dHRvbiIsIndpZGdldCJdfSwiYnV0dG9uLXBsdWdpbiI6e3JlcXVpcmVzOlsiYnV0dG9uLWNvcmUiLCJjc3NidXR0b24iLCJub2RlLXBsdWdpbmhvc3QiXX0sY2FjaGU6e3VzZTpbImNhY2hlLWJhc2UiLCJjYWNoZS1vZmZsaW5lIiwiY2FjaGUtcGx1Z2luIl19LCJjYWNoZS1iYXNlIjp7cmVxdWlyZXM6WyJiYXNlIl19LAoiY2FjaGUtb2ZmbGluZSI6e3JlcXVpcmVzOlsiY2FjaGUtYmFzZSIsImpzb24iXX0sImNhY2hlLXBsdWdpbiI6e3JlcXVpcmVzOlsicGx1Z2luIiwiY2FjaGUtYmFzZSJdfSxjYWxlbmRhcjp7cmVxdWlyZXM6WyJjYWxlbmRhci1iYXNlIiwiY2FsZW5kYXJuYXZpZ2F0b3IiXSxza2lubmFibGU6ITB9LCJjYWxlbmRhci1iYXNlIjp7bGFuZzoiY2EgY2EtRVMgZGUgZW4gZXMgZXMtQVIgZXUtRVMgZnIgaHUgaXQgamEgbmItTk8gbmwgcHQtQlIgcnUgemgtSGFucyB6aC1IYW5zLUNOIHpoLUhhbnQgemgtSGFudC1ISyB6aC1IQU5ULVRXIi5zcGxpdCgiICIpLHJlcXVpcmVzOlsid2lkZ2V0IiwiZGF0YXR5cGUtZGF0ZSIsImRhdGF0eXBlLWRhdGUtbWF0aCIsImNzc2dyaWRzIl0sc2tpbm5hYmxlOiEwfSxjYWxlbmRhcm5hdmlnYXRvcjp7cmVxdWlyZXM6WyJwbHVnaW4iLCJjbGFzc25hbWVtYW5hZ2VyIiwiZGF0YXR5cGUtZGF0ZSIsIm5vZGUiXSxza2lubmFibGU6ITB9LGNoYXJ0czp7dXNlOlsiY2hhcnRzLWJhc2UiXX0sCiJjaGFydHMtYmFzZSI6e3JlcXVpcmVzOiJkb20gZXZlbnQtbW91c2VlbnRlciBldmVudC10b3VjaCBncmFwaGljcy1ncm91cCBheGVzIHNlcmllcy1waWUgc2VyaWVzLWxpbmUgc2VyaWVzLW1hcmtlciBzZXJpZXMtYXJlYSBzZXJpZXMtc3BsaW5lIHNlcmllcy1jb2x1bW4gc2VyaWVzLWJhciBzZXJpZXMtYXJlYXNwbGluZSBzZXJpZXMtY29tYm8gc2VyaWVzLWNvbWJvc3BsaW5lIHNlcmllcy1saW5lLXN0YWNrZWQgc2VyaWVzLW1hcmtlci1zdGFja2VkIHNlcmllcy1hcmVhLXN0YWNrZWQgc2VyaWVzLXNwbGluZS1zdGFja2VkIHNlcmllcy1jb2x1bW4tc3RhY2tlZCBzZXJpZXMtYmFyLXN0YWNrZWQgc2VyaWVzLWFyZWFzcGxpbmUtc3RhY2tlZCBzZXJpZXMtY29tYm8tc3RhY2tlZCBzZXJpZXMtY29tYm9zcGxpbmUtc3RhY2tlZCIuc3BsaXQoIiAiKX0sImNoYXJ0cy1sZWdlbmQiOntyZXF1aXJlczpbImNoYXJ0cy1iYXNlIl19LGNsYXNzbmFtZW1hbmFnZXI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sCiJjbGlja2FibGUtcmFpbCI6e3JlcXVpcmVzOlsic2xpZGVyLWJhc2UiXX0sY29sbGVjdGlvbjp7dXNlOlsiYXJyYXktZXh0cmFzIiwiYXJyYXlsaXN0IiwiYXJyYXlsaXN0LWFkZCIsImFycmF5bGlzdC1maWx0ZXIiLCJhcnJheS1pbnZva2UiXX0sY29sb3I6e3VzZTpbImNvbG9yLWJhc2UiLCJjb2xvci1oc2wiLCJjb2xvci1oYXJtb255Il19LCJjb2xvci1iYXNlIjp7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSwiY29sb3ItaGFybW9ueSI6e3JlcXVpcmVzOlsiY29sb3ItaHNsIl19LCJjb2xvci1oc2wiOntyZXF1aXJlczpbImNvbG9yLWJhc2UiXX0sImNvbG9yLWhzdiI6e3JlcXVpcmVzOlsiY29sb3ItYmFzZSJdfSxjb25zb2xlOntsYW5nOlsiZW4iLCJlcyIsImh1IiwiaXQiLCJqYSJdLHJlcXVpcmVzOlsieXVpLWxvZyIsIndpZGdldCJdLHNraW5uYWJsZTohMH0sImNvbnNvbGUtZmlsdGVycyI6e3JlcXVpcmVzOlsicGx1Z2luIiwiY29uc29sZSJdLHNraW5uYWJsZTohMH0sImNvbnRlbnQtZWRpdGFibGUiOntyZXF1aXJlczpbIm5vZGUtYmFzZSIsCiJlZGl0b3Itc2VsZWN0aW9uIiwic3R5bGVzaGVldCIsInBsdWdpbiJdfSxjb250cm9sbGVyOnt1c2U6WyJyb3V0ZXIiXX0sY29va2llOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJjcmVhdGVsaW5rLWJhc2UiOntyZXF1aXJlczpbImVkaXRvci1iYXNlIl19LGNzc2Jhc2U6e2FmdGVyOiJjc3NyZXNldCBjc3Nmb250cyBjc3NncmlkcyBjc3NyZXNldC1jb250ZXh0IGNzc2ZvbnRzLWNvbnRleHQgY3NzZ3JpZHMtY29udGV4dCIuc3BsaXQoIiAiKSx0eXBlOiJjc3MifSwiY3NzYmFzZS1jb250ZXh0Ijp7YWZ0ZXI6ImNzc3Jlc2V0IGNzc2ZvbnRzIGNzc2dyaWRzIGNzc3Jlc2V0LWNvbnRleHQgY3NzZm9udHMtY29udGV4dCBjc3Nncmlkcy1jb250ZXh0Ii5zcGxpdCgiICIpLHR5cGU6ImNzcyJ9LGNzc2J1dHRvbjp7dHlwZToiY3NzIn0sY3NzZm9udHM6e3R5cGU6ImNzcyJ9LCJjc3Nmb250cy1jb250ZXh0Ijp7dHlwZToiY3NzIn0sY3NzZ3JpZHM6e29wdGlvbmFsOlsiY3Nzbm9ybWFsaXplIl0sCnR5cGU6ImNzcyJ9LCJjc3Nncmlkcy1iYXNlIjp7b3B0aW9uYWw6WyJjc3Nub3JtYWxpemUiXSx0eXBlOiJjc3MifSwiY3NzZ3JpZHMtcmVzcG9uc2l2ZSI6e29wdGlvbmFsOlsiY3Nzbm9ybWFsaXplIl0scmVxdWlyZXM6WyJjc3NncmlkcyIsImNzc2dyaWRzLXJlc3BvbnNpdmUtYmFzZSJdLHR5cGU6ImNzcyJ9LCJjc3Nncmlkcy11bml0cyI6e29wdGlvbmFsOlsiY3Nzbm9ybWFsaXplIl0scmVxdWlyZXM6WyJjc3Nncmlkcy1iYXNlIl0sdHlwZToiY3NzIn0sY3Nzbm9ybWFsaXplOnt0eXBlOiJjc3MifSwiY3Nzbm9ybWFsaXplLWNvbnRleHQiOnt0eXBlOiJjc3MifSxjc3NyZXNldDp7dHlwZToiY3NzIn0sImNzc3Jlc2V0LWNvbnRleHQiOnt0eXBlOiJjc3MifSxkYXRhc2NoZW1hOnt1c2U6WyJkYXRhc2NoZW1hLWJhc2UiLCJkYXRhc2NoZW1hLWpzb24iLCJkYXRhc2NoZW1hLXhtbCIsImRhdGFzY2hlbWEtYXJyYXkiLCJkYXRhc2NoZW1hLXRleHQiXX0sImRhdGFzY2hlbWEtYXJyYXkiOntyZXF1aXJlczpbImRhdGFzY2hlbWEtYmFzZSJdfSwKImRhdGFzY2hlbWEtYmFzZSI6e3JlcXVpcmVzOlsiYmFzZSJdfSwiZGF0YXNjaGVtYS1qc29uIjp7cmVxdWlyZXM6WyJkYXRhc2NoZW1hLWJhc2UiLCJqc29uIl19LCJkYXRhc2NoZW1hLXRleHQiOntyZXF1aXJlczpbImRhdGFzY2hlbWEtYmFzZSJdfSwiZGF0YXNjaGVtYS14bWwiOntyZXF1aXJlczpbImRhdGFzY2hlbWEtYmFzZSJdfSxkYXRhc291cmNlOnt1c2U6ImRhdGFzb3VyY2UtbG9jYWwgZGF0YXNvdXJjZS1pbyBkYXRhc291cmNlLWdldCBkYXRhc291cmNlLWZ1bmN0aW9uIGRhdGFzb3VyY2UtY2FjaGUgZGF0YXNvdXJjZS1qc29uc2NoZW1hIGRhdGFzb3VyY2UteG1sc2NoZW1hIGRhdGFzb3VyY2UtYXJyYXlzY2hlbWEgZGF0YXNvdXJjZS10ZXh0c2NoZW1hIGRhdGFzb3VyY2UtcG9sbGluZyIuc3BsaXQoIiAiKX0sImRhdGFzb3VyY2UtYXJyYXlzY2hlbWEiOntyZXF1aXJlczpbImRhdGFzb3VyY2UtbG9jYWwiLCJwbHVnaW4iLCJkYXRhc2NoZW1hLWFycmF5Il19LCJkYXRhc291cmNlLWNhY2hlIjp7cmVxdWlyZXM6WyJkYXRhc291cmNlLWxvY2FsIiwKInBsdWdpbiIsImNhY2hlLWJhc2UiXX0sImRhdGFzb3VyY2UtZnVuY3Rpb24iOntyZXF1aXJlczpbImRhdGFzb3VyY2UtbG9jYWwiXX0sImRhdGFzb3VyY2UtZ2V0Ijp7cmVxdWlyZXM6WyJkYXRhc291cmNlLWxvY2FsIiwiZ2V0Il19LCJkYXRhc291cmNlLWlvIjp7cmVxdWlyZXM6WyJkYXRhc291cmNlLWxvY2FsIiwiaW8tYmFzZSJdfSwiZGF0YXNvdXJjZS1qc29uc2NoZW1hIjp7cmVxdWlyZXM6WyJkYXRhc291cmNlLWxvY2FsIiwicGx1Z2luIiwiZGF0YXNjaGVtYS1qc29uIl19LCJkYXRhc291cmNlLWxvY2FsIjp7cmVxdWlyZXM6WyJiYXNlIl19LCJkYXRhc291cmNlLXBvbGxpbmciOntyZXF1aXJlczpbImRhdGFzb3VyY2UtbG9jYWwiXX0sImRhdGFzb3VyY2UtdGV4dHNjaGVtYSI6e3JlcXVpcmVzOlsiZGF0YXNvdXJjZS1sb2NhbCIsInBsdWdpbiIsImRhdGFzY2hlbWEtdGV4dCJdfSwiZGF0YXNvdXJjZS14bWxzY2hlbWEiOntyZXF1aXJlczpbImRhdGFzb3VyY2UtbG9jYWwiLAoicGx1Z2luIiwiZGF0YXR5cGUteG1sIiwiZGF0YXNjaGVtYS14bWwiXX0sZGF0YXRhYmxlOnt1c2U6ImRhdGF0YWJsZS1jb3JlIGRhdGF0YWJsZS10YWJsZSBkYXRhdGFibGUtaGVhZCBkYXRhdGFibGUtYm9keSBkYXRhdGFibGUtYmFzZSBkYXRhdGFibGUtY29sdW1uLXdpZHRocyBkYXRhdGFibGUtbWVzc2FnZSBkYXRhdGFibGUtbXV0YWJsZSBkYXRhdGFibGUtc29ydCBkYXRhdGFibGUtZGF0YXNvdXJjZSIuc3BsaXQoIiAiKX0sImRhdGF0YWJsZS1iYXNlIjp7cmVxdWlyZXM6ImRhdGF0YWJsZS1jb3JlIGRhdGF0YWJsZS10YWJsZSBkYXRhdGFibGUtaGVhZCBkYXRhdGFibGUtYm9keSBiYXNlLWJ1aWxkIHdpZGdldCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJkYXRhdGFibGUtYm9keSI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWNvcmUiLCJ2aWV3IiwiY2xhc3NuYW1lbWFuYWdlciJdfSwiZGF0YXRhYmxlLWNvbHVtbi13aWR0aHMiOntyZXF1aXJlczpbImRhdGF0YWJsZS1iYXNlIl19LAoiZGF0YXRhYmxlLWNvcmUiOntyZXF1aXJlczpbImVzY2FwZSIsIm1vZGVsLWxpc3QiLCJub2RlLWV2ZW50LWRlbGVnYXRlIl19LCJkYXRhdGFibGUtZGF0YXNvdXJjZSI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWJhc2UiLCJwbHVnaW4iLCJkYXRhc291cmNlLWxvY2FsIl19LCJkYXRhdGFibGUtZm9vdCI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWNvcmUiLCJ2aWV3Il19LCJkYXRhdGFibGUtZm9ybWF0dGVycyI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWJvZHkiLCJkYXRhdHlwZS1udW1iZXItZm9ybWF0IiwiZGF0YXR5cGUtZGF0ZS1mb3JtYXQiLCJlc2NhcGUiXX0sImRhdGF0YWJsZS1oZWFkIjp7cmVxdWlyZXM6WyJkYXRhdGFibGUtY29yZSIsInZpZXciLCJjbGFzc25hbWVtYW5hZ2VyIl19LCJkYXRhdGFibGUtaGlnaGxpZ2h0Ijp7cmVxdWlyZXM6WyJkYXRhdGFibGUtYmFzZSIsImV2ZW50LWhvdmVyIl0sc2tpbm5hYmxlOiEwfSwiZGF0YXRhYmxlLWtleW5hdiI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWJhc2UiXX0sCiJkYXRhdGFibGUtbWVzc2FnZSI6e2xhbmc6WyJlbiIsImZyIiwiZXMiLCJodSIsIml0Il0scmVxdWlyZXM6WyJkYXRhdGFibGUtYmFzZSJdLHNraW5uYWJsZTohMH0sImRhdGF0YWJsZS1tdXRhYmxlIjp7cmVxdWlyZXM6WyJkYXRhdGFibGUtYmFzZSJdfSwiZGF0YXRhYmxlLXBhZ2luYXRvciI6e2xhbmc6WyJlbiIsImZyIl0scmVxdWlyZXM6WyJtb2RlbCIsInZpZXciLCJwYWdpbmF0b3ItY29yZSIsImRhdGF0YWJsZS1mb290IiwiZGF0YXRhYmxlLXBhZ2luYXRvci10ZW1wbGF0ZXMiXSxza2lubmFibGU6ITB9LCJkYXRhdGFibGUtcGFnaW5hdG9yLXRlbXBsYXRlcyI6e3JlcXVpcmVzOlsidGVtcGxhdGUiXX0sImRhdGF0YWJsZS1zY3JvbGwiOntyZXF1aXJlczpbImRhdGF0YWJsZS1iYXNlIiwiZGF0YXRhYmxlLWNvbHVtbi13aWR0aHMiLCJkb20tc2NyZWVuIl0sc2tpbm5hYmxlOiEwfSwiZGF0YXRhYmxlLXNvcnQiOntsYW5nOlsiZW4iLCJmciIsImVzIiwiaHUiXSxyZXF1aXJlczpbImRhdGF0YWJsZS1iYXNlIl0sCnNraW5uYWJsZTohMH0sImRhdGF0YWJsZS10YWJsZSI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWNvcmUiLCJkYXRhdGFibGUtaGVhZCIsImRhdGF0YWJsZS1ib2R5IiwidmlldyIsImNsYXNzbmFtZW1hbmFnZXIiXX0sZGF0YXR5cGU6e3VzZTpbImRhdGF0eXBlLWRhdGUiLCJkYXRhdHlwZS1udW1iZXIiLCJkYXRhdHlwZS14bWwiXX0sImRhdGF0eXBlLWRhdGUiOnt1c2U6WyJkYXRhdHlwZS1kYXRlLXBhcnNlIiwiZGF0YXR5cGUtZGF0ZS1mb3JtYXQiLCJkYXRhdHlwZS1kYXRlLW1hdGgiXX0sImRhdGF0eXBlLWRhdGUtZm9ybWF0Ijp7bGFuZzoiYXIgYXItSk8gY2EgY2EtRVMgZGEgZGEtREsgZGUgZGUtQVQgZGUtREUgZWwgZWwtR1IgZW4gZW4tQVUgZW4tQ0EgZW4tR0IgZW4tSUUgZW4tSU4gZW4tSk8gZW4tTVkgZW4tTlogZW4tUEggZW4tU0cgZW4tVVMgZXMgZXMtQVIgZXMtQk8gZXMtQ0wgZXMtQ08gZXMtRUMgZXMtRVMgZXMtTVggZXMtUEUgZXMtUFkgZXMtVVMgZXMtVVkgZXMtVkUgZmkgZmktRkkgZnIgZnItQkUgZnItQ0EgZnItRlIgaGkgaGktSU4gaHUgaWQgaWQtSUQgaXQgaXQtSVQgamEgamEtSlAga28ga28tS1IgbXMgbXMtTVkgbmIgbmItTk8gbmwgbmwtQkUgbmwtTkwgcGwgcGwtUEwgcHQgcHQtQlIgcm8gcm8tUk8gcnUgcnUtUlUgc3Ygc3YtU0UgdGggdGgtVEggdHIgdHItVFIgdmkgdmktVk4gemgtSGFucyB6aC1IYW5zLUNOIHpoLUhhbnQgemgtSGFudC1ISyB6aC1IYW50LVRXIi5zcGxpdCgiICIpfSwKImRhdGF0eXBlLWRhdGUtbWF0aCI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sImRhdGF0eXBlLWRhdGUtcGFyc2UiOnt9LCJkYXRhdHlwZS1udW1iZXIiOnt1c2U6WyJkYXRhdHlwZS1udW1iZXItcGFyc2UiLCJkYXRhdHlwZS1udW1iZXItZm9ybWF0Il19LCJkYXRhdHlwZS1udW1iZXItZm9ybWF0Ijp7fSwiZGF0YXR5cGUtbnVtYmVyLXBhcnNlIjp7cmVxdWlyZXM6WyJlc2NhcGUiXX0sImRhdGF0eXBlLXhtbCI6e3VzZTpbImRhdGF0eXBlLXhtbC1wYXJzZSIsImRhdGF0eXBlLXhtbC1mb3JtYXQiXX0sImRhdGF0eXBlLXhtbC1mb3JtYXQiOnt9LCJkYXRhdHlwZS14bWwtcGFyc2UiOnt9LGRkOnt1c2U6ImRkLWRkbS1iYXNlIGRkLWRkbSBkZC1kZG0tZHJvcCBkZC1kcmFnIGRkLXByb3h5IGRkLWNvbnN0cmFpbiBkZC1kcm9wIGRkLXNjcm9sbCBkZC1kZWxlZ2F0ZSIuc3BsaXQoIiAiKX0sImRkLWNvbnN0cmFpbiI6e3JlcXVpcmVzOlsiZGQtZHJhZyJdfSwiZGQtZGRtIjp7cmVxdWlyZXM6WyJkZC1kZG0tYmFzZSIsCiJldmVudC1yZXNpemUiXX0sImRkLWRkbS1iYXNlIjp7cmVxdWlyZXM6WyJub2RlIiwiYmFzZSIsInl1aS10aHJvdHRsZSIsImNsYXNzbmFtZW1hbmFnZXIiXX0sImRkLWRkbS1kcm9wIjp7cmVxdWlyZXM6WyJkZC1kZG0iXX0sImRkLWRlbGVnYXRlIjp7cmVxdWlyZXM6WyJkZC1kcmFnIiwiZGQtZHJvcC1wbHVnaW4iLCJldmVudC1tb3VzZWVudGVyIl19LCJkZC1kcmFnIjp7cmVxdWlyZXM6WyJkZC1kZG0tYmFzZSIsInNlbGVjdG9yLWNzczIiXX0sImRkLWRyb3AiOntyZXF1aXJlczpbImRkLWRyYWciLCJkZC1kZG0tZHJvcCJdfSwiZGQtZHJvcC1wbHVnaW4iOntyZXF1aXJlczpbImRkLWRyb3AiXX0sImRkLWdlc3R1cmVzIjp7Y29uZGl0aW9uOntuYW1lOiJkZC1nZXN0dXJlcyIsdHJpZ2dlcjoiZGQtZHJhZyIsdWE6InRvdWNoRW5hYmxlZCJ9LHJlcXVpcmVzOlsiZGQtZHJhZyIsImV2ZW50LXN5bnRoZXRpYyIsImV2ZW50LWdlc3R1cmVzIl19LCJkZC1wbHVnaW4iOntvcHRpb25hbDpbImRkLWNvbnN0cmFpbiIsCiJkZC1wcm94eSJdLHJlcXVpcmVzOlsiZGQtZHJhZyJdfSwiZGQtcHJveHkiOntyZXF1aXJlczpbImRkLWRyYWciXX0sImRkLXNjcm9sbCI6e3JlcXVpcmVzOlsiZGQtZHJhZyJdfSxkaWFsOntsYW5nOlsiZW4iLCJlcyIsImh1Il0scmVxdWlyZXM6IndpZGdldCBkZC1kcmFnIGV2ZW50LW1vdXNlZW50ZXIgZXZlbnQtbW92ZSBldmVudC1rZXkgdHJhbnNpdGlvbiBpbnRsIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sZG9tOnt1c2U6WyJkb20tYmFzZSIsImRvbS1zY3JlZW4iLCJkb20tc3R5bGUiLCJzZWxlY3Rvci1uYXRpdmUiLCJzZWxlY3RvciJdfSwiZG9tLWJhc2UiOntyZXF1aXJlczpbImRvbS1jb3JlIl19LCJkb20tY29yZSI6e3JlcXVpcmVzOlsib29wIiwiZmVhdHVyZXMiXX0sImRvbS1zY3JlZW4iOntyZXF1aXJlczpbImRvbS1iYXNlIiwiZG9tLXN0eWxlIl19LCJkb20tc3R5bGUiOntyZXF1aXJlczpbImRvbS1iYXNlIl19LCJkb20tc3R5bGUtaWUiOntjb25kaXRpb246e25hbWU6ImRvbS1zdHlsZS1pZSIsCnRlc3Q6ZnVuY3Rpb24ocSl7dmFyIHQ9cS5GZWF0dXJlcy50ZXN0LGY9cS5GZWF0dXJlcy5hZGQsZD1xLmNvbmZpZy53aW4sYz1xLmNvbmZpZy5kb2M7cT0hMTtmKCJzdHlsZSIsImNvbXB1dGVkU3R5bGUiLHt0ZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIGQmJiJnZXRDb21wdXRlZFN0eWxlImluIGR9fSk7Zigic3R5bGUiLCJvcGFjaXR5Iix7dGVzdDpmdW5jdGlvbigpe3JldHVybiBjJiYib3BhY2l0eSJpbiBjLmRvY3VtZW50RWxlbWVudC5zdHlsZX19KTtyZXR1cm4gcT0hdCgic3R5bGUiLCJvcGFjaXR5IikmJiF0KCJzdHlsZSIsImNvbXB1dGVkU3R5bGUiKX0sdHJpZ2dlcjoiZG9tLXN0eWxlIn0scmVxdWlyZXM6WyJkb20tc3R5bGUiLCJjb2xvci1iYXNlIl19LGR1bXA6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sZWRpdG9yOnt1c2U6ImZyYW1lIGVkaXRvci1zZWxlY3Rpb24gZXhlYy1jb21tYW5kIGVkaXRvci1iYXNlIGVkaXRvci1wYXJhIGVkaXRvci1iciBlZGl0b3ItYmlkaSBlZGl0b3ItdGFiIGNyZWF0ZWxpbmstYmFzZSIuc3BsaXQoIiAiKX0sCiJlZGl0b3ItYmFzZSI6e3JlcXVpcmVzOlsiYmFzZSIsImZyYW1lIiwibm9kZSIsImV4ZWMtY29tbWFuZCIsImVkaXRvci1zZWxlY3Rpb24iXX0sImVkaXRvci1iaWRpIjp7cmVxdWlyZXM6WyJlZGl0b3ItYmFzZSJdfSwiZWRpdG9yLWJyIjp7cmVxdWlyZXM6WyJlZGl0b3ItYmFzZSJdfSwiZWRpdG9yLWlubGluZSI6e3JlcXVpcmVzOlsiZWRpdG9yLWJhc2UiLCJjb250ZW50LWVkaXRhYmxlIl19LCJlZGl0b3ItbGlzdHMiOntyZXF1aXJlczpbImVkaXRvci1iYXNlIl19LCJlZGl0b3ItcGFyYSI6e3JlcXVpcmVzOlsiZWRpdG9yLXBhcmEtYmFzZSJdfSwiZWRpdG9yLXBhcmEtYmFzZSI6e3JlcXVpcmVzOlsiZWRpdG9yLWJhc2UiXX0sImVkaXRvci1wYXJhLWllIjp7Y29uZGl0aW9uOntuYW1lOiJlZGl0b3ItcGFyYS1pZSIsdHJpZ2dlcjoiZWRpdG9yLXBhcmEiLHVhOiJpZSIsd2hlbjoiaW5zdGVhZCJ9LHJlcXVpcmVzOlsiZWRpdG9yLXBhcmEtYmFzZSJdfSwiZWRpdG9yLXNlbGVjdGlvbiI6e3JlcXVpcmVzOlsibm9kZSJdfSwKImVkaXRvci10YWIiOntyZXF1aXJlczpbImVkaXRvci1iYXNlIl19LGVzY2FwZTp7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSxldmVudDp7YWZ0ZXI6WyJub2RlLWJhc2UiXSx1c2U6ImV2ZW50LWJhc2UgZXZlbnQtZGVsZWdhdGUgZXZlbnQtc3ludGhldGljIGV2ZW50LW1vdXNld2hlZWwgZXZlbnQtbW91c2VlbnRlciBldmVudC1rZXkgZXZlbnQtZm9jdXMgZXZlbnQtcmVzaXplIGV2ZW50LWhvdmVyIGV2ZW50LW91dHNpZGUgZXZlbnQtdG91Y2ggZXZlbnQtbW92ZSBldmVudC1mbGljayBldmVudC12YWx1ZWNoYW5nZSBldmVudC10YXAiLnNwbGl0KCIgIil9LCJldmVudC1iYXNlIjp7YWZ0ZXI6WyJub2RlLWJhc2UiXSxyZXF1aXJlczpbImV2ZW50LWN1c3RvbS1iYXNlIl19LCJldmVudC1iYXNlLWllIjp7YWZ0ZXI6WyJldmVudC1iYXNlIl0sY29uZGl0aW9uOntuYW1lOiJldmVudC1iYXNlLWllIix0ZXN0OmZ1bmN0aW9uKHEpe3JldHVybihxPXEuY29uZmlnLmRvYyYmcS5jb25maWcuZG9jLmltcGxlbWVudGF0aW9uKSYmCiFxLmhhc0ZlYXR1cmUoIkV2ZW50cyIsIjIuMCIpfSx0cmlnZ2VyOiJub2RlLWJhc2UifSxyZXF1aXJlczpbIm5vZGUtYmFzZSJdfSwiZXZlbnQtY29udGV4dG1lbnUiOntyZXF1aXJlczpbImV2ZW50LXN5bnRoZXRpYyIsImRvbS1zY3JlZW4iXX0sImV2ZW50LWN1c3RvbSI6e3VzZTpbImV2ZW50LWN1c3RvbS1iYXNlIiwiZXZlbnQtY3VzdG9tLWNvbXBsZXgiXX0sImV2ZW50LWN1c3RvbS1iYXNlIjp7cmVxdWlyZXM6WyJvb3AiXX0sImV2ZW50LWN1c3RvbS1jb21wbGV4Ijp7cmVxdWlyZXM6WyJldmVudC1jdXN0b20tYmFzZSJdfSwiZXZlbnQtZGVsZWdhdGUiOntyZXF1aXJlczpbIm5vZGUtYmFzZSJdfSwiZXZlbnQtZmxpY2siOntyZXF1aXJlczpbIm5vZGUtYmFzZSIsImV2ZW50LXRvdWNoIiwiZXZlbnQtc3ludGhldGljIl19LCJldmVudC1mb2N1cyI6e3JlcXVpcmVzOlsiZXZlbnQtc3ludGhldGljIl19LCJldmVudC1nZXN0dXJlcyI6e3VzZTpbImV2ZW50LWZsaWNrIiwiZXZlbnQtbW92ZSJdfSwKImV2ZW50LWhvdmVyIjp7cmVxdWlyZXM6WyJldmVudC1tb3VzZWVudGVyIl19LCJldmVudC1rZXkiOntyZXF1aXJlczpbImV2ZW50LXN5bnRoZXRpYyJdfSwiZXZlbnQtbW91c2VlbnRlciI6e3JlcXVpcmVzOlsiZXZlbnQtc3ludGhldGljIl19LCJldmVudC1tb3VzZXdoZWVsIjp7cmVxdWlyZXM6WyJub2RlLWJhc2UiXX0sImV2ZW50LW1vdmUiOntyZXF1aXJlczpbIm5vZGUtYmFzZSIsImV2ZW50LXRvdWNoIiwiZXZlbnQtc3ludGhldGljIl19LCJldmVudC1vdXRzaWRlIjp7cmVxdWlyZXM6WyJldmVudC1zeW50aGV0aWMiXX0sImV2ZW50LXJlc2l6ZSI6e3JlcXVpcmVzOlsibm9kZS1iYXNlIiwiZXZlbnQtc3ludGhldGljIl19LCJldmVudC1zaW11bGF0ZSI6e3JlcXVpcmVzOlsiZXZlbnQtYmFzZSJdfSwiZXZlbnQtc3ludGhldGljIjp7cmVxdWlyZXM6WyJub2RlLWJhc2UiLCJldmVudC1jdXN0b20tY29tcGxleCJdfSwiZXZlbnQtdGFwIjp7cmVxdWlyZXM6WyJub2RlLWJhc2UiLAoiZXZlbnQtYmFzZSIsImV2ZW50LXRvdWNoIiwiZXZlbnQtc3ludGhldGljIl19LCJldmVudC10b3VjaCI6e3JlcXVpcmVzOlsibm9kZS1iYXNlIl19LCJldmVudC12YWx1ZWNoYW5nZSI6e3JlcXVpcmVzOlsiZXZlbnQtZm9jdXMiLCJldmVudC1zeW50aGV0aWMiXX0sImV4ZWMtY29tbWFuZCI6e3JlcXVpcmVzOlsiZnJhbWUiXX0sZmVhdHVyZXM6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sZmlsZTp7cmVxdWlyZXM6WyJmaWxlLWZsYXNoIiwiZmlsZS1odG1sNSJdfSwiZmlsZS1mbGFzaCI6e3JlcXVpcmVzOlsiYmFzZSJdfSwiZmlsZS1odG1sNSI6e3JlcXVpcmVzOlsiYmFzZSJdfSxmcmFtZTp7cmVxdWlyZXM6WyJiYXNlIiwibm9kZSIsInBsdWdpbiIsInNlbGVjdG9yLWNzczMiLCJ5dWktdGhyb3R0bGUiXX0sImdlc3R1cmUtc2ltdWxhdGUiOntyZXF1aXJlczpbImFzeW5jLXF1ZXVlIiwiZXZlbnQtc2ltdWxhdGUiLCJub2RlLXNjcmVlbiJdfSxnZXQ6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sCmdyYXBoaWNzOntyZXF1aXJlczpbIm5vZGUiLCJldmVudC1jdXN0b20iLCJwbHVnaW5ob3N0IiwibWF0cml4IiwiY2xhc3NuYW1lbWFuYWdlciJdfSwiZ3JhcGhpY3MtY2FudmFzIjp7Y29uZGl0aW9uOntuYW1lOiJncmFwaGljcy1jYW52YXMiLHRlc3Q6ZnVuY3Rpb24ocSl7dmFyIHQ9cS5jb25maWcuZG9jO3E9cS5jb25maWcuZGVmYXVsdEdyYXBoaWNFbmdpbmUmJiJjYW52YXMiPT1xLmNvbmZpZy5kZWZhdWx0R3JhcGhpY0VuZ2luZTt2YXIgZj10JiZ0LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybighKHQmJnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZSIsIjEuMSIpKXx8cSkmJmYmJmYuZ2V0Q29udGV4dCYmZi5nZXRDb250ZXh0KCIyZCIpfSx0cmlnZ2VyOiJncmFwaGljcyJ9LHJlcXVpcmVzOlsiZ3JhcGhpY3MiLCJjb2xvci1iYXNlIl19LCJncmFwaGljcy1jYW52YXMtZGVmYXVsdCI6e2NvbmRpdGlvbjp7bmFtZToiZ3JhcGhpY3MtY2FudmFzLWRlZmF1bHQiLAp0ZXN0OmZ1bmN0aW9uKHEpe3ZhciB0PXEuY29uZmlnLmRvYztxPXEuY29uZmlnLmRlZmF1bHRHcmFwaGljRW5naW5lJiYiY2FudmFzIj09cS5jb25maWcuZGVmYXVsdEdyYXBoaWNFbmdpbmU7dmFyIGY9dCYmdC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4oISh0JiZ0LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjQmFzaWNTdHJ1Y3R1cmUiLCIxLjEiKSl8fHEpJiZmJiZmLmdldENvbnRleHQmJmYuZ2V0Q29udGV4dCgiMmQiKX0sdHJpZ2dlcjoiZ3JhcGhpY3MifX0sImdyYXBoaWNzLWdyb3VwIjp7cmVxdWlyZXM6WyJncmFwaGljcyJdfSwiZ3JhcGhpY3Mtc3ZnIjp7Y29uZGl0aW9uOntuYW1lOiJncmFwaGljcy1zdmciLHRlc3Q6ZnVuY3Rpb24ocSl7dmFyIHQ9cS5jb25maWcuZG9jO3E9IXEuY29uZmlnLmRlZmF1bHRHcmFwaGljRW5naW5lfHwiY2FudmFzIiE9cS5jb25maWcuZGVmYXVsdEdyYXBoaWNFbmdpbmU7CnZhciBmPXQmJnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cmV0dXJuIHQmJnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZSIsIjEuMSIpJiYocXx8IWYpfSx0cmlnZ2VyOiJncmFwaGljcyJ9LHJlcXVpcmVzOlsiZ3JhcGhpY3MiXX0sImdyYXBoaWNzLXN2Zy1kZWZhdWx0Ijp7Y29uZGl0aW9uOntuYW1lOiJncmFwaGljcy1zdmctZGVmYXVsdCIsdGVzdDpmdW5jdGlvbihxKXt2YXIgdD1xLmNvbmZpZy5kb2M7cT0hcS5jb25maWcuZGVmYXVsdEdyYXBoaWNFbmdpbmV8fCJjYW52YXMiIT1xLmNvbmZpZy5kZWZhdWx0R3JhcGhpY0VuZ2luZTt2YXIgZj10JiZ0LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiB0JiZ0LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjQmFzaWNTdHJ1Y3R1cmUiLCIxLjEiKSYmKHF8fCFmKX0sdHJpZ2dlcjoiZ3JhcGhpY3MifX0sCiJncmFwaGljcy12bWwiOntjb25kaXRpb246e25hbWU6ImdyYXBoaWNzLXZtbCIsdGVzdDpmdW5jdGlvbihxKXt2YXIgdD0ocT1xLmNvbmZpZy5kb2MpJiZxLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBxJiYhcS5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0Jhc2ljU3RydWN0dXJlIiwiMS4xIikmJighdHx8IXQuZ2V0Q29udGV4dHx8IXQuZ2V0Q29udGV4dCgiMmQiKSl9LHRyaWdnZXI6ImdyYXBoaWNzIn0scmVxdWlyZXM6WyJncmFwaGljcyIsImNvbG9yLWJhc2UiXX0sImdyYXBoaWNzLXZtbC1kZWZhdWx0Ijp7Y29uZGl0aW9uOntuYW1lOiJncmFwaGljcy12bWwtZGVmYXVsdCIsdGVzdDpmdW5jdGlvbihxKXt2YXIgdD0ocT1xLmNvbmZpZy5kb2MpJiZxLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBxJiYhcS5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0Jhc2ljU3RydWN0dXJlIiwKIjEuMSIpJiYoIXR8fCF0LmdldENvbnRleHR8fCF0LmdldENvbnRleHQoIjJkIikpfSx0cmlnZ2VyOiJncmFwaGljcyJ9fSxoYW5kbGViYXJzOnt1c2U6WyJoYW5kbGViYXJzLWNvbXBpbGVyIl19LCJoYW5kbGViYXJzLWJhc2UiOntyZXF1aXJlczpbXX0sImhhbmRsZWJhcnMtY29tcGlsZXIiOntyZXF1aXJlczpbImhhbmRsZWJhcnMtYmFzZSJdfSxoaWdobGlnaHQ6e3VzZTpbImhpZ2hsaWdodC1iYXNlIiwiaGlnaGxpZ2h0LWFjY2VudGZvbGQiXX0sImhpZ2hsaWdodC1hY2NlbnRmb2xkIjp7cmVxdWlyZXM6WyJoaWdobGlnaHQtYmFzZSIsInRleHQtYWNjZW50Zm9sZCJdfSwiaGlnaGxpZ2h0LWJhc2UiOntyZXF1aXJlczpbImFycmF5LWV4dHJhcyIsImNsYXNzbmFtZW1hbmFnZXIiLCJlc2NhcGUiLCJ0ZXh0LXdvcmRicmVhayJdfSxoaXN0b3J5Ont1c2U6WyJoaXN0b3J5LWJhc2UiLCJoaXN0b3J5LWhhc2giLCJoaXN0b3J5LWh0bWw1Il19LCJoaXN0b3J5LWJhc2UiOntyZXF1aXJlczpbImV2ZW50LWN1c3RvbS1jb21wbGV4Il19LAoiaGlzdG9yeS1oYXNoIjp7YWZ0ZXI6WyJoaXN0b3J5LWh0bWw1Il0scmVxdWlyZXM6WyJldmVudC1zeW50aGV0aWMiLCJoaXN0b3J5LWJhc2UiLCJ5dWktbGF0ZXIiXX0sImhpc3RvcnktaGFzaC1pZSI6e2NvbmRpdGlvbjp7bmFtZToiaGlzdG9yeS1oYXNoLWllIix0ZXN0OmZ1bmN0aW9uKHEpe3ZhciB0PXEuY29uZmlnLmRvYyYmcS5jb25maWcuZG9jLmRvY3VtZW50TW9kZTtyZXR1cm4gcS5VQS5pZSYmKCEoIm9uaGFzaGNoYW5nZSJpbiBxLmNvbmZpZy53aW4pfHwhdHx8OD50KX0sdHJpZ2dlcjoiaGlzdG9yeS1oYXNoIn0scmVxdWlyZXM6WyJoaXN0b3J5LWhhc2giLCJub2RlLWJhc2UiXX0sImhpc3RvcnktaHRtbDUiOntvcHRpb25hbDpbImpzb24iXSxyZXF1aXJlczpbImV2ZW50LWJhc2UiLCJoaXN0b3J5LWJhc2UiLCJub2RlLWJhc2UiXX0saW1hZ2Vsb2FkZXI6e3JlcXVpcmVzOlsiYmFzZS1iYXNlIiwibm9kZS1zdHlsZSIsIm5vZGUtc2NyZWVuIl19LGludGw6e3JlcXVpcmVzOlsiaW50bC1iYXNlIiwKImV2ZW50LWN1c3RvbSJdfSwiaW50bC1iYXNlIjp7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSxpbzp7dXNlOlsiaW8tYmFzZSIsImlvLXhkciIsImlvLWZvcm0iLCJpby11cGxvYWQtaWZyYW1lIiwiaW8tcXVldWUiXX0sImlvLWJhc2UiOntyZXF1aXJlczpbImV2ZW50LWN1c3RvbS1iYXNlIiwicXVlcnlzdHJpbmctc3RyaW5naWZ5LXNpbXBsZSJdfSwiaW8tZm9ybSI6e3JlcXVpcmVzOlsiaW8tYmFzZSIsIm5vZGUtYmFzZSJdfSwiaW8tbm9kZWpzIjp7Y29uZGl0aW9uOntuYW1lOiJpby1ub2RlanMiLHRyaWdnZXI6ImlvLWJhc2UiLHVhOiJub2RlanMifSxyZXF1aXJlczpbImlvLWJhc2UiXX0sImlvLXF1ZXVlIjp7cmVxdWlyZXM6WyJpby1iYXNlIiwicXVldWUtcHJvbW90ZSJdfSwiaW8tdXBsb2FkLWlmcmFtZSI6e3JlcXVpcmVzOlsiaW8tYmFzZSIsIm5vZGUtYmFzZSJdfSwiaW8teGRyIjp7cmVxdWlyZXM6WyJpby1iYXNlIiwiZGF0YXR5cGUteG1sLXBhcnNlIl19LGpzb246e3VzZTpbImpzb24tcGFyc2UiLAoianNvbi1zdHJpbmdpZnkiXX0sImpzb24tcGFyc2UiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJqc29uLXBhcnNlLXNoaW0iOntjb25kaXRpb246e25hbWU6Impzb24tcGFyc2Utc2hpbSIsdGVzdDpmdW5jdGlvbihxKXtmdW5jdGlvbiB0KGMsYil7cmV0dXJuIm9rIj09PWM/ITA6Yn12YXIgZj1xLmNvbmZpZy5nbG9iYWwuSlNPTixmPSJbb2JqZWN0IEpTT05dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmKSYmZjtpZihxPSExIT09cS5jb25maWcudXNlTmF0aXZlSlNPTlBhcnNlJiYhIWYpdHJ5e3E9Zi5wYXJzZSgneyJvayI6ZmFsc2V9Jyx0KS5va31jYXRjaChkKXtxPSExfXJldHVybiFxfSx0cmlnZ2VyOiJqc29uLXBhcnNlIn0scmVxdWlyZXM6WyJqc29uLXBhcnNlIl19LCJqc29uLXN0cmluZ2lmeSI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sImpzb24tc3RyaW5naWZ5LXNoaW0iOntjb25kaXRpb246e25hbWU6Impzb24tc3RyaW5naWZ5LXNoaW0iLHRlc3Q6ZnVuY3Rpb24ocSl7dmFyIHQ9CnEuY29uZmlnLmdsb2JhbC5KU09OLHQ9IltvYmplY3QgSlNPTl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiZ0O2lmKHE9ITEhPT1xLmNvbmZpZy51c2VOYXRpdmVKU09OU3RyaW5naWZ5JiYhIXQpdHJ5e3E9IjAiPT09dC5zdHJpbmdpZnkoMCl9Y2F0Y2goZil7cT0hMX1yZXR1cm4hcX0sdHJpZ2dlcjoianNvbi1zdHJpbmdpZnkifSxyZXF1aXJlczpbImpzb24tc3RyaW5naWZ5Il19LGpzb25wOntyZXF1aXJlczpbImdldCIsIm9vcCJdfSwianNvbnAtdXJsIjp7cmVxdWlyZXM6WyJqc29ucCJdfSwibGF6eS1tb2RlbC1saXN0Ijp7cmVxdWlyZXM6WyJtb2RlbC1saXN0Il19LGxvYWRlcjp7dXNlOlsibG9hZGVyLWJhc2UiLCJsb2FkZXItcm9sbHVwIiwibG9hZGVyLXl1aTMiXX0sImxvYWRlci1iYXNlIjp7cmVxdWlyZXM6WyJnZXQiLCJmZWF0dXJlcyJdfSwibG9hZGVyLXBhdGhvZ2VuLWNvbWJvaGFuZGxlciI6e30sImxvYWRlci1wYXRob2dlbi1lbmNvZGVyIjp7dXNlOlsibG9hZGVyLWJhc2UiLAoibG9hZGVyLXJvbGx1cCIsImxvYWRlci15dWkzIiwibG9hZGVyLXBhdGhvZ2VuLWNvbWJvaGFuZGxlciJdfSwibG9hZGVyLXJvbGx1cCI6e3JlcXVpcmVzOlsibG9hZGVyLWJhc2UiXX0sImxvYWRlci15dWkzIjp7cmVxdWlyZXM6WyJsb2FkZXItYmFzZSJdfSxtYXRyaXg6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sbW9kZWw6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsImVzY2FwZSIsImpzb24tcGFyc2UiXX0sIm1vZGVsLWxpc3QiOntyZXF1aXJlczoiYXJyYXktZXh0cmFzIGFycmF5LWludm9rZSBhcnJheWxpc3QgYmFzZS1idWlsZCBlc2NhcGUganNvbi1wYXJzZSBtb2RlbCIuc3BsaXQoIiAiKX0sIm1vZGVsLXN5bmMtbG9jYWwiOntyZXF1aXJlczpbIm1vZGVsIiwianNvbi1zdHJpbmdpZnkiXX0sIm1vZGVsLXN5bmMtcmVzdCI6e3JlcXVpcmVzOlsibW9kZWwiLCJpby1iYXNlIiwianNvbi1zdHJpbmdpZnkiXX0sbm9kZTp7dXNlOlsibm9kZS1iYXNlIiwibm9kZS1ldmVudC1kZWxlZ2F0ZSIsCiJub2RlLXBsdWdpbmhvc3QiLCJub2RlLXNjcmVlbiIsIm5vZGUtc3R5bGUiXX0sIm5vZGUtYmFzZSI6e3JlcXVpcmVzOlsiZXZlbnQtYmFzZSIsIm5vZGUtY29yZSIsImRvbS1iYXNlIiwiZG9tLXN0eWxlIl19LCJub2RlLWNvcmUiOntyZXF1aXJlczpbImRvbS1jb3JlIiwic2VsZWN0b3IiXX0sIm5vZGUtZXZlbnQtZGVsZWdhdGUiOntyZXF1aXJlczpbIm5vZGUtYmFzZSIsImV2ZW50LWRlbGVnYXRlIl19LCJub2RlLWV2ZW50LWh0bWw1Ijp7cmVxdWlyZXM6WyJub2RlLWJhc2UiXX0sIm5vZGUtZXZlbnQtc2ltdWxhdGUiOntyZXF1aXJlczpbIm5vZGUtYmFzZSIsImV2ZW50LXNpbXVsYXRlIiwiZ2VzdHVyZS1zaW11bGF0ZSJdfSwibm9kZS1mbGljayI6e3JlcXVpcmVzOlsiY2xhc3NuYW1lbWFuYWdlciIsInRyYW5zaXRpb24iLCJldmVudC1mbGljayIsInBsdWdpbiJdLHNraW5uYWJsZTohMH0sIm5vZGUtZm9jdXNtYW5hZ2VyIjp7cmVxdWlyZXM6ImF0dHJpYnV0ZSBub2RlIHBsdWdpbiBub2RlLWV2ZW50LXNpbXVsYXRlIGV2ZW50LWtleSBldmVudC1mb2N1cyIuc3BsaXQoIiAiKX0sCiJub2RlLWxvYWQiOntyZXF1aXJlczpbIm5vZGUtYmFzZSIsImlvLWJhc2UiXX0sIm5vZGUtbWVudW5hdiI6e3JlcXVpcmVzOlsibm9kZSIsImNsYXNzbmFtZW1hbmFnZXIiLCJwbHVnaW4iLCJub2RlLWZvY3VzbWFuYWdlciJdLHNraW5uYWJsZTohMH0sIm5vZGUtcGx1Z2luaG9zdCI6e3JlcXVpcmVzOlsibm9kZS1iYXNlIiwicGx1Z2luaG9zdCJdfSwibm9kZS1zY3JlZW4iOntyZXF1aXJlczpbImRvbS1zY3JlZW4iLCJub2RlLWJhc2UiXX0sIm5vZGUtc2Nyb2xsLWluZm8iOntyZXF1aXJlczoiYXJyYXktZXh0cmFzIGJhc2UtYnVpbGQgZXZlbnQtcmVzaXplIG5vZGUtcGx1Z2luaG9zdCBwbHVnaW4gc2VsZWN0b3IiLnNwbGl0KCIgIil9LCJub2RlLXN0eWxlIjp7cmVxdWlyZXM6WyJkb20tc3R5bGUiLCJub2RlLWJhc2UiXX0sb29wOntyZXF1aXJlczpbInl1aS1iYXNlIl19LG92ZXJsYXk6e3JlcXVpcmVzOiJ3aWRnZXQgd2lkZ2V0LXN0ZG1vZCB3aWRnZXQtcG9zaXRpb24gd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1zdGFjayB3aWRnZXQtcG9zaXRpb24tY29uc3RyYWluIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LHBhZ2luYXRvcjp7cmVxdWlyZXM6WyJwYWdpbmF0b3ItY29yZSJdfSwicGFnaW5hdG9yLWNvcmUiOntyZXF1aXJlczpbImJhc2UiXX0sInBhZ2luYXRvci11cmwiOntyZXF1aXJlczpbInBhZ2luYXRvciJdfSxwYW5lbDp7cmVxdWlyZXM6IndpZGdldCB3aWRnZXQtYXV0b2hpZGUgd2lkZ2V0LWJ1dHRvbnMgd2lkZ2V0LW1vZGFsaXR5IHdpZGdldC1wb3NpdGlvbiB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiB3aWRnZXQtc3RhY2sgd2lkZ2V0LXN0ZG1vZCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LHBhcmFsbGVsOntyZXF1aXJlczpbInl1aS1iYXNlIl19LHBqYXg6e3JlcXVpcmVzOlsicGpheC1iYXNlIiwicGpheC1jb250ZW50Il19LCJwamF4LWJhc2UiOntyZXF1aXJlczpbImNsYXNzbmFtZW1hbmFnZXIiLCJub2RlLWV2ZW50LWRlbGVnYXRlIiwicm91dGVyIl19LCJwamF4LWNvbnRlbnQiOntyZXF1aXJlczpbImlvLWJhc2UiLAoibm9kZS1iYXNlIiwicm91dGVyIl19LCJwamF4LXBsdWdpbiI6e3JlcXVpcmVzOlsibm9kZS1wbHVnaW5ob3N0IiwicGpheCIsInBsdWdpbiJdfSxwbHVnaW46e3JlcXVpcmVzOlsiYmFzZS1iYXNlIl19LHBsdWdpbmhvc3Q6e3VzZTpbInBsdWdpbmhvc3QtYmFzZSIsInBsdWdpbmhvc3QtY29uZmlnIl19LCJwbHVnaW5ob3N0LWJhc2UiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJwbHVnaW5ob3N0LWNvbmZpZyI6e3JlcXVpcmVzOlsicGx1Z2luaG9zdC1iYXNlIl19LHByb21pc2U6e3JlcXVpcmVzOlsidGltZXJzIl19LHF1ZXJ5c3RyaW5nOnt1c2U6WyJxdWVyeXN0cmluZy1wYXJzZSIsInF1ZXJ5c3RyaW5nLXN0cmluZ2lmeSJdfSwicXVlcnlzdHJpbmctcGFyc2UiOntyZXF1aXJlczpbInl1aS1iYXNlIiwiYXJyYXktZXh0cmFzIl19LCJxdWVyeXN0cmluZy1wYXJzZS1zaW1wbGUiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJxdWVyeXN0cmluZy1zdHJpbmdpZnkiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LAoicXVlcnlzdHJpbmctc3RyaW5naWZ5LXNpbXBsZSI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sInF1ZXVlLXByb21vdGUiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJyYW5nZS1zbGlkZXIiOntyZXF1aXJlczpbInNsaWRlci1iYXNlIiwic2xpZGVyLXZhbHVlLXJhbmdlIiwiY2xpY2thYmxlLXJhaWwiXX0scmVjb3Jkc2V0Ont1c2U6WyJyZWNvcmRzZXQtYmFzZSIsInJlY29yZHNldC1zb3J0IiwicmVjb3Jkc2V0LWZpbHRlciIsInJlY29yZHNldC1pbmRleGVyIl19LCJyZWNvcmRzZXQtYmFzZSI6e3JlcXVpcmVzOlsiYmFzZSIsImFycmF5bGlzdCJdfSwicmVjb3Jkc2V0LWZpbHRlciI6e3JlcXVpcmVzOlsicmVjb3Jkc2V0LWJhc2UiLCJhcnJheS1leHRyYXMiLCJwbHVnaW4iXX0sInJlY29yZHNldC1pbmRleGVyIjp7cmVxdWlyZXM6WyJyZWNvcmRzZXQtYmFzZSIsInBsdWdpbiJdfSwicmVjb3Jkc2V0LXNvcnQiOntyZXF1aXJlczpbImFycmF5c29ydCIsInJlY29yZHNldC1iYXNlIiwKInBsdWdpbiJdfSxyZXNpemU6e3VzZTpbInJlc2l6ZS1iYXNlIiwicmVzaXplLXByb3h5IiwicmVzaXplLWNvbnN0cmFpbiJdfSwicmVzaXplLWJhc2UiOntyZXF1aXJlczoiYmFzZSB3aWRnZXQgZXZlbnQgb29wIGRkLWRyYWcgZGQtZGVsZWdhdGUgZGQtZHJvcCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJyZXNpemUtY29uc3RyYWluIjp7cmVxdWlyZXM6WyJwbHVnaW4iLCJyZXNpemUtYmFzZSJdfSwicmVzaXplLXBsdWdpbiI6e29wdGlvbmFsOlsicmVzaXplLWNvbnN0cmFpbiJdLHJlcXVpcmVzOlsicmVzaXplLWJhc2UiLCJwbHVnaW4iXX0sInJlc2l6ZS1wcm94eSI6e3JlcXVpcmVzOlsicGx1Z2luIiwicmVzaXplLWJhc2UiXX0scm91dGVyOntvcHRpb25hbDpbInF1ZXJ5c3RyaW5nLXBhcnNlIl0scmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLCJiYXNlLWJ1aWxkIiwiaGlzdG9yeSJdfSxzY3JvbGx2aWV3OntyZXF1aXJlczpbInNjcm9sbHZpZXctYmFzZSIsInNjcm9sbHZpZXctc2Nyb2xsYmFycyJdfSwKInNjcm9sbHZpZXctYmFzZSI6e3JlcXVpcmVzOlsid2lkZ2V0IiwiZXZlbnQtZ2VzdHVyZXMiLCJldmVudC1tb3VzZXdoZWVsIiwidHJhbnNpdGlvbiJdLHNraW5uYWJsZTohMH0sInNjcm9sbHZpZXctYmFzZS1pZSI6e2NvbmRpdGlvbjp7bmFtZToic2Nyb2xsdmlldy1iYXNlLWllIix0cmlnZ2VyOiJzY3JvbGx2aWV3LWJhc2UiLHVhOiJpZSJ9LHJlcXVpcmVzOlsic2Nyb2xsdmlldy1iYXNlIl19LCJzY3JvbGx2aWV3LWxpc3QiOntyZXF1aXJlczpbInBsdWdpbiIsImNsYXNzbmFtZW1hbmFnZXIiXSxza2lubmFibGU6ITB9LCJzY3JvbGx2aWV3LXBhZ2luYXRvciI6e3JlcXVpcmVzOlsicGx1Z2luIiwiY2xhc3NuYW1lbWFuYWdlciJdfSwic2Nyb2xsdmlldy1zY3JvbGxiYXJzIjp7cmVxdWlyZXM6WyJjbGFzc25hbWVtYW5hZ2VyIiwidHJhbnNpdGlvbiIsInBsdWdpbiJdLHNraW5uYWJsZTohMH0sc2VsZWN0b3I6e3JlcXVpcmVzOlsic2VsZWN0b3ItbmF0aXZlIl19LCJzZWxlY3Rvci1jc3MyIjp7Y29uZGl0aW9uOntuYW1lOiJzZWxlY3Rvci1jc3MyIiwKdGVzdDpmdW5jdGlvbihxKXtyZXR1cm4ocT1xLmNvbmZpZy5kb2MpJiYhKCJxdWVyeVNlbGVjdG9yQWxsImluIHEpfSx0cmlnZ2VyOiJzZWxlY3RvciJ9LHJlcXVpcmVzOlsic2VsZWN0b3ItbmF0aXZlIl19LCJzZWxlY3Rvci1jc3MzIjp7cmVxdWlyZXM6WyJzZWxlY3Rvci1uYXRpdmUiLCJzZWxlY3Rvci1jc3MyIl19LCJzZWxlY3Rvci1uYXRpdmUiOntyZXF1aXJlczpbImRvbS1iYXNlIl19LCJzZXJpZXMtYXJlYSI6e3JlcXVpcmVzOlsic2VyaWVzLWNhcnRlc2lhbiIsInNlcmllcy1maWxsLXV0aWwiXX0sInNlcmllcy1hcmVhLXN0YWNrZWQiOntyZXF1aXJlczpbInNlcmllcy1zdGFja2VkIiwic2VyaWVzLWFyZWEiXX0sInNlcmllcy1hcmVhc3BsaW5lIjp7cmVxdWlyZXM6WyJzZXJpZXMtYXJlYSIsInNlcmllcy1jdXJ2ZS11dGlsIl19LCJzZXJpZXMtYXJlYXNwbGluZS1zdGFja2VkIjp7cmVxdWlyZXM6WyJzZXJpZXMtc3RhY2tlZCIsInNlcmllcy1hcmVhc3BsaW5lIl19LCJzZXJpZXMtYmFyIjp7cmVxdWlyZXM6WyJzZXJpZXMtbWFya2VyIiwKInNlcmllcy1oaXN0b2dyYW0tYmFzZSJdfSwic2VyaWVzLWJhci1zdGFja2VkIjp7cmVxdWlyZXM6WyJzZXJpZXMtc3RhY2tlZCIsInNlcmllcy1iYXIiXX0sInNlcmllcy1iYXNlIjp7cmVxdWlyZXM6WyJncmFwaGljcyIsImF4aXMtYmFzZSJdfSwic2VyaWVzLWNhbmRsZXN0aWNrIjp7cmVxdWlyZXM6WyJzZXJpZXMtcmFuZ2UiXX0sInNlcmllcy1jYXJ0ZXNpYW4iOntyZXF1aXJlczpbInNlcmllcy1iYXNlIl19LCJzZXJpZXMtY29sdW1uIjp7cmVxdWlyZXM6WyJzZXJpZXMtbWFya2VyIiwic2VyaWVzLWhpc3RvZ3JhbS1iYXNlIl19LCJzZXJpZXMtY29sdW1uLXN0YWNrZWQiOntyZXF1aXJlczpbInNlcmllcy1zdGFja2VkIiwic2VyaWVzLWNvbHVtbiJdfSwic2VyaWVzLWNvbWJvIjp7cmVxdWlyZXM6WyJzZXJpZXMtY2FydGVzaWFuIiwic2VyaWVzLWxpbmUtdXRpbCIsInNlcmllcy1wbG90LXV0aWwiLCJzZXJpZXMtZmlsbC11dGlsIl19LCJzZXJpZXMtY29tYm8tc3RhY2tlZCI6e3JlcXVpcmVzOlsic2VyaWVzLXN0YWNrZWQiLAoic2VyaWVzLWNvbWJvIl19LCJzZXJpZXMtY29tYm9zcGxpbmUiOntyZXF1aXJlczpbInNlcmllcy1jb21ibyIsInNlcmllcy1jdXJ2ZS11dGlsIl19LCJzZXJpZXMtY29tYm9zcGxpbmUtc3RhY2tlZCI6e3JlcXVpcmVzOlsic2VyaWVzLWNvbWJvLXN0YWNrZWQiLCJzZXJpZXMtY3VydmUtdXRpbCJdfSwic2VyaWVzLWN1cnZlLXV0aWwiOnt9LCJzZXJpZXMtZmlsbC11dGlsIjp7fSwic2VyaWVzLWhpc3RvZ3JhbS1iYXNlIjp7cmVxdWlyZXM6WyJzZXJpZXMtY2FydGVzaWFuIiwic2VyaWVzLXBsb3QtdXRpbCJdfSwic2VyaWVzLWxpbmUiOntyZXF1aXJlczpbInNlcmllcy1jYXJ0ZXNpYW4iLCJzZXJpZXMtbGluZS11dGlsIl19LCJzZXJpZXMtbGluZS1zdGFja2VkIjp7cmVxdWlyZXM6WyJzZXJpZXMtc3RhY2tlZCIsInNlcmllcy1saW5lIl19LCJzZXJpZXMtbGluZS11dGlsIjp7fSwic2VyaWVzLW1hcmtlciI6e3JlcXVpcmVzOlsic2VyaWVzLWNhcnRlc2lhbiIsInNlcmllcy1wbG90LXV0aWwiXX0sCiJzZXJpZXMtbWFya2VyLXN0YWNrZWQiOntyZXF1aXJlczpbInNlcmllcy1zdGFja2VkIiwic2VyaWVzLW1hcmtlciJdfSwic2VyaWVzLW9obGMiOntyZXF1aXJlczpbInNlcmllcy1yYW5nZSJdfSwic2VyaWVzLXBpZSI6e3JlcXVpcmVzOlsic2VyaWVzLWJhc2UiLCJzZXJpZXMtcGxvdC11dGlsIl19LCJzZXJpZXMtcGxvdC11dGlsIjp7fSwic2VyaWVzLXJhbmdlIjp7cmVxdWlyZXM6WyJzZXJpZXMtY2FydGVzaWFuIl19LCJzZXJpZXMtc3BsaW5lIjp7cmVxdWlyZXM6WyJzZXJpZXMtbGluZSIsInNlcmllcy1jdXJ2ZS11dGlsIl19LCJzZXJpZXMtc3BsaW5lLXN0YWNrZWQiOntyZXF1aXJlczpbInNlcmllcy1zdGFja2VkIiwic2VyaWVzLXNwbGluZSJdfSwic2VyaWVzLXN0YWNrZWQiOntyZXF1aXJlczpbImF4aXMtc3RhY2tlZCJdfSwic2hpbS1wbHVnaW4iOntyZXF1aXJlczpbIm5vZGUtc3R5bGUiLCJub2RlLXBsdWdpbmhvc3QiXX0sc2xpZGVyOnt1c2U6WyJzbGlkZXItYmFzZSIsCiJzbGlkZXItdmFsdWUtcmFuZ2UiLCJjbGlja2FibGUtcmFpbCIsInJhbmdlLXNsaWRlciJdfSwic2xpZGVyLWJhc2UiOntyZXF1aXJlczpbIndpZGdldCIsImRkLWNvbnN0cmFpbiIsImV2ZW50LWtleSJdLHNraW5uYWJsZTohMH0sInNsaWRlci12YWx1ZS1yYW5nZSI6e3JlcXVpcmVzOlsic2xpZGVyLWJhc2UiXX0sc29ydGFibGU6e3JlcXVpcmVzOlsiZGQtZGVsZWdhdGUiLCJkZC1kcm9wLXBsdWdpbiIsImRkLXByb3h5Il19LCJzb3J0YWJsZS1zY3JvbGwiOntyZXF1aXJlczpbImRkLXNjcm9sbCIsInNvcnRhYmxlIl19LHN0eWxlc2hlZXQ6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sc3Vic3RpdHV0ZTp7b3B0aW9uYWw6WyJkdW1wIl0scmVxdWlyZXM6WyJ5dWktYmFzZSJdfSxzd2Y6e3JlcXVpcmVzOlsiZXZlbnQtY3VzdG9tIiwibm9kZSIsInN3ZmRldGVjdCIsImVzY2FwZSJdfSxzd2ZkZXRlY3Q6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sdGFidmlldzp7cmVxdWlyZXM6IndpZGdldCB3aWRnZXQtcGFyZW50IHdpZGdldC1jaGlsZCB0YWJ2aWV3LWJhc2Ugbm9kZS1wbHVnaW5ob3N0IG5vZGUtZm9jdXNtYW5hZ2VyIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LCJ0YWJ2aWV3LWJhc2UiOntyZXF1aXJlczpbIm5vZGUtZXZlbnQtZGVsZWdhdGUiLCJjbGFzc25hbWVtYW5hZ2VyIl19LCJ0YWJ2aWV3LXBsdWdpbiI6e3JlcXVpcmVzOlsidGFidmlldy1iYXNlIl19LHRlbXBsYXRlOnt1c2U6WyJ0ZW1wbGF0ZS1iYXNlIiwidGVtcGxhdGUtbWljcm8iXX0sInRlbXBsYXRlLWJhc2UiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJ0ZW1wbGF0ZS1taWNybyI6e3JlcXVpcmVzOlsiZXNjYXBlIl19LHRlc3Q6e3JlcXVpcmVzOlsiZXZlbnQtc2ltdWxhdGUiLCJldmVudC1jdXN0b20iLCJqc29uLXN0cmluZ2lmeSJdfSwidGVzdC1jb25zb2xlIjp7cmVxdWlyZXM6WyJjb25zb2xlLWZpbHRlcnMiLCJ0ZXN0IiwiYXJyYXktZXh0cmFzIl0sc2tpbm5hYmxlOiEwfSx0ZXh0Ont1c2U6WyJ0ZXh0LWFjY2VudGZvbGQiLCJ0ZXh0LXdvcmRicmVhayJdfSwidGV4dC1hY2NlbnRmb2xkIjp7cmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLCJ0ZXh0LWRhdGEtYWNjZW50Zm9sZCJdfSwKInRleHQtZGF0YS1hY2NlbnRmb2xkIjp7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSwidGV4dC1kYXRhLXdvcmRicmVhayI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sInRleHQtd29yZGJyZWFrIjp7cmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLCJ0ZXh0LWRhdGEtd29yZGJyZWFrIl19LHRpbWVyczp7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSx0cmFuc2l0aW9uOntyZXF1aXJlczpbIm5vZGUtc3R5bGUiXX0sInRyYW5zaXRpb24tdGltZXIiOntjb25kaXRpb246e25hbWU6InRyYW5zaXRpb24tdGltZXIiLHRlc3Q6ZnVuY3Rpb24ocSl7cT0ocT1xLmNvbmZpZy5kb2MpP3EuZG9jdW1lbnRFbGVtZW50Om51bGw7dmFyIHQ9ITA7cSYmcS5zdHlsZSYmKHQ9ISgiTW96VHJhbnNpdGlvbiJpbiBxLnN0eWxlfHwiV2Via2l0VHJhbnNpdGlvbiJpbiBxLnN0eWxlfHwidHJhbnNpdGlvbiJpbiBxLnN0eWxlKSk7cmV0dXJuIHR9LHRyaWdnZXI6InRyYW5zaXRpb24ifSxyZXF1aXJlczpbInRyYW5zaXRpb24iXX0sCnRyZWU6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsInRyZWUtbm9kZSJdfSwidHJlZS1sYWJlbGFibGUiOntyZXF1aXJlczpbInRyZWUiXX0sInRyZWUtbGF6eSI6e3JlcXVpcmVzOlsiYmFzZS1wbHVnaW5ob3N0IiwicGx1Z2luIiwidHJlZSJdfSwidHJlZS1ub2RlIjp7fSwidHJlZS1vcGVuYWJsZSI6e3JlcXVpcmVzOlsidHJlZSJdfSwidHJlZS1zZWxlY3RhYmxlIjp7cmVxdWlyZXM6WyJ0cmVlIl19LCJ0cmVlLXNvcnRhYmxlIjp7cmVxdWlyZXM6WyJ0cmVlIl19LHVwbG9hZGVyOntyZXF1aXJlczpbInVwbG9hZGVyLWh0bWw1IiwidXBsb2FkZXItZmxhc2giXX0sInVwbG9hZGVyLWZsYXNoIjp7cmVxdWlyZXM6InN3ZmRldGVjdCBlc2NhcGUgd2lkZ2V0IGJhc2UgY3NzYnV0dG9uIG5vZGUgZXZlbnQtY3VzdG9tIHVwbG9hZGVyLXF1ZXVlIi5zcGxpdCgiICIpfSwidXBsb2FkZXItaHRtbDUiOntyZXF1aXJlczpbIndpZGdldCIsIm5vZGUtZXZlbnQtc2ltdWxhdGUiLCJmaWxlLWh0bWw1IiwKInVwbG9hZGVyLXF1ZXVlIl19LCJ1cGxvYWRlci1xdWV1ZSI6e3JlcXVpcmVzOlsiYmFzZSJdfSx2aWV3OntyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJub2RlLWV2ZW50LWRlbGVnYXRlIl19LCJ2aWV3LW5vZGUtbWFwIjp7cmVxdWlyZXM6WyJ2aWV3Il19LHdpZGdldDp7dXNlOlsid2lkZ2V0LWJhc2UiLCJ3aWRnZXQtaHRtbHBhcnNlciIsIndpZGdldC1za2luIiwid2lkZ2V0LXVpZXZlbnRzIl19LCJ3aWRnZXQtYW5pbSI6e3JlcXVpcmVzOlsiYW5pbS1iYXNlIiwicGx1Z2luIiwid2lkZ2V0Il19LCJ3aWRnZXQtYXV0b2hpZGUiOntyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJldmVudC1rZXkiLCJldmVudC1vdXRzaWRlIiwid2lkZ2V0Il19LCJ3aWRnZXQtYmFzZSI6e3JlcXVpcmVzOiJhdHRyaWJ1dGUgYmFzZS1iYXNlIGJhc2UtcGx1Z2luaG9zdCBjbGFzc25hbWVtYW5hZ2VyIGV2ZW50LWZvY3VzIG5vZGUtYmFzZSBub2RlLXN0eWxlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sCiJ3aWRnZXQtYmFzZS1pZSI6e2NvbmRpdGlvbjp7bmFtZToid2lkZ2V0LWJhc2UtaWUiLHRyaWdnZXI6IndpZGdldC1iYXNlIix1YToiaWUifSxyZXF1aXJlczpbIndpZGdldC1iYXNlIl19LCJ3aWRnZXQtYnV0dG9ucyI6e3JlcXVpcmVzOlsiYnV0dG9uLXBsdWdpbiIsImNzc2J1dHRvbiIsIndpZGdldC1zdGRtb2QiXX0sIndpZGdldC1jaGlsZCI6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsIndpZGdldCJdfSwid2lkZ2V0LWh0bWxwYXJzZXIiOntyZXF1aXJlczpbIndpZGdldC1iYXNlIl19LCJ3aWRnZXQtbW9kYWxpdHkiOntyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJldmVudC1vdXRzaWRlIiwid2lkZ2V0Il0sc2tpbm5hYmxlOiEwfSwid2lkZ2V0LXBhcmVudCI6e3JlcXVpcmVzOlsiYXJyYXlsaXN0IiwiYmFzZS1idWlsZCIsIndpZGdldCJdfSwid2lkZ2V0LXBvc2l0aW9uIjp7cmVxdWlyZXM6WyJiYXNlLWJ1aWxkIiwibm9kZS1zY3JlZW4iLCJ3aWRnZXQiXX0sIndpZGdldC1wb3NpdGlvbi1hbGlnbiI6e3JlcXVpcmVzOlsid2lkZ2V0LXBvc2l0aW9uIl19LAoid2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiI6e3JlcXVpcmVzOlsid2lkZ2V0LXBvc2l0aW9uIl19LCJ3aWRnZXQtc2tpbiI6e3JlcXVpcmVzOlsid2lkZ2V0LWJhc2UiXX0sIndpZGdldC1zdGFjayI6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsIndpZGdldCJdLHNraW5uYWJsZTohMH0sIndpZGdldC1zdGRtb2QiOntyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJ3aWRnZXQiXX0sIndpZGdldC11aWV2ZW50cyI6e3JlcXVpcmVzOlsibm9kZS1ldmVudC1kZWxlZ2F0ZSIsIndpZGdldC1iYXNlIl19LHlxbDp7cmVxdWlyZXM6WyJvb3AiXX0sInlxbC1qc29ucCI6e2NvbmRpdGlvbjp7bmFtZToieXFsLWpzb25wIix0ZXN0OmZ1bmN0aW9uKHEpe3JldHVybiFxLlVBLm5vZGVqcyYmIXEuVUEud2luanN9LHRyaWdnZXI6InlxbCJ9LHJlcXVpcmVzOlsieXFsIiwianNvbnAiLCJqc29ucC11cmwiXX0sInlxbC1ub2RlanMiOntjb25kaXRpb246e25hbWU6InlxbC1ub2RlanMiLHRyaWdnZXI6InlxbCIsCnVhOiJub2RlanMifSxyZXF1aXJlczpbInlxbCJdfSwieXFsLXdpbmpzIjp7Y29uZGl0aW9uOntuYW1lOiJ5cWwtd2luanMiLHRyaWdnZXI6InlxbCIsdWE6IndpbmpzIn0scmVxdWlyZXM6WyJ5cWwiXX0seXVpOnt9LCJ5dWktYmFzZSI6e30sInl1aS1sYXRlciI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sInl1aS1sb2ciOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJ5dWktdGhyb3R0bGUiOntyZXF1aXJlczpbInl1aS1iYXNlIl19fSk7WVVJLkVudlthLnZlcnNpb25dLm1kNT0iZjIwMzc3ZDVhYjZkMzcxMzdmNzNlYTc5ZDZlYjQ3NmQifSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJsb2FkZXItYmFzZSJdfSk7WVVJLmFkZCgieXVpIixmdW5jdGlvbihhLEUpe30sInBhdGNoZWQtdjMuMTguMSIse3VzZToieXVpLWJhc2UgZ2V0IGZlYXR1cmVzIGludGwtYmFzZSB5dWktbG9nIHl1aS1sYXRlciBsb2FkZXItYmFzZSBsb2FkZXItcm9sbHVwIGxvYWRlci15dWkzIi5zcGxpdCgiICIpfSk7CllVSS5hZGQoImF1aS1iYXNlLWNvcmUiLGZ1bmN0aW9uKGEsRSl7WVVJLkVudi5hbGlhc2VzPVlVSS5FbnYuYWxpYXNlc3x8e307YS5taXgoWVVJLkVudi5hbGlhc2VzLHsiYXVpLWF1dG9zaXplIjpbImF1aS1hdXRvc2l6ZS1pZnJhbWUiXSwiYXVpLWJhc2UiOiJvb3AgeXVpLXRocm90dGxlIGF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS1kZWJvdW5jZSBhdWktYmFzZS1jb3JlIGF1aS1iYXNlLWxhbmcgYXVpLW5vZGUtYmFzZSIuc3BsaXQoIiAiKSwiYXVpLWJhc2UtZGVwcmVjYXRlZCI6ImF1aS1iYXNlIGF1aS1ub2RlIGF1aS1jb21wb25lbnQgYXVpLWRlbGF5ZWQtdGFzay1kZXByZWNhdGVkIGF1aS1zZWxlY3RvciBhdWktZXZlbnQtYmFzZSIuc3BsaXQoIiAiKSwiYXVpLWJ1dHRvbiI6WyJhdWktYnV0dG9uLWNvcmUiXSwiYXVpLWNvbGxlY3Rpb24iOlsiYXVpLW1hcCIsImF1aS1zZXQiLCJhdWktbGlua2Vkc2V0Il0sImF1aS1jb2xvci1waWNrZXItZGVwcmVjYXRlZCI6WyJhdWktY29sb3ItcGlja2VyLWJhc2UtZGVwcmVjYXRlZCIsCiJhdWktY29sb3ItcGlja2VyLWdyaWQtcGx1Z2luLWRlcHJlY2F0ZWQiXSwiYXVpLWRhdGFzb3VyY2UtY29udHJvbC1kZXByZWNhdGVkIjpbImF1aS1kYXRhc291cmNlLWNvbnRyb2wtYmFzZS1kZXByZWNhdGVkIiwiYXVpLWlucHV0LXRleHQtY29udHJvbC1kZXByZWNhdGVkIl0sImF1aS1kYXRhdGFibGUiOlsiYXVpLWRhdGF0YWJsZS1lZGl0IiwiYXVpLWRhdGF0YWJsZS1oaWdobGlnaHQiLCJhdWktZGF0YXRhYmxlLXNlbGVjdGlvbiIsImF1aS1kYXRhdGFibGUtcHJvcGVydHktbGlzdCJdLCJhdWktZGF0YXRhYmxlLWVkaXQiOiJkYXRhdGFibGUtYmFzZSBjYWxlbmRhciBvdmVybGF5IHNvcnRhYmxlIGF1aS1kYXRhdHlwZSBhdWktdG9vbGJhciBhdWktZm9ybS12YWxpZGF0b3IgYXVpLWRhdGF0YWJsZS1iYXNlLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtY2VsbC1lZGl0b3Itc3VwcG9ydCBhdWktZGF0YXRhYmxlLWNvcmUgYXVpLWRhdGF0YWJsZS1jaGVja2JveC1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLWRhdGUtY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS1kcm9wZG93bi1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLXJhZGlvLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtdGV4dC1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLXRleHQtYXJlYS1jZWxsLWVkaXRvciIuc3BsaXQoIiAiKSwKImF1aS1kYXRlcGlja2VyLWRlcHJlY2F0ZWQiOlsiYXVpLWRhdGVwaWNrZXItYmFzZS1kZXByZWNhdGVkIiwiYXVpLWRhdGVwaWNrZXItc2VsZWN0LWRlcHJlY2F0ZWQiXSwiYXVpLWV2ZW50IjpbImF1aS1ldmVudC1iYXNlIl0sImF1aS1mb3JtLWRlcHJlY2F0ZWQiOiJhdWktZm9ybS1iYXNlLWRlcHJlY2F0ZWQgYXVpLWZvcm0tY29tYm9ib3gtZGVwcmVjYXRlZCBhdWktZm9ybS1maWVsZC1kZXByZWNhdGVkIGF1aS1mb3JtLXNlbGVjdC1kZXByZWNhdGVkIGF1aS1mb3JtLXRleHRhcmVhLWRlcHJlY2F0ZWQgYXVpLWZvcm0tdGV4dGZpZWxkLWRlcHJlY2F0ZWQiLnNwbGl0KCIgIiksImF1aS1pbyI6WyJhdWktaW8tcmVxdWVzdCJdLCJhdWktaW8tZGVwcmVjYXRlZCI6WyJhdWktaW8tcmVxdWVzdCIsImF1aS1pby1wbHVnaW4tZGVwcmVjYXRlZCJdLCJhdWktbm9kZSI6WyJhdWktbm9kZS1iYXNlIl0sImF1aS1vdmVybGF5LWRlcHJlY2F0ZWQiOlsiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIiwKImF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LWNvbnRleHQtcGFuZWwtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LW1hbmFnZXItZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LW1hc2stZGVwcmVjYXRlZCJdLCJhdWktcmF0aW5nIjpbImF1aS1yYXRpbmctYmFzZSIsImF1aS1yYXRpbmctdGh1bWIiXSwiYXVpLXJlc2l6ZS1kZXByZWNhdGVkIjpbImF1aS1yZXNpemUtYmFzZS1kZXByZWNhdGVkIiwiYXVpLXJlc2l6ZS1jb25zdHJhaW4tZGVwcmVjYXRlZCJdLCJhdWktc2NoZWR1bGVyIjoiZXZlbnQtZ2VzdHVyZXMgYXVpLXNjaGVkdWxlci1iYXNlIGF1aS1zY2hlZHVsZXItZXZlbnQtcmVjb3JkZXIgYXVpLXNjaGVkdWxlci12aWV3LWFnZW5kYSBhdWktc2NoZWR1bGVyLXZpZXctZGF5IGF1aS1zY2hlZHVsZXItdmlldy1tb250aCBhdWktc2NoZWR1bGVyLXZpZXctdGFibGUtZGQgYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlIGF1aS1zY2hlZHVsZXItdmlldy13ZWVrIGF1aS12aWV3cG9ydCIuc3BsaXQoIiAiKSwKImF1aS1zZWFyY2giOlsiYXVpLXNlYXJjaC10c3QiXSwiYXVpLXNvcnRhYmxlIjpbImF1aS1zb3J0YWJsZS1sYXlvdXQiLCJhdWktc29ydGFibGUtbGlzdCJdLCJhdWktc3VyZmFjZSI6WyJhdWktc3VyZmFjZS1hcHAiLCJhdWktc3VyZmFjZS1zY3JlZW4iXSwiYXVpLXRvZ2dsZXIiOlsiYXVpLXRvZ2dsZXItYmFzZSIsImF1aS10b2dnbGVyLWRlbGVnYXRlIl0sImF1aS10b29sdGlwIjpbImF1aS10b29sdGlwLWJhc2UiLCJhdWktdG9vbHRpcC1kZWxlZ2F0ZSJdLCJhdWktdHBsLXNuaXBwZXRzLWRlcHJlY2F0ZWQiOlsiYXVpLXRwbC1zbmlwcGV0cy1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktdHBsLXNuaXBwZXRzLWNoZWNrYm94LWRlcHJlY2F0ZWQiLCJhdWktdHBsLXNuaXBwZXRzLWlucHV0LWRlcHJlY2F0ZWQiLCJhdWktdHBsLXNuaXBwZXRzLXNlbGVjdC1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy10ZXh0YXJlYS1kZXByZWNhdGVkIl0sImF1aS10cmVlIjpbImF1aS10cmVlLWRhdGEiLAoiYXVpLXRyZWUtaW8iLCJhdWktdHJlZS1ub2RlIiwiYXVpLXRyZWUtcGFnaW5hdG9yIiwiYXVpLXRyZWUtdmlldyJdLCJhdWktd2lkZ2V0IjpbImF1aS13aWRnZXQtY3NzY2xhc3MiLCJhdWktd2lkZ2V0LXRvb2xiYXJzIl0sImF1aS13aWRnZXQtY29yZSI6WyJhdWktd2lkZ2V0LWNzc2NsYXNzIl19KTtZVUkuRW52W2EudmVyc2lvbl0ubW9kdWxlcz1ZVUkuRW52W2EudmVyc2lvbl0ubW9kdWxlc3x8e307YS5taXgoWVVJLkVudlthLnZlcnNpb25dLm1vZHVsZXMseyJhdWktYWNlLWF1dG9jb21wbGV0ZS1iYXNlIjp7cmVxdWlyZXM6WyJhdWktYWNlLWVkaXRvciJdfSwiYXVpLWFjZS1hdXRvY29tcGxldGUtZnJlZW1hcmtlciI6e3JlcXVpcmVzOlsiYXVpLWFjZS1hdXRvY29tcGxldGUtdGVtcGxhdGVwcm9jZXNzb3IiXX0sImF1aS1hY2UtYXV0b2NvbXBsZXRlLWxpc3QiOntyZXF1aXJlczpbImF1aS1hY2UtYXV0b2NvbXBsZXRlLWJhc2UiLCJvdmVybGF5Iiwid2lkZ2V0LWF1dG9oaWRlIl0sCnNraW5uYWJsZTohMH0sImF1aS1hY2UtYXV0b2NvbXBsZXRlLXBsdWdpbiI6e3JlcXVpcmVzOlsiYXVpLWFjZS1hdXRvY29tcGxldGUtbGlzdCIsInBsdWdpbiJdfSwiYXVpLWFjZS1hdXRvY29tcGxldGUtdGVtcGxhdGVwcm9jZXNzb3IiOntyZXF1aXJlczpbImF1aS1hY2UtYXV0b2NvbXBsZXRlLWJhc2UiXX0sImF1aS1hY2UtYXV0b2NvbXBsZXRlLXZlbG9jaXR5Ijp7cmVxdWlyZXM6WyJhdWktYWNlLWF1dG9jb21wbGV0ZS10ZW1wbGF0ZXByb2Nlc3NvciJdfSwiYXVpLWFjZS1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1ub2RlIiwiYXVpLWNvbXBvbmVudCJdfSwiYXVpLWFmZml4Ijp7cmVxdWlyZXM6WyJiYXNlIiwibm9kZS1zY3JlZW4iLCJhdWktbm9kZSJdfSwiYXVpLWFsZXJ0Ijp7cmVxdWlyZXM6InRpbWVycyB3aWRnZXQgd2lkZ2V0LXN0ZG1vZCBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdHJhbnNpdGlvbiIuc3BsaXQoIiAiKSwKc2tpbm5hYmxlOiEwfSwiYXVpLWFyaWEiOntyZXF1aXJlczpbInBsdWdpbiIsImF1aS1jb21wb25lbnQiXX0sImF1aS1hcmlhLXRhYmxlLXNvcnRhYmxlIjp7cmVxdWlyZXM6WyJhdWktYXJpYSJdfSwiYXVpLWFycmF5c29ydCI6e3JlcXVpcmVzOlsiYXJyYXlzb3J0Il19LCJhdWktYXVkaW8iOntyZXF1aXJlczpbImF1aS1hcmlhIiwiYXVpLW5vZGUiLCJhdWktY29tcG9uZW50IiwicXVlcnlzdHJpbmctc3RyaW5naWZ5LXNpbXBsZSJdLHNraW5uYWJsZTohMH0sImF1aS1hdXRvY29tcGxldGUtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LWJhc2UtZGVwcmVjYXRlZCIsImRhdGFzb3VyY2UiLCJkYXRhc2NoZW1hIiwiYXVpLWZvcm0tY29tYm9ib3gtZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1hdXRvc2l6ZSI6e3VzZTpbImF1aS1hdXRvc2l6ZS1pZnJhbWUiXX0sImF1aS1hdXRvc2l6ZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJldmVudC12YWx1ZWNoYW5nZSIsCiJwbHVnaW4iLCJhdWktYmFzZS1kZXByZWNhdGVkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWF1dG9zaXplLWlmcmFtZSI6e3JlcXVpcmVzOlsicGx1Z2luIiwiYXVpLWNvbXBvbmVudCIsImF1aS10aW1lciIsImF1aS1ub2RlLWJhc2UiXX0sImF1aS1iYXNlIjp7dXNlOiJvb3AgeXVpLXRocm90dGxlIGF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS1kZWJvdW5jZSBhdWktYmFzZS1jb3JlIGF1aS1iYXNlLWxhbmcgYXVpLW5vZGUtYmFzZSIuc3BsaXQoIiAiKX0sImF1aS1iYXNlLWNvcmUiOnt9LCJhdWktYmFzZS1kZXByZWNhdGVkIjp7dXNlOiJhdWktYmFzZSBhdWktbm9kZSBhdWktY29tcG9uZW50IGF1aS1kZWxheWVkLXRhc2stZGVwcmVjYXRlZCBhdWktc2VsZWN0b3IgYXVpLWV2ZW50LWJhc2UiLnNwbGl0KCIgIil9LCJhdWktYmFzZS1odG1sNS1zaGl2Ijp7Y29uZGl0aW9uOntuYW1lOiJhdWktYmFzZS1odG1sNS1zaGl2Iix0cmlnZ2VyOiJub2RlLWJhc2UiLHVhOiJpZSJ9fSwiYXVpLWJhc2UtbGFuZyI6e30sCiJhdWktYm9vbGVhbi1kYXRhLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWJ1dHRvbi1zd2l0Y2giLCJhdWktZGF0YS1lZGl0b3IiXX0sImF1aS1idXR0b24iOnt1c2U6WyJhdWktYnV0dG9uLWNvcmUiXX0sImF1aS1idXR0b24tY29yZSI6e3JlcXVpcmVzOiJidXR0b24gYnV0dG9uLWdyb3VwIGJ1dHRvbi1wbHVnaW4gYXVpLWNvbXBvbmVudCBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1idXR0b24taXRlbS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktYmFzZS1kZXByZWNhdGVkIiwiYXVpLXN0YXRlLWludGVyYWN0aW9uLWRlcHJlY2F0ZWQiLCJ3aWRnZXQtY2hpbGQiXSxza2lubmFibGU6ITB9LCJhdWktYnV0dG9uLXNlYXJjaC1jYW5jZWwiOntyZXF1aXJlczoiYXJyYXktaW52b2tlIGJhc2UgYmFzZS1idWlsZCBldmVudC1mb2N1cyBldmVudC1tb3ZlIGV2ZW50LXJlc2l6ZSBub2RlLXNjcmVlbiBub2RlLWV2ZW50LWRlbGVnYXRlIGF1aS1ub2RlLWJhc2UgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLWV2ZW50LWlucHV0Ii5zcGxpdCgiICIpfSwKImF1aS1idXR0b24tc3dpdGNoIjp7cmVxdWlyZXM6WyJhdWktbm9kZS1iYXNlIiwiYmFzZS1idWlsZCIsImV2ZW50LWtleSIsInRyYW5zaXRpb24iLCJ3aWRnZXQiXSxza2lubmFibGU6ITB9LCJhdWktY2Fyb3VzZWwiOntyZXF1aXJlczoiYW5pbSBhdWktZXZlbnQgYXVpLWltYWdlLXZpZXdlci1iYXNlIGF1aS1pbWFnZS12aWV3ZXItc2xpZGVzaG93IG5vZGUtZXZlbnQtZGVsZWdhdGUgbm9kZS1mb2N1c21hbmFnZXIiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWNhcm91c2VsLW1vYmlsZS10b3VjaCI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWNhcm91c2VsLW1vYmlsZS10b3VjaCIsdGVzdDpmdW5jdGlvbihxKXtyZXR1cm4gcS5VQS5tb2JpbGUmJnEuVUEudG91Y2hFbmFibGVkfSx0cmlnZ2VyOiJhdWktY2Fyb3VzZWwifSxyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJhdWktY2Fyb3VzZWwiXX0sImF1aS1jYXJvdXNlbC1zd2lwZSI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWNhcm91c2VsLXN3aXBlIiwKdHJpZ2dlcjoiYXVpLWNhcm91c2VsIix1YToidG91Y2hFbmFibGVkIn0scmVxdWlyZXM6WyJhdWktY2Fyb3VzZWwiLCJhdWktd2lkZ2V0LXN3aXBlIiwiYmFzZS1idWlsZCJdLHNraW5uYWJsZTohMH0sImF1aS1jaGFyLWNvdW50ZXIiOntyZXF1aXJlczpbImF1aS1hcmlhIiwiYXVpLW5vZGUiLCJhdWktZXZlbnQtaW5wdXQiLCJhdWktY29tcG9uZW50Il19LCJhdWktY2hhcnQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiZGF0YXNvdXJjZSIsImpzb24iLCJhdWktc3dmLWRlcHJlY2F0ZWQiXX0sImF1aS1jbGFzc25hbWVtYW5hZ2VyIjp7cmVxdWlyZXM6WyJjbGFzc25hbWVtYW5hZ2VyIl19LCJhdWktY29sbGVjdGlvbiI6e3VzZTpbImF1aS1tYXAiLCJhdWktc2V0IiwiYXVpLWxpbmtlZHNldCJdfSwiYXVpLWNvbG9yLXBhbGV0dGUiOntyZXF1aXJlczoiYXJyYXktZXh0cmFzIGF1aS1wYWxldHRlIGNvbG9yLWJhc2Ugbm9kZS1jb3JlIGF1aS13aWRnZXQtY3NzY2xhc3MgYXVpLXdpZGdldC10b2dnbGUiLnNwbGl0KCIgIiksCnNraW5uYWJsZTohMH0sImF1aS1jb2xvci1waWNrZXItYmFzZSI6e3JlcXVpcmVzOlsiYXVpLWNvbG9yLXBhbGV0dGUiLCJhdWktaHN2YS1wYWxldHRlLW1vZGFsIiwiZXZlbnQtb3V0c2lkZSJdLHNraW5uYWJsZTohMH0sImF1aS1jb2xvci1waWNrZXItYmFzZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6ImRkLWRyYWcgcGFuZWwgc2xpZGVyIGF1aS1idXR0b24taXRlbS1kZXByZWNhdGVkIGF1aS1jb2xvci11dGlsLWRlcHJlY2F0ZWQgYXVpLWZvcm0tYmFzZS1kZXByZWNhdGVkIGF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktY29sb3ItcGlja2VyLWRlcHJlY2F0ZWQiOnt1c2U6WyJhdWktY29sb3ItcGlja2VyLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1jb2xvci1waWNrZXItZ3JpZC1wbHVnaW4tZGVwcmVjYXRlZCJdfSwiYXVpLWNvbG9yLXBpY2tlci1ncmlkLXBsdWdpbi1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJwbHVnaW4iLAoiYXVpLWNvbG9yLXBpY2tlci1iYXNlLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktY29sb3ItcGlja2VyLXBvcG92ZXIiOntyZXF1aXJlczpbImF1aS1jb2xvci1waWNrZXItYmFzZSIsImF1aS1wb3BvdmVyIiwiYXVpLXdpZGdldC1jc3NjbGFzcyIsImF1aS13aWRnZXQtdG9nZ2xlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWNvbG9yLXV0aWwtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOltdfSwiYXVpLWNvbXBvbmVudCI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktd2lkZ2V0LWNzc2NsYXNzIiwiYXVpLXdpZGdldC10b2dnbGUiLCJiYXNlLWJ1aWxkIiwid2lkZ2V0LWJhc2UiXX0sImF1aS1jc3MiOnt0eXBlOiJjc3MifSwiYXVpLWRhdGEtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImJhc2UtYnVpbGQiLCJub2RlLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktZGF0YS1zZXQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsib29wIiwKImNvbGxlY3Rpb24iLCJiYXNlIl19LCJhdWktZGF0YXNvdXJjZS1jb250cm9sLWJhc2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiZGF0YXNvdXJjZSIsImRhdGFzY2hlbWEiLCJhdWktYmFzZS1kZXByZWNhdGVkIl19LCJhdWktZGF0YXNvdXJjZS1jb250cm9sLWRlcHJlY2F0ZWQiOnt1c2U6WyJhdWktZGF0YXNvdXJjZS1jb250cm9sLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1pbnB1dC10ZXh0LWNvbnRyb2wtZGVwcmVjYXRlZCJdfSwiYXVpLWRhdGF0YWJsZSI6e3VzZTpbImF1aS1kYXRhdGFibGUtZWRpdCIsImF1aS1kYXRhdGFibGUtaGlnaGxpZ2h0IiwiYXVpLWRhdGF0YWJsZS1zZWxlY3Rpb24iLCJhdWktZGF0YXRhYmxlLXByb3BlcnR5LWxpc3QiXX0sImF1aS1kYXRhdGFibGUtYmFzZS1jZWxsLWVkaXRvciI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWJhc2UiLCJvdmVybGF5Il0sc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGF0YWJsZS1iYXNlLW9wdGlvbnMtY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1jZWxsLWVkaXRvciIsCiJlc2NhcGUiXSxza2lubmFibGU6ITB9LCJhdWktZGF0YXRhYmxlLWJvZHkiOntyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiZGF0YXRhYmxlLWJhc2UiLCJldmVudC1rZXkiLCJhdWktZXZlbnQtYmFzZSJdfSwiYXVpLWRhdGF0YWJsZS1jZWxsLWVkaXRvci1zdXBwb3J0Ijp7cmVxdWlyZXM6WyJkYXRhdGFibGUtYmFzZSJdfSwiYXVpLWRhdGF0YWJsZS1jaGVja2JveC1jZWxsLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1iYXNlLW9wdGlvbnMtY2VsbC1lZGl0b3IiXX0sImF1aS1kYXRhdGFibGUtY29yZSI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1ib2R5IiwiZGF0YXRhYmxlLWJhc2UiLCJldmVudC1rZXkiLCJhdWktZXZlbnQtYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1kYXRhdGFibGUtZGF0ZS1jZWxsLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1iYXNlLW9wdGlvbnMtY2VsbC1lZGl0b3IiXX0sImF1aS1kYXRhdGFibGUtZHJvcGRvd24tY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIl19LAoiYXVpLWRhdGF0YWJsZS1lZGl0Ijp7dXNlOiJkYXRhdGFibGUtYmFzZSBjYWxlbmRhciBvdmVybGF5IHNvcnRhYmxlIGF1aS1kYXRhdHlwZSBhdWktdG9vbGJhciBhdWktZm9ybS12YWxpZGF0b3IgYXVpLWRhdGF0YWJsZS1iYXNlLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtY2VsbC1lZGl0b3Itc3VwcG9ydCBhdWktZGF0YXRhYmxlLWNvcmUgYXVpLWRhdGF0YWJsZS1jaGVja2JveC1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLWRhdGUtY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS1kcm9wZG93bi1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLXJhZGlvLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtdGV4dC1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLXRleHQtYXJlYS1jZWxsLWVkaXRvciIuc3BsaXQoIiAiKX0sImF1aS1kYXRhdGFibGUtaGlnaGxpZ2h0Ijp7cmVxdWlyZXM6WyJhdWktZGF0YXRhYmxlLXNlbGVjdGlvbiJdLApza2lubmFibGU6ITB9LCJhdWktZGF0YXRhYmxlLXByb3BlcnR5LWxpc3QiOntyZXF1aXJlczoiZGF0YXRhYmxlLXNjcm9sbCBkYXRhdGFibGUtc29ydCBhdWktZGF0YXRhYmxlLWNvcmUgYXVpLWRhdGF0YWJsZS1lZGl0IGF1aS1kYXRhdGFibGUtaGlnaGxpZ2h0IGF1aS1kYXRhdGFibGUtc2VsZWN0aW9uIGF1aS13aWRnZXQtY3NzY2xhc3MgYXVpLXdpZGdldC10b2dnbGUiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGF0YWJsZS1yYWRpby1jZWxsLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1iYXNlLW9wdGlvbnMtY2VsbC1lZGl0b3IiXX0sImF1aS1kYXRhdGFibGUtc2VsZWN0aW9uIjp7cmVxdWlyZXM6WyJhdWktZGF0YXRhYmxlLWNvcmUiXSxza2lubmFibGU6ITB9LCJhdWktZGF0YXRhYmxlLXRleHQtYXJlYS1jZWxsLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1iYXNlLW9wdGlvbnMtY2VsbC1lZGl0b3IiXX0sImF1aS1kYXRhdGFibGUtdGV4dC1jZWxsLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1iYXNlLW9wdGlvbnMtY2VsbC1lZGl0b3IiXX0sCiJhdWktZGF0YXR5cGUiOntyZXF1aXJlczpbImRhdGF0eXBlIiwiYXVpLWRhdGF0eXBlLWRhdGUtcGFyc2UiXX0sImF1aS1kYXRhdHlwZS1kYXRlLXBhcnNlIjp7cmVxdWlyZXM6WyJhdWktYmFzZS1sYW5nIiwiZGF0YXR5cGUtZGF0ZS1mb3JtYXQiLCJkYXRhdHlwZS1kYXRlLXBhcnNlIiwiaW50bCJdfSwiYXVpLWRhdGVwaWNrZXIiOntyZXF1aXJlczoiYXVpLWFyaWEgYXVpLWRhdGVwaWNrZXItZGVsZWdhdGUgYXVpLWRhdGVwaWNrZXItcG9wb3ZlciBiYXNlIGJhc2UtYnVpbGQgY2FsZW5kYXIiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGVwaWNrZXItYmFzZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJjYWxlbmRhciIsImF1aS1kYXRhdHlwZSIsImF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1kYXRlcGlja2VyLWRlbGVnYXRlIjp7cmVxdWlyZXM6WyJhdWktZGF0YXR5cGUtZGF0ZS1wYXJzZSIsImF1aS1ldmVudC1pbnB1dCIsCiJldmVudC1mb2N1cyIsIm5vZGUtZXZlbnQtZGVsZWdhdGUiXX0sImF1aS1kYXRlcGlja2VyLWRlcHJlY2F0ZWQiOntza2lubmFibGU6ITAsdXNlOlsiYXVpLWRhdGVwaWNrZXItYmFzZS1kZXByZWNhdGVkIiwiYXVpLWRhdGVwaWNrZXItc2VsZWN0LWRlcHJlY2F0ZWQiXX0sImF1aS1kYXRlcGlja2VyLW5hdGl2ZSI6e3JlcXVpcmVzOlsiYXVpLWRhdGVwaWNrZXItZGVsZWdhdGUiLCJhdWktbm9kZS1iYXNlIiwiYmFzZSIsImJhc2UtYnVpbGQiXX0sImF1aS1kYXRlcGlja2VyLXBvcG92ZXIiOntyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiYXVpLXBvcG92ZXIiXX0sImF1aS1kYXRlcGlja2VyLXNlbGVjdC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZGF0ZXBpY2tlci1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktYnV0dG9uLWl0ZW0tZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1kZWJvdW5jZSI6e30sImF1aS1kZWxheWVkLXRhc2stZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sCiJhdWktZGlhZ3JhbS1idWlsZGVyIjp7cmVxdWlyZXM6ImF1aS1hcmlhIGF1aS1tYXAgYXVpLXByb3BlcnR5LWJ1aWxkZXIgYXVpLWRpYWdyYW0tYnVpbGRlci1jb25uZWN0b3IgYXVpLXByb3BlcnR5LWJ1aWxkZXItc2V0dGluZ3MgYXVpLWRpYWdyYW0tbm9kZS1jb25kaXRpb24gYXVpLWRpYWdyYW0tbm9kZS1lbmQgYXVpLWRpYWdyYW0tbm9kZS1mb3JrIGF1aS1kaWFncmFtLW5vZGUtam9pbiBhdWktZGlhZ3JhbS1ub2RlLXN0YXJ0IGF1aS1kaWFncmFtLW5vZGUtc3RhdGUgYXVpLWRpYWdyYW0tbm9kZS10YXNrIG92ZXJsYXkiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWRpYWdyYW0tYnVpbGRlci1jb25uZWN0b3IiOntyZXF1aXJlczoiYXJyYXlsaXN0LWFkZCBhcnJheWxpc3QtZmlsdGVyIGVzY2FwZSBqc29uIGdyYXBoaWNzIGRkIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1kaWFncmFtLW5vZGUiOntyZXF1aXJlczpbImF1aS1hcmlhIiwiYXVpLWRpYWdyYW0tbm9kZS1tYW5hZ2VyLWJhc2UiLAoiZXNjYXBlIiwib3ZlcmxheSJdfSwiYXVpLWRpYWdyYW0tbm9kZS1jb25kaXRpb24iOntyZXF1aXJlczpbImF1aS1kaWFncmFtLW5vZGUtc3RhdGUiXX0sImF1aS1kaWFncmFtLW5vZGUtZW5kIjp7cmVxdWlyZXM6WyJhdWktZGlhZ3JhbS1ub2RlLXN0YXRlIl19LCJhdWktZGlhZ3JhbS1ub2RlLWZvcmsiOntyZXF1aXJlczpbImF1aS1kaWFncmFtLW5vZGUtc3RhdGUiXX0sImF1aS1kaWFncmFtLW5vZGUtam9pbiI6e3JlcXVpcmVzOlsiYXVpLWRpYWdyYW0tbm9kZS1zdGF0ZSJdfSwiYXVpLWRpYWdyYW0tbm9kZS1tYW5hZ2VyLWJhc2UiOntyZXF1aXJlczpbImJhc2UiXX0sImF1aS1kaWFncmFtLW5vZGUtc3RhcnQiOntyZXF1aXJlczpbImF1aS1kaWFncmFtLW5vZGUtc3RhdGUiXX0sImF1aS1kaWFncmFtLW5vZGUtc3RhdGUiOntyZXF1aXJlczpbImF1aS1kaWFncmFtLW5vZGUiXX0sImF1aS1kaWFncmFtLW5vZGUtdGFzayI6e3JlcXVpcmVzOlsiYXVpLWRpYWdyYW0tbm9kZS1zdGF0ZSJdfSwKImF1aS1kaWFsb2ctaWZyYW1lLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbInBsdWdpbiIsImFycmF5LWludm9rZSIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktbG9hZGluZy1tYXNrLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktZHJvcGRvd24iOntyZXF1aXJlczoiZXZlbnQtZGVsZWdhdGUgZXZlbnQta2V5IGV2ZW50LW91dHNpZGUgbm9kZS1mb2N1c21hbmFnZXIgd2lkZ2V0IHdpZGdldC1zdGFjayBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktbm9kZSBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIGF1aS13aWRnZXQtdHJpZ2dlciIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktZWRpdGFibGUtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1mb3JtLWNvbWJvYm94LWRlcHJlY2F0ZWQiLCJlc2NhcGUiLCJldmVudC1yZXNpemUiXSxza2lubmFibGU6ITB9LCJhdWktZXZlbnQiOnt1c2U6WyJhdWktZXZlbnQtYmFzZSJdfSwKImF1aS1ldmVudC1iYXNlIjp7cmVxdWlyZXM6WyJldmVudC1iYXNlIl19LCJhdWktZXZlbnQtZGVsZWdhdGUtY2hhbmdlIjp7Y29uZGl0aW9uOntuYW1lOiJhdWktZXZlbnQtZGVsZWdhdGUtY2hhbmdlIix0cmlnZ2VyOiJldmVudC1iYXNlLWllIix1YToiaWUifSxyZXF1aXJlczpbImF1aS1ldmVudC1iYXNlIiwiZXZlbnQtZGVsZWdhdGUiLCJldmVudC1zeW50aGV0aWMiXX0sImF1aS1ldmVudC1kZWxlZ2F0ZS1zdWJtaXQiOntjb25kaXRpb246e25hbWU6ImF1aS1ldmVudC1kZWxlZ2F0ZS1zdWJtaXQiLHRyaWdnZXI6ImV2ZW50LWJhc2UtaWUiLHVhOiJpZSJ9LHJlcXVpcmVzOlsiYXVpLWV2ZW50LWJhc2UiLCJldmVudC1kZWxlZ2F0ZSIsImV2ZW50LXN5bnRoZXRpYyJdfSwiYXVpLWV2ZW50LWlucHV0Ijp7Y29uZGl0aW9uOntuYW1lOiJhdWktZXZlbnQtaW5wdXQiLHRlc3Q6ZnVuY3Rpb24ocSl7dmFyIHQ9cS5zdXBwb3J0c0RPTUV2ZW50LGY9cS5GZWF0dXJlcy50ZXN0LGQ9cS5GZWF0dXJlcy5hZGQ7CnZvaWQgMD09PWYoImV2ZW50IiwiaW5wdXQiKSYmZCgiZXZlbnQiLCJpbnB1dCIse3Rlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLCJpbnB1dCIpJiYoIXEuVUEuaWV8fDk8cS5VQS5pZSl9fSk7cmV0dXJuIWYoImV2ZW50IiwiaW5wdXQiKX0sdHJpZ2dlcjoiYXVpLWV2ZW50LWJhc2UifSxyZXF1aXJlczpbImF1aS1ldmVudC1iYXNlIiwiZXZlbnQtZGVsZWdhdGUiLCJldmVudC1zeW50aGV0aWMiLCJ0aW1lcnMiXX0sImF1aS1mb3JtLWJhc2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiaW8tZm9ybSIsInF1ZXJ5c3RyaW5nLXBhcnNlIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1kYXRhLXNldC1kZXByZWNhdGVkIiwiYXVpLWZvcm0tZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tYnVpbGRlciI6e3JlcXVpcmVzOiJhdWktbW9kYWwgYXVpLWxheW91dCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLWxpc3QgYXVpLWZvcm0tYnVpbGRlci1maWVsZC10b29sYmFyIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdHlwZSBhdWktZm9ybS1idWlsZGVyLWZpZWxkLXR5cGVzIGF1aS1mb3JtLWJ1aWxkZXItbGF5b3V0LWJ1aWxkZXIgYXVpLWZvcm0tYnVpbGRlci1wYWdlLW1hbmFnZXIgYXVpLWZvcm0tYnVpbGRlci1zZXR0aW5ncy1tb2RhbCBldmVudC1mb2N1cyBldmVudC10YXAiLnNwbGl0KCIgIiksCnNraW5uYWJsZTohMH0sImF1aS1mb3JtLWJ1aWxkZXItYXZhaWxhYmxlLWZpZWxkLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1wcm9wZXJ0eS1idWlsZGVyLWF2YWlsYWJsZS1maWVsZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1kZXByZWNhdGVkIjp7cmVxdWlyZXM6ImF1aS1idXR0b24gYXVpLWNvbGxlY3Rpb24gYXVpLWZvcm0tYnVpbGRlci1hdmFpbGFibGUtZmllbGQtZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1idXR0b24tZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLWNoZWNrYm94LWRlcHJlY2F0ZWQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1maWVsZHNldC1kZXByZWNhdGVkIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZmlsZS11cGxvYWQtZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLW11bHRpcGxlLWNob2ljZS1kZXByZWNhdGVkIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtcmFkaW8tZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLXNlbGVjdC1kZXByZWNhdGVkIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdGV4dC1kZXByZWNhdGVkIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdGV4dGFyZWEtZGVwcmVjYXRlZCBhdWktcHJvcGVydHktYnVpbGRlciBhdWktcHJvcGVydHktYnVpbGRlci1zZXR0aW5ncyBhdWktc29ydGFibGUtbGlzdCBhdWktdGFidmlldyBhdWktdG9vbHRpcC1iYXNlIGVzY2FwZSB0cmFuc2l0aW9uIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWJhc2UiOntyZXF1aXJlczoiYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLW5vZGUtYmFzZSBhdWktdGV4dC1kYXRhLWVkaXRvciBhdWktdG9nZ2xlciBiYXNlIG5vZGUtYmFzZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWJ1dHRvbi1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtY2hlY2tib3gtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIl19LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWNob2ljZSI6e3JlcXVpcmVzOlsiYXVpLWJvb2xlYW4tZGF0YS1lZGl0b3IiLCJhdWktb3B0aW9ucy1kYXRhLWVkaXRvciIsImF1aS10YWJzLWRhdGEtZWRpdG9yIiwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1iYXNlIiwiYXVpLWZvcm0tZmllbGQtY2hvaWNlIl19LAoiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJwYW5lbCIsImF1aS1kYXRhdHlwZSIsImF1aS1kYXRhdGFibGUtZWRpdCIsImF1aS1wcm9wZXJ0eS1idWlsZGVyLWZpZWxkLXN1cHBvcnQiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWZpZWxkc2V0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1maWxlLXVwbG9hZC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtbGlzdCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10eXBlIiwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10eXBlcyIsImF1aS1mb3JtLWJ1aWxkZXItbGF5b3V0LWJ1aWxkZXIiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLW11bHRpcGxlLWNob2ljZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sCiJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXJhZGlvLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1zZWxlY3QtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIl19LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXNlbnRlbmNlIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWJhc2UiLCJhdWktZm9ybS1maWVsZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10ZXh0Ijp7cmVxdWlyZXM6WyJhdWktYm9vbGVhbi1kYXRhLWVkaXRvciIsImF1aS1yYWRpby1ncm91cC1kYXRhLWVkaXRvciIsImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtYmFzZSIsImF1aS1mb3JtLWZpZWxkLXRleHQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdGV4dC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sCiJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXRleHRhcmVhLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10b29sYmFyIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImJhc2UiLCJub2RlLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXR5cGUiOntyZXF1aXJlczpbImJhc2UiLCJub2RlLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXR5cGVzIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdHlwZXMtbW9kYWwiLCJiYXNlIiwibm9kZS1iYXNlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10eXBlcy1tb2RhbCI6e3JlcXVpcmVzOlsiYXVpLW1vZGFsIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1sYXlvdXQtYnVpbGRlciI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLAoiYXVpLWxheW91dC1idWlsZGVyIiwiYXVpLW1vZGFsIiwiYmFzZSIsIm5vZGUtYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWJ1aWxkZXItcGFnZS1tYW5hZ2VyIjp7cmVxdWlyZXM6ImF1aS1wYWdpbmF0aW9uIGF1aS1wb3BvdmVyIGF1aS10YWJ2aWV3IGJhc2UgZXZlbnQtdmFsdWVjaGFuZ2Ugbm9kZS1iYXNlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWJ1aWxkZXItc2V0dGluZ3MtbW9kYWwiOntyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiYXVpLW1vZGFsIiwiYmFzZSIsIm5vZGUtYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWNvbWJvYm94LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLXRleHRhcmVhLWRlcHJlY2F0ZWQiLCJhdWktdG9vbGJhciJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWRlcHJlY2F0ZWQiOnt1c2U6ImF1aS1mb3JtLWJhc2UtZGVwcmVjYXRlZCBhdWktZm9ybS1jb21ib2JveC1kZXByZWNhdGVkIGF1aS1mb3JtLWZpZWxkLWRlcHJlY2F0ZWQgYXVpLWZvcm0tc2VsZWN0LWRlcHJlY2F0ZWQgYXVpLWZvcm0tdGV4dGFyZWEtZGVwcmVjYXRlZCBhdWktZm9ybS10ZXh0ZmllbGQtZGVwcmVjYXRlZCIuc3BsaXQoIiAiKX0sCiJhdWktZm9ybS1maWVsZCI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktbm9kZS1iYXNlIiwiYmFzZS1idWlsZCJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWZpZWxkLWNob2ljZSI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tZmllbGQtcmVxdWlyZWQiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1maWVsZC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktYmFzZS1kZXByZWNhdGVkIiwiYXVpLWNvbXBvbmVudCJdfSwiYXVpLWZvcm0tZmllbGQtcmVxdWlyZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWZpZWxkIl19LCJhdWktZm9ybS1maWVsZC10ZXh0Ijp7cmVxdWlyZXM6WyJhdWktZm9ybS1maWVsZC1yZXF1aXJlZCJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLXNlbGVjdC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1maWVsZC1kZXByZWNhdGVkIl19LCJhdWktZm9ybS10ZXh0YXJlYS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJub2RlLXBsdWdpbmhvc3QiLAoiYXVpLWF1dG9zaXplLWRlcHJlY2F0ZWQiLCJhdWktZm9ybS10ZXh0ZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tdGV4dGZpZWxkLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLXZhbGlkYXRvciI6e3JlcXVpcmVzOiJlc2NhcGUgc2VsZWN0b3ItY3NzMyBub2RlLWV2ZW50LWRlbGVnYXRlIGF1aS1ub2RlIGF1aS1jb21wb25lbnQgYXVpLWV2ZW50LWlucHV0Ii5zcGxpdCgiICIpfSwiYXVpLWhzdi1wYWxldHRlIjp7cmVxdWlyZXM6ImF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS13aWRnZXQtY3NzY2xhc3MgYXVpLXdpZGdldC10b2dnbGUgYXVpLWV2ZW50LWlucHV0IGJhc2UtYnVpbGQgY2xpY2thYmxlLXJhaWwgY29sb3ItaHN2IGRkLWNvbnN0cmFpbiBzbGlkZXIgd2lkZ2V0Ii5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1oc3ZhLXBhbGV0dGUiOntyZXF1aXJlczpbImF1aS1oc3YtcGFsZXR0ZSJdLHNraW5uYWJsZTohMH0sCiJhdWktaHN2YS1wYWxldHRlLW1vZGFsIjp7cmVxdWlyZXM6WyJhdWktaHN2YS1wYWxldHRlIiwiYXVpLW1vZGFsIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWltYWdlLWNyb3BwZXIiOntyZXF1aXJlczpbInJlc2l6ZS1iYXNlIiwicmVzaXplLWNvbnN0cmFpbiIsImRkLWNvbnN0cmFpbiIsImF1aS1ub2RlLWJhc2UiLCJhdWktY29tcG9uZW50Il0sc2tpbm5hYmxlOiEwfSwiYXVpLWltYWdlLXZpZXdlciI6e3JlcXVpcmVzOiJ3aWRnZXQgd2lkZ2V0LW1vZGFsaXR5IHdpZGdldC1wb3NpdGlvbiB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiB3aWRnZXQtc3RhY2sgd2lkZ2V0LXN0ZG1vZCBhdWktZXZlbnQgYXVpLWltYWdlLXZpZXdlci1iYXNlIGF1aS1pbWFnZS12aWV3ZXItbXVsdGlwbGUgYXVpLWltYWdlLXZpZXdlci1zbGlkZXNob3cgYXVpLW5vZGUtYmFzZSBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LCJhdWktaW1hZ2Utdmlld2VyLWJhc2UiOntyZXF1aXJlczoiYW5pbSBhdWktYXJpYSBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktbm9kZSBhdWktd2lkZ2V0LXJlc3BvbnNpdmUgYmFzZS1idWlsZCBpbWFnZWxvYWRlciBub2RlLWJhc2Ugd2lkZ2V0IHdpZGdldC1zdGFjayIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktaW1hZ2Utdmlld2VyLW1lZGlhIjp7cmVxdWlyZXM6WyJwbHVnaW4iLCJhdWktY29tcG9uZW50IiwiYXVpLWltYWdlLXZpZXdlciJdfSwiYXVpLWltYWdlLXZpZXdlci1tdWx0aXBsZSI6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsIm5vZGUtYmFzZSIsImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiYXVpLWltYWdlLXZpZXdlci1iYXNlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWltYWdlLXZpZXdlci1tdWx0aXBsZS1zd2lwZSI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWltYWdlLXZpZXdlci1tdWx0aXBsZS1zd2lwZSIsdHJpZ2dlcjoiYXVpLWltYWdlLXZpZXdlci1tdWx0aXBsZSIsCnVhOiJ0b3VjaEVuYWJsZWQifSxyZXF1aXJlczpbImF1aS1pbWFnZS12aWV3ZXItbXVsdGlwbGUiLCJhdWktaW1hZ2Utdmlld2VyLXN3aXBlIl19LCJhdWktaW1hZ2Utdmlld2VyLXNsaWRlc2hvdyI6e3JlcXVpcmVzOlsibm9kZSIsImF1aS1jbGFzc25hbWVtYW5hZ2VyIl19LCJhdWktaW1hZ2Utdmlld2VyLXN3aXBlIjp7Y29uZGl0aW9uOntuYW1lOiJhdWktaW1hZ2Utdmlld2VyLXN3aXBlIix0cmlnZ2VyOiJhdWktaW1hZ2Utdmlld2VyLWJhc2UiLHVhOiJ0b3VjaEVuYWJsZWQifSxyZXF1aXJlczpbImV2ZW50LXJlc2l6ZSIsImF1aS1pbWFnZS12aWV3ZXItYmFzZSIsImF1aS13aWRnZXQtc3dpcGUiXX0sImF1aS1pbnB1dC10ZXh0LWNvbnRyb2wtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1kYXRhc291cmNlLWNvbnRyb2wtYmFzZS1kZXByZWNhdGVkIiwiYXVpLWZvcm0tY29tYm9ib3gtZGVwcmVjYXRlZCJdfSwiYXVpLWlvIjp7dXNlOlsiYXVpLWlvLXJlcXVlc3QiXX0sCiJhdWktaW8tZGVwcmVjYXRlZCI6e3VzZTpbImF1aS1pby1yZXF1ZXN0IiwiYXVpLWlvLXBsdWdpbi1kZXByZWNhdGVkIl19LCJhdWktaW8tcGx1Z2luLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1vdmVybGF5LWJhc2UtZGVwcmVjYXRlZCIsImF1aS1wYXJzZS1jb250ZW50IiwiYXVpLWlvLXJlcXVlc3QiLCJhdWktbG9hZGluZy1tYXNrLWRlcHJlY2F0ZWQiXX0sImF1aS1pby1yZXF1ZXN0Ijp7cmVxdWlyZXM6WyJpby1iYXNlIiwianNvbiIsInBsdWdpbiIsInF1ZXJ5c3RyaW5nLXN0cmluZ2lmeSIsImF1aS1jb21wb25lbnQiXX0sImF1aS1pby1yZXF1ZXN0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImlvLWJhc2UiLCJqc29uIiwicGx1Z2luIiwicXVlcnlzdHJpbmctc3RyaW5naWZ5IiwiYXVpLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLWxheW91dCI6e3JlcXVpcmVzOiJhdWktbGF5b3V0LWNvbCBhdWktbGF5b3V0LXJvdyBhdWktbm9kZS1iYXNlIGJhc2UtYnVpbGQgZGF0YXR5cGUtbnVtYmVyLXBhcnNlIGV2ZW50LXJlc2l6ZSIuc3BsaXQoIiAiKX0sCiJhdWktbGF5b3V0LWJ1aWxkZXIiOntyZXF1aXJlczoiYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLWxheW91dCBhdWktbGF5b3V0LWJ1aWxkZXItYWRkLWNvbCBhdWktbGF5b3V0LWJ1aWxkZXItYWRkLXJvdyBhdWktbGF5b3V0LWJ1aWxkZXItbW92ZSBhdWktbGF5b3V0LWJ1aWxkZXItcmVtb3ZlLXJvdyBhdWktbGF5b3V0LWJ1aWxkZXItcmVzaXplLWNvbCBhdWktbm9kZS1iYXNlIGJhc2UtYnVpbGQgbm9kZS1ldmVudC1kZWxlZ2F0ZSBub2RlLXNjcmVlbiBub2RlLXN0eWxlIi5zcGxpdCgiICIpfSwiYXVpLWxheW91dC1idWlsZGVyLWFkZC1jb2wiOntyZXF1aXJlczpbImV2ZW50LWtleSIsIm5vZGUtYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1sYXlvdXQtYnVpbGRlci1hZGQtcm93Ijp7cmVxdWlyZXM6WyJhdWktbm9kZS1iYXNlIiwiYmFzZS1idWlsZCIsIm5vZGUtc2Nyb2xsLWluZm8iXSxza2lubmFibGU6ITB9LCJhdWktbGF5b3V0LWJ1aWxkZXItbW92ZSI6e3JlcXVpcmVzOlsiYXVpLW5vZGUtYmFzZSIsCiJiYXNlLWJ1aWxkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWxheW91dC1idWlsZGVyLXJlbW92ZS1yb3ciOntyZXF1aXJlczpbImF1aS1ub2RlLWJhc2UiLCJiYXNlLWJ1aWxkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWxheW91dC1idWlsZGVyLXJlc2l6ZS1jb2wiOntyZXF1aXJlczoiZGQtY29uc3RyYWluIGRkLWRlbGVnYXRlIGRkLWRyb3AtcGx1Z2luIGRkLXByb3h5IGV2ZW50LW1vdXNlZW50ZXIgbm9kZS1iYXNlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1sYXlvdXQtY29sIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1ub2RlLWJhc2UiLCJiYXNlLWJ1aWxkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWxheW91dC1yb3ciOntyZXF1aXJlczpbImFycmF5LWludm9rZSIsImF1aS1ub2RlLWJhc2UiLCJiYXNlLWJ1aWxkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWxpbmtlZHNldCI6e3JlcXVpcmVzOlsiYXVpLXNldCJdfSwiYXVpLWxpdmUtc2VhcmNoLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1iYXNlLWRlcHJlY2F0ZWQiXX0sCiJhdWktbG9hZGluZy1tYXNrLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbInBsdWdpbiIsImF1aS1vdmVybGF5LW1hc2stZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1tYXAiOntyZXF1aXJlczpbImJhc2UtYnVpbGQiXX0sImF1aS1tZW51Ijp7cmVxdWlyZXM6ImJhc2UtYnVpbGQgZXZlbnQtbW91c2VlbnRlciBldmVudC1yZXNpemUgd2lkZ2V0IHdpZGdldC1wb3NpdGlvbiB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiB3aWRnZXQtc3RhY2sgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLWRlYm91bmNlIGF1aS1kcm9wZG93biBhdWktbWVudS1pdGVtIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1tZW51LWl0ZW0iOntyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJub2RlLWJhc2UiLCJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1ub2RlIiwiYXVpLXdpZGdldC1zaG9ydGN1dCJdfSwiYXVpLW1lc3NhZ2luZyI6e3JlcXVpcmVzOlsicXVlcnlzdHJpbmciLAoiYXVpLXRpbWVyIl19LCJhdWktbW9kYWwiOntyZXF1aXJlczoid2lkZ2V0IHdpZGdldC1hdXRvaGlkZSB3aWRnZXQtYnV0dG9ucyB3aWRnZXQtbW9kYWxpdHkgd2lkZ2V0LXBvc2l0aW9uIHdpZGdldC1wb3NpdGlvbi1hbGlnbiB3aWRnZXQtcG9zaXRpb24tY29uc3RyYWluIHdpZGdldC1zdGFjayB3aWRnZXQtc3RkbW9kIGRkLXBsdWdpbiBkZC1jb25zdHJhaW4gdGltZXJzIGF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS13aWRnZXQtY3NzY2xhc3MgYXVpLXdpZGdldC10b2dnbGUgYXVpLXdpZGdldC10b29sYmFycyIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktbW9kYWwtcmVzaXplIjp7Y29uZGl0aW9uOntuYW1lOiJhdWktbW9kYWwtcmVzaXplIix0ZXN0OmZ1bmN0aW9uKHEpe3JldHVybiFxLlVBLm1vYmlsZX0sdHJpZ2dlcjoiYXVpLW1vZGFsIn0scmVxdWlyZXM6WyJhdWktbW9kYWwiLCJyZXNpemUtcGx1Z2luIl19LCJhdWktbm9kZSI6e3VzZTpbImF1aS1ub2RlLWJhc2UiXX0sCiJhdWktbm9kZS1hY2Nlc3NpYmxlIjp7cmVxdWlyZXM6WyJhdWktbm9kZS1iYXNlIiwiZXZlbnQtY3VzdG9tLWJhc2UiXX0sImF1aS1ub2RlLWJhc2UiOntyZXF1aXJlczpbImFycmF5LWV4dHJhcyIsImF1aS1iYXNlLWxhbmciLCJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1kZWJvdW5jZSIsIm5vZGUiXX0sImF1aS1ub2RlLWh0bWw1Ijp7Y29uZGl0aW9uOntuYW1lOiJhdWktbm9kZS1odG1sNSIsdHJpZ2dlcjoiYXVpLW5vZGUiLHVhOiJpZSJ9LHJlcXVpcmVzOlsiY29sbGVjdGlvbiIsImF1aS1ub2RlLWJhc2UiXX0sImF1aS1vcHRpb25zLWRhdGEtZWRpdG9yIjp7cmVxdWlyZXM6ImF1aS1kYXRhLWVkaXRvciBkZC1jb25zdHJhaW4gZGQtZGVsZWdhdGUgZGQtZHJvcC1wbHVnaW4gZGQtcHJveHkgZXZlbnQtdmFsdWVjaGFuZ2Ugbm9kZS1ldmVudC1kZWxlZ2F0ZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktb3ZlcmxheS1iYXNlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczoid2lkZ2V0LXBvc2l0aW9uIHdpZGdldC1zdGFjayB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiB3aWRnZXQtc3RkbW9kIGF1aS1jb21wb25lbnQiLnNwbGl0KCIgIil9LAoiYXVpLW92ZXJsYXktY29udGV4dC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktb3ZlcmxheS1tYW5hZ2VyLWRlcHJlY2F0ZWQiLCJhdWktZGVsYXllZC10YXNrLWRlcHJlY2F0ZWQiLCJhdWktYXJpYSJdfSwiYXVpLW92ZXJsYXktY29udGV4dC1wYW5lbC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhbmltIiwiYXVpLW92ZXJsYXktY29udGV4dC1kZXByZWNhdGVkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLW92ZXJsYXktZGVwcmVjYXRlZCI6e3VzZTpbImF1aS1vdmVybGF5LWJhc2UtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LWNvbnRleHQtcGFuZWwtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LW1hbmFnZXItZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LW1hc2stZGVwcmVjYXRlZCJdfSwiYXVpLW92ZXJsYXktbWFuYWdlci1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJvdmVybGF5IiwicGx1Z2luIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCIsCiJhdWktb3ZlcmxheS1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS1vdmVybGF5LW1hc2stZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiZXZlbnQtcmVzaXplIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LWJhc2UtZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1wYWdpbmF0aW9uIjp7cmVxdWlyZXM6WyJub2RlLWV2ZW50LWRlbGVnYXRlIiwiYXVpLW5vZGUiLCJhdWktY29tcG9uZW50Iiwid2lkZ2V0LWh0bWxwYXJzZXIiXSxza2lubmFibGU6ITB9LCJhdWktcGFsZXR0ZSI6e3JlcXVpcmVzOiJiYXNlLWJ1aWxkIGV2ZW50LWhvdmVyIHdpZGdldCBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktYmFzZSBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1wYXJzZS1jb250ZW50Ijp7cmVxdWlyZXM6WyJhc3luYy1xdWV1ZSIsInBsdWdpbiIsImlvLWJhc2UiLCJhdWktY29tcG9uZW50IiwiYXVpLW5vZGUtYmFzZSJdfSwKImF1aS1wb3BvdmVyIjp7cmVxdWlyZXM6ImV2ZW50LXJlc2l6ZSB3aWRnZXQgd2lkZ2V0LWF1dG9oaWRlIHdpZGdldC1idXR0b25zIHdpZGdldC1tb2RhbGl0eSB3aWRnZXQtcG9zaXRpb24gd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4gd2lkZ2V0LXN0YWNrIHdpZGdldC1zdGRtb2QgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLXdpZGdldC1jc3NjbGFzcyBhdWktd2lkZ2V0LXRvZ2dsZSBhdWktd2lkZ2V0LXRvb2xiYXJzIGF1aS13aWRnZXQtdHJhbnNpdGlvbiBhdWktd2lkZ2V0LXRyaWdnZXIgYXVpLXdpZGdldC1wb3NpdGlvbi1hbGlnbi1zdWdnZXN0aW9uIGF1aS1jb21wb25lbnQgYXVpLW5vZGUtYmFzZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktcHJvZ3Jlc3NiYXIiOntyZXF1aXJlczpbImF1aS1ub2RlIiwiYXVpLWNvbXBvbmVudCIsImF1aS1hcmlhIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXByb21pc2UiOntyZXF1aXJlczpbImFycmF5LWludm9rZSIsCiJwcm9taXNlIiwib29wIl19LCJhdWktcHJvcGVydHktYnVpbGRlciI6e3JlcXVpcmVzOiJkZCBjb2xsZWN0aW9uIGF1aS1wcm9wZXJ0eS1idWlsZGVyLWF2YWlsYWJsZS1maWVsZCBhdWktcHJvcGVydHktYnVpbGRlci1maWVsZC1zdXBwb3J0IGF1aS1wcm9wZXJ0eS1idWlsZGVyLXNldHRpbmdzIGF1aS10YWJ2aWV3Ii5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1wcm9wZXJ0eS1idWlsZGVyLWF2YWlsYWJsZS1maWVsZCI6e3JlcXVpcmVzOlsiYmFzZSIsImF1aS1jb21wb25lbnQiLCJhdWktbm9kZSJdfSwiYXVpLXByb3BlcnR5LWJ1aWxkZXItZmllbGQtc3VwcG9ydCI6e30sImF1aS1wcm9wZXJ0eS1idWlsZGVyLXNldHRpbmdzIjp7cmVxdWlyZXM6WyJhdWktdGFidmlldyIsImF1aS1kYXRhdGFibGUtcHJvcGVydHktbGlzdCJdfSwiYXVpLXJhZGlvLWdyb3VwLWRhdGEtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktZGF0YS1lZGl0b3IiLCJub2RlLWV2ZW50LWRlbGVnYXRlIl0sCnNraW5uYWJsZTohMH0sImF1aS1yYXRpbmciOnt1c2U6WyJhdWktcmF0aW5nLWJhc2UiLCJhdWktcmF0aW5nLXRodW1iIl19LCJhdWktcmF0aW5nLWJhc2UiOntyZXF1aXJlczpbImF1aS1jb21wb25lbnQiLCJhdWktbm9kZS1iYXNlIiwid2lkZ2V0LWh0bWxwYXJzZXIiLCJ3aWRnZXQtdWlldmVudHMiXSxza2lubmFibGU6ITB9LCJhdWktcmF0aW5nLXRodW1iIjp7cmVxdWlyZXM6WyJhdWktcmF0aW5nLWJhc2UiXX0sImF1aS1yZXNpemUtYmFzZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJkZC1kcmFnIiwiZGQtZGVsZWdhdGUiLCJkZC1kcm9wIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1yZXNpemUtY29uc3RyYWluLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImRkLWNvbnN0cmFpbiIsInBsdWdpbiIsImF1aS1yZXNpemUtYmFzZS1kZXByZWNhdGVkIl19LCJhdWktcmVzaXplLWRlcHJlY2F0ZWQiOntza2lubmFibGU6ITAsdXNlOlsiYXVpLXJlc2l6ZS1iYXNlLWRlcHJlY2F0ZWQiLAoiYXVpLXJlc2l6ZS1jb25zdHJhaW4tZGVwcmVjYXRlZCJdfSwiYXVpLXNjYWxlLWRhdGEtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1kYXRhLWVkaXRvciIsImV2ZW50LXZhbHVlY2hhbmdlIl19LCJhdWktc2NoZWR1bGVyIjp7dXNlOiJldmVudC1nZXN0dXJlcyBhdWktc2NoZWR1bGVyLWJhc2UgYXVpLXNjaGVkdWxlci1ldmVudC1yZWNvcmRlciBhdWktc2NoZWR1bGVyLXZpZXctYWdlbmRhIGF1aS1zY2hlZHVsZXItdmlldy1kYXkgYXVpLXNjaGVkdWxlci12aWV3LW1vbnRoIGF1aS1zY2hlZHVsZXItdmlldy10YWJsZS1kZCBhdWktc2NoZWR1bGVyLXZpZXctdGFibGUgYXVpLXNjaGVkdWxlci12aWV3LXdlZWsgYXVpLXZpZXdwb3J0Ii5zcGxpdCgiICIpfSwiYXVpLXNjaGVkdWxlci1iYXNlIjp7cmVxdWlyZXM6Im1vZGVsIG1vZGVsLWxpc3Qgd2lkZ2V0LXN0ZG1vZCBjb2xvci1oc2wgYXVpLWV2ZW50LWJhc2UgYXVpLW5vZGUtYmFzZSBhdWktY29tcG9uZW50IGF1aS1kYXRhdHlwZSBhdWktYnV0dG9uIG5vZGUtZm9jdXNtYW5hZ2VyIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLWV2ZW50LXJlY29yZGVyIjp7cmVxdWlyZXM6WyJxdWVyeXN0cmluZyIsImlvLWZvcm0iLCJvdmVybGF5IiwiYXVpLXNjaGVkdWxlci1iYXNlIiwiYXVpLXBvcG92ZXIiXSxza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLXRvdWNoIjp7Y29uZGl0aW9uOntuYW1lOiJhdWktc2NoZWR1bGVyLXRvdWNoIix0cmlnZ2VyOiJhdWktc2NoZWR1bGVyIix1YToidG91Y2hFbmFibGVkIn0scmVxdWlyZXM6WyJiYXNlLWJ1aWxkIiwiYXVpLXNjaGVkdWxlciJdLHNraW5uYWJsZTohMH0sImF1aS1zY2hlZHVsZXItdmlldy1hZ2VuZGEiOntyZXF1aXJlczpbImF1aS1zY2hlZHVsZXItYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1zY2hlZHVsZXItdmlldy1kYXkiOntyZXF1aXJlczpbImRkLWRyYWciLCJkZC1kZWxlZ2F0ZSIsImRkLWRyb3AiLCJkZC1jb25zdHJhaW4iLCJhdWktc2NoZWR1bGVyLXZpZXctdGFibGUiXSxza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLXZpZXctbW9udGgiOntyZXF1aXJlczpbImF1aS1zY2hlZHVsZXItdmlldy10YWJsZSJdLApza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLXZpZXctdGFibGUiOntyZXF1aXJlczpbIm92ZXJsYXkiLCJhdWktc2NoZWR1bGVyLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLXZpZXctdGFibGUtZGQiOntyZXF1aXJlczpbImRkLWRyYWciLCJkZC1kZWxlZ2F0ZSIsImRkLWRyb3AiLCJhdWktc2NoZWR1bGVyLXZpZXctdGFibGUiXX0sImF1aS1zY2hlZHVsZXItdmlldy13ZWVrIjp7cmVxdWlyZXM6WyJhdWktc2NoZWR1bGVyLXZpZXctZGF5Il0sc2tpbm5hYmxlOiEwfSwiYXVpLXNjcm9sbGVyLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImV2ZW50LW1vdXNlZW50ZXIiLCJhdWktYmFzZS1kZXByZWNhdGVkIiwiYXVpLXNpbXBsZS1hbmltLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktc2Nyb2xsc3B5Ijp7cmVxdWlyZXM6WyJiYXNlLWJ1aWxkIiwibm9kZS1zY3JlZW4iLCJhdWktY2xhc3NuYW1lbWFuYWdlciJdfSwiYXVpLXNlYXJjaCI6e3VzZTpbImF1aS1zZWFyY2gtdHN0Il19LAoiYXVpLXNlYXJjaC10c3QiOntyZXF1aXJlczpbImF1aS1jb21wb25lbnQiXX0sImF1aS1zZWxlY3RvciI6e3JlcXVpcmVzOlsic2VsZWN0b3ItY3NzMyIsImF1aS1jbGFzc25hbWVtYW5hZ2VyIl19LCJhdWktc2V0Ijp7cmVxdWlyZXM6WyJhdWktbWFwIl19LCJhdWktc2ltcGxlLWFuaW0tZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLXNraW4tZGVwcmVjYXRlZCI6e3R5cGU6ImNzcyJ9LCJhdWktc29ydGFibGUiOnt1c2U6WyJhdWktc29ydGFibGUtbGF5b3V0IiwiYXVpLXNvcnRhYmxlLWxpc3QiXX0sImF1aS1zb3J0YWJsZS1sYXlvdXQiOntyZXF1aXJlczoiZGQtZGVsZWdhdGUgZGQtZHJhZyBkZC1kcm9wIGRkLXByb3h5IGF1aS1ub2RlIGF1aS1jb21wb25lbnQiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXNvcnRhYmxlLWxpc3QiOntyZXF1aXJlczoiZGQtZHJhZyBkZC1kcm9wIGRkLXByb3h5IGRkLXNjcm9sbCBhdWktbm9kZSBhdWktY29tcG9uZW50Ii5zcGxpdCgiICIpfSwKImF1aS1zdGF0ZS1pbnRlcmFjdGlvbi1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktYmFzZS1kZXByZWNhdGVkIiwicGx1Z2luIl19LCJhdWktc3VyZmFjZSI6e3VzZTpbImF1aS1zdXJmYWNlLWFwcCIsImF1aS1zdXJmYWNlLXNjcmVlbiJdfSwiYXVpLXN1cmZhY2UtYXBwIjp7cmVxdWlyZXM6WyJldmVudC1kZWxlZ2F0ZSIsIm5vZGUtZXZlbnQtaHRtbDUiLCJhdWktc3VyZmFjZS1iYXNlIiwiYXVpLXN1cmZhY2Utc2NyZWVuIiwiYXVpLXN1cmZhY2Utc2NyZWVuLXJvdXRlIl19LCJhdWktc3VyZmFjZS1iYXNlIjp7cmVxdWlyZXM6ImJhc2UtYnVpbGQgbm9kZS1zdHlsZSB0aW1lcnMgYXVpLWRlYm91bmNlIGF1aS1wcm9taXNlIGF1aS1wYXJzZS1jb250ZW50Ii5zcGxpdCgiICIpfSwiYXVpLXN1cmZhY2Utc2NyZWVuIjp7cmVxdWlyZXM6WyJiYXNlLWJ1aWxkIl19LCJhdWktc3VyZmFjZS1zY3JlZW4taHRtbCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UiLCJhdWktaW8tcmVxdWVzdCIsCiJhdWktcHJvbWlzZSIsImF1aS1zdXJmYWNlLXNjcmVlbiIsImF1aS11cmwiXX0sImF1aS1zdXJmYWNlLXNjcmVlbi1yb3V0ZSI6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCJdfSwiYXVpLXN3Zi1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJxdWVyeXN0cmluZy1wYXJzZS1zaW1wbGUiLCJxdWVyeXN0cmluZy1zdHJpbmdpZnktc2ltcGxlIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLXRhYnMtZGF0YS1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhLWVkaXRvciIsImF1aS10YWJ2aWV3Il19LCJhdWktdGFidmlldyI6e3JlcXVpcmVzOlsic2VsZWN0b3ItY3NzMyIsInRhYnZpZXciLCJhdWktY29tcG9uZW50IiwiYXVpLXdpZGdldC1jc3MiXSxza2lubmFibGU6ITB9LCJhdWktdGVtcGxhdGUtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLXRleHQtZGF0YS1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhLWVkaXRvciIsImV2ZW50LXZhbHVlY2hhbmdlIl0sCnNraW5uYWJsZTohMH0sImF1aS10ZXh0LWRhdGEtdW5pY29kZSI6e3JlcXVpcmVzOlsidGV4dCJdfSwiYXVpLXRleHQtdW5pY29kZSI6e3JlcXVpcmVzOlsiYXVpLXRleHQtZGF0YS11bmljb2RlIl19LCJhdWktdGV4dGJveGxpc3QtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOiJhbmltLW5vZGUtcGx1Z2luIGF1aS1hdXRvY29tcGxldGUtZGVwcmVjYXRlZCBhdWktYnV0dG9uLWl0ZW0tZGVwcmVjYXRlZCBhdWktZGF0YS1zZXQtZGVwcmVjYXRlZCBlc2NhcGUgbm9kZS1mb2N1c21hbmFnZXIiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXRpbWVwaWNrZXIiOntyZXF1aXJlczpbImF1dG9jb21wbGV0ZSIsImF1aS1kYXRlcGlja2VyLWRlbGVnYXRlIiwiYXVpLWRhdGVwaWNrZXItcG9wb3ZlciJdLHNraW5uYWJsZTohMH0sImF1aS10aW1lcGlja2VyLW5hdGl2ZSI6e3JlcXVpcmVzOlsiYmFzZSIsImJhc2UtYnVpbGQiLCJhdWktbm9kZS1iYXNlIiwiYXVpLWRhdGVwaWNrZXItZGVsZWdhdGUiLAoiYXVpLWRhdGVwaWNrZXItbmF0aXZlIl19LCJhdWktdGltZXIiOntyZXF1aXJlczpbIm9vcCJdfSwiYXVpLXRvZ2dsZXIiOnt1c2U6WyJhdWktdG9nZ2xlci1iYXNlIiwiYXVpLXRvZ2dsZXItZGVsZWdhdGUiXX0sImF1aS10b2dnbGVyLWFjY2Vzc2liaWxpdHkiOntyZXF1aXJlczpbImF1aS10b2dnbGVyLWJhc2UiXX0sImF1aS10b2dnbGVyLWJhc2UiOntyZXF1aXJlczoidHJhbnNpdGlvbiBhdWktc2VsZWN0b3IgYXVpLWV2ZW50LWJhc2UgYXVpLW5vZGUgYXVpLWNvbXBvbmVudCBldmVudC10YXAiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXRvZ2dsZXItZGVsZWdhdGUiOntyZXF1aXJlczpbImFycmF5LWludm9rZSIsIm5vZGUtZXZlbnQtZGVsZWdhdGUiLCJhdWktdG9nZ2xlci1iYXNlIl19LCJhdWktdG9vbGJhciI6e3JlcXVpcmVzOlsiYXJyYXlsaXN0IiwiYXJyYXlsaXN0LWFkZCIsImF1aS1jb21wb25lbnQiLCJhdWktYnV0dG9uLWNvcmUiXX0sImF1aS10b29sdGlwIjp7dXNlOlsiYXVpLXRvb2x0aXAtYmFzZSIsCiJhdWktdG9vbHRpcC1kZWxlZ2F0ZSJdfSwiYXVpLXRvb2x0aXAtYmFzZSI6e3JlcXVpcmVzOiJhdWktYXJpYSBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktY29tcG9uZW50IGF1aS1kZWJvdW5jZSBhdWktbm9kZS1iYXNlIGF1aS13aWRnZXQtY3NzY2xhc3MgYXVpLXdpZGdldC10b2dnbGUgYXVpLXdpZGdldC10cmFuc2l0aW9uIGF1aS13aWRnZXQtdHJpZ2dlciBhdWktd2lkZ2V0LXBvc2l0aW9uLWFsaWduLXN1Z2dlc3Rpb24gZXZlbnQtaG92ZXIgZXZlbnQtcmVzaXplIGVzY2FwZSB3aWRnZXQgd2lkZ2V0LWF1dG9oaWRlIHdpZGdldC1wb3NpdGlvbiB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiB3aWRnZXQtc3RhY2sgd2lkZ2V0LXN0ZG1vZCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktdG9vbHRpcC1kZWxlZ2F0ZSI6e3JlcXVpcmVzOlsiYXVpLXRvb2x0aXAtYmFzZSIsIm5vZGUtZXZlbnQtZGVsZWdhdGUiXX0sImF1aS10b29sdGlwLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1vdmVybGF5LWNvbnRleHQtcGFuZWwtZGVwcmVjYXRlZCJdLApza2lubmFibGU6ITB9LCJhdWktdHBsLXNuaXBwZXRzLWJhc2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLXRlbXBsYXRlLWRlcHJlY2F0ZWQiXX0sImF1aS10cGwtc25pcHBldHMtY2hlY2tib3gtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLXRwbC1zbmlwcGV0cy1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS10cGwtc25pcHBldHMtZGVwcmVjYXRlZCI6e3VzZTpbImF1aS10cGwtc25pcHBldHMtYmFzZS1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy1jaGVja2JveC1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy1pbnB1dC1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy1zZWxlY3QtZGVwcmVjYXRlZCIsImF1aS10cGwtc25pcHBldHMtdGV4dGFyZWEtZGVwcmVjYXRlZCJdfSwiYXVpLXRwbC1zbmlwcGV0cy1pbnB1dC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktdHBsLXNuaXBwZXRzLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLXRwbC1zbmlwcGV0cy1zZWxlY3QtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLXRwbC1zbmlwcGV0cy1iYXNlLWRlcHJlY2F0ZWQiXX0sCiJhdWktdHBsLXNuaXBwZXRzLXRleHRhcmVhLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS10cGwtc25pcHBldHMtYmFzZS1kZXByZWNhdGVkIl19LCJhdWktdHJlZSI6e3VzZTpbImF1aS10cmVlLWRhdGEiLCJhdWktdHJlZS1pbyIsImF1aS10cmVlLW5vZGUiLCJhdWktdHJlZS1wYWdpbmF0b3IiLCJhdWktdHJlZS12aWV3Il19LCJhdWktdHJlZS1kYXRhIjp7cmVxdWlyZXM6WyJhdWktYmFzZS1jb3JlIiwiYXVpLWJhc2UtbGFuZyIsImF1aS1ub2RlLWJhc2UiLCJhdWktdGltZXIiLCJhdWktY29tcG9uZW50Il19LCJhdWktdHJlZS1pbyI6e3JlcXVpcmVzOlsiYXVpLWNvbXBvbmVudCIsImF1aS1pbyJdfSwiYXVpLXRyZWUtbm9kZSI6e3JlcXVpcmVzOiJqc29uIHF1ZXJ5c3RyaW5nLXN0cmluZ2lmeSBhdWktdHJlZS1kYXRhIGF1aS10cmVlLWlvIGF1aS10cmVlLXBhZ2luYXRvciBldmVudC1rZXkiLnNwbGl0KCIgIil9LCJhdWktdHJlZS1wYWdpbmF0b3IiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LAoiYXVpLXRyZWUtdmlldyI6e3JlcXVpcmVzOiJkZC1kZWxlZ2F0ZSBkZC1wcm94eSB3aWRnZXQgYXVpLXRyZWUtbm9kZSBhdWktdHJlZS1wYWdpbmF0b3IgYXVpLXRyZWUtaW8iLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXVuZG8tcmVkbyI6e3JlcXVpcmVzOlsiYmFzZSIsImJhc2UtYnVpbGQiLCJwcm9taXNlIl19LCJhdWktdXJsIjp7cmVxdWlyZXM6WyJvb3AiLCJxdWVyeXN0cmluZy1wYXJzZSIsInF1ZXJ5c3RyaW5nLXN0cmluZ2lmeSJdfSwiYXVpLXZpZGVvIjp7cmVxdWlyZXM6ImV2ZW50LXJlc2l6ZSBub2RlLWV2ZW50LWh0bWw1IHF1ZXJ5c3RyaW5nLXN0cmluZ2lmeS1zaW1wbGUgYXVpLWFyaWEgYXVpLW5vZGUgYXVpLWNvbXBvbmVudCBhdWktZGVib3VuY2UiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXZpZXdwb3J0Ijp7cmVxdWlyZXM6WyJhdWktbm9kZSIsImF1aS1jb21wb25lbnQiXX0sImF1aS13aWRnZXQiOnt1c2U6WyJhdWktd2lkZ2V0LWNzc2NsYXNzIiwKImF1aS13aWRnZXQtdG9vbGJhcnMiXX0sImF1aS13aWRnZXQtY29yZSI6e3VzZTpbImF1aS13aWRnZXQtY3NzY2xhc3MiXX0sImF1aS13aWRnZXQtY3NzY2xhc3MiOntyZXF1aXJlczpbIndpZGdldC1iYXNlIl19LCJhdWktd2lkZ2V0LXBvc2l0aW9uLWFsaWduLXN1Z2dlc3Rpb24iOntyZXF1aXJlczpbIndpZGdldC1wb3NpdGlvbi1hbGlnbiIsIndpZGdldC1zdGRtb2QiXX0sImF1aS13aWRnZXQtcmVzcG9uc2l2ZSI6e3JlcXVpcmVzOlsiZXZlbnQtcmVzaXplIiwid2lkZ2V0LWJhc2UiXX0sImF1aS13aWRnZXQtc2hvcnRjdXQiOntyZXF1aXJlczpbImJhc2UiXX0sImF1aS13aWRnZXQtc3dpcGUiOntyZXF1aXJlczpbImNsYXNzbmFtZW1hbmFnZXIiLCJzY3JvbGx2aWV3LWJhc2UiLCJzY3JvbGx2aWV3LXBhZ2luYXRvciIsInRpbWVycyJdfSwiYXVpLXdpZGdldC10b2dnbGUiOnt9LCJhdWktd2lkZ2V0LXRvb2xiYXJzIjp7cmVxdWlyZXM6WyJ3aWRnZXQtc3RkbW9kIiwiYXVpLXRvb2xiYXIiXX0sCiJhdWktd2lkZ2V0LXRyYW5zaXRpb24iOntyZXF1aXJlczpbInRyYW5zaXRpb24iXX0sImF1aS13aWRnZXQtdHJpZ2dlciI6e3JlcXVpcmVzOlsibm9kZSJdfX0pO1lVSS5FbnZbYS52ZXJzaW9uXS5tZDU9IjAyNzhkYzY5MzlmNTRhY2EyYzg3ZDUwMGYyNDEyNDIyIjthLlVBLmVkZ2U9ZnVuY3Rpb24oKXt2YXIgcT1hLlVBLnVzZXJBZ2VudC5tYXRjaCgvRWRnZVwvKC5bMC05Ll0rKS8pO3JldHVybiBxP3FbMV06MH0oKTthLnN1cHBvcnRzRE9NRXZlbnQ9ZnVuY3Rpb24ocSx0KXt0PSJvbiIrdDtyZXR1cm4gdCBpbiBxfHwocS5zZXRBdHRyaWJ1dGV8fChxPWEuY29uZmlnLmRvYy5jcmVhdGVFbGVtZW50KCJkaXYiKSksIXEuc2V0QXR0cmlidXRlKT8hMDoocS5zZXRBdHRyaWJ1dGUodCwiIiksImZ1bmN0aW9uIj09PXR5cGVvZiBxW3RdKX07KGZ1bmN0aW9uKCl7dmFyIHE9QXJyYXkucHJvdG90eXBlLnNsaWNlO1lVSS5wcm90b3R5cGUucmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMsCmY9dC5sZW5ndGgtMSxkPXEuY2FsbChhcmd1bWVudHMsMCxmKTtkLnVuc2hpZnQoImV2ZW50LWJhc2UiKTtkLnB1c2goZnVuY3Rpb24oYyl7dmFyIGI9YXJndW1lbnRzO2Mub24oImRvbXJlYWR5IixmdW5jdGlvbigpe3RbZl0uYXBwbHkodGhpcyxiKX0pfSk7dGhpcy51c2UuYXBwbHkodGhpcyxkKX19KSgpfSwiMy4wLjMtZGVwcmVjYXRlZC43MyIpO1lVSS5hZGQoImF1aSIsZnVuY3Rpb24oYSxFKXt9LCIzLjAuMy1kZXByZWNhdGVkLjczIik7WVVJLkVudi5jb3JlLnB1c2guYXBwbHkoWVVJLkVudi5jb3JlLFsiYXVpLWJhc2UtY29yZSJdKTsKWVVJLmFkZCgiYXVpLWJhc2UtaHRtbDUtc2hpdiIsZnVuY3Rpb24oYSxFKXthLkhUTUw1X0VMRU1FTlRTPSJhYmJyIGFydGljbGUgYXNpZGUgYXVkaW8gY2FudmFzIGNvbW1hbmQgZGF0YWxpc3QgZGV0YWlscyBmaWd1cmUgZmlnY2FwdGlvbiBmb290ZXIgaGVhZGVyIGhncm91cCBrZXlnZW4gbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNlY3Rpb24gc291cmNlIHN1bW1hcnkgdGltZSB2aWRlbyIuc3BsaXQoIiAiKTthLmh0bWw1c2hpdj1mdW5jdGlvbihxKXt2YXIgdD1xfHxhLmNvbmZpZy5kb2M7aWYoYS5VQS5pZSYmdCYmdC5jcmVhdGVFbGVtZW50KWZvcih2YXIgZj1hLkhUTUw1X0VMRU1FTlRTLGQ9Zi5sZW5ndGg7ZC0tOyl0LmNyZWF0ZUVsZW1lbnQoZltkXSk7cmV0dXJuIHF9fSwiMy4wLjMtZGVwcmVjYXRlZC43MyIpOwpZVUkuYWRkKCJsaWZlcmF5LWJyb3dzZXItc2VsZWN0b3JzIixmdW5jdGlvbihhKXt2YXIgRT0vXC4vZyxxPWZ1bmN0aW9uKHMpe3ZhciBsPTA7cmV0dXJuIHBhcnNlRmxvYXQocy5yZXBsYWNlKEUsZnVuY3Rpb24oKXtyZXR1cm4gMT09bCsrPyIiOiIuIn0pKX0sdD1bIjAiLCIwIl0sZj1mdW5jdGlvbihzLGwpe3ZhciBoPShsLm1hdGNoKHMpfHx0KVsxXTtyZXR1cm4gcShoKX0sZD0iaWUgb3BlcmEgY2hyb21lIGFvbCBjYW1pbm8gZmlyZWZveCBmbG9jayBtb3ppbGxhIG5ldHNjYXBlIGljYWIga29ucXVlcm9yIHNhZmFyaSIuc3BsaXQoIiAiKSxjPXttYWNpbnRvc2g6Im1hYyIsd2luZG93czoid2luIn0sYj1hLmNvbmZpZyxnPWIuZG9jLGU9bmF2aWdhdG9yLnVzZXJBZ2VudCxrPWEuVUEsbT1rLm9zLHA9e2FnZW50OmUsYW9sOjAsYnJvd3NlcjowLGNhbWlubzowLGZpcmVmb3g6MCxmbG9jazowLGljYWI6MCxrb25xdWVyb3I6MCxtb3ppbGxhOjAsbmV0c2NhcGU6MCxzYWZhcmk6MH07CnAubWFjPSJtYWNpbnRvc2giPT1tO3Aucmhpbm89InJoaW5vIj09bTtwLndpbj0id2luZG93cyI9PW07TGlmZXJheS5Ccm93c2VyU2VsZWN0b3JzPXtnZXRTZWxlY3RvcnM6ZnVuY3Rpb24oKXtpZighay5zZWxlY3RvcnMpe2lmKGsuaWUpe3AuYW9sPWYoL0FtZXJpY2EgT25saW5lIEJyb3dzZXIgKFteXHNdKik7LyxlKTt2YXIgcz1nLmRvY3VtZW50TW9kZTtzJiYoay5icm93c2VyPWsuaWUsay5pZT1zKX1lbHNlIGsuZ2Vja28/KHAubmV0c2NhcGU9ZigvKE5ldHNjYXBlfE5hdmlnYXRvcilcLyhbXlxzXSopLyxlKSxwLmZsb2NrPWYoL0Zsb2NrXC8oW15cc10qKS8sZSkscC5jYW1pbm89ZigvQ2FtaW5vXC8oW15cc10qKS8sZSkscC5maXJlZm94PWYoL0ZpcmVmb3hcLyhbXlxzXSopLyxlKSk6ay53ZWJraXQ/cC5zYWZhcmk9ZigvVmVyc2lvblwvKFteXHNdKikgU2FmYXJpLyxlKToocC5pY2FiPWYoL2lDYWIoPzpcL3xccyk/KFteXHNdKikvLGUpLHAua29ucXVlcm9yPWYoL0tvbnF1ZXJvclwvKFteXHNdKikvLAplKSk7aWYoIXAud2luJiYhcC5tYWMpe3ZhciBzPS9MaW51eC8udGVzdChlKSxsPS9Tb2xhcmlzfFN1bk9TLy50ZXN0KGUpO3M/KGsub3M9ImxpbnV4IixwLmxpbnV4PXMpOmwmJihrLm9zPSJzdW4iLHAuc3VuPWwpfXM9ay50b3VjaEVuYWJsZWQ7cC50b3VjaD1zO3AudG91Y2hNb2JpbGU9cyYmISFrLm1vYmlsZTthLm1peChrLHApO2Zvcih2YXIgcz1bXSxoLHUsdyx6LEE9e21ham9yOjAsc3RyaW5nOiIifSxIPWQubGVuZ3RoO0gtLTspaD1kW0hdLHo9a1toXSwwPHomJihsPXBhcnNlSW50KHosMTApLHU9aCtsLHc9aCt6LHc9LTE8U3RyaW5nKHopLmluZGV4T2YoIi4iKT93LnJlcGxhY2UoL1wuKFxkKS4qLywiLSQxIik6dysiLTAiLHMucHVzaChoLHUsdyksQS5zdHJpbmc9aCsiIixBLm1ham9yPWwpO2sudmVyc2lvbj1BO2sucmVuZGVyZXI9IiI7ay5pZT9rLnJlbmRlcmVyPSJ0cmlkZW50IjprLmdlY2tvP2sucmVuZGVyZXI9ImdlY2tvIjprLndlYmtpdD9rLnJlbmRlcmVyPSJ3ZWJraXQiOgprLm9wZXJhJiYoay5yZW5kZXJlcj0icHJlc3RvIik7YS5VQT1rO3M9W2sucmVuZGVyZXIsImpzIl0uY29uY2F0KHMpO3MucHVzaChjW2sub3NdfHxrLm9zKTtrLm1vYmlsZSYmcy5wdXNoKCJtb2JpbGUiKTtrLnNlY3VyZSYmcy5wdXNoKCJzZWN1cmUiKTtrLnRvdWNoJiZzLnB1c2goInRvdWNoIik7ay5zZWxlY3RvcnM9cy5qb2luKCIgIik7aWYobD0hKHM9ISghYi53aW4uU1ZHQW5nbGUmJiFnLmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjQmFzaWNTdHJ1Y3R1cmUiLCIxLjEiKSkpKWg9Zy5jcmVhdGVFbGVtZW50KCJkaXYiKSxoLmlubmVySFRNTD0nXHgzY3Y6c2hhcGUgYWRqXHgzZCIxIi9ceDNlJyxoPWguZmlyc3RDaGlsZCxoLnN0eWxlLmJlaGF2aW9yPSJ1cmwoI2RlZmF1bHQjVk1MKSIsaCYmIm9iamVjdCI9PXR5cGVvZiBoLmFkanx8KGw9ITEpO1lVSS5fVk1MPWw7WVVJLl9TVkc9cztrLnZtbD1ZVUkuX1ZNTDsKay5zdmc9WVVJLl9TVkd9cmV0dXJuIGsuc2VsZWN0b3JzfSxydW46ZnVuY3Rpb24oKXt2YXIgcz1nLmRvY3VtZW50RWxlbWVudCxsPXRoaXMuZ2V0U2VsZWN0b3JzKCk7ay5kaXI9cy5nZXRBdHRyaWJ1dGUoImRpciIpfHwibHRyIjstMT09PXMuY2xhc3NOYW1lLmluZGV4T2Yoay5kaXIpJiYobCs9IiAiK2suZGlyKTstMT09PXMuY2xhc3NOYW1lLmluZGV4T2YoInl1aTMtanMtZW5hYmxlZCIpJiYtMT09PWwuaW5kZXhPZigieXVpMy1qcy1lbmFibGVkIikmJihsKz0iIHl1aTMtanMtZW5hYmxlZCIpO3MuY2xhc3NOYW1lKz0iICIrbH19fSwiIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CihmdW5jdGlvbigpe3ZhciBhPUxpZmVyYXkuQVVJLEU9YS5nZXRDb21iaW5lKCkscT1ZVUkuRW52LmNvcmUsdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGY9YS5nZXRFZGl0b3JDS0VkaXRvclBhdGgoKSxkPWEuZ2V0SmF2YVNjcmlwdFJvb3RQYXRoKCksYz0ibnVtYmVyIj09PXR5cGVvZiB0LnNlbGVjdGlvblN0YXJ0JiYibnVtYmVyIj09PXR5cGVvZiB0LnNlbGVjdGlvbkVuZDt3aW5kb3cuWVVJX2NvbmZpZz17YmFzZTpkKyIvYXVpLyIsY29tYmluZTpFLGNvbWJvQmFzZTphLmdldENvbWJvUGF0aCgpLGZpbHRlcjpMaWZlcmF5LkFVSS5nZXRGaWx0ZXIoKSxncm91cHM6e2VkaXRvcjp7YmFzZTpmLGNvbWJpbmU6RSxtb2R1bGVzOnsiaW5saW5lLWVkaXRvci1ja2VkaXRvciI6e3BhdGg6ImNrZWRpdG9yL21haW4uanMifX0scm9vdDpmfSxsaWZlcmF5OntiYXNlOmQrIi9saWZlcmF5LyIsY29tYmluZTpFLGZpbHRlcjpMaWZlcmF5LkFVSS5nZXRGaWx0ZXJDb25maWcoKSwKbW9kdWxlczp7ImxpZmVyYXktYWRkcmVzcyI6e3BhdGg6ImFkZHJlc3MuanMiLHJlcXVpcmVzOltdfSwibGlmZXJheS1hbGVydCI6e3BhdGg6ImFsZXJ0LmpzIixyZXF1aXJlczpbImF1aS1hbGVydCIsImF1aS1jb21wb25lbnQiLCJldmVudC1tb3VzZWVudGVyIiwibGlmZXJheS1wb3J0bGV0LWJhc2UiLCJ0aW1lcnMiXX0sImxpZmVyYXktYXNzZXQtYWRkb24tZW50cnktc2VsZWN0b3IiOntwYXRoOiJhc3NldF9hZGRvbl9lbnRyeV9zZWxlY3Rvci5qcyIscmVxdWlyZXM6WyJhdWktY29tcG9uZW50IiwibGlmZXJheS1wb3J0bGV0LWJhc2UiLCJsaWZlcmF5LXV0aWwtd2luZG93Il19LCJsaWZlcmF5LWFzc2V0LWNhdGVnb3JpZXMtc2VsZWN0b3IiOntwYXRoOiJhc3NldF9jYXRlZ29yaWVzX3NlbGVjdG9yLmpzIixyZXF1aXJlczpbImF1aS10cmVlIiwibGlmZXJheS1hc3NldC10YWdzLXNlbGVjdG9yIl19LCJsaWZlcmF5LWFzc2V0LXRhZ3Mtc2VsZWN0b3IiOntwYXRoOiJhc3NldF90YWdzX3NlbGVjdG9yLmpzIiwKcmVxdWlyZXM6ImFycmF5LWV4dHJhcyBhc3luYy1xdWV1ZSBhdWktYXV0b2NvbXBsZXRlLWRlcHJlY2F0ZWQgYXVpLWlvLXBsdWdpbi1kZXByZWNhdGVkIGF1aS1pby1yZXF1ZXN0IGF1aS1saXZlLXNlYXJjaC1kZXByZWNhdGVkIGF1aS1tb2RhbCBhdWktdGVtcGxhdGUtZGVwcmVjYXRlZCBhdWktdGV4dGJveGxpc3QtZGVwcmVjYXRlZCBkYXRhc291cmNlLWNhY2hlIGxpZmVyYXktc2VydmljZS1kYXRhc291cmNlIi5zcGxpdCgiICIpfSwibGlmZXJheS1hdXRvLWZpZWxkcyI6e3BhdGg6ImF1dG9fZmllbGRzLmpzIixyZXF1aXJlczoiYXVpLWJhc2UgYXVpLWRhdGEtc2V0LWRlcHJlY2F0ZWQgYXVpLWlvLXJlcXVlc3QgYXVpLXBhcnNlLWNvbnRlbnQgYmFzZSBsaWZlcmF5LXVuZG8tbWFuYWdlciBzb3J0YWJsZSIuc3BsaXQoIiAiKX0sImxpZmVyYXktYXV0b2NvbXBsZXRlLWlucHV0Ijp7cGF0aDoiYXV0b2NvbXBsZXRlX2lucHV0LmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiYXV0b2NvbXBsZXRlIiwKImF1dG9jb21wbGV0ZS1maWx0ZXJzIiwiYXV0b2NvbXBsZXRlLWhpZ2hsaWdodGVycyJdfSwibGlmZXJheS1hdXRvY29tcGxldGUtaW5wdXQtY2FyZXRpbmRleCI6e2NvbmRpdGlvbjp7bmFtZToibGlmZXJheS1hdXRvY29tcGxldGUtaW5wdXQtY2FyZXRpbmRleCIsdGVzdDpmdW5jdGlvbigpe3JldHVybiBjfSx0cmlnZ2VyOiJsaWZlcmF5LWF1dG9jb21wbGV0ZS10ZXh0YXJlYSJ9LHBhdGg6ImF1dG9jb21wbGV0ZV9pbnB1dF9jYXJldGluZGV4LmpzIixyZXF1aXJlczpbImxpZmVyYXktYXV0b2NvbXBsZXRlLXRleHRhcmVhIl19LCJsaWZlcmF5LWF1dG9jb21wbGV0ZS1pbnB1dC1jYXJldGluZGV4LXNlbCI6e2NvbmRpdGlvbjp7bmFtZToibGlmZXJheS1hdXRvY29tcGxldGUtaW5wdXQtY2FyZXRpbmRleC1zZWwiLHRlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4hY30sdHJpZ2dlcjoibGlmZXJheS1hdXRvY29tcGxldGUtdGV4dGFyZWEifSxwYXRoOiJhdXRvY29tcGxldGVfaW5wdXRfY2FyZXRpbmRleF9zZWwuanMiLApyZXF1aXJlczpbImxpZmVyYXktYXV0b2NvbXBsZXRlLXRleHRhcmVhIl19LCJsaWZlcmF5LWF1dG9jb21wbGV0ZS1pbnB1dC1jYXJldG9mZnNldCI6e2NvbmRpdGlvbjp7bmFtZToibGlmZXJheS1hdXRvY29tcGxldGUtaW5wdXQtY2FyZXRvZmZzZXQiLHRlc3Q6ZnVuY3Rpb24oYil7cmV0dXJuIShiLlVBLmllJiY5PmIuVUEuaWUpfSx0cmlnZ2VyOiJsaWZlcmF5LWF1dG9jb21wbGV0ZS10ZXh0YXJlYSJ9LHBhdGg6ImF1dG9jb21wbGV0ZV9pbnB1dF9jYXJldG9mZnNldC5qcyIscmVxdWlyZXM6WyJsaWZlcmF5LWF1dG9jb21wbGV0ZS10ZXh0YXJlYSJdfSwibGlmZXJheS1hdXRvY29tcGxldGUtaW5wdXQtY2FyZXRvZmZzZXQtc2VsIjp7Y29uZGl0aW9uOntuYW1lOiJsaWZlcmF5LWF1dG9jb21wbGV0ZS1pbnB1dC1jYXJldG9mZnNldC1zZWwiLHRlc3Q6ZnVuY3Rpb24oYil7cmV0dXJuIGIuVUEuaWUmJjk+Yi5VQS5pZX0sdHJpZ2dlcjoibGlmZXJheS1hdXRvY29tcGxldGUtdGV4dGFyZWEifSwKcGF0aDoiYXV0b2NvbXBsZXRlX2lucHV0X2NhcmV0b2Zmc2V0X3NlbC5qcyIscmVxdWlyZXM6WyJsaWZlcmF5LWF1dG9jb21wbGV0ZS10ZXh0YXJlYSJdfSwibGlmZXJheS1hdXRvY29tcGxldGUtdGV4dGFyZWEiOntwYXRoOiJhdXRvY29tcGxldGVfdGV4dGFyZWEuanMiLHJlcXVpcmVzOlsibGlmZXJheS1hdXRvY29tcGxldGUtaW5wdXQiXX0sImxpZmVyYXktYnJvd3Nlci1zZWxlY3RvcnMiOntwYXRoOiJicm93c2VyX3NlbGVjdG9ycy5qcyIscmVxdWlyZXM6WyJ5dWktYmFzZSJdfSwibGlmZXJheS1jb3Zlci1jcm9wcGVyIjp7cGF0aDoiY292ZXJfY3JvcHBlci5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsImRkLWNvbnN0cmFpbiIsImRkLWRyYWciLCJsaWZlcmF5LWNyb3AtcmVnaW9uIiwicGx1Z2luIl19LCJsaWZlcmF5LWNyb3AtcmVnaW9uIjp7cGF0aDoiY3JvcF9yZWdpb24uanMiLHJlcXVpcmVzOlsiYXVpLWJhc2UiXX0sImxpZmVyYXktZGQtcHJveHkiOntwYXRoOiJkZF9wcm94eS5qcyIsCnJlcXVpcmVzOlsiZGQtcHJveHkiXX0sImxpZmVyYXktZHluYW1pYy1zZWxlY3QiOntwYXRoOiJkeW5hbWljX3NlbGVjdC5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSJdfSwibGlmZXJheS1lZGl0b3ItaW1hZ2UtdXBsb2FkZXIiOntwYXRoOiJlZGl0b3JfaW1hZ2VfdXBsb2FkZXIuanMiLHJlcXVpcmVzOlsiYXVpLWFsZXJ0IiwiYXVpLWJhc2UiLCJhdWktcHJvZ3Jlc3NiYXIiLCJ1cGxvYWRlciJdfSwibGlmZXJheS1mb3JtIjp7cGF0aDoiZm9ybS5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsImF1aS1mb3JtLXZhbGlkYXRvciJdfSwibGlmZXJheS1mb3JtLXBsYWNlaG9sZGVycyI6e2NvbmRpdGlvbjp7bmFtZToibGlmZXJheS1mb3JtLXBsYWNlaG9sZGVycyIsdGVzdDpmdW5jdGlvbihiKXtyZXR1cm4hKCJwbGFjZWhvbGRlciJpbiB0KX0sdHJpZ2dlcjoibGlmZXJheS1mb3JtIn0scGF0aDoiZm9ybV9wbGFjZWhvbGRlcnMuanMiLHJlcXVpcmVzOlsibGlmZXJheS1mb3JtIiwicGx1Z2luIl19LAoibGlmZXJheS1mdWxsc2NyZWVuLXNvdXJjZS1lZGl0b3IiOntwYXRoOiJmdWxsc2NyZWVuX3NvdXJjZV9lZGl0b3IuanMiLHJlcXVpcmVzOlsibGlmZXJheS1zb3VyY2UtZWRpdG9yIl19LCJsaWZlcmF5LWhpc3RvcnkiOntwYXRoOiJoaXN0b3J5LmpzIixyZXF1aXJlczpbImhpc3RvcnktaGFzaCIsInF1ZXJ5c3RyaW5nLXBhcnNlLXNpbXBsZSJdfSwibGlmZXJheS1oaXN0b3J5LWh0bWw1Ijp7Y29uZGl0aW9uOntuYW1lOiJsaWZlcmF5LWhpc3RvcnktaHRtbDUiLHRlc3Q6ZnVuY3Rpb24oYil7dmFyIGc9Yi5jb25maWcud2luLGU9Zy5oaXN0b3J5O3JldHVybiBlJiZlLnB1c2hTdGF0ZSYmZS5yZXBsYWNlU3RhdGUmJigib25wb3BzdGF0ZSJpbiBnfHwyPD1iLlVBLmdlY2tvKX0sdHJpZ2dlcjoibGlmZXJheS1oaXN0b3J5In0scGF0aDoiaGlzdG9yeV9odG1sNS5qcyIscmVxdWlyZXM6WyJoaXN0b3J5LWh0bWw1IiwibGlmZXJheS1oaXN0b3J5IiwicXVlcnlzdHJpbmctc3RyaW5naWZ5LXNpbXBsZSJdfSwKImxpZmVyYXktaGlzdG9yeS1tYW5hZ2VyIjp7cGF0aDoiaGlzdG9yeV9tYW5hZ2VyLmpzIixyZXF1aXJlczpbImxpZmVyYXktaGlzdG9yeSJdfSwibGlmZXJheS1odWRjcnVtYnMiOntwYXRoOiJodWRjcnVtYnMuanMiLHJlcXVpcmVzOlsiYXVpLWJhc2UiLCJhdWktZGVib3VuY2UiLCJldmVudC1yZXNpemUiXX0sImxpZmVyYXktaWNvbiI6e3BhdGg6Imljb24uanMiLHJlcXVpcmVzOlsiYXVpLWJhc2UiXX0sImxpZmVyYXktaW5saW5lLWVkaXRvci1iYXNlIjp7cGF0aDoiaW5saW5lX2VkaXRvcl9iYXNlLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIl19LCJsaWZlcmF5LWlucHV0LWxvY2FsaXplZCI6e3BhdGg6ImlucHV0X2xvY2FsaXplZC5qcyIscmVxdWlyZXM6ImF1aS1iYXNlIGF1aS1jb21wb25lbnQgYXVpLWV2ZW50LWlucHV0IGF1aS1wYWxldHRlIGF1aS1zZXQgcG9ydGFsLWF2YWlsYWJsZS1sYW5ndWFnZXMiLnNwbGl0KCIgIil9LAoibGlmZXJheS1pbnB1dC1tb3ZlLWJveGVzIjp7cGF0aDoiaW5wdXRfbW92ZV9ib3hlcy5qcyIscGx1Z2luczp7ImxpZmVyYXktaW5wdXQtbW92ZS1ib3hlcy10b3VjaCI6e2NvbmRpdGlvbjp7bmFtZToibGlmZXJheS1pbnB1dC1tb3ZlLWJveGVzLXRvdWNoIix0cmlnZ2VyOiJsaWZlcmF5LWlucHV0LW1vdmUtYm94ZXMiLHVhOiJ0b3VjaE1vYmlsZSJ9fX0scmVxdWlyZXM6WyJhdWktYmFzZSIsImF1aS10b29sYmFyIl19LCJsaWZlcmF5LWlucHV0LW1vdmUtYm94ZXMtdG91Y2giOntwYXRoOiJpbnB1dF9tb3ZlX2JveGVzX3RvdWNoLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiYXVpLXRlbXBsYXRlLWRlcHJlY2F0ZWQiLCJsaWZlcmF5LWlucHV0LW1vdmUtYm94ZXMiLCJzb3J0YWJsZSJdfSwibGlmZXJheS1pdGVtLXNlbGVjdG9yLWRpYWxvZyI6e3BhdGg6Iml0ZW1fc2VsZWN0b3JfZGlhbG9nLmpzIixyZXF1aXJlczpbImF1aS1jb21wb25lbnQiXX0sImxpZmVyYXktaXRlbS1zZWxlY3Rvci1yZXBvc2l0b3J5LWVudHJ5LWJyb3dzZXIiOntwYXRoOiJpdGVtX3NlbGVjdG9yX3JlcG9zaXRvcnlfZW50cnlfYnJvd3Nlci5qcyIsCnJlcXVpcmVzOlsibGlmZXJheS1pdGVtLXNlbGVjdG9yLXVwbG9hZGVyIiwibGlmZXJheS1pdGVtLXZpZXdlciIsImxpZmVyYXktbm90aWNlIiwibGlmZXJheS1wb3J0bGV0LWJhc2UiLCJsaWZlcmF5LXN0b3JhZ2UtZm9ybWF0dGVyIl19LCJsaWZlcmF5LWl0ZW0tc2VsZWN0b3ItdXBsb2FkZXIiOntwYXRoOiJpdGVtX3NlbGVjdG9yX3VwbG9hZGVyLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiYXVpLXByb2dyZXNzYmFyIiwibGlmZXJheS1wb3J0bGV0LWJhc2UiLCJ1cGxvYWRlciJdfSwibGlmZXJheS1pdGVtLXNlbGVjdG9yLXVybCI6e3BhdGg6Iml0ZW1fc2VsZWN0b3JfdXJsLmpzIixyZXF1aXJlczpbImF1aS1ldmVudC1pbnB1dCIsImxpZmVyYXktaXRlbS12aWV3ZXIiLCJsaWZlcmF5LXBvcnRsZXQtYmFzZSJdfSwibGlmZXJheS1pdGVtLXZpZXdlciI6e3BhdGg6Iml0ZW1fdmlld2VyLmpzIixyZXF1aXJlczpbImF1aS1jb21wb25lbnQiLCJhdWktaW1hZ2Utdmlld2VyIiwibGlmZXJheS1wb3J0bGV0LXVybCJdfSwKImxpZmVyYXktbGFuZ3VhZ2UiOntwYXRoOiJsYW5ndWFnZS5qcyJ9LCJsaWZlcmF5LWxheW91dCI6e3BhdGg6ImxheW91dC5qcyJ9LCJsaWZlcmF5LWxheW91dC1jb2x1bW4iOntwYXRoOiJsYXlvdXRfY29sdW1uLmpzIixyZXF1aXJlczpbImF1aS1zb3J0YWJsZS1sYXlvdXQiLCJkZCJdfSwibGlmZXJheS1sYXlvdXQtZnJlZWZvcm0iOntwYXRoOiJsYXlvdXRfZnJlZWZvcm0uanMiLHJlcXVpcmVzOlsibGlmZXJheS1sYXlvdXQtY29sdW1uIiwicmVzaXplIl19LCJsaWZlcmF5LWxpc3QtdmlldyI6e3BhdGg6Imxpc3Rfdmlldy5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsInRyYW5zaXRpb24iXX0sImxpZmVyYXktbG9nby1lZGl0b3IiOntwYXRoOiJsb2dvX2VkaXRvci5qcyIscmVxdWlyZXM6ImF1aS1pbWFnZS1jcm9wcGVyIGF1aS1pby1yZXF1ZXN0IGxpZmVyYXktYWxlcnQgbGlmZXJheS1jcm9wLXJlZ2lvbiBsaWZlcmF5LXBvcnRsZXQtYmFzZSBsaWZlcmF5LXN0b3JhZ2UtZm9ybWF0dGVyIi5zcGxpdCgiICIpfSwKImxpZmVyYXktbG9nby1zZWxlY3RvciI6e3BhdGg6ImxvZ29fc2VsZWN0b3IuanMiLHJlcXVpcmVzOlsiYXVpLWJhc2UiXX0sImxpZmVyYXktbWVudSI6e3BhdGg6Im1lbnUuanMiLHJlcXVpcmVzOlsiYXVpLWRlYm91bmNlIiwiYXVpLW5vZGUiXX0sImxpZmVyYXktbWVudS1maWx0ZXIiOntwYXRoOiJtZW51X2ZpbHRlci5qcyIscmVxdWlyZXM6WyJhdXRvY29tcGxldGUtYmFzZSIsImF1dG9jb21wbGV0ZS1maWx0ZXJzIiwiYXV0b2NvbXBsZXRlLWhpZ2hsaWdodGVycyJdfSwibGlmZXJheS1tZW51LXRvZ2dsZSI6e3BhdGg6Im1lbnVfdG9nZ2xlLmpzIixyZXF1aXJlczpbImF1aS1ub2RlIiwiZXZlbnQtb3V0c2lkZSIsImV2ZW50LXRhcCIsImxpZmVyYXktbWVudS1maWx0ZXIiLCJsaWZlcmF5LXN0b3JlIl19LCJsaWZlcmF5LW1lc3NhZ2UiOntwYXRoOiJtZXNzYWdlLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwibGlmZXJheS1zdG9yZSJdfSwibGlmZXJheS1uYXZpZ2F0aW9uIjp7cGF0aDoibmF2aWdhdGlvbi5qcyIsCnBsdWdpbnM6eyJsaWZlcmF5LW5hdmlnYXRpb24tdG91Y2giOntjb25kaXRpb246e25hbWU6ImxpZmVyYXktbmF2aWdhdGlvbi10b3VjaCIsdHJpZ2dlcjoibGlmZXJheS1uYXZpZ2F0aW9uIix1YToidG91Y2gifX19LHJlcXVpcmVzOlsiYXVpLWNvbXBvbmVudCIsImV2ZW50LW1vdXNlZW50ZXIiXX0sImxpZmVyYXktbmF2aWdhdGlvbi1pbnRlcmFjdGlvbiI6e3BhdGg6Im5hdmlnYXRpb25faW50ZXJhY3Rpb24uanMiLHBsdWdpbnM6eyJsaWZlcmF5LW5hdmlnYXRpb24taW50ZXJhY3Rpb24tdG91Y2giOntjb25kaXRpb246e25hbWU6ImxpZmVyYXktbmF2aWdhdGlvbi1pbnRlcmFjdGlvbi10b3VjaCIsdHJpZ2dlcjoibGlmZXJheS1uYXZpZ2F0aW9uLWludGVyYWN0aW9uIix1YToidG91Y2gifX19LHJlcXVpcmVzOlsiYXVpLWJhc2UiLCJhdWktY29tcG9uZW50IiwiZXZlbnQtbW91c2VlbnRlciIsIm5vZGUtZm9jdXNtYW5hZ2VyIiwicGx1Z2luIl19LCJsaWZlcmF5LW5hdmlnYXRpb24taW50ZXJhY3Rpb24tdG91Y2giOntwYXRoOiJuYXZpZ2F0aW9uX2ludGVyYWN0aW9uX3RvdWNoLmpzIiwKcmVxdWlyZXM6WyJldmVudC10YXAiLCJldmVudC10b3VjaCIsImxpZmVyYXktbmF2aWdhdGlvbi1pbnRlcmFjdGlvbiJdfSwibGlmZXJheS1uYXZpZ2F0aW9uLXRvdWNoIjp7cGF0aDoibmF2aWdhdGlvbl90b3VjaC5qcyIscmVxdWlyZXM6WyJldmVudC10b3VjaCIsImxpZmVyYXktbmF2aWdhdGlvbiJdfSwibGlmZXJheS1ub2RlIjp7cGF0aDoibm9kZS5qcyIscmVxdWlyZXM6WyJkb20tYmFzZSJdfSwibGlmZXJheS1ub3RpY2UiOntwYXRoOiJub3RpY2UuanMiLHJlcXVpcmVzOlsiYXVpLWJhc2UiLCJ0cmFuc2l0aW9uIl19LCJsaWZlcmF5LW5vdGlmaWNhdGlvbiI6e3BhdGg6Im5vdGlmaWNhdGlvbi5qcyIscmVxdWlyZXM6WyJsaWZlcmF5LWFsZXJ0Il19LCJsaWZlcmF5LXBhZ2luYXRpb24iOntwYXRoOiJwYWdpbmF0aW9uLmpzIixyZXF1aXJlczpbImF1aS1wYWdpbmF0aW9uIl19LCJsaWZlcmF5LXBhbmVsLXNlYXJjaCI6e3BhdGg6InBhbmVsX3NlYXJjaC5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsCiJsaWZlcmF5LXNlYXJjaC1maWx0ZXIiXX0sImxpZmVyYXktcG9sbGVyIjp7cGF0aDoicG9sbGVyLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiaW8iLCJqc29uIl19LCJsaWZlcmF5LXBvcnRsZXQtYmFzZSI6e3BhdGg6InBvcnRsZXRfYmFzZS5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsImxpZmVyYXktbm9kZSJdfSwibGlmZXJheS1wb3J0bGV0LXVybCI6e3BhdGg6InBvcnRsZXRfdXJsLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiYXVpLWlvLXJlcXVlc3QiLCJxdWVyeXN0cmluZy1zdHJpbmdpZnktc2ltcGxlIl19LCJsaWZlcmF5LXByZXZpZXciOntwYXRoOiJwcmV2aWV3LmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiYXVpLW92ZXJsYXktbWFzay1kZXByZWNhdGVkIiwiYXVpLXRvb2xiYXIiLCJsaWZlcmF5LXdpZGdldC16aW5kZXgiXX0sImxpZmVyYXktcHJvZ3Jlc3MiOntwYXRoOiJwcm9ncmVzcy5qcyIscmVxdWlyZXM6WyJhdWktcHJvZ3Jlc3NiYXIiXX0sImxpZmVyYXktcmF0aW5ncyI6e3BhdGg6InJhdGluZ3MuanMiLApyZXF1aXJlczpbImF1aS1pby1yZXF1ZXN0IiwiYXVpLXJhdGluZyJdfSwibGlmZXJheS1yZXNpemUtcnRsIjp7Y29uZGl0aW9uOnt0ZXN0OmZ1bmN0aW9uKGIpe3JldHVybiJydGwiPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpcn0sdHJpZ2dlcjoicmVzaXplLWJhc2UifSxwYXRoOiJyZXNpemVfcnRsLmpzIn0sImxpZmVyYXktcmVzdG9yZS1lbnRyeSI6e3BhdGg6InJlc3RvcmVfZW50cnkuanMiLHJlcXVpcmVzOlsiYXVpLWlvLXBsdWdpbi1kZXByZWNhdGVkIiwiYXVpLWlvLXJlcXVlc3QiLCJhdWktbW9kYWwiLCJsaWZlcmF5LXBvcnRsZXQtYmFzZSJdfSwibGlmZXJheS1zZWFyY2gtY29udGFpbmVyIjp7cGF0aDoic2VhcmNoX2NvbnRhaW5lci5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsImF1aS1kYXRhdGFibGUtY29yZSJdfSwibGlmZXJheS1zZWFyY2gtY29udGFpbmVyLW1vdmUiOntwYXRoOiJzZWFyY2hfY29udGFpbmVyX21vdmUuanMiLHJlcXVpcmVzOiJhdWktY29tcG9uZW50IGRkLWNvbnN0cmFpbiBkZC1kZWxlZ2F0ZSBkZC1kcmFnIGRkLWRyb3AgZGQtcHJveHkgcGx1Z2luIi5zcGxpdCgiICIpfSwKImxpZmVyYXktc2VhcmNoLWNvbnRhaW5lci1zZWxlY3QiOntwYXRoOiJzZWFyY2hfY29udGFpbmVyX3NlbGVjdC5qcyIscmVxdWlyZXM6WyJhdWktY29tcG9uZW50IiwiYXVpLXVybCIsInBsdWdpbiJdfSwibGlmZXJheS1zZWFyY2gtZmlsdGVyIjp7cGF0aDoic2VhcmNoX2ZpbHRlci5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsImF1dG9jb21wbGV0ZS1iYXNlIiwiYXV0b2NvbXBsZXRlLWZpbHRlcnMiXX0sImxpZmVyYXktc2VydmljZS1kYXRhc291cmNlIjp7cGF0aDoic2VydmljZV9kYXRhc291cmNlLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiZGF0YXNvdXJjZS1sb2NhbCJdfSwibGlmZXJheS1zZXNzaW9uIjp7cGF0aDoic2Vzc2lvbi5qcyIscmVxdWlyZXM6WyJhdWktaW8tcmVxdWVzdCIsImF1aS10aW1lciIsImNvb2tpZSIsImxpZmVyYXktbm90aWZpY2F0aW9uIl19LCJsaWZlcmF5LXNpZ24taW4tbW9kYWwiOntwYXRoOiJzaWduX2luX21vZGFsLmpzIixyZXF1aXJlczoiYXVpLWJhc2UgYXVpLWNvbXBvbmVudCBhdWktaW8tcmVxdWVzdCBhdWktcGFyc2UtY29udGVudCBsaWZlcmF5LWZvcm0gbGlmZXJheS1wb3J0bGV0LXVybCBsaWZlcmF5LXV0aWwtd2luZG93IHBsdWdpbiIuc3BsaXQoIiAiKX0sCiJsaWZlcmF5LXNvY2lhbC1ib29rbWFya3MiOntwYXRoOiJzb2NpYWxfYm9va21hcmtzLmpzIixyZXF1aXJlczpbImF1aS1jb21wb25lbnQiLCJhdWktbm9kZSJdfSwibGlmZXJheS1zb3J0YWJsZSI6e3BhdGg6InNvcnRhYmxlLmpzIixyZXF1aXJlczpbImxpZmVyYXktZGQtcHJveHkiLCJzb3J0YWJsZSJdfSwibGlmZXJheS1zb3VyY2UtZWRpdG9yIjp7cGF0aDoic291cmNlX2VkaXRvci5qcyIscmVxdWlyZXM6WyJhdWktYWNlLWVkaXRvciJdfSwibGlmZXJheS1zdG9yYWdlLWZvcm1hdHRlciI6e3BhdGg6InN0b3JhZ2VfZm9ybWF0dGVyLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiZGF0YXR5cGUtbnVtYmVyLWZvcm1hdCJdfSwibGlmZXJheS1zdG9yZSI6e3BhdGg6InN0b3JlLmpzIixyZXF1aXJlczpbImF1aS1pby1yZXF1ZXN0Il19LCJsaWZlcmF5LXRvZ2dsZXItaW50ZXJhY3Rpb24iOntwYXRoOiJ0b2dnbGVyX2ludGVyYWN0aW9uLmpzIixyZXF1aXJlczpbImxpZmVyYXktdG9nZ2xlci1rZXktZmlsdGVyIl19LAoibGlmZXJheS10b2dnbGVyLWtleS1maWx0ZXIiOntwYXRoOiJ0b2dnbGVyX2tleV9maWx0ZXIuanMiLHJlcXVpcmVzOlsiYXVpLWV2ZW50LWJhc2UiXX0sImxpZmVyYXktdG9rZW4tbGlzdCI6e3BhdGg6InRva2VuX2xpc3QuanMiLHJlcXVpcmVzOlsiYXVpLWJhc2UiLCJhdWktdGVtcGxhdGUtZGVwcmVjYXRlZCJdfSwibGlmZXJheS10cmFuc2xhdGlvbi1tYW5hZ2VyIjp7cGF0aDoidHJhbnNsYXRpb25fbWFuYWdlci5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSJdfSwibGlmZXJheS11bmRvLW1hbmFnZXIiOntwYXRoOiJ1bmRvX21hbmFnZXIuanMiLHJlcXVpcmVzOlsiYXVpLWRhdGEtc2V0LWRlcHJlY2F0ZWQiLCJiYXNlIl19LCJsaWZlcmF5LXVwbG9hZCI6e3BhdGg6InVwbG9hZC5qcyIscmVxdWlyZXM6ImF1aS1pby1yZXF1ZXN0IGF1aS10ZW1wbGF0ZS1kZXByZWNhdGVkIGNvbGxlY3Rpb24gbGlmZXJheS1wb3J0bGV0LWJhc2UgbGlmZXJheS1zdG9yYWdlLWZvcm1hdHRlciB1cGxvYWRlciIuc3BsaXQoIiAiKX0sCiJsaWZlcmF5LXVybC1wcmV2aWV3Ijp7cGF0aDoidXJsX3ByZXZpZXcuanMiLHJlcXVpcmVzOlsiYXVpLWNvbXBvbmVudCIsImxpZmVyYXktdXRpbC13aW5kb3ciXX0sImxpZmVyYXktdXRpbC13aW5kb3ciOntwYXRoOiJ1dGlsX3dpbmRvdy5qcyIscmVxdWlyZXM6WyJhdWktZGlhbG9nLWlmcmFtZS1kZXByZWNhdGVkIiwiYXVpLW1vZGFsIiwiZXZlbnQtcmVzaXplIiwibGlmZXJheS13aWRnZXQtemluZGV4Il19LCJsaWZlcmF5LXdpZGdldC1zaXplLWFuaW1hdGlvbi1wbHVnaW4iOntwYXRoOiJ3aWRnZXRfc2l6ZV9hbmltYXRpb25fcGx1Z2luLmpzIixyZXF1aXJlczpbImFuaW0tZWFzaW5nIiwicGx1Z2luIiwid2lkZ2V0Il19LCJsaWZlcmF5LXdpZGdldC16aW5kZXgiOntwYXRoOiJ3aWRnZXRfemluZGV4LmpzIixyZXF1aXJlczpbImF1aS1tb2RhbCIsInBsdWdpbiJdfSwibGlmZXJheS14bWwtZm9ybWF0dGVyIjp7cGF0aDoieG1sX2Zvcm1hdHRlci5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSJdfX0sCnJvb3Q6ZCsiL2xpZmVyYXkvIn0sbWlzYzp7YmFzZTpkKyIvbWlzYy8iLGNvbWJpbmU6RSxtb2R1bGVzOntzd2ZvYmplY3Q6e3BhdGg6Ii9zd2ZvYmplY3QuanMifSxzd2Z1cGxvYWQ6e3BhdGg6Ii9zd2Z1cGxvYWQvc3dmdXBsb2FkLmpzIn19LHJvb3Q6ZCsiL21pc2MvIn0scG9ydGFsOntiYXNlOmQrIi9saWZlcmF5LyIsY29tYmluZTohMSxtb2R1bGVzOnsicG9ydGFsLWF2YWlsYWJsZS1sYW5ndWFnZXMiOntwYXRoOmEuZ2V0QXZhaWxhYmxlTGFuZ1BhdGgoKSxyZXF1aXJlczpbImxpZmVyYXktbGFuZ3VhZ2UiXX19LHJvb3Q6ZCsiL2xpZmVyYXkvIn19LGluc2VydEJlZm9yZToibGlmZXJheVBvcnRhbENTUyIsbGFuZzp0aGVtZURpc3BsYXkuZ2V0QkNQNDdMYW5ndWFnZUlkKCkscm9vdDpkKyIvYXVpLyIsdXNlQnJvd3NlckNvbnNvbGU6ITF9O3EucHVzaCgibGlmZXJheS1icm93c2VyLXNlbGVjdG9ycyIpfSkoKTsKKGZ1bmN0aW9uKCl7dmFyIGE9WVVJKCk7YS5odG1sNXNoaXYmJmEuaHRtbDVzaGl2KCk7dmFyIEU9YS51c2U7YS51c2U9ZnVuY3Rpb24oKXt2YXIgcT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCksdD1MaWZlcmF5LmN1cnJlbnRVUkwsZj1xW3EubGVuZ3RoLTFdOyJmdW5jdGlvbiI9PT10eXBlb2YgZiYmKHFbcS5sZW5ndGgtMV09ZnVuY3Rpb24oKXtMaWZlcmF5LmN1cnJlbnRVUkw9PT10JiZmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO3JldHVybiBFLmFwcGx5KHRoaXMscSl9O3dpbmRvdy5BVUk9ZnVuY3Rpb24oKXtyZXR1cm4gYX07YS5taXgoQVVJLFlVSSk7QVVJLiQ9d2luZG93LmpRdWVyeTtBVUkuXz13aW5kb3cuX30pKCk7CihmdW5jdGlvbihhKXt2YXIgRT1mdW5jdGlvbih0KXt0aGlzLiRlbGVtZW50PWEodCk7dGhpcy4kY2xvc2U9dGhpcy4kZWxlbWVudC5maW5kKCIuYmFzaWMtc2VhcmNoLWNsb3NlIik7dGhpcy4kaW5wdXQ9dGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dFt0eXBlXHgzZCJ0ZXh0Il0nKTt0aGlzLiRzdWJtaXQ9dGhpcy4kZWxlbWVudC5maW5kKCdbdHlwZVx4M2Qic3VibWl0Il0nKTt0aGlzLiRjbG9zZS5vbigiY2xpY2subGV4aWNvbi5jbG9zZS5jb2xsYXBzaWJsZS1zZWFyY2giLGEucHJveHkodGhpcy5jbG9zZSx0aGlzKSk7dGhpcy4kaW5wdXQub24oImJsdXIubGV4aWNvbi5jb2xsYXBzaWJsZS1zZWFyY2giLGEucHJveHkodGhpcy5ibHVyLHRoaXMpKTt0aGlzLiRpbnB1dC5vbigiZm9jdXMubGV4aWNvbi5jb2xsYXBzaWJsZS1zZWFyY2giLGEucHJveHkodGhpcy5mb2N1cyx0aGlzKSk7dGhpcy4kc3VibWl0Lm9uKCJjbGljay5sZXhpY29uLnN1Ym1pdC5jb2xsYXBzaWJsZS1zZWFyY2giLAphLnByb3h5KHRoaXMuc3VibWl0LHRoaXMpKX07RS5CUkVBS1BPSU5UPTc2ODtFLlRSQU5TSVRJT05fRFVSQVRJT049NTAwO0UucHJvdG90eXBlPXtibHVyOmZ1bmN0aW9uKHQpe2EodC5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KCIuYmFzaWMtc2VhcmNoIikucmVtb3ZlQ2xhc3MoImZvY3VzIil9LGNsb3NlOmZ1bmN0aW9uKHQpe3ZhciBmPWEodC5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KCIuYmFzaWMtc2VhcmNoIik7dD1mLmZpbmQoIi5iYXNpYy1zZWFyY2gtc2xpZGVyIik7dmFyIGQ9Zi5maW5kKCdbdHlwZVx4M2Qic3VibWl0Il0nKSxjPWZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGFzcygiYmFzaWMtc2VhcmNoLXRyYW5zaXRpb24iKTtmLnRyaWdnZXIoImNsb3NlZC5sZXhpY29uLmNvbGxhcHNpYmxlLnNlYXJjaCIpfSxiPWEuc3VwcG9ydC50cmFuc2l0aW9uO2ImJnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoYyx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoRS5UUkFOU0lUSU9OX0RVUkFUSU9OKTsKZi5hZGRDbGFzcygiYmFzaWMtc2VhcmNoLXRyYW5zaXRpb24iKS5yZW1vdmVDbGFzcygib3BlbiIpO2I/ZC5mb2N1cygpOmMuY2FsbCh0aGlzKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuJGNsb3NlLm9mZigiY2xpY2subGV4aWNvbi5jbG9zZS5jb2xsYXBzaWJsZS1zZWFyY2giKTt0aGlzLiRpbnB1dC5vZmYoImJsdXIubGV4aWNvbi5jb2xsYXBzaWJsZS1zZWFyY2giKTt0aGlzLiRpbnB1dC5vZmYoImZvY3VzLmxleGljb24uY29sbGFwc2libGUtc2VhcmNoIik7dGhpcy4kc3VibWl0Lm9mZigiY2xpY2subGV4aWNvbi5zdWJtaXQuY29sbGFwc2libGUtc2VhcmNoIil9LGZvY3VzOmZ1bmN0aW9uKHQpe2EodC5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KCIuYmFzaWMtc2VhcmNoIikuYWRkQ2xhc3MoImZvY3VzIil9LHN1Ym1pdDpmdW5jdGlvbih0KXtpZih3aW5kb3cuaW5uZXJXaWR0aDxFLkJSRUFLUE9JTlQpe3ZhciBmPWEodC5jdXJyZW50VGFyZ2V0KS5wYXJlbnRzKCIuYmFzaWMtc2VhcmNoIiksCmQ9Zi5maW5kKCdpbnB1dFt0eXBlXHgzZCJ0ZXh0Il0nKSxjPWYuZmluZCgiLmJhc2ljLXNlYXJjaC1zbGlkZXIiKSxiPWZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGFzcygiYmFzaWMtc2VhcmNoLXRyYW5zaXRpb24iKTtkLmZvY3VzKCk7Zi50cmlnZ2VyKCJvcGVuLmxleGljb24uY29sbGFwc2libGUuc2VhcmNoIil9O2YuaGFzQ2xhc3MoIm9wZW4iKXx8KHQucHJldmVudERlZmF1bHQoKSwodD1hLnN1cHBvcnQudHJhbnNpdGlvbikmJmMub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoYix0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoRS5UUkFOU0lUSU9OX0RVUkFUSU9OKSxmLmFkZENsYXNzKCJiYXNpYy1zZWFyY2gtdHJhbnNpdGlvbiIpLmFkZENsYXNzKCJvcGVuIiksdHx8Yi5jYWxsKHRoaXMpKX19fTt2YXIgcT1hLmZuLmNvbGxhcHNpYmxlU2VhcmNoO2EuZm4uY29sbGFwc2libGVTZWFyY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPQphKHRoaXMpLGQ9Zi5kYXRhKCJsZXhpY29uLmNvbGxhcHNpYmxlLXNlYXJjaCIpO2R8fChkPW5ldyBFKHRoaXMpLGYuZGF0YSgibGV4aWNvbi5jb2xsYXBzaWJsZS1zZWFyY2giLGQpKTtpZigic3RyaW5nIj09dHlwZW9mIHQpZFt0XSgpfSl9O2EuZm4uY29sbGFwc2libGVTZWFyY2guQ29uc3RydWN0b3I9RTthLmZuLmNvbGxhcHNpYmxlU2VhcmNoLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXthLmZuLmNvbGxhcHNpYmxlU2VhcmNoPXE7cmV0dXJuIHRoaXN9O2EoZG9jdW1lbnQpLm9uKCJibHVyLmxleGljb24uY29sbGFwc2libGUtc2VhcmNoLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXHgzZCJjb2xsYXBzaWJsZS1zZWFyY2giXSBpbnB1dFt0eXBlXHgzZCJ0ZXh0Il0nLGEucHJveHkoRS5wcm90b3R5cGUuYmx1cixFKSkub24oImNsaWNrLmxleGljb24uY2xvc2UuY29sbGFwc2libGUtc2VhcmNoLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXHgzZCJjb2xsYXBzaWJsZS1zZWFyY2giXSAuYmFzaWMtc2VhcmNoLWNsb3NlJywKYS5wcm94eShFLnByb3RvdHlwZS5jbG9zZSxFKSkub24oImNsaWNrLmxleGljb24uc3VibWl0LmNvbGxhcHNpYmxlLXNlYXJjaC5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZVx4M2QiY29sbGFwc2libGUtc2VhcmNoIl0gW3R5cGVceDNkInN1Ym1pdCJdJyxhLnByb3h5KEUucHJvdG90eXBlLnN1Ym1pdCxFKSkub24oImZvY3VzLmxleGljb24uY29sbGFwc2libGUtc2VhcmNoLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXHgzZCJjb2xsYXBzaWJsZS1zZWFyY2giXSBpbnB1dFt0eXBlXHgzZCJ0ZXh0Il0nLGEucHJveHkoRS5wcm90b3R5cGUuZm9jdXMsRSkpfSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe3ZhciBFPWEoZG9jdW1lbnQpLHE9ITEsdD1mdW5jdGlvbigpe3F8fChhKHdpbmRvdykub24oInJlc2l6ZSIsZihmdW5jdGlvbihlKXtFLnRyaWdnZXIoInNjcmVlbkNoYW5nZS5sZXhpY29uLnNpZGVuYXYiKX0sMTUwKSkscT0hMCl9LGY9ZnVuY3Rpb24oZSxrKXt2YXIgbTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcD10aGlzLHM9YXJndW1lbnRzO2NsZWFyVGltZW91dChtKTttPXNldFRpbWVvdXQoZnVuY3Rpb24oKXttPW51bGw7ZS5hcHBseShwLHMpfSxrKX19LGQ9ZnVuY3Rpb24oKXt2YXIgZT0wO3JldHVybiBmdW5jdGlvbihrLG0pe3ZhciBwPWsuYXR0cigiaWQiKTtwfHwocD1tK2UrKyxrLmF0dHIoImlkIixwKSk7cmV0dXJuIHB9fSgpLGM9ZnVuY3Rpb24oZSxrKXt0aGlzLmluaXQoZSxrKX07Yy5UUkFOU0lUSU9OX0RVUkFUSU9OPTUwMDtjLnByb3RvdHlwZT17aW5pdDpmdW5jdGlvbihlLGspe3ZhciBtPSJzaWRlbmF2Ij09PWUuZGF0YSgidG9nZ2xlIik7Cms9YS5leHRlbmQoe30sYS5mbi5zaWRlTmF2aWdhdGlvbi5kZWZhdWx0cyxrKTtrLmJyZWFrcG9pbnQ9cGFyc2VJbnQoay5icmVha3BvaW50LDEwKXx8MDtrLmNvbnRhaW5lcj1rLmNvbnRhaW5lcnx8ZS5kYXRhKCJ0YXJnZXQiKXx8ZS5hdHRyKCJocmVmIik7ay5ndXR0ZXI9cGFyc2VJbnQoay5ndXR0ZXIsMTApfHwwO2sucnRsPSJydGwiPT09RS5hdHRyKCJkaXIiKTtrLndpZHRoPXBhcnNlSW50KGsud2lkdGgsMTApfHwwO2sud2lkdGhPcmlnaW5hbD1rLndpZHRoO20mJihrLmNsb3NlZENsYXNzPWUuZGF0YSgiY2xvc2VkLWNsYXNzIil8fCJjbG9zZWQiLGsuY29udGVudD1lLmRhdGEoImNvbnRlbnQiKSxrLmVxdWFsSGVpZ2h0PSExLGsubG9hZGluZ0luZGljYXRvclRQTD1lLmRhdGEoImxvYWRpbmctaW5kaWNhdG9yLXRwbCIpfHxrLmxvYWRpbmdJbmRpY2F0b3JUUEwsay5vcGVuQ2xhc3M9ZS5kYXRhKCJvcGVuLWNsYXNzIil8fCJvcGVuIixrLnRvZ2dsZXI9ZSxrLnR5cGU9ZS5kYXRhKCJ0eXBlIiksCmsudHlwZU1vYmlsZT1lLmRhdGEoInR5cGUtbW9iaWxlIiksay51cmw9ZS5kYXRhKCJ1cmwiKSxrLnVzZURlbGVnYXRlPWUuZGF0YSgidXNlLWRlbGVnYXRlIiksay53aWR0aD0iIix2b2lkIDA9PT1rLnVzZURlbGVnYXRlJiYoay51c2VEZWxlZ2F0ZT0hMCkpO3RoaXMudG9nZ2xlcj1lO3RoaXMub3B0aW9ucz1rO3RoaXMudXNlRGF0YUF0dHJpYnV0ZT1tO3RoaXMuX2JpbmRVSSgpO3RoaXMuX3JlbmRlclVJKCl9LGNsZWFyU3R5bGU6ZnVuY3Rpb24oZSl7dmFyIGs9dGhpcy5vcHRpb25zLG09YShrLmNvbnRhaW5lcikscD1tLmZpbmQoay5jb250ZW50KS5maXJzdCgpLGs9bS5maW5kKGsubmF2aWdhdGlvbikuZmlyc3QoKSxtPW0uZmluZCgiLnNpZGVuYXYtbWVudSIpLmZpcnN0KCk7cC5hZGQoaykuYWRkKG0pLmNzcyhlLCIiKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucyxrPWEodGhpcy5vcHRpb25zLmNvbnRhaW5lcik7RS5vZmYoImNsaWNrLmNsb3NlLmxleGljb24uc2lkZW5hdiIsCnRoaXMuY2xvc2VCdXR0b25TZWxlY3Rvcik7RS5kYXRhKHRoaXMuZGF0YUNsb3NlQnV0dG9uU2VsZWN0b3IsbnVsbCk7ZS51c2VEZWxlZ2F0ZT8oRS5vZmYoImNsaWNrLmxleGljb24uc2lkZW5hdiIsdGhpcy50b2dnbGVyU2VsZWN0b3IpLEUuZGF0YSh0aGlzLmRhdGFUb2dnbGVyU2VsZWN0b3IsbnVsbCkpOmsub2ZmKCJjbGljay5sZXhpY29uLnNpZGVuYXYiKTtrLmRhdGEoImxleGljb24uc2lkZW5hdiIsbnVsbCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLnVzZURhdGFBdHRyaWJ1dGU/dGhpcy5oaWRlU2ltcGxlU2lkZW5hdigpOnRoaXMudG9nZ2xlTmF2aWdhdGlvbighMSl9LGhpZGVTaWRlbmF2OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLGs9YShlLmNvbnRhaW5lciksbT1rLmZpbmQoZS5jb250ZW50KS5maXJzdCgpLGs9ay5maW5kKGUubmF2aWdhdGlvbikuZmlyc3QoKSxwPWsuZmluZCgiLnNpZGVuYXYtbWVudSIpLmZpcnN0KCkscz10aGlzLl9pc1NpZGVuYXZSaWdodCgpLApsPWUucnRsPyJyaWdodCI6ImxlZnQiO3MmJihsPWUucnRsPyJsZWZ0IjoicmlnaHQiKTttLmNzcygicGFkZGluZy0iK2wsIiIpLmNzcyhsLCIiKTtrLmNzcygid2lkdGgiLCIiKTtzJiZwLmNzcyhsLHRoaXMuX2dldFNpZGVuYXZXaWR0aCgpKX0saGlkZVNpbXBsZVNpZGVuYXY6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGs9ZS5vcHRpb25zO2lmKCFlLl9pc1NpbXBsZVNpZGVuYXZDbG9zZWQoKSl7dmFyIG09YShrLmNvbnRlbnQpLmZpcnN0KCkscD1hKGsuY29udGFpbmVyKSxzPWsuY2xvc2VkQ2xhc3Msaz1rLm9wZW5DbGFzcyxsPWUudG9nZ2xlcjtwLnRyaWdnZXIoe3RvZ2dsZXI6YShlLnRvZ2dsZXJTZWxlY3RvciksdHlwZToiY2xvc2VkU3RhcnQubGV4aWNvbi5zaWRlbmF2In0pO2UuX29uU2lkZW5hdlRyYW5zaXRpb25FbmQobSxmdW5jdGlvbigpe3AucmVtb3ZlQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpO2wucmVtb3ZlQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpO3AudHJpZ2dlcih7dG9nZ2xlcjphKGUudG9nZ2xlclNlbGVjdG9yKSwKdHlwZToiY2xvc2VkLmxleGljb24uc2lkZW5hdiJ9KX0pO20uaGFzQ2xhc3MoaykmJm0uYWRkQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpLmFkZENsYXNzKHMpLnJlbW92ZUNsYXNzKGspO3AuYWRkQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpO2wuYWRkQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpO3AuYWRkQ2xhc3MocykucmVtb3ZlQ2xhc3Moayk7bC5yZW1vdmVDbGFzcyhrKS5yZW1vdmVDbGFzcygiYWN0aXZlIil9fSxzZXRFcXVhbEhlaWdodDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztpZihlLmVxdWFsSGVpZ2h0KXt2YXIgaz1hKGUuY29udGFpbmVyKSxtPWUuY29udGVudCxwPWUubmF2aWdhdGlvbixlPXRoaXMubW9iaWxlP2UudHlwZU1vYmlsZTplLnR5cGU7ImZpeGVkIiE9PWUmJiJmaXhlZC1wdXNoIiE9PWUmJihtPWsuZmluZChtKS5maXJzdCgpLHA9ay5maW5kKHApLmZpcnN0KCksaz1rLmZpbmQoIi5zaWRlbmF2LW1lbnUiKS5maXJzdCgpLGU9TWF0aC5tYXgobS5vdXRlckhlaWdodCgpLApwLm91dGVySGVpZ2h0KCkpLG0uY3NzKCJtaW4taGVpZ2h0IixlKSxwLmNzcygibWluLWhlaWdodCIsZSksay5jc3MoIm1pbi1oZWlnaHQiLGUpKX19LHNob3c6ZnVuY3Rpb24oKXt0aGlzLnVzZURhdGFBdHRyaWJ1dGU/dGhpcy5zaG93U2ltcGxlU2lkZW5hdigpOnRoaXMudG9nZ2xlTmF2aWdhdGlvbighMCl9LHNob3dTaWRlbmF2OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxrPWUubW9iaWxlLG09ZS5vcHRpb25zLHA9YShtLmNvbnRhaW5lcikscz1wLmZpbmQobS5jb250ZW50KS5maXJzdCgpLGw9cC5maW5kKG0ubmF2aWdhdGlvbikuZmlyc3QoKSxoPWwuZmluZCgiLnNpZGVuYXYtbWVudSIpLmZpcnN0KCksdT1lLl9pc1NpZGVuYXZSaWdodCgpLHc9ZS5fZ2V0U2lkZW5hdldpZHRoKCksej13K20uZ3V0dGVyLEE9bS51cmw7QSYmKHAub25lKCJ1cmxMb2FkZWQubGV4aWNvbi5zaWRlbmF2IixmdW5jdGlvbihIKXtlLnNldEVxdWFsSGVpZ2h0KCl9KSxlLl9sb2FkVXJsKGgsQSxwKSk7cD0KbS5ydGw/InJpZ2h0IjoibGVmdCI7dSYmKHA9bS5ydGw/ImxlZnQiOiJyaWdodCIpO3U9az9wOiJwYWRkaW5nLSIrcDsiZml4ZWQiIT09KGs/bS50eXBlTW9iaWxlOm0udHlwZSkmJnMuY3NzKHUseik7bC5jc3MoIndpZHRoIix3KTtoLmNzcygid2lkdGgiLHcpfSxzaG93U2ltcGxlU2lkZW5hdjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsaz1lLm9wdGlvbnM7aWYoZS5faXNTaW1wbGVTaWRlbmF2Q2xvc2VkKCkpe3ZhciBtPWEoay5jb250ZW50KS5maXJzdCgpLHA9YShrLmNvbnRhaW5lcikscz1rLmNsb3NlZENsYXNzLGw9ay5vcGVuQ2xhc3MsaD1rLnRvZ2dsZXI7KGs9aC5kYXRhKCJ1cmwiKSkmJmUuX2xvYWRVcmwocCxrKTtwLnRyaWdnZXIoe3RvZ2dsZXI6YShlLnRvZ2dsZXJTZWxlY3RvciksdHlwZToib3BlblN0YXJ0LmxleGljb24uc2lkZW5hdiJ9KTtlLl9vblNpZGVuYXZUcmFuc2l0aW9uRW5kKG0sZnVuY3Rpb24oKXtwLnJlbW92ZUNsYXNzKCJzaWRlbmF2LXRyYW5zaXRpb24iKTsKaC5yZW1vdmVDbGFzcygic2lkZW5hdi10cmFuc2l0aW9uIik7cC50cmlnZ2VyKHt0b2dnbGVyOmEoZS50b2dnbGVyU2VsZWN0b3IpLHR5cGU6Im9wZW4ubGV4aWNvbi5zaWRlbmF2In0pfSk7bS5hZGRDbGFzcygic2lkZW5hdi10cmFuc2l0aW9uIikuYWRkQ2xhc3MobCkucmVtb3ZlQ2xhc3Mocyk7cC5hZGRDbGFzcygic2lkZW5hdi10cmFuc2l0aW9uIik7aC5hZGRDbGFzcygic2lkZW5hdi10cmFuc2l0aW9uIik7cC5hZGRDbGFzcyhsKS5yZW1vdmVDbGFzcyhzKTtoLmFkZENsYXNzKCJhY3RpdmUiKS5hZGRDbGFzcyhsKX19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMudXNlRGF0YUF0dHJpYnV0ZT90aGlzLnRvZ2dsZVNpbXBsZVNpZGVuYXYoKTp0aGlzLnRvZ2dsZU5hdmlnYXRpb24oKX0sdG9nZ2xlTmF2aWdhdGlvbjpmdW5jdGlvbihlKXt2YXIgaz10aGlzLG09ay5vcHRpb25zLHA9YShtLmNvbnRhaW5lcikscz1wLmZpbmQoIi5zaWRlbmF2LW1lbnUiKS5maXJzdCgpLGw9ay50b2dnbGVyLApoPW0ud2lkdGg7ZT0iYm9vbGVhbiI9PT1hLnR5cGUoZSk/ZTpwLmhhc0NsYXNzKCJjbG9zZWQiKTt2YXIgdT1rLl9pc1NpZGVuYXZSaWdodCgpLHc9ZT8ic2hvd1NpZGVuYXYiOiJoaWRlU2lkZW5hdiI7ZT9wLnRyaWdnZXIoe3RvZ2dsZXI6bCx0eXBlOiJvcGVuU3RhcnQubGV4aWNvbi5zaWRlbmF2In0pOnAudHJpZ2dlcih7dG9nZ2xlcjpsLHR5cGU6ImNsb3NlZFN0YXJ0LmxleGljb24uc2lkZW5hdiJ9KTtrLl9vblNpZGVuYXZUcmFuc2l0aW9uRW5kKHAsZnVuY3Rpb24oKXt2YXIgej1wLmZpbmQoIi5zaWRlbmF2LW1lbnUiKS5maXJzdCgpO3AuaGFzQ2xhc3MoImNsb3NlZCIpPyhrLmNsZWFyU3R5bGUoIm1pbi1oZWlnaHQiKSxsLnJlbW92ZUNsYXNzKCJvcGVuIikucmVtb3ZlQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpLHAudHJpZ2dlcih7dG9nZ2xlcjpsLHR5cGU6ImNsb3NlZC5sZXhpY29uLnNpZGVuYXYifSkpOihsLmFkZENsYXNzKCJvcGVuIikucmVtb3ZlQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpLApwLnRyaWdnZXIoe3RvZ2dsZXI6bCx0eXBlOiJvcGVuLmxleGljb24uc2lkZW5hdiJ9KSk7ay5tb2JpbGUmJmsuX2ZvY3VzRWxlbWVudCh6KX0pO2UmJihrLnNldEVxdWFsSGVpZ2h0KCkscy5jc3MoIndpZHRoIixoKSxtPW0ucnRsPyJsZWZ0IjoicmlnaHQiLHUmJnMuY3NzKG0sIiIpKTtwLmFkZENsYXNzKCJzaWRlbmF2LXRyYW5zaXRpb24iKTtsLmFkZENsYXNzKCJzaWRlbmF2LXRyYW5zaXRpb24iKTtrW3ddKHApO3AudG9nZ2xlQ2xhc3MoImNsb3NlZCIsIWUpLnRvZ2dsZUNsYXNzKCJvcGVuIixlKTtsLnRvZ2dsZUNsYXNzKCJhY3RpdmUiLGUpLnRvZ2dsZUNsYXNzKCJvcGVuIixlKX0sdG9nZ2xlU2ltcGxlU2lkZW5hdjpmdW5jdGlvbigpe3RoaXMuX2lzU2ltcGxlU2lkZW5hdkNsb3NlZCgpP3RoaXMuc2hvd1NpbXBsZVNpZGVuYXYoKTp0aGlzLmhpZGVTaW1wbGVTaWRlbmF2KCl9LHZpc2libGU6ZnVuY3Rpb24oKXt2YXIgZTt0aGlzLnVzZURhdGFBdHRyaWJ1dGU/ZT10aGlzLl9pc1NpbXBsZVNpZGVuYXZDbG9zZWQoKToKKGU9YSh0aGlzLm9wdGlvbnMuY29udGFpbmVyKSxlPWUuaGFzQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpPyFlLmhhc0NsYXNzKCJjbG9zZWQiKTplLmhhc0NsYXNzKCJjbG9zZWQiKSk7cmV0dXJuIWV9LF9iaW5kVUk6ZnVuY3Rpb24oKXt0aGlzLnVzZURhdGFBdHRyaWJ1dGV8fCh0KCksdGhpcy5fb25TY3JlZW5DaGFuZ2UoKSk7dGhpcy5vcHRpb25zLnVzZURlbGVnYXRlP3RoaXMuX29uRGVsZWdhdGVDbGlja1RyaWdnZXIoKTp0aGlzLl9vbkNsaWNrVHJpZ2dlcigpO3RoaXMuX29uQ2xpY2tTaWRlbmF2Q2xvc2UoKX0sX2ZvY3VzRWxlbWVudDpmdW5jdGlvbihlKXtlLmZvY3VzKCl9LF9nZXRTaWRlbmF2V2lkdGg6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMud2lkdGhPcmlnaW5hbCxrPWUsbT13aW5kb3cuaW5uZXJXaWR0aDttPGUrNDAmJihrPW0tNDApO3JldHVybiBrfSxfZ2V0U2ltcGxlU2lkZW5hdlR5cGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMsaz10aGlzLl9pc0Rlc2t0b3AoKSwKbT1lLnR5cGUsZT1lLnR5cGVNb2JpbGU7cmV0dXJuIGsmJiJmaXhlZC1wdXNoIj09PW0/ImRlc2t0b3AtZml4ZWQtcHVzaCI6a3x8ImZpeGVkLXB1c2giIT09ZT8iZml4ZWQiOiJtb2JpbGUtZml4ZWQtcHVzaCJ9LF9pc0Rlc2t0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PXRoaXMub3B0aW9ucy5icmVha3BvaW50fSxfaXNTaWRlbmF2UmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLm9wdGlvbnMuY29udGFpbmVyKS5oYXNDbGFzcygic2lkZW5hdi1yaWdodCIpfSxfaXNTaW1wbGVTaWRlbmF2Q2xvc2VkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLGs9ZS5vcGVuQ2xhc3M7cmV0dXJuIWEoZS5jb250YWluZXIpLmhhc0NsYXNzKGspfSxfbG9hZFVybDpmdW5jdGlvbihlLGssbSl7dmFyIHA9ZS5kYXRhKCJ1cmwtbG9hZGVkIikscz1wP3AucmVhZHlTdGF0ZTowO209bXx8ZTt2YXIgbD1lLmZpbmQoIi5zaWRlYmFyLWJvZHkiKS5maXJzdCgpO3N8fAohbC5sZW5ndGh8fCJzdHJpbmciIT09dHlwZW9mIGsmJiFhLmlzUGxhaW5PYmplY3Qoayl8fChsLmFwcGVuZCgnXHgzY2RpdiBjbGFzc1x4M2Qic2lkZW5hdi1sb2FkaW5nIlx4M2UnK3RoaXMub3B0aW9ucy5sb2FkaW5nSW5kaWNhdG9yVFBMKyJceDNjL2Rpdlx4M2UiKSxwPWEuYWpheChrKS5kb25lKGZ1bmN0aW9uKGgpe2wuYXBwZW5kKGgpO20udHJpZ2dlcigidXJsTG9hZGVkLmxleGljb24uc2lkZW5hdiIpO2wuZmluZCgiLnNpZGVuYXYtbG9hZGluZyIpLnJlbW92ZSgpfSksZS5kYXRhKCJ1cmwtbG9hZGVkIixwKSk7cmV0dXJuIHB9LF9vbkNsaWNrU2lkZW5hdkNsb3NlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxrPWUub3B0aW9uczthKGsuY29udGFpbmVyKTt2YXIgaz1hKGsuY29udGFpbmVyKS5maW5kKCIuc2lkZW5hdi1jbG9zZSIpLmZpcnN0KCksaz0iIyIrZChrLCJnZW5lcmF0ZWRMZXhpY29uU2lkZW5hdkNsb3NlSWQiKSxtPSJsZXhpY29uLiIraztFLmRhdGEobSl8fChFLmRhdGEobSwKInRydWUiKSxFLm9uKCJjbGljay5jbG9zZS5sZXhpY29uLnNpZGVuYXYiLGssZnVuY3Rpb24ocCl7cC5wcmV2ZW50RGVmYXVsdCgpO2UudG9nZ2xlKCl9KSk7ZS5jbG9zZUJ1dHRvblNlbGVjdG9yPWs7ZS5kYXRhQ2xvc2VCdXR0b25TZWxlY3Rvcj1tfSxfb25DbGlja1RyaWdnZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UudG9nZ2xlci5vbigiY2xpY2subGV4aWNvbi5zaWRlbmF2IixmdW5jdGlvbihrKXtlLnRvZ2dsZSgpfSl9LF9vbkRlbGVnYXRlQ2xpY2tUcmlnZ2VyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxrPSIjIitkKGUudG9nZ2xlciwiZ2VuZXJhdGVkTGV4aWNvblNpZGVuYXZUb2dnbGVySWQiKSxtPSJsZXhpY29uLiIraztFLmRhdGEobSl8fChFLmRhdGEobSwidHJ1ZSIpLEUub24oImNsaWNrLmxleGljb24uc2lkZW5hdiIsayxmdW5jdGlvbihwKXtlLnRvZ2dsZSgpO3AucHJldmVudERlZmF1bHQoKX0pKTtlLnRvZ2dsZXJTZWxlY3Rvcj1rO2UuZGF0YVRvZ2dsZXJTZWxlY3Rvcj0KbX0sX29uU2NyZWVuQ2hhbmdlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxrPWUub3B0aW9ucyxtPWEoay5jb250YWluZXIpLHA9ZS50b2dnbGVyLHM9ZS5fc2V0U2NyZWVuU2l6ZSgpO0Uub24oInNjcmVlbkNoYW5nZS5sZXhpY29uLnNpZGVuYXYiLGZ1bmN0aW9uKGwpe3ZhciBoPWUuX3NldFNjcmVlblNpemUoKTtsPWUuX2lzU2lkZW5hdlJpZ2h0KCk7dmFyIHU9aD9rLnR5cGU6ay50eXBlTW9iaWxlLHc9ImZpeGVkIj09PXV8fCJmaXhlZC1wdXNoIj09PXUsdT1tLmZpbmQoIi5zaWRlbmF2LW1lbnUiKS5maXJzdCgpO20uZmluZChrLm5hdmlnYXRpb24pLmZpcnN0KCk7dmFyIHo9ay53aWR0aE9yaWdpbmFsLEE9ay5ydGw/ImxlZnQiOiJyaWdodCI7bS50b2dnbGVDbGFzcygic2lkZW5hdi1maXhlZCIsdyk7aWYoIWgmJnN8fGgmJiFzKWUuaGlkZVNpZGVuYXYoKSxlLmNsZWFyU3R5bGUoIm1pbi1oZWlnaHQiKSxtLmFkZENsYXNzKCJjbG9zZWQiKS5yZW1vdmVDbGFzcygib3BlbiIpLHAucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJvcGVuIiksCnM9ITEsaCYmKGwmJnUuY3NzKEEseikuY3NzKCJ3aWR0aCIseikscz0hMCk7dz1tLmhhc0NsYXNzKCJjbG9zZWQiKTtofHwoaD16LHdpbmRvdy5pbm5lcldpZHRoPD16JiYoaD13aW5kb3cuaW5uZXJXaWR0aC1rLmd1dHRlci0yNSksbCYmKHcmJnUuY3NzKEEsaCksdS5jc3MoIndpZHRoIixoKSkscz0hMSk7d3x8KGUuY2xlYXJTdHlsZSgibWluLWhlaWdodCIpLGUuc2hvd1NpZGVuYXYoKSxlLnNldEVxdWFsSGVpZ2h0KCkpfSl9LF9vblNpZGVuYXZUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUsayl7dmFyIG09ZnVuY3Rpb24oKXtlLnJlbW92ZUNsYXNzKCJzaWRlbmF2LXRyYW5zaXRpb24iKTtrJiZrKCl9O2Euc3VwcG9ydC50cmFuc2l0aW9uP2Uub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKHApe20oKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6bS5jYWxsKHRoaXMpfSxfcmVuZGVyTmF2OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLAprPWEoZS5jb250YWluZXIpLG09ay5maW5kKGUubmF2aWdhdGlvbikuZmlyc3QoKS5maW5kKCIuc2lkZW5hdi1tZW51IikuZmlyc3QoKSxwPWsuaGFzQ2xhc3MoImNsb3NlZCIpLHM9dGhpcy5faXNTaWRlbmF2UmlnaHQoKSxsPXRoaXMuX2dldFNpZGVuYXZXaWR0aCgpO3A/KG0uY3NzKCJ3aWR0aCIsbCkscyYmbS5jc3MoZS5ydGw/ImxlZnQiOiJyaWdodCIsbCkpOih0aGlzLnNob3dTaWRlbmF2KCksdGhpcy5zZXRFcXVhbEhlaWdodCgpKTtrLnJlbW92ZUNsYXNzKCJzaWRlbmF2LWpzLWZvdWMiKX0sX3JlbmRlclVJOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLGs9YShlLmNvbnRhaW5lciksbT10aGlzLnRvZ2dsZXIscD10aGlzLm1vYmlsZSxzPXA/ZS50eXBlTW9iaWxlOmUudHlwZTt0aGlzLnVzZURhdGFBdHRyaWJ1dGV8fChwJiYoay5hZGRDbGFzcygiY2xvc2VkIikucmVtb3ZlQ2xhc3MoIm9wZW4iKSxtLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5yZW1vdmVDbGFzcygib3BlbiIpKSwKInJpZ2h0Ij09PWUucG9zaXRpb24mJmsuYWRkQ2xhc3MoInNpZGVuYXYtcmlnaHQiKSwicmVsYXRpdmUiIT09cyYmay5hZGRDbGFzcygic2lkZW5hdi1maXhlZCIpLHRoaXMuX3JlbmRlck5hdigpKX0sX3NldFNjcmVlblNpemU6ZnVuY3Rpb24oKXt2YXIgZTtlPWEod2luZG93KS53aWR0aCgpO2U9MTIwMDw9ZT8ibGciOjk5Mjw9ZT8ibWQiOjc2ODw9ZT8ic20iOjQ4MDw9ZT8ieHMiOiJ4eHMiO2U9InNtIj09PWV8fCJtZCI9PT1lfHwibGciPT09ZTt0aGlzLm1vYmlsZT0hZTtyZXR1cm4gdGhpcy5kZXNrdG9wPWV9fTt2YXIgYj1hLmZuLnNpZGVOYXZpZ2F0aW9uLGc9ZnVuY3Rpb24oZSl7dmFyIGs9dGhpcy5zZWxlY3RvcixtPXRoaXMscD0ic3RyaW5nIj09PXR5cGVvZiBlLHM9Imluc3RhbmNlIj09PWUsbD1hLm1ha2VBcnJheShhcmd1bWVudHMpLnNsaWNlKDEpO3A/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9YSh0aGlzKS5kYXRhKCJsZXhpY29uLnNpZGVuYXYiKTtpZihoKXtpZihzKXJldHVybiBtPQpoLCExO3ZhciB1O2EuaXNGdW5jdGlvbihoW2VdKSYmMCE9PWUuaW5kZXhPZigiXyIpJiYodT1oW2VdLmFwcGx5KGgsbCkpO2lmKHUhPT1oJiZ2b2lkIDAhPT11KXJldHVybiBtPXUuanF1ZXJ5P20ucHVzaFN0YWNrKHUuZ2V0KCkpOnUsITF9ZWxzZSBpZihzKXJldHVybiBtPW51bGwsITF9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaD1hKHRoaXMpLHU9ZSx3PWssej1oLmRhdGEoImxleGljb24uc2lkZW5hdiIpO3p8fCh1fHwodT17fSksdS5zZWxlY3Rvcj13LHo9bmV3IGMoaCx1KSxoLmRhdGEoImxleGljb24uc2lkZW5hdiIseikpfSk7cmV0dXJuIG19O2cubm9Db25mbGljdD1mdW5jdGlvbigpe2EuZm4uc2lkZU5hdmlnYXRpb249YjtyZXR1cm4gdGhpc307Zy5kZWZhdWx0cz17YnJlYWtwb2ludDo3NjgsY29udGVudDoiLnNpZGVuYXYtY29udGVudCIsZXF1YWxIZWlnaHQ6ITAsZ3V0dGVyOiIxNXB4Iixsb2FkaW5nSW5kaWNhdG9yVFBMOidceDNjZGl2IGNsYXNzXHgzZCJsb2FkaW5nLWFuaW1hdGlvbiBsb2FkaW5nLWFuaW1hdGlvbi1tZCJceDNlXHgzYy9kaXZceDNlJywKbmF2aWdhdGlvbjoiLnNpZGVuYXYtbWVudS1zbGlkZXIiLHBvc2l0aW9uOiJsZWZ0Iix0eXBlOiJyZWxhdGl2ZSIsdHlwZU1vYmlsZToicmVsYXRpdmUiLHVybDpudWxsLHVzZURlbGVnYXRlOiEwLHdpZHRoOiIyMjVweCJ9O2cuQ29uc3RydWN0b3I9YzthLmZuLnNpZGVOYXZpZ2F0aW9uPWc7YShmdW5jdGlvbigpe3ZhciBlPWEoJ1tkYXRhLXRvZ2dsZVx4M2Qic2lkZW5hdiJdJyk7Zy5jYWxsKGUpfSl9KShqUXVlcnkpOwooZnVuY3Rpb24oYSl7YS5mbi5mbT1mdW5jdGlvbihFLHEpe3ZhciB0PXRoaXM7MT09PWFyZ3VtZW50cy5sZW5ndGg/dD10aGlzLm1hcChmdW5jdGlvbihmLGQpe3ZhciBjPWQuZm9ybXx8ZDtpZihjJiZhLm5vZGVOYW1lKGMsImZvcm0iKSl7dmFyIGI9YShjKSxiPShiLmRhdGEoImZtLm5hbWVzcGFjZSIpfHxiLmRhdGEoImZtLW5hbWVzcGFjZSIpfHwiIikrRTsoYz1jW2JdfHxjLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYikpJiYhYy5ub2RlTmFtZSYmKGM9YS5tYWtlQXJyYXkoYykpO3JldHVybiBjfX0pOiJzdHJpbmciPT09dHlwZW9mIEUmJnRoaXMuZGF0YSgiZm0uIitFLHEpO3JldHVybiB0fX0pKEFVSS4kKTsKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihFKXtFKCJ1bmRlZmluZWQiIT10eXBlb2YgYT9hOndpbmRvdy5aZXB0byl9KShmdW5jdGlvbihFKXtmdW5jdGlvbiBxKGIpe3ZhciBnPWIuZGF0YTtiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoYi5wcmV2ZW50RGVmYXVsdCgpLEUoYi50YXJnZXQpLmFqYXhTdWJtaXQoZykpfWZ1bmN0aW9uIHQoYil7dmFyIGc9Yi50YXJnZXQsZT1FKGcpO2lmKCFlLmlzKCJbdHlwZVx4M2RzdWJtaXRdLFt0eXBlXHgzZGltYWdlXSIpKXtnPWUuY2xvc2VzdCgiW3R5cGVceDNkc3VibWl0XSIpO2lmKDA9PT1nLmxlbmd0aClyZXR1cm47Zz1nWzBdfXZhciBrPXRoaXM7ay5jbGs9ZzsiaW1hZ2UiPT1nLnR5cGUmJih2b2lkIDAhPT1iLm9mZnNldFg/KGsuY2xrX3g9Yi5vZmZzZXRYLGsuY2xrX3k9Yi5vZmZzZXRZKToiZnVuY3Rpb24iPT10eXBlb2YgRS5mbi5vZmZzZXQ/KGU9ZS5vZmZzZXQoKSxrLmNsa194PWIucGFnZVgtZS5sZWZ0LGsuY2xrX3k9Yi5wYWdlWS1lLnRvcCk6CihrLmNsa194PWIucGFnZVgtZy5vZmZzZXRMZWZ0LGsuY2xrX3k9Yi5wYWdlWS1nLm9mZnNldFRvcCkpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtrLmNsaz1rLmNsa194PWsuY2xrX3k9bnVsbH0sMTAwKX1mdW5jdGlvbiBmKCl7aWYoRS5mbi5hamF4U3VibWl0LmRlYnVnKXt2YXIgYj0iW2pxdWVyeS5mb3JtXSAiK0FycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCIiKTt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nP3dpbmRvdy5jb25zb2xlLmxvZyhiKTp3aW5kb3cub3BlcmEmJndpbmRvdy5vcGVyYS5wb3N0RXJyb3ImJndpbmRvdy5vcGVyYS5wb3N0RXJyb3IoYil9fXZhciBkPXt9O2QuZmlsZWFwaT12b2lkIDAhPT1FKCJceDNjaW5wdXQgdHlwZVx4M2QnZmlsZScvXHgzZSIpLmdldCgwKS5maWxlcztkLmZvcm1kYXRhPXZvaWQgMCE9PXdpbmRvdy5Gb3JtRGF0YTt2YXIgYz0hIUUuZm4ucHJvcDtFLmZuLmF0dHIyPWZ1bmN0aW9uKCl7aWYoIWMpcmV0dXJuIHRoaXMuYXR0ci5hcHBseSh0aGlzLAphcmd1bWVudHMpO3ZhciBiPXRoaXMucHJvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGImJmIuanF1ZXJ5fHwic3RyaW5nIj09PXR5cGVvZiBiP2I6dGhpcy5hdHRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07RS5mbi5hamF4U3VibWl0PWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGcoSSl7ST1FLnBhcmFtKEksYi50cmFkaXRpb25hbCkuc3BsaXQoIlx4MjYiKTt2YXIgTT1JLmxlbmd0aCxEPVtdLEosUDtmb3IoSj0wO0o8TTtKKyspSVtKXT1JW0pdLnJlcGxhY2UoL1wrL2csIiAiKSxQPUlbSl0uc3BsaXQoIlx4M2QiKSxELnB1c2goW2RlY29kZVVSSUNvbXBvbmVudChQWzBdKSxkZWNvZGVVUklDb21wb25lbnQoUFsxXSldKTtyZXR1cm4gRH1mdW5jdGlvbiBlKEkpe2Zvcih2YXIgTT1uZXcgRm9ybURhdGEsRD0wO0Q8SS5sZW5ndGg7RCsrKU0uYXBwZW5kKElbRF0ubmFtZSxJW0RdLnZhbHVlKTtpZihiLmV4dHJhRGF0YSlmb3IoST1nKGIuZXh0cmFEYXRhKSxEPTA7RDxJLmxlbmd0aDtEKyspSVtEXSYmCk0uYXBwZW5kKElbRF1bMF0sSVtEXVsxXSk7Yi5kYXRhPW51bGw7RD1FLmV4dGVuZCghMCx7fSxFLmFqYXhTZXR0aW5ncyxiLHtjb250ZW50VHlwZTohMSxwcm9jZXNzRGF0YTohMSxjYWNoZTohMSx0eXBlOm18fCJQT1NUIn0pO2IudXBsb2FkUHJvZ3Jlc3MmJihELnhocj1mdW5jdGlvbigpe3ZhciBQPUUuYWpheFNldHRpbmdzLnhocigpO1AudXBsb2FkJiZQLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24oVil7dmFyIFk9MCxuYT1WLmxvYWRlZHx8Vi5wb3NpdGlvbixmYT1WLnRvdGFsO1YubGVuZ3RoQ29tcHV0YWJsZSYmKFk9TWF0aC5jZWlsKG5hL2ZhKjEwMCkpO2IudXBsb2FkUHJvZ3Jlc3MoVixuYSxmYSxZKX0sITEpO3JldHVybiBQfSk7RC5kYXRhPW51bGw7dmFyIEo9RC5iZWZvcmVTZW5kO0QuYmVmb3JlU2VuZD1mdW5jdGlvbihQLFYpe1YuZGF0YT1iLmZvcm1EYXRhP2IuZm9ybURhdGE6TTtKJiZKLmNhbGwodGhpcyxQLFYpfTtyZXR1cm4gRS5hamF4KEQpfQpmdW5jdGlvbiBrKEkpe2Z1bmN0aW9uIE0ocWEpe3ZhciB3YT1udWxsO3RyeXtxYS5jb250ZW50V2luZG93JiYod2E9cWEuY29udGVudFdpbmRvdy5kb2N1bWVudCl9Y2F0Y2goSmEpe2YoImNhbm5vdCBnZXQgaWZyYW1lLmNvbnRlbnRXaW5kb3cgZG9jdW1lbnQ6ICIrSmEpfWlmKHdhKXJldHVybiB3YTt0cnl7d2E9cWEuY29udGVudERvY3VtZW50P3FhLmNvbnRlbnREb2N1bWVudDpxYS5kb2N1bWVudH1jYXRjaChQYSl7ZigiY2Fubm90IGdldCBpZnJhbWUuY29udGVudERvY3VtZW50OiAiK1BhKSx3YT1xYS5kb2N1bWVudH1yZXR1cm4gd2F9ZnVuY3Rpb24gRCgpe2Z1bmN0aW9uIHFhKCl7dHJ5e3ZhciBTYT1NKFopLnJlYWR5U3RhdGU7Zigic3RhdGUgXHgzZCAiK1NhKTtTYSYmInVuaW5pdGlhbGl6ZWQiPT1TYS50b0xvd2VyQ2FzZSgpJiZzZXRUaW1lb3V0KHFhLDUwKX1jYXRjaChjYyl7ZigiU2VydmVyIGFib3J0OiAiLGNjLCIgKCIsY2MubmFtZSwiKSIpLEooRWEpLEFhJiZjbGVhclRpbWVvdXQoQWEpLApBYT12b2lkIDB9fXZhciB3YT1zLmF0dHIyKCJ0YXJnZXQiKSxKYT1zLmF0dHIyKCJhY3Rpb24iKSxQYT1zLmF0dHIoImVuY3R5cGUiKXx8cy5hdHRyKCJlbmNvZGluZyIpfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7UC5zZXRBdHRyaWJ1dGUoInRhcmdldCIsZmEpO20mJiEvcG9zdC9pLnRlc3QobSl8fFAuc2V0QXR0cmlidXRlKCJtZXRob2QiLCJQT1NUIik7SmEhPVkudXJsJiZQLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixZLnVybCk7WS5za2lwRW5jb2RpbmdPdmVycmlkZXx8bSYmIS9wb3N0L2kudGVzdChtKXx8cy5hdHRyKHtlbmNvZGluZzoibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsZW5jdHlwZToibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9KTtZLnRpbWVvdXQmJihBYT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7b2E9ITA7SihGYSl9LFkudGltZW91dCkpO3ZhciBmYj1bXTt0cnl7aWYoWS5leHRyYURhdGEpZm9yKHZhciB4YiBpbiBZLmV4dHJhRGF0YSlZLmV4dHJhRGF0YS5oYXNPd25Qcm9wZXJ0eSh4YikmJgooRS5pc1BsYWluT2JqZWN0KFkuZXh0cmFEYXRhW3hiXSkmJlkuZXh0cmFEYXRhW3hiXS5oYXNPd25Qcm9wZXJ0eSgibmFtZSIpJiZZLmV4dHJhRGF0YVt4Yl0uaGFzT3duUHJvcGVydHkoInZhbHVlIik/ZmIucHVzaChFKCdceDNjaW5wdXQgdHlwZVx4M2QiaGlkZGVuIiBuYW1lXHgzZCInK1kuZXh0cmFEYXRhW3hiXS5uYW1lKyciXHgzZScpLnZhbChZLmV4dHJhRGF0YVt4Yl0udmFsdWUpLmFwcGVuZFRvKFApWzBdKTpmYi5wdXNoKEUoJ1x4M2NpbnB1dCB0eXBlXHgzZCJoaWRkZW4iIG5hbWVceDNkIicreGIrJyJceDNlJykudmFsKFkuZXh0cmFEYXRhW3hiXSkuYXBwZW5kVG8oUClbMF0pKTtZLmlmcmFtZVRhcmdldHx8aWEuYXBwZW5kVG8oImJvZHkiKTtaLmF0dGFjaEV2ZW50P1ouYXR0YWNoRXZlbnQoIm9ubG9hZCIsSik6Wi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixKLCExKTtzZXRUaW1lb3V0KHFhLDE1KTt0cnl7UC5zdWJtaXQoKX1jYXRjaChFYil7ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLnN1Ym1pdC5hcHBseShQKX19ZmluYWxseXtQLnNldEF0dHJpYnV0ZSgiYWN0aW9uIiwKSmEpLFAuc2V0QXR0cmlidXRlKCJlbmN0eXBlIixQYSksd2E/UC5zZXRBdHRyaWJ1dGUoInRhcmdldCIsd2EpOnMucmVtb3ZlQXR0cigidGFyZ2V0IiksRShmYikucmVtb3ZlKCl9fWZ1bmN0aW9uIEoocWEpe2lmKCFlYS5hYm9ydGVkJiYhQWIpaWYoVWE9TShaKSxVYXx8KGYoImNhbm5vdCBhY2Nlc3MgcmVzcG9uc2UgZG9jdW1lbnQiKSxxYT1FYSkscWE9PT1GYSYmZWEpZWEuYWJvcnQoInRpbWVvdXQiKSxwYS5yZWplY3QoZWEsInRpbWVvdXQiKTtlbHNlIGlmKHFhPT1FYSYmZWEpZWEuYWJvcnQoInNlcnZlciBhYm9ydCIpLHBhLnJlamVjdChlYSwiZXJyb3IiLCJzZXJ2ZXIgYWJvcnQiKTtlbHNlIGlmKFVhJiZVYS5sb2NhdGlvbi5ocmVmIT1ZLmlmcmFtZVNyY3x8b2Epe1ouZGV0YWNoRXZlbnQ/Wi5kZXRhY2hFdmVudCgib25sb2FkIixKKTpaLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEosITEpO3FhPSJzdWNjZXNzIjt2YXIgd2E7dHJ5e2lmKG9hKXRocm93InRpbWVvdXQiOwp2YXIgSmE9InhtbCI9PVkuZGF0YVR5cGV8fFVhLlhNTERvY3VtZW50fHxFLmlzWE1MRG9jKFVhKTtmKCJpc1htbFx4M2QiK0phKTtpZighSmEmJndpbmRvdy5vcGVyYSYmKG51bGw9PT1VYS5ib2R5fHwhVWEuYm9keS5pbm5lckhUTUwpJiYtLXdiKXtmKCJyZXF1ZWluZyBvbkxvYWQgY2FsbGJhY2ssIERPTSBub3QgYXZhaWxhYmxlIik7c2V0VGltZW91dChKLDI1MCk7cmV0dXJufXZhciBQYT1VYS5ib2R5P1VhLmJvZHk6VWEuZG9jdW1lbnRFbGVtZW50O2VhLnJlc3BvbnNlVGV4dD1QYT9QYS5pbm5lckhUTUw6bnVsbDtlYS5yZXNwb25zZVhNTD1VYS5YTUxEb2N1bWVudD9VYS5YTUxEb2N1bWVudDpVYTtKYSYmKFkuZGF0YVR5cGU9InhtbCIpO2VhLmdldFJlc3BvbnNlSGVhZGVyPWZ1bmN0aW9uKEZjKXtyZXR1cm57ImNvbnRlbnQtdHlwZSI6WS5kYXRhVHlwZX1bRmMudG9Mb3dlckNhc2UoKV19O1BhJiYoZWEuc3RhdHVzPU51bWJlcihQYS5nZXRBdHRyaWJ1dGUoInN0YXR1cyIpKXx8CmVhLnN0YXR1cyxlYS5zdGF0dXNUZXh0PVBhLmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxlYS5zdGF0dXNUZXh0KTt2YXIgZmI9KFkuZGF0YVR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpLHhiPS8oanNvbnxzY3JpcHR8dGV4dCkvLnRlc3QoZmIpO2lmKHhifHxZLnRleHRhcmVhKXt2YXIgRWI9VWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRleHRhcmVhIilbMF07aWYoRWIpZWEucmVzcG9uc2VUZXh0PUViLnZhbHVlLGVhLnN0YXR1cz1OdW1iZXIoRWIuZ2V0QXR0cmlidXRlKCJzdGF0dXMiKSl8fGVhLnN0YXR1cyxlYS5zdGF0dXNUZXh0PUViLmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxlYS5zdGF0dXNUZXh0O2Vsc2UgaWYoeGIpe3ZhciBTYT1VYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIilbMF0sY2M9VWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTtTYT9lYS5yZXNwb25zZVRleHQ9U2EudGV4dENvbnRlbnQ/U2EudGV4dENvbnRlbnQ6U2EuaW5uZXJUZXh0OgpjYyYmKGVhLnJlc3BvbnNlVGV4dD1jYy50ZXh0Q29udGVudD9jYy50ZXh0Q29udGVudDpjYy5pbm5lclRleHQpfX1lbHNlInhtbCI9PWZiJiYhZWEucmVzcG9uc2VYTUwmJmVhLnJlc3BvbnNlVGV4dCYmKGVhLnJlc3BvbnNlWE1MPU1iKGVhLnJlc3BvbnNlVGV4dCkpO3RyeXtXYT10YShlYSxmYixZKX1jYXRjaChZYil7cWE9InBhcnNlcmVycm9yIixlYS5lcnJvcj13YT1ZYnx8cWF9fWNhdGNoKEJjKXtmKCJlcnJvciBjYXVnaHQ6ICIsQmMpLHFhPSJlcnJvciIsZWEuZXJyb3I9d2E9QmN8fHFhfWVhLmFib3J0ZWQmJihmKCJ1cGxvYWQgYWJvcnRlZCIpLHFhPW51bGwpO2VhLnN0YXR1cyYmKHFhPTIwMDw9ZWEuc3RhdHVzJiYzMDA+ZWEuc3RhdHVzfHwzMDQ9PT1lYS5zdGF0dXM/InN1Y2Nlc3MiOiJlcnJvciIpOyJzdWNjZXNzIj09PXFhPyhZLnN1Y2Nlc3MmJlkuc3VjY2Vzcy5jYWxsKFkuY29udGV4dCxXYSwic3VjY2VzcyIsZWEpLHBhLnJlc29sdmUoZWEucmVzcG9uc2VUZXh0LCJzdWNjZXNzIiwKZWEpLG5hJiZFLmV2ZW50LnRyaWdnZXIoImFqYXhTdWNjZXNzIixbZWEsWV0pKTpxYSYmKHZvaWQgMD09PXdhJiYod2E9ZWEuc3RhdHVzVGV4dCksWS5lcnJvciYmWS5lcnJvci5jYWxsKFkuY29udGV4dCxlYSxxYSx3YSkscGEucmVqZWN0KGVhLCJlcnJvciIsd2EpLG5hJiZFLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW2VhLFksd2FdKSk7bmEmJkUuZXZlbnQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbZWEsWV0pO25hJiYhLS1FLmFjdGl2ZSYmRS5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpO1kuY29tcGxldGUmJlkuY29tcGxldGUuY2FsbChZLmNvbnRleHQsZWEscWEpO0FiPSEwO1kudGltZW91dCYmY2xlYXJUaW1lb3V0KEFhKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WS5pZnJhbWVUYXJnZXQ/aWEuYXR0cigic3JjIixZLmlmcmFtZVNyYyk6aWEucmVtb3ZlKCk7ZWEucmVzcG9uc2VYTUw9bnVsbH0sMTAwKX19dmFyIFA9c1swXSxWLFksbmEsZmEsaWEsWixlYSxvYSxBYSxwYT0KRS5EZWZlcnJlZCgpO3BhLmFib3J0PWZ1bmN0aW9uKHFhKXtlYS5hYm9ydChxYSl9O2lmKEkpZm9yKFY9MDtWPGgubGVuZ3RoO1YrKylJPUUoaFtWXSksYz9JLnByb3AoImRpc2FibGVkIiwhMSk6SS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpO1k9RS5leHRlbmQoITAse30sRS5hamF4U2V0dGluZ3MsYik7WS5jb250ZXh0PVkuY29udGV4dHx8WTtmYT0ianFGb3JtSU8iKyhuZXcgRGF0ZSkuZ2V0VGltZSgpO1kuaWZyYW1lVGFyZ2V0PyhpYT1FKFkuaWZyYW1lVGFyZ2V0KSwoVj1pYS5hdHRyMigibmFtZSIpKT9mYT1WOmlhLmF0dHIyKCJuYW1lIixmYSkpOihpYT1FKCdceDNjaWZyYW1lIG5hbWVceDNkIicrZmErJyIgc3JjXHgzZCInK1kuaWZyYW1lU3JjKyciIC9ceDNlJyksaWEuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiLTEwMDBweCIsbGVmdDoiLTEwMDBweCJ9KSk7Wj1pYVswXTtlYT17YWJvcnRlZDowLHJlc3BvbnNlVGV4dDpudWxsLHJlc3BvbnNlWE1MOm51bGwsc3RhdHVzOjAsCnN0YXR1c1RleHQ6Im4vYSIsZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7fSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbigpe30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbigpe30sYWJvcnQ6ZnVuY3Rpb24ocWEpe3ZhciB3YT0idGltZW91dCI9PT1xYT8idGltZW91dCI6ImFib3J0ZWQiO2YoImFib3J0aW5nIHVwbG9hZC4uLiAiK3dhKTt0aGlzLmFib3J0ZWQ9MTt0cnl7Wi5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kJiZaLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQoIlN0b3AiKX1jYXRjaChKYSl7fWlhLmF0dHIoInNyYyIsWS5pZnJhbWVTcmMpO2VhLmVycm9yPXdhO1kuZXJyb3ImJlkuZXJyb3IuY2FsbChZLmNvbnRleHQsZWEsd2EscWEpO25hJiZFLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW2VhLFksd2FdKTtZLmNvbXBsZXRlJiZZLmNvbXBsZXRlLmNhbGwoWS5jb250ZXh0LGVhLHdhKX19OyhuYT1ZLmdsb2JhbCkmJgowPT09RS5hY3RpdmUrKyYmRS5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtuYSYmRS5ldmVudC50cmlnZ2VyKCJhamF4U2VuZCIsW2VhLFldKTtpZihZLmJlZm9yZVNlbmQmJiExPT09WS5iZWZvcmVTZW5kLmNhbGwoWS5jb250ZXh0LGVhLFkpKXJldHVybiBZLmdsb2JhbCYmRS5hY3RpdmUtLSxwYS5yZWplY3QoKSxwYTtpZihlYS5hYm9ydGVkKXJldHVybiBwYS5yZWplY3QoKSxwYTsoST1QLmNsaykmJihWPUkubmFtZSkmJiFJLmRpc2FibGVkJiYoWS5leHRyYURhdGE9WS5leHRyYURhdGF8fHt9LFkuZXh0cmFEYXRhW1ZdPUkudmFsdWUsImltYWdlIj09SS50eXBlJiYoWS5leHRyYURhdGFbVisiLngiXT1QLmNsa194LFkuZXh0cmFEYXRhW1YrIi55Il09UC5jbGtfeSkpO3ZhciBGYT0xLEVhPTI7ST1FKCJtZXRhW25hbWVceDNkY3NyZi10b2tlbl0iKS5hdHRyKCJjb250ZW50Iik7KFY9RSgibWV0YVtuYW1lXHgzZGNzcmYtcGFyYW1dIikuYXR0cigiY29udGVudCIpKSYmSSYmKFkuZXh0cmFEYXRhPQpZLmV4dHJhRGF0YXx8e30sWS5leHRyYURhdGFbVl09SSk7WS5mb3JjZVN5bmM/RCgpOnNldFRpbWVvdXQoRCwxMCk7dmFyIFdhLFVhLHdiPTUwLEFiLE1iPUUucGFyc2VYTUx8fGZ1bmN0aW9uKHFhLHdhKXt3aW5kb3cuQWN0aXZlWE9iamVjdD8od2E9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSx3YS5hc3luYz0iZmFsc2UiLHdhLmxvYWRYTUwocWEpKTp3YT0obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHFhLCJ0ZXh0L3htbCIpO3JldHVybiB3YSYmd2EuZG9jdW1lbnRFbGVtZW50JiYicGFyc2VyZXJyb3IiIT13YS5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWU/d2E6bnVsbH0sZ2E9RS5wYXJzZUpTT058fGZ1bmN0aW9uKHFhKXtyZXR1cm4gd2luZG93LmV2YWwoIigiK3FhKyIpIil9LHRhPWZ1bmN0aW9uKHFhLHdhLEphKXt2YXIgUGE9cWEuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixmYj0ieG1sIj09PXdhfHwhd2EmJjA8PVBhLmluZGV4T2YoInhtbCIpOwpxYT1mYj9xYS5yZXNwb25zZVhNTDpxYS5yZXNwb25zZVRleHQ7ZmImJiJwYXJzZXJlcnJvciI9PT1xYS5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUmJkUuZXJyb3ImJkUuZXJyb3IoInBhcnNlcmVycm9yIik7SmEmJkphLmRhdGFGaWx0ZXImJihxYT1KYS5kYXRhRmlsdGVyKHFhLHdhKSk7InN0cmluZyI9PT10eXBlb2YgcWEmJigianNvbiI9PT13YXx8IXdhJiYwPD1QYS5pbmRleE9mKCJqc29uIik/cWE9Z2EocWEpOigic2NyaXB0Ij09PXdhfHwhd2EmJjA8PVBhLmluZGV4T2YoImphdmFzY3JpcHQiKSkmJkUuZ2xvYmFsRXZhbChxYSkpO3JldHVybiBxYX07cmV0dXJuIHBhfWlmKCF0aGlzLmxlbmd0aClyZXR1cm4gZigiYWpheFN1Ym1pdDogc2tpcHBpbmcgc3VibWl0IHByb2Nlc3MgLSBubyBlbGVtZW50IHNlbGVjdGVkIiksdGhpczt2YXIgbSxwLHM9dGhpczsiZnVuY3Rpb24iPT10eXBlb2YgYj9iPXtzdWNjZXNzOmJ9OnZvaWQgMD09PWImJihiPXt9KTttPWIudHlwZXx8dGhpcy5hdHRyMigibWV0aG9kIik7CnA9Yi51cmx8fHRoaXMuYXR0cjIoImFjdGlvbiIpOyhwPShwPSJzdHJpbmciPT09dHlwZW9mIHA/RS50cmltKHApOiIiKXx8d2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiKSYmKHA9KHAubWF0Y2goL14oW14jXSspLyl8fFtdKVsxXSk7Yj1FLmV4dGVuZCghMCx7dXJsOnAsc3VjY2VzczpFLmFqYXhTZXR0aW5ncy5zdWNjZXNzLHR5cGU6bXx8RS5hamF4U2V0dGluZ3MudHlwZSxpZnJhbWVTcmM6L15odHRwcy9pLnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiKT8iamF2YXNjcmlwdDpmYWxzZSI6ImFib3V0OmJsYW5rIn0sYik7cD17fTt0aGlzLnRyaWdnZXIoImZvcm0tcHJlLXNlcmlhbGl6ZSIsW3RoaXMsYixwXSk7aWYocC52ZXRvKXJldHVybiBmKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXByZS1zZXJpYWxpemUgdHJpZ2dlciIpLHRoaXM7aWYoYi5iZWZvcmVTZXJpYWxpemUmJiExPT09Yi5iZWZvcmVTZXJpYWxpemUodGhpcyxiKSlyZXR1cm4gZigiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVNlcmlhbGl6ZSBjYWxsYmFjayIpLAp0aGlzO3ZhciBsPWIudHJhZGl0aW9uYWw7dm9pZCAwPT09bCYmKGw9RS5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO3ZhciBoPVtdLHUsdz10aGlzLmZvcm1Ub0FycmF5KGIuc2VtYW50aWMsaCk7Yi5kYXRhJiYoYi5leHRyYURhdGE9Yi5kYXRhLHU9RS5wYXJhbShiLmRhdGEsbCkpO2lmKGIuYmVmb3JlU3VibWl0JiYhMT09PWIuYmVmb3JlU3VibWl0KHcsdGhpcyxiKSlyZXR1cm4gZigiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVN1Ym1pdCBjYWxsYmFjayIpLHRoaXM7dGhpcy50cmlnZ2VyKCJmb3JtLXN1Ym1pdC12YWxpZGF0ZSIsW3csdGhpcyxiLHBdKTtpZihwLnZldG8pcmV0dXJuIGYoImFqYXhTdWJtaXQ6IHN1Ym1pdCB2ZXRvZWQgdmlhIGZvcm0tc3VibWl0LXZhbGlkYXRlIHRyaWdnZXIiKSx0aGlzO3A9RS5wYXJhbSh3LGwpO3UmJihwPXA/cCsiXHgyNiIrdTp1KTsiR0VUIj09Yi50eXBlLnRvVXBwZXJDYXNlKCk/KGIudXJsKz0oMDw9Yi51cmwuaW5kZXhPZigiPyIpPwoiXHgyNiI6Ij8iKStwLGIuZGF0YT1udWxsKTpiLmRhdGE9cDt2YXIgej1bXTtiLnJlc2V0Rm9ybSYmei5wdXNoKGZ1bmN0aW9uKCl7cy5yZXNldEZvcm0oKX0pO2IuY2xlYXJGb3JtJiZ6LnB1c2goZnVuY3Rpb24oKXtzLmNsZWFyRm9ybShiLmluY2x1ZGVIaWRkZW4pfSk7aWYoIWIuZGF0YVR5cGUmJmIudGFyZ2V0KXt2YXIgQT1iLnN1Y2Nlc3N8fGZ1bmN0aW9uKCl7fTt6LnB1c2goZnVuY3Rpb24oSSl7dmFyIE09Yi5yZXBsYWNlVGFyZ2V0PyJyZXBsYWNlV2l0aCI6Imh0bWwiO0UoYi50YXJnZXQpW01dKEkpLmVhY2goQSxhcmd1bWVudHMpfSl9ZWxzZSBiLnN1Y2Nlc3MmJnoucHVzaChiLnN1Y2Nlc3MpO2Iuc3VjY2Vzcz1mdW5jdGlvbihJLE0sRCl7Zm9yKHZhciBKPWIuY29udGV4dHx8dGhpcyxQPTAsVj16Lmxlbmd0aDtQPFY7UCsrKXpbUF0uYXBwbHkoSixbSSxNLER8fHMsc10pfTtpZihiLmVycm9yKXt2YXIgSD1iLmVycm9yO2IuZXJyb3I9ZnVuY3Rpb24oSSxNLEQpe0guYXBwbHkoYi5jb250ZXh0fHwKdGhpcyxbSSxNLEQsc10pfX1pZihiLmNvbXBsZXRlKXt2YXIgRj1iLmNvbXBsZXRlO2IuY29tcGxldGU9ZnVuY3Rpb24oSSxNKXtGLmFwcGx5KGIuY29udGV4dHx8dGhpcyxbSSxNLHNdKX19dT0wPEUoImlucHV0W3R5cGVceDNkZmlsZV06ZW5hYmxlZCIsdGhpcykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIiIhPT1FKHRoaXMpLnZhbCgpfSkubGVuZ3RoO3A9Im11bHRpcGFydC9mb3JtLWRhdGEiPT1zLmF0dHIoImVuY3R5cGUiKXx8Im11bHRpcGFydC9mb3JtLWRhdGEiPT1zLmF0dHIoImVuY29kaW5nIik7bD1kLmZpbGVhcGkmJmQuZm9ybWRhdGE7ZigiZmlsZUFQSSA6IitsKTt2YXIgQjshMSE9PWIuaWZyYW1lJiYoYi5pZnJhbWV8fCh1fHxwKSYmIWwpP2IuY2xvc2VLZWVwQWxpdmU/RS5nZXQoYi5jbG9zZUtlZXBBbGl2ZSxmdW5jdGlvbigpe0I9ayh3KX0pOkI9ayh3KTpCPSh1fHxwKSYmbD9lKHcpOkUuYWpheChiKTtzLnJlbW92ZURhdGEoImpxeGhyIikuZGF0YSgianF4aHIiLApCKTtmb3IodT0wO3U8aC5sZW5ndGg7dSsrKWhbdV09bnVsbDt0aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LW5vdGlmeSIsW3RoaXMsYl0pO3JldHVybiB0aGlzfTtFLmZuLmFqYXhGb3JtPWZ1bmN0aW9uKGIpe2I9Ynx8e307Yi5kZWxlZ2F0aW9uPWIuZGVsZWdhdGlvbiYmRS5pc0Z1bmN0aW9uKEUuZm4ub24pO2lmKCFiLmRlbGVnYXRpb24mJjA9PT10aGlzLmxlbmd0aCl7dmFyIGc9e3M6dGhpcy5zZWxlY3RvcixjOnRoaXMuY29udGV4dH07aWYoIUUuaXNSZWFkeSYmZy5zKXJldHVybiBmKCJET00gbm90IHJlYWR5LCBxdWV1aW5nIGFqYXhGb3JtIiksRShmdW5jdGlvbigpe0UoZy5zLGcuYykuYWpheEZvcm0oYil9KSx0aGlzO2YoInRlcm1pbmF0aW5nOyB6ZXJvIGVsZW1lbnRzIGZvdW5kIGJ5IHNlbGVjdG9yIisoRS5pc1JlYWR5PyIiOiIgKERPTSBub3QgcmVhZHkpIikpO3JldHVybiB0aGlzfXJldHVybiBiLmRlbGVnYXRpb24/KEUoZG9jdW1lbnQpLm9mZigic3VibWl0LmZvcm0tcGx1Z2luIiwKdGhpcy5zZWxlY3RvcixxKS5vZmYoImNsaWNrLmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLHQpLm9uKCJzdWJtaXQuZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYixxKS5vbigiY2xpY2suZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYix0KSx0aGlzKTp0aGlzLmFqYXhGb3JtVW5iaW5kKCkuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIixiLHEpLmJpbmQoImNsaWNrLmZvcm0tcGx1Z2luIixiLHQpfTtFLmZuLmFqYXhGb3JtVW5iaW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5iaW5kKCJzdWJtaXQuZm9ybS1wbHVnaW4gY2xpY2suZm9ybS1wbHVnaW4iKX07RS5mbi5mb3JtVG9BcnJheT1mdW5jdGlvbihiLGcpe3ZhciBlPVtdO2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gZTt2YXIgaz10aGlzWzBdLG09dGhpcy5hdHRyKCJpZCIpLHA9Yj9rLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6ay5lbGVtZW50cztwJiYhL01TSUUgWzY3OF0vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJgoocD1FKHApLmdldCgpKTttJiYobT1FKCc6aW5wdXRbZm9ybVx4M2QiJyttKyciXScpLmdldCgpLG0ubGVuZ3RoJiYocD0ocHx8W10pLmNvbmNhdChtKSkpO2lmKCFwfHwhcC5sZW5ndGgpcmV0dXJuIGU7dmFyIHMsbCxoLHUsdztzPTA7Zm9yKHc9cC5sZW5ndGg7czx3O3MrKylpZih1PXBbc10sKG09dS5uYW1lKSYmIXUuZGlzYWJsZWQpaWYoYiYmay5jbGsmJiJpbWFnZSI9PXUudHlwZSlrLmNsaz09dSYmKGUucHVzaCh7bmFtZTptLHZhbHVlOkUodSkudmFsKCksdHlwZTp1LnR5cGV9KSxlLnB1c2goe25hbWU6bSsiLngiLHZhbHVlOmsuY2xrX3h9LHtuYW1lOm0rIi55Iix2YWx1ZTprLmNsa195fSkpO2Vsc2UgaWYoKGg9RS5maWVsZFZhbHVlKHUsITApKSYmaC5jb25zdHJ1Y3Rvcj09QXJyYXkpZm9yKGcmJmcucHVzaCh1KSxsPTAsdT1oLmxlbmd0aDtsPHU7bCsrKWUucHVzaCh7bmFtZTptLHZhbHVlOmhbbF19KTtlbHNlIGlmKGQuZmlsZWFwaSYmImZpbGUiPT11LnR5cGUpaWYoZyYmCmcucHVzaCh1KSxoPXUuZmlsZXMsaC5sZW5ndGgpZm9yKGw9MDtsPGgubGVuZ3RoO2wrKyllLnB1c2goe25hbWU6bSx2YWx1ZTpoW2xdLHR5cGU6dS50eXBlfSk7ZWxzZSBlLnB1c2goe25hbWU6bSx2YWx1ZToiIix0eXBlOnUudHlwZX0pO2Vsc2UgbnVsbCE9PWgmJiJ1bmRlZmluZWQiIT10eXBlb2YgaCYmKGcmJmcucHVzaCh1KSxlLnB1c2goe25hbWU6bSx2YWx1ZTpoLHR5cGU6dS50eXBlLHJlcXVpcmVkOnUucmVxdWlyZWR9KSk7IWImJmsuY2xrJiYocD1FKGsuY2xrKSxzPXBbMF0sKG09cy5uYW1lKSYmIXMuZGlzYWJsZWQmJiJpbWFnZSI9PXMudHlwZSYmKGUucHVzaCh7bmFtZTptLHZhbHVlOnAudmFsKCl9KSxlLnB1c2goe25hbWU6bSsiLngiLHZhbHVlOmsuY2xrX3h9LHtuYW1lOm0rIi55Iix2YWx1ZTprLmNsa195fSkpKTtyZXR1cm4gZX07RS5mbi5mb3JtU2VyaWFsaXplPWZ1bmN0aW9uKGIpe3JldHVybiBFLnBhcmFtKHRoaXMuZm9ybVRvQXJyYXkoYikpfTtFLmZuLmZpZWxkU2VyaWFsaXplPQpmdW5jdGlvbihiKXt2YXIgZz1bXTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hbWU7aWYoZSl7dmFyIGs9RS5maWVsZFZhbHVlKHRoaXMsYik7aWYoayYmay5jb25zdHJ1Y3Rvcj09QXJyYXkpZm9yKHZhciBtPTAscD1rLmxlbmd0aDttPHA7bSsrKWcucHVzaCh7bmFtZTplLHZhbHVlOmtbbV19KTtlbHNlIG51bGwhPT1rJiYidW5kZWZpbmVkIiE9dHlwZW9mIGsmJmcucHVzaCh7bmFtZTp0aGlzLm5hbWUsdmFsdWU6a30pfX0pO3JldHVybiBFLnBhcmFtKGcpfTtFLmZuLmZpZWxkVmFsdWU9ZnVuY3Rpb24oYil7Zm9yKHZhciBnPVtdLGU9MCxrPXRoaXMubGVuZ3RoO2U8aztlKyspe3ZhciBtPUUuZmllbGRWYWx1ZSh0aGlzW2VdLGIpO251bGw9PT1tfHwidW5kZWZpbmVkIj09dHlwZW9mIG18fG0uY29uc3RydWN0b3I9PUFycmF5JiYhbS5sZW5ndGh8fChtLmNvbnN0cnVjdG9yPT1BcnJheT9FLm1lcmdlKGcsbSk6Zy5wdXNoKG0pKX1yZXR1cm4gZ307RS5maWVsZFZhbHVlPQpmdW5jdGlvbihiLGcpe3ZhciBlPWIubmFtZSxrPWIudHlwZSxtPWIudGFnTmFtZS50b0xvd2VyQ2FzZSgpO3ZvaWQgMD09PWcmJihnPSEwKTtpZihnJiYoIWV8fGIuZGlzYWJsZWR8fCJyZXNldCI9PWt8fCJidXR0b24iPT1rfHwoImNoZWNrYm94Ij09a3x8InJhZGlvIj09aykmJiFiLmNoZWNrZWR8fCgic3VibWl0Ij09a3x8ImltYWdlIj09aykmJmIuZm9ybSYmYi5mb3JtLmNsayE9Ynx8InNlbGVjdCI9PW0mJi0xPT1iLnNlbGVjdGVkSW5kZXgpKXJldHVybiBudWxsO2lmKCJzZWxlY3QiPT1tKXt2YXIgcD1iLnNlbGVjdGVkSW5kZXg7aWYoMD5wKXJldHVybiBudWxsO2Zvcih2YXIgZT1bXSxtPWIub3B0aW9ucyxzPShrPSJzZWxlY3Qtb25lIj09ayk/cCsxOm0ubGVuZ3RoLHA9az9wOjA7cDxzO3ArKyl7dmFyIGw9bVtwXTtpZihsLnNlbGVjdGVkKXt2YXIgaD1sLnZhbHVlO2h8fChoPWwuYXR0cmlidXRlcyYmbC5hdHRyaWJ1dGVzLnZhbHVlJiYhbC5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZD8KbC50ZXh0OmwudmFsdWUpO2lmKGspcmV0dXJuIGg7ZS5wdXNoKGgpfX1yZXR1cm4gZX1yZXR1cm4gRShiKS52YWwoKX07RS5mbi5jbGVhckZvcm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0UoImlucHV0LHNlbGVjdCx0ZXh0YXJlYSIsdGhpcykuY2xlYXJGaWVsZHMoYil9KX07RS5mbi5jbGVhckZpZWxkcz1FLmZuLmNsZWFySW5wdXRzPWZ1bmN0aW9uKGIpe3ZhciBnPS9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxlbWFpbHxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10aGlzLnR5cGUsaz10aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtnLnRlc3QoZSl8fCJ0ZXh0YXJlYSI9PWs/dGhpcy52YWx1ZT0iIjoiY2hlY2tib3giPT1lfHwicmFkaW8iPT1lP3RoaXMuY2hlY2tlZD0hMToic2VsZWN0Ij09az90aGlzLnNlbGVjdGVkSW5kZXg9Ci0xOiJmaWxlIj09ZT8vTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9FKHRoaXMpLnJlcGxhY2VXaXRoKEUodGhpcykuY2xvbmUoITApKTpFKHRoaXMpLnZhbCgiIik6YiYmKCEwPT09YiYmL2hpZGRlbi8udGVzdChlKXx8InN0cmluZyI9PXR5cGVvZiBiJiZFKHRoaXMpLmlzKGIpKSYmKHRoaXMudmFsdWU9IiIpfSl9O0UuZm4ucmVzZXRGb3JtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeygiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXNldHx8Im9iamVjdCI9PXR5cGVvZiB0aGlzLnJlc2V0JiYhdGhpcy5yZXNldC5ub2RlVHlwZSkmJnRoaXMucmVzZXQoKX0pfTtFLmZuLmVuYWJsZT1mdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj0hMCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9IWJ9KX07RS5mbi5zZWxlY3RlZD1mdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj0hMCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBnPQp0aGlzLnR5cGU7ImNoZWNrYm94Ij09Z3x8InJhZGlvIj09Zz90aGlzLmNoZWNrZWQ9Yjoib3B0aW9uIj09dGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJihnPUUodGhpcykucGFyZW50KCJzZWxlY3QiKSxiJiZnWzBdJiYic2VsZWN0LW9uZSI9PWdbMF0udHlwZSYmZy5maW5kKCJvcHRpb24iKS5zZWxlY3RlZCghMSksdGhpcy5zZWxlY3RlZD1iKX0pfTtFLmZuLmFqYXhTdWJtaXQuZGVidWc9ITF9KX0pKEFVSS4kKTsKKGZ1bmN0aW9uKGEpe3ZhciBFPS9ce1xzKihbXnx9XSs/KVxzKig/Olx8KFtefV0qKSk/XHMqXH0vZzthLm1peGluKHtiaW5kS2V5UmlnaHQ6ZnVuY3Rpb24ocSx0KXt2YXIgZj1hLnRvQXJyYXkoYXJndW1lbnRzKS5zbGljZSgyKTtmLnVuc2hpZnQoYS5iaW5kS2V5KHEsdCkpO3JldHVybiBhLnBhcnRpYWxSaWdodC5hcHBseShhLGYpfSxiaW5kUmlnaHQ6ZnVuY3Rpb24ocSx0KXt2YXIgZj1hLnRvQXJyYXkoYXJndW1lbnRzKS5zbGljZSgyKTtmLnVuc2hpZnQoYS5iaW5kKHEsdCkpO3JldHVybiBhLnBhcnRpYWxSaWdodC5hcHBseShhLGYpfSxjYWNoZWQ6ZnVuY3Rpb24ocSl7cmV0dXJuIGEubWVtb2l6ZShxLGZ1bmN0aW9uKCl7cmV0dXJuIDE8YXJndW1lbnRzLmxlbmd0aD9BcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywiXyIpOlN0cmluZyhhcmd1bWVudHNbMF0pfSl9LHN1YjpmdW5jdGlvbihxLHQpe2lmKDI8YXJndW1lbnRzLmxlbmd0aHx8IWEuaXNPYmplY3QodCkpdD0KYS50b0FycmF5KGFyZ3VtZW50cykuc2xpY2UoMSk7cmV0dXJuIHEucmVwbGFjZT9xLnJlcGxhY2UoRSxmdW5jdGlvbihmLGQpe3JldHVybiBhLmlzVW5kZWZpbmVkKHRbZF0pP2Y6dFtkXX0pOnF9fSk7YS5taXhpbih7bmFtZXNwYWNlOmZ1bmN0aW9uKHEsdCl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PXEscT10aGlzKTthLmlzU3RyaW5nKHQpJiYodD10LnNwbGl0KCIuIikpO2Zvcih2YXIgZj0wO2Y8dC5sZW5ndGg7ZisrKXt2YXIgZD10W2ZdO3FbZF09cVtkXXx8e307cT1xW2RdfXJldHVybiBxfX0se2NoYWluOiExfSl9KShBVUkuXyk7CihmdW5jdGlvbihhLEUpeyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1FKCk6YS5zdmc0ZXZlcnlib2R5PUUoKX0pKHRoaXMsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHEsdCxmKXtpZihmKXt2YXIgZD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYz0hdC5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKSYmZi5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKTtjJiZ0LnNldEF0dHJpYnV0ZSgidmlld0JveCIsYyk7Zm9yKHQ9Zi5jbG9uZU5vZGUoITApO3QuY2hpbGROb2Rlcy5sZW5ndGg7KWQuYXBwZW5kQ2hpbGQodC5maXJzdENoaWxkKTtxLmFwcGVuZENoaWxkKGQpfX1mdW5jdGlvbiBFKHEpe3Eub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoND09PXEucmVhZHlTdGF0ZSl7dmFyIHQ9cS5fY2FjaGVkRG9jdW1lbnQ7dHx8KHQ9cS5fY2FjaGVkRG9jdW1lbnQ9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSwKdC5ib2R5LmlubmVySFRNTD1xLnJlc3BvbnNlVGV4dCxxLl9jYWNoZWRUYXJnZXQ9e30pO3EuX2VtYmVkcy5zcGxpY2UoMCkubWFwKGZ1bmN0aW9uKGYpe3ZhciBkPXEuX2NhY2hlZFRhcmdldFtmLmlkXTtkfHwoZD1xLl9jYWNoZWRUYXJnZXRbZi5pZF09dC5nZXRFbGVtZW50QnlJZChmLmlkKSk7YShmLnBhcmVudCxmLnN2ZyxkKX0pfX07cS5vbnJlYWR5c3RhdGVjaGFuZ2UoKX1yZXR1cm4gZnVuY3Rpb24ocSl7ZnVuY3Rpb24gdCgpe2Zvcih2YXIgbD0wO2w8cC5sZW5ndGg7KXt2YXIgaD1wW2xdLHU9aC5wYXJlbnROb2RlLHc7Zm9yKHc9dTsic3ZnIiE9PXcubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKHc9dy5wYXJlbnROb2RlKTspO3ZhciB6PWguZ2V0QXR0cmlidXRlKCJ4bGluazpocmVmIil8fGguZ2V0QXR0cmlidXRlKCJocmVmIik7aWYoIXomJmQuYXR0cmlidXRlTmFtZSYmKHo9aC5nZXRBdHRyaWJ1dGUoZC5hdHRyaWJ1dGVOYW1lKSksdyYmeil7aWYoZilpZighZC52YWxpZGF0ZXx8CmQudmFsaWRhdGUoeix3LGgpKWlmKHUucmVtb3ZlQ2hpbGQoaCksej16LnNwbGl0KCIjIiksaD16LnNoaWZ0KCksej16LmpvaW4oIiMiKSxoLmxlbmd0aCl7dmFyIEE9a1toXTtBfHwoQT1rW2hdPW5ldyBYTUxIdHRwUmVxdWVzdCxBLm9wZW4oIkdFVCIsaCksQS5zZW5kKCksQS5fZW1iZWRzPVtdKTtBLl9lbWJlZHMucHVzaCh7cGFyZW50OnUsc3ZnOncsaWQ6en0pO0UoQSl9ZWxzZSBhKHUsdyxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh6KSk7ZWxzZSsrbCwrK3N9ZWxzZSsrbH0oIXAubGVuZ3RofHwwPHAubGVuZ3RoLXMpJiZtKHQsNjcpfXZhciBmLGQ9T2JqZWN0KHEpO3E9L1xiVHJpZGVudFwvWzU2N11cYnxcYk1TSUUgKD86OXwxMClcLjBcYi87dmFyIGM9L1xiQXBwbGVXZWJLaXRcLyhcZCspXGIvLGI9L1xiRWRnZVwvMTJcLihcZCspXGIvLGc9L1xiRWRnZVwvLihcZCspXGIvLGU9d2luZG93LnRvcCE9PXdpbmRvdy5zZWxmO2Y9InBvbHlmaWxsImluIGQ/ZC5wb2x5ZmlsbDpxLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fAoxMDU0Nz4obmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChiKXx8W10pWzFdfHw1Mzc+KG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goYyl8fFtdKVsxXXx8Zy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZlO3ZhciBrPXt9LG09d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8c2V0VGltZW91dCxwPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ1c2UiKSxzPTA7ZiYmdCgpfX0pOwpZVUkuYWRkKCJhcnJheWxpc3QtYWRkIixmdW5jdGlvbihhLEUpe2EubWl4KGEuQXJyYXlMaXN0LnByb3RvdHlwZSx7YWRkOmZ1bmN0aW9uKHEsdCl7dmFyIGY9dGhpcy5faXRlbXM7YS5MYW5nLmlzTnVtYmVyKHQpP2Yuc3BsaWNlKHQsMCxxKTpmLnB1c2gocSk7cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbihxLHQsZil7Zj1mfHx0aGlzLml0ZW1zQXJlRXF1YWw7Zm9yKHZhciBkPXRoaXMuX2l0ZW1zLmxlbmd0aC0xOzA8PWQmJighZi5jYWxsKHRoaXMscSx0aGlzLml0ZW0oZCkpfHwodGhpcy5faXRlbXMuc3BsaWNlKGQsMSksdCkpOy0tZCk7cmV0dXJuIHRoaXN9LGl0ZW1zQXJlRXF1YWw6ZnVuY3Rpb24ocSx0KXtyZXR1cm4gcT09PXR9fSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImFycmF5bGlzdCJdfSk7CllVSS5hZGQoImFycmF5bGlzdC1maWx0ZXIiLGZ1bmN0aW9uKGEsRSl7YS5taXgoYS5BcnJheUxpc3QucHJvdG90eXBlLHtmaWx0ZXI6ZnVuY3Rpb24ocSl7dmFyIHQ9W107YS5BcnJheS5lYWNoKHRoaXMuX2l0ZW1zLGZ1bmN0aW9uKGYsZCl7Zj10aGlzLml0ZW0oZCk7cShmKSYmdC5wdXNoKGYpfSx0aGlzKTtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodCl9fSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImFycmF5bGlzdCJdfSk7CllVSS5hZGQoImFycmF5bGlzdCIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKGMpe3RoaXMuX2l0ZW1zPXZvaWQgMCE9PWM/YS5MYW5nLmlzQXJyYXkoYyk/Yzp0KGMpOnRoaXMuX2l0ZW1zfHxbXX12YXIgdD1hLkFycmF5LGY9dC5lYWNoLGQ7ZD17aXRlbTpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5faXRlbXNbY119LGVhY2g6ZnVuY3Rpb24oYyxiKXtmKHRoaXMuX2l0ZW1zLGZ1bmN0aW9uKGcsZSl7Zz10aGlzLml0ZW0oZSk7Yy5jYWxsKGJ8fGcsZyxlLHRoaXMpfSx0aGlzKTtyZXR1cm4gdGhpc30sc29tZTpmdW5jdGlvbihjLGIpe3JldHVybiB0LnNvbWUodGhpcy5faXRlbXMsZnVuY3Rpb24oZyxlKXtnPXRoaXMuaXRlbShlKTtyZXR1cm4gYy5jYWxsKGJ8fGcsZyxlLHRoaXMpfSx0aGlzKX0saW5kZXhPZjpmdW5jdGlvbihjKXtyZXR1cm4gdC5pbmRleE9mKHRoaXMuX2l0ZW1zLGMpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2l0ZW1zLmxlbmd0aH0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLnNpemUoKX0sCnRvSlNPTjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pdGVtc319O2QuX2l0ZW09ZC5pdGVtO2EubWl4KHEucHJvdG90eXBlLGQpO2EubWl4KHEse2FkZE1ldGhvZDpmdW5jdGlvbihjLGIpe2I9dChiKTtmKGIsZnVuY3Rpb24oZyl7Y1tnXT1mdW5jdGlvbigpe3ZhciBlPXQoYXJndW1lbnRzLDAsITApLGs9W107Zih0aGlzLl9pdGVtcyxmdW5jdGlvbihtLHApe209dGhpcy5faXRlbShwKTt2YXIgcz1tW2ddLmFwcGx5KG0sZSk7dm9pZCAwIT09cyYmcyE9PW0mJihrW3BdPXMpfSx0aGlzKTtyZXR1cm4gay5sZW5ndGg/azp0aGlzfX0pfX0pO2EuQXJyYXlMaXN0PXF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInl1aS1iYXNlIl19KTsKWVVJLmFkZCgiYXJyYXktZXh0cmFzIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuQXJyYXksdD1hLkxhbmcsZj1BcnJheS5wcm90b3R5cGU7cS5sYXN0SW5kZXhPZj10Ll9pc05hdGl2ZShmLmxhc3RJbmRleE9mKT9mdW5jdGlvbihkLGMsYil7cmV0dXJuIGJ8fDA9PT1iP2QubGFzdEluZGV4T2YoYyxiKTpkLmxhc3RJbmRleE9mKGMpfTpmdW5jdGlvbihkLGMsYil7dmFyIGc9ZC5sZW5ndGgsZT1nLTE7aWYoYnx8MD09PWIpZT1NYXRoLm1pbigwPmI/ZytiOmIsZyk7aWYoLTE8ZSYmMDxnKWZvcig7LTE8ZTstLWUpaWYoZSBpbiBkJiZkW2VdPT09YylyZXR1cm4gZTtyZXR1cm4tMX07cS51bmlxdWU9ZnVuY3Rpb24oZCxjKXt2YXIgYj0wLGc9ZC5sZW5ndGgsZT1bXSxrLG0scCxzO2E6Zm9yKDtiPGc7YisrKXtzPWRbYl07az0wO2ZvcihwPWUubGVuZ3RoO2s8cDtrKyspaWYobT1lW2tdLGMpe2lmKGMuY2FsbChkLHMsbSxiLGQpKWNvbnRpbnVlIGF9ZWxzZSBpZihzPT09bSljb250aW51ZSBhOwplLnB1c2gocyl9cmV0dXJuIGV9O3EuZmlsdGVyPXQuX2lzTmF0aXZlKGYuZmlsdGVyKT9mdW5jdGlvbihkLGMsYil7cmV0dXJuIGYuZmlsdGVyLmNhbGwoZCxjLGIpfTpmdW5jdGlvbihkLGMsYil7Zm9yKHZhciBnPTAsZT1kLmxlbmd0aCxrPVtdLG07ZzxlOysrZylnIGluIGQmJihtPWRbZ10sYy5jYWxsKGIsbSxnLGQpJiZrLnB1c2gobSkpO3JldHVybiBrfTtxLnJlamVjdD1mdW5jdGlvbihkLGMsYil7cmV0dXJuIHEuZmlsdGVyKGQsZnVuY3Rpb24oZyxlLGspe3JldHVybiFjLmNhbGwoYixnLGUsayl9KX07cS5ldmVyeT10Ll9pc05hdGl2ZShmLmV2ZXJ5KT9mdW5jdGlvbihkLGMsYil7cmV0dXJuIGYuZXZlcnkuY2FsbChkLGMsYil9OmZ1bmN0aW9uKGQsYyxiKXtmb3IodmFyIGc9MCxlPWQubGVuZ3RoO2c8ZTsrK2cpaWYoZyBpbiBkJiYhYy5jYWxsKGIsZFtnXSxnLGQpKXJldHVybiExO3JldHVybiEwfTtxLm1hcD10Ll9pc05hdGl2ZShmLm1hcCk/ZnVuY3Rpb24oZCxjLGIpe3JldHVybiBmLm1hcC5jYWxsKGQsCmMsYil9OmZ1bmN0aW9uKGQsYyxiKXtmb3IodmFyIGc9MCxlPWQubGVuZ3RoLGs9Zi5jb25jYXQuY2FsbChkKTtnPGU7KytnKWcgaW4gZCYmKGtbZ109Yy5jYWxsKGIsZFtnXSxnLGQpKTtyZXR1cm4ga307cS5yZWR1Y2U9dC5faXNOYXRpdmUoZi5yZWR1Y2UpP2Z1bmN0aW9uKGQsYyxiLGcpe3JldHVybiBmLnJlZHVjZS5jYWxsKGQsZnVuY3Rpb24oZSxrLG0scCl7cmV0dXJuIGIuY2FsbChnLGUsayxtLHApfSxjKX06ZnVuY3Rpb24oZCxjLGIsZyl7Zm9yKHZhciBlPTAsaz1kLmxlbmd0aDtlPGs7KytlKWUgaW4gZCYmKGM9Yi5jYWxsKGcsYyxkW2VdLGUsZCkpO3JldHVybiBjfTtxLmZpbmQ9ZnVuY3Rpb24oZCxjLGIpe2Zvcih2YXIgZz0wLGU9ZC5sZW5ndGg7ZzxlO2crKylpZihnIGluIGQmJmMuY2FsbChiLGRbZ10sZyxkKSlyZXR1cm4gZFtnXTtyZXR1cm4gbnVsbH07cS5ncmVwPWZ1bmN0aW9uKGQsYyl7cmV0dXJuIHEuZmlsdGVyKGQsZnVuY3Rpb24oYixnKXtyZXR1cm4gYy50ZXN0KGIpfSl9OwpxLnBhcnRpdGlvbj1mdW5jdGlvbihkLGMsYil7dmFyIGc9e21hdGNoZXM6W10scmVqZWN0czpbXX07cS5lYWNoKGQsZnVuY3Rpb24oZSxrKXsoYy5jYWxsKGIsZSxrLGQpP2cubWF0Y2hlczpnLnJlamVjdHMpLnB1c2goZSl9KTtyZXR1cm4gZ307cS56aXA9ZnVuY3Rpb24oZCxjKXt2YXIgYj1bXTtxLmVhY2goZCxmdW5jdGlvbihnLGUpe2IucHVzaChbZyxjW2VdXSl9KTtyZXR1cm4gYn07cS5mbGF0dGVuPWZ1bmN0aW9uKGQpe3ZhciBjPVtdLGIsZyxlO2lmKCFkKXJldHVybiBjO2I9MDtmb3IoZz1kLmxlbmd0aDtiPGc7KytiKWU9ZFtiXSx0LmlzQXJyYXkoZSk/Yy5wdXNoLmFwcGx5KGMscS5mbGF0dGVuKGUpKTpjLnB1c2goZSk7cmV0dXJuIGN9fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoImFycmF5LWludm9rZSIsZnVuY3Rpb24oYSxFKXthLkFycmF5Lmludm9rZT1mdW5jdGlvbihxLHQpe3ZhciBmPWEuQXJyYXkoYXJndW1lbnRzLDIsITApLGQ9YS5MYW5nLmlzRnVuY3Rpb24sYz1bXTthLkFycmF5LmVhY2goYS5BcnJheShxKSxmdW5jdGlvbihiLGcpe2ImJmQoYlt0XSkmJihjW2ddPWJbdF0uYXBwbHkoYixmKSl9KTtyZXR1cm4gY319LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInl1aS1iYXNlIl19KTsKWVVJLmFkZCgiYXR0cmlidXRlLWJhc2UiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcSgpe2EuQXR0cmlidXRlQ29yZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YS5BdHRyaWJ1dGVPYnNlcnZhYmxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthLkF0dHJpYnV0ZUV4dHJhcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9YS5taXgocSxhLkF0dHJpYnV0ZUNvcmUsITEsbnVsbCwxKTthLm1peChxLGEuQXR0cmlidXRlRXh0cmFzLCExLG51bGwsMSk7YS5taXgocSxhLkF0dHJpYnV0ZU9ic2VydmFibGUsITAsbnVsbCwxKTtxLklOVkFMSURfVkFMVUU9YS5BdHRyaWJ1dGVDb3JlLklOVkFMSURfVkFMVUU7cS5fQVRUUl9DRkc9YS5BdHRyaWJ1dGVDb3JlLl9BVFRSX0NGRy5jb25jYXQoYS5BdHRyaWJ1dGVPYnNlcnZhYmxlLl9BVFRSX0NGRyk7cS5wcm90ZWN0QXR0cnM9YS5BdHRyaWJ1dGVDb3JlLnByb3RlY3RBdHRyczthLkF0dHJpYnV0ZT1xfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJhdHRyaWJ1dGUtY29yZSIsCiJhdHRyaWJ1dGUtb2JzZXJ2YWJsZSIsImF0dHJpYnV0ZS1leHRyYXMiXX0pO1lVSS5hZGQoImF0dHJpYnV0ZS1jb21wbGV4IixmdW5jdGlvbihhLEUpe3ZhciBxPWEuQXR0cmlidXRlO3EuQ29tcGxleD1mdW5jdGlvbigpe307cS5Db21wbGV4LnByb3RvdHlwZT17X25vcm1BdHRyVmFsczpxLnByb3RvdHlwZS5fbm9ybUF0dHJWYWxzLF9nZXRBdHRySW5pdFZhbDpxLnByb3RvdHlwZS5fZ2V0QXR0ckluaXRWYWx9O2EuQXR0cmlidXRlQ29tcGxleD1xLkNvbXBsZXh9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImF0dHJpYnV0ZS1iYXNlIl19KTsKWVVJLmFkZCgiYXR0cmlidXRlLWNvcmUiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcShjLGIsZyl7dGhpcy5feXVpZXZ0PW51bGw7dGhpcy5faW5pdEF0dHJIb3N0KGMsYixnKX1hLlN0YXRlPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPXt9fTthLlN0YXRlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGMsYixnKXt2YXIgZT10aGlzLmRhdGFbY107ZXx8KGU9dGhpcy5kYXRhW2NdPXt9KTtlW2JdPWd9LGFkZEFsbDpmdW5jdGlvbihjLGIpe3ZhciBnPXRoaXMuZGF0YVtjXSxlO2d8fChnPXRoaXMuZGF0YVtjXT17fSk7Zm9yKGUgaW4gYiliLmhhc093blByb3BlcnR5KGUpJiYoZ1tlXT1iW2VdKX0scmVtb3ZlOmZ1bmN0aW9uKGMsYil7dmFyIGc9dGhpcy5kYXRhW2NdO2cmJmRlbGV0ZSBnW2JdfSxyZW1vdmVBbGw6ZnVuY3Rpb24oYyxiKXt2YXIgZztiP2EuZWFjaChiLGZ1bmN0aW9uKGUsayl7dGhpcy5yZW1vdmUoYywic3RyaW5nIj09PXR5cGVvZiBrP2s6ZSl9LHRoaXMpOihnPXRoaXMuZGF0YSwKYyBpbiBnJiZkZWxldGUgZ1tjXSl9LGdldDpmdW5jdGlvbihjLGIpe3ZhciBnPXRoaXMuZGF0YVtjXTtpZihnKXJldHVybiBnW2JdfSxnZXRBbGw6ZnVuY3Rpb24oYyxiKXt2YXIgZz10aGlzLmRhdGFbY10sZSxrO2lmKGIpaz1nO2Vsc2UgaWYoZylmb3IoZSBpbiBrPXt9LGcpZy5oYXNPd25Qcm9wZXJ0eShlKSYmKGtbZV09Z1tlXSk7cmV0dXJuIGt9fTt2YXIgdD1hLk9iamVjdCxmPWEuTGFuZyxkO3EuSU5WQUxJRF9WQUxVRT17fTtkPXEuSU5WQUxJRF9WQUxVRTtxLl9BVFRSX0NGRz0ic2V0dGVyIGdldHRlciB2YWxpZGF0b3IgdmFsdWUgdmFsdWVGbiB3cml0ZU9uY2UgcmVhZE9ubHkgbGF6eUFkZCBfYnlwYXNzUHJveHkiLnNwbGl0KCIgIik7cS5wcm90ZWN0QXR0cnM9ZnVuY3Rpb24oYyl7aWYoYyl7Yz1hLm1lcmdlKGMpO2Zvcih2YXIgYiBpbiBjKWMuaGFzT3duUHJvcGVydHkoYikmJihjW2JdPWEubWVyZ2UoY1tiXSkpfXJldHVybiBjfTtxLnByb3RvdHlwZT17X2luaXRBdHRySG9zdDpmdW5jdGlvbihjLApiLGcpe3RoaXMuX3N0YXRlPW5ldyBhLlN0YXRlO3RoaXMuX2luaXRBdHRycyhjLGIsZyl9LGFkZEF0dHI6ZnVuY3Rpb24oYyxiLGcpe3ZhciBlPXRoaXMuX3N0YXRlLGs9ZS5kYXRhLG0scDtiPWJ8fHt9OyJsYXp5QWRkImluIGImJihnPWIubGF6eUFkZCk7cD1lLmdldChjLCJhZGRlZCIpO2lmKGcmJiFwKWUuZGF0YVtjXT17bGF6eTpiLGFkZGVkOiEwfTtlbHNlIGlmKCFwfHxiLmlzTGF6eUFkZCl7aWYoZz0idmFsdWUiaW4gYiltPWIudmFsdWUsYi52YWx1ZT12b2lkIDA7Yi5hZGRlZD0hMDtiLmluaXRpYWxpemluZz0hMDtrW2NdPWI7ZyYmdGhpcy5zZXQoYyxtKTtiLmluaXRpYWxpemluZz0hMX1yZXR1cm4gdGhpc30sYXR0ckFkZGVkOmZ1bmN0aW9uKGMpe3JldHVybiEhdGhpcy5fc3RhdGUuZ2V0KGMsImFkZGVkIil9LGdldDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fZ2V0QXR0cihjKX0sX2lzTGF6eUF0dHI6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3N0YXRlLmdldChjLCJsYXp5Iil9LApfYWRkTGF6eUF0dHI6ZnVuY3Rpb24oYyxiKXt2YXIgZz10aGlzLl9zdGF0ZTtpZihiPWJ8fGcuZ2V0KGMsImxhenkiKSlnLmRhdGFbY10ubGF6eT12b2lkIDAsYi5pc0xhenlBZGQ9ITAsdGhpcy5hZGRBdHRyKGMsYil9LHNldDpmdW5jdGlvbihjLGIsZyl7cmV0dXJuIHRoaXMuX3NldEF0dHIoYyxiLGcpfSxfc2V0OmZ1bmN0aW9uKGMsYixnKXtyZXR1cm4gdGhpcy5fc2V0QXR0cihjLGIsZywhMCl9LF9zZXRBdHRyOmZ1bmN0aW9uKGMsYixnLGUpe3ZhciBrPSEwLG09dGhpcy5fc3RhdGUscD10aGlzLl9zdGF0ZVByb3h5LHM9dGhpcy5fdENmZ3MsbCxoLHUsdzstMSE9PWMuaW5kZXhPZigiLiIpJiYobD1jLGg9Yy5zcGxpdCgiLiIpLGM9aC5zaGlmdCgpKTtzJiZzW2NdJiZ0aGlzLl9hZGRPdXRPZk9yZGVyKGMsc1tjXSk7bT1tLmRhdGFbY118fHt9O20ubGF6eSYmKG09bS5sYXp5LHRoaXMuX2FkZExhenlBdHRyKGMsbSkpO3M9dm9pZCAwPT09bS52YWx1ZTtwJiZjIGluIHAmJiFtLl9ieXBhc3NQcm94eSYmCihzPSExKTtwPW0ud3JpdGVPbmNlO3c9bS5pbml0aWFsaXppbmc7c3x8ZXx8KHAmJihrPSExKSxtLnJlYWRPbmx5JiYoaz0hMSkpO3d8fGV8fCJpbml0T25seSIhPT1wfHwoaz0hMSk7ayYmKHN8fCh1PXRoaXMuZ2V0KGMpKSxoJiYoYj10LnNldFZhbHVlKGEuY2xvbmUodSksaCxiKSx2b2lkIDA9PT1iJiYoaz0hMSkpLGsmJighdGhpcy5fZmlyZUF0dHJDaGFuZ2V8fHc/dGhpcy5fc2V0QXR0clZhbChjLGwsdSxiLGcsbSk6dGhpcy5fZmlyZUF0dHJDaGFuZ2UoYyxsLHUsYixnLG0pKSk7cmV0dXJuIHRoaXN9LF9hZGRPdXRPZk9yZGVyOmZ1bmN0aW9uKGMsYil7dmFyIGc9e307Z1tjXT1iO2RlbGV0ZSB0aGlzLl90Q2Znc1tjXTt0aGlzLl9hZGRBdHRycyhnLHRoaXMuX3RWYWxzKX0sX2dldEF0dHI6ZnVuY3Rpb24oYyl7dmFyIGI9YyxnPXRoaXMuX3RDZmdzLGU7LTEhPT1jLmluZGV4T2YoIi4iKSYmKGU9Yy5zcGxpdCgiLiIpLGM9ZS5zaGlmdCgpKTtnJiZnW2NdJiZ0aGlzLl9hZGRPdXRPZk9yZGVyKGMsCmdbY10pO2c9dGhpcy5fc3RhdGUuZGF0YVtjXXx8e307Zy5sYXp5JiYoZz1nLmxhenksdGhpcy5fYWRkTGF6eUF0dHIoYyxnKSk7Yz10aGlzLl9nZXRTdGF0ZVZhbChjLGcpOyhnPWcuZ2V0dGVyKSYmIWcuY2FsbCYmKGc9dGhpc1tnXSk7Yz1nP2cuY2FsbCh0aGlzLGMsYik6YztyZXR1cm4gYz1lP3QuZ2V0VmFsdWUoYyxlKTpjfSxfZ2V0U3RhdGVWYWw6ZnVuY3Rpb24oYyxiKXt2YXIgZz10aGlzLl9zdGF0ZVByb3h5O2J8fChiPXRoaXMuX3N0YXRlLmdldEFsbChjKXx8e30pO3JldHVybiBnJiZjIGluIGcmJiFiLl9ieXBhc3NQcm94eT9nW2NdOmIudmFsdWV9LF9zZXRTdGF0ZVZhbDpmdW5jdGlvbihjLGIpe3ZhciBnPXRoaXMuX3N0YXRlUHJveHk7ZyYmYyBpbiBnJiYhdGhpcy5fc3RhdGUuZ2V0KGMsIl9ieXBhc3NQcm94eSIpP2dbY109Yjp0aGlzLl9zdGF0ZS5hZGQoYywidmFsdWUiLGIpfSxfc2V0QXR0clZhbDpmdW5jdGlvbihjLGIsZyxlLGssbSl7Zz0hMDttPW18fHRoaXMuX3N0YXRlLmRhdGFbY118fAp7fTt2YXIgcD1tLnZhbGlkYXRvcixzPW0uc2V0dGVyLGw9bS5pbml0aWFsaXppbmcsaD10aGlzLl9nZXRTdGF0ZVZhbChjLG0pLHU9Ynx8Yyx3O3AmJihwLmNhbGx8fChwPXRoaXNbcF0pLHAmJih3PXAuY2FsbCh0aGlzLGUsdSxrKSwhdyYmbCYmKGU9bS5kZWZhdWx0VmFsdWUsdz0hMCkpKTshcHx8dz8ocyYmKHMuY2FsbHx8KHM9dGhpc1tzXSkscyYmKGs9cy5jYWxsKHRoaXMsZSx1LGspLGs9PT1kP2w/ZT1tLmRlZmF1bHRWYWx1ZTpnPSExOnZvaWQgMCE9PWsmJihlPWspKSksZyYmKGJ8fGUhPT1ofHxmLmlzT2JqZWN0KGUpPygiaW5pdFZhbHVlImluIG18fChtLmluaXRWYWx1ZT1lKSx0aGlzLl9zZXRTdGF0ZVZhbChjLGUpKTpnPSExKSk6Zz0hMTtyZXR1cm4gZ30sc2V0QXR0cnM6ZnVuY3Rpb24oYyxiKXtyZXR1cm4gdGhpcy5fc2V0QXR0cnMoYyxiKX0sX3NldEF0dHJzOmZ1bmN0aW9uKGMsYil7Zm9yKHZhciBnIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShnKSYmdGhpcy5zZXQoZywKY1tnXSxiKTtyZXR1cm4gdGhpc30sZ2V0QXR0cnM6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2dldEF0dHJzKGMpfSxfZ2V0QXR0cnM6ZnVuY3Rpb24oYyl7dmFyIGI9e30sZyxlLGssbT0hMD09PWM7aWYoIWN8fG0pYz10LmtleXModGhpcy5fc3RhdGUuZGF0YSk7ZT0wO2ZvcihrPWMubGVuZ3RoO2U8aztlKyspZz1jW2VdLG0mJnRoaXMuX2dldFN0YXRlVmFsKGcpPT10aGlzLl9zdGF0ZS5nZXQoZywiaW5pdFZhbHVlIil8fChiW2ddPXRoaXMuZ2V0KGcpKTtyZXR1cm4gYn0sYWRkQXR0cnM6ZnVuY3Rpb24oYyxiLGcpe2MmJih0aGlzLl90Q2Zncz1jLHRoaXMuX3RWYWxzPWI/dGhpcy5fbm9ybUF0dHJWYWxzKGIpOm51bGwsdGhpcy5fYWRkQXR0cnMoYyx0aGlzLl90VmFscyxnKSx0aGlzLl90Q2Zncz10aGlzLl90VmFscz1udWxsKTtyZXR1cm4gdGhpc30sX2FkZEF0dHJzOmZ1bmN0aW9uKGMsYixnKXtiPXRoaXMuX3RDZmdzO3ZhciBlPXRoaXMuX3RWYWxzLGssbSxwO2ZvcihrIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShrKSYmCihtPWNba10sbS5kZWZhdWx0VmFsdWU9bS52YWx1ZSxwPXRoaXMuX2dldEF0dHJJbml0VmFsKGssbSxlKSx2b2lkIDAhPT1wJiYobS52YWx1ZT1wKSxiW2tdJiYoYltrXT12b2lkIDApLHRoaXMuYWRkQXR0cihrLG0sZykpfSxfcHJvdGVjdEF0dHJzOnEucHJvdGVjdEF0dHJzLF9ub3JtQXR0clZhbHM6ZnVuY3Rpb24oYyl7dmFyIGIsZyxlLGssbTtpZighYylyZXR1cm4gbnVsbDtiPXt9O2ZvcihtIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShtKSYmKC0xIT09bS5pbmRleE9mKCIuIik/KGU9bS5zcGxpdCgiLiIpLGs9ZS5zaGlmdCgpLGc9Z3x8e30saz1nW2tdPWdba118fFtdLGtbay5sZW5ndGhdPXtwYXRoOmUsdmFsdWU6Y1ttXX0pOmJbbV09Y1ttXSk7cmV0dXJue3NpbXBsZTpiLGNvbXBsZXg6Z319LF9nZXRBdHRySW5pdFZhbDpmdW5jdGlvbihjLGIsZyl7dmFyIGU9Yi52YWx1ZSxrPWIudmFsdWVGbixtPSExO2I9Yi5yZWFkT25seTt2YXIgcDshYiYmZyYmKHA9Zy5zaW1wbGUpJiZwLmhhc093blByb3BlcnR5KGMpJiYKKGU9cFtjXSxtPSEwKTtrJiYhbSYmKGsuY2FsbHx8KGs9dGhpc1trXSksayYmKGU9ay5jYWxsKHRoaXMsYykpKTtpZighYiYmZyYmKGc9Zy5jb21wbGV4KSYmZy5oYXNPd25Qcm9wZXJ0eShjKSYmdm9pZCAwIT09ZSYmbnVsbCE9PWUpZm9yKGI9Z1tjXSxjPTAsZz1iLmxlbmd0aDtjPGc7KytjKWs9YltjXS5wYXRoLG09YltjXS52YWx1ZSx0LnNldFZhbHVlKGUsayxtKTtyZXR1cm4gZX0sX2luaXRBdHRyczpmdW5jdGlvbihjLGIsZyl7Yz1jfHx0aGlzLmNvbnN0cnVjdG9yLkFUVFJTO3ZhciBlPWEuQmFzZSxrPWEuQmFzZUNvcmUsZT1lJiZhLmluc3RhbmNlT2YodGhpcyxlKSxrPSFlJiZrJiZhLmluc3RhbmNlT2YodGhpcyxrKTshY3x8ZXx8a3x8dGhpcy5hZGRBdHRycyhhLkF0dHJpYnV0ZUNvcmUucHJvdGVjdEF0dHJzKGMpLGIsZyl9fTthLkF0dHJpYnV0ZUNvcmU9cX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsib29wIl19KTsKWVVJLmFkZCgiYXR0cmlidXRlLW9ic2VydmFibGUiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcSgpe3RoaXMuX0FUVFJfRV9GQUNBREU9e307dC5jYWxsKHRoaXMse2VtaXRGYWNhZGU6ITB9KX12YXIgdD1hLkV2ZW50VGFyZ2V0O3EuX0FUVFJfQ0ZHPVsiYnJvYWRjYXN0Il07cS5wcm90b3R5cGU9e3NldDpmdW5jdGlvbihmLGQsYyl7cmV0dXJuIHRoaXMuX3NldEF0dHIoZixkLGMpfSxfc2V0OmZ1bmN0aW9uKGYsZCxjKXtyZXR1cm4gdGhpcy5fc2V0QXR0cihmLGQsYywhMCl9LHNldEF0dHJzOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIHRoaXMuX3NldEF0dHJzKGYsZCl9LF9zZXRBdHRyczpmdW5jdGlvbihmLGQpe2Zvcih2YXIgYyBpbiBmKWYuaGFzT3duUHJvcGVydHkoYykmJnRoaXMuc2V0KGMsZltjXSxkKTtyZXR1cm4gdGhpc30sX2ZpcmVBdHRyQ2hhbmdlOmZ1bmN0aW9uKGYsZCxjLGIsZyxlKXt2YXIgaz10aGlzLl9nZXRGdWxsVHlwZShmKyJDaGFuZ2UiKSxtPXRoaXMuX3N0YXRlLApwO2V8fChlPW0uZGF0YVtmXXx8e30pO2UucHVibGlzaGVkfHwocD10aGlzLl9wdWJsaXNoKGspLHAuZW1pdEZhY2FkZT0hMCxwLmRlZmF1bHRUYXJnZXRPbmx5PSEwLHAuZGVmYXVsdEZuPXRoaXMuX2RlZkF0dHJDaGFuZ2VGbixtPWUuYnJvYWRjYXN0LHZvaWQgMCE9PW0mJihwLmJyb2FkY2FzdD1tKSxlLnB1Ymxpc2hlZD0hMCk7Zz8obT1hLm1lcmdlKGcpLG0uX2F0dHJPcHRzPWcpOm09dGhpcy5fQVRUUl9FX0ZBQ0FERTttLmF0dHJOYW1lPWY7bS5zdWJBdHRyTmFtZT1kO20ucHJldlZhbD1jO20ubmV3VmFsPWI7dGhpcy5faGFzUG90ZW50aWFsU3Vic2NyaWJlcnMoayk/dGhpcy5maXJlKGssbSk6dGhpcy5fc2V0QXR0clZhbChmLGQsYyxiLGcsZSl9LF9kZWZBdHRyQ2hhbmdlRm46ZnVuY3Rpb24oZixkKXt2YXIgYz1mLl9hdHRyT3B0cztjJiZkZWxldGUgZi5fYXR0ck9wdHM7dGhpcy5fc2V0QXR0clZhbChmLmF0dHJOYW1lLGYuc3ViQXR0ck5hbWUsZi5wcmV2VmFsLGYubmV3VmFsLApjKT9kfHwoZi5uZXdWYWw9dGhpcy5nZXQoZi5hdHRyTmFtZSkpOmR8fGYuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9fTthLm1peChxLHQsITEsbnVsbCwxKTthLkF0dHJpYnV0ZU9ic2VydmFibGU9cTthLkF0dHJpYnV0ZUV2ZW50cz1xfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJldmVudC1jdXN0b20iXX0pOwpZVUkuYWRkKCJhdHRyaWJ1dGUtZXh0cmFzIixmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEoKXt9dmFyIHQ9e3JlYWRPbmx5OjEsd3JpdGVPbmNlOjEsZ2V0dGVyOjEsYnJvYWRjYXN0OjF9O3EucHJvdG90eXBlPXttb2RpZnlBdHRyOmZ1bmN0aW9uKGYsZCl7dmFyIGMsYjtpZih0aGlzLmF0dHJBZGRlZChmKSlmb3IoYyBpbiB0aGlzLl9pc0xhenlBdHRyKGYpJiZ0aGlzLl9hZGRMYXp5QXR0cihmKSxiPXRoaXMuX3N0YXRlLGQpdFtjXSYmZC5oYXNPd25Qcm9wZXJ0eShjKSYmKGIuYWRkKGYsYyxkW2NdKSwiYnJvYWRjYXN0Ij09PWMmJmIucmVtb3ZlKGYsInB1Ymxpc2hlZCIpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihmKXt0aGlzLl9zdGF0ZS5yZW1vdmVBbGwoZil9LHJlc2V0OmZ1bmN0aW9uKGYpe3ZhciBkPXRoaXM7Zj8oZC5faXNMYXp5QXR0cihmKSYmZC5fYWRkTGF6eUF0dHIoZiksZC5zZXQoZixkLl9zdGF0ZS5nZXQoZiwiaW5pdFZhbHVlIikpKTphLk9iamVjdC5lYWNoKGQuX3N0YXRlLmRhdGEsCmZ1bmN0aW9uKGMsYil7ZC5yZXNldChiKX0pO3JldHVybiBkfSxfZ2V0QXR0ckNmZzpmdW5jdGlvbihmKXt2YXIgZCxjPXRoaXMuX3N0YXRlO2Y/ZD1jLmdldEFsbChmKXx8e306KGQ9e30sYS5lYWNoKGMuZGF0YSxmdW5jdGlvbihiLGcpe2RbZ109Yy5nZXRBbGwoZyl9KSk7cmV0dXJuIGR9fTthLkF0dHJpYnV0ZUV4dHJhcz1xfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJvb3AiXX0pOwpZVUkuYWRkKCJiYXNlLWJhc2UiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcSgpe2QuYXBwbHkodGhpcyxhcmd1bWVudHMpO2MuYXBwbHkodGhpcyxhcmd1bWVudHMpO2YuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciB0PWEuQXR0cmlidXRlQ29yZSxmPWEuQXR0cmlidXRlRXh0cmFzLGQ9YS5CYXNlQ29yZSxjPWEuQmFzZU9ic2VydmFibGU7cS5fQVRUUl9DRkc9ZC5fQVRUUl9DRkcuY29uY2F0KGMuX0FUVFJfQ0ZHKTtxLl9OT05fQVRUUlNfQ0ZHPWQuX05PTl9BVFRSU19DRkcuY29uY2F0KGMuX05PTl9BVFRSU19DRkcpO3EuTkFNRT0iYmFzZSI7cS5BVFRSUz10LnByb3RlY3RBdHRycyhkLkFUVFJTKTtxLm1vZGlmeUF0dHJzPWQubW9kaWZ5QXR0cnM7YS5taXgocSxkLCExLG51bGwsMSk7YS5taXgocSxmLCExLG51bGwsMSk7YS5taXgocSxjLCEwLG51bGwsMSk7cS5wcm90b3R5cGUuY29uc3RydWN0b3I9cTthLkJhc2U9cX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiYXR0cmlidXRlLWJhc2UiLAoiYmFzZS1jb3JlIiwiYmFzZS1vYnNlcnZhYmxlIl19KTtZVUkuYWRkKCJiYXNlLXBsdWdpbmhvc3QiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5CYXNlLHQ9YS5QbHVnaW4uSG9zdDthLm1peChxLHQsITEsbnVsbCwxKTtxLnBsdWc9dC5wbHVnO3EudW5wbHVnPXQudW5wbHVnfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJiYXNlLWJhc2UiLCJwbHVnaW5ob3N0Il19KTsKWVVJLmFkZCgiY2xhc3NuYW1lbWFuYWdlciIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLmNvbmZpZztxLmNsYXNzTmFtZVByZWZpeD1xLmNsYXNzTmFtZVByZWZpeHx8Inl1aTMiO3EuY2xhc3NOYW1lRGVsaW1pdGVyPXEuY2xhc3NOYW1lRGVsaW1pdGVyfHwiLSI7YS5DbGFzc05hbWVNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIHQ9cS5jbGFzc05hbWVQcmVmaXgsZj1xLmNsYXNzTmFtZURlbGltaXRlcjtyZXR1cm57Z2V0Q2xhc3NOYW1lOmEuY2FjaGVkKGZ1bmN0aW9uKCl7dmFyIGQ9YS5BcnJheShhcmd1bWVudHMpOyEwIT09ZFtkLmxlbmd0aC0xXT9kLnVuc2hpZnQodCk6ZC5wb3AoKTtyZXR1cm4gZC5qb2luKGYpfSl9fSgpfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoImRhdGF0eXBlLXhtbC1mb3JtYXQiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5MYW5nO2EubWl4KGEubmFtZXNwYWNlKCJYTUwiKSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3RyeXtpZighcS5pc1VuZGVmaW5lZCh0LmdldFhtbCkpcmV0dXJuIHQuZ2V0WG1sKCk7aWYoIXEuaXNVbmRlZmluZWQoWE1MU2VyaWFsaXplcikpcmV0dXJuKG5ldyBYTUxTZXJpYWxpemVyKS5zZXJpYWxpemVUb1N0cmluZyh0KX1jYXRjaChmKXtyZXR1cm4gdCYmdC54bWw/dC54bWw6cS5pc1ZhbHVlKHQpJiZ0LnRvU3RyaW5nP3QudG9TdHJpbmcoKToiIn19fSk7YS5uYW1lc3BhY2UoIkRhdGFUeXBlIik7YS5EYXRhVHlwZS5YTUw9YS5YTUx9LCJwYXRjaGVkLXYzLjE4LjEiKTsKWVVJLmFkZCgiZGF0YXR5cGUteG1sLXBhcnNlIixmdW5jdGlvbihhLEUpe2EubWl4KGEubmFtZXNwYWNlKCJYTUwiKSx7cGFyc2U6ZnVuY3Rpb24ocSl7dmFyIHQ9bnVsbCxmOyJzdHJpbmciPT09dHlwZW9mIHEmJihmPWEuY29uZmlnLndpbix2b2lkIDAhPT1mLkFjdGl2ZVhPYmplY3Q/KHQ9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSx0LmFzeW5jPSExLHQubG9hZFhNTChxKSk6dm9pZCAwIT09Zi5ET01QYXJzZXI/dD0obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHEsInRleHQveG1sIik6dm9pZCAwIT09Zi5XaW5kb3dzJiYodD1uZXcgV2luZG93cy5EYXRhLlhtbC5Eb20uWG1sRG9jdW1lbnQsdC5sb2FkWG1sKHEpKSk7cmV0dXJuIHR9fSk7YS5uYW1lc3BhY2UoIlBhcnNlcnMiKS54bWw9YS5YTUwucGFyc2U7YS5uYW1lc3BhY2UoIkRhdGFUeXBlIik7YS5EYXRhVHlwZS5YTUw9YS5YTUx9LCJwYXRjaGVkLXYzLjE4LjEiKTsKWVVJLmFkZCgiZG9tLWJhc2UiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5jb25maWcuZG9jLmRvY3VtZW50RWxlbWVudCx0PWEuRE9NLGY9YS5GZWF0dXJlcy5hZGQsZD1hLkZlYXR1cmVzLnRlc3Q7YS5taXgodCx7Z2V0VGV4dDp2b2lkIDAhPT1xLnRleHRDb250ZW50P2Z1bmN0aW9uKGwpe3ZhciBoPSIiO2wmJihoPWwudGV4dENvbnRlbnQpO3JldHVybiBofHwiIn06ZnVuY3Rpb24obCl7dmFyIGg9IiI7bCYmKGg9bC5pbm5lclRleHR8fGwubm9kZVZhbHVlKTtyZXR1cm4gaHx8IiJ9LHNldFRleHQ6dm9pZCAwIT09cS50ZXh0Q29udGVudD9mdW5jdGlvbihsLGgpe2wmJihsLnRleHRDb250ZW50PWgpfTpmdW5jdGlvbihsLGgpeyJpbm5lclRleHQiaW4gbD9sLmlubmVyVGV4dD1oOiJub2RlVmFsdWUiaW4gbCYmKGwubm9kZVZhbHVlPWgpfSxDVVNUT01fQVRUUklCVVRFUzpxLmhhc0F0dHJpYnV0ZT97aHRtbEZvcjoiZm9yIixjbGFzc05hbWU6ImNsYXNzIn06eyJmb3IiOiJodG1sRm9yIiwKImNsYXNzIjoiY2xhc3NOYW1lIn0sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKGwsaCx1LHcpe2wmJmgmJmwuc2V0QXR0cmlidXRlJiYoaD10LkNVU1RPTV9BVFRSSUJVVEVTW2hdfHxoLGwuc2V0QXR0cmlidXRlKGgsdSx3KSl9LGdldEF0dHJpYnV0ZTpmdW5jdGlvbihsLGgsdSl7dT12b2lkIDAhPT11P3U6Mjt2YXIgdz0iIjtsJiZoJiZsLmdldEF0dHJpYnV0ZSYmKGg9dC5DVVNUT01fQVRUUklCVVRFU1toXXx8aCx3PSJCVVRUT04iPT09bC50YWdOYW1lJiYidmFsdWUiPT09aD90LmdldFZhbHVlKGwpOmwuZ2V0QXR0cmlidXRlKGgsdSksbnVsbD09PXcmJih3PSIiKSk7cmV0dXJuIHd9LFZBTFVFX1NFVFRFUlM6e30sVkFMVUVfR0VUVEVSUzp7fSxnZXRWYWx1ZTpmdW5jdGlvbihsKXt2YXIgaD0iIjtsJiZsLnRhZ05hbWUmJihoPShoPXQuVkFMVUVfR0VUVEVSU1tsLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0pP2gobCk6bC52YWx1ZSk7IiI9PT1oJiYoaD0iIik7cmV0dXJuInN0cmluZyI9PT0KdHlwZW9mIGg/aDoiIn0sc2V0VmFsdWU6ZnVuY3Rpb24obCxoKXt2YXIgdTtsJiZsLnRhZ05hbWUmJih1PXQuVkFMVUVfU0VUVEVSU1tsLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0saD1udWxsPT09aD8iIjpoLHU/dShsLGgpOmwudmFsdWU9aCl9LGNyZWF0b3JzOnt9fSk7ZigidmFsdWUtc2V0Iiwic2VsZWN0Iix7dGVzdDpmdW5jdGlvbigpe3ZhciBsPWEuY29uZmlnLmRvYy5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTtsLmlubmVySFRNTD0iXHgzY29wdGlvblx4M2UxXHgzYy9vcHRpb25ceDNlXHgzY29wdGlvblx4M2UyXHgzYy9vcHRpb25ceDNlIjtsLnZhbHVlPSIyIjtyZXR1cm4gbC52YWx1ZSYmIjIiPT09bC52YWx1ZX19KTtkKCJ2YWx1ZS1zZXQiLCJzZWxlY3QiKXx8KHQuVkFMVUVfU0VUVEVSUy5zZWxlY3Q9ZnVuY3Rpb24obCxoKXtmb3IodmFyIHU9MCx3PWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9wdGlvbiIpLHo7ej13W3UrK107KWlmKHQuZ2V0VmFsdWUoeik9PT1oKXt6LnNlbGVjdGVkPQohMDticmVha319KTthLm1peCh0LlZBTFVFX0dFVFRFUlMse2J1dHRvbjpmdW5jdGlvbihsKXtyZXR1cm4gbC5hdHRyaWJ1dGVzJiZsLmF0dHJpYnV0ZXMudmFsdWU/bC5hdHRyaWJ1dGVzLnZhbHVlLnZhbHVlOiIifX0pO2EubWl4KHQuVkFMVUVfU0VUVEVSUyx7YnV0dG9uOmZ1bmN0aW9uKGwsaCl7dmFyIHU9bC5hdHRyaWJ1dGVzLnZhbHVlO3V8fCh1PWwub3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoInZhbHVlIiksbC5zZXRBdHRyaWJ1dGVOb2RlKHUpKTt1LnZhbHVlPWh9fSk7YS5taXgodC5WQUxVRV9HRVRURVJTLHtvcHRpb246ZnVuY3Rpb24obCl7dmFyIGg9bC5hdHRyaWJ1dGVzO3JldHVybiBoLnZhbHVlJiZoLnZhbHVlLnNwZWNpZmllZD9sLnZhbHVlOmwudGV4dH0sc2VsZWN0OmZ1bmN0aW9uKGwpe3ZhciBoPWwudmFsdWUsdT1sLm9wdGlvbnM7dSYmdS5sZW5ndGgmJiFsLm11bHRpcGxlJiYtMTxsLnNlbGVjdGVkSW5kZXgmJihoPXQuZ2V0VmFsdWUodVtsLnNlbGVjdGVkSW5kZXhdKSk7CnJldHVybiBofX0pO3ZhciBjLGIsZzthLm1peChhLkRPTSx7aGFzQ2xhc3M6ZnVuY3Rpb24obCxoKXtyZXR1cm4gYS5ET00uX2dldFJlZ0V4cCgiKD86XnxcXHMrKSIraCsiKD86XFxzK3wkKSIpLnRlc3QobC5jbGFzc05hbWUpfSxhZGRDbGFzczpmdW5jdGlvbihsLGgpe2EuRE9NLmhhc0NsYXNzKGwsaCl8fChsLmNsYXNzTmFtZT1hLkxhbmcudHJpbShbbC5jbGFzc05hbWUsaF0uam9pbigiICIpKSl9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGwsaCl7aCYmYihsLGgpJiYobC5jbGFzc05hbWU9YS5MYW5nLnRyaW0obC5jbGFzc05hbWUucmVwbGFjZShhLkRPTS5fZ2V0UmVnRXhwKCIoPzpefFxccyspIitoKyIoPzpcXHMrfCQpIiksIiAiKSksYihsLGgpJiZnKGwsaCkpfSxyZXBsYWNlQ2xhc3M6ZnVuY3Rpb24obCxoLHUpe2cobCxoKTtjKGwsdSl9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGwsaCx1KXsodm9pZCAwIT09dT91OiFiKGwsaCkpP2MobCxoKTpnKGwsaCl9fSk7Yj1hLkRPTS5oYXNDbGFzczsKZz1hLkRPTS5yZW1vdmVDbGFzcztjPWEuRE9NLmFkZENsYXNzO3ZhciBlPS88KFthLXpdKykvaSx0PWEuRE9NLGY9YS5GZWF0dXJlcy5hZGQsZD1hLkZlYXR1cmVzLnRlc3Qsaz17fSxtPWZ1bmN0aW9uKGwsaCl7dmFyIHU9YS5jb25maWcuZG9jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHc9ITA7dS5pbm5lckhUTUw9bDt1LmZpcnN0Q2hpbGQmJnUuZmlyc3RDaGlsZC50YWdOYW1lPT09aC50b1VwcGVyQ2FzZSgpfHwodz0hMSk7cmV0dXJuIHd9LHA9Lyg/OlwvKD86dGhlYWR8dGZvb3R8dGJvZHl8Y2FwdGlvbnxjb2x8Y29sZ3JvdXApPikrXHMqPHRib2R5LyxzO2EubWl4KGEuRE9NLHtfZnJhZ0Nsb25lczp7fSxfY3JlYXRlOmZ1bmN0aW9uKGwsaCx1KXt1PXV8fCJkaXYiO3ZhciB3PXQuX2ZyYWdDbG9uZXNbdV0sdz13P3cuY2xvbmVOb2RlKCExKTp0Ll9mcmFnQ2xvbmVzW3VdPWguY3JlYXRlRWxlbWVudCh1KTt3LmlubmVySFRNTD1sO3JldHVybiB3fSxfY2hpbGRyZW46ZnVuY3Rpb24obCwKaCl7dmFyIHU9MCx3PWwuY2hpbGRyZW4seixBO3cmJncudGFncyYmKGg/dz1sLmNoaWxkcmVuLnRhZ3MoaCk6ej13LnRhZ3MoIiEiKS5sZW5ndGgpO2lmKCF3fHwhdy50YWdzJiZofHx6KWZvcih6PXd8fGwuY2hpbGROb2Rlcyx3PVtdO0E9elt1KytdOykxPT09QS5ub2RlVHlwZSYmKGgmJmghPT1BLnRhZ05hbWV8fHcucHVzaChBKSk7cmV0dXJuIHd8fFtdfSxjcmVhdGU6ZnVuY3Rpb24obCxoKXsic3RyaW5nIj09PXR5cGVvZiBsJiYobD1hLkxhbmcudHJpbShsKSk7aD1ofHxhLmNvbmZpZy5kb2M7dmFyIHU9ZS5leGVjKGwpLHc9dC5fY3JlYXRlLHo9bnVsbCxBO3ZvaWQgMCE9bCYmKHUmJnVbMV0mJih1PWtbdVsxXS50b0xvd2VyQ2FzZSgpXSwiZnVuY3Rpb24iPT09dHlwZW9mIHU/dz11OkE9dSksdz13KGwsaCxBKSxBPXcuY2hpbGROb2RlcywxPT09QS5sZW5ndGg/ej13LnJlbW92ZUNoaWxkKEFbMF0pOkFbMF0mJiJ5dWkzLWJpZy1kdW1teSI9PT1BWzBdLmNsYXNzTmFtZT8ocz13LnNlbGVjdGVkSW5kZXgsCjI9PT1BLmxlbmd0aD96PUFbMF0ubmV4dFNpYmxpbmc6KHcucmVtb3ZlQ2hpbGQoQVswXSksej10Ll9ubDJmcmFnKEEsaCkpKTp6PXQuX25sMmZyYWcoQSxoKSk7cmV0dXJuIHp9LF9ubDJmcmFnOmZ1bmN0aW9uKGwsaCl7dmFyIHU9bnVsbCx3LHo7aWYobCYmKGwucHVzaHx8bC5pdGVtKSYmbFswXSlmb3IoaD1ofHxsWzBdLm93bmVyRG9jdW1lbnQsdT1oLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsLml0ZW0mJihsPWEuQXJyYXkobCwwLCEwKSksdz0wLHo9bC5sZW5ndGg7dzx6O3crKyl1LmFwcGVuZENoaWxkKGxbd10pO3JldHVybiB1fSxhZGRIVE1MOmZ1bmN0aW9uKGwsaCx1KXt2YXIgdz1sLnBhcmVudE5vZGUsej0wLEEsSD1oLEY7aWYodm9pZCAwIT1oKWlmKGgubm9kZVR5cGUpRj1oO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBofHwibnVtYmVyIj09dHlwZW9mIGgpSD1GPXQuY3JlYXRlKGgpO2Vsc2UgaWYoaFswXSYmaFswXS5ub2RlVHlwZSlmb3IoRj1hLmNvbmZpZy5kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO0E9CmhbeisrXTspRi5hcHBlbmRDaGlsZChBKTtpZih1KWlmKEYmJnUucGFyZW50Tm9kZSl1LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKEYsdSk7ZWxzZSBzd2l0Y2godSl7Y2FzZSAicmVwbGFjZSI6Zm9yKDtsLmZpcnN0Q2hpbGQ7KWwucmVtb3ZlQ2hpbGQobC5maXJzdENoaWxkKTtGJiZsLmFwcGVuZENoaWxkKEYpO2JyZWFrO2Nhc2UgImJlZm9yZSI6RiYmdy5pbnNlcnRCZWZvcmUoRixsKTticmVhaztjYXNlICJhZnRlciI6RiYmKGwubmV4dFNpYmxpbmc/dy5pbnNlcnRCZWZvcmUoRixsLm5leHRTaWJsaW5nKTp3LmFwcGVuZENoaWxkKEYpKTticmVhaztkZWZhdWx0OkYmJmwuYXBwZW5kQ2hpbGQoRil9ZWxzZSBGJiZsLmFwcGVuZENoaWxkKEYpOyJTRUxFQ1QiPT1sLm5vZGVOYW1lJiYwPHMmJihsLnNlbGVjdGVkSW5kZXg9cy0xKTtyZXR1cm4gSH0sd3JhcDpmdW5jdGlvbihsLGgpe3ZhciB1PWgmJmgubm9kZVR5cGU/aDphLkRPTS5jcmVhdGUoaCksdz11LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CncubGVuZ3RoJiYodT13W3cubGVuZ3RoLTFdKTtsLnBhcmVudE5vZGUmJmwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodSxsKTt1LmFwcGVuZENoaWxkKGwpfSx1bndyYXA6ZnVuY3Rpb24obCl7dmFyIGg9bC5wYXJlbnROb2RlLHU9aC5sYXN0Q2hpbGQsdz1sLHo7aWYoaClpZih6PWgucGFyZW50Tm9kZSl7Zm9yKGw9aC5maXJzdENoaWxkO2whPT11Oyl3PWwubmV4dFNpYmxpbmcsei5pbnNlcnRCZWZvcmUobCxoKSxsPXc7ei5yZXBsYWNlQ2hpbGQodSxoKX1lbHNlIGgucmVtb3ZlQ2hpbGQobCl9fSk7ZigiaW5uZXJodG1sIiwidGFibGUiLHt0ZXN0OmZ1bmN0aW9uKCl7dmFyIGw9YS5jb25maWcuZG9jLmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7dHJ5e2wuaW5uZXJIVE1MPSJceDNjdGJvZHlceDNlXHgzYy90Ym9keVx4M2UifWNhdGNoKGgpe3JldHVybiExfXJldHVybiBsLmZpcnN0Q2hpbGQmJiJUQk9EWSI9PT1sLmZpcnN0Q2hpbGQubm9kZU5hbWV9fSk7ZigiaW5uZXJodG1sLWRpdiIsCiJ0ciIse3Rlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbSgiXHgzY3RyXHgzZVx4M2MvdHJceDNlIiwidHIiKX19KTtmKCJpbm5lcmh0bWwtZGl2Iiwic2NyaXB0Iix7dGVzdDpmdW5jdGlvbigpe3JldHVybiBtKCJceDNjc2NyaXB0XHgzZVx4M2Mvc2NyaXB0XHgzZSIsInNjcmlwdCIpfX0pO2QoImlubmVyaHRtbCIsInRhYmxlIil8fChrLnRib2R5PWZ1bmN0aW9uKGwsaCl7dmFyIHU9dC5jcmVhdGUoIlx4M2N0YWJsZVx4M2UiK2wrIlx4M2MvdGFibGVceDNlIixoKSx3PWEuRE9NLl9jaGlsZHJlbih1LCJ0Ym9keSIpWzBdOzE8dS5jaGlsZHJlbi5sZW5ndGgmJncmJiFwLnRlc3QobCkmJncucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3KTtyZXR1cm4gdX0pO2QoImlubmVyaHRtbC1kaXYiLCJzY3JpcHQiKXx8KGsuc2NyaXB0PWZ1bmN0aW9uKGwsaCl7dmFyIHU9aC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmlubmVySFRNTD0iLSIrbDt1LnJlbW92ZUNoaWxkKHUuZmlyc3RDaGlsZCk7cmV0dXJuIHV9LAprLmxpbms9ay5zdHlsZT1rLnNjcmlwdCk7ZCgiaW5uZXJodG1sLWRpdiIsInRyIil8fChhLm1peChrLHtvcHRpb246ZnVuY3Rpb24obCxoKXtyZXR1cm4gdC5jcmVhdGUoJ1x4M2NzZWxlY3RceDNlXHgzY29wdGlvbiBjbGFzc1x4M2QieXVpMy1iaWctZHVtbXkiIHNlbGVjdGVkXHgzZVx4M2Mvb3B0aW9uXHgzZScrbCsiXHgzYy9zZWxlY3RceDNlIixoKX0sdHI6ZnVuY3Rpb24obCxoKXtyZXR1cm4gdC5jcmVhdGUoIlx4M2N0Ym9keVx4M2UiK2wrIlx4M2MvdGJvZHlceDNlIixoKX0sdGQ6ZnVuY3Rpb24obCxoKXtyZXR1cm4gdC5jcmVhdGUoIlx4M2N0clx4M2UiK2wrIlx4M2MvdHJceDNlIixoKX0sY29sOmZ1bmN0aW9uKGwsaCl7cmV0dXJuIHQuY3JlYXRlKCJceDNjY29sZ3JvdXBceDNlIitsKyJceDNjL2NvbGdyb3VwXHgzZSIsaCl9LHRib2R5OiJ0YWJsZSJ9KSxhLm1peChrLHtsZWdlbmQ6ImZpZWxkc2V0Iix0aDprLnRkLHRoZWFkOmsudGJvZHksdGZvb3Q6ay50Ym9keSxjYXB0aW9uOmsudGJvZHksCmNvbGdyb3VwOmsudGJvZHksb3B0Z3JvdXA6ay5vcHRpb259KSk7dC5jcmVhdG9ycz1rO2EubWl4KGEuRE9NLHtzZXRXaWR0aDpmdW5jdGlvbihsLGgpe2EuRE9NLl9zZXRTaXplKGwsIndpZHRoIixoKX0sc2V0SGVpZ2h0OmZ1bmN0aW9uKGwsaCl7YS5ET00uX3NldFNpemUobCwiaGVpZ2h0IixoKX0sX3NldFNpemU6ZnVuY3Rpb24obCxoLHUpe3U9MDx1P3U6MDt2YXIgdz0wO2wuc3R5bGVbaF09dSsicHgiO3c9ImhlaWdodCI9PT1oP2wub2Zmc2V0SGVpZ2h0Omwub2Zmc2V0V2lkdGg7dz51JiYodS09dy11LDA+dSYmKHU9MCksbC5zdHlsZVtoXT11KyJweCIpfX0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJkb20tY29yZSJdfSk7CllVSS5hZGQoImRvbS1jb3JlIixmdW5jdGlvbihhLEUpe3ZhciBxPVtdLHQ9ZnVuY3Rpb24oKXt2YXIgZD1hLmNvbmZpZy5kb2MuY3JlYXRlRWxlbWVudCgiZGl2IiksYz1kLmFwcGVuZENoaWxkKGEuY29uZmlnLmRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpLGI9ITE7dHJ5e2I9ZC5jb250YWlucyhjKX1jYXRjaChnKXt9cmV0dXJuIGJ9KCksZj17YnlJZDpmdW5jdGlvbihkLGMpe3JldHVybiBmLmFsbEJ5SWQoZCxjKVswXXx8bnVsbH0sZ2V0SWQ6ZnVuY3Rpb24oZCl7dmFyIGM7IWQuaWR8fGQuaWQudGFnTmFtZXx8ZC5pZC5pdGVtP2QuYXR0cmlidXRlcyYmZC5hdHRyaWJ1dGVzLmlkJiYoYz1kLmF0dHJpYnV0ZXMuaWQudmFsdWUpOmM9ZC5pZDtyZXR1cm4gY30sc2V0SWQ6ZnVuY3Rpb24oZCxjKXtkLnNldEF0dHJpYnV0ZT9kLnNldEF0dHJpYnV0ZSgiaWQiLGMpOmQuaWQ9Y30sYW5jZXN0b3I6ZnVuY3Rpb24oZCxjLGIsZyl7dmFyIGU9bnVsbDtiJiYoZT0hY3x8YyhkKT9kOm51bGwpOwpyZXR1cm4gZXx8Zi5lbGVtZW50QnlBeGlzKGQsInBhcmVudE5vZGUiLGMsbnVsbCxnKX0sYW5jZXN0b3JzOmZ1bmN0aW9uKGQsYyxiLGcpe2Zvcih2YXIgZT1bXTsoZD1mLmFuY2VzdG9yKGQsYyxiLGcpKSYmIShiPSExLGQmJihlLnVuc2hpZnQoZCksZyYmZyhkKSkpOyk7cmV0dXJuIGV9LGVsZW1lbnRCeUF4aXM6ZnVuY3Rpb24oZCxjLGIsZyxlKXtmb3IoO2QmJihkPWRbY10pOyl7aWYoKGd8fGQudGFnTmFtZSkmJighYnx8YihkKSkpcmV0dXJuIGQ7aWYoZSYmZShkKSlicmVha31yZXR1cm4gbnVsbH0sY29udGFpbnM6ZnVuY3Rpb24oZCxjKXt2YXIgYj0hMTtpZihjJiZkJiZjLm5vZGVUeXBlJiZkLm5vZGVUeXBlKWlmKGQuY29udGFpbnMmJigxPT09Yy5ub2RlVHlwZXx8dCkpYj1kLmNvbnRhaW5zKGMpO2Vsc2UgaWYoZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbil7aWYoZD09PWN8fGQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYykmMTYpYj0hMH1lbHNlIGI9Zi5fYnJ1dGVDb250YWlucyhkLApjKTtlbHNlIGI9ITE7cmV0dXJuIGJ9LGluRG9jOmZ1bmN0aW9uKGQsYyl7dmFyIGI9ITE7ZCYmZC5ub2RlVHlwZSYmKGN8fChjPWQub3duZXJEb2N1bWVudCksYj0oYj1jLmRvY3VtZW50RWxlbWVudCkmJmIuY29udGFpbnMmJmQudGFnTmFtZT9iLmNvbnRhaW5zKGQpOmYuY29udGFpbnMoYixkKSk7cmV0dXJuIGJ9LGFsbEJ5SWQ6ZnVuY3Rpb24oZCxjKXtjPWN8fGEuY29uZmlnLmRvYzt2YXIgYj1bXSxnPVtdLGUsaztpZihjLnF1ZXJ5U2VsZWN0b3JBbGwpZz1jLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZFx4M2QiJytkKyciXScpO2Vsc2UgaWYoYy5hbGwpe2lmKGI9Yy5hbGwoZCkpaWYoYi5ub2RlTmFtZSYmKGIuaWQ9PT1kPyhnLnB1c2goYiksYj1xKTpiPVtiXSksYi5sZW5ndGgpZm9yKGU9MDtrPWJbZSsrXTspKGsuaWQ9PT1kfHxrLmF0dHJpYnV0ZXMmJmsuYXR0cmlidXRlcy5pZCYmay5hdHRyaWJ1dGVzLmlkLnZhbHVlPT09ZCkmJmcucHVzaChrKX1lbHNlIGc9W2YuX2dldERvYyhjKS5nZXRFbGVtZW50QnlJZChkKV07CnJldHVybiBnfSxpc1dpbmRvdzpmdW5jdGlvbihkKXtyZXR1cm4hIShkJiZkLnNjcm9sbFRvJiZkLmRvY3VtZW50KX0sX3JlbW92ZUNoaWxkTm9kZXM6ZnVuY3Rpb24oZCl7Zm9yKDtkLmZpcnN0Q2hpbGQ7KWQucmVtb3ZlQ2hpbGQoZC5maXJzdENoaWxkKX0sc2libGluZ3M6ZnVuY3Rpb24oZCxjKXtmb3IodmFyIGI9W10sZz1kO2c9Zy5wcmV2aW91c1NpYmxpbmc7KSFnLnRhZ05hbWV8fGMmJiFjKGcpfHxiLnVuc2hpZnQoZyk7Zm9yKGc9ZDtnPWcubmV4dFNpYmxpbmc7KSFnLnRhZ05hbWV8fGMmJiFjKGcpfHxiLnB1c2goZyk7cmV0dXJuIGJ9LF9icnV0ZUNvbnRhaW5zOmZ1bmN0aW9uKGQsYyl7Zm9yKDtjOyl7aWYoZD09PWMpcmV0dXJuITA7Yz1jLnBhcmVudE5vZGV9cmV0dXJuITF9LF9nZXRSZWdFeHA6ZnVuY3Rpb24oZCxjKXtjPWN8fCIiO2YuX3JlZ2V4Q2FjaGU9Zi5fcmVnZXhDYWNoZXx8e307Zi5fcmVnZXhDYWNoZVtkK2NdfHwoZi5fcmVnZXhDYWNoZVtkK2NdPVJlZ0V4cChkLApjKSk7cmV0dXJuIGYuX3JlZ2V4Q2FjaGVbZCtjXX0sX2dldERvYzpmdW5jdGlvbihkKXt2YXIgYz1hLmNvbmZpZy5kb2M7ZCYmKGM9OT09PWQubm9kZVR5cGU/ZDpkLm93bmVyRG9jdW1lbnR8fGQuZG9jdW1lbnR8fGEuY29uZmlnLmRvYyk7cmV0dXJuIGN9LF9nZXRXaW46ZnVuY3Rpb24oZCl7ZD1mLl9nZXREb2MoZCk7cmV0dXJuIGQuZGVmYXVsdFZpZXd8fGQucGFyZW50V2luZG93fHxhLmNvbmZpZy53aW59LF9iYXRjaDpmdW5jdGlvbihkLGMsYixnLGUsayl7Yz0ic3RyaW5nIj09PXR5cGVvZiBjP2ZbY106Yzt2YXIgbSxwPTAscztpZihjJiZkKWZvcig7bT1kW3ArK107KW09bT1jLmNhbGwoZixtLGIsZyxlLGspLCJ1bmRlZmluZWQiIT09dHlwZW9mIG0mJihzfHwocz1bXSkscy5wdXNoKG0pKTtyZXR1cm4idW5kZWZpbmVkIiE9PXR5cGVvZiBzP3M6ZH0sZ2VuZXJhdGVJRDpmdW5jdGlvbihkKXt2YXIgYz1kLmlkO2N8fChjPWEuc3RhbXAoZCksZC5pZD1jKTtyZXR1cm4gY319O2EuRE9NPQpmfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJvb3AiLCJmZWF0dXJlcyJdfSk7CllVSS5hZGQoImRvbS1zY3JlZW4iLGZ1bmN0aW9uKGEsRSl7KGZ1bmN0aW9uKHEpe3ZhciB0PXEuRE9NLGY9L150KD86YWJsZXxkfGgpJC9pLGQ7cS5VQS5pZSYmKGQ9IkJhY2tDb21wYXQiIT09cS5jb25maWcuZG9jLmNvbXBhdE1vZGU/ImRvY3VtZW50RWxlbWVudCI6ImJvZHkiKTtxLm1peCh0LHt3aW5IZWlnaHQ6ZnVuY3Rpb24oYyl7cmV0dXJuIHQuX2dldFdpblNpemUoYykuaGVpZ2h0fSx3aW5XaWR0aDpmdW5jdGlvbihjKXtyZXR1cm4gdC5fZ2V0V2luU2l6ZShjKS53aWR0aH0sZG9jSGVpZ2h0OmZ1bmN0aW9uKGMpe3ZhciBiPXQuX2dldERvY1NpemUoYykuaGVpZ2h0O3JldHVybiBNYXRoLm1heChiLHQuX2dldFdpblNpemUoYykuaGVpZ2h0KX0sZG9jV2lkdGg6ZnVuY3Rpb24oYyl7dmFyIGI9dC5fZ2V0RG9jU2l6ZShjKS53aWR0aDtyZXR1cm4gTWF0aC5tYXgoYix0Ll9nZXRXaW5TaXplKGMpLndpZHRoKX0sZG9jU2Nyb2xsWDpmdW5jdGlvbihjLGIpe2I9Ynx8Yz90Ll9nZXREb2MoYyk6CnEuY29uZmlnLmRvYzt2YXIgZz1iLmRlZmF1bHRWaWV3O3JldHVybiBNYXRoLm1heChiLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGIuYm9keS5zY3JvbGxMZWZ0LGc/Zy5wYWdlWE9mZnNldDowKX0sZG9jU2Nyb2xsWTpmdW5jdGlvbihjLGIpe2I9Ynx8Yz90Ll9nZXREb2MoYyk6cS5jb25maWcuZG9jO3ZhciBnPWIuZGVmYXVsdFZpZXc7cmV0dXJuIE1hdGgubWF4KGIuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCxiLmJvZHkuc2Nyb2xsVG9wLGc/Zy5wYWdlWU9mZnNldDowKX0sZ2V0WFk6ZnVuY3Rpb24oKXtyZXR1cm4gcS5jb25maWcuZG9jLmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/ZnVuY3Rpb24oYyl7dmFyIGI9bnVsbCxnLGUsayxtLHAscztpZihjJiZjLnRhZ05hbWUpaWYocD1jLm93bmVyRG9jdW1lbnQsYj1wLmNvbXBhdE1vZGUscz0iQmFja0NvbXBhdCIhPT1iP3AuZG9jdW1lbnRFbGVtZW50OnAuYm9keSxnPXMuY29udGFpbnM/cy5jb250YWlucyhjKToKcS5ET00uY29udGFpbnMocyxjKSl7KGU9cC5kZWZhdWx0VmlldykmJiJwYWdlWE9mZnNldCJpbiBlPyhnPWUucGFnZVhPZmZzZXQsZT1lLnBhZ2VZT2Zmc2V0KTooZz1kP3BbZF0uc2Nyb2xsTGVmdDp0LmRvY1Njcm9sbFgoYyxwKSxlPWQ/cFtkXS5zY3JvbGxUb3A6dC5kb2NTY3JvbGxZKGMscCkpO3EuVUEuaWUmJighcC5kb2N1bWVudE1vZGV8fDg+cC5kb2N1bWVudE1vZGV8fCJCYWNrQ29tcGF0Ij09PWIpJiYoaz1zLmNsaWVudExlZnQsbT1zLmNsaWVudFRvcCk7Yz1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2I9W2MubGVmdCxjLnRvcF07aWYoa3x8bSliWzBdLT1rLGJbMV0tPW07aWYoZXx8ZylpZighcS5VQS5pb3N8fDQuMjw9cS5VQS5pb3MpYlswXSs9ZyxiWzFdKz1lfWVsc2UgYj10Ll9nZXRPZmZzZXQoYyk7cmV0dXJuIGJ9OmZ1bmN0aW9uKGMpe3ZhciBiPW51bGwsZyxlLGssbTtpZihjKWlmKHQuaW5Eb2MoYykpe2I9W2Mub2Zmc2V0TGVmdCxjLm9mZnNldFRvcF07Zz1jLm93bmVyRG9jdW1lbnQ7CmU9Yztmb3Ioaz1xLlVBLmdlY2tvfHw1MTk8cS5VQS53ZWJraXQ/ITA6ITE7ZT1lLm9mZnNldFBhcmVudDspYlswXSs9ZS5vZmZzZXRMZWZ0LGJbMV0rPWUub2Zmc2V0VG9wLGsmJihiPXQuX2NhbGNCb3JkZXJzKGUsYikpO2lmKCJmaXhlZCIhPXQuZ2V0U3R5bGUoYywicG9zaXRpb24iKSlmb3IoZT1jO2U9ZS5wYXJlbnROb2RlOylpZihrPWUuc2Nyb2xsVG9wLG09ZS5zY3JvbGxMZWZ0LHEuVUEuZ2Vja28mJiJ2aXNpYmxlIiE9PXQuZ2V0U3R5bGUoZSwib3ZlcmZsb3ciKSYmKGI9dC5fY2FsY0JvcmRlcnMoZSxiKSksa3x8bSliWzBdLT1tLGJbMV0tPWs7YlswXSs9dC5kb2NTY3JvbGxYKGMsZyk7YlsxXSs9dC5kb2NTY3JvbGxZKGMsZyl9ZWxzZSBiPXQuX2dldE9mZnNldChjKTtyZXR1cm4gYn19KCksZ2V0U2Nyb2xsYmFyV2lkdGg6cS5jYWNoZWQoZnVuY3Rpb24oKXt2YXIgYz1xLmNvbmZpZy5kb2MsYj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLAplPTAuMTtnJiYoYi5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbjtvdmVyZmxvdzpzY3JvbGw7d2lkdGg6MjBweDsiLGIuYXBwZW5kQ2hpbGQoYy5jcmVhdGVFbGVtZW50KCJwIikpLnN0eWxlLmhlaWdodD0iMXB4IixnLmluc2VydEJlZm9yZShiLGcuZmlyc3RDaGlsZCksZT1iLm9mZnNldFdpZHRoLWIuY2xpZW50V2lkdGgsZy5yZW1vdmVDaGlsZChiKSk7cmV0dXJuIGV9LG51bGwsMC4xKSxnZXRYOmZ1bmN0aW9uKGMpe3JldHVybiB0LmdldFhZKGMpWzBdfSxnZXRZOmZ1bmN0aW9uKGMpe3JldHVybiB0LmdldFhZKGMpWzFdfSxzZXRYWTpmdW5jdGlvbihjLGIsZyl7dmFyIGU9dC5zZXRTdHlsZSxrLG0scCxzO2MmJmImJihrPXQuZ2V0U3R5bGUoYywicG9zaXRpb24iKSxwPXQuT0ZGU0VUX1hZLHB8fChtPXQuZ2V0Q29tcHV0ZWRTdHlsZShjLCJkaXJlY3Rpb24iKSxwPSJydGwiPT09bT8icmlnaHQiOiJsZWZ0IiksbT10Ll9nZXRPZmZzZXQoYywKcCksInN0YXRpYyI9PWsmJmUoYywicG9zaXRpb24iLCJyZWxhdGl2ZSIpLGs9dC5fZ2V0RGlyWFkoYyxwKSxzPWJbMF0sInJpZ2h0Ij09PXAmJihzPXQud2luV2lkdGgoKS0oYlswXStwYXJzZUludCh0LmdldENvbXB1dGVkU3R5bGUoYywid2lkdGgiKSwxMCkpLG1bMF18fGd8fChnPSExKSksbnVsbCE9PXMmJmUoYyxwLHMta1swXSttWzBdKyJweCIpLG51bGwhPT1iWzFdJiZlKGMsInRvcCIsYlsxXS1rWzFdK21bMV0rInB4IiksZ3x8KGc9dC5nZXRYWShjKSxnWzBdPT09YlswXSYmZ1sxXT09PWJbMV18fHQuc2V0WFkoYyxiLCEwKSkpfSxzZXRYOmZ1bmN0aW9uKGMsYil7cmV0dXJuIHQuc2V0WFkoYyxbYixudWxsXSl9LHNldFk6ZnVuY3Rpb24oYyxiKXtyZXR1cm4gdC5zZXRYWShjLFtudWxsLGJdKX0sc3dhcFhZOmZ1bmN0aW9uKGMsYil7dmFyIGc9dC5nZXRYWShjKTt0LnNldFhZKGMsdC5nZXRYWShiKSk7dC5zZXRYWShiLGcpfSxfY2FsY0JvcmRlcnM6ZnVuY3Rpb24oYyxiKXt2YXIgZz0KcGFyc2VJbnQodC5nZXRDb21wdXRlZFN0eWxlKGMsImJvcmRlclRvcFdpZHRoIiksMTApfHwwLGU9cGFyc2VJbnQodC5nZXRDb21wdXRlZFN0eWxlKGMsImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MDtxLlVBLmdlY2tvJiZmLnRlc3QoYy50YWdOYW1lKSYmKGU9Zz0wKTtiWzBdKz1lO2JbMV0rPWc7cmV0dXJuIGJ9LF9nZXRXaW5TaXplOmZ1bmN0aW9uKGMsYil7Yj1ifHxjP3QuX2dldERvYyhjKTpxLmNvbmZpZy5kb2M7dmFyIGc9Yi5kZWZhdWx0Vmlld3x8Yi5wYXJlbnRXaW5kb3csZT1iLmNvbXBhdE1vZGUsaz1nLmlubmVySGVpZ2h0LGc9Zy5pbm5lcldpZHRoLG09Yi5kb2N1bWVudEVsZW1lbnQ7ZSYmIXEuVUEub3BlcmEmJigiQ1NTMUNvbXBhdCIhPWUmJihtPWIuYm9keSksaz1tLmNsaWVudEhlaWdodCxnPW0uY2xpZW50V2lkdGgpO3JldHVybntoZWlnaHQ6ayx3aWR0aDpnfX0sX2dldERvY1NpemU6ZnVuY3Rpb24oYyl7Yz1jP3QuX2dldERvYyhjKTpxLmNvbmZpZy5kb2M7dmFyIGI9CmMuZG9jdW1lbnRFbGVtZW50OyJDU1MxQ29tcGF0IiE9Yy5jb21wYXRNb2RlJiYoYj1jLmJvZHkpO3JldHVybntoZWlnaHQ6Yi5zY3JvbGxIZWlnaHQsd2lkdGg6Yi5zY3JvbGxXaWR0aH19LF9nZXREaXJYWTpmdW5jdGlvbihjLGIpe3ZhciBnPXQuZ2V0WFkoYyk7InJpZ2h0Ij09PWImJihnWzBdPXQud2luV2lkdGgoKS0oZ1swXStwYXJzZUludCh0LmdldENvbXB1dGVkU3R5bGUoYywid2lkdGgiKSwxMCkpKTtyZXR1cm4gZ319KX0pKGEpOyhmdW5jdGlvbihxKXt2YXIgdD1mdW5jdGlvbihkLGMpe3ZhciBiPU1hdGgubWF4KGQudG9wLGMudG9wKSxnPU1hdGgubWluKGQucmlnaHQsYy5yaWdodCksZT1NYXRoLm1pbihkLmJvdHRvbSxjLmJvdHRvbSksaz1NYXRoLm1heChkLmxlZnQsYy5sZWZ0KSxtPXt9O20udG9wPWI7bS5yaWdodD1nO20uYm90dG9tPWU7bS5sZWZ0PWs7cmV0dXJuIG19LGY9cS5ET007cS5taXgoZix7cmVnaW9uOmZ1bmN0aW9uKGQpe3ZhciBjPWYuZ2V0WFkoZCksYj0KITE7ZCYmYyYmKGI9Zi5fZ2V0UmVnaW9uKGNbMV0sY1swXStkLm9mZnNldFdpZHRoLGNbMV0rZC5vZmZzZXRIZWlnaHQsY1swXSkpO3JldHVybiBifSxpbnRlcnNlY3Q6ZnVuY3Rpb24oZCxjLGIpe3ZhciBnPWJ8fGYucmVnaW9uKGQpLGU9e307aWYoYy50YWdOYW1lKWU9Zi5yZWdpb24oYyk7ZWxzZSBpZihxLkxhbmcuaXNPYmplY3QoYykpZT1jO2Vsc2UgcmV0dXJuITE7Zz10KGUsZyk7cmV0dXJue3RvcDpnLnRvcCxyaWdodDpnLnJpZ2h0LGJvdHRvbTpnLmJvdHRvbSxsZWZ0OmcubGVmdCxhcmVhOihnLmJvdHRvbS1nLnRvcCkqKGcucmlnaHQtZy5sZWZ0KSx5b2ZmOmcuYm90dG9tLWcudG9wLHhvZmY6Zy5yaWdodC1nLmxlZnQsaW5SZWdpb246Zi5pblJlZ2lvbihkLGMsITEsYil9fSxpblJlZ2lvbjpmdW5jdGlvbihkLGMsYixnKXt2YXIgZT17fTtkPWd8fGYucmVnaW9uKGQpO2lmKGMudGFnTmFtZSllPWYucmVnaW9uKGMpO2Vsc2UgaWYocS5MYW5nLmlzT2JqZWN0KGMpKWU9YztlbHNlIHJldHVybiExOwppZihiKXJldHVybiBkLmxlZnQ+PWUubGVmdCYmZC5yaWdodDw9ZS5yaWdodCYmZC50b3A+PWUudG9wJiZkLmJvdHRvbTw9ZS5ib3R0b207Yz10KGUsZCk7cmV0dXJuIGMuYm90dG9tPj1jLnRvcCYmYy5yaWdodD49Yy5sZWZ0PyEwOiExfSxpblZpZXdwb3J0UmVnaW9uOmZ1bmN0aW9uKGQsYyxiKXtyZXR1cm4gZi5pblJlZ2lvbihkLGYudmlld3BvcnRSZWdpb24oZCksYyxiKX0sX2dldFJlZ2lvbjpmdW5jdGlvbihkLGMsYixnKXt2YXIgZT17fTtlLnRvcD1lWzFdPWQ7ZS5sZWZ0PWVbMF09ZztlLmJvdHRvbT1iO2UucmlnaHQ9YztlLndpZHRoPWUucmlnaHQtZS5sZWZ0O2UuaGVpZ2h0PWUuYm90dG9tLWUudG9wO3JldHVybiBlfSx2aWV3cG9ydFJlZ2lvbjpmdW5jdGlvbihkKXtkPWR8fHEuY29uZmlnLmRvYy5kb2N1bWVudEVsZW1lbnQ7dmFyIGM9ITEsYjtkJiYoYz1mLmRvY1Njcm9sbFgoZCksYj1mLmRvY1Njcm9sbFkoZCksYz1mLl9nZXRSZWdpb24oYixmLndpbldpZHRoKGQpK2MsCmIrZi53aW5IZWlnaHQoZCksYykpO3JldHVybiBjfX0pfSkoYSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImRvbS1iYXNlIiwiZG9tLXN0eWxlIl19KTsKWVVJLmFkZCgiZG9tLXN0eWxlIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuY29uZmlnLmRvYyx0PWEuRE9NLGYsZCxjPS93aWR0aHxoZWlnaHR8dG9wfGxlZnR8cmlnaHR8Ym90dG9tfG1hcmdpbnxwYWRkaW5nL2k7YS5BcnJheS5lYWNoKFsiV2Via2l0VHJhbnNmb3JtIiwiTW96VHJhbnNmb3JtIiwiT1RyYW5zZm9ybSIsIm1zVHJhbnNmb3JtIiwidHJhbnNmb3JtIl0sZnVuY3Rpb24oYil7YiBpbiBxLmRvY3VtZW50RWxlbWVudC5zdHlsZSYmKGY9YixkPWIrIk9yaWdpbiIpfSk7YS5taXgodCx7REVGQVVMVF9VTklUOiJweCIsQ1VTVE9NX1NUWUxFUzp7fSxzZXRTdHlsZTpmdW5jdGlvbihiLGcsZSxrKXtrPWt8fGIuc3R5bGU7dmFyIG09dC5DVVNUT01fU1RZTEVTO2lmKGspe251bGw9PT1lfHwiIj09PWU/ZT0iIjohaXNOYU4oTnVtYmVyKGUpKSYmYy50ZXN0KGcpJiYoZSs9dC5ERUZBVUxUX1VOSVQpO2lmKGcgaW4gbSl7aWYobVtnXS5zZXQpe21bZ10uc2V0KGIsZSxrKTtyZXR1cm59InN0cmluZyI9PT0KdHlwZW9mIG1bZ10mJihnPW1bZ10pfWVsc2UiIj09PWcmJihnPSJjc3NUZXh0IixlPSIiKTtrW2ddPWV9fSxnZXRTdHlsZTpmdW5jdGlvbihiLGcsZSl7ZT1lfHxiLnN0eWxlO3ZhciBrPXQuQ1VTVE9NX1NUWUxFUyxtPSIiO2lmKGUpe2lmKGcgaW4gayl7aWYoa1tnXS5nZXQpcmV0dXJuIGtbZ10uZ2V0KGIsZyxlKTsic3RyaW5nIj09PXR5cGVvZiBrW2ddJiYoZz1rW2ddKX1tPWVbZ107IiI9PT1tJiYobT10LmdldENvbXB1dGVkU3R5bGUoYixnKSl9cmV0dXJuIG19LHNldFN0eWxlczpmdW5jdGlvbihiLGcpe3ZhciBlPWIuc3R5bGU7YS5lYWNoKGcsZnVuY3Rpb24oayxtKXt0LnNldFN0eWxlKGIsbSxrLGUpfSx0KX0sZ2V0Q29tcHV0ZWRTdHlsZTpmdW5jdGlvbihiLGcpe3ZhciBlPSIiLGs9Yi5vd25lckRvY3VtZW50O2Iuc3R5bGUmJmsuZGVmYXVsdFZpZXcmJmsuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKGs9ay5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGIsCm51bGwpKSYmKGU9a1tnXSk7cmV0dXJuIGV9fSk7dm9pZCAwIT09cS5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3NzRmxvYXQ/dC5DVVNUT01fU1RZTEVTWyJmbG9hdCJdPSJjc3NGbG9hdCI6dm9pZCAwIT09cS5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc3R5bGVGbG9hdCYmKHQuQ1VTVE9NX1NUWUxFU1siZmxvYXQiXT0ic3R5bGVGbG9hdCIpO2EuVUEud2Via2l0JiYodC5nZXRDb21wdXRlZFN0eWxlPWZ1bmN0aW9uKGIsZyl7dmFyIGU9Yi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYiwiIilbZ107InJnYmEoMCwgMCwgMCwgMCkiPT09ZSYmKGU9InRyYW5zcGFyZW50Iik7cmV0dXJuIGV9KTthLkRPTS5fZ2V0QXR0ck9mZnNldD1mdW5jdGlvbihiLGcpe3ZhciBlPWEuRE9NLmdldENvbXB1dGVkU3R5bGUoYixnKSxrPWIub2Zmc2V0UGFyZW50LG07ImF1dG8iPT09ZSYmKG09YS5ET00uZ2V0U3R5bGUoYiwicG9zaXRpb24iKSwic3RhdGljIj09PW18fCJyZWxhdGl2ZSI9PT0KbT9lPTA6ayYmay5nZXRCb3VuZGluZ0NsaWVudFJlY3QmJihlPWsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZ10saz1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2ddLGU9ImxlZnQiPT09Z3x8InRvcCI9PT1nP2stZTplLWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZ10pKTtyZXR1cm4gZX07YS5ET00uX2dldE9mZnNldD1mdW5jdGlvbihiLGcpe3ZhciBlLGs9bnVsbCxtPXtsZWZ0OiJvZmZzZXRMZWZ0IixyaWdodDoib2Zmc2V0UmlnaHQifSxwPXtsZWZ0OiJtYXJnaW5MZWZ0IixyaWdodDoibWFyZ2luUmlnaHQifTtnPWd8fCJsZWZ0IjtiJiYoZT10LmdldFN0eWxlKGIsInBvc2l0aW9uIikscD1wYXJzZUludCh0LmdldENvbXB1dGVkU3R5bGUoYixwW2ddKSwxMCksaz1bcGFyc2VJbnQodC5nZXRDb21wdXRlZFN0eWxlKGIsZyksMTApLHBhcnNlSW50KHQuZ2V0Q29tcHV0ZWRTdHlsZShiLCJ0b3AiKSwxMCldLGlzTmFOKGtbMF0pJiYoa1swXT1wYXJzZUludCh0LmdldFN0eWxlKGIsCmcpLDEwKSxpc05hTihrWzBdKSYmKGtbMF09InJlbGF0aXZlIj09PWU/MDpiW21bZ11dLXB8fDApKSxpc05hTihrWzFdKSYmKGtbMV09cGFyc2VJbnQodC5nZXRTdHlsZShiLCJ0b3AiKSwxMCksaXNOYU4oa1sxXSkmJihrWzFdPSJyZWxhdGl2ZSI9PT1lPzA6Yi5vZmZzZXRUb3B8fDApKSk7cmV0dXJuIGt9O2YmJih0LkNVU1RPTV9TVFlMRVMudHJhbnNmb3JtPXtzZXQ6ZnVuY3Rpb24oYixnLGUpe2VbZl09Z30sZ2V0OmZ1bmN0aW9uKGIpe3JldHVybiB0LmdldENvbXB1dGVkU3R5bGUoYixmKX19LHQuQ1VTVE9NX1NUWUxFUy50cmFuc2Zvcm1PcmlnaW49e3NldDpmdW5jdGlvbihiLGcsZSl7ZVtkXT1nfSxnZXQ6ZnVuY3Rpb24oYil7cmV0dXJuIHQuZ2V0Q29tcHV0ZWRTdHlsZShiLGQpfX0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJkb20tYmFzZSJdfSk7CllVSS5hZGQoImV2ZW50LWJhc2UiLGZ1bmN0aW9uKGEsRSl7YS5wdWJsaXNoKCJkb21yZWFkeSIse2ZpcmVPbmNlOiEwLGFzeW5jOiEwfSk7WVVJLkVudi5ET01SZWFkeT9hLmZpcmUoImRvbXJlYWR5Iik6YS5Eby5iZWZvcmUoZnVuY3Rpb24oKXthLmZpcmUoImRvbXJlYWR5Iil9LFlVSS5FbnYsIl9yZWFkeSIpO3ZhciBxPWEuVUEsdD17fSxmPXs2MzIzMjozOCw2MzIzMzo0MCw2MzIzNDozNyw2MzIzNTozOSw2MzI3NjozMyw2MzI3NzozNCwyNTo5LDYzMjcyOjQ2LDYzMjczOjM2LDYzMjc1OjM1fSxkPWZ1bmN0aW9uKGIpe2lmKCFiKXJldHVybiBiO3RyeXtiJiYzPT1iLm5vZGVUeXBlJiYoYj1iLnBhcmVudE5vZGUpfWNhdGNoKGcpe3JldHVybiBudWxsfXJldHVybiBhLm9uZShiKX0sYz1mdW5jdGlvbihiLGcsZSl7dGhpcy5fZXZlbnQ9Yjt0aGlzLl9jdXJyZW50VGFyZ2V0PWc7dGhpcy5fd3JhcHBlcj1lfHx0O3RoaXMuaW5pdCgpfTthLmV4dGVuZChjLE9iamVjdCx7aW5pdDpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLl9ldmVudCxnPXRoaXMuX3dyYXBwZXIub3ZlcnJpZGVzLGU9Yi5wYWdlWCxrPWIucGFnZVksbT10aGlzLl9jdXJyZW50VGFyZ2V0O3RoaXMuYWx0S2V5PWIuYWx0S2V5O3RoaXMuY3RybEtleT1iLmN0cmxLZXk7dGhpcy5tZXRhS2V5PWIubWV0YUtleTt0aGlzLnNoaWZ0S2V5PWIuc2hpZnRLZXk7dGhpcy50eXBlPWcmJmcudHlwZXx8Yi50eXBlO3RoaXMuY2xpZW50WD1iLmNsaWVudFg7dGhpcy5jbGllbnRZPWIuY2xpZW50WTt0aGlzLnBhZ2VYPWU7dGhpcy5wYWdlWT1rO2c9Yi5rZXlDb2RlfHxiLmNoYXJDb2RlO3Eud2Via2l0JiZnIGluIGYmJihnPWZbZ10pO3RoaXMuY2hhckNvZGU9dGhpcy5rZXlDb2RlPWc7dGhpcy5idXR0b249dGhpcy53aGljaD1iLndoaWNofHxiLmNoYXJDb2RlfHxnO3RoaXMudGFyZ2V0PWQoYi50YXJnZXQpO3RoaXMuY3VycmVudFRhcmdldD1kKG0pO3RoaXMucmVsYXRlZFRhcmdldD1kKGIucmVsYXRlZFRhcmdldCk7aWYoIm1vdXNld2hlZWwiPT0KYi50eXBlfHwiRE9NTW91c2VTY3JvbGwiPT1iLnR5cGUpdGhpcy53aGVlbERlbHRhPWIuZGV0YWlsPy0xKmIuZGV0YWlsOk1hdGgucm91bmQoYi53aGVlbERlbHRhLzgwKXx8KDA+Yi53aGVlbERlbHRhPy0xOjEpO3RoaXMuX3RvdWNoJiZ0aGlzLl90b3VjaChiLG0sdGhpcy5fd3JhcHBlcil9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuX2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuc3RvcHBlZD10aGlzLl93cmFwcGVyLnN0b3BwZWQ9MX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fZXZlbnQ7Yi5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24/Yi5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTp0aGlzLnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuc3RvcHBlZD10aGlzLl93cmFwcGVyLnN0b3BwZWQ9Mn0scHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oYil7dmFyIGc9dGhpcy5fZXZlbnQ7Zy5wcmV2ZW50RGVmYXVsdCgpO2ImJihnLnJldHVyblZhbHVlPQpiKTt0aGlzLnByZXZlbnRlZD10aGlzLl93cmFwcGVyLnByZXZlbnRlZD0xfSxoYWx0OmZ1bmN0aW9uKGIpe2I/dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTp0aGlzLnN0b3BQcm9wYWdhdGlvbigpO3RoaXMucHJldmVudERlZmF1bHQoKX19KTtjLnJlc29sdmU9ZDthLkRPTTJFdmVudEZhY2FkZT1jO2EuRE9NRXZlbnRGYWNhZGU9YzsoZnVuY3Rpb24oKXthLkVudi5ldnQuZG9tX3dyYXBwZXJzPXt9O2EuRW52LmV2dC5kb21fbWFwPXt9O3ZhciBiPWEuRW52LmV2dCxnPWEuY29uZmlnLGU9Zy53aW4saz1ZVUkuRW52LmFkZCxtPVlVSS5FbnYucmVtb3ZlLHA9ZnVuY3Rpb24oKXtZVUkuRW52LndpbmRvd0xvYWRlZD0hMDthLkV2ZW50Ll9sb2FkKCk7bShlLCJsb2FkIixwKX0scz1mdW5jdGlvbigpe2EuRXZlbnQuX3VubG9hZCgpfSxsPWZ1bmN0aW9uKEEpe3RyeXtyZXR1cm4gQSYmInN0cmluZyIhPT10eXBlb2YgQSYmYS5MYW5nLmlzTnVtYmVyKEEubGVuZ3RoKSYmIUEudGFnTmFtZSYmCiFhLkRPTS5pc1dpbmRvdyhBKX1jYXRjaChIKXtyZXR1cm4hMX19LGg9YS5DdXN0b21FdmVudC5wcm90b3R5cGUuX2RlbGV0ZSx1PWZ1bmN0aW9uKEEpe3ZhciBIPWguYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaGFzU3VicygpfHxhLkV2ZW50Ll9jbGVhbih0aGlzKTtyZXR1cm4gSH0sdz1mdW5jdGlvbigpe3ZhciBBPSExLEg9MCxGPVtdLEI9Yi5kb21fd3JhcHBlcnMsST1iLmRvbV9tYXA7cmV0dXJue1BPTExfUkVUUllTOjFFMyxQT0xMX0lOVEVSVkFMOjQwLGxhc3RFcnJvcjpudWxsLF9pbnRlcnZhbDpudWxsLF9kcmk6bnVsbCxET01SZWFkeTohMSxzdGFydEludGVydmFsOmZ1bmN0aW9uKCl7dy5faW50ZXJ2YWx8fCh3Ll9pbnRlcnZhbD1zZXRJbnRlcnZhbCh3Ll9wb2xsLHcuUE9MTF9JTlRFUlZBTCkpfSxvbkF2YWlsYWJsZTpmdW5jdGlvbihNLEQsSixQLFYsWSl7dmFyIG5hPWEuQXJyYXkoTSksZmE7Zm9yKE09MDtNPG5hLmxlbmd0aDtNKz0xKUYucHVzaCh7aWQ6bmFbTV0sCmZuOkQsb2JqOkosb3ZlcnJpZGU6UCxjaGVja1JlYWR5OlYsY29tcGF0Oll9KTtIPXRoaXMuUE9MTF9SRVRSWVM7c2V0VGltZW91dCh3Ll9wb2xsLDApO3JldHVybiBmYT1uZXcgYS5FdmVudEhhbmRsZSh7X2RlbGV0ZTpmdW5jdGlvbigpe2lmKGZhLmhhbmRsZSlmYS5oYW5kbGUuZGV0YWNoKCk7ZWxzZXt2YXIgaWEsWjtmb3IoaWE9MDtpYTxuYS5sZW5ndGg7aWErKylmb3IoWj0wO1o8Ri5sZW5ndGg7WisrKW5hW2lhXT09PUZbWl0uaWQmJkYuc3BsaWNlKFosMSl9fX0pfSxvbkNvbnRlbnRSZWFkeTpmdW5jdGlvbihNLEQsSixQLFYpe3JldHVybiB3Lm9uQXZhaWxhYmxlKE0sRCxKLFAsITAsVil9LGF0dGFjaDpmdW5jdGlvbihNLEQsSixQKXtyZXR1cm4gdy5fYXR0YWNoKGEuQXJyYXkoYXJndW1lbnRzLDAsITApKX0sX2NyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oTSxELEosUCxWKXt2YXIgWSxuYT1hLnN0YW1wKE0pLGZhPSJldmVudDoiK25hK0Q7ITE9PT1WJiYoZmErPSJuYXRpdmUiKTsKSiYmKGZhKz0iY2FwdHVyZSIpO1k9QltmYV07WXx8KFk9YS5wdWJsaXNoKGZhLHtzaWxlbnQ6ITAsYnViYmxlczohMSxlbWl0RmFjYWRlOiExLGNvbnRleHRGbjpmdW5jdGlvbigpe2lmKFApcmV0dXJuIFkuZWw7WS5ub2RlUmVmPVkubm9kZVJlZnx8YS5vbmUoWS5lbCk7cmV0dXJuIFkubm9kZVJlZn19KSxZLm92ZXJyaWRlcz17fSxZLmVsPU0sWS5rZXk9ZmEsWS5kb21rZXk9bmEsWS50eXBlPUQsWS5mbj1mdW5jdGlvbihpYSl7WS5maXJlKHcuZ2V0RXZlbnQoaWEsTSxQfHwhMT09PVYpKX0sWS5jYXB0dXJlPUosTT09ZSYmImxvYWQiPT1EJiYoWS5maXJlT25jZT0hMCksWS5fZGVsZXRlPXUsQltmYV09WSxJW25hXT1JW25hXXx8e30sSVtuYV1bZmFdPVksayhNLEQsWS5mbixKKSk7cmV0dXJuIFl9LF9hdHRhY2g6ZnVuY3Rpb24oTSxEKXt2YXIgSixQLFYsWT0hMSxuYSxmYT1NWzBdLGlhPU1bMV0sWj1NWzJdfHxlLGVhPUQmJkQuZmFjYWRlLG9hPUQmJkQuY2FwdHVyZSxBYT1EJiZELm92ZXJyaWRlczsKIn55dWl8Mnxjb21wYXR+Ij09PU1bTS5sZW5ndGgtMV0mJihKPSEwKTtpZighaWF8fCFpYS5jYWxsKXJldHVybiExO2lmKGwoWikpcmV0dXJuIFA9W10sYS5lYWNoKFosZnVuY3Rpb24ocGEsRmEpe01bMl09cGE7UC5wdXNoKHcuX2F0dGFjaChNLnNsaWNlKCksRCkpfSksbmV3IGEuRXZlbnRIYW5kbGUoUCk7aWYoYS5MYW5nLmlzU3RyaW5nKFopKXtpZihKKVY9YS5ET00uYnlJZChaKTtlbHNlIHN3aXRjaChWPWEuU2VsZWN0b3IucXVlcnkoWiksVi5sZW5ndGgpe2Nhc2UgMDpWPW51bGw7YnJlYWs7Y2FzZSAxOlY9VlswXTticmVhaztkZWZhdWx0OnJldHVybiBNWzJdPVYsdy5fYXR0YWNoKE0sRCl9aWYoVilaPVY7ZWxzZSByZXR1cm4gbmE9dy5vbkF2YWlsYWJsZShaLGZ1bmN0aW9uKCl7bmEuaGFuZGxlPXcuX2F0dGFjaChNLEQpfSx3LCEwLCExLEopfWlmKCFaKXJldHVybiExO2EuTm9kZSYmYS5pbnN0YW5jZU9mKFosYS5Ob2RlKSYmKFo9YS5Ob2RlLmdldERPTU5vZGUoWikpO1Y9CncuX2NyZWF0ZVdyYXBwZXIoWixmYSxvYSxKLGVhKTtBYSYmYS5taXgoVi5vdmVycmlkZXMsQWEpO1o9PWUmJiJsb2FkIj09ZmEmJllVSS5FbnYud2luZG93TG9hZGVkJiYoWT0hMCk7SiYmTS5wb3AoKTtuYT1WLl9vbihpYSxNWzNdLDQ8TS5sZW5ndGg/TS5zbGljZSg0KTpudWxsKTtZJiZWLmZpcmUoKTtyZXR1cm4gbmF9LGRldGFjaDpmdW5jdGlvbihNLEQsSixQKXt2YXIgVj1hLkFycmF5KGFyZ3VtZW50cywwLCEwKSxZLG5hLGZhOyJ+eXVpfDJ8Y29tcGF0fiI9PT1WW1YubGVuZ3RoLTFdJiYoWT0hMCk7aWYoTSYmTS5kZXRhY2gpcmV0dXJuIE0uZGV0YWNoKCk7InN0cmluZyI9PXR5cGVvZiBKJiYoWT9KPWEuRE9NLmJ5SWQoSik6KEo9YS5TZWxlY3Rvci5xdWVyeShKKSxZPUoubGVuZ3RoLDE+WT9KPW51bGw6MT09WSYmKEo9SlswXSkpKTtpZighSilyZXR1cm4hMTtpZihKLmRldGFjaClyZXR1cm4gVi5zcGxpY2UoMiwxKSxKLmRldGFjaC5hcHBseShKLFYpO2lmKGwoSikpe25hPQohMDtmYT0wO2ZvcihZPUoubGVuZ3RoO2ZhPFk7KytmYSlWWzJdPUpbZmFdLG5hPWEuRXZlbnQuZGV0YWNoLmFwcGx5KGEuRXZlbnQsVikmJm5hO3JldHVybiBuYX1pZighTXx8IUR8fCFELmNhbGwpcmV0dXJuIHcucHVyZ2VFbGVtZW50KEosITEsTSk7Vj0iZXZlbnQ6IithLnN0YW1wKEopK007cmV0dXJuKFY9QltWXSk/Vi5kZXRhY2goRCk6ITF9LGdldEV2ZW50OmZ1bmN0aW9uKE0sRCxKKXt2YXIgUD1NfHxlLmV2ZW50O3JldHVybiBKP1A6bmV3IGEuRE9NRXZlbnRGYWNhZGUoUCxELEJbImV2ZW50OiIrYS5zdGFtcChEKStNLnR5cGVdKX0sZ2VuZXJhdGVJZDpmdW5jdGlvbihNKXtyZXR1cm4gYS5ET00uZ2VuZXJhdGVJRChNKX0sX2lzVmFsaWRDb2xsZWN0aW9uOmwsX2xvYWQ6ZnVuY3Rpb24oTSl7QXx8KEE9ITAsYS5maXJlJiZhLmZpcmUoImRvbXJlYWR5Iiksdy5fcG9sbCgpKX0sX3BvbGw6ZnVuY3Rpb24oKXtpZighdy5sb2NrZWQpaWYoYS5VQS5pZSYmIVlVSS5FbnYuRE9NUmVhZHkpdy5zdGFydEludGVydmFsKCk7CmVsc2V7dy5sb2NrZWQ9ITA7dmFyIE0sRCxKLFAsVixZLG5hPSFBO25hfHwobmE9MDxIKTtWPVtdO1k9ZnVuY3Rpb24oZmEsaWEpe3ZhciBaLGVhPWlhLm92ZXJyaWRlO3RyeXtpYS5jb21wYXQ/KFo9aWEub3ZlcnJpZGU/ITA9PT1lYT9pYS5vYmo6ZWE6ZmEsaWEuZm4uY2FsbChaLGlhLm9iaikpOihaPWlhLm9ianx8YS5vbmUoZmEpLGlhLmZuLmFwcGx5KFosYS5MYW5nLmlzQXJyYXkoZWEpP2VhOltdKSl9Y2F0Y2gob2Epe319O009MDtmb3IoRD1GLmxlbmd0aDtNPEQ7KytNKShKPUZbTV0pJiYhSi5jaGVja1JlYWR5JiYoKFA9Si5jb21wYXQ/YS5ET00uYnlJZChKLmlkKTphLlNlbGVjdG9yLnF1ZXJ5KEouaWQsbnVsbCwhMCkpPyhZKFAsSiksRltNXT1udWxsKTpWLnB1c2goSikpO009MDtmb3IoRD1GLmxlbmd0aDtNPEQ7KytNKWlmKChKPUZbTV0pJiZKLmNoZWNrUmVhZHkpaWYoUD1KLmNvbXBhdD9hLkRPTS5ieUlkKEouaWQpOmEuU2VsZWN0b3IucXVlcnkoSi5pZCxudWxsLCEwKSl7aWYoQXx8ClAuZ2V0JiZQLmdldCgibmV4dFNpYmxpbmciKXx8UC5uZXh0U2libGluZylZKFAsSiksRltNXT1udWxsfWVsc2UgVi5wdXNoKEopO0g9MD09PVYubGVuZ3RoPzA6SC0xO25hP3cuc3RhcnRJbnRlcnZhbCgpOihjbGVhckludGVydmFsKHcuX2ludGVydmFsKSx3Ll9pbnRlcnZhbD1udWxsKTt3LmxvY2tlZD0hMX19LHB1cmdlRWxlbWVudDpmdW5jdGlvbihNLEQsSil7dmFyIFA9YS5MYW5nLmlzU3RyaW5nKE0pP2EuU2VsZWN0b3IucXVlcnkoTSxudWxsLCEwKTpNO009dy5nZXRMaXN0ZW5lcnMoUCxKKTt2YXIgVixZO2lmKEQmJlApZm9yKE09TXx8W10sVj1hLlNlbGVjdG9yLnF1ZXJ5KCIqIixQKSxQPVYubGVuZ3RoLEQ9MDtEPFA7KytEKShZPXcuZ2V0TGlzdGVuZXJzKFZbRF0sSikpJiYoTT1NLmNvbmNhdChZKSk7aWYoTSlmb3IoRD0wLFA9TS5sZW5ndGg7RDxQOysrRClNW0RdLmRldGFjaEFsbCgpfSxfY2xlYW46ZnVuY3Rpb24oTSl7dmFyIEQ9TS5rZXksSj1NLmRvbWtleTttKE0uZWwsCk0udHlwZSxNLmZuLE0uY2FwdHVyZSk7ZGVsZXRlIEJbRF07ZGVsZXRlIGEuX3l1aWV2dC5ldmVudHNbRF07SVtKXSYmKGRlbGV0ZSBJW0pdW0RdLGEuT2JqZWN0LnNpemUoSVtKXSl8fGRlbGV0ZSBJW0pdKX0sZ2V0TGlzdGVuZXJzOmZ1bmN0aW9uKE0sRCl7dmFyIEo9YS5zdGFtcChNLCEwKSxQPUlbSl0sVj1bXSxKPUQ/ImV2ZW50OiIrSitEOm51bGwsWT1iLnBsdWdpbnM7aWYoIVApcmV0dXJuIG51bGw7Sj8oWVtEXSYmWVtEXS5ldmVudERlZiYmKEorPSJfc3ludGgiKSxQW0pdJiZWLnB1c2goUFtKXSksSis9Im5hdGl2ZSIsUFtKXSYmVi5wdXNoKFBbSl0pKTphLmVhY2goUCxmdW5jdGlvbihuYSxmYSl7Vi5wdXNoKG5hKX0pO3JldHVybiBWLmxlbmd0aD9WOm51bGx9LF91bmxvYWQ6ZnVuY3Rpb24oTSl7YS5lYWNoKEIsZnVuY3Rpb24oRCxKKXsidW5sb2FkIj09RC50eXBlJiZELmZpcmUoTSk7RC5kZXRhY2hBbGwoKX0pO20oZSwidW5sb2FkIixzKX0sbmF0aXZlQWRkOmssbmF0aXZlUmVtb3ZlOm19fSgpOwphLkV2ZW50PXc7Zy5pbmplY3RlZHx8WVVJLkVudi53aW5kb3dMb2FkZWQ/cCgpOmsoZSwibG9hZCIscCk7aWYoYS5VQS5pZSYmKGEub24oImRvbXJlYWR5Iix3Ll9wb2xsKSw3PmEuVUEuaWUpKXRyeXtrKGUsInVubG9hZCIscyl9Y2F0Y2goeil7fXcuQ3VzdG9tPWEuQ3VzdG9tRXZlbnQ7dy5TdWJzY3JpYmVyPWEuU3Vic2NyaWJlcjt3LlRhcmdldD1hLkV2ZW50VGFyZ2V0O3cuSGFuZGxlPWEuRXZlbnRIYW5kbGU7dy5GYWNhZGU9YS5FdmVudEZhY2FkZTt3Ll9wb2xsKCl9KSgpO2EuRW52LmV2dC5wbHVnaW5zLmF2YWlsYWJsZT17b246ZnVuY3Rpb24oYixnLGUsayl7dmFyIG09NDxhcmd1bWVudHMubGVuZ3RoP2EuQXJyYXkoYXJndW1lbnRzLDQsITApOm51bGw7cmV0dXJuIGEuRXZlbnQub25BdmFpbGFibGUuY2FsbChhLkV2ZW50LGUsZyxrLG0pfX07YS5FbnYuZXZ0LnBsdWdpbnMuY29udGVudHJlYWR5PXtvbjpmdW5jdGlvbihiLGcsZSxrKXt2YXIgbT00PGFyZ3VtZW50cy5sZW5ndGg/CmEuQXJyYXkoYXJndW1lbnRzLDQsITApOm51bGw7cmV0dXJuIGEuRXZlbnQub25Db250ZW50UmVhZHkuY2FsbChhLkV2ZW50LGUsZyxrLG0pfX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImV2ZW50LWN1c3RvbS1iYXNlIl19KTsKWVVJLmFkZCgiZXZlbnQtY3VzdG9tLWJhc2UiLGZ1bmN0aW9uKGEsRSl7YS5FbnYuZXZ0PXtoYW5kbGVzOnt9LHBsdWdpbnM6e319O3ZhciBxPXtvYmpzOm51bGwsYmVmb3JlOmZ1bmN0aW9uKHMsbCxoLHUpe3ZhciB3PXM7dSYmKHc9W3MsdV0uY29uY2F0KGEuQXJyYXkoYXJndW1lbnRzLDQsITApKSx3PWEucmJpbmQuYXBwbHkoYSx3KSk7cmV0dXJuIHRoaXMuX2luamVjdCgwLHcsbCxoKX0sYWZ0ZXI6ZnVuY3Rpb24ocyxsLGgsdSl7dmFyIHc9czt1JiYodz1bcyx1XS5jb25jYXQoYS5BcnJheShhcmd1bWVudHMsNCwhMCkpLHc9YS5yYmluZC5hcHBseShhLHcpKTtyZXR1cm4gdGhpcy5faW5qZWN0KDEsdyxsLGgpfSxfaW5qZWN0OmZ1bmN0aW9uKHMsbCxoLHUpe3ZhciB3PWEuc3RhbXAoaCksejtoLl95dWlhb3B8fChoLl95dWlhb3A9e30pO3o9aC5feXVpYW9wO3pbdV18fCh6W3VdPW5ldyBhLkRvLk1ldGhvZChoLHUpLGhbdV09ZnVuY3Rpb24oKXtyZXR1cm4gelt1XS5leGVjLmFwcGx5KHpbdV0sCmFyZ3VtZW50cyl9KTtoPXcrYS5zdGFtcChsKSt1O3pbdV0ucmVnaXN0ZXIoaCxsLHMpO3JldHVybiBuZXcgYS5FdmVudEhhbmRsZSh6W3VdLGgpfSxkZXRhY2g6ZnVuY3Rpb24ocyl7cy5kZXRhY2gmJnMuZGV0YWNoKCl9fTthLkRvPXE7cS5NZXRob2Q9ZnVuY3Rpb24ocyxsKXt0aGlzLm9iaj1zO3RoaXMubWV0aG9kTmFtZT1sO3RoaXMubWV0aG9kPXNbbF07dGhpcy5iZWZvcmU9e307dGhpcy5hZnRlcj17fX07cS5NZXRob2QucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHMsbCxoKXtoP3RoaXMuYWZ0ZXJbc109bDp0aGlzLmJlZm9yZVtzXT1sfTtxLk1ldGhvZC5wcm90b3R5cGUuX2RlbGV0ZT1mdW5jdGlvbihzKXtkZWxldGUgdGhpcy5iZWZvcmVbc107ZGVsZXRlIHRoaXMuYWZ0ZXJbc119O3EuTWV0aG9kLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKCl7dmFyIHM9YS5BcnJheShhcmd1bWVudHMsMCwhMCksbCxoLHU7dT10aGlzLmJlZm9yZTt2YXIgdz10aGlzLmFmdGVyLHo9ITE7CmZvcihsIGluIHUpaWYodS5oYXNPd25Qcm9wZXJ0eShsKSYmKGg9dVtsXS5hcHBseSh0aGlzLm9iaixzKSkpc3dpdGNoKGguY29uc3RydWN0b3Ipe2Nhc2UgcS5IYWx0OnJldHVybiBoLnJldFZhbDtjYXNlIHEuQWx0ZXJBcmdzOnM9aC5uZXdBcmdzO2JyZWFrO2Nhc2UgcS5QcmV2ZW50Ono9ITB9enx8KGg9dGhpcy5tZXRob2QuYXBwbHkodGhpcy5vYmoscykpO3Eub3JpZ2luYWxSZXRWYWw9aDtxLmN1cnJlbnRSZXRWYWw9aDtmb3IobCBpbiB3KWlmKHcuaGFzT3duUHJvcGVydHkobCkpe2lmKCh1PXdbbF0uYXBwbHkodGhpcy5vYmoscykpJiZ1LmNvbnN0cnVjdG9yPT09cS5IYWx0KXJldHVybiB1LnJldFZhbDt1JiZ1LmNvbnN0cnVjdG9yPT09cS5BbHRlclJldHVybiYmKGg9dS5uZXdSZXRWYWwscS5jdXJyZW50UmV0VmFsPWgpfXJldHVybiBofTtxLkFsdGVyQXJncz1mdW5jdGlvbihzLGwpe3RoaXMubXNnPXM7dGhpcy5uZXdBcmdzPWx9O3EuQWx0ZXJSZXR1cm49ZnVuY3Rpb24ocywKbCl7dGhpcy5tc2c9czt0aGlzLm5ld1JldFZhbD1sfTtxLkhhbHQ9ZnVuY3Rpb24ocyxsKXt0aGlzLm1zZz1zO3RoaXMucmV0VmFsPWx9O3EuUHJldmVudD1mdW5jdGlvbihzKXt0aGlzLm1zZz1zfTtxLkVycm9yPXEuSGFsdDt2YXIgdD1hLkFycmF5LGY9dC5oYXNoKCJicm9hZGNhc3QgbW9uaXRvcmVkIGJ1YmJsZXMgY29udGV4dCBjb250ZXh0Rm4gY3VycmVudFRhcmdldCBkZWZhdWx0Rm4gZGVmYXVsdFRhcmdldE9ubHkgZGV0YWlscyBlbWl0RmFjYWRlIGZpcmVPbmNlIGFzeW5jIGhvc3QgcHJldmVudGFibGUgcHJldmVudGVkRm4gcXVldWFibGUgc2lsZW50IHN0b3BwZWRGbiB0YXJnZXQgdHlwZSIuc3BsaXQoIiAiKSksZD1BcnJheS5wcm90b3R5cGUuc2xpY2UsYz1mdW5jdGlvbihzLGwsaCl7Zm9yKHZhciB1IGluIGwpIWZbdV18fCFoJiZ1IGluIHN8fChzW3VdPWxbdV0pO3JldHVybiBzfTthLkN1c3RvbUV2ZW50PWZ1bmN0aW9uKHMsbCl7dGhpcy5fa2RzPWEuQ3VzdG9tRXZlbnQua2VlcERlcHJlY2F0ZWRTdWJzOwp0aGlzLmlkPWEuZ3VpZCgpO3RoaXMudHlwZT1zO3RoaXMuc2lsZW50PXRoaXMubG9nU3lzdGVtPSJ5dWk6bG9nIj09PXM7dGhpcy5fa2RzJiYodGhpcy5zdWJzY3JpYmVycz17fSx0aGlzLmFmdGVycz17fSk7bCYmYyh0aGlzLGwsITApfTthLkN1c3RvbUV2ZW50LmtlZXBEZXByZWNhdGVkU3Vicz0hMTthLkN1c3RvbUV2ZW50Lm1peENvbmZpZ3M9YzthLkN1c3RvbUV2ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6YS5DdXN0b21FdmVudCxzaWduYXR1cmU6OSxjb250ZXh0OmEscHJldmVudGFibGU6ITAsYnViYmxlczohMCxoYXNTdWJzOmZ1bmN0aW9uKHMpe3ZhciBsPTAsaD0wLHU9dGhpcy5fc3Vic2NyaWJlcnMsdz10aGlzLl9hZnRlcnMsej10aGlzLnNpYmxpbmc7dSYmKGw9dS5sZW5ndGgpO3cmJihoPXcubGVuZ3RoKTt6JiYodT16Ll9zdWJzY3JpYmVycyx3PXouX2FmdGVycyx1JiYobCs9dS5sZW5ndGgpLHcmJihoKz13Lmxlbmd0aCkpO3JldHVybiBzPyJhZnRlciI9PT1zP2g6Cmw6bCtofSxtb25pdG9yOmZ1bmN0aW9uKHMpe3RoaXMubW9uaXRvcmVkPSEwO3ZhciBsPXRoaXMuaWQrInwiK3RoaXMudHlwZSsiXyIrcyxoPWQuY2FsbChhcmd1bWVudHMsMCk7aFswXT1sO3JldHVybiB0aGlzLmhvc3Qub24uYXBwbHkodGhpcy5ob3N0LGgpfSxnZXRTdWJzOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5zaWJsaW5nLGw9dGhpcy5fc3Vic2NyaWJlcnMsaD10aGlzLl9hZnRlcnMsdSx3O3MmJih1PXMuX3N1YnNjcmliZXJzLHc9cy5fYWZ0ZXJzKTtsPXU/bD9sLmNvbmNhdCh1KTp1LmNvbmNhdCgpOmw/bC5jb25jYXQoKTpbXTtoPXc/aD9oLmNvbmNhdCh3KTp3LmNvbmNhdCgpOmg/aC5jb25jYXQoKTpbXTtyZXR1cm5bbCxoXX0sYXBwbHlDb25maWc6ZnVuY3Rpb24ocyxsKXtjKHRoaXMscyxsKX0sX29uOmZ1bmN0aW9uKHMsbCxoLHUpe3M9bmV3IGEuU3Vic2NyaWJlcihzLGwsaCx1KTt0aGlzLmZpcmVPbmNlJiZ0aGlzLmZpcmVkJiYobD10aGlzLmZpcmVkV2l0aCx0aGlzLmVtaXRGYWNhZGUmJgp0aGlzLl9hZGRGYWNhZGVUb0FyZ3MmJnRoaXMuX2FkZEZhY2FkZVRvQXJncyhsKSx0aGlzLmFzeW5jP3NldFRpbWVvdXQoYS5iaW5kKHRoaXMuX25vdGlmeSx0aGlzLHMsbCksMCk6dGhpcy5fbm90aWZ5KHMsbCkpOyJhZnRlciI9PT11Pyh0aGlzLl9hZnRlcnN8fCh0aGlzLl9hZnRlcnM9W10pLHRoaXMuX2FmdGVycy5wdXNoKHMpKToodGhpcy5fc3Vic2NyaWJlcnN8fCh0aGlzLl9zdWJzY3JpYmVycz1bXSksdGhpcy5fc3Vic2NyaWJlcnMucHVzaChzKSk7dGhpcy5fa2RzJiYoImFmdGVyIj09PXU/dGhpcy5hZnRlcnNbcy5pZF09czp0aGlzLnN1YnNjcmliZXJzW3MuaWRdPXMpO3JldHVybiBuZXcgYS5FdmVudEhhbmRsZSh0aGlzLHMpfSxzdWJzY3JpYmU6ZnVuY3Rpb24ocyxsKXt2YXIgaD0yPGFyZ3VtZW50cy5sZW5ndGg/ZC5jYWxsKGFyZ3VtZW50cywyKTpudWxsO3JldHVybiB0aGlzLl9vbihzLGwsaCwhMCl9LG9uOmZ1bmN0aW9uKHMsbCl7dmFyIGg9Mjxhcmd1bWVudHMubGVuZ3RoPwpkLmNhbGwoYXJndW1lbnRzLDIpOm51bGw7dGhpcy5tb25pdG9yZWQmJnRoaXMuaG9zdCYmdGhpcy5ob3N0Ll9tb25pdG9yKCJhdHRhY2giLHRoaXMse2FyZ3M6YXJndW1lbnRzfSk7cmV0dXJuIHRoaXMuX29uKHMsbCxoLCEwKX0sYWZ0ZXI6ZnVuY3Rpb24ocyxsKXt2YXIgaD0yPGFyZ3VtZW50cy5sZW5ndGg/ZC5jYWxsKGFyZ3VtZW50cywyKTpudWxsO3JldHVybiB0aGlzLl9vbihzLGwsaCwiYWZ0ZXIiKX0sZGV0YWNoOmZ1bmN0aW9uKHMsbCl7aWYocyYmcy5kZXRhY2gpcmV0dXJuIHMuZGV0YWNoKCk7dmFyIGgsdSx3PTAsej10aGlzLl9zdWJzY3JpYmVycyxBPXRoaXMuX2FmdGVycztpZih6KWZvcihoPXoubGVuZ3RoOzA8PWg7aC0tKSEodT16W2hdKXx8cyYmcyE9PXUuZm58fCh0aGlzLl9kZWxldGUodSx6LGgpLHcrKyk7aWYoQSlmb3IoaD1BLmxlbmd0aDswPD1oO2gtLSkhKHU9QVtoXSl8fHMmJnMhPT11LmZufHwodGhpcy5fZGVsZXRlKHUsQSxoKSx3KyspO3JldHVybiB3fSwKdW5zdWJzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZXRhY2guYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfbm90aWZ5OmZ1bmN0aW9uKHMsbCxoKXtyZXR1cm4hMT09PXMubm90aWZ5KGwsdGhpcyl8fDE8dGhpcy5zdG9wcGVkPyExOiEwfSxsb2c6ZnVuY3Rpb24ocyxsKXt9LGZpcmU6ZnVuY3Rpb24oKXt2YXIgcz1bXTtzLnB1c2guYXBwbHkocyxhcmd1bWVudHMpO3JldHVybiB0aGlzLl9maXJlKHMpfSxfZmlyZTpmdW5jdGlvbihzKXtpZih0aGlzLmZpcmVPbmNlJiZ0aGlzLmZpcmVkKXJldHVybiEwO3RoaXMuZmlyZWQ9ITA7dGhpcy5maXJlT25jZSYmKHRoaXMuZmlyZWRXaXRoPXMpO3JldHVybiB0aGlzLmVtaXRGYWNhZGU/dGhpcy5maXJlQ29tcGxleChzKTp0aGlzLmZpcmVTaW1wbGUocyl9LGZpcmVTaW1wbGU6ZnVuY3Rpb24ocyl7dGhpcy5wcmV2ZW50ZWQ9dGhpcy5zdG9wcGVkPTA7aWYodGhpcy5oYXNTdWJzKCkpe3ZhciBsPXRoaXMuZ2V0U3VicygpO3RoaXMuX3Byb2NTdWJzKGxbMF0sCnMpO3RoaXMuX3Byb2NTdWJzKGxbMV0scyl9dGhpcy5icm9hZGNhc3QmJnRoaXMuX2Jyb2FkY2FzdChzKTtyZXR1cm4gdGhpcy5zdG9wcGVkPyExOiEwfSxmaXJlQ29tcGxleDpmdW5jdGlvbihzKXtzWzBdPXNbMF18fHt9O3JldHVybiB0aGlzLmZpcmVTaW1wbGUocyl9LF9wcm9jU3ViczpmdW5jdGlvbihzLGwsaCl7dmFyIHUsdyx6O3c9MDtmb3Ioej1zLmxlbmd0aDt3PHo7dysrKWlmKCh1PXNbd10pJiZ1LmZuJiYoITE9PT10aGlzLl9ub3RpZnkodSxsLGgpJiYodGhpcy5zdG9wcGVkPTIpLDI9PT10aGlzLnN0b3BwZWQpKXJldHVybiExO3JldHVybiEwfSxfYnJvYWRjYXN0OmZ1bmN0aW9uKHMpeyF0aGlzLnN0b3BwZWQmJnRoaXMuYnJvYWRjYXN0JiYocz1zLmNvbmNhdCgpLHMudW5zaGlmdCh0aGlzLnR5cGUpLHRoaXMuaG9zdCE9PWEmJmEuZmlyZS5hcHBseShhLHMpLDI9PT10aGlzLmJyb2FkY2FzdCYmYS5HbG9iYWwuZmlyZS5hcHBseShhLkdsb2JhbCxzKSl9LHVuc3Vic2NyaWJlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGV0YWNoQWxsLmFwcGx5KHRoaXMsCmFyZ3VtZW50cyl9LGRldGFjaEFsbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRldGFjaCgpfSxfZGVsZXRlOmZ1bmN0aW9uKHMsbCxoKXt2YXIgdT1zLl93aGVuO2x8fChsPSJhZnRlciI9PT11P3RoaXMuX2FmdGVyczp0aGlzLl9zdWJzY3JpYmVycyk7bCYmKGg9dC5pbmRleE9mKGwscywwKSxzJiZsW2hdPT09cyYmbC5zcGxpY2UoaCwxKSk7dGhpcy5fa2RzJiYoImFmdGVyIj09PXU/ZGVsZXRlIHRoaXMuYWZ0ZXJzW3MuaWRdOmRlbGV0ZSB0aGlzLnN1YnNjcmliZXJzW3MuaWRdKTt0aGlzLm1vbml0b3JlZCYmdGhpcy5ob3N0JiZ0aGlzLmhvc3QuX21vbml0b3IoImRldGFjaCIsdGhpcyx7Y2U6dGhpcyxzdWI6c30pO3MmJihzLmRlbGV0ZWQ9ITApfX07YS5TdWJzY3JpYmVyPWZ1bmN0aW9uKHMsbCxoLHUpe3RoaXMuZm49czt0aGlzLmNvbnRleHQ9bDt0aGlzLmlkPWEuZ3VpZCgpO3RoaXMuYXJncz1oO3RoaXMuX3doZW49dX07YS5TdWJzY3JpYmVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YS5TdWJzY3JpYmVyLApfbm90aWZ5OmZ1bmN0aW9uKHMsbCxoKXtpZih0aGlzLmRlbGV0ZWQmJiF0aGlzLnBvc3Rwb25lZClpZih0aGlzLnBvc3Rwb25lZClkZWxldGUgdGhpcy5mbixkZWxldGUgdGhpcy5jb250ZXh0O2Vsc2UgcmV0dXJuIGRlbGV0ZSB0aGlzLnBvc3Rwb25lZCxudWxsO3ZhciB1PXRoaXMuYXJncztzd2l0Y2goaC5zaWduYXR1cmUpe2Nhc2UgMDpzPXRoaXMuZm4uY2FsbChzLGgudHlwZSxsLHMpO2JyZWFrO2Nhc2UgMTpzPXRoaXMuZm4uY2FsbChzLGxbMF18fG51bGwscyk7YnJlYWs7ZGVmYXVsdDp1fHxsPyhsPWx8fFtdLHU9dT9sLmNvbmNhdCh1KTpsLHM9dGhpcy5mbi5hcHBseShzLHUpKTpzPXRoaXMuZm4uY2FsbChzKX10aGlzLm9uY2UmJmguX2RlbGV0ZSh0aGlzKTtyZXR1cm4gc30sbm90aWZ5OmZ1bmN0aW9uKHMsbCl7dmFyIGg9dGhpcy5jb250ZXh0LHU9ITA7aHx8KGg9bC5jb250ZXh0Rm4/bC5jb250ZXh0Rm4oKTpsLmNvbnRleHQpO2lmKGEuY29uZmlnJiZhLmNvbmZpZy50aHJvd0ZhaWwpdT0KdGhpcy5fbm90aWZ5KGgscyxsKTtlbHNlIHRyeXt1PXRoaXMuX25vdGlmeShoLHMsbCl9Y2F0Y2godyl7YS5lcnJvcih0aGlzKyIgZmFpbGVkOiAiK3cubWVzc2FnZSx3KX1yZXR1cm4gdX0sY29udGFpbnM6ZnVuY3Rpb24ocyxsKXtyZXR1cm4gbD90aGlzLmZuPT09cyYmdGhpcy5jb250ZXh0PT09bDp0aGlzLmZuPT09c30sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfX07YS5FdmVudEhhbmRsZT1mdW5jdGlvbihzLGwpe3RoaXMuZXZ0PXM7dGhpcy5zdWI9bH07YS5FdmVudEhhbmRsZS5wcm90b3R5cGU9e2JhdGNoOmZ1bmN0aW9uKHMsbCl7cy5jYWxsKGx8fHRoaXMsdGhpcyk7YS5MYW5nLmlzQXJyYXkodGhpcy5ldnQpJiZhLkFycmF5LmVhY2godGhpcy5ldnQsZnVuY3Rpb24oaCl7aC5iYXRjaC5jYWxsKGx8fGgscyl9KX0sZGV0YWNoOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5ldnQsbD0wLGg7aWYocylpZihhLkxhbmcuaXNBcnJheShzKSlmb3IoaD0wO2g8cy5sZW5ndGg7aCsrKWwrPQpzW2hdLmRldGFjaCgpO2Vsc2Ugcy5fZGVsZXRlKHRoaXMuc3ViKSxsPTE7cmV0dXJuIGx9LG1vbml0b3I6ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZXZ0Lm1vbml0b3IuYXBwbHkodGhpcy5ldnQsYXJndW1lbnRzKX19O3ZhciBiPWEuTGFuZyxnPS8oLio/KSg6KSguKj8pLyxlPWEuY2FjaGVkKGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlcGxhY2UoZywiKiQyJDMiKX0pLGs9ZnVuY3Rpb24ocyxsKXtyZXR1cm4hbHx8InN0cmluZyIhPT10eXBlb2Ygc3x8LTE8cy5pbmRleE9mKCI6Iik/czpsKyI6IitzfSxtPWEuY2FjaGVkKGZ1bmN0aW9uKHMsbCl7dmFyIGg9cyx1LHcsejtpZighYi5pc1N0cmluZyhoKSlyZXR1cm4gaDt6PWguaW5kZXhPZigifkFGVEVSfiIpOy0xPHomJih3PSEwLGg9aC5zdWJzdHIoNykpO3o9aC5pbmRleE9mKCJ8Iik7LTE8eiYmKHU9aC5zdWJzdHIoMCx6KSxoPWguc3Vic3RyKHorMSksIioiPT09aCYmKGg9bnVsbCkpO3JldHVyblt1LGw/ayhoLGwpOmgsdyxoXX0pLApwPWZ1bmN0aW9uKHMpe3ZhciBsPXRoaXMuX3l1aWV2dCxoO2x8fChsPXRoaXMuX3l1aWV2dD17ZXZlbnRzOnt9LHRhcmdldHM6bnVsbCxjb25maWc6e2hvc3Q6dGhpcyxjb250ZXh0OnRoaXN9LGNoYWluOmEuY29uZmlnLmNoYWlufSk7aD1sLmNvbmZpZztzJiYoYyhoLHMsITApLHZvaWQgMCE9PXMuY2hhaW4mJihsLmNoYWluPXMuY2hhaW4pLHMucHJlZml4JiYoaC5wcmVmaXg9cy5wcmVmaXgpKX07cC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnAsb25jZTpmdW5jdGlvbigpe3ZhciBzPXRoaXMub24uYXBwbHkodGhpcyxhcmd1bWVudHMpO3MuYmF0Y2goZnVuY3Rpb24obCl7bC5zdWImJihsLnN1Yi5vbmNlPSEwKX0pO3JldHVybiBzfSxvbmNlQWZ0ZXI6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmFmdGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtzLmJhdGNoKGZ1bmN0aW9uKGwpe2wuc3ViJiYobC5zdWIub25jZT0hMCl9KTtyZXR1cm4gc30scGFyc2VUeXBlOmZ1bmN0aW9uKHMsbCl7cmV0dXJuIG0ocywKbHx8dGhpcy5feXVpZXZ0LmNvbmZpZy5wcmVmaXgpfSxvbjpmdW5jdGlvbihzLGwsaCl7dmFyIHU9dGhpcy5feXVpZXZ0LHc9bShzLHUuY29uZmlnLnByZWZpeCkseixBLEgsRixCLEksTT1hLkVudi5ldnQuaGFuZGxlcyxELEosUD1hLk5vZGUsVixZLG5hO3RoaXMuX21vbml0b3IoImF0dGFjaCIsd1sxXSx7YXJnczphcmd1bWVudHMsY2F0ZWdvcnk6d1swXSxhZnRlcjp3WzJdfSk7aWYoYi5pc09iamVjdChzKSl7aWYoYi5pc0Z1bmN0aW9uKHMpKXJldHVybiBhLkRvLmJlZm9yZS5hcHBseShhLkRvLGFyZ3VtZW50cyk7ej1sO0E9aDtIPWQuY2FsbChhcmd1bWVudHMsMCk7Rj1bXTtiLmlzQXJyYXkocykmJihuYT0hMCk7RD1zLl9hZnRlcjtkZWxldGUgcy5fYWZ0ZXI7YS5lYWNoKHMsZnVuY3Rpb24oZmEsaWEpe2IuaXNPYmplY3QoZmEpJiYoej1mYS5mbnx8KGIuaXNGdW5jdGlvbihmYSk/ZmE6eiksQT1mYS5jb250ZXh0fHxBKTtIWzBdPShEPyJ+QUZURVJ+IjoiIikrKG5hP2ZhOmlhKTsKSFsxXT16O0hbMl09QTtGLnB1c2godGhpcy5vbi5hcHBseSh0aGlzLEgpKX0sdGhpcyk7cmV0dXJuIHUuY2hhaW4/dGhpczpuZXcgYS5FdmVudEhhbmRsZShGKX1JPXdbMF07RD13WzJdO0o9d1szXTtpZihQJiZhLmluc3RhbmNlT2YodGhpcyxQKSYmSiBpbiBQLkRPTV9FVkVOVFMpcmV0dXJuIEg9ZC5jYWxsKGFyZ3VtZW50cywwKSxILnNwbGljZSgyLDAsUC5nZXRET01Ob2RlKHRoaXMpKSxhLm9uLmFwcGx5KGEsSCk7cz13WzFdO2lmKGEuaW5zdGFuY2VPZih0aGlzLFlVSSkpaWYodz1hLkVudi5ldnQucGx1Z2luc1tzXSxIPWQuY2FsbChhcmd1bWVudHMsMCksSFswXT1KLFAmJihWPUhbMl0sYS5pbnN0YW5jZU9mKFYsYS5Ob2RlTGlzdCk/Vj1hLk5vZGVMaXN0LmdldERPTU5vZGVzKFYpOmEuaW5zdGFuY2VPZihWLFApJiYoVj1QLmdldERPTU5vZGUoVikpLChZPUogaW4gUC5ET01fRVZFTlRTKSYmKEhbMl09VikpLHcpQj13Lm9uLmFwcGx5KGEsSCk7ZWxzZSBpZighc3x8WSlCPWEuRXZlbnQuX2F0dGFjaChIKTsKQnx8KEI9dS5ldmVudHNbc118fHRoaXMucHVibGlzaChzKSxCPUIuX29uKGwsaCwzPGFyZ3VtZW50cy5sZW5ndGg/ZC5jYWxsKGFyZ3VtZW50cywzKTpudWxsLEQ/ImFmdGVyIjohMCksLTEhPT1zLmluZGV4T2YoIio6IikmJih0aGlzLl9oYXNTaWJsaW5ncz0hMCkpO0kmJihNW0ldPU1bSV18fHt9LE1bSV1bc109TVtJXVtzXXx8W10sTVtJXVtzXS5wdXNoKEIpKTtyZXR1cm4gdS5jaGFpbj90aGlzOkJ9LHN1YnNjcmliZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZGV0YWNoOmZ1bmN0aW9uKHMsbCxoKXt2YXIgdT10aGlzLl95dWlldnQuZXZlbnRzLHcsej1hLk5vZGUsQT16JiZhLmluc3RhbmNlT2YodGhpcyx6KTtpZighcyYmdGhpcyE9PWEpe2Zvcih3IGluIHUpdS5oYXNPd25Qcm9wZXJ0eSh3KSYmdVt3XS5kZXRhY2gobCxoKTtBJiZhLkV2ZW50LnB1cmdlRWxlbWVudCh6LmdldERPTU5vZGUodGhpcykpO3JldHVybiB0aGlzfXZhciBIPQptKHMsdGhpcy5feXVpZXZ0LmNvbmZpZy5wcmVmaXgpLEY9Yi5pc0FycmF5KEgpP0hbMF06bnVsbCxCPUg/SFszXTpudWxsLEk9YS5FbnYuZXZ0LmhhbmRsZXMsTT1mdW5jdGlvbihELEosUCl7RD1EW0pdO3ZhciBWO2lmKEQpZm9yKFY9RC5sZW5ndGgtMTswPD1WOy0tVilKPURbVl0uZXZ0LEouaG9zdCE9PVAmJkouZWwhPT1QfHxEW1ZdLmRldGFjaCgpfTtpZihGKXtpZihGPUlbRl0scz1IWzFdLEE9QT9hLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKTp0aGlzLEYpe2lmKHMpTShGLHMsQSk7ZWxzZSBmb3IodyBpbiBGKUYuaGFzT3duUHJvcGVydHkodykmJk0oRix3LEEpO3JldHVybiB0aGlzfX1lbHNle2lmKGIuaXNPYmplY3QocykmJnMuZGV0YWNoKXJldHVybiBzLmRldGFjaCgpLHRoaXM7aWYoQSYmKCFCfHxCIGluIHouRE9NX0VWRU5UUykpcmV0dXJuIEI9ZC5jYWxsKGFyZ3VtZW50cywwKSxCWzJdPXouZ2V0RE9NTm9kZSh0aGlzKSxhLmRldGFjaC5hcHBseShhLEIpLHRoaXN9dz1hLkVudi5ldnQucGx1Z2luc1tCXTsKaWYoYS5pbnN0YW5jZU9mKHRoaXMsWVVJKSl7Qj1kLmNhbGwoYXJndW1lbnRzLDApO2lmKHcmJncuZGV0YWNoKXJldHVybiB3LmRldGFjaC5hcHBseShhLEIpLHRoaXM7aWYoIXN8fCF3JiZ6JiZzIGluIHouRE9NX0VWRU5UUylyZXR1cm4gQlswXT1zLGEuRXZlbnQuZGV0YWNoLmFwcGx5KGEuRXZlbnQsQiksdGhpc30odT11W0hbMV1dKSYmdS5kZXRhY2gobCxoKTtyZXR1cm4gdGhpc30sdW5zdWJzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZXRhY2guYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkZXRhY2hBbGw6ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZGV0YWNoKHMpfSx1bnN1YnNjcmliZUFsbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRldGFjaEFsbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHB1Ymxpc2g6ZnVuY3Rpb24ocyxsKXt2YXIgaCx1PXRoaXMuX3l1aWV2dC5jb25maWcsdz11LnByZWZpeDsic3RyaW5nIj09PXR5cGVvZiBzPyh3JiYocz1rKHMsdykpLGg9dGhpcy5fcHVibGlzaChzLAp1LGwpKTooaD17fSxhLmVhY2gocyxmdW5jdGlvbih6LEEpe3cmJihBPWsoQSx3KSk7aFtBXT10aGlzLl9wdWJsaXNoKEEsdSx6fHxsKX0sdGhpcykpO3JldHVybiBofSxfZ2V0RnVsbFR5cGU6ZnVuY3Rpb24ocyl7dmFyIGw9dGhpcy5feXVpZXZ0LmNvbmZpZy5wcmVmaXg7cmV0dXJuIGw/bCsiOiIrczpzfSxfcHVibGlzaDpmdW5jdGlvbihzLGwsaCl7dmFyIHU7dT10aGlzLl95dWlldnQ7dmFyIHc9dS5jb25maWcsej13Lmhvc3QsQT13LmNvbnRleHQsSD11LmV2ZW50czt1PUhbc107KHcubW9uaXRvcmVkJiYhdXx8dSYmdS5tb25pdG9yZWQpJiZ0aGlzLl9tb25pdG9yKCJwdWJsaXNoIixzLHthcmdzOmFyZ3VtZW50c30pO3V8fCh1PUhbc109bmV3IGEuQ3VzdG9tRXZlbnQocyxsKSxsfHwodS5ob3N0PXosdS5jb250ZXh0PUEpKTtoJiZjKHUsaCwhMCk7cmV0dXJuIHV9LF9tb25pdG9yOmZ1bmN0aW9uKHMsbCxoKXt2YXIgdSx3O2wmJigic3RyaW5nIj09PXR5cGVvZiBsPyh3PWwsdT0KdGhpcy5nZXRFdmVudChsLCEwKSk6KHU9bCx3PWwudHlwZSksdGhpcy5feXVpZXZ0LmNvbmZpZy5tb25pdG9yZWQmJighdXx8dS5tb25pdG9yZWQpfHx1JiZ1Lm1vbml0b3JlZCkmJihoLm1vbml0b3JlZD1zLHRoaXMuZmlyZS5jYWxsKHRoaXMsdysiXyIrcyxoKSl9LGZpcmU6ZnVuY3Rpb24ocyl7dmFyIGw9InN0cmluZyI9PT10eXBlb2YgcyxoPWFyZ3VtZW50cy5sZW5ndGgsdT1zLHc9dGhpcy5feXVpZXZ0LHo9dy5jb25maWcsQT16LnByZWZpeCxILGg9bCYmMz49aD8yPT09aD9bYXJndW1lbnRzWzFdXTozPT09aD9bYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXV06W106ZC5jYWxsKGFyZ3VtZW50cyxsPzE6MCk7bHx8KHU9cyYmcy50eXBlKTtBJiYodT1rKHUsQSkpO2w9dy5ldmVudHNbdV07dGhpcy5faGFzU2libGluZ3MmJihIPXRoaXMuZ2V0U2libGluZyh1LGwpKSYmIWwmJihsPXRoaXMucHVibGlzaCh1KSk7KHoubW9uaXRvcmVkJiYoIWx8fGwubW9uaXRvcmVkKXx8bCYmbC5tb25pdG9yZWQpJiYKdGhpcy5fbW9uaXRvcigiZmlyZSIsbHx8dSx7YXJnczpofSk7aWYobClIJiYobC5zaWJsaW5nPUgpLHU9bC5fZmlyZShoKTtlbHNle2lmKHcuaGFzVGFyZ2V0cylyZXR1cm4gdGhpcy5idWJibGUoe3R5cGU6dX0saCx0aGlzKTt1PSEwfXJldHVybiB3LmNoYWluP3RoaXM6dX0sZ2V0U2libGluZzpmdW5jdGlvbihzLGwpe3ZhciBoOy0xPHMuaW5kZXhPZigiOiIpJiYocz1lKHMpLGg9dGhpcy5nZXRFdmVudChzLCEwKSkmJihoLmFwcGx5Q29uZmlnKGwpLGguYnViYmxlcz0hMSxoLmJyb2FkY2FzdD0wKTtyZXR1cm4gaH0sZ2V0RXZlbnQ6ZnVuY3Rpb24ocyxsKXt2YXIgaDtsfHwocz0oaD10aGlzLl95dWlldnQuY29uZmlnLnByZWZpeCk/ayhzLGgpOnMpO3JldHVybiB0aGlzLl95dWlldnQuZXZlbnRzW3NdfHxudWxsfSxhZnRlcjpmdW5jdGlvbihzLGwpe3ZhciBoPWQuY2FsbChhcmd1bWVudHMsMCk7c3dpdGNoKGIudHlwZShzKSl7Y2FzZSAiZnVuY3Rpb24iOnJldHVybiBhLkRvLmFmdGVyLmFwcGx5KGEuRG8sCmFyZ3VtZW50cyk7Y2FzZSAiYXJyYXkiOmNhc2UgIm9iamVjdCI6aFswXS5fYWZ0ZXI9ITA7YnJlYWs7ZGVmYXVsdDpoWzBdPSJ+QUZURVJ+IitzfXJldHVybiB0aGlzLm9uLmFwcGx5KHRoaXMsaCl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O2EuRXZlbnRUYXJnZXQ9cDthLm1peChhLHAucHJvdG90eXBlKTtwLmNhbGwoYSx7YnViYmxlczohMX0pO1lVSS5FbnYuZ2xvYmFsRXZlbnRzPVlVSS5FbnYuZ2xvYmFsRXZlbnRzfHxuZXcgcDthLkdsb2JhbD1ZVUkuRW52Lmdsb2JhbEV2ZW50c30sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsib29wIl19KTsKWVVJLmFkZCgiZXZlbnQtY3VzdG9tLWNvbXBsZXgiLGZ1bmN0aW9uKGEsRSl7dmFyIHEsdCxmPWEuT2JqZWN0LGQsYz17fTtxPWEuQ3VzdG9tRXZlbnQucHJvdG90eXBlO3ZhciBiPWEuRXZlbnRUYXJnZXQucHJvdG90eXBlO2EuRXZlbnRGYWNhZGU9ZnVuY3Rpb24oZyxlKXtnfHwoZz1jKTt0aGlzLl9ldmVudD1nO3RoaXMuZGV0YWlscz1nLmRldGFpbHM7dGhpcy5fdHlwZT10aGlzLnR5cGU9Zy50eXBlO3RoaXMudGFyZ2V0PWcudGFyZ2V0O3RoaXMuY3VycmVudFRhcmdldD1lO3RoaXMucmVsYXRlZFRhcmdldD1nLnJlbGF0ZWRUYXJnZXR9O2EubWl4KGEuRXZlbnRGYWNhZGUucHJvdG90eXBlLHtzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLl9ldmVudC5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLnN0b3BwZWQ9MX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5fZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7dGhpcy5zdG9wcGVkPTJ9LApwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuX2V2ZW50LnByZXZlbnREZWZhdWx0KCk7dGhpcy5wcmV2ZW50ZWQ9MX0saGFsdDpmdW5jdGlvbihnKXt0aGlzLl9ldmVudC5oYWx0KGcpO3RoaXMucHJldmVudGVkPTE7dGhpcy5zdG9wcGVkPWc/MjoxfX0pO3EuZmlyZUNvbXBsZXg9ZnVuY3Rpb24oZyl7dmFyIGUsayxtLHAscztzPSEwO3ZhciBsLGgsdT10aGlzO209dS5ob3N0fHx1O2U9dS5zdGFjazt2YXIgdz1tLl95dWlldnQ7aWYoZSYmdS5xdWV1YWJsZSYmdS50eXBlIT09ZS5uZXh0LnR5cGUpcmV0dXJuIGUucXVldWV8fChlLnF1ZXVlPVtdKSxlLnF1ZXVlLnB1c2goW3UsZ10pLCEwO3A9dS5oYXNTdWJzKCl8fHcuaGFzVGFyZ2V0c3x8dS5icm9hZGNhc3Q7dS50YXJnZXQ9dS50YXJnZXR8fG07dS5jdXJyZW50VGFyZ2V0PW07dS5kZXRhaWxzPWcuY29uY2F0KCk7aWYocCl7ZT1lfHx7aWQ6dS5pZCxuZXh0OnUsc2lsZW50OnUuc2lsZW50LHN0b3BwZWQ6MCxwcmV2ZW50ZWQ6MCwKYnViYmxpbmc6bnVsbCx0eXBlOnUudHlwZSxkZWZhdWx0VGFyZ2V0T25seTp1LmRlZmF1bHRUYXJnZXRPbmx5fTtwPXUuZ2V0U3VicygpO3M9cFswXTtwPXBbMV07dS5zdG9wcGVkPXUudHlwZSE9PWUudHlwZT8wOmUuc3RvcHBlZDt1LnByZXZlbnRlZD11LnR5cGUhPT1lLnR5cGU/MDplLnByZXZlbnRlZDt1LnN0b3BwZWRGbiYmKGw9bmV3IGEuRXZlbnRUYXJnZXQoe2ZpcmVPbmNlOiEwLGNvbnRleHQ6bX0pLHUuZXZlbnRzPWwsbC5vbigic3RvcHBlZCIsdS5zdG9wcGVkRm4pKTt1Ll9mYWNhZGU9bnVsbDtrPXUuX2NyZWF0ZUZhY2FkZShnKTtzJiZ1Ll9wcm9jU3VicyhzLGcsayk7dS5idWJibGVzJiZtLmJ1YmJsZSYmIXUuc3RvcHBlZCYmKGw9ZS5idWJibGluZyxlLmJ1YmJsaW5nPXUudHlwZSxlLnR5cGUhPT11LnR5cGUmJihlLnN0b3BwZWQ9MCxlLnByZXZlbnRlZD0wKSxzPW0uYnViYmxlKHUsZyxudWxsLGUpLHUuc3RvcHBlZD1NYXRoLm1heCh1LnN0b3BwZWQsZS5zdG9wcGVkKSwKdS5wcmV2ZW50ZWQ9TWF0aC5tYXgodS5wcmV2ZW50ZWQsZS5wcmV2ZW50ZWQpLGUuYnViYmxpbmc9bCk7KHM9dS5wcmV2ZW50ZWQpPyhzPXUucHJldmVudGVkRm4pJiZzLmFwcGx5KG0sZyk6KGw9dS5kZWZhdWx0Rm4sIWx8fCh1LmRlZmF1bHRUYXJnZXRPbmx5fHxlLmRlZmF1bHRUYXJnZXRPbmx5KSYmbSE9PWsudGFyZ2V0fHxsLmFwcGx5KG0sZykpO3UuYnJvYWRjYXN0JiZ1Ll9icm9hZGNhc3QoZyk7aWYocCYmIXUucHJldmVudGVkJiYyPnUuc3RvcHBlZClpZihtPWUuYWZ0ZXJRdWV1ZSxlLmlkPT09dS5pZHx8dS50eXBlIT09dy5idWJibGluZyl7aWYodS5fcHJvY1N1YnMocCxnLGspLG0pZm9yKDtwPW0ubGFzdCgpOylwKCl9ZWxzZSBoPXAsZS5leGVjRGVmYXVsdENudCYmKGg9YS5tZXJnZShoKSxhLmVhY2goaCxmdW5jdGlvbih6KXt6LnBvc3Rwb25lZD0hMH0pKSxtfHwoZS5hZnRlclF1ZXVlPW5ldyBhLlF1ZXVlKSxlLmFmdGVyUXVldWUuYWRkKGZ1bmN0aW9uKCl7dS5fcHJvY1N1YnMoaCwKZyxrKX0pO3UudGFyZ2V0PW51bGw7aWYoZS5pZD09PXUuaWQpe2lmKHA9ZS5xdWV1ZSlmb3IoO3AubGVuZ3RoOyltPXAucG9wKCkscz1tWzBdLGUubmV4dD1zLHMuX2ZpcmUobVsxXSk7dS5zdGFjaz1udWxsfXM9IXUuc3RvcHBlZDt1LnR5cGUhPT13LmJ1YmJsaW5nJiYoZS5zdG9wcGVkPTAsZS5wcmV2ZW50ZWQ9MCx1LnN0b3BwZWQ9MCx1LnByZXZlbnRlZD0wKX1lbHNlIGlmKGw9dS5kZWZhdWx0Rm4paz11Ll9jcmVhdGVGYWNhZGUoZyksdS5kZWZhdWx0VGFyZ2V0T25seSYmbSE9PWsudGFyZ2V0fHxsLmFwcGx5KG0sZyk7dS5fZmFjYWRlPW51bGw7cmV0dXJuIHN9O3EuX2hhc1BvdGVudGlhbFN1YnNjcmliZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzU3VicygpfHx0aGlzLmhvc3QuX3l1aWV2dC5oYXNUYXJnZXRzfHx0aGlzLmJyb2FkY2FzdH07cS5fY3JlYXRlRmFjYWRlPXEuX2dldEZhY2FkZT1mdW5jdGlvbihnKXt2YXIgZT10aGlzLmRldGFpbHMsaz0oZT1lJiZlWzBdKSYmCiJvYmplY3QiPT09dHlwZW9mIGUsbT10aGlzLl9mYWNhZGU7bXx8KG09bmV3IGEuRXZlbnRGYWNhZGUodGhpcyx0aGlzLmN1cnJlbnRUYXJnZXQpKTtpZihrKXt2YXIgaz1tLHA7Zm9yKHAgaW4gZSl0Lmhhc093blByb3BlcnR5KHApfHwoa1twXT1lW3BdKTtlLnR5cGUmJihtLnR5cGU9ZS50eXBlKTtnJiYoZ1swXT1tKX1lbHNlIGcmJmcudW5zaGlmdChtKTttLmRldGFpbHM9dGhpcy5kZXRhaWxzO20udGFyZ2V0PXRoaXMub3JpZ2luYWxUYXJnZXR8fHRoaXMudGFyZ2V0O20uY3VycmVudFRhcmdldD10aGlzLmN1cnJlbnRUYXJnZXQ7bS5zdG9wcGVkPTA7bS5wcmV2ZW50ZWQ9MDtyZXR1cm4gdGhpcy5fZmFjYWRlPW19O3EuX2FkZEZhY2FkZVRvQXJncz1mdW5jdGlvbihnKXt2YXIgZT1nWzBdO2UmJmUuaGFsdCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uJiZlLl9ldmVudHx8dGhpcy5fY3JlYXRlRmFjYWRlKGcpfTtxLnN0b3BQcm9wYWdhdGlvbj0KZnVuY3Rpb24oKXt0aGlzLnN0b3BwZWQ9MTt0aGlzLnN0YWNrJiYodGhpcy5zdGFjay5zdG9wcGVkPTEpO3RoaXMuZXZlbnRzJiZ0aGlzLmV2ZW50cy5maXJlKCJzdG9wcGVkIix0aGlzKX07cS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXt0aGlzLnN0b3BwZWQ9Mjt0aGlzLnN0YWNrJiYodGhpcy5zdGFjay5zdG9wcGVkPTIpO3RoaXMuZXZlbnRzJiZ0aGlzLmV2ZW50cy5maXJlKCJzdG9wcGVkIix0aGlzKX07cS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMucHJldmVudGFibGUmJih0aGlzLnByZXZlbnRlZD0xLHRoaXMuc3RhY2smJih0aGlzLnN0YWNrLnByZXZlbnRlZD0xKSl9O3EuaGFsdD1mdW5jdGlvbihnKXtnP3RoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6dGhpcy5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLnByZXZlbnREZWZhdWx0KCl9O2IuYWRkVGFyZ2V0PWZ1bmN0aW9uKGcpe3ZhciBlPXRoaXMuX3l1aWV2dDtlLnRhcmdldHN8fChlLnRhcmdldHM9Cnt9KTtlLnRhcmdldHNbYS5zdGFtcChnKV09ZztlLmhhc1RhcmdldHM9ITA7cmV0dXJuIHRoaXN9O2IuZ2V0VGFyZ2V0cz1mdW5jdGlvbigpe3ZhciBnPXRoaXMuX3l1aWV2dC50YXJnZXRzO3JldHVybiBnP2YudmFsdWVzKGcpOltdfTtiLnJlbW92ZVRhcmdldD1mdW5jdGlvbihnKXt2YXIgZT10aGlzLl95dWlldnQudGFyZ2V0cztlJiYoZGVsZXRlIGVbYS5zdGFtcChnLCEwKV0sMD09PWYuc2l6ZShlKSYmKHRoaXMuX3l1aWV2dC5oYXNUYXJnZXRzPSExKSk7cmV0dXJuIHRoaXN9O2IuYnViYmxlPWZ1bmN0aW9uKGcsZSxrLG0pe3ZhciBwPXRoaXMuX3l1aWV2dC50YXJnZXRzLHM9ITAsbCxoLHUsdyx6PWcmJmcudHlwZSxBPWt8fGcmJmcudGFyZ2V0fHx0aGlzLEg7aWYoIWd8fCFnLnN0b3BwZWQmJnApZm9yKGggaW4gcClpZihwLmhhc093blByb3BlcnR5KGgpKXtrPXBbaF07bD1rLl95dWlldnQuZXZlbnRzW3pdO2suX2hhc1NpYmxpbmdzJiYodz1rLmdldFNpYmxpbmcoeixsKSk7dyYmCiFsJiYobD1rLnB1Ymxpc2goeikpO0g9ay5feXVpZXZ0LmJ1YmJsaW5nO2suX3l1aWV2dC5idWJibGluZz16O2lmKGwpe2lmKHcmJihsLnNpYmxpbmc9dyksbC50YXJnZXQ9QSxsLm9yaWdpbmFsVGFyZ2V0PUEsbC5jdXJyZW50VGFyZ2V0PWssdT1sLmJyb2FkY2FzdCxsLmJyb2FkY2FzdD0hMSxsLmVtaXRGYWNhZGU9ITAsbC5zdGFjaz1tLHM9cyYmbC5maXJlLmFwcGx5KGwsZXx8Zy5kZXRhaWxzfHxbXSksbC5icm9hZGNhc3Q9dSxsLm9yaWdpbmFsVGFyZ2V0PW51bGwsbC5zdG9wcGVkKWJyZWFrfWVsc2Ugay5feXVpZXZ0Lmhhc1RhcmdldHMmJmsuYnViYmxlKGcsZSxBLG0pO2suX3l1aWV2dC5idWJibGluZz1IfXJldHVybiBzfTtiLl9oYXNQb3RlbnRpYWxTdWJzY3JpYmVycz1mdW5jdGlvbihnKXt2YXIgZT10aGlzLl95dWlldnQ7cmV0dXJuKGc9ZS5ldmVudHNbZ10pP2cuaGFzU3VicygpfHxlLmhhc1RhcmdldHN8fGcuYnJvYWRjYXN0OiExfTtxPW5ldyBhLkV2ZW50RmFjYWRlOwp0PXt9O2ZvcihkIGluIHEpdFtkXT0hMH0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZXZlbnQtY3VzdG9tLWJhc2UiXX0pOwpZVUkuYWRkKCJldmVudC1kZWxlZ2F0ZSIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKGssbSxwLHMpe3ZhciBsPXQoYXJndW1lbnRzLDAsITApLGg9ZChwKT9wOm51bGwsdSx3LHo7aWYoYyhrKSl7aD1bXTtpZihiKGspKWZvcih1PTAsdz1rLmxlbmd0aDt1PHc7Kyt1KWxbMF09a1t1XSxoLnB1c2goYS5kZWxlZ2F0ZS5hcHBseShhLGwpKTtlbHNlIGZvcih1IGluIGwudW5zaGlmdChudWxsKSxrKWsuaGFzT3duUHJvcGVydHkodSkmJihsWzBdPXUsbFsxXT1rW3VdLGgucHVzaChhLmRlbGVnYXRlLmFwcGx5KGEsbCkpKTtyZXR1cm4gbmV3IGEuRXZlbnRIYW5kbGUoaCl9dT1rLnNwbGl0KC9cfC8pOzE8dS5sZW5ndGgmJih3PXUuc2hpZnQoKSxsWzBdPWs9dS5zaGlmdCgpKTt1PWEuTm9kZS5ET01fRVZFTlRTW2tdO2ModSkmJnUuZGVsZWdhdGUmJih6PXUuZGVsZWdhdGUuYXBwbHkodSxhcmd1bWVudHMpKTtpZigheil7aWYoIShrJiZtJiZwJiZzKSlyZXR1cm47aD1oP2EuU2VsZWN0b3IucXVlcnkoaCwKbnVsbCwhMCk6cDshaCYmZChwKSYmKHo9YS5vbigiYXZhaWxhYmxlIixmdW5jdGlvbigpe2EubWl4KHosYS5kZWxlZ2F0ZS5hcHBseShhLGwpLCEwKX0scCkpOyF6JiZoJiYobC5zcGxpY2UoMiwyLGgpLHo9YS5FdmVudC5fYXR0YWNoKGwse2ZhY2FkZTohMX0pLHouc3ViLmZpbHRlcj1zLHouc3ViLl9ub3RpZnk9cS5ub3RpZnlTdWIpfXomJncmJih3PWVbd118fChlW3ddPXt9KSx3PXdba118fCh3W2tdPVtdKSx3LnB1c2goeikpO3JldHVybiB6fXZhciB0PWEuQXJyYXksZj1hLkxhbmcsZD1mLmlzU3RyaW5nLGM9Zi5pc09iamVjdCxiPWYuaXNBcnJheSxnPWEuU2VsZWN0b3IudGVzdCxlPWEuRW52LmV2dC5oYW5kbGVzO3Eubm90aWZ5U3ViPWZ1bmN0aW9uKGssbSxwKXttPW0uc2xpY2UoKTt0aGlzLmFyZ3MmJm0ucHVzaC5hcHBseShtLHRoaXMuYXJncyk7az1xLl9hcHBseUZpbHRlcih0aGlzLmZpbHRlcixtLHApO3ZhciBzLGwsaDtpZihrKXtrPXQoayk7cz1tWzBdPW5ldyBhLkRPTUV2ZW50RmFjYWRlKG1bMF0sCnAuZWwscCk7cy5jb250YWluZXI9YS5vbmUocC5lbCk7cD0wO2ZvcihsPWsubGVuZ3RoO3A8bCYmIXMuc3RvcHBlZCYmKHMuY3VycmVudFRhcmdldD1hLm9uZShrW3BdKSxoPXRoaXMuZm4uYXBwbHkodGhpcy5jb250ZXh0fHxzLmN1cnJlbnRUYXJnZXQsbSksITEhPT1oKTsrK3ApO3JldHVybiBofX07cS5jb21waWxlRmlsdGVyPWEuY2FjaGVkKGZ1bmN0aW9uKGspe3JldHVybiBmdW5jdGlvbihtLHApe3JldHVybiBnKG0uX25vZGUsayxwLmN1cnJlbnRUYXJnZXQ9PT1wLnRhcmdldD9udWxsOnAuY3VycmVudFRhcmdldC5fbm9kZSl9fSk7cS5fZGlzYWJsZWRSRT0vXig/OmJ1dHRvbnxpbnB1dHxzZWxlY3R8dGV4dGFyZWEpJC9pO3EuX2FwcGx5RmlsdGVyPWZ1bmN0aW9uKGssbSxwKXt2YXIgcz1tWzBdLGw9cC5lbCxoPXMudGFyZ2V0fHxzLnNyY0VsZW1lbnQsdT1bXSx3PSExOzM9PT1oLm5vZGVUeXBlJiYoaD1oLnBhcmVudE5vZGUpO2lmKGguZGlzYWJsZWQmJnEuX2Rpc2FibGVkUkUudGVzdChoLm5vZGVOYW1lKSlyZXR1cm4gdTsKbS51bnNoaWZ0KGgpO2lmKGQoaykpZm9yKDtoOyl7dz1oPT09bDtnKGgsayx3P251bGw6bCkmJnUucHVzaChoKTtpZih3KWJyZWFrO2g9aC5wYXJlbnROb2RlfWVsc2V7bVswXT1hLm9uZShoKTtmb3IobVsxXT1uZXcgYS5ET01FdmVudEZhY2FkZShzLGwscCk7aDspe2suYXBwbHkobVswXSxtKSYmdS5wdXNoKGgpO2lmKGg9PT1sKWJyZWFrO2g9aC5wYXJlbnROb2RlO21bMF09YS5vbmUoaCl9bVsxXT1zfTE+PXUubGVuZ3RoJiYodT11WzBdKTttLnNoaWZ0KCk7cmV0dXJuIHV9O2EuZGVsZWdhdGU9YS5FdmVudC5kZWxlZ2F0ZT1xfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJub2RlLWJhc2UiXX0pOwpZVUkuYWRkKCJldmVudC1mb2N1cyIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKGIsZyxlKXt2YXIgaz0iXyIrYisiTm90aWZpZXJzIjthLkV2ZW50LmRlZmluZShiLHtfdXNlQWN0aXZhdGU6YyxfYXR0YWNoOmZ1bmN0aW9uKG0scCxzKXtyZXR1cm4gYS5ET00uaXNXaW5kb3cobSk/dC5fYXR0YWNoKFtiLGZ1bmN0aW9uKGwpe3AuZmlyZShsKX0sbV0pOnQuX2F0dGFjaChbZyx0aGlzLl9wcm94eSxtLHRoaXMscCxzXSx7Y2FwdHVyZTohMH0pfSxfcHJveHk6ZnVuY3Rpb24obSxwLHMpe3ZhciBsPW0udGFyZ2V0LGg9bS5jdXJyZW50VGFyZ2V0LHU9bC5nZXREYXRhKGspLHc9YS5zdGFtcChoLl9ub2RlKSx6PWN8fGwhPT1oO3AuY3VycmVudFRhcmdldD1zP2w6aDtwLmNvbnRhaW5lcj1zP2g6bnVsbDt1P3o9ITA6KHU9e30sbC5zZXREYXRhKGssdSkseiYmKHM9dC5fYXR0YWNoKFtlLHRoaXMuX25vdGlmeSxsLl9ub2RlXSkuc3ViLHMub25jZT0hMCkpO3Vbd118fCh1W3ddPVtdKTt1W3ddLnB1c2gocCk7Cnp8fHRoaXMuX25vdGlmeShtKX0sX25vdGlmeTpmdW5jdGlvbihtLHApe3ZhciBzPW0uY3VycmVudFRhcmdldCxsPXMuZ2V0RGF0YShrKSxoPXMuYW5jZXN0b3JzKCksdT1zLmdldCgib3duZXJEb2N1bWVudCIpLHc9W10sej1sP2EuT2JqZWN0LmtleXMobCkubGVuZ3RoOjAsQSxILEYsQixJLE0sRDtzLmNsZWFyRGF0YShrKTtoLnB1c2gocyk7dSYmaC51bnNoaWZ0KHUpO2guX25vZGVzLnJldmVyc2UoKTt6JiYocz16LGguc29tZShmdW5jdGlvbihKKXtKPWEuc3RhbXAoSik7Sj1sW0pdO3ZhciBQLFY7aWYoSilmb3Ioei0tLFA9MCxWPUoubGVuZ3RoO1A8VjsrK1ApSltQXS5oYW5kbGUuc3ViLmZpbHRlciYmdy5wdXNoKEpbUF0pO3JldHVybiF6fSksej1zKTtmb3IoO3omJihBPWguc2hpZnQoKSk7KXtIPWEuc3RhbXAoQSk7aWYocz1sW0hdKXtCPTA7Zm9yKEk9cy5sZW5ndGg7QjxJJiYodT1zW0JdLE09dS5oYW5kbGUuc3ViLEY9ITAsbS5jdXJyZW50VGFyZ2V0PUEsTS5maWx0ZXImJgooRj1NLmZpbHRlci5hcHBseShBLFtBLG1dLmNvbmNhdChNLmFyZ3N8fFtdKSksdy5zcGxpY2UoZCh3LHUpLDEpKSxGJiYobS5jb250YWluZXI9dS5jb250YWluZXIsRD11LmZpcmUobSkpLCExIT09RCYmMiE9PW0uc3RvcHBlZCk7KytCKTtkZWxldGUgc1tIXTt6LS19aWYoMiE9PW0uc3RvcHBlZClmb3IoQj0wLEk9dy5sZW5ndGg7QjxJJiYhKHU9d1tCXSxNPXUuaGFuZGxlLnN1YixNLmZpbHRlci5hcHBseShBLFtBLG1dLmNvbmNhdChNLmFyZ3N8fFtdKSkmJihtLmNvbnRhaW5lcj11LmNvbnRhaW5lcixtLmN1cnJlbnRUYXJnZXQ9QSxEPXUuZmlyZShtKSksITE9PT1EfHwyPT09bS5zdG9wcGVkfHxtLnN0b3BwZWQmJndbQisxXSYmd1tCKzFdLmNvbnRhaW5lciE9PXUuY29udGFpbmVyKTsrK0IpO2lmKG0uc3RvcHBlZClicmVha319LG9uOmZ1bmN0aW9uKG0scCxzKXtwLmhhbmRsZT10aGlzLl9hdHRhY2gobS5fbm9kZSxzKX0sZGV0YWNoOmZ1bmN0aW9uKG0scCl7cC5oYW5kbGUuZGV0YWNoKCl9LApkZWxlZ2F0ZTpmdW5jdGlvbihtLHAscyxsKXtmKGwpJiYocC5maWx0ZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGEuU2VsZWN0b3IudGVzdChoLl9ub2RlLGwsbT09PWg/bnVsbDptLl9ub2RlKX0pO3AuaGFuZGxlPXRoaXMuX2F0dGFjaChtLl9ub2RlLHMsITApfSxkZXRhY2hEZWxlZ2F0ZTpmdW5jdGlvbihtLHApe3AuaGFuZGxlLmRldGFjaCgpfX0sITApfXZhciB0PWEuRXZlbnQsZj1hLkxhbmcuaXNTdHJpbmcsZD1hLkFycmF5LmluZGV4T2YsYz1mdW5jdGlvbigpe3ZhciBiPSExLGc9YS5jb25maWcuZG9jO2cmJihiPWcuY3JlYXRlRWxlbWVudCgicCIpLGIuc2V0QXR0cmlidXRlKCJvbmJlZm9yZWFjdGl2YXRlIiwiOyIpLGI9dm9pZCAwIT09Yi5vbmJlZm9yZWFjdGl2YXRlKTtyZXR1cm4gYn0oKTtjPyhxKCJmb2N1cyIsImJlZm9yZWFjdGl2YXRlIiwiZm9jdXNpbiIpLHEoImJsdXIiLCJiZWZvcmVkZWFjdGl2YXRlIiwiZm9jdXNvdXQiKSk6KHEoImZvY3VzIiwiZm9jdXMiLCJmb2N1cyIpLApxKCJibHVyIiwiYmx1ciIsImJsdXIiKSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImV2ZW50LXN5bnRoZXRpYyJdfSk7CllVSS5hZGQoImV2ZW50LWhvdmVyIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZy5pc0Z1bmN0aW9uLHQ9ZnVuY3Rpb24oKXt9LGY9e3Byb2Nlc3NBcmdzOmZ1bmN0aW9uKGQpe3ZhciBjPXEoZFsyXSk/MjozO3JldHVybiBxKGRbY10pP2Quc3BsaWNlKGMsMSlbMF06dH0sb246ZnVuY3Rpb24oZCxjLGIsZyl7dmFyIGU9Yy5hcmdzP2MuYXJncy5zbGljZSgpOltdO2UudW5zaGlmdChudWxsKTtjLl9kZXRhY2g9ZFtnPyJkZWxlZ2F0ZSI6Im9uIl0oe21vdXNlZW50ZXI6ZnVuY3Rpb24oayl7ay5waGFzZT0ib3ZlciI7Yi5maXJlKGspfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKGspe3ZhciBtPWMuY29udGV4dHx8dGhpcztlWzBdPWs7ay50eXBlPSJob3ZlciI7ay5waGFzZT0ib3V0IjtjLl9leHRyYS5hcHBseShtLGUpfX0sZyl9LGRldGFjaDpmdW5jdGlvbihkLGMsYil7Yy5fZGV0YWNoLmRldGFjaCgpfX07Zi5kZWxlZ2F0ZT1mLm9uO2YuZGV0YWNoRGVsZWdhdGU9Zi5kZXRhY2g7YS5FdmVudC5kZWZpbmUoImhvdmVyIiwKZil9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImV2ZW50LW1vdXNlZW50ZXIiXX0pOwpZVUkuYWRkKCJldmVudC1rZXkiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5MYW5nLnRyaW0sdD17S0VZX01BUDp7ZW50ZXI6MTMsc3BhY2U6MzIsZXNjOjI3LGJhY2tzcGFjZTo4LHRhYjo5LHBhZ2V1cDozMyxwYWdlZG93bjozNH0sX3R5cGVSRTovXih1cHxkb3dufHByZXNzKTovLF9rZXlzUkU6L14oPzp1cHxkb3dufHByZXNzKTp8XCsoYWx0fGN0cmx8bWV0YXxzaGlmdCkvZyxwcm9jZXNzQXJnczpmdW5jdGlvbihmKXt2YXIgZD1mLnNwbGljZSgzLDEpWzBdO2Y9YS5BcnJheS5oYXNoKGQubWF0Y2goL1wrKD86YWx0fGN0cmx8bWV0YXxzaGlmdClcYi9nKXx8W10pO3ZhciBjPXt0eXBlOnRoaXMuX3R5cGVSRS50ZXN0KGQpP1JlZ0V4cC4kMTpudWxsLG1vZHM6ZixrZXlzOm51bGx9LGQ9ZC5yZXBsYWNlKHRoaXMuX2tleXNSRSwiIiksYixnLGU7aWYoZClmb3IoZD1kLnNwbGl0KCIsIiksYy5rZXlzPXt9LGU9ZC5sZW5ndGgtMTswPD1lOy0tZSlpZihiPXEoZFtlXSkpK2I9PWI/Yy5rZXlzW2JdPQpmOihnPWIudG9Mb3dlckNhc2UoKSx0aGlzLktFWV9NQVBbZ10/KGMua2V5c1t0aGlzLktFWV9NQVBbZ11dPWYsYy50eXBlfHwoYy50eXBlPSJkb3duIikpOihiPWIuY2hhckF0KDApLGc9Yi50b1VwcGVyQ2FzZSgpLGZbIitzaGlmdCJdJiYoYj1nKSxjLmtleXNbYi5jaGFyQ29kZUF0KDApXT1iPT09Zz9hLm1lcmdlKGYseyIrc2hpZnQiOiEwfSk6ZikpO2MudHlwZXx8KGMudHlwZT0icHJlc3MiKTtyZXR1cm4gY30sb246ZnVuY3Rpb24oZixkLGMsYil7dmFyIGc9ZC5fZXh0cmEsZT1nLmtleXM7ZC5fZGV0YWNoPWZbYj8iZGVsZWdhdGUiOiJvbiJdKCJrZXkiK2cudHlwZSxmdW5jdGlvbihrKXt2YXIgbT1lP2Vbay53aGljaF06Zy5tb2RzO20mJighbVsiK2FsdCJdfHxtWyIrYWx0Il0mJmsuYWx0S2V5KSYmKCFtWyIrY3RybCJdfHxtWyIrY3RybCJdJiZrLmN0cmxLZXkpJiYoIW1bIittZXRhIl18fG1bIittZXRhIl0mJmsubWV0YUtleSkmJighbVsiK3NoaWZ0Il18fG1bIitzaGlmdCJdJiYKay5zaGlmdEtleSkmJmMuZmlyZShrKX0sYil9LGRldGFjaDpmdW5jdGlvbihmLGQsYyl7ZC5fZGV0YWNoLmRldGFjaCgpfX07dC5kZWxlZ2F0ZT10Lm9uO3QuZGV0YWNoRGVsZWdhdGU9dC5kZXRhY2g7YS5FdmVudC5kZWZpbmUoImtleSIsdCwhMCl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImV2ZW50LXN5bnRoZXRpYyJdfSk7CllVSS5hZGQoImV2ZW50LW1vdXNlZW50ZXIiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5FbnYuZXZ0LmRvbV93cmFwcGVycyx0PWEuRE9NLmNvbnRhaW5zLGY9YS5BcnJheSxkPWZ1bmN0aW9uKCl7fSxjPXtwcm94eVR5cGU6Im1vdXNlb3ZlciIscmVsUHJvcGVydHk6ImZyb21FbGVtZW50Iixfbm90aWZ5OmZ1bmN0aW9uKGIsZyxlKXt2YXIgaz10aGlzLl9ub2RlO2c9Yi5yZWxhdGVkVGFyZ2V0fHxiW2ddO2s9PT1nfHx0KGssZyl8fGUuZmlyZShuZXcgYS5ET01FdmVudEZhY2FkZShiLGsscVsiZXZlbnQ6IithLnN0YW1wKGspK2IudHlwZV0pKX0sb246ZnVuY3Rpb24oYixnLGUpe2I9YS5Ob2RlLmdldERPTU5vZGUoYik7Zy5oYW5kbGU9YS5FdmVudC5fYXR0YWNoKFt0aGlzLnByb3h5VHlwZSx0aGlzLl9ub3RpZnksYixudWxsLHRoaXMucmVsUHJvcGVydHksZV0se2ZhY2FkZTohMX0pfSxkZXRhY2g6ZnVuY3Rpb24oYixnKXtnLmhhbmRsZS5kZXRhY2goKX0sZGVsZWdhdGU6ZnVuY3Rpb24oYiwKZyxlLGspe2I9YS5Ob2RlLmdldERPTU5vZGUoYik7Zy5oYW5kbGU9YS5FdmVudC5fYXR0YWNoKFt0aGlzLnByb3h5VHlwZSxkLGIsbnVsbCxlXSx7ZmFjYWRlOiExfSk7Zy5oYW5kbGUuc3ViLmZpbHRlcj1rO2cuaGFuZGxlLnN1Yi5yZWxQcm9wZXJ0eT10aGlzLnJlbFByb3BlcnR5O2cuaGFuZGxlLnN1Yi5fbm90aWZ5PXRoaXMuX2ZpbHRlck5vdGlmeX0sX2ZpbHRlck5vdGlmeTpmdW5jdGlvbihiLGcsZSl7Zz1nLnNsaWNlKCk7dGhpcy5hcmdzJiZnLnB1c2guYXBwbHkoZyx0aGlzLmFyZ3MpO2I9YS5kZWxlZ2F0ZS5fYXBwbHlGaWx0ZXIodGhpcy5maWx0ZXIsZyxlKTt2YXIgaz1nWzBdLnJlbGF0ZWRUYXJnZXR8fGdbMF1bdGhpcy5yZWxQcm9wZXJ0eV0sbSxwLHMsbCxoO2lmKGIpZm9yKGI9ZihiKSxwPTAscz1iLmxlbmd0aCYmKCFtfHwhbS5zdG9wcGVkKTtwPHMmJihoPWJbMF0sdChoLGspfHwobXx8KG09bmV3IGEuRE9NRXZlbnRGYWNhZGUoZ1swXSxoLGUpLG0uY29udGFpbmVyPQphLm9uZShlLmVsKSksbS5jdXJyZW50VGFyZ2V0PWEub25lKGgpLGw9Z1sxXS5maXJlKG0pLCExIT09bCkpOysrcCk7cmV0dXJuIGx9LGRldGFjaERlbGVnYXRlOmZ1bmN0aW9uKGIsZyl7Zy5oYW5kbGUuZGV0YWNoKCl9fTthLkV2ZW50LmRlZmluZSgibW91c2VlbnRlciIsYywhMCk7YS5FdmVudC5kZWZpbmUoIm1vdXNlbGVhdmUiLGEubWVyZ2UoYyx7cHJveHlUeXBlOiJtb3VzZW91dCIscmVsUHJvcGVydHk6InRvRWxlbWVudCJ9KSwhMCl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImV2ZW50LXN5bnRoZXRpYyJdfSk7CllVSS5hZGQoImV2ZW50LW1vdXNld2hlZWwiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9ZnVuY3Rpb24odCl7dD1hLkFycmF5KHQsMCwhMCk7dmFyIGY7YS5VQS5nZWNrbz8odFswXT0iRE9NTW91c2VTY3JvbGwiLGY9YS5jb25maWcud2luKTpmPWEuY29uZmlnLmRvYzszPnQubGVuZ3RoP3RbMl09Zjp0LnNwbGljZSgyLDAsZik7cmV0dXJuIHR9O2EuRW52LmV2dC5wbHVnaW5zLm1vdXNld2hlZWw9e29uOmZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnQuX2F0dGFjaChxKGFyZ3VtZW50cykpfSxkZXRhY2g6ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudC5kZXRhY2guYXBwbHkoYS5FdmVudCxxKGFyZ3VtZW50cykpfX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbIm5vZGUtYmFzZSJdfSk7CllVSS5hZGQoImV2ZW50LW91dHNpZGUiLGZ1bmN0aW9uKGEsRSl7YS5FdmVudC5kZWZpbmVPdXRzaWRlPWZ1bmN0aW9uKHEsdCl7dmFyIGY9e29uOmZ1bmN0aW9uKGQsYyxiKXtjLmhhbmRsZT1hLm9uZSgiZG9jIikub24ocSxmdW5jdGlvbihnKXt0aGlzLmlzT3V0c2lkZShkLGcudGFyZ2V0KSYmKGcuY3VycmVudFRhcmdldD1kLGIuZmlyZShnKSl9LHRoaXMpfSxkZXRhY2g6ZnVuY3Rpb24oZCxjLGIpe2MuaGFuZGxlLmRldGFjaCgpfSxkZWxlZ2F0ZTpmdW5jdGlvbihkLGMsYixnKXtjLmhhbmRsZT1hLm9uZSgiZG9jIikuZGVsZWdhdGUocSxmdW5jdGlvbihlKXt0aGlzLmlzT3V0c2lkZShkLGUudGFyZ2V0KSYmYi5maXJlKGUpfSxnLHRoaXMpfSxpc091dHNpZGU6ZnVuY3Rpb24oZCxjKXtyZXR1cm4gYyE9PWQmJiFjLmFuY2VzdG9yKGZ1bmN0aW9uKGIpe3JldHVybiBiPT09ZH0pfX07Zi5kZXRhY2hEZWxlZ2F0ZT1mLmRldGFjaDthLkV2ZW50LmRlZmluZSh0fHxxKyJvdXRzaWRlIiwKZil9O2EuQXJyYXkuZWFjaCgiYmx1ciBjaGFuZ2UgY2xpY2sgZGJsY2xpY2sgZm9jdXMga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24gbW91c2Vtb3ZlIG1vdXNlb3V0IG1vdXNlb3ZlciBtb3VzZXVwIHNlbGVjdCBzdWJtaXQiLnNwbGl0KCIgIiksZnVuY3Rpb24ocSl7YS5FdmVudC5kZWZpbmVPdXRzaWRlKHEpfSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImV2ZW50LXN5bnRoZXRpYyJdfSk7CllVSS5hZGQoImV2ZW50LXJlc2l6ZSIsZnVuY3Rpb24oYSxFKXthLkV2ZW50LmRlZmluZSgid2luZG93cmVzaXplIix7b246YS5VQS5nZWNrbyYmMS45MT5hLlVBLmdlY2tvP2Z1bmN0aW9uKHEsdCxmKXt0Ll9oYW5kbGU9YS5FdmVudC5hdHRhY2goInJlc2l6ZSIsZnVuY3Rpb24oZCl7Zi5maXJlKGQpfSl9OmZ1bmN0aW9uKHEsdCxmKXt2YXIgZD1hLmNvbmZpZy53aW5kb3dSZXNpemVEZWxheXx8MTAwO3QuX2hhbmRsZT1hLkV2ZW50LmF0dGFjaCgicmVzaXplIixmdW5jdGlvbihjKXt0Ll90aW1lciYmdC5fdGltZXIuY2FuY2VsKCk7dC5fdGltZXI9YS5sYXRlcihkLGEsZnVuY3Rpb24oKXtmLmZpcmUoYyl9KX0pfSxkZXRhY2g6ZnVuY3Rpb24ocSx0KXt0Ll90aW1lciYmdC5fdGltZXIuY2FuY2VsKCk7dC5faGFuZGxlLmRldGFjaCgpfX0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJub2RlLWJhc2UiLCJldmVudC1zeW50aGV0aWMiXX0pOwpZVUkuYWRkKCJldmVudC1zaW11bGF0ZSIsZnVuY3Rpb24oYSxFKXsoZnVuY3Rpb24oKXt2YXIgcT1hLkxhbmcsdD1hLmNvbmZpZy53aW4sZj1xLmlzRnVuY3Rpb24sZD1xLmlzU3RyaW5nLGM9cS5pc0Jvb2xlYW4sYj1xLmlzT2JqZWN0LGc9cS5pc051bWJlcixlPXtjbGljazoxLGRibGNsaWNrOjEsbW91c2VvdmVyOjEsbW91c2VvdXQ6MSxtb3VzZWRvd246MSxtb3VzZXVwOjEsbW91c2Vtb3ZlOjEsY29udGV4dG1lbnU6MX0saz10JiZ0LlBvaW50ZXJFdmVudD97cG9pbnRlcm92ZXI6MSxwb2ludGVyb3V0OjEscG9pbnRlcmRvd246MSxwb2ludGVydXA6MSxwb2ludGVybW92ZToxfTp7TVNQb2ludGVyT3ZlcjoxLE1TUG9pbnRlck91dDoxLE1TUG9pbnRlckRvd246MSxNU1BvaW50ZXJVcDoxLE1TUG9pbnRlck1vdmU6MX0sbT17a2V5ZG93bjoxLGtleXVwOjEsa2V5cHJlc3M6MX0scD17c3VibWl0OjEsYmx1cjoxLGNoYW5nZToxLGZvY3VzOjEscmVzaXplOjEsc2Nyb2xsOjEsc2VsZWN0OjF9LApzPXtzY3JvbGw6MSxyZXNpemU6MSxyZXNldDoxLHN1Ym1pdDoxLGNoYW5nZToxLHNlbGVjdDoxLGVycm9yOjEsYWJvcnQ6MX0sbD17dG91Y2hzdGFydDoxLHRvdWNobW92ZToxLHRvdWNoZW5kOjEsdG91Y2hjYW5jZWw6MX0saD17Z2VzdHVyZXN0YXJ0OjEsZ2VzdHVyZWNoYW5nZToxLGdlc3R1cmVlbmQ6MX07YS5taXgocyxlKTthLm1peChzLG0pO2EubWl4KHMsbCk7YS5FdmVudC5zaW11bGF0ZT1mdW5jdGlvbih1LHcseil7ej16fHx7fTtpZihlW3ddfHxrW3ddKXt2YXIgQT16LmJ1YmJsZXMsSD16LmNhbmNlbGFibGUsRj16LnZpZXcsQj16LmRldGFpbCxJPXouc2NyZWVuWCxNPXouc2NyZWVuWSxEPXouY2xpZW50WCxKPXouY2xpZW50WSxQPXouY3RybEtleSxWPXouYWx0S2V5LFk9ei5zaGlmdEtleSxuYT16Lm1ldGFLZXksZmE9ei5idXR0b247ej16LnJlbGF0ZWRUYXJnZXQ7dXx8YS5lcnJvcigic2ltdWxhdGVNb3VzZUV2ZW50KCk6IEludmFsaWQgdGFyZ2V0LiIpO2Qodyk/ZVt3LnRvTG93ZXJDYXNlKCldfHwKa1t3XXx8YS5lcnJvcigic2ltdWxhdGVNb3VzZUV2ZW50KCk6IEV2ZW50IHR5cGUgJyIrdysiJyBub3Qgc3VwcG9ydGVkLiIpOmEuZXJyb3IoInNpbXVsYXRlTW91c2VFdmVudCgpOiBFdmVudCB0eXBlIG11c3QgYmUgYSBzdHJpbmcuIik7YyhBKXx8KEE9ITApO2MoSCl8fChIPSJtb3VzZW1vdmUiIT09dyk7YihGKXx8KEY9YS5jb25maWcud2luKTtnKEIpfHwoQj0xKTtnKEkpfHwoST0wKTtnKE0pfHwoTT0wKTtnKEQpfHwoRD0wKTtnKEopfHwoSj0wKTtjKFApfHwoUD0hMSk7YyhWKXx8KFY9ITEpO2MoWSl8fChZPSExKTtjKG5hKXx8KG5hPSExKTtnKGZhKXx8KGZhPTApO3o9enx8bnVsbDt2YXIgaWE9bnVsbDtpZihmKGEuY29uZmlnLmRvYy5jcmVhdGVFdmVudCkpaWE9YS5jb25maWcuZG9jLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLGlhLmluaXRNb3VzZUV2ZW50P2lhLmluaXRNb3VzZUV2ZW50KHcsQSxILEYsQixJLE0sRCxKLFAsVixZLG5hLGZhLHopOihpYT1hLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnQoIlVJRXZlbnRzIiksCmlhLmluaXRFdmVudCh3LEEsSCksaWEudmlldz1GLGlhLmRldGFpbD1CLGlhLnNjcmVlblg9SSxpYS5zY3JlZW5ZPU0saWEuY2xpZW50WD1ELGlhLmNsaWVudFk9SixpYS5jdHJsS2V5PVAsaWEuYWx0S2V5PVYsaWEubWV0YUtleT1uYSxpYS5zaGlmdEtleT1ZLGlhLmJ1dHRvbj1mYSxpYS5yZWxhdGVkVGFyZ2V0PXopLHomJiFpYS5yZWxhdGVkVGFyZ2V0JiYoIm1vdXNlb3V0Ij09PXc/aWEudG9FbGVtZW50PXo6Im1vdXNlb3ZlciI9PT13JiYoaWEuZnJvbUVsZW1lbnQ9eikpLHUuZGlzcGF0Y2hFdmVudChpYSk7ZWxzZSBpZihiKGEuY29uZmlnLmRvYy5jcmVhdGVFdmVudE9iamVjdCkpe2lhPWEuY29uZmlnLmRvYy5jcmVhdGVFdmVudE9iamVjdCgpO2lhLmJ1YmJsZXM9QTtpYS5jYW5jZWxhYmxlPUg7aWEudmlldz1GO2lhLmRldGFpbD1CO2lhLnNjcmVlblg9STtpYS5zY3JlZW5ZPU07aWEuY2xpZW50WD1EO2lhLmNsaWVudFk9SjtpYS5jdHJsS2V5PVA7aWEuYWx0S2V5PVY7aWEubWV0YUtleT0KbmE7aWEuc2hpZnRLZXk9WTtzd2l0Y2goZmEpe2Nhc2UgMDppYS5idXR0b249MTticmVhaztjYXNlIDE6aWEuYnV0dG9uPTQ7YnJlYWs7Y2FzZSAyOmJyZWFrO2RlZmF1bHQ6aWEuYnV0dG9uPTB9aWEucmVsYXRlZFRhcmdldD16O3UuZmlyZUV2ZW50KCJvbiIrdyxpYSl9ZWxzZSBhLmVycm9yKCJzaW11bGF0ZU1vdXNlRXZlbnQoKTogTm8gZXZlbnQgc2ltdWxhdGlvbiBmcmFtZXdvcmsgcHJlc2VudC4iKX1lbHNlIGlmKG1bd10pe0E9dzt3PXouYnViYmxlcztIPXouY2FuY2VsYWJsZTtGPXoudmlldztCPXouY3RybEtleTtJPXouYWx0S2V5O009ei5zaGlmdEtleTtEPXoubWV0YUtleTtKPXoua2V5Q29kZTt6PXouY2hhckNvZGU7dXx8YS5lcnJvcigic2ltdWxhdGVLZXlFdmVudCgpOiBJbnZhbGlkIHRhcmdldC4iKTtpZihkKEEpKXN3aXRjaChBPUEudG9Mb3dlckNhc2UoKSxBKXtjYXNlICJ0ZXh0ZXZlbnQiOkE9ImtleXByZXNzIjticmVhaztjYXNlICJrZXl1cCI6Y2FzZSAia2V5ZG93biI6Y2FzZSAia2V5cHJlc3MiOmJyZWFrOwpkZWZhdWx0OmEuZXJyb3IoInNpbXVsYXRlS2V5RXZlbnQoKTogRXZlbnQgdHlwZSAnIitBKyInIG5vdCBzdXBwb3J0ZWQuIil9ZWxzZSBhLmVycm9yKCJzaW11bGF0ZUtleUV2ZW50KCk6IEV2ZW50IHR5cGUgbXVzdCBiZSBhIHN0cmluZy4iKTtjKHcpfHwodz0hMCk7YyhIKXx8KEg9ITApO2IoRil8fChGPWEuY29uZmlnLndpbik7YyhCKXx8KEI9ITEpO2MoSSl8fChJPSExKTtjKE0pfHwoTT0hMSk7YyhEKXx8KEQ9ITEpO2coSil8fChKPTApO2coeil8fCh6PTApO1A9bnVsbDtpZihmKGEuY29uZmlnLmRvYy5jcmVhdGVFdmVudCkpe3RyeXtQPWEuY29uZmlnLmRvYy5jcmVhdGVFdmVudCgiS2V5RXZlbnRzIiksUC5pbml0S2V5RXZlbnQoQSx3LEgsRixCLEksTSxELEoseil9Y2F0Y2goWil7dHJ5e1A9YS5jb25maWcuZG9jLmNyZWF0ZUV2ZW50KCJFdmVudHMiKX1jYXRjaChlYSl7UD1hLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnQoIlVJRXZlbnRzIil9ZmluYWxseXtQLmluaXRFdmVudChBLAp3LEgpLFAudmlldz1GLFAuYWx0S2V5PUksUC5jdHJsS2V5PUIsUC5zaGlmdEtleT1NLFAubWV0YUtleT1ELFAua2V5Q29kZT1KLFAuY2hhckNvZGU9en19dS5kaXNwYXRjaEV2ZW50KFApfWVsc2UgYihhLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnRPYmplY3QpPyhQPWEuY29uZmlnLmRvYy5jcmVhdGVFdmVudE9iamVjdCgpLFAuYnViYmxlcz13LFAuY2FuY2VsYWJsZT1ILFAudmlldz1GLFAuY3RybEtleT1CLFAuYWx0S2V5PUksUC5zaGlmdEtleT1NLFAubWV0YUtleT1ELFAua2V5Q29kZT0wPHo/ejpKLHUuZmlyZUV2ZW50KCJvbiIrQSxQKSk6YS5lcnJvcigic2ltdWxhdGVLZXlFdmVudCgpOiBObyBldmVudCBzaW11bGF0aW9uIGZyYW1ld29yayBwcmVzZW50LiIpfWVsc2UgaWYocFt3XSlBPXcsdz16LmJ1YmJsZXMsSD16LmNhbmNlbGFibGUsRj16LnZpZXcsej16LmRldGFpbCx1fHxhLmVycm9yKCJzaW11bGF0ZVVJRXZlbnQoKTogSW52YWxpZCB0YXJnZXQuIiksZChBKT8oQT1BLnRvTG93ZXJDYXNlKCksCnBbQV18fGEuZXJyb3IoInNpbXVsYXRlVUlFdmVudCgpOiBFdmVudCB0eXBlICciK0ErIicgbm90IHN1cHBvcnRlZC4iKSk6YS5lcnJvcigic2ltdWxhdGVVSUV2ZW50KCk6IEV2ZW50IHR5cGUgbXVzdCBiZSBhIHN0cmluZy4iKSxCPW51bGwsYyh3KXx8KHc9QSBpbiBzKSxjKEgpfHwoSD0ic3VibWl0Ij09PUEpLGIoRil8fChGPWEuY29uZmlnLndpbiksZyh6KXx8KHo9MSksZihhLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnQpPyhCPWEuY29uZmlnLmRvYy5jcmVhdGVFdmVudCgiVUlFdmVudHMiKSxCLmluaXRVSUV2ZW50KEEsdyxILEYseiksdS5kaXNwYXRjaEV2ZW50KEIpKTpiKGEuY29uZmlnLmRvYy5jcmVhdGVFdmVudE9iamVjdCk/KEI9YS5jb25maWcuZG9jLmNyZWF0ZUV2ZW50T2JqZWN0KCksQi5idWJibGVzPXcsQi5jYW5jZWxhYmxlPUgsQi52aWV3PUYsQi5kZXRhaWw9eix1LmZpcmVFdmVudCgib24iK0EsQikpOmEuZXJyb3IoInNpbXVsYXRlVUlFdmVudCgpOiBObyBldmVudCBzaW11bGF0aW9uIGZyYW1ld29yayBwcmVzZW50LiIpOwplbHNlIGlmKGxbd10paWYoYS5jb25maWcud2luJiYib250b3VjaHN0YXJ0ImluIGEuY29uZmlnLndpbiYmIShhLlVBLnBoYW50b21qc3x8YS5VQS5jaHJvbWUmJjY+YS5VQS5jaHJvbWUpKXt2YXIgSD16LmJ1YmJsZXMsRj16LmNhbmNlbGFibGUsQj16LnZpZXcsST16LmRldGFpbCxNPXouc2NyZWVuWCxEPXouc2NyZWVuWSxKPXouY2xpZW50WCxQPXouY2xpZW50WSxWPXouY3RybEtleSxZPXouYWx0S2V5LG5hPXouc2hpZnRLZXksZmE9ei5tZXRhS2V5LGlhPXoudG91Y2hlcyxvYT16LnRhcmdldFRvdWNoZXMsQWE9ei5jaGFuZ2VkVG91Y2hlcyxwYT16LnNjYWxlO3o9ei5yb3RhdGlvbjt1fHxhLmVycm9yKCJzaW11bGF0ZVRvdWNoRXZlbnQoKTogSW52YWxpZCB0YXJnZXQuIik7YS5MYW5nLmlzU3RyaW5nKHcpPyh3PXcudG9Mb3dlckNhc2UoKSxsW3ddfHxhLmVycm9yKCJzaW11bGF0ZVRvdWNoRXZlbnQoKTogRXZlbnQgdHlwZSAnIit3KyInIG5vdCBzdXBwb3J0ZWQuIikpOmEuZXJyb3IoInNpbXVsYXRlVG91Y2hFdmVudCgpOiBFdmVudCB0eXBlIG11c3QgYmUgYSBzdHJpbmcuIik7CiJ0b3VjaHN0YXJ0Ij09PXd8fCJ0b3VjaG1vdmUiPT09dz8wPT09aWEubGVuZ3RoJiZhLmVycm9yKCJzaW11bGF0ZVRvdWNoRXZlbnQoKTogTm8gdG91Y2ggb2JqZWN0IGluIHRvdWNoZXMiKToidG91Y2hlbmQiPT09dyYmMD09PUFhLmxlbmd0aCYmYS5lcnJvcigic2ltdWxhdGVUb3VjaEV2ZW50KCk6IE5vIHRvdWNoIG9iamVjdCBpbiBjaGFuZ2VkVG91Y2hlcyIpO2EuTGFuZy5pc0Jvb2xlYW4oSCl8fChIPSEwKTthLkxhbmcuaXNCb29sZWFuKEYpfHwoRj0idG91Y2hjYW5jZWwiIT09dyk7YS5MYW5nLmlzT2JqZWN0KEIpfHwoQj1hLmNvbmZpZy53aW4pO2EuTGFuZy5pc051bWJlcihJKXx8KEk9MSk7YS5MYW5nLmlzTnVtYmVyKE0pfHwoTT0wKTthLkxhbmcuaXNOdW1iZXIoRCl8fChEPTApO2EuTGFuZy5pc051bWJlcihKKXx8KEo9MCk7YS5MYW5nLmlzTnVtYmVyKFApfHwoUD0wKTthLkxhbmcuaXNCb29sZWFuKFYpfHwoVj0hMSk7YS5MYW5nLmlzQm9vbGVhbihZKXx8KFk9ITEpOwphLkxhbmcuaXNCb29sZWFuKG5hKXx8KG5hPSExKTthLkxhbmcuaXNCb29sZWFuKGZhKXx8KGZhPSExKTthLkxhbmcuaXNOdW1iZXIocGEpfHwocGE9MSk7YS5MYW5nLmlzTnVtYmVyKHopfHwoej0wKTthLkxhbmcuaXNGdW5jdGlvbihhLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnQpPyhhLlVBLmFuZHJvaWQ/ND5hLlVBLmFuZHJvaWQ/KEE9YS5jb25maWcuZG9jLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLEEuaW5pdE1vdXNlRXZlbnQodyxILEYsQixJLE0sRCxKLFAsVixZLG5hLGZhLDAsdSksQS50b3VjaGVzPWlhLEEudGFyZ2V0VG91Y2hlcz1vYSxBLmNoYW5nZWRUb3VjaGVzPUFhKTooQT1hLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnQoIlRvdWNoRXZlbnQiKSxBLmluaXRUb3VjaEV2ZW50KGlhLG9hLEFhLHcsQixNLEQsSixQLFYsWSxuYSxmYSkpOmEuVUEuaW9zPzI8PWEuVUEuaW9zPyhBPWEuY29uZmlnLmRvYy5jcmVhdGVFdmVudCgiVG91Y2hFdmVudCIpLEEuaW5pdFRvdWNoRXZlbnQodywKSCxGLEIsSSxNLEQsSixQLFYsWSxuYSxmYSxpYSxvYSxBYSxwYSx6KSk6YS5lcnJvcigic2ltdWxhdGVUb3VjaEV2ZW50KCk6IE5vIHRvdWNoIGV2ZW50IHNpbXVsYXRpb24gZnJhbWV3b3JrIHByZXNlbnQgZm9yIGlPUywgIithLlVBLmlvcysiLiIpOmEuZXJyb3IoInNpbXVsYXRlVG91Y2hFdmVudCgpOiBOb3Qgc3VwcG9ydGVkIGFnZW50IHlldCwgIithLlVBLnVzZXJBZ2VudCksdS5kaXNwYXRjaEV2ZW50KEEpKTphLmVycm9yKCJzaW11bGF0ZVRvdWNoRXZlbnQoKTogTm8gZXZlbnQgc2ltdWxhdGlvbiBmcmFtZXdvcmsgcHJlc2VudC4iKX1lbHNlIGEuZXJyb3IoInNpbXVsYXRlKCk6IEV2ZW50ICciK3crIicgY2FuJ3QgYmUgc2ltdWxhdGVkLiBVc2UgZ2VzdHVyZS1zaW11bGF0ZSBtb2R1bGUgaW5zdGVhZC4iKTtlbHNlIGEuVUEuaW9zJiYyPD1hLlVBLmlvcyYmaFt3XT8oQT13LHc9ei5idWJibGVzLEg9ei5jYW5jZWxhYmxlLEY9ei52aWV3LEI9ei5kZXRhaWwsST16LnNjcmVlblgsCk09ei5zY3JlZW5ZLEQ9ei5jbGllbnRYLEo9ei5jbGllbnRZLFA9ei5jdHJsS2V5LFY9ei5hbHRLZXksWT16LnNoaWZ0S2V5LG5hPXoubWV0YUtleSxmYT16LnNjYWxlLHo9ei5yb3RhdGlvbiwoIWEuVUEuaW9zfHwyPmEuVUEuaW9zKSYmYS5lcnJvcigic2ltdWxhdGVHZXN0dXJlRXZlbnQoKTogTmF0aXZlIGdlc3R1cmUgRE9NIGV2ZW50ZnJhbWUgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHBsYXRmb3JtLiIpLHV8fGEuZXJyb3IoInNpbXVsYXRlR2VzdHVyZUV2ZW50KCk6IEludmFsaWQgdGFyZ2V0LiIpLGEuTGFuZy5pc1N0cmluZyhBKT8oQT1BLnRvTG93ZXJDYXNlKCksaFtBXXx8YS5lcnJvcigic2ltdWxhdGVUb3VjaEV2ZW50KCk6IEV2ZW50IHR5cGUgJyIrQSsiJyBub3Qgc3VwcG9ydGVkLiIpKTphLmVycm9yKCJzaW11bGF0ZUdlc3R1cmVFdmVudCgpOiBFdmVudCB0eXBlIG11c3QgYmUgYSBzdHJpbmcuIiksYS5MYW5nLmlzQm9vbGVhbih3KXx8KHc9ITApLGEuTGFuZy5pc0Jvb2xlYW4oSCl8fAooSD0hMCksYS5MYW5nLmlzT2JqZWN0KEYpfHwoRj1hLmNvbmZpZy53aW4pLGEuTGFuZy5pc051bWJlcihCKXx8KEI9MiksYS5MYW5nLmlzTnVtYmVyKEkpfHwoST0wKSxhLkxhbmcuaXNOdW1iZXIoTSl8fChNPTApLGEuTGFuZy5pc051bWJlcihEKXx8KEQ9MCksYS5MYW5nLmlzTnVtYmVyKEopfHwoSj0wKSxhLkxhbmcuaXNCb29sZWFuKFApfHwoUD0hMSksYS5MYW5nLmlzQm9vbGVhbihWKXx8KFY9ITEpLGEuTGFuZy5pc0Jvb2xlYW4oWSl8fChZPSExKSxhLkxhbmcuaXNCb29sZWFuKG5hKXx8KG5hPSExKSxhLkxhbmcuaXNOdW1iZXIoZmEpfHwoZmE9MSksYS5MYW5nLmlzTnVtYmVyKHopfHwoej0wKSxpYT1hLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnQoIkdlc3R1cmVFdmVudCIpLGlhLmluaXRHZXN0dXJlRXZlbnQoQSx3LEgsRixCLEksTSxELEosUCxWLFksbmEsdSxmYSx6KSx1LmRpc3BhdGNoRXZlbnQoaWEpKTphLmVycm9yKCJzaW11bGF0ZSgpOiBFdmVudCAnIit3KyInIGNhbid0IGJlIHNpbXVsYXRlZC4iKX19KSgpfSwKInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZXZlbnQtYmFzZSJdfSk7CllVSS5hZGQoImV2ZW50LXN5bnRoZXRpYyIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKHMsbCl7dGhpcy5oYW5kbGU9czt0aGlzLmVtaXRGYWNhZGU9bH1mdW5jdGlvbiB0KHMsbCxoKXt0aGlzLmhhbmRsZXM9W107dGhpcy5lbD1zO3RoaXMua2V5PWg7dGhpcy5kb21rZXk9bH1mdW5jdGlvbiBmKCl7dGhpcy5faW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGQ9YS5DdXN0b21FdmVudCxjPWEuRW52LmV2dC5kb21fbWFwLGI9YS5BcnJheSxnPWEuTGFuZyxlPWcuaXNPYmplY3Qsaz1nLmlzU3RyaW5nLG09Zy5pc0FycmF5LHA9YS5TZWxlY3Rvci5xdWVyeSxnPWZ1bmN0aW9uKCl7fTtxLnByb3RvdHlwZS5maXJlPWZ1bmN0aW9uKHMpe3ZhciBsPWIoYXJndW1lbnRzLDAsITApLGg9dGhpcy5oYW5kbGUsdT1oLmV2dCxoPWguc3ViLHc9aC5jb250ZXh0LHo9aC5maWx0ZXIsQT1zfHx7fTt0aGlzLmVtaXRGYWNhZGU/KHMmJnMucHJldmVudERlZmF1bHR8fChBPXUuX2dldEZhY2FkZSgpLAplKHMpJiYhcy5wcmV2ZW50RGVmYXVsdD8oYS5taXgoQSxzLCEwKSxsWzBdPUEpOmwudW5zaGlmdChBKSksQS50eXBlPXUudHlwZSxBLmRldGFpbHM9bC5zbGljZSgpLHomJihBLmNvbnRhaW5lcj11Lmhvc3QpKTp6JiZlKHMpJiZzLmN1cnJlbnRUYXJnZXQmJmwuc2hpZnQoKTtoLmNvbnRleHQ9d3x8QS5jdXJyZW50VGFyZ2V0fHx1Lmhvc3Q7ej11LmZpcmUuYXBwbHkodSxsKTtzLnByZXZlbnRlZCYmdS5wcmV2ZW50ZWRGbiYmdS5wcmV2ZW50ZWRGbi5hcHBseSh1LGwpO3Muc3RvcHBlZCYmdS5zdG9wcGVkRm4mJnUuc3RvcHBlZEZuLmFwcGx5KHUsbCk7aC5jb250ZXh0PXc7cmV0dXJuIHp9O3QucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0LHR5cGU6Il9zeW50aCIsZm46ZyxjYXB0dXJlOiExLHJlZ2lzdGVyOmZ1bmN0aW9uKHMpe3MuZXZ0LnJlZ2lzdHJ5PXRoaXM7dGhpcy5oYW5kbGVzLnB1c2gocyl9LHVucmVnaXN0ZXI6ZnVuY3Rpb24ocyl7dmFyIGw9dGhpcy5oYW5kbGVzLGg9Y1t0aGlzLmRvbWtleV0sCnU7Zm9yKHU9bC5sZW5ndGgtMTswPD11Oy0tdSlpZihsW3VdLnN1Yj09PXMpe2wuc3BsaWNlKHUsMSk7YnJlYWt9bC5sZW5ndGh8fChkZWxldGUgaFt0aGlzLmtleV0sYS5PYmplY3Quc2l6ZShoKXx8ZGVsZXRlIGNbdGhpcy5kb21rZXldKX0sZGV0YWNoQWxsOmZ1bmN0aW9uKCl7Zm9yKHZhciBzPXRoaXMuaGFuZGxlcyxsPXMubGVuZ3RoOzA8PS0tbDspc1tsXS5kZXRhY2goKX19O2EubWl4KGYse05vdGlmaWVyOnEsU3ludGhSZWdpc3RyeTp0LGdldFJlZ2lzdHJ5OmZ1bmN0aW9uKHMsbCxoKXtzPXMuX25vZGU7dmFyIHU9YS5zdGFtcChzKTtsPSJldmVudDoiK3UrbCsiX3N5bnRoIjt2YXIgdz1jW3VdO2gmJih3fHwodz1jW3VdPXt9KSx3W2xdfHwod1tsXT1uZXcgdChzLHUsbCkpKTtyZXR1cm4gdyYmd1tsXXx8bnVsbH0sX2RlbGV0ZVN1YjpmdW5jdGlvbihzKXtpZihzJiZzLmZuKXt2YXIgbD10aGlzLmV2ZW50RGVmLGg9cy5maWx0ZXI/ImRldGFjaERlbGVnYXRlIjoiZGV0YWNoIjsKdGhpcy5fc3Vic2NyaWJlcnM9W107ZC5rZWVwRGVwcmVjYXRlZFN1YnMmJih0aGlzLnN1YnNjcmliZXJzPXt9KTtsW2hdKHMubm9kZSxzLHRoaXMubm90aWZpZXIscy5maWx0ZXIpO3RoaXMucmVnaXN0cnkudW5yZWdpc3RlcihzKTtkZWxldGUgcy5mbjtkZWxldGUgcy5ub2RlO2RlbGV0ZSBzLmNvbnRleHR9fSxwcm90b3R5cGU6e2NvbnN0cnVjdG9yOmYsX2luaXQ6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLnB1Ymxpc2hDb25maWd8fCh0aGlzLnB1Ymxpc2hDb25maWc9e30pO3RoaXMuZW1pdEZhY2FkZT0iZW1pdEZhY2FkZSJpbiBzP3MuZW1pdEZhY2FkZTohMDtzLmVtaXRGYWNhZGU9ITF9LHByb2Nlc3NBcmdzOmcsb246ZyxkZXRhY2g6ZyxkZWxlZ2F0ZTpnLGRldGFjaERlbGVnYXRlOmcsX29uOmZ1bmN0aW9uKHMsbCl7dmFyIGg9W10sdT1zLnNsaWNlKCksdz10aGlzLnByb2Nlc3NBcmdzKHMsbCksej1zWzJdLEE9bD8iZGVsZWdhdGUiOiJvbiIsSCxGO0g9ayh6KT9wKHopOmIoenx8CmEub25lKGEuY29uZmlnLndpbikpO2lmKCFILmxlbmd0aCYmayh6KSlyZXR1cm4gRj1hLm9uKCJhdmFpbGFibGUiLGZ1bmN0aW9uKCl7YS5taXgoRixhW0FdLmFwcGx5KGEsdSksITApfSx6KTthLkFycmF5LmVhY2goSCxmdW5jdGlvbihCKXt2YXIgST1zLnNsaWNlKCksTTtpZihCPWEub25lKEIpKWwmJihNPUkuc3BsaWNlKDMsMSlbMF0pLEkuc3BsaWNlKDAsNCxJWzFdLElbM10pLHRoaXMucHJldmVudER1cHMmJnRoaXMuZ2V0U3VicyhCLHMsbnVsbCwhMCl8fGgucHVzaCh0aGlzLl9zdWJzY3JpYmUoQixBLEksdyxNKSl9LHRoaXMpO3JldHVybiAxPT09aC5sZW5ndGg/aFswXTpuZXcgYS5FdmVudEhhbmRsZShoKX0sX3N1YnNjcmliZTpmdW5jdGlvbihzLGwsaCx1LHcpe3ZhciB6PW5ldyBhLkN1c3RvbUV2ZW50KHRoaXMudHlwZSx0aGlzLnB1Ymxpc2hDb25maWcpO2g9ei5vbi5hcHBseSh6LGgpO3ZhciBBPW5ldyBxKGgsdGhpcy5lbWl0RmFjYWRlKSxIPWYuZ2V0UmVnaXN0cnkocywKdGhpcy50eXBlLCEwKSxGPWguc3ViO0Yubm9kZT1zO0YuZmlsdGVyPXc7dSYmdGhpcy5hcHBseUFyZ0V4dHJhcyh1LEYpO2EubWl4KHose2V2ZW50RGVmOnRoaXMsbm90aWZpZXI6QSxob3N0OnMsY3VycmVudFRhcmdldDpzLHRhcmdldDpzLGVsOnMuX25vZGUsX2RlbGV0ZTpmLl9kZWxldGVTdWJ9LCEwKTtoLm5vdGlmaWVyPUE7SC5yZWdpc3RlcihoKTt0aGlzW2xdKHMsRixBLHcpO3JldHVybiBofSxhcHBseUFyZ0V4dHJhczpmdW5jdGlvbihzLGwpe2wuX2V4dHJhPXN9LF9kZXRhY2g6ZnVuY3Rpb24ocyl7dmFyIGw9c1syXSxsPWsobCk/cChsKTpiKGwpLGgsdSx3LHo7cy5zcGxpY2UoMiwxKTt1PTA7Zm9yKHc9bC5sZW5ndGg7dTx3OysrdSlpZihoPWEub25lKGxbdV0pKWlmKGg9dGhpcy5nZXRTdWJzKGgscykpZm9yKHo9aC5sZW5ndGgtMTswPD16Oy0teiloW3pdLmRldGFjaCgpfSxnZXRTdWJzOmZ1bmN0aW9uKHMsbCxoLHUpe3ZhciB3PWYuZ2V0UmVnaXN0cnkocyx0aGlzLnR5cGUpOwpzPVtdO3ZhciB6LEEsSDtpZih3KWZvcih3PXcuaGFuZGxlcyxofHwoaD10aGlzLnN1Yk1hdGNoKSx6PTAsQT13Lmxlbmd0aDt6PEE7Kyt6KWlmKEg9d1t6XSxoLmNhbGwodGhpcyxILnN1YixsKSl7aWYodSlyZXR1cm4gSDtzLnB1c2god1t6XSl9cmV0dXJuIHMubGVuZ3RoJiZzfSxzdWJNYXRjaDpmdW5jdGlvbihzLGwpe3JldHVybiFsWzFdfHxzLmZuPT09bFsxXX19fSwhMCk7YS5TeW50aGV0aWNFdmVudD1mO2EuRXZlbnQuZGVmaW5lPWZ1bmN0aW9uKHMsbCxoKXt2YXIgdSx3O3MmJnMudHlwZT8odT1zLGg9bCk6bCYmKHU9YS5tZXJnZSh7dHlwZTpzfSxsKSk7aWYodSl7aWYoaHx8IWEuTm9kZS5ET01fRVZFTlRTW3UudHlwZV0pcz1mdW5jdGlvbigpe2YuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxhLmV4dGVuZChzLGYsdSksdz1uZXcgcyxzPXcudHlwZSxhLk5vZGUuRE9NX0VWRU5UU1tzXT1hLkVudi5ldnQucGx1Z2luc1tzXT17ZXZlbnREZWY6dyxvbjpmdW5jdGlvbigpe3JldHVybiB3Ll9vbihiKGFyZ3VtZW50cykpfSwKZGVsZWdhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdy5fb24oYihhcmd1bWVudHMpLCEwKX0sZGV0YWNoOmZ1bmN0aW9uKCl7cmV0dXJuIHcuX2RldGFjaChiKGFyZ3VtZW50cykpfX19ZWxzZShrKHMpfHxtKHMpKSYmYS5BcnJheS5lYWNoKGIocyksZnVuY3Rpb24oeil7YS5Ob2RlLkRPTV9FVkVOVFNbel09MX0pO3JldHVybiB3fX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsibm9kZS1iYXNlIiwiZXZlbnQtY3VzdG9tLWNvbXBsZXgiXX0pOwpZVUkuYWRkKCJpbnRsIixmdW5jdGlvbihhLEUpe3ZhciBxPXt9LHQ9W107YS5taXgoYS5uYW1lc3BhY2UoIkludGwiKSx7X21vZDpmdW5jdGlvbihmKXtxW2ZdfHwocVtmXT17fSk7cmV0dXJuIHFbZl19LHNldExhbmc6ZnVuY3Rpb24oZixkKXt2YXIgYz10aGlzLl9tb2QoZiksYj1jLnl1aUFjdGl2ZUxhbmcsZz0hIWNbZF07ZyYmZCE9PWImJihjLnl1aUFjdGl2ZUxhbmc9ZCx0aGlzLmZpcmUoImludGw6bGFuZ0NoYW5nZSIse21vZHVsZTpmLHByZXZWYWw6YixuZXdWYWw6Inl1aVJvb3RMYW5nIj09PWQ/IiI6ZH0pKTtyZXR1cm4gZ30sZ2V0TGFuZzpmdW5jdGlvbihmKXtmPXRoaXMuX21vZChmKS55dWlBY3RpdmVMYW5nO3JldHVybiJ5dWlSb290TGFuZyI9PT1mPyIiOmZ9LGFkZDpmdW5jdGlvbihmLGQsYyl7ZD1kfHwieXVpUm9vdExhbmciO3RoaXMuX21vZChmKVtkXT1jO3RoaXMuc2V0TGFuZyhmLGQpfSxnZXQ6ZnVuY3Rpb24oZixkLGMpe2Y9dGhpcy5fbW9kKGYpO2M9Y3x8Zi55dWlBY3RpdmVMYW5nOwpjPWZbY118fHt9O3JldHVybiBkP2NbZF06YS5tZXJnZShjKX0sZ2V0QXZhaWxhYmxlTGFuZ3M6ZnVuY3Rpb24oZil7dmFyIGQ9YS5FbnYuX2xvYWRlcjtyZXR1cm4oZj0oZj1kJiZkLm1vZHVsZUluZm9bZl0pJiZmLmxhbmcpP2YuY29uY2F0KCk6dH19KTthLmF1Z21lbnQoYS5JbnRsLGEuRXZlbnRUYXJnZXQpO2EuSW50bC5wdWJsaXNoKCJpbnRsOmxhbmdDaGFuZ2UiLHtlbWl0RmFjYWRlOiEwfSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImludGwtYmFzZSIsImV2ZW50LWN1c3RvbSJdfSk7CllVSS5hZGQoImlvLWJhc2UiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcShtKXt0aGlzLl91aWQ9ImlvOiIrYysrO3RoaXMuX2luaXQobSk7YS5pby5fbWFwW3RoaXMuX3VpZF09dGhpc312YXIgdD0ic3RhcnQgY29tcGxldGUgZW5kIHN1Y2Nlc3MgZmFpbHVyZSBwcm9ncmVzcyIuc3BsaXQoIiAiKSxmPVsic3RhdHVzIiwic3RhdHVzVGV4dCIsInJlc3BvbnNlVGV4dCIsInJlc3BvbnNlWE1MIl0sZD1hLmNvbmZpZy53aW4sYz0wO3EucHJvdG90eXBlPXtfaWQ6MCxfaGVhZGVyczp7IlgtUmVxdWVzdGVkLVdpdGgiOiJYTUxIdHRwUmVxdWVzdCJ9LF90aW1lb3V0Ont9LF9pbml0OmZ1bmN0aW9uKG0pe3ZhciBwLHM7dGhpcy5jZmc9bXx8e307YS5hdWdtZW50KHRoaXMsYS5FdmVudFRhcmdldCk7cD0wO2ZvcihzPXQubGVuZ3RoO3A8czsrK3ApdGhpcy5wdWJsaXNoKCJpbzoiK3RbcF0sYS5tZXJnZSh7YnJvYWRjYXN0OjF9LG0pKSx0aGlzLnB1Ymxpc2goImlvLXRybjoiK3RbcF0sbSl9LApfY3JlYXRlOmZ1bmN0aW9uKG0scCl7dmFyIHM9dGhpcyxsPXtpZDphLkxhbmcuaXNOdW1iZXIocCk/cDpzLl9pZCsrLHVpZDpzLl91aWR9LGg9bS54ZHI/bS54ZHIudXNlOm51bGwsdT1tLmZvcm0mJm0uZm9ybS51cGxvYWQ/ImlmcmFtZSI6bnVsbDsibmF0aXZlIj09PWgmJihoPWEuVUEuaWUmJiFrPyJ4ZHIiOm51bGwscy5zZXRIZWFkZXIoIlgtUmVxdWVzdGVkLVdpdGgiKSk7bD0oaD1ofHx1KT9hLm1lcmdlKGEuSU8uY3VzdG9tVHJhbnNwb3J0KGgpLGwpOmEubWVyZ2UoYS5JTy5kZWZhdWx0VHJhbnNwb3J0KCksbCk7bC5ub3RpZnkmJihtLm5vdGlmeT1mdW5jdGlvbih3LHosQSl7cy5ub3RpZnkodyx6LEEpfSk7IWgmJmQmJmQuRm9ybURhdGEmJm0uZGF0YSBpbnN0YW5jZW9mIGQuRm9ybURhdGEmJihsLmMudXBsb2FkLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24odyl7cy5wcm9ncmVzcyhsLHcsbSl9LGwuYy5vbmxvYWQ9ZnVuY3Rpb24odyl7cy5sb2FkKGwsdyxtKX0sbC5jLm9uZXJyb3I9CmZ1bmN0aW9uKHcpe3MuZXJyb3IobCx3LG0pfSxsLnVwbG9hZD0hMCk7cmV0dXJuIGx9LF9kZXN0cm95OmZ1bmN0aW9uKG0peyFkfHxtLm5vdGlmeXx8bS54ZHJ8fChiJiYhbS51cGxvYWQ/bS5jLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsOm0udXBsb2FkPyhtLmMudXBsb2FkLm9ucHJvZ3Jlc3M9bnVsbCxtLmMub25sb2FkPW51bGwsbS5jLm9uZXJyb3I9bnVsbCk6YS5VQS5pZSYmIW0uZSYmbS5jLmFib3J0KCkpO20uYz1udWxsfSxfZXZ0OmZ1bmN0aW9uKG0scCxzKXt2YXIgbCxoPXMuYXJndW1lbnRzLHU9dGhpcy5jZmcuZW1pdEZhY2FkZSx3PSJpbzoiK20sej0iaW8tdHJuOiIrbTt0aGlzLmRldGFjaCh6KTtwLmUmJihwLmM9e3N0YXR1czowLHN0YXR1c1RleHQ6cC5lfSk7bD1bdT97aWQ6cC5pZCxkYXRhOnAuYyxjZmc6cyxhcmd1bWVudHM6aH06cC5pZF07dXx8KG0hPT10WzBdJiZtIT09dFsyXSYmKHAuZXZ0P2wucHVzaChwLmV2dCk6bC5wdXNoKHAuYykpLGgmJmwucHVzaChoKSk7CmwudW5zaGlmdCh3KTt0aGlzLmZpcmUuYXBwbHkodGhpcyxsKTtzLm9uJiYobFswXT16LHRoaXMub25jZSh6LHMub25bbV0scy5jb250ZXh0fHxhKSx0aGlzLmZpcmUuYXBwbHkodGhpcyxsKSl9LHN0YXJ0OmZ1bmN0aW9uKG0scCl7dGhpcy5fZXZ0KHRbMF0sbSxwKX0sY29tcGxldGU6ZnVuY3Rpb24obSxwKXt0aGlzLl9ldnQodFsxXSxtLHApfSxlbmQ6ZnVuY3Rpb24obSxwKXt0aGlzLl9ldnQodFsyXSxtLHApO3RoaXMuX2Rlc3Ryb3kobSl9LHN1Y2Nlc3M6ZnVuY3Rpb24obSxwKXt0aGlzLl9ldnQodFszXSxtLHApO3RoaXMuZW5kKG0scCl9LGZhaWx1cmU6ZnVuY3Rpb24obSxwKXt0aGlzLl9ldnQodFs0XSxtLHApO3RoaXMuZW5kKG0scCl9LHByb2dyZXNzOmZ1bmN0aW9uKG0scCxzKXttLmV2dD1wO3RoaXMuX2V2dCh0WzVdLG0scyl9LGxvYWQ6ZnVuY3Rpb24obSxwLHMpe20uZXZ0PXAudGFyZ2V0O3RoaXMuX2V2dCh0WzFdLG0scyl9LGVycm9yOmZ1bmN0aW9uKG0scCxzKXttLmV2dD0KcDt0aGlzLl9ldnQodFs0XSxtLHMpfSxfcmV0cnk6ZnVuY3Rpb24obSxwLHMpe3RoaXMuX2Rlc3Ryb3kobSk7cy54ZHIudXNlPSJmbGFzaCI7cmV0dXJuIHRoaXMuc2VuZChwLHMsbS5pZCl9LF9jb25jYXQ6ZnVuY3Rpb24obSxwKXtyZXR1cm4gbSs9KC0xPT09bS5pbmRleE9mKCI/Iik/Ij8iOiJceDI2IikrcH0sc2V0SGVhZGVyOmZ1bmN0aW9uKG0scCl7cD90aGlzLl9oZWFkZXJzW21dPXA6ZGVsZXRlIHRoaXMuX2hlYWRlcnNbbV19LF9zZXRIZWFkZXJzOmZ1bmN0aW9uKG0scCl7cD1hLm1lcmdlKHRoaXMuX2hlYWRlcnMscCk7YS5PYmplY3QuZWFjaChwLGZ1bmN0aW9uKHMsbCl7ImRpc2FibGUiIT09cyYmbS5zZXRSZXF1ZXN0SGVhZGVyKGwscFtsXSl9KX0sX3N0YXJ0VGltZW91dDpmdW5jdGlvbihtLHApe3ZhciBzPXRoaXM7cy5fdGltZW91dFttLmlkXT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cy5fYWJvcnQobSwidGltZW91dCIpfSxwKX0sX2NsZWFyVGltZW91dDpmdW5jdGlvbihtKXtjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFttXSk7CmRlbGV0ZSB0aGlzLl90aW1lb3V0W21dfSxfcmVzdWx0OmZ1bmN0aW9uKG0scCl7dmFyIHM7dHJ5e3M9bS5jLnN0YXR1c31jYXRjaChsKXtzPTB9MjAwPD1zJiYzMDA+c3x8MzA0PT09c3x8MTIyMz09PXM/dGhpcy5zdWNjZXNzKG0scCk6dGhpcy5mYWlsdXJlKG0scCl9LF9yUzpmdW5jdGlvbihtLHApe3ZhciBzPXRoaXM7ND09PW0uYy5yZWFkeVN0YXRlJiYocC50aW1lb3V0JiZzLl9jbGVhclRpbWVvdXQobS5pZCksc2V0VGltZW91dChmdW5jdGlvbigpe3MuY29tcGxldGUobSxwKTtzLl9yZXN1bHQobSxwKX0sMCkpfSxfYWJvcnQ6ZnVuY3Rpb24obSxwKXttJiZtLmMmJihtLmU9cCxtLmMuYWJvcnQoKSl9LHNlbmQ6ZnVuY3Rpb24obSxwLHMpe3ZhciBsLGgsdSx3LHosQT10aGlzLEg9bSxGPXt9O3A9cD9hLk9iamVjdChwKTp7fTtsPUEuX2NyZWF0ZShwLHMpO3M9cC5tZXRob2Q/cC5tZXRob2QudG9VcHBlckNhc2UoKToiR0VUIjt3PXAuc3luYzt6PXAuZGF0YTthLkxhbmcuaXNPYmplY3QoeikmJgohei5ub2RlVHlwZSYmIWwudXBsb2FkJiZhLlF1ZXJ5U3RyaW5nJiZhLlF1ZXJ5U3RyaW5nLnN0cmluZ2lmeSYmKHAuZGF0YT16PWEuUXVlcnlTdHJpbmcuc3RyaW5naWZ5KHopKTtpZihwLmZvcm0pe2lmKHAuZm9ybS51cGxvYWQpcmV0dXJuIEEudXBsb2FkKGwsbSxwKTt6PUEuX3NlcmlhbGl6ZShwLmZvcm0seil9enx8KHo9IiIpO2lmKHopc3dpdGNoKHMpe2Nhc2UgIkdFVCI6Y2FzZSAiSEVBRCI6Y2FzZSAiREVMRVRFIjpIPUEuX2NvbmNhdChILHopO3o9IiI7YnJlYWs7Y2FzZSAiUE9TVCI6Y2FzZSAiUFVUIjpwLmhlYWRlcnM9YS5tZXJnZSh7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldFx4M2RVVEYtOCJ9LHAuaGVhZGVycyl9aWYobC54ZHIpcmV0dXJuIEEueGRyKEgsbCxwKTtpZihsLm5vdGlmeSlyZXR1cm4gbC5jLnNlbmQobCxtLHApO3d8fGwudXBsb2FkfHwobC5jLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe0EuX3JTKGwsCnApfSk7dHJ5e2lmKGwuYy5vcGVuKHMsSCwhdyxwLnVzZXJuYW1lfHxudWxsLHAucGFzc3dvcmR8fG51bGwpLEEuX3NldEhlYWRlcnMobC5jLHAuaGVhZGVyc3x8e30pLEEuc3RhcnQobCxwKSxwLnhkciYmcC54ZHIuY3JlZGVudGlhbHMmJmsmJihsLmMud2l0aENyZWRlbnRpYWxzPSEwKSxsLmMuc2VuZCh6KSx3KXtoPTA7Zm9yKHU9Zi5sZW5ndGg7aDx1OysraClGW2ZbaF1dPWwuY1tmW2hdXTtGLmdldEFsbFJlc3BvbnNlSGVhZGVycz1mdW5jdGlvbigpe3JldHVybiBsLmMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl9O0YuZ2V0UmVzcG9uc2VIZWFkZXI9ZnVuY3Rpb24oSSl7cmV0dXJuIGwuYy5nZXRSZXNwb25zZUhlYWRlcihJKX07QS5jb21wbGV0ZShsLHApO0EuX3Jlc3VsdChsLHApO3JldHVybiBGfX1jYXRjaChCKXtpZihsLnhkcilyZXR1cm4gQS5fcmV0cnkobCxtLHApO0EuY29tcGxldGUobCxwKTtBLl9yZXN1bHQobCxwKX1wLnRpbWVvdXQmJkEuX3N0YXJ0VGltZW91dChsLApwLnRpbWVvdXQpO3JldHVybntpZDpsLmlkLGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuYz9BLl9hYm9ydChsLCJhYm9ydCIpOiExfSxpc0luUHJvZ3Jlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gbC5jP2wuYy5yZWFkeVN0YXRlJTQ6ITF9LGlvOkF9fX07YS5pbz1mdW5jdGlvbihtLHApe3ZhciBzPWEuaW8uX21hcFsiaW86MCJdfHxuZXcgcTtyZXR1cm4gcy5zZW5kLmFwcGx5KHMsW20scF0pfTthLmlvLmhlYWRlcj1mdW5jdGlvbihtLHApeyhhLmlvLl9tYXBbImlvOjAiXXx8bmV3IHEpLnNldEhlYWRlcihtLHApfTthLklPPXE7YS5pby5fbWFwPXt9O3ZhciBiPWQmJmQuWE1MSHR0cFJlcXVlc3QsZz1kJiZkLlhEb21haW5SZXF1ZXN0LGU9ZCYmZC5BY3RpdmVYT2JqZWN0LGs9YiYmIndpdGhDcmVkZW50aWFscyJpbiBuZXcgWE1MSHR0cFJlcXVlc3Q7YS5taXgoYS5JTyx7X2RlZmF1bHQ6InhociIsZGVmYXVsdFRyYW5zcG9ydDpmdW5jdGlvbihtKXtpZihtKWEuSU8uX2RlZmF1bHQ9bTsKZWxzZSByZXR1cm57YzphLklPLnRyYW5zcG9ydHNbYS5JTy5fZGVmYXVsdF0oKSxub3RpZnk6InhociI9PT1hLklPLl9kZWZhdWx0PyExOiEwfX0sdHJhbnNwb3J0czp7eGhyOmZ1bmN0aW9uKCl7cmV0dXJuIGI/bmV3IFhNTEh0dHBSZXF1ZXN0OmU/bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik6bnVsbH0seGRyOmZ1bmN0aW9uKCl7cmV0dXJuIGc/bmV3IFhEb21haW5SZXF1ZXN0Om51bGx9LGlmcmFtZTpmdW5jdGlvbigpe3JldHVybnt9fSxmbGFzaDpudWxsLG5vZGVqczpudWxsfSxjdXN0b21UcmFuc3BvcnQ6ZnVuY3Rpb24obSl7dmFyIHA9e2M6YS5JTy50cmFuc3BvcnRzW21dKCl9O3BbInhkciI9PT1tfHwiZmxhc2giPT09bT8ieGRyIjoibm90aWZ5Il09ITA7cmV0dXJuIHB9fSk7YS5taXgoYS5JTy5wcm90b3R5cGUse25vdGlmeTpmdW5jdGlvbihtLHAscyl7c3dpdGNoKG0pe2Nhc2UgInRpbWVvdXQiOmNhc2UgImFib3J0IjpjYXNlICJ0cmFuc3BvcnQgZXJyb3IiOnAuYz0Ke3N0YXR1czowLHN0YXR1c1RleHQ6bX0sbT0iZmFpbHVyZSI7ZGVmYXVsdDp0aGlzW21dLmFwcGx5KHRoaXMsW3Asc10pfX19KX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZXZlbnQtY3VzdG9tLWJhc2UiLCJxdWVyeXN0cmluZy1zdHJpbmdpZnktc2ltcGxlIl19KTsKWVVJLmFkZCgiaW8tZm9ybSIsZnVuY3Rpb24oYSxFKXt2YXIgcT1lbmNvZGVVUklDb21wb25lbnQ7YS5JTy5zdHJpbmdpZnk9ZnVuY3Rpb24odCxmKXtmPWZ8fHt9O3JldHVybiBhLklPLnByb3RvdHlwZS5fc2VyaWFsaXplKHtpZDp0LHVzZURpc2FibGVkOmYudXNlRGlzYWJsZWR9LGYuZXh0cmEmJiJvYmplY3QiPT09dHlwZW9mIGYuZXh0cmE/YS5RdWVyeVN0cmluZy5zdHJpbmdpZnkoZi5leHRyYSk6Zi5leHRyYSl9O2EubWl4KGEuSU8ucHJvdG90eXBlLHtfc2VyaWFsaXplOmZ1bmN0aW9uKHQsZil7dmFyIGQ9W10sYz10LnVzZURpc2FibGVkfHwhMSxiPTAsZz0ic3RyaW5nIj09PXR5cGVvZiB0LmlkP3QuaWQ6dC5pZC5nZXRBdHRyaWJ1dGUoImlkIiksZSxrLG0scCxzLGwsaDtnfHwoZz1hLmd1aWQoImlvOiIpLHQuaWQuc2V0QXR0cmlidXRlKCJpZCIsZykpO2U9YS5jb25maWcuZG9jLmdldEVsZW1lbnRCeUlkKGcpO2lmKCFlfHwhZS5lbGVtZW50cylyZXR1cm4gZnx8IiI7cD0wOwpmb3Iocz1lLmVsZW1lbnRzLmxlbmd0aDtwPHM7KytwKWlmKGc9ZS5lbGVtZW50c1twXSxtPWcuZGlzYWJsZWQsaz1nLm5hbWUsYz9rOmsmJiFtKXN3aXRjaChrPXEoaykrIlx4M2QiLG09cShnLnZhbHVlKSxnLnR5cGUpe2Nhc2UgInNlbGVjdC1vbmUiOi0xPGcuc2VsZWN0ZWRJbmRleCYmKGg9Zy5vcHRpb25zW2cuc2VsZWN0ZWRJbmRleF0sZFtiKytdPWsrcShoLmF0dHJpYnV0ZXMudmFsdWUmJmguYXR0cmlidXRlcy52YWx1ZS5zcGVjaWZpZWQ/aC52YWx1ZTpoLnRleHQpKTticmVhaztjYXNlICJzZWxlY3QtbXVsdGlwbGUiOmlmKC0xPGcuc2VsZWN0ZWRJbmRleClmb3IobT1nLnNlbGVjdGVkSW5kZXgsbD1nLm9wdGlvbnMubGVuZ3RoO208bDsrK20paD1nLm9wdGlvbnNbbV0saC5zZWxlY3RlZCYmKGRbYisrXT1rK3EoaC5hdHRyaWJ1dGVzLnZhbHVlJiZoLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lmaWVkP2gudmFsdWU6aC50ZXh0KSk7YnJlYWs7Y2FzZSAicmFkaW8iOmNhc2UgImNoZWNrYm94IjpnLmNoZWNrZWQmJgooZFtiKytdPWsrbSk7YnJlYWs7Y2FzZSAiZmlsZSI6Y2FzZSB2b2lkIDA6Y2FzZSAicmVzZXQiOmNhc2UgImJ1dHRvbiI6YnJlYWs7ZGVmYXVsdDpkW2IrK109ayttfWYmJihkW2IrK109Zik7cmV0dXJuIGQuam9pbigiXHgyNiIpfX0sITApfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJpby1iYXNlIiwibm9kZS1iYXNlIl19KTsKWVVJLmFkZCgiaW8tcXVldWUiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcShmLGQpe3JldHVybiB0LnF1ZXVlLmFwcGx5KHQsW2YsZF0pfXZhciB0PWEuaW8uX21hcFsiaW86MCJdfHxuZXcgYS5JTzthLm1peChhLklPLnByb3RvdHlwZSx7X3E6bmV3IGEuUXVldWUsX3FBY3RpdmVJZDpudWxsLF9xSW5pdDohMSxfcVN0YXRlOjEsX3FTaGlmdDpmdW5jdGlvbigpe3ZhciBmPXRoaXMuX3EubmV4dCgpO3RoaXMuX3FBY3RpdmVJZD1mLmlkO3RoaXMuX3FTdGF0ZT0wO3RoaXMuc2VuZChmLnVyaSxmLmNmZyxmLmlkKX0scXVldWU6ZnVuY3Rpb24oZixkKXt2YXIgYz10aGlzLGI9e3VyaTpmLGNmZzpkLGlkOnRoaXMuX2lkKyt9O2MuX3FJbml0fHwoYS5vbigiaW86Y29tcGxldGUiLGZ1bmN0aW9uKGcsZSl7Yy5fcU5leHQoZyl9LGMpLGMuX3FJbml0PSEwKTtjLl9xLmFkZChiKTsxPT09Yy5fcVN0YXRlJiZjLl9xU2hpZnQoKTtyZXR1cm4gYn0sX3FOZXh0OmZ1bmN0aW9uKGYpe3RoaXMuX3FTdGF0ZT0KMTt0aGlzLl9xQWN0aXZlSWQ9PT1mJiYwPHRoaXMuX3Euc2l6ZSgpJiZ0aGlzLl9xU2hpZnQoKX0scVByb21vdGU6ZnVuY3Rpb24oZil7dGhpcy5fcS5wcm9tb3RlKGYpfSxxUmVtb3ZlOmZ1bmN0aW9uKGYpe3RoaXMuX3EucmVtb3ZlKGYpfSxxRW1wdHk6ZnVuY3Rpb24oKXt0aGlzLl9xPW5ldyBhLlF1ZXVlfSxxU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9xU3RhdGU9MTswPHRoaXMuX3Euc2l6ZSgpJiZ0aGlzLl9xU2hpZnQoKX0scVN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9xU3RhdGU9MH0scVNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcS5zaXplKCl9fSwhMCk7cS5zdGFydD1mdW5jdGlvbigpe3QucVN0YXJ0KCl9O3Euc3RvcD1mdW5jdGlvbigpe3QucVN0b3AoKX07cS5wcm9tb3RlPWZ1bmN0aW9uKGYpe3QucVByb21vdGUoZil9O3EucmVtb3ZlPWZ1bmN0aW9uKGYpe3QucVJlbW92ZShmKX07cS5zaXplPWZ1bmN0aW9uKCl7dC5xU2l6ZSgpfTtxLmVtcHR5PWZ1bmN0aW9uKCl7dC5xRW1wdHkoKX07CmEuaW8ucXVldWU9cX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiaW8tYmFzZSIsInF1ZXVlLXByb21vdGUiXX0pOwpZVUkuYWRkKCJpby11cGxvYWQtaWZyYW1lIixmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEoZSxrLG0pe3ZhciBwPWEuTm9kZS5jcmVhdGUoJ1x4M2NpZnJhbWUgaWRceDNkImlvX2lmcmFtZScrZS5pZCsnIiBuYW1lXHgzZCJpb19pZnJhbWUnK2UuaWQrJyIgL1x4M2UnKTtwLl9ub2RlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cC5fbm9kZS5zdHlsZS50b3A9Ii0xMDAwcHgiO3AuX25vZGUuc3R5bGUubGVmdD0iLTEwMDBweCI7YS5vbmUoImJvZHkiKS5hcHBlbmRDaGlsZChwKTthLm9uKCJsb2FkIixmdW5jdGlvbigpe20uX3VwbG9hZENvbXBsZXRlKGUsayl9LCIjaW9faWZyYW1lIitlLmlkKX1mdW5jdGlvbiB0KGUpe2EuRXZlbnQucHVyZ2VFbGVtZW50KCIjaW9faWZyYW1lIitlLCExKTthLm9uZSgiYm9keSIpLnJlbW92ZUNoaWxkKGEub25lKCIjaW9faWZyYW1lIitlKSl9dmFyIGY9YS5jb25maWcud2luLGQ9YS5jb25maWcuZG9jLGM9ZC5kb2N1bWVudE1vZGUmJjg8PWQuZG9jdW1lbnRNb2RlLApiPWRlY29kZVVSSUNvbXBvbmVudCxnPWEuSU8ucHJvdG90eXBlLmVuZDthLm1peChhLklPLnByb3RvdHlwZSx7X2FkZERhdGE6ZnVuY3Rpb24oZSxrKXthLkxhbmcuaXNPYmplY3QoaykmJihrPWEuUXVlcnlTdHJpbmcuc3RyaW5naWZ5KGspKTt2YXIgbT1bXSxwPWsuc3BsaXQoIlx4M2QiKSxzLGw7cz0wO2ZvcihsPXAubGVuZ3RoLTE7czxsO3MrKyl7dmFyIGg9YihwW3NdLnN1YnN0cmluZyhwW3NdLmxhc3RJbmRleE9mKCJceDI2IikrMSkpO2UuZWxlbWVudHNbaF18fChtW3NdPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxtW3NdLnR5cGU9ImhpZGRlbiIsbVtzXS5uYW1lPWgsbVtzXS52YWx1ZT1zKzE9PT1sP2IocFtzKzFdKTpiKHBbcysxXS5zdWJzdHJpbmcoMCxwW3MrMV0ubGFzdEluZGV4T2YoIlx4MjYiKSkpLGUuYXBwZW5kQ2hpbGQobVtzXSkpfXJldHVybiBtfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLGspe3ZhciBtLHA7bT0wO2ZvcihwPWsubGVuZ3RoO208cDttKyspZS5yZW1vdmVDaGlsZChrW21dKX0sCl9zZXRBdHRyczpmdW5jdGlvbihlLGssbSl7dGhpcy5fb3JpZ2luYWxGb3JtQXR0cnM9e2FjdGlvbjplLmdldEF0dHJpYnV0ZSgiYWN0aW9uIiksdGFyZ2V0OmUuZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKX07ZS5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsbSk7ZS5zZXRBdHRyaWJ1dGUoIm1ldGhvZCIsIlBPU1QiKTtlLnNldEF0dHJpYnV0ZSgidGFyZ2V0IiwiaW9faWZyYW1lIitrKTtlLnNldEF0dHJpYnV0ZShhLlVBLmllJiYhYz8iZW5jb2RpbmciOiJlbmN0eXBlIiwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpfSxfcmVzZXRBdHRyczpmdW5jdGlvbihlLGspe2EuT2JqZWN0LmVhY2goayxmdW5jdGlvbihtLHApe20/ZS5zZXRBdHRyaWJ1dGUocCxtKTplLnJlbW92ZUF0dHJpYnV0ZShwKX0pfSxfc3RhcnRVcGxvYWRUaW1lb3V0OmZ1bmN0aW9uKGUsayl7dmFyIG09dGhpczttLl90aW1lb3V0W2UuaWRdPWYuc2V0VGltZW91dChmdW5jdGlvbigpe2Uuc3RhdHVzPTA7ZS5zdGF0dXNUZXh0PSJ0aW1lb3V0IjsKbS5jb21wbGV0ZShlLGspO20uZW5kKGUsayl9LGsudGltZW91dCl9LF9jbGVhclVwbG9hZFRpbWVvdXQ6ZnVuY3Rpb24oZSl7Zi5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFtlXSk7ZGVsZXRlIHRoaXMuX3RpbWVvdXRbZV19LF91cGxvYWRDb21wbGV0ZTpmdW5jdGlvbihlLGspe3ZhciBtPWEub25lKCIjaW9faWZyYW1lIitlLmlkKS5nZXQoImNvbnRlbnRXaW5kb3cuZG9jdW1lbnQiKSxwPW0ub25lKCJib2R5IikscztrLnRpbWVvdXQmJnRoaXMuX2NsZWFyVXBsb2FkVGltZW91dChlLmlkKTt0cnl7cD8ocz1wLm9uZSgicHJlOmZpcnN0LWNoaWxkIiksZS5jLnJlc3BvbnNlVGV4dD1zP3MuZ2V0KCJ0ZXh0Iik6cC5nZXQoInRleHQiKSk6ZS5jLnJlc3BvbnNlWE1MPW0uX25vZGV9Y2F0Y2gobCl7ZS5lPSJ1cGxvYWQgZmFpbHVyZSJ9dGhpcy5jb21wbGV0ZShlLGspO3RoaXMuZW5kKGUsayk7Zi5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChlLmlkKX0sMCl9LF91cGxvYWQ6ZnVuY3Rpb24oZSwKayxtKXt2YXIgcD10aGlzLHM9InN0cmluZyI9PT10eXBlb2YgbS5mb3JtLmlkP2QuZ2V0RWxlbWVudEJ5SWQobS5mb3JtLmlkKTphLk5vZGUuZ2V0RE9NTm9kZShtLmZvcm0uaWQpLGw7cC5fc2V0QXR0cnMocyxlLmlkLGspO20uZGF0YSYmKGw9cC5fYWRkRGF0YShzLG0uZGF0YSkpO20udGltZW91dCYmcC5fc3RhcnRVcGxvYWRUaW1lb3V0KGUsbSk7cy5zdWJtaXQoKTtwLnN0YXJ0KGUsbSk7aWYobS5kYXRhKXZhciBoPXAub24oImlvOmVuZCIsZnVuY3Rpb24odSl7aC5kZXRhY2goKTtwLl9yZW1vdmVEYXRhKHMsbCl9KTtyZXR1cm57aWQ6ZS5pZCxhYm9ydDpmdW5jdGlvbigpe2Uuc3RhdHVzPTA7ZS5zdGF0dXNUZXh0PSJhYm9ydCI7aWYoYS5vbmUoIiNpb19pZnJhbWUiK2UuaWQpKXQoZS5pZCkscC5jb21wbGV0ZShlLG0pLHAuZW5kKGUsbSk7ZWxzZSByZXR1cm4hMX0saXNJblByb2dyZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIGEub25lKCIjaW9faWZyYW1lIitlLmlkKT8hMDohMX0sCmlvOnB9fSx1cGxvYWQ6ZnVuY3Rpb24oZSxrLG0pe3EoZSxtLHRoaXMpO3JldHVybiB0aGlzLl91cGxvYWQoZSxrLG0pfSxlbmQ6ZnVuY3Rpb24oZSxrKXt2YXIgbTtrJiYobT1rLmZvcm0pJiZtLnVwbG9hZCYmKG09InN0cmluZyI9PT10eXBlb2YgbS5pZD9kLmdldEVsZW1lbnRCeUlkKG0uaWQpOm0uaWQpJiZ0aGlzLl9yZXNldEF0dHJzKG0sdGhpcy5fb3JpZ2luYWxGb3JtQXR0cnMpO3JldHVybiBnLmNhbGwodGhpcyxlLGspfX0sITApfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJpby1iYXNlIiwibm9kZS1iYXNlIl19KTsKWVVJLmFkZCgiaW8teGRyIixmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEoayxtLHApe2s9J1x4M2NvYmplY3QgaWRceDNkImlvX3N3ZiIgdHlwZVx4M2QiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giIGRhdGFceDNkIicraysnIiB3aWR0aFx4M2QiMCIgaGVpZ2h0XHgzZCIwIlx4M2VceDNjcGFyYW0gbmFtZVx4M2QibW92aWUiIHZhbHVlXHgzZCInK2srJyJceDNlXHgzY3BhcmFtIG5hbWVceDNkIkZsYXNoVmFycyIgdmFsdWVceDNkInlpZFx4M2QnK20rIlx4MjZ1aWRceDNkIitwKyciXHgzZVx4M2NwYXJhbSBuYW1lXHgzZCJhbGxvd1NjcmlwdEFjY2VzcyIgdmFsdWVceDNkImFsd2F5cyJceDNlXHgzYy9vYmplY3RceDNlJzttPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5ib2R5LmFwcGVuZENoaWxkKG0pO20uaW5uZXJIVE1MPWt9ZnVuY3Rpb24gdChrLG0scCl7ImZsYXNoIj09PW0mJihrLmMucmVzcG9uc2VUZXh0PWRlY29kZVVSSShrLmMucmVzcG9uc2VUZXh0KSk7InhtbCI9PT0KcCYmKGsuYy5yZXNwb25zZVhNTD1hLkRhdGFUeXBlLlhNTC5wYXJzZShrLmMucmVzcG9uc2VUZXh0KSk7cmV0dXJuIGt9dmFyIGY9YS5wdWJsaXNoKCJpbzp4ZHJSZWFkeSIse2ZpcmVPbmNlOiEwfSksZD17fSxjPXt9LGI9YS5jb25maWcuZG9jLGc9YS5jb25maWcud2luLGU9ZyYmZy5YRG9tYWluUmVxdWVzdDthLm1peChhLklPLnByb3RvdHlwZSx7X3RyYW5zcG9ydDp7fSxfaWVFdnQ6ZnVuY3Rpb24oayxtKXt2YXIgcD10aGlzLHM9ay5pZDtrLmMub25wcm9ncmVzcz1mdW5jdGlvbigpe2Nbc109M307ay5jLm9ubG9hZD1mdW5jdGlvbigpe2Nbc109NDtwLnhkclJlc3BvbnNlKCJzdWNjZXNzIixrLG0pfTtrLmMub25lcnJvcj1mdW5jdGlvbigpe2Nbc109NDtwLnhkclJlc3BvbnNlKCJmYWlsdXJlIixrLG0pfTtrLmMub250aW1lb3V0PWZ1bmN0aW9uKCl7Y1tzXT00O3AueGRyUmVzcG9uc2UoInRpbWVvdXQiLGssbSl9O2suYy50aW1lb3V0PW0udGltZW91dHx8MH0seGRyOmZ1bmN0aW9uKGssCm0scCl7dmFyIHM9dGhpczsiZmxhc2giPT09cC54ZHIudXNlPyhkW20uaWRdPXAsZy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e20uYy5zZW5kKGsse2lkOm0uaWQsdWlkOm0udWlkLG1ldGhvZDpwLm1ldGhvZCxkYXRhOnAuZGF0YSxoZWFkZXJzOnAuaGVhZGVyc30pfWNhdGNoKGwpe3MueGRyUmVzcG9uc2UoInRyYW5zcG9ydCBlcnJvciIsbSxwKSxkZWxldGUgZFttLmlkXX19LGEuaW8ueGRyLmRlbGF5KSk6ZT8ocy5faWVFdnQobSxwKSxtLmMub3BlbihwLm1ldGhvZHx8IkdFVCIsayksc2V0VGltZW91dChmdW5jdGlvbigpe20uYy5zZW5kKHAuZGF0YSl9LDApKTptLmMuc2VuZChrLG0scCk7cmV0dXJue2lkOm0uaWQsYWJvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5jP20uYy5hYm9ydChtLmlkLHApOiExfSxpc0luUHJvZ3Jlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gbS5jP2U/NCE9PWNbbS5pZC5pZF06bS5pZC5jLmlzSW5Qcm9ncmVzcyhtLmlkLmlkKTohMX0saW86c319LHhkclJlc3BvbnNlOmZ1bmN0aW9uKGssCm0scCl7cD1kW20uaWRdP2RbbS5pZF06cDt2YXIgcz1lP2M6ZCxsPXAueGRyLnVzZSxoPXAueGRyLmRhdGFUeXBlO3N3aXRjaChrKXtjYXNlICJzdGFydCI6dGhpcy5zdGFydChtLHApO2JyZWFrO2Nhc2UgInN1Y2Nlc3MiOnRoaXMuc3VjY2Vzcyh0KG0sbCxoKSxwKTtkZWxldGUgc1ttLmlkXTticmVhaztjYXNlICJ0aW1lb3V0IjpjYXNlICJhYm9ydCI6Y2FzZSAidHJhbnNwb3J0IGVycm9yIjptLmM9e3N0YXR1czowLHN0YXR1c1RleHQ6a307Y2FzZSAiZmFpbHVyZSI6dGhpcy5mYWlsdXJlKHQobSxsLGgpLHApLGRlbGV0ZSBzW20uaWRdfX0sX3hkclJlYWR5OmZ1bmN0aW9uKGssbSl7YS5maXJlKGYsayxtKX0sdHJhbnNwb3J0OmZ1bmN0aW9uKGspeyJmbGFzaCI9PT1rLmlkJiYocShhLlVBLmllP2suc3JjKyI/ZFx4M2QiKyhuZXcgRGF0ZSkudmFsdWVPZigpLnRvU3RyaW5nKCk6ay5zcmMsYS5pZCxrLnVpZCksYS5JTy50cmFuc3BvcnRzLmZsYXNoPWZ1bmN0aW9uKCl7cmV0dXJuIGIuZ2V0RWxlbWVudEJ5SWQoImlvX3N3ZiIpfSl9fSk7CmEuaW8ueGRyUmVhZHk9ZnVuY3Rpb24oayxtKXt2YXIgcD1hLmlvLl9tYXBbbV07YS5pby54ZHIuZGVsYXk9MDtwLl94ZHJSZWFkeS5hcHBseShwLFtrLG1dKX07YS5pby54ZHJSZXNwb25zZT1mdW5jdGlvbihrLG0scCl7dmFyIHM9YS5pby5fbWFwW20udWlkXTtzLnhkclJlc3BvbnNlLmFwcGx5KHMsW2ssbSxwXSl9O2EuaW8udHJhbnNwb3J0PWZ1bmN0aW9uKGspe3ZhciBtPWEuaW8uX21hcFsiaW86MCJdfHxuZXcgYS5JTztrLnVpZD1tLl91aWQ7bS50cmFuc3BvcnQuYXBwbHkobSxba10pfTthLmlvLnhkcj17ZGVsYXk6MTAwfX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiaW8tYmFzZSIsImRhdGF0eXBlLXhtbC1wYXJzZSJdfSk7CllVSS5hZGQoImpzb24tcGFyc2UiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5jb25maWcuZ2xvYmFsLkpTT047YS5uYW1lc3BhY2UoIkpTT04iKS5wYXJzZT1mdW5jdGlvbih0LGYsZCl7cmV0dXJuIHEucGFyc2UoInN0cmluZyI9PT10eXBlb2YgdD90OnQrIiIsZixkKX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInl1aS1iYXNlIl19KTsKWVVJLmFkZCgianNvbi1zdHJpbmdpZnkiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5jb25maWcuZ2xvYmFsLkpTT047YS5taXgoYS5uYW1lc3BhY2UoIkpTT04iKSx7ZGF0ZVRvU3RyaW5nOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoZCl7cmV0dXJuIDEwPmQ/IjAiK2Q6ZH1yZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpKyItIitmKHQuZ2V0VVRDTW9udGgoKSsxKSsiLSIrZih0LmdldFVUQ0RhdGUoKSkrIlQiK2YodC5nZXRVVENIb3VycygpKSsiOiIrZih0LmdldFVUQ01pbnV0ZXMoKSkrIjoiK2YodC5nZXRVVENTZWNvbmRzKCkpKyJaIn0sc3RyaW5naWZ5OmZ1bmN0aW9uKCl7cmV0dXJuIHEuc3RyaW5naWZ5LmFwcGx5KHEsYXJndW1lbnRzKX0sY2hhckNhY2hlVGhyZXNob2xkOjEwMH0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoIm5vZGUtYmFzZSIsZnVuY3Rpb24oYSxFKXt2YXIgcT1bImhhc0NsYXNzIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInJlcGxhY2VDbGFzcyIsInRvZ2dsZUNsYXNzIl07YS5Ob2RlLmltcG9ydE1ldGhvZChhLkRPTSxxKTthLk5vZGVMaXN0LmltcG9ydE1ldGhvZChhLk5vZGUucHJvdG90eXBlLHEpO3ZhciB0PWEuTm9kZSxmPWEuRE9NO3QuY3JlYXRlPWZ1bmN0aW9uKGQsYyl7YyYmYy5fbm9kZSYmKGM9Yy5fbm9kZSk7cmV0dXJuIGEub25lKGYuY3JlYXRlKGQsYykpfTthLm1peCh0LnByb3RvdHlwZSx7Y3JlYXRlOnQuY3JlYXRlLGluc2VydDpmdW5jdGlvbihkLGMpe3RoaXMuX2luc2VydChkLGMpO3JldHVybiB0aGlzfSxfaW5zZXJ0OmZ1bmN0aW9uKGQsYyl7dmFyIGI9dGhpcy5fbm9kZSxnPW51bGw7Im51bWJlciI9PXR5cGVvZiBjP2M9dGhpcy5fbm9kZS5jaGlsZE5vZGVzW2NdOmMmJmMuX25vZGUmJihjPWMuX25vZGUpO2QmJiJzdHJpbmciIT10eXBlb2YgZCYmCihkPWQuX25vZGV8fGQuX25vZGVzfHxkKTtyZXR1cm4gZz1mLmFkZEhUTUwoYixkLGMpfSxwcmVwZW5kOmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLmluc2VydChkLDApfSxhcHBlbmQ6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuaW5zZXJ0KGQsbnVsbCl9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGQpe3JldHVybiB0LnNjcnViVmFsKHRoaXMuX2luc2VydChkKSl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihkLGMpe3JldHVybiBhLk5vZGUuc2NydWJWYWwodGhpcy5faW5zZXJ0KGQsYykpfSxhcHBlbmRUbzpmdW5jdGlvbihkKXthLm9uZShkKS5hcHBlbmQodGhpcyk7cmV0dXJuIHRoaXN9LHNldENvbnRlbnQ6ZnVuY3Rpb24oZCl7dGhpcy5faW5zZXJ0KGQsInJlcGxhY2UiKTtyZXR1cm4gdGhpc30sZ2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciBkPXRoaXM7MTE9PT1kLl9ub2RlLm5vZGVUeXBlJiYoZD1kLmNyZWF0ZSgiXHgzY2Rpdi9ceDNlIikuYXBwZW5kKGQuY2xvbmVOb2RlKCEwKSkpOwpyZXR1cm4gZC5nZXQoImlubmVySFRNTCIpfX0pO2EuTm9kZS5wcm90b3R5cGUuc2V0SFRNTD1hLk5vZGUucHJvdG90eXBlLnNldENvbnRlbnQ7YS5Ob2RlLnByb3RvdHlwZS5nZXRIVE1MPWEuTm9kZS5wcm90b3R5cGUuZ2V0Q29udGVudDthLk5vZGVMaXN0LmltcG9ydE1ldGhvZChhLk5vZGUucHJvdG90eXBlLCJhcHBlbmQgaW5zZXJ0IGFwcGVuZENoaWxkIGluc2VydEJlZm9yZSBwcmVwZW5kIHNldENvbnRlbnQgZ2V0Q29udGVudCBzZXRIVE1MIGdldEhUTUwiLnNwbGl0KCIgIikpO3Q9YS5Ob2RlO2Y9YS5ET007dC5BVFRSUz17dGV4dDp7Z2V0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGYuZ2V0VGV4dCh0aGlzLl9ub2RlKX0sc2V0dGVyOmZ1bmN0aW9uKGQpe2Yuc2V0VGV4dCh0aGlzLl9ub2RlLGQpO3JldHVybiBkfX0sImZvciI6e2dldHRlcjpmdW5jdGlvbigpe3JldHVybiBmLmdldEF0dHJpYnV0ZSh0aGlzLl9ub2RlLCJmb3IiKX0sc2V0dGVyOmZ1bmN0aW9uKGQpe2Yuc2V0QXR0cmlidXRlKHRoaXMuX25vZGUsCiJmb3IiLGQpO3JldHVybiBkfX0sb3B0aW9uczp7Z2V0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9wdGlvbiIpfX0sY2hpbGRyZW46e2dldHRlcjpmdW5jdGlvbigpe3ZhciBkPXRoaXMuX25vZGUsYz1kLmNoaWxkcmVuLGIsZztpZighY3x8YS5VQS5pZSYmOT5hLlVBLmllKWZvcihkPWQuY2hpbGROb2RlcyxjPVtdLGI9MCxnPWQubGVuZ3RoO2I8ZzsrK2IpZFtiXS50YWdOYW1lJiYxPT09ZFtiXS5ub2RlVHlwZSYmKGNbYy5sZW5ndGhdPWRbYl0pO3JldHVybiBhLmFsbChjKX19LHZhbHVlOntnZXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZi5nZXRWYWx1ZSh0aGlzLl9ub2RlKX0sc2V0dGVyOmZ1bmN0aW9uKGQpe2Yuc2V0VmFsdWUodGhpcy5fbm9kZSxkKTtyZXR1cm4gZH19fTthLk5vZGUuaW1wb3J0TWV0aG9kKGEuRE9NLFsic2V0QXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIl0pO3Q9YS5Ob2RlO3E9YS5Ob2RlTGlzdDt0LkRPTV9FVkVOVFM9CnthYm9ydDoxLGJlZm9yZXVubG9hZDoxLGJsdXI6MSxjaGFuZ2U6MSxjbGljazoxLGNsb3NlOjEsY29tbWFuZDoxLGNvbnRleHRtZW51OjEsY29weToxLGN1dDoxLGRibGNsaWNrOjEsRE9NTW91c2VTY3JvbGw6MSxkcmFnOjEsZHJhZ3N0YXJ0OjEsZHJhZ2VudGVyOjEsZHJhZ292ZXI6MSxkcmFnbGVhdmU6MSxkcmFnZW5kOjEsZHJvcDoxLGVycm9yOjEsZm9jdXM6MSxrZXk6MSxrZXlkb3duOjEsa2V5cHJlc3M6MSxrZXl1cDoxLGxvYWQ6MSxtZXNzYWdlOjEsbW91c2Vkb3duOjEsbW91c2VlbnRlcjoxLG1vdXNlbGVhdmU6MSxtb3VzZW1vdmU6MSxtb3VzZW11bHRpd2hlZWw6MSxtb3VzZW91dDoxLG1vdXNlb3ZlcjoxLG1vdXNldXA6MSxtb3VzZXdoZWVsOjEsb3JpZW50YXRpb25jaGFuZ2U6MSxwYXN0ZToxLHJlc2V0OjEscmVzaXplOjEsc2VsZWN0OjEsc2VsZWN0c3RhcnQ6MSxzdWJtaXQ6MSxzY3JvbGw6MSx0ZXh0SW5wdXQ6MSx1bmxvYWQ6MSxpbnZhbGlkOjF9O2EubWl4KHQuRE9NX0VWRU5UUywKYS5FbnYuZXZ0LnBsdWdpbnMpO2EuYXVnbWVudCh0LGEuRXZlbnRUYXJnZXQpO2EubWl4KHQucHJvdG90eXBlLHtwdXJnZTpmdW5jdGlvbihkLGMpe2EuRXZlbnQucHVyZ2VFbGVtZW50KHRoaXMuX25vZGUsZCxjKTtyZXR1cm4gdGhpc319KTthLm1peChhLk5vZGVMaXN0LnByb3RvdHlwZSx7X3ByZXBFdnRBcmdzOmZ1bmN0aW9uKGQsYyxiKXt2YXIgZz1hLkFycmF5KGFyZ3VtZW50cywwLCEwKTsyPmcubGVuZ3RoP2dbMl09dGhpcy5fbm9kZXM6Zy5zcGxpY2UoMiwwLHRoaXMuX25vZGVzKTtnWzNdPWJ8fHRoaXM7cmV0dXJuIGd9LG9uOmZ1bmN0aW9uKGQsYyxiKXtyZXR1cm4gYS5vbi5hcHBseShhLHRoaXMuX3ByZXBFdnRBcmdzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LG9uY2U6ZnVuY3Rpb24oZCxjLGIpe3JldHVybiBhLm9uY2UuYXBwbHkoYSx0aGlzLl9wcmVwRXZ0QXJncy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxhZnRlcjpmdW5jdGlvbihkLGMsYil7cmV0dXJuIGEuYWZ0ZXIuYXBwbHkoYSwKdGhpcy5fcHJlcEV2dEFyZ3MuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sb25jZUFmdGVyOmZ1bmN0aW9uKGQsYyxiKXtyZXR1cm4gYS5vbmNlQWZ0ZXIuYXBwbHkoYSx0aGlzLl9wcmVwRXZ0QXJncy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0pO3EuaW1wb3J0TWV0aG9kKGEuTm9kZS5wcm90b3R5cGUsWyJkZXRhY2giLCJkZXRhY2hBbGwiXSk7YS5taXgoYS5Ob2RlLkFUVFJTLHtvZmZzZXRIZWlnaHQ6e3NldHRlcjpmdW5jdGlvbihkKXthLkRPTS5zZXRIZWlnaHQodGhpcy5fbm9kZSxkKTtyZXR1cm4gZH0sZ2V0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vZGUub2Zmc2V0SGVpZ2h0fX0sb2Zmc2V0V2lkdGg6e3NldHRlcjpmdW5jdGlvbihkKXthLkRPTS5zZXRXaWR0aCh0aGlzLl9ub2RlLGQpO3JldHVybiBkfSxnZXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9kZS5vZmZzZXRXaWR0aH19fSk7YS5taXgoYS5Ob2RlLnByb3RvdHlwZSx7c2l6ZVRvOmZ1bmN0aW9uKGQsCmMpe3ZhciBiOzI+YXJndW1lbnRzLmxlbmd0aCYmKGI9YS5vbmUoZCksZD1iLmdldCgib2Zmc2V0V2lkdGgiKSxjPWIuZ2V0KCJvZmZzZXRIZWlnaHQiKSk7dGhpcy5zZXRBdHRycyh7b2Zmc2V0V2lkdGg6ZCxvZmZzZXRIZWlnaHQ6Y30pfX0pO2EuY29uZmlnLmRvYy5kb2N1bWVudEVsZW1lbnQuaGFzQXR0cmlidXRlfHwoYS5Ob2RlLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24oZCl7cmV0dXJuInZhbHVlIj09PWQmJiIiIT09dGhpcy5nZXQoInZhbHVlIik/ITA6ISghdGhpcy5fbm9kZS5hdHRyaWJ1dGVzW2RdfHwhdGhpcy5fbm9kZS5hdHRyaWJ1dGVzW2RdLnNwZWNpZmllZCl9KTthLk5vZGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dHJ5e3RoaXMuX25vZGUuZm9jdXMoKX1jYXRjaChkKXt9cmV0dXJuIHRoaXN9O2EuTm9kZS5BVFRSUy50eXBlPXtzZXR0ZXI6ZnVuY3Rpb24oZCl7aWYoImhpZGRlbiI9PT1kKXRyeXt0aGlzLl9ub2RlLnR5cGU9ImhpZGRlbiJ9Y2F0Y2goYyl7dGhpcy5fbm9kZS5zdHlsZS5kaXNwbGF5PQoibm9uZSIsdGhpcy5faW5wdXRUeXBlPSJoaWRkZW4ifWVsc2UgdHJ5e3RoaXMuX25vZGUudHlwZT1kfWNhdGNoKGIpe31yZXR1cm4gZH0sZ2V0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lucHV0VHlwZXx8dGhpcy5fbm9kZS50eXBlfSxfYnlwYXNzUHJveHk6ITB9O2EuY29uZmlnLmRvYy5jcmVhdGVFbGVtZW50KCJmb3JtIikuZWxlbWVudHMubm9kZVR5cGUmJihhLk5vZGUuQVRUUlMuZWxlbWVudHM9e2dldHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFsbCgiaW5wdXQsIHRleHRhcmVhLCBidXR0b24sIHNlbGVjdCIpfX0pO2EubWl4KGEuTm9kZS5wcm90b3R5cGUse19pbml0RGF0YTpmdW5jdGlvbigpeyJfZGF0YSJpbiB0aGlzfHwodGhpcy5fZGF0YT17fSl9LGdldERhdGE6ZnVuY3Rpb24oZCl7dGhpcy5faW5pdERhdGEoKTt2YXIgYz10aGlzLl9kYXRhLGI9Yzthcmd1bWVudHMubGVuZ3RoP2I9ZCBpbiBjP2NbZF06dGhpcy5fZ2V0RGF0YUF0dHJpYnV0ZShkKToib2JqZWN0Ij09CnR5cGVvZiBjJiZudWxsIT09YyYmKGI9e30sYS5PYmplY3QuZWFjaChjLGZ1bmN0aW9uKGcsZSl7YltlXT1nfSksYj10aGlzLl9nZXREYXRhQXR0cmlidXRlcyhiKSk7cmV0dXJuIGJ9LF9nZXREYXRhQXR0cmlidXRlczpmdW5jdGlvbihkKXtkPWR8fHt9O2Zvcih2YXIgYz0wLGI9dGhpcy5fbm9kZS5hdHRyaWJ1dGVzLGc9Yi5sZW5ndGgsZT10aGlzLkRBVEFfUFJFRklYLGs9ZS5sZW5ndGgsbTtjPGc7KW09YltjXS5uYW1lLDA9PT1tLmluZGV4T2YoZSkmJihtPW0uc3Vic3RyKGspLG0gaW4gZHx8KGRbbV09dGhpcy5fZ2V0RGF0YUF0dHJpYnV0ZShtKSkpLGMrPTE7cmV0dXJuIGR9LF9nZXREYXRhQXR0cmlidXRlOmZ1bmN0aW9uKGQpe2Q9dGhpcy5EQVRBX1BSRUZJWCtkO3ZhciBjPXRoaXMuX25vZGUuYXR0cmlidXRlcztyZXR1cm4gYyYmY1tkXSYmY1tkXS52YWx1ZX0sc2V0RGF0YTpmdW5jdGlvbihkLGMpe3RoaXMuX2luaXREYXRhKCk7MTxhcmd1bWVudHMubGVuZ3RoP3RoaXMuX2RhdGFbZF09CmM6dGhpcy5fZGF0YT1kO3JldHVybiB0aGlzfSxjbGVhckRhdGE6ZnVuY3Rpb24oZCl7Il9kYXRhImluIHRoaXMmJigidW5kZWZpbmVkIiE9dHlwZW9mIGQ/ZGVsZXRlIHRoaXMuX2RhdGFbZF06ZGVsZXRlIHRoaXMuX2RhdGEpO3JldHVybiB0aGlzfX0pO2EubWl4KGEuTm9kZUxpc3QucHJvdG90eXBlLHtnZXREYXRhOmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLl9pbnZva2UoImdldERhdGEiLGFyZ3VtZW50cy5sZW5ndGg/W2RdOltdLCEwKX0sc2V0RGF0YTpmdW5jdGlvbihkLGMpe3JldHVybiB0aGlzLl9pbnZva2UoInNldERhdGEiLDE8YXJndW1lbnRzLmxlbmd0aD9bZCxjXTpbZF0pfSxjbGVhckRhdGE6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuX2ludm9rZSgiY2xlYXJEYXRhIixbZF0pfX0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJldmVudC1iYXNlIiwibm9kZS1jb3JlIiwiZG9tLWJhc2UiLCJkb20tc3R5bGUiXX0pOwpZVUkuYWRkKCJub2RlLWNvcmUiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9QXJyYXkucHJvdG90eXBlLnNsaWNlLHQ9YS5ET00sZj1mdW5jdGlvbihlKXtpZighdGhpcy5nZXRET01Ob2RlJiYhYS5pbnN0YW5jZU9mKHRoaXMsZikpcmV0dXJuIG5ldyBmKGUpO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9Zi5fZnJvbVN0cmluZyhlKSwhZSkpcmV0dXJuIG51bGw7dmFyIGs9OSE9PWUubm9kZVR5cGU/ZS51bmlxdWVJRDplLl95dWlkO2smJmYuX2luc3RhbmNlc1trXSYmZi5faW5zdGFuY2VzW2tdLl9ub2RlIT09ZSYmKGUuX3l1aWQ9bnVsbCk7KGs9a3x8YS5zdGFtcChlKSl8fChrPWEuZ3VpZCgpKTt0aGlzLl95dWlkPWs7dGhpcy5fc3RhdGVQcm94eT10aGlzLl9ub2RlPWU7dGhpcy5faW5pdFBsdWdpbnMmJnRoaXMuX2luaXRQbHVnaW5zKCl9LGQ9ZnVuY3Rpb24oZSl7dmFyIGs9bnVsbDtlJiYoaz0ic3RyaW5nIj09dHlwZW9mIGU/ZnVuY3Rpb24obSl7cmV0dXJuIGEuU2VsZWN0b3IudGVzdChtLAplKX06ZnVuY3Rpb24obSl7cmV0dXJuIGUoYS5vbmUobSkpfSk7cmV0dXJuIGt9O2YuQVRUUlM9e307Zi5ET01fRVZFTlRTPXt9O2YuX2Zyb21TdHJpbmc9ZnVuY3Rpb24oZSl7ZSYmKGU9MD09PWUuaW5kZXhPZigiZG9jIik/YS5jb25maWcuZG9jOjA9PT1lLmluZGV4T2YoIndpbiIpP2EuY29uZmlnLndpbjphLlNlbGVjdG9yLnF1ZXJ5KGUsbnVsbCwhMCkpO3JldHVybiBlfHxudWxsfTtmLk5BTUU9Im5vZGUiO2YucmVfYXJpYT0vXig/OnJvbGUkfGFyaWEtKS87Zi5TSE9XX1RSQU5TSVRJT049ImZhZGVJbiI7Zi5ISURFX1RSQU5TSVRJT049ImZhZGVPdXQiO2YuX2luc3RhbmNlcz17fTtmLmdldERPTU5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZS5ub2RlVHlwZT9lOmUuX25vZGV8fG51bGw6bnVsbH07Zi5zY3J1YlZhbD1mdW5jdGlvbihlLGspe2lmKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpaWYoIm5vZGVUeXBlImluIGV8fHQuaXNXaW5kb3coZSkpZT0KYS5vbmUoZSk7ZWxzZSBpZihlLml0ZW0mJiFlLl9ub2Rlc3x8ZVswXSYmZVswXS5ub2RlVHlwZSllPWEuYWxsKGUpfWVsc2UidW5kZWZpbmVkIj09PXR5cGVvZiBlP2U9azpudWxsPT09ZSYmKGU9bnVsbCk7cmV0dXJuIGV9O2YuYWRkTWV0aG9kPWZ1bmN0aW9uKGUsayxtKXtlJiZrJiYiZnVuY3Rpb24iPT10eXBlb2YgayYmKGYucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7dmFyIHA9cS5jYWxsKGFyZ3VtZW50cyk7cFswXSYmcFswXS5fbm9kZSYmKHBbMF09cFswXS5fbm9kZSk7cFsxXSYmcFsxXS5fbm9kZSYmKHBbMV09cFsxXS5fbm9kZSk7cC51bnNoaWZ0KHRoaXMuX25vZGUpOyhwPWsuYXBwbHkobXx8dGhpcyxwKSkmJihwPWYuc2NydWJWYWwocCx0aGlzKSk7InVuZGVmaW5lZCIhPXR5cGVvZiBwfHwocD10aGlzKTtyZXR1cm4gcH0pfTtmLmltcG9ydE1ldGhvZD1mdW5jdGlvbihlLGssbSl7InN0cmluZyI9PXR5cGVvZiBrP2YuYWRkTWV0aG9kKG18fGssZVtrXSxlKTphLkFycmF5LmVhY2goaywKZnVuY3Rpb24ocCl7Zi5pbXBvcnRNZXRob2QoZSxwKX0pfTtmLm9uZT1mdW5jdGlvbihlKXt2YXIgaz1udWxsLG07aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZihlPWYuX2Zyb21TdHJpbmcoZSksIWUpcmV0dXJuIG51bGx9ZWxzZSBpZihlLmdldERPTU5vZGUmJmEuaW5zdGFuY2VPZihlLGYpKXJldHVybiBlO2lmKGUubm9kZVR5cGV8fGEuRE9NLmlzV2luZG93KGUpKWlmKGs9ZS51bmlxdWVJRCYmOSE9PWUubm9kZVR5cGU/ZS51bmlxdWVJRDplLl95dWlkLG09KGs9Zi5faW5zdGFuY2VzW2tdKT9rLl9ub2RlOm51bGwsIWt8fG0mJmUhPT1tKWs9bmV3IGYoZSksMTEhPWUubm9kZVR5cGUmJihmLl9pbnN0YW5jZXNbay5feXVpZF09ayl9cmV0dXJuIGt9O2YuREVGQVVMVF9TRVRURVI9ZnVuY3Rpb24oZSxrKXt2YXIgbT10aGlzLl9zdGF0ZVByb3h5Oy0xPGUuaW5kZXhPZigiLiIpPyhlPWUuc3BsaXQoIi4iKSxhLk9iamVjdC5zZXRWYWx1ZShtLGUsaykpOiJ1bmRlZmluZWQiIT0KdHlwZW9mIG1bZV0mJihtW2VdPWspO3JldHVybiBrfTtmLkRFRkFVTFRfR0VUVEVSPWZ1bmN0aW9uKGUpe3ZhciBrPXRoaXMuX3N0YXRlUHJveHksbTtlLmluZGV4T2YmJi0xPGUuaW5kZXhPZigiLiIpP209YS5PYmplY3QuZ2V0VmFsdWUoayxlLnNwbGl0KCIuIikpOiJ1bmRlZmluZWQiIT10eXBlb2Yga1tlXSYmKG09a1tlXSk7cmV0dXJuIG19O2EubWl4KGYucHJvdG90eXBlLHtEQVRBX1BSRUZJWDoiZGF0YS0iLHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feXVpZCsiOiBub3QgYm91bmQgdG8gYSBub2RlIixrPXRoaXMuX25vZGUsbSxwO2smJihtPShlPWsuYXR0cmlidXRlcykmJmUuaWQ/ay5nZXRBdHRyaWJ1dGUoImlkIik6bnVsbCxwPWUmJmUuY2xhc3NOYW1lP2suZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKTpudWxsLGU9ay5ub2RlTmFtZSxtJiYoZSs9IiMiK20pLHAmJihlKz0iLiIrcC5yZXBsYWNlKCIgIiwiLiIpKSxlKz0iICIrdGhpcy5feXVpZCk7cmV0dXJuIGV9LApnZXQ6ZnVuY3Rpb24oZSl7KGU9dGhpcy5fZ2V0QXR0cj90aGlzLl9nZXRBdHRyKGUpOnRoaXMuX2dldChlKSk/ZT1mLnNjcnViVmFsKGUsdGhpcyk6bnVsbD09PWUmJihlPW51bGwpO3JldHVybiBlfSxfZ2V0OmZ1bmN0aW9uKGUpe3ZhciBrPWYuQVRUUlNbZV07cmV0dXJuIGsmJmsuZ2V0dGVyP2suZ2V0dGVyLmNhbGwodGhpcyk6Zi5yZV9hcmlhLnRlc3QoZSk/dGhpcy5fbm9kZS5nZXRBdHRyaWJ1dGUoZSwyKTpmLkRFRkFVTFRfR0VUVEVSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sc2V0OmZ1bmN0aW9uKGUsayl7dmFyIG09Zi5BVFRSU1tlXTt0aGlzLl9zZXRBdHRyP3RoaXMuX3NldEF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpOm0mJm0uc2V0dGVyP20uc2V0dGVyLmNhbGwodGhpcyxrLGUpOmYucmVfYXJpYS50ZXN0KGUpP3RoaXMuX25vZGUuc2V0QXR0cmlidXRlKGUsayk6Zi5ERUZBVUxUX1NFVFRFUi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9LHNldEF0dHJzOmZ1bmN0aW9uKGUpe3RoaXMuX3NldEF0dHJzPwp0aGlzLl9zZXRBdHRycyhlKTphLk9iamVjdC5lYWNoKGUsZnVuY3Rpb24oayxtKXt0aGlzLnNldChtLGspfSx0aGlzKTtyZXR1cm4gdGhpc30sZ2V0QXR0cnM6ZnVuY3Rpb24oZSl7dmFyIGs9e307dGhpcy5fZ2V0QXR0cnM/dGhpcy5fZ2V0QXR0cnMoZSk6YS5BcnJheS5lYWNoKGUsZnVuY3Rpb24obSxwKXtrW21dPXRoaXMuZ2V0KG0pfSx0aGlzKTtyZXR1cm4ga30sY29tcGFyZVRvOmZ1bmN0aW9uKGUpe3ZhciBrPXRoaXMuX25vZGU7ZSYmZS5fbm9kZSYmKGU9ZS5fbm9kZSk7cmV0dXJuIGs9PT1lfSxpbkRvYzpmdW5jdGlvbihlKXt2YXIgaz10aGlzLl9ub2RlO3JldHVybiBrJiYoZT1lP2UuX25vZGV8fGU6ay5vd25lckRvY3VtZW50LGUuZG9jdW1lbnRFbGVtZW50KT90LmNvbnRhaW5zKGUuZG9jdW1lbnRFbGVtZW50LGspOiExfSxnZXRCeUlkOmZ1bmN0aW9uKGUpe3ZhciBrPXRoaXMuX25vZGU7cmV0dXJuIGU9KGU9dC5ieUlkKGUsay5vd25lckRvY3VtZW50KSkmJnQuY29udGFpbnMoaywKZSk/YS5vbmUoZSk6bnVsbH0sYW5jZXN0b3I6ZnVuY3Rpb24oZSxrLG0pezIhPT1hcmd1bWVudHMubGVuZ3RofHwic3RyaW5nIiE9dHlwZW9mIGsmJiJmdW5jdGlvbiIhPXR5cGVvZiBrfHwobT1rKTtyZXR1cm4gYS5vbmUodC5hbmNlc3Rvcih0aGlzLl9ub2RlLGQoZSksayxkKG0pKSl9LGFuY2VzdG9yczpmdW5jdGlvbihlLGssbSl7MiE9PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciIT10eXBlb2YgayYmImZ1bmN0aW9uIiE9dHlwZW9mIGt8fChtPWspO3JldHVybiBhLmFsbCh0LmFuY2VzdG9ycyh0aGlzLl9ub2RlLGQoZSksayxkKG0pKSl9LHByZXZpb3VzOmZ1bmN0aW9uKGUsayl7cmV0dXJuIGEub25lKHQuZWxlbWVudEJ5QXhpcyh0aGlzLl9ub2RlLCJwcmV2aW91c1NpYmxpbmciLGQoZSksaykpfSxuZXh0OmZ1bmN0aW9uKGUsayl7cmV0dXJuIGEub25lKHQuZWxlbWVudEJ5QXhpcyh0aGlzLl9ub2RlLCJuZXh0U2libGluZyIsZChlKSxrKSl9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBhLmFsbCh0LnNpYmxpbmdzKHRoaXMuX25vZGUsCmQoZSkpKX0sb25lOmZ1bmN0aW9uKGUpe3JldHVybiBhLm9uZShhLlNlbGVjdG9yLnF1ZXJ5KGUsdGhpcy5fbm9kZSwhMCkpfSxhbGw6ZnVuY3Rpb24oZSl7dmFyIGs7dGhpcy5fbm9kZSYmKGs9YS5hbGwoYS5TZWxlY3Rvci5xdWVyeShlLHRoaXMuX25vZGUpKSxrLl9xdWVyeT1lLGsuX3F1ZXJ5Um9vdD10aGlzLl9ub2RlKTtyZXR1cm4ga3x8YS5hbGwoW10pfSx0ZXN0OmZ1bmN0aW9uKGUpe3JldHVybiBhLlNlbGVjdG9yLnRlc3QodGhpcy5fbm9kZSxlKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciBrPXRoaXMuX25vZGU7ayYmay5wYXJlbnROb2RlJiZrLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoayk7ZSYmdGhpcy5kZXN0cm95KCk7cmV0dXJuIHRoaXN9LHJlcGxhY2U6ZnVuY3Rpb24oZSl7dmFyIGs9dGhpcy5fbm9kZTsic3RyaW5nIj09dHlwZW9mIGUmJihlPWYuY3JlYXRlKGUpKTtrLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGYuZ2V0RE9NTm9kZShlKSxrKTtyZXR1cm4gdGhpc30sCnJlcGxhY2VDaGlsZDpmdW5jdGlvbihlLGspeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9dC5jcmVhdGUoZSkpO3JldHVybiBhLm9uZSh0aGlzLl9ub2RlLnJlcGxhY2VDaGlsZChmLmdldERPTU5vZGUoZSksZi5nZXRET01Ob2RlKGspKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7dmFyIGs9YS5jb25maWcuZG9jLnVuaXF1ZUlEPyJ1bmlxdWVJRCI6Il95dWlkIixtO3RoaXMucHVyZ2UoKTt0aGlzLnVucGx1ZyYmdGhpcy51bnBsdWcoKTt0aGlzLmNsZWFyRGF0YSgpO2UmJmEuTm9kZUxpc3QuZWFjaCh0aGlzLmFsbCgiKiIpLGZ1bmN0aW9uKHApeyhtPWYuX2luc3RhbmNlc1twW2tdXSk/bS5kZXN0cm95KCk6YS5FdmVudC5wdXJnZUVsZW1lbnQocCl9KTt0aGlzLl9zdGF0ZVByb3h5PXRoaXMuX25vZGU9bnVsbDtkZWxldGUgZi5faW5zdGFuY2VzW3RoaXMuX3l1aWRdfSxpbnZva2U6ZnVuY3Rpb24oZSxrLG0scCxzLGwpe3ZhciBoPXRoaXMuX25vZGU7ayYmay5fbm9kZSYmKGs9ay5fbm9kZSk7Cm0mJm0uX25vZGUmJihtPW0uX25vZGUpO2U9aFtlXShrLG0scCxzLGwpO3JldHVybiBmLnNjcnViVmFsKGUsdGhpcyl9LHN3YXA6YS5jb25maWcuZG9jLmRvY3VtZW50RWxlbWVudC5zd2FwTm9kZT9mdW5jdGlvbihlKXt0aGlzLl9ub2RlLnN3YXBOb2RlKGYuZ2V0RE9NTm9kZShlKSl9OmZ1bmN0aW9uKGUpe2U9Zi5nZXRET01Ob2RlKGUpO3ZhciBrPXRoaXMuX25vZGUsbT1lLnBhcmVudE5vZGUscD1lLm5leHRTaWJsaW5nO3A9PT1rP20uaW5zZXJ0QmVmb3JlKGssZSk6ZT09PWsubmV4dFNpYmxpbmc/bS5pbnNlcnRCZWZvcmUoZSxrKTooay5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLGspLHQuYWRkSFRNTChtLGsscCkpO3JldHVybiB0aGlzfSxoYXNNZXRob2Q6ZnVuY3Rpb24oZSl7dmFyIGs9dGhpcy5fbm9kZTtyZXR1cm4hKCEoayYmZSBpbiBrJiYidW5rbm93biIhPXR5cGVvZiBrW2VdKXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGtbZV0mJjEhPT1TdHJpbmcoa1tlXSkuaW5kZXhPZigiZnVuY3Rpb24iKSl9LAppc0ZyYWdtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIDExPT09dGhpcy5nZXQoIm5vZGVUeXBlIil9LGVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5nZXQoImNoaWxkTm9kZXMiKS5yZW1vdmUoKS5kZXN0cm95KCEwKTtyZXR1cm4gdGhpc30sZ2V0RE9NTm9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlfX0sITApO2EuTm9kZT1mO2Eub25lPWYub25lO3ZhciBjPWZ1bmN0aW9uKGUpe3ZhciBrPVtdO2UmJigic3RyaW5nIj09PXR5cGVvZiBlPyh0aGlzLl9xdWVyeT1lLGU9YS5TZWxlY3Rvci5xdWVyeShlKSk6ZS5ub2RlVHlwZXx8dC5pc1dpbmRvdyhlKT9lPVtlXTplLl9ub2RlP2U9W2UuX25vZGVdOmVbMF0mJmVbMF0uX25vZGU/KGEuQXJyYXkuZWFjaChlLGZ1bmN0aW9uKG0pe20uX25vZGUmJmsucHVzaChtLl9ub2RlKX0pLGU9ayk6ZT1hLkFycmF5KGUsMCwhMCkpO3RoaXMuX25vZGVzPWV8fFtdfTtjLk5BTUU9Ik5vZGVMaXN0IjtjLmdldERPTU5vZGVzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYKZS5fbm9kZXM/ZS5fbm9kZXM6ZX07Yy5lYWNoPWZ1bmN0aW9uKGUsayxtKXt2YXIgcD1lLl9ub2RlcztwJiZwLmxlbmd0aCYmYS5BcnJheS5lYWNoKHAsayxtfHxlKX07Yy5hZGRNZXRob2Q9ZnVuY3Rpb24oZSxrLG0pe2UmJmsmJihjLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3ZhciBwPVtdLHM9YXJndW1lbnRzO2EuQXJyYXkuZWFjaCh0aGlzLl9ub2RlcyxmdW5jdGlvbihsKXt2YXIgaD1hLk5vZGUuX2luc3RhbmNlc1tsW2wudW5pcXVlSUQmJjkhPT1sLm5vZGVUeXBlPyJ1bmlxdWVJRCI6Il95dWlkIl1dO2h8fChoPWMuX2dldFRlbXBOb2RlKGwpKTtsPWsuYXBwbHkobXx8aCxzKTt2b2lkIDAhPT1sJiZsIT09aCYmKHBbcC5sZW5ndGhdPWwpfSk7cmV0dXJuIHAubGVuZ3RoP3A6dGhpc30pfTtjLmltcG9ydE1ldGhvZD1mdW5jdGlvbihlLGssbSl7InN0cmluZyI9PT10eXBlb2Ygaz9jLmFkZE1ldGhvZChtfHxrLGVba10pOmEuQXJyYXkuZWFjaChrLGZ1bmN0aW9uKHApe2MuaW1wb3J0TWV0aG9kKGUsCnApfSl9O2MuX2dldFRlbXBOb2RlPWZ1bmN0aW9uKGUpe3ZhciBrPWMuX3RlbXBOb2RlO2t8fChrPWEuTm9kZS5jcmVhdGUoIlx4M2NkaXZceDNlXHgzYy9kaXZceDNlIiksYy5fdGVtcE5vZGU9ayk7ay5fbm9kZT1lO2suX3N0YXRlUHJveHk9ZTtyZXR1cm4ga307YS5taXgoYy5wcm90b3R5cGUse19pbnZva2U6ZnVuY3Rpb24oZSxrLG0pe3ZhciBwPW0/W106dGhpczt0aGlzLmVhY2goZnVuY3Rpb24ocyl7cz1zW2VdLmFwcGx5KHMsayk7bSYmcC5wdXNoKHMpfSk7cmV0dXJuIHB9LGl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGEub25lKCh0aGlzLl9ub2Rlc3x8W10pW2VdKX0sZWFjaDpmdW5jdGlvbihlLGspe3ZhciBtPXRoaXM7YS5BcnJheS5lYWNoKHRoaXMuX25vZGVzLGZ1bmN0aW9uKHAscyl7cD1hLm9uZShwKTtyZXR1cm4gZS5jYWxsKGt8fHAscCxzLG0pfSk7cmV0dXJuIG19LGJhdGNoOmZ1bmN0aW9uKGUsayl7dmFyIG09dGhpczthLkFycmF5LmVhY2godGhpcy5fbm9kZXMsZnVuY3Rpb24ocCwKcyl7dmFyIGw9YS5Ob2RlLl9pbnN0YW5jZXNbcC5feXVpZF07bHx8KGw9Yy5fZ2V0VGVtcE5vZGUocCkpO3JldHVybiBlLmNhbGwoa3x8bCxsLHMsbSl9KTtyZXR1cm4gbX0sc29tZTpmdW5jdGlvbihlLGspe3ZhciBtPXRoaXM7cmV0dXJuIGEuQXJyYXkuc29tZSh0aGlzLl9ub2RlcyxmdW5jdGlvbihwLHMpe3A9YS5vbmUocCk7az1rfHxwO3JldHVybiBlLmNhbGwoayxwLHMsbSl9KX0sdG9GcmFnOmZ1bmN0aW9uKCl7cmV0dXJuIGEub25lKGEuRE9NLl9ubDJmcmFnKHRoaXMuX25vZGVzKSl9LGluZGV4T2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGEuQXJyYXkuaW5kZXhPZih0aGlzLl9ub2RlcyxhLk5vZGUuZ2V0RE9NTm9kZShlKSl9LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gYS5hbGwoYS5TZWxlY3Rvci5maWx0ZXIodGhpcy5fbm9kZXMsZSkpfSxtb2R1bHVzOmZ1bmN0aW9uKGUsayl7az1rfHwwO3ZhciBtPVtdO2MuZWFjaCh0aGlzLGZ1bmN0aW9uKHAscyl7cyVlPT09ayYmbS5wdXNoKHApfSk7CnJldHVybiBhLmFsbChtKX0sb2RkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kdWx1cygyLDEpfSxldmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kdWx1cygyKX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe30scmVmcmVzaDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX25vZGVzLGs9dGhpcy5fcXVlcnksbT10aGlzLl9xdWVyeVJvb3Q7ayYmKCFtJiZlJiZlWzBdJiZlWzBdLm93bmVyRG9jdW1lbnQmJihtPWVbMF0ub3duZXJEb2N1bWVudCksdGhpcy5fbm9kZXM9YS5TZWxlY3Rvci5xdWVyeShrLG0pKTtyZXR1cm4gdGhpc30sc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2Rlcy5sZW5ndGh9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gMT50aGlzLl9ub2Rlcy5sZW5ndGh9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9IiIsaz10aGlzLl95dWlkKyI6IG5vdCBib3VuZCB0byBhbnkgbm9kZXMiLG09dGhpcy5fbm9kZXMscDttJiZtWzBdJiYocD1tWzBdLGUrPXAubm9kZU5hbWUsCnAuaWQmJihlKz0iIyIrcC5pZCkscC5jbGFzc05hbWUmJihlKz0iLiIrcC5jbGFzc05hbWUucmVwbGFjZSgiICIsIi4iKSksMTxtLmxlbmd0aCYmKGUrPSIuLi5bIittLmxlbmd0aCsiIGl0ZW1zXSIpKTtyZXR1cm4gZXx8a30sZ2V0RE9NTm9kZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9kZXN9fSwhMCk7Yy5pbXBvcnRNZXRob2QoYS5Ob2RlLnByb3RvdHlwZSxbImRlc3Ryb3kiLCJlbXB0eSIsInJlbW92ZSIsInNldCJdKTtjLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIGs9W10sbT10aGlzLl9ub2RlcyxwPSExLHM9Yy5fZ2V0VGVtcE5vZGUsbCxoO21bMF0mJihsPWEuTm9kZS5faW5zdGFuY2VzW21bMF0uX3l1aWRdfHxzKG1bMF0pLChoPWwuX2dldChlKSkmJmgubm9kZVR5cGUmJihwPSEwKSk7YS5BcnJheS5lYWNoKG0sZnVuY3Rpb24odSl7KGw9YS5Ob2RlLl9pbnN0YW5jZXNbdS5feXVpZF0pfHwobD1zKHUpKTtoPWwuX2dldChlKTtwfHwoaD1hLk5vZGUuc2NydWJWYWwoaCwKbCkpO2sucHVzaChoKX0pO3JldHVybiBwP2EuYWxsKGspOmt9O2EuTm9kZUxpc3Q9YzthLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGMoZSl9O2EuTm9kZS5hbGw9YS5hbGw7dmFyIGI9YS5Ob2RlTGlzdCxnPUFycmF5LnByb3RvdHlwZTthLk9iamVjdC5lYWNoKHtjb25jYXQ6MSxwb3A6MCxwdXNoOjAsc2hpZnQ6MCxzbGljZToxLHNwbGljZToxLHVuc2hpZnQ6MH0sZnVuY3Rpb24oZSxrKXtiLnByb3RvdHlwZVtrXT1mdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxwPTAsczsidW5kZWZpbmVkIiE9dHlwZW9mKHM9YXJndW1lbnRzW3ArK10pOyltLnB1c2gocy5fbm9kZXx8cy5fbm9kZXN8fHMpO209Z1trXS5hcHBseSh0aGlzLl9ub2RlcyxtKTtyZXR1cm4gbT1lP2EuYWxsKG0pOmEuTm9kZS5zY3J1YlZhbChtKX19KTthLkFycmF5LmVhY2goInJlbW92ZUNoaWxkIGhhc0NoaWxkTm9kZXMgY2xvbmVOb2RlIGhhc0F0dHJpYnV0ZSBzY3JvbGxJbnRvVmlldyBnZXRFbGVtZW50c0J5VGFnTmFtZSBmb2N1cyBibHVyIHN1Ym1pdCByZXNldCBzZWxlY3QgY3JlYXRlQ2FwdGlvbiIuc3BsaXQoIiAiKSwKZnVuY3Rpb24oZSl7YS5Ob2RlLnByb3RvdHlwZVtlXT1mdW5jdGlvbihrLG0scCl7cmV0dXJuIHRoaXMuaW52b2tlKGUsayxtLHApfX0pO2EuTm9kZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3ZhciBrPXRoaXMuX25vZGU7ayYmay5yZW1vdmVBdHRyaWJ1dGUoZSwwKTtyZXR1cm4gdGhpc307YS5Ob2RlLmltcG9ydE1ldGhvZChhLkRPTSwiY29udGFpbnMgc2V0QXR0cmlidXRlIGdldEF0dHJpYnV0ZSB3cmFwIHVud3JhcCBnZW5lcmF0ZUlEIi5zcGxpdCgiICIpKTthLk5vZGVMaXN0LmltcG9ydE1ldGhvZChhLk5vZGUucHJvdG90eXBlLCJnZXRBdHRyaWJ1dGUgc2V0QXR0cmlidXRlIHJlbW92ZUF0dHJpYnV0ZSB1bndyYXAgd3JhcCBnZW5lcmF0ZUlEIi5zcGxpdCgiICIpKX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZG9tLWNvcmUiLCJzZWxlY3RvciJdfSk7CllVSS5hZGQoIm5vZGUtZXZlbnQtZGVsZWdhdGUiLGZ1bmN0aW9uKGEsRSl7YS5Ob2RlLnByb3RvdHlwZS5kZWxlZ2F0ZT1mdW5jdGlvbihxKXt2YXIgdD1hLkFycmF5KGFyZ3VtZW50cywwLCEwKSxmPWEuTGFuZy5pc09iamVjdChxKSYmIWEuTGFuZy5pc0FycmF5KHEpPzE6Mjt0LnNwbGljZShmLDAsdGhpcy5fbm9kZSk7cmV0dXJuIGEuZGVsZWdhdGUuYXBwbHkoYSx0KX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbIm5vZGUtYmFzZSIsImV2ZW50LWRlbGVnYXRlIl19KTsKWVVJLmFkZCgibm9kZS1ldmVudC1zaW11bGF0ZSIsZnVuY3Rpb24oYSxFKXthLk5vZGUucHJvdG90eXBlLnNpbXVsYXRlPWZ1bmN0aW9uKHEsdCl7YS5FdmVudC5zaW11bGF0ZShhLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKSxxLHQpfTthLk5vZGUucHJvdG90eXBlLnNpbXVsYXRlR2VzdHVyZT1mdW5jdGlvbihxLHQsZil7YS5FdmVudC5zaW11bGF0ZUdlc3R1cmUodGhpcyxxLHQsZil9fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJub2RlLWJhc2UiLCJldmVudC1zaW11bGF0ZSIsImdlc3R1cmUtc2ltdWxhdGUiXX0pOwpZVUkuYWRkKCJub2RlLWZvY3VzbWFuYWdlciIsZnVuY3Rpb24oYSxFKXt2YXIgcT17Mzc6ITAsMzg6ITAsMzk6ITAsNDA6ITB9LHQ9e2E6ITAsYnV0dG9uOiEwLGlucHV0OiEwLG9iamVjdDohMH0sZj1hLkxhbmcsZD1hLlVBLGM9ZnVuY3Rpb24oKXtjLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjLkFUVFJTPXtmb2N1c2VkOnt2YWx1ZTohMSxyZWFkT25seTohMH0sZGVzY2VuZGFudHM6e2dldHRlcjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5nZXQoImhvc3QiKS5hbGwoYil9fSxhY3RpdmVEZXNjZW5kYW50OntzZXR0ZXI6ZnVuY3Rpb24oYil7dmFyIGc9Zi5pc051bWJlcixlPWEuQXR0cmlidXRlLklOVkFMSURfVkFMVUUsaz10aGlzLl9kZXNjZW5kYW50c01hcCxtPXRoaXMuX2Rlc2NlbmRhbnRzLHA7ZyhiKT9iPXA9YjpiIGluc3RhbmNlb2YgYS5Ob2RlJiZrPyhwPWtbYi5nZXQoImlkIildLGI9ZyhwKT9wOmUpOmI9ZTttJiYobT1tLml0ZW0ocCkpJiYKbS5nZXQoImRpc2FibGVkIikmJihiPWUpO3JldHVybiBifX0sa2V5czp7dmFsdWU6e25leHQ6bnVsbCxwcmV2aW91czpudWxsfX0sZm9jdXNDbGFzczp7fSxjaXJjdWxhcjp7dmFsdWU6ITB9fTthLmV4dGVuZChjLGEuUGx1Z2luLkJhc2Use19zdG9wcGVkOiEwLF9kZXNjZW5kYW50czpudWxsLF9kZXNjZW5kYW50c01hcDpudWxsLF9mb2N1c2VkTm9kZTpudWxsLF9sYXN0Tm9kZUluZGV4OjAsX2V2ZW50SGFuZGxlcnM6bnVsbCxfaW5pdERlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXQoImRlc2NlbmRhbnRzIiksZz17fSxlPS0xLGssbT10aGlzLmdldCgiYWN0aXZlRGVzY2VuZGFudCIpLHAscyxsPTA7Zi5pc1VuZGVmaW5lZChtKSYmKG09LTEpO2lmKGIpe2s9Yi5zaXplKCk7Zm9yKGw9MDtsPGs7bCsrKXA9Yi5pdGVtKGwpLC0xIT09ZXx8cC5nZXQoImRpc2FibGVkIil8fChlPWwpLDA+bSYmMD09PXBhcnNlSW50KHAuZ2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsMiksCjEwKSYmKG09bCkscCYmcC5zZXQoInRhYkluZGV4IiwtMSkscz1wLmdldCgiaWQiKSxzfHwocz1hLmd1aWQoKSxwLnNldCgiaWQiLHMpKSxnW3NdPWw7MD5tJiYobT0wKTtwPWIuaXRlbShtKTtpZighcHx8cC5nZXQoImRpc2FibGVkIikpcD1iLml0ZW0oZSksbT1lO3RoaXMuX2xhc3ROb2RlSW5kZXg9ay0xO3RoaXMuX2Rlc2NlbmRhbnRzPWI7dGhpcy5fZGVzY2VuZGFudHNNYXA9Zzt0aGlzLnNldCgiYWN0aXZlRGVzY2VuZGFudCIsbSk7cCYmcC5zZXQoInRhYkluZGV4IiwwKX19LF9pc0Rlc2NlbmRhbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIGIuZ2V0KCJpZCIpaW4gdGhpcy5fZGVzY2VuZGFudHNNYXB9LF9yZW1vdmVGb2N1c0NsYXNzOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fZm9jdXNlZE5vZGUsZz10aGlzLmdldCgiZm9jdXNDbGFzcyIpLGU7ZyYmKGU9Zi5pc1N0cmluZyhnKT9nOmcuY2xhc3NOYW1lKTtiJiZlJiZiLnJlbW92ZUNsYXNzKGUpfSxfZGV0YWNoS2V5SGFuZGxlcjpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLl9wcmV2S2V5SGFuZGxlcixnPXRoaXMuX25leHRLZXlIYW5kbGVyO2ImJmIuZGV0YWNoKCk7ZyYmZy5kZXRhY2goKX0sX3ByZXZlbnRTY3JvbGw6ZnVuY3Rpb24oYil7cVtiLmtleUNvZGVdJiZ0aGlzLl9pc0Rlc2NlbmRhbnQoYi50YXJnZXQpJiZiLnByZXZlbnREZWZhdWx0KCl9LF9maXJlQ2xpY2s6ZnVuY3Rpb24oYil7dmFyIGc9Yi50YXJnZXQsZT1nLmdldCgibm9kZU5hbWUiKS50b0xvd2VyQ2FzZSgpOzEzIT09Yi5rZXlDb2RlfHx0W2VdJiYoImEiIT09ZXx8Zy5nZXRBdHRyaWJ1dGUoImhyZWYiKSl8fGcuc2ltdWxhdGUoImNsaWNrIil9LF9hdHRhY2hLZXlIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGV0YWNoS2V5SGFuZGxlcigpO3ZhciBiPXRoaXMuZ2V0KCJrZXlzLm5leHQiKSxnPXRoaXMuZ2V0KCJrZXlzLnByZXZpb3VzIiksZT10aGlzLmdldCgiaG9zdCIpLGs9dGhpcy5fZXZlbnRIYW5kbGVycztnJiYodGhpcy5fcHJldktleUhhbmRsZXI9YS5vbigia2V5IiwKYS5iaW5kKHRoaXMuX2ZvY3VzUHJldmlvdXMsdGhpcyksZSxnKSk7YiYmKHRoaXMuX25leHRLZXlIYW5kbGVyPWEub24oImtleSIsYS5iaW5kKHRoaXMuX2ZvY3VzTmV4dCx0aGlzKSxlLGIpKTtkLm9wZXJhJiZrLnB1c2goZS5vbigia2V5cHJlc3MiLHRoaXMuX3ByZXZlbnRTY3JvbGwsdGhpcykpO2Qub3BlcmF8fGsucHVzaChlLm9uKCJrZXlwcmVzcyIsdGhpcy5fZmlyZUNsaWNrLHRoaXMpKX0sX2RldGFjaEV2ZW50SGFuZGxlcnM6ZnVuY3Rpb24oKXt0aGlzLl9kZXRhY2hLZXlIYW5kbGVyKCk7dmFyIGI9dGhpcy5fZXZlbnRIYW5kbGVycztiJiYoYS5BcnJheS5lYWNoKGIsZnVuY3Rpb24oZyl7Zy5kZXRhY2goKX0pLHRoaXMuX2V2ZW50SGFuZGxlcnM9bnVsbCl9LF9hdHRhY2hFdmVudEhhbmRsZXJzOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fZGVzY2VuZGFudHMsZyxlO2ImJmIuc2l6ZSgpJiYoYj10aGlzLl9ldmVudEhhbmRsZXJzfHxbXSxnPXRoaXMuZ2V0KCJob3N0IikuZ2V0KCJvd25lckRvY3VtZW50IiksCjA9PT1iLmxlbmd0aCYmKGIucHVzaChnLm9uKCJmb2N1cyIsdGhpcy5fb25Eb2NGb2N1cyx0aGlzKSksYi5wdXNoKGcub24oIm1vdXNlZG93biIsdGhpcy5fb25Eb2NNb3VzZURvd24sdGhpcykpLGIucHVzaCh0aGlzLmFmdGVyKCJrZXlzQ2hhbmdlIix0aGlzLl9hdHRhY2hLZXlIYW5kbGVyKSksYi5wdXNoKHRoaXMuYWZ0ZXIoImRlc2NlbmRhbnRzQ2hhbmdlIix0aGlzLl9pbml0RGVzY2VuZGFudHMpKSxiLnB1c2godGhpcy5hZnRlcigiYWN0aXZlRGVzY2VuZGFudENoYW5nZSIsdGhpcy5fYWZ0ZXJBY3RpdmVEZXNjZW5kYW50Q2hhbmdlKSksZT10aGlzLmFmdGVyKCJmb2N1c2VkQ2hhbmdlIixhLmJpbmQoZnVuY3Rpb24oayl7ay5uZXdWYWwmJih0aGlzLl9hdHRhY2hLZXlIYW5kbGVyKCksZS5kZXRhY2goKSl9LHRoaXMpKSxiLnB1c2goZSkpLHRoaXMuX2V2ZW50SGFuZGxlcnM9Yil9LF9vbkRvY01vdXNlRG93bjpmdW5jdGlvbihiKXt2YXIgZz10aGlzLmdldCgiaG9zdCIpLGU9Yi50YXJnZXQsCms9Zy5jb250YWlucyhlKSxtLHA9ZnVuY3Rpb24ocyl7dmFyIGw9ITE7cy5jb21wYXJlVG8oZyl8fChsPXRoaXMuX2lzRGVzY2VuZGFudChzKT9zOnAuY2FsbCh0aGlzLHMuZ2V0KCJwYXJlbnROb2RlIikpKTtyZXR1cm4gbH07ayYmKChtPXAuY2FsbCh0aGlzLGUpKT9lPW06IW0mJnRoaXMuZ2V0KCJmb2N1c2VkIikmJih0aGlzLl9zZXQoImZvY3VzZWQiLCExKSx0aGlzLl9vbkRvY0ZvY3VzKGIpKSk7ayYmdGhpcy5faXNEZXNjZW5kYW50KGUpP3RoaXMuZm9jdXMoZSk6ZC53ZWJraXQmJnRoaXMuZ2V0KCJmb2N1c2VkIikmJigha3x8ayYmIXRoaXMuX2lzRGVzY2VuZGFudChlKSkmJih0aGlzLl9zZXQoImZvY3VzZWQiLCExKSx0aGlzLl9vbkRvY0ZvY3VzKGIpKX0sX29uRG9jRm9jdXM6ZnVuY3Rpb24oYil7Yj10aGlzLl9mb2N1c1RhcmdldHx8Yi50YXJnZXQ7dmFyIGc9dGhpcy5nZXQoImZvY3VzZWQiKSxlPXRoaXMuZ2V0KCJmb2N1c0NsYXNzIiksaz10aGlzLl9mb2N1c2VkTm9kZSwKbTt0aGlzLl9mb2N1c1RhcmdldCYmKHRoaXMuX2ZvY3VzVGFyZ2V0PW51bGwpO3RoaXMuZ2V0KCJob3N0IikuY29udGFpbnMoYik/KG09dGhpcy5faXNEZXNjZW5kYW50KGIpLCFnJiZtP2c9ITA6ZyYmIW0mJihnPSExKSk6Zz0hMTtlJiYoIWt8fGsuY29tcGFyZVRvKGIpJiZnfHx0aGlzLl9yZW1vdmVGb2N1c0NsYXNzKCksbSYmZyYmKGUuZm4/KGI9ZS5mbihiKSxiLmFkZENsYXNzKGUuY2xhc3NOYW1lKSk6Yi5hZGRDbGFzcyhlKSx0aGlzLl9mb2N1c2VkTm9kZT1iKSk7dGhpcy5fc2V0KCJmb2N1c2VkIixnKX0sX2ZvY3VzTmV4dDpmdW5jdGlvbihiLGcpe3ZhciBlPWd8fHRoaXMuZ2V0KCJhY3RpdmVEZXNjZW5kYW50Iiksazt0aGlzLl9pc0Rlc2NlbmRhbnQoYi50YXJnZXQpJiZlPD10aGlzLl9sYXN0Tm9kZUluZGV4JiYoZSs9MSxlPT09dGhpcy5fbGFzdE5vZGVJbmRleCsxJiZ0aGlzLmdldCgiY2lyY3VsYXIiKSYmKGU9MCksKGs9dGhpcy5fZGVzY2VuZGFudHMuaXRlbShlKSkmJgooay5nZXQoImRpc2FibGVkIik/dGhpcy5fZm9jdXNOZXh0KGIsZSk6dGhpcy5mb2N1cyhlKSkpO3RoaXMuX3ByZXZlbnRTY3JvbGwoYil9LF9mb2N1c1ByZXZpb3VzOmZ1bmN0aW9uKGIsZyl7dmFyIGU9Z3x8dGhpcy5nZXQoImFjdGl2ZURlc2NlbmRhbnQiKSxrO3RoaXMuX2lzRGVzY2VuZGFudChiLnRhcmdldCkmJjA8PWUmJihlLT0xLC0xPT09ZSYmdGhpcy5nZXQoImNpcmN1bGFyIikmJihlPXRoaXMuX2xhc3ROb2RlSW5kZXgpLChrPXRoaXMuX2Rlc2NlbmRhbnRzLml0ZW0oZSkpJiYoay5nZXQoImRpc2FibGVkIik/dGhpcy5fZm9jdXNQcmV2aW91cyhiLGUpOnRoaXMuZm9jdXMoZSkpKTt0aGlzLl9wcmV2ZW50U2Nyb2xsKGIpfSxfYWZ0ZXJBY3RpdmVEZXNjZW5kYW50Q2hhbmdlOmZ1bmN0aW9uKGIpe3ZhciBnPXRoaXMuX2Rlc2NlbmRhbnRzLml0ZW0oYi5wcmV2VmFsKTtnJiZnLnNldCgidGFiSW5kZXgiLC0xKTsoZz10aGlzLl9kZXNjZW5kYW50cy5pdGVtKGIubmV3VmFsKSkmJgpnLnNldCgidGFiSW5kZXgiLDApfSxpbml0aWFsaXplcjpmdW5jdGlvbihiKXt0aGlzLnN0YXJ0KCl9LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLnN0b3AoKTt0aGlzLmdldCgiaG9zdCIpLmZvY3VzTWFuYWdlcj1udWxsfSxmb2N1czpmdW5jdGlvbihiKXtmLmlzVW5kZWZpbmVkKGIpJiYoYj10aGlzLmdldCgiYWN0aXZlRGVzY2VuZGFudCIpKTt0aGlzLnNldCgiYWN0aXZlRGVzY2VuZGFudCIsYix7c3JjOiJVSSJ9KTtpZihiPXRoaXMuX2Rlc2NlbmRhbnRzLml0ZW0odGhpcy5nZXQoImFjdGl2ZURlc2NlbmRhbnQiKSkpYi5mb2N1cygpLGQub3BlcmEmJiJidXR0b24iPT09Yi5nZXQoIm5vZGVOYW1lIikudG9Mb3dlckNhc2UoKSYmKHRoaXMuX2ZvY3VzVGFyZ2V0PWIpfSxibHVyOmZ1bmN0aW9uKCl7dmFyIGI7aWYodGhpcy5nZXQoImZvY3VzZWQiKSl7aWYoYj10aGlzLl9kZXNjZW5kYW50cy5pdGVtKHRoaXMuZ2V0KCJhY3RpdmVEZXNjZW5kYW50IikpKWIuYmx1cigpLHRoaXMuX3JlbW92ZUZvY3VzQ2xhc3MoKTsKdGhpcy5fc2V0KCJmb2N1c2VkIiwhMSx7c3JjOiJVSSJ9KX19LHN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fc3RvcHBlZCYmKHRoaXMuX2luaXREZXNjZW5kYW50cygpLHRoaXMuX2F0dGFjaEV2ZW50SGFuZGxlcnMoKSx0aGlzLl9zdG9wcGVkPSExKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX3N0b3BwZWR8fCh0aGlzLl9kZXRhY2hFdmVudEhhbmRsZXJzKCksdGhpcy5fZm9jdXNlZE5vZGU9dGhpcy5fZGVzY2VuZGFudHM9bnVsbCx0aGlzLl9sYXN0Tm9kZUluZGV4PTAsdGhpcy5fc3RvcHBlZD0hMCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9pbml0RGVzY2VuZGFudHMoKTt0aGlzLl9ldmVudEhhbmRsZXJzfHx0aGlzLl9hdHRhY2hFdmVudEhhbmRsZXJzKCl9fSk7Yy5OQU1FPSJub2RlRm9jdXNNYW5hZ2VyIjtjLk5TPSJmb2N1c01hbmFnZXIiO2EubmFtZXNwYWNlKCJQbHVnaW4iKTthLlBsdWdpbi5Ob2RlRm9jdXNNYW5hZ2VyPWN9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczoiYXR0cmlidXRlIG5vZGUgcGx1Z2luIG5vZGUtZXZlbnQtc2ltdWxhdGUgZXZlbnQta2V5IGV2ZW50LWZvY3VzIi5zcGxpdCgiICIpfSk7CllVSS5hZGQoIm5vZGUtcGx1Z2luaG9zdCIsZnVuY3Rpb24oYSxFKXthLk5vZGUucGx1Zz1mdW5jdGlvbigpe3ZhciBxPWEuQXJyYXkoYXJndW1lbnRzKTtxLnVuc2hpZnQoYS5Ob2RlKTthLlBsdWdpbi5Ib3N0LnBsdWcuYXBwbHkoYS5CYXNlLHEpO3JldHVybiBhLk5vZGV9O2EuTm9kZS51bnBsdWc9ZnVuY3Rpb24oKXt2YXIgcT1hLkFycmF5KGFyZ3VtZW50cyk7cS51bnNoaWZ0KGEuTm9kZSk7YS5QbHVnaW4uSG9zdC51bnBsdWcuYXBwbHkoYS5CYXNlLHEpO3JldHVybiBhLk5vZGV9O2EubWl4KGEuTm9kZSxhLlBsdWdpbi5Ib3N0LCExLG51bGwsMSk7YS5PYmplY3QuZWFjaChhLk5vZGUuX2luc3RhbmNlcyxmdW5jdGlvbihxKXthLlBsdWdpbi5Ib3N0LmFwcGx5KHEpfSk7YS5Ob2RlTGlzdC5wcm90b3R5cGUucGx1Zz1mdW5jdGlvbigpe3ZhciBxPWFyZ3VtZW50czthLk5vZGVMaXN0LmVhY2godGhpcyxmdW5jdGlvbih0KXthLk5vZGUucHJvdG90eXBlLnBsdWcuYXBwbHkoYS5vbmUodCksCnEpfSk7cmV0dXJuIHRoaXN9O2EuTm9kZUxpc3QucHJvdG90eXBlLnVucGx1Zz1mdW5jdGlvbigpe3ZhciBxPWFyZ3VtZW50czthLk5vZGVMaXN0LmVhY2godGhpcyxmdW5jdGlvbih0KXthLk5vZGUucHJvdG90eXBlLnVucGx1Zy5hcHBseShhLm9uZSh0KSxxKX0pO3JldHVybiB0aGlzfX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsibm9kZS1iYXNlIiwicGx1Z2luaG9zdCJdfSk7CllVSS5hZGQoIm5vZGUtc2NyZWVuIixmdW5jdGlvbihhLEUpe2EuZWFjaCgid2luV2lkdGggd2luSGVpZ2h0IGRvY1dpZHRoIGRvY0hlaWdodCBkb2NTY3JvbGxYIGRvY1Njcm9sbFkiLnNwbGl0KCIgIiksZnVuY3Rpb24ocSl7YS5Ob2RlLkFUVFJTW3FdPXtnZXR0ZXI6ZnVuY3Rpb24oKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3QudW5zaGlmdChhLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKSk7cmV0dXJuIGEuRE9NW3FdLmFwcGx5KHRoaXMsdCl9fX0pO2EuTm9kZS5BVFRSUy5zY3JvbGxMZWZ0PXtnZXR0ZXI6ZnVuY3Rpb24oKXt2YXIgcT1hLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKTtyZXR1cm4ic2Nyb2xsTGVmdCJpbiBxP3Euc2Nyb2xsTGVmdDphLkRPTS5kb2NTY3JvbGxYKHEpfSxzZXR0ZXI6ZnVuY3Rpb24ocSl7dmFyIHQ9YS5Ob2RlLmdldERPTU5vZGUodGhpcyk7dCYmKCJzY3JvbGxMZWZ0ImluIHQ/dC5zY3JvbGxMZWZ0PXE6KHQuZG9jdW1lbnR8fAo5PT09dC5ub2RlVHlwZSkmJmEuRE9NLl9nZXRXaW4odCkuc2Nyb2xsVG8ocSxhLkRPTS5kb2NTY3JvbGxZKHQpKSl9fTthLk5vZGUuQVRUUlMuc2Nyb2xsVG9wPXtnZXR0ZXI6ZnVuY3Rpb24oKXt2YXIgcT1hLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKTtyZXR1cm4ic2Nyb2xsVG9wImluIHE/cS5zY3JvbGxUb3A6YS5ET00uZG9jU2Nyb2xsWShxKX0sc2V0dGVyOmZ1bmN0aW9uKHEpe3ZhciB0PWEuTm9kZS5nZXRET01Ob2RlKHRoaXMpO3QmJigic2Nyb2xsVG9wImluIHQ/dC5zY3JvbGxUb3A9cToodC5kb2N1bWVudHx8OT09PXQubm9kZVR5cGUpJiZhLkRPTS5fZ2V0V2luKHQpLnNjcm9sbFRvKGEuRE9NLmRvY1Njcm9sbFgodCkscSkpfX07YS5Ob2RlLmltcG9ydE1ldGhvZChhLkRPTSwiZ2V0WFkgc2V0WFkgZ2V0WCBzZXRYIGdldFkgc2V0WSBzd2FwWFkiLnNwbGl0KCIgIikpO2EuTm9kZS5BVFRSUy5yZWdpb249e2dldHRlcjpmdW5jdGlvbigpe3ZhciBxPXRoaXMuZ2V0RE9NTm9kZSgpOwpxJiYhcS50YWdOYW1lJiY5PT09cS5ub2RlVHlwZSYmKHE9cS5kb2N1bWVudEVsZW1lbnQpO3JldHVybiBhLkRPTS5pc1dpbmRvdyhxKT9hLkRPTS52aWV3cG9ydFJlZ2lvbihxKTphLkRPTS5yZWdpb24ocSl9fTthLk5vZGUuQVRUUlMudmlld3BvcnRSZWdpb249e2dldHRlcjpmdW5jdGlvbigpe3JldHVybiBhLkRPTS52aWV3cG9ydFJlZ2lvbihhLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKSl9fTthLk5vZGUuaW1wb3J0TWV0aG9kKGEuRE9NLCJpblZpZXdwb3J0UmVnaW9uIik7YS5Ob2RlLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocSx0KXt2YXIgZj1hLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKTthLmluc3RhbmNlT2YocSxhLk5vZGUpJiYocT1hLk5vZGUuZ2V0RE9NTm9kZShxKSk7cmV0dXJuIGEuRE9NLmludGVyc2VjdChmLHEsdCl9O2EuTm9kZS5wcm90b3R5cGUuaW5SZWdpb249ZnVuY3Rpb24ocSx0LGYpe3ZhciBkPWEuTm9kZS5nZXRET01Ob2RlKHRoaXMpO2EuaW5zdGFuY2VPZihxLAphLk5vZGUpJiYocT1hLk5vZGUuZ2V0RE9NTm9kZShxKSk7cmV0dXJuIGEuRE9NLmluUmVnaW9uKGQscSx0LGYpfX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZG9tLXNjcmVlbiIsIm5vZGUtYmFzZSJdfSk7CllVSS5hZGQoIm5vZGUtc3R5bGUiLGZ1bmN0aW9uKGEsRSl7KGZ1bmN0aW9uKHEpe3EubWl4KHEuTm9kZS5wcm90b3R5cGUse3NldFN0eWxlOmZ1bmN0aW9uKHQsZil7cS5ET00uc2V0U3R5bGUodGhpcy5fbm9kZSx0LGYpO3JldHVybiB0aGlzfSxzZXRTdHlsZXM6ZnVuY3Rpb24odCl7cS5ET00uc2V0U3R5bGVzKHRoaXMuX25vZGUsdCk7cmV0dXJuIHRoaXN9LGdldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBxLkRPTS5nZXRTdHlsZSh0aGlzLl9ub2RlLHQpfSxnZXRDb21wdXRlZFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBxLkRPTS5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX25vZGUsdCl9fSk7cS5Ob2RlTGlzdC5pbXBvcnRNZXRob2QocS5Ob2RlLnByb3RvdHlwZSxbImdldFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInNldFN0eWxlIiwic2V0U3R5bGVzIl0pfSkoYSk7YS5taXgoYS5Ob2RlLnByb3RvdHlwZSx7c2hvdzpmdW5jdGlvbihxKXtxPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLQoxXTt0aGlzLnRvZ2dsZVZpZXcoITAscSk7cmV0dXJuIHRoaXN9LF9zaG93OmZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImhpZGRlbiIpO3RoaXMuc2V0U3R5bGUoImRpc3BsYXkiLCIiKX0sX2lzSGlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8Im5vbmUiPT09YS5ET00uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9ub2RlLCJkaXNwbGF5Iil9LHRvZ2dsZVZpZXc6ZnVuY3Rpb24ocSx0KXt0aGlzLl90b2dnbGVWaWV3LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc30sX3RvZ2dsZVZpZXc6ZnVuY3Rpb24ocSx0KXt0PWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdOyJib29sZWFuIiE9dHlwZW9mIHEmJihxPXRoaXMuX2lzSGlkZGVuKCk/MTowKTtxP3RoaXMuX3Nob3coKTp0aGlzLl9oaWRlKCk7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY2FsbCh0aGlzKTtyZXR1cm4gdGhpc30saGlkZTpmdW5jdGlvbihxKXtxPQphcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTt0aGlzLnRvZ2dsZVZpZXcoITEscSk7cmV0dXJuIHRoaXN9LF9oaWRlOmZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsImhpZGRlbiIpO3RoaXMuc2V0U3R5bGUoImRpc3BsYXkiLCJub25lIil9fSk7YS5Ob2RlTGlzdC5pbXBvcnRNZXRob2QoYS5Ob2RlLnByb3RvdHlwZSxbInNob3ciLCJoaWRlIiwidG9nZ2xlVmlldyJdKX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZG9tLXN0eWxlIiwibm9kZS1iYXNlIl19KTsKWVVJLmFkZCgib29wIixmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEoZyxlLGssbSxwKXtpZihnJiZnW3BdJiZnIT09YSlyZXR1cm4gZ1twXS5jYWxsKGcsZSxrKTtzd2l0Y2goZi50ZXN0KGcpKXtjYXNlIDE6cmV0dXJuIGZbcF0oZyxlLGspO2Nhc2UgMjpyZXR1cm4gZltwXShhLkFycmF5KGcsMCwhMCksZSxrKTtkZWZhdWx0OnJldHVybiBhLk9iamVjdFtwXShnLGUsayxtKX19dmFyIHQ9YS5MYW5nLGY9YS5BcnJheSxkPU9iamVjdC5wcm90b3R5cGUsYz1kLmhhc093blByb3BlcnR5LGI9ZC50b1N0cmluZzthLmF1Z21lbnQ9ZnVuY3Rpb24oZyxlLGssbSxwKXt2YXIgcz1nLnByb3RvdHlwZSxsPXMmJmUsaD1lLnByb3RvdHlwZSx1PXN8fGcsdyx6LEEsSCxGO3A9cD9hLkFycmF5KHApOltdO2wmJih6PXt9LEE9e30sSD17fSx3PWZ1bmN0aW9uKEIsSSl7IWsmJkkgaW4gc3x8KCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1iLmNhbGwoQik/KEhbSV09Qix6W0ldPUFbSV09ZnVuY3Rpb24oKXtyZXR1cm4gRih0aGlzLApCLGFyZ3VtZW50cyl9KTp6W0ldPUIpfSxGPWZ1bmN0aW9uKEIsSSxNKXtmb3IodmFyIEQgaW4gSCljLmNhbGwoSCxEKSYmQltEXT09PUFbRF0mJihCW0RdPUhbRF0pO2UuYXBwbHkoQixwKTtyZXR1cm4gSS5hcHBseShCLE0pfSxtP2EuQXJyYXkuZWFjaChtLGZ1bmN0aW9uKEIpe0IgaW4gaCYmdyhoW0JdLEIpfSk6YS5PYmplY3QuZWFjaChoLHcsbnVsbCwhMCkpO2EubWl4KHUsenx8aCxrLG0pO2x8fGUuYXBwbHkodSxwKTtyZXR1cm4gZ307YS5hZ2dyZWdhdGU9ZnVuY3Rpb24oZyxlLGssbSl7cmV0dXJuIGEubWl4KGcsZSxrLG0sMCwhMCl9O2EuZXh0ZW5kPWZ1bmN0aW9uKGcsZSxrLG0pe2UmJmd8fGEuZXJyb3IoImV4dGVuZCBmYWlsZWQsIHZlcmlmeSBkZXBlbmRlbmNpZXMiKTt2YXIgcD1lLnByb3RvdHlwZSxzPWEuT2JqZWN0KHApO2cucHJvdG90eXBlPXM7cy5jb25zdHJ1Y3Rvcj1nO2cuc3VwZXJjbGFzcz1wO2UhPU9iamVjdCYmcC5jb25zdHJ1Y3Rvcj09ZC5jb25zdHJ1Y3RvciYmCihwLmNvbnN0cnVjdG9yPWUpO2smJmEubWl4KHMsaywhMCk7bSYmYS5taXgoZyxtLCEwKTtyZXR1cm4gZ307YS5lYWNoPWZ1bmN0aW9uKGcsZSxrLG0pe3JldHVybiBxKGcsZSxrLG0sImVhY2giKX07YS5zb21lPWZ1bmN0aW9uKGcsZSxrLG0pe3JldHVybiBxKGcsZSxrLG0sInNvbWUiKX07YS5jbG9uZT1mdW5jdGlvbihnLGUsayxtLHAscyl7dmFyIGwsaCx1O2lmKCF0LmlzT2JqZWN0KGcpfHxhLmluc3RhbmNlT2YoZyxZVUkpfHxnLmFkZEV2ZW50TGlzdGVuZXJ8fGcuYXR0YWNoRXZlbnQpcmV0dXJuIGc7aD1zfHx7fTtzd2l0Y2godC50eXBlKGcpKXtjYXNlICJkYXRlIjpyZXR1cm4gbmV3IERhdGUoZyk7Y2FzZSAicmVnZXhwIjpyZXR1cm4gZztjYXNlICJmdW5jdGlvbiI6cmV0dXJuIGc7Y2FzZSAiYXJyYXkiOmw9W107YnJlYWs7ZGVmYXVsdDppZihnWyJffnl1aW1+XyJdKXJldHVybiBoW2dbIl9+eXVpbX5fIl1dO3U9YS5ndWlkKCk7bD1lP3t9OmEuT2JqZWN0KGcpO2dbIl9+eXVpbX5fIl09CnU7aFt1XT1nfWEuZWFjaChnLGZ1bmN0aW9uKHcseil7IXomJjAhPT16fHxrJiYhMT09PWsuY2FsbChtfHx0aGlzLHcseix0aGlzLGcpfHwiX355dWltfl8iPT09enx8InByb3RvdHlwZSI9PXp8fCh0aGlzW3pdPWEuY2xvbmUodyxlLGssbSxwfHxnLGgpKX0sbCk7c3x8KGEuT2JqZWN0LmVhY2goaCxmdW5jdGlvbih3LHope2lmKHdbIl9+eXVpbX5fIl0pdHJ5e2RlbGV0ZSB3WyJffnl1aW1+XyJdfWNhdGNoKEEpe3dbIl9+eXVpbX5fIl09bnVsbH19LHRoaXMpLGg9bnVsbCk7cmV0dXJuIGx9O2EuYmluZD1mdW5jdGlvbihnLGUpe3ZhciBrPTI8YXJndW1lbnRzLmxlbmd0aD9hLkFycmF5KGFyZ3VtZW50cywyLCEwKTpudWxsO3JldHVybiBmdW5jdGlvbigpe3ZhciBtPXQuaXNTdHJpbmcoZyk/ZVtnXTpnLHA9az9rLmNvbmNhdChhLkFycmF5KGFyZ3VtZW50cywwLCEwKSk6YXJndW1lbnRzO3JldHVybiBtLmFwcGx5KGV8fG0scCl9fTthLnJiaW5kPWZ1bmN0aW9uKGcsZSl7dmFyIGs9MjwKYXJndW1lbnRzLmxlbmd0aD9hLkFycmF5KGFyZ3VtZW50cywyLCEwKTpudWxsO3JldHVybiBmdW5jdGlvbigpe3ZhciBtPXQuaXNTdHJpbmcoZyk/ZVtnXTpnLHA9az9hLkFycmF5KGFyZ3VtZW50cywwLCEwKS5jb25jYXQoayk6YXJndW1lbnRzO3JldHVybiBtLmFwcGx5KGV8fG0scCl9fX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsieXVpLWJhc2UiXX0pOwpZVUkuYWRkKCJwbHVnaW4iLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcSh0KXt0aGlzLmhhc0ltcGwmJnRoaXMuaGFzSW1wbChhLlBsdWdpbi5CYXNlKT9xLnByb3RvdHlwZS5pbml0aWFsaXplci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1xLkFUVFJTPXtob3N0Ont3cml0ZU9uY2U6ITB9fTtxLk5BTUU9InBsdWdpbiI7cS5OUz0icGx1Z2luIjthLmV4dGVuZChxLGEuQmFzZSx7X2hhbmRsZXM6bnVsbCxpbml0aWFsaXplcjpmdW5jdGlvbih0KXt0aGlzLl9oYW5kbGVzPVtdfSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7aWYodGhpcy5faGFuZGxlcylmb3IodmFyIHQ9MCxmPXRoaXMuX2hhbmRsZXMubGVuZ3RoO3Q8Zjt0KyspdGhpcy5faGFuZGxlc1t0XS5kZXRhY2goKX0sZG9CZWZvcmU6ZnVuY3Rpb24odCxmLGQpe3ZhciBjPXRoaXMuZ2V0KCJob3N0IiksYjt0IGluIGM/Yj10aGlzLmJlZm9yZUhvc3RNZXRob2QodCwKZixkKTpjLm9uJiYoYj10aGlzLm9uSG9zdEV2ZW50KHQsZixkKSk7cmV0dXJuIGJ9LGRvQWZ0ZXI6ZnVuY3Rpb24odCxmLGQpe3ZhciBjPXRoaXMuZ2V0KCJob3N0IiksYjt0IGluIGM/Yj10aGlzLmFmdGVySG9zdE1ldGhvZCh0LGYsZCk6Yy5hZnRlciYmKGI9dGhpcy5hZnRlckhvc3RFdmVudCh0LGYsZCkpO3JldHVybiBifSxvbkhvc3RFdmVudDpmdW5jdGlvbih0LGYsZCl7dD10aGlzLmdldCgiaG9zdCIpLm9uKHQsZixkfHx0aGlzKTt0aGlzLl9oYW5kbGVzLnB1c2godCk7cmV0dXJuIHR9LG9uY2VIb3N0RXZlbnQ6ZnVuY3Rpb24odCxmLGQpe3Q9dGhpcy5nZXQoImhvc3QiKS5vbmNlKHQsZixkfHx0aGlzKTt0aGlzLl9oYW5kbGVzLnB1c2godCk7cmV0dXJuIHR9LGFmdGVySG9zdEV2ZW50OmZ1bmN0aW9uKHQsZixkKXt0PXRoaXMuZ2V0KCJob3N0IikuYWZ0ZXIodCxmLGR8fHRoaXMpO3RoaXMuX2hhbmRsZXMucHVzaCh0KTtyZXR1cm4gdH0sb25jZUFmdGVySG9zdEV2ZW50OmZ1bmN0aW9uKHQsCmYsZCl7dD10aGlzLmdldCgiaG9zdCIpLm9uY2VBZnRlcih0LGYsZHx8dGhpcyk7dGhpcy5faGFuZGxlcy5wdXNoKHQpO3JldHVybiB0fSxiZWZvcmVIb3N0TWV0aG9kOmZ1bmN0aW9uKHQsZixkKXt0PWEuRG8uYmVmb3JlKGYsdGhpcy5nZXQoImhvc3QiKSx0LGR8fHRoaXMpO3RoaXMuX2hhbmRsZXMucHVzaCh0KTtyZXR1cm4gdH0sYWZ0ZXJIb3N0TWV0aG9kOmZ1bmN0aW9uKHQsZixkKXt0PWEuRG8uYWZ0ZXIoZix0aGlzLmdldCgiaG9zdCIpLHQsZHx8dGhpcyk7dGhpcy5faGFuZGxlcy5wdXNoKHQpO3JldHVybiB0fSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLk5BTUUrIlsiK3RoaXMuY29uc3RydWN0b3IuTlMrIl0ifX0pO2EubmFtZXNwYWNlKCJQbHVnaW4iKS5CYXNlPXF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImJhc2UtYmFzZSJdfSk7CllVSS5hZGQoInBsdWdpbmhvc3QtYmFzZSIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKCl7dGhpcy5fcGx1Z2lucz17fX12YXIgdD1hLkxhbmc7cS5wcm90b3R5cGU9e3BsdWc6ZnVuY3Rpb24oZixkKXt2YXIgYyxiO2lmKHQuaXNBcnJheShmKSlmb3IoYz0wLGI9Zi5sZW5ndGg7YzxiO2MrKyl0aGlzLnBsdWcoZltjXSk7ZWxzZSBmJiYhdC5pc0Z1bmN0aW9uKGYpJiYoZD1mLmNmZyxmPWYuZm4pLGYmJmYuTlMmJihjPWYuTlMsZD1kfHx7fSxkLmhvc3Q9dGhpcyx0aGlzLmhhc1BsdWdpbihjKT90aGlzW2NdLnNldEF0dHJzJiZ0aGlzW2NdLnNldEF0dHJzKGQpOih0aGlzW2NdPW5ldyBmKGQpLHRoaXMuX3BsdWdpbnNbY109ZikpO3JldHVybiB0aGlzfSx1bnBsdWc6ZnVuY3Rpb24oZil7dmFyIGQ9ZixjPXRoaXMuX3BsdWdpbnM7aWYoZil0LmlzRnVuY3Rpb24oZikmJihkPWYuTlMsIWR8fGNbZF0mJmNbZF09PT1mfHwoZD1udWxsKSksZCYmKHRoaXNbZF0mJih0aGlzW2RdLmRlc3Ryb3kmJgp0aGlzW2RdLmRlc3Ryb3koKSxkZWxldGUgdGhpc1tkXSksY1tkXSYmZGVsZXRlIGNbZF0pO2Vsc2UgZm9yKGQgaW4gdGhpcy5fcGx1Z2lucyl0aGlzLl9wbHVnaW5zLmhhc093blByb3BlcnR5KGQpJiZ0aGlzLnVucGx1ZyhkKTtyZXR1cm4gdGhpc30saGFzUGx1Z2luOmZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLl9wbHVnaW5zW2ZdJiZ0aGlzW2ZdfSxfaW5pdFBsdWdpbnM6ZnVuY3Rpb24oZil7dGhpcy5fcGx1Z2lucz10aGlzLl9wbHVnaW5zfHx7fTt0aGlzLl9pbml0Q29uZmlnUGx1Z2lucyYmdGhpcy5faW5pdENvbmZpZ1BsdWdpbnMoZil9LF9kZXN0cm95UGx1Z2luczpmdW5jdGlvbigpe3RoaXMudW5wbHVnKCl9fTthLm5hbWVzcGFjZSgiUGx1Z2luIikuSG9zdD1xfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoInBsdWdpbmhvc3QtY29uZmlnIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuUGx1Z2luLkhvc3QsdD1hLkxhbmc7cS5wcm90b3R5cGUuX2luaXRDb25maWdQbHVnaW5zPWZ1bmN0aW9uKGYpe3ZhciBkPXRoaXMuX2dldENsYXNzZXM/dGhpcy5fZ2V0Q2xhc3NlcygpOlt0aGlzLmNvbnN0cnVjdG9yXSxjPVtdLGI9e30sZyxlLGssbTtmb3IoZT1kLmxlbmd0aC0xOzA8PWU7ZS0tKWc9ZFtlXSwoaz1nLl9VTlBMVUcpJiZhLm1peChiLGssITApLChnPWcuX1BMVUcpJiZhLm1peChjLGcsITApO2ZvcihtIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShtKSYmKGJbbV18fHRoaXMucGx1ZyhjW21dKSk7ZiYmZi5wbHVnaW5zJiZ0aGlzLnBsdWcoZi5wbHVnaW5zKX07cS5wbHVnPWZ1bmN0aW9uKGYsZCxjKXt2YXIgYixnLGU7aWYoZiE9PWEuQmFzZSlmb3IoZi5fUExVRz1mLl9QTFVHfHx7fSx0LmlzQXJyYXkoZCl8fChjJiYoZD17Zm46ZCxjZmc6Y30pLGQ9W2RdKSxiPTAsZz1kLmxlbmd0aDtiPApnO2IrKyljPWRbYl0sZT1jLk5BTUV8fGMuZm4uTkFNRSxmLl9QTFVHW2VdPWN9O3EudW5wbHVnPWZ1bmN0aW9uKGYsZCl7dmFyIGMsYixnLGU7aWYoZiE9PWEuQmFzZSlmb3IoZi5fVU5QTFVHPWYuX1VOUExVR3x8e30sdC5pc0FycmF5KGQpfHwoZD1bZF0pLGI9MCxnPWQubGVuZ3RoO2I8ZztiKyspYz1kW2JdLGU9Yy5OQU1FLGYuX1BMVUdbZV0/ZGVsZXRlIGYuX1BMVUdbZV06Zi5fVU5QTFVHW2VdPWN9fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJwbHVnaW5ob3N0LWJhc2UiXX0pOwpZVUkuYWRkKCJxdWVyeXN0cmluZy1zdHJpbmdpZnktc2ltcGxlIixmdW5jdGlvbihhLEUpe3ZhciBxPWEubmFtZXNwYWNlKCJRdWVyeVN0cmluZyIpLHQ9ZW5jb2RlVVJJQ29tcG9uZW50O3Euc3RyaW5naWZ5PWZ1bmN0aW9uKGYsZCl7dmFyIGM9W10sYj1kJiZkLmFycmF5S2V5PyEwOiExLGcsZSxrO2ZvcihnIGluIGYpaWYoZi5oYXNPd25Qcm9wZXJ0eShnKSlpZihhLkxhbmcuaXNBcnJheShmW2ddKSlmb3IoZT0wLGs9ZltnXS5sZW5ndGg7ZTxrO2UrKyljLnB1c2godChiP2crIltdIjpnKSsiXHgzZCIrdChmW2ddW2VdKSk7ZWxzZSBjLnB1c2godChnKSsiXHgzZCIrdChmW2ddKSk7cmV0dXJuIGMuam9pbigiXHgyNiIpfX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsieXVpLWJhc2UiXX0pOwpZVUkuYWRkKCJxdWV1ZS1wcm9tb3RlIixmdW5jdGlvbihhLEUpe2EubWl4KGEuUXVldWUucHJvdG90eXBlLHtpbmRleE9mOmZ1bmN0aW9uKHEpe3JldHVybiBhLkFycmF5LmluZGV4T2YodGhpcy5fcSxxKX0scHJvbW90ZTpmdW5jdGlvbihxKXtxPXRoaXMuaW5kZXhPZihxKTstMTxxJiZ0aGlzLl9xLnVuc2hpZnQodGhpcy5fcS5zcGxpY2UocSwxKVswXSl9LHJlbW92ZTpmdW5jdGlvbihxKXtxPXRoaXMuaW5kZXhPZihxKTstMTxxJiZ0aGlzLl9xLnNwbGljZShxLDEpfX0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoInNlbGVjdG9yLWNzczIiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5TZWxlY3Rvcix0PXtfcmVSZWdFeHBUb2tlbnM6LyhbXF5cJFw/XFtcXVwqXCtcLVwuXChcKVx8XFxdKS8sU09SVF9SRVNVTFRTOiEwLF9pc1hNTDoiRElWIiE9PWEuY29uZmlnLmRvYy5jcmVhdGVFbGVtZW50KCJkaXYiKS50YWdOYW1lLHNob3J0aGFuZDp7IlxcIygtP1tfYS16MC05XStbLVxcd1xcdUUwMDBdKikiOiJbaWRceDNkJDFdIiwiXFwuKC0/W19hLXpdK1stXFx3XFx1RTAwMF0qKSI6IltjbGFzc05hbWV+XHgzZCQxXSJ9LG9wZXJhdG9yczp7IiI6ZnVuY3Rpb24oZixkKXtyZXR1cm4iIiE9PWEuRE9NLmdldEF0dHJpYnV0ZShmLGQpfSwiflx4M2QiOiIoPzpefFxccyspe3ZhbH0oPzpcXHMrfCQpIiwifFx4M2QiOiJee3ZhbH0tPyJ9LHBzZXVkb3M6eyJmaXJzdC1jaGlsZCI6ZnVuY3Rpb24oZil7cmV0dXJuIGEuRE9NLl9jaGlsZHJlbihmLnBhcmVudE5vZGUpWzBdPT09Zn19LF9icnV0ZVF1ZXJ5OmZ1bmN0aW9uKGYsCmQsYyl7dmFyIGI9W10sZz1bXSxlO2Y9cS5fdG9rZW5pemUoZik7dmFyIGs9ZltmLmxlbmd0aC0xXTthLkRPTS5fZ2V0RG9jKGQpO3ZhciBtO2lmKGspe2U9ay5pZDttPWsuY2xhc3NOYW1lO2s9ay50YWdOYW1lfHwiKiI7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSlnPWUmJihkLmFsbHx8OT09PWQubm9kZVR5cGV8fGEuRE9NLmluRG9jKGQpKT9hLkRPTS5hbGxCeUlkKGUsZCk6bT9kLmdldEVsZW1lbnRzQnlDbGFzc05hbWUobSk6ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShrKTtlbHNlIGZvcihlPVtdLGQ9ZC5maXJzdENoaWxkLG09IioiPT09aztkOyl7Zm9yKDtkOykiQCI8ZC50YWdOYW1lJiYobXx8ZC50YWdOYW1lPT09aykmJmcucHVzaChkKSxlLnB1c2goZCksZD1kLmZpcnN0Q2hpbGQ7Zm9yKDswPGUubGVuZ3RoJiYhZDspZD1lLnBvcCgpLm5leHRTaWJsaW5nfWcubGVuZ3RoJiYoYj1xLl9maWx0ZXJOb2RlcyhnLGYsYykpfXJldHVybiBifSwKX2ZpbHRlck5vZGVzOmZ1bmN0aW9uKGYsZCxjKXtmb3IodmFyIGI9MCxnLGU9ZC5sZW5ndGgsaz1lLTEsbT1bXSxwPWZbMF0scz1wLGw9YS5TZWxlY3Rvci5nZXR0ZXJzLGgsdSx3LHosQSxILGI9MDtzPXA9ZltiKytdOylhOmZvcihrPWUtMSx3PW51bGw7cyYmcy50YWdOYW1lOyl7dT1kW2tdO0E9dS50ZXN0cztpZihnPUEubGVuZ3RoKWZvcig7SD1BWy0tZ107KWlmKGg9SFsxXSxsW0hbMF1dP3o9bFtIWzBdXShzLEhbMF0pOih6PXNbSFswXV0sInRhZ05hbWUiIT09SFswXXx8cS5faXNYTUx8fCh6PXoudG9VcHBlckNhc2UoKSksInN0cmluZyIhPXR5cGVvZiB6JiZ2b2lkIDAhPT16JiZ6LnRvU3RyaW5nP3o9ei50b1N0cmluZygpOnZvaWQgMD09PXomJnMuZ2V0QXR0cmlidXRlJiYoej1zLmdldEF0dHJpYnV0ZShIWzBdLDIpKSksIlx4M2QiPT09aCYmeiE9PUhbMl18fCJzdHJpbmciIT09dHlwZW9mIGgmJmgudGVzdCYmIWgudGVzdCh6KXx8IWgudGVzdCYmImZ1bmN0aW9uIj09PXR5cGVvZiBoJiYKIWgocyxIWzBdLEhbMl0pKXtpZihzPXNbd10pZm9yKDtzJiYoIXMudGFnTmFtZXx8dS50YWdOYW1lJiZ1LnRhZ05hbWUhPT1zLnRhZ05hbWUpOylzPXNbd107Y29udGludWUgYX1rLS07aWYoZz11LmNvbWJpbmF0b3Ipe3c9Zy5heGlzO2ZvcihzPXNbd107cyYmIXMudGFnTmFtZTspcz1zW3ddO2cuZGlyZWN0JiYodz1udWxsKX1lbHNle20ucHVzaChwKTtpZihjKXJldHVybiBtO2JyZWFrfX1yZXR1cm4gbX0sY29tYmluYXRvcnM6eyIgIjp7YXhpczoicGFyZW50Tm9kZSJ9LCJceDNlIjp7YXhpczoicGFyZW50Tm9kZSIsZGlyZWN0OiEwfSwiKyI6e2F4aXM6InByZXZpb3VzU2libGluZyIsZGlyZWN0OiEwfX0sX3BhcnNlcnM6W3tuYW1lOiJhdHRyaWJ1dGVzIixyZTovXlx1RTAwMygtP1thLXpdK1tcd1wtXSopKyhbflx8XF5cJFwqIT1dPT8pP1snIl0/KFteXHVFMDA0JyJdKilbJyJdP1x1RTAwNC9pLGZuOmZ1bmN0aW9uKGYsZCl7dmFyIGM9ZlsyXXx8IiIsYj1xLm9wZXJhdG9ycyxnPQpmWzNdP2ZbM10ucmVwbGFjZSgvXFwvZywiIik6IiI7aWYoImlkIj09PWZbMV0mJiJceDNkIj09PWN8fCJjbGFzc05hbWUiPT09ZlsxXSYmYS5jb25maWcuZG9jLmRvY3VtZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiYoIn5ceDNkIj09PWN8fCJceDNkIj09PWMpKWQucHJlZmlsdGVyPWZbMV0sZlszXT1nLGRbZlsxXV09ImlkIj09PWZbMV0/ZlszXTpnO2MgaW4gYiYmKGM9YltjXSwic3RyaW5nIj09PXR5cGVvZiBjJiYoZlszXT1nLnJlcGxhY2UocS5fcmVSZWdFeHBUb2tlbnMsIlxcJDEiKSxjPVJlZ0V4cChjLnJlcGxhY2UoInt2YWx9IixmWzNdKSkpLGZbMl09Yyk7aWYoIWQubGFzdHx8ZC5wcmVmaWx0ZXIhPT1mWzFdKXJldHVybiBmLnNsaWNlKDEpfX0se25hbWU6InRhZ05hbWUiLHJlOi9eKCg/Oi0/W19hLXpdK1tcdy1dKil8XCopL2ksZm46ZnVuY3Rpb24oZixkKXt2YXIgYz1mWzFdO3EuX2lzWE1MfHwoYz1jLnRvVXBwZXJDYXNlKCkpO2QudGFnTmFtZT1jO2lmKCIqIiE9PQpjJiYoIWQubGFzdHx8ZC5wcmVmaWx0ZXIpKXJldHVyblsidGFnTmFtZSIsIlx4M2QiLGNdO2QucHJlZmlsdGVyfHwoZC5wcmVmaWx0ZXI9InRhZ05hbWUiKX19LHtuYW1lOiJjb21iaW5hdG9yIixyZTovXlxzKihbPit+XXxccylccyovLGZuOmZ1bmN0aW9uKGYsZCl7fX0se25hbWU6InBzZXVkb3MiLHJlOi9eOihbXC1cd10rKSg/Olx1RTAwNVsnIl0/KFteXHVFMDA1XSopWyciXT9cdUUwMDYpKi9pLGZuOmZ1bmN0aW9uKGYsZCl7dmFyIGM9cS5wc2V1ZG9zW2ZbMV1dO3JldHVybiBjPyhmWzJdJiYoZlsyXT1mWzJdLnJlcGxhY2UoL1xcL2csIiIpKSxbZlsyXSxjXSk6ITF9fV0sX2dldFRva2VuOmZ1bmN0aW9uKGYpe3JldHVybnt0YWdOYW1lOm51bGwsaWQ6bnVsbCxjbGFzc05hbWU6bnVsbCxhdHRyaWJ1dGVzOnt9LGNvbWJpbmF0b3I6bnVsbCx0ZXN0czpbXX19LF90b2tlbml6ZTpmdW5jdGlvbihmKXtmPXEuX3BhcnNlU2VsZWN0b3IoYS5MYW5nLnRyaW0oZnx8IiIpKTt2YXIgZD0KcS5fZ2V0VG9rZW4oKSxjPVtdLGI9ITEsZyxlLGs7YTpkbyBmb3IoYj0hMSxlPTA7az1xLl9wYXJzZXJzW2UrK107KWlmKGc9ay5yZS5leGVjKGYpKXsiY29tYmluYXRvciIhPT1rLm5hbWUmJihkLnNlbGVjdG9yPWYpO2Y9Zi5yZXBsYWNlKGdbMF0sIiIpO2YubGVuZ3RofHwoZC5sYXN0PSEwKTtxLl9hdHRyRmlsdGVyc1tnWzFdXSYmKGdbMV09cS5fYXR0ckZpbHRlcnNbZ1sxXV0pO2I9ay5mbihnLGQpO2lmKCExPT09Yil7Yj0hMTticmVhayBhfWVsc2UgYiYmZC50ZXN0cy5wdXNoKGIpO2YubGVuZ3RoJiYiY29tYmluYXRvciIhPT1rLm5hbWV8fChjLnB1c2goZCksZD1xLl9nZXRUb2tlbihkKSwiY29tYmluYXRvciI9PT1rLm5hbWUmJihkLmNvbWJpbmF0b3I9YS5TZWxlY3Rvci5jb21iaW5hdG9yc1tnWzFdXSkpO2I9ITB9d2hpbGUoYiYmZi5sZW5ndGgpO2lmKCFifHxmLmxlbmd0aCljPVtdO3JldHVybiBjfSxfcmVwbGFjZU1hcmtlcnM6ZnVuY3Rpb24oZil7Zj1mLnJlcGxhY2UoL1xbL2csCiJcdWUwMDMiKTtmPWYucmVwbGFjZSgvXF0vZywiXHVlMDA0Iik7Zj1mLnJlcGxhY2UoL1woL2csIlx1ZTAwNSIpO3JldHVybiBmPWYucmVwbGFjZSgvXCkvZywiXHVlMDA2Iil9LF9yZXBsYWNlU2hvcnRoYW5kOmZ1bmN0aW9uKGYpe3ZhciBkPWEuU2VsZWN0b3Iuc2hvcnRoYW5kLGM7Zm9yKGMgaW4gZClkLmhhc093blByb3BlcnR5KGMpJiYoZj1mLnJlcGxhY2UoUmVnRXhwKGMsImdpIiksZFtjXSkpO3JldHVybiBmfSxfcGFyc2VTZWxlY3RvcjpmdW5jdGlvbihmKXt2YXIgZD1hLlNlbGVjdG9yLl9yZXBsYWNlU2VsZWN0b3IoZik7Zj1kLnNlbGVjdG9yO2Y9YS5TZWxlY3Rvci5fcmVwbGFjZVNob3J0aGFuZChmKTtmPWEuU2VsZWN0b3IuX3Jlc3RvcmUoImF0dHIiLGYsZC5hdHRycyk7Zj1hLlNlbGVjdG9yLl9yZXN0b3JlKCJwc2V1ZG8iLGYsZC5wc2V1ZG9zKTtmPWEuU2VsZWN0b3IuX3JlcGxhY2VNYXJrZXJzKGYpO3JldHVybiBmPWEuU2VsZWN0b3IuX3Jlc3RvcmUoImVzYyIsZiwKZC5lc2MpfSxfYXR0ckZpbHRlcnM6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxnZXR0ZXJzOntocmVmOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGEuRE9NLmdldEF0dHJpYnV0ZShmLGQpfSxpZDpmdW5jdGlvbihmLGQpe3JldHVybiBhLkRPTS5nZXRJZChmKX19fTthLm1peChhLlNlbGVjdG9yLHQsITApO2EuU2VsZWN0b3IuZ2V0dGVycy5zcmM9YS5TZWxlY3Rvci5nZXR0ZXJzLnJlbD1hLlNlbGVjdG9yLmdldHRlcnMuaHJlZjthLlNlbGVjdG9yLnVzZU5hdGl2ZSYmYS5jb25maWcuZG9jLnF1ZXJ5U2VsZWN0b3ImJihhLlNlbGVjdG9yLnNob3J0aGFuZFsiXFwuKC0/W19hLXpdK1stXFx3XSopIl09IltjbGFzc35ceDNkJDFdIil9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInNlbGVjdG9yLW5hdGl2ZSJdfSk7CllVSS5hZGQoInNlbGVjdG9yLWNzczMiLGZ1bmN0aW9uKGEsRSl7YS5TZWxlY3Rvci5fcmVOdGg9L14oPzooW1wtXT9cZCopKG4pezF9fChvZGR8ZXZlbikkKSooW1wtK10/XGQqKSQvO2EuU2VsZWN0b3IuX2dldE50aD1mdW5jdGlvbihxLHQsZixkKXthLlNlbGVjdG9yLl9yZU50aC50ZXN0KHQpO3Q9cGFyc2VJbnQoUmVnRXhwLiQxLDEwKTt2YXIgYz1SZWdFeHAuJDIsYj1SZWdFeHAuJDMsZz1wYXJzZUludChSZWdFeHAuJDQsMTApfHwwO2Y9YS5ET00uX2NoaWxkcmVuKHEucGFyZW50Tm9kZSxmKTtiPyh0PTIsZz0ib2RkIj09PWI/MTowKTppc05hTih0KSYmKHQ9Yz8xOjApO2lmKDA9PT10KXJldHVybiBkJiYoZz1mLmxlbmd0aC1nKzEpLGZbZy0xXT09PXE/ITA6ITE7MD50JiYoZD0hIWQsdD1NYXRoLmFicyh0KSk7aWYoZClmb3IoZD1mLmxlbmd0aC1nLGM9Zi5sZW5ndGg7MDw9ZDtkLT10KXtpZihkPGMmJmZbZF09PT1xKXJldHVybiEwfWVsc2UgZm9yKGQ9Zy0xLGM9Zi5sZW5ndGg7ZDwKYztkKz10KWlmKDA8PWQmJmZbZF09PT1xKXJldHVybiEwO3JldHVybiExfTthLm1peChhLlNlbGVjdG9yLnBzZXVkb3Mse3Jvb3Q6ZnVuY3Rpb24ocSl7cmV0dXJuIHE9PT1xLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fSwibnRoLWNoaWxkIjpmdW5jdGlvbihxLHQpe3JldHVybiBhLlNlbGVjdG9yLl9nZXROdGgocSx0KX0sIm50aC1sYXN0LWNoaWxkIjpmdW5jdGlvbihxLHQpe3JldHVybiBhLlNlbGVjdG9yLl9nZXROdGgocSx0LG51bGwsITApfSwibnRoLW9mLXR5cGUiOmZ1bmN0aW9uKHEsdCl7cmV0dXJuIGEuU2VsZWN0b3IuX2dldE50aChxLHQscS50YWdOYW1lKX0sIm50aC1sYXN0LW9mLXR5cGUiOmZ1bmN0aW9uKHEsdCl7cmV0dXJuIGEuU2VsZWN0b3IuX2dldE50aChxLHQscS50YWdOYW1lLCEwKX0sImxhc3QtY2hpbGQiOmZ1bmN0aW9uKHEpe3ZhciB0PWEuRE9NLl9jaGlsZHJlbihxLnBhcmVudE5vZGUpO3JldHVybiB0W3QubGVuZ3RoLTFdPT09cX0sImZpcnN0LW9mLXR5cGUiOmZ1bmN0aW9uKHEpe3JldHVybiBhLkRPTS5fY2hpbGRyZW4ocS5wYXJlbnROb2RlLApxLnRhZ05hbWUpWzBdPT09cX0sImxhc3Qtb2YtdHlwZSI6ZnVuY3Rpb24ocSl7dmFyIHQ9YS5ET00uX2NoaWxkcmVuKHEucGFyZW50Tm9kZSxxLnRhZ05hbWUpO3JldHVybiB0W3QubGVuZ3RoLTFdPT09cX0sIm9ubHktY2hpbGQiOmZ1bmN0aW9uKHEpe3ZhciB0PWEuRE9NLl9jaGlsZHJlbihxLnBhcmVudE5vZGUpO3JldHVybiAxPT09dC5sZW5ndGgmJnRbMF09PT1xfSwib25seS1vZi10eXBlIjpmdW5jdGlvbihxKXt2YXIgdD1hLkRPTS5fY2hpbGRyZW4ocS5wYXJlbnROb2RlLHEudGFnTmFtZSk7cmV0dXJuIDE9PT10Lmxlbmd0aCYmdFswXT09PXF9LGVtcHR5OmZ1bmN0aW9uKHEpe3JldHVybiAwPT09cS5jaGlsZE5vZGVzLmxlbmd0aH0sbm90OmZ1bmN0aW9uKHEsdCl7cmV0dXJuIWEuU2VsZWN0b3IudGVzdChxLHQpfSxjb250YWluczpmdW5jdGlvbihxLHQpe3JldHVybi0xPChxLmlubmVyVGV4dHx8cS50ZXh0Q29udGVudHx8IiIpLmluZGV4T2YodCl9LGNoZWNrZWQ6ZnVuY3Rpb24ocSl7cmV0dXJuITA9PT0KcS5jaGVja2VkfHwhMD09PXEuc2VsZWN0ZWR9LGVuYWJsZWQ6ZnVuY3Rpb24ocSl7cmV0dXJuIHZvaWQgMCE9PXEuZGlzYWJsZWQmJiFxLmRpc2FibGVkfSxkaXNhYmxlZDpmdW5jdGlvbihxKXtyZXR1cm4gcS5kaXNhYmxlZH19KTthLm1peChhLlNlbGVjdG9yLm9wZXJhdG9ycyx7Il5ceDNkIjoiXnt2YWx9IiwiJFx4M2QiOiJ7dmFsfSQiLCIqXHgzZCI6Int2YWx9In0pO2EuU2VsZWN0b3IuY29tYmluYXRvcnNbIn4iXT17YXhpczoicHJldmlvdXNTaWJsaW5nIn19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInNlbGVjdG9yLW5hdGl2ZSIsInNlbGVjdG9yLWNzczIiXX0pOwpZVUkuYWRkKCJzZWxlY3Rvci1uYXRpdmUiLGZ1bmN0aW9uKGEsRSl7KGZ1bmN0aW9uKHEpe3EubmFtZXNwYWNlKCJTZWxlY3RvciIpO3ZhciB0PXtfdHlwZXM6e2VzYzp7dG9rZW46Ilx1ZTAwMCIscmU6L1xcWzpcW1xdXChcKSNcLlwnXD4rfiJdL2dpfSxhdHRyOnt0b2tlbjoiXHVlMDAxIixyZTovKFxbW15cXV0qXF0pL2d9LHBzZXVkbzp7dG9rZW46Ilx1ZTAwMiIscmU6LyhcKFteXCldKlwpKS9nfX0sdXNlTmF0aXZlOiEwLF9lc2NhcGVJZDpmdW5jdGlvbihmKXtmJiYoZj1mLnJlcGxhY2UoLyhbOlxbXF1cKFwpI1wuJzw+K34iXSkvZywiXFwkMSIpKTtyZXR1cm4gZn0sX2NvbXBhcmU6InNvdXJjZUluZGV4ImluIHEuY29uZmlnLmRvYy5kb2N1bWVudEVsZW1lbnQ/ZnVuY3Rpb24oZixkKXt2YXIgYz1mLnNvdXJjZUluZGV4LGI9ZC5zb3VyY2VJbmRleDtyZXR1cm4gYz09PWI/MDpjPmI/MTotMX06cS5jb25maWcuZG9jLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8KZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkKSY0Py0xOjF9OmZ1bmN0aW9uKGYsZCl7dmFyIGMsYjtmJiZkJiYoYz1mLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxjLnNldFN0YXJ0KGYsMCksYj1kLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxiLnNldFN0YXJ0KGQsMCksYz1jLmNvbXBhcmVCb3VuZGFyeVBvaW50cygxLGIpKTtyZXR1cm4gY30sX3NvcnQ6ZnVuY3Rpb24oZil7ZiYmKGY9cS5BcnJheShmLDAsITApLGYuc29ydCYmZi5zb3J0KHQuX2NvbXBhcmUpKTtyZXR1cm4gZn0sX2RlRHVwZTpmdW5jdGlvbihmKXt2YXIgZD1bXSxjLGI7Zm9yKGM9MDtiPWZbYysrXTspYi5fZm91bmR8fChkW2QubGVuZ3RoXT1iLGIuX2ZvdW5kPSEwKTtmb3IoYz0wO2I9ZFtjKytdOyliLl9mb3VuZD1udWxsLGIucmVtb3ZlQXR0cmlidXRlKCJfZm91bmQiKTtyZXR1cm4gZH0scXVlcnk6ZnVuY3Rpb24oZixkLGMsYil7ZD1kfHxxLmNvbmZpZy5kb2M7CnZhciBnPVtdLGU9cS5TZWxlY3Rvci51c2VOYXRpdmUmJnEuY29uZmlnLmRvYy5xdWVyeVNlbGVjdG9yJiYhYixrPVtbZixkXV0sbT1lP3EuU2VsZWN0b3IuX25hdGl2ZVF1ZXJ5OnEuU2VsZWN0b3IuX2JydXRlUXVlcnk7aWYoZiYmbSl7Ynx8ZSYmIWQudGFnTmFtZXx8KGs9dC5fc3BsaXRRdWVyaWVzKGYsZCkpO2ZvcihmPTA7ZD1rW2YrK107KWQ9bShkWzBdLGRbMV0sYyksY3x8KGQ9cS5BcnJheShkLDAsITApKSxkJiYoZz1nLmNvbmNhdChkKSk7MTxrLmxlbmd0aCYmKGc9dC5fc29ydCh0Ll9kZUR1cGUoZykpKX1yZXR1cm4gYz9nWzBdfHxudWxsOmd9LF9yZXBsYWNlU2VsZWN0b3I6ZnVuY3Rpb24oZil7dmFyIGQ9cS5TZWxlY3Rvci5fcGFyc2UoImVzYyIsZiksYyxiO2Y9cS5TZWxlY3Rvci5fcmVwbGFjZSgiZXNjIixmKTtiPXEuU2VsZWN0b3IuX3BhcnNlKCJwc2V1ZG8iLGYpO2Y9dC5fcmVwbGFjZSgicHNldWRvIixmKTtjPXEuU2VsZWN0b3IuX3BhcnNlKCJhdHRyIixmKTtmPQpxLlNlbGVjdG9yLl9yZXBsYWNlKCJhdHRyIixmKTtyZXR1cm57ZXNjOmQsYXR0cnM6Yyxwc2V1ZG9zOmIsc2VsZWN0b3I6Zn19LF9yZXN0b3JlU2VsZWN0b3I6ZnVuY3Rpb24oZil7dmFyIGQ9Zi5zZWxlY3RvcixkPXEuU2VsZWN0b3IuX3Jlc3RvcmUoImF0dHIiLGQsZi5hdHRycyksZD1xLlNlbGVjdG9yLl9yZXN0b3JlKCJwc2V1ZG8iLGQsZi5wc2V1ZG9zKTtyZXR1cm4gZD1xLlNlbGVjdG9yLl9yZXN0b3JlKCJlc2MiLGQsZi5lc2MpfSxfcmVwbGFjZUNvbW1hczpmdW5jdGlvbihmKXt2YXIgZD1xLlNlbGVjdG9yLl9yZXBsYWNlU2VsZWN0b3IoZik7aWYoZj1kLnNlbGVjdG9yKWY9Zi5yZXBsYWNlKC8sL2csIlx1ZTAwNyIpLGQuc2VsZWN0b3I9ZixmPXEuU2VsZWN0b3IuX3Jlc3RvcmVTZWxlY3RvcihkKTtyZXR1cm4gZn0sX3NwbGl0UXVlcmllczpmdW5jdGlvbihmLGQpey0xPGYuaW5kZXhPZigiLCIpJiYoZj1xLlNlbGVjdG9yLl9yZXBsYWNlQ29tbWFzKGYpKTt2YXIgYz1mLnNwbGl0KCJcdWUwMDciKSwKYj1bXSxnPSIiLGUsaztpZihkKWZvcigxPT09ZC5ub2RlVHlwZSYmKGc9cS5TZWxlY3Rvci5fZXNjYXBlSWQocS5ET00uZ2V0SWQoZCkpLGd8fChnPXEuZ3VpZCgpLHEuRE9NLnNldElkKGQsZykpLGc9J1tpZFx4M2QiJytnKyciXSAnKSxlPTAsaz1jLmxlbmd0aDtlPGs7KytlKWY9ZytjW2VdLGIucHVzaChbZixkXSk7cmV0dXJuIGJ9LF9uYXRpdmVRdWVyeTpmdW5jdGlvbihmLGQsYyl7aWYoKHEuVUEud2Via2l0fHxxLlVBLm9wZXJhKSYmLTE8Zi5pbmRleE9mKCI6Y2hlY2tlZCIpJiZxLlNlbGVjdG9yLnBzZXVkb3MmJnEuU2VsZWN0b3IucHNldWRvcy5jaGVja2VkKXJldHVybiBxLlNlbGVjdG9yLnF1ZXJ5KGYsZCxjLCEwKTt0cnl7cmV0dXJuIGRbInF1ZXJ5U2VsZWN0b3IiKyhjPyIiOiJBbGwiKV0oZil9Y2F0Y2goYil7cmV0dXJuIHEuU2VsZWN0b3IucXVlcnkoZixkLGMsITApfX0sZmlsdGVyOmZ1bmN0aW9uKGYsZCl7dmFyIGM9W10sYixnO2lmKGYmJmQpZm9yKGI9MDtnPWZbYisrXTspcS5TZWxlY3Rvci50ZXN0KGcsCmQpJiYoY1tjLmxlbmd0aF09Zyk7cmV0dXJuIGN9LHRlc3Q6ZnVuY3Rpb24oZixkLGMpe3ZhciBiLGc9ITEsZT0hMSxrLG0scCxzLGwsaDtpZihmJiZmLnRhZ05hbWUpaWYoImZ1bmN0aW9uIj09dHlwZW9mIGQpZz1kLmNhbGwoZixmKTtlbHNle2Q9ZC5zcGxpdCgiLCIpO2N8fHEuRE9NLmluRG9jKGYpfHwoYz1mLnBhcmVudE5vZGUsY3x8KHA9Zi5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxwLmFwcGVuZENoaWxkKGYpLGM9cCxlPSEwKSk7Yz1jfHxmLm93bmVyRG9jdW1lbnQ7cz1xLlNlbGVjdG9yLl9lc2NhcGVJZChxLkRPTS5nZXRJZChmKSk7c3x8KGI9ITAscz1xLmd1aWQoKSxxLkRPTS5zZXRJZChmLHMpKTtmb3IobD0wO2s9ZFtsKytdOyl7ays9J1tpZFx4M2QiJytzKyciXSc7bT1xLlNlbGVjdG9yLnF1ZXJ5KGssYyk7Zm9yKGg9MDtrPW1baCsrXTspaWYoaz09PWYpe2c9ITA7YnJlYWt9aWYoZylicmVha31lJiZwLnJlbW92ZUNoaWxkKGYpO2ImJmYucmVtb3ZlQXR0cmlidXRlKCJpZCIpfXJldHVybiBnfSwKYW5jZXN0b3I6ZnVuY3Rpb24oZixkLGMpe3JldHVybiBxLkRPTS5hbmNlc3RvcihmLGZ1bmN0aW9uKGIpe3JldHVybiBxLlNlbGVjdG9yLnRlc3QoYixkKX0sYyl9LF9wYXJzZTpmdW5jdGlvbihmLGQpe3JldHVybiBkLm1hdGNoKHEuU2VsZWN0b3IuX3R5cGVzW2ZdLnJlKX0sX3JlcGxhY2U6ZnVuY3Rpb24oZixkKXt2YXIgYz1xLlNlbGVjdG9yLl90eXBlc1tmXTtyZXR1cm4gZC5yZXBsYWNlKGMucmUsYy50b2tlbil9LF9yZXN0b3JlOmZ1bmN0aW9uKGYsZCxjKXtpZihjKXtmPXEuU2VsZWN0b3IuX3R5cGVzW2ZdLnRva2VuO3ZhciBiLGc7Yj0wO2ZvcihnPWMubGVuZ3RoO2I8ZzsrK2IpZD1kLnJlcGxhY2UoZixjW2JdKX1yZXR1cm4gZH19O3EubWl4KHEuU2VsZWN0b3IsdCwhMCl9KShhKX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZG9tLWJhc2UiXX0pO1lVSS5hZGQoInNlbGVjdG9yIixmdW5jdGlvbihhLEUpe30sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsic2VsZWN0b3ItbmF0aXZlIl19KTsKWVVJLmFkZCgid2lkZ2V0LWJhc2UiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcSh3KXt2YXIgeixBPXRoaXMuY29uc3RydWN0b3I7dGhpcy5fc3Rycz17fTt0aGlzLl9jc3NQcmVmaXg9QS5DU1NfUFJFRklYfHxjKEEuTkFNRS50b0xvd2VyQ2FzZSgpKTt3PXd8fHt9O3Euc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsdyk7aWYodz10aGlzLmdldChlKSl3IT09bSYmKHo9dyksdGhpcy5yZW5kZXIoeil9dmFyIHQ9YS5MYW5nLGY9YS5Ob2RlLGQ9YS5DbGFzc05hbWVNYW5hZ2VyLGM9ZC5nZXRDbGFzc05hbWUsYixnPWEuY2FjaGVkKGZ1bmN0aW9uKHcpe3JldHVybiB3LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkrdy5zdWJzdHJpbmcoMSl9KSxlPSJyZW5kZXIiLGs9ZnVuY3Rpb24oKXt9LG09ITAscCxzPXt9LGw9InZpc2libGUgZGlzYWJsZWQgaGVpZ2h0IHdpZHRoIGZvY3VzZWQgdGFiSW5kZXgiLnNwbGl0KCIgIiksaD1hLlVBLndlYmtpdCx1PXt9O3EuTkFNRT0id2lkZ2V0IjsKcD1xLlVJX1NSQz0idWkiO3EuQVRUUlM9cztzLmlkPXt2YWx1ZUZuOiJfZ3VpZCIsd3JpdGVPbmNlOm19O3MucmVuZGVyZWQ9e3ZhbHVlOiExLHJlYWRPbmx5Om19O3MuYm91bmRpbmdCb3g9e3ZhbHVlRm46Il9kZWZhdWx0QkIiLHNldHRlcjoiX3NldEJCIix3cml0ZU9uY2U6bX07cy5jb250ZW50Qm94PXt2YWx1ZUZuOiJfZGVmYXVsdENCIixzZXR0ZXI6Il9zZXRDQiIsd3JpdGVPbmNlOm19O3MudGFiSW5kZXg9e3ZhbHVlOm51bGwsdmFsaWRhdG9yOiJfdmFsaWRUYWJJbmRleCJ9O3MuZm9jdXNlZD17dmFsdWU6ITEscmVhZE9ubHk6bX07cy5kaXNhYmxlZD17dmFsdWU6ITF9O3MudmlzaWJsZT17dmFsdWU6bX07cy5oZWlnaHQ9e3ZhbHVlOiIifTtzLndpZHRoPXt2YWx1ZToiIn07cy5zdHJpbmdzPXt2YWx1ZTp7fSxzZXR0ZXI6Il9zdHJTZXR0ZXIiLGdldHRlcjoiX3N0ckdldHRlciJ9O3NbZV09e3ZhbHVlOiExLHdyaXRlT25jZTptfTtxLkNTU19QUkVGSVg9YyhxLk5BTUUudG9Mb3dlckNhc2UoKSk7CnEuZ2V0Q2xhc3NOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGMuYXBwbHkoZCxbcS5DU1NfUFJFRklYXS5jb25jYXQoYS5BcnJheShhcmd1bWVudHMpLCEwKSl9O2I9cS5nZXRDbGFzc05hbWU7cS5nZXRCeU5vZGU9ZnVuY3Rpb24odyl7dmFyIHosQT1iKCk7KHc9Zi5vbmUodykpJiYodz13LmFuY2VzdG9yKCIuIitBLCEwKSkmJih6PXVbYS5zdGFtcCh3LCEwKV0pO3JldHVybiB6fHxudWxsfTthLmV4dGVuZChxLGEuQmFzZSx7Z2V0Q2xhc3NOYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIGMuYXBwbHkoZCxbdGhpcy5fY3NzUHJlZml4XS5jb25jYXQoYS5BcnJheShhcmd1bWVudHMpLCEwKSl9LGluaXRpYWxpemVyOmZ1bmN0aW9uKHcpe3c9dGhpcy5nZXQoImJvdW5kaW5nQm94Iik7dyBpbnN0YW5jZW9mIGYmJnRoaXMuX21hcEluc3RhbmNlKGEuc3RhbXAodykpfSxfbWFwSW5zdGFuY2U6ZnVuY3Rpb24odyl7dVt3XT10aGlzfSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5nZXQoImJvdW5kaW5nQm94Iik7CncgaW5zdGFuY2VvZiBmJiYodz1hLnN0YW1wKHcsITApLHcgaW4gdSYmZGVsZXRlIHVbd10sdGhpcy5fZGVzdHJveUJveCgpKX0sZGVzdHJveTpmdW5jdGlvbih3KXt0aGlzLl9kZXN0cm95QWxsTm9kZXM9dztyZXR1cm4gcS5zdXBlcmNsYXNzLmRlc3Ryb3kuYXBwbHkodGhpcyl9LF9kZXN0cm95Qm94OmZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5nZXQoImJvdW5kaW5nQm94Iiksej10aGlzLmdldCgiY29udGVudEJveCIpLEE9dGhpcy5fZGVzdHJveUFsbE5vZGVzLEg7SD13JiZ3LmNvbXBhcmVUbyh6KTt0aGlzLlVJX0VWRU5UUyYmdGhpcy5fZGVzdHJveVVJRXZlbnRzKCk7dGhpcy5fdW5iaW5kVUkodyk7eiYmKEEmJnouZW1wdHkoKSx6LnJlbW92ZShtKSk7SHx8KEEmJncuZW1wdHkoKSx3LnJlbW92ZShtKSl9LHJlbmRlcjpmdW5jdGlvbih3KXt0aGlzLmdldCgiZGVzdHJveWVkIil8fHRoaXMuZ2V0KCJyZW5kZXJlZCIpfHwodGhpcy5wdWJsaXNoKGUse3F1ZXVhYmxlOiExLGZpcmVPbmNlOm0sCmRlZmF1bHRUYXJnZXRPbmx5Om0sZGVmYXVsdEZuOnRoaXMuX2RlZlJlbmRlckZufSksdGhpcy5maXJlKGUse3BhcmVudE5vZGU6dz9mLm9uZSh3KTpudWxsfSkpO3JldHVybiB0aGlzfSxfZGVmUmVuZGVyRm46ZnVuY3Rpb24odyl7dGhpcy5fcGFyZW50Tm9kZT13LnBhcmVudE5vZGU7dGhpcy5yZW5kZXJlcigpO3RoaXMuX3NldCgicmVuZGVyZWQiLG0pO3RoaXMuX3JlbW92ZUxvYWRpbmdDbGFzc05hbWVzKCl9LHJlbmRlcmVyOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyVUkoKTt0aGlzLnJlbmRlclVJKCk7dGhpcy5fYmluZFVJKCk7dGhpcy5iaW5kVUkoKTt0aGlzLl9zeW5jVUkoKTt0aGlzLnN5bmNVSSgpfSxiaW5kVUk6ayxyZW5kZXJVSTprLHN5bmNVSTprLGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXQoInZpc2libGUiLCExKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNldCgidmlzaWJsZSIsbSl9LGZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldCgiZm9jdXNlZCIsCm0pfSxibHVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldCgiZm9jdXNlZCIsITEpfSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXQoImRpc2FibGVkIiwhMSl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXQoImRpc2FibGVkIixtKX0sX3VpU2l6ZUNCOmZ1bmN0aW9uKHcpe3RoaXMuZ2V0KCJjb250ZW50Qm94IikudG9nZ2xlQ2xhc3MoYigiY29udGVudCIsImV4cGFuZGVkIiksdyl9LF9yZW5kZXJCb3g6ZnVuY3Rpb24odyl7dmFyIHo9dGhpcy5nZXQoImNvbnRlbnRCb3giKSxBPXRoaXMuZ2V0KCJib3VuZGluZ0JveCIpLEg9dGhpcy5nZXQoInNyY05vZGUiKSxGPXRoaXMuREVGX1BBUkVOVF9OT0RFLEI9SCYmSC5nZXQoIm93bmVyRG9jdW1lbnQiKXx8QS5nZXQoIm93bmVyRG9jdW1lbnQiKXx8ei5nZXQoIm93bmVyRG9jdW1lbnQiKTshSHx8SC5jb21wYXJlVG8oeil8fHouaW5Eb2MoQil8fEgucmVwbGFjZSh6KTtBLmNvbXBhcmVUbyh6LmdldCgicGFyZW50Tm9kZSIpKXx8CkEuY29tcGFyZVRvKHopfHwoei5pbkRvYyhCKSYmei5yZXBsYWNlKEEpLEEuYXBwZW5kQ2hpbGQoeikpOyh3PXd8fEYmJmYub25lKEYpKT93LmFwcGVuZENoaWxkKEEpOkEuaW5Eb2MoQil8fGYub25lKCJib2R5IikuaW5zZXJ0KEEsMCl9LF9zZXRCQjpmdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fc2V0Qm94KHRoaXMuZ2V0KCJpZCIpLHcsdGhpcy5CT1VORElOR19URU1QTEFURSwhMCl9LF9zZXRDQjpmdW5jdGlvbih3KXtyZXR1cm4gbnVsbD09PXRoaXMuQ09OVEVOVF9URU1QTEFURT90aGlzLmdldCgiYm91bmRpbmdCb3giKTp0aGlzLl9zZXRCb3gobnVsbCx3LHRoaXMuQ09OVEVOVF9URU1QTEFURSwhMSl9LF9kZWZhdWx0QkI6ZnVuY3Rpb24oKXt2YXIgdz10aGlzLmdldCgic3JjTm9kZSIpLHo9bnVsbD09PXRoaXMuQ09OVEVOVF9URU1QTEFURTtyZXR1cm4gdyYmej93Om51bGx9LF9kZWZhdWx0Q0I6ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuZ2V0KCJzcmNOb2RlIil8fG51bGx9LApfc2V0Qm94OmZ1bmN0aW9uKHcseixBLEgpe3o9Zi5vbmUoeik7enx8KHo9Zi5jcmVhdGUoQSksSD90aGlzLl9iYkZyb21UZW1wbGF0ZT0hMDp0aGlzLl9jYkZyb21UZW1wbGF0ZT0hMCk7ei5nZXQoImlkIil8fHouc2V0KCJpZCIsd3x8YS5ndWlkKCkpO3JldHVybiB6fSxfcmVuZGVyVUk6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJCb3hDbGFzc05hbWVzKCk7dGhpcy5fcmVuZGVyQm94KHRoaXMuX3BhcmVudE5vZGUpfSxfcmVuZGVyQm94Q2xhc3NOYW1lczpmdW5jdGlvbigpe3ZhciB3PXRoaXMuX2dldENsYXNzZXMoKSx6LEE9dGhpcy5nZXQoImJvdW5kaW5nQm94IiksSDtBLmFkZENsYXNzKGIoKSk7Zm9yKEg9dy5sZW5ndGgtMzswPD1IO0gtLSl6PXdbSF0sQS5hZGRDbGFzcyh6LkNTU19QUkVGSVh8fGMoei5OQU1FLnRvTG93ZXJDYXNlKCkpKTt0aGlzLmdldCgiY29udGVudEJveCIpLmFkZENsYXNzKHRoaXMuZ2V0Q2xhc3NOYW1lKCJjb250ZW50IikpfSxfcmVtb3ZlTG9hZGluZ0NsYXNzTmFtZXM6ZnVuY3Rpb24oKXt2YXIgdz0KdGhpcy5nZXQoImJvdW5kaW5nQm94Iiksej10aGlzLmdldCgiY29udGVudEJveCIpLEE9dGhpcy5nZXRDbGFzc05hbWUoImxvYWRpbmciKSxIPWIoImxvYWRpbmciKTt3LnJlbW92ZUNsYXNzKEgpLnJlbW92ZUNsYXNzKEEpO3oucmVtb3ZlQ2xhc3MoSCkucmVtb3ZlQ2xhc3MoQSl9LF9iaW5kVUk6ZnVuY3Rpb24oKXt0aGlzLl9iaW5kQXR0clVJKHRoaXMuX1VJX0FUVFJTLkJJTkQpO3RoaXMuX2JpbmRET00oKX0sX3VuYmluZFVJOmZ1bmN0aW9uKHcpe3RoaXMuX3VuYmluZERPTSh3KX0sX2JpbmRET006ZnVuY3Rpb24oKXt2YXIgdz10aGlzLmdldCgiYm91bmRpbmdCb3giKS5nZXQoIm93bmVyRG9jdW1lbnQiKSx6PXEuX2hEb2NGb2N1czt6fHwoej1xLl9oRG9jRm9jdXM9dy5vbigiZm9jdXMiLHRoaXMuX29uRG9jRm9jdXMsdGhpcyksei5saXN0ZW5lcnM9e2NvdW50OjB9KTt6Lmxpc3RlbmVyc1thLnN0YW1wKHRoaXMsITApXT0hMDt6Lmxpc3RlbmVycy5jb3VudCsrO2gmJih0aGlzLl9oRG9jTW91c2VEb3duPQp3Lm9uKCJtb3VzZWRvd24iLHRoaXMuX29uRG9jTW91c2VEb3duLHRoaXMpKX0sX3VuYmluZERPTTpmdW5jdGlvbih3KXt3PXEuX2hEb2NGb2N1czt2YXIgej1hLnN0YW1wKHRoaXMsITApLEEsSD10aGlzLl9oRG9jTW91c2VEb3duO3cmJihBPXcubGlzdGVuZXJzLEFbel0mJihkZWxldGUgQVt6XSxBLmNvdW50LS0pLDA9PT1BLmNvdW50JiYody5kZXRhY2goKSxxLl9oRG9jRm9jdXM9bnVsbCkpO2gmJkgmJkguZGV0YWNoKCl9LF9zeW5jVUk6ZnVuY3Rpb24oKXt0aGlzLl9zeW5jQXR0clVJKHRoaXMuX1VJX0FUVFJTLlNZTkMpfSxfdWlTZXRIZWlnaHQ6ZnVuY3Rpb24odyl7dGhpcy5fdWlTZXREaW0oImhlaWdodCIsdyk7dGhpcy5fdWlTaXplQ0IoIiIhPT13JiYiYXV0byIhPT13KX0sX3VpU2V0V2lkdGg6ZnVuY3Rpb24odyl7dGhpcy5fdWlTZXREaW0oIndpZHRoIix3KX0sX3VpU2V0RGltOmZ1bmN0aW9uKHcseil7dGhpcy5nZXQoImJvdW5kaW5nQm94Iikuc2V0U3R5bGUodyx0LmlzTnVtYmVyKHopPwp6K3RoaXMuREVGX1VOSVQ6eil9LF91aVNldFZpc2libGU6ZnVuY3Rpb24odyl7dGhpcy5nZXQoImJvdW5kaW5nQm94IikudG9nZ2xlQ2xhc3ModGhpcy5nZXRDbGFzc05hbWUoImhpZGRlbiIpLCF3KX0sX3VpU2V0RGlzYWJsZWQ6ZnVuY3Rpb24odyl7dGhpcy5nZXQoImJvdW5kaW5nQm94IikudG9nZ2xlQ2xhc3ModGhpcy5nZXRDbGFzc05hbWUoImRpc2FibGVkIiksdyl9LF91aVNldEZvY3VzZWQ6ZnVuY3Rpb24odyx6KXt2YXIgQT10aGlzLmdldCgiYm91bmRpbmdCb3giKTtBLnRvZ2dsZUNsYXNzKHRoaXMuZ2V0Q2xhc3NOYW1lKCJmb2N1c2VkIiksdyk7eiE9PXAmJih3P0EuZm9jdXMoKTpBLmJsdXIoKSl9LF91aVNldFRhYkluZGV4OmZ1bmN0aW9uKHcpe3ZhciB6PXRoaXMuZ2V0KCJib3VuZGluZ0JveCIpO3QuaXNOdW1iZXIodyk/ei5zZXQoInRhYkluZGV4Iix3KTp6LnJlbW92ZUF0dHJpYnV0ZSgidGFiSW5kZXgiKX0sX29uRG9jTW91c2VEb3duOmZ1bmN0aW9uKHcpe3RoaXMuX2RvbUZvY3VzJiYKdGhpcy5fb25Eb2NGb2N1cyh3KX0sX29uRG9jRm9jdXM6ZnVuY3Rpb24odyl7dz1xLmdldEJ5Tm9kZSh3LnRhcmdldCk7dmFyIHo9cS5fYWN0aXZlO3omJnohPT13JiYoei5fZG9tRm9jdXM9ITEsei5fc2V0KCJmb2N1c2VkIiwhMSx7c3JjOnB9KSxxLl9hY3RpdmU9bnVsbCk7dyYmKHcuX2RvbUZvY3VzPSEwLHcuX3NldCgiZm9jdXNlZCIsITAse3NyYzpwfSkscS5fYWN0aXZlPXcpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUrIlsiK3RoaXMuZ2V0KCJpZCIpKyJdIn0sREVGX1VOSVQ6InB4IixERUZfUEFSRU5UX05PREU6bnVsbCxDT05URU5UX1RFTVBMQVRFOiJceDNjZGl2XHgzZVx4M2MvZGl2XHgzZSIsQk9VTkRJTkdfVEVNUExBVEU6Ilx4M2NkaXZceDNlXHgzYy9kaXZceDNlIixfZ3VpZDpmdW5jdGlvbigpe3JldHVybiBhLmd1aWQoKX0sX3ZhbGlkVGFiSW5kZXg6ZnVuY3Rpb24odyl7cmV0dXJuIHQuaXNOdW1iZXIodyl8fHQuaXNOdWxsKHcpfSxfYmluZEF0dHJVSTpmdW5jdGlvbih3KXt2YXIgeiwKQT13Lmxlbmd0aDtmb3Ioej0wO3o8QTt6KyspdGhpcy5hZnRlcih3W3pdKyJDaGFuZ2UiLHRoaXMuX3NldEF0dHJVSSl9LF9zeW5jQXR0clVJOmZ1bmN0aW9uKHcpe3ZhciB6LEE9dy5sZW5ndGgsSDtmb3Ioej0wO3o8QTt6KyspSD13W3pdLHRoaXNbIl91aVNldCIrZyhIKV0odGhpcy5nZXQoSCkpfSxfc2V0QXR0clVJOmZ1bmN0aW9uKHcpe2lmKHcudGFyZ2V0PT09dGhpcyl0aGlzWyJfdWlTZXQiK2cody5hdHRyTmFtZSldKHcubmV3VmFsLHcuc3JjKX0sX3N0clNldHRlcjpmdW5jdGlvbih3KXtyZXR1cm4gYS5tZXJnZSh0aGlzLmdldCgic3RyaW5ncyIpLHcpfSxnZXRTdHJpbmc6ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuZ2V0KCJzdHJpbmdzIilbd119LGdldFN0cmluZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoInN0cmluZ3MiKX0sX1VJX0FUVFJTOntCSU5EOmwsU1lOQzpsfX0pO2EuV2lkZ2V0PXF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczoiYXR0cmlidXRlIGJhc2UtYmFzZSBiYXNlLXBsdWdpbmhvc3QgY2xhc3NuYW1lbWFuYWdlciBldmVudC1mb2N1cyBub2RlLWJhc2Ugbm9kZS1zdHlsZSIuc3BsaXQoIiAiKSwKc2tpbm5hYmxlOiEwfSk7CllVSS5hZGQoIndpZGdldC1odG1scGFyc2VyIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuV2lkZ2V0LHQ9YS5Ob2RlLGY9YS5MYW5nO3EuSFRNTF9QQVJTRVI9e307cS5fYnVpbGRDZmc9e2FnZ3JlZ2F0ZXM6WyJIVE1MX1BBUlNFUiJdfTtxLkFUVFJTLnNyY05vZGU9e3ZhbHVlOm51bGwsc2V0dGVyOnQub25lLGdldHRlcjoiX2dldFNyY05vZGUiLHdyaXRlT25jZTohMH07YS5taXgocS5wcm90b3R5cGUse19nZXRTcmNOb2RlOmZ1bmN0aW9uKGQpe3JldHVybiBkfHx0aGlzLmdldCgiY29udGVudEJveCIpfSxfcHJlQWRkQXR0cnM6ZnVuY3Rpb24oZCxjLGIpe3ZhciBnPXtpZDpkLmlkLGJvdW5kaW5nQm94OmQuYm91bmRpbmdCb3gsY29udGVudEJveDpkLmNvbnRlbnRCb3gsc3JjTm9kZTpkLnNyY05vZGV8fGEuT2JqZWN0KHEuQVRUUlMuc3JjTm9kZSl9O3RoaXMuYWRkQXR0cnMoZyxjLGIpO2RlbGV0ZSBkLmJvdW5kaW5nQm94O2RlbGV0ZSBkLmNvbnRlbnRCb3g7ZGVsZXRlIGQuc3JjTm9kZTsKZGVsZXRlIGQuaWQ7dGhpcy5fYXBwbHlQYXJzZXImJnRoaXMuX2FwcGx5UGFyc2VyKGMpfSxfYXBwbHlQYXJzZWRDb25maWc6ZnVuY3Rpb24oZCxjLGIpe3JldHVybiBiP2EubWl4KGMsYiwhMSk6Y30sX2FwcGx5UGFyc2VyOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMsYj10aGlzLl9nZXROb2RlVG9QYXJzZSgpLGc9Yy5fZ2V0SHRtbFBhcnNlcigpLGUsaztnJiZiJiZhLk9iamVjdC5lYWNoKGcsZnVuY3Rpb24obSxwLHMpe2s9bnVsbDtmLmlzRnVuY3Rpb24obSk/az1tLmNhbGwoYyxiKTpmLmlzQXJyYXkobSk/KGs9Yi5hbGwobVswXSksay5pc0VtcHR5KCkmJihrPW51bGwpKTprPWIub25lKG0pO251bGwhPT1rJiZ2b2lkIDAhPT1rJiYoZT1lfHx7fSxlW3BdPWspfSk7ZD1jLl9hcHBseVBhcnNlZENvbmZpZyhiLGQsZSl9LF9nZXROb2RlVG9QYXJzZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuZ2V0KCJzcmNOb2RlIik7cmV0dXJuIHRoaXMuX2NiRnJvbVRlbXBsYXRlP251bGw6ZH0sX2dldEh0bWxQYXJzZXI6ZnVuY3Rpb24oKXt2YXIgZD0KdGhpcy5fZ2V0Q2xhc3NlcygpLGM9e30sYixnO2ZvcihiPWQubGVuZ3RoLTE7MDw9YjtiLS0pKGc9ZFtiXS5IVE1MX1BBUlNFUikmJmEubWl4KGMsZywhMCk7cmV0dXJuIGN9fSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbIndpZGdldC1iYXNlIl19KTtZVUkuYWRkKCJ3aWRnZXQtc2tpbiIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLkNsYXNzTmFtZU1hbmFnZXIuZ2V0Q2xhc3NOYW1lO2EuV2lkZ2V0LnByb3RvdHlwZS5nZXRTa2luTmFtZT1mdW5jdGlvbih0KXt2YXIgZj10aGlzLmdldCgiY29udGVudEJveCIpfHx0aGlzLmdldCgiYm91bmRpbmdCb3giKSxkLGM7dD10fHxxKCJza2luIiwiIik7Yz1SZWdFeHAoIlxcYiIrdCsiKFxcUyspIik7ZiYmZi5hbmNlc3RvcihmdW5jdGlvbihiKXtyZXR1cm4gZD1iLmdldCgiY2xhc3NOYW1lIikubWF0Y2goYyl9KTtyZXR1cm4gZD9kWzFdOm51bGx9fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ3aWRnZXQtYmFzZSJdfSk7CllVSS5hZGQoIndpZGdldC11aWV2ZW50cyIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLldpZGdldCx0PWEuTGFuZyxmPWEuV2lkZ2V0Ll91aWV2dHM9YS5XaWRnZXQuX3VpZXZ0c3x8e307YS5taXgocS5wcm90b3R5cGUse19kZXN0cm95VUlFdmVudHM6ZnVuY3Rpb24oKXt2YXIgZD1hLnN0YW1wKHRoaXMsITApO2EuZWFjaChmLGZ1bmN0aW9uKGMsYil7Yy5pbnN0YW5jZXNbZF0mJihkZWxldGUgYy5pbnN0YW5jZXNbZF0sYS5PYmplY3QuaXNFbXB0eShjLmluc3RhbmNlcykmJihjLmhhbmRsZS5kZXRhY2goKSxmW2JdJiZkZWxldGUgZltiXSkpfSl9LFVJX0VWRU5UUzphLk5vZGUuRE9NX0VWRU5UUyxfZ2V0VUlFdmVudE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoImJvdW5kaW5nQm94Iil9LF9jcmVhdGVVSUV2ZW50OmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuX2dldFVJRXZlbnROb2RlKCksYj1hLnN0YW1wKGMpK2QsZz1mW2JdO2d8fChkPWMuZGVsZWdhdGUoZCxmdW5jdGlvbihlKXt2YXIgaz0KcS5nZXRCeU5vZGUodGhpcyk7ayYmay5fZmlsdGVyVUlFdmVudChlKSYmay5maXJlKGUudHlwZSx7ZG9tRXZlbnQ6ZX0pfSwiLiIrYS5XaWRnZXQuZ2V0Q2xhc3NOYW1lKCkpLGZbYl09Zz17aW5zdGFuY2VzOnt9LGhhbmRsZTpkfSk7Zy5pbnN0YW5jZXNbYS5zdGFtcCh0aGlzKV09MX0sX2ZpbHRlclVJRXZlbnQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGQuY3VycmVudFRhcmdldC5jb21wYXJlVG8oZC5jb250YWluZXIpfHxkLmNvbnRhaW5lci5jb21wYXJlVG8odGhpcy5fZ2V0VUlFdmVudE5vZGUoKSl9LF9nZXRVSUV2ZW50OmZ1bmN0aW9uKGQpe2lmKHQuaXNTdHJpbmcoZCkpe2Q9dGhpcy5wYXJzZVR5cGUoZClbMV07dmFyIGMsYjtkJiYoYz1kLmluZGV4T2YoIjoiKSwtMTxjJiYoZD1kLnN1YnN0cmluZyhjKzEpKSx0aGlzLlVJX0VWRU5UU1tkXSYmKGI9ZCkpO3JldHVybiBifX0sX2luaXRVSUV2ZW50OmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuX2dldFVJRXZlbnQoZCk7ZD10aGlzLl91aUV2dHNJbml0UXVldWV8fAp7fTtjJiYhZFtjXSYmKHRoaXMuX3VpRXZ0c0luaXRRdWV1ZT1kW2NdPTEsdGhpcy5hZnRlcigicmVuZGVyIixmdW5jdGlvbigpe3RoaXMuX2NyZWF0ZVVJRXZlbnQoYyk7ZGVsZXRlIHRoaXMuX3VpRXZ0c0luaXRRdWV1ZVtjXX0pKX0sb246ZnVuY3Rpb24oZCl7dGhpcy5faW5pdFVJRXZlbnQoZCk7cmV0dXJuIHEuc3VwZXJjbGFzcy5vbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHB1Ymxpc2g6ZnVuY3Rpb24oZCxjKXt2YXIgYj10aGlzLl9nZXRVSUV2ZW50KGQpO2ImJmMmJmMuZGVmYXVsdEZuJiZ0aGlzLl9pbml0VUlFdmVudChiKTtyZXR1cm4gcS5zdXBlcmNsYXNzLnB1Ymxpc2guYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sITApfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJub2RlLWV2ZW50LWRlbGVnYXRlIiwid2lkZ2V0LWJhc2UiXX0pOwpZVUkuYWRkKCJ5dWktdGhyb3R0bGUiLGZ1bmN0aW9uKGEsRSl7YS50aHJvdHRsZT1mdW5jdGlvbihxLHQpe3Q9dD90OmEuY29uZmlnLnRocm90dGxlVGltZXx8MTUwO2lmKC0xPT09dClyZXR1cm4gZnVuY3Rpb24oKXtxLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIGY9YS5MYW5nLm5vdygpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkPWEuTGFuZy5ub3coKTtkLWY+dCYmKGY9ZCxxLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsieXVpLWJhc2UiXX0pOwpZVUkuYWRkKCJhdWktYmFzZS1jb3JlIixmdW5jdGlvbihhLEUpe1lVSS5FbnYuYWxpYXNlcz1ZVUkuRW52LmFsaWFzZXN8fHt9O2EubWl4KFlVSS5FbnYuYWxpYXNlcyx7ImF1aS1hdXRvc2l6ZSI6WyJhdWktYXV0b3NpemUtaWZyYW1lIl0sImF1aS1iYXNlIjoib29wIHl1aS10aHJvdHRsZSBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktZGVib3VuY2UgYXVpLWJhc2UtY29yZSBhdWktYmFzZS1sYW5nIGF1aS1ub2RlLWJhc2UiLnNwbGl0KCIgIiksImF1aS1iYXNlLWRlcHJlY2F0ZWQiOiJhdWktYmFzZSBhdWktbm9kZSBhdWktY29tcG9uZW50IGF1aS1kZWxheWVkLXRhc2stZGVwcmVjYXRlZCBhdWktc2VsZWN0b3IgYXVpLWV2ZW50LWJhc2UiLnNwbGl0KCIgIiksImF1aS1idXR0b24iOlsiYXVpLWJ1dHRvbi1jb3JlIl0sImF1aS1jb2xsZWN0aW9uIjpbImF1aS1tYXAiLCJhdWktc2V0IiwiYXVpLWxpbmtlZHNldCJdLCJhdWktY29sb3ItcGlja2VyLWRlcHJlY2F0ZWQiOlsiYXVpLWNvbG9yLXBpY2tlci1iYXNlLWRlcHJlY2F0ZWQiLAoiYXVpLWNvbG9yLXBpY2tlci1ncmlkLXBsdWdpbi1kZXByZWNhdGVkIl0sImF1aS1kYXRhc291cmNlLWNvbnRyb2wtZGVwcmVjYXRlZCI6WyJhdWktZGF0YXNvdXJjZS1jb250cm9sLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1pbnB1dC10ZXh0LWNvbnRyb2wtZGVwcmVjYXRlZCJdLCJhdWktZGF0YXRhYmxlIjpbImF1aS1kYXRhdGFibGUtZWRpdCIsImF1aS1kYXRhdGFibGUtaGlnaGxpZ2h0IiwiYXVpLWRhdGF0YWJsZS1zZWxlY3Rpb24iLCJhdWktZGF0YXRhYmxlLXByb3BlcnR5LWxpc3QiXSwiYXVpLWRhdGF0YWJsZS1lZGl0IjoiZGF0YXRhYmxlLWJhc2UgY2FsZW5kYXIgb3ZlcmxheSBzb3J0YWJsZSBhdWktZGF0YXR5cGUgYXVpLXRvb2xiYXIgYXVpLWZvcm0tdmFsaWRhdG9yIGF1aS1kYXRhdGFibGUtYmFzZS1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLWJhc2Utb3B0aW9ucy1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLWNlbGwtZWRpdG9yLXN1cHBvcnQgYXVpLWRhdGF0YWJsZS1jb3JlIGF1aS1kYXRhdGFibGUtY2hlY2tib3gtY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS1kYXRlLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtZHJvcGRvd24tY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS1yYWRpby1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLXRleHQtY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS10ZXh0LWFyZWEtY2VsbC1lZGl0b3IiLnNwbGl0KCIgIiksCiJhdWktZGF0ZXBpY2tlci1kZXByZWNhdGVkIjpbImF1aS1kYXRlcGlja2VyLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1kYXRlcGlja2VyLXNlbGVjdC1kZXByZWNhdGVkIl0sImF1aS1ldmVudCI6WyJhdWktZXZlbnQtYmFzZSJdLCJhdWktZm9ybS1kZXByZWNhdGVkIjoiYXVpLWZvcm0tYmFzZS1kZXByZWNhdGVkIGF1aS1mb3JtLWNvbWJvYm94LWRlcHJlY2F0ZWQgYXVpLWZvcm0tZmllbGQtZGVwcmVjYXRlZCBhdWktZm9ybS1zZWxlY3QtZGVwcmVjYXRlZCBhdWktZm9ybS10ZXh0YXJlYS1kZXByZWNhdGVkIGF1aS1mb3JtLXRleHRmaWVsZC1kZXByZWNhdGVkIi5zcGxpdCgiICIpLCJhdWktaW8iOlsiYXVpLWlvLXJlcXVlc3QiXSwiYXVpLWlvLWRlcHJlY2F0ZWQiOlsiYXVpLWlvLXJlcXVlc3QiLCJhdWktaW8tcGx1Z2luLWRlcHJlY2F0ZWQiXSwiYXVpLW5vZGUiOlsiYXVpLW5vZGUtYmFzZSJdLCJhdWktb3ZlcmxheS1kZXByZWNhdGVkIjpbImF1aS1vdmVybGF5LWJhc2UtZGVwcmVjYXRlZCIsCiJhdWktb3ZlcmxheS1jb250ZXh0LWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1jb250ZXh0LXBhbmVsLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1tYW5hZ2VyLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1tYXNrLWRlcHJlY2F0ZWQiXSwiYXVpLXJhdGluZyI6WyJhdWktcmF0aW5nLWJhc2UiLCJhdWktcmF0aW5nLXRodW1iIl0sImF1aS1yZXNpemUtZGVwcmVjYXRlZCI6WyJhdWktcmVzaXplLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1yZXNpemUtY29uc3RyYWluLWRlcHJlY2F0ZWQiXSwiYXVpLXNjaGVkdWxlciI6ImV2ZW50LWdlc3R1cmVzIGF1aS1zY2hlZHVsZXItYmFzZSBhdWktc2NoZWR1bGVyLWV2ZW50LXJlY29yZGVyIGF1aS1zY2hlZHVsZXItdmlldy1hZ2VuZGEgYXVpLXNjaGVkdWxlci12aWV3LWRheSBhdWktc2NoZWR1bGVyLXZpZXctbW9udGggYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlLWRkIGF1aS1zY2hlZHVsZXItdmlldy10YWJsZSBhdWktc2NoZWR1bGVyLXZpZXctd2VlayBhdWktdmlld3BvcnQiLnNwbGl0KCIgIiksCiJhdWktc2VhcmNoIjpbImF1aS1zZWFyY2gtdHN0Il0sImF1aS1zb3J0YWJsZSI6WyJhdWktc29ydGFibGUtbGF5b3V0IiwiYXVpLXNvcnRhYmxlLWxpc3QiXSwiYXVpLXN1cmZhY2UiOlsiYXVpLXN1cmZhY2UtYXBwIiwiYXVpLXN1cmZhY2Utc2NyZWVuIl0sImF1aS10b2dnbGVyIjpbImF1aS10b2dnbGVyLWJhc2UiLCJhdWktdG9nZ2xlci1kZWxlZ2F0ZSJdLCJhdWktdG9vbHRpcCI6WyJhdWktdG9vbHRpcC1iYXNlIiwiYXVpLXRvb2x0aXAtZGVsZWdhdGUiXSwiYXVpLXRwbC1zbmlwcGV0cy1kZXByZWNhdGVkIjpbImF1aS10cGwtc25pcHBldHMtYmFzZS1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy1jaGVja2JveC1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy1pbnB1dC1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy1zZWxlY3QtZGVwcmVjYXRlZCIsImF1aS10cGwtc25pcHBldHMtdGV4dGFyZWEtZGVwcmVjYXRlZCJdLCJhdWktdHJlZSI6WyJhdWktdHJlZS1kYXRhIiwKImF1aS10cmVlLWlvIiwiYXVpLXRyZWUtbm9kZSIsImF1aS10cmVlLXBhZ2luYXRvciIsImF1aS10cmVlLXZpZXciXSwiYXVpLXdpZGdldCI6WyJhdWktd2lkZ2V0LWNzc2NsYXNzIiwiYXVpLXdpZGdldC10b29sYmFycyJdLCJhdWktd2lkZ2V0LWNvcmUiOlsiYXVpLXdpZGdldC1jc3NjbGFzcyJdfSk7WVVJLkVudlthLnZlcnNpb25dLm1vZHVsZXM9WVVJLkVudlthLnZlcnNpb25dLm1vZHVsZXN8fHt9O2EubWl4KFlVSS5FbnZbYS52ZXJzaW9uXS5tb2R1bGVzLHsiYXVpLWFjZS1hdXRvY29tcGxldGUtYmFzZSI6e3JlcXVpcmVzOlsiYXVpLWFjZS1lZGl0b3IiXX0sImF1aS1hY2UtYXV0b2NvbXBsZXRlLWZyZWVtYXJrZXIiOntyZXF1aXJlczpbImF1aS1hY2UtYXV0b2NvbXBsZXRlLXRlbXBsYXRlcHJvY2Vzc29yIl19LCJhdWktYWNlLWF1dG9jb21wbGV0ZS1saXN0Ijp7cmVxdWlyZXM6WyJhdWktYWNlLWF1dG9jb21wbGV0ZS1iYXNlIiwib3ZlcmxheSIsIndpZGdldC1hdXRvaGlkZSJdLApza2lubmFibGU6ITB9LCJhdWktYWNlLWF1dG9jb21wbGV0ZS1wbHVnaW4iOntyZXF1aXJlczpbImF1aS1hY2UtYXV0b2NvbXBsZXRlLWxpc3QiLCJwbHVnaW4iXX0sImF1aS1hY2UtYXV0b2NvbXBsZXRlLXRlbXBsYXRlcHJvY2Vzc29yIjp7cmVxdWlyZXM6WyJhdWktYWNlLWF1dG9jb21wbGV0ZS1iYXNlIl19LCJhdWktYWNlLWF1dG9jb21wbGV0ZS12ZWxvY2l0eSI6e3JlcXVpcmVzOlsiYXVpLWFjZS1hdXRvY29tcGxldGUtdGVtcGxhdGVwcm9jZXNzb3IiXX0sImF1aS1hY2UtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktbm9kZSIsImF1aS1jb21wb25lbnQiXX0sImF1aS1hZmZpeCI6e3JlcXVpcmVzOlsiYmFzZSIsIm5vZGUtc2NyZWVuIiwiYXVpLW5vZGUiXX0sImF1aS1hbGVydCI6e3JlcXVpcmVzOiJ0aW1lcnMgd2lkZ2V0IHdpZGdldC1zdGRtb2QgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLXdpZGdldC1jc3NjbGFzcyBhdWktd2lkZ2V0LXRyYW5zaXRpb24iLnNwbGl0KCIgIiksCnNraW5uYWJsZTohMH0sImF1aS1hcmlhIjp7cmVxdWlyZXM6WyJwbHVnaW4iLCJhdWktY29tcG9uZW50Il19LCJhdWktYXJpYS10YWJsZS1zb3J0YWJsZSI6e3JlcXVpcmVzOlsiYXVpLWFyaWEiXX0sImF1aS1hcnJheXNvcnQiOntyZXF1aXJlczpbImFycmF5c29ydCJdfSwiYXVpLWF1ZGlvIjp7cmVxdWlyZXM6WyJhdWktYXJpYSIsImF1aS1ub2RlIiwiYXVpLWNvbXBvbmVudCIsInF1ZXJ5c3RyaW5nLXN0cmluZ2lmeS1zaW1wbGUiXSxza2lubmFibGU6ITB9LCJhdWktYXV0b2NvbXBsZXRlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1iYXNlLWRlcHJlY2F0ZWQiLCJkYXRhc291cmNlIiwiZGF0YXNjaGVtYSIsImF1aS1mb3JtLWNvbWJvYm94LWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktYXV0b3NpemUiOnt1c2U6WyJhdWktYXV0b3NpemUtaWZyYW1lIl19LCJhdWktYXV0b3NpemUtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiZXZlbnQtdmFsdWVjaGFuZ2UiLAoicGx1Z2luIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1hdXRvc2l6ZS1pZnJhbWUiOntyZXF1aXJlczpbInBsdWdpbiIsImF1aS1jb21wb25lbnQiLCJhdWktdGltZXIiLCJhdWktbm9kZS1iYXNlIl19LCJhdWktYmFzZSI6e3VzZToib29wIHl1aS10aHJvdHRsZSBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktZGVib3VuY2UgYXVpLWJhc2UtY29yZSBhdWktYmFzZS1sYW5nIGF1aS1ub2RlLWJhc2UiLnNwbGl0KCIgIil9LCJhdWktYmFzZS1jb3JlIjp7fSwiYXVpLWJhc2UtZGVwcmVjYXRlZCI6e3VzZToiYXVpLWJhc2UgYXVpLW5vZGUgYXVpLWNvbXBvbmVudCBhdWktZGVsYXllZC10YXNrLWRlcHJlY2F0ZWQgYXVpLXNlbGVjdG9yIGF1aS1ldmVudC1iYXNlIi5zcGxpdCgiICIpfSwiYXVpLWJhc2UtaHRtbDUtc2hpdiI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWJhc2UtaHRtbDUtc2hpdiIsdHJpZ2dlcjoibm9kZS1iYXNlIix1YToiaWUifX0sImF1aS1iYXNlLWxhbmciOnt9LAoiYXVpLWJvb2xlYW4tZGF0YS1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1idXR0b24tc3dpdGNoIiwiYXVpLWRhdGEtZWRpdG9yIl19LCJhdWktYnV0dG9uIjp7dXNlOlsiYXVpLWJ1dHRvbi1jb3JlIl19LCJhdWktYnV0dG9uLWNvcmUiOntyZXF1aXJlczoiYnV0dG9uIGJ1dHRvbi1ncm91cCBidXR0b24tcGx1Z2luIGF1aS1jb21wb25lbnQgYXVpLXdpZGdldC1jc3NjbGFzcyBhdWktd2lkZ2V0LXRvZ2dsZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktYnV0dG9uLWl0ZW0tZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1zdGF0ZS1pbnRlcmFjdGlvbi1kZXByZWNhdGVkIiwid2lkZ2V0LWNoaWxkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWJ1dHRvbi1zZWFyY2gtY2FuY2VsIjp7cmVxdWlyZXM6ImFycmF5LWludm9rZSBiYXNlIGJhc2UtYnVpbGQgZXZlbnQtZm9jdXMgZXZlbnQtbW92ZSBldmVudC1yZXNpemUgbm9kZS1zY3JlZW4gbm9kZS1ldmVudC1kZWxlZ2F0ZSBhdWktbm9kZS1iYXNlIGF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS1ldmVudC1pbnB1dCIuc3BsaXQoIiAiKX0sCiJhdWktYnV0dG9uLXN3aXRjaCI6e3JlcXVpcmVzOlsiYXVpLW5vZGUtYmFzZSIsImJhc2UtYnVpbGQiLCJldmVudC1rZXkiLCJ0cmFuc2l0aW9uIiwid2lkZ2V0Il0sc2tpbm5hYmxlOiEwfSwiYXVpLWNhcm91c2VsIjp7cmVxdWlyZXM6ImFuaW0gYXVpLWV2ZW50IGF1aS1pbWFnZS12aWV3ZXItYmFzZSBhdWktaW1hZ2Utdmlld2VyLXNsaWRlc2hvdyBub2RlLWV2ZW50LWRlbGVnYXRlIG5vZGUtZm9jdXNtYW5hZ2VyIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1jYXJvdXNlbC1tb2JpbGUtdG91Y2giOntjb25kaXRpb246e25hbWU6ImF1aS1jYXJvdXNlbC1tb2JpbGUtdG91Y2giLHRlc3Q6ZnVuY3Rpb24ocSl7cmV0dXJuIHEuVUEubW9iaWxlJiZxLlVBLnRvdWNoRW5hYmxlZH0sdHJpZ2dlcjoiYXVpLWNhcm91c2VsIn0scmVxdWlyZXM6WyJiYXNlLWJ1aWxkIiwiYXVpLWNhcm91c2VsIl19LCJhdWktY2Fyb3VzZWwtc3dpcGUiOntjb25kaXRpb246e25hbWU6ImF1aS1jYXJvdXNlbC1zd2lwZSIsCnRyaWdnZXI6ImF1aS1jYXJvdXNlbCIsdWE6InRvdWNoRW5hYmxlZCJ9LHJlcXVpcmVzOlsiYXVpLWNhcm91c2VsIiwiYXVpLXdpZGdldC1zd2lwZSIsImJhc2UtYnVpbGQiXSxza2lubmFibGU6ITB9LCJhdWktY2hhci1jb3VudGVyIjp7cmVxdWlyZXM6WyJhdWktYXJpYSIsImF1aS1ub2RlIiwiYXVpLWV2ZW50LWlucHV0IiwiYXVpLWNvbXBvbmVudCJdfSwiYXVpLWNoYXJ0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImRhdGFzb3VyY2UiLCJqc29uIiwiYXVpLXN3Zi1kZXByZWNhdGVkIl19LCJhdWktY2xhc3NuYW1lbWFuYWdlciI6e3JlcXVpcmVzOlsiY2xhc3NuYW1lbWFuYWdlciJdfSwiYXVpLWNvbGxlY3Rpb24iOnt1c2U6WyJhdWktbWFwIiwiYXVpLXNldCIsImF1aS1saW5rZWRzZXQiXX0sImF1aS1jb2xvci1wYWxldHRlIjp7cmVxdWlyZXM6ImFycmF5LWV4dHJhcyBhdWktcGFsZXR0ZSBjb2xvci1iYXNlIG5vZGUtY29yZSBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LCJhdWktY29sb3ItcGlja2VyLWJhc2UiOntyZXF1aXJlczpbImF1aS1jb2xvci1wYWxldHRlIiwiYXVpLWhzdmEtcGFsZXR0ZS1tb2RhbCIsImV2ZW50LW91dHNpZGUiXSxza2lubmFibGU6ITB9LCJhdWktY29sb3ItcGlja2VyLWJhc2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOiJkZC1kcmFnIHBhbmVsIHNsaWRlciBhdWktYnV0dG9uLWl0ZW0tZGVwcmVjYXRlZCBhdWktY29sb3ItdXRpbC1kZXByZWNhdGVkIGF1aS1mb3JtLWJhc2UtZGVwcmVjYXRlZCBhdWktb3ZlcmxheS1jb250ZXh0LWRlcHJlY2F0ZWQiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWNvbG9yLXBpY2tlci1kZXByZWNhdGVkIjp7dXNlOlsiYXVpLWNvbG9yLXBpY2tlci1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktY29sb3ItcGlja2VyLWdyaWQtcGx1Z2luLWRlcHJlY2F0ZWQiXX0sImF1aS1jb2xvci1waWNrZXItZ3JpZC1wbHVnaW4tZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsicGx1Z2luIiwKImF1aS1jb2xvci1waWNrZXItYmFzZS1kZXByZWNhdGVkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWNvbG9yLXBpY2tlci1wb3BvdmVyIjp7cmVxdWlyZXM6WyJhdWktY29sb3ItcGlja2VyLWJhc2UiLCJhdWktcG9wb3ZlciIsImF1aS13aWRnZXQtY3NzY2xhc3MiLCJhdWktd2lkZ2V0LXRvZ2dsZSJdLHNraW5uYWJsZTohMH0sImF1aS1jb2xvci11dGlsLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbXX0sImF1aS1jb21wb25lbnQiOntyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiYXVpLXdpZGdldC1jc3NjbGFzcyIsImF1aS13aWRnZXQtdG9nZ2xlIiwiYmFzZS1idWlsZCIsIndpZGdldC1iYXNlIl19LCJhdWktY3NzIjp7dHlwZToiY3NzIn0sImF1aS1kYXRhLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJiYXNlLWJ1aWxkIiwibm9kZS1iYXNlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGEtc2V0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbIm9vcCIsCiJjb2xsZWN0aW9uIiwiYmFzZSJdfSwiYXVpLWRhdGFzb3VyY2UtY29udHJvbC1iYXNlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImRhdGFzb3VyY2UiLCJkYXRhc2NoZW1hIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLWRhdGFzb3VyY2UtY29udHJvbC1kZXByZWNhdGVkIjp7dXNlOlsiYXVpLWRhdGFzb3VyY2UtY29udHJvbC1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktaW5wdXQtdGV4dC1jb250cm9sLWRlcHJlY2F0ZWQiXX0sImF1aS1kYXRhdGFibGUiOnt1c2U6WyJhdWktZGF0YXRhYmxlLWVkaXQiLCJhdWktZGF0YXRhYmxlLWhpZ2hsaWdodCIsImF1aS1kYXRhdGFibGUtc2VsZWN0aW9uIiwiYXVpLWRhdGF0YWJsZS1wcm9wZXJ0eS1saXN0Il19LCJhdWktZGF0YXRhYmxlLWJhc2UtY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImRhdGF0YWJsZS1iYXNlIiwib3ZlcmxheSJdLHNraW5uYWJsZTohMH0sImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktZGF0YXRhYmxlLWJhc2UtY2VsbC1lZGl0b3IiLAoiZXNjYXBlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGF0YWJsZS1ib2R5Ijp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImRhdGF0YWJsZS1iYXNlIiwiZXZlbnQta2V5IiwiYXVpLWV2ZW50LWJhc2UiXX0sImF1aS1kYXRhdGFibGUtY2VsbC1lZGl0b3Itc3VwcG9ydCI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWJhc2UiXX0sImF1aS1kYXRhdGFibGUtY2hlY2tib3gtY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIl19LCJhdWktZGF0YXRhYmxlLWNvcmUiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYm9keSIsImRhdGF0YWJsZS1iYXNlIiwiZXZlbnQta2V5IiwiYXVpLWV2ZW50LWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktZGF0YXRhYmxlLWRhdGUtY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIl19LCJhdWktZGF0YXRhYmxlLWRyb3Bkb3duLWNlbGwtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktZGF0YXRhYmxlLWJhc2Utb3B0aW9ucy1jZWxsLWVkaXRvciJdfSwKImF1aS1kYXRhdGFibGUtZWRpdCI6e3VzZToiZGF0YXRhYmxlLWJhc2UgY2FsZW5kYXIgb3ZlcmxheSBzb3J0YWJsZSBhdWktZGF0YXR5cGUgYXVpLXRvb2xiYXIgYXVpLWZvcm0tdmFsaWRhdG9yIGF1aS1kYXRhdGFibGUtYmFzZS1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLWJhc2Utb3B0aW9ucy1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLWNlbGwtZWRpdG9yLXN1cHBvcnQgYXVpLWRhdGF0YWJsZS1jb3JlIGF1aS1kYXRhdGFibGUtY2hlY2tib3gtY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS1kYXRlLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtZHJvcGRvd24tY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS1yYWRpby1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLXRleHQtY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS10ZXh0LWFyZWEtY2VsbC1lZGl0b3IiLnNwbGl0KCIgIil9LCJhdWktZGF0YXRhYmxlLWhpZ2hsaWdodCI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1zZWxlY3Rpb24iXSwKc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGF0YWJsZS1wcm9wZXJ0eS1saXN0Ijp7cmVxdWlyZXM6ImRhdGF0YWJsZS1zY3JvbGwgZGF0YXRhYmxlLXNvcnQgYXVpLWRhdGF0YWJsZS1jb3JlIGF1aS1kYXRhdGFibGUtZWRpdCBhdWktZGF0YXRhYmxlLWhpZ2hsaWdodCBhdWktZGF0YXRhYmxlLXNlbGVjdGlvbiBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1kYXRhdGFibGUtcmFkaW8tY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIl19LCJhdWktZGF0YXRhYmxlLXNlbGVjdGlvbiI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1jb3JlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGF0YWJsZS10ZXh0LWFyZWEtY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIl19LCJhdWktZGF0YXRhYmxlLXRleHQtY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIl19LAoiYXVpLWRhdGF0eXBlIjp7cmVxdWlyZXM6WyJkYXRhdHlwZSIsImF1aS1kYXRhdHlwZS1kYXRlLXBhcnNlIl19LCJhdWktZGF0YXR5cGUtZGF0ZS1wYXJzZSI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtbGFuZyIsImRhdGF0eXBlLWRhdGUtZm9ybWF0IiwiZGF0YXR5cGUtZGF0ZS1wYXJzZSIsImludGwiXX0sImF1aS1kYXRlcGlja2VyIjp7cmVxdWlyZXM6ImF1aS1hcmlhIGF1aS1kYXRlcGlja2VyLWRlbGVnYXRlIGF1aS1kYXRlcGlja2VyLXBvcG92ZXIgYmFzZSBiYXNlLWJ1aWxkIGNhbGVuZGFyIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1kYXRlcGlja2VyLWJhc2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiY2FsZW5kYXIiLCJhdWktZGF0YXR5cGUiLCJhdWktb3ZlcmxheS1jb250ZXh0LWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktZGF0ZXBpY2tlci1kZWxlZ2F0ZSI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0eXBlLWRhdGUtcGFyc2UiLCJhdWktZXZlbnQtaW5wdXQiLAoiZXZlbnQtZm9jdXMiLCJub2RlLWV2ZW50LWRlbGVnYXRlIl19LCJhdWktZGF0ZXBpY2tlci1kZXByZWNhdGVkIjp7c2tpbm5hYmxlOiEwLHVzZTpbImF1aS1kYXRlcGlja2VyLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1kYXRlcGlja2VyLXNlbGVjdC1kZXByZWNhdGVkIl19LCJhdWktZGF0ZXBpY2tlci1uYXRpdmUiOntyZXF1aXJlczpbImF1aS1kYXRlcGlja2VyLWRlbGVnYXRlIiwiYXVpLW5vZGUtYmFzZSIsImJhc2UiLCJiYXNlLWJ1aWxkIl19LCJhdWktZGF0ZXBpY2tlci1wb3BvdmVyIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1wb3BvdmVyIl19LCJhdWktZGF0ZXBpY2tlci1zZWxlY3QtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWRhdGVwaWNrZXItYmFzZS1kZXByZWNhdGVkIiwiYXVpLWJ1dHRvbi1pdGVtLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktZGVib3VuY2UiOnt9LCJhdWktZGVsYXllZC10YXNrLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LAoiYXVpLWRpYWdyYW0tYnVpbGRlciI6e3JlcXVpcmVzOiJhdWktYXJpYSBhdWktbWFwIGF1aS1wcm9wZXJ0eS1idWlsZGVyIGF1aS1kaWFncmFtLWJ1aWxkZXItY29ubmVjdG9yIGF1aS1wcm9wZXJ0eS1idWlsZGVyLXNldHRpbmdzIGF1aS1kaWFncmFtLW5vZGUtY29uZGl0aW9uIGF1aS1kaWFncmFtLW5vZGUtZW5kIGF1aS1kaWFncmFtLW5vZGUtZm9yayBhdWktZGlhZ3JhbS1ub2RlLWpvaW4gYXVpLWRpYWdyYW0tbm9kZS1zdGFydCBhdWktZGlhZ3JhbS1ub2RlLXN0YXRlIGF1aS1kaWFncmFtLW5vZGUtdGFzayBvdmVybGF5Ii5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1kaWFncmFtLWJ1aWxkZXItY29ubmVjdG9yIjp7cmVxdWlyZXM6ImFycmF5bGlzdC1hZGQgYXJyYXlsaXN0LWZpbHRlciBlc2NhcGUganNvbiBncmFwaGljcyBkZCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktZGlhZ3JhbS1ub2RlIjp7cmVxdWlyZXM6WyJhdWktYXJpYSIsImF1aS1kaWFncmFtLW5vZGUtbWFuYWdlci1iYXNlIiwKImVzY2FwZSIsIm92ZXJsYXkiXX0sImF1aS1kaWFncmFtLW5vZGUtY29uZGl0aW9uIjp7cmVxdWlyZXM6WyJhdWktZGlhZ3JhbS1ub2RlLXN0YXRlIl19LCJhdWktZGlhZ3JhbS1ub2RlLWVuZCI6e3JlcXVpcmVzOlsiYXVpLWRpYWdyYW0tbm9kZS1zdGF0ZSJdfSwiYXVpLWRpYWdyYW0tbm9kZS1mb3JrIjp7cmVxdWlyZXM6WyJhdWktZGlhZ3JhbS1ub2RlLXN0YXRlIl19LCJhdWktZGlhZ3JhbS1ub2RlLWpvaW4iOntyZXF1aXJlczpbImF1aS1kaWFncmFtLW5vZGUtc3RhdGUiXX0sImF1aS1kaWFncmFtLW5vZGUtbWFuYWdlci1iYXNlIjp7cmVxdWlyZXM6WyJiYXNlIl19LCJhdWktZGlhZ3JhbS1ub2RlLXN0YXJ0Ijp7cmVxdWlyZXM6WyJhdWktZGlhZ3JhbS1ub2RlLXN0YXRlIl19LCJhdWktZGlhZ3JhbS1ub2RlLXN0YXRlIjp7cmVxdWlyZXM6WyJhdWktZGlhZ3JhbS1ub2RlIl19LCJhdWktZGlhZ3JhbS1ub2RlLXRhc2siOntyZXF1aXJlczpbImF1aS1kaWFncmFtLW5vZGUtc3RhdGUiXX0sCiJhdWktZGlhbG9nLWlmcmFtZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJwbHVnaW4iLCJhcnJheS1pbnZva2UiLCJhdWktYmFzZS1kZXByZWNhdGVkIiwiYXVpLWxvYWRpbmctbWFzay1kZXByZWNhdGVkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWRyb3Bkb3duIjp7cmVxdWlyZXM6ImV2ZW50LWRlbGVnYXRlIGV2ZW50LWtleSBldmVudC1vdXRzaWRlIG5vZGUtZm9jdXNtYW5hZ2VyIHdpZGdldCB3aWRnZXQtc3RhY2sgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLW5vZGUgYXVpLXdpZGdldC1jc3NjbGFzcyBhdWktd2lkZ2V0LXRvZ2dsZSBhdWktd2lkZ2V0LXRyaWdnZXIiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWVkaXRhYmxlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktZm9ybS1jb21ib2JveC1kZXByZWNhdGVkIiwiZXNjYXBlIiwiZXZlbnQtcmVzaXplIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWV2ZW50Ijp7dXNlOlsiYXVpLWV2ZW50LWJhc2UiXX0sCiJhdWktZXZlbnQtYmFzZSI6e3JlcXVpcmVzOlsiZXZlbnQtYmFzZSJdfSwiYXVpLWV2ZW50LWRlbGVnYXRlLWNoYW5nZSI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWV2ZW50LWRlbGVnYXRlLWNoYW5nZSIsdHJpZ2dlcjoiZXZlbnQtYmFzZS1pZSIsdWE6ImllIn0scmVxdWlyZXM6WyJhdWktZXZlbnQtYmFzZSIsImV2ZW50LWRlbGVnYXRlIiwiZXZlbnQtc3ludGhldGljIl19LCJhdWktZXZlbnQtZGVsZWdhdGUtc3VibWl0Ijp7Y29uZGl0aW9uOntuYW1lOiJhdWktZXZlbnQtZGVsZWdhdGUtc3VibWl0Iix0cmlnZ2VyOiJldmVudC1iYXNlLWllIix1YToiaWUifSxyZXF1aXJlczpbImF1aS1ldmVudC1iYXNlIiwiZXZlbnQtZGVsZWdhdGUiLCJldmVudC1zeW50aGV0aWMiXX0sImF1aS1ldmVudC1pbnB1dCI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWV2ZW50LWlucHV0Iix0ZXN0OmZ1bmN0aW9uKHEpe3ZhciB0PXEuc3VwcG9ydHNET01FdmVudCxmPXEuRmVhdHVyZXMudGVzdCxkPXEuRmVhdHVyZXMuYWRkOwp2b2lkIDA9PT1mKCJldmVudCIsImlucHV0IikmJmQoImV2ZW50IiwiaW5wdXQiLHt0ZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKSwiaW5wdXQiKSYmKCFxLlVBLmllfHw5PHEuVUEuaWUpfX0pO3JldHVybiFmKCJldmVudCIsImlucHV0Iil9LHRyaWdnZXI6ImF1aS1ldmVudC1iYXNlIn0scmVxdWlyZXM6WyJhdWktZXZlbnQtYmFzZSIsImV2ZW50LWRlbGVnYXRlIiwiZXZlbnQtc3ludGhldGljIiwidGltZXJzIl19LCJhdWktZm9ybS1iYXNlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImlvLWZvcm0iLCJxdWVyeXN0cmluZy1wYXJzZSIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktZGF0YS1zZXQtZGVwcmVjYXRlZCIsImF1aS1mb3JtLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLWJ1aWxkZXIiOntyZXF1aXJlczoiYXVpLW1vZGFsIGF1aS1sYXlvdXQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1saXN0IGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdG9vbGJhciBhdWktZm9ybS1idWlsZGVyLWZpZWxkLXR5cGUgYXVpLWZvcm0tYnVpbGRlci1maWVsZC10eXBlcyBhdWktZm9ybS1idWlsZGVyLWxheW91dC1idWlsZGVyIGF1aS1mb3JtLWJ1aWxkZXItcGFnZS1tYW5hZ2VyIGF1aS1mb3JtLWJ1aWxkZXItc2V0dGluZ3MtbW9kYWwgZXZlbnQtZm9jdXMgZXZlbnQtdGFwIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWF2YWlsYWJsZS1maWVsZC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktcHJvcGVydHktYnVpbGRlci1hdmFpbGFibGUtZmllbGQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZGVwcmVjYXRlZCI6e3JlcXVpcmVzOiJhdWktYnV0dG9uIGF1aS1jb2xsZWN0aW9uIGF1aS1mb3JtLWJ1aWxkZXItYXZhaWxhYmxlLWZpZWxkLWRlcHJlY2F0ZWQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtYnV0dG9uLWRlcHJlY2F0ZWQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1jaGVja2JveC1kZXByZWNhdGVkIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZmllbGRzZXQtZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLWZpbGUtdXBsb2FkLWRlcHJlY2F0ZWQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1tdWx0aXBsZS1jaG9pY2UtZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLXJhZGlvLWRlcHJlY2F0ZWQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1zZWxlY3QtZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLXRleHQtZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLXRleHRhcmVhLWRlcHJlY2F0ZWQgYXVpLXByb3BlcnR5LWJ1aWxkZXIgYXVpLXByb3BlcnR5LWJ1aWxkZXItc2V0dGluZ3MgYXVpLXNvcnRhYmxlLWxpc3QgYXVpLXRhYnZpZXcgYXVpLXRvb2x0aXAtYmFzZSBlc2NhcGUgdHJhbnNpdGlvbiIuc3BsaXQoIiAiKSwKc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1iYXNlIjp7cmVxdWlyZXM6ImF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS1ub2RlLWJhc2UgYXVpLXRleHQtZGF0YS1lZGl0b3IgYXVpLXRvZ2dsZXIgYmFzZSBub2RlLWJhc2UiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1idXR0b24tZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIl19LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWNoZWNrYm94LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1jaG9pY2UiOntyZXF1aXJlczpbImF1aS1ib29sZWFuLWRhdGEtZWRpdG9yIiwiYXVpLW9wdGlvbnMtZGF0YS1lZGl0b3IiLCJhdWktdGFicy1kYXRhLWVkaXRvciIsImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtYmFzZSIsImF1aS1mb3JtLWZpZWxkLWNob2ljZSJdfSwKImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsicGFuZWwiLCJhdWktZGF0YXR5cGUiLCJhdWktZGF0YXRhYmxlLWVkaXQiLCJhdWktcHJvcGVydHktYnVpbGRlci1maWVsZC1zdXBwb3J0Il0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1maWVsZHNldC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZmlsZS11cGxvYWQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIl19LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWxpc3QiOntyZXF1aXJlczpbImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdHlwZSIsImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdHlwZXMiLCJhdWktZm9ybS1idWlsZGVyLWxheW91dC1idWlsZGVyIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1tdWx0aXBsZS1jaG9pY2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIl19LAoiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1yYWRpby1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtc2VsZWN0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1zZW50ZW5jZSI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1iYXNlIiwiYXVpLWZvcm0tZmllbGQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdGV4dCI6e3JlcXVpcmVzOlsiYXVpLWJvb2xlYW4tZGF0YS1lZGl0b3IiLCJhdWktcmFkaW8tZ3JvdXAtZGF0YS1lZGl0b3IiLCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWJhc2UiLCJhdWktZm9ybS1maWVsZC10ZXh0Il19LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXRleHQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIl19LAoiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10ZXh0YXJlYS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdG9vbGJhciI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJiYXNlIiwibm9kZS1iYXNlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10eXBlIjp7cmVxdWlyZXM6WyJiYXNlIiwibm9kZS1iYXNlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10eXBlcyI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXR5cGVzLW1vZGFsIiwiYmFzZSIsIm5vZGUtYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdHlwZXMtbW9kYWwiOntyZXF1aXJlczpbImF1aS1tb2RhbCJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWJ1aWxkZXItbGF5b3V0LWJ1aWxkZXIiOntyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwKImF1aS1sYXlvdXQtYnVpbGRlciIsImF1aS1tb2RhbCIsImJhc2UiLCJub2RlLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLXBhZ2UtbWFuYWdlciI6e3JlcXVpcmVzOiJhdWktcGFnaW5hdGlvbiBhdWktcG9wb3ZlciBhdWktdGFidmlldyBiYXNlIGV2ZW50LXZhbHVlY2hhbmdlIG5vZGUtYmFzZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLXNldHRpbmdzLW1vZGFsIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1tb2RhbCIsImJhc2UiLCJub2RlLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1jb21ib2JveC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS10ZXh0YXJlYS1kZXByZWNhdGVkIiwiYXVpLXRvb2xiYXIiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1kZXByZWNhdGVkIjp7dXNlOiJhdWktZm9ybS1iYXNlLWRlcHJlY2F0ZWQgYXVpLWZvcm0tY29tYm9ib3gtZGVwcmVjYXRlZCBhdWktZm9ybS1maWVsZC1kZXByZWNhdGVkIGF1aS1mb3JtLXNlbGVjdC1kZXByZWNhdGVkIGF1aS1mb3JtLXRleHRhcmVhLWRlcHJlY2F0ZWQgYXVpLWZvcm0tdGV4dGZpZWxkLWRlcHJlY2F0ZWQiLnNwbGl0KCIgIil9LAoiYXVpLWZvcm0tZmllbGQiOntyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiYXVpLW5vZGUtYmFzZSIsImJhc2UtYnVpbGQiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1maWVsZC1jaG9pY2UiOntyZXF1aXJlczpbImF1aS1mb3JtLWZpZWxkLXJlcXVpcmVkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tZmllbGQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1jb21wb25lbnQiXX0sImF1aS1mb3JtLWZpZWxkLXJlcXVpcmVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1maWVsZCJdfSwiYXVpLWZvcm0tZmllbGQtdGV4dCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tZmllbGQtcmVxdWlyZWQiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1zZWxlY3QtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tdGV4dGFyZWEtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsibm9kZS1wbHVnaW5ob3N0IiwKImF1aS1hdXRvc2l6ZS1kZXByZWNhdGVkIiwiYXVpLWZvcm0tdGV4dGZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLXRleHRmaWVsZC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1maWVsZC1kZXByZWNhdGVkIl19LCJhdWktZm9ybS12YWxpZGF0b3IiOntyZXF1aXJlczoiZXNjYXBlIHNlbGVjdG9yLWNzczMgbm9kZS1ldmVudC1kZWxlZ2F0ZSBhdWktbm9kZSBhdWktY29tcG9uZW50IGF1aS1ldmVudC1pbnB1dCIuc3BsaXQoIiAiKX0sImF1aS1oc3YtcGFsZXR0ZSI6e3JlcXVpcmVzOiJhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIGF1aS1ldmVudC1pbnB1dCBiYXNlLWJ1aWxkIGNsaWNrYWJsZS1yYWlsIGNvbG9yLWhzdiBkZC1jb25zdHJhaW4gc2xpZGVyIHdpZGdldCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktaHN2YS1wYWxldHRlIjp7cmVxdWlyZXM6WyJhdWktaHN2LXBhbGV0dGUiXSxza2lubmFibGU6ITB9LAoiYXVpLWhzdmEtcGFsZXR0ZS1tb2RhbCI6e3JlcXVpcmVzOlsiYXVpLWhzdmEtcGFsZXR0ZSIsImF1aS1tb2RhbCJdLHNraW5uYWJsZTohMH0sImF1aS1pbWFnZS1jcm9wcGVyIjp7cmVxdWlyZXM6WyJyZXNpemUtYmFzZSIsInJlc2l6ZS1jb25zdHJhaW4iLCJkZC1jb25zdHJhaW4iLCJhdWktbm9kZS1iYXNlIiwiYXVpLWNvbXBvbmVudCJdLHNraW5uYWJsZTohMH0sImF1aS1pbWFnZS12aWV3ZXIiOntyZXF1aXJlczoid2lkZ2V0IHdpZGdldC1tb2RhbGl0eSB3aWRnZXQtcG9zaXRpb24gd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4gd2lkZ2V0LXN0YWNrIHdpZGdldC1zdGRtb2QgYXVpLWV2ZW50IGF1aS1pbWFnZS12aWV3ZXItYmFzZSBhdWktaW1hZ2Utdmlld2VyLW11bHRpcGxlIGF1aS1pbWFnZS12aWV3ZXItc2xpZGVzaG93IGF1aS1ub2RlLWJhc2UgYXVpLXdpZGdldC1jc3NjbGFzcyBhdWktd2lkZ2V0LXRvZ2dsZSIuc3BsaXQoIiAiKSwKc2tpbm5hYmxlOiEwfSwiYXVpLWltYWdlLXZpZXdlci1iYXNlIjp7cmVxdWlyZXM6ImFuaW0gYXVpLWFyaWEgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLW5vZGUgYXVpLXdpZGdldC1yZXNwb25zaXZlIGJhc2UtYnVpbGQgaW1hZ2Vsb2FkZXIgbm9kZS1iYXNlIHdpZGdldCB3aWRnZXQtc3RhY2siLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWltYWdlLXZpZXdlci1tZWRpYSI6e3JlcXVpcmVzOlsicGx1Z2luIiwiYXVpLWNvbXBvbmVudCIsImF1aS1pbWFnZS12aWV3ZXIiXX0sImF1aS1pbWFnZS12aWV3ZXItbXVsdGlwbGUiOntyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJub2RlLWJhc2UiLCJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1pbWFnZS12aWV3ZXItYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1pbWFnZS12aWV3ZXItbXVsdGlwbGUtc3dpcGUiOntjb25kaXRpb246e25hbWU6ImF1aS1pbWFnZS12aWV3ZXItbXVsdGlwbGUtc3dpcGUiLHRyaWdnZXI6ImF1aS1pbWFnZS12aWV3ZXItbXVsdGlwbGUiLAp1YToidG91Y2hFbmFibGVkIn0scmVxdWlyZXM6WyJhdWktaW1hZ2Utdmlld2VyLW11bHRpcGxlIiwiYXVpLWltYWdlLXZpZXdlci1zd2lwZSJdfSwiYXVpLWltYWdlLXZpZXdlci1zbGlkZXNob3ciOntyZXF1aXJlczpbIm5vZGUiLCJhdWktY2xhc3NuYW1lbWFuYWdlciJdfSwiYXVpLWltYWdlLXZpZXdlci1zd2lwZSI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWltYWdlLXZpZXdlci1zd2lwZSIsdHJpZ2dlcjoiYXVpLWltYWdlLXZpZXdlci1iYXNlIix1YToidG91Y2hFbmFibGVkIn0scmVxdWlyZXM6WyJldmVudC1yZXNpemUiLCJhdWktaW1hZ2Utdmlld2VyLWJhc2UiLCJhdWktd2lkZ2V0LXN3aXBlIl19LCJhdWktaW5wdXQtdGV4dC1jb250cm9sLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktZGF0YXNvdXJjZS1jb250cm9sLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1mb3JtLWNvbWJvYm94LWRlcHJlY2F0ZWQiXX0sImF1aS1pbyI6e3VzZTpbImF1aS1pby1yZXF1ZXN0Il19LAoiYXVpLWlvLWRlcHJlY2F0ZWQiOnt1c2U6WyJhdWktaW8tcmVxdWVzdCIsImF1aS1pby1wbHVnaW4tZGVwcmVjYXRlZCJdfSwiYXVpLWlvLXBsdWdpbi1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktb3ZlcmxheS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktcGFyc2UtY29udGVudCIsImF1aS1pby1yZXF1ZXN0IiwiYXVpLWxvYWRpbmctbWFzay1kZXByZWNhdGVkIl19LCJhdWktaW8tcmVxdWVzdCI6e3JlcXVpcmVzOlsiaW8tYmFzZSIsImpzb24iLCJwbHVnaW4iLCJxdWVyeXN0cmluZy1zdHJpbmdpZnkiLCJhdWktY29tcG9uZW50Il19LCJhdWktaW8tcmVxdWVzdC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJpby1iYXNlIiwianNvbiIsInBsdWdpbiIsInF1ZXJ5c3RyaW5nLXN0cmluZ2lmeSIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS1sYXlvdXQiOntyZXF1aXJlczoiYXVpLWxheW91dC1jb2wgYXVpLWxheW91dC1yb3cgYXVpLW5vZGUtYmFzZSBiYXNlLWJ1aWxkIGRhdGF0eXBlLW51bWJlci1wYXJzZSBldmVudC1yZXNpemUiLnNwbGl0KCIgIil9LAoiYXVpLWxheW91dC1idWlsZGVyIjp7cmVxdWlyZXM6ImF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS1sYXlvdXQgYXVpLWxheW91dC1idWlsZGVyLWFkZC1jb2wgYXVpLWxheW91dC1idWlsZGVyLWFkZC1yb3cgYXVpLWxheW91dC1idWlsZGVyLW1vdmUgYXVpLWxheW91dC1idWlsZGVyLXJlbW92ZS1yb3cgYXVpLWxheW91dC1idWlsZGVyLXJlc2l6ZS1jb2wgYXVpLW5vZGUtYmFzZSBiYXNlLWJ1aWxkIG5vZGUtZXZlbnQtZGVsZWdhdGUgbm9kZS1zY3JlZW4gbm9kZS1zdHlsZSIuc3BsaXQoIiAiKX0sImF1aS1sYXlvdXQtYnVpbGRlci1hZGQtY29sIjp7cmVxdWlyZXM6WyJldmVudC1rZXkiLCJub2RlLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktbGF5b3V0LWJ1aWxkZXItYWRkLXJvdyI6e3JlcXVpcmVzOlsiYXVpLW5vZGUtYmFzZSIsImJhc2UtYnVpbGQiLCJub2RlLXNjcm9sbC1pbmZvIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWxheW91dC1idWlsZGVyLW1vdmUiOntyZXF1aXJlczpbImF1aS1ub2RlLWJhc2UiLAoiYmFzZS1idWlsZCJdLHNraW5uYWJsZTohMH0sImF1aS1sYXlvdXQtYnVpbGRlci1yZW1vdmUtcm93Ijp7cmVxdWlyZXM6WyJhdWktbm9kZS1iYXNlIiwiYmFzZS1idWlsZCJdLHNraW5uYWJsZTohMH0sImF1aS1sYXlvdXQtYnVpbGRlci1yZXNpemUtY29sIjp7cmVxdWlyZXM6ImRkLWNvbnN0cmFpbiBkZC1kZWxlZ2F0ZSBkZC1kcm9wLXBsdWdpbiBkZC1wcm94eSBldmVudC1tb3VzZWVudGVyIG5vZGUtYmFzZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktbGF5b3V0LWNvbCI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktbm9kZS1iYXNlIiwiYmFzZS1idWlsZCJdLHNraW5uYWJsZTohMH0sImF1aS1sYXlvdXQtcm93Ijp7cmVxdWlyZXM6WyJhcnJheS1pbnZva2UiLCJhdWktbm9kZS1iYXNlIiwiYmFzZS1idWlsZCJdLHNraW5uYWJsZTohMH0sImF1aS1saW5rZWRzZXQiOntyZXF1aXJlczpbImF1aS1zZXQiXX0sImF1aS1saXZlLXNlYXJjaC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktYmFzZS1kZXByZWNhdGVkIl19LAoiYXVpLWxvYWRpbmctbWFzay1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJwbHVnaW4iLCJhdWktb3ZlcmxheS1tYXNrLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktbWFwIjp7cmVxdWlyZXM6WyJiYXNlLWJ1aWxkIl19LCJhdWktbWVudSI6e3JlcXVpcmVzOiJiYXNlLWJ1aWxkIGV2ZW50LW1vdXNlZW50ZXIgZXZlbnQtcmVzaXplIHdpZGdldCB3aWRnZXQtcG9zaXRpb24gd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4gd2lkZ2V0LXN0YWNrIGF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS1kZWJvdW5jZSBhdWktZHJvcGRvd24gYXVpLW1lbnUtaXRlbSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktbWVudS1pdGVtIjp7cmVxdWlyZXM6WyJiYXNlLWJ1aWxkIiwibm9kZS1iYXNlIiwiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktbm9kZSIsImF1aS13aWRnZXQtc2hvcnRjdXQiXX0sImF1aS1tZXNzYWdpbmciOntyZXF1aXJlczpbInF1ZXJ5c3RyaW5nIiwKImF1aS10aW1lciJdfSwiYXVpLW1vZGFsIjp7cmVxdWlyZXM6IndpZGdldCB3aWRnZXQtYXV0b2hpZGUgd2lkZ2V0LWJ1dHRvbnMgd2lkZ2V0LW1vZGFsaXR5IHdpZGdldC1wb3NpdGlvbiB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiB3aWRnZXQtc3RhY2sgd2lkZ2V0LXN0ZG1vZCBkZC1wbHVnaW4gZGQtY29uc3RyYWluIHRpbWVycyBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIGF1aS13aWRnZXQtdG9vbGJhcnMiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLW1vZGFsLXJlc2l6ZSI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLW1vZGFsLXJlc2l6ZSIsdGVzdDpmdW5jdGlvbihxKXtyZXR1cm4hcS5VQS5tb2JpbGV9LHRyaWdnZXI6ImF1aS1tb2RhbCJ9LHJlcXVpcmVzOlsiYXVpLW1vZGFsIiwicmVzaXplLXBsdWdpbiJdfSwiYXVpLW5vZGUiOnt1c2U6WyJhdWktbm9kZS1iYXNlIl19LAoiYXVpLW5vZGUtYWNjZXNzaWJsZSI6e3JlcXVpcmVzOlsiYXVpLW5vZGUtYmFzZSIsImV2ZW50LWN1c3RvbS1iYXNlIl19LCJhdWktbm9kZS1iYXNlIjp7cmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLCJhdWktYmFzZS1sYW5nIiwiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktZGVib3VuY2UiLCJub2RlIl19LCJhdWktbm9kZS1odG1sNSI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLW5vZGUtaHRtbDUiLHRyaWdnZXI6ImF1aS1ub2RlIix1YToiaWUifSxyZXF1aXJlczpbImNvbGxlY3Rpb24iLCJhdWktbm9kZS1iYXNlIl19LCJhdWktb3B0aW9ucy1kYXRhLWVkaXRvciI6e3JlcXVpcmVzOiJhdWktZGF0YS1lZGl0b3IgZGQtY29uc3RyYWluIGRkLWRlbGVnYXRlIGRkLWRyb3AtcGx1Z2luIGRkLXByb3h5IGV2ZW50LXZhbHVlY2hhbmdlIG5vZGUtZXZlbnQtZGVsZWdhdGUiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6IndpZGdldC1wb3NpdGlvbiB3aWRnZXQtc3RhY2sgd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4gd2lkZ2V0LXN0ZG1vZCBhdWktY29tcG9uZW50Ii5zcGxpdCgiICIpfSwKImF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLW92ZXJsYXktbWFuYWdlci1kZXByZWNhdGVkIiwiYXVpLWRlbGF5ZWQtdGFzay1kZXByZWNhdGVkIiwiYXVpLWFyaWEiXX0sImF1aS1vdmVybGF5LWNvbnRleHQtcGFuZWwtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYW5pbSIsImF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1vdmVybGF5LWRlcHJlY2F0ZWQiOnt1c2U6WyJhdWktb3ZlcmxheS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1jb250ZXh0LWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1jb250ZXh0LXBhbmVsLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1tYW5hZ2VyLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1tYXNrLWRlcHJlY2F0ZWQiXX0sImF1aS1vdmVybGF5LW1hbmFnZXItZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsib3ZlcmxheSIsInBsdWdpbiIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiLAoiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIl19LCJhdWktb3ZlcmxheS1tYXNrLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImV2ZW50LXJlc2l6ZSIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1iYXNlLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktcGFnaW5hdGlvbiI6e3JlcXVpcmVzOlsibm9kZS1ldmVudC1kZWxlZ2F0ZSIsImF1aS1ub2RlIiwiYXVpLWNvbXBvbmVudCIsIndpZGdldC1odG1scGFyc2VyIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXBhbGV0dGUiOntyZXF1aXJlczoiYmFzZS1idWlsZCBldmVudC1ob3ZlciB3aWRnZXQgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLWJhc2UgYXVpLXdpZGdldC1jc3NjbGFzcyBhdWktd2lkZ2V0LXRvZ2dsZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktcGFyc2UtY29udGVudCI6e3JlcXVpcmVzOlsiYXN5bmMtcXVldWUiLCJwbHVnaW4iLCJpby1iYXNlIiwiYXVpLWNvbXBvbmVudCIsImF1aS1ub2RlLWJhc2UiXX0sCiJhdWktcG9wb3ZlciI6e3JlcXVpcmVzOiJldmVudC1yZXNpemUgd2lkZ2V0IHdpZGdldC1hdXRvaGlkZSB3aWRnZXQtYnV0dG9ucyB3aWRnZXQtbW9kYWxpdHkgd2lkZ2V0LXBvc2l0aW9uIHdpZGdldC1wb3NpdGlvbi1hbGlnbiB3aWRnZXQtcG9zaXRpb24tY29uc3RyYWluIHdpZGdldC1zdGFjayB3aWRnZXQtc3RkbW9kIGF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS13aWRnZXQtY3NzY2xhc3MgYXVpLXdpZGdldC10b2dnbGUgYXVpLXdpZGdldC10b29sYmFycyBhdWktd2lkZ2V0LXRyYW5zaXRpb24gYXVpLXdpZGdldC10cmlnZ2VyIGF1aS13aWRnZXQtcG9zaXRpb24tYWxpZ24tc3VnZ2VzdGlvbiBhdWktY29tcG9uZW50IGF1aS1ub2RlLWJhc2UiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXByb2dyZXNzYmFyIjp7cmVxdWlyZXM6WyJhdWktbm9kZSIsImF1aS1jb21wb25lbnQiLCJhdWktYXJpYSJdLHNraW5uYWJsZTohMH0sImF1aS1wcm9taXNlIjp7cmVxdWlyZXM6WyJhcnJheS1pbnZva2UiLAoicHJvbWlzZSIsIm9vcCJdfSwiYXVpLXByb3BlcnR5LWJ1aWxkZXIiOntyZXF1aXJlczoiZGQgY29sbGVjdGlvbiBhdWktcHJvcGVydHktYnVpbGRlci1hdmFpbGFibGUtZmllbGQgYXVpLXByb3BlcnR5LWJ1aWxkZXItZmllbGQtc3VwcG9ydCBhdWktcHJvcGVydHktYnVpbGRlci1zZXR0aW5ncyBhdWktdGFidmlldyIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktcHJvcGVydHktYnVpbGRlci1hdmFpbGFibGUtZmllbGQiOntyZXF1aXJlczpbImJhc2UiLCJhdWktY29tcG9uZW50IiwiYXVpLW5vZGUiXX0sImF1aS1wcm9wZXJ0eS1idWlsZGVyLWZpZWxkLXN1cHBvcnQiOnt9LCJhdWktcHJvcGVydHktYnVpbGRlci1zZXR0aW5ncyI6e3JlcXVpcmVzOlsiYXVpLXRhYnZpZXciLCJhdWktZGF0YXRhYmxlLXByb3BlcnR5LWxpc3QiXX0sImF1aS1yYWRpby1ncm91cC1kYXRhLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWRhdGEtZWRpdG9yIiwibm9kZS1ldmVudC1kZWxlZ2F0ZSJdLApza2lubmFibGU6ITB9LCJhdWktcmF0aW5nIjp7dXNlOlsiYXVpLXJhdGluZy1iYXNlIiwiYXVpLXJhdGluZy10aHVtYiJdfSwiYXVpLXJhdGluZy1iYXNlIjp7cmVxdWlyZXM6WyJhdWktY29tcG9uZW50IiwiYXVpLW5vZGUtYmFzZSIsIndpZGdldC1odG1scGFyc2VyIiwid2lkZ2V0LXVpZXZlbnRzIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXJhdGluZy10aHVtYiI6e3JlcXVpcmVzOlsiYXVpLXJhdGluZy1iYXNlIl19LCJhdWktcmVzaXplLWJhc2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiZGQtZHJhZyIsImRkLWRlbGVnYXRlIiwiZGQtZHJvcCIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktcmVzaXplLWNvbnN0cmFpbi1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJkZC1jb25zdHJhaW4iLCJwbHVnaW4iLCJhdWktcmVzaXplLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLXJlc2l6ZS1kZXByZWNhdGVkIjp7c2tpbm5hYmxlOiEwLHVzZTpbImF1aS1yZXNpemUtYmFzZS1kZXByZWNhdGVkIiwKImF1aS1yZXNpemUtY29uc3RyYWluLWRlcHJlY2F0ZWQiXX0sImF1aS1zY2FsZS1kYXRhLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktZGF0YS1lZGl0b3IiLCJldmVudC12YWx1ZWNoYW5nZSJdfSwiYXVpLXNjaGVkdWxlciI6e3VzZToiZXZlbnQtZ2VzdHVyZXMgYXVpLXNjaGVkdWxlci1iYXNlIGF1aS1zY2hlZHVsZXItZXZlbnQtcmVjb3JkZXIgYXVpLXNjaGVkdWxlci12aWV3LWFnZW5kYSBhdWktc2NoZWR1bGVyLXZpZXctZGF5IGF1aS1zY2hlZHVsZXItdmlldy1tb250aCBhdWktc2NoZWR1bGVyLXZpZXctdGFibGUtZGQgYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlIGF1aS1zY2hlZHVsZXItdmlldy13ZWVrIGF1aS12aWV3cG9ydCIuc3BsaXQoIiAiKX0sImF1aS1zY2hlZHVsZXItYmFzZSI6e3JlcXVpcmVzOiJtb2RlbCBtb2RlbC1saXN0IHdpZGdldC1zdGRtb2QgY29sb3ItaHNsIGF1aS1ldmVudC1iYXNlIGF1aS1ub2RlLWJhc2UgYXVpLWNvbXBvbmVudCBhdWktZGF0YXR5cGUgYXVpLWJ1dHRvbiBub2RlLWZvY3VzbWFuYWdlciIuc3BsaXQoIiAiKSwKc2tpbm5hYmxlOiEwfSwiYXVpLXNjaGVkdWxlci1ldmVudC1yZWNvcmRlciI6e3JlcXVpcmVzOlsicXVlcnlzdHJpbmciLCJpby1mb3JtIiwib3ZlcmxheSIsImF1aS1zY2hlZHVsZXItYmFzZSIsImF1aS1wb3BvdmVyIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXNjaGVkdWxlci10b3VjaCI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLXNjaGVkdWxlci10b3VjaCIsdHJpZ2dlcjoiYXVpLXNjaGVkdWxlciIsdWE6InRvdWNoRW5hYmxlZCJ9LHJlcXVpcmVzOlsiYmFzZS1idWlsZCIsImF1aS1zY2hlZHVsZXIiXSxza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLXZpZXctYWdlbmRhIjp7cmVxdWlyZXM6WyJhdWktc2NoZWR1bGVyLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLXZpZXctZGF5Ijp7cmVxdWlyZXM6WyJkZC1kcmFnIiwiZGQtZGVsZWdhdGUiLCJkZC1kcm9wIiwiZGQtY29uc3RyYWluIiwiYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXNjaGVkdWxlci12aWV3LW1vbnRoIjp7cmVxdWlyZXM6WyJhdWktc2NoZWR1bGVyLXZpZXctdGFibGUiXSwKc2tpbm5hYmxlOiEwfSwiYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlIjp7cmVxdWlyZXM6WyJvdmVybGF5IiwiYXVpLXNjaGVkdWxlci1iYXNlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlLWRkIjp7cmVxdWlyZXM6WyJkZC1kcmFnIiwiZGQtZGVsZWdhdGUiLCJkZC1kcm9wIiwiYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlIl19LCJhdWktc2NoZWR1bGVyLXZpZXctd2VlayI6e3JlcXVpcmVzOlsiYXVpLXNjaGVkdWxlci12aWV3LWRheSJdLHNraW5uYWJsZTohMH0sImF1aS1zY3JvbGxlci1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJldmVudC1tb3VzZWVudGVyIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1zaW1wbGUtYW5pbS1kZXByZWNhdGVkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXNjcm9sbHNweSI6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsIm5vZGUtc2NyZWVuIiwiYXVpLWNsYXNzbmFtZW1hbmFnZXIiXX0sImF1aS1zZWFyY2giOnt1c2U6WyJhdWktc2VhcmNoLXRzdCJdfSwKImF1aS1zZWFyY2gtdHN0Ijp7cmVxdWlyZXM6WyJhdWktY29tcG9uZW50Il19LCJhdWktc2VsZWN0b3IiOntyZXF1aXJlczpbInNlbGVjdG9yLWNzczMiLCJhdWktY2xhc3NuYW1lbWFuYWdlciJdfSwiYXVpLXNldCI6e3JlcXVpcmVzOlsiYXVpLW1hcCJdfSwiYXVpLXNpbXBsZS1hbmltLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS1za2luLWRlcHJlY2F0ZWQiOnt0eXBlOiJjc3MifSwiYXVpLXNvcnRhYmxlIjp7dXNlOlsiYXVpLXNvcnRhYmxlLWxheW91dCIsImF1aS1zb3J0YWJsZS1saXN0Il19LCJhdWktc29ydGFibGUtbGF5b3V0Ijp7cmVxdWlyZXM6ImRkLWRlbGVnYXRlIGRkLWRyYWcgZGQtZHJvcCBkZC1wcm94eSBhdWktbm9kZSBhdWktY29tcG9uZW50Ii5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1zb3J0YWJsZS1saXN0Ijp7cmVxdWlyZXM6ImRkLWRyYWcgZGQtZHJvcCBkZC1wcm94eSBkZC1zY3JvbGwgYXVpLW5vZGUgYXVpLWNvbXBvbmVudCIuc3BsaXQoIiAiKX0sCiJhdWktc3RhdGUtaW50ZXJhY3Rpb24tZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCIsInBsdWdpbiJdfSwiYXVpLXN1cmZhY2UiOnt1c2U6WyJhdWktc3VyZmFjZS1hcHAiLCJhdWktc3VyZmFjZS1zY3JlZW4iXX0sImF1aS1zdXJmYWNlLWFwcCI6e3JlcXVpcmVzOlsiZXZlbnQtZGVsZWdhdGUiLCJub2RlLWV2ZW50LWh0bWw1IiwiYXVpLXN1cmZhY2UtYmFzZSIsImF1aS1zdXJmYWNlLXNjcmVlbiIsImF1aS1zdXJmYWNlLXNjcmVlbi1yb3V0ZSJdfSwiYXVpLXN1cmZhY2UtYmFzZSI6e3JlcXVpcmVzOiJiYXNlLWJ1aWxkIG5vZGUtc3R5bGUgdGltZXJzIGF1aS1kZWJvdW5jZSBhdWktcHJvbWlzZSBhdWktcGFyc2UtY29udGVudCIuc3BsaXQoIiAiKX0sImF1aS1zdXJmYWNlLXNjcmVlbiI6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCJdfSwiYXVpLXN1cmZhY2Utc2NyZWVuLWh0bWwiOntyZXF1aXJlczpbImF1aS1iYXNlIiwiYXVpLWlvLXJlcXVlc3QiLAoiYXVpLXByb21pc2UiLCJhdWktc3VyZmFjZS1zY3JlZW4iLCJhdWktdXJsIl19LCJhdWktc3VyZmFjZS1zY3JlZW4tcm91dGUiOntyZXF1aXJlczpbImJhc2UtYnVpbGQiXX0sImF1aS1zd2YtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsicXVlcnlzdHJpbmctcGFyc2Utc2ltcGxlIiwicXVlcnlzdHJpbmctc3RyaW5naWZ5LXNpbXBsZSIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS10YWJzLWRhdGEtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktZGF0YS1lZGl0b3IiLCJhdWktdGFidmlldyJdfSwiYXVpLXRhYnZpZXciOntyZXF1aXJlczpbInNlbGVjdG9yLWNzczMiLCJ0YWJ2aWV3IiwiYXVpLWNvbXBvbmVudCIsImF1aS13aWRnZXQtY3NzIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXRlbXBsYXRlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS10ZXh0LWRhdGEtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktZGF0YS1lZGl0b3IiLCJldmVudC12YWx1ZWNoYW5nZSJdLApza2lubmFibGU6ITB9LCJhdWktdGV4dC1kYXRhLXVuaWNvZGUiOntyZXF1aXJlczpbInRleHQiXX0sImF1aS10ZXh0LXVuaWNvZGUiOntyZXF1aXJlczpbImF1aS10ZXh0LWRhdGEtdW5pY29kZSJdfSwiYXVpLXRleHRib3hsaXN0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczoiYW5pbS1ub2RlLXBsdWdpbiBhdWktYXV0b2NvbXBsZXRlLWRlcHJlY2F0ZWQgYXVpLWJ1dHRvbi1pdGVtLWRlcHJlY2F0ZWQgYXVpLWRhdGEtc2V0LWRlcHJlY2F0ZWQgZXNjYXBlIG5vZGUtZm9jdXNtYW5hZ2VyIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS10aW1lcGlja2VyIjp7cmVxdWlyZXM6WyJhdXRvY29tcGxldGUiLCJhdWktZGF0ZXBpY2tlci1kZWxlZ2F0ZSIsImF1aS1kYXRlcGlja2VyLXBvcG92ZXIiXSxza2lubmFibGU6ITB9LCJhdWktdGltZXBpY2tlci1uYXRpdmUiOntyZXF1aXJlczpbImJhc2UiLCJiYXNlLWJ1aWxkIiwiYXVpLW5vZGUtYmFzZSIsImF1aS1kYXRlcGlja2VyLWRlbGVnYXRlIiwKImF1aS1kYXRlcGlja2VyLW5hdGl2ZSJdfSwiYXVpLXRpbWVyIjp7cmVxdWlyZXM6WyJvb3AiXX0sImF1aS10b2dnbGVyIjp7dXNlOlsiYXVpLXRvZ2dsZXItYmFzZSIsImF1aS10b2dnbGVyLWRlbGVnYXRlIl19LCJhdWktdG9nZ2xlci1hY2Nlc3NpYmlsaXR5Ijp7cmVxdWlyZXM6WyJhdWktdG9nZ2xlci1iYXNlIl19LCJhdWktdG9nZ2xlci1iYXNlIjp7cmVxdWlyZXM6InRyYW5zaXRpb24gYXVpLXNlbGVjdG9yIGF1aS1ldmVudC1iYXNlIGF1aS1ub2RlIGF1aS1jb21wb25lbnQgZXZlbnQtdGFwIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS10b2dnbGVyLWRlbGVnYXRlIjp7cmVxdWlyZXM6WyJhcnJheS1pbnZva2UiLCJub2RlLWV2ZW50LWRlbGVnYXRlIiwiYXVpLXRvZ2dsZXItYmFzZSJdfSwiYXVpLXRvb2xiYXIiOntyZXF1aXJlczpbImFycmF5bGlzdCIsImFycmF5bGlzdC1hZGQiLCJhdWktY29tcG9uZW50IiwiYXVpLWJ1dHRvbi1jb3JlIl19LCJhdWktdG9vbHRpcCI6e3VzZTpbImF1aS10b29sdGlwLWJhc2UiLAoiYXVpLXRvb2x0aXAtZGVsZWdhdGUiXX0sImF1aS10b29sdGlwLWJhc2UiOntyZXF1aXJlczoiYXVpLWFyaWEgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLWNvbXBvbmVudCBhdWktZGVib3VuY2UgYXVpLW5vZGUtYmFzZSBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIGF1aS13aWRnZXQtdHJhbnNpdGlvbiBhdWktd2lkZ2V0LXRyaWdnZXIgYXVpLXdpZGdldC1wb3NpdGlvbi1hbGlnbi1zdWdnZXN0aW9uIGV2ZW50LWhvdmVyIGV2ZW50LXJlc2l6ZSBlc2NhcGUgd2lkZ2V0IHdpZGdldC1hdXRvaGlkZSB3aWRnZXQtcG9zaXRpb24gd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4gd2lkZ2V0LXN0YWNrIHdpZGdldC1zdGRtb2QiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXRvb2x0aXAtZGVsZWdhdGUiOntyZXF1aXJlczpbImF1aS10b29sdGlwLWJhc2UiLCJub2RlLWV2ZW50LWRlbGVnYXRlIl19LCJhdWktdG9vbHRpcC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktb3ZlcmxheS1jb250ZXh0LXBhbmVsLWRlcHJlY2F0ZWQiXSwKc2tpbm5hYmxlOiEwfSwiYXVpLXRwbC1zbmlwcGV0cy1iYXNlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS10ZW1wbGF0ZS1kZXByZWNhdGVkIl19LCJhdWktdHBsLXNuaXBwZXRzLWNoZWNrYm94LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS10cGwtc25pcHBldHMtYmFzZS1kZXByZWNhdGVkIl19LCJhdWktdHBsLXNuaXBwZXRzLWRlcHJlY2F0ZWQiOnt1c2U6WyJhdWktdHBsLXNuaXBwZXRzLWJhc2UtZGVwcmVjYXRlZCIsImF1aS10cGwtc25pcHBldHMtY2hlY2tib3gtZGVwcmVjYXRlZCIsImF1aS10cGwtc25pcHBldHMtaW5wdXQtZGVwcmVjYXRlZCIsImF1aS10cGwtc25pcHBldHMtc2VsZWN0LWRlcHJlY2F0ZWQiLCJhdWktdHBsLXNuaXBwZXRzLXRleHRhcmVhLWRlcHJlY2F0ZWQiXX0sImF1aS10cGwtc25pcHBldHMtaW5wdXQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLXRwbC1zbmlwcGV0cy1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS10cGwtc25pcHBldHMtc2VsZWN0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS10cGwtc25pcHBldHMtYmFzZS1kZXByZWNhdGVkIl19LAoiYXVpLXRwbC1zbmlwcGV0cy10ZXh0YXJlYS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktdHBsLXNuaXBwZXRzLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLXRyZWUiOnt1c2U6WyJhdWktdHJlZS1kYXRhIiwiYXVpLXRyZWUtaW8iLCJhdWktdHJlZS1ub2RlIiwiYXVpLXRyZWUtcGFnaW5hdG9yIiwiYXVpLXRyZWUtdmlldyJdfSwiYXVpLXRyZWUtZGF0YSI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtY29yZSIsImF1aS1iYXNlLWxhbmciLCJhdWktbm9kZS1iYXNlIiwiYXVpLXRpbWVyIiwiYXVpLWNvbXBvbmVudCJdfSwiYXVpLXRyZWUtaW8iOntyZXF1aXJlczpbImF1aS1jb21wb25lbnQiLCJhdWktaW8iXX0sImF1aS10cmVlLW5vZGUiOntyZXF1aXJlczoianNvbiBxdWVyeXN0cmluZy1zdHJpbmdpZnkgYXVpLXRyZWUtZGF0YSBhdWktdHJlZS1pbyBhdWktdHJlZS1wYWdpbmF0b3IgZXZlbnQta2V5Ii5zcGxpdCgiICIpfSwiYXVpLXRyZWUtcGFnaW5hdG9yIjp7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSwKImF1aS10cmVlLXZpZXciOntyZXF1aXJlczoiZGQtZGVsZWdhdGUgZGQtcHJveHkgd2lkZ2V0IGF1aS10cmVlLW5vZGUgYXVpLXRyZWUtcGFnaW5hdG9yIGF1aS10cmVlLWlvIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS11bmRvLXJlZG8iOntyZXF1aXJlczpbImJhc2UiLCJiYXNlLWJ1aWxkIiwicHJvbWlzZSJdfSwiYXVpLXVybCI6e3JlcXVpcmVzOlsib29wIiwicXVlcnlzdHJpbmctcGFyc2UiLCJxdWVyeXN0cmluZy1zdHJpbmdpZnkiXX0sImF1aS12aWRlbyI6e3JlcXVpcmVzOiJldmVudC1yZXNpemUgbm9kZS1ldmVudC1odG1sNSBxdWVyeXN0cmluZy1zdHJpbmdpZnktc2ltcGxlIGF1aS1hcmlhIGF1aS1ub2RlIGF1aS1jb21wb25lbnQgYXVpLWRlYm91bmNlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS12aWV3cG9ydCI6e3JlcXVpcmVzOlsiYXVpLW5vZGUiLCJhdWktY29tcG9uZW50Il19LCJhdWktd2lkZ2V0Ijp7dXNlOlsiYXVpLXdpZGdldC1jc3NjbGFzcyIsCiJhdWktd2lkZ2V0LXRvb2xiYXJzIl19LCJhdWktd2lkZ2V0LWNvcmUiOnt1c2U6WyJhdWktd2lkZ2V0LWNzc2NsYXNzIl19LCJhdWktd2lkZ2V0LWNzc2NsYXNzIjp7cmVxdWlyZXM6WyJ3aWRnZXQtYmFzZSJdfSwiYXVpLXdpZGdldC1wb3NpdGlvbi1hbGlnbi1zdWdnZXN0aW9uIjp7cmVxdWlyZXM6WyJ3aWRnZXQtcG9zaXRpb24tYWxpZ24iLCJ3aWRnZXQtc3RkbW9kIl19LCJhdWktd2lkZ2V0LXJlc3BvbnNpdmUiOntyZXF1aXJlczpbImV2ZW50LXJlc2l6ZSIsIndpZGdldC1iYXNlIl19LCJhdWktd2lkZ2V0LXNob3J0Y3V0Ijp7cmVxdWlyZXM6WyJiYXNlIl19LCJhdWktd2lkZ2V0LXN3aXBlIjp7cmVxdWlyZXM6WyJjbGFzc25hbWVtYW5hZ2VyIiwic2Nyb2xsdmlldy1iYXNlIiwic2Nyb2xsdmlldy1wYWdpbmF0b3IiLCJ0aW1lcnMiXX0sImF1aS13aWRnZXQtdG9nZ2xlIjp7fSwiYXVpLXdpZGdldC10b29sYmFycyI6e3JlcXVpcmVzOlsid2lkZ2V0LXN0ZG1vZCIsImF1aS10b29sYmFyIl19LAoiYXVpLXdpZGdldC10cmFuc2l0aW9uIjp7cmVxdWlyZXM6WyJ0cmFuc2l0aW9uIl19LCJhdWktd2lkZ2V0LXRyaWdnZXIiOntyZXF1aXJlczpbIm5vZGUiXX19KTtZVUkuRW52W2EudmVyc2lvbl0ubWQ1PSIwMjc4ZGM2OTM5ZjU0YWNhMmM4N2Q1MDBmMjQxMjQyMiI7YS5VQS5lZGdlPWZ1bmN0aW9uKCl7dmFyIHE9YS5VQS51c2VyQWdlbnQubWF0Y2goL0VkZ2VcLyguWzAtOS5dKykvKTtyZXR1cm4gcT9xWzFdOjB9KCk7YS5zdXBwb3J0c0RPTUV2ZW50PWZ1bmN0aW9uKHEsdCl7dD0ib24iK3Q7cmV0dXJuIHQgaW4gcXx8KHEuc2V0QXR0cmlidXRlfHwocT1hLmNvbmZpZy5kb2MuY3JlYXRlRWxlbWVudCgiZGl2IikpLCFxLnNldEF0dHJpYnV0ZSk/ITA6KHEuc2V0QXR0cmlidXRlKHQsIiIpLCJmdW5jdGlvbiI9PT10eXBlb2YgcVt0XSl9OyhmdW5jdGlvbigpe3ZhciBxPUFycmF5LnByb3RvdHlwZS5zbGljZTtZVUkucHJvdG90eXBlLnJlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLApmPXQubGVuZ3RoLTEsZD1xLmNhbGwoYXJndW1lbnRzLDAsZik7ZC51bnNoaWZ0KCJldmVudC1iYXNlIik7ZC5wdXNoKGZ1bmN0aW9uKGMpe3ZhciBiPWFyZ3VtZW50cztjLm9uKCJkb21yZWFkeSIsZnVuY3Rpb24oKXt0W2ZdLmFwcGx5KHRoaXMsYil9KX0pO3RoaXMudXNlLmFwcGx5KHRoaXMsZCl9fSkoKX0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiKTsKWVVJLmFkZCgiYXVpLWJhc2UtbGFuZyIsZnVuY3Rpb24oYSxFKXsoZnVuY3Rpb24oKXt2YXIgcT1hLkxhbmcsdD1hLkFycmF5LGY9YS5PYmplY3QsZD1xLmlzQXJyYXksYz1xLmlzTnVtYmVyLGI9cS5pc1N0cmluZyxnPXEuaXNVbmRlZmluZWQsZT1mLm93bnM7YS5mbj1mdW5jdGlvbihELEosUCl7dmFyIFYsWTtpZihjKEQpKXt2YXIgbmE9RDtEPUo7Sj1QO1k9YihEKSYmSjtWPWZ1bmN0aW9uKCl7dmFyIGlhPVk/SltEXTpEO0o9Snx8aWE7cmV0dXJuIDA8bmE/aWEuYXBwbHkoSix0KGFyZ3VtZW50cywwLCEwKS5zbGljZSgwLG5hKSk6aWEuY2FsbChKKX19ZWxzZXt2YXIgZmE9YXJndW1lbnRzOzI8ZmEubGVuZ3RoJiYoZmE9dChmYSwyLCEwKSk7WT1iKEQpJiZKO1Y9ZnVuY3Rpb24oKXtyZXR1cm4oWT9KW0RdOkQpLmFwcGx5KEp8fEQsZmEpfX1yZXR1cm4gVn07YS5taXgocSx7Y29uc3RyYWluOmZ1bmN0aW9uKEQsSixQKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoRCxKKSxQKX0sCmVtcHR5Rm46ZnVuY3Rpb24oKXt9LGVtcHR5Rm5GYWxzZTpmdW5jdGlvbigpe3JldHVybiExfSxlbXB0eUZuVHJ1ZTpmdW5jdGlvbigpe3JldHVybiEwfSxpc0d1aWQ6ZnVuY3Rpb24oRCl7cmV0dXJuIDA9PT1TdHJpbmcoRCkuaW5kZXhPZihhLkVudi5fZ3VpZHApfSxpc0ludGVnZXI6ZnVuY3Rpb24oRCl7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgRCYmaXNGaW5pdGUoRCkmJi05MDA3MTk5MjU0NzQwOTkyPEQmJjkwMDcxOTkyNTQ3NDA5OTI+RCYmTWF0aC5mbG9vcihEKT09PUR9LGlzTm9kZTpmdW5jdGlvbihEKXtyZXR1cm4gYS5pbnN0YW5jZU9mKEQsYS5Ob2RlKX0saXNOb2RlTGlzdDpmdW5jdGlvbihEKXtyZXR1cm4gYS5pbnN0YW5jZU9mKEQsYS5Ob2RlTGlzdCl9LHRvRmxvYXQ6ZnVuY3Rpb24oRCxKKXtyZXR1cm4gcGFyc2VGbG9hdChEKXx8Snx8MH0sdG9JbnQ6ZnVuY3Rpb24oRCxKLFApe3JldHVybiBwYXJzZUludChELEp8fDEwKXx8UHx8MH19KTthLm1peCh0LHtyZW1vdmU6ZnVuY3Rpb24oRCwKSixQKXtQPUQuc2xpY2UoKFB8fEopKzF8fEQubGVuZ3RoKTtELmxlbmd0aD0wPko/RC5sZW5ndGgrSjpKO3JldHVybiBELnB1c2guYXBwbHkoRCxQKX0scmVtb3ZlSXRlbTpmdW5jdGlvbihELEope3ZhciBQPXQuaW5kZXhPZihELEopO3JldHVybi0xPFA/dC5yZW1vdmUoRCxQKTpEfX0pO3ZhciBrPWEubmFtZXNwYWNlKCJMYW5nLlN0cmluZyIpLG09YS5jb25maWcuZG9jLHA9Ly0oW2Etel0pL2dpLHM9LyhbLiorP14kKCl7fXxbXF1cL1xcXSkvZyxsPS9ccj9cbi9nLGg9Lyg/OjxzY3JpcHQuKj8+KSgoXG58XHJ8LikqPykoPzo8XC9zY3JpcHQ+KS9naSx1PS88XC8/W14+XSs+L2dpLHc9LyhbYS16QS1aXVthLXpBLVpdKShbQS1aXSkoW2Etel0pL2csej0vKFthLXpdKShbQS1aXSkvZyxBPVtdLEg9eyJceDI2IjoiXHgyNmFtcDsiLCJceDNjIjoiXHgyNmx0OyIsIlx4M2UiOiJceDI2Z3Q7IiwnIic6Ilx4MjYjMDM0OyIsIiciOiJceDI2IzAzOTsiLCIvIjoiXHgyNiMwNDc7IiwiYCI6Ilx4MjYjMDk2OyJ9LApGLEI9e307Zm9yKEYgaW4gSClILmhhc093blByb3BlcnR5KEYpJiYoQltIW0ZdXT1GLEEucHVzaChGKSk7dmFyIEk9UmVnRXhwKCJbIitBLmpvaW4oIiIpKyJdIiwiZyIpLE09LyYoW147XSspOy9nO2EubWl4KGsse2NhbWVsaXplOmEuY2FjaGVkKGZ1bmN0aW9uKEQsSil7dmFyIFA9cDtEPVN0cmluZyhEKTtKJiYoUD1SZWdFeHAoSisiKFthLXpdKSIsImdpIikpO3JldHVybiBELnJlcGxhY2UoUCxrLl9jYW1lbGl6ZSl9KSxjYXBpdGFsaXplOmEuY2FjaGVkKGZ1bmN0aW9uKEQpe0QmJihEPVN0cmluZyhEKSxEPUQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrRC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKSk7cmV0dXJuIER9KSxjb250YWluczpmdW5jdGlvbihELEope3JldHVybi0xIT09RC5pbmRleE9mKEopfSxkZWZhdWx0VmFsdWU6ZnVuY3Rpb24oRCxKKXtpZihnKEQpfHwiIj09PUQpZyhKKSYmKEo9IiIpLEQ9SjtyZXR1cm4gRH0sZW5kc1dpdGg6ZnVuY3Rpb24oRCxKKXt2YXIgUD0KRC5sZW5ndGgtSi5sZW5ndGg7cmV0dXJuIDA8PVAmJkQuaW5kZXhPZihKLFApPT09UH0sZXNjYXBlSFRNTDpmdW5jdGlvbihEKXtyZXR1cm4gRC5yZXBsYWNlKEksay5fZXNjYXBlSFRNTCl9LGVzY2FwZVJlZ0V4OmZ1bmN0aW9uKEQpe3JldHVybiBELnJlcGxhY2UocywiXFwkMSIpfSxubDJicjpmdW5jdGlvbihEKXtyZXR1cm4gU3RyaW5nKEQpLnJlcGxhY2UobCwiXHgzY2JyIC9ceDNlIil9LHBhZE51bWJlcjpmdW5jdGlvbihELEosUCl7RD1QP051bWJlcihEKS50b0ZpeGVkKFApOlN0cmluZyhEKTtQPUQuaW5kZXhPZigiLiIpOy0xPT09UCYmKFA9RC5sZW5ndGgpO3JldHVybiBrLnJlcGVhdCgiMCIsTWF0aC5tYXgoMCxKLVApKStEfSxwbHVyYWxpemU6ZnVuY3Rpb24oRCxKLFApe3JldHVybiBEKyIgIisoMT09PUQ/SjpQfHxKKyJzIil9LHByZWZpeDpmdW5jdGlvbihELEope0o9U3RyaW5nKEopOzAhPT1KLmluZGV4T2YoRCkmJihKPUQrSik7cmV0dXJuIEp9LHJlbW92ZTpmdW5jdGlvbihELApKLFApe0o9UmVnRXhwKGsuZXNjYXBlUmVnRXgoSiksUD8iZyI6IiIpO3JldHVybiBELnJlcGxhY2UoSiwiIil9LHJlbW92ZUFsbDpmdW5jdGlvbihELEope3JldHVybiBrLnJlbW92ZShELEosITApfSxyZXBlYXQ6ZnVuY3Rpb24oRCxKKXtyZXR1cm4gQXJyYXkoSisxKS5qb2luKEQpfSxyb3VuZDpmdW5jdGlvbihELEope0Q9TnVtYmVyKEQpO2MoSikmJihKPU1hdGgucG93KDEwLEopLEQ9TWF0aC5yb3VuZChEKkopL0opO3JldHVybiBEfSxzdGFydHNXaXRoOmZ1bmN0aW9uKEQsSil7cmV0dXJuIDA9PT1ELmxhc3RJbmRleE9mKEosMCl9LHN0cmlwU2NyaXB0czpmdW5jdGlvbihEKXtEJiYoRD1TdHJpbmcoRCkucmVwbGFjZShoLCIiKSk7cmV0dXJuIER9LHN0cmlwVGFnczpmdW5jdGlvbihEKXtEJiYoRD1TdHJpbmcoRCkucmVwbGFjZSh1LCIiKSk7cmV0dXJuIER9LHN1YnN0cjpmdW5jdGlvbihELEosUCl7cmV0dXJuIFN0cmluZyhEKS5zdWJzdHIoSixQKX0sdW5jYW1lbGl6ZTphLmNhY2hlZChmdW5jdGlvbihELApKKXtKPUp8fCIgIjtEPVN0cmluZyhEKTtEPUQucmVwbGFjZSh3LCIkMSIrSisiJDIkMyIpO3JldHVybiBEPUQucmVwbGFjZSh6LCIkMSIrSisiJDIiKX0pLHRvTG93ZXJDYXNlOmZ1bmN0aW9uKEQpe3JldHVybiBTdHJpbmcoRCkudG9Mb3dlckNhc2UoKX0sdG9VcHBlckNhc2U6ZnVuY3Rpb24oRCl7cmV0dXJuIFN0cmluZyhEKS50b1VwcGVyQ2FzZSgpfSx0cmltOnEudHJpbSx0cnVuY2F0ZTpmdW5jdGlvbihELEosUCl7RD1TdHJpbmcoRCk7dmFyIFY9RC5sZW5ndGg7aWYoMzxKKXtpZihEJiZWPkopaWYoUD1QfHwiZW5kIiwiZW5kIj09PVApRD1ELnN1YnN0cigwLEotMykrIi4uLiI7ZWxzZSBpZigibWlkZGxlIj09PVApe3ZhciBZPVA9TWF0aC5mbG9vcigoSi0zKS8yKTswPT09SiUyJiYoUD1NYXRoLmNlaWwoKEotMykvMiksWT1NYXRoLmZsb29yKChKLTMpLzIpKTtEPUQuc3Vic3RyKDAsUCkrIi4uLiIrRC5zdWJzdHIoVi1ZKX1lbHNlInN0YXJ0Ij09PVAmJihEPSIuLi4iK0Quc3Vic3RyKFYtCkorMykpfWVsc2UgRD0iLi4uIjtyZXR1cm4gRH0sdW5kZWY6ZnVuY3Rpb24oRCl7ZyhEKSYmKEQ9IiIpO3JldHVybiBEfSx1bmVzY2FwZUVudGl0aWVzOmZ1bmN0aW9uKEQpe2suY29udGFpbnMoRCwiXHgyNiIpJiYoRD1tJiYhay5jb250YWlucyhELCJceDNjIik/ay5fdW5lc2NhcGVFbnRpdGllc1VzaW5nRG9tKEQpOmsudW5lc2NhcGVIVE1MKEQpKTtyZXR1cm4gRH0sdW5lc2NhcGVIVE1MOmZ1bmN0aW9uKEQpe3JldHVybiBELnJlcGxhY2UoTSxrLl91bmVzY2FwZUhUTUwpfSxfY2FtZWxpemU6ZnVuY3Rpb24oRCxKKXtyZXR1cm4gSi50b1VwcGVyQ2FzZSgpfSxfZXNjYXBlSFRNTDpmdW5jdGlvbihEKXtyZXR1cm4gSFtEXX0sX3VuZXNjYXBlSFRNTDpmdW5jdGlvbihELEope3ZhciBQPUJbRF18fEQ7aWYoIVAmJiIjIj09PUouY2hhckF0KDApKXt2YXIgVj1OdW1iZXIoIjAiK1Auc3Vic3RyKDEpKTtpc05hTihWKXx8KFA9U3RyaW5nLmZyb21DaGFyQ29kZShWKSl9cmV0dXJuIFB9LApfdW5lc2NhcGVFbnRpdGllc1VzaW5nRG9tOmZ1bmN0aW9uKEQpe3ZhciBKPW0uY3JlYXRlRWxlbWVudCgiYSIpO0ouaW5uZXJIVE1MPUQ7Si5ub3JtYWxpemUmJkoubm9ybWFsaXplKCk7RD1KLmZpcnN0Q2hpbGQubm9kZVZhbHVlO0ouaW5uZXJIVE1MPSIiO3JldHVybiBEfX0pO2YubWFwPWZ1bmN0aW9uKEQsSixQKXt2YXIgVj1bXSxZO2ZvcihZIGluIEQpZShELFkpJiYoVltWLmxlbmd0aF09Si5jYWxsKFAsRFtZXSxZLEQpKTtyZXR1cm4gVn07YS5tYXA9ZnVuY3Rpb24oRCl7dmFyIEo9ZjtkKEQpJiYoSj10KTtyZXR1cm4gSi5tYXAuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pKCl9LCIzLjAuMy1kZXByZWNhdGVkLjczIik7CllVSS5hZGQoImF1aS1jbGFzc25hbWVtYW5hZ2VyIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuQ2xhc3NOYW1lTWFuYWdlcix0PXEuZ2V0Q2xhc3NOYW1lO2EuZ2V0Q2xhc3NOYW1lPWEuY2FjaGVkKGZ1bmN0aW9uKCl7dmFyIGY9YS5BcnJheShhcmd1bWVudHMsMCwhMCk7ZltmLmxlbmd0aF09ITA7cmV0dXJuIHQuYXBwbHkocSxmKX0pfSwiMy4wLjMtZGVwcmVjYXRlZC43MyIse3JlcXVpcmVzOlsiY2xhc3NuYW1lbWFuYWdlciJdfSk7CllVSS5hZGQoImF1aS1jb21wb25lbnQiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5MYW5nLHQ9YS5BcnJheSxmPXt9LGQ9YS5jb25maWcud2luLk9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IsYz1hLkNsYXNzTmFtZU1hbmFnZXIuZ2V0Q2xhc3NOYW1lLGI9YS5XaWRnZXQuZ2V0Q2xhc3NOYW1lLGc9YS5nZXRDbGFzc05hbWUsZT1nKCJoaWRlIiksaz1hLkJhc2UuY3JlYXRlKCJjb21wb25lbnQiLGEuV2lkZ2V0LFthLldpZGdldENzc0NsYXNzLGEuV2lkZ2V0VG9nZ2xlXSx7aW5pdGlhbGl6ZXI6ZnVuY3Rpb24ocyl7dGhpcy5fb3JpZ2luYWxDb25maWc9czt0aGlzLl9zZXRSZW5kZXIocyk7Zlt0aGlzLmdldCgiaWQiKV09dGhpc30sY2xvbmU6ZnVuY3Rpb24ocyl7cz1zfHx7fTtzLmlkPXMuaWR8fGEuZ3VpZCgpO2EubWl4KHMsdGhpcy5fb3JpZ2luYWxDb25maWcpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihzKX0sX3VpU2V0VmlzaWJsZTpmdW5jdGlvbihzKXt2YXIgbD1rLnN1cGVyY2xhc3MuX3VpU2V0VmlzaWJsZTsKbCYmbC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bD10aGlzLmdldCgiaGlkZUNsYXNzIik7ITEhPT1sJiZ0aGlzLmdldCgiYm91bmRpbmdCb3giKS50b2dnbGVDbGFzcyhsfHxlLCFzKX0sX3JlbmRlckJveENsYXNzTmFtZXM6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldCgiYm91bmRpbmdCb3giKS5fbm9kZSxsPXRoaXMuZ2V0KCJjb250ZW50Qm94IikuX25vZGUsaD1zLmNsYXNzTmFtZSx1PWwuY2xhc3NOYW1lLGg9aD9oLnNwbGl0KCIgIik6W10sdT11P3Uuc3BsaXQoIiAiKTpbXSx3PXRoaXMuX2dldENsYXNzZXMoKSx6PXcubGVuZ3RoLEE9ei00LEg7aC5wdXNoKGIoKSk7Zm9yKHZhciBGPXotMzswPD1GO0YtLSl6PXdbRl0sSD1TdHJpbmcoei5OQU1FKS50b0xvd2VyQ2FzZSgpLGgucHVzaCh6LkNTU19QUkVGSVh8fGMoSCkpLEY8PUEmJnUucHVzaChnKEgsImNvbnRlbnQiKSk7dS5wdXNoKHRoaXMuZ2V0Q2xhc3NOYW1lKCJjb250ZW50IikpO3M9PT1sP3U9dC5kZWR1cGUodS5jb25jYXQoaCkpLmpvaW4oIiAiKToKKHMuY2xhc3NOYW1lPXQuZGVkdXBlKGgpLmpvaW4oIiAiKSx1PXQuZGVkdXBlKHUpLmpvaW4oIiAiKSk7bC5jbGFzc05hbWU9dX0sX3JlbmRlckludGVyYWN0aW9uOmZ1bmN0aW9uKHMsbCl7dGhpcy5yZW5kZXIobCk7Zm9yKHZhciBoPXRoaXMuX3JlbmRlckhhbmRsZXMsdT1oLmxlbmd0aC0xOzA8PXU7dS0tKWgucG9wKCkuZGV0YWNoKCl9LF9zZXRSZW5kZXI6ZnVuY3Rpb24ocyl7dmFyIGw9cyYmcy5yZW5kZXI7aWYobCYmbC5jb25zdHJ1Y3Rvcj09PWQpe3ZhciBoPWwuZXZlbnRUeXBlfHwibW91c2Vtb3ZlIix1PWwucGFyZW50Tm9kZSx3PWwuc2VsZWN0b3J8fHU7aWYodyl7bD10aGlzLl9yZW5kZXJIYW5kbGVzPVtdO3EuaXNBcnJheShoKXx8KGg9W2hdKTtmb3IodmFyIHU9YS5yYmluZCh0aGlzLl9yZW5kZXJJbnRlcmFjdGlvbix0aGlzLHUpLHc9YS5vbmUodyksej1oLmxlbmd0aC0xOzA8PXo7ei0tKWxbel09dy5vbmNlKGhbel0sdSk7ZGVsZXRlIHMucmVuZGVyfX19fSx7QVRUUlM6e3VzZUFSSUE6e3dyaXRlT25jZTohMCwKdmFsdWU6ITEsdmFsaWRhdG9yOnEuaXNCb29sZWFufSxoaWRlQ2xhc3M6e3ZhbHVlOmV9LHJlbmRlcjp7dmFsdWU6ITEsd3JpdGVPbmNlOiEwfX19KTtrLl9JTlNUQU5DRVM9ZjtrLmdldEJ5SWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGZbc119O3ZhciBtPWEuV2lkZ2V0LnByb3RvdHlwZS5fVUlfQVRUUlM7ay5fYXBwbHlDc3NQcmVmaXg9ZnVuY3Rpb24ocyl7IXN8fCFzLk5BTUV8fCJDU1NfUFJFRklYImluIHN8fChzLkNTU19QUkVGSVg9YS5nZXRDbGFzc05hbWUoU3RyaW5nKHMuTkFNRSkudG9Mb3dlckNhc2UoKSkpO3JldHVybiBzfTtrLmNyZWF0ZT1mdW5jdGlvbihzKXtzPXN8fHt9O3ZhciBsPXMuRVhURU5EU3x8YS5Db21wb25lbnQsaD1zLmNvbnN0cnVjdG9yO2EuT2JqZWN0Lm93bnMocywiY29uc3RydWN0b3IiKXx8KGg9ZnVuY3Rpb24oKXtoLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7dmFyIHU9cy5wcm90b3R5cGU7aWYodSYmKHMuVUlfQVRUUlN8fApzLkJJTkRfVUlfQVRUUlN8fHMuU1lOQ19VSV9BVFRSUykpe3ZhciB3PShzLkJJTkRfVUlfQVRUUlN8fFtdKS5jb25jYXQocy5VSV9BVFRSU3x8W10pLHo9KHMuU1lOQ19VSV9BVFRSU3x8W10pLmNvbmNhdChzLlVJX0FUVFJTfHxbXSksQT1sLnByb3RvdHlwZSxBPUEmJkEuX1VJX0FUVFJTfHxtLHc9KEEuQklORHx8W10pLmNvbmNhdCh3fHxbXSksej0oQS5TWU5DfHxbXSkuY29uY2F0KHp8fFtdKSxBPXUuX1VJX0FUVFJTO0F8fChBPXUuX1VJX0FUVFJTPXt9KTt3Lmxlbmd0aCYmKEEuQklORD13KTt6Lmxlbmd0aCYmKEEuU1lOQz16KX0odz1zLkFVR01FTlRTKSYmIXEuaXNBcnJheSh3KSYmKHc9W3ddKTthLm1peChoLHMpO2RlbGV0ZSBoLnByb3RvdHlwZTthLmV4dGVuZChoLGwsdSk7dyYmKGg9YS5CYXNlLmJ1aWxkKHMuTkFNRSxoLHcse2R5bmFtaWM6ITF9KSk7ay5fYXBwbHlDc3NQcmVmaXgoaCk7cmV0dXJuIGh9O2suQ1NTX1BSRUZJWD1nKCJjb21wb25lbnQiKTt2YXIgcD1hLkJhc2U7CmsuYnVpbGQ9ZnVuY3Rpb24oKXt2YXIgcz1wLmJ1aWxkLmFwcGx5KHAsYXJndW1lbnRzKTtrLl9hcHBseUNzc1ByZWZpeChzKTtyZXR1cm4gc307YS5Db21wb25lbnQ9a30sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiYXVpLXdpZGdldC1jc3NjbGFzcyIsImF1aS13aWRnZXQtdG9nZ2xlIiwiYmFzZS1idWlsZCIsIndpZGdldC1iYXNlIl19KTsKWVVJLmFkZCgiYXVpLWRlYm91bmNlIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZyx0PWEuQXJyYXksZj1xLmlzU3RyaW5nLGQ9cS5pc1VuZGVmaW5lZCxjPVtdO2EuZGVib3VuY2U9ZnVuY3Rpb24oYixnLGUsayl7dmFyIG0scCxzO2YoYikmJmUmJihiPWEuYmluZChiLGUpKTtnPWd8fDA7az1kKGFyZ3VtZW50cyk/Yzp0KGFyZ3VtZW50cywzLCEwKTt2YXIgbD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwobSk7bT1udWxsO3ZhciB1PWIuYXBwbHkoZSxwfHxrfHxjKTtwPW51bGw7cmV0dXJuIHV9LGg9ZnVuY3Rpb24oKXttJiYoY2xlYXJJbnRlcnZhbChtKSxtPW51bGwpfTtzPWZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVsYXkoZyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50czprLGV8fHRoaXMpfTtzLmNhbmNlbD1oO3MuZGVsYXk9ZnVuY3Rpb24odSx3LHosQSl7cy5jYW5jZWwoKTt1PWQodSk/Zzp1O2I9QXx8YjtlPXp8fGU7dyE9PWsmJihwPShkKHcpP2M6dCh3LDAsITEpKS5jb25jYXQoaykpOwppZigwPHUpbT1zZXRJbnRlcnZhbChsLHUpO2Vsc2UgcmV0dXJuIGwoKX07cy5zZXREZWxheT1mdW5jdGlvbih1KXtoKCl9O3JldHVybiBzfX0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiKTsKWVVJLmFkZCgiYXVpLWRlbGF5ZWQtdGFzay1kZXByZWNhdGVkIixmdW5jdGlvbihhLEUpe3ZhciBxPWZ1bmN0aW9uKHQsZixkKXt2YXIgYz10aGlzO2MuX2FyZ3M9ZDtjLl9kZWxheT0wO2MuX2ZuPXQ7Yy5faWQ9bnVsbDtjLl9zY29wZT1mfHxjO2MuX3RpbWU9MDtjLl9iYXNlPWZ1bmN0aW9uKCl7Yy5fZ2V0VGltZSgpLWMuX3RpbWU+PWMuX2RlbGF5JiYoY2xlYXJJbnRlcnZhbChjLl9pZCksYy5faWQ9bnVsbCxjLl9mbi5hcHBseShjLl9zY29wZSxjLl9hcmdzfHxbXSkpfX07cS5wcm90b3R5cGU9e2RlbGF5OmZ1bmN0aW9uKHQsZixkLGMpe3RoaXMuX2lkJiZ0aGlzLl9kZWxheSE9dCYmdGhpcy5jYW5jZWwoKTt0aGlzLl9kZWxheT10fHx0aGlzLl9kZWxheTt0aGlzLl90aW1lPXRoaXMuX2dldFRpbWUoKTt0aGlzLl9mbj1mfHx0aGlzLl9mbjt0aGlzLl9zY29wZT1kfHx0aGlzLl9zY29wZTt0aGlzLl9hcmdzPWN8fHRoaXMuX2FyZ3M7YS5MYW5nLmlzQXJyYXkodGhpcy5fYXJncyl8fAoodGhpcy5fYXJncz1bdGhpcy5fYXJnc10pO3RoaXMuX2lkfHwoMDx0aGlzLl9kZWxheT90aGlzLl9pZD1zZXRJbnRlcnZhbCh0aGlzLl9iYXNlLHRoaXMuX2RlbGF5KTp0aGlzLl9iYXNlKCkpfSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLl9pZCYmKGNsZWFySW50ZXJ2YWwodGhpcy5faWQpLHRoaXMuX2lkPW51bGwpfSxfZ2V0VGltZTpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19O2EuRGVsYXllZFRhc2s9cX0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbInl1aS1iYXNlIl19KTsKWVVJLmFkZCgiYXVpLWV2ZW50LWJhc2UiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5BcnJheSx0PXtCQUNLU1BBQ0U6OCxUQUI6OSxOVU1fQ0VOVEVSOjEyLEVOVEVSOjEzLFJFVFVSTjoxMyxTSElGVDoxNixDVFJMOjE3LEFMVDoxOCxQQVVTRToxOSxDQVBTX0xPQ0s6MjAsRVNDOjI3LFNQQUNFOjMyLFBBR0VfVVA6MzMsUEFHRV9ET1dOOjM0LEVORDozNSxIT01FOjM2LExFRlQ6MzcsVVA6MzgsUklHSFQ6MzksRE9XTjo0MCxQUklOVF9TQ1JFRU46NDQsSU5TRVJUOjQ1LERFTEVURTo0NixaRVJPOjQ4LE9ORTo0OSxUV086NTAsVEhSRUU6NTEsRk9VUjo1MixGSVZFOjUzLFNJWDo1NCxTRVZFTjo1NSxFSUdIVDo1NixOSU5FOjU3LEE6NjUsQjo2NixDOjY3LEQ6NjgsRTo2OSxGOjcwLEc6NzEsSDo3MixJOjczLEo6NzQsSzo3NSxMOjc2LE06NzcsTjo3OCxPOjc5LFA6ODAsUTo4MSxSOjgyLFM6ODMsVDo4NCxVOjg1LFY6ODYsVzo4NyxYOjg4LFk6ODksWjo5MCxDT05URVhUX01FTlU6OTMsCk5VTV9aRVJPOjk2LE5VTV9PTkU6OTcsTlVNX1RXTzo5OCxOVU1fVEhSRUU6OTksTlVNX0ZPVVI6MTAwLE5VTV9GSVZFOjEwMSxOVU1fU0lYOjEwMixOVU1fU0VWRU46MTAzLE5VTV9FSUdIVDoxMDQsTlVNX05JTkU6MTA1LE5VTV9NVUxUSVBMWToxMDYsTlVNX1BMVVM6MTA3LE5VTV9NSU5VUzoxMDksTlVNX1BFUklPRDoxMTAsTlVNX0RJVklTSU9OOjExMSxGMToxMTIsRjI6MTEzLEYzOjExNCxGNDoxMTUsRjU6MTE2LEY2OjExNyxGNzoxMTgsRjg6MTE5LEY5OjEyMCxGMTA6MTIxLEYxMToxMjIsRjEyOjEyMyxOVU1fTE9DSzoxNDQsV0lOX0tFWToyMjQsV0lOX0lNRToyMjksTk9OX01PRElGWUlOR19LRVlTOiJBTFQgQ0FQU19MT0NLIENUUkwgRE9XTiBFTkQgRVNDIEYxIEYxMCBGMTEgRjEyIEYyIEYzIEY0IEY1IEY2IEY3IEY4IEY5IEhPTUUgTEVGVCBOVU1fTE9DSyBQQUdFX0RPV04gUEFHRV9VUCBQQVVTRSBQUklOVF9TQ1JFRU4gUklHSFQgU0hJRlQgU1BBQ0UgVVAgV0lOX0tFWSIuc3BsaXQoIiAiKSwKaGFzTW9kaWZpZXI6ZnVuY3Rpb24oZil7cmV0dXJuIGYmJihmLmN0cmxLZXl8fGYuYWx0S2V5fHxmLnNoaWZ0S2V5fHxmLm1ldGFLZXkpfSxpc0tleTpmdW5jdGlvbihmLGQpe3JldHVybiBkJiYodGhpc1tkXXx8dGhpc1tkLnRvVXBwZXJDYXNlKCldKT09PWZ9LGlzS2V5SW5SYW5nZTpmdW5jdGlvbihmLGQsYyl7dmFyIGI9ITE7ZCYmYyYmKGQ9dGhpc1tkXXx8dGhpc1tkLnRvVXBwZXJDYXNlKCldLGM9dGhpc1tjXXx8dGhpc1tjLnRvVXBwZXJDYXNlKCldLGI9ZCYmYyYmZj49ZCYmZjw9Yyk7cmV0dXJuIGJ9LGlzS2V5SW5TZXQ6ZnVuY3Rpb24oZil7dmFyIGQ9cShhcmd1bWVudHMsMSwhMCk7cmV0dXJuIHRoaXMuX2lzS2V5SW5TZXQoZixkKX0saXNOYXZLZXk6ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuaXNLZXlJblJhbmdlKGYsIlBBR0VfVVAiLCJET1dOIil8fHRoaXMuaXNLZXlJblNldChmLCJFTlRFUiIsIlRBQiIsIkVTQyIpfSxpc1NwZWNpYWxLZXk6ZnVuY3Rpb24oZixkKXtyZXR1cm4ia2V5cHJlc3MiPT09CmQmJnRoaXMuY3RybEtleXx8dGhpcy5pc05hdktleShmKXx8dGhpcy5pc0tleUluUmFuZ2UoZiwiU0hJRlQiLCJDQVBTX0xPQ0siKXx8dGhpcy5pc0tleUluU2V0KGYsIkJBQ0tTUEFDRSIsIlBSSU5UX1NDUkVFTiIsIklOU0VSVCIsIldJTl9JTUUiKX0saXNNb2RpZnlpbmdLZXk6ZnVuY3Rpb24oZil7cmV0dXJuIXRoaXMuX2lzS2V5SW5TZXQoZix0aGlzLk5PTl9NT0RJRllJTkdfS0VZUyl9LF9pc0tleUluU2V0OmZ1bmN0aW9uKGYsZCl7Zm9yKHZhciBjPWQubGVuZ3RoLGI9ITEsZztjLS07KWlmKGc9KGc9ZFtjXSkmJih0aGlzW2ddfHx0aGlzW1N0cmluZyhnKS50b1VwcGVyQ2FzZSgpXSksZj09PWcpe2I9ITA7YnJlYWt9cmV0dXJuIGJ9fTthLm1peChhLkRPTUV2ZW50RmFjYWRlLnByb3RvdHlwZSx7aGFzTW9kaWZpZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdC5oYXNNb2RpZmllcih0aGlzKX0saXNLZXk6ZnVuY3Rpb24oZil7cmV0dXJuIHQuaXNLZXkodGhpcy5rZXlDb2RlLGYpfSxpc0tleUluUmFuZ2U6ZnVuY3Rpb24oZiwKZCl7cmV0dXJuIHQuaXNLZXlJblJhbmdlKHRoaXMua2V5Q29kZSxmLGQpfSxpc0tleUluU2V0OmZ1bmN0aW9uKCl7dmFyIGY9cShhcmd1bWVudHMsMCwhMCk7cmV0dXJuIHQuX2lzS2V5SW5TZXQodGhpcy5rZXlDb2RlLGYpfSxpc01vZGlmeWluZ0tleTpmdW5jdGlvbigpe3JldHVybiB0LmlzTW9kaWZ5aW5nS2V5KHRoaXMua2V5Q29kZSl9LGlzTmF2S2V5OmZ1bmN0aW9uKCl7cmV0dXJuIHQuaXNOYXZLZXkodGhpcy5rZXlDb2RlKX0saXNTcGVjaWFsS2V5OmZ1bmN0aW9uKCl7cmV0dXJuIHQuaXNTcGVjaWFsS2V5KHRoaXMua2V5Q29kZSx0aGlzLnR5cGUpfX0pO2EuRXZlbnQuS2V5TWFwPXQ7YS5FdmVudC5zdXBwb3J0c0RPTUV2ZW50PWEuc3VwcG9ydHNET01FdmVudH0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbImV2ZW50LWJhc2UiXX0pOwpZVUkuYWRkKCJhdWktZXZlbnQtaW5wdXQiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5Ob2RlLkRPTV9FVkVOVFM7aWYoYS5GZWF0dXJlcy50ZXN0KCJldmVudCIsImlucHV0IikpcS5pbnB1dD0xO2Vsc2V7cS5jdXQ9MTtxLmRyYWdlbmQ9MTtxLnBhc3RlPTE7dmFyIHQ9YS5FdmVudC5LZXlNYXAsZj1bImtleWRvd24iLCJwYXN0ZSIsImRyb3AiLCJjdXQiXSxkPXtjdXQ6MSxkcm9wOjEscGFzdGU6MX07YS5FdmVudC5kZWZpbmUoImlucHV0Iix7b246ZnVuY3Rpb24oYyxiLGcpe2IuX2hhbmRsZXI9Yy5vbihmLGEuYmluZCh0aGlzLl9kaXNwYXRjaEV2ZW50LHRoaXMsYixnKSl9LGRlbGVnYXRlOmZ1bmN0aW9uKGMsYixnLGUpe3ZhciBrPXRoaXM7Yi5faGFuZGxlcz1bXTtiLl9oYW5kbGVyPWMuZGVsZWdhdGUoImZvY3VzIixmdW5jdGlvbihtKXttPW0udGFyZ2V0O3ZhciBwPW0uZ2V0RGF0YSgifn5hdWl8aW5wdXR8ZXZlbnR+fiIpO3B8fChwPW0ub24oZixhLmJpbmQoay5fZGlzcGF0Y2hFdmVudCwKayxiLGcpKSxiLl9oYW5kbGVzLnB1c2gocCksbS5zZXREYXRhKCJ+fmF1aXxpbnB1dHxldmVudH5+IixwKSl9LGUpfSxkZXRhY2g6ZnVuY3Rpb24oYyxiKXtiLl9oYW5kbGVyLmRldGFjaCgpfSxkZXRhY2hEZWxlZ2F0ZTpmdW5jdGlvbihjLGIpe2EuQXJyYXkuZWFjaChiLl9oYW5kbGVzLGZ1bmN0aW9uKGcpe3ZhciBlPWEub25lKGcuZXZ0LmVsKTtlJiZlLnNldERhdGEoIn5+YXVpfGlucHV0fGV2ZW50fn4iLG51bGwpO2cuZGV0YWNoKCl9KTtiLl9oYW5kbGVyLmRldGFjaCgpfSxfZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihjLGIsZyl7dmFyIGU7ZT1nLnRhcmdldDsoZFtnLnR5cGVdfHxlLmdldCgib3duZXJEb2N1bWVudCIpLmdldCgiYWN0aXZlRWxlbWVudCIpPT09ZSkmJnQuaXNNb2RpZnlpbmdLZXkoZy5rZXlDb2RlKSYmKGMuX3RpbWVyJiYoYy5fdGltZXIuY2FuY2VsKCksYy5fdGltZXI9bnVsbCksZT10LmlzS2V5KGcua2V5Q29kZSwiV0lOX0lNRSIpP251bGw6ZS5nZXQoInZhbHVlIiksCmMuX3RpbWVyPWEuc29vbihhLmJpbmQoIl9maXJlRXZlbnQiLHRoaXMsYyxiLGcsZSkpKX0sX2ZpcmVFdmVudDpmdW5jdGlvbihjLGIsZyxlKXt2YXIgaz1nLnRhcmdldDtjLl90aW1lcj1udWxsO2suZ2V0KCJ2YWx1ZSIpIT09ZSYmYi5maXJlKGcpfX0pfX0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbImF1aS1ldmVudC1iYXNlIiwiZXZlbnQtZGVsZWdhdGUiLCJldmVudC1zeW50aGV0aWMiLCJ0aW1lcnMiXX0pOwpZVUkuYWRkKCJhdWktZm9ybS12YWxpZGF0b3IiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5MYW5nLHQ9YS5PYmplY3QsZj1xLmlzQm9vbGVhbixkPXEuaXNEYXRlLGM9dC5pc0VtcHR5LGI9cS5pc0Z1bmN0aW9uLGc9cS5pc05vZGUsZT1xLmlzT2JqZWN0LGs9cS5pc1N0cmluZyxtPXEudHJpbSxwPWEubmFtZXNwYWNlKCJjb25maWcuRm9ybVZhbGlkYXRvciIpLHM9YS5ET00uX2dldFJlZ0V4cCxsPWEuZ2V0Q2xhc3NOYW1lLGg9bCgiZm9ybSIsImdyb3VwIiksdT1sKCJoYXMiLCJlcnJvciIpLHc9bCgiZXJyb3IiLCJmaWVsZCIpLHo9bCgiaGFzIiwic3VjY2VzcyIpLEE9bCgic3VjY2VzcyIsImZpZWxkIiksSD1sKCJoZWxwIiwiYmxvY2siKSxsPSdceDNjZGl2IGNsYXNzXHgzZCInK1tsKCJmb3JtLXZhbGlkYXRvciIsInN0YWNrIiksSF0uam9pbigiICIpKyciXHgzZVx4M2MvZGl2XHgzZSc7YS5taXgocCx7U1RSSU5HUzp7REVGQVVMVDoiUGxlYXNlIGZpeCB7ZmllbGR9LiIsYWNjZXB0RmlsZXM6IlBsZWFzZSBlbnRlciBhIHZhbHVlIHdpdGggYSB2YWxpZCBleHRlbnNpb24gKHswfSkgaW4ge2ZpZWxkfS4iLAphbHBoYToiUGxlYXNlIGVudGVyIG9ubHkgYWxwaGEgY2hhcmFjdGVycyBpbiB7ZmllbGR9LiIsYWxwaGFudW06IlBsZWFzZSBlbnRlciBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGluIHtmaWVsZH0uIixkYXRlOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlIGluIHtmaWVsZH0uIixkaWdpdHM6IlBsZWFzZSBlbnRlciBvbmx5IGRpZ2l0cyBpbiB7ZmllbGR9LiIsZW1haWw6IlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MgaW4ge2ZpZWxkfS4iLGVxdWFsVG86IlBsZWFzZSBlbnRlciB0aGUgc2FtZSB2YWx1ZSBhZ2FpbiBpbiB7ZmllbGR9LiIsaXJpOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBJUkkgaW4ge2ZpZWxkfS4iLG1heDoiUGxlYXNlIGVudGVyIGEgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHswfSBpbiB7ZmllbGR9LiIsbWF4TGVuZ3RoOiJQbGVhc2UgZW50ZXIgbm8gbW9yZSB0aGFuIHswfSBjaGFyYWN0ZXJzIGluIHtmaWVsZH0uIixtaW46IlBsZWFzZSBlbnRlciBhIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB7MH0gaW4ge2ZpZWxkfS4iLAptaW5MZW5ndGg6IlBsZWFzZSBlbnRlciBhdCBsZWFzdCB7MH0gY2hhcmFjdGVycyBpbiB7ZmllbGR9LiIsbnVtYmVyOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBudW1iZXIgaW4ge2ZpZWxkfS4iLHJhbmdlOiJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBiZXR3ZWVuIHswfSBhbmQgezF9IGluIHtmaWVsZH0uIixyYW5nZUxlbmd0aDoiUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiB7MH0gYW5kIHsxfSBjaGFyYWN0ZXJzIGxvbmcgaW4ge2ZpZWxkfS4iLHJlcXVpcmVkOiJ7ZmllbGR9IGlzIHJlcXVpcmVkLiIsdXJsOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBVUkwgaW4ge2ZpZWxkfS4ifSxSRUdFWDp7YWxwaGE6L15bYS16X10rJC9pLGFscGhhbnVtOi9eXHcrJC8sZGlnaXRzOi9eXGQrJC8sZW1haWw6UmVnRXhwKCJeKCgoW2Etel18XFxkfFshI1xcJCVceDI2J1xcKlxcK1xcLVxcL1x4M2RcXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKyhcXC4oW2Etel18XFxkfFshI1xcJCVceDI2J1xcKlxcK1xcLVxcL1x4M2RcXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKykqKXwoKFxceDIyKSgoKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KChbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3Zl18XFx4MjF8W1xceDIzLVxceDViXXxbXFx4NWQtXFx4N2VdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoXFxcXChbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpKSooKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KFxceDIyKSkpQCgoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLj8kIiwKImkiKSxpcmk6UmVnRXhwKCJeKFthLXpdKFthLXpdfFxcZHxcXCt8LXxcXC4pKik6KFxcL1xcLygoKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJFx4MjYnXFwoXFwpXFwqXFwrLDtceDNkXXw6KSpAKT8oKFxcWyh8KHZbXFxkYS1mXXsxLH1cXC4oKFthLXpdfFxcZHwtfFxcLnxffH4pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDopKykpXFxdKXwoKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKSl8KChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJFx4MjYnXFwoXFwpXFwqXFwrLDtceDNkXSkqKSg6XFxkKik/KShcXC8oKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCkqKSp8KFxcLygoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCkrKFxcLygoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCRceDI2J1xcKFxcKVxcKlxcKyw7XHgzZF18OnxAKSopKik/KXwoKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJFx4MjYnXFwoXFwpXFwqXFwrLDtceDNkXXw6fEApKyhcXC8oKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCkqKSopfCgoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCkpezB9KShcXD8oKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJFx4MjYnXFwoXFwpXFwqXFwrLDtceDNkXXw6fEApfFtcXHVFMDAwLVxcdUY4RkZdfFxcL3xcXD8pKik/KFxcIygoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCl8XFwvfFxcPykqKT8kIiwKImkiKSxudW1iZXI6L15bK1wtXT8oXGQrKFsuLF1cZCspPykrKFtlRV1bKy1dP1xkKyk/JC8sdXJsOlJlZ0V4cCgiXihodHRwcz98ZnRwKTpcXC9cXC8oKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCRceDI2J1xcKFxcKVxcKlxcKyw7XHgzZF18OikqQCk/KCgoXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pKXwoKChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuKSooKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4/KSg6XFxkKik/KShcXC8oKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJFx4MjYnXFwoXFwpXFwqXFwrLDtceDNkXXw6fEApKyhcXC8oKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCkqKSopPyk/KFxcPygoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCl8W1xcdUUwMDAtXFx1RjhGRl18XFwvfFxcPykqKT8oXFwjKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCRceDI2J1xcKFxcKVxcKlxcKyw7XHgzZF18OnxAKXxcXC98XFw/KSopPyQiLAoiaSIpfSxSVUxFUzp7YWNjZXB0RmlsZXM6ZnVuY3Rpb24oRixCLEkpe0I9bnVsbDtrKEkpJiYoST1JLnJlcGxhY2UoL1wuL2csIiIpLnNwbGl0KC8sXHMqfFxiXHMqLyksST1hLkFycmF5Lm1hcChJLGEuRXNjYXBlLnJlZ2V4KSxCPXMoIlsuXSgiK0kuam9pbigifCIpKyIpJCIsImkiKSk7cmV0dXJuIEImJkIudGVzdChGKX0sZGF0ZTpmdW5jdGlvbihGKXtGPW5ldyBEYXRlKEYpO3JldHVybiBkKEYpJiYiSW52YWxpZCBEYXRlIiE9PUYmJiFpc05hTihGKX0sZXF1YWxUbzpmdW5jdGlvbihGLEIsSSl7cmV0dXJuKEI9YS5vbmUoSSkpJiZtKEIudmFsKCkpPT09Rn0saGFzVmFsdWU6ZnVuY3Rpb24oRixCKXtpZihhLkZvcm1WYWxpZGF0b3IuaXNDaGVja2FibGUoQikpe3ZhciBJPUIuZ2V0KCJuYW1lIik7cmV0dXJuIDA8YS5hbGwodGhpcy5nZXRGaWVsZHNCeU5hbWUoSSkpLmZpbHRlcigiOmNoZWNrZWQiKS5zaXplKCl9cmV0dXJuISFGfSxtYXg6ZnVuY3Rpb24oRixCLEkpe3JldHVybiBxLnRvRmxvYXQoRik8PQpJfSxtYXhMZW5ndGg6ZnVuY3Rpb24oRixCLEkpe3JldHVybiBGLmxlbmd0aDw9SX0sbWluOmZ1bmN0aW9uKEYsQixJKXtyZXR1cm4gcS50b0Zsb2F0KEYpPj1JfSxtaW5MZW5ndGg6ZnVuY3Rpb24oRixCLEkpe3JldHVybiBGLmxlbmd0aD49SX0scmFuZ2U6ZnVuY3Rpb24oRixCLEkpe0Y9cS50b0Zsb2F0KEYpO3JldHVybiBGPj1JWzBdJiZGPD1JWzFdfSxyYW5nZUxlbmd0aDpmdW5jdGlvbihGLEIsSSl7Rj1GLmxlbmd0aDtyZXR1cm4gRj49SVswXSYmRjw9SVsxXX0scmVxdWlyZWQ6ZnVuY3Rpb24oRixCLEkpe3JldHVybiEwPT09ST9wLlJVTEVTLmhhc1ZhbHVlLmFwcGx5KHRoaXMsW0YsQl0pOiEwfX19KTtmPWEuQ29tcG9uZW50LmNyZWF0ZSh7TkFNRToiZm9ybS12YWxpZGF0b3IiLEFUVFJTOntib3VuZGluZ0JveDp7c2V0dGVyOmEub25lfSxjb250YWluZXJFcnJvckNsYXNzOnt2YWx1ZTp1LHZhbGlkYXRvcjprfSxjb250YWluZXJWYWxpZENsYXNzOnt2YWx1ZTp6LHZhbGlkYXRvcjprfSwKZXJyb3JDbGFzczp7dmFsdWU6dyx2YWxpZGF0b3I6a30sZXh0cmFjdFJ1bGVzOnt2YWx1ZTohMCx2YWxpZGF0b3I6Zn0sZmllbGRDb250YWluZXI6e3ZhbHVlOiIuIitofSxmaWVsZFN0cmluZ3M6e3ZhbHVlOnt9LHZhbGlkYXRvcjplfSxsYWJlbENzc0NsYXNzOnt2YWxpZGF0b3I6ayx2YWx1ZToiY29udHJvbC1sYWJlbCJ9LG1lc3NhZ2VDb250YWluZXI6e2dldHRlcjpmdW5jdGlvbihGKXtyZXR1cm4gYS5Ob2RlLmNyZWF0ZShGKS5jbG9uZSgpfSx2YWx1ZTonXHgzY2RpdiByb2xlXHgzZCJhbGVydCJceDNlXHgzYy9kaXZceDNlJ30sc3RyaW5nczp7dmFsdWVGbjpmdW5jdGlvbigpe3JldHVybiBwLlNUUklOR1N9fSxydWxlczp7Z2V0dGVyOmZ1bmN0aW9uKEYpe3RoaXMuX3J1bGVzQWxyZWFkeUV4dHJhY3RlZHx8dGhpcy5fZXh0cmFjdFJ1bGVzRnJvbU1hcmt1cChGKTtyZXR1cm4gRn0sdmFsaWRhdG9yOmUsdmFsdWU6e319LHNlbGVjdFRleHQ6e3ZhbHVlOiEwLHZhbGlkYXRvcjpmfSwKc2hvd01lc3NhZ2VzOnt2YWx1ZTohMCx2YWxpZGF0b3I6Zn0sc2hvd0FsbE1lc3NhZ2VzOnt2YWx1ZTohMSx2YWxpZGF0b3I6Zn0sc3RhY2tFcnJvckNvbnRhaW5lcjp7Z2V0dGVyOmZ1bmN0aW9uKEYpe3JldHVybiBhLk5vZGUuY3JlYXRlKEYpLmNsb25lKCl9LHZhbHVlOmx9LHZhbGlkYXRlT25CbHVyOnt2YWx1ZTohMCx2YWxpZGF0b3I6Zn0sdmFsaWRhdGVPbklucHV0Ont2YWx1ZTohMSx2YWxpZGF0b3I6Zn0sdmFsaWRDbGFzczp7dmFsdWU6QSx2YWxpZGF0b3I6a319LF9zZXRDdXN0b21SdWxlczpmdW5jdGlvbihGKXthLmVhY2goRixmdW5jdGlvbihCLEkpe2EuY29uZmlnLkZvcm1WYWxpZGF0b3IuUlVMRVNbSV09Qi5jb25kaXRpb247YS5jb25maWcuRm9ybVZhbGlkYXRvci5TVFJJTkdTW0ldPUIuZXJyb3JNZXNzYWdlfSl9LGFkZEN1c3RvbVJ1bGVzOmZ1bmN0aW9uKEYpe2UoRikmJnRoaXMuX3NldEN1c3RvbVJ1bGVzKEYpfSxpc0NoZWNrYWJsZTpmdW5jdGlvbihGKXtGPUYuZ2V0KCJ0eXBlIikudG9Mb3dlckNhc2UoKTsKcmV0dXJuImNoZWNrYm94Ij09PUZ8fCJyYWRpbyI9PT1GfSxFWFRFTkRTOmEuQmFzZSxwcm90b3R5cGU6e2luaXRpYWxpemVyOmZ1bmN0aW9uKCl7dGhpcy5lcnJvcnM9e307dGhpcy5faW5wdXRIYW5kbGVycz10aGlzLl9maWxlSW5wdXRIYW5kbGVycz10aGlzLl9maWxlQmx1ckhhbmRsZXJzPXRoaXMuX2JsdXJIYW5kbGVycz1udWxsO3RoaXMuX3J1bGVzQWxyZWFkeUV4dHJhY3RlZD0hMTt0aGlzLl9zdGFja0Vycm9yQ29udGFpbmVycz17fTt0aGlzLmJpbmRVSSgpO3RoaXMuX3VpU2V0VmFsaWRhdGVPbkJsdXIodGhpcy5nZXQoInZhbGlkYXRlT25CbHVyIikpO3RoaXMuX3VpU2V0VmFsaWRhdGVPbklucHV0KHRoaXMuZ2V0KCJ2YWxpZGF0ZU9uSW5wdXQiKSl9LGJpbmRVSTpmdW5jdGlvbigpe3ZhciBGPXRoaXMsQj1GLmdldCgiYm91bmRpbmdCb3giKSxJPUIuZGVsZWdhdGUoImZvY3VzIixmdW5jdGlvbigpe0YuX3NldEFSSUFSb2xlcygpO0kuZGV0YWNoKCl9LCJpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uIik7CkYucHVibGlzaCh7ZXJyb3JGaWVsZDp7ZGVmYXVsdEZuOkYuX2RlZkVycm9yRmllbGRGbn0sdmFsaWRGaWVsZDp7ZGVmYXVsdEZuOkYuX2RlZlZhbGlkRmllbGRGbn0sdmFsaWRhdGVGaWVsZDp7ZGVmYXVsdEZuOkYuX2RlZlZhbGlkYXRlRmllbGRGbn19KTtCLm9uKHtyZXNldDphLmJpbmQoRi5fb25Gb3JtUmVzZXQsRiksc3VibWl0OmEuYmluZChGLl9vbkZvcm1TdWJtaXQsRil9KTtGLmFmdGVyKHtleHRyYWN0UnVsZXNDaGFuZ2U6Ri5fYWZ0ZXJFeHRyYWN0UnVsZXNDaGFuZ2UsdmFsaWRhdGVPbkJsdXJDaGFuZ2U6Ri5fYWZ0ZXJWYWxpZGF0ZU9uQmx1ckNoYW5nZSx2YWxpZGF0ZU9uSW5wdXRDaGFuZ2U6Ri5fYWZ0ZXJWYWxpZGF0ZU9uSW5wdXRDaGFuZ2V9KX0sYWRkRmllbGRFcnJvcjpmdW5jdGlvbihGLEIpe3ZhciBJPXRoaXMuZXJyb3JzLE09Ri5nZXQoIm5hbWUiKTtJW01dfHwoSVtNXT1bXSk7SVtNXS5wdXNoKEIpfSxjbGVhckZpZWxkRXJyb3I6ZnVuY3Rpb24oRil7Rj1nKEYpPwpGLmdldCgibmFtZSIpOkY7ayhGKSYmZGVsZXRlIHRoaXMuZXJyb3JzW0ZdfSxlYWNoUnVsZTpmdW5jdGlvbihGKXt2YXIgQj10aGlzO2EuZWFjaChCLmdldCgicnVsZXMiKSxmdW5jdGlvbihJLE0pe2IoRikmJkYuYXBwbHkoQixbSSxNXSl9KX0sZmluZEZpZWxkQ29udGFpbmVyOmZ1bmN0aW9uKEYpe3ZhciBCPXRoaXMuZ2V0KCJmaWVsZENvbnRhaW5lciIpO2lmKEIpcmV0dXJuIEYuYW5jZXN0b3IoQil9LGZvY3VzSW52YWxpZEZpZWxkOmZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5nZXQoImJvdW5kaW5nQm94Iikub25lKCIuIit3KTtGJiYodGhpcy5nZXQoInNlbGVjdFRleHQiKSYmRi5zZWxlY3RUZXh0KCksRi5mb2N1cygpLEYuc2Nyb2xsSW50b1ZpZXcoKSl9LGdldEZpZWxkOmZ1bmN0aW9uKEYpe2soRikmJihGPXRoaXMuZ2V0RmllbGRzQnlOYW1lKEYpKSYmRi5sZW5ndGgmJiFGLm5hbWUmJihGPUZbMF0pO3JldHVybiBhLm9uZShGKX0sZ2V0RmllbGRzQnlOYW1lOmZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmdldCgiYm91bmRpbmdCb3giKS5nZXRET00oKS5lbGVtZW50c1tGXX0sCmdldEZpZWxkRXJyb3I6ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuZXJyb3JzW0YuZ2V0KCJuYW1lIildfSxnZXRGaWVsZFN0YWNrRXJyb3JDb250YWluZXI6ZnVuY3Rpb24oRil7Rj1nKEYpP0YuZ2V0KCJuYW1lIik6Rjt2YXIgQj10aGlzLl9zdGFja0Vycm9yQ29udGFpbmVycztCW0ZdfHwoQltGXT10aGlzLmdldCgic3RhY2tFcnJvckNvbnRhaW5lciIpKTtyZXR1cm4gQltGXX0sZ2V0RmllbGRFcnJvck1lc3NhZ2U6ZnVuY3Rpb24oRixCKXt2YXIgST1GLmdldCgibmFtZSIpLE09dGhpcy5nZXQoImZpZWxkU3RyaW5ncyIpW0ldfHx7fSxEPXRoaXMuZ2V0KCJydWxlcyIpW0ldLEo9dGhpcy5fZmluZEZpZWxkTGFiZWwoRiksST10aGlzLmdldCgic3RyaW5ncyIpLFA9e307SiYmKFAuZmllbGQ9Sik7QiBpbiBEJiYoRD1hLkFycmF5KERbQl0pLGEuZWFjaChELGZ1bmN0aW9uKFYsWSl7UFtZXT0iIitWfSkpO3JldHVybiBxLnN1YihNW0JdfHxJW0JdfHxJLkRFRkFVTFQsUCl9LGhhc0Vycm9yczpmdW5jdGlvbigpe3JldHVybiFjKHRoaXMuZXJyb3JzKX0sCmhpZ2hsaWdodDpmdW5jdGlvbihGLEIpe3ZhciBJPXRoaXMsTSxEO0YmJihNPUkuZmluZEZpZWxkQ29udGFpbmVyKEYpLEQ9Ri5nZXQoIm5hbWUiKSx0aGlzLnZhbGlkYXRhYmxlKEYpPyhEPWEuYWxsKEkuZ2V0RmllbGRzQnlOYW1lKEQpKSxELmVhY2goZnVuY3Rpb24oSil7SS5faGlnaGxpZ2h0SGVscGVyKEosSS5nZXQoImVycm9yQ2xhc3MiKSxJLmdldCgidmFsaWRDbGFzcyIpLEIpfSksTSYmSS5faGlnaGxpZ2h0SGVscGVyKE0sSS5nZXQoImNvbnRhaW5lckVycm9yQ2xhc3MiKSxJLmdldCgiY29udGFpbmVyVmFsaWRDbGFzcyIpLEIpKTpGLnZhbCgpfHxJLnJlc2V0RmllbGQoRCkpfSxub3JtYWxpemVSdWxlVmFsdWU6ZnVuY3Rpb24oRixCKXtyZXR1cm4gYihGKT9GLmFwcGx5KHRoaXMsW0JdKTpGfSx1bmhpZ2hsaWdodDpmdW5jdGlvbihGKXt0aGlzLmhpZ2hsaWdodChGLCEwKX0scHJpbnRTdGFja0Vycm9yOmZ1bmN0aW9uKEYsQixJKXt2YXIgTT10aGlzO00uZ2V0KCJzaG93QWxsTWVzc2FnZXMiKXx8CihJPS0xIT09YS5BcnJheS5pbmRleE9mKEksInJlcXVpcmVkIik/WyJyZXF1aXJlZCJdOkkuc2xpY2UoMCwxKSk7Qi5lbXB0eSgpO2EuQXJyYXkuZWFjaChJLGZ1bmN0aW9uKEQpe3ZhciBKPU0uZ2V0RmllbGRFcnJvck1lc3NhZ2UoRixEKTtEPU0uZ2V0KCJtZXNzYWdlQ29udGFpbmVyIikuYWRkQ2xhc3MoRCk7Qi5hcHBlbmQoRC5odG1sKEopKX0pfSxyZXNldEFsbEZpZWxkczpmdW5jdGlvbigpe3ZhciBGPXRoaXM7Ri5lYWNoUnVsZShmdW5jdGlvbihCLEkpe0YucmVzZXRGaWVsZChJKX0pfSxyZXNldEZpZWxkOmZ1bmN0aW9uKEYpe3ZhciBCPXRoaXM7Rj1nKEYpP0YuZ2V0KCJuYW1lIik6RjtCLmNsZWFyRmllbGRFcnJvcihGKTtCLmdldEZpZWxkU3RhY2tFcnJvckNvbnRhaW5lcihGKS5yZW1vdmUoKTthLmFsbChCLmdldEZpZWxkc0J5TmFtZShGKSkuZWFjaChmdW5jdGlvbihJKXtCLnJlc2V0RmllbGRDc3MoSSk7SS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpfSl9LApyZXNldEZpZWxkQ3NzOmZ1bmN0aW9uKEYpe3ZhciBCPXRoaXMsST1CLmZpbmRGaWVsZENvbnRhaW5lcihGKSxNPWZ1bmN0aW9uKEQsSil7RCYmYS5lYWNoKEosZnVuY3Rpb24oUCl7RC5yZW1vdmVDbGFzcyhCLmdldChQKSl9KX07TShGLFsidmFsaWRDbGFzcyIsImVycm9yQ2xhc3MiXSk7TShJLFsiY29udGFpbmVyVmFsaWRDbGFzcyIsImNvbnRhaW5lckVycm9yQ2xhc3MiXSl9LHZhbGlkYXRhYmxlOmZ1bmN0aW9uKEYpe3ZhciBCPSExLEk9dGhpcy5nZXQoInJ1bGVzIilbRi5nZXQoIm5hbWUiKV07SSYmKEI9dGhpcy5ub3JtYWxpemVSdWxlVmFsdWUoSS5yZXF1aXJlZCxGKXx8cC5SVUxFUy5oYXNWYWx1ZS5hcHBseSh0aGlzLFtGLnZhbCgpLEZdKSk7cmV0dXJuISFCfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBGPXRoaXM7Ri5lYWNoUnVsZShmdW5jdGlvbihCLEkpe0YudmFsaWRhdGVGaWVsZChJKX0pO0YuZm9jdXNJbnZhbGlkRmllbGQoKX0sdmFsaWRhdGVGaWVsZDpmdW5jdGlvbihGKXt2YXIgQjsKdGhpcy5yZXNldEZpZWxkKEYpO0Y9ayhGKT90aGlzLmdldEZpZWxkKEYpOkY7ZyhGKSYmKEI9dGhpcy52YWxpZGF0YWJsZShGKSkmJnRoaXMuZmlyZSgidmFsaWRhdGVGaWVsZCIse3ZhbGlkYXRvcjp7ZmllbGQ6Rn19KX0sX2FmdGVyRXh0cmFjdFJ1bGVzQ2hhbmdlOmZ1bmN0aW9uKEYpe3RoaXMuX3VpU2V0RXh0cmFjdFJ1bGVzKEYubmV3VmFsKX0sX2FmdGVyVmFsaWRhdGVPbkJsdXJDaGFuZ2U6ZnVuY3Rpb24oRil7dGhpcy5fdWlTZXRWYWxpZGF0ZU9uQmx1cihGLm5ld1ZhbCl9LF9hZnRlclZhbGlkYXRlT25JbnB1dENoYW5nZTpmdW5jdGlvbihGKXt0aGlzLl91aVNldFZhbGlkYXRlT25JbnB1dChGLm5ld1ZhbCl9LF9kZWZFcnJvckZpZWxkRm46ZnVuY3Rpb24oRil7dmFyIEIsSSxNO3RoaXMuZ2V0KCJsYWJlbENzc0NsYXNzIik7TT1GLnZhbGlkYXRvcjtGPU0uZmllbGQ7dGhpcy5oaWdobGlnaHQoRik7aWYodGhpcy5nZXQoInNob3dNZXNzYWdlcyIpKXtJPUY7Qj10aGlzLmdldEZpZWxkU3RhY2tFcnJvckNvbnRhaW5lcihGKTsKYS5Gb3JtVmFsaWRhdG9yLmlzQ2hlY2thYmxlKEkpJiYoST1GLmFuY2VzdG9yKCIuIit1KS5nZXQoImxhc3RDaGlsZCIpKTt2YXIgRD1GLmdldCgiaWQiKSsiSGVscGVyIjtCLnNldCgiaWQiLEQpO0Yuc2V0KCJhcmlhLWRlc2NyaWJlZGJ5IixEKTtJLnBsYWNlQWZ0ZXIoQik7dGhpcy5wcmludFN0YWNrRXJyb3IoRixCLE0uZXJyb3JzKX19LF9kZWZWYWxpZEZpZWxkRm46ZnVuY3Rpb24oRil7dGhpcy51bmhpZ2hsaWdodChGLnZhbGlkYXRvci5maWVsZCl9LF9kZWZWYWxpZGF0ZUZpZWxkRm46ZnVuY3Rpb24oRil7dmFyIEI9dGhpcyxJPUYudmFsaWRhdG9yLmZpZWxkO0Y9Qi5nZXQoInJ1bGVzIilbSS5nZXQoIm5hbWUiKV07YS5lYWNoKEYsZnVuY3Rpb24oTSxEKXt2YXIgSj1wLlJVTEVTW0RdLFA9bShJLnZhbCgpKTtNPUIubm9ybWFsaXplUnVsZVZhbHVlKE0sSSk7YihKKSYmIUouYXBwbHkoQixbUCxJLE1dKSYmQi5hZGRGaWVsZEVycm9yKEksRCl9KTsoRj1CLmdldEZpZWxkRXJyb3IoSSkpPwpCLmZpcmUoImVycm9yRmllbGQiLHt2YWxpZGF0b3I6e2ZpZWxkOkksZXJyb3JzOkZ9fSk6Qi5maXJlKCJ2YWxpZEZpZWxkIix7dmFsaWRhdG9yOntmaWVsZDpJfX0pfSxfZmluZEZpZWxkTGFiZWw6ZnVuY3Rpb24oRil7dmFyIEI9Ii4iK3RoaXMuZ2V0KCJsYWJlbENzc0NsYXNzIiksST1hLm9uZSgibGFiZWxbZm9yXHgzZCIrRi5nZXQoImlkIikrIl0iKXx8Ri5hbmNlc3RvcigpLnByZXZpb3VzKEIpO0l8fChJPUYuYW5jZXN0b3IoIi4iK3UpKSYmKEk9SS5vbmUoQikpO2lmKEkpcmV0dXJuIEkuZ2V0KCJ0ZXh0Iil9LF9oaWdobGlnaHRIZWxwZXI6ZnVuY3Rpb24oRixCLEksTSl7TT8oRi5yZW1vdmVDbGFzcyhCKS5hZGRDbGFzcyhJKSxJPT09QSYmRi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpKTooRi5yZW1vdmVDbGFzcyhJKS5hZGRDbGFzcyhCKSxCPT09dyYmRi5zZXQoImFyaWEtaW52YWxpZCIsITApKX0sX2V4dHJhY3RSdWxlc0Zyb21NYXJrdXA6ZnVuY3Rpb24oRil7dmFyIEI9CnRoaXMuZ2V0KCJib3VuZGluZ0JveCIpLmdldERPTSgpLmVsZW1lbnRzLEk9dC5rZXlzKHAuUlVMRVMpLmpvaW4oInwiKSxJPXMoImZpZWxkLSgiK0krIikiLCJnIiksTSxELEo9W10sUD1mdW5jdGlvbihpYSxaKXtKLnB1c2goWil9O009MDtmb3IoRD1CLmxlbmd0aDtNPEQ7TSsrKXt2YXIgVj1CW01dLFk9Vi5uYW1lO1YuY2xhc3NOYW1lLnJlcGxhY2UoSSxQKTtpZihKLmxlbmd0aCl7dmFyIFY9RltZXSxuYTtWfHwoVj17fSxGW1ldPVYpO1k9MDtmb3IobmE9Si5sZW5ndGg7WTxuYTtZKyspe3ZhciBmYT1KW1ldO2ZhIGluIFZ8fChWW2ZhXT0hMCl9Si5sZW5ndGg9MH19dGhpcy5fcnVsZXNBbHJlYWR5RXh0cmFjdGVkPSEwfSxfb25GaWVsZElucHV0OmZ1bmN0aW9uKEYpe3RoaXMudmFsaWRhdGVGaWVsZChGLnRhcmdldCl9LF9vbkZvcm1TdWJtaXQ6ZnVuY3Rpb24oRil7dmFyIEI9e3ZhbGlkYXRvcjp7Zm9ybUV2ZW50OkZ9fTt0aGlzLnZhbGlkYXRlKCk7dGhpcy5oYXNFcnJvcnMoKT8KKEIudmFsaWRhdG9yLmVycm9ycz10aGlzLmVycm9ycyx0aGlzLmZpcmUoInN1Ym1pdEVycm9yIixCKSxGLmhhbHQoKSk6dGhpcy5maXJlKCJzdWJtaXQiLEIpfSxfb25Gb3JtUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnJlc2V0QWxsRmllbGRzKCl9LF9zZXRBUklBUm9sZXM6ZnVuY3Rpb24oKXt2YXIgRj10aGlzO0YuZWFjaFJ1bGUoZnVuY3Rpb24oQixJKXt2YXIgTT1GLmdldEZpZWxkKEkpO0Yubm9ybWFsaXplUnVsZVZhbHVlKEIucmVxdWlyZWQsTSkmJk0mJiFNLmF0dHIoImFyaWEtcmVxdWlyZWQiKSYmTS5hdHRyKCJhcmlhLXJlcXVpcmVkIiwhMCl9KX0sX3VpU2V0RXh0cmFjdFJ1bGVzOmZ1bmN0aW9uKEYpe0YmJnRoaXMuX2V4dHJhY3RSdWxlc0Zyb21NYXJrdXAodGhpcy5nZXQoInJ1bGVzIikpfSxfdWlTZXRWYWxpZGF0ZU9uSW5wdXQ6ZnVuY3Rpb24oRil7dmFyIEI9dGhpcy5nZXQoImJvdW5kaW5nQm94Iik7Rj8odGhpcy5faW5wdXRIYW5kbGVyc3x8KHRoaXMuX2lucHV0SGFuZGxlcnM9CkIuZGVsZWdhdGUoImlucHV0Iix0aGlzLl9vbkZpZWxkSW5wdXQsJ2lucHV0Om5vdChbdHlwZVx4M2QiZmlsZSJdKSxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uJyx0aGlzKSksdGhpcy5fZmlsZUlucHV0SGFuZGxlcnN8fCh0aGlzLl9maWxlSW5wdXRIYW5kbGVycz1CLmRlbGVnYXRlKCJjaGFuZ2UiLHRoaXMuX29uRmllbGRJbnB1dCwnaW5wdXRbdHlwZVx4M2QiZmlsZSJdJyx0aGlzKSkpOih0aGlzLl9pbnB1dEhhbmRsZXJzJiZ0aGlzLl9pbnB1dEhhbmRsZXJzLmRldGFjaCgpLHRoaXMuX2ZpbGVJbnB1dEhhbmRsZXJzJiZ0aGlzLl9maWxlSW5wdXRIYW5kbGVycy5kZXRhY2goKSl9LF91aVNldFZhbGlkYXRlT25CbHVyOmZ1bmN0aW9uKEYpe3ZhciBCPXRoaXMuZ2V0KCJib3VuZGluZ0JveCIpO0Y/KHRoaXMuX2JsdXJIYW5kbGVyc3x8KHRoaXMuX2JsdXJIYW5kbGVycz1CLmRlbGVnYXRlKCJibHVyIix0aGlzLl9vbkZpZWxkSW5wdXQsJ2lucHV0Om5vdChbdHlwZVx4M2QiZmlsZSJdKSxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uJywKdGhpcykpLHRoaXMuX2ZpbGVCbHVySGFuZGxlcnN8fCh0aGlzLl9maWxlQmx1ckhhbmRsZXJzPUIuZGVsZWdhdGUoImNoYW5nZSIsdGhpcy5fb25GaWVsZElucHV0LCdpbnB1dFt0eXBlXHgzZCJmaWxlIl0nLHRoaXMpKSk6KHRoaXMuX2JsdXJIYW5kbGVycyYmdGhpcy5fYmx1ckhhbmRsZXJzLmRldGFjaCgpLHRoaXMuX2ZpbGVCbHVySGFuZGxlcnMmJnRoaXMuX2ZpbGVCbHVySGFuZGxlcnMuZGV0YWNoKCkpfX19KTthLmVhY2gocC5SRUdFWCxmdW5jdGlvbihGLEIpe3AuUlVMRVNbQl09ZnVuY3Rpb24oSSl7cmV0dXJuIHAuUkVHRVhbQl0udGVzdChJKX19KTthLkZvcm1WYWxpZGF0b3I9Zn0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczoiZXNjYXBlIHNlbGVjdG9yLWNzczMgbm9kZS1ldmVudC1kZWxlZ2F0ZSBhdWktbm9kZSBhdWktY29tcG9uZW50IGF1aS1ldmVudC1pbnB1dCIuc3BsaXQoIiAiKX0pOwpZVUkuYWRkKCJhdWktbm9kZS1iYXNlIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZyx0PXEuaXNBcnJheSxmPXEuaXNGdW5jdGlvbixkPXEuaXNPYmplY3QsYz1xLmlzU3RyaW5nLGI9cS5pc1VuZGVmaW5lZCxnPXEuaXNWYWx1ZSxlPWEuQXJyYXksaz1hLk5vZGUsbT1hLk5vZGVMaXN0LHA9YS5nZXRDbGFzc05hbWUscz1hLkRPTS5fZ2V0UmVnRXhwLGw9YS5jb25maWcsaD1sLmRvYyx1PWwud2luLHc9ay5wcm90b3R5cGUsej13Ll9oaWRlLEE9dy5fc2hvdyxIPW0ucHJvdG90eXBlLEY9WyIiLCIiXSxCPXAoImhpZGUiKSxJPSExLE09e2I6ImJvcmRlckJvdHRvbVdpZHRoIixsOiJib3JkZXJMZWZ0V2lkdGgiLHI6ImJvcmRlclJpZ2h0V2lkdGgiLHQ6ImJvcmRlclRvcFdpZHRoIn0sRD17YjoibWFyZ2luQm90dG9tIixsOiJtYXJnaW5MZWZ0IixyOiJtYXJnaW5SaWdodCIsdDoibWFyZ2luVG9wIn0sSj17YjoicGFkZGluZ0JvdHRvbSIsbDoicGFkZGluZ0xlZnQiLHI6InBhZGRpbmdSaWdodCIsCnQ6InBhZGRpbmdUb3AifSxQPWguY3JlYXRlRWxlbWVudCgiZGl2Iik7UC5zdHlsZS5kaXNwbGF5PSJub25lIjtQLmlubmVySFRNTD0iICAgXHgzY3RhYmxlXHgzZVx4M2MvdGFibGVceDNlXHgyNm5ic3A7IjtQLmF0dGFjaEV2ZW50JiZQLmZpcmVFdmVudCYmKFAuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uIFooKXtJPSEwO1AuZGV0YWNoRXZlbnQoIm9uY2xpY2siLFopfSksUC5jbG9uZU5vZGUoITApLmZpcmVFdmVudCgib25jbGljayIpKTt2YXIgcD0hUC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsVj0vXlxzKy8sWT0vXD0oW149XHgyN1x4MjI+XHNdK1wvKT4vZyxuYT0vPChbXHc6XSspLyxQPW51bGwsZmE9ZnVuY3Rpb24oWixlYSxvYSl7ZWE9ZWE/Im9uIjoiIjt2YXIgQWE7Wi5zZXRBdHRyaWJ1dGUoInVuc2VsZWN0YWJsZSIsZWEpO2lmKCFvYSlmb3IoWj1aLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksb2E9MDtBYT1aW29hXTtvYSsrKUFhLnNldEF0dHJpYnV0ZSgidW5zZWxlY3RhYmxlIiwKZWEpfTthLm1peCh3LHthbmNlc3RvcnNCeUNsYXNzTmFtZTpmdW5jdGlvbihaLGVhKXt2YXIgb2E9W10sQWE9UmVnRXhwKCJcXGIiK1orIlxcYiIpLHBhPXRoaXMuZ2V0RE9NKCk7ZWF8fChwYT1wYS5wYXJlbnROb2RlKTtmb3IoO3BhJiY5IT09cGEubm9kZVR5cGU7KTE9PT1wYS5ub2RlVHlwZSYmQWEudGVzdChwYS5jbGFzc05hbWUpJiZvYS5wdXNoKHBhKSxwYT1wYS5wYXJlbnROb2RlO3JldHVybiBhLmFsbChvYSl9LGF0dHI6ZnVuY3Rpb24oWixlYSl7dmFyIG9hO2lmKGIoZWEpKXtpZihkKFopKXtmb3Iob2EgaW4gWilaLmhhc093blByb3BlcnR5KG9hKSYmdGhpcy5hdHRyKG9hLFpbb2FdKTtyZXR1cm4gdGhpc31vYT10aGlzLmdldChaKTtxLmlzVmFsdWUob2EpfHwob2E9dGhpcy5nZXRBdHRyaWJ1dGUoWikpO3JldHVybiBvYX1vYT10aGlzLmdldERPTSgpO1ogaW4gb2E/dGhpcy5zZXQoWixlYSk6dGhpcy5zZXRBdHRyaWJ1dGUoWixlYSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIEk/CmZ1bmN0aW9uKCl7dmFyIFo9dGhpcy5nZXRET00oKTszIT09Wi5ub2RlVHlwZT8oWj10aGlzLm91dGVySFRNTCgpLFo9Wi5yZXBsYWNlKFksJ1x4M2QiJDEiXHgzZScpLnJlcGxhY2UoViwiIiksWj1rLmNyZWF0ZShaKSk6Wj1hLm9uZShaLmNsb25lTm9kZSgpKTtyZXR1cm4gWn06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZU5vZGUoITApfX0oKSxjZW50ZXI6ZnVuY3Rpb24oWil7dmFyIGVhPXRoaXMuZ2V0KCJyZWdpb24iKSxvYTt0KFopPyhvYT1aWzBdLFo9WlsxXSk6KFo9ZChaKSYmIWEuaW5zdGFuY2VPZihaLGspP1o6KGEub25lKFopfHxhLmdldEJvZHkoKSkuZ2V0KCJyZWdpb24iKSxvYT1aLmxlZnQrWi53aWR0aC8yLFo9Wi50b3ArWi5oZWlnaHQvMik7dGhpcy5zZXRYWShbb2EtZWEud2lkdGgvMixaLWVhLmhlaWdodC8yXSl9LGVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5hbGwoIlx4M2UqIikucmVtb3ZlKCkucHVyZ2UoKTtmb3IodmFyIFo9ay5nZXRET01Ob2RlKHRoaXMpO1ouZmlyc3RDaGlsZDspWi5yZW1vdmVDaGlsZChaLmZpcnN0Q2hpbGQpOwpyZXR1cm4gdGhpc30sZ2V0RE9NOmZ1bmN0aW9uKCl7cmV0dXJuIGsuZ2V0RE9NTm9kZSh0aGlzKX0sZ2V0Qm9yZGVyV2lkdGg6ZnVuY3Rpb24oWil7cmV0dXJuIHRoaXMuX2dldEJveFN0eWxlQXNOdW1iZXIoWixNKX0sZ2V0Q2VudGVyWFk6ZnVuY3Rpb24oKXt2YXIgWj10aGlzLmdldCgicmVnaW9uIik7cmV0dXJuW1oubGVmdCtaLndpZHRoLzIsWi50b3ArWi5oZWlnaHQvMl19LGdldE1hcmdpbjpmdW5jdGlvbihaKXtyZXR1cm4gdGhpcy5fZ2V0Qm94U3R5bGVBc051bWJlcihaLEQpfSxnZXRQYWRkaW5nOmZ1bmN0aW9uKFope3JldHVybiB0aGlzLl9nZXRCb3hTdHlsZUFzTnVtYmVyKFosSil9LGd1aWQ6ZnVuY3Rpb24oKXt2YXIgWj10aGlzLmdldCgiaWQiKTtafHwoWj1hLnN0YW1wKHRoaXMpLHRoaXMuc2V0KCJpZCIsWikpO3JldHVybiBafSxob3ZlcjpmdW5jdGlvbihaLGVhKXt2YXIgb2E7b2E9dGhpcy5fZGVmYXVsdEhvdmVyT3B0aW9uczt0aGlzLl9ob3Zlck9wdGlvbnM9b2E9CmQoWiwhMCk/YS5taXgoWixvYSk6YS5taXgoe292ZXI6WixvdXQ6ZWF9LG9hKTtvYS5vdmVyVGFzaz1hLmRlYm91bmNlKHRoaXMuX2hvdmVyT3ZlclRhc2tGbixudWxsLHRoaXMpO29hLm91dFRhc2s9YS5kZWJvdW5jZSh0aGlzLl9ob3Zlck91dFRhc2tGbixudWxsLHRoaXMpO3JldHVybiBuZXcgYS5FdmVudEhhbmRsZShbdGhpcy5vbihvYS5vdmVyRXZlbnRUeXBlLHRoaXMuX2hvdmVyT3ZlckhhbmRsZXIsdGhpcyksdGhpcy5vbihvYS5vdXRFdmVudFR5cGUsdGhpcy5faG92ZXJPdXRIYW5kbGVyLHRoaXMpXSl9LGh0bWw6ZnVuY3Rpb24oKXt2YXIgWj1hcmd1bWVudHM7aWYoWi5sZW5ndGgpdGhpcy5zZXQoImlubmVySFRNTCIsWlswXSk7ZWxzZSByZXR1cm4gdGhpcy5nZXQoImlubmVySFRNTCIpO3JldHVybiB0aGlzfSxvdXRlckhUTUw6ZnVuY3Rpb24oKXt2YXIgWj10aGlzLmdldERPTSgpO2lmKCJvdXRlckhUTUwiaW4gWilyZXR1cm4gWi5vdXRlckhUTUw7Wj1rLmNyZWF0ZSgiXHgzY2Rpdlx4M2VceDNjL2Rpdlx4M2UiKS5hcHBlbmQodGhpcy5jbG9uZSgpKTsKdHJ5e3JldHVybiBaLmh0bWwoKX1jYXRjaChlYSl7fWZpbmFsbHl7fX0scGxhY2VBZnRlcjpmdW5jdGlvbihaKXtyZXR1cm4gdGhpcy5fcGxhY2UoWix0aGlzLmdldCgibmV4dFNpYmxpbmciKSl9LHBsYWNlQmVmb3JlOmZ1bmN0aW9uKFope3JldHVybiB0aGlzLl9wbGFjZShaLHRoaXMpfSxwcmVwZW5kVG86ZnVuY3Rpb24oWil7YS5vbmUoWikucHJlcGVuZCh0aGlzKTtyZXR1cm4gdGhpc30scmFkaW9DbGFzczpmdW5jdGlvbihaKXt2YXIgZWE9dGhpcy5zaWJsaW5ncygpO2lmKGMoWikpZWEucmVtb3ZlQ2xhc3MoWiksdGhpcy5hZGRDbGFzcyhaKTtlbHNlIGlmKHQoWikpe3ZhciBlYT1lYS5nZXRET00oKSxvYT1zKCIoPzpefFxccyspKD86IitaLmpvaW4oInwiKSsiKSg/XHgzZFxccyt8JCkiLCJnIiksQWEscGE7Zm9yKHBhPWVhLmxlbmd0aC0xOzA8PXBhO3BhLS0pQWE9ZWFbcGFdLEFhLmNsYXNzTmFtZT1BYS5jbGFzc05hbWUucmVwbGFjZShvYSwiIik7dGhpcy5hZGRDbGFzcyhaLmpvaW4oIiAiKSl9cmV0dXJuIHRoaXN9LApyZXNldElkOmZ1bmN0aW9uKFope3RoaXMuYXR0cigiaWQiLGEuZ3VpZChaKSk7cmV0dXJuIHRoaXN9LHNlbGVjdFRleHQ6ZnVuY3Rpb24oWixlYSl7dmFyIG9hPXRoaXMuZ2V0RE9NKCksQWE9dGhpcy52YWwoKS5sZW5ndGg7ZWE9ZyhlYSk/ZWE6QWE7Wj1nKFopP1o6MDt0cnl7aWYob2Euc2V0U2VsZWN0aW9uUmFuZ2Upb2Euc2V0U2VsZWN0aW9uUmFuZ2UoWixlYSk7ZWxzZSBpZihvYS5jcmVhdGVUZXh0UmFuZ2Upe3ZhciBwYT1vYS5jcmVhdGVUZXh0UmFuZ2UoKTtwYS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsWik7cGEubW92ZUVuZCgiY2hhcmFjdGVyIixlYS1BYSk7cGEuc2VsZWN0KCl9ZWxzZSBvYS5zZWxlY3QoKTtvYSE9PWguYWN0aXZlRWxlbWVudCYmb2EuZm9jdXMoKX1jYXRjaChGYSl7fXJldHVybiB0aGlzfSxzZWxlY3RhYmxlOmZ1bmN0aW9uKFope3RoaXMuc2V0U3R5bGVzKHsiLXdlYmtpdC11c2VyLXNlbGVjdCI6InRleHQiLCIta2h0bWwtdXNlci1zZWxlY3QiOiJ0ZXh0IiwKIi1tb3otdXNlci1zZWxlY3QiOiJ0ZXh0IiwiLW1zLXVzZXItc2VsZWN0IjoidGV4dCIsIi1vLXVzZXItc2VsZWN0IjoidGV4dCIsInVzZXItc2VsZWN0IjoidGV4dCJ9KTsoYS5VQS5pZXx8YS5VQS5vcGVyYSkmJmZhKHRoaXMuX25vZGUsITEsWik7cmV0dXJuIHRoaXN9LHN3YWxsb3dFdmVudDpmdW5jdGlvbihaLGVhKXt2YXIgb2E9dGhpcyxBYT1mdW5jdGlvbihwYSl7cGEuc3RvcFByb3BhZ2F0aW9uKCk7ZWEmJihwYS5wcmV2ZW50RGVmYXVsdCgpLHBhLmhhbHQoKSk7cmV0dXJuITF9O2lmKHQoWikpcmV0dXJuIGUuZWFjaChaLGZ1bmN0aW9uKHBhKXtvYS5vbihwYSxBYSl9KSx0aGlzO29hLm9uKFosQWEpO3JldHVybiBvYX0sdGV4dDpmdW5jdGlvbihaKXt2YXIgZWE9dGhpcy5nZXRET00oKTtyZXR1cm4gYihaKT90aGlzLl9nZXRUZXh0KGVhLmNoaWxkTm9kZXMpOihaPWEuRE9NLl9nZXREb2MoZWEpLmNyZWF0ZVRleHROb2RlKFopLHRoaXMuZW1wdHkoKS5hcHBlbmQoWikpfSx0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzLl90b2dnbGVWaWV3LmFwcGx5KHRoaXMsCmFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9LHVuc2VsZWN0YWJsZTpmdW5jdGlvbihaKXt0aGlzLnNldFN0eWxlcyh7Ii13ZWJraXQtdXNlci1zZWxlY3QiOiJub25lIiwiLWtodG1sLXVzZXItc2VsZWN0Ijoibm9uZSIsIi1tb3otdXNlci1zZWxlY3QiOiJub25lIiwiLW1zLXVzZXItc2VsZWN0Ijoibm9uZSIsIi1vLXVzZXItc2VsZWN0Ijoibm9uZSIsInVzZXItc2VsZWN0Ijoibm9uZSJ9KTsoYS5VQS5pZXx8YS5VQS5vcGVyYSkmJmZhKHRoaXMuX25vZGUsITAsWik7cmV0dXJuIHRoaXN9LHZhbDpmdW5jdGlvbihaKXtyZXR1cm4gYihaKT90aGlzLmdldCgidmFsdWUiKTp0aGlzLnNldCgidmFsdWUiLFopfSxfZ2V0Qm94U3R5bGVBc051bWJlcjpmdW5jdGlvbihaLGVhKXt2YXIgb2E9Wi5tYXRjaCgvXHcvZyksQWE9MCxwYSxGYTtmb3IoRmE9b2EubGVuZ3RoLTE7MDw9RmE7RmEtLSlpZihwYT1vYVtGYV0pcGE9cGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGUoZWFbcGFdKSkscGE9Ck1hdGguYWJzKHBhKSxBYSs9cGF8fDA7cmV0dXJuIEFhfSxfZ2V0VGV4dDpmdW5jdGlvbihaKXt2YXIgZWE9Wi5sZW5ndGgsb2EsQWE9W10scGE7Zm9yKHBhPTA7cGE8ZWE7cGErKykob2E9WltwYV0pJiY4IT09b2Eubm9kZVR5cGUmJigxIT09b2Eubm9kZVR5cGUmJkFhLnB1c2gob2Eubm9kZVZhbHVlKSxvYS5jaGlsZE5vZGVzJiZBYS5wdXNoKHRoaXMuX2dldFRleHQob2EuY2hpbGROb2RlcykpKTtyZXR1cm4gQWEuam9pbigiIil9LF9oaWRlOmZ1bmN0aW9uKCl7dGhpcy5hZGRDbGFzcyhCKTtyZXR1cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9ob3Zlck91dEhhbmRsZXI6ZnVuY3Rpb24oWil7dmFyIGVhPXRoaXMuX2hvdmVyT3B0aW9ucztlYS5vdXRUYXNrLmRlbGF5KGVhLm91dERlbGF5LFopfSxfaG92ZXJPdmVySGFuZGxlcjpmdW5jdGlvbihaKXt2YXIgZWE9dGhpcy5faG92ZXJPcHRpb25zO2VhLm92ZXJUYXNrLmRlbGF5KGVhLm92ZXJEZWxheSxaKX0sX2hvdmVyT3V0VGFza0ZuOmZ1bmN0aW9uKFope3ZhciBlYT0KdGhpcy5faG92ZXJPcHRpb25zO2VhLm92ZXJUYXNrLmNhbmNlbCgpO2VhLm91dC5hcHBseShlYS5jb250ZXh0fHxaLmN1cnJlbnRUYXJnZXQsYXJndW1lbnRzKX0sX2hvdmVyT3ZlclRhc2tGbjpmdW5jdGlvbihaKXt2YXIgZWE9dGhpcy5faG92ZXJPcHRpb25zO2VhLm91dFRhc2suY2FuY2VsKCk7ZWEub3Zlci5hcHBseShlYS5jb250ZXh0fHxaLmN1cnJlbnRUYXJnZXQsYXJndW1lbnRzKX0sX3BsYWNlOmZ1bmN0aW9uKFosZWEpe3ZhciBvYT10aGlzLmdldCgicGFyZW50Tm9kZSIpO29hJiYoYyhaKSYmKFo9ay5jcmVhdGUoWikpLG9hLmluc2VydEJlZm9yZShaLGVhKSk7cmV0dXJuIHRoaXN9LF9zaG93OmZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVDbGFzcyhCKTtyZXR1cm4gQS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9kZWZhdWx0SG92ZXJPcHRpb25zOntvdmVyRXZlbnRUeXBlOiJtb3VzZWVudGVyIixvdXRFdmVudFR5cGU6Im1vdXNlbGVhdmUiLG92ZXJEZWxheTowLG91dERlbGF5OjAsCm92ZXI6cS5lbXB0eUZuLG91dDpxLmVtcHR5Rm59fSwhMCk7dy5fX2lzSGlkZGVuPXcuX2lzSGlkZGVuO3cuX2lzSGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIHcuX19pc0hpZGRlbi5jYWxsKHRoaXMpfHx0aGlzLmhhc0NsYXNzKHRoaXMuX2hpZGVDbGFzc3x8Qil9O2EuZWFjaChbIkhlaWdodCIsIldpZHRoIl0sZnVuY3Rpb24oWixlYSl7dmFyIG9hPWVhPyJsciI6InRiIixBYT1aLnRvTG93ZXJDYXNlKCk7d1tBYV09ZnVuY3Rpb24ocGEpe3ZhciBGYT10aGlzO2lmKGIocGEpKXtwYT10aGlzLl9ub2RlO3ZhciBFYTtpZihwYSlpZighcGEudGFnTmFtZSYmOT09PXBhLm5vZGVUeXBlfHxwYS5hbGVydClFYT10aGlzLmdldCgicmVnaW9uIilbQWFdO2Vsc2V7RWE9dGhpcy5nZXQoIm9mZnNldCIrWik7aWYoIUVhKXtwYT10aGlzLmdldFN0eWxlKCJkaXNwbGF5Iik7dmFyIEZhPXRoaXMuZ2V0U3R5bGUoInBvc2l0aW9uIiksV2E9dGhpcy5nZXRTdHlsZSgidmlzaWJpbGl0eSIpO3RoaXMuc2V0U3R5bGVzKHtkaXNwbGF5OiJibG9jayAhaW1wb3J0YW50IiwKcG9zaXRpb246ImFic29sdXRlICFpbXBvcnRhbnQiLHZpc2liaWxpdHk6ImhpZGRlbiAhaW1wb3J0YW50In0pO0VhPXRoaXMuZ2V0KCJvZmZzZXQiK1opO3RoaXMuc2V0U3R5bGVzKHtkaXNwbGF5OnBhLHBvc2l0aW9uOkZhLHZpc2liaWxpdHk6V2F9KX1FYSYmKEVhLT10aGlzLmdldFBhZGRpbmcob2EpK3RoaXMuZ2V0Qm9yZGVyV2lkdGgob2EpKX1GYT1FYX1lbHNlIHRoaXMuc2V0U3R5bGUoQWEscGEpO3JldHVybiBGYX07d1siaW5uZXIiK1pdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbQWFdKCkrdGhpcy5nZXRQYWRkaW5nKG9hKX07d1sib3V0ZXIiK1pdPWZ1bmN0aW9uKHBhKXt2YXIgRmE9dGhpc1siaW5uZXIiK1pdKCksRWE9dGhpcy5nZXRCb3JkZXJXaWR0aChvYSksRmE9RmErRWE7cGEmJihGYSs9dGhpcy5nZXRNYXJnaW4ob2EpKTtyZXR1cm4gRmF9fSk7cHx8KGEuRE9NLl9BRERfSFRNTD1hLkRPTS5hZGRIVE1MLGEuRE9NLmFkZEhUTUw9ZnVuY3Rpb24oWixlYSxvYSl7dmFyIEFhPQpaLm5vZGVOYW1lJiZaLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl8fCIiLHBhPSIiO2IoZWEpfHwoYyhlYSk/cGE9KG5hLmV4ZWMoZWEpfHxGKVsxXTplYS5ub2RlVHlwZSYmMTE9PT1lYS5ub2RlVHlwZSYmZWEuY2hpbGROb2Rlcy5sZW5ndGg/cGE9ZWEuY2hpbGROb2Rlc1swXS5ub2RlTmFtZTplYS5ub2RlTmFtZSYmKHBhPWVhLm5vZGVOYW1lKSxwYT1wYSYmcGEudG9Mb3dlckNhc2UoKSk7InRhYmxlIj09PUFhJiYidHIiPT09cGEmJihaPVouZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fFouYXBwZW5kQ2hpbGQoWi5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpLCJ0Ym9keSI9PT0ob2EmJm9hLm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKSYmMDxvYS5jaGlsZE5vZGVzLmxlbmd0aCYmKG9hPW9hLmZpcnN0Q2hpbGQpKTtyZXR1cm4gYS5ET00uX0FERF9IVE1MKFosZWEsb2EpfSk7bS5pbXBvcnRNZXRob2QodywiYWZ0ZXIgYXBwZW5kVG8gYXR0ciBiZWZvcmUgZW1wdHkgZ2V0WCBnZXRYWSBnZXRZIGhvdmVyIGh0bWwgaW5uZXJIZWlnaHQgaW5uZXJXaWR0aCBvdXRlckhlaWdodCBvdXRlckhUTUwgb3V0ZXJXaWR0aCBwcmVwZW5kIHByZXBlbmRUbyBwdXJnZSBzZWxlY3RUZXh0IHNlbGVjdGFibGUgc2V0WCBzZXRYWSBzZXRZIHRleHQgdG9nZ2xlIHVuc2VsZWN0YWJsZSB2YWwiLnNwbGl0KCIgIikpOwphLm1peChILHthbGw6ZnVuY3Rpb24oWil7dmFyIGVhPVtdLG9hPXRoaXMuX25vZGVzLEFhPW9hLmxlbmd0aCxwYSxGYTtmb3IoRmE9MDtGYTxBYTtGYSsrKShwYT1hLlNlbGVjdG9yLnF1ZXJ5KFosb2FbRmFdKSkmJnBhLmxlbmd0aCYmZWEucHVzaC5hcHBseShlYSxwYSk7ZWE9ZS51bmlxdWUoZWEpO3JldHVybiBhLmFsbChlYSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlbSgwKX0sZ2V0RE9NOmZ1bmN0aW9uKCl7cmV0dXJuIG0uZ2V0RE9NTm9kZXModGhpcyl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVtKHRoaXMuX25vZGVzLmxlbmd0aC0xKX0sb25lOmZ1bmN0aW9uKFope3ZhciBlYT1udWxsLG9hPXRoaXMuX25vZGVzLEFhPW9hLmxlbmd0aCxwYTtmb3IocGE9MDtwYTxBYTtwYSsrKWlmKGVhPWEuU2VsZWN0b3IucXVlcnkoWixvYVtwYV0sITApKXtlYT1hLm9uZShlYSk7YnJlYWt9cmV0dXJuIGVhfX0pO0guX19maWx0ZXI9SC5maWx0ZXI7SC5maWx0ZXI9CmZ1bmN0aW9uKFosZWEpe3ZhciBvYTtpZihmKFopKXt2YXIgQWE9W107dGhpcy5lYWNoKGZ1bmN0aW9uKHBhLEZhLEVhKXtaLmNhbGwoZWF8fHBhLHBhLEZhLEVhKSYmQWEucHVzaChwYS5fbm9kZSl9KTtvYT1hLmFsbChBYSl9ZWxzZSBvYT1ILl9fZmlsdGVyLmNhbGwodGhpcyxaKTtyZXR1cm4gb2F9O2EubWl4KG0se2NyZWF0ZTpmdW5jdGlvbihaKXtyZXR1cm4gYS5nZXREb2MoKS5pbnZva2UoImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiKS5hcHBlbmQoWikuZ2V0KCJjaGlsZE5vZGVzIil9fSk7YS5taXgoYSx7Z2V0Qm9keTpmdW5jdGlvbigpe3RoaXMuX2JvZHlOb2RlfHwodGhpcy5fYm9keU5vZGU9YS5vbmUoaC5ib2R5KSk7cmV0dXJuIHRoaXMuX2JvZHlOb2RlfSxnZXREb2M6ZnVuY3Rpb24oKXt0aGlzLl9kb2N1bWVudE5vZGV8fCh0aGlzLl9kb2N1bWVudE5vZGU9YS5vbmUoaCkpO3JldHVybiB0aGlzLl9kb2N1bWVudE5vZGV9LGdldFdpbjpmdW5jdGlvbigpe3RoaXMuX3dpbmRvd05vZGV8fAoodGhpcy5fd2luZG93Tm9kZT1hLm9uZSh1KSk7cmV0dXJuIHRoaXMuX3dpbmRvd05vZGV9fSl9LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLCJhdWktYmFzZS1sYW5nIiwiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktZGVib3VuY2UiLCJub2RlIl19KTsKWVVJLmFkZCgiYXVpLW5vZGUtaHRtbDUiLGZ1bmN0aW9uKGEsRSl7aWYoYS5VQS5pZSl7dmFyIHE9YS5uYW1lc3BhY2UoIkhUTUw1IiksdD1hLkRPTS5fY3JlYXRlO3EuX2ZyYWdIVE1MNVNoaXZlZHx8KHEuX2ZyYWdIVE1MNVNoaXZlZD1hLmh0bWw1c2hpdihhLmNvbmZpZy5kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKSk7YS5taXgocSx7SUVDcmVhdGVGaXg6ZnVuY3Rpb24oQixJKXt2YXIgTT1xLl9mcmFnSFRNTDVTaGl2ZWQ7TS5hcHBlbmRDaGlsZChCKTtCLmlubmVySFRNTD1JO00ucmVtb3ZlQ2hpbGQoQik7cmV0dXJuIEJ9LF9kb0JlZm9yZUNyZWF0ZTpmdW5jdGlvbihCKXt2YXIgST10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxJPXEuSUVDcmVhdGVGaXgoSSxCKTtyZXR1cm4gbmV3IGEuRG8uSGFsdChudWxsLEkpfX0pO2EuRG8uYmVmb3JlKHEuX2RvQmVmb3JlQ3JlYXRlLGEuRE9NLCJfY3JlYXRlIixhLkRPTSl9dmFyIGY9YS5jb25maWcsZD1mLmRvYyxjPWYud2luLGI9CmEuVUE7aWYoKGY9Yi5pZSkmJiEoOTw9Znx8ITE9PT1jLkFVSV9IVE1MNV9JRSkpe3ZhciBnPVtdLGY9Yy5sb2NhdGlvbixmPWYucHJvdG9jb2wrIi8vIitmLmhvc3QsZT1kLmRvY3VtZW50RWxlbWVudCxrPWEuSFRNTDVfRUxFTUVOVFMsbT1rLmxlbmd0aCxwPWsuam9pbigifCIpLHM9UmVnRXhwKCJceDNjKC8/KTooIitwKyIpIiwiZ2kiKSxsPVJlZ0V4cCgiKCIrcCsiKSIsImdpIiksaD1SZWdFeHAoIlxcYigiK3ArIilcXGIiLCJpIiksdT0vcHJpbnR8YWxsLyx3PVJlZ0V4cCgiKF58W15cXG57fV0qP1xccykoIitwKyIpLio/eyhbXn1dKil9IiwiZ2ltIiksej1SZWdFeHAoIlx4M2MoLyopKCIrcCsiKSIsImdpIiksQT0idXJsKCIrZixIPWEuaHRtbDVzaGl2O0goZCk7dmFyIEY9ZnVuY3Rpb24oKXt2YXIgQixJPWZ1bmN0aW9uKCl7aWYoITE9PT1jLkFVSV9IVE1MNV9JRSlCKCk7ZWxzZSBGLm9uQWZ0ZXJQcmludCgpfSxNPWZ1bmN0aW9uKCl7aWYoITE9PT1jLkFVSV9IVE1MNV9JRSlCKCk7CmVsc2UgRi5vbkJlZm9yZVByaW50KCl9O0I9ZnVuY3Rpb24oKXtjLmRldGFjaEV2ZW50KCJvbmFmdGVycHJpbnQiLEkpO2MuZGV0YWNoRXZlbnQoIm9uYmVmb3JlcHJpbnQiLE0pfTt2YXIgRD1mdW5jdGlvbigpe2MuYXR0YWNoRXZlbnQoIm9uYWZ0ZXJwcmludCIsSSk7Yy5hdHRhY2hFdmVudCgib25iZWZvcmVwcmludCIsTSl9O0QoKTtGLmRlc3Ryb3k9QjtGLmluaXQ9RH07YS5taXgoRix7b25BZnRlclByaW50OmZ1bmN0aW9uKCl7dGhpcy5yZXN0b3JlSFRNTCgpO3RoaXMuX2dldFN0eWxlU2hlZXQoKS5zdHlsZVNoZWV0LmNzc1RleHQ9IiJ9LG9uQmVmb3JlUHJpbnQ6ZnVuY3Rpb24oKXt2YXIgQj10aGlzLl9nZXRTdHlsZVNoZWV0KCksST10aGlzLl9nZXRBbGxDU1NUZXh0KCk7Qi5zdHlsZVNoZWV0LmNzc1RleHQ9dGhpcy5wYXJzZUNTUyhJKTt0aGlzLndyaXRlSFRNTCgpfSxwYXJzZUNTUzpmdW5jdGlvbihCKXt2YXIgST0iIjsoQj1CLm1hdGNoKHcpKSYmKEk9Qi5qb2luKCJcbiIpLnJlcGxhY2UobCwKIi5wcmludGZpeC0kMSIpKTtyZXR1cm4gSX0scmVzdG9yZUhUTUw6ZnVuY3Rpb24oKXt2YXIgQj10aGlzLl9nZXRCb2R5Q2xvbmUoKSxJPXRoaXMuX2dldEJvZHlFbCgpLE09Qi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSUZSQU1FIiksRD1JLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJRlJBTUUiKSxKPUQubGVuZ3RoO2lmKEo9PT1NLmxlbmd0aClmb3IoO0otLTspRFtKXS5zd2FwTm9kZShNW0pdKTtCLmlubmVySFRNTD0iIjtlLnJlbW92ZUNoaWxkKEIpO2UuYXBwZW5kQ2hpbGQoSSl9LHdyaXRlSFRNTDpmdW5jdGlvbigpe2Zvcih2YXIgQj0tMSxJLE09dGhpcy5fZ2V0Qm9keUVsKCksRCxKLFAsVixZLG5hPVtdOysrQjxtOylmb3IoRD1rW0JdLFA9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShEKSxWPVAubGVuZ3RoLEk9LTE7KytJPFY7KVk9UFtJXSxKPVkuY2xhc3NOYW1lLC0xPT09Si5pbmRleE9mKCJwcmludGZpeC0iKSYmKG5hWzBdPSJwcmludGZpeC0iK0QsbmFbMV09SixZLmNsYXNzTmFtZT0KbmEuam9pbigiICIpKTtEPXRoaXMuX2dldERvY0ZyYWcoKTtJPXRoaXMuX2dldEJvZHlDbG9uZSgpO0QuYXBwZW5kQ2hpbGQoTSk7ZS5hcHBlbmRDaGlsZChJKTtJLmNsYXNzTmFtZT1NLmNsYXNzTmFtZTtJLmlkPU0uaWQ7RD1NLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Sj1ELmxlbmd0aDtpZihiLnNlY3VyZSl7UD1NLnN0eWxlO1AuZGlzcGxheT0ibm9uZSI7Zm9yKEI9MDtCPEo7QisrKVY9RFtCXS5zdHlsZSwoWT1WLmJhY2tncm91bmRJbWFnZSkmJi0xPFkuaW5kZXhPZigidXJsKCIpJiYtMT09PVkuaW5kZXhPZigiaHR0cHMiKSYmKFYuYmFja2dyb3VuZEltYWdlPVkucmVwbGFjZSgidXJsKCIsQSkpO1AuZGlzcGxheT0iIn1CPU0uY2xvbmVOb2RlKCEwKTtQPUIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtpZihKPT09UC5sZW5ndGgpZm9yKDtKLS07KXt2YXIgbmE9UFtKXSxmYT1uYS5ub2RlTmFtZTtpZigiSU5QVVQiPT09ZmF8fCJPUFRJT04iPT09ZmF8fCJJRlJBTUUiPT09CmZhKWlmKFY9RFtKXSxWLm5vZGVOYW1lPT09ZmEpWT1udWxsLCJPUFRJT04iPT09ZmE/WT0ic2VsZWN0ZWQiOiJJTlBVVCIhPT1mYXx8ImNoZWNrYm94IiE9PW5hLnR5cGUmJiJyYWRpbyIhPT1uYS50eXBlPyJJRlJBTUUiPT09ZmEmJihuYS5zcmM9IiIpOlk9ImNoZWNrZWQiLG51bGwhPT1ZJiYoKFY9VltZXSk/bmEuc2V0QXR0cmlidXRlKFksVik6bmEucmVtb3ZlQXR0cmlidXRlKFkpKX1EPUIuaW5uZXJIVE1MO0Q9RC5yZXBsYWNlKHMsIlx4M2MkMSQyIikucmVwbGFjZSh6LCJceDNjJDFmb250Iik7SS5pbm5lckhUTUw9RDtQPUkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklGUkFNRSIpO0Q9TS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSUZSQU1FIik7Sj1ELmxlbmd0aDtpZihKPT09UC5sZW5ndGgpZm9yKDtKLS07KURbSl0uc3dhcE5vZGUoUFtKXSl9LF9nZXRBbGxDU1NUZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBCPVtdLEk9dGhpcy5fZ2V0QWxsU3R5bGVTaGVldHMoZC5zdHlsZVNoZWV0cywKImFsbCIpLE0sRCxKPTA7RD1JW0pdO0orKylpZigoRD1ELnJ1bGVzKSYmRC5sZW5ndGgpZm9yKHZhciBQPTAsVj1ELmxlbmd0aDtQPFY7UCsrKU09RFtQXSxNLmhyZWZ8fChNPXRoaXMuX2dldENTU1RleHRGcm9tUnVsZShNKSxCLnB1c2goTSkpO3JldHVybiBCLmpvaW4oIiAiKX0sX2dldENTU1RleHRGcm9tUnVsZTpmdW5jdGlvbihCKXt2YXIgST0iIixNPUIuc3R5bGUsRCxKO00mJihEPU0uY3NzVGV4dCkmJihKPUIuc2VsZWN0b3JUZXh0KSYmaC50ZXN0KEopJiYoZy5sZW5ndGg9MCxnLnB1c2goSiwieyIsRCwifSIpLEk9Zy5qb2luKCIgIikpO3JldHVybiBJfSxfZ2V0QWxsU3R5bGVTaGVldHM6ZnVuY3Rpb24oQixJLE0sRCl7TT1NfHwxO0Q9RHx8W107dmFyIEo7aWYoQiYmdm9pZCAwIT09QisiIil7dmFyIFA9Qi5pbXBvcnRzO0k9Qi5tZWRpYVR5cGV8fEk7aWYodS50ZXN0KEkpKXt2YXIgVjtpZigzPj1NJiZQJiZ2b2lkIDAhPT1QKyIiJiZQLmxlbmd0aClmb3IoSj0wLFY9UC5sZW5ndGg7SjwKVjtKKyspdGhpcy5fZ2V0QWxsU3R5bGVTaGVldHMoUFtKXSxJLE0rMSxEKTtlbHNlIGlmKEIubGVuZ3RoKWZvcihKPTAsVj1CLmxlbmd0aDtKPFY7SisrKXRoaXMuX2dldEFsbFN0eWxlU2hlZXRzKEJbSl0sSSxNLEQpO2Vsc2V7dmFyIFA9Qi5ydWxlcyxZO2lmKFAmJlAubGVuZ3RoKWZvcihKPTAsVj1QLmxlbmd0aDtKPFY7SisrKShZPVBbSl0uc3R5bGVTaGVldCkmJnRoaXMuX2dldEFsbFN0eWxlU2hlZXRzKFksSSxNLEQpfSFCLmRpc2FibGVkJiZCLnJ1bGVzJiZELnB1c2goQil9fXJldHVybiBEfSxfZ2V0Qm9keUVsOmZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5fYm9keUVsO0J8fCh0aGlzLl9ib2R5RWw9Qj1kLmJvZHkpO3JldHVybiBCfSxfZ2V0Qm9keUNsb25lOmZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5fYm9keUNsb25lO0J8fCh0aGlzLl9ib2R5Q2xvbmU9Qj1kLmNyZWF0ZUVsZW1lbnQoImJvZHkiKSk7cmV0dXJuIEJ9LF9nZXREb2NGcmFnOmZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5fZG9jRnJhZzsKQnx8KEI9ZC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksSChCKSx0aGlzLl9kb2NGcmFnPUIpO3JldHVybiBCfSxfZ2V0U3R5bGVTaGVldDpmdW5jdGlvbigpe3ZhciBCPXRoaXMuX3N0eWxlU2hlZXQ7aWYoIUIpe3ZhciBCPWQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxJPWQuZG9jdW1lbnRFbGVtZW50LmZpcnN0Q2hpbGQ7SS5pbnNlcnRCZWZvcmUoQixJLmZpcnN0Q2hpbGQpO0IubWVkaWE9InByaW50IjtCLmNsYXNzTmFtZT0icHJpbnRmaXgiO3RoaXMuX3N0eWxlU2hlZXQ9Qn1yZXR1cm4gQn19KTthLm5hbWVzcGFjZSgiSFRNTDUiKS5wcmludEZpeD1GO0YoKX19LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6WyJjb2xsZWN0aW9uIiwiYXVpLW5vZGUtYmFzZSJdfSk7CllVSS5hZGQoImF1aS1zZWxlY3RvciIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLlNlbGVjdG9yLHQ9YS5nZXRDbGFzc05hbWUoInNyLW9ubHkiKSxmPWEuZ2V0Q2xhc3NOYW1lKCJoaWRlIiksZD1SZWdFeHAoL3JlY3RcKCgwKHB4KT8oLCk/KFxzKT8pezR9XCkvaSksYz1SZWdFeHAoZiksYj1SZWdFeHAodCk7cS5faXNOb2RlSGlkZGVuPWZ1bmN0aW9uKGcpe3ZhciBlPWcub2Zmc2V0V2lkdGgsaz1nLm9mZnNldEhlaWdodCxtPSJ0ciI9PT1nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkscD1nLmNsYXNzTmFtZTtnPWcuc3R5bGU7dmFyIHM9ITE7bXx8KDA9PT1lJiYwPT09az9zPSEwOjA8ZSYmMDxrJiYocz0hMSkpO3JldHVybiBzPXN8fCJub25lIj09PWcuZGlzcGxheXx8ImhpZGRlbiI9PT1nLnZpc2liaWxpdHl8fCJhYnNvbHV0ZSI9PT1nLnBvc2l0aW9uJiZkLnRlc3QoZy5jbGlwKXx8Yy50ZXN0KHApfHxiLnRlc3QocCl9O3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0KZ319O2EubWl4KHEucHNldWRvcyx7YnV0dG9uOmZ1bmN0aW9uKGcpe3JldHVybiJidXR0b24iPT09Zy50eXBlfHwiYnV0dG9uIj09PWcubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0sY2hlY2tib3g6dCgiY2hlY2tib3giKSxjaGVja2VkOmZ1bmN0aW9uKGcpe3JldHVybiEwPT09Zy5jaGVja2VkfSxkaXNhYmxlZDpmdW5jdGlvbihnKXtyZXR1cm4hMD09PWcuZGlzYWJsZWR9LGVtcHR5OmZ1bmN0aW9uKGcpe3JldHVybiFnLmZpcnN0Q2hpbGR9LGVuYWJsZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuITE9PT1nLmRpc2FibGVkJiYiaGlkZGVuIiE9PWcudHlwZX0sZmlsZTp0KCJmaWxlIiksaGVhZGVyOmZ1bmN0aW9uKGcpe3JldHVybi9oXGQvaS50ZXN0KGcubm9kZU5hbWUpfSxoaWRkZW46ZnVuY3Rpb24oZyl7cmV0dXJuIHEuX2lzTm9kZUhpZGRlbihnKX0saW1hZ2U6dCgiaW1hZ2UiKSxpbnB1dDpmdW5jdGlvbihnKXtyZXR1cm4vaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pLnRlc3QoZy5ub2RlTmFtZSl9LApwYXJlbnQ6ZnVuY3Rpb24oZyl7cmV0dXJuISFnLmZpcnN0Q2hpbGR9LHBhc3N3b3JkOnQoInBhc3N3b3JkIikscmFkaW86dCgicmFkaW8iKSxyZXNldDp0KCJyZXNldCIpLHNlbGVjdGVkOmZ1bmN0aW9uKGcpe3JldHVybiEwPT09Zy5zZWxlY3RlZH0sc3VibWl0OnQoInN1Ym1pdCIpLHRleHQ6dCgidGV4dCIpLHZpc2libGU6ZnVuY3Rpb24oZyl7cmV0dXJuIXEuX2lzTm9kZUhpZGRlbihnKX19KX0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbInNlbGVjdG9yLWNzczMiLCJhdWktY2xhc3NuYW1lbWFuYWdlciJdfSk7CllVSS5hZGQoImF1aS10aW1lciIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLkxhbmcubm93LHQ9YS5PYmplY3QuaXNFbXB0eSxmPWEuQXJyYXksZD17Y2xlYXJJbnRlcnZhbDpmdW5jdGlvbihjKXtkLnVucmVnaXN0ZXIoITAsYyl9LGNsZWFyVGltZW91dDpmdW5jdGlvbihjKXtkLnVucmVnaXN0ZXIoITEsYyl9LGludGVydmFsVGltZTpmdW5jdGlvbihjKXt2YXIgYj1kO2FyZ3VtZW50cy5sZW5ndGgmJihiLl9JTlRFUlZBTD1jKTtyZXR1cm4gYi5fSU5URVJWQUx9LGlzUmVwZWF0YWJsZTpmdW5jdGlvbihjKXtyZXR1cm4gYy5yZXBlYXRzfSxzZXRUaW1lb3V0OmZ1bmN0aW9uKGMsYixnKXt2YXIgZT1kLGs9Zihhcmd1bWVudHMsMywhMCk7cmV0dXJuIGUucmVnaXN0ZXIoITEsYyxiLGcsayl9LHNldEludGVydmFsOmZ1bmN0aW9uKGMsYixnKXt2YXIgZT1kLGs9Zihhcmd1bWVudHMsMywhMCk7cmV0dXJuIGUucmVnaXN0ZXIoITAsYyxiLGcsayl9LHJlZ2lzdGVyOmZ1bmN0aW9uKGMsYixnLAplLGspe3ZhciBtPWQscD0rK2EuRW52Ll91aWR4O2s9a3x8W107ay51bnNoaWZ0KGIsZSk7bS5fVEFTS1NbcF09bS5fY3JlYXRlKGMsbS5fZ2V0TmVhcmVzdEludGVydmFsKGcpLGEucmJpbmQuYXBwbHkoYSxrKSk7bS5fbGF6eUluaXQoKTtyZXR1cm4gcH0scnVuOmZ1bmN0aW9uKGMpe2MubGFzdFJ1blRpbWU9cSgpO3JldHVybiBjLmZuKCl9LHVucmVnaXN0ZXI6ZnVuY3Rpb24oYyxiKXt2YXIgZz1kLGU9Zy5fVEFTS1Msaz1lW2JdO2cuX2xhenlEZXN0cm95KCk7cmV0dXJuIGsmJmsucmVwZWF0cz09PWMmJmRlbGV0ZSBlW2JdfSxfY3JlYXRlOmZ1bmN0aW9uKGMsYixnKXtyZXR1cm57Zm46ZyxsYXN0UnVuVGltZTpxKCksbmV4dDpiLHJlcGVhdHM6Yyx0aW1lb3V0OmJ9fSxfZGVjcmVtZW50TmV4dFJ1blRpbWU6ZnVuY3Rpb24oYyl7cmV0dXJuIGMubmV4dD1jLnRpbWVvdXQtKHEoKS1jLmxhc3RSdW5UaW1lKX0sX2dldE5lYXJlc3RJbnRlcnZhbDpmdW5jdGlvbihjKXt2YXIgYj1kLl9JTlRFUlZBTCwKZz1jJWI7cmV0dXJuIGc8Yi8yP2MtZzpjK2ItZ30sX2xhenlEZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGM9ZDtjLl9pbml0aWFsaXplZCYmdChjLl9UQVNLUykmJihjbGVhclRpbWVvdXQoYy5fZ2xvYmFsSW50ZXJ2YWxJZCksYy5faW5pdGlhbGl6ZWQ9ITEpfSxfbGF6eUluaXQ6ZnVuY3Rpb24oKXt2YXIgYz1kO2MuX2luaXRpYWxpemVkfHx0KGMuX1RBU0tTKXx8KGMuX2xhc3RSdW5UaW1lPXEoKSxjLl9nbG9iYWxJbnRlcnZhbElkPXNldFRpbWVvdXQoYy5fcnVubmVyLGMuX0lOVEVSVkFMKSxjLl9pbml0aWFsaXplZD0hMCl9LF9sb29wOmZ1bmN0aW9uKGMsYixnKXtmb3IodmFyIGU9ZCxrPWUuX0lOVEVSVkFMLG09ZS5fVEFTS1MscD1rLzIscz1xKCk7YzxnJiY1MD5xKCktcztjKyspe3ZhciBsPWJbY10saD1tW2xdO2gmJmUuX2RlY3JlbWVudE5leHRSdW5UaW1lKGgpPHAmJihlLnJ1bihoKSxlLmlzUmVwZWF0YWJsZShoKT9lLl9yZXNldE5leHRSdW5UaW1lKGgpOmUudW5yZWdpc3RlcighMSwKbCkpfWUuX2luaXRpYWxpemVkJiYoZS5fZ2xvYmFsSW50ZXJ2YWxJZD1jPGc/c2V0VGltZW91dChlLl9sb29wLDEwKTpzZXRUaW1lb3V0KGUuX3J1bm5lcixrKSl9LF9ydW5uZXI6ZnVuY3Rpb24oKXt2YXIgYz1kLGI9YS5PYmplY3Qua2V5cyhjLl9UQVNLUyk7Yy5fbG9vcCgwLGIsYi5sZW5ndGgpfSxfcmVzZXROZXh0UnVuVGltZTpmdW5jdGlvbihjKXtyZXR1cm4gYy5uZXh0PWMudGltZW91dH0sX0lOVEVSVkFMOjUwLF9UQVNLUzp7fSxfbGFzdFJ1blRpbWU6MCxfZ2xvYmFsSW50ZXJ2YWxJZDowLF9pbml0aWFsaXplZDohMX07YS5jbGVhckludGVydmFsPWQuY2xlYXJJbnRlcnZhbDthLmNsZWFyVGltZW91dD1kLmNsZWFyVGltZW91dDthLnNldEludGVydmFsPWQuc2V0SW50ZXJ2YWw7YS5zZXRUaW1lb3V0PWQuc2V0VGltZW91dDthLlRpbWVyPWR9LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6WyJvb3AiXX0pOwooZnVuY3Rpb24oKXt2YXIgYT1BVUkoKS51c2UoIm9vcCIpLEU9e30scT17cHJvdmlkZTpmdW5jdGlvbih0LGYsZCxjLGIpe0FycmF5LmlzQXJyYXkoYyl8fChjPVtjXSk7dmFyIGcsZT1hLmd1aWQoKTthLkxhbmcuaXNPYmplY3QoZCwhMCkmJihnPWQsZD1nLmZuLGc9Zy5iZWZvcmUsYS5MYW5nLmlzRnVuY3Rpb24oZyl8fChnPW51bGwpKTtiJiZhLkxhbmcuaXNGdW5jdGlvbih0KSYmKHQ9dC5wcm90b3R5cGUpO3EuX2dldEFPUCh0LGYpJiZkZWxldGUgdC5feXVpYW9wW2ZdO2c9ZnVuY3Rpb24oKXt2YXIgaz1hcmd1bWVudHMsbT10O2ImJihtPXRoaXMpO2lmKDE9PWMubGVuZ3RoJiZjWzBdaW4gRSlxLl9yZXBsYWNlTWV0aG9kKHQsZixkLG0pLGQuYXBwbHkobSxrKTtlbHNle3ZhciBwPSExLHM9cS5fcHJveHlMb2FkZXJzW2VdO3N8fChwPSEwLHEuX3Byb3h5TG9hZGVyc1tlXT1uZXcgYS5RdWV1ZSxzPXEuX3Byb3h5TG9hZGVyc1tlXSk7cy5hZGQoayk7cCYmKGMucHVzaChhLmJpbmQocS5fcHJveHksCkxpZmVyYXksdCxmLGQsbSxlLGMpKSxhLnVzZS5hcHBseShhLGMpKX19O2cudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZC50b1N0cmluZygpfTt0W2ZdPWd9LF9nZXRBT1A6ZnVuY3Rpb24odCxmKXtyZXR1cm4gdC5feXVpYW9wJiZ0Ll95dWlhb3BbZl19LF9wcm94eTpmdW5jdGlvbih0LGYsZCxjLGIsZyxlKXtiPXEuX3Byb3h5TG9hZGVyc1tiXTtmb3IocS5fcmVwbGFjZU1ldGhvZCh0LGYsZCxjKTt0PWIubmV4dCgpOylkLmFwcGx5KGMsdCk7Zm9yKGQ9Zy5sZW5ndGgtMTswPD1kO2QtLSlFW2dbZF1dPSEwfSxfcmVwbGFjZU1ldGhvZDpmdW5jdGlvbih0LGYsZCxjKXtjPXEuX2dldEFPUCh0LGYpO3ZhciBiPXRbZl07Yz8oYj1jLm1ldGhvZCxjLm1ldGhvZD1kKTp0W2ZdPWQ7YS5taXgoZCxiKX0sX3Byb3h5TG9hZGVyczp7fX07TGlmZXJheS5EZXBlbmRlbmN5PXE7TGlmZXJheS5wcm92aWRlPXEucHJvdmlkZX0pKCk7CihmdW5jdGlvbihhKXthLkRPTVRhc2tSdW5uZXI9e2FkZFRhc2s6ZnVuY3Rpb24oRSl7dGhpcy5fc2NoZWR1bGVkVGFza3MucHVzaChFKX0sYWRkVGFza1N0YXRlOmZ1bmN0aW9uKEUpe3RoaXMuX3Rhc2tTdGF0ZXMucHVzaChFKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl90YXNrU3RhdGVzLmxlbmd0aD0wO3RoaXMuX3NjaGVkdWxlZFRhc2tzLmxlbmd0aD0wfSxydW5UYXNrczpmdW5jdGlvbihFKXtmb3IodmFyIHE9dGhpcy5fc2NoZWR1bGVkVGFza3MsdD10aGlzLl90YXNrU3RhdGVzLGY9cS5sZW5ndGgsZD10Lmxlbmd0aCxjPTA7YzxmO2MrKylmb3IodmFyIGI9cVtjXSxnPWIucGFyYW1zLGU9MDtlPGQ7ZSsrKXt2YXIgaz10W2VdO2IuY29uZGl0aW9uKGssZyxFKSYmYi5hY3Rpb24oayxnLEUpfX0sX3NjaGVkdWxlZFRhc2tzOltdLF90YXNrU3RhdGVzOltdfX0pKExpZmVyYXkpO0xpZmVyYXkub249ZnVuY3Rpb24oKXt9O0xpZmVyYXkuZmlyZT1mdW5jdGlvbigpe307CkxpZmVyYXkuZGV0YWNoPWZ1bmN0aW9uKCl7fTsKKGZ1bmN0aW9uKGEsRSl7dmFyIHE9e30sdD1hLmNvbmZpZy5kb2M7RS5wcm92aWRlKEUsImRlbGVnYXRlQ2xpY2siLGZ1bmN0aW9uKGYsZCl7dmFyIGM9dC5nZXRFbGVtZW50QnlJZChmKTtjJiZjLmlkPT1mJiYoYz1hLm9uZShjKS5hZGRDbGFzcygibGZyLWRlbGVnYXRlLWNsaWNrIikuZ3VpZCgpLHFbY109ZCxFLl9iYXNlRGVsZWdhdGVIYW5kbGV8fChFLl9iYXNlRGVsZWdhdGVIYW5kbGU9YS5nZXRCb2R5KCkuZGVsZWdhdGUoImNsaWNrIixFLl9iYXNlRGVsZWdhdGUsIi5sZnItZGVsZWdhdGUtY2xpY2siKSkpfSxbImF1aS1iYXNlIl0pO0UuX2Jhc2VEZWxlZ2F0ZT1mdW5jdGlvbihmKXt2YXIgZD1mLmN1cnJlbnRUYXJnZXQuYXR0cigiaWQiKTsoZD1xW2RdKSYmZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O0UuX0NMSUNLX0VWRU5UUz1xO2EudXNlKCJhdHRyaWJ1dGUiLCJvb3AiLGZ1bmN0aW9uKGYpe2YuYXVnbWVudChFLGYuQXR0cmlidXRlLCEwKX0pfSkoQVVJKCksTGlmZXJheSk7CihmdW5jdGlvbihhLEUpe3ZhciBxPXtnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fTthLnVzZSgiaW8tYmFzZSIsZnVuY3Rpb24odCl7cS5nZXQ9dC5jYWNoZWQoZnVuY3Rpb24oZixkKXt2YXIgYz10aGVtZURpc3BsYXkuZ2V0UGF0aENvbnRleHQoKSsiL2xhbmd1YWdlLyIrdGhlbWVEaXNwbGF5LmdldExhbmd1YWdlSWQoKSsiLyIrZisiLyI7ZCYmKCJzdHJpbmciPT10eXBlb2YgZD9jKz1kOkFycmF5LmlzQXJyYXkoZCkmJihjKz1kLmpvaW4oIi8iKSkpO3ZhciBiPSIiO3QuaW8oYyx7aGVhZGVyczp7IlgtQ1NSRi1Ub2tlbiI6RS5hdXRoVG9rZW59LG1ldGhvZDoiR0VUIixvbjp7Y29tcGxldGU6ZnVuY3Rpb24oZyxlKXtiPWUucmVzcG9uc2VUZXh0fX0sc3luYzohMH0pO3JldHVybiBifSl9KTtFLkxhbmd1YWdlPXF9KShBVUkoKSxMaWZlcmF5KTtMaWZlcmF5PXdpbmRvdy5MaWZlcmF5fHx7fTsKKGZ1bmN0aW9uKGEsRSxxKXt2YXIgdD0vXmdldCQvaTtxLm5hbWVzcGFjZT1FLm5hbWVzcGFjZTthLmFqYXhTZXR1cCh7ZGF0YTp7fSx0eXBlOiJQT1NUIn0pO2EuYWpheFByZWZpbHRlcihmdW5jdGlvbihjKXtjLmNyb3NzRG9tYWluJiYoYy5jb250ZW50cy5zY3JpcHQ9ITEpO2MudXJsJiYoYy51cmw9cS5VdGlsLmdldFVSTFdpdGhTZXNzaW9uSWQoYy51cmwpKX0pO3ZhciBmPWZ1bmN0aW9uKCl7dmFyIGM9Zi5wYXJzZUludm9rZUFyZ3MoYXJndW1lbnRzKTtyZXR1cm4gZi5pbnZva2UuYXBwbHkoZixjKX07RS5hc3NpZ24oZix7VVJMX0lOVk9LRTp0aGVtZURpc3BsYXkuZ2V0UGF0aENvbnRleHQoKSsiL2FwaS9qc29ud3MvaW52b2tlIixiaW5kOmZ1bmN0aW9uKCl7dmFyIGM9RS50b0FycmF5KGFyZ3VtZW50cyk7Yy51bnNoaWZ0KHEuU2VydmljZSxxKTtyZXR1cm4gRS5iaW5kLmFwcGx5KEUsYyl9LHBhcnNlSW52b2tlQXJnczpmdW5jdGlvbihjKXt2YXIgYj1jWzBdLGc9dGhpcy5wYXJzZUlPQ29uZmlnKGMpOwpFLmlzU3RyaW5nKGIpJiYoYj10aGlzLnBhcnNlU3RyaW5nUGF5bG9hZChjKSx0aGlzLnBhcnNlSU9Gb3JtQ29uZmlnKGcsYyksYz1jW2MubGVuZ3RoLTFdLEUuaXNPYmplY3QoYykmJmMubWV0aG9kJiYoZy5tZXRob2Q9Yy5tZXRob2QpKTtyZXR1cm5bYixnXX0scGFyc2VJT0NvbmZpZzpmdW5jdGlvbihjKXt2YXIgYj1jWzBdLGc9Yi5pb3x8e307ZGVsZXRlIGIuaW87aWYoIWcuc3VjY2Vzcyl7Yz1FLmZpbHRlcihjLEUuaXNGdW5jdGlvbik7dmFyIGU9Y1sxXSxrPWNbMF07ZXx8KGU9ayk7Zy5jb21wbGV0ZT1mdW5jdGlvbihtKXttPW0ucmVzcG9uc2VKU09OO251bGw9PT1tfHxFLmhhcyhtLCJleGNlcHRpb24iKT9lJiZlLmNhbGwodGhpcyxtP20uZXhjZXB0aW9uOiJUaGUgc2VydmVyIHJldHVybmVkIGFuIGVtcHR5IHJlc3BvbnNlIixtKTprJiZrLmNhbGwodGhpcyxtKX19IUUuaGFzKGcsImNhY2hlIikmJnQudGVzdChnLnR5cGUpJiYoZy5jYWNoZT0hMSk7cS5Qcm9wc1ZhbHVlcy5OVExNX0FVVEhfRU5BQkxFRCYmCnEuQnJvd3Nlci5pc0llKCkmJihnLnR5cGU9IkdFVCIpO3JldHVybiBnfSxwYXJzZUlPRm9ybUNvbmZpZzpmdW5jdGlvbihjLGIpe3ZhciBnPWJbMV07ZyYmKGcuX25vZGV8fGcuanF1ZXJ5fHxnLm5vZGVUeXBlKSYmKGMuZm9ybT1nLCJtdWx0aXBhcnQvZm9ybS1kYXRhIj09Yy5mb3JtLmVuY3R5cGUmJihjLmNvbnRlbnRUeXBlPSExLGMucHJvY2Vzc0RhdGE9ITEpKX0scGFyc2VTdHJpbmdQYXlsb2FkOmZ1bmN0aW9uKGMpe3ZhciBiPXt9LGc9e30sZT1jWzFdO0UuaXNGdW5jdGlvbihlKXx8ZSYmKGUuX25vZGV8fGUuanF1ZXJ5fHxlLm5vZGVUeXBlKXx8KGI9ZSk7Z1tjWzBdXT1iO3JldHVybiBnfX0sITApO2YuaW52b2tlPWZ1bmN0aW9uKGMsYil7dmFyIGc9SlNPTi5zdHJpbmdpZnkoYyksZT1xLmF1dGhUb2tlbjtFLmRlZmF1bHRzKGIse2RhdGE6e2NtZDpnLHBfYXV0aDplfSxkYXRhVHlwZToiSlNPTiJ9KTtiLmZvcm0mJigibXVsdGlwYXJ0L2Zvcm0tZGF0YSI9PWIuZm9ybS5lbmN0eXBlJiYKRS5pc0Z1bmN0aW9uKHdpbmRvdy5Gb3JtRGF0YSk/KGIuZGF0YT1uZXcgRm9ybURhdGEoYi5mb3JtKSxiLmRhdGEuYXBwZW5kKCJjbWQiLGcpLGIuZGF0YS5hcHBlbmQoInBfYXV0aCIsZSkpOkUuZm9yRWFjaChhKGIuZm9ybSkuc2VyaWFsaXplQXJyYXkoKSxmdW5jdGlvbihrLG0pe2IuZGF0YVtrLm5hbWVdPWsudmFsdWV9KSxkZWxldGUgYi5mb3JtKTtyZXR1cm4gYS5hamF4KHRoaXMuVVJMX0lOVk9LRSxiKX07RS5mb3JFYWNoKFsiZ2V0IiwiZGVsZXRlIiwicG9zdCIsInB1dCIsInVwZGF0ZSJdLGZ1bmN0aW9uKGMsYil7dmFyIGc9YzsiZGVsZXRlIj09PWMmJihnPSJkZWwiKTtmW2ddPUUuYmluZEtleVJpZ2h0KHEsIlNlcnZpY2UiLHttZXRob2Q6Y30pfSk7cS5TZXJ2aWNlPWY7dmFyIGQ9e307cS5jb21wb25lbnQ9ZnVuY3Rpb24oYyxiKXt2YXIgZzsxPT09YXJndW1lbnRzLmxlbmd0aD8oZz1kW2NdKSYmRS5pc0Z1bmN0aW9uKGcpJiYoZz1nKCksZFtjXT1nKTooZz1kW2NdPWIsCnEuZmlyZShjKyI6cmVnaXN0ZXJlZCIpKTtyZXR1cm4gZ307cS5fY29tcG9uZW50cz1kO3EuX2NvbXBvbmVudHNGbj1kO3EuVGVtcGxhdGU9e1BPUlRMRVQ6J1x4M2NkaXYgY2xhc3NceDNkInBvcnRsZXQiXHgzZVx4M2NkaXYgY2xhc3NceDNkInBvcnRsZXQtdG9wcGVyIlx4M2VceDNjZGl2IGNsYXNzXHgzZCJwb3J0bGV0LXRpdGxlIlx4M2VceDNjL2Rpdlx4M2VceDNjL2Rpdlx4M2VceDNjZGl2IGNsYXNzXHgzZCJwb3J0bGV0LWNvbnRlbnQiXHgzZVx4M2MvZGl2XHgzZVx4M2NkaXYgY2xhc3NceDNkImZvcmJpZGRlbi1hY3Rpb24iXHgzZVx4M2MvZGl2XHgzZVx4M2MvZGl2XHgzZSd9fSkoQVVJLiQsQVVJLl8sTGlmZXJheSk7KGZ1bmN0aW9uKGEsRSl7YS5taXgoYS5uYW1lc3BhY2UoImNvbmZpZy5pbyIpLHttZXRob2Q6IlBPU1QiLHVyaUZvcm1hdHRlcjpmdW5jdGlvbihxKXtyZXR1cm4gRS5VdGlsLmdldFVSTFdpdGhTZXNzaW9uSWQocSl9fSwhMCl9KShBVUkoKSxMaWZlcmF5KTsKKGZ1bmN0aW9uKGEsRSxxLHQpe2EudXNlKCJhdWktYmFzZS1sYW5nIik7dmFyIGY9YS5BcnJheSxkPWEuTGFuZyxjPXtmYWxzZTp7Y3NzQ2xhc3M6ImNvbnRyb2xzLWhpZGRlbiIsaWNvbkNzc0NsYXNzOiJoaWRkZW4iLHN0YXRlOiJoaWRkZW4ifSx0cnVlOntjc3NDbGFzczoiY29udHJvbHMtdmlzaWJsZSIsaWNvbkNzc0NsYXNzOiJ2aWV3IixzdGF0ZToidmlzaWJsZSJ9fSxiPS9eKD86cF9wX2lkKT9fKC4qKV8uKiQvLGc9e3NyYzoiaGlkZUxpbmsifSxlPSdceDNjc3ZnIGNsYXNzXHgzZCJsZXhpY29uLWljb24gbGV4aWNvbi1pY29uLXswfSB7MX0iIGZvY3VzYWJsZVx4M2QiZmFsc2UiIHJvbGVceDNkImltYWdlIlx4M2VceDNjdXNlIGRhdGEtaHJlZlx4M2QiJyt0aGVtZURpc3BsYXkuZ2V0UGF0aFRoZW1lSW1hZ2VzKCkrJy9sZXhpY29uL2ljb25zLnN2ZyN7MH0iIC9ceDNlXHgzY3RpdGxlXHgzZXswfVx4M2MvdGl0bGVceDNlJyxrPXtfbWFwOnt9fSxtPXtzdWJtaXRDb3VudGRvd246MCwKYWRkSW5wdXRDYW5jZWw6ZnVuY3Rpb24oKXthLnVzZSgiYXVpLWJ1dHRvbi1zZWFyY2gtY2FuY2VsIixmdW5jdGlvbihwKXtuZXcgcC5CdXR0b25TZWFyY2hDYW5jZWwoe3RyaWdnZXI6ImlucHV0W3R5cGVceDNkcGFzc3dvcmRdLCBpbnB1dFt0eXBlXHgzZHNlYXJjaF0sIGlucHV0LmNsZWFyYWJsZSwgaW5wdXQuc2VhcmNoLXF1ZXJ5In0pfSk7bS5hZGRJbnB1dENhbmNlbD1mdW5jdGlvbigpe319LGFkZFBhcmFtczpmdW5jdGlvbihwLHMpe3A9cS5pc09iamVjdChwKT9FLnBhcmFtKHAsITApOlN0cmluZyhwKS50cmltKCk7dmFyIGw9c3x8bG9jYXRpb24uaHJlZixoPWw7aWYocCl7dmFyIHU7LTE8bC5pbmRleE9mKCIjIikmJih1PWwuc3BsaXQoIiMiKSxsPXVbMF0sdT11WzFdKTtwPS0xPT1sLmluZGV4T2YoIj8iKT8iPyIrcDoiXHgyNiIrcDstMT09bC5pbmRleE9mKHApJiYoaD1sK3AsdSYmKGgrPSIjIit1KSxzfHwobG9jYXRpb24uaHJlZj1oKSl9cmV0dXJuIGh9LGNoZWNrQWxsOmZ1bmN0aW9uKHAsCnMsbCxoKXtpZihwKXtwPW0uZ2V0RE9NKHApO2w9bS5nZXRET00obCk7cz1xLmlzQXJyYXkocyk/ImlucHV0W25hbWVceDNkIitzLmpvaW4oIl0sIGlucHV0W25hbWVceDNkIikrIl0iOiJpbnB1dFtuYW1lXHgzZCIrcysiXSI7cD1FKHApO3ZhciB1PUUobCkucHJvcCgiY2hlY2tlZCIpO3AuZmluZChzKS5lYWNoKGZ1bmN0aW9uKHcseil7ej1FKHopO3oucHJvcCgiZGlzYWJsZWQiKXx8ei5wcm9wKCJjaGVja2VkIix1KX0pO2gmJnAuZmluZChoKS50b2dnbGVDbGFzcygiaW5mbyIsdSl9fSxjaGVja0FsbEJveDpmdW5jdGlvbihwLHMsbCl7dmFyIGg9MDtpZihwKXtwPW0uZ2V0RE9NKHApO2w9bS5nZXRET00obCk7cD1FKHApO3ZhciB1PUUobCk7dS5sZW5ndGh8fCh1PXAuZmluZCgnaW5wdXRbbmFtZVx4M2QiJytsKyciXScpKTt2YXIgdz0wO3A9cC5maW5kKCJpbnB1dFt0eXBlXHgzZGNoZWNrYm94XSIpO3EuaXNBcnJheShzKXx8KHM9W3NdKTtwLmVhY2goZnVuY3Rpb24oeixBKXtBPQpFKEEpOyFBLmlzKHUpJiYtMTxxLmluZGV4T2YocyxBLmF0dHIoIm5hbWUiKSkmJih3KyssQS5wcm9wKCJjaGVja2VkIikmJmgrKyl9KTt1LnByb3AoImNoZWNrZWQiLHc9PWgpfXJldHVybiBofSxjaGVja1RhYjpmdW5jdGlvbihwKXtkb2N1bWVudC5hbGwmJjk9PXdpbmRvdy5ldmVudC5rZXlDb2RlJiYocC5zZWxlY3Rpb249ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksc2V0VGltZW91dChmdW5jdGlvbigpe20ucHJvY2Vzc1RhYihwLmlkKX0sMCkpfSxkaXNhYmxlRWxlbWVudHM6ZnVuY3Rpb24ocCl7aWYocD1FKHApWzBdKXtwPXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtmb3IodmFyIHM9cS5jb25zdGFudCghMSksbD1wLmxlbmd0aC0xOzA8PWw7bC0tKXt2YXIgaD1wW2xdO2guc3R5bGUuY3Vyc29yPSJkZWZhdWx0IjtoLm9uY2xpY2s9cztoLm9ubW91c2VvdmVyPXM7aC5vbm1vdXNlb3V0PXM7aC5vbm1vdXNlZW50ZXI9cztoLm9ubW91c2VsZWF2ZT1zO2guYWN0aW9uPQoiIjtoLmRpc2FibGVkPSEwO2guaHJlZj0iamF2YXNjcmlwdDo7IjtoLm9uc3VibWl0PXM7RShoKS5vZmYoKX19fSxkaXNhYmxlRXNjOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWxsJiYyNz09d2luZG93LmV2ZW50LmtleUNvZGUmJih3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWU9ITEpfSxkaXNhYmxlRm9ybUJ1dHRvbnM6ZnVuY3Rpb24ocCxzKXtwLmF0dHIoImRpc2FibGVkIiwhMCk7cC5zZXRTdHlsZSgib3BhY2l0eSIsMC41KTtpZihhLlVBLmdlY2tvKWEuZ2V0V2luKCkub24oInVubG9hZCIsZnVuY3Rpb24obCl7cC5hdHRyKCJkaXNhYmxlZCIsITEpfSk7ZWxzZSBhLlVBLnNhZmFyaSYmYS51c2UoIm5vZGUtZXZlbnQtaHRtbDUiLGZ1bmN0aW9uKGwpe2wuZ2V0V2luKCkub24oInBhZ2VoaWRlIixmdW5jdGlvbihoKXttLmVuYWJsZUZvcm1CdXR0b25zKHAscyl9KX0pfSxkaXNhYmxlVG9nZ2xlQm94ZXM6ZnVuY3Rpb24ocCxzLGwpe3A9RSgiIyIrcCk7dmFyIGg9RSgiIyIrcyk7aC5wcm9wKCJkaXNhYmxlZCIsCmwmJnAucHJvcCgiY2hlY2tlZCIpKTtwLm9uKCJjbGljayIsZnVuY3Rpb24oKXtoLnByb3AoImRpc2FibGVkIiwhaC5wcm9wKCJkaXNhYmxlZCIpKX0pfSxlbmFibGVGb3JtQnV0dG9uczpmdW5jdGlvbihwKXttLl9zdWJtaXRMb2NrZWQ9bnVsbDttLnRvZ2dsZURpc2FibGVkKHAsITEpfSxlc2NhcGVDREFUQTpmdW5jdGlvbihwKXtyZXR1cm4gcC5yZXBsYWNlKC88IVxbQ0RBVEFcW3xcXVxdPi9naSxmdW5jdGlvbihzKXt2YXIgbD0iIjsiXV1ceDNlIj09cz9sPSJdXVx4MjZndDsiOiJceDNjIVtDREFUQVsiPT1zJiYobD0iXHgyNmx0OyFbQ0RBVEFbIik7cmV0dXJuIGx9KX0sZm9jdXNGb3JtRmllbGQ6ZnVuY3Rpb24ocCl7dmFyIHM9RShkb2N1bWVudCksbD0hMTtwPW0uZ2V0RE9NKHApO3A9RShwKTtzLm9uKCJjbGljay5mb2N1c0Zvcm1GaWVsZCIsZnVuY3Rpb24odyl7bD0hMDtzLm9mZigiY2xpY2suZm9jdXNGb3JtRmllbGQiKX0pO2lmKCFsJiZtLmluQnJvd3NlclZpZXcocCkpe3ZhciBoPQpwLmNsb3Nlc3QoImZvcm0iKSx1PSFwLmlzKCI6ZGlzYWJsZWQiKSYmIXAuaXMoIjpoaWRkZW4iKSYmIXAucGFyZW50cygiOmRpc2FibGVkIikubGVuZ3RoOyFoLmxlbmd0aHx8dT9wLmZvY3VzKCk6KGg9aC5kYXRhKCJmbS1uYW1lc3BhY2UiKSx0Lm9uY2UoaCsiZm9ybVJlYWR5IixmdW5jdGlvbigpe3AuZm9jdXMoKX0pKX19LGZvcmNlUG9zdDpmdW5jdGlvbihwKXtwPW0uZ2V0RE9NKHApO3A9RShwKTtpZihwLmxlbmd0aCl7dmFyIHM9cC5hdHRyKCJocmVmIik7cD0iX2JsYW5rIj09cC5hdHRyKCJ0YXJnZXQiKTt2YXIgbD1FKGRvY3VtZW50LmhyZWZGbSk7cCYmbC5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKTtzdWJtaXRGb3JtKGwscywhcCk7bS5fc3VibWl0TG9ja2VkPW51bGx9fSxnZXRBdHRyaWJ1dGVzOmZ1bmN0aW9uKHAscyl7dmFyIGw9bnVsbDtpZihwKXtwPW0uZ2V0RE9NKHApO3AuanF1ZXJ5JiYocD1wWzBdKTtmb3IodmFyIGw9e30saD1xLmlzRnVuY3Rpb24ocyksdT1xLmlzU3RyaW5nKHMpLAp3PXAuYXR0cmlidXRlcyx6PXcubGVuZ3RoO3otLTspe3ZhciBBPXdbel0sSD1BLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksQT1BLm5vZGVWYWx1ZTtpZih1KWlmKDA9PT1ILmluZGV4T2YocykpSD1ILnN1YnN0cihzLmxlbmd0aCk7ZWxzZSBjb250aW51ZTtlbHNlIGlmKGgmJihBPXMoQSxILHcpLCExPT09QSkpY29udGludWU7bFtIXT1BfX1yZXR1cm4gbH0sZ2V0Q29sdW1uSWQ6ZnVuY3Rpb24ocCl7cmV0dXJuIHAucmVwbGFjZSgvbGF5b3V0LWNvbHVtbl8vLCIiKX0sZ2V0RE9NOmZ1bmN0aW9uKHApe2lmKHAuX25vZGV8fHAuX25vZGVzKXA9cC5nZXRET00oKTtyZXR1cm4gcH0sZ2V0R2VvbG9jYXRpb246ZnVuY3Rpb24ocCxzLGwpe3AmJm5hdmlnYXRvci5nZW9sb2NhdGlvbj9uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKGgpe3AoaC5jb29yZHMubGF0aXR1ZGUsaC5jb29yZHMubG9uZ2l0dWRlLGgpfSxzLGwpOnMmJnMoKX0sZ2V0TGV4aWNvbkljb246ZnVuY3Rpb24ocCwKcyl7cmV0dXJuIEUodGhpcy5nZXRMZXhpY29uSWNvblRwbChwLHMpKVswXX0sZ2V0TGV4aWNvbkljb25UcGw6ZnVuY3Rpb24ocCxzKXtyZXR1cm4gcS5zdWIoZSxwLHN8fCIiKX0sZ2V0T3BlbmVyOmZ1bmN0aW9uKCl7dmFyIHA9ay5fb3BlbmVyO2lmKCFwKXt2YXIgcz10LlV0aWwuZ2V0VG9wKCkuTGlmZXJheS5VdGlsLGw9dC5VdGlsLmdldFdpbmRvd05hbWUoKTtzLldpbmRvdy5fbWFwW2xdJiYocD1zLldpbmRvdy5fbWFwW2xdLl9vcGVuZXIsay5fb3BlbmVyPXApfXJldHVybiBwfHx3aW5kb3cub3BlbmVyfHx3aW5kb3cucGFyZW50fSxnZXRQb3J0bGV0SWQ6ZnVuY3Rpb24ocCl7cmV0dXJuIFN0cmluZyhwKS5yZXBsYWNlKGIsIiQxIil9LGdldFBvcnRsZXROYW1lc3BhY2U6ZnVuY3Rpb24ocCl7cmV0dXJuIl8iK3ArIl8ifSxnZXRUb3A6ZnVuY3Rpb24oKXt2YXIgcD1tLl90b3BXaW5kb3c7aWYoIXApe2Zvcih2YXIgcz13aW5kb3cucGFyZW50LGw7cyE9d2luZG93Oyl7dHJ5e2lmKCJ1bmRlZmluZWQiPT0KdHlwZW9mIHMubG9jYXRpb24uaHJlZilicmVhaztsPXMudGhlbWVEaXNwbGF5fWNhdGNoKGgpe2JyZWFrfWlmKCFsfHwic2ltdWxhdGlvbkRldmljZUlmcmFtZSI9PT13aW5kb3cubmFtZSlicmVhaztlbHNlIGlmKCFsLmlzU3RhdGVQb3BVcCgpfHxzPT1zLnBhcmVudCl7cD1zO2JyZWFrfXM9cy5wYXJlbnR9cHx8KHA9d2luZG93KTttLl90b3BXaW5kb3c9cH1yZXR1cm4gcH0sZ2V0VVJMV2l0aFNlc3Npb25JZDpmdW5jdGlvbihwKXtpZighdGhlbWVEaXNwbGF5LmlzQWRkU2Vzc2lvbklkVG9VUkwoKSlyZXR1cm4gcDt2YXIgcz1wLmluZGV4T2YoIjsiKTtpZigtMTxzKXJldHVybiBwO3ZhciBsPSI7anNlc3Npb25pZFx4M2QiK3RoZW1lRGlzcGxheS5nZXRTZXNzaW9uSWQoKSxzPXAuaW5kZXhPZigiPyIpO2lmKC0xPHMpcmV0dXJuIHAuc3Vic3RyaW5nKDAscykrbCtwLnN1YnN0cmluZyhzKTtzPXAuaW5kZXhPZigiLy8iKTtpZigtMTxzKXt2YXIgaD1wLmxhc3RJbmRleE9mKCIvIik7CmlmKHMrMT09aClyZXR1cm4gcCsiLyIrbH1yZXR1cm4gcCtsfSxnZXRXaW5kb3c6ZnVuY3Rpb24ocCl7cHx8KHA9bS5nZXRXaW5kb3dOYW1lKCkpO3JldHVybiBtLmdldFRvcCgpLkxpZmVyYXkuVXRpbC5XaW5kb3cuZ2V0QnlJZChwKX0sZ2V0V2luZG93TmFtZTpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cubmFtZXx8ay5fbmFtZXx8IiJ9LGdldFdpbmRvd1dpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIDA8d2luZG93LmlubmVyV2lkdGg/d2luZG93LmlubmVyV2lkdGg6c2NyZWVuLndpZHRofSxpbkJyb3dzZXJWaWV3OmZ1bmN0aW9uKHAscyxsKXt2YXIgaD0hMTtwPUUocCk7aWYocC5sZW5ndGgpe2x8fChsPXAub2Zmc2V0KCksbC5ib3R0b209bC50b3ArcC5vdXRlckhlaWdodCgpLGwucmlnaHQ9bC5sZWZ0K3Aub3V0ZXJXaWR0aCgpKTtzfHwocz13aW5kb3cpO3M9RShzKTt2YXIgdT17fTt1LmxlZnQ9cy5zY3JvbGxMZWZ0KCk7dS5yaWdodD11LmxlZnQrcy53aWR0aCgpO3UudG9wPXMuc2Nyb2xsVG9wKCk7CnUuYm90dG9tPXUudG9wK3MuaGVpZ2h0KCk7aWYoaD1sLmJvdHRvbTw9dS5ib3R0b20mJmwubGVmdD49dS5sZWZ0JiZsLnJpZ2h0PD11LnJpZ2h0JiZsLnRvcD49dS50b3Ape3ZhciB3PUUocy5wcm9wKCJmcmFtZUVsZW1lbnQiKSk7dy5sZW5ndGgmJihoPXcub2Zmc2V0KCksdz1oLmxlZnQtdS5sZWZ0LGwubGVmdCs9dyxsLnJpZ2h0Kz13LHU9aC50b3AtdS50b3AsbC50b3ArPXUsbC5ib3R0b20rPXUsaD1tLmluQnJvd3NlclZpZXcocCxzLnByb3AoInBhcmVudCIpLGwpKX19cmV0dXJuIGh9LGlzUGhvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRXaW5kb3dXaWR0aCgpPHQuQlJFQUtQT0lOVFMuUEhPTkV9LGlzVGFibGV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0V2luZG93V2lkdGgoKTx0LkJSRUFLUE9JTlRTLlRBQkxFVH0sbGlzdENoZWNrYm94ZXNFeGNlcHQ6ZnVuY3Rpb24ocCxzLGwsaCl7cD1tLmdldERPTShwKTt2YXIgdT0iaW5wdXRbdHlwZVx4M2RjaGVja2JveF0iOwpsJiYodSs9IltuYW1lXHgzZCIrbCsiXSIpO3JldHVybiBxLnJlZHVjZShFKHApLmZpbmQodSksZnVuY3Rpb24odyx6LEEpe3o9RSh6KTsoQT16LnZhbCgpKSYmei5hdHRyKCJuYW1lIikhPXMmJnoucHJvcCgiY2hlY2tlZCIpPT1oJiYhei5wcm9wKCJkaXNhYmxlZCIpJiZ3LnB1c2goQSk7cmV0dXJuIHd9LFtdKS5qb2luKCl9LGxpc3RDaGVja2VkRXhjZXB0OmZ1bmN0aW9uKHAscyxsKXtyZXR1cm4gbS5saXN0Q2hlY2tib3hlc0V4Y2VwdChwLHMsbCwhMCl9LGxpc3RTZWxlY3Q6ZnVuY3Rpb24ocCxzKXtwPW0uZ2V0RE9NKHApO3JldHVybiBxLnJlZHVjZShFKHApLmZpbmQoIm9wdGlvbiIpLGZ1bmN0aW9uKGwsaCx1KXsoaD1FKGgpLnZhbCgpKSYmbC5wdXNoKGgpO3JldHVybiBsfSxbXSkuam9pbihzfHwiLCIpfSxsaXN0VW5jaGVja2VkRXhjZXB0OmZ1bmN0aW9uKHAscyxsKXtyZXR1cm4gbS5saXN0Q2hlY2tib3hlc0V4Y2VwdChwLHMsbCwhMSl9LG5vcm1hbGl6ZUZyaWVuZGx5VVJMOmZ1bmN0aW9uKHApe3A9CnAucmVwbGFjZSgvW15hLXpBLVowLTlfLV0vZywiLSIpOyItIj09PXBbMF0mJihwPXAucmVwbGFjZSgvXi0rLywiIikpO3A9cC5yZXBsYWNlKC8tLSsvZywiLSIpO3JldHVybiBwLnRvTG93ZXJDYXNlKCl9LG5zOmZ1bmN0aW9uKHAscyl7dmFyIGwsaD10aGlzLl9ucztxLmlzT2JqZWN0KHMpPyhsPXt9LHEuZm9yRWFjaChzLGZ1bmN0aW9uKHUsdyl7dz1oKHAsdyk7bFt3XT11fSkpOmw9aChwLHMpO3JldHVybiBsfSxvcGVuSW5EaWFsb2c6ZnVuY3Rpb24ocCxzKXtwLnByZXZlbnREZWZhdWx0KCk7dmFyIGw9bS5nZXRET00ocC5jdXJyZW50VGFyZ2V0KSxsPUUobCk7cz1hLm1peChsLmRhdGEoKSxzKTtzLnVyaXx8KHMudXJpPWwuZGF0YSgiaHJlZiIpfHxsLmF0dHIoImhyZWYiKSk7cy50aXRsZXx8KHMudGl0bGU9bC5hdHRyKCJ0aXRsZSIpKTt0LlV0aWwub3BlbldpbmRvdyhzKX0sb3BlbldpbmRvdzpmdW5jdGlvbihwLHMpe3Aub3BlbmluZ1dpbmRvdz13aW5kb3c7bS5nZXRUb3AoKS5MaWZlcmF5LlV0aWwuX29wZW5XaW5kb3dQcm92aWRlcihwLApzKX0scHJvY2Vzc1RhYjpmdW5jdGlvbihwKXtkb2N1bWVudC5hbGxbcF0uc2VsZWN0aW9uLnRleHQ9U3RyaW5nLmZyb21DaGFyQ29kZSg5KTtkb2N1bWVudC5hbGxbcF0uZm9jdXMoKX0scmFuZG9tSW50OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLnJhbmRvbSgpKihuZXcgRGF0ZSkuZ2V0VGltZSgpKX0scmVtb3ZlRW50aXR5U2VsZWN0aW9uOmZ1bmN0aW9uKHAscyxsLGgpe0UoIiMiK2grcCkudmFsKDApO0UoIiMiK2grcykudmFsKCIiKTt0LlV0aWwudG9nZ2xlRGlzYWJsZWQobCwhMCk7dC5maXJlKCJlbnRpdHlTZWxlY3Rpb25SZW1vdmVkIil9LHJlb3JkZXI6ZnVuY3Rpb24ocCxzKXtwPW0uZ2V0RE9NKHApO3A9RShwKTtpZigtMT09cC5wcm9wKCJzZWxlY3RlZEluZGV4IikpcC5wcm9wKCJzZWxlY3RlZEluZGV4IiwwKTtlbHNle3ZhciBsPXAuZmluZCgib3B0aW9uOnNlbGVjdGVkIik7cz9xLmZvckVhY2hSaWdodChsLGZ1bmN0aW9uKGgsdSl7aD1FKGgpO3ZhciB3PQpoLnByb3AoImluZGV4Iiksej1wLmZpbmQoIm9wdGlvbiIpLmxlbmd0aC0xO3c9PT16P3AucHJlcGVuZChoKTpoLmluc2VydEFmdGVyKGgubmV4dCgpKX0pOnEuZm9yRWFjaChsLGZ1bmN0aW9uKGgsdSl7aD1FKGgpOzA9PT1oLnByb3AoImluZGV4Iik/cC5hcHBlbmQoaCk6aC5pbnNlcnRCZWZvcmUoaC5wcmV2KCkpfSl9fSxyb3dDaGVja2VyQ2hlY2tBbGxCb3g6ZnVuY3Rpb24ocCxzLGwsaCx1KXttLmNoZWNrQWxsQm94KHAsbCxoKTtzJiZzLnRvZ2dsZUNsYXNzKHUpfSxzYXZlUG9ydGxldFRpdGxlOmZ1bmN0aW9uKHApe3EuZGVmYXVsdHMocCx7ZG9Bc1VzZXJJZDowLHBsaWQ6MCxwb3J0bGV0SWQ6MCx0aXRsZToiIix1cmw6dGhlbWVEaXNwbGF5LmdldFBhdGhNYWluKCkrIi9wb3J0YWwvdXBkYXRlX3BvcnRsZXRfdGl0bGUifSk7RS5hamF4KHAudXJsLHtkYXRhOntkb0FzVXNlcklkOnAuZG9Bc1VzZXJJZCxwX2F1dGg6dC5hdXRoVG9rZW4scF9sX2lkOnAucGxpZCxwb3J0bGV0SWQ6cC5wb3J0bGV0SWQsCnRpdGxlOnAudGl0bGV9fSl9LHNlbGVjdEVudGl0eUhhbmRsZXI6ZnVuY3Rpb24ocCxzLGwpe3A9RShwKTt2YXIgaD1tLmdldE9wZW5lcigpLkxpZmVyYXksdT1wLmZpbmQoIi5zZWxlY3Rvci1idXR0b24iKTtwLm9uKCJjbGljayIsIi5zZWxlY3Rvci1idXR0b24iLGZ1bmN0aW9uKHcpe2lmKCFFKHcudGFyZ2V0KS5hdHRyKCJkYXRhLXByZXZlbnQtc2VsZWN0aW9uIikpe3c9RSh3LmN1cnJlbnRUYXJnZXQpO3ZhciB6PSJ0cnVlIj09PXcuYXR0cigiZGF0YS1jb25maXJtLXNlbGVjdGlvbiIpLEE9dy5hdHRyKCJkYXRhLWNvbmZpcm0tc2VsZWN0aW9uLW1lc3NhZ2UiKTtpZighenx8Y29uZmlybShBKSkhMSE9PWwmJih1LnByb3AoImRpc2FibGVkIiwhMSksdy5wcm9wKCJkaXNhYmxlZCIsITApKSx3PW0uZ2V0QXR0cmlidXRlcyh3LCJkYXRhLSIpLGguZmlyZShzLHcpLG0uZ2V0V2luZG93KCkuaGlkZSgpfX0pO2gub24oImVudGl0eVNlbGVjdGlvblJlbW92ZWQiLGZ1bmN0aW9uKHcpe3UucHJvcCgiZGlzYWJsZWQiLAohMSl9KX0sc2VsZWN0Rm9sZGVyOmZ1bmN0aW9uKHAscyl7RSgiIyIrcytwLmlkU3RyaW5nKS52YWwocC5pZFZhbHVlKTt2YXIgbD1xLnVuZXNjYXBlKHAubmFtZVZhbHVlKTtFKCIjIitzK3AubmFtZVN0cmluZykudmFsKGwpO2w9RSgiIyIrcysicmVtb3ZlRm9sZGVyQnV0dG9uIik7dC5VdGlsLnRvZ2dsZURpc2FibGVkKGwsITEpfSxzZXRDdXJzb3JQb3NpdGlvbjpmdW5jdGlvbihwLHMpe3RoaXMuc2V0U2VsZWN0aW9uUmFuZ2UocCxzLHMpfSxzZXRTZWxlY3Rpb25SYW5nZTpmdW5jdGlvbihwLHMsbCl7cD1tLmdldERPTShwKTtwLmpxdWVyeSYmKHA9cFswXSk7cC5zZXRTZWxlY3Rpb25SYW5nZT8ocC5mb2N1cygpLHAuc2V0U2VsZWN0aW9uUmFuZ2UocyxsKSk6cC5jcmVhdGVUZXh0UmFuZ2UmJihwPXAuY3JlYXRlVGV4dFJhbmdlKCkscC5jb2xsYXBzZSghMCkscC5tb3ZlRW5kKCJjaGFyYWN0ZXIiLGwpLHAubW92ZUVuZCgiY2hhcmFjdGVyIixzKSxwLnNlbGVjdCgpKX0sc2hvd0NhcHNMb2NrOmZ1bmN0aW9uKHAsCnMpe3ZhciBsPXAua2V5Q29kZT9wLmtleUNvZGU6cC53aGljaCxoPXAuc2hpZnRLZXk/cC5zaGlmdEtleToxNj09PWwsdT0ibm9uZSI7aWYoNjU8PWwmJjkwPj1sJiYhaHx8OTc8PWwmJjEyMj49bCYmaCl1PSIiO0UoIiMiK3MpLmNzcygiZGlzcGxheSIsdSl9LHNvcnRCeUFzY2VuZGluZzpmdW5jdGlvbihwLHMpe3A9cFsxXS50b0xvd2VyQ2FzZSgpO3M9c1sxXS50b0xvd2VyQ2FzZSgpO3JldHVybiBwPnM/MTpwPHM/LTE6MH0sc3VibWl0Rm9ybTpmdW5jdGlvbihwKXtwLnN1Ym1pdCgpfSx0b0NoYXJDb2RlOnEubWVtb2l6ZShmdW5jdGlvbihwKXtyZXR1cm4gcS5pbnZva2UocCwiY2hhckNvZGVBdCIpLmpvaW4oIiIpfSksdG9nZ2xlQm94ZXM6ZnVuY3Rpb24ocCxzLGwsaCl7dmFyIHU9RSgiIyIrcCksdz1FKCIjIitzKTtwPXUucHJvcCgiY2hlY2tlZCIpO2wmJihwPSFwKTt3LnRvZ2dsZUNsYXNzKCJoaWRlIiwhcCk7dS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dy50b2dnbGVDbGFzcygiaGlkZSIpOwpoJiZ3LmZpbmQoImlucHV0W3R5cGVceDNkY2hlY2tib3hdIikucHJvcCgiY2hlY2tlZCIsdS5wcm9wKCJjaGVja2VkIikpfSl9LHRvZ2dsZURpc2FibGVkOmZ1bmN0aW9uKHAscyl7cD1tLmdldERPTShwKTtwPUUocCk7cC5lYWNoKGZ1bmN0aW9uKGwsaCl7aD1FKGgpO2gucHJvcCgiZGlzYWJsZWQiLHMpO2gudG9nZ2xlQ2xhc3MoImRpc2FibGVkIixzKX0pfSx0b2dnbGVSYWRpbzpmdW5jdGlvbihwLHMsbCl7cD1FKCIjIitwKTt2YXIgaDtzJiYocS5pc0FycmF5KHMpJiYocz1zLmpvaW4oIiwjIikpLGg9RSgiIyIrcyksaC50b2dnbGVDbGFzcygiaGlkZSIsIXAucHJvcCgiY2hlY2tlZCIpKSk7cC5vbigiY2hhbmdlIixmdW5jdGlvbigpe2gmJmgucmVtb3ZlQ2xhc3MoImhpZGUiKTtsJiYocS5pc0FycmF5KGwpJiYobD1sLmpvaW4oIiwjIikpLEUoIiMiK2wpLmFkZENsYXNzKCJoaWRlIikpfSl9LHRvZ2dsZVNlYXJjaENvbnRhaW5lckJ1dHRvbjpmdW5jdGlvbihwLHMsbCxoKXtFKHMpLm9uKCJjbGljayIsCiJpbnB1dFt0eXBlXHgzZGNoZWNrYm94XSIsZnVuY3Rpb24oKXttLnRvZ2dsZURpc2FibGVkKHAsIW0ubGlzdENoZWNrZWRFeGNlcHQobCxoKSl9KX0sdG9nZ2xlU2VsZWN0Qm94OmZ1bmN0aW9uKHAscyxsKXt2YXIgaD1FKCIjIitwKSx1PUUoIiMiK2wpLHc9cS5pc0Z1bmN0aW9uKHMpO3A9ZnVuY3Rpb24oKXt2YXIgej1oLnZhbCgpLEE9cz09ejt3JiYoQT1zKHoscykpO3UudG9nZ2xlQ2xhc3MoImhpZGUiLCFBKX07cCgpO2gub24oImNoYW5nZSIscCl9LHRvTnVtYmVyOmZ1bmN0aW9uKHApe3JldHVybiBwYXJzZUludChwLDEwKXx8MH0sX2RlZmF1bHRQcmV2aWV3QXJ0aWNsZUZuOmZ1bmN0aW9uKHApe3AucHJldmVudERlZmF1bHQoKTttLmRlZmF1bHRQcmV2aWV3QXJ0aWNsZUZuKHApfSxfZGVmYXVsdFN1Ym1pdEZvcm1GbjpmdW5jdGlvbihwKXt2YXIgcz1wLmZvcm0sbD0hMTtpZihwLnZhbGlkYXRlKXt2YXIgaD10LkZvcm0uZ2V0KHMuYXR0cigiaWQiKSk7aCYmKGg9aC5mb3JtVmFsaWRhdG9yLAphLmluc3RhbmNlT2YoaCxhLkZvcm1WYWxpZGF0b3IpJiYoaC52YWxpZGF0ZSgpLChsPWguaGFzRXJyb3JzKCkpJiZoLmZvY3VzSW52YWxpZEZpZWxkKCkpKX1pZighbCl7bD1wLmFjdGlvbnx8cy5hdHRyKCJhY3Rpb24iKTtwPXAuc2luZ2xlU3VibWl0O2g9cy5hbGwoImJ1dHRvblt0eXBlXHgzZHN1Ym1pdF0sIGlucHV0W3R5cGVceDNkYnV0dG9uXSwgaW5wdXRbdHlwZVx4M2RpbWFnZV0sIGlucHV0W3R5cGVceDNkcmVzZXRdLCBpbnB1dFt0eXBlXHgzZHN1Ym1pdF0iKTttLmRpc2FibGVGb3JtQnV0dG9ucyhoLHMpO20uX3N1Ym1pdExvY2tlZD0hMT09PXA/YS5sYXRlcigxRTMsbSxtLmVuYWJsZUZvcm1CdXR0b25zLFtoLHNdKTohMDtwPW5ldyBhLlVybChsKTtpZihoPXAuZ2V0UGFyYW1ldGVyKCJwX2F1dGgiKSlzLmFwcGVuZCgnXHgzY2lucHV0IG5hbWVceDNkInBfYXV0aCIgdHlwZVx4M2QiaGlkZGVuIiB2YWx1ZVx4M2QiJytoKyciIC9ceDNlJykscC5yZW1vdmVQYXJhbWV0ZXIoInBfYXV0aCIpLApsPXAudG9TdHJpbmcoKTtzLmF0dHIoImFjdGlvbiIsbCk7bS5zdWJtaXRGb3JtKHMpO3MuYXR0cigidGFyZ2V0IiwiIik7bS5fc3VibWl0TG9ja2VkPW51bGx9fSxfZ2V0RWRpdGFibGVJbnN0YW5jZTpmdW5jdGlvbihwKXt2YXIgcz1tLl9FRElUQUJMRTtzfHwocz1uZXcgYS5FZGl0YWJsZSh7YWZ0ZXI6e2NvbnRlbnRUZXh0Q2hhbmdlOmZ1bmN0aW9uKGwpe2lmKCFsLmluaXRpYWwpe3ZhciBoPXRoaXMuZ2V0KCJub2RlIikuZ2V0RGF0YSgicG9ydGxldFRpdGxlRWRpdE9wdGlvbnMiKTttLnNhdmVQb3J0bGV0VGl0bGUoe2RvQXNVc2VySWQ6aC5kb0FzVXNlcklkLHBsaWQ6aC5wbGlkLHBvcnRsZXRJZDpoLnBvcnRsZXRJZCx0aXRsZTpsLm5ld1ZhbH0pfX0sc3RhcnRFZGl0aW5nOmZ1bmN0aW9uKGwpe3ZhciBoPXRoaXM7aWYobD10LkxheW91dCloLl9kcmFnTGlzdGVuZXI9bC5nZXRMYXlvdXRIYW5kbGVyKCkub24oImRyYWc6c3RhcnQiLGZ1bmN0aW9uKHUpe2guZmlyZSgic2F2ZSIpfSl9LApzdG9wRWRpdGluZzpmdW5jdGlvbihsKXt0aGlzLl9kcmFnTGlzdGVuZXImJnRoaXMuX2RyYWdMaXN0ZW5lci5kZXRhY2goKX19LGNzc0NsYXNzOiJsZnItcG9ydGxldC10aXRsZS1lZGl0YWJsZSIsbm9kZTpwfSksbS5fRURJVEFCTEU9cyk7cmV0dXJuIHN9LF9uczpxLmNhY2hlZChmdW5jdGlvbihwLHMpe3EuaXNVbmRlZmluZWQocyl8fDA9PT1zLmxhc3RJbmRleE9mKHAsMCl8fChzPXArcyk7cmV0dXJuIHN9KX07dC5wcm92aWRlKG0sImFmdGVySWZyYW1lTG9hZGVkIixmdW5jdGlvbihwKXt2YXIgcz1hLk5vZGUuX2luc3RhbmNlcyxsPXAuZG9jLGg9bC5feXVpZDtoIGluIHMmJmRlbGV0ZSBzW2hdO3ZhciB1PWEub25lKGwpLHM9dS5vbmUoImJvZHkiKSx3PXAuZGlhbG9nLGw9cy5vbmUoIi5sZnItZm9ybS1jb250ZW50Iik7cy5hZGRDbGFzcygiZGlhbG9nLWlmcmFtZS1wb3B1cCIpO2wmJnMub25lKCIuYnV0dG9uLWhvbGRlci5kaWFsb2ctZm9vdGVyIikmJihzLmFkZENsYXNzKCJkaWFsb2ctd2l0aC1mb290ZXIiKSwKaD1zLm9uZSgiLnBvcnRsZXQtYm9keSBceDNlIC5sZnItcG9ydGxldC1tZXNzYWdlLXN0YWdpbmctYWxlcnQiKSkmJihoLnJlbW92ZSgpLGwucHJlcGVuZChoKSk7cy5hZGRDbGFzcyh3LmlmcmFtZUNvbmZpZy5ib2R5Q3NzQ2xhc3MpO3Aud2luLmZvY3VzKCk7dmFyIHo9ZnVuY3Rpb24oKXtmLmludm9rZShBLCJkZXRhY2giKTt1LnB1cmdlKCEwKX0sQT1bcy5kZWxlZ2F0ZSgic3VibWl0Iix6LCJmb3JtIikscy5kZWxlZ2F0ZSgiY2xpY2siLGZ1bmN0aW9uKEgpe3cuc2V0KCJ2aXNpYmxlIiwhMSxILmN1cnJlbnRUYXJnZXQuaGFzQ2xhc3MoImxmci1oaWRlLWRpYWxvZyIpP2c6bnVsbCk7eigpfSwiLmJ0bi1jYW5jZWwsLmxmci1oaWRlLWRpYWxvZyIpXX0sWyJhdWktYmFzZSJdKTt0LnByb3ZpZGUobSwib3BlbkRETVBvcnRsZXQiLGZ1bmN0aW9uKHAscyl7cD1hLm1lcmdlKHtldmVudE5hbWU6InNlbGVjdFN0cnVjdHVyZSJ9LHApO3ZhciBsO2w9cC5iYXNlUG9ydGxldFVSTD90LlBvcnRsZXRVUkwuY3JlYXRlVVJMKHAuYmFzZVBvcnRsZXRVUkwpOgp0LlBvcnRsZXRVUkwuY3JlYXRlUmVuZGVyVVJMKCk7bC5zZXRFc2NhcGVYTUwoITEpO2wuc2V0RG9Bc0dyb3VwSWQocC5kb0FzR3JvdXBJZHx8dGhlbWVEaXNwbGF5LmdldFNjb3BlR3JvdXBJZCgpKTtsLnNldFBhcmFtZXRlcigiY2xhc3NOYW1lSWQiLHAuY2xhc3NOYW1lSWQpO2wuc2V0UGFyYW1ldGVyKCJjbGFzc1BLIixwLmNsYXNzUEspO2wuc2V0UGFyYW1ldGVyKCJyZXNvdXJjZUNsYXNzTmFtZUlkIixwLnJlc291cmNlQ2xhc3NOYW1lSWQpO2wuc2V0UGFyYW1ldGVyKCJldmVudE5hbWUiLHAuZXZlbnROYW1lKTtsLnNldFBhcmFtZXRlcigiZ3JvdXBJZCIscC5ncm91cElkKTtsLnNldFBhcmFtZXRlcigibW9kZSIscC5tb2RlKTtwLm12Y1BhdGg/bC5zZXRQYXJhbWV0ZXIoIm12Y1BhdGgiLHAubXZjUGF0aCk6bC5zZXRQYXJhbWV0ZXIoIm12Y1BhdGgiLCIvdmlldy5qc3AiKTsibmF2aWdhdGlvblN0YXJ0c09uImluIHAmJmwuc2V0UGFyYW1ldGVyKCJuYXZpZ2F0aW9uU3RhcnRzT24iLApwLm5hdmlnYXRpb25TdGFydHNPbik7bC5zZXRQYXJhbWV0ZXIoInBvcnRsZXRSZXNvdXJjZU5hbWVzcGFjZSIscC5wb3J0bGV0UmVzb3VyY2VOYW1lc3BhY2UpOyJyZWRpcmVjdCJpbiBwJiZsLnNldFBhcmFtZXRlcigicmVkaXJlY3QiLHAucmVkaXJlY3QpOyJyZWZlcmVyUG9ydGxldE5hbWUiaW4gcCYmbC5zZXRQYXJhbWV0ZXIoInJlZmVyZXJQb3J0bGV0TmFtZSIscC5yZWZlcmVyUG9ydGxldE5hbWUpOyJyZWZlcmVyV2ViREFWVG9rZW4iaW4gcCYmbC5zZXRQYXJhbWV0ZXIoInJlZmVyZXJXZWJEQVZUb2tlbiIscC5yZWZlcmVyV2ViREFWVG9rZW4pO2wuc2V0UGFyYW1ldGVyKCJzY29wZVRpdGxlIixwLnRpdGxlKTsic2hvd0FuY2VzdG9yU2NvcGVzImluIHAmJmwuc2V0UGFyYW1ldGVyKCJzaG93QW5jZXN0b3JTY29wZXMiLHAuc2hvd0FuY2VzdG9yU2NvcGVzKTsic2hvd0JhY2tVUkwiaW4gcCYmbC5zZXRQYXJhbWV0ZXIoInNob3dCYWNrVVJMIixwLnNob3dCYWNrVVJMKTsic2hvd0NhY2hlYWJsZUlucHV0ImluCnAmJmwuc2V0UGFyYW1ldGVyKCJzaG93Q2FjaGVhYmxlSW5wdXQiLHAuc2hvd0NhY2hlYWJsZUlucHV0KTsic2hvd0hlYWRlciJpbiBwJiZsLnNldFBhcmFtZXRlcigic2hvd0hlYWRlciIscC5zaG93SGVhZGVyKTsic2hvd01hbmFnZVRlbXBsYXRlcyJpbiBwJiZsLnNldFBhcmFtZXRlcigic2hvd01hbmFnZVRlbXBsYXRlcyIscC5zaG93TWFuYWdlVGVtcGxhdGVzKTtsLnNldFBhcmFtZXRlcigic3RydWN0dXJlQXZhaWxhYmxlRmllbGRzIixwLnN0cnVjdHVyZUF2YWlsYWJsZUZpZWxkcyk7bC5zZXRQYXJhbWV0ZXIoInRlbXBsYXRlSWQiLHAudGVtcGxhdGVJZCk7bC5zZXRQb3J0bGV0SWQodC5Qb3J0bGV0S2V5cy5EWU5BTUlDX0RBVEFfTUFQUElORyk7bC5zZXRXaW5kb3dTdGF0ZSgicG9wX3VwIik7cC51cmk9bC50b1N0cmluZygpO2w9cC5kaWFsb2c7bHx8KGw9e30scC5kaWFsb2c9bCk7dmFyIGg9W3Qub25jZShwLmV2ZW50TmFtZSxzKV0sdT1mdW5jdGlvbih3KXt3Lm5ld1ZhbHx8CihuZXcgYS5FdmVudEhhbmRsZShoKSkuZGV0YWNoKCl9O20ub3BlbldpbmRvdyhwLGZ1bmN0aW9uKHcpe2gucHVzaCh3LmFmdGVyKFsiZGVzdHJveSIsInZpc2libGVDaGFuZ2UiXSx1KSl9KX0sWyJsaWZlcmF5LXBvcnRsZXQtdXJsIl0pO3QucHJvdmlkZShtLCJvcGVuRG9jdW1lbnQiLGZ1bmN0aW9uKHAscyxsKXtpZihhLlVBLmllKXRyeXsobmV3IGEuY29uZmlnLndpbi5BY3RpdmVYT2JqZWN0KCJTaGFyZVBvaW50Lk9wZW5Eb2N1bWVudHMiKSkuRWRpdERvY3VtZW50KHApLGQuaXNGdW5jdGlvbihzKSYmcygpfWNhdGNoKGgpe2QuaXNGdW5jdGlvbihsKSYmbChoKX19LFsiYXVpLWJhc2UiXSk7dC5wcm92aWRlKG0sInBvcnRsZXRUaXRsZUVkaXQiLGZ1bmN0aW9uKHApe3ZhciBzPXAub2JqO2lmKHMpe3ZhciBsPXMub25lKCIucG9ydGxldC10aXRsZS10ZXh0Iik7bCYmIWwuaGFzQ2xhc3MoIm5vdC1lZGl0YWJsZSIpJiYobC5hZGRDbGFzcygicG9ydGxldC10aXRsZS1lZGl0YWJsZSIpLApsLm9uKCJjbGljayIsZnVuY3Rpb24oaCl7dmFyIHU9bS5fZ2V0RWRpdGFibGVJbnN0YW5jZShsKSx3PXUuZ2V0KCJyZW5kZXJlZCIpO3cmJnUuZmlyZSgic3RvcEVkaXRpbmciKTt1LnNldCgibm9kZSIsaC5jdXJyZW50VGFyZ2V0KTt3JiZ1LnN5bmNVSSgpO3UuX3N0YXJ0RWRpdGluZyhoKX0pLGwuc2V0RGF0YSgicG9ydGxldFRpdGxlRWRpdE9wdGlvbnMiLHApKX19LFsiYXVpLWVkaXRhYmxlLWRlcHJlY2F0ZWQiXSk7dC5wcm92aWRlKG0sImVkaXRFbnRpdHkiLGZ1bmN0aW9uKHAscyl7dmFyIGw9bS5nZXRXaW5kb3cocC5pZCksaD1wLmV2ZW50TmFtZXx8cC5pZCx1PVt0Lm9uKGgscyldLHc9ZnVuY3Rpb24oQSl7QS5uZXdWYWx8fChuZXcgYS5FdmVudEhhbmRsZSh1KSkuZGV0YWNoKCl9O2lmKGwpdS5wdXNoKGwuYWZ0ZXIoWyJkZXN0cm95IiwidmlzaWJsZUNoYW5nZSJdLHcpKSxsLnNob3coKTtlbHNle3ZhciB6PWZ1bmN0aW9uKEEpe3ZhciBIPXAuaWQsRj1tLmdldFdpbmRvdyhIKTsKRiYmbS5nZXRQb3J0bGV0SWQoSCk9PT1BLnBvcnRsZXRJZCYmKEYuZGVzdHJveSgpLHQuZGV0YWNoKCJkZXN0cm95UG9ydGxldCIseikpfSxsPW5ldyB0LlBvcnRsZXRVUkwuY3JlYXRlVVJMKHAudXJpLGEubWVyZ2Uoe2V2ZW50TmFtZTpofSxwLnVybFBhcmFtcykpO3AudXJpPWwudG9TdHJpbmcoKTtwLmRpYWxvZ0lmcmFtZT1hLm1lcmdlKHtib2R5Q3NzQ2xhc3M6ImRpYWxvZy13aXRoLWZvb3RlciJ9LHAuZGlhbG9nSWZyYW1lfHx7fSk7bS5vcGVuV2luZG93KHAsZnVuY3Rpb24oQSl7dS5wdXNoKEEuYWZ0ZXIoWyJkZXN0cm95IiwidmlzaWJsZUNoYW5nZSJdLHcpKTt0Lm9uKCJkZXN0cm95UG9ydGxldCIseil9KX19LFsiYXVpLWJhc2UiLCJsaWZlcmF5LXBvcnRsZXQtdXJsIiwibGlmZXJheS11dGlsLXdpbmRvdyJdKTt0LnByb3ZpZGUobSwic2VsZWN0RW50aXR5IixmdW5jdGlvbihwLHMpe3ZhciBsPW0uZ2V0V2luZG93KHAuaWQpLGg9W3Qub24ocC5ldmVudE5hbWV8fHAuaWQsCnMpXSx1PXAuc2VsZWN0ZWREYXRhO3UmJihwLmRpYWxvZy5kZXN0cm95T25IaWRlPSEwKTt2YXIgdz1mdW5jdGlvbihIKXtILm5ld1ZhbHx8KG5ldyBhLkV2ZW50SGFuZGxlKGgpKS5kZXRhY2goKX0sej1mdW5jdGlvbihIKXt1JiZ1Lmxlbmd0aCYmKEg9SC5jdXJyZW50VGFyZ2V0Lm5vZGUuZ2V0KCJjb250ZW50V2luZG93LmRvY3VtZW50IikuYWxsKCIubGZyLXNlYXJjaC1jb250YWluZXItd3JhcHBlciAuc2VsZWN0b3ItYnV0dG9uIiksYS5zb21lKEgsZnVuY3Rpb24oRixCKXt2YXIgST1GLmF0dHIoImRhdGEtZW50aXR5aWQiKXx8Ri5hdHRyKCJkYXRhLWVudGl0eW5hbWUiKSxJPXUuaW5kZXhPZihJKTstMTxJJiYoRi5hdHRyKCJkYXRhLXByZXZlbnQtc2VsZWN0aW9uIiwhMCksRi5hdHRyKCJkaXNhYmxlZCIsITApLHUuc3BsaWNlKEksMSkpO3JldHVybiF1Lmxlbmd0aH0pKX07aWYobCloLnB1c2gobC5hZnRlcihbImRlc3Ryb3kiLCJ2aXNpYmxlQ2hhbmdlIl0sdykpLGwuc2hvdygpOwplbHNle3ZhciBBPWZ1bmN0aW9uKEgpe3ZhciBGPXAuaWQsQj1tLmdldFdpbmRvdyhGKTtCJiZtLmdldFBvcnRsZXRJZChGKT09PUgucG9ydGxldElkJiYoQi5kZXN0cm95KCksdC5kZXRhY2goImRlc3Ryb3lQb3J0bGV0IixBKSl9O20ub3BlbldpbmRvdyhwLGZ1bmN0aW9uKEgpe2gucHVzaChILmFmdGVyKFsiZGVzdHJveSIsInZpc2libGVDaGFuZ2UiXSx3KSxILmlmcmFtZS5hZnRlcihbImxvYWQiXSx6KSk7dC5vbigiZGVzdHJveVBvcnRsZXQiLEEpfSl9fSxbImF1aS1iYXNlIiwibGlmZXJheS11dGlsLXdpbmRvdyJdKTt0LnByb3ZpZGUobSwidG9nZ2xlQ29udHJvbHMiLGZ1bmN0aW9uKHApe3ZhciBzPWEuZ2V0Qm9keSgpO2lmKHA9KHB8fHMpLm9uZSgiLnRvZ2dsZS1jb250cm9scyIpKXt2YXIgbD0idmlzaWJsZSI9PT10Ll9lZGl0Q29udHJvbHNTdGF0ZSxoPWNbbF0sdT1wLm9uZSgiLmxleGljb24taWNvbiIpO3UmJihoLmljb249dSk7cy5hZGRDbGFzcyhoLmNzc0NsYXNzKTsKdC5maXJlKCJ0b2dnbGVDb250cm9scyIse2VuYWJsZWQ6bH0pO3Aub24oInRhcCIsZnVuY3Rpb24odyl7bD0hbDt3PWg7aD1jW2xdO3MudG9nZ2xlQ2xhc3Mody5jc3NDbGFzcyk7cy50b2dnbGVDbGFzcyhoLmNzc0NsYXNzKTt3PWguaWNvbkNzc0NsYXNzO3ZhciB6PWguc3RhdGU7aWYodSl7dmFyIEE9aC5pY29uO0F8fChBPW0uZ2V0TGV4aWNvbkljb24odyksQT1hLm9uZShBKSxoLmljb249QSk7dS5yZXBsYWNlKEEpO3U9QX10Ll9lZGl0Q29udHJvbHNTdGF0ZT16O3QuU3RvcmUoImNvbS5saWZlcmF5LmZyb250ZW5kLmpzLndlYl90b2dnbGVDb250cm9scyIseik7dC5maXJlKCJ0b2dnbGVDb250cm9scyIse2VuYWJsZWQ6bCxzcmM6InVpIn0pfSl9fSxbImV2ZW50LXRhcCIsImxpZmVyYXktc3RvcmUiXSk7dC5wcm92aWRlKHdpbmRvdywic3VibWl0Rm9ybSIsZnVuY3Rpb24ocCxzLGwsaCl7bS5fc3VibWl0TG9ja2VkfHwocC5qcXVlcnkmJihwPXBbMF0pLHQuZmlyZSgic3VibWl0Rm9ybSIsCnthY3Rpb246cyxmb3JtOmEub25lKHApLHNpbmdsZVN1Ym1pdDpsLHZhbGlkYXRlOiExIT09aH0pKX0sWyJhdWktYmFzZSIsImF1aS1mb3JtLXZhbGlkYXRvciIsImF1aS11cmwiLCJsaWZlcmF5LWZvcm0iXSk7dC5wdWJsaXNoKCJzdWJtaXRGb3JtIix7ZGVmYXVsdEZuOm0uX2RlZmF1bHRTdWJtaXRGb3JtRm59KTt0LnByb3ZpZGUobSwiZGVmYXVsdFByZXZpZXdBcnRpY2xlRm4iLGZ1bmN0aW9uKHApe3ZhciBzPXRoaXMuX3VybFByZXZpZXc7cz8ocy5zZXQoInRpdGxlIixtLmVzY2FwZUhUTUwocC50aXRsZSkpLHMuc2V0KCJ1cmwiLHAudXJpKSk6dGhpcy5fdXJsUHJldmlldz1zPW5ldyB0LlVybFByZXZpZXcoe3RpdGxlOm0uZXNjYXBlSFRNTChwLnRpdGxlKSx1cmw6cC51cml9KTtzLm9wZW4oKX0sWyJsaWZlcmF5LXVybC1wcmV2aWV3Il0pO3QucHVibGlzaCgicHJldmlld0FydGljbGUiLHtkZWZhdWx0Rm46bS5fZGVmYXVsdFByZXZpZXdBcnRpY2xlRm59KTt0LnByb3ZpZGUobSwKIl9vcGVuV2luZG93UHJvdmlkZXIiLGZ1bmN0aW9uKHAscyl7dmFyIGw9ay5nZXRXaW5kb3cocCk7ZC5pc0Z1bmN0aW9uKHMpJiZzKGwpfSxbImxpZmVyYXktdXRpbC13aW5kb3ciXSk7dC5hZnRlcigiY2xvc2VXaW5kb3ciLGZ1bmN0aW9uKHApe3ZhciBzPXAuaWQ7aWYoKHM9dC5VdGlsLmdldFRvcCgpLkxpZmVyYXkuVXRpbC5XaW5kb3cuZ2V0QnlJZChzKSkmJnMuaWZyYW1lKXt2YXIgbD1zLmlmcmFtZS5ub2RlLmdldCgiY29udGVudFdpbmRvdyIpLmdldERPTSgpLkxpZmVyYXkuVXRpbC5nZXRPcGVuZXIoKSxoPXAucmVkaXJlY3Q7aWYoaClsLmxvY2F0aW9uPWg7ZWxzZSBpZigoaD1wLnJlZnJlc2gpJiZsKXt2YXIgdTtwLnBvcnRsZXRBamF4YWJsZXx8KHU9e3BvcnRsZXRBamF4YWJsZTohMX0pO2wuTGlmZXJheS5Qb3J0bGV0LnJlZnJlc2goIiNwX3BfaWRfIitoKyJfIix1KX1zLmhpZGUoKX19KTttLldpbmRvdz1rO3QuVXRpbD1tO3QuQlJFQUtQT0lOVFM9e1BIT05FOjc2OCxUQUJMRVQ6OTgwfTsKdC5TVEFUVVNfQ09ERT17QkFEX1JFUVVFU1Q6NDAwLElOVEVSTkFMX1NFUlZFUl9FUlJPUjo1MDAsT0s6MjAwLFNDX0RVUExJQ0FURV9GSUxFX0VYQ0VQVElPTjo0OTAsU0NfRklMRV9BTlRJVklSVVNfRVhDRVBUSU9OOjQ5NCxTQ19GSUxFX0VYVEVOU0lPTl9FWENFUFRJT046NDkxLFNDX0ZJTEVfTkFNRV9FWENFUFRJT046NDkyLFNDX0ZJTEVfU0laRV9FWENFUFRJT046NDkzLFNDX1VQTE9BRF9SRVFVRVNUX1NJWkVfRVhDRVBUSU9OOjQ5NX07dC56SW5kZXg9e0FMRVJUOjQzMCxET0NLOjEwLERPQ0tfUEFSRU5UOjIwLERSQUdfSVRFTTo0NjAsRFJPUF9BUkVBOjQ0MCxEUk9QX1BPU0lUSU9OOjQ1MCxNRU5VOjVFMyxPVkVSTEFZOjFFMyxQT1BPVkVSOjE2MDAsVE9PTFRJUDoxRTQsV0lORE9XOjEyMDB9fSkoQVVJKCksQVVJLiQsQVVJLl8sTGlmZXJheSk7CihmdW5jdGlvbihhLEUpe3ZhciBxPUUubmFtZXNwYWNlKCJQb3J0YWwuVGFicyIpLHQ9RS5uYW1lc3BhY2UoIlBvcnRhbC5Ub29sVGlwIiksZj1FLlV0aWwudG9DaGFyQ29kZTtFLlBvcnRhbC5UYWJzLl9zaG93PWZ1bmN0aW9uKGQpe3ZhciBjPWQubmFtZXMsYj1kLm5hbWVzcGFjZSxnPWQuc2VsZWN0ZWRJbmRleCxlPWQudGFiSXRlbSxrPWQudGFiU2VjdGlvbjtlJiZlLnJhZGlvQ2xhc3MoImFjdGl2ZSIpO2smJmsuc2hvdygpOyhkPWEub25lKCIjIitkLm5hbWVzcGFjZSsiZHJvcGRvd25UaXRsZSIpKSYmZC5odG1sKGUub25lKCJhIikudGV4dCgpKTtjLnNwbGljZShnLDEpO2ZvcihlPTA7ZTxjLmxlbmd0aDtlKyspKGc9YS5vbmUoIiMiK2IrZihjW2VdKSsiVGFic1NlY3Rpb24iKSkmJmcuaGlkZSgpfTtFLnByb3ZpZGUocSwic2hvdyIsZnVuY3Rpb24oZCxjLGIsZyl7dmFyIGU9ZCtmKGIpLGs9YS5vbmUoIiMiK2UrIlRhYnNJZCIpLGU9YS5vbmUoIiMiK2UrIlRhYnNTZWN0aW9uIiksCms9e2lkOmIsbmFtZXM6YyxuYW1lc3BhY2U6ZCxzZWxlY3RlZEluZGV4OmMuaW5kZXhPZihiKSx0YWJJdGVtOmssdGFiU2VjdGlvbjplfTtnJiZhLkxhbmcuaXNGdW5jdGlvbihnKSYmZy5jYWxsKHRoaXMsZCxjLGIsayk7RS5maXJlKCJzaG93VGFiIixrKX0sWyJhdWktYmFzZSJdKTtFLnB1Ymxpc2goInNob3dUYWIiLHtkZWZhdWx0Rm46RS5Qb3J0YWwuVGFicy5fc2hvd30pO3QuX2dldFRleHQ9ZnVuY3Rpb24oZCl7dmFyIGM9YS5vbmUoIiMiK2QpO2Q9IiI7YyYmKGM9Yy5uZXh0KCIudGFnbGliLXRleHQiKSkmJihkPWMuaHRtbCgpKTtyZXR1cm4gZH07dC5oaWRlPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5fY2FjaGVkO2QmJmQuaGlkZSgpfTtFLnByb3ZpZGUodCwic2hvdyIsZnVuY3Rpb24oZCxjLGIpe3ZhciBnPXRoaXMuX2NhY2hlZCxlPXRoaXMuX2hpZGVUb29sdGlwVGFzaztnP2cuc2V0QXR0cnMoYik6KGc9YS5tZXJnZSh7Y3NzQ2xhc3M6InRvb2x0aXAtaGVscCIsaHRtbDohMCwKb3BhY2l0eToxLHN0aWNrRHVyYXRpb246MTAwLHZpc2libGU6ITEsekluZGV4OkUuekluZGV4LlRPT0xUSVB9LGIpLGc9KG5ldyBhLlRvb2x0aXAoZykpLnJlbmRlcigpLGcuYWZ0ZXIoInZpc2libGVDaGFuZ2UiLGEuYmluZCgiX3N5bmNVSVBvc0FsaWduIixnKSksdGhpcy5faGlkZVRvb2x0aXBUYXNrPWU9YS5kZWJvdW5jZSgiX29uQm91bmRpbmdCb3hNb3VzZWxlYXZlIixnLmdldCgic3RpY2tEdXJhdGlvbiIpLGcpLHRoaXMuX2NhY2hlZD1nKTtlLmNhbmNlbCgpO2QuanF1ZXJ5JiYoZD1kWzBdKTtkPWEub25lKGQpO251bGw9PWMmJihjPXRoaXMuX2dldFRleHQoZC5ndWlkKCkpKTtnLnNldCgiYm9keUNvbnRlbnQiLGMpO2cuc2V0KCJ0cmlnZ2VyIixkKTtjPWcuZ2V0KCJib3VuZGluZ0JveCIpO2MuZGV0YWNoKCJob3ZlciIpO2QuZGV0YWNoKCJob3ZlciIpO2Qub24oImhvdmVyIixhLmJpbmQoIl9vbkJvdW5kaW5nQm94TW91c2VlbnRlciIsZyksZSk7Yy5vbigiaG92ZXIiLGZ1bmN0aW9uKGspe2UuY2FuY2VsKCk7CmQub25jZSgibW91c2VlbnRlciIsZS5jYW5jZWwpfSxlKTtnLnNob3coKX0sWyJhdWktdG9vbHRpcC1iYXNlIl0pfSkoQVVJKCksTGlmZXJheSk7CihmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZyx0PUUuVXRpbCxmPXtsaXN0OltdLHJlYWR5Q291bnRlcjowLGlzU3RhdGljOmZ1bmN0aW9uKGQpe3JldHVybiB0LmdldFBvcnRsZXRJZChkLmlkfHxkKWluIHRoaXMuX3N0YXRpY1BvcnRsZXRzfSxyZWZyZXNoTGF5b3V0OmZ1bmN0aW9uKGQpe30scmVnaXN0ZXI6ZnVuY3Rpb24oZCl7MD50aGlzLmxpc3QuaW5kZXhPZihkKSYmdGhpcy5saXN0LnB1c2goZCl9LF9kZWZDbG9zZUZuOmZ1bmN0aW9uKGQpe2QucG9ydGxldC5yZW1vdmUoITApO2QubmVzdGVkUG9ydGxldHx8YS5pby5yZXF1ZXN0KHRoZW1lRGlzcGxheS5nZXRQYXRoTWFpbigpKyIvcG9ydGFsL3VwZGF0ZV9sYXlvdXQiLHthZnRlcjp7c3VjY2VzczpmdW5jdGlvbigpe0UuZmlyZSgidXBkYXRlZExheW91dCIpfX0sZGF0YTp7Y21kOiJkZWxldGUiLGRvQXNVc2VySWQ6ZC5kb0FzVXNlcklkLHBfYXV0aDpFLmF1dGhUb2tlbixwX2xfaWQ6ZC5wbGlkLHBfcF9pZDpkLnBvcnRsZXRJZCwKcF92X2xfc19nX2lkOnRoZW1lRGlzcGxheS5nZXRTaXRlR3JvdXBJZCgpfX0pfSxfbG9hZE1hcmt1cEhlYWRFbGVtZW50czpmdW5jdGlvbihkLGMpe3ZhciBiPWQubWFya3VwSGVhZEVsZW1lbnRzO2lmKGImJmIubGVuZ3RoKXthLm9uZSgiaGVhZCIpLmFwcGVuZChiKTt2YXIgZz1hLk5vZGUuY3JlYXRlKCJceDNjZGl2IC9ceDNlIik7Zy5wbHVnKGEuUGx1Z2luLlBhcnNlQ29udGVudCk7Zy5zZXRDb250ZW50KGIpfX0sX2xvYWRQb3J0bGV0RmlsZXM6ZnVuY3Rpb24oZCxjKXt2YXIgYj1kLmZvb3RlckNzc1BhdGhzfHxbXSxnPWQuaGVhZGVyQ3NzUGF0aHN8fFtdLGU9ZC5oZWFkZXJKYXZhU2NyaXB0UGF0aHN8fFtdLGU9ZS5jb25jYXQoZC5mb290ZXJKYXZhU2NyaXB0UGF0aHN8fFtdKSxrPWEuZ2V0Qm9keSgpLG09YS5vbmUoImhlYWQiKTtnLmxlbmd0aCYmYS5HZXQuY3NzKGcse2luc2VydEJlZm9yZTptLmdldCgiZmlyc3RDaGlsZCIpLmdldERPTSgpfSk7Zz1rLmdldCgibGFzdENoaWxkIikuZ2V0RE9NKCk7CmIubGVuZ3RoJiZhLkdldC5jc3MoYix7aW5zZXJ0QmVmb3JlOmd9KTt2YXIgcD1kLnBvcnRsZXRIVE1MO2UubGVuZ3RoP2EuR2V0LnNjcmlwdChlLHtvbkVuZDpmdW5jdGlvbihzKXtjKHApfX0pOmMocCl9LF9tZXJnZU9wdGlvbnM6ZnVuY3Rpb24oZCxjKXtjPWN8fHt9O2MuZG9Bc1VzZXJJZD1jLmRvQXNVc2VySWR8fHRoZW1lRGlzcGxheS5nZXREb0FzVXNlcklkRW5jb2RlZCgpO2MucGxpZD1jLnBsaWR8fHRoZW1lRGlzcGxheS5nZXRQbGlkKCk7Yy5wb3J0bGV0PWQ7Yy5wb3J0bGV0SWQ9ZC5wb3J0bGV0SWQ7cmV0dXJuIGN9LF9zdGF0aWNQb3J0bGV0czp7fX07RS5wcm92aWRlKGYsImFkZCIsZnVuY3Rpb24oZCl7dmFyIGM9dGhpcztFLmZpcmUoImluaXRMYXlvdXQiKTt2YXIgYj1kLmRvQXNVc2VySWR8fHRoZW1lRGlzcGxheS5nZXREb0FzVXNlcklkRW5jb2RlZCgpLGc9ZC5wbGlkfHx0aGVtZURpc3BsYXkuZ2V0UGxpZCgpLGU9ZC5wb3J0bGV0RGF0YSxrPWQucG9ydGxldElkLAptPWQucG9ydGxldEl0ZW1JZCxwPWQucGxhY2VIb2xkZXIscD1wP2Eub25lKHApOmEuTm9kZS5jcmVhdGUoJ1x4M2NkaXYgY2xhc3NceDNkImxvYWRpbmctYW5pbWF0aW9uIiAvXHgzZScpLHM9ZC5iZWZvcmVQb3J0bGV0TG9hZGVkLGw9ZC5vbkNvbXBsZXRlLGg9ZnVuY3Rpb24oQixJKXtsJiZsKEIsSSk7Yy5saXN0LnB1c2goQi5wb3J0bGV0SWQpO0ImJkIuYXR0cigiZGF0YS1xYS1pZCIsImFwcC1sb2FkZWQiKTtFLmZpcmUoImFkZFBvcnRsZXQiLHtwb3J0bGV0OkJ9KX0sdT1udWxsO0UuTGF5b3V0JiZFLkxheW91dC5JTklUSUFMSVpFRCYmKHU9RS5MYXlvdXQuZ2V0QWN0aXZlRHJvcENvbnRhaW5lcigpKTtpZih1KXt2YXIgdz10LmdldENvbHVtbklkKHUuYXR0cigiaWQiKSksej0wO2lmKGQucGxhY2VIb2xkZXIpe3ZhciBBPXAuZ2V0KCJwYXJlbnROb2RlIik7aWYoIUEpcmV0dXJuO3AuYWRkQ2xhc3MoInBvcnRsZXQtYm91bmRhcnkiKTt2YXIgSD1BLmFsbCgiLnBvcnRsZXQtYm91bmRhcnkiKSwKdz1BLmFsbCgiLnBvcnRsZXQtbmVzdGVkLXBvcnRsZXRzIiksej1ILmluZGV4T2YocCksRj0wO3cuc29tZShmdW5jdGlvbihCKXt2YXIgST1ILmluZGV4T2YoQik7aWYoLTEhPT1JJiZJPHopRis9Qi5hbGwoIi5wb3J0bGV0LWJvdW5kYXJ5Iikuc2l6ZSgpO2Vsc2UgaWYoST49eilyZXR1cm4hMH0pO3otPUY7dz10LmdldENvbHVtbklkKEEuYXR0cigiaWQiKSl9QT10aGVtZURpc3BsYXkuZ2V0UGF0aE1haW4oKSsiL3BvcnRhbC91cGRhdGVfbGF5b3V0IjtiPXtjbWQ6ImFkZCIsZGF0YVR5cGU6IkpTT04iLGRvQXNVc2VySWQ6YixwX2F1dGg6RS5hdXRoVG9rZW4scF9sX2lkOmcscF9wX2NvbF9pZDp3LHBfcF9jb2xfcG9zOnoscF9wX2lfaWQ6bSxwX3BfaWQ6ayxwX3BfaXNvbGF0ZWQ6ITAscF92X2xfc19nX2lkOnRoZW1lRGlzcGxheS5nZXRTaXRlR3JvdXBJZCgpLHBvcnRsZXREYXRhOmV9O2U9KGc9dS5vbmUoIi5wb3J0bGV0LWJvdW5kYXJ5IikpJiZnLmlzU3RhdGljO2QucGxhY2VIb2xkZXJ8fApkLnBsaWR8fChlP2cucGxhY2VBZnRlcihwKTp1LnByZXBlbmQocCkpO3RoZW1lRGlzcGxheS5pc0ZyZWVmb3JtTGF5b3V0KCkmJnUucHJlcGVuZChwKTtiLmN1cnJlbnRVUkw9RS5jdXJyZW50VVJMO2MuYWRkSFRNTCh7YmVmb3JlUG9ydGxldExvYWRlZDpzLGRhdGE6YixvbkNvbXBsZXRlOmgscGxhY2VIb2xkZXI6cCx1cmw6QX0pfX0sWyJhdWktYmFzZSJdKTtFLnByb3ZpZGUoZiwiYWRkSFRNTCIsZnVuY3Rpb24oZCl7dmFyIGM9dGhpcyxiPW51bGwsZz1kLmJlZm9yZVBvcnRsZXRMb2FkZWQsZT1kLmRhdGEsaz0iSFRNTCIsbT1kLm9uQ29tcGxldGUscD1kLnBsYWNlSG9sZGVyO2Q9ZC51cmw7ZSYmcS5pc1N0cmluZyhlLmRhdGFUeXBlKSYmKGs9ZS5kYXRhVHlwZSk7dmFyIGs9ay50b1VwcGVyQ2FzZSgpLHM9ZnVuY3Rpb24obCl7dmFyIGg9cC5nZXQoInBhcmVudE5vZGUiKSx1PWEuTm9kZS5jcmVhdGUoIlx4M2NkaXZceDNlXHgzYy9kaXZceDNlIik7dS5wbHVnKGEuUGx1Z2luLlBhcnNlQ29udGVudCk7CnUuc2V0Q29udGVudChsKTt2YXIgdT11Lm9uZSgiXHgzZSAqIiksdzt1Pyh3PXUuYXR0cigiaWQiKSx3PXQuZ2V0UG9ydGxldElkKHcpLHUucG9ydGxldElkPXcscC5oaWRlKCkscC5wbGFjZUFmdGVyKHUpLHAucmVtb3ZlKCksYy5yZWZyZXNoTGF5b3V0KHUpLHdpbmRvdy5sb2NhdGlvbi5oYXNoJiYod2luZG93LmxvY2F0aW9uLmhhc2g9InBfIit3KSxiPXUsKHU9RS5MYXlvdXQpJiZ1LklOSVRJQUxJWkVEJiYodS51cGRhdGVDdXJyZW50UG9ydGxldEluZm8oYiksaCYmdS5zeW5jRW1wdHlDb2x1bW5DbGFzc1VJKGgpLHUuc3luY0RyYWdnYWJsZUNsYXNzVUkoKSx1LnVwZGF0ZVBvcnRsZXREcm9wWm9uZXMoYikpLG0mJm0oYix3KSk6cC5yZW1vdmUoKTtyZXR1cm4gd307ZyYmZyhwKTthLmlvLnJlcXVlc3QoZCx7YWZ0ZXI6e3N1Y2Nlc3M6ZnVuY3Rpb24oKXtlJiZlLnByZXZlbnROb3RpZmljYXRpb258fEUuZmlyZSgidXBkYXRlZExheW91dCIpfX0sZGF0YTplLGRhdGFUeXBlOmssb246e2ZhaWx1cmU6ZnVuY3Rpb24obCwKaCx1KXtpZihsPXUuc3RhdHVzVGV4dCloPUUuTGFuZ3VhZ2UuZ2V0KCJ0aGVyZS13YXMtYW4tdW5leHBlY3RlZC1lcnJvci4tcGxlYXNlLXJlZnJlc2gtdGhlLWN1cnJlbnQtcGFnZSIpLCJ0aW1lb3V0Ij09bCYmKGg9RS5MYW5ndWFnZS5nZXQoInJlcXVlc3QtdGltZW91dCIpKSxwLmhpZGUoKSxwLnBsYWNlQWZ0ZXIoJ1x4M2NkaXYgY2xhc3NceDNkImFsZXJ0IGFsZXJ0LWRhbmdlciJceDNlJytoKyJceDNjL2Rpdlx4M2UiKX0sc3VjY2VzczpmdW5jdGlvbihsLGgsdSl7bD10aGlzLmdldCgicmVzcG9uc2VEYXRhIik7IkhUTUwiPT1rP3MobCk6bC5yZWZyZXNoP3MobC5wb3J0bGV0SFRNTCk6KGYuX2xvYWRNYXJrdXBIZWFkRWxlbWVudHMobCksZi5fbG9hZFBvcnRsZXRGaWxlcyhsLHMpKX19fSl9LFsiYXVpLWlvLXJlcXVlc3QiLCJhdWktcGFyc2UtY29udGVudCJdKTtFLnByb3ZpZGUoZiwiY2xvc2UiLGZ1bmN0aW9uKGQsYyxiKXsoZD1hLm9uZShkKSkmJihjfHxjb25maXJtKEUuTGFuZ3VhZ2UuZ2V0KCJhcmUteW91LXN1cmUteW91LXdhbnQtdG8tcmVtb3ZlLXRoaXMtY29tcG9uZW50IikpKT8KKGM9dGhpcy5saXN0LmluZGV4T2YoZC5wb3J0bGV0SWQpLDA8PWMmJnRoaXMubGlzdC5zcGxpY2UoYywxKSxiPWYuX21lcmdlT3B0aW9ucyhkLGIpLEUuZmlyZSgiZGVzdHJveVBvcnRsZXQiLGIpLEUuZmlyZSgiY2xvc2VQb3J0bGV0IixiKSk6YS5jb25maWcud2luLmZvY3VzKCl9LFsiYXVpLWlvLXJlcXVlc3QiXSk7RS5wcm92aWRlKGYsImRlc3Ryb3kiLGZ1bmN0aW9uKGQsYyl7KGQ9YS5vbmUoZCkpJiZFLmZpcmUoImRlc3Ryb3lQb3J0bGV0IixmLl9tZXJnZU9wdGlvbnMoZCxjKSl9LFsiYXVpLW5vZGUtYmFzZSJdKTtFLnByb3ZpZGUoZiwibWluaW1pemUiLGZ1bmN0aW9uKGQsYyxiKXtiPWJ8fHt9O3ZhciBnPWIuZG9Bc1VzZXJJZHx8dGhlbWVEaXNwbGF5LmdldERvQXNVc2VySWRFbmNvZGVkKCksZT1iLnBsaWR8fHRoZW1lRGlzcGxheS5nZXRQbGlkKCk7aWYoZD1hLm9uZShkKSlpZihiPWQub25lKCIucG9ydGxldC1jb250ZW50LWNvbnRhaW5lciIpKXt2YXIgaz1iLmhhc0NsYXNzKCJoaWRlIik7CmIudG9nZ2xlKCk7ZC50b2dnbGVDbGFzcygicG9ydGxldC1taW5pbWl6ZWQiKTtpZihjPWEub25lKGMpKXtiPWs/RS5MYW5ndWFnZS5nZXQoIm1pbmltaXplIik6RS5MYW5ndWFnZS5nZXQoInJlc3RvcmUiKTtjLmF0dHIoImFsdCIsYik7Yy5hdHRyKCJ0aXRsZSIsYik7dmFyIG09Yy5vbmUoIi50YWdsaWItdGV4dC1pY29uIik7bSYmbS5odG1sKGIpO2lmKGM9Yy5vbmUoImkiKSljLnJlbW92ZUNsYXNzKCJpY29uLW1pbnVzIGljb24tcmVzaXplLXZlcnRpY2FsIiksaz9jLmFkZENsYXNzKCJpY29uLW1pbnVzIik6Yy5hZGRDbGFzcygiaWNvbi1yZXNpemUtdmVydGljYWwiKX1hLmlvLnJlcXVlc3QodGhlbWVEaXNwbGF5LmdldFBhdGhNYWluKCkrIi9wb3J0YWwvdXBkYXRlX2xheW91dCIse2FmdGVyOntzdWNjZXNzOmZ1bmN0aW9uKCl7aWYoayl7dmFyIHA9e2RvQXNVc2VySWQ6ZyxwX2xfaWQ6ZSxwX3BfYm91bmRhcnk6ITEscF9wX2lkOmQucG9ydGxldElkLHBfcF9pc29sYXRlZDohMH07CmQucGx1ZyhhLlBsdWdpbi5QYXJzZUNvbnRlbnQpO2QubG9hZCh0aGVtZURpc3BsYXkuZ2V0UGF0aE1haW4oKSsiL3BvcnRhbC9yZW5kZXJfcG9ydGxldD8iK2EuUXVlcnlTdHJpbmcuc3RyaW5naWZ5KHApKX19fSxkYXRhOntjbWQ6Im1pbmltaXplIixkb0FzVXNlcklkOmcscF9hdXRoOkUuYXV0aFRva2VuLHBfbF9pZDplLHBfcF9pZDpkLnBvcnRsZXRJZCxwX3BfcmVzdG9yZTprLHBfdl9sX3NfZ19pZDp0aGVtZURpc3BsYXkuZ2V0U2l0ZUdyb3VwSWQoKX19KX19LFsiYXVpLWlvIiwiYXVpLXBhcnNlLWNvbnRlbnQiLCJub2RlLWxvYWQiLCJxdWVyeXN0cmluZy1zdHJpbmdpZnkiXSk7RS5wcm92aWRlKGYsIm9uTG9hZCIsZnVuY3Rpb24oZCl7dmFyIGM9ZC5jYW5FZGl0VGl0bGUsYj1kLmNvbHVtblBvcyxnPSJubyI9PWQuaXNTdGF0aWM/bnVsbDpkLmlzU3RhdGljLGU9ZC5uYW1lc3BhY2VkSWQsaz1kLnBvcnRsZXRJZCxtPWQucmVmcmVzaFVSTDtkPWQucmVmcmVzaFVSTERhdGE7ZyYmCnRoaXMucmVnaXN0ZXJTdGF0aWMoayk7dmFyIHA9YS5vbmUoIiMiK2UpO2lmKHAmJiFwLnBvcnRsZXRQcm9jZXNzZWQmJihwLnBvcnRsZXRQcm9jZXNzZWQ9ITAscC5wb3J0bGV0SWQ9ayxwLmNvbHVtblBvcz1iLHAuaXNTdGF0aWM9ZyxwLnJlZnJlc2hVUkw9bSxwLnJlZnJlc2hVUkxEYXRhPWQsYykpe2M9WyJmb2N1cyIsImdlc3R1cmVtb3Zlc3RhcnQiXTthLlVBLnRvdWNofHxjLnB1c2goIm1vdXNlbW92ZSIpO3ZhciBzPXAub24oYyxmdW5jdGlvbihsKXt0LnBvcnRsZXRUaXRsZUVkaXQoe2RvQXNVc2VySWQ6dGhlbWVEaXNwbGF5LmdldERvQXNVc2VySWRFbmNvZGVkKCksb2JqOnAscGxpZDp0aGVtZURpc3BsYXkuZ2V0UGxpZCgpLHBvcnRsZXRJZDprfSk7cy5kZXRhY2goKX0pfUUuZmlyZSgicG9ydGxldFJlYWR5Iix7cG9ydGxldDpwLHBvcnRsZXRJZDprfSk7dGhpcy5yZWFkeUNvdW50ZXIrKzt0aGlzLnJlYWR5Q291bnRlcj09PXRoaXMubGlzdC5sZW5ndGgmJkUuZmlyZSgiYWxsUG9ydGxldHNSZWFkeSIsCntwb3J0bGV0SWQ6a30pfSxbImF1aS1iYXNlIiwiYXVpLXRpbWVyIiwiZXZlbnQtbW92ZSJdKTtFLnByb3ZpZGUoZiwicmVmcmVzaCIsZnVuY3Rpb24oZCxjKXtpZihkPWEub25lKGQpKXtjPWN8fGQucmVmcmVzaFVSTERhdGF8fHt9O2MuaGFzT3duUHJvcGVydHkoInBvcnRsZXRBamF4YWJsZSIpfHwoYy5wb3J0bGV0QWpheGFibGU9ITApO3ZhciBiPWQuYXR0cigicG9ydGxldCIpLGc9ZC5yZWZyZXNoVVJMLGI9YS5Ob2RlLmNyZWF0ZSgnXHgzY2RpdiBjbGFzc1x4M2QibG9hZGluZy1hbmltYXRpb24iIGlkXHgzZCJwX3BfaWQnK2IrJyIgL1x4M2UnKTtpZihjLnBvcnRsZXRBamF4YWJsZSYmZyl7ZC5wbGFjZUJlZm9yZShiKTtkLnJlbW92ZSghMCk7dmFyIGU9e30saz1nLnNwbGl0KCI/Iik7MTxrLmxlbmd0aCYmKGU9YS5RdWVyeVN0cmluZy5wYXJzZShrWzFdKSxkZWxldGUgZS5kYXRhVHlwZSxnPWtbMF0pO3RoaXMuYWRkSFRNTCh7ZGF0YTphLm1peChlLGMsITApLG9uQ29tcGxldGU6ZnVuY3Rpb24obSwKcCl7bS5yZWZyZXNoVVJMPWc7bSYmbS5hdHRyKCJkYXRhLXFhLWlkIiwiYXBwLXJlZnJlc2hlZCIpO0UuZmlyZShtLnBvcnRsZXRJZCsiOnBvcnRsZXRSZWZyZXNoZWQiLHtwb3J0bGV0Om0scG9ydGxldElkOnB9KX0scGxhY2VIb2xkZXI6Yix1cmw6Z30pfWVsc2UgZC5nZXREYXRhKCJwZW5kaW5nUmVmcmVzaCIpfHwoZC5zZXREYXRhKCJwZW5kaW5nUmVmcmVzaCIsITApLGI9cS5zdWIoJ1x4M2NkaXYgY2xhc3NceDNkImFsZXJ0IGFsZXJ0LWluZm8iXHgzZXswfVx4M2MvZGl2XHgzZScsW0UuTGFuZ3VhZ2UuZ2V0KCJ0aGlzLWNoYW5nZS13aWxsLW9ubHktYmUtc2hvd24tYWZ0ZXIteW91LXJlZnJlc2gtdGhlLXBhZ2UiKV0pLGU9ZC5vbmUoIi5wb3J0bGV0LWJvZHkiKSxlLnBsYWNlQmVmb3JlKGIpLGUuaGlkZSgpKX19LFsiYXVpLWJhc2UiLCJxdWVyeXN0cmluZy1wYXJzZSJdKTtFLnByb3ZpZGUoZiwicmVnaXN0ZXJTdGF0aWMiLGZ1bmN0aW9uKGQpe3ZhciBjPWEuTm9kZTtjJiZkIGluc3RhbmNlb2YKYz9kPWQuYXR0cigiaWQiKTpkLmlkJiYoZD1kLmlkKTtkPXQuZ2V0UG9ydGxldElkKGQpO3RoaXMuX3N0YXRpY1BvcnRsZXRzW2RdPSEwfSxbImF1aS1iYXNlIl0pO0UucHJvdmlkZShmLCJvcGVuV2luZG93IixmdW5jdGlvbihkKXt2YXIgYz1kLmJvZHlDc3NDbGFzcyxiPWQuZGVzdHJveU9uSGlkZSxnPWQubmFtZXNwYWNlLGU9ZC5wb3J0bGV0LGs9ZC5zdWJUaXRsZSxtPWQudGl0bGU7ZD1kLnVyaTtpZigoZT1hLm9uZShlKSkmJmQpe3ZhciBwPWUub25lKCIucG9ydGxldC10aXRsZSIpfHxlLm9uZSgiLnBvcnRsZXQtdGl0bGUtZGVmYXVsdCIpO3AmJihtPWUub25lKCIjY3BQb3J0bGV0VGl0bGUiKT9wLm9uZSgiLnBvcnRsZXQtdGl0bGUtdGV4dCIpLm91dGVySFRNTCgpKyIgLSAiK206cC50ZXh0KCkrIiAtICIrbSk7ayYmKG0rPSdceDNjZGl2IGNsYXNzXHgzZCJwb3J0bGV0LWNvbmZpZ3VyYXRpb24tc3VidGl0bGUgc21hbGwiXHgzZVx4M2NzcGFuIGNsYXNzXHgzZCJwb3J0bGV0LWNvbmZpZ3VyYXRpb24tc3VidGl0bGUtdGV4dCJceDNlJysKaysiXHgzYy9zcGFuXHgzZVx4M2MvZGl2XHgzZSIpO0UuVXRpbC5vcGVuV2luZG93KHtjYWNoZTohMSxkaWFsb2c6e2Rlc3Ryb3lPbkhpZGU6Yn0sZGlhbG9nSWZyYW1lOntib2R5Q3NzQ2xhc3M6YyxpZDpnKyJjb25maWd1cmF0aW9uSWZyYW1lIix1cmk6ZH0saWQ6ZysiY29uZmlndXJhdGlvbklmcmFtZURpYWxvZyIsdGl0bGU6bSx1cmk6ZH0sZnVuY3Rpb24ocyl7cy5vbmNlKCJkcmFnOmluaXQiLGZ1bmN0aW9uKCl7cy5kZC5hZGRJbnZhbGlkKCIucG9ydGxldC1jb25maWd1cmF0aW9uLXN1YnRpdGxlLXRleHQiKX0pfSl9fSxbImxpZmVyYXktdXRpbC13aW5kb3ciXSk7RS5wdWJsaXNoKCJjbG9zZVBvcnRsZXQiLHtkZWZhdWx0Rm46Zi5fZGVmQ2xvc2VGbn0pO0UucHVibGlzaCgiYWxsUG9ydGxldHNSZWFkeSIse2ZpcmVPbmNlOiEwfSk7Zi5yZWFkeT1mdW5jdGlvbihkKXtFLm9uKCJwb3J0bGV0UmVhZHkiLGZ1bmN0aW9uKGMpe2QoYy5wb3J0bGV0SWQsYy5wb3J0bGV0KX0pfTtFLlBvcnRsZXQ9CmZ9KShBVUkoKSxMaWZlcmF5KTtMaWZlcmF5LldvcmtmbG93PXtBQ1RJT05fUFVCTElTSDoxLEFDVElPTl9TQVZFX0RSQUZUOjIsU1RBVFVTX0FOWTotMSxTVEFUVVNfQVBQUk9WRUQ6MCxTVEFUVVNfREVOSUVEOjQsU1RBVFVTX0RSQUZUOjIsU1RBVFVTX0VYUElSRUQ6MyxTVEFUVVNfUEVORElORzoxfTtBVUkuYWRkKCJsaWZlcmF5LWFkZHJlc3MiLGZ1bmN0aW9uKGEpe0xpZmVyYXkuQWRkcmVzcz17Z2V0Q291bnRyaWVzOmZ1bmN0aW9uKEUpe0xpZmVyYXkuU2VydmljZSgiL2NvdW50cnkvZ2V0LWNvdW50cmllcyIse2FjdGl2ZTohMH0sRSl9LGdldFJlZ2lvbnM6ZnVuY3Rpb24oRSxxKXtMaWZlcmF5LlNlcnZpY2UoIi9yZWdpb24vZ2V0LXJlZ2lvbnMiLHthY3RpdmU6ITAsY291bnRyeUlkOk51bWJlcihxKX0sRSl9fX0sIiIse3JlcXVpcmVzOltdfSk7CkFVSS5hZGQoImxpZmVyYXktZm9ybSIsZnVuY3Rpb24oYSl7dmFyIEU9YS5BcnJheSxxPWEuY29uZmlnLkZvcm1WYWxpZGF0b3IsdD1xLlJVTEVTLmFjY2VwdEZpbGVzO2EubWl4KHEuUlVMRVMse2FjY2VwdEZpbGVzOmZ1bmN0aW9uKGQsYyxiKXtyZXR1cm4iKiI9PWI/ITA6dChkLGMsYil9LG51bWJlcjpmdW5jdGlvbihkLGMsYil7cmV0dXJuKGM9L15bK1wtXT8oXGQrKShbLnwsXVxkKykqKFtlRV1bKy1dP1xkKyk/JC8pJiZjLnRlc3QoZCl9fSwhMCk7YS5taXgocS5TVFJJTkdTLHtERUZBVUxUOidQbGVhc2VceDIwZml4XHgyMHRoaXNceDIwZmllbGRceDJlJyxhY2NlcHRGaWxlczonUGxlYXNlXHgyMGVudGVyXHgyMGFceDIwZmlsZVx4MjB3aXRoXHgyMGFceDIwdmFsaWRceDIwZXh0ZW5zaW9uXHgyMFx4MjhceDdiMFx4N2RceDI5XHgyZScsYWxwaGE6J1BsZWFzZVx4MjBlbnRlclx4MjBvbmx5XHgyMGFscGhhXHgyMGNoYXJhY3RlcnNceDJlJyxhbHBoYW51bTonUGxlYXNlXHgyMGVudGVyXHgyMG9ubHlceDIwYWxwaGFudW1lcmljXHgyMGNoYXJhY3RlcnNceDJlJywKZGF0ZTonUGxlYXNlXHgyMGVudGVyXHgyMGFceDIwdmFsaWRceDIwZGF0ZVx4MmUnLGRpZ2l0czonUGxlYXNlXHgyMGVudGVyXHgyMG9ubHlceDIwZGlnaXRzXHgyZScsZW1haWw6J1BsZWFzZVx4MjBlbnRlclx4MjBhXHgyMHZhbGlkXHgyMGVtYWlsXHgyMGFkZHJlc3NceDJlJyxlcXVhbFRvOidQbGVhc2VceDIwZW50ZXJceDIwdGhlXHgyMHNhbWVceDIwdmFsdWVceDIwYWdhaW5ceDJlJyxtYXg6J1BsZWFzZVx4MjBlbnRlclx4MjBhXHgyMHZhbHVlXHgyMGxlc3NceDIwdGhhblx4MjBvclx4MjBlcXVhbFx4MjB0b1x4MjBceDdiMFx4N2RceDJlJyxtYXhMZW5ndGg6J1BsZWFzZVx4MjBlbnRlclx4MjBub1x4MjBtb3JlXHgyMHRoYW5ceDIwXHg3YjBceDdkXHgyMGNoYXJhY3RlcnNceDJlJyxtaW46J1BsZWFzZVx4MjBlbnRlclx4MjBhXHgyMHZhbHVlXHgyMGdyZWF0ZXJceDIwdGhhblx4MjBvclx4MjBlcXVhbFx4MjB0b1x4MjBceDdiMFx4N2RceDJlJyxtaW5MZW5ndGg6J1BsZWFzZVx4MjBlbnRlclx4MjBhdFx4MjBsZWFzdFx4MjBceDdiMFx4N2RceDIwY2hhcmFjdGVyc1x4MmUnLApudW1iZXI6J1BsZWFzZVx4MjBlbnRlclx4MjBhXHgyMHZhbGlkXHgyMG51bWJlclx4MmUnLHJhbmdlOidQbGVhc2VceDIwZW50ZXJceDIwYVx4MjB2YWx1ZVx4MjBiZXR3ZWVuXHgyMFx4N2IwXHg3ZFx4MjBhbmRceDIwXHg3YjFceDdkXHgyZScscmFuZ2VMZW5ndGg6J1BsZWFzZVx4MjBlbnRlclx4MjBhXHgyMHZhbHVlXHgyMGJldHdlZW5ceDIwXHg3YjBceDdkXHgyMGFuZFx4MjBceDdiMVx4N2RceDIwY2hhcmFjdGVyc1x4MjBsb25nXHgyZScscmVxdWlyZWQ6J1RoaXNceDIwZmllbGRceDIwaXNceDIwcmVxdWlyZWRceDJlJyx1cmw6J1BsZWFzZVx4MjBlbnRlclx4MjBhXHgyMHZhbGlkXHgyMFVSTFx4MmUnfSwhMCk7dmFyIGY9YS5Db21wb25lbnQuY3JlYXRlKHtBVFRSUzp7ZmllbGRSdWxlczp7c2V0dGVyOmZ1bmN0aW9uKGQpe3RoaXMuX3Byb2Nlc3NGaWVsZFJ1bGVzKGQpO3JldHVybiBkfX0saWQ6e30sbmFtZXNwYWNlOnt9LG9uU3VibWl0Ont2YWx1ZUZuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uU3VibWl0fX0sCnZhbGlkYXRlT25CbHVyOnt2YWxpZGF0b3I6YS5MYW5nLmlzQm9vbGVhbix2YWx1ZTohMH19LEVYVEVORFM6YS5CYXNlLHByb3RvdHlwZTp7aW5pdGlhbGl6ZXI6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmdldCgiaWQiKSxkPWRvY3VtZW50W2RdLGM9YS5vbmUoZCk7dGhpcy5mb3JtPWQ7aWYodGhpcy5mb3JtTm9kZT1jKXRoaXMuZm9ybVZhbGlkYXRvcj1uZXcgYS5Gb3JtVmFsaWRhdG9yKHtib3VuZGluZ0JveDpjLHZhbGlkYXRlT25CbHVyOnRoaXMuZ2V0KCJ2YWxpZGF0ZU9uQmx1ciIpfSksdGhpcy5fcHJvY2Vzc0ZpZWxkUnVsZXMoKSx0aGlzLl9iaW5kRm9ybSgpfSxhZGRSdWxlOmZ1bmN0aW9uKGQsYyxiLGcsZSl7dmFyIGs9dGhpcy5nZXQoImZpZWxkUnVsZXMiKTstMT09dGhpcy5fZmluZFJ1bGVJbmRleChrLGQsYykmJihrLnB1c2goe2JvZHk6Z3x8IiIsY3VzdG9tOmV8fCExLGVycm9yTWVzc2FnZTpifHwiIixmaWVsZE5hbWU6ZCx2YWxpZGF0b3JOYW1lOmN9KSx0aGlzLl9wcm9jZXNzRmllbGRSdWxlcyhrKSl9LApyZW1vdmVSdWxlOmZ1bmN0aW9uKGQsYyl7dmFyIGI9dGhpcy5nZXQoImZpZWxkUnVsZXMiKSxnPXRoaXMuX2ZpbmRSdWxlSW5kZXgoYixkLGMpOy0xIT1nJiYodGhpcy5mb3JtVmFsaWRhdG9yLnJlc2V0RmllbGQoYltnXS5maWVsZE5hbWUpLGIuc3BsaWNlKGcsMSksdGhpcy5fcHJvY2Vzc0ZpZWxkUnVsZXMoYikpfSxfYWZ0ZXJHZXRGaWVsZHNCeU5hbWU6ZnVuY3Rpb24oZCl7aWYoZC5sYXN0SW5kZXhPZigiRWRpdG9yIik9PT1kLmxlbmd0aC02KXJldHVybiBuZXcgYS5Eby5BbHRlclJldHVybigiUmV0dXJuIGVkaXRvciBkb20gZWxlbWVudCIsdGhpcy5mb3JtTm9kZS5vbmUoIiMiK2QpKX0sX2JpbmRGb3JtOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5mb3JtTm9kZSxjPXRoaXMuZm9ybVZhbGlkYXRvcjtjLm9uKCJzdWJtaXQiLGEuYmluZCgiX29uVmFsaWRhdG9yU3VibWl0Iix0aGlzKSk7Yy5vbigic3VibWl0RXJyb3IiLGEuYmluZCgiX29uU3VibWl0RXJyb3IiLHRoaXMpKTtkLmRlbGVnYXRlKFsiYmx1ciIsCiJmb2N1cyJdLGEuYmluZCgiX29uRmllbGRGb2N1c0NoYW5nZSIsdGhpcyksImJ1dHRvbixpbnB1dCxzZWxlY3QsdGV4dGFyZWEiKTtkLmRlbGVnYXRlKFsiYmx1ciIsImlucHV0Il0sYS5iaW5kKCJfb25FZGl0b3JCbHVyIix0aGlzKSwnZGl2W2NvbnRlbnRlZGl0YWJsZVx4M2QidHJ1ZSJdJyk7YS5Eby5hZnRlcigiX2FmdGVyR2V0RmllbGRzQnlOYW1lIixjLCJnZXRGaWVsZHNCeU5hbWUiLHRoaXMpfSxfZGVmYXVsdFN1Ym1pdEZuOmZ1bmN0aW9uKGQpe2Quc3RvcHBlZHx8c3VibWl0Rm9ybSh0aGlzLmZvcm0pfSxfZmluZFJ1bGVJbmRleDpmdW5jdGlvbihkLGMsYil7dmFyIGc9LTE7RS5zb21lKGQsZnVuY3Rpb24oZSxrKXtpZihlLmZpZWxkTmFtZT09PWMmJmUudmFsaWRhdG9yTmFtZT09PWIpcmV0dXJuIGc9aywhMH0pO3JldHVybiBnfSxfb25FZGl0b3JCbHVyOmZ1bmN0aW9uKGQpe3RoaXMuZm9ybVZhbGlkYXRvci52YWxpZGF0ZUZpZWxkKGQudGFyZ2V0KX0sX29uRmllbGRGb2N1c0NoYW5nZTpmdW5jdGlvbihkKXt2YXIgYz0KZC5jdXJyZW50VGFyZ2V0LmFuY2VzdG9yKCIuZmllbGQiKTtjJiZjLnRvZ2dsZUNsYXNzKCJmaWVsZC1mb2N1c2VkIiwiZm9jdXMiPT09ZC50eXBlKX0sX29uU3VibWl0OmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXM7ZC5wcmV2ZW50RGVmYXVsdCgpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLl9kZWZhdWx0U3VibWl0Rm4oZCl9LDApfSxfb25TdWJtaXRFcnJvcjpmdW5jdGlvbihkKXt0aGlzLmZvcm1Ob2RlLmFsbCgiLnBhbmVsLWNvbGxhcHNlIikuZWFjaChmdW5jdGlvbihjKXswPGMuZ2V0KCJjaGlsZHJlbiIpLmFsbCgiLmhhcy1lcnJvciIpLnNpemUoKSYmIWMuaGFzQ2xhc3MoImluIikmJihjPWMuZ2V0RE9NKCksQVVJLiQoYykuY29sbGFwc2UoInNob3ciKSl9KX0sX29uVmFsaWRhdG9yU3VibWl0OmZ1bmN0aW9uKGQpe3RoaXMuZ2V0KCJvblN1Ym1pdCIpLmNhbGwodGhpcyxkLnZhbGlkYXRvci5mb3JtRXZlbnQpfSxfcHJvY2Vzc0ZpZWxkUnVsZTpmdW5jdGlvbihkLGMsYil7dmFyIGc9CiEwLGU9Yi5maWVsZE5hbWUsaz1iLnZhbGlkYXRvck5hbWU7Yi5ib2R5JiYhYi5jdXN0b20mJihnPWIuYm9keSk7dmFyIG09ZFtlXTttfHwobT17fSxkW2VdPW0pO21ba109ZztiLmN1c3RvbSYmKHEuUlVMRVNba109Yi5ib2R5KTtpZihkPWIuZXJyb3JNZXNzYWdlKWI9Y1tlXSxifHwoYj17fSxjW2VdPWIpLGJba109ZH0sX3Byb2Nlc3NGaWVsZFJ1bGVzOmZ1bmN0aW9uKGQpe2R8fChkPXRoaXMuZ2V0KCJmaWVsZFJ1bGVzIikpO3ZhciBjPXt9LGI9e30sZztmb3IoZyBpbiBkKXRoaXMuX3Byb2Nlc3NGaWVsZFJ1bGUoYixjLGRbZ10pO2lmKGQ9dGhpcy5mb3JtVmFsaWRhdG9yKWQuc2V0KCJmaWVsZFN0cmluZ3MiLGMpLGQuc2V0KCJydWxlcyIsYil9fSxnZXQ6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuX0lOU1RBTkNFU1tkXX0scmVnaXN0ZXI6ZnVuY3Rpb24oZCl7dmFyIGM9bmV3IExpZmVyYXkuRm9ybShkKTtkPWQuaWR8fGQubmFtZXNwYWNlO3RoaXMuX0lOU1RBTkNFU1tkXT1jOwpMaWZlcmF5LmZpcmUoImZvcm06cmVnaXN0ZXJlZCIse2Zvcm06Yyxmb3JtTmFtZTpkfSk7cmV0dXJuIGN9LF9JTlNUQU5DRVM6e319KTtMaWZlcmF5LkZvcm09Zn0sIiIse3JlcXVpcmVzOlsiYXVpLWJhc2UiLCJhdWktZm9ybS12YWxpZGF0b3IiXX0pOwpBVUkuYWRkKCJsaWZlcmF5LWZvcm0tcGxhY2Vob2xkZXJzIixmdW5jdGlvbihhKXt2YXIgRT1hLk5vZGUscT17aWQ6MSxuYW1lOjEsdHlwZToxfSx0PWEuQ29tcG9uZW50LmNyZWF0ZSh7RVhURU5EUzphLlBsdWdpbi5CYXNlLE5BTUU6InBsYWNlaG9sZGVycyIsTlM6InBsYWNlaG9sZGVyIixwcm90b3R5cGU6e2luaXRpYWxpemVyOmZ1bmN0aW9uKGYpe3ZhciBkPXRoaXM7Zj1kLmdldCgiaG9zdCIpO3ZhciBjPWYuZm9ybU5vZGU7YyYmKGMuYWxsKCJpbnB1dFtwbGFjZWhvbGRlcl0sIHRleHRhcmVhW3BsYWNlaG9sZGVyXSIpLmVhY2goZnVuY3Rpb24oYixnKXtiLnZhbCgpfHwoInBhc3N3b3JkIj09PWIuYXR0cigidHlwZSIpP2QuX2luaXRpYWxpemVQYXNzd29yZE5vZGUoYik6KGIuYWRkQ2xhc3MoInRleHQtcGxhY2Vob2xkZXIiKSxiLnZhbChiLmF0dHIoInBsYWNlaG9sZGVyIikpKSl9KSxkLmhvc3Q9ZixkLmJlZm9yZUhvc3RNZXRob2QoIl9vblZhbGlkYXRvclN1Ym1pdCIsZC5fcmVtb3ZlUGxhY2Vob2xkZXJzLApkKSxkLmJlZm9yZUhvc3RNZXRob2QoIl9vbkZpZWxkRm9jdXNDaGFuZ2UiLGQuX3RvZ2dsZVBsYWNlaG9sZGVycyxkKSl9LF9pbml0aWFsaXplUGFzc3dvcmROb2RlOmZ1bmN0aW9uKGYpe3ZhciBkPUUuY3JlYXRlKCdceDNjaW5wdXQgbmFtZVx4M2QiJytmLmF0dHIoIm5hbWUiKSsnX3Bhc3NfcGxhY2Vob2xkZXIiIHR5cGVceDNkInRleHQiIC9ceDNlJyk7TGlmZXJheS5VdGlsLmdldEF0dHJpYnV0ZXMoZixmdW5jdGlvbihjLGIsZyl7cVtiXXx8KCJjbGFzcyI9PT1iJiYoYys9IiB0ZXh0LXBsYWNlaG9sZGVyIiksZC5zZXRBdHRyaWJ1dGUoYixjKSk7cmV0dXJuITF9KTtkLnZhbChmLmF0dHIoInBsYWNlaG9sZGVyIikpO2QuYXR0cigiZGF0YS10eXBlLXBhc3N3b3JkLXBsYWNlaG9sZGVyIiwhMCk7Zi5wbGFjZUJlZm9yZShkKTtmLmhpZGUoKX0sX3JlbW92ZVBsYWNlaG9sZGVyczpmdW5jdGlvbigpe3RoaXMuaG9zdC5mb3JtTm9kZS5hbGwoImlucHV0W3BsYWNlaG9sZGVyXSwgdGV4dGFyZWFbcGxhY2Vob2xkZXJdIikuZWFjaChmdW5jdGlvbihmLApkKXtmLnZhbCgpPT1mLmF0dHIoInBsYWNlaG9sZGVyIikmJmYudmFsKCIiKX0pfSxfdG9nZ2xlTG9jYWxpemVkUGxhY2Vob2xkZXJzOmZ1bmN0aW9uKGYsZCl7dmFyIGM9ZC5hdHRyKCJwbGFjZWhvbGRlciIpO2lmKGMpe3ZhciBiPWQudmFsKCk7ImZvY3VzIj09PWYudHlwZT9iPT09YyYmZC5yZW1vdmVDbGFzcygidGV4dC1wbGFjZWhvbGRlciIpOmJ8fChkLnZhbChjKSxkLmFkZENsYXNzKCJ0ZXh0LXBsYWNlaG9sZGVyIikpfX0sX3RvZ2dsZVBhc3N3b3JkUGxhY2Vob2xkZXJzOmZ1bmN0aW9uKGYsZCl7aWYoZC5hdHRyKCJwbGFjZWhvbGRlciIpKWlmKCJmb2N1cyI9PT1mLnR5cGUpe2lmKGQuaGFzQXR0cmlidXRlKCJkYXRhLXR5cGUtcGFzc3dvcmQtcGxhY2Vob2xkZXIiKSl7ZC5oaWRlKCk7dmFyIGM9ZC5uZXh0KCk7Yy5zaG93KCk7c2V0VGltZW91dChmdW5jdGlvbigpe0xpZmVyYXkuVXRpbC5mb2N1c0Zvcm1GaWVsZChjKX0sMCl9fWVsc2UicGFzc3dvcmQiIT09ZC5hdHRyKCJ0eXBlIil8fApkLnZhbCgpfHwoZC5oaWRlKCksZC5wcmV2aW91cygpLnNob3coKSl9LF90b2dnbGVQbGFjZWhvbGRlcnM6ZnVuY3Rpb24oZil7dmFyIGQ9Zi5jdXJyZW50VGFyZ2V0O2lmKGQuaGFzQXR0cmlidXRlKCJkYXRhLXR5cGUtcGFzc3dvcmQtcGxhY2Vob2xkZXIiKXx8InBhc3N3b3JkIj09PWQuYXR0cigidHlwZSIpKXRoaXMuX3RvZ2dsZVBhc3N3b3JkUGxhY2Vob2xkZXJzKGYsZCk7ZWxzZSBpZihkLmhhc0NsYXNzKCJsYW5ndWFnZS12YWx1ZSIpKXRoaXMuX3RvZ2dsZUxvY2FsaXplZFBsYWNlaG9sZGVycyhmLGQpO2Vsc2V7dmFyIGM9ZC5hdHRyKCJwbGFjZWhvbGRlciIpO2lmKGMpe3ZhciBiPWQudmFsKCk7ImZvY3VzIj09PWYudHlwZT9iPT09YyYmKGQudmFsKCIiKSxkLnJlbW92ZUNsYXNzKCJ0ZXh0LXBsYWNlaG9sZGVyIikpOmJ8fChkLnZhbChjKSxkLmFkZENsYXNzKCJ0ZXh0LXBsYWNlaG9sZGVyIikpfX19fX0pO0xpZmVyYXkuRm9ybS5QbGFjZWhvbGRlcnM9dDthLkJhc2UucGx1ZyhMaWZlcmF5LkZvcm0sCnQpfSwiIix7cmVxdWlyZXM6WyJsaWZlcmF5LWZvcm0iLCJwbHVnaW4iXX0pOwpBVUkuYWRkKCJsaWZlcmF5LWljb24iLGZ1bmN0aW9uKGEpe3ZhciBFPXt9O0xpZmVyYXkuSWNvbj17cmVnaXN0ZXI6ZnVuY3Rpb24ocSl7dmFyIHQ9YS5vbmUoYS5jb25maWcuZG9jKTtFW3EuaWRdPXE7dGhpcy5fZG9jQ2xpY2tIYW5kbGVyfHwodGhpcy5fZG9jQ2xpY2tIYW5kbGVyPXQuZGVsZWdhdGUoImNsaWNrIix0aGlzLl9oYW5kbGVEb2NDbGljaywiLmxmci1pY29uLWl0ZW0iLHRoaXMpKTt0aGlzLl9kb2NIb3ZlckhhbmRsZXJ8fCh0aGlzLl9kb2NIb3ZlckhhbmRsZXI9dC5kZWxlZ2F0ZSgiaG92ZXIiLHRoaXMuX2hhbmRsZURvY01vdXNlT3Zlcix0aGlzLl9oYW5kbGVEb2NNb3VzZU91dCwiLmxmci1pY29uLWl0ZW0iLHRoaXMpKTtMaWZlcmF5Lm9uY2UoInNjcmVlbkxvYWQiLGZ1bmN0aW9uKCl7ZGVsZXRlIEVbcS5pZF19KX0sX2ZvcmNlUG9zdDpmdW5jdGlvbihxKXtMaWZlcmF5LlNQQSYmTGlmZXJheS5TUEEuYXBwfHwoTGlmZXJheS5VdGlsLmZvcmNlUG9zdChxLmN1cnJlbnRUYXJnZXQpLApxLnByZXZlbnREZWZhdWx0KCkpfSxfZ2V0Q29uZmlnOmZ1bmN0aW9uKHEpe3JldHVybiBFW3EuY3VycmVudFRhcmdldC5hdHRyKCJpZCIpXX0sX2hhbmRsZURvY0NsaWNrOmZ1bmN0aW9uKHEpe3ZhciB0PXRoaXMuX2dldENvbmZpZyhxKTt0JiYocS5wcmV2ZW50RGVmYXVsdCgpLHQudXNlRGlhbG9nP3RoaXMuX3VzZURpYWxvZyhxKTp0aGlzLl9mb3JjZVBvc3QocSkpfSxfaGFuZGxlRG9jTW91c2VPdXQ6ZnVuY3Rpb24ocSl7dmFyIHQ9dGhpcy5fZ2V0Q29uZmlnKHEpO3QmJnQuc3JjSG92ZXImJnRoaXMuX29uTW91c2VIb3ZlcihxLHQuc3JjKX0sX2hhbmRsZURvY01vdXNlT3ZlcjpmdW5jdGlvbihxKXt2YXIgdD10aGlzLl9nZXRDb25maWcocSk7dCYmdC5zcmNIb3ZlciYmdGhpcy5fb25Nb3VzZUhvdmVyKHEsdC5zcmNIb3Zlcil9LF9vbk1vdXNlSG92ZXI6ZnVuY3Rpb24ocSx0KXt2YXIgZj1xLmN1cnJlbnRUYXJnZXQub25lKCJpbWciKTtmJiZmLmF0dHIoInNyYyIsdCl9LF91c2VEaWFsb2c6ZnVuY3Rpb24ocSl7TGlmZXJheS5VdGlsLm9wZW5JbkRpYWxvZyhxLAp7ZGlhbG9nOntkZXN0cm95T25IaWRlOiEwfSxkaWFsb2dJZnJhbWU6e2JvZHlDc3NDbGFzczoiZGlhbG9nLXdpdGgtZm9vdGVyIn19KX19fSwiIix7cmVxdWlyZXM6WyJhdWktYmFzZSIsImxpZmVyYXktdXRpbC13aW5kb3ciXX0pOwpBVUkuYWRkKCJsaWZlcmF5LW1lbnUiLGZ1bmN0aW9uKGEpe3ZhciBFPUxpZmVyYXkuVXRpbCxxPVsidGwiLCJibCJdLHQ9e2xlZnQ6InIiLHJpZ2h0OiJsIn0sZj17bGVmdDoibCIscmlnaHQ6InIifSxkPXtsZWZ0OiJsIixyaWdodDoiciJ9LGM9e2xlZnQ6InIiLHJpZ2h0OiJsIn0sYj17ZG93bjoidCIsdXA6ImIifSxnPXtkb3duOiJiIix1cDoidCJ9LGU9e30saz0vXGJkaXJlY3Rpb24tKGRvd258bGVmdHxyaWdodHx1cClcYi8sbT0vbWF4LWRpc3BsYXktaXRlbXMtKFxkKykvLHA9ZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVzPVtdO3AuX0lOU1RBTkNFfHwocC5fSU5TVEFOQ0U9dGhpcyl9O3AucHJvdG90eXBlPXtfY2xvc2VBY3RpdmVNZW51OmZ1bmN0aW9uKCl7aWYodGhpcy5fYWN0aXZlTWVudSl7dmFyIGw9dGhpcy5faGFuZGxlczthLkFycmF5Lmludm9rZShsLCJkZXRhY2giKTtsLmxlbmd0aD0wO3RoaXMuX292ZXJsYXkuaGlkZSgpO2w9dGhpcy5fYWN0aXZlVHJpZ2dlcjt0aGlzLl9hY3RpdmVUcmlnZ2VyPQp0aGlzLl9hY3RpdmVNZW51PW51bGw7bC5oYXNDbGFzcygibGZyLWV4dGVuZGVkIik/bC5yZW1vdmVDbGFzcygiYnRuLXByaW1hcnkiKTpsLmdldCgicGFyZW50Tm9kZSIpLnJlbW92ZUNsYXNzKCJvcGVuIil9fSxfZ2V0QWxpZ25Qb2ludHM6YS5jYWNoZWQoZnVuY3Rpb24obCl7dmFyIGg9cSx1PSJyIix3PSJsIix6PXQsQT1kOyJydGwiPT09KExpZmVyYXkuTGFuZ3VhZ2UuZGlyZWN0aW9uW3RoZW1lRGlzcGxheS5nZXRMYW5ndWFnZUlkKCldfHwibHRyIikmJih1PSJsIix3PSJyIix6PWYsQT1jKTstMT09PWwuaW5kZXhPZigiYXV0byIpJiYobD0obD1sLm1hdGNoKGspKSYmbFsxXXx8ImF1dG8iLGg9WyhiW2xdfHwidCIpKyh6W2xdfHx1KSwoZ1tsXXx8InQiKSsoQVtsXXx8dyldKTtyZXR1cm4gaH0pLF9nZXRNZW51OmZ1bmN0aW9uKGwpe3ZhciBoPXRoaXMsdT1oLl9vdmVybGF5O3U/dS5zZXQoImFsaWduLm5vZGUiLGwpOih1PShuZXcgKGEuQ29tcG9uZW50LmNyZWF0ZSh7QVVHTUVOVFM6W2EuV2lkZ2V0Q3NzQ2xhc3MsCmEuV2lkZ2V0UG9zaXRpb24sYS5XaWRnZXRTdGRNb2QsYS5XaWRnZXRNb2RhbGl0eSxhLldpZGdldFBvc2l0aW9uQWxpZ24sYS5XaWRnZXRQb3NpdGlvbkNvbnN0cmFpbixhLldpZGdldFN0YWNrXSxDU1NfUFJFRklYOiJvdmVybGF5IixFWFRFTkRTOmEuV2lkZ2V0LE5BTUU6Im92ZXJsYXkifSkpKHthbGlnbjp7bm9kZTpsLHBvaW50czpxfSxjb25zdHJhaW46ITAsaGlkZUNsYXNzOiExLHByZXZlbnRPdmVybGFwOiEwLHpJbmRleDpMaWZlcmF5LnpJbmRleC5NRU5VfSkpLnJlbmRlcigpLExpZmVyYXkub25jZSgiYmVmb3JlU2NyZWVuRmxpcCIsZnVuY3Rpb24oKXt1LmRlc3Ryb3koKTtoLl9vdmVybGF5PW51bGx9KSxoLl9vdmVybGF5PXUpO3ZhciB3PWwuZ2V0RGF0YSgibWVudUxpc3RDb250YWluZXIiKSx6PWwuZ2V0RGF0YSgibWVudSIpLEE9bC5nZXREYXRhKCJtZW51SGVpZ2h0IiksSD16JiZlW3ouZ3VpZCgpXTtIJiZILnJlc2V0KCk7dmFyIEY7eiYmd3x8KHc9bC5uZXh0KCJ1bCIpLApGPXcuYWxsKCJsaSIpLHo9YS5Ob2RlLmNyZWF0ZSgnXHgzY2RpdiBjbGFzc1x4M2Qib3BlbiIgL1x4M2UnKSx3LnBsYWNlQmVmb3JlKHopLEYubGFzdCgpLmFkZENsYXNzKCJsYXN0Iiksei5hcHBlbmQodyksbC5zZXREYXRhKCJtZW51TGlzdENvbnRhaW5lciIsdyksbC5zZXREYXRhKCJtZW51Iix6KSxoLl9zZXRBUklBUm9sZXMobCx6LHcpLGwuaGFzQ2xhc3MoInNlbGVjdCIpJiZ3LmRlbGVnYXRlKCJjbGljayIsZnVuY3Rpb24oQil7Qj1CLmN1cnJlbnRUYXJnZXQ7dmFyIEk9Qi5vbmUoImkiKSxNPWwub25lKCJpIik7SSYmTSYmKEk9SS5hdHRyKCJjbGFzcyIpLE0uYXR0cigiY2xhc3MiLEkpKTtCPUIub25lKCIubGZyLWljb24tbWVudS10ZXh0Iik7TT1sLm9uZSgiLmxmci1pY29uLW1lbnUtdGV4dCIpO0ImJk0mJk0uc2V0Q29udGVudChCLnRleHQoKSl9LCJsaSIpKTt1LnNldFN0ZE1vZENvbnRlbnQoYS5XaWRnZXRTdGRNb2QuQk9EWSx6KTtBfHwoQT1oLl9nZXRNZW51SGVpZ2h0KGwsCnosRnx8dy5hbGwoImxpIikpLGwuc2V0RGF0YSgibWVudUhlaWdodCIsQSksImF1dG8iIT09QSYmdy5zZXRTdHlsZSgibWF4SGVpZ2h0IixBKSk7aC5fZ2V0Rm9jdXNNYW5hZ2VyKCk7cmV0dXJuIHp9LF9nZXRNZW51SGVpZ2h0OmZ1bmN0aW9uKGwsaCx1KXt2YXIgdz1sLmF0dHIoImNsYXNzTmFtZSIpO2g9ImF1dG8iO2lmKC0xPT09dy5pbmRleE9mKCJsZnItbWVudS1leHBhbmRlZCIpJiYodz0odz1tLmV4ZWModykpJiZwYXJzZUludCh3WzFdLDEwKSkmJnUuc2l6ZSgpPncpZm9yKHRoaXMuX2dldExpdmVTZWFyY2gobCxsLmdldERhdGEoIm1lbnUiKSksaD0wLGw9dS5zbGljZSgwLHcpLmdldCgib2Zmc2V0SGVpZ2h0IiksdT1sLmxlbmd0aC0xOzA8PXU7dS0tKWgrPWxbdV07cmV0dXJuIGh9LF9wb3NpdGlvbkFjdGl2ZU1lbnU6ZnVuY3Rpb24oKXt2YXIgbD10aGlzLl9hY3RpdmVNZW51LGg9dGhpcy5fYWN0aXZlVHJpZ2dlcjtpZihsKXt2YXIgdT1oLmF0dHIoImNsYXNzTmFtZSIpLAp3PXRoaXMuX292ZXJsYXksej13LmdldCgiYWxpZ24iKSxBPWwub25lKCJ1bCIpLEg9QS5nZXQoIm9mZnNldEhlaWdodCIpLEE9QS5nZXQoIm9mZnNldFdpZHRoIiksRj0hMTt6LnBvaW50cz10aGlzLl9nZXRBbGlnblBvaW50cyh1KTtsLmFkZENsYXNzKCJsZnItaWNvbi1tZW51LW9wZW4iKTtpZihFLmlzUGhvbmUoKXx8RS5pc1RhYmxldCgpKXcuaGlkZSgpLEY9ITA7dy5zZXRBdHRycyh7YWxpZ246eixjZW50ZXJlZDohMSxoZWlnaHQ6SCxtb2RhbDpGLHdpZHRoOkF9KTtFLmlzUGhvbmUoKXx8RS5pc1RhYmxldCgpfHwobD13LmJvZHlOb2RlLmZvY3VzTWFuYWdlcikmJmwuZm9jdXMoMCk7dy5zaG93KCk7LTE8dS5pbmRleE9mKCJsZnItZXh0ZW5kZWQiKT9oLmFkZENsYXNzKCJidG4tcHJpbWFyeSIpOmguZ2V0KCJwYXJlbnROb2RlIikuYWRkQ2xhc3MoIm9wZW4iKX19LF9zZXRBUklBUm9sZXM6ZnVuY3Rpb24obCxoLHUpe3U9aC5hbGwoImEiKTt2YXIgdz1oLm9uZSgiLmxmci1tZW51LWxpc3Qtc2VhcmNoLWNvbnRhaW5lciIpOwpoPWgub25lKCJ1bCIpO3ZhciB6PSJtZW51Ijt3JiYoej0ib3B0aW9uIik7aC5zZXRBdHRyaWJ1dGUoInJvbGUiLHopO3Uuc2V0KCJyb2xlIiwibWVudWl0ZW0iKTtsLmF0dHIoeyJhcmlhLWhhc3BvcHVwIjohMCxyb2xlOiJidXR0b24ifSk7aC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsbC5ndWlkKCkpfX07cC5oYW5kbGVGb2N1cz1mdW5jdGlvbihsKXtpZihsPWEub25lKGwpKWwuZGVsZWdhdGUoIm1vdXNlZW50ZXIiLGEucmJpbmQocC5fdGFyZ2V0TGluayxsLCJmb2N1cyIpLCJsaSIpLGwuZGVsZWdhdGUoIm1vdXNlbGVhdmUiLGEucmJpbmQocC5fdGFyZ2V0TGluayxsLCJibHVyIiksImxpIil9O3ZhciBzPVtdO3AucmVnaXN0ZXI9ZnVuY3Rpb24obCl7aWYobD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChsKSlwLl9JTlNUQU5DRXx8bmV3IHAscy5wdXNoKGwpLHAuX3JlZ2lzdGVyVGFzaygpfTtwLl9yZWdpc3RlclRhc2s9YS5kZWJvdW5jZShmdW5jdGlvbigpe3MubGVuZ3RoJiYKKGEuYWxsKHMpLm9uKCJjbGljayIsYS5iaW5kKCJfcmVnaXN0ZXJNZW51IixwKSkscy5sZW5ndGg9MCl9LDEwMCk7cC5fdGFyZ2V0TGluaz1mdW5jdGlvbihsLGgpe3ZhciB1PWwuY3VycmVudFRhcmdldC5vbmUoImEiKTtpZih1KXVbaF0oKX07TGlmZXJheS5wcm92aWRlKHAsIl9nZXRGb2N1c01hbmFnZXIiLGZ1bmN0aW9uKCl7dmFyIGw9cC5fSU5TVEFOQ0UsaD1sLl9mb2N1c01hbmFnZXI7aWYoIWgpe3ZhciB1PWwuX292ZXJsYXkuYm9keU5vZGU7dS5wbHVnKGEuUGx1Z2luLk5vZGVGb2N1c01hbmFnZXIse2NpcmN1bGFyOiEwLGRlc2NlbmRhbnRzOiJsaTpub3QoLmhpZGUpIGEsaW5wdXQiLGZvY3VzQ2xhc3M6ImZvY3VzIixrZXlzOntuZXh0OiJkb3duOjQwIixwcmV2aW91czoiZG93bjozOCJ9fSk7dS5vbigia2V5IixmdW5jdGlvbih3KXtpZih3PWwuX2FjdGl2ZVRyaWdnZXIpbC5fY2xvc2VBY3RpdmVNZW51KCksdy5mb2N1cygpfSwiZG93bjoyNyw5Iik7aD11LmZvY3VzTWFuYWdlcjsKdS5kZWxlZ2F0ZSgibW91c2VlbnRlciIsZnVuY3Rpb24odyl7aC5nZXQoImZvY3VzZWQiKSYmaC5mb2N1cyh3LmN1cnJlbnRUYXJnZXQub25lKCJhIikpfSwibGkiKTtoLmFmdGVyKCJhY3RpdmVEZXNjZW5kYW50Q2hhbmdlIixmdW5jdGlvbih3KXt3PWguZ2V0KCJkZXNjZW5kYW50cyIpLml0ZW0ody5uZXdWYWwpO3Uub25lKCJ1bCIpLnNldEF0dHJpYnV0ZSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50Iix3Lmd1aWQoKSl9KTtsLl9mb2N1c01hbmFnZXI9aH1oLnJlZnJlc2goKX0sWyJub2RlLWZvY3VzbWFuYWdlciJdLCEwKTtMaWZlcmF5LnByb3ZpZGUocCwiX2dldExpdmVTZWFyY2giLGZ1bmN0aW9uKGwsaCl7dmFyIHU9aC5ndWlkKCksdz1lW3VdO2lmKCF3KXt2YXIgdz1oLm9uZSgidWwiKSx6PVtdO3cuYWxsKCJsaSIpLmVhY2goZnVuY3Rpb24oQSl7ei5wdXNoKHtuYW1lOkEub25lKCIudGFnbGliLXRleHQtaWNvbiIpLnRleHQoKS50cmltKCksbm9kZTpBfSl9KTt3PW5ldyBMaWZlcmF5Lk1lbnVGaWx0ZXIoe2NvbnRlbnQ6dywKbWluUXVlcnlMZW5ndGg6MCxxdWVyeURlbGF5OjAscmVzdWx0RmlsdGVyczoicGhyYXNlTWF0Y2giLHJlc3VsdFRleHRMb2NhdG9yOiJuYW1lIixzb3VyY2U6en0pO3cuZ2V0KCJpbnB1dE5vZGUiKS5zd2FsbG93RXZlbnQoImNsaWNrIik7ZVt1XT13fX0sWyJsaWZlcmF5LW1lbnUtZmlsdGVyIl0sITApO0xpZmVyYXkucHJvdmlkZShwLCJfcmVnaXN0ZXJNZW51IixmdW5jdGlvbihsKXt2YXIgaD1wLl9JTlNUQU5DRSx1PWguX2hhbmRsZXMsdz1sLmN1cnJlbnRUYXJnZXQsej1oLl9hY3RpdmVUcmlnZ2VyO2lmKHopaWYoeiE9dyl6LnJlbW92ZUNsYXNzKCJidG4tcHJpbWFyeSIpLHouZ2V0KCJwYXJlbnROb2RlIikucmVtb3ZlQ2xhc3MoIm9wZW4iKTtlbHNle2guX2Nsb3NlQWN0aXZlTWVudSgpO3JldHVybn13Lmhhc0NsYXNzKCJkaXNhYmxlZCIpfHwoej1oLl9nZXRNZW51KHcpLGguX2FjdGl2ZU1lbnU9eixoLl9hY3RpdmVUcmlnZ2VyPXcsdS5sZW5ndGh8fCh3PXcuZ2V0RGF0YSgibWVudUxpc3RDb250YWluZXIiKSwKYS5FdmVudC5kZWZpbmVPdXRzaWRlKCJ0b3VjaGVuZCIpLHUucHVzaChhLmdldFdpbigpLm9uKCJyZXNpemUiLGEuZGVib3VuY2UoaC5fcG9zaXRpb25BY3RpdmVNZW51LDIwMCxoKSksYS5nZXREb2MoKS5vbigiY2xpY2siLGguX2Nsb3NlQWN0aXZlTWVudSxoKSx3Lm9uKCJ0b3VjaGVuZG91dHNpZGUiLGZ1bmN0aW9uKEEpe0EucHJldmVudERlZmF1bHQoKTtoLl9jbG9zZUFjdGl2ZU1lbnUoKX0saCkpLCh3PWEuREQmJmEuREQuRERNKSYmdS5wdXNoKHcub24oImRkbTpzdGFydCIsaC5fY2xvc2VBY3RpdmVNZW51LGgpKSksaC5fcG9zaXRpb25BY3RpdmVNZW51KCksbC5oYWx0KCkpfSwiYXVpLXdpZGdldC1jc3NjbGFzcyBldmVudC1vdXRzaWRlIGV2ZW50LXRvdWNoIHdpZGdldCB3aWRnZXQtbW9kYWxpdHkgd2lkZ2V0LXBvc2l0aW9uIHdpZGdldC1wb3NpdGlvbi1hbGlnbiB3aWRnZXQtcG9zaXRpb24tY29uc3RyYWluIHdpZGdldC1zdGFjayB3aWRnZXQtc3RkbW9kIi5zcGxpdCgiICIpKTsKTGlmZXJheS5NZW51PXB9LCIiLHtyZXF1aXJlczpbImFycmF5LWludm9rZSIsImF1aS1kZWJvdW5jZSIsImF1aS1ub2RlIiwicG9ydGFsLWF2YWlsYWJsZS1sYW5ndWFnZXMiXX0pOwpBVUkuYWRkKCJsaWZlcmF5LW5vdGljZSIsZnVuY3Rpb24oYSl7dmFyIEU9YS5ET00scT1hLk5vZGUsdD1hLkRvLGY9YS5MYW5nLGQ9ZnVuY3Rpb24oYyl7Yz1jfHx7fTt0aGlzLl9jbG9zZVRleHQ9Yy5jbG9zZVRleHQ7dGhpcy5fbm9kZT1jLm5vZGU7dGhpcy5fbm90aWNlVHlwZT1jLnR5cGV8fCJub3RpY2UiO3RoaXMuX25vdGljZUNsYXNzPSJhbGVydC13YXJuaW5nIjt0aGlzLl9vbkNsb3NlPWMub25DbG9zZTt0aGlzLl91c2VDbG9zZUJ1dHRvbj0hMDtjLnVzZUFuaW1hdGlvbiYmKHRoaXMuX25vdGljZUNsYXNzKz0iIHBvcHVwLWFsZXJ0LW5vdGljZSIsZi5pc051bWJlcihjLnRpbWVvdXQpfHwoYy50aW1lb3V0PTVFMykpO3RoaXMuX2FuaW1hdGlvbkNvbmZpZz1jLmFuaW1hdGlvbkNvbmZpZ3x8e2R1cmF0aW9uOjIsZWFzaW5nOiJlYXNlLW91dCIsdG9wOiI1MHB4In07dGhpcy5fdXNlQW5pbWF0aW9uPWMudXNlQW5pbWF0aW9uO3RoaXMuX3RpbWVvdXQ9Yy50aW1lb3V0O3RoaXMuX2JvZHk9CmEuZ2V0Qm9keSgpO3RoaXMuX3VzZVRvZ2dsZUJ1dHRvbj0hMTt0aGlzLl9zaG93VGV4dD10aGlzLl9oaWRlVGV4dD0iIjshMSE9PWMudG9nZ2xlVGV4dCYmKHRoaXMudG9nZ2xlVGV4dD1hLm1peChjLnRvZ2dsZVRleHQse2hpZGU6bnVsbCxzaG93Om51bGx9KSx0aGlzLl91c2VUb2dnbGVCdXR0b249ITApOyJ3YXJuaW5nIj09dGhpcy5fbm90aWNlVHlwZSYmKHRoaXMuX25vdGljZUNsYXNzPSJhbGVydC1kYW5nZXIgcG9wdXAtYWxlcnQtd2FybmluZyIpO2Mubm90aWNlQ2xhc3MmJih0aGlzLl9ub3RpY2VDbGFzcys9IiAiK2Mubm90aWNlQ2xhc3MpO3RoaXMuX2NvbnRlbnQ9Yy5jb250ZW50fHwiIjt0aGlzLl9jcmVhdGVIVE1MKCk7cmV0dXJuIHRoaXMuX25vdGljZX07ZC5wcm90b3R5cGU9e2Nsb3NlOmZ1bmN0aW9uKCl7dGhpcy5fbm90aWNlLmhpZGUoKTt0aGlzLl9ib2R5LnJlbW92ZUNsYXNzKCJoYXMtYWxlcnRzIik7dGhpcy5fb25DbG9zZSYmdGhpcy5fb25DbG9zZSgpfSxzZXRDbG9zaW5nOmZ1bmN0aW9uKCl7dmFyIGM9CmEuYWxsKCIucG9wdXAtYWxlcnQtbm90aWNlLCAucG9wdXAtYWxlcnQtd2FybmluZyIpO2Muc2l6ZSgpJiYodGhpcy5fdXNlQ2xvc2VCdXR0b249ITAsdGhpcy5fYm9keXx8KHRoaXMuX2JvZHk9YS5nZXRCb2R5KCkpLHRoaXMuX2JvZHkuYWRkQ2xhc3MoImhhcy1hbGVydHMiKSxjLmVhY2godGhpcy5fYWRkQ2xvc2VCdXR0b24sdGhpcykpfSxfYWRkQ2xvc2VCdXR0b246ZnVuY3Rpb24oYyl7ITEhPT10aGlzLl9jbG9zZVRleHQ/dGhpcy5fY2xvc2VUZXh0PXRoaXMuX2Nsb3NlVGV4dHx8J0Nsb3NlJzoodGhpcy5fdXNlQ2xvc2VCdXR0b249ITEsdGhpcy5fY2xvc2VUZXh0PSIiKTtpZihjPXRoaXMuX3VzZUNsb3NlQnV0dG9uP2MuYXBwZW5kKCdceDNjYnV0dG9uIGNsYXNzXHgzZCJidG4gYnRuLWRlZmF1bHQgc3VibWl0IHBvcHVwLWFsZXJ0LWNsb3NlIlx4M2UnK3RoaXMuX2Nsb3NlVGV4dCsiXHgzYy9idXR0b25ceDNlIik6Yy5vbmUoIi5jbG9zZSIpKWMub24oImNsaWNrIiwKdGhpcy5jbG9zZSx0aGlzKX0sX2FkZFRvZ2dsZUJ1dHRvbjpmdW5jdGlvbihjKXtpZih0aGlzLl91c2VUb2dnbGVCdXR0b24pe3RoaXMuX2hpZGVUZXh0PXRoaXMuX3RvZ2dsZVRleHQuaGlkZXx8J0hpZGUnO3RoaXMuX3Nob3dUZXh0PXRoaXMuX3RvZ2dsZVRleHQuc2hvd3x8J1Nob3cnO3ZhciBiPXEuY3JlYXRlKCdceDNjYSBjbGFzc1x4M2QidG9nZ2xlLWJ1dHRvbiIgaHJlZlx4M2QiamF2YXNjcmlwdDo7Ilx4M2VceDNjc3Bhblx4M2UnK3RoaXMuX2hpZGVUZXh0KyJceDNjL3NwYW5ceDNlXHgzYy9hXHgzZSIpLGc9Yi5vbmUoInNwYW4iKSxlPTAsaz10aGlzLl9oaWRlVGV4dCxtPXRoaXMuX3Nob3dUZXh0O2Iub24oImNsaWNrIixmdW5jdGlvbihwKXtwPW07MD09PWU/KHA9ayxlPTEpOmU9MDtjLnRvZ2dsZSgpO2cudGV4dChwKX0pO2MuYXBwZW5kKGIpfX0sX2FmdGVyTm90aWNlU2hvdzpmdW5jdGlvbihjKXt2YXIgYj0KdGhpcztiLl9wcmV2ZW50SGlkZSgpO3ZhciBnPWIuX25vdGljZTtpZihiLl91c2VBbmltYXRpb24pe2M9Yi5fYW5pbWF0aW9uQ29uZmlnO3ZhciBlPWMubGVmdCxrPWMudG9wO2V8fChrPUUucmVnaW9uKHEuZ2V0RE9NTm9kZShnKSksZT1FLndpbldpZHRoKCkvMi1rLndpZHRoLzIsaz0tay5oZWlnaHQsYy5sZWZ0PWUrInB4Iik7Zy5zZXRYWShbZSxrXSk7Zy50cmFuc2l0aW9uKGIuX2FuaW1hdGlvbkNvbmZpZyxmdW5jdGlvbigpe2IuX2hpZGVIYW5kbGU9YS5sYXRlcihiLl90aW1lb3V0LGcsImhpZGUiKX0pfWVsc2UtMTxiLl90aW1lb3V0JiYoYi5faGlkZUhhbmRsZT1hLmxhdGVyKGIuX3RpbWVvdXQsZywiaGlkZSIpKTtMaWZlcmF5LmZpcmUoIm5vdGljZVNob3ciLHtub3RpY2U6Yix1c2VBbmltYXRpb246Yi5fdXNlQW5pbWF0aW9ufSl9LF9iZWZvcmVOb3RpY2VIaWRlOmZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMsZztiLl91c2VBbmltYXRpb24mJihjPWEubWVyZ2UoYi5fYW5pbWF0aW9uQ29uZmlnLAp7dG9wOi1iLl9ub3RpY2UuZ2V0KCJvZmZzZXRIZWlnaHQiKSsicHgifSksYi5fbm90aWNlLnRyYW5zaXRpb24oYyxmdW5jdGlvbigpe2IuX25vdGljZS50b2dnbGUoITEpfSksZz1uZXcgdC5IYWx0KG51bGwpKTtMaWZlcmF5LmZpcmUoIm5vdGljZUhpZGUiLHtub3RpY2U6Yix1c2VBbmltYXRpb246Yi5fdXNlQW5pbWF0aW9ufSk7cmV0dXJuIGd9LF9iZWZvcmVOb3RpY2VTaG93OmZ1bmN0aW9uKGMpe3RoaXMuX25vdGljZS50b2dnbGUoITApfSxfY3JlYXRlSFRNTDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuX2NvbnRlbnQsYj1hLm9uZSh0aGlzLl9ub2RlKSxnPWJ8fHEuY3JlYXRlKCdceDNjZGl2IGNsYXNzXHgzZCJhbGVydCBhbGVydC13YXJuaW5nIiBkeW5hbWljXHgzZCJ0cnVlIlx4M2VceDNjL2Rpdlx4M2UnKTtjJiZnLmh0bWwoYyk7dGhpcy5fbm90aWNlQ2xhc3Muc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUsayl7Zy5hZGRDbGFzcyhlKX0pO3RoaXMuX2FkZENsb3NlQnV0dG9uKGcpOwp0aGlzLl9hZGRUb2dnbGVCdXR0b24oZyk7KCFifHxiJiYhYi5pbkRvYygpKSYmdGhpcy5fYm9keS5wcmVwZW5kKGcpO3RoaXMuX2JvZHkuYWRkQ2xhc3MoImhhcy1hbGVydHMiKTt0LmJlZm9yZSh0aGlzLl9iZWZvcmVOb3RpY2VIaWRlLGcsImhpZGUiLHRoaXMpO3QuYmVmb3JlKHRoaXMuX2JlZm9yZU5vdGljZVNob3csZywic2hvdyIsdGhpcyk7dC5hZnRlcih0aGlzLl9hZnRlck5vdGljZVNob3csZywic2hvdyIsdGhpcyk7dGhpcy5fbm90aWNlPWd9LF9wcmV2ZW50SGlkZTpmdW5jdGlvbigpe3RoaXMuX2hpZGVIYW5kbGUmJih0aGlzLl9oaWRlSGFuZGxlLmNhbmNlbCgpLHRoaXMuX2hpZGVIYW5kbGU9bnVsbCl9fTtMaWZlcmF5Lk5vdGljZT1kfSwiIix7cmVxdWlyZXM6WyJhdWktYmFzZSJdfSk7CkFVSS5hZGQoImxpZmVyYXktcG9sbGVyIixmdW5jdGlvbihhKXt2YXIgRT1hLk9iamVjdCxxPUxpZmVyYXkuVXRpbC5yYW5kb21JbnQoKSx0PSExLGY9bnVsbCxkPSExLGM9MCxiPTAsZz1bMSwyLDMsNCw1LDcsMTBdLGU9ITEsaz0hMSxtPWcubGVuZ3RoLTEscD17fSxzPXticm93c2VyS2V5OnEsY29tcGFueUlkOnRoZW1lRGlzcGxheS5nZXRDb21wYW55SWQoKSxwb3J0bGV0SWRzTWFwOnAsc3RhcnRQb2xsaW5nOiEwfSxsPW51bGwsaD17fSx1PWdbMF0sdz1bXSx6PSExLEE9bnVsbCxIPXRoZW1lRGlzcGxheS5nZXRQYXRoQ29udGV4dCgpKyIvcG9sbGVyIixGPUgrIi9yZWNlaXZlIixCPUgrIi9zZW5kIixJPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KEEpO0E9bnVsbH0sTT1mdW5jdGlvbigpe0koKTt0JiYobmEuaXNTdXBwb3J0c0NvbWV0KCk/SigpOkE9c2V0VGltZW91dChKLG5hLmdldERlbGF5KCkpKX0sRD1mdW5jdGlvbihmYSxpYSl7dmFyIFo9SlNPTi5wYXJzZShpYS5yZXNwb25zZVRleHQpLAplYT0hMTtpZihBcnJheS5pc0FycmF5KFopKXtmb3IodmFyIG9hPVouc2hpZnQoKSxBYT0wO0FhPFoubGVuZ3RoO0FhKyspe3ZhciBwYT1aW0FhXS5wYXlsb2FkLEZhPXBhLmRhdGEsRWE9cGEucG9ydGxldElkLFdhPWhbRWFdO1dhJiYoRWE9cFtFYV0sRmEmJkVhJiYoRmEuaW5pdGlhbFJlcXVlc3Q9V2EuaW5pdGlhbFJlcXVlc3QpLFdhLmxpc3RlbmVyLmNhbGwoV2Euc2NvcGV8fG5hLEZhLHBhLmNodW5rSWQpLEZhJiZGYS5wb2xsZXJIaW50SGlnaENvbm5lY3Rpdml0eSYmKHU9Z1swXSxiPTApLFdhLmluaXRpYWxSZXF1ZXN0JiZFYSYmKGVhPSEwLFdhLmluaXRpYWxSZXF1ZXN0PSExKSl9InN0YXJ0UG9sbGluZyJpbiBzJiZkZWxldGUgcy5zdGFydFBvbGxpbmc7ZWEmJlYoKTtvYS5zdXNwZW5kUG9sbGluZz8oZT0hMCxJKCkpOihlPSExLE0oKSl9fSxKPWZ1bmN0aW9uKCl7aWYoIXomJiFlKXtzLnVzZXJJZD1mO3MudGltZXN0YW1wPShuZXcgRGF0ZSkuZ2V0VGltZSgpO0UuZWFjaChoLApZKTt2YXIgZmE9SlNPTi5zdHJpbmdpZnkoW3NdKTthLmlvKEYse2RhdGE6e3BvbGxlclJlcXVlc3Q6ZmF9LG1ldGhvZDphLmNvbmZpZy5pby5tZXRob2Qsb246e3N1Y2Nlc3M6RH19KX19LFA9ZnVuY3Rpb24oKXtrPSExO1YoKX0sVj1mdW5jdGlvbigpe2lmKHQmJiFrJiZ3Lmxlbmd0aCYmIXomJiFlKXtrPSEwO3ZhciBmYT13LnNoaWZ0KCk7cy51c2VySWQ9ZjtzLnRpbWVzdGFtcD0obmV3IERhdGUpLmdldFRpbWUoKTtFLmVhY2goaCxZKTtmYT1KU09OLnN0cmluZ2lmeShbc10uY29uY2F0KGZhKSk7YS5pbyhCLHtkYXRhOntwb2xsZXJSZXF1ZXN0OmZhfSxtZXRob2Q6YS5jb25maWcuaW8ubWV0aG9kLG9uOntjb21wbGV0ZTpQfX0pfX0sWT1mdW5jdGlvbihmYSxpYSl7cFtpYV09ZmEuaW5pdGlhbFJlcXVlc3R9LG5hPXtpbml0OmZ1bmN0aW9uKGZhKXt0aGlzLnNldEVuY3J5cHRlZFVzZXJJZChmYS5lbmNyeXB0ZWRVc2VySWQpO3RoaXMuc2V0U3VwcG9ydHNDb21ldChmYS5zdXBwb3J0c0NvbWV0KX0sCmFkZExpc3RlbmVyOmZ1bmN0aW9uKGZhLGlhLFope2hbZmFdPXtpbml0aWFsUmVxdWVzdDohMCxsaXN0ZW5lcjppYSxzY29wZTpafTt0fHwodD0hMCxKKCkpfSxjYW5jZWxDdXN0b21EZWxheTpmdW5jdGlvbigpe2w9bnVsbH0sZ2V0RGVsYXk6ZnVuY3Rpb24oKXtudWxsIT09bD91PWw6Yjw9bSYmKHU9Z1tiXSxjKyssMz09YyYmKGIrKyxjPTApKTtyZXR1cm4gMUUzKnV9LGdldFJlY2VpdmVVcmw6ZnVuY3Rpb24oKXtyZXR1cm4gRn0sZ2V0U2VuZFVybDpmdW5jdGlvbigpe3JldHVybiBCfSxpc1N1cHBvcnRzQ29tZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZH0scHJvY2Vzc1Jlc3BvbnNlOkQscmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oZmEpe2ZhIGluIGgmJmRlbGV0ZSBoW2ZhXTswPT09RS5rZXlzKGgpLmxlbmd0aCYmKHQ9ITEsSSgpKX0scmVzdW1lOmZ1bmN0aW9uKCl7ej0hMTtNKCl9LHNldEN1c3RvbURlbGF5OmZ1bmN0aW9uKGZhKXtsPW51bGw9PT1mYT9mYTpmYS8xRTN9LHNldERlbGF5OmZ1bmN0aW9uKGZhKXt1PQpmYS8xRTN9LHNldEVuY3J5cHRlZFVzZXJJZDpmdW5jdGlvbihmYSl7Zj1mYX0sc2V0U3VwcG9ydHNDb21ldDpmdW5jdGlvbihmYSl7ZD1mYX0sc2V0VXJsOmZ1bmN0aW9uKGZhKXtIPWZhfSxzdWJtaXRSZXF1ZXN0OmZ1bmN0aW9uKGZhLGlhLFope2lmKCFlJiZmYSBpbiBoKXtmb3IodmFyIGVhIGluIGlhKWlmKGlhLmhhc093blByb3BlcnR5KGVhKSl7dmFyIG9hPWlhW2VhXTtvYS5yZXBsYWNlJiYob2E9b2EucmVwbGFjZSgieyIsIlskT1BFTl9DVVJMWV9CUkFDRSRdIiksb2E9b2EucmVwbGFjZSgifSIsIlskQ0xPU0VfQ1VSTFlfQlJBQ0UkXSIpLGlhW2VhXT1vYSl9ZmE9e2RhdGE6aWEscG9ydGxldElkOmZhfTtaJiYoZmEuY2h1bmtJZD1aKTt3LnB1c2goZmEpO1YoKX19LHN1c3BlbmQ6ZnVuY3Rpb24oKXtJKCk7ej0hMH0sdXJsOkh9O2EuZ2V0V2luKCkub24oImZvY3VzIixmdW5jdGlvbihmYSl7cy5zdGFydFBvbGxpbmc9ITA7ZT0hMTtNKCl9KTtMaWZlcmF5LlBvbGxlcj1uYX0sCiIiLHtyZXF1aXJlczpbImF1aS1iYXNlIiwiaW8iLCJqc29uIl19KTsKWVVJLmFkZCgiYXN5bmMtcXVldWUiLGZ1bmN0aW9uKGEsRSl7YS5Bc3luY1F1ZXVlPWZ1bmN0aW9uKCl7dGhpcy5faW5pdCgpO3RoaXMuYWRkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIHE9YS5Bc3luY1F1ZXVlLHQ9YS5MYW5nLmlzT2JqZWN0LGY9YS5MYW5nLmlzRnVuY3Rpb247cS5kZWZhdWx0cz1hLm1peCh7YXV0b0NvbnRpbnVlOiEwLGl0ZXJhdGlvbnM6MSx0aW1lb3V0OjEwLHVudGlsOmZ1bmN0aW9uKCl7dGhpcy5pdGVyYXRpb25zfD0wO3JldHVybiAwPj10aGlzLml0ZXJhdGlvbnN9fSxhLmNvbmZpZy5xdWV1ZURlZmF1bHRzfHx7fSk7YS5leHRlbmQocSxhLkV2ZW50VGFyZ2V0LHtfcnVubmluZzohMSxfaW5pdDpmdW5jdGlvbigpe2EuRXZlbnRUYXJnZXQuY2FsbCh0aGlzLHtwcmVmaXg6InF1ZXVlIixlbWl0RmFjYWRlOiEwfSk7dGhpcy5fcT1bXTt0aGlzLmRlZmF1bHRzPXt9O3RoaXMuX2luaXRFdmVudHMoKX0sX2luaXRFdmVudHM6ZnVuY3Rpb24oKXt0aGlzLnB1Ymxpc2goe2V4ZWN1dGU6e2RlZmF1bHRGbjp0aGlzLl9kZWZFeGVjRm4sCmVtaXRGYWNhZGU6ITB9LHNoaWZ0OntkZWZhdWx0Rm46dGhpcy5fZGVmU2hpZnRGbixlbWl0RmFjYWRlOiEwfSxhZGQ6e2RlZmF1bHRGbjp0aGlzLl9kZWZBZGRGbixlbWl0RmFjYWRlOiEwfSxwcm9tb3RlOntkZWZhdWx0Rm46dGhpcy5fZGVmUHJvbW90ZUZuLGVtaXRGYWNhZGU6ITB9LHJlbW92ZTp7ZGVmYXVsdEZuOnRoaXMuX2RlZlJlbW92ZUZuLGVtaXRGYWNhZGU6ITB9fSl9LG5leHQ6ZnVuY3Rpb24oKXtmb3IodmFyIGQ7dGhpcy5fcS5sZW5ndGg7KWlmKChkPXRoaXMuX3FbMF09dGhpcy5fcHJlcGFyZSh0aGlzLl9xWzBdKSkmJmQudW50aWwoKSl0aGlzLmZpcmUoInNoaWZ0Iix7Y2FsbGJhY2s6ZH0pLGQ9bnVsbDtlbHNlIGJyZWFrO3JldHVybiBkfHxudWxsfSxfZGVmU2hpZnRGbjpmdW5jdGlvbihkKXswPT09dGhpcy5pbmRleE9mKGQuY2FsbGJhY2spJiZ0aGlzLl9xLnNoaWZ0KCl9LF9wcmVwYXJlOmZ1bmN0aW9uKGQpe2lmKGYoZCkmJmQuX3ByZXBhcmVkKXJldHVybiBkOwpkPWEubWVyZ2UocS5kZWZhdWx0cyx7Y29udGV4dDp0aGlzLGFyZ3M6W10sX3ByZXBhcmVkOiEwfSx0aGlzLmRlZmF1bHRzLGYoZCk/e2ZuOmR9OmQpO3ZhciBjPWEuYmluZChmdW5jdGlvbigpe2MuX3J1bm5pbmd8fGMuaXRlcmF0aW9ucy0tO2YoYy5mbikmJmMuZm4uYXBwbHkoYy5jb250ZXh0fHxhLGEuQXJyYXkoYy5hcmdzKSl9LHRoaXMpO3JldHVybiBhLm1peChjLGQpfSxydW46ZnVuY3Rpb24oKXt2YXIgZCxjPSEwO2lmKHRoaXMuX2V4ZWN1dGluZylyZXR1cm4gdGhpcy5fcnVubmluZz0hMCx0aGlzO2ZvcihkPXRoaXMubmV4dCgpO2QmJiF0aGlzLmlzUnVubmluZygpJiYoYz0wPmQudGltZW91dD90aGlzLl9leGVjdXRlKGQpOnRoaXMuX3NjaGVkdWxlKGQpLGMpO2Q9dGhpcy5uZXh0KCkpO2R8fHRoaXMuZmlyZSgiY29tcGxldGUiKTtyZXR1cm4gdGhpc30sX2V4ZWN1dGU6ZnVuY3Rpb24oZCl7dGhpcy5fcnVubmluZz1kLl9ydW5uaW5nPSEwO3RoaXMuX2V4ZWN1dGluZz1kO2QuaXRlcmF0aW9ucy0tOwp0aGlzLmZpcmUoImV4ZWN1dGUiLHtjYWxsYmFjazpkfSk7dmFyIGM9dGhpcy5fcnVubmluZyYmZC5hdXRvQ29udGludWU7dGhpcy5fZXhlY3V0aW5nPXRoaXMuX3J1bm5pbmc9ZC5fcnVubmluZz0hMTtyZXR1cm4gY30sX3NjaGVkdWxlOmZ1bmN0aW9uKGQpe3RoaXMuX3J1bm5pbmc9YS5sYXRlcihkLnRpbWVvdXQsdGhpcyxmdW5jdGlvbigpe3RoaXMuX2V4ZWN1dGUoZCkmJnRoaXMucnVuKCl9KTtyZXR1cm4hMX0saXNSdW5uaW5nOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9ydW5uaW5nfSxfZGVmRXhlY0ZuOmZ1bmN0aW9uKGQpe2QuY2FsbGJhY2soKX0sYWRkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGQiLHtjYWxsYmFja3M6YS5BcnJheShhcmd1bWVudHMsMCwhMCl9KTtyZXR1cm4gdGhpc30sX2RlZkFkZEZuOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuX3EsYj1bXTthLkFycmF5LmVhY2goZC5jYWxsYmFja3MsZnVuY3Rpb24oZyl7dChnKSYmKGMucHVzaChnKSxiLnB1c2goZykpfSk7CmQuYWRkZWQ9Yn0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLl9ydW5uaW5nJiZ0KHRoaXMuX3J1bm5pbmcpJiZ0aGlzLl9ydW5uaW5nLmNhbmNlbCgpO3RoaXMuX3J1bm5pbmc9ITE7cmV0dXJuIHRoaXN9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9xPVtdO3RoaXMuX3J1bm5pbmcmJnQodGhpcy5fcnVubmluZykmJih0aGlzLl9ydW5uaW5nLmNhbmNlbCgpLHRoaXMuX3J1bm5pbmc9ITEpO3RoaXMuX2V4ZWN1dGluZ3x8dGhpcy5ydW4oKTtyZXR1cm4gdGhpc30saW5kZXhPZjpmdW5jdGlvbihkKXtmb3IodmFyIGM9MCxiPXRoaXMuX3EubGVuZ3RoLGc7YzxiOysrYylpZihnPXRoaXMuX3FbY10sZz09PWR8fGcuaWQ9PT1kKXJldHVybiBjO3JldHVybi0xfSxnZXRDYWxsYmFjazpmdW5jdGlvbihkKXtkPXRoaXMuaW5kZXhPZihkKTtyZXR1cm4tMTxkP3RoaXMuX3FbZF06bnVsbH0scHJvbW90ZTpmdW5jdGlvbihkKXt2YXIgYz17Y2FsbGJhY2s6ZH0sYjt0aGlzLmlzUnVubmluZygpP2I9dGhpcy5hZnRlcigic2hpZnQiLApmdW5jdGlvbigpe3RoaXMuZmlyZSgicHJvbW90ZSIsYyk7Yi5kZXRhY2goKX0sdGhpcyk6dGhpcy5maXJlKCJwcm9tb3RlIixjKTtyZXR1cm4gdGhpc30sX2RlZlByb21vdGVGbjpmdW5jdGlvbihkKXt2YXIgYz10aGlzLmluZGV4T2YoZC5jYWxsYmFjayksYz0tMTxjP3RoaXMuX3Euc3BsaWNlKGMsMSlbMF06bnVsbDsoZC5wcm9tb3RlZD1jKSYmdGhpcy5fcS51bnNoaWZ0KGMpfSxyZW1vdmU6ZnVuY3Rpb24oZCl7dmFyIGM9e2NhbGxiYWNrOmR9LGI7dGhpcy5pc1J1bm5pbmcoKT9iPXRoaXMuYWZ0ZXIoInNoaWZ0IixmdW5jdGlvbigpe3RoaXMuZmlyZSgicmVtb3ZlIixjKTtiLmRldGFjaCgpfSx0aGlzKTp0aGlzLmZpcmUoInJlbW92ZSIsYyk7cmV0dXJuIHRoaXN9LF9kZWZSZW1vdmVGbjpmdW5jdGlvbihkKXt2YXIgYz10aGlzLmluZGV4T2YoZC5jYWxsYmFjayk7ZC5yZW1vdmVkPS0xPGM/dGhpcy5fcS5zcGxpY2UoYywxKVswXTpudWxsfSxzaXplOmZ1bmN0aW9uKCl7dGhpcy5pc1J1bm5pbmcoKXx8CnRoaXMubmV4dCgpO3JldHVybiB0aGlzLl9xLmxlbmd0aH19KX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZXZlbnQtY3VzdG9tIl19KTsKWVVJLmFkZCgiYmFzZS1idWlsZCIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKGssbSxwKXtwW2tdJiYobVtrXT0obVtrXXx8W10pLmNvbmNhdChwW2tdKSl9ZnVuY3Rpb24gdChrLG0scCl7cC5fQVRUUl9DRkcmJihtLl9BVFRSX0NGR19IQVNIPW51bGwscS5hcHBseShudWxsLGFyZ3VtZW50cykpfWZ1bmN0aW9uIGYoayxtLHApe2QubW9kaWZ5QXR0cnMobSxwLkFUVFJTKX12YXIgZD1hLkJhc2VDb3JlLGM9YS5CYXNlLGI9YS5MYW5nLGc9WyJfUExVRyIsIl9VTlBMVUciXSxlO2MuX2J1aWxkPWZ1bmN0aW9uKGssbSxwLHMsbCxoKXt2YXIgdT1jLl9idWlsZCx3PXUuX2N0b3IobSxoKTtoPXUuX2NmZyhtLGgscCk7dmFyIHo9dS5fbWl4Q3VzdCxBPXcuX3l1aWJ1aWxkLmR5bmFtaWMsSCxGLEIsSSxNLEQ7SD0wO2ZvcihGPXAubGVuZ3RoO0g8RjtIKyspQj1wW0hdLEk9Qi5wcm90b3R5cGUsTT1JLmluaXRpYWxpemVyLEQ9SS5kZXN0cnVjdG9yLGRlbGV0ZSBJLmluaXRpYWxpemVyLGRlbGV0ZSBJLmRlc3RydWN0b3IsCmEubWl4KHcsQiwhMCxudWxsLDEpLHoodyxCLGgpLE0mJihJLmluaXRpYWxpemVyPU0pLEQmJihJLmRlc3RydWN0b3I9RCksdy5feXVpYnVpbGQuZXh0cy5wdXNoKEIpO3MmJmEubWl4KHcucHJvdG90eXBlLHMsITApO2wmJihhLm1peCh3LHUuX2NsZWFuKGwsaCksITApLHoodyxsLGgpKTt3LnByb3RvdHlwZS5oYXNJbXBsPXUuX2ltcGw7QSYmKHcuTkFNRT1rLHcucHJvdG90eXBlLmNvbnN0cnVjdG9yPXcsdy5tb2RpZnlBdHRycz1tLm1vZGlmeUF0dHJzKTtyZXR1cm4gd307ZT1jLl9idWlsZDthLm1peChlLHtfbWl4Q3VzdDpmdW5jdGlvbihrLG0scCl7dmFyIHMsbCxoLHU7cCYmKHM9cC5hZ2dyZWdhdGVzLGw9cC5jdXN0b20saD1wLnN0YXRpY3MpO2gmJmEubWl4KGssbSwhMCxoKTtpZihzKWZvcih1PTAsaD1zLmxlbmd0aDt1PGg7dSsrKXA9c1t1XSwhay5oYXNPd25Qcm9wZXJ0eShwKSYmbS5oYXNPd25Qcm9wZXJ0eShwKSYmKGtbcF09Yi5pc0FycmF5KG1bcF0pP1tdOnt9KSxhLmFnZ3JlZ2F0ZShrLAptLCEwLFtwXSk7aWYobClmb3IodSBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkodSkpbFt1XSh1LGssbSl9LF90bXBsOmZ1bmN0aW9uKGspe2Z1bmN0aW9uIG0oKXttLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfWEuZXh0ZW5kKG0sayk7cmV0dXJuIG19LF9pbXBsOmZ1bmN0aW9uKGspe3ZhciBtPXRoaXMuX2dldENsYXNzZXMoKSxwLHMsbCxoLHU7cD0wO2ZvcihzPW0ubGVuZ3RoO3A8cztwKyspaWYobD1tW3BdLGwuX3l1aWJ1aWxkKWZvcihsPWwuX3l1aWJ1aWxkLmV4dHMsaD1sLmxlbmd0aCx1PTA7dTxoO3UrKylpZihsW3VdPT09aylyZXR1cm4hMDtyZXR1cm4hMX0sX2N0b3I6ZnVuY3Rpb24oayxtKXt2YXIgcD1tJiYhMT09PW0uZHluYW1pYz8hMTohMCxzPXA/ZS5fdG1wbChrKTprLGw9cy5feXVpYnVpbGQ7bHx8KGw9cy5feXVpYnVpbGQ9e30pO2wuaWQ9bC5pZHx8bnVsbDtsLmV4dHM9bC5leHRzfHxbXTtsLmR5bmFtaWM9cDtyZXR1cm4gc30sCl9jZmc6ZnVuY3Rpb24oayxtLHApe2Zvcih2YXIgcz1bXSxsPXt9LGg9W10sdT1tJiZtLmFnZ3JlZ2F0ZXMsdz1tJiZtLmN1c3RvbSx6PW0mJm0uc3RhdGljcyxBPWssSCxGO0EmJkEucHJvdG90eXBlOyl7aWYoaz1BLl9idWlsZENmZylrLmFnZ3JlZ2F0ZXMmJihzPXMuY29uY2F0KGsuYWdncmVnYXRlcykpLGsuY3VzdG9tJiZhLm1peChsLGsuY3VzdG9tLCEwKSxrLnN0YXRpY3MmJihoPWguY29uY2F0KGsuc3RhdGljcykpO0E9QS5zdXBlcmNsYXNzP0Euc3VwZXJjbGFzcy5jb25zdHJ1Y3RvcjpudWxsfWlmKHApZm9yKEg9MCxGPXAubGVuZ3RoO0g8RjtIKyspaWYoQT1wW0hdLGs9QS5fYnVpbGRDZmcpay5hZ2dyZWdhdGVzJiYocz1zLmNvbmNhdChrLmFnZ3JlZ2F0ZXMpKSxrLmN1c3RvbSYmYS5taXgobCxrLmN1c3RvbSwhMCksay5zdGF0aWNzJiYoaD1oLmNvbmNhdChrLnN0YXRpY3MpKTt1JiYocz1zLmNvbmNhdCh1KSk7dyYmYS5taXgobCxtLmNmZ0J1aWxkLCEwKTt6JiYoaD1oLmNvbmNhdCh6KSk7CnJldHVybnthZ2dyZWdhdGVzOnMsY3VzdG9tOmwsc3RhdGljczpofX0sX2NsZWFuOmZ1bmN0aW9uKGssbSl7dmFyIHAscyxsLGg9YS5tZXJnZShrKSx1PW0uYWdncmVnYXRlcztzPW0uY3VzdG9tO2ZvcihwIGluIHMpaC5oYXNPd25Qcm9wZXJ0eShwKSYmZGVsZXRlIGhbcF07cz0wO2ZvcihsPXUubGVuZ3RoO3M8bDtzKyspcD11W3NdLGguaGFzT3duUHJvcGVydHkocCkmJmRlbGV0ZSBoW3BdO3JldHVybiBofX0pO2MuYnVpbGQ9ZnVuY3Rpb24oayxtLHAscyl7cmV0dXJuIGUoayxtLHAsbnVsbCxudWxsLHMpfTtjLmNyZWF0ZT1mdW5jdGlvbihrLG0scCxzLGwpe3JldHVybiBlKGssbSxwLHMsbCl9O2MubWl4PWZ1bmN0aW9uKGssbSl7ay5fQ0FDSEVEX0NMQVNTX0RBVEEmJihrLl9DQUNIRURfQ0xBU1NfREFUQT1udWxsKTtyZXR1cm4gZShudWxsLGssbSxudWxsLG51bGwse2R5bmFtaWM6ITF9KX07ZC5fYnVpbGRDZmc9e2FnZ3JlZ2F0ZXM6Zy5jb25jYXQoKSxjdXN0b206e0FUVFJTOmYsCl9BVFRSX0NGRzp0LF9OT05fQVRUUlNfQ0ZHOnF9fTtjLl9idWlsZENmZz17YWdncmVnYXRlczpnLmNvbmNhdCgpLGN1c3RvbTp7QVRUUlM6ZixfQVRUUl9DRkc6dCxfTk9OX0FUVFJTX0NGRzpxfX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImJhc2UtYmFzZSJdfSk7CllVSS5hZGQoImNvb2tpZSIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKGwpe3Rocm93IG5ldyBUeXBlRXJyb3IobCk7fWZ1bmN0aW9uIHQobCl7YihsKSYmIiIhPT1sfHxxKCJDb29raWUgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4iKX1mdW5jdGlvbiBmKGwpe2IobCkmJiIiIT09bHx8cSgiU3ViY29va2llIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuIil9dmFyIGQ9YS5MYW5nLGM9YS5PYmplY3QsYj1kLmlzU3RyaW5nLGc9ZC5pc09iamVjdCxlPWQuaXNVbmRlZmluZWQsaz1kLmlzRnVuY3Rpb24sbT1lbmNvZGVVUklDb21wb25lbnQscD1kZWNvZGVVUklDb21wb25lbnQscz1hLmNvbmZpZy5kb2M7YS5Db29raWU9e19jcmVhdGVDb29raWVTdHJpbmc6ZnVuY3Rpb24obCxoLHUsdyl7dz13fHx7fTtsPW0obCkrIlx4M2QiKyh1P20oaCk6aCk7aD13LmV4cGlyZXM7dT13LnBhdGg7dmFyIHo9dy5kb21haW47Zyh3KSYmKGggaW5zdGFuY2VvZiBEYXRlJiYobCs9CiI7IGV4cGlyZXNceDNkIitoLnRvVVRDU3RyaW5nKCkpLGIodSkmJiIiIT09dSYmKGwrPSI7IHBhdGhceDNkIit1KSxiKHopJiYiIiE9PXomJihsKz0iOyBkb21haW5ceDNkIit6KSwhMD09PXcuc2VjdXJlJiYobCs9Ijsgc2VjdXJlIikpO3JldHVybiBsfSxfY3JlYXRlQ29va2llSGFzaFN0cmluZzpmdW5jdGlvbihsKXtnKGwpfHxxKCJDb29raWUuX2NyZWF0ZUNvb2tpZUhhc2hTdHJpbmcoKTogQXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QuIik7dmFyIGg9W107Yy5lYWNoKGwsZnVuY3Rpb24odSx3KXtrKHUpfHxlKHUpfHxoLnB1c2gobSh3KSsiXHgzZCIrbShTdHJpbmcodSkpKX0pO3JldHVybiBoLmpvaW4oIlx4MjYiKX0sX3BhcnNlQ29va2llSGFzaDpmdW5jdGlvbihsKXt2YXIgaD1sLnNwbGl0KCJceDI2IiksdT1udWxsLHc9e307aWYobC5sZW5ndGgpe2w9MDtmb3IodmFyIHo9aC5sZW5ndGg7bDx6O2wrKyl1PWhbbF0uc3BsaXQoIlx4M2QiKSx3W3AodVswXSldPXAodVsxXSl9cmV0dXJuIHd9LApfcGFyc2VDb29raWVTdHJpbmc6ZnVuY3Rpb24obCxoLHUpe3ZhciB3PXt9O2lmKGIobCkmJjA8bC5sZW5ndGgpe2g9ITE9PT1oP2Z1bmN0aW9uKE0pe3JldHVybiBNfTpwO2w9bC5zcGxpdCgvO1xzL2cpO2Zvcih2YXIgej1udWxsLEE9bnVsbCxIPW51bGwsRj0wLEI9bC5sZW5ndGg7RjxCO0YrKyl7SD1sW0ZdLm1hdGNoKC8oW149XSspPS9pKTtpZihIIGluc3RhbmNlb2YgQXJyYXkpdHJ5e3o9cChIWzFdKSxBPWgobFtGXS5zdWJzdHJpbmcoSFsxXS5sZW5ndGgrMSkpfWNhdGNoKEkpe31lbHNlIHo9cChsW0ZdKSxBPSIiOyFlKHUpJiZ1LnJldmVyc2VDb29raWVMb2FkaW5nP2Uod1t6XSkmJih3W3pdPUEpOndbel09QX19cmV0dXJuIHd9LF9zZXREb2M6ZnVuY3Rpb24obCl7cz1sfSxleGlzdHM6ZnVuY3Rpb24obCl7dChsKTtyZXR1cm4gdGhpcy5fcGFyc2VDb29raWVTdHJpbmcocy5jb29raWUsITApLmhhc093blByb3BlcnR5KGwpfSxnZXQ6ZnVuY3Rpb24obCxoKXt0KGwpO3ZhciB1LAp3O2soaCk/KHc9aCxoPXt9KTpnKGgpP3c9aC5jb252ZXJ0ZXI6aD17fTt1PXRoaXMuX3BhcnNlQ29va2llU3RyaW5nKHMuY29va2llLCFoLnJhdyxoKVtsXTtyZXR1cm4gZSh1KT9udWxsOmsodyk/dyh1KTp1fSxnZXRTdWI6ZnVuY3Rpb24obCxoLHUsdyl7bD10aGlzLmdldFN1YnMobCx3KTtyZXR1cm4gbnVsbCE9PWw/KGYoaCksZShsW2hdKT9udWxsOmsodSk/dShsW2hdKTpsW2hdKTpudWxsfSxnZXRTdWJzOmZ1bmN0aW9uKGwsaCl7dChsKTt2YXIgdT10aGlzLl9wYXJzZUNvb2tpZVN0cmluZyhzLmNvb2tpZSwhMSxoKTtyZXR1cm4gYih1W2xdKT90aGlzLl9wYXJzZUNvb2tpZUhhc2godVtsXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGwsaCl7dChsKTtoPWEubWVyZ2UoaHx8e30se2V4cGlyZXM6bmV3IERhdGUoMCl9KTtyZXR1cm4gdGhpcy5zZXQobCwiIixoKX0scmVtb3ZlU3ViOmZ1bmN0aW9uKGwsaCx1KXt0KGwpO2YoaCk7dT11fHx7fTt2YXIgdz10aGlzLmdldFN1YnMobCk7CmlmKGcodykmJncuaGFzT3duUHJvcGVydHkoaCkpe2RlbGV0ZSB3W2hdO2lmKHUucmVtb3ZlSWZFbXB0eSl7Zm9yKHZhciB6IGluIHcpaWYody5oYXNPd25Qcm9wZXJ0eSh6KSYmIWsod1t6XSkmJiFlKHdbel0pKXJldHVybiB0aGlzLnNldFN1YnMobCx3LHUpO3JldHVybiB0aGlzLnJlbW92ZShsLHUpfXJldHVybiB0aGlzLnNldFN1YnMobCx3LHUpfXJldHVybiIifSxzZXQ6ZnVuY3Rpb24obCxoLHUpe3QobCk7ZShoKSYmcSgiQ29va2llLnNldCgpOiBWYWx1ZSBjYW5ub3QgYmUgdW5kZWZpbmVkLiIpO3U9dXx8e307bD10aGlzLl9jcmVhdGVDb29raWVTdHJpbmcobCxoLCF1LnJhdyx1KTtyZXR1cm4gcy5jb29raWU9bH0sc2V0U3ViOmZ1bmN0aW9uKGwsaCx1LHcpe3QobCk7ZihoKTtlKHUpJiZxKCJDb29raWUuc2V0U3ViKCk6IFN1YmNvb2tpZSB2YWx1ZSBjYW5ub3QgYmUgdW5kZWZpbmVkLiIpO3ZhciB6PXRoaXMuZ2V0U3VicyhsKTtnKHopfHwoej17fSk7eltoXT11O3JldHVybiB0aGlzLnNldFN1YnMobCwKeix3KX0sc2V0U3ViczpmdW5jdGlvbihsLGgsdSl7dChsKTtnKGgpfHxxKCJDb29raWUuc2V0U3VicygpOiBDb29raWUgdmFsdWUgbXVzdCBiZSBhbiBvYmplY3QuIik7bD10aGlzLl9jcmVhdGVDb29raWVTdHJpbmcobCx0aGlzLl9jcmVhdGVDb29raWVIYXNoU3RyaW5nKGgpLCExLHUpO3JldHVybiBzLmNvb2tpZT1sfX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInl1aS1iYXNlIl19KTsKWVVJLmFkZCgiZXZlbnQtdG91Y2giLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5jb25maWcud2luLHQ9e307YS5ET01FdmVudEZhY2FkZS5wcm90b3R5cGUuX3RvdWNoPWZ1bmN0aW9uKGYsZCxjKXt2YXIgYixnLGUsayxtO2lmKGYudG91Y2hlcylmb3IodGhpcy50b3VjaGVzPVtdLG09e30sYj0wLGc9Zi50b3VjaGVzLmxlbmd0aDtiPGc7KytiKWs9Zi50b3VjaGVzW2JdLG1bYS5zdGFtcChrKV09dGhpcy50b3VjaGVzW2JdPW5ldyBhLkRPTUV2ZW50RmFjYWRlKGssZCxjKTtpZihmLnRhcmdldFRvdWNoZXMpZm9yKHRoaXMudGFyZ2V0VG91Y2hlcz1bXSxiPTAsZz1mLnRhcmdldFRvdWNoZXMubGVuZ3RoO2I8ZzsrK2Ipaz1mLnRhcmdldFRvdWNoZXNbYl0sZT1tJiZtW2Euc3RhbXAoaywhMCldLHRoaXMudGFyZ2V0VG91Y2hlc1tiXT1lfHxuZXcgYS5ET01FdmVudEZhY2FkZShrLGQsYyk7aWYoZi5jaGFuZ2VkVG91Y2hlcylmb3IodGhpcy5jaGFuZ2VkVG91Y2hlcz1bXSxiPTAsZz1mLmNoYW5nZWRUb3VjaGVzLmxlbmd0aDtiPApnOysrYilrPWYuY2hhbmdlZFRvdWNoZXNbYl0sZT1tJiZtW2Euc3RhbXAoaywhMCldLHRoaXMuY2hhbmdlZFRvdWNoZXNbYl09ZXx8bmV3IGEuRE9NRXZlbnRGYWNhZGUoayxkLGMpOyJzY2FsZSJpbiBmJiYodGhpcy5zY2FsZT1mLnNjYWxlKTsicm90YXRpb24iaW4gZiYmKHRoaXMucm90YXRpb249Zi5yb3RhdGlvbik7ImlkZW50aWZpZXIiaW4gZiYmKHRoaXMuaWRlbnRpZmllcj1mLmlkZW50aWZpZXIpfTthLk5vZGUuRE9NX0VWRU5UUyYmYS5taXgoYS5Ob2RlLkRPTV9FVkVOVFMse3RvdWNoc3RhcnQ6MSx0b3VjaG1vdmU6MSx0b3VjaGVuZDoxLHRvdWNoY2FuY2VsOjEsZ2VzdHVyZXN0YXJ0OjEsZ2VzdHVyZWNoYW5nZToxLGdlc3R1cmVlbmQ6MSxNU1BvaW50ZXJEb3duOjEsTVNQb2ludGVyVXA6MSxNU1BvaW50ZXJNb3ZlOjEsTVNQb2ludGVyQ2FuY2VsOjEscG9pbnRlcmRvd246MSxwb2ludGVydXA6MSxwb2ludGVybW92ZToxLHBvaW50ZXJjYW5jZWw6MX0pO3EmJiJvbnRvdWNoc3RhcnQiaW4KcSYmIShhLlVBLmNocm9tZSYmNj5hLlVBLmNocm9tZSk/KHQuc3RhcnQ9WyJ0b3VjaHN0YXJ0IiwibW91c2Vkb3duIl0sdC5lbmQ9WyJ0b3VjaGVuZCIsIm1vdXNldXAiXSx0Lm1vdmU9WyJ0b3VjaG1vdmUiLCJtb3VzZW1vdmUiXSx0LmNhbmNlbD1bInRvdWNoY2FuY2VsIiwibW91c2VjYW5jZWwiXSk6cSYmcS5Qb2ludGVyRXZlbnQ/KHQuc3RhcnQ9InBvaW50ZXJkb3duIix0LmVuZD0icG9pbnRlcnVwIix0Lm1vdmU9InBvaW50ZXJtb3ZlIix0LmNhbmNlbD0icG9pbnRlcmNhbmNlbCIpOnEmJiJtc1BvaW50ZXJFbmFibGVkImluIHEubmF2aWdhdG9yPyh0LnN0YXJ0PSJNU1BvaW50ZXJEb3duIix0LmVuZD0iTVNQb2ludGVyVXAiLHQubW92ZT0iTVNQb2ludGVyTW92ZSIsdC5jYW5jZWw9Ik1TUG9pbnRlckNhbmNlbCIpOih0LnN0YXJ0PSJtb3VzZWRvd24iLHQuZW5kPSJtb3VzZXVwIix0Lm1vdmU9Im1vdXNlbW92ZSIsdC5jYW5jZWw9Im1vdXNlY2FuY2VsIik7YS5FdmVudC5fR0VTVFVSRV9NQVA9CnR9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbIm5vZGUtYmFzZSJdfSk7WVVJLmFkZCgib3ZlcmxheSIsZnVuY3Rpb24oYSxFKXthLk92ZXJsYXk9YS5CYXNlLmNyZWF0ZSgib3ZlcmxheSIsYS5XaWRnZXQsW2EuV2lkZ2V0U3RkTW9kLGEuV2lkZ2V0UG9zaXRpb24sYS5XaWRnZXRTdGFjayxhLldpZGdldFBvc2l0aW9uQWxpZ24sYS5XaWRnZXRQb3NpdGlvbkNvbnN0cmFpbl0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6IndpZGdldCB3aWRnZXQtc3RkbW9kIHdpZGdldC1wb3NpdGlvbiB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXN0YWNrIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4iLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSk7CllVSS5hZGQoInF1ZXJ5c3RyaW5nLXN0cmluZ2lmeSIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLm5hbWVzcGFjZSgiUXVlcnlTdHJpbmciKSx0PVtdLGY9YS5MYW5nO3EuZXNjYXBlPWVuY29kZVVSSUNvbXBvbmVudDtxLnN0cmluZ2lmeT1mdW5jdGlvbihkLGMsYil7dmFyIGcsZSxrLG0scCxzPWMmJmMuc2VwP2Muc2VwOiJceDI2IjtwPWMmJmMuZXE/Yy5lcToiXHgzZCI7az1jJiZjLmFycmF5S2V5P2MuYXJyYXlLZXk6ITE7aWYoZi5pc051bGwoZCl8fGYuaXNVbmRlZmluZWQoZCl8fGYuaXNGdW5jdGlvbihkKSlyZXR1cm4gYj9xLmVzY2FwZShiKStwOiIiO2lmKGYuaXNCb29sZWFuKGQpfHwiW29iamVjdCBCb29sZWFuXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZCkpZD0rZDtpZihmLmlzTnVtYmVyKGQpfHxmLmlzU3RyaW5nKGQpKXJldHVybiBxLmVzY2FwZShiKStwK3EuZXNjYXBlKGQpO2lmKGYuaXNBcnJheShkKSl7cD1bXTtiPWs/YisiW10iOmI7Zz1kLmxlbmd0aDsKZm9yKGs9MDtrPGc7aysrKXAucHVzaChxLnN0cmluZ2lmeShkW2tdLGMsYikpO3JldHVybiBwLmpvaW4ocyl9Zm9yKGs9dC5sZW5ndGgtMTswPD1rOy0taylpZih0W2tdPT09ZCl0aHJvdyBFcnJvcigiUXVlcnlTdHJpbmcuc3RyaW5naWZ5LiBDeWNsaWNhbCByZWZlcmVuY2UiKTt0LnB1c2goZCk7cD1bXTtnPWI/YisiWyI6IiI7ZT1iPyJdIjoiIjtmb3IoayBpbiBkKWQuaGFzT3duUHJvcGVydHkoaykmJihtPWcraytlLHAucHVzaChxLnN0cmluZ2lmeShkW2tdLGMsbSkpKTt0LnBvcCgpO3A9cC5qb2luKHMpO3JldHVybiFwJiZiP2IrIlx4M2QiOnB9fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoIndpZGdldC1jaGlsZCIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKCl7YS5hZnRlcih0aGlzLl9zeW5jVUlDaGlsZCx0aGlzLCJzeW5jVUkiKTthLmFmdGVyKHRoaXMuX2JpbmRVSUNoaWxkLHRoaXMsImJpbmRVSSIpfXZhciB0PWEuTGFuZztxLkFUVFJTPXtzZWxlY3RlZDp7dmFsdWU6MCx2YWxpZGF0b3I6dC5pc051bWJlcn0saW5kZXg6e3JlYWRPbmx5OiEwLGdldHRlcjpmdW5jdGlvbigpe3ZhciBmPXRoaXMuZ2V0KCJwYXJlbnQiKSxkPS0xO2YmJihkPWYuaW5kZXhPZih0aGlzKSk7cmV0dXJuIGR9fSxwYXJlbnQ6e3JlYWRPbmx5OiEwfSxkZXB0aDp7cmVhZE9ubHk6ITAsZ2V0dGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciBmPXRoaXMuZ2V0KCJwYXJlbnQiKSxkPXRoaXMuZ2V0KCJyb290IiksYz0tMTtmOyl7Yys9MTtpZihmPT1kKWJyZWFrO2Y9Zi5nZXQoInBhcmVudCIpfXJldHVybiBjfX0scm9vdDp7cmVhZE9ubHk6ITAsZ2V0dGVyOmZ1bmN0aW9uKCl7dmFyIGY9ZnVuY3Rpb24oZCl7dmFyIGM9CmQuZ2V0KCJwYXJlbnQiKSxiPWQuUk9PVF9UWVBFLGc9YztiJiYoZz1jJiZhLmluc3RhbmNlT2YoYyxiKSk7cmV0dXJuIGc/ZihjKTpkfTtyZXR1cm4gZih0aGlzKX19fTtxLnByb3RvdHlwZT17Uk9PVF9UWVBFOm51bGwsX2dldFVJRXZlbnROb2RlOmZ1bmN0aW9uKCl7dmFyIGY9dGhpcy5nZXQoInJvb3QiKSxkO2YmJihkPWYuZ2V0KCJib3VuZGluZ0JveCIpKTtyZXR1cm4gZH0sbmV4dDpmdW5jdGlvbihmKXt2YXIgZD10aGlzLmdldCgicGFyZW50IiksYztkJiYoYz1kLml0ZW0odGhpcy5nZXQoImluZGV4IikrMSkpOyFjJiZmJiYoYz1kLml0ZW0oMCkpO3JldHVybiBjfSxwcmV2aW91czpmdW5jdGlvbihmKXt2YXIgZD10aGlzLmdldCgicGFyZW50IiksYz10aGlzLmdldCgiaW5kZXgiKSxiO2QmJjA8YyYmKGI9ZC5pdGVtKFtjLTFdKSk7IWImJmYmJihiPWQuaXRlbShkLnNpemUoKS0xKSk7cmV0dXJuIGJ9LHJlbW92ZTpmdW5jdGlvbihmKXt2YXIgZCxjO3QuaXNOdW1iZXIoZik/Yz0KYS5XaWRnZXRQYXJlbnQucHJvdG90eXBlLnJlbW92ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6KGQ9dGhpcy5nZXQoInBhcmVudCIpKSYmKGM9ZC5yZW1vdmUodGhpcy5nZXQoImluZGV4IikpKTtyZXR1cm4gY30saXNSb290OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PXRoaXMuZ2V0KCJyb290Iil9LGFuY2VzdG9yOmZ1bmN0aW9uKGYpe3ZhciBkPXRoaXMuZ2V0KCJyb290IiksYztpZih0aGlzLmdldCgiZGVwdGgiKT5mKWZvcihjPXRoaXMuZ2V0KCJwYXJlbnQiKTtjIT1kJiZjLmdldCgiZGVwdGgiKT5mOyljPWMuZ2V0KCJwYXJlbnQiKTtyZXR1cm4gY30sX3VpU2V0Q2hpbGRTZWxlY3RlZDpmdW5jdGlvbihmKXt2YXIgZD10aGlzLmdldCgiYm91bmRpbmdCb3giKSxjPXRoaXMuZ2V0Q2xhc3NOYW1lKCJzZWxlY3RlZCIpOzA9PT1mP2QucmVtb3ZlQ2xhc3MoYyk6ZC5hZGRDbGFzcyhjKX0sX2FmdGVyQ2hpbGRTZWxlY3RlZENoYW5nZTpmdW5jdGlvbihmKXt0aGlzLl91aVNldENoaWxkU2VsZWN0ZWQoZi5uZXdWYWwpfSwKX3N5bmNVSUNoaWxkOmZ1bmN0aW9uKCl7dGhpcy5fdWlTZXRDaGlsZFNlbGVjdGVkKHRoaXMuZ2V0KCJzZWxlY3RlZCIpKX0sX2JpbmRVSUNoaWxkOmZ1bmN0aW9uKCl7dGhpcy5hZnRlcigic2VsZWN0ZWRDaGFuZ2UiLHRoaXMuX2FmdGVyQ2hpbGRTZWxlY3RlZENoYW5nZSl9fTthLldpZGdldENoaWxkPXF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJ3aWRnZXQiXX0pOwpZVUkuYWRkKCJ3aWRnZXQtcG9zaXRpb24tYWxpZ24iLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcShmKXt9dmFyIHQ9YS5MYW5nO3EuQVRUUlM9e2FsaWduOnt2YWx1ZTpudWxsfSxjZW50ZXJlZDp7c2V0dGVyOiJfc2V0QWxpZ25DZW50ZXIiLGxhenlBZGQ6ITEsdmFsdWU6ITF9LGFsaWduT246e3ZhbHVlOltdLHZhbGlkYXRvcjphLkxhbmcuaXNBcnJheX19O3EuVEw9InRsIjtxLlRSPSJ0ciI7cS5CTD0iYmwiO3EuQlI9ImJyIjtxLlRDPSJ0YyI7cS5SQz0icmMiO3EuQkM9ImJjIjtxLkxDPSJsYyI7cS5DQz0iY2MiO3EucHJvdG90eXBlPXtpbml0aWFsaXplcjpmdW5jdGlvbigpe3RoaXMuX3Bvc05vZGV8fGEuZXJyb3IoIldpZGdldFBvc2l0aW9uIG5lZWRzIHRvIGJlIGFkZGVkIHRvIHRoZSBXaWRnZXQsIGJlZm9yZSBXaWRnZXRQb3NpdGlvbkFsaWduIGlzIGFkZGVkIik7YS5hZnRlcih0aGlzLl9iaW5kVUlQb3NBbGlnbix0aGlzLCJiaW5kVUkiKTthLmFmdGVyKHRoaXMuX3N5bmNVSVBvc0FsaWduLAp0aGlzLCJzeW5jVUkiKX0sX3Bvc0FsaWduVUlIYW5kbGVzOm51bGwsaW5pdGlhbGl6ZXI6ZnVuY3Rpb24oKXt0aGlzLl9wb3NOb2RlfHxhLmVycm9yKCJXaWRnZXRQb3NpdGlvbiBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgV2lkZ2V0LCBiZWZvcmUgV2lkZ2V0UG9zaXRpb25BbGlnbiBpcyBhZGRlZCIpO2EuYWZ0ZXIodGhpcy5fYmluZFVJUG9zQWxpZ24sdGhpcywiYmluZFVJIik7YS5hZnRlcih0aGlzLl9zeW5jVUlQb3NBbGlnbix0aGlzLCJzeW5jVUkiKX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuX2RldGFjaFBvc0FsaWduVUlIYW5kbGVzKCl9LF9iaW5kVUlQb3NBbGlnbjpmdW5jdGlvbigpe3RoaXMuYWZ0ZXIoImFsaWduQ2hhbmdlIix0aGlzLl9hZnRlckFsaWduQ2hhbmdlKTt0aGlzLmFmdGVyKCJhbGlnbk9uQ2hhbmdlIix0aGlzLl9hZnRlckFsaWduT25DaGFuZ2UpO3RoaXMuYWZ0ZXIoInZpc2libGVDaGFuZ2UiLHRoaXMuX3N5bmNVSVBvc0FsaWduKX0sX3N5bmNVSVBvc0FsaWduOmZ1bmN0aW9uKCl7dmFyIGY9CnRoaXMuZ2V0KCJhbGlnbiIpO3RoaXMuX3VpU2V0VmlzaWJsZVBvc0FsaWduKHRoaXMuZ2V0KCJ2aXNpYmxlIikpO2YmJnRoaXMuX3VpU2V0QWxpZ24oZi5ub2RlLGYucG9pbnRzKX0sYWxpZ246ZnVuY3Rpb24oZixkKXthcmd1bWVudHMubGVuZ3RoP3RoaXMuc2V0KCJhbGlnbiIse25vZGU6Zixwb2ludHM6ZH0pOnRoaXMuX3N5bmNVSVBvc0FsaWduKCk7cmV0dXJuIHRoaXN9LGNlbnRlcmVkOmZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmFsaWduKGYsW3EuQ0MscS5DQ10pfSxfZ2V0QWxpZ25Ub1hZOmZ1bmN0aW9uKGYsZCxjLGIpe3ZhciBnO3N3aXRjaChkKXtjYXNlIHEuVEw6Zz1bYyxiXTticmVhaztjYXNlIHEuVFI6Zz1bYy1mLmdldCgib2Zmc2V0V2lkdGgiKSxiXTticmVhaztjYXNlIHEuQkw6Zz1bYyxiLWYuZ2V0KCJvZmZzZXRIZWlnaHQiKV07YnJlYWs7Y2FzZSBxLkJSOmc9W2MtZi5nZXQoIm9mZnNldFdpZHRoIiksYi1mLmdldCgib2Zmc2V0SGVpZ2h0IildO2JyZWFrO2Nhc2UgcS5UQzpnPQpbYy1mLmdldCgib2Zmc2V0V2lkdGgiKS8yLGJdO2JyZWFrO2Nhc2UgcS5CQzpnPVtjLWYuZ2V0KCJvZmZzZXRXaWR0aCIpLzIsYi1mLmdldCgib2Zmc2V0SGVpZ2h0IildO2JyZWFrO2Nhc2UgcS5MQzpnPVtjLGItZi5nZXQoIm9mZnNldEhlaWdodCIpLzJdO2JyZWFrO2Nhc2UgcS5SQzpnPVtjLWYuZ2V0KCJvZmZzZXRXaWR0aCIpLGItZi5nZXQoIm9mZnNldEhlaWdodCIpLzJdO2JyZWFrO2Nhc2UgcS5DQzpnPVtjLWYuZ2V0KCJvZmZzZXRXaWR0aCIpLzIsYi1mLmdldCgib2Zmc2V0SGVpZ2h0IikvMl19cmV0dXJuIGd9LF9nZXRBbGlnbmVkWFk6ZnVuY3Rpb24oZixkKXtpZih0LmlzQXJyYXkoZCkmJjI9PT1kLmxlbmd0aCl7dmFyIGM9dGhpcy5fZ2V0UmVnaW9uKGYpLGIsZztpZihjKXtiPWRbMV07c3dpdGNoKGIpe2Nhc2UgcS5UTDpnPVtjLmxlZnQsYy50b3BdO2JyZWFrO2Nhc2UgcS5UUjpnPVtjLnJpZ2h0LGMudG9wXTticmVhaztjYXNlIHEuQkw6Zz1bYy5sZWZ0LGMuYm90dG9tXTsKYnJlYWs7Y2FzZSBxLkJSOmc9W2MucmlnaHQsYy5ib3R0b21dO2JyZWFrO2Nhc2UgcS5UQzpnPVtjLmxlZnQrTWF0aC5mbG9vcihjLndpZHRoLzIpLGMudG9wXTticmVhaztjYXNlIHEuQkM6Zz1bYy5sZWZ0K01hdGguZmxvb3IoYy53aWR0aC8yKSxjLmJvdHRvbV07YnJlYWs7Y2FzZSBxLkxDOmc9W2MubGVmdCxjLnRvcCtNYXRoLmZsb29yKGMuaGVpZ2h0LzIpXTticmVhaztjYXNlIHEuUkM6Zz1bYy5yaWdodCxjLnRvcCtNYXRoLmZsb29yKGMuaGVpZ2h0LzIpXTticmVhaztjYXNlIHEuQ0M6Zz1bYy5sZWZ0K01hdGguZmxvb3IoYy53aWR0aC8yKSxjLnRvcCtNYXRoLmZsb29yKGMuaGVpZ2h0LzIpXX1yZXR1cm4gdGhpcy5fZ2V0QWxpZ25Ub1hZKHRoaXMuX3Bvc05vZGUsZFswXSxnWzBdLGdbMV0pfX1lbHNlIGEuZXJyb3IoImFsaWduOiBJbnZhbGlkIFBvaW50cyBBcmd1bWVudHMiKX0sX3NldEFsaWduQ2VudGVyOmZ1bmN0aW9uKGYpe2YmJnRoaXMuc2V0KCJhbGlnbiIse25vZGU6ITA9PT0KZj9udWxsOmYscG9pbnRzOltxLkNDLHEuQ0NdfSk7cmV0dXJuIGZ9LF91aVNldEFsaWduOmZ1bmN0aW9uKGYsZCl7dmFyIGM9dGhpcy5fZ2V0QWxpZ25lZFhZKGYsZCk7YyYmdGhpcy5fZG9BbGlnbihjKX0sX3VpU2V0VmlzaWJsZVBvc0FsaWduOmZ1bmN0aW9uKGYpe2Y/dGhpcy5fYXR0YWNoUG9zQWxpZ25VSUhhbmRsZXMoKTp0aGlzLl9kZXRhY2hQb3NBbGlnblVJSGFuZGxlcygpfSxfYXR0YWNoUG9zQWxpZ25VSUhhbmRsZXM6ZnVuY3Rpb24oKXtpZighdGhpcy5fcG9zQWxpZ25VSUhhbmRsZXMpe3ZhciBmPXRoaXMuZ2V0KCJib3VuZGluZ0JveCIpLGQ9YS5iaW5kKHRoaXMuX3N5bmNVSVBvc0FsaWduLHRoaXMpLGM9W107YS5BcnJheS5lYWNoKHRoaXMuZ2V0KCJhbGlnbk9uIiksZnVuY3Rpb24oYil7dmFyIGc9Yi5ldmVudE5hbWU7Yj1hLm9uZShiLm5vZGUpfHxmO2cmJmMucHVzaChiLm9uKGcsZCkpfSk7dGhpcy5fcG9zQWxpZ25VSUhhbmRsZXM9Y319LF9kZXRhY2hQb3NBbGlnblVJSGFuZGxlczpmdW5jdGlvbigpe3ZhciBmPQp0aGlzLl9wb3NBbGlnblVJSGFuZGxlcztmJiYoKG5ldyBhLkV2ZW50SGFuZGxlKGYpKS5kZXRhY2goKSx0aGlzLl9wb3NBbGlnblVJSGFuZGxlcz1udWxsKX0sX2RvQWxpZ246ZnVuY3Rpb24oZil7ZiYmdGhpcy5tb3ZlKGYpfSxfZ2V0UmVnaW9uOmZ1bmN0aW9uKGYpe3ZhciBkO2Y/KGY9YS5Ob2RlLm9uZShmKSkmJihkPWYuZ2V0KCJyZWdpb24iKSk6ZD10aGlzLl9wb3NOb2RlLmdldCgidmlld3BvcnRSZWdpb24iKTtyZXR1cm4gZH0sX2FmdGVyQWxpZ25DaGFuZ2U6ZnVuY3Rpb24oZil7KGY9Zi5uZXdWYWwpJiZ0aGlzLl91aVNldEFsaWduKGYubm9kZSxmLnBvaW50cyl9LF9hZnRlckFsaWduT25DaGFuZ2U6ZnVuY3Rpb24oZil7dGhpcy5fZGV0YWNoUG9zQWxpZ25VSUhhbmRsZXMoKTt0aGlzLmdldCgidmlzaWJsZSIpJiZ0aGlzLl9hdHRhY2hQb3NBbGlnblVJSGFuZGxlcygpfX07YS5XaWRnZXRQb3NpdGlvbkFsaWduPXF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbIndpZGdldC1wb3NpdGlvbiJdfSk7CllVSS5hZGQoIndpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4iLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcShkKXt9dmFyIHQ9YS5Ob2RlLGY7cS5BVFRSUz17Y29uc3RyYWluOnt2YWx1ZTpudWxsLHNldHRlcjoiX3NldENvbnN0cmFpbiJ9LHByZXZlbnRPdmVybGFwOnt2YWx1ZTohMX19O2Y9cS5fUFJFVkVOVF9PVkVSTEFQPXt4Ont0bHRyOjEsYmxicjoxLGJyYmw6MSx0cnRsOjF9LHk6e3RyYnI6MSx0bGJsOjEsYmx0bDoxLGJydHI6MX19O3EucHJvdG90eXBlPXtpbml0aWFsaXplcjpmdW5jdGlvbigpe3RoaXMuX3Bvc05vZGV8fGEuZXJyb3IoIldpZGdldFBvc2l0aW9uIG5lZWRzIHRvIGJlIGFkZGVkIHRvIHRoZSBXaWRnZXQsIGJlZm9yZSBXaWRnZXRQb3NpdGlvbkNvbnN0cmFpbiBpcyBhZGRlZCIpO2EuYWZ0ZXIodGhpcy5fYmluZFVJUG9zQ29uc3RyYWluZWQsdGhpcywiYmluZFVJIil9LGdldENvbnN0cmFpbmVkWFk6ZnVuY3Rpb24oZCxjKXtjPWN8fHRoaXMuZ2V0KCJjb25zdHJhaW4iKTsKdmFyIGI9dGhpcy5fZ2V0UmVnaW9uKCEwPT09Yz9udWxsOmMpLGc9dGhpcy5fcG9zTm9kZS5nZXQoInJlZ2lvbiIpO3JldHVyblt0aGlzLl9jb25zdHJhaW4oZFswXSwieCIsZyxiKSx0aGlzLl9jb25zdHJhaW4oZFsxXSwieSIsZyxiKV19LGNvbnN0cmFpbjpmdW5jdGlvbihkLGMpe3ZhciBiLGc7aWYoZz1jfHx0aGlzLmdldCgiY29uc3RyYWluIikpYj1kfHx0aGlzLmdldCgieHkiKSxnPXRoaXMuZ2V0Q29uc3RyYWluZWRYWShiLGcpLGdbMF09PT1iWzBdJiZnWzFdPT09YlsxXXx8dGhpcy5zZXQoInh5IixnLHtjb25zdHJhaW5lZDohMH0pfSxfc2V0Q29uc3RyYWluOmZ1bmN0aW9uKGQpe3JldHVybiEwPT09ZD9kOnQub25lKGQpfSxfY29uc3RyYWluOmZ1bmN0aW9uKGQsYyxiLGcpe2lmKGcpe3RoaXMuZ2V0KCJwcmV2ZW50T3ZlcmxhcCIpJiYoZD10aGlzLl9wcmV2ZW50T3ZlcmxhcChkLGMsYixnKSk7dmFyIGU9IngiPT1jO2M9ZT9nLndpZHRoOmcuaGVpZ2h0O2I9ZT9iLndpZHRoOgpiLmhlaWdodDt2YXIgaz1lP2cubGVmdDpnLnRvcDtnPWU/Zy5yaWdodC1iOmcuYm90dG9tLWI7aWYoZDxrfHxkPmcpYjxjP2Q8az9kPWs6ZD5nJiYoZD1nKTpkPWt9cmV0dXJuIGR9LF9wcmV2ZW50T3ZlcmxhcDpmdW5jdGlvbihkLGMsYixnKXt2YXIgZT10aGlzLmdldCgiYWxpZ24iKSxrPSJ4Ij09PWMsbSxwLHMsbCxoO2lmKGUmJmUucG9pbnRzJiZmW2NdW2UucG9pbnRzLmpvaW4oIiIpXSl7aWYoYz10aGlzLl9nZXRSZWdpb24oZS5ub2RlKSltPWs/Yi53aWR0aDpiLmhlaWdodCxwPWs/Yy5sZWZ0OmMudG9wLHM9az9jLnJpZ2h0OmMuYm90dG9tLGw9az9jLmxlZnQtZy5sZWZ0OmMudG9wLWcudG9wLGg9az9nLnJpZ2h0LWMucmlnaHQ6Zy5ib3R0b20tYy5ib3R0b207ZD5wP2g8bSYmbD5tJiYoZD1wLW0pOmw8bSYmaD5tJiYoZD1zKX1yZXR1cm4gZH0sX2JpbmRVSVBvc0NvbnN0cmFpbmVkOmZ1bmN0aW9uKCl7dGhpcy5hZnRlcigiY29uc3RyYWluQ2hhbmdlIix0aGlzLl9hZnRlckNvbnN0cmFpbkNoYW5nZSk7CnRoaXMuX2VuYWJsZUNvbnN0cmFpbnRzKHRoaXMuZ2V0KCJjb25zdHJhaW4iKSl9LF9hZnRlckNvbnN0cmFpbkNoYW5nZTpmdW5jdGlvbihkKXt0aGlzLl9lbmFibGVDb25zdHJhaW50cyhkLm5ld1ZhbCl9LF9lbmFibGVDb25zdHJhaW50czpmdW5jdGlvbihkKXtkPyh0aGlzLmNvbnN0cmFpbigpLHRoaXMuX2N4eUhhbmRsZT10aGlzLl9jeHlIYW5kbGV8fHRoaXMub24oImNvbnN0cmFpbnx4eUNoYW5nZSIsdGhpcy5fY29uc3RyYWluT25YWUNoYW5nZSkpOnRoaXMuX2N4eUhhbmRsZSYmKHRoaXMuX2N4eUhhbmRsZS5kZXRhY2goKSx0aGlzLl9jeHlIYW5kbGU9bnVsbCl9LF9jb25zdHJhaW5PblhZQ2hhbmdlOmZ1bmN0aW9uKGQpe2QuY29uc3RyYWluZWR8fChkLm5ld1ZhbD10aGlzLmdldENvbnN0cmFpbmVkWFkoZC5uZXdWYWwpKX0sX2dldFJlZ2lvbjpmdW5jdGlvbihkKXt2YXIgYztkPyhkPXQub25lKGQpKSYmKGM9ZC5nZXQoInJlZ2lvbiIpKTpjPXRoaXMuX3Bvc05vZGUuZ2V0KCJ2aWV3cG9ydFJlZ2lvbiIpOwpyZXR1cm4gY319O2EuV2lkZ2V0UG9zaXRpb25Db25zdHJhaW49cX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsid2lkZ2V0LXBvc2l0aW9uIl19KTsKWVVJLmFkZCgid2lkZ2V0LXBvc2l0aW9uIixmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEoYyl7fXZhciB0PWEuTGFuZyxmPWEuV2lkZ2V0LGQ9Zi5VSV9TUkM7cS5BVFRSUz17eDp7c2V0dGVyOmZ1bmN0aW9uKGMpe3RoaXMuX3NldFgoYyl9LGdldHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRYKCl9LGxhenlBZGQ6ITF9LHk6e3NldHRlcjpmdW5jdGlvbihjKXt0aGlzLl9zZXRZKGMpfSxnZXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0WSgpfSxsYXp5QWRkOiExfSx4eTp7dmFsdWU6WzAsMF0sdmFsaWRhdG9yOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl92YWxpZGF0ZVhZKGMpfX19O3EuUE9TSVRJT05FRF9DTEFTU19OQU1FPWYuZ2V0Q2xhc3NOYW1lKCJwb3NpdGlvbmVkIik7cS5wcm90b3R5cGU9e2luaXRpYWxpemVyOmZ1bmN0aW9uKCl7dGhpcy5fcG9zTm9kZT10aGlzLmdldCgiYm91bmRpbmdCb3giKTthLmFmdGVyKHRoaXMuX3JlbmRlclVJUG9zaXRpb24sCnRoaXMsInJlbmRlclVJIik7YS5hZnRlcih0aGlzLl9zeW5jVUlQb3NpdGlvbix0aGlzLCJzeW5jVUkiKTthLmFmdGVyKHRoaXMuX2JpbmRVSVBvc2l0aW9uLHRoaXMsImJpbmRVSSIpfSxfcmVuZGVyVUlQb3NpdGlvbjpmdW5jdGlvbigpe3RoaXMuX3Bvc05vZGUuYWRkQ2xhc3MocS5QT1NJVElPTkVEX0NMQVNTX05BTUUpfSxfc3luY1VJUG9zaXRpb246ZnVuY3Rpb24oKXsicmVsYXRpdmUiPT09dGhpcy5fcG9zTm9kZS5nZXRTdHlsZSgicG9zaXRpb24iKSYmdGhpcy5zeW5jWFkoKTt0aGlzLl91aVNldFhZKHRoaXMuZ2V0KCJ4eSIpKX0sX2JpbmRVSVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5hZnRlcigieHlDaGFuZ2UiLHRoaXMuX2FmdGVyWFlDaGFuZ2UpfSxtb3ZlOmZ1bmN0aW9uKCl7dmFyIGM9YXJndW1lbnRzLGM9dC5pc0FycmF5KGNbMF0pP2NbMF06W2NbMF0sY1sxXV07dGhpcy5zZXQoInh5IixjKX0sc3luY1hZOmZ1bmN0aW9uKCl7dGhpcy5zZXQoInh5Iix0aGlzLl9wb3NOb2RlLmdldFhZKCksCntzcmM6ZH0pfSxfdmFsaWRhdGVYWTpmdW5jdGlvbihjKXtyZXR1cm4gdC5pc0FycmF5KGMpJiZ0LmlzTnVtYmVyKGNbMF0pJiZ0LmlzTnVtYmVyKGNbMV0pfSxfc2V0WDpmdW5jdGlvbihjKXt0aGlzLnNldCgieHkiLFtjLHRoaXMuZ2V0KCJ4eSIpWzFdXSl9LF9zZXRZOmZ1bmN0aW9uKGMpe3RoaXMuc2V0KCJ4eSIsW3RoaXMuZ2V0KCJ4eSIpWzBdLGNdKX0sX2dldFg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoInh5IilbMF19LF9nZXRZOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJ4eSIpWzFdfSxfYWZ0ZXJYWUNoYW5nZTpmdW5jdGlvbihjKXtjLnNyYyE9ZCYmdGhpcy5fdWlTZXRYWShjLm5ld1ZhbCl9LF91aVNldFhZOmZ1bmN0aW9uKGMpe3RoaXMuX3Bvc05vZGUuc2V0WFkoYyl9fTthLldpZGdldFBvc2l0aW9uPXF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJub2RlLXNjcmVlbiIsIndpZGdldCJdfSk7CllVSS5hZGQoIndpZGdldC1zdGFjayIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKGIpe312YXIgdD1hLkxhbmcsZj1hLlVBLGQ9YS5Ob2RlLGM9YS5XaWRnZXQ7cS5BVFRSUz17c2hpbTp7dmFsdWU6Nj09Zi5pZX0sekluZGV4Ont2YWx1ZTowLHNldHRlcjoiX3NldFpJbmRleCJ9fTtxLkhUTUxfUEFSU0VSPXt6SW5kZXg6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3BhcnNlWkluZGV4KGIpfX07cS5TSElNX0NMQVNTX05BTUU9Yy5nZXRDbGFzc05hbWUoInNoaW0iKTtxLlNUQUNLRURfQ0xBU1NfTkFNRT1jLmdldENsYXNzTmFtZSgic3RhY2tlZCIpO3EuU0hJTV9URU1QTEFURT0nXHgzY2lmcmFtZSBjbGFzc1x4M2QiJytxLlNISU1fQ0xBU1NfTkFNRSsnIiBmcmFtZWJvcmRlclx4M2QiMCIgdGl0bGVceDNkIldpZGdldCBTdGFja2luZyBTaGltIiBzcmNceDNkImphdmFzY3JpcHQ6ZmFsc2UiIHRhYmluZGV4XHgzZCItMSIgcm9sZVx4M2QicHJlc2VudGF0aW9uIlx4M2VceDNjL2lmcmFtZVx4M2UnOwpxLnByb3RvdHlwZT17aW5pdGlhbGl6ZXI6ZnVuY3Rpb24oKXt0aGlzLl9zdGFja05vZGU9dGhpcy5nZXQoImJvdW5kaW5nQm94Iik7dGhpcy5fc3RhY2tIYW5kbGVzPXt9O2EuYWZ0ZXIodGhpcy5fcmVuZGVyVUlTdGFjayx0aGlzLCJyZW5kZXJVSSIpO2EuYWZ0ZXIodGhpcy5fc3luY1VJU3RhY2ssdGhpcywic3luY1VJIik7YS5hZnRlcih0aGlzLl9iaW5kVUlTdGFjayx0aGlzLCJiaW5kVUkiKX0sX3N5bmNVSVN0YWNrOmZ1bmN0aW9uKCl7dGhpcy5fdWlTZXRTaGltKHRoaXMuZ2V0KCJzaGltIikpO3RoaXMuX3VpU2V0WkluZGV4KHRoaXMuZ2V0KCJ6SW5kZXgiKSl9LF9iaW5kVUlTdGFjazpmdW5jdGlvbigpe3RoaXMuYWZ0ZXIoInNoaW1DaGFuZ2UiLHRoaXMuX2FmdGVyU2hpbUNoYW5nZSk7dGhpcy5hZnRlcigiekluZGV4Q2hhbmdlIix0aGlzLl9hZnRlclpJbmRleENoYW5nZSl9LF9yZW5kZXJVSVN0YWNrOmZ1bmN0aW9uKCl7dGhpcy5fc3RhY2tOb2RlLmFkZENsYXNzKHEuU1RBQ0tFRF9DTEFTU19OQU1FKX0sCl9wYXJzZVpJbmRleDpmdW5jdGlvbihiKXtiPWIuaW5Eb2MoKSYmInN0YXRpYyIhPT1iLmdldFN0eWxlKCJwb3NpdGlvbiIpP2IuZ2V0Q29tcHV0ZWRTdHlsZSgiekluZGV4Iik6ImF1dG8iO3JldHVybiJhdXRvIj09PWI/bnVsbDpifSxfc2V0WkluZGV4OmZ1bmN0aW9uKGIpe3QuaXNTdHJpbmcoYikmJihiPXBhcnNlSW50KGIsMTApKTt0LmlzTnVtYmVyKGIpfHwoYj0wKTtyZXR1cm4gYn0sX2FmdGVyU2hpbUNoYW5nZTpmdW5jdGlvbihiKXt0aGlzLl91aVNldFNoaW0oYi5uZXdWYWwpfSxfYWZ0ZXJaSW5kZXhDaGFuZ2U6ZnVuY3Rpb24oYil7dGhpcy5fdWlTZXRaSW5kZXgoYi5uZXdWYWwpfSxfdWlTZXRaSW5kZXg6ZnVuY3Rpb24oYil7dGhpcy5fc3RhY2tOb2RlLnNldFN0eWxlKCJ6SW5kZXgiLGIpfSxfdWlTZXRTaGltOmZ1bmN0aW9uKGIpe2I/KHRoaXMuZ2V0KCJ2aXNpYmxlIik/dGhpcy5fcmVuZGVyU2hpbSgpOnRoaXMuX3JlbmRlclNoaW1EZWZlcnJlZCgpLDY9PWYuaWUmJgp0aGlzLl9hZGRTaGltUmVzaXplSGFuZGxlcnMoKSk6dGhpcy5fZGVzdHJveVNoaW0oKX0sX3JlbmRlclNoaW1EZWZlcnJlZDpmdW5jdGlvbigpe3RoaXMuX3N0YWNrSGFuZGxlcy5zaGltZGVmZXJyZWQ9dGhpcy5fc3RhY2tIYW5kbGVzLnNoaW1kZWZlcnJlZHx8W107dGhpcy5fc3RhY2tIYW5kbGVzLnNoaW1kZWZlcnJlZC5wdXNoKHRoaXMub24oInZpc2libGVDaGFuZ2UiLGZ1bmN0aW9uKGIpe2IubmV3VmFsJiZ0aGlzLl9yZW5kZXJTaGltKCl9KSl9LF9hZGRTaGltUmVzaXplSGFuZGxlcnM6ZnVuY3Rpb24oKXt0aGlzLl9zdGFja0hhbmRsZXMuc2hpbXJlc2l6ZT10aGlzLl9zdGFja0hhbmRsZXMuc2hpbXJlc2l6ZXx8W107dmFyIGI9dGhpcy5zaXplU2hpbSxnPXRoaXMuX3N0YWNrSGFuZGxlcy5zaGltcmVzaXplO2cucHVzaCh0aGlzLmFmdGVyKCJ2aXNpYmxlQ2hhbmdlIixiKSk7Zy5wdXNoKHRoaXMuYWZ0ZXIoIndpZHRoQ2hhbmdlIixiKSk7Zy5wdXNoKHRoaXMuYWZ0ZXIoImhlaWdodENoYW5nZSIsCmIpKTtnLnB1c2godGhpcy5hZnRlcigiY29udGVudFVwZGF0ZSIsYikpfSxfZGV0YWNoU3RhY2tIYW5kbGVzOmZ1bmN0aW9uKGIpe2I9dGhpcy5fc3RhY2tIYW5kbGVzW2JdO3ZhciBnO2lmKGImJjA8Yi5sZW5ndGgpZm9yKDtnPWIucG9wKCk7KWcuZGV0YWNoKCl9LF9yZW5kZXJTaGltOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fc2hpbU5vZGUsZz10aGlzLl9zdGFja05vZGU7Ynx8KGI9dGhpcy5fc2hpbU5vZGU9dGhpcy5fZ2V0U2hpbVRlbXBsYXRlKCksZy5pbnNlcnRCZWZvcmUoYixnLmdldCgiZmlyc3RDaGlsZCIpKSx0aGlzLl9kZXRhY2hTdGFja0hhbmRsZXMoInNoaW1kZWZlcnJlZCIpLHRoaXMuc2l6ZVNoaW0oKSl9LF9kZXN0cm95U2hpbTpmdW5jdGlvbigpe3RoaXMuX3NoaW1Ob2RlJiYodGhpcy5fc2hpbU5vZGUuZ2V0KCJwYXJlbnROb2RlIikucmVtb3ZlQ2hpbGQodGhpcy5fc2hpbU5vZGUpLHRoaXMuX3NoaW1Ob2RlPW51bGwsdGhpcy5fZGV0YWNoU3RhY2tIYW5kbGVzKCJzaGltZGVmZXJyZWQiKSwKdGhpcy5fZGV0YWNoU3RhY2tIYW5kbGVzKCJzaGltcmVzaXplIikpfSxzaXplU2hpbTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuX3NoaW1Ob2RlLGc9dGhpcy5fc3RhY2tOb2RlO2ImJjY9PT1mLmllJiZ0aGlzLmdldCgidmlzaWJsZSIpJiYoYi5zZXRTdHlsZSgid2lkdGgiLGcuZ2V0KCJvZmZzZXRXaWR0aCIpKyJweCIpLGIuc2V0U3R5bGUoImhlaWdodCIsZy5nZXQoIm9mZnNldEhlaWdodCIpKyJweCIpKX0sX2dldFNoaW1UZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybiBkLmNyZWF0ZShxLlNISU1fVEVNUExBVEUsdGhpcy5fc3RhY2tOb2RlLmdldCgib3duZXJEb2N1bWVudCIpKX19O2EuV2lkZ2V0U3RhY2s9cX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsIndpZGdldCJdLHNraW5uYWJsZTohMH0pOwpZVUkuYWRkKCJ3aWRnZXQtc3RkbW9kIixmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEobCl7fXZhciB0PWEuTGFuZyxmPWEuTm9kZSxkPWEuVUEsYz1hLldpZGdldCxiPWEuV2lkZ2V0LlVJX1NSQztxLkhFQURFUj0iaGVhZGVyIjtxLkJPRFk9ImJvZHkiO3EuRk9PVEVSPSJmb290ZXIiO3EuQUZURVI9ImFmdGVyIjtxLkJFRk9SRT0iYmVmb3JlIjtxLlJFUExBQ0U9InJlcGxhY2UiO3ZhciBnPXEuSEVBREVSLGU9cS5CT0RZLGs9cS5GT09URVIsbT1nKyJDb250ZW50IixwPWsrIkNvbnRlbnQiLHM9ZSsiQ29udGVudCI7cS5BVFRSUz17aGVhZGVyQ29udGVudDp7dmFsdWU6bnVsbH0sZm9vdGVyQ29udGVudDp7dmFsdWU6bnVsbH0sYm9keUNvbnRlbnQ6e3ZhbHVlOm51bGx9LGZpbGxIZWlnaHQ6e3ZhbHVlOnEuQk9EWSx2YWxpZGF0b3I6ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlRmlsbEhlaWdodChsKX19fTtxLkhUTUxfUEFSU0VSPXtoZWFkZXJDb250ZW50OmZ1bmN0aW9uKGwpe3JldHVybiB0aGlzLl9wYXJzZVN0ZE1vZEhUTUwoZyl9LApib2R5Q29udGVudDpmdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5fcGFyc2VTdGRNb2RIVE1MKGUpfSxmb290ZXJDb250ZW50OmZ1bmN0aW9uKGwpe3JldHVybiB0aGlzLl9wYXJzZVN0ZE1vZEhUTUwoayl9fTtxLlNFQ1RJT05fQ0xBU1NfTkFNRVM9e2hlYWRlcjpjLmdldENsYXNzTmFtZSgiaGQiKSxib2R5OmMuZ2V0Q2xhc3NOYW1lKCJiZCIpLGZvb3RlcjpjLmdldENsYXNzTmFtZSgiZnQiKX07cS5URU1QTEFURVM9e2hlYWRlcjonXHgzY2RpdiBjbGFzc1x4M2QiJytxLlNFQ1RJT05fQ0xBU1NfTkFNRVNbZ10rJyJceDNlXHgzYy9kaXZceDNlJyxib2R5OidceDNjZGl2IGNsYXNzXHgzZCInK3EuU0VDVElPTl9DTEFTU19OQU1FU1tlXSsnIlx4M2VceDNjL2Rpdlx4M2UnLGZvb3RlcjonXHgzY2RpdiBjbGFzc1x4M2QiJytxLlNFQ1RJT05fQ0xBU1NfTkFNRVNba10rJyJceDNlXHgzYy9kaXZceDNlJ307cS5wcm90b3R5cGU9e2luaXRpYWxpemVyOmZ1bmN0aW9uKCl7dGhpcy5fc3RkTW9kTm9kZT0KdGhpcy5nZXQoImNvbnRlbnRCb3giKTthLmJlZm9yZSh0aGlzLl9yZW5kZXJVSVN0ZE1vZCx0aGlzLCJyZW5kZXJVSSIpO2EuYmVmb3JlKHRoaXMuX2JpbmRVSVN0ZE1vZCx0aGlzLCJiaW5kVUkiKTthLmJlZm9yZSh0aGlzLl9zeW5jVUlTdGRNb2QsdGhpcywic3luY1VJIil9LF9zeW5jVUlTdGRNb2Q6ZnVuY3Rpb24oKXt2YXIgbD10aGlzLl9zdGRNb2RQYXJzZWQ7bCYmbFttXXx8dGhpcy5fdWlTZXRTdGRNb2QoZyx0aGlzLmdldChtKSk7bCYmbFtzXXx8dGhpcy5fdWlTZXRTdGRNb2QoZSx0aGlzLmdldChzKSk7bCYmbFtwXXx8dGhpcy5fdWlTZXRTdGRNb2Qoayx0aGlzLmdldChwKSk7dGhpcy5fdWlTZXRGaWxsSGVpZ2h0KHRoaXMuZ2V0KCJmaWxsSGVpZ2h0IikpfSxfcmVuZGVyVUlTdGRNb2Q6ZnVuY3Rpb24oKXt0aGlzLl9zdGRNb2ROb2RlLmFkZENsYXNzKGMuZ2V0Q2xhc3NOYW1lKCJzdGRtb2QiKSk7dGhpcy5fcmVuZGVyU3RkTW9kU2VjdGlvbnMoKTt0aGlzLmFmdGVyKCJoZWFkZXJDb250ZW50Q2hhbmdlIiwKdGhpcy5fYWZ0ZXJIZWFkZXJDaGFuZ2UpO3RoaXMuYWZ0ZXIoImJvZHlDb250ZW50Q2hhbmdlIix0aGlzLl9hZnRlckJvZHlDaGFuZ2UpO3RoaXMuYWZ0ZXIoImZvb3RlckNvbnRlbnRDaGFuZ2UiLHRoaXMuX2FmdGVyRm9vdGVyQ2hhbmdlKX0sX3JlbmRlclN0ZE1vZFNlY3Rpb25zOmZ1bmN0aW9uKCl7dC5pc1ZhbHVlKHRoaXMuZ2V0KG0pKSYmdGhpcy5fcmVuZGVyU3RkTW9kKGcpO3QuaXNWYWx1ZSh0aGlzLmdldChzKSkmJnRoaXMuX3JlbmRlclN0ZE1vZChlKTt0LmlzVmFsdWUodGhpcy5nZXQocCkpJiZ0aGlzLl9yZW5kZXJTdGRNb2Qoayl9LF9iaW5kVUlTdGRNb2Q6ZnVuY3Rpb24oKXt0aGlzLmFmdGVyKCJmaWxsSGVpZ2h0Q2hhbmdlIix0aGlzLl9hZnRlckZpbGxIZWlnaHRDaGFuZ2UpO3RoaXMuYWZ0ZXIoImhlaWdodENoYW5nZSIsdGhpcy5fZmlsbEhlaWdodCk7dGhpcy5hZnRlcigiY29udGVudFVwZGF0ZSIsdGhpcy5fZmlsbEhlaWdodCl9LF9hZnRlckhlYWRlckNoYW5nZTpmdW5jdGlvbihsKXtsLnNyYyE9PQpiJiZ0aGlzLl91aVNldFN0ZE1vZChnLGwubmV3VmFsLGwuc3RkTW9kUG9zaXRpb24pfSxfYWZ0ZXJCb2R5Q2hhbmdlOmZ1bmN0aW9uKGwpe2wuc3JjIT09YiYmdGhpcy5fdWlTZXRTdGRNb2QoZSxsLm5ld1ZhbCxsLnN0ZE1vZFBvc2l0aW9uKX0sX2FmdGVyRm9vdGVyQ2hhbmdlOmZ1bmN0aW9uKGwpe2wuc3JjIT09YiYmdGhpcy5fdWlTZXRTdGRNb2QoayxsLm5ld1ZhbCxsLnN0ZE1vZFBvc2l0aW9uKX0sX2FmdGVyRmlsbEhlaWdodENoYW5nZTpmdW5jdGlvbihsKXt0aGlzLl91aVNldEZpbGxIZWlnaHQobC5uZXdWYWwpfSxfdmFsaWRhdGVGaWxsSGVpZ2h0OmZ1bmN0aW9uKGwpe3JldHVybiFsfHxsPT1xLkJPRFl8fGw9PXEuSEVBREVSfHxsPT1xLkZPT1RFUn0sX3VpU2V0RmlsbEhlaWdodDpmdW5jdGlvbihsKXtsPXRoaXMuZ2V0U3RkTW9kTm9kZShsKTt2YXIgaD10aGlzLl9jdXJyRmlsbE5vZGU7aCYmbCE9PWgmJmguc2V0U3R5bGUoImhlaWdodCIsIiIpO2wmJih0aGlzLl9jdXJyRmlsbE5vZGU9CmwpO3RoaXMuX2ZpbGxIZWlnaHQoKX0sX2ZpbGxIZWlnaHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmdldCgiZmlsbEhlaWdodCIpKXt2YXIgbD10aGlzLmdldCgiaGVpZ2h0Iik7IiIhPWwmJiJhdXRvIiE9bCYmdGhpcy5maWxsSGVpZ2h0KHRoaXMuZ2V0U3RkTW9kTm9kZSh0aGlzLmdldCgiZmlsbEhlaWdodCIpKSl9fSxfdWlTZXRTdGRNb2Q6ZnVuY3Rpb24obCxoLHUpe2lmKHQuaXNWYWx1ZShoKSl7dmFyIHc9dGhpcy5nZXRTdGRNb2ROb2RlKGwsITApO3RoaXMuX2FkZFN0ZE1vZENvbnRlbnQodyxoLHUpO3RoaXMuc2V0KGwrIkNvbnRlbnQiLHRoaXMuX2dldFN0ZE1vZENvbnRlbnQobCkse3NyYzpifSl9ZWxzZSB0aGlzLl9lcmFzZVN0ZE1vZChsKTt0aGlzLmZpcmUoImNvbnRlbnRVcGRhdGUiKX0sX3JlbmRlclN0ZE1vZDpmdW5jdGlvbihsKXt2YXIgaD10aGlzLmdldCgiY29udGVudEJveCIpLHU9dGhpcy5fZmluZFN0ZE1vZFNlY3Rpb24obCk7dXx8KHU9dGhpcy5fZ2V0U3RkTW9kVGVtcGxhdGUobCkpOwp0aGlzLl9pbnNlcnRTdGRNb2RTZWN0aW9uKGgsbCx1KTt0aGlzW2wrIk5vZGUiXT11O3JldHVybiB0aGlzW2wrIk5vZGUiXX0sX2VyYXNlU3RkTW9kOmZ1bmN0aW9uKGwpe3ZhciBoPXRoaXMuZ2V0U3RkTW9kTm9kZShsKTtoJiYoaC5yZW1vdmUoITApLGRlbGV0ZSB0aGlzW2wrIk5vZGUiXSl9LF9pbnNlcnRTdGRNb2RTZWN0aW9uOmZ1bmN0aW9uKGwsaCx1KXt2YXIgdz1sLmdldCgiZmlyc3RDaGlsZCIpO2ghPT1rJiZ3P2g9PT1nP2wuaW5zZXJ0QmVmb3JlKHUsdyk6KGg9dGhpc1trKyJOb2RlIl0pP2wuaW5zZXJ0QmVmb3JlKHUsaCk6bC5hcHBlbmRDaGlsZCh1KTpsLmFwcGVuZENoaWxkKHUpfSxfZ2V0U3RkTW9kVGVtcGxhdGU6ZnVuY3Rpb24obCl7cmV0dXJuIGYuY3JlYXRlKHEuVEVNUExBVEVTW2xdLHRoaXMuX3N0ZE1vZE5vZGUuZ2V0KCJvd25lckRvY3VtZW50IikpfSxfYWRkU3RkTW9kQ29udGVudDpmdW5jdGlvbihsLGgsdSl7c3dpdGNoKHUpe2Nhc2UgcS5CRUZPUkU6dT0KMDticmVhaztjYXNlIHEuQUZURVI6dT12b2lkIDA7YnJlYWs7ZGVmYXVsdDp1PXEuUkVQTEFDRX1sLmluc2VydChoLHUpfSxfZ2V0UHJlY2lzZUhlaWdodDpmdW5jdGlvbihsKXt2YXIgaD1sP2wuZ2V0KCJvZmZzZXRIZWlnaHQiKTowO2wmJmwuaGFzTWV0aG9kKCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiKSYmKGw9bC5pbnZva2UoImdldEJvdW5kaW5nQ2xpZW50UmVjdCIpKSYmKGg9bC5ib3R0b20tbC50b3ApO3JldHVybiBofSxfZmluZFN0ZE1vZFNlY3Rpb246ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMuZ2V0KCJjb250ZW50Qm94Iikub25lKCJceDNlIC4iK3EuU0VDVElPTl9DTEFTU19OQU1FU1tsXSl9LF9wYXJzZVN0ZE1vZEhUTUw6ZnVuY3Rpb24obCl7dmFyIGg9dGhpcy5fZmluZFN0ZE1vZFNlY3Rpb24obCk7cmV0dXJuIGg/KHRoaXMuX3N0ZE1vZFBhcnNlZHx8KHRoaXMuX3N0ZE1vZFBhcnNlZD17fSxhLmJlZm9yZSh0aGlzLl9hcHBseVN0ZE1vZFBhcnNlZENvbmZpZyx0aGlzLAoiX2FwcGx5UGFyc2VkQ29uZmlnIikpLHRoaXMuX3N0ZE1vZFBhcnNlZFtsKyJDb250ZW50Il09MSxoLmdldCgiaW5uZXJIVE1MIikpOm51bGx9LF9hcHBseVN0ZE1vZFBhcnNlZENvbmZpZzpmdW5jdGlvbihsLGgsdSl7aWYobD10aGlzLl9zdGRNb2RQYXJzZWQpbFttXT0hKG0gaW4gaCkmJm0gaW4gbCxsW3NdPSEocyBpbiBoKSYmcyBpbiBsLGxbcF09IShwIGluIGgpJiZwIGluIGx9LF9nZXRTdGRNb2RDb250ZW50OmZ1bmN0aW9uKGwpe3JldHVybiB0aGlzW2wrIk5vZGUiXT90aGlzW2wrIk5vZGUiXS5nZXQoImNoaWxkTm9kZXMiKTpudWxsfSxzZXRTdGRNb2RDb250ZW50OmZ1bmN0aW9uKGwsaCx1KXt0aGlzLnNldChsKyJDb250ZW50IixoLHtzdGRNb2RQb3NpdGlvbjp1fSl9LGdldFN0ZE1vZE5vZGU6ZnVuY3Rpb24obCxoKXt2YXIgdT10aGlzW2wrIk5vZGUiXXx8bnVsbDshdSYmaCYmKHU9dGhpcy5fcmVuZGVyU3RkTW9kKGwpKTtyZXR1cm4gdX0sZmlsbEhlaWdodDpmdW5jdGlvbihsKXtpZihsKXt2YXIgaD0KdGhpcy5nZXQoImNvbnRlbnRCb3giKSx1PVt0aGlzLmhlYWRlck5vZGUsdGhpcy5ib2R5Tm9kZSx0aGlzLmZvb3Rlck5vZGVdLHcsej0wO3c9MDtmb3IodmFyIEE9ITEsSD0wLEY9dS5sZW5ndGg7SDxGO0grKykodz11W0hdKSYmKHchPT1sP3orPXRoaXMuX2dldFByZWNpc2VIZWlnaHQodyk6QT0hMCk7QSYmKChkLmllfHxkLm9wZXJhKSYmbC5zZXQoIm9mZnNldEhlaWdodCIsMCksaD1oLmdldCgib2Zmc2V0SGVpZ2h0IiktcGFyc2VJbnQoaC5nZXRDb21wdXRlZFN0eWxlKCJwYWRkaW5nVG9wIiksMTApLXBhcnNlSW50KGguZ2V0Q29tcHV0ZWRTdHlsZSgicGFkZGluZ0JvdHRvbSIpLDEwKS1wYXJzZUludChoLmdldENvbXB1dGVkU3R5bGUoImJvcmRlckJvdHRvbVdpZHRoIiksMTApLXBhcnNlSW50KGguZ2V0Q29tcHV0ZWRTdHlsZSgiYm9yZGVyVG9wV2lkdGgiKSwxMCksdC5pc051bWJlcihoKSYmKHc9aC16LDA8PXcmJmwuc2V0KCJvZmZzZXRIZWlnaHQiLHcpKSl9fX07YS5XaWRnZXRTdGRNb2Q9CnF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJ3aWRnZXQiXX0pOwpZVUkuYWRkKCJhdWktYXJpYSIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLkxhbmcsdD1xLmlzQm9vbGVhbixmPXEuaXNGdW5jdGlvbixkPXEuaXNPYmplY3QsYz1xLmlzU3RyaW5nLGI9LyhbXmEtel0pL2lnLGc9YS5jYWNoZWQoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShiLGZ1bmN0aW9uKCl7cmV0dXJuIiJ9KS50b0xvd2VyQ2FzZSgpfSkscT1hLkNvbXBvbmVudC5jcmVhdGUoe05BTUU6ImFyaWEiLE5TOiJhcmlhIixBVFRSUzp7YXR0cmlidXRlczp7dmFsdWU6e30sdmFsaWRhdG9yOmR9LGF0dHJpYnV0ZVZhbHVlRm9ybWF0Ont2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX0sdmFsaWRhdG9yOmZ9LGF0dHJpYnV0ZU5vZGU6e3dyaXRlT25jZTohMCxzZXR0ZXI6YS5vbmUsdmFsdWVGbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgiaG9zdCIpLmdldCgiYm91bmRpbmdCb3giKX19LHJvbGVOYW1lOnt2YWx1ZUZuOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXQoImhvc3QiKSwKZT1nKGUuY29uc3RydWN0b3IuTkFNRXx8IiIpO3JldHVybiB0aGlzLmlzVmFsaWRSb2xlKGUpP2U6IiJ9LHZhbGlkYXRvcjpjfSxyb2xlTm9kZTp7d3JpdGVPbmNlOiEwLHNldHRlcjphLm9uZSx2YWx1ZUZuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJob3N0IikuZ2V0KCJib3VuZGluZ0JveCIpfX0sdmFsaWRhdGVXM0M6e3ZhbHVlOiEwLHZhbGlkYXRvcjp0fX0sRVhURU5EUzphLlBsdWdpbi5CYXNlLHByb3RvdHlwZTp7aW5pdGlhbGl6ZXI6ZnVuY3Rpb24oKXt0aGlzLnB1Ymxpc2goImFyaWE6cHJvY2Vzc0F0dHJpYnV0ZSIse2RlZmF1bHRGbjp0aGlzLl9kZWZQcm9jZXNzRm4scXVldWFibGU6ITEsZW1pdEZhY2FkZTohMCxidWJibGVzOiEwLHByZWZpeDoiYXJpYSJ9KTt0aGlzLl91aVNldFJvbGVOYW1lKHRoaXMuZ2V0KCJyb2xlTmFtZSIpKTt0aGlzLmFmdGVyKCJyb2xlTmFtZUNoYW5nZSIsdGhpcy5fYWZ0ZXJSb2xlTmFtZUNoYW5nZSk7dGhpcy5fYmluZEhvc3RBdHRyaWJ1dGVzKCl9LAppc1ZhbGlkQXR0cmlidXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldCgidmFsaWRhdGVXM0MiKT9hLlBsdWdpbi5BcmlhLlczQ19BVFRSSUJVVEVTW2VdOiEwfSxpc1ZhbGlkUm9sZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXQoInZhbGlkYXRlVzNDIik/YS5QbHVnaW4uQXJpYS5XM0NfUk9MRVNbZV06ITB9LHNldEF0dHJpYnV0ZTpmdW5jdGlvbihlLGssbSl7cmV0dXJuIHRoaXMuaXNWYWxpZEF0dHJpYnV0ZShlKT8oKG18fHRoaXMuZ2V0KCJhdHRyaWJ1dGVOb2RlIikpLnNldCgiYXJpYS0iK2UsayksITApOiExfSxzZXRBdHRyaWJ1dGVzOmZ1bmN0aW9uKGUpe3ZhciBrPXRoaXM7YS5BcnJheS5lYWNoKGUsZnVuY3Rpb24obSl7ay5zZXRBdHRyaWJ1dGUobS5uYW1lLG0udmFsdWUsbS5ub2RlKX0pfSxzZXRSb2xlOmZ1bmN0aW9uKGUsayl7cmV0dXJuIHRoaXMuaXNWYWxpZFJvbGUoZSk/KChrfHx0aGlzLmdldCgicm9sZU5vZGUiKSkuc2V0KCJyb2xlIixlKSwhMCk6ITF9LApzZXRSb2xlczpmdW5jdGlvbihlKXt2YXIgaz10aGlzO2EuQXJyYXkuZWFjaChlLGZ1bmN0aW9uKG0pe2suc2V0Um9sZShtLm5hbWUsbS5ub2RlKX0pfSxfYWZ0ZXJIb3N0QXR0cmlidXRlQ2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMuX2hhbmRsZVByb2Nlc3NBdHRyaWJ1dGUoZSl9LF9hZnRlclJvbGVOYW1lQ2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMuX3VpU2V0Um9sZU5hbWUoZS5uZXdWYWwpfSxfYmluZEhvc3RBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxrPWUuZ2V0KCJhdHRyaWJ1dGVzIik7YS5lYWNoKGssZnVuY3Rpb24obSxwKXt2YXIgcz1lLl9nZXRBcmlhQXR0cmlidXRlKG0scCk7ZS5faGFuZGxlUHJvY2Vzc0F0dHJpYnV0ZSh7YXJpYTpzfSk7ZS5hZnRlckhvc3RFdmVudChwKyJDaGFuZ2UiLGZ1bmN0aW9uKGwpe2wuYXJpYT1zO2UuX2FmdGVySG9zdEF0dHJpYnV0ZUNoYW5nZShsKX0pfSl9LF9kZWZQcm9jZXNzRm46ZnVuY3Rpb24oZSl7dGhpcy5fc2V0QXR0cmlidXRlKGUuYXJpYSl9LApfZ2V0QXJpYUF0dHJpYnV0ZTpmdW5jdGlvbihlLGspe3ZhciBtPXRoaXMuZ2V0KCJhdHRyaWJ1dGVWYWx1ZUZvcm1hdCIpLHA9e307YyhlKT9wPWEubWVyZ2UocCx7YXJpYU5hbWU6ZSxhdHRyTmFtZTprLGZvcm1hdDptLG5vZGU6bnVsbH0pOmQoZSkmJihwPWEubWl4KGUse2FyaWFOYW1lOiIiLGF0dHJOYW1lOmssZm9ybWF0Om0sbm9kZTpudWxsfSkpO3JldHVybiBwfSxfaGFuZGxlUHJvY2Vzc0F0dHJpYnV0ZTpmdW5jdGlvbihlKXt0aGlzLmZpcmUoImFyaWE6cHJvY2Vzc0F0dHJpYnV0ZSIse2FyaWE6ZS5hcmlhfSl9LF9zZXRBdHRyaWJ1dGU6ZnVuY3Rpb24oZSl7dmFyIGs9dGhpcy5nZXQoImhvc3QiKS5nZXQoZS5hdHRyTmFtZSksbT1lLm5vZGU7ZihtKSYmKG09bS5hcHBseSh0aGlzLFtlXSkpO3RoaXMuc2V0QXR0cmlidXRlKGUuYXJpYU5hbWUsZS5mb3JtYXQuYXBwbHkodGhpcyxbayxlXSksbSl9LF91aVNldFJvbGVOYW1lOmZ1bmN0aW9uKGUpe3RoaXMuc2V0Um9sZShlKX19fSk7CmEuUGx1Z2luLkFyaWE9cTthLlBsdWdpbi5BcmlhLlczQ19ST0xFUz17YWxlcnQ6MSxhbGVydGRpYWxvZzoxLGFwcGxpY2F0aW9uOjEsYXJ0aWNsZToxLGJhbm5lcjoxLGJ1dHRvbjoxLGNoZWNrYm94OjEsY29sdW1uaGVhZGVyOjEsY29tYm9ib3g6MSxjb21tYW5kOjEsY29tcGxlbWVudGFyeToxLGNvbXBvc2l0ZToxLGNvbnRlbnRpbmZvOjEsZGVmaW5pdGlvbjoxLGRpYWxvZzoxLGRpcmVjdG9yeToxLGRvY3VtZW50OjEsZm9ybToxLGdyaWQ6MSxncmlkY2VsbDoxLGdyb3VwOjEsaGVhZGluZzoxLGltZzoxLGlucHV0OjEsbGFuZG1hcms6MSxsaW5rOjEsbGlzdDoxLGxpc3Rib3g6MSxsaXN0aXRlbToxLGxvZzoxLG1haW46MSxtYXJxdWVlOjEsbWF0aDoxLG1lbnU6MSxtZW51YmFyOjEsbWVudWl0ZW06MSxtZW51aXRlbWNoZWNrYm94OjEsbWVudWl0ZW1yYWRpbzoxLG5hdmlnYXRpb246MSxub3RlOjEsb3B0aW9uOjEscHJlc2VudGF0aW9uOjEscHJvZ3Jlc3NiYXI6MSxyYWRpbzoxLApyYWRpb2dyb3VwOjEscmFuZ2U6MSxyZWdpb246MSxyb2xldHlwZToxLHJvdzoxLHJvd2hlYWRlcjoxLHNjcm9sbGJhcjoxLHNlYXJjaDoxLHNlY3Rpb246MSxzZWN0aW9uaGVhZDoxLHNlbGVjdDoxLHNlcGFyYXRvcjoxLHNsaWRlcjoxLHNwaW5idXR0b246MSxzdGF0dXM6MSxzdHJ1Y3R1cmU6MSx0YWI6MSx0YWJsaXN0OjEsdGFicGFuZWw6MSx0ZXh0Ym94OjEsdGltZXI6MSx0b29sYmFyOjEsdG9vbHRpcDoxLHRyZWU6MSx0cmVlZ3JpZDoxLHRyZWVpdGVtOjEsd2lkZ2V0OjEsd2luZG93OjF9O2EuUGx1Z2luLkFyaWEuVzNDX0FUVFJJQlVURVM9e2FjdGl2ZWRlc2NlbmRhbnQ6MSxhdG9taWM6MSxhdXRvY29tcGxldGU6MSxidXN5OjEsY2hlY2tlZDoxLGNvbnRyb2xzOjEsZGVzY3JpYmVkYnk6MSxkaXNhYmxlZDoxLGRyb3BlZmZlY3Q6MSxleHBhbmRlZDoxLGZsb3d0bzoxLGdyYWJiZWQ6MSxoYXNwb3B1cDoxLGhpZGRlbjoxLGludmFsaWQ6MSxsYWJlbDoxLGxhYmVsbGVkYnk6MSwKbGV2ZWw6MSxsaXZlOjEsbXVsdGlsaW5lOjEsbXVsdGlzZWxlY3RhYmxlOjEsb3JpZW50YXRpb246MSxvd25zOjEscG9zaW5zZXQ6MSxwcmVzc2VkOjEscmVhZG9ubHk6MSxyZWxldmFudDoxLHJlcXVpcmVkOjEsc2VsZWN0ZWQ6MSxzZXRzaXplOjEsc29ydDoxLHZhbHVlbWF4OjEsdmFsdWVtaW46MSx2YWx1ZW5vdzoxLHZhbHVldGV4dDoxfX0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbInBsdWdpbiIsImF1aS1jb21wb25lbnQiXX0pOwpZVUkuYWRkKCJhdWktaW8tcGx1Z2luLWRlcHJlY2F0ZWQiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5MYW5nLHQ9cS5pc0Jvb2xlYW4sZj1xLmlzU3RyaW5nLGQ9YS5XaWRnZXRTdGRNb2QsYz1hLmdldENsYXNzTmFtZTtjKCJpY29uIiwibG9hZGluZyIpO3ZhciBiPWEuQ29tcG9uZW50LmNyZWF0ZSh7TkFNRToiSU9QbHVnaW4iLE5TOiJpbyIsQVRUUlM6e25vZGU6e3ZhbHVlOm51bGwsZ2V0dGVyOmZ1bmN0aW9uKGcpe2lmKCFnKXt2YXIgZT10aGlzLmdldCgiaG9zdCIpLGs9dGhpcy5nZXQoInR5cGUiKTsiTm9kZSI9PWs/Zz1lOiJXaWRnZXQiPT1rJiYoZz10aGlzLmdldCgic2VjdGlvbiIpLGUuZ2V0U3RkTW9kTm9kZShnKXx8ZS5zZXRTdGRNb2RDb250ZW50KGcsIiIpLGc9ZS5nZXRTdGRNb2ROb2RlKGcpKX1yZXR1cm4gYS5vbmUoZyl9LHZhbGlkYXRvcjpmdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIGEuTm9kZX19LGZhaWx1cmVNZXNzYWdlOnt2YWx1ZToiRmFpbGVkIHRvIHJldHJpZXZlIGNvbnRlbnQiLAp2YWxpZGF0b3I6Zn0sbG9hZGluZ01hc2s6e3ZhbHVlOnt9fSxwYXJzZUNvbnRlbnQ6e3ZhbHVlOiEwLHZhbGlkYXRvcjp0fSxzaG93TG9hZGluZzp7dmFsdWU6ITAsdmFsaWRhdG9yOnR9LHNlY3Rpb246e3ZhbHVlOmQuQk9EWSx2YWxpZGF0b3I6ZnVuY3Rpb24oZyl7cmV0dXJuIWd8fGc9PWQuQk9EWXx8Zz09ZC5IRUFERVJ8fGc9PWQuRk9PVEVSfX0sdHlwZTp7cmVhZE9ubHk6ITAsdmFsdWVGbjpmdW5jdGlvbigpe3ZhciBnPSJOb2RlIjt0aGlzLmdldCgiaG9zdCIpaW5zdGFuY2VvZiBhLldpZGdldCYmKGc9IldpZGdldCIpO3JldHVybiBnfSx2YWxpZGF0b3I6Zn0sd2hlcmU6e3ZhbHVlOmQuUkVQTEFDRSx2YWxpZGF0b3I6ZnVuY3Rpb24oZyl7cmV0dXJuIWd8fGc9PWQuQUZURVJ8fGc9PWQuQkVGT1JFfHxnPT1kLlJFUExBQ0V8fCJvdXRlciI9PWd9fX0sRVhURU5EUzphLklPUmVxdWVzdCxwcm90b3R5cGU6e2JpbmRVSTpmdW5jdGlvbigpe3RoaXMub24oImFjdGl2ZUNoYW5nZSIsCnRoaXMuX29uQWN0aXZlQ2hhbmdlKTt0aGlzLm9uKCJzdWNjZXNzIix0aGlzLl9zdWNjZXNzSGFuZGxlcik7dGhpcy5vbigiZmFpbHVyZSIsdGhpcy5fZmFpbHVyZUhhbmRsZXIpO2lmKCJXaWRnZXQiPT10aGlzLmdldCgidHlwZSIpJiZ0aGlzLmdldCgic2hvd0xvYWRpbmciKSl7dmFyIGc9dGhpcy5nZXQoImhvc3QiKTtnLmFmdGVyKCJoZWlnaHRDaGFuZ2UiLHRoaXMuX3N5bmNMb2FkaW5nTWFza1VJLHRoaXMpO2cuYWZ0ZXIoIndpZHRoQ2hhbmdlIix0aGlzLl9zeW5jTG9hZGluZ01hc2tVSSx0aGlzKX19LF9hdXRvU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLmJpbmRVSSgpO2Iuc3VwZXJjbGFzcy5fYXV0b1N0YXJ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX2JpbmRQYXJzZUNvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmdldCgibm9kZSIpO2cmJiFnLlBhcnNlQ29udGVudCYmdGhpcy5nZXQoInBhcnNlQ29udGVudCIpJiZnLnBsdWcoYS5QbHVnaW4uUGFyc2VDb250ZW50KX0saGlkZUxvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgZz0KdGhpcy5nZXQoIm5vZGUiKTtnLmxvYWRpbmdtYXNrJiZnLmxvYWRpbmdtYXNrLmhpZGUoKX0sc2V0Q29udGVudDpmdW5jdGlvbihnKXt0aGlzLl9iaW5kUGFyc2VDb250ZW50KCk7dGhpcy5fZ2V0Q29udGVudFNldHRlckJ5VHlwZSgpLmFwcGx5KHRoaXMsW2ddKTt0aGlzLm92ZXJsYXlNYXNrQm91bmRpbmdCb3gmJnRoaXMub3ZlcmxheU1hc2tCb3VuZGluZ0JveC5yZW1vdmUoKX0sc2hvd0xvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmdldCgibm9kZSIpO2cubG9hZGluZ21hc2s/dGhpcy5vdmVybGF5TWFza0JvdW5kaW5nQm94JiZnLmFwcGVuZCh0aGlzLm92ZXJsYXlNYXNrQm91bmRpbmdCb3gpOihnLnBsdWcoYS5Mb2FkaW5nTWFzayx0aGlzLmdldCgibG9hZGluZ01hc2siKSksdGhpcy5vdmVybGF5TWFza0JvdW5kaW5nQm94PWcubG9hZGluZ21hc2sub3ZlcmxheU1hc2suZ2V0KCJib3VuZGluZ0JveCIpKTtnLmxvYWRpbmdtYXNrLnNob3coKX0sc3RhcnQ6ZnVuY3Rpb24oKXt2YXIgZz0KdGhpcyxlPWcuZ2V0KCJob3N0Iik7ZS5nZXQoInJlbmRlcmVkIil8fGUuYWZ0ZXIoInJlbmRlciIsZnVuY3Rpb24oKXtnLl9zZXRMb2FkaW5nVUkoITApfSk7Yi5zdXBlcmNsYXNzLnN0YXJ0LmFwcGx5KGcsYXJndW1lbnRzKX0sX2dldENvbnRlbnRTZXR0ZXJCeVR5cGU6ZnVuY3Rpb24oKXtyZXR1cm57Tm9kZTpmdW5jdGlvbihnKXt2YXIgZT10aGlzLmdldCgibm9kZSIpO2cgaW5zdGFuY2VvZiBhLk5vZGVMaXN0JiYoZz1nLnRvRnJhZygpKTtnIGluc3RhbmNlb2YgYS5Ob2RlJiYoZz1nLl9ub2RlKTt2YXIgaz10aGlzLmdldCgid2hlcmUiKTsib3V0ZXIiPT1rP2UucmVwbGFjZShnKTplLmluc2VydChnLGspfSxXaWRnZXQ6ZnVuY3Rpb24oZyl7dmFyIGU9dGhpcy5nZXQoImhvc3QiKTtlLnNldFN0ZE1vZENvbnRlbnQuYXBwbHkoZSxbdGhpcy5nZXQoInNlY3Rpb24iKSxnLHRoaXMuZ2V0KCJ3aGVyZSIpXSl9fVt0aGlzLmdldCgidHlwZSIpXX0sX3NldExvYWRpbmdVSTpmdW5jdGlvbihnKXt0aGlzLmdldCgic2hvd0xvYWRpbmciKSYmCihnP3RoaXMuc2hvd0xvYWRpbmcoKTp0aGlzLmhpZGVMb2FkaW5nKCkpfSxfc3luY0xvYWRpbmdNYXNrVUk6ZnVuY3Rpb24oKXt0aGlzLmdldCgibm9kZSIpLmxvYWRpbmdtYXNrLnJlZnJlc2hNYXNrKCl9LF9zdWNjZXNzSGFuZGxlcjpmdW5jdGlvbihnLGUsayl7dGhpcy5zZXRDb250ZW50KHRoaXMuZ2V0KCJyZXNwb25zZURhdGEiKSl9LF9mYWlsdXJlSGFuZGxlcjpmdW5jdGlvbihnLGUsayl7dGhpcy5zZXRDb250ZW50KHRoaXMuZ2V0KCJmYWlsdXJlTWVzc2FnZSIpKX0sX29uQWN0aXZlQ2hhbmdlOmZ1bmN0aW9uKGcpe3ZhciBlPXRoaXMuZ2V0KCJob3N0Iiksaz0iV2lkZ2V0Ij09dGhpcy5nZXQoInR5cGUiKTsoIWt8fGsmJmUmJmUuZ2V0KCJyZW5kZXJlZCIpKSYmdGhpcy5fc2V0TG9hZGluZ1VJKGcubmV3VmFsKX19fSk7YS5Ob2RlLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGcsZSxrKXt2YXIgbT1nLmluZGV4T2YoIiAiKSxwOzA8bSYmKHA9Zy5zbGljZShtLGcubGVuZ3RoKSwKZz1nLnNsaWNlKDAsbSkpO3EuaXNGdW5jdGlvbihlKSYmKGs9ZSxlPW51bGwpO2U9ZXx8e307ayYmKGUuYWZ0ZXI9ZS5hZnRlcnx8e30sZS5hZnRlci5zdWNjZXNzPWspO2s9ZS53aGVyZTtlLnVyaT1nO2Uud2hlcmU9aztwJiYoZS5zZWxlY3Rvcj1wLGUud2hlcmU9a3x8InJlcGxhY2UiKTt0aGlzLnBsdWcoYS5QbHVnaW4uSU8sZSk7cmV0dXJuIHRoaXN9O2EubmFtZXNwYWNlKCJQbHVnaW4iKS5JTz1ifSwiMy4wLjMtZGVwcmVjYXRlZC43MyIse3JlcXVpcmVzOlsiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIiwiYXVpLXBhcnNlLWNvbnRlbnQiLCJhdWktaW8tcmVxdWVzdCIsImF1aS1sb2FkaW5nLW1hc2stZGVwcmVjYXRlZCJdfSk7CllVSS5hZGQoImF1aS1pby1yZXF1ZXN0IixmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZyx0PXEuaXNCb29sZWFuLGY9cS5pc0Z1bmN0aW9uLHE9cS5pc1N0cmluZyxkPWEubmFtZXNwYWNlKCJjb25maWcuaW8iKSxjPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBkW2VdfX0sYj17YWxsOiIqLyoiLGh0bWw6InRleHQvaHRtbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0Iix0ZXh0OiJ0ZXh0L3BsYWluIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwifSxnPWEuQ29tcG9uZW50LmNyZWF0ZSh7TkFNRToiSU9SZXF1ZXN0IixBVFRSUzp7YXV0b0xvYWQ6e3ZhbHVlOiEwLHZhbGlkYXRvcjp0fSxjYWNoZTp7dmFsdWU6ITAsdmFsaWRhdG9yOnR9LGRhdGFUeXBlOntzZXR0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fCIiKS50b0xvd2VyQ2FzZSgpfSx2YWx1ZTpudWxsLHZhbGlkYXRvcjpxfSxyZXNwb25zZURhdGE6e3NldHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fc2V0UmVzcG9uc2VEYXRhKGUpfSwKdmFsdWU6bnVsbH0sdXJpOntzZXR0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcnNlVVJMKGUpfSx2YWx1ZTpudWxsLHZhbGlkYXRvcjpxfSxhY3RpdmU6e3ZhbHVlOiExLHZhbGlkYXRvcjp0fSxjZmc6e2dldHRlcjpmdW5jdGlvbigpe3JldHVybnthcmd1bWVudHM6dGhpcy5nZXQoImFyZ3VtZW50cyIpLGNvbnRleHQ6dGhpcy5nZXQoImNvbnRleHQiKSxkYXRhOnRoaXMuZ2V0Rm9ybWF0dGVkRGF0YSgpLGZvcm06dGhpcy5nZXQoImZvcm0iKSxoZWFkZXJzOnRoaXMuZ2V0KCJoZWFkZXJzIiksbWV0aG9kOnRoaXMuZ2V0KCJtZXRob2QiKSxvbjp7Y29tcGxldGU6YS5iaW5kKHRoaXMuZmlyZSx0aGlzLCJjb21wbGV0ZSIpLGVuZDphLmJpbmQodGhpcy5fZW5kLHRoaXMpLGZhaWx1cmU6YS5iaW5kKHRoaXMuZmlyZSx0aGlzLCJmYWlsdXJlIiksc3RhcnQ6YS5iaW5kKHRoaXMuZmlyZSx0aGlzLCJzdGFydCIpLHN1Y2Nlc3M6YS5iaW5kKHRoaXMuX3N1Y2Nlc3MsdGhpcyl9LHN5bmM6dGhpcy5nZXQoInN5bmMiKSwKdGltZW91dDp0aGlzLmdldCgidGltZW91dCIpLHhkcjp0aGlzLmdldCgieGRyIil9fSxyZWFkT25seTohMH0sdHJhbnNhY3Rpb246e3ZhbHVlOm51bGx9LGFyZ3VtZW50czp7dmFsdWVGbjpjKCJhcmd1bWVudHMiKX0sY29udGV4dDp7dmFsdWVGbjpjKCJjb250ZXh0Iil9LGRhdGE6e3ZhbHVlRm46YygiZGF0YSIpfSxmb3JtOnt2YWx1ZUZuOmMoImZvcm0iKX0saGVhZGVyczp7Z2V0dGVyOmZ1bmN0aW9uKGUpe3ZhciBrPVtdLG09dGhpcy5nZXQoImRhdGFUeXBlIik7bSYmay5wdXNoKGJbbV0pO2sucHVzaChiLmFsbCk7cmV0dXJuIGEubWVyZ2UoZSx7QWNjZXB0Omsuam9pbigiLCAiKX0pfSx2YWx1ZUZuOmMoImhlYWRlcnMiKX0sbWV0aG9kOntzZXR0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX0sdmFsdWVGbjpjKCJtZXRob2QiKX0sc2VsZWN0b3I6e3ZhbHVlOm51bGx9LHN5bmM6e3ZhbHVlRm46Yygic3luYyIpfSx0aW1lb3V0Ont2YWx1ZUZuOmMoInRpbWVvdXQiKX0sCnhkcjp7dmFsdWVGbjpjKCJ4ZHIiKX19LEVYVEVORFM6YS5QbHVnaW4uQmFzZSxwcm90b3R5cGU6e2luaXQ6ZnVuY3Rpb24oKXtnLnN1cGVyY2xhc3MuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fYXV0b1N0YXJ0KCl9LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLnN0b3AoKTt0aGlzLnNldCgidHJhbnNhY3Rpb24iLG51bGwpfSxnZXRGb3JtYXR0ZWREYXRhOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXQoImRhdGEiKSxrPWQuZGF0YUZvcm1hdHRlcjtmKGspJiYoZT1rLmNhbGwodGhpcyxlKSk7cmV0dXJuIGV9LHN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5kZXN0cnVjdG9yKCk7dGhpcy5zZXQoImFjdGl2ZSIsITApO3ZhciBlPXRoaXMuX3l1aUlPT2JqO2V8fCh0aGlzLl95dWlJT09iaj1lPW5ldyBhLklPKTtlPWUuc2VuZCh0aGlzLmdldCgidXJpIiksdGhpcy5nZXQoImNmZyIpKTt0aGlzLnNldCgidHJhbnNhY3Rpb24iLGUpfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXQoInRyYW5zYWN0aW9uIik7CmUmJmUuYWJvcnQoKX0sX2F1dG9TdGFydDpmdW5jdGlvbigpe3RoaXMuZ2V0KCJhdXRvTG9hZCIpJiZ0aGlzLnN0YXJ0KCl9LF9wYXJzZVVSTDpmdW5jdGlvbihlKXt2YXIgaz10aGlzLmdldCgiY2FjaGUiKSxtPXRoaXMuZ2V0KCJtZXRob2QiKTshMT09PWsmJiJnZXQiPT09bSYmKGs9K25ldyBEYXRlLG09ZS5yZXBsYWNlKC8oXD98JilfPS4qPygmfCQpLywiJDFfXHgzZCIraysiJDIiKSxlPW0rKG09PT1lPyhlLm1hdGNoKC9cPy8pPyJceDI2IjoiPyIpKyJfXHgzZCIrazoiIikpO2s9ZC51cmlGb3JtYXR0ZXI7ZihrKSYmKGU9ay5hcHBseSh0aGlzLFtlXSkpO3JldHVybiBlfSxfZW5kOmZ1bmN0aW9uKGUsayl7dGhpcy5zZXQoImFjdGl2ZSIsITEpO3RoaXMuc2V0KCJ0cmFuc2FjdGlvbiIsbnVsbCk7dGhpcy5maXJlKCJlbmQiLGUsayl9LF9zdWNjZXNzOmZ1bmN0aW9uKGUsayxtKXt0aGlzLnNldCgicmVzcG9uc2VEYXRhIixrKTt0aGlzLmZpcmUoInN1Y2Nlc3MiLGUsayxtKX0sX3NldFJlc3BvbnNlRGF0YTpmdW5jdGlvbihlKXt2YXIgaz0KbnVsbDtpZihlKXt2YXIgbT10aGlzLmdldCgiZGF0YVR5cGUiKSxrPWUuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIjtpZigieG1sIj09PW18fCFtJiYwPD1rLmluZGV4T2YoInhtbCIpKXtpZihrPWUucmVzcG9uc2VYTUwsInBhcnNlcmVycm9yIj09PWsuZG9jdW1lbnRFbGVtZW50LnRhZ05hbWUpdGhyb3ciUGFyc2VyIGVycm9yOiBJTyBkYXRhVHlwZSBpcyBub3QgY29ycmVjdGx5IHBhcnNpbmciO31lbHNlIGs9ZS5yZXNwb25zZVRleHQ7IiI9PT1rJiYoaz1udWxsKTtpZigianNvbiI9PT1tKXRyeXtrPWEuSlNPTi5wYXJzZShrKX1jYXRjaChwKXt9ZWxzZSBlPXRoaXMuZ2V0KCJzZWxlY3RvciIpLGsmJmUmJihrPShrLmRvY3VtZW50RWxlbWVudD9hLm9uZShrKTphLk5vZGUuY3JlYXRlKGspKS5hbGwoZSkpfXJldHVybiBrfX19KTthLklPUmVxdWVzdD1nO2EuaW8ucmVxdWVzdD1mdW5jdGlvbihlLGspe3JldHVybiBuZXcgYS5JT1JlcXVlc3QoYS5tZXJnZShrLAp7dXJpOmV9KSl9fSwiMy4wLjMtZGVwcmVjYXRlZC43MyIse3JlcXVpcmVzOlsiaW8tYmFzZSIsImpzb24iLCJwbHVnaW4iLCJxdWVyeXN0cmluZy1zdHJpbmdpZnkiLCJhdWktY29tcG9uZW50Il19KTsKWVVJLmFkZCgiYXVpLWxvYWRpbmctbWFzay1kZXByZWNhdGVkIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZztFPSJsb2FkaW5nbWFzayI7dmFyIHQ9YS5nZXRDbGFzc05hbWUsZj10KEUpLGQ9dChFLCJtYXNrZWQiKSxjPXQoRSwibWFza2VkIiwicmVsYXRpdmUiKSxiPXQoRSwibWVzc2FnZSIpLHQ9dChFLCJtZXNzYWdlIiwiY29udGVudCIpLGc9J1x4M2NkaXYgY2xhc3NceDNkIicrYisnIlx4M2VceDNjZGl2IGNsYXNzXHgzZCInK3QrJyJceDNlezB9XHgzYy9kaXZceDNlXHgzYy9kaXZceDNlJyxlPWEuQ29tcG9uZW50LmNyZWF0ZSh7TkFNRTpFLE5TOkUsQVRUUlM6e21lc3NhZ2VFbDp7dmFsdWVGbjpmdW5jdGlvbihrKXtrPXRoaXMuZ2V0KCJzdHJpbmdzIik7cmV0dXJuIGEuTm9kZS5jcmVhdGUocS5zdWIoZyxbay5sb2FkaW5nXSkpfX0sc3RyaW5nczp7dmFsdWU6e2xvYWRpbmc6IkxvYWRpbmdceDI2aGVsbGlwOyJ9fSx0YXJnZXQ6e3NldHRlcjpmdW5jdGlvbigpe3ZhciBrPQp0aGlzLmdldCgiaG9zdCIpO2sgaW5zdGFuY2VvZiBhLldpZGdldCYmKGs9ay5nZXQoImNvbnRlbnRCb3giKSk7cmV0dXJuIGt9LHZhbHVlOm51bGx9fSxFWFRFTkRTOmEuUGx1Z2luLkJhc2UscHJvdG90eXBlOntpbml0aWFsaXplcjpmdW5jdGlvbihrKXt0aGlzLklHTk9SRURfQVRUUlM9YS5tZXJnZSh7aG9zdDohMH0sZS5BVFRSUyk7dGhpcy5yZW5kZXJVSSgpO3RoaXMuYmluZFVJKCk7dGhpcy5fY3JlYXRlRHluYW1pY0F0dHJzKGspfSxyZW5kZXJVSTpmdW5jdGlvbigpe3RoaXMuZ2V0KCJzdHJpbmdzIik7dGhpcy5fcmVuZGVyT3ZlcmxheU1hc2soKTt0aGlzLm92ZXJsYXlNYXNrLmdldCgiYm91bmRpbmdCb3giKS5hcHBlbmQodGhpcy5nZXQoIm1lc3NhZ2VFbCIpKX0sYmluZFVJOmZ1bmN0aW9uKCl7dGhpcy5fYmluZE92ZXJsYXlNYXNrVUkoKX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMub3ZlcmxheU1hc2suZGVzdHJveSgpO3RoaXMuX3Zpc2libGVDaGFuZ2VIYW5kbGUuZGV0YWNoKCl9LApfYmluZE92ZXJsYXlNYXNrVUk6ZnVuY3Rpb24oKXt0aGlzLl92aXNpYmxlQ2hhbmdlSGFuZGxlPXRoaXMub3ZlcmxheU1hc2suYWZ0ZXIoInZpc2libGVDaGFuZ2UiLHRoaXMuX2FmdGVyVmlzaWJsZUNoYW5nZSx0aGlzKX0sY2VudGVyTWVzc2FnZTpmdW5jdGlvbigpe3RoaXMuZ2V0KCJtZXNzYWdlRWwiKS5jZW50ZXIodGhpcy5vdmVybGF5TWFzay5nZXQoImJvdW5kaW5nQm94IikpfSxyZWZyZXNoTWFzazpmdW5jdGlvbigpe3RoaXMub3ZlcmxheU1hc2sucmVmcmVzaE1hc2soKTt0aGlzLmNlbnRlck1lc3NhZ2UoKX0sX2FmdGVyVmlzaWJsZUNoYW5nZTpmdW5jdGlvbihrKXt2YXIgbT10aGlzLmdldCgidGFyZ2V0IikscD0ic3RhdGljIj09bS5nZXRTdHlsZSgicG9zaXRpb24iKTttLnRvZ2dsZUNsYXNzKGQsay5uZXdWYWwpO20udG9nZ2xlQ2xhc3MoYyxrLm5ld1ZhbCYmcCk7ay5uZXdWYWwmJnRoaXMucmVmcmVzaE1hc2soKX0sX3JlbmRlck92ZXJsYXlNYXNrOmZ1bmN0aW9uKCl7dmFyIGs9CnRoaXMuZ2V0KCJ0YXJnZXQiKTt0aGlzLm92ZXJsYXlNYXNrPShuZXcgYS5PdmVybGF5TWFzayh7dGFyZ2V0OmssY3NzQ2xhc3M6Zn0pKS5yZW5kZXIoayl9LF9jcmVhdGVEeW5hbWljQXR0cnM6ZnVuY3Rpb24oayl7dmFyIG09dGhpczthLmVhY2goayxmdW5jdGlvbihwLHMpe20uSUdOT1JFRF9BVFRSU1tzXXx8bS5hZGRBdHRyKHMse3NldHRlcjpmdW5jdGlvbihsKXt0aGlzLm92ZXJsYXlNYXNrLnNldChzLGwpO3JldHVybiBsfSx2YWx1ZTpwfSl9KX19fSk7YS5lYWNoKFsiaGlkZSIsInNob3ciLCJ0b2dnbGUiXSxmdW5jdGlvbihrKXtlLnByb3RvdHlwZVtrXT1mdW5jdGlvbigpe3RoaXMub3ZlcmxheU1hc2tba10oKX19KTthLkxvYWRpbmdNYXNrPWV9LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6WyJwbHVnaW4iLCJhdWktb3ZlcmxheS1tYXNrLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9KTsKWVVJLmFkZCgiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIixmdW5jdGlvbihhLEUpe2EuT3ZlcmxheUJhc2U9YS5Db21wb25lbnQuY3JlYXRlKHtOQU1FOiJvdmVybGF5IixBVFRSUzp7aGlkZUNsYXNzOnt2YWx1ZTohMX19LEFVR01FTlRTOlthLldpZGdldFBvc2l0aW9uLGEuV2lkZ2V0U3RhY2ssYS5XaWRnZXRQb3NpdGlvbkFsaWduLGEuV2lkZ2V0UG9zaXRpb25Db25zdHJhaW4sYS5XaWRnZXRTdGRNb2RdfSl9LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6IndpZGdldC1wb3NpdGlvbiB3aWRnZXQtc3RhY2sgd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4gd2lkZ2V0LXN0ZG1vZCBhdWktY29tcG9uZW50Ii5zcGxpdCgiICIpfSk7CllVSS5hZGQoImF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLkxhbmcsdD1xLmlzU3RyaW5nLGY9cS5pc051bWJlcixkPXEuaXNCb29sZWFuLGM9YS5Db21wb25lbnQuY3JlYXRlKHtOQU1FOiJvdmVybGF5Y29udGV4dCIsQVRUUlM6e2FsaWduOnt2YWx1ZTp7bm9kZTpudWxsLHBvaW50czpbInRsIiwiYmwiXX19LGNhbmNlbGxhYmxlSGlkZTp7dmFsdWU6ITAsdmFsaWRhdG9yOmR9LGN1cnJlbnROb2RlOnt2YWx1ZUZuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJ0cmlnZ2VyIikuaXRlbSgwKX19LGRlbGF5Ont2YWx1ZTpudWxsLHZhbGlkYXRvcjpxLmlzT2JqZWN0fSxoaWRlT246e2xhenlBZGQ6ITEsdmFsdWU6Im1vdXNlb3V0IixzZXR0ZXI6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3NldEhpZGVPbihiKX19LGhpZGVPbkRvY3VtZW50Q2xpY2s6e2xhenlBZGQ6ITEsc2V0dGVyOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLl9zZXRIaWRlT25Eb2N1bWVudENsaWNrKGIpfSwKdmFsdWU6ITAsdmFsaWRhdG9yOmR9LGhpZGVEZWxheTp7bGF6eUFkZDohMSxzZXR0ZXI6Il9zZXRIaWRlRGVsYXkiLHZhbHVlOjAsdmFsaWRhdG9yOmZ9LHNob3dPbjp7bGF6eUFkZDohMSx2YWx1ZToibW91c2VvdmVyIixzZXR0ZXI6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3NldFNob3dPbihiKX19LHNob3dEZWxheTp7bGF6eUFkZDohMSxzZXR0ZXI6Il9zZXRTaG93RGVsYXkiLHZhbHVlOjAsdmFsaWRhdG9yOmZ9LHRyaWdnZXI6e2xhenlBZGQ6ITEsc2V0dGVyOmZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgYS5Ob2RlTGlzdD9iOnQoYik/YS5hbGwoYik6bmV3IGEuTm9kZUxpc3QoW2JdKX19LHVzZUFSSUE6e3ZhbHVlOiEwfSx2aXNpYmxlOnt2YWx1ZTohMX19LEVYVEVORFM6YS5PdmVybGF5QmFzZSxjb25zdHJ1Y3RvcjpmdW5jdGlvbihiKXt0aGlzLl9oaWRlQ2FsbGJhY2s9dGhpcy5fc2hvd0NhbGxiYWNrPW51bGw7Yy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsCmFyZ3VtZW50cyl9LHByb3RvdHlwZTp7aW5pdGlhbGl6ZXI6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldCgidHJpZ2dlciIpO2ImJmIuc2l6ZSgpJiZ0aGlzLnNldCgiYWxpZ24ubm9kZSIsYi5pdGVtKDApKX0sYmluZFVJOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXQoImJvdW5kaW5nQm94Iik7Yi5vbigibW91c2Vkb3duIix0aGlzLl9zdG9wVHJpZ2dlckV2ZW50UHJvcGFnYXRpb24pO3RoaXMuYmVmb3JlKCJ0cmlnZ2VyQ2hhbmdlIix0aGlzLl9iZWZvcmVUcmlnZ2VyQ2hhbmdlKTt0aGlzLmJlZm9yZSgic2hvd09uQ2hhbmdlIix0aGlzLl9iZWZvcmVTaG93T25DaGFuZ2UpO3RoaXMuYmVmb3JlKCJoaWRlT25DaGFuZ2UiLHRoaXMuX2JlZm9yZUhpZGVPbkNoYW5nZSk7dGhpcy5hZnRlcigidHJpZ2dlckNoYW5nZSIsdGhpcy5fYWZ0ZXJUcmlnZ2VyQ2hhbmdlKTt0aGlzLmFmdGVyKCJzaG93T25DaGFuZ2UiLHRoaXMuX2FmdGVyU2hvd09uQ2hhbmdlKTt0aGlzLmFmdGVyKCJoaWRlT25DaGFuZ2UiLAp0aGlzLl9hZnRlckhpZGVPbkNoYW5nZSk7Yi5vbigiY2xpY2siLGEuYmluZCh0aGlzLl9jYW5jZWxBdXRvSGlkZSx0aGlzKSk7Yi5vbigibW91c2VlbnRlciIsYS5iaW5kKHRoaXMuX2NhbmNlbEF1dG9IaWRlLHRoaXMpKTtiLm9uKCJtb3VzZWxlYXZlIixhLmJpbmQodGhpcy5faW52b2tlSGlkZVRhc2tPbkludGVyYWN0aW9uLHRoaXMpKTt0aGlzLmFmdGVyKCJmb2N1c2VkQ2hhbmdlIixhLmJpbmQodGhpcy5faW52b2tlSGlkZVRhc2tPbkludGVyYWN0aW9uLHRoaXMpKTt0aGlzLm9uKCJ2aXNpYmxlQ2hhbmdlIix0aGlzLl9vblZpc2libGVDaGFuZ2VPdmVybGF5Q29udGV4dCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLmNsZWFySW50ZXJ2YWxzKCk7dGhpcy5maXJlKCJoaWRlIik7Yy5zdXBlcmNsYXNzLmhpZGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxzaG93OmZ1bmN0aW9uKGIpe3RoaXMuY2xlYXJJbnRlcnZhbHMoKTt0aGlzLnVwZGF0ZUN1cnJlbnROb2RlKGIpO3RoaXMuZmlyZSgic2hvdyIpOwpjLnN1cGVyY2xhc3Muc2hvdy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5yZWZyZXNoQWxpZ24oKX0sc3luY1VJOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcztiLmdldCgidXNlQVJJQSIpJiZiLnBsdWcoYS5QbHVnaW4uQXJpYSx7YXR0cmlidXRlczp7dHJpZ2dlcjp7YXJpYU5hbWU6ImNvbnRyb2xzIixmb3JtYXQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGIuZ2V0KCJib3VuZGluZ0JveCIpLmdlbmVyYXRlSUQoKX0sbm9kZTpmdW5jdGlvbigpe3JldHVybiBiLmdldCgidHJpZ2dlciIpfX0sdmlzaWJsZTp7YXJpYU5hbWU6ImhpZGRlbiIsZm9ybWF0OmZ1bmN0aW9uKGcpe3JldHVybiFnfX19LHJvbGVOYW1lOiJkaWFsb2cifSl9LHRvZ2dsZTpmdW5jdGlvbihiKXt0aGlzLmdldCgidmlzaWJsZSIpP3RoaXMuX2hpZGVUYXNrKGIpOnRoaXMuX3Nob3dUYXNrKGIpfSxjbGVhckludGVydmFsczpmdW5jdGlvbigpe3RoaXMuX2hpZGVUYXNrLmNhbmNlbCgpO3RoaXMuX3Nob3dUYXNrLmNhbmNlbCgpfSwKcmVmcmVzaEFsaWduOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXQoImFsaWduIiksZz10aGlzLmdldCgiY3VycmVudE5vZGUiKTtnJiZ0aGlzLl91aVNldEFsaWduKGcsYi5wb2ludHMpfSx1cGRhdGVDdXJyZW50Tm9kZTpmdW5jdGlvbihiKXt2YXIgZz10aGlzLmdldCgiYWxpZ24iKSxlPXRoaXMuZ2V0KCJ0cmlnZ2VyIiksaz1udWxsO2ImJihrPWIuY3VycmVudFRhcmdldCk7KGI9a3x8ZS5pdGVtKDApfHxnLm5vZGUpJiZ0aGlzLnNldCgiY3VycmVudE5vZGUiLGIpfSxfdG9nZ2xlOmZ1bmN0aW9uKGIpe2lmKCF0aGlzLmdldCgiZGlzYWJsZWQiKSl7dmFyIGc9Yi5jdXJyZW50VGFyZ2V0O3RoaXMuX2xhc3RUYXJnZXQhPWcmJnRoaXMuaGlkZSgpO3RoaXMudG9nZ2xlKGIpO2Iuc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5fbGFzdFRhcmdldD1nfX0sX2FmdGVyU2hvd09uQ2hhbmdlOmZ1bmN0aW9uKGIpe2IucHJldlZhbD09dGhpcy5nZXQoImhpZGVPbiIpJiYodGhpcy5nZXQoInRyaWdnZXIiKS5kZXRhY2goYi5wcmV2VmFsLAp0aGlzLl9oaWRlQ2FsbGJhY2spLHRoaXMuX3NldEhpZGVPbih0aGlzLmdldCgiaGlkZU9uIikpKX0sX2FmdGVySGlkZU9uQ2hhbmdlOmZ1bmN0aW9uKGIpe2IucHJldlZhbD09dGhpcy5nZXQoInNob3dPbiIpJiYodGhpcy5nZXQoInRyaWdnZXIiKS5kZXRhY2goYi5wcmV2VmFsLHRoaXMuX3Nob3dDYWxsYmFjayksdGhpcy5fc2V0U2hvd09uKHRoaXMuZ2V0KCJzaG93T24iKSkpfSxfYWZ0ZXJUcmlnZ2VyQ2hhbmdlOmZ1bmN0aW9uKGIpe3RoaXMuX3NldFNob3dPbih0aGlzLmdldCgic2hvd09uIikpO3RoaXMuX3NldEhpZGVPbih0aGlzLmdldCgiaGlkZU9uIikpfSxfYmVmb3JlU2hvd09uQ2hhbmdlOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0KCJ0cmlnZ2VyIikuZGV0YWNoKGIucHJldlZhbCx0aGlzLl9zaG93Q2FsbGJhY2spfSxfYmVmb3JlSGlkZU9uQ2hhbmdlOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0KCJ0cmlnZ2VyIikuZGV0YWNoKGIucHJldlZhbCx0aGlzLl9oaWRlQ2FsbGJhY2spfSwKX2JlZm9yZVRyaWdnZXJDaGFuZ2U6ZnVuY3Rpb24oYil7Yj10aGlzLmdldCgidHJpZ2dlciIpO3ZhciBnPXRoaXMuZ2V0KCJzaG93T24iKSxlPXRoaXMuZ2V0KCJoaWRlT24iKTtiLmRldGFjaChnLHRoaXMuX3Nob3dDYWxsYmFjayk7Yi5kZXRhY2goZSx0aGlzLl9oaWRlQ2FsbGJhY2spO2IuZGV0YWNoKCJtb3VzZWRvd24iLHRoaXMuX3N0b3BUcmlnZ2VyRXZlbnRQcm9wYWdhdGlvbil9LF9jYW5jZWxBdXRvSGlkZTpmdW5jdGlvbihiKXt0aGlzLmdldCgiY2FuY2VsbGFibGVIaWRlIikmJnRoaXMuY2xlYXJJbnRlcnZhbHMoKTtiLnN0b3BQcm9wYWdhdGlvbigpfSxfaW52b2tlSGlkZVRhc2tPbkludGVyYWN0aW9uOmZ1bmN0aW9uKGIpe2I9dGhpcy5nZXQoImNhbmNlbGxhYmxlSGlkZSIpO3RoaXMuZ2V0KCJmb2N1c2VkIil8fGJ8fHRoaXMuX2hpZGVUYXNrKCl9LF9vblZpc2libGVDaGFuZ2VPdmVybGF5Q29udGV4dDpmdW5jdGlvbihiKXtiLm5ld1ZhbCYmdGhpcy5nZXQoImRpc2FibGVkIikmJgpiLnByZXZlbnREZWZhdWx0KCl9LF9zdG9wVHJpZ2dlckV2ZW50UHJvcGFnYXRpb246ZnVuY3Rpb24oYil7Yi5zdG9wUHJvcGFnYXRpb24oKX0sX3NldEhpZGVEZWxheTpmdW5jdGlvbihiKXt0aGlzLl9oaWRlVGFzaz1hLmRlYm91bmNlKHRoaXMuaGlkZSxiLHRoaXMpO3JldHVybiBifSxfc2V0SGlkZU9uOmZ1bmN0aW9uKGIpe3ZhciBnPXRoaXMsZT1nLmdldCgidHJpZ2dlciIpO2I9PWcuZ2V0KCJzaG93T24iKT8oZy5faGlkZUNhbGxiYWNrPWEuYmluZChnLl90b2dnbGUsZyksZS5kZXRhY2goYixnLl9zaG93Q2FsbGJhY2spKTooZy5nZXQoImhpZGVEZWxheSIpLGcuX2hpZGVDYWxsYmFjaz1mdW5jdGlvbihrKXtnLl9oaWRlVGFzayhrKTtrLnN0b3BQcm9wYWdhdGlvbigpfSk7ZS5vbihiLGcuX2hpZGVDYWxsYmFjayk7cmV0dXJuIGJ9LF9zZXRIaWRlT25Eb2N1bWVudENsaWNrOmZ1bmN0aW9uKGIpe2I/YS5PdmVybGF5Q29udGV4dE1hbmFnZXIucmVnaXN0ZXIodGhpcyk6YS5PdmVybGF5Q29udGV4dE1hbmFnZXIucmVtb3ZlKHRoaXMpOwpyZXR1cm4gYn0sX3NldFNob3dEZWxheTpmdW5jdGlvbihiKXt0aGlzLl9zaG93VGFzaz1hLmRlYm91bmNlKHRoaXMuc2hvdyxiLHRoaXMpO3JldHVybiBifSxfc2V0U2hvd09uOmZ1bmN0aW9uKGIpe3ZhciBnPXRoaXMsZT1nLmdldCgidHJpZ2dlciIpO2I9PWcuZ2V0KCJoaWRlT24iKT8oZy5fc2hvd0NhbGxiYWNrPWEuYmluZChnLl90b2dnbGUsZyksZS5kZXRhY2goYixnLl9oaWRlQ2FsbGJhY2spKTooZy5nZXQoInNob3dEZWxheSIpLGcuX3Nob3dDYWxsYmFjaz1mdW5jdGlvbihrKXtnLl9zaG93VGFzayhrKTtrLnN0b3BQcm9wYWdhdGlvbigpfSk7aWYoIm1vdXNlZG93biIhPWIpZS5vbigibW91c2Vkb3duIixnLl9zdG9wVHJpZ2dlckV2ZW50UHJvcGFnYXRpb24pO2Vsc2UgZS5kZXRhY2goIm1vdXNlZG93biIsZy5fc3RvcFRyaWdnZXJFdmVudFByb3BhZ2F0aW9uKTtlLm9uKGIsZy5fc2hvd0NhbGxiYWNrKTtyZXR1cm4gYn19fSk7YS5PdmVybGF5Q29udGV4dD1jO2EuT3ZlcmxheUNvbnRleHRNYW5hZ2VyPQpuZXcgYS5PdmVybGF5TWFuYWdlcih7fSk7YS5vbigibW91c2Vkb3duIixmdW5jdGlvbigpe2EuT3ZlcmxheUNvbnRleHRNYW5hZ2VyLmhpZGVBbGwoKX0sYS5nZXREb2MoKSl9LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6WyJhdWktb3ZlcmxheS1tYW5hZ2VyLWRlcHJlY2F0ZWQiLCJhdWktZGVsYXllZC10YXNrLWRlcHJlY2F0ZWQiLCJhdWktYXJpYSJdfSk7CllVSS5hZGQoImF1aS1vdmVybGF5LW1hbmFnZXItZGVwcmVjYXRlZCIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLkxhbmcsdD1xLmlzQXJyYXkscT1hLkNvbXBvbmVudC5jcmVhdGUoe05BTUU6Im92ZXJsYXltYW5hZ2VyIixBVFRSUzp7ekluZGV4QmFzZTp7dmFsdWU6MUUzLHZhbGlkYXRvcjpxLmlzTnVtYmVyLHNldHRlcjpxLnRvSW50fX0sRVhURU5EUzphLkJhc2UscHJvdG90eXBlOntpbml0aWFsaXplcjpmdW5jdGlvbigpe3RoaXMuX292ZXJsYXlzPVtdfSxicmluZ1RvVG9wOmZ1bmN0aW9uKGYpe3ZhciBkPXRoaXMuX292ZXJsYXlzLnNvcnQodGhpcy5zb3J0QnlaSW5kZXhEZXNjKVswXTtkIT09ZiYmKGYuZ2V0KCJ6SW5kZXgiKSxkPWQuZ2V0KCJ6SW5kZXgiKSxmLnNldCgiekluZGV4IixkKzEpLGYuc2V0KCJmb2N1c2VkIiwhMCkpfSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dGhpcy5fb3ZlcmxheXM9W119LHJlZ2lzdGVyOmZ1bmN0aW9uKGYpe3ZhciBkPXRoaXMsYz1kLl9vdmVybGF5czsKaWYodChmKSlhLkFycmF5LmVhY2goZixmdW5jdGlvbihrKXtkLnJlZ2lzdGVyKGspfSk7ZWxzZXt2YXIgYj1kLmdldCgiekluZGV4QmFzZSIpO2lmKCFkLl9yZWdpc3RlcmVkKGYpJiZmJiYoZiBpbnN0YW5jZW9mIGEuT3ZlcmxheXx8YS5Db21wb25lbnQmJmYgaW5zdGFuY2VvZiBhLkNvbXBvbmVudCkpe3ZhciBnPWYuZ2V0KCJib3VuZGluZ0JveCIpO2MucHVzaChmKTt2YXIgZT1mLmdldCgiekluZGV4Iil8fDA7Zi5zZXQoInpJbmRleCIsYy5sZW5ndGgrZStiKTtmLm9uKCJmb2N1c2VkQ2hhbmdlIixkLl9vbkZvY3VzZWRDaGFuZ2UsZCk7Zy5vbigibW91c2Vkb3duIixkLl9vbk1vdXNlRG93bixkKX19cmV0dXJuIGN9LHJlbW92ZTpmdW5jdGlvbihmKXt2YXIgZD10aGlzLl9vdmVybGF5cztyZXR1cm4gZC5sZW5ndGg/YS5BcnJheS5yZW1vdmVJdGVtKGQsZik6bnVsbH0sZWFjaDpmdW5jdGlvbihmKXthLkFycmF5LmVhY2godGhpcy5fb3ZlcmxheXMsZil9LHNob3dBbGw6ZnVuY3Rpb24oKXt0aGlzLmVhY2goZnVuY3Rpb24oZil7Zi5zaG93KCl9KX0sCmhpZGVBbGw6ZnVuY3Rpb24oKXt0aGlzLmVhY2goZnVuY3Rpb24oZil7Zi5oaWRlKCl9KX0sc29ydEJ5WkluZGV4RGVzYzpmdW5jdGlvbihmLGQpe2lmKGYmJmQmJmYuaGFzSW1wbChhLldpZGdldFN0YWNrKSYmZC5oYXNJbXBsKGEuV2lkZ2V0U3RhY2spKXt2YXIgYz1mLmdldCgiekluZGV4IiksYj1kLmdldCgiekluZGV4Iik7cmV0dXJuIGM+Yj8tMTpjPGI/MTowfXJldHVybiAwfSxfcmVnaXN0ZXJlZDpmdW5jdGlvbihmKXtyZXR1cm4tMSE9YS5BcnJheS5pbmRleE9mKHRoaXMuX292ZXJsYXlzLGYpfSxfb25Nb3VzZURvd246ZnVuY3Rpb24oZil7Zj1hLldpZGdldC5nZXRCeU5vZGUoZi5jdXJyZW50VGFyZ2V0fHxmLnRhcmdldCk7dmFyIGQ9dGhpcy5fcmVnaXN0ZXJlZChmKTtmJiZkJiZ0aGlzLmJyaW5nVG9Ub3AoZil9LF9vbkZvY3VzZWRDaGFuZ2U6ZnVuY3Rpb24oZil7aWYoZi5uZXdWYWwpe2Y9Zi5jdXJyZW50VGFyZ2V0fHxmLnRhcmdldDt2YXIgZD10aGlzLl9yZWdpc3RlcmVkKGYpOwpmJiZkJiZ0aGlzLmJyaW5nVG9Ub3AoZil9fX19KTthLk92ZXJsYXlNYW5hZ2VyPXF9LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6WyJvdmVybGF5IiwicGx1Z2luIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LWJhc2UtZGVwcmVjYXRlZCJdfSk7CllVSS5hZGQoImF1aS1vdmVybGF5LW1hc2stZGVwcmVjYXRlZCIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLkxhbmcsdD1xLmlzVmFsdWUsZj1hLmNvbmZpZyxkPTY+PWEuVUEuaWUsYz1hLkNvbXBvbmVudC5jcmVhdGUoe05BTUU6Im92ZXJsYXltYXNrIixBVFRSUzp7YWxpZ25Qb2ludHM6e3ZhbHVlOlsidGwiLCJ0bCJdLHZhbGlkYXRvcjpxLmlzQXJyYXl9LGJhY2tncm91bmQ6e2xhenlBZGQ6ITEsdmFsdWU6bnVsbCx2YWxpZGF0b3I6cS5pc1N0cmluZyxzZXR0ZXI6ZnVuY3Rpb24oYil7YiYmdGhpcy5nZXQoImNvbnRlbnRCb3giKS5zZXRTdHlsZSgiYmFja2dyb3VuZCIsYik7cmV0dXJuIGJ9fSx0YXJnZXQ6e2Nsb25lRGVmYXVsdFZhbHVlOiExLGxhenlBZGQ6ITEsdmFsdWU6Zi5kb2Msc2V0dGVyOmZ1bmN0aW9uKGIpe2I9YS5vbmUoYik7dmFyIGc9dGhpcy5faXNEb2M9Yi5jb21wYXJlVG8oZi5kb2MpLGU9dGhpcy5faXNXaW49Yi5jb21wYXJlVG8oZi53aW4pO3RoaXMuX2Z1bGxQYWdlPQpnfHxlO3JldHVybiBifX0sb3BhY2l0eTp7dmFsdWU6MC41LHZhbGlkYXRvcjpxLmlzTnVtYmVyLHNldHRlcjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5fc2V0T3BhY2l0eShiKX19LHNoaW06e3ZhbHVlOmEuVUEuaWV9LHZpc2libGU6e3ZhbHVlOiExfSx6SW5kZXg6e3ZhbHVlOjFFM319LEVYVEVORFM6YS5PdmVybGF5QmFzZSxwcm90b3R5cGU6e2JpbmRVSTpmdW5jdGlvbigpe2Muc3VwZXJjbGFzcy5iaW5kVUkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX2V2ZW50SGFuZGxlcz1bdGhpcy5hZnRlcigidGFyZ2V0Q2hhbmdlIix0aGlzLl9hZnRlclRhcmdldENoYW5nZSksdGhpcy5hZnRlcigidmlzaWJsZUNoYW5nZSIsdGhpcy5fYWZ0ZXJWaXNpYmxlQ2hhbmdlKSxhLm9uKCJ3aW5kb3dyZXNpemUiLGEuYmluZCh0aGlzLnJlZnJlc2hNYXNrLHRoaXMpKV19LHN5bmNVSTpmdW5jdGlvbigpe3RoaXMucmVmcmVzaE1hc2soKX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpeyhuZXcgYS5FdmVudEhhbmRsZSh0aGlzLl9ldmVudEhhbmRsZXMpKS5kZXRhY2goKX0sCmdldFRhcmdldFNpemU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldCgidGFyZ2V0IiksZz10aGlzLl9pc0RvYyxlPXRoaXMuX2lzV2luLGs9Yi5nZXQoIm9mZnNldEhlaWdodCIpLGI9Yi5nZXQoIm9mZnNldFdpZHRoIik7ZD9lPyhiPWEuRE9NLndpbldpZHRoKCksaz1hLkRPTS53aW5IZWlnaHQoKSk6ZyYmKGI9YS5ET00uZG9jV2lkdGgoKSxrPWEuRE9NLmRvY0hlaWdodCgpKTp0aGlzLl9mdWxsUGFnZSYmKGI9az0iMTAwJSIpO3JldHVybntoZWlnaHQ6ayx3aWR0aDpifX0scmVmcmVzaE1hc2s6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldCgiYWxpZ25Qb2ludHMiKSxnPXRoaXMuZ2V0KCJ0YXJnZXQiKSxlPXRoaXMuZ2V0KCJib3VuZGluZ0JveCIpLGs9dGhpcy5nZXRUYXJnZXRTaXplKCksbT10aGlzLl9mdWxsUGFnZTtlLnNldFN0eWxlcyh7cG9zaXRpb246ZHx8IW0/ImFic29sdXRlIjoiZml4ZWQiLGxlZnQ6MCx0b3A6MH0pO2U9ay5oZWlnaHQ7az1rLndpZHRoO3QoZSkmJnRoaXMuc2V0KCJoZWlnaHQiLAplKTt0KGspJiZ0aGlzLnNldCgid2lkdGgiLGspO218fHRoaXMuYWxpZ24oZyxiKX0sX3NldE9wYWNpdHk6ZnVuY3Rpb24oYil7dGhpcy5nZXQoImNvbnRlbnRCb3giKS5zZXRTdHlsZSgib3BhY2l0eSIsYik7cmV0dXJuIGJ9LF91aVNldFZpc2libGU6ZnVuY3Rpb24oYil7Yy5zdXBlcmNsYXNzLl91aVNldFZpc2libGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2ImJnRoaXMuX3NldE9wYWNpdHkodGhpcy5nZXQoIm9wYWNpdHkiKSl9LF9hZnRlclRhcmdldENoYW5nZTpmdW5jdGlvbihiKXt0aGlzLnJlZnJlc2hNYXNrKCl9LF9hZnRlclZpc2libGVDaGFuZ2U6ZnVuY3Rpb24oYil7dGhpcy5fdWlTZXRWaXNpYmxlKGIubmV3VmFsKX0sX3VpU2V0WFk6ZnVuY3Rpb24oKXt0aGlzLl9mdWxsUGFnZSYmIWR8fGMuc3VwZXJjbGFzcy5fdWlTZXRYWS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0pO2EuT3ZlcmxheU1hc2s9Y30sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbImV2ZW50LXJlc2l6ZSIsCiJhdWktYmFzZS1kZXByZWNhdGVkIiwiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIl0sc2tpbm5hYmxlOiEwfSk7CllVSS5hZGQoImF1aS1wYXJzZS1jb250ZW50IixmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZyx0PXEuaXNTdHJpbmcsZj1hLmNvbmZpZy5kb2MsZD17IiI6MSwidGV4dC9qYXZhc2NyaXB0IjoxLCJ0ZXh0L3BhcnNlZCI6MX0sYz1hLkNvbXBvbmVudC5jcmVhdGUoe05BTUU6IlBhcnNlQ29udGVudCIsTlM6IlBhcnNlQ29udGVudCIsQVRUUlM6e3F1ZXVlOnt2YWx1ZTpudWxsfSxwcmVzZXJ2ZVNjcmlwdE5vZGVzOnt2YWxpZGF0b3I6cS5pc0Jvb2xlYW4sdmFsdWU6ITF9fSxFWFRFTkRTOmEuUGx1Z2luLkJhc2UscHJvdG90eXBlOntpbml0aWFsaXplcjpmdW5jdGlvbigpe2Muc3VwZXJjbGFzcy5pbml0aWFsaXplci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5zZXQoInF1ZXVlIixuZXcgYS5Bc3luY1F1ZXVlKTt0aGlzLl9iaW5kQU9QKCl9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7dmFyIGc9YS5nZXREb2MoKSxnPWcub25lKCJoZWFkIil8fGcuZ2V0KCJkb2N1bWVudEVsZW1lbnQiKSwKZT1mLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2UudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtiJiYoZS50ZXh0PXEudHJpbShiKSk7Zy5hcHBlbmRDaGlsZChlKS5yZW1vdmUoKX0scGFyc2VDb250ZW50OmZ1bmN0aW9uKGIpe2I9dGhpcy5fZXh0cmFjdFNjcmlwdHMoYik7dGhpcy5fZGlzcGF0Y2goYik7cmV0dXJuIGJ9LF9hZGRJbmxpbmVTY3JpcHQ6ZnVuY3Rpb24oYil7dGhpcy5nZXQoInF1ZXVlIikuYWRkKHthcmdzOmIsY29udGV4dDp0aGlzLGZuOnRoaXMuZ2xvYmFsRXZhbCx0aW1lb3V0OjB9KX0sX2JpbmRBT1A6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGc9ZnVuY3Rpb24oZSl7dmFyIGs9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxtPWIucGFyc2VDb250ZW50KGUpO2suc3BsaWNlKDAsMSxtLmZyYWdtZW50KTtyZXR1cm4gbmV3IGEuRG8uQWx0ZXJBcmdzKG51bGwsayl9O3RoaXMuZG9CZWZvcmUoImluc2VydCIsZyk7dGhpcy5kb0JlZm9yZSgicmVwbGFjZUNoaWxkIiwKZyk7Zz1mdW5jdGlvbihlKXtlPWIucGFyc2VDb250ZW50KGUpO3JldHVybiBuZXcgYS5Eby5BbHRlckFyZ3MobnVsbCxbZS5mcmFnbWVudF0pfTt0aGlzLmRvQmVmb3JlKCJyZXBsYWNlIixnKTt0aGlzLmRvQmVmb3JlKCJzZXRDb250ZW50IixnKX0sX2V4dHJhY3RTY3JpcHRzOmZ1bmN0aW9uKGIpe3ZhciBnPWEuTm9kZS5jcmVhdGUoIlx4M2NkaXZceDNlXHgzYy9kaXZceDNlIiksZT17fSxrPXRoaXMuZ2V0KCJwcmVzZXJ2ZVNjcmlwdE5vZGVzIik7dChiKT9hLkRPTS5hZGRIVE1MKGcsIlx4M2NkaXZceDNlX1x4M2MvZGl2XHgzZSIrYiwiYXBwZW5kIik6KGcuYXBwZW5kKCJceDNjZGl2XHgzZV9ceDNjL2Rpdlx4M2UiKSxnLmFwcGVuZChiKSk7ZS5qcz1nLmFsbCgic2NyaXB0IikuZmlsdGVyKGZ1bmN0aW9uKG0pe3ZhciBwPWRbbS5nZXRBdHRyaWJ1dGUoInR5cGUiKS50b0xvd2VyQ2FzZSgpXTtrJiZtLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvcGFyc2VkIik7cmV0dXJuIHB9KTsKa3x8ZS5qcy5lYWNoKGZ1bmN0aW9uKG0pe20ucmVtb3ZlKCl9KTtnLmdldCgiZmlyc3RDaGlsZCIpLnJlbW92ZSgpO2UuZnJhZ21lbnQ9Zy5nZXQoImNoaWxkTm9kZXMiKS50b0ZyYWcoKTtyZXR1cm4gZX0sX2Rpc3BhdGNoOmZ1bmN0aW9uKGIpe3ZhciBnPXRoaXMsZT1nLmdldCgicXVldWUiKSxrPVtdO2IuanMuZWFjaChmdW5jdGlvbihtKXt2YXIgcD1tLmdldCgic3JjIik7cD8oay5sZW5ndGgmJihnLl9hZGRJbmxpbmVTY3JpcHQoay5qb2luKCI7IikpLGsubGVuZ3RoPTApLGUuYWRkKHthdXRvQ29udGludWU6ITEsZm46ZnVuY3Rpb24oKXthLkdldC5zY3JpcHQocCx7b25FbmQ6ZnVuY3Rpb24ocyl7cy5wdXJnZSgpO2UucnVuKCl9fSl9LHRpbWVvdXQ6MH0pKToobT1tLl9ub2RlLGsucHVzaChtLnRleHR8fG0udGV4dENvbnRlbnR8fG0uaW5uZXJIVE1MfHwiIikpfSk7ay5sZW5ndGgmJmcuX2FkZElubGluZVNjcmlwdChrLmpvaW4oIjsiKSk7ZS5ydW4oKX19fSk7YS5uYW1lc3BhY2UoIlBsdWdpbiIpLlBhcnNlQ29udGVudD0KY30sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbImFzeW5jLXF1ZXVlIiwicGx1Z2luIiwiaW8tYmFzZSIsImF1aS1jb21wb25lbnQiLCJhdWktbm9kZS1iYXNlIl19KTsKKGZ1bmN0aW9uKGEsRSl7dmFyIHE9e2ljb25zOnttaW51czp0aGVtZURpc3BsYXkuZ2V0UGF0aFRoZW1lSW1hZ2VzKCkrIi9hcnJvd3MvMDFfbWludXMucG5nIixwbHVzOnRoZW1lRGlzcGxheS5nZXRQYXRoVGhlbWVJbWFnZXMoKSsiL2Fycm93cy8wMV9wbHVzLnBuZyJ9LHB1Ymxpc2hUb0xpdmU6ZnVuY3Rpb24odCl7dD10fHx7fTtFLlV0aWwub3BlbldpbmRvdyh7ZGlhbG9nOntjb25zdHJhaW46ITAsbW9kYWw6ITAsb246e3Zpc2libGVDaGFuZ2U6ZnVuY3Rpb24oZil7Zi5uZXdWYWx8fHRoaXMuZGVzdHJveSgpfX19LHRpdGxlOnQudGl0bGUsdXJpOnQudXJsfSl9fTtFLnByb3ZpZGUocSwiYWxsIixmdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBmPXQub2JqO3Q9dC5wYW5lO2YmJmYuY2hlY2tlZCYmKHQ9YS5vbmUodCkpJiZ0LmhpZGUoKX0sWyJhdWktYmFzZSJdKTtFLnByb3ZpZGUocSwiZGV0YWlscyIsZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZj1hLm9uZSh0LmRldGFpbCk7dD1hLm9uZSh0LnRvZ2dsZSk7CmlmKGYmJnQpe3ZhciBkPXEuaWNvbnMucGx1cztmLmhhc0NsYXNzKCJoaWRlIik/KGYuc2hvdygpLGQ9cS5pY29ucy5taW51cyk6Zi5oaWRlKCk7dC5hdHRyKCJzcmMiLGQpfX0sWyJhdWktYmFzZSJdKTtFLnByb3ZpZGUocSwicHJvcG9zZUxheW91dCIsZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZj10Lm5hbWVzcGFjZSxkPXQucmV2aWV3ZXJzO3Q9J1x4M2NkaXZceDNlXHgzY2Zvcm0gYWN0aW9uXHgzZCInK3QudXJsKyciIG1ldGhvZFx4M2QicG9zdCJceDNlJztpZigwPGQubGVuZ3RoKXt0Kz0nXHgzY3RleHRhcmVhIG5hbWVceDNkIicrZisnZGVzY3JpcHRpb24iIHN0eWxlXHgzZCJoZWlnaHQ6IDEwMHB4OyB3aWR0aDogMjg0cHg7Ilx4M2VceDNjL3RleHRhcmVhXHgzZVx4M2NiciAvXHgzZVx4M2NiciAvXHgzZScrRS5MYW5ndWFnZS5nZXQoInJldmlld2VyIikrJyBceDNjc2VsZWN0IG5hbWVceDNkIicrZisncmV2aWV3VXNlcklkIlx4M2UnO2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspdCs9CidceDNjb3B0aW9uIHZhbHVlXHgzZCInK2RbZl0udXNlcklkKyciXHgzZScrZFtmXS5mdWxsTmFtZSsiXHgzYy9vcHRpb25ceDNlIjt0Kz0nXHgzYy9zZWxlY3RceDNlXHgzY2JyIC9ceDNlXHgzY2JyIC9ceDNlXHgzY2lucHV0IHR5cGVceDNkInN1Ym1pdCIgdmFsdWVceDNkIicrRS5MYW5ndWFnZS5nZXQoInByb2NlZWQiKSsnIiAvXHgzZSd9ZWxzZSB0Kz1FLkxhbmd1YWdlLmdldCgibm8tcmV2aWV3ZXJzLXdlcmUtZm91bmQiKSsiXHgzY2JyIC9ceDNlIitFLkxhbmd1YWdlLmdldCgicGxlYXNlLWNvbnRhY3QtdGhlLWFkbWluaXN0cmF0b3ItdG8tYXNzaWduLXJldmlld2VycyIpKyJceDNjYnIgL1x4M2VceDNjYnIgL1x4M2UiO0UuVXRpbC5vcGVuV2luZG93KHtkaWFsb2c6e2Rlc3Ryb3lPbkhpZGU6ITB9LHRpdGxlOnQrIlx4M2MvZm9ybVx4M2VceDNjL2Rpdlx4M2UifSl9LFsibGlmZXJheS11dGlsLXdpbmRvdyJdKTtFLnByb3ZpZGUocSwic2VsZWN0ZWQiLGZ1bmN0aW9uKHQpe3Q9CnR8fHt9O3ZhciBmPXQub2JqO3Q9dC5wYW5lO2YmJmYuY2hlY2tlZCYmKHQ9YS5vbmUodCkpJiZ0LnNob3coKX0sWyJhdWktYmFzZSJdKTtFLkxheW91dEV4cG9ydGVyPXF9KShBVUkoKSxMaWZlcmF5KTsKQVVJLmFkZCgibGlmZXJheS1zZXNzaW9uIixmdW5jdGlvbihhKXt2YXIgRT1hLkxhbmcscT1bXSx0PWEuY29uZmlnLGY9dC5kb2MsZD17YWN0aXZlOiJhY3RpdmF0ZWQifSxjPXt9LGI9e3NyYzpjfSxnPXRoZW1lRGlzcGxheS5nZXRQYXRoTWFpbigpKyIvcG9ydGFsLyIsZT1hLkNvbXBvbmVudC5jcmVhdGUoe0FUVFJTOnthdXRvRXh0ZW5kOnt2YWx1ZTohMX0scmVkaXJlY3RPbkV4cGlyZTp7dmFsdWU6ITB9LHJlZGlyZWN0VXJsOnt2YWx1ZToiIn0sc2Vzc2lvbkxlbmd0aDp7Z2V0dGVyOiJfZ2V0TGVuZ3RoSW5NaWxsaXMiLHZhbHVlOjB9LHNlc3Npb25TdGF0ZTp7dmFsdWU6ImFjdGl2ZSJ9LHRpbWVzdGFtcDp7Z2V0dGVyOiJfZ2V0VGltZXN0YW1wIixzZXR0ZXI6Il9zZXRUaW1lc3RhbXAiLHZhbHVlOjB9LHdhcm5pbmdMZW5ndGg6e2dldHRlcjoiX2dldExlbmd0aEluTWlsbGlzIixzZXR0ZXI6Il9zZXRXYXJuaW5nTGVuZ3RoIix2YWx1ZTowfSx3YXJuaW5nVGltZTp7Z2V0dGVyOiJfZ2V0V2FybmluZ1RpbWUiLAp2YWx1ZTowfX0sRVhURU5EUzphLkJhc2UsTkFNRToibGlmZXJheXNlc3Npb24iLHByb3RvdHlwZTp7aW5pdGlhbGl6ZXI6ZnVuY3Rpb24obSl7dGhpcy5fY29va2llT3B0aW9ucz17cGF0aDoiLyIsc2VjdXJlOmEuVUEuc2VjdXJlfTt0aGlzLl9yZWdpc3RlcmVkPXt9O3RoaXMuc2V0KCJ0aW1lc3RhbXAiKTt0aGlzLl9pbml0RXZlbnRzKCk7dGhpcy5fc3RhcnRUaW1lcigpfSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7KG5ldyBhLkV2ZW50SGFuZGxlKHRoaXMuX2V2ZW50SGFuZGxlcnMpKS5kZXRhY2goKTt0aGlzLl9zdG9wVGltZXIoKX0sZXhwaXJlOmZ1bmN0aW9uKCl7dGhpcy5zZXQoInNlc3Npb25TdGF0ZSIsImV4cGlyZWQiLGIpfSxleHRlbmQ6ZnVuY3Rpb24oKXt0aGlzLnNldCgic2Vzc2lvblN0YXRlIiwiYWN0aXZlIixiKX0scmVnaXN0ZXJJbnRlcnZhbDpmdW5jdGlvbihtKXt2YXIgcCxzPXRoaXMuX3JlZ2lzdGVyZWQ7RS5pc0Z1bmN0aW9uKG0pJiYocD1hLnN0YW1wKG0pLHNbcF09Cm0pO3JldHVybiBwfSxyZXNldEludGVydmFsOmZ1bmN0aW9uKCl7dGhpcy5fc3RvcFRpbWVyKCk7dGhpcy5fc3RhcnRUaW1lcigpfSx1bnJlZ2lzdGVySW50ZXJ2YWw6ZnVuY3Rpb24obSl7dmFyIHA9dGhpcy5fcmVnaXN0ZXJlZDtwLmhhc093blByb3BlcnR5KG0pJiZkZWxldGUgcFttXTtyZXR1cm4gbX0sd2FybjpmdW5jdGlvbigpe3RoaXMuc2V0KCJzZXNzaW9uU3RhdGUiLCJ3YXJuZWQiLGIpfSxfYWZ0ZXJTZXNzaW9uU3RhdGVDaGFuZ2U6ZnVuY3Rpb24obSl7dmFyIHA9bS5kZXRhaWxzLHM9bS5uZXdWYWwsbD1udWxsOyJzcmMiaW4gbSYmcC5sZW5ndGgmJihsPXBbMF0pO3RoaXMuZmlyZShkW3NdfHxzLGwpfSxfZGVmQWN0aXZhdGVkRm46ZnVuY3Rpb24obSl7dGhpcy5zZXQoInRpbWVzdGFtcCIpO20uc3JjPT1jJiZ0aGlzLl9nZXRFeHRlbmRJTygpLnN0YXJ0KCl9LF9kZWZFeHBpcmVkRm46ZnVuY3Rpb24obSl7YS5jbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsSWQpO3RoaXMuc2V0KCJ0aW1lc3RhbXAiLAoiZXhwaXJlZCIpO20uc3JjPT09YyYmdGhpcy5fZ2V0RXhwaXJlSU8oKS5zdGFydCgpfSxfZ2V0RXhwaXJlSU86ZnVuY3Rpb24oKXt2YXIgbT10aGlzLHA9bS5fZXhwaXJlSU87cHx8KHA9YS5pby5yZXF1ZXN0KGcrImV4cGlyZV9zZXNzaW9uIix7YXV0b0xvYWQ6ITEsb246e2ZhaWx1cmU6ZnVuY3Rpb24ocyxsLGgpe20uX2V4cGlyZUlPPW51bGw7YS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bS5fZ2V0RXhwaXJlSU8oKS5zdGFydCgpfSwxRTMpfSxzdWNjZXNzOmZ1bmN0aW9uKHMsbCxoKXtMaWZlcmF5LmZpcmUoInNlc3Npb25FeHBpcmVkIik7bS5nZXQoInJlZGlyZWN0T25FeHBpcmUiKSYmKGxvY2F0aW9uLmhyZWY9bS5nZXQoInJlZGlyZWN0VXJsIikpfX19KSxtLl9leHBpcmVJTz1wKTtyZXR1cm4gcH0sX2dldEV4dGVuZElPOmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fZXh0ZW5kSU87bXx8KHRoaXMuX2V4dGVuZElPPW09YS5pby5yZXF1ZXN0KGcrImV4dGVuZF9zZXNzaW9uIix7YXV0b0xvYWQ6ITF9KSk7CnJldHVybiBtfSxfZ2V0TGVuZ3RoSW5NaWxsaXM6ZnVuY3Rpb24obSl7cmV0dXJuIDFFMyptfSxfZ2V0VGltZXN0YW1wOmZ1bmN0aW9uKG0pe3JldHVybiBhLkNvb2tpZS5nZXQodGhpcy5fY29va2llS2V5LHRoaXMuX2Nvb2tpZU9wdGlvbnMpfHx0aGlzLl9pbml0VGltZXN0YW1wfSxfZ2V0V2FybmluZ1RpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoInNlc3Npb25MZW5ndGgiKS10aGlzLmdldCgid2FybmluZ0xlbmd0aCIpfSxfaW5pdEV2ZW50czpmdW5jdGlvbigpe3ZhciBtPXRoaXM7bS5wdWJsaXNoKCJhY3RpdmF0ZWQiLHtkZWZhdWx0Rm46YS5iaW5kKCJfZGVmQWN0aXZhdGVkRm4iLG0pfSk7bS5wdWJsaXNoKCJleHBpcmVkIix7ZGVmYXVsdEZuOmEuYmluZCgiX2RlZkV4cGlyZWRGbiIsbSl9KTttLnB1Ymxpc2goIndhcm5lZCIpO20uX2V2ZW50SGFuZGxlcnM9W20ub24oInNlc3Npb25TdGF0ZUNoYW5nZSIsbS5fb25TZXNzaW9uU3RhdGVDaGFuZ2UpLG0uYWZ0ZXIoInNlc3Npb25TdGF0ZUNoYW5nZSIsCm0uX2FmdGVyU2Vzc2lvblN0YXRlQ2hhbmdlKSxhLm9uKCJpbzpjb21wbGV0ZSIsZnVuY3Rpb24ocCxzLGwpeyghbHx8bCYmbC5zZXNzaW9uRXh0ZW5kfHwhRS5pc0Jvb2xlYW4obC5zZXNzaW9uRXh0ZW5kKSkmJm0ucmVzZXRJbnRlcnZhbCgpfSksTGlmZXJheS5vbmNlKCJzY3JlZW5Mb2FkIixmdW5jdGlvbigpe20uZGVzdHJveSgpfSldfSxfb25TZXNzaW9uU3RhdGVDaGFuZ2U6ZnVuY3Rpb24obSl7dmFyIHA9bS5uZXdWYWwscz1tLnByZXZWYWw7ImV4cGlyZWQiPT1zJiZzIT1wP20ucHJldmVudERlZmF1bHQoKToiYWN0aXZlIj09cyYmcz09cCYmdGhpcy5fYWZ0ZXJTZXNzaW9uU3RhdGVDaGFuZ2UobSl9LF9zZXRUaW1lc3RhbXA6ZnVuY3Rpb24obSl7dGhpcy5faW5pdFRpbWVzdGFtcD1tPVN0cmluZyhtfHxEYXRlLm5vdygpKTtuYXZpZ2F0b3IuY29va2llRW5hYmxlZCYmYS5Db29raWUuc2V0KHRoaXMuX2Nvb2tpZUtleSxtLHRoaXMuX2Nvb2tpZU9wdGlvbnMpfSxfc2V0V2FybmluZ0xlbmd0aDpmdW5jdGlvbihtKXtyZXR1cm4gTWF0aC5taW4odGhpcy5nZXQoInNlc3Npb25MZW5ndGgiKSwKbSl9LF9zdGFydFRpbWVyOmZ1bmN0aW9uKCl7dmFyIG09dGhpcyxwPW0uZ2V0KCJzZXNzaW9uTGVuZ3RoIikscz1tLmdldCgid2FybmluZ1RpbWUiKSxsPW0uX3JlZ2lzdGVyZWQ7bS5faW50ZXJ2YWxJZD1hLnNldEludGVydmFsKGZ1bmN0aW9uKCl7dmFyIGgsdT1tLmdldCgidGltZXN0YW1wIik7aD1wO0UudG9JbnQodSk/aD0xRTMqTWF0aC5mbG9vcigoRGF0ZS5ub3coKS11KS8xRTMpOnU9ImV4cGlyZWQiO3ZhciB3PW0uZ2V0KCJhdXRvRXh0ZW5kIiksej0hMSxBPSExLEg9aD49cCxGPWg+PXM7RiYmKCJleHBpcmVkIj09dSYmKHo9ITAsdz0hMSxIPSEwKSx1PW0uZ2V0KCJzZXNzaW9uU3RhdGUiKSxIJiYiZXhwaXJlZCIhPXU/dz8oQT1GPUg9ej0hMSxtLmV4dGVuZCgpKToobS5leHBpcmUoKSx6PSEwKTohRnx8SHx8d3x8Indhcm5lZCI9PXV8fChtLndhcm4oKSxBPSEwKSk7Zm9yKHZhciBCIGluIGwpbFtCXShoLDFFMyxGLEgsQSx6KX0sMUUzKX0sX3N0b3BUaW1lcjpmdW5jdGlvbigpe2EuY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbElkKX0sCl9jb29raWVLZXk6IkxGUl9TRVNTSU9OX1NUQVRFXyIrdGhlbWVEaXNwbGF5LmdldFVzZXJJZCgpfX0pO2UuU1JDPWM7dmFyIGs9YS5Db21wb25lbnQuY3JlYXRlKHtBVFRSUzp7cGFnZVRpdGxlOnt2YWx1ZTpmLnRpdGxlfX0sRVhURU5EUzphLlBsdWdpbi5CYXNlLE5BTUU6ImxpZmVyYXlzZXNzaW9uZGlzcGxheSIsTlM6ImRpc3BsYXkiLHByb3RvdHlwZTp7aW5pdGlhbGl6ZXI6ZnVuY3Rpb24obSl7bT10aGlzLmdldCgiaG9zdCIpO0xpZmVyYXkuVXRpbC5nZXRUb3AoKT09dC53aW4/KHRoaXMuX2hvc3Q9bSx0aGlzLl90b2dnbGVUZXh0PXtoaWRlOidIaWRlJyxzaG93OidTaG93J30sdGhpcy5fZXhwaXJlZFRleHQ9J0R1ZVx4MjB0b1x4MjBpbmFjdGl2aXR5XHgyY1x4MjB5b3VyXHgyMHNlc3Npb25ceDIwaGFzXHgyMGV4cGlyZWRceDJlXHgyMFBsZWFzZVx4MjBzYXZlXHgyMGFueVx4MjBkYXRhXHgyMHlvdVx4MjBtYXlceDIwaGF2ZVx4MjBlbnRlcmVkXHgyMGJlZm9yZVx4MjByZWZyZXNoaW5nXHgyMHRoZVx4MjBwYWdlXHgyZScsdGhpcy5fd2FybmluZ1RleHQ9J0R1ZVx4MjB0b1x4MjBpbmFjdGl2aXR5XHgyY1x4MjB5b3VyXHgyMHNlc3Npb25ceDIwd2lsbFx4MjBleHBpcmVceDIwaW5ceDIwXHg3YjBceDdkXHgyZVx4MjBUb1x4MjBleHRlbmRceDIweW91clx4MjBzZXNzaW9uXHgyMGFub3RoZXJceDIwXHg3YjFceDdkXHgyMG1pbnV0ZVx4MjhzXHgyOVx4MmNceDIwcGxlYXNlXHgyMHByZXNzXHgyMHRoZVx4MjBceDNjZW1ceDNlRXh0ZW5kXHgzY1x4MmZlbVx4M2VceDIwYnV0dG9uXHgyZVx4MjBceDdiMlx4N2QnLAp0aGlzLl93YXJuaW5nVGV4dD1FLnN1Yih0aGlzLl93YXJuaW5nVGV4dCxbJ1x4M2NzcGFuIGNsYXNzXHgzZCJjb3VudGRvd24tdGltZXIiXHgzZXswfVx4M2Mvc3Bhblx4M2UnLG0uZ2V0KCJzZXNzaW9uTGVuZ3RoIikvNkU0LCdceDNjYSBjbGFzc1x4M2QiYWxlcnQtbGluayIgaHJlZlx4M2QiIyJceDNlJysnRXh0ZW5kJysiXHgzYy9hXHgzZSJdKSxtLm9uKCJzZXNzaW9uU3RhdGVDaGFuZ2UiLHRoaXMuX29uSG9zdFNlc3Npb25TdGF0ZUNoYW5nZSx0aGlzKSx0aGlzLmFmdGVySG9zdE1ldGhvZCgiX2RlZkFjdGl2YXRlZEZuIix0aGlzLl9hZnRlckRlZkFjdGl2YXRlZEZuKSx0aGlzLmFmdGVySG9zdE1ldGhvZCgiX2RlZkV4cGlyZWRGbiIsdGhpcy5fYWZ0ZXJEZWZFeHBpcmVkRm4pKTptLnVucGx1Zyh0aGlzKX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuX2Jhbm5lciYmdGhpcy5fYmFubmVyLmRlc3Ryb3koKX0sX2FmdGVyRGVmQWN0aXZhdGVkRm46ZnVuY3Rpb24obSl7dGhpcy5fdWlTZXRBY3RpdmF0ZWQoKX0sCl9hZnRlckRlZkV4cGlyZWRGbjpmdW5jdGlvbihtKXt0aGlzLl9ob3N0LnVucmVnaXN0ZXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbElkKTt0aGlzLl91aVNldEV4cGlyZWQoKX0sX2JlZm9yZUhvc3RXYXJuZWQ6ZnVuY3Rpb24obSl7dmFyIHA9dGhpczttPXAuX2hvc3Q7dmFyIHM9bS5nZXQoInNlc3Npb25MZW5ndGgiKSxsPW0uZ2V0KCJ0aW1lc3RhbXAiKSxoPW0uZ2V0KCJ3YXJuaW5nTGVuZ3RoIiksdT1zO0UudG9JbnQobCkmJih1PTFFMypNYXRoLmZsb29yKChEYXRlLm5vdygpLWwpLzFFMykpO3ZhciB3PXMtdTt3PmgmJih3PWgpO3ZhciB6PXAuX2dldEJhbm5lcigpLEE9ei5vbmUoIi5jb3VudGRvd24tdGltZXIiKTtwLl91aVNldFJlbWFpbmluZ1RpbWUodyxBKTt6LnNob3coKTtwLl9pbnRlcnZhbElkPW0ucmVnaXN0ZXJJbnRlcnZhbChmdW5jdGlvbihILEYsQixJLE0sRCl7Qj9JfHwoTSYmKDA+PXcmJih3PWgpLHouc2hvdygpKSxIPTFFMypNYXRoLmZsb29yKChEYXRlLm5vdygpLQpsKS8xRTMpLHc9cy1ILHAuX3VpU2V0UmVtYWluaW5nVGltZSh3LEEpKTpwLl91aVNldEFjdGl2YXRlZCgpO3ctPUZ9KX0sX2Zvcm1hdE51bWJlcjpmdW5jdGlvbihtKXtyZXR1cm4gRS5TdHJpbmcucGFkTnVtYmVyKE1hdGguZmxvb3IobSksMil9LF9mb3JtYXRUaW1lOmZ1bmN0aW9uKG0pe209TnVtYmVyKG0pO0UuaXNOdW1iZXIobSkmJjA8bT8obS89MUUzLHFbMF09dGhpcy5fZm9ybWF0TnVtYmVyKG0vMzYwMCksbSU9MzYwMCxxWzFdPXRoaXMuX2Zvcm1hdE51bWJlcihtLzYwKSxxWzJdPXRoaXMuX2Zvcm1hdE51bWJlcihtJTYwKSxtPXEuam9pbigiOiIpKTptPTA7cmV0dXJuIG19LF9nZXRCYW5uZXI6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLHA9bS5fYmFubmVyO3B8fChwPShuZXcgTGlmZXJheS5Ob3RpZmljYXRpb24oe2Nsb3NlYWJsZTohMCxkZWxheTp7aGlkZTowLHNob3c6MH0sZHVyYXRpb246NTAwLG1lc3NhZ2U6bS5fd2FybmluZ1RleHQsb246e2NsaWNrOmZ1bmN0aW9uKHMpe3MuZG9tRXZlbnQudGFyZ2V0LnRlc3QoIi5hbGVydC1saW5rIikmJgoocy5kb21FdmVudC5wcmV2ZW50RGVmYXVsdCgpLG0uX2hvc3QuZXh0ZW5kKCkpfX0sdGl0bGU6J1dhcm5pbmcnLHR5cGU6Indhcm5pbmcifSkpLnJlbmRlcigiYm9keSIpLG0uX2Jhbm5lcj1wKTtyZXR1cm4gcH0sX29uSG9zdFNlc3Npb25TdGF0ZUNoYW5nZTpmdW5jdGlvbihtKXsid2FybmVkIj09bS5uZXdWYWwmJnRoaXMuX2JlZm9yZUhvc3RXYXJuZWQobSl9LF91aVNldEFjdGl2YXRlZDpmdW5jdGlvbigpe2YudGl0bGU9dGhpcy5yZXNldCgicGFnZVRpdGxlIikuZ2V0KCJwYWdlVGl0bGUiKTt0aGlzLl9ob3N0LnVucmVnaXN0ZXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbElkKTt2YXIgbT10aGlzLl9nZXRCYW5uZXIoKTttJiZtLmhpZGUoKX0sX3VpU2V0RXhwaXJlZDpmdW5jdGlvbigpe3RoaXMuX2dldEJhbm5lcigpLnNldEF0dHJzKHttZXNzYWdlOnRoaXMuX2V4cGlyZWRUZXh0LHRpdGxlOidEYW5nZXInLAp0eXBlOiJkYW5nZXIifSk7Zi50aXRsZT10aGlzLmdldCgicGFnZVRpdGxlIil9LF91aVNldFJlbWFpbmluZ1RpbWU6ZnVuY3Rpb24obSxwKXt2YXIgcz10aGlzLl9nZXRCYW5uZXIoKTttPXRoaXMuX2Zvcm1hdFRpbWUobSk7cy5zZXQoIm1lc3NhZ2UiLEUuc3ViKHRoaXMuX3dhcm5pbmdUZXh0LFttXSkpO2YudGl0bGU9RS5zdWIoJ1Nlc3Npb25ceDIwZXhwaXJlc1x4MjBpblx4MjBceDdiMFx4N2RceDJlJyxbbV0pKyIgfCAiK3RoaXMuZ2V0KCJwYWdlVGl0bGUiKX19fSk7TGlmZXJheS5TZXNzaW9uQmFzZT1lO0xpZmVyYXkuU2Vzc2lvbkRpc3BsYXk9a30sIiIse3JlcXVpcmVzOlsiYXVpLWlvLXJlcXVlc3QiLCJhdWktdGltZXIiLCJjb29raWUiLCJsaWZlcmF5LW5vdGlmaWNhdGlvbiJdfSk7CihmdW5jdGlvbihhLEUpe3ZhciBxPUUubmFtZXNwYWNlKCJVdGlsIiksdD1hLkxhbmcsZj1hLkFycmF5LGQ9YS5PYmplY3QsYz1hLkxhbmcuU3RyaW5nLGI9W10sZz1bXSxlPXsnIic6Ilx4MjYjMDM0OyIsIlx4MjYiOiJceDI2YW1wOyIsIiciOiJceDI2IzAzOTsiLCIvIjoiXHgyNiMwNDc7IiwiXHgzYyI6Ilx4MjZsdDsiLCJceDNlIjoiXHgyNmd0OyIsImAiOiJceDI2IzA5NjsifSxrPXt9O2QuZWFjaChlLGZ1bmN0aW9uKGwsaCl7a1tsXT1oO2IucHVzaChsKTtnLnB1c2goaCl9KTt2YXIgbT0vLShbYS16XSkvZ2kscD1SZWdFeHAoIlsiK2cuam9pbigiIikrIl0iLCJnIikscz1SZWdFeHAoYi5qb2luKCJ8IiksImdpIik7cS5NQVBfSFRNTF9DSEFSU19FU0NBUEVEPWU7cS5hY3RzQXNBc3BlY3Q9ZnVuY3Rpb24obCl7bC55aWVsZD1udWxsO2wucnY9e307bC5iZWZvcmU9ZnVuY3Rpb24oaCx1KXt2YXIgdz1ldmFsKCJ0aGlzLiIraCk7dGhpc1toXT1mdW5jdGlvbigpe3UuYXBwbHkodGhpcywKYXJndW1lbnRzKTtyZXR1cm4gdy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTtsLmFmdGVyPWZ1bmN0aW9uKGgsdSl7dmFyIHc9ZXZhbCgidGhpcy4iK2gpO3RoaXNbaF09ZnVuY3Rpb24oKXt0aGlzLnJ2W2hdPXcuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O2wuYXJvdW5kPWZ1bmN0aW9uKGgsdSl7dmFyIHc9ZXZhbCgidGhpcy4iK2gpO3RoaXNbaF09ZnVuY3Rpb24oKXt0aGlzLnlpZWxkPXc7cmV0dXJuIHUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19O3EuYWRkSW5wdXRGb2N1cz1mdW5jdGlvbigpe2EudXNlKCJhdWktYmFzZSIsZnVuY3Rpb24obCl7dmFyIGg9ZnVuY3Rpb24odSl7dmFyIHc9dS50YXJnZXQsej13LmdldCgidGFnTmFtZSIpO3omJih6PXoudG9Mb3dlckNhc2UoKSk7dmFyIEE9dy5nZXQoInR5cGUiKTtpZigiaW5wdXQiPT16JiYvdGV4dHxwYXNzd29yZC8udGVzdChBKXx8InRleHRhcmVhIj09eil6PSJhZGRDbGFzcyIsCi9ibHVyfGZvY3Vzb3V0Ly50ZXN0KHUudHlwZSkmJih6PSJyZW1vdmVDbGFzcyIpLHdbel0oImZvY3VzIil9O2wub24oImZvY3VzIixoLGRvY3VtZW50KTtsLm9uKCJibHVyIixoLGRvY3VtZW50KX0pO3EuYWRkSW5wdXRGb2N1cz1mdW5jdGlvbigpe319O3EuYWRkSW5wdXRUeXBlPWZ1bmN0aW9uKGwpe3EuYWRkSW5wdXRUeXBlPXQuZW1wdHlGbjtFLkJyb3dzZXIuaXNJZSgpJiY3PkUuQnJvd3Nlci5nZXRNYWpvclZlcnNpb24oKSYmKHEuYWRkSW5wdXRUeXBlPWZ1bmN0aW9uKGgpe2g9aD9hLm9uZShoKTphLm9uZShkb2N1bWVudC5ib2R5KTtoLmFsbCgiaW5wdXQiKS5lYWNoKGZ1bmN0aW9uKHUsdyl7dmFyIHo9dS5nZXQoInR5cGUiKXx8InRleHQiO3UuYWRkQ2xhc3Moeil9KX0pO3JldHVybiBxLmFkZElucHV0VHlwZShsKX07cS5jYW1lbGl6ZT1mdW5jdGlvbihsLGgpe3ZhciB1PW07aCYmKHU9UmVnRXhwKGgrIihbYS16XSkiLCJnaSIpKTtyZXR1cm4gbD1sLnJlcGxhY2UodSxmdW5jdGlvbih3LAp6KXtyZXR1cm4gei50b1VwcGVyQ2FzZSgpfSl9O3EuY2xhbXA9ZnVuY3Rpb24obCxoLHUpe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChsLGgpLHUpfTtxLmVzY2FwZUhUTUw9ZnVuY3Rpb24obCxoLHUpe3ZhciB3PXAsej1bXSxBO3QuaXNPYmplY3QodSk/KEE9W10sZC5lYWNoKHUsZnVuY3Rpb24oSCxGKXt6LnB1c2goRik7QS5wdXNoKEgpfSksdz1SZWdFeHAoIlsiK2MuZXNjYXBlUmVnRXgoei5qb2luKCIiKSkrIl0iLCJnIikpOih1PWUsQT1iKTtyZXR1cm4gbC5yZXBsYWNlKHcsYS5iaW5kKCJfZXNjYXBlSFRNTCIscSwhIWgsdSxBKSl9O3EuaXNFZGl0b3JQcmVzZW50PWZ1bmN0aW9uKGwpe3JldHVybiBFLkVESVRPUlMmJkUuRURJVE9SU1tsXX07cS5yYW5kb21NaW5NYXg9ZnVuY3Rpb24obCxoKXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKihoLWwpKStsfTtxLnNlbGVjdEFuZENvcHk9ZnVuY3Rpb24obCl7bC5mb2N1cygpO2wuc2VsZWN0KCk7ZG9jdW1lbnQuYWxsJiYKbC5jcmVhdGVUZXh0UmFuZ2UoKS5leGVjQ29tbWFuZCgiY29weSIpfTtxLnNldEJveD1mdW5jdGlvbihsLGgpe2Zvcih2YXIgdT1sLmxlbmd0aC0xOy0xPHU7dS0tKWwub3B0aW9uc1t1XT1udWxsO2Zvcih1PTA7dTxoLmxlbmd0aDt1KyspbC5vcHRpb25zW3VdPW5ldyBPcHRpb24oaFt1XS52YWx1ZSx1KTtsLm9wdGlvbnNbMF0uc2VsZWN0ZWQ9ITB9O3Euc3RhcnRzV2l0aD1mdW5jdGlvbihsLGgpe3JldHVybiAwPT09bC5pbmRleE9mKGgpfTtxLnRleHRhcmVhVGFicz1mdW5jdGlvbihsKXt2YXIgaD1sLmN1cnJlbnRUYXJnZXQuZ2V0RE9NKCk7aWYobC5pc0tleSgiVEFCIikpe2wuaGFsdCgpO2w9aC5zY3JvbGxUb3A7aWYoaC5zZXRTZWxlY3Rpb25SYW5nZSl7dmFyIHU9aC5zZWxlY3Rpb25TdGFydCsxLHc9aC52YWx1ZTtoLnZhbHVlPXcuc3Vic3RyaW5nKDAsaC5zZWxlY3Rpb25TdGFydCkrIlx0Iit3LnN1YnN0cmluZyhoLnNlbGVjdGlvbkVuZCx3Lmxlbmd0aCk7c2V0VGltZW91dChmdW5jdGlvbigpe2guZm9jdXMoKTsKaC5zZXRTZWxlY3Rpb25SYW5nZSh1LHUpfSwwKX1lbHNlIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQ9Ilx0IjtoLnNjcm9sbFRvcD1sO3JldHVybiExfX07cS51bmNhbWVsaXplPWZ1bmN0aW9uKGwsaCl7aD1ofHwiICI7bD1sLnJlcGxhY2UoLyhbYS16QS1aXVthLXpBLVpdKShbQS1aXSkoW2Etel0pL2csIiQxIitoKyIkMiQzIik7cmV0dXJuIGw9bC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMSIraCsiJDIiKX07cS51bmVzY2FwZUhUTUw9ZnVuY3Rpb24obCxoKXt2YXIgdT1zLHc9aztpZihoKXt2YXIgej1bXSx3PXt9O2QuZWFjaChoLGZ1bmN0aW9uKEEsSCl7d1tBXT1IO3oucHVzaChBKX0pO3U9UmVnRXhwKHouam9pbigifCIpLCJnaSIpfXJldHVybiBsLnJlcGxhY2UodSxhLmJpbmQoIl91bmVzY2FwZUhUTUwiLHEsdykpfTtxLl9lc2NhcGVIVE1MPWZ1bmN0aW9uKGwsaCx1LHcpe3ZhciB6O2lmKGwpe3ZhciBBPWYoYXJndW1lbnRzKSxIPUEubGVuZ3RoLApGPUFbSC0yXSxBPUFbSC0xXSxIPUEuaW5kZXhPZigiOyIsRik7MDw9SCYmKEY9QS5zdWJzdHJpbmcoRixIKzEpLDA8PXUuaW5kZXhPZihGKSYmKHo9dykpfXp8fCh6PWhbd10pO3JldHVybiB6fTtxLl91bmVzY2FwZUhUTUw9ZnVuY3Rpb24obCxoKXtyZXR1cm4gbFtoXX07RS5wcm92aWRlKHEsImNoZWNrIixmdW5jdGlvbihsLGgsdSl7KGw9YS5vbmUobFtoXSkpJiZsLmF0dHIoImNoZWNrZWQiLHUpfSxbImF1aS1iYXNlIl0pO0UucHJvdmlkZShxLCJkaXNhYmxlU2VsZWN0Qm94ZXMiLGZ1bmN0aW9uKGwsaCx1KXt2YXIgdz1hLm9uZSgiIyIrdSksej1hLm9uZSgiIyIrbCk7aWYodyYmeil7dmFyIEE9dC5pc0Z1bmN0aW9uKGgpO2w9ZnVuY3Rpb24oKXt2YXIgSD13LnZhbCgpLEY9aD09SDtBJiYoRj1oKEgsaCkpO3ouYXR0cigiZGlzYWJsZWQiLCFGKX07bCgpO3cub24oImNoYW5nZSIsbCl9fSxbImF1aS1iYXNlIl0pO0UucHJvdmlkZShxLCJkaXNhYmxlVGV4dGFyZWFUYWJzIixmdW5jdGlvbihsKXsobD0KYS5vbmUobCkpJiYiZW5hYmxlZCIhPWwuYXR0cigidGV4dGFyZWF0YWJzIikmJihsLmF0dHIoInRleHRhcmVhdGFicyIsImRpc2FibGVkIiksbC5kZXRhY2goImtleWRvd24iLHEudGV4dGFyZWFUYWJzKSl9LFsiYXVpLWJhc2UiXSk7RS5wcm92aWRlKHEsImVuYWJsZVRleHRhcmVhVGFicyIsZnVuY3Rpb24obCl7KGw9YS5vbmUobCkpJiYiZW5hYmxlZCIhPWwuYXR0cigidGV4dGFyZWF0YWJzIikmJihsLmF0dHIoInRleHRhcmVhdGFicyIsImRpc2FibGVkIiksbC5vbigia2V5ZG93biIscS50ZXh0YXJlYVRhYnMpKX0sWyJhdWktYmFzZSJdKTtFLnByb3ZpZGUocSwicmVtb3ZlSXRlbSIsZnVuY3Rpb24obCxoKXtsPWEub25lKGwpO3ZhciB1PWwuZ2V0KCJzZWxlY3RlZEluZGV4Iik7aD9sLmFsbCgib3B0aW9uW3ZhbHVlXHgzZCIraCsiXSIpLml0ZW0odSkucmVtb3ZlKCEwKTpsLmFsbCgib3B0aW9uIikuaXRlbSh1KS5yZW1vdmUoITApfSxbImF1aS1iYXNlIl0pO0UucHJvdmlkZShxLAoicmVzaXplVGV4dGFyZWEiLGZ1bmN0aW9uKGwsaCl7dmFyIHU9YS5vbmUoIiMiK2wpO3V8fCh1PWEub25lKCJ0ZXh0YXJlYVtuYW1lXHgzZCIrbCsiXSIpKTtpZih1KXt2YXIgdz1hLmdldEJvZHkoKSx6LEE9ZnVuY3Rpb24oRil7dmFyIEI9dy5nZXQoIndpbkhlaWdodCIpO2lmKGgpdHJ5eyJpZnJhbWUiIT11LmdldCgibm9kZU5hbWUiKS50b0xvd2VyQ2FzZSgpJiYodT13aW5kb3dbbF0pfWNhdGNoKEkpe31pZigheil7dmFyIE09dy5vbmUoIi5idXR0b24taG9sZGVyIiksRD13Lm9uZSgiLmxmci10ZW1wbGF0ZS1lZGl0b3IiKTtNJiZEPyhEPUQuZ2V0WFkoKSx6PU0ub3V0ZXJIZWlnaHQoITApK0RbMV0rMjUpOno9MTcwfXU9YS5vbmUodSk7dmFyIEo9e3dpZHRoOiI5OCUifTtGJiYoSi5oZWlnaHQ9Qi16KTtpZighaHx8dSYmYS5ET00uaW5Eb2ModSkpdSYmdS5zZXRTdHlsZXMoSik7ZWxzZSBhLm9uKCJhdmFpbGFibGUiLGZ1bmN0aW9uKFApeyh1PWEub25lKHdpbmRvd1tsXSkpJiYKdS5zZXRTdHlsZXMoSil9LCIjIitsKyJfY3AiKX07QSgpO3ZhciBIPUUuVXRpbC5nZXRXaW5kb3coKTtIJiYoQT1ILmlmcmFtZS5hZnRlcigicmVzaXplaWZyYW1lOmhlaWdodENoYW5nZSIsQSksYS5nZXRXaW4oKS5vbigidW5sb2FkIixBLmRldGFjaCxBKSl9fSxbImF1aS1iYXNlIl0pO0UucHJvdmlkZShxLCJzZXRTZWxlY3RlZFZhbHVlIixmdW5jdGlvbihsLGgpe3ZhciB1PWEub25lKGwpLm9uZSgib3B0aW9uW3ZhbHVlXHgzZCIraCsiXSIpO3UmJnUuYXR0cigic2VsZWN0ZWQiLCEwKX0sWyJhdWktYmFzZSJdKTtFLnByb3ZpZGUocSwic3dpdGNoRWRpdG9yIixmdW5jdGlvbihsKXtsPWwudXJpO3ZhciBoPUUuVXRpbC5nZXRXaW5kb3dOYW1lKCk7KGg9RS5VdGlsLmdldFdpbmRvdyhoKSkmJmguaWZyYW1lLnNldCgidXJpIixsKX0sWyJhdWktaW8iXSl9KShBVUkoKSxMaWZlcmF5KTs=(Line 305)
Message:
Refused to load the script 'https://reliauscard.myvnc.com/combo/?browserId=other&minifierType=&languageId=en_US&b=7010&t=1634972436260&/o/frontend-js-metal-web/metal/src/coreNamed.js&/o/frontend-js-metal-web/metal/src/core.js&/o/frontend-js-metal-web/metal/src/array/array.js&/o/frontend-js-metal-web/metal/src/async/async.js&/o/frontend-js-metal-web/metal/src/disposable/Disposable.js&/o/frontend-js-metal-web/metal/src/object/object.js&/o/frontend-js-metal-web/metal/src/string/string.js&/o/frontend-js-metal-web/metal/src/metal.js&/o/fr...-js-metal-web/metal-uri/src/parseFromAnchor.js&/o/frontend-js-metal-web/metal-uri/src/parse.js&/o/frontend-js-metal-web/metal-structs/src/MultiMap.js&/o/frontend-js-metal-web/metal-structs/src/TreeNode.js&/o/frontend-js-metal-web/metal-structs/src/all/structs.js&/o/frontend-js-metal-web/metal-uri/src/Uri.js&/o/frontend-js-metal-web/metal-ajax/src/Ajax.js&/o/frontend-js-spa-web/senna/src/errors/errors.js&/o/frontend-js-spa-web/senna/src/utils/utils.js&/o/frontend-js-spa-web/senna/src/cacheable/Cacheable.js' because it violates the following Content Security Policy directive: "script-src 'unsafe-inline' data:". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
security error URL: data:text/javascript;base64,Ly8xNjM0MzY3NDM3NjMxCi8qCgogbG9kYXNoIDMuMTAuMSAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KIEJ1aWxkOiBgbG9kYXNoIG1vZGVybiAtbyAuL2xvZGFzaC5qc2AKIENvcHlyaWdodCAyMDEyLTIwMTUgVGhlIERvam8gRm91bmRhdGlvbiA8aHR0cDovL2Rvam9mb3VuZGF0aW9uLm9yZy8+CiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPgogQ29weXJpZ2h0IDIwMDktMjAxNSBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT4KKi8KKGZ1bmN0aW9uKGEsRSl7Im9iamVjdCI9PT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1hLmRvY3VtZW50P0UoYSwhMCk6ZnVuY3Rpb24ocSl7aWYoIXEuZG9jdW1lbnQpdGhyb3cgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTtyZXR1cm4gRShxKX06RShhKX0pKCJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEocix5LEMpe0M9Q3x8U2E7dmFyIEssTj1DLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO04udGV4dD1yO2lmKHkpZm9yKEsgaW4gSmUpKHI9eVtLXXx8eS5nZXRBdHRyaWJ1dGUmJnkuZ2V0QXR0cmlidXRlKEspKSYmTi5zZXRBdHRyaWJ1dGUoSyxyKTtDLmhlYWQuYXBwZW5kQ2hpbGQoTikucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChOKX1mdW5jdGlvbiB0KHIpe3JldHVybiBudWxsPT1yP3IrIiI6Im9iamVjdCI9PT0KdHlwZW9mIHJ8fCJmdW5jdGlvbiI9PT10eXBlb2Ygcj9sZFtXZC5jYWxsKHIpXXx8Im9iamVjdCI6dHlwZW9mIHJ9ZnVuY3Rpb24gZihyKXt2YXIgeT0hIXImJiJsZW5ndGgiaW4gciYmci5sZW5ndGgsQz10KHIpO3JldHVybiBWYShyKXx8UGMocik/ITE6ImFycmF5Ij09PUN8fDA9PT15fHwibnVtYmVyIj09PXR5cGVvZiB5JiYwPHkmJnktMSBpbiByfWZ1bmN0aW9uIGQocix5KXtyZXR1cm4gci5ub2RlTmFtZSYmci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGMocix5LEMpe3JldHVybiBWYSh5KT9MLmdyZXAocixmdW5jdGlvbihLLE4pe3JldHVybiEheS5jYWxsKEssTixLKSE9PUN9KTp5Lm5vZGVUeXBlP0wuZ3JlcChyLGZ1bmN0aW9uKEspe3JldHVybiBLPT09eSE9PUN9KToic3RyaW5nIiE9PXR5cGVvZiB5P0wuZ3JlcChyLGZ1bmN0aW9uKEspe3JldHVybi0xPFFjLmNhbGwoeSxLKSE9PUN9KTpMLmZpbHRlcih5LHIsQyl9ZnVuY3Rpb24gYihyLAp5KXtmb3IoOyhyPXJbeV0pJiYxIT09ci5ub2RlVHlwZTspO3JldHVybiByfWZ1bmN0aW9uIGcocil7dmFyIHk9e307TC5lYWNoKHIubWF0Y2goaGMpfHxbXSxmdW5jdGlvbihDLEspe3lbS109ITB9KTtyZXR1cm4geX1mdW5jdGlvbiBlKHIpe3JldHVybiByfWZ1bmN0aW9uIGsocil7dGhyb3cgcjt9ZnVuY3Rpb24gbShyLHksQyxLKXt2YXIgTjt0cnl7ciYmVmEoTj1yLnByb21pc2UpP04uY2FsbChyKS5kb25lKHkpLmZhaWwoQyk6ciYmVmEoTj1yLnRoZW4pP04uY2FsbChyLHksQyk6eS5hcHBseSh2b2lkIDAsW3JdLnNsaWNlKEspKX1jYXRjaChRKXtDLmFwcGx5KHZvaWQgMCxbUV0pfX1mdW5jdGlvbiBwKCl7U2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIscCk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixwKTtMLnJlYWR5KCl9ZnVuY3Rpb24gcyhyLHkpe3JldHVybiB5LnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gbChyKXtyZXR1cm4gci5yZXBsYWNlKEtlLAoibXMtIikucmVwbGFjZShMZSxzKX1mdW5jdGlvbiBoKCl7dGhpcy5leHBhbmRvPUwuZXhwYW5kbytoLnVpZCsrfWZ1bmN0aW9uIHUocix5LEMpe2lmKHZvaWQgMD09PUMmJjE9PT1yLm5vZGVUeXBlKWlmKEM9ImRhdGEtIit5LnJlcGxhY2UoTWUsIi0kXHgyNiIpLnRvTG93ZXJDYXNlKCksQz1yLmdldEF0dHJpYnV0ZShDKSwic3RyaW5nIj09PXR5cGVvZiBDKXt0cnl7Qz0idHJ1ZSI9PT1DPyEwOiJmYWxzZSI9PT1DPyExOiJudWxsIj09PUM/bnVsbDpDPT09K0MrIiI/K0M6cGIudGVzdChDKT9KU09OLnBhcnNlKEMpOkN9Y2F0Y2goSyl7fVhhLnNldChyLHksQyl9ZWxzZSBDPXZvaWQgMDtyZXR1cm4gQ31mdW5jdGlvbiB3KHIseSxDLEspe3ZhciBOLFEsUz0yMCxiYT1LP2Z1bmN0aW9uKCl7cmV0dXJuIEsuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIEwuY3NzKHIseSwiIil9LCQ9YmEoKSxqYT1DJiZDWzNdfHwoTC5jc3NOdW1iZXJbeV0/IiI6InB4Iiksc2E9ci5ub2RlVHlwZSYmKEwuY3NzTnVtYmVyW3ldfHwKInB4IiE9PWphJiYrJCkmJldjLmV4ZWMoTC5jc3Mocix5KSk7aWYoc2EmJnNhWzNdIT09amEpeyQvPTI7amE9amF8fHNhWzNdO2ZvcihzYT0rJHx8MTtTLS07KUwuc3R5bGUocix5LHNhK2phKSwwPj0oMS1RKSooMS0oUT1iYSgpLyR8fDAuNSkpJiYoUz0wKSxzYS89UTtzYSo9MjtMLnN0eWxlKHIseSxzYStqYSk7Qz1DfHxbXX1DJiYoc2E9K3NhfHwrJHx8MCxOPUNbMV0/c2ErKENbMV0rMSkqQ1syXTorQ1syXSxLJiYoSy51bml0PWphLEsuc3RhcnQ9c2EsSy5lbmQ9TikpO3JldHVybiBOfWZ1bmN0aW9uIHoocix5KXtmb3IodmFyIEMsSyxOPVtdLFE9MCxTPXIubGVuZ3RoO1E8UztRKyspaWYoSz1yW1FdLEsuc3R5bGUpaWYoQz1LLnN0eWxlLmRpc3BsYXkseSl7aWYoIm5vbmUiPT09QyYmKE5bUV09S2EuZ2V0KEssImRpc3BsYXkiKXx8bnVsbCxOW1FdfHwoSy5zdHlsZS5kaXNwbGF5PSIiKSksIiI9PT1LLnN0eWxlLmRpc3BsYXkmJnRjKEspKXtDPU47dmFyIGJhPVE7dmFyICQ9dm9pZCAwLAokPUsub3duZXJEb2N1bWVudDtLPUsubm9kZU5hbWU7dmFyIGphPXpkW0tdO2phfHwoJD0kLmJvZHkuYXBwZW5kQ2hpbGQoJC5jcmVhdGVFbGVtZW50KEspKSxqYT1MLmNzcygkLCJkaXNwbGF5IiksJC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCQpLCJub25lIj09PWphJiYoamE9ImJsb2NrIiksemRbS109amEpO0s9amE7Q1tiYV09S319ZWxzZSJub25lIiE9PUMmJihOW1FdPSJub25lIixLYS5zZXQoSywiZGlzcGxheSIsQykpO2ZvcihRPTA7UTxTO1ErKyludWxsIT1OW1FdJiYocltRXS5zdHlsZS5kaXNwbGF5PU5bUV0pO3JldHVybiByfWZ1bmN0aW9uIEEocix5KXt2YXIgQztDPSJ1bmRlZmluZWQiIT09dHlwZW9mIHIuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ci5nZXRFbGVtZW50c0J5VGFnTmFtZSh5fHwiKiIpOiJ1bmRlZmluZWQiIT09dHlwZW9mIHIucXVlcnlTZWxlY3RvckFsbD9yLnF1ZXJ5U2VsZWN0b3JBbGwoeXx8IioiKTpbXTtyZXR1cm4gdm9pZCAwPT09eXx8eSYmZChyLHkpPwpMLm1lcmdlKFtyXSxDKTpDfWZ1bmN0aW9uIEgocix5KXtmb3IodmFyIEM9MCxLPXIubGVuZ3RoO0M8SztDKyspS2Euc2V0KHJbQ10sImdsb2JhbEV2YWwiLCF5fHxLYS5nZXQoeVtDXSwiZ2xvYmFsRXZhbCIpKX1mdW5jdGlvbiBGKHIseSxDLEssTil7Zm9yKHZhciBRLFMsYmEsJD15LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxqYT1bXSxzYT0wLHphPXIubGVuZ3RoO3NhPHphO3NhKyspaWYoKFE9cltzYV0pfHwwPT09USlpZigib2JqZWN0Ij09PXQoUSkpTC5tZXJnZShqYSxRLm5vZGVUeXBlP1tRXTpRKTtlbHNlIGlmKFQudGVzdChRKSl7Uz1TfHwkLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgiZGl2IikpO2JhPShpYy5leGVjKFEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpO2JhPXJhW2JhXXx8cmEuX2RlZmF1bHQ7Uy5pbm5lckhUTUw9YmFbMV0rTC5odG1sUHJlZmlsdGVyKFEpK2JhWzJdO2ZvcihiYT1iYVswXTtiYS0tOylTPVMubGFzdENoaWxkO0wubWVyZ2UoamEsClMuY2hpbGROb2Rlcyk7Uz0kLmZpcnN0Q2hpbGQ7Uy50ZXh0Q29udGVudD0iIn1lbHNlIGphLnB1c2goeS5jcmVhdGVUZXh0Tm9kZShRKSk7JC50ZXh0Q29udGVudD0iIjtmb3Ioc2E9MDtRPWphW3NhKytdOylpZihLJiYtMTxMLmluQXJyYXkoUSxLKSlOJiZOLnB1c2goUSk7ZWxzZSBpZihyPXpjKFEpLFM9QSgkLmFwcGVuZENoaWxkKFEpLCJzY3JpcHQiKSxyJiZIKFMpLEMpZm9yKGJhPTA7UT1TW2JhKytdOylBYy50ZXN0KFEudHlwZXx8IiIpJiZDLnB1c2goUSk7cmV0dXJuICR9ZnVuY3Rpb24gQigpe3JldHVybiEwfWZ1bmN0aW9uIEkoKXtyZXR1cm4hMX1mdW5jdGlvbiBNKHIseSl7dmFyIEM7YTp7dHJ5e0M9U2EuYWN0aXZlRWxlbWVudDticmVhayBhfWNhdGNoKEspe31DPXZvaWQgMH1yZXR1cm4gcj09PUM9PT0oImZvY3VzIj09PXkpfWZ1bmN0aW9uIEQocix5LEMsSyxOLFEpe3ZhciBTLGJhO2lmKCJvYmplY3QiPT09dHlwZW9mIHkpeyJzdHJpbmciIT09dHlwZW9mIEMmJihLPQpLfHxDLEM9dm9pZCAwKTtmb3IoYmEgaW4geSlEKHIsYmEsQyxLLHlbYmFdLFEpO3JldHVybiByfW51bGw9PUsmJm51bGw9PU4/KE49QyxLPUM9dm9pZCAwKTpudWxsPT1OJiYoInN0cmluZyI9PT10eXBlb2YgQz8oTj1LLEs9dm9pZCAwKTooTj1LLEs9QyxDPXZvaWQgMCkpO2lmKCExPT09TilOPUk7ZWxzZSBpZighTilyZXR1cm4gcjsxPT09USYmKFM9TixOPWZ1bmN0aW9uKCQpe0woKS5vZmYoJCk7cmV0dXJuIFMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxOLmd1aWQ9Uy5ndWlkfHwoUy5ndWlkPUwuZ3VpZCsrKSk7cmV0dXJuIHIuZWFjaChmdW5jdGlvbigpe0wuZXZlbnQuYWRkKHRoaXMseSxOLEssQyl9KX1mdW5jdGlvbiBKKHIseSxDKXtDPyhLYS5zZXQocix5LCExKSxMLmV2ZW50LmFkZChyLHkse25hbWVzcGFjZTohMSxoYW5kbGVyOmZ1bmN0aW9uKEspe3ZhciBOLFEsUz1LYS5nZXQodGhpcyx5KTtpZihLLmlzVHJpZ2dlciYxJiZ0aGlzW3ldKWlmKFMpKEwuZXZlbnQuc3BlY2lhbFt5XXx8Cnt9KS5kZWxlZ2F0ZVR5cGUmJksuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZXtpZihTPVliLmNhbGwoYXJndW1lbnRzKSxLYS5zZXQodGhpcyx5LFMpLE49Qyh0aGlzLHkpLHRoaXNbeV0oKSxRPUthLmdldCh0aGlzLHkpLFMhPT1RfHxOP0thLnNldCh0aGlzLHksITEpOlE9dm9pZCAwLFMhPT1RKXJldHVybiBLLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLEsucHJldmVudERlZmF1bHQoKSxRfWVsc2UgUyYmKEthLnNldCh0aGlzLHksTC5ldmVudC50cmlnZ2VyKEwuZXh0ZW5kKFMuc2hpZnQoKSxMLkV2ZW50LnByb3RvdHlwZSksUyx0aGlzKSksSy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSkpOkwuZXZlbnQuYWRkKHIseSxCKX1mdW5jdGlvbiBQKHIseSl7cmV0dXJuIGQociwidGFibGUiKSYmZCgxMSE9PXkubm9kZVR5cGU/eTp5LmZpcnN0Q2hpbGQsInRyIik/TChyKS5jaGlsZHJlbigidGJvZHkiKVswXXx8cjpyfWZ1bmN0aW9uIFYocil7ci50eXBlPShudWxsIT09ci5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrCiIvIityLnR5cGU7cmV0dXJuIHJ9ZnVuY3Rpb24gWShyKXsidHJ1ZS8iPT09KHIudHlwZXx8IiIpLnNsaWNlKDAsNSk/ci50eXBlPXIudHlwZS5zbGljZSg1KTpyLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpO3JldHVybiByfWZ1bmN0aW9uIG5hKHIseSl7dmFyIEMsSyxOLFE7aWYoMT09PXkubm9kZVR5cGUpe2lmKEthLmhhc0RhdGEocikmJihRPUthLmFjY2VzcyhyKSxDPUthLnNldCh5LFEpLFE9US5ldmVudHMpKWZvcihOIGluIGRlbGV0ZSBDLmhhbmRsZSxDLmV2ZW50cz17fSxRKWZvcihDPTAsSz1RW05dLmxlbmd0aDtDPEs7QysrKUwuZXZlbnQuYWRkKHksTixRW05dW0NdKTtYYS5oYXNEYXRhKHIpJiYoTj1YYS5hY2Nlc3MociksTj1MLmV4dGVuZCh7fSxOKSxYYS5zZXQoeSxOKSl9fWZ1bmN0aW9uIGZhKHIseSxDLEspe3k9QmMuYXBwbHkoW10seSk7dmFyIE4sUSxTLGJhLCQ9MCxqYT1yLmxlbmd0aCxzYT1qYS0xLHphPXlbMF0saGE9VmEoemEpO2lmKGhhfHwxPGphJiYic3RyaW5nIj09PQp0eXBlb2YgemEmJiFrYi5jaGVja0Nsb25lJiZ1Yy50ZXN0KHphKSlyZXR1cm4gci5lYWNoKGZ1bmN0aW9uKE1hKXt2YXIgUmE9ci5lcShNYSk7aGEmJih5WzBdPXphLmNhbGwodGhpcyxNYSxSYS5odG1sKCkpKTtmYShSYSx5LEMsSyl9KTtpZihqYSYmKE49Rih5LHJbMF0ub3duZXJEb2N1bWVudCwhMSxyLEspLFE9Ti5maXJzdENoaWxkLDE9PT1OLmNoaWxkTm9kZXMubGVuZ3RoJiYoTj1RKSxRfHxLKSl7UT1MLm1hcChBKE4sInNjcmlwdCIpLFYpO2ZvcihTPVEubGVuZ3RoOyQ8amE7JCsrKWJhPU4sJCE9PXNhJiYoYmE9TC5jbG9uZShiYSwhMCwhMCksUyYmTC5tZXJnZShRLEEoYmEsInNjcmlwdCIpKSksQy5jYWxsKHJbJF0sYmEsJCk7aWYoUylmb3IoTj1RW1EubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsTC5tYXAoUSxZKSwkPTA7JDxTOyQrKyliYT1RWyRdLEFjLnRlc3QoYmEudHlwZXx8IiIpJiYhS2EuYWNjZXNzKGJhLCJnbG9iYWxFdmFsIikmJkwuY29udGFpbnMoTixiYSkmJihiYS5zcmMmJgoibW9kdWxlIiE9PShiYS50eXBlfHwiIikudG9Mb3dlckNhc2UoKT9MLl9ldmFsVXJsJiYhYmEubm9Nb2R1bGUmJkwuX2V2YWxVcmwoYmEuc3JjLHtub25jZTpiYS5ub25jZXx8YmEuZ2V0QXR0cmlidXRlKCJub25jZSIpfSk6cShiYS50ZXh0Q29udGVudC5yZXBsYWNlKExiLCIiKSxiYSxOKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaWEocix5LEMpe2Zvcih2YXIgSz15P0wuZmlsdGVyKHkscik6cixOPTA7bnVsbCE9KHk9S1tOXSk7TisrKUN8fDEhPT15Lm5vZGVUeXBlfHxMLmNsZWFuRGF0YShBKHkpKSx5LnBhcmVudE5vZGUmJihDJiZ6Yyh5KSYmSChBKHksInNjcmlwdCIpKSx5LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoeSkpO3JldHVybiByfWZ1bmN0aW9uIFoocix5LEMpe3ZhciBLLE4sUT1yLnN0eWxlO2lmKEM9Q3x8WGMocikpTj1DLmdldFByb3BlcnR5VmFsdWUoeSl8fENbeV0sIiIhPT1OfHx6YyhyKXx8KE49TC5zdHlsZShyLHkpKSwha2IucGl4ZWxCb3hTdHlsZXMoKSYmVmIudGVzdChOKSYmCkFkLnRlc3QoeSkmJihyPVEud2lkdGgseT1RLm1pbldpZHRoLEs9US5tYXhXaWR0aCxRLm1pbldpZHRoPVEubWF4V2lkdGg9US53aWR0aD1OLE49Qy53aWR0aCxRLndpZHRoPXIsUS5taW5XaWR0aD15LFEubWF4V2lkdGg9Syk7cmV0dXJuIHZvaWQgMCE9PU4/TisiIjpOfWZ1bmN0aW9uIGVhKHIseSl7cmV0dXJue2dldDpmdW5jdGlvbigpe2lmKHIoKSlkZWxldGUgdGhpcy5nZXQ7ZWxzZSByZXR1cm4odGhpcy5nZXQ9eSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19ZnVuY3Rpb24gb2Eocil7dmFyIHk9TC5jc3NQcm9wc1tyXXx8QmRbcl07aWYoeSlyZXR1cm4geTtpZihyIGluIFJjKXJldHVybiByO3ZhciB5PUJkLEM7YTp7Qz1yO2Zvcih2YXIgSz1DWzBdLnRvVXBwZXJDYXNlKCkrQy5zbGljZSgxKSxOPUNjLmxlbmd0aDtOLS07KWlmKEM9Q2NbTl0rSyxDIGluIFJjKWJyZWFrIGE7Qz12b2lkIDB9cmV0dXJuIHlbcl09Q3x8cn1mdW5jdGlvbiBBYShyLHksQyl7cmV0dXJuKHI9V2MuZXhlYyh5KSk/Ck1hdGgubWF4KDAsclsyXS0oQ3x8MCkpKyhyWzNdfHwicHgiKTp5fWZ1bmN0aW9uIHBhKHIseSxDLEssTixRKXt2YXIgUz0id2lkdGgiPT09eT8xOjAsYmE9MCwkPTA7aWYoQz09PShLPyJib3JkZXIiOiJjb250ZW50IikpcmV0dXJuIDA7Zm9yKDs0PlM7Uys9MikibWFyZ2luIj09PUMmJigkKz1MLmNzcyhyLEMrWmJbU10sITAsTikpLEs/KCJjb250ZW50Ij09PUMmJigkLT1MLmNzcyhyLCJwYWRkaW5nIitaYltTXSwhMCxOKSksIm1hcmdpbiIhPT1DJiYoJC09TC5jc3MociwiYm9yZGVyIitaYltTXSsiV2lkdGgiLCEwLE4pKSk6KCQrPUwuY3NzKHIsInBhZGRpbmciK1piW1NdLCEwLE4pLCJwYWRkaW5nIiE9PUM/JCs9TC5jc3MociwiYm9yZGVyIitaYltTXSsiV2lkdGgiLCEwLE4pOmJhKz1MLmNzcyhyLCJib3JkZXIiK1piW1NdKyJXaWR0aCIsITAsTikpOyFLJiYwPD1RJiYoJCs9TWF0aC5tYXgoMCxNYXRoLmNlaWwoclsib2Zmc2V0Iit5WzBdLnRvVXBwZXJDYXNlKCkreS5zbGljZSgxKV0tClEtJC1iYS0wLjUpKXx8MCk7cmV0dXJuICR9ZnVuY3Rpb24gRmEocix5LEMpe3ZhciBLPVhjKHIpLE49KCFrYi5ib3hTaXppbmdSZWxpYWJsZSgpfHxDKSYmImJvcmRlci1ib3giPT09TC5jc3MociwiYm94U2l6aW5nIiwhMSxLKSxRPU4sUz1aKHIseSxLKSxiYT0ib2Zmc2V0Iit5WzBdLnRvVXBwZXJDYXNlKCkreS5zbGljZSgxKTtpZihWYi50ZXN0KFMpKXtpZighQylyZXR1cm4gUztTPSJhdXRvIn0oIWtiLmJveFNpemluZ1JlbGlhYmxlKCkmJk58fCJhdXRvIj09PVN8fCFwYXJzZUZsb2F0KFMpJiYiaW5saW5lIj09PUwuY3NzKHIsImRpc3BsYXkiLCExLEspKSYmci5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmKE49ImJvcmRlci1ib3giPT09TC5jc3MociwiYm94U2l6aW5nIiwhMSxLKSwoUT1iYSBpbiByKSYmKFM9cltiYV0pKTtTPXBhcnNlRmxvYXQoUyl8fDA7cmV0dXJuIFMrcGEocix5LEN8fChOPyJib3JkZXIiOiJjb250ZW50IiksUSxLLFMpKyJweCJ9ZnVuY3Rpb24gRWEociwKeSxDLEssTil7cmV0dXJuIG5ldyBFYS5wcm90b3R5cGUuaW5pdChyLHksQyxLLE4pfWZ1bmN0aW9uIFdhKCl7WWMmJighMT09PVNhLmhpZGRlbiYmYS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/YS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoV2EpOmEuc2V0VGltZW91dChXYSxMLmZ4LmludGVydmFsKSxMLmZ4LnRpY2soKSl9ZnVuY3Rpb24gVWEoKXthLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtEYz12b2lkIDB9KTtyZXR1cm4gRGM9RGF0ZS5ub3coKX1mdW5jdGlvbiB3YihyLHkpe3ZhciBDLEs9MCxOPXtoZWlnaHQ6cn07Zm9yKHk9eT8xOjA7ND5LO0srPTIteSlDPVpiW0tdLE5bIm1hcmdpbiIrQ109TlsicGFkZGluZyIrQ109cjt5JiYoTi5vcGFjaXR5PU4ud2lkdGg9cik7cmV0dXJuIE59ZnVuY3Rpb24gQWIocix5LEMpe2Zvcih2YXIgSyxOPShnYS50d2VlbmVyc1t5XXx8W10pLmNvbmNhdChnYS50d2VlbmVyc1siKiJdKSxRPTAsUz1OLmxlbmd0aDtRPFM7USsrKWlmKEs9TltRXS5jYWxsKEMsCnkscikpcmV0dXJuIEt9ZnVuY3Rpb24gTWIocix5KXt2YXIgQyxLLE4sUSxTO2ZvcihDIGluIHIpaWYoSz1sKEMpLE49eVtLXSxRPXJbQ10sQXJyYXkuaXNBcnJheShRKSYmKE49UVsxXSxRPXJbQ109UVswXSksQyE9PUsmJihyW0tdPVEsZGVsZXRlIHJbQ10pLChTPUwuY3NzSG9va3NbS10pJiYiZXhwYW5kImluIFMpZm9yKEMgaW4gUT1TLmV4cGFuZChRKSxkZWxldGUgcltLXSxRKUMgaW4gcnx8KHJbQ109UVtDXSx5W0NdPU4pO2Vsc2UgeVtLXT1OfWZ1bmN0aW9uIGdhKHIseSxDKXt2YXIgSyxOPTAsUT1nYS5wcmVmaWx0ZXJzLmxlbmd0aCxTPUwuRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgYmEuZWxlbX0pLGJhPWZ1bmN0aW9uKCl7aWYoSylyZXR1cm4hMTtmb3IodmFyIGphPURjfHxVYSgpLGphPU1hdGgubWF4KDAsJC5zdGFydFRpbWUrJC5kdXJhdGlvbi1qYSksc2E9MS0oamEvJC5kdXJhdGlvbnx8MCksemE9MCxoYT0kLnR3ZWVucy5sZW5ndGg7emE8aGE7emErKykkLnR3ZWVuc1t6YV0ucnVuKHNhKTsKUy5ub3RpZnlXaXRoKHIsWyQsc2EsamFdKTtpZigxPnNhJiZoYSlyZXR1cm4gamE7aGF8fFMubm90aWZ5V2l0aChyLFskLDEsMF0pO1MucmVzb2x2ZVdpdGgocixbJF0pO3JldHVybiExfSwkPVMucHJvbWlzZSh7ZWxlbTpyLHByb3BzOkwuZXh0ZW5kKHt9LHkpLG9wdHM6TC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOkwuZWFzaW5nLl9kZWZhdWx0fSxDKSxvcmlnaW5hbFByb3BlcnRpZXM6eSxvcmlnaW5hbE9wdGlvbnM6QyxzdGFydFRpbWU6RGN8fFVhKCksZHVyYXRpb246Qy5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oamEsc2Epe3ZhciB6YT1MLlR3ZWVuKHIsJC5vcHRzLGphLHNhLCQub3B0cy5zcGVjaWFsRWFzaW5nW2phXXx8JC5vcHRzLmVhc2luZyk7JC50d2VlbnMucHVzaCh6YSk7cmV0dXJuIHphfSxzdG9wOmZ1bmN0aW9uKGphKXt2YXIgc2E9MCx6YT1qYT8kLnR3ZWVucy5sZW5ndGg6MDtpZihLKXJldHVybiB0aGlzO2ZvcihLPQohMDtzYTx6YTtzYSsrKSQudHdlZW5zW3NhXS5ydW4oMSk7amE/KFMubm90aWZ5V2l0aChyLFskLDEsMF0pLFMucmVzb2x2ZVdpdGgocixbJCxqYV0pKTpTLnJlamVjdFdpdGgocixbJCxqYV0pO3JldHVybiB0aGlzfX0pO0M9JC5wcm9wcztmb3IoTWIoQywkLm9wdHMuc3BlY2lhbEVhc2luZyk7TjxRO04rKylpZih5PWdhLnByZWZpbHRlcnNbTl0uY2FsbCgkLHIsQywkLm9wdHMpKXJldHVybiBWYSh5LnN0b3ApJiYoTC5fcXVldWVIb29rcygkLmVsZW0sJC5vcHRzLnF1ZXVlKS5zdG9wPXkuc3RvcC5iaW5kKHkpKSx5O0wubWFwKEMsQWIsJCk7VmEoJC5vcHRzLnN0YXJ0KSYmJC5vcHRzLnN0YXJ0LmNhbGwociwkKTskLnByb2dyZXNzKCQub3B0cy5wcm9ncmVzcykuZG9uZSgkLm9wdHMuZG9uZSwkLm9wdHMuY29tcGxldGUpLmZhaWwoJC5vcHRzLmZhaWwpLmFsd2F5cygkLm9wdHMuYWx3YXlzKTtMLmZ4LnRpbWVyKEwuZXh0ZW5kKGJhLHtlbGVtOnIsYW5pbTokLHF1ZXVlOiQub3B0cy5xdWV1ZX0pKTsKcmV0dXJuICR9ZnVuY3Rpb24gdGEocil7cmV0dXJuKHIubWF0Y2goaGMpfHxbXSkuam9pbigiICIpfWZ1bmN0aW9uIHFhKHIpe3JldHVybiByLmdldEF0dHJpYnV0ZSYmci5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIifWZ1bmN0aW9uIHdhKHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpP3I6InN0cmluZyI9PT10eXBlb2Ygcj9yLm1hdGNoKGhjKXx8W106W119ZnVuY3Rpb24gSmEocix5LEMsSyl7dmFyIE47aWYoQXJyYXkuaXNBcnJheSh5KSlMLmVhY2goeSxmdW5jdGlvbihRLFMpe0N8fEVjLnRlc3Qocik/SyhyLFMpOkphKHIrIlsiKygib2JqZWN0Ij09PXR5cGVvZiBTJiZudWxsIT1TP1E6IiIpKyJdIixTLEMsSyl9KTtlbHNlIGlmKEN8fCJvYmplY3QiIT09dCh5KSlLKHIseSk7ZWxzZSBmb3IoTiBpbiB5KUphKHIrIlsiK04rIl0iLHlbTl0sQyxLKX1mdW5jdGlvbiBQYShyKXtyZXR1cm4gZnVuY3Rpb24oeSxDKXsic3RyaW5nIiE9PXR5cGVvZiB5JiYoQz15LHk9IioiKTt2YXIgSywKTj0wLFE9eS50b0xvd2VyQ2FzZSgpLm1hdGNoKGhjKXx8W107aWYoVmEoQykpZm9yKDtLPVFbTisrXTspIisiPT09S1swXT8oSz1LLnNsaWNlKDEpfHwiKiIsKHJbS109cltLXXx8W10pLnVuc2hpZnQoQykpOihyW0tdPXJbS118fFtdKS5wdXNoKEMpfX1mdW5jdGlvbiBmYihyLHksQyxLKXtmdW5jdGlvbiBOKGJhKXt2YXIgJDtRW2JhXT0hMDtMLmVhY2gocltiYV18fFtdLGZ1bmN0aW9uKGphLHNhKXt2YXIgemE9c2EoeSxDLEspO2lmKCJzdHJpbmciPT09dHlwZW9mIHphJiYhUyYmIVFbemFdKXJldHVybiB5LmRhdGFUeXBlcy51bnNoaWZ0KHphKSxOKHphKSwhMTtpZihTKXJldHVybiEoJD16YSl9KTtyZXR1cm4gJH12YXIgUT17fSxTPXI9PT1QYjtyZXR1cm4gTih5LmRhdGFUeXBlc1swXSl8fCFRWyIqIl0mJk4oIioiKX1mdW5jdGlvbiB4YihyLHkpe3ZhciBDLEssTj1MLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKEMgaW4geSl2b2lkIDAhPT15W0NdJiYoKE5bQ10/CnI6S3x8KEs9e30pKVtDXT15W0NdKTtLJiZMLmV4dGVuZCghMCxyLEspO3JldHVybiByfXZhciBFYj1bXSxTYT1hLmRvY3VtZW50LGNjPU9iamVjdC5nZXRQcm90b3R5cGVPZixZYj1FYi5zbGljZSxCYz1FYi5jb25jYXQsRmM9RWIucHVzaCxRYz1FYi5pbmRleE9mLGxkPXt9LFdkPWxkLnRvU3RyaW5nLG1kPWxkLmhhc093blByb3BlcnR5LENkPW1kLnRvU3RyaW5nLFhkPUNkLmNhbGwoT2JqZWN0KSxrYj17fSxWYT1mdW5jdGlvbihyKXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIHImJiJudW1iZXIiIT09dHlwZW9mIHIubm9kZVR5cGV9LFBjPWZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT1yJiZyPT09ci53aW5kb3d9LEplPXt0eXBlOiEwLHNyYzohMCxub25jZTohMCxub01vZHVsZTohMH0sTD1mdW5jdGlvbihyLHkpe3JldHVybiBuZXcgTC5mbi5pbml0KHIseSl9LE5lPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZztMLmZuPUwucHJvdG90eXBlPXtqcXVlcnk6IjMuNC4wIiwKY29uc3RydWN0b3I6TCxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIFliLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihyKXtyZXR1cm4gbnVsbD09cj9ZYi5jYWxsKHRoaXMpOjA+cj90aGlzW3IrdGhpcy5sZW5ndGhdOnRoaXNbcl19LHB1c2hTdGFjazpmdW5jdGlvbihyKXtyPUwubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLHIpO3IucHJldk9iamVjdD10aGlzO3JldHVybiByfSxlYWNoOmZ1bmN0aW9uKHIpe3JldHVybiBMLmVhY2godGhpcyxyKX0sbWFwOmZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnB1c2hTdGFjayhMLm1hcCh0aGlzLGZ1bmN0aW9uKHksQyl7cmV0dXJuIHIuY2FsbCh5LEMseSl9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFliLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKHIpe3ZhciB5PQp0aGlzLmxlbmd0aDtyPStyKygwPnI/eTowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soMDw9ciYmcjx5P1t0aGlzW3JdXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDpGYyxzb3J0OkViLnNvcnQsc3BsaWNlOkViLnNwbGljZX07TC5leHRlbmQ9TC5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgcix5LEMsSyxOLFE9YXJndW1lbnRzWzBdfHx7fSxTPTEsYmE9YXJndW1lbnRzLmxlbmd0aCwkPSExOyJib29sZWFuIj09PXR5cGVvZiBRJiYoJD1RLFE9YXJndW1lbnRzW1NdfHx7fSxTKyspOyJvYmplY3QiPT09dHlwZW9mIFF8fFZhKFEpfHwoUT17fSk7Uz09PWJhJiYoUT10aGlzLFMtLSk7Zm9yKDtTPGJhO1MrKylpZihudWxsIT0ocj1hcmd1bWVudHNbU10pKWZvcih5IGluIHIpSz1yW3ldLCJfX3Byb3RvX18iIT09eSYmUSE9PUsmJigkJiZLJiYoTC5pc1BsYWluT2JqZWN0KEspfHwoTj1BcnJheS5pc0FycmF5KEspKSk/CihDPVFbeV0sQz1OJiYhQXJyYXkuaXNBcnJheShDKT9bXTpOfHxMLmlzUGxhaW5PYmplY3QoQyk/Qzp7fSxOPSExLFFbeV09TC5leHRlbmQoJCxDLEspKTp2b2lkIDAhPT1LJiYoUVt5XT1LKSk7cmV0dXJuIFF9O0wuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKygiMy40LjAiK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24ocil7dGhyb3cgRXJyb3Iocik7fSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKHIpe2lmKCFyfHwiW29iamVjdCBPYmplY3RdIiE9PVdkLmNhbGwocikpcmV0dXJuITE7cj1jYyhyKTtpZighcilyZXR1cm4hMDtyPW1kLmNhbGwociwiY29uc3RydWN0b3IiKSYmci5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIHImJkNkLmNhbGwocik9PT1YZH0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihyKXtmb3IodmFyIHkgaW4gcilyZXR1cm4hMTtyZXR1cm4hMH0sZ2xvYmFsRXZhbDpmdW5jdGlvbihyLAp5KXtxKHIse25vbmNlOnkmJnkubm9uY2V9KX0sZWFjaDpmdW5jdGlvbihyLHkpe3ZhciBDLEs9MDtpZihmKHIpKWZvcihDPXIubGVuZ3RoO0s8QyYmITEhPT15LmNhbGwocltLXSxLLHJbS10pO0srKyk7ZWxzZSBmb3IoSyBpbiByKWlmKCExPT09eS5jYWxsKHJbS10sSyxyW0tdKSlicmVhaztyZXR1cm4gcn0sdHJpbTpmdW5jdGlvbihyKXtyZXR1cm4gbnVsbD09cj8iIjoocisiIikucmVwbGFjZShOZSwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihyLHkpe3ZhciBDPXl8fFtdO251bGwhPXImJihmKE9iamVjdChyKSk/TC5tZXJnZShDLCJzdHJpbmciPT09dHlwZW9mIHI/W3JdOnIpOkZjLmNhbGwoQyxyKSk7cmV0dXJuIEN9LGluQXJyYXk6ZnVuY3Rpb24ocix5LEMpe3JldHVybiBudWxsPT15Py0xOlFjLmNhbGwoeSxyLEMpfSxtZXJnZTpmdW5jdGlvbihyLHkpe2Zvcih2YXIgQz0reS5sZW5ndGgsSz0wLE49ci5sZW5ndGg7SzxDO0srKylyW04rK109eVtLXTtyLmxlbmd0aD1OO3JldHVybiByfSwKZ3JlcDpmdW5jdGlvbihyLHksQyl7Zm9yKHZhciBLPVtdLE49MCxRPXIubGVuZ3RoLFM9IUM7TjxRO04rKylDPSF5KHJbTl0sTiksQyE9PVMmJksucHVzaChyW05dKTtyZXR1cm4gS30sbWFwOmZ1bmN0aW9uKHIseSxDKXt2YXIgSyxOLFE9MCxTPVtdO2lmKGYocikpZm9yKEs9ci5sZW5ndGg7UTxLO1ErKylOPXkocltRXSxRLEMpLG51bGwhPU4mJlMucHVzaChOKTtlbHNlIGZvcihRIGluIHIpTj15KHJbUV0sUSxDKSxudWxsIT1OJiZTLnB1c2goTik7cmV0dXJuIEJjLmFwcGx5KFtdLFMpfSxndWlkOjEsc3VwcG9ydDprYn0pOyJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYoTC5mbltTeW1ib2wuaXRlcmF0b3JdPUViW1N5bWJvbC5pdGVyYXRvcl0pO0wuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksZnVuY3Rpb24ocix5KXtsZFsiW29iamVjdCAiK3krIl0iXT15LnRvTG93ZXJDYXNlKCl9KTsKdmFyIEpjPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIHkoUixYLFcsZGEpe3ZhciBrYSx4YSx2YSxDYSx5YSxJYTt4YT1YJiZYLm93bmVyRG9jdW1lbnQ7SWE9WD9YLm5vZGVUeXBlOjk7Vz1XfHxbXTtpZigic3RyaW5nIiE9PXR5cGVvZiBSfHwhUnx8MSE9PUlhJiY5IT09SWEmJjExIT09SWEpcmV0dXJuIFc7aWYoIWRhJiYoKFg/WC5vd25lckRvY3VtZW50fHxYOmhiKSE9PUxhJiZuYihYKSxYPVh8fExhLHNiKSl7aWYoMTEhPT1JYSYmKHlhPVlkLmV4ZWMoUikpKWlmKGthPXlhWzFdKWlmKDk9PT1JYSlpZih2YT1YLmdldEVsZW1lbnRCeUlkKGthKSl7aWYodmEuaWQ9PT1rYSlyZXR1cm4gVy5wdXNoKHZhKSxXfWVsc2UgcmV0dXJuIFc7ZWxzZXtpZih4YSYmKHZhPXhhLmdldEVsZW1lbnRCeUlkKGthKSkmJnliKFgsdmEpJiZ2YS5pZD09PWthKXJldHVybiBXLnB1c2godmEpLFd9ZWxzZXtpZih5YVsyXSlyZXR1cm4gb2MuYXBwbHkoVyxYLmdldEVsZW1lbnRzQnlUYWdOYW1lKFIpKSxXO2lmKChrYT0KeWFbM10pJiZIYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZYLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIG9jLmFwcGx5KFcsWC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGthKSksV31pZihIYS5xc2EmJiEoZGNbUisiICJdfHxpYiYmaWIudGVzdChSKXx8MT09PUlhJiYib2JqZWN0Ij09PVgubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpe2thPVI7eGE9WDtpZigxPT09SWEmJlpkLnRlc3QoUikpeyhDYT1YLmdldEF0dHJpYnV0ZSgiaWQiKSk/Q2E9Q2EucmVwbGFjZShEZCxuZCk6WC5zZXRBdHRyaWJ1dGUoImlkIixDYT1nYik7SWE9cWIoUik7Zm9yKHhhPUlhLmxlbmd0aDt4YS0tOylJYVt4YV09IiMiK0NhKyIgIitNYShJYVt4YV0pO2thPUlhLmpvaW4oIiwiKTt4YT1vZC50ZXN0KFIpJiZ6YShYLnBhcmVudE5vZGUpfHxYfXRyeXtyZXR1cm4gb2MuYXBwbHkoVyx4YS5xdWVyeVNlbGVjdG9yQWxsKGthKSksV31jYXRjaChEYSl7ZGMoUiwhMCl9ZmluYWxseXtDYT09PWdiJiZYLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBXYihSLnJlcGxhY2UoUWIsCiIkMSIpLFgsVyxkYSl9ZnVuY3Rpb24gQygpe2Z1bmN0aW9uIFIoVyxkYSl7WC5wdXNoKFcrIiAiKT5hYi5jYWNoZUxlbmd0aCYmZGVsZXRlIFJbWC5zaGlmdCgpXTtyZXR1cm4gUltXKyIgIl09ZGF9dmFyIFg9W107cmV0dXJuIFJ9ZnVuY3Rpb24gSyhSKXtSW2diXT0hMDtyZXR1cm4gUn1mdW5jdGlvbiBOKFIpe3ZhciBYPUxhLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7dHJ5e3JldHVybiEhUihYKX1jYXRjaChXKXtyZXR1cm4hMX1maW5hbGx5e1gucGFyZW50Tm9kZSYmWC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFgpfX1mdW5jdGlvbiBRKFIsWCl7Zm9yKHZhciBXPVIuc3BsaXQoInwiKSxkYT1XLmxlbmd0aDtkYS0tOylhYi5hdHRySGFuZGxlW1dbZGFdXT1YfWZ1bmN0aW9uIFMoUixYKXt2YXIgVz1YJiZSLGRhPVcmJjE9PT1SLm5vZGVUeXBlJiYxPT09WC5ub2RlVHlwZSYmUi5zb3VyY2VJbmRleC1YLnNvdXJjZUluZGV4O2lmKGRhKXJldHVybiBkYTtpZihXKWZvcig7Vz1XLm5leHRTaWJsaW5nOylpZihXPT09ClgpcmV0dXJuLTE7cmV0dXJuIFI/MTotMX1mdW5jdGlvbiBiYShSKXtyZXR1cm4gZnVuY3Rpb24oWCl7cmV0dXJuImlucHV0Ij09PVgubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmWC50eXBlPT09Un19ZnVuY3Rpb24gJChSKXtyZXR1cm4gZnVuY3Rpb24oWCl7dmFyIFc9WC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09V3x8ImJ1dHRvbiI9PT1XKSYmWC50eXBlPT09Un19ZnVuY3Rpb24gamEoUil7cmV0dXJuIGZ1bmN0aW9uKFgpe3JldHVybiJmb3JtImluIFg/WC5wYXJlbnROb2RlJiYhMT09PVguZGlzYWJsZWQ/ImxhYmVsImluIFg/ImxhYmVsImluIFgucGFyZW50Tm9kZT9YLnBhcmVudE5vZGUuZGlzYWJsZWQ9PT1SOlguZGlzYWJsZWQ9PT1SOlguaXNEaXNhYmxlZD09PVJ8fFguaXNEaXNhYmxlZCE9PSFSJiZFZChYKT09PVI6WC5kaXNhYmxlZD09PVI6ImxhYmVsImluIFg/WC5kaXNhYmxlZD09PVI6ITF9fWZ1bmN0aW9uIHNhKFIpe3JldHVybiBLKGZ1bmN0aW9uKFgpe1g9CitYO3JldHVybiBLKGZ1bmN0aW9uKFcsZGEpe2Zvcih2YXIga2EseGE9UihbXSxXLmxlbmd0aCxYKSx2YT14YS5sZW5ndGg7dmEtLTspV1trYT14YVt2YV1dJiYoV1trYV09IShkYVtrYV09V1trYV0pKX0pfSl9ZnVuY3Rpb24gemEoUil7cmV0dXJuIFImJiJ1bmRlZmluZWQiIT09dHlwZW9mIFIuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJlJ9ZnVuY3Rpb24gaGEoKXt9ZnVuY3Rpb24gTWEoUil7Zm9yKHZhciBYPTAsVz1SLmxlbmd0aCxkYT0iIjtYPFc7WCsrKWRhKz1SW1hdLnZhbHVlO3JldHVybiBkYX1mdW5jdGlvbiBSYShSLFgsVyl7dmFyIGRhPVguZGlyLGthPVgubmV4dCx4YT1rYXx8ZGEsdmE9VyYmInBhcmVudE5vZGUiPT09eGEsQ2E9RmQrKztyZXR1cm4gWC5maXJzdD9mdW5jdGlvbih5YSxJYSxEYSl7Zm9yKDt5YT15YVtkYV07KWlmKDE9PT15YS5ub2RlVHlwZXx8dmEpcmV0dXJuIFIoeWEsSWEsRGEpO3JldHVybiExfTpmdW5jdGlvbih5YSxJYSxEYSl7dmFyIFRhLFlhLE5hPQpbQmIsQ2FdO2lmKERhKWZvcig7eWE9eWFbZGFdOyl7aWYoKDE9PT15YS5ub2RlVHlwZXx8dmEpJiZSKHlhLElhLERhKSlyZXR1cm4hMH1lbHNlIGZvcig7eWE9eWFbZGFdOylpZigxPT09eWEubm9kZVR5cGV8fHZhKWlmKFlhPXlhW2diXXx8KHlhW2diXT17fSksWWE9WWFbeWEudW5pcXVlSURdfHwoWWFbeWEudW5pcXVlSURdPXt9KSxrYSYma2E9PT15YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXlhPXlhW2RhXXx8eWE7ZWxzZXtpZigoVGE9WWFbeGFdKSYmVGFbMF09PT1CYiYmVGFbMV09PT1DYSlyZXR1cm4gTmFbMl09VGFbMl07WWFbeGFdPU5hO2lmKE5hWzJdPVIoeWEsSWEsRGEpKXJldHVybiEwfXJldHVybiExfX1mdW5jdGlvbiBHYihSKXtyZXR1cm4gMTxSLmxlbmd0aD9mdW5jdGlvbihYLFcsZGEpe2Zvcih2YXIga2E9Ui5sZW5ndGg7a2EtLTspaWYoIVJba2FdKFgsVyxkYSkpcmV0dXJuITE7cmV0dXJuITB9OlJbMF19ZnVuY3Rpb24gSmIoUixYLFcsZGEsa2Epe2Zvcih2YXIgeGEsCnZhPVtdLENhPTAseWE9Ui5sZW5ndGgsSWE9bnVsbCE9WDtDYTx5YTtDYSsrKWlmKHhhPVJbQ2FdKWlmKCFXfHxXKHhhLGRhLGthKSl2YS5wdXNoKHhhKSxJYSYmWC5wdXNoKENhKTtyZXR1cm4gdmF9ZnVuY3Rpb24gUmIoUixYLFcsZGEsa2EseGEpe2RhJiYhZGFbZ2JdJiYoZGE9UmIoZGEpKTtrYSYmIWthW2diXSYmKGthPVJiKGthLHhhKSk7cmV0dXJuIEsoZnVuY3Rpb24odmEsQ2EseWEsSWEpe3ZhciBEYSxUYSxZYT1bXSxOYT1bXSx0Yj1DYS5sZW5ndGgscmI7aWYoIShyYj12YSkpe3JiPVh8fCIqIjtmb3IodmFyIFphPXlhLm5vZGVUeXBlP1t5YV06eWEscGM9W10sR2M9MCxaYz1aYS5sZW5ndGg7R2M8WmM7R2MrKyl5KHJiLFphW0djXSxwYyk7cmI9cGN9cmI9IVJ8fCF2YSYmWD9yYjpKYihyYixZYSxSLHlhLElhKTtaYT1XP2thfHwodmE/Ujp0Ynx8ZGEpP1tdOkNhOnJiO1cmJlcocmIsWmEseWEsSWEpO2lmKGRhKWZvcihEYT1KYihaYSxOYSksZGEoRGEsW10seWEsSWEpLHlhPQpEYS5sZW5ndGg7eWEtLTspaWYoVGE9RGFbeWFdKVphW05hW3lhXV09IShyYltOYVt5YV1dPVRhKTtpZih2YSl7aWYoa2F8fFIpe2lmKGthKXtEYT1bXTtmb3IoeWE9WmEubGVuZ3RoO3lhLS07KShUYT1aYVt5YV0pJiZEYS5wdXNoKHJiW3lhXT1UYSk7a2EobnVsbCxaYT1bXSxEYSxJYSl9Zm9yKHlhPVphLmxlbmd0aDt5YS0tOykoVGE9WmFbeWFdKSYmLTE8KERhPWthP3ZjKHZhLFRhKTpZYVt5YV0pJiYodmFbRGFdPSEoQ2FbRGFdPVRhKSl9fWVsc2UgWmE9SmIoWmE9PT1DYT9aYS5zcGxpY2UodGIsWmEubGVuZ3RoKTpaYSksa2E/a2EobnVsbCxDYSxaYSxJYSk6b2MuYXBwbHkoQ2EsWmEpfSl9ZnVuY3Rpb24gemIoUil7dmFyIFgsVyxkYSxrYT1SLmxlbmd0aCx4YT1hYi5yZWxhdGl2ZVtSWzBdLnR5cGVdO1c9eGF8fGFiLnJlbGF0aXZlWyIgIl07Zm9yKHZhciB2YT14YT8xOjAsQ2E9UmEoZnVuY3Rpb24oRGEpe3JldHVybiBEYT09PVh9LFcsITApLHlhPVJhKGZ1bmN0aW9uKERhKXtyZXR1cm4tMTwKdmMoWCxEYSl9LFcsITApLElhPVtmdW5jdGlvbihEYSxUYSxZYSl7RGE9IXhhJiYoWWF8fFRhIT09cWMpfHwoKFg9VGEpLm5vZGVUeXBlP0NhKERhLFRhLFlhKTp5YShEYSxUYSxZYSkpO1g9bnVsbDtyZXR1cm4gRGF9XTt2YTxrYTt2YSsrKWlmKFc9YWIucmVsYXRpdmVbUlt2YV0udHlwZV0pSWE9W1JhKEdiKElhKSxXKV07ZWxzZXtXPWFiLmZpbHRlcltSW3ZhXS50eXBlXS5hcHBseShudWxsLFJbdmFdLm1hdGNoZXMpO2lmKFdbZ2JdKXtmb3IoZGE9Kyt2YTtkYTxrYSYmIWFiLnJlbGF0aXZlW1JbZGFdLnR5cGVdO2RhKyspO3JldHVybiBSYigxPHZhJiZHYihJYSksMTx2YSYmTWEoUi5zbGljZSgwLHZhLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09Ult2YS0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKFFiLCIkMSIpLFcsdmE8ZGEmJnpiKFIuc2xpY2UodmEsZGEpKSxkYTxrYSYmemIoUj1SLnNsaWNlKGRhKSksZGE8a2EmJk1hKFIpKX1JYS5wdXNoKFcpfXJldHVybiBHYihJYSl9ZnVuY3Rpb24gamMoUiwKWCl7dmFyIFc9MDxYLmxlbmd0aCxkYT0wPFIubGVuZ3RoLGthPWZ1bmN0aW9uKHhhLHZhLENhLHlhLElhKXt2YXIgRGEsVGEsWWEsTmE9MCx0Yj0iMCIscmI9eGEmJltdLFphPVtdLHBjPXFjLEdjPXhhfHxkYSYmYWIuZmluZC5UQUcoIioiLElhKSxaYz1CYis9bnVsbD09cGM/MTpNYXRoLnJhbmRvbSgpfHwwLjEsR2Q9R2MubGVuZ3RoO2ZvcihJYSYmKHFjPXZhPT09TGF8fHZhfHxJYSk7dGIhPT1HZCYmbnVsbCE9KERhPUdjW3RiXSk7dGIrKyl7aWYoZGEmJkRhKXtUYT0wO3ZhfHxEYS5vd25lckRvY3VtZW50PT09TGF8fChuYihEYSksQ2E9IXNiKTtmb3IoO1lhPVJbVGErK107KWlmKFlhKERhLHZhfHxMYSxDYSkpe3lhLnB1c2goRGEpO2JyZWFrfUlhJiYoQmI9WmMpfVcmJigoRGE9IVlhJiZEYSkmJk5hLS0seGEmJnJiLnB1c2goRGEpKX1OYSs9dGI7aWYoVyYmdGIhPT1OYSl7Zm9yKFRhPTA7WWE9WFtUYSsrXTspWWEocmIsWmEsdmEsQ2EpO2lmKHhhKXtpZigwPE5hKWZvcig7dGItLTspcmJbdGJdfHwKWmFbdGJdfHwoWmFbdGJdPWtjLmNhbGwoeWEpKTtaYT1KYihaYSl9b2MuYXBwbHkoeWEsWmEpO0lhJiYheGEmJjA8WmEubGVuZ3RoJiYxPE5hK1gubGVuZ3RoJiZ5LnVuaXF1ZVNvcnQoeWEpfUlhJiYoQmI9WmMscWM9cGMpO3JldHVybiByYn07cmV0dXJuIFc/SyhrYSk6a2F9dmFyIGxjLEhhLGFiLHdjLGRiLHFiLENiLFdiLHFjLFNiLGpiLG5iLExhLG1iLHNiLGliLE9hLEtiLHliLGdiPSJzaXp6bGUiKzEqbmV3IERhdGUsaGI9ci5kb2N1bWVudCxCYj0wLEZkPTAsJGQ9QygpLHBkPUMoKSxGYj1DKCksZGM9QygpLGJiPWZ1bmN0aW9uKFIsWCl7Uj09PVgmJihqYj0hMCk7cmV0dXJuIDB9LEhjPXt9Lmhhc093blByb3BlcnR5LHhjPVtdLGtjPXhjLnBvcCxhZT14Yy5wdXNoLG9jPXhjLnB1c2gsSGQ9eGMuc2xpY2UsdmM9ZnVuY3Rpb24oUixYKXtmb3IodmFyIFc9MCxkYT1SLmxlbmd0aDtXPGRhO1crKylpZihSW1ddPT09WClyZXR1cm4gVztyZXR1cm4tMX0sSWQ9L1tceDIwXHRcclxuXGZdKy9nLApRYj0vXltceDIwXHRcclxuXGZdK3woKD86XnxbXlxcXSkoPzpcXC4pKilbXHgyMFx0XHJcblxmXSskL2cseWM9L15bXHgyMFx0XHJcblxmXSosW1x4MjBcdFxyXG5cZl0qLyxiZT0vXltceDIwXHRcclxuXGZdKihbPit+XXxbXHgyMFx0XHJcblxmXSlbXHgyMFx0XHJcblxmXSovLFpkPS9bXHgyMFx0XHJcblxmXXw+LyxjZT1SZWdFeHAoIjooKD86XFxcXC58W1xcdy1dfFteXHgwMC1cXHhhMF0pKykoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXxcXFtbXFx4MjBcXHRcXHJcXG5cXGZdKigoPzpcXFxcLnxbXFx3LV18W15ceDAwLVxceGEwXSkrKSg/OltcXHgyMFxcdFxcclxcblxcZl0qKFsqXiR8IX5dP1x4M2QpW1xceDIwXFx0XFxyXFxuXFxmXSooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoKD86XFxcXC58W1xcdy1dfFteXHgwMC1cXHhhMF0pKykpfClbXFx4MjBcXHRcXHJcXG5cXGZdKlxcXSkqKXwuKilcXCl8KSIpLApkZT0vXig/OlxcLnxbXHctXXxbXlx4MDAtXHhhMF0pKyQvLFNjPXtJRDovXiMoKD86XFwufFtcdy1dfFteXHgwMC1ceGEwXSkrKS8sQ0xBU1M6L15cLigoPzpcXC58W1x3LV18W15ceDAwLVx4YTBdKSspLyxUQUc6L14oKD86XFwufFtcdy1dfFteXHgwMC1ceGEwXSkrfFsqXSkvLEFUVFI6UmVnRXhwKCJeXFxbW1xceDIwXFx0XFxyXFxuXFxmXSooKD86XFxcXC58W1xcdy1dfFteXHgwMC1cXHhhMF0pKykoPzpbXFx4MjBcXHRcXHJcXG5cXGZdKihbKl4kfCF+XT9ceDNkKVtcXHgyMFxcdFxcclxcblxcZl0qKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCg/OlxcXFwufFtcXHctXXxbXlx4MDAtXFx4YTBdKSspKXwpW1xceDIwXFx0XFxyXFxuXFxmXSpcXF0iKSxQU0VVRE86UmVnRXhwKCJeOigoPzpcXFxcLnxbXFx3LV18W15ceDAwLVxceGEwXSkrKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfFxcW1tcXHgyMFxcdFxcclxcblxcZl0qKCg/OlxcXFwufFtcXHctXXxbXlx4MDAtXFx4YTBdKSspKD86W1xceDIwXFx0XFxyXFxuXFxmXSooWypeJHwhfl0/XHgzZClbXFx4MjBcXHRcXHJcXG5cXGZdKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgoPzpcXFxcLnxbXFx3LV18W15ceDAwLVxceGEwXSkrKSl8KVtcXHgyMFxcdFxcclxcblxcZl0qXFxdKSopfC4qKVxcKXwpIiksCkNISUxEOlJlZ0V4cCgiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoW1xceDIwXFx0XFxyXFxuXFxmXSooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufClbXFx4MjBcXHRcXHJcXG5cXGZdKig/OihbKy1dfClbXFx4MjBcXHRcXHJcXG5cXGZdKihcXGQrKXwpKVtcXHgyMFxcdFxcclxcblxcZl0qXFwpfCkiLCJpIiksYm9vbDpSZWdFeHAoIl4oPzpjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCkkIiwiaSIpLG5lZWRzQ29udGV4dDpSZWdFeHAoIl5bXFx4MjBcXHRcXHJcXG5cXGZdKltceDNlK35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoW1xceDIwXFx0XFxyXFxuXFxmXSooKD86LVxcZCk/XFxkKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcKXwpKD9ceDNkW14tXXwkKSIsCiJpIil9LCRjPS9IVE1MJC9pLGVlPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksZmU9L15oXGQkL2ksSWM9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLFlkPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sb2Q9L1srfl0vLG1jPS9cXChbXGRhLWZdezEsNn1bXHgyMFx0XHJcblxmXT98KFtceDIwXHRcclxuXGZdKXwuKS9pZyxlYz1mdW5jdGlvbihSLFgsVyl7Uj0iMHgiK1gtNjU1MzY7cmV0dXJuIFIhPT1SfHxXP1g6MD5SP1N0cmluZy5mcm9tQ2hhckNvZGUoUis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShSPj4xMHw1NTI5NixSJjEwMjN8NTYzMjApfSxEZD0vKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZyxuZD1mdW5jdGlvbihSLFgpe3JldHVybiBYPyJceDAwIj09PVI/Ilx1ZmZmZCI6Ui5zbGljZSgwLC0xKSsiXFwiK1IuY2hhckNvZGVBdChSLmxlbmd0aC0xKS50b1N0cmluZygxNikrIiAiOgoiXFwiK1J9LHFkPWZ1bmN0aW9uKCl7bmIoKX0sRWQ9UmEoZnVuY3Rpb24oUil7cmV0dXJuITA9PT1SLmRpc2FibGVkJiYiZmllbGRzZXQiPT09Ui5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e29jLmFwcGx5KHhjPUhkLmNhbGwoaGIuY2hpbGROb2RlcyksaGIuY2hpbGROb2Rlcyl9Y2F0Y2goSmQpe29jPXthcHBseTp4Yy5sZW5ndGg/ZnVuY3Rpb24oUixYKXthZS5hcHBseShSLEhkLmNhbGwoWCkpfTpmdW5jdGlvbihSLFgpe2Zvcih2YXIgVz1SLmxlbmd0aCxkYT0wO1JbVysrXT1YW2RhKytdOyk7Ui5sZW5ndGg9Vy0xfX19SGE9eS5zdXBwb3J0PXt9O2RiPXkuaXNYTUw9ZnVuY3Rpb24oUil7dmFyIFg9KFIub3duZXJEb2N1bWVudHx8UikuZG9jdW1lbnRFbGVtZW50O3JldHVybiEkYy50ZXN0KFIubmFtZXNwYWNlVVJJfHxYJiZYLm5vZGVOYW1lfHwiSFRNTCIpfTtuYj15LnNldERvY3VtZW50PWZ1bmN0aW9uKFIpe3ZhciBYOwpSPVI/Ui5vd25lckRvY3VtZW50fHxSOmhiO2lmKFI9PT1MYXx8OSE9PVIubm9kZVR5cGV8fCFSLmRvY3VtZW50RWxlbWVudClyZXR1cm4gTGE7TGE9UjttYj1MYS5kb2N1bWVudEVsZW1lbnQ7c2I9IWRiKExhKTtoYiE9PUxhJiYoWD1MYS5kZWZhdWx0VmlldykmJlgudG9wIT09WCYmKFguYWRkRXZlbnRMaXN0ZW5lcj9YLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIscWQsITEpOlguYXR0YWNoRXZlbnQmJlguYXR0YWNoRXZlbnQoIm9udW5sb2FkIixxZCkpO0hhLmF0dHJpYnV0ZXM9TihmdW5jdGlvbihXKXtXLmNsYXNzTmFtZT0iaSI7cmV0dXJuIVcuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKX0pO0hhLmdldEVsZW1lbnRzQnlUYWdOYW1lPU4oZnVuY3Rpb24oVyl7Vy5hcHBlbmRDaGlsZChMYS5jcmVhdGVDb21tZW50KCIiKSk7cmV0dXJuIVcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KTtIYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPUljLnRlc3QoTGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSk7CkhhLmdldEJ5SWQ9TihmdW5jdGlvbihXKXttYi5hcHBlbmRDaGlsZChXKS5pZD1nYjtyZXR1cm4hTGEuZ2V0RWxlbWVudHNCeU5hbWV8fCFMYS5nZXRFbGVtZW50c0J5TmFtZShnYikubGVuZ3RofSk7SGEuZ2V0QnlJZD8oYWIuZmlsdGVyLklEPWZ1bmN0aW9uKFcpe3ZhciBkYT1XLnJlcGxhY2UobWMsZWMpO3JldHVybiBmdW5jdGlvbihrYSl7cmV0dXJuIGthLmdldEF0dHJpYnV0ZSgiaWQiKT09PWRhfX0sYWIuZmluZC5JRD1mdW5jdGlvbihXLGRhKXtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBkYS5nZXRFbGVtZW50QnlJZCYmc2Ipe3ZhciBrYT1kYS5nZXRFbGVtZW50QnlJZChXKTtyZXR1cm4ga2E/W2thXTpbXX19KTooYWIuZmlsdGVyLklEPWZ1bmN0aW9uKFcpe3ZhciBkYT1XLnJlcGxhY2UobWMsZWMpO3JldHVybiBmdW5jdGlvbihrYSl7cmV0dXJuKGthPSJ1bmRlZmluZWQiIT09dHlwZW9mIGthLmdldEF0dHJpYnV0ZU5vZGUmJmthLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiYKa2EudmFsdWU9PT1kYX19LGFiLmZpbmQuSUQ9ZnVuY3Rpb24oVyxkYSl7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgZGEuZ2V0RWxlbWVudEJ5SWQmJnNiKXt2YXIga2EseGEsdmEsQ2E9ZGEuZ2V0RWxlbWVudEJ5SWQoVyk7aWYoQ2Epe2lmKChrYT1DYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYma2EudmFsdWU9PT1XKXJldHVybltDYV07dmE9ZGEuZ2V0RWxlbWVudHNCeU5hbWUoVyk7Zm9yKHhhPTA7Q2E9dmFbeGErK107KWlmKChrYT1DYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYma2EudmFsdWU9PT1XKXJldHVybltDYV19cmV0dXJuW119fSk7YWIuZmluZC5UQUc9SGEuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oVyxkYSl7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgZGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUpcmV0dXJuIGRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKFcpO2lmKEhhLnFzYSlyZXR1cm4gZGEucXVlcnlTZWxlY3RvckFsbChXKX06ZnVuY3Rpb24oVyxkYSl7dmFyIGthLAp4YT1bXSx2YT0wLENhPWRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKFcpO2lmKCIqIj09PVcpe2Zvcig7a2E9Q2FbdmErK107KTE9PT1rYS5ub2RlVHlwZSYmeGEucHVzaChrYSk7cmV0dXJuIHhhfXJldHVybiBDYX07YWIuZmluZC5DTEFTUz1IYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihXLGRhKXtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBkYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZzYilyZXR1cm4gZGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShXKX07T2E9W107aWI9W107aWYoSGEucXNhPUljLnRlc3QoTGEucXVlcnlTZWxlY3RvckFsbCkpTihmdW5jdGlvbihXKXttYi5hcHBlbmRDaGlsZChXKS5pbm5lckhUTUw9Ilx4M2NhIGlkXHgzZCciK2diKyInXHgzZVx4M2MvYVx4M2VceDNjc2VsZWN0IGlkXHgzZCciK2diKyItXHJcXCcgbXNhbGxvd2NhcHR1cmVceDNkJydceDNlXHgzY29wdGlvbiBzZWxlY3RlZFx4M2QnJ1x4M2VceDNjL29wdGlvblx4M2VceDNjL3NlbGVjdFx4M2UiOwpXLnF1ZXJ5U2VsZWN0b3JBbGwoIlttc2FsbG93Y2FwdHVyZV5ceDNkJyddIikubGVuZ3RoJiZpYi5wdXNoKCJbKl4kXVx4M2RbXFx4MjBcXHRcXHJcXG5cXGZdKig/OicnfFwiXCIpIik7Vy5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RofHxpYi5wdXNoKCJcXFtbXFx4MjBcXHRcXHJcXG5cXGZdKig/OnZhbHVlfGNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkKSIpO1cucXVlcnlTZWxlY3RvckFsbCgiW2lkflx4M2QiK2diKyItXSIpLmxlbmd0aHx8aWIucHVzaCgiflx4M2QiKTtXLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxpYi5wdXNoKCI6Y2hlY2tlZCIpO1cucXVlcnlTZWxlY3RvckFsbCgiYSMiK2diKyIrKiIpLmxlbmd0aHx8aWIucHVzaCgiLiMuK1srfl0iKX0pLE4oZnVuY3Rpb24oVyl7Vy5pbm5lckhUTUw9CiJceDNjYSBocmVmXHgzZCcnIGRpc2FibGVkXHgzZCdkaXNhYmxlZCdceDNlXHgzYy9hXHgzZVx4M2NzZWxlY3QgZGlzYWJsZWRceDNkJ2Rpc2FibGVkJ1x4M2VceDNjb3B0aW9uL1x4M2VceDNjL3NlbGVjdFx4M2UiO3ZhciBkYT1MYS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2RhLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpO1cuYXBwZW5kQ2hpbGQoZGEpLnNldEF0dHJpYnV0ZSgibmFtZSIsIkQiKTtXLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lXHgzZGRdIikubGVuZ3RoJiZpYi5wdXNoKCJuYW1lW1xceDIwXFx0XFxyXFxuXFxmXSpbKl4kfCF+XT9ceDNkIik7MiE9PVcucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGgmJmliLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIik7bWIuYXBwZW5kQ2hpbGQoVykuZGlzYWJsZWQ9ITA7MiE9PVcucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoJiZpYi5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpOwpXLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKTtpYi5wdXNoKCIsLio6Iil9KTsoSGEubWF0Y2hlc1NlbGVjdG9yPUljLnRlc3QoS2I9bWIubWF0Y2hlc3x8bWIud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxtYi5tb3pNYXRjaGVzU2VsZWN0b3J8fG1iLm9NYXRjaGVzU2VsZWN0b3J8fG1iLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJk4oZnVuY3Rpb24oVyl7SGEuZGlzY29ubmVjdGVkTWF0Y2g9S2IuY2FsbChXLCIqIik7S2IuY2FsbChXLCJbcyFceDNkJyddOngiKTtPYS5wdXNoKCIhXHgzZCIsIjooKD86XFxcXC58W1xcdy1dfFteXHgwMC1cXHhhMF0pKykoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXxcXFtbXFx4MjBcXHRcXHJcXG5cXGZdKigoPzpcXFxcLnxbXFx3LV18W15ceDAwLVxceGEwXSkrKSg/OltcXHgyMFxcdFxcclxcblxcZl0qKFsqXiR8IX5dP1x4M2QpW1xceDIwXFx0XFxyXFxuXFxmXSooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoKD86XFxcXC58W1xcdy1dfFteXHgwMC1cXHhhMF0pKykpfClbXFx4MjBcXHRcXHJcXG5cXGZdKlxcXSkqKXwuKilcXCl8KSIpfSk7CmliPWliLmxlbmd0aCYmUmVnRXhwKGliLmpvaW4oInwiKSk7T2E9T2EubGVuZ3RoJiZSZWdFeHAoT2Euam9pbigifCIpKTt5Yj0oWD1JYy50ZXN0KG1iLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSl8fEljLnRlc3QobWIuY29udGFpbnMpP2Z1bmN0aW9uKFcsZGEpe3ZhciBrYT05PT09Vy5ub2RlVHlwZT9XLmRvY3VtZW50RWxlbWVudDpXLHhhPWRhJiZkYS5wYXJlbnROb2RlO3JldHVybiBXPT09eGF8fCEhKHhhJiYxPT09eGEubm9kZVR5cGUmJihrYS5jb250YWlucz9rYS5jb250YWlucyh4YSk6Vy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmVy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih4YSkmMTYpKX06ZnVuY3Rpb24oVyxkYSl7aWYoZGEpZm9yKDtkYT1kYS5wYXJlbnROb2RlOylpZihkYT09PVcpcmV0dXJuITA7cmV0dXJuITF9O2JiPVg/ZnVuY3Rpb24oVyxkYSl7aWYoVz09PWRhKXJldHVybiBqYj0hMCwwO3ZhciBrYT0hVy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hZGEuY29tcGFyZURvY3VtZW50UG9zaXRpb247CmlmKGthKXJldHVybiBrYTtrYT0oVy5vd25lckRvY3VtZW50fHxXKT09PShkYS5vd25lckRvY3VtZW50fHxkYSk/Vy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkYSk6MTtyZXR1cm4ga2EmMXx8IUhhLnNvcnREZXRhY2hlZCYmZGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oVyk9PT1rYT9XPT09TGF8fFcub3duZXJEb2N1bWVudD09PWhiJiZ5YihoYixXKT8tMTpkYT09PUxhfHxkYS5vd25lckRvY3VtZW50PT09aGImJnliKGhiLGRhKT8xOlNiP3ZjKFNiLFcpLXZjKFNiLGRhKTowOmthJjQ/LTE6MX06ZnVuY3Rpb24oVyxkYSl7aWYoVz09PWRhKXJldHVybiBqYj0hMCwwO3ZhciBrYSx4YT0wO2thPVcucGFyZW50Tm9kZTt2YXIgdmE9ZGEucGFyZW50Tm9kZSxDYT1bV10seWE9W2RhXTtpZigha2F8fCF2YSlyZXR1cm4gVz09PUxhPy0xOmRhPT09TGE/MTprYT8tMTp2YT8xOlNiP3ZjKFNiLFcpLXZjKFNiLGRhKTowO2lmKGthPT09dmEpcmV0dXJuIFMoVyxkYSk7Zm9yKGthPVc7a2E9a2EucGFyZW50Tm9kZTspQ2EudW5zaGlmdChrYSk7CmZvcihrYT1kYTtrYT1rYS5wYXJlbnROb2RlOyl5YS51bnNoaWZ0KGthKTtmb3IoO0NhW3hhXT09PXlhW3hhXTspeGErKztyZXR1cm4geGE/UyhDYVt4YV0seWFbeGFdKTpDYVt4YV09PT1oYj8tMTp5YVt4YV09PT1oYj8xOjB9O3JldHVybiBMYX07eS5tYXRjaGVzPWZ1bmN0aW9uKFIsWCl7cmV0dXJuIHkoUixudWxsLG51bGwsWCl9O3kubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKFIsWCl7KFIub3duZXJEb2N1bWVudHx8UikhPT1MYSYmbmIoUik7aWYoSGEubWF0Y2hlc1NlbGVjdG9yJiZzYiYmIShkY1tYKyIgIl18fE9hJiZPYS50ZXN0KFgpfHxpYiYmaWIudGVzdChYKSkpdHJ5e3ZhciBXPUtiLmNhbGwoUixYKTtpZihXfHxIYS5kaXNjb25uZWN0ZWRNYXRjaHx8Ui5kb2N1bWVudCYmMTEhPT1SLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBXfWNhdGNoKGRhKXtkYyhYLCEwKX1yZXR1cm4gMDx5KFgsTGEsbnVsbCxbUl0pLmxlbmd0aH07eS5jb250YWlucz1mdW5jdGlvbihSLFgpeyhSLm93bmVyRG9jdW1lbnR8fApSKSE9PUxhJiZuYihSKTtyZXR1cm4geWIoUixYKX07eS5hdHRyPWZ1bmN0aW9uKFIsWCl7KFIub3duZXJEb2N1bWVudHx8UikhPT1MYSYmbmIoUik7dmFyIFc9YWIuYXR0ckhhbmRsZVtYLnRvTG93ZXJDYXNlKCldLFc9VyYmSGMuY2FsbChhYi5hdHRySGFuZGxlLFgudG9Mb3dlckNhc2UoKSk/VyhSLFgsIXNiKTp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PVc/VzpIYS5hdHRyaWJ1dGVzfHwhc2I/Ui5nZXRBdHRyaWJ1dGUoWCk6KFc9Ui5nZXRBdHRyaWJ1dGVOb2RlKFgpKSYmVy5zcGVjaWZpZWQ/Vy52YWx1ZTpudWxsfTt5LmVzY2FwZT1mdW5jdGlvbihSKXtyZXR1cm4oUisiIikucmVwbGFjZShEZCxuZCl9O3kuZXJyb3I9ZnVuY3Rpb24oUil7dGhyb3cgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrUik7fTt5LnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oUil7dmFyIFgsVz1bXSxkYT0wLGthPTA7amI9IUhhLmRldGVjdER1cGxpY2F0ZXM7U2I9IUhhLnNvcnRTdGFibGUmJgpSLnNsaWNlKDApO1Iuc29ydChiYik7aWYoamIpe2Zvcig7WD1SW2thKytdOylYPT09UltrYV0mJihkYT1XLnB1c2goa2EpKTtmb3IoO2RhLS07KVIuc3BsaWNlKFdbZGFdLDEpfVNiPW51bGw7cmV0dXJuIFJ9O3djPXkuZ2V0VGV4dD1mdW5jdGlvbihSKXt2YXIgWCxXPSIiLGRhPTA7WD1SLm5vZGVUeXBlO2lmKCFYKWZvcig7WD1SW2RhKytdOylXKz13YyhYKTtlbHNlIGlmKDE9PT1YfHw5PT09WHx8MTE9PT1YKXtpZigic3RyaW5nIj09PXR5cGVvZiBSLnRleHRDb250ZW50KXJldHVybiBSLnRleHRDb250ZW50O2ZvcihSPVIuZmlyc3RDaGlsZDtSO1I9Ui5uZXh0U2libGluZylXKz13YyhSKX1lbHNlIGlmKDM9PT1YfHw0PT09WClyZXR1cm4gUi5ub2RlVmFsdWU7cmV0dXJuIFd9O2FiPXkuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86SyxtYXRjaDpTYyxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyJceDNlIjp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sCiIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKFIpe1JbMV09UlsxXS5yZXBsYWNlKG1jLGVjKTtSWzNdPShSWzNdfHxSWzRdfHxSWzVdfHwiIikucmVwbGFjZShtYyxlYyk7In5ceDNkIj09PVJbMl0mJihSWzNdPSIgIitSWzNdKyIgIik7cmV0dXJuIFIuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oUil7UlsxXT1SWzFdLnRvTG93ZXJDYXNlKCk7Im50aCI9PT1SWzFdLnNsaWNlKDAsMyk/KFJbM118fHkuZXJyb3IoUlswXSksUls0XT0rKFJbNF0/Uls1XSsoUls2XXx8MSk6MiooImV2ZW4iPT09UlszXXx8Im9kZCI9PT1SWzNdKSksUls1XT0rKFJbN10rUls4XXx8Im9kZCI9PT1SWzNdKSk6UlszXSYmeS5lcnJvcihSWzBdKTtyZXR1cm4gUn0sUFNFVURPOmZ1bmN0aW9uKFIpe3ZhciBYLFc9IVJbNl0mJlJbMl07aWYoU2MuQ0hJTEQudGVzdChSWzBdKSlyZXR1cm4gbnVsbDsKUlszXT9SWzJdPVJbNF18fFJbNV18fCIiOlcmJmNlLnRlc3QoVykmJihYPXFiKFcsITApKSYmKFg9Vy5pbmRleE9mKCIpIixXLmxlbmd0aC1YKS1XLmxlbmd0aCkmJihSWzBdPVJbMF0uc2xpY2UoMCxYKSxSWzJdPVcuc2xpY2UoMCxYKSk7cmV0dXJuIFIuc2xpY2UoMCwzKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKFIpe3ZhciBYPVIucmVwbGFjZShtYyxlYykudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1SP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKFcpe3JldHVybiBXLm5vZGVOYW1lJiZXLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1YfX0sQ0xBU1M6ZnVuY3Rpb24oUil7dmFyIFg9JGRbUisiICJdO3JldHVybiBYfHwoWD1SZWdFeHAoIihefFtcXHgyMFxcdFxcclxcblxcZl0pIitSKyIoW1xceDIwXFx0XFxyXFxuXFxmXXwkKSIpKSYmJGQoUixmdW5jdGlvbihXKXtyZXR1cm4gWC50ZXN0KCJzdHJpbmciPT09dHlwZW9mIFcuY2xhc3NOYW1lJiZXLmNsYXNzTmFtZXx8CiJ1bmRlZmluZWQiIT09dHlwZW9mIFcuZ2V0QXR0cmlidXRlJiZXLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oUixYLFcpe3JldHVybiBmdW5jdGlvbihkYSl7ZGE9eS5hdHRyKGRhLFIpO2lmKG51bGw9PWRhKXJldHVybiIhXHgzZCI9PT1YO2lmKCFYKXJldHVybiEwO2RhKz0iIjtyZXR1cm4iXHgzZCI9PT1YP2RhPT09VzoiIVx4M2QiPT09WD9kYSE9PVc6Il5ceDNkIj09PVg/VyYmMD09PWRhLmluZGV4T2YoVyk6IipceDNkIj09PVg/VyYmLTE8ZGEuaW5kZXhPZihXKToiJFx4M2QiPT09WD9XJiZkYS5zbGljZSgtVy5sZW5ndGgpPT09Vzoiflx4M2QiPT09WD8tMTwoIiAiK2RhLnJlcGxhY2UoSWQsIiAiKSsiICIpLmluZGV4T2YoVyk6InxceDNkIj09PVg/ZGE9PT1XfHxkYS5zbGljZSgwLFcubGVuZ3RoKzEpPT09VysiLSI6ITF9fSxDSElMRDpmdW5jdGlvbihSLFgsVyxkYSxrYSl7dmFyIHhhPSJudGgiIT09Ui5zbGljZSgwLDMpLHZhPSJsYXN0IiE9PQpSLnNsaWNlKC00KSxDYT0ib2YtdHlwZSI9PT1YO3JldHVybiAxPT09ZGEmJjA9PT1rYT9mdW5jdGlvbih5YSl7cmV0dXJuISF5YS5wYXJlbnROb2RlfTpmdW5jdGlvbih5YSxJYSxEYSl7dmFyIFRhLFlhLE5hLHRiLHJiO0lhPXhhIT09dmE/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIjt2YXIgWmE9eWEucGFyZW50Tm9kZSxwYz1DYSYmeWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtEYT0hRGEmJiFDYTtUYT0hMTtpZihaYSl7aWYoeGEpe2Zvcig7SWE7KXtmb3IoTmE9eWE7TmE9TmFbSWFdOylpZihDYT9OYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09cGM6MT09PU5hLm5vZGVUeXBlKXJldHVybiExO3JiPUlhPSJvbmx5Ij09PVImJiFyYiYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1yYj1bdmE/WmEuZmlyc3RDaGlsZDpaYS5sYXN0Q2hpbGRdO2lmKHZhJiZEYSlmb3IoTmE9WmEsWWE9TmFbZ2JdfHwoTmFbZ2JdPXt9KSxZYT1ZYVtOYS51bmlxdWVJRF18fChZYVtOYS51bmlxdWVJRF09Cnt9KSxUYT1ZYVtSXXx8W10sVGE9KHRiPVRhWzBdPT09QmImJlRhWzFdKSYmVGFbMl0sTmE9dGImJlphLmNoaWxkTm9kZXNbdGJdO05hPSsrdGImJk5hJiZOYVtJYV18fChUYT10Yj0wKXx8cmIucG9wKCk7KXtpZigxPT09TmEubm9kZVR5cGUmJisrVGEmJk5hPT09eWEpe1lhW1JdPVtCYix0YixUYV07YnJlYWt9fWVsc2UgaWYoRGEmJihOYT15YSxZYT1OYVtnYl18fChOYVtnYl09e30pLFlhPVlhW05hLnVuaXF1ZUlEXXx8KFlhW05hLnVuaXF1ZUlEXT17fSksVGE9WWFbUl18fFtdLFRhPXRiPVRhWzBdPT09QmImJlRhWzFdKSwhMT09PVRhKWZvcig7KE5hPSsrdGImJk5hJiZOYVtJYV18fChUYT10Yj0wKXx8cmIucG9wKCkpJiYoKENhP05hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT1wYzoxIT09TmEubm9kZVR5cGUpfHwhKytUYXx8KERhJiYoWWE9TmFbZ2JdfHwoTmFbZ2JdPXt9KSxZYT1ZYVtOYS51bmlxdWVJRF18fChZYVtOYS51bmlxdWVJRF09e30pLFlhW1JdPVtCYixUYV0pLApOYSE9PXlhKSk7KTtUYS09a2E7cmV0dXJuIFRhPT09ZGF8fDA9PT1UYSVkYSYmMDw9VGEvZGF9fX0sUFNFVURPOmZ1bmN0aW9uKFIsWCl7dmFyIFcsZGE9YWIucHNldWRvc1tSXXx8YWIuc2V0RmlsdGVyc1tSLnRvTG93ZXJDYXNlKCldfHx5LmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrUik7cmV0dXJuIGRhW2diXT9kYShYKToxPGRhLmxlbmd0aD8oVz1bUixSLCIiLFhdLGFiLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoUi50b0xvd2VyQ2FzZSgpKT9LKGZ1bmN0aW9uKGthLHhhKXtmb3IodmFyIHZhLENhPWRhKGthLFgpLHlhPUNhLmxlbmd0aDt5YS0tOyl2YT12YyhrYSxDYVt5YV0pLGthW3ZhXT0hKHhhW3ZhXT1DYVt5YV0pfSk6ZnVuY3Rpb24oa2Epe3JldHVybiBkYShrYSwwLFcpfSk6ZGF9fSxwc2V1ZG9zOntub3Q6SyhmdW5jdGlvbihSKXt2YXIgWD1bXSxXPVtdLGRhPUNiKFIucmVwbGFjZShRYiwiJDEiKSk7cmV0dXJuIGRhW2diXT9LKGZ1bmN0aW9uKGthLHhhLHZhLApDYSl7Q2E9ZGEoa2EsbnVsbCxDYSxbXSk7Zm9yKHZhciB5YT1rYS5sZW5ndGg7eWEtLTspaWYodmE9Q2FbeWFdKWthW3lhXT0hKHhhW3lhXT12YSl9KTpmdW5jdGlvbihrYSx4YSx2YSl7WFswXT1rYTtkYShYLG51bGwsdmEsVyk7WFswXT1udWxsO3JldHVybiFXLnBvcCgpfX0pLGhhczpLKGZ1bmN0aW9uKFIpe3JldHVybiBmdW5jdGlvbihYKXtyZXR1cm4gMDx5KFIsWCkubGVuZ3RofX0pLGNvbnRhaW5zOksoZnVuY3Rpb24oUil7Uj1SLnJlcGxhY2UobWMsZWMpO3JldHVybiBmdW5jdGlvbihYKXtyZXR1cm4tMTwoWC50ZXh0Q29udGVudHx8d2MoWCkpLmluZGV4T2YoUil9fSksbGFuZzpLKGZ1bmN0aW9uKFIpe2RlLnRlc3QoUnx8IiIpfHx5LmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK1IpO1I9Ui5yZXBsYWNlKG1jLGVjKS50b0xvd2VyQ2FzZSgpO3JldHVybiBmdW5jdGlvbihYKXt2YXIgVztkbyBpZihXPXNiP1gubGFuZzpYLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8WC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gVz0KVy50b0xvd2VyQ2FzZSgpLFc9PT1SfHwwPT09Vy5pbmRleE9mKFIrIi0iKTt3aGlsZSgoWD1YLnBhcmVudE5vZGUpJiYxPT09WC5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKFIpe3ZhciBYPXIubG9jYXRpb24mJnIubG9jYXRpb24uaGFzaDtyZXR1cm4gWCYmWC5zbGljZSgxKT09PVIuaWR9LHJvb3Q6ZnVuY3Rpb24oUil7cmV0dXJuIFI9PT1tYn0sZm9jdXM6ZnVuY3Rpb24oUil7cmV0dXJuIFI9PT1MYS5hY3RpdmVFbGVtZW50JiYoIUxhLmhhc0ZvY3VzfHxMYS5oYXNGb2N1cygpKSYmISEoUi50eXBlfHxSLmhyZWZ8fH5SLnRhYkluZGV4KX0sZW5hYmxlZDpqYSghMSksZGlzYWJsZWQ6amEoITApLGNoZWNrZWQ6ZnVuY3Rpb24oUil7dmFyIFg9Ui5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1YJiYhIVIuY2hlY2tlZHx8Im9wdGlvbiI9PT1YJiYhIVIuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKFIpe3JldHVybiEwPT09Ui5zZWxlY3RlZH0sCmVtcHR5OmZ1bmN0aW9uKFIpe2ZvcihSPVIuZmlyc3RDaGlsZDtSO1I9Ui5uZXh0U2libGluZylpZig2PlIubm9kZVR5cGUpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihSKXtyZXR1cm4hYWIucHNldWRvcy5lbXB0eShSKX0saGVhZGVyOmZ1bmN0aW9uKFIpe3JldHVybiBmZS50ZXN0KFIubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihSKXtyZXR1cm4gZWUudGVzdChSLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKFIpe3ZhciBYPVIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09WCYmImJ1dHRvbiI9PT1SLnR5cGV8fCJidXR0b24iPT09WH0sdGV4dDpmdW5jdGlvbihSKXt2YXIgWDtyZXR1cm4iaW5wdXQiPT09Ui5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1SLnR5cGUmJihudWxsPT0oWD1SLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09WC50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6c2EoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSwKbGFzdDpzYShmdW5jdGlvbihSLFgpe3JldHVybltYLTFdfSksZXE6c2EoZnVuY3Rpb24oUixYLFcpe3JldHVyblswPlc/VytYOlddfSksZXZlbjpzYShmdW5jdGlvbihSLFgpe2Zvcih2YXIgVz0wO1c8WDtXKz0yKVIucHVzaChXKTtyZXR1cm4gUn0pLG9kZDpzYShmdW5jdGlvbihSLFgpe2Zvcih2YXIgVz0xO1c8WDtXKz0yKVIucHVzaChXKTtyZXR1cm4gUn0pLGx0OnNhKGZ1bmN0aW9uKFIsWCxXKXtmb3IoWD0wPlc/VytYOlc+WD9YOlc7MDw9LS1YOylSLnB1c2goWCk7cmV0dXJuIFJ9KSxndDpzYShmdW5jdGlvbihSLFgsVyl7Zm9yKFc9MD5XP1crWDpXOysrVzxYOylSLnB1c2goVyk7cmV0dXJuIFJ9KX19O2FiLnBzZXVkb3MubnRoPWFiLnBzZXVkb3MuZXE7Zm9yKGxjIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWFiLnBzZXVkb3NbbGNdPWJhKGxjKTtmb3IobGMgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlhYi5wc2V1ZG9zW2xjXT0KJChsYyk7aGEucHJvdG90eXBlPWFiLmZpbHRlcnM9YWIucHNldWRvczthYi5zZXRGaWx0ZXJzPW5ldyBoYTtxYj15LnRva2VuaXplPWZ1bmN0aW9uKFIsWCl7dmFyIFcsZGEsa2EseGEsdmEsQ2EseWE7aWYodmE9cGRbUisiICJdKXJldHVybiBYPzA6dmEuc2xpY2UoMCk7dmE9UjtDYT1bXTtmb3IoeWE9YWIucHJlRmlsdGVyO3ZhOyl7aWYoIVd8fChkYT15Yy5leGVjKHZhKSkpZGEmJih2YT12YS5zbGljZShkYVswXS5sZW5ndGgpfHx2YSksQ2EucHVzaChrYT1bXSk7Vz0hMTtpZihkYT1iZS5leGVjKHZhKSlXPWRhLnNoaWZ0KCksa2EucHVzaCh7dmFsdWU6Vyx0eXBlOmRhWzBdLnJlcGxhY2UoUWIsIiAiKX0pLHZhPXZhLnNsaWNlKFcubGVuZ3RoKTtmb3IoeGEgaW4gYWIuZmlsdGVyKSEoZGE9U2NbeGFdLmV4ZWModmEpKXx8eWFbeGFdJiYhKGRhPXlhW3hhXShkYSkpfHwoVz1kYS5zaGlmdCgpLGthLnB1c2goe3ZhbHVlOlcsdHlwZTp4YSxtYXRjaGVzOmRhfSksdmE9dmEuc2xpY2UoVy5sZW5ndGgpKTsKaWYoIVcpYnJlYWt9cmV0dXJuIFg/dmEubGVuZ3RoOnZhP3kuZXJyb3IoUik6cGQoUixDYSkuc2xpY2UoMCl9O0NiPXkuY29tcGlsZT1mdW5jdGlvbihSLFgpe3ZhciBXLGRhPVtdLGthPVtdLHhhPUZiW1IrIiAiXTtpZigheGEpe1h8fChYPXFiKFIpKTtmb3IoVz1YLmxlbmd0aDtXLS07KXhhPXpiKFhbV10pLHhhW2diXT9kYS5wdXNoKHhhKTprYS5wdXNoKHhhKTt4YT1GYihSLGpjKGthLGRhKSk7eGEuc2VsZWN0b3I9Un1yZXR1cm4geGF9O1diPXkuc2VsZWN0PWZ1bmN0aW9uKFIsWCxXLGRhKXt2YXIga2EseGEsdmEsQ2EseWE9ImZ1bmN0aW9uIj09PXR5cGVvZiBSJiZSLElhPSFkYSYmcWIoUj15YS5zZWxlY3Rvcnx8Uik7Vz1XfHxbXTtpZigxPT09SWEubGVuZ3RoKXt4YT1JYVswXT1JYVswXS5zbGljZSgwKTtpZigyPHhhLmxlbmd0aCYmIklEIj09PSh2YT14YVswXSkudHlwZSYmOT09PVgubm9kZVR5cGUmJnNiJiZhYi5yZWxhdGl2ZVt4YVsxXS50eXBlXSl7WD0oYWIuZmluZC5JRCh2YS5tYXRjaGVzWzBdLnJlcGxhY2UobWMsCmVjKSxYKXx8W10pWzBdO2lmKCFYKXJldHVybiBXO3lhJiYoWD1YLnBhcmVudE5vZGUpO1I9Ui5zbGljZSh4YS5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9Zm9yKGthPVNjLm5lZWRzQ29udGV4dC50ZXN0KFIpPzA6eGEubGVuZ3RoO2thLS07KXt2YT14YVtrYV07aWYoYWIucmVsYXRpdmVbQ2E9dmEudHlwZV0pYnJlYWs7aWYoQ2E9YWIuZmluZFtDYV0paWYoZGE9Q2EodmEubWF0Y2hlc1swXS5yZXBsYWNlKG1jLGVjKSxvZC50ZXN0KHhhWzBdLnR5cGUpJiZ6YShYLnBhcmVudE5vZGUpfHxYKSl7eGEuc3BsaWNlKGthLDEpO1I9ZGEubGVuZ3RoJiZNYSh4YSk7aWYoIVIpcmV0dXJuIG9jLmFwcGx5KFcsZGEpLFc7YnJlYWt9fX0oeWF8fENiKFIsSWEpKShkYSxYLCFzYixXLCFYfHxvZC50ZXN0KFIpJiZ6YShYLnBhcmVudE5vZGUpfHxYKTtyZXR1cm4gV307SGEuc29ydFN0YWJsZT1nYi5zcGxpdCgiIikuc29ydChiYikuam9pbigiIik9PT1nYjtIYS5kZXRlY3REdXBsaWNhdGVzPSEhamI7bmIoKTsKSGEuc29ydERldGFjaGVkPU4oZnVuY3Rpb24oUil7cmV0dXJuIFIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oTGEuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKSkmMX0pO04oZnVuY3Rpb24oUil7Ui5pbm5lckhUTUw9Ilx4M2NhIGhyZWZceDNkJyMnXHgzZVx4M2MvYVx4M2UiO3JldHVybiIjIj09PVIuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxRKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihSLFgsVyl7aWYoIVcpcmV0dXJuIFIuZ2V0QXR0cmlidXRlKFgsInR5cGUiPT09WC50b0xvd2VyQ2FzZSgpPzE6Mil9KTtIYS5hdHRyaWJ1dGVzJiZOKGZ1bmN0aW9uKFIpe1IuaW5uZXJIVE1MPSJceDNjaW5wdXQvXHgzZSI7Ui5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKTtyZXR1cm4iIj09PVIuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8USgidmFsdWUiLGZ1bmN0aW9uKFIsWCxXKXtpZighVyYmImlucHV0Ij09PVIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gUi5kZWZhdWx0VmFsdWV9KTsKTihmdW5jdGlvbihSKXtyZXR1cm4gbnVsbD09Ui5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8USgiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLGZ1bmN0aW9uKFIsWCxXKXt2YXIgZGE7aWYoIVcpcmV0dXJuITA9PT1SW1hdP1gudG9Mb3dlckNhc2UoKTooZGE9Ui5nZXRBdHRyaWJ1dGVOb2RlKFgpKSYmZGEuc3BlY2lmaWVkP2RhLnZhbHVlOm51bGx9KTtyZXR1cm4geX0oYSk7TC5maW5kPUpjO0wuZXhwcj1KYy5zZWxlY3RvcnM7TC5leHByWyI6Il09TC5leHByLnBzZXVkb3M7TC51bmlxdWVTb3J0PUwudW5pcXVlPUpjLnVuaXF1ZVNvcnQ7TC50ZXh0PUpjLmdldFRleHQ7TC5pc1hNTERvYz1KYy5pc1hNTDtMLmNvbnRhaW5zPUpjLmNvbnRhaW5zO0wuZXNjYXBlU2VsZWN0b3I9SmMuZXNjYXBlO3ZhciBUYz0KZnVuY3Rpb24ocix5LEMpe2Zvcih2YXIgSz1bXSxOPXZvaWQgMCE9PUM7KHI9clt5XSkmJjkhPT1yLm5vZGVUeXBlOylpZigxPT09ci5ub2RlVHlwZSl7aWYoTiYmTChyKS5pcyhDKSlicmVhaztLLnB1c2gocil9cmV0dXJuIEt9LEtkPWZ1bmN0aW9uKHIseSl7Zm9yKHZhciBDPVtdO3I7cj1yLm5leHRTaWJsaW5nKTE9PT1yLm5vZGVUeXBlJiZyIT09eSYmQy5wdXNoKHIpO3JldHVybiBDfSxnZT1MLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LGhlPS9ePChbYS16XVteXC9cMD46XHgyMFx0XHJcblxmXSopW1x4MjBcdFxyXG5cZl0qXC8/Pig/OjxcL1wxPnwpJC9pO0wuZmlsdGVyPWZ1bmN0aW9uKHIseSxDKXt2YXIgSz15WzBdO0MmJihyPSI6bm90KCIrcisiKSIpO3JldHVybiAxPT09eS5sZW5ndGgmJjE9PT1LLm5vZGVUeXBlP0wuZmluZC5tYXRjaGVzU2VsZWN0b3IoSyxyKT9bS106W106TC5maW5kLm1hdGNoZXMocixMLmdyZXAoeSxmdW5jdGlvbihOKXtyZXR1cm4gMT09PU4ubm9kZVR5cGV9KSl9OwpMLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihyKXt2YXIgeSxDLEs9dGhpcy5sZW5ndGgsTj10aGlzO2lmKCJzdHJpbmciIT09dHlwZW9mIHIpcmV0dXJuIHRoaXMucHVzaFN0YWNrKEwocikuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHk9MDt5PEs7eSsrKWlmKEwuY29udGFpbnMoTlt5XSx0aGlzKSlyZXR1cm4hMH0pKTtDPXRoaXMucHVzaFN0YWNrKFtdKTtmb3IoeT0wO3k8Szt5KyspTC5maW5kKHIsTlt5XSxDKTtyZXR1cm4gMTxLP0wudW5pcXVlU29ydChDKTpDfSxmaWx0ZXI6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGModGhpcyxyfHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGModGhpcyxyfHxbXSwhMCkpfSxpczpmdW5jdGlvbihyKXtyZXR1cm4hIWModGhpcywic3RyaW5nIj09PXR5cGVvZiByJiZnZS50ZXN0KHIpP0wocik6cnx8W10sITEpLmxlbmd0aH19KTt2YXIgaWUsT2U9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0rKSkkLzsKKEwuZm4uaW5pdD1mdW5jdGlvbihyLHksQyl7dmFyIEs7aWYoIXIpcmV0dXJuIHRoaXM7Qz1DfHxpZTtpZigic3RyaW5nIj09PXR5cGVvZiByKXtLPSJceDNjIj09PXJbMF0mJiJceDNlIj09PXJbci5sZW5ndGgtMV0mJjM8PXIubGVuZ3RoP1tudWxsLHIsbnVsbF06T2UuZXhlYyhyKTtpZighS3x8IUtbMV0mJnkpcmV0dXJuIXl8fHkuanF1ZXJ5Pyh5fHxDKS5maW5kKHIpOnRoaXMuY29uc3RydWN0b3IoeSkuZmluZChyKTtpZihLWzFdKXtpZih5PXkgaW5zdGFuY2VvZiBMP3lbMF06eSxMLm1lcmdlKHRoaXMsTC5wYXJzZUhUTUwoS1sxXSx5JiZ5Lm5vZGVUeXBlP3kub3duZXJEb2N1bWVudHx8eTpTYSwhMCkpLGhlLnRlc3QoS1sxXSkmJkwuaXNQbGFpbk9iamVjdCh5KSlmb3IoSyBpbiB5KWlmKFZhKHRoaXNbS10pKXRoaXNbS10oeVtLXSk7ZWxzZSB0aGlzLmF0dHIoSyx5W0tdKX1lbHNlIGlmKHI9U2EuZ2V0RWxlbWVudEJ5SWQoS1syXSkpdGhpc1swXT1yLHRoaXMubGVuZ3RoPTE7CnJldHVybiB0aGlzfXJldHVybiByLm5vZGVUeXBlPyh0aGlzWzBdPXIsdGhpcy5sZW5ndGg9MSx0aGlzKTpWYShyKT92b2lkIDAhPT1DLnJlYWR5P0MucmVhZHkocik6cihMKTpMLm1ha2VBcnJheShyLHRoaXMpfSkucHJvdG90eXBlPUwuZm47aWU9TChTYSk7dmFyIGplPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFBlPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O0wuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24ocil7dmFyIHk9TChyLHRoaXMpLEM9eS5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBLPTA7SzxDO0srKylpZihMLmNvbnRhaW5zKHRoaXMseVtLXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihyLHkpe3ZhciBDLEs9MCxOPXRoaXMubGVuZ3RoLFE9W10sUz0ic3RyaW5nIiE9PXR5cGVvZiByJiZMKHIpO2lmKCFnZS50ZXN0KHIpKWZvcig7SzxOO0srKylmb3IoQz10aGlzW0tdO0MmJkMhPT0KeTtDPUMucGFyZW50Tm9kZSlpZigxMT5DLm5vZGVUeXBlJiYoUz8tMTxTLmluZGV4KEMpOjE9PT1DLm5vZGVUeXBlJiZMLmZpbmQubWF0Y2hlc1NlbGVjdG9yKEMscikpKXtRLnB1c2goQyk7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKDE8US5sZW5ndGg/TC51bmlxdWVTb3J0KFEpOlEpfSxpbmRleDpmdW5jdGlvbihyKXtyZXR1cm4gcj8ic3RyaW5nIj09PXR5cGVvZiByP1FjLmNhbGwoTChyKSx0aGlzWzBdKTpRYy5jYWxsKHRoaXMsci5qcXVlcnk/clswXTpyKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihyLHkpe3JldHVybiB0aGlzLnB1c2hTdGFjayhMLnVuaXF1ZVNvcnQoTC5tZXJnZSh0aGlzLmdldCgpLEwocix5KSkpKX0sYWRkQmFjazpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09cj90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihyKSl9fSk7CkwuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKHIpe3JldHVybihyPXIucGFyZW50Tm9kZSkmJjExIT09ci5ub2RlVHlwZT9yOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24ocil7cmV0dXJuIFRjKHIsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKHIseSxDKXtyZXR1cm4gVGMociwicGFyZW50Tm9kZSIsQyl9LG5leHQ6ZnVuY3Rpb24ocil7cmV0dXJuIGIociwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihyKXtyZXR1cm4gYihyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihyKXtyZXR1cm4gVGMociwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihyKXtyZXR1cm4gVGMociwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihyLHksQyl7cmV0dXJuIFRjKHIsIm5leHRTaWJsaW5nIixDKX0scHJldlVudGlsOmZ1bmN0aW9uKHIseSxDKXtyZXR1cm4gVGMociwicHJldmlvdXNTaWJsaW5nIixDKX0sc2libGluZ3M6ZnVuY3Rpb24ocil7cmV0dXJuIEtkKChyLnBhcmVudE5vZGV8fAp7fSkuZmlyc3RDaGlsZCxyKX0sY2hpbGRyZW46ZnVuY3Rpb24ocil7cmV0dXJuIEtkKHIuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKHIpe2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIHIuY29udGVudERvY3VtZW50KXJldHVybiByLmNvbnRlbnREb2N1bWVudDtkKHIsInRlbXBsYXRlIikmJihyPXIuY29udGVudHx8cik7cmV0dXJuIEwubWVyZ2UoW10sci5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKHIseSl7TC5mbltyXT1mdW5jdGlvbihDLEspe3ZhciBOPUwubWFwKHRoaXMseSxDKTsiVW50aWwiIT09ci5zbGljZSgtNSkmJihLPUMpO0smJiJzdHJpbmciPT09dHlwZW9mIEsmJihOPUwuZmlsdGVyKEssTikpOzE8dGhpcy5sZW5ndGgmJihQZVtyXXx8TC51bmlxdWVTb3J0KE4pLGplLnRlc3QocikmJk4ucmV2ZXJzZSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soTil9fSk7dmFyIGhjPS9bXlx4MjBcdFxyXG5cZl0rL2c7TC5DYWxsYmFja3M9ZnVuY3Rpb24ocil7cj0ic3RyaW5nIj09PQp0eXBlb2Ygcj9nKHIpOkwuZXh0ZW5kKHt9LHIpO3ZhciB5LEMsSyxOLFE9W10sUz1bXSxiYT0tMSwkPWZ1bmN0aW9uKCl7Tj1OfHxyLm9uY2U7Zm9yKEs9eT0hMDtTLmxlbmd0aDtiYT0tMSlmb3IoQz1TLnNoaWZ0KCk7KytiYTxRLmxlbmd0aDspITE9PT1RW2JhXS5hcHBseShDWzBdLENbMV0pJiZyLnN0b3BPbkZhbHNlJiYoYmE9US5sZW5ndGgsQz0hMSk7ci5tZW1vcnl8fChDPSExKTt5PSExO04mJihRPUM/W106IiIpfSxqYT17YWRkOmZ1bmN0aW9uKCl7USYmKEMmJiF5JiYoYmE9US5sZW5ndGgtMSxTLnB1c2goQykpLGZ1bmN0aW9uIHphKGhhKXtMLmVhY2goaGEsZnVuY3Rpb24oTWEsUmEpe1ZhKFJhKT9yLnVuaXF1ZSYmamEuaGFzKFJhKXx8US5wdXNoKFJhKTpSYSYmUmEubGVuZ3RoJiYic3RyaW5nIiE9PXQoUmEpJiZ6YShSYSl9KX0oYXJndW1lbnRzKSxDJiYheSYmJCgpKTtyZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7TC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihzYSwKemEpe2Zvcih2YXIgaGE7LTE8KGhhPUwuaW5BcnJheSh6YSxRLGhhKSk7KVEuc3BsaWNlKGhhLDEpLGhhPD1iYSYmYmEtLX0pO3JldHVybiB0aGlzfSxoYXM6ZnVuY3Rpb24oc2Epe3JldHVybiBzYT8tMTxMLmluQXJyYXkoc2EsUSk6MDxRLmxlbmd0aH0sZW1wdHk6ZnVuY3Rpb24oKXtRJiYoUT1bXSk7cmV0dXJuIHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtOPVM9W107UT1DPSIiO3JldHVybiB0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFRfSxsb2NrOmZ1bmN0aW9uKCl7Tj1TPVtdO0N8fHl8fChRPUM9IiIpO3JldHVybiB0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIU59LGZpcmVXaXRoOmZ1bmN0aW9uKHNhLHphKXtOfHwoemE9emF8fFtdLHphPVtzYSx6YS5zbGljZT96YS5zbGljZSgpOnphXSxTLnB1c2goemEpLHl8fCQoKSk7cmV0dXJuIHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtqYS5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFLfX07CnJldHVybiBqYX07TC5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKHIpe3ZhciB5PVtbIm5vdGlmeSIsInByb2dyZXNzIixMLkNhbGxiYWNrcygibWVtb3J5IiksTC5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLEwuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLEwuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixMLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxMLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxDPSJwZW5kaW5nIixLPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBDfSxhbHdheXM6ZnVuY3Rpb24oKXtOLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oUSl7cmV0dXJuIEsudGhlbihudWxsLFEpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIFE9YXJndW1lbnRzO3JldHVybiBMLkRlZmVycmVkKGZ1bmN0aW9uKFMpe0wuZWFjaCh5LApmdW5jdGlvbihiYSwkKXt2YXIgamE9VmEoUVskWzRdXSkmJlFbJFs0XV07TlskWzFdXShmdW5jdGlvbigpe3ZhciBzYT1qYSYmamEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHNhJiZWYShzYS5wcm9taXNlKSlzYS5wcm9taXNlKCkucHJvZ3Jlc3MoUy5ub3RpZnkpLmRvbmUoUy5yZXNvbHZlKS5mYWlsKFMucmVqZWN0KTtlbHNlIFNbJFswXSsiV2l0aCJdKHRoaXMsamE/W3NhXTphcmd1bWVudHMpfSl9KTtRPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24oUSxTLGJhKXtmdW5jdGlvbiAkKHNhLHphLGhhLE1hKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgUmE9dGhpcyxHYj1hcmd1bWVudHMsSmI9ZnVuY3Rpb24oKXt2YXIgemIsamM7aWYoIShzYTxqYSkpe3piPWhhLmFwcGx5KFJhLEdiKTtpZih6Yj09PXphLnByb21pc2UoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24iKTtqYz16YiYmKCJvYmplY3QiPT09dHlwZW9mIHpifHwiZnVuY3Rpb24iPT09CnR5cGVvZiB6YikmJnpiLnRoZW47VmEoamMpP01hP2pjLmNhbGwoemIsJChqYSx6YSxlLE1hKSwkKGphLHphLGssTWEpKTooamErKyxqYy5jYWxsKHpiLCQoamEsemEsZSxNYSksJChqYSx6YSxrLE1hKSwkKGphLHphLGUsemEubm90aWZ5V2l0aCkpKTooaGEhPT1lJiYoUmE9dm9pZCAwLEdiPVt6Yl0pLChNYXx8emEucmVzb2x2ZVdpdGgpKFJhLEdiKSl9fSxSYj1NYT9KYjpmdW5jdGlvbigpe3RyeXtKYigpfWNhdGNoKHpiKXtMLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJkwuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayh6YixSYi5zdGFja1RyYWNlKSxzYSsxPj1qYSYmKGhhIT09ayYmKFJhPXZvaWQgMCxHYj1bemJdKSx6YS5yZWplY3RXaXRoKFJhLEdiKSl9fTtzYT9SYigpOihMLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKFJiLnN0YWNrVHJhY2U9TC5EZWZlcnJlZC5nZXRTdGFja0hvb2soKSksYS5zZXRUaW1lb3V0KFJiKSl9fXZhciBqYT0wO3JldHVybiBMLkRlZmVycmVkKGZ1bmN0aW9uKHNhKXt5WzBdWzNdLmFkZCgkKDAsCnNhLFZhKGJhKT9iYTplLHNhLm5vdGlmeVdpdGgpKTt5WzFdWzNdLmFkZCgkKDAsc2EsVmEoUSk/UTplKSk7eVsyXVszXS5hZGQoJCgwLHNhLFZhKFMpP1M6aykpfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKFEpe3JldHVybiBudWxsIT1RP0wuZXh0ZW5kKFEsSyk6S319LE49e307TC5lYWNoKHksZnVuY3Rpb24oUSxTKXt2YXIgYmE9U1syXSwkPVNbNV07S1tTWzFdXT1iYS5hZGQ7JCYmYmEuYWRkKGZ1bmN0aW9uKCl7Qz0kfSx5WzMtUV1bMl0uZGlzYWJsZSx5WzMtUV1bM10uZGlzYWJsZSx5WzBdWzJdLmxvY2sseVswXVszXS5sb2NrKTtiYS5hZGQoU1szXS5maXJlKTtOW1NbMF1dPWZ1bmN0aW9uKCl7TltTWzBdKyJXaXRoIl0odGhpcz09PU4/dm9pZCAwOnRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc307TltTWzBdKyJXaXRoIl09YmEuZmlyZVdpdGh9KTtLLnByb21pc2UoTik7ciYmci5jYWxsKE4sTik7cmV0dXJuIE59LHdoZW46ZnVuY3Rpb24ocil7dmFyIHk9YXJndW1lbnRzLmxlbmd0aCwKQz15LEs9QXJyYXkoQyksTj1ZYi5jYWxsKGFyZ3VtZW50cyksUT1MLkRlZmVycmVkKCksUz1mdW5jdGlvbihiYSl7cmV0dXJuIGZ1bmN0aW9uKCQpe0tbYmFdPXRoaXM7TltiYV09MTxhcmd1bWVudHMubGVuZ3RoP1liLmNhbGwoYXJndW1lbnRzKTokOy0teXx8US5yZXNvbHZlV2l0aChLLE4pfX07aWYoMT49eSYmKG0ocixRLmRvbmUoUyhDKSkucmVzb2x2ZSxRLnJlamVjdCwheSksInBlbmRpbmciPT09US5zdGF0ZSgpfHxWYShOW0NdJiZOW0NdLnRoZW4pKSlyZXR1cm4gUS50aGVuKCk7Zm9yKDtDLS07KW0oTltDXSxTKEMpLFEucmVqZWN0KTtyZXR1cm4gUS5wcm9taXNlKCl9fSk7dmFyIFFlPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO0wuRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbihyLHkpe2EuY29uc29sZSYmYS5jb25zb2xlLndhcm4mJnImJlFlLnRlc3Qoci5uYW1lKSYmYS5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIrCnIubWVzc2FnZSxyLnN0YWNrLHkpfTtMLnJlYWR5RXhjZXB0aW9uPWZ1bmN0aW9uKHIpe2Euc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHI7fSl9O3ZhciBMZD1MLkRlZmVycmVkKCk7TC5mbi5yZWFkeT1mdW5jdGlvbihyKXtMZC50aGVuKHIpLmNhdGNoKGZ1bmN0aW9uKHkpe0wucmVhZHlFeGNlcHRpb24oeSl9KTtyZXR1cm4gdGhpc307TC5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlXYWl0OjEscmVhZHk6ZnVuY3Rpb24ocil7KCEwPT09cj8tLUwucmVhZHlXYWl0OkwuaXNSZWFkeSl8fChMLmlzUmVhZHk9ITAsITAhPT1yJiYwPC0tTC5yZWFkeVdhaXR8fExkLnJlc29sdmVXaXRoKFNhLFtMXSkpfX0pO0wucmVhZHkudGhlbj1MZC50aGVuOyJjb21wbGV0ZSI9PT1TYS5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1TYS5yZWFkeVN0YXRlJiYhU2EuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsP2Euc2V0VGltZW91dChMLnJlYWR5KTooU2EuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsCnApLGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscCkpO3ZhciAkYj1mdW5jdGlvbihyLHksQyxLLE4sUSxTKXt2YXIgYmE9MCwkPXIubGVuZ3RoLGphPW51bGw9PUM7aWYoIm9iamVjdCI9PT10KEMpKWZvcihiYSBpbiBOPSEwLEMpJGIocix5LGJhLENbYmFdLCEwLFEsUyk7ZWxzZSBpZih2b2lkIDAhPT1LJiYoTj0hMCxWYShLKXx8KFM9ITApLGphJiYoUz8oeS5jYWxsKHIsSykseT1udWxsKTooamE9eSx5PWZ1bmN0aW9uKHNhLHphLGhhKXtyZXR1cm4gamEuY2FsbChMKHNhKSxoYSl9KSkseSkpZm9yKDtiYTwkO2JhKyspeShyW2JhXSxDLFM/SzpLLmNhbGwocltiYV0sYmEseShyW2JhXSxDKSkpO3JldHVybiBOP3I6amE/eS5jYWxsKHIpOiQ/eShyWzBdLEMpOlF9LEtlPS9eLW1zLS8sTGU9Ly0oW2Etel0pL2cscmQ9ZnVuY3Rpb24ocil7cmV0dXJuIDE9PT1yLm5vZGVUeXBlfHw5PT09ci5ub2RlVHlwZXx8IStyLm5vZGVUeXBlfTtoLnVpZD0xO2gucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbihyKXt2YXIgeT0Kclt0aGlzLmV4cGFuZG9dO3l8fCh5PXt9LHJkKHIpJiYoci5ub2RlVHlwZT9yW3RoaXMuZXhwYW5kb109eTpPYmplY3QuZGVmaW5lUHJvcGVydHkocix0aGlzLmV4cGFuZG8se3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSkpKTtyZXR1cm4geX0sc2V0OmZ1bmN0aW9uKHIseSxDKXt2YXIgSztyPXRoaXMuY2FjaGUocik7aWYoInN0cmluZyI9PT10eXBlb2YgeSlyW2woeSldPUM7ZWxzZSBmb3IoSyBpbiB5KXJbbChLKV09eVtLXTtyZXR1cm4gcn0sZ2V0OmZ1bmN0aW9uKHIseSl7cmV0dXJuIHZvaWQgMD09PXk/dGhpcy5jYWNoZShyKTpyW3RoaXMuZXhwYW5kb10mJnJbdGhpcy5leHBhbmRvXVtsKHkpXX0sYWNjZXNzOmZ1bmN0aW9uKHIseSxDKXtpZih2b2lkIDA9PT15fHx5JiYic3RyaW5nIj09PXR5cGVvZiB5JiZ2b2lkIDA9PT1DKXJldHVybiB0aGlzLmdldChyLHkpO3RoaXMuc2V0KHIseSxDKTtyZXR1cm4gdm9pZCAwIT09Qz9DOnl9LHJlbW92ZTpmdW5jdGlvbihyLHkpe3ZhciBDLApLPXJbdGhpcy5leHBhbmRvXTtpZih2b2lkIDAhPT1LKXtpZih2b2lkIDAhPT15KWZvcihBcnJheS5pc0FycmF5KHkpP3k9eS5tYXAobCk6KHk9bCh5KSx5PXkgaW4gSz9beV06eS5tYXRjaChoYyl8fFtdKSxDPXkubGVuZ3RoO0MtLTspZGVsZXRlIEtbeVtDXV07aWYodm9pZCAwPT09eXx8TC5pc0VtcHR5T2JqZWN0KEspKXIubm9kZVR5cGU/clt0aGlzLmV4cGFuZG9dPXZvaWQgMDpkZWxldGUgclt0aGlzLmV4cGFuZG9dfX0saGFzRGF0YTpmdW5jdGlvbihyKXtyPXJbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09ciYmIUwuaXNFbXB0eU9iamVjdChyKX19O3ZhciBLYT1uZXcgaCxYYT1uZXcgaCxwYj0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLE1lPS9bQS1aXS9nO0wuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKHIpe3JldHVybiBYYS5oYXNEYXRhKHIpfHxLYS5oYXNEYXRhKHIpfSxkYXRhOmZ1bmN0aW9uKHIseSxDKXtyZXR1cm4gWGEuYWNjZXNzKHIseSxDKX0sCnJlbW92ZURhdGE6ZnVuY3Rpb24ocix5KXtYYS5yZW1vdmUocix5KX0sX2RhdGE6ZnVuY3Rpb24ocix5LEMpe3JldHVybiBLYS5hY2Nlc3Mocix5LEMpfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihyLHkpe0thLnJlbW92ZShyLHkpfX0pO0wuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKHIseSl7dmFyIEMsSyxOLFE9dGhpc1swXSxTPVEmJlEuYXR0cmlidXRlcztpZih2b2lkIDA9PT1yKXtpZih0aGlzLmxlbmd0aCYmKE49WGEuZ2V0KFEpLDE9PT1RLm5vZGVUeXBlJiYhS2EuZ2V0KFEsImhhc0RhdGFBdHRycyIpKSl7Zm9yKEM9Uy5sZW5ndGg7Qy0tOylTW0NdJiYoSz1TW0NdLm5hbWUsMD09PUsuaW5kZXhPZigiZGF0YS0iKSYmKEs9bChLLnNsaWNlKDUpKSx1KFEsSyxOW0tdKSkpO0thLnNldChRLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gTn1yZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiByP3RoaXMuZWFjaChmdW5jdGlvbigpe1hhLnNldCh0aGlzLHIpfSk6JGIodGhpcyxmdW5jdGlvbihiYSl7dmFyICQ7CmlmKFEmJnZvaWQgMD09PWJhKXskPVhhLmdldChRLHIpO2lmKHZvaWQgMCE9PSQpcmV0dXJuICQ7JD11KFEscik7aWYodm9pZCAwIT09JClyZXR1cm4gJH1lbHNlIHRoaXMuZWFjaChmdW5jdGlvbigpe1hhLnNldCh0aGlzLHIsYmEpfSl9LG51bGwseSwxPGFyZ3VtZW50cy5sZW5ndGgsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1hhLnJlbW92ZSh0aGlzLHIpfSl9fSk7TC5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKHIseSxDKXt2YXIgSztpZihyKXJldHVybiB5PSh5fHwiZngiKSsicXVldWUiLEs9S2EuZ2V0KHIseSksQyYmKCFLfHxBcnJheS5pc0FycmF5KEMpP0s9S2EuYWNjZXNzKHIseSxMLm1ha2VBcnJheShDKSk6Sy5wdXNoKEMpKSxLfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihyLHkpe3k9eXx8ImZ4Ijt2YXIgQz1MLnF1ZXVlKHIseSksSz1DLmxlbmd0aCxOPUMuc2hpZnQoKSxRPUwuX3F1ZXVlSG9va3Mocix5KSxTPQpmdW5jdGlvbigpe0wuZGVxdWV1ZShyLHkpfTsiaW5wcm9ncmVzcyI9PT1OJiYoTj1DLnNoaWZ0KCksSy0tKTtOJiYoImZ4Ij09PXkmJkMudW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBRLnN0b3AsTi5jYWxsKHIsUyxRKSk7IUsmJlEmJlEuZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihyLHkpe3ZhciBDPXkrInF1ZXVlSG9va3MiO3JldHVybiBLYS5nZXQocixDKXx8S2EuYWNjZXNzKHIsQyx7ZW1wdHk6TC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7S2EucmVtb3ZlKHIsW3krInF1ZXVlIixDXSl9KX0pfX0pO0wuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihyLHkpe3ZhciBDPTI7InN0cmluZyIhPT10eXBlb2YgciYmKHk9cixyPSJmeCIsQy0tKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDxDP0wucXVldWUodGhpc1swXSxyKTp2b2lkIDA9PT15P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIEs9TC5xdWV1ZSh0aGlzLHIseSk7CkwuX3F1ZXVlSG9va3ModGhpcyxyKTsiZngiPT09ciYmImlucHJvZ3Jlc3MiIT09S1swXSYmTC5kZXF1ZXVlKHRoaXMscil9KX0sZGVxdWV1ZTpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5kZXF1ZXVlKHRoaXMscil9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5xdWV1ZShyfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihyLHkpe3ZhciBDLEs9MSxOPUwuRGVmZXJyZWQoKSxRPXRoaXMsUz10aGlzLmxlbmd0aCxiYT1mdW5jdGlvbigpey0tS3x8Ti5yZXNvbHZlV2l0aChRLFtRXSl9OyJzdHJpbmciIT09dHlwZW9mIHImJih5PXIscj12b2lkIDApO2ZvcihyPXJ8fCJmeCI7Uy0tOykoQz1LYS5nZXQoUVtTXSxyKyJxdWV1ZUhvb2tzIikpJiZDLmVtcHR5JiYoSysrLEMuZW1wdHkuYWRkKGJhKSk7YmEoKTtyZXR1cm4gTi5wcm9taXNlKHkpfX0pO3ZhciBrZT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSwKV2M9UmVnRXhwKCJeKD86KFsrLV0pXHgzZHwpKCIra2UrIikoW2EteiVdKikkIiwiaSIpLFpiPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sYWQ9U2EuZG9jdW1lbnRFbGVtZW50LHpjPWZ1bmN0aW9uKHIpe3JldHVybiBMLmNvbnRhaW5zKHIub3duZXJEb2N1bWVudCxyKX0sYmQ9e2NvbXBvc2VkOiEwfTthZC5hdHRhY2hTaGFkb3cmJih6Yz1mdW5jdGlvbihyKXtyZXR1cm4gTC5jb250YWlucyhyLm93bmVyRG9jdW1lbnQscil8fHIuZ2V0Um9vdE5vZGUoYmQpPT09ci5vd25lckRvY3VtZW50fSk7dmFyIHRjPWZ1bmN0aW9uKHIseSl7cj15fHxyO3JldHVybiJub25lIj09PXIuc3R5bGUuZGlzcGxheXx8IiI9PT1yLnN0eWxlLmRpc3BsYXkmJnpjKHIpJiYibm9uZSI9PT1MLmNzcyhyLCJkaXNwbGF5Iil9LGxlPWZ1bmN0aW9uKHIseSxDLEspe3ZhciBOLFE9e307Zm9yKE4gaW4geSlRW05dPXIuc3R5bGVbTl0sci5zdHlsZVtOXT15W05dO0M9Qy5hcHBseShyLEt8fFtdKTtmb3IoTiBpbiB5KXIuc3R5bGVbTl09ClFbTl07cmV0dXJuIEN9LHpkPXt9O0wuZm4uZXh0ZW5kKHtzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHoodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4geih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKHIpe3JldHVybiJib29sZWFuIj09PXR5cGVvZiByP3I/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGModGhpcyk/TCh0aGlzKS5zaG93KCk6TCh0aGlzKS5oaWRlKCl9KX19KTt2YXIgY2Q9L14oPzpjaGVja2JveHxyYWRpbykkL2ksaWM9LzwoW2Etel1bXlwvXDA+XHgyMFx0XHJcblxmXSopL2ksQWM9L14kfF5tb2R1bGUkfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHJhPXtvcHRpb246WzEsIlx4M2NzZWxlY3QgbXVsdGlwbGVceDNkJ211bHRpcGxlJ1x4M2UiLCJceDNjL3NlbGVjdFx4M2UiXSx0aGVhZDpbMSwiXHgzY3RhYmxlXHgzZSIsIlx4M2MvdGFibGVceDNlIl0sY29sOlsyLCJceDNjdGFibGVceDNlXHgzY2NvbGdyb3VwXHgzZSIsIlx4M2MvY29sZ3JvdXBceDNlXHgzYy90YWJsZVx4M2UiXSwKdHI6WzIsIlx4M2N0YWJsZVx4M2VceDNjdGJvZHlceDNlIiwiXHgzYy90Ym9keVx4M2VceDNjL3RhYmxlXHgzZSJdLHRkOlszLCJceDNjdGFibGVceDNlXHgzY3Rib2R5XHgzZVx4M2N0clx4M2UiLCJceDNjL3RyXHgzZVx4M2MvdGJvZHlceDNlXHgzYy90YWJsZVx4M2UiXSxfZGVmYXVsdDpbMCwiIiwiIl19O3JhLm9wdGdyb3VwPXJhLm9wdGlvbjtyYS50Ym9keT1yYS50Zm9vdD1yYS5jb2xncm91cD1yYS5jYXB0aW9uPXJhLnRoZWFkO3JhLnRoPXJhLnRkO3ZhciBUPS88fCYjP1x3KzsvOyhmdW5jdGlvbigpe3ZhciByPVNhLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5hcHBlbmRDaGlsZChTYS5jcmVhdGVFbGVtZW50KCJkaXYiKSkseT1TYS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3kuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKTt5LnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTt5LnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKTtyLmFwcGVuZENoaWxkKHkpO2tiLmNoZWNrQ2xvbmU9CnIuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkO3IuaW5uZXJIVE1MPSJceDNjdGV4dGFyZWFceDNleFx4M2MvdGV4dGFyZWFceDNlIjtrYi5ub0Nsb25lQ2hlY2tlZD0hIXIuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlfSkoKTt2YXIgJGE9L15rZXkvLG9iPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxRYT0vXihbXi5dKikoPzpcLiguKyl8KS87TC5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihyLHksQyxLLE4pe3ZhciBRLFMsYmEsJCxqYSxzYSx6YSxoYSxNYTtpZihqYT1LYS5nZXQocikpZm9yKEMuaGFuZGxlciYmKFE9QyxDPVEuaGFuZGxlcixOPVEuc2VsZWN0b3IpLE4mJkwuZmluZC5tYXRjaGVzU2VsZWN0b3IoYWQsTiksQy5ndWlkfHwoQy5ndWlkPUwuZ3VpZCsrKSwoJD1qYS5ldmVudHMpfHwoJD1qYS5ldmVudHM9e30pLChTPWphLmhhbmRsZSl8fChTPWphLmhhbmRsZT0KZnVuY3Rpb24oUmEpe3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIEwmJkwuZXZlbnQudHJpZ2dlcmVkIT09UmEudHlwZT9MLmV2ZW50LmRpc3BhdGNoLmFwcGx5KHIsYXJndW1lbnRzKTp2b2lkIDB9KSx5PSh5fHwiIikubWF0Y2goaGMpfHxbIiJdLGphPXkubGVuZ3RoO2phLS07KWJhPVFhLmV4ZWMoeVtqYV0pfHxbXSxoYT1zYT1iYVsxXSxNYT0oYmFbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxoYSYmKGJhPUwuZXZlbnQuc3BlY2lhbFtoYV18fHt9LGhhPShOP2JhLmRlbGVnYXRlVHlwZTpiYS5iaW5kVHlwZSl8fGhhLGJhPUwuZXZlbnQuc3BlY2lhbFtoYV18fHt9LHNhPUwuZXh0ZW5kKHt0eXBlOmhhLG9yaWdUeXBlOnNhLGRhdGE6SyxoYW5kbGVyOkMsZ3VpZDpDLmd1aWQsc2VsZWN0b3I6TixuZWVkc0NvbnRleHQ6TiYmTC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KE4pLG5hbWVzcGFjZTpNYS5qb2luKCIuIil9LFEpLCh6YT0kW2hhXSl8fCh6YT0kW2hhXT1bXSx6YS5kZWxlZ2F0ZUNvdW50PQowLGJhLnNldHVwJiYhMSE9PWJhLnNldHVwLmNhbGwocixLLE1hLFMpfHxyLmFkZEV2ZW50TGlzdGVuZXImJnIuYWRkRXZlbnRMaXN0ZW5lcihoYSxTKSksYmEuYWRkJiYoYmEuYWRkLmNhbGwocixzYSksc2EuaGFuZGxlci5ndWlkfHwoc2EuaGFuZGxlci5ndWlkPUMuZ3VpZCkpLE4/emEuc3BsaWNlKHphLmRlbGVnYXRlQ291bnQrKywwLHNhKTp6YS5wdXNoKHNhKSxMLmV2ZW50Lmdsb2JhbFtoYV09ITApfSxyZW1vdmU6ZnVuY3Rpb24ocix5LEMsSyxOKXt2YXIgUSxTLGJhLCQsamEsc2EsemEsaGEsTWEsUmEsR2IsSmI9S2EuaGFzRGF0YShyKSYmS2EuZ2V0KHIpO2lmKEpiJiYoJD1KYi5ldmVudHMpKXt5PSh5fHwiIikubWF0Y2goaGMpfHxbIiJdO2ZvcihqYT15Lmxlbmd0aDtqYS0tOylpZihiYT1RYS5leGVjKHlbamFdKXx8W10sTWE9R2I9YmFbMV0sUmE9KGJhWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksTWEpe3phPUwuZXZlbnQuc3BlY2lhbFtNYV18fHt9O01hPShLP3phLmRlbGVnYXRlVHlwZToKemEuYmluZFR5cGUpfHxNYTtoYT0kW01hXXx8W107YmE9YmFbMl0mJlJlZ0V4cCgiKF58XFwuKSIrUmEuam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik7Zm9yKFM9UT1oYS5sZW5ndGg7US0tOylzYT1oYVtRXSwhTiYmR2IhPT1zYS5vcmlnVHlwZXx8QyYmQy5ndWlkIT09c2EuZ3VpZHx8YmEmJiFiYS50ZXN0KHNhLm5hbWVzcGFjZSl8fEsmJiEoSz09PXNhLnNlbGVjdG9yfHwiKioiPT09SyYmc2Euc2VsZWN0b3IpfHwoaGEuc3BsaWNlKFEsMSksc2Euc2VsZWN0b3ImJmhhLmRlbGVnYXRlQ291bnQtLSx6YS5yZW1vdmUmJnphLnJlbW92ZS5jYWxsKHIsc2EpKTtTJiYhaGEubGVuZ3RoJiYoemEudGVhcmRvd24mJiExIT09emEudGVhcmRvd24uY2FsbChyLFJhLEpiLmhhbmRsZSl8fEwucmVtb3ZlRXZlbnQocixNYSxKYi5oYW5kbGUpLGRlbGV0ZSAkW01hXSl9ZWxzZSBmb3IoTWEgaW4gJClMLmV2ZW50LnJlbW92ZShyLE1hK3lbamFdLEMsSywhMCk7TC5pc0VtcHR5T2JqZWN0KCQpJiYKS2EucmVtb3ZlKHIsImhhbmRsZSBldmVudHMiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKHIpe3ZhciB5PUwuZXZlbnQuZml4KHIpLEMsSyxOLFEsUyxiYT1BcnJheShhcmd1bWVudHMubGVuZ3RoKTtLPShLYS5nZXQodGhpcywiZXZlbnRzIil8fHt9KVt5LnR5cGVdfHxbXTt2YXIgJD1MLmV2ZW50LnNwZWNpYWxbeS50eXBlXXx8e307YmFbMF09eTtmb3IoQz0xO0M8YXJndW1lbnRzLmxlbmd0aDtDKyspYmFbQ109YXJndW1lbnRzW0NdO3kuZGVsZWdhdGVUYXJnZXQ9dGhpcztpZighJC5wcmVEaXNwYXRjaHx8ITEhPT0kLnByZURpc3BhdGNoLmNhbGwodGhpcyx5KSl7Uz1MLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyx5LEspO2ZvcihDPTA7KFE9U1tDKytdKSYmIXkuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspZm9yKHkuY3VycmVudFRhcmdldD1RLmVsZW0sSz0wOyhOPVEuaGFuZGxlcnNbSysrXSkmJiF5LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7KWlmKCF5LnJuYW1lc3BhY2V8fAohMT09PU4ubmFtZXNwYWNlfHx5LnJuYW1lc3BhY2UudGVzdChOLm5hbWVzcGFjZSkpeS5oYW5kbGVPYmo9Tix5LmRhdGE9Ti5kYXRhLE49KChMLmV2ZW50LnNwZWNpYWxbTi5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fE4uaGFuZGxlcikuYXBwbHkoUS5lbGVtLGJhKSx2b2lkIDAhPT1OJiYhMT09PSh5LnJlc3VsdD1OKSYmKHkucHJldmVudERlZmF1bHQoKSx5LnN0b3BQcm9wYWdhdGlvbigpKTskLnBvc3REaXNwYXRjaCYmJC5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLHkpO3JldHVybiB5LnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKHIseSl7dmFyIEMsSyxOLFEsUyxiYT1bXSwkPXkuZGVsZWdhdGVDb3VudCxqYT1yLnRhcmdldDtpZigkJiZqYS5ub2RlVHlwZSYmISgiY2xpY2siPT09ci50eXBlJiYxPD1yLmJ1dHRvbikpZm9yKDtqYSE9PXRoaXM7amE9amEucGFyZW50Tm9kZXx8dGhpcylpZigxPT09amEubm9kZVR5cGUmJigiY2xpY2siIT09ci50eXBlfHwhMCE9PWphLmRpc2FibGVkKSl7UT0KW107Uz17fTtmb3IoQz0wO0M8JDtDKyspSz15W0NdLE49Sy5zZWxlY3RvcisiICIsdm9pZCAwPT09U1tOXSYmKFNbTl09Sy5uZWVkc0NvbnRleHQ/LTE8TChOLHRoaXMpLmluZGV4KGphKTpMLmZpbmQoTix0aGlzLG51bGwsW2phXSkubGVuZ3RoKSxTW05dJiZRLnB1c2goSyk7US5sZW5ndGgmJmJhLnB1c2goe2VsZW06amEsaGFuZGxlcnM6UX0pfSQ8eS5sZW5ndGgmJmJhLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczp5LnNsaWNlKCQpfSk7cmV0dXJuIGJhfSxhZGRQcm9wOmZ1bmN0aW9uKHIseSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEwuRXZlbnQucHJvdG90eXBlLHIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpWYSh5KT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4geSh0aGlzLm9yaWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50W3JdfSxzZXQ6ZnVuY3Rpb24oQyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsCnIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkN9KX19KX0sZml4OmZ1bmN0aW9uKHIpe3JldHVybiByW0wuZXhwYW5kb10/cjpuZXcgTC5FdmVudChyKX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGNsaWNrOntzZXR1cDpmdW5jdGlvbihyKXtyPXRoaXN8fHI7Y2QudGVzdChyLnR5cGUpJiZyLmNsaWNrJiZkKHIsImlucHV0IikmJnZvaWQgMD09PUthLmdldChyLCJjbGljayIpJiZKKHIsImNsaWNrIixCKTtyZXR1cm4hMX0sdHJpZ2dlcjpmdW5jdGlvbihyKXtyPXRoaXN8fHI7Y2QudGVzdChyLnR5cGUpJiZyLmNsaWNrJiZkKHIsImlucHV0IikmJnZvaWQgMD09PUthLmdldChyLCJjbGljayIpJiZKKHIsImNsaWNrIik7cmV0dXJuITB9LF9kZWZhdWx0OmZ1bmN0aW9uKHIpe3I9ci50YXJnZXQ7cmV0dXJuIGNkLnRlc3Qoci50eXBlKSYmci5jbGljayYmZChyLCJpbnB1dCIpJiZLYS5nZXQociwiY2xpY2siKXx8ZChyLCJhIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihyKXt2b2lkIDAhPT0Kci5yZXN1bHQmJnIub3JpZ2luYWxFdmVudCYmKHIub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1yLnJlc3VsdCl9fX19O0wucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24ocix5LEMpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lciYmci5yZW1vdmVFdmVudExpc3RlbmVyKHksQyl9O0wuRXZlbnQ9ZnVuY3Rpb24ocix5KXtpZighKHRoaXMgaW5zdGFuY2VvZiBMLkV2ZW50KSlyZXR1cm4gbmV3IEwuRXZlbnQocix5KTtyJiZyLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1yLHRoaXMudHlwZT1yLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ci5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1yLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ci5yZXR1cm5WYWx1ZT9COkksdGhpcy50YXJnZXQ9ci50YXJnZXQmJjM9PT1yLnRhcmdldC5ub2RlVHlwZT9yLnRhcmdldC5wYXJlbnROb2RlOnIudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD1yLmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PXIucmVsYXRlZFRhcmdldCk6CnRoaXMudHlwZT1yO3kmJkwuZXh0ZW5kKHRoaXMseSk7dGhpcy50aW1lU3RhbXA9ciYmci50aW1lU3RhbXB8fERhdGUubm93KCk7dGhpc1tMLmV4cGFuZG9dPSEwfTtMLkV2ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6TC5FdmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6SSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpJLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOkksaXNTaW11bGF0ZWQ6ITEscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgcj10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9QjtyJiYhdGhpcy5pc1NpbXVsYXRlZCYmci5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgcj10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1CO3ImJiF0aGlzLmlzU2ltdWxhdGVkJiZyLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgcj0KdGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9QjtyJiYhdGhpcy5pc1NpbXVsYXRlZCYmci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTt0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX07TC5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLCJjaGFyIjohMCxjb2RlOiEwLGNoYXJDb2RlOiEwLGtleTohMCxrZXlDb2RlOiEwLGJ1dHRvbjohMCxidXR0b25zOiEwLGNsaWVudFg6ITAsY2xpZW50WTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITAscG9pbnRlcklkOiEwLHBvaW50ZXJUeXBlOiEwLHNjcmVlblg6ITAsc2NyZWVuWTohMCx0YXJnZXRUb3VjaGVzOiEwLHRvRWxlbWVudDohMCx0b3VjaGVzOiEwLHdoaWNoOmZ1bmN0aW9uKHIpe3ZhciB5PQpyLmJ1dHRvbjtyZXR1cm4gbnVsbD09ci53aGljaCYmJGEudGVzdChyLnR5cGUpP251bGwhPXIuY2hhckNvZGU/ci5jaGFyQ29kZTpyLmtleUNvZGU6IXIud2hpY2gmJnZvaWQgMCE9PXkmJm9iLnRlc3Qoci50eXBlKT95JjE/MTp5JjI/Mzp5JjQ/MjowOnIud2hpY2h9fSxMLmV2ZW50LmFkZFByb3ApO0wuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24ocix5KXtMLmV2ZW50LnNwZWNpYWxbcl09e3NldHVwOmZ1bmN0aW9uKCl7Sih0aGlzLHIsTSk7cmV0dXJuITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtKKHRoaXMscik7cmV0dXJuITB9LGRlbGVnYXRlVHlwZTp5fX0pO0wuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24ocix5KXtMLmV2ZW50LnNwZWNpYWxbcl09e2RlbGVnYXRlVHlwZTp5LGJpbmRUeXBlOnksCmhhbmRsZTpmdW5jdGlvbihDKXt2YXIgSyxOPUMucmVsYXRlZFRhcmdldCxRPUMuaGFuZGxlT2JqO2lmKCFOfHxOIT09dGhpcyYmIUwuY29udGFpbnModGhpcyxOKSlDLnR5cGU9US5vcmlnVHlwZSxLPVEuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksQy50eXBlPXk7cmV0dXJuIEt9fX0pO0wuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihyLHksQyxLKXtyZXR1cm4gRCh0aGlzLHIseSxDLEspfSxvbmU6ZnVuY3Rpb24ocix5LEMsSyl7cmV0dXJuIEQodGhpcyxyLHksQyxLLDEpfSxvZmY6ZnVuY3Rpb24ocix5LEMpe3ZhciBLO2lmKHImJnIucHJldmVudERlZmF1bHQmJnIuaGFuZGxlT2JqKXJldHVybiBLPXIuaGFuZGxlT2JqLEwoci5kZWxlZ2F0ZVRhcmdldCkub2ZmKEsubmFtZXNwYWNlP0sub3JpZ1R5cGUrIi4iK0submFtZXNwYWNlOksub3JpZ1R5cGUsSy5zZWxlY3RvcixLLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PT10eXBlb2Ygcil7Zm9yKEsgaW4gcil0aGlzLm9mZihLLAp5LHJbS10pO3JldHVybiB0aGlzfWlmKCExPT09eXx8ImZ1bmN0aW9uIj09PXR5cGVvZiB5KUM9eSx5PXZvaWQgMDshMT09PUMmJihDPUkpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtMLmV2ZW50LnJlbW92ZSh0aGlzLHIsQyx5KX0pfX0pO3ZhciBmYz0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKilbXj5dKilcLz4vZ2ksS2M9LzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksdWM9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksTGI9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nO0wuZXh0ZW5kKHtodG1sUHJlZmlsdGVyOmZ1bmN0aW9uKHIpe3JldHVybiByLnJlcGxhY2UoZmMsIlx4M2MkMVx4M2VceDNjLyQyXHgzZSIpfSxjbG9uZTpmdW5jdGlvbihyLHksQyl7dmFyIEssTixRLFMsYmE9ci5jbG9uZU5vZGUoITApLCQ9emMocik7aWYoIShrYi5ub0Nsb25lQ2hlY2tlZHx8CjEhPT1yLm5vZGVUeXBlJiYxMSE9PXIubm9kZVR5cGV8fEwuaXNYTUxEb2MocikpKWZvcihTPUEoYmEpLFE9QShyKSxLPTAsTj1RLmxlbmd0aDtLPE47SysrKXt2YXIgamE9UVtLXSxzYT1TW0tdLHphPXNhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoImlucHV0Ij09PXphJiZjZC50ZXN0KGphLnR5cGUpKXNhLmNoZWNrZWQ9amEuY2hlY2tlZDtlbHNlIGlmKCJpbnB1dCI9PT16YXx8InRleHRhcmVhIj09PXphKXNhLmRlZmF1bHRWYWx1ZT1qYS5kZWZhdWx0VmFsdWV9aWYoeSlpZihDKWZvcihRPVF8fEEociksUz1TfHxBKGJhKSxLPTAsTj1RLmxlbmd0aDtLPE47SysrKW5hKFFbS10sU1tLXSk7ZWxzZSBuYShyLGJhKTtTPUEoYmEsInNjcmlwdCIpOzA8Uy5sZW5ndGgmJkgoUywhJCYmQShyLCJzY3JpcHQiKSk7cmV0dXJuIGJhfSxjbGVhbkRhdGE6ZnVuY3Rpb24ocil7Zm9yKHZhciB5LEMsSyxOPUwuZXZlbnQuc3BlY2lhbCxRPTA7dm9pZCAwIT09KEM9cltRXSk7USsrKWlmKHJkKEMpKXtpZih5PQpDW0thLmV4cGFuZG9dKXtpZih5LmV2ZW50cylmb3IoSyBpbiB5LmV2ZW50cylOW0tdP0wuZXZlbnQucmVtb3ZlKEMsSyk6TC5yZW1vdmVFdmVudChDLEsseS5oYW5kbGUpO0NbS2EuZXhwYW5kb109dm9pZCAwfUNbWGEuZXhwYW5kb10mJihDW1hhLmV4cGFuZG9dPXZvaWQgMCl9fX0pO0wuZm4uZXh0ZW5kKHtkZXRhY2g6ZnVuY3Rpb24ocil7cmV0dXJuIGlhKHRoaXMsciwhMCl9LHJlbW92ZTpmdW5jdGlvbihyKXtyZXR1cm4gaWEodGhpcyxyKX0sdGV4dDpmdW5jdGlvbihyKXtyZXR1cm4gJGIodGhpcyxmdW5jdGlvbih5KXtyZXR1cm4gdm9pZCAwPT09eT9MLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl0aGlzLnRleHRDb250ZW50PXl9KX0sbnVsbCxyLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gZmEodGhpcyxhcmd1bWVudHMsCmZ1bmN0aW9uKHIpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHxQKHRoaXMscikuYXBwZW5kQ2hpbGQocil9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBmYSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihyKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHk9UCh0aGlzLHIpO3kuaW5zZXJ0QmVmb3JlKHIseS5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIGZhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHIpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGZhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHIpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLHRoaXMubmV4dFNpYmxpbmcpfSl9LAplbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgcix5PTA7bnVsbCE9KHI9dGhpc1t5XSk7eSsrKTE9PT1yLm5vZGVUeXBlJiYoTC5jbGVhbkRhdGEoQShyLCExKSksci50ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKHIseSl7cj1udWxsPT1yPyExOnI7eT1udWxsPT15P3I6eTtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gTC5jbG9uZSh0aGlzLHIseSl9KX0saHRtbDpmdW5jdGlvbihyKXtyZXR1cm4gJGIodGhpcyxmdW5jdGlvbih5KXt2YXIgQz10aGlzWzBdfHx7fSxLPTAsTj10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT15JiYxPT09Qy5ub2RlVHlwZSlyZXR1cm4gQy5pbm5lckhUTUw7aWYoInN0cmluZyI9PT10eXBlb2YgeSYmIUtjLnRlc3QoeSkmJiFyYVsoaWMuZXhlYyh5KXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe3k9TC5odG1sUHJlZmlsdGVyKHkpO3RyeXtmb3IoO0s8TjtLKyspQz10aGlzW0tdfHx7fSwxPT09Qy5ub2RlVHlwZSYmCihMLmNsZWFuRGF0YShBKEMsITEpKSxDLmlubmVySFRNTD15KTtDPTB9Y2F0Y2goUSl7fX1DJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKHkpfSxudWxsLHIsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIHI9W107cmV0dXJuIGZhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHkpe3ZhciBDPXRoaXMucGFyZW50Tm9kZTswPkwuaW5BcnJheSh0aGlzLHIpJiYoTC5jbGVhbkRhdGEoQSh0aGlzKSksQyYmQy5yZXBsYWNlQ2hpbGQoeSx0aGlzKSl9LHIpfX0pO0wuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKHIseSl7TC5mbltyXT1mdW5jdGlvbihDKXtmb3IodmFyIEs9W10sTj1MKEMpLFE9Ti5sZW5ndGgtMSxTPTA7Uzw9UTtTKyspQz1TPT09UT90aGlzOnRoaXMuY2xvbmUoITApLEwoTltTXSlbeV0oQyksCkZjLmFwcGx5KEssQy5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKEspfX0pO3ZhciBWYj1SZWdFeHAoIl4oIitrZSsiKSg/IXB4KVthLXolXSskIiwiaSIpLFhjPWZ1bmN0aW9uKHIpe3ZhciB5PXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldzt5JiZ5Lm9wZW5lcnx8KHk9YSk7cmV0dXJuIHkuZ2V0Q29tcHV0ZWRTdHlsZShyKX0sQWQ9UmVnRXhwKFpiLmpvaW4oInwiKSwiaSIpOyhmdW5jdGlvbigpe2Z1bmN0aW9uIHIoKXtpZihiYSl7Uy5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7bWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowIjtiYS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElIjthZC5hcHBlbmRDaGlsZChTKS5hcHBlbmRDaGlsZChiYSk7CnZhciAkPWEuZ2V0Q29tcHV0ZWRTdHlsZShiYSk7eT0iMSUiIT09JC50b3A7UT0xMj09PU1hdGgucm91bmQocGFyc2VGbG9hdCgkLm1hcmdpbkxlZnQpKTtiYS5zdHlsZS5yaWdodD0iNjAlIjtOPTM2PT09TWF0aC5yb3VuZChwYXJzZUZsb2F0KCQucmlnaHQpKTtDPTM2PT09TWF0aC5yb3VuZChwYXJzZUZsb2F0KCQud2lkdGgpKTtiYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO0s9MTI9PT1NYXRoLnJvdW5kKHBhcnNlRmxvYXQoYmEub2Zmc2V0V2lkdGgvMykpO2FkLnJlbW92ZUNoaWxkKFMpO2JhPW51bGx9fXZhciB5LEMsSyxOLFEsUz1TYS5jcmVhdGVFbGVtZW50KCJkaXYiKSxiYT1TYS5jcmVhdGVFbGVtZW50KCJkaXYiKTtiYS5zdHlsZSYmKGJhLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsYmEuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIixrYi5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWJhLnN0eWxlLmJhY2tncm91bmRDbGlwLApMLmV4dGVuZChrYix7Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyKCk7cmV0dXJuIEN9LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cigpO3JldHVybiBOfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cigpO3JldHVybiB5fSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyKCk7cmV0dXJuIFF9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyKCk7cmV0dXJuIEt9fSkpfSkoKTt2YXIgQ2M9WyJXZWJraXQiLCJNb3oiLCJtcyJdLFJjPVNhLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLEJkPXt9LG1lPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxNZD0vXi0tLyxOZD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sVWM9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9O0wuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKHIseSl7aWYoeSl7dmFyIEM9WihyLCJvcGFjaXR5Iik7CnJldHVybiIiPT09Qz8iMSI6Q319fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsZ3JpZEFyZWE6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TdGFydDohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1N0YXJ0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24ocix5LEMsSyl7aWYociYmMyE9PXIubm9kZVR5cGUmJjghPT1yLm5vZGVUeXBlJiZyLnN0eWxlKXt2YXIgTixRLFMsYmE9bCh5KSwkPU1kLnRlc3QoeSksamE9ci5zdHlsZTskfHwoeT1vYShiYSkpO1M9TC5jc3NIb29rc1t5XXx8TC5jc3NIb29rc1tiYV07aWYodm9pZCAwIT09QylRPXR5cGVvZiBDLAoic3RyaW5nIj09PVEmJihOPVdjLmV4ZWMoQykpJiZOWzFdJiYoQz13KHIseSxOKSxRPSJudW1iZXIiKSxudWxsIT1DJiZDPT09QyYmKCJudW1iZXIiIT09UXx8JHx8KEMrPU4mJk5bM118fChMLmNzc051bWJlcltiYV0/IiI6InB4IikpLGtiLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1DfHwwIT09eS5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChqYVt5XT0iaW5oZXJpdCIpLFMmJiJzZXQiaW4gUyYmdm9pZCAwPT09KEM9Uy5zZXQocixDLEspKXx8KCQ/amEuc2V0UHJvcGVydHkoeSxDKTpqYVt5XT1DKSk7ZWxzZSByZXR1cm4gUyYmImdldCJpbiBTJiZ2b2lkIDAhPT0oTj1TLmdldChyLCExLEspKT9OOmphW3ldfX0sY3NzOmZ1bmN0aW9uKHIseSxDLEspe3ZhciBOLFE7UT1sKHkpO01kLnRlc3QoeSl8fCh5PW9hKFEpKTsoUT1MLmNzc0hvb2tzW3ldfHxMLmNzc0hvb2tzW1FdKSYmImdldCJpbiBRJiYoTj1RLmdldChyLCEwLEMpKTt2b2lkIDA9PT1OJiYoTj1aKHIseSxLKSk7Im5vcm1hbCI9PT0KTiYmeSBpbiBVYyYmKE49VWNbeV0pO3JldHVybiIiPT09Q3x8Qz8ocj1wYXJzZUZsb2F0KE4pLCEwPT09Q3x8aXNGaW5pdGUocik/cnx8MDpOKTpOfX0pO0wuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24ocix5KXtMLmNzc0hvb2tzW3ldPXtnZXQ6ZnVuY3Rpb24oQyxLLE4pe2lmKEspcmV0dXJuIW1lLnRlc3QoTC5jc3MoQywiZGlzcGxheSIpKXx8Qy5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmQy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD9GYShDLHksTik6bGUoQyxOZCxmdW5jdGlvbigpe3JldHVybiBGYShDLHksTil9KX0sc2V0OmZ1bmN0aW9uKEMsSyxOKXt2YXIgUSxTPVhjKEMpLGJhPSFrYi5zY3JvbGxib3hTaXplKCkmJiJhYnNvbHV0ZSI9PT1TLnBvc2l0aW9uLCQ9KGJhfHxOKSYmImJvcmRlci1ib3giPT09TC5jc3MoQywiYm94U2l6aW5nIiwhMSxTKTtOPU4/cGEoQyx5LE4sJCxTKTowOyQmJmJhJiYoTi09TWF0aC5jZWlsKENbIm9mZnNldCIreVswXS50b1VwcGVyQ2FzZSgpKwp5LnNsaWNlKDEpXS1wYXJzZUZsb2F0KFNbeV0pLXBhKEMseSwiYm9yZGVyIiwhMSxTKS0wLjUpKTtOJiYoUT1XYy5leGVjKEspKSYmInB4IiE9PShRWzNdfHwicHgiKSYmKEMuc3R5bGVbeV09SyxLPUwuY3NzKEMseSkpO3JldHVybiBBYShDLEssTil9fX0pO0wuY3NzSG9va3MubWFyZ2luTGVmdD1lYShrYi5yZWxpYWJsZU1hcmdpbkxlZnQsZnVuY3Rpb24ocix5KXtpZih5KXJldHVybihwYXJzZUZsb2F0KFoociwibWFyZ2luTGVmdCIpKXx8ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LWxlKHIse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KTtMLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihyLHkpe0wuY3NzSG9va3Nbcit5XT17ZXhwYW5kOmZ1bmN0aW9uKEMpe3ZhciBLPTAsTj17fTtmb3IoQz0ic3RyaW5nIj09PXR5cGVvZiBDP0Muc3BsaXQoIiAiKToKW0NdOzQ+SztLKyspTltyK1piW0tdK3ldPUNbS118fENbSy0yXXx8Q1swXTtyZXR1cm4gTn19OyJtYXJnaW4iIT09ciYmKEwuY3NzSG9va3Nbcit5XS5zZXQ9QWEpfSk7TC5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihyLHkpe3JldHVybiAkYih0aGlzLGZ1bmN0aW9uKEMsSyxOKXt2YXIgUSxTPXt9LGJhPTA7aWYoQXJyYXkuaXNBcnJheShLKSl7Tj1YYyhDKTtmb3IoUT1LLmxlbmd0aDtiYTxRO2JhKyspU1tLW2JhXV09TC5jc3MoQyxLW2JhXSwhMSxOKTtyZXR1cm4gU31yZXR1cm4gdm9pZCAwIT09Tj9MLnN0eWxlKEMsSyxOKTpMLmNzcyhDLEspfSxyLHksMTxhcmd1bWVudHMubGVuZ3RoKX19KTtMLlR3ZWVuPUVhO0VhLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RWEsaW5pdDpmdW5jdGlvbihyLHksQyxLLE4sUSl7dGhpcy5lbGVtPXI7dGhpcy5wcm9wPUM7dGhpcy5lYXNpbmc9Tnx8TC5lYXNpbmcuX2RlZmF1bHQ7dGhpcy5vcHRpb25zPXk7dGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpOwp0aGlzLmVuZD1LO3RoaXMudW5pdD1RfHwoTC5jc3NOdW1iZXJbQ10/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciByPUVhLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiByJiZyLmdldD9yLmdldCh0aGlzKTpFYS5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24ocil7dmFyIHksQz1FYS5wcm9wSG9va3NbdGhpcy5wcm9wXTt0aGlzLnBvcz10aGlzLm9wdGlvbnMuZHVyYXRpb24/eT1MLmVhc2luZ1t0aGlzLmVhc2luZ10ocix0aGlzLm9wdGlvbnMuZHVyYXRpb24qciwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp5PXI7dGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnkrdGhpcy5zdGFydDt0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyk7QyYmQy5zZXQ/Qy5zZXQodGhpcyk6RWEucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKTtyZXR1cm4gdGhpc319O0VhLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT0KRWEucHJvdG90eXBlO0VhLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihyKXtyZXR1cm4gMSE9PXIuZWxlbS5ub2RlVHlwZXx8bnVsbCE9ci5lbGVtW3IucHJvcF0mJm51bGw9PXIuZWxlbS5zdHlsZVtyLnByb3BdP3IuZWxlbVtyLnByb3BdOihyPUwuY3NzKHIuZWxlbSxyLnByb3AsIiIpKSYmImF1dG8iIT09cj9yOjB9LHNldDpmdW5jdGlvbihyKXtpZihMLmZ4LnN0ZXBbci5wcm9wXSlMLmZ4LnN0ZXBbci5wcm9wXShyKTtlbHNlIDEhPT1yLmVsZW0ubm9kZVR5cGV8fCFMLmNzc0hvb2tzW3IucHJvcF0mJm51bGw9PXIuZWxlbS5zdHlsZVtvYShyLnByb3ApXT9yLmVsZW1bci5wcm9wXT1yLm5vdzpMLnN0eWxlKHIuZWxlbSxyLnByb3Asci5ub3crci51bml0KX19fTtFYS5wcm9wSG9va3Muc2Nyb2xsVG9wPUVhLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24ocil7ci5lbGVtLm5vZGVUeXBlJiZyLmVsZW0ucGFyZW50Tm9kZSYmKHIuZWxlbVtyLnByb3BdPQpyLm5vdyl9fTtMLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKHIpe3JldHVybiByfSxzd2luZzpmdW5jdGlvbihyKXtyZXR1cm4gMC41LU1hdGguY29zKHIqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6InN3aW5nIn07TC5meD1FYS5wcm90b3R5cGUuaW5pdDtMLmZ4LnN0ZXA9e307dmFyIERjLFljLHNkPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxMYz0vcXVldWVIb29rcyQvO0wuQW5pbWF0aW9uPUwuZXh0ZW5kKGdhLHt0d2VlbmVyczp7IioiOltmdW5jdGlvbihyLHkpe3ZhciBDPXRoaXMuY3JlYXRlVHdlZW4ocix5KTt3KEMuZWxlbSxyLFdjLmV4ZWMoeSksQyk7cmV0dXJuIEN9XX0sdHdlZW5lcjpmdW5jdGlvbihyLHkpe1ZhKHIpPyh5PXIscj1bIioiXSk6cj1yLm1hdGNoKGhjKTtmb3IodmFyIEMsSz0wLE49ci5sZW5ndGg7SzxOO0srKylDPXJbS10sZ2EudHdlZW5lcnNbQ109Z2EudHdlZW5lcnNbQ118fFtdLGdhLnR3ZWVuZXJzW0NdLnVuc2hpZnQoeSl9LHByZWZpbHRlcnM6W2Z1bmN0aW9uKHIsCnksQyl7dmFyIEssTixRLFMsYmEsJCxqYTtqYT0id2lkdGgiaW4geXx8ImhlaWdodCJpbiB5O3ZhciBzYT10aGlzLHphPXt9LGhhPXIuc3R5bGUsTWE9ci5ub2RlVHlwZSYmdGMociksUmE9S2EuZ2V0KHIsImZ4c2hvdyIpO0MucXVldWV8fChTPUwuX3F1ZXVlSG9va3MociwiZngiKSxudWxsPT1TLnVucXVldWVkJiYoUy51bnF1ZXVlZD0wLGJhPVMuZW1wdHkuZmlyZSxTLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtTLnVucXVldWVkfHxiYSgpfSksUy51bnF1ZXVlZCsrLHNhLmFsd2F5cyhmdW5jdGlvbigpe3NhLmFsd2F5cyhmdW5jdGlvbigpe1MudW5xdWV1ZWQtLTtMLnF1ZXVlKHIsImZ4IikubGVuZ3RofHxTLmVtcHR5LmZpcmUoKX0pfSkpO2ZvcihLIGluIHkpaWYoTj15W0tdLHNkLnRlc3QoTikpe2RlbGV0ZSB5W0tdO1E9UXx8InRvZ2dsZSI9PT1OO2lmKE49PT0oTWE/ImhpZGUiOiJzaG93IikpaWYoInNob3ciPT09TiYmUmEmJnZvaWQgMCE9PVJhW0tdKU1hPSEwO2Vsc2UgY29udGludWU7CnphW0tdPVJhJiZSYVtLXXx8TC5zdHlsZShyLEspfWlmKCh5PSFMLmlzRW1wdHlPYmplY3QoeSkpfHwhTC5pc0VtcHR5T2JqZWN0KHphKSlmb3IoSyBpbiBqYSYmMT09PXIubm9kZVR5cGUmJihDLm92ZXJmbG93PVtoYS5vdmVyZmxvdyxoYS5vdmVyZmxvd1gsaGEub3ZlcmZsb3dZXSwkPVJhJiZSYS5kaXNwbGF5LG51bGw9PSQmJigkPUthLmdldChyLCJkaXNwbGF5IikpLGphPUwuY3NzKHIsImRpc3BsYXkiKSwibm9uZSI9PT1qYSYmKCQ/amE9JDooeihbcl0sITApLCQ9ci5zdHlsZS5kaXNwbGF5fHwkLGphPUwuY3NzKHIsImRpc3BsYXkiKSx6KFtyXSkpKSwoImlubGluZSI9PT1qYXx8ImlubGluZS1ibG9jayI9PT1qYSYmbnVsbCE9JCkmJiJub25lIj09PUwuY3NzKHIsImZsb2F0IikmJih5fHwoc2EuZG9uZShmdW5jdGlvbigpe2hhLmRpc3BsYXk9JH0pLG51bGw9PSQmJihqYT1oYS5kaXNwbGF5LCQ9Im5vbmUiPT09amE/IiI6amEpKSxoYS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksCkMub3ZlcmZsb3cmJihoYS5vdmVyZmxvdz0iaGlkZGVuIixzYS5hbHdheXMoZnVuY3Rpb24oKXtoYS5vdmVyZmxvdz1DLm92ZXJmbG93WzBdO2hhLm92ZXJmbG93WD1DLm92ZXJmbG93WzFdO2hhLm92ZXJmbG93WT1DLm92ZXJmbG93WzJdfSkpLHk9ITEsemEpeXx8KFJhPyJoaWRkZW4iaW4gUmEmJihNYT1SYS5oaWRkZW4pOlJhPUthLmFjY2VzcyhyLCJmeHNob3ciLHtkaXNwbGF5OiR9KSxRJiYoUmEuaGlkZGVuPSFNYSksTWEmJnooW3JdLCEwKSxzYS5kb25lKGZ1bmN0aW9uKCl7TWF8fHooW3JdKTtLYS5yZW1vdmUociwiZnhzaG93Iik7Zm9yKEsgaW4gemEpTC5zdHlsZShyLEssemFbS10pfSkpLHk9QWIoTWE/UmFbS106MCxLLHNhKSxLIGluIFJhfHwoUmFbS109eS5zdGFydCxNYSYmKHkuZW5kPXkuc3RhcnQseS5zdGFydD0wKSl9XSxwcmVmaWx0ZXI6ZnVuY3Rpb24ocix5KXt5P2dhLnByZWZpbHRlcnMudW5zaGlmdChyKTpnYS5wcmVmaWx0ZXJzLnB1c2gocil9fSk7TC5zcGVlZD0KZnVuY3Rpb24ocix5LEMpe3ZhciBLPXImJiJvYmplY3QiPT09dHlwZW9mIHI/TC5leHRlbmQoe30scik6e2NvbXBsZXRlOkN8fCFDJiZ5fHxWYShyKSYmcixkdXJhdGlvbjpyLGVhc2luZzpDJiZ5fHx5JiYhVmEoeSkmJnl9O0wuZngub2ZmP0suZHVyYXRpb249MDoibnVtYmVyIiE9PXR5cGVvZiBLLmR1cmF0aW9uJiYoSy5kdXJhdGlvbj1LLmR1cmF0aW9uIGluIEwuZnguc3BlZWRzP0wuZnguc3BlZWRzW0suZHVyYXRpb25dOkwuZnguc3BlZWRzLl9kZWZhdWx0KTtpZihudWxsPT1LLnF1ZXVlfHwhMD09PUsucXVldWUpSy5xdWV1ZT0iZngiO0sub2xkPUsuY29tcGxldGU7Sy5jb21wbGV0ZT1mdW5jdGlvbigpe1ZhKEsub2xkKSYmSy5vbGQuY2FsbCh0aGlzKTtLLnF1ZXVlJiZMLmRlcXVldWUodGhpcyxLLnF1ZXVlKX07cmV0dXJuIEt9O0wuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24ocix5LEMsSyl7cmV0dXJuIHRoaXMuZmlsdGVyKHRjKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5Onl9LApyLEMsSyl9LGFuaW1hdGU6ZnVuY3Rpb24ocix5LEMsSyl7dmFyIE49TC5pc0VtcHR5T2JqZWN0KHIpLFE9TC5zcGVlZCh5LEMsSyk7eT1mdW5jdGlvbigpe3ZhciBTPWdhKHRoaXMsTC5leHRlbmQoe30sciksUSk7KE58fEthLmdldCh0aGlzLCJmaW5pc2giKSkmJlMuc3RvcCghMCl9O3kuZmluaXNoPXk7cmV0dXJuIE58fCExPT09US5xdWV1ZT90aGlzLmVhY2goeSk6dGhpcy5xdWV1ZShRLnF1ZXVlLHkpfSxzdG9wOmZ1bmN0aW9uKHIseSxDKXt2YXIgSz1mdW5jdGlvbihOKXt2YXIgUT1OLnN0b3A7ZGVsZXRlIE4uc3RvcDtRKEMpfTsic3RyaW5nIiE9PXR5cGVvZiByJiYoQz15LHk9cixyPXZvaWQgMCk7eSYmITEhPT1yJiZ0aGlzLnF1ZXVlKHJ8fCJmeCIsW10pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgTj0hMCxRPW51bGwhPXImJnIrInF1ZXVlSG9va3MiLFM9TC50aW1lcnMsYmE9S2EuZ2V0KHRoaXMpO2lmKFEpYmFbUV0mJmJhW1FdLnN0b3AmJksoYmFbUV0pO2Vsc2UgZm9yKFEgaW4gYmEpYmFbUV0mJgpiYVtRXS5zdG9wJiZMYy50ZXN0KFEpJiZLKGJhW1FdKTtmb3IoUT1TLmxlbmd0aDtRLS07KVNbUV0uZWxlbSE9PXRoaXN8fG51bGwhPXImJlNbUV0ucXVldWUhPT1yfHwoU1tRXS5hbmltLnN0b3AoQyksTj0hMSxTLnNwbGljZShRLDEpKTshTiYmQ3x8TC5kZXF1ZXVlKHRoaXMscil9KX0sZmluaXNoOmZ1bmN0aW9uKHIpeyExIT09ciYmKHI9cnx8ImZ4Iik7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB5LEM9S2EuZ2V0KHRoaXMpLEs9Q1tyKyJxdWV1ZSJdO3k9Q1tyKyJxdWV1ZUhvb2tzIl07dmFyIE49TC50aW1lcnMsUT1LP0subGVuZ3RoOjA7Qy5maW5pc2g9ITA7TC5xdWV1ZSh0aGlzLHIsW10pO3kmJnkuc3RvcCYmeS5zdG9wLmNhbGwodGhpcywhMCk7Zm9yKHk9Ti5sZW5ndGg7eS0tOylOW3ldLmVsZW09PT10aGlzJiZOW3ldLnF1ZXVlPT09ciYmKE5beV0uYW5pbS5zdG9wKCEwKSxOLnNwbGljZSh5LDEpKTtmb3IoeT0wO3k8UTt5KyspS1t5XSYmS1t5XS5maW5pc2gmJgpLW3ldLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBDLmZpbmlzaH0pfX0pO0wuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24ocix5KXt2YXIgQz1MLmZuW3ldO0wuZm5beV09ZnVuY3Rpb24oSyxOLFEpe3JldHVybiBudWxsPT1LfHwiYm9vbGVhbiI9PT10eXBlb2YgSz9DLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUod2IoeSwhMCksSyxOLFEpfX0pO0wuZWFjaCh7c2xpZGVEb3duOndiKCJzaG93Iiksc2xpZGVVcDp3YigiaGlkZSIpLHNsaWRlVG9nZ2xlOndiKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKHIseSl7TC5mbltyXT1mdW5jdGlvbihDLEssTil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh5LEMsSyxOKX19KTtMLnRpbWVycz1bXTtMLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgcix5PTAsQz1MLnRpbWVycztmb3IoRGM9CkRhdGUubm93KCk7eTxDLmxlbmd0aDt5Kyspcj1DW3ldLHIoKXx8Q1t5XSE9PXJ8fEMuc3BsaWNlKHktLSwxKTtDLmxlbmd0aHx8TC5meC5zdG9wKCk7RGM9dm9pZCAwfTtMLmZ4LnRpbWVyPWZ1bmN0aW9uKHIpe0wudGltZXJzLnB1c2gocik7TC5meC5zdGFydCgpfTtMLmZ4LmludGVydmFsPTEzO0wuZnguc3RhcnQ9ZnVuY3Rpb24oKXtZY3x8KFljPSEwLFdhKCkpfTtMLmZ4LnN0b3A9ZnVuY3Rpb24oKXtZYz1udWxsfTtMLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfTtMLmZuLmRlbGF5PWZ1bmN0aW9uKHIseSl7cj1MLmZ4P0wuZnguc3BlZWRzW3JdfHxyOnI7cmV0dXJuIHRoaXMucXVldWUoeXx8ImZ4IixmdW5jdGlvbihDLEspe3ZhciBOPWEuc2V0VGltZW91dChDLHIpO0suc3RvcD1mdW5jdGlvbigpe2EuY2xlYXJUaW1lb3V0KE4pfX0pfTsoZnVuY3Rpb24oKXt2YXIgcj1TYS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHk9U2EuY3JlYXRlRWxlbWVudCgic2VsZWN0IikuYXBwZW5kQ2hpbGQoU2EuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpOwpyLnR5cGU9ImNoZWNrYm94IjtrYi5jaGVja09uPSIiIT09ci52YWx1ZTtrYi5vcHRTZWxlY3RlZD15LnNlbGVjdGVkO3I9U2EuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyLnZhbHVlPSJ0IjtyLnR5cGU9InJhZGlvIjtrYi5yYWRpb1ZhbHVlPSJ0Ij09PXIudmFsdWV9KSgpO3ZhciBPZCxyYz1MLmV4cHIuYXR0ckhhbmRsZTtMLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihyLHkpe3JldHVybiAkYih0aGlzLEwuYXR0cixyLHksMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5yZW1vdmVBdHRyKHRoaXMscil9KX19KTtMLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihyLHksQyl7dmFyIEssTixRPXIubm9kZVR5cGU7aWYoMyE9PVEmJjghPT1RJiYyIT09USl7aWYoInVuZGVmaW5lZCI9PT10eXBlb2Ygci5nZXRBdHRyaWJ1dGUpcmV0dXJuIEwucHJvcChyLHksQyk7MT09PVEmJkwuaXNYTUxEb2Mocil8fChOPUwuYXR0ckhvb2tzW3kudG9Mb3dlckNhc2UoKV18fAooTC5leHByLm1hdGNoLmJvb2wudGVzdCh5KT9PZDp2b2lkIDApKTtpZih2b2lkIDAhPT1DKXtpZihudWxsPT09Qyl7TC5yZW1vdmVBdHRyKHIseSk7cmV0dXJufWlmKE4mJiJzZXQiaW4gTiYmdm9pZCAwIT09KEs9Ti5zZXQocixDLHkpKSlyZXR1cm4gSztyLnNldEF0dHJpYnV0ZSh5LEMrIiIpO3JldHVybiBDfWlmKE4mJiJnZXQiaW4gTiYmbnVsbCE9PShLPU4uZ2V0KHIseSkpKXJldHVybiBLO0s9TC5maW5kLmF0dHIocix5KTtyZXR1cm4gbnVsbD09Sz92b2lkIDA6S319LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKHIseSl7aWYoIWtiLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT15JiZkKHIsImlucHV0Iikpe3ZhciBDPXIudmFsdWU7ci5zZXRBdHRyaWJ1dGUoInR5cGUiLHkpO0MmJihyLnZhbHVlPUMpO3JldHVybiB5fX19fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKHIseSl7dmFyIEMsSz0wLE49eSYmeS5tYXRjaChoYyk7aWYoTiYmMT09PXIubm9kZVR5cGUpZm9yKDtDPU5bSysrXTspci5yZW1vdmVBdHRyaWJ1dGUoQyl9fSk7Ck9kPXtzZXQ6ZnVuY3Rpb24ocix5LEMpeyExPT09eT9MLnJlbW92ZUF0dHIocixDKTpyLnNldEF0dHJpYnV0ZShDLEMpO3JldHVybiBDfX07TC5lYWNoKEwuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKHIseSl7dmFyIEM9cmNbeV18fEwuZmluZC5hdHRyO3JjW3ldPWZ1bmN0aW9uKEssTixRKXt2YXIgUyxiYSwkPU4udG9Mb3dlckNhc2UoKTtRfHwoYmE9cmNbJF0scmNbJF09UyxTPW51bGwhPUMoSyxOLFEpPyQ6bnVsbCxyY1skXT1iYSk7cmV0dXJuIFN9fSk7dmFyIFJlPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksU2U9L14oPzphfGFyZWEpJC9pO0wuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKHIseSl7cmV0dXJuICRiKHRoaXMsTC5wcm9wLHIseSwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tMLnByb3BGaXhbcl18fApyXX0pfX0pO0wuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKHIseSxDKXt2YXIgSyxOLFE9ci5ub2RlVHlwZTtpZigzIT09USYmOCE9PVEmJjIhPT1RKXJldHVybiAxPT09USYmTC5pc1hNTERvYyhyKXx8KHk9TC5wcm9wRml4W3ldfHx5LE49TC5wcm9wSG9va3NbeV0pLHZvaWQgMCE9PUM/TiYmInNldCJpbiBOJiZ2b2lkIDAhPT0oSz1OLnNldChyLEMseSkpP0s6clt5XT1DOk4mJiJnZXQiaW4gTiYmbnVsbCE9PShLPU4uZ2V0KHIseSkpP0s6clt5XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKHIpe3ZhciB5PUwuZmluZC5hdHRyKHIsInRhYmluZGV4Iik7cmV0dXJuIHk/cGFyc2VJbnQoeSwxMCk6UmUudGVzdChyLm5vZGVOYW1lKXx8U2UudGVzdChyLm5vZGVOYW1lKSYmci5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSk7a2Iub3B0U2VsZWN0ZWR8fChMLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKHIpe3JldHVybiBudWxsfSwKc2V0OmZ1bmN0aW9uKHIpe319KTtMLmVhY2goInRhYkluZGV4IHJlYWRPbmx5IG1heExlbmd0aCBjZWxsU3BhY2luZyBjZWxsUGFkZGluZyByb3dTcGFuIGNvbFNwYW4gdXNlTWFwIGZyYW1lQm9yZGVyIGNvbnRlbnRFZGl0YWJsZSIuc3BsaXQoIiAiKSxmdW5jdGlvbigpe0wucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KTtMLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24ocil7dmFyIHksQyxLLE4sUSxTLGJhPTA7aWYoVmEocikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigkKXtMKHRoaXMpLmFkZENsYXNzKHIuY2FsbCh0aGlzLCQscWEodGhpcykpKX0pO3k9d2Eocik7aWYoeS5sZW5ndGgpZm9yKDtDPXRoaXNbYmErK107KWlmKE49cWEoQyksSz0xPT09Qy5ub2RlVHlwZSYmIiAiK3RhKE4pKyIgIil7Zm9yKFM9MDtRPXlbUysrXTspMD5LLmluZGV4T2YoIiAiK1ErIiAiKSYmKEsrPVErIiAiKTtLPXRhKEspO04hPT1LJiZDLnNldEF0dHJpYnV0ZSgiY2xhc3MiLApLKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24ocil7dmFyIHksQyxLLE4sUSxTLGJhPTA7aWYoVmEocikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigkKXtMKHRoaXMpLnJlbW92ZUNsYXNzKHIuY2FsbCh0aGlzLCQscWEodGhpcykpKX0pO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLmF0dHIoImNsYXNzIiwiIik7eT13YShyKTtpZih5Lmxlbmd0aClmb3IoO0M9dGhpc1tiYSsrXTspaWYoTj1xYShDKSxLPTE9PT1DLm5vZGVUeXBlJiYiICIrdGEoTikrIiAiKXtmb3IoUz0wO1E9eVtTKytdOylmb3IoOy0xPEsuaW5kZXhPZigiICIrUSsiICIpOylLPUsucmVwbGFjZSgiICIrUSsiICIsIiAiKTtLPXRhKEspO04hPT1LJiZDLnNldEF0dHJpYnV0ZSgiY2xhc3MiLEspfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihyLHkpe3ZhciBDPXR5cGVvZiByLEs9InN0cmluZyI9PT1DfHxBcnJheS5pc0FycmF5KHIpO3JldHVybiJib29sZWFuIj09PXR5cGVvZiB5JiYKSz95P3RoaXMuYWRkQ2xhc3Mocik6dGhpcy5yZW1vdmVDbGFzcyhyKTpWYShyKT90aGlzLmVhY2goZnVuY3Rpb24oTil7TCh0aGlzKS50b2dnbGVDbGFzcyhyLmNhbGwodGhpcyxOLHFhKHRoaXMpLHkpLHkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIE4sUSxTLGJhO2lmKEspZm9yKFE9MCxTPUwodGhpcyksYmE9d2Eocik7Tj1iYVtRKytdOylTLmhhc0NsYXNzKE4pP1MucmVtb3ZlQ2xhc3MoTik6Uy5hZGRDbGFzcyhOKTtlbHNlIGlmKHZvaWQgMD09PXJ8fCJib29sZWFuIj09PUMpKE49cWEodGhpcykpJiZLYS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsTiksdGhpcy5zZXRBdHRyaWJ1dGUmJnRoaXMuc2V0QXR0cmlidXRlKCJjbGFzcyIsTnx8ITE9PT1yPyIiOkthLmdldCh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKX0pfSxoYXNDbGFzczpmdW5jdGlvbihyKXt2YXIgeSxDPTA7Zm9yKHI9IiAiK3IrIiAiO3k9dGhpc1tDKytdOylpZigxPT09eS5ub2RlVHlwZSYmLTE8KCIgIisKdGEocWEoeSkpKyIgIikuaW5kZXhPZihyKSlyZXR1cm4hMDtyZXR1cm4hMX19KTt2YXIgbmU9L1xyL2c7TC5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihyKXt2YXIgeSxDLEssTj10aGlzWzBdO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEs9VmEociksdGhpcy5lYWNoKGZ1bmN0aW9uKFEpezE9PT10aGlzLm5vZGVUeXBlJiYoUT1LP3IuY2FsbCh0aGlzLFEsTCh0aGlzKS52YWwoKSk6cixudWxsPT1RP1E9IiI6Im51bWJlciI9PT10eXBlb2YgUT9RKz0iIjpBcnJheS5pc0FycmF5KFEpJiYoUT1MLm1hcChRLGZ1bmN0aW9uKFMpe3JldHVybiBudWxsPT1TPyIiOlMrIiJ9KSkseT1MLnZhbEhvb2tzW3RoaXMudHlwZV18fEwudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx5JiYic2V0ImluIHkmJnZvaWQgMCE9PXkuc2V0KHRoaXMsUSwidmFsdWUiKXx8KHRoaXMudmFsdWU9USkpfSk7aWYoTil7aWYoKHk9TC52YWxIb29rc1tOLnR5cGVdfHxMLnZhbEhvb2tzW04ubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYKImdldCJpbiB5JiZ2b2lkIDAhPT0oQz15LmdldChOLCJ2YWx1ZSIpKSlyZXR1cm4gQztDPU4udmFsdWU7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgQz9DLnJlcGxhY2UobmUsIiIpOm51bGw9PUM/IiI6Q319fSk7TC5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihyKXt2YXIgeT1MLmZpbmQuYXR0cihyLCJ2YWx1ZSIpO3JldHVybiBudWxsIT15P3k6dGEoTC50ZXh0KHIpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKHIpe3ZhciB5LEM9ci5vcHRpb25zLEs9ci5zZWxlY3RlZEluZGV4LE49InNlbGVjdC1vbmUiPT09ci50eXBlLFE9Tj9udWxsOltdLFM9Tj9LKzE6Qy5sZW5ndGg7Zm9yKHI9MD5LP1M6Tj9LOjA7cjxTO3IrKylpZih5PUNbcl0sISgheS5zZWxlY3RlZCYmciE9PUt8fHkuZGlzYWJsZWR8fHkucGFyZW50Tm9kZS5kaXNhYmxlZCYmZCh5LnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXt5PUwoeSkudmFsKCk7aWYoTilyZXR1cm4geTtRLnB1c2goeSl9cmV0dXJuIFF9LApzZXQ6ZnVuY3Rpb24ocix5KXtmb3IodmFyIEMsSyxOPXIub3B0aW9ucyxRPUwubWFrZUFycmF5KHkpLFM9Ti5sZW5ndGg7Uy0tOylpZihLPU5bU10sSy5zZWxlY3RlZD0tMTxMLmluQXJyYXkoTC52YWxIb29rcy5vcHRpb24uZ2V0KEspLFEpKUM9ITA7Q3x8KHIuc2VsZWN0ZWRJbmRleD0tMSk7cmV0dXJuIFF9fX19KTtMLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtMLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24ocix5KXtpZihBcnJheS5pc0FycmF5KHkpKXJldHVybiByLmNoZWNrZWQ9LTE8TC5pbkFycmF5KEwocikudmFsKCkseSl9fTtrYi5jaGVja09ufHwoTC52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIG51bGw9PT1yLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOnIudmFsdWV9KX0pO2tiLmZvY3VzaW49Im9uZm9jdXNpbiJpbiBhO3ZhciBQZD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sTmI9ZnVuY3Rpb24ocil7ci5zdG9wUHJvcGFnYXRpb24oKX07CkwuZXh0ZW5kKEwuZXZlbnQse3RyaWdnZXI6ZnVuY3Rpb24ocix5LEMsSyl7dmFyIE4sUSxTLGJhLCQsamEsc2EsemE9W0N8fFNhXSxoYT1tZC5jYWxsKHIsInR5cGUiKT9yLnR5cGU6cjtqYT1tZC5jYWxsKHIsIm5hbWVzcGFjZSIpP3IubmFtZXNwYWNlLnNwbGl0KCIuIik6W107UT1zYT1OPUM9Q3x8U2E7aWYoMyE9PUMubm9kZVR5cGUmJjghPT1DLm5vZGVUeXBlJiYhUGQudGVzdChoYStMLmV2ZW50LnRyaWdnZXJlZCkmJigtMTxoYS5pbmRleE9mKCIuIikmJihqYT1oYS5zcGxpdCgiLiIpLGhhPWphLnNoaWZ0KCksamEuc29ydCgpKSxiYT0wPmhhLmluZGV4T2YoIjoiKSYmIm9uIitoYSxyPXJbTC5leHBhbmRvXT9yOm5ldyBMLkV2ZW50KGhhLCJvYmplY3QiPT09dHlwZW9mIHImJnIpLHIuaXNUcmlnZ2VyPUs/MjozLHIubmFtZXNwYWNlPWphLmpvaW4oIi4iKSxyLnJuYW1lc3BhY2U9ci5uYW1lc3BhY2U/UmVnRXhwKCIoXnxcXC4pIitqYS5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKToKbnVsbCxyLnJlc3VsdD12b2lkIDAsci50YXJnZXR8fChyLnRhcmdldD1DKSx5PW51bGw9PXk/W3JdOkwubWFrZUFycmF5KHksW3JdKSxqYT1MLmV2ZW50LnNwZWNpYWxbaGFdfHx7fSxLfHwhamEudHJpZ2dlcnx8ITEhPT1qYS50cmlnZ2VyLmFwcGx5KEMseSkpKXtpZighSyYmIWphLm5vQnViYmxlJiYhUGMoQykpe1M9amEuZGVsZWdhdGVUeXBlfHxoYTtQZC50ZXN0KFMraGEpfHwoUT1RLnBhcmVudE5vZGUpO2Zvcig7UTtRPVEucGFyZW50Tm9kZSl6YS5wdXNoKFEpLE49UTtOPT09KEMub3duZXJEb2N1bWVudHx8U2EpJiZ6YS5wdXNoKE4uZGVmYXVsdFZpZXd8fE4ucGFyZW50V2luZG93fHxhKX1mb3IoTj0wOyhRPXphW04rK10pJiYhci5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOylzYT1RLHIudHlwZT0xPE4/UzpqYS5iaW5kVHlwZXx8aGEsKCQ9KEthLmdldChRLCJldmVudHMiKXx8e30pW3IudHlwZV0mJkthLmdldChRLCJoYW5kbGUiKSkmJiQuYXBwbHkoUSx5KSwoJD1iYSYmUVtiYV0pJiYKJC5hcHBseSYmcmQoUSkmJihyLnJlc3VsdD0kLmFwcGx5KFEseSksITE9PT1yLnJlc3VsdCYmci5wcmV2ZW50RGVmYXVsdCgpKTtyLnR5cGU9aGE7S3x8ci5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8amEuX2RlZmF1bHQmJiExIT09amEuX2RlZmF1bHQuYXBwbHkoemEucG9wKCkseSl8fCFyZChDKXx8IWJhfHwhVmEoQ1toYV0pfHxQYyhDKXx8KChOPUNbYmFdKSYmKENbYmFdPW51bGwpLEwuZXZlbnQudHJpZ2dlcmVkPWhhLHIuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmc2EuYWRkRXZlbnRMaXN0ZW5lcihoYSxOYiksQ1toYV0oKSxyLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJnNhLnJlbW92ZUV2ZW50TGlzdGVuZXIoaGEsTmIpLEwuZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxOJiYoQ1tiYV09TikpO3JldHVybiByLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKHIseSxDKXtyPUwuZXh0ZW5kKG5ldyBMLkV2ZW50LEMse3R5cGU6cixpc1NpbXVsYXRlZDohMH0pO0wuZXZlbnQudHJpZ2dlcihyLApudWxsLHkpfX0pO0wuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKHIseSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0wuZXZlbnQudHJpZ2dlcihyLHksdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24ocix5KXt2YXIgQz10aGlzWzBdO2lmKEMpcmV0dXJuIEwuZXZlbnQudHJpZ2dlcihyLHksQywhMCl9fSk7a2IuZm9jdXNpbnx8TC5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihyLHkpe3ZhciBDPWZ1bmN0aW9uKEspe0wuZXZlbnQuc2ltdWxhdGUoeSxLLnRhcmdldCxMLmV2ZW50LmZpeChLKSl9O0wuZXZlbnQuc3BlY2lhbFt5XT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgSz10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsTj1LYS5hY2Nlc3MoSyx5KTtOfHxLLmFkZEV2ZW50TGlzdGVuZXIocixDLCEwKTtLYS5hY2Nlc3MoSyx5LChOfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgSz10aGlzLm93bmVyRG9jdW1lbnR8fAp0aGlzLE49S2EuYWNjZXNzKEsseSktMTtOP0thLmFjY2VzcyhLLHksTik6KEsucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLEMsITApLEthLnJlbW92ZShLLHkpKX19fSk7dmFyIFhiPWEubG9jYXRpb24sdGQ9RGF0ZS5ub3coKSxkZD0vXD8vO0wucGFyc2VYTUw9ZnVuY3Rpb24ocil7dmFyIHk7aWYoIXJ8fCJzdHJpbmciIT09dHlwZW9mIHIpcmV0dXJuIG51bGw7dHJ5e3k9KG5ldyBhLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHIsInRleHQveG1sIil9Y2F0Y2goQyl7eT12b2lkIDB9eSYmIXkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RofHxMLmVycm9yKCJJbnZhbGlkIFhNTDogIityKTtyZXR1cm4geX07dmFyIEVjPS9cW1xdJC8sZWQ9L1xyP1xuL2csb2U9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFFkPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtMLnBhcmFtPWZ1bmN0aW9uKHIseSl7dmFyIEMsSz0KW10sTj1mdW5jdGlvbihRLFMpe3ZhciBiYT1WYShTKT9TKCk6UztLW0subGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoUSkrIlx4M2QiK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1iYT8iIjpiYSl9O2lmKG51bGw9PXIpcmV0dXJuIiI7aWYoQXJyYXkuaXNBcnJheShyKXx8ci5qcXVlcnkmJiFMLmlzUGxhaW5PYmplY3QocikpTC5lYWNoKHIsZnVuY3Rpb24oKXtOKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKEMgaW4gcilKYShDLHJbQ10seSxOKTtyZXR1cm4gSy5qb2luKCJceDI2Iil9O0wuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gTC5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciByPUwucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiByP0wubWFrZUFycmF5KHIpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgcj10aGlzLnR5cGU7CnJldHVybiB0aGlzLm5hbWUmJiFMKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmUWQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIW9lLnRlc3QocikmJih0aGlzLmNoZWNrZWR8fCFjZC50ZXN0KHIpKX0pLm1hcChmdW5jdGlvbihyLHkpe3ZhciBDPUwodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PUM/bnVsbDpBcnJheS5pc0FycmF5KEMpP0wubWFwKEMsZnVuY3Rpb24oSyl7cmV0dXJue25hbWU6eS5uYW1lLHZhbHVlOksucmVwbGFjZShlZCwiXHJcbiIpfX0pOntuYW1lOnkubmFtZSx2YWx1ZTpDLnJlcGxhY2UoZWQsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIgZmQ9LyUyMC9nLHBlPS8jLiokLyxxZT0vKFs/Jl0pXz1bXiZdKi8sUmQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9tZyxUZT0vXig/OkdFVHxIRUFEKSQvLHJlPS9eXC9cLy8sc2U9e30sUGI9e30sdGU9IiovIi5jb25jYXQoIioiKSx1ZD1TYS5jcmVhdGVFbGVtZW50KCJhIik7dWQuaHJlZj1YYi5ocmVmO0wuZXh0ZW5kKHthY3RpdmU6MCwKbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6WGIuaHJlZix0eXBlOiJHRVQiLGlzTG9jYWw6L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8udGVzdChYYi5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXRceDNkVVRGLTgiLGFjY2VwdHM6eyIqIjp0ZSx0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LApjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6SlNPTi5wYXJzZSwidGV4dCB4bWwiOkwucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihyLHkpe3JldHVybiB5P3hiKHhiKHIsTC5hamF4U2V0dGluZ3MpLHkpOnhiKEwuYWpheFNldHRpbmdzLHIpfSxhamF4UHJlZmlsdGVyOlBhKHNlKSxhamF4VHJhbnNwb3J0OlBhKFBiKSxhamF4OmZ1bmN0aW9uKHIseSl7ZnVuY3Rpb24gQyhkYixxYixDYixXYil7dmFyIHFjLFNiLGpiLG5iO25iPXFiO2lmKCFqYSl7amE9ITA7YmEmJmEuY2xlYXJUaW1lb3V0KGJhKTtLPXZvaWQgMDtRPVdifHwiIjtIYS5yZWFkeVN0YXRlPTA8ZGI/NDowO1diPTIwMDw9ZGImJjMwMD5kYnx8MzA0PT09ZGI7aWYoQ2Ipe2piPWhhO2Zvcih2YXIgTGE9SGEsbWIsc2IsaWIsT2EsS2I9amIuY29udGVudHMseWI9amIuZGF0YVR5cGVzOyIqIj09PXliWzBdOyl5Yi5zaGlmdCgpLAp2b2lkIDA9PT1tYiYmKG1iPWpiLm1pbWVUeXBlfHxMYS5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKG1iKWZvcihzYiBpbiBLYilpZihLYltzYl0mJktiW3NiXS50ZXN0KG1iKSl7eWIudW5zaGlmdChzYik7YnJlYWt9aWYoeWJbMF1pbiBDYilpYj15YlswXTtlbHNle2ZvcihzYiBpbiBDYil7aWYoIXliWzBdfHxqYi5jb252ZXJ0ZXJzW3NiKyIgIit5YlswXV0pe2liPXNiO2JyZWFrfU9hfHwoT2E9c2IpfWliPWlifHxPYX1pYj8oaWIhPT15YlswXSYmeWIudW5zaGlmdChpYiksamI9Q2JbaWJdKTpqYj12b2lkIDB9YTp7Q2I9aGE7bWI9amI7c2I9SGE7aWI9V2I7dmFyIGdiLGhiLEJiLExhPXt9LEtiPUNiLmRhdGFUeXBlcy5zbGljZSgpO2lmKEtiWzFdKWZvcihoYiBpbiBDYi5jb252ZXJ0ZXJzKUxhW2hiLnRvTG93ZXJDYXNlKCldPUNiLmNvbnZlcnRlcnNbaGJdO2ZvcihPYT1LYi5zaGlmdCgpO09hOylpZihDYi5yZXNwb25zZUZpZWxkc1tPYV0mJihzYltDYi5yZXNwb25zZUZpZWxkc1tPYV1dPQptYiksIUJiJiZpYiYmQ2IuZGF0YUZpbHRlciYmKG1iPUNiLmRhdGFGaWx0ZXIobWIsQ2IuZGF0YVR5cGUpKSxCYj1PYSxPYT1LYi5zaGlmdCgpKWlmKCIqIj09PU9hKU9hPUJiO2Vsc2UgaWYoIioiIT09QmImJkJiIT09T2Epe2hiPUxhW0JiKyIgIitPYV18fExhWyIqICIrT2FdO2lmKCFoYilmb3IoZ2IgaW4gTGEpaWYoamI9Z2Iuc3BsaXQoIiAiKSxqYlsxXT09PU9hJiYoaGI9TGFbQmIrIiAiK2piWzBdXXx8TGFbIiogIitqYlswXV0pKXshMD09PWhiP2hiPUxhW2diXTohMCE9PUxhW2diXSYmKE9hPWpiWzBdLEtiLnVuc2hpZnQoamJbMV0pKTticmVha31pZighMCE9PWhiKWlmKGhiJiZDYi50aHJvd3MpbWI9aGIobWIpO2Vsc2UgdHJ5e21iPWhiKG1iKX1jYXRjaChGZCl7amI9e3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6aGI/RmQ6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK0JiKyIgdG8gIitPYX07YnJlYWsgYX19amI9e3N0YXRlOiJzdWNjZXNzIixkYXRhOm1ifX1pZihXYiloYS5pZk1vZGlmaWVkJiYKKChuYj1IYS5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKSYmKEwubGFzdE1vZGlmaWVkW05dPW5iKSwobmI9SGEuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSkmJihMLmV0YWdbTl09bmIpKSwyMDQ9PT1kYnx8IkhFQUQiPT09aGEudHlwZT9uYj0ibm9jb250ZW50IjozMDQ9PT1kYj9uYj0ibm90bW9kaWZpZWQiOihuYj1qYi5zdGF0ZSxxYz1qYi5kYXRhLFNiPWpiLmVycm9yLFdiPSFTYik7ZWxzZSBpZihTYj1uYixkYnx8IW5iKW5iPSJlcnJvciIsMD5kYiYmKGRiPTApO0hhLnN0YXR1cz1kYjtIYS5zdGF0dXNUZXh0PShxYnx8bmIpKyIiO1diP0diLnJlc29sdmVXaXRoKE1hLFtxYyxuYixIYV0pOkdiLnJlamVjdFdpdGgoTWEsW0hhLG5iLFNiXSk7SGEuc3RhdHVzQ29kZShSYik7UmI9dm9pZCAwO3NhJiZSYS50cmlnZ2VyKFdiPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW0hhLGhhLFdiP3FjOlNiXSk7SmIuZmlyZVdpdGgoTWEsW0hhLG5iXSk7c2EmJihSYS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLApbSGEsaGFdKSwtLUwuYWN0aXZlfHxMLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX0ib2JqZWN0Ij09PXR5cGVvZiByJiYoeT1yLHI9dm9pZCAwKTt5PXl8fHt9O3ZhciBLLE4sUSxTLGJhLCQsamEsc2EsemEsaGE9TC5hamF4U2V0dXAoe30seSksTWE9aGEuY29udGV4dHx8aGEsUmE9aGEuY29udGV4dCYmKE1hLm5vZGVUeXBlfHxNYS5qcXVlcnkpP0woTWEpOkwuZXZlbnQsR2I9TC5EZWZlcnJlZCgpLEpiPUwuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLFJiPWhhLnN0YXR1c0NvZGV8fHt9LHpiPXt9LGpjPXt9LGxjPSJjYW5jZWxlZCIsSGE9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihkYil7dmFyIHFiO2lmKGphKXtpZighUylmb3IoUz17fTtxYj1SZC5leGVjKFEpOylTW3FiWzFdLnRvTG93ZXJDYXNlKCkrIiAiXT0oU1txYlsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQocWJbMl0pO3FiPVNbZGIudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT0KcWI/bnVsbDpxYi5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gamE/UTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGRiLHFiKXtudWxsPT1qYSYmKGRiPWpjW2RiLnRvTG93ZXJDYXNlKCldPWpjW2RiLnRvTG93ZXJDYXNlKCldfHxkYix6YltkYl09cWIpO3JldHVybiB0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGRiKXtudWxsPT1qYSYmKGhhLm1pbWVUeXBlPWRiKTtyZXR1cm4gdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihkYil7dmFyIHFiO2lmKGRiKWlmKGphKUhhLmFsd2F5cyhkYltIYS5zdGF0dXNdKTtlbHNlIGZvcihxYiBpbiBkYilSYltxYl09W1JiW3FiXSxkYltxYl1dO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihkYil7ZGI9ZGJ8fGxjO0smJksuYWJvcnQoZGIpO0MoMCxkYik7cmV0dXJuIHRoaXN9fTtHYi5wcm9taXNlKEhhKTtoYS51cmw9KChyfHxoYS51cmx8fFhiLmhyZWYpKyIiKS5yZXBsYWNlKHJlLApYYi5wcm90b2NvbCsiLy8iKTtoYS50eXBlPXkubWV0aG9kfHx5LnR5cGV8fGhhLm1ldGhvZHx8aGEudHlwZTtoYS5kYXRhVHlwZXM9KGhhLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkubWF0Y2goaGMpfHxbIiJdO2lmKG51bGw9PWhhLmNyb3NzRG9tYWluKXskPVNhLmNyZWF0ZUVsZW1lbnQoImEiKTt0cnl7JC5ocmVmPWhhLnVybCwkLmhyZWY9JC5ocmVmLGhhLmNyb3NzRG9tYWluPXVkLnByb3RvY29sKyIvLyIrdWQuaG9zdCE9PSQucHJvdG9jb2wrIi8vIiskLmhvc3R9Y2F0Y2goYWIpe2hhLmNyb3NzRG9tYWluPSEwfX1oYS5kYXRhJiZoYS5wcm9jZXNzRGF0YSYmInN0cmluZyIhPT10eXBlb2YgaGEuZGF0YSYmKGhhLmRhdGE9TC5wYXJhbShoYS5kYXRhLGhhLnRyYWRpdGlvbmFsKSk7ZmIoc2UsaGEseSxIYSk7aWYoamEpcmV0dXJuIEhhOyhzYT1MLmV2ZW50JiZoYS5nbG9iYWwpJiYwPT09TC5hY3RpdmUrKyYmTC5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtoYS50eXBlPQpoYS50eXBlLnRvVXBwZXJDYXNlKCk7aGEuaGFzQ29udGVudD0hVGUudGVzdChoYS50eXBlKTtOPWhhLnVybC5yZXBsYWNlKHBlLCIiKTtoYS5oYXNDb250ZW50P2hhLmRhdGEmJmhhLnByb2Nlc3NEYXRhJiYwPT09KGhhLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJihoYS5kYXRhPWhhLmRhdGEucmVwbGFjZShmZCwiKyIpKTooJD1oYS51cmwuc2xpY2UoTi5sZW5ndGgpLGhhLmRhdGEmJihoYS5wcm9jZXNzRGF0YXx8InN0cmluZyI9PT10eXBlb2YgaGEuZGF0YSkmJihOKz0oZGQudGVzdChOKT8iXHgyNiI6Ij8iKStoYS5kYXRhLGRlbGV0ZSBoYS5kYXRhKSwhMT09PWhhLmNhY2hlJiYoTj1OLnJlcGxhY2UocWUsIiQxIiksJD0oZGQudGVzdChOKT8iXHgyNiI6Ij8iKSsiX1x4M2QiK3RkKysgKyQpLGhhLnVybD1OKyQpO2hhLmlmTW9kaWZpZWQmJihMLmxhc3RNb2RpZmllZFtOXSYmSGEuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLApMLmxhc3RNb2RpZmllZFtOXSksTC5ldGFnW05dJiZIYS5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixMLmV0YWdbTl0pKTsoaGEuZGF0YSYmaGEuaGFzQ29udGVudCYmITEhPT1oYS5jb250ZW50VHlwZXx8eS5jb250ZW50VHlwZSkmJkhhLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsaGEuY29udGVudFR5cGUpO0hhLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsaGEuZGF0YVR5cGVzWzBdJiZoYS5hY2NlcHRzW2hhLmRhdGFUeXBlc1swXV0/aGEuYWNjZXB0c1toYS5kYXRhVHlwZXNbMF1dKygiKiIhPT1oYS5kYXRhVHlwZXNbMF0/IiwgIit0ZSsiOyBxXHgzZDAuMDEiOiIiKTpoYS5hY2NlcHRzWyIqIl0pO2Zvcih6YSBpbiBoYS5oZWFkZXJzKUhhLnNldFJlcXVlc3RIZWFkZXIoemEsaGEuaGVhZGVyc1t6YV0pO2lmKGhhLmJlZm9yZVNlbmQmJighMT09PWhhLmJlZm9yZVNlbmQuY2FsbChNYSxIYSxoYSl8fGphKSlyZXR1cm4gSGEuYWJvcnQoKTtsYz0iYWJvcnQiOwpKYi5hZGQoaGEuY29tcGxldGUpO0hhLmRvbmUoaGEuc3VjY2Vzcyk7SGEuZmFpbChoYS5lcnJvcik7aWYoSz1mYihQYixoYSx5LEhhKSl7SGEucmVhZHlTdGF0ZT0xO3NhJiZSYS50cmlnZ2VyKCJhamF4U2VuZCIsW0hhLGhhXSk7aWYoamEpcmV0dXJuIEhhO2hhLmFzeW5jJiYwPGhhLnRpbWVvdXQmJihiYT1hLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtIYS5hYm9ydCgidGltZW91dCIpfSxoYS50aW1lb3V0KSk7dHJ5e2phPSExLEsuc2VuZCh6YixDKX1jYXRjaCh3Yyl7aWYoamEpdGhyb3cgd2M7QygtMSx3Yyl9fWVsc2UgQygtMSwiTm8gVHJhbnNwb3J0Iik7cmV0dXJuIEhhfSxnZXRKU09OOmZ1bmN0aW9uKHIseSxDKXtyZXR1cm4gTC5nZXQocix5LEMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKHIseSl7cmV0dXJuIEwuZ2V0KHIsdm9pZCAwLHksInNjcmlwdCIpfX0pO0wuZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihyLHkpe0xbeV09ZnVuY3Rpb24oQyxLLE4sUSl7VmEoSykmJgooUT1RfHxOLE49SyxLPXZvaWQgMCk7cmV0dXJuIEwuYWpheChMLmV4dGVuZCh7dXJsOkMsdHlwZTp5LGRhdGFUeXBlOlEsZGF0YTpLLHN1Y2Nlc3M6Tn0sTC5pc1BsYWluT2JqZWN0KEMpJiZDKSl9fSk7TC5fZXZhbFVybD1mdW5jdGlvbihyLHkpe3JldHVybiBMLmFqYXgoe3VybDpyLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsY2FjaGU6ITAsYXN5bmM6ITEsZ2xvYmFsOiExLGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oKXt9fSxkYXRhRmlsdGVyOmZ1bmN0aW9uKEMpe0wuZ2xvYmFsRXZhbChDLHkpfX0pfTtMLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihyKXt0aGlzWzBdJiYoVmEocikmJihyPXIuY2FsbCh0aGlzWzBdKSkscj1MKHIsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZyLmluc2VydEJlZm9yZSh0aGlzWzBdKSxyLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgeT10aGlzO3kuZmlyc3RFbGVtZW50Q2hpbGQ7KXk9CnkuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIHl9KS5hcHBlbmQodGhpcykpO3JldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24ocil7cmV0dXJuIFZhKHIpP3RoaXMuZWFjaChmdW5jdGlvbih5KXtMKHRoaXMpLndyYXBJbm5lcihyLmNhbGwodGhpcyx5KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgeT1MKHRoaXMpLEM9eS5jb250ZW50cygpO0MubGVuZ3RoP0Mud3JhcEFsbChyKTp5LmFwcGVuZChyKX0pfSx3cmFwOmZ1bmN0aW9uKHIpe3ZhciB5PVZhKHIpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oQyl7TCh0aGlzKS53cmFwQWxsKHk/ci5jYWxsKHRoaXMsQyk6cil9KX0sdW53cmFwOmZ1bmN0aW9uKHIpe3RoaXMucGFyZW50KHIpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtMKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KTtyZXR1cm4gdGhpc319KTtMLmV4cHIucHNldWRvcy5oaWRkZW49ZnVuY3Rpb24ocil7cmV0dXJuIUwuZXhwci5wc2V1ZG9zLnZpc2libGUocil9OwpMLmV4cHIucHNldWRvcy52aXNpYmxlPWZ1bmN0aW9uKHIpe3JldHVybiEhKHIub2Zmc2V0V2lkdGh8fHIub2Zmc2V0SGVpZ2h0fHxyLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX07TC5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgYS5YTUxIdHRwUmVxdWVzdH1jYXRjaChyKXt9fTt2YXIgdWU9ezA6MjAwLDEyMjM6MjA0fSxnZD1MLmFqYXhTZXR0aW5ncy54aHIoKTtrYi5jb3JzPSEhZ2QmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gZ2Q7a2IuYWpheD1nZD0hIWdkO0wuYWpheFRyYW5zcG9ydChmdW5jdGlvbihyKXt2YXIgeSxDO2lmKGtiLmNvcnN8fGdkJiYhci5jcm9zc0RvbWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihLLE4pe3ZhciBRLFM9ci54aHIoKTtTLm9wZW4oci50eXBlLHIudXJsLHIuYXN5bmMsci51c2VybmFtZSxyLnBhc3N3b3JkKTtpZihyLnhockZpZWxkcylmb3IoUSBpbiByLnhockZpZWxkcylTW1FdPXIueGhyRmllbGRzW1FdO3IubWltZVR5cGUmJgpTLm92ZXJyaWRlTWltZVR5cGUmJlMub3ZlcnJpZGVNaW1lVHlwZShyLm1pbWVUeXBlKTtyLmNyb3NzRG9tYWlufHxLWyJYLVJlcXVlc3RlZC1XaXRoIl18fChLWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7Zm9yKFEgaW4gSylTLnNldFJlcXVlc3RIZWFkZXIoUSxLW1FdKTt5PWZ1bmN0aW9uKCQpe3JldHVybiBmdW5jdGlvbigpe3kmJih5PUM9Uy5vbmxvYWQ9Uy5vbmVycm9yPVMub25hYm9ydD1TLm9udGltZW91dD1TLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT0kP1MuYWJvcnQoKToiZXJyb3IiPT09JD8ibnVtYmVyIiE9PXR5cGVvZiBTLnN0YXR1cz9OKDAsImVycm9yIik6TihTLnN0YXR1cyxTLnN0YXR1c1RleHQpOk4odWVbUy5zdGF0dXNdfHxTLnN0YXR1cyxTLnN0YXR1c1RleHQsInRleHQiIT09KFMucmVzcG9uc2VUeXBlfHwidGV4dCIpfHwic3RyaW5nIiE9PXR5cGVvZiBTLnJlc3BvbnNlVGV4dD97YmluYXJ5OlMucmVzcG9uc2V9Ont0ZXh0OlMucmVzcG9uc2VUZXh0fSwKUy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX07Uy5vbmxvYWQ9eSgpO0M9Uy5vbmVycm9yPVMub250aW1lb3V0PXkoImVycm9yIik7dm9pZCAwIT09Uy5vbmFib3J0P1Mub25hYm9ydD1DOlMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PVMucmVhZHlTdGF0ZSYmYS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eSYmQygpfSl9O3k9eSgiYWJvcnQiKTt0cnl7Uy5zZW5kKHIuaGFzQ29udGVudCYmci5kYXRhfHxudWxsKX1jYXRjaChiYSl7aWYoeSl0aHJvdyBiYTt9fSxhYm9ydDpmdW5jdGlvbigpe3kmJnkoKX19fSk7TC5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKHIpe3IuY3Jvc3NEb21haW4mJihyLmNvbnRlbnRzLnNjcmlwdD0hMSl9KTtMLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sCmNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24ocil7TC5nbG9iYWxFdmFsKHIpO3JldHVybiByfX19KTtMLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24ocil7dm9pZCAwPT09ci5jYWNoZSYmKHIuY2FjaGU9ITEpO3IuY3Jvc3NEb21haW4mJihyLnR5cGU9IkdFVCIpfSk7TC5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKHIpe2lmKHIuY3Jvc3NEb21haW58fHIuc2NyaXB0QXR0cnMpe3ZhciB5LEM7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oSyxOKXt5PUwoIlx4M2NzY3JpcHRceDNlIikuYXR0cihyLnNjcmlwdEF0dHJzfHx7fSkucHJvcCh7Y2hhcnNldDpyLnNjcmlwdENoYXJzZXQsc3JjOnIudXJsfSkub24oImxvYWQgZXJyb3IiLEM9ZnVuY3Rpb24oUSl7eS5yZW1vdmUoKTtDPW51bGw7USYmTigiZXJyb3IiPT09US50eXBlPzQwNDoyMDAsUS50eXBlKX0pO1NhLmhlYWQuYXBwZW5kQ2hpbGQoeVswXSl9LGFib3J0OmZ1bmN0aW9uKCl7QyYmQygpfX19fSk7CnZhciB2ZD1bXSxoZD0vKD0pXD8oPz0mfCQpfFw/XD8vO0wuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgcj12ZC5wb3AoKXx8TC5leHBhbmRvKyJfIit0ZCsrO3RoaXNbcl09ITA7cmV0dXJuIHJ9fSk7TC5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihyLHksQyl7dmFyIEssTixRLFM9ITEhPT1yLmpzb25wJiYoaGQudGVzdChyLnVybCk/InVybCI6InN0cmluZyI9PT10eXBlb2Ygci5kYXRhJiYwPT09KHIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmaGQudGVzdChyLmRhdGEpJiYiZGF0YSIpO2lmKFN8fCJqc29ucCI9PT1yLmRhdGFUeXBlc1swXSlyZXR1cm4gSz1yLmpzb25wQ2FsbGJhY2s9VmEoci5qc29ucENhbGxiYWNrKT9yLmpzb25wQ2FsbGJhY2soKTpyLmpzb25wQ2FsbGJhY2ssUz9yW1NdPXJbU10ucmVwbGFjZShoZCwiJDEiK0spOgohMSE9PXIuanNvbnAmJihyLnVybCs9KGRkLnRlc3Qoci51cmwpPyJceDI2IjoiPyIpK3IuanNvbnArIlx4M2QiK0spLHIuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe1F8fEwuZXJyb3IoSysiIHdhcyBub3QgY2FsbGVkIik7cmV0dXJuIFFbMF19LHIuZGF0YVR5cGVzWzBdPSJqc29uIixOPWFbS10sYVtLXT1mdW5jdGlvbigpe1E9YXJndW1lbnRzfSxDLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PU4/TChhKS5yZW1vdmVQcm9wKEspOmFbS109TjtyW0tdJiYoci5qc29ucENhbGxiYWNrPXkuanNvbnBDYWxsYmFjayx2ZC5wdXNoKEspKTtRJiZWYShOKSYmTihRWzBdKTtRPU49dm9pZCAwfSksInNjcmlwdCJ9KTtrYi5jcmVhdGVIVE1MRG9jdW1lbnQ9ZnVuY3Rpb24oKXt2YXIgcj1TYS5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHk7ci5pbm5lckhUTUw9Ilx4M2Nmb3JtXHgzZVx4M2MvZm9ybVx4M2VceDNjZm9ybVx4M2VceDNjL2Zvcm1ceDNlIjsKcmV0dXJuIDI9PT1yLmNoaWxkTm9kZXMubGVuZ3RofSgpO0wucGFyc2VIVE1MPWZ1bmN0aW9uKHIseSxDKXtpZigic3RyaW5nIiE9PXR5cGVvZiByKXJldHVybltdOyJib29sZWFuIj09PXR5cGVvZiB5JiYoQz15LHk9ITEpO3ZhciBLO3l8fChrYi5jcmVhdGVIVE1MRG9jdW1lbnQ/KHk9U2EuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSxLPXkuY3JlYXRlRWxlbWVudCgiYmFzZSIpLEsuaHJlZj1TYS5sb2NhdGlvbi5ocmVmLHkuaGVhZC5hcHBlbmRDaGlsZChLKSk6eT1TYSk7Sz1oZS5leGVjKHIpO0M9IUMmJltdO2lmKEspcmV0dXJuW3kuY3JlYXRlRWxlbWVudChLWzFdKV07Sz1GKFtyXSx5LEMpO0MmJkMubGVuZ3RoJiZMKEMpLnJlbW92ZSgpO3JldHVybiBMLm1lcmdlKFtdLEsuY2hpbGROb2Rlcyl9O0wuZm4ubG9hZD1mdW5jdGlvbihyLHksQyl7dmFyIEssTixRLFM9dGhpcyxiYT1yLmluZGV4T2YoIiAiKTstMTxiYSYmKEs9dGEoci5zbGljZShiYSkpLHI9CnIuc2xpY2UoMCxiYSkpO1ZhKHkpPyhDPXkseT12b2lkIDApOnkmJiJvYmplY3QiPT09dHlwZW9mIHkmJihOPSJQT1NUIik7MDxTLmxlbmd0aCYmTC5hamF4KHt1cmw6cix0eXBlOk58fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRhOnl9KS5kb25lKGZ1bmN0aW9uKCQpe1E9YXJndW1lbnRzO1MuaHRtbChLP0woIlx4M2NkaXZceDNlIikuYXBwZW5kKEwucGFyc2VIVE1MKCQpKS5maW5kKEspOiQpfSkuYWx3YXlzKEMmJmZ1bmN0aW9uKCQsamEpe1MuZWFjaChmdW5jdGlvbigpe0MuYXBwbHkodGhpcyxRfHxbJC5yZXNwb25zZVRleHQsamEsJF0pfSl9KTtyZXR1cm4gdGhpc307TC5lYWNoKCJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoIiAiKSxmdW5jdGlvbihyLHkpe0wuZm5beV09ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMub24oeSxDKX19KTtMLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbihyKXtyZXR1cm4gTC5ncmVwKEwudGltZXJzLApmdW5jdGlvbih5KXtyZXR1cm4gcj09PXkuZWxlbX0pLmxlbmd0aH07TC5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihyLHksQyl7dmFyIEssTixRLFM9TC5jc3MociwicG9zaXRpb24iKSxiYT1MKHIpLCQ9e307InN0YXRpYyI9PT1TJiYoci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKTtRPWJhLm9mZnNldCgpO049TC5jc3MociwidG9wIik7Sz1MLmNzcyhyLCJsZWZ0Iik7KCJhYnNvbHV0ZSI9PT1TfHwiZml4ZWQiPT09UykmJi0xPChOK0spLmluZGV4T2YoImF1dG8iKT8oSz1iYS5wb3NpdGlvbigpLE49Sy50b3AsSz1LLmxlZnQpOihOPXBhcnNlRmxvYXQoTil8fDAsSz1wYXJzZUZsb2F0KEspfHwwKTtWYSh5KSYmKHk9eS5jYWxsKHIsQyxMLmV4dGVuZCh7fSxRKSkpO251bGwhPXkudG9wJiYoJC50b3A9eS50b3AtUS50b3ArTik7bnVsbCE9eS5sZWZ0JiYoJC5sZWZ0PXkubGVmdC1RLmxlZnQrSyk7InVzaW5nImluIHk/eS51c2luZy5jYWxsKHIsJCk6YmEuY3NzKCQpfX07TC5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihyKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT0Kcj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihLKXtMLm9mZnNldC5zZXRPZmZzZXQodGhpcyxyLEspfSk7dmFyIHksQztpZihDPXRoaXNbMF0pe2lmKCFDLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKXJldHVybnt0b3A6MCxsZWZ0OjB9O3k9Qy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtDPUMub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm57dG9wOnkudG9wK0MucGFnZVlPZmZzZXQsbGVmdDp5LmxlZnQrQy5wYWdlWE9mZnNldH19fSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciByLHksQyxLPXRoaXNbMF0sTj17dG9wOjAsbGVmdDowfTtpZigiZml4ZWQiPT09TC5jc3MoSywicG9zaXRpb24iKSl5PUsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt5PXRoaXMub2Zmc2V0KCk7Qz1LLm93bmVyRG9jdW1lbnQ7Zm9yKHI9Sy5vZmZzZXRQYXJlbnR8fEMuZG9jdW1lbnRFbGVtZW50O3ImJihyPT09Qy5ib2R5fHxyPT09Qy5kb2N1bWVudEVsZW1lbnQpJiYic3RhdGljIj09PQpMLmNzcyhyLCJwb3NpdGlvbiIpOylyPXIucGFyZW50Tm9kZTtyJiZyIT09SyYmMT09PXIubm9kZVR5cGUmJihOPUwocikub2Zmc2V0KCksTi50b3ArPUwuY3NzKHIsImJvcmRlclRvcFdpZHRoIiwhMCksTi5sZWZ0Kz1MLmNzcyhyLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSl9cmV0dXJue3RvcDp5LnRvcC1OLnRvcC1MLmNzcyhLLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnkubGVmdC1OLmxlZnQtTC5jc3MoSywibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgcj10aGlzLm9mZnNldFBhcmVudDtyJiYic3RhdGljIj09PUwuY3NzKHIsInBvc2l0aW9uIik7KXI9ci5vZmZzZXRQYXJlbnQ7cmV0dXJuIHJ8fGFkfSl9fSk7TC5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKHIseSl7dmFyIEM9InBhZ2VZT2Zmc2V0Ij09PXk7TC5mbltyXT0KZnVuY3Rpb24oSyl7cmV0dXJuICRiKHRoaXMsZnVuY3Rpb24oTixRLFMpe3ZhciBiYTtQYyhOKT9iYT1OOjk9PT1OLm5vZGVUeXBlJiYoYmE9Ti5kZWZhdWx0Vmlldyk7aWYodm9pZCAwPT09UylyZXR1cm4gYmE/YmFbeV06TltRXTtiYT9iYS5zY3JvbGxUbyhDP2JhLnBhZ2VYT2Zmc2V0OlMsQz9TOmJhLnBhZ2VZT2Zmc2V0KTpOW1FdPVN9LHIsSyxhcmd1bWVudHMubGVuZ3RoKX19KTtMLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24ocix5KXtMLmNzc0hvb2tzW3ldPWVhKGtiLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oQyxLKXtpZihLKXJldHVybiBLPVooQyx5KSxWYi50ZXN0KEspP0woQykucG9zaXRpb24oKVt5XSsicHgiOkt9KX0pO0wuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKHIseSl7TC5lYWNoKHtwYWRkaW5nOiJpbm5lciIrcixjb250ZW50OnksIiI6Im91dGVyIityfSxmdW5jdGlvbihDLEspe0wuZm5bS109ZnVuY3Rpb24oTixRKXt2YXIgUz0KYXJndW1lbnRzLmxlbmd0aCYmKEN8fCJib29sZWFuIiE9PXR5cGVvZiBOKSxiYT1DfHwoITA9PT1OfHwhMD09PVE/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiAkYih0aGlzLGZ1bmN0aW9uKCQsamEsc2Epe3JldHVybiBQYygkKT8wPT09Sy5pbmRleE9mKCJvdXRlciIpPyRbImlubmVyIityXTokLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IityXTo5PT09JC5ub2RlVHlwZT8oamE9JC5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoJC5ib2R5WyJzY3JvbGwiK3JdLGphWyJzY3JvbGwiK3JdLCQuYm9keVsib2Zmc2V0IityXSxqYVsib2Zmc2V0IityXSxqYVsiY2xpZW50IityXSkpOnZvaWQgMD09PXNhP0wuY3NzKCQsamEsYmEpOkwuc3R5bGUoJCxqYSxzYSxiYSl9LHksUz9OOnZvaWQgMCxTKX19KX0pO0wuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSwKZnVuY3Rpb24ocix5KXtMLmZuW3ldPWZ1bmN0aW9uKEMsSyl7cmV0dXJuIDA8YXJndW1lbnRzLmxlbmd0aD90aGlzLm9uKHksbnVsbCxDLEspOnRoaXMudHJpZ2dlcih5KX19KTtMLmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24ocix5KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKHIpLm1vdXNlbGVhdmUoeXx8cil9fSk7TC5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24ocix5LEMpe3JldHVybiB0aGlzLm9uKHIsbnVsbCx5LEMpfSx1bmJpbmQ6ZnVuY3Rpb24ocix5KXtyZXR1cm4gdGhpcy5vZmYocixudWxsLHkpfSxkZWxlZ2F0ZTpmdW5jdGlvbihyLHksQyxLKXtyZXR1cm4gdGhpcy5vbih5LHIsQyxLKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihyLHksQyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKHIsIioqIik6dGhpcy5vZmYoeSxyfHwiKioiLEMpfX0pO0wucHJveHk9ZnVuY3Rpb24ocix5KXt2YXIgQyxLOyJzdHJpbmciPT09dHlwZW9mIHkmJihDPXJbeV0seT1yLApyPUMpO2lmKFZhKHIpKXJldHVybiBLPVliLmNhbGwoYXJndW1lbnRzLDIpLEM9ZnVuY3Rpb24oKXtyZXR1cm4gci5hcHBseSh5fHx0aGlzLEsuY29uY2F0KFliLmNhbGwoYXJndW1lbnRzKSkpfSxDLmd1aWQ9ci5ndWlkPXIuZ3VpZHx8TC5ndWlkKyssQ307TC5ob2xkUmVhZHk9ZnVuY3Rpb24ocil7cj9MLnJlYWR5V2FpdCsrOkwucmVhZHkoITApfTtMLmlzQXJyYXk9QXJyYXkuaXNBcnJheTtMLnBhcnNlSlNPTj1KU09OLnBhcnNlO0wubm9kZU5hbWU9ZDtMLmlzRnVuY3Rpb249VmE7TC5pc1dpbmRvdz1QYztMLmNhbWVsQ2FzZT1sO0wudHlwZT10O0wubm93PURhdGUubm93O0wuaXNOdW1lcmljPWZ1bmN0aW9uKHIpe3ZhciB5PUwudHlwZShyKTtyZXR1cm4oIm51bWJlciI9PT15fHwic3RyaW5nIj09PXkpJiYhaXNOYU4oci1wYXJzZUZsb2F0KHIpKX07ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBMfSk7CnZhciB3ZD1hLmpRdWVyeSx2ZT1hLiQ7TC5ub0NvbmZsaWN0PWZ1bmN0aW9uKHIpe2EuJD09PUwmJihhLiQ9dmUpO3ImJmEualF1ZXJ5PT09TCYmKGEualF1ZXJ5PXdkKTtyZXR1cm4gTH07RXx8KGEualF1ZXJ5PWEuJD1MKTtyZXR1cm4gTH0pO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGpRdWVyeSl0aHJvdyBFcnJvcigiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkiKTsoZnVuY3Rpb24oYSl7YT1hLmZuLmpxdWVyeS5zcGxpdCgiICIpWzBdLnNwbGl0KCIuIik7aWYoMj5hWzBdJiY5PmFbMV18fDE9PWFbMF0mJjk9PWFbMV0mJjE+YVsyXSl0aHJvdyBFcnJvcigiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkgdmVyc2lvbiAxLjkuMSBvciBoaWdoZXIiKTt9KShqUXVlcnkpOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gRSgpe3ZhciBxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvb3RzdHJhcCIpLHQ9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQiLE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9LGY7Zm9yKGYgaW4gdClpZih2b2lkIDAhPT1xLnN0eWxlW2ZdKXJldHVybntlbmQ6dFtmXX07cmV0dXJuITF9YS5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZD1mdW5jdGlvbihxKXt2YXIgdD0hMSxmPXRoaXM7YSh0aGlzKS5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZnVuY3Rpb24oKXt0PSEwfSk7c2V0VGltZW91dChmdW5jdGlvbigpe3R8fGEoZikudHJpZ2dlcihhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpfSxxKTtyZXR1cm4gdGhpc307YShmdW5jdGlvbigpe2Euc3VwcG9ydC50cmFuc2l0aW9uPUUoKTthLnN1cHBvcnQudHJhbnNpdGlvbiYmCihhLmV2ZW50LnNwZWNpYWwuYnNUcmFuc2l0aW9uRW5kPXtiaW5kVHlwZTphLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZGVsZWdhdGVUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxoYW5kbGU6ZnVuY3Rpb24ocSl7aWYoYShxLnRhcmdldCkuaXModGhpcykpcmV0dXJuIHEuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSl9KShqUXVlcnkpOwooZnVuY3Rpb24oYSl7dmFyIEU9ZnVuY3Rpb24odCl7YSh0KS5vbigiY2xpY2siLCdbZGF0YS1kaXNtaXNzXHgzZCJhbGVydCJdJyx0aGlzLmNsb3NlKX07RS5WRVJTSU9OPSIzLjMuNSI7RS5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MDtFLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBmKCl7Yi5kZXRhY2goKS50cmlnZ2VyKCJjbG9zZWQuYnMuYWxlcnQiKS5yZW1vdmUoKX12YXIgZD1hKHRoaXMpLGM9ZC5hdHRyKCJkYXRhLXRhcmdldCIpO2N8fChjPShjPWQuYXR0cigiaHJlZiIpKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKTt2YXIgYj1hKGMpO3QmJnQucHJldmVudERlZmF1bHQoKTtiLmxlbmd0aHx8KGI9ZC5jbG9zZXN0KCIuYWxlcnQiKSk7Yi50cmlnZ2VyKHQ9YS5FdmVudCgiY2xvc2UuYnMuYWxlcnQiKSk7dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGIucmVtb3ZlQ2xhc3MoImluIiksYS5zdXBwb3J0LnRyYW5zaXRpb24mJmIuaGFzQ2xhc3MoImZhZGUiKT8KYi5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZikuZW11bGF0ZVRyYW5zaXRpb25FbmQoRS5UUkFOU0lUSU9OX0RVUkFUSU9OKTpmKCkpfTt2YXIgcT1hLmZuLmFsZXJ0O2EuZm4uYWxlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWEodGhpcyksZD1mLmRhdGEoImJzLmFsZXJ0Iik7ZHx8Zi5kYXRhKCJicy5hbGVydCIsZD1uZXcgRSh0aGlzKSk7InN0cmluZyI9PXR5cGVvZiB0JiZkW3RdLmNhbGwoZil9KX07YS5mbi5hbGVydC5Db25zdHJ1Y3Rvcj1FO2EuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe2EuZm4uYWxlcnQ9cTtyZXR1cm4gdGhpc307YShkb2N1bWVudCkub24oImNsaWNrLmJzLmFsZXJ0LmRhdGEtYXBpIiwnW2RhdGEtZGlzbWlzc1x4M2QiYWxlcnQiXScsRS5wcm90b3R5cGUuY2xvc2UpfSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIEUoZil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksYz1kLmRhdGEoImJzLmJ1dHRvbiIpLGI9Im9iamVjdCI9PXR5cGVvZiBmJiZmO2N8fGQuZGF0YSgiYnMuYnV0dG9uIixjPW5ldyBxKHRoaXMsYikpOyJ0b2dnbGUiPT1mP2MudG9nZ2xlKCk6ZiYmYy5zZXRTdGF0ZShmKX0pfXZhciBxPWZ1bmN0aW9uKGYsZCl7dGhpcy4kZWxlbWVudD1hKGYpO3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxxLkRFRkFVTFRTLGQpO3RoaXMuaXNMb2FkaW5nPSExfTtxLlZFUlNJT049IjMuMy41IjtxLkRFRkFVTFRTPXtsb2FkaW5nVGV4dDoibG9hZGluZy4uLiJ9O3EucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGYpe3ZhciBkPXRoaXMuJGVsZW1lbnQsYz1kLmlzKCJpbnB1dCIpPyJ2YWwiOiJodG1sIixiPWQuZGF0YSgpO2YrPSJUZXh0IjtudWxsPT1iLnJlc2V0VGV4dCYmZC5kYXRhKCJyZXNldFRleHQiLGRbY10oKSk7c2V0VGltZW91dChhLnByb3h5KGZ1bmN0aW9uKCl7ZFtjXShudWxsPT0KYltmXT90aGlzLm9wdGlvbnNbZl06YltmXSk7ImxvYWRpbmdUZXh0Ij09Zj8odGhpcy5pc0xvYWRpbmc9ITAsZC5hZGRDbGFzcygiZGlzYWJsZWQiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIikpOnRoaXMuaXNMb2FkaW5nJiYodGhpcy5pc0xvYWRpbmc9ITEsZC5yZW1vdmVDbGFzcygiZGlzYWJsZWQiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpKX0sdGhpcyksMCl9O3EucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciBmPSEwLGQ9dGhpcy4kZWxlbWVudC5jbG9zZXN0KCdbZGF0YS10b2dnbGVceDNkImJ1dHRvbnMiXScpO2lmKGQubGVuZ3RoKXt2YXIgYz10aGlzLiRlbGVtZW50LmZpbmQoImlucHV0Iik7InJhZGlvIj09Yy5wcm9wKCJ0eXBlIik/KGMucHJvcCgiY2hlY2tlZCIpJiYoZj0hMSksZC5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoImFjdGl2ZSIpKToiY2hlY2tib3giPT1jLnByb3AoInR5cGUiKSYmCihjLnByb3AoImNoZWNrZWQiKSE9PXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpJiYoZj0hMSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygiYWN0aXZlIikpO2MucHJvcCgiY2hlY2tlZCIsdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiYWN0aXZlIikpO2YmJmMudHJpZ2dlcigiY2hhbmdlIil9ZWxzZSB0aGlzLiRlbGVtZW50LmF0dHIoImFyaWEtcHJlc3NlZCIsIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKCJhY3RpdmUiKX07dmFyIHQ9YS5mbi5idXR0b247YS5mbi5idXR0b249RTthLmZuLmJ1dHRvbi5Db25zdHJ1Y3Rvcj1xO2EuZm4uYnV0dG9uLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXthLmZuLmJ1dHRvbj10O3JldHVybiB0aGlzfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMuYnV0dG9uLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXlx4M2QiYnV0dG9uIl0nLGZ1bmN0aW9uKGYpe3ZhciBkPWEoZi50YXJnZXQpOwpkLmhhc0NsYXNzKCJidG4iKXx8KGQ9ZC5jbG9zZXN0KCIuYnRuIikpO0UuY2FsbChkLCJ0b2dnbGUiKTthKGYudGFyZ2V0KS5pcygnaW5wdXRbdHlwZVx4M2QicmFkaW8iXScpfHxhKGYudGFyZ2V0KS5pcygnaW5wdXRbdHlwZVx4M2QiY2hlY2tib3giXScpfHxmLnByZXZlbnREZWZhdWx0KCl9KS5vbigiZm9jdXMuYnMuYnV0dG9uLmRhdGEtYXBpIGJsdXIuYnMuYnV0dG9uLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXlx4M2QiYnV0dG9uIl0nLGZ1bmN0aW9uKGYpe2EoZi50YXJnZXQpLmNsb3Nlc3QoIi5idG4iKS50b2dnbGVDbGFzcygiZm9jdXMiLC9eZm9jdXMoaW4pPyQvLnRlc3QoZi50eXBlKSl9KX0pKGpRdWVyeSk7CihmdW5jdGlvbihhKXtmdW5jdGlvbiBFKGQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGI9Yy5kYXRhKCJicy5jYXJvdXNlbCIpLGc9YS5leHRlbmQoe30scS5ERUZBVUxUUyxjLmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIGQmJmQpLGU9InN0cmluZyI9PXR5cGVvZiBkP2Q6Zy5zbGlkZTtifHxjLmRhdGEoImJzLmNhcm91c2VsIixiPW5ldyBxKHRoaXMsZykpO2lmKCJudW1iZXIiPT10eXBlb2YgZCliLnRvKGQpO2Vsc2UgaWYoZSliW2VdKCk7ZWxzZSBnLmludGVydmFsJiZiLnBhdXNlKCkuY3ljbGUoKX0pfXZhciBxPWZ1bmN0aW9uKGQsYyl7dGhpcy4kZWxlbWVudD1hKGQpO3RoaXMuJGluZGljYXRvcnM9dGhpcy4kZWxlbWVudC5maW5kKCIuY2Fyb3VzZWwtaW5kaWNhdG9ycyIpO3RoaXMub3B0aW9ucz1jO3RoaXMuJGl0ZW1zPXRoaXMuJGFjdGl2ZT10aGlzLmludGVydmFsPXRoaXMuc2xpZGluZz10aGlzLnBhdXNlZD1udWxsO3RoaXMub3B0aW9ucy5rZXlib2FyZCYmCnRoaXMuJGVsZW1lbnQub24oImtleWRvd24uYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5rZXlkb3duLHRoaXMpKTsiaG92ZXIiIT10aGlzLm9wdGlvbnMucGF1c2V8fCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHx0aGlzLiRlbGVtZW50Lm9uKCJtb3VzZWVudGVyLmJzLmNhcm91c2VsIixhLnByb3h5KHRoaXMucGF1c2UsdGhpcykpLm9uKCJtb3VzZWxlYXZlLmJzLmNhcm91c2VsIixhLnByb3h5KHRoaXMuY3ljbGUsdGhpcykpfTtxLlZFUlNJT049IjMuMy41IjtxLlRSQU5TSVRJT05fRFVSQVRJT049NjAwO3EuREVGQVVMVFM9e2ludGVydmFsOjVFMyxwYXVzZToiaG92ZXIiLHdyYXA6ITAsa2V5Ym9hcmQ6ITB9O3EucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24oZCl7aWYoIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZC50YXJnZXQudGFnTmFtZSkpe3N3aXRjaChkLndoaWNoKXtjYXNlIDM3OnRoaXMucHJldigpO2JyZWFrO2Nhc2UgMzk6dGhpcy5uZXh0KCk7CmJyZWFrO2RlZmF1bHQ6cmV0dXJufWQucHJldmVudERlZmF1bHQoKX19O3EucHJvdG90eXBlLmN5Y2xlPWZ1bmN0aW9uKGQpe2R8fCh0aGlzLnBhdXNlZD0hMSk7dGhpcy5pbnRlcnZhbCYmY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTt0aGlzLm9wdGlvbnMuaW50ZXJ2YWwmJiF0aGlzLnBhdXNlZCYmKHRoaXMuaW50ZXJ2YWw9c2V0SW50ZXJ2YWwoYS5wcm94eSh0aGlzLm5leHQsdGhpcyksdGhpcy5vcHRpb25zLmludGVydmFsKSk7cmV0dXJuIHRoaXN9O3EucHJvdG90eXBlLmdldEl0ZW1JbmRleD1mdW5jdGlvbihkKXt0aGlzLiRpdGVtcz1kLnBhcmVudCgpLmNoaWxkcmVuKCIuaXRlbSIpO3JldHVybiB0aGlzLiRpdGVtcy5pbmRleChkfHx0aGlzLiRhY3RpdmUpfTtxLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uPWZ1bmN0aW9uKGQsYyl7dmFyIGI9dGhpcy5nZXRJdGVtSW5kZXgoYyk7cmV0dXJuKCJwcmV2Ij09ZCYmMD09PWJ8fCJuZXh0Ij09ZCYmYj09dGhpcy4kaXRlbXMubGVuZ3RoLQoxKSYmIXRoaXMub3B0aW9ucy53cmFwP2M6dGhpcy4kaXRlbXMuZXEoKGIrKCJwcmV2Ij09ZD8tMToxKSkldGhpcy4kaXRlbXMubGVuZ3RoKX07cS5wcm90b3R5cGUudG89ZnVuY3Rpb24oZCl7dmFyIGM9dGhpcyxiPXRoaXMuZ2V0SXRlbUluZGV4KHRoaXMuJGFjdGl2ZT10aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtLmFjdGl2ZSIpKTtpZighKGQ+dGhpcy4kaXRlbXMubGVuZ3RoLTF8fDA+ZCkpcmV0dXJuIHRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZSgic2xpZC5icy5jYXJvdXNlbCIsZnVuY3Rpb24oKXtjLnRvKGQpfSk6Yj09ZD90aGlzLnBhdXNlKCkuY3ljbGUoKTp0aGlzLnNsaWRlKGQ+Yj8ibmV4dCI6InByZXYiLHRoaXMuJGl0ZW1zLmVxKGQpKX07cS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oZCl7ZHx8KHRoaXMucGF1c2VkPSEwKTt0aGlzLiRlbGVtZW50LmZpbmQoIi5uZXh0LCAucHJldiIpLmxlbmd0aCYmYS5zdXBwb3J0LnRyYW5zaXRpb24mJih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSwKdGhpcy5jeWNsZSghMCkpO3RoaXMuaW50ZXJ2YWw9Y2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtyZXR1cm4gdGhpc307cS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe2lmKCF0aGlzLnNsaWRpbmcpcmV0dXJuIHRoaXMuc2xpZGUoIm5leHQiKX07cS5wcm90b3R5cGUucHJldj1mdW5jdGlvbigpe2lmKCF0aGlzLnNsaWRpbmcpcmV0dXJuIHRoaXMuc2xpZGUoInByZXYiKX07cS5wcm90b3R5cGUuc2xpZGU9ZnVuY3Rpb24oZCxjKXt2YXIgYj10aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtLmFjdGl2ZSIpLGc9Y3x8dGhpcy5nZXRJdGVtRm9yRGlyZWN0aW9uKGQsYiksZT10aGlzLmludGVydmFsLGs9Im5leHQiPT1kPyJsZWZ0IjoicmlnaHQiLG09dGhpcztpZihnLmhhc0NsYXNzKCJhY3RpdmUiKSlyZXR1cm4gdGhpcy5zbGlkaW5nPSExO3ZhciBwPWdbMF0scz1hLkV2ZW50KCJzbGlkZS5icy5jYXJvdXNlbCIse3JlbGF0ZWRUYXJnZXQ6cCxkaXJlY3Rpb246a30pO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihzKTsKaWYoIXMuaXNEZWZhdWx0UHJldmVudGVkKCkpe3RoaXMuc2xpZGluZz0hMDtlJiZ0aGlzLnBhdXNlKCk7dGhpcy4kaW5kaWNhdG9ycy5sZW5ndGgmJih0aGlzLiRpbmRpY2F0b3JzLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksKHM9YSh0aGlzLiRpbmRpY2F0b3JzLmNoaWxkcmVuKClbdGhpcy5nZXRJdGVtSW5kZXgoZyldKSkmJnMuYWRkQ2xhc3MoImFjdGl2ZSIpKTt2YXIgbD1hLkV2ZW50KCJzbGlkLmJzLmNhcm91c2VsIix7cmVsYXRlZFRhcmdldDpwLGRpcmVjdGlvbjprfSk7YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoInNsaWRlIik/KGcuYWRkQ2xhc3MoZCksZ1swXS5vZmZzZXRXaWR0aC50b0ZpeGVkKCksYi5hZGRDbGFzcyhrKSxnLmFkZENsYXNzKGspLGIub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7Zy5yZW1vdmVDbGFzcyhbZCxrXS5qb2luKCIgIikpLmFkZENsYXNzKCJhY3RpdmUiKTtiLnJlbW92ZUNsYXNzKFsiYWN0aXZlIiwKa10uam9pbigiICIpKTttLnNsaWRpbmc9ITE7c2V0VGltZW91dChmdW5jdGlvbigpe20uJGVsZW1lbnQudHJpZ2dlcihsKX0sMCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChxLlRSQU5TSVRJT05fRFVSQVRJT04pKTooYi5yZW1vdmVDbGFzcygiYWN0aXZlIiksZy5hZGRDbGFzcygiYWN0aXZlIiksdGhpcy5zbGlkaW5nPSExLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihsKSk7ZSYmdGhpcy5jeWNsZSgpO3JldHVybiB0aGlzfX07dmFyIHQ9YS5mbi5jYXJvdXNlbDthLmZuLmNhcm91c2VsPUU7YS5mbi5jYXJvdXNlbC5Db25zdHJ1Y3Rvcj1xO2EuZm4uY2Fyb3VzZWwubm9Db25mbGljdD1mdW5jdGlvbigpe2EuZm4uY2Fyb3VzZWw9dDtyZXR1cm4gdGhpc307dmFyIGY9ZnVuY3Rpb24oZCl7dmFyIGMsYj1hKHRoaXMpLGc9YShiLmF0dHIoImRhdGEtdGFyZ2V0Iil8fChjPWIuYXR0cigiaHJlZiIpKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKTtpZihnLmhhc0NsYXNzKCJjYXJvdXNlbCIpKXtjPQphLmV4dGVuZCh7fSxnLmRhdGEoKSxiLmRhdGEoKSk7aWYoYj1iLmF0dHIoImRhdGEtc2xpZGUtdG8iKSljLmludGVydmFsPSExO0UuY2FsbChnLGMpO2ImJmcuZGF0YSgiYnMuY2Fyb3VzZWwiKS50byhiKTtkLnByZXZlbnREZWZhdWx0KCl9fTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMuY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0iLGYpLm9uKCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRhLXNsaWRlLXRvXSIsZik7YSh3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpe2EoJ1tkYXRhLXJpZGVceDNkImNhcm91c2VsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKTtFLmNhbGwoZCxkLmRhdGEoKSl9KX0pfSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIEUoZCl7dmFyIGM7ZD1kLmF0dHIoImRhdGEtdGFyZ2V0Iil8fChjPWQuYXR0cigiaHJlZiIpKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpO3JldHVybiBhKGQpfWZ1bmN0aW9uIHEoZCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksYj1jLmRhdGEoImJzLmNvbGxhcHNlIiksZz1hLmV4dGVuZCh7fSx0LkRFRkFVTFRTLGMuZGF0YSgpLCJvYmplY3QiPT10eXBlb2YgZCYmZCk7IWImJmcudG9nZ2xlJiYvc2hvd3xoaWRlLy50ZXN0KGQpJiYoZy50b2dnbGU9ITEpO2J8fGMuZGF0YSgiYnMuY29sbGFwc2UiLGI9bmV3IHQodGhpcyxnKSk7aWYoInN0cmluZyI9PXR5cGVvZiBkKWJbZF0oKX0pfXZhciB0PWZ1bmN0aW9uKGQsYyl7dGhpcy4kZWxlbWVudD1hKGQpO3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSx0LkRFRkFVTFRTLGMpO3RoaXMuJHRyaWdnZXI9YSgnW2RhdGEtdG9nZ2xlXHgzZCJjb2xsYXBzZSJdW2hyZWZceDNkIiMnKwpkLmlkKyciXSxbZGF0YS10b2dnbGVceDNkImNvbGxhcHNlIl1bZGF0YS10YXJnZXRceDNkIiMnK2QuaWQrJyJdJyk7dGhpcy50cmFuc2l0aW9uaW5nPW51bGw7dGhpcy5vcHRpb25zLnBhcmVudD90aGlzLiRwYXJlbnQ9dGhpcy5nZXRQYXJlbnQoKTp0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLiRlbGVtZW50LHRoaXMuJHRyaWdnZXIpO3RoaXMub3B0aW9ucy50b2dnbGUmJnRoaXMudG9nZ2xlKCl9O3QuVkVSU0lPTj0iMy4zLjUiO3QuVFJBTlNJVElPTl9EVVJBVElPTj0zNTA7dC5ERUZBVUxUUz17dG9nZ2xlOiEwfTt0LnByb3RvdHlwZS5kaW1lbnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZWxlbWVudC5oYXNDbGFzcygid2lkdGgiKT8id2lkdGgiOiJoZWlnaHQifTt0LnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7aWYoIXRoaXMudHJhbnNpdGlvbmluZyYmIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpe3ZhciBkLGM9dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuY2hpbGRyZW4oIi5wYW5lbCIpLmNoaWxkcmVuKCIuaW4sIC5jb2xsYXBzaW5nIik7CmlmKGMmJmMubGVuZ3RoJiYoZD1jLmRhdGEoImJzLmNvbGxhcHNlIikpJiZkLnRyYW5zaXRpb25pbmcpcmV0dXJuO3ZhciBiPWEuRXZlbnQoInNob3cuYnMuY29sbGFwc2UiKTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoYik7aWYoIWIuaXNEZWZhdWx0UHJldmVudGVkKCkpe2MmJmMubGVuZ3RoJiYocS5jYWxsKGMsImhpZGUiKSxkfHxjLmRhdGEoImJzLmNvbGxhcHNlIixudWxsKSk7dmFyIGc9dGhpcy5kaW1lbnNpb24oKTt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJjb2xsYXBzZSIpLmFkZENsYXNzKCJjb2xsYXBzaW5nIilbZ10oMCkuYXR0cigiYXJpYS1leHBhbmRlZCIsITApO3RoaXMuJHRyaWdnZXIucmVtb3ZlQ2xhc3MoImNvbGxhcHNlZCIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEwKTt0aGlzLnRyYW5zaXRpb25pbmc9MTtkPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLmFkZENsYXNzKCJjb2xsYXBzZSBpbiIpW2ddKCIiKTt0aGlzLnRyYW5zaXRpb25pbmc9CjA7dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJzaG93bi5icy5jb2xsYXBzZSIpfTtpZighYS5zdXBwb3J0LnRyYW5zaXRpb24pcmV0dXJuIGQuY2FsbCh0aGlzKTtjPWEuY2FtZWxDYXNlKFsic2Nyb2xsIixnXS5qb2luKCItIikpO3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoZCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodC5UUkFOU0lUSU9OX0RVUkFUSU9OKVtnXSh0aGlzLiRlbGVtZW50WzBdW2NdKX19fTt0LnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMudHJhbnNpdGlvbmluZyYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKSl7dmFyIGQ9YS5FdmVudCgiaGlkZS5icy5jb2xsYXBzZSIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihkKTtpZighZC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7ZD10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnRbZF0odGhpcy4kZWxlbWVudFtkXSgpKTt0aGlzLiRlbGVtZW50LmFkZENsYXNzKCJjb2xsYXBzaW5nIikucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIGluIikuYXR0cigiYXJpYS1leHBhbmRlZCIsCiExKTt0aGlzLiR0cmlnZ2VyLmFkZENsYXNzKCJjb2xsYXBzZWQiKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMSk7dGhpcy50cmFuc2l0aW9uaW5nPTE7dmFyIGM9ZnVuY3Rpb24oKXt0aGlzLnRyYW5zaXRpb25pbmc9MDt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJjb2xsYXBzaW5nIikuYWRkQ2xhc3MoImNvbGxhcHNlIikudHJpZ2dlcigiaGlkZGVuLmJzLmNvbGxhcHNlIil9O2lmKCFhLnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gYy5jYWxsKHRoaXMpO3RoaXMuJGVsZW1lbnRbZF0oMCkub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoYyx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodC5UUkFOU0lUSU9OX0RVUkFUSU9OKX19fTt0LnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIik/ImhpZGUiOiJzaG93Il0oKX07dC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5vcHRpb25zLnBhcmVudCkuZmluZCgnW2RhdGEtdG9nZ2xlXHgzZCJjb2xsYXBzZSJdW2RhdGEtcGFyZW50XHgzZCInKwp0aGlzLm9wdGlvbnMucGFyZW50KyciXScpLmVhY2goYS5wcm94eShmdW5jdGlvbihkLGMpe3ZhciBiPWEoYyk7dGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoRShiKSxiKX0sdGhpcykpLmVuZCgpfTt0LnByb3RvdHlwZS5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3M9ZnVuY3Rpb24oZCxjKXt2YXIgYj1kLmhhc0NsYXNzKCJpbiIpO2QuYXR0cigiYXJpYS1leHBhbmRlZCIsYik7Yy50b2dnbGVDbGFzcygiY29sbGFwc2VkIiwhYikuYXR0cigiYXJpYS1leHBhbmRlZCIsYil9O3ZhciBmPWEuZm4uY29sbGFwc2U7YS5mbi5jb2xsYXBzZT1xO2EuZm4uY29sbGFwc2UuQ29uc3RydWN0b3I9dDthLmZuLmNvbGxhcHNlLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXthLmZuLmNvbGxhcHNlPWY7cmV0dXJuIHRoaXN9O2EoZG9jdW1lbnQpLm9uKCJjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZVx4M2QiY29sbGFwc2UiXScsZnVuY3Rpb24oZCl7dmFyIGM9YSh0aGlzKTsKYy5hdHRyKCJkYXRhLXRhcmdldCIpfHxkLnByZXZlbnREZWZhdWx0KCk7ZD1FKGMpO2M9ZC5kYXRhKCJicy5jb2xsYXBzZSIpPyJ0b2dnbGUiOmMuZGF0YSgpO3EuY2FsbChkLGMpfSl9KShqUXVlcnkpOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gRShiKXt2YXIgZz1iLmF0dHIoImRhdGEtdGFyZ2V0Iik7Z3x8KGc9KGc9Yi5hdHRyKCJocmVmIikpJiYvI1tBLVphLXpdLy50ZXN0KGcpJiZnLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpO3JldHVybihnPWcmJmEoZykpJiZnLmxlbmd0aD9nOmIucGFyZW50KCl9ZnVuY3Rpb24gcShiKXtiJiYzPT09Yi53aGljaHx8KGEodCkucmVtb3ZlKCksYShmKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9YSh0aGlzKSxlPUUoZyksaz17cmVsYXRlZFRhcmdldDp0aGlzfTshZS5oYXNDbGFzcygib3BlbiIpfHxiJiYiY2xpY2siPT1iLnR5cGUmJi9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoYi50YXJnZXQudGFnTmFtZSkmJmEuY29udGFpbnMoZVswXSxiLnRhcmdldCl8fChlLnRyaWdnZXIoYj1hLkV2ZW50KCJoaWRlLmJzLmRyb3Bkb3duIixrKSksYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGcuYXR0cigiYXJpYS1leHBhbmRlZCIsImZhbHNlIiksZS5yZW1vdmVDbGFzcygib3BlbiIpLnRyaWdnZXIoImhpZGRlbi5icy5kcm9wZG93biIsCmspKSl9KSl9dmFyIHQ9Ii5kcm9wZG93bi1iYWNrZHJvcCIsZj0nW2RhdGEtdG9nZ2xlXHgzZCJkcm9wZG93biJdJyxkPWZ1bmN0aW9uKGIpe2EoYikub24oImNsaWNrLmJzLmRyb3Bkb3duIix0aGlzLnRvZ2dsZSl9O2QuVkVSU0lPTj0iMy4zLjUiO2QucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXt2YXIgZz1hKHRoaXMpO2lmKCFnLmlzKCIuZGlzYWJsZWQsIDpkaXNhYmxlZCIpKXt2YXIgZT1FKGcpO2I9ZS5oYXNDbGFzcygib3BlbiIpO3EoKTtpZighYil7aWYoIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJiFlLmNsb3Nlc3QoIi5uYXZiYXItbmF2IikubGVuZ3RoKWEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmFkZENsYXNzKCJkcm9wZG93bi1iYWNrZHJvcCIpLmluc2VydEFmdGVyKGEodGhpcykpLm9uKCJjbGljayIscSk7dmFyIGs9e3JlbGF0ZWRUYXJnZXQ6dGhpc307ZS50cmlnZ2VyKGI9YS5FdmVudCgic2hvdy5icy5kcm9wZG93biIsCmspKTtpZihiLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtnLnRyaWdnZXIoImZvY3VzIikuYXR0cigiYXJpYS1leHBhbmRlZCIsInRydWUiKTtlLnRvZ2dsZUNsYXNzKCJvcGVuIikudHJpZ2dlcigic2hvd24uYnMuZHJvcGRvd24iLGspfXJldHVybiExfX07ZC5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihiKXtpZigvKDM4fDQwfDI3fDMyKS8udGVzdChiLndoaWNoKSYmIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoYi50YXJnZXQudGFnTmFtZSkpe3ZhciBnPWEodGhpcyk7Yi5wcmV2ZW50RGVmYXVsdCgpO2Iuc3RvcFByb3BhZ2F0aW9uKCk7aWYoIWcuaXMoIi5kaXNhYmxlZCwgOmRpc2FibGVkIikpe3ZhciBlPUUoZyksaz1lLmhhc0NsYXNzKCJvcGVuIik7aWYoIWsmJjI3IT1iLndoaWNofHxrJiYyNz09Yi53aGljaClyZXR1cm4gMjc9PWIud2hpY2gmJmUuZmluZChmKS50cmlnZ2VyKCJmb2N1cyIpLGcudHJpZ2dlcigiY2xpY2siKTtnPWUuZmluZCgiLmRyb3Bkb3duLW1lbnUgbGk6bm90KC5kaXNhYmxlZCk6dmlzaWJsZSBhIik7CmcubGVuZ3RoJiYoZT1nLmluZGV4KGIudGFyZ2V0KSwzOD09Yi53aGljaCYmMDxlJiZlLS0sNDA9PWIud2hpY2gmJmU8Zy5sZW5ndGgtMSYmZSsrLH5lfHwoZT0wKSxnLmVxKGUpLnRyaWdnZXIoImZvY3VzIikpfX19O3ZhciBjPWEuZm4uZHJvcGRvd247YS5mbi5kcm9wZG93bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9YSh0aGlzKSxlPWcuZGF0YSgiYnMuZHJvcGRvd24iKTtlfHxnLmRhdGEoImJzLmRyb3Bkb3duIixlPW5ldyBkKHRoaXMpKTsic3RyaW5nIj09dHlwZW9mIGImJmVbYl0uY2FsbChnKX0pfTthLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPWQ7YS5mbi5kcm9wZG93bi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7YS5mbi5kcm9wZG93bj1jO3JldHVybiB0aGlzfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGkiLHEpLm9uKCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93biBmb3JtIixmdW5jdGlvbihiKXtiLnN0b3BQcm9wYWdhdGlvbigpfSkub24oImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpIiwKZixkLnByb3RvdHlwZS50b2dnbGUpLm9uKCJrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpIixmLGQucHJvdG90eXBlLmtleWRvd24pLm9uKCJrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3duLW1lbnUiLGQucHJvdG90eXBlLmtleWRvd24pfSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIEUoZixkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxiPWMuZGF0YSgiYnMubW9kYWwiKSxnPWEuZXh0ZW5kKHt9LHEuREVGQVVMVFMsYy5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBmJiZmKTtifHxjLmRhdGEoImJzLm1vZGFsIixiPW5ldyBxKHRoaXMsZykpO2lmKCJzdHJpbmciPT10eXBlb2YgZiliW2ZdKGQpO2Vsc2UgZy5zaG93JiZiLnNob3coZCl9KX12YXIgcT1mdW5jdGlvbihmLGQpe3RoaXMub3B0aW9ucz1kO3RoaXMuJGJvZHk9YShkb2N1bWVudC5ib2R5KTt0aGlzLiRlbGVtZW50PWEoZik7dGhpcy4kZGlhbG9nPXRoaXMuJGVsZW1lbnQuZmluZCgiLm1vZGFsLWRpYWxvZyIpO3RoaXMub3JpZ2luYWxCb2R5UGFkPXRoaXMuaXNTaG93bj10aGlzLiRiYWNrZHJvcD1udWxsO3RoaXMuc2Nyb2xsYmFyV2lkdGg9MDt0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITE7dGhpcy5vcHRpb25zLnJlbW90ZSYmdGhpcy4kZWxlbWVudC5maW5kKCIubW9kYWwtY29udGVudCIpLmxvYWQodGhpcy5vcHRpb25zLnJlbW90ZSwKYS5wcm94eShmdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcigibG9hZGVkLmJzLm1vZGFsIil9LHRoaXMpKX07cS5WRVJTSU9OPSIzLjMuNSI7cS5UUkFOU0lUSU9OX0RVUkFUSU9OPTMwMDtxLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT049MTUwO3EuREVGQVVMVFM9e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwLHNob3c6ITB9O3EucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5pc1Nob3duP3RoaXMuaGlkZSgpOnRoaXMuc2hvdyhmKX07cS5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbihmKXt2YXIgZD10aGlzLGM9YS5FdmVudCgic2hvdy5icy5tb2RhbCIse3JlbGF0ZWRUYXJnZXQ6Zn0pO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihjKTt0aGlzLmlzU2hvd258fGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fCh0aGlzLmlzU2hvd249ITAsdGhpcy5jaGVja1Njcm9sbGJhcigpLHRoaXMuc2V0U2Nyb2xsYmFyKCksdGhpcy4kYm9keS5hZGRDbGFzcygibW9kYWwtb3BlbiIpLAp0aGlzLmVzY2FwZSgpLHRoaXMucmVzaXplKCksdGhpcy4kZWxlbWVudC5vbigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIsJ1tkYXRhLWRpc21pc3NceDNkIm1vZGFsIl0nLGEucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLiRkaWFsb2cub24oIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuJGVsZW1lbnQub25lKCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwiLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmlzKGQuJGVsZW1lbnQpJiYoZC5pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBiPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZkLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik7ZC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fGQuJGVsZW1lbnQuYXBwZW5kVG8oZC4kYm9keSk7ZC4kZWxlbWVudC5zaG93KCkuc2Nyb2xsVG9wKDApO2QuYWRqdXN0RGlhbG9nKCk7YiYmZC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aC50b0ZpeGVkKCk7CmQuJGVsZW1lbnQuYWRkQ2xhc3MoImluIik7ZC5lbmZvcmNlRm9jdXMoKTt2YXIgZz1hLkV2ZW50KCJzaG93bi5icy5tb2RhbCIse3JlbGF0ZWRUYXJnZXQ6Zn0pO2I/ZC4kZGlhbG9nLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmdW5jdGlvbigpe2QuJGVsZW1lbnQudHJpZ2dlcigiZm9jdXMiKS50cmlnZ2VyKGcpfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQocS5UUkFOU0lUSU9OX0RVUkFUSU9OKTpkLiRlbGVtZW50LnRyaWdnZXIoImZvY3VzIikudHJpZ2dlcihnKX0pKX07cS5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihmKXtmJiZmLnByZXZlbnREZWZhdWx0KCk7Zj1hLkV2ZW50KCJoaWRlLmJzLm1vZGFsIik7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGYpO3RoaXMuaXNTaG93biYmIWYuaXNEZWZhdWx0UHJldmVudGVkKCkmJih0aGlzLmlzU2hvd249ITEsdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLGEoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5icy5tb2RhbCIpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImluIikub2ZmKCJjbGljay5kaXNtaXNzLmJzLm1vZGFsIikub2ZmKCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwiKSwKdGhpcy4kZGlhbG9nLm9mZigibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkodGhpcy5oaWRlTW9kYWwsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHEuVFJBTlNJVElPTl9EVVJBVElPTik6dGhpcy5oaWRlTW9kYWwoKSl9O3EucHJvdG90eXBlLmVuZm9yY2VGb2N1cz1mdW5jdGlvbigpe2EoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5icy5tb2RhbCIpLm9uKCJmb2N1c2luLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGYpe3RoaXMuJGVsZW1lbnRbMF09PT1mLnRhcmdldHx8dGhpcy4kZWxlbWVudC5oYXMoZi50YXJnZXQpLmxlbmd0aHx8dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpfSx0aGlzKSl9O3EucHJvdG90eXBlLmVzY2FwZT1mdW5jdGlvbigpe2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmtleWJvYXJkKXRoaXMuJGVsZW1lbnQub24oImtleWRvd24uZGlzbWlzcy5icy5tb2RhbCIsCmEucHJveHkoZnVuY3Rpb24oZil7Mjc9PWYud2hpY2gmJnRoaXMuaGlkZSgpfSx0aGlzKSk7ZWxzZSB0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKCJrZXlkb3duLmRpc21pc3MuYnMubW9kYWwiKX07cS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1Nob3duKWEod2luZG93KS5vbigicmVzaXplLmJzLm1vZGFsIixhLnByb3h5KHRoaXMuaGFuZGxlVXBkYXRlLHRoaXMpKTtlbHNlIGEod2luZG93KS5vZmYoInJlc2l6ZS5icy5tb2RhbCIpfTtxLnByb3RvdHlwZS5oaWRlTW9kYWw9ZnVuY3Rpb24oKXt2YXIgZj10aGlzO3RoaXMuJGVsZW1lbnQuaGlkZSgpO3RoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXtmLiRib2R5LnJlbW92ZUNsYXNzKCJtb2RhbC1vcGVuIik7Zi5yZXNldEFkanVzdG1lbnRzKCk7Zi5yZXNldFNjcm9sbGJhcigpO2YuJGVsZW1lbnQudHJpZ2dlcigiaGlkZGVuLmJzLm1vZGFsIil9KX07cS5wcm90b3R5cGUucmVtb3ZlQmFja2Ryb3A9ZnVuY3Rpb24oKXt0aGlzLiRiYWNrZHJvcCYmCnRoaXMuJGJhY2tkcm9wLnJlbW92ZSgpO3RoaXMuJGJhY2tkcm9wPW51bGx9O3EucHJvdG90eXBlLmJhY2tkcm9wPWZ1bmN0aW9uKGYpe3ZhciBkPXRoaXMsYz10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2YXIgYj1hLnN1cHBvcnQudHJhbnNpdGlvbiYmYzt0aGlzLiRiYWNrZHJvcD1hKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5hZGRDbGFzcygibW9kYWwtYmFja2Ryb3AgIitjKS5hcHBlbmRUbyh0aGlzLiRib2R5KTt0aGlzLiRlbGVtZW50Lm9uKCJjbGljay5kaXNtaXNzLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGcpe3RoaXMuaWdub3JlQmFja2Ryb3BDbGljaz90aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITE6Zy50YXJnZXQ9PT1nLmN1cnJlbnRUYXJnZXQmJigic3RhdGljIj09dGhpcy5vcHRpb25zLmJhY2tkcm9wP3RoaXMuJGVsZW1lbnRbMF0uZm9jdXMoKToKdGhpcy5oaWRlKCkpfSx0aGlzKSk7YiYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgudG9GaXhlZCgpO3RoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCJpbiIpO2YmJihiP3RoaXMuJGJhY2tkcm9wLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChxLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmYoKSl9ZWxzZSF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wPyh0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygiaW4iKSxjPWZ1bmN0aW9uKCl7ZC5yZW1vdmVCYWNrZHJvcCgpO2YmJmYoKX0sYS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLiRiYWNrZHJvcC5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYykuZW11bGF0ZVRyYW5zaXRpb25FbmQocS5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKTpjKCkpOmYmJmYoKX07cS5wcm90b3R5cGUuaGFuZGxlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5hZGp1c3REaWFsb2coKX07CnEucHJvdG90eXBlLmFkanVzdERpYWxvZz1mdW5jdGlvbigpe3ZhciBmPXRoaXMuJGVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OiF0aGlzLmJvZHlJc092ZXJmbG93aW5nJiZmP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiIscGFkZGluZ1JpZ2h0OnRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJiFmP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiJ9KX07cS5wcm90b3R5cGUucmVzZXRBZGp1c3RtZW50cz1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDoiIixwYWRkaW5nUmlnaHQ6IiJ9KX07cS5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgZj13aW5kb3cuaW5uZXJXaWR0aDtmfHwoZj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj1mLnJpZ2h0LU1hdGguYWJzKGYubGVmdCkpO3RoaXMuYm9keUlzT3ZlcmZsb3dpbmc9CmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg8Zjt0aGlzLnNjcm9sbGJhcldpZHRoPXRoaXMubWVhc3VyZVNjcm9sbGJhcigpfTtxLnByb3RvdHlwZS5zZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgZj1wYXJzZUludCh0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIpfHwwLDEwKTt0aGlzLm9yaWdpbmFsQm9keVBhZD1kb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodHx8IiI7dGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmdGhpcy4kYm9keS5jc3MoInBhZGRpbmctcmlnaHQiLGYrdGhpcy5zY3JvbGxiYXJXaWR0aCl9O3EucHJvdG90eXBlLnJlc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dGhpcy4kYm9keS5jc3MoInBhZGRpbmctcmlnaHQiLHRoaXMub3JpZ2luYWxCb2R5UGFkKX07cS5wcm90b3R5cGUubWVhc3VyZVNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2YuY2xhc3NOYW1lPSJtb2RhbC1zY3JvbGxiYXItbWVhc3VyZSI7CnRoaXMuJGJvZHkuYXBwZW5kKGYpO3ZhciBkPWYub2Zmc2V0V2lkdGgtZi5jbGllbnRXaWR0aDt0aGlzLiRib2R5WzBdLnJlbW92ZUNoaWxkKGYpO3JldHVybiBkfTt2YXIgdD1hLmZuLm1vZGFsO2EuZm4ubW9kYWw9RTthLmZuLm1vZGFsLkNvbnN0cnVjdG9yPXE7YS5mbi5tb2RhbC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7YS5mbi5tb2RhbD10O3JldHVybiB0aGlzfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMubW9kYWwuZGF0YS1hcGkiLCdbZGF0YS10b2dnbGVceDNkIm1vZGFsIl0nLGZ1bmN0aW9uKGYpe3ZhciBkPWEodGhpcyksYz1kLmF0dHIoImhyZWYiKSxiPWEoZC5hdHRyKCJkYXRhLXRhcmdldCIpfHxjJiZjLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikpLGM9Yi5kYXRhKCJicy5tb2RhbCIpPyJ0b2dnbGUiOmEuZXh0ZW5kKHtyZW1vdGU6IS8jLy50ZXN0KGMpJiZjfSxiLmRhdGEoKSxkLmRhdGEoKSk7ZC5pcygiYSIpJiZmLnByZXZlbnREZWZhdWx0KCk7Yi5vbmUoInNob3cuYnMubW9kYWwiLApmdW5jdGlvbihnKXtpZighZy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSliLm9uZSgiaGlkZGVuLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuaXMoIjp2aXNpYmxlIikmJmQudHJpZ2dlcigiZm9jdXMiKX0pfSk7RS5jYWxsKGIsYyx0aGlzKX0pfSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe3ZhciBFPWZ1bmN0aW9uKHQsZil7dGhpcy5pblN0YXRlPXRoaXMuJGVsZW1lbnQ9dGhpcy5ob3ZlclN0YXRlPXRoaXMudGltZW91dD10aGlzLmVuYWJsZWQ9dGhpcy5vcHRpb25zPXRoaXMudHlwZT1udWxsO3RoaXMuaW5pdCgidG9vbHRpcCIsdCxmKX07RS5WRVJTSU9OPSIzLjMuNSI7RS5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MDtFLkRFRkFVTFRTPXthbmltYXRpb246ITAscGxhY2VtZW50OiJ0b3AiLHNlbGVjdG9yOiExLHRlbXBsYXRlOidceDNjZGl2IGNsYXNzXHgzZCJ0b29sdGlwIiByb2xlXHgzZCJ0b29sdGlwIlx4M2VceDNjZGl2IGNsYXNzXHgzZCJ0b29sdGlwLWFycm93Ilx4M2VceDNjL2Rpdlx4M2VceDNjZGl2IGNsYXNzXHgzZCJ0b29sdGlwLWlubmVyIlx4M2VceDNjL2Rpdlx4M2VceDNjL2Rpdlx4M2UnLHRyaWdnZXI6ImhvdmVyIGZvY3VzIix0aXRsZToiIixkZWxheTowLGh0bWw6ITEsY29udGFpbmVyOiExLHZpZXdwb3J0OntzZWxlY3RvcjoiYm9keSIsCnBhZGRpbmc6MH19O0UucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24odCxmLGQpe3RoaXMuZW5hYmxlZD0hMDt0aGlzLnR5cGU9dDt0aGlzLiRlbGVtZW50PWEoZik7dGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhkKTt0aGlzLiR2aWV3cG9ydD10aGlzLm9wdGlvbnMudmlld3BvcnQmJmEoYS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCk/dGhpcy5vcHRpb25zLnZpZXdwb3J0LmNhbGwodGhpcyx0aGlzLiRlbGVtZW50KTp0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3J8fHRoaXMub3B0aW9ucy52aWV3cG9ydCk7dGhpcy5pblN0YXRlPXtjbGljazohMSxob3ZlcjohMSxmb2N1czohMX07aWYodGhpcy4kZWxlbWVudFswXWluc3RhbmNlb2YgZG9jdW1lbnQuY29uc3RydWN0b3ImJiF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpdGhyb3cgRXJyb3IoImBzZWxlY3RvcmAgb3B0aW9uIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gaW5pdGlhbGl6aW5nICIrdGhpcy50eXBlKyIgb24gdGhlIHdpbmRvdy5kb2N1bWVudCBvYmplY3QhIik7CnQ9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoIiAiKTtmb3IoZj10Lmxlbmd0aDtmLS07KWlmKGQ9dFtmXSwiY2xpY2siPT1kKXRoaXMuJGVsZW1lbnQub24oImNsaWNrLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixhLnByb3h5KHRoaXMudG9nZ2xlLHRoaXMpKTtlbHNlIGlmKCJtYW51YWwiIT1kKXt2YXIgYz0iaG92ZXIiPT1kPyJtb3VzZWxlYXZlIjoiZm9jdXNvdXQiO3RoaXMuJGVsZW1lbnQub24oKCJob3ZlciI9PWQ/Im1vdXNlZW50ZXIiOiJmb2N1c2luIikrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmVudGVyLHRoaXMpKTt0aGlzLiRlbGVtZW50Lm9uKGMrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX10aGlzLm9wdGlvbnMuc2VsZWN0b3I/dGhpcy5fb3B0aW9ucz1hLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMse3RyaWdnZXI6Im1hbnVhbCIsc2VsZWN0b3I6IiJ9KToKdGhpcy5maXhUaXRsZSgpfTtFLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBFLkRFRkFVTFRTfTtFLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKHQpe3Q9YS5leHRlbmQoe30sdGhpcy5nZXREZWZhdWx0cygpLHRoaXMuJGVsZW1lbnQuZGF0YSgpLHQpO3QuZGVsYXkmJiJudW1iZXIiPT10eXBlb2YgdC5kZWxheSYmKHQuZGVsYXk9e3Nob3c6dC5kZWxheSxoaWRlOnQuZGVsYXl9KTtyZXR1cm4gdH07RS5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e30sZj10aGlzLmdldERlZmF1bHRzKCk7dGhpcy5fb3B0aW9ucyYmYS5lYWNoKHRoaXMuX29wdGlvbnMsZnVuY3Rpb24oZCxjKXtmW2RdIT1jJiYodFtkXT1jKX0pO3JldHVybiB0fTtFLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbih0KXt2YXIgZj10IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj90OmEodC5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSk7CmZ8fChmPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHQuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKHQuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsZikpO3QgaW5zdGFuY2VvZiBhLkV2ZW50JiYoZi5pblN0YXRlWyJmb2N1c2luIj09dC50eXBlPyJmb2N1cyI6ImhvdmVyIl09ITApO2lmKGYudGlwKCkuaGFzQ2xhc3MoImluIil8fCJpbiI9PWYuaG92ZXJTdGF0ZSlmLmhvdmVyU3RhdGU9ImluIjtlbHNle2NsZWFyVGltZW91dChmLnRpbWVvdXQpO2YuaG92ZXJTdGF0ZT0iaW4iO2lmKCFmLm9wdGlvbnMuZGVsYXl8fCFmLm9wdGlvbnMuZGVsYXkuc2hvdylyZXR1cm4gZi5zaG93KCk7Zi50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsiaW4iPT1mLmhvdmVyU3RhdGUmJmYuc2hvdygpfSxmLm9wdGlvbnMuZGVsYXkuc2hvdyl9fTtFLnByb3RvdHlwZS5pc0luU3RhdGVUcnVlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuaW5TdGF0ZSlpZih0aGlzLmluU3RhdGVbdF0pcmV0dXJuITA7CnJldHVybiExfTtFLnByb3RvdHlwZS5sZWF2ZT1mdW5jdGlvbih0KXt2YXIgZj10IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj90OmEodC5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSk7Znx8KGY9bmV3IHRoaXMuY29uc3RydWN0b3IodC5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEodC5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSxmKSk7dCBpbnN0YW5jZW9mIGEuRXZlbnQmJihmLmluU3RhdGVbImZvY3Vzb3V0Ij09dC50eXBlPyJmb2N1cyI6ImhvdmVyIl09ITEpO2lmKCFmLmlzSW5TdGF0ZVRydWUoKSl7Y2xlYXJUaW1lb3V0KGYudGltZW91dCk7Zi5ob3ZlclN0YXRlPSJvdXQiO2lmKCFmLm9wdGlvbnMuZGVsYXl8fCFmLm9wdGlvbnMuZGVsYXkuaGlkZSlyZXR1cm4gZi5oaWRlKCk7Zi50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsib3V0Ij09Zi5ob3ZlclN0YXRlJiZmLmhpZGUoKX0sZi5vcHRpb25zLmRlbGF5LmhpZGUpfX07CkUucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgdD1hLkV2ZW50KCJzaG93LmJzLiIrdGhpcy50eXBlKTtpZih0aGlzLmhhc0NvbnRlbnQoKSYmdGhpcy5lbmFibGVkKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIodCk7dmFyIGY9YS5jb250YWlucyh0aGlzLiRlbGVtZW50WzBdLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuJGVsZW1lbnRbMF0pO2lmKCF0LmlzRGVmYXVsdFByZXZlbnRlZCgpJiZmKXt2YXIgZD10aGlzLHQ9dGhpcy50aXAoKSxmPXRoaXMuZ2V0VUlEKHRoaXMudHlwZSk7dGhpcy5zZXRDb250ZW50KCk7dC5hdHRyKCJpZCIsZik7dGhpcy4kZWxlbWVudC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixmKTt0aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiZ0LmFkZENsYXNzKCJmYWRlIik7dmFyIGY9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsdFswXSx0aGlzLiRlbGVtZW50WzBdKToKdGhpcy5vcHRpb25zLnBsYWNlbWVudCxjPS9ccz9hdXRvP1xzPy9pLGI9Yy50ZXN0KGYpO2ImJihmPWYucmVwbGFjZShjLCIiKXx8InRvcCIpO3QuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSkuYWRkQ2xhc3MoZikuZGF0YSgiYnMuIit0aGlzLnR5cGUsdGhpcyk7dGhpcy5vcHRpb25zLmNvbnRhaW5lcj90LmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOnQuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCk7dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJpbnNlcnRlZC5icy4iK3RoaXMudHlwZSk7dmFyIGM9dGhpcy5nZXRQb3NpdGlvbigpLGc9dFswXS5vZmZzZXRXaWR0aCxlPXRbMF0ub2Zmc2V0SGVpZ2h0O2lmKGIpe3ZhciBiPWYsaz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KSxmPSJib3R0b20iPT1mJiZjLmJvdHRvbStlPmsuYm90dG9tPyJ0b3AiOiJ0b3AiPT1mJiZjLnRvcC1lPGsudG9wPyJib3R0b20iOiJyaWdodCI9PWYmJgpjLnJpZ2h0K2c+ay53aWR0aD8ibGVmdCI6ImxlZnQiPT1mJiZjLmxlZnQtZzxrLmxlZnQ/InJpZ2h0IjpmO3QucmVtb3ZlQ2xhc3MoYikuYWRkQ2xhc3MoZil9Yz10aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQoZixjLGcsZSk7dGhpcy5hcHBseVBsYWNlbWVudChjLGYpO2Y9ZnVuY3Rpb24oKXt2YXIgbT1kLmhvdmVyU3RhdGU7ZC4kZWxlbWVudC50cmlnZ2VyKCJzaG93bi5icy4iK2QudHlwZSk7ZC5ob3ZlclN0YXRlPW51bGw7Im91dCI9PW0mJmQubGVhdmUoZCl9O2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiR0aXAuaGFzQ2xhc3MoImZhZGUiKT90Lm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChFLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKX19fTtFLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbih0LGYpe3ZhciBkPXRoaXMudGlwKCksYz1kWzBdLm9mZnNldFdpZHRoLGI9ZFswXS5vZmZzZXRIZWlnaHQsZz1wYXJzZUludChkLmNzcygibWFyZ2luLXRvcCIpLAoxMCksZT1wYXJzZUludChkLmNzcygibWFyZ2luLWxlZnQiKSwxMCk7aXNOYU4oZykmJihnPTApO2lzTmFOKGUpJiYoZT0wKTt0LnRvcCs9Zzt0LmxlZnQrPWU7YS5vZmZzZXQuc2V0T2Zmc2V0KGRbMF0sYS5leHRlbmQoe3VzaW5nOmZ1bmN0aW9uKHApe2QuY3NzKHt0b3A6TWF0aC5yb3VuZChwLnRvcCksbGVmdDpNYXRoLnJvdW5kKHAubGVmdCl9KX19LHQpLDApO2QuYWRkQ2xhc3MoImluIik7dmFyIGU9ZFswXS5vZmZzZXRXaWR0aCxrPWRbMF0ub2Zmc2V0SGVpZ2h0OyJ0b3AiPT1mJiZrIT1iJiYodC50b3A9dC50b3ArYi1rKTt2YXIgbT10aGlzLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YShmLHQsZSxrKTttLmxlZnQ/dC5sZWZ0Kz1tLmxlZnQ6dC50b3ArPW0udG9wO2M9KGc9L3RvcHxib3R0b20vLnRlc3QoZikpPzIqbS5sZWZ0LWMrZToyKm0udG9wLWIraztiPWc/Im9mZnNldFdpZHRoIjoib2Zmc2V0SGVpZ2h0IjtkLm9mZnNldCh0KTt0aGlzLnJlcGxhY2VBcnJvdyhjLGRbMF1bYl0sCmcpfTtFLnByb3RvdHlwZS5yZXBsYWNlQXJyb3c9ZnVuY3Rpb24odCxmLGQpe3RoaXMuYXJyb3coKS5jc3MoZD8ibGVmdCI6InRvcCIsNTAqKDEtdC9mKSsiJSIpLmNzcyhkPyJ0b3AiOiJsZWZ0IiwiIil9O0UucHJvdG90eXBlLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRpcCgpLGY9dGhpcy5nZXRUaXRsZSgpO3QuZmluZCgiLnRvb2x0aXAtaW5uZXIiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXShmKTt0LnJlbW92ZUNsYXNzKCJmYWRlIGluIHRvcCBib3R0b20gbGVmdCByaWdodCIpfTtFLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoKXsiaW4iIT1kLmhvdmVyU3RhdGUmJmMuZGV0YWNoKCk7ZC4kZWxlbWVudC5yZW1vdmVBdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IikudHJpZ2dlcigiaGlkZGVuLmJzLiIrZC50eXBlKTt0JiZ0KCl9dmFyIGQ9dGhpcyxjPWEodGhpcy4kdGlwKSxiPWEuRXZlbnQoImhpZGUuYnMuIit0aGlzLnR5cGUpOwp0aGlzLiRlbGVtZW50LnRyaWdnZXIoYik7aWYoIWIuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuIGMucmVtb3ZlQ2xhc3MoImluIiksYS5zdXBwb3J0LnRyYW5zaXRpb24mJmMuaGFzQ2xhc3MoImZhZGUiKT9jLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChFLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzfTtFLnByb3RvdHlwZS5maXhUaXRsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJGVsZW1lbnQ7KHQuYXR0cigidGl0bGUiKXx8InN0cmluZyIhPXR5cGVvZiB0LmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiKSkmJnQuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIsdC5hdHRyKCJ0aXRsZSIpfHwiIikuYXR0cigidGl0bGUiLCIiKX07RS5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9O0UucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3Q9CnR8fHRoaXMuJGVsZW1lbnQ7dmFyIGY9dFswXSxkPSJCT0RZIj09Zi50YWdOYW1lLGY9Zi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtudWxsPT1mLndpZHRoJiYoZj1hLmV4dGVuZCh7fSxmLHt3aWR0aDpmLnJpZ2h0LWYubGVmdCxoZWlnaHQ6Zi5ib3R0b20tZi50b3B9KSk7dmFyIGM9ZD97dG9wOjAsbGVmdDowfTp0Lm9mZnNldCgpO3Q9e3Njcm9sbDpkP2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOnQuc2Nyb2xsVG9wKCl9O2Q9ZD97d2lkdGg6YSh3aW5kb3cpLndpZHRoKCksaGVpZ2h0OmEod2luZG93KS5oZWlnaHQoKX06bnVsbDtyZXR1cm4gYS5leHRlbmQoe30sZix0LGQsYyl9O0UucHJvdG90eXBlLmdldENhbGN1bGF0ZWRPZmZzZXQ9ZnVuY3Rpb24odCxmLGQsYyl7cmV0dXJuImJvdHRvbSI9PXQ/e3RvcDpmLnRvcCtmLmhlaWdodCxsZWZ0OmYubGVmdCtmLndpZHRoLzItZC8yfToidG9wIj09dD97dG9wOmYudG9wLQpjLGxlZnQ6Zi5sZWZ0K2Yud2lkdGgvMi1kLzJ9OiJsZWZ0Ij09dD97dG9wOmYudG9wK2YuaGVpZ2h0LzItYy8yLGxlZnQ6Zi5sZWZ0LWR9Ont0b3A6Zi50b3ArZi5oZWlnaHQvMi1jLzIsbGVmdDpmLmxlZnQrZi53aWR0aH19O0UucHJvdG90eXBlLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YT1mdW5jdGlvbih0LGYsZCxjKXt2YXIgYj17dG9wOjAsbGVmdDowfTtpZighdGhpcy4kdmlld3BvcnQpcmV0dXJuIGI7dmFyIGc9dGhpcy5vcHRpb25zLnZpZXdwb3J0JiZ0aGlzLm9wdGlvbnMudmlld3BvcnQucGFkZGluZ3x8MCxlPXRoaXMuZ2V0UG9zaXRpb24odGhpcy4kdmlld3BvcnQpOy9yaWdodHxsZWZ0Ly50ZXN0KHQpPyhkPWYudG9wLWctZS5zY3JvbGwsZj1mLnRvcCtnLWUuc2Nyb2xsK2MsZDxlLnRvcD9iLnRvcD1lLnRvcC1kOmY+ZS50b3ArZS5oZWlnaHQmJihiLnRvcD1lLnRvcCtlLmhlaWdodC1mKSk6KGM9Zi5sZWZ0LWcsZj1mLmxlZnQrZytkLGM8ZS5sZWZ0P2IubGVmdD1lLmxlZnQtCmM6Zj5lLnJpZ2h0JiYoYi5sZWZ0PWUubGVmdCtlLndpZHRoLWYpKTtyZXR1cm4gYn07RS5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRlbGVtZW50LGY9dGhpcy5vcHRpb25zO3JldHVybiB0LmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiKXx8KCJmdW5jdGlvbiI9PXR5cGVvZiBmLnRpdGxlP2YudGl0bGUuY2FsbCh0WzBdKTpmLnRpdGxlKX07RS5wcm90b3R5cGUuZ2V0VUlEPWZ1bmN0aW9uKHQpe2RvIHQrPX5+KDFFNipNYXRoLnJhbmRvbSgpKTt3aGlsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KSk7cmV0dXJuIHR9O0UucHJvdG90eXBlLnRpcD1mdW5jdGlvbigpe2lmKCF0aGlzLiR0aXAmJih0aGlzLiR0aXA9YSh0aGlzLm9wdGlvbnMudGVtcGxhdGUpLDEhPXRoaXMuJHRpcC5sZW5ndGgpKXRocm93IEVycm9yKHRoaXMudHlwZSsiIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhIik7CnJldHVybiB0aGlzLiR0aXB9O0UucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoIi50b29sdGlwLWFycm93Iil9O0UucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZD0hMH07RS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZD0hMX07RS5wcm90b3R5cGUudG9nZ2xlRW5hYmxlZD1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZD0hdGhpcy5lbmFibGVkfTtFLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24odCl7dmFyIGY9dGhpczt0JiYoZj1hKHQuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUpLGZ8fChmPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHQuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKHQuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsZikpKTt0PyhmLmluU3RhdGUuY2xpY2s9IWYuaW5TdGF0ZS5jbGljaywKZi5pc0luU3RhdGVUcnVlKCk/Zi5lbnRlcihmKTpmLmxlYXZlKGYpKTpmLnRpcCgpLmhhc0NsYXNzKCJpbiIpP2YubGVhdmUoZik6Zi5lbnRlcihmKX07RS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7dGhpcy5oaWRlKGZ1bmN0aW9uKCl7dC4kZWxlbWVudC5vZmYoIi4iK3QudHlwZSkucmVtb3ZlRGF0YSgiYnMuIit0LnR5cGUpO3QuJHRpcCYmdC4kdGlwLmRldGFjaCgpO3QuJHRpcD1udWxsO3QuJGFycm93PW51bGw7dC4kdmlld3BvcnQ9bnVsbH0pfTt2YXIgcT1hLmZuLnRvb2x0aXA7YS5mbi50b29sdGlwPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZj1hKHRoaXMpLGQ9Zi5kYXRhKCJicy50b29sdGlwIiksYz0ib2JqZWN0Ij09dHlwZW9mIHQmJnQ7aWYoZHx8IS9kZXN0cm95fGhpZGUvLnRlc3QodCkpaWYoZHx8Zi5kYXRhKCJicy50b29sdGlwIixkPW5ldyBFKHRoaXMsCmMpKSwic3RyaW5nIj09dHlwZW9mIHQpZFt0XSgpfSl9O2EuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj1FO2EuZm4udG9vbHRpcC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7YS5mbi50b29sdGlwPXE7cmV0dXJuIHRoaXN9fSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe3ZhciBFPWZ1bmN0aW9uKHQsZil7dGhpcy5pbml0KCJwb3BvdmVyIix0LGYpfTtpZighYS5mbi50b29sdGlwKXRocm93IEVycm9yKCJQb3BvdmVyIHJlcXVpcmVzIHRvb2x0aXAuanMiKTtFLlZFUlNJT049IjMuMy41IjtFLkRFRkFVTFRTPWEuZXh0ZW5kKHt9LGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUyx7cGxhY2VtZW50OiJyaWdodCIsdHJpZ2dlcjoiY2xpY2siLGNvbnRlbnQ6IiIsdGVtcGxhdGU6J1x4M2NkaXYgY2xhc3NceDNkInBvcG92ZXIiIHJvbGVceDNkInRvb2x0aXAiXHgzZVx4M2NkaXYgY2xhc3NceDNkImFycm93Ilx4M2VceDNjL2Rpdlx4M2VceDNjaDMgY2xhc3NceDNkInBvcG92ZXItdGl0bGUiXHgzZVx4M2MvaDNceDNlXHgzY2RpdiBjbGFzc1x4M2QicG9wb3Zlci1jb250ZW50Ilx4M2VceDNjL2Rpdlx4M2VceDNjL2Rpdlx4M2UnfSk7RS5wcm90b3R5cGU9YS5leHRlbmQoe30sYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yLnByb3RvdHlwZSk7CkUucHJvdG90eXBlLmNvbnN0cnVjdG9yPUU7RS5wcm90b3R5cGUuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gRS5ERUZBVUxUU307RS5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudGlwKCksZj10aGlzLmdldFRpdGxlKCksZD10aGlzLmdldENvbnRlbnQoKTt0LmZpbmQoIi5wb3BvdmVyLXRpdGxlIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0oZik7dC5maW5kKCIucG9wb3Zlci1jb250ZW50IikuY2hpbGRyZW4oKS5kZXRhY2goKS5lbmQoKVt0aGlzLm9wdGlvbnMuaHRtbD8ic3RyaW5nIj09dHlwZW9mIGQ/Imh0bWwiOiJhcHBlbmQiOiJ0ZXh0Il0oZCk7dC5yZW1vdmVDbGFzcygiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW4iKTt0LmZpbmQoIi5wb3BvdmVyLXRpdGxlIikuaHRtbCgpfHx0LmZpbmQoIi5wb3BvdmVyLXRpdGxlIikuaGlkZSgpfTtFLnByb3RvdHlwZS5oYXNDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGl0bGUoKXx8CnRoaXMuZ2V0Q29udGVudCgpfTtFLnByb3RvdHlwZS5nZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZWxlbWVudCxmPXRoaXMub3B0aW9ucztyZXR1cm4gdC5hdHRyKCJkYXRhLWNvbnRlbnQiKXx8KCJmdW5jdGlvbiI9PXR5cGVvZiBmLmNvbnRlbnQ/Zi5jb250ZW50LmNhbGwodFswXSk6Zi5jb250ZW50KX07RS5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZCgiLmFycm93Iil9O3ZhciBxPWEuZm4ucG9wb3ZlcjthLmZuLnBvcG92ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWEodGhpcyksZD1mLmRhdGEoImJzLnBvcG92ZXIiKSxjPSJvYmplY3QiPT10eXBlb2YgdCYmdDtpZihkfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdCh0KSlpZihkfHxmLmRhdGEoImJzLnBvcG92ZXIiLGQ9bmV3IEUodGhpcyxjKSksInN0cmluZyI9PXR5cGVvZiB0KWRbdF0oKX0pfTsKYS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPUU7YS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXthLmZuLnBvcG92ZXI9cTtyZXR1cm4gdGhpc319KShqUXVlcnkpOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gRShmLGQpe3RoaXMuJGJvZHk9YShkb2N1bWVudC5ib2R5KTt0aGlzLiRzY3JvbGxFbGVtZW50PWEoZikuaXMoZG9jdW1lbnQuYm9keSk/YSh3aW5kb3cpOmEoZik7dGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LEUuREVGQVVMVFMsZCk7dGhpcy5zZWxlY3Rvcj0odGhpcy5vcHRpb25zLnRhcmdldHx8IiIpKyIgLm5hdiBsaSBceDNlIGEiO3RoaXMub2Zmc2V0cz1bXTt0aGlzLnRhcmdldHM9W107dGhpcy5hY3RpdmVUYXJnZXQ9bnVsbDt0aGlzLnNjcm9sbEhlaWdodD0wO3RoaXMuJHNjcm9sbEVsZW1lbnQub24oInNjcm9sbC5icy5zY3JvbGxzcHkiLGEucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpKTt0aGlzLnJlZnJlc2goKTt0aGlzLnByb2Nlc3MoKX1mdW5jdGlvbiBxKGYpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGM9ZC5kYXRhKCJicy5zY3JvbGxzcHkiKSxiPSJvYmplY3QiPT10eXBlb2YgZiYmZjtjfHxkLmRhdGEoImJzLnNjcm9sbHNweSIsCmM9bmV3IEUodGhpcyxiKSk7aWYoInN0cmluZyI9PXR5cGVvZiBmKWNbZl0oKX0pfUUuVkVSU0lPTj0iMy4zLjUiO0UuREVGQVVMVFM9e29mZnNldDoxMH07RS5wcm90b3R5cGUuZ2V0U2Nyb2xsSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0fHxNYXRoLm1heCh0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KX07RS5wcm90b3R5cGUucmVmcmVzaD1mdW5jdGlvbigpe3ZhciBmPXRoaXMsZD0ib2Zmc2V0IixjPTA7dGhpcy5vZmZzZXRzPVtdO3RoaXMudGFyZ2V0cz1bXTt0aGlzLnNjcm9sbEhlaWdodD10aGlzLmdldFNjcm9sbEhlaWdodCgpO2EuaXNXaW5kb3codGhpcy4kc2Nyb2xsRWxlbWVudFswXSl8fChkPSJwb3NpdGlvbiIsYz10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpKTt0aGlzLiRib2R5LmZpbmQodGhpcy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyIGI9CmEodGhpcyksYj1iLmRhdGEoInRhcmdldCIpfHxiLmF0dHIoImhyZWYiKSxnPS9eIy4vLnRlc3QoYikmJmEoYik7cmV0dXJuIGcmJmcubGVuZ3RoJiZnLmlzKCI6dmlzaWJsZSIpJiZbW2dbZF0oKS50b3ArYyxiXV18fG51bGx9KS5zb3J0KGZ1bmN0aW9uKGIsZyl7cmV0dXJuIGJbMF0tZ1swXX0pLmVhY2goZnVuY3Rpb24oKXtmLm9mZnNldHMucHVzaCh0aGlzWzBdKTtmLnRhcmdldHMucHVzaCh0aGlzWzFdKX0pfTtFLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKCl7dmFyIGY9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LGQ9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxjPXRoaXMub3B0aW9ucy5vZmZzZXQrZC10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLGI9dGhpcy5vZmZzZXRzLGc9dGhpcy50YXJnZXRzLGU9dGhpcy5hY3RpdmVUYXJnZXQsazt0aGlzLnNjcm9sbEhlaWdodCE9ZCYmdGhpcy5yZWZyZXNoKCk7aWYoZj49YylyZXR1cm4gZSE9CihrPWdbZy5sZW5ndGgtMV0pJiZ0aGlzLmFjdGl2YXRlKGspO2lmKGUmJmY8YlswXSlyZXR1cm4gdGhpcy5hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLmNsZWFyKCk7Zm9yKGs9Yi5sZW5ndGg7ay0tOyllIT1nW2tdJiZmPj1iW2tdJiYodm9pZCAwPT09YltrKzFdfHxmPGJbaysxXSkmJnRoaXMuYWN0aXZhdGUoZ1trXSl9O0UucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGYpe3RoaXMuYWN0aXZlVGFyZ2V0PWY7dGhpcy5jbGVhcigpO2Y9YSh0aGlzLnNlbGVjdG9yKydbZGF0YS10YXJnZXRceDNkIicrZisnIl0sJyt0aGlzLnNlbGVjdG9yKydbaHJlZlx4M2QiJytmKyciXScpLnBhcmVudHMoImxpIikuYWRkQ2xhc3MoImFjdGl2ZSIpO2YucGFyZW50KCIuZHJvcGRvd24tbWVudSIpLmxlbmd0aCYmKGY9Zi5jbG9zZXN0KCJsaS5kcm9wZG93biIpLmFkZENsYXNzKCJhY3RpdmUiKSk7Zi50cmlnZ2VyKCJhY3RpdmF0ZS5icy5zY3JvbGxzcHkiKX07RS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LAoiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKX07dmFyIHQ9YS5mbi5zY3JvbGxzcHk7YS5mbi5zY3JvbGxzcHk9cTthLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1FO2EuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXthLmZuLnNjcm9sbHNweT10O3JldHVybiB0aGlzfTthKHdpbmRvdykub24oImxvYWQuYnMuc2Nyb2xsc3B5LmRhdGEtYXBpIixmdW5jdGlvbigpe2EoJ1tkYXRhLXNweVx4M2Qic2Nyb2xsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9YSh0aGlzKTtxLmNhbGwoZixmLmRhdGEoKSl9KX0pfSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIEUoZCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksYj1jLmRhdGEoImJzLnRhYiIpO2J8fGMuZGF0YSgiYnMudGFiIixiPW5ldyBxKHRoaXMpKTtpZigic3RyaW5nIj09dHlwZW9mIGQpYltkXSgpfSl9dmFyIHE9ZnVuY3Rpb24oZCl7dGhpcy5lbGVtZW50PWEoZCl9O3EuVkVSU0lPTj0iMy4zLjUiO3EuVFJBTlNJVElPTl9EVVJBVElPTj0xNTA7cS5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe3ZhciBkPXRoaXMuZWxlbWVudCxjPWQuY2xvc2VzdCgidWw6bm90KC5kcm9wZG93bi1tZW51KSIpLGI9ZC5kYXRhKCJ0YXJnZXQiKTtifHwoYj0oYj1kLmF0dHIoImhyZWYiKSkmJmIucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7aWYoIWQucGFyZW50KCJsaSIpLmhhc0NsYXNzKCJhY3RpdmUiKSl7dmFyIGc9Yy5maW5kKCIuYWN0aXZlOmxhc3QgYSIpLGU9YS5FdmVudCgiaGlkZS5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OmRbMF19KSwKaz1hLkV2ZW50KCJzaG93LmJzLnRhYiIse3JlbGF0ZWRUYXJnZXQ6Z1swXX0pO2cudHJpZ2dlcihlKTtkLnRyaWdnZXIoayk7ay5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGI9YShiKSx0aGlzLmFjdGl2YXRlKGQuY2xvc2VzdCgibGkiKSxjKSx0aGlzLmFjdGl2YXRlKGIsYi5wYXJlbnQoKSxmdW5jdGlvbigpe2cudHJpZ2dlcih7dHlwZToiaGlkZGVuLmJzLnRhYiIscmVsYXRlZFRhcmdldDpkWzBdfSk7ZC50cmlnZ2VyKHt0eXBlOiJzaG93bi5icy50YWIiLHJlbGF0ZWRUYXJnZXQ6Z1swXX0pfSkpfX07cS5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oZCxjLGIpe2Z1bmN0aW9uIGcoKXtlLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5maW5kKCJceDNlIC5kcm9wZG93bi1tZW51IFx4M2UgLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5lbmQoKS5maW5kKCdbZGF0YS10b2dnbGVceDNkInRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsCiExKTtkLmFkZENsYXNzKCJhY3RpdmUiKS5maW5kKCdbZGF0YS10b2dnbGVceDNkInRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsITApO2s/ZC5hZGRDbGFzcygiaW4iKTpkLnJlbW92ZUNsYXNzKCJmYWRlIik7ZC5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiZkLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZVx4M2QidGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCk7YiYmYigpfXZhciBlPWMuZmluZCgiXHgzZSAuYWN0aXZlIiksaz1iJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGUubGVuZ3RoJiZlLmhhc0NsYXNzKCJmYWRlIil8fCEhYy5maW5kKCJceDNlIC5mYWRlIikubGVuZ3RoKTtlLmxlbmd0aCYmaz9lLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixnKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChxLlRSQU5TSVRJT05fRFVSQVRJT04pOmcoKTtlLnJlbW92ZUNsYXNzKCJpbiIpfTt2YXIgdD0KYS5mbi50YWI7YS5mbi50YWI9RTthLmZuLnRhYi5Db25zdHJ1Y3Rvcj1xO2EuZm4udGFiLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXthLmZuLnRhYj10O3JldHVybiB0aGlzfTt2YXIgZj1mdW5jdGlvbihkKXtkLnByZXZlbnREZWZhdWx0KCk7RS5jYWxsKGEodGhpcyksInNob3ciKX07YShkb2N1bWVudCkub24oImNsaWNrLmJzLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZVx4M2QidGFiIl0nLGYpLm9uKCJjbGljay5icy50YWIuZGF0YS1hcGkiLCdbZGF0YS10b2dnbGVceDNkInBpbGwiXScsZil9KShqUXVlcnkpOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gRShmKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxjPWQuZGF0YSgiYnMuYWZmaXgiKSxiPSJvYmplY3QiPT10eXBlb2YgZiYmZjtjfHxkLmRhdGEoImJzLmFmZml4IixjPW5ldyBxKHRoaXMsYikpO2lmKCJzdHJpbmciPT10eXBlb2YgZiljW2ZdKCl9KX12YXIgcT1mdW5jdGlvbihmLGQpe3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxxLkRFRkFVTFRTLGQpO3RoaXMuJHRhcmdldD1hKHRoaXMub3B0aW9ucy50YXJnZXQpLm9uKCJzY3JvbGwuYnMuYWZmaXguZGF0YS1hcGkiLGEucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpKS5vbigiY2xpY2suYnMuYWZmaXguZGF0YS1hcGkiLGEucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcCx0aGlzKSk7dGhpcy4kZWxlbWVudD1hKGYpO3RoaXMucGlubmVkT2Zmc2V0PXRoaXMudW5waW49dGhpcy5hZmZpeGVkPW51bGw7dGhpcy5jaGVja1Bvc2l0aW9uKCl9OwpxLlZFUlNJT049IjMuMy41IjtxLlJFU0VUPSJhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tIjtxLkRFRkFVTFRTPXtvZmZzZXQ6MCx0YXJnZXQ6d2luZG93fTtxLnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbihmLGQsYyxiKXt2YXIgZz10aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKCksZT10aGlzLiRlbGVtZW50Lm9mZnNldCgpLGs9dGhpcy4kdGFyZ2V0LmhlaWdodCgpO2lmKG51bGwhPWMmJiJ0b3AiPT10aGlzLmFmZml4ZWQpcmV0dXJuIGc8Yz8idG9wIjohMTtpZigiYm90dG9tIj09dGhpcy5hZmZpeGVkKXJldHVybiBudWxsIT1jP2crdGhpcy51bnBpbjw9ZS50b3A/ITE6ImJvdHRvbSI6ZytrPD1mLWI/ITE6ImJvdHRvbSI7dmFyIG09bnVsbD09dGhpcy5hZmZpeGVkLGU9bT9nOmUudG9wO3JldHVybiBudWxsIT1jJiZnPD1jPyJ0b3AiOm51bGwhPWImJmUrKG0/azpkKT49Zi1iPyJib3R0b20iOiExfTtxLnByb3RvdHlwZS5nZXRQaW5uZWRPZmZzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLnBpbm5lZE9mZnNldClyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ7CnRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MocS5SRVNFVCkuYWRkQ2xhc3MoImFmZml4Iik7dmFyIGY9dGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpO3JldHVybiB0aGlzLnBpbm5lZE9mZnNldD10aGlzLiRlbGVtZW50Lm9mZnNldCgpLnRvcC1mfTtxLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcD1mdW5jdGlvbigpe3NldFRpbWVvdXQoYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcyksMSl9O3EucHJvdG90eXBlLmNoZWNrUG9zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLiRlbGVtZW50LmlzKCI6dmlzaWJsZSIpKXt2YXIgZj10aGlzLiRlbGVtZW50LmhlaWdodCgpLGQ9dGhpcy5vcHRpb25zLm9mZnNldCxjPWQudG9wLGI9ZC5ib3R0b20sZz1NYXRoLm1heChhKGRvY3VtZW50KS5oZWlnaHQoKSxhKGRvY3VtZW50LmJvZHkpLmhlaWdodCgpKTsib2JqZWN0IiE9dHlwZW9mIGQmJihiPWM9ZCk7ImZ1bmN0aW9uIj09dHlwZW9mIGMmJihjPWQudG9wKHRoaXMuJGVsZW1lbnQpKTsKImZ1bmN0aW9uIj09dHlwZW9mIGImJihiPWQuYm90dG9tKHRoaXMuJGVsZW1lbnQpKTtkPXRoaXMuZ2V0U3RhdGUoZyxmLGMsYik7aWYodGhpcy5hZmZpeGVkIT1kKXtudWxsIT10aGlzLnVucGluJiZ0aGlzLiRlbGVtZW50LmNzcygidG9wIiwiIik7dmFyIGM9ImFmZml4IisoZD8iLSIrZDoiIiksZT1hLkV2ZW50KGMrIi5icy5hZmZpeCIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihlKTtpZihlLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjt0aGlzLmFmZml4ZWQ9ZDt0aGlzLnVucGluPSJib3R0b20iPT1kP3RoaXMuZ2V0UGlubmVkT2Zmc2V0KCk6bnVsbDt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHEuUkVTRVQpLmFkZENsYXNzKGMpLnRyaWdnZXIoYy5yZXBsYWNlKCJhZmZpeCIsImFmZml4ZWQiKSsiLmJzLmFmZml4Iil9ImJvdHRvbSI9PWQmJnRoaXMuJGVsZW1lbnQub2Zmc2V0KHt0b3A6Zy1mLWJ9KX19O3ZhciB0PWEuZm4uYWZmaXg7YS5mbi5hZmZpeD1FO2EuZm4uYWZmaXguQ29uc3RydWN0b3I9CnE7YS5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7YS5mbi5hZmZpeD10O3JldHVybiB0aGlzfTthKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5XHgzZCJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBmPWEodGhpcyksZD1mLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e307bnVsbCE9ZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pO251bGwhPWQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKTtFLmNhbGwoZixkKX0pfSl9KShqUXVlcnkpOwooZnVuY3Rpb24oKXt2YXIgYT1MaWZlcmF5LkFVSSxFPWEuZ2V0Q29tYmluZSgpO3dpbmRvdy5fX0NPTkZJR19fPXtiYXNlUGF0aDoiIixjb21iaW5lOkUscmVwb3J0TWlzbWF0Y2hlZEFub255bW91c01vZHVsZXM6Indhcm4iLHVybDpFP2EuZ2V0Q29tYm9QYXRoKCk6dGhlbWVEaXNwbGF5LmdldFBvcnRhbFVSTCgpfTtFfHwoX19DT05GSUdfXy5kZWZhdWx0VVJMUGFyYW1zPXtsYW5ndWFnZUlkOnRoZW1lRGlzcGxheS5nZXRMYW5ndWFnZUlkKCl9KTtfX0NPTkZJR19fLm1hcHM9TGlmZXJheS5NQVBTO19fQ09ORklHX18ubW9kdWxlcz1MaWZlcmF5Lk1PRFVMRVM7X19DT05GSUdfXy5wYXRocz1MaWZlcmF5LlBBVEhTO19fQ09ORklHX18ubmFtZXNwYWNlPSJMaWZlcmF5IjtfX0NPTkZJR19fLmV4cGxhaW5SZXNvbHV0aW9ucz1MaWZlcmF5LkVYUExBSU5fUkVTT0xVVElPTlM7X19DT05GSUdfXy5leHBvc2VHbG9iYWw9TGlmZXJheS5FWFBPU0VfR0xPQkFMfSkoKTsKKGZ1bmN0aW9uKGEsRSl7Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPUUoKToiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoRSk6YS5FUzZQcm9taXNlPUUoKX0pKHRoaXMsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZCl9fWZ1bmN0aW9uIEUoKXtyZXR1cm4idW5kZWZpbmVkIiE9PXR5cGVvZiBuYT9mdW5jdGlvbigpe25hKGQpfTpmKCl9ZnVuY3Rpb24gcSgpe3ZhciBnYT0wLHRhPW5ldyBlYShkKSxxYT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7dGEub2JzZXJ2ZShxYSx7Y2hhcmFjdGVyRGF0YTohMH0pO3JldHVybiBmdW5jdGlvbigpe3FhLmRhdGE9Z2E9KytnYSUyfX1mdW5jdGlvbiB0KCl7dmFyIGdhPW5ldyBNZXNzYWdlQ2hhbm5lbDtnYS5wb3J0MS5vbm1lc3NhZ2U9ZDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ2EucG9ydDIucG9zdE1lc3NhZ2UoMCl9fQpmdW5jdGlvbiBmKCl7dmFyIGdhPXNldFRpbWVvdXQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdhKGQsMSl9fWZ1bmN0aW9uIGQoKXtmb3IodmFyIGdhPTA7Z2E8WTtnYSs9MikoMCxBYVtnYV0pKEFhW2dhKzFdKSxBYVtnYV09dm9pZCAwLEFhW2dhKzFdPXZvaWQgMDtZPTB9ZnVuY3Rpb24gYygpe3RyeXt2YXIgZ2E9cmVxdWlyZSgidmVydHgiKTtuYT1nYS5ydW5Pbkxvb3B8fGdhLnJ1bk9uQ29udGV4dDtyZXR1cm4gRSgpfWNhdGNoKHRhKXtyZXR1cm4gZigpfX1mdW5jdGlvbiBiKGdhLHRhKXt2YXIgcWE9YXJndW1lbnRzLHdhPXRoaXMsSmE9bmV3IHRoaXMuY29uc3RydWN0b3IoZSk7dm9pZCAwPT09SmFbRmFdJiZNKEphKTt2YXIgUGE9d2EuX3N0YXRlO1BhP2Z1bmN0aW9uKCl7dmFyIGZiPXFhW1BhLTFdO2lhKGZ1bmN0aW9uKCl7cmV0dXJuIEIoUGEsSmEsZmIsd2EuX3Jlc3VsdCl9KX0oKTpBKHdhLEphLGdhLHRhKTtyZXR1cm4gSmF9ZnVuY3Rpb24gZyhnYSl7aWYoZ2EmJiJvYmplY3QiPT09CnR5cGVvZiBnYSYmZ2EuY29uc3RydWN0b3I9PT10aGlzKXJldHVybiBnYTt2YXIgdGE9bmV3IHRoaXMoZSk7aCh0YSxnYSk7cmV0dXJuIHRhfWZ1bmN0aW9uIGUoKXt9ZnVuY3Rpb24gayhnYSl7dHJ5e3JldHVybiBnYS50aGVufWNhdGNoKHRhKXtyZXR1cm4gd2IuZXJyb3I9dGEsd2J9fWZ1bmN0aW9uIG0oZ2EsdGEscWEsd2Epe3RyeXtnYS5jYWxsKHRhLHFhLHdhKX1jYXRjaChKYSl7cmV0dXJuIEphfX1mdW5jdGlvbiBwKGdhLHRhLHFhKXtpYShmdW5jdGlvbih3YSl7dmFyIEphPSExLFBhPW0ocWEsdGEsZnVuY3Rpb24oZmIpe0phfHwoSmE9ITAsdGEhPT1mYj9oKHdhLGZiKTp3KHdhLGZiKSl9LGZ1bmN0aW9uKGZiKXtKYXx8KEphPSEwLHood2EsZmIpKX0sIlNldHRsZTogIisod2EuX2xhYmVsfHwiIHVua25vd24gcHJvbWlzZSIpKTshSmEmJlBhJiYoSmE9ITAseih3YSxQYSkpfSxnYSl9ZnVuY3Rpb24gcyhnYSx0YSl7dGEuX3N0YXRlPT09V2E/dyhnYSx0YS5fcmVzdWx0KTp0YS5fc3RhdGU9PT0KVWE/eihnYSx0YS5fcmVzdWx0KTpBKHRhLHZvaWQgMCxmdW5jdGlvbihxYSl7cmV0dXJuIGgoZ2EscWEpfSxmdW5jdGlvbihxYSl7cmV0dXJuIHooZ2EscWEpfSl9ZnVuY3Rpb24gbChnYSx0YSxxYSl7dGEuY29uc3RydWN0b3I9PT1nYS5jb25zdHJ1Y3RvciYmcWE9PT1iJiZ0YS5jb25zdHJ1Y3Rvci5yZXNvbHZlPT09Zz9zKGdhLHRhKTpxYT09PXdiPyh6KGdhLHdiLmVycm9yKSx3Yi5lcnJvcj1udWxsKTp2b2lkIDA9PT1xYT93KGdhLHRhKToiZnVuY3Rpb24iPT09dHlwZW9mIHFhP3AoZ2EsdGEscWEpOncoZ2EsdGEpfWZ1bmN0aW9uIGgoZ2EsdGEpe2dhPT09dGE/eihnYSxuZXcgVHlwZUVycm9yKCJZb3UgY2Fubm90IHJlc29sdmUgYSBwcm9taXNlIHdpdGggaXRzZWxmIikpOiJmdW5jdGlvbiI9PT10eXBlb2YgdGF8fCJvYmplY3QiPT09dHlwZW9mIHRhJiZudWxsIT09dGE/bChnYSx0YSxrKHRhKSk6dyhnYSx0YSl9ZnVuY3Rpb24gdShnYSl7Z2EuX29uZXJyb3ImJmdhLl9vbmVycm9yKGdhLl9yZXN1bHQpOwpIKGdhKX1mdW5jdGlvbiB3KGdhLHRhKXtnYS5fc3RhdGU9PT1FYSYmKGdhLl9yZXN1bHQ9dGEsZ2EuX3N0YXRlPVdhLDAhPT1nYS5fc3Vic2NyaWJlcnMubGVuZ3RoJiZpYShILGdhKSl9ZnVuY3Rpb24geihnYSx0YSl7Z2EuX3N0YXRlPT09RWEmJihnYS5fc3RhdGU9VWEsZ2EuX3Jlc3VsdD10YSxpYSh1LGdhKSl9ZnVuY3Rpb24gQShnYSx0YSxxYSx3YSl7dmFyIEphPWdhLl9zdWJzY3JpYmVycyxQYT1KYS5sZW5ndGg7Z2EuX29uZXJyb3I9bnVsbDtKYVtQYV09dGE7SmFbUGErV2FdPXFhO0phW1BhK1VhXT13YTswPT09UGEmJmdhLl9zdGF0ZSYmaWEoSCxnYSl9ZnVuY3Rpb24gSChnYSl7dmFyIHRhPWdhLl9zdWJzY3JpYmVycyxxYT1nYS5fc3RhdGU7aWYoMCE9PXRhLmxlbmd0aCl7Zm9yKHZhciB3YT12b2lkIDAsSmE9dm9pZCAwLFBhPWdhLl9yZXN1bHQsZmI9MDtmYjx0YS5sZW5ndGg7ZmIrPTMpd2E9dGFbZmJdLEphPXRhW2ZiK3FhXSx3YT9CKHFhLHdhLEphLFBhKTpKYShQYSk7CmdhLl9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gRigpe3RoaXMuZXJyb3I9bnVsbH1mdW5jdGlvbiBCKGdhLHRhLHFhLHdhKXt2YXIgSmE9ImZ1bmN0aW9uIj09PXR5cGVvZiBxYSxQYT12b2lkIDAsZmI9dm9pZCAwLHhiPXZvaWQgMCxFYj12b2lkIDA7aWYoSmEpe3RyeXtQYT1xYSh3YSl9Y2F0Y2goU2Epe0FiLmVycm9yPVNhLFBhPUFifVBhPT09QWI/KEViPSEwLGZiPVBhLmVycm9yLFBhLmVycm9yPW51bGwpOnhiPSEwO2lmKHRhPT09UGEpe3oodGEsbmV3IFR5cGVFcnJvcigiQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLiIpKTtyZXR1cm59fWVsc2UgUGE9d2EseGI9ITA7dGEuX3N0YXRlPT09RWEmJihKYSYmeGI/aCh0YSxQYSk6RWI/eih0YSxmYik6Z2E9PT1XYT93KHRhLFBhKTpnYT09PVVhJiZ6KHRhLFBhKSl9ZnVuY3Rpb24gSShnYSx0YSl7dHJ5e3RhKGZ1bmN0aW9uKHdhKXtoKGdhLHdhKX0sZnVuY3Rpb24od2Epe3ooZ2EsCndhKX0pfWNhdGNoKHFhKXt6KGdhLHFhKX19ZnVuY3Rpb24gTShnYSl7Z2FbRmFdPU1iKys7Z2EuX3N0YXRlPXZvaWQgMDtnYS5fcmVzdWx0PXZvaWQgMDtnYS5fc3Vic2NyaWJlcnM9W119ZnVuY3Rpb24gRChnYSx0YSl7dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3Rvcj1nYTt0aGlzLnByb21pc2U9bmV3IGdhKGUpO3RoaXMucHJvbWlzZVtGYV18fE0odGhpcy5wcm9taXNlKTtWKHRhKT8odGhpcy5faW5wdXQ9dGEsdGhpcy5fcmVtYWluaW5nPXRoaXMubGVuZ3RoPXRhLmxlbmd0aCx0aGlzLl9yZXN1bHQ9QXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD93KHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoKSwwPT09dGhpcy5fcmVtYWluaW5nJiZ3KHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6eih0aGlzLnByb21pc2UsRXJyb3IoIkFycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheSIpKX0KZnVuY3Rpb24gSihnYSl7dGhpc1tGYV09TWIrKzt0aGlzLl9yZXN1bHQ9dGhpcy5fc3RhdGU9dm9pZCAwO3RoaXMuX3N1YnNjcmliZXJzPVtdO2lmKGUhPT1nYSl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBnYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yIik7aWYodGhpcyBpbnN0YW5jZW9mIEopSSh0aGlzLGdhKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpO319dmFyIFA9dm9pZCAwLFY9UD1BcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXk6ZnVuY3Rpb24oZ2Epe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZ2EpfSwKWT0wLG5hPXZvaWQgMCxmYT12b2lkIDAsaWE9ZnVuY3Rpb24oZ2EsdGEpe0FhW1ldPWdhO0FhW1krMV09dGE7WSs9MjsyPT09WSYmKGZhP2ZhKGQpOnBhKCkpfSxaPShQPSJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwKXx8e30sZWE9Wi5NdXRhdGlvbk9ic2VydmVyfHxaLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsWj0idW5kZWZpbmVkIj09PXR5cGVvZiBzZWxmJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBwcm9jZXNzJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpLG9hPSJ1bmRlZmluZWQiIT09dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiYidW5kZWZpbmVkIiE9PXR5cGVvZiBpbXBvcnRTY3JpcHRzJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCxBYT1BcnJheSgxRTMpLHBhPXZvaWQgMCxwYT1aP2EoKTplYT9xKCk6b2E/dCgpOnZvaWQgMD09PVAmJiJmdW5jdGlvbiI9PT10eXBlb2YgcmVxdWlyZT9jKCk6CmYoKSxGYT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpLEVhPXZvaWQgMCxXYT0xLFVhPTIsd2I9bmV3IEYsQWI9bmV3IEYsTWI9MDtELnByb3RvdHlwZS5fZW51bWVyYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBnYT10aGlzLmxlbmd0aCx0YT10aGlzLl9pbnB1dCxxYT0wO3RoaXMuX3N0YXRlPT09RWEmJnFhPGdhO3FhKyspdGhpcy5fZWFjaEVudHJ5KHRhW3FhXSxxYSl9O0QucHJvdG90eXBlLl9lYWNoRW50cnk9ZnVuY3Rpb24oZ2EsdGEpe3ZhciBxYT10aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yLHdhPXFhLnJlc29sdmU7d2E9PT1nPyh3YT1rKGdhKSx3YT09PWImJmdhLl9zdGF0ZSE9PUVhP3RoaXMuX3NldHRsZWRBdChnYS5fc3RhdGUsdGEsZ2EuX3Jlc3VsdCk6ImZ1bmN0aW9uIiE9PXR5cGVvZiB3YT8odGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fcmVzdWx0W3RhXT1nYSk6cWE9PT1KPyhxYT1uZXcgcWEoZSksbChxYSxnYSx3YSksdGhpcy5fd2lsbFNldHRsZUF0KHFhLAp0YSkpOnRoaXMuX3dpbGxTZXR0bGVBdChuZXcgcWEoZnVuY3Rpb24oSmEpe3JldHVybiBKYShnYSl9KSx0YSkpOnRoaXMuX3dpbGxTZXR0bGVBdCh3YShnYSksdGEpfTtELnByb3RvdHlwZS5fc2V0dGxlZEF0PWZ1bmN0aW9uKGdhLHRhLHFhKXt2YXIgd2E9dGhpcy5wcm9taXNlO3dhLl9zdGF0ZT09PUVhJiYodGhpcy5fcmVtYWluaW5nLS0sZ2E9PT1VYT96KHdhLHFhKTp0aGlzLl9yZXN1bHRbdGFdPXFhKTswPT09dGhpcy5fcmVtYWluaW5nJiZ3KHdhLHRoaXMuX3Jlc3VsdCl9O0QucHJvdG90eXBlLl93aWxsU2V0dGxlQXQ9ZnVuY3Rpb24oZ2EsdGEpe3ZhciBxYT10aGlzO0EoZ2Esdm9pZCAwLGZ1bmN0aW9uKHdhKXtyZXR1cm4gcWEuX3NldHRsZWRBdChXYSx0YSx3YSl9LGZ1bmN0aW9uKHdhKXtyZXR1cm4gcWEuX3NldHRsZWRBdChVYSx0YSx3YSl9KX07Si5hbGw9ZnVuY3Rpb24oZ2Epe3JldHVybihuZXcgRCh0aGlzLGdhKSkucHJvbWlzZX07Si5yYWNlPWZ1bmN0aW9uKGdhKXt2YXIgdGE9CnRoaXM7cmV0dXJuIFYoZ2EpP25ldyB0YShmdW5jdGlvbihxYSx3YSl7Zm9yKHZhciBKYT1nYS5sZW5ndGgsUGE9MDtQYTxKYTtQYSsrKXRhLnJlc29sdmUoZ2FbUGFdKS50aGVuKHFhLHdhKX0pOm5ldyB0YShmdW5jdGlvbihxYSx3YSl7cmV0dXJuIHdhKG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4iKSl9KX07Si5yZXNvbHZlPWc7Si5yZWplY3Q9ZnVuY3Rpb24oZ2Epe3ZhciB0YT1uZXcgdGhpcyhlKTt6KHRhLGdhKTtyZXR1cm4gdGF9O0ouX3NldFNjaGVkdWxlcj1mdW5jdGlvbihnYSl7ZmE9Z2F9O0ouX3NldEFzYXA9ZnVuY3Rpb24oZ2Epe2lhPWdhfTtKLl9hc2FwPWlhO0oucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKLHRoZW46YiwiY2F0Y2giOmZ1bmN0aW9uKGdhKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsZ2EpfX07Si5wb2x5ZmlsbD1mdW5jdGlvbigpe3ZhciBnYT12b2lkIDA7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgZ2xvYmFsKWdhPQpnbG9iYWw7ZWxzZSBpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBzZWxmKWdhPXNlbGY7ZWxzZSB0cnl7Z2E9RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0YSl7dGhyb3cgRXJyb3IoInBvbHlmaWxsIGZhaWxlZCBiZWNhdXNlIGdsb2JhbCBvYmplY3QgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCIpO312YXIgcWE9Z2EuUHJvbWlzZTtpZihxYSl7dmFyIHdhPW51bGw7dHJ5e3dhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChxYS5yZXNvbHZlKCkpfWNhdGNoKEphKXt9aWYoIltvYmplY3QgUHJvbWlzZV0iPT09d2EmJiFxYS5jYXN0KXJldHVybn1nYS5Qcm9taXNlPUp9O3JldHVybiBKLlByb21pc2U9Sn0pOwooZnVuY3Rpb24oKXt2YXIgYT17fTthLl9fQ09ORklHX189d2luZG93Ll9fQ09ORklHX187KGZ1bmN0aW9uKHQsZil7dmFyIGQ9Zih0KTsib2JqZWN0Ij09PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmKG1vZHVsZS5leHBvcnRzPWQpOyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoZik7dC5FdmVudEVtaXR0ZXI9ZH0pKCJ1bmRlZmluZWQiIT09dHlwZW9mIGE/YTp0aGlzLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoKXt0aGlzLl9ldmVudHM9e319Zi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYsb246ZnVuY3Rpb24oZCxjKXsodGhpcy5fZXZlbnRzW2RdPXRoaXMuX2V2ZW50c1tkXXx8W10pLnB1c2goYyl9LG9mZjpmdW5jdGlvbihkLGMpe3ZhciBiPXRoaXMuX2V2ZW50c1tkXTtpZihiKXt2YXIgZz1iLmluZGV4T2YoYyk7LTE8ZyYmYi5zcGxpY2UoZywxKX19LGVtaXQ6ZnVuY3Rpb24oZCxjKXt2YXIgYj10aGlzLl9ldmVudHNbZF07aWYoYilmb3IodmFyIGI9CmIuc2xpY2UoMCksZz0wO2c8Yi5sZW5ndGg7ZysrKXt2YXIgZT1iW2ddO2UuY2FsbChlLGMpfX19O3JldHVybiBmfSk7KGZ1bmN0aW9uKHQsZil7dmFyIGQ9Zih0KTsib2JqZWN0Ij09PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmKG1vZHVsZS5leHBvcnRzPWQpOyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoZik7dC5Db25maWdQYXJzZXI9ZH0pKCJ1bmRlZmluZWQiIT09dHlwZW9mIGE/YTp0aGlzLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoZCl7dGhpcy5fY29uZmlnPXt9O3RoaXMuX21vZHVsZXM9e307dGhpcy5fY29uZGl0aW9uYWxNb2R1bGVzPXt9O3RoaXMuX3BhcnNlQ29uZmlnKGQpfWYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmLGFkZE1vZHVsZTpmdW5jdGlvbihkKXt2YXIgYz10aGlzLl9tb2R1bGVzW2QubmFtZV07aWYoYylmb3IodmFyIGIgaW4gZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCxiKSYmKGNbYl09ZFtiXSk7CmVsc2UgdGhpcy5fbW9kdWxlc1tkLm5hbWVdPWQ7dGhpcy5fcmVnaXN0ZXJDb25kaXRpb25hbE1vZHVsZShkKTtyZXR1cm4gdGhpcy5fbW9kdWxlc1tkLm5hbWVdfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29uZmlnfSxnZXRDb25kaXRpb25hbE1vZHVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29uZGl0aW9uYWxNb2R1bGVzfSxnZXRNb2R1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZHVsZXN9LG1hcE1vZHVsZTpmdW5jdGlvbihkLGMpe2lmKCF0aGlzLl9jb25maWcubWFwcyYmIWMpcmV0dXJuIGQ7dmFyIGI7Yj1BcnJheS5pc0FycmF5KGQpP2Q6W2RdO2MmJihiPWIubWFwKHRoaXMuX2dldE1vZHVsZU1hcHBlcihjKSkpO3RoaXMuX2NvbmZpZy5tYXBzJiYoYj1iLm1hcCh0aGlzLl9nZXRNb2R1bGVNYXBwZXIodGhpcy5fY29uZmlnLm1hcHMpKSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZCk/YjpiWzBdfSxfZ2V0TW9kdWxlTWFwcGVyOmZ1bmN0aW9uKGQpe3JldHVybiBmdW5jdGlvbihjKXt2YXIgYjsKKGI9dGhpcy5fbWFwRXhhY3RNYXRjaChjLGQpKXx8KGI9dGhpcy5fbWFwUGFydGlhbE1hdGNoKGMsZCkpO2J8fChiPXRoaXMuX21hcFdpbGRjYXJkTWF0Y2goYyxkKSk7cmV0dXJuIGJ8fGN9LmJpbmQodGhpcyl9LF9tYXBFeGFjdE1hdGNoOmZ1bmN0aW9uKGQsYyl7Zm9yKHZhciBiIGluIGMpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsYikpe3ZhciBnPWNbYl07aWYoZy52YWx1ZSYmZy5leGFjdE1hdGNoJiZkPT09YilyZXR1cm4gZy52YWx1ZX19LF9tYXBQYXJ0aWFsTWF0Y2g6ZnVuY3Rpb24oZCxjKXtmb3IodmFyIGIgaW4gYylpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxiKSl7dmFyIGc9Y1tiXTtpZighZy5leGFjdE1hdGNoJiYoZy52YWx1ZSYmKGc9Zy52YWx1ZSksZD09PWJ8fDA9PT1kLmluZGV4T2YoYisiLyIpKSlyZXR1cm4gZytkLnN1YnN0cmluZyhiLmxlbmd0aCl9fSxfbWFwV2lsZGNhcmRNYXRjaDpmdW5jdGlvbihkLApjKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGNbIioiXSlyZXR1cm4gY1siKiJdKGQpfSxfcGFyc2VDb25maWc6ZnVuY3Rpb24oZCl7Zm9yKHZhciBjIGluIGQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsYykmJigibW9kdWxlcyI9PT1jP3RoaXMuX3BhcnNlTW9kdWxlcyhkW2NdKTp0aGlzLl9jb25maWdbY109ZFtjXSk7cmV0dXJuIHRoaXMuX2NvbmZpZ30sX3BhcnNlTW9kdWxlczpmdW5jdGlvbihkKXtmb3IodmFyIGMgaW4gZClpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCxjKSl7dmFyIGI9ZFtjXTtiLm5hbWU9Yzt0aGlzLmFkZE1vZHVsZShiKX1yZXR1cm4gdGhpcy5fbW9kdWxlc30sX3JlZ2lzdGVyQ29uZGl0aW9uYWxNb2R1bGU6ZnVuY3Rpb24oZCl7aWYoZC5jb25kaXRpb24pe3ZhciBjPXRoaXMuX2NvbmRpdGlvbmFsTW9kdWxlc1tkLmNvbmRpdGlvbi50cmlnZ2VyXTtjfHwodGhpcy5fY29uZGl0aW9uYWxNb2R1bGVzW2QuY29uZGl0aW9uLnRyaWdnZXJdPQpjPVtdKTtjLnB1c2goZC5uYW1lKX19fTtyZXR1cm4gZn0pOyhmdW5jdGlvbih0LGYpe3ZhciBkPWYodCk7Im9iamVjdCI9PT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJihtb2R1bGUuZXhwb3J0cz1kKTsiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKGYpO3QuRGVwZW5kZW5jeUJ1aWxkZXI9ZH0pKCJ1bmRlZmluZWQiIT09dHlwZW9mIGE/YTp0aGlzLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoYyl7dGhpcy5fY29uZmlnUGFyc2VyPWM7dGhpcy5fcGF0aFJlc29sdmVyPW5ldyB0LlBhdGhSZXNvbHZlcjt0aGlzLl9yZXN1bHQ9W119dmFyIGQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZixyZXNvbHZlRGVwZW5kZW5jaWVzOmZ1bmN0aW9uKGMpe3RoaXMuX3F1ZXVlPWMuc2xpY2UoMCk7dmFyIGI7dHJ5e3RoaXMuX3Jlc29sdmVEZXBlbmRlbmNpZXMoKSxiPXRoaXMuX3Jlc3VsdC5yZXZlcnNlKCkuc2xpY2UoMCl9ZmluYWxseXt0aGlzLl9jbGVhbnVwKCl9cmV0dXJuIGJ9LApfY2xlYW51cDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuX2NvbmZpZ1BhcnNlci5nZXRNb2R1bGVzKCksYjtmb3IoYiBpbiBjKWlmKGQuY2FsbChjLGIpKXt2YXIgZz1jW2JdO2cuY29uZGl0aW9uYWxNYXJrPSExO2cubWFyaz0hMTtnLnRtcE1hcms9ITF9dGhpcy5fcXVldWUubGVuZ3RoPTA7dGhpcy5fcmVzdWx0Lmxlbmd0aD0wfSxfcHJvY2Vzc0NvbmRpdGlvbmFsTW9kdWxlczpmdW5jdGlvbihjKXt2YXIgYj10aGlzLl9jb25maWdQYXJzZXIuZ2V0Q29uZGl0aW9uYWxNb2R1bGVzKClbYy5uYW1lXTtpZihiJiYhYy5jb25kaXRpb25hbE1hcmspe2Zvcih2YXIgZz10aGlzLl9jb25maWdQYXJzZXIuZ2V0TW9kdWxlcygpLGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIGs9Z1tiW2VdXTstMT09PXRoaXMuX3F1ZXVlLmluZGV4T2Yoay5uYW1lKSYmdGhpcy5fdGVzdENvbmRpdGlvbmFsTW9kdWxlKGsuY29uZGl0aW9uLnRlc3QpJiZ0aGlzLl9xdWV1ZS5wdXNoKGsubmFtZSl9Yy5jb25kaXRpb25hbE1hcms9CiEwfX0sX3Jlc29sdmVEZXBlbmRlbmNpZXM6ZnVuY3Rpb24oKXtmb3IodmFyIGM9dGhpcy5fY29uZmlnUGFyc2VyLmdldE1vZHVsZXMoKSxiPTA7Yjx0aGlzLl9xdWV1ZS5sZW5ndGg7YisrKXt2YXIgZz1jW3RoaXMuX3F1ZXVlW2JdXTtnfHwoZz10aGlzLl9jb25maWdQYXJzZXIuYWRkTW9kdWxlKHtuYW1lOnRoaXMuX3F1ZXVlW2JdLGRlcGVuZGVuY2llczpbXX0pKTtnLm1hcmt8fHRoaXMuX3Zpc2l0KGcpfX0sX3Rlc3RDb25kaXRpb25hbE1vZHVsZTpmdW5jdGlvbihjKXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIGM/YygpOmV2YWwoImZhbHNlIHx8ICIrYykoKX0sX3Zpc2l0OmZ1bmN0aW9uKGMpe2lmKGMudG1wTWFyayl0aHJvdyBFcnJvcigiRXJyb3IgcHJvY2Vzc2luZyBtb2R1bGU6ICIrYy5uYW1lKyIuIFRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uIGlzIG5vdCBEaXJlY3RlZCBBY3ljbGljIEdyYXBoLiIpO3RoaXMuX3Byb2Nlc3NDb25kaXRpb25hbE1vZHVsZXMoYyk7aWYoIWMubWFyayl7Yy50bXBNYXJrPQohMDtmb3IodmFyIGI9dGhpcy5fY29uZmlnUGFyc2VyLmdldE1vZHVsZXMoKSxnPTA7ZzxjLmRlcGVuZGVuY2llcy5sZW5ndGg7ZysrKXt2YXIgZT1jLmRlcGVuZGVuY2llc1tnXTtpZigicmVxdWlyZSIhPT1lJiYiZXhwb3J0cyIhPT1lJiYibW9kdWxlIiE9PWUpe3ZhciBlPXRoaXMuX3BhdGhSZXNvbHZlci5yZXNvbHZlUGF0aChjLm5hbWUsZSksZT10aGlzLl9jb25maWdQYXJzZXIubWFwTW9kdWxlKGUsYy5tYXApLGs9YltlXTtrfHwoaz10aGlzLl9jb25maWdQYXJzZXIuYWRkTW9kdWxlKHtuYW1lOmUsZGVwZW5kZW5jaWVzOltdfSkpO3RoaXMuX3Zpc2l0KGspfX1jLm1hcms9ITA7Yy50bXBNYXJrPSExO3RoaXMuX3Jlc3VsdC51bnNoaWZ0KGMubmFtZSl9fSxfcXVldWU6W119O3JldHVybiBmfSk7KGZ1bmN0aW9uKHQsZil7dmFyIGQ9Zih0KTsib2JqZWN0Ij09PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmKG1vZHVsZS5leHBvcnRzPWQpOyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiYKZGVmaW5lLmFtZCYmZGVmaW5lKGYpO3QuVVJMQnVpbGRlcj1kfSkoInVuZGVmaW5lZCIhPT10eXBlb2YgYT9hOnRoaXMsZnVuY3Rpb24odCl7ZnVuY3Rpb24gZihjKXt0aGlzLl9jb25maWdQYXJzZXI9Y312YXIgZD0vXmh0dHBzPzpcL1wvfFwvXC98d3d3XC4vO2YucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmLGJ1aWxkOmZ1bmN0aW9uKGMpe3ZhciBiPVtdLGc9W10sZT1bXSxrPVtdLG09W10scD10aGlzLl9jb25maWdQYXJzZXIuZ2V0Q29uZmlnKCkscz1wLmJhc2VQYXRofHwiIixsPXRoaXMuX2NvbmZpZ1BhcnNlci5nZXRNb2R1bGVzKCk7cy5sZW5ndGgmJiIvIiE9PXMuY2hhckF0KHMubGVuZ3RoLTEpJiYocys9Ii8iKTtmb3IodmFyIGg9MDtoPGMubGVuZ3RoO2grKyl7dmFyIHU9bFtjW2hdXTtpZih1LmZ1bGxQYXRoKW0ucHVzaCh7bW9kdWxlczpbdS5uYW1lXSx1cmw6dGhpcy5fZ2V0VVJMV2l0aFBhcmFtcyh1LmZ1bGxQYXRoKX0pO2Vsc2V7dmFyIHc9dGhpcy5fZ2V0TW9kdWxlUGF0aCh1KSwKej0wPT09dy5pbmRleE9mKCIvIik7ZC50ZXN0KHcpP20ucHVzaCh7bW9kdWxlczpbdS5uYW1lXSx1cmw6dGhpcy5fZ2V0VVJMV2l0aFBhcmFtcyh3KX0pOiFwLmNvbWJpbmV8fHUuYW5vbnltb3VzP20ucHVzaCh7bW9kdWxlczpbdS5uYW1lXSx1cmw6dGhpcy5fZ2V0VVJMV2l0aFBhcmFtcyhwLnVybCsoej8iIjpzKSt3KX0pOno/KGIucHVzaCh3KSxlLnB1c2godS5uYW1lKSk6KGcucHVzaCh3KSxrLnB1c2godS5uYW1lKSl9dS5yZXF1ZXN0ZWQ9ITB9Zy5sZW5ndGgmJihtPW0uY29uY2F0KHRoaXMuX2dlbmVyYXRlQnVmZmVyVVJMcyhrLGcse2Jhc2VQYXRoOnMsdXJsOnAudXJsLHVybE1heExlbmd0aDpwLnVybE1heExlbmd0aH0pKSxnLmxlbmd0aD0wKTtiLmxlbmd0aCYmKG09bS5jb25jYXQodGhpcy5fZ2VuZXJhdGVCdWZmZXJVUkxzKGUsYix7dXJsOnAudXJsLHVybE1heExlbmd0aDpwLnVybE1heExlbmd0aH0pKSxiLmxlbmd0aD0wKTtyZXR1cm4gbX0sX2dlbmVyYXRlQnVmZmVyVVJMczpmdW5jdGlvbihjLApiLGcpe3ZhciBlLGs9Zy5iYXNlUGF0aHx8IiIsbT1bXSxwPWcudXJsTWF4TGVuZ3RofHwyRTMscz17bW9kdWxlczpbY1swXV0sdXJsOmcudXJsK2srYlswXX07Zm9yKGU9MTtlPGIubGVuZ3RoO2UrKyl7dmFyIGw9Y1tlXSxoPWJbZV07cy51cmwubGVuZ3RoK2subGVuZ3RoK2gubGVuZ3RoKzE8cD8ocy5tb2R1bGVzLnB1c2gobCkscy51cmwrPSJceDI2IitrK2gpOihtLnB1c2gocykscz17bW9kdWxlczpbbF0sdXJsOmcudXJsK2sraH0pfXMudXJsPXRoaXMuX2dldFVSTFdpdGhQYXJhbXMocy51cmwpO20ucHVzaChzKTtyZXR1cm4gbX0sX2dldE1vZHVsZVBhdGg6ZnVuY3Rpb24oYyl7dmFyIGI9Yy5wYXRofHxjLm5hbWUsZz10aGlzLl9jb25maWdQYXJzZXIuZ2V0Q29uZmlnKCkucGF0aHN8fHt9O09iamVjdC5rZXlzKGcpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoYj09PWV8fDA9PT1iLmluZGV4T2YoZSsiLyIpKWI9Z1tlXStiLnN1YnN0cmluZyhlLmxlbmd0aCl9KTsiZnVuY3Rpb24iPT09CnR5cGVvZiBnWyIqIl0mJihiPWdbIioiXShiKSk7ZC50ZXN0KGIpfHxiLmxhc3RJbmRleE9mKCIuanMiKT09PWIubGVuZ3RoLTN8fChiKz0iLmpzIik7cmV0dXJuIGJ9LF9nZXRVUkxXaXRoUGFyYW1zOmZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMuX2NvbmZpZ1BhcnNlci5nZXRDb25maWcoKS5kZWZhdWx0VVJMUGFyYW1zfHx7fSxnPU9iamVjdC5rZXlzKGIpO2lmKCFnLmxlbmd0aClyZXR1cm4gYztnPWcubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKyJceDNkIitiW2VdfSkuam9pbigiXHgyNiIpO3JldHVybiBjKygtMTxjLmluZGV4T2YoIj8iKT8iXHgyNiI6Ij8iKStnfX07cmV0dXJuIGZ9KTsoZnVuY3Rpb24odCxmKXt2YXIgZD1mKHQpOyJvYmplY3QiPT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9ZCk7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZShmKTt0LlBhdGhSZXNvbHZlcj1kfSkoInVuZGVmaW5lZCIhPT10eXBlb2YgYT8KYTp0aGlzLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoKXt9Zi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYscmVzb2x2ZVBhdGg6ZnVuY3Rpb24oZCxjKXtpZigicmVxdWlyZSI9PT1jfHwiZXhwb3J0cyI9PT1jfHwibW9kdWxlIj09PWN8fDAhPT1jLmluZGV4T2YoIi4iKSYmMCE9PWMuaW5kZXhPZigiLi4iKSlyZXR1cm4gYzt2YXIgYj1kLnNwbGl0KCIvIik7Yi5zcGxpY2UoLTEsMSk7Zm9yKHZhciBnPWMuc3BsaXQoIi8iKSxlPWcuc3BsaWNlKC0xLDEpLGs9MDtrPGcubGVuZ3RoO2srKyl7dmFyIG09Z1trXTtpZigiLiIhPT1tKWlmKCIuLiI9PT1tKWlmKGIubGVuZ3RoKWIuc3BsaWNlKC0xLDEpO2Vsc2V7Yj1iLmNvbmNhdChnLnNsaWNlKGspKTticmVha31lbHNlIGIucHVzaChtKX1iLnB1c2goZSk7cmV0dXJuIGIuam9pbigiLyIpfX07cmV0dXJuIGZ9KTsoZnVuY3Rpb24odCxmKXt2YXIgZD1mKHQpOyJvYmplY3QiPT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9CmQpOyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoZik7dC5Mb2FkZXI9bmV3IGQ7dC5yZXF1aXJlPXQuTG9hZGVyLnJlcXVpcmUuYmluZCh0LkxvYWRlcik7dC5kZWZpbmU9dC5Mb2FkZXIuZGVmaW5lLmJpbmQodC5Mb2FkZXIpO3QuZGVmaW5lLmFtZD17fX0pKCJ1bmRlZmluZWQiIT09dHlwZW9mIGE/YTp0aGlzLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoYyl7Zi5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9jb25maWc9Y3x8dC5fX0NPTkZJR19fO3RoaXMuX21vZHVsZXNNYXA9e319Zi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LkV2ZW50RW1pdHRlci5wcm90b3R5cGUpO2YucHJvdG90eXBlLmNvbnN0cnVjdG9yPWY7Zi5zdXBlcmNsYXNzPXQuRXZlbnRFbWl0dGVyLnByb3RvdHlwZTt2YXIgZD17YWRkTW9kdWxlOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9nZXRDb25maWdQYXJzZXIoKS5hZGRNb2R1bGUoYyl9LApkZWZpbmU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGI9YXJndW1lbnRzWzBdLGc9YXJndW1lbnRzWzFdLGU9YXJndW1lbnRzWzJdLGs9YXJndW1lbnRzWzNdfHx7fTtrLmFub255bW91cz0hMTt2YXIgbT1hcmd1bWVudHMubGVuZ3RoOzI+bT8oZT1hcmd1bWVudHNbMF0sZz1bIm1vZHVsZSIsImV4cG9ydHMiXSxrLmFub255bW91cz0hMCk6Mj09PW0mJigic3RyaW5nIj09PXR5cGVvZiBiPyhnPVsibW9kdWxlIiwiZXhwb3J0cyJdLGU9YXJndW1lbnRzWzFdKTooZz1hcmd1bWVudHNbMF0sZT1hcmd1bWVudHNbMV0say5hbm9ueW1vdXM9ITApKTtpZihrLmFub255bW91cyl7dmFyIHA9ZnVuY3Rpb24ocyl7Yy5vZmYoInNjcmlwdExvYWRlZCIscCk7aWYoMSE9PXMubGVuZ3RoKWMuX3JlcG9ydE1pc21hdGNoZWRBbm9ueW1vdXNNb2R1bGVzKGUudG9TdHJpbmcoKSk7ZWxzZXtzPXNbMF07dmFyIGw9Yy5nZXRNb2R1bGVzKClbc107bCYmbC5wZW5kaW5nSW1wbGVtZW50YXRpb24mJmMuX3JlcG9ydE1pc21hdGNoZWRBbm9ueW1vdXNNb2R1bGVzKGUudG9TdHJpbmcoKSk7CmMuX2RlZmluZShzLGcsZSxrKX19O2Mub24oInNjcmlwdExvYWRlZCIscCl9ZWxzZSB0aGlzLl9kZWZpbmUoYixnLGUsayl9LGdldENvbmRpdGlvbmFsTW9kdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRDb25maWdQYXJzZXIoKS5nZXRDb25kaXRpb25hbE1vZHVsZXMoKX0sZ2V0TW9kdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRDb25maWdQYXJzZXIoKS5nZXRNb2R1bGVzKCl9LHJlcXVpcmU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGIsZyxlLGs7aWYoQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMF0pKWU9YXJndW1lbnRzWzBdLGs9ImZ1bmN0aW9uIj09PXR5cGVvZiBhcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsYj0iZnVuY3Rpb24iPT09dHlwZW9mIGFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtlbHNlIGZvcihlPVtdLGc9MDtnPGFyZ3VtZW50cy5sZW5ndGg7KytnKWlmKCJzdHJpbmciPT09dHlwZW9mIGFyZ3VtZW50c1tnXSllW2ddPWFyZ3VtZW50c1tnXTsKZWxzZSBpZigiZnVuY3Rpb24iPT09dHlwZW9mIGFyZ3VtZW50c1tnXSl7az1hcmd1bWVudHNbZ107Yj0iZnVuY3Rpb24iPT09dHlwZW9mIGFyZ3VtZW50c1srK2ddP2FyZ3VtZW50c1tnXTpudWxsO2JyZWFrfXZhciBtPWMuX2dldENvbmZpZ1BhcnNlcigpLHA9bS5tYXBNb2R1bGUoZSksczsobmV3IFByb21pc2UoZnVuY3Rpb24obCxoKXtjLl9yZXNvbHZlRGVwZW5kZW5jaWVzKHApLnRoZW4oZnVuY3Rpb24odSl7Yy5fbG9nKCJSZXNvbHZlZCBtb2R1bGVzOiIscCwidG86Iix1KTt2YXIgdz11LmZpbHRlcihmdW5jdGlvbih6KXtyZXR1cm4gMD09PXouaW5kZXhPZigiOkVSUk9SOiIpfSkubWFwKGZ1bmN0aW9uKHope3JldHVybiB6LnN1YnN0cig3KX0pOzA8dy5sZW5ndGgmJmgoRXJyb3IoIlRoZSBmb2xsb3dpbmcgcHJvYmxlbXMgd2hlcmUgZGV0ZWN0ZWQgd2hpbGUgcmVzb2x2aW5nIG1vZHVsZXM6XG4iK3cuam9pbigiXG4iKSkpO3c9bS5nZXRDb25maWcoKTswIT09dy53YWl0VGltZW91dCYmCihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgej1tLmdldE1vZHVsZXMoKSxBPUVycm9yKCJMb2FkIHRpbWVvdXQgZm9yIG1vZHVsZXM6ICIrZSk7QS5kZXBlbmRlbmNpZXM9dTtBLm1hcHBlZE1vZHVsZXM9cDtBLm1pc3NpbmdEZXBlbmRlbmNpZXM9dS5maWx0ZXIoZnVuY3Rpb24oSCl7cmV0dXJuInVuZGVmaW5lZCI9PT10eXBlb2YgeltIXS5pbXBsZW1lbnRhdGlvbn0pO0EubW9kdWxlcz1lO0EuZGVwZW5kZWNpZXM9QS5kZXBlbmRlbmNpZXM7aChBKX0sdy53YWl0VGltZW91dHx8N0UzKSk7Yy5fbG9hZE1vZHVsZXModSkudGhlbihsLGgpfSxoKX0pKS50aGVuKGZ1bmN0aW9uKGwpe2NsZWFyVGltZW91dChzKTtrJiYobD1jLl9nZXRNb2R1bGVJbXBsZW1lbnRhdGlvbnMocCksay5hcHBseShrLGwpKX0sZnVuY3Rpb24obCl7Y2xlYXJUaW1lb3V0KHMpO2I/Yi5jYWxsKGIsbCk6Yy5fZXJyb3IoIlVuaGFuZGxlZCBmYWlsdXJlOiIsbCwid2hpbGUgcmVzb2x2aW5nIG1vZHVsZXM6IiwKcCl9KX0sX2NyZWF0ZU1vZHVsZVByb21pc2U6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZyxlKXt2YXIgaz1iLl9nZXRDb25maWdQYXJzZXIoKS5nZXRNb2R1bGVzKClbY107aWYoay5leHBvcnRzKXt2YXIgbT1iLl9nZXRWYWx1ZUdsb2JhbE5TKGsuZXhwb3J0cyk7aWYobSlnKG0pO2Vsc2V7dmFyIHA9ZnVuY3Rpb24obCl7MDw9bC5pbmRleE9mKGMpJiYoYi5vZmYoInNjcmlwdExvYWRlZCIscCksKGw9Yi5fZ2V0VmFsdWVHbG9iYWxOUyhrLmV4cG9ydHMpKT9nKGwpOmUoRXJyb3IoIk1vZHVsZSAiK2MrIiBkb2VzIG5vdCBleHBvcnQgdGhlIHNwZWNpZmllZCB2YWx1ZTogIitrLmV4cG9ydHMpKSl9O2Iub24oInNjcmlwdExvYWRlZCIscCl9fWVsc2V7dmFyIHM9ZnVuY3Rpb24obCl7bD09PWMmJihiLm9mZigibW9kdWxlUmVnaXN0ZXIiLHMpLGIuX21vZHVsZXNNYXBbY109ITAsZyhjKSl9O2Iub24oIm1vZHVsZVJlZ2lzdGVyIixzKX19KX0sCl9kZWZpbmU6ZnVuY3Rpb24oYyxiLGcsZSl7ZT1lfHx7fTt2YXIgaz10aGlzLl9nZXRDb25maWdQYXJzZXIoKTtpZihrLmdldENvbmZpZygpLmlnbm9yZU1vZHVsZVZlcnNpb24pe3ZhciBtPWMuc3BsaXQoIi8iKSxwPW1bMF0uc3BsaXQoIkAiKTttWzBdPXBbMF07Yz1tLmpvaW4oIi8iKX12YXIgcz10aGlzLl9nZXRQYXRoUmVzb2x2ZXIoKTtiPWIubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBzLnJlc29sdmVQYXRoKGMsbCl9KTtlLm5hbWU9YztlLmRlcGVuZGVuY2llcz1iO2UucGVuZGluZ0ltcGxlbWVudGF0aW9uPWc7ay5hZGRNb2R1bGUoZSk7dGhpcy5fbW9kdWxlc01hcFtlLm5hbWVdfHwodGhpcy5fbW9kdWxlc01hcFtlLm5hbWVdPSEwKTt0aGlzLmVtaXQoIm1vZHVsZVJlZ2lzdGVyIixjKX0sX2dldENvbmZpZ1BhcnNlcjpmdW5jdGlvbigpe3RoaXMuX2NvbmZpZ1BhcnNlcnx8KHRoaXMuX2NvbmZpZ1BhcnNlcj1uZXcgdC5Db25maWdQYXJzZXIodGhpcy5fY29uZmlnKSk7cmV0dXJuIHRoaXMuX2NvbmZpZ1BhcnNlcn0sCl9nZXREZXBlbmRlbmN5QnVpbGRlcjpmdW5jdGlvbigpe3RoaXMuX2RlcGVuZGVuY3lCdWlsZGVyfHwodGhpcy5fZGVwZW5kZW5jeUJ1aWxkZXI9bmV3IHQuRGVwZW5kZW5jeUJ1aWxkZXIodGhpcy5fZ2V0Q29uZmlnUGFyc2VyKCkpKTtyZXR1cm4gdGhpcy5fZGVwZW5kZW5jeUJ1aWxkZXJ9LF9nZXRWYWx1ZUdsb2JhbE5TOmZ1bmN0aW9uKGMpe2M9Yy5zcGxpdCgiLiIpO2Zvcih2YXIgYj0oMCxldmFsKSgidGhpcyIpW2NbMF1dLGc9MTtiJiZnPGMubGVuZ3RoO2crKylpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYixjW2ddKSliPWJbY1tnXV07ZWxzZSByZXR1cm4gbnVsbDtyZXR1cm4gYn0sX2dldE1pc3NpbmdEZXBlbmRlbmNpZXM6ZnVuY3Rpb24oYyl7Zm9yKHZhciBiPXRoaXMuX2dldENvbmZpZ1BhcnNlcigpLGc9Yi5nZXRNb2R1bGVzKCksZT1PYmplY3QuY3JlYXRlKG51bGwpLGs9MDtrPGMubGVuZ3RoO2srKylmb3IodmFyIG09Z1tjW2tdXSxtPWIubWFwTW9kdWxlKG0uZGVwZW5kZW5jaWVzLAptLm1hcCkscD0wO3A8bS5sZW5ndGg7cCsrKXt2YXIgcz1tW3BdLGw9Z1tzXTsicmVxdWlyZSI9PT1zfHwiZXhwb3J0cyI9PT1zfHwibW9kdWxlIj09PXN8fGwmJmwucGVuZGluZ0ltcGxlbWVudGF0aW9ufHwoZVtzXT0xKX1yZXR1cm4gT2JqZWN0LmtleXMoZSl9LF9nZXRNb2R1bGVJbXBsZW1lbnRhdGlvbnM6ZnVuY3Rpb24oYyl7Zm9yKHZhciBiPVtdLGc9dGhpcy5fZ2V0Q29uZmlnUGFyc2VyKCkuZ2V0TW9kdWxlcygpLGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGs9Z1tjW2VdXTtiLnB1c2goaz9rLmltcGxlbWVudGF0aW9uOnZvaWQgMCl9cmV0dXJuIGJ9LF9nZXRQYXRoUmVzb2x2ZXI6ZnVuY3Rpb24oKXt0aGlzLl9wYXRoUmVzb2x2ZXJ8fCh0aGlzLl9wYXRoUmVzb2x2ZXI9bmV3IHQuUGF0aFJlc29sdmVyKTtyZXR1cm4gdGhpcy5fcGF0aFJlc29sdmVyfSxfZ2V0VVJMQnVpbGRlcjpmdW5jdGlvbigpe3RoaXMuX3VybEJ1aWxkZXJ8fCh0aGlzLl91cmxCdWlsZGVyPW5ldyB0LlVSTEJ1aWxkZXIodGhpcy5fZ2V0Q29uZmlnUGFyc2VyKCkpKTsKcmV0dXJuIHRoaXMuX3VybEJ1aWxkZXJ9LF9maWx0ZXJNb2R1bGVzQnlQcm9wZXJ0eTpmdW5jdGlvbihjLGIpe3ZhciBnPWI7InN0cmluZyI9PT10eXBlb2YgYiYmKGc9W2JdKTtmb3IodmFyIGU9W10saz10aGlzLl9nZXRDb25maWdQYXJzZXIoKS5nZXRNb2R1bGVzKCksbT0wO208Yy5sZW5ndGg7bSsrKXt2YXIgcD1jW21dLHM9a1tjW21dXTtpZighcyllLnB1c2gocCk7ZWxzZSBpZigicmVxdWlyZSIhPT1zJiYiZXhwb3J0cyIhPT1zJiYibW9kdWxlIiE9PXMpe2Zvcih2YXIgbD0wLGg9MDtoPGcubGVuZ3RoO2grKylpZihzW2dbaF1dKXtsPSEwO2JyZWFrfWx8fGUucHVzaChwKX19cmV0dXJuIGV9LF9sb2FkTW9kdWxlczpmdW5jdGlvbihjKXt2YXIgYj10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihnLGUpe3ZhciBrPWIuX2ZpbHRlck1vZHVsZXNCeVByb3BlcnR5KGMsWyJyZXF1ZXN0ZWQiLCJwZW5kaW5nSW1wbGVtZW50YXRpb24iXSk7aWYoay5sZW5ndGgpe2Zvcih2YXIgaz0KYi5fZ2V0VVJMQnVpbGRlcigpLmJ1aWxkKGspLG09W10scD0wO3A8ay5sZW5ndGg7cCsrKW0ucHVzaChiLl9sb2FkU2NyaXB0KGtbcF0pKTtQcm9taXNlLmFsbChtKS50aGVuKGZ1bmN0aW9uKHMpe3JldHVybiBiLl93YWl0Rm9yTW9kdWxlcyhjKX0pLnRoZW4oZnVuY3Rpb24ocyl7ZyhzKX0pLmNhdGNoKGZ1bmN0aW9uKHMpe2Uocyl9KX1lbHNlIGIuX3dhaXRGb3JNb2R1bGVzKGMpLnRoZW4oZnVuY3Rpb24ocyl7ZyhzKX0pLmNhdGNoKGZ1bmN0aW9uKHMpe2Uocyl9KX0pfSxfbG9hZFNjcmlwdDpmdW5jdGlvbihjKXt2YXIgYj10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihnLGUpe3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2suc3JjPWMudXJsO2suYXN5bmM9ITE7ay5vbmxvYWQ9ay5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLnJlYWR5U3RhdGUmJiJjb21wbGV0ZSIhPT10aGlzLnJlYWR5U3RhdGUmJiJsb2FkIiE9PXRoaXMucmVhZHlTdGF0ZXx8CihrLm9ubG9hZD1rLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGcoayksYi5lbWl0KCJzY3JpcHRMb2FkZWQiLGMubW9kdWxlcykpfTtrLm9uZXJyb3I9ZnVuY3Rpb24oKXtkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGspO2Uoayl9O2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoayl9KX0sX2xvZzpmdW5jdGlvbigpe3ZhciBjPWNvbnNvbGUsYj0xPT09YXJndW1lbnRzLmxlbmd0aD9bYXJndW1lbnRzWzBdXTpBcnJheS5hcHBseShudWxsLGFyZ3VtZW50cyk7dGhpcy5fZ2V0Q29uZmlnUGFyc2VyKCkuZ2V0Q29uZmlnKCkuZXhwbGFpblJlc29sdXRpb25zJiZjLmxvZy5hcHBseShjLFsiTGlmZXJheSBBTUQgTG9hZGVyOiJdLmNvbmNhdChiKSl9LF9lcnJvcjpmdW5jdGlvbigpe3ZhciBjPWNvbnNvbGUsYj0xPT09YXJndW1lbnRzLmxlbmd0aD9bYXJndW1lbnRzWzBdXTpBcnJheS5hcHBseShudWxsLGFyZ3VtZW50cyk7Yy5sb2cuYXBwbHkoYyxbIkxpZmVyYXkgQU1EIExvYWRlcjoiXS5jb25jYXQoYikpfSwKX3Jlc29sdmVEZXBlbmRlbmNpZXM6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZyxlKXt0cnl7dmFyIGs9Yi5fZ2V0RGVwZW5kZW5jeUJ1aWxkZXIoKS5yZXNvbHZlRGVwZW5kZW5jaWVzKGMpO2coayl9Y2F0Y2gobSl7ZShtKX19KX0sX3JlcG9ydE1pc21hdGNoZWRBbm9ueW1vdXNNb2R1bGVzOmZ1bmN0aW9uKGMpe2M9Ik1pc21hdGNoZWQgYW5vbnltb3VzIGRlZmluZSgpIG1vZHVsZTogIitjO3ZhciBiPXRoaXMuX2NvbmZpZy5yZXBvcnRNaXNtYXRjaGVkQW5vbnltb3VzTW9kdWxlcztpZihiJiYiZXhjZXB0aW9uIiE9PWIpY29uc29sZSYmY29uc29sZVtiXSYmY29uc29sZVtiXS5jYWxsKGNvbnNvbGUsYyk7ZWxzZSB0aHJvdyBFcnJvcihjKTt9LF9zZXRNb2R1bGVJbXBsZW1lbnRhdGlvbjpmdW5jdGlvbihjKXtmb3IodmFyIGI9dGhpcyxnPXRoaXMuX2dldENvbmZpZ1BhcnNlcigpLmdldE1vZHVsZXMoKSxlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBrPQpjW2VdO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGsuaW1wbGVtZW50YXRpb24paWYoInVuZGVmaW5lZCIhPT10eXBlb2Ygay5leHBvcnRzKWsucGVuZGluZ0ltcGxlbWVudGF0aW9uPWsuaW1wbGVtZW50YXRpb249dGhpcy5fZ2V0VmFsdWVHbG9iYWxOUyhrLmV4cG9ydHMpO2Vsc2V7Zm9yKHZhciBtPVtdLHA9e2V4cG9ydHM6e319LHM9Yi5fZ2V0Q29uZmlnUGFyc2VyKCksbD0wO2w8ay5kZXBlbmRlbmNpZXMubGVuZ3RoO2wrKyl7dmFyIGg9ay5kZXBlbmRlbmNpZXNbbF07ImV4cG9ydHMiPT09aD9tLnB1c2gocC5leHBvcnRzKToibW9kdWxlIj09PWg/bS5wdXNoKHApOigicmVxdWlyZSI9PT1oPyhoPWIuX2NyZWF0ZUxvY2FsUmVxdWlyZShrKSxoLnRvVXJsPWZ1bmN0aW9uKHUpe3JldHVybiBiLl9nZXRVUkxCdWlsZGVyKCkuYnVpbGQoW3VdKVswXS51cmx9KTpoPWdbcy5tYXBNb2R1bGUoaCxrLm1hcCldLmltcGxlbWVudGF0aW9uLG0ucHVzaChoKSl9bT0iZnVuY3Rpb24iPT09dHlwZW9mIGsucGVuZGluZ0ltcGxlbWVudGF0aW9uPwprLnBlbmRpbmdJbXBsZW1lbnRhdGlvbi5hcHBseShrLnBlbmRpbmdJbXBsZW1lbnRhdGlvbixtKTprLnBlbmRpbmdJbXBsZW1lbnRhdGlvbjtrLmltcGxlbWVudGF0aW9uPSJ1bmRlZmluZWQiIT09dHlwZW9mIG0/bTpwLmV4cG9ydHN9fX0sX2NyZWF0ZUxvY2FsUmVxdWlyZTpmdW5jdGlvbihjKXt2YXIgYj10aGlzLl9nZXRDb25maWdQYXJzZXIoKSxnPXRoaXMuX2dldFBhdGhSZXNvbHZlcigpO3JldHVybiBmdW5jdGlvbihlKXtpZigxPGFyZ3VtZW50cy5sZW5ndGgpdC5yZXF1aXJlLmFwcGx5KHQuTG9hZGVyLGFyZ3VtZW50cyk7ZWxzZXtlPWcucmVzb2x2ZVBhdGgoYy5uYW1lLGUpO2U9Yi5tYXBNb2R1bGUoZSxjLm1hcCk7dmFyIGs9Yi5nZXRNb2R1bGVzKClbZV07aWYoIWt8fCJ1bmRlZmluZWQiPT09dHlwZW9mIGsuaW1wbGVtZW50YXRpb24pdGhyb3cgRXJyb3IoJ01vZHVsZSAiJytlKyciIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0IGZvciBjb250ZXh0OiAnK2MubmFtZSk7cmV0dXJuIGsuaW1wbGVtZW50YXRpb259fX0sCl93YWl0Rm9yTW9kdWxlOmZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMuX21vZHVsZXNNYXBbY107Ynx8KGI9dGhpcy5fY3JlYXRlTW9kdWxlUHJvbWlzZShjKSx0aGlzLl9tb2R1bGVzTWFwW2NdPWIpO3JldHVybiBifSxfd2FpdEZvck1vZHVsZXM6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZyxlKXtmb3IodmFyIGs9W10sbT0wO208Yy5sZW5ndGg7bSsrKWsucHVzaChiLl93YWl0Rm9yTW9kdWxlKGNbbV0pKTtQcm9taXNlLmFsbChrKS50aGVuKGZ1bmN0aW9uKHApe3ZhciBzPWIuX2dldENvbmZpZ1BhcnNlcigpLmdldE1vZHVsZXMoKTtwPWZ1bmN0aW9uKCl7Zm9yKHZhciBoPVtdLHU9MDt1PGMubGVuZ3RoO3UrKyloLnB1c2goc1tjW3VdXSk7Yi5fc2V0TW9kdWxlSW1wbGVtZW50YXRpb24oaCk7ZyhoKX07dmFyIGw9Yi5fZ2V0TWlzc2luZ0RlcGVuZGVuY2llcyhjKTtsLmxlbmd0aD9iLnJlcXVpcmUobCxwLGUpOnAoKX0sZSl9KX19O09iamVjdC5rZXlzKGQpLmZvckVhY2goZnVuY3Rpb24oYyl7Zi5wcm90b3R5cGVbY109CmRbY119KTtmLnByb3RvdHlwZS5kZWZpbmUuYW1kPXt9O3JldHVybiBmfSk7dmFyIEU9bnVsbCxxPSEwOyJvYmplY3QiPT09dHlwZW9mIGEuX19DT05GSUdfXyYmKCJzdHJpbmciPT09dHlwZW9mIGEuX19DT05GSUdfXy5uYW1lc3BhY2UmJihFPWEuX19DT05GSUdfXy5uYW1lc3BhY2UpLCJib29sZWFuIj09PXR5cGVvZiBhLl9fQ09ORklHX18uZXhwb3NlR2xvYmFsJiYocT1hLl9fQ09ORklHX18uZXhwb3NlR2xvYmFsKSk7RT8oRT13aW5kb3dbYS5fX0NPTkZJR19fLm5hbWVzcGFjZV0/d2luZG93W2EuX19DT05GSUdfXy5uYW1lc3BhY2VdOnt9LEUuTG9hZGVyPWEuTG9hZGVyLHdpbmRvd1thLl9fQ09ORklHX18ubmFtZXNwYWNlXT1FKTp3aW5kb3cuTG9hZGVyPWEuTG9hZGVyO3EmJih3aW5kb3cuTG9hZGVyPWEuTG9hZGVyLHdpbmRvdy5yZXF1aXJlPWEucmVxdWlyZSx3aW5kb3cuZGVmaW5lPWEuZGVmaW5lKTthLkxvYWRlci52ZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIjIuMy4wIn19KSgpOwooZnVuY3Rpb24oKXsidW5kZWZpbmVkIj09PXR5cGVvZiB3aW5kb3cuUHJvbWlzZSYmInVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93LkVTNlByb21pc2UmJih3aW5kb3cuUHJvbWlzZT13aW5kb3cuRVM2UHJvbWlzZSl9KSgpOwooZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHJhLFQpe2lmKHJhIT09VCl7dmFyICRhPW51bGw9PT1yYSxvYj1yYT09PUgsUWE9cmE9PT1yYSxmYz1udWxsPT09VCxLYz1UPT09SCx1Yz1UPT09VDtpZihyYT5UJiYhZmN8fCFRYXx8JGEmJiFLYyYmdWN8fG9iJiZ1YylyZXR1cm4gMTtpZihyYTxUJiYhJGF8fCF1Y3x8ZmMmJiFvYiYmUWF8fEtjJiZRYSlyZXR1cm4tMX1yZXR1cm4gMH1mdW5jdGlvbiBFKHJhLFQsJGEpe2Zvcih2YXIgb2I9cmEubGVuZ3RoLFFhPSRhP29iOi0xOyRhP1FhLS06KytRYTxvYjspaWYoVChyYVtRYV0sUWEscmEpKXJldHVybiBRYTtyZXR1cm4tMX1mdW5jdGlvbiBxKHJhLFQsJGEpe2lmKFQhPT1UKXJldHVybiBwKHJhLCRhKTskYS09MTtmb3IodmFyIG9iPXJhLmxlbmd0aDsrKyRhPG9iOylpZihyYVskYV09PT1UKXJldHVybiAkYTtyZXR1cm4tMX1mdW5jdGlvbiB0KHJhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgcmF8fCExfWZ1bmN0aW9uIGYocmEpe3JldHVybiBudWxsPT0KcmE/IiI6cmErIiJ9ZnVuY3Rpb24gZChyYSxUKXtmb3IodmFyICRhPS0xLG9iPXJhLmxlbmd0aDsrKyRhPG9iJiYtMTxULmluZGV4T2YocmEuY2hhckF0KCRhKSk7KTtyZXR1cm4gJGF9ZnVuY3Rpb24gYyhyYSxUKXtmb3IodmFyICRhPXJhLmxlbmd0aDskYS0tJiYtMTxULmluZGV4T2YocmEuY2hhckF0KCRhKSk7KTtyZXR1cm4gJGF9ZnVuY3Rpb24gYihyYSxUKXtyZXR1cm4gYShyYS5jcml0ZXJpYSxULmNyaXRlcmlhKXx8cmEuaW5kZXgtVC5pbmRleH1mdW5jdGlvbiBnKHJhKXtyZXR1cm4gTWVbcmFdfWZ1bmN0aW9uIGUocmEpe3JldHVybiBrZVtyYV19ZnVuY3Rpb24gayhyYSxULCRhKXtUP3JhPWFkW3JhXTokYSYmKHJhPXpjW3JhXSk7cmV0dXJuIlxcIityYX1mdW5jdGlvbiBtKHJhKXtyZXR1cm4iXFwiK3pjW3JhXX1mdW5jdGlvbiBwKHJhLFQsJGEpe3ZhciBvYj1yYS5sZW5ndGg7Zm9yKFQrPSRhPzA6LTE7JGE/VC0tOisrVDxvYjspe3ZhciBRYT1yYVtUXTtpZihRYSE9PVFhKXJldHVybiBUfXJldHVybi0xfQpmdW5jdGlvbiBzKHJhKXtyZXR1cm4hIXJhJiYib2JqZWN0Ij09dHlwZW9mIHJhfWZ1bmN0aW9uIGwocmEpe3JldHVybiAxNjA+PXJhJiY5PD1yYSYmMTM+PXJhfHwzMj09cmF8fDE2MD09cmF8fDU3NjA9PXJhfHw2MTU4PT1yYXx8ODE5Mjw9cmEmJig4MjAyPj1yYXx8ODIzMj09cmF8fDgyMzM9PXJhfHw4MjM5PT1yYXx8ODI4Nz09cmF8fDEyMjg4PT1yYXx8NjUyNzk9PXJhKX1mdW5jdGlvbiBoKHJhLFQpe2Zvcih2YXIgJGE9LTEsb2I9cmEubGVuZ3RoLFFhPS0xLGZjPVtdOysrJGE8b2I7KXJhWyRhXT09PVQmJihyYVskYV09RWEsZmNbKytRYV09JGEpO3JldHVybiBmY31mdW5jdGlvbiB1KHJhKXtmb3IodmFyIFQ9LTEsJGE9cmEubGVuZ3RoOysrVDwkYSYmbChyYS5jaGFyQ29kZUF0KFQpKTspO3JldHVybiBUfWZ1bmN0aW9uIHcocmEpe2Zvcih2YXIgVD1yYS5sZW5ndGg7VC0tJiZsKHJhLmNoYXJDb2RlQXQoVCkpOyk7cmV0dXJuIFR9ZnVuY3Rpb24geihyYSl7cmV0dXJuIFdjW3JhXX0KZnVuY3Rpb24gQShyYSl7ZnVuY3Rpb24gVChuKXtpZihzKG4pJiYhKGNiKG4pfHxuIGluc3RhbmNlb2YgUWEpKXtpZihuIGluc3RhbmNlb2Ygb2IpcmV0dXJuIG47aWYoSGIuY2FsbChuLCJfX2NoYWluX18iKSYmSGIuY2FsbChuLCJfX3dyYXBwZWRfXyIpKXJldHVybiBiZShuKX1yZXR1cm4gbmV3IG9iKG4pfWZ1bmN0aW9uICRhKCl7fWZ1bmN0aW9uIG9iKG4sdix4KXt0aGlzLl9fd3JhcHBlZF9fPW47dGhpcy5fX2FjdGlvbnNfXz14fHxbXTt0aGlzLl9fY2hhaW5fXz0hIXZ9ZnVuY3Rpb24gUWEobil7dGhpcy5fX3dyYXBwZWRfXz1uO3RoaXMuX19hY3Rpb25zX189W107dGhpcy5fX2Rpcl9fPTE7dGhpcy5fX2ZpbHRlcmVkX189ITE7dGhpcy5fX2l0ZXJhdGVlc19fPVtdO3RoaXMuX190YWtlQ291bnRfXz13ZTt0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBmYygpe3RoaXMuX19kYXRhX189e319ZnVuY3Rpb24gS2Mobil7dmFyIHY9bj9uLmxlbmd0aDowO2Zvcih0aGlzLmRhdGE9CntoYXNoOnhlKG51bGwpLHNldDpuZXcgeWV9O3YtLTspdGhpcy5wdXNoKG5bdl0pfWZ1bmN0aW9uIHVjKG4sdil7dmFyIHg9bi5kYXRhO3JldHVybigic3RyaW5nIj09dHlwZW9mIHZ8fERhKHYpP3guc2V0Lmhhcyh2KTp4Lmhhc2hbdl0pPzA6LTF9ZnVuY3Rpb24gTGIobix2KXt2YXIgeD0tMSxHPW4ubGVuZ3RoO2Zvcih2fHwodj11YihHKSk7Kyt4PEc7KXZbeF09blt4XTtyZXR1cm4gdn1mdW5jdGlvbiBWYihuLHYpe2Zvcih2YXIgeD0tMSxHPW4ubGVuZ3RoOysreDxHJiYhMSE9PXYoblt4XSx4LG4pOyk7cmV0dXJuIG59ZnVuY3Rpb24gWGMobix2KXtmb3IodmFyIHg9LTEsRz1uLmxlbmd0aDsrK3g8RzspaWYoIXYoblt4XSx4LG4pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEFkKG4sdil7Zm9yKHZhciB4PS0xLEc9bi5sZW5ndGgsTz0tMSxVPVtdOysreDxHOyl7dmFyIGFhPW5beF07dihhYSx4LG4pJiYoVVsrK09dPWFhKX1yZXR1cm4gVX1mdW5jdGlvbiBDYyhuLHYpe2Zvcih2YXIgeD0KLTEsRz1uLmxlbmd0aCxPPXViKEcpOysreDxHOylPW3hdPXYoblt4XSx4LG4pO3JldHVybiBPfWZ1bmN0aW9uIFJjKG4sdil7Zm9yKHZhciB4PS0xLEc9di5sZW5ndGgsTz1uLmxlbmd0aDsrK3g8RzspbltPK3hdPXZbeF07cmV0dXJuIG59ZnVuY3Rpb24gQmQobix2LHgsRyl7dmFyIE89LTEsVT1uLmxlbmd0aDtmb3IoRyYmVSYmKHg9blsrK09dKTsrK088VTspeD12KHgsbltPXSxPLG4pO3JldHVybiB4fWZ1bmN0aW9uIG1lKG4sdil7Zm9yKHZhciB4PS0xLEc9bi5sZW5ndGg7Kyt4PEc7KWlmKHYoblt4XSx4LG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE1kKG4sdix4LEcpe3JldHVybiBuIT09SCYmSGIuY2FsbChHLHgpP246dn1mdW5jdGlvbiBOZChuLHYseCl7Zm9yKHZhciBHPS0xLE89VGIodiksVT1PLmxlbmd0aDsrK0c8VTspe3ZhciBhYT1PW0ddLGNhPW5bYWFdLGxhPXgoY2EsdlthYV0sYWEsbix2KTsobGE9PT1sYT9sYT09PWNhOmNhIT09Y2EpJiYoY2EhPT1IfHxhYSBpbgpuKXx8KG5bYWFdPWxhKX1yZXR1cm4gbn1mdW5jdGlvbiBVYyhuLHYpe3JldHVybiBudWxsPT12P246WWModixUYih2KSxuKX1mdW5jdGlvbiBEYyhuLHYpe2Zvcih2YXIgeD0tMSxHPW51bGw9PW4sTz0hRyYmRmIobiksVT1PP24ubGVuZ3RoOjAsYWE9di5sZW5ndGgsY2E9dWIoYWEpOysreDxhYTspe3ZhciBsYT12W3hdO2NhW3hdPU8/ZGMobGEsVSk/bltsYV06SDpHP0g6bltsYV19cmV0dXJuIGNhfWZ1bmN0aW9uIFljKG4sdix4KXt4fHwoeD17fSk7Zm9yKHZhciBHPS0xLE89di5sZW5ndGg7KytHPE87KXt2YXIgVT12W0ddO3hbVV09bltVXX1yZXR1cm4geH1mdW5jdGlvbiBzZChuLHYseCl7dmFyIEc9dHlwZW9mIG47cmV0dXJuImZ1bmN0aW9uIj09Rz92PT09SD9uOkMobix2LHgpOm51bGw9PW4/aWQ6Im9iamVjdCI9PUc/ZmQobik6dj09PUg/emUobik6cGUobix2KX1mdW5jdGlvbiBMYyhuLHYseCxHLE8sVSxhYSl7dmFyIGNhO3gmJihjYT1PP3gobixHLE8pOngobikpO2lmKGNhIT09CkgpcmV0dXJuIGNhO2lmKCFEYShuKSlyZXR1cm4gbjtpZihHPWNiKG4pKXtpZihjYT1CYihuKSwhdilyZXR1cm4gTGIobixjYSl9ZWxzZXt2YXIgbGE9Z2MuY2FsbChuKSxtYT1sYT09Z2E7aWYobGE9PXFhfHxsYT09V2F8fG1hJiYhTyl7aWYoY2E9RmQobWE/e306biksIXYpcmV0dXJuIFVjKGNhLG4pfWVsc2UgcmV0dXJuIHBiW2xhXT8kZChuLGxhLHYpOk8/bjp7fX1VfHwoVT1bXSk7YWF8fChhYT1bXSk7Zm9yKE89VS5sZW5ndGg7Ty0tOylpZihVW09dPT1uKXJldHVybiBhYVtPXTtVLnB1c2gobik7YWEucHVzaChjYSk7KEc/VmI6WGIpKG4sZnVuY3Rpb24odWEsQmEpe2NhW0JhXT1MYyh1YSx2LHgsQmEsbixVLGFhKX0pO3JldHVybiBjYX1mdW5jdGlvbiBPZChuLHYseCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IG5jKEZhKTtyZXR1cm4gQWUoZnVuY3Rpb24oKXtuLmFwcGx5KEgseCl9LHYpfWZ1bmN0aW9uIHJjKG4sdil7dmFyIHg9bj9uLmxlbmd0aDowLEc9W107CmlmKCF4KXJldHVybiBHO3ZhciBPPS0xLFU9eWIoKSxhYT1VPT09cSxjYT1hYSYmdi5sZW5ndGg+PW9hP3hlJiZ5ZT9uZXcgS2Modik6bnVsbDpudWxsLGxhPXYubGVuZ3RoO2NhJiYoVT11YyxhYT0hMSx2PWNhKTthOmZvcig7KytPPHg7KWlmKGNhPW5bT10sYWEmJmNhPT09Y2Epe2Zvcih2YXIgbWE9bGE7bWEtLTspaWYodlttYV09PT1jYSljb250aW51ZSBhO0cucHVzaChjYSl9ZWxzZSAwPlUodixjYSwwKSYmRy5wdXNoKGNhKTtyZXR1cm4gR31mdW5jdGlvbiBSZShuLHYpe3ZhciB4PSEwO3NjKG4sZnVuY3Rpb24oRyxPLFUpe3JldHVybiB4PSEhdihHLE8sVSl9KTtyZXR1cm4geH1mdW5jdGlvbiBTZShuLHYseCxHKXt2YXIgTz1HLFU9TztzYyhuLGZ1bmN0aW9uKGFhLGNhLGxhKXtjYT0rdihhYSxjYSxsYSk7aWYoeChjYSxPKXx8Y2E9PT1HJiZjYT09PVUpTz1jYSxVPWFhfSk7cmV0dXJuIFV9ZnVuY3Rpb24gbmUobix2KXt2YXIgeD1bXTtzYyhuLGZ1bmN0aW9uKEcsTyxVKXt2KEcsCk8sVSkmJngucHVzaChHKX0pO3JldHVybiB4fWZ1bmN0aW9uIFBkKG4sdix4LEcpe3ZhciBPO3gobixmdW5jdGlvbihVLGFhLGNhKXtpZih2KFUsYWEsY2EpKXJldHVybiBPPUc/YWE6VSwhMX0pO3JldHVybiBPfWZ1bmN0aW9uIE5iKG4sdix4LEcpe0d8fChHPVtdKTtmb3IodmFyIE89LTEsVT1uLmxlbmd0aDsrK088VTspe3ZhciBhYT1uW09dO3MoYWEpJiZGYihhYSkmJih4fHxjYihhYSl8fHZhKGFhKSk/dj9OYihhYSx2LHgsRyk6UmMoRyxhYSk6eHx8KEdbRy5sZW5ndGhdPWFhKX1yZXR1cm4gR31mdW5jdGlvbiBYYihuLHYpe3JldHVybiBCZShuLHYsVGIpfWZ1bmN0aW9uIHRkKG4sdil7cmV0dXJuIGVmKG4sdixUYil9ZnVuY3Rpb24gZGQobix2KXtmb3IodmFyIHg9LTEsRz12Lmxlbmd0aCxPPS0xLFU9W107Kyt4PEc7KXt2YXIgYWE9dlt4XTtJYShuW2FhXSkmJihVWysrT109YWEpfXJldHVybiBVfWZ1bmN0aW9uIEVjKG4sdix4KXtpZihudWxsIT1uKXt4IT09SCYmeCBpbiBRYihuKSYmCih2PVt4XSk7eD0wO2Zvcih2YXIgRz12Lmxlbmd0aDtudWxsIT1uJiZ4PEc7KW49blt2W3grK11dO3JldHVybiB4JiZ4PT1HP246SH19ZnVuY3Rpb24gZWQobix2LHgsRyxPLFUpe2lmKG49PT12KXJldHVybiEwO2lmKG51bGw9PW58fG51bGw9PXZ8fCFEYShuKSYmIXModikpcmV0dXJuIG4hPT1uJiZ2IT09djthOnt2YXIgYWE9ZWQsY2E9Y2IobiksbGE9Y2IodiksbWE9VWEsdWE9VWE7Y2F8fChtYT1nYy5jYWxsKG4pLG1hPT1XYT9tYT1xYTptYSE9cWEmJihjYT1aYShuKSkpO2xhfHwodWE9Z2MuY2FsbCh2KSx1YT09V2E/dWE9cWE6dWEhPXFhJiZaYSh2KSk7dmFyIEJhPW1hPT1xYSxsYT11YT09cWEsdWE9bWE9PXVhO2lmKCF1YXx8Y2F8fEJhKXtpZighRyYmKG1hPUJhJiZIYi5jYWxsKG4sIl9fd3JhcHBlZF9fIiksbGE9bGEmJkhiLmNhbGwodiwiX193cmFwcGVkX18iKSxtYXx8bGEpKXtuPWFhKG1hP24udmFsdWUoKTpuLGxhP3YudmFsdWUoKTp2LHgsRyxPLFUpO2JyZWFrIGF9aWYodWEpe098fAooTz1bXSk7VXx8KFU9W10pO2ZvcihtYT1PLmxlbmd0aDttYS0tOylpZihPW21hXT09bil7bj1VW21hXT09djticmVhayBhfU8ucHVzaChuKTtVLnB1c2godik7bj0oY2E/bWI6aWIpKG4sdixhYSx4LEcsTyxVKTtPLnBvcCgpO1UucG9wKCl9ZWxzZSBuPSExfWVsc2Ugbj1zYihuLHYsbWEpfXJldHVybiBufWZ1bmN0aW9uIG9lKG4sdix4KXt2YXIgRz12Lmxlbmd0aCxPPUcsVT0heDtpZihudWxsPT1uKXJldHVybiFPO2ZvcihuPVFiKG4pO0ctLTspe3ZhciBhYT12W0ddO2lmKFUmJmFhWzJdP2FhWzFdIT09blthYVswXV06IShhYVswXWluIG4pKXJldHVybiExfWZvcig7KytHPE87KXt2YXIgYWE9dltHXSxjYT1hYVswXSxsYT1uW2NhXSxtYT1hYVsxXTtpZihVJiZhYVsyXSl7aWYobGE9PT1IJiYhKGNhIGluIG4pKXJldHVybiExfWVsc2UgaWYoYWE9eD94KGxhLG1hLGNhKTpILGFhPT09SD8hZWQobWEsbGEseCwhMCk6IWFhKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIFFkKG4sdil7dmFyIHg9Ci0xLEc9RmIobik/dWIobi5sZW5ndGgpOltdO3NjKG4sZnVuY3Rpb24oTyxVLGFhKXtHWysreF09dihPLFUsYWEpfSk7cmV0dXJuIEd9ZnVuY3Rpb24gZmQobil7dmFyIHY9Z2Iobik7aWYoMT09di5sZW5ndGgmJnZbMF1bMl0pe3ZhciB4PXZbMF1bMF0sRz12WzBdWzFdO3JldHVybiBmdW5jdGlvbihPKXtyZXR1cm4gbnVsbD09Tz8hMTpPW3hdPT09RyYmKEchPT1IfHx4IGluIFFiKE8pKX19cmV0dXJuIGZ1bmN0aW9uKE8pe3JldHVybiBvZShPLHYpfX1mdW5jdGlvbiBwZShuLHYpe3ZhciB4PWNiKG4pLEc9SGMobikmJnY9PT12JiYhRGEodiksTz1uKyIiO249eWMobik7cmV0dXJuIGZ1bmN0aW9uKFUpe2lmKG51bGw9PVUpcmV0dXJuITE7dmFyIGFhPU87VT1RYihVKTtpZighKCF4JiZHfHxhYSBpbiBVKSl7VT0xPT1uLmxlbmd0aD9VOkVjKFUsUGIobiwwLC0xKSk7aWYobnVsbD09VSlyZXR1cm4hMTthYT0kYyhuKTtVPVFiKFUpfXJldHVybiBVW2FhXT09PXY/diE9PUh8fGFhIGluIFU6CmVkKHYsVVthYV0sSCwhMCl9fWZ1bmN0aW9uIHFlKG4sdix4LEcsTyl7aWYoIURhKG4pKXJldHVybiBuO3ZhciBVPUZiKHYpJiYoY2Iodil8fFphKHYpKSxhYT1VP0g6VGIodik7VmIoYWF8fHYsZnVuY3Rpb24oY2EsbGEpe2FhJiYobGE9Y2EsY2E9dltsYV0pO2lmKHMoY2EpKXtHfHwoRz1bXSk7T3x8KE89W10pO2E6e2Zvcih2YXIgbWE9bGEsdWE9cWUsQmE9RyxHYT1PLGViPUJhLmxlbmd0aCxsYj12W21hXTtlYi0tOylpZihCYVtlYl09PWxiKXtuW21hXT1HYVtlYl07YnJlYWsgYX12YXIgZWI9blttYV0sRGI9eD94KGViLGxiLG1hLG4sdik6SCxhYz1EYj09PUg7YWMmJihEYj1sYixGYihsYikmJihjYihsYil8fFphKGxiKSk/RGI9Y2IoZWIpP2ViOkZiKGViKT9MYihlYik6W106TmEobGIpfHx2YShsYik/RGI9dmEoZWIpP1pjKGViKTpOYShlYik/ZWI6e306YWM9ITEpO0JhLnB1c2gobGIpO0dhLnB1c2goRGIpO2lmKGFjKW5bbWFdPXVhKERiLGxiLHgsQmEsR2EpO2Vsc2UgaWYoRGI9PT0KRGI/RGIhPT1lYjplYj09PWViKW5bbWFdPURifX1lbHNlIG1hPW5bbGFdLHVhPXg/eChtYSxjYSxsYSxuLHYpOkgsKEJhPXVhPT09SCkmJih1YT1jYSksdWE9PT1IJiYoIVV8fGxhIGluIG4pfHwhQmEmJih1YT09PXVhP3VhPT09bWE6bWEhPT1tYSl8fChuW2xhXT11YSl9KTtyZXR1cm4gbn1mdW5jdGlvbiBSZChuKXtyZXR1cm4gZnVuY3Rpb24odil7cmV0dXJuIG51bGw9PXY/SDp2W25dfX1mdW5jdGlvbiBUZShuKXt2YXIgdj1uKyIiO249eWMobik7cmV0dXJuIGZ1bmN0aW9uKHgpe3JldHVybiBFYyh4LG4sdil9fWZ1bmN0aW9uIHJlKG4sdil7Zm9yKHZhciB4PW4/di5sZW5ndGg6MDt4LS07KXt2YXIgRz12W3hdO2lmKEchPU8mJmRjKEcpKXt2YXIgTz1HO2ZmLmNhbGwobixHLDEpfX1yZXR1cm4gbn1mdW5jdGlvbiBzZShuLHYseCxHLE8pe08obixmdW5jdGlvbihVLGFhLGNhKXt4PUc/KEc9ITEsVSk6dih4LFUsYWEsY2EpfSk7cmV0dXJuIHh9ZnVuY3Rpb24gUGIobix2LHgpe3ZhciBHPQotMSxPPW4ubGVuZ3RoO3Y9bnVsbD09dj8wOit2fHwwOzA+diYmKHY9LXY+Tz8wOk8rdik7eD14PT09SHx8eD5PP086K3h8fDA7MD54JiYoeCs9Tyk7Tz12Png/MDp4LXY+Pj4wO3Y+Pj49MDtmb3IoeD11YihPKTsrK0c8TzspeFtHXT1uW0crdl07cmV0dXJuIHh9ZnVuY3Rpb24gdGUobix2KXt2YXIgeDtzYyhuLGZ1bmN0aW9uKEcsTyxVKXt4PXYoRyxPLFUpO3JldHVybiF4fSk7cmV0dXJuISF4fWZ1bmN0aW9uIHVkKG4sdil7dmFyIHg9bi5sZW5ndGg7Zm9yKG4uc29ydCh2KTt4LS07KW5beF09blt4XS52YWx1ZTtyZXR1cm4gbn1mdW5jdGlvbiB1ZShuLHYseCl7dmFyIEc9T2EoKSxPPS0xO3Y9Q2ModixmdW5jdGlvbihVKXtyZXR1cm4gRyhVKX0pO249UWQobixmdW5jdGlvbihVKXtyZXR1cm57Y3JpdGVyaWE6Q2ModixmdW5jdGlvbihhYSl7cmV0dXJuIGFhKFUpfSksaW5kZXg6KytPLHZhbHVlOlV9fSk7cmV0dXJuIHVkKG4sZnVuY3Rpb24oVSxhYSl7dmFyIGNhO2E6e2Zvcih2YXIgbGE9Ci0xLG1hPVUuY3JpdGVyaWEsdWE9YWEuY3JpdGVyaWEsQmE9bWEubGVuZ3RoLEdhPXgubGVuZ3RoOysrbGE8QmE7KWlmKGNhPWEobWFbbGFdLHVhW2xhXSkpe2lmKGxhPj1HYSlicmVhayBhO2xhPXhbbGFdO2NhKj0iYXNjIj09PWxhfHwhMD09PWxhPzE6LTE7YnJlYWsgYX1jYT1VLmluZGV4LWFhLmluZGV4fXJldHVybiBjYX0pfWZ1bmN0aW9uIGdkKG4sdil7dmFyIHg9MDtzYyhuLGZ1bmN0aW9uKEcsTyxVKXt4Kz0rdihHLE8sVSl8fDB9KTtyZXR1cm4geH1mdW5jdGlvbiB2ZChuLHYpe3ZhciB4PS0xLEc9eWIoKSxPPW4ubGVuZ3RoLFU9Rz09PXEsYWE9VSYmTz49b2EsY2E9YWE/eGUmJnllP25ldyBLYyh2b2lkIDApOm51bGw6bnVsbCxsYT1bXTtjYT8oRz11YyxVPSExKTooYWE9ITEsY2E9dj9bXTpsYSk7YTpmb3IoOysreDxPOyl7dmFyIG1hPW5beF0sdWE9dj92KG1hLHgsbik6bWE7aWYoVSYmbWE9PT1tYSl7Zm9yKHZhciBCYT1jYS5sZW5ndGg7QmEtLTspaWYoY2FbQmFdPT09dWEpY29udGludWUgYTsKdiYmY2EucHVzaCh1YSk7bGEucHVzaChtYSl9ZWxzZSAwPkcoY2EsdWEsMCkmJigodnx8YWEpJiZjYS5wdXNoKHVhKSxsYS5wdXNoKG1hKSl9cmV0dXJuIGxhfWZ1bmN0aW9uIGhkKG4sdil7Zm9yKHZhciB4PS0xLEc9di5sZW5ndGgsTz11YihHKTsrK3g8RzspT1t4XT1uW3ZbeF1dO3JldHVybiBPfWZ1bmN0aW9uIHdkKG4sdix4LEcpe2Zvcih2YXIgTz1uLmxlbmd0aCxVPUc/TzotMTsoRz9VLS06KytVPE8pJiZ2KG5bVV0sVSxuKTspO3JldHVybiB4P1BiKG4sRz8wOlUsRz9VKzE6Tyk6UGIobixHP1UrMTowLEc/TzpVKX1mdW5jdGlvbiB2ZShuLHYpe3ZhciB4PW47eCBpbnN0YW5jZW9mIFFhJiYoeD14LnZhbHVlKCkpO2Zvcih2YXIgRz0tMSxPPXYubGVuZ3RoOysrRzxPOyl2YXIgVT12W0ddLHg9VS5mdW5jLmFwcGx5KFUudGhpc0FyZyxSYyhbeF0sVS5hcmdzKSk7cmV0dXJuIHh9ZnVuY3Rpb24gcihuLHYseCl7dmFyIEc9MCxPPW4/bi5sZW5ndGg6RztpZigibnVtYmVyIj09dHlwZW9mIHYmJgp2PT09diYmTzw9SGYpe2Zvcig7RzxPOyl7dmFyIFU9RytPPj4+MSxhYT1uW1VdOyh4P2FhPD12OmFhPHYpJiZudWxsIT09YWE/Rz1VKzE6Tz1VfXJldHVybiBPfXJldHVybiB5KG4sdixpZCx4KX1mdW5jdGlvbiB5KG4sdix4LEcpe3Y9eCh2KTtmb3IodmFyIE89MCxVPW4/bi5sZW5ndGg6MCxhYT12IT09dixjYT1udWxsPT09dixsYT12PT09SDtPPFU7KXt2YXIgbWE9TWMoKE8rVSkvMiksdWE9eChuW21hXSksQmE9dWEhPT1ILEdhPXVhPT09dWE7KGFhP0dhfHxHOmNhP0dhJiZCYSYmKEd8fG51bGwhPXVhKTpsYT9HYSYmKEd8fEJhKTpudWxsPT11YT8wOkc/dWE8PXY6dWE8dik/Tz1tYSsxOlU9bWF9cmV0dXJuIGJjKFUsSWYpfWZ1bmN0aW9uIEMobix2LHgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXJldHVybiBpZDtpZih2PT09SClyZXR1cm4gbjtzd2l0Y2goeCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihHKXtyZXR1cm4gbi5jYWxsKHYsRyl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oRywKTyxVKXtyZXR1cm4gbi5jYWxsKHYsRyxPLFUpfTtjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKEcsTyxVLGFhKXtyZXR1cm4gbi5jYWxsKHYsRyxPLFUsYWEpfTtjYXNlIDU6cmV0dXJuIGZ1bmN0aW9uKEcsTyxVLGFhLGNhKXtyZXR1cm4gbi5jYWxsKHYsRyxPLFUsYWEsY2EpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseSh2LGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEsobil7dmFyIHY9bmV3IEpmKG4uYnl0ZUxlbmd0aCk7KG5ldyBnZih2KSkuc2V0KG5ldyBnZihuKSk7cmV0dXJuIHZ9ZnVuY3Rpb24gTihuLHYseCl7Zm9yKHZhciBHPXgubGVuZ3RoLE89LTEsVT1PYihuLmxlbmd0aC1HLDApLGFhPS0xLGNhPXYubGVuZ3RoLGxhPXViKGNhK1UpOysrYWE8Y2E7KWxhW2FhXT12W2FhXTtmb3IoOysrTzxHOylsYVt4W09dXT1uW09dO2Zvcig7VS0tOylsYVthYSsrXT1uW08rK107cmV0dXJuIGxhfWZ1bmN0aW9uIFEobix2LHgpe2Zvcih2YXIgRz0tMSxPPXgubGVuZ3RoLFU9LTEsCmFhPU9iKG4ubGVuZ3RoLU8sMCksY2E9LTEsbGE9di5sZW5ndGgsbWE9dWIoYWErbGEpOysrVTxhYTspbWFbVV09bltVXTtmb3IoYWE9VTsrK2NhPGxhOyltYVthYStjYV09dltjYV07Zm9yKDsrK0c8TzspbWFbYWEreFtHXV09bltVKytdO3JldHVybiBtYX1mdW5jdGlvbiBTKG4sdil7cmV0dXJuIGZ1bmN0aW9uKHgsRyxPKXt2YXIgVT12P3YoKTp7fTtHPU9hKEcsTywzKTtpZihjYih4KSl7Tz0tMTtmb3IodmFyIGFhPXgubGVuZ3RoOysrTzxhYTspe3ZhciBjYT14W09dO24oVSxjYSxHKGNhLE8seCkseCl9fWVsc2Ugc2MoeCxmdW5jdGlvbihsYSxtYSx1YSl7bihVLGxhLEcobGEsbWEsdWEpLHVhKX0pO3JldHVybiBVfX1mdW5jdGlvbiBiYShuKXtyZXR1cm4ga2EoZnVuY3Rpb24odix4KXt2YXIgRz0tMSxPPW51bGw9PXY/MDp4Lmxlbmd0aCxVPTI8Tz94W08tMl06SCxhYT0yPE8/eFsyXTpILGNhPTE8Tz94W08tMV06SDsiZnVuY3Rpb24iPT10eXBlb2YgVT8oVT1DKFUsY2EsNSksTy09CjIpOihVPSJmdW5jdGlvbiI9PXR5cGVvZiBjYT9jYTpILE8tPVU/MTowKTthYSYmYmIoeFswXSx4WzFdLGFhKSYmKFU9Mz5PP0g6VSxPPTEpO2Zvcig7KytHPE87KShhYT14W0ddKSYmbih2LGFhLFUpO3JldHVybiB2fSl9ZnVuY3Rpb24gJChuLHYpe3JldHVybiBmdW5jdGlvbih4LEcpe3ZhciBPPXg/U2QoeCk6MDtpZigha2MoTykpcmV0dXJuIG4oeCxHKTtmb3IodmFyIFU9dj9POi0xLGFhPVFiKHgpOyh2P1UtLTorK1U8TykmJiExIT09RyhhYVtVXSxVLGFhKTspO3JldHVybiB4fX1mdW5jdGlvbiBqYShuKXtyZXR1cm4gZnVuY3Rpb24odix4LEcpe3ZhciBPPVFiKHYpO0c9Ryh2KTtmb3IodmFyIFU9Ry5sZW5ndGgsYWE9bj9VOi0xO24/YWEtLTorK2FhPFU7KXt2YXIgY2E9R1thYV07aWYoITE9PT14KE9bY2FdLGNhLE8pKWJyZWFrfXJldHVybiB2fX1mdW5jdGlvbiBzYShuLHYpe2Z1bmN0aW9uIHgoKXtyZXR1cm4odGhpcyYmdGhpcyE9PWljJiZ0aGlzIGluc3RhbmNlb2YgeD9HOgpuKS5hcHBseSh2LGFyZ3VtZW50cyl9dmFyIEc9aGEobik7cmV0dXJuIHh9ZnVuY3Rpb24gemEobil7cmV0dXJuIGZ1bmN0aW9uKHYpe3ZhciB4PS0xO3Y9aGYoamYodikpO2Zvcih2YXIgRz12Lmxlbmd0aCxPPSIiOysreDxHOylPPW4oTyx2W3hdLHgpO3JldHVybiBPfX1mdW5jdGlvbiBoYShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj1hcmd1bWVudHM7c3dpdGNoKHYubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBuO2Nhc2UgMTpyZXR1cm4gbmV3IG4odlswXSk7Y2FzZSAyOnJldHVybiBuZXcgbih2WzBdLHZbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IG4odlswXSx2WzFdLHZbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IG4odlswXSx2WzFdLHZbMl0sdlszXSk7Y2FzZSA1OnJldHVybiBuZXcgbih2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0pO2Nhc2UgNjpyZXR1cm4gbmV3IG4odlswXSx2WzFdLHZbMl0sdlszXSx2WzRdLHZbNV0pO2Nhc2UgNzpyZXR1cm4gbmV3IG4odlswXSx2WzFdLHZbMl0sCnZbM10sdls0XSx2WzVdLHZbNl0pfXZhciB4PVRkKG4ucHJvdG90eXBlKSx2PW4uYXBwbHkoeCx2KTtyZXR1cm4gRGEodik/djp4fX1mdW5jdGlvbiBNYShuKXtmdW5jdGlvbiB2KHgsRyxPKXtPJiZiYih4LEcsTykmJihHPUgpO3g9TGEoeCxuLEgsSCxILEgsSCxHKTt4LnBsYWNlaG9sZGVyPXYucGxhY2Vob2xkZXI7cmV0dXJuIHh9cmV0dXJuIHZ9ZnVuY3Rpb24gUmEobix2KXtyZXR1cm4ga2EoZnVuY3Rpb24oeCl7dmFyIEc9eFswXTtpZihudWxsPT1HKXJldHVybiBHO3gucHVzaCh2KTtyZXR1cm4gbi5hcHBseShILHgpfSl9ZnVuY3Rpb24gR2Iobix2KXtyZXR1cm4gZnVuY3Rpb24oeCxHLE8pe08mJmJiKHgsRyxPKSYmKEc9SCk7Rz1PYShHLE8sMyk7aWYoMT09Ry5sZW5ndGgpe089eD1jYih4KT94OklkKHgpO2Zvcih2YXIgVT1HLGFhPS0xLGNhPU8ubGVuZ3RoLGxhPXYsbWE9bGE7KythYTxjYTspe3ZhciB1YT1PW2FhXSxCYT0rVSh1YSk7bihCYSxsYSkmJihsYT1CYSxtYT11YSl9Tz0KbWE7aWYoIXgubGVuZ3RofHxPIT09dilyZXR1cm4gT31yZXR1cm4gU2UoeCxHLG4sdil9fWZ1bmN0aW9uIEpiKG4sdil7cmV0dXJuIGZ1bmN0aW9uKHgsRyxPKXtHPU9hKEcsTywzKTtyZXR1cm4gY2IoeCk/KEc9RSh4LEcsdiksLTE8Rz94W0ddOkgpOlBkKHgsRyxuKX19ZnVuY3Rpb24gUmIobil7cmV0dXJuIGZ1bmN0aW9uKHYseCxHKXtpZighdnx8IXYubGVuZ3RoKXJldHVybi0xO3g9T2EoeCxHLDMpO3JldHVybiBFKHYseCxuKX19ZnVuY3Rpb24gemIobil7cmV0dXJuIGZ1bmN0aW9uKHYseCxHKXt4PU9hKHgsRywzKTtyZXR1cm4gUGQodix4LG4sITApfX1mdW5jdGlvbiBqYyhuKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHYseD1hcmd1bWVudHMubGVuZ3RoLEc9bj94Oi0xLE89MCxVPXViKHgpO24/Ry0tOisrRzx4Oyl7dmFyIGFhPVVbTysrXT1hcmd1bWVudHNbR107aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGFhKXRocm93IG5ldyBuYyhGYSk7IXYmJm9iLnByb3RvdHlwZS50aHJ1JiYKIndyYXBwZXIiPT1LYihhYSkmJih2PW5ldyBvYihbXSwhMCkpfWZvcihHPXY/LTE6eDsrK0c8eDspe3ZhciBhYT1VW0ddLE89S2IoYWEpLGNhPSJ3cmFwcGVyIj09Tz9VZShhYSk6SDt2PWNhJiZ4YyhjYVswXSkmJmNhWzFdPT0oWXxEfFB8bmEpJiYhY2FbNF0ubGVuZ3RoJiYxPT1jYVs5XT92W0tiKGNhWzBdKV0uYXBwbHkodixjYVszXSk6MT09YWEubGVuZ3RoJiZ4YyhhYSk/dltPXSgpOnYudGhydShhYSl9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGxhPWFyZ3VtZW50cyxtYT1sYVswXTtpZih2JiYxPT1sYS5sZW5ndGgmJmNiKG1hKSYmbWEubGVuZ3RoPj1vYSlyZXR1cm4gdi5wbGFudChtYSkudmFsdWUoKTtmb3IodmFyIHVhPTAsbGE9eD9VW3VhXS5hcHBseSh0aGlzLGxhKTptYTsrK3VhPHg7KWxhPVVbdWFdLmNhbGwodGhpcyxsYSk7cmV0dXJuIGxhfX19ZnVuY3Rpb24gbGMobix2KXtyZXR1cm4gZnVuY3Rpb24oeCxHLE8pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBHJiZPPT09CkgmJmNiKHgpP24oeCxHKTp2KHgsQyhHLE8sMykpfX1mdW5jdGlvbiBIYShuKXtyZXR1cm4gZnVuY3Rpb24odix4LEcpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB4fHxHIT09SCl4PUMoeCxHLDMpO3JldHVybiBuKHYseCxOYyl9fWZ1bmN0aW9uIGFiKG4pe3JldHVybiBmdW5jdGlvbih2LHgsRyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHh8fEchPT1IKXg9Qyh4LEcsMyk7cmV0dXJuIG4odix4KX19ZnVuY3Rpb24gd2Mobil7cmV0dXJuIGZ1bmN0aW9uKHYseCxHKXt2YXIgTz17fTt4PU9hKHgsRywzKTtYYih2LGZ1bmN0aW9uKFUsYWEsY2Epe2NhPXgoVSxhYSxjYSk7YWE9bj9jYTphYTtVPW4/VTpjYTtPW2FhXT1VfSk7cmV0dXJuIE99fWZ1bmN0aW9uIGRiKG4pe3JldHVybiBmdW5jdGlvbih2LHgsRyl7dj1mKHYpO3JldHVybihuP3Y6IiIpK3FjKHYseCxHKSsobj8iIjp2KX19ZnVuY3Rpb24gcWIobil7dmFyIHY9a2EoZnVuY3Rpb24oeCxHKXt2YXIgTz1oKEcsdi5wbGFjZWhvbGRlcik7CnJldHVybiBMYSh4LG4sSCxHLE8pfSk7cmV0dXJuIHZ9ZnVuY3Rpb24gQ2Iobix2KXtyZXR1cm4gZnVuY3Rpb24oeCxHLE8sVSl7dmFyIGFhPTM+YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRyYmVT09PUgmJmNiKHgpP24oeCxHLE8sYWEpOnNlKHgsT2EoRyxVLDQpLE8sYWEsdil9fWZ1bmN0aW9uIFdiKG4sdix4LEcsTyxVLGFhLGNhLGxhLG1hKXtmdW5jdGlvbiB1YSgpe2Zvcih2YXIgSWI9YXJndW1lbnRzLmxlbmd0aCxVYj1JYix2Yj11YihJYik7VWItLTspdmJbVWJdPWFyZ3VtZW50c1tVYl07RyYmKHZiPU4odmIsRyxPKSk7VSYmKHZiPVEodmIsVSxhYSkpO2lmKGxifHxhYyl7dmFyIFViPXVhLnBsYWNlaG9sZGVyLE9jPWgodmIsVWIpLEliPUliLU9jLmxlbmd0aDtpZihJYjxtYSl7dmFyIFZjPWNhP0xiKGNhKTpILEliPU9iKG1hLUliLDApLENlPWxiP09jOkgsT2M9bGI/SDpPYyxWZT1sYj92YjpILHZiPWxiP0g6dmI7dnw9bGI/UDpWO3YmPX4obGI/ClY6UCk7RGJ8fCh2Jj1+KEJ8SSkpO3ZiPVtuLHYseCxWZSxDZSx2YixPYyxWYyxsYSxJYl07VmM9V2IuYXBwbHkoSCx2Yik7eGMobikmJmtmKFZjLHZiKTtWYy5wbGFjZWhvbGRlcj1VYjtyZXR1cm4gVmN9fVViPUdhP3g6dGhpcztWYz1lYj9VYltuXTpuO2lmKGNhKWZvcihJYj1jYSxDZT12Yi5sZW5ndGgsT2M9YmMoSWIubGVuZ3RoLENlKSxWZT1MYih2Yik7T2MtLTspe3ZhciBsZj1JYltPY107dmJbT2NdPWRjKGxmLENlKT9WZVtsZl06SH1CYSYmbGE8dmIubGVuZ3RoJiYodmIubGVuZ3RoPWxhKTt0aGlzJiZ0aGlzIT09aWMmJnRoaXMgaW5zdGFuY2VvZiB1YSYmKFZjPXhkfHxoYShuKSk7cmV0dXJuIFZjLmFwcGx5KFViLHZiKX12YXIgQmE9diZZLEdhPXYmQixlYj12JkksbGI9diZELERiPXYmTSxhYz12JkoseGQ9ZWI/SDpoYShuKTtyZXR1cm4gdWF9ZnVuY3Rpb24gcWMobix2LHgpe249bi5sZW5ndGg7dj0rdjtpZihuPj12fHwheWQodikpcmV0dXJuIiI7di09bjt4PW51bGw9PQp4PyIgIjp4KyIiO3JldHVybiBtZih4LERlKHYveC5sZW5ndGgpKS5zbGljZSgwLHYpfWZ1bmN0aW9uIFNiKG4sdix4LEcpe2Z1bmN0aW9uIE8oKXtmb3IodmFyIGNhPS0xLGxhPWFyZ3VtZW50cy5sZW5ndGgsbWE9LTEsdWE9Ry5sZW5ndGgsQmE9dWIodWErbGEpOysrbWE8dWE7KUJhW21hXT1HW21hXTtmb3IoO2xhLS07KUJhW21hKytdPWFyZ3VtZW50c1srK2NhXTtyZXR1cm4odGhpcyYmdGhpcyE9PWljJiZ0aGlzIGluc3RhbmNlb2YgTz9hYTpuKS5hcHBseShVP3g6dGhpcyxCYSl9dmFyIFU9diZCLGFhPWhhKG4pO3JldHVybiBPfWZ1bmN0aW9uIGpiKG4pe3ZhciB2PWpkW25dO3JldHVybiBmdW5jdGlvbih4LEcpe3JldHVybihHPUc9PT1IPzA6K0d8fDApPyhHPUtmKDEwLEcpLHYoeCpHKS9HKTp2KHgpfX1mdW5jdGlvbiBuYihuKXtyZXR1cm4gZnVuY3Rpb24odix4LEcsTyl7dmFyIFU9T2EoRyk7cmV0dXJuIG51bGw9PUcmJlU9PT1zZD9yKHYseCxuKTp5KHYseCxVKEcsTywxKSwKbil9fWZ1bmN0aW9uIExhKG4sdix4LEcsTyxVLGFhLGNhKXt2YXIgbGE9diZJO2lmKCFsYSYmImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IG5jKEZhKTt2YXIgbWE9Rz9HLmxlbmd0aDowO21hfHwodiY9fihQfFYpLEc9Tz1IKTttYS09Tz9PLmxlbmd0aDowO2lmKHYmVil7dmFyIHVhPUcsQmE9TztHPU89SH12YXIgR2E9bGE/SDpVZShuKTt4PVtuLHYseCxHLE8sdWEsQmEsVSxhYSxjYV07aWYoR2Epe0c9eFsxXTt2PUdhWzFdO2NhPUd8djtPPXY9PVkmJkc9PUR8fHY9PVkmJkc9PW5hJiZ4WzddLmxlbmd0aDw9R2FbOF18fHY9PShZfG5hKSYmRz09RDtpZihjYTxZfHxPKXt2JkImJih4WzJdPUdhWzJdLGNhfD1HJkI/MDpNKTtpZihHPUdhWzNdKU89eFszXSx4WzNdPU8/TihPLEcsR2FbNF0pOkxiKEcpLHhbNF09Tz9oKHhbM10sRWEpOkxiKEdhWzRdKTtpZihHPUdhWzVdKU89eFs1XSx4WzVdPU8/UShPLEcsR2FbNl0pOkxiKEcpLHhbNl09Tz9oKHhbNV0sRWEpOkxiKEdhWzZdKTsKKEc9R2FbN10pJiYoeFs3XT1MYihHKSk7diZZJiYoeFs4XT1udWxsPT14WzhdP0dhWzhdOmJjKHhbOF0sR2FbOF0pKTtudWxsPT14WzldJiYoeFs5XT1HYVs5XSk7eFswXT1HYVswXTt4WzFdPWNhfXY9eFsxXTtjYT14WzldfXhbOV09bnVsbD09Y2E/bGE/MDpuLmxlbmd0aDpPYihjYS1tYSwwKXx8MDtuPXY9PUI/c2EoeFswXSx4WzJdKTp2IT1QJiZ2IT0oQnxQKXx8eFs0XS5sZW5ndGg/V2IuYXBwbHkoSCx4KTpTYi5hcHBseShILHgpO3JldHVybihHYT9uZjprZikobix4KX1mdW5jdGlvbiBtYihuLHYseCxHLE8sVSxhYSl7dmFyIGNhPS0xLGxhPW4ubGVuZ3RoLG1hPXYubGVuZ3RoO2lmKGxhIT1tYSYmIShPJiZtYT5sYSkpcmV0dXJuITE7Zm9yKDsrK2NhPGxhOyl7dmFyIHVhPW5bY2FdLG1hPXZbY2FdLEJhPUc/RyhPP21hOnVhLE8/dWE6bWEsY2EpOkg7aWYoQmEhPT1IKXtpZihCYSljb250aW51ZTtyZXR1cm4hMX1pZihPKXtpZighbWUodixmdW5jdGlvbihHYSl7cmV0dXJuIHVhPT09CkdhfHx4KHVhLEdhLEcsTyxVLGFhKX0pKXJldHVybiExfWVsc2UgaWYodWEhPT1tYSYmIXgodWEsbWEsRyxPLFUsYWEpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHNiKG4sdix4KXtzd2l0Y2goeCl7Y2FzZSB3YjpjYXNlIEFiOnJldHVybituPT0rdjtjYXNlIE1iOnJldHVybiBuLm5hbWU9PXYubmFtZSYmbi5tZXNzYWdlPT12Lm1lc3NhZ2U7Y2FzZSB0YTpyZXR1cm4gbiE9K24/diE9K3Y6bj09K3Y7Y2FzZSB3YTpjYXNlIEphOnJldHVybiBuPT12KyIifXJldHVybiExfWZ1bmN0aW9uIGliKG4sdix4LEcsTyxVLGFhKXt2YXIgY2E9VGIobiksbGE9Y2EubGVuZ3RoLG1hPVRiKHYpLmxlbmd0aDtpZihsYSE9bWEmJiFPKXJldHVybiExO2ZvcihtYT1sYTttYS0tOyl7dmFyIHVhPWNhW21hXTtpZighKE8/dWEgaW4gdjpIYi5jYWxsKHYsdWEpKSlyZXR1cm4hMX1mb3IodmFyIEJhPU87KyttYTxsYTspe3ZhciB1YT1jYVttYV0sR2E9blt1YV0sZWI9dlt1YV0sbGI9Rz9HKE8/ZWI6R2EsCk8/R2E6ZWIsdWEpOkg7aWYobGI9PT1IPyF4KEdhLGViLEcsTyxVLGFhKTohbGIpcmV0dXJuITE7QmF8fChCYT0iY29uc3RydWN0b3IiPT11YSl9cmV0dXJuIEJhfHwoeD1uLmNvbnN0cnVjdG9yLEc9di5jb25zdHJ1Y3RvciwhKHghPUcmJiJjb25zdHJ1Y3RvciJpbiBuJiYiY29uc3RydWN0b3IiaW4gdil8fCJmdW5jdGlvbiI9PXR5cGVvZiB4JiZ4IGluc3RhbmNlb2YgeCYmImZ1bmN0aW9uIj09dHlwZW9mIEcmJkcgaW5zdGFuY2VvZiBHKT8hMDohMX1mdW5jdGlvbiBPYShuLHYseCl7dmFyIEc9VC5jYWxsYmFja3x8RWUsRz1HPT09RWU/c2Q6RztyZXR1cm4geD9HKG4sdix4KTpHfWZ1bmN0aW9uIEtiKG4pe2Zvcih2YXIgdj1uLm5hbWUrIiIseD1GZVt2XSxHPXg/eC5sZW5ndGg6MDtHLS07KXt2YXIgTz14W0ddLFU9Ty5mdW5jO2lmKG51bGw9PVV8fFU9PW4pcmV0dXJuIE8ubmFtZX1yZXR1cm4gdn1mdW5jdGlvbiB5YihuLHYseCl7dmFyIEc9VC5pbmRleE9mfHxTYyxHPUc9PT1TYz8KcTpHO3JldHVybiBuP0cobix2LHgpOkd9ZnVuY3Rpb24gZ2Iobil7bj1vZihuKTtmb3IodmFyIHY9bi5sZW5ndGg7di0tOyluW3ZdWzJdPW5bdl1bMV09PT1uW3ZdWzFdJiYhRGEoblt2XVsxXSk7cmV0dXJuIG59ZnVuY3Rpb24gaGIobix2KXt2YXIgeD1udWxsPT1uP0g6blt2XTtyZXR1cm4gVGEoeCk/eDpIfWZ1bmN0aW9uIEJiKG4pe3ZhciB2PW4ubGVuZ3RoLHg9bmV3IG4uY29uc3RydWN0b3Iodik7diYmInN0cmluZyI9PXR5cGVvZiBuWzBdJiZIYi5jYWxsKG4sImluZGV4IikmJih4LmluZGV4PW4uaW5kZXgseC5pbnB1dD1uLmlucHV0KTtyZXR1cm4geH1mdW5jdGlvbiBGZChuKXtuPW4uY29uc3RydWN0b3I7ImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4gaW5zdGFuY2VvZiBufHwobj1rZCk7cmV0dXJuIG5ldyBufWZ1bmN0aW9uICRkKG4sdix4KXt2YXIgRz1uLmNvbnN0cnVjdG9yO3N3aXRjaCh2KXtjYXNlIFBhOnJldHVybiBLKG4pO2Nhc2Ugd2I6Y2FzZSBBYjpyZXR1cm4gbmV3IEcoK24pOwpjYXNlIGZiOmNhc2UgeGI6Y2FzZSBFYjpjYXNlIFNhOmNhc2UgY2M6Y2FzZSBZYjpjYXNlIEJjOmNhc2UgRmM6Y2FzZSBRYzpyZXR1cm4gdj1uLmJ1ZmZlcixuZXcgRyh4P0sodik6dixuLmJ5dGVPZmZzZXQsbi5sZW5ndGgpO2Nhc2UgdGE6Y2FzZSBKYTpyZXR1cm4gbmV3IEcobik7Y2FzZSB3YTp2YXIgTz1uZXcgRyhuLnNvdXJjZSxqZS5leGVjKG4pKTtPLmxhc3RJbmRleD1uLmxhc3RJbmRleH1yZXR1cm4gT31mdW5jdGlvbiBwZChuLHYseCl7bnVsbD09bnx8SGModixuKXx8KHY9eWModiksbj0xPT12Lmxlbmd0aD9uOkVjKG4sUGIodiwwLC0xKSksdj0kYyh2KSk7dj1udWxsPT1uP246blt2XTtyZXR1cm4gbnVsbD09dj9IOnYuYXBwbHkobix4KX1mdW5jdGlvbiBGYihuKXtyZXR1cm4gbnVsbCE9biYma2MoU2QobikpfWZ1bmN0aW9uIGRjKG4sdil7bj0ibnVtYmVyIj09dHlwZW9mIG58fFFlLnRlc3Qobik/K246LTE7dj1udWxsPT12P3BmOnY7cmV0dXJuLTE8biYmMD09biUxJiYKbjx2fWZ1bmN0aW9uIGJiKG4sdix4KXtpZighRGEoeCkpcmV0dXJuITE7dmFyIEc9dHlwZW9mIHY7cmV0dXJuKCJudW1iZXIiPT1HP0ZiKHgpJiZkYyh2LHgubGVuZ3RoKToic3RyaW5nIj09RyYmdiBpbiB4KT8odj14W3ZdLG49PT1uP249PT12OnYhPT12KTohMX1mdW5jdGlvbiBIYyhuLHYpe3ZhciB4PXR5cGVvZiBuO3JldHVybiJzdHJpbmciPT14JiZKYy50ZXN0KG4pfHwibnVtYmVyIj09eD8hMDpjYihuKT8hMTohTmUudGVzdChuKXx8bnVsbCE9diYmbiBpbiBRYih2KX1mdW5jdGlvbiB4YyhuKXt2YXIgdj1LYihuKSx4PVRbdl07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHh8fCEodiBpbiBRYS5wcm90b3R5cGUpKXJldHVybiExO2lmKG49PT14KXJldHVybiEwO3Y9VWUoeCk7cmV0dXJuISF2JiZuPT09dlswXX1mdW5jdGlvbiBrYyhuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG4mJi0xPG4mJjA9PW4lMSYmbjw9cGZ9ZnVuY3Rpb24gYWUobix2KXtyZXR1cm4gbj09PUg/djpXZShuLAp2LGFlKX1mdW5jdGlvbiBvYyhuLHYpe249UWIobik7Zm9yKHZhciB4PS0xLEc9di5sZW5ndGgsTz17fTsrK3g8Rzspe3ZhciBVPXZbeF07VSBpbiBuJiYoT1tVXT1uW1VdKX1yZXR1cm4gT31mdW5jdGlvbiBIZChuLHYpe3ZhciB4PXt9O0JlKG4sZnVuY3Rpb24oRyxPLFUpe3YoRyxPLFUpJiYoeFtPXT1HKX0sTmMpO3JldHVybiB4fWZ1bmN0aW9uIHZjKG4pe2Zvcih2YXIgdj1OYyhuKSx4PXYubGVuZ3RoLEc9eCYmbi5sZW5ndGgsTz0hIUcmJmtjKEcpJiYoY2Iobil8fHZhKG4pKSxVPS0xLGFhPVtdOysrVTx4Oyl7dmFyIGNhPXZbVV07KE8mJmRjKGNhLEcpfHxIYi5jYWxsKG4sY2EpKSYmYWEucHVzaChjYSl9cmV0dXJuIGFhfWZ1bmN0aW9uIElkKG4pe3JldHVybiBudWxsPT1uP1tdOkZiKG4pP0RhKG4pP246a2Qobik6R2Uobil9ZnVuY3Rpb24gUWIobil7cmV0dXJuIERhKG4pP246a2Qobil9ZnVuY3Rpb24geWMobil7aWYoY2IobikpcmV0dXJuIG47dmFyIHY9W107ZihuKS5yZXBsYWNlKFRjLApmdW5jdGlvbih4LEcsTyxVKXt2LnB1c2goTz9VLnJlcGxhY2UoaWUsIiQxIik6R3x8eCl9KTtyZXR1cm4gdn1mdW5jdGlvbiBiZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFFhP24uY2xvbmUoKTpuZXcgb2Iobi5fX3dyYXBwZWRfXyxuLl9fY2hhaW5fXyxMYihuLl9fYWN0aW9uc19fKSl9ZnVuY3Rpb24gWmQobix2LHgpe2lmKCFufHwhbi5sZW5ndGgpcmV0dXJuW107aWYoeD9iYihuLHYseCk6bnVsbD09dil2PTE7cmV0dXJuIFBiKG4sMD52PzA6dil9ZnVuY3Rpb24gY2Uobix2LHgpe3ZhciBHPW4/bi5sZW5ndGg6MDtpZighRylyZXR1cm5bXTtpZih4P2JiKG4sdix4KTpudWxsPT12KXY9MTt2PUctKCt2fHwwKTtyZXR1cm4gUGIobiwwLDA+dj8wOnYpfWZ1bmN0aW9uIGRlKG4pe3JldHVybiBuP25bMF06SH1mdW5jdGlvbiBTYyhuLHYseCl7dmFyIEc9bj9uLmxlbmd0aDowO2lmKCFHKXJldHVybi0xO2lmKCJudW1iZXIiPT10eXBlb2YgeCl4PTA+eD9PYihHK3gsMCk6eDtlbHNlIGlmKHgpcmV0dXJuIHg9CnIobix2KSx4PEcmJih2PT09dj92PT09blt4XTpuW3hdIT09blt4XSk/eDotMTtyZXR1cm4gcShuLHYseHx8MCl9ZnVuY3Rpb24gJGMobil7dmFyIHY9bj9uLmxlbmd0aDowO3JldHVybiB2P25bdi0xXTpIfWZ1bmN0aW9uIGVlKG4pe3JldHVybiBaZChuLDEpfWZ1bmN0aW9uIGZlKG4sdix4LEcpe2lmKCFufHwhbi5sZW5ndGgpcmV0dXJuW107bnVsbCE9diYmImJvb2xlYW4iIT10eXBlb2YgdiYmKEc9eCx4PWJiKG4sdixHKT9IOnYsdj0hMSk7dmFyIE89T2EoKTtpZihudWxsIT14fHxPIT09c2QpeD1PKHgsRywzKTtpZih2JiZ5YigpPT09cSl7dj14O3ZhciBVO3g9LTE7Rz1uLmxlbmd0aDtmb3IodmFyIE89LTEsYWE9W107Kyt4PEc7KXt2YXIgY2E9blt4XSxsYT12P3YoY2EseCxuKTpjYTt4JiZVPT09bGF8fChVPWxhLGFhWysrT109Y2EpfW49YWF9ZWxzZSBuPXZkKG4seCk7cmV0dXJuIG59ZnVuY3Rpb24gSWMobil7aWYoIW58fCFuLmxlbmd0aClyZXR1cm5bXTt2YXIgdj0tMSx4PQowO249QWQobixmdW5jdGlvbihPKXtpZihGYihPKSlyZXR1cm4geD1PYihPLmxlbmd0aCx4KSwhMH0pO2Zvcih2YXIgRz11Yih4KTsrK3Y8eDspR1t2XT1DYyhuLFJkKHYpKTtyZXR1cm4gR31mdW5jdGlvbiBZZChuLHYseCl7aWYoIW58fCFuLmxlbmd0aClyZXR1cm5bXTtuPUljKG4pO2lmKG51bGw9PXYpcmV0dXJuIG47dj1DKHYseCw0KTtyZXR1cm4gQ2MobixmdW5jdGlvbihHKXtyZXR1cm4gQmQoRyx2LEgsITApfSl9ZnVuY3Rpb24gb2Qobix2KXt2YXIgeD0tMSxHPW4/bi5sZW5ndGg6MCxPPXt9O2ZvcighR3x8dnx8Y2IoblswXSl8fCh2PVtdKTsrK3g8Rzspe3ZhciBVPW5beF07dj9PW1VdPXZbeF06VSYmKE9bVVswXV09VVsxXSl9cmV0dXJuIE99ZnVuY3Rpb24gbWMobil7bj1UKG4pO24uX19jaGFpbl9fPSEwO3JldHVybiBufWZ1bmN0aW9uIGVjKG4sdix4KXtyZXR1cm4gdi5jYWxsKHgsbil9ZnVuY3Rpb24gRGQobix2LHgpe3ZhciBHPWNiKG4pP1hjOlJlO3gmJmJiKG4sdiwKeCkmJih2PUgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB2fHx4IT09SCl2PU9hKHYseCwzKTtyZXR1cm4gRyhuLHYpfWZ1bmN0aW9uIG5kKG4sdix4KXt2YXIgRz1jYihuKT9BZDpuZTt2PU9hKHYseCwzKTtyZXR1cm4gRyhuLHYpfWZ1bmN0aW9uIHFkKG4sdix4LEcpe3ZhciBPPW4/U2Qobik6MDtrYyhPKXx8KG49R2UobiksTz1uLmxlbmd0aCk7eD0ibnVtYmVyIiE9dHlwZW9mIHh8fEcmJmJiKHYseCxHKT8wOjA+eD9PYihPK3gsMCk6eHx8MDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG58fCFjYihuKSYmcmIobik/eDw9TyYmLTE8bi5pbmRleE9mKHYseCk6ISFPJiYtMTx5YihuLHYseCl9ZnVuY3Rpb24gRWQobix2LHgpe3ZhciBHPWNiKG4pP0NjOlFkO3Y9T2Eodix4LDMpO3JldHVybiBHKG4sdil9ZnVuY3Rpb24gSmQobix2LHgpe2lmKHg/YmIobix2LHgpOm51bGw9PXYpe249SWQobik7dmFyIEc9bi5sZW5ndGg7cmV0dXJuIDA8Rz9uWzArTWMoSGUoKSooRy0xLTArMSkpXTpIfXg9Ci0xO249R2Mobik7dmFyIEc9bi5sZW5ndGgsTz1HLTE7Zm9yKHY9YmMoMD52PzA6K3Z8fDAsRyk7Kyt4PHY7KXt2YXIgRz14K01jKEhlKCkqKE8teCsxKSksVT1uW0ddO25bR109blt4XTtuW3hdPVV9bi5sZW5ndGg9djtyZXR1cm4gbn1mdW5jdGlvbiBSKG4sdix4KXt2YXIgRz1jYihuKT9tZTp0ZTt4JiZiYihuLHYseCkmJih2PUgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB2fHx4IT09SCl2PU9hKHYseCwzKTtyZXR1cm4gRyhuLHYpfWZ1bmN0aW9uIFgobix2KXt2YXIgeDtpZigiZnVuY3Rpb24iIT10eXBlb2YgdilpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil7dmFyIEc9bjtuPXY7dj1HfWVsc2UgdGhyb3cgbmV3IG5jKEZhKTtyZXR1cm4gZnVuY3Rpb24oKXswPC0tbiYmKHg9di5hcHBseSh0aGlzLGFyZ3VtZW50cykpOzE+PW4mJih2PUgpO3JldHVybiB4fX1mdW5jdGlvbiBXKG4sdix4KXtmdW5jdGlvbiBHKEliLFViKXtVYiYmVWQoVWIpO2xhPUdhPWViPUg7SWImJihsYj1WZCgpLAptYT1uLmFwcGx5KEJhLGNhKSxHYXx8bGF8fChjYT1CYT1IKSl9ZnVuY3Rpb24gTygpe3ZhciBJYj12LShWZCgpLXVhKTswPj1JYnx8SWI+dj9HKGViLGxhKTpHYT1BZShPLEliKX1mdW5jdGlvbiBVKCl7RyhhYyxHYSl9ZnVuY3Rpb24gYWEoKXtjYT1hcmd1bWVudHM7dWE9VmQoKTtCYT10aGlzO2ViPWFjJiYoR2F8fCF4ZCk7aWYoITE9PT1EYil2YXIgSWI9eGQmJiFHYTtlbHNle2xhfHx4ZHx8KGxiPXVhKTt2YXIgVWI9RGItKHVhLWxiKSx2Yj0wPj1VYnx8VWI+RGI7dmI/KGxhJiYobGE9VWQobGEpKSxsYj11YSxtYT1uLmFwcGx5KEJhLGNhKSk6bGF8fChsYT1BZShVLFViKSl9dmImJkdhP0dhPVVkKEdhKTpHYXx8dj09PURifHwoR2E9QWUoTyx2KSk7SWImJih2Yj0hMCxtYT1uLmFwcGx5KEJhLGNhKSk7IXZifHxHYXx8bGF8fChjYT1CYT1IKTtyZXR1cm4gbWF9dmFyIGNhLGxhLG1hLHVhLEJhLEdhLGViLGxiPTAsRGI9ITEsYWM9ITA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IG5jKEZhKTsKdj0wPnY/MDordnx8MDtpZighMD09PXgpdmFyIHhkPSEwLGFjPSExO2Vsc2UgRGEoeCkmJih4ZD0hIXgubGVhZGluZyxEYj0ibWF4V2FpdCJpbiB4JiZPYigreC5tYXhXYWl0fHwwLHYpLGFjPSJ0cmFpbGluZyJpbiB4PyEheC50cmFpbGluZzphYyk7YWEuY2FuY2VsPWZ1bmN0aW9uKCl7R2EmJlVkKEdhKTtsYSYmVWQobGEpO2xiPTA7bGE9R2E9ZWI9SH07cmV0dXJuIGFhfWZ1bmN0aW9uIGRhKG4sdil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG58fHYmJiJmdW5jdGlvbiIhPXR5cGVvZiB2KXRocm93IG5ldyBuYyhGYSk7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgRz1hcmd1bWVudHMsTz12P3YuYXBwbHkodGhpcyxHKTpHWzBdLFU9eC5jYWNoZTtpZihVLmhhcyhPKSlyZXR1cm4gVS5nZXQoTyk7Rz1uLmFwcGx5KHRoaXMsRyk7eC5jYWNoZT1VLnNldChPLEcpO3JldHVybiBHfTt4LmNhY2hlPW5ldyBkYS5DYWNoZTtyZXR1cm4geH1mdW5jdGlvbiBrYShuLHYpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBuYyhGYSk7CnY9T2Iodj09PUg/bi5sZW5ndGgtMTordnx8MCwwKTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHg9YXJndW1lbnRzLEc9LTEsTz1PYih4Lmxlbmd0aC12LDApLFU9dWIoTyk7KytHPE87KVVbR109eFt2K0ddO3N3aXRjaCh2KXtjYXNlIDA6cmV0dXJuIG4uY2FsbCh0aGlzLFUpO2Nhc2UgMTpyZXR1cm4gbi5jYWxsKHRoaXMseFswXSxVKTtjYXNlIDI6cmV0dXJuIG4uY2FsbCh0aGlzLHhbMF0seFsxXSxVKX1PPXViKHYrMSk7Zm9yKEc9LTE7KytHPHY7KU9bR109eFtHXTtPW3ZdPVU7cmV0dXJuIG4uYXBwbHkodGhpcyxPKX19ZnVuY3Rpb24geGEobix2KXtyZXR1cm4gbj52fWZ1bmN0aW9uIHZhKG4pe3JldHVybiBzKG4pJiZGYihuKSYmSGIuY2FsbChuLCJjYWxsZWUiKSYmIUxmLmNhbGwobiwiY2FsbGVlIil9ZnVuY3Rpb24gQ2Eobix2LHgsRyl7Rz0oeD0iZnVuY3Rpb24iPT10eXBlb2YgeD9DKHgsRywzKTpIKT94KG4sdik6SDtyZXR1cm4gRz09PUg/ZWQobix2LHgpOiEhR31mdW5jdGlvbiB5YShuKXtyZXR1cm4gcyhuKSYmCiJzdHJpbmciPT10eXBlb2Ygbi5tZXNzYWdlJiZnYy5jYWxsKG4pPT1NYn1mdW5jdGlvbiBJYShuKXtyZXR1cm4gRGEobikmJmdjLmNhbGwobik9PWdhfWZ1bmN0aW9uIERhKG4pe3ZhciB2PXR5cGVvZiBuO3JldHVybiEhbiYmKCJvYmplY3QiPT12fHwiZnVuY3Rpb24iPT12KX1mdW5jdGlvbiBUYShuKXtyZXR1cm4gbnVsbD09bj8hMTpJYShuKT9NZi50ZXN0KHFmLmNhbGwobikpOnMobikmJmhjLnRlc3Qobil9ZnVuY3Rpb24gWWEobil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBufHxzKG4pJiZnYy5jYWxsKG4pPT10YX1mdW5jdGlvbiBOYShuKXt2YXIgdjtpZighcyhuKXx8Z2MuY2FsbChuKSE9cWF8fHZhKG4pfHwhKEhiLmNhbGwobiwiY29uc3RydWN0b3IiKXx8KHY9bi5jb25zdHJ1Y3RvciwiZnVuY3Rpb24iIT10eXBlb2Ygdnx8diBpbnN0YW5jZW9mIHYpKSlyZXR1cm4hMTt2YXIgeDtCZShuLGZ1bmN0aW9uKEcsTyl7eD1PfSxOYyk7cmV0dXJuIHg9PT1IfHxIYi5jYWxsKG4seCl9CmZ1bmN0aW9uIHRiKG4pe3JldHVybiBEYShuKSYmZ2MuY2FsbChuKT09d2F9ZnVuY3Rpb24gcmIobil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBufHxzKG4pJiZnYy5jYWxsKG4pPT1KYX1mdW5jdGlvbiBaYShuKXtyZXR1cm4gcyhuKSYma2Mobi5sZW5ndGgpJiYhIVhhW2djLmNhbGwobildfWZ1bmN0aW9uIHBjKG4sdil7cmV0dXJuIG48dn1mdW5jdGlvbiBHYyhuKXt2YXIgdj1uP1NkKG4pOjA7cmV0dXJuIGtjKHYpP3Y/TGIobik6W106R2Uobil9ZnVuY3Rpb24gWmMobil7cmV0dXJuIFljKG4sTmMobikpfWZ1bmN0aW9uIEdkKG4pe3JldHVybiBkZChuLE5jKG4pKX1mdW5jdGlvbiBOYyhuKXtpZihudWxsPT1uKXJldHVybltdO0RhKG4pfHwobj1rZChuKSk7Zm9yKHZhciB2PW4ubGVuZ3RoLHY9diYma2ModikmJihjYihuKXx8dmEobikpJiZ2fHwwLHg9bi5jb25zdHJ1Y3RvcixHPS0xLHg9ImZ1bmN0aW9uIj09dHlwZW9mIHgmJngucHJvdG90eXBlPT09bixPPXViKHYpLFU9MDx2OysrRzwKdjspT1tHXT1HKyIiO2Zvcih2YXIgYWEgaW4gbilVJiZkYyhhYSx2KXx8ImNvbnN0cnVjdG9yIj09YWEmJih4fHwhSGIuY2FsbChuLGFhKSl8fE8ucHVzaChhYSk7cmV0dXJuIE99ZnVuY3Rpb24gb2Yobil7bj1RYihuKTtmb3IodmFyIHY9LTEseD1UYihuKSxHPXgubGVuZ3RoLE89dWIoRyk7Kyt2PEc7KXt2YXIgVT14W3ZdO09bdl09W1UsbltVXV19cmV0dXJuIE99ZnVuY3Rpb24gR2Uobil7cmV0dXJuIGhkKG4sVGIobikpfWZ1bmN0aW9uIGpmKG4pe3JldHVybihuPWYobikpJiZuLnJlcGxhY2UoTGQsZykucmVwbGFjZShoZSwiIil9ZnVuY3Rpb24gbWYobix2KXt2YXIgeD0iIjtuPWYobik7dj0rdjtpZigxPnZ8fCFufHwheWQodikpcmV0dXJuIHg7ZG8gdiUyJiYoeCs9biksdj1NYyh2LzIpLG4rPW47d2hpbGUodik7cmV0dXJuIHh9ZnVuY3Rpb24gcmYobix2LHgpe3ZhciBHPW47bj1mKG4pO2lmKCFuKXJldHVybiBuO2lmKHg/YmIoRyx2LHgpOm51bGw9PXYpcmV0dXJuIG4uc2xpY2UodShuKSwKdyhuKSsxKTt2Kz0iIjtyZXR1cm4gbi5zbGljZShkKG4sdiksYyhuLHYpKzEpfWZ1bmN0aW9uIGhmKG4sdix4KXt4JiZiYihuLHYseCkmJih2PUgpO249ZihuKTtyZXR1cm4gbi5tYXRjaCh2fHxMZSl8fFtdfWZ1bmN0aW9uIEVlKG4sdix4KXt4JiZiYihuLHYseCkmJih2PUgpO3JldHVybiBzKG4pP3NmKG4pOnNkKG4sdil9ZnVuY3Rpb24gaWQobil7cmV0dXJuIG59ZnVuY3Rpb24gc2Yobil7cmV0dXJuIGZkKExjKG4sITApKX1mdW5jdGlvbiBYZShuLHYseCl7aWYobnVsbD09eCl7dmFyIEc9RGEodiksTz1HP1RiKHYpOkg7KChPPU8mJk8ubGVuZ3RoP2RkKHYsTyk6SCk/Ty5sZW5ndGg6Ryl8fChPPSExLHg9dix2PW4sbj10aGlzKX1PfHwoTz1kZCh2LFRiKHYpKSk7dmFyIFU9ITAsRz0tMSxhYT1JYShuKSxjYT1PLmxlbmd0aDshMT09PXg/VT0hMTpEYSh4KSYmImNoYWluImluIHgmJihVPXguY2hhaW4pO2Zvcig7KytHPGNhOyl7eD1PW0ddO3ZhciBsYT12W3hdO25beF09bGE7YWEmJgoobi5wcm90b3R5cGVbeF09ZnVuY3Rpb24obWEpe3JldHVybiBmdW5jdGlvbigpe3ZhciB1YT10aGlzLl9fY2hhaW5fXztpZihVfHx1YSl7dmFyIEJhPW4odGhpcy5fX3dyYXBwZWRfXyk7KEJhLl9fYWN0aW9uc19fPUxiKHRoaXMuX19hY3Rpb25zX18pKS5wdXNoKHtmdW5jOm1hLGFyZ3M6YXJndW1lbnRzLHRoaXNBcmc6bn0pO0JhLl9fY2hhaW5fXz11YTtyZXR1cm4gQmF9cmV0dXJuIG1hLmFwcGx5KG4sUmMoW3RoaXMudmFsdWUoKV0sYXJndW1lbnRzKSl9fShsYSkpfXJldHVybiBufWZ1bmN0aW9uIHRmKCl7fWZ1bmN0aW9uIHplKG4pe3JldHVybiBIYyhuKT9SZChuKTpUZShuKX1yYT1yYT9BYy5kZWZhdWx0cyhpYy5PYmplY3QoKSxyYSxBYy5waWNrKGljLHJkKSk6aWM7dmFyIHViPXJhLkFycmF5LHVmPXJhLkRhdGUsTmY9cmEuRXJyb3IsdmY9cmEuRnVuY3Rpb24samQ9cmEuTWF0aCx3Zj1yYS5OdW1iZXIsa2Q9cmEuT2JqZWN0LFllPXJhLlJlZ0V4cCx4Zj1yYS5TdHJpbmcsbmM9CnJhLlR5cGVFcnJvcix5Zj11Yi5wcm90b3R5cGUsWmU9a2QucHJvdG90eXBlLE9mPXhmLnByb3RvdHlwZSxxZj12Zi5wcm90b3R5cGUudG9TdHJpbmcsSGI9WmUuaGFzT3duUHJvcGVydHksUGY9MCxnYz1aZS50b1N0cmluZyxRZj1pYy5fLE1mPVllKCJeIitxZi5jYWxsKEhiKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkXHgyNiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKSxKZj1yYS5BcnJheUJ1ZmZlcixVZD1yYS5jbGVhclRpbWVvdXQsUmY9cmEucGFyc2VGbG9hdCxLZj1qZC5wb3csTGY9WmUucHJvcGVydHlJc0VudW1lcmFibGUseWU9aGIocmEsIlNldCIpLEFlPXJhLnNldFRpbWVvdXQsZmY9eWYuc3BsaWNlLGdmPXJhLlVpbnQ4QXJyYXksemY9aGIocmEsIldlYWtNYXAiKSxEZT1qZC5jZWlsLHhlPWhiKGtkLCJjcmVhdGUiKSxNYz1qZC5mbG9vcixTZj1oYih1YiwKImlzQXJyYXkiKSx5ZD1yYS5pc0Zpbml0ZSxBZj1oYihrZCwia2V5cyIpLE9iPWpkLm1heCxiYz1qZC5taW4sVGY9aGIodWYsIm5vdyIpLFVmPXJhLnBhcnNlSW50LEhlPWpkLnJhbmRvbSxWZj13Zi5ORUdBVElWRV9JTkZJTklUWSx3ZT13Zi5QT1NJVElWRV9JTkZJTklUWSxJZj00Mjk0OTY3Mjk0LEhmPTIxNDc0ODM2NDcscGY9OTAwNzE5OTI1NDc0MDk5MSxJZT16ZiYmbmV3IHpmLEZlPXt9O1Quc3VwcG9ydD17fTtULnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpQYyxldmFsdWF0ZTpKZSxpbnRlcnBvbGF0ZTpMLHZhcmlhYmxlOiIiLGltcG9ydHM6e186VH19O3ZhciBUZD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt9cmV0dXJuIGZ1bmN0aW9uKHYpe2lmKERhKHYpKXtuLnByb3RvdHlwZT12O3ZhciB4PW5ldyBuO24ucHJvdG90eXBlPUh9cmV0dXJuIHh8fHt9fX0oKSxzYz0kKFhiKSwkZT0kKHRkLCEwKSxCZT1qYSgpLGVmPWphKCEwKSxuZj1JZT9mdW5jdGlvbihuLHYpe0llLnNldChuLAp2KTtyZXR1cm4gbn06aWQsVWU9SWU/ZnVuY3Rpb24obil7cmV0dXJuIEllLmdldChuKX06dGYsU2Q9UmQoImxlbmd0aCIpLGtmPWZ1bmN0aW9uKCl7dmFyIG49MCx2PTA7cmV0dXJuIGZ1bmN0aW9uKHgsRyl7dmFyIE89VmQoKSxVPWVhLShPLXYpO3Y9TztpZigwPFUpe2lmKCsrbj49WilyZXR1cm4geH1lbHNlIG49MDtyZXR1cm4gbmYoeCxHKX19KCksV2Y9a2EoZnVuY3Rpb24obix2KXtyZXR1cm4gcyhuKSYmRmIobik/cmMobixOYih2LCExLCEwKSk6W119KSxYZj1SYigpLFlmPVJiKCEwKSxaZj1rYShmdW5jdGlvbihuKXtmb3IodmFyIHY9bi5sZW5ndGgseD12LEc9dWIobWEpLE89eWIoKSxVPU89PT1xLGFhPVtdO3gtLTspe3ZhciBjYT1uW3hdPUZiKGNhPW5beF0pP2NhOltdO0dbeF09VSYmMTIwPD1jYS5sZW5ndGg/eGUmJnllP25ldyBLYyh4JiZjYSk6bnVsbDpudWxsfXZhciBVPW5bMF0sbGE9LTEsbWE9VT9VLmxlbmd0aDowLHVhPUdbMF07YTpmb3IoOysrbGE8bWE7KWlmKGNhPQpVW2xhXSwwPih1YT91Yyh1YSxjYSk6TyhhYSxjYSwwKSkpe2Zvcih4PXY7LS14Oyl7dmFyIEJhPUdbeF07aWYoMD4oQmE/dWMoQmEsY2EpOk8oblt4XSxjYSwwKSkpY29udGludWUgYX11YSYmdWEucHVzaChjYSk7YWEucHVzaChjYSl9cmV0dXJuIGFhfSksJGY9a2EoZnVuY3Rpb24obix2KXt2PU5iKHYpO3ZhciB4PURjKG4sdik7cmUobix2LnNvcnQoYSkpO3JldHVybiB4fSksYWc9bmIoKSxiZz1uYighMCksY2c9a2EoZnVuY3Rpb24obil7cmV0dXJuIHZkKE5iKG4sITEsITApKX0pLGRnPWthKGZ1bmN0aW9uKG4sdil7cmV0dXJuIEZiKG4pP3JjKG4sdik6W119KSxlZz1rYShJYyksZmc9a2EoZnVuY3Rpb24obil7dmFyIHY9bi5sZW5ndGgseD0yPHY/blt2LTJdOkgsRz0xPHY/blt2LTFdOkg7Mjx2JiYiZnVuY3Rpb24iPT10eXBlb2YgeD92LT0yOih4PTE8diYmImZ1bmN0aW9uIj09dHlwZW9mIEc/KC0tdixHKTpILEc9SCk7bi5sZW5ndGg9djtyZXR1cm4gWWQobix4LEcpfSksZ2c9CmthKGZ1bmN0aW9uKG4pe249TmIobik7cmV0dXJuIHRoaXMudGhydShmdW5jdGlvbih2KXt2PWNiKHYpP3Y6W1FiKHYpXTtmb3IodmFyIHg9bixHPS0xLE89di5sZW5ndGgsVT0tMSxhYT14Lmxlbmd0aCxjYT11YihPK2FhKTsrK0c8TzspY2FbR109dltHXTtmb3IoOysrVTxhYTspY2FbRysrXT14W1VdO3JldHVybiBjYX0pfSksaGc9a2EoZnVuY3Rpb24obix2KXtyZXR1cm4gRGMobixOYih2KSl9KSxpZz1TKGZ1bmN0aW9uKG4sdix4KXtIYi5jYWxsKG4seCk/KytuW3hdOm5beF09MX0pLGFmPUpiKHNjKSxqZz1KYigkZSwhMCksQmY9bGMoVmIsc2MpLENmPWxjKGZ1bmN0aW9uKG4sdil7Zm9yKHZhciB4PW4ubGVuZ3RoO3gtLSYmITEhPT12KG5beF0seCxuKTspO3JldHVybiBufSwkZSksa2c9UyhmdW5jdGlvbihuLHYseCl7SGIuY2FsbChuLHgpP25beF0ucHVzaCh2KTpuW3hdPVt2XX0pLGxnPVMoZnVuY3Rpb24obix2LHgpe25beF09dn0pLG1nPWthKGZ1bmN0aW9uKG4sdix4KXt2YXIgRz0KLTEsTz0iZnVuY3Rpb24iPT10eXBlb2YgdixVPUhjKHYpLGFhPUZiKG4pP3ViKG4ubGVuZ3RoKTpbXTtzYyhuLGZ1bmN0aW9uKGNhKXt2YXIgbGE9Tz92OlUmJm51bGwhPWNhP2NhW3ZdOkg7YWFbKytHXT1sYT9sYS5hcHBseShjYSx4KTpwZChjYSx2LHgpfSk7cmV0dXJuIGFhfSksbmc9UyhmdW5jdGlvbihuLHYseCl7blt4PzA6MV0ucHVzaCh2KX0sZnVuY3Rpb24oKXtyZXR1cm5bW10sW11dfSksYmY9Q2IoQmQsc2MpLERmPUNiKGZ1bmN0aW9uKG4sdix4LEcpe3ZhciBPPW4ubGVuZ3RoO2ZvcihHJiZPJiYoeD1uWy0tT10pO08tLTspeD12KHgsbltPXSxPLG4pO3JldHVybiB4fSwkZSksb2c9a2EoZnVuY3Rpb24obix2KXtpZihudWxsPT1uKXJldHVybltdO3ZhciB4PXZbMl07eCYmYmIodlswXSx2WzFdLHgpJiYodi5sZW5ndGg9MSk7cmV0dXJuIHVlKG4sTmIodiksW10pfSksVmQ9VGZ8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB1ZikuZ2V0VGltZSgpfSxFZj1rYShmdW5jdGlvbihuLAp2LHgpe3ZhciBHPUI7aWYoeC5sZW5ndGgpdmFyIE89aCh4LEVmLnBsYWNlaG9sZGVyKSxHPUd8UDtyZXR1cm4gTGEobixHLHYseCxPKX0pLHBnPWthKGZ1bmN0aW9uKG4sdil7dj12Lmxlbmd0aD9OYih2KTpHZChuKTtmb3IodmFyIHg9LTEsRz12Lmxlbmd0aDsrK3g8Rzspe3ZhciBPPXZbeF07bltPXT1MYShuW09dLEIsbil9cmV0dXJuIG59KSxGZj1rYShmdW5jdGlvbihuLHYseCl7dmFyIEc9QnxJO2lmKHgubGVuZ3RoKXZhciBPPWgoeCxGZi5wbGFjZWhvbGRlciksRz1HfFA7cmV0dXJuIExhKHYsRyxuLHgsTyl9KSxxZz1NYShEKSxyZz1NYShKKSxzZz1rYShmdW5jdGlvbihuLHYpe3JldHVybiBPZChuLDEsdil9KSx0Zz1rYShmdW5jdGlvbihuLHYseCl7cmV0dXJuIE9kKG4sdix4KX0pLHVnPWpjKCksY2Y9amMoITApLHZnPWthKGZ1bmN0aW9uKG4sdil7dj1OYih2KTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbnx8IVhjKHYsdCkpdGhyb3cgbmV3IG5jKEZhKTt2YXIgeD12Lmxlbmd0aDsKcmV0dXJuIGthKGZ1bmN0aW9uKEcpe2Zvcih2YXIgTz1iYyhHLmxlbmd0aCx4KTtPLS07KUdbT109dltPXShHW09dKTtyZXR1cm4gbi5hcHBseSh0aGlzLEcpfSl9KSx3Zz1xYihQKSx4Zz1xYihWKSx5Zz1rYShmdW5jdGlvbihuLHYpe3JldHVybiBMYShuLG5hLEgsSCxILE5iKHYpKX0pLGNiPVNmfHxmdW5jdGlvbihuKXtyZXR1cm4gcyhuKSYma2Mobi5sZW5ndGgpJiZnYy5jYWxsKG4pPT1VYX0sV2U9YmEocWUpLGRmPWJhKGZ1bmN0aW9uKG4sdix4KXtyZXR1cm4geD9OZChuLHYseCk6VWMobix2KX0pLHpnPVJhKGRmLGZ1bmN0aW9uKG4sdil7cmV0dXJuIG49PT1IP3Y6bn0pLEFnPVJhKFdlLGFlKSxCZz16YihYYiksQ2c9emIodGQpLERnPUhhKEJlKSxFZz1IYShlZiksRmc9YWIoWGIpLEdnPWFiKHRkKSxUYj1BZj9mdW5jdGlvbihuKXt2YXIgdj1udWxsPT1uP0g6bi5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdiYmdi5wcm90b3R5cGU9PT1ufHwiZnVuY3Rpb24iIT0KdHlwZW9mIG4mJkZiKG4pP3ZjKG4pOkRhKG4pP0FmKG4pOltdfTp2YyxIZz13YyghMCksSWc9d2MoKSxKZz1rYShmdW5jdGlvbihuLHYpe2lmKG51bGw9PW4pcmV0dXJue307aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHZbMF0pcmV0dXJuIHY9Q2MoTmIodikseGYpLG9jKG4scmMoTmMobiksdikpO3ZhciB4PUModlswXSx2WzFdLDMpO3JldHVybiBIZChuLGZ1bmN0aW9uKEcsTyxVKXtyZXR1cm4heChHLE8sVSl9KX0pLEtnPWthKGZ1bmN0aW9uKG4sdil7cmV0dXJuIG51bGw9PW4/e306ImZ1bmN0aW9uIj09dHlwZW9mIHZbMF0/SGQobixDKHZbMF0sdlsxXSwzKSk6b2MobixOYih2KSl9KSxMZz16YShmdW5jdGlvbihuLHYseCl7dj12LnRvTG93ZXJDYXNlKCk7cmV0dXJuIG4rKHg/di5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt2LnNsaWNlKDEpOnYpfSksTWc9emEoZnVuY3Rpb24obix2LHgpe3JldHVybiBuKyh4PyItIjoiIikrdi50b0xvd2VyQ2FzZSgpfSksTmc9ZGIoKSxPZz1kYighMCksClBnPXphKGZ1bmN0aW9uKG4sdix4KXtyZXR1cm4gbisoeD8iXyI6IiIpK3YudG9Mb3dlckNhc2UoKX0pLFFnPXphKGZ1bmN0aW9uKG4sdix4KXtyZXR1cm4gbisoeD8iICI6IiIpKyh2LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Yuc2xpY2UoMSkpfSksR2Y9a2EoZnVuY3Rpb24obix2KXt0cnl7cmV0dXJuIG4uYXBwbHkoSCx2KX1jYXRjaCh4KXtyZXR1cm4geWEoeCk/eDpuZXcgTmYoeCl9fSksUmc9a2EoZnVuY3Rpb24obix2KXtyZXR1cm4gZnVuY3Rpb24oeCl7cmV0dXJuIHBkKHgsbix2KX19KSxTZz1rYShmdW5jdGlvbihuLHYpe3JldHVybiBmdW5jdGlvbih4KXtyZXR1cm4gcGQobix4LHYpfX0pLFRnPWpiKCJjZWlsIiksVWc9amIoImZsb29yIiksVmc9R2IoeGEsVmYpLFdnPUdiKHBjLHdlKSxYZz1qYigicm91bmQiKTtULnByb3RvdHlwZT0kYS5wcm90b3R5cGU7b2IucHJvdG90eXBlPVRkKCRhLnByb3RvdHlwZSk7b2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPW9iO1FhLnByb3RvdHlwZT0KVGQoJGEucHJvdG90eXBlKTtRYS5wcm90b3R5cGUuY29uc3RydWN0b3I9UWE7ZmMucHJvdG90eXBlWyJkZWxldGUiXT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5oYXMobikmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW25dfTtmYy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKG4pe3JldHVybiJfX3Byb3RvX18iPT1uP0g6dGhpcy5fX2RhdGFfX1tuXX07ZmMucHJvdG90eXBlLmhhcz1mdW5jdGlvbihuKXtyZXR1cm4iX19wcm90b19fIiE9biYmSGIuY2FsbCh0aGlzLl9fZGF0YV9fLG4pfTtmYy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKG4sdil7Il9fcHJvdG9fXyIhPW4mJih0aGlzLl9fZGF0YV9fW25dPXYpO3JldHVybiB0aGlzfTtLYy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihuKXt2YXIgdj10aGlzLmRhdGE7InN0cmluZyI9PXR5cGVvZiBufHxEYShuKT92LnNldC5hZGQobik6di5oYXNoW25dPSEwfTtkYS5DYWNoZT1mYztULmFmdGVyPWZ1bmN0aW9uKG4sdil7aWYoImZ1bmN0aW9uIiE9CnR5cGVvZiB2KWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXt2YXIgeD1uO249djt2PXh9ZWxzZSB0aHJvdyBuZXcgbmMoRmEpO249eWQobj0rbik/bjowO3JldHVybiBmdW5jdGlvbigpe2lmKDE+LS1uKXJldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O1QuYXJ5PWZ1bmN0aW9uKG4sdix4KXt4JiZiYihuLHYseCkmJih2PUgpO3Y9biYmbnVsbD09dj9uLmxlbmd0aDpPYigrdnx8MCwwKTtyZXR1cm4gTGEobixZLEgsSCxILEgsdil9O1QuYXNzaWduPWRmO1QuYXQ9aGc7VC5iZWZvcmU9WDtULmJpbmQ9RWY7VC5iaW5kQWxsPXBnO1QuYmluZEtleT1GZjtULmNhbGxiYWNrPUVlO1QuY2hhaW49bWM7VC5jaHVuaz1mdW5jdGlvbihuLHYseCl7dj0oeD9iYihuLHYseCk6bnVsbD09dik/MTpPYihNYyh2KXx8MSwxKTt4PTA7Zm9yKHZhciBHPW4/bi5sZW5ndGg6MCxPPS0xLFU9dWIoRGUoRy92KSk7eDxHOylVWysrT109UGIobix4LHgrPXYpO3JldHVybiBVfTtULmNvbXBhY3Q9ZnVuY3Rpb24obil7Zm9yKHZhciB2PQotMSx4PW4/bi5sZW5ndGg6MCxHPS0xLE89W107Kyt2PHg7KXt2YXIgVT1uW3ZdO1UmJihPWysrR109VSl9cmV0dXJuIE99O1QuY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fTtULmNvdW50Qnk9aWc7VC5jcmVhdGU9ZnVuY3Rpb24obix2LHgpe3ZhciBHPVRkKG4pO3gmJmJiKG4sdix4KSYmKHY9SCk7cmV0dXJuIHY/VWMoRyx2KTpHfTtULmN1cnJ5PXFnO1QuY3VycnlSaWdodD1yZztULmRlYm91bmNlPVc7VC5kZWZhdWx0cz16ZztULmRlZmF1bHRzRGVlcD1BZztULmRlZmVyPXNnO1QuZGVsYXk9dGc7VC5kaWZmZXJlbmNlPVdmO1QuZHJvcD1aZDtULmRyb3BSaWdodD1jZTtULmRyb3BSaWdodFdoaWxlPWZ1bmN0aW9uKG4sdix4KXtyZXR1cm4gbiYmbi5sZW5ndGg/d2QobixPYSh2LHgsMyksITAsITApOltdfTtULmRyb3BXaGlsZT1mdW5jdGlvbihuLHYseCl7cmV0dXJuIG4mJm4ubGVuZ3RoP3dkKG4sT2Eodix4LDMpLCEwKTpbXX07VC5maWxsPQpmdW5jdGlvbihuLHYseCxHKXt2YXIgTz1uP24ubGVuZ3RoOjA7aWYoIU8pcmV0dXJuW107eCYmIm51bWJlciIhPXR5cGVvZiB4JiZiYihuLHYseCkmJih4PTAsRz1PKTtPPW4ubGVuZ3RoO3g9bnVsbD09eD8wOit4fHwwOzA+eCYmKHg9LXg+Tz8wOk8reCk7Rz1HPT09SHx8Rz5PP086K0d8fDA7MD5HJiYoRys9Tyk7Tz14Pkc/MDpHPj4+MDtmb3IoeD4+Pj0wO3g8Tzspblt4KytdPXY7cmV0dXJuIG59O1QuZmlsdGVyPW5kO1QuZmxhdHRlbj1mdW5jdGlvbihuLHYseCl7dmFyIEc9bj9uLmxlbmd0aDowO3gmJmJiKG4sdix4KSYmKHY9ITEpO3JldHVybiBHP05iKG4sdik6W119O1QuZmxhdHRlbkRlZXA9ZnVuY3Rpb24obil7cmV0dXJuIG4mJm4ubGVuZ3RoP05iKG4sITApOltdfTtULmZsb3c9dWc7VC5mbG93UmlnaHQ9Y2Y7VC5mb3JFYWNoPUJmO1QuZm9yRWFjaFJpZ2h0PUNmO1QuZm9ySW49RGc7VC5mb3JJblJpZ2h0PUVnO1QuZm9yT3duPUZnO1QuZm9yT3duUmlnaHQ9R2c7VC5mdW5jdGlvbnM9CkdkO1QuZ3JvdXBCeT1rZztULmluZGV4Qnk9bGc7VC5pbml0aWFsPWZ1bmN0aW9uKG4pe3JldHVybiBjZShuLDEpfTtULmludGVyc2VjdGlvbj1aZjtULmludmVydD1mdW5jdGlvbihuLHYseCl7eCYmYmIobix2LHgpJiYodj1IKTt4PS0xO2Zvcih2YXIgRz1UYihuKSxPPUcubGVuZ3RoLFU9e307Kyt4PE87KXt2YXIgYWE9R1t4XSxjYT1uW2FhXTt2P0hiLmNhbGwoVSxjYSk/VVtjYV0ucHVzaChhYSk6VVtjYV09W2FhXTpVW2NhXT1hYX1yZXR1cm4gVX07VC5pbnZva2U9bWc7VC5rZXlzPVRiO1Qua2V5c0luPU5jO1QubWFwPUVkO1QubWFwS2V5cz1IZztULm1hcFZhbHVlcz1JZztULm1hdGNoZXM9c2Y7VC5tYXRjaGVzUHJvcGVydHk9ZnVuY3Rpb24obix2KXtyZXR1cm4gcGUobixMYyh2LCEwKSl9O1QubWVtb2l6ZT1kYTtULm1lcmdlPVdlO1QubWV0aG9kPVJnO1QubWV0aG9kT2Y9U2c7VC5taXhpbj1YZTtULm1vZEFyZ3M9dmc7VC5uZWdhdGU9ZnVuY3Rpb24obil7aWYoImZ1bmN0aW9uIiE9CnR5cGVvZiBuKXRocm93IG5ldyBuYyhGYSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfX07VC5vbWl0PUpnO1Qub25jZT1mdW5jdGlvbihuKXtyZXR1cm4gWCgyLG4pfTtULnBhaXJzPW9mO1QucGFydGlhbD13ZztULnBhcnRpYWxSaWdodD14ZztULnBhcnRpdGlvbj1uZztULnBpY2s9S2c7VC5wbHVjaz1mdW5jdGlvbihuLHYpe3JldHVybiBFZChuLHplKHYpKX07VC5wcm9wZXJ0eT16ZTtULnByb3BlcnR5T2Y9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBFYyhuLHljKHYpLHYrIiIpfX07VC5wdWxsPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLHY9blswXTtpZighdnx8IXYubGVuZ3RoKXJldHVybiB2O2Zvcih2YXIgeD0wLEc9eWIoKSxPPW4ubGVuZ3RoOysreDxPOylmb3IodmFyIFU9MCxhYT1uW3hdOy0xPChVPUcodixhYSxVKSk7KWZmLmNhbGwodixVLDEpO3JldHVybiB2fTtULnB1bGxBdD0kZjtULnJhbmdlPQpmdW5jdGlvbihuLHYseCl7eCYmYmIobix2LHgpJiYodj14PUgpO249K258fDA7eD1udWxsPT14PzE6K3h8fDA7bnVsbD09dj8odj1uLG49MCk6dj0rdnx8MDt2YXIgRz0tMTt2PU9iKERlKCh2LW4pLyh4fHwxKSksMCk7Zm9yKHZhciBPPXViKHYpOysrRzx2OylPW0ddPW4sbis9eDtyZXR1cm4gT307VC5yZWFyZz15ZztULnJlamVjdD1mdW5jdGlvbihuLHYseCl7dmFyIEc9Y2Iobik/QWQ6bmU7dj1PYSh2LHgsMyk7cmV0dXJuIEcobixmdW5jdGlvbihPLFUsYWEpe3JldHVybiF2KE8sVSxhYSl9KX07VC5yZW1vdmU9ZnVuY3Rpb24obix2LHgpe3ZhciBHPVtdO2lmKCFufHwhbi5sZW5ndGgpcmV0dXJuIEc7dmFyIE89LTEsVT1bXSxhYT1uLmxlbmd0aDtmb3Iodj1PYSh2LHgsMyk7KytPPGFhOyl4PW5bT10sdih4LE8sbikmJihHLnB1c2goeCksVS5wdXNoKE8pKTtyZShuLFUpO3JldHVybiBHfTtULnJlc3Q9ZWU7VC5yZXN0UGFyYW09a2E7VC5zZXQ9ZnVuY3Rpb24obix2LHgpe2lmKG51bGw9PQpuKXJldHVybiBuO3ZhciBHPXYrIiI7dj1udWxsIT1uW0ddfHxIYyh2LG4pP1tHXTp5Yyh2KTtmb3IodmFyIEc9LTEsTz12Lmxlbmd0aCxVPU8tMSxhYT1uO251bGwhPWFhJiYrK0c8Tzspe3ZhciBjYT12W0ddO0RhKGFhKSYmKEc9PVU/YWFbY2FdPXg6bnVsbD09YWFbY2FdJiYoYWFbY2FdPWRjKHZbRysxXSk/W106e30pKTthYT1hYVtjYV19cmV0dXJuIG59O1Quc2h1ZmZsZT1mdW5jdGlvbihuKXtyZXR1cm4gSmQobix3ZSl9O1Quc2xpY2U9ZnVuY3Rpb24obix2LHgpe3ZhciBHPW4/bi5sZW5ndGg6MDtpZighRylyZXR1cm5bXTt4JiYibnVtYmVyIiE9dHlwZW9mIHgmJmJiKG4sdix4KSYmKHY9MCx4PUcpO3JldHVybiBQYihuLHYseCl9O1Quc29ydEJ5PWZ1bmN0aW9uKG4sdix4KXtpZihudWxsPT1uKXJldHVybltdO3gmJmJiKG4sdix4KSYmKHY9SCk7dmFyIEc9LTE7dj1PYSh2LHgsMyk7bj1RZChuLGZ1bmN0aW9uKE8sVSxhYSl7cmV0dXJue2NyaXRlcmlhOnYoTyxVLGFhKSxpbmRleDorK0csCnZhbHVlOk99fSk7cmV0dXJuIHVkKG4sYil9O1Quc29ydEJ5QWxsPW9nO1Quc29ydEJ5T3JkZXI9ZnVuY3Rpb24obix2LHgsRyl7aWYobnVsbD09bilyZXR1cm5bXTtHJiZiYih2LHgsRykmJih4PUgpO2NiKHYpfHwodj1udWxsPT12P1tdOlt2XSk7Y2IoeCl8fCh4PW51bGw9PXg/W106W3hdKTtyZXR1cm4gdWUobix2LHgpfTtULnNwcmVhZD1mdW5jdGlvbihuKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgbmMoRmEpO3JldHVybiBmdW5jdGlvbih2KXtyZXR1cm4gbi5hcHBseSh0aGlzLHYpfX07VC50YWtlPWZ1bmN0aW9uKG4sdix4KXtpZighbnx8IW4ubGVuZ3RoKXJldHVybltdO2lmKHg/YmIobix2LHgpOm51bGw9PXYpdj0xO3JldHVybiBQYihuLDAsMD52PzA6dil9O1QudGFrZVJpZ2h0PWZ1bmN0aW9uKG4sdix4KXt2YXIgRz1uP24ubGVuZ3RoOjA7aWYoIUcpcmV0dXJuW107aWYoeD9iYihuLHYseCk6bnVsbD09dil2PTE7dj1HLSgrdnx8MCk7cmV0dXJuIFBiKG4sCjA+dj8wOnYpfTtULnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG4sdix4KXtyZXR1cm4gbiYmbi5sZW5ndGg/d2QobixPYSh2LHgsMyksITEsITApOltdfTtULnRha2VXaGlsZT1mdW5jdGlvbihuLHYseCl7cmV0dXJuIG4mJm4ubGVuZ3RoP3dkKG4sT2Eodix4LDMpKTpbXX07VC50YXA9ZnVuY3Rpb24obix2LHgpe3YuY2FsbCh4LG4pO3JldHVybiBufTtULnRocm90dGxlPWZ1bmN0aW9uKG4sdix4KXt2YXIgRz0hMCxPPSEwO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBuYyhGYSk7ITE9PT14P0c9ITE6RGEoeCkmJihHPSJsZWFkaW5nImluIHg/ISF4LmxlYWRpbmc6RyxPPSJ0cmFpbGluZyJpbiB4PyEheC50cmFpbGluZzpPKTtyZXR1cm4gVyhuLHYse2xlYWRpbmc6RyxtYXhXYWl0Oit2LHRyYWlsaW5nOk99KX07VC50aHJ1PWVjO1QudGltZXM9ZnVuY3Rpb24obix2LHgpe249TWMobik7aWYoMT5ufHwheWQobikpcmV0dXJuW107dmFyIEc9LTEsTz11YihiYyhuLDQyOTQ5NjcyOTUpKTsKZm9yKHY9Qyh2LHgsMSk7KytHPG47KTQyOTQ5NjcyOTU+Rz9PW0ddPXYoRyk6dihHKTtyZXR1cm4gT307VC50b0FycmF5PUdjO1QudG9QbGFpbk9iamVjdD1aYztULnRyYW5zZm9ybT1mdW5jdGlvbihuLHYseCxHKXt2YXIgTz1jYihuKXx8WmEobik7dj1PYSh2LEcsNCk7bnVsbD09eCYmKE98fERhKG4pPyhHPW4uY29uc3RydWN0b3IseD1PP2NiKG4pP25ldyBHOltdOlRkKElhKEcpP0cucHJvdG90eXBlOkgpKTp4PXt9KTsoTz9WYjpYYikobixmdW5jdGlvbihVLGFhLGNhKXtyZXR1cm4gdih4LFUsYWEsY2EpfSk7cmV0dXJuIHh9O1QudW5pb249Y2c7VC51bmlxPWZlO1QudW56aXA9SWM7VC51bnppcFdpdGg9WWQ7VC52YWx1ZXM9R2U7VC52YWx1ZXNJbj1mdW5jdGlvbihuKXtyZXR1cm4gaGQobixOYyhuKSl9O1Qud2hlcmU9ZnVuY3Rpb24obix2KXtyZXR1cm4gbmQobixmZCh2KSl9O1Qud2l0aG91dD1kZztULndyYXA9ZnVuY3Rpb24obix2KXt2PW51bGw9PXY/aWQ6djtyZXR1cm4gTGEodiwKUCxILFtuXSxbXSl9O1QueG9yPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLHY9YXJndW1lbnRzLmxlbmd0aDsrK248djspe3ZhciB4PWFyZ3VtZW50c1tuXTtpZihGYih4KSl2YXIgRz1HP1JjKHJjKEcseCkscmMoeCxHKSk6eH1yZXR1cm4gRz92ZChHKTpbXX07VC56aXA9ZWc7VC56aXBPYmplY3Q9b2Q7VC56aXBXaXRoPWZnO1QuYmFja2Zsb3c9Y2Y7VC5jb2xsZWN0PUVkO1QuY29tcG9zZT1jZjtULmVhY2g9QmY7VC5lYWNoUmlnaHQ9Q2Y7VC5leHRlbmQ9ZGY7VC5pdGVyYXRlZT1FZTtULm1ldGhvZHM9R2Q7VC5vYmplY3Q9b2Q7VC5zZWxlY3Q9bmQ7VC50YWlsPWVlO1QudW5pcXVlPWZlO1hlKFQsVCk7VC5hZGQ9ZnVuY3Rpb24obix2KXtyZXR1cm4oK258fDApKygrdnx8MCl9O1QuYXR0ZW1wdD1HZjtULmNhbWVsQ2FzZT1MZztULmNhcGl0YWxpemU9ZnVuY3Rpb24obil7cmV0dXJuKG49ZihuKSkmJm4uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbi5zbGljZSgxKX07VC5jZWlsPVRnOwpULmNsb25lPWZ1bmN0aW9uKG4sdix4LEcpe3YmJiJib29sZWFuIiE9dHlwZW9mIHYmJmJiKG4sdix4KT92PSExOiJmdW5jdGlvbiI9PXR5cGVvZiB2JiYoRz14LHg9dix2PSExKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeD9MYyhuLHYsQyh4LEcsMykpOkxjKG4sdil9O1QuY2xvbmVEZWVwPWZ1bmN0aW9uKG4sdix4KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygdj9MYyhuLCEwLEModix4LDMpKTpMYyhuLCEwKX07VC5kZWJ1cnI9amY7VC5lbmRzV2l0aD1mdW5jdGlvbihuLHYseCl7bj1mKG4pO3YrPSIiO3ZhciBHPW4ubGVuZ3RoO3g9eD09PUg/RzpiYygwPng/MDoreHx8MCxHKTt4LT12Lmxlbmd0aDtyZXR1cm4gMDw9eCYmbi5pbmRleE9mKHYseCk9PXh9O1QuZXNjYXBlPWZ1bmN0aW9uKG4pe3JldHVybihuPWYobikpJiZWYS50ZXN0KG4pP24ucmVwbGFjZShYZCxlKTpufTtULmVzY2FwZVJlZ0V4cD1mdW5jdGlvbihuKXtyZXR1cm4obj1mKG4pKSYmZ2UudGVzdChuKT9uLnJlcGxhY2UoS2QsCmspOm58fCIoPzopIn07VC5ldmVyeT1EZDtULmZpbmQ9YWY7VC5maW5kSW5kZXg9WGY7VC5maW5kS2V5PUJnO1QuZmluZExhc3Q9amc7VC5maW5kTGFzdEluZGV4PVlmO1QuZmluZExhc3RLZXk9Q2c7VC5maW5kV2hlcmU9ZnVuY3Rpb24obix2KXtyZXR1cm4gYWYobixmZCh2KSl9O1QuZmlyc3Q9ZGU7VC5mbG9vcj1VZztULmdldD1mdW5jdGlvbihuLHYseCl7bj1udWxsPT1uP0g6RWMobix5Yyh2KSx2KyIiKTtyZXR1cm4gbj09PUg/eDpufTtULmd0PXhhO1QuZ3RlPWZ1bmN0aW9uKG4sdil7cmV0dXJuIG4+PXZ9O1QuaGFzPWZ1bmN0aW9uKG4sdil7aWYobnVsbD09bilyZXR1cm4hMTt2YXIgeD1IYi5jYWxsKG4sdik7aWYoIXgmJiFIYyh2KSl7dj15Yyh2KTtuPTE9PXYubGVuZ3RoP246RWMobixQYih2LDAsLTEpKTtpZihudWxsPT1uKXJldHVybiExO3Y9JGModik7eD1IYi5jYWxsKG4sdil9cmV0dXJuIHh8fGtjKG4ubGVuZ3RoKSYmZGModixuLmxlbmd0aCkmJihjYihuKXx8dmEobikpfTsKVC5pZGVudGl0eT1pZDtULmluY2x1ZGVzPXFkO1QuaW5kZXhPZj1TYztULmluUmFuZ2U9ZnVuY3Rpb24obix2LHgpe3Y9K3Z8fDA7eD09PUg/KHg9dix2PTApOng9K3h8fDA7cmV0dXJuIG4+PWJjKHYseCkmJm48T2Iodix4KX07VC5pc0FyZ3VtZW50cz12YTtULmlzQXJyYXk9Y2I7VC5pc0Jvb2xlYW49ZnVuY3Rpb24obil7cmV0dXJuITA9PT1ufHwhMT09PW58fHMobikmJmdjLmNhbGwobik9PXdifTtULmlzRGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gcyhuKSYmZ2MuY2FsbChuKT09QWJ9O1QuaXNFbGVtZW50PWZ1bmN0aW9uKG4pe3JldHVybiEhbiYmMT09PW4ubm9kZVR5cGUmJnMobikmJiFOYShuKX07VC5pc0VtcHR5PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uPyEwOkZiKG4pJiYoY2Iobil8fHJiKG4pfHx2YShuKXx8cyhuKSYmSWEobi5zcGxpY2UpKT8hbi5sZW5ndGg6IVRiKG4pLmxlbmd0aH07VC5pc0VxdWFsPUNhO1QuaXNFcnJvcj15YTtULmlzRmluaXRlPWZ1bmN0aW9uKG4pe3JldHVybiJudW1iZXIiPT0KdHlwZW9mIG4mJnlkKG4pfTtULmlzRnVuY3Rpb249SWE7VC5pc01hdGNoPWZ1bmN0aW9uKG4sdix4LEcpe3g9ImZ1bmN0aW9uIj09dHlwZW9mIHg/Qyh4LEcsMyk6SDtyZXR1cm4gb2UobixnYih2KSx4KX07VC5pc05hTj1mdW5jdGlvbihuKXtyZXR1cm4gWWEobikmJm4hPStufTtULmlzTmF0aXZlPVRhO1QuaXNOdWxsPWZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT09bn07VC5pc051bWJlcj1ZYTtULmlzT2JqZWN0PURhO1QuaXNQbGFpbk9iamVjdD1OYTtULmlzUmVnRXhwPXRiO1QuaXNTdHJpbmc9cmI7VC5pc1R5cGVkQXJyYXk9WmE7VC5pc1VuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gbj09PUh9O1Qua2ViYWJDYXNlPU1nO1QubGFzdD0kYztULmxhc3RJbmRleE9mPWZ1bmN0aW9uKG4sdix4KXt2YXIgRz1uP24ubGVuZ3RoOjA7aWYoIUcpcmV0dXJuLTE7dmFyIE89RztpZigibnVtYmVyIj09dHlwZW9mIHgpTz0oMD54P09iKEcreCwwKTpiYyh4fHwwLEctMSkpKzE7ZWxzZSBpZih4KXJldHVybiBPPQpyKG4sdiwhMCktMSxuPW5bT10sKHY9PT12P3Y9PT1uOm4hPT1uKT9POi0xO2lmKHYhPT12KXJldHVybiBwKG4sTywhMCk7Zm9yKDtPLS07KWlmKG5bT109PT12KXJldHVybiBPO3JldHVybi0xfTtULmx0PXBjO1QubHRlPWZ1bmN0aW9uKG4sdil7cmV0dXJuIG48PXZ9O1QubWF4PVZnO1QubWluPVdnO1Qubm9Db25mbGljdD1mdW5jdGlvbigpe2ljLl89UWY7cmV0dXJuIHRoaXN9O1Qubm9vcD10ZjtULm5vdz1WZDtULnBhZD1mdW5jdGlvbihuLHYseCl7bj1mKG4pO3Y9K3Y7dmFyIEc9bi5sZW5ndGg7aWYoRz49dnx8IXlkKHYpKXJldHVybiBuO0c9KHYtRykvMjt2PU1jKEcpO0c9RGUoRyk7eD1xYygiIixHLHgpO3JldHVybiB4LnNsaWNlKDAsdikrbit4fTtULnBhZExlZnQ9Tmc7VC5wYWRSaWdodD1PZztULnBhcnNlSW50PWZ1bmN0aW9uKG4sdix4KXsoeD9iYihuLHYseCk6bnVsbD09dik/dj0wOnYmJih2PSt2KTtuPXJmKG4pO3JldHVybiBVZihuLHZ8fChQZS50ZXN0KG4pPzE2OjEwKSl9OwpULnJhbmRvbT1mdW5jdGlvbihuLHYseCl7eCYmYmIobix2LHgpJiYodj14PUgpO3ZhciBHPW51bGw9PW4sTz1udWxsPT12O251bGw9PXgmJihPJiYiYm9vbGVhbiI9PXR5cGVvZiBuPyh4PW4sbj0xKToiYm9vbGVhbiI9PXR5cGVvZiB2JiYoeD12LE89ITApKTtHJiZPJiYodj0xLE89ITEpO249K258fDA7Tz8odj1uLG49MCk6dj0rdnx8MDtyZXR1cm4geHx8biUxfHx2JTE/KHg9SGUoKSxiYyhuK3gqKHYtbitSZigiMWUtIisoKHgrIiIpLmxlbmd0aC0xKSkpLHYpKTpuK01jKEhlKCkqKHYtbisxKSl9O1QucmVkdWNlPWJmO1QucmVkdWNlUmlnaHQ9RGY7VC5yZXBlYXQ9bWY7VC5yZXN1bHQ9ZnVuY3Rpb24obix2LHgpe3ZhciBHPW51bGw9PW4/SDpuW3ZdO0c9PT1IJiYobnVsbD09bnx8SGModixuKXx8KHY9eWModiksbj0xPT12Lmxlbmd0aD9uOkVjKG4sUGIodiwwLC0xKSksRz1udWxsPT1uP0g6blskYyh2KV0pLEc9Rz09PUg/eDpHKTtyZXR1cm4gSWEoRyk/Ry5jYWxsKG4pOkd9O1Qucm91bmQ9ClhnO1QucnVuSW5Db250ZXh0PUE7VC5zaXplPWZ1bmN0aW9uKG4pe3ZhciB2PW4/U2Qobik6MDtyZXR1cm4ga2Modik/djpUYihuKS5sZW5ndGh9O1Quc25ha2VDYXNlPVBnO1Quc29tZT1SO1Quc29ydGVkSW5kZXg9YWc7VC5zb3J0ZWRMYXN0SW5kZXg9Ymc7VC5zdGFydENhc2U9UWc7VC5zdGFydHNXaXRoPWZ1bmN0aW9uKG4sdix4KXtuPWYobik7eD1udWxsPT14PzA6YmMoMD54PzA6K3h8fDAsbi5sZW5ndGgpO3JldHVybiBuLmxhc3RJbmRleE9mKHYseCk9PXh9O1Quc3VtPWZ1bmN0aW9uKG4sdix4KXt4JiZiYihuLHYseCkmJih2PUgpO3Y9T2Eodix4LDMpO2lmKDE9PXYubGVuZ3RoKXtuPWNiKG4pP246SWQobik7eD1uLmxlbmd0aDtmb3IodmFyIEc9MDt4LS07KUcrPSt2KG5beF0pfHwwO249R31lbHNlIG49Z2Qobix2KTtyZXR1cm4gbn07VC50ZW1wbGF0ZT1mdW5jdGlvbihuLHYseCl7dmFyIEc9VC50ZW1wbGF0ZVNldHRpbmdzO3gmJmJiKG4sdix4KSYmKHY9eD1IKTtuPWYobik7CnY9TmQoVWMoe30seHx8diksRyxNZCk7eD1OZChVYyh7fSx2LmltcG9ydHMpLEcuaW1wb3J0cyxNZCk7dmFyIE89VGIoeCksVT1oZCh4LE8pLGFhLGNhLGxhPTA7eD12LmludGVycG9sYXRlfHwkYjt2YXIgbWE9Il9fcCArXHgzZCAnIjt4PVllKCh2LmVzY2FwZXx8JGIpLnNvdXJjZSsifCIreC5zb3VyY2UrInwiKyh4PT09TD9PZTokYikuc291cmNlKyJ8Iisodi5ldmFsdWF0ZXx8JGIpLnNvdXJjZSsifCQiLCJnIik7dmFyIHVhPSIvLyMgc291cmNlVVJMXHgzZCIrKCJzb3VyY2VVUkwiaW4gdj92LnNvdXJjZVVSTDoibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK0thKyJdIikrIlxuIjtuLnJlcGxhY2UoeCxmdW5jdGlvbihCYSxHYSxlYixsYixEYixhYyl7ZWJ8fChlYj1sYik7bWErPW4uc2xpY2UobGEsYWMpLnJlcGxhY2UoS2UsbSk7R2EmJihhYT0hMCxtYSs9IicgK1xuX19lKCIrR2ErIikgK1xuJyIpO0RiJiYoY2E9ITAsbWErPSInO1xuIitEYisiO1xuX19wICtceDNkICciKTsKZWImJihtYSs9IicgK1xuKChfX3QgXHgzZCAoIitlYisiKSkgXHgzZFx4M2QgbnVsbCA/ICcnIDogX190KSArXG4nIik7bGE9YWMrQmEubGVuZ3RoO3JldHVybiBCYX0pO21hKz0iJztcbiI7KHY9di52YXJpYWJsZSl8fChtYT0id2l0aCAob2JqKSB7XG4iK21hKyJcbn1cbiIpO21hPShjYT9tYS5yZXBsYWNlKGxkLCIiKTptYSkucmVwbGFjZShXZCwiJDEiKS5yZXBsYWNlKG1kLCIkMTsiKTttYT0iZnVuY3Rpb24oIisodnx8Im9iaiIpKyIpIHtcbiIrKHY/IiI6Im9iaiB8fCAob2JqIFx4M2Qge30pO1xuIikrInZhciBfX3QsIF9fcCBceDNkICcnIisoYWE/IiwgX19lIFx4M2QgXy5lc2NhcGUiOiIiKSsoY2E/IiwgX19qIFx4M2QgQXJyYXkucHJvdG90eXBlLmpvaW47XG5mdW5jdGlvbiBwcmludCgpIHsgX19wICtceDNkIF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cbiI6IjtcbiIpK21hKyJyZXR1cm4gX19wXG59Ijt2PUdmKGZ1bmN0aW9uKCl7cmV0dXJuIHZmKE8sdWErInJldHVybiAiKwptYSkuYXBwbHkoSCxVKX0pO3Yuc291cmNlPW1hO2lmKHlhKHYpKXRocm93IHY7cmV0dXJuIHZ9O1QudHJpbT1yZjtULnRyaW1MZWZ0PWZ1bmN0aW9uKG4sdix4KXt2YXIgRz1uO3JldHVybihuPWYobikpPyh4P2JiKEcsdix4KTpudWxsPT12KT9uLnNsaWNlKHUobikpOm4uc2xpY2UoZChuLHYrIiIpKTpufTtULnRyaW1SaWdodD1mdW5jdGlvbihuLHYseCl7dmFyIEc9bjtyZXR1cm4obj1mKG4pKT8oeD9iYihHLHYseCk6bnVsbD09dik/bi5zbGljZSgwLHcobikrMSk6bi5zbGljZSgwLGMobix2KyIiKSsxKTpufTtULnRydW5jPWZ1bmN0aW9uKG4sdix4KXt4JiZiYihuLHYseCkmJih2PUgpO3ZhciBHPWZhO3g9aWE7aWYobnVsbCE9dilpZihEYSh2KSl7dmFyIE89InNlcGFyYXRvciJpbiB2P3Yuc2VwYXJhdG9yOk8sRz0ibGVuZ3RoImluIHY/K3YubGVuZ3RofHwwOkc7eD0ib21pc3Npb24iaW4gdj9mKHYub21pc3Npb24pOnh9ZWxzZSBHPSt2fHwwO249ZihuKTtpZihHPj1uLmxlbmd0aClyZXR1cm4gbjsKRy09eC5sZW5ndGg7aWYoMT5HKXJldHVybiB4O3Y9bi5zbGljZSgwLEcpO2lmKG51bGw9PU8pcmV0dXJuIHYreDtpZih0YihPKSl7aWYobi5zbGljZShHKS5zZWFyY2goTykpe3ZhciBVLGFhPW4uc2xpY2UoMCxHKTtPLmdsb2JhbHx8KE89WWUoTy5zb3VyY2UsKGplLmV4ZWMoTyl8fCIiKSsiZyIpKTtmb3IoTy5sYXN0SW5kZXg9MDtuPU8uZXhlYyhhYSk7KVU9bi5pbmRleDt2PXYuc2xpY2UoMCxudWxsPT1VP0c6VSl9fWVsc2Ugbi5pbmRleE9mKE8sRykhPUcmJihPPXYubGFzdEluZGV4T2YoTyksLTE8TyYmKHY9di5zbGljZSgwLE8pKSk7cmV0dXJuIHYreH07VC51bmVzY2FwZT1mdW5jdGlvbihuKXtyZXR1cm4obj1mKG4pKSYma2IudGVzdChuKT9uLnJlcGxhY2UoQ2Qseik6bn07VC51bmlxdWVJZD1mdW5jdGlvbihuKXt2YXIgdj0rK1BmO3JldHVybiBmKG4pK3Z9O1Qud29yZHM9aGY7VC5hbGw9RGQ7VC5hbnk9UjtULmNvbnRhaW5zPXFkO1QuZXE9Q2E7VC5kZXRlY3Q9YWY7VC5mb2xkbD0KYmY7VC5mb2xkcj1EZjtULmhlYWQ9ZGU7VC5pbmNsdWRlPXFkO1QuaW5qZWN0PWJmO1hlKFQsZnVuY3Rpb24oKXt2YXIgbj17fTtYYihULGZ1bmN0aW9uKHYseCl7VC5wcm90b3R5cGVbeF18fChuW3hdPXYpfSk7cmV0dXJuIG59KCksITEpO1Quc2FtcGxlPUpkO1QucHJvdG90eXBlLnNhbXBsZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fX2NoYWluX198fG51bGwhPW4/dGhpcy50aHJ1KGZ1bmN0aW9uKHYpe3JldHVybiBKZCh2LG4pfSk6SmQodGhpcy52YWx1ZSgpKX07VC5WRVJTSU9OPUY7VmIoImJpbmQgYmluZEtleSBjdXJyeSBjdXJyeVJpZ2h0IHBhcnRpYWwgcGFydGlhbFJpZ2h0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKG4pe1Rbbl0ucGxhY2Vob2xkZXI9VH0pO1ZiKFsiZHJvcCIsInRha2UiXSxmdW5jdGlvbihuLHYpe1FhLnByb3RvdHlwZVtuXT1mdW5jdGlvbih4KXt2YXIgRz10aGlzLl9fZmlsdGVyZWRfXztpZihHJiYhdilyZXR1cm4gbmV3IFFhKHRoaXMpO3g9bnVsbD09Cng/MTpPYihNYyh4KXx8MCwwKTt2YXIgTz10aGlzLmNsb25lKCk7Rz9PLl9fdGFrZUNvdW50X189YmMoTy5fX3Rha2VDb3VudF9fLHgpOk8uX192aWV3c19fLnB1c2goe3NpemU6eCx0eXBlOm4rKDA+Ty5fX2Rpcl9fPyJSaWdodCI6IiIpfSk7cmV0dXJuIE99O1FhLnByb3RvdHlwZVtuKyJSaWdodCJdPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLnJldmVyc2UoKVtuXSh4KS5yZXZlcnNlKCl9fSk7VmIoWyJmaWx0ZXIiLCJtYXAiLCJ0YWtlV2hpbGUiXSxmdW5jdGlvbihuLHYpe3ZhciB4PXYrMSxHPXghPXBhO1FhLnByb3RvdHlwZVtuXT1mdW5jdGlvbihPLFUpe3ZhciBhYT10aGlzLmNsb25lKCk7YWEuX19pdGVyYXRlZXNfXy5wdXNoKHtpdGVyYXRlZTpPYShPLFUsMSksdHlwZTp4fSk7YWEuX19maWx0ZXJlZF9fPWFhLl9fZmlsdGVyZWRfX3x8RztyZXR1cm4gYWF9fSk7VmIoWyJmaXJzdCIsImxhc3QiXSxmdW5jdGlvbihuLHYpe3ZhciB4PSJ0YWtlIisodj8iUmlnaHQiOiIiKTtRYS5wcm90b3R5cGVbbl09CmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbeF0oMSkudmFsdWUoKVswXX19KTtWYihbImluaXRpYWwiLCJyZXN0Il0sZnVuY3Rpb24obix2KXt2YXIgeD0iZHJvcCIrKHY/IiI6IlJpZ2h0Iik7UWEucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19maWx0ZXJlZF9fP25ldyBRYSh0aGlzKTp0aGlzW3hdKDEpfX0pO1ZiKFsicGx1Y2siLCJ3aGVyZSJdLGZ1bmN0aW9uKG4sdil7dmFyIHg9dj8iZmlsdGVyIjoibWFwIixHPXY/ZmQ6emU7UWEucHJvdG90eXBlW25dPWZ1bmN0aW9uKE8pe3JldHVybiB0aGlzW3hdKEcoTykpfX0pO1FhLnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyKGlkKX07UWEucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbihuLHYpe249T2Eobix2LDEpO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4hbih4KX0pfTtRYS5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24obix2KXtuPW51bGw9PW4/MDorbnx8CjA7dmFyIHg9dGhpcztpZih4Ll9fZmlsdGVyZWRfXyYmKDA8bnx8MD52KSlyZXR1cm4gbmV3IFFhKHgpOzA+bj94PXgudGFrZVJpZ2h0KC1uKTpuJiYoeD14LmRyb3AobikpO3YhPT1IJiYodj0rdnx8MCx4PTA+dj94LmRyb3BSaWdodCgtdik6eC50YWtlKHYtbikpO3JldHVybiB4fTtRYS5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24obix2KXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkudGFrZVdoaWxlKG4sdikucmV2ZXJzZSgpfTtRYS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2Uod2UpfTtYYihRYS5wcm90b3R5cGUsZnVuY3Rpb24obix2KXt2YXIgeD0vXig/OmZpbHRlcnxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QodiksRz0vXig/OmZpcnN0fGxhc3QpJC8udGVzdCh2KSxPPVRbRz8idGFrZSIrKCJsYXN0Ij09dj8iUmlnaHQiOiIiKTp2XTtPJiYoVC5wcm90b3R5cGVbdl09ZnVuY3Rpb24oKXt2YXIgVT1HP1sxXTphcmd1bWVudHMsYWE9CnRoaXMuX19jaGFpbl9fLGNhPXRoaXMuX193cmFwcGVkX18sbGE9ISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxtYT1jYSBpbnN0YW5jZW9mIFFhLHVhPVVbMF0sQmE9bWF8fGNiKGNhKTtCYSYmeCYmImZ1bmN0aW9uIj09dHlwZW9mIHVhJiYxIT11YS5sZW5ndGgmJihtYT1CYT0hMSk7dmFyIEdhPWZ1bmN0aW9uKGViKXtyZXR1cm4gRyYmYWE/TyhlYiwxKVswXTpPLmFwcGx5KEgsUmMoW2ViXSxVKSl9LHVhPXtmdW5jOmVjLGFyZ3M6W0dhXSx0aGlzQXJnOkh9LGxhPW1hJiYhbGE7cmV0dXJuIEcmJiFhYT9sYT8oY2E9Y2EuY2xvbmUoKSxjYS5fX2FjdGlvbnNfXy5wdXNoKHVhKSxuLmNhbGwoY2EpKTpPLmNhbGwoSCx0aGlzLnZhbHVlKCkpWzBdOiFHJiZCYT8oY2E9bGE/Y2E6bmV3IFFhKHRoaXMpLGNhPW4uYXBwbHkoY2EsVSksY2EuX19hY3Rpb25zX18ucHVzaCh1YSksbmV3IG9iKGNhLGFhKSk6dGhpcy50aHJ1KEdhKX0pfSk7VmIoImpvaW4gcG9wIHB1c2ggcmVwbGFjZSBzaGlmdCBzb3J0IHNwbGljZSBzcGxpdCB1bnNoaWZ0Ii5zcGxpdCgiICIpLApmdW5jdGlvbihuKXt2YXIgdj0oL14oPzpyZXBsYWNlfHNwbGl0KSQvLnRlc3Qobik/T2Y6eWYpW25dLHg9L14oPzpwdXNofHNvcnR8dW5zaGlmdCkkLy50ZXN0KG4pPyJ0YXAiOiJ0aHJ1IixHPS9eKD86am9pbnxwb3B8cmVwbGFjZXxzaGlmdCkkLy50ZXN0KG4pO1QucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7dmFyIE89YXJndW1lbnRzO3JldHVybiBHJiYhdGhpcy5fX2NoYWluX18/di5hcHBseSh0aGlzLnZhbHVlKCksTyk6dGhpc1t4XShmdW5jdGlvbihVKXtyZXR1cm4gdi5hcHBseShVLE8pfSl9fSk7WGIoUWEucHJvdG90eXBlLGZ1bmN0aW9uKG4sdil7dmFyIHg9VFt2XTtpZih4KXt2YXIgRz14Lm5hbWUrIiI7KEZlW0ddfHwoRmVbR109W10pKS5wdXNoKHtuYW1lOnYsZnVuYzp4fSl9fSk7RmVbV2IoSCxJKS5uYW1lXT1be25hbWU6IndyYXBwZXIiLGZ1bmM6SH1dO1FhLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBuPW5ldyBRYSh0aGlzLl9fd3JhcHBlZF9fKTtuLl9fYWN0aW9uc19fPQpMYih0aGlzLl9fYWN0aW9uc19fKTtuLl9fZGlyX189dGhpcy5fX2Rpcl9fO24uX19maWx0ZXJlZF9fPXRoaXMuX19maWx0ZXJlZF9fO24uX19pdGVyYXRlZXNfXz1MYih0aGlzLl9faXRlcmF0ZWVzX18pO24uX190YWtlQ291bnRfXz10aGlzLl9fdGFrZUNvdW50X187bi5fX3ZpZXdzX189TGIodGhpcy5fX3ZpZXdzX18pO3JldHVybiBufTtRYS5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbigpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgbj1uZXcgUWEodGhpcyk7bi5fX2Rpcl9fPS0xO24uX19maWx0ZXJlZF9fPSEwfWVsc2Ugbj10aGlzLmNsb25lKCksbi5fX2Rpcl9fKj0tMTtyZXR1cm4gbn07UWEucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLHY9dGhpcy5fX2Rpcl9fLHg9Y2IobiksRz0wPnYsTz14P24ubGVuZ3RoOjAsVTtVPTA7Zm9yKHZhciBhYT1PLGNhPXRoaXMuX192aWV3c19fLGxhPS0xLG1hPWNhLmxlbmd0aDsrK2xhPAptYTspe3ZhciB1YT1jYVtsYV0sQmE9dWEuc2l6ZTtzd2l0Y2godWEudHlwZSl7Y2FzZSAiZHJvcCI6VSs9QmE7YnJlYWs7Y2FzZSAiZHJvcFJpZ2h0IjphYS09QmE7YnJlYWs7Y2FzZSAidGFrZSI6YWE9YmMoYWEsVStCYSk7YnJlYWs7Y2FzZSAidGFrZVJpZ2h0IjpVPU9iKFUsYWEtQmEpfX1VPXtzdGFydDpVLGVuZDphYX07YWE9VS5zdGFydDtjYT1VLmVuZDtVPWNhLWFhO0c9Rz9jYTphYS0xO2FhPXRoaXMuX19pdGVyYXRlZXNfXztjYT1hYS5sZW5ndGg7bGE9MDttYT1iYyhVLHRoaXMuX190YWtlQ291bnRfXyk7aWYoIXh8fE88b2F8fE89PVUmJm1hPT1VKXJldHVybiB2ZShuLHRoaXMuX19hY3Rpb25zX18pO3g9W107YTpmb3IoO1UtLSYmbGE8bWE7KXtHKz12O089LTE7Zm9yKHVhPW5bR107KytPPGNhOyl7dmFyIEdhPWFhW09dLEJhPUdhLml0ZXJhdGVlLEdhPUdhLnR5cGUsQmE9QmEodWEpO2lmKEdhPT1wYSl1YT1CYTtlbHNlIGlmKCFCYSlpZihHYT09QWEpY29udGludWUgYTsKZWxzZSBicmVhayBhfXhbbGErK109dWF9cmV0dXJuIHh9O1QucHJvdG90eXBlLmNoYWluPWZ1bmN0aW9uKCl7cmV0dXJuIG1jKHRoaXMpfTtULnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG9iKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9O1QucHJvdG90eXBlLmNvbmNhdD1nZztULnByb3RvdHlwZS5wbGFudD1mdW5jdGlvbihuKXtmb3IodmFyIHYseD10aGlzO3ggaW5zdGFuY2VvZiAkYTspe3ZhciBHPWJlKHgpO3Y/Ty5fX3dyYXBwZWRfXz1HOnY9Rzt2YXIgTz1HLHg9eC5fX3dyYXBwZWRfX31PLl9fd3JhcHBlZF9fPW47cmV0dXJuIHZ9O1QucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXt2YXIgbj10aGlzLl9fd3JhcHBlZF9fLHY9ZnVuY3Rpb24oeCl7cmV0dXJuIHgucmV2ZXJzZSgpfTtyZXR1cm4gbiBpbnN0YW5jZW9mIFFhPyh0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCYmKG49bmV3IFFhKHRoaXMpKSxuPW4ucmV2ZXJzZSgpLG4uX19hY3Rpb25zX18ucHVzaCh7ZnVuYzplYywKYXJnczpbdl0sdGhpc0FyZzpIfSksbmV3IG9iKG4sdGhpcy5fX2NoYWluX18pKTp0aGlzLnRocnUodil9O1QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWUoKSsiIn07VC5wcm90b3R5cGUucnVuPVQucHJvdG90eXBlLnRvSlNPTj1ULnByb3RvdHlwZS52YWx1ZU9mPVQucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHZlKHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9O1QucHJvdG90eXBlLmNvbGxlY3Q9VC5wcm90b3R5cGUubWFwO1QucHJvdG90eXBlLmhlYWQ9VC5wcm90b3R5cGUuZmlyc3Q7VC5wcm90b3R5cGUuc2VsZWN0PVQucHJvdG90eXBlLmZpbHRlcjtULnByb3RvdHlwZS50YWlsPVQucHJvdG90eXBlLnJlc3Q7cmV0dXJuIFR9dmFyIEgsRj0iMy4xMC4xIixCPTEsST0yLE09NCxEPTgsSj0xNixQPTMyLFY9NjQsWT0xMjgsbmE9MjU2LGZhPTMwLGlhPSIuLi4iLFo9MTUwLGVhPTE2LG9hPTIwMCxBYT0xLHBhPQoyLEZhPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIixFYT0iX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyIsV2E9IltvYmplY3QgQXJndW1lbnRzXSIsVWE9IltvYmplY3QgQXJyYXldIix3Yj0iW29iamVjdCBCb29sZWFuXSIsQWI9IltvYmplY3QgRGF0ZV0iLE1iPSJbb2JqZWN0IEVycm9yXSIsZ2E9IltvYmplY3QgRnVuY3Rpb25dIix0YT0iW29iamVjdCBOdW1iZXJdIixxYT0iW29iamVjdCBPYmplY3RdIix3YT0iW29iamVjdCBSZWdFeHBdIixKYT0iW29iamVjdCBTdHJpbmddIixQYT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGZiPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLHhiPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLEViPSJbb2JqZWN0IEludDhBcnJheV0iLFNhPSJbb2JqZWN0IEludDE2QXJyYXldIixjYz0iW29iamVjdCBJbnQzMkFycmF5XSIsWWI9IltvYmplY3QgVWludDhBcnJheV0iLEJjPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsRmM9IltvYmplY3QgVWludDE2QXJyYXldIiwKUWM9IltvYmplY3QgVWludDMyQXJyYXldIixsZD0vXGJfX3AgXCs9ICcnOy9nLFdkPS9cYihfX3AgXCs9KSAnJyBcKy9nLG1kPS8oX19lXCguKj9cKXxcYl9fdFwpKSBcK1xuJyc7L2csQ2Q9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzl8Izk2KTsvZyxYZD0vWyY8PiInYF0vZyxrYj1SZWdFeHAoQ2Quc291cmNlKSxWYT1SZWdFeHAoWGQuc291cmNlKSxQYz0vPCUtKFtcc1xTXSs/KSU+L2csSmU9LzwlKFtcc1xTXSs/KSU+L2csTD0vPCU9KFtcc1xTXSs/KSU+L2csTmU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxuXFxdfFxcLikqP1wxKVxdLyxKYz0vXlx3KiQvLFRjPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxuXFxdfFxcLikqPylcMilcXS9nLEtkPS9eWzohLF18W1xcXiQuKis/KClbXF17fXxcL118KF5bMC05YS1mQS1GbnJ0dXZ4XSl8KFtcblxyXHUyMDI4XHUyMDI5XSkvZyxnZT1SZWdFeHAoS2Quc291cmNlKSxoZT0KL1tcdTAzMDAtXHUwMzZmXHVmZTIwLVx1ZmUyM10vZyxpZT0vXFwoXFwpPy9nLE9lPS9cJFx7KFteXFx9XSooPzpcXC5bXlxcfV0qKSopXH0vZyxqZT0vXHcqJC8sUGU9L14wW3hYXS8saGM9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sUWU9L15cZCskLyxMZD0vW1x4YzAtXHhkNlx4ZDgtXHhkZVx4ZGYtXHhmNlx4ZjgtXHhmZl0vZywkYj0vKCReKS8sS2U9L1snXG5cclx1MjAyOFx1MjAyOVxcXS9nLExlPVJlZ0V4cCgiW0EtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdKyg/XHgzZFtBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXVthLXpcXHhkZi1cXHhmNlxceGY4LVxceGZmXSspfFtBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXT9bYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZl0rfFtBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXSt8WzAtOV0rIiwiZyIpLHJkPSJBcnJheSBBcnJheUJ1ZmZlciBEYXRlIEVycm9yIEZsb2F0MzJBcnJheSBGbG9hdDY0QXJyYXkgRnVuY3Rpb24gSW50OEFycmF5IEludDE2QXJyYXkgSW50MzJBcnJheSBNYXRoIE51bWJlciBPYmplY3QgUmVnRXhwIFNldCBTdHJpbmcgXyBjbGVhclRpbWVvdXQgaXNGaW5pdGUgcGFyc2VGbG9hdCBwYXJzZUludCBzZXRUaW1lb3V0IFR5cGVFcnJvciBVaW50OEFycmF5IFVpbnQ4Q2xhbXBlZEFycmF5IFVpbnQxNkFycmF5IFVpbnQzMkFycmF5IFdlYWtNYXAiLnNwbGl0KCIgIiksCkthPS0xLFhhPXt9O1hhW2ZiXT1YYVt4Yl09WGFbRWJdPVhhW1NhXT1YYVtjY109WGFbWWJdPVhhW0JjXT1YYVtGY109WGFbUWNdPSEwO1hhW1dhXT1YYVtVYV09WGFbUGFdPVhhW3diXT1YYVtBYl09WGFbTWJdPVhhW2dhXT1YYVsiW29iamVjdCBNYXBdIl09WGFbdGFdPVhhW3FhXT1YYVt3YV09WGFbIltvYmplY3QgU2V0XSJdPVhhW0phXT1YYVsiW29iamVjdCBXZWFrTWFwXSJdPSExO3ZhciBwYj17fTtwYltXYV09cGJbVWFdPXBiW1BhXT1wYlt3Yl09cGJbQWJdPXBiW2ZiXT1wYlt4Yl09cGJbRWJdPXBiW1NhXT1wYltjY109cGJbdGFdPXBiW3FhXT1wYlt3YV09cGJbSmFdPXBiW1liXT1wYltCY109cGJbRmNdPXBiW1FjXT0hMDtwYltNYl09cGJbZ2FdPXBiWyJbb2JqZWN0IE1hcF0iXT1wYlsiW29iamVjdCBTZXRdIl09cGJbIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgTWU9eyJcdTAwYzAiOiJBIiwiXHUwMGMxIjoiQSIsIlx1MDBjMiI6IkEiLCJcdTAwYzMiOiJBIiwiXHUwMGM0IjoiQSIsCiJcdTAwYzUiOiJBIiwiXHUwMGUwIjoiYSIsIlx1MDBlMSI6ImEiLCJcdTAwZTIiOiJhIiwiXHUwMGUzIjoiYSIsIlx1MDBlNCI6ImEiLCJcdTAwZTUiOiJhIiwiXHUwMGM3IjoiQyIsIlx1MDBlNyI6ImMiLCJcdTAwZDAiOiJEIiwiXHUwMGYwIjoiZCIsIlx1MDBjOCI6IkUiLCJcdTAwYzkiOiJFIiwiXHUwMGNhIjoiRSIsIlx1MDBjYiI6IkUiLCJcdTAwZTgiOiJlIiwiXHUwMGU5IjoiZSIsIlx1MDBlYSI6ImUiLCJcdTAwZWIiOiJlIiwiXHUwMGNjIjoiSSIsIlx1MDBjZCI6IkkiLCJcdTAwY2UiOiJJIiwiXHUwMGNmIjoiSSIsIlx1MDBlYyI6ImkiLCJcdTAwZWQiOiJpIiwiXHUwMGVlIjoiaSIsIlx1MDBlZiI6ImkiLCJcdTAwZDEiOiJOIiwiXHUwMGYxIjoibiIsIlx1MDBkMiI6Ik8iLCJcdTAwZDMiOiJPIiwiXHUwMGQ0IjoiTyIsIlx1MDBkNSI6Ik8iLCJcdTAwZDYiOiJPIiwiXHUwMGQ4IjoiTyIsIlx1MDBmMiI6Im8iLCJcdTAwZjMiOiJvIiwiXHUwMGY0IjoibyIsIlx1MDBmNSI6Im8iLAoiXHUwMGY2IjoibyIsIlx1MDBmOCI6Im8iLCJcdTAwZDkiOiJVIiwiXHUwMGRhIjoiVSIsIlx1MDBkYiI6IlUiLCJcdTAwZGMiOiJVIiwiXHUwMGY5IjoidSIsIlx1MDBmYSI6InUiLCJcdTAwZmIiOiJ1IiwiXHUwMGZjIjoidSIsIlx1MDBkZCI6IlkiLCJcdTAwZmQiOiJ5IiwiXHUwMGZmIjoieSIsIlx1MDBjNiI6IkFlIiwiXHUwMGU2IjoiYWUiLCJcdTAwZGUiOiJUaCIsIlx1MDBmZSI6InRoIiwiXHUwMGRmIjoic3MifSxrZT17Ilx4MjYiOiJceDI2YW1wOyIsIlx4M2MiOiJceDI2bHQ7IiwiXHgzZSI6Ilx4MjZndDsiLCciJzoiXHgyNnF1b3Q7IiwiJyI6Ilx4MjYjMzk7IiwiYCI6Ilx4MjYjOTY7In0sV2M9eyJceDI2YW1wOyI6Ilx4MjYiLCJceDI2bHQ7IjoiXHgzYyIsIlx4MjZndDsiOiJceDNlIiwiXHgyNnF1b3Q7IjonIicsIlx4MjYjMzk7IjoiJyIsIlx4MjYjOTY7IjoiYCJ9LFpiPXsiZnVuY3Rpb24iOiEwLG9iamVjdDohMH0sYWQ9ezA6IngzMCIsMToieDMxIiwyOiJ4MzIiLAozOiJ4MzMiLDQ6IngzNCIsNToieDM1Iiw2OiJ4MzYiLDc6IngzNyIsODoieDM4Iiw5OiJ4MzkiLEE6Ing0MSIsQjoieDQyIixDOiJ4NDMiLEQ6Ing0NCIsRToieDQ1IixGOiJ4NDYiLGE6Ing2MSIsYjoieDYyIixjOiJ4NjMiLGQ6Ing2NCIsZToieDY1IixmOiJ4NjYiLG46Ing2ZSIscjoieDcyIix0OiJ4NzQiLHU6Ing3NSIsdjoieDc2Iix4OiJ4NzgifSx6Yz17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxiZD1aYlt0eXBlb2YgZXhwb3J0c10mJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLHRjPVpiW3R5cGVvZiBtb2R1bGVdJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxsZT1aYlt0eXBlb2Ygc2VsZl0mJnNlbGYmJnNlbGYuT2JqZWN0JiZzZWxmLHpkPVpiW3R5cGVvZiB3aW5kb3ddJiZ3aW5kb3cmJndpbmRvdy5PYmplY3QmJndpbmRvdyxjZD10YyYmdGMuZXhwb3J0cz09PQpiZCYmYmQsaWM9YmQmJnRjJiYib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0JiZnbG9iYWx8fHpkIT09KHRoaXMmJnRoaXMud2luZG93KSYmemR8fGxlfHx0aGlzLEFjPUEoKTtiZCYmdGM/Y2Q/KHRjLmV4cG9ydHM9QWMpLl89QWM6YmQuXz1BYzppYy5fPUFjfSkuY2FsbCh0aGlzKTsidW5kZWZpbmVkIiE9dHlwZW9mIFlVSSYmKFlVSS5fWVVJPVlVSSk7CnZhciBZVUk9ZnVuY3Rpb24oKXt2YXIgYT0wLEU9dGhpcyxxPWFyZ3VtZW50cyx0PXEubGVuZ3RoLGY9ZnVuY3Rpb24oYyxiKXtyZXR1cm4gYyYmYy5oYXNPd25Qcm9wZXJ0eSYmYyBpbnN0YW5jZW9mIGJ9LGQ9InVuZGVmaW5lZCIhPT10eXBlb2YgWVVJX2NvbmZpZyYmWVVJX2NvbmZpZztmKEUsWVVJKT8oRS5faW5pdCgpLFlVSS5HbG9iYWxDb25maWcmJkUuYXBwbHlDb25maWcoWVVJLkdsb2JhbENvbmZpZyksZCYmRS5hcHBseUNvbmZpZyhkKSx0fHwoRS5fYWZ0ZXJDb25maWcoKSxFLl9zZXR1cCgpKSk6RT1uZXcgWVVJO2lmKHQpe2Zvcig7YTx0O2ErKylFLmFwcGx5Q29uZmlnKHFbYV0pO0UuX2FmdGVyQ29uZmlnKCk7RS5fc2V0dXAoKX1FLmluc3RhbmNlT2Y9ZjtyZXR1cm4gRX07CihmdW5jdGlvbigpe3ZhciBhLEUscT0icGF0Y2hlZC12My4xOC4xIix0PWZ1bmN0aW9uKCl7fSxmPUFycmF5LnByb3RvdHlwZS5zbGljZSxkPXsiaW8ueGRyUmVhZHkiOjEsImlvLnhkclJlc3BvbnNlIjoxLCJTV0YuZXZlbnRIYW5kbGVyIjoxfSxjPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LGI9Yz93aW5kb3c6bnVsbCxnPWM/Yi5kb2N1bWVudDpudWxsLGU9ZyYmZy5kb2N1bWVudEVsZW1lbnQ7YT1lJiZlLmNsYXNzTmFtZTt2YXIgaz17fSxtPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHA9ZnVuY3Rpb24oQSxILEYsQil7QSYmQS5hZGRFdmVudExpc3RlbmVyP0EuYWRkRXZlbnRMaXN0ZW5lcihILEYsQik6QSYmQS5hdHRhY2hFdmVudCYmQS5hdHRhY2hFdmVudCgib24iK0gsRil9LHM9ZnVuY3Rpb24oQSxILEYsQil7aWYoQSYmQS5yZW1vdmVFdmVudExpc3RlbmVyKXRyeXtBLnJlbW92ZUV2ZW50TGlzdGVuZXIoSCxGLEIpfWNhdGNoKEkpe31lbHNlIEEmJkEuZGV0YWNoRXZlbnQmJgpBLmRldGFjaEV2ZW50KCJvbiIrSCxGKX0sbD1mdW5jdGlvbigpe1lVSS5FbnYuRE9NUmVhZHk9ITA7YyYmcyhnLCJET01Db250ZW50TG9hZGVkIixsKX0saD1mdW5jdGlvbigpe1lVSS5FbnYud2luZG93TG9hZGVkPSEwO1lVSS5FbnYuRE9NUmVhZHk9ITA7YyYmcyh3aW5kb3csImxvYWQiLGgpfSx1PWZ1bmN0aW9uKEEsSCl7dmFyIEY9QS5FbnYuX2xvYWRlcixCPVsibG9hZGVyLWJhc2UiXSxJPVlVSS5FbnYubW9kcztGPyhGLmlnbm9yZVJlZ2lzdGVyZWQ9ITEsRi5vbkVuZD1udWxsLEYuZGF0YT1udWxsLEYucmVxdWlyZWQ9W10sRi5sb2FkVHlwZT1udWxsKTooRj1uZXcgQS5Mb2FkZXIoQS5jb25maWcpLEEuRW52Ll9sb2FkZXI9Rik7SSYmSS5sb2FkZXImJihCPVtdLmNvbmNhdChCLFlVSS5FbnYubG9hZGVyRXh0cmFzKSk7WVVJLkVudi5jb3JlPUEuQXJyYXkuZGVkdXBlKFtdLmNvbmNhdChZVUkuRW52LmNvcmUsQikpO3JldHVybiBGfSx3PWZ1bmN0aW9uKEEsSCl7Zm9yKHZhciBGIGluIEgpSC5oYXNPd25Qcm9wZXJ0eShGKSYmCihBW0ZdPUhbRl0pfSx6PXtzdWNjZXNzOiEwfTtlJiYtMT09YS5pbmRleE9mKCJ5dWkzLWpzLWVuYWJsZWQiKSYmKGEmJihhKz0iICIpLGUuY2xhc3NOYW1lPWErInl1aTMtanMtZW5hYmxlZCIpOy0xPHEuaW5kZXhPZigiQCIpJiYocT0iMy41LjAiKTthPXthcHBseUNvbmZpZzpmdW5jdGlvbihBKXtBPUF8fHQ7dmFyIEgsRixCPXRoaXMuY29uZmlnLEk9Qi5tb2R1bGVzLE09Qi5ncm91cHMsRD1CLmFsaWFzZXMsSj10aGlzLkVudi5fbG9hZGVyO2ZvcihGIGluIEEpQS5oYXNPd25Qcm9wZXJ0eShGKSYmKEg9QVtGXSxJJiYibW9kdWxlcyI9PUY/dyhJLEgpOkQmJiJhbGlhc2VzIj09Rj93KEQsSCk6TSYmImdyb3VwcyI9PUY/dyhNLEgpOiJ3aW4iPT1GPyhCW0ZdPUgmJkguY29udGVudFdpbmRvd3x8SCxCLmRvYz1CW0ZdP0JbRl0uZG9jdW1lbnQ6bnVsbCk6Il95dWlkIiE9RiYmKEJbRl09SCkpO0omJkouX2NvbmZpZyhBKX0sX2NvbmZpZzpmdW5jdGlvbihBKXt0aGlzLmFwcGx5Q29uZmlnKEEpfSwKX2luaXQ6ZnVuY3Rpb24oKXt2YXIgQSxILEY9dGhpcztIPVlVSS5FbnY7dmFyIEI9Ri5FbnYsSTtGLnZlcnNpb249cTtpZighQil7Ri5FbnY9e2NvcmU6ImdldCBmZWF0dXJlcyBpbnRsLWJhc2UgeXVpLWxvZyB5dWktbGF0ZXIgbG9hZGVyLWJhc2UgbG9hZGVyLXJvbGx1cCBsb2FkZXIteXVpMyIuc3BsaXQoIiAiKSxsb2FkZXJFeHRyYXM6WyJsb2FkZXItcm9sbHVwIiwibG9hZGVyLXl1aTMiXSxtb2RzOnt9LHZlcnNpb25zOnt9LGJhc2U6Imh0dHA6Ly95dWkueWFob29hcGlzLmNvbS8iLGNkbjoiaHR0cDovL3l1aS55YWhvb2FwaXMuY29tLyIrcSsiLyIsX2lkeDowLF91c2VkOnt9LF9hdHRhY2hlZDp7fSxfZXhwb3J0ZWQ6e30sX21pc3NlZDpbXSxfeWlkeDowLF91aWR4OjAsX2d1aWRwOiJ5IixfbG9hZGVkOnt9LF9CQVNFX1JFOi8oPzpcPyg/OlteJl0qJikqKFteJl0qKSk/XGIoYXVpfHl1aSg/Oi1cdyspPylcL1wyKD86LShtaW58ZGVidWcpKT9cLmpzLyxwYXJzZUJhc2VQYXRoOmZ1bmN0aW9uKE0sCkQpe3ZhciBKPU0ubWF0Y2goRCksUCxWO0omJihQPVJlZ0V4cC5sZWZ0Q29udGV4dHx8TS5zbGljZSgwLE0uaW5kZXhPZihKWzBdKSksVj1KWzNdLEpbMV0mJihQKz0iPyIrSlsxXSksUD17ZmlsdGVyOlYscGF0aDpQfSk7cmV0dXJuIFB9LGdldEJhc2U6SCYmSC5nZXRCYXNlfHxmdW5jdGlvbihNKXt2YXIgRD1nJiZnLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKXx8W10sSj1CLmNkbixQLFYsWTtWPTA7Zm9yKFk9RC5sZW5ndGg7VjxZOysrVilpZihQPURbVl0uc3JjKWlmKFA9Ri5FbnYucGFyc2VCYXNlUGF0aChQLE0pKXtBPVAuZmlsdGVyO0o9UC5wYXRoO2JyZWFrfXJldHVybiBKfX07Qj1GLkVudjtCLl9sb2FkZWRbcV09e307aWYoSCYmRiE9PVlVSSlCLl95aWR4PSsrSC5feWlkeCxCLl9ndWlkcD0oInl1aV8iK3ErIl8iK0IuX3lpZHgrIl8iK20pLnJlcGxhY2UoL1teYS16MC05X10rL2csIl8iKTtlbHNlIGlmKFlVSS5fWVVJKXtIPVlVSS5fWVVJLkVudjtCLl95aWR4Kz0KSC5feWlkeDtCLl91aWR4Kz1ILl91aWR4O2ZvcihJIGluIEgpSSBpbiBCfHwoQltJXT1IW0ldKTtkZWxldGUgWVVJLl9ZVUl9Ri5pZD1GLnN0YW1wKEYpO2tbRi5pZF09Rn1GLmNvbnN0cnVjdG9yPVlVSTtGLmNvbmZpZz1GLmNvbmZpZ3x8e2Jvb3RzdHJhcDohMCxjYWNoZVVzZTohMCxkZWJ1ZzohMCxkb2M6ZyxmZXRjaENTUzohMCx0aHJvd0ZhaWw6ITAsdXNlQnJvd3NlckNvbnNvbGU6ITAsdXNlTmF0aXZlRVM1OiEwLHdpbjpifTtnJiYhZy5nZXRFbGVtZW50QnlJZCgieXVpMy1jc3Mtc3RhbXAiKT8oSD1nLmNyZWF0ZUVsZW1lbnQoImRpdiIpLEguaW5uZXJIVE1MPSdceDNjZGl2IGlkXHgzZCJ5dWkzLWNzcy1zdGFtcCIgc3R5bGVceDNkInBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OyB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudCJceDNlXHgzYy9kaXZceDNlJyxZVUkuRW52LmNzc1N0YW1wRWw9SC5maXJzdENoaWxkLGcuYm9keT9nLmJvZHkuYXBwZW5kQ2hpbGQoWVVJLkVudi5jc3NTdGFtcEVsKToKZS5pbnNlcnRCZWZvcmUoWVVJLkVudi5jc3NTdGFtcEVsLGUuZmlyc3RDaGlsZCkpOmcmJmcuZ2V0RWxlbWVudEJ5SWQoInl1aTMtY3NzLXN0YW1wIikmJiFZVUkuRW52LmNzc1N0YW1wRWwmJihZVUkuRW52LmNzc1N0YW1wRWw9Zy5nZXRFbGVtZW50QnlJZCgieXVpMy1jc3Mtc3RhbXAiKSk7Ri5jb25maWcubGFuZz1GLmNvbmZpZy5sYW5nfHwiZW4tVVMiO0YuY29uZmlnLmJhc2U9WVVJLmNvbmZpZy5iYXNlfHxZVUkuY29uZmlnLmRlZmF1bHRCYXNlJiZZVUkuY29uZmlnLnJvb3QmJllVSS5jb25maWcuZGVmYXVsdEJhc2UrWVVJLmNvbmZpZy5yb290fHxGLkVudi5nZXRCYXNlKEYuRW52Ll9CQVNFX1JFKTtBJiYibWluZGVidWciLmluZGV4T2YoQSl8fChBPSJtaW4iKTtBPUE/Ii0iK0E6QTtGLmNvbmZpZy5sb2FkZXJQYXRoPVlVSS5jb25maWcubG9hZGVyUGF0aHx8ImxvYWRlci9sb2FkZXIiK0ErIi5qcyJ9LF9hZnRlckNvbmZpZzpmdW5jdGlvbigpe3RoaXMuY29uZmlnLmhhc093blByb3BlcnR5KCJnbG9iYWwiKXx8Cih0aGlzLmNvbmZpZy5nbG9iYWw9RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSl9LF9zZXR1cDpmdW5jdGlvbigpe3ZhciBBLEg9W10sRj1ZVUkuRW52Lm1vZHM7QT10aGlzLmNvbmZpZy5leHRlbmRlZENvcmV8fFtdO3ZhciBCPXRoaXMuY29uZmlnLmNvcmV8fFtdLmNvbmNhdChZVUkuRW52LmNvcmUpLmNvbmNhdChBKTtmb3IoQT0wO0E8Qi5sZW5ndGg7QSsrKUZbQltBXV0mJkgucHVzaChCW0FdKTt0aGlzLl9hdHRhY2goWyJ5dWktYmFzZSJdKTt0aGlzLl9hdHRhY2goSCk7dGhpcy5Mb2FkZXImJnUodGhpcyl9LGFwcGx5VG86ZnVuY3Rpb24oQSxILEYpe2lmKCEoSCBpbiBkKSlyZXR1cm4gdGhpcy5sb2coSCsiOiBhcHBseVRvIG5vdCBhbGxvd2VkIiwid2FybiIsInl1aSIpLG51bGw7QT1rW0FdO3ZhciBCLEksTTtpZihBKXtCPUguc3BsaXQoIi4iKTtJPUE7Zm9yKE09MDtNPEIubGVuZ3RoO00rPTEpKEk9SVtCW01dXSl8fHRoaXMubG9nKCJhcHBseVRvIG5vdCBmb3VuZDogIitILAoid2FybiIsInl1aSIpO3JldHVybiBJJiZJLmFwcGx5KEEsRil9cmV0dXJuIG51bGx9LGFkZDpmdW5jdGlvbihBLEgsRixCKXtCPUJ8fHt9O3ZhciBJPVlVSS5FbnYsTT17bmFtZTpBLGZuOkgsdmVyc2lvbjpGLGRldGFpbHM6Qn07SD17fTt2YXIgRCxKPUkudmVyc2lvbnM7SS5tb2RzW0FdPU07SltGXT1KW0ZdfHx7fTtKW0ZdW0FdPU07Zm9yKEQgaW4gaylrLmhhc093blByb3BlcnR5KEQpJiYoRj1rW0RdLCFIW0YuaWRdJiYoSFtGLmlkXT0hMCxGPUYuRW52Ll9sb2FkZXIpKSYmKChJPUYuZ2V0TW9kdWxlSW5mbyhBKSkmJiFJLnRlbXB8fEYuYWRkTW9kdWxlKEIsQSkpO3JldHVybiB0aGlzfSxfYXR0YWNoOmZ1bmN0aW9uKEEsSCl7dmFyIEYsQixJLE0sRCxKLFAsVj1ZVUkuRW52Lm1vZHMsWT1ZVUkuRW52LmFsaWFzZXMsbmE9WVVJLkVudi5fcmVuZGVyZWRNb2RzLGZhPXRoaXMuRW52Ll9sb2FkZXIsaWE9dGhpcy5FbnYuX2F0dGFjaGVkLFo9dGhpcy5FbnYuX2V4cG9ydGVkLGVhPUEubGVuZ3RoOwpKPVtdO3ZhciBvYSxBYSxwYSxGYTtmb3IoRj0wO0Y8ZWE7RisrKWlmKEI9QVtGXSxKLnB1c2goQiksZmEmJmZhLmNvbmRpdGlvbnNbQl0pZm9yKE0gaW4gZmEuY29uZGl0aW9uc1tCXSlmYS5jb25kaXRpb25zW0JdLmhhc093blByb3BlcnR5KE0pJiYoRD0oST1mYS5jb25kaXRpb25zW0JdW01dKSYmKEkudWEmJnRoaXMuVUFbSS51YV18fEkudGVzdCYmSS50ZXN0KHRoaXMpKSkmJkoucHVzaChJLm5hbWUpO0E9SjtlYT1BLmxlbmd0aDtmb3IoRj0wO0Y8ZWE7RisrKWlmKCFpYVtBW0ZdXSlpZihCPUFbRl0sST1WW0JdLFkmJllbQl0mJiFJKXRoaXMuX2F0dGFjaChZW0JdKTtlbHNlIGlmKEkpe2lhW0JdPSEwO2ZvcihNPTA7TTx0aGlzLkVudi5fbWlzc2VkLmxlbmd0aDtNKyspdGhpcy5FbnYuX21pc3NlZFtNXT09PUImJih0aGlzLm1lc3NhZ2UoIkZvdW5kOiAiK0IrIiAod2FzIHJlcG9ydGVkIGFzIG1pc3NpbmcgZWFybGllcikiLCJ3YXJuIiwieXVpIiksdGhpcy5FbnYuX21pc3NlZC5zcGxpY2UoTSwKMSkpO2lmKGZhJiYhZmEuX2NhbkJlQXR0YWNoZWQoQikpYnJlYWs7aWYoZmEmJm5hJiZuYVtCXSYmbmFbQl0udGVtcCl7ZmEuZ2V0UmVxdWlyZXMobmFbQl0pO0Q9W107Sj1mYS5nZXRNb2R1bGVJbmZvKEIpO2ZvcihNIGluIEouZXhwYW5kZWRfbWFwKUouZXhwYW5kZWRfbWFwLmhhc093blByb3BlcnR5KE0pJiZELnB1c2goTSk7dGhpcy5fYXR0YWNoKEQpfU09SS5kZXRhaWxzO0Q9TS5yZXF1aXJlcztvYT1NLmVzO0o9TS51c2U7UD1NLmFmdGVyO00ubGFuZyYmKEQ9RHx8W10sRC51bnNoaWZ0KCJpbnRsIikpO2lmKEQpZm9yKEFhPUQubGVuZ3RoLE09MDtNPEFhO00rKylpZighaWFbRFtNXV0pe2lmKCF0aGlzLl9hdHRhY2goRCkpcmV0dXJuITE7YnJlYWt9aWYoUClmb3IoTT0wO008UC5sZW5ndGg7TSsrKWlmKCFpYVtQW01dXSl7aWYoIXRoaXMuX2F0dGFjaChQLCEwKSlyZXR1cm4hMTticmVha31pZihJLmZuKXtQPVt0aGlzLEJdO2lmKG9hJiYoRmE9e30scGE9e30sUC5wdXNoKEZhLApwYSksRCkpZm9yKEFhPUQubGVuZ3RoLE09MDtNPEFhO00rKylGYVtEW01dXT1aLmhhc093blByb3BlcnR5KERbTV0pP1pbRFtNXV06dGhpcztpZih0aGlzLmNvbmZpZy50aHJvd0ZhaWwpcGE9SS5mbi5hcHBseShvYT92b2lkIDA6SSxQKTtlbHNlIHRyeXtwYT1JLmZuLmFwcGx5KG9hP3ZvaWQgMDpJLFApfWNhdGNoKEVhKXtyZXR1cm4gdGhpcy5lcnJvcigiQXR0YWNoIGVycm9yOiAiK0IsRWEsQiksITF9b2EmJihaW0JdPXBhLChCPUkuZGV0YWlscy5jb25kaXRpb24pJiYiaW5zdGVhZCI9PT1CLndoZW4mJihaW0IudHJpZ2dlcl09cGEpKX1pZihKKWZvcihNPTA7TTxKLmxlbmd0aDtNKyspaWYoIWlhW0pbTV1dKXtpZighdGhpcy5fYXR0YWNoKEopKXJldHVybiExO2JyZWFrfX1lbHNlKEo9ZmEmJmZhLmdldE1vZHVsZUluZm8oQikpJiYoSD0hMCksIUgmJkImJi0xPT09Qi5pbmRleE9mKCJza2luLSIpJiYtMT09PUIuaW5kZXhPZigiY3NzIikmJih0aGlzLkVudi5fbWlzc2VkLnB1c2goQiksCnRoaXMuRW52Ll9taXNzZWQ9dGhpcy5BcnJheS5kZWR1cGUodGhpcy5FbnYuX21pc3NlZCksdGhpcy5tZXNzYWdlKCJOT1QgbG9hZGVkOiAiK0IsIndhcm4iLCJ5dWkiKSk7cmV0dXJuITB9LF9kZWxheUNhbGxiYWNrOmZ1bmN0aW9uKEEsSCl7dmFyIEY9dGhpcyxCPVsiZXZlbnQtYmFzZSJdO0g9Ri5MYW5nLmlzT2JqZWN0KEgpP0g6e2V2ZW50Okh9OyJsb2FkIj09PUguZXZlbnQmJkIucHVzaCgiZXZlbnQtc3ludGhldGljIik7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIEk9YXJndW1lbnRzO0YuX3VzZShCLGZ1bmN0aW9uKCl7Ri5vbihILmV2ZW50LGZ1bmN0aW9uKCl7SVsxXS5kZWxheVVudGlsPUguZXZlbnQ7QS5hcHBseShGLEkpfSxILmFyZ3MpfSl9fSx1c2U6ZnVuY3Rpb24oKXt2YXIgQT1mLmNhbGwoYXJndW1lbnRzLDApLEg9QVtBLmxlbmd0aC0xXSxGPTAsQixJPXRoaXMuRW52LE09ITA7dGhpcy5MYW5nLmlzRnVuY3Rpb24oSCk/KEEucG9wKCksdGhpcy5jb25maWcuZGVsYXlVbnRpbCYmCihIPXRoaXMuX2RlbGF5Q2FsbGJhY2soSCx0aGlzLmNvbmZpZy5kZWxheVVudGlsKSkpOkg9bnVsbDt0aGlzLkxhbmcuaXNBcnJheShBWzBdKSYmKEE9QVswXSk7aWYodGhpcy5jb25maWcuY2FjaGVVc2Upe2Zvcig7Qj1BW0YrK107KWlmKCFJLl9hdHRhY2hlZFtCXSl7TT0hMTticmVha31pZihNKXJldHVybiB0aGlzLl9ub3RpZnkoSCx6LEEpLHRoaXN9dGhpcy5fbG9hZGluZz8odGhpcy5fdXNlUXVldWU9dGhpcy5fdXNlUXVldWV8fG5ldyB0aGlzLlF1ZXVlLHRoaXMuX3VzZVF1ZXVlLmFkZChbQSxIXSkpOnRoaXMuX3VzZShBLGZ1bmN0aW9uKEQsSil7RC5fbm90aWZ5KEgsSixBKX0pO3JldHVybiB0aGlzfSxyZXF1aXJlOmZ1bmN0aW9uKCl7dmFyIEE9Zi5jYWxsKGFyZ3VtZW50cyksSDsiZnVuY3Rpb24iPT09dHlwZW9mIEFbQS5sZW5ndGgtMV0mJihIPUEucG9wKCksQS5wdXNoKGZ1bmN0aW9uKEYpe3ZhciBCLEk9QS5sZW5ndGgsTT1GLkVudi5fZXhwb3J0ZWQsRD17fTtmb3IoQj0KMDtCPEk7QisrKU0uaGFzT3duUHJvcGVydHkoQVtCXSkmJihEW0FbQl1dPU1bQVtCXV0pO0guY2FsbCh2b2lkIDAsRixEKX0pKTt0aGlzLnVzZS5hcHBseSh0aGlzLEEpfSxfbm90aWZ5OmZ1bmN0aW9uKEEsSCxGKXtpZighSC5zdWNjZXNzJiZ0aGlzLmNvbmZpZy5sb2FkRXJyb3JGbil0aGlzLmNvbmZpZy5sb2FkRXJyb3JGbi5jYWxsKHRoaXMsdGhpcyxBLEgsRik7ZWxzZSBpZihBKWlmKHRoaXMuRW52Ll9taXNzZWQmJnRoaXMuRW52Ll9taXNzZWQubGVuZ3RoJiYoSC5tc2c9Ik1pc3NpbmcgbW9kdWxlczogIit0aGlzLkVudi5fbWlzc2VkLmpvaW4oKSxILnN1Y2Nlc3M9ITEpLHRoaXMuY29uZmlnLnRocm93RmFpbClBKHRoaXMsSCk7ZWxzZSB0cnl7QSh0aGlzLEgpfWNhdGNoKEIpe3RoaXMuZXJyb3IoInVzZSBjYWxsYmFjayBlcnJvciIsQixGKX19LF91c2U6ZnVuY3Rpb24oQSxIKXt0aGlzLkFycmF5fHx0aGlzLl9hdHRhY2goWyJ5dWktYmFzZSJdKTt2YXIgRixCLEk9dGhpcyxNPQpZVUkuRW52LEQ9TS5tb2RzLEo9SS5FbnYsUD1KLl91c2VkLFY9TS5hbGlhc2VzLFk9TS5fbG9hZGVyUXVldWU7Qj1JLkFycmF5O3ZhciBuYT1JLmNvbmZpZyxmYT1uYS5ib290c3RyYXAsaWE9W10sWj1bXSxlYT0hMCxlYT1uYS5mZXRjaENTUyxvYT1mdW5jdGlvbihwYSxGYSl7dmFyIEVhPTAsV2E9W10sVWEsd2IsQWIsTWI7aWYocGEubGVuZ3RoKXtpZihWKXtVYT1wYS5sZW5ndGg7Zm9yKEVhPTA7RWE8VWE7RWErKylWW3BhW0VhXV0mJiFEW3BhW0VhXV0/V2E9W10uY29uY2F0KFdhLFZbcGFbRWFdXSk6V2EucHVzaChwYVtFYV0pO3BhPVdhfVVhPXBhLmxlbmd0aDtmb3IoRWE9MDtFYTxVYTtFYSsrKVdhPXBhW0VhXSxGYXx8Wi5wdXNoKFdhKSxQW1dhXXx8KHdiPURbV2FdLE1iPUFiPW51bGwsd2I/KFBbV2FdPSEwLEFiPXdiLmRldGFpbHMucmVxdWlyZXMsTWI9d2IuZGV0YWlscy51c2UpOk0uX2xvYWRlZFtxXVtXYV0/UFtXYV09ITA6aWEucHVzaChXYSksQWImJkFiLmxlbmd0aCYmCm9hKEFiKSxNYiYmTWIubGVuZ3RoJiZvYShNYiwxKSl9fSxBYT1mdW5jdGlvbihwYSl7dmFyIEZhPXBhfHx7c3VjY2VzczohMCxtc2c6Im5vdCBkeW5hbWljIn0sRWEsV2E9ITAsVWE9RmEuZGF0YTtJLl9sb2FkaW5nPSExO1VhJiYocGE9aWEsaWE9W10sWj1bXSxvYShVYSksKEVhPWlhLmxlbmd0aCkmJltdLmNvbmNhdChpYSkuc29ydCgpLmpvaW4oKT09cGEuc29ydCgpLmpvaW4oKSYmKEVhPSExKSk7RWEmJlVhPyhJLl9sb2FkaW5nPSEwLEkuX3VzZShpYSxmdW5jdGlvbigpe0kuX2F0dGFjaChVYSkmJkkuX25vdGlmeShILEZhLFVhKX0pKTooVWEmJihXYT1JLl9hdHRhY2goVWEpKSxXYSYmSS5fbm90aWZ5KEgsRmEsQSkpO0kuX3VzZVF1ZXVlJiZJLl91c2VRdWV1ZS5zaXplKCkmJiFJLl9sb2FkaW5nJiZJLl91c2UuYXBwbHkoSSxJLl91c2VRdWV1ZS5uZXh0KCkpfTtpZigiKiI9PT1BWzBdKXtBPVtdO2ZvcihGIGluIEQpRC5oYXNPd25Qcm9wZXJ0eShGKSYmQS5wdXNoKEYpOyhlYT0KSS5fYXR0YWNoKEEpKSYmQWEoKTtyZXR1cm4gSX0hRC5sb2FkZXImJiFEWyJsb2FkZXItYmFzZSJdfHxJLkxvYWRlcnx8SS5fYXR0YWNoKFsibG9hZGVyIisoRC5sb2FkZXI/IiI6Ii1iYXNlIildKTtmYSYmSS5Mb2FkZXImJkEubGVuZ3RoJiYoRj11KEkpLEYucmVxdWlyZShBKSxGLmlnbm9yZVJlZ2lzdGVyZWQ9ITAsRi5fYm9vdD0hMCxGLmNhbGN1bGF0ZShudWxsLGVhP251bGw6ImpzIiksQT1GLnNvcnRlZCxGLl9ib290PSExKTtvYShBKTtpZihGPWlhLmxlbmd0aClpYT1CLmRlZHVwZShpYSksRj1pYS5sZW5ndGg7ZmEmJkYmJkkuTG9hZGVyPyhJLl9sb2FkaW5nPSEwLEY9dShJKSxGLm9uRW5kPUFhLEYuY29udGV4dD1JLEYuZGF0YT1BLEYuaWdub3JlUmVnaXN0ZXJlZD0hMSxGLnJlcXVpcmUoaWEpLEYuaW5zZXJ0KG51bGwsZWE/bnVsbDoianMiKSk6ZmEmJkYmJkkuR2V0JiYhSi5ib290c3RyYXBwZWQ/KEkuX2xvYWRpbmc9ITAsQj1mdW5jdGlvbigpe0kuX2xvYWRpbmc9ITE7ClkucnVubmluZz0hMTtKLmJvb3RzdHJhcHBlZD0hMDtNLl9ib290c3RyYXBwaW5nPSExO0kuX2F0dGFjaChbImxvYWRlciJdKSYmSS5fdXNlKEEsSCl9LE0uX2Jvb3RzdHJhcHBpbmc/WS5hZGQoQik6KE0uX2Jvb3RzdHJhcHBpbmc9ITAsSS5HZXQuc2NyaXB0KG5hLmJhc2UrbmEubG9hZGVyUGF0aCx7b25FbmQ6Qn0pKSk6KGVhPUkuX2F0dGFjaChBKSkmJkFhKCk7cmV0dXJuIEl9LG5hbWVzcGFjZTpmdW5jdGlvbigpe2Zvcih2YXIgQT1hcmd1bWVudHMsSCxGPTAsQixJO0Y8QS5sZW5ndGg7RisrKWlmKEg9dGhpcyxCPUFbRl0sLTE8Qi5pbmRleE9mKCIuIikpZm9yKEk9Qi5zcGxpdCgiLiIpLEI9IllBSE9PIj09SVswXT8xOjA7QjxJLmxlbmd0aDtCKyspSFtJW0JdXT1IW0lbQl1dfHx7fSxIPUhbSVtCXV07ZWxzZSBIW0JdPUhbQl18fHt9LEg9SFtCXTtyZXR1cm4gSH0sbG9nOnQsbWVzc2FnZTp0LGR1bXA6ZnVuY3Rpb24oQSl7cmV0dXJuIiIrQX0sZXJyb3I6ZnVuY3Rpb24oQSxILApGKXt2YXIgQjt0aGlzLmNvbmZpZy5lcnJvckZuJiYoQj10aGlzLmNvbmZpZy5lcnJvckZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7aWYoQil0aGlzLm1lc3NhZ2UoQSwiZXJyb3IiLCIiK0YpO2Vsc2UgdGhyb3cgSHx8RXJyb3IoQSk7cmV0dXJuIHRoaXN9LGd1aWQ6ZnVuY3Rpb24oQSl7dmFyIEg9dGhpcy5FbnYuX2d1aWRwKyJfIisgKyt0aGlzLkVudi5fdWlkeDtyZXR1cm4gQT9BK0g6SH0sc3RhbXA6ZnVuY3Rpb24oQSxIKXt2YXIgRjtpZighQSlyZXR1cm4gQTtGPUEudW5pcXVlSUQmJkEubm9kZVR5cGUmJjkhPT1BLm5vZGVUeXBlP0EudW5pcXVlSUQ6InN0cmluZyI9PT10eXBlb2YgQT9BOkEuX3l1aWQ7aWYoIUYmJihGPXRoaXMuZ3VpZCgpLCFIKSl0cnl7QS5feXVpZD1GfWNhdGNoKEIpe0Y9bnVsbH1yZXR1cm4gRn0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuRXZlbnQmJnRoaXMuRXZlbnQuX3VubG9hZCgpO2RlbGV0ZSBrW3RoaXMuaWRdO2RlbGV0ZSB0aGlzLkVudjtkZWxldGUgdGhpcy5jb25maWd9fTsKWVVJLnByb3RvdHlwZT1hO2ZvcihFIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShFKSYmKFlVSVtFXT1hW0VdKTtZVUkuYXBwbHlDb25maWc9ZnVuY3Rpb24oQSl7QSYmKFlVSS5HbG9iYWxDb25maWcmJnRoaXMucHJvdG90eXBlLmFwcGx5Q29uZmlnLmNhbGwodGhpcyxZVUkuR2xvYmFsQ29uZmlnKSx0aGlzLnByb3RvdHlwZS5hcHBseUNvbmZpZy5jYWxsKHRoaXMsQSksWVVJLkdsb2JhbENvbmZpZz10aGlzLmNvbmZpZyl9O1lVSS5faW5pdCgpO2M/KHAoZywiRE9NQ29udGVudExvYWRlZCIsbCkscCh3aW5kb3csImxvYWQiLGgpKToobCgpLGgoKSk7WVVJLkVudi5hZGQ9cDtZVUkuRW52LnJlbW92ZT1zOyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmKGV4cG9ydHMuWVVJPVlVSSxZVUkuc2V0TG9hZEhvb2s9ZnVuY3Rpb24oQSl7WVVJLl9nZXRMb2FkSG9vaz1BfSxZVUkuX2dldExvYWRIb29rPW51bGwpO1lVSS5FbnZbcV09e319KSgpOwpZVUkuYWRkKCJ5dWktYmFzZSIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKEIsSSxNKXt2YXIgRDtJfHwoST0wKTtpZihNfHxxLnRlc3QoQikpdHJ5e3JldHVybiBsLnNsaWNlLmNhbGwoQixJKX1jYXRjaChKKXtEPVtdO2ZvcihNPUIubGVuZ3RoO0k8TTsrK0kpRC5wdXNoKEJbSV0pO3JldHVybiBEfXJldHVybltCXX1mdW5jdGlvbiB0KCl7dGhpcy5faW5pdCgpO3RoaXMuYWRkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZj1hLkxhbmd8fChhLkxhbmc9e30pLGQ9U3RyaW5nLnByb3RvdHlwZSxjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsYj17dW5kZWZpbmVkOiJ1bmRlZmluZWQiLG51bWJlcjoibnVtYmVyIiwiYm9vbGVhbiI6ImJvb2xlYW4iLHN0cmluZzoic3RyaW5nIiwiW29iamVjdCBGdW5jdGlvbl0iOiJmdW5jdGlvbiIsIltvYmplY3QgUmVnRXhwXSI6InJlZ2V4cCIsIltvYmplY3QgQXJyYXldIjoiYXJyYXkiLCJbb2JqZWN0IERhdGVdIjoiZGF0ZSIsIltvYmplY3QgRXJyb3JdIjoiZXJyb3IifSwKZz0vXHtccyooW158fV0rPylccyooPzpcfChbXn1dKikpP1xzKlx9L2csZT0vXltcdC1cciBcdTAwYTBcdTE2ODBcdTE4MGVcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmXSsvLGs9L1tcdC1cciBcdTAwYTBcdTE2ODBcdTE4MGVcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmXSskLyxtPVJlZ0V4cChlLnNvdXJjZSsifCIray5zb3VyY2UsImciKSxwPS9ce1xzKlxbKD86bmF0aXZlIGNvZGV8ZnVuY3Rpb24pXF1ccypcfS9pO2YuX2lzTmF0aXZlPWZ1bmN0aW9uKEIpe3JldHVybiEhKGEuY29uZmlnLnVzZU5hdGl2ZUVTNSYmQiYmcC50ZXN0KEIpKX07Zi5pc0FycmF5PWYuX2lzTmF0aXZlKEFycmF5LmlzQXJyYXkpP0FycmF5LmlzQXJyYXk6ZnVuY3Rpb24oQil7cmV0dXJuImFycmF5Ij09PWYudHlwZShCKX07Zi5pc0Jvb2xlYW49ZnVuY3Rpb24oQil7cmV0dXJuImJvb2xlYW4iPT09dHlwZW9mIEJ9O2YuaXNEYXRlPQpmdW5jdGlvbihCKXtyZXR1cm4iZGF0ZSI9PT1mLnR5cGUoQikmJiJJbnZhbGlkIERhdGUiIT09Qi50b1N0cmluZygpJiYhaXNOYU4oQil9O2YuaXNGdW5jdGlvbj1mdW5jdGlvbihCKXtyZXR1cm4iZnVuY3Rpb24iPT09Zi50eXBlKEIpfTtmLmlzTnVsbD1mdW5jdGlvbihCKXtyZXR1cm4gbnVsbD09PUJ9O2YuaXNOdW1iZXI9ZnVuY3Rpb24oQil7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgQiYmaXNGaW5pdGUoQil9O2YuaXNPYmplY3Q9ZnVuY3Rpb24oQixJKXt2YXIgTT10eXBlb2YgQjtyZXR1cm4gQiYmKCJvYmplY3QiPT09TXx8IUkmJigiZnVuY3Rpb24iPT09TXx8Zi5pc0Z1bmN0aW9uKEIpKSl8fCExfTtmLmlzUmVnRXhwPWZ1bmN0aW9uKEIpe3JldHVybiJyZWdleHAiPT09Zi50eXBlKEIpfTtmLmlzU3RyaW5nPWZ1bmN0aW9uKEIpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIEJ9O2YuaXNVbmRlZmluZWQ9ZnVuY3Rpb24oQil7cmV0dXJuInVuZGVmaW5lZCI9PT10eXBlb2YgQn07CmYuaXNWYWx1ZT1mdW5jdGlvbihCKXt2YXIgST1mLnR5cGUoQik7c3dpdGNoKEkpe2Nhc2UgIm51bWJlciI6cmV0dXJuIGlzRmluaXRlKEIpO2Nhc2UgIm51bGwiOmNhc2UgInVuZGVmaW5lZCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hIUl9fTtmLm5vdz1EYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07Zi5zdWI9ZnVuY3Rpb24oQixJKXtmdW5jdGlvbiBNKEQsSil7dmFyIFA7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgRFtKXSlyZXR1cm4gRFtKXTtKPUouc3BsaXQoIi4iKTtQPUouc2xpY2UoMSkuam9pbigiLiIpO0o9SlswXTtpZihQJiYib2JqZWN0Ij09PXR5cGVvZiBEW0pdJiZudWxsIT09RFtKXSlyZXR1cm4gTShEW0pdLFApfXJldHVybiBCLnJlcGxhY2U/Qi5yZXBsYWNlKGcsZnVuY3Rpb24oRCxKKXt2YXIgUD0tMTxKLmluZGV4T2YoIi4iKT9NKEksSik6SVtKXTtyZXR1cm4idW5kZWZpbmVkIj09PXR5cGVvZiBQP0Q6UH0pOkJ9O2YudHJpbT0KZi5faXNOYXRpdmUoZC50cmltKSYmISJcdFxuXHgwQlxmXHIgXHUwMGEwXHUxNjgwXHUxODBlXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmIi50cmltKCk/ZnVuY3Rpb24oQil7cmV0dXJuIEImJkIudHJpbT9CLnRyaW0oKTpCfTpmdW5jdGlvbihCKXt0cnl7cmV0dXJuIEIucmVwbGFjZShtLCIiKX1jYXRjaChJKXtyZXR1cm4gQn19O2YudHJpbUxlZnQ9Zi5faXNOYXRpdmUoZC50cmltTGVmdCkmJiEiXHRcblx4MEJcZlxyIFx1MDBhMFx1MTY4MFx1MTgwZVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZiIudHJpbUxlZnQoKT9mdW5jdGlvbihCKXtyZXR1cm4gQi50cmltTGVmdCgpfTpmdW5jdGlvbihCKXtyZXR1cm4gQi5yZXBsYWNlKGUsCiIiKX07Zi50cmltUmlnaHQ9Zi5faXNOYXRpdmUoZC50cmltUmlnaHQpJiYhIlx0XG5ceDBCXGZcciBcdTAwYTBcdTE2ODBcdTE4MGVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFcdTIwMjhcdTIwMjlcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmYiLnRyaW1SaWdodCgpP2Z1bmN0aW9uKEIpe3JldHVybiBCLnRyaW1SaWdodCgpfTpmdW5jdGlvbihCKXtyZXR1cm4gQi5yZXBsYWNlKGssIiIpfTtmLnR5cGU9ZnVuY3Rpb24oQil7cmV0dXJuIGJbdHlwZW9mIEJdfHxiW2MuY2FsbChCKV18fChCPyJvYmplY3QiOiJudWxsIil9O3ZhciBzPWEuTGFuZyxsPUFycmF5LnByb3RvdHlwZSxoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7YS5BcnJheT1xO3EuZGVkdXBlPXMuX2lzTmF0aXZlKE9iamVjdC5jcmVhdGUpP2Z1bmN0aW9uKEIpe3ZhciBJPU9iamVjdC5jcmVhdGUobnVsbCksTT1bXSxELEosUDtEPTA7Zm9yKFA9CkIubGVuZ3RoO0Q8UDsrK0QpSj1CW0RdLElbSl18fChJW0pdPTEsTS5wdXNoKEopKTtyZXR1cm4gTX06ZnVuY3Rpb24oQil7dmFyIEk9e30sTT1bXSxELEosUDtEPTA7Zm9yKFA9Qi5sZW5ndGg7RDxQOysrRClKPUJbRF0saC5jYWxsKEksSil8fChJW0pdPTEsTS5wdXNoKEopKTtyZXR1cm4gTX07cS5lYWNoPXEuZm9yRWFjaD1zLl9pc05hdGl2ZShsLmZvckVhY2gpP2Z1bmN0aW9uKEIsSSxNKXtsLmZvckVhY2guY2FsbChCfHxbXSxJLE18fGEpO3JldHVybiBhfTpmdW5jdGlvbihCLEksTSl7Zm9yKHZhciBEPTAsSj1CJiZCLmxlbmd0aHx8MDtEPEo7KytEKUQgaW4gQiYmSS5jYWxsKE18fGEsQltEXSxELEIpO3JldHVybiBhfTtxLmhhc2g9ZnVuY3Rpb24oQixJKXt2YXIgTT17fSxEPUkmJkkubGVuZ3RofHwwLEosUDtKPTA7Zm9yKFA9Qi5sZW5ndGg7SjxQOysrSilKIGluIEImJihNW0JbSl1dPUQ+SiYmSiBpbiBJP0lbSl06ITApO3JldHVybiBNfTtxLmluZGV4T2Y9cy5faXNOYXRpdmUobC5pbmRleE9mKT8KZnVuY3Rpb24oQixJLE0pe3JldHVybiBsLmluZGV4T2YuY2FsbChCLEksTSl9OmZ1bmN0aW9uKEIsSSxNKXt2YXIgRD1CLmxlbmd0aDtNPStNfHwwO009KDA8TXx8LTEpKk1hdGguZmxvb3IoTWF0aC5hYnMoTSkpOzA+TSYmKE0rPUQsMD5NJiYoTT0wKSk7Zm9yKDtNPEQ7KytNKWlmKE0gaW4gQiYmQltNXT09PUkpcmV0dXJuIE07cmV0dXJuLTF9O3EubnVtZXJpY1NvcnQ9ZnVuY3Rpb24oQixJKXtyZXR1cm4gQi1JfTtxLnNvbWU9cy5faXNOYXRpdmUobC5zb21lKT9mdW5jdGlvbihCLEksTSl7cmV0dXJuIGwuc29tZS5jYWxsKEIsSSxNKX06ZnVuY3Rpb24oQixJLE0pe2Zvcih2YXIgRD0wLEo9Qi5sZW5ndGg7RDxKOysrRClpZihEIGluIEImJkkuY2FsbChNLEJbRF0sRCxCKSlyZXR1cm4hMDtyZXR1cm4hMX07cS50ZXN0PWZ1bmN0aW9uKEIpe3ZhciBJPTA7aWYocy5pc0FycmF5KEIpKUk9MTtlbHNlIGlmKHMuaXNPYmplY3QoQikpdHJ5eyJsZW5ndGgiaW4gQiYmIShCLnRhZ05hbWV8fApCLnNjcm9sbFRvJiZCLmRvY3VtZW50fHxCLmFwcGx5KSYmKEk9Mil9Y2F0Y2goTSl7fXJldHVybiBJfTt0LnByb3RvdHlwZT17X2luaXQ6ZnVuY3Rpb24oKXt0aGlzLl9xPVtdfSxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Euc2hpZnQoKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xLnBvcCgpfSxhZGQ6ZnVuY3Rpb24oKXt0aGlzLl9xLnB1c2guYXBwbHkodGhpcy5fcSxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3EubGVuZ3RofX07YS5RdWV1ZT10O1lVSS5FbnYuX2xvYWRlclF1ZXVlPVlVSS5FbnYuX2xvYWRlclF1ZXVlfHxuZXcgdDt2YXIgaD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHU9YS5MYW5nLmlzT2JqZWN0O2EuY2FjaGVkPWZ1bmN0aW9uKEIsSSxNKXtJfHwoST17fSk7cmV0dXJuIGZ1bmN0aW9uKEQpe3ZhciBKPTE8YXJndW1lbnRzLmxlbmd0aD9BcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywKIl9fIik6U3RyaW5nKEQpO2lmKCEoSiBpbiBJKXx8TSYmSVtKXT09TSlJW0pdPUIuYXBwbHkoQixhcmd1bWVudHMpO3JldHVybiBJW0pdfX07YS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3ZhciBCPWEuY29uZmlnLndpbjtyZXR1cm4gQiYmQi5sb2NhdGlvbn07YS5tZXJnZT1mdW5jdGlvbigpe2Zvcih2YXIgQj0wLEk9YXJndW1lbnRzLmxlbmd0aCxNPXt9LEQsSjtCPEk7KytCKWZvcihEIGluIEo9YXJndW1lbnRzW0JdLEopaC5jYWxsKEosRCkmJihNW0RdPUpbRF0pO3JldHVybiBNfTthLm1peD1mdW5jdGlvbihCLEksTSxELEosUCl7dmFyIFYsWSxuYSxmYSxpYTtpZighQnx8IUkpcmV0dXJuIEJ8fGE7aWYoSil7aWYoMj09PUomJmEubWl4KEIucHJvdG90eXBlLEkucHJvdG90eXBlLE0sRCwwLFApLFk9MT09PUp8fDM9PT1KP0kucHJvdG90eXBlOkksaWE9MT09PUp8fDQ9PT1KP0IucHJvdG90eXBlOkIsIVl8fCFpYSlyZXR1cm4gQn1lbHNlIFk9SSxpYT1CO0k9TSYmIVA7aWYoRClmb3IoSj0KMCxmYT1ELmxlbmd0aDtKPGZhOysrSil7aWYobmE9RFtKXSxoLmNhbGwoWSxuYSkpaWYoVj1JPyExOm5hIGluIGlhLFAmJlYmJnUoaWFbbmFdLCEwKSYmdShZW25hXSwhMCkpYS5taXgoaWFbbmFdLFlbbmFdLE0sbnVsbCwwLFApO2Vsc2UgaWYoTXx8IVYpaWFbbmFdPVlbbmFdfWVsc2V7Zm9yKG5hIGluIFkpaWYoaC5jYWxsKFksbmEpKWlmKFY9ST8hMTpuYSBpbiBpYSxQJiZWJiZ1KGlhW25hXSwhMCkmJnUoWVtuYV0sITApKWEubWl4KGlhW25hXSxZW25hXSxNLG51bGwsMCxQKTtlbHNlIGlmKE18fCFWKWlhW25hXT1ZW25hXTthLk9iamVjdC5faGFzRW51bUJ1ZyYmYS5taXgoaWEsWSxNLGEuT2JqZWN0Ll9mb3JjZUVudW0sSixQKX1yZXR1cm4gQn07dmFyIHM9YS5MYW5nLGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx3PWEuT2JqZWN0PXMuX2lzTmF0aXZlKE9iamVjdC5jcmVhdGUpP2Z1bmN0aW9uKEIpe3JldHVybiBPYmplY3QuY3JlYXRlKEIpfTpmdW5jdGlvbigpe2Z1bmN0aW9uIEIoKXt9CnJldHVybiBmdW5jdGlvbihJKXtCLnByb3RvdHlwZT1JO3JldHVybiBuZXcgQn19KCksej13Ll9mb3JjZUVudW09Imhhc093blByb3BlcnR5IGlzUHJvdG90eXBlT2YgcHJvcGVydHlJc0VudW1lcmFibGUgdG9TdHJpbmcgdG9Mb2NhbGVTdHJpbmcgdmFsdWVPZiIuc3BsaXQoIiAiKSxBPXcuX2hhc0VudW1CdWc9IXt2YWx1ZU9mOjB9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJ2YWx1ZU9mIiksSD13Ll9oYXNQcm90b0VudW1CdWc9ZnVuY3Rpb24oKXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJwcm90b3R5cGUiKSxGPXcub3ducz1mdW5jdGlvbihCLEkpe3JldHVybiEhQiYmaC5jYWxsKEIsSSl9O3cuaGFzS2V5PUY7dy5rZXlzPXMuX2lzTmF0aXZlKE9iamVjdC5rZXlzKSYmIUg/T2JqZWN0LmtleXM6ZnVuY3Rpb24oQil7aWYoIXMuaXNPYmplY3QoQikpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpO3ZhciBJPVtdLE0sRCxKO2lmKEgmJgoiZnVuY3Rpb24iPT09dHlwZW9mIEIpZm9yKEQgaW4gQilGKEIsRCkmJiJwcm90b3R5cGUiIT09RCYmSS5wdXNoKEQpO2Vsc2UgZm9yKEQgaW4gQilGKEIsRCkmJkkucHVzaChEKTtpZihBKWZvcihNPTAsSj16Lmxlbmd0aDtNPEo7KytNKUQ9eltNXSxGKEIsRCkmJkkucHVzaChEKTtyZXR1cm4gSX07dy52YWx1ZXM9ZnVuY3Rpb24oQil7Zm9yKHZhciBJPXcua2V5cyhCKSxNPTAsRD1JLmxlbmd0aCxKPVtdO008RDsrK00pSi5wdXNoKEJbSVtNXV0pO3JldHVybiBKfTt3LnNpemU9ZnVuY3Rpb24oQil7dHJ5e3JldHVybiB3LmtleXMoQikubGVuZ3RofWNhdGNoKEkpe3JldHVybiAwfX07dy5oYXNWYWx1ZT1mdW5jdGlvbihCLEkpe3JldHVybi0xPGEuQXJyYXkuaW5kZXhPZih3LnZhbHVlcyhCKSxJKX07dy5lYWNoPWZ1bmN0aW9uKEIsSSxNLEQpe2Zvcih2YXIgSiBpbiBCKShEfHxGKEIsSikpJiZJLmNhbGwoTXx8YSxCW0pdLEosQik7cmV0dXJuIGF9O3cuc29tZT1mdW5jdGlvbihCLEksCk0sRCl7Zm9yKHZhciBKIGluIEIpaWYoKER8fEYoQixKKSkmJkkuY2FsbChNfHxhLEJbSl0sSixCKSlyZXR1cm4hMDtyZXR1cm4hMX07dy5nZXRWYWx1ZT1mdW5jdGlvbihCLEkpe2lmKHMuaXNPYmplY3QoQikpe3ZhciBNLEQ9YS5BcnJheShJKSxKPUQubGVuZ3RoO2ZvcihNPTA7dm9pZCAwIT09QiYmTTxKO00rKylCPUJbRFtNXV07cmV0dXJuIEJ9fTt3LnNldFZhbHVlPWZ1bmN0aW9uKEIsSSxNKXt2YXIgRD1hLkFycmF5KEkpLEo9RC5sZW5ndGgtMSxQPUI7aWYoMDw9Sil7Zm9yKEk9MDt2b2lkIDAhPT1QJiZJPEo7SSsrKVA9UFtEW0ldXTtpZih2b2lkIDAhPT1QKVBbRFtJXV09TTtlbHNlIHJldHVybn1yZXR1cm4gQn07dy5pc0VtcHR5PWZ1bmN0aW9uKEIpe3JldHVybiF3LmtleXMoT2JqZWN0KEIpKS5sZW5ndGh9O1lVSS5FbnYucGFyc2VVQT1mdW5jdGlvbihCKXt2YXIgST1mdW5jdGlvbihZKXt2YXIgbmE9MDtyZXR1cm4gcGFyc2VGbG9hdChZLnJlcGxhY2UoL1wuL2csZnVuY3Rpb24oKXtyZXR1cm4gMT09PQpuYSsrPyIiOiIuIn0pKX0sTT1hLmNvbmZpZy53aW4sRD1NJiZNLm5hdmlnYXRvcixKPXtpZTowLG9wZXJhOjAsZ2Vja286MCx3ZWJraXQ6MCxzYWZhcmk6MCxjaHJvbWU6MCxtb2JpbGU6bnVsbCxhaXI6MCxwaGFudG9tanM6MCxpcGFkOjAsaXBob25lOjAsaXBvZDowLGlvczpudWxsLGFuZHJvaWQ6MCxzaWxrOjAsdWJ1bnR1OjAsYWNjZWw6ITEsd2Vib3M6MCxjYWphOkQmJkQuY2FqYVZlcnNpb24sc2VjdXJlOiExLG9zOm51bGwsbm9kZWpzOjAsd2luanM6ISgidW5kZWZpbmVkIj09PXR5cGVvZiBXaW5kb3dzfHwhV2luZG93cy5TeXN0ZW0pLHRvdWNoRW5hYmxlZDohMX0sUD1CfHxEJiZELnVzZXJBZ2VudCxWPU0mJk0ubG9jYXRpb24sVj1WJiZWLmhyZWY7Si51c2VyQWdlbnQ9UDtKLnNlY3VyZT1WJiYwPT09Vi50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImh0dHBzIik7aWYoUCl7L3dpbmRvd3N8d2luMzIvaS50ZXN0KFApP0oub3M9IndpbmRvd3MiOi9tYWNpbnRvc2h8bWFjX3Bvd2VycGMvaS50ZXN0KFApPwpKLm9zPSJtYWNpbnRvc2giOi9hbmRyb2lkL2kudGVzdChQKT9KLm9zPSJhbmRyb2lkIjovc3ltYm9zL2kudGVzdChQKT9KLm9zPSJzeW1ib3MiOi9saW51eC9pLnRlc3QoUCk/Si5vcz0ibGludXgiOi9yaGluby9pLnRlc3QoUCkmJihKLm9zPSJyaGlubyIpOy9LSFRNTC8udGVzdChQKSYmKEoud2Via2l0PTEpOy9JRU1vYmlsZXxYQkxXUDcvLnRlc3QoUCkmJihKLm1vYmlsZT0id2luZG93cyIpOy9GZW5uZWMvLnRlc3QoUCkmJihKLm1vYmlsZT0iZ2Vja28iKTtpZigoVj1QLm1hdGNoKC9BcHBsZVdlYktpdFwvKFteXHNdKikvKSkmJlZbMV0pe0oud2Via2l0PUkoVlsxXSk7Si5zYWZhcmk9Si53ZWJraXQ7L1BoYW50b21KUy8udGVzdChQKSYmKFY9UC5tYXRjaCgvUGhhbnRvbUpTXC8oW15cc10qKS8pKSYmVlsxXSYmKEoucGhhbnRvbWpzPUkoVlsxXSkpO2lmKC8gTW9iaWxlXC8vLnRlc3QoUCl8fC9pUGFkfGlQb2R8aVBob25lLy50ZXN0KFApKUoubW9iaWxlPSJBcHBsZSIsKFY9UC5tYXRjaCgvT1MgKFteXHNdKikvKSkmJgpWWzFdJiYoVj1JKFZbMV0ucmVwbGFjZSgiXyIsIi4iKSkpLEouaW9zPVYsSi5vcz0iaW9zIixKLmlwYWQ9Si5pcG9kPUouaXBob25lPTAsKFY9UC5tYXRjaCgvaVBhZHxpUG9kfGlQaG9uZS8pKSYmVlswXSYmKEpbVlswXS50b0xvd2VyQ2FzZSgpXT1KLmlvcyk7ZWxzZXtpZihWPVAubWF0Y2goL05va2lhTlteXC9dKnx3ZWJPU1wvXGRcLlxkLykpSi5tb2JpbGU9VlswXTsvd2ViT1MvLnRlc3QoUCkmJihKLm1vYmlsZT0iV2ViT1MiLChWPVAubWF0Y2goL3dlYk9TXC8oW15cc10qKTsvKSkmJlZbMV0mJihKLndlYm9zPUkoVlsxXSkpKTsvIEFuZHJvaWQvLnRlc3QoUCkmJihKLm1vYmlsZT0iQW5kcm9pZCIsKFY9UC5tYXRjaCgvQW5kcm9pZCAoW15cc10qKTsvKSkmJlZbMV0mJihKLmFuZHJvaWQ9SShWWzFdKSkpOy9TaWxrLy50ZXN0KFApJiYoKFY9UC5tYXRjaCgvU2lsa1wvKFteXHNdKikvKSkmJlZbMV0mJihKLnNpbGs9SShWWzFdKSksSi5hbmRyb2lkfHwoSi5hbmRyb2lkPTIuMzQsCkoub3M9IkFuZHJvaWQiKSwvQWNjZWxlcmF0ZWQ9dHJ1ZS8udGVzdChQKSYmKEouYWNjZWw9ITApKX1pZigoVj1QLm1hdGNoKC9PUFJcLyhcZCtcLlxkKykvKSkmJlZbMV0pSi5vcGVyYT1JKFZbMV0pO2Vsc2UgaWYoKFY9UC5tYXRjaCgvKENocm9tZXxDck1vfENyaU9TKVwvKFteXHNdKikvKSkmJlZbMV0mJlZbMl0pSi5jaHJvbWU9SShWWzJdKSxKLnNhZmFyaT0wLCJDck1vIj09PVZbMV0mJihKLm1vYmlsZT0iY2hyb21lIik7ZWxzZSBpZihWPVAubWF0Y2goL0Fkb2JlQUlSXC8oW15cc10qKS8pKUouYWlyPVZbMF19KFY9UC5tYXRjaCgvVWJ1bnR1XCAoXGQrXC5cZCspLykpJiZWWzFdJiYoSi5vcz0ibGludXgiLEoudWJ1bnR1PUkoVlsxXSksKFY9UC5tYXRjaCgvXCBXZWJLaXRcLyhbXlxzXSopLykpJiZWWzFdJiYoSi53ZWJraXQ9SShWWzFdKSksKFY9UC5tYXRjaCgvXCBDaHJvbWl1bVwvKFteXHNdKikvKSkmJlZbMV0mJihKLmNocm9tZT1JKFZbMV0pKSwvIE1vYmlsZSQvLnRlc3QoUCkmJgooSi5tb2JpbGU9IlVidW50dSIpKTtpZighSi53ZWJraXQpaWYoL09wZXJhLy50ZXN0KFApKXtpZigoVj1QLm1hdGNoKC9PcGVyYVtcc1wvXShbXlxzXSopLykpJiZWWzFdJiYoSi5vcGVyYT1JKFZbMV0pKSwoVj1QLm1hdGNoKC9WZXJzaW9uXC8oW15cc10qKS8pKSYmVlsxXSYmKEoub3BlcmE9SShWWzFdKSksL09wZXJhIE1vYmkvLnRlc3QoUCkmJihKLm1vYmlsZT0ib3BlcmEiLChWPVAucmVwbGFjZSgiT3BlcmEgTW9iaSIsIiIpLm1hdGNoKC9PcGVyYSAoW15cc10qKS8pKSYmVlsxXSYmKEoub3BlcmE9SShWWzFdKSkpLFY9UC5tYXRjaCgvT3BlcmEgTWluaVteO10qLykpSi5tb2JpbGU9VlswXX1lbHNlIGlmKChWPVAubWF0Y2goL01TSUUgKFteO10qKXxUcmlkZW50Lio7IHJ2OihbMC05Ll0rKS8pKSYmKFZbMV18fFZbMl0pKUouaWU9SShWWzFdfHxWWzJdKTtlbHNlIGlmKFY9UC5tYXRjaCgvR2Vja29cLyhbXlxzXSopLykpSi5nZWNrbz0xLChWPVAubWF0Y2goL3J2OihbXlxzXCldKikvKSkmJgpWWzFdJiYoSi5nZWNrbz1JKFZbMV0pLC9Nb2JpbGV8VGFibGV0Ly50ZXN0KFApJiYoSi5tb2JpbGU9ImZmb3MiKSl9IU18fCFEfHxKLmNocm9tZSYmNj5KLmNocm9tZXx8KEoudG91Y2hFbmFibGVkPSJvbnRvdWNoc3RhcnQiaW4gTXx8Im1zTWF4VG91Y2hQb2ludHMiaW4gRCYmMDxELm1zTWF4VG91Y2hQb2ludHMpO0J8fCgib2JqZWN0Ij09PXR5cGVvZiBwcm9jZXNzJiZwcm9jZXNzLnZlcnNpb25zJiZwcm9jZXNzLnZlcnNpb25zLm5vZGUmJihKLm9zPXByb2Nlc3MucGxhdGZvcm0sSi5ub2RlanM9SShwcm9jZXNzLnZlcnNpb25zLm5vZGUpKSxZVUkuRW52LlVBPUopO3JldHVybiBKfTthLlVBPVlVSS5FbnYuVUF8fFlVSS5FbnYucGFyc2VVQSgpO2EuVUEuY29tcGFyZVZlcnNpb25zPWZ1bmN0aW9uKEIsSSl7dmFyIE0sRCxKLFAsVixZO2lmKEI9PT1JKXJldHVybiAwO0Q9KEIrIiIpLnNwbGl0KCIuIik7UD0oSSsiIikuc3BsaXQoIi4iKTtWPTA7Zm9yKFk9TWF0aC5tYXgoRC5sZW5ndGgsClAubGVuZ3RoKTtWPFk7KytWKXtNPXBhcnNlSW50KERbVl0sMTApO0o9cGFyc2VJbnQoUFtWXSwxMCk7aXNOYU4oTSkmJihNPTApO2lzTmFOKEopJiYoSj0wKTtpZihNPEopcmV0dXJuLTE7aWYoTT5KKXJldHVybiAxfXJldHVybiAwfTtZVUkuRW52LmFsaWFzZXM9e2FuaW06ImFuaW0tYmFzZSBhbmltLWNvbG9yIGFuaW0tY3VydmUgYW5pbS1lYXNpbmcgYW5pbS1ub2RlLXBsdWdpbiBhbmltLXNjcm9sbCBhbmltLXh5Ii5zcGxpdCgiICIpLCJhbmltLXNoYXBlLXRyYW5zZm9ybSI6WyJhbmltLXNoYXBlIl0sYXBwOiJhcHAtYmFzZSBhcHAtY29udGVudCBhcHAtdHJhbnNpdGlvbnMgbGF6eS1tb2RlbC1saXN0IG1vZGVsIG1vZGVsLWxpc3QgbW9kZWwtc3luYy1yZXN0IG1vZGVsLXN5bmMtbG9jYWwgcm91dGVyIHZpZXcgdmlldy1ub2RlLW1hcCIuc3BsaXQoIiAiKSxhdHRyaWJ1dGU6WyJhdHRyaWJ1dGUtYmFzZSIsImF0dHJpYnV0ZS1jb21wbGV4Il0sImF0dHJpYnV0ZS1ldmVudHMiOlsiYXR0cmlidXRlLW9ic2VydmFibGUiXSwKYXV0b2NvbXBsZXRlOlsiYXV0b2NvbXBsZXRlLWJhc2UiLCJhdXRvY29tcGxldGUtc291cmNlcyIsImF1dG9jb21wbGV0ZS1saXN0IiwiYXV0b2NvbXBsZXRlLXBsdWdpbiJdLGF4ZXM6WyJheGlzLW51bWVyaWMiLCJheGlzLWNhdGVnb3J5IiwiYXhpcy10aW1lIiwiYXhpcy1zdGFja2VkIl0sImF4ZXMtYmFzZSI6WyJheGlzLW51bWVyaWMtYmFzZSIsImF4aXMtY2F0ZWdvcnktYmFzZSIsImF4aXMtdGltZS1iYXNlIiwiYXhpcy1zdGFja2VkLWJhc2UiXSxiYXNlOlsiYmFzZS1iYXNlIiwiYmFzZS1wbHVnaW5ob3N0IiwiYmFzZS1idWlsZCJdLGNhY2hlOlsiY2FjaGUtYmFzZSIsImNhY2hlLW9mZmxpbmUiLCJjYWNoZS1wbHVnaW4iXSxjaGFydHM6WyJjaGFydHMtYmFzZSJdLGNvbGxlY3Rpb246WyJhcnJheS1leHRyYXMiLCJhcnJheWxpc3QiLCJhcnJheWxpc3QtYWRkIiwiYXJyYXlsaXN0LWZpbHRlciIsImFycmF5LWludm9rZSJdLGNvbG9yOlsiY29sb3ItYmFzZSIsImNvbG9yLWhzbCIsCiJjb2xvci1oYXJtb255Il0sY29udHJvbGxlcjpbInJvdXRlciJdLGRhdGFzY2hlbWE6WyJkYXRhc2NoZW1hLWJhc2UiLCJkYXRhc2NoZW1hLWpzb24iLCJkYXRhc2NoZW1hLXhtbCIsImRhdGFzY2hlbWEtYXJyYXkiLCJkYXRhc2NoZW1hLXRleHQiXSxkYXRhc291cmNlOiJkYXRhc291cmNlLWxvY2FsIGRhdGFzb3VyY2UtaW8gZGF0YXNvdXJjZS1nZXQgZGF0YXNvdXJjZS1mdW5jdGlvbiBkYXRhc291cmNlLWNhY2hlIGRhdGFzb3VyY2UtanNvbnNjaGVtYSBkYXRhc291cmNlLXhtbHNjaGVtYSBkYXRhc291cmNlLWFycmF5c2NoZW1hIGRhdGFzb3VyY2UtdGV4dHNjaGVtYSBkYXRhc291cmNlLXBvbGxpbmciLnNwbGl0KCIgIiksZGF0YXRhYmxlOiJkYXRhdGFibGUtY29yZSBkYXRhdGFibGUtdGFibGUgZGF0YXRhYmxlLWhlYWQgZGF0YXRhYmxlLWJvZHkgZGF0YXRhYmxlLWJhc2UgZGF0YXRhYmxlLWNvbHVtbi13aWR0aHMgZGF0YXRhYmxlLW1lc3NhZ2UgZGF0YXRhYmxlLW11dGFibGUgZGF0YXRhYmxlLXNvcnQgZGF0YXRhYmxlLWRhdGFzb3VyY2UiLnNwbGl0KCIgIiksCmRhdGF0eXBlOlsiZGF0YXR5cGUtZGF0ZSIsImRhdGF0eXBlLW51bWJlciIsImRhdGF0eXBlLXhtbCJdLCJkYXRhdHlwZS1kYXRlIjpbImRhdGF0eXBlLWRhdGUtcGFyc2UiLCJkYXRhdHlwZS1kYXRlLWZvcm1hdCIsImRhdGF0eXBlLWRhdGUtbWF0aCJdLCJkYXRhdHlwZS1udW1iZXIiOlsiZGF0YXR5cGUtbnVtYmVyLXBhcnNlIiwiZGF0YXR5cGUtbnVtYmVyLWZvcm1hdCJdLCJkYXRhdHlwZS14bWwiOlsiZGF0YXR5cGUteG1sLXBhcnNlIiwiZGF0YXR5cGUteG1sLWZvcm1hdCJdLGRkOiJkZC1kZG0tYmFzZSBkZC1kZG0gZGQtZGRtLWRyb3AgZGQtZHJhZyBkZC1wcm94eSBkZC1jb25zdHJhaW4gZGQtZHJvcCBkZC1zY3JvbGwgZGQtZGVsZWdhdGUiLnNwbGl0KCIgIiksZG9tOlsiZG9tLWJhc2UiLCJkb20tc2NyZWVuIiwiZG9tLXN0eWxlIiwic2VsZWN0b3ItbmF0aXZlIiwic2VsZWN0b3IiXSxlZGl0b3I6ImZyYW1lIGVkaXRvci1zZWxlY3Rpb24gZXhlYy1jb21tYW5kIGVkaXRvci1iYXNlIGVkaXRvci1wYXJhIGVkaXRvci1iciBlZGl0b3ItYmlkaSBlZGl0b3ItdGFiIGNyZWF0ZWxpbmstYmFzZSIuc3BsaXQoIiAiKSwKZXZlbnQ6ImV2ZW50LWJhc2UgZXZlbnQtZGVsZWdhdGUgZXZlbnQtc3ludGhldGljIGV2ZW50LW1vdXNld2hlZWwgZXZlbnQtbW91c2VlbnRlciBldmVudC1rZXkgZXZlbnQtZm9jdXMgZXZlbnQtcmVzaXplIGV2ZW50LWhvdmVyIGV2ZW50LW91dHNpZGUgZXZlbnQtdG91Y2ggZXZlbnQtbW92ZSBldmVudC1mbGljayBldmVudC12YWx1ZWNoYW5nZSBldmVudC10YXAiLnNwbGl0KCIgIiksImV2ZW50LWN1c3RvbSI6WyJldmVudC1jdXN0b20tYmFzZSIsImV2ZW50LWN1c3RvbS1jb21wbGV4Il0sImV2ZW50LWdlc3R1cmVzIjpbImV2ZW50LWZsaWNrIiwiZXZlbnQtbW92ZSJdLGhhbmRsZWJhcnM6WyJoYW5kbGViYXJzLWNvbXBpbGVyIl0saGlnaGxpZ2h0OlsiaGlnaGxpZ2h0LWJhc2UiLCJoaWdobGlnaHQtYWNjZW50Zm9sZCJdLGhpc3Rvcnk6WyJoaXN0b3J5LWJhc2UiLCJoaXN0b3J5LWhhc2giLCJoaXN0b3J5LWh0bWw1Il0saW86WyJpby1iYXNlIiwiaW8teGRyIiwiaW8tZm9ybSIsCiJpby11cGxvYWQtaWZyYW1lIiwiaW8tcXVldWUiXSxqc29uOlsianNvbi1wYXJzZSIsImpzb24tc3RyaW5naWZ5Il0sbG9hZGVyOlsibG9hZGVyLWJhc2UiLCJsb2FkZXItcm9sbHVwIiwibG9hZGVyLXl1aTMiXSwibG9hZGVyLXBhdGhvZ2VuLWVuY29kZXIiOlsibG9hZGVyLWJhc2UiLCJsb2FkZXItcm9sbHVwIiwibG9hZGVyLXl1aTMiLCJsb2FkZXItcGF0aG9nZW4tY29tYm9oYW5kbGVyIl0sbm9kZTpbIm5vZGUtYmFzZSIsIm5vZGUtZXZlbnQtZGVsZWdhdGUiLCJub2RlLXBsdWdpbmhvc3QiLCJub2RlLXNjcmVlbiIsIm5vZGUtc3R5bGUiXSxwbHVnaW5ob3N0OlsicGx1Z2luaG9zdC1iYXNlIiwicGx1Z2luaG9zdC1jb25maWciXSxxdWVyeXN0cmluZzpbInF1ZXJ5c3RyaW5nLXBhcnNlIiwicXVlcnlzdHJpbmctc3RyaW5naWZ5Il0scmVjb3Jkc2V0OlsicmVjb3Jkc2V0LWJhc2UiLCJyZWNvcmRzZXQtc29ydCIsInJlY29yZHNldC1maWx0ZXIiLCJyZWNvcmRzZXQtaW5kZXhlciJdLApyZXNpemU6WyJyZXNpemUtYmFzZSIsInJlc2l6ZS1wcm94eSIsInJlc2l6ZS1jb25zdHJhaW4iXSxzbGlkZXI6WyJzbGlkZXItYmFzZSIsInNsaWRlci12YWx1ZS1yYW5nZSIsImNsaWNrYWJsZS1yYWlsIiwicmFuZ2Utc2xpZGVyIl0sdGVtcGxhdGU6WyJ0ZW1wbGF0ZS1iYXNlIiwidGVtcGxhdGUtbWljcm8iXSx0ZXh0OlsidGV4dC1hY2NlbnRmb2xkIiwidGV4dC13b3JkYnJlYWsiXSx3aWRnZXQ6WyJ3aWRnZXQtYmFzZSIsIndpZGdldC1odG1scGFyc2VyIiwid2lkZ2V0LXNraW4iLCJ3aWRnZXQtdWlldmVudHMiXX19LCJwYXRjaGVkLXYzLjE4LjEiLHt1c2U6Inl1aS1iYXNlIGdldCBmZWF0dXJlcyBpbnRsLWJhc2UgeXVpLWxvZyB5dWktbGF0ZXIgbG9hZGVyLWJhc2UgbG9hZGVyLXJvbGx1cCBsb2FkZXIteXVpMyIuc3BsaXQoIiAiKX0pOwpZVUkuYWRkKCJnZXQiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5MYW5nLHQsZixkO2EuR2V0PWY9e2Nzc09wdGlvbnM6e2F0dHJpYnV0ZXM6e3JlbDoic3R5bGVzaGVldCJ9LGRvYzphLmNvbmZpZy5saW5rRG9jfHxhLmNvbmZpZy5kb2MscG9sbEludGVydmFsOjUwfSxqc09wdGlvbnM6e2F1dG9wdXJnZTohMCxkb2M6YS5jb25maWcuc2NyaXB0RG9jfHxhLmNvbmZpZy5kb2N9LG9wdGlvbnM6e2F0dHJpYnV0ZXM6e2NoYXJzZXQ6InV0Zi04In0scHVyZ2V0aHJlc2hvbGQ6MjB9LFJFR0VYX0NTUzovXC5jc3MoPzpbPztdLiopPyQvaSxSRUdFWF9KUzovXC5qcyg/Ols/O10uKik/JC9pLF9pbnNlcnRDYWNoZTp7fSxfcGVuZGluZzpudWxsLF9wdXJnZU5vZGVzOltdLF9xdWV1ZTpbXSxhYm9ydDpmdW5jdGlvbihjKXt2YXIgYixnLGUsaztpZighYy5hYm9ydClpZihnPWMsYj10aGlzLl9wZW5kaW5nLGM9bnVsbCxiJiZiLnRyYW5zYWN0aW9uLmlkPT09ZyljPWIudHJhbnNhY3Rpb24sdGhpcy5fcGVuZGluZz0KbnVsbDtlbHNlIGZvcihiPTAsaz10aGlzLl9xdWV1ZS5sZW5ndGg7YjxrOysrYilpZihlPXRoaXMuX3F1ZXVlW2JdLnRyYW5zYWN0aW9uLGUuaWQ9PT1nKXtjPWU7dGhpcy5fcXVldWUuc3BsaWNlKGIsMSk7YnJlYWt9YyYmYy5hYm9ydCgpfSxjc3M6ZnVuY3Rpb24oYyxiLGcpe3JldHVybiB0aGlzLl9sb2FkKCJjc3MiLGMsYixnKX0sanM6ZnVuY3Rpb24oYyxiLGcpe3JldHVybiB0aGlzLl9sb2FkKCJqcyIsYyxiLGcpfSxsb2FkOmZ1bmN0aW9uKGMsYixnKXtyZXR1cm4gdGhpcy5fbG9hZChudWxsLGMsYixnKX0sX2F1dG9QdXJnZTpmdW5jdGlvbihjKXtjJiZ0aGlzLl9wdXJnZU5vZGVzLmxlbmd0aD49YyYmdGhpcy5fcHVyZ2UodGhpcy5fcHVyZ2VOb2Rlcyl9LF9nZXRFbnY6ZnVuY3Rpb24oKXt2YXIgYz1hLmNvbmZpZy5kb2MsYj1hLlVBO3JldHVybiB0aGlzLl9lbnY9e2FzeW5jOmMmJiEwPT09Yy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKS5hc3luY3x8MTA8PWIuaWUsY3NzRmFpbDo5PD0KYi5nZWNrb3x8MDw9Yi5jb21wYXJlVmVyc2lvbnMoYi53ZWJraXQsNTM1LjI0KSxjc3NMb2FkOighYi5nZWNrbyYmIWIud2Via2l0fHw5PD1iLmdlY2tvfHwwPD1iLmNvbXBhcmVWZXJzaW9ucyhiLndlYmtpdCw1MzUuMjQpKSYmIShiLmNocm9tZSYmMTg+PWIuY2hyb21lKSxwcmVzZXJ2ZXNTY3JpcHRPcmRlcjohIShiLmdlY2tvfHxiLm9wZXJhfHxiLmllJiYxMDw9Yi5pZSl9fSxfZ2V0VHJhbnNhY3Rpb246ZnVuY3Rpb24oYyxiKXt2YXIgZz1bXSxlLGssbSxwO3EuaXNBcnJheShjKXx8KGM9W2NdKTtiPWEubWVyZ2UodGhpcy5vcHRpb25zLGIpO2IuYXR0cmlidXRlcz1hLm1lcmdlKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzLGIuYXR0cmlidXRlcyk7ZT0wO2ZvcihrPWMubGVuZ3RoO2U8azsrK2Upe3A9Y1tlXTttPXthdHRyaWJ1dGVzOnt9fTtpZigic3RyaW5nIj09PXR5cGVvZiBwKW0udXJsPXA7ZWxzZSBpZihwLnVybClhLm1peChtLHAsITEsbnVsbCwwLCEwKSxwPXAudXJsO2Vsc2UgY29udGludWU7CmEubWl4KG0sYiwhMSxudWxsLDAsITApO20udHlwZXx8KHRoaXMuUkVHRVhfQ1NTLnRlc3QocCk/bS50eXBlPSJjc3MiOih0aGlzLlJFR0VYX0pTLnRlc3QocCksbS50eXBlPSJqcyIpKTthLm1peChtLCJqcyI9PT1tLnR5cGU/dGhpcy5qc09wdGlvbnM6dGhpcy5jc3NPcHRpb25zLCExLG51bGwsMCwhMCk7bS5hdHRyaWJ1dGVzLmlkfHwobS5hdHRyaWJ1dGVzLmlkPWEuZ3VpZCgpKTttLndpbj9tLmRvYz1tLndpbi5kb2N1bWVudDptLndpbj1tLmRvYy5kZWZhdWx0Vmlld3x8bS5kb2MucGFyZW50V2luZG93O20uY2hhcnNldCYmKG0uYXR0cmlidXRlcy5jaGFyc2V0PW0uY2hhcnNldCk7Zy5wdXNoKG0pfXJldHVybiBuZXcgZChnLGIpfSxfbG9hZDpmdW5jdGlvbihjLGIsZyxlKXsiZnVuY3Rpb24iPT09dHlwZW9mIGcmJihlPWcsZz17fSk7Z3x8KGc9e30pO2cudHlwZT1jO2cuX29uRmluaXNoPWYuX29uVHJhbnNhY3Rpb25GaW5pc2g7dGhpcy5fZW52fHx0aGlzLl9nZXRFbnYoKTtjPQp0aGlzLl9nZXRUcmFuc2FjdGlvbihiLGcpO3RoaXMuX3F1ZXVlLnB1c2goe2NhbGxiYWNrOmUsdHJhbnNhY3Rpb246Y30pO3RoaXMuX25leHQoKTtyZXR1cm4gY30sX29uVHJhbnNhY3Rpb25GaW5pc2g6ZnVuY3Rpb24oKXtmLl9wZW5kaW5nPW51bGw7Zi5fbmV4dCgpfSxfbmV4dDpmdW5jdGlvbigpe3ZhciBjOyF0aGlzLl9wZW5kaW5nJiYoYz10aGlzLl9xdWV1ZS5zaGlmdCgpKSYmKHRoaXMuX3BlbmRpbmc9YyxjLnRyYW5zYWN0aW9uLmV4ZWN1dGUoYy5jYWxsYmFjaykpfSxfcHVyZ2U6ZnVuY3Rpb24oYyl7Zm9yKHZhciBiPXRoaXMuX3B1cmdlTm9kZXMsZz1jIT09YixlO2U9Yy5wb3AoKTspZS5feXVpZ2V0X2ZpbmlzaGVkJiYoZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksZyYmKGU9YS5BcnJheS5pbmRleE9mKGIsZSksLTE8ZSYmYi5zcGxpY2UoZSwxKSkpfX07Zi5zY3JpcHQ9Zi5qcztmLlRyYW5zYWN0aW9uPWQ9ZnVuY3Rpb24oYyxiKXt0aGlzLmlkPQpkLl9sYXN0SWQrPTE7dGhpcy5kYXRhPWIuZGF0YTt0aGlzLmVycm9ycz1bXTt0aGlzLm5vZGVzPVtdO3RoaXMub3B0aW9ucz1iO3RoaXMucmVxdWVzdHM9Yzt0aGlzLl9jYWxsYmFja3M9W107dGhpcy5fcXVldWU9W107dGhpcy5fcmVxc1dhaXRpbmc9MDt0aGlzLnRJZD10aGlzLmlkO3RoaXMud2luPWIud2lufHxhLmNvbmZpZy53aW59O2QuX2xhc3RJZD0wO2QucHJvdG90eXBlPXtfc3RhdGU6Im5ldyIsYWJvcnQ6ZnVuY3Rpb24oYyl7dGhpcy5fcGVuZGluZ0NTUz10aGlzLl9wZW5kaW5nPW51bGw7dGhpcy5fcG9sbFRpbWVyPWNsZWFyVGltZW91dCh0aGlzLl9wb2xsVGltZXIpO3RoaXMuX3F1ZXVlPVtdO3RoaXMuX3JlcXNXYWl0aW5nPTA7dGhpcy5lcnJvcnMucHVzaCh7ZXJyb3I6Y3x8IkFib3J0ZWQifSk7dGhpcy5fZmluaXNoKCl9LGV4ZWN1dGU6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcyxnPWIucmVxdWVzdHMsZT1iLl9zdGF0ZSxrLG07aWYoImRvbmUiPT09ZSljJiZjKGIuZXJyb3JzLmxlbmd0aD8KYi5lcnJvcnM6bnVsbCxiKTtlbHNlIGlmKGMmJmIuX2NhbGxiYWNrcy5wdXNoKGMpLCJleGVjdXRpbmciIT09ZSl7Yi5fc3RhdGU9ImV4ZWN1dGluZyI7Yi5fcXVldWU9az1bXTtiLm9wdGlvbnMudGltZW91dCYmKGIuX3RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2IuYWJvcnQoIlRpbWVvdXQiKX0sYi5vcHRpb25zLnRpbWVvdXQpKTtiLl9yZXFzV2FpdGluZz1nLmxlbmd0aDtjPTA7Zm9yKGU9Zy5sZW5ndGg7YzxlOysrYyltPWdbY10sbS5hc3luY3x8ImNzcyI9PT1tLnR5cGU/Yi5faW5zZXJ0KG0pOmsucHVzaChtKTtiLl9uZXh0KCl9fSxwdXJnZTpmdW5jdGlvbigpe2YuX3B1cmdlKHRoaXMubm9kZXMpfSxfY3JlYXRlTm9kZTpmdW5jdGlvbihjLGIsZyl7Yz1nLmNyZWF0ZUVsZW1lbnQoYyk7dmFyIGU7dHx8KGc9Zy5jcmVhdGVFbGVtZW50KCJkaXYiKSxnLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJhIiksdD0iYSI9PT1nLmNsYXNzTmFtZT97fTp7ImZvciI6Imh0bWxGb3IiLAoiY2xhc3MiOiJjbGFzc05hbWUifSk7Zm9yKGUgaW4gYiliLmhhc093blByb3BlcnR5KGUpJiZjLnNldEF0dHJpYnV0ZSh0W2VdfHxlLGJbZV0pO3JldHVybiBjfSxfZmluaXNoOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5lcnJvcnMubGVuZ3RoP3RoaXMuZXJyb3JzOm51bGwsYj10aGlzLm9wdGlvbnMsZz1iLmNvbnRleHR8fHRoaXMsZSxrO2lmKCJkb25lIiE9PXRoaXMuX3N0YXRlKXt0aGlzLl9zdGF0ZT0iZG9uZSI7ZT0wO2ZvcihrPXRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7ZTxrOysrZSl0aGlzLl9jYWxsYmFja3NbZV0uY2FsbChnLGMsdGhpcyk7ZT10aGlzLl9nZXRFdmVudERhdGEoKTtjPyhiLm9uVGltZW91dCYmIlRpbWVvdXQiPT09Y1tjLmxlbmd0aC0xXS5lcnJvciYmYi5vblRpbWVvdXQuY2FsbChnLGUpLGIub25GYWlsdXJlJiZiLm9uRmFpbHVyZS5jYWxsKGcsZSkpOmIub25TdWNjZXNzJiZiLm9uU3VjY2Vzcy5jYWxsKGcsZSk7Yi5vbkVuZCYmYi5vbkVuZC5jYWxsKGcsZSk7CmIuX29uRmluaXNoJiZiLl9vbkZpbmlzaCgpfX0sX2dldEV2ZW50RGF0YTpmdW5jdGlvbihjKXtyZXR1cm4gYz9hLm1lcmdlKHRoaXMse2Fib3J0OnRoaXMuYWJvcnQscHVyZ2U6dGhpcy5wdXJnZSxyZXF1ZXN0OmMsdXJsOmMudXJsLHdpbjpjLndpbn0pOnRoaXN9LF9nZXRJbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYyl7dmFyIGI9Yy5kb2M7Yz1jLmluc2VydEJlZm9yZTt2YXIgZyxlO2lmKGMpcmV0dXJuInN0cmluZyI9PT10eXBlb2YgYz9iLmdldEVsZW1lbnRCeUlkKGMpOmM7Zz1mLl9pbnNlcnRDYWNoZTtlPWEuc3RhbXAoYik7cmV0dXJuKGM9Z1tlXSk/YzooYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJiYXNlIilbMF0pP2dbZV09YzooYz1iLmhlYWR8fGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSk/KGMuYXBwZW5kQ2hpbGQoYi5jcmVhdGVUZXh0Tm9kZSgiIikpLGdbZV09Yy5sYXN0Q2hpbGQpOmdbZV09Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF19LApfaW5zZXJ0OmZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGIoKXtzLl9wcm9ncmVzcygiRmFpbGVkIHRvIGxvYWQgIitjLnVybCxjKX1mdW5jdGlvbiBnKCl7aCYmY2xlYXJUaW1lb3V0KGgpO3MuX3Byb2dyZXNzKG51bGwsYyl9dmFyIGU9Zi5fZW52LGs9dGhpcy5fZ2V0SW5zZXJ0QmVmb3JlKGMpLG09ImpzIj09PWMudHlwZSxwPWMubm9kZSxzPXRoaXMsbD1hLlVBLGgsdTtwfHwodT1tPyJzY3JpcHQiOiFlLmNzc0xvYWQmJmwuZ2Vja28/InN0eWxlIjoibGluayIscD1jLm5vZGU9dGhpcy5fY3JlYXRlTm9kZSh1LGMuYXR0cmlidXRlcyxjLmRvYykpO20/KHAuc2V0QXR0cmlidXRlKCJzcmMiLGMudXJsKSxjLmFzeW5jP3AuYXN5bmM9ITA6KGUuYXN5bmMmJihwLmFzeW5jPSExKSxlLnByZXNlcnZlc1NjcmlwdE9yZGVyfHwodGhpcy5fcGVuZGluZz1jKSkpOiFlLmNzc0xvYWQmJmwuZ2Vja28/cC5pbm5lckhUTUw9KGMuYXR0cmlidXRlcy5jaGFyc2V0PydAY2hhcnNldCAiJytjLmF0dHJpYnV0ZXMuY2hhcnNldCsKJyI7JzoiIikrJ0BpbXBvcnQgIicrYy51cmwrJyI7JzpwLnNldEF0dHJpYnV0ZSgiaHJlZiIsYy51cmwpO20mJmwuaWUmJig5PmwuaWV8fGRvY3VtZW50LmRvY3VtZW50TW9kZSYmOT5kb2N1bWVudC5kb2N1bWVudE1vZGUpP3Aub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7L2xvYWRlZHxjb21wbGV0ZS8udGVzdChwLnJlYWR5U3RhdGUpJiYocC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxnKCkpfTptfHxlLmNzc0xvYWQ/KDEwPD1sLmllPyhwLm9uZXJyb3I9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGIsMCl9LHAub25sb2FkPWZ1bmN0aW9uKCl7c2V0VGltZW91dChnLDApfSk6KHAub25lcnJvcj1iLHAub25sb2FkPWcpLGUuY3NzRmFpbHx8bXx8KGg9c2V0VGltZW91dChiLGMudGltZW91dHx8M0UzKSkpOnRoaXMuX3BvbGwoYyk7dGhpcy5ub2Rlcy5wdXNoKHApO2sucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocCxrKX0sX25leHQ6ZnVuY3Rpb24oKXt0aGlzLl9wZW5kaW5nfHwodGhpcy5fcXVldWUubGVuZ3RoPwp0aGlzLl9pbnNlcnQodGhpcy5fcXVldWUuc2hpZnQoKSk6dGhpcy5fcmVxc1dhaXRpbmd8fHRoaXMuX2ZpbmlzaCgpKX0sX3BvbGw6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcyxnPWIuX3BlbmRpbmdDU1MsZT1hLlVBLndlYmtpdCxrLG0scCxzO2lmKGMmJihnfHwoZz1iLl9wZW5kaW5nQ1NTPVtdKSxnLnB1c2goYyksYi5fcG9sbFRpbWVyKSlyZXR1cm47Yi5fcG9sbFRpbWVyPW51bGw7Zm9yKGM9MDtjPGcubGVuZ3RoOysrYylpZihwPWdbY10sZSlmb3Iocz1wLmRvYy5zdHlsZVNoZWV0cyxrPXMubGVuZ3RoLG09cC5ub2RlLmhyZWY7MDw9LS1rOyl7aWYoc1trXS5ocmVmPT09bSl7Zy5zcGxpY2UoYywxKTtjLT0xO2IuX3Byb2dyZXNzKG51bGwscCk7YnJlYWt9fWVsc2UgdHJ5e2cuc3BsaWNlKGMsMSksYy09MSxiLl9wcm9ncmVzcyhudWxsLHApfWNhdGNoKGwpe31nLmxlbmd0aCYmKGIuX3BvbGxUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5fcG9sbC5jYWxsKGIpfSxiLm9wdGlvbnMucG9sbEludGVydmFsKSl9LApfcHJvZ3Jlc3M6ZnVuY3Rpb24oYyxiKXt2YXIgZz10aGlzLm9wdGlvbnM7YyYmKGIuZXJyb3I9Yyx0aGlzLmVycm9ycy5wdXNoKHtlcnJvcjpjLHJlcXVlc3Q6Yn0pKTtiLm5vZGUuX3l1aWdldF9maW5pc2hlZD1iLmZpbmlzaGVkPSEwO2cub25Qcm9ncmVzcyYmZy5vblByb2dyZXNzLmNhbGwoZy5jb250ZXh0fHx0aGlzLHRoaXMuX2dldEV2ZW50RGF0YShiKSk7Yi5hdXRvcHVyZ2UmJihmLl9hdXRvUHVyZ2UodGhpcy5vcHRpb25zLnB1cmdldGhyZXNob2xkKSxmLl9wdXJnZU5vZGVzLnB1c2goYi5ub2RlKSk7dGhpcy5fcGVuZGluZz09PWImJih0aGlzLl9wZW5kaW5nPW51bGwpO3RoaXMuX3JlcXNXYWl0aW5nLT0xO3RoaXMuX25leHQoKX19fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoImZlYXR1cmVzIixmdW5jdGlvbihhLEUpe3ZhciBxPXt9O2EubWl4KGEubmFtZXNwYWNlKCJGZWF0dXJlcyIpLHt0ZXN0czpxLGFkZDpmdW5jdGlvbihmLGQsYyl7cVtmXT1xW2ZdfHx7fTtxW2ZdW2RdPWN9LGFsbDpmdW5jdGlvbihmLGQpe3ZhciBjPXFbZl0sYj1bXTtjJiZhLk9iamVjdC5lYWNoKGMsZnVuY3Rpb24oZyxlKXtiLnB1c2goZSsiOiIrKGEuRmVhdHVyZXMudGVzdChmLGUsZCk/MTowKSl9KTtyZXR1cm4gYi5sZW5ndGg/Yi5qb2luKCI7Iik6IiJ9LHRlc3Q6ZnVuY3Rpb24oZixkLGMpe2M9Y3x8W107dmFyIGIsZz0oZj1xW2ZdKSYmZltkXTtnJiYoYj1nLnJlc3VsdCxhLkxhbmcuaXNVbmRlZmluZWQoYikmJigoZD1nLnVhKSYmKGI9YS5VQVtkXSksZj1nLnRlc3QsIWZ8fGQmJiFifHwoYj1mLmFwcGx5KGEsYykpLGcucmVzdWx0PWIpKTtyZXR1cm4gYn19KTt2YXIgdD1hLkZlYXR1cmVzLmFkZDt0KCJsb2FkIiwiMCIse25hbWU6ImFwcC10cmFuc2l0aW9ucy1uYXRpdmUiLAp0ZXN0OmZ1bmN0aW9uKGYpe3JldHVybihmPShmPWYuY29uZmlnLmRvYyk/Zi5kb2N1bWVudEVsZW1lbnQ6bnVsbCkmJmYuc3R5bGU/Ik1velRyYW5zaXRpb24iaW4gZi5zdHlsZXx8IldlYmtpdFRyYW5zaXRpb24iaW4gZi5zdHlsZXx8InRyYW5zaXRpb24iaW4gZi5zdHlsZTohMX0sdHJpZ2dlcjoiYXBwLXRyYW5zaXRpb25zIn0pO3QoImxvYWQiLCIxIix7bmFtZToiYXV0b2NvbXBsZXRlLWxpc3Qta2V5cyIsdGVzdDpmdW5jdGlvbihmKXtyZXR1cm4hKGYuVUEuaW9zfHxmLlVBLmFuZHJvaWQpfSx0cmlnZ2VyOiJhdXRvY29tcGxldGUtbGlzdCJ9KTt0KCJsb2FkIiwiMiIse25hbWU6ImRkLWdlc3R1cmVzIix0cmlnZ2VyOiJkZC1kcmFnIix1YToidG91Y2hFbmFibGVkIn0pO3QoImxvYWQiLCIzIix7bmFtZToiZG9tLXN0eWxlLWllIix0ZXN0OmZ1bmN0aW9uKGYpe3ZhciBkPWYuRmVhdHVyZXMudGVzdCxjPWYuRmVhdHVyZXMuYWRkLGI9Zi5jb25maWcud2luLGc9Zi5jb25maWcuZG9jOwpmPSExO2MoInN0eWxlIiwiY29tcHV0ZWRTdHlsZSIse3Rlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gYiYmImdldENvbXB1dGVkU3R5bGUiaW4gYn19KTtjKCJzdHlsZSIsIm9wYWNpdHkiLHt0ZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIGcmJiJvcGFjaXR5ImluIGcuZG9jdW1lbnRFbGVtZW50LnN0eWxlfX0pO3JldHVybiBmPSFkKCJzdHlsZSIsIm9wYWNpdHkiKSYmIWQoInN0eWxlIiwiY29tcHV0ZWRTdHlsZSIpfSx0cmlnZ2VyOiJkb20tc3R5bGUifSk7dCgibG9hZCIsIjQiLHtuYW1lOiJlZGl0b3ItcGFyYS1pZSIsdHJpZ2dlcjoiZWRpdG9yLXBhcmEiLHVhOiJpZSIsd2hlbjoiaW5zdGVhZCJ9KTt0KCJsb2FkIiwiNSIse25hbWU6ImV2ZW50LWJhc2UtaWUiLHRlc3Q6ZnVuY3Rpb24oZil7cmV0dXJuKGY9Zi5jb25maWcuZG9jJiZmLmNvbmZpZy5kb2MuaW1wbGVtZW50YXRpb24pJiYhZi5oYXNGZWF0dXJlKCJFdmVudHMiLCIyLjAiKX0sdHJpZ2dlcjoibm9kZS1iYXNlIn0pO3QoImxvYWQiLAoiNiIse25hbWU6ImdyYXBoaWNzLWNhbnZhcyIsdGVzdDpmdW5jdGlvbihmKXt2YXIgZD1mLmNvbmZpZy5kb2M7Zj1mLmNvbmZpZy5kZWZhdWx0R3JhcGhpY0VuZ2luZSYmImNhbnZhcyI9PWYuY29uZmlnLmRlZmF1bHRHcmFwaGljRW5naW5lO3ZhciBjPWQmJmQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cmV0dXJuKCEoZCYmZC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0Jhc2ljU3RydWN0dXJlIiwiMS4xIikpfHxmKSYmYyYmYy5nZXRDb250ZXh0JiZjLmdldENvbnRleHQoIjJkIil9LHRyaWdnZXI6ImdyYXBoaWNzIn0pO3QoImxvYWQiLCI3Iix7bmFtZToiZ3JhcGhpY3MtY2FudmFzLWRlZmF1bHQiLHRlc3Q6ZnVuY3Rpb24oZil7dmFyIGQ9Zi5jb25maWcuZG9jO2Y9Zi5jb25maWcuZGVmYXVsdEdyYXBoaWNFbmdpbmUmJiJjYW52YXMiPT1mLmNvbmZpZy5kZWZhdWx0R3JhcGhpY0VuZ2luZTt2YXIgYz1kJiZkLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwpyZXR1cm4oIShkJiZkLmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjQmFzaWNTdHJ1Y3R1cmUiLCIxLjEiKSl8fGYpJiZjJiZjLmdldENvbnRleHQmJmMuZ2V0Q29udGV4dCgiMmQiKX0sdHJpZ2dlcjoiZ3JhcGhpY3MifSk7dCgibG9hZCIsIjgiLHtuYW1lOiJncmFwaGljcy1zdmciLHRlc3Q6ZnVuY3Rpb24oZil7dmFyIGQ9Zi5jb25maWcuZG9jO2Y9IWYuY29uZmlnLmRlZmF1bHRHcmFwaGljRW5naW5lfHwiY2FudmFzIiE9Zi5jb25maWcuZGVmYXVsdEdyYXBoaWNFbmdpbmU7dmFyIGM9ZCYmZC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gZCYmZC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0Jhc2ljU3RydWN0dXJlIiwiMS4xIikmJihmfHwhYyl9LHRyaWdnZXI6ImdyYXBoaWNzIn0pO3QoImxvYWQiLCI5Iix7bmFtZToiZ3JhcGhpY3Mtc3ZnLWRlZmF1bHQiLAp0ZXN0OmZ1bmN0aW9uKGYpe3ZhciBkPWYuY29uZmlnLmRvYztmPSFmLmNvbmZpZy5kZWZhdWx0R3JhcGhpY0VuZ2luZXx8ImNhbnZhcyIhPWYuY29uZmlnLmRlZmF1bHRHcmFwaGljRW5naW5lO3ZhciBjPWQmJmQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cmV0dXJuIGQmJmQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZSIsIjEuMSIpJiYoZnx8IWMpfSx0cmlnZ2VyOiJncmFwaGljcyJ9KTt0KCJsb2FkIiwiMTAiLHtuYW1lOiJncmFwaGljcy12bWwiLHRlc3Q6ZnVuY3Rpb24oZil7dmFyIGQ9KGY9Zi5jb25maWcuZG9jKSYmZi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gZiYmIWYuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZSIsIjEuMSIpJiYoIWR8fCFkLmdldENvbnRleHR8fCFkLmdldENvbnRleHQoIjJkIikpfSwKdHJpZ2dlcjoiZ3JhcGhpY3MifSk7dCgibG9hZCIsIjExIix7bmFtZToiZ3JhcGhpY3Mtdm1sLWRlZmF1bHQiLHRlc3Q6ZnVuY3Rpb24oZil7dmFyIGQ9KGY9Zi5jb25maWcuZG9jKSYmZi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gZiYmIWYuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZSIsIjEuMSIpJiYoIWR8fCFkLmdldENvbnRleHR8fCFkLmdldENvbnRleHQoIjJkIikpfSx0cmlnZ2VyOiJncmFwaGljcyJ9KTt0KCJsb2FkIiwiMTIiLHtuYW1lOiJoaXN0b3J5LWhhc2gtaWUiLHRlc3Q6ZnVuY3Rpb24oZil7dmFyIGQ9Zi5jb25maWcuZG9jJiZmLmNvbmZpZy5kb2MuZG9jdW1lbnRNb2RlO3JldHVybiBmLlVBLmllJiYoISgib25oYXNoY2hhbmdlImluIGYuY29uZmlnLndpbil8fCFkfHw4PmQpfSx0cmlnZ2VyOiJoaXN0b3J5LWhhc2gifSk7dCgibG9hZCIsIjEzIix7bmFtZToiaW8tbm9kZWpzIiwKdHJpZ2dlcjoiaW8tYmFzZSIsdWE6Im5vZGVqcyJ9KTt0KCJsb2FkIiwiMTQiLHtuYW1lOiJqc29uLXBhcnNlLXNoaW0iLHRlc3Q6ZnVuY3Rpb24oZil7ZnVuY3Rpb24gZChnLGUpe3JldHVybiJvayI9PT1nPyEwOmV9dmFyIGM9Zi5jb25maWcuZ2xvYmFsLkpTT04sYz0iW29iamVjdCBKU09OXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykmJmM7aWYoZj0hMSE9PWYuY29uZmlnLnVzZU5hdGl2ZUpTT05QYXJzZSYmISFjKXRyeXtmPWMucGFyc2UoJ3sib2siOmZhbHNlfScsZCkub2t9Y2F0Y2goYil7Zj0hMX1yZXR1cm4hZn0sdHJpZ2dlcjoianNvbi1wYXJzZSJ9KTt0KCJsb2FkIiwiMTUiLHtuYW1lOiJqc29uLXN0cmluZ2lmeS1zaGltIix0ZXN0OmZ1bmN0aW9uKGYpe3ZhciBkPWYuY29uZmlnLmdsb2JhbC5KU09OLGQ9IltvYmplY3QgSlNPTl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGQpJiZkO2lmKGY9ITEhPT1mLmNvbmZpZy51c2VOYXRpdmVKU09OU3RyaW5naWZ5JiYKISFkKXRyeXtmPSIwIj09PWQuc3RyaW5naWZ5KDApfWNhdGNoKGMpe2Y9ITF9cmV0dXJuIWZ9LHRyaWdnZXI6Impzb24tc3RyaW5naWZ5In0pO3QoImxvYWQiLCIxNiIse25hbWU6InNjcm9sbHZpZXctYmFzZS1pZSIsdHJpZ2dlcjoic2Nyb2xsdmlldy1iYXNlIix1YToiaWUifSk7dCgibG9hZCIsIjE3Iix7bmFtZToic2VsZWN0b3ItY3NzMiIsdGVzdDpmdW5jdGlvbihmKXtyZXR1cm4oZj1mLmNvbmZpZy5kb2MpJiYhKCJxdWVyeVNlbGVjdG9yQWxsImluIGYpfSx0cmlnZ2VyOiJzZWxlY3RvciJ9KTt0KCJsb2FkIiwiMTgiLHtuYW1lOiJ0cmFuc2l0aW9uLXRpbWVyIix0ZXN0OmZ1bmN0aW9uKGYpe2Y9KGY9Zi5jb25maWcuZG9jKT9mLmRvY3VtZW50RWxlbWVudDpudWxsO3ZhciBkPSEwO2YmJmYuc3R5bGUmJihkPSEoIk1velRyYW5zaXRpb24iaW4gZi5zdHlsZXx8IldlYmtpdFRyYW5zaXRpb24iaW4gZi5zdHlsZXx8InRyYW5zaXRpb24iaW4gZi5zdHlsZSkpO3JldHVybiBkfSx0cmlnZ2VyOiJ0cmFuc2l0aW9uIn0pOwp0KCJsb2FkIiwiMTkiLHtuYW1lOiJ3aWRnZXQtYmFzZS1pZSIsdHJpZ2dlcjoid2lkZ2V0LWJhc2UiLHVhOiJpZSJ9KTt0KCJsb2FkIiwiMjAiLHtuYW1lOiJ5cWwtanNvbnAiLHRlc3Q6ZnVuY3Rpb24oZil7cmV0dXJuIWYuVUEubm9kZWpzJiYhZi5VQS53aW5qc30sdHJpZ2dlcjoieXFsIn0pO3QoImxvYWQiLCIyMSIse25hbWU6InlxbC1ub2RlanMiLHRyaWdnZXI6InlxbCIsdWE6Im5vZGVqcyJ9KTt0KCJsb2FkIiwiMjIiLHtuYW1lOiJ5cWwtd2luanMiLHRyaWdnZXI6InlxbCIsdWE6IndpbmpzIn0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoImludGwtYmFzZSIsZnVuY3Rpb24oYSxFKXt2YXIgcT0vWywgXS87YS5taXgoYS5uYW1lc3BhY2UoIkludGwiKSx7bG9va3VwQmVzdExhbmc6ZnVuY3Rpb24odCxmKXt2YXIgZCxjLGI7YS5MYW5nLmlzU3RyaW5nKHQpJiYodD10LnNwbGl0KHEpKTtmb3IoZD0wO2Q8dC5sZW5ndGg7ZCs9MSlpZigoYz10W2RdKSYmIioiIT09Yylmb3IoOzA8Yy5sZW5ndGg7KXthOntiPWM7Zm9yKHZhciBnPXZvaWQgMCxnPTA7ZzxmLmxlbmd0aDtnKz0xKWlmKGIudG9Mb3dlckNhc2UoKT09PWZbZ10udG9Mb3dlckNhc2UoKSl7Yj1mW2ddO2JyZWFrIGF9Yj12b2lkIDB9aWYoYilyZXR1cm4gYjtiPWMubGFzdEluZGV4T2YoIi0iKTtpZigwPD1iKWM9Yy5zdWJzdHJpbmcoMCxiKSwyPD1iJiYiLSI9PT1jLmNoYXJBdChiLTIpJiYoYz1jLnN1YnN0cmluZygwLGItMikpO2Vsc2UgYnJlYWt9cmV0dXJuIiJ9fSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInl1aS1iYXNlIl19KTsKWVVJLmFkZCgieXVpLWxvZyIsZnVuY3Rpb24oYSxFKXt2YXIgcT17ZGVidWc6MSxpbmZvOjIsd2Fybjo0LGVycm9yOjh9O2EubG9nPWZ1bmN0aW9uKHQsZixkLGMpe3ZhciBiLGcsZSxrO2s9YS5jb25maWc7dmFyIG09YS5maXJlP2E6WVVJLkVudi5nbG9iYWxFdmVudHM7ay5kZWJ1ZyYmKGQ9ZHx8IiIsInVuZGVmaW5lZCIhPT10eXBlb2YgZCYmKGc9ay5sb2dFeGNsdWRlLGU9ay5sb2dJbmNsdWRlLCFlfHxkIGluIGU/ZSYmZCBpbiBlP2I9IWVbZF06ZyYmZCBpbiBnJiYoYj1nW2RdKTpiPTEsInVuZGVmaW5lZCI9PT10eXBlb2YgZiYmKGY9ImluZm8iKSxhLmNvbmZpZy5sb2dMZXZlbD1hLmNvbmZpZy5sb2dMZXZlbHx8ImRlYnVnIixnPXFbYS5jb25maWcubG9nTGV2ZWwudG9Mb3dlckNhc2UoKV0sZiBpbiBxJiZxW2ZdPGcmJihiPTEpKSxifHwoay51c2VCcm93c2VyQ29uc29sZSYmKGI9ZD9kKyI6ICIrdDp0LGEuTGFuZy5pc0Z1bmN0aW9uKGsubG9nRm4pP2subG9nRm4uY2FsbChhLAp0LGYsZCk6InVuZGVmaW5lZCIhPT10eXBlb2YgY29uc29sZSYmY29uc29sZS5sb2c/KGs9ZiYmY29uc29sZVtmXSYmZiBpbiBxP2Y6ImxvZyIsY29uc29sZVtrXShiKSk6InVuZGVmaW5lZCIhPT10eXBlb2Ygb3BlcmEmJm9wZXJhLnBvc3RFcnJvcihiKSksbSYmIWMmJihtIT09YXx8bS5nZXRFdmVudCgieXVpOmxvZyIpfHxtLnB1Ymxpc2goInl1aTpsb2ciLHticm9hZGNhc3Q6Mn0pLG0uZmlyZSgieXVpOmxvZyIse21zZzp0LGNhdDpmLHNyYzpkfSkpKSk7cmV0dXJuIGF9O2EubWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiBhLmxvZy5hcHBseShhLGFyZ3VtZW50cyl9fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoInl1aS1sYXRlciIsZnVuY3Rpb24oYSxFKXt2YXIgcT1bXTthLmxhdGVyPWZ1bmN0aW9uKHQsZixkLGMsYil7dD10fHwwO2M9YS5MYW5nLmlzVW5kZWZpbmVkKGMpP3E6YS5BcnJheShjKTtmPWZ8fGEuY29uZmlnLndpbnx8YTt2YXIgZz0hMSxlPWYmJmEuTGFuZy5pc1N0cmluZyhkKT9mW2RdOmQ7ZD1mdW5jdGlvbigpe2d8fChlLmFwcGx5P2UuYXBwbHkoZixjfHxxKTplKGNbMF0sY1sxXSxjWzJdLGNbM10pKX07dmFyIGs9Yj9zZXRJbnRlcnZhbChkLHQpOnNldFRpbWVvdXQoZCx0KTtyZXR1cm57aWQ6ayxpbnRlcnZhbDpiLGNhbmNlbDpmdW5jdGlvbigpe2c9ITA7dGhpcy5pbnRlcnZhbD9jbGVhckludGVydmFsKGspOmNsZWFyVGltZW91dChrKX19fTthLkxhbmcubGF0ZXI9YS5sYXRlcn0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsieXVpLWJhc2UiXX0pOwpZVUkuYWRkKCJsb2FkZXItYmFzZSIsZnVuY3Rpb24oYSxFKXsoZnVuY3Rpb24oKXt2YXIgaD1hLnZlcnNpb24sdT1hLkVudi5iYXNlLHc9dSsiY29tYm8/Iix6PXt2ZXJzaW9uOmgscm9vdDpoKyIvIixiYXNlOmEuRW52LmJhc2UsY29tYm9CYXNlOncsc2tpbjp7ZGVmYXVsdFNraW46InNhbSIsYmFzZToiYXNzZXRzL3NraW5zLyIscGF0aDoic2tpbi5jc3MiLGFmdGVyOiJjc3NyZXNldCBjc3Nmb250cyBjc3NncmlkcyBjc3NiYXNlIGNzc3Jlc2V0LWNvbnRleHQgY3NzZm9udHMtY29udGV4dCIuc3BsaXQoIiAiKX0sZ3JvdXBzOnt9LHBhdHRlcm5zOnt9fSxBPXouZ3JvdXBzLEg9ZnVuY3Rpb24oQixJLE0pe0I9IjJpbjMuIisoQnx8IjQiKSsiLyIrKEl8fCIyLjkuMCIpKyIvYnVpbGQvIjtJPU0mJk0uY29tYm9CYXNlP00uY29tYm9CYXNlOnc7QS55dWkyLmJhc2U9KE0mJk0uYmFzZT9NLmJhc2U6dSkrQjtBLnl1aTIucm9vdD1CO0EueXVpMi5jb21ib0Jhc2U9SX0sRj1mdW5jdGlvbihCLApJKXt2YXIgTT0oQnx8ImdhbGxlcnktMjAxNC4wNi4wNC0yMS0zOCIpKyIvYnVpbGQvIixEPUkmJkkuY29tYm9CYXNlP0kuY29tYm9CYXNlOnc7QS5nYWxsZXJ5LmJhc2U9KEkmJkkuYmFzZT9JLmJhc2U6dSkrTTtBLmdhbGxlcnkucm9vdD1NO0EuZ2FsbGVyeS5jb21ib0Jhc2U9RH07QVtoXT17fTtBLmdhbGxlcnk9e2V4dDohMSxjb21iaW5lOiEwLGNvbWJvQmFzZTp3LHVwZGF0ZTpGLHBhdHRlcm5zOnsiZ2FsbGVyeS0iOnt9LCJsYW5nL2dhbGxlcnktIjp7fSwiZ2FsbGVyeWNzcy0iOnt0eXBlOiJjc3MifX19O0EueXVpMj17Y29tYmluZTohMCxleHQ6ITEsY29tYm9CYXNlOncsdXBkYXRlOkgscGF0dGVybnM6eyJ5dWkyLSI6e2NvbmZpZ0ZuOmZ1bmN0aW9uKEIpey8tc2tpbnxyZXNldHxmb250c3xncmlkc3xiYXNlLy50ZXN0KEIubmFtZSkmJihCLnR5cGU9ImNzcyIsQi5wYXRoPUIucGF0aC5yZXBsYWNlKC9cLmpzLywiLmNzcyIpLEIucGF0aD1CLnBhdGgucmVwbGFjZSgvXC95dWkyLXNraW4vLAoiL2Fzc2V0cy9za2lucy9zYW0veXVpMi1za2luIikpfX19fTtGKCk7SCgpO1lVSS5FbnZbaF0mJmEubWl4KHosWVVJLkVudltoXSwhMSxbIm1vZHVsZXMiLCJncm91cHMiLCJza2luIl0sMCwhMCk7WVVJLkVudltoXT16fSkoKTt2YXIgcT17fSx0PVtdLGY9WVVJLkVudixkPWYuX2xvYWRlZCxjPWEudmVyc2lvbixiPWEuT2JqZWN0LGc9Yi5lYWNoLGU9YS5BcnJheSxrPWYuX2xvYWRlclF1ZXVlLG09ZltjXSxwPWEuTGFuZyxzPWYubW9kcyxsPWZ1bmN0aW9uKGgsdSx3LHope2g9aCsiLyIrdTt6fHwoaCs9Ii1taW4iKTtyZXR1cm4gaCsoIi4iKyh3fHwiY3NzIikpfTtZVUkuRW52Ll9jc3NMb2FkZWR8fChZVUkuRW52Ll9jc3NMb2FkZWQ9e30pO2EuRW52Lm1ldGE9bTthLkxvYWRlcj1mdW5jdGlvbihoKXtoPWh8fHt9O3RoaXMuY29udGV4dD1hO2guZG9CZWZvcmVMb2FkZXImJmguZG9CZWZvcmVMb2FkZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuYmFzZT1hLkVudi5tZXRhLmJhc2UrCmEuRW52Lm1ldGEucm9vdDt0aGlzLmNvbWJvQmFzZT1hLkVudi5tZXRhLmNvbWJvQmFzZTt0aGlzLmNvbWJpbmU9aC5iYXNlJiYtMTxoLmJhc2UuaW5kZXhPZih0aGlzLmNvbWJvQmFzZS5zdWJzdHIoMCwyMCkpO3RoaXMuY29tYm9TZXA9Ilx4MjYiO3RoaXMubWF4VVJMTGVuZ3RoPTEwMjQ7dGhpcy5pZ25vcmVSZWdpc3RlcmVkPWguaWdub3JlUmVnaXN0ZXJlZDt0aGlzLnJvb3Q9YS5FbnYubWV0YS5yb290O3RoaXMudGltZW91dD0wO3RoaXMuZm9yY2VNYXA9e307dGhpcy5hbGxvd1JvbGx1cD0hMTt0aGlzLmZpbHRlcnM9e307dGhpcy5yZXF1aXJlZD17fTt0aGlzLnBhdHRlcm5zPXt9O3RoaXMubW9kdWxlSW5mbz17fTt0aGlzLmdyb3Vwcz1hLm1lcmdlKGEuRW52Lm1ldGEuZ3JvdXBzKTt0aGlzLnNraW49YS5tZXJnZShhLkVudi5tZXRhLnNraW4pO3RoaXMuY29uZGl0aW9ucz17fTt0aGlzLmNvbmZpZz1oO3RoaXMuX2ludGVybmFsPSEwO3RoaXMuX3BvcHVsYXRlQ29uZGl0aW9uc0NhY2hlKCk7CnRoaXMubG9hZGVkPWRbY107dGhpcy5hc3luYz0hMDt0aGlzLl9pbnNwZWN0UGFnZSgpO3RoaXMuX2ludGVybmFsPSExO3RoaXMuX2NvbmZpZyhoKTt0aGlzLmZvcmNlTWFwPXRoaXMuZm9yY2U/YS5BcnJheS5oYXNoKHRoaXMuZm9yY2UpOnt9O3RoaXMudGVzdHJlc3VsdHM9bnVsbDthLmNvbmZpZy50ZXN0cyYmKHRoaXMudGVzdHJlc3VsdHM9YS5jb25maWcudGVzdHMpO3RoaXMuc29ydGVkPVtdO3RoaXMuZGlydHk9ITA7dGhpcy5pbnNlcnRlZD17fTt0aGlzLnNraXBwZWQ9e307dGhpcy50ZXN0ZWQ9e307dGhpcy5pZ25vcmVSZWdpc3RlcmVkJiZ0aGlzLl9yZXNldE1vZHVsZXMoKX07YS5Mb2FkZXIucHJvdG90eXBlPXtnZXRNb2R1bGVJbmZvOmZ1bmN0aW9uKGgpe3ZhciB1PXRoaXMubW9kdWxlSW5mb1toXSx3LHo7aWYodSlyZXR1cm4gdTt3PW0ubW9kdWxlczt6PWYuX3JlbmRlcmVkTW9kczt1PXRoaXMuX2ludGVybmFsO3omJnouaGFzT3duUHJvcGVydHkoaCkmJiF0aGlzLmlnbm9yZVJlZ2lzdGVyZWQ/CnRoaXMubW9kdWxlSW5mb1toXT1hLm1lcmdlKHpbaF0pOncuaGFzT3duUHJvcGVydHkoaCkmJih0aGlzLl9pbnRlcm5hbD0hMCwodz10aGlzLmFkZE1vZHVsZSh3W2hdLGgpKSYmImNzcyI9PT13LnR5cGUmJnRoaXMuaXNDU1NMb2FkZWQody5uYW1lLCEwKSYmKHRoaXMubG9hZGVkW3cubmFtZV09ITApLHRoaXMuX2ludGVybmFsPXUpO3JldHVybiB0aGlzLm1vZHVsZUluZm9baF19LF9leHBhbmRBbGlhc2VzOmZ1bmN0aW9uKGgpe3ZhciB1PVtdLHc9WVVJLkVudi5hbGlhc2VzLHosQTtoPWEuQXJyYXkoaCk7Zm9yKHo9MDt6PGgubGVuZ3RoO3orPTEpQT1oW3pdLHUucHVzaC5hcHBseSh1LHdbQV0/d1tBXTpbQV0pO3JldHVybiB1fSxfcG9wdWxhdGVDb25kaXRpb25zQ2FjaGU6ZnVuY3Rpb24oKXt2YXIgaD1tLm1vZHVsZXMsdT1mLl9jb25kaXRpb25zLHcseixBO2lmKHUmJiF0aGlzLmlnbm9yZVJlZ2lzdGVyZWQpZm9yKHcgaW4gdSl1Lmhhc093blByb3BlcnR5KHcpJiYodGhpcy5jb25kaXRpb25zW3ddPQphLm1lcmdlKHVbd10pKTtlbHNle2Zvcih3IGluIGgpaWYoaC5oYXNPd25Qcm9wZXJ0eSh3KSYmaFt3XS5jb25kaXRpb24pZm9yKHo9dGhpcy5fZXhwYW5kQWxpYXNlcyhoW3ddLmNvbmRpdGlvbi50cmlnZ2VyKSx1PTA7dTx6Lmxlbmd0aDt1Kz0xKUE9elt1XSx0aGlzLmNvbmRpdGlvbnNbQV09dGhpcy5jb25kaXRpb25zW0FdfHx7fSx0aGlzLmNvbmRpdGlvbnNbQV1baFt3XS5uYW1lfHx3XT1oW3ddLmNvbmRpdGlvbjtmLl9jb25kaXRpb25zPXRoaXMuY29uZGl0aW9uc319LF9yZXNldE1vZHVsZXM6ZnVuY3Rpb24oKXt2YXIgaCx1LHcseixBO2ZvcihoIGluIHRoaXMubW9kdWxlSW5mbylpZih0aGlzLm1vZHVsZUluZm8uaGFzT3duUHJvcGVydHkoaCkmJnRoaXMubW9kdWxlSW5mb1toXSl7dz10aGlzLm1vZHVsZUluZm9baF07ej13Lm5hbWU7aWYoQT1ZVUkuRW52Lm1vZHNbel0/WVVJLkVudi5tb2RzW3pdLmRldGFpbHM6bnVsbCl0aGlzLm1vZHVsZUluZm9bel0uX3Jlc2V0PSEwLHRoaXMubW9kdWxlSW5mb1t6XS5yZXF1aXJlcz0KQS5yZXF1aXJlc3x8W10sdGhpcy5tb2R1bGVJbmZvW3pdLm9wdGlvbmFsPUEub3B0aW9uYWx8fFtdLHRoaXMubW9kdWxlSW5mb1t6XS5zdXBlcnNlZGVzPUEuc3VwZXJjZWRlc3x8W107aWYody5kZWZhdWx0cylmb3IodSBpbiB3LmRlZmF1bHRzKXcuZGVmYXVsdHMuaGFzT3duUHJvcGVydHkodSkmJndbdV0mJih3W3VdPXcuZGVmYXVsdHNbdV0pO3cubGFuZ0NhY2hlPXZvaWQgMDt3LnNraW5DYWNoZT12b2lkIDA7dy5za2lubmFibGUmJnRoaXMuX2FkZFNraW4odGhpcy5za2luLmRlZmF1bHRTa2luLHcubmFtZSl9fSxSRUdFWF9DU1M6L1wuY3NzKD86Wz87XS4qKT8kL2ksRklMVEVSX0RFRlM6e1JBVzp7c2VhcmNoRXhwOiItbWluXFwuanMiLHJlcGxhY2VTdHI6Ii5qcyJ9LERFQlVHOntzZWFyY2hFeHA6Ii1taW5cXC5qcyIscmVwbGFjZVN0cjoiLWRlYnVnLmpzIn0sQ09WRVJBR0U6e3NlYXJjaEV4cDoiLW1pblxcLmpzIixyZXBsYWNlU3RyOiItY292ZXJhZ2UuanMifX0sX2luc3BlY3RQYWdlOmZ1bmN0aW9uKCl7dmFyIGgsCnUsdyx6LEE7Zm9yKEEgaW4gcylzLmhhc093blByb3BlcnR5KEEpJiYoaD1zW0FdLGguZGV0YWlscyYmKHU9dGhpcy5nZXRNb2R1bGVJbmZvKGgubmFtZSksdz1oLmRldGFpbHMucmVxdWlyZXMsej11JiZ1LnJlcXVpcmVzLHU/IXUuX2luc3BlY3RlZCYmdyYmei5sZW5ndGghPT13Lmxlbmd0aCYmZGVsZXRlIHUuZXhwYW5kZWQ6dT10aGlzLmFkZE1vZHVsZShoLmRldGFpbHMsQSksdS5faW5zcGVjdGVkPSEwKSl9LF9yZXF1aXJlczpmdW5jdGlvbihoLHUpe3ZhciB3LHosQSxIPXRoaXMuZ2V0TW9kdWxlSW5mbyhoKSxGPXRoaXMuZ2V0TW9kdWxlSW5mbyh1KTtpZighSHx8IUYpcmV0dXJuITE7ej1ILmV4cGFuZGVkX21hcDtpZigodz1ILmFmdGVyX21hcCkmJnUgaW4gdylyZXR1cm4hMDtpZigodz1GLmFmdGVyX21hcCkmJmggaW4gdylyZXR1cm4hMTtpZihBPUYuc3VwZXJzZWRlcylmb3Iodz0wO3c8QS5sZW5ndGg7dysrKWlmKHRoaXMuX3JlcXVpcmVzKGgsQVt3XSkpcmV0dXJuITA7aWYoQT0KSC5zdXBlcnNlZGVzKWZvcih3PTA7dzxBLmxlbmd0aDt3KyspaWYodGhpcy5fcmVxdWlyZXModSxBW3ddKSlyZXR1cm4hMTtyZXR1cm4geiYmdSBpbiB6fHxILmV4dCYmImNzcyI9PT1ILnR5cGUmJiFGLmV4dCYmImNzcyI9PT1GLnR5cGU/ITA6ITF9LF9jb25maWc6ZnVuY3Rpb24oaCl7dmFyIHUsdyx6LEEsSCxGLEI9dGhpcyxJPVtdO2lmKGgpZm9yKHUgaW4gaClpZihoLmhhc093blByb3BlcnR5KHUpKWlmKHo9aFt1XSwicmVxdWlyZSI9PT11KUIucmVxdWlyZSh6KTtlbHNlIGlmKCJza2luIj09PXUpInN0cmluZyI9PT10eXBlb2YgeiYmKEIuc2tpbi5kZWZhdWx0U2tpbj1oLnNraW4sej17ZGVmYXVsdFNraW46en0pLGEubWl4KEIuc2tpbix6LCEwKTtlbHNlIGlmKCJncm91cHMiPT09dSlmb3IodyBpbiB6KXtpZih6Lmhhc093blByb3BlcnR5KHcpJiYoRj13LEg9elt3XSxCLmFkZEdyb3VwKEgsRiksSC5hbGlhc2VzKSlmb3IoQSBpbiBILmFsaWFzZXMpSC5hbGlhc2VzLmhhc093blByb3BlcnR5KEEpJiYKQi5hZGRBbGlhcyhILmFsaWFzZXNbQV0sQSl9ZWxzZSBpZigibW9kdWxlcyI9PT11KWZvcih3IGluIHopei5oYXNPd25Qcm9wZXJ0eSh3KSYmQi5hZGRNb2R1bGUoelt3XSx3KTtlbHNlIGlmKCJhbGlhc2VzIj09PXUpZm9yKHcgaW4geil6Lmhhc093blByb3BlcnR5KHcpJiZCLmFkZEFsaWFzKHpbd10sdyk7ZWxzZSJnYWxsZXJ5Ij09PXU/dGhpcy5ncm91cHMuZ2FsbGVyeS51cGRhdGUmJnRoaXMuZ3JvdXBzLmdhbGxlcnkudXBkYXRlKHosaCk6Inl1aTIiPT09dXx8IjJpbjMiPT09dT90aGlzLmdyb3Vwcy55dWkyLnVwZGF0ZSYmdGhpcy5ncm91cHMueXVpMi51cGRhdGUoaFsiMmluMyJdLGgueXVpMixoKTpCW3VdPXo7dT1CLmZpbHRlcjtwLmlzU3RyaW5nKHUpJiYodT11LnRvVXBwZXJDYXNlKCksQi5maWx0ZXJOYW1lPXUsQi5maWx0ZXI9Qi5GSUxURVJfREVGU1t1XSwiREVCVUciPT09dSYmQi5yZXF1aXJlKCJ5dWktbG9nIiwiZHVtcCIpKTtpZihCLmZpbHRlck5hbWUmJkIuY292ZXJhZ2UmJgoiQ09WRVJBR0UiPT09Qi5maWx0ZXJOYW1lJiZwLmlzQXJyYXkoQi5jb3ZlcmFnZSkmJkIuY292ZXJhZ2UubGVuZ3RoKXtmb3IodT0wO3U8Qi5jb3ZlcmFnZS5sZW5ndGg7dSsrKWg9Qi5jb3ZlcmFnZVt1XSwodz1CLmdldE1vZHVsZUluZm8oaCkpJiZ3LnVzZT9JPUkuY29uY2F0KHcudXNlKTpJLnB1c2goaCk7Qi5maWx0ZXJzPUIuZmlsdGVyc3x8e307YS5BcnJheS5lYWNoKEksZnVuY3Rpb24oTSl7Qi5maWx0ZXJzW01dPUIuRklMVEVSX0RFRlMuQ09WRVJBR0V9KTtCLmZpbHRlck5hbWU9IlJBVyI7Qi5maWx0ZXI9Qi5GSUxURVJfREVGU1tCLmZpbHRlck5hbWVdfX0sZm9ybWF0U2tpbjpmdW5jdGlvbihoLHUpe3ZhciB3PSJza2luLSIraDt1JiYodz13KyItIit1KTtyZXR1cm4gd30sX2FkZFNraW46ZnVuY3Rpb24oaCx1LHcpe3ZhciB6LEEsSD10aGlzLnNraW4sRj11JiZ0aGlzLmdldE1vZHVsZUluZm8odSksQj1GJiZGLmV4dDt1JiYoQT10aGlzLmZvcm1hdFNraW4oaCx1KSx0aGlzLmdldE1vZHVsZUluZm8oQSl8fAooej1GLnBrZ3x8dSxoPXtza2luOiEwLG5hbWU6QSxncm91cDpGLmdyb3VwLHR5cGU6ImNzcyIsYWZ0ZXI6SC5hZnRlcixwYXRoOih3fHx6KSsiLyIrSC5iYXNlK2grIi8iK3UrIi5jc3MiLGV4dDpCfSxGLmJhc2UmJihoLmJhc2U9Ri5iYXNlKSxGLmNvbmZpZ0ZuJiYoaC5jb25maWdGbj1GLmNvbmZpZ0ZuKSx0aGlzLmFkZE1vZHVsZShoLEEpKSk7cmV0dXJuIEF9LGFkZEFsaWFzOmZ1bmN0aW9uKGgsdSl7WVVJLkVudi5hbGlhc2VzW3VdPWg7dGhpcy5hZGRNb2R1bGUoe25hbWU6dSx1c2U6aH0pfSxhZGRHcm91cDpmdW5jdGlvbihoLHUpe3ZhciB3PWgubW9kdWxlcyx6PWguZGVmYXVsdEJhc2V8fGEuY29uZmlnLmRlZmF1bHRCYXNlLEE7dT11fHxoLm5hbWU7aC5uYW1lPXU7dGhpcy5ncm91cHNbdV09aDshaC5iYXNlJiZ6JiZoLnJvb3QmJihoLmJhc2U9eitoLnJvb3QpO2lmKGgucGF0dGVybnMpZm9yKEEgaW4gaC5wYXR0ZXJucyloLnBhdHRlcm5zLmhhc093blByb3BlcnR5KEEpJiYKKGgucGF0dGVybnNbQV0uZ3JvdXA9dSx0aGlzLnBhdHRlcm5zW0FdPWgucGF0dGVybnNbQV0pO2lmKHcpZm9yKEEgaW4gdyl3Lmhhc093blByb3BlcnR5KEEpJiYoej13W0FdLCJzdHJpbmciPT09dHlwZW9mIHomJih6PXtuYW1lOkEsZnVsbHBhdGg6en0pLHouZ3JvdXA9dSx0aGlzLmFkZE1vZHVsZSh6LEEpKX0sYWRkTW9kdWxlOmZ1bmN0aW9uKGgsdSl7dT11fHxoLm5hbWU7InN0cmluZyI9PT10eXBlb2YgaCYmKGg9e25hbWU6dSxmdWxscGF0aDpofSk7dmFyIHcseixBLEgsRixCLEksTSxELEosUCxWO3c9dGhpcy5tb2R1bGVJbmZvW3VdO3ZhciBZPXRoaXMuY29uZGl0aW9uczt3JiZ3LnRlbXAmJihoPWEubWVyZ2UodyxoKSk7aC5uYW1lPXU7aWYoIWh8fCFoLm5hbWUpcmV0dXJuIG51bGw7aC50eXBlfHwoaC50eXBlPSJqcyIsKHc9aC5wYXRofHxoLmZ1bGxwYXRoKSYmdGhpcy5SRUdFWF9DU1MudGVzdCh3KSYmKGgudHlwZT0iY3NzIikpO2gucGF0aHx8aC5mdWxscGF0aHx8KGgucGF0aD0KbCh1LHUsaC50eXBlKSk7aC5zdXBlcnNlZGVzPWguc3VwZXJzZWRlc3x8aC51c2U7aC5leHQ9ImV4dCJpbiBoP2guZXh0OnRoaXMuX2ludGVybmFsPyExOiEwO3c9aC5zdWJtb2R1bGVzO3RoaXMubW9kdWxlSW5mb1t1XT1oO2gucmVxdWlyZXM9aC5yZXF1aXJlc3x8W107aWYodGhpcy5yZXF1aXJlcylmb3Ioej0wO3o8dGhpcy5yZXF1aXJlcy5sZW5ndGg7eisrKWgucmVxdWlyZXMucHVzaCh0aGlzLnJlcXVpcmVzW3pdKTtpZihoLmdyb3VwJiZ0aGlzLmdyb3VwcyYmdGhpcy5ncm91cHNbaC5ncm91cF0mJihBPXRoaXMuZ3JvdXBzW2guZ3JvdXBdLEEucmVxdWlyZXMpKWZvcih6PTA7ejxBLnJlcXVpcmVzLmxlbmd0aDt6KyspaC5yZXF1aXJlcy5wdXNoKEEucmVxdWlyZXNbel0pO2guZGVmYXVsdHN8fChoLmRlZmF1bHRzPXtyZXF1aXJlczpoLnJlcXVpcmVzP1tdLmNvbmNhdChoLnJlcXVpcmVzKTpudWxsLHN1cGVyc2VkZXM6aC5zdXBlcnNlZGVzP1tdLmNvbmNhdChoLnN1cGVyc2VkZXMpOgpudWxsLG9wdGlvbmFsOmgub3B0aW9uYWw/W10uY29uY2F0KGgub3B0aW9uYWwpOm51bGx9KTtoLnNraW5uYWJsZSYmaC5leHQmJmgudGVtcCYmKEo9dGhpcy5fYWRkU2tpbih0aGlzLnNraW4uZGVmYXVsdFNraW4sdSksaC5yZXF1aXJlcy51bnNoaWZ0KEopKTtoLnJlcXVpcmVzLmxlbmd0aCYmKGgucmVxdWlyZXM9dGhpcy5maWx0ZXJSZXF1aXJlcyhoLnJlcXVpcmVzKXx8W10pO2lmKCFoLmxhbmdQYWNrJiZoLmxhbmcpZm9yKEo9dGhpcy5nZXRMYW5nUGFja05hbWUoIiIsdSksKEk9dGhpcy5nZXRNb2R1bGVJbmZvKEopKXx8dGhpcy5fYWRkTGFuZ1BhY2sobnVsbCxoLEopLEI9ZShoLmxhbmcpLEQ9MDtEPEIubGVuZ3RoO0QrKylWPUJbRF0sSj10aGlzLmdldExhbmdQYWNrTmFtZShWLHUpLChJPXRoaXMuZ2V0TW9kdWxlSW5mbyhKKSl8fHRoaXMuX2FkZExhbmdQYWNrKFYsaCxKKTtpZih3KXtGPWguc3VwZXJzZWRlc3x8W107QT0wO2Zvcih6IGluIHcpaWYody5oYXNPd25Qcm9wZXJ0eSh6KSl7Qj0Kd1t6XTtCLnBhdGg9Qi5wYXRofHxsKHUseixoLnR5cGUpO0IucGtnPXU7Qi5ncm91cD1oLmdyb3VwO0Iuc3VwZXJzZWRlcyYmKEY9Ri5jb25jYXQoQi5zdXBlcnNlZGVzKSk7ST10aGlzLmFkZE1vZHVsZShCLHopO0YucHVzaCh6KTtpZihJLnNraW5uYWJsZSl7aC5za2lubmFibGU9ITA7aWYoKEk9dGhpcy5za2luLm92ZXJyaWRlcykmJklbel0pZm9yKEQ9MDtEPElbel0ubGVuZ3RoO0QrKylKPXRoaXMuX2FkZFNraW4oSVt6XVtEXSx6LHUpLEYucHVzaChKKTtKPXRoaXMuX2FkZFNraW4odGhpcy5za2luLmRlZmF1bHRTa2luLHosdSk7Ri5wdXNoKEopfWlmKEIubGFuZyYmQi5sYW5nLmxlbmd0aClmb3IoSj10aGlzLmdldExhbmdQYWNrTmFtZSgiIix1KSwoST10aGlzLmdldE1vZHVsZUluZm8oSikpfHx0aGlzLl9hZGRMYW5nUGFjayhudWxsLGgsSiksQj1lKEIubGFuZyksRD0wO0Q8Qi5sZW5ndGg7RCsrKVY9QltEXSxKPXRoaXMuZ2V0TGFuZ1BhY2tOYW1lKFYsdSksUD10aGlzLmdldExhbmdQYWNrTmFtZShWLAp6KSwoST10aGlzLmdldE1vZHVsZUluZm8oSikpfHwoST10aGlzLl9hZGRMYW5nUGFjayhWLGgsSikpLEg9SHx8ZS5oYXNoKEkuc3VwZXJzZWRlcyksUCBpbiBIfHxJLnN1cGVyc2VkZXMucHVzaChQKSxoLmxhbmc9aC5sYW5nfHxbXSxNPU18fGUuaGFzaChoLmxhbmcpLFYgaW4gTXx8aC5sYW5nLnB1c2goViksSj10aGlzLmdldExhbmdQYWNrTmFtZSgiIix1KSxQPXRoaXMuZ2V0TGFuZ1BhY2tOYW1lKCIiLHopLChJPXRoaXMuZ2V0TW9kdWxlSW5mbyhKKSl8fChJPXRoaXMuX2FkZExhbmdQYWNrKFYsaCxKKSksUCBpbiBIfHxJLnN1cGVyc2VkZXMucHVzaChQKTtBKyt9aC5zdXBlcnNlZGVzPWUuZGVkdXBlKEYpO3RoaXMuYWxsb3dSb2xsdXAmJihoLnJvbGx1cD00PkE/QTpNYXRoLm1pbihBLTEsNCkpfWlmKEg9aC5wbHVnaW5zKWZvcih6IGluIEgpSC5oYXNPd25Qcm9wZXJ0eSh6KSYmKE09SFt6XSxNLnBrZz11LE0ucGF0aD1NLnBhdGh8fGwodSx6LGgudHlwZSksTS5yZXF1aXJlcz0KTS5yZXF1aXJlc3x8W10sTS5ncm91cD1oLmdyb3VwLHRoaXMuYWRkTW9kdWxlKE0seiksaC5za2lubmFibGUmJnRoaXMuX2FkZFNraW4odGhpcy5za2luLmRlZmF1bHRTa2luLHosdSkpO2lmKGguY29uZGl0aW9uKWZvcihIPXRoaXMuX2V4cGFuZEFsaWFzZXMoaC5jb25kaXRpb24udHJpZ2dlciksej0wO3o8SC5sZW5ndGg7eisrKXc9SFt6XSxNPWguY29uZGl0aW9uLndoZW4sWVt3XT1ZW3ddfHx7fSxZW3ddW3VdPWguY29uZGl0aW9uLE0mJiJhZnRlciIhPT1NPyJpbnN0ZWFkIj09PU0mJihoLnN1cGVyc2VkZXM9aC5zdXBlcnNlZGVzfHxbXSxoLnN1cGVyc2VkZXMucHVzaCh3KSk6KGguYWZ0ZXI9aC5hZnRlcnx8W10saC5hZnRlci5wdXNoKHcpKTtoLnN1cGVyc2VkZXMmJihoLnN1cGVyc2VkZXM9dGhpcy5maWx0ZXJSZXF1aXJlcyhoLnN1cGVyc2VkZXMpKTtoLmFmdGVyJiYoaC5hZnRlcj10aGlzLmZpbHRlclJlcXVpcmVzKGguYWZ0ZXIpLGguYWZ0ZXJfbWFwPWUuaGFzaChoLmFmdGVyKSk7CmguY29uZmlnRm4mJih6PWguY29uZmlnRm4oaCksITE9PT16JiYoZGVsZXRlIHRoaXMubW9kdWxlSW5mb1t1XSxkZWxldGUgZi5fcmVuZGVyZWRNb2RzW3VdLGg9bnVsbCkpO2gmJihmLl9yZW5kZXJlZE1vZHN8fChmLl9yZW5kZXJlZE1vZHM9e30pLGYuX3JlbmRlcmVkTW9kc1t1XT1hLm1peChmLl9yZW5kZXJlZE1vZHNbdV18fHt9LGgpLGYuX2NvbmRpdGlvbnM9WSk7cmV0dXJuIGh9LHJlcXVpcmU6ZnVuY3Rpb24oaCl7dmFyIHU9InN0cmluZyI9PT10eXBlb2YgaD9lKGFyZ3VtZW50cyk6aDt0aGlzLmRpcnR5PSEwO3RoaXMucmVxdWlyZWQ9YS5tZXJnZSh0aGlzLnJlcXVpcmVkLGUuaGFzaCh0aGlzLmZpbHRlclJlcXVpcmVzKHUpKSk7dGhpcy5fZXhwbG9kZVJvbGx1cHMoKX0sX2V4cGxvZGVSb2xsdXBzOmZ1bmN0aW9uKCl7dmFyIGgsdSx3LHosQSxILEYsQj10aGlzLnJlcXVpcmVkO2lmKCF0aGlzLmFsbG93Um9sbHVwKXtmb3IodyBpbiBCKWlmKEIuaGFzT3duUHJvcGVydHkodykmJgooaD10aGlzLmdldE1vZHVsZSh3KSkmJmgudXNlKWZvcihIPWgudXNlLmxlbmd0aCx6PTA7ejxIO3orKylpZigodT10aGlzLmdldE1vZHVsZShoLnVzZVt6XSkpJiZ1LnVzZSlmb3IoRj11LnVzZS5sZW5ndGgsQT0wO0E8RjtBKyspQlt1LnVzZVtBXV09ITA7ZWxzZSBCW2gudXNlW3pdXT0hMDt0aGlzLnJlcXVpcmVkPUJ9fSxmaWx0ZXJSZXF1aXJlczpmdW5jdGlvbihoKXtpZihoKXthLkxhbmcuaXNBcnJheShoKXx8KGg9W2hdKTtoPWEuQXJyYXkoaCk7dmFyIHU9W10sdyx6LEEsSDtmb3Iodz0wO3c8aC5sZW5ndGg7dysrKWlmKCh6PXRoaXMuZ2V0TW9kdWxlKGhbd10pKSYmei51c2UpZm9yKEE9MDtBPHoudXNlLmxlbmd0aDtBKyspKEg9dGhpcy5nZXRNb2R1bGUoei51c2VbQV0pKSYmSC51c2UmJkgubmFtZSE9PXoubmFtZT91PWEuQXJyYXkuZGVkdXBlKFtdLmNvbmNhdCh1LHRoaXMuZmlsdGVyUmVxdWlyZXMoSC51c2UpKSk6dS5wdXNoKHoudXNlW0FdKTtlbHNlIHUucHVzaChoW3ddKTsKaD11fXJldHVybiBofSxfY2FuQmVBdHRhY2hlZDpmdW5jdGlvbihoKXtyZXR1cm4oaD10aGlzLmdldE1vZHVsZShoKSkmJmgudGVzdD8oaC5oYXNPd25Qcm9wZXJ0eSgiX3Rlc3RSZXN1bHQiKXx8KGguX3Rlc3RSZXN1bHQ9aC50ZXN0KGEpKSxoLl90ZXN0UmVzdWx0KTohMH0sZ2V0UmVxdWlyZXM6ZnVuY3Rpb24oaCl7aWYoIWgpcmV0dXJuIHQ7aWYoaC5fcGFyc2VkKXJldHVybiBoLmV4cGFuZGVkfHx0O3ZhciB1LHcseixBLEgsRj10aGlzLnRlc3RyZXN1bHRzLEI9aC5uYW1lO3U9c1tCXSYmc1tCXS5kZXRhaWxzO3ZhciBJPWgub3B0aW9uYWxSZXF1aXJlcyxNLEQ7SD1oLmxhbmd8fGguaW50bDt2YXIgSj1hLkZlYXR1cmVzJiZhLkZlYXR1cmVzLnRlc3RzLmxvYWQsUDtoLnRlbXAmJnUmJih6PWgsaD10aGlzLmFkZE1vZHVsZSh1LEIpLGguZ3JvdXA9ei5ncm91cCxoLnBrZz16LnBrZyxkZWxldGUgaC5leHBhbmRlZCk7dT0hKCghdGhpcy5sYW5nfHxoLmxhbmdDYWNoZT09PXRoaXMubGFuZykmJgpoLnNraW5DYWNoZT09PXRoaXMuc2tpbi5kZWZhdWx0U2tpbik7aWYoaC5leHBhbmRlZCYmIXUpcmV0dXJuIGguZXhwYW5kZWQ7aWYoSSlmb3IodT0wLHo9SS5sZW5ndGg7dTx6O3UrKyl0aGlzLl9jYW5CZUF0dGFjaGVkKElbdV0pJiZoLnJlcXVpcmVzLnB1c2goSVt1XSk7TT1bXTtQPXt9O0k9dGhpcy5maWx0ZXJSZXF1aXJlcyhoLnJlcXVpcmVzKTtoLmxhbmcmJihNLnVuc2hpZnQoImludGwiKSxJLnVuc2hpZnQoImludGwiKSxIPSEwKTt6PXRoaXMuZmlsdGVyUmVxdWlyZXMoaC5vcHRpb25hbCk7aC5fcGFyc2VkPSEwO2gubGFuZ0NhY2hlPXRoaXMubGFuZztoLnNraW5DYWNoZT10aGlzLnNraW4uZGVmYXVsdFNraW47Zm9yKHU9MDt1PEkubGVuZ3RoO3UrKylpZighUFtJW3VdXSYmKE0ucHVzaChJW3VdKSxQW0lbdV1dPSEwLHc9dGhpcy5nZXRNb2R1bGUoSVt1XSkpKWZvcihBPXRoaXMuZ2V0UmVxdWlyZXModyksSD1IfHx3LmV4cGFuZGVkX21hcCYmKCJpbnRsImluIHcuZXhwYW5kZWRfbWFwKSwKdz0wO3c8QS5sZW5ndGg7dysrKU0ucHVzaChBW3ddKTtpZihJPXRoaXMuZmlsdGVyUmVxdWlyZXMoaC5zdXBlcnNlZGVzKSlmb3IodT0wO3U8SS5sZW5ndGg7dSsrKWlmKCFQW0lbdV1dJiYoaC5zdWJtb2R1bGVzJiZNLnB1c2goSVt1XSksUFtJW3VdXT0hMCx3PXRoaXMuZ2V0TW9kdWxlKElbdV0pKSlmb3IoQT10aGlzLmdldFJlcXVpcmVzKHcpLEg9SHx8dy5leHBhbmRlZF9tYXAmJigiaW50bCJpbiB3LmV4cGFuZGVkX21hcCksdz0wO3c8QS5sZW5ndGg7dysrKU0ucHVzaChBW3ddKTtpZih6JiZ0aGlzLmxvYWRPcHRpb25hbClmb3IodT0wO3U8ei5sZW5ndGg7dSsrKWlmKCFQW3pbdV1dJiYoTS5wdXNoKHpbdV0pLFBbelt1XV09ITAsdz10aGlzLmdldE1vZHVsZUluZm8oelt1XSkpKWZvcihBPXRoaXMuZ2V0UmVxdWlyZXModyksSD1IfHx3LmV4cGFuZGVkX21hcCYmKCJpbnRsImluIHcuZXhwYW5kZWRfbWFwKSx3PTA7dzxBLmxlbmd0aDt3KyspTS5wdXNoKEFbd10pO2lmKHo9dGhpcy5jb25kaXRpb25zW0JdKWlmKGguX3BhcnNlZD0KITEsRiYmSilnKEYsZnVuY3Rpb24oVixZKXt2YXIgbmE9SltZXS5uYW1lOyFQW25hXSYmSltZXS50cmlnZ2VyPT09QiYmViYmSltZXSYmKFBbbmFdPSEwLE0ucHVzaChuYSkpfSk7ZWxzZSBmb3IodSBpbiB6KWlmKHouaGFzT3duUHJvcGVydHkodSkmJiFQW3VdJiYoRj0oRj16W3VdKSYmKCFGLnVhJiYhRi50ZXN0fHxGLnVhJiZhLlVBW0YudWFdfHxGLnRlc3QmJkYudGVzdChhLEkpKSkmJihQW3VdPSEwLE0ucHVzaCh1KSx3PXRoaXMuZ2V0TW9kdWxlKHUpKSlmb3IoQT10aGlzLmdldFJlcXVpcmVzKHcpLHc9MDt3PEEubGVuZ3RoO3crKylNLnB1c2goQVt3XSk7aWYoaC5za2lubmFibGUpe0Y9dGhpcy5za2luLm92ZXJyaWRlcztmb3IodSBpbiBZVUkuRW52LmFsaWFzZXMpWVVJLkVudi5hbGlhc2VzLmhhc093blByb3BlcnR5KHUpJiYtMTxhLkFycmF5LmluZGV4T2YoWVVJLkVudi5hbGlhc2VzW3VdLEIpJiYoRD11KTtpZihGJiYoRltCXXx8RCYmRltEXSkpZm9yKEk9QixGW0RdJiYoST0KRCksdT0wO3U8RltJXS5sZW5ndGg7dSsrKUQ9dGhpcy5fYWRkU2tpbihGW0ldW3VdLEIpLHRoaXMuaXNDU1NMb2FkZWQoRCx0aGlzLl9ib290KXx8TS5wdXNoKEQpO2Vsc2UgRD10aGlzLl9hZGRTa2luKHRoaXMuc2tpbi5kZWZhdWx0U2tpbixCKSx0aGlzLmlzQ1NTTG9hZGVkKEQsdGhpcy5fYm9vdCl8fE0ucHVzaChEKX1oLl9wYXJzZWQ9ITE7SCYmKGgubGFuZyYmIWgubGFuZ1BhY2smJmEuSW50bCYmKEg9YS5JbnRsLmxvb2t1cEJlc3RMYW5nKHRoaXMubGFuZ3x8IiIsaC5sYW5nKSwoSD10aGlzLmdldExhbmdQYWNrTmFtZShILEIpKSYmTS51bnNoaWZ0KEgpKSxNLnVuc2hpZnQoImludGwiKSk7aC5leHBhbmRlZF9tYXA9ZS5oYXNoKE0pO2guZXhwYW5kZWQ9Yi5rZXlzKGguZXhwYW5kZWRfbWFwKTtyZXR1cm4gaC5leHBhbmRlZH0saXNDU1NMb2FkZWQ6ZnVuY3Rpb24oaCx1KXtpZighaHx8IVlVSS5FbnYuY3NzU3RhbXBFbHx8IXUmJnRoaXMuaWdub3JlUmVnaXN0ZXJlZClyZXR1cm4hMTsKdmFyIHc9WVVJLkVudi5jc3NTdGFtcEVsLHo9ITEsQT1ZVUkuRW52Ll9jc3NMb2FkZWRbaF0sSD13LmN1cnJlbnRTdHlsZTtpZih2b2lkIDAhPT1BKXJldHVybiBBO3cuY2xhc3NOYW1lPWg7SHx8KEg9YS5jb25maWcuZG9jLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodyxudWxsKSk7SCYmIm5vbmUiPT09SC5kaXNwbGF5JiYoej0hMCk7dy5jbGFzc05hbWU9IiI7cmV0dXJuIFlVSS5FbnYuX2Nzc0xvYWRlZFtoXT16fSxnZXRQcm92aWRlczpmdW5jdGlvbihoKXt2YXIgdT10aGlzLmdldE1vZHVsZShoKSx3LHo7aWYoIXUpcmV0dXJuIHE7dSYmIXUucHJvdmlkZXMmJih3PXt9LCh6PXUuc3VwZXJzZWRlcykmJmUuZWFjaCh6LGZ1bmN0aW9uKEEpe2EubWl4KHcsdGhpcy5nZXRQcm92aWRlcyhBKSl9LHRoaXMpLHdbaF09ITAsdS5wcm92aWRlcz13KTtyZXR1cm4gdS5wcm92aWRlc30sY2FsY3VsYXRlOmZ1bmN0aW9uKGgsdSl7aWYoaHx8dXx8dGhpcy5kaXJ0eSloJiZ0aGlzLl9jb25maWcoaCksCnRoaXMuX2luaXR8fHRoaXMuX3NldHVwKCksdGhpcy5fZXhwbG9kZSgpLHRoaXMuYWxsb3dSb2xsdXA/dGhpcy5fcm9sbHVwKCk6dGhpcy5fZXhwbG9kZVJvbGx1cHMoKSx0aGlzLl9yZWR1Y2UoKSx0aGlzLl9zb3J0KCl9LF9hZGRMYW5nUGFjazpmdW5jdGlvbihoLHUsdyl7dmFyIHo9dS5uYW1lLEE7dGhpcy5nZXRNb2R1bGVJbmZvKHcpfHwoQT1sKHUucGtnfHx6LHcsImpzIiwhMCksQT17cGF0aDpBLGludGw6ITAsbGFuZ1BhY2s6ITAsZXh0OnUuZXh0LGdyb3VwOnUuZ3JvdXAsc3VwZXJzZWRlczpbXX0sdS5yb290JiYoQS5yb290PXUucm9vdCksdS5iYXNlJiYoQS5iYXNlPXUuYmFzZSksdS5jb25maWdGbiYmKEEuY29uZmlnRm49dS5jb25maWdGbiksdGhpcy5hZGRNb2R1bGUoQSx3KSxoJiYoYS5FbnYubGFuZz1hLkVudi5sYW5nfHx7fSxhLkVudi5sYW5nW2hdPWEuRW52LmxhbmdbaF18fHt9LGEuRW52LmxhbmdbaF1bel09ITApKTtyZXR1cm4gdGhpcy5nZXRNb2R1bGVJbmZvKHcpfSwKX3NldHVwOmZ1bmN0aW9uKCl7dmFyIGg9dGhpcy5tb2R1bGVJbmZvLHUsdyx6LEE7Zm9yKHUgaW4gaCloLmhhc093blByb3BlcnR5KHUpJiYoej1oW3VdKSYmKHoucmVxdWlyZXM9ZS5kZWR1cGUoei5yZXF1aXJlcyksei5sYW5nJiYoQT10aGlzLmdldExhbmdQYWNrTmFtZSgiIix1KSx0aGlzLl9hZGRMYW5nUGFjayhudWxsLHosQSkpKTtoPXt9O3RoaXMuaWdub3JlUmVnaXN0ZXJlZHx8YS5taXgoaCxmLm1vZHMpO3RoaXMuaWdub3JlJiZhLm1peChoLGUuaGFzaCh0aGlzLmlnbm9yZSkpO2Zvcih3IGluIGgpaC5oYXNPd25Qcm9wZXJ0eSh3KSYmYS5taXgoaCx0aGlzLmdldFByb3ZpZGVzKHcpKTtpZih0aGlzLmZvcmNlKWZvcih3PTA7dzx0aGlzLmZvcmNlLmxlbmd0aDt3KyspdGhpcy5mb3JjZVt3XWluIGgmJmRlbGV0ZSBoW3RoaXMuZm9yY2Vbd11dO2EubWl4KHRoaXMubG9hZGVkLGgpO3RoaXMuX2luaXQ9ITB9LGdldExhbmdQYWNrTmFtZTpmdW5jdGlvbihoLHUpe3JldHVybiJsYW5nLyIrCnUrKGg/Il8iK2g6IiIpfSxfZXhwbG9kZTpmdW5jdGlvbigpe3ZhciBoPXRoaXMucmVxdWlyZWQsdSx3LHo9e30sQTt0aGlzLmRpcnR5PSExO3RoaXMuX2V4cGxvZGVSb2xsdXBzKCk7aD10aGlzLnJlcXVpcmVkO2ZvcihBIGluIGgpaWYoaC5oYXNPd25Qcm9wZXJ0eShBKSYmIXpbQV0mJih6W0FdPSEwLHU9dGhpcy5nZXRNb2R1bGUoQSkpKXtpZih3PXUuZXhwb3VuZCloW3ddPXRoaXMuZ2V0TW9kdWxlKHcpLHc9dGhpcy5nZXRSZXF1aXJlcyhoW3ddKSxhLm1peChoLGUuaGFzaCh3KSk7dz10aGlzLmdldFJlcXVpcmVzKHUpO2EubWl4KGgsZS5oYXNoKHcpKX19LF9wYXR0ZXJuVGVzdDpmdW5jdGlvbihoLHUpe3JldHVybi0xPGguaW5kZXhPZih1KX0sZ2V0TW9kdWxlOmZ1bmN0aW9uKGgpe2lmKCFoKXJldHVybiBudWxsO3ZhciB1LHcseixBPXRoaXMuZ2V0TW9kdWxlSW5mbyhoKSxIPXRoaXMucGF0dGVybnM7aWYoIUF8fEEmJkEuZXh0KWZvcih6IGluIEgpaWYoSC5oYXNPd25Qcm9wZXJ0eSh6KSYmCih1PUhbel0sdS50ZXN0fHwodS50ZXN0PXRoaXMuX3BhdHRlcm5UZXN0KSx1LnRlc3QoaCx6KSkpe3c9dTticmVha31BP3cmJkEmJncuY29uZmlnRm4mJiFBLmNvbmZpZ0ZuJiYoQS5jb25maWdGbj13LmNvbmZpZ0ZuLEEuY29uZmlnRm4oQSkpOncmJih1LmFjdGlvbj91LmFjdGlvbi5jYWxsKHRoaXMsaCx6KTooQT10aGlzLmFkZE1vZHVsZShhLm1lcmdlKHcse3Rlc3Q6dm9pZCAwLHRlbXA6ITB9KSxoKSkmJncuY29uZmlnRm4mJihBLmNvbmZpZ0ZuPXcuY29uZmlnRm4pKTtyZXR1cm4gQX0sX3JvbGx1cDpmdW5jdGlvbigpe30sX3JlZHVjZTpmdW5jdGlvbihoKXtoPWh8fHRoaXMucmVxdWlyZWQ7dmFyIHUsdyx6LEE9dGhpcy5sb2FkVHlwZSxIPXRoaXMuaWdub3JlP2UuaGFzaCh0aGlzLmlnbm9yZSk6ITE7Zm9yKHUgaW4gaClpZihoLmhhc093blByb3BlcnR5KHUpJiYodz10aGlzLmdldE1vZHVsZSh1KSwoKHRoaXMubG9hZGVkW3VdfHxzW3VdKSYmIXRoaXMuZm9yY2VNYXBbdV0mJgohdGhpcy5pZ25vcmVSZWdpc3RlcmVkfHxBJiZ3JiZ3LnR5cGUhPT1BKSYmZGVsZXRlIGhbdV0sSCYmSFt1XSYmZGVsZXRlIGhbdV0sej13JiZ3LnN1cGVyc2VkZXMpKWZvcih3PTA7dzx6Lmxlbmd0aDt3Kyspelt3XWluIGgmJmRlbGV0ZSBoW3pbd11dO3JldHVybiBofSxfZmluaXNoOmZ1bmN0aW9uKGgsdSl7ay5ydW5uaW5nPSExO3ZhciB3PXRoaXMub25FbmQ7dyYmdy5jYWxsKHRoaXMuY29udGV4dCx7bXNnOmgsZGF0YTp0aGlzLmRhdGEsc3VjY2Vzczp1fSk7dGhpcy5fY29udGludWUoKX0sX29uU3VjY2VzczpmdW5jdGlvbigpe3ZhciBoPWEubWVyZ2UodGhpcy5za2lwcGVkKSx1LHc9W107dT10aGlzLnJlcXVpcmVSZWdpc3RyYXRpb247dmFyIHosQTtmb3IoeiBpbiBoKWguaGFzT3duUHJvcGVydHkoeikmJmRlbGV0ZSB0aGlzLmluc2VydGVkW3pdO3RoaXMuc2tpcHBlZD17fTtmb3IoeiBpbiB0aGlzLmluc2VydGVkKXRoaXMuaW5zZXJ0ZWQuaGFzT3duUHJvcGVydHkoeikmJihBPQp0aGlzLmdldE1vZHVsZSh6KSwhQXx8IXV8fCJqcyIhPT1BLnR5cGV8fHogaW4gWVVJLkVudi5tb2RzP2EubWl4KHRoaXMubG9hZGVkLHRoaXMuZ2V0UHJvdmlkZXMoeikpOncucHVzaCh6KSk7dT10aGlzLm9uU3VjY2VzcztBPXcubGVuZ3RoPyJub3RyZWdpc3RlcmVkIjoic3VjY2VzcyI7ej0hdy5sZW5ndGg7dSYmdS5jYWxsKHRoaXMuY29udGV4dCx7bXNnOkEsZGF0YTp0aGlzLmRhdGEsc3VjY2Vzczp6LGZhaWxlZDp3LHNraXBwZWQ6aH0pO3RoaXMuX2ZpbmlzaChBLHopfSxfb25Qcm9ncmVzczpmdW5jdGlvbihoKXt2YXIgdTtpZihoLmRhdGEmJmguZGF0YS5sZW5ndGgpZm9yKHU9MDt1PGguZGF0YS5sZW5ndGg7dSsrKWguZGF0YVt1XT10aGlzLmdldE1vZHVsZShoLmRhdGFbdV0ubmFtZSk7dGhpcy5vblByb2dyZXNzJiZ0aGlzLm9uUHJvZ3Jlc3MuY2FsbCh0aGlzLmNvbnRleHQse25hbWU6aC51cmwsZGF0YTpoLmRhdGF9KX0sX29uRmFpbHVyZTpmdW5jdGlvbihoKXtmb3IodmFyIHU9CnRoaXMub25GYWlsdXJlLHc9W10sej0wLEE9aC5lcnJvcnMubGVuZ3RoO3o8QTt6Kyspdy5wdXNoKGguZXJyb3JzW3pdLmVycm9yKTt3PXcuam9pbigiLCIpO3UmJnUuY2FsbCh0aGlzLmNvbnRleHQse21zZzp3LGRhdGE6dGhpcy5kYXRhLHN1Y2Nlc3M6ITF9KTt0aGlzLl9maW5pc2godywhMSl9LF9vblRpbWVvdXQ6ZnVuY3Rpb24oaCl7dmFyIHU9dGhpcy5vblRpbWVvdXQ7dSYmdS5jYWxsKHRoaXMuY29udGV4dCx7bXNnOiJ0aW1lb3V0IixkYXRhOnRoaXMuZGF0YSxzdWNjZXNzOiExLHRyYW5zYWN0aW9uOmh9KX0sX3NvcnQ6ZnVuY3Rpb24oKXt2YXIgaCx1PXRoaXMucmVxdWlyZWQsdz17fTt0aGlzLnNvcnRlZD1bXTtmb3IoaCBpbiB1KSF3W2hdJiZ1Lmhhc093blByb3BlcnR5KGgpJiZ0aGlzLl92aXNpdChoLHcpfSxfdmlzaXQ6ZnVuY3Rpb24oaCx1KXt2YXIgdyx6LEEsSCxGLEIsSTt1W2hdPSEwO3c9dGhpcy5yZXF1aXJlZDtBPXRoaXMubW9kdWxlSW5mb1toXTt6PXRoaXMuY29uZGl0aW9uc1toXXx8Cnt9O2lmKEEpZm9yKEg9QS5leHBhbmRlZHx8QS5yZXF1aXJlcyxCPTAsST1ILmxlbmd0aDtCPEk7KytCKUE9SFtCXSxGPShGPXpbQV0pJiYoIUYud2hlbnx8ImFmdGVyIj09PUYud2hlbiksIXdbQV18fHVbQV18fEZ8fHRoaXMuX3Zpc2l0KEEsdSk7dGhpcy5zb3J0ZWQucHVzaChoKX0sX2luc2VydDpmdW5jdGlvbihoLHUsdyx6KXtoJiZ0aGlzLl9jb25maWcoaCk7aD10aGlzLnJlc29sdmUoIXopO3ZhciBBPXRoaXMsSD0wLEY9MCxCPXt9LEksTTtBLl9yZWZldGNoPVtdO3cmJihoWyJqcyI9PT13PyJjc3MiOiJqcyJdPVtdKTtBLmZldGNoQ1NTfHwoaC5jc3M9W10pO2guanMubGVuZ3RoJiZIKys7aC5jc3MubGVuZ3RoJiZIKys7TT1mdW5jdGlvbihEKXtGKys7dmFyIEo9MCxQPTA7aWYoRCYmRC5lcnJvcnMpZm9yKEo9MDtKPEQuZXJyb3JzLmxlbmd0aDtKKyspO2lmKEQmJkQuZGF0YSYmRC5kYXRhLmxlbmd0aCYmInN1Y2Nlc3MiPT09RC50eXBlKWZvcihKPTA7SjxELmRhdGEubGVuZ3RoO0orKylpZihBLmluc2VydGVkW0QuZGF0YVtKXS5uYW1lXT0KITAsRC5kYXRhW0pdLmxhbmd8fEQuZGF0YVtKXS5za2lubmFibGUpZGVsZXRlIEEuaW5zZXJ0ZWRbRC5kYXRhW0pdLm5hbWVdLEEuX3JlZmV0Y2gucHVzaChELmRhdGFbSl0ubmFtZSk7aWYoRj09PUgpe0EuX2xvYWRpbmc9bnVsbDtpZihBLl9yZWZldGNoLmxlbmd0aCl7Zm9yKEo9MDtKPEEuX3JlZmV0Y2gubGVuZ3RoO0orKylmb3IoST1BLmdldFJlcXVpcmVzKEEuZ2V0TW9kdWxlKEEuX3JlZmV0Y2hbSl0pKSxQPTA7UDxJLmxlbmd0aDtQKyspQS5pbnNlcnRlZFtJW1BdXXx8KEJbSVtQXV09SVtQXSk7Qj1hLk9iamVjdC5rZXlzKEIpO2lmKEIubGVuZ3RoKXtBLnJlcXVpcmUoQik7UD1BLnJlc29sdmUoITApO2lmKFAuY3NzTW9kcy5sZW5ndGgpe2ZvcihKPTA7SjxQLmNzc01vZHMubGVuZ3RoO0orKylEPVAuY3NzTW9kc1tKXS5uYW1lLGRlbGV0ZSBZVUkuRW52Ll9jc3NMb2FkZWRbRF0sQS5pc0NTU0xvYWRlZChEKSYmKEEuaW5zZXJ0ZWRbRF09ITAsZGVsZXRlIEEucmVxdWlyZWRbRF0pOwpBLnNvcnRlZD1bXTtBLl9zb3J0KCl9RD1udWxsO0EuX2luc2VydCgpfX1EJiZELmZuJiYoSj1ELmZuLGRlbGV0ZSBELmZuLEouY2FsbChBLEQpKX19O3RoaXMuX2xvYWRpbmc9ITA7aC5qcy5sZW5ndGh8fGguY3NzLmxlbmd0aD8oaC5jc3MubGVuZ3RoJiZhLkdldC5jc3MoaC5jc3Mse2RhdGE6aC5jc3NNb2RzLGF0dHJpYnV0ZXM6QS5jc3NBdHRyaWJ1dGVzLGluc2VydEJlZm9yZTpBLmluc2VydEJlZm9yZSxjaGFyc2V0OkEuY2hhcnNldCx0aW1lb3V0OkEudGltZW91dCxjb250ZXh0OkEsb25Qcm9ncmVzczpmdW5jdGlvbihEKXtBLl9vblByb2dyZXNzLmNhbGwoQSxEKX0sb25UaW1lb3V0OmZ1bmN0aW9uKEQpe0EuX29uVGltZW91dC5jYWxsKEEsRCl9LG9uU3VjY2VzczpmdW5jdGlvbihEKXtELnR5cGU9InN1Y2Nlc3MiO0QuZm49QS5fb25TdWNjZXNzO00uY2FsbChBLEQpfSxvbkZhaWx1cmU6ZnVuY3Rpb24oRCl7RC50eXBlPSJmYWlsdXJlIjtELmZuPUEuX29uRmFpbHVyZTtNLmNhbGwoQSwKRCl9fSksaC5qcy5sZW5ndGgmJmEuR2V0LmpzKGguanMse2RhdGE6aC5qc01vZHMsaW5zZXJ0QmVmb3JlOkEuaW5zZXJ0QmVmb3JlLGF0dHJpYnV0ZXM6QS5qc0F0dHJpYnV0ZXMsY2hhcnNldDpBLmNoYXJzZXQsdGltZW91dDpBLnRpbWVvdXQsYXV0b3B1cmdlOiExLGNvbnRleHQ6QSxhc3luYzpBLmFzeW5jLG9uUHJvZ3Jlc3M6ZnVuY3Rpb24oRCl7QS5fb25Qcm9ncmVzcy5jYWxsKEEsRCl9LG9uVGltZW91dDpmdW5jdGlvbihEKXtBLl9vblRpbWVvdXQuY2FsbChBLEQpfSxvblN1Y2Nlc3M6ZnVuY3Rpb24oRCl7RC50eXBlPSJzdWNjZXNzIjtELmZuPUEuX29uU3VjY2VzcztNLmNhbGwoQSxEKX0sb25GYWlsdXJlOmZ1bmN0aW9uKEQpe0QudHlwZT0iZmFpbHVyZSI7RC5mbj1BLl9vbkZhaWx1cmU7TS5jYWxsKEEsRCl9fSkpOihGPS0xLE0oe2ZuOkEuX29uU3VjY2Vzc30pKX0sX2NvbnRpbnVlOmZ1bmN0aW9uKCl7IWsucnVubmluZyYmMDxrLnNpemUoKSYmKGsucnVubmluZz0hMCxrLm5leHQoKSgpKX0sCmluc2VydDpmdW5jdGlvbihoLHUsdyl7dmFyIHo9dGhpcyxBPWEubWVyZ2UodGhpcyk7ZGVsZXRlIEEucmVxdWlyZTtkZWxldGUgQS5kaXJ0eTtrLmFkZChmdW5jdGlvbigpe3ouX2luc2VydChBLGgsdSx3KX0pO3RoaXMuX2NvbnRpbnVlKCl9LGxvYWROZXh0OmZ1bmN0aW9uKCl7fSxfZmlsdGVyOmZ1bmN0aW9uKGgsdSx3KXt2YXIgej10aGlzLmZpbHRlcixBPXUmJnUgaW4gdGhpcy5maWx0ZXJzLEg9QSYmdGhpcy5maWx0ZXJzW3VdOyh1PXd8fCh0aGlzLmdldE1vZHVsZUluZm8odSl8fHt9KS5ncm91cHx8bnVsbCkmJnRoaXMuZ3JvdXBzW3VdJiZ0aGlzLmdyb3Vwc1t1XS5maWx0ZXImJihIPXRoaXMuZ3JvdXBzW3VdLmZpbHRlcixBPSEwKTtoJiYoQSYmKHo9cC5pc1N0cmluZyhIKT90aGlzLkZJTFRFUl9ERUZTW0gudG9VcHBlckNhc2UoKV18fG51bGw6SCkseiYmKGg9aC5yZXBsYWNlKFJlZ0V4cCh6LnNlYXJjaEV4cCwiZyIpLHoucmVwbGFjZVN0cikpKTtyZXR1cm4gaH0sX3VybDpmdW5jdGlvbihoLAp1LHcpe3JldHVybiB0aGlzLl9maWx0ZXIoKHd8fHRoaXMuYmFzZXx8IiIpK2gsdSl9LHJlc29sdmU6ZnVuY3Rpb24oaCx1KXt2YXIgdz10aGlzLHo9e2pzOltdLGpzTW9kczpbXSxjc3M6W10sY3NzTW9kczpbXX0sQSxIPWEuY29uZmlnLmNvbWJvTG9hZGVyJiZhLmNvbmZpZy5jdXN0b21Db21ib0Jhc2U7KHcuc2tpbi5vdmVycmlkZXN8fCJzYW0iIT09dy5za2luLmRlZmF1bHRTa2lufHx3Lmlnbm9yZVJlZ2lzdGVyZWQpJiZ3Ll9yZXNldE1vZHVsZXMoKTtoJiZ3LmNhbGN1bGF0ZSgpO3U9dXx8dy5zb3J0ZWQ7QT1mdW5jdGlvbihmYSl7aWYoZmEpe3ZhciBpYT1mYS5ncm91cCYmdy5ncm91cHNbZmEuZ3JvdXBdfHxxOyExPT09aWEuYXN5bmMmJihmYS5hc3luYz1pYS5hc3luYyk7aWE9ZmEuZnVsbHBhdGg/dy5fZmlsdGVyKGZhLmZ1bGxwYXRoLGZhLm5hbWUpOncuX3VybChmYS5wYXRoLGZhLm5hbWUsaWEuYmFzZXx8ZmEuYmFzZSk7aWYoZmEuYXR0cmlidXRlc3x8ITE9PT1mYS5hc3luYylpYT0Ke3VybDppYSxhc3luYzpmYS5hc3luY30sZmEuYXR0cmlidXRlcyYmKGlhLmF0dHJpYnV0ZXM9ZmEuYXR0cmlidXRlcyk7eltmYS50eXBlXS5wdXNoKGlhKTt6W2ZhLnR5cGUrIk1vZHMiXS5wdXNoKGZhKX19O3ZhciBGPXcuaWdub3JlUmVnaXN0ZXJlZD97fTp3Lmluc2VydGVkLEIsSSxNLEQsSixQLFYsWSxuYT0hMTtZPTA7Zm9yKFY9dS5sZW5ndGg7WTxWO1krKylpZigoUD13LmdldE1vZHVsZSh1W1ldKSkmJiFGW1AubmFtZV0pe0o9dy5ncm91cHNbUC5ncm91cF07TT13LmNvbWJvQmFzZTtpZihKKXtpZighSi5jb21iaW5lfHxQLmZ1bGxwYXRoKXtBKFApO2NvbnRpbnVlfVAuY29tYmluZT0hMDsic3RyaW5nIj09PXR5cGVvZiBKLnJvb3QmJihQLnJvb3Q9Si5yb290KTtNPUouY29tYm9CYXNlfHxNO0Q9Si5jb21ib1NlcDtJPUoubWF4VVJMTGVuZ3RofWVsc2UgaWYoIXcuY29tYmluZSl7QShQKTtjb250aW51ZX0hUC5jb21iaW5lJiZQLmV4dD9BKFApOihuYT0hMCxCPUJ8fHt9LEJbTV09CkJbTV18fHtqczpbXSxqc01vZHM6W10sY3NzOltdLGNzc01vZHM6W119LE09QltNXSxNLmdyb3VwPVAuZ3JvdXAsTS5jb21ib1NlcD1EfHx3LmNvbWJvU2VwLE0ubWF4VVJMTGVuZ3RoPUl8fHcubWF4VVJMTGVuZ3RoLE1bUC50eXBlKyJNb2RzIl0ucHVzaChQKSwianMiIT09UC50eXBlJiYiY3NzIiE9PVAudHlwZXx8eltQLnR5cGUrIk1vZHMiXS5wdXNoKFApKX1uYSYmKHo9SD90aGlzLl9wYXRob2dlbkVuY29kZUNvbWJvU291cmNlcyh6KTp0aGlzLl9lbmNvZGVDb21ib1NvdXJjZXMoeixCKSk7cmV0dXJuIHp9LF9lbmNvZGVDb21ib1NvdXJjZXM6ZnVuY3Rpb24oaCx1KXt2YXIgdyx6LEEsSCxGLEIsSSxNLEQsSixQO2ZvcihJIGluIHUpaWYodS5oYXNPd25Qcm9wZXJ0eShJKSlmb3IoRiBpbiBNPXVbSV0sRD1NLmNvbWJvU2VwLEI9TS5tYXhVUkxMZW5ndGgsTSlpZigianMiPT09Rnx8ImNzcyI9PT1GKXt6PU1bRisiTW9kcyJdO0g9W107Sj0wO2ZvcihQPXoubGVuZ3RoO0o8UDtKKz0KMSl3PXpbSl0sQT0oInN0cmluZyI9PT10eXBlb2Ygdy5yb290P3cucm9vdDp0aGlzLnJvb3QpKyh3LnBhdGh8fHcuZnVsbHBhdGgpLEgucHVzaCh0aGlzLl9maWx0ZXIoQSx3Lm5hbWUpKTt6PUkrSC5qb2luKEQpO0E9ei5sZW5ndGg7Qjw9SS5sZW5ndGgmJihCPTEwMjQpO2lmKEgubGVuZ3RoKWlmKEE+Qil7dz1bXTtKPTA7Zm9yKFA9SC5sZW5ndGg7SjxQO0orKyl3LnB1c2goSFtKXSksej1JK3cuam9pbihEKSx6Lmxlbmd0aD5CJiYoQT13LnBvcCgpLHo9SSt3LmpvaW4oRCksaFtGXS5wdXNoKHRoaXMuX2ZpbHRlcih6LG51bGwsTS5ncm91cCkpLHc9W10sQSYmdy5wdXNoKEEpKTt3Lmxlbmd0aCYmKHo9SSt3LmpvaW4oRCksaFtGXS5wdXNoKHRoaXMuX2ZpbHRlcih6LG51bGwsTS5ncm91cCkpKX1lbHNlIGhbRl0ucHVzaCh0aGlzLl9maWx0ZXIoeixudWxsLE0uZ3JvdXApKX1yZXR1cm4gaH0sbG9hZDpmdW5jdGlvbihoKXtpZihoKXt2YXIgdT10aGlzLHc9dS5yZXNvbHZlKCEwKTt1LmRhdGE9Cnc7dS5vbkVuZD1mdW5jdGlvbigpe2guYXBwbHkodS5jb250ZXh0fHx1LGFyZ3VtZW50cyl9O3UuaW5zZXJ0KCl9fX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImdldCIsImZlYXR1cmVzIl19KTsKWVVJLmFkZCgibG9hZGVyLXJvbGx1cCIsZnVuY3Rpb24oYSxFKXthLkxvYWRlci5wcm90b3R5cGUuX3JvbGx1cD1mdW5jdGlvbigpe3ZhciBxLHQsZixkLGM9dGhpcy5yZXF1aXJlZCxiLGc9dGhpcy5tb2R1bGVJbmZvLGUsayxtO2lmKHRoaXMuZGlydHl8fCF0aGlzLnJvbGx1cHMpZm9yKHEgaW4gdGhpcy5yb2xsdXBzPXt9LGcpZy5oYXNPd25Qcm9wZXJ0eShxKSYmKGY9dGhpcy5nZXRNb2R1bGUocSkpJiZmLnJvbGx1cCYmKHRoaXMucm9sbHVwc1txXT1mKTtmb3IoOzspe2U9ITE7Zm9yKHEgaW4gdGhpcy5yb2xsdXBzKWlmKHRoaXMucm9sbHVwcy5oYXNPd25Qcm9wZXJ0eShxKSYmIWNbcV0mJighdGhpcy5sb2FkZWRbcV18fHRoaXMuZm9yY2VNYXBbcV0pJiYoZj10aGlzLmdldE1vZHVsZShxKSxkPWYuc3VwZXJzZWRlc3x8W10sYj0hMSxmLnJvbGx1cCkpe2Zvcih0PWs9MDt0PGQubGVuZ3RoO3QrKylpZihtPWdbZFt0XV0sdGhpcy5sb2FkZWRbZFt0XV0mJiF0aGlzLmZvcmNlTWFwW2RbdF1dKXtiPQohMTticmVha31lbHNlIGlmKGNbZFt0XV0mJmYudHlwZT09PW0udHlwZSYmKGsrKyxiPWs+PWYucm9sbHVwKSlicmVhaztiJiYoZT1jW3FdPSEwLHRoaXMuZ2V0UmVxdWlyZXMoZikpfWlmKCFlKWJyZWFrfX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImxvYWRlci1iYXNlIl19KTsKWVVJLmFkZCgibG9hZGVyLXl1aTMiLGZ1bmN0aW9uKGEsRSl7WVVJLkVudlthLnZlcnNpb25dLm1vZHVsZXM9WVVJLkVudlthLnZlcnNpb25dLm1vZHVsZXN8fHt9O2EubWl4KFlVSS5FbnZbYS52ZXJzaW9uXS5tb2R1bGVzLHsiYWxpZ24tcGx1Z2luIjp7cmVxdWlyZXM6WyJub2RlLXNjcmVlbiIsIm5vZGUtcGx1Z2luaG9zdCJdfSxhbmltOnt1c2U6ImFuaW0tYmFzZSBhbmltLWNvbG9yIGFuaW0tY3VydmUgYW5pbS1lYXNpbmcgYW5pbS1ub2RlLXBsdWdpbiBhbmltLXNjcm9sbCBhbmltLXh5Ii5zcGxpdCgiICIpfSwiYW5pbS1iYXNlIjp7cmVxdWlyZXM6WyJiYXNlLWJhc2UiLCJub2RlLXN0eWxlIiwiY29sb3ItYmFzZSJdfSwiYW5pbS1jb2xvciI6e3JlcXVpcmVzOlsiYW5pbS1iYXNlIl19LCJhbmltLWN1cnZlIjp7cmVxdWlyZXM6WyJhbmltLXh5Il19LCJhbmltLWVhc2luZyI6e3JlcXVpcmVzOlsiYW5pbS1iYXNlIl19LCJhbmltLW5vZGUtcGx1Z2luIjp7cmVxdWlyZXM6WyJub2RlLXBsdWdpbmhvc3QiLAoiYW5pbS1iYXNlIl19LCJhbmltLXNjcm9sbCI6e3JlcXVpcmVzOlsiYW5pbS1iYXNlIl19LCJhbmltLXNoYXBlIjp7cmVxdWlyZXM6WyJhbmltLWJhc2UiLCJhbmltLWVhc2luZyIsImFuaW0tY29sb3IiLCJtYXRyaXgiXX0sImFuaW0tc2hhcGUtdHJhbnNmb3JtIjp7dXNlOlsiYW5pbS1zaGFwZSJdfSwiYW5pbS14eSI6e3JlcXVpcmVzOlsiYW5pbS1iYXNlIiwibm9kZS1zY3JlZW4iXX0sYXBwOnt1c2U6ImFwcC1iYXNlIGFwcC1jb250ZW50IGFwcC10cmFuc2l0aW9ucyBsYXp5LW1vZGVsLWxpc3QgbW9kZWwgbW9kZWwtbGlzdCBtb2RlbC1zeW5jLXJlc3QgbW9kZWwtc3luYy1sb2NhbCByb3V0ZXIgdmlldyB2aWV3LW5vZGUtbWFwIi5zcGxpdCgiICIpfSwiYXBwLWJhc2UiOntyZXF1aXJlczpbImNsYXNzbmFtZW1hbmFnZXIiLCJwamF4LWJhc2UiLCJyb3V0ZXIiLCJ2aWV3Il19LCJhcHAtY29udGVudCI6e3JlcXVpcmVzOlsiYXBwLWJhc2UiLCJwamF4LWNvbnRlbnQiXX0sImFwcC10cmFuc2l0aW9ucyI6e3JlcXVpcmVzOlsiYXBwLWJhc2UiXX0sCiJhcHAtdHJhbnNpdGlvbnMtY3NzIjp7dHlwZToiY3NzIn0sImFwcC10cmFuc2l0aW9ucy1uYXRpdmUiOntjb25kaXRpb246e25hbWU6ImFwcC10cmFuc2l0aW9ucy1uYXRpdmUiLHRlc3Q6ZnVuY3Rpb24ocSl7cmV0dXJuKHE9KHE9cS5jb25maWcuZG9jKT9xLmRvY3VtZW50RWxlbWVudDpudWxsKSYmcS5zdHlsZT8iTW96VHJhbnNpdGlvbiJpbiBxLnN0eWxlfHwiV2Via2l0VHJhbnNpdGlvbiJpbiBxLnN0eWxlfHwidHJhbnNpdGlvbiJpbiBxLnN0eWxlOiExfSx0cmlnZ2VyOiJhcHAtdHJhbnNpdGlvbnMifSxyZXF1aXJlczpbImFwcC10cmFuc2l0aW9ucyIsImFwcC10cmFuc2l0aW9ucy1jc3MiLCJwYXJhbGxlbCIsInRyYW5zaXRpb24iXX0sImFycmF5LWV4dHJhcyI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sImFycmF5LWludm9rZSI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sYXJyYXlsaXN0OntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJhcnJheWxpc3QtYWRkIjp7cmVxdWlyZXM6WyJhcnJheWxpc3QiXX0sCiJhcnJheWxpc3QtZmlsdGVyIjp7cmVxdWlyZXM6WyJhcnJheWxpc3QiXX0sYXJyYXlzb3J0OntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJhc3luYy1xdWV1ZSI6e3JlcXVpcmVzOlsiZXZlbnQtY3VzdG9tIl19LGF0dHJpYnV0ZTp7dXNlOlsiYXR0cmlidXRlLWJhc2UiLCJhdHRyaWJ1dGUtY29tcGxleCJdfSwiYXR0cmlidXRlLWJhc2UiOntyZXF1aXJlczpbImF0dHJpYnV0ZS1jb3JlIiwiYXR0cmlidXRlLW9ic2VydmFibGUiLCJhdHRyaWJ1dGUtZXh0cmFzIl19LCJhdHRyaWJ1dGUtY29tcGxleCI6e3JlcXVpcmVzOlsiYXR0cmlidXRlLWJhc2UiXX0sImF0dHJpYnV0ZS1jb3JlIjp7cmVxdWlyZXM6WyJvb3AiXX0sImF0dHJpYnV0ZS1ldmVudHMiOnt1c2U6WyJhdHRyaWJ1dGUtb2JzZXJ2YWJsZSJdfSwiYXR0cmlidXRlLWV4dHJhcyI6e3JlcXVpcmVzOlsib29wIl19LCJhdHRyaWJ1dGUtb2JzZXJ2YWJsZSI6e3JlcXVpcmVzOlsiZXZlbnQtY3VzdG9tIl19LGF1dG9jb21wbGV0ZTp7dXNlOlsiYXV0b2NvbXBsZXRlLWJhc2UiLAoiYXV0b2NvbXBsZXRlLXNvdXJjZXMiLCJhdXRvY29tcGxldGUtbGlzdCIsImF1dG9jb21wbGV0ZS1wbHVnaW4iXX0sImF1dG9jb21wbGV0ZS1iYXNlIjp7b3B0aW9uYWw6WyJhdXRvY29tcGxldGUtc291cmNlcyJdLHJlcXVpcmVzOlsiYXJyYXktZXh0cmFzIiwiYmFzZS1idWlsZCIsImVzY2FwZSIsImV2ZW50LXZhbHVlY2hhbmdlIiwibm9kZS1iYXNlIl19LCJhdXRvY29tcGxldGUtZmlsdGVycyI6e3JlcXVpcmVzOlsiYXJyYXktZXh0cmFzIiwidGV4dC13b3JkYnJlYWsiXX0sImF1dG9jb21wbGV0ZS1maWx0ZXJzLWFjY2VudGZvbGQiOntyZXF1aXJlczpbImFycmF5LWV4dHJhcyIsInRleHQtYWNjZW50Zm9sZCIsInRleHQtd29yZGJyZWFrIl19LCJhdXRvY29tcGxldGUtaGlnaGxpZ2h0ZXJzIjp7cmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLCJoaWdobGlnaHQtYmFzZSJdfSwiYXV0b2NvbXBsZXRlLWhpZ2hsaWdodGVycy1hY2NlbnRmb2xkIjp7cmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLAoiaGlnaGxpZ2h0LWFjY2VudGZvbGQiXX0sImF1dG9jb21wbGV0ZS1saXN0Ijp7YWZ0ZXI6WyJhdXRvY29tcGxldGUtc291cmNlcyJdLGxhbmc6WyJlbiIsImVzIiwiaHUiLCJpdCJdLHJlcXVpcmVzOiJhdXRvY29tcGxldGUtYmFzZSBldmVudC1yZXNpemUgbm9kZS1zY3JlZW4gc2VsZWN0b3ItY3NzMyBzaGltLXBsdWdpbiB3aWRnZXQgd2lkZ2V0LXBvc2l0aW9uIHdpZGdldC1wb3NpdGlvbi1hbGlnbiIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdXRvY29tcGxldGUtbGlzdC1rZXlzIjp7Y29uZGl0aW9uOntuYW1lOiJhdXRvY29tcGxldGUtbGlzdC1rZXlzIix0ZXN0OmZ1bmN0aW9uKHEpe3JldHVybiEocS5VQS5pb3N8fHEuVUEuYW5kcm9pZCl9LHRyaWdnZXI6ImF1dG9jb21wbGV0ZS1saXN0In0scmVxdWlyZXM6WyJhdXRvY29tcGxldGUtbGlzdCIsImJhc2UtYnVpbGQiXX0sImF1dG9jb21wbGV0ZS1wbHVnaW4iOntyZXF1aXJlczpbImF1dG9jb21wbGV0ZS1saXN0Iiwibm9kZS1wbHVnaW5ob3N0Il19LAoiYXV0b2NvbXBsZXRlLXNvdXJjZXMiOntvcHRpb25hbDpbImlvLWJhc2UiLCJqc29uLXBhcnNlIiwianNvbnAiLCJ5cWwiXSxyZXF1aXJlczpbImF1dG9jb21wbGV0ZS1iYXNlIl19LGF4ZXM6e3VzZTpbImF4aXMtbnVtZXJpYyIsImF4aXMtY2F0ZWdvcnkiLCJheGlzLXRpbWUiLCJheGlzLXN0YWNrZWQiXX0sImF4ZXMtYmFzZSI6e3VzZTpbImF4aXMtbnVtZXJpYy1iYXNlIiwiYXhpcy1jYXRlZ29yeS1iYXNlIiwiYXhpcy10aW1lLWJhc2UiLCJheGlzLXN0YWNrZWQtYmFzZSJdfSxheGlzOntyZXF1aXJlczoiZG9tIHdpZGdldCB3aWRnZXQtcG9zaXRpb24gd2lkZ2V0LXN0YWNrIGdyYXBoaWNzIGF4aXMtYmFzZSIuc3BsaXQoIiAiKX0sImF4aXMtYmFzZSI6e3JlcXVpcmVzOlsiY2xhc3NuYW1lbWFuYWdlciIsImRhdGF0eXBlLW51bWJlciIsImRhdGF0eXBlLWRhdGUiLCJiYXNlIiwiZXZlbnQtY3VzdG9tIl19LCJheGlzLWNhdGVnb3J5Ijp7cmVxdWlyZXM6WyJheGlzIiwiYXhpcy1jYXRlZ29yeS1iYXNlIl19LAoiYXhpcy1jYXRlZ29yeS1iYXNlIjp7cmVxdWlyZXM6WyJheGlzLWJhc2UiXX0sImF4aXMtbnVtZXJpYyI6e3JlcXVpcmVzOlsiYXhpcyIsImF4aXMtbnVtZXJpYy1iYXNlIl19LCJheGlzLW51bWVyaWMtYmFzZSI6e3JlcXVpcmVzOlsiYXhpcy1iYXNlIl19LCJheGlzLXN0YWNrZWQiOntyZXF1aXJlczpbImF4aXMtbnVtZXJpYyIsImF4aXMtc3RhY2tlZC1iYXNlIl19LCJheGlzLXN0YWNrZWQtYmFzZSI6e3JlcXVpcmVzOlsiYXhpcy1udW1lcmljLWJhc2UiXX0sImF4aXMtdGltZSI6e3JlcXVpcmVzOlsiYXhpcyIsImF4aXMtdGltZS1iYXNlIl19LCJheGlzLXRpbWUtYmFzZSI6e3JlcXVpcmVzOlsiYXhpcy1iYXNlIl19LGJhc2U6e3VzZTpbImJhc2UtYmFzZSIsImJhc2UtcGx1Z2luaG9zdCIsImJhc2UtYnVpbGQiXX0sImJhc2UtYmFzZSI6e3JlcXVpcmVzOlsiYXR0cmlidXRlLWJhc2UiLCJiYXNlLWNvcmUiLCJiYXNlLW9ic2VydmFibGUiXX0sImJhc2UtYnVpbGQiOntyZXF1aXJlczpbImJhc2UtYmFzZSJdfSwKImJhc2UtY29yZSI6e3JlcXVpcmVzOlsiYXR0cmlidXRlLWNvcmUiXX0sImJhc2Utb2JzZXJ2YWJsZSI6e3JlcXVpcmVzOlsiYXR0cmlidXRlLW9ic2VydmFibGUiLCJiYXNlLWNvcmUiXX0sImJhc2UtcGx1Z2luaG9zdCI6e3JlcXVpcmVzOlsiYmFzZS1iYXNlIiwicGx1Z2luaG9zdCJdfSxidXR0b246e3JlcXVpcmVzOlsiYnV0dG9uLWNvcmUiLCJjc3NidXR0b24iLCJ3aWRnZXQiXX0sImJ1dHRvbi1jb3JlIjp7cmVxdWlyZXM6WyJhdHRyaWJ1dGUtY29yZSIsImNsYXNzbmFtZW1hbmFnZXIiLCJub2RlLWJhc2UiLCJlc2NhcGUiXX0sImJ1dHRvbi1ncm91cCI6e3JlcXVpcmVzOlsiYnV0dG9uLXBsdWdpbiIsImNzc2J1dHRvbiIsIndpZGdldCJdfSwiYnV0dG9uLXBsdWdpbiI6e3JlcXVpcmVzOlsiYnV0dG9uLWNvcmUiLCJjc3NidXR0b24iLCJub2RlLXBsdWdpbmhvc3QiXX0sY2FjaGU6e3VzZTpbImNhY2hlLWJhc2UiLCJjYWNoZS1vZmZsaW5lIiwiY2FjaGUtcGx1Z2luIl19LCJjYWNoZS1iYXNlIjp7cmVxdWlyZXM6WyJiYXNlIl19LAoiY2FjaGUtb2ZmbGluZSI6e3JlcXVpcmVzOlsiY2FjaGUtYmFzZSIsImpzb24iXX0sImNhY2hlLXBsdWdpbiI6e3JlcXVpcmVzOlsicGx1Z2luIiwiY2FjaGUtYmFzZSJdfSxjYWxlbmRhcjp7cmVxdWlyZXM6WyJjYWxlbmRhci1iYXNlIiwiY2FsZW5kYXJuYXZpZ2F0b3IiXSxza2lubmFibGU6ITB9LCJjYWxlbmRhci1iYXNlIjp7bGFuZzoiY2EgY2EtRVMgZGUgZW4gZXMgZXMtQVIgZXUtRVMgZnIgaHUgaXQgamEgbmItTk8gbmwgcHQtQlIgcnUgemgtSGFucyB6aC1IYW5zLUNOIHpoLUhhbnQgemgtSGFudC1ISyB6aC1IQU5ULVRXIi5zcGxpdCgiICIpLHJlcXVpcmVzOlsid2lkZ2V0IiwiZGF0YXR5cGUtZGF0ZSIsImRhdGF0eXBlLWRhdGUtbWF0aCIsImNzc2dyaWRzIl0sc2tpbm5hYmxlOiEwfSxjYWxlbmRhcm5hdmlnYXRvcjp7cmVxdWlyZXM6WyJwbHVnaW4iLCJjbGFzc25hbWVtYW5hZ2VyIiwiZGF0YXR5cGUtZGF0ZSIsIm5vZGUiXSxza2lubmFibGU6ITB9LGNoYXJ0czp7dXNlOlsiY2hhcnRzLWJhc2UiXX0sCiJjaGFydHMtYmFzZSI6e3JlcXVpcmVzOiJkb20gZXZlbnQtbW91c2VlbnRlciBldmVudC10b3VjaCBncmFwaGljcy1ncm91cCBheGVzIHNlcmllcy1waWUgc2VyaWVzLWxpbmUgc2VyaWVzLW1hcmtlciBzZXJpZXMtYXJlYSBzZXJpZXMtc3BsaW5lIHNlcmllcy1jb2x1bW4gc2VyaWVzLWJhciBzZXJpZXMtYXJlYXNwbGluZSBzZXJpZXMtY29tYm8gc2VyaWVzLWNvbWJvc3BsaW5lIHNlcmllcy1saW5lLXN0YWNrZWQgc2VyaWVzLW1hcmtlci1zdGFja2VkIHNlcmllcy1hcmVhLXN0YWNrZWQgc2VyaWVzLXNwbGluZS1zdGFja2VkIHNlcmllcy1jb2x1bW4tc3RhY2tlZCBzZXJpZXMtYmFyLXN0YWNrZWQgc2VyaWVzLWFyZWFzcGxpbmUtc3RhY2tlZCBzZXJpZXMtY29tYm8tc3RhY2tlZCBzZXJpZXMtY29tYm9zcGxpbmUtc3RhY2tlZCIuc3BsaXQoIiAiKX0sImNoYXJ0cy1sZWdlbmQiOntyZXF1aXJlczpbImNoYXJ0cy1iYXNlIl19LGNsYXNzbmFtZW1hbmFnZXI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sCiJjbGlja2FibGUtcmFpbCI6e3JlcXVpcmVzOlsic2xpZGVyLWJhc2UiXX0sY29sbGVjdGlvbjp7dXNlOlsiYXJyYXktZXh0cmFzIiwiYXJyYXlsaXN0IiwiYXJyYXlsaXN0LWFkZCIsImFycmF5bGlzdC1maWx0ZXIiLCJhcnJheS1pbnZva2UiXX0sY29sb3I6e3VzZTpbImNvbG9yLWJhc2UiLCJjb2xvci1oc2wiLCJjb2xvci1oYXJtb255Il19LCJjb2xvci1iYXNlIjp7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSwiY29sb3ItaGFybW9ueSI6e3JlcXVpcmVzOlsiY29sb3ItaHNsIl19LCJjb2xvci1oc2wiOntyZXF1aXJlczpbImNvbG9yLWJhc2UiXX0sImNvbG9yLWhzdiI6e3JlcXVpcmVzOlsiY29sb3ItYmFzZSJdfSxjb25zb2xlOntsYW5nOlsiZW4iLCJlcyIsImh1IiwiaXQiLCJqYSJdLHJlcXVpcmVzOlsieXVpLWxvZyIsIndpZGdldCJdLHNraW5uYWJsZTohMH0sImNvbnNvbGUtZmlsdGVycyI6e3JlcXVpcmVzOlsicGx1Z2luIiwiY29uc29sZSJdLHNraW5uYWJsZTohMH0sImNvbnRlbnQtZWRpdGFibGUiOntyZXF1aXJlczpbIm5vZGUtYmFzZSIsCiJlZGl0b3Itc2VsZWN0aW9uIiwic3R5bGVzaGVldCIsInBsdWdpbiJdfSxjb250cm9sbGVyOnt1c2U6WyJyb3V0ZXIiXX0sY29va2llOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJjcmVhdGVsaW5rLWJhc2UiOntyZXF1aXJlczpbImVkaXRvci1iYXNlIl19LGNzc2Jhc2U6e2FmdGVyOiJjc3NyZXNldCBjc3Nmb250cyBjc3NncmlkcyBjc3NyZXNldC1jb250ZXh0IGNzc2ZvbnRzLWNvbnRleHQgY3NzZ3JpZHMtY29udGV4dCIuc3BsaXQoIiAiKSx0eXBlOiJjc3MifSwiY3NzYmFzZS1jb250ZXh0Ijp7YWZ0ZXI6ImNzc3Jlc2V0IGNzc2ZvbnRzIGNzc2dyaWRzIGNzc3Jlc2V0LWNvbnRleHQgY3NzZm9udHMtY29udGV4dCBjc3Nncmlkcy1jb250ZXh0Ii5zcGxpdCgiICIpLHR5cGU6ImNzcyJ9LGNzc2J1dHRvbjp7dHlwZToiY3NzIn0sY3NzZm9udHM6e3R5cGU6ImNzcyJ9LCJjc3Nmb250cy1jb250ZXh0Ijp7dHlwZToiY3NzIn0sY3NzZ3JpZHM6e29wdGlvbmFsOlsiY3Nzbm9ybWFsaXplIl0sCnR5cGU6ImNzcyJ9LCJjc3Nncmlkcy1iYXNlIjp7b3B0aW9uYWw6WyJjc3Nub3JtYWxpemUiXSx0eXBlOiJjc3MifSwiY3NzZ3JpZHMtcmVzcG9uc2l2ZSI6e29wdGlvbmFsOlsiY3Nzbm9ybWFsaXplIl0scmVxdWlyZXM6WyJjc3NncmlkcyIsImNzc2dyaWRzLXJlc3BvbnNpdmUtYmFzZSJdLHR5cGU6ImNzcyJ9LCJjc3Nncmlkcy11bml0cyI6e29wdGlvbmFsOlsiY3Nzbm9ybWFsaXplIl0scmVxdWlyZXM6WyJjc3Nncmlkcy1iYXNlIl0sdHlwZToiY3NzIn0sY3Nzbm9ybWFsaXplOnt0eXBlOiJjc3MifSwiY3Nzbm9ybWFsaXplLWNvbnRleHQiOnt0eXBlOiJjc3MifSxjc3NyZXNldDp7dHlwZToiY3NzIn0sImNzc3Jlc2V0LWNvbnRleHQiOnt0eXBlOiJjc3MifSxkYXRhc2NoZW1hOnt1c2U6WyJkYXRhc2NoZW1hLWJhc2UiLCJkYXRhc2NoZW1hLWpzb24iLCJkYXRhc2NoZW1hLXhtbCIsImRhdGFzY2hlbWEtYXJyYXkiLCJkYXRhc2NoZW1hLXRleHQiXX0sImRhdGFzY2hlbWEtYXJyYXkiOntyZXF1aXJlczpbImRhdGFzY2hlbWEtYmFzZSJdfSwKImRhdGFzY2hlbWEtYmFzZSI6e3JlcXVpcmVzOlsiYmFzZSJdfSwiZGF0YXNjaGVtYS1qc29uIjp7cmVxdWlyZXM6WyJkYXRhc2NoZW1hLWJhc2UiLCJqc29uIl19LCJkYXRhc2NoZW1hLXRleHQiOntyZXF1aXJlczpbImRhdGFzY2hlbWEtYmFzZSJdfSwiZGF0YXNjaGVtYS14bWwiOntyZXF1aXJlczpbImRhdGFzY2hlbWEtYmFzZSJdfSxkYXRhc291cmNlOnt1c2U6ImRhdGFzb3VyY2UtbG9jYWwgZGF0YXNvdXJjZS1pbyBkYXRhc291cmNlLWdldCBkYXRhc291cmNlLWZ1bmN0aW9uIGRhdGFzb3VyY2UtY2FjaGUgZGF0YXNvdXJjZS1qc29uc2NoZW1hIGRhdGFzb3VyY2UteG1sc2NoZW1hIGRhdGFzb3VyY2UtYXJyYXlzY2hlbWEgZGF0YXNvdXJjZS10ZXh0c2NoZW1hIGRhdGFzb3VyY2UtcG9sbGluZyIuc3BsaXQoIiAiKX0sImRhdGFzb3VyY2UtYXJyYXlzY2hlbWEiOntyZXF1aXJlczpbImRhdGFzb3VyY2UtbG9jYWwiLCJwbHVnaW4iLCJkYXRhc2NoZW1hLWFycmF5Il19LCJkYXRhc291cmNlLWNhY2hlIjp7cmVxdWlyZXM6WyJkYXRhc291cmNlLWxvY2FsIiwKInBsdWdpbiIsImNhY2hlLWJhc2UiXX0sImRhdGFzb3VyY2UtZnVuY3Rpb24iOntyZXF1aXJlczpbImRhdGFzb3VyY2UtbG9jYWwiXX0sImRhdGFzb3VyY2UtZ2V0Ijp7cmVxdWlyZXM6WyJkYXRhc291cmNlLWxvY2FsIiwiZ2V0Il19LCJkYXRhc291cmNlLWlvIjp7cmVxdWlyZXM6WyJkYXRhc291cmNlLWxvY2FsIiwiaW8tYmFzZSJdfSwiZGF0YXNvdXJjZS1qc29uc2NoZW1hIjp7cmVxdWlyZXM6WyJkYXRhc291cmNlLWxvY2FsIiwicGx1Z2luIiwiZGF0YXNjaGVtYS1qc29uIl19LCJkYXRhc291cmNlLWxvY2FsIjp7cmVxdWlyZXM6WyJiYXNlIl19LCJkYXRhc291cmNlLXBvbGxpbmciOntyZXF1aXJlczpbImRhdGFzb3VyY2UtbG9jYWwiXX0sImRhdGFzb3VyY2UtdGV4dHNjaGVtYSI6e3JlcXVpcmVzOlsiZGF0YXNvdXJjZS1sb2NhbCIsInBsdWdpbiIsImRhdGFzY2hlbWEtdGV4dCJdfSwiZGF0YXNvdXJjZS14bWxzY2hlbWEiOntyZXF1aXJlczpbImRhdGFzb3VyY2UtbG9jYWwiLAoicGx1Z2luIiwiZGF0YXR5cGUteG1sIiwiZGF0YXNjaGVtYS14bWwiXX0sZGF0YXRhYmxlOnt1c2U6ImRhdGF0YWJsZS1jb3JlIGRhdGF0YWJsZS10YWJsZSBkYXRhdGFibGUtaGVhZCBkYXRhdGFibGUtYm9keSBkYXRhdGFibGUtYmFzZSBkYXRhdGFibGUtY29sdW1uLXdpZHRocyBkYXRhdGFibGUtbWVzc2FnZSBkYXRhdGFibGUtbXV0YWJsZSBkYXRhdGFibGUtc29ydCBkYXRhdGFibGUtZGF0YXNvdXJjZSIuc3BsaXQoIiAiKX0sImRhdGF0YWJsZS1iYXNlIjp7cmVxdWlyZXM6ImRhdGF0YWJsZS1jb3JlIGRhdGF0YWJsZS10YWJsZSBkYXRhdGFibGUtaGVhZCBkYXRhdGFibGUtYm9keSBiYXNlLWJ1aWxkIHdpZGdldCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJkYXRhdGFibGUtYm9keSI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWNvcmUiLCJ2aWV3IiwiY2xhc3NuYW1lbWFuYWdlciJdfSwiZGF0YXRhYmxlLWNvbHVtbi13aWR0aHMiOntyZXF1aXJlczpbImRhdGF0YWJsZS1iYXNlIl19LAoiZGF0YXRhYmxlLWNvcmUiOntyZXF1aXJlczpbImVzY2FwZSIsIm1vZGVsLWxpc3QiLCJub2RlLWV2ZW50LWRlbGVnYXRlIl19LCJkYXRhdGFibGUtZGF0YXNvdXJjZSI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWJhc2UiLCJwbHVnaW4iLCJkYXRhc291cmNlLWxvY2FsIl19LCJkYXRhdGFibGUtZm9vdCI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWNvcmUiLCJ2aWV3Il19LCJkYXRhdGFibGUtZm9ybWF0dGVycyI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWJvZHkiLCJkYXRhdHlwZS1udW1iZXItZm9ybWF0IiwiZGF0YXR5cGUtZGF0ZS1mb3JtYXQiLCJlc2NhcGUiXX0sImRhdGF0YWJsZS1oZWFkIjp7cmVxdWlyZXM6WyJkYXRhdGFibGUtY29yZSIsInZpZXciLCJjbGFzc25hbWVtYW5hZ2VyIl19LCJkYXRhdGFibGUtaGlnaGxpZ2h0Ijp7cmVxdWlyZXM6WyJkYXRhdGFibGUtYmFzZSIsImV2ZW50LWhvdmVyIl0sc2tpbm5hYmxlOiEwfSwiZGF0YXRhYmxlLWtleW5hdiI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWJhc2UiXX0sCiJkYXRhdGFibGUtbWVzc2FnZSI6e2xhbmc6WyJlbiIsImZyIiwiZXMiLCJodSIsIml0Il0scmVxdWlyZXM6WyJkYXRhdGFibGUtYmFzZSJdLHNraW5uYWJsZTohMH0sImRhdGF0YWJsZS1tdXRhYmxlIjp7cmVxdWlyZXM6WyJkYXRhdGFibGUtYmFzZSJdfSwiZGF0YXRhYmxlLXBhZ2luYXRvciI6e2xhbmc6WyJlbiIsImZyIl0scmVxdWlyZXM6WyJtb2RlbCIsInZpZXciLCJwYWdpbmF0b3ItY29yZSIsImRhdGF0YWJsZS1mb290IiwiZGF0YXRhYmxlLXBhZ2luYXRvci10ZW1wbGF0ZXMiXSxza2lubmFibGU6ITB9LCJkYXRhdGFibGUtcGFnaW5hdG9yLXRlbXBsYXRlcyI6e3JlcXVpcmVzOlsidGVtcGxhdGUiXX0sImRhdGF0YWJsZS1zY3JvbGwiOntyZXF1aXJlczpbImRhdGF0YWJsZS1iYXNlIiwiZGF0YXRhYmxlLWNvbHVtbi13aWR0aHMiLCJkb20tc2NyZWVuIl0sc2tpbm5hYmxlOiEwfSwiZGF0YXRhYmxlLXNvcnQiOntsYW5nOlsiZW4iLCJmciIsImVzIiwiaHUiXSxyZXF1aXJlczpbImRhdGF0YWJsZS1iYXNlIl0sCnNraW5uYWJsZTohMH0sImRhdGF0YWJsZS10YWJsZSI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWNvcmUiLCJkYXRhdGFibGUtaGVhZCIsImRhdGF0YWJsZS1ib2R5IiwidmlldyIsImNsYXNzbmFtZW1hbmFnZXIiXX0sZGF0YXR5cGU6e3VzZTpbImRhdGF0eXBlLWRhdGUiLCJkYXRhdHlwZS1udW1iZXIiLCJkYXRhdHlwZS14bWwiXX0sImRhdGF0eXBlLWRhdGUiOnt1c2U6WyJkYXRhdHlwZS1kYXRlLXBhcnNlIiwiZGF0YXR5cGUtZGF0ZS1mb3JtYXQiLCJkYXRhdHlwZS1kYXRlLW1hdGgiXX0sImRhdGF0eXBlLWRhdGUtZm9ybWF0Ijp7bGFuZzoiYXIgYXItSk8gY2EgY2EtRVMgZGEgZGEtREsgZGUgZGUtQVQgZGUtREUgZWwgZWwtR1IgZW4gZW4tQVUgZW4tQ0EgZW4tR0IgZW4tSUUgZW4tSU4gZW4tSk8gZW4tTVkgZW4tTlogZW4tUEggZW4tU0cgZW4tVVMgZXMgZXMtQVIgZXMtQk8gZXMtQ0wgZXMtQ08gZXMtRUMgZXMtRVMgZXMtTVggZXMtUEUgZXMtUFkgZXMtVVMgZXMtVVkgZXMtVkUgZmkgZmktRkkgZnIgZnItQkUgZnItQ0EgZnItRlIgaGkgaGktSU4gaHUgaWQgaWQtSUQgaXQgaXQtSVQgamEgamEtSlAga28ga28tS1IgbXMgbXMtTVkgbmIgbmItTk8gbmwgbmwtQkUgbmwtTkwgcGwgcGwtUEwgcHQgcHQtQlIgcm8gcm8tUk8gcnUgcnUtUlUgc3Ygc3YtU0UgdGggdGgtVEggdHIgdHItVFIgdmkgdmktVk4gemgtSGFucyB6aC1IYW5zLUNOIHpoLUhhbnQgemgtSGFudC1ISyB6aC1IYW50LVRXIi5zcGxpdCgiICIpfSwKImRhdGF0eXBlLWRhdGUtbWF0aCI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sImRhdGF0eXBlLWRhdGUtcGFyc2UiOnt9LCJkYXRhdHlwZS1udW1iZXIiOnt1c2U6WyJkYXRhdHlwZS1udW1iZXItcGFyc2UiLCJkYXRhdHlwZS1udW1iZXItZm9ybWF0Il19LCJkYXRhdHlwZS1udW1iZXItZm9ybWF0Ijp7fSwiZGF0YXR5cGUtbnVtYmVyLXBhcnNlIjp7cmVxdWlyZXM6WyJlc2NhcGUiXX0sImRhdGF0eXBlLXhtbCI6e3VzZTpbImRhdGF0eXBlLXhtbC1wYXJzZSIsImRhdGF0eXBlLXhtbC1mb3JtYXQiXX0sImRhdGF0eXBlLXhtbC1mb3JtYXQiOnt9LCJkYXRhdHlwZS14bWwtcGFyc2UiOnt9LGRkOnt1c2U6ImRkLWRkbS1iYXNlIGRkLWRkbSBkZC1kZG0tZHJvcCBkZC1kcmFnIGRkLXByb3h5IGRkLWNvbnN0cmFpbiBkZC1kcm9wIGRkLXNjcm9sbCBkZC1kZWxlZ2F0ZSIuc3BsaXQoIiAiKX0sImRkLWNvbnN0cmFpbiI6e3JlcXVpcmVzOlsiZGQtZHJhZyJdfSwiZGQtZGRtIjp7cmVxdWlyZXM6WyJkZC1kZG0tYmFzZSIsCiJldmVudC1yZXNpemUiXX0sImRkLWRkbS1iYXNlIjp7cmVxdWlyZXM6WyJub2RlIiwiYmFzZSIsInl1aS10aHJvdHRsZSIsImNsYXNzbmFtZW1hbmFnZXIiXX0sImRkLWRkbS1kcm9wIjp7cmVxdWlyZXM6WyJkZC1kZG0iXX0sImRkLWRlbGVnYXRlIjp7cmVxdWlyZXM6WyJkZC1kcmFnIiwiZGQtZHJvcC1wbHVnaW4iLCJldmVudC1tb3VzZWVudGVyIl19LCJkZC1kcmFnIjp7cmVxdWlyZXM6WyJkZC1kZG0tYmFzZSIsInNlbGVjdG9yLWNzczIiXX0sImRkLWRyb3AiOntyZXF1aXJlczpbImRkLWRyYWciLCJkZC1kZG0tZHJvcCJdfSwiZGQtZHJvcC1wbHVnaW4iOntyZXF1aXJlczpbImRkLWRyb3AiXX0sImRkLWdlc3R1cmVzIjp7Y29uZGl0aW9uOntuYW1lOiJkZC1nZXN0dXJlcyIsdHJpZ2dlcjoiZGQtZHJhZyIsdWE6InRvdWNoRW5hYmxlZCJ9LHJlcXVpcmVzOlsiZGQtZHJhZyIsImV2ZW50LXN5bnRoZXRpYyIsImV2ZW50LWdlc3R1cmVzIl19LCJkZC1wbHVnaW4iOntvcHRpb25hbDpbImRkLWNvbnN0cmFpbiIsCiJkZC1wcm94eSJdLHJlcXVpcmVzOlsiZGQtZHJhZyJdfSwiZGQtcHJveHkiOntyZXF1aXJlczpbImRkLWRyYWciXX0sImRkLXNjcm9sbCI6e3JlcXVpcmVzOlsiZGQtZHJhZyJdfSxkaWFsOntsYW5nOlsiZW4iLCJlcyIsImh1Il0scmVxdWlyZXM6IndpZGdldCBkZC1kcmFnIGV2ZW50LW1vdXNlZW50ZXIgZXZlbnQtbW92ZSBldmVudC1rZXkgdHJhbnNpdGlvbiBpbnRsIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sZG9tOnt1c2U6WyJkb20tYmFzZSIsImRvbS1zY3JlZW4iLCJkb20tc3R5bGUiLCJzZWxlY3Rvci1uYXRpdmUiLCJzZWxlY3RvciJdfSwiZG9tLWJhc2UiOntyZXF1aXJlczpbImRvbS1jb3JlIl19LCJkb20tY29yZSI6e3JlcXVpcmVzOlsib29wIiwiZmVhdHVyZXMiXX0sImRvbS1zY3JlZW4iOntyZXF1aXJlczpbImRvbS1iYXNlIiwiZG9tLXN0eWxlIl19LCJkb20tc3R5bGUiOntyZXF1aXJlczpbImRvbS1iYXNlIl19LCJkb20tc3R5bGUtaWUiOntjb25kaXRpb246e25hbWU6ImRvbS1zdHlsZS1pZSIsCnRlc3Q6ZnVuY3Rpb24ocSl7dmFyIHQ9cS5GZWF0dXJlcy50ZXN0LGY9cS5GZWF0dXJlcy5hZGQsZD1xLmNvbmZpZy53aW4sYz1xLmNvbmZpZy5kb2M7cT0hMTtmKCJzdHlsZSIsImNvbXB1dGVkU3R5bGUiLHt0ZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIGQmJiJnZXRDb21wdXRlZFN0eWxlImluIGR9fSk7Zigic3R5bGUiLCJvcGFjaXR5Iix7dGVzdDpmdW5jdGlvbigpe3JldHVybiBjJiYib3BhY2l0eSJpbiBjLmRvY3VtZW50RWxlbWVudC5zdHlsZX19KTtyZXR1cm4gcT0hdCgic3R5bGUiLCJvcGFjaXR5IikmJiF0KCJzdHlsZSIsImNvbXB1dGVkU3R5bGUiKX0sdHJpZ2dlcjoiZG9tLXN0eWxlIn0scmVxdWlyZXM6WyJkb20tc3R5bGUiLCJjb2xvci1iYXNlIl19LGR1bXA6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sZWRpdG9yOnt1c2U6ImZyYW1lIGVkaXRvci1zZWxlY3Rpb24gZXhlYy1jb21tYW5kIGVkaXRvci1iYXNlIGVkaXRvci1wYXJhIGVkaXRvci1iciBlZGl0b3ItYmlkaSBlZGl0b3ItdGFiIGNyZWF0ZWxpbmstYmFzZSIuc3BsaXQoIiAiKX0sCiJlZGl0b3ItYmFzZSI6e3JlcXVpcmVzOlsiYmFzZSIsImZyYW1lIiwibm9kZSIsImV4ZWMtY29tbWFuZCIsImVkaXRvci1zZWxlY3Rpb24iXX0sImVkaXRvci1iaWRpIjp7cmVxdWlyZXM6WyJlZGl0b3ItYmFzZSJdfSwiZWRpdG9yLWJyIjp7cmVxdWlyZXM6WyJlZGl0b3ItYmFzZSJdfSwiZWRpdG9yLWlubGluZSI6e3JlcXVpcmVzOlsiZWRpdG9yLWJhc2UiLCJjb250ZW50LWVkaXRhYmxlIl19LCJlZGl0b3ItbGlzdHMiOntyZXF1aXJlczpbImVkaXRvci1iYXNlIl19LCJlZGl0b3ItcGFyYSI6e3JlcXVpcmVzOlsiZWRpdG9yLXBhcmEtYmFzZSJdfSwiZWRpdG9yLXBhcmEtYmFzZSI6e3JlcXVpcmVzOlsiZWRpdG9yLWJhc2UiXX0sImVkaXRvci1wYXJhLWllIjp7Y29uZGl0aW9uOntuYW1lOiJlZGl0b3ItcGFyYS1pZSIsdHJpZ2dlcjoiZWRpdG9yLXBhcmEiLHVhOiJpZSIsd2hlbjoiaW5zdGVhZCJ9LHJlcXVpcmVzOlsiZWRpdG9yLXBhcmEtYmFzZSJdfSwiZWRpdG9yLXNlbGVjdGlvbiI6e3JlcXVpcmVzOlsibm9kZSJdfSwKImVkaXRvci10YWIiOntyZXF1aXJlczpbImVkaXRvci1iYXNlIl19LGVzY2FwZTp7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSxldmVudDp7YWZ0ZXI6WyJub2RlLWJhc2UiXSx1c2U6ImV2ZW50LWJhc2UgZXZlbnQtZGVsZWdhdGUgZXZlbnQtc3ludGhldGljIGV2ZW50LW1vdXNld2hlZWwgZXZlbnQtbW91c2VlbnRlciBldmVudC1rZXkgZXZlbnQtZm9jdXMgZXZlbnQtcmVzaXplIGV2ZW50LWhvdmVyIGV2ZW50LW91dHNpZGUgZXZlbnQtdG91Y2ggZXZlbnQtbW92ZSBldmVudC1mbGljayBldmVudC12YWx1ZWNoYW5nZSBldmVudC10YXAiLnNwbGl0KCIgIil9LCJldmVudC1iYXNlIjp7YWZ0ZXI6WyJub2RlLWJhc2UiXSxyZXF1aXJlczpbImV2ZW50LWN1c3RvbS1iYXNlIl19LCJldmVudC1iYXNlLWllIjp7YWZ0ZXI6WyJldmVudC1iYXNlIl0sY29uZGl0aW9uOntuYW1lOiJldmVudC1iYXNlLWllIix0ZXN0OmZ1bmN0aW9uKHEpe3JldHVybihxPXEuY29uZmlnLmRvYyYmcS5jb25maWcuZG9jLmltcGxlbWVudGF0aW9uKSYmCiFxLmhhc0ZlYXR1cmUoIkV2ZW50cyIsIjIuMCIpfSx0cmlnZ2VyOiJub2RlLWJhc2UifSxyZXF1aXJlczpbIm5vZGUtYmFzZSJdfSwiZXZlbnQtY29udGV4dG1lbnUiOntyZXF1aXJlczpbImV2ZW50LXN5bnRoZXRpYyIsImRvbS1zY3JlZW4iXX0sImV2ZW50LWN1c3RvbSI6e3VzZTpbImV2ZW50LWN1c3RvbS1iYXNlIiwiZXZlbnQtY3VzdG9tLWNvbXBsZXgiXX0sImV2ZW50LWN1c3RvbS1iYXNlIjp7cmVxdWlyZXM6WyJvb3AiXX0sImV2ZW50LWN1c3RvbS1jb21wbGV4Ijp7cmVxdWlyZXM6WyJldmVudC1jdXN0b20tYmFzZSJdfSwiZXZlbnQtZGVsZWdhdGUiOntyZXF1aXJlczpbIm5vZGUtYmFzZSJdfSwiZXZlbnQtZmxpY2siOntyZXF1aXJlczpbIm5vZGUtYmFzZSIsImV2ZW50LXRvdWNoIiwiZXZlbnQtc3ludGhldGljIl19LCJldmVudC1mb2N1cyI6e3JlcXVpcmVzOlsiZXZlbnQtc3ludGhldGljIl19LCJldmVudC1nZXN0dXJlcyI6e3VzZTpbImV2ZW50LWZsaWNrIiwiZXZlbnQtbW92ZSJdfSwKImV2ZW50LWhvdmVyIjp7cmVxdWlyZXM6WyJldmVudC1tb3VzZWVudGVyIl19LCJldmVudC1rZXkiOntyZXF1aXJlczpbImV2ZW50LXN5bnRoZXRpYyJdfSwiZXZlbnQtbW91c2VlbnRlciI6e3JlcXVpcmVzOlsiZXZlbnQtc3ludGhldGljIl19LCJldmVudC1tb3VzZXdoZWVsIjp7cmVxdWlyZXM6WyJub2RlLWJhc2UiXX0sImV2ZW50LW1vdmUiOntyZXF1aXJlczpbIm5vZGUtYmFzZSIsImV2ZW50LXRvdWNoIiwiZXZlbnQtc3ludGhldGljIl19LCJldmVudC1vdXRzaWRlIjp7cmVxdWlyZXM6WyJldmVudC1zeW50aGV0aWMiXX0sImV2ZW50LXJlc2l6ZSI6e3JlcXVpcmVzOlsibm9kZS1iYXNlIiwiZXZlbnQtc3ludGhldGljIl19LCJldmVudC1zaW11bGF0ZSI6e3JlcXVpcmVzOlsiZXZlbnQtYmFzZSJdfSwiZXZlbnQtc3ludGhldGljIjp7cmVxdWlyZXM6WyJub2RlLWJhc2UiLCJldmVudC1jdXN0b20tY29tcGxleCJdfSwiZXZlbnQtdGFwIjp7cmVxdWlyZXM6WyJub2RlLWJhc2UiLAoiZXZlbnQtYmFzZSIsImV2ZW50LXRvdWNoIiwiZXZlbnQtc3ludGhldGljIl19LCJldmVudC10b3VjaCI6e3JlcXVpcmVzOlsibm9kZS1iYXNlIl19LCJldmVudC12YWx1ZWNoYW5nZSI6e3JlcXVpcmVzOlsiZXZlbnQtZm9jdXMiLCJldmVudC1zeW50aGV0aWMiXX0sImV4ZWMtY29tbWFuZCI6e3JlcXVpcmVzOlsiZnJhbWUiXX0sZmVhdHVyZXM6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sZmlsZTp7cmVxdWlyZXM6WyJmaWxlLWZsYXNoIiwiZmlsZS1odG1sNSJdfSwiZmlsZS1mbGFzaCI6e3JlcXVpcmVzOlsiYmFzZSJdfSwiZmlsZS1odG1sNSI6e3JlcXVpcmVzOlsiYmFzZSJdfSxmcmFtZTp7cmVxdWlyZXM6WyJiYXNlIiwibm9kZSIsInBsdWdpbiIsInNlbGVjdG9yLWNzczMiLCJ5dWktdGhyb3R0bGUiXX0sImdlc3R1cmUtc2ltdWxhdGUiOntyZXF1aXJlczpbImFzeW5jLXF1ZXVlIiwiZXZlbnQtc2ltdWxhdGUiLCJub2RlLXNjcmVlbiJdfSxnZXQ6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sCmdyYXBoaWNzOntyZXF1aXJlczpbIm5vZGUiLCJldmVudC1jdXN0b20iLCJwbHVnaW5ob3N0IiwibWF0cml4IiwiY2xhc3NuYW1lbWFuYWdlciJdfSwiZ3JhcGhpY3MtY2FudmFzIjp7Y29uZGl0aW9uOntuYW1lOiJncmFwaGljcy1jYW52YXMiLHRlc3Q6ZnVuY3Rpb24ocSl7dmFyIHQ9cS5jb25maWcuZG9jO3E9cS5jb25maWcuZGVmYXVsdEdyYXBoaWNFbmdpbmUmJiJjYW52YXMiPT1xLmNvbmZpZy5kZWZhdWx0R3JhcGhpY0VuZ2luZTt2YXIgZj10JiZ0LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybighKHQmJnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZSIsIjEuMSIpKXx8cSkmJmYmJmYuZ2V0Q29udGV4dCYmZi5nZXRDb250ZXh0KCIyZCIpfSx0cmlnZ2VyOiJncmFwaGljcyJ9LHJlcXVpcmVzOlsiZ3JhcGhpY3MiLCJjb2xvci1iYXNlIl19LCJncmFwaGljcy1jYW52YXMtZGVmYXVsdCI6e2NvbmRpdGlvbjp7bmFtZToiZ3JhcGhpY3MtY2FudmFzLWRlZmF1bHQiLAp0ZXN0OmZ1bmN0aW9uKHEpe3ZhciB0PXEuY29uZmlnLmRvYztxPXEuY29uZmlnLmRlZmF1bHRHcmFwaGljRW5naW5lJiYiY2FudmFzIj09cS5jb25maWcuZGVmYXVsdEdyYXBoaWNFbmdpbmU7dmFyIGY9dCYmdC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4oISh0JiZ0LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjQmFzaWNTdHJ1Y3R1cmUiLCIxLjEiKSl8fHEpJiZmJiZmLmdldENvbnRleHQmJmYuZ2V0Q29udGV4dCgiMmQiKX0sdHJpZ2dlcjoiZ3JhcGhpY3MifX0sImdyYXBoaWNzLWdyb3VwIjp7cmVxdWlyZXM6WyJncmFwaGljcyJdfSwiZ3JhcGhpY3Mtc3ZnIjp7Y29uZGl0aW9uOntuYW1lOiJncmFwaGljcy1zdmciLHRlc3Q6ZnVuY3Rpb24ocSl7dmFyIHQ9cS5jb25maWcuZG9jO3E9IXEuY29uZmlnLmRlZmF1bHRHcmFwaGljRW5naW5lfHwiY2FudmFzIiE9cS5jb25maWcuZGVmYXVsdEdyYXBoaWNFbmdpbmU7CnZhciBmPXQmJnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cmV0dXJuIHQmJnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZSIsIjEuMSIpJiYocXx8IWYpfSx0cmlnZ2VyOiJncmFwaGljcyJ9LHJlcXVpcmVzOlsiZ3JhcGhpY3MiXX0sImdyYXBoaWNzLXN2Zy1kZWZhdWx0Ijp7Y29uZGl0aW9uOntuYW1lOiJncmFwaGljcy1zdmctZGVmYXVsdCIsdGVzdDpmdW5jdGlvbihxKXt2YXIgdD1xLmNvbmZpZy5kb2M7cT0hcS5jb25maWcuZGVmYXVsdEdyYXBoaWNFbmdpbmV8fCJjYW52YXMiIT1xLmNvbmZpZy5kZWZhdWx0R3JhcGhpY0VuZ2luZTt2YXIgZj10JiZ0LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiB0JiZ0LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjQmFzaWNTdHJ1Y3R1cmUiLCIxLjEiKSYmKHF8fCFmKX0sdHJpZ2dlcjoiZ3JhcGhpY3MifX0sCiJncmFwaGljcy12bWwiOntjb25kaXRpb246e25hbWU6ImdyYXBoaWNzLXZtbCIsdGVzdDpmdW5jdGlvbihxKXt2YXIgdD0ocT1xLmNvbmZpZy5kb2MpJiZxLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBxJiYhcS5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0Jhc2ljU3RydWN0dXJlIiwiMS4xIikmJighdHx8IXQuZ2V0Q29udGV4dHx8IXQuZ2V0Q29udGV4dCgiMmQiKSl9LHRyaWdnZXI6ImdyYXBoaWNzIn0scmVxdWlyZXM6WyJncmFwaGljcyIsImNvbG9yLWJhc2UiXX0sImdyYXBoaWNzLXZtbC1kZWZhdWx0Ijp7Y29uZGl0aW9uOntuYW1lOiJncmFwaGljcy12bWwtZGVmYXVsdCIsdGVzdDpmdW5jdGlvbihxKXt2YXIgdD0ocT1xLmNvbmZpZy5kb2MpJiZxLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBxJiYhcS5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0Jhc2ljU3RydWN0dXJlIiwKIjEuMSIpJiYoIXR8fCF0LmdldENvbnRleHR8fCF0LmdldENvbnRleHQoIjJkIikpfSx0cmlnZ2VyOiJncmFwaGljcyJ9fSxoYW5kbGViYXJzOnt1c2U6WyJoYW5kbGViYXJzLWNvbXBpbGVyIl19LCJoYW5kbGViYXJzLWJhc2UiOntyZXF1aXJlczpbXX0sImhhbmRsZWJhcnMtY29tcGlsZXIiOntyZXF1aXJlczpbImhhbmRsZWJhcnMtYmFzZSJdfSxoaWdobGlnaHQ6e3VzZTpbImhpZ2hsaWdodC1iYXNlIiwiaGlnaGxpZ2h0LWFjY2VudGZvbGQiXX0sImhpZ2hsaWdodC1hY2NlbnRmb2xkIjp7cmVxdWlyZXM6WyJoaWdobGlnaHQtYmFzZSIsInRleHQtYWNjZW50Zm9sZCJdfSwiaGlnaGxpZ2h0LWJhc2UiOntyZXF1aXJlczpbImFycmF5LWV4dHJhcyIsImNsYXNzbmFtZW1hbmFnZXIiLCJlc2NhcGUiLCJ0ZXh0LXdvcmRicmVhayJdfSxoaXN0b3J5Ont1c2U6WyJoaXN0b3J5LWJhc2UiLCJoaXN0b3J5LWhhc2giLCJoaXN0b3J5LWh0bWw1Il19LCJoaXN0b3J5LWJhc2UiOntyZXF1aXJlczpbImV2ZW50LWN1c3RvbS1jb21wbGV4Il19LAoiaGlzdG9yeS1oYXNoIjp7YWZ0ZXI6WyJoaXN0b3J5LWh0bWw1Il0scmVxdWlyZXM6WyJldmVudC1zeW50aGV0aWMiLCJoaXN0b3J5LWJhc2UiLCJ5dWktbGF0ZXIiXX0sImhpc3RvcnktaGFzaC1pZSI6e2NvbmRpdGlvbjp7bmFtZToiaGlzdG9yeS1oYXNoLWllIix0ZXN0OmZ1bmN0aW9uKHEpe3ZhciB0PXEuY29uZmlnLmRvYyYmcS5jb25maWcuZG9jLmRvY3VtZW50TW9kZTtyZXR1cm4gcS5VQS5pZSYmKCEoIm9uaGFzaGNoYW5nZSJpbiBxLmNvbmZpZy53aW4pfHwhdHx8OD50KX0sdHJpZ2dlcjoiaGlzdG9yeS1oYXNoIn0scmVxdWlyZXM6WyJoaXN0b3J5LWhhc2giLCJub2RlLWJhc2UiXX0sImhpc3RvcnktaHRtbDUiOntvcHRpb25hbDpbImpzb24iXSxyZXF1aXJlczpbImV2ZW50LWJhc2UiLCJoaXN0b3J5LWJhc2UiLCJub2RlLWJhc2UiXX0saW1hZ2Vsb2FkZXI6e3JlcXVpcmVzOlsiYmFzZS1iYXNlIiwibm9kZS1zdHlsZSIsIm5vZGUtc2NyZWVuIl19LGludGw6e3JlcXVpcmVzOlsiaW50bC1iYXNlIiwKImV2ZW50LWN1c3RvbSJdfSwiaW50bC1iYXNlIjp7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSxpbzp7dXNlOlsiaW8tYmFzZSIsImlvLXhkciIsImlvLWZvcm0iLCJpby11cGxvYWQtaWZyYW1lIiwiaW8tcXVldWUiXX0sImlvLWJhc2UiOntyZXF1aXJlczpbImV2ZW50LWN1c3RvbS1iYXNlIiwicXVlcnlzdHJpbmctc3RyaW5naWZ5LXNpbXBsZSJdfSwiaW8tZm9ybSI6e3JlcXVpcmVzOlsiaW8tYmFzZSIsIm5vZGUtYmFzZSJdfSwiaW8tbm9kZWpzIjp7Y29uZGl0aW9uOntuYW1lOiJpby1ub2RlanMiLHRyaWdnZXI6ImlvLWJhc2UiLHVhOiJub2RlanMifSxyZXF1aXJlczpbImlvLWJhc2UiXX0sImlvLXF1ZXVlIjp7cmVxdWlyZXM6WyJpby1iYXNlIiwicXVldWUtcHJvbW90ZSJdfSwiaW8tdXBsb2FkLWlmcmFtZSI6e3JlcXVpcmVzOlsiaW8tYmFzZSIsIm5vZGUtYmFzZSJdfSwiaW8teGRyIjp7cmVxdWlyZXM6WyJpby1iYXNlIiwiZGF0YXR5cGUteG1sLXBhcnNlIl19LGpzb246e3VzZTpbImpzb24tcGFyc2UiLAoianNvbi1zdHJpbmdpZnkiXX0sImpzb24tcGFyc2UiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJqc29uLXBhcnNlLXNoaW0iOntjb25kaXRpb246e25hbWU6Impzb24tcGFyc2Utc2hpbSIsdGVzdDpmdW5jdGlvbihxKXtmdW5jdGlvbiB0KGMsYil7cmV0dXJuIm9rIj09PWM/ITA6Yn12YXIgZj1xLmNvbmZpZy5nbG9iYWwuSlNPTixmPSJbb2JqZWN0IEpTT05dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmKSYmZjtpZihxPSExIT09cS5jb25maWcudXNlTmF0aXZlSlNPTlBhcnNlJiYhIWYpdHJ5e3E9Zi5wYXJzZSgneyJvayI6ZmFsc2V9Jyx0KS5va31jYXRjaChkKXtxPSExfXJldHVybiFxfSx0cmlnZ2VyOiJqc29uLXBhcnNlIn0scmVxdWlyZXM6WyJqc29uLXBhcnNlIl19LCJqc29uLXN0cmluZ2lmeSI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sImpzb24tc3RyaW5naWZ5LXNoaW0iOntjb25kaXRpb246e25hbWU6Impzb24tc3RyaW5naWZ5LXNoaW0iLHRlc3Q6ZnVuY3Rpb24ocSl7dmFyIHQ9CnEuY29uZmlnLmdsb2JhbC5KU09OLHQ9IltvYmplY3QgSlNPTl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiZ0O2lmKHE9ITEhPT1xLmNvbmZpZy51c2VOYXRpdmVKU09OU3RyaW5naWZ5JiYhIXQpdHJ5e3E9IjAiPT09dC5zdHJpbmdpZnkoMCl9Y2F0Y2goZil7cT0hMX1yZXR1cm4hcX0sdHJpZ2dlcjoianNvbi1zdHJpbmdpZnkifSxyZXF1aXJlczpbImpzb24tc3RyaW5naWZ5Il19LGpzb25wOntyZXF1aXJlczpbImdldCIsIm9vcCJdfSwianNvbnAtdXJsIjp7cmVxdWlyZXM6WyJqc29ucCJdfSwibGF6eS1tb2RlbC1saXN0Ijp7cmVxdWlyZXM6WyJtb2RlbC1saXN0Il19LGxvYWRlcjp7dXNlOlsibG9hZGVyLWJhc2UiLCJsb2FkZXItcm9sbHVwIiwibG9hZGVyLXl1aTMiXX0sImxvYWRlci1iYXNlIjp7cmVxdWlyZXM6WyJnZXQiLCJmZWF0dXJlcyJdfSwibG9hZGVyLXBhdGhvZ2VuLWNvbWJvaGFuZGxlciI6e30sImxvYWRlci1wYXRob2dlbi1lbmNvZGVyIjp7dXNlOlsibG9hZGVyLWJhc2UiLAoibG9hZGVyLXJvbGx1cCIsImxvYWRlci15dWkzIiwibG9hZGVyLXBhdGhvZ2VuLWNvbWJvaGFuZGxlciJdfSwibG9hZGVyLXJvbGx1cCI6e3JlcXVpcmVzOlsibG9hZGVyLWJhc2UiXX0sImxvYWRlci15dWkzIjp7cmVxdWlyZXM6WyJsb2FkZXItYmFzZSJdfSxtYXRyaXg6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sbW9kZWw6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsImVzY2FwZSIsImpzb24tcGFyc2UiXX0sIm1vZGVsLWxpc3QiOntyZXF1aXJlczoiYXJyYXktZXh0cmFzIGFycmF5LWludm9rZSBhcnJheWxpc3QgYmFzZS1idWlsZCBlc2NhcGUganNvbi1wYXJzZSBtb2RlbCIuc3BsaXQoIiAiKX0sIm1vZGVsLXN5bmMtbG9jYWwiOntyZXF1aXJlczpbIm1vZGVsIiwianNvbi1zdHJpbmdpZnkiXX0sIm1vZGVsLXN5bmMtcmVzdCI6e3JlcXVpcmVzOlsibW9kZWwiLCJpby1iYXNlIiwianNvbi1zdHJpbmdpZnkiXX0sbm9kZTp7dXNlOlsibm9kZS1iYXNlIiwibm9kZS1ldmVudC1kZWxlZ2F0ZSIsCiJub2RlLXBsdWdpbmhvc3QiLCJub2RlLXNjcmVlbiIsIm5vZGUtc3R5bGUiXX0sIm5vZGUtYmFzZSI6e3JlcXVpcmVzOlsiZXZlbnQtYmFzZSIsIm5vZGUtY29yZSIsImRvbS1iYXNlIiwiZG9tLXN0eWxlIl19LCJub2RlLWNvcmUiOntyZXF1aXJlczpbImRvbS1jb3JlIiwic2VsZWN0b3IiXX0sIm5vZGUtZXZlbnQtZGVsZWdhdGUiOntyZXF1aXJlczpbIm5vZGUtYmFzZSIsImV2ZW50LWRlbGVnYXRlIl19LCJub2RlLWV2ZW50LWh0bWw1Ijp7cmVxdWlyZXM6WyJub2RlLWJhc2UiXX0sIm5vZGUtZXZlbnQtc2ltdWxhdGUiOntyZXF1aXJlczpbIm5vZGUtYmFzZSIsImV2ZW50LXNpbXVsYXRlIiwiZ2VzdHVyZS1zaW11bGF0ZSJdfSwibm9kZS1mbGljayI6e3JlcXVpcmVzOlsiY2xhc3NuYW1lbWFuYWdlciIsInRyYW5zaXRpb24iLCJldmVudC1mbGljayIsInBsdWdpbiJdLHNraW5uYWJsZTohMH0sIm5vZGUtZm9jdXNtYW5hZ2VyIjp7cmVxdWlyZXM6ImF0dHJpYnV0ZSBub2RlIHBsdWdpbiBub2RlLWV2ZW50LXNpbXVsYXRlIGV2ZW50LWtleSBldmVudC1mb2N1cyIuc3BsaXQoIiAiKX0sCiJub2RlLWxvYWQiOntyZXF1aXJlczpbIm5vZGUtYmFzZSIsImlvLWJhc2UiXX0sIm5vZGUtbWVudW5hdiI6e3JlcXVpcmVzOlsibm9kZSIsImNsYXNzbmFtZW1hbmFnZXIiLCJwbHVnaW4iLCJub2RlLWZvY3VzbWFuYWdlciJdLHNraW5uYWJsZTohMH0sIm5vZGUtcGx1Z2luaG9zdCI6e3JlcXVpcmVzOlsibm9kZS1iYXNlIiwicGx1Z2luaG9zdCJdfSwibm9kZS1zY3JlZW4iOntyZXF1aXJlczpbImRvbS1zY3JlZW4iLCJub2RlLWJhc2UiXX0sIm5vZGUtc2Nyb2xsLWluZm8iOntyZXF1aXJlczoiYXJyYXktZXh0cmFzIGJhc2UtYnVpbGQgZXZlbnQtcmVzaXplIG5vZGUtcGx1Z2luaG9zdCBwbHVnaW4gc2VsZWN0b3IiLnNwbGl0KCIgIil9LCJub2RlLXN0eWxlIjp7cmVxdWlyZXM6WyJkb20tc3R5bGUiLCJub2RlLWJhc2UiXX0sb29wOntyZXF1aXJlczpbInl1aS1iYXNlIl19LG92ZXJsYXk6e3JlcXVpcmVzOiJ3aWRnZXQgd2lkZ2V0LXN0ZG1vZCB3aWRnZXQtcG9zaXRpb24gd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1zdGFjayB3aWRnZXQtcG9zaXRpb24tY29uc3RyYWluIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LHBhZ2luYXRvcjp7cmVxdWlyZXM6WyJwYWdpbmF0b3ItY29yZSJdfSwicGFnaW5hdG9yLWNvcmUiOntyZXF1aXJlczpbImJhc2UiXX0sInBhZ2luYXRvci11cmwiOntyZXF1aXJlczpbInBhZ2luYXRvciJdfSxwYW5lbDp7cmVxdWlyZXM6IndpZGdldCB3aWRnZXQtYXV0b2hpZGUgd2lkZ2V0LWJ1dHRvbnMgd2lkZ2V0LW1vZGFsaXR5IHdpZGdldC1wb3NpdGlvbiB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiB3aWRnZXQtc3RhY2sgd2lkZ2V0LXN0ZG1vZCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LHBhcmFsbGVsOntyZXF1aXJlczpbInl1aS1iYXNlIl19LHBqYXg6e3JlcXVpcmVzOlsicGpheC1iYXNlIiwicGpheC1jb250ZW50Il19LCJwamF4LWJhc2UiOntyZXF1aXJlczpbImNsYXNzbmFtZW1hbmFnZXIiLCJub2RlLWV2ZW50LWRlbGVnYXRlIiwicm91dGVyIl19LCJwamF4LWNvbnRlbnQiOntyZXF1aXJlczpbImlvLWJhc2UiLAoibm9kZS1iYXNlIiwicm91dGVyIl19LCJwamF4LXBsdWdpbiI6e3JlcXVpcmVzOlsibm9kZS1wbHVnaW5ob3N0IiwicGpheCIsInBsdWdpbiJdfSxwbHVnaW46e3JlcXVpcmVzOlsiYmFzZS1iYXNlIl19LHBsdWdpbmhvc3Q6e3VzZTpbInBsdWdpbmhvc3QtYmFzZSIsInBsdWdpbmhvc3QtY29uZmlnIl19LCJwbHVnaW5ob3N0LWJhc2UiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJwbHVnaW5ob3N0LWNvbmZpZyI6e3JlcXVpcmVzOlsicGx1Z2luaG9zdC1iYXNlIl19LHByb21pc2U6e3JlcXVpcmVzOlsidGltZXJzIl19LHF1ZXJ5c3RyaW5nOnt1c2U6WyJxdWVyeXN0cmluZy1wYXJzZSIsInF1ZXJ5c3RyaW5nLXN0cmluZ2lmeSJdfSwicXVlcnlzdHJpbmctcGFyc2UiOntyZXF1aXJlczpbInl1aS1iYXNlIiwiYXJyYXktZXh0cmFzIl19LCJxdWVyeXN0cmluZy1wYXJzZS1zaW1wbGUiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJxdWVyeXN0cmluZy1zdHJpbmdpZnkiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LAoicXVlcnlzdHJpbmctc3RyaW5naWZ5LXNpbXBsZSI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sInF1ZXVlLXByb21vdGUiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJyYW5nZS1zbGlkZXIiOntyZXF1aXJlczpbInNsaWRlci1iYXNlIiwic2xpZGVyLXZhbHVlLXJhbmdlIiwiY2xpY2thYmxlLXJhaWwiXX0scmVjb3Jkc2V0Ont1c2U6WyJyZWNvcmRzZXQtYmFzZSIsInJlY29yZHNldC1zb3J0IiwicmVjb3Jkc2V0LWZpbHRlciIsInJlY29yZHNldC1pbmRleGVyIl19LCJyZWNvcmRzZXQtYmFzZSI6e3JlcXVpcmVzOlsiYmFzZSIsImFycmF5bGlzdCJdfSwicmVjb3Jkc2V0LWZpbHRlciI6e3JlcXVpcmVzOlsicmVjb3Jkc2V0LWJhc2UiLCJhcnJheS1leHRyYXMiLCJwbHVnaW4iXX0sInJlY29yZHNldC1pbmRleGVyIjp7cmVxdWlyZXM6WyJyZWNvcmRzZXQtYmFzZSIsInBsdWdpbiJdfSwicmVjb3Jkc2V0LXNvcnQiOntyZXF1aXJlczpbImFycmF5c29ydCIsInJlY29yZHNldC1iYXNlIiwKInBsdWdpbiJdfSxyZXNpemU6e3VzZTpbInJlc2l6ZS1iYXNlIiwicmVzaXplLXByb3h5IiwicmVzaXplLWNvbnN0cmFpbiJdfSwicmVzaXplLWJhc2UiOntyZXF1aXJlczoiYmFzZSB3aWRnZXQgZXZlbnQgb29wIGRkLWRyYWcgZGQtZGVsZWdhdGUgZGQtZHJvcCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJyZXNpemUtY29uc3RyYWluIjp7cmVxdWlyZXM6WyJwbHVnaW4iLCJyZXNpemUtYmFzZSJdfSwicmVzaXplLXBsdWdpbiI6e29wdGlvbmFsOlsicmVzaXplLWNvbnN0cmFpbiJdLHJlcXVpcmVzOlsicmVzaXplLWJhc2UiLCJwbHVnaW4iXX0sInJlc2l6ZS1wcm94eSI6e3JlcXVpcmVzOlsicGx1Z2luIiwicmVzaXplLWJhc2UiXX0scm91dGVyOntvcHRpb25hbDpbInF1ZXJ5c3RyaW5nLXBhcnNlIl0scmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLCJiYXNlLWJ1aWxkIiwiaGlzdG9yeSJdfSxzY3JvbGx2aWV3OntyZXF1aXJlczpbInNjcm9sbHZpZXctYmFzZSIsInNjcm9sbHZpZXctc2Nyb2xsYmFycyJdfSwKInNjcm9sbHZpZXctYmFzZSI6e3JlcXVpcmVzOlsid2lkZ2V0IiwiZXZlbnQtZ2VzdHVyZXMiLCJldmVudC1tb3VzZXdoZWVsIiwidHJhbnNpdGlvbiJdLHNraW5uYWJsZTohMH0sInNjcm9sbHZpZXctYmFzZS1pZSI6e2NvbmRpdGlvbjp7bmFtZToic2Nyb2xsdmlldy1iYXNlLWllIix0cmlnZ2VyOiJzY3JvbGx2aWV3LWJhc2UiLHVhOiJpZSJ9LHJlcXVpcmVzOlsic2Nyb2xsdmlldy1iYXNlIl19LCJzY3JvbGx2aWV3LWxpc3QiOntyZXF1aXJlczpbInBsdWdpbiIsImNsYXNzbmFtZW1hbmFnZXIiXSxza2lubmFibGU6ITB9LCJzY3JvbGx2aWV3LXBhZ2luYXRvciI6e3JlcXVpcmVzOlsicGx1Z2luIiwiY2xhc3NuYW1lbWFuYWdlciJdfSwic2Nyb2xsdmlldy1zY3JvbGxiYXJzIjp7cmVxdWlyZXM6WyJjbGFzc25hbWVtYW5hZ2VyIiwidHJhbnNpdGlvbiIsInBsdWdpbiJdLHNraW5uYWJsZTohMH0sc2VsZWN0b3I6e3JlcXVpcmVzOlsic2VsZWN0b3ItbmF0aXZlIl19LCJzZWxlY3Rvci1jc3MyIjp7Y29uZGl0aW9uOntuYW1lOiJzZWxlY3Rvci1jc3MyIiwKdGVzdDpmdW5jdGlvbihxKXtyZXR1cm4ocT1xLmNvbmZpZy5kb2MpJiYhKCJxdWVyeVNlbGVjdG9yQWxsImluIHEpfSx0cmlnZ2VyOiJzZWxlY3RvciJ9LHJlcXVpcmVzOlsic2VsZWN0b3ItbmF0aXZlIl19LCJzZWxlY3Rvci1jc3MzIjp7cmVxdWlyZXM6WyJzZWxlY3Rvci1uYXRpdmUiLCJzZWxlY3Rvci1jc3MyIl19LCJzZWxlY3Rvci1uYXRpdmUiOntyZXF1aXJlczpbImRvbS1iYXNlIl19LCJzZXJpZXMtYXJlYSI6e3JlcXVpcmVzOlsic2VyaWVzLWNhcnRlc2lhbiIsInNlcmllcy1maWxsLXV0aWwiXX0sInNlcmllcy1hcmVhLXN0YWNrZWQiOntyZXF1aXJlczpbInNlcmllcy1zdGFja2VkIiwic2VyaWVzLWFyZWEiXX0sInNlcmllcy1hcmVhc3BsaW5lIjp7cmVxdWlyZXM6WyJzZXJpZXMtYXJlYSIsInNlcmllcy1jdXJ2ZS11dGlsIl19LCJzZXJpZXMtYXJlYXNwbGluZS1zdGFja2VkIjp7cmVxdWlyZXM6WyJzZXJpZXMtc3RhY2tlZCIsInNlcmllcy1hcmVhc3BsaW5lIl19LCJzZXJpZXMtYmFyIjp7cmVxdWlyZXM6WyJzZXJpZXMtbWFya2VyIiwKInNlcmllcy1oaXN0b2dyYW0tYmFzZSJdfSwic2VyaWVzLWJhci1zdGFja2VkIjp7cmVxdWlyZXM6WyJzZXJpZXMtc3RhY2tlZCIsInNlcmllcy1iYXIiXX0sInNlcmllcy1iYXNlIjp7cmVxdWlyZXM6WyJncmFwaGljcyIsImF4aXMtYmFzZSJdfSwic2VyaWVzLWNhbmRsZXN0aWNrIjp7cmVxdWlyZXM6WyJzZXJpZXMtcmFuZ2UiXX0sInNlcmllcy1jYXJ0ZXNpYW4iOntyZXF1aXJlczpbInNlcmllcy1iYXNlIl19LCJzZXJpZXMtY29sdW1uIjp7cmVxdWlyZXM6WyJzZXJpZXMtbWFya2VyIiwic2VyaWVzLWhpc3RvZ3JhbS1iYXNlIl19LCJzZXJpZXMtY29sdW1uLXN0YWNrZWQiOntyZXF1aXJlczpbInNlcmllcy1zdGFja2VkIiwic2VyaWVzLWNvbHVtbiJdfSwic2VyaWVzLWNvbWJvIjp7cmVxdWlyZXM6WyJzZXJpZXMtY2FydGVzaWFuIiwic2VyaWVzLWxpbmUtdXRpbCIsInNlcmllcy1wbG90LXV0aWwiLCJzZXJpZXMtZmlsbC11dGlsIl19LCJzZXJpZXMtY29tYm8tc3RhY2tlZCI6e3JlcXVpcmVzOlsic2VyaWVzLXN0YWNrZWQiLAoic2VyaWVzLWNvbWJvIl19LCJzZXJpZXMtY29tYm9zcGxpbmUiOntyZXF1aXJlczpbInNlcmllcy1jb21ibyIsInNlcmllcy1jdXJ2ZS11dGlsIl19LCJzZXJpZXMtY29tYm9zcGxpbmUtc3RhY2tlZCI6e3JlcXVpcmVzOlsic2VyaWVzLWNvbWJvLXN0YWNrZWQiLCJzZXJpZXMtY3VydmUtdXRpbCJdfSwic2VyaWVzLWN1cnZlLXV0aWwiOnt9LCJzZXJpZXMtZmlsbC11dGlsIjp7fSwic2VyaWVzLWhpc3RvZ3JhbS1iYXNlIjp7cmVxdWlyZXM6WyJzZXJpZXMtY2FydGVzaWFuIiwic2VyaWVzLXBsb3QtdXRpbCJdfSwic2VyaWVzLWxpbmUiOntyZXF1aXJlczpbInNlcmllcy1jYXJ0ZXNpYW4iLCJzZXJpZXMtbGluZS11dGlsIl19LCJzZXJpZXMtbGluZS1zdGFja2VkIjp7cmVxdWlyZXM6WyJzZXJpZXMtc3RhY2tlZCIsInNlcmllcy1saW5lIl19LCJzZXJpZXMtbGluZS11dGlsIjp7fSwic2VyaWVzLW1hcmtlciI6e3JlcXVpcmVzOlsic2VyaWVzLWNhcnRlc2lhbiIsInNlcmllcy1wbG90LXV0aWwiXX0sCiJzZXJpZXMtbWFya2VyLXN0YWNrZWQiOntyZXF1aXJlczpbInNlcmllcy1zdGFja2VkIiwic2VyaWVzLW1hcmtlciJdfSwic2VyaWVzLW9obGMiOntyZXF1aXJlczpbInNlcmllcy1yYW5nZSJdfSwic2VyaWVzLXBpZSI6e3JlcXVpcmVzOlsic2VyaWVzLWJhc2UiLCJzZXJpZXMtcGxvdC11dGlsIl19LCJzZXJpZXMtcGxvdC11dGlsIjp7fSwic2VyaWVzLXJhbmdlIjp7cmVxdWlyZXM6WyJzZXJpZXMtY2FydGVzaWFuIl19LCJzZXJpZXMtc3BsaW5lIjp7cmVxdWlyZXM6WyJzZXJpZXMtbGluZSIsInNlcmllcy1jdXJ2ZS11dGlsIl19LCJzZXJpZXMtc3BsaW5lLXN0YWNrZWQiOntyZXF1aXJlczpbInNlcmllcy1zdGFja2VkIiwic2VyaWVzLXNwbGluZSJdfSwic2VyaWVzLXN0YWNrZWQiOntyZXF1aXJlczpbImF4aXMtc3RhY2tlZCJdfSwic2hpbS1wbHVnaW4iOntyZXF1aXJlczpbIm5vZGUtc3R5bGUiLCJub2RlLXBsdWdpbmhvc3QiXX0sc2xpZGVyOnt1c2U6WyJzbGlkZXItYmFzZSIsCiJzbGlkZXItdmFsdWUtcmFuZ2UiLCJjbGlja2FibGUtcmFpbCIsInJhbmdlLXNsaWRlciJdfSwic2xpZGVyLWJhc2UiOntyZXF1aXJlczpbIndpZGdldCIsImRkLWNvbnN0cmFpbiIsImV2ZW50LWtleSJdLHNraW5uYWJsZTohMH0sInNsaWRlci12YWx1ZS1yYW5nZSI6e3JlcXVpcmVzOlsic2xpZGVyLWJhc2UiXX0sc29ydGFibGU6e3JlcXVpcmVzOlsiZGQtZGVsZWdhdGUiLCJkZC1kcm9wLXBsdWdpbiIsImRkLXByb3h5Il19LCJzb3J0YWJsZS1zY3JvbGwiOntyZXF1aXJlczpbImRkLXNjcm9sbCIsInNvcnRhYmxlIl19LHN0eWxlc2hlZXQ6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sc3Vic3RpdHV0ZTp7b3B0aW9uYWw6WyJkdW1wIl0scmVxdWlyZXM6WyJ5dWktYmFzZSJdfSxzd2Y6e3JlcXVpcmVzOlsiZXZlbnQtY3VzdG9tIiwibm9kZSIsInN3ZmRldGVjdCIsImVzY2FwZSJdfSxzd2ZkZXRlY3Q6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sdGFidmlldzp7cmVxdWlyZXM6IndpZGdldCB3aWRnZXQtcGFyZW50IHdpZGdldC1jaGlsZCB0YWJ2aWV3LWJhc2Ugbm9kZS1wbHVnaW5ob3N0IG5vZGUtZm9jdXNtYW5hZ2VyIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LCJ0YWJ2aWV3LWJhc2UiOntyZXF1aXJlczpbIm5vZGUtZXZlbnQtZGVsZWdhdGUiLCJjbGFzc25hbWVtYW5hZ2VyIl19LCJ0YWJ2aWV3LXBsdWdpbiI6e3JlcXVpcmVzOlsidGFidmlldy1iYXNlIl19LHRlbXBsYXRlOnt1c2U6WyJ0ZW1wbGF0ZS1iYXNlIiwidGVtcGxhdGUtbWljcm8iXX0sInRlbXBsYXRlLWJhc2UiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJ0ZW1wbGF0ZS1taWNybyI6e3JlcXVpcmVzOlsiZXNjYXBlIl19LHRlc3Q6e3JlcXVpcmVzOlsiZXZlbnQtc2ltdWxhdGUiLCJldmVudC1jdXN0b20iLCJqc29uLXN0cmluZ2lmeSJdfSwidGVzdC1jb25zb2xlIjp7cmVxdWlyZXM6WyJjb25zb2xlLWZpbHRlcnMiLCJ0ZXN0IiwiYXJyYXktZXh0cmFzIl0sc2tpbm5hYmxlOiEwfSx0ZXh0Ont1c2U6WyJ0ZXh0LWFjY2VudGZvbGQiLCJ0ZXh0LXdvcmRicmVhayJdfSwidGV4dC1hY2NlbnRmb2xkIjp7cmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLCJ0ZXh0LWRhdGEtYWNjZW50Zm9sZCJdfSwKInRleHQtZGF0YS1hY2NlbnRmb2xkIjp7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSwidGV4dC1kYXRhLXdvcmRicmVhayI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sInRleHQtd29yZGJyZWFrIjp7cmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLCJ0ZXh0LWRhdGEtd29yZGJyZWFrIl19LHRpbWVyczp7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSx0cmFuc2l0aW9uOntyZXF1aXJlczpbIm5vZGUtc3R5bGUiXX0sInRyYW5zaXRpb24tdGltZXIiOntjb25kaXRpb246e25hbWU6InRyYW5zaXRpb24tdGltZXIiLHRlc3Q6ZnVuY3Rpb24ocSl7cT0ocT1xLmNvbmZpZy5kb2MpP3EuZG9jdW1lbnRFbGVtZW50Om51bGw7dmFyIHQ9ITA7cSYmcS5zdHlsZSYmKHQ9ISgiTW96VHJhbnNpdGlvbiJpbiBxLnN0eWxlfHwiV2Via2l0VHJhbnNpdGlvbiJpbiBxLnN0eWxlfHwidHJhbnNpdGlvbiJpbiBxLnN0eWxlKSk7cmV0dXJuIHR9LHRyaWdnZXI6InRyYW5zaXRpb24ifSxyZXF1aXJlczpbInRyYW5zaXRpb24iXX0sCnRyZWU6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsInRyZWUtbm9kZSJdfSwidHJlZS1sYWJlbGFibGUiOntyZXF1aXJlczpbInRyZWUiXX0sInRyZWUtbGF6eSI6e3JlcXVpcmVzOlsiYmFzZS1wbHVnaW5ob3N0IiwicGx1Z2luIiwidHJlZSJdfSwidHJlZS1ub2RlIjp7fSwidHJlZS1vcGVuYWJsZSI6e3JlcXVpcmVzOlsidHJlZSJdfSwidHJlZS1zZWxlY3RhYmxlIjp7cmVxdWlyZXM6WyJ0cmVlIl19LCJ0cmVlLXNvcnRhYmxlIjp7cmVxdWlyZXM6WyJ0cmVlIl19LHVwbG9hZGVyOntyZXF1aXJlczpbInVwbG9hZGVyLWh0bWw1IiwidXBsb2FkZXItZmxhc2giXX0sInVwbG9hZGVyLWZsYXNoIjp7cmVxdWlyZXM6InN3ZmRldGVjdCBlc2NhcGUgd2lkZ2V0IGJhc2UgY3NzYnV0dG9uIG5vZGUgZXZlbnQtY3VzdG9tIHVwbG9hZGVyLXF1ZXVlIi5zcGxpdCgiICIpfSwidXBsb2FkZXItaHRtbDUiOntyZXF1aXJlczpbIndpZGdldCIsIm5vZGUtZXZlbnQtc2ltdWxhdGUiLCJmaWxlLWh0bWw1IiwKInVwbG9hZGVyLXF1ZXVlIl19LCJ1cGxvYWRlci1xdWV1ZSI6e3JlcXVpcmVzOlsiYmFzZSJdfSx2aWV3OntyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJub2RlLWV2ZW50LWRlbGVnYXRlIl19LCJ2aWV3LW5vZGUtbWFwIjp7cmVxdWlyZXM6WyJ2aWV3Il19LHdpZGdldDp7dXNlOlsid2lkZ2V0LWJhc2UiLCJ3aWRnZXQtaHRtbHBhcnNlciIsIndpZGdldC1za2luIiwid2lkZ2V0LXVpZXZlbnRzIl19LCJ3aWRnZXQtYW5pbSI6e3JlcXVpcmVzOlsiYW5pbS1iYXNlIiwicGx1Z2luIiwid2lkZ2V0Il19LCJ3aWRnZXQtYXV0b2hpZGUiOntyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJldmVudC1rZXkiLCJldmVudC1vdXRzaWRlIiwid2lkZ2V0Il19LCJ3aWRnZXQtYmFzZSI6e3JlcXVpcmVzOiJhdHRyaWJ1dGUgYmFzZS1iYXNlIGJhc2UtcGx1Z2luaG9zdCBjbGFzc25hbWVtYW5hZ2VyIGV2ZW50LWZvY3VzIG5vZGUtYmFzZSBub2RlLXN0eWxlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sCiJ3aWRnZXQtYmFzZS1pZSI6e2NvbmRpdGlvbjp7bmFtZToid2lkZ2V0LWJhc2UtaWUiLHRyaWdnZXI6IndpZGdldC1iYXNlIix1YToiaWUifSxyZXF1aXJlczpbIndpZGdldC1iYXNlIl19LCJ3aWRnZXQtYnV0dG9ucyI6e3JlcXVpcmVzOlsiYnV0dG9uLXBsdWdpbiIsImNzc2J1dHRvbiIsIndpZGdldC1zdGRtb2QiXX0sIndpZGdldC1jaGlsZCI6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsIndpZGdldCJdfSwid2lkZ2V0LWh0bWxwYXJzZXIiOntyZXF1aXJlczpbIndpZGdldC1iYXNlIl19LCJ3aWRnZXQtbW9kYWxpdHkiOntyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJldmVudC1vdXRzaWRlIiwid2lkZ2V0Il0sc2tpbm5hYmxlOiEwfSwid2lkZ2V0LXBhcmVudCI6e3JlcXVpcmVzOlsiYXJyYXlsaXN0IiwiYmFzZS1idWlsZCIsIndpZGdldCJdfSwid2lkZ2V0LXBvc2l0aW9uIjp7cmVxdWlyZXM6WyJiYXNlLWJ1aWxkIiwibm9kZS1zY3JlZW4iLCJ3aWRnZXQiXX0sIndpZGdldC1wb3NpdGlvbi1hbGlnbiI6e3JlcXVpcmVzOlsid2lkZ2V0LXBvc2l0aW9uIl19LAoid2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiI6e3JlcXVpcmVzOlsid2lkZ2V0LXBvc2l0aW9uIl19LCJ3aWRnZXQtc2tpbiI6e3JlcXVpcmVzOlsid2lkZ2V0LWJhc2UiXX0sIndpZGdldC1zdGFjayI6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsIndpZGdldCJdLHNraW5uYWJsZTohMH0sIndpZGdldC1zdGRtb2QiOntyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJ3aWRnZXQiXX0sIndpZGdldC11aWV2ZW50cyI6e3JlcXVpcmVzOlsibm9kZS1ldmVudC1kZWxlZ2F0ZSIsIndpZGdldC1iYXNlIl19LHlxbDp7cmVxdWlyZXM6WyJvb3AiXX0sInlxbC1qc29ucCI6e2NvbmRpdGlvbjp7bmFtZToieXFsLWpzb25wIix0ZXN0OmZ1bmN0aW9uKHEpe3JldHVybiFxLlVBLm5vZGVqcyYmIXEuVUEud2luanN9LHRyaWdnZXI6InlxbCJ9LHJlcXVpcmVzOlsieXFsIiwianNvbnAiLCJqc29ucC11cmwiXX0sInlxbC1ub2RlanMiOntjb25kaXRpb246e25hbWU6InlxbC1ub2RlanMiLHRyaWdnZXI6InlxbCIsCnVhOiJub2RlanMifSxyZXF1aXJlczpbInlxbCJdfSwieXFsLXdpbmpzIjp7Y29uZGl0aW9uOntuYW1lOiJ5cWwtd2luanMiLHRyaWdnZXI6InlxbCIsdWE6IndpbmpzIn0scmVxdWlyZXM6WyJ5cWwiXX0seXVpOnt9LCJ5dWktYmFzZSI6e30sInl1aS1sYXRlciI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sInl1aS1sb2ciOntyZXF1aXJlczpbInl1aS1iYXNlIl19LCJ5dWktdGhyb3R0bGUiOntyZXF1aXJlczpbInl1aS1iYXNlIl19fSk7WVVJLkVudlthLnZlcnNpb25dLm1kNT0iZjIwMzc3ZDVhYjZkMzcxMzdmNzNlYTc5ZDZlYjQ3NmQifSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJsb2FkZXItYmFzZSJdfSk7WVVJLmFkZCgieXVpIixmdW5jdGlvbihhLEUpe30sInBhdGNoZWQtdjMuMTguMSIse3VzZToieXVpLWJhc2UgZ2V0IGZlYXR1cmVzIGludGwtYmFzZSB5dWktbG9nIHl1aS1sYXRlciBsb2FkZXItYmFzZSBsb2FkZXItcm9sbHVwIGxvYWRlci15dWkzIi5zcGxpdCgiICIpfSk7CllVSS5hZGQoImF1aS1iYXNlLWNvcmUiLGZ1bmN0aW9uKGEsRSl7WVVJLkVudi5hbGlhc2VzPVlVSS5FbnYuYWxpYXNlc3x8e307YS5taXgoWVVJLkVudi5hbGlhc2VzLHsiYXVpLWF1dG9zaXplIjpbImF1aS1hdXRvc2l6ZS1pZnJhbWUiXSwiYXVpLWJhc2UiOiJvb3AgeXVpLXRocm90dGxlIGF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS1kZWJvdW5jZSBhdWktYmFzZS1jb3JlIGF1aS1iYXNlLWxhbmcgYXVpLW5vZGUtYmFzZSIuc3BsaXQoIiAiKSwiYXVpLWJhc2UtZGVwcmVjYXRlZCI6ImF1aS1iYXNlIGF1aS1ub2RlIGF1aS1jb21wb25lbnQgYXVpLWRlbGF5ZWQtdGFzay1kZXByZWNhdGVkIGF1aS1zZWxlY3RvciBhdWktZXZlbnQtYmFzZSIuc3BsaXQoIiAiKSwiYXVpLWJ1dHRvbiI6WyJhdWktYnV0dG9uLWNvcmUiXSwiYXVpLWNvbGxlY3Rpb24iOlsiYXVpLW1hcCIsImF1aS1zZXQiLCJhdWktbGlua2Vkc2V0Il0sImF1aS1jb2xvci1waWNrZXItZGVwcmVjYXRlZCI6WyJhdWktY29sb3ItcGlja2VyLWJhc2UtZGVwcmVjYXRlZCIsCiJhdWktY29sb3ItcGlja2VyLWdyaWQtcGx1Z2luLWRlcHJlY2F0ZWQiXSwiYXVpLWRhdGFzb3VyY2UtY29udHJvbC1kZXByZWNhdGVkIjpbImF1aS1kYXRhc291cmNlLWNvbnRyb2wtYmFzZS1kZXByZWNhdGVkIiwiYXVpLWlucHV0LXRleHQtY29udHJvbC1kZXByZWNhdGVkIl0sImF1aS1kYXRhdGFibGUiOlsiYXVpLWRhdGF0YWJsZS1lZGl0IiwiYXVpLWRhdGF0YWJsZS1oaWdobGlnaHQiLCJhdWktZGF0YXRhYmxlLXNlbGVjdGlvbiIsImF1aS1kYXRhdGFibGUtcHJvcGVydHktbGlzdCJdLCJhdWktZGF0YXRhYmxlLWVkaXQiOiJkYXRhdGFibGUtYmFzZSBjYWxlbmRhciBvdmVybGF5IHNvcnRhYmxlIGF1aS1kYXRhdHlwZSBhdWktdG9vbGJhciBhdWktZm9ybS12YWxpZGF0b3IgYXVpLWRhdGF0YWJsZS1iYXNlLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtY2VsbC1lZGl0b3Itc3VwcG9ydCBhdWktZGF0YXRhYmxlLWNvcmUgYXVpLWRhdGF0YWJsZS1jaGVja2JveC1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLWRhdGUtY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS1kcm9wZG93bi1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLXJhZGlvLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtdGV4dC1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLXRleHQtYXJlYS1jZWxsLWVkaXRvciIuc3BsaXQoIiAiKSwKImF1aS1kYXRlcGlja2VyLWRlcHJlY2F0ZWQiOlsiYXVpLWRhdGVwaWNrZXItYmFzZS1kZXByZWNhdGVkIiwiYXVpLWRhdGVwaWNrZXItc2VsZWN0LWRlcHJlY2F0ZWQiXSwiYXVpLWV2ZW50IjpbImF1aS1ldmVudC1iYXNlIl0sImF1aS1mb3JtLWRlcHJlY2F0ZWQiOiJhdWktZm9ybS1iYXNlLWRlcHJlY2F0ZWQgYXVpLWZvcm0tY29tYm9ib3gtZGVwcmVjYXRlZCBhdWktZm9ybS1maWVsZC1kZXByZWNhdGVkIGF1aS1mb3JtLXNlbGVjdC1kZXByZWNhdGVkIGF1aS1mb3JtLXRleHRhcmVhLWRlcHJlY2F0ZWQgYXVpLWZvcm0tdGV4dGZpZWxkLWRlcHJlY2F0ZWQiLnNwbGl0KCIgIiksImF1aS1pbyI6WyJhdWktaW8tcmVxdWVzdCJdLCJhdWktaW8tZGVwcmVjYXRlZCI6WyJhdWktaW8tcmVxdWVzdCIsImF1aS1pby1wbHVnaW4tZGVwcmVjYXRlZCJdLCJhdWktbm9kZSI6WyJhdWktbm9kZS1iYXNlIl0sImF1aS1vdmVybGF5LWRlcHJlY2F0ZWQiOlsiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIiwKImF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LWNvbnRleHQtcGFuZWwtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LW1hbmFnZXItZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LW1hc2stZGVwcmVjYXRlZCJdLCJhdWktcmF0aW5nIjpbImF1aS1yYXRpbmctYmFzZSIsImF1aS1yYXRpbmctdGh1bWIiXSwiYXVpLXJlc2l6ZS1kZXByZWNhdGVkIjpbImF1aS1yZXNpemUtYmFzZS1kZXByZWNhdGVkIiwiYXVpLXJlc2l6ZS1jb25zdHJhaW4tZGVwcmVjYXRlZCJdLCJhdWktc2NoZWR1bGVyIjoiZXZlbnQtZ2VzdHVyZXMgYXVpLXNjaGVkdWxlci1iYXNlIGF1aS1zY2hlZHVsZXItZXZlbnQtcmVjb3JkZXIgYXVpLXNjaGVkdWxlci12aWV3LWFnZW5kYSBhdWktc2NoZWR1bGVyLXZpZXctZGF5IGF1aS1zY2hlZHVsZXItdmlldy1tb250aCBhdWktc2NoZWR1bGVyLXZpZXctdGFibGUtZGQgYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlIGF1aS1zY2hlZHVsZXItdmlldy13ZWVrIGF1aS12aWV3cG9ydCIuc3BsaXQoIiAiKSwKImF1aS1zZWFyY2giOlsiYXVpLXNlYXJjaC10c3QiXSwiYXVpLXNvcnRhYmxlIjpbImF1aS1zb3J0YWJsZS1sYXlvdXQiLCJhdWktc29ydGFibGUtbGlzdCJdLCJhdWktc3VyZmFjZSI6WyJhdWktc3VyZmFjZS1hcHAiLCJhdWktc3VyZmFjZS1zY3JlZW4iXSwiYXVpLXRvZ2dsZXIiOlsiYXVpLXRvZ2dsZXItYmFzZSIsImF1aS10b2dnbGVyLWRlbGVnYXRlIl0sImF1aS10b29sdGlwIjpbImF1aS10b29sdGlwLWJhc2UiLCJhdWktdG9vbHRpcC1kZWxlZ2F0ZSJdLCJhdWktdHBsLXNuaXBwZXRzLWRlcHJlY2F0ZWQiOlsiYXVpLXRwbC1zbmlwcGV0cy1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktdHBsLXNuaXBwZXRzLWNoZWNrYm94LWRlcHJlY2F0ZWQiLCJhdWktdHBsLXNuaXBwZXRzLWlucHV0LWRlcHJlY2F0ZWQiLCJhdWktdHBsLXNuaXBwZXRzLXNlbGVjdC1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy10ZXh0YXJlYS1kZXByZWNhdGVkIl0sImF1aS10cmVlIjpbImF1aS10cmVlLWRhdGEiLAoiYXVpLXRyZWUtaW8iLCJhdWktdHJlZS1ub2RlIiwiYXVpLXRyZWUtcGFnaW5hdG9yIiwiYXVpLXRyZWUtdmlldyJdLCJhdWktd2lkZ2V0IjpbImF1aS13aWRnZXQtY3NzY2xhc3MiLCJhdWktd2lkZ2V0LXRvb2xiYXJzIl0sImF1aS13aWRnZXQtY29yZSI6WyJhdWktd2lkZ2V0LWNzc2NsYXNzIl19KTtZVUkuRW52W2EudmVyc2lvbl0ubW9kdWxlcz1ZVUkuRW52W2EudmVyc2lvbl0ubW9kdWxlc3x8e307YS5taXgoWVVJLkVudlthLnZlcnNpb25dLm1vZHVsZXMseyJhdWktYWNlLWF1dG9jb21wbGV0ZS1iYXNlIjp7cmVxdWlyZXM6WyJhdWktYWNlLWVkaXRvciJdfSwiYXVpLWFjZS1hdXRvY29tcGxldGUtZnJlZW1hcmtlciI6e3JlcXVpcmVzOlsiYXVpLWFjZS1hdXRvY29tcGxldGUtdGVtcGxhdGVwcm9jZXNzb3IiXX0sImF1aS1hY2UtYXV0b2NvbXBsZXRlLWxpc3QiOntyZXF1aXJlczpbImF1aS1hY2UtYXV0b2NvbXBsZXRlLWJhc2UiLCJvdmVybGF5Iiwid2lkZ2V0LWF1dG9oaWRlIl0sCnNraW5uYWJsZTohMH0sImF1aS1hY2UtYXV0b2NvbXBsZXRlLXBsdWdpbiI6e3JlcXVpcmVzOlsiYXVpLWFjZS1hdXRvY29tcGxldGUtbGlzdCIsInBsdWdpbiJdfSwiYXVpLWFjZS1hdXRvY29tcGxldGUtdGVtcGxhdGVwcm9jZXNzb3IiOntyZXF1aXJlczpbImF1aS1hY2UtYXV0b2NvbXBsZXRlLWJhc2UiXX0sImF1aS1hY2UtYXV0b2NvbXBsZXRlLXZlbG9jaXR5Ijp7cmVxdWlyZXM6WyJhdWktYWNlLWF1dG9jb21wbGV0ZS10ZW1wbGF0ZXByb2Nlc3NvciJdfSwiYXVpLWFjZS1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1ub2RlIiwiYXVpLWNvbXBvbmVudCJdfSwiYXVpLWFmZml4Ijp7cmVxdWlyZXM6WyJiYXNlIiwibm9kZS1zY3JlZW4iLCJhdWktbm9kZSJdfSwiYXVpLWFsZXJ0Ijp7cmVxdWlyZXM6InRpbWVycyB3aWRnZXQgd2lkZ2V0LXN0ZG1vZCBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdHJhbnNpdGlvbiIuc3BsaXQoIiAiKSwKc2tpbm5hYmxlOiEwfSwiYXVpLWFyaWEiOntyZXF1aXJlczpbInBsdWdpbiIsImF1aS1jb21wb25lbnQiXX0sImF1aS1hcmlhLXRhYmxlLXNvcnRhYmxlIjp7cmVxdWlyZXM6WyJhdWktYXJpYSJdfSwiYXVpLWFycmF5c29ydCI6e3JlcXVpcmVzOlsiYXJyYXlzb3J0Il19LCJhdWktYXVkaW8iOntyZXF1aXJlczpbImF1aS1hcmlhIiwiYXVpLW5vZGUiLCJhdWktY29tcG9uZW50IiwicXVlcnlzdHJpbmctc3RyaW5naWZ5LXNpbXBsZSJdLHNraW5uYWJsZTohMH0sImF1aS1hdXRvY29tcGxldGUtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LWJhc2UtZGVwcmVjYXRlZCIsImRhdGFzb3VyY2UiLCJkYXRhc2NoZW1hIiwiYXVpLWZvcm0tY29tYm9ib3gtZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1hdXRvc2l6ZSI6e3VzZTpbImF1aS1hdXRvc2l6ZS1pZnJhbWUiXX0sImF1aS1hdXRvc2l6ZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJldmVudC12YWx1ZWNoYW5nZSIsCiJwbHVnaW4iLCJhdWktYmFzZS1kZXByZWNhdGVkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWF1dG9zaXplLWlmcmFtZSI6e3JlcXVpcmVzOlsicGx1Z2luIiwiYXVpLWNvbXBvbmVudCIsImF1aS10aW1lciIsImF1aS1ub2RlLWJhc2UiXX0sImF1aS1iYXNlIjp7dXNlOiJvb3AgeXVpLXRocm90dGxlIGF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS1kZWJvdW5jZSBhdWktYmFzZS1jb3JlIGF1aS1iYXNlLWxhbmcgYXVpLW5vZGUtYmFzZSIuc3BsaXQoIiAiKX0sImF1aS1iYXNlLWNvcmUiOnt9LCJhdWktYmFzZS1kZXByZWNhdGVkIjp7dXNlOiJhdWktYmFzZSBhdWktbm9kZSBhdWktY29tcG9uZW50IGF1aS1kZWxheWVkLXRhc2stZGVwcmVjYXRlZCBhdWktc2VsZWN0b3IgYXVpLWV2ZW50LWJhc2UiLnNwbGl0KCIgIil9LCJhdWktYmFzZS1odG1sNS1zaGl2Ijp7Y29uZGl0aW9uOntuYW1lOiJhdWktYmFzZS1odG1sNS1zaGl2Iix0cmlnZ2VyOiJub2RlLWJhc2UiLHVhOiJpZSJ9fSwiYXVpLWJhc2UtbGFuZyI6e30sCiJhdWktYm9vbGVhbi1kYXRhLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWJ1dHRvbi1zd2l0Y2giLCJhdWktZGF0YS1lZGl0b3IiXX0sImF1aS1idXR0b24iOnt1c2U6WyJhdWktYnV0dG9uLWNvcmUiXX0sImF1aS1idXR0b24tY29yZSI6e3JlcXVpcmVzOiJidXR0b24gYnV0dG9uLWdyb3VwIGJ1dHRvbi1wbHVnaW4gYXVpLWNvbXBvbmVudCBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1idXR0b24taXRlbS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktYmFzZS1kZXByZWNhdGVkIiwiYXVpLXN0YXRlLWludGVyYWN0aW9uLWRlcHJlY2F0ZWQiLCJ3aWRnZXQtY2hpbGQiXSxza2lubmFibGU6ITB9LCJhdWktYnV0dG9uLXNlYXJjaC1jYW5jZWwiOntyZXF1aXJlczoiYXJyYXktaW52b2tlIGJhc2UgYmFzZS1idWlsZCBldmVudC1mb2N1cyBldmVudC1tb3ZlIGV2ZW50LXJlc2l6ZSBub2RlLXNjcmVlbiBub2RlLWV2ZW50LWRlbGVnYXRlIGF1aS1ub2RlLWJhc2UgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLWV2ZW50LWlucHV0Ii5zcGxpdCgiICIpfSwKImF1aS1idXR0b24tc3dpdGNoIjp7cmVxdWlyZXM6WyJhdWktbm9kZS1iYXNlIiwiYmFzZS1idWlsZCIsImV2ZW50LWtleSIsInRyYW5zaXRpb24iLCJ3aWRnZXQiXSxza2lubmFibGU6ITB9LCJhdWktY2Fyb3VzZWwiOntyZXF1aXJlczoiYW5pbSBhdWktZXZlbnQgYXVpLWltYWdlLXZpZXdlci1iYXNlIGF1aS1pbWFnZS12aWV3ZXItc2xpZGVzaG93IG5vZGUtZXZlbnQtZGVsZWdhdGUgbm9kZS1mb2N1c21hbmFnZXIiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWNhcm91c2VsLW1vYmlsZS10b3VjaCI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWNhcm91c2VsLW1vYmlsZS10b3VjaCIsdGVzdDpmdW5jdGlvbihxKXtyZXR1cm4gcS5VQS5tb2JpbGUmJnEuVUEudG91Y2hFbmFibGVkfSx0cmlnZ2VyOiJhdWktY2Fyb3VzZWwifSxyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJhdWktY2Fyb3VzZWwiXX0sImF1aS1jYXJvdXNlbC1zd2lwZSI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWNhcm91c2VsLXN3aXBlIiwKdHJpZ2dlcjoiYXVpLWNhcm91c2VsIix1YToidG91Y2hFbmFibGVkIn0scmVxdWlyZXM6WyJhdWktY2Fyb3VzZWwiLCJhdWktd2lkZ2V0LXN3aXBlIiwiYmFzZS1idWlsZCJdLHNraW5uYWJsZTohMH0sImF1aS1jaGFyLWNvdW50ZXIiOntyZXF1aXJlczpbImF1aS1hcmlhIiwiYXVpLW5vZGUiLCJhdWktZXZlbnQtaW5wdXQiLCJhdWktY29tcG9uZW50Il19LCJhdWktY2hhcnQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiZGF0YXNvdXJjZSIsImpzb24iLCJhdWktc3dmLWRlcHJlY2F0ZWQiXX0sImF1aS1jbGFzc25hbWVtYW5hZ2VyIjp7cmVxdWlyZXM6WyJjbGFzc25hbWVtYW5hZ2VyIl19LCJhdWktY29sbGVjdGlvbiI6e3VzZTpbImF1aS1tYXAiLCJhdWktc2V0IiwiYXVpLWxpbmtlZHNldCJdfSwiYXVpLWNvbG9yLXBhbGV0dGUiOntyZXF1aXJlczoiYXJyYXktZXh0cmFzIGF1aS1wYWxldHRlIGNvbG9yLWJhc2Ugbm9kZS1jb3JlIGF1aS13aWRnZXQtY3NzY2xhc3MgYXVpLXdpZGdldC10b2dnbGUiLnNwbGl0KCIgIiksCnNraW5uYWJsZTohMH0sImF1aS1jb2xvci1waWNrZXItYmFzZSI6e3JlcXVpcmVzOlsiYXVpLWNvbG9yLXBhbGV0dGUiLCJhdWktaHN2YS1wYWxldHRlLW1vZGFsIiwiZXZlbnQtb3V0c2lkZSJdLHNraW5uYWJsZTohMH0sImF1aS1jb2xvci1waWNrZXItYmFzZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6ImRkLWRyYWcgcGFuZWwgc2xpZGVyIGF1aS1idXR0b24taXRlbS1kZXByZWNhdGVkIGF1aS1jb2xvci11dGlsLWRlcHJlY2F0ZWQgYXVpLWZvcm0tYmFzZS1kZXByZWNhdGVkIGF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktY29sb3ItcGlja2VyLWRlcHJlY2F0ZWQiOnt1c2U6WyJhdWktY29sb3ItcGlja2VyLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1jb2xvci1waWNrZXItZ3JpZC1wbHVnaW4tZGVwcmVjYXRlZCJdfSwiYXVpLWNvbG9yLXBpY2tlci1ncmlkLXBsdWdpbi1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJwbHVnaW4iLAoiYXVpLWNvbG9yLXBpY2tlci1iYXNlLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktY29sb3ItcGlja2VyLXBvcG92ZXIiOntyZXF1aXJlczpbImF1aS1jb2xvci1waWNrZXItYmFzZSIsImF1aS1wb3BvdmVyIiwiYXVpLXdpZGdldC1jc3NjbGFzcyIsImF1aS13aWRnZXQtdG9nZ2xlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWNvbG9yLXV0aWwtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOltdfSwiYXVpLWNvbXBvbmVudCI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktd2lkZ2V0LWNzc2NsYXNzIiwiYXVpLXdpZGdldC10b2dnbGUiLCJiYXNlLWJ1aWxkIiwid2lkZ2V0LWJhc2UiXX0sImF1aS1jc3MiOnt0eXBlOiJjc3MifSwiYXVpLWRhdGEtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImJhc2UtYnVpbGQiLCJub2RlLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktZGF0YS1zZXQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsib29wIiwKImNvbGxlY3Rpb24iLCJiYXNlIl19LCJhdWktZGF0YXNvdXJjZS1jb250cm9sLWJhc2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiZGF0YXNvdXJjZSIsImRhdGFzY2hlbWEiLCJhdWktYmFzZS1kZXByZWNhdGVkIl19LCJhdWktZGF0YXNvdXJjZS1jb250cm9sLWRlcHJlY2F0ZWQiOnt1c2U6WyJhdWktZGF0YXNvdXJjZS1jb250cm9sLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1pbnB1dC10ZXh0LWNvbnRyb2wtZGVwcmVjYXRlZCJdfSwiYXVpLWRhdGF0YWJsZSI6e3VzZTpbImF1aS1kYXRhdGFibGUtZWRpdCIsImF1aS1kYXRhdGFibGUtaGlnaGxpZ2h0IiwiYXVpLWRhdGF0YWJsZS1zZWxlY3Rpb24iLCJhdWktZGF0YXRhYmxlLXByb3BlcnR5LWxpc3QiXX0sImF1aS1kYXRhdGFibGUtYmFzZS1jZWxsLWVkaXRvciI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWJhc2UiLCJvdmVybGF5Il0sc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGF0YWJsZS1iYXNlLW9wdGlvbnMtY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1jZWxsLWVkaXRvciIsCiJlc2NhcGUiXSxza2lubmFibGU6ITB9LCJhdWktZGF0YXRhYmxlLWJvZHkiOntyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiZGF0YXRhYmxlLWJhc2UiLCJldmVudC1rZXkiLCJhdWktZXZlbnQtYmFzZSJdfSwiYXVpLWRhdGF0YWJsZS1jZWxsLWVkaXRvci1zdXBwb3J0Ijp7cmVxdWlyZXM6WyJkYXRhdGFibGUtYmFzZSJdfSwiYXVpLWRhdGF0YWJsZS1jaGVja2JveC1jZWxsLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1iYXNlLW9wdGlvbnMtY2VsbC1lZGl0b3IiXX0sImF1aS1kYXRhdGFibGUtY29yZSI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1ib2R5IiwiZGF0YXRhYmxlLWJhc2UiLCJldmVudC1rZXkiLCJhdWktZXZlbnQtYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1kYXRhdGFibGUtZGF0ZS1jZWxsLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1iYXNlLW9wdGlvbnMtY2VsbC1lZGl0b3IiXX0sImF1aS1kYXRhdGFibGUtZHJvcGRvd24tY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIl19LAoiYXVpLWRhdGF0YWJsZS1lZGl0Ijp7dXNlOiJkYXRhdGFibGUtYmFzZSBjYWxlbmRhciBvdmVybGF5IHNvcnRhYmxlIGF1aS1kYXRhdHlwZSBhdWktdG9vbGJhciBhdWktZm9ybS12YWxpZGF0b3IgYXVpLWRhdGF0YWJsZS1iYXNlLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtY2VsbC1lZGl0b3Itc3VwcG9ydCBhdWktZGF0YXRhYmxlLWNvcmUgYXVpLWRhdGF0YWJsZS1jaGVja2JveC1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLWRhdGUtY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS1kcm9wZG93bi1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLXJhZGlvLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtdGV4dC1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLXRleHQtYXJlYS1jZWxsLWVkaXRvciIuc3BsaXQoIiAiKX0sImF1aS1kYXRhdGFibGUtaGlnaGxpZ2h0Ijp7cmVxdWlyZXM6WyJhdWktZGF0YXRhYmxlLXNlbGVjdGlvbiJdLApza2lubmFibGU6ITB9LCJhdWktZGF0YXRhYmxlLXByb3BlcnR5LWxpc3QiOntyZXF1aXJlczoiZGF0YXRhYmxlLXNjcm9sbCBkYXRhdGFibGUtc29ydCBhdWktZGF0YXRhYmxlLWNvcmUgYXVpLWRhdGF0YWJsZS1lZGl0IGF1aS1kYXRhdGFibGUtaGlnaGxpZ2h0IGF1aS1kYXRhdGFibGUtc2VsZWN0aW9uIGF1aS13aWRnZXQtY3NzY2xhc3MgYXVpLXdpZGdldC10b2dnbGUiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGF0YWJsZS1yYWRpby1jZWxsLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1iYXNlLW9wdGlvbnMtY2VsbC1lZGl0b3IiXX0sImF1aS1kYXRhdGFibGUtc2VsZWN0aW9uIjp7cmVxdWlyZXM6WyJhdWktZGF0YXRhYmxlLWNvcmUiXSxza2lubmFibGU6ITB9LCJhdWktZGF0YXRhYmxlLXRleHQtYXJlYS1jZWxsLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1iYXNlLW9wdGlvbnMtY2VsbC1lZGl0b3IiXX0sImF1aS1kYXRhdGFibGUtdGV4dC1jZWxsLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1iYXNlLW9wdGlvbnMtY2VsbC1lZGl0b3IiXX0sCiJhdWktZGF0YXR5cGUiOntyZXF1aXJlczpbImRhdGF0eXBlIiwiYXVpLWRhdGF0eXBlLWRhdGUtcGFyc2UiXX0sImF1aS1kYXRhdHlwZS1kYXRlLXBhcnNlIjp7cmVxdWlyZXM6WyJhdWktYmFzZS1sYW5nIiwiZGF0YXR5cGUtZGF0ZS1mb3JtYXQiLCJkYXRhdHlwZS1kYXRlLXBhcnNlIiwiaW50bCJdfSwiYXVpLWRhdGVwaWNrZXIiOntyZXF1aXJlczoiYXVpLWFyaWEgYXVpLWRhdGVwaWNrZXItZGVsZWdhdGUgYXVpLWRhdGVwaWNrZXItcG9wb3ZlciBiYXNlIGJhc2UtYnVpbGQgY2FsZW5kYXIiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGVwaWNrZXItYmFzZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJjYWxlbmRhciIsImF1aS1kYXRhdHlwZSIsImF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1kYXRlcGlja2VyLWRlbGVnYXRlIjp7cmVxdWlyZXM6WyJhdWktZGF0YXR5cGUtZGF0ZS1wYXJzZSIsImF1aS1ldmVudC1pbnB1dCIsCiJldmVudC1mb2N1cyIsIm5vZGUtZXZlbnQtZGVsZWdhdGUiXX0sImF1aS1kYXRlcGlja2VyLWRlcHJlY2F0ZWQiOntza2lubmFibGU6ITAsdXNlOlsiYXVpLWRhdGVwaWNrZXItYmFzZS1kZXByZWNhdGVkIiwiYXVpLWRhdGVwaWNrZXItc2VsZWN0LWRlcHJlY2F0ZWQiXX0sImF1aS1kYXRlcGlja2VyLW5hdGl2ZSI6e3JlcXVpcmVzOlsiYXVpLWRhdGVwaWNrZXItZGVsZWdhdGUiLCJhdWktbm9kZS1iYXNlIiwiYmFzZSIsImJhc2UtYnVpbGQiXX0sImF1aS1kYXRlcGlja2VyLXBvcG92ZXIiOntyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiYXVpLXBvcG92ZXIiXX0sImF1aS1kYXRlcGlja2VyLXNlbGVjdC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZGF0ZXBpY2tlci1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktYnV0dG9uLWl0ZW0tZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1kZWJvdW5jZSI6e30sImF1aS1kZWxheWVkLXRhc2stZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsieXVpLWJhc2UiXX0sCiJhdWktZGlhZ3JhbS1idWlsZGVyIjp7cmVxdWlyZXM6ImF1aS1hcmlhIGF1aS1tYXAgYXVpLXByb3BlcnR5LWJ1aWxkZXIgYXVpLWRpYWdyYW0tYnVpbGRlci1jb25uZWN0b3IgYXVpLXByb3BlcnR5LWJ1aWxkZXItc2V0dGluZ3MgYXVpLWRpYWdyYW0tbm9kZS1jb25kaXRpb24gYXVpLWRpYWdyYW0tbm9kZS1lbmQgYXVpLWRpYWdyYW0tbm9kZS1mb3JrIGF1aS1kaWFncmFtLW5vZGUtam9pbiBhdWktZGlhZ3JhbS1ub2RlLXN0YXJ0IGF1aS1kaWFncmFtLW5vZGUtc3RhdGUgYXVpLWRpYWdyYW0tbm9kZS10YXNrIG92ZXJsYXkiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWRpYWdyYW0tYnVpbGRlci1jb25uZWN0b3IiOntyZXF1aXJlczoiYXJyYXlsaXN0LWFkZCBhcnJheWxpc3QtZmlsdGVyIGVzY2FwZSBqc29uIGdyYXBoaWNzIGRkIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1kaWFncmFtLW5vZGUiOntyZXF1aXJlczpbImF1aS1hcmlhIiwiYXVpLWRpYWdyYW0tbm9kZS1tYW5hZ2VyLWJhc2UiLAoiZXNjYXBlIiwib3ZlcmxheSJdfSwiYXVpLWRpYWdyYW0tbm9kZS1jb25kaXRpb24iOntyZXF1aXJlczpbImF1aS1kaWFncmFtLW5vZGUtc3RhdGUiXX0sImF1aS1kaWFncmFtLW5vZGUtZW5kIjp7cmVxdWlyZXM6WyJhdWktZGlhZ3JhbS1ub2RlLXN0YXRlIl19LCJhdWktZGlhZ3JhbS1ub2RlLWZvcmsiOntyZXF1aXJlczpbImF1aS1kaWFncmFtLW5vZGUtc3RhdGUiXX0sImF1aS1kaWFncmFtLW5vZGUtam9pbiI6e3JlcXVpcmVzOlsiYXVpLWRpYWdyYW0tbm9kZS1zdGF0ZSJdfSwiYXVpLWRpYWdyYW0tbm9kZS1tYW5hZ2VyLWJhc2UiOntyZXF1aXJlczpbImJhc2UiXX0sImF1aS1kaWFncmFtLW5vZGUtc3RhcnQiOntyZXF1aXJlczpbImF1aS1kaWFncmFtLW5vZGUtc3RhdGUiXX0sImF1aS1kaWFncmFtLW5vZGUtc3RhdGUiOntyZXF1aXJlczpbImF1aS1kaWFncmFtLW5vZGUiXX0sImF1aS1kaWFncmFtLW5vZGUtdGFzayI6e3JlcXVpcmVzOlsiYXVpLWRpYWdyYW0tbm9kZS1zdGF0ZSJdfSwKImF1aS1kaWFsb2ctaWZyYW1lLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbInBsdWdpbiIsImFycmF5LWludm9rZSIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktbG9hZGluZy1tYXNrLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktZHJvcGRvd24iOntyZXF1aXJlczoiZXZlbnQtZGVsZWdhdGUgZXZlbnQta2V5IGV2ZW50LW91dHNpZGUgbm9kZS1mb2N1c21hbmFnZXIgd2lkZ2V0IHdpZGdldC1zdGFjayBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktbm9kZSBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIGF1aS13aWRnZXQtdHJpZ2dlciIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktZWRpdGFibGUtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1mb3JtLWNvbWJvYm94LWRlcHJlY2F0ZWQiLCJlc2NhcGUiLCJldmVudC1yZXNpemUiXSxza2lubmFibGU6ITB9LCJhdWktZXZlbnQiOnt1c2U6WyJhdWktZXZlbnQtYmFzZSJdfSwKImF1aS1ldmVudC1iYXNlIjp7cmVxdWlyZXM6WyJldmVudC1iYXNlIl19LCJhdWktZXZlbnQtZGVsZWdhdGUtY2hhbmdlIjp7Y29uZGl0aW9uOntuYW1lOiJhdWktZXZlbnQtZGVsZWdhdGUtY2hhbmdlIix0cmlnZ2VyOiJldmVudC1iYXNlLWllIix1YToiaWUifSxyZXF1aXJlczpbImF1aS1ldmVudC1iYXNlIiwiZXZlbnQtZGVsZWdhdGUiLCJldmVudC1zeW50aGV0aWMiXX0sImF1aS1ldmVudC1kZWxlZ2F0ZS1zdWJtaXQiOntjb25kaXRpb246e25hbWU6ImF1aS1ldmVudC1kZWxlZ2F0ZS1zdWJtaXQiLHRyaWdnZXI6ImV2ZW50LWJhc2UtaWUiLHVhOiJpZSJ9LHJlcXVpcmVzOlsiYXVpLWV2ZW50LWJhc2UiLCJldmVudC1kZWxlZ2F0ZSIsImV2ZW50LXN5bnRoZXRpYyJdfSwiYXVpLWV2ZW50LWlucHV0Ijp7Y29uZGl0aW9uOntuYW1lOiJhdWktZXZlbnQtaW5wdXQiLHRlc3Q6ZnVuY3Rpb24ocSl7dmFyIHQ9cS5zdXBwb3J0c0RPTUV2ZW50LGY9cS5GZWF0dXJlcy50ZXN0LGQ9cS5GZWF0dXJlcy5hZGQ7CnZvaWQgMD09PWYoImV2ZW50IiwiaW5wdXQiKSYmZCgiZXZlbnQiLCJpbnB1dCIse3Rlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLCJpbnB1dCIpJiYoIXEuVUEuaWV8fDk8cS5VQS5pZSl9fSk7cmV0dXJuIWYoImV2ZW50IiwiaW5wdXQiKX0sdHJpZ2dlcjoiYXVpLWV2ZW50LWJhc2UifSxyZXF1aXJlczpbImF1aS1ldmVudC1iYXNlIiwiZXZlbnQtZGVsZWdhdGUiLCJldmVudC1zeW50aGV0aWMiLCJ0aW1lcnMiXX0sImF1aS1mb3JtLWJhc2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiaW8tZm9ybSIsInF1ZXJ5c3RyaW5nLXBhcnNlIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1kYXRhLXNldC1kZXByZWNhdGVkIiwiYXVpLWZvcm0tZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tYnVpbGRlciI6e3JlcXVpcmVzOiJhdWktbW9kYWwgYXVpLWxheW91dCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLWxpc3QgYXVpLWZvcm0tYnVpbGRlci1maWVsZC10b29sYmFyIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdHlwZSBhdWktZm9ybS1idWlsZGVyLWZpZWxkLXR5cGVzIGF1aS1mb3JtLWJ1aWxkZXItbGF5b3V0LWJ1aWxkZXIgYXVpLWZvcm0tYnVpbGRlci1wYWdlLW1hbmFnZXIgYXVpLWZvcm0tYnVpbGRlci1zZXR0aW5ncy1tb2RhbCBldmVudC1mb2N1cyBldmVudC10YXAiLnNwbGl0KCIgIiksCnNraW5uYWJsZTohMH0sImF1aS1mb3JtLWJ1aWxkZXItYXZhaWxhYmxlLWZpZWxkLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1wcm9wZXJ0eS1idWlsZGVyLWF2YWlsYWJsZS1maWVsZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1kZXByZWNhdGVkIjp7cmVxdWlyZXM6ImF1aS1idXR0b24gYXVpLWNvbGxlY3Rpb24gYXVpLWZvcm0tYnVpbGRlci1hdmFpbGFibGUtZmllbGQtZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1idXR0b24tZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLWNoZWNrYm94LWRlcHJlY2F0ZWQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1maWVsZHNldC1kZXByZWNhdGVkIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZmlsZS11cGxvYWQtZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLW11bHRpcGxlLWNob2ljZS1kZXByZWNhdGVkIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtcmFkaW8tZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLXNlbGVjdC1kZXByZWNhdGVkIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdGV4dC1kZXByZWNhdGVkIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdGV4dGFyZWEtZGVwcmVjYXRlZCBhdWktcHJvcGVydHktYnVpbGRlciBhdWktcHJvcGVydHktYnVpbGRlci1zZXR0aW5ncyBhdWktc29ydGFibGUtbGlzdCBhdWktdGFidmlldyBhdWktdG9vbHRpcC1iYXNlIGVzY2FwZSB0cmFuc2l0aW9uIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWJhc2UiOntyZXF1aXJlczoiYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLW5vZGUtYmFzZSBhdWktdGV4dC1kYXRhLWVkaXRvciBhdWktdG9nZ2xlciBiYXNlIG5vZGUtYmFzZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWJ1dHRvbi1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtY2hlY2tib3gtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIl19LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWNob2ljZSI6e3JlcXVpcmVzOlsiYXVpLWJvb2xlYW4tZGF0YS1lZGl0b3IiLCJhdWktb3B0aW9ucy1kYXRhLWVkaXRvciIsImF1aS10YWJzLWRhdGEtZWRpdG9yIiwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1iYXNlIiwiYXVpLWZvcm0tZmllbGQtY2hvaWNlIl19LAoiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJwYW5lbCIsImF1aS1kYXRhdHlwZSIsImF1aS1kYXRhdGFibGUtZWRpdCIsImF1aS1wcm9wZXJ0eS1idWlsZGVyLWZpZWxkLXN1cHBvcnQiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWZpZWxkc2V0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1maWxlLXVwbG9hZC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtbGlzdCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10eXBlIiwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10eXBlcyIsImF1aS1mb3JtLWJ1aWxkZXItbGF5b3V0LWJ1aWxkZXIiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLW11bHRpcGxlLWNob2ljZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sCiJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXJhZGlvLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1zZWxlY3QtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIl19LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXNlbnRlbmNlIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWJhc2UiLCJhdWktZm9ybS1maWVsZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10ZXh0Ijp7cmVxdWlyZXM6WyJhdWktYm9vbGVhbi1kYXRhLWVkaXRvciIsImF1aS1yYWRpby1ncm91cC1kYXRhLWVkaXRvciIsImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtYmFzZSIsImF1aS1mb3JtLWZpZWxkLXRleHQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdGV4dC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sCiJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXRleHRhcmVhLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10b29sYmFyIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImJhc2UiLCJub2RlLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXR5cGUiOntyZXF1aXJlczpbImJhc2UiLCJub2RlLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXR5cGVzIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdHlwZXMtbW9kYWwiLCJiYXNlIiwibm9kZS1iYXNlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10eXBlcy1tb2RhbCI6e3JlcXVpcmVzOlsiYXVpLW1vZGFsIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1sYXlvdXQtYnVpbGRlciI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLAoiYXVpLWxheW91dC1idWlsZGVyIiwiYXVpLW1vZGFsIiwiYmFzZSIsIm5vZGUtYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWJ1aWxkZXItcGFnZS1tYW5hZ2VyIjp7cmVxdWlyZXM6ImF1aS1wYWdpbmF0aW9uIGF1aS1wb3BvdmVyIGF1aS10YWJ2aWV3IGJhc2UgZXZlbnQtdmFsdWVjaGFuZ2Ugbm9kZS1iYXNlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWJ1aWxkZXItc2V0dGluZ3MtbW9kYWwiOntyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiYXVpLW1vZGFsIiwiYmFzZSIsIm5vZGUtYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWNvbWJvYm94LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLXRleHRhcmVhLWRlcHJlY2F0ZWQiLCJhdWktdG9vbGJhciJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWRlcHJlY2F0ZWQiOnt1c2U6ImF1aS1mb3JtLWJhc2UtZGVwcmVjYXRlZCBhdWktZm9ybS1jb21ib2JveC1kZXByZWNhdGVkIGF1aS1mb3JtLWZpZWxkLWRlcHJlY2F0ZWQgYXVpLWZvcm0tc2VsZWN0LWRlcHJlY2F0ZWQgYXVpLWZvcm0tdGV4dGFyZWEtZGVwcmVjYXRlZCBhdWktZm9ybS10ZXh0ZmllbGQtZGVwcmVjYXRlZCIuc3BsaXQoIiAiKX0sCiJhdWktZm9ybS1maWVsZCI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktbm9kZS1iYXNlIiwiYmFzZS1idWlsZCJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWZpZWxkLWNob2ljZSI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tZmllbGQtcmVxdWlyZWQiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1maWVsZC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktYmFzZS1kZXByZWNhdGVkIiwiYXVpLWNvbXBvbmVudCJdfSwiYXVpLWZvcm0tZmllbGQtcmVxdWlyZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWZpZWxkIl19LCJhdWktZm9ybS1maWVsZC10ZXh0Ijp7cmVxdWlyZXM6WyJhdWktZm9ybS1maWVsZC1yZXF1aXJlZCJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLXNlbGVjdC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1maWVsZC1kZXByZWNhdGVkIl19LCJhdWktZm9ybS10ZXh0YXJlYS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJub2RlLXBsdWdpbmhvc3QiLAoiYXVpLWF1dG9zaXplLWRlcHJlY2F0ZWQiLCJhdWktZm9ybS10ZXh0ZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tdGV4dGZpZWxkLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLXZhbGlkYXRvciI6e3JlcXVpcmVzOiJlc2NhcGUgc2VsZWN0b3ItY3NzMyBub2RlLWV2ZW50LWRlbGVnYXRlIGF1aS1ub2RlIGF1aS1jb21wb25lbnQgYXVpLWV2ZW50LWlucHV0Ii5zcGxpdCgiICIpfSwiYXVpLWhzdi1wYWxldHRlIjp7cmVxdWlyZXM6ImF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS13aWRnZXQtY3NzY2xhc3MgYXVpLXdpZGdldC10b2dnbGUgYXVpLWV2ZW50LWlucHV0IGJhc2UtYnVpbGQgY2xpY2thYmxlLXJhaWwgY29sb3ItaHN2IGRkLWNvbnN0cmFpbiBzbGlkZXIgd2lkZ2V0Ii5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1oc3ZhLXBhbGV0dGUiOntyZXF1aXJlczpbImF1aS1oc3YtcGFsZXR0ZSJdLHNraW5uYWJsZTohMH0sCiJhdWktaHN2YS1wYWxldHRlLW1vZGFsIjp7cmVxdWlyZXM6WyJhdWktaHN2YS1wYWxldHRlIiwiYXVpLW1vZGFsIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWltYWdlLWNyb3BwZXIiOntyZXF1aXJlczpbInJlc2l6ZS1iYXNlIiwicmVzaXplLWNvbnN0cmFpbiIsImRkLWNvbnN0cmFpbiIsImF1aS1ub2RlLWJhc2UiLCJhdWktY29tcG9uZW50Il0sc2tpbm5hYmxlOiEwfSwiYXVpLWltYWdlLXZpZXdlciI6e3JlcXVpcmVzOiJ3aWRnZXQgd2lkZ2V0LW1vZGFsaXR5IHdpZGdldC1wb3NpdGlvbiB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiB3aWRnZXQtc3RhY2sgd2lkZ2V0LXN0ZG1vZCBhdWktZXZlbnQgYXVpLWltYWdlLXZpZXdlci1iYXNlIGF1aS1pbWFnZS12aWV3ZXItbXVsdGlwbGUgYXVpLWltYWdlLXZpZXdlci1zbGlkZXNob3cgYXVpLW5vZGUtYmFzZSBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LCJhdWktaW1hZ2Utdmlld2VyLWJhc2UiOntyZXF1aXJlczoiYW5pbSBhdWktYXJpYSBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktbm9kZSBhdWktd2lkZ2V0LXJlc3BvbnNpdmUgYmFzZS1idWlsZCBpbWFnZWxvYWRlciBub2RlLWJhc2Ugd2lkZ2V0IHdpZGdldC1zdGFjayIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktaW1hZ2Utdmlld2VyLW1lZGlhIjp7cmVxdWlyZXM6WyJwbHVnaW4iLCJhdWktY29tcG9uZW50IiwiYXVpLWltYWdlLXZpZXdlciJdfSwiYXVpLWltYWdlLXZpZXdlci1tdWx0aXBsZSI6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsIm5vZGUtYmFzZSIsImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiYXVpLWltYWdlLXZpZXdlci1iYXNlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWltYWdlLXZpZXdlci1tdWx0aXBsZS1zd2lwZSI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWltYWdlLXZpZXdlci1tdWx0aXBsZS1zd2lwZSIsdHJpZ2dlcjoiYXVpLWltYWdlLXZpZXdlci1tdWx0aXBsZSIsCnVhOiJ0b3VjaEVuYWJsZWQifSxyZXF1aXJlczpbImF1aS1pbWFnZS12aWV3ZXItbXVsdGlwbGUiLCJhdWktaW1hZ2Utdmlld2VyLXN3aXBlIl19LCJhdWktaW1hZ2Utdmlld2VyLXNsaWRlc2hvdyI6e3JlcXVpcmVzOlsibm9kZSIsImF1aS1jbGFzc25hbWVtYW5hZ2VyIl19LCJhdWktaW1hZ2Utdmlld2VyLXN3aXBlIjp7Y29uZGl0aW9uOntuYW1lOiJhdWktaW1hZ2Utdmlld2VyLXN3aXBlIix0cmlnZ2VyOiJhdWktaW1hZ2Utdmlld2VyLWJhc2UiLHVhOiJ0b3VjaEVuYWJsZWQifSxyZXF1aXJlczpbImV2ZW50LXJlc2l6ZSIsImF1aS1pbWFnZS12aWV3ZXItYmFzZSIsImF1aS13aWRnZXQtc3dpcGUiXX0sImF1aS1pbnB1dC10ZXh0LWNvbnRyb2wtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1kYXRhc291cmNlLWNvbnRyb2wtYmFzZS1kZXByZWNhdGVkIiwiYXVpLWZvcm0tY29tYm9ib3gtZGVwcmVjYXRlZCJdfSwiYXVpLWlvIjp7dXNlOlsiYXVpLWlvLXJlcXVlc3QiXX0sCiJhdWktaW8tZGVwcmVjYXRlZCI6e3VzZTpbImF1aS1pby1yZXF1ZXN0IiwiYXVpLWlvLXBsdWdpbi1kZXByZWNhdGVkIl19LCJhdWktaW8tcGx1Z2luLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1vdmVybGF5LWJhc2UtZGVwcmVjYXRlZCIsImF1aS1wYXJzZS1jb250ZW50IiwiYXVpLWlvLXJlcXVlc3QiLCJhdWktbG9hZGluZy1tYXNrLWRlcHJlY2F0ZWQiXX0sImF1aS1pby1yZXF1ZXN0Ijp7cmVxdWlyZXM6WyJpby1iYXNlIiwianNvbiIsInBsdWdpbiIsInF1ZXJ5c3RyaW5nLXN0cmluZ2lmeSIsImF1aS1jb21wb25lbnQiXX0sImF1aS1pby1yZXF1ZXN0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImlvLWJhc2UiLCJqc29uIiwicGx1Z2luIiwicXVlcnlzdHJpbmctc3RyaW5naWZ5IiwiYXVpLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLWxheW91dCI6e3JlcXVpcmVzOiJhdWktbGF5b3V0LWNvbCBhdWktbGF5b3V0LXJvdyBhdWktbm9kZS1iYXNlIGJhc2UtYnVpbGQgZGF0YXR5cGUtbnVtYmVyLXBhcnNlIGV2ZW50LXJlc2l6ZSIuc3BsaXQoIiAiKX0sCiJhdWktbGF5b3V0LWJ1aWxkZXIiOntyZXF1aXJlczoiYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLWxheW91dCBhdWktbGF5b3V0LWJ1aWxkZXItYWRkLWNvbCBhdWktbGF5b3V0LWJ1aWxkZXItYWRkLXJvdyBhdWktbGF5b3V0LWJ1aWxkZXItbW92ZSBhdWktbGF5b3V0LWJ1aWxkZXItcmVtb3ZlLXJvdyBhdWktbGF5b3V0LWJ1aWxkZXItcmVzaXplLWNvbCBhdWktbm9kZS1iYXNlIGJhc2UtYnVpbGQgbm9kZS1ldmVudC1kZWxlZ2F0ZSBub2RlLXNjcmVlbiBub2RlLXN0eWxlIi5zcGxpdCgiICIpfSwiYXVpLWxheW91dC1idWlsZGVyLWFkZC1jb2wiOntyZXF1aXJlczpbImV2ZW50LWtleSIsIm5vZGUtYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1sYXlvdXQtYnVpbGRlci1hZGQtcm93Ijp7cmVxdWlyZXM6WyJhdWktbm9kZS1iYXNlIiwiYmFzZS1idWlsZCIsIm5vZGUtc2Nyb2xsLWluZm8iXSxza2lubmFibGU6ITB9LCJhdWktbGF5b3V0LWJ1aWxkZXItbW92ZSI6e3JlcXVpcmVzOlsiYXVpLW5vZGUtYmFzZSIsCiJiYXNlLWJ1aWxkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWxheW91dC1idWlsZGVyLXJlbW92ZS1yb3ciOntyZXF1aXJlczpbImF1aS1ub2RlLWJhc2UiLCJiYXNlLWJ1aWxkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWxheW91dC1idWlsZGVyLXJlc2l6ZS1jb2wiOntyZXF1aXJlczoiZGQtY29uc3RyYWluIGRkLWRlbGVnYXRlIGRkLWRyb3AtcGx1Z2luIGRkLXByb3h5IGV2ZW50LW1vdXNlZW50ZXIgbm9kZS1iYXNlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1sYXlvdXQtY29sIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1ub2RlLWJhc2UiLCJiYXNlLWJ1aWxkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWxheW91dC1yb3ciOntyZXF1aXJlczpbImFycmF5LWludm9rZSIsImF1aS1ub2RlLWJhc2UiLCJiYXNlLWJ1aWxkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWxpbmtlZHNldCI6e3JlcXVpcmVzOlsiYXVpLXNldCJdfSwiYXVpLWxpdmUtc2VhcmNoLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1iYXNlLWRlcHJlY2F0ZWQiXX0sCiJhdWktbG9hZGluZy1tYXNrLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbInBsdWdpbiIsImF1aS1vdmVybGF5LW1hc2stZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1tYXAiOntyZXF1aXJlczpbImJhc2UtYnVpbGQiXX0sImF1aS1tZW51Ijp7cmVxdWlyZXM6ImJhc2UtYnVpbGQgZXZlbnQtbW91c2VlbnRlciBldmVudC1yZXNpemUgd2lkZ2V0IHdpZGdldC1wb3NpdGlvbiB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiB3aWRnZXQtc3RhY2sgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLWRlYm91bmNlIGF1aS1kcm9wZG93biBhdWktbWVudS1pdGVtIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1tZW51LWl0ZW0iOntyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJub2RlLWJhc2UiLCJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1ub2RlIiwiYXVpLXdpZGdldC1zaG9ydGN1dCJdfSwiYXVpLW1lc3NhZ2luZyI6e3JlcXVpcmVzOlsicXVlcnlzdHJpbmciLAoiYXVpLXRpbWVyIl19LCJhdWktbW9kYWwiOntyZXF1aXJlczoid2lkZ2V0IHdpZGdldC1hdXRvaGlkZSB3aWRnZXQtYnV0dG9ucyB3aWRnZXQtbW9kYWxpdHkgd2lkZ2V0LXBvc2l0aW9uIHdpZGdldC1wb3NpdGlvbi1hbGlnbiB3aWRnZXQtcG9zaXRpb24tY29uc3RyYWluIHdpZGdldC1zdGFjayB3aWRnZXQtc3RkbW9kIGRkLXBsdWdpbiBkZC1jb25zdHJhaW4gdGltZXJzIGF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS13aWRnZXQtY3NzY2xhc3MgYXVpLXdpZGdldC10b2dnbGUgYXVpLXdpZGdldC10b29sYmFycyIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktbW9kYWwtcmVzaXplIjp7Y29uZGl0aW9uOntuYW1lOiJhdWktbW9kYWwtcmVzaXplIix0ZXN0OmZ1bmN0aW9uKHEpe3JldHVybiFxLlVBLm1vYmlsZX0sdHJpZ2dlcjoiYXVpLW1vZGFsIn0scmVxdWlyZXM6WyJhdWktbW9kYWwiLCJyZXNpemUtcGx1Z2luIl19LCJhdWktbm9kZSI6e3VzZTpbImF1aS1ub2RlLWJhc2UiXX0sCiJhdWktbm9kZS1hY2Nlc3NpYmxlIjp7cmVxdWlyZXM6WyJhdWktbm9kZS1iYXNlIiwiZXZlbnQtY3VzdG9tLWJhc2UiXX0sImF1aS1ub2RlLWJhc2UiOntyZXF1aXJlczpbImFycmF5LWV4dHJhcyIsImF1aS1iYXNlLWxhbmciLCJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1kZWJvdW5jZSIsIm5vZGUiXX0sImF1aS1ub2RlLWh0bWw1Ijp7Y29uZGl0aW9uOntuYW1lOiJhdWktbm9kZS1odG1sNSIsdHJpZ2dlcjoiYXVpLW5vZGUiLHVhOiJpZSJ9LHJlcXVpcmVzOlsiY29sbGVjdGlvbiIsImF1aS1ub2RlLWJhc2UiXX0sImF1aS1vcHRpb25zLWRhdGEtZWRpdG9yIjp7cmVxdWlyZXM6ImF1aS1kYXRhLWVkaXRvciBkZC1jb25zdHJhaW4gZGQtZGVsZWdhdGUgZGQtZHJvcC1wbHVnaW4gZGQtcHJveHkgZXZlbnQtdmFsdWVjaGFuZ2Ugbm9kZS1ldmVudC1kZWxlZ2F0ZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktb3ZlcmxheS1iYXNlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczoid2lkZ2V0LXBvc2l0aW9uIHdpZGdldC1zdGFjayB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiB3aWRnZXQtc3RkbW9kIGF1aS1jb21wb25lbnQiLnNwbGl0KCIgIil9LAoiYXVpLW92ZXJsYXktY29udGV4dC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktb3ZlcmxheS1tYW5hZ2VyLWRlcHJlY2F0ZWQiLCJhdWktZGVsYXllZC10YXNrLWRlcHJlY2F0ZWQiLCJhdWktYXJpYSJdfSwiYXVpLW92ZXJsYXktY29udGV4dC1wYW5lbC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhbmltIiwiYXVpLW92ZXJsYXktY29udGV4dC1kZXByZWNhdGVkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLW92ZXJsYXktZGVwcmVjYXRlZCI6e3VzZTpbImF1aS1vdmVybGF5LWJhc2UtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LWNvbnRleHQtcGFuZWwtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LW1hbmFnZXItZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LW1hc2stZGVwcmVjYXRlZCJdfSwiYXVpLW92ZXJsYXktbWFuYWdlci1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJvdmVybGF5IiwicGx1Z2luIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCIsCiJhdWktb3ZlcmxheS1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS1vdmVybGF5LW1hc2stZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiZXZlbnQtcmVzaXplIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LWJhc2UtZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1wYWdpbmF0aW9uIjp7cmVxdWlyZXM6WyJub2RlLWV2ZW50LWRlbGVnYXRlIiwiYXVpLW5vZGUiLCJhdWktY29tcG9uZW50Iiwid2lkZ2V0LWh0bWxwYXJzZXIiXSxza2lubmFibGU6ITB9LCJhdWktcGFsZXR0ZSI6e3JlcXVpcmVzOiJiYXNlLWJ1aWxkIGV2ZW50LWhvdmVyIHdpZGdldCBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktYmFzZSBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1wYXJzZS1jb250ZW50Ijp7cmVxdWlyZXM6WyJhc3luYy1xdWV1ZSIsInBsdWdpbiIsImlvLWJhc2UiLCJhdWktY29tcG9uZW50IiwiYXVpLW5vZGUtYmFzZSJdfSwKImF1aS1wb3BvdmVyIjp7cmVxdWlyZXM6ImV2ZW50LXJlc2l6ZSB3aWRnZXQgd2lkZ2V0LWF1dG9oaWRlIHdpZGdldC1idXR0b25zIHdpZGdldC1tb2RhbGl0eSB3aWRnZXQtcG9zaXRpb24gd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4gd2lkZ2V0LXN0YWNrIHdpZGdldC1zdGRtb2QgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLXdpZGdldC1jc3NjbGFzcyBhdWktd2lkZ2V0LXRvZ2dsZSBhdWktd2lkZ2V0LXRvb2xiYXJzIGF1aS13aWRnZXQtdHJhbnNpdGlvbiBhdWktd2lkZ2V0LXRyaWdnZXIgYXVpLXdpZGdldC1wb3NpdGlvbi1hbGlnbi1zdWdnZXN0aW9uIGF1aS1jb21wb25lbnQgYXVpLW5vZGUtYmFzZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktcHJvZ3Jlc3NiYXIiOntyZXF1aXJlczpbImF1aS1ub2RlIiwiYXVpLWNvbXBvbmVudCIsImF1aS1hcmlhIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXByb21pc2UiOntyZXF1aXJlczpbImFycmF5LWludm9rZSIsCiJwcm9taXNlIiwib29wIl19LCJhdWktcHJvcGVydHktYnVpbGRlciI6e3JlcXVpcmVzOiJkZCBjb2xsZWN0aW9uIGF1aS1wcm9wZXJ0eS1idWlsZGVyLWF2YWlsYWJsZS1maWVsZCBhdWktcHJvcGVydHktYnVpbGRlci1maWVsZC1zdXBwb3J0IGF1aS1wcm9wZXJ0eS1idWlsZGVyLXNldHRpbmdzIGF1aS10YWJ2aWV3Ii5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1wcm9wZXJ0eS1idWlsZGVyLWF2YWlsYWJsZS1maWVsZCI6e3JlcXVpcmVzOlsiYmFzZSIsImF1aS1jb21wb25lbnQiLCJhdWktbm9kZSJdfSwiYXVpLXByb3BlcnR5LWJ1aWxkZXItZmllbGQtc3VwcG9ydCI6e30sImF1aS1wcm9wZXJ0eS1idWlsZGVyLXNldHRpbmdzIjp7cmVxdWlyZXM6WyJhdWktdGFidmlldyIsImF1aS1kYXRhdGFibGUtcHJvcGVydHktbGlzdCJdfSwiYXVpLXJhZGlvLWdyb3VwLWRhdGEtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktZGF0YS1lZGl0b3IiLCJub2RlLWV2ZW50LWRlbGVnYXRlIl0sCnNraW5uYWJsZTohMH0sImF1aS1yYXRpbmciOnt1c2U6WyJhdWktcmF0aW5nLWJhc2UiLCJhdWktcmF0aW5nLXRodW1iIl19LCJhdWktcmF0aW5nLWJhc2UiOntyZXF1aXJlczpbImF1aS1jb21wb25lbnQiLCJhdWktbm9kZS1iYXNlIiwid2lkZ2V0LWh0bWxwYXJzZXIiLCJ3aWRnZXQtdWlldmVudHMiXSxza2lubmFibGU6ITB9LCJhdWktcmF0aW5nLXRodW1iIjp7cmVxdWlyZXM6WyJhdWktcmF0aW5nLWJhc2UiXX0sImF1aS1yZXNpemUtYmFzZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJkZC1kcmFnIiwiZGQtZGVsZWdhdGUiLCJkZC1kcm9wIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1yZXNpemUtY29uc3RyYWluLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImRkLWNvbnN0cmFpbiIsInBsdWdpbiIsImF1aS1yZXNpemUtYmFzZS1kZXByZWNhdGVkIl19LCJhdWktcmVzaXplLWRlcHJlY2F0ZWQiOntza2lubmFibGU6ITAsdXNlOlsiYXVpLXJlc2l6ZS1iYXNlLWRlcHJlY2F0ZWQiLAoiYXVpLXJlc2l6ZS1jb25zdHJhaW4tZGVwcmVjYXRlZCJdfSwiYXVpLXNjYWxlLWRhdGEtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1kYXRhLWVkaXRvciIsImV2ZW50LXZhbHVlY2hhbmdlIl19LCJhdWktc2NoZWR1bGVyIjp7dXNlOiJldmVudC1nZXN0dXJlcyBhdWktc2NoZWR1bGVyLWJhc2UgYXVpLXNjaGVkdWxlci1ldmVudC1yZWNvcmRlciBhdWktc2NoZWR1bGVyLXZpZXctYWdlbmRhIGF1aS1zY2hlZHVsZXItdmlldy1kYXkgYXVpLXNjaGVkdWxlci12aWV3LW1vbnRoIGF1aS1zY2hlZHVsZXItdmlldy10YWJsZS1kZCBhdWktc2NoZWR1bGVyLXZpZXctdGFibGUgYXVpLXNjaGVkdWxlci12aWV3LXdlZWsgYXVpLXZpZXdwb3J0Ii5zcGxpdCgiICIpfSwiYXVpLXNjaGVkdWxlci1iYXNlIjp7cmVxdWlyZXM6Im1vZGVsIG1vZGVsLWxpc3Qgd2lkZ2V0LXN0ZG1vZCBjb2xvci1oc2wgYXVpLWV2ZW50LWJhc2UgYXVpLW5vZGUtYmFzZSBhdWktY29tcG9uZW50IGF1aS1kYXRhdHlwZSBhdWktYnV0dG9uIG5vZGUtZm9jdXNtYW5hZ2VyIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLWV2ZW50LXJlY29yZGVyIjp7cmVxdWlyZXM6WyJxdWVyeXN0cmluZyIsImlvLWZvcm0iLCJvdmVybGF5IiwiYXVpLXNjaGVkdWxlci1iYXNlIiwiYXVpLXBvcG92ZXIiXSxza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLXRvdWNoIjp7Y29uZGl0aW9uOntuYW1lOiJhdWktc2NoZWR1bGVyLXRvdWNoIix0cmlnZ2VyOiJhdWktc2NoZWR1bGVyIix1YToidG91Y2hFbmFibGVkIn0scmVxdWlyZXM6WyJiYXNlLWJ1aWxkIiwiYXVpLXNjaGVkdWxlciJdLHNraW5uYWJsZTohMH0sImF1aS1zY2hlZHVsZXItdmlldy1hZ2VuZGEiOntyZXF1aXJlczpbImF1aS1zY2hlZHVsZXItYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1zY2hlZHVsZXItdmlldy1kYXkiOntyZXF1aXJlczpbImRkLWRyYWciLCJkZC1kZWxlZ2F0ZSIsImRkLWRyb3AiLCJkZC1jb25zdHJhaW4iLCJhdWktc2NoZWR1bGVyLXZpZXctdGFibGUiXSxza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLXZpZXctbW9udGgiOntyZXF1aXJlczpbImF1aS1zY2hlZHVsZXItdmlldy10YWJsZSJdLApza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLXZpZXctdGFibGUiOntyZXF1aXJlczpbIm92ZXJsYXkiLCJhdWktc2NoZWR1bGVyLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLXZpZXctdGFibGUtZGQiOntyZXF1aXJlczpbImRkLWRyYWciLCJkZC1kZWxlZ2F0ZSIsImRkLWRyb3AiLCJhdWktc2NoZWR1bGVyLXZpZXctdGFibGUiXX0sImF1aS1zY2hlZHVsZXItdmlldy13ZWVrIjp7cmVxdWlyZXM6WyJhdWktc2NoZWR1bGVyLXZpZXctZGF5Il0sc2tpbm5hYmxlOiEwfSwiYXVpLXNjcm9sbGVyLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImV2ZW50LW1vdXNlZW50ZXIiLCJhdWktYmFzZS1kZXByZWNhdGVkIiwiYXVpLXNpbXBsZS1hbmltLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktc2Nyb2xsc3B5Ijp7cmVxdWlyZXM6WyJiYXNlLWJ1aWxkIiwibm9kZS1zY3JlZW4iLCJhdWktY2xhc3NuYW1lbWFuYWdlciJdfSwiYXVpLXNlYXJjaCI6e3VzZTpbImF1aS1zZWFyY2gtdHN0Il19LAoiYXVpLXNlYXJjaC10c3QiOntyZXF1aXJlczpbImF1aS1jb21wb25lbnQiXX0sImF1aS1zZWxlY3RvciI6e3JlcXVpcmVzOlsic2VsZWN0b3ItY3NzMyIsImF1aS1jbGFzc25hbWVtYW5hZ2VyIl19LCJhdWktc2V0Ijp7cmVxdWlyZXM6WyJhdWktbWFwIl19LCJhdWktc2ltcGxlLWFuaW0tZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLXNraW4tZGVwcmVjYXRlZCI6e3R5cGU6ImNzcyJ9LCJhdWktc29ydGFibGUiOnt1c2U6WyJhdWktc29ydGFibGUtbGF5b3V0IiwiYXVpLXNvcnRhYmxlLWxpc3QiXX0sImF1aS1zb3J0YWJsZS1sYXlvdXQiOntyZXF1aXJlczoiZGQtZGVsZWdhdGUgZGQtZHJhZyBkZC1kcm9wIGRkLXByb3h5IGF1aS1ub2RlIGF1aS1jb21wb25lbnQiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXNvcnRhYmxlLWxpc3QiOntyZXF1aXJlczoiZGQtZHJhZyBkZC1kcm9wIGRkLXByb3h5IGRkLXNjcm9sbCBhdWktbm9kZSBhdWktY29tcG9uZW50Ii5zcGxpdCgiICIpfSwKImF1aS1zdGF0ZS1pbnRlcmFjdGlvbi1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktYmFzZS1kZXByZWNhdGVkIiwicGx1Z2luIl19LCJhdWktc3VyZmFjZSI6e3VzZTpbImF1aS1zdXJmYWNlLWFwcCIsImF1aS1zdXJmYWNlLXNjcmVlbiJdfSwiYXVpLXN1cmZhY2UtYXBwIjp7cmVxdWlyZXM6WyJldmVudC1kZWxlZ2F0ZSIsIm5vZGUtZXZlbnQtaHRtbDUiLCJhdWktc3VyZmFjZS1iYXNlIiwiYXVpLXN1cmZhY2Utc2NyZWVuIiwiYXVpLXN1cmZhY2Utc2NyZWVuLXJvdXRlIl19LCJhdWktc3VyZmFjZS1iYXNlIjp7cmVxdWlyZXM6ImJhc2UtYnVpbGQgbm9kZS1zdHlsZSB0aW1lcnMgYXVpLWRlYm91bmNlIGF1aS1wcm9taXNlIGF1aS1wYXJzZS1jb250ZW50Ii5zcGxpdCgiICIpfSwiYXVpLXN1cmZhY2Utc2NyZWVuIjp7cmVxdWlyZXM6WyJiYXNlLWJ1aWxkIl19LCJhdWktc3VyZmFjZS1zY3JlZW4taHRtbCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UiLCJhdWktaW8tcmVxdWVzdCIsCiJhdWktcHJvbWlzZSIsImF1aS1zdXJmYWNlLXNjcmVlbiIsImF1aS11cmwiXX0sImF1aS1zdXJmYWNlLXNjcmVlbi1yb3V0ZSI6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCJdfSwiYXVpLXN3Zi1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJxdWVyeXN0cmluZy1wYXJzZS1zaW1wbGUiLCJxdWVyeXN0cmluZy1zdHJpbmdpZnktc2ltcGxlIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLXRhYnMtZGF0YS1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhLWVkaXRvciIsImF1aS10YWJ2aWV3Il19LCJhdWktdGFidmlldyI6e3JlcXVpcmVzOlsic2VsZWN0b3ItY3NzMyIsInRhYnZpZXciLCJhdWktY29tcG9uZW50IiwiYXVpLXdpZGdldC1jc3MiXSxza2lubmFibGU6ITB9LCJhdWktdGVtcGxhdGUtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLXRleHQtZGF0YS1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhLWVkaXRvciIsImV2ZW50LXZhbHVlY2hhbmdlIl0sCnNraW5uYWJsZTohMH0sImF1aS10ZXh0LWRhdGEtdW5pY29kZSI6e3JlcXVpcmVzOlsidGV4dCJdfSwiYXVpLXRleHQtdW5pY29kZSI6e3JlcXVpcmVzOlsiYXVpLXRleHQtZGF0YS11bmljb2RlIl19LCJhdWktdGV4dGJveGxpc3QtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOiJhbmltLW5vZGUtcGx1Z2luIGF1aS1hdXRvY29tcGxldGUtZGVwcmVjYXRlZCBhdWktYnV0dG9uLWl0ZW0tZGVwcmVjYXRlZCBhdWktZGF0YS1zZXQtZGVwcmVjYXRlZCBlc2NhcGUgbm9kZS1mb2N1c21hbmFnZXIiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXRpbWVwaWNrZXIiOntyZXF1aXJlczpbImF1dG9jb21wbGV0ZSIsImF1aS1kYXRlcGlja2VyLWRlbGVnYXRlIiwiYXVpLWRhdGVwaWNrZXItcG9wb3ZlciJdLHNraW5uYWJsZTohMH0sImF1aS10aW1lcGlja2VyLW5hdGl2ZSI6e3JlcXVpcmVzOlsiYmFzZSIsImJhc2UtYnVpbGQiLCJhdWktbm9kZS1iYXNlIiwiYXVpLWRhdGVwaWNrZXItZGVsZWdhdGUiLAoiYXVpLWRhdGVwaWNrZXItbmF0aXZlIl19LCJhdWktdGltZXIiOntyZXF1aXJlczpbIm9vcCJdfSwiYXVpLXRvZ2dsZXIiOnt1c2U6WyJhdWktdG9nZ2xlci1iYXNlIiwiYXVpLXRvZ2dsZXItZGVsZWdhdGUiXX0sImF1aS10b2dnbGVyLWFjY2Vzc2liaWxpdHkiOntyZXF1aXJlczpbImF1aS10b2dnbGVyLWJhc2UiXX0sImF1aS10b2dnbGVyLWJhc2UiOntyZXF1aXJlczoidHJhbnNpdGlvbiBhdWktc2VsZWN0b3IgYXVpLWV2ZW50LWJhc2UgYXVpLW5vZGUgYXVpLWNvbXBvbmVudCBldmVudC10YXAiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXRvZ2dsZXItZGVsZWdhdGUiOntyZXF1aXJlczpbImFycmF5LWludm9rZSIsIm5vZGUtZXZlbnQtZGVsZWdhdGUiLCJhdWktdG9nZ2xlci1iYXNlIl19LCJhdWktdG9vbGJhciI6e3JlcXVpcmVzOlsiYXJyYXlsaXN0IiwiYXJyYXlsaXN0LWFkZCIsImF1aS1jb21wb25lbnQiLCJhdWktYnV0dG9uLWNvcmUiXX0sImF1aS10b29sdGlwIjp7dXNlOlsiYXVpLXRvb2x0aXAtYmFzZSIsCiJhdWktdG9vbHRpcC1kZWxlZ2F0ZSJdfSwiYXVpLXRvb2x0aXAtYmFzZSI6e3JlcXVpcmVzOiJhdWktYXJpYSBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktY29tcG9uZW50IGF1aS1kZWJvdW5jZSBhdWktbm9kZS1iYXNlIGF1aS13aWRnZXQtY3NzY2xhc3MgYXVpLXdpZGdldC10b2dnbGUgYXVpLXdpZGdldC10cmFuc2l0aW9uIGF1aS13aWRnZXQtdHJpZ2dlciBhdWktd2lkZ2V0LXBvc2l0aW9uLWFsaWduLXN1Z2dlc3Rpb24gZXZlbnQtaG92ZXIgZXZlbnQtcmVzaXplIGVzY2FwZSB3aWRnZXQgd2lkZ2V0LWF1dG9oaWRlIHdpZGdldC1wb3NpdGlvbiB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiB3aWRnZXQtc3RhY2sgd2lkZ2V0LXN0ZG1vZCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktdG9vbHRpcC1kZWxlZ2F0ZSI6e3JlcXVpcmVzOlsiYXVpLXRvb2x0aXAtYmFzZSIsIm5vZGUtZXZlbnQtZGVsZWdhdGUiXX0sImF1aS10b29sdGlwLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1vdmVybGF5LWNvbnRleHQtcGFuZWwtZGVwcmVjYXRlZCJdLApza2lubmFibGU6ITB9LCJhdWktdHBsLXNuaXBwZXRzLWJhc2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLXRlbXBsYXRlLWRlcHJlY2F0ZWQiXX0sImF1aS10cGwtc25pcHBldHMtY2hlY2tib3gtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLXRwbC1zbmlwcGV0cy1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS10cGwtc25pcHBldHMtZGVwcmVjYXRlZCI6e3VzZTpbImF1aS10cGwtc25pcHBldHMtYmFzZS1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy1jaGVja2JveC1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy1pbnB1dC1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy1zZWxlY3QtZGVwcmVjYXRlZCIsImF1aS10cGwtc25pcHBldHMtdGV4dGFyZWEtZGVwcmVjYXRlZCJdfSwiYXVpLXRwbC1zbmlwcGV0cy1pbnB1dC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktdHBsLXNuaXBwZXRzLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLXRwbC1zbmlwcGV0cy1zZWxlY3QtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLXRwbC1zbmlwcGV0cy1iYXNlLWRlcHJlY2F0ZWQiXX0sCiJhdWktdHBsLXNuaXBwZXRzLXRleHRhcmVhLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS10cGwtc25pcHBldHMtYmFzZS1kZXByZWNhdGVkIl19LCJhdWktdHJlZSI6e3VzZTpbImF1aS10cmVlLWRhdGEiLCJhdWktdHJlZS1pbyIsImF1aS10cmVlLW5vZGUiLCJhdWktdHJlZS1wYWdpbmF0b3IiLCJhdWktdHJlZS12aWV3Il19LCJhdWktdHJlZS1kYXRhIjp7cmVxdWlyZXM6WyJhdWktYmFzZS1jb3JlIiwiYXVpLWJhc2UtbGFuZyIsImF1aS1ub2RlLWJhc2UiLCJhdWktdGltZXIiLCJhdWktY29tcG9uZW50Il19LCJhdWktdHJlZS1pbyI6e3JlcXVpcmVzOlsiYXVpLWNvbXBvbmVudCIsImF1aS1pbyJdfSwiYXVpLXRyZWUtbm9kZSI6e3JlcXVpcmVzOiJqc29uIHF1ZXJ5c3RyaW5nLXN0cmluZ2lmeSBhdWktdHJlZS1kYXRhIGF1aS10cmVlLWlvIGF1aS10cmVlLXBhZ2luYXRvciBldmVudC1rZXkiLnNwbGl0KCIgIil9LCJhdWktdHJlZS1wYWdpbmF0b3IiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LAoiYXVpLXRyZWUtdmlldyI6e3JlcXVpcmVzOiJkZC1kZWxlZ2F0ZSBkZC1wcm94eSB3aWRnZXQgYXVpLXRyZWUtbm9kZSBhdWktdHJlZS1wYWdpbmF0b3IgYXVpLXRyZWUtaW8iLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXVuZG8tcmVkbyI6e3JlcXVpcmVzOlsiYmFzZSIsImJhc2UtYnVpbGQiLCJwcm9taXNlIl19LCJhdWktdXJsIjp7cmVxdWlyZXM6WyJvb3AiLCJxdWVyeXN0cmluZy1wYXJzZSIsInF1ZXJ5c3RyaW5nLXN0cmluZ2lmeSJdfSwiYXVpLXZpZGVvIjp7cmVxdWlyZXM6ImV2ZW50LXJlc2l6ZSBub2RlLWV2ZW50LWh0bWw1IHF1ZXJ5c3RyaW5nLXN0cmluZ2lmeS1zaW1wbGUgYXVpLWFyaWEgYXVpLW5vZGUgYXVpLWNvbXBvbmVudCBhdWktZGVib3VuY2UiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXZpZXdwb3J0Ijp7cmVxdWlyZXM6WyJhdWktbm9kZSIsImF1aS1jb21wb25lbnQiXX0sImF1aS13aWRnZXQiOnt1c2U6WyJhdWktd2lkZ2V0LWNzc2NsYXNzIiwKImF1aS13aWRnZXQtdG9vbGJhcnMiXX0sImF1aS13aWRnZXQtY29yZSI6e3VzZTpbImF1aS13aWRnZXQtY3NzY2xhc3MiXX0sImF1aS13aWRnZXQtY3NzY2xhc3MiOntyZXF1aXJlczpbIndpZGdldC1iYXNlIl19LCJhdWktd2lkZ2V0LXBvc2l0aW9uLWFsaWduLXN1Z2dlc3Rpb24iOntyZXF1aXJlczpbIndpZGdldC1wb3NpdGlvbi1hbGlnbiIsIndpZGdldC1zdGRtb2QiXX0sImF1aS13aWRnZXQtcmVzcG9uc2l2ZSI6e3JlcXVpcmVzOlsiZXZlbnQtcmVzaXplIiwid2lkZ2V0LWJhc2UiXX0sImF1aS13aWRnZXQtc2hvcnRjdXQiOntyZXF1aXJlczpbImJhc2UiXX0sImF1aS13aWRnZXQtc3dpcGUiOntyZXF1aXJlczpbImNsYXNzbmFtZW1hbmFnZXIiLCJzY3JvbGx2aWV3LWJhc2UiLCJzY3JvbGx2aWV3LXBhZ2luYXRvciIsInRpbWVycyJdfSwiYXVpLXdpZGdldC10b2dnbGUiOnt9LCJhdWktd2lkZ2V0LXRvb2xiYXJzIjp7cmVxdWlyZXM6WyJ3aWRnZXQtc3RkbW9kIiwiYXVpLXRvb2xiYXIiXX0sCiJhdWktd2lkZ2V0LXRyYW5zaXRpb24iOntyZXF1aXJlczpbInRyYW5zaXRpb24iXX0sImF1aS13aWRnZXQtdHJpZ2dlciI6e3JlcXVpcmVzOlsibm9kZSJdfX0pO1lVSS5FbnZbYS52ZXJzaW9uXS5tZDU9IjAyNzhkYzY5MzlmNTRhY2EyYzg3ZDUwMGYyNDEyNDIyIjthLlVBLmVkZ2U9ZnVuY3Rpb24oKXt2YXIgcT1hLlVBLnVzZXJBZ2VudC5tYXRjaCgvRWRnZVwvKC5bMC05Ll0rKS8pO3JldHVybiBxP3FbMV06MH0oKTthLnN1cHBvcnRzRE9NRXZlbnQ9ZnVuY3Rpb24ocSx0KXt0PSJvbiIrdDtyZXR1cm4gdCBpbiBxfHwocS5zZXRBdHRyaWJ1dGV8fChxPWEuY29uZmlnLmRvYy5jcmVhdGVFbGVtZW50KCJkaXYiKSksIXEuc2V0QXR0cmlidXRlKT8hMDoocS5zZXRBdHRyaWJ1dGUodCwiIiksImZ1bmN0aW9uIj09PXR5cGVvZiBxW3RdKX07KGZ1bmN0aW9uKCl7dmFyIHE9QXJyYXkucHJvdG90eXBlLnNsaWNlO1lVSS5wcm90b3R5cGUucmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMsCmY9dC5sZW5ndGgtMSxkPXEuY2FsbChhcmd1bWVudHMsMCxmKTtkLnVuc2hpZnQoImV2ZW50LWJhc2UiKTtkLnB1c2goZnVuY3Rpb24oYyl7dmFyIGI9YXJndW1lbnRzO2Mub24oImRvbXJlYWR5IixmdW5jdGlvbigpe3RbZl0uYXBwbHkodGhpcyxiKX0pfSk7dGhpcy51c2UuYXBwbHkodGhpcyxkKX19KSgpfSwiMy4wLjMtZGVwcmVjYXRlZC43MyIpO1lVSS5hZGQoImF1aSIsZnVuY3Rpb24oYSxFKXt9LCIzLjAuMy1kZXByZWNhdGVkLjczIik7WVVJLkVudi5jb3JlLnB1c2guYXBwbHkoWVVJLkVudi5jb3JlLFsiYXVpLWJhc2UtY29yZSJdKTsKWVVJLmFkZCgiYXVpLWJhc2UtaHRtbDUtc2hpdiIsZnVuY3Rpb24oYSxFKXthLkhUTUw1X0VMRU1FTlRTPSJhYmJyIGFydGljbGUgYXNpZGUgYXVkaW8gY2FudmFzIGNvbW1hbmQgZGF0YWxpc3QgZGV0YWlscyBmaWd1cmUgZmlnY2FwdGlvbiBmb290ZXIgaGVhZGVyIGhncm91cCBrZXlnZW4gbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNlY3Rpb24gc291cmNlIHN1bW1hcnkgdGltZSB2aWRlbyIuc3BsaXQoIiAiKTthLmh0bWw1c2hpdj1mdW5jdGlvbihxKXt2YXIgdD1xfHxhLmNvbmZpZy5kb2M7aWYoYS5VQS5pZSYmdCYmdC5jcmVhdGVFbGVtZW50KWZvcih2YXIgZj1hLkhUTUw1X0VMRU1FTlRTLGQ9Zi5sZW5ndGg7ZC0tOyl0LmNyZWF0ZUVsZW1lbnQoZltkXSk7cmV0dXJuIHF9fSwiMy4wLjMtZGVwcmVjYXRlZC43MyIpOwpZVUkuYWRkKCJsaWZlcmF5LWJyb3dzZXItc2VsZWN0b3JzIixmdW5jdGlvbihhKXt2YXIgRT0vXC4vZyxxPWZ1bmN0aW9uKHMpe3ZhciBsPTA7cmV0dXJuIHBhcnNlRmxvYXQocy5yZXBsYWNlKEUsZnVuY3Rpb24oKXtyZXR1cm4gMT09bCsrPyIiOiIuIn0pKX0sdD1bIjAiLCIwIl0sZj1mdW5jdGlvbihzLGwpe3ZhciBoPShsLm1hdGNoKHMpfHx0KVsxXTtyZXR1cm4gcShoKX0sZD0iaWUgb3BlcmEgY2hyb21lIGFvbCBjYW1pbm8gZmlyZWZveCBmbG9jayBtb3ppbGxhIG5ldHNjYXBlIGljYWIga29ucXVlcm9yIHNhZmFyaSIuc3BsaXQoIiAiKSxjPXttYWNpbnRvc2g6Im1hYyIsd2luZG93czoid2luIn0sYj1hLmNvbmZpZyxnPWIuZG9jLGU9bmF2aWdhdG9yLnVzZXJBZ2VudCxrPWEuVUEsbT1rLm9zLHA9e2FnZW50OmUsYW9sOjAsYnJvd3NlcjowLGNhbWlubzowLGZpcmVmb3g6MCxmbG9jazowLGljYWI6MCxrb25xdWVyb3I6MCxtb3ppbGxhOjAsbmV0c2NhcGU6MCxzYWZhcmk6MH07CnAubWFjPSJtYWNpbnRvc2giPT1tO3Aucmhpbm89InJoaW5vIj09bTtwLndpbj0id2luZG93cyI9PW07TGlmZXJheS5Ccm93c2VyU2VsZWN0b3JzPXtnZXRTZWxlY3RvcnM6ZnVuY3Rpb24oKXtpZighay5zZWxlY3RvcnMpe2lmKGsuaWUpe3AuYW9sPWYoL0FtZXJpY2EgT25saW5lIEJyb3dzZXIgKFteXHNdKik7LyxlKTt2YXIgcz1nLmRvY3VtZW50TW9kZTtzJiYoay5icm93c2VyPWsuaWUsay5pZT1zKX1lbHNlIGsuZ2Vja28/KHAubmV0c2NhcGU9ZigvKE5ldHNjYXBlfE5hdmlnYXRvcilcLyhbXlxzXSopLyxlKSxwLmZsb2NrPWYoL0Zsb2NrXC8oW15cc10qKS8sZSkscC5jYW1pbm89ZigvQ2FtaW5vXC8oW15cc10qKS8sZSkscC5maXJlZm94PWYoL0ZpcmVmb3hcLyhbXlxzXSopLyxlKSk6ay53ZWJraXQ/cC5zYWZhcmk9ZigvVmVyc2lvblwvKFteXHNdKikgU2FmYXJpLyxlKToocC5pY2FiPWYoL2lDYWIoPzpcL3xccyk/KFteXHNdKikvLGUpLHAua29ucXVlcm9yPWYoL0tvbnF1ZXJvclwvKFteXHNdKikvLAplKSk7aWYoIXAud2luJiYhcC5tYWMpe3ZhciBzPS9MaW51eC8udGVzdChlKSxsPS9Tb2xhcmlzfFN1bk9TLy50ZXN0KGUpO3M/KGsub3M9ImxpbnV4IixwLmxpbnV4PXMpOmwmJihrLm9zPSJzdW4iLHAuc3VuPWwpfXM9ay50b3VjaEVuYWJsZWQ7cC50b3VjaD1zO3AudG91Y2hNb2JpbGU9cyYmISFrLm1vYmlsZTthLm1peChrLHApO2Zvcih2YXIgcz1bXSxoLHUsdyx6LEE9e21ham9yOjAsc3RyaW5nOiIifSxIPWQubGVuZ3RoO0gtLTspaD1kW0hdLHo9a1toXSwwPHomJihsPXBhcnNlSW50KHosMTApLHU9aCtsLHc9aCt6LHc9LTE8U3RyaW5nKHopLmluZGV4T2YoIi4iKT93LnJlcGxhY2UoL1wuKFxkKS4qLywiLSQxIik6dysiLTAiLHMucHVzaChoLHUsdyksQS5zdHJpbmc9aCsiIixBLm1ham9yPWwpO2sudmVyc2lvbj1BO2sucmVuZGVyZXI9IiI7ay5pZT9rLnJlbmRlcmVyPSJ0cmlkZW50IjprLmdlY2tvP2sucmVuZGVyZXI9ImdlY2tvIjprLndlYmtpdD9rLnJlbmRlcmVyPSJ3ZWJraXQiOgprLm9wZXJhJiYoay5yZW5kZXJlcj0icHJlc3RvIik7YS5VQT1rO3M9W2sucmVuZGVyZXIsImpzIl0uY29uY2F0KHMpO3MucHVzaChjW2sub3NdfHxrLm9zKTtrLm1vYmlsZSYmcy5wdXNoKCJtb2JpbGUiKTtrLnNlY3VyZSYmcy5wdXNoKCJzZWN1cmUiKTtrLnRvdWNoJiZzLnB1c2goInRvdWNoIik7ay5zZWxlY3RvcnM9cy5qb2luKCIgIik7aWYobD0hKHM9ISghYi53aW4uU1ZHQW5nbGUmJiFnLmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjQmFzaWNTdHJ1Y3R1cmUiLCIxLjEiKSkpKWg9Zy5jcmVhdGVFbGVtZW50KCJkaXYiKSxoLmlubmVySFRNTD0nXHgzY3Y6c2hhcGUgYWRqXHgzZCIxIi9ceDNlJyxoPWguZmlyc3RDaGlsZCxoLnN0eWxlLmJlaGF2aW9yPSJ1cmwoI2RlZmF1bHQjVk1MKSIsaCYmIm9iamVjdCI9PXR5cGVvZiBoLmFkanx8KGw9ITEpO1lVSS5fVk1MPWw7WVVJLl9TVkc9cztrLnZtbD1ZVUkuX1ZNTDsKay5zdmc9WVVJLl9TVkd9cmV0dXJuIGsuc2VsZWN0b3JzfSxydW46ZnVuY3Rpb24oKXt2YXIgcz1nLmRvY3VtZW50RWxlbWVudCxsPXRoaXMuZ2V0U2VsZWN0b3JzKCk7ay5kaXI9cy5nZXRBdHRyaWJ1dGUoImRpciIpfHwibHRyIjstMT09PXMuY2xhc3NOYW1lLmluZGV4T2Yoay5kaXIpJiYobCs9IiAiK2suZGlyKTstMT09PXMuY2xhc3NOYW1lLmluZGV4T2YoInl1aTMtanMtZW5hYmxlZCIpJiYtMT09PWwuaW5kZXhPZigieXVpMy1qcy1lbmFibGVkIikmJihsKz0iIHl1aTMtanMtZW5hYmxlZCIpO3MuY2xhc3NOYW1lKz0iICIrbH19fSwiIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CihmdW5jdGlvbigpe3ZhciBhPUxpZmVyYXkuQVVJLEU9YS5nZXRDb21iaW5lKCkscT1ZVUkuRW52LmNvcmUsdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGY9YS5nZXRFZGl0b3JDS0VkaXRvclBhdGgoKSxkPWEuZ2V0SmF2YVNjcmlwdFJvb3RQYXRoKCksYz0ibnVtYmVyIj09PXR5cGVvZiB0LnNlbGVjdGlvblN0YXJ0JiYibnVtYmVyIj09PXR5cGVvZiB0LnNlbGVjdGlvbkVuZDt3aW5kb3cuWVVJX2NvbmZpZz17YmFzZTpkKyIvYXVpLyIsY29tYmluZTpFLGNvbWJvQmFzZTphLmdldENvbWJvUGF0aCgpLGZpbHRlcjpMaWZlcmF5LkFVSS5nZXRGaWx0ZXIoKSxncm91cHM6e2VkaXRvcjp7YmFzZTpmLGNvbWJpbmU6RSxtb2R1bGVzOnsiaW5saW5lLWVkaXRvci1ja2VkaXRvciI6e3BhdGg6ImNrZWRpdG9yL21haW4uanMifX0scm9vdDpmfSxsaWZlcmF5OntiYXNlOmQrIi9saWZlcmF5LyIsY29tYmluZTpFLGZpbHRlcjpMaWZlcmF5LkFVSS5nZXRGaWx0ZXJDb25maWcoKSwKbW9kdWxlczp7ImxpZmVyYXktYWRkcmVzcyI6e3BhdGg6ImFkZHJlc3MuanMiLHJlcXVpcmVzOltdfSwibGlmZXJheS1hbGVydCI6e3BhdGg6ImFsZXJ0LmpzIixyZXF1aXJlczpbImF1aS1hbGVydCIsImF1aS1jb21wb25lbnQiLCJldmVudC1tb3VzZWVudGVyIiwibGlmZXJheS1wb3J0bGV0LWJhc2UiLCJ0aW1lcnMiXX0sImxpZmVyYXktYXNzZXQtYWRkb24tZW50cnktc2VsZWN0b3IiOntwYXRoOiJhc3NldF9hZGRvbl9lbnRyeV9zZWxlY3Rvci5qcyIscmVxdWlyZXM6WyJhdWktY29tcG9uZW50IiwibGlmZXJheS1wb3J0bGV0LWJhc2UiLCJsaWZlcmF5LXV0aWwtd2luZG93Il19LCJsaWZlcmF5LWFzc2V0LWNhdGVnb3JpZXMtc2VsZWN0b3IiOntwYXRoOiJhc3NldF9jYXRlZ29yaWVzX3NlbGVjdG9yLmpzIixyZXF1aXJlczpbImF1aS10cmVlIiwibGlmZXJheS1hc3NldC10YWdzLXNlbGVjdG9yIl19LCJsaWZlcmF5LWFzc2V0LXRhZ3Mtc2VsZWN0b3IiOntwYXRoOiJhc3NldF90YWdzX3NlbGVjdG9yLmpzIiwKcmVxdWlyZXM6ImFycmF5LWV4dHJhcyBhc3luYy1xdWV1ZSBhdWktYXV0b2NvbXBsZXRlLWRlcHJlY2F0ZWQgYXVpLWlvLXBsdWdpbi1kZXByZWNhdGVkIGF1aS1pby1yZXF1ZXN0IGF1aS1saXZlLXNlYXJjaC1kZXByZWNhdGVkIGF1aS1tb2RhbCBhdWktdGVtcGxhdGUtZGVwcmVjYXRlZCBhdWktdGV4dGJveGxpc3QtZGVwcmVjYXRlZCBkYXRhc291cmNlLWNhY2hlIGxpZmVyYXktc2VydmljZS1kYXRhc291cmNlIi5zcGxpdCgiICIpfSwibGlmZXJheS1hdXRvLWZpZWxkcyI6e3BhdGg6ImF1dG9fZmllbGRzLmpzIixyZXF1aXJlczoiYXVpLWJhc2UgYXVpLWRhdGEtc2V0LWRlcHJlY2F0ZWQgYXVpLWlvLXJlcXVlc3QgYXVpLXBhcnNlLWNvbnRlbnQgYmFzZSBsaWZlcmF5LXVuZG8tbWFuYWdlciBzb3J0YWJsZSIuc3BsaXQoIiAiKX0sImxpZmVyYXktYXV0b2NvbXBsZXRlLWlucHV0Ijp7cGF0aDoiYXV0b2NvbXBsZXRlX2lucHV0LmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiYXV0b2NvbXBsZXRlIiwKImF1dG9jb21wbGV0ZS1maWx0ZXJzIiwiYXV0b2NvbXBsZXRlLWhpZ2hsaWdodGVycyJdfSwibGlmZXJheS1hdXRvY29tcGxldGUtaW5wdXQtY2FyZXRpbmRleCI6e2NvbmRpdGlvbjp7bmFtZToibGlmZXJheS1hdXRvY29tcGxldGUtaW5wdXQtY2FyZXRpbmRleCIsdGVzdDpmdW5jdGlvbigpe3JldHVybiBjfSx0cmlnZ2VyOiJsaWZlcmF5LWF1dG9jb21wbGV0ZS10ZXh0YXJlYSJ9LHBhdGg6ImF1dG9jb21wbGV0ZV9pbnB1dF9jYXJldGluZGV4LmpzIixyZXF1aXJlczpbImxpZmVyYXktYXV0b2NvbXBsZXRlLXRleHRhcmVhIl19LCJsaWZlcmF5LWF1dG9jb21wbGV0ZS1pbnB1dC1jYXJldGluZGV4LXNlbCI6e2NvbmRpdGlvbjp7bmFtZToibGlmZXJheS1hdXRvY29tcGxldGUtaW5wdXQtY2FyZXRpbmRleC1zZWwiLHRlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4hY30sdHJpZ2dlcjoibGlmZXJheS1hdXRvY29tcGxldGUtdGV4dGFyZWEifSxwYXRoOiJhdXRvY29tcGxldGVfaW5wdXRfY2FyZXRpbmRleF9zZWwuanMiLApyZXF1aXJlczpbImxpZmVyYXktYXV0b2NvbXBsZXRlLXRleHRhcmVhIl19LCJsaWZlcmF5LWF1dG9jb21wbGV0ZS1pbnB1dC1jYXJldG9mZnNldCI6e2NvbmRpdGlvbjp7bmFtZToibGlmZXJheS1hdXRvY29tcGxldGUtaW5wdXQtY2FyZXRvZmZzZXQiLHRlc3Q6ZnVuY3Rpb24oYil7cmV0dXJuIShiLlVBLmllJiY5PmIuVUEuaWUpfSx0cmlnZ2VyOiJsaWZlcmF5LWF1dG9jb21wbGV0ZS10ZXh0YXJlYSJ9LHBhdGg6ImF1dG9jb21wbGV0ZV9pbnB1dF9jYXJldG9mZnNldC5qcyIscmVxdWlyZXM6WyJsaWZlcmF5LWF1dG9jb21wbGV0ZS10ZXh0YXJlYSJdfSwibGlmZXJheS1hdXRvY29tcGxldGUtaW5wdXQtY2FyZXRvZmZzZXQtc2VsIjp7Y29uZGl0aW9uOntuYW1lOiJsaWZlcmF5LWF1dG9jb21wbGV0ZS1pbnB1dC1jYXJldG9mZnNldC1zZWwiLHRlc3Q6ZnVuY3Rpb24oYil7cmV0dXJuIGIuVUEuaWUmJjk+Yi5VQS5pZX0sdHJpZ2dlcjoibGlmZXJheS1hdXRvY29tcGxldGUtdGV4dGFyZWEifSwKcGF0aDoiYXV0b2NvbXBsZXRlX2lucHV0X2NhcmV0b2Zmc2V0X3NlbC5qcyIscmVxdWlyZXM6WyJsaWZlcmF5LWF1dG9jb21wbGV0ZS10ZXh0YXJlYSJdfSwibGlmZXJheS1hdXRvY29tcGxldGUtdGV4dGFyZWEiOntwYXRoOiJhdXRvY29tcGxldGVfdGV4dGFyZWEuanMiLHJlcXVpcmVzOlsibGlmZXJheS1hdXRvY29tcGxldGUtaW5wdXQiXX0sImxpZmVyYXktYnJvd3Nlci1zZWxlY3RvcnMiOntwYXRoOiJicm93c2VyX3NlbGVjdG9ycy5qcyIscmVxdWlyZXM6WyJ5dWktYmFzZSJdfSwibGlmZXJheS1jb3Zlci1jcm9wcGVyIjp7cGF0aDoiY292ZXJfY3JvcHBlci5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsImRkLWNvbnN0cmFpbiIsImRkLWRyYWciLCJsaWZlcmF5LWNyb3AtcmVnaW9uIiwicGx1Z2luIl19LCJsaWZlcmF5LWNyb3AtcmVnaW9uIjp7cGF0aDoiY3JvcF9yZWdpb24uanMiLHJlcXVpcmVzOlsiYXVpLWJhc2UiXX0sImxpZmVyYXktZGQtcHJveHkiOntwYXRoOiJkZF9wcm94eS5qcyIsCnJlcXVpcmVzOlsiZGQtcHJveHkiXX0sImxpZmVyYXktZHluYW1pYy1zZWxlY3QiOntwYXRoOiJkeW5hbWljX3NlbGVjdC5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSJdfSwibGlmZXJheS1lZGl0b3ItaW1hZ2UtdXBsb2FkZXIiOntwYXRoOiJlZGl0b3JfaW1hZ2VfdXBsb2FkZXIuanMiLHJlcXVpcmVzOlsiYXVpLWFsZXJ0IiwiYXVpLWJhc2UiLCJhdWktcHJvZ3Jlc3NiYXIiLCJ1cGxvYWRlciJdfSwibGlmZXJheS1mb3JtIjp7cGF0aDoiZm9ybS5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsImF1aS1mb3JtLXZhbGlkYXRvciJdfSwibGlmZXJheS1mb3JtLXBsYWNlaG9sZGVycyI6e2NvbmRpdGlvbjp7bmFtZToibGlmZXJheS1mb3JtLXBsYWNlaG9sZGVycyIsdGVzdDpmdW5jdGlvbihiKXtyZXR1cm4hKCJwbGFjZWhvbGRlciJpbiB0KX0sdHJpZ2dlcjoibGlmZXJheS1mb3JtIn0scGF0aDoiZm9ybV9wbGFjZWhvbGRlcnMuanMiLHJlcXVpcmVzOlsibGlmZXJheS1mb3JtIiwicGx1Z2luIl19LAoibGlmZXJheS1mdWxsc2NyZWVuLXNvdXJjZS1lZGl0b3IiOntwYXRoOiJmdWxsc2NyZWVuX3NvdXJjZV9lZGl0b3IuanMiLHJlcXVpcmVzOlsibGlmZXJheS1zb3VyY2UtZWRpdG9yIl19LCJsaWZlcmF5LWhpc3RvcnkiOntwYXRoOiJoaXN0b3J5LmpzIixyZXF1aXJlczpbImhpc3RvcnktaGFzaCIsInF1ZXJ5c3RyaW5nLXBhcnNlLXNpbXBsZSJdfSwibGlmZXJheS1oaXN0b3J5LWh0bWw1Ijp7Y29uZGl0aW9uOntuYW1lOiJsaWZlcmF5LWhpc3RvcnktaHRtbDUiLHRlc3Q6ZnVuY3Rpb24oYil7dmFyIGc9Yi5jb25maWcud2luLGU9Zy5oaXN0b3J5O3JldHVybiBlJiZlLnB1c2hTdGF0ZSYmZS5yZXBsYWNlU3RhdGUmJigib25wb3BzdGF0ZSJpbiBnfHwyPD1iLlVBLmdlY2tvKX0sdHJpZ2dlcjoibGlmZXJheS1oaXN0b3J5In0scGF0aDoiaGlzdG9yeV9odG1sNS5qcyIscmVxdWlyZXM6WyJoaXN0b3J5LWh0bWw1IiwibGlmZXJheS1oaXN0b3J5IiwicXVlcnlzdHJpbmctc3RyaW5naWZ5LXNpbXBsZSJdfSwKImxpZmVyYXktaGlzdG9yeS1tYW5hZ2VyIjp7cGF0aDoiaGlzdG9yeV9tYW5hZ2VyLmpzIixyZXF1aXJlczpbImxpZmVyYXktaGlzdG9yeSJdfSwibGlmZXJheS1odWRjcnVtYnMiOntwYXRoOiJodWRjcnVtYnMuanMiLHJlcXVpcmVzOlsiYXVpLWJhc2UiLCJhdWktZGVib3VuY2UiLCJldmVudC1yZXNpemUiXX0sImxpZmVyYXktaWNvbiI6e3BhdGg6Imljb24uanMiLHJlcXVpcmVzOlsiYXVpLWJhc2UiXX0sImxpZmVyYXktaW5saW5lLWVkaXRvci1iYXNlIjp7cGF0aDoiaW5saW5lX2VkaXRvcl9iYXNlLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIl19LCJsaWZlcmF5LWlucHV0LWxvY2FsaXplZCI6e3BhdGg6ImlucHV0X2xvY2FsaXplZC5qcyIscmVxdWlyZXM6ImF1aS1iYXNlIGF1aS1jb21wb25lbnQgYXVpLWV2ZW50LWlucHV0IGF1aS1wYWxldHRlIGF1aS1zZXQgcG9ydGFsLWF2YWlsYWJsZS1sYW5ndWFnZXMiLnNwbGl0KCIgIil9LAoibGlmZXJheS1pbnB1dC1tb3ZlLWJveGVzIjp7cGF0aDoiaW5wdXRfbW92ZV9ib3hlcy5qcyIscGx1Z2luczp7ImxpZmVyYXktaW5wdXQtbW92ZS1ib3hlcy10b3VjaCI6e2NvbmRpdGlvbjp7bmFtZToibGlmZXJheS1pbnB1dC1tb3ZlLWJveGVzLXRvdWNoIix0cmlnZ2VyOiJsaWZlcmF5LWlucHV0LW1vdmUtYm94ZXMiLHVhOiJ0b3VjaE1vYmlsZSJ9fX0scmVxdWlyZXM6WyJhdWktYmFzZSIsImF1aS10b29sYmFyIl19LCJsaWZlcmF5LWlucHV0LW1vdmUtYm94ZXMtdG91Y2giOntwYXRoOiJpbnB1dF9tb3ZlX2JveGVzX3RvdWNoLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiYXVpLXRlbXBsYXRlLWRlcHJlY2F0ZWQiLCJsaWZlcmF5LWlucHV0LW1vdmUtYm94ZXMiLCJzb3J0YWJsZSJdfSwibGlmZXJheS1pdGVtLXNlbGVjdG9yLWRpYWxvZyI6e3BhdGg6Iml0ZW1fc2VsZWN0b3JfZGlhbG9nLmpzIixyZXF1aXJlczpbImF1aS1jb21wb25lbnQiXX0sImxpZmVyYXktaXRlbS1zZWxlY3Rvci1yZXBvc2l0b3J5LWVudHJ5LWJyb3dzZXIiOntwYXRoOiJpdGVtX3NlbGVjdG9yX3JlcG9zaXRvcnlfZW50cnlfYnJvd3Nlci5qcyIsCnJlcXVpcmVzOlsibGlmZXJheS1pdGVtLXNlbGVjdG9yLXVwbG9hZGVyIiwibGlmZXJheS1pdGVtLXZpZXdlciIsImxpZmVyYXktbm90aWNlIiwibGlmZXJheS1wb3J0bGV0LWJhc2UiLCJsaWZlcmF5LXN0b3JhZ2UtZm9ybWF0dGVyIl19LCJsaWZlcmF5LWl0ZW0tc2VsZWN0b3ItdXBsb2FkZXIiOntwYXRoOiJpdGVtX3NlbGVjdG9yX3VwbG9hZGVyLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiYXVpLXByb2dyZXNzYmFyIiwibGlmZXJheS1wb3J0bGV0LWJhc2UiLCJ1cGxvYWRlciJdfSwibGlmZXJheS1pdGVtLXNlbGVjdG9yLXVybCI6e3BhdGg6Iml0ZW1fc2VsZWN0b3JfdXJsLmpzIixyZXF1aXJlczpbImF1aS1ldmVudC1pbnB1dCIsImxpZmVyYXktaXRlbS12aWV3ZXIiLCJsaWZlcmF5LXBvcnRsZXQtYmFzZSJdfSwibGlmZXJheS1pdGVtLXZpZXdlciI6e3BhdGg6Iml0ZW1fdmlld2VyLmpzIixyZXF1aXJlczpbImF1aS1jb21wb25lbnQiLCJhdWktaW1hZ2Utdmlld2VyIiwibGlmZXJheS1wb3J0bGV0LXVybCJdfSwKImxpZmVyYXktbGFuZ3VhZ2UiOntwYXRoOiJsYW5ndWFnZS5qcyJ9LCJsaWZlcmF5LWxheW91dCI6e3BhdGg6ImxheW91dC5qcyJ9LCJsaWZlcmF5LWxheW91dC1jb2x1bW4iOntwYXRoOiJsYXlvdXRfY29sdW1uLmpzIixyZXF1aXJlczpbImF1aS1zb3J0YWJsZS1sYXlvdXQiLCJkZCJdfSwibGlmZXJheS1sYXlvdXQtZnJlZWZvcm0iOntwYXRoOiJsYXlvdXRfZnJlZWZvcm0uanMiLHJlcXVpcmVzOlsibGlmZXJheS1sYXlvdXQtY29sdW1uIiwicmVzaXplIl19LCJsaWZlcmF5LWxpc3QtdmlldyI6e3BhdGg6Imxpc3Rfdmlldy5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsInRyYW5zaXRpb24iXX0sImxpZmVyYXktbG9nby1lZGl0b3IiOntwYXRoOiJsb2dvX2VkaXRvci5qcyIscmVxdWlyZXM6ImF1aS1pbWFnZS1jcm9wcGVyIGF1aS1pby1yZXF1ZXN0IGxpZmVyYXktYWxlcnQgbGlmZXJheS1jcm9wLXJlZ2lvbiBsaWZlcmF5LXBvcnRsZXQtYmFzZSBsaWZlcmF5LXN0b3JhZ2UtZm9ybWF0dGVyIi5zcGxpdCgiICIpfSwKImxpZmVyYXktbG9nby1zZWxlY3RvciI6e3BhdGg6ImxvZ29fc2VsZWN0b3IuanMiLHJlcXVpcmVzOlsiYXVpLWJhc2UiXX0sImxpZmVyYXktbWVudSI6e3BhdGg6Im1lbnUuanMiLHJlcXVpcmVzOlsiYXVpLWRlYm91bmNlIiwiYXVpLW5vZGUiXX0sImxpZmVyYXktbWVudS1maWx0ZXIiOntwYXRoOiJtZW51X2ZpbHRlci5qcyIscmVxdWlyZXM6WyJhdXRvY29tcGxldGUtYmFzZSIsImF1dG9jb21wbGV0ZS1maWx0ZXJzIiwiYXV0b2NvbXBsZXRlLWhpZ2hsaWdodGVycyJdfSwibGlmZXJheS1tZW51LXRvZ2dsZSI6e3BhdGg6Im1lbnVfdG9nZ2xlLmpzIixyZXF1aXJlczpbImF1aS1ub2RlIiwiZXZlbnQtb3V0c2lkZSIsImV2ZW50LXRhcCIsImxpZmVyYXktbWVudS1maWx0ZXIiLCJsaWZlcmF5LXN0b3JlIl19LCJsaWZlcmF5LW1lc3NhZ2UiOntwYXRoOiJtZXNzYWdlLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwibGlmZXJheS1zdG9yZSJdfSwibGlmZXJheS1uYXZpZ2F0aW9uIjp7cGF0aDoibmF2aWdhdGlvbi5qcyIsCnBsdWdpbnM6eyJsaWZlcmF5LW5hdmlnYXRpb24tdG91Y2giOntjb25kaXRpb246e25hbWU6ImxpZmVyYXktbmF2aWdhdGlvbi10b3VjaCIsdHJpZ2dlcjoibGlmZXJheS1uYXZpZ2F0aW9uIix1YToidG91Y2gifX19LHJlcXVpcmVzOlsiYXVpLWNvbXBvbmVudCIsImV2ZW50LW1vdXNlZW50ZXIiXX0sImxpZmVyYXktbmF2aWdhdGlvbi1pbnRlcmFjdGlvbiI6e3BhdGg6Im5hdmlnYXRpb25faW50ZXJhY3Rpb24uanMiLHBsdWdpbnM6eyJsaWZlcmF5LW5hdmlnYXRpb24taW50ZXJhY3Rpb24tdG91Y2giOntjb25kaXRpb246e25hbWU6ImxpZmVyYXktbmF2aWdhdGlvbi1pbnRlcmFjdGlvbi10b3VjaCIsdHJpZ2dlcjoibGlmZXJheS1uYXZpZ2F0aW9uLWludGVyYWN0aW9uIix1YToidG91Y2gifX19LHJlcXVpcmVzOlsiYXVpLWJhc2UiLCJhdWktY29tcG9uZW50IiwiZXZlbnQtbW91c2VlbnRlciIsIm5vZGUtZm9jdXNtYW5hZ2VyIiwicGx1Z2luIl19LCJsaWZlcmF5LW5hdmlnYXRpb24taW50ZXJhY3Rpb24tdG91Y2giOntwYXRoOiJuYXZpZ2F0aW9uX2ludGVyYWN0aW9uX3RvdWNoLmpzIiwKcmVxdWlyZXM6WyJldmVudC10YXAiLCJldmVudC10b3VjaCIsImxpZmVyYXktbmF2aWdhdGlvbi1pbnRlcmFjdGlvbiJdfSwibGlmZXJheS1uYXZpZ2F0aW9uLXRvdWNoIjp7cGF0aDoibmF2aWdhdGlvbl90b3VjaC5qcyIscmVxdWlyZXM6WyJldmVudC10b3VjaCIsImxpZmVyYXktbmF2aWdhdGlvbiJdfSwibGlmZXJheS1ub2RlIjp7cGF0aDoibm9kZS5qcyIscmVxdWlyZXM6WyJkb20tYmFzZSJdfSwibGlmZXJheS1ub3RpY2UiOntwYXRoOiJub3RpY2UuanMiLHJlcXVpcmVzOlsiYXVpLWJhc2UiLCJ0cmFuc2l0aW9uIl19LCJsaWZlcmF5LW5vdGlmaWNhdGlvbiI6e3BhdGg6Im5vdGlmaWNhdGlvbi5qcyIscmVxdWlyZXM6WyJsaWZlcmF5LWFsZXJ0Il19LCJsaWZlcmF5LXBhZ2luYXRpb24iOntwYXRoOiJwYWdpbmF0aW9uLmpzIixyZXF1aXJlczpbImF1aS1wYWdpbmF0aW9uIl19LCJsaWZlcmF5LXBhbmVsLXNlYXJjaCI6e3BhdGg6InBhbmVsX3NlYXJjaC5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsCiJsaWZlcmF5LXNlYXJjaC1maWx0ZXIiXX0sImxpZmVyYXktcG9sbGVyIjp7cGF0aDoicG9sbGVyLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiaW8iLCJqc29uIl19LCJsaWZlcmF5LXBvcnRsZXQtYmFzZSI6e3BhdGg6InBvcnRsZXRfYmFzZS5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsImxpZmVyYXktbm9kZSJdfSwibGlmZXJheS1wb3J0bGV0LXVybCI6e3BhdGg6InBvcnRsZXRfdXJsLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiYXVpLWlvLXJlcXVlc3QiLCJxdWVyeXN0cmluZy1zdHJpbmdpZnktc2ltcGxlIl19LCJsaWZlcmF5LXByZXZpZXciOntwYXRoOiJwcmV2aWV3LmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiYXVpLW92ZXJsYXktbWFzay1kZXByZWNhdGVkIiwiYXVpLXRvb2xiYXIiLCJsaWZlcmF5LXdpZGdldC16aW5kZXgiXX0sImxpZmVyYXktcHJvZ3Jlc3MiOntwYXRoOiJwcm9ncmVzcy5qcyIscmVxdWlyZXM6WyJhdWktcHJvZ3Jlc3NiYXIiXX0sImxpZmVyYXktcmF0aW5ncyI6e3BhdGg6InJhdGluZ3MuanMiLApyZXF1aXJlczpbImF1aS1pby1yZXF1ZXN0IiwiYXVpLXJhdGluZyJdfSwibGlmZXJheS1yZXNpemUtcnRsIjp7Y29uZGl0aW9uOnt0ZXN0OmZ1bmN0aW9uKGIpe3JldHVybiJydGwiPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpcn0sdHJpZ2dlcjoicmVzaXplLWJhc2UifSxwYXRoOiJyZXNpemVfcnRsLmpzIn0sImxpZmVyYXktcmVzdG9yZS1lbnRyeSI6e3BhdGg6InJlc3RvcmVfZW50cnkuanMiLHJlcXVpcmVzOlsiYXVpLWlvLXBsdWdpbi1kZXByZWNhdGVkIiwiYXVpLWlvLXJlcXVlc3QiLCJhdWktbW9kYWwiLCJsaWZlcmF5LXBvcnRsZXQtYmFzZSJdfSwibGlmZXJheS1zZWFyY2gtY29udGFpbmVyIjp7cGF0aDoic2VhcmNoX2NvbnRhaW5lci5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsImF1aS1kYXRhdGFibGUtY29yZSJdfSwibGlmZXJheS1zZWFyY2gtY29udGFpbmVyLW1vdmUiOntwYXRoOiJzZWFyY2hfY29udGFpbmVyX21vdmUuanMiLHJlcXVpcmVzOiJhdWktY29tcG9uZW50IGRkLWNvbnN0cmFpbiBkZC1kZWxlZ2F0ZSBkZC1kcmFnIGRkLWRyb3AgZGQtcHJveHkgcGx1Z2luIi5zcGxpdCgiICIpfSwKImxpZmVyYXktc2VhcmNoLWNvbnRhaW5lci1zZWxlY3QiOntwYXRoOiJzZWFyY2hfY29udGFpbmVyX3NlbGVjdC5qcyIscmVxdWlyZXM6WyJhdWktY29tcG9uZW50IiwiYXVpLXVybCIsInBsdWdpbiJdfSwibGlmZXJheS1zZWFyY2gtZmlsdGVyIjp7cGF0aDoic2VhcmNoX2ZpbHRlci5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSIsImF1dG9jb21wbGV0ZS1iYXNlIiwiYXV0b2NvbXBsZXRlLWZpbHRlcnMiXX0sImxpZmVyYXktc2VydmljZS1kYXRhc291cmNlIjp7cGF0aDoic2VydmljZV9kYXRhc291cmNlLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiZGF0YXNvdXJjZS1sb2NhbCJdfSwibGlmZXJheS1zZXNzaW9uIjp7cGF0aDoic2Vzc2lvbi5qcyIscmVxdWlyZXM6WyJhdWktaW8tcmVxdWVzdCIsImF1aS10aW1lciIsImNvb2tpZSIsImxpZmVyYXktbm90aWZpY2F0aW9uIl19LCJsaWZlcmF5LXNpZ24taW4tbW9kYWwiOntwYXRoOiJzaWduX2luX21vZGFsLmpzIixyZXF1aXJlczoiYXVpLWJhc2UgYXVpLWNvbXBvbmVudCBhdWktaW8tcmVxdWVzdCBhdWktcGFyc2UtY29udGVudCBsaWZlcmF5LWZvcm0gbGlmZXJheS1wb3J0bGV0LXVybCBsaWZlcmF5LXV0aWwtd2luZG93IHBsdWdpbiIuc3BsaXQoIiAiKX0sCiJsaWZlcmF5LXNvY2lhbC1ib29rbWFya3MiOntwYXRoOiJzb2NpYWxfYm9va21hcmtzLmpzIixyZXF1aXJlczpbImF1aS1jb21wb25lbnQiLCJhdWktbm9kZSJdfSwibGlmZXJheS1zb3J0YWJsZSI6e3BhdGg6InNvcnRhYmxlLmpzIixyZXF1aXJlczpbImxpZmVyYXktZGQtcHJveHkiLCJzb3J0YWJsZSJdfSwibGlmZXJheS1zb3VyY2UtZWRpdG9yIjp7cGF0aDoic291cmNlX2VkaXRvci5qcyIscmVxdWlyZXM6WyJhdWktYWNlLWVkaXRvciJdfSwibGlmZXJheS1zdG9yYWdlLWZvcm1hdHRlciI6e3BhdGg6InN0b3JhZ2VfZm9ybWF0dGVyLmpzIixyZXF1aXJlczpbImF1aS1iYXNlIiwiZGF0YXR5cGUtbnVtYmVyLWZvcm1hdCJdfSwibGlmZXJheS1zdG9yZSI6e3BhdGg6InN0b3JlLmpzIixyZXF1aXJlczpbImF1aS1pby1yZXF1ZXN0Il19LCJsaWZlcmF5LXRvZ2dsZXItaW50ZXJhY3Rpb24iOntwYXRoOiJ0b2dnbGVyX2ludGVyYWN0aW9uLmpzIixyZXF1aXJlczpbImxpZmVyYXktdG9nZ2xlci1rZXktZmlsdGVyIl19LAoibGlmZXJheS10b2dnbGVyLWtleS1maWx0ZXIiOntwYXRoOiJ0b2dnbGVyX2tleV9maWx0ZXIuanMiLHJlcXVpcmVzOlsiYXVpLWV2ZW50LWJhc2UiXX0sImxpZmVyYXktdG9rZW4tbGlzdCI6e3BhdGg6InRva2VuX2xpc3QuanMiLHJlcXVpcmVzOlsiYXVpLWJhc2UiLCJhdWktdGVtcGxhdGUtZGVwcmVjYXRlZCJdfSwibGlmZXJheS10cmFuc2xhdGlvbi1tYW5hZ2VyIjp7cGF0aDoidHJhbnNsYXRpb25fbWFuYWdlci5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSJdfSwibGlmZXJheS11bmRvLW1hbmFnZXIiOntwYXRoOiJ1bmRvX21hbmFnZXIuanMiLHJlcXVpcmVzOlsiYXVpLWRhdGEtc2V0LWRlcHJlY2F0ZWQiLCJiYXNlIl19LCJsaWZlcmF5LXVwbG9hZCI6e3BhdGg6InVwbG9hZC5qcyIscmVxdWlyZXM6ImF1aS1pby1yZXF1ZXN0IGF1aS10ZW1wbGF0ZS1kZXByZWNhdGVkIGNvbGxlY3Rpb24gbGlmZXJheS1wb3J0bGV0LWJhc2UgbGlmZXJheS1zdG9yYWdlLWZvcm1hdHRlciB1cGxvYWRlciIuc3BsaXQoIiAiKX0sCiJsaWZlcmF5LXVybC1wcmV2aWV3Ijp7cGF0aDoidXJsX3ByZXZpZXcuanMiLHJlcXVpcmVzOlsiYXVpLWNvbXBvbmVudCIsImxpZmVyYXktdXRpbC13aW5kb3ciXX0sImxpZmVyYXktdXRpbC13aW5kb3ciOntwYXRoOiJ1dGlsX3dpbmRvdy5qcyIscmVxdWlyZXM6WyJhdWktZGlhbG9nLWlmcmFtZS1kZXByZWNhdGVkIiwiYXVpLW1vZGFsIiwiZXZlbnQtcmVzaXplIiwibGlmZXJheS13aWRnZXQtemluZGV4Il19LCJsaWZlcmF5LXdpZGdldC1zaXplLWFuaW1hdGlvbi1wbHVnaW4iOntwYXRoOiJ3aWRnZXRfc2l6ZV9hbmltYXRpb25fcGx1Z2luLmpzIixyZXF1aXJlczpbImFuaW0tZWFzaW5nIiwicGx1Z2luIiwid2lkZ2V0Il19LCJsaWZlcmF5LXdpZGdldC16aW5kZXgiOntwYXRoOiJ3aWRnZXRfemluZGV4LmpzIixyZXF1aXJlczpbImF1aS1tb2RhbCIsInBsdWdpbiJdfSwibGlmZXJheS14bWwtZm9ybWF0dGVyIjp7cGF0aDoieG1sX2Zvcm1hdHRlci5qcyIscmVxdWlyZXM6WyJhdWktYmFzZSJdfX0sCnJvb3Q6ZCsiL2xpZmVyYXkvIn0sbWlzYzp7YmFzZTpkKyIvbWlzYy8iLGNvbWJpbmU6RSxtb2R1bGVzOntzd2ZvYmplY3Q6e3BhdGg6Ii9zd2ZvYmplY3QuanMifSxzd2Z1cGxvYWQ6e3BhdGg6Ii9zd2Z1cGxvYWQvc3dmdXBsb2FkLmpzIn19LHJvb3Q6ZCsiL21pc2MvIn0scG9ydGFsOntiYXNlOmQrIi9saWZlcmF5LyIsY29tYmluZTohMSxtb2R1bGVzOnsicG9ydGFsLWF2YWlsYWJsZS1sYW5ndWFnZXMiOntwYXRoOmEuZ2V0QXZhaWxhYmxlTGFuZ1BhdGgoKSxyZXF1aXJlczpbImxpZmVyYXktbGFuZ3VhZ2UiXX19LHJvb3Q6ZCsiL2xpZmVyYXkvIn19LGluc2VydEJlZm9yZToibGlmZXJheVBvcnRhbENTUyIsbGFuZzp0aGVtZURpc3BsYXkuZ2V0QkNQNDdMYW5ndWFnZUlkKCkscm9vdDpkKyIvYXVpLyIsdXNlQnJvd3NlckNvbnNvbGU6ITF9O3EucHVzaCgibGlmZXJheS1icm93c2VyLXNlbGVjdG9ycyIpfSkoKTsKKGZ1bmN0aW9uKCl7dmFyIGE9WVVJKCk7YS5odG1sNXNoaXYmJmEuaHRtbDVzaGl2KCk7dmFyIEU9YS51c2U7YS51c2U9ZnVuY3Rpb24oKXt2YXIgcT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCksdD1MaWZlcmF5LmN1cnJlbnRVUkwsZj1xW3EubGVuZ3RoLTFdOyJmdW5jdGlvbiI9PT10eXBlb2YgZiYmKHFbcS5sZW5ndGgtMV09ZnVuY3Rpb24oKXtMaWZlcmF5LmN1cnJlbnRVUkw9PT10JiZmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO3JldHVybiBFLmFwcGx5KHRoaXMscSl9O3dpbmRvdy5BVUk9ZnVuY3Rpb24oKXtyZXR1cm4gYX07YS5taXgoQVVJLFlVSSk7QVVJLiQ9d2luZG93LmpRdWVyeTtBVUkuXz13aW5kb3cuX30pKCk7CihmdW5jdGlvbihhKXt2YXIgRT1mdW5jdGlvbih0KXt0aGlzLiRlbGVtZW50PWEodCk7dGhpcy4kY2xvc2U9dGhpcy4kZWxlbWVudC5maW5kKCIuYmFzaWMtc2VhcmNoLWNsb3NlIik7dGhpcy4kaW5wdXQ9dGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dFt0eXBlXHgzZCJ0ZXh0Il0nKTt0aGlzLiRzdWJtaXQ9dGhpcy4kZWxlbWVudC5maW5kKCdbdHlwZVx4M2Qic3VibWl0Il0nKTt0aGlzLiRjbG9zZS5vbigiY2xpY2subGV4aWNvbi5jbG9zZS5jb2xsYXBzaWJsZS1zZWFyY2giLGEucHJveHkodGhpcy5jbG9zZSx0aGlzKSk7dGhpcy4kaW5wdXQub24oImJsdXIubGV4aWNvbi5jb2xsYXBzaWJsZS1zZWFyY2giLGEucHJveHkodGhpcy5ibHVyLHRoaXMpKTt0aGlzLiRpbnB1dC5vbigiZm9jdXMubGV4aWNvbi5jb2xsYXBzaWJsZS1zZWFyY2giLGEucHJveHkodGhpcy5mb2N1cyx0aGlzKSk7dGhpcy4kc3VibWl0Lm9uKCJjbGljay5sZXhpY29uLnN1Ym1pdC5jb2xsYXBzaWJsZS1zZWFyY2giLAphLnByb3h5KHRoaXMuc3VibWl0LHRoaXMpKX07RS5CUkVBS1BPSU5UPTc2ODtFLlRSQU5TSVRJT05fRFVSQVRJT049NTAwO0UucHJvdG90eXBlPXtibHVyOmZ1bmN0aW9uKHQpe2EodC5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KCIuYmFzaWMtc2VhcmNoIikucmVtb3ZlQ2xhc3MoImZvY3VzIil9LGNsb3NlOmZ1bmN0aW9uKHQpe3ZhciBmPWEodC5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KCIuYmFzaWMtc2VhcmNoIik7dD1mLmZpbmQoIi5iYXNpYy1zZWFyY2gtc2xpZGVyIik7dmFyIGQ9Zi5maW5kKCdbdHlwZVx4M2Qic3VibWl0Il0nKSxjPWZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGFzcygiYmFzaWMtc2VhcmNoLXRyYW5zaXRpb24iKTtmLnRyaWdnZXIoImNsb3NlZC5sZXhpY29uLmNvbGxhcHNpYmxlLnNlYXJjaCIpfSxiPWEuc3VwcG9ydC50cmFuc2l0aW9uO2ImJnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoYyx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoRS5UUkFOU0lUSU9OX0RVUkFUSU9OKTsKZi5hZGRDbGFzcygiYmFzaWMtc2VhcmNoLXRyYW5zaXRpb24iKS5yZW1vdmVDbGFzcygib3BlbiIpO2I/ZC5mb2N1cygpOmMuY2FsbCh0aGlzKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuJGNsb3NlLm9mZigiY2xpY2subGV4aWNvbi5jbG9zZS5jb2xsYXBzaWJsZS1zZWFyY2giKTt0aGlzLiRpbnB1dC5vZmYoImJsdXIubGV4aWNvbi5jb2xsYXBzaWJsZS1zZWFyY2giKTt0aGlzLiRpbnB1dC5vZmYoImZvY3VzLmxleGljb24uY29sbGFwc2libGUtc2VhcmNoIik7dGhpcy4kc3VibWl0Lm9mZigiY2xpY2subGV4aWNvbi5zdWJtaXQuY29sbGFwc2libGUtc2VhcmNoIil9LGZvY3VzOmZ1bmN0aW9uKHQpe2EodC5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KCIuYmFzaWMtc2VhcmNoIikuYWRkQ2xhc3MoImZvY3VzIil9LHN1Ym1pdDpmdW5jdGlvbih0KXtpZih3aW5kb3cuaW5uZXJXaWR0aDxFLkJSRUFLUE9JTlQpe3ZhciBmPWEodC5jdXJyZW50VGFyZ2V0KS5wYXJlbnRzKCIuYmFzaWMtc2VhcmNoIiksCmQ9Zi5maW5kKCdpbnB1dFt0eXBlXHgzZCJ0ZXh0Il0nKSxjPWYuZmluZCgiLmJhc2ljLXNlYXJjaC1zbGlkZXIiKSxiPWZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGFzcygiYmFzaWMtc2VhcmNoLXRyYW5zaXRpb24iKTtkLmZvY3VzKCk7Zi50cmlnZ2VyKCJvcGVuLmxleGljb24uY29sbGFwc2libGUuc2VhcmNoIil9O2YuaGFzQ2xhc3MoIm9wZW4iKXx8KHQucHJldmVudERlZmF1bHQoKSwodD1hLnN1cHBvcnQudHJhbnNpdGlvbikmJmMub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoYix0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoRS5UUkFOU0lUSU9OX0RVUkFUSU9OKSxmLmFkZENsYXNzKCJiYXNpYy1zZWFyY2gtdHJhbnNpdGlvbiIpLmFkZENsYXNzKCJvcGVuIiksdHx8Yi5jYWxsKHRoaXMpKX19fTt2YXIgcT1hLmZuLmNvbGxhcHNpYmxlU2VhcmNoO2EuZm4uY29sbGFwc2libGVTZWFyY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPQphKHRoaXMpLGQ9Zi5kYXRhKCJsZXhpY29uLmNvbGxhcHNpYmxlLXNlYXJjaCIpO2R8fChkPW5ldyBFKHRoaXMpLGYuZGF0YSgibGV4aWNvbi5jb2xsYXBzaWJsZS1zZWFyY2giLGQpKTtpZigic3RyaW5nIj09dHlwZW9mIHQpZFt0XSgpfSl9O2EuZm4uY29sbGFwc2libGVTZWFyY2guQ29uc3RydWN0b3I9RTthLmZuLmNvbGxhcHNpYmxlU2VhcmNoLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXthLmZuLmNvbGxhcHNpYmxlU2VhcmNoPXE7cmV0dXJuIHRoaXN9O2EoZG9jdW1lbnQpLm9uKCJibHVyLmxleGljb24uY29sbGFwc2libGUtc2VhcmNoLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXHgzZCJjb2xsYXBzaWJsZS1zZWFyY2giXSBpbnB1dFt0eXBlXHgzZCJ0ZXh0Il0nLGEucHJveHkoRS5wcm90b3R5cGUuYmx1cixFKSkub24oImNsaWNrLmxleGljb24uY2xvc2UuY29sbGFwc2libGUtc2VhcmNoLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXHgzZCJjb2xsYXBzaWJsZS1zZWFyY2giXSAuYmFzaWMtc2VhcmNoLWNsb3NlJywKYS5wcm94eShFLnByb3RvdHlwZS5jbG9zZSxFKSkub24oImNsaWNrLmxleGljb24uc3VibWl0LmNvbGxhcHNpYmxlLXNlYXJjaC5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZVx4M2QiY29sbGFwc2libGUtc2VhcmNoIl0gW3R5cGVceDNkInN1Ym1pdCJdJyxhLnByb3h5KEUucHJvdG90eXBlLnN1Ym1pdCxFKSkub24oImZvY3VzLmxleGljb24uY29sbGFwc2libGUtc2VhcmNoLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXHgzZCJjb2xsYXBzaWJsZS1zZWFyY2giXSBpbnB1dFt0eXBlXHgzZCJ0ZXh0Il0nLGEucHJveHkoRS5wcm90b3R5cGUuZm9jdXMsRSkpfSkoalF1ZXJ5KTsKKGZ1bmN0aW9uKGEpe3ZhciBFPWEoZG9jdW1lbnQpLHE9ITEsdD1mdW5jdGlvbigpe3F8fChhKHdpbmRvdykub24oInJlc2l6ZSIsZihmdW5jdGlvbihlKXtFLnRyaWdnZXIoInNjcmVlbkNoYW5nZS5sZXhpY29uLnNpZGVuYXYiKX0sMTUwKSkscT0hMCl9LGY9ZnVuY3Rpb24oZSxrKXt2YXIgbTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcD10aGlzLHM9YXJndW1lbnRzO2NsZWFyVGltZW91dChtKTttPXNldFRpbWVvdXQoZnVuY3Rpb24oKXttPW51bGw7ZS5hcHBseShwLHMpfSxrKX19LGQ9ZnVuY3Rpb24oKXt2YXIgZT0wO3JldHVybiBmdW5jdGlvbihrLG0pe3ZhciBwPWsuYXR0cigiaWQiKTtwfHwocD1tK2UrKyxrLmF0dHIoImlkIixwKSk7cmV0dXJuIHB9fSgpLGM9ZnVuY3Rpb24oZSxrKXt0aGlzLmluaXQoZSxrKX07Yy5UUkFOU0lUSU9OX0RVUkFUSU9OPTUwMDtjLnByb3RvdHlwZT17aW5pdDpmdW5jdGlvbihlLGspe3ZhciBtPSJzaWRlbmF2Ij09PWUuZGF0YSgidG9nZ2xlIik7Cms9YS5leHRlbmQoe30sYS5mbi5zaWRlTmF2aWdhdGlvbi5kZWZhdWx0cyxrKTtrLmJyZWFrcG9pbnQ9cGFyc2VJbnQoay5icmVha3BvaW50LDEwKXx8MDtrLmNvbnRhaW5lcj1rLmNvbnRhaW5lcnx8ZS5kYXRhKCJ0YXJnZXQiKXx8ZS5hdHRyKCJocmVmIik7ay5ndXR0ZXI9cGFyc2VJbnQoay5ndXR0ZXIsMTApfHwwO2sucnRsPSJydGwiPT09RS5hdHRyKCJkaXIiKTtrLndpZHRoPXBhcnNlSW50KGsud2lkdGgsMTApfHwwO2sud2lkdGhPcmlnaW5hbD1rLndpZHRoO20mJihrLmNsb3NlZENsYXNzPWUuZGF0YSgiY2xvc2VkLWNsYXNzIil8fCJjbG9zZWQiLGsuY29udGVudD1lLmRhdGEoImNvbnRlbnQiKSxrLmVxdWFsSGVpZ2h0PSExLGsubG9hZGluZ0luZGljYXRvclRQTD1lLmRhdGEoImxvYWRpbmctaW5kaWNhdG9yLXRwbCIpfHxrLmxvYWRpbmdJbmRpY2F0b3JUUEwsay5vcGVuQ2xhc3M9ZS5kYXRhKCJvcGVuLWNsYXNzIil8fCJvcGVuIixrLnRvZ2dsZXI9ZSxrLnR5cGU9ZS5kYXRhKCJ0eXBlIiksCmsudHlwZU1vYmlsZT1lLmRhdGEoInR5cGUtbW9iaWxlIiksay51cmw9ZS5kYXRhKCJ1cmwiKSxrLnVzZURlbGVnYXRlPWUuZGF0YSgidXNlLWRlbGVnYXRlIiksay53aWR0aD0iIix2b2lkIDA9PT1rLnVzZURlbGVnYXRlJiYoay51c2VEZWxlZ2F0ZT0hMCkpO3RoaXMudG9nZ2xlcj1lO3RoaXMub3B0aW9ucz1rO3RoaXMudXNlRGF0YUF0dHJpYnV0ZT1tO3RoaXMuX2JpbmRVSSgpO3RoaXMuX3JlbmRlclVJKCl9LGNsZWFyU3R5bGU6ZnVuY3Rpb24oZSl7dmFyIGs9dGhpcy5vcHRpb25zLG09YShrLmNvbnRhaW5lcikscD1tLmZpbmQoay5jb250ZW50KS5maXJzdCgpLGs9bS5maW5kKGsubmF2aWdhdGlvbikuZmlyc3QoKSxtPW0uZmluZCgiLnNpZGVuYXYtbWVudSIpLmZpcnN0KCk7cC5hZGQoaykuYWRkKG0pLmNzcyhlLCIiKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucyxrPWEodGhpcy5vcHRpb25zLmNvbnRhaW5lcik7RS5vZmYoImNsaWNrLmNsb3NlLmxleGljb24uc2lkZW5hdiIsCnRoaXMuY2xvc2VCdXR0b25TZWxlY3Rvcik7RS5kYXRhKHRoaXMuZGF0YUNsb3NlQnV0dG9uU2VsZWN0b3IsbnVsbCk7ZS51c2VEZWxlZ2F0ZT8oRS5vZmYoImNsaWNrLmxleGljb24uc2lkZW5hdiIsdGhpcy50b2dnbGVyU2VsZWN0b3IpLEUuZGF0YSh0aGlzLmRhdGFUb2dnbGVyU2VsZWN0b3IsbnVsbCkpOmsub2ZmKCJjbGljay5sZXhpY29uLnNpZGVuYXYiKTtrLmRhdGEoImxleGljb24uc2lkZW5hdiIsbnVsbCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLnVzZURhdGFBdHRyaWJ1dGU/dGhpcy5oaWRlU2ltcGxlU2lkZW5hdigpOnRoaXMudG9nZ2xlTmF2aWdhdGlvbighMSl9LGhpZGVTaWRlbmF2OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLGs9YShlLmNvbnRhaW5lciksbT1rLmZpbmQoZS5jb250ZW50KS5maXJzdCgpLGs9ay5maW5kKGUubmF2aWdhdGlvbikuZmlyc3QoKSxwPWsuZmluZCgiLnNpZGVuYXYtbWVudSIpLmZpcnN0KCkscz10aGlzLl9pc1NpZGVuYXZSaWdodCgpLApsPWUucnRsPyJyaWdodCI6ImxlZnQiO3MmJihsPWUucnRsPyJsZWZ0IjoicmlnaHQiKTttLmNzcygicGFkZGluZy0iK2wsIiIpLmNzcyhsLCIiKTtrLmNzcygid2lkdGgiLCIiKTtzJiZwLmNzcyhsLHRoaXMuX2dldFNpZGVuYXZXaWR0aCgpKX0saGlkZVNpbXBsZVNpZGVuYXY6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGs9ZS5vcHRpb25zO2lmKCFlLl9pc1NpbXBsZVNpZGVuYXZDbG9zZWQoKSl7dmFyIG09YShrLmNvbnRlbnQpLmZpcnN0KCkscD1hKGsuY29udGFpbmVyKSxzPWsuY2xvc2VkQ2xhc3Msaz1rLm9wZW5DbGFzcyxsPWUudG9nZ2xlcjtwLnRyaWdnZXIoe3RvZ2dsZXI6YShlLnRvZ2dsZXJTZWxlY3RvciksdHlwZToiY2xvc2VkU3RhcnQubGV4aWNvbi5zaWRlbmF2In0pO2UuX29uU2lkZW5hdlRyYW5zaXRpb25FbmQobSxmdW5jdGlvbigpe3AucmVtb3ZlQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpO2wucmVtb3ZlQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpO3AudHJpZ2dlcih7dG9nZ2xlcjphKGUudG9nZ2xlclNlbGVjdG9yKSwKdHlwZToiY2xvc2VkLmxleGljb24uc2lkZW5hdiJ9KX0pO20uaGFzQ2xhc3MoaykmJm0uYWRkQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpLmFkZENsYXNzKHMpLnJlbW92ZUNsYXNzKGspO3AuYWRkQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpO2wuYWRkQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpO3AuYWRkQ2xhc3MocykucmVtb3ZlQ2xhc3Moayk7bC5yZW1vdmVDbGFzcyhrKS5yZW1vdmVDbGFzcygiYWN0aXZlIil9fSxzZXRFcXVhbEhlaWdodDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztpZihlLmVxdWFsSGVpZ2h0KXt2YXIgaz1hKGUuY29udGFpbmVyKSxtPWUuY29udGVudCxwPWUubmF2aWdhdGlvbixlPXRoaXMubW9iaWxlP2UudHlwZU1vYmlsZTplLnR5cGU7ImZpeGVkIiE9PWUmJiJmaXhlZC1wdXNoIiE9PWUmJihtPWsuZmluZChtKS5maXJzdCgpLHA9ay5maW5kKHApLmZpcnN0KCksaz1rLmZpbmQoIi5zaWRlbmF2LW1lbnUiKS5maXJzdCgpLGU9TWF0aC5tYXgobS5vdXRlckhlaWdodCgpLApwLm91dGVySGVpZ2h0KCkpLG0uY3NzKCJtaW4taGVpZ2h0IixlKSxwLmNzcygibWluLWhlaWdodCIsZSksay5jc3MoIm1pbi1oZWlnaHQiLGUpKX19LHNob3c6ZnVuY3Rpb24oKXt0aGlzLnVzZURhdGFBdHRyaWJ1dGU/dGhpcy5zaG93U2ltcGxlU2lkZW5hdigpOnRoaXMudG9nZ2xlTmF2aWdhdGlvbighMCl9LHNob3dTaWRlbmF2OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxrPWUubW9iaWxlLG09ZS5vcHRpb25zLHA9YShtLmNvbnRhaW5lcikscz1wLmZpbmQobS5jb250ZW50KS5maXJzdCgpLGw9cC5maW5kKG0ubmF2aWdhdGlvbikuZmlyc3QoKSxoPWwuZmluZCgiLnNpZGVuYXYtbWVudSIpLmZpcnN0KCksdT1lLl9pc1NpZGVuYXZSaWdodCgpLHc9ZS5fZ2V0U2lkZW5hdldpZHRoKCksej13K20uZ3V0dGVyLEE9bS51cmw7QSYmKHAub25lKCJ1cmxMb2FkZWQubGV4aWNvbi5zaWRlbmF2IixmdW5jdGlvbihIKXtlLnNldEVxdWFsSGVpZ2h0KCl9KSxlLl9sb2FkVXJsKGgsQSxwKSk7cD0KbS5ydGw/InJpZ2h0IjoibGVmdCI7dSYmKHA9bS5ydGw/ImxlZnQiOiJyaWdodCIpO3U9az9wOiJwYWRkaW5nLSIrcDsiZml4ZWQiIT09KGs/bS50eXBlTW9iaWxlOm0udHlwZSkmJnMuY3NzKHUseik7bC5jc3MoIndpZHRoIix3KTtoLmNzcygid2lkdGgiLHcpfSxzaG93U2ltcGxlU2lkZW5hdjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsaz1lLm9wdGlvbnM7aWYoZS5faXNTaW1wbGVTaWRlbmF2Q2xvc2VkKCkpe3ZhciBtPWEoay5jb250ZW50KS5maXJzdCgpLHA9YShrLmNvbnRhaW5lcikscz1rLmNsb3NlZENsYXNzLGw9ay5vcGVuQ2xhc3MsaD1rLnRvZ2dsZXI7KGs9aC5kYXRhKCJ1cmwiKSkmJmUuX2xvYWRVcmwocCxrKTtwLnRyaWdnZXIoe3RvZ2dsZXI6YShlLnRvZ2dsZXJTZWxlY3RvciksdHlwZToib3BlblN0YXJ0LmxleGljb24uc2lkZW5hdiJ9KTtlLl9vblNpZGVuYXZUcmFuc2l0aW9uRW5kKG0sZnVuY3Rpb24oKXtwLnJlbW92ZUNsYXNzKCJzaWRlbmF2LXRyYW5zaXRpb24iKTsKaC5yZW1vdmVDbGFzcygic2lkZW5hdi10cmFuc2l0aW9uIik7cC50cmlnZ2VyKHt0b2dnbGVyOmEoZS50b2dnbGVyU2VsZWN0b3IpLHR5cGU6Im9wZW4ubGV4aWNvbi5zaWRlbmF2In0pfSk7bS5hZGRDbGFzcygic2lkZW5hdi10cmFuc2l0aW9uIikuYWRkQ2xhc3MobCkucmVtb3ZlQ2xhc3Mocyk7cC5hZGRDbGFzcygic2lkZW5hdi10cmFuc2l0aW9uIik7aC5hZGRDbGFzcygic2lkZW5hdi10cmFuc2l0aW9uIik7cC5hZGRDbGFzcyhsKS5yZW1vdmVDbGFzcyhzKTtoLmFkZENsYXNzKCJhY3RpdmUiKS5hZGRDbGFzcyhsKX19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMudXNlRGF0YUF0dHJpYnV0ZT90aGlzLnRvZ2dsZVNpbXBsZVNpZGVuYXYoKTp0aGlzLnRvZ2dsZU5hdmlnYXRpb24oKX0sdG9nZ2xlTmF2aWdhdGlvbjpmdW5jdGlvbihlKXt2YXIgaz10aGlzLG09ay5vcHRpb25zLHA9YShtLmNvbnRhaW5lcikscz1wLmZpbmQoIi5zaWRlbmF2LW1lbnUiKS5maXJzdCgpLGw9ay50b2dnbGVyLApoPW0ud2lkdGg7ZT0iYm9vbGVhbiI9PT1hLnR5cGUoZSk/ZTpwLmhhc0NsYXNzKCJjbG9zZWQiKTt2YXIgdT1rLl9pc1NpZGVuYXZSaWdodCgpLHc9ZT8ic2hvd1NpZGVuYXYiOiJoaWRlU2lkZW5hdiI7ZT9wLnRyaWdnZXIoe3RvZ2dsZXI6bCx0eXBlOiJvcGVuU3RhcnQubGV4aWNvbi5zaWRlbmF2In0pOnAudHJpZ2dlcih7dG9nZ2xlcjpsLHR5cGU6ImNsb3NlZFN0YXJ0LmxleGljb24uc2lkZW5hdiJ9KTtrLl9vblNpZGVuYXZUcmFuc2l0aW9uRW5kKHAsZnVuY3Rpb24oKXt2YXIgej1wLmZpbmQoIi5zaWRlbmF2LW1lbnUiKS5maXJzdCgpO3AuaGFzQ2xhc3MoImNsb3NlZCIpPyhrLmNsZWFyU3R5bGUoIm1pbi1oZWlnaHQiKSxsLnJlbW92ZUNsYXNzKCJvcGVuIikucmVtb3ZlQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpLHAudHJpZ2dlcih7dG9nZ2xlcjpsLHR5cGU6ImNsb3NlZC5sZXhpY29uLnNpZGVuYXYifSkpOihsLmFkZENsYXNzKCJvcGVuIikucmVtb3ZlQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpLApwLnRyaWdnZXIoe3RvZ2dsZXI6bCx0eXBlOiJvcGVuLmxleGljb24uc2lkZW5hdiJ9KSk7ay5tb2JpbGUmJmsuX2ZvY3VzRWxlbWVudCh6KX0pO2UmJihrLnNldEVxdWFsSGVpZ2h0KCkscy5jc3MoIndpZHRoIixoKSxtPW0ucnRsPyJsZWZ0IjoicmlnaHQiLHUmJnMuY3NzKG0sIiIpKTtwLmFkZENsYXNzKCJzaWRlbmF2LXRyYW5zaXRpb24iKTtsLmFkZENsYXNzKCJzaWRlbmF2LXRyYW5zaXRpb24iKTtrW3ddKHApO3AudG9nZ2xlQ2xhc3MoImNsb3NlZCIsIWUpLnRvZ2dsZUNsYXNzKCJvcGVuIixlKTtsLnRvZ2dsZUNsYXNzKCJhY3RpdmUiLGUpLnRvZ2dsZUNsYXNzKCJvcGVuIixlKX0sdG9nZ2xlU2ltcGxlU2lkZW5hdjpmdW5jdGlvbigpe3RoaXMuX2lzU2ltcGxlU2lkZW5hdkNsb3NlZCgpP3RoaXMuc2hvd1NpbXBsZVNpZGVuYXYoKTp0aGlzLmhpZGVTaW1wbGVTaWRlbmF2KCl9LHZpc2libGU6ZnVuY3Rpb24oKXt2YXIgZTt0aGlzLnVzZURhdGFBdHRyaWJ1dGU/ZT10aGlzLl9pc1NpbXBsZVNpZGVuYXZDbG9zZWQoKToKKGU9YSh0aGlzLm9wdGlvbnMuY29udGFpbmVyKSxlPWUuaGFzQ2xhc3MoInNpZGVuYXYtdHJhbnNpdGlvbiIpPyFlLmhhc0NsYXNzKCJjbG9zZWQiKTplLmhhc0NsYXNzKCJjbG9zZWQiKSk7cmV0dXJuIWV9LF9iaW5kVUk6ZnVuY3Rpb24oKXt0aGlzLnVzZURhdGFBdHRyaWJ1dGV8fCh0KCksdGhpcy5fb25TY3JlZW5DaGFuZ2UoKSk7dGhpcy5vcHRpb25zLnVzZURlbGVnYXRlP3RoaXMuX29uRGVsZWdhdGVDbGlja1RyaWdnZXIoKTp0aGlzLl9vbkNsaWNrVHJpZ2dlcigpO3RoaXMuX29uQ2xpY2tTaWRlbmF2Q2xvc2UoKX0sX2ZvY3VzRWxlbWVudDpmdW5jdGlvbihlKXtlLmZvY3VzKCl9LF9nZXRTaWRlbmF2V2lkdGg6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMud2lkdGhPcmlnaW5hbCxrPWUsbT13aW5kb3cuaW5uZXJXaWR0aDttPGUrNDAmJihrPW0tNDApO3JldHVybiBrfSxfZ2V0U2ltcGxlU2lkZW5hdlR5cGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMsaz10aGlzLl9pc0Rlc2t0b3AoKSwKbT1lLnR5cGUsZT1lLnR5cGVNb2JpbGU7cmV0dXJuIGsmJiJmaXhlZC1wdXNoIj09PW0/ImRlc2t0b3AtZml4ZWQtcHVzaCI6a3x8ImZpeGVkLXB1c2giIT09ZT8iZml4ZWQiOiJtb2JpbGUtZml4ZWQtcHVzaCJ9LF9pc0Rlc2t0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PXRoaXMub3B0aW9ucy5icmVha3BvaW50fSxfaXNTaWRlbmF2UmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLm9wdGlvbnMuY29udGFpbmVyKS5oYXNDbGFzcygic2lkZW5hdi1yaWdodCIpfSxfaXNTaW1wbGVTaWRlbmF2Q2xvc2VkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLGs9ZS5vcGVuQ2xhc3M7cmV0dXJuIWEoZS5jb250YWluZXIpLmhhc0NsYXNzKGspfSxfbG9hZFVybDpmdW5jdGlvbihlLGssbSl7dmFyIHA9ZS5kYXRhKCJ1cmwtbG9hZGVkIikscz1wP3AucmVhZHlTdGF0ZTowO209bXx8ZTt2YXIgbD1lLmZpbmQoIi5zaWRlYmFyLWJvZHkiKS5maXJzdCgpO3N8fAohbC5sZW5ndGh8fCJzdHJpbmciIT09dHlwZW9mIGsmJiFhLmlzUGxhaW5PYmplY3Qoayl8fChsLmFwcGVuZCgnXHgzY2RpdiBjbGFzc1x4M2Qic2lkZW5hdi1sb2FkaW5nIlx4M2UnK3RoaXMub3B0aW9ucy5sb2FkaW5nSW5kaWNhdG9yVFBMKyJceDNjL2Rpdlx4M2UiKSxwPWEuYWpheChrKS5kb25lKGZ1bmN0aW9uKGgpe2wuYXBwZW5kKGgpO20udHJpZ2dlcigidXJsTG9hZGVkLmxleGljb24uc2lkZW5hdiIpO2wuZmluZCgiLnNpZGVuYXYtbG9hZGluZyIpLnJlbW92ZSgpfSksZS5kYXRhKCJ1cmwtbG9hZGVkIixwKSk7cmV0dXJuIHB9LF9vbkNsaWNrU2lkZW5hdkNsb3NlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxrPWUub3B0aW9uczthKGsuY29udGFpbmVyKTt2YXIgaz1hKGsuY29udGFpbmVyKS5maW5kKCIuc2lkZW5hdi1jbG9zZSIpLmZpcnN0KCksaz0iIyIrZChrLCJnZW5lcmF0ZWRMZXhpY29uU2lkZW5hdkNsb3NlSWQiKSxtPSJsZXhpY29uLiIraztFLmRhdGEobSl8fChFLmRhdGEobSwKInRydWUiKSxFLm9uKCJjbGljay5jbG9zZS5sZXhpY29uLnNpZGVuYXYiLGssZnVuY3Rpb24ocCl7cC5wcmV2ZW50RGVmYXVsdCgpO2UudG9nZ2xlKCl9KSk7ZS5jbG9zZUJ1dHRvblNlbGVjdG9yPWs7ZS5kYXRhQ2xvc2VCdXR0b25TZWxlY3Rvcj1tfSxfb25DbGlja1RyaWdnZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UudG9nZ2xlci5vbigiY2xpY2subGV4aWNvbi5zaWRlbmF2IixmdW5jdGlvbihrKXtlLnRvZ2dsZSgpfSl9LF9vbkRlbGVnYXRlQ2xpY2tUcmlnZ2VyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxrPSIjIitkKGUudG9nZ2xlciwiZ2VuZXJhdGVkTGV4aWNvblNpZGVuYXZUb2dnbGVySWQiKSxtPSJsZXhpY29uLiIraztFLmRhdGEobSl8fChFLmRhdGEobSwidHJ1ZSIpLEUub24oImNsaWNrLmxleGljb24uc2lkZW5hdiIsayxmdW5jdGlvbihwKXtlLnRvZ2dsZSgpO3AucHJldmVudERlZmF1bHQoKX0pKTtlLnRvZ2dsZXJTZWxlY3Rvcj1rO2UuZGF0YVRvZ2dsZXJTZWxlY3Rvcj0KbX0sX29uU2NyZWVuQ2hhbmdlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxrPWUub3B0aW9ucyxtPWEoay5jb250YWluZXIpLHA9ZS50b2dnbGVyLHM9ZS5fc2V0U2NyZWVuU2l6ZSgpO0Uub24oInNjcmVlbkNoYW5nZS5sZXhpY29uLnNpZGVuYXYiLGZ1bmN0aW9uKGwpe3ZhciBoPWUuX3NldFNjcmVlblNpemUoKTtsPWUuX2lzU2lkZW5hdlJpZ2h0KCk7dmFyIHU9aD9rLnR5cGU6ay50eXBlTW9iaWxlLHc9ImZpeGVkIj09PXV8fCJmaXhlZC1wdXNoIj09PXUsdT1tLmZpbmQoIi5zaWRlbmF2LW1lbnUiKS5maXJzdCgpO20uZmluZChrLm5hdmlnYXRpb24pLmZpcnN0KCk7dmFyIHo9ay53aWR0aE9yaWdpbmFsLEE9ay5ydGw/ImxlZnQiOiJyaWdodCI7bS50b2dnbGVDbGFzcygic2lkZW5hdi1maXhlZCIsdyk7aWYoIWgmJnN8fGgmJiFzKWUuaGlkZVNpZGVuYXYoKSxlLmNsZWFyU3R5bGUoIm1pbi1oZWlnaHQiKSxtLmFkZENsYXNzKCJjbG9zZWQiKS5yZW1vdmVDbGFzcygib3BlbiIpLHAucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJvcGVuIiksCnM9ITEsaCYmKGwmJnUuY3NzKEEseikuY3NzKCJ3aWR0aCIseikscz0hMCk7dz1tLmhhc0NsYXNzKCJjbG9zZWQiKTtofHwoaD16LHdpbmRvdy5pbm5lcldpZHRoPD16JiYoaD13aW5kb3cuaW5uZXJXaWR0aC1rLmd1dHRlci0yNSksbCYmKHcmJnUuY3NzKEEsaCksdS5jc3MoIndpZHRoIixoKSkscz0hMSk7d3x8KGUuY2xlYXJTdHlsZSgibWluLWhlaWdodCIpLGUuc2hvd1NpZGVuYXYoKSxlLnNldEVxdWFsSGVpZ2h0KCkpfSl9LF9vblNpZGVuYXZUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUsayl7dmFyIG09ZnVuY3Rpb24oKXtlLnJlbW92ZUNsYXNzKCJzaWRlbmF2LXRyYW5zaXRpb24iKTtrJiZrKCl9O2Euc3VwcG9ydC50cmFuc2l0aW9uP2Uub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKHApe20oKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6bS5jYWxsKHRoaXMpfSxfcmVuZGVyTmF2OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLAprPWEoZS5jb250YWluZXIpLG09ay5maW5kKGUubmF2aWdhdGlvbikuZmlyc3QoKS5maW5kKCIuc2lkZW5hdi1tZW51IikuZmlyc3QoKSxwPWsuaGFzQ2xhc3MoImNsb3NlZCIpLHM9dGhpcy5faXNTaWRlbmF2UmlnaHQoKSxsPXRoaXMuX2dldFNpZGVuYXZXaWR0aCgpO3A/KG0uY3NzKCJ3aWR0aCIsbCkscyYmbS5jc3MoZS5ydGw/ImxlZnQiOiJyaWdodCIsbCkpOih0aGlzLnNob3dTaWRlbmF2KCksdGhpcy5zZXRFcXVhbEhlaWdodCgpKTtrLnJlbW92ZUNsYXNzKCJzaWRlbmF2LWpzLWZvdWMiKX0sX3JlbmRlclVJOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLGs9YShlLmNvbnRhaW5lciksbT10aGlzLnRvZ2dsZXIscD10aGlzLm1vYmlsZSxzPXA/ZS50eXBlTW9iaWxlOmUudHlwZTt0aGlzLnVzZURhdGFBdHRyaWJ1dGV8fChwJiYoay5hZGRDbGFzcygiY2xvc2VkIikucmVtb3ZlQ2xhc3MoIm9wZW4iKSxtLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5yZW1vdmVDbGFzcygib3BlbiIpKSwKInJpZ2h0Ij09PWUucG9zaXRpb24mJmsuYWRkQ2xhc3MoInNpZGVuYXYtcmlnaHQiKSwicmVsYXRpdmUiIT09cyYmay5hZGRDbGFzcygic2lkZW5hdi1maXhlZCIpLHRoaXMuX3JlbmRlck5hdigpKX0sX3NldFNjcmVlblNpemU6ZnVuY3Rpb24oKXt2YXIgZTtlPWEod2luZG93KS53aWR0aCgpO2U9MTIwMDw9ZT8ibGciOjk5Mjw9ZT8ibWQiOjc2ODw9ZT8ic20iOjQ4MDw9ZT8ieHMiOiJ4eHMiO2U9InNtIj09PWV8fCJtZCI9PT1lfHwibGciPT09ZTt0aGlzLm1vYmlsZT0hZTtyZXR1cm4gdGhpcy5kZXNrdG9wPWV9fTt2YXIgYj1hLmZuLnNpZGVOYXZpZ2F0aW9uLGc9ZnVuY3Rpb24oZSl7dmFyIGs9dGhpcy5zZWxlY3RvcixtPXRoaXMscD0ic3RyaW5nIj09PXR5cGVvZiBlLHM9Imluc3RhbmNlIj09PWUsbD1hLm1ha2VBcnJheShhcmd1bWVudHMpLnNsaWNlKDEpO3A/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9YSh0aGlzKS5kYXRhKCJsZXhpY29uLnNpZGVuYXYiKTtpZihoKXtpZihzKXJldHVybiBtPQpoLCExO3ZhciB1O2EuaXNGdW5jdGlvbihoW2VdKSYmMCE9PWUuaW5kZXhPZigiXyIpJiYodT1oW2VdLmFwcGx5KGgsbCkpO2lmKHUhPT1oJiZ2b2lkIDAhPT11KXJldHVybiBtPXUuanF1ZXJ5P20ucHVzaFN0YWNrKHUuZ2V0KCkpOnUsITF9ZWxzZSBpZihzKXJldHVybiBtPW51bGwsITF9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaD1hKHRoaXMpLHU9ZSx3PWssej1oLmRhdGEoImxleGljb24uc2lkZW5hdiIpO3p8fCh1fHwodT17fSksdS5zZWxlY3Rvcj13LHo9bmV3IGMoaCx1KSxoLmRhdGEoImxleGljb24uc2lkZW5hdiIseikpfSk7cmV0dXJuIG19O2cubm9Db25mbGljdD1mdW5jdGlvbigpe2EuZm4uc2lkZU5hdmlnYXRpb249YjtyZXR1cm4gdGhpc307Zy5kZWZhdWx0cz17YnJlYWtwb2ludDo3NjgsY29udGVudDoiLnNpZGVuYXYtY29udGVudCIsZXF1YWxIZWlnaHQ6ITAsZ3V0dGVyOiIxNXB4Iixsb2FkaW5nSW5kaWNhdG9yVFBMOidceDNjZGl2IGNsYXNzXHgzZCJsb2FkaW5nLWFuaW1hdGlvbiBsb2FkaW5nLWFuaW1hdGlvbi1tZCJceDNlXHgzYy9kaXZceDNlJywKbmF2aWdhdGlvbjoiLnNpZGVuYXYtbWVudS1zbGlkZXIiLHBvc2l0aW9uOiJsZWZ0Iix0eXBlOiJyZWxhdGl2ZSIsdHlwZU1vYmlsZToicmVsYXRpdmUiLHVybDpudWxsLHVzZURlbGVnYXRlOiEwLHdpZHRoOiIyMjVweCJ9O2cuQ29uc3RydWN0b3I9YzthLmZuLnNpZGVOYXZpZ2F0aW9uPWc7YShmdW5jdGlvbigpe3ZhciBlPWEoJ1tkYXRhLXRvZ2dsZVx4M2Qic2lkZW5hdiJdJyk7Zy5jYWxsKGUpfSl9KShqUXVlcnkpOwooZnVuY3Rpb24oYSl7YS5mbi5mbT1mdW5jdGlvbihFLHEpe3ZhciB0PXRoaXM7MT09PWFyZ3VtZW50cy5sZW5ndGg/dD10aGlzLm1hcChmdW5jdGlvbihmLGQpe3ZhciBjPWQuZm9ybXx8ZDtpZihjJiZhLm5vZGVOYW1lKGMsImZvcm0iKSl7dmFyIGI9YShjKSxiPShiLmRhdGEoImZtLm5hbWVzcGFjZSIpfHxiLmRhdGEoImZtLW5hbWVzcGFjZSIpfHwiIikrRTsoYz1jW2JdfHxjLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYikpJiYhYy5ub2RlTmFtZSYmKGM9YS5tYWtlQXJyYXkoYykpO3JldHVybiBjfX0pOiJzdHJpbmciPT09dHlwZW9mIEUmJnRoaXMuZGF0YSgiZm0uIitFLHEpO3JldHVybiB0fX0pKEFVSS4kKTsKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihFKXtFKCJ1bmRlZmluZWQiIT10eXBlb2YgYT9hOndpbmRvdy5aZXB0byl9KShmdW5jdGlvbihFKXtmdW5jdGlvbiBxKGIpe3ZhciBnPWIuZGF0YTtiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoYi5wcmV2ZW50RGVmYXVsdCgpLEUoYi50YXJnZXQpLmFqYXhTdWJtaXQoZykpfWZ1bmN0aW9uIHQoYil7dmFyIGc9Yi50YXJnZXQsZT1FKGcpO2lmKCFlLmlzKCJbdHlwZVx4M2RzdWJtaXRdLFt0eXBlXHgzZGltYWdlXSIpKXtnPWUuY2xvc2VzdCgiW3R5cGVceDNkc3VibWl0XSIpO2lmKDA9PT1nLmxlbmd0aClyZXR1cm47Zz1nWzBdfXZhciBrPXRoaXM7ay5jbGs9ZzsiaW1hZ2UiPT1nLnR5cGUmJih2b2lkIDAhPT1iLm9mZnNldFg/KGsuY2xrX3g9Yi5vZmZzZXRYLGsuY2xrX3k9Yi5vZmZzZXRZKToiZnVuY3Rpb24iPT10eXBlb2YgRS5mbi5vZmZzZXQ/KGU9ZS5vZmZzZXQoKSxrLmNsa194PWIucGFnZVgtZS5sZWZ0LGsuY2xrX3k9Yi5wYWdlWS1lLnRvcCk6CihrLmNsa194PWIucGFnZVgtZy5vZmZzZXRMZWZ0LGsuY2xrX3k9Yi5wYWdlWS1nLm9mZnNldFRvcCkpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtrLmNsaz1rLmNsa194PWsuY2xrX3k9bnVsbH0sMTAwKX1mdW5jdGlvbiBmKCl7aWYoRS5mbi5hamF4U3VibWl0LmRlYnVnKXt2YXIgYj0iW2pxdWVyeS5mb3JtXSAiK0FycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCIiKTt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nP3dpbmRvdy5jb25zb2xlLmxvZyhiKTp3aW5kb3cub3BlcmEmJndpbmRvdy5vcGVyYS5wb3N0RXJyb3ImJndpbmRvdy5vcGVyYS5wb3N0RXJyb3IoYil9fXZhciBkPXt9O2QuZmlsZWFwaT12b2lkIDAhPT1FKCJceDNjaW5wdXQgdHlwZVx4M2QnZmlsZScvXHgzZSIpLmdldCgwKS5maWxlcztkLmZvcm1kYXRhPXZvaWQgMCE9PXdpbmRvdy5Gb3JtRGF0YTt2YXIgYz0hIUUuZm4ucHJvcDtFLmZuLmF0dHIyPWZ1bmN0aW9uKCl7aWYoIWMpcmV0dXJuIHRoaXMuYXR0ci5hcHBseSh0aGlzLAphcmd1bWVudHMpO3ZhciBiPXRoaXMucHJvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGImJmIuanF1ZXJ5fHwic3RyaW5nIj09PXR5cGVvZiBiP2I6dGhpcy5hdHRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07RS5mbi5hamF4U3VibWl0PWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGcoSSl7ST1FLnBhcmFtKEksYi50cmFkaXRpb25hbCkuc3BsaXQoIlx4MjYiKTt2YXIgTT1JLmxlbmd0aCxEPVtdLEosUDtmb3IoSj0wO0o8TTtKKyspSVtKXT1JW0pdLnJlcGxhY2UoL1wrL2csIiAiKSxQPUlbSl0uc3BsaXQoIlx4M2QiKSxELnB1c2goW2RlY29kZVVSSUNvbXBvbmVudChQWzBdKSxkZWNvZGVVUklDb21wb25lbnQoUFsxXSldKTtyZXR1cm4gRH1mdW5jdGlvbiBlKEkpe2Zvcih2YXIgTT1uZXcgRm9ybURhdGEsRD0wO0Q8SS5sZW5ndGg7RCsrKU0uYXBwZW5kKElbRF0ubmFtZSxJW0RdLnZhbHVlKTtpZihiLmV4dHJhRGF0YSlmb3IoST1nKGIuZXh0cmFEYXRhKSxEPTA7RDxJLmxlbmd0aDtEKyspSVtEXSYmCk0uYXBwZW5kKElbRF1bMF0sSVtEXVsxXSk7Yi5kYXRhPW51bGw7RD1FLmV4dGVuZCghMCx7fSxFLmFqYXhTZXR0aW5ncyxiLHtjb250ZW50VHlwZTohMSxwcm9jZXNzRGF0YTohMSxjYWNoZTohMSx0eXBlOm18fCJQT1NUIn0pO2IudXBsb2FkUHJvZ3Jlc3MmJihELnhocj1mdW5jdGlvbigpe3ZhciBQPUUuYWpheFNldHRpbmdzLnhocigpO1AudXBsb2FkJiZQLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24oVil7dmFyIFk9MCxuYT1WLmxvYWRlZHx8Vi5wb3NpdGlvbixmYT1WLnRvdGFsO1YubGVuZ3RoQ29tcHV0YWJsZSYmKFk9TWF0aC5jZWlsKG5hL2ZhKjEwMCkpO2IudXBsb2FkUHJvZ3Jlc3MoVixuYSxmYSxZKX0sITEpO3JldHVybiBQfSk7RC5kYXRhPW51bGw7dmFyIEo9RC5iZWZvcmVTZW5kO0QuYmVmb3JlU2VuZD1mdW5jdGlvbihQLFYpe1YuZGF0YT1iLmZvcm1EYXRhP2IuZm9ybURhdGE6TTtKJiZKLmNhbGwodGhpcyxQLFYpfTtyZXR1cm4gRS5hamF4KEQpfQpmdW5jdGlvbiBrKEkpe2Z1bmN0aW9uIE0ocWEpe3ZhciB3YT1udWxsO3RyeXtxYS5jb250ZW50V2luZG93JiYod2E9cWEuY29udGVudFdpbmRvdy5kb2N1bWVudCl9Y2F0Y2goSmEpe2YoImNhbm5vdCBnZXQgaWZyYW1lLmNvbnRlbnRXaW5kb3cgZG9jdW1lbnQ6ICIrSmEpfWlmKHdhKXJldHVybiB3YTt0cnl7d2E9cWEuY29udGVudERvY3VtZW50P3FhLmNvbnRlbnREb2N1bWVudDpxYS5kb2N1bWVudH1jYXRjaChQYSl7ZigiY2Fubm90IGdldCBpZnJhbWUuY29udGVudERvY3VtZW50OiAiK1BhKSx3YT1xYS5kb2N1bWVudH1yZXR1cm4gd2F9ZnVuY3Rpb24gRCgpe2Z1bmN0aW9uIHFhKCl7dHJ5e3ZhciBTYT1NKFopLnJlYWR5U3RhdGU7Zigic3RhdGUgXHgzZCAiK1NhKTtTYSYmInVuaW5pdGlhbGl6ZWQiPT1TYS50b0xvd2VyQ2FzZSgpJiZzZXRUaW1lb3V0KHFhLDUwKX1jYXRjaChjYyl7ZigiU2VydmVyIGFib3J0OiAiLGNjLCIgKCIsY2MubmFtZSwiKSIpLEooRWEpLEFhJiZjbGVhclRpbWVvdXQoQWEpLApBYT12b2lkIDB9fXZhciB3YT1zLmF0dHIyKCJ0YXJnZXQiKSxKYT1zLmF0dHIyKCJhY3Rpb24iKSxQYT1zLmF0dHIoImVuY3R5cGUiKXx8cy5hdHRyKCJlbmNvZGluZyIpfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7UC5zZXRBdHRyaWJ1dGUoInRhcmdldCIsZmEpO20mJiEvcG9zdC9pLnRlc3QobSl8fFAuc2V0QXR0cmlidXRlKCJtZXRob2QiLCJQT1NUIik7SmEhPVkudXJsJiZQLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixZLnVybCk7WS5za2lwRW5jb2RpbmdPdmVycmlkZXx8bSYmIS9wb3N0L2kudGVzdChtKXx8cy5hdHRyKHtlbmNvZGluZzoibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsZW5jdHlwZToibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9KTtZLnRpbWVvdXQmJihBYT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7b2E9ITA7SihGYSl9LFkudGltZW91dCkpO3ZhciBmYj1bXTt0cnl7aWYoWS5leHRyYURhdGEpZm9yKHZhciB4YiBpbiBZLmV4dHJhRGF0YSlZLmV4dHJhRGF0YS5oYXNPd25Qcm9wZXJ0eSh4YikmJgooRS5pc1BsYWluT2JqZWN0KFkuZXh0cmFEYXRhW3hiXSkmJlkuZXh0cmFEYXRhW3hiXS5oYXNPd25Qcm9wZXJ0eSgibmFtZSIpJiZZLmV4dHJhRGF0YVt4Yl0uaGFzT3duUHJvcGVydHkoInZhbHVlIik/ZmIucHVzaChFKCdceDNjaW5wdXQgdHlwZVx4M2QiaGlkZGVuIiBuYW1lXHgzZCInK1kuZXh0cmFEYXRhW3hiXS5uYW1lKyciXHgzZScpLnZhbChZLmV4dHJhRGF0YVt4Yl0udmFsdWUpLmFwcGVuZFRvKFApWzBdKTpmYi5wdXNoKEUoJ1x4M2NpbnB1dCB0eXBlXHgzZCJoaWRkZW4iIG5hbWVceDNkIicreGIrJyJceDNlJykudmFsKFkuZXh0cmFEYXRhW3hiXSkuYXBwZW5kVG8oUClbMF0pKTtZLmlmcmFtZVRhcmdldHx8aWEuYXBwZW5kVG8oImJvZHkiKTtaLmF0dGFjaEV2ZW50P1ouYXR0YWNoRXZlbnQoIm9ubG9hZCIsSik6Wi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixKLCExKTtzZXRUaW1lb3V0KHFhLDE1KTt0cnl7UC5zdWJtaXQoKX1jYXRjaChFYil7ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLnN1Ym1pdC5hcHBseShQKX19ZmluYWxseXtQLnNldEF0dHJpYnV0ZSgiYWN0aW9uIiwKSmEpLFAuc2V0QXR0cmlidXRlKCJlbmN0eXBlIixQYSksd2E/UC5zZXRBdHRyaWJ1dGUoInRhcmdldCIsd2EpOnMucmVtb3ZlQXR0cigidGFyZ2V0IiksRShmYikucmVtb3ZlKCl9fWZ1bmN0aW9uIEoocWEpe2lmKCFlYS5hYm9ydGVkJiYhQWIpaWYoVWE9TShaKSxVYXx8KGYoImNhbm5vdCBhY2Nlc3MgcmVzcG9uc2UgZG9jdW1lbnQiKSxxYT1FYSkscWE9PT1GYSYmZWEpZWEuYWJvcnQoInRpbWVvdXQiKSxwYS5yZWplY3QoZWEsInRpbWVvdXQiKTtlbHNlIGlmKHFhPT1FYSYmZWEpZWEuYWJvcnQoInNlcnZlciBhYm9ydCIpLHBhLnJlamVjdChlYSwiZXJyb3IiLCJzZXJ2ZXIgYWJvcnQiKTtlbHNlIGlmKFVhJiZVYS5sb2NhdGlvbi5ocmVmIT1ZLmlmcmFtZVNyY3x8b2Epe1ouZGV0YWNoRXZlbnQ/Wi5kZXRhY2hFdmVudCgib25sb2FkIixKKTpaLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEosITEpO3FhPSJzdWNjZXNzIjt2YXIgd2E7dHJ5e2lmKG9hKXRocm93InRpbWVvdXQiOwp2YXIgSmE9InhtbCI9PVkuZGF0YVR5cGV8fFVhLlhNTERvY3VtZW50fHxFLmlzWE1MRG9jKFVhKTtmKCJpc1htbFx4M2QiK0phKTtpZighSmEmJndpbmRvdy5vcGVyYSYmKG51bGw9PT1VYS5ib2R5fHwhVWEuYm9keS5pbm5lckhUTUwpJiYtLXdiKXtmKCJyZXF1ZWluZyBvbkxvYWQgY2FsbGJhY2ssIERPTSBub3QgYXZhaWxhYmxlIik7c2V0VGltZW91dChKLDI1MCk7cmV0dXJufXZhciBQYT1VYS5ib2R5P1VhLmJvZHk6VWEuZG9jdW1lbnRFbGVtZW50O2VhLnJlc3BvbnNlVGV4dD1QYT9QYS5pbm5lckhUTUw6bnVsbDtlYS5yZXNwb25zZVhNTD1VYS5YTUxEb2N1bWVudD9VYS5YTUxEb2N1bWVudDpVYTtKYSYmKFkuZGF0YVR5cGU9InhtbCIpO2VhLmdldFJlc3BvbnNlSGVhZGVyPWZ1bmN0aW9uKEZjKXtyZXR1cm57ImNvbnRlbnQtdHlwZSI6WS5kYXRhVHlwZX1bRmMudG9Mb3dlckNhc2UoKV19O1BhJiYoZWEuc3RhdHVzPU51bWJlcihQYS5nZXRBdHRyaWJ1dGUoInN0YXR1cyIpKXx8CmVhLnN0YXR1cyxlYS5zdGF0dXNUZXh0PVBhLmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxlYS5zdGF0dXNUZXh0KTt2YXIgZmI9KFkuZGF0YVR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpLHhiPS8oanNvbnxzY3JpcHR8dGV4dCkvLnRlc3QoZmIpO2lmKHhifHxZLnRleHRhcmVhKXt2YXIgRWI9VWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRleHRhcmVhIilbMF07aWYoRWIpZWEucmVzcG9uc2VUZXh0PUViLnZhbHVlLGVhLnN0YXR1cz1OdW1iZXIoRWIuZ2V0QXR0cmlidXRlKCJzdGF0dXMiKSl8fGVhLnN0YXR1cyxlYS5zdGF0dXNUZXh0PUViLmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxlYS5zdGF0dXNUZXh0O2Vsc2UgaWYoeGIpe3ZhciBTYT1VYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIilbMF0sY2M9VWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTtTYT9lYS5yZXNwb25zZVRleHQ9U2EudGV4dENvbnRlbnQ/U2EudGV4dENvbnRlbnQ6U2EuaW5uZXJUZXh0OgpjYyYmKGVhLnJlc3BvbnNlVGV4dD1jYy50ZXh0Q29udGVudD9jYy50ZXh0Q29udGVudDpjYy5pbm5lclRleHQpfX1lbHNlInhtbCI9PWZiJiYhZWEucmVzcG9uc2VYTUwmJmVhLnJlc3BvbnNlVGV4dCYmKGVhLnJlc3BvbnNlWE1MPU1iKGVhLnJlc3BvbnNlVGV4dCkpO3RyeXtXYT10YShlYSxmYixZKX1jYXRjaChZYil7cWE9InBhcnNlcmVycm9yIixlYS5lcnJvcj13YT1ZYnx8cWF9fWNhdGNoKEJjKXtmKCJlcnJvciBjYXVnaHQ6ICIsQmMpLHFhPSJlcnJvciIsZWEuZXJyb3I9d2E9QmN8fHFhfWVhLmFib3J0ZWQmJihmKCJ1cGxvYWQgYWJvcnRlZCIpLHFhPW51bGwpO2VhLnN0YXR1cyYmKHFhPTIwMDw9ZWEuc3RhdHVzJiYzMDA+ZWEuc3RhdHVzfHwzMDQ9PT1lYS5zdGF0dXM/InN1Y2Nlc3MiOiJlcnJvciIpOyJzdWNjZXNzIj09PXFhPyhZLnN1Y2Nlc3MmJlkuc3VjY2Vzcy5jYWxsKFkuY29udGV4dCxXYSwic3VjY2VzcyIsZWEpLHBhLnJlc29sdmUoZWEucmVzcG9uc2VUZXh0LCJzdWNjZXNzIiwKZWEpLG5hJiZFLmV2ZW50LnRyaWdnZXIoImFqYXhTdWNjZXNzIixbZWEsWV0pKTpxYSYmKHZvaWQgMD09PXdhJiYod2E9ZWEuc3RhdHVzVGV4dCksWS5lcnJvciYmWS5lcnJvci5jYWxsKFkuY29udGV4dCxlYSxxYSx3YSkscGEucmVqZWN0KGVhLCJlcnJvciIsd2EpLG5hJiZFLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW2VhLFksd2FdKSk7bmEmJkUuZXZlbnQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbZWEsWV0pO25hJiYhLS1FLmFjdGl2ZSYmRS5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpO1kuY29tcGxldGUmJlkuY29tcGxldGUuY2FsbChZLmNvbnRleHQsZWEscWEpO0FiPSEwO1kudGltZW91dCYmY2xlYXJUaW1lb3V0KEFhKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WS5pZnJhbWVUYXJnZXQ/aWEuYXR0cigic3JjIixZLmlmcmFtZVNyYyk6aWEucmVtb3ZlKCk7ZWEucmVzcG9uc2VYTUw9bnVsbH0sMTAwKX19dmFyIFA9c1swXSxWLFksbmEsZmEsaWEsWixlYSxvYSxBYSxwYT0KRS5EZWZlcnJlZCgpO3BhLmFib3J0PWZ1bmN0aW9uKHFhKXtlYS5hYm9ydChxYSl9O2lmKEkpZm9yKFY9MDtWPGgubGVuZ3RoO1YrKylJPUUoaFtWXSksYz9JLnByb3AoImRpc2FibGVkIiwhMSk6SS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpO1k9RS5leHRlbmQoITAse30sRS5hamF4U2V0dGluZ3MsYik7WS5jb250ZXh0PVkuY29udGV4dHx8WTtmYT0ianFGb3JtSU8iKyhuZXcgRGF0ZSkuZ2V0VGltZSgpO1kuaWZyYW1lVGFyZ2V0PyhpYT1FKFkuaWZyYW1lVGFyZ2V0KSwoVj1pYS5hdHRyMigibmFtZSIpKT9mYT1WOmlhLmF0dHIyKCJuYW1lIixmYSkpOihpYT1FKCdceDNjaWZyYW1lIG5hbWVceDNkIicrZmErJyIgc3JjXHgzZCInK1kuaWZyYW1lU3JjKyciIC9ceDNlJyksaWEuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiLTEwMDBweCIsbGVmdDoiLTEwMDBweCJ9KSk7Wj1pYVswXTtlYT17YWJvcnRlZDowLHJlc3BvbnNlVGV4dDpudWxsLHJlc3BvbnNlWE1MOm51bGwsc3RhdHVzOjAsCnN0YXR1c1RleHQ6Im4vYSIsZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7fSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbigpe30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbigpe30sYWJvcnQ6ZnVuY3Rpb24ocWEpe3ZhciB3YT0idGltZW91dCI9PT1xYT8idGltZW91dCI6ImFib3J0ZWQiO2YoImFib3J0aW5nIHVwbG9hZC4uLiAiK3dhKTt0aGlzLmFib3J0ZWQ9MTt0cnl7Wi5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kJiZaLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQoIlN0b3AiKX1jYXRjaChKYSl7fWlhLmF0dHIoInNyYyIsWS5pZnJhbWVTcmMpO2VhLmVycm9yPXdhO1kuZXJyb3ImJlkuZXJyb3IuY2FsbChZLmNvbnRleHQsZWEsd2EscWEpO25hJiZFLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW2VhLFksd2FdKTtZLmNvbXBsZXRlJiZZLmNvbXBsZXRlLmNhbGwoWS5jb250ZXh0LGVhLHdhKX19OyhuYT1ZLmdsb2JhbCkmJgowPT09RS5hY3RpdmUrKyYmRS5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtuYSYmRS5ldmVudC50cmlnZ2VyKCJhamF4U2VuZCIsW2VhLFldKTtpZihZLmJlZm9yZVNlbmQmJiExPT09WS5iZWZvcmVTZW5kLmNhbGwoWS5jb250ZXh0LGVhLFkpKXJldHVybiBZLmdsb2JhbCYmRS5hY3RpdmUtLSxwYS5yZWplY3QoKSxwYTtpZihlYS5hYm9ydGVkKXJldHVybiBwYS5yZWplY3QoKSxwYTsoST1QLmNsaykmJihWPUkubmFtZSkmJiFJLmRpc2FibGVkJiYoWS5leHRyYURhdGE9WS5leHRyYURhdGF8fHt9LFkuZXh0cmFEYXRhW1ZdPUkudmFsdWUsImltYWdlIj09SS50eXBlJiYoWS5leHRyYURhdGFbVisiLngiXT1QLmNsa194LFkuZXh0cmFEYXRhW1YrIi55Il09UC5jbGtfeSkpO3ZhciBGYT0xLEVhPTI7ST1FKCJtZXRhW25hbWVceDNkY3NyZi10b2tlbl0iKS5hdHRyKCJjb250ZW50Iik7KFY9RSgibWV0YVtuYW1lXHgzZGNzcmYtcGFyYW1dIikuYXR0cigiY29udGVudCIpKSYmSSYmKFkuZXh0cmFEYXRhPQpZLmV4dHJhRGF0YXx8e30sWS5leHRyYURhdGFbVl09SSk7WS5mb3JjZVN5bmM/RCgpOnNldFRpbWVvdXQoRCwxMCk7dmFyIFdhLFVhLHdiPTUwLEFiLE1iPUUucGFyc2VYTUx8fGZ1bmN0aW9uKHFhLHdhKXt3aW5kb3cuQWN0aXZlWE9iamVjdD8od2E9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSx3YS5hc3luYz0iZmFsc2UiLHdhLmxvYWRYTUwocWEpKTp3YT0obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHFhLCJ0ZXh0L3htbCIpO3JldHVybiB3YSYmd2EuZG9jdW1lbnRFbGVtZW50JiYicGFyc2VyZXJyb3IiIT13YS5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWU/d2E6bnVsbH0sZ2E9RS5wYXJzZUpTT058fGZ1bmN0aW9uKHFhKXtyZXR1cm4gd2luZG93LmV2YWwoIigiK3FhKyIpIil9LHRhPWZ1bmN0aW9uKHFhLHdhLEphKXt2YXIgUGE9cWEuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixmYj0ieG1sIj09PXdhfHwhd2EmJjA8PVBhLmluZGV4T2YoInhtbCIpOwpxYT1mYj9xYS5yZXNwb25zZVhNTDpxYS5yZXNwb25zZVRleHQ7ZmImJiJwYXJzZXJlcnJvciI9PT1xYS5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUmJkUuZXJyb3ImJkUuZXJyb3IoInBhcnNlcmVycm9yIik7SmEmJkphLmRhdGFGaWx0ZXImJihxYT1KYS5kYXRhRmlsdGVyKHFhLHdhKSk7InN0cmluZyI9PT10eXBlb2YgcWEmJigianNvbiI9PT13YXx8IXdhJiYwPD1QYS5pbmRleE9mKCJqc29uIik/cWE9Z2EocWEpOigic2NyaXB0Ij09PXdhfHwhd2EmJjA8PVBhLmluZGV4T2YoImphdmFzY3JpcHQiKSkmJkUuZ2xvYmFsRXZhbChxYSkpO3JldHVybiBxYX07cmV0dXJuIHBhfWlmKCF0aGlzLmxlbmd0aClyZXR1cm4gZigiYWpheFN1Ym1pdDogc2tpcHBpbmcgc3VibWl0IHByb2Nlc3MgLSBubyBlbGVtZW50IHNlbGVjdGVkIiksdGhpczt2YXIgbSxwLHM9dGhpczsiZnVuY3Rpb24iPT10eXBlb2YgYj9iPXtzdWNjZXNzOmJ9OnZvaWQgMD09PWImJihiPXt9KTttPWIudHlwZXx8dGhpcy5hdHRyMigibWV0aG9kIik7CnA9Yi51cmx8fHRoaXMuYXR0cjIoImFjdGlvbiIpOyhwPShwPSJzdHJpbmciPT09dHlwZW9mIHA/RS50cmltKHApOiIiKXx8d2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiKSYmKHA9KHAubWF0Y2goL14oW14jXSspLyl8fFtdKVsxXSk7Yj1FLmV4dGVuZCghMCx7dXJsOnAsc3VjY2VzczpFLmFqYXhTZXR0aW5ncy5zdWNjZXNzLHR5cGU6bXx8RS5hamF4U2V0dGluZ3MudHlwZSxpZnJhbWVTcmM6L15odHRwcy9pLnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiKT8iamF2YXNjcmlwdDpmYWxzZSI6ImFib3V0OmJsYW5rIn0sYik7cD17fTt0aGlzLnRyaWdnZXIoImZvcm0tcHJlLXNlcmlhbGl6ZSIsW3RoaXMsYixwXSk7aWYocC52ZXRvKXJldHVybiBmKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXByZS1zZXJpYWxpemUgdHJpZ2dlciIpLHRoaXM7aWYoYi5iZWZvcmVTZXJpYWxpemUmJiExPT09Yi5iZWZvcmVTZXJpYWxpemUodGhpcyxiKSlyZXR1cm4gZigiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVNlcmlhbGl6ZSBjYWxsYmFjayIpLAp0aGlzO3ZhciBsPWIudHJhZGl0aW9uYWw7dm9pZCAwPT09bCYmKGw9RS5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO3ZhciBoPVtdLHUsdz10aGlzLmZvcm1Ub0FycmF5KGIuc2VtYW50aWMsaCk7Yi5kYXRhJiYoYi5leHRyYURhdGE9Yi5kYXRhLHU9RS5wYXJhbShiLmRhdGEsbCkpO2lmKGIuYmVmb3JlU3VibWl0JiYhMT09PWIuYmVmb3JlU3VibWl0KHcsdGhpcyxiKSlyZXR1cm4gZigiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVN1Ym1pdCBjYWxsYmFjayIpLHRoaXM7dGhpcy50cmlnZ2VyKCJmb3JtLXN1Ym1pdC12YWxpZGF0ZSIsW3csdGhpcyxiLHBdKTtpZihwLnZldG8pcmV0dXJuIGYoImFqYXhTdWJtaXQ6IHN1Ym1pdCB2ZXRvZWQgdmlhIGZvcm0tc3VibWl0LXZhbGlkYXRlIHRyaWdnZXIiKSx0aGlzO3A9RS5wYXJhbSh3LGwpO3UmJihwPXA/cCsiXHgyNiIrdTp1KTsiR0VUIj09Yi50eXBlLnRvVXBwZXJDYXNlKCk/KGIudXJsKz0oMDw9Yi51cmwuaW5kZXhPZigiPyIpPwoiXHgyNiI6Ij8iKStwLGIuZGF0YT1udWxsKTpiLmRhdGE9cDt2YXIgej1bXTtiLnJlc2V0Rm9ybSYmei5wdXNoKGZ1bmN0aW9uKCl7cy5yZXNldEZvcm0oKX0pO2IuY2xlYXJGb3JtJiZ6LnB1c2goZnVuY3Rpb24oKXtzLmNsZWFyRm9ybShiLmluY2x1ZGVIaWRkZW4pfSk7aWYoIWIuZGF0YVR5cGUmJmIudGFyZ2V0KXt2YXIgQT1iLnN1Y2Nlc3N8fGZ1bmN0aW9uKCl7fTt6LnB1c2goZnVuY3Rpb24oSSl7dmFyIE09Yi5yZXBsYWNlVGFyZ2V0PyJyZXBsYWNlV2l0aCI6Imh0bWwiO0UoYi50YXJnZXQpW01dKEkpLmVhY2goQSxhcmd1bWVudHMpfSl9ZWxzZSBiLnN1Y2Nlc3MmJnoucHVzaChiLnN1Y2Nlc3MpO2Iuc3VjY2Vzcz1mdW5jdGlvbihJLE0sRCl7Zm9yKHZhciBKPWIuY29udGV4dHx8dGhpcyxQPTAsVj16Lmxlbmd0aDtQPFY7UCsrKXpbUF0uYXBwbHkoSixbSSxNLER8fHMsc10pfTtpZihiLmVycm9yKXt2YXIgSD1iLmVycm9yO2IuZXJyb3I9ZnVuY3Rpb24oSSxNLEQpe0guYXBwbHkoYi5jb250ZXh0fHwKdGhpcyxbSSxNLEQsc10pfX1pZihiLmNvbXBsZXRlKXt2YXIgRj1iLmNvbXBsZXRlO2IuY29tcGxldGU9ZnVuY3Rpb24oSSxNKXtGLmFwcGx5KGIuY29udGV4dHx8dGhpcyxbSSxNLHNdKX19dT0wPEUoImlucHV0W3R5cGVceDNkZmlsZV06ZW5hYmxlZCIsdGhpcykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIiIhPT1FKHRoaXMpLnZhbCgpfSkubGVuZ3RoO3A9Im11bHRpcGFydC9mb3JtLWRhdGEiPT1zLmF0dHIoImVuY3R5cGUiKXx8Im11bHRpcGFydC9mb3JtLWRhdGEiPT1zLmF0dHIoImVuY29kaW5nIik7bD1kLmZpbGVhcGkmJmQuZm9ybWRhdGE7ZigiZmlsZUFQSSA6IitsKTt2YXIgQjshMSE9PWIuaWZyYW1lJiYoYi5pZnJhbWV8fCh1fHxwKSYmIWwpP2IuY2xvc2VLZWVwQWxpdmU/RS5nZXQoYi5jbG9zZUtlZXBBbGl2ZSxmdW5jdGlvbigpe0I9ayh3KX0pOkI9ayh3KTpCPSh1fHxwKSYmbD9lKHcpOkUuYWpheChiKTtzLnJlbW92ZURhdGEoImpxeGhyIikuZGF0YSgianF4aHIiLApCKTtmb3IodT0wO3U8aC5sZW5ndGg7dSsrKWhbdV09bnVsbDt0aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LW5vdGlmeSIsW3RoaXMsYl0pO3JldHVybiB0aGlzfTtFLmZuLmFqYXhGb3JtPWZ1bmN0aW9uKGIpe2I9Ynx8e307Yi5kZWxlZ2F0aW9uPWIuZGVsZWdhdGlvbiYmRS5pc0Z1bmN0aW9uKEUuZm4ub24pO2lmKCFiLmRlbGVnYXRpb24mJjA9PT10aGlzLmxlbmd0aCl7dmFyIGc9e3M6dGhpcy5zZWxlY3RvcixjOnRoaXMuY29udGV4dH07aWYoIUUuaXNSZWFkeSYmZy5zKXJldHVybiBmKCJET00gbm90IHJlYWR5LCBxdWV1aW5nIGFqYXhGb3JtIiksRShmdW5jdGlvbigpe0UoZy5zLGcuYykuYWpheEZvcm0oYil9KSx0aGlzO2YoInRlcm1pbmF0aW5nOyB6ZXJvIGVsZW1lbnRzIGZvdW5kIGJ5IHNlbGVjdG9yIisoRS5pc1JlYWR5PyIiOiIgKERPTSBub3QgcmVhZHkpIikpO3JldHVybiB0aGlzfXJldHVybiBiLmRlbGVnYXRpb24/KEUoZG9jdW1lbnQpLm9mZigic3VibWl0LmZvcm0tcGx1Z2luIiwKdGhpcy5zZWxlY3RvcixxKS5vZmYoImNsaWNrLmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLHQpLm9uKCJzdWJtaXQuZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYixxKS5vbigiY2xpY2suZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYix0KSx0aGlzKTp0aGlzLmFqYXhGb3JtVW5iaW5kKCkuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIixiLHEpLmJpbmQoImNsaWNrLmZvcm0tcGx1Z2luIixiLHQpfTtFLmZuLmFqYXhGb3JtVW5iaW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5iaW5kKCJzdWJtaXQuZm9ybS1wbHVnaW4gY2xpY2suZm9ybS1wbHVnaW4iKX07RS5mbi5mb3JtVG9BcnJheT1mdW5jdGlvbihiLGcpe3ZhciBlPVtdO2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gZTt2YXIgaz10aGlzWzBdLG09dGhpcy5hdHRyKCJpZCIpLHA9Yj9rLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6ay5lbGVtZW50cztwJiYhL01TSUUgWzY3OF0vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJgoocD1FKHApLmdldCgpKTttJiYobT1FKCc6aW5wdXRbZm9ybVx4M2QiJyttKyciXScpLmdldCgpLG0ubGVuZ3RoJiYocD0ocHx8W10pLmNvbmNhdChtKSkpO2lmKCFwfHwhcC5sZW5ndGgpcmV0dXJuIGU7dmFyIHMsbCxoLHUsdztzPTA7Zm9yKHc9cC5sZW5ndGg7czx3O3MrKylpZih1PXBbc10sKG09dS5uYW1lKSYmIXUuZGlzYWJsZWQpaWYoYiYmay5jbGsmJiJpbWFnZSI9PXUudHlwZSlrLmNsaz09dSYmKGUucHVzaCh7bmFtZTptLHZhbHVlOkUodSkudmFsKCksdHlwZTp1LnR5cGV9KSxlLnB1c2goe25hbWU6bSsiLngiLHZhbHVlOmsuY2xrX3h9LHtuYW1lOm0rIi55Iix2YWx1ZTprLmNsa195fSkpO2Vsc2UgaWYoKGg9RS5maWVsZFZhbHVlKHUsITApKSYmaC5jb25zdHJ1Y3Rvcj09QXJyYXkpZm9yKGcmJmcucHVzaCh1KSxsPTAsdT1oLmxlbmd0aDtsPHU7bCsrKWUucHVzaCh7bmFtZTptLHZhbHVlOmhbbF19KTtlbHNlIGlmKGQuZmlsZWFwaSYmImZpbGUiPT11LnR5cGUpaWYoZyYmCmcucHVzaCh1KSxoPXUuZmlsZXMsaC5sZW5ndGgpZm9yKGw9MDtsPGgubGVuZ3RoO2wrKyllLnB1c2goe25hbWU6bSx2YWx1ZTpoW2xdLHR5cGU6dS50eXBlfSk7ZWxzZSBlLnB1c2goe25hbWU6bSx2YWx1ZToiIix0eXBlOnUudHlwZX0pO2Vsc2UgbnVsbCE9PWgmJiJ1bmRlZmluZWQiIT10eXBlb2YgaCYmKGcmJmcucHVzaCh1KSxlLnB1c2goe25hbWU6bSx2YWx1ZTpoLHR5cGU6dS50eXBlLHJlcXVpcmVkOnUucmVxdWlyZWR9KSk7IWImJmsuY2xrJiYocD1FKGsuY2xrKSxzPXBbMF0sKG09cy5uYW1lKSYmIXMuZGlzYWJsZWQmJiJpbWFnZSI9PXMudHlwZSYmKGUucHVzaCh7bmFtZTptLHZhbHVlOnAudmFsKCl9KSxlLnB1c2goe25hbWU6bSsiLngiLHZhbHVlOmsuY2xrX3h9LHtuYW1lOm0rIi55Iix2YWx1ZTprLmNsa195fSkpKTtyZXR1cm4gZX07RS5mbi5mb3JtU2VyaWFsaXplPWZ1bmN0aW9uKGIpe3JldHVybiBFLnBhcmFtKHRoaXMuZm9ybVRvQXJyYXkoYikpfTtFLmZuLmZpZWxkU2VyaWFsaXplPQpmdW5jdGlvbihiKXt2YXIgZz1bXTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hbWU7aWYoZSl7dmFyIGs9RS5maWVsZFZhbHVlKHRoaXMsYik7aWYoayYmay5jb25zdHJ1Y3Rvcj09QXJyYXkpZm9yKHZhciBtPTAscD1rLmxlbmd0aDttPHA7bSsrKWcucHVzaCh7bmFtZTplLHZhbHVlOmtbbV19KTtlbHNlIG51bGwhPT1rJiYidW5kZWZpbmVkIiE9dHlwZW9mIGsmJmcucHVzaCh7bmFtZTp0aGlzLm5hbWUsdmFsdWU6a30pfX0pO3JldHVybiBFLnBhcmFtKGcpfTtFLmZuLmZpZWxkVmFsdWU9ZnVuY3Rpb24oYil7Zm9yKHZhciBnPVtdLGU9MCxrPXRoaXMubGVuZ3RoO2U8aztlKyspe3ZhciBtPUUuZmllbGRWYWx1ZSh0aGlzW2VdLGIpO251bGw9PT1tfHwidW5kZWZpbmVkIj09dHlwZW9mIG18fG0uY29uc3RydWN0b3I9PUFycmF5JiYhbS5sZW5ndGh8fChtLmNvbnN0cnVjdG9yPT1BcnJheT9FLm1lcmdlKGcsbSk6Zy5wdXNoKG0pKX1yZXR1cm4gZ307RS5maWVsZFZhbHVlPQpmdW5jdGlvbihiLGcpe3ZhciBlPWIubmFtZSxrPWIudHlwZSxtPWIudGFnTmFtZS50b0xvd2VyQ2FzZSgpO3ZvaWQgMD09PWcmJihnPSEwKTtpZihnJiYoIWV8fGIuZGlzYWJsZWR8fCJyZXNldCI9PWt8fCJidXR0b24iPT1rfHwoImNoZWNrYm94Ij09a3x8InJhZGlvIj09aykmJiFiLmNoZWNrZWR8fCgic3VibWl0Ij09a3x8ImltYWdlIj09aykmJmIuZm9ybSYmYi5mb3JtLmNsayE9Ynx8InNlbGVjdCI9PW0mJi0xPT1iLnNlbGVjdGVkSW5kZXgpKXJldHVybiBudWxsO2lmKCJzZWxlY3QiPT1tKXt2YXIgcD1iLnNlbGVjdGVkSW5kZXg7aWYoMD5wKXJldHVybiBudWxsO2Zvcih2YXIgZT1bXSxtPWIub3B0aW9ucyxzPShrPSJzZWxlY3Qtb25lIj09ayk/cCsxOm0ubGVuZ3RoLHA9az9wOjA7cDxzO3ArKyl7dmFyIGw9bVtwXTtpZihsLnNlbGVjdGVkKXt2YXIgaD1sLnZhbHVlO2h8fChoPWwuYXR0cmlidXRlcyYmbC5hdHRyaWJ1dGVzLnZhbHVlJiYhbC5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZD8KbC50ZXh0OmwudmFsdWUpO2lmKGspcmV0dXJuIGg7ZS5wdXNoKGgpfX1yZXR1cm4gZX1yZXR1cm4gRShiKS52YWwoKX07RS5mbi5jbGVhckZvcm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0UoImlucHV0LHNlbGVjdCx0ZXh0YXJlYSIsdGhpcykuY2xlYXJGaWVsZHMoYil9KX07RS5mbi5jbGVhckZpZWxkcz1FLmZuLmNsZWFySW5wdXRzPWZ1bmN0aW9uKGIpe3ZhciBnPS9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxlbWFpbHxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10aGlzLnR5cGUsaz10aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtnLnRlc3QoZSl8fCJ0ZXh0YXJlYSI9PWs/dGhpcy52YWx1ZT0iIjoiY2hlY2tib3giPT1lfHwicmFkaW8iPT1lP3RoaXMuY2hlY2tlZD0hMToic2VsZWN0Ij09az90aGlzLnNlbGVjdGVkSW5kZXg9Ci0xOiJmaWxlIj09ZT8vTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9FKHRoaXMpLnJlcGxhY2VXaXRoKEUodGhpcykuY2xvbmUoITApKTpFKHRoaXMpLnZhbCgiIik6YiYmKCEwPT09YiYmL2hpZGRlbi8udGVzdChlKXx8InN0cmluZyI9PXR5cGVvZiBiJiZFKHRoaXMpLmlzKGIpKSYmKHRoaXMudmFsdWU9IiIpfSl9O0UuZm4ucmVzZXRGb3JtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeygiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXNldHx8Im9iamVjdCI9PXR5cGVvZiB0aGlzLnJlc2V0JiYhdGhpcy5yZXNldC5ub2RlVHlwZSkmJnRoaXMucmVzZXQoKX0pfTtFLmZuLmVuYWJsZT1mdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj0hMCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9IWJ9KX07RS5mbi5zZWxlY3RlZD1mdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj0hMCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBnPQp0aGlzLnR5cGU7ImNoZWNrYm94Ij09Z3x8InJhZGlvIj09Zz90aGlzLmNoZWNrZWQ9Yjoib3B0aW9uIj09dGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJihnPUUodGhpcykucGFyZW50KCJzZWxlY3QiKSxiJiZnWzBdJiYic2VsZWN0LW9uZSI9PWdbMF0udHlwZSYmZy5maW5kKCJvcHRpb24iKS5zZWxlY3RlZCghMSksdGhpcy5zZWxlY3RlZD1iKX0pfTtFLmZuLmFqYXhTdWJtaXQuZGVidWc9ITF9KX0pKEFVSS4kKTsKKGZ1bmN0aW9uKGEpe3ZhciBFPS9ce1xzKihbXnx9XSs/KVxzKig/Olx8KFtefV0qKSk/XHMqXH0vZzthLm1peGluKHtiaW5kS2V5UmlnaHQ6ZnVuY3Rpb24ocSx0KXt2YXIgZj1hLnRvQXJyYXkoYXJndW1lbnRzKS5zbGljZSgyKTtmLnVuc2hpZnQoYS5iaW5kS2V5KHEsdCkpO3JldHVybiBhLnBhcnRpYWxSaWdodC5hcHBseShhLGYpfSxiaW5kUmlnaHQ6ZnVuY3Rpb24ocSx0KXt2YXIgZj1hLnRvQXJyYXkoYXJndW1lbnRzKS5zbGljZSgyKTtmLnVuc2hpZnQoYS5iaW5kKHEsdCkpO3JldHVybiBhLnBhcnRpYWxSaWdodC5hcHBseShhLGYpfSxjYWNoZWQ6ZnVuY3Rpb24ocSl7cmV0dXJuIGEubWVtb2l6ZShxLGZ1bmN0aW9uKCl7cmV0dXJuIDE8YXJndW1lbnRzLmxlbmd0aD9BcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywiXyIpOlN0cmluZyhhcmd1bWVudHNbMF0pfSl9LHN1YjpmdW5jdGlvbihxLHQpe2lmKDI8YXJndW1lbnRzLmxlbmd0aHx8IWEuaXNPYmplY3QodCkpdD0KYS50b0FycmF5KGFyZ3VtZW50cykuc2xpY2UoMSk7cmV0dXJuIHEucmVwbGFjZT9xLnJlcGxhY2UoRSxmdW5jdGlvbihmLGQpe3JldHVybiBhLmlzVW5kZWZpbmVkKHRbZF0pP2Y6dFtkXX0pOnF9fSk7YS5taXhpbih7bmFtZXNwYWNlOmZ1bmN0aW9uKHEsdCl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PXEscT10aGlzKTthLmlzU3RyaW5nKHQpJiYodD10LnNwbGl0KCIuIikpO2Zvcih2YXIgZj0wO2Y8dC5sZW5ndGg7ZisrKXt2YXIgZD10W2ZdO3FbZF09cVtkXXx8e307cT1xW2RdfXJldHVybiBxfX0se2NoYWluOiExfSl9KShBVUkuXyk7CihmdW5jdGlvbihhLEUpeyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1FKCk6YS5zdmc0ZXZlcnlib2R5PUUoKX0pKHRoaXMsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHEsdCxmKXtpZihmKXt2YXIgZD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYz0hdC5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKSYmZi5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKTtjJiZ0LnNldEF0dHJpYnV0ZSgidmlld0JveCIsYyk7Zm9yKHQ9Zi5jbG9uZU5vZGUoITApO3QuY2hpbGROb2Rlcy5sZW5ndGg7KWQuYXBwZW5kQ2hpbGQodC5maXJzdENoaWxkKTtxLmFwcGVuZENoaWxkKGQpfX1mdW5jdGlvbiBFKHEpe3Eub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoND09PXEucmVhZHlTdGF0ZSl7dmFyIHQ9cS5fY2FjaGVkRG9jdW1lbnQ7dHx8KHQ9cS5fY2FjaGVkRG9jdW1lbnQ9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSwKdC5ib2R5LmlubmVySFRNTD1xLnJlc3BvbnNlVGV4dCxxLl9jYWNoZWRUYXJnZXQ9e30pO3EuX2VtYmVkcy5zcGxpY2UoMCkubWFwKGZ1bmN0aW9uKGYpe3ZhciBkPXEuX2NhY2hlZFRhcmdldFtmLmlkXTtkfHwoZD1xLl9jYWNoZWRUYXJnZXRbZi5pZF09dC5nZXRFbGVtZW50QnlJZChmLmlkKSk7YShmLnBhcmVudCxmLnN2ZyxkKX0pfX07cS5vbnJlYWR5c3RhdGVjaGFuZ2UoKX1yZXR1cm4gZnVuY3Rpb24ocSl7ZnVuY3Rpb24gdCgpe2Zvcih2YXIgbD0wO2w8cC5sZW5ndGg7KXt2YXIgaD1wW2xdLHU9aC5wYXJlbnROb2RlLHc7Zm9yKHc9dTsic3ZnIiE9PXcubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKHc9dy5wYXJlbnROb2RlKTspO3ZhciB6PWguZ2V0QXR0cmlidXRlKCJ4bGluazpocmVmIil8fGguZ2V0QXR0cmlidXRlKCJocmVmIik7aWYoIXomJmQuYXR0cmlidXRlTmFtZSYmKHo9aC5nZXRBdHRyaWJ1dGUoZC5hdHRyaWJ1dGVOYW1lKSksdyYmeil7aWYoZilpZighZC52YWxpZGF0ZXx8CmQudmFsaWRhdGUoeix3LGgpKWlmKHUucmVtb3ZlQ2hpbGQoaCksej16LnNwbGl0KCIjIiksaD16LnNoaWZ0KCksej16LmpvaW4oIiMiKSxoLmxlbmd0aCl7dmFyIEE9a1toXTtBfHwoQT1rW2hdPW5ldyBYTUxIdHRwUmVxdWVzdCxBLm9wZW4oIkdFVCIsaCksQS5zZW5kKCksQS5fZW1iZWRzPVtdKTtBLl9lbWJlZHMucHVzaCh7cGFyZW50OnUsc3ZnOncsaWQ6en0pO0UoQSl9ZWxzZSBhKHUsdyxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh6KSk7ZWxzZSsrbCwrK3N9ZWxzZSsrbH0oIXAubGVuZ3RofHwwPHAubGVuZ3RoLXMpJiZtKHQsNjcpfXZhciBmLGQ9T2JqZWN0KHEpO3E9L1xiVHJpZGVudFwvWzU2N11cYnxcYk1TSUUgKD86OXwxMClcLjBcYi87dmFyIGM9L1xiQXBwbGVXZWJLaXRcLyhcZCspXGIvLGI9L1xiRWRnZVwvMTJcLihcZCspXGIvLGc9L1xiRWRnZVwvLihcZCspXGIvLGU9d2luZG93LnRvcCE9PXdpbmRvdy5zZWxmO2Y9InBvbHlmaWxsImluIGQ/ZC5wb2x5ZmlsbDpxLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fAoxMDU0Nz4obmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChiKXx8W10pWzFdfHw1Mzc+KG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goYyl8fFtdKVsxXXx8Zy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZlO3ZhciBrPXt9LG09d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8c2V0VGltZW91dCxwPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ1c2UiKSxzPTA7ZiYmdCgpfX0pOwpZVUkuYWRkKCJhcnJheWxpc3QtYWRkIixmdW5jdGlvbihhLEUpe2EubWl4KGEuQXJyYXlMaXN0LnByb3RvdHlwZSx7YWRkOmZ1bmN0aW9uKHEsdCl7dmFyIGY9dGhpcy5faXRlbXM7YS5MYW5nLmlzTnVtYmVyKHQpP2Yuc3BsaWNlKHQsMCxxKTpmLnB1c2gocSk7cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbihxLHQsZil7Zj1mfHx0aGlzLml0ZW1zQXJlRXF1YWw7Zm9yKHZhciBkPXRoaXMuX2l0ZW1zLmxlbmd0aC0xOzA8PWQmJighZi5jYWxsKHRoaXMscSx0aGlzLml0ZW0oZCkpfHwodGhpcy5faXRlbXMuc3BsaWNlKGQsMSksdCkpOy0tZCk7cmV0dXJuIHRoaXN9LGl0ZW1zQXJlRXF1YWw6ZnVuY3Rpb24ocSx0KXtyZXR1cm4gcT09PXR9fSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImFycmF5bGlzdCJdfSk7CllVSS5hZGQoImFycmF5bGlzdC1maWx0ZXIiLGZ1bmN0aW9uKGEsRSl7YS5taXgoYS5BcnJheUxpc3QucHJvdG90eXBlLHtmaWx0ZXI6ZnVuY3Rpb24ocSl7dmFyIHQ9W107YS5BcnJheS5lYWNoKHRoaXMuX2l0ZW1zLGZ1bmN0aW9uKGYsZCl7Zj10aGlzLml0ZW0oZCk7cShmKSYmdC5wdXNoKGYpfSx0aGlzKTtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodCl9fSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImFycmF5bGlzdCJdfSk7CllVSS5hZGQoImFycmF5bGlzdCIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKGMpe3RoaXMuX2l0ZW1zPXZvaWQgMCE9PWM/YS5MYW5nLmlzQXJyYXkoYyk/Yzp0KGMpOnRoaXMuX2l0ZW1zfHxbXX12YXIgdD1hLkFycmF5LGY9dC5lYWNoLGQ7ZD17aXRlbTpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5faXRlbXNbY119LGVhY2g6ZnVuY3Rpb24oYyxiKXtmKHRoaXMuX2l0ZW1zLGZ1bmN0aW9uKGcsZSl7Zz10aGlzLml0ZW0oZSk7Yy5jYWxsKGJ8fGcsZyxlLHRoaXMpfSx0aGlzKTtyZXR1cm4gdGhpc30sc29tZTpmdW5jdGlvbihjLGIpe3JldHVybiB0LnNvbWUodGhpcy5faXRlbXMsZnVuY3Rpb24oZyxlKXtnPXRoaXMuaXRlbShlKTtyZXR1cm4gYy5jYWxsKGJ8fGcsZyxlLHRoaXMpfSx0aGlzKX0saW5kZXhPZjpmdW5jdGlvbihjKXtyZXR1cm4gdC5pbmRleE9mKHRoaXMuX2l0ZW1zLGMpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2l0ZW1zLmxlbmd0aH0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLnNpemUoKX0sCnRvSlNPTjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pdGVtc319O2QuX2l0ZW09ZC5pdGVtO2EubWl4KHEucHJvdG90eXBlLGQpO2EubWl4KHEse2FkZE1ldGhvZDpmdW5jdGlvbihjLGIpe2I9dChiKTtmKGIsZnVuY3Rpb24oZyl7Y1tnXT1mdW5jdGlvbigpe3ZhciBlPXQoYXJndW1lbnRzLDAsITApLGs9W107Zih0aGlzLl9pdGVtcyxmdW5jdGlvbihtLHApe209dGhpcy5faXRlbShwKTt2YXIgcz1tW2ddLmFwcGx5KG0sZSk7dm9pZCAwIT09cyYmcyE9PW0mJihrW3BdPXMpfSx0aGlzKTtyZXR1cm4gay5sZW5ndGg/azp0aGlzfX0pfX0pO2EuQXJyYXlMaXN0PXF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInl1aS1iYXNlIl19KTsKWVVJLmFkZCgiYXJyYXktZXh0cmFzIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuQXJyYXksdD1hLkxhbmcsZj1BcnJheS5wcm90b3R5cGU7cS5sYXN0SW5kZXhPZj10Ll9pc05hdGl2ZShmLmxhc3RJbmRleE9mKT9mdW5jdGlvbihkLGMsYil7cmV0dXJuIGJ8fDA9PT1iP2QubGFzdEluZGV4T2YoYyxiKTpkLmxhc3RJbmRleE9mKGMpfTpmdW5jdGlvbihkLGMsYil7dmFyIGc9ZC5sZW5ndGgsZT1nLTE7aWYoYnx8MD09PWIpZT1NYXRoLm1pbigwPmI/ZytiOmIsZyk7aWYoLTE8ZSYmMDxnKWZvcig7LTE8ZTstLWUpaWYoZSBpbiBkJiZkW2VdPT09YylyZXR1cm4gZTtyZXR1cm4tMX07cS51bmlxdWU9ZnVuY3Rpb24oZCxjKXt2YXIgYj0wLGc9ZC5sZW5ndGgsZT1bXSxrLG0scCxzO2E6Zm9yKDtiPGc7YisrKXtzPWRbYl07az0wO2ZvcihwPWUubGVuZ3RoO2s8cDtrKyspaWYobT1lW2tdLGMpe2lmKGMuY2FsbChkLHMsbSxiLGQpKWNvbnRpbnVlIGF9ZWxzZSBpZihzPT09bSljb250aW51ZSBhOwplLnB1c2gocyl9cmV0dXJuIGV9O3EuZmlsdGVyPXQuX2lzTmF0aXZlKGYuZmlsdGVyKT9mdW5jdGlvbihkLGMsYil7cmV0dXJuIGYuZmlsdGVyLmNhbGwoZCxjLGIpfTpmdW5jdGlvbihkLGMsYil7Zm9yKHZhciBnPTAsZT1kLmxlbmd0aCxrPVtdLG07ZzxlOysrZylnIGluIGQmJihtPWRbZ10sYy5jYWxsKGIsbSxnLGQpJiZrLnB1c2gobSkpO3JldHVybiBrfTtxLnJlamVjdD1mdW5jdGlvbihkLGMsYil7cmV0dXJuIHEuZmlsdGVyKGQsZnVuY3Rpb24oZyxlLGspe3JldHVybiFjLmNhbGwoYixnLGUsayl9KX07cS5ldmVyeT10Ll9pc05hdGl2ZShmLmV2ZXJ5KT9mdW5jdGlvbihkLGMsYil7cmV0dXJuIGYuZXZlcnkuY2FsbChkLGMsYil9OmZ1bmN0aW9uKGQsYyxiKXtmb3IodmFyIGc9MCxlPWQubGVuZ3RoO2c8ZTsrK2cpaWYoZyBpbiBkJiYhYy5jYWxsKGIsZFtnXSxnLGQpKXJldHVybiExO3JldHVybiEwfTtxLm1hcD10Ll9pc05hdGl2ZShmLm1hcCk/ZnVuY3Rpb24oZCxjLGIpe3JldHVybiBmLm1hcC5jYWxsKGQsCmMsYil9OmZ1bmN0aW9uKGQsYyxiKXtmb3IodmFyIGc9MCxlPWQubGVuZ3RoLGs9Zi5jb25jYXQuY2FsbChkKTtnPGU7KytnKWcgaW4gZCYmKGtbZ109Yy5jYWxsKGIsZFtnXSxnLGQpKTtyZXR1cm4ga307cS5yZWR1Y2U9dC5faXNOYXRpdmUoZi5yZWR1Y2UpP2Z1bmN0aW9uKGQsYyxiLGcpe3JldHVybiBmLnJlZHVjZS5jYWxsKGQsZnVuY3Rpb24oZSxrLG0scCl7cmV0dXJuIGIuY2FsbChnLGUsayxtLHApfSxjKX06ZnVuY3Rpb24oZCxjLGIsZyl7Zm9yKHZhciBlPTAsaz1kLmxlbmd0aDtlPGs7KytlKWUgaW4gZCYmKGM9Yi5jYWxsKGcsYyxkW2VdLGUsZCkpO3JldHVybiBjfTtxLmZpbmQ9ZnVuY3Rpb24oZCxjLGIpe2Zvcih2YXIgZz0wLGU9ZC5sZW5ndGg7ZzxlO2crKylpZihnIGluIGQmJmMuY2FsbChiLGRbZ10sZyxkKSlyZXR1cm4gZFtnXTtyZXR1cm4gbnVsbH07cS5ncmVwPWZ1bmN0aW9uKGQsYyl7cmV0dXJuIHEuZmlsdGVyKGQsZnVuY3Rpb24oYixnKXtyZXR1cm4gYy50ZXN0KGIpfSl9OwpxLnBhcnRpdGlvbj1mdW5jdGlvbihkLGMsYil7dmFyIGc9e21hdGNoZXM6W10scmVqZWN0czpbXX07cS5lYWNoKGQsZnVuY3Rpb24oZSxrKXsoYy5jYWxsKGIsZSxrLGQpP2cubWF0Y2hlczpnLnJlamVjdHMpLnB1c2goZSl9KTtyZXR1cm4gZ307cS56aXA9ZnVuY3Rpb24oZCxjKXt2YXIgYj1bXTtxLmVhY2goZCxmdW5jdGlvbihnLGUpe2IucHVzaChbZyxjW2VdXSl9KTtyZXR1cm4gYn07cS5mbGF0dGVuPWZ1bmN0aW9uKGQpe3ZhciBjPVtdLGIsZyxlO2lmKCFkKXJldHVybiBjO2I9MDtmb3IoZz1kLmxlbmd0aDtiPGc7KytiKWU9ZFtiXSx0LmlzQXJyYXkoZSk/Yy5wdXNoLmFwcGx5KGMscS5mbGF0dGVuKGUpKTpjLnB1c2goZSk7cmV0dXJuIGN9fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoImFycmF5LWludm9rZSIsZnVuY3Rpb24oYSxFKXthLkFycmF5Lmludm9rZT1mdW5jdGlvbihxLHQpe3ZhciBmPWEuQXJyYXkoYXJndW1lbnRzLDIsITApLGQ9YS5MYW5nLmlzRnVuY3Rpb24sYz1bXTthLkFycmF5LmVhY2goYS5BcnJheShxKSxmdW5jdGlvbihiLGcpe2ImJmQoYlt0XSkmJihjW2ddPWJbdF0uYXBwbHkoYixmKSl9KTtyZXR1cm4gY319LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInl1aS1iYXNlIl19KTsKWVVJLmFkZCgiYXR0cmlidXRlLWJhc2UiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcSgpe2EuQXR0cmlidXRlQ29yZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YS5BdHRyaWJ1dGVPYnNlcnZhYmxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthLkF0dHJpYnV0ZUV4dHJhcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9YS5taXgocSxhLkF0dHJpYnV0ZUNvcmUsITEsbnVsbCwxKTthLm1peChxLGEuQXR0cmlidXRlRXh0cmFzLCExLG51bGwsMSk7YS5taXgocSxhLkF0dHJpYnV0ZU9ic2VydmFibGUsITAsbnVsbCwxKTtxLklOVkFMSURfVkFMVUU9YS5BdHRyaWJ1dGVDb3JlLklOVkFMSURfVkFMVUU7cS5fQVRUUl9DRkc9YS5BdHRyaWJ1dGVDb3JlLl9BVFRSX0NGRy5jb25jYXQoYS5BdHRyaWJ1dGVPYnNlcnZhYmxlLl9BVFRSX0NGRyk7cS5wcm90ZWN0QXR0cnM9YS5BdHRyaWJ1dGVDb3JlLnByb3RlY3RBdHRyczthLkF0dHJpYnV0ZT1xfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJhdHRyaWJ1dGUtY29yZSIsCiJhdHRyaWJ1dGUtb2JzZXJ2YWJsZSIsImF0dHJpYnV0ZS1leHRyYXMiXX0pO1lVSS5hZGQoImF0dHJpYnV0ZS1jb21wbGV4IixmdW5jdGlvbihhLEUpe3ZhciBxPWEuQXR0cmlidXRlO3EuQ29tcGxleD1mdW5jdGlvbigpe307cS5Db21wbGV4LnByb3RvdHlwZT17X25vcm1BdHRyVmFsczpxLnByb3RvdHlwZS5fbm9ybUF0dHJWYWxzLF9nZXRBdHRySW5pdFZhbDpxLnByb3RvdHlwZS5fZ2V0QXR0ckluaXRWYWx9O2EuQXR0cmlidXRlQ29tcGxleD1xLkNvbXBsZXh9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImF0dHJpYnV0ZS1iYXNlIl19KTsKWVVJLmFkZCgiYXR0cmlidXRlLWNvcmUiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcShjLGIsZyl7dGhpcy5feXVpZXZ0PW51bGw7dGhpcy5faW5pdEF0dHJIb3N0KGMsYixnKX1hLlN0YXRlPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPXt9fTthLlN0YXRlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGMsYixnKXt2YXIgZT10aGlzLmRhdGFbY107ZXx8KGU9dGhpcy5kYXRhW2NdPXt9KTtlW2JdPWd9LGFkZEFsbDpmdW5jdGlvbihjLGIpe3ZhciBnPXRoaXMuZGF0YVtjXSxlO2d8fChnPXRoaXMuZGF0YVtjXT17fSk7Zm9yKGUgaW4gYiliLmhhc093blByb3BlcnR5KGUpJiYoZ1tlXT1iW2VdKX0scmVtb3ZlOmZ1bmN0aW9uKGMsYil7dmFyIGc9dGhpcy5kYXRhW2NdO2cmJmRlbGV0ZSBnW2JdfSxyZW1vdmVBbGw6ZnVuY3Rpb24oYyxiKXt2YXIgZztiP2EuZWFjaChiLGZ1bmN0aW9uKGUsayl7dGhpcy5yZW1vdmUoYywic3RyaW5nIj09PXR5cGVvZiBrP2s6ZSl9LHRoaXMpOihnPXRoaXMuZGF0YSwKYyBpbiBnJiZkZWxldGUgZ1tjXSl9LGdldDpmdW5jdGlvbihjLGIpe3ZhciBnPXRoaXMuZGF0YVtjXTtpZihnKXJldHVybiBnW2JdfSxnZXRBbGw6ZnVuY3Rpb24oYyxiKXt2YXIgZz10aGlzLmRhdGFbY10sZSxrO2lmKGIpaz1nO2Vsc2UgaWYoZylmb3IoZSBpbiBrPXt9LGcpZy5oYXNPd25Qcm9wZXJ0eShlKSYmKGtbZV09Z1tlXSk7cmV0dXJuIGt9fTt2YXIgdD1hLk9iamVjdCxmPWEuTGFuZyxkO3EuSU5WQUxJRF9WQUxVRT17fTtkPXEuSU5WQUxJRF9WQUxVRTtxLl9BVFRSX0NGRz0ic2V0dGVyIGdldHRlciB2YWxpZGF0b3IgdmFsdWUgdmFsdWVGbiB3cml0ZU9uY2UgcmVhZE9ubHkgbGF6eUFkZCBfYnlwYXNzUHJveHkiLnNwbGl0KCIgIik7cS5wcm90ZWN0QXR0cnM9ZnVuY3Rpb24oYyl7aWYoYyl7Yz1hLm1lcmdlKGMpO2Zvcih2YXIgYiBpbiBjKWMuaGFzT3duUHJvcGVydHkoYikmJihjW2JdPWEubWVyZ2UoY1tiXSkpfXJldHVybiBjfTtxLnByb3RvdHlwZT17X2luaXRBdHRySG9zdDpmdW5jdGlvbihjLApiLGcpe3RoaXMuX3N0YXRlPW5ldyBhLlN0YXRlO3RoaXMuX2luaXRBdHRycyhjLGIsZyl9LGFkZEF0dHI6ZnVuY3Rpb24oYyxiLGcpe3ZhciBlPXRoaXMuX3N0YXRlLGs9ZS5kYXRhLG0scDtiPWJ8fHt9OyJsYXp5QWRkImluIGImJihnPWIubGF6eUFkZCk7cD1lLmdldChjLCJhZGRlZCIpO2lmKGcmJiFwKWUuZGF0YVtjXT17bGF6eTpiLGFkZGVkOiEwfTtlbHNlIGlmKCFwfHxiLmlzTGF6eUFkZCl7aWYoZz0idmFsdWUiaW4gYiltPWIudmFsdWUsYi52YWx1ZT12b2lkIDA7Yi5hZGRlZD0hMDtiLmluaXRpYWxpemluZz0hMDtrW2NdPWI7ZyYmdGhpcy5zZXQoYyxtKTtiLmluaXRpYWxpemluZz0hMX1yZXR1cm4gdGhpc30sYXR0ckFkZGVkOmZ1bmN0aW9uKGMpe3JldHVybiEhdGhpcy5fc3RhdGUuZ2V0KGMsImFkZGVkIil9LGdldDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fZ2V0QXR0cihjKX0sX2lzTGF6eUF0dHI6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3N0YXRlLmdldChjLCJsYXp5Iil9LApfYWRkTGF6eUF0dHI6ZnVuY3Rpb24oYyxiKXt2YXIgZz10aGlzLl9zdGF0ZTtpZihiPWJ8fGcuZ2V0KGMsImxhenkiKSlnLmRhdGFbY10ubGF6eT12b2lkIDAsYi5pc0xhenlBZGQ9ITAsdGhpcy5hZGRBdHRyKGMsYil9LHNldDpmdW5jdGlvbihjLGIsZyl7cmV0dXJuIHRoaXMuX3NldEF0dHIoYyxiLGcpfSxfc2V0OmZ1bmN0aW9uKGMsYixnKXtyZXR1cm4gdGhpcy5fc2V0QXR0cihjLGIsZywhMCl9LF9zZXRBdHRyOmZ1bmN0aW9uKGMsYixnLGUpe3ZhciBrPSEwLG09dGhpcy5fc3RhdGUscD10aGlzLl9zdGF0ZVByb3h5LHM9dGhpcy5fdENmZ3MsbCxoLHUsdzstMSE9PWMuaW5kZXhPZigiLiIpJiYobD1jLGg9Yy5zcGxpdCgiLiIpLGM9aC5zaGlmdCgpKTtzJiZzW2NdJiZ0aGlzLl9hZGRPdXRPZk9yZGVyKGMsc1tjXSk7bT1tLmRhdGFbY118fHt9O20ubGF6eSYmKG09bS5sYXp5LHRoaXMuX2FkZExhenlBdHRyKGMsbSkpO3M9dm9pZCAwPT09bS52YWx1ZTtwJiZjIGluIHAmJiFtLl9ieXBhc3NQcm94eSYmCihzPSExKTtwPW0ud3JpdGVPbmNlO3c9bS5pbml0aWFsaXppbmc7c3x8ZXx8KHAmJihrPSExKSxtLnJlYWRPbmx5JiYoaz0hMSkpO3d8fGV8fCJpbml0T25seSIhPT1wfHwoaz0hMSk7ayYmKHN8fCh1PXRoaXMuZ2V0KGMpKSxoJiYoYj10LnNldFZhbHVlKGEuY2xvbmUodSksaCxiKSx2b2lkIDA9PT1iJiYoaz0hMSkpLGsmJighdGhpcy5fZmlyZUF0dHJDaGFuZ2V8fHc/dGhpcy5fc2V0QXR0clZhbChjLGwsdSxiLGcsbSk6dGhpcy5fZmlyZUF0dHJDaGFuZ2UoYyxsLHUsYixnLG0pKSk7cmV0dXJuIHRoaXN9LF9hZGRPdXRPZk9yZGVyOmZ1bmN0aW9uKGMsYil7dmFyIGc9e307Z1tjXT1iO2RlbGV0ZSB0aGlzLl90Q2Znc1tjXTt0aGlzLl9hZGRBdHRycyhnLHRoaXMuX3RWYWxzKX0sX2dldEF0dHI6ZnVuY3Rpb24oYyl7dmFyIGI9YyxnPXRoaXMuX3RDZmdzLGU7LTEhPT1jLmluZGV4T2YoIi4iKSYmKGU9Yy5zcGxpdCgiLiIpLGM9ZS5zaGlmdCgpKTtnJiZnW2NdJiZ0aGlzLl9hZGRPdXRPZk9yZGVyKGMsCmdbY10pO2c9dGhpcy5fc3RhdGUuZGF0YVtjXXx8e307Zy5sYXp5JiYoZz1nLmxhenksdGhpcy5fYWRkTGF6eUF0dHIoYyxnKSk7Yz10aGlzLl9nZXRTdGF0ZVZhbChjLGcpOyhnPWcuZ2V0dGVyKSYmIWcuY2FsbCYmKGc9dGhpc1tnXSk7Yz1nP2cuY2FsbCh0aGlzLGMsYik6YztyZXR1cm4gYz1lP3QuZ2V0VmFsdWUoYyxlKTpjfSxfZ2V0U3RhdGVWYWw6ZnVuY3Rpb24oYyxiKXt2YXIgZz10aGlzLl9zdGF0ZVByb3h5O2J8fChiPXRoaXMuX3N0YXRlLmdldEFsbChjKXx8e30pO3JldHVybiBnJiZjIGluIGcmJiFiLl9ieXBhc3NQcm94eT9nW2NdOmIudmFsdWV9LF9zZXRTdGF0ZVZhbDpmdW5jdGlvbihjLGIpe3ZhciBnPXRoaXMuX3N0YXRlUHJveHk7ZyYmYyBpbiBnJiYhdGhpcy5fc3RhdGUuZ2V0KGMsIl9ieXBhc3NQcm94eSIpP2dbY109Yjp0aGlzLl9zdGF0ZS5hZGQoYywidmFsdWUiLGIpfSxfc2V0QXR0clZhbDpmdW5jdGlvbihjLGIsZyxlLGssbSl7Zz0hMDttPW18fHRoaXMuX3N0YXRlLmRhdGFbY118fAp7fTt2YXIgcD1tLnZhbGlkYXRvcixzPW0uc2V0dGVyLGw9bS5pbml0aWFsaXppbmcsaD10aGlzLl9nZXRTdGF0ZVZhbChjLG0pLHU9Ynx8Yyx3O3AmJihwLmNhbGx8fChwPXRoaXNbcF0pLHAmJih3PXAuY2FsbCh0aGlzLGUsdSxrKSwhdyYmbCYmKGU9bS5kZWZhdWx0VmFsdWUsdz0hMCkpKTshcHx8dz8ocyYmKHMuY2FsbHx8KHM9dGhpc1tzXSkscyYmKGs9cy5jYWxsKHRoaXMsZSx1LGspLGs9PT1kP2w/ZT1tLmRlZmF1bHRWYWx1ZTpnPSExOnZvaWQgMCE9PWsmJihlPWspKSksZyYmKGJ8fGUhPT1ofHxmLmlzT2JqZWN0KGUpPygiaW5pdFZhbHVlImluIG18fChtLmluaXRWYWx1ZT1lKSx0aGlzLl9zZXRTdGF0ZVZhbChjLGUpKTpnPSExKSk6Zz0hMTtyZXR1cm4gZ30sc2V0QXR0cnM6ZnVuY3Rpb24oYyxiKXtyZXR1cm4gdGhpcy5fc2V0QXR0cnMoYyxiKX0sX3NldEF0dHJzOmZ1bmN0aW9uKGMsYil7Zm9yKHZhciBnIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShnKSYmdGhpcy5zZXQoZywKY1tnXSxiKTtyZXR1cm4gdGhpc30sZ2V0QXR0cnM6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2dldEF0dHJzKGMpfSxfZ2V0QXR0cnM6ZnVuY3Rpb24oYyl7dmFyIGI9e30sZyxlLGssbT0hMD09PWM7aWYoIWN8fG0pYz10LmtleXModGhpcy5fc3RhdGUuZGF0YSk7ZT0wO2ZvcihrPWMubGVuZ3RoO2U8aztlKyspZz1jW2VdLG0mJnRoaXMuX2dldFN0YXRlVmFsKGcpPT10aGlzLl9zdGF0ZS5nZXQoZywiaW5pdFZhbHVlIil8fChiW2ddPXRoaXMuZ2V0KGcpKTtyZXR1cm4gYn0sYWRkQXR0cnM6ZnVuY3Rpb24oYyxiLGcpe2MmJih0aGlzLl90Q2Zncz1jLHRoaXMuX3RWYWxzPWI/dGhpcy5fbm9ybUF0dHJWYWxzKGIpOm51bGwsdGhpcy5fYWRkQXR0cnMoYyx0aGlzLl90VmFscyxnKSx0aGlzLl90Q2Zncz10aGlzLl90VmFscz1udWxsKTtyZXR1cm4gdGhpc30sX2FkZEF0dHJzOmZ1bmN0aW9uKGMsYixnKXtiPXRoaXMuX3RDZmdzO3ZhciBlPXRoaXMuX3RWYWxzLGssbSxwO2ZvcihrIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShrKSYmCihtPWNba10sbS5kZWZhdWx0VmFsdWU9bS52YWx1ZSxwPXRoaXMuX2dldEF0dHJJbml0VmFsKGssbSxlKSx2b2lkIDAhPT1wJiYobS52YWx1ZT1wKSxiW2tdJiYoYltrXT12b2lkIDApLHRoaXMuYWRkQXR0cihrLG0sZykpfSxfcHJvdGVjdEF0dHJzOnEucHJvdGVjdEF0dHJzLF9ub3JtQXR0clZhbHM6ZnVuY3Rpb24oYyl7dmFyIGIsZyxlLGssbTtpZighYylyZXR1cm4gbnVsbDtiPXt9O2ZvcihtIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShtKSYmKC0xIT09bS5pbmRleE9mKCIuIik/KGU9bS5zcGxpdCgiLiIpLGs9ZS5zaGlmdCgpLGc9Z3x8e30saz1nW2tdPWdba118fFtdLGtbay5sZW5ndGhdPXtwYXRoOmUsdmFsdWU6Y1ttXX0pOmJbbV09Y1ttXSk7cmV0dXJue3NpbXBsZTpiLGNvbXBsZXg6Z319LF9nZXRBdHRySW5pdFZhbDpmdW5jdGlvbihjLGIsZyl7dmFyIGU9Yi52YWx1ZSxrPWIudmFsdWVGbixtPSExO2I9Yi5yZWFkT25seTt2YXIgcDshYiYmZyYmKHA9Zy5zaW1wbGUpJiZwLmhhc093blByb3BlcnR5KGMpJiYKKGU9cFtjXSxtPSEwKTtrJiYhbSYmKGsuY2FsbHx8KGs9dGhpc1trXSksayYmKGU9ay5jYWxsKHRoaXMsYykpKTtpZighYiYmZyYmKGc9Zy5jb21wbGV4KSYmZy5oYXNPd25Qcm9wZXJ0eShjKSYmdm9pZCAwIT09ZSYmbnVsbCE9PWUpZm9yKGI9Z1tjXSxjPTAsZz1iLmxlbmd0aDtjPGc7KytjKWs9YltjXS5wYXRoLG09YltjXS52YWx1ZSx0LnNldFZhbHVlKGUsayxtKTtyZXR1cm4gZX0sX2luaXRBdHRyczpmdW5jdGlvbihjLGIsZyl7Yz1jfHx0aGlzLmNvbnN0cnVjdG9yLkFUVFJTO3ZhciBlPWEuQmFzZSxrPWEuQmFzZUNvcmUsZT1lJiZhLmluc3RhbmNlT2YodGhpcyxlKSxrPSFlJiZrJiZhLmluc3RhbmNlT2YodGhpcyxrKTshY3x8ZXx8a3x8dGhpcy5hZGRBdHRycyhhLkF0dHJpYnV0ZUNvcmUucHJvdGVjdEF0dHJzKGMpLGIsZyl9fTthLkF0dHJpYnV0ZUNvcmU9cX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsib29wIl19KTsKWVVJLmFkZCgiYXR0cmlidXRlLW9ic2VydmFibGUiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcSgpe3RoaXMuX0FUVFJfRV9GQUNBREU9e307dC5jYWxsKHRoaXMse2VtaXRGYWNhZGU6ITB9KX12YXIgdD1hLkV2ZW50VGFyZ2V0O3EuX0FUVFJfQ0ZHPVsiYnJvYWRjYXN0Il07cS5wcm90b3R5cGU9e3NldDpmdW5jdGlvbihmLGQsYyl7cmV0dXJuIHRoaXMuX3NldEF0dHIoZixkLGMpfSxfc2V0OmZ1bmN0aW9uKGYsZCxjKXtyZXR1cm4gdGhpcy5fc2V0QXR0cihmLGQsYywhMCl9LHNldEF0dHJzOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIHRoaXMuX3NldEF0dHJzKGYsZCl9LF9zZXRBdHRyczpmdW5jdGlvbihmLGQpe2Zvcih2YXIgYyBpbiBmKWYuaGFzT3duUHJvcGVydHkoYykmJnRoaXMuc2V0KGMsZltjXSxkKTtyZXR1cm4gdGhpc30sX2ZpcmVBdHRyQ2hhbmdlOmZ1bmN0aW9uKGYsZCxjLGIsZyxlKXt2YXIgaz10aGlzLl9nZXRGdWxsVHlwZShmKyJDaGFuZ2UiKSxtPXRoaXMuX3N0YXRlLApwO2V8fChlPW0uZGF0YVtmXXx8e30pO2UucHVibGlzaGVkfHwocD10aGlzLl9wdWJsaXNoKGspLHAuZW1pdEZhY2FkZT0hMCxwLmRlZmF1bHRUYXJnZXRPbmx5PSEwLHAuZGVmYXVsdEZuPXRoaXMuX2RlZkF0dHJDaGFuZ2VGbixtPWUuYnJvYWRjYXN0LHZvaWQgMCE9PW0mJihwLmJyb2FkY2FzdD1tKSxlLnB1Ymxpc2hlZD0hMCk7Zz8obT1hLm1lcmdlKGcpLG0uX2F0dHJPcHRzPWcpOm09dGhpcy5fQVRUUl9FX0ZBQ0FERTttLmF0dHJOYW1lPWY7bS5zdWJBdHRyTmFtZT1kO20ucHJldlZhbD1jO20ubmV3VmFsPWI7dGhpcy5faGFzUG90ZW50aWFsU3Vic2NyaWJlcnMoayk/dGhpcy5maXJlKGssbSk6dGhpcy5fc2V0QXR0clZhbChmLGQsYyxiLGcsZSl9LF9kZWZBdHRyQ2hhbmdlRm46ZnVuY3Rpb24oZixkKXt2YXIgYz1mLl9hdHRyT3B0cztjJiZkZWxldGUgZi5fYXR0ck9wdHM7dGhpcy5fc2V0QXR0clZhbChmLmF0dHJOYW1lLGYuc3ViQXR0ck5hbWUsZi5wcmV2VmFsLGYubmV3VmFsLApjKT9kfHwoZi5uZXdWYWw9dGhpcy5nZXQoZi5hdHRyTmFtZSkpOmR8fGYuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9fTthLm1peChxLHQsITEsbnVsbCwxKTthLkF0dHJpYnV0ZU9ic2VydmFibGU9cTthLkF0dHJpYnV0ZUV2ZW50cz1xfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJldmVudC1jdXN0b20iXX0pOwpZVUkuYWRkKCJhdHRyaWJ1dGUtZXh0cmFzIixmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEoKXt9dmFyIHQ9e3JlYWRPbmx5OjEsd3JpdGVPbmNlOjEsZ2V0dGVyOjEsYnJvYWRjYXN0OjF9O3EucHJvdG90eXBlPXttb2RpZnlBdHRyOmZ1bmN0aW9uKGYsZCl7dmFyIGMsYjtpZih0aGlzLmF0dHJBZGRlZChmKSlmb3IoYyBpbiB0aGlzLl9pc0xhenlBdHRyKGYpJiZ0aGlzLl9hZGRMYXp5QXR0cihmKSxiPXRoaXMuX3N0YXRlLGQpdFtjXSYmZC5oYXNPd25Qcm9wZXJ0eShjKSYmKGIuYWRkKGYsYyxkW2NdKSwiYnJvYWRjYXN0Ij09PWMmJmIucmVtb3ZlKGYsInB1Ymxpc2hlZCIpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihmKXt0aGlzLl9zdGF0ZS5yZW1vdmVBbGwoZil9LHJlc2V0OmZ1bmN0aW9uKGYpe3ZhciBkPXRoaXM7Zj8oZC5faXNMYXp5QXR0cihmKSYmZC5fYWRkTGF6eUF0dHIoZiksZC5zZXQoZixkLl9zdGF0ZS5nZXQoZiwiaW5pdFZhbHVlIikpKTphLk9iamVjdC5lYWNoKGQuX3N0YXRlLmRhdGEsCmZ1bmN0aW9uKGMsYil7ZC5yZXNldChiKX0pO3JldHVybiBkfSxfZ2V0QXR0ckNmZzpmdW5jdGlvbihmKXt2YXIgZCxjPXRoaXMuX3N0YXRlO2Y/ZD1jLmdldEFsbChmKXx8e306KGQ9e30sYS5lYWNoKGMuZGF0YSxmdW5jdGlvbihiLGcpe2RbZ109Yy5nZXRBbGwoZyl9KSk7cmV0dXJuIGR9fTthLkF0dHJpYnV0ZUV4dHJhcz1xfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJvb3AiXX0pOwpZVUkuYWRkKCJiYXNlLWJhc2UiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcSgpe2QuYXBwbHkodGhpcyxhcmd1bWVudHMpO2MuYXBwbHkodGhpcyxhcmd1bWVudHMpO2YuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciB0PWEuQXR0cmlidXRlQ29yZSxmPWEuQXR0cmlidXRlRXh0cmFzLGQ9YS5CYXNlQ29yZSxjPWEuQmFzZU9ic2VydmFibGU7cS5fQVRUUl9DRkc9ZC5fQVRUUl9DRkcuY29uY2F0KGMuX0FUVFJfQ0ZHKTtxLl9OT05fQVRUUlNfQ0ZHPWQuX05PTl9BVFRSU19DRkcuY29uY2F0KGMuX05PTl9BVFRSU19DRkcpO3EuTkFNRT0iYmFzZSI7cS5BVFRSUz10LnByb3RlY3RBdHRycyhkLkFUVFJTKTtxLm1vZGlmeUF0dHJzPWQubW9kaWZ5QXR0cnM7YS5taXgocSxkLCExLG51bGwsMSk7YS5taXgocSxmLCExLG51bGwsMSk7YS5taXgocSxjLCEwLG51bGwsMSk7cS5wcm90b3R5cGUuY29uc3RydWN0b3I9cTthLkJhc2U9cX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiYXR0cmlidXRlLWJhc2UiLAoiYmFzZS1jb3JlIiwiYmFzZS1vYnNlcnZhYmxlIl19KTtZVUkuYWRkKCJiYXNlLXBsdWdpbmhvc3QiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5CYXNlLHQ9YS5QbHVnaW4uSG9zdDthLm1peChxLHQsITEsbnVsbCwxKTtxLnBsdWc9dC5wbHVnO3EudW5wbHVnPXQudW5wbHVnfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJiYXNlLWJhc2UiLCJwbHVnaW5ob3N0Il19KTsKWVVJLmFkZCgiY2xhc3NuYW1lbWFuYWdlciIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLmNvbmZpZztxLmNsYXNzTmFtZVByZWZpeD1xLmNsYXNzTmFtZVByZWZpeHx8Inl1aTMiO3EuY2xhc3NOYW1lRGVsaW1pdGVyPXEuY2xhc3NOYW1lRGVsaW1pdGVyfHwiLSI7YS5DbGFzc05hbWVNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIHQ9cS5jbGFzc05hbWVQcmVmaXgsZj1xLmNsYXNzTmFtZURlbGltaXRlcjtyZXR1cm57Z2V0Q2xhc3NOYW1lOmEuY2FjaGVkKGZ1bmN0aW9uKCl7dmFyIGQ9YS5BcnJheShhcmd1bWVudHMpOyEwIT09ZFtkLmxlbmd0aC0xXT9kLnVuc2hpZnQodCk6ZC5wb3AoKTtyZXR1cm4gZC5qb2luKGYpfSl9fSgpfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoImRhdGF0eXBlLXhtbC1mb3JtYXQiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5MYW5nO2EubWl4KGEubmFtZXNwYWNlKCJYTUwiKSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3RyeXtpZighcS5pc1VuZGVmaW5lZCh0LmdldFhtbCkpcmV0dXJuIHQuZ2V0WG1sKCk7aWYoIXEuaXNVbmRlZmluZWQoWE1MU2VyaWFsaXplcikpcmV0dXJuKG5ldyBYTUxTZXJpYWxpemVyKS5zZXJpYWxpemVUb1N0cmluZyh0KX1jYXRjaChmKXtyZXR1cm4gdCYmdC54bWw/dC54bWw6cS5pc1ZhbHVlKHQpJiZ0LnRvU3RyaW5nP3QudG9TdHJpbmcoKToiIn19fSk7YS5uYW1lc3BhY2UoIkRhdGFUeXBlIik7YS5EYXRhVHlwZS5YTUw9YS5YTUx9LCJwYXRjaGVkLXYzLjE4LjEiKTsKWVVJLmFkZCgiZGF0YXR5cGUteG1sLXBhcnNlIixmdW5jdGlvbihhLEUpe2EubWl4KGEubmFtZXNwYWNlKCJYTUwiKSx7cGFyc2U6ZnVuY3Rpb24ocSl7dmFyIHQ9bnVsbCxmOyJzdHJpbmciPT09dHlwZW9mIHEmJihmPWEuY29uZmlnLndpbix2b2lkIDAhPT1mLkFjdGl2ZVhPYmplY3Q/KHQ9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSx0LmFzeW5jPSExLHQubG9hZFhNTChxKSk6dm9pZCAwIT09Zi5ET01QYXJzZXI/dD0obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHEsInRleHQveG1sIik6dm9pZCAwIT09Zi5XaW5kb3dzJiYodD1uZXcgV2luZG93cy5EYXRhLlhtbC5Eb20uWG1sRG9jdW1lbnQsdC5sb2FkWG1sKHEpKSk7cmV0dXJuIHR9fSk7YS5uYW1lc3BhY2UoIlBhcnNlcnMiKS54bWw9YS5YTUwucGFyc2U7YS5uYW1lc3BhY2UoIkRhdGFUeXBlIik7YS5EYXRhVHlwZS5YTUw9YS5YTUx9LCJwYXRjaGVkLXYzLjE4LjEiKTsKWVVJLmFkZCgiZG9tLWJhc2UiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5jb25maWcuZG9jLmRvY3VtZW50RWxlbWVudCx0PWEuRE9NLGY9YS5GZWF0dXJlcy5hZGQsZD1hLkZlYXR1cmVzLnRlc3Q7YS5taXgodCx7Z2V0VGV4dDp2b2lkIDAhPT1xLnRleHRDb250ZW50P2Z1bmN0aW9uKGwpe3ZhciBoPSIiO2wmJihoPWwudGV4dENvbnRlbnQpO3JldHVybiBofHwiIn06ZnVuY3Rpb24obCl7dmFyIGg9IiI7bCYmKGg9bC5pbm5lclRleHR8fGwubm9kZVZhbHVlKTtyZXR1cm4gaHx8IiJ9LHNldFRleHQ6dm9pZCAwIT09cS50ZXh0Q29udGVudD9mdW5jdGlvbihsLGgpe2wmJihsLnRleHRDb250ZW50PWgpfTpmdW5jdGlvbihsLGgpeyJpbm5lclRleHQiaW4gbD9sLmlubmVyVGV4dD1oOiJub2RlVmFsdWUiaW4gbCYmKGwubm9kZVZhbHVlPWgpfSxDVVNUT01fQVRUUklCVVRFUzpxLmhhc0F0dHJpYnV0ZT97aHRtbEZvcjoiZm9yIixjbGFzc05hbWU6ImNsYXNzIn06eyJmb3IiOiJodG1sRm9yIiwKImNsYXNzIjoiY2xhc3NOYW1lIn0sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKGwsaCx1LHcpe2wmJmgmJmwuc2V0QXR0cmlidXRlJiYoaD10LkNVU1RPTV9BVFRSSUJVVEVTW2hdfHxoLGwuc2V0QXR0cmlidXRlKGgsdSx3KSl9LGdldEF0dHJpYnV0ZTpmdW5jdGlvbihsLGgsdSl7dT12b2lkIDAhPT11P3U6Mjt2YXIgdz0iIjtsJiZoJiZsLmdldEF0dHJpYnV0ZSYmKGg9dC5DVVNUT01fQVRUUklCVVRFU1toXXx8aCx3PSJCVVRUT04iPT09bC50YWdOYW1lJiYidmFsdWUiPT09aD90LmdldFZhbHVlKGwpOmwuZ2V0QXR0cmlidXRlKGgsdSksbnVsbD09PXcmJih3PSIiKSk7cmV0dXJuIHd9LFZBTFVFX1NFVFRFUlM6e30sVkFMVUVfR0VUVEVSUzp7fSxnZXRWYWx1ZTpmdW5jdGlvbihsKXt2YXIgaD0iIjtsJiZsLnRhZ05hbWUmJihoPShoPXQuVkFMVUVfR0VUVEVSU1tsLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0pP2gobCk6bC52YWx1ZSk7IiI9PT1oJiYoaD0iIik7cmV0dXJuInN0cmluZyI9PT0KdHlwZW9mIGg/aDoiIn0sc2V0VmFsdWU6ZnVuY3Rpb24obCxoKXt2YXIgdTtsJiZsLnRhZ05hbWUmJih1PXQuVkFMVUVfU0VUVEVSU1tsLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0saD1udWxsPT09aD8iIjpoLHU/dShsLGgpOmwudmFsdWU9aCl9LGNyZWF0b3JzOnt9fSk7ZigidmFsdWUtc2V0Iiwic2VsZWN0Iix7dGVzdDpmdW5jdGlvbigpe3ZhciBsPWEuY29uZmlnLmRvYy5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTtsLmlubmVySFRNTD0iXHgzY29wdGlvblx4M2UxXHgzYy9vcHRpb25ceDNlXHgzY29wdGlvblx4M2UyXHgzYy9vcHRpb25ceDNlIjtsLnZhbHVlPSIyIjtyZXR1cm4gbC52YWx1ZSYmIjIiPT09bC52YWx1ZX19KTtkKCJ2YWx1ZS1zZXQiLCJzZWxlY3QiKXx8KHQuVkFMVUVfU0VUVEVSUy5zZWxlY3Q9ZnVuY3Rpb24obCxoKXtmb3IodmFyIHU9MCx3PWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9wdGlvbiIpLHo7ej13W3UrK107KWlmKHQuZ2V0VmFsdWUoeik9PT1oKXt6LnNlbGVjdGVkPQohMDticmVha319KTthLm1peCh0LlZBTFVFX0dFVFRFUlMse2J1dHRvbjpmdW5jdGlvbihsKXtyZXR1cm4gbC5hdHRyaWJ1dGVzJiZsLmF0dHJpYnV0ZXMudmFsdWU/bC5hdHRyaWJ1dGVzLnZhbHVlLnZhbHVlOiIifX0pO2EubWl4KHQuVkFMVUVfU0VUVEVSUyx7YnV0dG9uOmZ1bmN0aW9uKGwsaCl7dmFyIHU9bC5hdHRyaWJ1dGVzLnZhbHVlO3V8fCh1PWwub3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoInZhbHVlIiksbC5zZXRBdHRyaWJ1dGVOb2RlKHUpKTt1LnZhbHVlPWh9fSk7YS5taXgodC5WQUxVRV9HRVRURVJTLHtvcHRpb246ZnVuY3Rpb24obCl7dmFyIGg9bC5hdHRyaWJ1dGVzO3JldHVybiBoLnZhbHVlJiZoLnZhbHVlLnNwZWNpZmllZD9sLnZhbHVlOmwudGV4dH0sc2VsZWN0OmZ1bmN0aW9uKGwpe3ZhciBoPWwudmFsdWUsdT1sLm9wdGlvbnM7dSYmdS5sZW5ndGgmJiFsLm11bHRpcGxlJiYtMTxsLnNlbGVjdGVkSW5kZXgmJihoPXQuZ2V0VmFsdWUodVtsLnNlbGVjdGVkSW5kZXhdKSk7CnJldHVybiBofX0pO3ZhciBjLGIsZzthLm1peChhLkRPTSx7aGFzQ2xhc3M6ZnVuY3Rpb24obCxoKXtyZXR1cm4gYS5ET00uX2dldFJlZ0V4cCgiKD86XnxcXHMrKSIraCsiKD86XFxzK3wkKSIpLnRlc3QobC5jbGFzc05hbWUpfSxhZGRDbGFzczpmdW5jdGlvbihsLGgpe2EuRE9NLmhhc0NsYXNzKGwsaCl8fChsLmNsYXNzTmFtZT1hLkxhbmcudHJpbShbbC5jbGFzc05hbWUsaF0uam9pbigiICIpKSl9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGwsaCl7aCYmYihsLGgpJiYobC5jbGFzc05hbWU9YS5MYW5nLnRyaW0obC5jbGFzc05hbWUucmVwbGFjZShhLkRPTS5fZ2V0UmVnRXhwKCIoPzpefFxccyspIitoKyIoPzpcXHMrfCQpIiksIiAiKSksYihsLGgpJiZnKGwsaCkpfSxyZXBsYWNlQ2xhc3M6ZnVuY3Rpb24obCxoLHUpe2cobCxoKTtjKGwsdSl9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGwsaCx1KXsodm9pZCAwIT09dT91OiFiKGwsaCkpP2MobCxoKTpnKGwsaCl9fSk7Yj1hLkRPTS5oYXNDbGFzczsKZz1hLkRPTS5yZW1vdmVDbGFzcztjPWEuRE9NLmFkZENsYXNzO3ZhciBlPS88KFthLXpdKykvaSx0PWEuRE9NLGY9YS5GZWF0dXJlcy5hZGQsZD1hLkZlYXR1cmVzLnRlc3Qsaz17fSxtPWZ1bmN0aW9uKGwsaCl7dmFyIHU9YS5jb25maWcuZG9jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHc9ITA7dS5pbm5lckhUTUw9bDt1LmZpcnN0Q2hpbGQmJnUuZmlyc3RDaGlsZC50YWdOYW1lPT09aC50b1VwcGVyQ2FzZSgpfHwodz0hMSk7cmV0dXJuIHd9LHA9Lyg/OlwvKD86dGhlYWR8dGZvb3R8dGJvZHl8Y2FwdGlvbnxjb2x8Y29sZ3JvdXApPikrXHMqPHRib2R5LyxzO2EubWl4KGEuRE9NLHtfZnJhZ0Nsb25lczp7fSxfY3JlYXRlOmZ1bmN0aW9uKGwsaCx1KXt1PXV8fCJkaXYiO3ZhciB3PXQuX2ZyYWdDbG9uZXNbdV0sdz13P3cuY2xvbmVOb2RlKCExKTp0Ll9mcmFnQ2xvbmVzW3VdPWguY3JlYXRlRWxlbWVudCh1KTt3LmlubmVySFRNTD1sO3JldHVybiB3fSxfY2hpbGRyZW46ZnVuY3Rpb24obCwKaCl7dmFyIHU9MCx3PWwuY2hpbGRyZW4seixBO3cmJncudGFncyYmKGg/dz1sLmNoaWxkcmVuLnRhZ3MoaCk6ej13LnRhZ3MoIiEiKS5sZW5ndGgpO2lmKCF3fHwhdy50YWdzJiZofHx6KWZvcih6PXd8fGwuY2hpbGROb2Rlcyx3PVtdO0E9elt1KytdOykxPT09QS5ub2RlVHlwZSYmKGgmJmghPT1BLnRhZ05hbWV8fHcucHVzaChBKSk7cmV0dXJuIHd8fFtdfSxjcmVhdGU6ZnVuY3Rpb24obCxoKXsic3RyaW5nIj09PXR5cGVvZiBsJiYobD1hLkxhbmcudHJpbShsKSk7aD1ofHxhLmNvbmZpZy5kb2M7dmFyIHU9ZS5leGVjKGwpLHc9dC5fY3JlYXRlLHo9bnVsbCxBO3ZvaWQgMCE9bCYmKHUmJnVbMV0mJih1PWtbdVsxXS50b0xvd2VyQ2FzZSgpXSwiZnVuY3Rpb24iPT09dHlwZW9mIHU/dz11OkE9dSksdz13KGwsaCxBKSxBPXcuY2hpbGROb2RlcywxPT09QS5sZW5ndGg/ej13LnJlbW92ZUNoaWxkKEFbMF0pOkFbMF0mJiJ5dWkzLWJpZy1kdW1teSI9PT1BWzBdLmNsYXNzTmFtZT8ocz13LnNlbGVjdGVkSW5kZXgsCjI9PT1BLmxlbmd0aD96PUFbMF0ubmV4dFNpYmxpbmc6KHcucmVtb3ZlQ2hpbGQoQVswXSksej10Ll9ubDJmcmFnKEEsaCkpKTp6PXQuX25sMmZyYWcoQSxoKSk7cmV0dXJuIHp9LF9ubDJmcmFnOmZ1bmN0aW9uKGwsaCl7dmFyIHU9bnVsbCx3LHo7aWYobCYmKGwucHVzaHx8bC5pdGVtKSYmbFswXSlmb3IoaD1ofHxsWzBdLm93bmVyRG9jdW1lbnQsdT1oLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsLml0ZW0mJihsPWEuQXJyYXkobCwwLCEwKSksdz0wLHo9bC5sZW5ndGg7dzx6O3crKyl1LmFwcGVuZENoaWxkKGxbd10pO3JldHVybiB1fSxhZGRIVE1MOmZ1bmN0aW9uKGwsaCx1KXt2YXIgdz1sLnBhcmVudE5vZGUsej0wLEEsSD1oLEY7aWYodm9pZCAwIT1oKWlmKGgubm9kZVR5cGUpRj1oO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBofHwibnVtYmVyIj09dHlwZW9mIGgpSD1GPXQuY3JlYXRlKGgpO2Vsc2UgaWYoaFswXSYmaFswXS5ub2RlVHlwZSlmb3IoRj1hLmNvbmZpZy5kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO0E9CmhbeisrXTspRi5hcHBlbmRDaGlsZChBKTtpZih1KWlmKEYmJnUucGFyZW50Tm9kZSl1LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKEYsdSk7ZWxzZSBzd2l0Y2godSl7Y2FzZSAicmVwbGFjZSI6Zm9yKDtsLmZpcnN0Q2hpbGQ7KWwucmVtb3ZlQ2hpbGQobC5maXJzdENoaWxkKTtGJiZsLmFwcGVuZENoaWxkKEYpO2JyZWFrO2Nhc2UgImJlZm9yZSI6RiYmdy5pbnNlcnRCZWZvcmUoRixsKTticmVhaztjYXNlICJhZnRlciI6RiYmKGwubmV4dFNpYmxpbmc/dy5pbnNlcnRCZWZvcmUoRixsLm5leHRTaWJsaW5nKTp3LmFwcGVuZENoaWxkKEYpKTticmVhaztkZWZhdWx0OkYmJmwuYXBwZW5kQ2hpbGQoRil9ZWxzZSBGJiZsLmFwcGVuZENoaWxkKEYpOyJTRUxFQ1QiPT1sLm5vZGVOYW1lJiYwPHMmJihsLnNlbGVjdGVkSW5kZXg9cy0xKTtyZXR1cm4gSH0sd3JhcDpmdW5jdGlvbihsLGgpe3ZhciB1PWgmJmgubm9kZVR5cGU/aDphLkRPTS5jcmVhdGUoaCksdz11LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CncubGVuZ3RoJiYodT13W3cubGVuZ3RoLTFdKTtsLnBhcmVudE5vZGUmJmwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodSxsKTt1LmFwcGVuZENoaWxkKGwpfSx1bndyYXA6ZnVuY3Rpb24obCl7dmFyIGg9bC5wYXJlbnROb2RlLHU9aC5sYXN0Q2hpbGQsdz1sLHo7aWYoaClpZih6PWgucGFyZW50Tm9kZSl7Zm9yKGw9aC5maXJzdENoaWxkO2whPT11Oyl3PWwubmV4dFNpYmxpbmcsei5pbnNlcnRCZWZvcmUobCxoKSxsPXc7ei5yZXBsYWNlQ2hpbGQodSxoKX1lbHNlIGgucmVtb3ZlQ2hpbGQobCl9fSk7ZigiaW5uZXJodG1sIiwidGFibGUiLHt0ZXN0OmZ1bmN0aW9uKCl7dmFyIGw9YS5jb25maWcuZG9jLmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7dHJ5e2wuaW5uZXJIVE1MPSJceDNjdGJvZHlceDNlXHgzYy90Ym9keVx4M2UifWNhdGNoKGgpe3JldHVybiExfXJldHVybiBsLmZpcnN0Q2hpbGQmJiJUQk9EWSI9PT1sLmZpcnN0Q2hpbGQubm9kZU5hbWV9fSk7ZigiaW5uZXJodG1sLWRpdiIsCiJ0ciIse3Rlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbSgiXHgzY3RyXHgzZVx4M2MvdHJceDNlIiwidHIiKX19KTtmKCJpbm5lcmh0bWwtZGl2Iiwic2NyaXB0Iix7dGVzdDpmdW5jdGlvbigpe3JldHVybiBtKCJceDNjc2NyaXB0XHgzZVx4M2Mvc2NyaXB0XHgzZSIsInNjcmlwdCIpfX0pO2QoImlubmVyaHRtbCIsInRhYmxlIil8fChrLnRib2R5PWZ1bmN0aW9uKGwsaCl7dmFyIHU9dC5jcmVhdGUoIlx4M2N0YWJsZVx4M2UiK2wrIlx4M2MvdGFibGVceDNlIixoKSx3PWEuRE9NLl9jaGlsZHJlbih1LCJ0Ym9keSIpWzBdOzE8dS5jaGlsZHJlbi5sZW5ndGgmJncmJiFwLnRlc3QobCkmJncucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3KTtyZXR1cm4gdX0pO2QoImlubmVyaHRtbC1kaXYiLCJzY3JpcHQiKXx8KGsuc2NyaXB0PWZ1bmN0aW9uKGwsaCl7dmFyIHU9aC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmlubmVySFRNTD0iLSIrbDt1LnJlbW92ZUNoaWxkKHUuZmlyc3RDaGlsZCk7cmV0dXJuIHV9LAprLmxpbms9ay5zdHlsZT1rLnNjcmlwdCk7ZCgiaW5uZXJodG1sLWRpdiIsInRyIil8fChhLm1peChrLHtvcHRpb246ZnVuY3Rpb24obCxoKXtyZXR1cm4gdC5jcmVhdGUoJ1x4M2NzZWxlY3RceDNlXHgzY29wdGlvbiBjbGFzc1x4M2QieXVpMy1iaWctZHVtbXkiIHNlbGVjdGVkXHgzZVx4M2Mvb3B0aW9uXHgzZScrbCsiXHgzYy9zZWxlY3RceDNlIixoKX0sdHI6ZnVuY3Rpb24obCxoKXtyZXR1cm4gdC5jcmVhdGUoIlx4M2N0Ym9keVx4M2UiK2wrIlx4M2MvdGJvZHlceDNlIixoKX0sdGQ6ZnVuY3Rpb24obCxoKXtyZXR1cm4gdC5jcmVhdGUoIlx4M2N0clx4M2UiK2wrIlx4M2MvdHJceDNlIixoKX0sY29sOmZ1bmN0aW9uKGwsaCl7cmV0dXJuIHQuY3JlYXRlKCJceDNjY29sZ3JvdXBceDNlIitsKyJceDNjL2NvbGdyb3VwXHgzZSIsaCl9LHRib2R5OiJ0YWJsZSJ9KSxhLm1peChrLHtsZWdlbmQ6ImZpZWxkc2V0Iix0aDprLnRkLHRoZWFkOmsudGJvZHksdGZvb3Q6ay50Ym9keSxjYXB0aW9uOmsudGJvZHksCmNvbGdyb3VwOmsudGJvZHksb3B0Z3JvdXA6ay5vcHRpb259KSk7dC5jcmVhdG9ycz1rO2EubWl4KGEuRE9NLHtzZXRXaWR0aDpmdW5jdGlvbihsLGgpe2EuRE9NLl9zZXRTaXplKGwsIndpZHRoIixoKX0sc2V0SGVpZ2h0OmZ1bmN0aW9uKGwsaCl7YS5ET00uX3NldFNpemUobCwiaGVpZ2h0IixoKX0sX3NldFNpemU6ZnVuY3Rpb24obCxoLHUpe3U9MDx1P3U6MDt2YXIgdz0wO2wuc3R5bGVbaF09dSsicHgiO3c9ImhlaWdodCI9PT1oP2wub2Zmc2V0SGVpZ2h0Omwub2Zmc2V0V2lkdGg7dz51JiYodS09dy11LDA+dSYmKHU9MCksbC5zdHlsZVtoXT11KyJweCIpfX0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJkb20tY29yZSJdfSk7CllVSS5hZGQoImRvbS1jb3JlIixmdW5jdGlvbihhLEUpe3ZhciBxPVtdLHQ9ZnVuY3Rpb24oKXt2YXIgZD1hLmNvbmZpZy5kb2MuY3JlYXRlRWxlbWVudCgiZGl2IiksYz1kLmFwcGVuZENoaWxkKGEuY29uZmlnLmRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpLGI9ITE7dHJ5e2I9ZC5jb250YWlucyhjKX1jYXRjaChnKXt9cmV0dXJuIGJ9KCksZj17YnlJZDpmdW5jdGlvbihkLGMpe3JldHVybiBmLmFsbEJ5SWQoZCxjKVswXXx8bnVsbH0sZ2V0SWQ6ZnVuY3Rpb24oZCl7dmFyIGM7IWQuaWR8fGQuaWQudGFnTmFtZXx8ZC5pZC5pdGVtP2QuYXR0cmlidXRlcyYmZC5hdHRyaWJ1dGVzLmlkJiYoYz1kLmF0dHJpYnV0ZXMuaWQudmFsdWUpOmM9ZC5pZDtyZXR1cm4gY30sc2V0SWQ6ZnVuY3Rpb24oZCxjKXtkLnNldEF0dHJpYnV0ZT9kLnNldEF0dHJpYnV0ZSgiaWQiLGMpOmQuaWQ9Y30sYW5jZXN0b3I6ZnVuY3Rpb24oZCxjLGIsZyl7dmFyIGU9bnVsbDtiJiYoZT0hY3x8YyhkKT9kOm51bGwpOwpyZXR1cm4gZXx8Zi5lbGVtZW50QnlBeGlzKGQsInBhcmVudE5vZGUiLGMsbnVsbCxnKX0sYW5jZXN0b3JzOmZ1bmN0aW9uKGQsYyxiLGcpe2Zvcih2YXIgZT1bXTsoZD1mLmFuY2VzdG9yKGQsYyxiLGcpKSYmIShiPSExLGQmJihlLnVuc2hpZnQoZCksZyYmZyhkKSkpOyk7cmV0dXJuIGV9LGVsZW1lbnRCeUF4aXM6ZnVuY3Rpb24oZCxjLGIsZyxlKXtmb3IoO2QmJihkPWRbY10pOyl7aWYoKGd8fGQudGFnTmFtZSkmJighYnx8YihkKSkpcmV0dXJuIGQ7aWYoZSYmZShkKSlicmVha31yZXR1cm4gbnVsbH0sY29udGFpbnM6ZnVuY3Rpb24oZCxjKXt2YXIgYj0hMTtpZihjJiZkJiZjLm5vZGVUeXBlJiZkLm5vZGVUeXBlKWlmKGQuY29udGFpbnMmJigxPT09Yy5ub2RlVHlwZXx8dCkpYj1kLmNvbnRhaW5zKGMpO2Vsc2UgaWYoZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbil7aWYoZD09PWN8fGQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYykmMTYpYj0hMH1lbHNlIGI9Zi5fYnJ1dGVDb250YWlucyhkLApjKTtlbHNlIGI9ITE7cmV0dXJuIGJ9LGluRG9jOmZ1bmN0aW9uKGQsYyl7dmFyIGI9ITE7ZCYmZC5ub2RlVHlwZSYmKGN8fChjPWQub3duZXJEb2N1bWVudCksYj0oYj1jLmRvY3VtZW50RWxlbWVudCkmJmIuY29udGFpbnMmJmQudGFnTmFtZT9iLmNvbnRhaW5zKGQpOmYuY29udGFpbnMoYixkKSk7cmV0dXJuIGJ9LGFsbEJ5SWQ6ZnVuY3Rpb24oZCxjKXtjPWN8fGEuY29uZmlnLmRvYzt2YXIgYj1bXSxnPVtdLGUsaztpZihjLnF1ZXJ5U2VsZWN0b3JBbGwpZz1jLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZFx4M2QiJytkKyciXScpO2Vsc2UgaWYoYy5hbGwpe2lmKGI9Yy5hbGwoZCkpaWYoYi5ub2RlTmFtZSYmKGIuaWQ9PT1kPyhnLnB1c2goYiksYj1xKTpiPVtiXSksYi5sZW5ndGgpZm9yKGU9MDtrPWJbZSsrXTspKGsuaWQ9PT1kfHxrLmF0dHJpYnV0ZXMmJmsuYXR0cmlidXRlcy5pZCYmay5hdHRyaWJ1dGVzLmlkLnZhbHVlPT09ZCkmJmcucHVzaChrKX1lbHNlIGc9W2YuX2dldERvYyhjKS5nZXRFbGVtZW50QnlJZChkKV07CnJldHVybiBnfSxpc1dpbmRvdzpmdW5jdGlvbihkKXtyZXR1cm4hIShkJiZkLnNjcm9sbFRvJiZkLmRvY3VtZW50KX0sX3JlbW92ZUNoaWxkTm9kZXM6ZnVuY3Rpb24oZCl7Zm9yKDtkLmZpcnN0Q2hpbGQ7KWQucmVtb3ZlQ2hpbGQoZC5maXJzdENoaWxkKX0sc2libGluZ3M6ZnVuY3Rpb24oZCxjKXtmb3IodmFyIGI9W10sZz1kO2c9Zy5wcmV2aW91c1NpYmxpbmc7KSFnLnRhZ05hbWV8fGMmJiFjKGcpfHxiLnVuc2hpZnQoZyk7Zm9yKGc9ZDtnPWcubmV4dFNpYmxpbmc7KSFnLnRhZ05hbWV8fGMmJiFjKGcpfHxiLnB1c2goZyk7cmV0dXJuIGJ9LF9icnV0ZUNvbnRhaW5zOmZ1bmN0aW9uKGQsYyl7Zm9yKDtjOyl7aWYoZD09PWMpcmV0dXJuITA7Yz1jLnBhcmVudE5vZGV9cmV0dXJuITF9LF9nZXRSZWdFeHA6ZnVuY3Rpb24oZCxjKXtjPWN8fCIiO2YuX3JlZ2V4Q2FjaGU9Zi5fcmVnZXhDYWNoZXx8e307Zi5fcmVnZXhDYWNoZVtkK2NdfHwoZi5fcmVnZXhDYWNoZVtkK2NdPVJlZ0V4cChkLApjKSk7cmV0dXJuIGYuX3JlZ2V4Q2FjaGVbZCtjXX0sX2dldERvYzpmdW5jdGlvbihkKXt2YXIgYz1hLmNvbmZpZy5kb2M7ZCYmKGM9OT09PWQubm9kZVR5cGU/ZDpkLm93bmVyRG9jdW1lbnR8fGQuZG9jdW1lbnR8fGEuY29uZmlnLmRvYyk7cmV0dXJuIGN9LF9nZXRXaW46ZnVuY3Rpb24oZCl7ZD1mLl9nZXREb2MoZCk7cmV0dXJuIGQuZGVmYXVsdFZpZXd8fGQucGFyZW50V2luZG93fHxhLmNvbmZpZy53aW59LF9iYXRjaDpmdW5jdGlvbihkLGMsYixnLGUsayl7Yz0ic3RyaW5nIj09PXR5cGVvZiBjP2ZbY106Yzt2YXIgbSxwPTAscztpZihjJiZkKWZvcig7bT1kW3ArK107KW09bT1jLmNhbGwoZixtLGIsZyxlLGspLCJ1bmRlZmluZWQiIT09dHlwZW9mIG0mJihzfHwocz1bXSkscy5wdXNoKG0pKTtyZXR1cm4idW5kZWZpbmVkIiE9PXR5cGVvZiBzP3M6ZH0sZ2VuZXJhdGVJRDpmdW5jdGlvbihkKXt2YXIgYz1kLmlkO2N8fChjPWEuc3RhbXAoZCksZC5pZD1jKTtyZXR1cm4gY319O2EuRE9NPQpmfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJvb3AiLCJmZWF0dXJlcyJdfSk7CllVSS5hZGQoImRvbS1zY3JlZW4iLGZ1bmN0aW9uKGEsRSl7KGZ1bmN0aW9uKHEpe3ZhciB0PXEuRE9NLGY9L150KD86YWJsZXxkfGgpJC9pLGQ7cS5VQS5pZSYmKGQ9IkJhY2tDb21wYXQiIT09cS5jb25maWcuZG9jLmNvbXBhdE1vZGU/ImRvY3VtZW50RWxlbWVudCI6ImJvZHkiKTtxLm1peCh0LHt3aW5IZWlnaHQ6ZnVuY3Rpb24oYyl7cmV0dXJuIHQuX2dldFdpblNpemUoYykuaGVpZ2h0fSx3aW5XaWR0aDpmdW5jdGlvbihjKXtyZXR1cm4gdC5fZ2V0V2luU2l6ZShjKS53aWR0aH0sZG9jSGVpZ2h0OmZ1bmN0aW9uKGMpe3ZhciBiPXQuX2dldERvY1NpemUoYykuaGVpZ2h0O3JldHVybiBNYXRoLm1heChiLHQuX2dldFdpblNpemUoYykuaGVpZ2h0KX0sZG9jV2lkdGg6ZnVuY3Rpb24oYyl7dmFyIGI9dC5fZ2V0RG9jU2l6ZShjKS53aWR0aDtyZXR1cm4gTWF0aC5tYXgoYix0Ll9nZXRXaW5TaXplKGMpLndpZHRoKX0sZG9jU2Nyb2xsWDpmdW5jdGlvbihjLGIpe2I9Ynx8Yz90Ll9nZXREb2MoYyk6CnEuY29uZmlnLmRvYzt2YXIgZz1iLmRlZmF1bHRWaWV3O3JldHVybiBNYXRoLm1heChiLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGIuYm9keS5zY3JvbGxMZWZ0LGc/Zy5wYWdlWE9mZnNldDowKX0sZG9jU2Nyb2xsWTpmdW5jdGlvbihjLGIpe2I9Ynx8Yz90Ll9nZXREb2MoYyk6cS5jb25maWcuZG9jO3ZhciBnPWIuZGVmYXVsdFZpZXc7cmV0dXJuIE1hdGgubWF4KGIuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCxiLmJvZHkuc2Nyb2xsVG9wLGc/Zy5wYWdlWU9mZnNldDowKX0sZ2V0WFk6ZnVuY3Rpb24oKXtyZXR1cm4gcS5jb25maWcuZG9jLmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/ZnVuY3Rpb24oYyl7dmFyIGI9bnVsbCxnLGUsayxtLHAscztpZihjJiZjLnRhZ05hbWUpaWYocD1jLm93bmVyRG9jdW1lbnQsYj1wLmNvbXBhdE1vZGUscz0iQmFja0NvbXBhdCIhPT1iP3AuZG9jdW1lbnRFbGVtZW50OnAuYm9keSxnPXMuY29udGFpbnM/cy5jb250YWlucyhjKToKcS5ET00uY29udGFpbnMocyxjKSl7KGU9cC5kZWZhdWx0VmlldykmJiJwYWdlWE9mZnNldCJpbiBlPyhnPWUucGFnZVhPZmZzZXQsZT1lLnBhZ2VZT2Zmc2V0KTooZz1kP3BbZF0uc2Nyb2xsTGVmdDp0LmRvY1Njcm9sbFgoYyxwKSxlPWQ/cFtkXS5zY3JvbGxUb3A6dC5kb2NTY3JvbGxZKGMscCkpO3EuVUEuaWUmJighcC5kb2N1bWVudE1vZGV8fDg+cC5kb2N1bWVudE1vZGV8fCJCYWNrQ29tcGF0Ij09PWIpJiYoaz1zLmNsaWVudExlZnQsbT1zLmNsaWVudFRvcCk7Yz1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2I9W2MubGVmdCxjLnRvcF07aWYoa3x8bSliWzBdLT1rLGJbMV0tPW07aWYoZXx8ZylpZighcS5VQS5pb3N8fDQuMjw9cS5VQS5pb3MpYlswXSs9ZyxiWzFdKz1lfWVsc2UgYj10Ll9nZXRPZmZzZXQoYyk7cmV0dXJuIGJ9OmZ1bmN0aW9uKGMpe3ZhciBiPW51bGwsZyxlLGssbTtpZihjKWlmKHQuaW5Eb2MoYykpe2I9W2Mub2Zmc2V0TGVmdCxjLm9mZnNldFRvcF07Zz1jLm93bmVyRG9jdW1lbnQ7CmU9Yztmb3Ioaz1xLlVBLmdlY2tvfHw1MTk8cS5VQS53ZWJraXQ/ITA6ITE7ZT1lLm9mZnNldFBhcmVudDspYlswXSs9ZS5vZmZzZXRMZWZ0LGJbMV0rPWUub2Zmc2V0VG9wLGsmJihiPXQuX2NhbGNCb3JkZXJzKGUsYikpO2lmKCJmaXhlZCIhPXQuZ2V0U3R5bGUoYywicG9zaXRpb24iKSlmb3IoZT1jO2U9ZS5wYXJlbnROb2RlOylpZihrPWUuc2Nyb2xsVG9wLG09ZS5zY3JvbGxMZWZ0LHEuVUEuZ2Vja28mJiJ2aXNpYmxlIiE9PXQuZ2V0U3R5bGUoZSwib3ZlcmZsb3ciKSYmKGI9dC5fY2FsY0JvcmRlcnMoZSxiKSksa3x8bSliWzBdLT1tLGJbMV0tPWs7YlswXSs9dC5kb2NTY3JvbGxYKGMsZyk7YlsxXSs9dC5kb2NTY3JvbGxZKGMsZyl9ZWxzZSBiPXQuX2dldE9mZnNldChjKTtyZXR1cm4gYn19KCksZ2V0U2Nyb2xsYmFyV2lkdGg6cS5jYWNoZWQoZnVuY3Rpb24oKXt2YXIgYz1xLmNvbmZpZy5kb2MsYj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLAplPTAuMTtnJiYoYi5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbjtvdmVyZmxvdzpzY3JvbGw7d2lkdGg6MjBweDsiLGIuYXBwZW5kQ2hpbGQoYy5jcmVhdGVFbGVtZW50KCJwIikpLnN0eWxlLmhlaWdodD0iMXB4IixnLmluc2VydEJlZm9yZShiLGcuZmlyc3RDaGlsZCksZT1iLm9mZnNldFdpZHRoLWIuY2xpZW50V2lkdGgsZy5yZW1vdmVDaGlsZChiKSk7cmV0dXJuIGV9LG51bGwsMC4xKSxnZXRYOmZ1bmN0aW9uKGMpe3JldHVybiB0LmdldFhZKGMpWzBdfSxnZXRZOmZ1bmN0aW9uKGMpe3JldHVybiB0LmdldFhZKGMpWzFdfSxzZXRYWTpmdW5jdGlvbihjLGIsZyl7dmFyIGU9dC5zZXRTdHlsZSxrLG0scCxzO2MmJmImJihrPXQuZ2V0U3R5bGUoYywicG9zaXRpb24iKSxwPXQuT0ZGU0VUX1hZLHB8fChtPXQuZ2V0Q29tcHV0ZWRTdHlsZShjLCJkaXJlY3Rpb24iKSxwPSJydGwiPT09bT8icmlnaHQiOiJsZWZ0IiksbT10Ll9nZXRPZmZzZXQoYywKcCksInN0YXRpYyI9PWsmJmUoYywicG9zaXRpb24iLCJyZWxhdGl2ZSIpLGs9dC5fZ2V0RGlyWFkoYyxwKSxzPWJbMF0sInJpZ2h0Ij09PXAmJihzPXQud2luV2lkdGgoKS0oYlswXStwYXJzZUludCh0LmdldENvbXB1dGVkU3R5bGUoYywid2lkdGgiKSwxMCkpLG1bMF18fGd8fChnPSExKSksbnVsbCE9PXMmJmUoYyxwLHMta1swXSttWzBdKyJweCIpLG51bGwhPT1iWzFdJiZlKGMsInRvcCIsYlsxXS1rWzFdK21bMV0rInB4IiksZ3x8KGc9dC5nZXRYWShjKSxnWzBdPT09YlswXSYmZ1sxXT09PWJbMV18fHQuc2V0WFkoYyxiLCEwKSkpfSxzZXRYOmZ1bmN0aW9uKGMsYil7cmV0dXJuIHQuc2V0WFkoYyxbYixudWxsXSl9LHNldFk6ZnVuY3Rpb24oYyxiKXtyZXR1cm4gdC5zZXRYWShjLFtudWxsLGJdKX0sc3dhcFhZOmZ1bmN0aW9uKGMsYil7dmFyIGc9dC5nZXRYWShjKTt0LnNldFhZKGMsdC5nZXRYWShiKSk7dC5zZXRYWShiLGcpfSxfY2FsY0JvcmRlcnM6ZnVuY3Rpb24oYyxiKXt2YXIgZz0KcGFyc2VJbnQodC5nZXRDb21wdXRlZFN0eWxlKGMsImJvcmRlclRvcFdpZHRoIiksMTApfHwwLGU9cGFyc2VJbnQodC5nZXRDb21wdXRlZFN0eWxlKGMsImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MDtxLlVBLmdlY2tvJiZmLnRlc3QoYy50YWdOYW1lKSYmKGU9Zz0wKTtiWzBdKz1lO2JbMV0rPWc7cmV0dXJuIGJ9LF9nZXRXaW5TaXplOmZ1bmN0aW9uKGMsYil7Yj1ifHxjP3QuX2dldERvYyhjKTpxLmNvbmZpZy5kb2M7dmFyIGc9Yi5kZWZhdWx0Vmlld3x8Yi5wYXJlbnRXaW5kb3csZT1iLmNvbXBhdE1vZGUsaz1nLmlubmVySGVpZ2h0LGc9Zy5pbm5lcldpZHRoLG09Yi5kb2N1bWVudEVsZW1lbnQ7ZSYmIXEuVUEub3BlcmEmJigiQ1NTMUNvbXBhdCIhPWUmJihtPWIuYm9keSksaz1tLmNsaWVudEhlaWdodCxnPW0uY2xpZW50V2lkdGgpO3JldHVybntoZWlnaHQ6ayx3aWR0aDpnfX0sX2dldERvY1NpemU6ZnVuY3Rpb24oYyl7Yz1jP3QuX2dldERvYyhjKTpxLmNvbmZpZy5kb2M7dmFyIGI9CmMuZG9jdW1lbnRFbGVtZW50OyJDU1MxQ29tcGF0IiE9Yy5jb21wYXRNb2RlJiYoYj1jLmJvZHkpO3JldHVybntoZWlnaHQ6Yi5zY3JvbGxIZWlnaHQsd2lkdGg6Yi5zY3JvbGxXaWR0aH19LF9nZXREaXJYWTpmdW5jdGlvbihjLGIpe3ZhciBnPXQuZ2V0WFkoYyk7InJpZ2h0Ij09PWImJihnWzBdPXQud2luV2lkdGgoKS0oZ1swXStwYXJzZUludCh0LmdldENvbXB1dGVkU3R5bGUoYywid2lkdGgiKSwxMCkpKTtyZXR1cm4gZ319KX0pKGEpOyhmdW5jdGlvbihxKXt2YXIgdD1mdW5jdGlvbihkLGMpe3ZhciBiPU1hdGgubWF4KGQudG9wLGMudG9wKSxnPU1hdGgubWluKGQucmlnaHQsYy5yaWdodCksZT1NYXRoLm1pbihkLmJvdHRvbSxjLmJvdHRvbSksaz1NYXRoLm1heChkLmxlZnQsYy5sZWZ0KSxtPXt9O20udG9wPWI7bS5yaWdodD1nO20uYm90dG9tPWU7bS5sZWZ0PWs7cmV0dXJuIG19LGY9cS5ET007cS5taXgoZix7cmVnaW9uOmZ1bmN0aW9uKGQpe3ZhciBjPWYuZ2V0WFkoZCksYj0KITE7ZCYmYyYmKGI9Zi5fZ2V0UmVnaW9uKGNbMV0sY1swXStkLm9mZnNldFdpZHRoLGNbMV0rZC5vZmZzZXRIZWlnaHQsY1swXSkpO3JldHVybiBifSxpbnRlcnNlY3Q6ZnVuY3Rpb24oZCxjLGIpe3ZhciBnPWJ8fGYucmVnaW9uKGQpLGU9e307aWYoYy50YWdOYW1lKWU9Zi5yZWdpb24oYyk7ZWxzZSBpZihxLkxhbmcuaXNPYmplY3QoYykpZT1jO2Vsc2UgcmV0dXJuITE7Zz10KGUsZyk7cmV0dXJue3RvcDpnLnRvcCxyaWdodDpnLnJpZ2h0LGJvdHRvbTpnLmJvdHRvbSxsZWZ0OmcubGVmdCxhcmVhOihnLmJvdHRvbS1nLnRvcCkqKGcucmlnaHQtZy5sZWZ0KSx5b2ZmOmcuYm90dG9tLWcudG9wLHhvZmY6Zy5yaWdodC1nLmxlZnQsaW5SZWdpb246Zi5pblJlZ2lvbihkLGMsITEsYil9fSxpblJlZ2lvbjpmdW5jdGlvbihkLGMsYixnKXt2YXIgZT17fTtkPWd8fGYucmVnaW9uKGQpO2lmKGMudGFnTmFtZSllPWYucmVnaW9uKGMpO2Vsc2UgaWYocS5MYW5nLmlzT2JqZWN0KGMpKWU9YztlbHNlIHJldHVybiExOwppZihiKXJldHVybiBkLmxlZnQ+PWUubGVmdCYmZC5yaWdodDw9ZS5yaWdodCYmZC50b3A+PWUudG9wJiZkLmJvdHRvbTw9ZS5ib3R0b207Yz10KGUsZCk7cmV0dXJuIGMuYm90dG9tPj1jLnRvcCYmYy5yaWdodD49Yy5sZWZ0PyEwOiExfSxpblZpZXdwb3J0UmVnaW9uOmZ1bmN0aW9uKGQsYyxiKXtyZXR1cm4gZi5pblJlZ2lvbihkLGYudmlld3BvcnRSZWdpb24oZCksYyxiKX0sX2dldFJlZ2lvbjpmdW5jdGlvbihkLGMsYixnKXt2YXIgZT17fTtlLnRvcD1lWzFdPWQ7ZS5sZWZ0PWVbMF09ZztlLmJvdHRvbT1iO2UucmlnaHQ9YztlLndpZHRoPWUucmlnaHQtZS5sZWZ0O2UuaGVpZ2h0PWUuYm90dG9tLWUudG9wO3JldHVybiBlfSx2aWV3cG9ydFJlZ2lvbjpmdW5jdGlvbihkKXtkPWR8fHEuY29uZmlnLmRvYy5kb2N1bWVudEVsZW1lbnQ7dmFyIGM9ITEsYjtkJiYoYz1mLmRvY1Njcm9sbFgoZCksYj1mLmRvY1Njcm9sbFkoZCksYz1mLl9nZXRSZWdpb24oYixmLndpbldpZHRoKGQpK2MsCmIrZi53aW5IZWlnaHQoZCksYykpO3JldHVybiBjfX0pfSkoYSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImRvbS1iYXNlIiwiZG9tLXN0eWxlIl19KTsKWVVJLmFkZCgiZG9tLXN0eWxlIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuY29uZmlnLmRvYyx0PWEuRE9NLGYsZCxjPS93aWR0aHxoZWlnaHR8dG9wfGxlZnR8cmlnaHR8Ym90dG9tfG1hcmdpbnxwYWRkaW5nL2k7YS5BcnJheS5lYWNoKFsiV2Via2l0VHJhbnNmb3JtIiwiTW96VHJhbnNmb3JtIiwiT1RyYW5zZm9ybSIsIm1zVHJhbnNmb3JtIiwidHJhbnNmb3JtIl0sZnVuY3Rpb24oYil7YiBpbiBxLmRvY3VtZW50RWxlbWVudC5zdHlsZSYmKGY9YixkPWIrIk9yaWdpbiIpfSk7YS5taXgodCx7REVGQVVMVF9VTklUOiJweCIsQ1VTVE9NX1NUWUxFUzp7fSxzZXRTdHlsZTpmdW5jdGlvbihiLGcsZSxrKXtrPWt8fGIuc3R5bGU7dmFyIG09dC5DVVNUT01fU1RZTEVTO2lmKGspe251bGw9PT1lfHwiIj09PWU/ZT0iIjohaXNOYU4oTnVtYmVyKGUpKSYmYy50ZXN0KGcpJiYoZSs9dC5ERUZBVUxUX1VOSVQpO2lmKGcgaW4gbSl7aWYobVtnXS5zZXQpe21bZ10uc2V0KGIsZSxrKTtyZXR1cm59InN0cmluZyI9PT0KdHlwZW9mIG1bZ10mJihnPW1bZ10pfWVsc2UiIj09PWcmJihnPSJjc3NUZXh0IixlPSIiKTtrW2ddPWV9fSxnZXRTdHlsZTpmdW5jdGlvbihiLGcsZSl7ZT1lfHxiLnN0eWxlO3ZhciBrPXQuQ1VTVE9NX1NUWUxFUyxtPSIiO2lmKGUpe2lmKGcgaW4gayl7aWYoa1tnXS5nZXQpcmV0dXJuIGtbZ10uZ2V0KGIsZyxlKTsic3RyaW5nIj09PXR5cGVvZiBrW2ddJiYoZz1rW2ddKX1tPWVbZ107IiI9PT1tJiYobT10LmdldENvbXB1dGVkU3R5bGUoYixnKSl9cmV0dXJuIG19LHNldFN0eWxlczpmdW5jdGlvbihiLGcpe3ZhciBlPWIuc3R5bGU7YS5lYWNoKGcsZnVuY3Rpb24oayxtKXt0LnNldFN0eWxlKGIsbSxrLGUpfSx0KX0sZ2V0Q29tcHV0ZWRTdHlsZTpmdW5jdGlvbihiLGcpe3ZhciBlPSIiLGs9Yi5vd25lckRvY3VtZW50O2Iuc3R5bGUmJmsuZGVmYXVsdFZpZXcmJmsuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKGs9ay5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGIsCm51bGwpKSYmKGU9a1tnXSk7cmV0dXJuIGV9fSk7dm9pZCAwIT09cS5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3NzRmxvYXQ/dC5DVVNUT01fU1RZTEVTWyJmbG9hdCJdPSJjc3NGbG9hdCI6dm9pZCAwIT09cS5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc3R5bGVGbG9hdCYmKHQuQ1VTVE9NX1NUWUxFU1siZmxvYXQiXT0ic3R5bGVGbG9hdCIpO2EuVUEud2Via2l0JiYodC5nZXRDb21wdXRlZFN0eWxlPWZ1bmN0aW9uKGIsZyl7dmFyIGU9Yi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYiwiIilbZ107InJnYmEoMCwgMCwgMCwgMCkiPT09ZSYmKGU9InRyYW5zcGFyZW50Iik7cmV0dXJuIGV9KTthLkRPTS5fZ2V0QXR0ck9mZnNldD1mdW5jdGlvbihiLGcpe3ZhciBlPWEuRE9NLmdldENvbXB1dGVkU3R5bGUoYixnKSxrPWIub2Zmc2V0UGFyZW50LG07ImF1dG8iPT09ZSYmKG09YS5ET00uZ2V0U3R5bGUoYiwicG9zaXRpb24iKSwic3RhdGljIj09PW18fCJyZWxhdGl2ZSI9PT0KbT9lPTA6ayYmay5nZXRCb3VuZGluZ0NsaWVudFJlY3QmJihlPWsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZ10saz1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2ddLGU9ImxlZnQiPT09Z3x8InRvcCI9PT1nP2stZTplLWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZ10pKTtyZXR1cm4gZX07YS5ET00uX2dldE9mZnNldD1mdW5jdGlvbihiLGcpe3ZhciBlLGs9bnVsbCxtPXtsZWZ0OiJvZmZzZXRMZWZ0IixyaWdodDoib2Zmc2V0UmlnaHQifSxwPXtsZWZ0OiJtYXJnaW5MZWZ0IixyaWdodDoibWFyZ2luUmlnaHQifTtnPWd8fCJsZWZ0IjtiJiYoZT10LmdldFN0eWxlKGIsInBvc2l0aW9uIikscD1wYXJzZUludCh0LmdldENvbXB1dGVkU3R5bGUoYixwW2ddKSwxMCksaz1bcGFyc2VJbnQodC5nZXRDb21wdXRlZFN0eWxlKGIsZyksMTApLHBhcnNlSW50KHQuZ2V0Q29tcHV0ZWRTdHlsZShiLCJ0b3AiKSwxMCldLGlzTmFOKGtbMF0pJiYoa1swXT1wYXJzZUludCh0LmdldFN0eWxlKGIsCmcpLDEwKSxpc05hTihrWzBdKSYmKGtbMF09InJlbGF0aXZlIj09PWU/MDpiW21bZ11dLXB8fDApKSxpc05hTihrWzFdKSYmKGtbMV09cGFyc2VJbnQodC5nZXRTdHlsZShiLCJ0b3AiKSwxMCksaXNOYU4oa1sxXSkmJihrWzFdPSJyZWxhdGl2ZSI9PT1lPzA6Yi5vZmZzZXRUb3B8fDApKSk7cmV0dXJuIGt9O2YmJih0LkNVU1RPTV9TVFlMRVMudHJhbnNmb3JtPXtzZXQ6ZnVuY3Rpb24oYixnLGUpe2VbZl09Z30sZ2V0OmZ1bmN0aW9uKGIpe3JldHVybiB0LmdldENvbXB1dGVkU3R5bGUoYixmKX19LHQuQ1VTVE9NX1NUWUxFUy50cmFuc2Zvcm1PcmlnaW49e3NldDpmdW5jdGlvbihiLGcsZSl7ZVtkXT1nfSxnZXQ6ZnVuY3Rpb24oYil7cmV0dXJuIHQuZ2V0Q29tcHV0ZWRTdHlsZShiLGQpfX0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJkb20tYmFzZSJdfSk7CllVSS5hZGQoImV2ZW50LWJhc2UiLGZ1bmN0aW9uKGEsRSl7YS5wdWJsaXNoKCJkb21yZWFkeSIse2ZpcmVPbmNlOiEwLGFzeW5jOiEwfSk7WVVJLkVudi5ET01SZWFkeT9hLmZpcmUoImRvbXJlYWR5Iik6YS5Eby5iZWZvcmUoZnVuY3Rpb24oKXthLmZpcmUoImRvbXJlYWR5Iil9LFlVSS5FbnYsIl9yZWFkeSIpO3ZhciBxPWEuVUEsdD17fSxmPXs2MzIzMjozOCw2MzIzMzo0MCw2MzIzNDozNyw2MzIzNTozOSw2MzI3NjozMyw2MzI3NzozNCwyNTo5LDYzMjcyOjQ2LDYzMjczOjM2LDYzMjc1OjM1fSxkPWZ1bmN0aW9uKGIpe2lmKCFiKXJldHVybiBiO3RyeXtiJiYzPT1iLm5vZGVUeXBlJiYoYj1iLnBhcmVudE5vZGUpfWNhdGNoKGcpe3JldHVybiBudWxsfXJldHVybiBhLm9uZShiKX0sYz1mdW5jdGlvbihiLGcsZSl7dGhpcy5fZXZlbnQ9Yjt0aGlzLl9jdXJyZW50VGFyZ2V0PWc7dGhpcy5fd3JhcHBlcj1lfHx0O3RoaXMuaW5pdCgpfTthLmV4dGVuZChjLE9iamVjdCx7aW5pdDpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLl9ldmVudCxnPXRoaXMuX3dyYXBwZXIub3ZlcnJpZGVzLGU9Yi5wYWdlWCxrPWIucGFnZVksbT10aGlzLl9jdXJyZW50VGFyZ2V0O3RoaXMuYWx0S2V5PWIuYWx0S2V5O3RoaXMuY3RybEtleT1iLmN0cmxLZXk7dGhpcy5tZXRhS2V5PWIubWV0YUtleTt0aGlzLnNoaWZ0S2V5PWIuc2hpZnRLZXk7dGhpcy50eXBlPWcmJmcudHlwZXx8Yi50eXBlO3RoaXMuY2xpZW50WD1iLmNsaWVudFg7dGhpcy5jbGllbnRZPWIuY2xpZW50WTt0aGlzLnBhZ2VYPWU7dGhpcy5wYWdlWT1rO2c9Yi5rZXlDb2RlfHxiLmNoYXJDb2RlO3Eud2Via2l0JiZnIGluIGYmJihnPWZbZ10pO3RoaXMuY2hhckNvZGU9dGhpcy5rZXlDb2RlPWc7dGhpcy5idXR0b249dGhpcy53aGljaD1iLndoaWNofHxiLmNoYXJDb2RlfHxnO3RoaXMudGFyZ2V0PWQoYi50YXJnZXQpO3RoaXMuY3VycmVudFRhcmdldD1kKG0pO3RoaXMucmVsYXRlZFRhcmdldD1kKGIucmVsYXRlZFRhcmdldCk7aWYoIm1vdXNld2hlZWwiPT0KYi50eXBlfHwiRE9NTW91c2VTY3JvbGwiPT1iLnR5cGUpdGhpcy53aGVlbERlbHRhPWIuZGV0YWlsPy0xKmIuZGV0YWlsOk1hdGgucm91bmQoYi53aGVlbERlbHRhLzgwKXx8KDA+Yi53aGVlbERlbHRhPy0xOjEpO3RoaXMuX3RvdWNoJiZ0aGlzLl90b3VjaChiLG0sdGhpcy5fd3JhcHBlcil9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuX2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuc3RvcHBlZD10aGlzLl93cmFwcGVyLnN0b3BwZWQ9MX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fZXZlbnQ7Yi5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24/Yi5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTp0aGlzLnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuc3RvcHBlZD10aGlzLl93cmFwcGVyLnN0b3BwZWQ9Mn0scHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oYil7dmFyIGc9dGhpcy5fZXZlbnQ7Zy5wcmV2ZW50RGVmYXVsdCgpO2ImJihnLnJldHVyblZhbHVlPQpiKTt0aGlzLnByZXZlbnRlZD10aGlzLl93cmFwcGVyLnByZXZlbnRlZD0xfSxoYWx0OmZ1bmN0aW9uKGIpe2I/dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTp0aGlzLnN0b3BQcm9wYWdhdGlvbigpO3RoaXMucHJldmVudERlZmF1bHQoKX19KTtjLnJlc29sdmU9ZDthLkRPTTJFdmVudEZhY2FkZT1jO2EuRE9NRXZlbnRGYWNhZGU9YzsoZnVuY3Rpb24oKXthLkVudi5ldnQuZG9tX3dyYXBwZXJzPXt9O2EuRW52LmV2dC5kb21fbWFwPXt9O3ZhciBiPWEuRW52LmV2dCxnPWEuY29uZmlnLGU9Zy53aW4saz1ZVUkuRW52LmFkZCxtPVlVSS5FbnYucmVtb3ZlLHA9ZnVuY3Rpb24oKXtZVUkuRW52LndpbmRvd0xvYWRlZD0hMDthLkV2ZW50Ll9sb2FkKCk7bShlLCJsb2FkIixwKX0scz1mdW5jdGlvbigpe2EuRXZlbnQuX3VubG9hZCgpfSxsPWZ1bmN0aW9uKEEpe3RyeXtyZXR1cm4gQSYmInN0cmluZyIhPT10eXBlb2YgQSYmYS5MYW5nLmlzTnVtYmVyKEEubGVuZ3RoKSYmIUEudGFnTmFtZSYmCiFhLkRPTS5pc1dpbmRvdyhBKX1jYXRjaChIKXtyZXR1cm4hMX19LGg9YS5DdXN0b21FdmVudC5wcm90b3R5cGUuX2RlbGV0ZSx1PWZ1bmN0aW9uKEEpe3ZhciBIPWguYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaGFzU3VicygpfHxhLkV2ZW50Ll9jbGVhbih0aGlzKTtyZXR1cm4gSH0sdz1mdW5jdGlvbigpe3ZhciBBPSExLEg9MCxGPVtdLEI9Yi5kb21fd3JhcHBlcnMsST1iLmRvbV9tYXA7cmV0dXJue1BPTExfUkVUUllTOjFFMyxQT0xMX0lOVEVSVkFMOjQwLGxhc3RFcnJvcjpudWxsLF9pbnRlcnZhbDpudWxsLF9kcmk6bnVsbCxET01SZWFkeTohMSxzdGFydEludGVydmFsOmZ1bmN0aW9uKCl7dy5faW50ZXJ2YWx8fCh3Ll9pbnRlcnZhbD1zZXRJbnRlcnZhbCh3Ll9wb2xsLHcuUE9MTF9JTlRFUlZBTCkpfSxvbkF2YWlsYWJsZTpmdW5jdGlvbihNLEQsSixQLFYsWSl7dmFyIG5hPWEuQXJyYXkoTSksZmE7Zm9yKE09MDtNPG5hLmxlbmd0aDtNKz0xKUYucHVzaCh7aWQ6bmFbTV0sCmZuOkQsb2JqOkosb3ZlcnJpZGU6UCxjaGVja1JlYWR5OlYsY29tcGF0Oll9KTtIPXRoaXMuUE9MTF9SRVRSWVM7c2V0VGltZW91dCh3Ll9wb2xsLDApO3JldHVybiBmYT1uZXcgYS5FdmVudEhhbmRsZSh7X2RlbGV0ZTpmdW5jdGlvbigpe2lmKGZhLmhhbmRsZSlmYS5oYW5kbGUuZGV0YWNoKCk7ZWxzZXt2YXIgaWEsWjtmb3IoaWE9MDtpYTxuYS5sZW5ndGg7aWErKylmb3IoWj0wO1o8Ri5sZW5ndGg7WisrKW5hW2lhXT09PUZbWl0uaWQmJkYuc3BsaWNlKFosMSl9fX0pfSxvbkNvbnRlbnRSZWFkeTpmdW5jdGlvbihNLEQsSixQLFYpe3JldHVybiB3Lm9uQXZhaWxhYmxlKE0sRCxKLFAsITAsVil9LGF0dGFjaDpmdW5jdGlvbihNLEQsSixQKXtyZXR1cm4gdy5fYXR0YWNoKGEuQXJyYXkoYXJndW1lbnRzLDAsITApKX0sX2NyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oTSxELEosUCxWKXt2YXIgWSxuYT1hLnN0YW1wKE0pLGZhPSJldmVudDoiK25hK0Q7ITE9PT1WJiYoZmErPSJuYXRpdmUiKTsKSiYmKGZhKz0iY2FwdHVyZSIpO1k9QltmYV07WXx8KFk9YS5wdWJsaXNoKGZhLHtzaWxlbnQ6ITAsYnViYmxlczohMSxlbWl0RmFjYWRlOiExLGNvbnRleHRGbjpmdW5jdGlvbigpe2lmKFApcmV0dXJuIFkuZWw7WS5ub2RlUmVmPVkubm9kZVJlZnx8YS5vbmUoWS5lbCk7cmV0dXJuIFkubm9kZVJlZn19KSxZLm92ZXJyaWRlcz17fSxZLmVsPU0sWS5rZXk9ZmEsWS5kb21rZXk9bmEsWS50eXBlPUQsWS5mbj1mdW5jdGlvbihpYSl7WS5maXJlKHcuZ2V0RXZlbnQoaWEsTSxQfHwhMT09PVYpKX0sWS5jYXB0dXJlPUosTT09ZSYmImxvYWQiPT1EJiYoWS5maXJlT25jZT0hMCksWS5fZGVsZXRlPXUsQltmYV09WSxJW25hXT1JW25hXXx8e30sSVtuYV1bZmFdPVksayhNLEQsWS5mbixKKSk7cmV0dXJuIFl9LF9hdHRhY2g6ZnVuY3Rpb24oTSxEKXt2YXIgSixQLFYsWT0hMSxuYSxmYT1NWzBdLGlhPU1bMV0sWj1NWzJdfHxlLGVhPUQmJkQuZmFjYWRlLG9hPUQmJkQuY2FwdHVyZSxBYT1EJiZELm92ZXJyaWRlczsKIn55dWl8Mnxjb21wYXR+Ij09PU1bTS5sZW5ndGgtMV0mJihKPSEwKTtpZighaWF8fCFpYS5jYWxsKXJldHVybiExO2lmKGwoWikpcmV0dXJuIFA9W10sYS5lYWNoKFosZnVuY3Rpb24ocGEsRmEpe01bMl09cGE7UC5wdXNoKHcuX2F0dGFjaChNLnNsaWNlKCksRCkpfSksbmV3IGEuRXZlbnRIYW5kbGUoUCk7aWYoYS5MYW5nLmlzU3RyaW5nKFopKXtpZihKKVY9YS5ET00uYnlJZChaKTtlbHNlIHN3aXRjaChWPWEuU2VsZWN0b3IucXVlcnkoWiksVi5sZW5ndGgpe2Nhc2UgMDpWPW51bGw7YnJlYWs7Y2FzZSAxOlY9VlswXTticmVhaztkZWZhdWx0OnJldHVybiBNWzJdPVYsdy5fYXR0YWNoKE0sRCl9aWYoVilaPVY7ZWxzZSByZXR1cm4gbmE9dy5vbkF2YWlsYWJsZShaLGZ1bmN0aW9uKCl7bmEuaGFuZGxlPXcuX2F0dGFjaChNLEQpfSx3LCEwLCExLEopfWlmKCFaKXJldHVybiExO2EuTm9kZSYmYS5pbnN0YW5jZU9mKFosYS5Ob2RlKSYmKFo9YS5Ob2RlLmdldERPTU5vZGUoWikpO1Y9CncuX2NyZWF0ZVdyYXBwZXIoWixmYSxvYSxKLGVhKTtBYSYmYS5taXgoVi5vdmVycmlkZXMsQWEpO1o9PWUmJiJsb2FkIj09ZmEmJllVSS5FbnYud2luZG93TG9hZGVkJiYoWT0hMCk7SiYmTS5wb3AoKTtuYT1WLl9vbihpYSxNWzNdLDQ8TS5sZW5ndGg/TS5zbGljZSg0KTpudWxsKTtZJiZWLmZpcmUoKTtyZXR1cm4gbmF9LGRldGFjaDpmdW5jdGlvbihNLEQsSixQKXt2YXIgVj1hLkFycmF5KGFyZ3VtZW50cywwLCEwKSxZLG5hLGZhOyJ+eXVpfDJ8Y29tcGF0fiI9PT1WW1YubGVuZ3RoLTFdJiYoWT0hMCk7aWYoTSYmTS5kZXRhY2gpcmV0dXJuIE0uZGV0YWNoKCk7InN0cmluZyI9PXR5cGVvZiBKJiYoWT9KPWEuRE9NLmJ5SWQoSik6KEo9YS5TZWxlY3Rvci5xdWVyeShKKSxZPUoubGVuZ3RoLDE+WT9KPW51bGw6MT09WSYmKEo9SlswXSkpKTtpZighSilyZXR1cm4hMTtpZihKLmRldGFjaClyZXR1cm4gVi5zcGxpY2UoMiwxKSxKLmRldGFjaC5hcHBseShKLFYpO2lmKGwoSikpe25hPQohMDtmYT0wO2ZvcihZPUoubGVuZ3RoO2ZhPFk7KytmYSlWWzJdPUpbZmFdLG5hPWEuRXZlbnQuZGV0YWNoLmFwcGx5KGEuRXZlbnQsVikmJm5hO3JldHVybiBuYX1pZighTXx8IUR8fCFELmNhbGwpcmV0dXJuIHcucHVyZ2VFbGVtZW50KEosITEsTSk7Vj0iZXZlbnQ6IithLnN0YW1wKEopK007cmV0dXJuKFY9QltWXSk/Vi5kZXRhY2goRCk6ITF9LGdldEV2ZW50OmZ1bmN0aW9uKE0sRCxKKXt2YXIgUD1NfHxlLmV2ZW50O3JldHVybiBKP1A6bmV3IGEuRE9NRXZlbnRGYWNhZGUoUCxELEJbImV2ZW50OiIrYS5zdGFtcChEKStNLnR5cGVdKX0sZ2VuZXJhdGVJZDpmdW5jdGlvbihNKXtyZXR1cm4gYS5ET00uZ2VuZXJhdGVJRChNKX0sX2lzVmFsaWRDb2xsZWN0aW9uOmwsX2xvYWQ6ZnVuY3Rpb24oTSl7QXx8KEE9ITAsYS5maXJlJiZhLmZpcmUoImRvbXJlYWR5Iiksdy5fcG9sbCgpKX0sX3BvbGw6ZnVuY3Rpb24oKXtpZighdy5sb2NrZWQpaWYoYS5VQS5pZSYmIVlVSS5FbnYuRE9NUmVhZHkpdy5zdGFydEludGVydmFsKCk7CmVsc2V7dy5sb2NrZWQ9ITA7dmFyIE0sRCxKLFAsVixZLG5hPSFBO25hfHwobmE9MDxIKTtWPVtdO1k9ZnVuY3Rpb24oZmEsaWEpe3ZhciBaLGVhPWlhLm92ZXJyaWRlO3RyeXtpYS5jb21wYXQ/KFo9aWEub3ZlcnJpZGU/ITA9PT1lYT9pYS5vYmo6ZWE6ZmEsaWEuZm4uY2FsbChaLGlhLm9iaikpOihaPWlhLm9ianx8YS5vbmUoZmEpLGlhLmZuLmFwcGx5KFosYS5MYW5nLmlzQXJyYXkoZWEpP2VhOltdKSl9Y2F0Y2gob2Epe319O009MDtmb3IoRD1GLmxlbmd0aDtNPEQ7KytNKShKPUZbTV0pJiYhSi5jaGVja1JlYWR5JiYoKFA9Si5jb21wYXQ/YS5ET00uYnlJZChKLmlkKTphLlNlbGVjdG9yLnF1ZXJ5KEouaWQsbnVsbCwhMCkpPyhZKFAsSiksRltNXT1udWxsKTpWLnB1c2goSikpO009MDtmb3IoRD1GLmxlbmd0aDtNPEQ7KytNKWlmKChKPUZbTV0pJiZKLmNoZWNrUmVhZHkpaWYoUD1KLmNvbXBhdD9hLkRPTS5ieUlkKEouaWQpOmEuU2VsZWN0b3IucXVlcnkoSi5pZCxudWxsLCEwKSl7aWYoQXx8ClAuZ2V0JiZQLmdldCgibmV4dFNpYmxpbmciKXx8UC5uZXh0U2libGluZylZKFAsSiksRltNXT1udWxsfWVsc2UgVi5wdXNoKEopO0g9MD09PVYubGVuZ3RoPzA6SC0xO25hP3cuc3RhcnRJbnRlcnZhbCgpOihjbGVhckludGVydmFsKHcuX2ludGVydmFsKSx3Ll9pbnRlcnZhbD1udWxsKTt3LmxvY2tlZD0hMX19LHB1cmdlRWxlbWVudDpmdW5jdGlvbihNLEQsSil7dmFyIFA9YS5MYW5nLmlzU3RyaW5nKE0pP2EuU2VsZWN0b3IucXVlcnkoTSxudWxsLCEwKTpNO009dy5nZXRMaXN0ZW5lcnMoUCxKKTt2YXIgVixZO2lmKEQmJlApZm9yKE09TXx8W10sVj1hLlNlbGVjdG9yLnF1ZXJ5KCIqIixQKSxQPVYubGVuZ3RoLEQ9MDtEPFA7KytEKShZPXcuZ2V0TGlzdGVuZXJzKFZbRF0sSikpJiYoTT1NLmNvbmNhdChZKSk7aWYoTSlmb3IoRD0wLFA9TS5sZW5ndGg7RDxQOysrRClNW0RdLmRldGFjaEFsbCgpfSxfY2xlYW46ZnVuY3Rpb24oTSl7dmFyIEQ9TS5rZXksSj1NLmRvbWtleTttKE0uZWwsCk0udHlwZSxNLmZuLE0uY2FwdHVyZSk7ZGVsZXRlIEJbRF07ZGVsZXRlIGEuX3l1aWV2dC5ldmVudHNbRF07SVtKXSYmKGRlbGV0ZSBJW0pdW0RdLGEuT2JqZWN0LnNpemUoSVtKXSl8fGRlbGV0ZSBJW0pdKX0sZ2V0TGlzdGVuZXJzOmZ1bmN0aW9uKE0sRCl7dmFyIEo9YS5zdGFtcChNLCEwKSxQPUlbSl0sVj1bXSxKPUQ/ImV2ZW50OiIrSitEOm51bGwsWT1iLnBsdWdpbnM7aWYoIVApcmV0dXJuIG51bGw7Sj8oWVtEXSYmWVtEXS5ldmVudERlZiYmKEorPSJfc3ludGgiKSxQW0pdJiZWLnB1c2goUFtKXSksSis9Im5hdGl2ZSIsUFtKXSYmVi5wdXNoKFBbSl0pKTphLmVhY2goUCxmdW5jdGlvbihuYSxmYSl7Vi5wdXNoKG5hKX0pO3JldHVybiBWLmxlbmd0aD9WOm51bGx9LF91bmxvYWQ6ZnVuY3Rpb24oTSl7YS5lYWNoKEIsZnVuY3Rpb24oRCxKKXsidW5sb2FkIj09RC50eXBlJiZELmZpcmUoTSk7RC5kZXRhY2hBbGwoKX0pO20oZSwidW5sb2FkIixzKX0sbmF0aXZlQWRkOmssbmF0aXZlUmVtb3ZlOm19fSgpOwphLkV2ZW50PXc7Zy5pbmplY3RlZHx8WVVJLkVudi53aW5kb3dMb2FkZWQ/cCgpOmsoZSwibG9hZCIscCk7aWYoYS5VQS5pZSYmKGEub24oImRvbXJlYWR5Iix3Ll9wb2xsKSw3PmEuVUEuaWUpKXRyeXtrKGUsInVubG9hZCIscyl9Y2F0Y2goeil7fXcuQ3VzdG9tPWEuQ3VzdG9tRXZlbnQ7dy5TdWJzY3JpYmVyPWEuU3Vic2NyaWJlcjt3LlRhcmdldD1hLkV2ZW50VGFyZ2V0O3cuSGFuZGxlPWEuRXZlbnRIYW5kbGU7dy5GYWNhZGU9YS5FdmVudEZhY2FkZTt3Ll9wb2xsKCl9KSgpO2EuRW52LmV2dC5wbHVnaW5zLmF2YWlsYWJsZT17b246ZnVuY3Rpb24oYixnLGUsayl7dmFyIG09NDxhcmd1bWVudHMubGVuZ3RoP2EuQXJyYXkoYXJndW1lbnRzLDQsITApOm51bGw7cmV0dXJuIGEuRXZlbnQub25BdmFpbGFibGUuY2FsbChhLkV2ZW50LGUsZyxrLG0pfX07YS5FbnYuZXZ0LnBsdWdpbnMuY29udGVudHJlYWR5PXtvbjpmdW5jdGlvbihiLGcsZSxrKXt2YXIgbT00PGFyZ3VtZW50cy5sZW5ndGg/CmEuQXJyYXkoYXJndW1lbnRzLDQsITApOm51bGw7cmV0dXJuIGEuRXZlbnQub25Db250ZW50UmVhZHkuY2FsbChhLkV2ZW50LGUsZyxrLG0pfX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImV2ZW50LWN1c3RvbS1iYXNlIl19KTsKWVVJLmFkZCgiZXZlbnQtY3VzdG9tLWJhc2UiLGZ1bmN0aW9uKGEsRSl7YS5FbnYuZXZ0PXtoYW5kbGVzOnt9LHBsdWdpbnM6e319O3ZhciBxPXtvYmpzOm51bGwsYmVmb3JlOmZ1bmN0aW9uKHMsbCxoLHUpe3ZhciB3PXM7dSYmKHc9W3MsdV0uY29uY2F0KGEuQXJyYXkoYXJndW1lbnRzLDQsITApKSx3PWEucmJpbmQuYXBwbHkoYSx3KSk7cmV0dXJuIHRoaXMuX2luamVjdCgwLHcsbCxoKX0sYWZ0ZXI6ZnVuY3Rpb24ocyxsLGgsdSl7dmFyIHc9czt1JiYodz1bcyx1XS5jb25jYXQoYS5BcnJheShhcmd1bWVudHMsNCwhMCkpLHc9YS5yYmluZC5hcHBseShhLHcpKTtyZXR1cm4gdGhpcy5faW5qZWN0KDEsdyxsLGgpfSxfaW5qZWN0OmZ1bmN0aW9uKHMsbCxoLHUpe3ZhciB3PWEuc3RhbXAoaCksejtoLl95dWlhb3B8fChoLl95dWlhb3A9e30pO3o9aC5feXVpYW9wO3pbdV18fCh6W3VdPW5ldyBhLkRvLk1ldGhvZChoLHUpLGhbdV09ZnVuY3Rpb24oKXtyZXR1cm4gelt1XS5leGVjLmFwcGx5KHpbdV0sCmFyZ3VtZW50cyl9KTtoPXcrYS5zdGFtcChsKSt1O3pbdV0ucmVnaXN0ZXIoaCxsLHMpO3JldHVybiBuZXcgYS5FdmVudEhhbmRsZSh6W3VdLGgpfSxkZXRhY2g6ZnVuY3Rpb24ocyl7cy5kZXRhY2gmJnMuZGV0YWNoKCl9fTthLkRvPXE7cS5NZXRob2Q9ZnVuY3Rpb24ocyxsKXt0aGlzLm9iaj1zO3RoaXMubWV0aG9kTmFtZT1sO3RoaXMubWV0aG9kPXNbbF07dGhpcy5iZWZvcmU9e307dGhpcy5hZnRlcj17fX07cS5NZXRob2QucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHMsbCxoKXtoP3RoaXMuYWZ0ZXJbc109bDp0aGlzLmJlZm9yZVtzXT1sfTtxLk1ldGhvZC5wcm90b3R5cGUuX2RlbGV0ZT1mdW5jdGlvbihzKXtkZWxldGUgdGhpcy5iZWZvcmVbc107ZGVsZXRlIHRoaXMuYWZ0ZXJbc119O3EuTWV0aG9kLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKCl7dmFyIHM9YS5BcnJheShhcmd1bWVudHMsMCwhMCksbCxoLHU7dT10aGlzLmJlZm9yZTt2YXIgdz10aGlzLmFmdGVyLHo9ITE7CmZvcihsIGluIHUpaWYodS5oYXNPd25Qcm9wZXJ0eShsKSYmKGg9dVtsXS5hcHBseSh0aGlzLm9iaixzKSkpc3dpdGNoKGguY29uc3RydWN0b3Ipe2Nhc2UgcS5IYWx0OnJldHVybiBoLnJldFZhbDtjYXNlIHEuQWx0ZXJBcmdzOnM9aC5uZXdBcmdzO2JyZWFrO2Nhc2UgcS5QcmV2ZW50Ono9ITB9enx8KGg9dGhpcy5tZXRob2QuYXBwbHkodGhpcy5vYmoscykpO3Eub3JpZ2luYWxSZXRWYWw9aDtxLmN1cnJlbnRSZXRWYWw9aDtmb3IobCBpbiB3KWlmKHcuaGFzT3duUHJvcGVydHkobCkpe2lmKCh1PXdbbF0uYXBwbHkodGhpcy5vYmoscykpJiZ1LmNvbnN0cnVjdG9yPT09cS5IYWx0KXJldHVybiB1LnJldFZhbDt1JiZ1LmNvbnN0cnVjdG9yPT09cS5BbHRlclJldHVybiYmKGg9dS5uZXdSZXRWYWwscS5jdXJyZW50UmV0VmFsPWgpfXJldHVybiBofTtxLkFsdGVyQXJncz1mdW5jdGlvbihzLGwpe3RoaXMubXNnPXM7dGhpcy5uZXdBcmdzPWx9O3EuQWx0ZXJSZXR1cm49ZnVuY3Rpb24ocywKbCl7dGhpcy5tc2c9czt0aGlzLm5ld1JldFZhbD1sfTtxLkhhbHQ9ZnVuY3Rpb24ocyxsKXt0aGlzLm1zZz1zO3RoaXMucmV0VmFsPWx9O3EuUHJldmVudD1mdW5jdGlvbihzKXt0aGlzLm1zZz1zfTtxLkVycm9yPXEuSGFsdDt2YXIgdD1hLkFycmF5LGY9dC5oYXNoKCJicm9hZGNhc3QgbW9uaXRvcmVkIGJ1YmJsZXMgY29udGV4dCBjb250ZXh0Rm4gY3VycmVudFRhcmdldCBkZWZhdWx0Rm4gZGVmYXVsdFRhcmdldE9ubHkgZGV0YWlscyBlbWl0RmFjYWRlIGZpcmVPbmNlIGFzeW5jIGhvc3QgcHJldmVudGFibGUgcHJldmVudGVkRm4gcXVldWFibGUgc2lsZW50IHN0b3BwZWRGbiB0YXJnZXQgdHlwZSIuc3BsaXQoIiAiKSksZD1BcnJheS5wcm90b3R5cGUuc2xpY2UsYz1mdW5jdGlvbihzLGwsaCl7Zm9yKHZhciB1IGluIGwpIWZbdV18fCFoJiZ1IGluIHN8fChzW3VdPWxbdV0pO3JldHVybiBzfTthLkN1c3RvbUV2ZW50PWZ1bmN0aW9uKHMsbCl7dGhpcy5fa2RzPWEuQ3VzdG9tRXZlbnQua2VlcERlcHJlY2F0ZWRTdWJzOwp0aGlzLmlkPWEuZ3VpZCgpO3RoaXMudHlwZT1zO3RoaXMuc2lsZW50PXRoaXMubG9nU3lzdGVtPSJ5dWk6bG9nIj09PXM7dGhpcy5fa2RzJiYodGhpcy5zdWJzY3JpYmVycz17fSx0aGlzLmFmdGVycz17fSk7bCYmYyh0aGlzLGwsITApfTthLkN1c3RvbUV2ZW50LmtlZXBEZXByZWNhdGVkU3Vicz0hMTthLkN1c3RvbUV2ZW50Lm1peENvbmZpZ3M9YzthLkN1c3RvbUV2ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6YS5DdXN0b21FdmVudCxzaWduYXR1cmU6OSxjb250ZXh0OmEscHJldmVudGFibGU6ITAsYnViYmxlczohMCxoYXNTdWJzOmZ1bmN0aW9uKHMpe3ZhciBsPTAsaD0wLHU9dGhpcy5fc3Vic2NyaWJlcnMsdz10aGlzLl9hZnRlcnMsej10aGlzLnNpYmxpbmc7dSYmKGw9dS5sZW5ndGgpO3cmJihoPXcubGVuZ3RoKTt6JiYodT16Ll9zdWJzY3JpYmVycyx3PXouX2FmdGVycyx1JiYobCs9dS5sZW5ndGgpLHcmJihoKz13Lmxlbmd0aCkpO3JldHVybiBzPyJhZnRlciI9PT1zP2g6Cmw6bCtofSxtb25pdG9yOmZ1bmN0aW9uKHMpe3RoaXMubW9uaXRvcmVkPSEwO3ZhciBsPXRoaXMuaWQrInwiK3RoaXMudHlwZSsiXyIrcyxoPWQuY2FsbChhcmd1bWVudHMsMCk7aFswXT1sO3JldHVybiB0aGlzLmhvc3Qub24uYXBwbHkodGhpcy5ob3N0LGgpfSxnZXRTdWJzOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5zaWJsaW5nLGw9dGhpcy5fc3Vic2NyaWJlcnMsaD10aGlzLl9hZnRlcnMsdSx3O3MmJih1PXMuX3N1YnNjcmliZXJzLHc9cy5fYWZ0ZXJzKTtsPXU/bD9sLmNvbmNhdCh1KTp1LmNvbmNhdCgpOmw/bC5jb25jYXQoKTpbXTtoPXc/aD9oLmNvbmNhdCh3KTp3LmNvbmNhdCgpOmg/aC5jb25jYXQoKTpbXTtyZXR1cm5bbCxoXX0sYXBwbHlDb25maWc6ZnVuY3Rpb24ocyxsKXtjKHRoaXMscyxsKX0sX29uOmZ1bmN0aW9uKHMsbCxoLHUpe3M9bmV3IGEuU3Vic2NyaWJlcihzLGwsaCx1KTt0aGlzLmZpcmVPbmNlJiZ0aGlzLmZpcmVkJiYobD10aGlzLmZpcmVkV2l0aCx0aGlzLmVtaXRGYWNhZGUmJgp0aGlzLl9hZGRGYWNhZGVUb0FyZ3MmJnRoaXMuX2FkZEZhY2FkZVRvQXJncyhsKSx0aGlzLmFzeW5jP3NldFRpbWVvdXQoYS5iaW5kKHRoaXMuX25vdGlmeSx0aGlzLHMsbCksMCk6dGhpcy5fbm90aWZ5KHMsbCkpOyJhZnRlciI9PT11Pyh0aGlzLl9hZnRlcnN8fCh0aGlzLl9hZnRlcnM9W10pLHRoaXMuX2FmdGVycy5wdXNoKHMpKToodGhpcy5fc3Vic2NyaWJlcnN8fCh0aGlzLl9zdWJzY3JpYmVycz1bXSksdGhpcy5fc3Vic2NyaWJlcnMucHVzaChzKSk7dGhpcy5fa2RzJiYoImFmdGVyIj09PXU/dGhpcy5hZnRlcnNbcy5pZF09czp0aGlzLnN1YnNjcmliZXJzW3MuaWRdPXMpO3JldHVybiBuZXcgYS5FdmVudEhhbmRsZSh0aGlzLHMpfSxzdWJzY3JpYmU6ZnVuY3Rpb24ocyxsKXt2YXIgaD0yPGFyZ3VtZW50cy5sZW5ndGg/ZC5jYWxsKGFyZ3VtZW50cywyKTpudWxsO3JldHVybiB0aGlzLl9vbihzLGwsaCwhMCl9LG9uOmZ1bmN0aW9uKHMsbCl7dmFyIGg9Mjxhcmd1bWVudHMubGVuZ3RoPwpkLmNhbGwoYXJndW1lbnRzLDIpOm51bGw7dGhpcy5tb25pdG9yZWQmJnRoaXMuaG9zdCYmdGhpcy5ob3N0Ll9tb25pdG9yKCJhdHRhY2giLHRoaXMse2FyZ3M6YXJndW1lbnRzfSk7cmV0dXJuIHRoaXMuX29uKHMsbCxoLCEwKX0sYWZ0ZXI6ZnVuY3Rpb24ocyxsKXt2YXIgaD0yPGFyZ3VtZW50cy5sZW5ndGg/ZC5jYWxsKGFyZ3VtZW50cywyKTpudWxsO3JldHVybiB0aGlzLl9vbihzLGwsaCwiYWZ0ZXIiKX0sZGV0YWNoOmZ1bmN0aW9uKHMsbCl7aWYocyYmcy5kZXRhY2gpcmV0dXJuIHMuZGV0YWNoKCk7dmFyIGgsdSx3PTAsej10aGlzLl9zdWJzY3JpYmVycyxBPXRoaXMuX2FmdGVycztpZih6KWZvcihoPXoubGVuZ3RoOzA8PWg7aC0tKSEodT16W2hdKXx8cyYmcyE9PXUuZm58fCh0aGlzLl9kZWxldGUodSx6LGgpLHcrKyk7aWYoQSlmb3IoaD1BLmxlbmd0aDswPD1oO2gtLSkhKHU9QVtoXSl8fHMmJnMhPT11LmZufHwodGhpcy5fZGVsZXRlKHUsQSxoKSx3KyspO3JldHVybiB3fSwKdW5zdWJzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZXRhY2guYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfbm90aWZ5OmZ1bmN0aW9uKHMsbCxoKXtyZXR1cm4hMT09PXMubm90aWZ5KGwsdGhpcyl8fDE8dGhpcy5zdG9wcGVkPyExOiEwfSxsb2c6ZnVuY3Rpb24ocyxsKXt9LGZpcmU6ZnVuY3Rpb24oKXt2YXIgcz1bXTtzLnB1c2guYXBwbHkocyxhcmd1bWVudHMpO3JldHVybiB0aGlzLl9maXJlKHMpfSxfZmlyZTpmdW5jdGlvbihzKXtpZih0aGlzLmZpcmVPbmNlJiZ0aGlzLmZpcmVkKXJldHVybiEwO3RoaXMuZmlyZWQ9ITA7dGhpcy5maXJlT25jZSYmKHRoaXMuZmlyZWRXaXRoPXMpO3JldHVybiB0aGlzLmVtaXRGYWNhZGU/dGhpcy5maXJlQ29tcGxleChzKTp0aGlzLmZpcmVTaW1wbGUocyl9LGZpcmVTaW1wbGU6ZnVuY3Rpb24ocyl7dGhpcy5wcmV2ZW50ZWQ9dGhpcy5zdG9wcGVkPTA7aWYodGhpcy5oYXNTdWJzKCkpe3ZhciBsPXRoaXMuZ2V0U3VicygpO3RoaXMuX3Byb2NTdWJzKGxbMF0sCnMpO3RoaXMuX3Byb2NTdWJzKGxbMV0scyl9dGhpcy5icm9hZGNhc3QmJnRoaXMuX2Jyb2FkY2FzdChzKTtyZXR1cm4gdGhpcy5zdG9wcGVkPyExOiEwfSxmaXJlQ29tcGxleDpmdW5jdGlvbihzKXtzWzBdPXNbMF18fHt9O3JldHVybiB0aGlzLmZpcmVTaW1wbGUocyl9LF9wcm9jU3ViczpmdW5jdGlvbihzLGwsaCl7dmFyIHUsdyx6O3c9MDtmb3Ioej1zLmxlbmd0aDt3PHo7dysrKWlmKCh1PXNbd10pJiZ1LmZuJiYoITE9PT10aGlzLl9ub3RpZnkodSxsLGgpJiYodGhpcy5zdG9wcGVkPTIpLDI9PT10aGlzLnN0b3BwZWQpKXJldHVybiExO3JldHVybiEwfSxfYnJvYWRjYXN0OmZ1bmN0aW9uKHMpeyF0aGlzLnN0b3BwZWQmJnRoaXMuYnJvYWRjYXN0JiYocz1zLmNvbmNhdCgpLHMudW5zaGlmdCh0aGlzLnR5cGUpLHRoaXMuaG9zdCE9PWEmJmEuZmlyZS5hcHBseShhLHMpLDI9PT10aGlzLmJyb2FkY2FzdCYmYS5HbG9iYWwuZmlyZS5hcHBseShhLkdsb2JhbCxzKSl9LHVuc3Vic2NyaWJlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGV0YWNoQWxsLmFwcGx5KHRoaXMsCmFyZ3VtZW50cyl9LGRldGFjaEFsbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRldGFjaCgpfSxfZGVsZXRlOmZ1bmN0aW9uKHMsbCxoKXt2YXIgdT1zLl93aGVuO2x8fChsPSJhZnRlciI9PT11P3RoaXMuX2FmdGVyczp0aGlzLl9zdWJzY3JpYmVycyk7bCYmKGg9dC5pbmRleE9mKGwscywwKSxzJiZsW2hdPT09cyYmbC5zcGxpY2UoaCwxKSk7dGhpcy5fa2RzJiYoImFmdGVyIj09PXU/ZGVsZXRlIHRoaXMuYWZ0ZXJzW3MuaWRdOmRlbGV0ZSB0aGlzLnN1YnNjcmliZXJzW3MuaWRdKTt0aGlzLm1vbml0b3JlZCYmdGhpcy5ob3N0JiZ0aGlzLmhvc3QuX21vbml0b3IoImRldGFjaCIsdGhpcyx7Y2U6dGhpcyxzdWI6c30pO3MmJihzLmRlbGV0ZWQ9ITApfX07YS5TdWJzY3JpYmVyPWZ1bmN0aW9uKHMsbCxoLHUpe3RoaXMuZm49czt0aGlzLmNvbnRleHQ9bDt0aGlzLmlkPWEuZ3VpZCgpO3RoaXMuYXJncz1oO3RoaXMuX3doZW49dX07YS5TdWJzY3JpYmVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YS5TdWJzY3JpYmVyLApfbm90aWZ5OmZ1bmN0aW9uKHMsbCxoKXtpZih0aGlzLmRlbGV0ZWQmJiF0aGlzLnBvc3Rwb25lZClpZih0aGlzLnBvc3Rwb25lZClkZWxldGUgdGhpcy5mbixkZWxldGUgdGhpcy5jb250ZXh0O2Vsc2UgcmV0dXJuIGRlbGV0ZSB0aGlzLnBvc3Rwb25lZCxudWxsO3ZhciB1PXRoaXMuYXJncztzd2l0Y2goaC5zaWduYXR1cmUpe2Nhc2UgMDpzPXRoaXMuZm4uY2FsbChzLGgudHlwZSxsLHMpO2JyZWFrO2Nhc2UgMTpzPXRoaXMuZm4uY2FsbChzLGxbMF18fG51bGwscyk7YnJlYWs7ZGVmYXVsdDp1fHxsPyhsPWx8fFtdLHU9dT9sLmNvbmNhdCh1KTpsLHM9dGhpcy5mbi5hcHBseShzLHUpKTpzPXRoaXMuZm4uY2FsbChzKX10aGlzLm9uY2UmJmguX2RlbGV0ZSh0aGlzKTtyZXR1cm4gc30sbm90aWZ5OmZ1bmN0aW9uKHMsbCl7dmFyIGg9dGhpcy5jb250ZXh0LHU9ITA7aHx8KGg9bC5jb250ZXh0Rm4/bC5jb250ZXh0Rm4oKTpsLmNvbnRleHQpO2lmKGEuY29uZmlnJiZhLmNvbmZpZy50aHJvd0ZhaWwpdT0KdGhpcy5fbm90aWZ5KGgscyxsKTtlbHNlIHRyeXt1PXRoaXMuX25vdGlmeShoLHMsbCl9Y2F0Y2godyl7YS5lcnJvcih0aGlzKyIgZmFpbGVkOiAiK3cubWVzc2FnZSx3KX1yZXR1cm4gdX0sY29udGFpbnM6ZnVuY3Rpb24ocyxsKXtyZXR1cm4gbD90aGlzLmZuPT09cyYmdGhpcy5jb250ZXh0PT09bDp0aGlzLmZuPT09c30sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfX07YS5FdmVudEhhbmRsZT1mdW5jdGlvbihzLGwpe3RoaXMuZXZ0PXM7dGhpcy5zdWI9bH07YS5FdmVudEhhbmRsZS5wcm90b3R5cGU9e2JhdGNoOmZ1bmN0aW9uKHMsbCl7cy5jYWxsKGx8fHRoaXMsdGhpcyk7YS5MYW5nLmlzQXJyYXkodGhpcy5ldnQpJiZhLkFycmF5LmVhY2godGhpcy5ldnQsZnVuY3Rpb24oaCl7aC5iYXRjaC5jYWxsKGx8fGgscyl9KX0sZGV0YWNoOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5ldnQsbD0wLGg7aWYocylpZihhLkxhbmcuaXNBcnJheShzKSlmb3IoaD0wO2g8cy5sZW5ndGg7aCsrKWwrPQpzW2hdLmRldGFjaCgpO2Vsc2Ugcy5fZGVsZXRlKHRoaXMuc3ViKSxsPTE7cmV0dXJuIGx9LG1vbml0b3I6ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZXZ0Lm1vbml0b3IuYXBwbHkodGhpcy5ldnQsYXJndW1lbnRzKX19O3ZhciBiPWEuTGFuZyxnPS8oLio/KSg6KSguKj8pLyxlPWEuY2FjaGVkKGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlcGxhY2UoZywiKiQyJDMiKX0pLGs9ZnVuY3Rpb24ocyxsKXtyZXR1cm4hbHx8InN0cmluZyIhPT10eXBlb2Ygc3x8LTE8cy5pbmRleE9mKCI6Iik/czpsKyI6IitzfSxtPWEuY2FjaGVkKGZ1bmN0aW9uKHMsbCl7dmFyIGg9cyx1LHcsejtpZighYi5pc1N0cmluZyhoKSlyZXR1cm4gaDt6PWguaW5kZXhPZigifkFGVEVSfiIpOy0xPHomJih3PSEwLGg9aC5zdWJzdHIoNykpO3o9aC5pbmRleE9mKCJ8Iik7LTE8eiYmKHU9aC5zdWJzdHIoMCx6KSxoPWguc3Vic3RyKHorMSksIioiPT09aCYmKGg9bnVsbCkpO3JldHVyblt1LGw/ayhoLGwpOmgsdyxoXX0pLApwPWZ1bmN0aW9uKHMpe3ZhciBsPXRoaXMuX3l1aWV2dCxoO2x8fChsPXRoaXMuX3l1aWV2dD17ZXZlbnRzOnt9LHRhcmdldHM6bnVsbCxjb25maWc6e2hvc3Q6dGhpcyxjb250ZXh0OnRoaXN9LGNoYWluOmEuY29uZmlnLmNoYWlufSk7aD1sLmNvbmZpZztzJiYoYyhoLHMsITApLHZvaWQgMCE9PXMuY2hhaW4mJihsLmNoYWluPXMuY2hhaW4pLHMucHJlZml4JiYoaC5wcmVmaXg9cy5wcmVmaXgpKX07cC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnAsb25jZTpmdW5jdGlvbigpe3ZhciBzPXRoaXMub24uYXBwbHkodGhpcyxhcmd1bWVudHMpO3MuYmF0Y2goZnVuY3Rpb24obCl7bC5zdWImJihsLnN1Yi5vbmNlPSEwKX0pO3JldHVybiBzfSxvbmNlQWZ0ZXI6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmFmdGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtzLmJhdGNoKGZ1bmN0aW9uKGwpe2wuc3ViJiYobC5zdWIub25jZT0hMCl9KTtyZXR1cm4gc30scGFyc2VUeXBlOmZ1bmN0aW9uKHMsbCl7cmV0dXJuIG0ocywKbHx8dGhpcy5feXVpZXZ0LmNvbmZpZy5wcmVmaXgpfSxvbjpmdW5jdGlvbihzLGwsaCl7dmFyIHU9dGhpcy5feXVpZXZ0LHc9bShzLHUuY29uZmlnLnByZWZpeCkseixBLEgsRixCLEksTT1hLkVudi5ldnQuaGFuZGxlcyxELEosUD1hLk5vZGUsVixZLG5hO3RoaXMuX21vbml0b3IoImF0dGFjaCIsd1sxXSx7YXJnczphcmd1bWVudHMsY2F0ZWdvcnk6d1swXSxhZnRlcjp3WzJdfSk7aWYoYi5pc09iamVjdChzKSl7aWYoYi5pc0Z1bmN0aW9uKHMpKXJldHVybiBhLkRvLmJlZm9yZS5hcHBseShhLkRvLGFyZ3VtZW50cyk7ej1sO0E9aDtIPWQuY2FsbChhcmd1bWVudHMsMCk7Rj1bXTtiLmlzQXJyYXkocykmJihuYT0hMCk7RD1zLl9hZnRlcjtkZWxldGUgcy5fYWZ0ZXI7YS5lYWNoKHMsZnVuY3Rpb24oZmEsaWEpe2IuaXNPYmplY3QoZmEpJiYoej1mYS5mbnx8KGIuaXNGdW5jdGlvbihmYSk/ZmE6eiksQT1mYS5jb250ZXh0fHxBKTtIWzBdPShEPyJ+QUZURVJ+IjoiIikrKG5hP2ZhOmlhKTsKSFsxXT16O0hbMl09QTtGLnB1c2godGhpcy5vbi5hcHBseSh0aGlzLEgpKX0sdGhpcyk7cmV0dXJuIHUuY2hhaW4/dGhpczpuZXcgYS5FdmVudEhhbmRsZShGKX1JPXdbMF07RD13WzJdO0o9d1szXTtpZihQJiZhLmluc3RhbmNlT2YodGhpcyxQKSYmSiBpbiBQLkRPTV9FVkVOVFMpcmV0dXJuIEg9ZC5jYWxsKGFyZ3VtZW50cywwKSxILnNwbGljZSgyLDAsUC5nZXRET01Ob2RlKHRoaXMpKSxhLm9uLmFwcGx5KGEsSCk7cz13WzFdO2lmKGEuaW5zdGFuY2VPZih0aGlzLFlVSSkpaWYodz1hLkVudi5ldnQucGx1Z2luc1tzXSxIPWQuY2FsbChhcmd1bWVudHMsMCksSFswXT1KLFAmJihWPUhbMl0sYS5pbnN0YW5jZU9mKFYsYS5Ob2RlTGlzdCk/Vj1hLk5vZGVMaXN0LmdldERPTU5vZGVzKFYpOmEuaW5zdGFuY2VPZihWLFApJiYoVj1QLmdldERPTU5vZGUoVikpLChZPUogaW4gUC5ET01fRVZFTlRTKSYmKEhbMl09VikpLHcpQj13Lm9uLmFwcGx5KGEsSCk7ZWxzZSBpZighc3x8WSlCPWEuRXZlbnQuX2F0dGFjaChIKTsKQnx8KEI9dS5ldmVudHNbc118fHRoaXMucHVibGlzaChzKSxCPUIuX29uKGwsaCwzPGFyZ3VtZW50cy5sZW5ndGg/ZC5jYWxsKGFyZ3VtZW50cywzKTpudWxsLEQ/ImFmdGVyIjohMCksLTEhPT1zLmluZGV4T2YoIio6IikmJih0aGlzLl9oYXNTaWJsaW5ncz0hMCkpO0kmJihNW0ldPU1bSV18fHt9LE1bSV1bc109TVtJXVtzXXx8W10sTVtJXVtzXS5wdXNoKEIpKTtyZXR1cm4gdS5jaGFpbj90aGlzOkJ9LHN1YnNjcmliZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZGV0YWNoOmZ1bmN0aW9uKHMsbCxoKXt2YXIgdT10aGlzLl95dWlldnQuZXZlbnRzLHcsej1hLk5vZGUsQT16JiZhLmluc3RhbmNlT2YodGhpcyx6KTtpZighcyYmdGhpcyE9PWEpe2Zvcih3IGluIHUpdS5oYXNPd25Qcm9wZXJ0eSh3KSYmdVt3XS5kZXRhY2gobCxoKTtBJiZhLkV2ZW50LnB1cmdlRWxlbWVudCh6LmdldERPTU5vZGUodGhpcykpO3JldHVybiB0aGlzfXZhciBIPQptKHMsdGhpcy5feXVpZXZ0LmNvbmZpZy5wcmVmaXgpLEY9Yi5pc0FycmF5KEgpP0hbMF06bnVsbCxCPUg/SFszXTpudWxsLEk9YS5FbnYuZXZ0LmhhbmRsZXMsTT1mdW5jdGlvbihELEosUCl7RD1EW0pdO3ZhciBWO2lmKEQpZm9yKFY9RC5sZW5ndGgtMTswPD1WOy0tVilKPURbVl0uZXZ0LEouaG9zdCE9PVAmJkouZWwhPT1QfHxEW1ZdLmRldGFjaCgpfTtpZihGKXtpZihGPUlbRl0scz1IWzFdLEE9QT9hLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKTp0aGlzLEYpe2lmKHMpTShGLHMsQSk7ZWxzZSBmb3IodyBpbiBGKUYuaGFzT3duUHJvcGVydHkodykmJk0oRix3LEEpO3JldHVybiB0aGlzfX1lbHNle2lmKGIuaXNPYmplY3QocykmJnMuZGV0YWNoKXJldHVybiBzLmRldGFjaCgpLHRoaXM7aWYoQSYmKCFCfHxCIGluIHouRE9NX0VWRU5UUykpcmV0dXJuIEI9ZC5jYWxsKGFyZ3VtZW50cywwKSxCWzJdPXouZ2V0RE9NTm9kZSh0aGlzKSxhLmRldGFjaC5hcHBseShhLEIpLHRoaXN9dz1hLkVudi5ldnQucGx1Z2luc1tCXTsKaWYoYS5pbnN0YW5jZU9mKHRoaXMsWVVJKSl7Qj1kLmNhbGwoYXJndW1lbnRzLDApO2lmKHcmJncuZGV0YWNoKXJldHVybiB3LmRldGFjaC5hcHBseShhLEIpLHRoaXM7aWYoIXN8fCF3JiZ6JiZzIGluIHouRE9NX0VWRU5UUylyZXR1cm4gQlswXT1zLGEuRXZlbnQuZGV0YWNoLmFwcGx5KGEuRXZlbnQsQiksdGhpc30odT11W0hbMV1dKSYmdS5kZXRhY2gobCxoKTtyZXR1cm4gdGhpc30sdW5zdWJzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZXRhY2guYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkZXRhY2hBbGw6ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZGV0YWNoKHMpfSx1bnN1YnNjcmliZUFsbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRldGFjaEFsbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHB1Ymxpc2g6ZnVuY3Rpb24ocyxsKXt2YXIgaCx1PXRoaXMuX3l1aWV2dC5jb25maWcsdz11LnByZWZpeDsic3RyaW5nIj09PXR5cGVvZiBzPyh3JiYocz1rKHMsdykpLGg9dGhpcy5fcHVibGlzaChzLAp1LGwpKTooaD17fSxhLmVhY2gocyxmdW5jdGlvbih6LEEpe3cmJihBPWsoQSx3KSk7aFtBXT10aGlzLl9wdWJsaXNoKEEsdSx6fHxsKX0sdGhpcykpO3JldHVybiBofSxfZ2V0RnVsbFR5cGU6ZnVuY3Rpb24ocyl7dmFyIGw9dGhpcy5feXVpZXZ0LmNvbmZpZy5wcmVmaXg7cmV0dXJuIGw/bCsiOiIrczpzfSxfcHVibGlzaDpmdW5jdGlvbihzLGwsaCl7dmFyIHU7dT10aGlzLl95dWlldnQ7dmFyIHc9dS5jb25maWcsej13Lmhvc3QsQT13LmNvbnRleHQsSD11LmV2ZW50czt1PUhbc107KHcubW9uaXRvcmVkJiYhdXx8dSYmdS5tb25pdG9yZWQpJiZ0aGlzLl9tb25pdG9yKCJwdWJsaXNoIixzLHthcmdzOmFyZ3VtZW50c30pO3V8fCh1PUhbc109bmV3IGEuQ3VzdG9tRXZlbnQocyxsKSxsfHwodS5ob3N0PXosdS5jb250ZXh0PUEpKTtoJiZjKHUsaCwhMCk7cmV0dXJuIHV9LF9tb25pdG9yOmZ1bmN0aW9uKHMsbCxoKXt2YXIgdSx3O2wmJigic3RyaW5nIj09PXR5cGVvZiBsPyh3PWwsdT0KdGhpcy5nZXRFdmVudChsLCEwKSk6KHU9bCx3PWwudHlwZSksdGhpcy5feXVpZXZ0LmNvbmZpZy5tb25pdG9yZWQmJighdXx8dS5tb25pdG9yZWQpfHx1JiZ1Lm1vbml0b3JlZCkmJihoLm1vbml0b3JlZD1zLHRoaXMuZmlyZS5jYWxsKHRoaXMsdysiXyIrcyxoKSl9LGZpcmU6ZnVuY3Rpb24ocyl7dmFyIGw9InN0cmluZyI9PT10eXBlb2YgcyxoPWFyZ3VtZW50cy5sZW5ndGgsdT1zLHc9dGhpcy5feXVpZXZ0LHo9dy5jb25maWcsQT16LnByZWZpeCxILGg9bCYmMz49aD8yPT09aD9bYXJndW1lbnRzWzFdXTozPT09aD9bYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXV06W106ZC5jYWxsKGFyZ3VtZW50cyxsPzE6MCk7bHx8KHU9cyYmcy50eXBlKTtBJiYodT1rKHUsQSkpO2w9dy5ldmVudHNbdV07dGhpcy5faGFzU2libGluZ3MmJihIPXRoaXMuZ2V0U2libGluZyh1LGwpKSYmIWwmJihsPXRoaXMucHVibGlzaCh1KSk7KHoubW9uaXRvcmVkJiYoIWx8fGwubW9uaXRvcmVkKXx8bCYmbC5tb25pdG9yZWQpJiYKdGhpcy5fbW9uaXRvcigiZmlyZSIsbHx8dSx7YXJnczpofSk7aWYobClIJiYobC5zaWJsaW5nPUgpLHU9bC5fZmlyZShoKTtlbHNle2lmKHcuaGFzVGFyZ2V0cylyZXR1cm4gdGhpcy5idWJibGUoe3R5cGU6dX0saCx0aGlzKTt1PSEwfXJldHVybiB3LmNoYWluP3RoaXM6dX0sZ2V0U2libGluZzpmdW5jdGlvbihzLGwpe3ZhciBoOy0xPHMuaW5kZXhPZigiOiIpJiYocz1lKHMpLGg9dGhpcy5nZXRFdmVudChzLCEwKSkmJihoLmFwcGx5Q29uZmlnKGwpLGguYnViYmxlcz0hMSxoLmJyb2FkY2FzdD0wKTtyZXR1cm4gaH0sZ2V0RXZlbnQ6ZnVuY3Rpb24ocyxsKXt2YXIgaDtsfHwocz0oaD10aGlzLl95dWlldnQuY29uZmlnLnByZWZpeCk/ayhzLGgpOnMpO3JldHVybiB0aGlzLl95dWlldnQuZXZlbnRzW3NdfHxudWxsfSxhZnRlcjpmdW5jdGlvbihzLGwpe3ZhciBoPWQuY2FsbChhcmd1bWVudHMsMCk7c3dpdGNoKGIudHlwZShzKSl7Y2FzZSAiZnVuY3Rpb24iOnJldHVybiBhLkRvLmFmdGVyLmFwcGx5KGEuRG8sCmFyZ3VtZW50cyk7Y2FzZSAiYXJyYXkiOmNhc2UgIm9iamVjdCI6aFswXS5fYWZ0ZXI9ITA7YnJlYWs7ZGVmYXVsdDpoWzBdPSJ+QUZURVJ+IitzfXJldHVybiB0aGlzLm9uLmFwcGx5KHRoaXMsaCl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O2EuRXZlbnRUYXJnZXQ9cDthLm1peChhLHAucHJvdG90eXBlKTtwLmNhbGwoYSx7YnViYmxlczohMX0pO1lVSS5FbnYuZ2xvYmFsRXZlbnRzPVlVSS5FbnYuZ2xvYmFsRXZlbnRzfHxuZXcgcDthLkdsb2JhbD1ZVUkuRW52Lmdsb2JhbEV2ZW50c30sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsib29wIl19KTsKWVVJLmFkZCgiZXZlbnQtY3VzdG9tLWNvbXBsZXgiLGZ1bmN0aW9uKGEsRSl7dmFyIHEsdCxmPWEuT2JqZWN0LGQsYz17fTtxPWEuQ3VzdG9tRXZlbnQucHJvdG90eXBlO3ZhciBiPWEuRXZlbnRUYXJnZXQucHJvdG90eXBlO2EuRXZlbnRGYWNhZGU9ZnVuY3Rpb24oZyxlKXtnfHwoZz1jKTt0aGlzLl9ldmVudD1nO3RoaXMuZGV0YWlscz1nLmRldGFpbHM7dGhpcy5fdHlwZT10aGlzLnR5cGU9Zy50eXBlO3RoaXMudGFyZ2V0PWcudGFyZ2V0O3RoaXMuY3VycmVudFRhcmdldD1lO3RoaXMucmVsYXRlZFRhcmdldD1nLnJlbGF0ZWRUYXJnZXR9O2EubWl4KGEuRXZlbnRGYWNhZGUucHJvdG90eXBlLHtzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLl9ldmVudC5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLnN0b3BwZWQ9MX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5fZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7dGhpcy5zdG9wcGVkPTJ9LApwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuX2V2ZW50LnByZXZlbnREZWZhdWx0KCk7dGhpcy5wcmV2ZW50ZWQ9MX0saGFsdDpmdW5jdGlvbihnKXt0aGlzLl9ldmVudC5oYWx0KGcpO3RoaXMucHJldmVudGVkPTE7dGhpcy5zdG9wcGVkPWc/MjoxfX0pO3EuZmlyZUNvbXBsZXg9ZnVuY3Rpb24oZyl7dmFyIGUsayxtLHAscztzPSEwO3ZhciBsLGgsdT10aGlzO209dS5ob3N0fHx1O2U9dS5zdGFjazt2YXIgdz1tLl95dWlldnQ7aWYoZSYmdS5xdWV1YWJsZSYmdS50eXBlIT09ZS5uZXh0LnR5cGUpcmV0dXJuIGUucXVldWV8fChlLnF1ZXVlPVtdKSxlLnF1ZXVlLnB1c2goW3UsZ10pLCEwO3A9dS5oYXNTdWJzKCl8fHcuaGFzVGFyZ2V0c3x8dS5icm9hZGNhc3Q7dS50YXJnZXQ9dS50YXJnZXR8fG07dS5jdXJyZW50VGFyZ2V0PW07dS5kZXRhaWxzPWcuY29uY2F0KCk7aWYocCl7ZT1lfHx7aWQ6dS5pZCxuZXh0OnUsc2lsZW50OnUuc2lsZW50LHN0b3BwZWQ6MCxwcmV2ZW50ZWQ6MCwKYnViYmxpbmc6bnVsbCx0eXBlOnUudHlwZSxkZWZhdWx0VGFyZ2V0T25seTp1LmRlZmF1bHRUYXJnZXRPbmx5fTtwPXUuZ2V0U3VicygpO3M9cFswXTtwPXBbMV07dS5zdG9wcGVkPXUudHlwZSE9PWUudHlwZT8wOmUuc3RvcHBlZDt1LnByZXZlbnRlZD11LnR5cGUhPT1lLnR5cGU/MDplLnByZXZlbnRlZDt1LnN0b3BwZWRGbiYmKGw9bmV3IGEuRXZlbnRUYXJnZXQoe2ZpcmVPbmNlOiEwLGNvbnRleHQ6bX0pLHUuZXZlbnRzPWwsbC5vbigic3RvcHBlZCIsdS5zdG9wcGVkRm4pKTt1Ll9mYWNhZGU9bnVsbDtrPXUuX2NyZWF0ZUZhY2FkZShnKTtzJiZ1Ll9wcm9jU3VicyhzLGcsayk7dS5idWJibGVzJiZtLmJ1YmJsZSYmIXUuc3RvcHBlZCYmKGw9ZS5idWJibGluZyxlLmJ1YmJsaW5nPXUudHlwZSxlLnR5cGUhPT11LnR5cGUmJihlLnN0b3BwZWQ9MCxlLnByZXZlbnRlZD0wKSxzPW0uYnViYmxlKHUsZyxudWxsLGUpLHUuc3RvcHBlZD1NYXRoLm1heCh1LnN0b3BwZWQsZS5zdG9wcGVkKSwKdS5wcmV2ZW50ZWQ9TWF0aC5tYXgodS5wcmV2ZW50ZWQsZS5wcmV2ZW50ZWQpLGUuYnViYmxpbmc9bCk7KHM9dS5wcmV2ZW50ZWQpPyhzPXUucHJldmVudGVkRm4pJiZzLmFwcGx5KG0sZyk6KGw9dS5kZWZhdWx0Rm4sIWx8fCh1LmRlZmF1bHRUYXJnZXRPbmx5fHxlLmRlZmF1bHRUYXJnZXRPbmx5KSYmbSE9PWsudGFyZ2V0fHxsLmFwcGx5KG0sZykpO3UuYnJvYWRjYXN0JiZ1Ll9icm9hZGNhc3QoZyk7aWYocCYmIXUucHJldmVudGVkJiYyPnUuc3RvcHBlZClpZihtPWUuYWZ0ZXJRdWV1ZSxlLmlkPT09dS5pZHx8dS50eXBlIT09dy5idWJibGluZyl7aWYodS5fcHJvY1N1YnMocCxnLGspLG0pZm9yKDtwPW0ubGFzdCgpOylwKCl9ZWxzZSBoPXAsZS5leGVjRGVmYXVsdENudCYmKGg9YS5tZXJnZShoKSxhLmVhY2goaCxmdW5jdGlvbih6KXt6LnBvc3Rwb25lZD0hMH0pKSxtfHwoZS5hZnRlclF1ZXVlPW5ldyBhLlF1ZXVlKSxlLmFmdGVyUXVldWUuYWRkKGZ1bmN0aW9uKCl7dS5fcHJvY1N1YnMoaCwKZyxrKX0pO3UudGFyZ2V0PW51bGw7aWYoZS5pZD09PXUuaWQpe2lmKHA9ZS5xdWV1ZSlmb3IoO3AubGVuZ3RoOyltPXAucG9wKCkscz1tWzBdLGUubmV4dD1zLHMuX2ZpcmUobVsxXSk7dS5zdGFjaz1udWxsfXM9IXUuc3RvcHBlZDt1LnR5cGUhPT13LmJ1YmJsaW5nJiYoZS5zdG9wcGVkPTAsZS5wcmV2ZW50ZWQ9MCx1LnN0b3BwZWQ9MCx1LnByZXZlbnRlZD0wKX1lbHNlIGlmKGw9dS5kZWZhdWx0Rm4paz11Ll9jcmVhdGVGYWNhZGUoZyksdS5kZWZhdWx0VGFyZ2V0T25seSYmbSE9PWsudGFyZ2V0fHxsLmFwcGx5KG0sZyk7dS5fZmFjYWRlPW51bGw7cmV0dXJuIHN9O3EuX2hhc1BvdGVudGlhbFN1YnNjcmliZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzU3VicygpfHx0aGlzLmhvc3QuX3l1aWV2dC5oYXNUYXJnZXRzfHx0aGlzLmJyb2FkY2FzdH07cS5fY3JlYXRlRmFjYWRlPXEuX2dldEZhY2FkZT1mdW5jdGlvbihnKXt2YXIgZT10aGlzLmRldGFpbHMsaz0oZT1lJiZlWzBdKSYmCiJvYmplY3QiPT09dHlwZW9mIGUsbT10aGlzLl9mYWNhZGU7bXx8KG09bmV3IGEuRXZlbnRGYWNhZGUodGhpcyx0aGlzLmN1cnJlbnRUYXJnZXQpKTtpZihrKXt2YXIgaz1tLHA7Zm9yKHAgaW4gZSl0Lmhhc093blByb3BlcnR5KHApfHwoa1twXT1lW3BdKTtlLnR5cGUmJihtLnR5cGU9ZS50eXBlKTtnJiYoZ1swXT1tKX1lbHNlIGcmJmcudW5zaGlmdChtKTttLmRldGFpbHM9dGhpcy5kZXRhaWxzO20udGFyZ2V0PXRoaXMub3JpZ2luYWxUYXJnZXR8fHRoaXMudGFyZ2V0O20uY3VycmVudFRhcmdldD10aGlzLmN1cnJlbnRUYXJnZXQ7bS5zdG9wcGVkPTA7bS5wcmV2ZW50ZWQ9MDtyZXR1cm4gdGhpcy5fZmFjYWRlPW19O3EuX2FkZEZhY2FkZVRvQXJncz1mdW5jdGlvbihnKXt2YXIgZT1nWzBdO2UmJmUuaGFsdCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uJiZlLl9ldmVudHx8dGhpcy5fY3JlYXRlRmFjYWRlKGcpfTtxLnN0b3BQcm9wYWdhdGlvbj0KZnVuY3Rpb24oKXt0aGlzLnN0b3BwZWQ9MTt0aGlzLnN0YWNrJiYodGhpcy5zdGFjay5zdG9wcGVkPTEpO3RoaXMuZXZlbnRzJiZ0aGlzLmV2ZW50cy5maXJlKCJzdG9wcGVkIix0aGlzKX07cS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXt0aGlzLnN0b3BwZWQ9Mjt0aGlzLnN0YWNrJiYodGhpcy5zdGFjay5zdG9wcGVkPTIpO3RoaXMuZXZlbnRzJiZ0aGlzLmV2ZW50cy5maXJlKCJzdG9wcGVkIix0aGlzKX07cS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMucHJldmVudGFibGUmJih0aGlzLnByZXZlbnRlZD0xLHRoaXMuc3RhY2smJih0aGlzLnN0YWNrLnByZXZlbnRlZD0xKSl9O3EuaGFsdD1mdW5jdGlvbihnKXtnP3RoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6dGhpcy5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLnByZXZlbnREZWZhdWx0KCl9O2IuYWRkVGFyZ2V0PWZ1bmN0aW9uKGcpe3ZhciBlPXRoaXMuX3l1aWV2dDtlLnRhcmdldHN8fChlLnRhcmdldHM9Cnt9KTtlLnRhcmdldHNbYS5zdGFtcChnKV09ZztlLmhhc1RhcmdldHM9ITA7cmV0dXJuIHRoaXN9O2IuZ2V0VGFyZ2V0cz1mdW5jdGlvbigpe3ZhciBnPXRoaXMuX3l1aWV2dC50YXJnZXRzO3JldHVybiBnP2YudmFsdWVzKGcpOltdfTtiLnJlbW92ZVRhcmdldD1mdW5jdGlvbihnKXt2YXIgZT10aGlzLl95dWlldnQudGFyZ2V0cztlJiYoZGVsZXRlIGVbYS5zdGFtcChnLCEwKV0sMD09PWYuc2l6ZShlKSYmKHRoaXMuX3l1aWV2dC5oYXNUYXJnZXRzPSExKSk7cmV0dXJuIHRoaXN9O2IuYnViYmxlPWZ1bmN0aW9uKGcsZSxrLG0pe3ZhciBwPXRoaXMuX3l1aWV2dC50YXJnZXRzLHM9ITAsbCxoLHUsdyx6PWcmJmcudHlwZSxBPWt8fGcmJmcudGFyZ2V0fHx0aGlzLEg7aWYoIWd8fCFnLnN0b3BwZWQmJnApZm9yKGggaW4gcClpZihwLmhhc093blByb3BlcnR5KGgpKXtrPXBbaF07bD1rLl95dWlldnQuZXZlbnRzW3pdO2suX2hhc1NpYmxpbmdzJiYodz1rLmdldFNpYmxpbmcoeixsKSk7dyYmCiFsJiYobD1rLnB1Ymxpc2goeikpO0g9ay5feXVpZXZ0LmJ1YmJsaW5nO2suX3l1aWV2dC5idWJibGluZz16O2lmKGwpe2lmKHcmJihsLnNpYmxpbmc9dyksbC50YXJnZXQ9QSxsLm9yaWdpbmFsVGFyZ2V0PUEsbC5jdXJyZW50VGFyZ2V0PWssdT1sLmJyb2FkY2FzdCxsLmJyb2FkY2FzdD0hMSxsLmVtaXRGYWNhZGU9ITAsbC5zdGFjaz1tLHM9cyYmbC5maXJlLmFwcGx5KGwsZXx8Zy5kZXRhaWxzfHxbXSksbC5icm9hZGNhc3Q9dSxsLm9yaWdpbmFsVGFyZ2V0PW51bGwsbC5zdG9wcGVkKWJyZWFrfWVsc2Ugay5feXVpZXZ0Lmhhc1RhcmdldHMmJmsuYnViYmxlKGcsZSxBLG0pO2suX3l1aWV2dC5idWJibGluZz1IfXJldHVybiBzfTtiLl9oYXNQb3RlbnRpYWxTdWJzY3JpYmVycz1mdW5jdGlvbihnKXt2YXIgZT10aGlzLl95dWlldnQ7cmV0dXJuKGc9ZS5ldmVudHNbZ10pP2cuaGFzU3VicygpfHxlLmhhc1RhcmdldHN8fGcuYnJvYWRjYXN0OiExfTtxPW5ldyBhLkV2ZW50RmFjYWRlOwp0PXt9O2ZvcihkIGluIHEpdFtkXT0hMH0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZXZlbnQtY3VzdG9tLWJhc2UiXX0pOwpZVUkuYWRkKCJldmVudC1kZWxlZ2F0ZSIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKGssbSxwLHMpe3ZhciBsPXQoYXJndW1lbnRzLDAsITApLGg9ZChwKT9wOm51bGwsdSx3LHo7aWYoYyhrKSl7aD1bXTtpZihiKGspKWZvcih1PTAsdz1rLmxlbmd0aDt1PHc7Kyt1KWxbMF09a1t1XSxoLnB1c2goYS5kZWxlZ2F0ZS5hcHBseShhLGwpKTtlbHNlIGZvcih1IGluIGwudW5zaGlmdChudWxsKSxrKWsuaGFzT3duUHJvcGVydHkodSkmJihsWzBdPXUsbFsxXT1rW3VdLGgucHVzaChhLmRlbGVnYXRlLmFwcGx5KGEsbCkpKTtyZXR1cm4gbmV3IGEuRXZlbnRIYW5kbGUoaCl9dT1rLnNwbGl0KC9cfC8pOzE8dS5sZW5ndGgmJih3PXUuc2hpZnQoKSxsWzBdPWs9dS5zaGlmdCgpKTt1PWEuTm9kZS5ET01fRVZFTlRTW2tdO2ModSkmJnUuZGVsZWdhdGUmJih6PXUuZGVsZWdhdGUuYXBwbHkodSxhcmd1bWVudHMpKTtpZigheil7aWYoIShrJiZtJiZwJiZzKSlyZXR1cm47aD1oP2EuU2VsZWN0b3IucXVlcnkoaCwKbnVsbCwhMCk6cDshaCYmZChwKSYmKHo9YS5vbigiYXZhaWxhYmxlIixmdW5jdGlvbigpe2EubWl4KHosYS5kZWxlZ2F0ZS5hcHBseShhLGwpLCEwKX0scCkpOyF6JiZoJiYobC5zcGxpY2UoMiwyLGgpLHo9YS5FdmVudC5fYXR0YWNoKGwse2ZhY2FkZTohMX0pLHouc3ViLmZpbHRlcj1zLHouc3ViLl9ub3RpZnk9cS5ub3RpZnlTdWIpfXomJncmJih3PWVbd118fChlW3ddPXt9KSx3PXdba118fCh3W2tdPVtdKSx3LnB1c2goeikpO3JldHVybiB6fXZhciB0PWEuQXJyYXksZj1hLkxhbmcsZD1mLmlzU3RyaW5nLGM9Zi5pc09iamVjdCxiPWYuaXNBcnJheSxnPWEuU2VsZWN0b3IudGVzdCxlPWEuRW52LmV2dC5oYW5kbGVzO3Eubm90aWZ5U3ViPWZ1bmN0aW9uKGssbSxwKXttPW0uc2xpY2UoKTt0aGlzLmFyZ3MmJm0ucHVzaC5hcHBseShtLHRoaXMuYXJncyk7az1xLl9hcHBseUZpbHRlcih0aGlzLmZpbHRlcixtLHApO3ZhciBzLGwsaDtpZihrKXtrPXQoayk7cz1tWzBdPW5ldyBhLkRPTUV2ZW50RmFjYWRlKG1bMF0sCnAuZWwscCk7cy5jb250YWluZXI9YS5vbmUocC5lbCk7cD0wO2ZvcihsPWsubGVuZ3RoO3A8bCYmIXMuc3RvcHBlZCYmKHMuY3VycmVudFRhcmdldD1hLm9uZShrW3BdKSxoPXRoaXMuZm4uYXBwbHkodGhpcy5jb250ZXh0fHxzLmN1cnJlbnRUYXJnZXQsbSksITEhPT1oKTsrK3ApO3JldHVybiBofX07cS5jb21waWxlRmlsdGVyPWEuY2FjaGVkKGZ1bmN0aW9uKGspe3JldHVybiBmdW5jdGlvbihtLHApe3JldHVybiBnKG0uX25vZGUsayxwLmN1cnJlbnRUYXJnZXQ9PT1wLnRhcmdldD9udWxsOnAuY3VycmVudFRhcmdldC5fbm9kZSl9fSk7cS5fZGlzYWJsZWRSRT0vXig/OmJ1dHRvbnxpbnB1dHxzZWxlY3R8dGV4dGFyZWEpJC9pO3EuX2FwcGx5RmlsdGVyPWZ1bmN0aW9uKGssbSxwKXt2YXIgcz1tWzBdLGw9cC5lbCxoPXMudGFyZ2V0fHxzLnNyY0VsZW1lbnQsdT1bXSx3PSExOzM9PT1oLm5vZGVUeXBlJiYoaD1oLnBhcmVudE5vZGUpO2lmKGguZGlzYWJsZWQmJnEuX2Rpc2FibGVkUkUudGVzdChoLm5vZGVOYW1lKSlyZXR1cm4gdTsKbS51bnNoaWZ0KGgpO2lmKGQoaykpZm9yKDtoOyl7dz1oPT09bDtnKGgsayx3P251bGw6bCkmJnUucHVzaChoKTtpZih3KWJyZWFrO2g9aC5wYXJlbnROb2RlfWVsc2V7bVswXT1hLm9uZShoKTtmb3IobVsxXT1uZXcgYS5ET01FdmVudEZhY2FkZShzLGwscCk7aDspe2suYXBwbHkobVswXSxtKSYmdS5wdXNoKGgpO2lmKGg9PT1sKWJyZWFrO2g9aC5wYXJlbnROb2RlO21bMF09YS5vbmUoaCl9bVsxXT1zfTE+PXUubGVuZ3RoJiYodT11WzBdKTttLnNoaWZ0KCk7cmV0dXJuIHV9O2EuZGVsZWdhdGU9YS5FdmVudC5kZWxlZ2F0ZT1xfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJub2RlLWJhc2UiXX0pOwpZVUkuYWRkKCJldmVudC1mb2N1cyIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKGIsZyxlKXt2YXIgaz0iXyIrYisiTm90aWZpZXJzIjthLkV2ZW50LmRlZmluZShiLHtfdXNlQWN0aXZhdGU6YyxfYXR0YWNoOmZ1bmN0aW9uKG0scCxzKXtyZXR1cm4gYS5ET00uaXNXaW5kb3cobSk/dC5fYXR0YWNoKFtiLGZ1bmN0aW9uKGwpe3AuZmlyZShsKX0sbV0pOnQuX2F0dGFjaChbZyx0aGlzLl9wcm94eSxtLHRoaXMscCxzXSx7Y2FwdHVyZTohMH0pfSxfcHJveHk6ZnVuY3Rpb24obSxwLHMpe3ZhciBsPW0udGFyZ2V0LGg9bS5jdXJyZW50VGFyZ2V0LHU9bC5nZXREYXRhKGspLHc9YS5zdGFtcChoLl9ub2RlKSx6PWN8fGwhPT1oO3AuY3VycmVudFRhcmdldD1zP2w6aDtwLmNvbnRhaW5lcj1zP2g6bnVsbDt1P3o9ITA6KHU9e30sbC5zZXREYXRhKGssdSkseiYmKHM9dC5fYXR0YWNoKFtlLHRoaXMuX25vdGlmeSxsLl9ub2RlXSkuc3ViLHMub25jZT0hMCkpO3Vbd118fCh1W3ddPVtdKTt1W3ddLnB1c2gocCk7Cnp8fHRoaXMuX25vdGlmeShtKX0sX25vdGlmeTpmdW5jdGlvbihtLHApe3ZhciBzPW0uY3VycmVudFRhcmdldCxsPXMuZ2V0RGF0YShrKSxoPXMuYW5jZXN0b3JzKCksdT1zLmdldCgib3duZXJEb2N1bWVudCIpLHc9W10sej1sP2EuT2JqZWN0LmtleXMobCkubGVuZ3RoOjAsQSxILEYsQixJLE0sRDtzLmNsZWFyRGF0YShrKTtoLnB1c2gocyk7dSYmaC51bnNoaWZ0KHUpO2guX25vZGVzLnJldmVyc2UoKTt6JiYocz16LGguc29tZShmdW5jdGlvbihKKXtKPWEuc3RhbXAoSik7Sj1sW0pdO3ZhciBQLFY7aWYoSilmb3Ioei0tLFA9MCxWPUoubGVuZ3RoO1A8VjsrK1ApSltQXS5oYW5kbGUuc3ViLmZpbHRlciYmdy5wdXNoKEpbUF0pO3JldHVybiF6fSksej1zKTtmb3IoO3omJihBPWguc2hpZnQoKSk7KXtIPWEuc3RhbXAoQSk7aWYocz1sW0hdKXtCPTA7Zm9yKEk9cy5sZW5ndGg7QjxJJiYodT1zW0JdLE09dS5oYW5kbGUuc3ViLEY9ITAsbS5jdXJyZW50VGFyZ2V0PUEsTS5maWx0ZXImJgooRj1NLmZpbHRlci5hcHBseShBLFtBLG1dLmNvbmNhdChNLmFyZ3N8fFtdKSksdy5zcGxpY2UoZCh3LHUpLDEpKSxGJiYobS5jb250YWluZXI9dS5jb250YWluZXIsRD11LmZpcmUobSkpLCExIT09RCYmMiE9PW0uc3RvcHBlZCk7KytCKTtkZWxldGUgc1tIXTt6LS19aWYoMiE9PW0uc3RvcHBlZClmb3IoQj0wLEk9dy5sZW5ndGg7QjxJJiYhKHU9d1tCXSxNPXUuaGFuZGxlLnN1YixNLmZpbHRlci5hcHBseShBLFtBLG1dLmNvbmNhdChNLmFyZ3N8fFtdKSkmJihtLmNvbnRhaW5lcj11LmNvbnRhaW5lcixtLmN1cnJlbnRUYXJnZXQ9QSxEPXUuZmlyZShtKSksITE9PT1EfHwyPT09bS5zdG9wcGVkfHxtLnN0b3BwZWQmJndbQisxXSYmd1tCKzFdLmNvbnRhaW5lciE9PXUuY29udGFpbmVyKTsrK0IpO2lmKG0uc3RvcHBlZClicmVha319LG9uOmZ1bmN0aW9uKG0scCxzKXtwLmhhbmRsZT10aGlzLl9hdHRhY2gobS5fbm9kZSxzKX0sZGV0YWNoOmZ1bmN0aW9uKG0scCl7cC5oYW5kbGUuZGV0YWNoKCl9LApkZWxlZ2F0ZTpmdW5jdGlvbihtLHAscyxsKXtmKGwpJiYocC5maWx0ZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGEuU2VsZWN0b3IudGVzdChoLl9ub2RlLGwsbT09PWg/bnVsbDptLl9ub2RlKX0pO3AuaGFuZGxlPXRoaXMuX2F0dGFjaChtLl9ub2RlLHMsITApfSxkZXRhY2hEZWxlZ2F0ZTpmdW5jdGlvbihtLHApe3AuaGFuZGxlLmRldGFjaCgpfX0sITApfXZhciB0PWEuRXZlbnQsZj1hLkxhbmcuaXNTdHJpbmcsZD1hLkFycmF5LmluZGV4T2YsYz1mdW5jdGlvbigpe3ZhciBiPSExLGc9YS5jb25maWcuZG9jO2cmJihiPWcuY3JlYXRlRWxlbWVudCgicCIpLGIuc2V0QXR0cmlidXRlKCJvbmJlZm9yZWFjdGl2YXRlIiwiOyIpLGI9dm9pZCAwIT09Yi5vbmJlZm9yZWFjdGl2YXRlKTtyZXR1cm4gYn0oKTtjPyhxKCJmb2N1cyIsImJlZm9yZWFjdGl2YXRlIiwiZm9jdXNpbiIpLHEoImJsdXIiLCJiZWZvcmVkZWFjdGl2YXRlIiwiZm9jdXNvdXQiKSk6KHEoImZvY3VzIiwiZm9jdXMiLCJmb2N1cyIpLApxKCJibHVyIiwiYmx1ciIsImJsdXIiKSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImV2ZW50LXN5bnRoZXRpYyJdfSk7CllVSS5hZGQoImV2ZW50LWhvdmVyIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZy5pc0Z1bmN0aW9uLHQ9ZnVuY3Rpb24oKXt9LGY9e3Byb2Nlc3NBcmdzOmZ1bmN0aW9uKGQpe3ZhciBjPXEoZFsyXSk/MjozO3JldHVybiBxKGRbY10pP2Quc3BsaWNlKGMsMSlbMF06dH0sb246ZnVuY3Rpb24oZCxjLGIsZyl7dmFyIGU9Yy5hcmdzP2MuYXJncy5zbGljZSgpOltdO2UudW5zaGlmdChudWxsKTtjLl9kZXRhY2g9ZFtnPyJkZWxlZ2F0ZSI6Im9uIl0oe21vdXNlZW50ZXI6ZnVuY3Rpb24oayl7ay5waGFzZT0ib3ZlciI7Yi5maXJlKGspfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKGspe3ZhciBtPWMuY29udGV4dHx8dGhpcztlWzBdPWs7ay50eXBlPSJob3ZlciI7ay5waGFzZT0ib3V0IjtjLl9leHRyYS5hcHBseShtLGUpfX0sZyl9LGRldGFjaDpmdW5jdGlvbihkLGMsYil7Yy5fZGV0YWNoLmRldGFjaCgpfX07Zi5kZWxlZ2F0ZT1mLm9uO2YuZGV0YWNoRGVsZWdhdGU9Zi5kZXRhY2g7YS5FdmVudC5kZWZpbmUoImhvdmVyIiwKZil9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImV2ZW50LW1vdXNlZW50ZXIiXX0pOwpZVUkuYWRkKCJldmVudC1rZXkiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5MYW5nLnRyaW0sdD17S0VZX01BUDp7ZW50ZXI6MTMsc3BhY2U6MzIsZXNjOjI3LGJhY2tzcGFjZTo4LHRhYjo5LHBhZ2V1cDozMyxwYWdlZG93bjozNH0sX3R5cGVSRTovXih1cHxkb3dufHByZXNzKTovLF9rZXlzUkU6L14oPzp1cHxkb3dufHByZXNzKTp8XCsoYWx0fGN0cmx8bWV0YXxzaGlmdCkvZyxwcm9jZXNzQXJnczpmdW5jdGlvbihmKXt2YXIgZD1mLnNwbGljZSgzLDEpWzBdO2Y9YS5BcnJheS5oYXNoKGQubWF0Y2goL1wrKD86YWx0fGN0cmx8bWV0YXxzaGlmdClcYi9nKXx8W10pO3ZhciBjPXt0eXBlOnRoaXMuX3R5cGVSRS50ZXN0KGQpP1JlZ0V4cC4kMTpudWxsLG1vZHM6ZixrZXlzOm51bGx9LGQ9ZC5yZXBsYWNlKHRoaXMuX2tleXNSRSwiIiksYixnLGU7aWYoZClmb3IoZD1kLnNwbGl0KCIsIiksYy5rZXlzPXt9LGU9ZC5sZW5ndGgtMTswPD1lOy0tZSlpZihiPXEoZFtlXSkpK2I9PWI/Yy5rZXlzW2JdPQpmOihnPWIudG9Mb3dlckNhc2UoKSx0aGlzLktFWV9NQVBbZ10/KGMua2V5c1t0aGlzLktFWV9NQVBbZ11dPWYsYy50eXBlfHwoYy50eXBlPSJkb3duIikpOihiPWIuY2hhckF0KDApLGc9Yi50b1VwcGVyQ2FzZSgpLGZbIitzaGlmdCJdJiYoYj1nKSxjLmtleXNbYi5jaGFyQ29kZUF0KDApXT1iPT09Zz9hLm1lcmdlKGYseyIrc2hpZnQiOiEwfSk6ZikpO2MudHlwZXx8KGMudHlwZT0icHJlc3MiKTtyZXR1cm4gY30sb246ZnVuY3Rpb24oZixkLGMsYil7dmFyIGc9ZC5fZXh0cmEsZT1nLmtleXM7ZC5fZGV0YWNoPWZbYj8iZGVsZWdhdGUiOiJvbiJdKCJrZXkiK2cudHlwZSxmdW5jdGlvbihrKXt2YXIgbT1lP2Vbay53aGljaF06Zy5tb2RzO20mJighbVsiK2FsdCJdfHxtWyIrYWx0Il0mJmsuYWx0S2V5KSYmKCFtWyIrY3RybCJdfHxtWyIrY3RybCJdJiZrLmN0cmxLZXkpJiYoIW1bIittZXRhIl18fG1bIittZXRhIl0mJmsubWV0YUtleSkmJighbVsiK3NoaWZ0Il18fG1bIitzaGlmdCJdJiYKay5zaGlmdEtleSkmJmMuZmlyZShrKX0sYil9LGRldGFjaDpmdW5jdGlvbihmLGQsYyl7ZC5fZGV0YWNoLmRldGFjaCgpfX07dC5kZWxlZ2F0ZT10Lm9uO3QuZGV0YWNoRGVsZWdhdGU9dC5kZXRhY2g7YS5FdmVudC5kZWZpbmUoImtleSIsdCwhMCl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImV2ZW50LXN5bnRoZXRpYyJdfSk7CllVSS5hZGQoImV2ZW50LW1vdXNlZW50ZXIiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5FbnYuZXZ0LmRvbV93cmFwcGVycyx0PWEuRE9NLmNvbnRhaW5zLGY9YS5BcnJheSxkPWZ1bmN0aW9uKCl7fSxjPXtwcm94eVR5cGU6Im1vdXNlb3ZlciIscmVsUHJvcGVydHk6ImZyb21FbGVtZW50Iixfbm90aWZ5OmZ1bmN0aW9uKGIsZyxlKXt2YXIgaz10aGlzLl9ub2RlO2c9Yi5yZWxhdGVkVGFyZ2V0fHxiW2ddO2s9PT1nfHx0KGssZyl8fGUuZmlyZShuZXcgYS5ET01FdmVudEZhY2FkZShiLGsscVsiZXZlbnQ6IithLnN0YW1wKGspK2IudHlwZV0pKX0sb246ZnVuY3Rpb24oYixnLGUpe2I9YS5Ob2RlLmdldERPTU5vZGUoYik7Zy5oYW5kbGU9YS5FdmVudC5fYXR0YWNoKFt0aGlzLnByb3h5VHlwZSx0aGlzLl9ub3RpZnksYixudWxsLHRoaXMucmVsUHJvcGVydHksZV0se2ZhY2FkZTohMX0pfSxkZXRhY2g6ZnVuY3Rpb24oYixnKXtnLmhhbmRsZS5kZXRhY2goKX0sZGVsZWdhdGU6ZnVuY3Rpb24oYiwKZyxlLGspe2I9YS5Ob2RlLmdldERPTU5vZGUoYik7Zy5oYW5kbGU9YS5FdmVudC5fYXR0YWNoKFt0aGlzLnByb3h5VHlwZSxkLGIsbnVsbCxlXSx7ZmFjYWRlOiExfSk7Zy5oYW5kbGUuc3ViLmZpbHRlcj1rO2cuaGFuZGxlLnN1Yi5yZWxQcm9wZXJ0eT10aGlzLnJlbFByb3BlcnR5O2cuaGFuZGxlLnN1Yi5fbm90aWZ5PXRoaXMuX2ZpbHRlck5vdGlmeX0sX2ZpbHRlck5vdGlmeTpmdW5jdGlvbihiLGcsZSl7Zz1nLnNsaWNlKCk7dGhpcy5hcmdzJiZnLnB1c2guYXBwbHkoZyx0aGlzLmFyZ3MpO2I9YS5kZWxlZ2F0ZS5fYXBwbHlGaWx0ZXIodGhpcy5maWx0ZXIsZyxlKTt2YXIgaz1nWzBdLnJlbGF0ZWRUYXJnZXR8fGdbMF1bdGhpcy5yZWxQcm9wZXJ0eV0sbSxwLHMsbCxoO2lmKGIpZm9yKGI9ZihiKSxwPTAscz1iLmxlbmd0aCYmKCFtfHwhbS5zdG9wcGVkKTtwPHMmJihoPWJbMF0sdChoLGspfHwobXx8KG09bmV3IGEuRE9NRXZlbnRGYWNhZGUoZ1swXSxoLGUpLG0uY29udGFpbmVyPQphLm9uZShlLmVsKSksbS5jdXJyZW50VGFyZ2V0PWEub25lKGgpLGw9Z1sxXS5maXJlKG0pLCExIT09bCkpOysrcCk7cmV0dXJuIGx9LGRldGFjaERlbGVnYXRlOmZ1bmN0aW9uKGIsZyl7Zy5oYW5kbGUuZGV0YWNoKCl9fTthLkV2ZW50LmRlZmluZSgibW91c2VlbnRlciIsYywhMCk7YS5FdmVudC5kZWZpbmUoIm1vdXNlbGVhdmUiLGEubWVyZ2UoYyx7cHJveHlUeXBlOiJtb3VzZW91dCIscmVsUHJvcGVydHk6InRvRWxlbWVudCJ9KSwhMCl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImV2ZW50LXN5bnRoZXRpYyJdfSk7CllVSS5hZGQoImV2ZW50LW1vdXNld2hlZWwiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9ZnVuY3Rpb24odCl7dD1hLkFycmF5KHQsMCwhMCk7dmFyIGY7YS5VQS5nZWNrbz8odFswXT0iRE9NTW91c2VTY3JvbGwiLGY9YS5jb25maWcud2luKTpmPWEuY29uZmlnLmRvYzszPnQubGVuZ3RoP3RbMl09Zjp0LnNwbGljZSgyLDAsZik7cmV0dXJuIHR9O2EuRW52LmV2dC5wbHVnaW5zLm1vdXNld2hlZWw9e29uOmZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnQuX2F0dGFjaChxKGFyZ3VtZW50cykpfSxkZXRhY2g6ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudC5kZXRhY2guYXBwbHkoYS5FdmVudCxxKGFyZ3VtZW50cykpfX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbIm5vZGUtYmFzZSJdfSk7CllVSS5hZGQoImV2ZW50LW91dHNpZGUiLGZ1bmN0aW9uKGEsRSl7YS5FdmVudC5kZWZpbmVPdXRzaWRlPWZ1bmN0aW9uKHEsdCl7dmFyIGY9e29uOmZ1bmN0aW9uKGQsYyxiKXtjLmhhbmRsZT1hLm9uZSgiZG9jIikub24ocSxmdW5jdGlvbihnKXt0aGlzLmlzT3V0c2lkZShkLGcudGFyZ2V0KSYmKGcuY3VycmVudFRhcmdldD1kLGIuZmlyZShnKSl9LHRoaXMpfSxkZXRhY2g6ZnVuY3Rpb24oZCxjLGIpe2MuaGFuZGxlLmRldGFjaCgpfSxkZWxlZ2F0ZTpmdW5jdGlvbihkLGMsYixnKXtjLmhhbmRsZT1hLm9uZSgiZG9jIikuZGVsZWdhdGUocSxmdW5jdGlvbihlKXt0aGlzLmlzT3V0c2lkZShkLGUudGFyZ2V0KSYmYi5maXJlKGUpfSxnLHRoaXMpfSxpc091dHNpZGU6ZnVuY3Rpb24oZCxjKXtyZXR1cm4gYyE9PWQmJiFjLmFuY2VzdG9yKGZ1bmN0aW9uKGIpe3JldHVybiBiPT09ZH0pfX07Zi5kZXRhY2hEZWxlZ2F0ZT1mLmRldGFjaDthLkV2ZW50LmRlZmluZSh0fHxxKyJvdXRzaWRlIiwKZil9O2EuQXJyYXkuZWFjaCgiYmx1ciBjaGFuZ2UgY2xpY2sgZGJsY2xpY2sgZm9jdXMga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24gbW91c2Vtb3ZlIG1vdXNlb3V0IG1vdXNlb3ZlciBtb3VzZXVwIHNlbGVjdCBzdWJtaXQiLnNwbGl0KCIgIiksZnVuY3Rpb24ocSl7YS5FdmVudC5kZWZpbmVPdXRzaWRlKHEpfSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImV2ZW50LXN5bnRoZXRpYyJdfSk7CllVSS5hZGQoImV2ZW50LXJlc2l6ZSIsZnVuY3Rpb24oYSxFKXthLkV2ZW50LmRlZmluZSgid2luZG93cmVzaXplIix7b246YS5VQS5nZWNrbyYmMS45MT5hLlVBLmdlY2tvP2Z1bmN0aW9uKHEsdCxmKXt0Ll9oYW5kbGU9YS5FdmVudC5hdHRhY2goInJlc2l6ZSIsZnVuY3Rpb24oZCl7Zi5maXJlKGQpfSl9OmZ1bmN0aW9uKHEsdCxmKXt2YXIgZD1hLmNvbmZpZy53aW5kb3dSZXNpemVEZWxheXx8MTAwO3QuX2hhbmRsZT1hLkV2ZW50LmF0dGFjaCgicmVzaXplIixmdW5jdGlvbihjKXt0Ll90aW1lciYmdC5fdGltZXIuY2FuY2VsKCk7dC5fdGltZXI9YS5sYXRlcihkLGEsZnVuY3Rpb24oKXtmLmZpcmUoYyl9KX0pfSxkZXRhY2g6ZnVuY3Rpb24ocSx0KXt0Ll90aW1lciYmdC5fdGltZXIuY2FuY2VsKCk7dC5faGFuZGxlLmRldGFjaCgpfX0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJub2RlLWJhc2UiLCJldmVudC1zeW50aGV0aWMiXX0pOwpZVUkuYWRkKCJldmVudC1zaW11bGF0ZSIsZnVuY3Rpb24oYSxFKXsoZnVuY3Rpb24oKXt2YXIgcT1hLkxhbmcsdD1hLmNvbmZpZy53aW4sZj1xLmlzRnVuY3Rpb24sZD1xLmlzU3RyaW5nLGM9cS5pc0Jvb2xlYW4sYj1xLmlzT2JqZWN0LGc9cS5pc051bWJlcixlPXtjbGljazoxLGRibGNsaWNrOjEsbW91c2VvdmVyOjEsbW91c2VvdXQ6MSxtb3VzZWRvd246MSxtb3VzZXVwOjEsbW91c2Vtb3ZlOjEsY29udGV4dG1lbnU6MX0saz10JiZ0LlBvaW50ZXJFdmVudD97cG9pbnRlcm92ZXI6MSxwb2ludGVyb3V0OjEscG9pbnRlcmRvd246MSxwb2ludGVydXA6MSxwb2ludGVybW92ZToxfTp7TVNQb2ludGVyT3ZlcjoxLE1TUG9pbnRlck91dDoxLE1TUG9pbnRlckRvd246MSxNU1BvaW50ZXJVcDoxLE1TUG9pbnRlck1vdmU6MX0sbT17a2V5ZG93bjoxLGtleXVwOjEsa2V5cHJlc3M6MX0scD17c3VibWl0OjEsYmx1cjoxLGNoYW5nZToxLGZvY3VzOjEscmVzaXplOjEsc2Nyb2xsOjEsc2VsZWN0OjF9LApzPXtzY3JvbGw6MSxyZXNpemU6MSxyZXNldDoxLHN1Ym1pdDoxLGNoYW5nZToxLHNlbGVjdDoxLGVycm9yOjEsYWJvcnQ6MX0sbD17dG91Y2hzdGFydDoxLHRvdWNobW92ZToxLHRvdWNoZW5kOjEsdG91Y2hjYW5jZWw6MX0saD17Z2VzdHVyZXN0YXJ0OjEsZ2VzdHVyZWNoYW5nZToxLGdlc3R1cmVlbmQ6MX07YS5taXgocyxlKTthLm1peChzLG0pO2EubWl4KHMsbCk7YS5FdmVudC5zaW11bGF0ZT1mdW5jdGlvbih1LHcseil7ej16fHx7fTtpZihlW3ddfHxrW3ddKXt2YXIgQT16LmJ1YmJsZXMsSD16LmNhbmNlbGFibGUsRj16LnZpZXcsQj16LmRldGFpbCxJPXouc2NyZWVuWCxNPXouc2NyZWVuWSxEPXouY2xpZW50WCxKPXouY2xpZW50WSxQPXouY3RybEtleSxWPXouYWx0S2V5LFk9ei5zaGlmdEtleSxuYT16Lm1ldGFLZXksZmE9ei5idXR0b247ej16LnJlbGF0ZWRUYXJnZXQ7dXx8YS5lcnJvcigic2ltdWxhdGVNb3VzZUV2ZW50KCk6IEludmFsaWQgdGFyZ2V0LiIpO2Qodyk/ZVt3LnRvTG93ZXJDYXNlKCldfHwKa1t3XXx8YS5lcnJvcigic2ltdWxhdGVNb3VzZUV2ZW50KCk6IEV2ZW50IHR5cGUgJyIrdysiJyBub3Qgc3VwcG9ydGVkLiIpOmEuZXJyb3IoInNpbXVsYXRlTW91c2VFdmVudCgpOiBFdmVudCB0eXBlIG11c3QgYmUgYSBzdHJpbmcuIik7YyhBKXx8KEE9ITApO2MoSCl8fChIPSJtb3VzZW1vdmUiIT09dyk7YihGKXx8KEY9YS5jb25maWcud2luKTtnKEIpfHwoQj0xKTtnKEkpfHwoST0wKTtnKE0pfHwoTT0wKTtnKEQpfHwoRD0wKTtnKEopfHwoSj0wKTtjKFApfHwoUD0hMSk7YyhWKXx8KFY9ITEpO2MoWSl8fChZPSExKTtjKG5hKXx8KG5hPSExKTtnKGZhKXx8KGZhPTApO3o9enx8bnVsbDt2YXIgaWE9bnVsbDtpZihmKGEuY29uZmlnLmRvYy5jcmVhdGVFdmVudCkpaWE9YS5jb25maWcuZG9jLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLGlhLmluaXRNb3VzZUV2ZW50P2lhLmluaXRNb3VzZUV2ZW50KHcsQSxILEYsQixJLE0sRCxKLFAsVixZLG5hLGZhLHopOihpYT1hLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnQoIlVJRXZlbnRzIiksCmlhLmluaXRFdmVudCh3LEEsSCksaWEudmlldz1GLGlhLmRldGFpbD1CLGlhLnNjcmVlblg9SSxpYS5zY3JlZW5ZPU0saWEuY2xpZW50WD1ELGlhLmNsaWVudFk9SixpYS5jdHJsS2V5PVAsaWEuYWx0S2V5PVYsaWEubWV0YUtleT1uYSxpYS5zaGlmdEtleT1ZLGlhLmJ1dHRvbj1mYSxpYS5yZWxhdGVkVGFyZ2V0PXopLHomJiFpYS5yZWxhdGVkVGFyZ2V0JiYoIm1vdXNlb3V0Ij09PXc/aWEudG9FbGVtZW50PXo6Im1vdXNlb3ZlciI9PT13JiYoaWEuZnJvbUVsZW1lbnQ9eikpLHUuZGlzcGF0Y2hFdmVudChpYSk7ZWxzZSBpZihiKGEuY29uZmlnLmRvYy5jcmVhdGVFdmVudE9iamVjdCkpe2lhPWEuY29uZmlnLmRvYy5jcmVhdGVFdmVudE9iamVjdCgpO2lhLmJ1YmJsZXM9QTtpYS5jYW5jZWxhYmxlPUg7aWEudmlldz1GO2lhLmRldGFpbD1CO2lhLnNjcmVlblg9STtpYS5zY3JlZW5ZPU07aWEuY2xpZW50WD1EO2lhLmNsaWVudFk9SjtpYS5jdHJsS2V5PVA7aWEuYWx0S2V5PVY7aWEubWV0YUtleT0KbmE7aWEuc2hpZnRLZXk9WTtzd2l0Y2goZmEpe2Nhc2UgMDppYS5idXR0b249MTticmVhaztjYXNlIDE6aWEuYnV0dG9uPTQ7YnJlYWs7Y2FzZSAyOmJyZWFrO2RlZmF1bHQ6aWEuYnV0dG9uPTB9aWEucmVsYXRlZFRhcmdldD16O3UuZmlyZUV2ZW50KCJvbiIrdyxpYSl9ZWxzZSBhLmVycm9yKCJzaW11bGF0ZU1vdXNlRXZlbnQoKTogTm8gZXZlbnQgc2ltdWxhdGlvbiBmcmFtZXdvcmsgcHJlc2VudC4iKX1lbHNlIGlmKG1bd10pe0E9dzt3PXouYnViYmxlcztIPXouY2FuY2VsYWJsZTtGPXoudmlldztCPXouY3RybEtleTtJPXouYWx0S2V5O009ei5zaGlmdEtleTtEPXoubWV0YUtleTtKPXoua2V5Q29kZTt6PXouY2hhckNvZGU7dXx8YS5lcnJvcigic2ltdWxhdGVLZXlFdmVudCgpOiBJbnZhbGlkIHRhcmdldC4iKTtpZihkKEEpKXN3aXRjaChBPUEudG9Mb3dlckNhc2UoKSxBKXtjYXNlICJ0ZXh0ZXZlbnQiOkE9ImtleXByZXNzIjticmVhaztjYXNlICJrZXl1cCI6Y2FzZSAia2V5ZG93biI6Y2FzZSAia2V5cHJlc3MiOmJyZWFrOwpkZWZhdWx0OmEuZXJyb3IoInNpbXVsYXRlS2V5RXZlbnQoKTogRXZlbnQgdHlwZSAnIitBKyInIG5vdCBzdXBwb3J0ZWQuIil9ZWxzZSBhLmVycm9yKCJzaW11bGF0ZUtleUV2ZW50KCk6IEV2ZW50IHR5cGUgbXVzdCBiZSBhIHN0cmluZy4iKTtjKHcpfHwodz0hMCk7YyhIKXx8KEg9ITApO2IoRil8fChGPWEuY29uZmlnLndpbik7YyhCKXx8KEI9ITEpO2MoSSl8fChJPSExKTtjKE0pfHwoTT0hMSk7YyhEKXx8KEQ9ITEpO2coSil8fChKPTApO2coeil8fCh6PTApO1A9bnVsbDtpZihmKGEuY29uZmlnLmRvYy5jcmVhdGVFdmVudCkpe3RyeXtQPWEuY29uZmlnLmRvYy5jcmVhdGVFdmVudCgiS2V5RXZlbnRzIiksUC5pbml0S2V5RXZlbnQoQSx3LEgsRixCLEksTSxELEoseil9Y2F0Y2goWil7dHJ5e1A9YS5jb25maWcuZG9jLmNyZWF0ZUV2ZW50KCJFdmVudHMiKX1jYXRjaChlYSl7UD1hLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnQoIlVJRXZlbnRzIil9ZmluYWxseXtQLmluaXRFdmVudChBLAp3LEgpLFAudmlldz1GLFAuYWx0S2V5PUksUC5jdHJsS2V5PUIsUC5zaGlmdEtleT1NLFAubWV0YUtleT1ELFAua2V5Q29kZT1KLFAuY2hhckNvZGU9en19dS5kaXNwYXRjaEV2ZW50KFApfWVsc2UgYihhLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnRPYmplY3QpPyhQPWEuY29uZmlnLmRvYy5jcmVhdGVFdmVudE9iamVjdCgpLFAuYnViYmxlcz13LFAuY2FuY2VsYWJsZT1ILFAudmlldz1GLFAuY3RybEtleT1CLFAuYWx0S2V5PUksUC5zaGlmdEtleT1NLFAubWV0YUtleT1ELFAua2V5Q29kZT0wPHo/ejpKLHUuZmlyZUV2ZW50KCJvbiIrQSxQKSk6YS5lcnJvcigic2ltdWxhdGVLZXlFdmVudCgpOiBObyBldmVudCBzaW11bGF0aW9uIGZyYW1ld29yayBwcmVzZW50LiIpfWVsc2UgaWYocFt3XSlBPXcsdz16LmJ1YmJsZXMsSD16LmNhbmNlbGFibGUsRj16LnZpZXcsej16LmRldGFpbCx1fHxhLmVycm9yKCJzaW11bGF0ZVVJRXZlbnQoKTogSW52YWxpZCB0YXJnZXQuIiksZChBKT8oQT1BLnRvTG93ZXJDYXNlKCksCnBbQV18fGEuZXJyb3IoInNpbXVsYXRlVUlFdmVudCgpOiBFdmVudCB0eXBlICciK0ErIicgbm90IHN1cHBvcnRlZC4iKSk6YS5lcnJvcigic2ltdWxhdGVVSUV2ZW50KCk6IEV2ZW50IHR5cGUgbXVzdCBiZSBhIHN0cmluZy4iKSxCPW51bGwsYyh3KXx8KHc9QSBpbiBzKSxjKEgpfHwoSD0ic3VibWl0Ij09PUEpLGIoRil8fChGPWEuY29uZmlnLndpbiksZyh6KXx8KHo9MSksZihhLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnQpPyhCPWEuY29uZmlnLmRvYy5jcmVhdGVFdmVudCgiVUlFdmVudHMiKSxCLmluaXRVSUV2ZW50KEEsdyxILEYseiksdS5kaXNwYXRjaEV2ZW50KEIpKTpiKGEuY29uZmlnLmRvYy5jcmVhdGVFdmVudE9iamVjdCk/KEI9YS5jb25maWcuZG9jLmNyZWF0ZUV2ZW50T2JqZWN0KCksQi5idWJibGVzPXcsQi5jYW5jZWxhYmxlPUgsQi52aWV3PUYsQi5kZXRhaWw9eix1LmZpcmVFdmVudCgib24iK0EsQikpOmEuZXJyb3IoInNpbXVsYXRlVUlFdmVudCgpOiBObyBldmVudCBzaW11bGF0aW9uIGZyYW1ld29yayBwcmVzZW50LiIpOwplbHNlIGlmKGxbd10paWYoYS5jb25maWcud2luJiYib250b3VjaHN0YXJ0ImluIGEuY29uZmlnLndpbiYmIShhLlVBLnBoYW50b21qc3x8YS5VQS5jaHJvbWUmJjY+YS5VQS5jaHJvbWUpKXt2YXIgSD16LmJ1YmJsZXMsRj16LmNhbmNlbGFibGUsQj16LnZpZXcsST16LmRldGFpbCxNPXouc2NyZWVuWCxEPXouc2NyZWVuWSxKPXouY2xpZW50WCxQPXouY2xpZW50WSxWPXouY3RybEtleSxZPXouYWx0S2V5LG5hPXouc2hpZnRLZXksZmE9ei5tZXRhS2V5LGlhPXoudG91Y2hlcyxvYT16LnRhcmdldFRvdWNoZXMsQWE9ei5jaGFuZ2VkVG91Y2hlcyxwYT16LnNjYWxlO3o9ei5yb3RhdGlvbjt1fHxhLmVycm9yKCJzaW11bGF0ZVRvdWNoRXZlbnQoKTogSW52YWxpZCB0YXJnZXQuIik7YS5MYW5nLmlzU3RyaW5nKHcpPyh3PXcudG9Mb3dlckNhc2UoKSxsW3ddfHxhLmVycm9yKCJzaW11bGF0ZVRvdWNoRXZlbnQoKTogRXZlbnQgdHlwZSAnIit3KyInIG5vdCBzdXBwb3J0ZWQuIikpOmEuZXJyb3IoInNpbXVsYXRlVG91Y2hFdmVudCgpOiBFdmVudCB0eXBlIG11c3QgYmUgYSBzdHJpbmcuIik7CiJ0b3VjaHN0YXJ0Ij09PXd8fCJ0b3VjaG1vdmUiPT09dz8wPT09aWEubGVuZ3RoJiZhLmVycm9yKCJzaW11bGF0ZVRvdWNoRXZlbnQoKTogTm8gdG91Y2ggb2JqZWN0IGluIHRvdWNoZXMiKToidG91Y2hlbmQiPT09dyYmMD09PUFhLmxlbmd0aCYmYS5lcnJvcigic2ltdWxhdGVUb3VjaEV2ZW50KCk6IE5vIHRvdWNoIG9iamVjdCBpbiBjaGFuZ2VkVG91Y2hlcyIpO2EuTGFuZy5pc0Jvb2xlYW4oSCl8fChIPSEwKTthLkxhbmcuaXNCb29sZWFuKEYpfHwoRj0idG91Y2hjYW5jZWwiIT09dyk7YS5MYW5nLmlzT2JqZWN0KEIpfHwoQj1hLmNvbmZpZy53aW4pO2EuTGFuZy5pc051bWJlcihJKXx8KEk9MSk7YS5MYW5nLmlzTnVtYmVyKE0pfHwoTT0wKTthLkxhbmcuaXNOdW1iZXIoRCl8fChEPTApO2EuTGFuZy5pc051bWJlcihKKXx8KEo9MCk7YS5MYW5nLmlzTnVtYmVyKFApfHwoUD0wKTthLkxhbmcuaXNCb29sZWFuKFYpfHwoVj0hMSk7YS5MYW5nLmlzQm9vbGVhbihZKXx8KFk9ITEpOwphLkxhbmcuaXNCb29sZWFuKG5hKXx8KG5hPSExKTthLkxhbmcuaXNCb29sZWFuKGZhKXx8KGZhPSExKTthLkxhbmcuaXNOdW1iZXIocGEpfHwocGE9MSk7YS5MYW5nLmlzTnVtYmVyKHopfHwoej0wKTthLkxhbmcuaXNGdW5jdGlvbihhLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnQpPyhhLlVBLmFuZHJvaWQ/ND5hLlVBLmFuZHJvaWQ/KEE9YS5jb25maWcuZG9jLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLEEuaW5pdE1vdXNlRXZlbnQodyxILEYsQixJLE0sRCxKLFAsVixZLG5hLGZhLDAsdSksQS50b3VjaGVzPWlhLEEudGFyZ2V0VG91Y2hlcz1vYSxBLmNoYW5nZWRUb3VjaGVzPUFhKTooQT1hLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnQoIlRvdWNoRXZlbnQiKSxBLmluaXRUb3VjaEV2ZW50KGlhLG9hLEFhLHcsQixNLEQsSixQLFYsWSxuYSxmYSkpOmEuVUEuaW9zPzI8PWEuVUEuaW9zPyhBPWEuY29uZmlnLmRvYy5jcmVhdGVFdmVudCgiVG91Y2hFdmVudCIpLEEuaW5pdFRvdWNoRXZlbnQodywKSCxGLEIsSSxNLEQsSixQLFYsWSxuYSxmYSxpYSxvYSxBYSxwYSx6KSk6YS5lcnJvcigic2ltdWxhdGVUb3VjaEV2ZW50KCk6IE5vIHRvdWNoIGV2ZW50IHNpbXVsYXRpb24gZnJhbWV3b3JrIHByZXNlbnQgZm9yIGlPUywgIithLlVBLmlvcysiLiIpOmEuZXJyb3IoInNpbXVsYXRlVG91Y2hFdmVudCgpOiBOb3Qgc3VwcG9ydGVkIGFnZW50IHlldCwgIithLlVBLnVzZXJBZ2VudCksdS5kaXNwYXRjaEV2ZW50KEEpKTphLmVycm9yKCJzaW11bGF0ZVRvdWNoRXZlbnQoKTogTm8gZXZlbnQgc2ltdWxhdGlvbiBmcmFtZXdvcmsgcHJlc2VudC4iKX1lbHNlIGEuZXJyb3IoInNpbXVsYXRlKCk6IEV2ZW50ICciK3crIicgY2FuJ3QgYmUgc2ltdWxhdGVkLiBVc2UgZ2VzdHVyZS1zaW11bGF0ZSBtb2R1bGUgaW5zdGVhZC4iKTtlbHNlIGEuVUEuaW9zJiYyPD1hLlVBLmlvcyYmaFt3XT8oQT13LHc9ei5idWJibGVzLEg9ei5jYW5jZWxhYmxlLEY9ei52aWV3LEI9ei5kZXRhaWwsST16LnNjcmVlblgsCk09ei5zY3JlZW5ZLEQ9ei5jbGllbnRYLEo9ei5jbGllbnRZLFA9ei5jdHJsS2V5LFY9ei5hbHRLZXksWT16LnNoaWZ0S2V5LG5hPXoubWV0YUtleSxmYT16LnNjYWxlLHo9ei5yb3RhdGlvbiwoIWEuVUEuaW9zfHwyPmEuVUEuaW9zKSYmYS5lcnJvcigic2ltdWxhdGVHZXN0dXJlRXZlbnQoKTogTmF0aXZlIGdlc3R1cmUgRE9NIGV2ZW50ZnJhbWUgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHBsYXRmb3JtLiIpLHV8fGEuZXJyb3IoInNpbXVsYXRlR2VzdHVyZUV2ZW50KCk6IEludmFsaWQgdGFyZ2V0LiIpLGEuTGFuZy5pc1N0cmluZyhBKT8oQT1BLnRvTG93ZXJDYXNlKCksaFtBXXx8YS5lcnJvcigic2ltdWxhdGVUb3VjaEV2ZW50KCk6IEV2ZW50IHR5cGUgJyIrQSsiJyBub3Qgc3VwcG9ydGVkLiIpKTphLmVycm9yKCJzaW11bGF0ZUdlc3R1cmVFdmVudCgpOiBFdmVudCB0eXBlIG11c3QgYmUgYSBzdHJpbmcuIiksYS5MYW5nLmlzQm9vbGVhbih3KXx8KHc9ITApLGEuTGFuZy5pc0Jvb2xlYW4oSCl8fAooSD0hMCksYS5MYW5nLmlzT2JqZWN0KEYpfHwoRj1hLmNvbmZpZy53aW4pLGEuTGFuZy5pc051bWJlcihCKXx8KEI9MiksYS5MYW5nLmlzTnVtYmVyKEkpfHwoST0wKSxhLkxhbmcuaXNOdW1iZXIoTSl8fChNPTApLGEuTGFuZy5pc051bWJlcihEKXx8KEQ9MCksYS5MYW5nLmlzTnVtYmVyKEopfHwoSj0wKSxhLkxhbmcuaXNCb29sZWFuKFApfHwoUD0hMSksYS5MYW5nLmlzQm9vbGVhbihWKXx8KFY9ITEpLGEuTGFuZy5pc0Jvb2xlYW4oWSl8fChZPSExKSxhLkxhbmcuaXNCb29sZWFuKG5hKXx8KG5hPSExKSxhLkxhbmcuaXNOdW1iZXIoZmEpfHwoZmE9MSksYS5MYW5nLmlzTnVtYmVyKHopfHwoej0wKSxpYT1hLmNvbmZpZy5kb2MuY3JlYXRlRXZlbnQoIkdlc3R1cmVFdmVudCIpLGlhLmluaXRHZXN0dXJlRXZlbnQoQSx3LEgsRixCLEksTSxELEosUCxWLFksbmEsdSxmYSx6KSx1LmRpc3BhdGNoRXZlbnQoaWEpKTphLmVycm9yKCJzaW11bGF0ZSgpOiBFdmVudCAnIit3KyInIGNhbid0IGJlIHNpbXVsYXRlZC4iKX19KSgpfSwKInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZXZlbnQtYmFzZSJdfSk7CllVSS5hZGQoImV2ZW50LXN5bnRoZXRpYyIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKHMsbCl7dGhpcy5oYW5kbGU9czt0aGlzLmVtaXRGYWNhZGU9bH1mdW5jdGlvbiB0KHMsbCxoKXt0aGlzLmhhbmRsZXM9W107dGhpcy5lbD1zO3RoaXMua2V5PWg7dGhpcy5kb21rZXk9bH1mdW5jdGlvbiBmKCl7dGhpcy5faW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGQ9YS5DdXN0b21FdmVudCxjPWEuRW52LmV2dC5kb21fbWFwLGI9YS5BcnJheSxnPWEuTGFuZyxlPWcuaXNPYmplY3Qsaz1nLmlzU3RyaW5nLG09Zy5pc0FycmF5LHA9YS5TZWxlY3Rvci5xdWVyeSxnPWZ1bmN0aW9uKCl7fTtxLnByb3RvdHlwZS5maXJlPWZ1bmN0aW9uKHMpe3ZhciBsPWIoYXJndW1lbnRzLDAsITApLGg9dGhpcy5oYW5kbGUsdT1oLmV2dCxoPWguc3ViLHc9aC5jb250ZXh0LHo9aC5maWx0ZXIsQT1zfHx7fTt0aGlzLmVtaXRGYWNhZGU/KHMmJnMucHJldmVudERlZmF1bHR8fChBPXUuX2dldEZhY2FkZSgpLAplKHMpJiYhcy5wcmV2ZW50RGVmYXVsdD8oYS5taXgoQSxzLCEwKSxsWzBdPUEpOmwudW5zaGlmdChBKSksQS50eXBlPXUudHlwZSxBLmRldGFpbHM9bC5zbGljZSgpLHomJihBLmNvbnRhaW5lcj11Lmhvc3QpKTp6JiZlKHMpJiZzLmN1cnJlbnRUYXJnZXQmJmwuc2hpZnQoKTtoLmNvbnRleHQ9d3x8QS5jdXJyZW50VGFyZ2V0fHx1Lmhvc3Q7ej11LmZpcmUuYXBwbHkodSxsKTtzLnByZXZlbnRlZCYmdS5wcmV2ZW50ZWRGbiYmdS5wcmV2ZW50ZWRGbi5hcHBseSh1LGwpO3Muc3RvcHBlZCYmdS5zdG9wcGVkRm4mJnUuc3RvcHBlZEZuLmFwcGx5KHUsbCk7aC5jb250ZXh0PXc7cmV0dXJuIHp9O3QucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0LHR5cGU6Il9zeW50aCIsZm46ZyxjYXB0dXJlOiExLHJlZ2lzdGVyOmZ1bmN0aW9uKHMpe3MuZXZ0LnJlZ2lzdHJ5PXRoaXM7dGhpcy5oYW5kbGVzLnB1c2gocyl9LHVucmVnaXN0ZXI6ZnVuY3Rpb24ocyl7dmFyIGw9dGhpcy5oYW5kbGVzLGg9Y1t0aGlzLmRvbWtleV0sCnU7Zm9yKHU9bC5sZW5ndGgtMTswPD11Oy0tdSlpZihsW3VdLnN1Yj09PXMpe2wuc3BsaWNlKHUsMSk7YnJlYWt9bC5sZW5ndGh8fChkZWxldGUgaFt0aGlzLmtleV0sYS5PYmplY3Quc2l6ZShoKXx8ZGVsZXRlIGNbdGhpcy5kb21rZXldKX0sZGV0YWNoQWxsOmZ1bmN0aW9uKCl7Zm9yKHZhciBzPXRoaXMuaGFuZGxlcyxsPXMubGVuZ3RoOzA8PS0tbDspc1tsXS5kZXRhY2goKX19O2EubWl4KGYse05vdGlmaWVyOnEsU3ludGhSZWdpc3RyeTp0LGdldFJlZ2lzdHJ5OmZ1bmN0aW9uKHMsbCxoKXtzPXMuX25vZGU7dmFyIHU9YS5zdGFtcChzKTtsPSJldmVudDoiK3UrbCsiX3N5bnRoIjt2YXIgdz1jW3VdO2gmJih3fHwodz1jW3VdPXt9KSx3W2xdfHwod1tsXT1uZXcgdChzLHUsbCkpKTtyZXR1cm4gdyYmd1tsXXx8bnVsbH0sX2RlbGV0ZVN1YjpmdW5jdGlvbihzKXtpZihzJiZzLmZuKXt2YXIgbD10aGlzLmV2ZW50RGVmLGg9cy5maWx0ZXI/ImRldGFjaERlbGVnYXRlIjoiZGV0YWNoIjsKdGhpcy5fc3Vic2NyaWJlcnM9W107ZC5rZWVwRGVwcmVjYXRlZFN1YnMmJih0aGlzLnN1YnNjcmliZXJzPXt9KTtsW2hdKHMubm9kZSxzLHRoaXMubm90aWZpZXIscy5maWx0ZXIpO3RoaXMucmVnaXN0cnkudW5yZWdpc3RlcihzKTtkZWxldGUgcy5mbjtkZWxldGUgcy5ub2RlO2RlbGV0ZSBzLmNvbnRleHR9fSxwcm90b3R5cGU6e2NvbnN0cnVjdG9yOmYsX2luaXQ6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLnB1Ymxpc2hDb25maWd8fCh0aGlzLnB1Ymxpc2hDb25maWc9e30pO3RoaXMuZW1pdEZhY2FkZT0iZW1pdEZhY2FkZSJpbiBzP3MuZW1pdEZhY2FkZTohMDtzLmVtaXRGYWNhZGU9ITF9LHByb2Nlc3NBcmdzOmcsb246ZyxkZXRhY2g6ZyxkZWxlZ2F0ZTpnLGRldGFjaERlbGVnYXRlOmcsX29uOmZ1bmN0aW9uKHMsbCl7dmFyIGg9W10sdT1zLnNsaWNlKCksdz10aGlzLnByb2Nlc3NBcmdzKHMsbCksej1zWzJdLEE9bD8iZGVsZWdhdGUiOiJvbiIsSCxGO0g9ayh6KT9wKHopOmIoenx8CmEub25lKGEuY29uZmlnLndpbikpO2lmKCFILmxlbmd0aCYmayh6KSlyZXR1cm4gRj1hLm9uKCJhdmFpbGFibGUiLGZ1bmN0aW9uKCl7YS5taXgoRixhW0FdLmFwcGx5KGEsdSksITApfSx6KTthLkFycmF5LmVhY2goSCxmdW5jdGlvbihCKXt2YXIgST1zLnNsaWNlKCksTTtpZihCPWEub25lKEIpKWwmJihNPUkuc3BsaWNlKDMsMSlbMF0pLEkuc3BsaWNlKDAsNCxJWzFdLElbM10pLHRoaXMucHJldmVudER1cHMmJnRoaXMuZ2V0U3VicyhCLHMsbnVsbCwhMCl8fGgucHVzaCh0aGlzLl9zdWJzY3JpYmUoQixBLEksdyxNKSl9LHRoaXMpO3JldHVybiAxPT09aC5sZW5ndGg/aFswXTpuZXcgYS5FdmVudEhhbmRsZShoKX0sX3N1YnNjcmliZTpmdW5jdGlvbihzLGwsaCx1LHcpe3ZhciB6PW5ldyBhLkN1c3RvbUV2ZW50KHRoaXMudHlwZSx0aGlzLnB1Ymxpc2hDb25maWcpO2g9ei5vbi5hcHBseSh6LGgpO3ZhciBBPW5ldyBxKGgsdGhpcy5lbWl0RmFjYWRlKSxIPWYuZ2V0UmVnaXN0cnkocywKdGhpcy50eXBlLCEwKSxGPWguc3ViO0Yubm9kZT1zO0YuZmlsdGVyPXc7dSYmdGhpcy5hcHBseUFyZ0V4dHJhcyh1LEYpO2EubWl4KHose2V2ZW50RGVmOnRoaXMsbm90aWZpZXI6QSxob3N0OnMsY3VycmVudFRhcmdldDpzLHRhcmdldDpzLGVsOnMuX25vZGUsX2RlbGV0ZTpmLl9kZWxldGVTdWJ9LCEwKTtoLm5vdGlmaWVyPUE7SC5yZWdpc3RlcihoKTt0aGlzW2xdKHMsRixBLHcpO3JldHVybiBofSxhcHBseUFyZ0V4dHJhczpmdW5jdGlvbihzLGwpe2wuX2V4dHJhPXN9LF9kZXRhY2g6ZnVuY3Rpb24ocyl7dmFyIGw9c1syXSxsPWsobCk/cChsKTpiKGwpLGgsdSx3LHo7cy5zcGxpY2UoMiwxKTt1PTA7Zm9yKHc9bC5sZW5ndGg7dTx3OysrdSlpZihoPWEub25lKGxbdV0pKWlmKGg9dGhpcy5nZXRTdWJzKGgscykpZm9yKHo9aC5sZW5ndGgtMTswPD16Oy0teiloW3pdLmRldGFjaCgpfSxnZXRTdWJzOmZ1bmN0aW9uKHMsbCxoLHUpe3ZhciB3PWYuZ2V0UmVnaXN0cnkocyx0aGlzLnR5cGUpOwpzPVtdO3ZhciB6LEEsSDtpZih3KWZvcih3PXcuaGFuZGxlcyxofHwoaD10aGlzLnN1Yk1hdGNoKSx6PTAsQT13Lmxlbmd0aDt6PEE7Kyt6KWlmKEg9d1t6XSxoLmNhbGwodGhpcyxILnN1YixsKSl7aWYodSlyZXR1cm4gSDtzLnB1c2god1t6XSl9cmV0dXJuIHMubGVuZ3RoJiZzfSxzdWJNYXRjaDpmdW5jdGlvbihzLGwpe3JldHVybiFsWzFdfHxzLmZuPT09bFsxXX19fSwhMCk7YS5TeW50aGV0aWNFdmVudD1mO2EuRXZlbnQuZGVmaW5lPWZ1bmN0aW9uKHMsbCxoKXt2YXIgdSx3O3MmJnMudHlwZT8odT1zLGg9bCk6bCYmKHU9YS5tZXJnZSh7dHlwZTpzfSxsKSk7aWYodSl7aWYoaHx8IWEuTm9kZS5ET01fRVZFTlRTW3UudHlwZV0pcz1mdW5jdGlvbigpe2YuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxhLmV4dGVuZChzLGYsdSksdz1uZXcgcyxzPXcudHlwZSxhLk5vZGUuRE9NX0VWRU5UU1tzXT1hLkVudi5ldnQucGx1Z2luc1tzXT17ZXZlbnREZWY6dyxvbjpmdW5jdGlvbigpe3JldHVybiB3Ll9vbihiKGFyZ3VtZW50cykpfSwKZGVsZWdhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdy5fb24oYihhcmd1bWVudHMpLCEwKX0sZGV0YWNoOmZ1bmN0aW9uKCl7cmV0dXJuIHcuX2RldGFjaChiKGFyZ3VtZW50cykpfX19ZWxzZShrKHMpfHxtKHMpKSYmYS5BcnJheS5lYWNoKGIocyksZnVuY3Rpb24oeil7YS5Ob2RlLkRPTV9FVkVOVFNbel09MX0pO3JldHVybiB3fX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsibm9kZS1iYXNlIiwiZXZlbnQtY3VzdG9tLWNvbXBsZXgiXX0pOwpZVUkuYWRkKCJpbnRsIixmdW5jdGlvbihhLEUpe3ZhciBxPXt9LHQ9W107YS5taXgoYS5uYW1lc3BhY2UoIkludGwiKSx7X21vZDpmdW5jdGlvbihmKXtxW2ZdfHwocVtmXT17fSk7cmV0dXJuIHFbZl19LHNldExhbmc6ZnVuY3Rpb24oZixkKXt2YXIgYz10aGlzLl9tb2QoZiksYj1jLnl1aUFjdGl2ZUxhbmcsZz0hIWNbZF07ZyYmZCE9PWImJihjLnl1aUFjdGl2ZUxhbmc9ZCx0aGlzLmZpcmUoImludGw6bGFuZ0NoYW5nZSIse21vZHVsZTpmLHByZXZWYWw6YixuZXdWYWw6Inl1aVJvb3RMYW5nIj09PWQ/IiI6ZH0pKTtyZXR1cm4gZ30sZ2V0TGFuZzpmdW5jdGlvbihmKXtmPXRoaXMuX21vZChmKS55dWlBY3RpdmVMYW5nO3JldHVybiJ5dWlSb290TGFuZyI9PT1mPyIiOmZ9LGFkZDpmdW5jdGlvbihmLGQsYyl7ZD1kfHwieXVpUm9vdExhbmciO3RoaXMuX21vZChmKVtkXT1jO3RoaXMuc2V0TGFuZyhmLGQpfSxnZXQ6ZnVuY3Rpb24oZixkLGMpe2Y9dGhpcy5fbW9kKGYpO2M9Y3x8Zi55dWlBY3RpdmVMYW5nOwpjPWZbY118fHt9O3JldHVybiBkP2NbZF06YS5tZXJnZShjKX0sZ2V0QXZhaWxhYmxlTGFuZ3M6ZnVuY3Rpb24oZil7dmFyIGQ9YS5FbnYuX2xvYWRlcjtyZXR1cm4oZj0oZj1kJiZkLm1vZHVsZUluZm9bZl0pJiZmLmxhbmcpP2YuY29uY2F0KCk6dH19KTthLmF1Z21lbnQoYS5JbnRsLGEuRXZlbnRUYXJnZXQpO2EuSW50bC5wdWJsaXNoKCJpbnRsOmxhbmdDaGFuZ2UiLHtlbWl0RmFjYWRlOiEwfSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImludGwtYmFzZSIsImV2ZW50LWN1c3RvbSJdfSk7CllVSS5hZGQoImlvLWJhc2UiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcShtKXt0aGlzLl91aWQ9ImlvOiIrYysrO3RoaXMuX2luaXQobSk7YS5pby5fbWFwW3RoaXMuX3VpZF09dGhpc312YXIgdD0ic3RhcnQgY29tcGxldGUgZW5kIHN1Y2Nlc3MgZmFpbHVyZSBwcm9ncmVzcyIuc3BsaXQoIiAiKSxmPVsic3RhdHVzIiwic3RhdHVzVGV4dCIsInJlc3BvbnNlVGV4dCIsInJlc3BvbnNlWE1MIl0sZD1hLmNvbmZpZy53aW4sYz0wO3EucHJvdG90eXBlPXtfaWQ6MCxfaGVhZGVyczp7IlgtUmVxdWVzdGVkLVdpdGgiOiJYTUxIdHRwUmVxdWVzdCJ9LF90aW1lb3V0Ont9LF9pbml0OmZ1bmN0aW9uKG0pe3ZhciBwLHM7dGhpcy5jZmc9bXx8e307YS5hdWdtZW50KHRoaXMsYS5FdmVudFRhcmdldCk7cD0wO2ZvcihzPXQubGVuZ3RoO3A8czsrK3ApdGhpcy5wdWJsaXNoKCJpbzoiK3RbcF0sYS5tZXJnZSh7YnJvYWRjYXN0OjF9LG0pKSx0aGlzLnB1Ymxpc2goImlvLXRybjoiK3RbcF0sbSl9LApfY3JlYXRlOmZ1bmN0aW9uKG0scCl7dmFyIHM9dGhpcyxsPXtpZDphLkxhbmcuaXNOdW1iZXIocCk/cDpzLl9pZCsrLHVpZDpzLl91aWR9LGg9bS54ZHI/bS54ZHIudXNlOm51bGwsdT1tLmZvcm0mJm0uZm9ybS51cGxvYWQ/ImlmcmFtZSI6bnVsbDsibmF0aXZlIj09PWgmJihoPWEuVUEuaWUmJiFrPyJ4ZHIiOm51bGwscy5zZXRIZWFkZXIoIlgtUmVxdWVzdGVkLVdpdGgiKSk7bD0oaD1ofHx1KT9hLm1lcmdlKGEuSU8uY3VzdG9tVHJhbnNwb3J0KGgpLGwpOmEubWVyZ2UoYS5JTy5kZWZhdWx0VHJhbnNwb3J0KCksbCk7bC5ub3RpZnkmJihtLm5vdGlmeT1mdW5jdGlvbih3LHosQSl7cy5ub3RpZnkodyx6LEEpfSk7IWgmJmQmJmQuRm9ybURhdGEmJm0uZGF0YSBpbnN0YW5jZW9mIGQuRm9ybURhdGEmJihsLmMudXBsb2FkLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24odyl7cy5wcm9ncmVzcyhsLHcsbSl9LGwuYy5vbmxvYWQ9ZnVuY3Rpb24odyl7cy5sb2FkKGwsdyxtKX0sbC5jLm9uZXJyb3I9CmZ1bmN0aW9uKHcpe3MuZXJyb3IobCx3LG0pfSxsLnVwbG9hZD0hMCk7cmV0dXJuIGx9LF9kZXN0cm95OmZ1bmN0aW9uKG0peyFkfHxtLm5vdGlmeXx8bS54ZHJ8fChiJiYhbS51cGxvYWQ/bS5jLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsOm0udXBsb2FkPyhtLmMudXBsb2FkLm9ucHJvZ3Jlc3M9bnVsbCxtLmMub25sb2FkPW51bGwsbS5jLm9uZXJyb3I9bnVsbCk6YS5VQS5pZSYmIW0uZSYmbS5jLmFib3J0KCkpO20uYz1udWxsfSxfZXZ0OmZ1bmN0aW9uKG0scCxzKXt2YXIgbCxoPXMuYXJndW1lbnRzLHU9dGhpcy5jZmcuZW1pdEZhY2FkZSx3PSJpbzoiK20sej0iaW8tdHJuOiIrbTt0aGlzLmRldGFjaCh6KTtwLmUmJihwLmM9e3N0YXR1czowLHN0YXR1c1RleHQ6cC5lfSk7bD1bdT97aWQ6cC5pZCxkYXRhOnAuYyxjZmc6cyxhcmd1bWVudHM6aH06cC5pZF07dXx8KG0hPT10WzBdJiZtIT09dFsyXSYmKHAuZXZ0P2wucHVzaChwLmV2dCk6bC5wdXNoKHAuYykpLGgmJmwucHVzaChoKSk7CmwudW5zaGlmdCh3KTt0aGlzLmZpcmUuYXBwbHkodGhpcyxsKTtzLm9uJiYobFswXT16LHRoaXMub25jZSh6LHMub25bbV0scy5jb250ZXh0fHxhKSx0aGlzLmZpcmUuYXBwbHkodGhpcyxsKSl9LHN0YXJ0OmZ1bmN0aW9uKG0scCl7dGhpcy5fZXZ0KHRbMF0sbSxwKX0sY29tcGxldGU6ZnVuY3Rpb24obSxwKXt0aGlzLl9ldnQodFsxXSxtLHApfSxlbmQ6ZnVuY3Rpb24obSxwKXt0aGlzLl9ldnQodFsyXSxtLHApO3RoaXMuX2Rlc3Ryb3kobSl9LHN1Y2Nlc3M6ZnVuY3Rpb24obSxwKXt0aGlzLl9ldnQodFszXSxtLHApO3RoaXMuZW5kKG0scCl9LGZhaWx1cmU6ZnVuY3Rpb24obSxwKXt0aGlzLl9ldnQodFs0XSxtLHApO3RoaXMuZW5kKG0scCl9LHByb2dyZXNzOmZ1bmN0aW9uKG0scCxzKXttLmV2dD1wO3RoaXMuX2V2dCh0WzVdLG0scyl9LGxvYWQ6ZnVuY3Rpb24obSxwLHMpe20uZXZ0PXAudGFyZ2V0O3RoaXMuX2V2dCh0WzFdLG0scyl9LGVycm9yOmZ1bmN0aW9uKG0scCxzKXttLmV2dD0KcDt0aGlzLl9ldnQodFs0XSxtLHMpfSxfcmV0cnk6ZnVuY3Rpb24obSxwLHMpe3RoaXMuX2Rlc3Ryb3kobSk7cy54ZHIudXNlPSJmbGFzaCI7cmV0dXJuIHRoaXMuc2VuZChwLHMsbS5pZCl9LF9jb25jYXQ6ZnVuY3Rpb24obSxwKXtyZXR1cm4gbSs9KC0xPT09bS5pbmRleE9mKCI/Iik/Ij8iOiJceDI2IikrcH0sc2V0SGVhZGVyOmZ1bmN0aW9uKG0scCl7cD90aGlzLl9oZWFkZXJzW21dPXA6ZGVsZXRlIHRoaXMuX2hlYWRlcnNbbV19LF9zZXRIZWFkZXJzOmZ1bmN0aW9uKG0scCl7cD1hLm1lcmdlKHRoaXMuX2hlYWRlcnMscCk7YS5PYmplY3QuZWFjaChwLGZ1bmN0aW9uKHMsbCl7ImRpc2FibGUiIT09cyYmbS5zZXRSZXF1ZXN0SGVhZGVyKGwscFtsXSl9KX0sX3N0YXJ0VGltZW91dDpmdW5jdGlvbihtLHApe3ZhciBzPXRoaXM7cy5fdGltZW91dFttLmlkXT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cy5fYWJvcnQobSwidGltZW91dCIpfSxwKX0sX2NsZWFyVGltZW91dDpmdW5jdGlvbihtKXtjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFttXSk7CmRlbGV0ZSB0aGlzLl90aW1lb3V0W21dfSxfcmVzdWx0OmZ1bmN0aW9uKG0scCl7dmFyIHM7dHJ5e3M9bS5jLnN0YXR1c31jYXRjaChsKXtzPTB9MjAwPD1zJiYzMDA+c3x8MzA0PT09c3x8MTIyMz09PXM/dGhpcy5zdWNjZXNzKG0scCk6dGhpcy5mYWlsdXJlKG0scCl9LF9yUzpmdW5jdGlvbihtLHApe3ZhciBzPXRoaXM7ND09PW0uYy5yZWFkeVN0YXRlJiYocC50aW1lb3V0JiZzLl9jbGVhclRpbWVvdXQobS5pZCksc2V0VGltZW91dChmdW5jdGlvbigpe3MuY29tcGxldGUobSxwKTtzLl9yZXN1bHQobSxwKX0sMCkpfSxfYWJvcnQ6ZnVuY3Rpb24obSxwKXttJiZtLmMmJihtLmU9cCxtLmMuYWJvcnQoKSl9LHNlbmQ6ZnVuY3Rpb24obSxwLHMpe3ZhciBsLGgsdSx3LHosQT10aGlzLEg9bSxGPXt9O3A9cD9hLk9iamVjdChwKTp7fTtsPUEuX2NyZWF0ZShwLHMpO3M9cC5tZXRob2Q/cC5tZXRob2QudG9VcHBlckNhc2UoKToiR0VUIjt3PXAuc3luYzt6PXAuZGF0YTthLkxhbmcuaXNPYmplY3QoeikmJgohei5ub2RlVHlwZSYmIWwudXBsb2FkJiZhLlF1ZXJ5U3RyaW5nJiZhLlF1ZXJ5U3RyaW5nLnN0cmluZ2lmeSYmKHAuZGF0YT16PWEuUXVlcnlTdHJpbmcuc3RyaW5naWZ5KHopKTtpZihwLmZvcm0pe2lmKHAuZm9ybS51cGxvYWQpcmV0dXJuIEEudXBsb2FkKGwsbSxwKTt6PUEuX3NlcmlhbGl6ZShwLmZvcm0seil9enx8KHo9IiIpO2lmKHopc3dpdGNoKHMpe2Nhc2UgIkdFVCI6Y2FzZSAiSEVBRCI6Y2FzZSAiREVMRVRFIjpIPUEuX2NvbmNhdChILHopO3o9IiI7YnJlYWs7Y2FzZSAiUE9TVCI6Y2FzZSAiUFVUIjpwLmhlYWRlcnM9YS5tZXJnZSh7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldFx4M2RVVEYtOCJ9LHAuaGVhZGVycyl9aWYobC54ZHIpcmV0dXJuIEEueGRyKEgsbCxwKTtpZihsLm5vdGlmeSlyZXR1cm4gbC5jLnNlbmQobCxtLHApO3d8fGwudXBsb2FkfHwobC5jLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe0EuX3JTKGwsCnApfSk7dHJ5e2lmKGwuYy5vcGVuKHMsSCwhdyxwLnVzZXJuYW1lfHxudWxsLHAucGFzc3dvcmR8fG51bGwpLEEuX3NldEhlYWRlcnMobC5jLHAuaGVhZGVyc3x8e30pLEEuc3RhcnQobCxwKSxwLnhkciYmcC54ZHIuY3JlZGVudGlhbHMmJmsmJihsLmMud2l0aENyZWRlbnRpYWxzPSEwKSxsLmMuc2VuZCh6KSx3KXtoPTA7Zm9yKHU9Zi5sZW5ndGg7aDx1OysraClGW2ZbaF1dPWwuY1tmW2hdXTtGLmdldEFsbFJlc3BvbnNlSGVhZGVycz1mdW5jdGlvbigpe3JldHVybiBsLmMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl9O0YuZ2V0UmVzcG9uc2VIZWFkZXI9ZnVuY3Rpb24oSSl7cmV0dXJuIGwuYy5nZXRSZXNwb25zZUhlYWRlcihJKX07QS5jb21wbGV0ZShsLHApO0EuX3Jlc3VsdChsLHApO3JldHVybiBGfX1jYXRjaChCKXtpZihsLnhkcilyZXR1cm4gQS5fcmV0cnkobCxtLHApO0EuY29tcGxldGUobCxwKTtBLl9yZXN1bHQobCxwKX1wLnRpbWVvdXQmJkEuX3N0YXJ0VGltZW91dChsLApwLnRpbWVvdXQpO3JldHVybntpZDpsLmlkLGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuYz9BLl9hYm9ydChsLCJhYm9ydCIpOiExfSxpc0luUHJvZ3Jlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gbC5jP2wuYy5yZWFkeVN0YXRlJTQ6ITF9LGlvOkF9fX07YS5pbz1mdW5jdGlvbihtLHApe3ZhciBzPWEuaW8uX21hcFsiaW86MCJdfHxuZXcgcTtyZXR1cm4gcy5zZW5kLmFwcGx5KHMsW20scF0pfTthLmlvLmhlYWRlcj1mdW5jdGlvbihtLHApeyhhLmlvLl9tYXBbImlvOjAiXXx8bmV3IHEpLnNldEhlYWRlcihtLHApfTthLklPPXE7YS5pby5fbWFwPXt9O3ZhciBiPWQmJmQuWE1MSHR0cFJlcXVlc3QsZz1kJiZkLlhEb21haW5SZXF1ZXN0LGU9ZCYmZC5BY3RpdmVYT2JqZWN0LGs9YiYmIndpdGhDcmVkZW50aWFscyJpbiBuZXcgWE1MSHR0cFJlcXVlc3Q7YS5taXgoYS5JTyx7X2RlZmF1bHQ6InhociIsZGVmYXVsdFRyYW5zcG9ydDpmdW5jdGlvbihtKXtpZihtKWEuSU8uX2RlZmF1bHQ9bTsKZWxzZSByZXR1cm57YzphLklPLnRyYW5zcG9ydHNbYS5JTy5fZGVmYXVsdF0oKSxub3RpZnk6InhociI9PT1hLklPLl9kZWZhdWx0PyExOiEwfX0sdHJhbnNwb3J0czp7eGhyOmZ1bmN0aW9uKCl7cmV0dXJuIGI/bmV3IFhNTEh0dHBSZXF1ZXN0OmU/bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik6bnVsbH0seGRyOmZ1bmN0aW9uKCl7cmV0dXJuIGc/bmV3IFhEb21haW5SZXF1ZXN0Om51bGx9LGlmcmFtZTpmdW5jdGlvbigpe3JldHVybnt9fSxmbGFzaDpudWxsLG5vZGVqczpudWxsfSxjdXN0b21UcmFuc3BvcnQ6ZnVuY3Rpb24obSl7dmFyIHA9e2M6YS5JTy50cmFuc3BvcnRzW21dKCl9O3BbInhkciI9PT1tfHwiZmxhc2giPT09bT8ieGRyIjoibm90aWZ5Il09ITA7cmV0dXJuIHB9fSk7YS5taXgoYS5JTy5wcm90b3R5cGUse25vdGlmeTpmdW5jdGlvbihtLHAscyl7c3dpdGNoKG0pe2Nhc2UgInRpbWVvdXQiOmNhc2UgImFib3J0IjpjYXNlICJ0cmFuc3BvcnQgZXJyb3IiOnAuYz0Ke3N0YXR1czowLHN0YXR1c1RleHQ6bX0sbT0iZmFpbHVyZSI7ZGVmYXVsdDp0aGlzW21dLmFwcGx5KHRoaXMsW3Asc10pfX19KX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZXZlbnQtY3VzdG9tLWJhc2UiLCJxdWVyeXN0cmluZy1zdHJpbmdpZnktc2ltcGxlIl19KTsKWVVJLmFkZCgiaW8tZm9ybSIsZnVuY3Rpb24oYSxFKXt2YXIgcT1lbmNvZGVVUklDb21wb25lbnQ7YS5JTy5zdHJpbmdpZnk9ZnVuY3Rpb24odCxmKXtmPWZ8fHt9O3JldHVybiBhLklPLnByb3RvdHlwZS5fc2VyaWFsaXplKHtpZDp0LHVzZURpc2FibGVkOmYudXNlRGlzYWJsZWR9LGYuZXh0cmEmJiJvYmplY3QiPT09dHlwZW9mIGYuZXh0cmE/YS5RdWVyeVN0cmluZy5zdHJpbmdpZnkoZi5leHRyYSk6Zi5leHRyYSl9O2EubWl4KGEuSU8ucHJvdG90eXBlLHtfc2VyaWFsaXplOmZ1bmN0aW9uKHQsZil7dmFyIGQ9W10sYz10LnVzZURpc2FibGVkfHwhMSxiPTAsZz0ic3RyaW5nIj09PXR5cGVvZiB0LmlkP3QuaWQ6dC5pZC5nZXRBdHRyaWJ1dGUoImlkIiksZSxrLG0scCxzLGwsaDtnfHwoZz1hLmd1aWQoImlvOiIpLHQuaWQuc2V0QXR0cmlidXRlKCJpZCIsZykpO2U9YS5jb25maWcuZG9jLmdldEVsZW1lbnRCeUlkKGcpO2lmKCFlfHwhZS5lbGVtZW50cylyZXR1cm4gZnx8IiI7cD0wOwpmb3Iocz1lLmVsZW1lbnRzLmxlbmd0aDtwPHM7KytwKWlmKGc9ZS5lbGVtZW50c1twXSxtPWcuZGlzYWJsZWQsaz1nLm5hbWUsYz9rOmsmJiFtKXN3aXRjaChrPXEoaykrIlx4M2QiLG09cShnLnZhbHVlKSxnLnR5cGUpe2Nhc2UgInNlbGVjdC1vbmUiOi0xPGcuc2VsZWN0ZWRJbmRleCYmKGg9Zy5vcHRpb25zW2cuc2VsZWN0ZWRJbmRleF0sZFtiKytdPWsrcShoLmF0dHJpYnV0ZXMudmFsdWUmJmguYXR0cmlidXRlcy52YWx1ZS5zcGVjaWZpZWQ/aC52YWx1ZTpoLnRleHQpKTticmVhaztjYXNlICJzZWxlY3QtbXVsdGlwbGUiOmlmKC0xPGcuc2VsZWN0ZWRJbmRleClmb3IobT1nLnNlbGVjdGVkSW5kZXgsbD1nLm9wdGlvbnMubGVuZ3RoO208bDsrK20paD1nLm9wdGlvbnNbbV0saC5zZWxlY3RlZCYmKGRbYisrXT1rK3EoaC5hdHRyaWJ1dGVzLnZhbHVlJiZoLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lmaWVkP2gudmFsdWU6aC50ZXh0KSk7YnJlYWs7Y2FzZSAicmFkaW8iOmNhc2UgImNoZWNrYm94IjpnLmNoZWNrZWQmJgooZFtiKytdPWsrbSk7YnJlYWs7Y2FzZSAiZmlsZSI6Y2FzZSB2b2lkIDA6Y2FzZSAicmVzZXQiOmNhc2UgImJ1dHRvbiI6YnJlYWs7ZGVmYXVsdDpkW2IrK109ayttfWYmJihkW2IrK109Zik7cmV0dXJuIGQuam9pbigiXHgyNiIpfX0sITApfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJpby1iYXNlIiwibm9kZS1iYXNlIl19KTsKWVVJLmFkZCgiaW8tcXVldWUiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcShmLGQpe3JldHVybiB0LnF1ZXVlLmFwcGx5KHQsW2YsZF0pfXZhciB0PWEuaW8uX21hcFsiaW86MCJdfHxuZXcgYS5JTzthLm1peChhLklPLnByb3RvdHlwZSx7X3E6bmV3IGEuUXVldWUsX3FBY3RpdmVJZDpudWxsLF9xSW5pdDohMSxfcVN0YXRlOjEsX3FTaGlmdDpmdW5jdGlvbigpe3ZhciBmPXRoaXMuX3EubmV4dCgpO3RoaXMuX3FBY3RpdmVJZD1mLmlkO3RoaXMuX3FTdGF0ZT0wO3RoaXMuc2VuZChmLnVyaSxmLmNmZyxmLmlkKX0scXVldWU6ZnVuY3Rpb24oZixkKXt2YXIgYz10aGlzLGI9e3VyaTpmLGNmZzpkLGlkOnRoaXMuX2lkKyt9O2MuX3FJbml0fHwoYS5vbigiaW86Y29tcGxldGUiLGZ1bmN0aW9uKGcsZSl7Yy5fcU5leHQoZyl9LGMpLGMuX3FJbml0PSEwKTtjLl9xLmFkZChiKTsxPT09Yy5fcVN0YXRlJiZjLl9xU2hpZnQoKTtyZXR1cm4gYn0sX3FOZXh0OmZ1bmN0aW9uKGYpe3RoaXMuX3FTdGF0ZT0KMTt0aGlzLl9xQWN0aXZlSWQ9PT1mJiYwPHRoaXMuX3Euc2l6ZSgpJiZ0aGlzLl9xU2hpZnQoKX0scVByb21vdGU6ZnVuY3Rpb24oZil7dGhpcy5fcS5wcm9tb3RlKGYpfSxxUmVtb3ZlOmZ1bmN0aW9uKGYpe3RoaXMuX3EucmVtb3ZlKGYpfSxxRW1wdHk6ZnVuY3Rpb24oKXt0aGlzLl9xPW5ldyBhLlF1ZXVlfSxxU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9xU3RhdGU9MTswPHRoaXMuX3Euc2l6ZSgpJiZ0aGlzLl9xU2hpZnQoKX0scVN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9xU3RhdGU9MH0scVNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcS5zaXplKCl9fSwhMCk7cS5zdGFydD1mdW5jdGlvbigpe3QucVN0YXJ0KCl9O3Euc3RvcD1mdW5jdGlvbigpe3QucVN0b3AoKX07cS5wcm9tb3RlPWZ1bmN0aW9uKGYpe3QucVByb21vdGUoZil9O3EucmVtb3ZlPWZ1bmN0aW9uKGYpe3QucVJlbW92ZShmKX07cS5zaXplPWZ1bmN0aW9uKCl7dC5xU2l6ZSgpfTtxLmVtcHR5PWZ1bmN0aW9uKCl7dC5xRW1wdHkoKX07CmEuaW8ucXVldWU9cX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiaW8tYmFzZSIsInF1ZXVlLXByb21vdGUiXX0pOwpZVUkuYWRkKCJpby11cGxvYWQtaWZyYW1lIixmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEoZSxrLG0pe3ZhciBwPWEuTm9kZS5jcmVhdGUoJ1x4M2NpZnJhbWUgaWRceDNkImlvX2lmcmFtZScrZS5pZCsnIiBuYW1lXHgzZCJpb19pZnJhbWUnK2UuaWQrJyIgL1x4M2UnKTtwLl9ub2RlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cC5fbm9kZS5zdHlsZS50b3A9Ii0xMDAwcHgiO3AuX25vZGUuc3R5bGUubGVmdD0iLTEwMDBweCI7YS5vbmUoImJvZHkiKS5hcHBlbmRDaGlsZChwKTthLm9uKCJsb2FkIixmdW5jdGlvbigpe20uX3VwbG9hZENvbXBsZXRlKGUsayl9LCIjaW9faWZyYW1lIitlLmlkKX1mdW5jdGlvbiB0KGUpe2EuRXZlbnQucHVyZ2VFbGVtZW50KCIjaW9faWZyYW1lIitlLCExKTthLm9uZSgiYm9keSIpLnJlbW92ZUNoaWxkKGEub25lKCIjaW9faWZyYW1lIitlKSl9dmFyIGY9YS5jb25maWcud2luLGQ9YS5jb25maWcuZG9jLGM9ZC5kb2N1bWVudE1vZGUmJjg8PWQuZG9jdW1lbnRNb2RlLApiPWRlY29kZVVSSUNvbXBvbmVudCxnPWEuSU8ucHJvdG90eXBlLmVuZDthLm1peChhLklPLnByb3RvdHlwZSx7X2FkZERhdGE6ZnVuY3Rpb24oZSxrKXthLkxhbmcuaXNPYmplY3QoaykmJihrPWEuUXVlcnlTdHJpbmcuc3RyaW5naWZ5KGspKTt2YXIgbT1bXSxwPWsuc3BsaXQoIlx4M2QiKSxzLGw7cz0wO2ZvcihsPXAubGVuZ3RoLTE7czxsO3MrKyl7dmFyIGg9YihwW3NdLnN1YnN0cmluZyhwW3NdLmxhc3RJbmRleE9mKCJceDI2IikrMSkpO2UuZWxlbWVudHNbaF18fChtW3NdPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxtW3NdLnR5cGU9ImhpZGRlbiIsbVtzXS5uYW1lPWgsbVtzXS52YWx1ZT1zKzE9PT1sP2IocFtzKzFdKTpiKHBbcysxXS5zdWJzdHJpbmcoMCxwW3MrMV0ubGFzdEluZGV4T2YoIlx4MjYiKSkpLGUuYXBwZW5kQ2hpbGQobVtzXSkpfXJldHVybiBtfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLGspe3ZhciBtLHA7bT0wO2ZvcihwPWsubGVuZ3RoO208cDttKyspZS5yZW1vdmVDaGlsZChrW21dKX0sCl9zZXRBdHRyczpmdW5jdGlvbihlLGssbSl7dGhpcy5fb3JpZ2luYWxGb3JtQXR0cnM9e2FjdGlvbjplLmdldEF0dHJpYnV0ZSgiYWN0aW9uIiksdGFyZ2V0OmUuZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKX07ZS5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsbSk7ZS5zZXRBdHRyaWJ1dGUoIm1ldGhvZCIsIlBPU1QiKTtlLnNldEF0dHJpYnV0ZSgidGFyZ2V0IiwiaW9faWZyYW1lIitrKTtlLnNldEF0dHJpYnV0ZShhLlVBLmllJiYhYz8iZW5jb2RpbmciOiJlbmN0eXBlIiwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpfSxfcmVzZXRBdHRyczpmdW5jdGlvbihlLGspe2EuT2JqZWN0LmVhY2goayxmdW5jdGlvbihtLHApe20/ZS5zZXRBdHRyaWJ1dGUocCxtKTplLnJlbW92ZUF0dHJpYnV0ZShwKX0pfSxfc3RhcnRVcGxvYWRUaW1lb3V0OmZ1bmN0aW9uKGUsayl7dmFyIG09dGhpczttLl90aW1lb3V0W2UuaWRdPWYuc2V0VGltZW91dChmdW5jdGlvbigpe2Uuc3RhdHVzPTA7ZS5zdGF0dXNUZXh0PSJ0aW1lb3V0IjsKbS5jb21wbGV0ZShlLGspO20uZW5kKGUsayl9LGsudGltZW91dCl9LF9jbGVhclVwbG9hZFRpbWVvdXQ6ZnVuY3Rpb24oZSl7Zi5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFtlXSk7ZGVsZXRlIHRoaXMuX3RpbWVvdXRbZV19LF91cGxvYWRDb21wbGV0ZTpmdW5jdGlvbihlLGspe3ZhciBtPWEub25lKCIjaW9faWZyYW1lIitlLmlkKS5nZXQoImNvbnRlbnRXaW5kb3cuZG9jdW1lbnQiKSxwPW0ub25lKCJib2R5IikscztrLnRpbWVvdXQmJnRoaXMuX2NsZWFyVXBsb2FkVGltZW91dChlLmlkKTt0cnl7cD8ocz1wLm9uZSgicHJlOmZpcnN0LWNoaWxkIiksZS5jLnJlc3BvbnNlVGV4dD1zP3MuZ2V0KCJ0ZXh0Iik6cC5nZXQoInRleHQiKSk6ZS5jLnJlc3BvbnNlWE1MPW0uX25vZGV9Y2F0Y2gobCl7ZS5lPSJ1cGxvYWQgZmFpbHVyZSJ9dGhpcy5jb21wbGV0ZShlLGspO3RoaXMuZW5kKGUsayk7Zi5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChlLmlkKX0sMCl9LF91cGxvYWQ6ZnVuY3Rpb24oZSwKayxtKXt2YXIgcD10aGlzLHM9InN0cmluZyI9PT10eXBlb2YgbS5mb3JtLmlkP2QuZ2V0RWxlbWVudEJ5SWQobS5mb3JtLmlkKTphLk5vZGUuZ2V0RE9NTm9kZShtLmZvcm0uaWQpLGw7cC5fc2V0QXR0cnMocyxlLmlkLGspO20uZGF0YSYmKGw9cC5fYWRkRGF0YShzLG0uZGF0YSkpO20udGltZW91dCYmcC5fc3RhcnRVcGxvYWRUaW1lb3V0KGUsbSk7cy5zdWJtaXQoKTtwLnN0YXJ0KGUsbSk7aWYobS5kYXRhKXZhciBoPXAub24oImlvOmVuZCIsZnVuY3Rpb24odSl7aC5kZXRhY2goKTtwLl9yZW1vdmVEYXRhKHMsbCl9KTtyZXR1cm57aWQ6ZS5pZCxhYm9ydDpmdW5jdGlvbigpe2Uuc3RhdHVzPTA7ZS5zdGF0dXNUZXh0PSJhYm9ydCI7aWYoYS5vbmUoIiNpb19pZnJhbWUiK2UuaWQpKXQoZS5pZCkscC5jb21wbGV0ZShlLG0pLHAuZW5kKGUsbSk7ZWxzZSByZXR1cm4hMX0saXNJblByb2dyZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIGEub25lKCIjaW9faWZyYW1lIitlLmlkKT8hMDohMX0sCmlvOnB9fSx1cGxvYWQ6ZnVuY3Rpb24oZSxrLG0pe3EoZSxtLHRoaXMpO3JldHVybiB0aGlzLl91cGxvYWQoZSxrLG0pfSxlbmQ6ZnVuY3Rpb24oZSxrKXt2YXIgbTtrJiYobT1rLmZvcm0pJiZtLnVwbG9hZCYmKG09InN0cmluZyI9PT10eXBlb2YgbS5pZD9kLmdldEVsZW1lbnRCeUlkKG0uaWQpOm0uaWQpJiZ0aGlzLl9yZXNldEF0dHJzKG0sdGhpcy5fb3JpZ2luYWxGb3JtQXR0cnMpO3JldHVybiBnLmNhbGwodGhpcyxlLGspfX0sITApfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJpby1iYXNlIiwibm9kZS1iYXNlIl19KTsKWVVJLmFkZCgiaW8teGRyIixmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEoayxtLHApe2s9J1x4M2NvYmplY3QgaWRceDNkImlvX3N3ZiIgdHlwZVx4M2QiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giIGRhdGFceDNkIicraysnIiB3aWR0aFx4M2QiMCIgaGVpZ2h0XHgzZCIwIlx4M2VceDNjcGFyYW0gbmFtZVx4M2QibW92aWUiIHZhbHVlXHgzZCInK2srJyJceDNlXHgzY3BhcmFtIG5hbWVceDNkIkZsYXNoVmFycyIgdmFsdWVceDNkInlpZFx4M2QnK20rIlx4MjZ1aWRceDNkIitwKyciXHgzZVx4M2NwYXJhbSBuYW1lXHgzZCJhbGxvd1NjcmlwdEFjY2VzcyIgdmFsdWVceDNkImFsd2F5cyJceDNlXHgzYy9vYmplY3RceDNlJzttPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5ib2R5LmFwcGVuZENoaWxkKG0pO20uaW5uZXJIVE1MPWt9ZnVuY3Rpb24gdChrLG0scCl7ImZsYXNoIj09PW0mJihrLmMucmVzcG9uc2VUZXh0PWRlY29kZVVSSShrLmMucmVzcG9uc2VUZXh0KSk7InhtbCI9PT0KcCYmKGsuYy5yZXNwb25zZVhNTD1hLkRhdGFUeXBlLlhNTC5wYXJzZShrLmMucmVzcG9uc2VUZXh0KSk7cmV0dXJuIGt9dmFyIGY9YS5wdWJsaXNoKCJpbzp4ZHJSZWFkeSIse2ZpcmVPbmNlOiEwfSksZD17fSxjPXt9LGI9YS5jb25maWcuZG9jLGc9YS5jb25maWcud2luLGU9ZyYmZy5YRG9tYWluUmVxdWVzdDthLm1peChhLklPLnByb3RvdHlwZSx7X3RyYW5zcG9ydDp7fSxfaWVFdnQ6ZnVuY3Rpb24oayxtKXt2YXIgcD10aGlzLHM9ay5pZDtrLmMub25wcm9ncmVzcz1mdW5jdGlvbigpe2Nbc109M307ay5jLm9ubG9hZD1mdW5jdGlvbigpe2Nbc109NDtwLnhkclJlc3BvbnNlKCJzdWNjZXNzIixrLG0pfTtrLmMub25lcnJvcj1mdW5jdGlvbigpe2Nbc109NDtwLnhkclJlc3BvbnNlKCJmYWlsdXJlIixrLG0pfTtrLmMub250aW1lb3V0PWZ1bmN0aW9uKCl7Y1tzXT00O3AueGRyUmVzcG9uc2UoInRpbWVvdXQiLGssbSl9O2suYy50aW1lb3V0PW0udGltZW91dHx8MH0seGRyOmZ1bmN0aW9uKGssCm0scCl7dmFyIHM9dGhpczsiZmxhc2giPT09cC54ZHIudXNlPyhkW20uaWRdPXAsZy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e20uYy5zZW5kKGsse2lkOm0uaWQsdWlkOm0udWlkLG1ldGhvZDpwLm1ldGhvZCxkYXRhOnAuZGF0YSxoZWFkZXJzOnAuaGVhZGVyc30pfWNhdGNoKGwpe3MueGRyUmVzcG9uc2UoInRyYW5zcG9ydCBlcnJvciIsbSxwKSxkZWxldGUgZFttLmlkXX19LGEuaW8ueGRyLmRlbGF5KSk6ZT8ocy5faWVFdnQobSxwKSxtLmMub3BlbihwLm1ldGhvZHx8IkdFVCIsayksc2V0VGltZW91dChmdW5jdGlvbigpe20uYy5zZW5kKHAuZGF0YSl9LDApKTptLmMuc2VuZChrLG0scCk7cmV0dXJue2lkOm0uaWQsYWJvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5jP20uYy5hYm9ydChtLmlkLHApOiExfSxpc0luUHJvZ3Jlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gbS5jP2U/NCE9PWNbbS5pZC5pZF06bS5pZC5jLmlzSW5Qcm9ncmVzcyhtLmlkLmlkKTohMX0saW86c319LHhkclJlc3BvbnNlOmZ1bmN0aW9uKGssCm0scCl7cD1kW20uaWRdP2RbbS5pZF06cDt2YXIgcz1lP2M6ZCxsPXAueGRyLnVzZSxoPXAueGRyLmRhdGFUeXBlO3N3aXRjaChrKXtjYXNlICJzdGFydCI6dGhpcy5zdGFydChtLHApO2JyZWFrO2Nhc2UgInN1Y2Nlc3MiOnRoaXMuc3VjY2Vzcyh0KG0sbCxoKSxwKTtkZWxldGUgc1ttLmlkXTticmVhaztjYXNlICJ0aW1lb3V0IjpjYXNlICJhYm9ydCI6Y2FzZSAidHJhbnNwb3J0IGVycm9yIjptLmM9e3N0YXR1czowLHN0YXR1c1RleHQ6a307Y2FzZSAiZmFpbHVyZSI6dGhpcy5mYWlsdXJlKHQobSxsLGgpLHApLGRlbGV0ZSBzW20uaWRdfX0sX3hkclJlYWR5OmZ1bmN0aW9uKGssbSl7YS5maXJlKGYsayxtKX0sdHJhbnNwb3J0OmZ1bmN0aW9uKGspeyJmbGFzaCI9PT1rLmlkJiYocShhLlVBLmllP2suc3JjKyI/ZFx4M2QiKyhuZXcgRGF0ZSkudmFsdWVPZigpLnRvU3RyaW5nKCk6ay5zcmMsYS5pZCxrLnVpZCksYS5JTy50cmFuc3BvcnRzLmZsYXNoPWZ1bmN0aW9uKCl7cmV0dXJuIGIuZ2V0RWxlbWVudEJ5SWQoImlvX3N3ZiIpfSl9fSk7CmEuaW8ueGRyUmVhZHk9ZnVuY3Rpb24oayxtKXt2YXIgcD1hLmlvLl9tYXBbbV07YS5pby54ZHIuZGVsYXk9MDtwLl94ZHJSZWFkeS5hcHBseShwLFtrLG1dKX07YS5pby54ZHJSZXNwb25zZT1mdW5jdGlvbihrLG0scCl7dmFyIHM9YS5pby5fbWFwW20udWlkXTtzLnhkclJlc3BvbnNlLmFwcGx5KHMsW2ssbSxwXSl9O2EuaW8udHJhbnNwb3J0PWZ1bmN0aW9uKGspe3ZhciBtPWEuaW8uX21hcFsiaW86MCJdfHxuZXcgYS5JTztrLnVpZD1tLl91aWQ7bS50cmFuc3BvcnQuYXBwbHkobSxba10pfTthLmlvLnhkcj17ZGVsYXk6MTAwfX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiaW8tYmFzZSIsImRhdGF0eXBlLXhtbC1wYXJzZSJdfSk7CllVSS5hZGQoImpzb24tcGFyc2UiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5jb25maWcuZ2xvYmFsLkpTT047YS5uYW1lc3BhY2UoIkpTT04iKS5wYXJzZT1mdW5jdGlvbih0LGYsZCl7cmV0dXJuIHEucGFyc2UoInN0cmluZyI9PT10eXBlb2YgdD90OnQrIiIsZixkKX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInl1aS1iYXNlIl19KTsKWVVJLmFkZCgianNvbi1zdHJpbmdpZnkiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5jb25maWcuZ2xvYmFsLkpTT047YS5taXgoYS5uYW1lc3BhY2UoIkpTT04iKSx7ZGF0ZVRvU3RyaW5nOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGYoZCl7cmV0dXJuIDEwPmQ/IjAiK2Q6ZH1yZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpKyItIitmKHQuZ2V0VVRDTW9udGgoKSsxKSsiLSIrZih0LmdldFVUQ0RhdGUoKSkrIlQiK2YodC5nZXRVVENIb3VycygpKSsiOiIrZih0LmdldFVUQ01pbnV0ZXMoKSkrIjoiK2YodC5nZXRVVENTZWNvbmRzKCkpKyJaIn0sc3RyaW5naWZ5OmZ1bmN0aW9uKCl7cmV0dXJuIHEuc3RyaW5naWZ5LmFwcGx5KHEsYXJndW1lbnRzKX0sY2hhckNhY2hlVGhyZXNob2xkOjEwMH0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoIm5vZGUtYmFzZSIsZnVuY3Rpb24oYSxFKXt2YXIgcT1bImhhc0NsYXNzIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInJlcGxhY2VDbGFzcyIsInRvZ2dsZUNsYXNzIl07YS5Ob2RlLmltcG9ydE1ldGhvZChhLkRPTSxxKTthLk5vZGVMaXN0LmltcG9ydE1ldGhvZChhLk5vZGUucHJvdG90eXBlLHEpO3ZhciB0PWEuTm9kZSxmPWEuRE9NO3QuY3JlYXRlPWZ1bmN0aW9uKGQsYyl7YyYmYy5fbm9kZSYmKGM9Yy5fbm9kZSk7cmV0dXJuIGEub25lKGYuY3JlYXRlKGQsYykpfTthLm1peCh0LnByb3RvdHlwZSx7Y3JlYXRlOnQuY3JlYXRlLGluc2VydDpmdW5jdGlvbihkLGMpe3RoaXMuX2luc2VydChkLGMpO3JldHVybiB0aGlzfSxfaW5zZXJ0OmZ1bmN0aW9uKGQsYyl7dmFyIGI9dGhpcy5fbm9kZSxnPW51bGw7Im51bWJlciI9PXR5cGVvZiBjP2M9dGhpcy5fbm9kZS5jaGlsZE5vZGVzW2NdOmMmJmMuX25vZGUmJihjPWMuX25vZGUpO2QmJiJzdHJpbmciIT10eXBlb2YgZCYmCihkPWQuX25vZGV8fGQuX25vZGVzfHxkKTtyZXR1cm4gZz1mLmFkZEhUTUwoYixkLGMpfSxwcmVwZW5kOmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLmluc2VydChkLDApfSxhcHBlbmQ6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuaW5zZXJ0KGQsbnVsbCl9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGQpe3JldHVybiB0LnNjcnViVmFsKHRoaXMuX2luc2VydChkKSl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihkLGMpe3JldHVybiBhLk5vZGUuc2NydWJWYWwodGhpcy5faW5zZXJ0KGQsYykpfSxhcHBlbmRUbzpmdW5jdGlvbihkKXthLm9uZShkKS5hcHBlbmQodGhpcyk7cmV0dXJuIHRoaXN9LHNldENvbnRlbnQ6ZnVuY3Rpb24oZCl7dGhpcy5faW5zZXJ0KGQsInJlcGxhY2UiKTtyZXR1cm4gdGhpc30sZ2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciBkPXRoaXM7MTE9PT1kLl9ub2RlLm5vZGVUeXBlJiYoZD1kLmNyZWF0ZSgiXHgzY2Rpdi9ceDNlIikuYXBwZW5kKGQuY2xvbmVOb2RlKCEwKSkpOwpyZXR1cm4gZC5nZXQoImlubmVySFRNTCIpfX0pO2EuTm9kZS5wcm90b3R5cGUuc2V0SFRNTD1hLk5vZGUucHJvdG90eXBlLnNldENvbnRlbnQ7YS5Ob2RlLnByb3RvdHlwZS5nZXRIVE1MPWEuTm9kZS5wcm90b3R5cGUuZ2V0Q29udGVudDthLk5vZGVMaXN0LmltcG9ydE1ldGhvZChhLk5vZGUucHJvdG90eXBlLCJhcHBlbmQgaW5zZXJ0IGFwcGVuZENoaWxkIGluc2VydEJlZm9yZSBwcmVwZW5kIHNldENvbnRlbnQgZ2V0Q29udGVudCBzZXRIVE1MIGdldEhUTUwiLnNwbGl0KCIgIikpO3Q9YS5Ob2RlO2Y9YS5ET007dC5BVFRSUz17dGV4dDp7Z2V0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGYuZ2V0VGV4dCh0aGlzLl9ub2RlKX0sc2V0dGVyOmZ1bmN0aW9uKGQpe2Yuc2V0VGV4dCh0aGlzLl9ub2RlLGQpO3JldHVybiBkfX0sImZvciI6e2dldHRlcjpmdW5jdGlvbigpe3JldHVybiBmLmdldEF0dHJpYnV0ZSh0aGlzLl9ub2RlLCJmb3IiKX0sc2V0dGVyOmZ1bmN0aW9uKGQpe2Yuc2V0QXR0cmlidXRlKHRoaXMuX25vZGUsCiJmb3IiLGQpO3JldHVybiBkfX0sb3B0aW9uczp7Z2V0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9wdGlvbiIpfX0sY2hpbGRyZW46e2dldHRlcjpmdW5jdGlvbigpe3ZhciBkPXRoaXMuX25vZGUsYz1kLmNoaWxkcmVuLGIsZztpZighY3x8YS5VQS5pZSYmOT5hLlVBLmllKWZvcihkPWQuY2hpbGROb2RlcyxjPVtdLGI9MCxnPWQubGVuZ3RoO2I8ZzsrK2IpZFtiXS50YWdOYW1lJiYxPT09ZFtiXS5ub2RlVHlwZSYmKGNbYy5sZW5ndGhdPWRbYl0pO3JldHVybiBhLmFsbChjKX19LHZhbHVlOntnZXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZi5nZXRWYWx1ZSh0aGlzLl9ub2RlKX0sc2V0dGVyOmZ1bmN0aW9uKGQpe2Yuc2V0VmFsdWUodGhpcy5fbm9kZSxkKTtyZXR1cm4gZH19fTthLk5vZGUuaW1wb3J0TWV0aG9kKGEuRE9NLFsic2V0QXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIl0pO3Q9YS5Ob2RlO3E9YS5Ob2RlTGlzdDt0LkRPTV9FVkVOVFM9CnthYm9ydDoxLGJlZm9yZXVubG9hZDoxLGJsdXI6MSxjaGFuZ2U6MSxjbGljazoxLGNsb3NlOjEsY29tbWFuZDoxLGNvbnRleHRtZW51OjEsY29weToxLGN1dDoxLGRibGNsaWNrOjEsRE9NTW91c2VTY3JvbGw6MSxkcmFnOjEsZHJhZ3N0YXJ0OjEsZHJhZ2VudGVyOjEsZHJhZ292ZXI6MSxkcmFnbGVhdmU6MSxkcmFnZW5kOjEsZHJvcDoxLGVycm9yOjEsZm9jdXM6MSxrZXk6MSxrZXlkb3duOjEsa2V5cHJlc3M6MSxrZXl1cDoxLGxvYWQ6MSxtZXNzYWdlOjEsbW91c2Vkb3duOjEsbW91c2VlbnRlcjoxLG1vdXNlbGVhdmU6MSxtb3VzZW1vdmU6MSxtb3VzZW11bHRpd2hlZWw6MSxtb3VzZW91dDoxLG1vdXNlb3ZlcjoxLG1vdXNldXA6MSxtb3VzZXdoZWVsOjEsb3JpZW50YXRpb25jaGFuZ2U6MSxwYXN0ZToxLHJlc2V0OjEscmVzaXplOjEsc2VsZWN0OjEsc2VsZWN0c3RhcnQ6MSxzdWJtaXQ6MSxzY3JvbGw6MSx0ZXh0SW5wdXQ6MSx1bmxvYWQ6MSxpbnZhbGlkOjF9O2EubWl4KHQuRE9NX0VWRU5UUywKYS5FbnYuZXZ0LnBsdWdpbnMpO2EuYXVnbWVudCh0LGEuRXZlbnRUYXJnZXQpO2EubWl4KHQucHJvdG90eXBlLHtwdXJnZTpmdW5jdGlvbihkLGMpe2EuRXZlbnQucHVyZ2VFbGVtZW50KHRoaXMuX25vZGUsZCxjKTtyZXR1cm4gdGhpc319KTthLm1peChhLk5vZGVMaXN0LnByb3RvdHlwZSx7X3ByZXBFdnRBcmdzOmZ1bmN0aW9uKGQsYyxiKXt2YXIgZz1hLkFycmF5KGFyZ3VtZW50cywwLCEwKTsyPmcubGVuZ3RoP2dbMl09dGhpcy5fbm9kZXM6Zy5zcGxpY2UoMiwwLHRoaXMuX25vZGVzKTtnWzNdPWJ8fHRoaXM7cmV0dXJuIGd9LG9uOmZ1bmN0aW9uKGQsYyxiKXtyZXR1cm4gYS5vbi5hcHBseShhLHRoaXMuX3ByZXBFdnRBcmdzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LG9uY2U6ZnVuY3Rpb24oZCxjLGIpe3JldHVybiBhLm9uY2UuYXBwbHkoYSx0aGlzLl9wcmVwRXZ0QXJncy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxhZnRlcjpmdW5jdGlvbihkLGMsYil7cmV0dXJuIGEuYWZ0ZXIuYXBwbHkoYSwKdGhpcy5fcHJlcEV2dEFyZ3MuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sb25jZUFmdGVyOmZ1bmN0aW9uKGQsYyxiKXtyZXR1cm4gYS5vbmNlQWZ0ZXIuYXBwbHkoYSx0aGlzLl9wcmVwRXZ0QXJncy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0pO3EuaW1wb3J0TWV0aG9kKGEuTm9kZS5wcm90b3R5cGUsWyJkZXRhY2giLCJkZXRhY2hBbGwiXSk7YS5taXgoYS5Ob2RlLkFUVFJTLHtvZmZzZXRIZWlnaHQ6e3NldHRlcjpmdW5jdGlvbihkKXthLkRPTS5zZXRIZWlnaHQodGhpcy5fbm9kZSxkKTtyZXR1cm4gZH0sZ2V0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vZGUub2Zmc2V0SGVpZ2h0fX0sb2Zmc2V0V2lkdGg6e3NldHRlcjpmdW5jdGlvbihkKXthLkRPTS5zZXRXaWR0aCh0aGlzLl9ub2RlLGQpO3JldHVybiBkfSxnZXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9kZS5vZmZzZXRXaWR0aH19fSk7YS5taXgoYS5Ob2RlLnByb3RvdHlwZSx7c2l6ZVRvOmZ1bmN0aW9uKGQsCmMpe3ZhciBiOzI+YXJndW1lbnRzLmxlbmd0aCYmKGI9YS5vbmUoZCksZD1iLmdldCgib2Zmc2V0V2lkdGgiKSxjPWIuZ2V0KCJvZmZzZXRIZWlnaHQiKSk7dGhpcy5zZXRBdHRycyh7b2Zmc2V0V2lkdGg6ZCxvZmZzZXRIZWlnaHQ6Y30pfX0pO2EuY29uZmlnLmRvYy5kb2N1bWVudEVsZW1lbnQuaGFzQXR0cmlidXRlfHwoYS5Ob2RlLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24oZCl7cmV0dXJuInZhbHVlIj09PWQmJiIiIT09dGhpcy5nZXQoInZhbHVlIik/ITA6ISghdGhpcy5fbm9kZS5hdHRyaWJ1dGVzW2RdfHwhdGhpcy5fbm9kZS5hdHRyaWJ1dGVzW2RdLnNwZWNpZmllZCl9KTthLk5vZGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dHJ5e3RoaXMuX25vZGUuZm9jdXMoKX1jYXRjaChkKXt9cmV0dXJuIHRoaXN9O2EuTm9kZS5BVFRSUy50eXBlPXtzZXR0ZXI6ZnVuY3Rpb24oZCl7aWYoImhpZGRlbiI9PT1kKXRyeXt0aGlzLl9ub2RlLnR5cGU9ImhpZGRlbiJ9Y2F0Y2goYyl7dGhpcy5fbm9kZS5zdHlsZS5kaXNwbGF5PQoibm9uZSIsdGhpcy5faW5wdXRUeXBlPSJoaWRkZW4ifWVsc2UgdHJ5e3RoaXMuX25vZGUudHlwZT1kfWNhdGNoKGIpe31yZXR1cm4gZH0sZ2V0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lucHV0VHlwZXx8dGhpcy5fbm9kZS50eXBlfSxfYnlwYXNzUHJveHk6ITB9O2EuY29uZmlnLmRvYy5jcmVhdGVFbGVtZW50KCJmb3JtIikuZWxlbWVudHMubm9kZVR5cGUmJihhLk5vZGUuQVRUUlMuZWxlbWVudHM9e2dldHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFsbCgiaW5wdXQsIHRleHRhcmVhLCBidXR0b24sIHNlbGVjdCIpfX0pO2EubWl4KGEuTm9kZS5wcm90b3R5cGUse19pbml0RGF0YTpmdW5jdGlvbigpeyJfZGF0YSJpbiB0aGlzfHwodGhpcy5fZGF0YT17fSl9LGdldERhdGE6ZnVuY3Rpb24oZCl7dGhpcy5faW5pdERhdGEoKTt2YXIgYz10aGlzLl9kYXRhLGI9Yzthcmd1bWVudHMubGVuZ3RoP2I9ZCBpbiBjP2NbZF06dGhpcy5fZ2V0RGF0YUF0dHJpYnV0ZShkKToib2JqZWN0Ij09CnR5cGVvZiBjJiZudWxsIT09YyYmKGI9e30sYS5PYmplY3QuZWFjaChjLGZ1bmN0aW9uKGcsZSl7YltlXT1nfSksYj10aGlzLl9nZXREYXRhQXR0cmlidXRlcyhiKSk7cmV0dXJuIGJ9LF9nZXREYXRhQXR0cmlidXRlczpmdW5jdGlvbihkKXtkPWR8fHt9O2Zvcih2YXIgYz0wLGI9dGhpcy5fbm9kZS5hdHRyaWJ1dGVzLGc9Yi5sZW5ndGgsZT10aGlzLkRBVEFfUFJFRklYLGs9ZS5sZW5ndGgsbTtjPGc7KW09YltjXS5uYW1lLDA9PT1tLmluZGV4T2YoZSkmJihtPW0uc3Vic3RyKGspLG0gaW4gZHx8KGRbbV09dGhpcy5fZ2V0RGF0YUF0dHJpYnV0ZShtKSkpLGMrPTE7cmV0dXJuIGR9LF9nZXREYXRhQXR0cmlidXRlOmZ1bmN0aW9uKGQpe2Q9dGhpcy5EQVRBX1BSRUZJWCtkO3ZhciBjPXRoaXMuX25vZGUuYXR0cmlidXRlcztyZXR1cm4gYyYmY1tkXSYmY1tkXS52YWx1ZX0sc2V0RGF0YTpmdW5jdGlvbihkLGMpe3RoaXMuX2luaXREYXRhKCk7MTxhcmd1bWVudHMubGVuZ3RoP3RoaXMuX2RhdGFbZF09CmM6dGhpcy5fZGF0YT1kO3JldHVybiB0aGlzfSxjbGVhckRhdGE6ZnVuY3Rpb24oZCl7Il9kYXRhImluIHRoaXMmJigidW5kZWZpbmVkIiE9dHlwZW9mIGQ/ZGVsZXRlIHRoaXMuX2RhdGFbZF06ZGVsZXRlIHRoaXMuX2RhdGEpO3JldHVybiB0aGlzfX0pO2EubWl4KGEuTm9kZUxpc3QucHJvdG90eXBlLHtnZXREYXRhOmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLl9pbnZva2UoImdldERhdGEiLGFyZ3VtZW50cy5sZW5ndGg/W2RdOltdLCEwKX0sc2V0RGF0YTpmdW5jdGlvbihkLGMpe3JldHVybiB0aGlzLl9pbnZva2UoInNldERhdGEiLDE8YXJndW1lbnRzLmxlbmd0aD9bZCxjXTpbZF0pfSxjbGVhckRhdGE6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuX2ludm9rZSgiY2xlYXJEYXRhIixbZF0pfX0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJldmVudC1iYXNlIiwibm9kZS1jb3JlIiwiZG9tLWJhc2UiLCJkb20tc3R5bGUiXX0pOwpZVUkuYWRkKCJub2RlLWNvcmUiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9QXJyYXkucHJvdG90eXBlLnNsaWNlLHQ9YS5ET00sZj1mdW5jdGlvbihlKXtpZighdGhpcy5nZXRET01Ob2RlJiYhYS5pbnN0YW5jZU9mKHRoaXMsZikpcmV0dXJuIG5ldyBmKGUpO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9Zi5fZnJvbVN0cmluZyhlKSwhZSkpcmV0dXJuIG51bGw7dmFyIGs9OSE9PWUubm9kZVR5cGU/ZS51bmlxdWVJRDplLl95dWlkO2smJmYuX2luc3RhbmNlc1trXSYmZi5faW5zdGFuY2VzW2tdLl9ub2RlIT09ZSYmKGUuX3l1aWQ9bnVsbCk7KGs9a3x8YS5zdGFtcChlKSl8fChrPWEuZ3VpZCgpKTt0aGlzLl95dWlkPWs7dGhpcy5fc3RhdGVQcm94eT10aGlzLl9ub2RlPWU7dGhpcy5faW5pdFBsdWdpbnMmJnRoaXMuX2luaXRQbHVnaW5zKCl9LGQ9ZnVuY3Rpb24oZSl7dmFyIGs9bnVsbDtlJiYoaz0ic3RyaW5nIj09dHlwZW9mIGU/ZnVuY3Rpb24obSl7cmV0dXJuIGEuU2VsZWN0b3IudGVzdChtLAplKX06ZnVuY3Rpb24obSl7cmV0dXJuIGUoYS5vbmUobSkpfSk7cmV0dXJuIGt9O2YuQVRUUlM9e307Zi5ET01fRVZFTlRTPXt9O2YuX2Zyb21TdHJpbmc9ZnVuY3Rpb24oZSl7ZSYmKGU9MD09PWUuaW5kZXhPZigiZG9jIik/YS5jb25maWcuZG9jOjA9PT1lLmluZGV4T2YoIndpbiIpP2EuY29uZmlnLndpbjphLlNlbGVjdG9yLnF1ZXJ5KGUsbnVsbCwhMCkpO3JldHVybiBlfHxudWxsfTtmLk5BTUU9Im5vZGUiO2YucmVfYXJpYT0vXig/OnJvbGUkfGFyaWEtKS87Zi5TSE9XX1RSQU5TSVRJT049ImZhZGVJbiI7Zi5ISURFX1RSQU5TSVRJT049ImZhZGVPdXQiO2YuX2luc3RhbmNlcz17fTtmLmdldERPTU5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZS5ub2RlVHlwZT9lOmUuX25vZGV8fG51bGw6bnVsbH07Zi5zY3J1YlZhbD1mdW5jdGlvbihlLGspe2lmKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpaWYoIm5vZGVUeXBlImluIGV8fHQuaXNXaW5kb3coZSkpZT0KYS5vbmUoZSk7ZWxzZSBpZihlLml0ZW0mJiFlLl9ub2Rlc3x8ZVswXSYmZVswXS5ub2RlVHlwZSllPWEuYWxsKGUpfWVsc2UidW5kZWZpbmVkIj09PXR5cGVvZiBlP2U9azpudWxsPT09ZSYmKGU9bnVsbCk7cmV0dXJuIGV9O2YuYWRkTWV0aG9kPWZ1bmN0aW9uKGUsayxtKXtlJiZrJiYiZnVuY3Rpb24iPT10eXBlb2YgayYmKGYucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7dmFyIHA9cS5jYWxsKGFyZ3VtZW50cyk7cFswXSYmcFswXS5fbm9kZSYmKHBbMF09cFswXS5fbm9kZSk7cFsxXSYmcFsxXS5fbm9kZSYmKHBbMV09cFsxXS5fbm9kZSk7cC51bnNoaWZ0KHRoaXMuX25vZGUpOyhwPWsuYXBwbHkobXx8dGhpcyxwKSkmJihwPWYuc2NydWJWYWwocCx0aGlzKSk7InVuZGVmaW5lZCIhPXR5cGVvZiBwfHwocD10aGlzKTtyZXR1cm4gcH0pfTtmLmltcG9ydE1ldGhvZD1mdW5jdGlvbihlLGssbSl7InN0cmluZyI9PXR5cGVvZiBrP2YuYWRkTWV0aG9kKG18fGssZVtrXSxlKTphLkFycmF5LmVhY2goaywKZnVuY3Rpb24ocCl7Zi5pbXBvcnRNZXRob2QoZSxwKX0pfTtmLm9uZT1mdW5jdGlvbihlKXt2YXIgaz1udWxsLG07aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZihlPWYuX2Zyb21TdHJpbmcoZSksIWUpcmV0dXJuIG51bGx9ZWxzZSBpZihlLmdldERPTU5vZGUmJmEuaW5zdGFuY2VPZihlLGYpKXJldHVybiBlO2lmKGUubm9kZVR5cGV8fGEuRE9NLmlzV2luZG93KGUpKWlmKGs9ZS51bmlxdWVJRCYmOSE9PWUubm9kZVR5cGU/ZS51bmlxdWVJRDplLl95dWlkLG09KGs9Zi5faW5zdGFuY2VzW2tdKT9rLl9ub2RlOm51bGwsIWt8fG0mJmUhPT1tKWs9bmV3IGYoZSksMTEhPWUubm9kZVR5cGUmJihmLl9pbnN0YW5jZXNbay5feXVpZF09ayl9cmV0dXJuIGt9O2YuREVGQVVMVF9TRVRURVI9ZnVuY3Rpb24oZSxrKXt2YXIgbT10aGlzLl9zdGF0ZVByb3h5Oy0xPGUuaW5kZXhPZigiLiIpPyhlPWUuc3BsaXQoIi4iKSxhLk9iamVjdC5zZXRWYWx1ZShtLGUsaykpOiJ1bmRlZmluZWQiIT0KdHlwZW9mIG1bZV0mJihtW2VdPWspO3JldHVybiBrfTtmLkRFRkFVTFRfR0VUVEVSPWZ1bmN0aW9uKGUpe3ZhciBrPXRoaXMuX3N0YXRlUHJveHksbTtlLmluZGV4T2YmJi0xPGUuaW5kZXhPZigiLiIpP209YS5PYmplY3QuZ2V0VmFsdWUoayxlLnNwbGl0KCIuIikpOiJ1bmRlZmluZWQiIT10eXBlb2Yga1tlXSYmKG09a1tlXSk7cmV0dXJuIG19O2EubWl4KGYucHJvdG90eXBlLHtEQVRBX1BSRUZJWDoiZGF0YS0iLHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feXVpZCsiOiBub3QgYm91bmQgdG8gYSBub2RlIixrPXRoaXMuX25vZGUsbSxwO2smJihtPShlPWsuYXR0cmlidXRlcykmJmUuaWQ/ay5nZXRBdHRyaWJ1dGUoImlkIik6bnVsbCxwPWUmJmUuY2xhc3NOYW1lP2suZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKTpudWxsLGU9ay5ub2RlTmFtZSxtJiYoZSs9IiMiK20pLHAmJihlKz0iLiIrcC5yZXBsYWNlKCIgIiwiLiIpKSxlKz0iICIrdGhpcy5feXVpZCk7cmV0dXJuIGV9LApnZXQ6ZnVuY3Rpb24oZSl7KGU9dGhpcy5fZ2V0QXR0cj90aGlzLl9nZXRBdHRyKGUpOnRoaXMuX2dldChlKSk/ZT1mLnNjcnViVmFsKGUsdGhpcyk6bnVsbD09PWUmJihlPW51bGwpO3JldHVybiBlfSxfZ2V0OmZ1bmN0aW9uKGUpe3ZhciBrPWYuQVRUUlNbZV07cmV0dXJuIGsmJmsuZ2V0dGVyP2suZ2V0dGVyLmNhbGwodGhpcyk6Zi5yZV9hcmlhLnRlc3QoZSk/dGhpcy5fbm9kZS5nZXRBdHRyaWJ1dGUoZSwyKTpmLkRFRkFVTFRfR0VUVEVSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sc2V0OmZ1bmN0aW9uKGUsayl7dmFyIG09Zi5BVFRSU1tlXTt0aGlzLl9zZXRBdHRyP3RoaXMuX3NldEF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpOm0mJm0uc2V0dGVyP20uc2V0dGVyLmNhbGwodGhpcyxrLGUpOmYucmVfYXJpYS50ZXN0KGUpP3RoaXMuX25vZGUuc2V0QXR0cmlidXRlKGUsayk6Zi5ERUZBVUxUX1NFVFRFUi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9LHNldEF0dHJzOmZ1bmN0aW9uKGUpe3RoaXMuX3NldEF0dHJzPwp0aGlzLl9zZXRBdHRycyhlKTphLk9iamVjdC5lYWNoKGUsZnVuY3Rpb24oayxtKXt0aGlzLnNldChtLGspfSx0aGlzKTtyZXR1cm4gdGhpc30sZ2V0QXR0cnM6ZnVuY3Rpb24oZSl7dmFyIGs9e307dGhpcy5fZ2V0QXR0cnM/dGhpcy5fZ2V0QXR0cnMoZSk6YS5BcnJheS5lYWNoKGUsZnVuY3Rpb24obSxwKXtrW21dPXRoaXMuZ2V0KG0pfSx0aGlzKTtyZXR1cm4ga30sY29tcGFyZVRvOmZ1bmN0aW9uKGUpe3ZhciBrPXRoaXMuX25vZGU7ZSYmZS5fbm9kZSYmKGU9ZS5fbm9kZSk7cmV0dXJuIGs9PT1lfSxpbkRvYzpmdW5jdGlvbihlKXt2YXIgaz10aGlzLl9ub2RlO3JldHVybiBrJiYoZT1lP2UuX25vZGV8fGU6ay5vd25lckRvY3VtZW50LGUuZG9jdW1lbnRFbGVtZW50KT90LmNvbnRhaW5zKGUuZG9jdW1lbnRFbGVtZW50LGspOiExfSxnZXRCeUlkOmZ1bmN0aW9uKGUpe3ZhciBrPXRoaXMuX25vZGU7cmV0dXJuIGU9KGU9dC5ieUlkKGUsay5vd25lckRvY3VtZW50KSkmJnQuY29udGFpbnMoaywKZSk/YS5vbmUoZSk6bnVsbH0sYW5jZXN0b3I6ZnVuY3Rpb24oZSxrLG0pezIhPT1hcmd1bWVudHMubGVuZ3RofHwic3RyaW5nIiE9dHlwZW9mIGsmJiJmdW5jdGlvbiIhPXR5cGVvZiBrfHwobT1rKTtyZXR1cm4gYS5vbmUodC5hbmNlc3Rvcih0aGlzLl9ub2RlLGQoZSksayxkKG0pKSl9LGFuY2VzdG9yczpmdW5jdGlvbihlLGssbSl7MiE9PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciIT10eXBlb2YgayYmImZ1bmN0aW9uIiE9dHlwZW9mIGt8fChtPWspO3JldHVybiBhLmFsbCh0LmFuY2VzdG9ycyh0aGlzLl9ub2RlLGQoZSksayxkKG0pKSl9LHByZXZpb3VzOmZ1bmN0aW9uKGUsayl7cmV0dXJuIGEub25lKHQuZWxlbWVudEJ5QXhpcyh0aGlzLl9ub2RlLCJwcmV2aW91c1NpYmxpbmciLGQoZSksaykpfSxuZXh0OmZ1bmN0aW9uKGUsayl7cmV0dXJuIGEub25lKHQuZWxlbWVudEJ5QXhpcyh0aGlzLl9ub2RlLCJuZXh0U2libGluZyIsZChlKSxrKSl9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBhLmFsbCh0LnNpYmxpbmdzKHRoaXMuX25vZGUsCmQoZSkpKX0sb25lOmZ1bmN0aW9uKGUpe3JldHVybiBhLm9uZShhLlNlbGVjdG9yLnF1ZXJ5KGUsdGhpcy5fbm9kZSwhMCkpfSxhbGw6ZnVuY3Rpb24oZSl7dmFyIGs7dGhpcy5fbm9kZSYmKGs9YS5hbGwoYS5TZWxlY3Rvci5xdWVyeShlLHRoaXMuX25vZGUpKSxrLl9xdWVyeT1lLGsuX3F1ZXJ5Um9vdD10aGlzLl9ub2RlKTtyZXR1cm4ga3x8YS5hbGwoW10pfSx0ZXN0OmZ1bmN0aW9uKGUpe3JldHVybiBhLlNlbGVjdG9yLnRlc3QodGhpcy5fbm9kZSxlKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciBrPXRoaXMuX25vZGU7ayYmay5wYXJlbnROb2RlJiZrLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoayk7ZSYmdGhpcy5kZXN0cm95KCk7cmV0dXJuIHRoaXN9LHJlcGxhY2U6ZnVuY3Rpb24oZSl7dmFyIGs9dGhpcy5fbm9kZTsic3RyaW5nIj09dHlwZW9mIGUmJihlPWYuY3JlYXRlKGUpKTtrLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGYuZ2V0RE9NTm9kZShlKSxrKTtyZXR1cm4gdGhpc30sCnJlcGxhY2VDaGlsZDpmdW5jdGlvbihlLGspeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9dC5jcmVhdGUoZSkpO3JldHVybiBhLm9uZSh0aGlzLl9ub2RlLnJlcGxhY2VDaGlsZChmLmdldERPTU5vZGUoZSksZi5nZXRET01Ob2RlKGspKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7dmFyIGs9YS5jb25maWcuZG9jLnVuaXF1ZUlEPyJ1bmlxdWVJRCI6Il95dWlkIixtO3RoaXMucHVyZ2UoKTt0aGlzLnVucGx1ZyYmdGhpcy51bnBsdWcoKTt0aGlzLmNsZWFyRGF0YSgpO2UmJmEuTm9kZUxpc3QuZWFjaCh0aGlzLmFsbCgiKiIpLGZ1bmN0aW9uKHApeyhtPWYuX2luc3RhbmNlc1twW2tdXSk/bS5kZXN0cm95KCk6YS5FdmVudC5wdXJnZUVsZW1lbnQocCl9KTt0aGlzLl9zdGF0ZVByb3h5PXRoaXMuX25vZGU9bnVsbDtkZWxldGUgZi5faW5zdGFuY2VzW3RoaXMuX3l1aWRdfSxpbnZva2U6ZnVuY3Rpb24oZSxrLG0scCxzLGwpe3ZhciBoPXRoaXMuX25vZGU7ayYmay5fbm9kZSYmKGs9ay5fbm9kZSk7Cm0mJm0uX25vZGUmJihtPW0uX25vZGUpO2U9aFtlXShrLG0scCxzLGwpO3JldHVybiBmLnNjcnViVmFsKGUsdGhpcyl9LHN3YXA6YS5jb25maWcuZG9jLmRvY3VtZW50RWxlbWVudC5zd2FwTm9kZT9mdW5jdGlvbihlKXt0aGlzLl9ub2RlLnN3YXBOb2RlKGYuZ2V0RE9NTm9kZShlKSl9OmZ1bmN0aW9uKGUpe2U9Zi5nZXRET01Ob2RlKGUpO3ZhciBrPXRoaXMuX25vZGUsbT1lLnBhcmVudE5vZGUscD1lLm5leHRTaWJsaW5nO3A9PT1rP20uaW5zZXJ0QmVmb3JlKGssZSk6ZT09PWsubmV4dFNpYmxpbmc/bS5pbnNlcnRCZWZvcmUoZSxrKTooay5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLGspLHQuYWRkSFRNTChtLGsscCkpO3JldHVybiB0aGlzfSxoYXNNZXRob2Q6ZnVuY3Rpb24oZSl7dmFyIGs9dGhpcy5fbm9kZTtyZXR1cm4hKCEoayYmZSBpbiBrJiYidW5rbm93biIhPXR5cGVvZiBrW2VdKXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGtbZV0mJjEhPT1TdHJpbmcoa1tlXSkuaW5kZXhPZigiZnVuY3Rpb24iKSl9LAppc0ZyYWdtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIDExPT09dGhpcy5nZXQoIm5vZGVUeXBlIil9LGVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5nZXQoImNoaWxkTm9kZXMiKS5yZW1vdmUoKS5kZXN0cm95KCEwKTtyZXR1cm4gdGhpc30sZ2V0RE9NTm9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlfX0sITApO2EuTm9kZT1mO2Eub25lPWYub25lO3ZhciBjPWZ1bmN0aW9uKGUpe3ZhciBrPVtdO2UmJigic3RyaW5nIj09PXR5cGVvZiBlPyh0aGlzLl9xdWVyeT1lLGU9YS5TZWxlY3Rvci5xdWVyeShlKSk6ZS5ub2RlVHlwZXx8dC5pc1dpbmRvdyhlKT9lPVtlXTplLl9ub2RlP2U9W2UuX25vZGVdOmVbMF0mJmVbMF0uX25vZGU/KGEuQXJyYXkuZWFjaChlLGZ1bmN0aW9uKG0pe20uX25vZGUmJmsucHVzaChtLl9ub2RlKX0pLGU9ayk6ZT1hLkFycmF5KGUsMCwhMCkpO3RoaXMuX25vZGVzPWV8fFtdfTtjLk5BTUU9Ik5vZGVMaXN0IjtjLmdldERPTU5vZGVzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYKZS5fbm9kZXM/ZS5fbm9kZXM6ZX07Yy5lYWNoPWZ1bmN0aW9uKGUsayxtKXt2YXIgcD1lLl9ub2RlcztwJiZwLmxlbmd0aCYmYS5BcnJheS5lYWNoKHAsayxtfHxlKX07Yy5hZGRNZXRob2Q9ZnVuY3Rpb24oZSxrLG0pe2UmJmsmJihjLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3ZhciBwPVtdLHM9YXJndW1lbnRzO2EuQXJyYXkuZWFjaCh0aGlzLl9ub2RlcyxmdW5jdGlvbihsKXt2YXIgaD1hLk5vZGUuX2luc3RhbmNlc1tsW2wudW5pcXVlSUQmJjkhPT1sLm5vZGVUeXBlPyJ1bmlxdWVJRCI6Il95dWlkIl1dO2h8fChoPWMuX2dldFRlbXBOb2RlKGwpKTtsPWsuYXBwbHkobXx8aCxzKTt2b2lkIDAhPT1sJiZsIT09aCYmKHBbcC5sZW5ndGhdPWwpfSk7cmV0dXJuIHAubGVuZ3RoP3A6dGhpc30pfTtjLmltcG9ydE1ldGhvZD1mdW5jdGlvbihlLGssbSl7InN0cmluZyI9PT10eXBlb2Ygaz9jLmFkZE1ldGhvZChtfHxrLGVba10pOmEuQXJyYXkuZWFjaChrLGZ1bmN0aW9uKHApe2MuaW1wb3J0TWV0aG9kKGUsCnApfSl9O2MuX2dldFRlbXBOb2RlPWZ1bmN0aW9uKGUpe3ZhciBrPWMuX3RlbXBOb2RlO2t8fChrPWEuTm9kZS5jcmVhdGUoIlx4M2NkaXZceDNlXHgzYy9kaXZceDNlIiksYy5fdGVtcE5vZGU9ayk7ay5fbm9kZT1lO2suX3N0YXRlUHJveHk9ZTtyZXR1cm4ga307YS5taXgoYy5wcm90b3R5cGUse19pbnZva2U6ZnVuY3Rpb24oZSxrLG0pe3ZhciBwPW0/W106dGhpczt0aGlzLmVhY2goZnVuY3Rpb24ocyl7cz1zW2VdLmFwcGx5KHMsayk7bSYmcC5wdXNoKHMpfSk7cmV0dXJuIHB9LGl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGEub25lKCh0aGlzLl9ub2Rlc3x8W10pW2VdKX0sZWFjaDpmdW5jdGlvbihlLGspe3ZhciBtPXRoaXM7YS5BcnJheS5lYWNoKHRoaXMuX25vZGVzLGZ1bmN0aW9uKHAscyl7cD1hLm9uZShwKTtyZXR1cm4gZS5jYWxsKGt8fHAscCxzLG0pfSk7cmV0dXJuIG19LGJhdGNoOmZ1bmN0aW9uKGUsayl7dmFyIG09dGhpczthLkFycmF5LmVhY2godGhpcy5fbm9kZXMsZnVuY3Rpb24ocCwKcyl7dmFyIGw9YS5Ob2RlLl9pbnN0YW5jZXNbcC5feXVpZF07bHx8KGw9Yy5fZ2V0VGVtcE5vZGUocCkpO3JldHVybiBlLmNhbGwoa3x8bCxsLHMsbSl9KTtyZXR1cm4gbX0sc29tZTpmdW5jdGlvbihlLGspe3ZhciBtPXRoaXM7cmV0dXJuIGEuQXJyYXkuc29tZSh0aGlzLl9ub2RlcyxmdW5jdGlvbihwLHMpe3A9YS5vbmUocCk7az1rfHxwO3JldHVybiBlLmNhbGwoayxwLHMsbSl9KX0sdG9GcmFnOmZ1bmN0aW9uKCl7cmV0dXJuIGEub25lKGEuRE9NLl9ubDJmcmFnKHRoaXMuX25vZGVzKSl9LGluZGV4T2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGEuQXJyYXkuaW5kZXhPZih0aGlzLl9ub2RlcyxhLk5vZGUuZ2V0RE9NTm9kZShlKSl9LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gYS5hbGwoYS5TZWxlY3Rvci5maWx0ZXIodGhpcy5fbm9kZXMsZSkpfSxtb2R1bHVzOmZ1bmN0aW9uKGUsayl7az1rfHwwO3ZhciBtPVtdO2MuZWFjaCh0aGlzLGZ1bmN0aW9uKHAscyl7cyVlPT09ayYmbS5wdXNoKHApfSk7CnJldHVybiBhLmFsbChtKX0sb2RkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kdWx1cygyLDEpfSxldmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kdWx1cygyKX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe30scmVmcmVzaDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX25vZGVzLGs9dGhpcy5fcXVlcnksbT10aGlzLl9xdWVyeVJvb3Q7ayYmKCFtJiZlJiZlWzBdJiZlWzBdLm93bmVyRG9jdW1lbnQmJihtPWVbMF0ub3duZXJEb2N1bWVudCksdGhpcy5fbm9kZXM9YS5TZWxlY3Rvci5xdWVyeShrLG0pKTtyZXR1cm4gdGhpc30sc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2Rlcy5sZW5ndGh9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gMT50aGlzLl9ub2Rlcy5sZW5ndGh9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9IiIsaz10aGlzLl95dWlkKyI6IG5vdCBib3VuZCB0byBhbnkgbm9kZXMiLG09dGhpcy5fbm9kZXMscDttJiZtWzBdJiYocD1tWzBdLGUrPXAubm9kZU5hbWUsCnAuaWQmJihlKz0iIyIrcC5pZCkscC5jbGFzc05hbWUmJihlKz0iLiIrcC5jbGFzc05hbWUucmVwbGFjZSgiICIsIi4iKSksMTxtLmxlbmd0aCYmKGUrPSIuLi5bIittLmxlbmd0aCsiIGl0ZW1zXSIpKTtyZXR1cm4gZXx8a30sZ2V0RE9NTm9kZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9kZXN9fSwhMCk7Yy5pbXBvcnRNZXRob2QoYS5Ob2RlLnByb3RvdHlwZSxbImRlc3Ryb3kiLCJlbXB0eSIsInJlbW92ZSIsInNldCJdKTtjLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIGs9W10sbT10aGlzLl9ub2RlcyxwPSExLHM9Yy5fZ2V0VGVtcE5vZGUsbCxoO21bMF0mJihsPWEuTm9kZS5faW5zdGFuY2VzW21bMF0uX3l1aWRdfHxzKG1bMF0pLChoPWwuX2dldChlKSkmJmgubm9kZVR5cGUmJihwPSEwKSk7YS5BcnJheS5lYWNoKG0sZnVuY3Rpb24odSl7KGw9YS5Ob2RlLl9pbnN0YW5jZXNbdS5feXVpZF0pfHwobD1zKHUpKTtoPWwuX2dldChlKTtwfHwoaD1hLk5vZGUuc2NydWJWYWwoaCwKbCkpO2sucHVzaChoKX0pO3JldHVybiBwP2EuYWxsKGspOmt9O2EuTm9kZUxpc3Q9YzthLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGMoZSl9O2EuTm9kZS5hbGw9YS5hbGw7dmFyIGI9YS5Ob2RlTGlzdCxnPUFycmF5LnByb3RvdHlwZTthLk9iamVjdC5lYWNoKHtjb25jYXQ6MSxwb3A6MCxwdXNoOjAsc2hpZnQ6MCxzbGljZToxLHNwbGljZToxLHVuc2hpZnQ6MH0sZnVuY3Rpb24oZSxrKXtiLnByb3RvdHlwZVtrXT1mdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxwPTAsczsidW5kZWZpbmVkIiE9dHlwZW9mKHM9YXJndW1lbnRzW3ArK10pOyltLnB1c2gocy5fbm9kZXx8cy5fbm9kZXN8fHMpO209Z1trXS5hcHBseSh0aGlzLl9ub2RlcyxtKTtyZXR1cm4gbT1lP2EuYWxsKG0pOmEuTm9kZS5zY3J1YlZhbChtKX19KTthLkFycmF5LmVhY2goInJlbW92ZUNoaWxkIGhhc0NoaWxkTm9kZXMgY2xvbmVOb2RlIGhhc0F0dHJpYnV0ZSBzY3JvbGxJbnRvVmlldyBnZXRFbGVtZW50c0J5VGFnTmFtZSBmb2N1cyBibHVyIHN1Ym1pdCByZXNldCBzZWxlY3QgY3JlYXRlQ2FwdGlvbiIuc3BsaXQoIiAiKSwKZnVuY3Rpb24oZSl7YS5Ob2RlLnByb3RvdHlwZVtlXT1mdW5jdGlvbihrLG0scCl7cmV0dXJuIHRoaXMuaW52b2tlKGUsayxtLHApfX0pO2EuTm9kZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3ZhciBrPXRoaXMuX25vZGU7ayYmay5yZW1vdmVBdHRyaWJ1dGUoZSwwKTtyZXR1cm4gdGhpc307YS5Ob2RlLmltcG9ydE1ldGhvZChhLkRPTSwiY29udGFpbnMgc2V0QXR0cmlidXRlIGdldEF0dHJpYnV0ZSB3cmFwIHVud3JhcCBnZW5lcmF0ZUlEIi5zcGxpdCgiICIpKTthLk5vZGVMaXN0LmltcG9ydE1ldGhvZChhLk5vZGUucHJvdG90eXBlLCJnZXRBdHRyaWJ1dGUgc2V0QXR0cmlidXRlIHJlbW92ZUF0dHJpYnV0ZSB1bndyYXAgd3JhcCBnZW5lcmF0ZUlEIi5zcGxpdCgiICIpKX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZG9tLWNvcmUiLCJzZWxlY3RvciJdfSk7CllVSS5hZGQoIm5vZGUtZXZlbnQtZGVsZWdhdGUiLGZ1bmN0aW9uKGEsRSl7YS5Ob2RlLnByb3RvdHlwZS5kZWxlZ2F0ZT1mdW5jdGlvbihxKXt2YXIgdD1hLkFycmF5KGFyZ3VtZW50cywwLCEwKSxmPWEuTGFuZy5pc09iamVjdChxKSYmIWEuTGFuZy5pc0FycmF5KHEpPzE6Mjt0LnNwbGljZShmLDAsdGhpcy5fbm9kZSk7cmV0dXJuIGEuZGVsZWdhdGUuYXBwbHkoYSx0KX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbIm5vZGUtYmFzZSIsImV2ZW50LWRlbGVnYXRlIl19KTsKWVVJLmFkZCgibm9kZS1ldmVudC1zaW11bGF0ZSIsZnVuY3Rpb24oYSxFKXthLk5vZGUucHJvdG90eXBlLnNpbXVsYXRlPWZ1bmN0aW9uKHEsdCl7YS5FdmVudC5zaW11bGF0ZShhLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKSxxLHQpfTthLk5vZGUucHJvdG90eXBlLnNpbXVsYXRlR2VzdHVyZT1mdW5jdGlvbihxLHQsZil7YS5FdmVudC5zaW11bGF0ZUdlc3R1cmUodGhpcyxxLHQsZil9fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJub2RlLWJhc2UiLCJldmVudC1zaW11bGF0ZSIsImdlc3R1cmUtc2ltdWxhdGUiXX0pOwpZVUkuYWRkKCJub2RlLWZvY3VzbWFuYWdlciIsZnVuY3Rpb24oYSxFKXt2YXIgcT17Mzc6ITAsMzg6ITAsMzk6ITAsNDA6ITB9LHQ9e2E6ITAsYnV0dG9uOiEwLGlucHV0OiEwLG9iamVjdDohMH0sZj1hLkxhbmcsZD1hLlVBLGM9ZnVuY3Rpb24oKXtjLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjLkFUVFJTPXtmb2N1c2VkOnt2YWx1ZTohMSxyZWFkT25seTohMH0sZGVzY2VuZGFudHM6e2dldHRlcjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5nZXQoImhvc3QiKS5hbGwoYil9fSxhY3RpdmVEZXNjZW5kYW50OntzZXR0ZXI6ZnVuY3Rpb24oYil7dmFyIGc9Zi5pc051bWJlcixlPWEuQXR0cmlidXRlLklOVkFMSURfVkFMVUUsaz10aGlzLl9kZXNjZW5kYW50c01hcCxtPXRoaXMuX2Rlc2NlbmRhbnRzLHA7ZyhiKT9iPXA9YjpiIGluc3RhbmNlb2YgYS5Ob2RlJiZrPyhwPWtbYi5nZXQoImlkIildLGI9ZyhwKT9wOmUpOmI9ZTttJiYobT1tLml0ZW0ocCkpJiYKbS5nZXQoImRpc2FibGVkIikmJihiPWUpO3JldHVybiBifX0sa2V5czp7dmFsdWU6e25leHQ6bnVsbCxwcmV2aW91czpudWxsfX0sZm9jdXNDbGFzczp7fSxjaXJjdWxhcjp7dmFsdWU6ITB9fTthLmV4dGVuZChjLGEuUGx1Z2luLkJhc2Use19zdG9wcGVkOiEwLF9kZXNjZW5kYW50czpudWxsLF9kZXNjZW5kYW50c01hcDpudWxsLF9mb2N1c2VkTm9kZTpudWxsLF9sYXN0Tm9kZUluZGV4OjAsX2V2ZW50SGFuZGxlcnM6bnVsbCxfaW5pdERlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXQoImRlc2NlbmRhbnRzIiksZz17fSxlPS0xLGssbT10aGlzLmdldCgiYWN0aXZlRGVzY2VuZGFudCIpLHAscyxsPTA7Zi5pc1VuZGVmaW5lZChtKSYmKG09LTEpO2lmKGIpe2s9Yi5zaXplKCk7Zm9yKGw9MDtsPGs7bCsrKXA9Yi5pdGVtKGwpLC0xIT09ZXx8cC5nZXQoImRpc2FibGVkIil8fChlPWwpLDA+bSYmMD09PXBhcnNlSW50KHAuZ2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsMiksCjEwKSYmKG09bCkscCYmcC5zZXQoInRhYkluZGV4IiwtMSkscz1wLmdldCgiaWQiKSxzfHwocz1hLmd1aWQoKSxwLnNldCgiaWQiLHMpKSxnW3NdPWw7MD5tJiYobT0wKTtwPWIuaXRlbShtKTtpZighcHx8cC5nZXQoImRpc2FibGVkIikpcD1iLml0ZW0oZSksbT1lO3RoaXMuX2xhc3ROb2RlSW5kZXg9ay0xO3RoaXMuX2Rlc2NlbmRhbnRzPWI7dGhpcy5fZGVzY2VuZGFudHNNYXA9Zzt0aGlzLnNldCgiYWN0aXZlRGVzY2VuZGFudCIsbSk7cCYmcC5zZXQoInRhYkluZGV4IiwwKX19LF9pc0Rlc2NlbmRhbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIGIuZ2V0KCJpZCIpaW4gdGhpcy5fZGVzY2VuZGFudHNNYXB9LF9yZW1vdmVGb2N1c0NsYXNzOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fZm9jdXNlZE5vZGUsZz10aGlzLmdldCgiZm9jdXNDbGFzcyIpLGU7ZyYmKGU9Zi5pc1N0cmluZyhnKT9nOmcuY2xhc3NOYW1lKTtiJiZlJiZiLnJlbW92ZUNsYXNzKGUpfSxfZGV0YWNoS2V5SGFuZGxlcjpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLl9wcmV2S2V5SGFuZGxlcixnPXRoaXMuX25leHRLZXlIYW5kbGVyO2ImJmIuZGV0YWNoKCk7ZyYmZy5kZXRhY2goKX0sX3ByZXZlbnRTY3JvbGw6ZnVuY3Rpb24oYil7cVtiLmtleUNvZGVdJiZ0aGlzLl9pc0Rlc2NlbmRhbnQoYi50YXJnZXQpJiZiLnByZXZlbnREZWZhdWx0KCl9LF9maXJlQ2xpY2s6ZnVuY3Rpb24oYil7dmFyIGc9Yi50YXJnZXQsZT1nLmdldCgibm9kZU5hbWUiKS50b0xvd2VyQ2FzZSgpOzEzIT09Yi5rZXlDb2RlfHx0W2VdJiYoImEiIT09ZXx8Zy5nZXRBdHRyaWJ1dGUoImhyZWYiKSl8fGcuc2ltdWxhdGUoImNsaWNrIil9LF9hdHRhY2hLZXlIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGV0YWNoS2V5SGFuZGxlcigpO3ZhciBiPXRoaXMuZ2V0KCJrZXlzLm5leHQiKSxnPXRoaXMuZ2V0KCJrZXlzLnByZXZpb3VzIiksZT10aGlzLmdldCgiaG9zdCIpLGs9dGhpcy5fZXZlbnRIYW5kbGVycztnJiYodGhpcy5fcHJldktleUhhbmRsZXI9YS5vbigia2V5IiwKYS5iaW5kKHRoaXMuX2ZvY3VzUHJldmlvdXMsdGhpcyksZSxnKSk7YiYmKHRoaXMuX25leHRLZXlIYW5kbGVyPWEub24oImtleSIsYS5iaW5kKHRoaXMuX2ZvY3VzTmV4dCx0aGlzKSxlLGIpKTtkLm9wZXJhJiZrLnB1c2goZS5vbigia2V5cHJlc3MiLHRoaXMuX3ByZXZlbnRTY3JvbGwsdGhpcykpO2Qub3BlcmF8fGsucHVzaChlLm9uKCJrZXlwcmVzcyIsdGhpcy5fZmlyZUNsaWNrLHRoaXMpKX0sX2RldGFjaEV2ZW50SGFuZGxlcnM6ZnVuY3Rpb24oKXt0aGlzLl9kZXRhY2hLZXlIYW5kbGVyKCk7dmFyIGI9dGhpcy5fZXZlbnRIYW5kbGVycztiJiYoYS5BcnJheS5lYWNoKGIsZnVuY3Rpb24oZyl7Zy5kZXRhY2goKX0pLHRoaXMuX2V2ZW50SGFuZGxlcnM9bnVsbCl9LF9hdHRhY2hFdmVudEhhbmRsZXJzOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fZGVzY2VuZGFudHMsZyxlO2ImJmIuc2l6ZSgpJiYoYj10aGlzLl9ldmVudEhhbmRsZXJzfHxbXSxnPXRoaXMuZ2V0KCJob3N0IikuZ2V0KCJvd25lckRvY3VtZW50IiksCjA9PT1iLmxlbmd0aCYmKGIucHVzaChnLm9uKCJmb2N1cyIsdGhpcy5fb25Eb2NGb2N1cyx0aGlzKSksYi5wdXNoKGcub24oIm1vdXNlZG93biIsdGhpcy5fb25Eb2NNb3VzZURvd24sdGhpcykpLGIucHVzaCh0aGlzLmFmdGVyKCJrZXlzQ2hhbmdlIix0aGlzLl9hdHRhY2hLZXlIYW5kbGVyKSksYi5wdXNoKHRoaXMuYWZ0ZXIoImRlc2NlbmRhbnRzQ2hhbmdlIix0aGlzLl9pbml0RGVzY2VuZGFudHMpKSxiLnB1c2godGhpcy5hZnRlcigiYWN0aXZlRGVzY2VuZGFudENoYW5nZSIsdGhpcy5fYWZ0ZXJBY3RpdmVEZXNjZW5kYW50Q2hhbmdlKSksZT10aGlzLmFmdGVyKCJmb2N1c2VkQ2hhbmdlIixhLmJpbmQoZnVuY3Rpb24oayl7ay5uZXdWYWwmJih0aGlzLl9hdHRhY2hLZXlIYW5kbGVyKCksZS5kZXRhY2goKSl9LHRoaXMpKSxiLnB1c2goZSkpLHRoaXMuX2V2ZW50SGFuZGxlcnM9Yil9LF9vbkRvY01vdXNlRG93bjpmdW5jdGlvbihiKXt2YXIgZz10aGlzLmdldCgiaG9zdCIpLGU9Yi50YXJnZXQsCms9Zy5jb250YWlucyhlKSxtLHA9ZnVuY3Rpb24ocyl7dmFyIGw9ITE7cy5jb21wYXJlVG8oZyl8fChsPXRoaXMuX2lzRGVzY2VuZGFudChzKT9zOnAuY2FsbCh0aGlzLHMuZ2V0KCJwYXJlbnROb2RlIikpKTtyZXR1cm4gbH07ayYmKChtPXAuY2FsbCh0aGlzLGUpKT9lPW06IW0mJnRoaXMuZ2V0KCJmb2N1c2VkIikmJih0aGlzLl9zZXQoImZvY3VzZWQiLCExKSx0aGlzLl9vbkRvY0ZvY3VzKGIpKSk7ayYmdGhpcy5faXNEZXNjZW5kYW50KGUpP3RoaXMuZm9jdXMoZSk6ZC53ZWJraXQmJnRoaXMuZ2V0KCJmb2N1c2VkIikmJigha3x8ayYmIXRoaXMuX2lzRGVzY2VuZGFudChlKSkmJih0aGlzLl9zZXQoImZvY3VzZWQiLCExKSx0aGlzLl9vbkRvY0ZvY3VzKGIpKX0sX29uRG9jRm9jdXM6ZnVuY3Rpb24oYil7Yj10aGlzLl9mb2N1c1RhcmdldHx8Yi50YXJnZXQ7dmFyIGc9dGhpcy5nZXQoImZvY3VzZWQiKSxlPXRoaXMuZ2V0KCJmb2N1c0NsYXNzIiksaz10aGlzLl9mb2N1c2VkTm9kZSwKbTt0aGlzLl9mb2N1c1RhcmdldCYmKHRoaXMuX2ZvY3VzVGFyZ2V0PW51bGwpO3RoaXMuZ2V0KCJob3N0IikuY29udGFpbnMoYik/KG09dGhpcy5faXNEZXNjZW5kYW50KGIpLCFnJiZtP2c9ITA6ZyYmIW0mJihnPSExKSk6Zz0hMTtlJiYoIWt8fGsuY29tcGFyZVRvKGIpJiZnfHx0aGlzLl9yZW1vdmVGb2N1c0NsYXNzKCksbSYmZyYmKGUuZm4/KGI9ZS5mbihiKSxiLmFkZENsYXNzKGUuY2xhc3NOYW1lKSk6Yi5hZGRDbGFzcyhlKSx0aGlzLl9mb2N1c2VkTm9kZT1iKSk7dGhpcy5fc2V0KCJmb2N1c2VkIixnKX0sX2ZvY3VzTmV4dDpmdW5jdGlvbihiLGcpe3ZhciBlPWd8fHRoaXMuZ2V0KCJhY3RpdmVEZXNjZW5kYW50Iiksazt0aGlzLl9pc0Rlc2NlbmRhbnQoYi50YXJnZXQpJiZlPD10aGlzLl9sYXN0Tm9kZUluZGV4JiYoZSs9MSxlPT09dGhpcy5fbGFzdE5vZGVJbmRleCsxJiZ0aGlzLmdldCgiY2lyY3VsYXIiKSYmKGU9MCksKGs9dGhpcy5fZGVzY2VuZGFudHMuaXRlbShlKSkmJgooay5nZXQoImRpc2FibGVkIik/dGhpcy5fZm9jdXNOZXh0KGIsZSk6dGhpcy5mb2N1cyhlKSkpO3RoaXMuX3ByZXZlbnRTY3JvbGwoYil9LF9mb2N1c1ByZXZpb3VzOmZ1bmN0aW9uKGIsZyl7dmFyIGU9Z3x8dGhpcy5nZXQoImFjdGl2ZURlc2NlbmRhbnQiKSxrO3RoaXMuX2lzRGVzY2VuZGFudChiLnRhcmdldCkmJjA8PWUmJihlLT0xLC0xPT09ZSYmdGhpcy5nZXQoImNpcmN1bGFyIikmJihlPXRoaXMuX2xhc3ROb2RlSW5kZXgpLChrPXRoaXMuX2Rlc2NlbmRhbnRzLml0ZW0oZSkpJiYoay5nZXQoImRpc2FibGVkIik/dGhpcy5fZm9jdXNQcmV2aW91cyhiLGUpOnRoaXMuZm9jdXMoZSkpKTt0aGlzLl9wcmV2ZW50U2Nyb2xsKGIpfSxfYWZ0ZXJBY3RpdmVEZXNjZW5kYW50Q2hhbmdlOmZ1bmN0aW9uKGIpe3ZhciBnPXRoaXMuX2Rlc2NlbmRhbnRzLml0ZW0oYi5wcmV2VmFsKTtnJiZnLnNldCgidGFiSW5kZXgiLC0xKTsoZz10aGlzLl9kZXNjZW5kYW50cy5pdGVtKGIubmV3VmFsKSkmJgpnLnNldCgidGFiSW5kZXgiLDApfSxpbml0aWFsaXplcjpmdW5jdGlvbihiKXt0aGlzLnN0YXJ0KCl9LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLnN0b3AoKTt0aGlzLmdldCgiaG9zdCIpLmZvY3VzTWFuYWdlcj1udWxsfSxmb2N1czpmdW5jdGlvbihiKXtmLmlzVW5kZWZpbmVkKGIpJiYoYj10aGlzLmdldCgiYWN0aXZlRGVzY2VuZGFudCIpKTt0aGlzLnNldCgiYWN0aXZlRGVzY2VuZGFudCIsYix7c3JjOiJVSSJ9KTtpZihiPXRoaXMuX2Rlc2NlbmRhbnRzLml0ZW0odGhpcy5nZXQoImFjdGl2ZURlc2NlbmRhbnQiKSkpYi5mb2N1cygpLGQub3BlcmEmJiJidXR0b24iPT09Yi5nZXQoIm5vZGVOYW1lIikudG9Mb3dlckNhc2UoKSYmKHRoaXMuX2ZvY3VzVGFyZ2V0PWIpfSxibHVyOmZ1bmN0aW9uKCl7dmFyIGI7aWYodGhpcy5nZXQoImZvY3VzZWQiKSl7aWYoYj10aGlzLl9kZXNjZW5kYW50cy5pdGVtKHRoaXMuZ2V0KCJhY3RpdmVEZXNjZW5kYW50IikpKWIuYmx1cigpLHRoaXMuX3JlbW92ZUZvY3VzQ2xhc3MoKTsKdGhpcy5fc2V0KCJmb2N1c2VkIiwhMSx7c3JjOiJVSSJ9KX19LHN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fc3RvcHBlZCYmKHRoaXMuX2luaXREZXNjZW5kYW50cygpLHRoaXMuX2F0dGFjaEV2ZW50SGFuZGxlcnMoKSx0aGlzLl9zdG9wcGVkPSExKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX3N0b3BwZWR8fCh0aGlzLl9kZXRhY2hFdmVudEhhbmRsZXJzKCksdGhpcy5fZm9jdXNlZE5vZGU9dGhpcy5fZGVzY2VuZGFudHM9bnVsbCx0aGlzLl9sYXN0Tm9kZUluZGV4PTAsdGhpcy5fc3RvcHBlZD0hMCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9pbml0RGVzY2VuZGFudHMoKTt0aGlzLl9ldmVudEhhbmRsZXJzfHx0aGlzLl9hdHRhY2hFdmVudEhhbmRsZXJzKCl9fSk7Yy5OQU1FPSJub2RlRm9jdXNNYW5hZ2VyIjtjLk5TPSJmb2N1c01hbmFnZXIiO2EubmFtZXNwYWNlKCJQbHVnaW4iKTthLlBsdWdpbi5Ob2RlRm9jdXNNYW5hZ2VyPWN9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczoiYXR0cmlidXRlIG5vZGUgcGx1Z2luIG5vZGUtZXZlbnQtc2ltdWxhdGUgZXZlbnQta2V5IGV2ZW50LWZvY3VzIi5zcGxpdCgiICIpfSk7CllVSS5hZGQoIm5vZGUtcGx1Z2luaG9zdCIsZnVuY3Rpb24oYSxFKXthLk5vZGUucGx1Zz1mdW5jdGlvbigpe3ZhciBxPWEuQXJyYXkoYXJndW1lbnRzKTtxLnVuc2hpZnQoYS5Ob2RlKTthLlBsdWdpbi5Ib3N0LnBsdWcuYXBwbHkoYS5CYXNlLHEpO3JldHVybiBhLk5vZGV9O2EuTm9kZS51bnBsdWc9ZnVuY3Rpb24oKXt2YXIgcT1hLkFycmF5KGFyZ3VtZW50cyk7cS51bnNoaWZ0KGEuTm9kZSk7YS5QbHVnaW4uSG9zdC51bnBsdWcuYXBwbHkoYS5CYXNlLHEpO3JldHVybiBhLk5vZGV9O2EubWl4KGEuTm9kZSxhLlBsdWdpbi5Ib3N0LCExLG51bGwsMSk7YS5PYmplY3QuZWFjaChhLk5vZGUuX2luc3RhbmNlcyxmdW5jdGlvbihxKXthLlBsdWdpbi5Ib3N0LmFwcGx5KHEpfSk7YS5Ob2RlTGlzdC5wcm90b3R5cGUucGx1Zz1mdW5jdGlvbigpe3ZhciBxPWFyZ3VtZW50czthLk5vZGVMaXN0LmVhY2godGhpcyxmdW5jdGlvbih0KXthLk5vZGUucHJvdG90eXBlLnBsdWcuYXBwbHkoYS5vbmUodCksCnEpfSk7cmV0dXJuIHRoaXN9O2EuTm9kZUxpc3QucHJvdG90eXBlLnVucGx1Zz1mdW5jdGlvbigpe3ZhciBxPWFyZ3VtZW50czthLk5vZGVMaXN0LmVhY2godGhpcyxmdW5jdGlvbih0KXthLk5vZGUucHJvdG90eXBlLnVucGx1Zy5hcHBseShhLm9uZSh0KSxxKX0pO3JldHVybiB0aGlzfX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsibm9kZS1iYXNlIiwicGx1Z2luaG9zdCJdfSk7CllVSS5hZGQoIm5vZGUtc2NyZWVuIixmdW5jdGlvbihhLEUpe2EuZWFjaCgid2luV2lkdGggd2luSGVpZ2h0IGRvY1dpZHRoIGRvY0hlaWdodCBkb2NTY3JvbGxYIGRvY1Njcm9sbFkiLnNwbGl0KCIgIiksZnVuY3Rpb24ocSl7YS5Ob2RlLkFUVFJTW3FdPXtnZXR0ZXI6ZnVuY3Rpb24oKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3QudW5zaGlmdChhLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKSk7cmV0dXJuIGEuRE9NW3FdLmFwcGx5KHRoaXMsdCl9fX0pO2EuTm9kZS5BVFRSUy5zY3JvbGxMZWZ0PXtnZXR0ZXI6ZnVuY3Rpb24oKXt2YXIgcT1hLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKTtyZXR1cm4ic2Nyb2xsTGVmdCJpbiBxP3Euc2Nyb2xsTGVmdDphLkRPTS5kb2NTY3JvbGxYKHEpfSxzZXR0ZXI6ZnVuY3Rpb24ocSl7dmFyIHQ9YS5Ob2RlLmdldERPTU5vZGUodGhpcyk7dCYmKCJzY3JvbGxMZWZ0ImluIHQ/dC5zY3JvbGxMZWZ0PXE6KHQuZG9jdW1lbnR8fAo5PT09dC5ub2RlVHlwZSkmJmEuRE9NLl9nZXRXaW4odCkuc2Nyb2xsVG8ocSxhLkRPTS5kb2NTY3JvbGxZKHQpKSl9fTthLk5vZGUuQVRUUlMuc2Nyb2xsVG9wPXtnZXR0ZXI6ZnVuY3Rpb24oKXt2YXIgcT1hLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKTtyZXR1cm4ic2Nyb2xsVG9wImluIHE/cS5zY3JvbGxUb3A6YS5ET00uZG9jU2Nyb2xsWShxKX0sc2V0dGVyOmZ1bmN0aW9uKHEpe3ZhciB0PWEuTm9kZS5nZXRET01Ob2RlKHRoaXMpO3QmJigic2Nyb2xsVG9wImluIHQ/dC5zY3JvbGxUb3A9cToodC5kb2N1bWVudHx8OT09PXQubm9kZVR5cGUpJiZhLkRPTS5fZ2V0V2luKHQpLnNjcm9sbFRvKGEuRE9NLmRvY1Njcm9sbFgodCkscSkpfX07YS5Ob2RlLmltcG9ydE1ldGhvZChhLkRPTSwiZ2V0WFkgc2V0WFkgZ2V0WCBzZXRYIGdldFkgc2V0WSBzd2FwWFkiLnNwbGl0KCIgIikpO2EuTm9kZS5BVFRSUy5yZWdpb249e2dldHRlcjpmdW5jdGlvbigpe3ZhciBxPXRoaXMuZ2V0RE9NTm9kZSgpOwpxJiYhcS50YWdOYW1lJiY5PT09cS5ub2RlVHlwZSYmKHE9cS5kb2N1bWVudEVsZW1lbnQpO3JldHVybiBhLkRPTS5pc1dpbmRvdyhxKT9hLkRPTS52aWV3cG9ydFJlZ2lvbihxKTphLkRPTS5yZWdpb24ocSl9fTthLk5vZGUuQVRUUlMudmlld3BvcnRSZWdpb249e2dldHRlcjpmdW5jdGlvbigpe3JldHVybiBhLkRPTS52aWV3cG9ydFJlZ2lvbihhLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKSl9fTthLk5vZGUuaW1wb3J0TWV0aG9kKGEuRE9NLCJpblZpZXdwb3J0UmVnaW9uIik7YS5Ob2RlLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocSx0KXt2YXIgZj1hLk5vZGUuZ2V0RE9NTm9kZSh0aGlzKTthLmluc3RhbmNlT2YocSxhLk5vZGUpJiYocT1hLk5vZGUuZ2V0RE9NTm9kZShxKSk7cmV0dXJuIGEuRE9NLmludGVyc2VjdChmLHEsdCl9O2EuTm9kZS5wcm90b3R5cGUuaW5SZWdpb249ZnVuY3Rpb24ocSx0LGYpe3ZhciBkPWEuTm9kZS5nZXRET01Ob2RlKHRoaXMpO2EuaW5zdGFuY2VPZihxLAphLk5vZGUpJiYocT1hLk5vZGUuZ2V0RE9NTm9kZShxKSk7cmV0dXJuIGEuRE9NLmluUmVnaW9uKGQscSx0LGYpfX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZG9tLXNjcmVlbiIsIm5vZGUtYmFzZSJdfSk7CllVSS5hZGQoIm5vZGUtc3R5bGUiLGZ1bmN0aW9uKGEsRSl7KGZ1bmN0aW9uKHEpe3EubWl4KHEuTm9kZS5wcm90b3R5cGUse3NldFN0eWxlOmZ1bmN0aW9uKHQsZil7cS5ET00uc2V0U3R5bGUodGhpcy5fbm9kZSx0LGYpO3JldHVybiB0aGlzfSxzZXRTdHlsZXM6ZnVuY3Rpb24odCl7cS5ET00uc2V0U3R5bGVzKHRoaXMuX25vZGUsdCk7cmV0dXJuIHRoaXN9LGdldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBxLkRPTS5nZXRTdHlsZSh0aGlzLl9ub2RlLHQpfSxnZXRDb21wdXRlZFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBxLkRPTS5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX25vZGUsdCl9fSk7cS5Ob2RlTGlzdC5pbXBvcnRNZXRob2QocS5Ob2RlLnByb3RvdHlwZSxbImdldFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInNldFN0eWxlIiwic2V0U3R5bGVzIl0pfSkoYSk7YS5taXgoYS5Ob2RlLnByb3RvdHlwZSx7c2hvdzpmdW5jdGlvbihxKXtxPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLQoxXTt0aGlzLnRvZ2dsZVZpZXcoITAscSk7cmV0dXJuIHRoaXN9LF9zaG93OmZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImhpZGRlbiIpO3RoaXMuc2V0U3R5bGUoImRpc3BsYXkiLCIiKX0sX2lzSGlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8Im5vbmUiPT09YS5ET00uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9ub2RlLCJkaXNwbGF5Iil9LHRvZ2dsZVZpZXc6ZnVuY3Rpb24ocSx0KXt0aGlzLl90b2dnbGVWaWV3LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc30sX3RvZ2dsZVZpZXc6ZnVuY3Rpb24ocSx0KXt0PWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdOyJib29sZWFuIiE9dHlwZW9mIHEmJihxPXRoaXMuX2lzSGlkZGVuKCk/MTowKTtxP3RoaXMuX3Nob3coKTp0aGlzLl9oaWRlKCk7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY2FsbCh0aGlzKTtyZXR1cm4gdGhpc30saGlkZTpmdW5jdGlvbihxKXtxPQphcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTt0aGlzLnRvZ2dsZVZpZXcoITEscSk7cmV0dXJuIHRoaXN9LF9oaWRlOmZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsImhpZGRlbiIpO3RoaXMuc2V0U3R5bGUoImRpc3BsYXkiLCJub25lIil9fSk7YS5Ob2RlTGlzdC5pbXBvcnRNZXRob2QoYS5Ob2RlLnByb3RvdHlwZSxbInNob3ciLCJoaWRlIiwidG9nZ2xlVmlldyJdKX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZG9tLXN0eWxlIiwibm9kZS1iYXNlIl19KTsKWVVJLmFkZCgib29wIixmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEoZyxlLGssbSxwKXtpZihnJiZnW3BdJiZnIT09YSlyZXR1cm4gZ1twXS5jYWxsKGcsZSxrKTtzd2l0Y2goZi50ZXN0KGcpKXtjYXNlIDE6cmV0dXJuIGZbcF0oZyxlLGspO2Nhc2UgMjpyZXR1cm4gZltwXShhLkFycmF5KGcsMCwhMCksZSxrKTtkZWZhdWx0OnJldHVybiBhLk9iamVjdFtwXShnLGUsayxtKX19dmFyIHQ9YS5MYW5nLGY9YS5BcnJheSxkPU9iamVjdC5wcm90b3R5cGUsYz1kLmhhc093blByb3BlcnR5LGI9ZC50b1N0cmluZzthLmF1Z21lbnQ9ZnVuY3Rpb24oZyxlLGssbSxwKXt2YXIgcz1nLnByb3RvdHlwZSxsPXMmJmUsaD1lLnByb3RvdHlwZSx1PXN8fGcsdyx6LEEsSCxGO3A9cD9hLkFycmF5KHApOltdO2wmJih6PXt9LEE9e30sSD17fSx3PWZ1bmN0aW9uKEIsSSl7IWsmJkkgaW4gc3x8KCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1iLmNhbGwoQik/KEhbSV09Qix6W0ldPUFbSV09ZnVuY3Rpb24oKXtyZXR1cm4gRih0aGlzLApCLGFyZ3VtZW50cyl9KTp6W0ldPUIpfSxGPWZ1bmN0aW9uKEIsSSxNKXtmb3IodmFyIEQgaW4gSCljLmNhbGwoSCxEKSYmQltEXT09PUFbRF0mJihCW0RdPUhbRF0pO2UuYXBwbHkoQixwKTtyZXR1cm4gSS5hcHBseShCLE0pfSxtP2EuQXJyYXkuZWFjaChtLGZ1bmN0aW9uKEIpe0IgaW4gaCYmdyhoW0JdLEIpfSk6YS5PYmplY3QuZWFjaChoLHcsbnVsbCwhMCkpO2EubWl4KHUsenx8aCxrLG0pO2x8fGUuYXBwbHkodSxwKTtyZXR1cm4gZ307YS5hZ2dyZWdhdGU9ZnVuY3Rpb24oZyxlLGssbSl7cmV0dXJuIGEubWl4KGcsZSxrLG0sMCwhMCl9O2EuZXh0ZW5kPWZ1bmN0aW9uKGcsZSxrLG0pe2UmJmd8fGEuZXJyb3IoImV4dGVuZCBmYWlsZWQsIHZlcmlmeSBkZXBlbmRlbmNpZXMiKTt2YXIgcD1lLnByb3RvdHlwZSxzPWEuT2JqZWN0KHApO2cucHJvdG90eXBlPXM7cy5jb25zdHJ1Y3Rvcj1nO2cuc3VwZXJjbGFzcz1wO2UhPU9iamVjdCYmcC5jb25zdHJ1Y3Rvcj09ZC5jb25zdHJ1Y3RvciYmCihwLmNvbnN0cnVjdG9yPWUpO2smJmEubWl4KHMsaywhMCk7bSYmYS5taXgoZyxtLCEwKTtyZXR1cm4gZ307YS5lYWNoPWZ1bmN0aW9uKGcsZSxrLG0pe3JldHVybiBxKGcsZSxrLG0sImVhY2giKX07YS5zb21lPWZ1bmN0aW9uKGcsZSxrLG0pe3JldHVybiBxKGcsZSxrLG0sInNvbWUiKX07YS5jbG9uZT1mdW5jdGlvbihnLGUsayxtLHAscyl7dmFyIGwsaCx1O2lmKCF0LmlzT2JqZWN0KGcpfHxhLmluc3RhbmNlT2YoZyxZVUkpfHxnLmFkZEV2ZW50TGlzdGVuZXJ8fGcuYXR0YWNoRXZlbnQpcmV0dXJuIGc7aD1zfHx7fTtzd2l0Y2godC50eXBlKGcpKXtjYXNlICJkYXRlIjpyZXR1cm4gbmV3IERhdGUoZyk7Y2FzZSAicmVnZXhwIjpyZXR1cm4gZztjYXNlICJmdW5jdGlvbiI6cmV0dXJuIGc7Y2FzZSAiYXJyYXkiOmw9W107YnJlYWs7ZGVmYXVsdDppZihnWyJffnl1aW1+XyJdKXJldHVybiBoW2dbIl9+eXVpbX5fIl1dO3U9YS5ndWlkKCk7bD1lP3t9OmEuT2JqZWN0KGcpO2dbIl9+eXVpbX5fIl09CnU7aFt1XT1nfWEuZWFjaChnLGZ1bmN0aW9uKHcseil7IXomJjAhPT16fHxrJiYhMT09PWsuY2FsbChtfHx0aGlzLHcseix0aGlzLGcpfHwiX355dWltfl8iPT09enx8InByb3RvdHlwZSI9PXp8fCh0aGlzW3pdPWEuY2xvbmUodyxlLGssbSxwfHxnLGgpKX0sbCk7c3x8KGEuT2JqZWN0LmVhY2goaCxmdW5jdGlvbih3LHope2lmKHdbIl9+eXVpbX5fIl0pdHJ5e2RlbGV0ZSB3WyJffnl1aW1+XyJdfWNhdGNoKEEpe3dbIl9+eXVpbX5fIl09bnVsbH19LHRoaXMpLGg9bnVsbCk7cmV0dXJuIGx9O2EuYmluZD1mdW5jdGlvbihnLGUpe3ZhciBrPTI8YXJndW1lbnRzLmxlbmd0aD9hLkFycmF5KGFyZ3VtZW50cywyLCEwKTpudWxsO3JldHVybiBmdW5jdGlvbigpe3ZhciBtPXQuaXNTdHJpbmcoZyk/ZVtnXTpnLHA9az9rLmNvbmNhdChhLkFycmF5KGFyZ3VtZW50cywwLCEwKSk6YXJndW1lbnRzO3JldHVybiBtLmFwcGx5KGV8fG0scCl9fTthLnJiaW5kPWZ1bmN0aW9uKGcsZSl7dmFyIGs9MjwKYXJndW1lbnRzLmxlbmd0aD9hLkFycmF5KGFyZ3VtZW50cywyLCEwKTpudWxsO3JldHVybiBmdW5jdGlvbigpe3ZhciBtPXQuaXNTdHJpbmcoZyk/ZVtnXTpnLHA9az9hLkFycmF5KGFyZ3VtZW50cywwLCEwKS5jb25jYXQoayk6YXJndW1lbnRzO3JldHVybiBtLmFwcGx5KGV8fG0scCl9fX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsieXVpLWJhc2UiXX0pOwpZVUkuYWRkKCJwbHVnaW4iLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcSh0KXt0aGlzLmhhc0ltcGwmJnRoaXMuaGFzSW1wbChhLlBsdWdpbi5CYXNlKT9xLnByb3RvdHlwZS5pbml0aWFsaXplci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1xLkFUVFJTPXtob3N0Ont3cml0ZU9uY2U6ITB9fTtxLk5BTUU9InBsdWdpbiI7cS5OUz0icGx1Z2luIjthLmV4dGVuZChxLGEuQmFzZSx7X2hhbmRsZXM6bnVsbCxpbml0aWFsaXplcjpmdW5jdGlvbih0KXt0aGlzLl9oYW5kbGVzPVtdfSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7aWYodGhpcy5faGFuZGxlcylmb3IodmFyIHQ9MCxmPXRoaXMuX2hhbmRsZXMubGVuZ3RoO3Q8Zjt0KyspdGhpcy5faGFuZGxlc1t0XS5kZXRhY2goKX0sZG9CZWZvcmU6ZnVuY3Rpb24odCxmLGQpe3ZhciBjPXRoaXMuZ2V0KCJob3N0IiksYjt0IGluIGM/Yj10aGlzLmJlZm9yZUhvc3RNZXRob2QodCwKZixkKTpjLm9uJiYoYj10aGlzLm9uSG9zdEV2ZW50KHQsZixkKSk7cmV0dXJuIGJ9LGRvQWZ0ZXI6ZnVuY3Rpb24odCxmLGQpe3ZhciBjPXRoaXMuZ2V0KCJob3N0IiksYjt0IGluIGM/Yj10aGlzLmFmdGVySG9zdE1ldGhvZCh0LGYsZCk6Yy5hZnRlciYmKGI9dGhpcy5hZnRlckhvc3RFdmVudCh0LGYsZCkpO3JldHVybiBifSxvbkhvc3RFdmVudDpmdW5jdGlvbih0LGYsZCl7dD10aGlzLmdldCgiaG9zdCIpLm9uKHQsZixkfHx0aGlzKTt0aGlzLl9oYW5kbGVzLnB1c2godCk7cmV0dXJuIHR9LG9uY2VIb3N0RXZlbnQ6ZnVuY3Rpb24odCxmLGQpe3Q9dGhpcy5nZXQoImhvc3QiKS5vbmNlKHQsZixkfHx0aGlzKTt0aGlzLl9oYW5kbGVzLnB1c2godCk7cmV0dXJuIHR9LGFmdGVySG9zdEV2ZW50OmZ1bmN0aW9uKHQsZixkKXt0PXRoaXMuZ2V0KCJob3N0IikuYWZ0ZXIodCxmLGR8fHRoaXMpO3RoaXMuX2hhbmRsZXMucHVzaCh0KTtyZXR1cm4gdH0sb25jZUFmdGVySG9zdEV2ZW50OmZ1bmN0aW9uKHQsCmYsZCl7dD10aGlzLmdldCgiaG9zdCIpLm9uY2VBZnRlcih0LGYsZHx8dGhpcyk7dGhpcy5faGFuZGxlcy5wdXNoKHQpO3JldHVybiB0fSxiZWZvcmVIb3N0TWV0aG9kOmZ1bmN0aW9uKHQsZixkKXt0PWEuRG8uYmVmb3JlKGYsdGhpcy5nZXQoImhvc3QiKSx0LGR8fHRoaXMpO3RoaXMuX2hhbmRsZXMucHVzaCh0KTtyZXR1cm4gdH0sYWZ0ZXJIb3N0TWV0aG9kOmZ1bmN0aW9uKHQsZixkKXt0PWEuRG8uYWZ0ZXIoZix0aGlzLmdldCgiaG9zdCIpLHQsZHx8dGhpcyk7dGhpcy5faGFuZGxlcy5wdXNoKHQpO3JldHVybiB0fSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLk5BTUUrIlsiK3RoaXMuY29uc3RydWN0b3IuTlMrIl0ifX0pO2EubmFtZXNwYWNlKCJQbHVnaW4iKS5CYXNlPXF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImJhc2UtYmFzZSJdfSk7CllVSS5hZGQoInBsdWdpbmhvc3QtYmFzZSIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKCl7dGhpcy5fcGx1Z2lucz17fX12YXIgdD1hLkxhbmc7cS5wcm90b3R5cGU9e3BsdWc6ZnVuY3Rpb24oZixkKXt2YXIgYyxiO2lmKHQuaXNBcnJheShmKSlmb3IoYz0wLGI9Zi5sZW5ndGg7YzxiO2MrKyl0aGlzLnBsdWcoZltjXSk7ZWxzZSBmJiYhdC5pc0Z1bmN0aW9uKGYpJiYoZD1mLmNmZyxmPWYuZm4pLGYmJmYuTlMmJihjPWYuTlMsZD1kfHx7fSxkLmhvc3Q9dGhpcyx0aGlzLmhhc1BsdWdpbihjKT90aGlzW2NdLnNldEF0dHJzJiZ0aGlzW2NdLnNldEF0dHJzKGQpOih0aGlzW2NdPW5ldyBmKGQpLHRoaXMuX3BsdWdpbnNbY109ZikpO3JldHVybiB0aGlzfSx1bnBsdWc6ZnVuY3Rpb24oZil7dmFyIGQ9ZixjPXRoaXMuX3BsdWdpbnM7aWYoZil0LmlzRnVuY3Rpb24oZikmJihkPWYuTlMsIWR8fGNbZF0mJmNbZF09PT1mfHwoZD1udWxsKSksZCYmKHRoaXNbZF0mJih0aGlzW2RdLmRlc3Ryb3kmJgp0aGlzW2RdLmRlc3Ryb3koKSxkZWxldGUgdGhpc1tkXSksY1tkXSYmZGVsZXRlIGNbZF0pO2Vsc2UgZm9yKGQgaW4gdGhpcy5fcGx1Z2lucyl0aGlzLl9wbHVnaW5zLmhhc093blByb3BlcnR5KGQpJiZ0aGlzLnVucGx1ZyhkKTtyZXR1cm4gdGhpc30saGFzUGx1Z2luOmZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLl9wbHVnaW5zW2ZdJiZ0aGlzW2ZdfSxfaW5pdFBsdWdpbnM6ZnVuY3Rpb24oZil7dGhpcy5fcGx1Z2lucz10aGlzLl9wbHVnaW5zfHx7fTt0aGlzLl9pbml0Q29uZmlnUGx1Z2lucyYmdGhpcy5faW5pdENvbmZpZ1BsdWdpbnMoZil9LF9kZXN0cm95UGx1Z2luczpmdW5jdGlvbigpe3RoaXMudW5wbHVnKCl9fTthLm5hbWVzcGFjZSgiUGx1Z2luIikuSG9zdD1xfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoInBsdWdpbmhvc3QtY29uZmlnIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuUGx1Z2luLkhvc3QsdD1hLkxhbmc7cS5wcm90b3R5cGUuX2luaXRDb25maWdQbHVnaW5zPWZ1bmN0aW9uKGYpe3ZhciBkPXRoaXMuX2dldENsYXNzZXM/dGhpcy5fZ2V0Q2xhc3NlcygpOlt0aGlzLmNvbnN0cnVjdG9yXSxjPVtdLGI9e30sZyxlLGssbTtmb3IoZT1kLmxlbmd0aC0xOzA8PWU7ZS0tKWc9ZFtlXSwoaz1nLl9VTlBMVUcpJiZhLm1peChiLGssITApLChnPWcuX1BMVUcpJiZhLm1peChjLGcsITApO2ZvcihtIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShtKSYmKGJbbV18fHRoaXMucGx1ZyhjW21dKSk7ZiYmZi5wbHVnaW5zJiZ0aGlzLnBsdWcoZi5wbHVnaW5zKX07cS5wbHVnPWZ1bmN0aW9uKGYsZCxjKXt2YXIgYixnLGU7aWYoZiE9PWEuQmFzZSlmb3IoZi5fUExVRz1mLl9QTFVHfHx7fSx0LmlzQXJyYXkoZCl8fChjJiYoZD17Zm46ZCxjZmc6Y30pLGQ9W2RdKSxiPTAsZz1kLmxlbmd0aDtiPApnO2IrKyljPWRbYl0sZT1jLk5BTUV8fGMuZm4uTkFNRSxmLl9QTFVHW2VdPWN9O3EudW5wbHVnPWZ1bmN0aW9uKGYsZCl7dmFyIGMsYixnLGU7aWYoZiE9PWEuQmFzZSlmb3IoZi5fVU5QTFVHPWYuX1VOUExVR3x8e30sdC5pc0FycmF5KGQpfHwoZD1bZF0pLGI9MCxnPWQubGVuZ3RoO2I8ZztiKyspYz1kW2JdLGU9Yy5OQU1FLGYuX1BMVUdbZV0/ZGVsZXRlIGYuX1BMVUdbZV06Zi5fVU5QTFVHW2VdPWN9fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJwbHVnaW5ob3N0LWJhc2UiXX0pOwpZVUkuYWRkKCJxdWVyeXN0cmluZy1zdHJpbmdpZnktc2ltcGxlIixmdW5jdGlvbihhLEUpe3ZhciBxPWEubmFtZXNwYWNlKCJRdWVyeVN0cmluZyIpLHQ9ZW5jb2RlVVJJQ29tcG9uZW50O3Euc3RyaW5naWZ5PWZ1bmN0aW9uKGYsZCl7dmFyIGM9W10sYj1kJiZkLmFycmF5S2V5PyEwOiExLGcsZSxrO2ZvcihnIGluIGYpaWYoZi5oYXNPd25Qcm9wZXJ0eShnKSlpZihhLkxhbmcuaXNBcnJheShmW2ddKSlmb3IoZT0wLGs9ZltnXS5sZW5ndGg7ZTxrO2UrKyljLnB1c2godChiP2crIltdIjpnKSsiXHgzZCIrdChmW2ddW2VdKSk7ZWxzZSBjLnB1c2godChnKSsiXHgzZCIrdChmW2ddKSk7cmV0dXJuIGMuam9pbigiXHgyNiIpfX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsieXVpLWJhc2UiXX0pOwpZVUkuYWRkKCJxdWV1ZS1wcm9tb3RlIixmdW5jdGlvbihhLEUpe2EubWl4KGEuUXVldWUucHJvdG90eXBlLHtpbmRleE9mOmZ1bmN0aW9uKHEpe3JldHVybiBhLkFycmF5LmluZGV4T2YodGhpcy5fcSxxKX0scHJvbW90ZTpmdW5jdGlvbihxKXtxPXRoaXMuaW5kZXhPZihxKTstMTxxJiZ0aGlzLl9xLnVuc2hpZnQodGhpcy5fcS5zcGxpY2UocSwxKVswXSl9LHJlbW92ZTpmdW5jdGlvbihxKXtxPXRoaXMuaW5kZXhPZihxKTstMTxxJiZ0aGlzLl9xLnNwbGljZShxLDEpfX0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoInNlbGVjdG9yLWNzczIiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5TZWxlY3Rvcix0PXtfcmVSZWdFeHBUb2tlbnM6LyhbXF5cJFw/XFtcXVwqXCtcLVwuXChcKVx8XFxdKS8sU09SVF9SRVNVTFRTOiEwLF9pc1hNTDoiRElWIiE9PWEuY29uZmlnLmRvYy5jcmVhdGVFbGVtZW50KCJkaXYiKS50YWdOYW1lLHNob3J0aGFuZDp7IlxcIygtP1tfYS16MC05XStbLVxcd1xcdUUwMDBdKikiOiJbaWRceDNkJDFdIiwiXFwuKC0/W19hLXpdK1stXFx3XFx1RTAwMF0qKSI6IltjbGFzc05hbWV+XHgzZCQxXSJ9LG9wZXJhdG9yczp7IiI6ZnVuY3Rpb24oZixkKXtyZXR1cm4iIiE9PWEuRE9NLmdldEF0dHJpYnV0ZShmLGQpfSwiflx4M2QiOiIoPzpefFxccyspe3ZhbH0oPzpcXHMrfCQpIiwifFx4M2QiOiJee3ZhbH0tPyJ9LHBzZXVkb3M6eyJmaXJzdC1jaGlsZCI6ZnVuY3Rpb24oZil7cmV0dXJuIGEuRE9NLl9jaGlsZHJlbihmLnBhcmVudE5vZGUpWzBdPT09Zn19LF9icnV0ZVF1ZXJ5OmZ1bmN0aW9uKGYsCmQsYyl7dmFyIGI9W10sZz1bXSxlO2Y9cS5fdG9rZW5pemUoZik7dmFyIGs9ZltmLmxlbmd0aC0xXTthLkRPTS5fZ2V0RG9jKGQpO3ZhciBtO2lmKGspe2U9ay5pZDttPWsuY2xhc3NOYW1lO2s9ay50YWdOYW1lfHwiKiI7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSlnPWUmJihkLmFsbHx8OT09PWQubm9kZVR5cGV8fGEuRE9NLmluRG9jKGQpKT9hLkRPTS5hbGxCeUlkKGUsZCk6bT9kLmdldEVsZW1lbnRzQnlDbGFzc05hbWUobSk6ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShrKTtlbHNlIGZvcihlPVtdLGQ9ZC5maXJzdENoaWxkLG09IioiPT09aztkOyl7Zm9yKDtkOykiQCI8ZC50YWdOYW1lJiYobXx8ZC50YWdOYW1lPT09aykmJmcucHVzaChkKSxlLnB1c2goZCksZD1kLmZpcnN0Q2hpbGQ7Zm9yKDswPGUubGVuZ3RoJiYhZDspZD1lLnBvcCgpLm5leHRTaWJsaW5nfWcubGVuZ3RoJiYoYj1xLl9maWx0ZXJOb2RlcyhnLGYsYykpfXJldHVybiBifSwKX2ZpbHRlck5vZGVzOmZ1bmN0aW9uKGYsZCxjKXtmb3IodmFyIGI9MCxnLGU9ZC5sZW5ndGgsaz1lLTEsbT1bXSxwPWZbMF0scz1wLGw9YS5TZWxlY3Rvci5nZXR0ZXJzLGgsdSx3LHosQSxILGI9MDtzPXA9ZltiKytdOylhOmZvcihrPWUtMSx3PW51bGw7cyYmcy50YWdOYW1lOyl7dT1kW2tdO0E9dS50ZXN0cztpZihnPUEubGVuZ3RoKWZvcig7SD1BWy0tZ107KWlmKGg9SFsxXSxsW0hbMF1dP3o9bFtIWzBdXShzLEhbMF0pOih6PXNbSFswXV0sInRhZ05hbWUiIT09SFswXXx8cS5faXNYTUx8fCh6PXoudG9VcHBlckNhc2UoKSksInN0cmluZyIhPXR5cGVvZiB6JiZ2b2lkIDAhPT16JiZ6LnRvU3RyaW5nP3o9ei50b1N0cmluZygpOnZvaWQgMD09PXomJnMuZ2V0QXR0cmlidXRlJiYoej1zLmdldEF0dHJpYnV0ZShIWzBdLDIpKSksIlx4M2QiPT09aCYmeiE9PUhbMl18fCJzdHJpbmciIT09dHlwZW9mIGgmJmgudGVzdCYmIWgudGVzdCh6KXx8IWgudGVzdCYmImZ1bmN0aW9uIj09PXR5cGVvZiBoJiYKIWgocyxIWzBdLEhbMl0pKXtpZihzPXNbd10pZm9yKDtzJiYoIXMudGFnTmFtZXx8dS50YWdOYW1lJiZ1LnRhZ05hbWUhPT1zLnRhZ05hbWUpOylzPXNbd107Y29udGludWUgYX1rLS07aWYoZz11LmNvbWJpbmF0b3Ipe3c9Zy5heGlzO2ZvcihzPXNbd107cyYmIXMudGFnTmFtZTspcz1zW3ddO2cuZGlyZWN0JiYodz1udWxsKX1lbHNle20ucHVzaChwKTtpZihjKXJldHVybiBtO2JyZWFrfX1yZXR1cm4gbX0sY29tYmluYXRvcnM6eyIgIjp7YXhpczoicGFyZW50Tm9kZSJ9LCJceDNlIjp7YXhpczoicGFyZW50Tm9kZSIsZGlyZWN0OiEwfSwiKyI6e2F4aXM6InByZXZpb3VzU2libGluZyIsZGlyZWN0OiEwfX0sX3BhcnNlcnM6W3tuYW1lOiJhdHRyaWJ1dGVzIixyZTovXlx1RTAwMygtP1thLXpdK1tcd1wtXSopKyhbflx8XF5cJFwqIT1dPT8pP1snIl0/KFteXHVFMDA0JyJdKilbJyJdP1x1RTAwNC9pLGZuOmZ1bmN0aW9uKGYsZCl7dmFyIGM9ZlsyXXx8IiIsYj1xLm9wZXJhdG9ycyxnPQpmWzNdP2ZbM10ucmVwbGFjZSgvXFwvZywiIik6IiI7aWYoImlkIj09PWZbMV0mJiJceDNkIj09PWN8fCJjbGFzc05hbWUiPT09ZlsxXSYmYS5jb25maWcuZG9jLmRvY3VtZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiYoIn5ceDNkIj09PWN8fCJceDNkIj09PWMpKWQucHJlZmlsdGVyPWZbMV0sZlszXT1nLGRbZlsxXV09ImlkIj09PWZbMV0/ZlszXTpnO2MgaW4gYiYmKGM9YltjXSwic3RyaW5nIj09PXR5cGVvZiBjJiYoZlszXT1nLnJlcGxhY2UocS5fcmVSZWdFeHBUb2tlbnMsIlxcJDEiKSxjPVJlZ0V4cChjLnJlcGxhY2UoInt2YWx9IixmWzNdKSkpLGZbMl09Yyk7aWYoIWQubGFzdHx8ZC5wcmVmaWx0ZXIhPT1mWzFdKXJldHVybiBmLnNsaWNlKDEpfX0se25hbWU6InRhZ05hbWUiLHJlOi9eKCg/Oi0/W19hLXpdK1tcdy1dKil8XCopL2ksZm46ZnVuY3Rpb24oZixkKXt2YXIgYz1mWzFdO3EuX2lzWE1MfHwoYz1jLnRvVXBwZXJDYXNlKCkpO2QudGFnTmFtZT1jO2lmKCIqIiE9PQpjJiYoIWQubGFzdHx8ZC5wcmVmaWx0ZXIpKXJldHVyblsidGFnTmFtZSIsIlx4M2QiLGNdO2QucHJlZmlsdGVyfHwoZC5wcmVmaWx0ZXI9InRhZ05hbWUiKX19LHtuYW1lOiJjb21iaW5hdG9yIixyZTovXlxzKihbPit+XXxccylccyovLGZuOmZ1bmN0aW9uKGYsZCl7fX0se25hbWU6InBzZXVkb3MiLHJlOi9eOihbXC1cd10rKSg/Olx1RTAwNVsnIl0/KFteXHVFMDA1XSopWyciXT9cdUUwMDYpKi9pLGZuOmZ1bmN0aW9uKGYsZCl7dmFyIGM9cS5wc2V1ZG9zW2ZbMV1dO3JldHVybiBjPyhmWzJdJiYoZlsyXT1mWzJdLnJlcGxhY2UoL1xcL2csIiIpKSxbZlsyXSxjXSk6ITF9fV0sX2dldFRva2VuOmZ1bmN0aW9uKGYpe3JldHVybnt0YWdOYW1lOm51bGwsaWQ6bnVsbCxjbGFzc05hbWU6bnVsbCxhdHRyaWJ1dGVzOnt9LGNvbWJpbmF0b3I6bnVsbCx0ZXN0czpbXX19LF90b2tlbml6ZTpmdW5jdGlvbihmKXtmPXEuX3BhcnNlU2VsZWN0b3IoYS5MYW5nLnRyaW0oZnx8IiIpKTt2YXIgZD0KcS5fZ2V0VG9rZW4oKSxjPVtdLGI9ITEsZyxlLGs7YTpkbyBmb3IoYj0hMSxlPTA7az1xLl9wYXJzZXJzW2UrK107KWlmKGc9ay5yZS5leGVjKGYpKXsiY29tYmluYXRvciIhPT1rLm5hbWUmJihkLnNlbGVjdG9yPWYpO2Y9Zi5yZXBsYWNlKGdbMF0sIiIpO2YubGVuZ3RofHwoZC5sYXN0PSEwKTtxLl9hdHRyRmlsdGVyc1tnWzFdXSYmKGdbMV09cS5fYXR0ckZpbHRlcnNbZ1sxXV0pO2I9ay5mbihnLGQpO2lmKCExPT09Yil7Yj0hMTticmVhayBhfWVsc2UgYiYmZC50ZXN0cy5wdXNoKGIpO2YubGVuZ3RoJiYiY29tYmluYXRvciIhPT1rLm5hbWV8fChjLnB1c2goZCksZD1xLl9nZXRUb2tlbihkKSwiY29tYmluYXRvciI9PT1rLm5hbWUmJihkLmNvbWJpbmF0b3I9YS5TZWxlY3Rvci5jb21iaW5hdG9yc1tnWzFdXSkpO2I9ITB9d2hpbGUoYiYmZi5sZW5ndGgpO2lmKCFifHxmLmxlbmd0aCljPVtdO3JldHVybiBjfSxfcmVwbGFjZU1hcmtlcnM6ZnVuY3Rpb24oZil7Zj1mLnJlcGxhY2UoL1xbL2csCiJcdWUwMDMiKTtmPWYucmVwbGFjZSgvXF0vZywiXHVlMDA0Iik7Zj1mLnJlcGxhY2UoL1woL2csIlx1ZTAwNSIpO3JldHVybiBmPWYucmVwbGFjZSgvXCkvZywiXHVlMDA2Iil9LF9yZXBsYWNlU2hvcnRoYW5kOmZ1bmN0aW9uKGYpe3ZhciBkPWEuU2VsZWN0b3Iuc2hvcnRoYW5kLGM7Zm9yKGMgaW4gZClkLmhhc093blByb3BlcnR5KGMpJiYoZj1mLnJlcGxhY2UoUmVnRXhwKGMsImdpIiksZFtjXSkpO3JldHVybiBmfSxfcGFyc2VTZWxlY3RvcjpmdW5jdGlvbihmKXt2YXIgZD1hLlNlbGVjdG9yLl9yZXBsYWNlU2VsZWN0b3IoZik7Zj1kLnNlbGVjdG9yO2Y9YS5TZWxlY3Rvci5fcmVwbGFjZVNob3J0aGFuZChmKTtmPWEuU2VsZWN0b3IuX3Jlc3RvcmUoImF0dHIiLGYsZC5hdHRycyk7Zj1hLlNlbGVjdG9yLl9yZXN0b3JlKCJwc2V1ZG8iLGYsZC5wc2V1ZG9zKTtmPWEuU2VsZWN0b3IuX3JlcGxhY2VNYXJrZXJzKGYpO3JldHVybiBmPWEuU2VsZWN0b3IuX3Jlc3RvcmUoImVzYyIsZiwKZC5lc2MpfSxfYXR0ckZpbHRlcnM6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxnZXR0ZXJzOntocmVmOmZ1bmN0aW9uKGYsZCl7cmV0dXJuIGEuRE9NLmdldEF0dHJpYnV0ZShmLGQpfSxpZDpmdW5jdGlvbihmLGQpe3JldHVybiBhLkRPTS5nZXRJZChmKX19fTthLm1peChhLlNlbGVjdG9yLHQsITApO2EuU2VsZWN0b3IuZ2V0dGVycy5zcmM9YS5TZWxlY3Rvci5nZXR0ZXJzLnJlbD1hLlNlbGVjdG9yLmdldHRlcnMuaHJlZjthLlNlbGVjdG9yLnVzZU5hdGl2ZSYmYS5jb25maWcuZG9jLnF1ZXJ5U2VsZWN0b3ImJihhLlNlbGVjdG9yLnNob3J0aGFuZFsiXFwuKC0/W19hLXpdK1stXFx3XSopIl09IltjbGFzc35ceDNkJDFdIil9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInNlbGVjdG9yLW5hdGl2ZSJdfSk7CllVSS5hZGQoInNlbGVjdG9yLWNzczMiLGZ1bmN0aW9uKGEsRSl7YS5TZWxlY3Rvci5fcmVOdGg9L14oPzooW1wtXT9cZCopKG4pezF9fChvZGR8ZXZlbikkKSooW1wtK10/XGQqKSQvO2EuU2VsZWN0b3IuX2dldE50aD1mdW5jdGlvbihxLHQsZixkKXthLlNlbGVjdG9yLl9yZU50aC50ZXN0KHQpO3Q9cGFyc2VJbnQoUmVnRXhwLiQxLDEwKTt2YXIgYz1SZWdFeHAuJDIsYj1SZWdFeHAuJDMsZz1wYXJzZUludChSZWdFeHAuJDQsMTApfHwwO2Y9YS5ET00uX2NoaWxkcmVuKHEucGFyZW50Tm9kZSxmKTtiPyh0PTIsZz0ib2RkIj09PWI/MTowKTppc05hTih0KSYmKHQ9Yz8xOjApO2lmKDA9PT10KXJldHVybiBkJiYoZz1mLmxlbmd0aC1nKzEpLGZbZy0xXT09PXE/ITA6ITE7MD50JiYoZD0hIWQsdD1NYXRoLmFicyh0KSk7aWYoZClmb3IoZD1mLmxlbmd0aC1nLGM9Zi5sZW5ndGg7MDw9ZDtkLT10KXtpZihkPGMmJmZbZF09PT1xKXJldHVybiEwfWVsc2UgZm9yKGQ9Zy0xLGM9Zi5sZW5ndGg7ZDwKYztkKz10KWlmKDA8PWQmJmZbZF09PT1xKXJldHVybiEwO3JldHVybiExfTthLm1peChhLlNlbGVjdG9yLnBzZXVkb3Mse3Jvb3Q6ZnVuY3Rpb24ocSl7cmV0dXJuIHE9PT1xLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fSwibnRoLWNoaWxkIjpmdW5jdGlvbihxLHQpe3JldHVybiBhLlNlbGVjdG9yLl9nZXROdGgocSx0KX0sIm50aC1sYXN0LWNoaWxkIjpmdW5jdGlvbihxLHQpe3JldHVybiBhLlNlbGVjdG9yLl9nZXROdGgocSx0LG51bGwsITApfSwibnRoLW9mLXR5cGUiOmZ1bmN0aW9uKHEsdCl7cmV0dXJuIGEuU2VsZWN0b3IuX2dldE50aChxLHQscS50YWdOYW1lKX0sIm50aC1sYXN0LW9mLXR5cGUiOmZ1bmN0aW9uKHEsdCl7cmV0dXJuIGEuU2VsZWN0b3IuX2dldE50aChxLHQscS50YWdOYW1lLCEwKX0sImxhc3QtY2hpbGQiOmZ1bmN0aW9uKHEpe3ZhciB0PWEuRE9NLl9jaGlsZHJlbihxLnBhcmVudE5vZGUpO3JldHVybiB0W3QubGVuZ3RoLTFdPT09cX0sImZpcnN0LW9mLXR5cGUiOmZ1bmN0aW9uKHEpe3JldHVybiBhLkRPTS5fY2hpbGRyZW4ocS5wYXJlbnROb2RlLApxLnRhZ05hbWUpWzBdPT09cX0sImxhc3Qtb2YtdHlwZSI6ZnVuY3Rpb24ocSl7dmFyIHQ9YS5ET00uX2NoaWxkcmVuKHEucGFyZW50Tm9kZSxxLnRhZ05hbWUpO3JldHVybiB0W3QubGVuZ3RoLTFdPT09cX0sIm9ubHktY2hpbGQiOmZ1bmN0aW9uKHEpe3ZhciB0PWEuRE9NLl9jaGlsZHJlbihxLnBhcmVudE5vZGUpO3JldHVybiAxPT09dC5sZW5ndGgmJnRbMF09PT1xfSwib25seS1vZi10eXBlIjpmdW5jdGlvbihxKXt2YXIgdD1hLkRPTS5fY2hpbGRyZW4ocS5wYXJlbnROb2RlLHEudGFnTmFtZSk7cmV0dXJuIDE9PT10Lmxlbmd0aCYmdFswXT09PXF9LGVtcHR5OmZ1bmN0aW9uKHEpe3JldHVybiAwPT09cS5jaGlsZE5vZGVzLmxlbmd0aH0sbm90OmZ1bmN0aW9uKHEsdCl7cmV0dXJuIWEuU2VsZWN0b3IudGVzdChxLHQpfSxjb250YWluczpmdW5jdGlvbihxLHQpe3JldHVybi0xPChxLmlubmVyVGV4dHx8cS50ZXh0Q29udGVudHx8IiIpLmluZGV4T2YodCl9LGNoZWNrZWQ6ZnVuY3Rpb24ocSl7cmV0dXJuITA9PT0KcS5jaGVja2VkfHwhMD09PXEuc2VsZWN0ZWR9LGVuYWJsZWQ6ZnVuY3Rpb24ocSl7cmV0dXJuIHZvaWQgMCE9PXEuZGlzYWJsZWQmJiFxLmRpc2FibGVkfSxkaXNhYmxlZDpmdW5jdGlvbihxKXtyZXR1cm4gcS5kaXNhYmxlZH19KTthLm1peChhLlNlbGVjdG9yLm9wZXJhdG9ycyx7Il5ceDNkIjoiXnt2YWx9IiwiJFx4M2QiOiJ7dmFsfSQiLCIqXHgzZCI6Int2YWx9In0pO2EuU2VsZWN0b3IuY29tYmluYXRvcnNbIn4iXT17YXhpczoicHJldmlvdXNTaWJsaW5nIn19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInNlbGVjdG9yLW5hdGl2ZSIsInNlbGVjdG9yLWNzczIiXX0pOwpZVUkuYWRkKCJzZWxlY3Rvci1uYXRpdmUiLGZ1bmN0aW9uKGEsRSl7KGZ1bmN0aW9uKHEpe3EubmFtZXNwYWNlKCJTZWxlY3RvciIpO3ZhciB0PXtfdHlwZXM6e2VzYzp7dG9rZW46Ilx1ZTAwMCIscmU6L1xcWzpcW1xdXChcKSNcLlwnXD4rfiJdL2dpfSxhdHRyOnt0b2tlbjoiXHVlMDAxIixyZTovKFxbW15cXV0qXF0pL2d9LHBzZXVkbzp7dG9rZW46Ilx1ZTAwMiIscmU6LyhcKFteXCldKlwpKS9nfX0sdXNlTmF0aXZlOiEwLF9lc2NhcGVJZDpmdW5jdGlvbihmKXtmJiYoZj1mLnJlcGxhY2UoLyhbOlxbXF1cKFwpI1wuJzw+K34iXSkvZywiXFwkMSIpKTtyZXR1cm4gZn0sX2NvbXBhcmU6InNvdXJjZUluZGV4ImluIHEuY29uZmlnLmRvYy5kb2N1bWVudEVsZW1lbnQ/ZnVuY3Rpb24oZixkKXt2YXIgYz1mLnNvdXJjZUluZGV4LGI9ZC5zb3VyY2VJbmRleDtyZXR1cm4gYz09PWI/MDpjPmI/MTotMX06cS5jb25maWcuZG9jLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8KZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkKSY0Py0xOjF9OmZ1bmN0aW9uKGYsZCl7dmFyIGMsYjtmJiZkJiYoYz1mLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxjLnNldFN0YXJ0KGYsMCksYj1kLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxiLnNldFN0YXJ0KGQsMCksYz1jLmNvbXBhcmVCb3VuZGFyeVBvaW50cygxLGIpKTtyZXR1cm4gY30sX3NvcnQ6ZnVuY3Rpb24oZil7ZiYmKGY9cS5BcnJheShmLDAsITApLGYuc29ydCYmZi5zb3J0KHQuX2NvbXBhcmUpKTtyZXR1cm4gZn0sX2RlRHVwZTpmdW5jdGlvbihmKXt2YXIgZD1bXSxjLGI7Zm9yKGM9MDtiPWZbYysrXTspYi5fZm91bmR8fChkW2QubGVuZ3RoXT1iLGIuX2ZvdW5kPSEwKTtmb3IoYz0wO2I9ZFtjKytdOyliLl9mb3VuZD1udWxsLGIucmVtb3ZlQXR0cmlidXRlKCJfZm91bmQiKTtyZXR1cm4gZH0scXVlcnk6ZnVuY3Rpb24oZixkLGMsYil7ZD1kfHxxLmNvbmZpZy5kb2M7CnZhciBnPVtdLGU9cS5TZWxlY3Rvci51c2VOYXRpdmUmJnEuY29uZmlnLmRvYy5xdWVyeVNlbGVjdG9yJiYhYixrPVtbZixkXV0sbT1lP3EuU2VsZWN0b3IuX25hdGl2ZVF1ZXJ5OnEuU2VsZWN0b3IuX2JydXRlUXVlcnk7aWYoZiYmbSl7Ynx8ZSYmIWQudGFnTmFtZXx8KGs9dC5fc3BsaXRRdWVyaWVzKGYsZCkpO2ZvcihmPTA7ZD1rW2YrK107KWQ9bShkWzBdLGRbMV0sYyksY3x8KGQ9cS5BcnJheShkLDAsITApKSxkJiYoZz1nLmNvbmNhdChkKSk7MTxrLmxlbmd0aCYmKGc9dC5fc29ydCh0Ll9kZUR1cGUoZykpKX1yZXR1cm4gYz9nWzBdfHxudWxsOmd9LF9yZXBsYWNlU2VsZWN0b3I6ZnVuY3Rpb24oZil7dmFyIGQ9cS5TZWxlY3Rvci5fcGFyc2UoImVzYyIsZiksYyxiO2Y9cS5TZWxlY3Rvci5fcmVwbGFjZSgiZXNjIixmKTtiPXEuU2VsZWN0b3IuX3BhcnNlKCJwc2V1ZG8iLGYpO2Y9dC5fcmVwbGFjZSgicHNldWRvIixmKTtjPXEuU2VsZWN0b3IuX3BhcnNlKCJhdHRyIixmKTtmPQpxLlNlbGVjdG9yLl9yZXBsYWNlKCJhdHRyIixmKTtyZXR1cm57ZXNjOmQsYXR0cnM6Yyxwc2V1ZG9zOmIsc2VsZWN0b3I6Zn19LF9yZXN0b3JlU2VsZWN0b3I6ZnVuY3Rpb24oZil7dmFyIGQ9Zi5zZWxlY3RvcixkPXEuU2VsZWN0b3IuX3Jlc3RvcmUoImF0dHIiLGQsZi5hdHRycyksZD1xLlNlbGVjdG9yLl9yZXN0b3JlKCJwc2V1ZG8iLGQsZi5wc2V1ZG9zKTtyZXR1cm4gZD1xLlNlbGVjdG9yLl9yZXN0b3JlKCJlc2MiLGQsZi5lc2MpfSxfcmVwbGFjZUNvbW1hczpmdW5jdGlvbihmKXt2YXIgZD1xLlNlbGVjdG9yLl9yZXBsYWNlU2VsZWN0b3IoZik7aWYoZj1kLnNlbGVjdG9yKWY9Zi5yZXBsYWNlKC8sL2csIlx1ZTAwNyIpLGQuc2VsZWN0b3I9ZixmPXEuU2VsZWN0b3IuX3Jlc3RvcmVTZWxlY3RvcihkKTtyZXR1cm4gZn0sX3NwbGl0UXVlcmllczpmdW5jdGlvbihmLGQpey0xPGYuaW5kZXhPZigiLCIpJiYoZj1xLlNlbGVjdG9yLl9yZXBsYWNlQ29tbWFzKGYpKTt2YXIgYz1mLnNwbGl0KCJcdWUwMDciKSwKYj1bXSxnPSIiLGUsaztpZihkKWZvcigxPT09ZC5ub2RlVHlwZSYmKGc9cS5TZWxlY3Rvci5fZXNjYXBlSWQocS5ET00uZ2V0SWQoZCkpLGd8fChnPXEuZ3VpZCgpLHEuRE9NLnNldElkKGQsZykpLGc9J1tpZFx4M2QiJytnKyciXSAnKSxlPTAsaz1jLmxlbmd0aDtlPGs7KytlKWY9ZytjW2VdLGIucHVzaChbZixkXSk7cmV0dXJuIGJ9LF9uYXRpdmVRdWVyeTpmdW5jdGlvbihmLGQsYyl7aWYoKHEuVUEud2Via2l0fHxxLlVBLm9wZXJhKSYmLTE8Zi5pbmRleE9mKCI6Y2hlY2tlZCIpJiZxLlNlbGVjdG9yLnBzZXVkb3MmJnEuU2VsZWN0b3IucHNldWRvcy5jaGVja2VkKXJldHVybiBxLlNlbGVjdG9yLnF1ZXJ5KGYsZCxjLCEwKTt0cnl7cmV0dXJuIGRbInF1ZXJ5U2VsZWN0b3IiKyhjPyIiOiJBbGwiKV0oZil9Y2F0Y2goYil7cmV0dXJuIHEuU2VsZWN0b3IucXVlcnkoZixkLGMsITApfX0sZmlsdGVyOmZ1bmN0aW9uKGYsZCl7dmFyIGM9W10sYixnO2lmKGYmJmQpZm9yKGI9MDtnPWZbYisrXTspcS5TZWxlY3Rvci50ZXN0KGcsCmQpJiYoY1tjLmxlbmd0aF09Zyk7cmV0dXJuIGN9LHRlc3Q6ZnVuY3Rpb24oZixkLGMpe3ZhciBiLGc9ITEsZT0hMSxrLG0scCxzLGwsaDtpZihmJiZmLnRhZ05hbWUpaWYoImZ1bmN0aW9uIj09dHlwZW9mIGQpZz1kLmNhbGwoZixmKTtlbHNle2Q9ZC5zcGxpdCgiLCIpO2N8fHEuRE9NLmluRG9jKGYpfHwoYz1mLnBhcmVudE5vZGUsY3x8KHA9Zi5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxwLmFwcGVuZENoaWxkKGYpLGM9cCxlPSEwKSk7Yz1jfHxmLm93bmVyRG9jdW1lbnQ7cz1xLlNlbGVjdG9yLl9lc2NhcGVJZChxLkRPTS5nZXRJZChmKSk7c3x8KGI9ITAscz1xLmd1aWQoKSxxLkRPTS5zZXRJZChmLHMpKTtmb3IobD0wO2s9ZFtsKytdOyl7ays9J1tpZFx4M2QiJytzKyciXSc7bT1xLlNlbGVjdG9yLnF1ZXJ5KGssYyk7Zm9yKGg9MDtrPW1baCsrXTspaWYoaz09PWYpe2c9ITA7YnJlYWt9aWYoZylicmVha31lJiZwLnJlbW92ZUNoaWxkKGYpO2ImJmYucmVtb3ZlQXR0cmlidXRlKCJpZCIpfXJldHVybiBnfSwKYW5jZXN0b3I6ZnVuY3Rpb24oZixkLGMpe3JldHVybiBxLkRPTS5hbmNlc3RvcihmLGZ1bmN0aW9uKGIpe3JldHVybiBxLlNlbGVjdG9yLnRlc3QoYixkKX0sYyl9LF9wYXJzZTpmdW5jdGlvbihmLGQpe3JldHVybiBkLm1hdGNoKHEuU2VsZWN0b3IuX3R5cGVzW2ZdLnJlKX0sX3JlcGxhY2U6ZnVuY3Rpb24oZixkKXt2YXIgYz1xLlNlbGVjdG9yLl90eXBlc1tmXTtyZXR1cm4gZC5yZXBsYWNlKGMucmUsYy50b2tlbil9LF9yZXN0b3JlOmZ1bmN0aW9uKGYsZCxjKXtpZihjKXtmPXEuU2VsZWN0b3IuX3R5cGVzW2ZdLnRva2VuO3ZhciBiLGc7Yj0wO2ZvcihnPWMubGVuZ3RoO2I8ZzsrK2IpZD1kLnJlcGxhY2UoZixjW2JdKX1yZXR1cm4gZH19O3EubWl4KHEuU2VsZWN0b3IsdCwhMCl9KShhKX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZG9tLWJhc2UiXX0pO1lVSS5hZGQoInNlbGVjdG9yIixmdW5jdGlvbihhLEUpe30sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsic2VsZWN0b3ItbmF0aXZlIl19KTsKWVVJLmFkZCgid2lkZ2V0LWJhc2UiLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcSh3KXt2YXIgeixBPXRoaXMuY29uc3RydWN0b3I7dGhpcy5fc3Rycz17fTt0aGlzLl9jc3NQcmVmaXg9QS5DU1NfUFJFRklYfHxjKEEuTkFNRS50b0xvd2VyQ2FzZSgpKTt3PXd8fHt9O3Euc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsdyk7aWYodz10aGlzLmdldChlKSl3IT09bSYmKHo9dyksdGhpcy5yZW5kZXIoeil9dmFyIHQ9YS5MYW5nLGY9YS5Ob2RlLGQ9YS5DbGFzc05hbWVNYW5hZ2VyLGM9ZC5nZXRDbGFzc05hbWUsYixnPWEuY2FjaGVkKGZ1bmN0aW9uKHcpe3JldHVybiB3LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkrdy5zdWJzdHJpbmcoMSl9KSxlPSJyZW5kZXIiLGs9ZnVuY3Rpb24oKXt9LG09ITAscCxzPXt9LGw9InZpc2libGUgZGlzYWJsZWQgaGVpZ2h0IHdpZHRoIGZvY3VzZWQgdGFiSW5kZXgiLnNwbGl0KCIgIiksaD1hLlVBLndlYmtpdCx1PXt9O3EuTkFNRT0id2lkZ2V0IjsKcD1xLlVJX1NSQz0idWkiO3EuQVRUUlM9cztzLmlkPXt2YWx1ZUZuOiJfZ3VpZCIsd3JpdGVPbmNlOm19O3MucmVuZGVyZWQ9e3ZhbHVlOiExLHJlYWRPbmx5Om19O3MuYm91bmRpbmdCb3g9e3ZhbHVlRm46Il9kZWZhdWx0QkIiLHNldHRlcjoiX3NldEJCIix3cml0ZU9uY2U6bX07cy5jb250ZW50Qm94PXt2YWx1ZUZuOiJfZGVmYXVsdENCIixzZXR0ZXI6Il9zZXRDQiIsd3JpdGVPbmNlOm19O3MudGFiSW5kZXg9e3ZhbHVlOm51bGwsdmFsaWRhdG9yOiJfdmFsaWRUYWJJbmRleCJ9O3MuZm9jdXNlZD17dmFsdWU6ITEscmVhZE9ubHk6bX07cy5kaXNhYmxlZD17dmFsdWU6ITF9O3MudmlzaWJsZT17dmFsdWU6bX07cy5oZWlnaHQ9e3ZhbHVlOiIifTtzLndpZHRoPXt2YWx1ZToiIn07cy5zdHJpbmdzPXt2YWx1ZTp7fSxzZXR0ZXI6Il9zdHJTZXR0ZXIiLGdldHRlcjoiX3N0ckdldHRlciJ9O3NbZV09e3ZhbHVlOiExLHdyaXRlT25jZTptfTtxLkNTU19QUkVGSVg9YyhxLk5BTUUudG9Mb3dlckNhc2UoKSk7CnEuZ2V0Q2xhc3NOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGMuYXBwbHkoZCxbcS5DU1NfUFJFRklYXS5jb25jYXQoYS5BcnJheShhcmd1bWVudHMpLCEwKSl9O2I9cS5nZXRDbGFzc05hbWU7cS5nZXRCeU5vZGU9ZnVuY3Rpb24odyl7dmFyIHosQT1iKCk7KHc9Zi5vbmUodykpJiYodz13LmFuY2VzdG9yKCIuIitBLCEwKSkmJih6PXVbYS5zdGFtcCh3LCEwKV0pO3JldHVybiB6fHxudWxsfTthLmV4dGVuZChxLGEuQmFzZSx7Z2V0Q2xhc3NOYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIGMuYXBwbHkoZCxbdGhpcy5fY3NzUHJlZml4XS5jb25jYXQoYS5BcnJheShhcmd1bWVudHMpLCEwKSl9LGluaXRpYWxpemVyOmZ1bmN0aW9uKHcpe3c9dGhpcy5nZXQoImJvdW5kaW5nQm94Iik7dyBpbnN0YW5jZW9mIGYmJnRoaXMuX21hcEluc3RhbmNlKGEuc3RhbXAodykpfSxfbWFwSW5zdGFuY2U6ZnVuY3Rpb24odyl7dVt3XT10aGlzfSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5nZXQoImJvdW5kaW5nQm94Iik7CncgaW5zdGFuY2VvZiBmJiYodz1hLnN0YW1wKHcsITApLHcgaW4gdSYmZGVsZXRlIHVbd10sdGhpcy5fZGVzdHJveUJveCgpKX0sZGVzdHJveTpmdW5jdGlvbih3KXt0aGlzLl9kZXN0cm95QWxsTm9kZXM9dztyZXR1cm4gcS5zdXBlcmNsYXNzLmRlc3Ryb3kuYXBwbHkodGhpcyl9LF9kZXN0cm95Qm94OmZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5nZXQoImJvdW5kaW5nQm94Iiksej10aGlzLmdldCgiY29udGVudEJveCIpLEE9dGhpcy5fZGVzdHJveUFsbE5vZGVzLEg7SD13JiZ3LmNvbXBhcmVUbyh6KTt0aGlzLlVJX0VWRU5UUyYmdGhpcy5fZGVzdHJveVVJRXZlbnRzKCk7dGhpcy5fdW5iaW5kVUkodyk7eiYmKEEmJnouZW1wdHkoKSx6LnJlbW92ZShtKSk7SHx8KEEmJncuZW1wdHkoKSx3LnJlbW92ZShtKSl9LHJlbmRlcjpmdW5jdGlvbih3KXt0aGlzLmdldCgiZGVzdHJveWVkIil8fHRoaXMuZ2V0KCJyZW5kZXJlZCIpfHwodGhpcy5wdWJsaXNoKGUse3F1ZXVhYmxlOiExLGZpcmVPbmNlOm0sCmRlZmF1bHRUYXJnZXRPbmx5Om0sZGVmYXVsdEZuOnRoaXMuX2RlZlJlbmRlckZufSksdGhpcy5maXJlKGUse3BhcmVudE5vZGU6dz9mLm9uZSh3KTpudWxsfSkpO3JldHVybiB0aGlzfSxfZGVmUmVuZGVyRm46ZnVuY3Rpb24odyl7dGhpcy5fcGFyZW50Tm9kZT13LnBhcmVudE5vZGU7dGhpcy5yZW5kZXJlcigpO3RoaXMuX3NldCgicmVuZGVyZWQiLG0pO3RoaXMuX3JlbW92ZUxvYWRpbmdDbGFzc05hbWVzKCl9LHJlbmRlcmVyOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyVUkoKTt0aGlzLnJlbmRlclVJKCk7dGhpcy5fYmluZFVJKCk7dGhpcy5iaW5kVUkoKTt0aGlzLl9zeW5jVUkoKTt0aGlzLnN5bmNVSSgpfSxiaW5kVUk6ayxyZW5kZXJVSTprLHN5bmNVSTprLGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXQoInZpc2libGUiLCExKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNldCgidmlzaWJsZSIsbSl9LGZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldCgiZm9jdXNlZCIsCm0pfSxibHVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldCgiZm9jdXNlZCIsITEpfSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXQoImRpc2FibGVkIiwhMSl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXQoImRpc2FibGVkIixtKX0sX3VpU2l6ZUNCOmZ1bmN0aW9uKHcpe3RoaXMuZ2V0KCJjb250ZW50Qm94IikudG9nZ2xlQ2xhc3MoYigiY29udGVudCIsImV4cGFuZGVkIiksdyl9LF9yZW5kZXJCb3g6ZnVuY3Rpb24odyl7dmFyIHo9dGhpcy5nZXQoImNvbnRlbnRCb3giKSxBPXRoaXMuZ2V0KCJib3VuZGluZ0JveCIpLEg9dGhpcy5nZXQoInNyY05vZGUiKSxGPXRoaXMuREVGX1BBUkVOVF9OT0RFLEI9SCYmSC5nZXQoIm93bmVyRG9jdW1lbnQiKXx8QS5nZXQoIm93bmVyRG9jdW1lbnQiKXx8ei5nZXQoIm93bmVyRG9jdW1lbnQiKTshSHx8SC5jb21wYXJlVG8oeil8fHouaW5Eb2MoQil8fEgucmVwbGFjZSh6KTtBLmNvbXBhcmVUbyh6LmdldCgicGFyZW50Tm9kZSIpKXx8CkEuY29tcGFyZVRvKHopfHwoei5pbkRvYyhCKSYmei5yZXBsYWNlKEEpLEEuYXBwZW5kQ2hpbGQoeikpOyh3PXd8fEYmJmYub25lKEYpKT93LmFwcGVuZENoaWxkKEEpOkEuaW5Eb2MoQil8fGYub25lKCJib2R5IikuaW5zZXJ0KEEsMCl9LF9zZXRCQjpmdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fc2V0Qm94KHRoaXMuZ2V0KCJpZCIpLHcsdGhpcy5CT1VORElOR19URU1QTEFURSwhMCl9LF9zZXRDQjpmdW5jdGlvbih3KXtyZXR1cm4gbnVsbD09PXRoaXMuQ09OVEVOVF9URU1QTEFURT90aGlzLmdldCgiYm91bmRpbmdCb3giKTp0aGlzLl9zZXRCb3gobnVsbCx3LHRoaXMuQ09OVEVOVF9URU1QTEFURSwhMSl9LF9kZWZhdWx0QkI6ZnVuY3Rpb24oKXt2YXIgdz10aGlzLmdldCgic3JjTm9kZSIpLHo9bnVsbD09PXRoaXMuQ09OVEVOVF9URU1QTEFURTtyZXR1cm4gdyYmej93Om51bGx9LF9kZWZhdWx0Q0I6ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuZ2V0KCJzcmNOb2RlIil8fG51bGx9LApfc2V0Qm94OmZ1bmN0aW9uKHcseixBLEgpe3o9Zi5vbmUoeik7enx8KHo9Zi5jcmVhdGUoQSksSD90aGlzLl9iYkZyb21UZW1wbGF0ZT0hMDp0aGlzLl9jYkZyb21UZW1wbGF0ZT0hMCk7ei5nZXQoImlkIil8fHouc2V0KCJpZCIsd3x8YS5ndWlkKCkpO3JldHVybiB6fSxfcmVuZGVyVUk6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJCb3hDbGFzc05hbWVzKCk7dGhpcy5fcmVuZGVyQm94KHRoaXMuX3BhcmVudE5vZGUpfSxfcmVuZGVyQm94Q2xhc3NOYW1lczpmdW5jdGlvbigpe3ZhciB3PXRoaXMuX2dldENsYXNzZXMoKSx6LEE9dGhpcy5nZXQoImJvdW5kaW5nQm94IiksSDtBLmFkZENsYXNzKGIoKSk7Zm9yKEg9dy5sZW5ndGgtMzswPD1IO0gtLSl6PXdbSF0sQS5hZGRDbGFzcyh6LkNTU19QUkVGSVh8fGMoei5OQU1FLnRvTG93ZXJDYXNlKCkpKTt0aGlzLmdldCgiY29udGVudEJveCIpLmFkZENsYXNzKHRoaXMuZ2V0Q2xhc3NOYW1lKCJjb250ZW50IikpfSxfcmVtb3ZlTG9hZGluZ0NsYXNzTmFtZXM6ZnVuY3Rpb24oKXt2YXIgdz0KdGhpcy5nZXQoImJvdW5kaW5nQm94Iiksej10aGlzLmdldCgiY29udGVudEJveCIpLEE9dGhpcy5nZXRDbGFzc05hbWUoImxvYWRpbmciKSxIPWIoImxvYWRpbmciKTt3LnJlbW92ZUNsYXNzKEgpLnJlbW92ZUNsYXNzKEEpO3oucmVtb3ZlQ2xhc3MoSCkucmVtb3ZlQ2xhc3MoQSl9LF9iaW5kVUk6ZnVuY3Rpb24oKXt0aGlzLl9iaW5kQXR0clVJKHRoaXMuX1VJX0FUVFJTLkJJTkQpO3RoaXMuX2JpbmRET00oKX0sX3VuYmluZFVJOmZ1bmN0aW9uKHcpe3RoaXMuX3VuYmluZERPTSh3KX0sX2JpbmRET006ZnVuY3Rpb24oKXt2YXIgdz10aGlzLmdldCgiYm91bmRpbmdCb3giKS5nZXQoIm93bmVyRG9jdW1lbnQiKSx6PXEuX2hEb2NGb2N1czt6fHwoej1xLl9oRG9jRm9jdXM9dy5vbigiZm9jdXMiLHRoaXMuX29uRG9jRm9jdXMsdGhpcyksei5saXN0ZW5lcnM9e2NvdW50OjB9KTt6Lmxpc3RlbmVyc1thLnN0YW1wKHRoaXMsITApXT0hMDt6Lmxpc3RlbmVycy5jb3VudCsrO2gmJih0aGlzLl9oRG9jTW91c2VEb3duPQp3Lm9uKCJtb3VzZWRvd24iLHRoaXMuX29uRG9jTW91c2VEb3duLHRoaXMpKX0sX3VuYmluZERPTTpmdW5jdGlvbih3KXt3PXEuX2hEb2NGb2N1czt2YXIgej1hLnN0YW1wKHRoaXMsITApLEEsSD10aGlzLl9oRG9jTW91c2VEb3duO3cmJihBPXcubGlzdGVuZXJzLEFbel0mJihkZWxldGUgQVt6XSxBLmNvdW50LS0pLDA9PT1BLmNvdW50JiYody5kZXRhY2goKSxxLl9oRG9jRm9jdXM9bnVsbCkpO2gmJkgmJkguZGV0YWNoKCl9LF9zeW5jVUk6ZnVuY3Rpb24oKXt0aGlzLl9zeW5jQXR0clVJKHRoaXMuX1VJX0FUVFJTLlNZTkMpfSxfdWlTZXRIZWlnaHQ6ZnVuY3Rpb24odyl7dGhpcy5fdWlTZXREaW0oImhlaWdodCIsdyk7dGhpcy5fdWlTaXplQ0IoIiIhPT13JiYiYXV0byIhPT13KX0sX3VpU2V0V2lkdGg6ZnVuY3Rpb24odyl7dGhpcy5fdWlTZXREaW0oIndpZHRoIix3KX0sX3VpU2V0RGltOmZ1bmN0aW9uKHcseil7dGhpcy5nZXQoImJvdW5kaW5nQm94Iikuc2V0U3R5bGUodyx0LmlzTnVtYmVyKHopPwp6K3RoaXMuREVGX1VOSVQ6eil9LF91aVNldFZpc2libGU6ZnVuY3Rpb24odyl7dGhpcy5nZXQoImJvdW5kaW5nQm94IikudG9nZ2xlQ2xhc3ModGhpcy5nZXRDbGFzc05hbWUoImhpZGRlbiIpLCF3KX0sX3VpU2V0RGlzYWJsZWQ6ZnVuY3Rpb24odyl7dGhpcy5nZXQoImJvdW5kaW5nQm94IikudG9nZ2xlQ2xhc3ModGhpcy5nZXRDbGFzc05hbWUoImRpc2FibGVkIiksdyl9LF91aVNldEZvY3VzZWQ6ZnVuY3Rpb24odyx6KXt2YXIgQT10aGlzLmdldCgiYm91bmRpbmdCb3giKTtBLnRvZ2dsZUNsYXNzKHRoaXMuZ2V0Q2xhc3NOYW1lKCJmb2N1c2VkIiksdyk7eiE9PXAmJih3P0EuZm9jdXMoKTpBLmJsdXIoKSl9LF91aVNldFRhYkluZGV4OmZ1bmN0aW9uKHcpe3ZhciB6PXRoaXMuZ2V0KCJib3VuZGluZ0JveCIpO3QuaXNOdW1iZXIodyk/ei5zZXQoInRhYkluZGV4Iix3KTp6LnJlbW92ZUF0dHJpYnV0ZSgidGFiSW5kZXgiKX0sX29uRG9jTW91c2VEb3duOmZ1bmN0aW9uKHcpe3RoaXMuX2RvbUZvY3VzJiYKdGhpcy5fb25Eb2NGb2N1cyh3KX0sX29uRG9jRm9jdXM6ZnVuY3Rpb24odyl7dz1xLmdldEJ5Tm9kZSh3LnRhcmdldCk7dmFyIHo9cS5fYWN0aXZlO3omJnohPT13JiYoei5fZG9tRm9jdXM9ITEsei5fc2V0KCJmb2N1c2VkIiwhMSx7c3JjOnB9KSxxLl9hY3RpdmU9bnVsbCk7dyYmKHcuX2RvbUZvY3VzPSEwLHcuX3NldCgiZm9jdXNlZCIsITAse3NyYzpwfSkscS5fYWN0aXZlPXcpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUrIlsiK3RoaXMuZ2V0KCJpZCIpKyJdIn0sREVGX1VOSVQ6InB4IixERUZfUEFSRU5UX05PREU6bnVsbCxDT05URU5UX1RFTVBMQVRFOiJceDNjZGl2XHgzZVx4M2MvZGl2XHgzZSIsQk9VTkRJTkdfVEVNUExBVEU6Ilx4M2NkaXZceDNlXHgzYy9kaXZceDNlIixfZ3VpZDpmdW5jdGlvbigpe3JldHVybiBhLmd1aWQoKX0sX3ZhbGlkVGFiSW5kZXg6ZnVuY3Rpb24odyl7cmV0dXJuIHQuaXNOdW1iZXIodyl8fHQuaXNOdWxsKHcpfSxfYmluZEF0dHJVSTpmdW5jdGlvbih3KXt2YXIgeiwKQT13Lmxlbmd0aDtmb3Ioej0wO3o8QTt6KyspdGhpcy5hZnRlcih3W3pdKyJDaGFuZ2UiLHRoaXMuX3NldEF0dHJVSSl9LF9zeW5jQXR0clVJOmZ1bmN0aW9uKHcpe3ZhciB6LEE9dy5sZW5ndGgsSDtmb3Ioej0wO3o8QTt6KyspSD13W3pdLHRoaXNbIl91aVNldCIrZyhIKV0odGhpcy5nZXQoSCkpfSxfc2V0QXR0clVJOmZ1bmN0aW9uKHcpe2lmKHcudGFyZ2V0PT09dGhpcyl0aGlzWyJfdWlTZXQiK2cody5hdHRyTmFtZSldKHcubmV3VmFsLHcuc3JjKX0sX3N0clNldHRlcjpmdW5jdGlvbih3KXtyZXR1cm4gYS5tZXJnZSh0aGlzLmdldCgic3RyaW5ncyIpLHcpfSxnZXRTdHJpbmc6ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuZ2V0KCJzdHJpbmdzIilbd119LGdldFN0cmluZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoInN0cmluZ3MiKX0sX1VJX0FUVFJTOntCSU5EOmwsU1lOQzpsfX0pO2EuV2lkZ2V0PXF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczoiYXR0cmlidXRlIGJhc2UtYmFzZSBiYXNlLXBsdWdpbmhvc3QgY2xhc3NuYW1lbWFuYWdlciBldmVudC1mb2N1cyBub2RlLWJhc2Ugbm9kZS1zdHlsZSIuc3BsaXQoIiAiKSwKc2tpbm5hYmxlOiEwfSk7CllVSS5hZGQoIndpZGdldC1odG1scGFyc2VyIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuV2lkZ2V0LHQ9YS5Ob2RlLGY9YS5MYW5nO3EuSFRNTF9QQVJTRVI9e307cS5fYnVpbGRDZmc9e2FnZ3JlZ2F0ZXM6WyJIVE1MX1BBUlNFUiJdfTtxLkFUVFJTLnNyY05vZGU9e3ZhbHVlOm51bGwsc2V0dGVyOnQub25lLGdldHRlcjoiX2dldFNyY05vZGUiLHdyaXRlT25jZTohMH07YS5taXgocS5wcm90b3R5cGUse19nZXRTcmNOb2RlOmZ1bmN0aW9uKGQpe3JldHVybiBkfHx0aGlzLmdldCgiY29udGVudEJveCIpfSxfcHJlQWRkQXR0cnM6ZnVuY3Rpb24oZCxjLGIpe3ZhciBnPXtpZDpkLmlkLGJvdW5kaW5nQm94OmQuYm91bmRpbmdCb3gsY29udGVudEJveDpkLmNvbnRlbnRCb3gsc3JjTm9kZTpkLnNyY05vZGV8fGEuT2JqZWN0KHEuQVRUUlMuc3JjTm9kZSl9O3RoaXMuYWRkQXR0cnMoZyxjLGIpO2RlbGV0ZSBkLmJvdW5kaW5nQm94O2RlbGV0ZSBkLmNvbnRlbnRCb3g7ZGVsZXRlIGQuc3JjTm9kZTsKZGVsZXRlIGQuaWQ7dGhpcy5fYXBwbHlQYXJzZXImJnRoaXMuX2FwcGx5UGFyc2VyKGMpfSxfYXBwbHlQYXJzZWRDb25maWc6ZnVuY3Rpb24oZCxjLGIpe3JldHVybiBiP2EubWl4KGMsYiwhMSk6Y30sX2FwcGx5UGFyc2VyOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMsYj10aGlzLl9nZXROb2RlVG9QYXJzZSgpLGc9Yy5fZ2V0SHRtbFBhcnNlcigpLGUsaztnJiZiJiZhLk9iamVjdC5lYWNoKGcsZnVuY3Rpb24obSxwLHMpe2s9bnVsbDtmLmlzRnVuY3Rpb24obSk/az1tLmNhbGwoYyxiKTpmLmlzQXJyYXkobSk/KGs9Yi5hbGwobVswXSksay5pc0VtcHR5KCkmJihrPW51bGwpKTprPWIub25lKG0pO251bGwhPT1rJiZ2b2lkIDAhPT1rJiYoZT1lfHx7fSxlW3BdPWspfSk7ZD1jLl9hcHBseVBhcnNlZENvbmZpZyhiLGQsZSl9LF9nZXROb2RlVG9QYXJzZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuZ2V0KCJzcmNOb2RlIik7cmV0dXJuIHRoaXMuX2NiRnJvbVRlbXBsYXRlP251bGw6ZH0sX2dldEh0bWxQYXJzZXI6ZnVuY3Rpb24oKXt2YXIgZD0KdGhpcy5fZ2V0Q2xhc3NlcygpLGM9e30sYixnO2ZvcihiPWQubGVuZ3RoLTE7MDw9YjtiLS0pKGc9ZFtiXS5IVE1MX1BBUlNFUikmJmEubWl4KGMsZywhMCk7cmV0dXJuIGN9fSl9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbIndpZGdldC1iYXNlIl19KTtZVUkuYWRkKCJ3aWRnZXQtc2tpbiIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLkNsYXNzTmFtZU1hbmFnZXIuZ2V0Q2xhc3NOYW1lO2EuV2lkZ2V0LnByb3RvdHlwZS5nZXRTa2luTmFtZT1mdW5jdGlvbih0KXt2YXIgZj10aGlzLmdldCgiY29udGVudEJveCIpfHx0aGlzLmdldCgiYm91bmRpbmdCb3giKSxkLGM7dD10fHxxKCJza2luIiwiIik7Yz1SZWdFeHAoIlxcYiIrdCsiKFxcUyspIik7ZiYmZi5hbmNlc3RvcihmdW5jdGlvbihiKXtyZXR1cm4gZD1iLmdldCgiY2xhc3NOYW1lIikubWF0Y2goYyl9KTtyZXR1cm4gZD9kWzFdOm51bGx9fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ3aWRnZXQtYmFzZSJdfSk7CllVSS5hZGQoIndpZGdldC11aWV2ZW50cyIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLldpZGdldCx0PWEuTGFuZyxmPWEuV2lkZ2V0Ll91aWV2dHM9YS5XaWRnZXQuX3VpZXZ0c3x8e307YS5taXgocS5wcm90b3R5cGUse19kZXN0cm95VUlFdmVudHM6ZnVuY3Rpb24oKXt2YXIgZD1hLnN0YW1wKHRoaXMsITApO2EuZWFjaChmLGZ1bmN0aW9uKGMsYil7Yy5pbnN0YW5jZXNbZF0mJihkZWxldGUgYy5pbnN0YW5jZXNbZF0sYS5PYmplY3QuaXNFbXB0eShjLmluc3RhbmNlcykmJihjLmhhbmRsZS5kZXRhY2goKSxmW2JdJiZkZWxldGUgZltiXSkpfSl9LFVJX0VWRU5UUzphLk5vZGUuRE9NX0VWRU5UUyxfZ2V0VUlFdmVudE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoImJvdW5kaW5nQm94Iil9LF9jcmVhdGVVSUV2ZW50OmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuX2dldFVJRXZlbnROb2RlKCksYj1hLnN0YW1wKGMpK2QsZz1mW2JdO2d8fChkPWMuZGVsZWdhdGUoZCxmdW5jdGlvbihlKXt2YXIgaz0KcS5nZXRCeU5vZGUodGhpcyk7ayYmay5fZmlsdGVyVUlFdmVudChlKSYmay5maXJlKGUudHlwZSx7ZG9tRXZlbnQ6ZX0pfSwiLiIrYS5XaWRnZXQuZ2V0Q2xhc3NOYW1lKCkpLGZbYl09Zz17aW5zdGFuY2VzOnt9LGhhbmRsZTpkfSk7Zy5pbnN0YW5jZXNbYS5zdGFtcCh0aGlzKV09MX0sX2ZpbHRlclVJRXZlbnQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGQuY3VycmVudFRhcmdldC5jb21wYXJlVG8oZC5jb250YWluZXIpfHxkLmNvbnRhaW5lci5jb21wYXJlVG8odGhpcy5fZ2V0VUlFdmVudE5vZGUoKSl9LF9nZXRVSUV2ZW50OmZ1bmN0aW9uKGQpe2lmKHQuaXNTdHJpbmcoZCkpe2Q9dGhpcy5wYXJzZVR5cGUoZClbMV07dmFyIGMsYjtkJiYoYz1kLmluZGV4T2YoIjoiKSwtMTxjJiYoZD1kLnN1YnN0cmluZyhjKzEpKSx0aGlzLlVJX0VWRU5UU1tkXSYmKGI9ZCkpO3JldHVybiBifX0sX2luaXRVSUV2ZW50OmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuX2dldFVJRXZlbnQoZCk7ZD10aGlzLl91aUV2dHNJbml0UXVldWV8fAp7fTtjJiYhZFtjXSYmKHRoaXMuX3VpRXZ0c0luaXRRdWV1ZT1kW2NdPTEsdGhpcy5hZnRlcigicmVuZGVyIixmdW5jdGlvbigpe3RoaXMuX2NyZWF0ZVVJRXZlbnQoYyk7ZGVsZXRlIHRoaXMuX3VpRXZ0c0luaXRRdWV1ZVtjXX0pKX0sb246ZnVuY3Rpb24oZCl7dGhpcy5faW5pdFVJRXZlbnQoZCk7cmV0dXJuIHEuc3VwZXJjbGFzcy5vbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHB1Ymxpc2g6ZnVuY3Rpb24oZCxjKXt2YXIgYj10aGlzLl9nZXRVSUV2ZW50KGQpO2ImJmMmJmMuZGVmYXVsdEZuJiZ0aGlzLl9pbml0VUlFdmVudChiKTtyZXR1cm4gcS5zdXBlcmNsYXNzLnB1Ymxpc2guYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sITApfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJub2RlLWV2ZW50LWRlbGVnYXRlIiwid2lkZ2V0LWJhc2UiXX0pOwpZVUkuYWRkKCJ5dWktdGhyb3R0bGUiLGZ1bmN0aW9uKGEsRSl7YS50aHJvdHRsZT1mdW5jdGlvbihxLHQpe3Q9dD90OmEuY29uZmlnLnRocm90dGxlVGltZXx8MTUwO2lmKC0xPT09dClyZXR1cm4gZnVuY3Rpb24oKXtxLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIGY9YS5MYW5nLm5vdygpO3JldHVybiBmdW5jdGlvbigpe3ZhciBkPWEuTGFuZy5ub3coKTtkLWY+dCYmKGY9ZCxxLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsieXVpLWJhc2UiXX0pOwpZVUkuYWRkKCJhdWktYmFzZS1jb3JlIixmdW5jdGlvbihhLEUpe1lVSS5FbnYuYWxpYXNlcz1ZVUkuRW52LmFsaWFzZXN8fHt9O2EubWl4KFlVSS5FbnYuYWxpYXNlcyx7ImF1aS1hdXRvc2l6ZSI6WyJhdWktYXV0b3NpemUtaWZyYW1lIl0sImF1aS1iYXNlIjoib29wIHl1aS10aHJvdHRsZSBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktZGVib3VuY2UgYXVpLWJhc2UtY29yZSBhdWktYmFzZS1sYW5nIGF1aS1ub2RlLWJhc2UiLnNwbGl0KCIgIiksImF1aS1iYXNlLWRlcHJlY2F0ZWQiOiJhdWktYmFzZSBhdWktbm9kZSBhdWktY29tcG9uZW50IGF1aS1kZWxheWVkLXRhc2stZGVwcmVjYXRlZCBhdWktc2VsZWN0b3IgYXVpLWV2ZW50LWJhc2UiLnNwbGl0KCIgIiksImF1aS1idXR0b24iOlsiYXVpLWJ1dHRvbi1jb3JlIl0sImF1aS1jb2xsZWN0aW9uIjpbImF1aS1tYXAiLCJhdWktc2V0IiwiYXVpLWxpbmtlZHNldCJdLCJhdWktY29sb3ItcGlja2VyLWRlcHJlY2F0ZWQiOlsiYXVpLWNvbG9yLXBpY2tlci1iYXNlLWRlcHJlY2F0ZWQiLAoiYXVpLWNvbG9yLXBpY2tlci1ncmlkLXBsdWdpbi1kZXByZWNhdGVkIl0sImF1aS1kYXRhc291cmNlLWNvbnRyb2wtZGVwcmVjYXRlZCI6WyJhdWktZGF0YXNvdXJjZS1jb250cm9sLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1pbnB1dC10ZXh0LWNvbnRyb2wtZGVwcmVjYXRlZCJdLCJhdWktZGF0YXRhYmxlIjpbImF1aS1kYXRhdGFibGUtZWRpdCIsImF1aS1kYXRhdGFibGUtaGlnaGxpZ2h0IiwiYXVpLWRhdGF0YWJsZS1zZWxlY3Rpb24iLCJhdWktZGF0YXRhYmxlLXByb3BlcnR5LWxpc3QiXSwiYXVpLWRhdGF0YWJsZS1lZGl0IjoiZGF0YXRhYmxlLWJhc2UgY2FsZW5kYXIgb3ZlcmxheSBzb3J0YWJsZSBhdWktZGF0YXR5cGUgYXVpLXRvb2xiYXIgYXVpLWZvcm0tdmFsaWRhdG9yIGF1aS1kYXRhdGFibGUtYmFzZS1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLWJhc2Utb3B0aW9ucy1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLWNlbGwtZWRpdG9yLXN1cHBvcnQgYXVpLWRhdGF0YWJsZS1jb3JlIGF1aS1kYXRhdGFibGUtY2hlY2tib3gtY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS1kYXRlLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtZHJvcGRvd24tY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS1yYWRpby1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLXRleHQtY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS10ZXh0LWFyZWEtY2VsbC1lZGl0b3IiLnNwbGl0KCIgIiksCiJhdWktZGF0ZXBpY2tlci1kZXByZWNhdGVkIjpbImF1aS1kYXRlcGlja2VyLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1kYXRlcGlja2VyLXNlbGVjdC1kZXByZWNhdGVkIl0sImF1aS1ldmVudCI6WyJhdWktZXZlbnQtYmFzZSJdLCJhdWktZm9ybS1kZXByZWNhdGVkIjoiYXVpLWZvcm0tYmFzZS1kZXByZWNhdGVkIGF1aS1mb3JtLWNvbWJvYm94LWRlcHJlY2F0ZWQgYXVpLWZvcm0tZmllbGQtZGVwcmVjYXRlZCBhdWktZm9ybS1zZWxlY3QtZGVwcmVjYXRlZCBhdWktZm9ybS10ZXh0YXJlYS1kZXByZWNhdGVkIGF1aS1mb3JtLXRleHRmaWVsZC1kZXByZWNhdGVkIi5zcGxpdCgiICIpLCJhdWktaW8iOlsiYXVpLWlvLXJlcXVlc3QiXSwiYXVpLWlvLWRlcHJlY2F0ZWQiOlsiYXVpLWlvLXJlcXVlc3QiLCJhdWktaW8tcGx1Z2luLWRlcHJlY2F0ZWQiXSwiYXVpLW5vZGUiOlsiYXVpLW5vZGUtYmFzZSJdLCJhdWktb3ZlcmxheS1kZXByZWNhdGVkIjpbImF1aS1vdmVybGF5LWJhc2UtZGVwcmVjYXRlZCIsCiJhdWktb3ZlcmxheS1jb250ZXh0LWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1jb250ZXh0LXBhbmVsLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1tYW5hZ2VyLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1tYXNrLWRlcHJlY2F0ZWQiXSwiYXVpLXJhdGluZyI6WyJhdWktcmF0aW5nLWJhc2UiLCJhdWktcmF0aW5nLXRodW1iIl0sImF1aS1yZXNpemUtZGVwcmVjYXRlZCI6WyJhdWktcmVzaXplLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1yZXNpemUtY29uc3RyYWluLWRlcHJlY2F0ZWQiXSwiYXVpLXNjaGVkdWxlciI6ImV2ZW50LWdlc3R1cmVzIGF1aS1zY2hlZHVsZXItYmFzZSBhdWktc2NoZWR1bGVyLWV2ZW50LXJlY29yZGVyIGF1aS1zY2hlZHVsZXItdmlldy1hZ2VuZGEgYXVpLXNjaGVkdWxlci12aWV3LWRheSBhdWktc2NoZWR1bGVyLXZpZXctbW9udGggYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlLWRkIGF1aS1zY2hlZHVsZXItdmlldy10YWJsZSBhdWktc2NoZWR1bGVyLXZpZXctd2VlayBhdWktdmlld3BvcnQiLnNwbGl0KCIgIiksCiJhdWktc2VhcmNoIjpbImF1aS1zZWFyY2gtdHN0Il0sImF1aS1zb3J0YWJsZSI6WyJhdWktc29ydGFibGUtbGF5b3V0IiwiYXVpLXNvcnRhYmxlLWxpc3QiXSwiYXVpLXN1cmZhY2UiOlsiYXVpLXN1cmZhY2UtYXBwIiwiYXVpLXN1cmZhY2Utc2NyZWVuIl0sImF1aS10b2dnbGVyIjpbImF1aS10b2dnbGVyLWJhc2UiLCJhdWktdG9nZ2xlci1kZWxlZ2F0ZSJdLCJhdWktdG9vbHRpcCI6WyJhdWktdG9vbHRpcC1iYXNlIiwiYXVpLXRvb2x0aXAtZGVsZWdhdGUiXSwiYXVpLXRwbC1zbmlwcGV0cy1kZXByZWNhdGVkIjpbImF1aS10cGwtc25pcHBldHMtYmFzZS1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy1jaGVja2JveC1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy1pbnB1dC1kZXByZWNhdGVkIiwiYXVpLXRwbC1zbmlwcGV0cy1zZWxlY3QtZGVwcmVjYXRlZCIsImF1aS10cGwtc25pcHBldHMtdGV4dGFyZWEtZGVwcmVjYXRlZCJdLCJhdWktdHJlZSI6WyJhdWktdHJlZS1kYXRhIiwKImF1aS10cmVlLWlvIiwiYXVpLXRyZWUtbm9kZSIsImF1aS10cmVlLXBhZ2luYXRvciIsImF1aS10cmVlLXZpZXciXSwiYXVpLXdpZGdldCI6WyJhdWktd2lkZ2V0LWNzc2NsYXNzIiwiYXVpLXdpZGdldC10b29sYmFycyJdLCJhdWktd2lkZ2V0LWNvcmUiOlsiYXVpLXdpZGdldC1jc3NjbGFzcyJdfSk7WVVJLkVudlthLnZlcnNpb25dLm1vZHVsZXM9WVVJLkVudlthLnZlcnNpb25dLm1vZHVsZXN8fHt9O2EubWl4KFlVSS5FbnZbYS52ZXJzaW9uXS5tb2R1bGVzLHsiYXVpLWFjZS1hdXRvY29tcGxldGUtYmFzZSI6e3JlcXVpcmVzOlsiYXVpLWFjZS1lZGl0b3IiXX0sImF1aS1hY2UtYXV0b2NvbXBsZXRlLWZyZWVtYXJrZXIiOntyZXF1aXJlczpbImF1aS1hY2UtYXV0b2NvbXBsZXRlLXRlbXBsYXRlcHJvY2Vzc29yIl19LCJhdWktYWNlLWF1dG9jb21wbGV0ZS1saXN0Ijp7cmVxdWlyZXM6WyJhdWktYWNlLWF1dG9jb21wbGV0ZS1iYXNlIiwib3ZlcmxheSIsIndpZGdldC1hdXRvaGlkZSJdLApza2lubmFibGU6ITB9LCJhdWktYWNlLWF1dG9jb21wbGV0ZS1wbHVnaW4iOntyZXF1aXJlczpbImF1aS1hY2UtYXV0b2NvbXBsZXRlLWxpc3QiLCJwbHVnaW4iXX0sImF1aS1hY2UtYXV0b2NvbXBsZXRlLXRlbXBsYXRlcHJvY2Vzc29yIjp7cmVxdWlyZXM6WyJhdWktYWNlLWF1dG9jb21wbGV0ZS1iYXNlIl19LCJhdWktYWNlLWF1dG9jb21wbGV0ZS12ZWxvY2l0eSI6e3JlcXVpcmVzOlsiYXVpLWFjZS1hdXRvY29tcGxldGUtdGVtcGxhdGVwcm9jZXNzb3IiXX0sImF1aS1hY2UtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktbm9kZSIsImF1aS1jb21wb25lbnQiXX0sImF1aS1hZmZpeCI6e3JlcXVpcmVzOlsiYmFzZSIsIm5vZGUtc2NyZWVuIiwiYXVpLW5vZGUiXX0sImF1aS1hbGVydCI6e3JlcXVpcmVzOiJ0aW1lcnMgd2lkZ2V0IHdpZGdldC1zdGRtb2QgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLXdpZGdldC1jc3NjbGFzcyBhdWktd2lkZ2V0LXRyYW5zaXRpb24iLnNwbGl0KCIgIiksCnNraW5uYWJsZTohMH0sImF1aS1hcmlhIjp7cmVxdWlyZXM6WyJwbHVnaW4iLCJhdWktY29tcG9uZW50Il19LCJhdWktYXJpYS10YWJsZS1zb3J0YWJsZSI6e3JlcXVpcmVzOlsiYXVpLWFyaWEiXX0sImF1aS1hcnJheXNvcnQiOntyZXF1aXJlczpbImFycmF5c29ydCJdfSwiYXVpLWF1ZGlvIjp7cmVxdWlyZXM6WyJhdWktYXJpYSIsImF1aS1ub2RlIiwiYXVpLWNvbXBvbmVudCIsInF1ZXJ5c3RyaW5nLXN0cmluZ2lmeS1zaW1wbGUiXSxza2lubmFibGU6ITB9LCJhdWktYXV0b2NvbXBsZXRlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1iYXNlLWRlcHJlY2F0ZWQiLCJkYXRhc291cmNlIiwiZGF0YXNjaGVtYSIsImF1aS1mb3JtLWNvbWJvYm94LWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktYXV0b3NpemUiOnt1c2U6WyJhdWktYXV0b3NpemUtaWZyYW1lIl19LCJhdWktYXV0b3NpemUtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiZXZlbnQtdmFsdWVjaGFuZ2UiLAoicGx1Z2luIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1hdXRvc2l6ZS1pZnJhbWUiOntyZXF1aXJlczpbInBsdWdpbiIsImF1aS1jb21wb25lbnQiLCJhdWktdGltZXIiLCJhdWktbm9kZS1iYXNlIl19LCJhdWktYmFzZSI6e3VzZToib29wIHl1aS10aHJvdHRsZSBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktZGVib3VuY2UgYXVpLWJhc2UtY29yZSBhdWktYmFzZS1sYW5nIGF1aS1ub2RlLWJhc2UiLnNwbGl0KCIgIil9LCJhdWktYmFzZS1jb3JlIjp7fSwiYXVpLWJhc2UtZGVwcmVjYXRlZCI6e3VzZToiYXVpLWJhc2UgYXVpLW5vZGUgYXVpLWNvbXBvbmVudCBhdWktZGVsYXllZC10YXNrLWRlcHJlY2F0ZWQgYXVpLXNlbGVjdG9yIGF1aS1ldmVudC1iYXNlIi5zcGxpdCgiICIpfSwiYXVpLWJhc2UtaHRtbDUtc2hpdiI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWJhc2UtaHRtbDUtc2hpdiIsdHJpZ2dlcjoibm9kZS1iYXNlIix1YToiaWUifX0sImF1aS1iYXNlLWxhbmciOnt9LAoiYXVpLWJvb2xlYW4tZGF0YS1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1idXR0b24tc3dpdGNoIiwiYXVpLWRhdGEtZWRpdG9yIl19LCJhdWktYnV0dG9uIjp7dXNlOlsiYXVpLWJ1dHRvbi1jb3JlIl19LCJhdWktYnV0dG9uLWNvcmUiOntyZXF1aXJlczoiYnV0dG9uIGJ1dHRvbi1ncm91cCBidXR0b24tcGx1Z2luIGF1aS1jb21wb25lbnQgYXVpLXdpZGdldC1jc3NjbGFzcyBhdWktd2lkZ2V0LXRvZ2dsZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktYnV0dG9uLWl0ZW0tZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1zdGF0ZS1pbnRlcmFjdGlvbi1kZXByZWNhdGVkIiwid2lkZ2V0LWNoaWxkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWJ1dHRvbi1zZWFyY2gtY2FuY2VsIjp7cmVxdWlyZXM6ImFycmF5LWludm9rZSBiYXNlIGJhc2UtYnVpbGQgZXZlbnQtZm9jdXMgZXZlbnQtbW92ZSBldmVudC1yZXNpemUgbm9kZS1zY3JlZW4gbm9kZS1ldmVudC1kZWxlZ2F0ZSBhdWktbm9kZS1iYXNlIGF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS1ldmVudC1pbnB1dCIuc3BsaXQoIiAiKX0sCiJhdWktYnV0dG9uLXN3aXRjaCI6e3JlcXVpcmVzOlsiYXVpLW5vZGUtYmFzZSIsImJhc2UtYnVpbGQiLCJldmVudC1rZXkiLCJ0cmFuc2l0aW9uIiwid2lkZ2V0Il0sc2tpbm5hYmxlOiEwfSwiYXVpLWNhcm91c2VsIjp7cmVxdWlyZXM6ImFuaW0gYXVpLWV2ZW50IGF1aS1pbWFnZS12aWV3ZXItYmFzZSBhdWktaW1hZ2Utdmlld2VyLXNsaWRlc2hvdyBub2RlLWV2ZW50LWRlbGVnYXRlIG5vZGUtZm9jdXNtYW5hZ2VyIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1jYXJvdXNlbC1tb2JpbGUtdG91Y2giOntjb25kaXRpb246e25hbWU6ImF1aS1jYXJvdXNlbC1tb2JpbGUtdG91Y2giLHRlc3Q6ZnVuY3Rpb24ocSl7cmV0dXJuIHEuVUEubW9iaWxlJiZxLlVBLnRvdWNoRW5hYmxlZH0sdHJpZ2dlcjoiYXVpLWNhcm91c2VsIn0scmVxdWlyZXM6WyJiYXNlLWJ1aWxkIiwiYXVpLWNhcm91c2VsIl19LCJhdWktY2Fyb3VzZWwtc3dpcGUiOntjb25kaXRpb246e25hbWU6ImF1aS1jYXJvdXNlbC1zd2lwZSIsCnRyaWdnZXI6ImF1aS1jYXJvdXNlbCIsdWE6InRvdWNoRW5hYmxlZCJ9LHJlcXVpcmVzOlsiYXVpLWNhcm91c2VsIiwiYXVpLXdpZGdldC1zd2lwZSIsImJhc2UtYnVpbGQiXSxza2lubmFibGU6ITB9LCJhdWktY2hhci1jb3VudGVyIjp7cmVxdWlyZXM6WyJhdWktYXJpYSIsImF1aS1ub2RlIiwiYXVpLWV2ZW50LWlucHV0IiwiYXVpLWNvbXBvbmVudCJdfSwiYXVpLWNoYXJ0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImRhdGFzb3VyY2UiLCJqc29uIiwiYXVpLXN3Zi1kZXByZWNhdGVkIl19LCJhdWktY2xhc3NuYW1lbWFuYWdlciI6e3JlcXVpcmVzOlsiY2xhc3NuYW1lbWFuYWdlciJdfSwiYXVpLWNvbGxlY3Rpb24iOnt1c2U6WyJhdWktbWFwIiwiYXVpLXNldCIsImF1aS1saW5rZWRzZXQiXX0sImF1aS1jb2xvci1wYWxldHRlIjp7cmVxdWlyZXM6ImFycmF5LWV4dHJhcyBhdWktcGFsZXR0ZSBjb2xvci1iYXNlIG5vZGUtY29yZSBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LCJhdWktY29sb3ItcGlja2VyLWJhc2UiOntyZXF1aXJlczpbImF1aS1jb2xvci1wYWxldHRlIiwiYXVpLWhzdmEtcGFsZXR0ZS1tb2RhbCIsImV2ZW50LW91dHNpZGUiXSxza2lubmFibGU6ITB9LCJhdWktY29sb3ItcGlja2VyLWJhc2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOiJkZC1kcmFnIHBhbmVsIHNsaWRlciBhdWktYnV0dG9uLWl0ZW0tZGVwcmVjYXRlZCBhdWktY29sb3ItdXRpbC1kZXByZWNhdGVkIGF1aS1mb3JtLWJhc2UtZGVwcmVjYXRlZCBhdWktb3ZlcmxheS1jb250ZXh0LWRlcHJlY2F0ZWQiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWNvbG9yLXBpY2tlci1kZXByZWNhdGVkIjp7dXNlOlsiYXVpLWNvbG9yLXBpY2tlci1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktY29sb3ItcGlja2VyLWdyaWQtcGx1Z2luLWRlcHJlY2F0ZWQiXX0sImF1aS1jb2xvci1waWNrZXItZ3JpZC1wbHVnaW4tZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsicGx1Z2luIiwKImF1aS1jb2xvci1waWNrZXItYmFzZS1kZXByZWNhdGVkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWNvbG9yLXBpY2tlci1wb3BvdmVyIjp7cmVxdWlyZXM6WyJhdWktY29sb3ItcGlja2VyLWJhc2UiLCJhdWktcG9wb3ZlciIsImF1aS13aWRnZXQtY3NzY2xhc3MiLCJhdWktd2lkZ2V0LXRvZ2dsZSJdLHNraW5uYWJsZTohMH0sImF1aS1jb2xvci11dGlsLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbXX0sImF1aS1jb21wb25lbnQiOntyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiYXVpLXdpZGdldC1jc3NjbGFzcyIsImF1aS13aWRnZXQtdG9nZ2xlIiwiYmFzZS1idWlsZCIsIndpZGdldC1iYXNlIl19LCJhdWktY3NzIjp7dHlwZToiY3NzIn0sImF1aS1kYXRhLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJiYXNlLWJ1aWxkIiwibm9kZS1iYXNlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGEtc2V0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbIm9vcCIsCiJjb2xsZWN0aW9uIiwiYmFzZSJdfSwiYXVpLWRhdGFzb3VyY2UtY29udHJvbC1iYXNlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImRhdGFzb3VyY2UiLCJkYXRhc2NoZW1hIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLWRhdGFzb3VyY2UtY29udHJvbC1kZXByZWNhdGVkIjp7dXNlOlsiYXVpLWRhdGFzb3VyY2UtY29udHJvbC1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktaW5wdXQtdGV4dC1jb250cm9sLWRlcHJlY2F0ZWQiXX0sImF1aS1kYXRhdGFibGUiOnt1c2U6WyJhdWktZGF0YXRhYmxlLWVkaXQiLCJhdWktZGF0YXRhYmxlLWhpZ2hsaWdodCIsImF1aS1kYXRhdGFibGUtc2VsZWN0aW9uIiwiYXVpLWRhdGF0YWJsZS1wcm9wZXJ0eS1saXN0Il19LCJhdWktZGF0YXRhYmxlLWJhc2UtY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImRhdGF0YWJsZS1iYXNlIiwib3ZlcmxheSJdLHNraW5uYWJsZTohMH0sImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktZGF0YXRhYmxlLWJhc2UtY2VsbC1lZGl0b3IiLAoiZXNjYXBlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGF0YWJsZS1ib2R5Ijp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImRhdGF0YWJsZS1iYXNlIiwiZXZlbnQta2V5IiwiYXVpLWV2ZW50LWJhc2UiXX0sImF1aS1kYXRhdGFibGUtY2VsbC1lZGl0b3Itc3VwcG9ydCI6e3JlcXVpcmVzOlsiZGF0YXRhYmxlLWJhc2UiXX0sImF1aS1kYXRhdGFibGUtY2hlY2tib3gtY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIl19LCJhdWktZGF0YXRhYmxlLWNvcmUiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYm9keSIsImRhdGF0YWJsZS1iYXNlIiwiZXZlbnQta2V5IiwiYXVpLWV2ZW50LWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktZGF0YXRhYmxlLWRhdGUtY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIl19LCJhdWktZGF0YXRhYmxlLWRyb3Bkb3duLWNlbGwtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktZGF0YXRhYmxlLWJhc2Utb3B0aW9ucy1jZWxsLWVkaXRvciJdfSwKImF1aS1kYXRhdGFibGUtZWRpdCI6e3VzZToiZGF0YXRhYmxlLWJhc2UgY2FsZW5kYXIgb3ZlcmxheSBzb3J0YWJsZSBhdWktZGF0YXR5cGUgYXVpLXRvb2xiYXIgYXVpLWZvcm0tdmFsaWRhdG9yIGF1aS1kYXRhdGFibGUtYmFzZS1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLWJhc2Utb3B0aW9ucy1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLWNlbGwtZWRpdG9yLXN1cHBvcnQgYXVpLWRhdGF0YWJsZS1jb3JlIGF1aS1kYXRhdGFibGUtY2hlY2tib3gtY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS1kYXRlLWNlbGwtZWRpdG9yIGF1aS1kYXRhdGFibGUtZHJvcGRvd24tY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS1yYWRpby1jZWxsLWVkaXRvciBhdWktZGF0YXRhYmxlLXRleHQtY2VsbC1lZGl0b3IgYXVpLWRhdGF0YWJsZS10ZXh0LWFyZWEtY2VsbC1lZGl0b3IiLnNwbGl0KCIgIil9LCJhdWktZGF0YXRhYmxlLWhpZ2hsaWdodCI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1zZWxlY3Rpb24iXSwKc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGF0YWJsZS1wcm9wZXJ0eS1saXN0Ijp7cmVxdWlyZXM6ImRhdGF0YWJsZS1zY3JvbGwgZGF0YXRhYmxlLXNvcnQgYXVpLWRhdGF0YWJsZS1jb3JlIGF1aS1kYXRhdGFibGUtZWRpdCBhdWktZGF0YXRhYmxlLWhpZ2hsaWdodCBhdWktZGF0YXRhYmxlLXNlbGVjdGlvbiBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1kYXRhdGFibGUtcmFkaW8tY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIl19LCJhdWktZGF0YXRhYmxlLXNlbGVjdGlvbiI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0YWJsZS1jb3JlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWRhdGF0YWJsZS10ZXh0LWFyZWEtY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIl19LCJhdWktZGF0YXRhYmxlLXRleHQtY2VsbC1lZGl0b3IiOntyZXF1aXJlczpbImF1aS1kYXRhdGFibGUtYmFzZS1vcHRpb25zLWNlbGwtZWRpdG9yIl19LAoiYXVpLWRhdGF0eXBlIjp7cmVxdWlyZXM6WyJkYXRhdHlwZSIsImF1aS1kYXRhdHlwZS1kYXRlLXBhcnNlIl19LCJhdWktZGF0YXR5cGUtZGF0ZS1wYXJzZSI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtbGFuZyIsImRhdGF0eXBlLWRhdGUtZm9ybWF0IiwiZGF0YXR5cGUtZGF0ZS1wYXJzZSIsImludGwiXX0sImF1aS1kYXRlcGlja2VyIjp7cmVxdWlyZXM6ImF1aS1hcmlhIGF1aS1kYXRlcGlja2VyLWRlbGVnYXRlIGF1aS1kYXRlcGlja2VyLXBvcG92ZXIgYmFzZSBiYXNlLWJ1aWxkIGNhbGVuZGFyIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1kYXRlcGlja2VyLWJhc2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiY2FsZW5kYXIiLCJhdWktZGF0YXR5cGUiLCJhdWktb3ZlcmxheS1jb250ZXh0LWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktZGF0ZXBpY2tlci1kZWxlZ2F0ZSI6e3JlcXVpcmVzOlsiYXVpLWRhdGF0eXBlLWRhdGUtcGFyc2UiLCJhdWktZXZlbnQtaW5wdXQiLAoiZXZlbnQtZm9jdXMiLCJub2RlLWV2ZW50LWRlbGVnYXRlIl19LCJhdWktZGF0ZXBpY2tlci1kZXByZWNhdGVkIjp7c2tpbm5hYmxlOiEwLHVzZTpbImF1aS1kYXRlcGlja2VyLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1kYXRlcGlja2VyLXNlbGVjdC1kZXByZWNhdGVkIl19LCJhdWktZGF0ZXBpY2tlci1uYXRpdmUiOntyZXF1aXJlczpbImF1aS1kYXRlcGlja2VyLWRlbGVnYXRlIiwiYXVpLW5vZGUtYmFzZSIsImJhc2UiLCJiYXNlLWJ1aWxkIl19LCJhdWktZGF0ZXBpY2tlci1wb3BvdmVyIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1wb3BvdmVyIl19LCJhdWktZGF0ZXBpY2tlci1zZWxlY3QtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWRhdGVwaWNrZXItYmFzZS1kZXByZWNhdGVkIiwiYXVpLWJ1dHRvbi1pdGVtLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktZGVib3VuY2UiOnt9LCJhdWktZGVsYXllZC10YXNrLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbInl1aS1iYXNlIl19LAoiYXVpLWRpYWdyYW0tYnVpbGRlciI6e3JlcXVpcmVzOiJhdWktYXJpYSBhdWktbWFwIGF1aS1wcm9wZXJ0eS1idWlsZGVyIGF1aS1kaWFncmFtLWJ1aWxkZXItY29ubmVjdG9yIGF1aS1wcm9wZXJ0eS1idWlsZGVyLXNldHRpbmdzIGF1aS1kaWFncmFtLW5vZGUtY29uZGl0aW9uIGF1aS1kaWFncmFtLW5vZGUtZW5kIGF1aS1kaWFncmFtLW5vZGUtZm9yayBhdWktZGlhZ3JhbS1ub2RlLWpvaW4gYXVpLWRpYWdyYW0tbm9kZS1zdGFydCBhdWktZGlhZ3JhbS1ub2RlLXN0YXRlIGF1aS1kaWFncmFtLW5vZGUtdGFzayBvdmVybGF5Ii5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1kaWFncmFtLWJ1aWxkZXItY29ubmVjdG9yIjp7cmVxdWlyZXM6ImFycmF5bGlzdC1hZGQgYXJyYXlsaXN0LWZpbHRlciBlc2NhcGUganNvbiBncmFwaGljcyBkZCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktZGlhZ3JhbS1ub2RlIjp7cmVxdWlyZXM6WyJhdWktYXJpYSIsImF1aS1kaWFncmFtLW5vZGUtbWFuYWdlci1iYXNlIiwKImVzY2FwZSIsIm92ZXJsYXkiXX0sImF1aS1kaWFncmFtLW5vZGUtY29uZGl0aW9uIjp7cmVxdWlyZXM6WyJhdWktZGlhZ3JhbS1ub2RlLXN0YXRlIl19LCJhdWktZGlhZ3JhbS1ub2RlLWVuZCI6e3JlcXVpcmVzOlsiYXVpLWRpYWdyYW0tbm9kZS1zdGF0ZSJdfSwiYXVpLWRpYWdyYW0tbm9kZS1mb3JrIjp7cmVxdWlyZXM6WyJhdWktZGlhZ3JhbS1ub2RlLXN0YXRlIl19LCJhdWktZGlhZ3JhbS1ub2RlLWpvaW4iOntyZXF1aXJlczpbImF1aS1kaWFncmFtLW5vZGUtc3RhdGUiXX0sImF1aS1kaWFncmFtLW5vZGUtbWFuYWdlci1iYXNlIjp7cmVxdWlyZXM6WyJiYXNlIl19LCJhdWktZGlhZ3JhbS1ub2RlLXN0YXJ0Ijp7cmVxdWlyZXM6WyJhdWktZGlhZ3JhbS1ub2RlLXN0YXRlIl19LCJhdWktZGlhZ3JhbS1ub2RlLXN0YXRlIjp7cmVxdWlyZXM6WyJhdWktZGlhZ3JhbS1ub2RlIl19LCJhdWktZGlhZ3JhbS1ub2RlLXRhc2siOntyZXF1aXJlczpbImF1aS1kaWFncmFtLW5vZGUtc3RhdGUiXX0sCiJhdWktZGlhbG9nLWlmcmFtZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJwbHVnaW4iLCJhcnJheS1pbnZva2UiLCJhdWktYmFzZS1kZXByZWNhdGVkIiwiYXVpLWxvYWRpbmctbWFzay1kZXByZWNhdGVkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWRyb3Bkb3duIjp7cmVxdWlyZXM6ImV2ZW50LWRlbGVnYXRlIGV2ZW50LWtleSBldmVudC1vdXRzaWRlIG5vZGUtZm9jdXNtYW5hZ2VyIHdpZGdldCB3aWRnZXQtc3RhY2sgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLW5vZGUgYXVpLXdpZGdldC1jc3NjbGFzcyBhdWktd2lkZ2V0LXRvZ2dsZSBhdWktd2lkZ2V0LXRyaWdnZXIiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWVkaXRhYmxlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktZm9ybS1jb21ib2JveC1kZXByZWNhdGVkIiwiZXNjYXBlIiwiZXZlbnQtcmVzaXplIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWV2ZW50Ijp7dXNlOlsiYXVpLWV2ZW50LWJhc2UiXX0sCiJhdWktZXZlbnQtYmFzZSI6e3JlcXVpcmVzOlsiZXZlbnQtYmFzZSJdfSwiYXVpLWV2ZW50LWRlbGVnYXRlLWNoYW5nZSI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWV2ZW50LWRlbGVnYXRlLWNoYW5nZSIsdHJpZ2dlcjoiZXZlbnQtYmFzZS1pZSIsdWE6ImllIn0scmVxdWlyZXM6WyJhdWktZXZlbnQtYmFzZSIsImV2ZW50LWRlbGVnYXRlIiwiZXZlbnQtc3ludGhldGljIl19LCJhdWktZXZlbnQtZGVsZWdhdGUtc3VibWl0Ijp7Y29uZGl0aW9uOntuYW1lOiJhdWktZXZlbnQtZGVsZWdhdGUtc3VibWl0Iix0cmlnZ2VyOiJldmVudC1iYXNlLWllIix1YToiaWUifSxyZXF1aXJlczpbImF1aS1ldmVudC1iYXNlIiwiZXZlbnQtZGVsZWdhdGUiLCJldmVudC1zeW50aGV0aWMiXX0sImF1aS1ldmVudC1pbnB1dCI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWV2ZW50LWlucHV0Iix0ZXN0OmZ1bmN0aW9uKHEpe3ZhciB0PXEuc3VwcG9ydHNET01FdmVudCxmPXEuRmVhdHVyZXMudGVzdCxkPXEuRmVhdHVyZXMuYWRkOwp2b2lkIDA9PT1mKCJldmVudCIsImlucHV0IikmJmQoImV2ZW50IiwiaW5wdXQiLHt0ZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKSwiaW5wdXQiKSYmKCFxLlVBLmllfHw5PHEuVUEuaWUpfX0pO3JldHVybiFmKCJldmVudCIsImlucHV0Iil9LHRyaWdnZXI6ImF1aS1ldmVudC1iYXNlIn0scmVxdWlyZXM6WyJhdWktZXZlbnQtYmFzZSIsImV2ZW50LWRlbGVnYXRlIiwiZXZlbnQtc3ludGhldGljIiwidGltZXJzIl19LCJhdWktZm9ybS1iYXNlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImlvLWZvcm0iLCJxdWVyeXN0cmluZy1wYXJzZSIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktZGF0YS1zZXQtZGVwcmVjYXRlZCIsImF1aS1mb3JtLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLWJ1aWxkZXIiOntyZXF1aXJlczoiYXVpLW1vZGFsIGF1aS1sYXlvdXQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1saXN0IGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdG9vbGJhciBhdWktZm9ybS1idWlsZGVyLWZpZWxkLXR5cGUgYXVpLWZvcm0tYnVpbGRlci1maWVsZC10eXBlcyBhdWktZm9ybS1idWlsZGVyLWxheW91dC1idWlsZGVyIGF1aS1mb3JtLWJ1aWxkZXItcGFnZS1tYW5hZ2VyIGF1aS1mb3JtLWJ1aWxkZXItc2V0dGluZ3MtbW9kYWwgZXZlbnQtZm9jdXMgZXZlbnQtdGFwIi5zcGxpdCgiICIpLApza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLWF2YWlsYWJsZS1maWVsZC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktcHJvcGVydHktYnVpbGRlci1hdmFpbGFibGUtZmllbGQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZGVwcmVjYXRlZCI6e3JlcXVpcmVzOiJhdWktYnV0dG9uIGF1aS1jb2xsZWN0aW9uIGF1aS1mb3JtLWJ1aWxkZXItYXZhaWxhYmxlLWZpZWxkLWRlcHJlY2F0ZWQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtYnV0dG9uLWRlcHJlY2F0ZWQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1jaGVja2JveC1kZXByZWNhdGVkIGF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZmllbGRzZXQtZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLWZpbGUtdXBsb2FkLWRlcHJlY2F0ZWQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1tdWx0aXBsZS1jaG9pY2UtZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLXJhZGlvLWRlcHJlY2F0ZWQgYXVpLWZvcm0tYnVpbGRlci1maWVsZC1zZWxlY3QtZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLXRleHQtZGVwcmVjYXRlZCBhdWktZm9ybS1idWlsZGVyLWZpZWxkLXRleHRhcmVhLWRlcHJlY2F0ZWQgYXVpLXByb3BlcnR5LWJ1aWxkZXIgYXVpLXByb3BlcnR5LWJ1aWxkZXItc2V0dGluZ3MgYXVpLXNvcnRhYmxlLWxpc3QgYXVpLXRhYnZpZXcgYXVpLXRvb2x0aXAtYmFzZSBlc2NhcGUgdHJhbnNpdGlvbiIuc3BsaXQoIiAiKSwKc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1iYXNlIjp7cmVxdWlyZXM6ImF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS1ub2RlLWJhc2UgYXVpLXRleHQtZGF0YS1lZGl0b3IgYXVpLXRvZ2dsZXIgYmFzZSBub2RlLWJhc2UiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1idXR0b24tZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIl19LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWNoZWNrYm94LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1jaG9pY2UiOntyZXF1aXJlczpbImF1aS1ib29sZWFuLWRhdGEtZWRpdG9yIiwiYXVpLW9wdGlvbnMtZGF0YS1lZGl0b3IiLCJhdWktdGFicy1kYXRhLWVkaXRvciIsImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtYmFzZSIsImF1aS1mb3JtLWZpZWxkLWNob2ljZSJdfSwKImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsicGFuZWwiLCJhdWktZGF0YXR5cGUiLCJhdWktZGF0YXRhYmxlLWVkaXQiLCJhdWktcHJvcGVydHktYnVpbGRlci1maWVsZC1zdXBwb3J0Il0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1maWVsZHNldC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZmlsZS11cGxvYWQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIl19LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWxpc3QiOntyZXF1aXJlczpbImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdHlwZSIsImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdHlwZXMiLCJhdWktZm9ybS1idWlsZGVyLWxheW91dC1idWlsZGVyIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1tdWx0aXBsZS1jaG9pY2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIl19LAoiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1yYWRpby1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtc2VsZWN0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1zZW50ZW5jZSI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1iYXNlIiwiYXVpLWZvcm0tZmllbGQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdGV4dCI6e3JlcXVpcmVzOlsiYXVpLWJvb2xlYW4tZGF0YS1lZGl0b3IiLCJhdWktcmFkaW8tZ3JvdXAtZGF0YS1lZGl0b3IiLCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWJhc2UiLCJhdWktZm9ybS1maWVsZC10ZXh0Il19LCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXRleHQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tYnVpbGRlci1maWVsZC1kZXByZWNhdGVkIl19LAoiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10ZXh0YXJlYS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1idWlsZGVyLWZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdG9vbGJhciI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJiYXNlIiwibm9kZS1iYXNlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10eXBlIjp7cmVxdWlyZXM6WyJiYXNlIiwibm9kZS1iYXNlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tYnVpbGRlci1maWVsZC10eXBlcyI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktZm9ybS1idWlsZGVyLWZpZWxkLXR5cGVzLW1vZGFsIiwiYmFzZSIsIm5vZGUtYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWJ1aWxkZXItZmllbGQtdHlwZXMtbW9kYWwiOntyZXF1aXJlczpbImF1aS1tb2RhbCJdLHNraW5uYWJsZTohMH0sImF1aS1mb3JtLWJ1aWxkZXItbGF5b3V0LWJ1aWxkZXIiOntyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwKImF1aS1sYXlvdXQtYnVpbGRlciIsImF1aS1tb2RhbCIsImJhc2UiLCJub2RlLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLXBhZ2UtbWFuYWdlciI6e3JlcXVpcmVzOiJhdWktcGFnaW5hdGlvbiBhdWktcG9wb3ZlciBhdWktdGFidmlldyBiYXNlIGV2ZW50LXZhbHVlY2hhbmdlIG5vZGUtYmFzZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1idWlsZGVyLXNldHRpbmdzLW1vZGFsIjp7cmVxdWlyZXM6WyJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1tb2RhbCIsImJhc2UiLCJub2RlLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1jb21ib2JveC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS10ZXh0YXJlYS1kZXByZWNhdGVkIiwiYXVpLXRvb2xiYXIiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1kZXByZWNhdGVkIjp7dXNlOiJhdWktZm9ybS1iYXNlLWRlcHJlY2F0ZWQgYXVpLWZvcm0tY29tYm9ib3gtZGVwcmVjYXRlZCBhdWktZm9ybS1maWVsZC1kZXByZWNhdGVkIGF1aS1mb3JtLXNlbGVjdC1kZXByZWNhdGVkIGF1aS1mb3JtLXRleHRhcmVhLWRlcHJlY2F0ZWQgYXVpLWZvcm0tdGV4dGZpZWxkLWRlcHJlY2F0ZWQiLnNwbGl0KCIgIil9LAoiYXVpLWZvcm0tZmllbGQiOntyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiYXVpLW5vZGUtYmFzZSIsImJhc2UtYnVpbGQiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1maWVsZC1jaG9pY2UiOntyZXF1aXJlczpbImF1aS1mb3JtLWZpZWxkLXJlcXVpcmVkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWZvcm0tZmllbGQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1jb21wb25lbnQiXX0sImF1aS1mb3JtLWZpZWxkLXJlcXVpcmVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1maWVsZCJdfSwiYXVpLWZvcm0tZmllbGQtdGV4dCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tZmllbGQtcmVxdWlyZWQiXSxza2lubmFibGU6ITB9LCJhdWktZm9ybS1zZWxlY3QtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWZvcm0tZmllbGQtZGVwcmVjYXRlZCJdfSwiYXVpLWZvcm0tdGV4dGFyZWEtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsibm9kZS1wbHVnaW5ob3N0IiwKImF1aS1hdXRvc2l6ZS1kZXByZWNhdGVkIiwiYXVpLWZvcm0tdGV4dGZpZWxkLWRlcHJlY2F0ZWQiXX0sImF1aS1mb3JtLXRleHRmaWVsZC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktZm9ybS1maWVsZC1kZXByZWNhdGVkIl19LCJhdWktZm9ybS12YWxpZGF0b3IiOntyZXF1aXJlczoiZXNjYXBlIHNlbGVjdG9yLWNzczMgbm9kZS1ldmVudC1kZWxlZ2F0ZSBhdWktbm9kZSBhdWktY29tcG9uZW50IGF1aS1ldmVudC1pbnB1dCIuc3BsaXQoIiAiKX0sImF1aS1oc3YtcGFsZXR0ZSI6e3JlcXVpcmVzOiJhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIGF1aS1ldmVudC1pbnB1dCBiYXNlLWJ1aWxkIGNsaWNrYWJsZS1yYWlsIGNvbG9yLWhzdiBkZC1jb25zdHJhaW4gc2xpZGVyIHdpZGdldCIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktaHN2YS1wYWxldHRlIjp7cmVxdWlyZXM6WyJhdWktaHN2LXBhbGV0dGUiXSxza2lubmFibGU6ITB9LAoiYXVpLWhzdmEtcGFsZXR0ZS1tb2RhbCI6e3JlcXVpcmVzOlsiYXVpLWhzdmEtcGFsZXR0ZSIsImF1aS1tb2RhbCJdLHNraW5uYWJsZTohMH0sImF1aS1pbWFnZS1jcm9wcGVyIjp7cmVxdWlyZXM6WyJyZXNpemUtYmFzZSIsInJlc2l6ZS1jb25zdHJhaW4iLCJkZC1jb25zdHJhaW4iLCJhdWktbm9kZS1iYXNlIiwiYXVpLWNvbXBvbmVudCJdLHNraW5uYWJsZTohMH0sImF1aS1pbWFnZS12aWV3ZXIiOntyZXF1aXJlczoid2lkZ2V0IHdpZGdldC1tb2RhbGl0eSB3aWRnZXQtcG9zaXRpb24gd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4gd2lkZ2V0LXN0YWNrIHdpZGdldC1zdGRtb2QgYXVpLWV2ZW50IGF1aS1pbWFnZS12aWV3ZXItYmFzZSBhdWktaW1hZ2Utdmlld2VyLW11bHRpcGxlIGF1aS1pbWFnZS12aWV3ZXItc2xpZGVzaG93IGF1aS1ub2RlLWJhc2UgYXVpLXdpZGdldC1jc3NjbGFzcyBhdWktd2lkZ2V0LXRvZ2dsZSIuc3BsaXQoIiAiKSwKc2tpbm5hYmxlOiEwfSwiYXVpLWltYWdlLXZpZXdlci1iYXNlIjp7cmVxdWlyZXM6ImFuaW0gYXVpLWFyaWEgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLW5vZGUgYXVpLXdpZGdldC1yZXNwb25zaXZlIGJhc2UtYnVpbGQgaW1hZ2Vsb2FkZXIgbm9kZS1iYXNlIHdpZGdldCB3aWRnZXQtc3RhY2siLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLWltYWdlLXZpZXdlci1tZWRpYSI6e3JlcXVpcmVzOlsicGx1Z2luIiwiYXVpLWNvbXBvbmVudCIsImF1aS1pbWFnZS12aWV3ZXIiXX0sImF1aS1pbWFnZS12aWV3ZXItbXVsdGlwbGUiOntyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJub2RlLWJhc2UiLCJhdWktY2xhc3NuYW1lbWFuYWdlciIsImF1aS1pbWFnZS12aWV3ZXItYmFzZSJdLHNraW5uYWJsZTohMH0sImF1aS1pbWFnZS12aWV3ZXItbXVsdGlwbGUtc3dpcGUiOntjb25kaXRpb246e25hbWU6ImF1aS1pbWFnZS12aWV3ZXItbXVsdGlwbGUtc3dpcGUiLHRyaWdnZXI6ImF1aS1pbWFnZS12aWV3ZXItbXVsdGlwbGUiLAp1YToidG91Y2hFbmFibGVkIn0scmVxdWlyZXM6WyJhdWktaW1hZ2Utdmlld2VyLW11bHRpcGxlIiwiYXVpLWltYWdlLXZpZXdlci1zd2lwZSJdfSwiYXVpLWltYWdlLXZpZXdlci1zbGlkZXNob3ciOntyZXF1aXJlczpbIm5vZGUiLCJhdWktY2xhc3NuYW1lbWFuYWdlciJdfSwiYXVpLWltYWdlLXZpZXdlci1zd2lwZSI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLWltYWdlLXZpZXdlci1zd2lwZSIsdHJpZ2dlcjoiYXVpLWltYWdlLXZpZXdlci1iYXNlIix1YToidG91Y2hFbmFibGVkIn0scmVxdWlyZXM6WyJldmVudC1yZXNpemUiLCJhdWktaW1hZ2Utdmlld2VyLWJhc2UiLCJhdWktd2lkZ2V0LXN3aXBlIl19LCJhdWktaW5wdXQtdGV4dC1jb250cm9sLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktZGF0YXNvdXJjZS1jb250cm9sLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1mb3JtLWNvbWJvYm94LWRlcHJlY2F0ZWQiXX0sImF1aS1pbyI6e3VzZTpbImF1aS1pby1yZXF1ZXN0Il19LAoiYXVpLWlvLWRlcHJlY2F0ZWQiOnt1c2U6WyJhdWktaW8tcmVxdWVzdCIsImF1aS1pby1wbHVnaW4tZGVwcmVjYXRlZCJdfSwiYXVpLWlvLXBsdWdpbi1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktb3ZlcmxheS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktcGFyc2UtY29udGVudCIsImF1aS1pby1yZXF1ZXN0IiwiYXVpLWxvYWRpbmctbWFzay1kZXByZWNhdGVkIl19LCJhdWktaW8tcmVxdWVzdCI6e3JlcXVpcmVzOlsiaW8tYmFzZSIsImpzb24iLCJwbHVnaW4iLCJxdWVyeXN0cmluZy1zdHJpbmdpZnkiLCJhdWktY29tcG9uZW50Il19LCJhdWktaW8tcmVxdWVzdC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJpby1iYXNlIiwianNvbiIsInBsdWdpbiIsInF1ZXJ5c3RyaW5nLXN0cmluZ2lmeSIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS1sYXlvdXQiOntyZXF1aXJlczoiYXVpLWxheW91dC1jb2wgYXVpLWxheW91dC1yb3cgYXVpLW5vZGUtYmFzZSBiYXNlLWJ1aWxkIGRhdGF0eXBlLW51bWJlci1wYXJzZSBldmVudC1yZXNpemUiLnNwbGl0KCIgIil9LAoiYXVpLWxheW91dC1idWlsZGVyIjp7cmVxdWlyZXM6ImF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS1sYXlvdXQgYXVpLWxheW91dC1idWlsZGVyLWFkZC1jb2wgYXVpLWxheW91dC1idWlsZGVyLWFkZC1yb3cgYXVpLWxheW91dC1idWlsZGVyLW1vdmUgYXVpLWxheW91dC1idWlsZGVyLXJlbW92ZS1yb3cgYXVpLWxheW91dC1idWlsZGVyLXJlc2l6ZS1jb2wgYXVpLW5vZGUtYmFzZSBiYXNlLWJ1aWxkIG5vZGUtZXZlbnQtZGVsZWdhdGUgbm9kZS1zY3JlZW4gbm9kZS1zdHlsZSIuc3BsaXQoIiAiKX0sImF1aS1sYXlvdXQtYnVpbGRlci1hZGQtY29sIjp7cmVxdWlyZXM6WyJldmVudC1rZXkiLCJub2RlLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktbGF5b3V0LWJ1aWxkZXItYWRkLXJvdyI6e3JlcXVpcmVzOlsiYXVpLW5vZGUtYmFzZSIsImJhc2UtYnVpbGQiLCJub2RlLXNjcm9sbC1pbmZvIl0sc2tpbm5hYmxlOiEwfSwiYXVpLWxheW91dC1idWlsZGVyLW1vdmUiOntyZXF1aXJlczpbImF1aS1ub2RlLWJhc2UiLAoiYmFzZS1idWlsZCJdLHNraW5uYWJsZTohMH0sImF1aS1sYXlvdXQtYnVpbGRlci1yZW1vdmUtcm93Ijp7cmVxdWlyZXM6WyJhdWktbm9kZS1iYXNlIiwiYmFzZS1idWlsZCJdLHNraW5uYWJsZTohMH0sImF1aS1sYXlvdXQtYnVpbGRlci1yZXNpemUtY29sIjp7cmVxdWlyZXM6ImRkLWNvbnN0cmFpbiBkZC1kZWxlZ2F0ZSBkZC1kcm9wLXBsdWdpbiBkZC1wcm94eSBldmVudC1tb3VzZWVudGVyIG5vZGUtYmFzZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktbGF5b3V0LWNvbCI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktbm9kZS1iYXNlIiwiYmFzZS1idWlsZCJdLHNraW5uYWJsZTohMH0sImF1aS1sYXlvdXQtcm93Ijp7cmVxdWlyZXM6WyJhcnJheS1pbnZva2UiLCJhdWktbm9kZS1iYXNlIiwiYmFzZS1idWlsZCJdLHNraW5uYWJsZTohMH0sImF1aS1saW5rZWRzZXQiOntyZXF1aXJlczpbImF1aS1zZXQiXX0sImF1aS1saXZlLXNlYXJjaC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktYmFzZS1kZXByZWNhdGVkIl19LAoiYXVpLWxvYWRpbmctbWFzay1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJwbHVnaW4iLCJhdWktb3ZlcmxheS1tYXNrLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktbWFwIjp7cmVxdWlyZXM6WyJiYXNlLWJ1aWxkIl19LCJhdWktbWVudSI6e3JlcXVpcmVzOiJiYXNlLWJ1aWxkIGV2ZW50LW1vdXNlZW50ZXIgZXZlbnQtcmVzaXplIHdpZGdldCB3aWRnZXQtcG9zaXRpb24gd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4gd2lkZ2V0LXN0YWNrIGF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS1kZWJvdW5jZSBhdWktZHJvcGRvd24gYXVpLW1lbnUtaXRlbSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktbWVudS1pdGVtIjp7cmVxdWlyZXM6WyJiYXNlLWJ1aWxkIiwibm9kZS1iYXNlIiwiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktbm9kZSIsImF1aS13aWRnZXQtc2hvcnRjdXQiXX0sImF1aS1tZXNzYWdpbmciOntyZXF1aXJlczpbInF1ZXJ5c3RyaW5nIiwKImF1aS10aW1lciJdfSwiYXVpLW1vZGFsIjp7cmVxdWlyZXM6IndpZGdldCB3aWRnZXQtYXV0b2hpZGUgd2lkZ2V0LWJ1dHRvbnMgd2lkZ2V0LW1vZGFsaXR5IHdpZGdldC1wb3NpdGlvbiB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXBvc2l0aW9uLWNvbnN0cmFpbiB3aWRnZXQtc3RhY2sgd2lkZ2V0LXN0ZG1vZCBkZC1wbHVnaW4gZGQtY29uc3RyYWluIHRpbWVycyBhdWktY2xhc3NuYW1lbWFuYWdlciBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIGF1aS13aWRnZXQtdG9vbGJhcnMiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLW1vZGFsLXJlc2l6ZSI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLW1vZGFsLXJlc2l6ZSIsdGVzdDpmdW5jdGlvbihxKXtyZXR1cm4hcS5VQS5tb2JpbGV9LHRyaWdnZXI6ImF1aS1tb2RhbCJ9LHJlcXVpcmVzOlsiYXVpLW1vZGFsIiwicmVzaXplLXBsdWdpbiJdfSwiYXVpLW5vZGUiOnt1c2U6WyJhdWktbm9kZS1iYXNlIl19LAoiYXVpLW5vZGUtYWNjZXNzaWJsZSI6e3JlcXVpcmVzOlsiYXVpLW5vZGUtYmFzZSIsImV2ZW50LWN1c3RvbS1iYXNlIl19LCJhdWktbm9kZS1iYXNlIjp7cmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLCJhdWktYmFzZS1sYW5nIiwiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktZGVib3VuY2UiLCJub2RlIl19LCJhdWktbm9kZS1odG1sNSI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLW5vZGUtaHRtbDUiLHRyaWdnZXI6ImF1aS1ub2RlIix1YToiaWUifSxyZXF1aXJlczpbImNvbGxlY3Rpb24iLCJhdWktbm9kZS1iYXNlIl19LCJhdWktb3B0aW9ucy1kYXRhLWVkaXRvciI6e3JlcXVpcmVzOiJhdWktZGF0YS1lZGl0b3IgZGQtY29uc3RyYWluIGRkLWRlbGVnYXRlIGRkLWRyb3AtcGx1Z2luIGRkLXByb3h5IGV2ZW50LXZhbHVlY2hhbmdlIG5vZGUtZXZlbnQtZGVsZWdhdGUiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6IndpZGdldC1wb3NpdGlvbiB3aWRnZXQtc3RhY2sgd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4gd2lkZ2V0LXN0ZG1vZCBhdWktY29tcG9uZW50Ii5zcGxpdCgiICIpfSwKImF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLW92ZXJsYXktbWFuYWdlci1kZXByZWNhdGVkIiwiYXVpLWRlbGF5ZWQtdGFzay1kZXByZWNhdGVkIiwiYXVpLWFyaWEiXX0sImF1aS1vdmVybGF5LWNvbnRleHQtcGFuZWwtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYW5pbSIsImF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCJdLHNraW5uYWJsZTohMH0sImF1aS1vdmVybGF5LWRlcHJlY2F0ZWQiOnt1c2U6WyJhdWktb3ZlcmxheS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1jb250ZXh0LWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1jb250ZXh0LXBhbmVsLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1tYW5hZ2VyLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1tYXNrLWRlcHJlY2F0ZWQiXX0sImF1aS1vdmVybGF5LW1hbmFnZXItZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsib3ZlcmxheSIsInBsdWdpbiIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiLAoiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIl19LCJhdWktb3ZlcmxheS1tYXNrLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImV2ZW50LXJlc2l6ZSIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiLCJhdWktb3ZlcmxheS1iYXNlLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktcGFnaW5hdGlvbiI6e3JlcXVpcmVzOlsibm9kZS1ldmVudC1kZWxlZ2F0ZSIsImF1aS1ub2RlIiwiYXVpLWNvbXBvbmVudCIsIndpZGdldC1odG1scGFyc2VyIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXBhbGV0dGUiOntyZXF1aXJlczoiYmFzZS1idWlsZCBldmVudC1ob3ZlciB3aWRnZXQgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLWJhc2UgYXVpLXdpZGdldC1jc3NjbGFzcyBhdWktd2lkZ2V0LXRvZ2dsZSIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktcGFyc2UtY29udGVudCI6e3JlcXVpcmVzOlsiYXN5bmMtcXVldWUiLCJwbHVnaW4iLCJpby1iYXNlIiwiYXVpLWNvbXBvbmVudCIsImF1aS1ub2RlLWJhc2UiXX0sCiJhdWktcG9wb3ZlciI6e3JlcXVpcmVzOiJldmVudC1yZXNpemUgd2lkZ2V0IHdpZGdldC1hdXRvaGlkZSB3aWRnZXQtYnV0dG9ucyB3aWRnZXQtbW9kYWxpdHkgd2lkZ2V0LXBvc2l0aW9uIHdpZGdldC1wb3NpdGlvbi1hbGlnbiB3aWRnZXQtcG9zaXRpb24tY29uc3RyYWluIHdpZGdldC1zdGFjayB3aWRnZXQtc3RkbW9kIGF1aS1jbGFzc25hbWVtYW5hZ2VyIGF1aS13aWRnZXQtY3NzY2xhc3MgYXVpLXdpZGdldC10b2dnbGUgYXVpLXdpZGdldC10b29sYmFycyBhdWktd2lkZ2V0LXRyYW5zaXRpb24gYXVpLXdpZGdldC10cmlnZ2VyIGF1aS13aWRnZXQtcG9zaXRpb24tYWxpZ24tc3VnZ2VzdGlvbiBhdWktY29tcG9uZW50IGF1aS1ub2RlLWJhc2UiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXByb2dyZXNzYmFyIjp7cmVxdWlyZXM6WyJhdWktbm9kZSIsImF1aS1jb21wb25lbnQiLCJhdWktYXJpYSJdLHNraW5uYWJsZTohMH0sImF1aS1wcm9taXNlIjp7cmVxdWlyZXM6WyJhcnJheS1pbnZva2UiLAoicHJvbWlzZSIsIm9vcCJdfSwiYXVpLXByb3BlcnR5LWJ1aWxkZXIiOntyZXF1aXJlczoiZGQgY29sbGVjdGlvbiBhdWktcHJvcGVydHktYnVpbGRlci1hdmFpbGFibGUtZmllbGQgYXVpLXByb3BlcnR5LWJ1aWxkZXItZmllbGQtc3VwcG9ydCBhdWktcHJvcGVydHktYnVpbGRlci1zZXR0aW5ncyBhdWktdGFidmlldyIuc3BsaXQoIiAiKSxza2lubmFibGU6ITB9LCJhdWktcHJvcGVydHktYnVpbGRlci1hdmFpbGFibGUtZmllbGQiOntyZXF1aXJlczpbImJhc2UiLCJhdWktY29tcG9uZW50IiwiYXVpLW5vZGUiXX0sImF1aS1wcm9wZXJ0eS1idWlsZGVyLWZpZWxkLXN1cHBvcnQiOnt9LCJhdWktcHJvcGVydHktYnVpbGRlci1zZXR0aW5ncyI6e3JlcXVpcmVzOlsiYXVpLXRhYnZpZXciLCJhdWktZGF0YXRhYmxlLXByb3BlcnR5LWxpc3QiXX0sImF1aS1yYWRpby1ncm91cC1kYXRhLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWRhdGEtZWRpdG9yIiwibm9kZS1ldmVudC1kZWxlZ2F0ZSJdLApza2lubmFibGU6ITB9LCJhdWktcmF0aW5nIjp7dXNlOlsiYXVpLXJhdGluZy1iYXNlIiwiYXVpLXJhdGluZy10aHVtYiJdfSwiYXVpLXJhdGluZy1iYXNlIjp7cmVxdWlyZXM6WyJhdWktY29tcG9uZW50IiwiYXVpLW5vZGUtYmFzZSIsIndpZGdldC1odG1scGFyc2VyIiwid2lkZ2V0LXVpZXZlbnRzIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXJhdGluZy10aHVtYiI6e3JlcXVpcmVzOlsiYXVpLXJhdGluZy1iYXNlIl19LCJhdWktcmVzaXplLWJhc2UtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiZGQtZHJhZyIsImRkLWRlbGVnYXRlIiwiZGQtZHJvcCIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9LCJhdWktcmVzaXplLWNvbnN0cmFpbi1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJkZC1jb25zdHJhaW4iLCJwbHVnaW4iLCJhdWktcmVzaXplLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLXJlc2l6ZS1kZXByZWNhdGVkIjp7c2tpbm5hYmxlOiEwLHVzZTpbImF1aS1yZXNpemUtYmFzZS1kZXByZWNhdGVkIiwKImF1aS1yZXNpemUtY29uc3RyYWluLWRlcHJlY2F0ZWQiXX0sImF1aS1zY2FsZS1kYXRhLWVkaXRvciI6e3JlcXVpcmVzOlsiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktZGF0YS1lZGl0b3IiLCJldmVudC12YWx1ZWNoYW5nZSJdfSwiYXVpLXNjaGVkdWxlciI6e3VzZToiZXZlbnQtZ2VzdHVyZXMgYXVpLXNjaGVkdWxlci1iYXNlIGF1aS1zY2hlZHVsZXItZXZlbnQtcmVjb3JkZXIgYXVpLXNjaGVkdWxlci12aWV3LWFnZW5kYSBhdWktc2NoZWR1bGVyLXZpZXctZGF5IGF1aS1zY2hlZHVsZXItdmlldy1tb250aCBhdWktc2NoZWR1bGVyLXZpZXctdGFibGUtZGQgYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlIGF1aS1zY2hlZHVsZXItdmlldy13ZWVrIGF1aS12aWV3cG9ydCIuc3BsaXQoIiAiKX0sImF1aS1zY2hlZHVsZXItYmFzZSI6e3JlcXVpcmVzOiJtb2RlbCBtb2RlbC1saXN0IHdpZGdldC1zdGRtb2QgY29sb3ItaHNsIGF1aS1ldmVudC1iYXNlIGF1aS1ub2RlLWJhc2UgYXVpLWNvbXBvbmVudCBhdWktZGF0YXR5cGUgYXVpLWJ1dHRvbiBub2RlLWZvY3VzbWFuYWdlciIuc3BsaXQoIiAiKSwKc2tpbm5hYmxlOiEwfSwiYXVpLXNjaGVkdWxlci1ldmVudC1yZWNvcmRlciI6e3JlcXVpcmVzOlsicXVlcnlzdHJpbmciLCJpby1mb3JtIiwib3ZlcmxheSIsImF1aS1zY2hlZHVsZXItYmFzZSIsImF1aS1wb3BvdmVyIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXNjaGVkdWxlci10b3VjaCI6e2NvbmRpdGlvbjp7bmFtZToiYXVpLXNjaGVkdWxlci10b3VjaCIsdHJpZ2dlcjoiYXVpLXNjaGVkdWxlciIsdWE6InRvdWNoRW5hYmxlZCJ9LHJlcXVpcmVzOlsiYmFzZS1idWlsZCIsImF1aS1zY2hlZHVsZXIiXSxza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLXZpZXctYWdlbmRhIjp7cmVxdWlyZXM6WyJhdWktc2NoZWR1bGVyLWJhc2UiXSxza2lubmFibGU6ITB9LCJhdWktc2NoZWR1bGVyLXZpZXctZGF5Ijp7cmVxdWlyZXM6WyJkZC1kcmFnIiwiZGQtZGVsZWdhdGUiLCJkZC1kcm9wIiwiZGQtY29uc3RyYWluIiwiYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXNjaGVkdWxlci12aWV3LW1vbnRoIjp7cmVxdWlyZXM6WyJhdWktc2NoZWR1bGVyLXZpZXctdGFibGUiXSwKc2tpbm5hYmxlOiEwfSwiYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlIjp7cmVxdWlyZXM6WyJvdmVybGF5IiwiYXVpLXNjaGVkdWxlci1iYXNlIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlLWRkIjp7cmVxdWlyZXM6WyJkZC1kcmFnIiwiZGQtZGVsZWdhdGUiLCJkZC1kcm9wIiwiYXVpLXNjaGVkdWxlci12aWV3LXRhYmxlIl19LCJhdWktc2NoZWR1bGVyLXZpZXctd2VlayI6e3JlcXVpcmVzOlsiYXVpLXNjaGVkdWxlci12aWV3LWRheSJdLHNraW5uYWJsZTohMH0sImF1aS1zY3JvbGxlci1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJldmVudC1tb3VzZWVudGVyIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1zaW1wbGUtYW5pbS1kZXByZWNhdGVkIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXNjcm9sbHNweSI6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsIm5vZGUtc2NyZWVuIiwiYXVpLWNsYXNzbmFtZW1hbmFnZXIiXX0sImF1aS1zZWFyY2giOnt1c2U6WyJhdWktc2VhcmNoLXRzdCJdfSwKImF1aS1zZWFyY2gtdHN0Ijp7cmVxdWlyZXM6WyJhdWktY29tcG9uZW50Il19LCJhdWktc2VsZWN0b3IiOntyZXF1aXJlczpbInNlbGVjdG9yLWNzczMiLCJhdWktY2xhc3NuYW1lbWFuYWdlciJdfSwiYXVpLXNldCI6e3JlcXVpcmVzOlsiYXVpLW1hcCJdfSwiYXVpLXNpbXBsZS1hbmltLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS1za2luLWRlcHJlY2F0ZWQiOnt0eXBlOiJjc3MifSwiYXVpLXNvcnRhYmxlIjp7dXNlOlsiYXVpLXNvcnRhYmxlLWxheW91dCIsImF1aS1zb3J0YWJsZS1saXN0Il19LCJhdWktc29ydGFibGUtbGF5b3V0Ijp7cmVxdWlyZXM6ImRkLWRlbGVnYXRlIGRkLWRyYWcgZGQtZHJvcCBkZC1wcm94eSBhdWktbm9kZSBhdWktY29tcG9uZW50Ii5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS1zb3J0YWJsZS1saXN0Ijp7cmVxdWlyZXM6ImRkLWRyYWcgZGQtZHJvcCBkZC1wcm94eSBkZC1zY3JvbGwgYXVpLW5vZGUgYXVpLWNvbXBvbmVudCIuc3BsaXQoIiAiKX0sCiJhdWktc3RhdGUtaW50ZXJhY3Rpb24tZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtZGVwcmVjYXRlZCIsInBsdWdpbiJdfSwiYXVpLXN1cmZhY2UiOnt1c2U6WyJhdWktc3VyZmFjZS1hcHAiLCJhdWktc3VyZmFjZS1zY3JlZW4iXX0sImF1aS1zdXJmYWNlLWFwcCI6e3JlcXVpcmVzOlsiZXZlbnQtZGVsZWdhdGUiLCJub2RlLWV2ZW50LWh0bWw1IiwiYXVpLXN1cmZhY2UtYmFzZSIsImF1aS1zdXJmYWNlLXNjcmVlbiIsImF1aS1zdXJmYWNlLXNjcmVlbi1yb3V0ZSJdfSwiYXVpLXN1cmZhY2UtYmFzZSI6e3JlcXVpcmVzOiJiYXNlLWJ1aWxkIG5vZGUtc3R5bGUgdGltZXJzIGF1aS1kZWJvdW5jZSBhdWktcHJvbWlzZSBhdWktcGFyc2UtY29udGVudCIuc3BsaXQoIiAiKX0sImF1aS1zdXJmYWNlLXNjcmVlbiI6e3JlcXVpcmVzOlsiYmFzZS1idWlsZCJdfSwiYXVpLXN1cmZhY2Utc2NyZWVuLWh0bWwiOntyZXF1aXJlczpbImF1aS1iYXNlIiwiYXVpLWlvLXJlcXVlc3QiLAoiYXVpLXByb21pc2UiLCJhdWktc3VyZmFjZS1zY3JlZW4iLCJhdWktdXJsIl19LCJhdWktc3VyZmFjZS1zY3JlZW4tcm91dGUiOntyZXF1aXJlczpbImJhc2UtYnVpbGQiXX0sImF1aS1zd2YtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsicXVlcnlzdHJpbmctcGFyc2Utc2ltcGxlIiwicXVlcnlzdHJpbmctc3RyaW5naWZ5LXNpbXBsZSIsImF1aS1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS10YWJzLWRhdGEtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktZGF0YS1lZGl0b3IiLCJhdWktdGFidmlldyJdfSwiYXVpLXRhYnZpZXciOntyZXF1aXJlczpbInNlbGVjdG9yLWNzczMiLCJ0YWJ2aWV3IiwiYXVpLWNvbXBvbmVudCIsImF1aS13aWRnZXQtY3NzIl0sc2tpbm5hYmxlOiEwfSwiYXVpLXRlbXBsYXRlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS10ZXh0LWRhdGEtZWRpdG9yIjp7cmVxdWlyZXM6WyJhdWktZGF0YS1lZGl0b3IiLCJldmVudC12YWx1ZWNoYW5nZSJdLApza2lubmFibGU6ITB9LCJhdWktdGV4dC1kYXRhLXVuaWNvZGUiOntyZXF1aXJlczpbInRleHQiXX0sImF1aS10ZXh0LXVuaWNvZGUiOntyZXF1aXJlczpbImF1aS10ZXh0LWRhdGEtdW5pY29kZSJdfSwiYXVpLXRleHRib3hsaXN0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczoiYW5pbS1ub2RlLXBsdWdpbiBhdWktYXV0b2NvbXBsZXRlLWRlcHJlY2F0ZWQgYXVpLWJ1dHRvbi1pdGVtLWRlcHJlY2F0ZWQgYXVpLWRhdGEtc2V0LWRlcHJlY2F0ZWQgZXNjYXBlIG5vZGUtZm9jdXNtYW5hZ2VyIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS10aW1lcGlja2VyIjp7cmVxdWlyZXM6WyJhdXRvY29tcGxldGUiLCJhdWktZGF0ZXBpY2tlci1kZWxlZ2F0ZSIsImF1aS1kYXRlcGlja2VyLXBvcG92ZXIiXSxza2lubmFibGU6ITB9LCJhdWktdGltZXBpY2tlci1uYXRpdmUiOntyZXF1aXJlczpbImJhc2UiLCJiYXNlLWJ1aWxkIiwiYXVpLW5vZGUtYmFzZSIsImF1aS1kYXRlcGlja2VyLWRlbGVnYXRlIiwKImF1aS1kYXRlcGlja2VyLW5hdGl2ZSJdfSwiYXVpLXRpbWVyIjp7cmVxdWlyZXM6WyJvb3AiXX0sImF1aS10b2dnbGVyIjp7dXNlOlsiYXVpLXRvZ2dsZXItYmFzZSIsImF1aS10b2dnbGVyLWRlbGVnYXRlIl19LCJhdWktdG9nZ2xlci1hY2Nlc3NpYmlsaXR5Ijp7cmVxdWlyZXM6WyJhdWktdG9nZ2xlci1iYXNlIl19LCJhdWktdG9nZ2xlci1iYXNlIjp7cmVxdWlyZXM6InRyYW5zaXRpb24gYXVpLXNlbGVjdG9yIGF1aS1ldmVudC1iYXNlIGF1aS1ub2RlIGF1aS1jb21wb25lbnQgZXZlbnQtdGFwIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS10b2dnbGVyLWRlbGVnYXRlIjp7cmVxdWlyZXM6WyJhcnJheS1pbnZva2UiLCJub2RlLWV2ZW50LWRlbGVnYXRlIiwiYXVpLXRvZ2dsZXItYmFzZSJdfSwiYXVpLXRvb2xiYXIiOntyZXF1aXJlczpbImFycmF5bGlzdCIsImFycmF5bGlzdC1hZGQiLCJhdWktY29tcG9uZW50IiwiYXVpLWJ1dHRvbi1jb3JlIl19LCJhdWktdG9vbHRpcCI6e3VzZTpbImF1aS10b29sdGlwLWJhc2UiLAoiYXVpLXRvb2x0aXAtZGVsZWdhdGUiXX0sImF1aS10b29sdGlwLWJhc2UiOntyZXF1aXJlczoiYXVpLWFyaWEgYXVpLWNsYXNzbmFtZW1hbmFnZXIgYXVpLWNvbXBvbmVudCBhdWktZGVib3VuY2UgYXVpLW5vZGUtYmFzZSBhdWktd2lkZ2V0LWNzc2NsYXNzIGF1aS13aWRnZXQtdG9nZ2xlIGF1aS13aWRnZXQtdHJhbnNpdGlvbiBhdWktd2lkZ2V0LXRyaWdnZXIgYXVpLXdpZGdldC1wb3NpdGlvbi1hbGlnbi1zdWdnZXN0aW9uIGV2ZW50LWhvdmVyIGV2ZW50LXJlc2l6ZSBlc2NhcGUgd2lkZ2V0IHdpZGdldC1hdXRvaGlkZSB3aWRnZXQtcG9zaXRpb24gd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4gd2lkZ2V0LXN0YWNrIHdpZGdldC1zdGRtb2QiLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSwiYXVpLXRvb2x0aXAtZGVsZWdhdGUiOntyZXF1aXJlczpbImF1aS10b29sdGlwLWJhc2UiLCJub2RlLWV2ZW50LWRlbGVnYXRlIl19LCJhdWktdG9vbHRpcC1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktb3ZlcmxheS1jb250ZXh0LXBhbmVsLWRlcHJlY2F0ZWQiXSwKc2tpbm5hYmxlOiEwfSwiYXVpLXRwbC1zbmlwcGV0cy1iYXNlLWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS10ZW1wbGF0ZS1kZXByZWNhdGVkIl19LCJhdWktdHBsLXNuaXBwZXRzLWNoZWNrYm94LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS10cGwtc25pcHBldHMtYmFzZS1kZXByZWNhdGVkIl19LCJhdWktdHBsLXNuaXBwZXRzLWRlcHJlY2F0ZWQiOnt1c2U6WyJhdWktdHBsLXNuaXBwZXRzLWJhc2UtZGVwcmVjYXRlZCIsImF1aS10cGwtc25pcHBldHMtY2hlY2tib3gtZGVwcmVjYXRlZCIsImF1aS10cGwtc25pcHBldHMtaW5wdXQtZGVwcmVjYXRlZCIsImF1aS10cGwtc25pcHBldHMtc2VsZWN0LWRlcHJlY2F0ZWQiLCJhdWktdHBsLXNuaXBwZXRzLXRleHRhcmVhLWRlcHJlY2F0ZWQiXX0sImF1aS10cGwtc25pcHBldHMtaW5wdXQtZGVwcmVjYXRlZCI6e3JlcXVpcmVzOlsiYXVpLXRwbC1zbmlwcGV0cy1iYXNlLWRlcHJlY2F0ZWQiXX0sImF1aS10cGwtc25pcHBldHMtc2VsZWN0LWRlcHJlY2F0ZWQiOntyZXF1aXJlczpbImF1aS10cGwtc25pcHBldHMtYmFzZS1kZXByZWNhdGVkIl19LAoiYXVpLXRwbC1zbmlwcGV0cy10ZXh0YXJlYS1kZXByZWNhdGVkIjp7cmVxdWlyZXM6WyJhdWktdHBsLXNuaXBwZXRzLWJhc2UtZGVwcmVjYXRlZCJdfSwiYXVpLXRyZWUiOnt1c2U6WyJhdWktdHJlZS1kYXRhIiwiYXVpLXRyZWUtaW8iLCJhdWktdHJlZS1ub2RlIiwiYXVpLXRyZWUtcGFnaW5hdG9yIiwiYXVpLXRyZWUtdmlldyJdfSwiYXVpLXRyZWUtZGF0YSI6e3JlcXVpcmVzOlsiYXVpLWJhc2UtY29yZSIsImF1aS1iYXNlLWxhbmciLCJhdWktbm9kZS1iYXNlIiwiYXVpLXRpbWVyIiwiYXVpLWNvbXBvbmVudCJdfSwiYXVpLXRyZWUtaW8iOntyZXF1aXJlczpbImF1aS1jb21wb25lbnQiLCJhdWktaW8iXX0sImF1aS10cmVlLW5vZGUiOntyZXF1aXJlczoianNvbiBxdWVyeXN0cmluZy1zdHJpbmdpZnkgYXVpLXRyZWUtZGF0YSBhdWktdHJlZS1pbyBhdWktdHJlZS1wYWdpbmF0b3IgZXZlbnQta2V5Ii5zcGxpdCgiICIpfSwiYXVpLXRyZWUtcGFnaW5hdG9yIjp7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSwKImF1aS10cmVlLXZpZXciOntyZXF1aXJlczoiZGQtZGVsZWdhdGUgZGQtcHJveHkgd2lkZ2V0IGF1aS10cmVlLW5vZGUgYXVpLXRyZWUtcGFnaW5hdG9yIGF1aS10cmVlLWlvIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS11bmRvLXJlZG8iOntyZXF1aXJlczpbImJhc2UiLCJiYXNlLWJ1aWxkIiwicHJvbWlzZSJdfSwiYXVpLXVybCI6e3JlcXVpcmVzOlsib29wIiwicXVlcnlzdHJpbmctcGFyc2UiLCJxdWVyeXN0cmluZy1zdHJpbmdpZnkiXX0sImF1aS12aWRlbyI6e3JlcXVpcmVzOiJldmVudC1yZXNpemUgbm9kZS1ldmVudC1odG1sNSBxdWVyeXN0cmluZy1zdHJpbmdpZnktc2ltcGxlIGF1aS1hcmlhIGF1aS1ub2RlIGF1aS1jb21wb25lbnQgYXVpLWRlYm91bmNlIi5zcGxpdCgiICIpLHNraW5uYWJsZTohMH0sImF1aS12aWV3cG9ydCI6e3JlcXVpcmVzOlsiYXVpLW5vZGUiLCJhdWktY29tcG9uZW50Il19LCJhdWktd2lkZ2V0Ijp7dXNlOlsiYXVpLXdpZGdldC1jc3NjbGFzcyIsCiJhdWktd2lkZ2V0LXRvb2xiYXJzIl19LCJhdWktd2lkZ2V0LWNvcmUiOnt1c2U6WyJhdWktd2lkZ2V0LWNzc2NsYXNzIl19LCJhdWktd2lkZ2V0LWNzc2NsYXNzIjp7cmVxdWlyZXM6WyJ3aWRnZXQtYmFzZSJdfSwiYXVpLXdpZGdldC1wb3NpdGlvbi1hbGlnbi1zdWdnZXN0aW9uIjp7cmVxdWlyZXM6WyJ3aWRnZXQtcG9zaXRpb24tYWxpZ24iLCJ3aWRnZXQtc3RkbW9kIl19LCJhdWktd2lkZ2V0LXJlc3BvbnNpdmUiOntyZXF1aXJlczpbImV2ZW50LXJlc2l6ZSIsIndpZGdldC1iYXNlIl19LCJhdWktd2lkZ2V0LXNob3J0Y3V0Ijp7cmVxdWlyZXM6WyJiYXNlIl19LCJhdWktd2lkZ2V0LXN3aXBlIjp7cmVxdWlyZXM6WyJjbGFzc25hbWVtYW5hZ2VyIiwic2Nyb2xsdmlldy1iYXNlIiwic2Nyb2xsdmlldy1wYWdpbmF0b3IiLCJ0aW1lcnMiXX0sImF1aS13aWRnZXQtdG9nZ2xlIjp7fSwiYXVpLXdpZGdldC10b29sYmFycyI6e3JlcXVpcmVzOlsid2lkZ2V0LXN0ZG1vZCIsImF1aS10b29sYmFyIl19LAoiYXVpLXdpZGdldC10cmFuc2l0aW9uIjp7cmVxdWlyZXM6WyJ0cmFuc2l0aW9uIl19LCJhdWktd2lkZ2V0LXRyaWdnZXIiOntyZXF1aXJlczpbIm5vZGUiXX19KTtZVUkuRW52W2EudmVyc2lvbl0ubWQ1PSIwMjc4ZGM2OTM5ZjU0YWNhMmM4N2Q1MDBmMjQxMjQyMiI7YS5VQS5lZGdlPWZ1bmN0aW9uKCl7dmFyIHE9YS5VQS51c2VyQWdlbnQubWF0Y2goL0VkZ2VcLyguWzAtOS5dKykvKTtyZXR1cm4gcT9xWzFdOjB9KCk7YS5zdXBwb3J0c0RPTUV2ZW50PWZ1bmN0aW9uKHEsdCl7dD0ib24iK3Q7cmV0dXJuIHQgaW4gcXx8KHEuc2V0QXR0cmlidXRlfHwocT1hLmNvbmZpZy5kb2MuY3JlYXRlRWxlbWVudCgiZGl2IikpLCFxLnNldEF0dHJpYnV0ZSk/ITA6KHEuc2V0QXR0cmlidXRlKHQsIiIpLCJmdW5jdGlvbiI9PT10eXBlb2YgcVt0XSl9OyhmdW5jdGlvbigpe3ZhciBxPUFycmF5LnByb3RvdHlwZS5zbGljZTtZVUkucHJvdG90eXBlLnJlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLApmPXQubGVuZ3RoLTEsZD1xLmNhbGwoYXJndW1lbnRzLDAsZik7ZC51bnNoaWZ0KCJldmVudC1iYXNlIik7ZC5wdXNoKGZ1bmN0aW9uKGMpe3ZhciBiPWFyZ3VtZW50cztjLm9uKCJkb21yZWFkeSIsZnVuY3Rpb24oKXt0W2ZdLmFwcGx5KHRoaXMsYil9KX0pO3RoaXMudXNlLmFwcGx5KHRoaXMsZCl9fSkoKX0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiKTsKWVVJLmFkZCgiYXVpLWJhc2UtbGFuZyIsZnVuY3Rpb24oYSxFKXsoZnVuY3Rpb24oKXt2YXIgcT1hLkxhbmcsdD1hLkFycmF5LGY9YS5PYmplY3QsZD1xLmlzQXJyYXksYz1xLmlzTnVtYmVyLGI9cS5pc1N0cmluZyxnPXEuaXNVbmRlZmluZWQsZT1mLm93bnM7YS5mbj1mdW5jdGlvbihELEosUCl7dmFyIFYsWTtpZihjKEQpKXt2YXIgbmE9RDtEPUo7Sj1QO1k9YihEKSYmSjtWPWZ1bmN0aW9uKCl7dmFyIGlhPVk/SltEXTpEO0o9Snx8aWE7cmV0dXJuIDA8bmE/aWEuYXBwbHkoSix0KGFyZ3VtZW50cywwLCEwKS5zbGljZSgwLG5hKSk6aWEuY2FsbChKKX19ZWxzZXt2YXIgZmE9YXJndW1lbnRzOzI8ZmEubGVuZ3RoJiYoZmE9dChmYSwyLCEwKSk7WT1iKEQpJiZKO1Y9ZnVuY3Rpb24oKXtyZXR1cm4oWT9KW0RdOkQpLmFwcGx5KEp8fEQsZmEpfX1yZXR1cm4gVn07YS5taXgocSx7Y29uc3RyYWluOmZ1bmN0aW9uKEQsSixQKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoRCxKKSxQKX0sCmVtcHR5Rm46ZnVuY3Rpb24oKXt9LGVtcHR5Rm5GYWxzZTpmdW5jdGlvbigpe3JldHVybiExfSxlbXB0eUZuVHJ1ZTpmdW5jdGlvbigpe3JldHVybiEwfSxpc0d1aWQ6ZnVuY3Rpb24oRCl7cmV0dXJuIDA9PT1TdHJpbmcoRCkuaW5kZXhPZihhLkVudi5fZ3VpZHApfSxpc0ludGVnZXI6ZnVuY3Rpb24oRCl7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgRCYmaXNGaW5pdGUoRCkmJi05MDA3MTk5MjU0NzQwOTkyPEQmJjkwMDcxOTkyNTQ3NDA5OTI+RCYmTWF0aC5mbG9vcihEKT09PUR9LGlzTm9kZTpmdW5jdGlvbihEKXtyZXR1cm4gYS5pbnN0YW5jZU9mKEQsYS5Ob2RlKX0saXNOb2RlTGlzdDpmdW5jdGlvbihEKXtyZXR1cm4gYS5pbnN0YW5jZU9mKEQsYS5Ob2RlTGlzdCl9LHRvRmxvYXQ6ZnVuY3Rpb24oRCxKKXtyZXR1cm4gcGFyc2VGbG9hdChEKXx8Snx8MH0sdG9JbnQ6ZnVuY3Rpb24oRCxKLFApe3JldHVybiBwYXJzZUludChELEp8fDEwKXx8UHx8MH19KTthLm1peCh0LHtyZW1vdmU6ZnVuY3Rpb24oRCwKSixQKXtQPUQuc2xpY2UoKFB8fEopKzF8fEQubGVuZ3RoKTtELmxlbmd0aD0wPko/RC5sZW5ndGgrSjpKO3JldHVybiBELnB1c2guYXBwbHkoRCxQKX0scmVtb3ZlSXRlbTpmdW5jdGlvbihELEope3ZhciBQPXQuaW5kZXhPZihELEopO3JldHVybi0xPFA/dC5yZW1vdmUoRCxQKTpEfX0pO3ZhciBrPWEubmFtZXNwYWNlKCJMYW5nLlN0cmluZyIpLG09YS5jb25maWcuZG9jLHA9Ly0oW2Etel0pL2dpLHM9LyhbLiorP14kKCl7fXxbXF1cL1xcXSkvZyxsPS9ccj9cbi9nLGg9Lyg/OjxzY3JpcHQuKj8+KSgoXG58XHJ8LikqPykoPzo8XC9zY3JpcHQ+KS9naSx1PS88XC8/W14+XSs+L2dpLHc9LyhbYS16QS1aXVthLXpBLVpdKShbQS1aXSkoW2Etel0pL2csej0vKFthLXpdKShbQS1aXSkvZyxBPVtdLEg9eyJceDI2IjoiXHgyNmFtcDsiLCJceDNjIjoiXHgyNmx0OyIsIlx4M2UiOiJceDI2Z3Q7IiwnIic6Ilx4MjYjMDM0OyIsIiciOiJceDI2IzAzOTsiLCIvIjoiXHgyNiMwNDc7IiwiYCI6Ilx4MjYjMDk2OyJ9LApGLEI9e307Zm9yKEYgaW4gSClILmhhc093blByb3BlcnR5KEYpJiYoQltIW0ZdXT1GLEEucHVzaChGKSk7dmFyIEk9UmVnRXhwKCJbIitBLmpvaW4oIiIpKyJdIiwiZyIpLE09LyYoW147XSspOy9nO2EubWl4KGsse2NhbWVsaXplOmEuY2FjaGVkKGZ1bmN0aW9uKEQsSil7dmFyIFA9cDtEPVN0cmluZyhEKTtKJiYoUD1SZWdFeHAoSisiKFthLXpdKSIsImdpIikpO3JldHVybiBELnJlcGxhY2UoUCxrLl9jYW1lbGl6ZSl9KSxjYXBpdGFsaXplOmEuY2FjaGVkKGZ1bmN0aW9uKEQpe0QmJihEPVN0cmluZyhEKSxEPUQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrRC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKSk7cmV0dXJuIER9KSxjb250YWluczpmdW5jdGlvbihELEope3JldHVybi0xIT09RC5pbmRleE9mKEopfSxkZWZhdWx0VmFsdWU6ZnVuY3Rpb24oRCxKKXtpZihnKEQpfHwiIj09PUQpZyhKKSYmKEo9IiIpLEQ9SjtyZXR1cm4gRH0sZW5kc1dpdGg6ZnVuY3Rpb24oRCxKKXt2YXIgUD0KRC5sZW5ndGgtSi5sZW5ndGg7cmV0dXJuIDA8PVAmJkQuaW5kZXhPZihKLFApPT09UH0sZXNjYXBlSFRNTDpmdW5jdGlvbihEKXtyZXR1cm4gRC5yZXBsYWNlKEksay5fZXNjYXBlSFRNTCl9LGVzY2FwZVJlZ0V4OmZ1bmN0aW9uKEQpe3JldHVybiBELnJlcGxhY2UocywiXFwkMSIpfSxubDJicjpmdW5jdGlvbihEKXtyZXR1cm4gU3RyaW5nKEQpLnJlcGxhY2UobCwiXHgzY2JyIC9ceDNlIil9LHBhZE51bWJlcjpmdW5jdGlvbihELEosUCl7RD1QP051bWJlcihEKS50b0ZpeGVkKFApOlN0cmluZyhEKTtQPUQuaW5kZXhPZigiLiIpOy0xPT09UCYmKFA9RC5sZW5ndGgpO3JldHVybiBrLnJlcGVhdCgiMCIsTWF0aC5tYXgoMCxKLVApKStEfSxwbHVyYWxpemU6ZnVuY3Rpb24oRCxKLFApe3JldHVybiBEKyIgIisoMT09PUQ/SjpQfHxKKyJzIil9LHByZWZpeDpmdW5jdGlvbihELEope0o9U3RyaW5nKEopOzAhPT1KLmluZGV4T2YoRCkmJihKPUQrSik7cmV0dXJuIEp9LHJlbW92ZTpmdW5jdGlvbihELApKLFApe0o9UmVnRXhwKGsuZXNjYXBlUmVnRXgoSiksUD8iZyI6IiIpO3JldHVybiBELnJlcGxhY2UoSiwiIil9LHJlbW92ZUFsbDpmdW5jdGlvbihELEope3JldHVybiBrLnJlbW92ZShELEosITApfSxyZXBlYXQ6ZnVuY3Rpb24oRCxKKXtyZXR1cm4gQXJyYXkoSisxKS5qb2luKEQpfSxyb3VuZDpmdW5jdGlvbihELEope0Q9TnVtYmVyKEQpO2MoSikmJihKPU1hdGgucG93KDEwLEopLEQ9TWF0aC5yb3VuZChEKkopL0opO3JldHVybiBEfSxzdGFydHNXaXRoOmZ1bmN0aW9uKEQsSil7cmV0dXJuIDA9PT1ELmxhc3RJbmRleE9mKEosMCl9LHN0cmlwU2NyaXB0czpmdW5jdGlvbihEKXtEJiYoRD1TdHJpbmcoRCkucmVwbGFjZShoLCIiKSk7cmV0dXJuIER9LHN0cmlwVGFnczpmdW5jdGlvbihEKXtEJiYoRD1TdHJpbmcoRCkucmVwbGFjZSh1LCIiKSk7cmV0dXJuIER9LHN1YnN0cjpmdW5jdGlvbihELEosUCl7cmV0dXJuIFN0cmluZyhEKS5zdWJzdHIoSixQKX0sdW5jYW1lbGl6ZTphLmNhY2hlZChmdW5jdGlvbihELApKKXtKPUp8fCIgIjtEPVN0cmluZyhEKTtEPUQucmVwbGFjZSh3LCIkMSIrSisiJDIkMyIpO3JldHVybiBEPUQucmVwbGFjZSh6LCIkMSIrSisiJDIiKX0pLHRvTG93ZXJDYXNlOmZ1bmN0aW9uKEQpe3JldHVybiBTdHJpbmcoRCkudG9Mb3dlckNhc2UoKX0sdG9VcHBlckNhc2U6ZnVuY3Rpb24oRCl7cmV0dXJuIFN0cmluZyhEKS50b1VwcGVyQ2FzZSgpfSx0cmltOnEudHJpbSx0cnVuY2F0ZTpmdW5jdGlvbihELEosUCl7RD1TdHJpbmcoRCk7dmFyIFY9RC5sZW5ndGg7aWYoMzxKKXtpZihEJiZWPkopaWYoUD1QfHwiZW5kIiwiZW5kIj09PVApRD1ELnN1YnN0cigwLEotMykrIi4uLiI7ZWxzZSBpZigibWlkZGxlIj09PVApe3ZhciBZPVA9TWF0aC5mbG9vcigoSi0zKS8yKTswPT09SiUyJiYoUD1NYXRoLmNlaWwoKEotMykvMiksWT1NYXRoLmZsb29yKChKLTMpLzIpKTtEPUQuc3Vic3RyKDAsUCkrIi4uLiIrRC5zdWJzdHIoVi1ZKX1lbHNlInN0YXJ0Ij09PVAmJihEPSIuLi4iK0Quc3Vic3RyKFYtCkorMykpfWVsc2UgRD0iLi4uIjtyZXR1cm4gRH0sdW5kZWY6ZnVuY3Rpb24oRCl7ZyhEKSYmKEQ9IiIpO3JldHVybiBEfSx1bmVzY2FwZUVudGl0aWVzOmZ1bmN0aW9uKEQpe2suY29udGFpbnMoRCwiXHgyNiIpJiYoRD1tJiYhay5jb250YWlucyhELCJceDNjIik/ay5fdW5lc2NhcGVFbnRpdGllc1VzaW5nRG9tKEQpOmsudW5lc2NhcGVIVE1MKEQpKTtyZXR1cm4gRH0sdW5lc2NhcGVIVE1MOmZ1bmN0aW9uKEQpe3JldHVybiBELnJlcGxhY2UoTSxrLl91bmVzY2FwZUhUTUwpfSxfY2FtZWxpemU6ZnVuY3Rpb24oRCxKKXtyZXR1cm4gSi50b1VwcGVyQ2FzZSgpfSxfZXNjYXBlSFRNTDpmdW5jdGlvbihEKXtyZXR1cm4gSFtEXX0sX3VuZXNjYXBlSFRNTDpmdW5jdGlvbihELEope3ZhciBQPUJbRF18fEQ7aWYoIVAmJiIjIj09PUouY2hhckF0KDApKXt2YXIgVj1OdW1iZXIoIjAiK1Auc3Vic3RyKDEpKTtpc05hTihWKXx8KFA9U3RyaW5nLmZyb21DaGFyQ29kZShWKSl9cmV0dXJuIFB9LApfdW5lc2NhcGVFbnRpdGllc1VzaW5nRG9tOmZ1bmN0aW9uKEQpe3ZhciBKPW0uY3JlYXRlRWxlbWVudCgiYSIpO0ouaW5uZXJIVE1MPUQ7Si5ub3JtYWxpemUmJkoubm9ybWFsaXplKCk7RD1KLmZpcnN0Q2hpbGQubm9kZVZhbHVlO0ouaW5uZXJIVE1MPSIiO3JldHVybiBEfX0pO2YubWFwPWZ1bmN0aW9uKEQsSixQKXt2YXIgVj1bXSxZO2ZvcihZIGluIEQpZShELFkpJiYoVltWLmxlbmd0aF09Si5jYWxsKFAsRFtZXSxZLEQpKTtyZXR1cm4gVn07YS5tYXA9ZnVuY3Rpb24oRCl7dmFyIEo9ZjtkKEQpJiYoSj10KTtyZXR1cm4gSi5tYXAuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pKCl9LCIzLjAuMy1kZXByZWNhdGVkLjczIik7CllVSS5hZGQoImF1aS1jbGFzc25hbWVtYW5hZ2VyIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuQ2xhc3NOYW1lTWFuYWdlcix0PXEuZ2V0Q2xhc3NOYW1lO2EuZ2V0Q2xhc3NOYW1lPWEuY2FjaGVkKGZ1bmN0aW9uKCl7dmFyIGY9YS5BcnJheShhcmd1bWVudHMsMCwhMCk7ZltmLmxlbmd0aF09ITA7cmV0dXJuIHQuYXBwbHkocSxmKX0pfSwiMy4wLjMtZGVwcmVjYXRlZC43MyIse3JlcXVpcmVzOlsiY2xhc3NuYW1lbWFuYWdlciJdfSk7CllVSS5hZGQoImF1aS1jb21wb25lbnQiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5MYW5nLHQ9YS5BcnJheSxmPXt9LGQ9YS5jb25maWcud2luLk9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IsYz1hLkNsYXNzTmFtZU1hbmFnZXIuZ2V0Q2xhc3NOYW1lLGI9YS5XaWRnZXQuZ2V0Q2xhc3NOYW1lLGc9YS5nZXRDbGFzc05hbWUsZT1nKCJoaWRlIiksaz1hLkJhc2UuY3JlYXRlKCJjb21wb25lbnQiLGEuV2lkZ2V0LFthLldpZGdldENzc0NsYXNzLGEuV2lkZ2V0VG9nZ2xlXSx7aW5pdGlhbGl6ZXI6ZnVuY3Rpb24ocyl7dGhpcy5fb3JpZ2luYWxDb25maWc9czt0aGlzLl9zZXRSZW5kZXIocyk7Zlt0aGlzLmdldCgiaWQiKV09dGhpc30sY2xvbmU6ZnVuY3Rpb24ocyl7cz1zfHx7fTtzLmlkPXMuaWR8fGEuZ3VpZCgpO2EubWl4KHMsdGhpcy5fb3JpZ2luYWxDb25maWcpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihzKX0sX3VpU2V0VmlzaWJsZTpmdW5jdGlvbihzKXt2YXIgbD1rLnN1cGVyY2xhc3MuX3VpU2V0VmlzaWJsZTsKbCYmbC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bD10aGlzLmdldCgiaGlkZUNsYXNzIik7ITEhPT1sJiZ0aGlzLmdldCgiYm91bmRpbmdCb3giKS50b2dnbGVDbGFzcyhsfHxlLCFzKX0sX3JlbmRlckJveENsYXNzTmFtZXM6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldCgiYm91bmRpbmdCb3giKS5fbm9kZSxsPXRoaXMuZ2V0KCJjb250ZW50Qm94IikuX25vZGUsaD1zLmNsYXNzTmFtZSx1PWwuY2xhc3NOYW1lLGg9aD9oLnNwbGl0KCIgIik6W10sdT11P3Uuc3BsaXQoIiAiKTpbXSx3PXRoaXMuX2dldENsYXNzZXMoKSx6PXcubGVuZ3RoLEE9ei00LEg7aC5wdXNoKGIoKSk7Zm9yKHZhciBGPXotMzswPD1GO0YtLSl6PXdbRl0sSD1TdHJpbmcoei5OQU1FKS50b0xvd2VyQ2FzZSgpLGgucHVzaCh6LkNTU19QUkVGSVh8fGMoSCkpLEY8PUEmJnUucHVzaChnKEgsImNvbnRlbnQiKSk7dS5wdXNoKHRoaXMuZ2V0Q2xhc3NOYW1lKCJjb250ZW50IikpO3M9PT1sP3U9dC5kZWR1cGUodS5jb25jYXQoaCkpLmpvaW4oIiAiKToKKHMuY2xhc3NOYW1lPXQuZGVkdXBlKGgpLmpvaW4oIiAiKSx1PXQuZGVkdXBlKHUpLmpvaW4oIiAiKSk7bC5jbGFzc05hbWU9dX0sX3JlbmRlckludGVyYWN0aW9uOmZ1bmN0aW9uKHMsbCl7dGhpcy5yZW5kZXIobCk7Zm9yKHZhciBoPXRoaXMuX3JlbmRlckhhbmRsZXMsdT1oLmxlbmd0aC0xOzA8PXU7dS0tKWgucG9wKCkuZGV0YWNoKCl9LF9zZXRSZW5kZXI6ZnVuY3Rpb24ocyl7dmFyIGw9cyYmcy5yZW5kZXI7aWYobCYmbC5jb25zdHJ1Y3Rvcj09PWQpe3ZhciBoPWwuZXZlbnRUeXBlfHwibW91c2Vtb3ZlIix1PWwucGFyZW50Tm9kZSx3PWwuc2VsZWN0b3J8fHU7aWYodyl7bD10aGlzLl9yZW5kZXJIYW5kbGVzPVtdO3EuaXNBcnJheShoKXx8KGg9W2hdKTtmb3IodmFyIHU9YS5yYmluZCh0aGlzLl9yZW5kZXJJbnRlcmFjdGlvbix0aGlzLHUpLHc9YS5vbmUodyksej1oLmxlbmd0aC0xOzA8PXo7ei0tKWxbel09dy5vbmNlKGhbel0sdSk7ZGVsZXRlIHMucmVuZGVyfX19fSx7QVRUUlM6e3VzZUFSSUE6e3dyaXRlT25jZTohMCwKdmFsdWU6ITEsdmFsaWRhdG9yOnEuaXNCb29sZWFufSxoaWRlQ2xhc3M6e3ZhbHVlOmV9LHJlbmRlcjp7dmFsdWU6ITEsd3JpdGVPbmNlOiEwfX19KTtrLl9JTlNUQU5DRVM9ZjtrLmdldEJ5SWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGZbc119O3ZhciBtPWEuV2lkZ2V0LnByb3RvdHlwZS5fVUlfQVRUUlM7ay5fYXBwbHlDc3NQcmVmaXg9ZnVuY3Rpb24ocyl7IXN8fCFzLk5BTUV8fCJDU1NfUFJFRklYImluIHN8fChzLkNTU19QUkVGSVg9YS5nZXRDbGFzc05hbWUoU3RyaW5nKHMuTkFNRSkudG9Mb3dlckNhc2UoKSkpO3JldHVybiBzfTtrLmNyZWF0ZT1mdW5jdGlvbihzKXtzPXN8fHt9O3ZhciBsPXMuRVhURU5EU3x8YS5Db21wb25lbnQsaD1zLmNvbnN0cnVjdG9yO2EuT2JqZWN0Lm93bnMocywiY29uc3RydWN0b3IiKXx8KGg9ZnVuY3Rpb24oKXtoLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7dmFyIHU9cy5wcm90b3R5cGU7aWYodSYmKHMuVUlfQVRUUlN8fApzLkJJTkRfVUlfQVRUUlN8fHMuU1lOQ19VSV9BVFRSUykpe3ZhciB3PShzLkJJTkRfVUlfQVRUUlN8fFtdKS5jb25jYXQocy5VSV9BVFRSU3x8W10pLHo9KHMuU1lOQ19VSV9BVFRSU3x8W10pLmNvbmNhdChzLlVJX0FUVFJTfHxbXSksQT1sLnByb3RvdHlwZSxBPUEmJkEuX1VJX0FUVFJTfHxtLHc9KEEuQklORHx8W10pLmNvbmNhdCh3fHxbXSksej0oQS5TWU5DfHxbXSkuY29uY2F0KHp8fFtdKSxBPXUuX1VJX0FUVFJTO0F8fChBPXUuX1VJX0FUVFJTPXt9KTt3Lmxlbmd0aCYmKEEuQklORD13KTt6Lmxlbmd0aCYmKEEuU1lOQz16KX0odz1zLkFVR01FTlRTKSYmIXEuaXNBcnJheSh3KSYmKHc9W3ddKTthLm1peChoLHMpO2RlbGV0ZSBoLnByb3RvdHlwZTthLmV4dGVuZChoLGwsdSk7dyYmKGg9YS5CYXNlLmJ1aWxkKHMuTkFNRSxoLHcse2R5bmFtaWM6ITF9KSk7ay5fYXBwbHlDc3NQcmVmaXgoaCk7cmV0dXJuIGh9O2suQ1NTX1BSRUZJWD1nKCJjb21wb25lbnQiKTt2YXIgcD1hLkJhc2U7CmsuYnVpbGQ9ZnVuY3Rpb24oKXt2YXIgcz1wLmJ1aWxkLmFwcGx5KHAsYXJndW1lbnRzKTtrLl9hcHBseUNzc1ByZWZpeChzKTtyZXR1cm4gc307YS5Db21wb25lbnQ9a30sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbImF1aS1jbGFzc25hbWVtYW5hZ2VyIiwiYXVpLXdpZGdldC1jc3NjbGFzcyIsImF1aS13aWRnZXQtdG9nZ2xlIiwiYmFzZS1idWlsZCIsIndpZGdldC1iYXNlIl19KTsKWVVJLmFkZCgiYXVpLWRlYm91bmNlIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZyx0PWEuQXJyYXksZj1xLmlzU3RyaW5nLGQ9cS5pc1VuZGVmaW5lZCxjPVtdO2EuZGVib3VuY2U9ZnVuY3Rpb24oYixnLGUsayl7dmFyIG0scCxzO2YoYikmJmUmJihiPWEuYmluZChiLGUpKTtnPWd8fDA7az1kKGFyZ3VtZW50cyk/Yzp0KGFyZ3VtZW50cywzLCEwKTt2YXIgbD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwobSk7bT1udWxsO3ZhciB1PWIuYXBwbHkoZSxwfHxrfHxjKTtwPW51bGw7cmV0dXJuIHV9LGg9ZnVuY3Rpb24oKXttJiYoY2xlYXJJbnRlcnZhbChtKSxtPW51bGwpfTtzPWZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVsYXkoZyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50czprLGV8fHRoaXMpfTtzLmNhbmNlbD1oO3MuZGVsYXk9ZnVuY3Rpb24odSx3LHosQSl7cy5jYW5jZWwoKTt1PWQodSk/Zzp1O2I9QXx8YjtlPXp8fGU7dyE9PWsmJihwPShkKHcpP2M6dCh3LDAsITEpKS5jb25jYXQoaykpOwppZigwPHUpbT1zZXRJbnRlcnZhbChsLHUpO2Vsc2UgcmV0dXJuIGwoKX07cy5zZXREZWxheT1mdW5jdGlvbih1KXtoKCl9O3JldHVybiBzfX0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiKTsKWVVJLmFkZCgiYXVpLWRlbGF5ZWQtdGFzay1kZXByZWNhdGVkIixmdW5jdGlvbihhLEUpe3ZhciBxPWZ1bmN0aW9uKHQsZixkKXt2YXIgYz10aGlzO2MuX2FyZ3M9ZDtjLl9kZWxheT0wO2MuX2ZuPXQ7Yy5faWQ9bnVsbDtjLl9zY29wZT1mfHxjO2MuX3RpbWU9MDtjLl9iYXNlPWZ1bmN0aW9uKCl7Yy5fZ2V0VGltZSgpLWMuX3RpbWU+PWMuX2RlbGF5JiYoY2xlYXJJbnRlcnZhbChjLl9pZCksYy5faWQ9bnVsbCxjLl9mbi5hcHBseShjLl9zY29wZSxjLl9hcmdzfHxbXSkpfX07cS5wcm90b3R5cGU9e2RlbGF5OmZ1bmN0aW9uKHQsZixkLGMpe3RoaXMuX2lkJiZ0aGlzLl9kZWxheSE9dCYmdGhpcy5jYW5jZWwoKTt0aGlzLl9kZWxheT10fHx0aGlzLl9kZWxheTt0aGlzLl90aW1lPXRoaXMuX2dldFRpbWUoKTt0aGlzLl9mbj1mfHx0aGlzLl9mbjt0aGlzLl9zY29wZT1kfHx0aGlzLl9zY29wZTt0aGlzLl9hcmdzPWN8fHRoaXMuX2FyZ3M7YS5MYW5nLmlzQXJyYXkodGhpcy5fYXJncyl8fAoodGhpcy5fYXJncz1bdGhpcy5fYXJnc10pO3RoaXMuX2lkfHwoMDx0aGlzLl9kZWxheT90aGlzLl9pZD1zZXRJbnRlcnZhbCh0aGlzLl9iYXNlLHRoaXMuX2RlbGF5KTp0aGlzLl9iYXNlKCkpfSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLl9pZCYmKGNsZWFySW50ZXJ2YWwodGhpcy5faWQpLHRoaXMuX2lkPW51bGwpfSxfZ2V0VGltZTpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19O2EuRGVsYXllZFRhc2s9cX0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbInl1aS1iYXNlIl19KTsKWVVJLmFkZCgiYXVpLWV2ZW50LWJhc2UiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5BcnJheSx0PXtCQUNLU1BBQ0U6OCxUQUI6OSxOVU1fQ0VOVEVSOjEyLEVOVEVSOjEzLFJFVFVSTjoxMyxTSElGVDoxNixDVFJMOjE3LEFMVDoxOCxQQVVTRToxOSxDQVBTX0xPQ0s6MjAsRVNDOjI3LFNQQUNFOjMyLFBBR0VfVVA6MzMsUEFHRV9ET1dOOjM0LEVORDozNSxIT01FOjM2LExFRlQ6MzcsVVA6MzgsUklHSFQ6MzksRE9XTjo0MCxQUklOVF9TQ1JFRU46NDQsSU5TRVJUOjQ1LERFTEVURTo0NixaRVJPOjQ4LE9ORTo0OSxUV086NTAsVEhSRUU6NTEsRk9VUjo1MixGSVZFOjUzLFNJWDo1NCxTRVZFTjo1NSxFSUdIVDo1NixOSU5FOjU3LEE6NjUsQjo2NixDOjY3LEQ6NjgsRTo2OSxGOjcwLEc6NzEsSDo3MixJOjczLEo6NzQsSzo3NSxMOjc2LE06NzcsTjo3OCxPOjc5LFA6ODAsUTo4MSxSOjgyLFM6ODMsVDo4NCxVOjg1LFY6ODYsVzo4NyxYOjg4LFk6ODksWjo5MCxDT05URVhUX01FTlU6OTMsCk5VTV9aRVJPOjk2LE5VTV9PTkU6OTcsTlVNX1RXTzo5OCxOVU1fVEhSRUU6OTksTlVNX0ZPVVI6MTAwLE5VTV9GSVZFOjEwMSxOVU1fU0lYOjEwMixOVU1fU0VWRU46MTAzLE5VTV9FSUdIVDoxMDQsTlVNX05JTkU6MTA1LE5VTV9NVUxUSVBMWToxMDYsTlVNX1BMVVM6MTA3LE5VTV9NSU5VUzoxMDksTlVNX1BFUklPRDoxMTAsTlVNX0RJVklTSU9OOjExMSxGMToxMTIsRjI6MTEzLEYzOjExNCxGNDoxMTUsRjU6MTE2LEY2OjExNyxGNzoxMTgsRjg6MTE5LEY5OjEyMCxGMTA6MTIxLEYxMToxMjIsRjEyOjEyMyxOVU1fTE9DSzoxNDQsV0lOX0tFWToyMjQsV0lOX0lNRToyMjksTk9OX01PRElGWUlOR19LRVlTOiJBTFQgQ0FQU19MT0NLIENUUkwgRE9XTiBFTkQgRVNDIEYxIEYxMCBGMTEgRjEyIEYyIEYzIEY0IEY1IEY2IEY3IEY4IEY5IEhPTUUgTEVGVCBOVU1fTE9DSyBQQUdFX0RPV04gUEFHRV9VUCBQQVVTRSBQUklOVF9TQ1JFRU4gUklHSFQgU0hJRlQgU1BBQ0UgVVAgV0lOX0tFWSIuc3BsaXQoIiAiKSwKaGFzTW9kaWZpZXI6ZnVuY3Rpb24oZil7cmV0dXJuIGYmJihmLmN0cmxLZXl8fGYuYWx0S2V5fHxmLnNoaWZ0S2V5fHxmLm1ldGFLZXkpfSxpc0tleTpmdW5jdGlvbihmLGQpe3JldHVybiBkJiYodGhpc1tkXXx8dGhpc1tkLnRvVXBwZXJDYXNlKCldKT09PWZ9LGlzS2V5SW5SYW5nZTpmdW5jdGlvbihmLGQsYyl7dmFyIGI9ITE7ZCYmYyYmKGQ9dGhpc1tkXXx8dGhpc1tkLnRvVXBwZXJDYXNlKCldLGM9dGhpc1tjXXx8dGhpc1tjLnRvVXBwZXJDYXNlKCldLGI9ZCYmYyYmZj49ZCYmZjw9Yyk7cmV0dXJuIGJ9LGlzS2V5SW5TZXQ6ZnVuY3Rpb24oZil7dmFyIGQ9cShhcmd1bWVudHMsMSwhMCk7cmV0dXJuIHRoaXMuX2lzS2V5SW5TZXQoZixkKX0saXNOYXZLZXk6ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuaXNLZXlJblJhbmdlKGYsIlBBR0VfVVAiLCJET1dOIil8fHRoaXMuaXNLZXlJblNldChmLCJFTlRFUiIsIlRBQiIsIkVTQyIpfSxpc1NwZWNpYWxLZXk6ZnVuY3Rpb24oZixkKXtyZXR1cm4ia2V5cHJlc3MiPT09CmQmJnRoaXMuY3RybEtleXx8dGhpcy5pc05hdktleShmKXx8dGhpcy5pc0tleUluUmFuZ2UoZiwiU0hJRlQiLCJDQVBTX0xPQ0siKXx8dGhpcy5pc0tleUluU2V0KGYsIkJBQ0tTUEFDRSIsIlBSSU5UX1NDUkVFTiIsIklOU0VSVCIsIldJTl9JTUUiKX0saXNNb2RpZnlpbmdLZXk6ZnVuY3Rpb24oZil7cmV0dXJuIXRoaXMuX2lzS2V5SW5TZXQoZix0aGlzLk5PTl9NT0RJRllJTkdfS0VZUyl9LF9pc0tleUluU2V0OmZ1bmN0aW9uKGYsZCl7Zm9yKHZhciBjPWQubGVuZ3RoLGI9ITEsZztjLS07KWlmKGc9KGc9ZFtjXSkmJih0aGlzW2ddfHx0aGlzW1N0cmluZyhnKS50b1VwcGVyQ2FzZSgpXSksZj09PWcpe2I9ITA7YnJlYWt9cmV0dXJuIGJ9fTthLm1peChhLkRPTUV2ZW50RmFjYWRlLnByb3RvdHlwZSx7aGFzTW9kaWZpZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdC5oYXNNb2RpZmllcih0aGlzKX0saXNLZXk6ZnVuY3Rpb24oZil7cmV0dXJuIHQuaXNLZXkodGhpcy5rZXlDb2RlLGYpfSxpc0tleUluUmFuZ2U6ZnVuY3Rpb24oZiwKZCl7cmV0dXJuIHQuaXNLZXlJblJhbmdlKHRoaXMua2V5Q29kZSxmLGQpfSxpc0tleUluU2V0OmZ1bmN0aW9uKCl7dmFyIGY9cShhcmd1bWVudHMsMCwhMCk7cmV0dXJuIHQuX2lzS2V5SW5TZXQodGhpcy5rZXlDb2RlLGYpfSxpc01vZGlmeWluZ0tleTpmdW5jdGlvbigpe3JldHVybiB0LmlzTW9kaWZ5aW5nS2V5KHRoaXMua2V5Q29kZSl9LGlzTmF2S2V5OmZ1bmN0aW9uKCl7cmV0dXJuIHQuaXNOYXZLZXkodGhpcy5rZXlDb2RlKX0saXNTcGVjaWFsS2V5OmZ1bmN0aW9uKCl7cmV0dXJuIHQuaXNTcGVjaWFsS2V5KHRoaXMua2V5Q29kZSx0aGlzLnR5cGUpfX0pO2EuRXZlbnQuS2V5TWFwPXQ7YS5FdmVudC5zdXBwb3J0c0RPTUV2ZW50PWEuc3VwcG9ydHNET01FdmVudH0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbImV2ZW50LWJhc2UiXX0pOwpZVUkuYWRkKCJhdWktZXZlbnQtaW5wdXQiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5Ob2RlLkRPTV9FVkVOVFM7aWYoYS5GZWF0dXJlcy50ZXN0KCJldmVudCIsImlucHV0IikpcS5pbnB1dD0xO2Vsc2V7cS5jdXQ9MTtxLmRyYWdlbmQ9MTtxLnBhc3RlPTE7dmFyIHQ9YS5FdmVudC5LZXlNYXAsZj1bImtleWRvd24iLCJwYXN0ZSIsImRyb3AiLCJjdXQiXSxkPXtjdXQ6MSxkcm9wOjEscGFzdGU6MX07YS5FdmVudC5kZWZpbmUoImlucHV0Iix7b246ZnVuY3Rpb24oYyxiLGcpe2IuX2hhbmRsZXI9Yy5vbihmLGEuYmluZCh0aGlzLl9kaXNwYXRjaEV2ZW50LHRoaXMsYixnKSl9LGRlbGVnYXRlOmZ1bmN0aW9uKGMsYixnLGUpe3ZhciBrPXRoaXM7Yi5faGFuZGxlcz1bXTtiLl9oYW5kbGVyPWMuZGVsZWdhdGUoImZvY3VzIixmdW5jdGlvbihtKXttPW0udGFyZ2V0O3ZhciBwPW0uZ2V0RGF0YSgifn5hdWl8aW5wdXR8ZXZlbnR+fiIpO3B8fChwPW0ub24oZixhLmJpbmQoay5fZGlzcGF0Y2hFdmVudCwKayxiLGcpKSxiLl9oYW5kbGVzLnB1c2gocCksbS5zZXREYXRhKCJ+fmF1aXxpbnB1dHxldmVudH5+IixwKSl9LGUpfSxkZXRhY2g6ZnVuY3Rpb24oYyxiKXtiLl9oYW5kbGVyLmRldGFjaCgpfSxkZXRhY2hEZWxlZ2F0ZTpmdW5jdGlvbihjLGIpe2EuQXJyYXkuZWFjaChiLl9oYW5kbGVzLGZ1bmN0aW9uKGcpe3ZhciBlPWEub25lKGcuZXZ0LmVsKTtlJiZlLnNldERhdGEoIn5+YXVpfGlucHV0fGV2ZW50fn4iLG51bGwpO2cuZGV0YWNoKCl9KTtiLl9oYW5kbGVyLmRldGFjaCgpfSxfZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihjLGIsZyl7dmFyIGU7ZT1nLnRhcmdldDsoZFtnLnR5cGVdfHxlLmdldCgib3duZXJEb2N1bWVudCIpLmdldCgiYWN0aXZlRWxlbWVudCIpPT09ZSkmJnQuaXNNb2RpZnlpbmdLZXkoZy5rZXlDb2RlKSYmKGMuX3RpbWVyJiYoYy5fdGltZXIuY2FuY2VsKCksYy5fdGltZXI9bnVsbCksZT10LmlzS2V5KGcua2V5Q29kZSwiV0lOX0lNRSIpP251bGw6ZS5nZXQoInZhbHVlIiksCmMuX3RpbWVyPWEuc29vbihhLmJpbmQoIl9maXJlRXZlbnQiLHRoaXMsYyxiLGcsZSkpKX0sX2ZpcmVFdmVudDpmdW5jdGlvbihjLGIsZyxlKXt2YXIgaz1nLnRhcmdldDtjLl90aW1lcj1udWxsO2suZ2V0KCJ2YWx1ZSIpIT09ZSYmYi5maXJlKGcpfX0pfX0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbImF1aS1ldmVudC1iYXNlIiwiZXZlbnQtZGVsZWdhdGUiLCJldmVudC1zeW50aGV0aWMiLCJ0aW1lcnMiXX0pOwpZVUkuYWRkKCJhdWktZm9ybS12YWxpZGF0b3IiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5MYW5nLHQ9YS5PYmplY3QsZj1xLmlzQm9vbGVhbixkPXEuaXNEYXRlLGM9dC5pc0VtcHR5LGI9cS5pc0Z1bmN0aW9uLGc9cS5pc05vZGUsZT1xLmlzT2JqZWN0LGs9cS5pc1N0cmluZyxtPXEudHJpbSxwPWEubmFtZXNwYWNlKCJjb25maWcuRm9ybVZhbGlkYXRvciIpLHM9YS5ET00uX2dldFJlZ0V4cCxsPWEuZ2V0Q2xhc3NOYW1lLGg9bCgiZm9ybSIsImdyb3VwIiksdT1sKCJoYXMiLCJlcnJvciIpLHc9bCgiZXJyb3IiLCJmaWVsZCIpLHo9bCgiaGFzIiwic3VjY2VzcyIpLEE9bCgic3VjY2VzcyIsImZpZWxkIiksSD1sKCJoZWxwIiwiYmxvY2siKSxsPSdceDNjZGl2IGNsYXNzXHgzZCInK1tsKCJmb3JtLXZhbGlkYXRvciIsInN0YWNrIiksSF0uam9pbigiICIpKyciXHgzZVx4M2MvZGl2XHgzZSc7YS5taXgocCx7U1RSSU5HUzp7REVGQVVMVDoiUGxlYXNlIGZpeCB7ZmllbGR9LiIsYWNjZXB0RmlsZXM6IlBsZWFzZSBlbnRlciBhIHZhbHVlIHdpdGggYSB2YWxpZCBleHRlbnNpb24gKHswfSkgaW4ge2ZpZWxkfS4iLAphbHBoYToiUGxlYXNlIGVudGVyIG9ubHkgYWxwaGEgY2hhcmFjdGVycyBpbiB7ZmllbGR9LiIsYWxwaGFudW06IlBsZWFzZSBlbnRlciBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGluIHtmaWVsZH0uIixkYXRlOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlIGluIHtmaWVsZH0uIixkaWdpdHM6IlBsZWFzZSBlbnRlciBvbmx5IGRpZ2l0cyBpbiB7ZmllbGR9LiIsZW1haWw6IlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MgaW4ge2ZpZWxkfS4iLGVxdWFsVG86IlBsZWFzZSBlbnRlciB0aGUgc2FtZSB2YWx1ZSBhZ2FpbiBpbiB7ZmllbGR9LiIsaXJpOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBJUkkgaW4ge2ZpZWxkfS4iLG1heDoiUGxlYXNlIGVudGVyIGEgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHswfSBpbiB7ZmllbGR9LiIsbWF4TGVuZ3RoOiJQbGVhc2UgZW50ZXIgbm8gbW9yZSB0aGFuIHswfSBjaGFyYWN0ZXJzIGluIHtmaWVsZH0uIixtaW46IlBsZWFzZSBlbnRlciBhIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB7MH0gaW4ge2ZpZWxkfS4iLAptaW5MZW5ndGg6IlBsZWFzZSBlbnRlciBhdCBsZWFzdCB7MH0gY2hhcmFjdGVycyBpbiB7ZmllbGR9LiIsbnVtYmVyOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBudW1iZXIgaW4ge2ZpZWxkfS4iLHJhbmdlOiJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBiZXR3ZWVuIHswfSBhbmQgezF9IGluIHtmaWVsZH0uIixyYW5nZUxlbmd0aDoiUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiB7MH0gYW5kIHsxfSBjaGFyYWN0ZXJzIGxvbmcgaW4ge2ZpZWxkfS4iLHJlcXVpcmVkOiJ7ZmllbGR9IGlzIHJlcXVpcmVkLiIsdXJsOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBVUkwgaW4ge2ZpZWxkfS4ifSxSRUdFWDp7YWxwaGE6L15bYS16X10rJC9pLGFscGhhbnVtOi9eXHcrJC8sZGlnaXRzOi9eXGQrJC8sZW1haWw6UmVnRXhwKCJeKCgoW2Etel18XFxkfFshI1xcJCVceDI2J1xcKlxcK1xcLVxcL1x4M2RcXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKyhcXC4oW2Etel18XFxkfFshI1xcJCVceDI2J1xcKlxcK1xcLVxcL1x4M2RcXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKykqKXwoKFxceDIyKSgoKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KChbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3Zl18XFx4MjF8W1xceDIzLVxceDViXXxbXFx4NWQtXFx4N2VdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoXFxcXChbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpKSooKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KFxceDIyKSkpQCgoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLj8kIiwKImkiKSxpcmk6UmVnRXhwKCJeKFthLXpdKFthLXpdfFxcZHxcXCt8LXxcXC4pKik6KFxcL1xcLygoKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJFx4MjYnXFwoXFwpXFwqXFwrLDtceDNkXXw6KSpAKT8oKFxcWyh8KHZbXFxkYS1mXXsxLH1cXC4oKFthLXpdfFxcZHwtfFxcLnxffH4pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDopKykpXFxdKXwoKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKSl8KChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJFx4MjYnXFwoXFwpXFwqXFwrLDtceDNkXSkqKSg6XFxkKik/KShcXC8oKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCkqKSp8KFxcLygoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCkrKFxcLygoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCRceDI2J1xcKFxcKVxcKlxcKyw7XHgzZF18OnxAKSopKik/KXwoKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJFx4MjYnXFwoXFwpXFwqXFwrLDtceDNkXXw6fEApKyhcXC8oKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCkqKSopfCgoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCkpezB9KShcXD8oKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJFx4MjYnXFwoXFwpXFwqXFwrLDtceDNkXXw6fEApfFtcXHVFMDAwLVxcdUY4RkZdfFxcL3xcXD8pKik/KFxcIygoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCl8XFwvfFxcPykqKT8kIiwKImkiKSxudW1iZXI6L15bK1wtXT8oXGQrKFsuLF1cZCspPykrKFtlRV1bKy1dP1xkKyk/JC8sdXJsOlJlZ0V4cCgiXihodHRwcz98ZnRwKTpcXC9cXC8oKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCRceDI2J1xcKFxcKVxcKlxcKyw7XHgzZF18OikqQCk/KCgoXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pKXwoKChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuKSooKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4/KSg6XFxkKik/KShcXC8oKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJFx4MjYnXFwoXFwpXFwqXFwrLDtceDNkXXw6fEApKyhcXC8oKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCkqKSopPyk/KFxcPygoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkXHgyNidcXChcXClcXCpcXCssO1x4M2RdfDp8QCl8W1xcdUUwMDAtXFx1RjhGRl18XFwvfFxcPykqKT8oXFwjKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCRceDI2J1xcKFxcKVxcKlxcKyw7XHgzZF18OnxAKXxcXC98XFw/KSopPyQiLAoiaSIpfSxSVUxFUzp7YWNjZXB0RmlsZXM6ZnVuY3Rpb24oRixCLEkpe0I9bnVsbDtrKEkpJiYoST1JLnJlcGxhY2UoL1wuL2csIiIpLnNwbGl0KC8sXHMqfFxiXHMqLyksST1hLkFycmF5Lm1hcChJLGEuRXNjYXBlLnJlZ2V4KSxCPXMoIlsuXSgiK0kuam9pbigifCIpKyIpJCIsImkiKSk7cmV0dXJuIEImJkIudGVzdChGKX0sZGF0ZTpmdW5jdGlvbihGKXtGPW5ldyBEYXRlKEYpO3JldHVybiBkKEYpJiYiSW52YWxpZCBEYXRlIiE9PUYmJiFpc05hTihGKX0sZXF1YWxUbzpmdW5jdGlvbihGLEIsSSl7cmV0dXJuKEI9YS5vbmUoSSkpJiZtKEIudmFsKCkpPT09Rn0saGFzVmFsdWU6ZnVuY3Rpb24oRixCKXtpZihhLkZvcm1WYWxpZGF0b3IuaXNDaGVja2FibGUoQikpe3ZhciBJPUIuZ2V0KCJuYW1lIik7cmV0dXJuIDA8YS5hbGwodGhpcy5nZXRGaWVsZHNCeU5hbWUoSSkpLmZpbHRlcigiOmNoZWNrZWQiKS5zaXplKCl9cmV0dXJuISFGfSxtYXg6ZnVuY3Rpb24oRixCLEkpe3JldHVybiBxLnRvRmxvYXQoRik8PQpJfSxtYXhMZW5ndGg6ZnVuY3Rpb24oRixCLEkpe3JldHVybiBGLmxlbmd0aDw9SX0sbWluOmZ1bmN0aW9uKEYsQixJKXtyZXR1cm4gcS50b0Zsb2F0KEYpPj1JfSxtaW5MZW5ndGg6ZnVuY3Rpb24oRixCLEkpe3JldHVybiBGLmxlbmd0aD49SX0scmFuZ2U6ZnVuY3Rpb24oRixCLEkpe0Y9cS50b0Zsb2F0KEYpO3JldHVybiBGPj1JWzBdJiZGPD1JWzFdfSxyYW5nZUxlbmd0aDpmdW5jdGlvbihGLEIsSSl7Rj1GLmxlbmd0aDtyZXR1cm4gRj49SVswXSYmRjw9SVsxXX0scmVxdWlyZWQ6ZnVuY3Rpb24oRixCLEkpe3JldHVybiEwPT09ST9wLlJVTEVTLmhhc1ZhbHVlLmFwcGx5KHRoaXMsW0YsQl0pOiEwfX19KTtmPWEuQ29tcG9uZW50LmNyZWF0ZSh7TkFNRToiZm9ybS12YWxpZGF0b3IiLEFUVFJTOntib3VuZGluZ0JveDp7c2V0dGVyOmEub25lfSxjb250YWluZXJFcnJvckNsYXNzOnt2YWx1ZTp1LHZhbGlkYXRvcjprfSxjb250YWluZXJWYWxpZENsYXNzOnt2YWx1ZTp6LHZhbGlkYXRvcjprfSwKZXJyb3JDbGFzczp7dmFsdWU6dyx2YWxpZGF0b3I6a30sZXh0cmFjdFJ1bGVzOnt2YWx1ZTohMCx2YWxpZGF0b3I6Zn0sZmllbGRDb250YWluZXI6e3ZhbHVlOiIuIitofSxmaWVsZFN0cmluZ3M6e3ZhbHVlOnt9LHZhbGlkYXRvcjplfSxsYWJlbENzc0NsYXNzOnt2YWxpZGF0b3I6ayx2YWx1ZToiY29udHJvbC1sYWJlbCJ9LG1lc3NhZ2VDb250YWluZXI6e2dldHRlcjpmdW5jdGlvbihGKXtyZXR1cm4gYS5Ob2RlLmNyZWF0ZShGKS5jbG9uZSgpfSx2YWx1ZTonXHgzY2RpdiByb2xlXHgzZCJhbGVydCJceDNlXHgzYy9kaXZceDNlJ30sc3RyaW5nczp7dmFsdWVGbjpmdW5jdGlvbigpe3JldHVybiBwLlNUUklOR1N9fSxydWxlczp7Z2V0dGVyOmZ1bmN0aW9uKEYpe3RoaXMuX3J1bGVzQWxyZWFkeUV4dHJhY3RlZHx8dGhpcy5fZXh0cmFjdFJ1bGVzRnJvbU1hcmt1cChGKTtyZXR1cm4gRn0sdmFsaWRhdG9yOmUsdmFsdWU6e319LHNlbGVjdFRleHQ6e3ZhbHVlOiEwLHZhbGlkYXRvcjpmfSwKc2hvd01lc3NhZ2VzOnt2YWx1ZTohMCx2YWxpZGF0b3I6Zn0sc2hvd0FsbE1lc3NhZ2VzOnt2YWx1ZTohMSx2YWxpZGF0b3I6Zn0sc3RhY2tFcnJvckNvbnRhaW5lcjp7Z2V0dGVyOmZ1bmN0aW9uKEYpe3JldHVybiBhLk5vZGUuY3JlYXRlKEYpLmNsb25lKCl9LHZhbHVlOmx9LHZhbGlkYXRlT25CbHVyOnt2YWx1ZTohMCx2YWxpZGF0b3I6Zn0sdmFsaWRhdGVPbklucHV0Ont2YWx1ZTohMSx2YWxpZGF0b3I6Zn0sdmFsaWRDbGFzczp7dmFsdWU6QSx2YWxpZGF0b3I6a319LF9zZXRDdXN0b21SdWxlczpmdW5jdGlvbihGKXthLmVhY2goRixmdW5jdGlvbihCLEkpe2EuY29uZmlnLkZvcm1WYWxpZGF0b3IuUlVMRVNbSV09Qi5jb25kaXRpb247YS5jb25maWcuRm9ybVZhbGlkYXRvci5TVFJJTkdTW0ldPUIuZXJyb3JNZXNzYWdlfSl9LGFkZEN1c3RvbVJ1bGVzOmZ1bmN0aW9uKEYpe2UoRikmJnRoaXMuX3NldEN1c3RvbVJ1bGVzKEYpfSxpc0NoZWNrYWJsZTpmdW5jdGlvbihGKXtGPUYuZ2V0KCJ0eXBlIikudG9Mb3dlckNhc2UoKTsKcmV0dXJuImNoZWNrYm94Ij09PUZ8fCJyYWRpbyI9PT1GfSxFWFRFTkRTOmEuQmFzZSxwcm90b3R5cGU6e2luaXRpYWxpemVyOmZ1bmN0aW9uKCl7dGhpcy5lcnJvcnM9e307dGhpcy5faW5wdXRIYW5kbGVycz10aGlzLl9maWxlSW5wdXRIYW5kbGVycz10aGlzLl9maWxlQmx1ckhhbmRsZXJzPXRoaXMuX2JsdXJIYW5kbGVycz1udWxsO3RoaXMuX3J1bGVzQWxyZWFkeUV4dHJhY3RlZD0hMTt0aGlzLl9zdGFja0Vycm9yQ29udGFpbmVycz17fTt0aGlzLmJpbmRVSSgpO3RoaXMuX3VpU2V0VmFsaWRhdGVPbkJsdXIodGhpcy5nZXQoInZhbGlkYXRlT25CbHVyIikpO3RoaXMuX3VpU2V0VmFsaWRhdGVPbklucHV0KHRoaXMuZ2V0KCJ2YWxpZGF0ZU9uSW5wdXQiKSl9LGJpbmRVSTpmdW5jdGlvbigpe3ZhciBGPXRoaXMsQj1GLmdldCgiYm91bmRpbmdCb3giKSxJPUIuZGVsZWdhdGUoImZvY3VzIixmdW5jdGlvbigpe0YuX3NldEFSSUFSb2xlcygpO0kuZGV0YWNoKCl9LCJpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uIik7CkYucHVibGlzaCh7ZXJyb3JGaWVsZDp7ZGVmYXVsdEZuOkYuX2RlZkVycm9yRmllbGRGbn0sdmFsaWRGaWVsZDp7ZGVmYXVsdEZuOkYuX2RlZlZhbGlkRmllbGRGbn0sdmFsaWRhdGVGaWVsZDp7ZGVmYXVsdEZuOkYuX2RlZlZhbGlkYXRlRmllbGRGbn19KTtCLm9uKHtyZXNldDphLmJpbmQoRi5fb25Gb3JtUmVzZXQsRiksc3VibWl0OmEuYmluZChGLl9vbkZvcm1TdWJtaXQsRil9KTtGLmFmdGVyKHtleHRyYWN0UnVsZXNDaGFuZ2U6Ri5fYWZ0ZXJFeHRyYWN0UnVsZXNDaGFuZ2UsdmFsaWRhdGVPbkJsdXJDaGFuZ2U6Ri5fYWZ0ZXJWYWxpZGF0ZU9uQmx1ckNoYW5nZSx2YWxpZGF0ZU9uSW5wdXRDaGFuZ2U6Ri5fYWZ0ZXJWYWxpZGF0ZU9uSW5wdXRDaGFuZ2V9KX0sYWRkRmllbGRFcnJvcjpmdW5jdGlvbihGLEIpe3ZhciBJPXRoaXMuZXJyb3JzLE09Ri5nZXQoIm5hbWUiKTtJW01dfHwoSVtNXT1bXSk7SVtNXS5wdXNoKEIpfSxjbGVhckZpZWxkRXJyb3I6ZnVuY3Rpb24oRil7Rj1nKEYpPwpGLmdldCgibmFtZSIpOkY7ayhGKSYmZGVsZXRlIHRoaXMuZXJyb3JzW0ZdfSxlYWNoUnVsZTpmdW5jdGlvbihGKXt2YXIgQj10aGlzO2EuZWFjaChCLmdldCgicnVsZXMiKSxmdW5jdGlvbihJLE0pe2IoRikmJkYuYXBwbHkoQixbSSxNXSl9KX0sZmluZEZpZWxkQ29udGFpbmVyOmZ1bmN0aW9uKEYpe3ZhciBCPXRoaXMuZ2V0KCJmaWVsZENvbnRhaW5lciIpO2lmKEIpcmV0dXJuIEYuYW5jZXN0b3IoQil9LGZvY3VzSW52YWxpZEZpZWxkOmZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5nZXQoImJvdW5kaW5nQm94Iikub25lKCIuIit3KTtGJiYodGhpcy5nZXQoInNlbGVjdFRleHQiKSYmRi5zZWxlY3RUZXh0KCksRi5mb2N1cygpLEYuc2Nyb2xsSW50b1ZpZXcoKSl9LGdldEZpZWxkOmZ1bmN0aW9uKEYpe2soRikmJihGPXRoaXMuZ2V0RmllbGRzQnlOYW1lKEYpKSYmRi5sZW5ndGgmJiFGLm5hbWUmJihGPUZbMF0pO3JldHVybiBhLm9uZShGKX0sZ2V0RmllbGRzQnlOYW1lOmZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmdldCgiYm91bmRpbmdCb3giKS5nZXRET00oKS5lbGVtZW50c1tGXX0sCmdldEZpZWxkRXJyb3I6ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuZXJyb3JzW0YuZ2V0KCJuYW1lIildfSxnZXRGaWVsZFN0YWNrRXJyb3JDb250YWluZXI6ZnVuY3Rpb24oRil7Rj1nKEYpP0YuZ2V0KCJuYW1lIik6Rjt2YXIgQj10aGlzLl9zdGFja0Vycm9yQ29udGFpbmVycztCW0ZdfHwoQltGXT10aGlzLmdldCgic3RhY2tFcnJvckNvbnRhaW5lciIpKTtyZXR1cm4gQltGXX0sZ2V0RmllbGRFcnJvck1lc3NhZ2U6ZnVuY3Rpb24oRixCKXt2YXIgST1GLmdldCgibmFtZSIpLE09dGhpcy5nZXQoImZpZWxkU3RyaW5ncyIpW0ldfHx7fSxEPXRoaXMuZ2V0KCJydWxlcyIpW0ldLEo9dGhpcy5fZmluZEZpZWxkTGFiZWwoRiksST10aGlzLmdldCgic3RyaW5ncyIpLFA9e307SiYmKFAuZmllbGQ9Sik7QiBpbiBEJiYoRD1hLkFycmF5KERbQl0pLGEuZWFjaChELGZ1bmN0aW9uKFYsWSl7UFtZXT0iIitWfSkpO3JldHVybiBxLnN1YihNW0JdfHxJW0JdfHxJLkRFRkFVTFQsUCl9LGhhc0Vycm9yczpmdW5jdGlvbigpe3JldHVybiFjKHRoaXMuZXJyb3JzKX0sCmhpZ2hsaWdodDpmdW5jdGlvbihGLEIpe3ZhciBJPXRoaXMsTSxEO0YmJihNPUkuZmluZEZpZWxkQ29udGFpbmVyKEYpLEQ9Ri5nZXQoIm5hbWUiKSx0aGlzLnZhbGlkYXRhYmxlKEYpPyhEPWEuYWxsKEkuZ2V0RmllbGRzQnlOYW1lKEQpKSxELmVhY2goZnVuY3Rpb24oSil7SS5faGlnaGxpZ2h0SGVscGVyKEosSS5nZXQoImVycm9yQ2xhc3MiKSxJLmdldCgidmFsaWRDbGFzcyIpLEIpfSksTSYmSS5faGlnaGxpZ2h0SGVscGVyKE0sSS5nZXQoImNvbnRhaW5lckVycm9yQ2xhc3MiKSxJLmdldCgiY29udGFpbmVyVmFsaWRDbGFzcyIpLEIpKTpGLnZhbCgpfHxJLnJlc2V0RmllbGQoRCkpfSxub3JtYWxpemVSdWxlVmFsdWU6ZnVuY3Rpb24oRixCKXtyZXR1cm4gYihGKT9GLmFwcGx5KHRoaXMsW0JdKTpGfSx1bmhpZ2hsaWdodDpmdW5jdGlvbihGKXt0aGlzLmhpZ2hsaWdodChGLCEwKX0scHJpbnRTdGFja0Vycm9yOmZ1bmN0aW9uKEYsQixJKXt2YXIgTT10aGlzO00uZ2V0KCJzaG93QWxsTWVzc2FnZXMiKXx8CihJPS0xIT09YS5BcnJheS5pbmRleE9mKEksInJlcXVpcmVkIik/WyJyZXF1aXJlZCJdOkkuc2xpY2UoMCwxKSk7Qi5lbXB0eSgpO2EuQXJyYXkuZWFjaChJLGZ1bmN0aW9uKEQpe3ZhciBKPU0uZ2V0RmllbGRFcnJvck1lc3NhZ2UoRixEKTtEPU0uZ2V0KCJtZXNzYWdlQ29udGFpbmVyIikuYWRkQ2xhc3MoRCk7Qi5hcHBlbmQoRC5odG1sKEopKX0pfSxyZXNldEFsbEZpZWxkczpmdW5jdGlvbigpe3ZhciBGPXRoaXM7Ri5lYWNoUnVsZShmdW5jdGlvbihCLEkpe0YucmVzZXRGaWVsZChJKX0pfSxyZXNldEZpZWxkOmZ1bmN0aW9uKEYpe3ZhciBCPXRoaXM7Rj1nKEYpP0YuZ2V0KCJuYW1lIik6RjtCLmNsZWFyRmllbGRFcnJvcihGKTtCLmdldEZpZWxkU3RhY2tFcnJvckNvbnRhaW5lcihGKS5yZW1vdmUoKTthLmFsbChCLmdldEZpZWxkc0J5TmFtZShGKSkuZWFjaChmdW5jdGlvbihJKXtCLnJlc2V0RmllbGRDc3MoSSk7SS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpfSl9LApyZXNldEZpZWxkQ3NzOmZ1bmN0aW9uKEYpe3ZhciBCPXRoaXMsST1CLmZpbmRGaWVsZENvbnRhaW5lcihGKSxNPWZ1bmN0aW9uKEQsSil7RCYmYS5lYWNoKEosZnVuY3Rpb24oUCl7RC5yZW1vdmVDbGFzcyhCLmdldChQKSl9KX07TShGLFsidmFsaWRDbGFzcyIsImVycm9yQ2xhc3MiXSk7TShJLFsiY29udGFpbmVyVmFsaWRDbGFzcyIsImNvbnRhaW5lckVycm9yQ2xhc3MiXSl9LHZhbGlkYXRhYmxlOmZ1bmN0aW9uKEYpe3ZhciBCPSExLEk9dGhpcy5nZXQoInJ1bGVzIilbRi5nZXQoIm5hbWUiKV07SSYmKEI9dGhpcy5ub3JtYWxpemVSdWxlVmFsdWUoSS5yZXF1aXJlZCxGKXx8cC5SVUxFUy5oYXNWYWx1ZS5hcHBseSh0aGlzLFtGLnZhbCgpLEZdKSk7cmV0dXJuISFCfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBGPXRoaXM7Ri5lYWNoUnVsZShmdW5jdGlvbihCLEkpe0YudmFsaWRhdGVGaWVsZChJKX0pO0YuZm9jdXNJbnZhbGlkRmllbGQoKX0sdmFsaWRhdGVGaWVsZDpmdW5jdGlvbihGKXt2YXIgQjsKdGhpcy5yZXNldEZpZWxkKEYpO0Y9ayhGKT90aGlzLmdldEZpZWxkKEYpOkY7ZyhGKSYmKEI9dGhpcy52YWxpZGF0YWJsZShGKSkmJnRoaXMuZmlyZSgidmFsaWRhdGVGaWVsZCIse3ZhbGlkYXRvcjp7ZmllbGQ6Rn19KX0sX2FmdGVyRXh0cmFjdFJ1bGVzQ2hhbmdlOmZ1bmN0aW9uKEYpe3RoaXMuX3VpU2V0RXh0cmFjdFJ1bGVzKEYubmV3VmFsKX0sX2FmdGVyVmFsaWRhdGVPbkJsdXJDaGFuZ2U6ZnVuY3Rpb24oRil7dGhpcy5fdWlTZXRWYWxpZGF0ZU9uQmx1cihGLm5ld1ZhbCl9LF9hZnRlclZhbGlkYXRlT25JbnB1dENoYW5nZTpmdW5jdGlvbihGKXt0aGlzLl91aVNldFZhbGlkYXRlT25JbnB1dChGLm5ld1ZhbCl9LF9kZWZFcnJvckZpZWxkRm46ZnVuY3Rpb24oRil7dmFyIEIsSSxNO3RoaXMuZ2V0KCJsYWJlbENzc0NsYXNzIik7TT1GLnZhbGlkYXRvcjtGPU0uZmllbGQ7dGhpcy5oaWdobGlnaHQoRik7aWYodGhpcy5nZXQoInNob3dNZXNzYWdlcyIpKXtJPUY7Qj10aGlzLmdldEZpZWxkU3RhY2tFcnJvckNvbnRhaW5lcihGKTsKYS5Gb3JtVmFsaWRhdG9yLmlzQ2hlY2thYmxlKEkpJiYoST1GLmFuY2VzdG9yKCIuIit1KS5nZXQoImxhc3RDaGlsZCIpKTt2YXIgRD1GLmdldCgiaWQiKSsiSGVscGVyIjtCLnNldCgiaWQiLEQpO0Yuc2V0KCJhcmlhLWRlc2NyaWJlZGJ5IixEKTtJLnBsYWNlQWZ0ZXIoQik7dGhpcy5wcmludFN0YWNrRXJyb3IoRixCLE0uZXJyb3JzKX19LF9kZWZWYWxpZEZpZWxkRm46ZnVuY3Rpb24oRil7dGhpcy51bmhpZ2hsaWdodChGLnZhbGlkYXRvci5maWVsZCl9LF9kZWZWYWxpZGF0ZUZpZWxkRm46ZnVuY3Rpb24oRil7dmFyIEI9dGhpcyxJPUYudmFsaWRhdG9yLmZpZWxkO0Y9Qi5nZXQoInJ1bGVzIilbSS5nZXQoIm5hbWUiKV07YS5lYWNoKEYsZnVuY3Rpb24oTSxEKXt2YXIgSj1wLlJVTEVTW0RdLFA9bShJLnZhbCgpKTtNPUIubm9ybWFsaXplUnVsZVZhbHVlKE0sSSk7YihKKSYmIUouYXBwbHkoQixbUCxJLE1dKSYmQi5hZGRGaWVsZEVycm9yKEksRCl9KTsoRj1CLmdldEZpZWxkRXJyb3IoSSkpPwpCLmZpcmUoImVycm9yRmllbGQiLHt2YWxpZGF0b3I6e2ZpZWxkOkksZXJyb3JzOkZ9fSk6Qi5maXJlKCJ2YWxpZEZpZWxkIix7dmFsaWRhdG9yOntmaWVsZDpJfX0pfSxfZmluZEZpZWxkTGFiZWw6ZnVuY3Rpb24oRil7dmFyIEI9Ii4iK3RoaXMuZ2V0KCJsYWJlbENzc0NsYXNzIiksST1hLm9uZSgibGFiZWxbZm9yXHgzZCIrRi5nZXQoImlkIikrIl0iKXx8Ri5hbmNlc3RvcigpLnByZXZpb3VzKEIpO0l8fChJPUYuYW5jZXN0b3IoIi4iK3UpKSYmKEk9SS5vbmUoQikpO2lmKEkpcmV0dXJuIEkuZ2V0KCJ0ZXh0Iil9LF9oaWdobGlnaHRIZWxwZXI6ZnVuY3Rpb24oRixCLEksTSl7TT8oRi5yZW1vdmVDbGFzcyhCKS5hZGRDbGFzcyhJKSxJPT09QSYmRi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpKTooRi5yZW1vdmVDbGFzcyhJKS5hZGRDbGFzcyhCKSxCPT09dyYmRi5zZXQoImFyaWEtaW52YWxpZCIsITApKX0sX2V4dHJhY3RSdWxlc0Zyb21NYXJrdXA6ZnVuY3Rpb24oRil7dmFyIEI9CnRoaXMuZ2V0KCJib3VuZGluZ0JveCIpLmdldERPTSgpLmVsZW1lbnRzLEk9dC5rZXlzKHAuUlVMRVMpLmpvaW4oInwiKSxJPXMoImZpZWxkLSgiK0krIikiLCJnIiksTSxELEo9W10sUD1mdW5jdGlvbihpYSxaKXtKLnB1c2goWil9O009MDtmb3IoRD1CLmxlbmd0aDtNPEQ7TSsrKXt2YXIgVj1CW01dLFk9Vi5uYW1lO1YuY2xhc3NOYW1lLnJlcGxhY2UoSSxQKTtpZihKLmxlbmd0aCl7dmFyIFY9RltZXSxuYTtWfHwoVj17fSxGW1ldPVYpO1k9MDtmb3IobmE9Si5sZW5ndGg7WTxuYTtZKyspe3ZhciBmYT1KW1ldO2ZhIGluIFZ8fChWW2ZhXT0hMCl9Si5sZW5ndGg9MH19dGhpcy5fcnVsZXNBbHJlYWR5RXh0cmFjdGVkPSEwfSxfb25GaWVsZElucHV0OmZ1bmN0aW9uKEYpe3RoaXMudmFsaWRhdGVGaWVsZChGLnRhcmdldCl9LF9vbkZvcm1TdWJtaXQ6ZnVuY3Rpb24oRil7dmFyIEI9e3ZhbGlkYXRvcjp7Zm9ybUV2ZW50OkZ9fTt0aGlzLnZhbGlkYXRlKCk7dGhpcy5oYXNFcnJvcnMoKT8KKEIudmFsaWRhdG9yLmVycm9ycz10aGlzLmVycm9ycyx0aGlzLmZpcmUoInN1Ym1pdEVycm9yIixCKSxGLmhhbHQoKSk6dGhpcy5maXJlKCJzdWJtaXQiLEIpfSxfb25Gb3JtUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnJlc2V0QWxsRmllbGRzKCl9LF9zZXRBUklBUm9sZXM6ZnVuY3Rpb24oKXt2YXIgRj10aGlzO0YuZWFjaFJ1bGUoZnVuY3Rpb24oQixJKXt2YXIgTT1GLmdldEZpZWxkKEkpO0Yubm9ybWFsaXplUnVsZVZhbHVlKEIucmVxdWlyZWQsTSkmJk0mJiFNLmF0dHIoImFyaWEtcmVxdWlyZWQiKSYmTS5hdHRyKCJhcmlhLXJlcXVpcmVkIiwhMCl9KX0sX3VpU2V0RXh0cmFjdFJ1bGVzOmZ1bmN0aW9uKEYpe0YmJnRoaXMuX2V4dHJhY3RSdWxlc0Zyb21NYXJrdXAodGhpcy5nZXQoInJ1bGVzIikpfSxfdWlTZXRWYWxpZGF0ZU9uSW5wdXQ6ZnVuY3Rpb24oRil7dmFyIEI9dGhpcy5nZXQoImJvdW5kaW5nQm94Iik7Rj8odGhpcy5faW5wdXRIYW5kbGVyc3x8KHRoaXMuX2lucHV0SGFuZGxlcnM9CkIuZGVsZWdhdGUoImlucHV0Iix0aGlzLl9vbkZpZWxkSW5wdXQsJ2lucHV0Om5vdChbdHlwZVx4M2QiZmlsZSJdKSxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uJyx0aGlzKSksdGhpcy5fZmlsZUlucHV0SGFuZGxlcnN8fCh0aGlzLl9maWxlSW5wdXRIYW5kbGVycz1CLmRlbGVnYXRlKCJjaGFuZ2UiLHRoaXMuX29uRmllbGRJbnB1dCwnaW5wdXRbdHlwZVx4M2QiZmlsZSJdJyx0aGlzKSkpOih0aGlzLl9pbnB1dEhhbmRsZXJzJiZ0aGlzLl9pbnB1dEhhbmRsZXJzLmRldGFjaCgpLHRoaXMuX2ZpbGVJbnB1dEhhbmRsZXJzJiZ0aGlzLl9maWxlSW5wdXRIYW5kbGVycy5kZXRhY2goKSl9LF91aVNldFZhbGlkYXRlT25CbHVyOmZ1bmN0aW9uKEYpe3ZhciBCPXRoaXMuZ2V0KCJib3VuZGluZ0JveCIpO0Y/KHRoaXMuX2JsdXJIYW5kbGVyc3x8KHRoaXMuX2JsdXJIYW5kbGVycz1CLmRlbGVnYXRlKCJibHVyIix0aGlzLl9vbkZpZWxkSW5wdXQsJ2lucHV0Om5vdChbdHlwZVx4M2QiZmlsZSJdKSxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uJywKdGhpcykpLHRoaXMuX2ZpbGVCbHVySGFuZGxlcnN8fCh0aGlzLl9maWxlQmx1ckhhbmRsZXJzPUIuZGVsZWdhdGUoImNoYW5nZSIsdGhpcy5fb25GaWVsZElucHV0LCdpbnB1dFt0eXBlXHgzZCJmaWxlIl0nLHRoaXMpKSk6KHRoaXMuX2JsdXJIYW5kbGVycyYmdGhpcy5fYmx1ckhhbmRsZXJzLmRldGFjaCgpLHRoaXMuX2ZpbGVCbHVySGFuZGxlcnMmJnRoaXMuX2ZpbGVCbHVySGFuZGxlcnMuZGV0YWNoKCkpfX19KTthLmVhY2gocC5SRUdFWCxmdW5jdGlvbihGLEIpe3AuUlVMRVNbQl09ZnVuY3Rpb24oSSl7cmV0dXJuIHAuUkVHRVhbQl0udGVzdChJKX19KTthLkZvcm1WYWxpZGF0b3I9Zn0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczoiZXNjYXBlIHNlbGVjdG9yLWNzczMgbm9kZS1ldmVudC1kZWxlZ2F0ZSBhdWktbm9kZSBhdWktY29tcG9uZW50IGF1aS1ldmVudC1pbnB1dCIuc3BsaXQoIiAiKX0pOwpZVUkuYWRkKCJhdWktbm9kZS1iYXNlIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZyx0PXEuaXNBcnJheSxmPXEuaXNGdW5jdGlvbixkPXEuaXNPYmplY3QsYz1xLmlzU3RyaW5nLGI9cS5pc1VuZGVmaW5lZCxnPXEuaXNWYWx1ZSxlPWEuQXJyYXksaz1hLk5vZGUsbT1hLk5vZGVMaXN0LHA9YS5nZXRDbGFzc05hbWUscz1hLkRPTS5fZ2V0UmVnRXhwLGw9YS5jb25maWcsaD1sLmRvYyx1PWwud2luLHc9ay5wcm90b3R5cGUsej13Ll9oaWRlLEE9dy5fc2hvdyxIPW0ucHJvdG90eXBlLEY9WyIiLCIiXSxCPXAoImhpZGUiKSxJPSExLE09e2I6ImJvcmRlckJvdHRvbVdpZHRoIixsOiJib3JkZXJMZWZ0V2lkdGgiLHI6ImJvcmRlclJpZ2h0V2lkdGgiLHQ6ImJvcmRlclRvcFdpZHRoIn0sRD17YjoibWFyZ2luQm90dG9tIixsOiJtYXJnaW5MZWZ0IixyOiJtYXJnaW5SaWdodCIsdDoibWFyZ2luVG9wIn0sSj17YjoicGFkZGluZ0JvdHRvbSIsbDoicGFkZGluZ0xlZnQiLHI6InBhZGRpbmdSaWdodCIsCnQ6InBhZGRpbmdUb3AifSxQPWguY3JlYXRlRWxlbWVudCgiZGl2Iik7UC5zdHlsZS5kaXNwbGF5PSJub25lIjtQLmlubmVySFRNTD0iICAgXHgzY3RhYmxlXHgzZVx4M2MvdGFibGVceDNlXHgyNm5ic3A7IjtQLmF0dGFjaEV2ZW50JiZQLmZpcmVFdmVudCYmKFAuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uIFooKXtJPSEwO1AuZGV0YWNoRXZlbnQoIm9uY2xpY2siLFopfSksUC5jbG9uZU5vZGUoITApLmZpcmVFdmVudCgib25jbGljayIpKTt2YXIgcD0hUC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsVj0vXlxzKy8sWT0vXD0oW149XHgyN1x4MjI+XHNdK1wvKT4vZyxuYT0vPChbXHc6XSspLyxQPW51bGwsZmE9ZnVuY3Rpb24oWixlYSxvYSl7ZWE9ZWE/Im9uIjoiIjt2YXIgQWE7Wi5zZXRBdHRyaWJ1dGUoInVuc2VsZWN0YWJsZSIsZWEpO2lmKCFvYSlmb3IoWj1aLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksb2E9MDtBYT1aW29hXTtvYSsrKUFhLnNldEF0dHJpYnV0ZSgidW5zZWxlY3RhYmxlIiwKZWEpfTthLm1peCh3LHthbmNlc3RvcnNCeUNsYXNzTmFtZTpmdW5jdGlvbihaLGVhKXt2YXIgb2E9W10sQWE9UmVnRXhwKCJcXGIiK1orIlxcYiIpLHBhPXRoaXMuZ2V0RE9NKCk7ZWF8fChwYT1wYS5wYXJlbnROb2RlKTtmb3IoO3BhJiY5IT09cGEubm9kZVR5cGU7KTE9PT1wYS5ub2RlVHlwZSYmQWEudGVzdChwYS5jbGFzc05hbWUpJiZvYS5wdXNoKHBhKSxwYT1wYS5wYXJlbnROb2RlO3JldHVybiBhLmFsbChvYSl9LGF0dHI6ZnVuY3Rpb24oWixlYSl7dmFyIG9hO2lmKGIoZWEpKXtpZihkKFopKXtmb3Iob2EgaW4gWilaLmhhc093blByb3BlcnR5KG9hKSYmdGhpcy5hdHRyKG9hLFpbb2FdKTtyZXR1cm4gdGhpc31vYT10aGlzLmdldChaKTtxLmlzVmFsdWUob2EpfHwob2E9dGhpcy5nZXRBdHRyaWJ1dGUoWikpO3JldHVybiBvYX1vYT10aGlzLmdldERPTSgpO1ogaW4gb2E/dGhpcy5zZXQoWixlYSk6dGhpcy5zZXRBdHRyaWJ1dGUoWixlYSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIEk/CmZ1bmN0aW9uKCl7dmFyIFo9dGhpcy5nZXRET00oKTszIT09Wi5ub2RlVHlwZT8oWj10aGlzLm91dGVySFRNTCgpLFo9Wi5yZXBsYWNlKFksJ1x4M2QiJDEiXHgzZScpLnJlcGxhY2UoViwiIiksWj1rLmNyZWF0ZShaKSk6Wj1hLm9uZShaLmNsb25lTm9kZSgpKTtyZXR1cm4gWn06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZU5vZGUoITApfX0oKSxjZW50ZXI6ZnVuY3Rpb24oWil7dmFyIGVhPXRoaXMuZ2V0KCJyZWdpb24iKSxvYTt0KFopPyhvYT1aWzBdLFo9WlsxXSk6KFo9ZChaKSYmIWEuaW5zdGFuY2VPZihaLGspP1o6KGEub25lKFopfHxhLmdldEJvZHkoKSkuZ2V0KCJyZWdpb24iKSxvYT1aLmxlZnQrWi53aWR0aC8yLFo9Wi50b3ArWi5oZWlnaHQvMik7dGhpcy5zZXRYWShbb2EtZWEud2lkdGgvMixaLWVhLmhlaWdodC8yXSl9LGVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5hbGwoIlx4M2UqIikucmVtb3ZlKCkucHVyZ2UoKTtmb3IodmFyIFo9ay5nZXRET01Ob2RlKHRoaXMpO1ouZmlyc3RDaGlsZDspWi5yZW1vdmVDaGlsZChaLmZpcnN0Q2hpbGQpOwpyZXR1cm4gdGhpc30sZ2V0RE9NOmZ1bmN0aW9uKCl7cmV0dXJuIGsuZ2V0RE9NTm9kZSh0aGlzKX0sZ2V0Qm9yZGVyV2lkdGg6ZnVuY3Rpb24oWil7cmV0dXJuIHRoaXMuX2dldEJveFN0eWxlQXNOdW1iZXIoWixNKX0sZ2V0Q2VudGVyWFk6ZnVuY3Rpb24oKXt2YXIgWj10aGlzLmdldCgicmVnaW9uIik7cmV0dXJuW1oubGVmdCtaLndpZHRoLzIsWi50b3ArWi5oZWlnaHQvMl19LGdldE1hcmdpbjpmdW5jdGlvbihaKXtyZXR1cm4gdGhpcy5fZ2V0Qm94U3R5bGVBc051bWJlcihaLEQpfSxnZXRQYWRkaW5nOmZ1bmN0aW9uKFope3JldHVybiB0aGlzLl9nZXRCb3hTdHlsZUFzTnVtYmVyKFosSil9LGd1aWQ6ZnVuY3Rpb24oKXt2YXIgWj10aGlzLmdldCgiaWQiKTtafHwoWj1hLnN0YW1wKHRoaXMpLHRoaXMuc2V0KCJpZCIsWikpO3JldHVybiBafSxob3ZlcjpmdW5jdGlvbihaLGVhKXt2YXIgb2E7b2E9dGhpcy5fZGVmYXVsdEhvdmVyT3B0aW9uczt0aGlzLl9ob3Zlck9wdGlvbnM9b2E9CmQoWiwhMCk/YS5taXgoWixvYSk6YS5taXgoe292ZXI6WixvdXQ6ZWF9LG9hKTtvYS5vdmVyVGFzaz1hLmRlYm91bmNlKHRoaXMuX2hvdmVyT3ZlclRhc2tGbixudWxsLHRoaXMpO29hLm91dFRhc2s9YS5kZWJvdW5jZSh0aGlzLl9ob3Zlck91dFRhc2tGbixudWxsLHRoaXMpO3JldHVybiBuZXcgYS5FdmVudEhhbmRsZShbdGhpcy5vbihvYS5vdmVyRXZlbnRUeXBlLHRoaXMuX2hvdmVyT3ZlckhhbmRsZXIsdGhpcyksdGhpcy5vbihvYS5vdXRFdmVudFR5cGUsdGhpcy5faG92ZXJPdXRIYW5kbGVyLHRoaXMpXSl9LGh0bWw6ZnVuY3Rpb24oKXt2YXIgWj1hcmd1bWVudHM7aWYoWi5sZW5ndGgpdGhpcy5zZXQoImlubmVySFRNTCIsWlswXSk7ZWxzZSByZXR1cm4gdGhpcy5nZXQoImlubmVySFRNTCIpO3JldHVybiB0aGlzfSxvdXRlckhUTUw6ZnVuY3Rpb24oKXt2YXIgWj10aGlzLmdldERPTSgpO2lmKCJvdXRlckhUTUwiaW4gWilyZXR1cm4gWi5vdXRlckhUTUw7Wj1rLmNyZWF0ZSgiXHgzY2Rpdlx4M2VceDNjL2Rpdlx4M2UiKS5hcHBlbmQodGhpcy5jbG9uZSgpKTsKdHJ5e3JldHVybiBaLmh0bWwoKX1jYXRjaChlYSl7fWZpbmFsbHl7fX0scGxhY2VBZnRlcjpmdW5jdGlvbihaKXtyZXR1cm4gdGhpcy5fcGxhY2UoWix0aGlzLmdldCgibmV4dFNpYmxpbmciKSl9LHBsYWNlQmVmb3JlOmZ1bmN0aW9uKFope3JldHVybiB0aGlzLl9wbGFjZShaLHRoaXMpfSxwcmVwZW5kVG86ZnVuY3Rpb24oWil7YS5vbmUoWikucHJlcGVuZCh0aGlzKTtyZXR1cm4gdGhpc30scmFkaW9DbGFzczpmdW5jdGlvbihaKXt2YXIgZWE9dGhpcy5zaWJsaW5ncygpO2lmKGMoWikpZWEucmVtb3ZlQ2xhc3MoWiksdGhpcy5hZGRDbGFzcyhaKTtlbHNlIGlmKHQoWikpe3ZhciBlYT1lYS5nZXRET00oKSxvYT1zKCIoPzpefFxccyspKD86IitaLmpvaW4oInwiKSsiKSg/XHgzZFxccyt8JCkiLCJnIiksQWEscGE7Zm9yKHBhPWVhLmxlbmd0aC0xOzA8PXBhO3BhLS0pQWE9ZWFbcGFdLEFhLmNsYXNzTmFtZT1BYS5jbGFzc05hbWUucmVwbGFjZShvYSwiIik7dGhpcy5hZGRDbGFzcyhaLmpvaW4oIiAiKSl9cmV0dXJuIHRoaXN9LApyZXNldElkOmZ1bmN0aW9uKFope3RoaXMuYXR0cigiaWQiLGEuZ3VpZChaKSk7cmV0dXJuIHRoaXN9LHNlbGVjdFRleHQ6ZnVuY3Rpb24oWixlYSl7dmFyIG9hPXRoaXMuZ2V0RE9NKCksQWE9dGhpcy52YWwoKS5sZW5ndGg7ZWE9ZyhlYSk/ZWE6QWE7Wj1nKFopP1o6MDt0cnl7aWYob2Euc2V0U2VsZWN0aW9uUmFuZ2Upb2Euc2V0U2VsZWN0aW9uUmFuZ2UoWixlYSk7ZWxzZSBpZihvYS5jcmVhdGVUZXh0UmFuZ2Upe3ZhciBwYT1vYS5jcmVhdGVUZXh0UmFuZ2UoKTtwYS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsWik7cGEubW92ZUVuZCgiY2hhcmFjdGVyIixlYS1BYSk7cGEuc2VsZWN0KCl9ZWxzZSBvYS5zZWxlY3QoKTtvYSE9PWguYWN0aXZlRWxlbWVudCYmb2EuZm9jdXMoKX1jYXRjaChGYSl7fXJldHVybiB0aGlzfSxzZWxlY3RhYmxlOmZ1bmN0aW9uKFope3RoaXMuc2V0U3R5bGVzKHsiLXdlYmtpdC11c2VyLXNlbGVjdCI6InRleHQiLCIta2h0bWwtdXNlci1zZWxlY3QiOiJ0ZXh0IiwKIi1tb3otdXNlci1zZWxlY3QiOiJ0ZXh0IiwiLW1zLXVzZXItc2VsZWN0IjoidGV4dCIsIi1vLXVzZXItc2VsZWN0IjoidGV4dCIsInVzZXItc2VsZWN0IjoidGV4dCJ9KTsoYS5VQS5pZXx8YS5VQS5vcGVyYSkmJmZhKHRoaXMuX25vZGUsITEsWik7cmV0dXJuIHRoaXN9LHN3YWxsb3dFdmVudDpmdW5jdGlvbihaLGVhKXt2YXIgb2E9dGhpcyxBYT1mdW5jdGlvbihwYSl7cGEuc3RvcFByb3BhZ2F0aW9uKCk7ZWEmJihwYS5wcmV2ZW50RGVmYXVsdCgpLHBhLmhhbHQoKSk7cmV0dXJuITF9O2lmKHQoWikpcmV0dXJuIGUuZWFjaChaLGZ1bmN0aW9uKHBhKXtvYS5vbihwYSxBYSl9KSx0aGlzO29hLm9uKFosQWEpO3JldHVybiBvYX0sdGV4dDpmdW5jdGlvbihaKXt2YXIgZWE9dGhpcy5nZXRET00oKTtyZXR1cm4gYihaKT90aGlzLl9nZXRUZXh0KGVhLmNoaWxkTm9kZXMpOihaPWEuRE9NLl9nZXREb2MoZWEpLmNyZWF0ZVRleHROb2RlKFopLHRoaXMuZW1wdHkoKS5hcHBlbmQoWikpfSx0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzLl90b2dnbGVWaWV3LmFwcGx5KHRoaXMsCmFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9LHVuc2VsZWN0YWJsZTpmdW5jdGlvbihaKXt0aGlzLnNldFN0eWxlcyh7Ii13ZWJraXQtdXNlci1zZWxlY3QiOiJub25lIiwiLWtodG1sLXVzZXItc2VsZWN0Ijoibm9uZSIsIi1tb3otdXNlci1zZWxlY3QiOiJub25lIiwiLW1zLXVzZXItc2VsZWN0Ijoibm9uZSIsIi1vLXVzZXItc2VsZWN0Ijoibm9uZSIsInVzZXItc2VsZWN0Ijoibm9uZSJ9KTsoYS5VQS5pZXx8YS5VQS5vcGVyYSkmJmZhKHRoaXMuX25vZGUsITAsWik7cmV0dXJuIHRoaXN9LHZhbDpmdW5jdGlvbihaKXtyZXR1cm4gYihaKT90aGlzLmdldCgidmFsdWUiKTp0aGlzLnNldCgidmFsdWUiLFopfSxfZ2V0Qm94U3R5bGVBc051bWJlcjpmdW5jdGlvbihaLGVhKXt2YXIgb2E9Wi5tYXRjaCgvXHcvZyksQWE9MCxwYSxGYTtmb3IoRmE9b2EubGVuZ3RoLTE7MDw9RmE7RmEtLSlpZihwYT1vYVtGYV0pcGE9cGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGUoZWFbcGFdKSkscGE9Ck1hdGguYWJzKHBhKSxBYSs9cGF8fDA7cmV0dXJuIEFhfSxfZ2V0VGV4dDpmdW5jdGlvbihaKXt2YXIgZWE9Wi5sZW5ndGgsb2EsQWE9W10scGE7Zm9yKHBhPTA7cGE8ZWE7cGErKykob2E9WltwYV0pJiY4IT09b2Eubm9kZVR5cGUmJigxIT09b2Eubm9kZVR5cGUmJkFhLnB1c2gob2Eubm9kZVZhbHVlKSxvYS5jaGlsZE5vZGVzJiZBYS5wdXNoKHRoaXMuX2dldFRleHQob2EuY2hpbGROb2RlcykpKTtyZXR1cm4gQWEuam9pbigiIil9LF9oaWRlOmZ1bmN0aW9uKCl7dGhpcy5hZGRDbGFzcyhCKTtyZXR1cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9ob3Zlck91dEhhbmRsZXI6ZnVuY3Rpb24oWil7dmFyIGVhPXRoaXMuX2hvdmVyT3B0aW9ucztlYS5vdXRUYXNrLmRlbGF5KGVhLm91dERlbGF5LFopfSxfaG92ZXJPdmVySGFuZGxlcjpmdW5jdGlvbihaKXt2YXIgZWE9dGhpcy5faG92ZXJPcHRpb25zO2VhLm92ZXJUYXNrLmRlbGF5KGVhLm92ZXJEZWxheSxaKX0sX2hvdmVyT3V0VGFza0ZuOmZ1bmN0aW9uKFope3ZhciBlYT0KdGhpcy5faG92ZXJPcHRpb25zO2VhLm92ZXJUYXNrLmNhbmNlbCgpO2VhLm91dC5hcHBseShlYS5jb250ZXh0fHxaLmN1cnJlbnRUYXJnZXQsYXJndW1lbnRzKX0sX2hvdmVyT3ZlclRhc2tGbjpmdW5jdGlvbihaKXt2YXIgZWE9dGhpcy5faG92ZXJPcHRpb25zO2VhLm91dFRhc2suY2FuY2VsKCk7ZWEub3Zlci5hcHBseShlYS5jb250ZXh0fHxaLmN1cnJlbnRUYXJnZXQsYXJndW1lbnRzKX0sX3BsYWNlOmZ1bmN0aW9uKFosZWEpe3ZhciBvYT10aGlzLmdldCgicGFyZW50Tm9kZSIpO29hJiYoYyhaKSYmKFo9ay5jcmVhdGUoWikpLG9hLmluc2VydEJlZm9yZShaLGVhKSk7cmV0dXJuIHRoaXN9LF9zaG93OmZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVDbGFzcyhCKTtyZXR1cm4gQS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9kZWZhdWx0SG92ZXJPcHRpb25zOntvdmVyRXZlbnRUeXBlOiJtb3VzZWVudGVyIixvdXRFdmVudFR5cGU6Im1vdXNlbGVhdmUiLG92ZXJEZWxheTowLG91dERlbGF5OjAsCm92ZXI6cS5lbXB0eUZuLG91dDpxLmVtcHR5Rm59fSwhMCk7dy5fX2lzSGlkZGVuPXcuX2lzSGlkZGVuO3cuX2lzSGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIHcuX19pc0hpZGRlbi5jYWxsKHRoaXMpfHx0aGlzLmhhc0NsYXNzKHRoaXMuX2hpZGVDbGFzc3x8Qil9O2EuZWFjaChbIkhlaWdodCIsIldpZHRoIl0sZnVuY3Rpb24oWixlYSl7dmFyIG9hPWVhPyJsciI6InRiIixBYT1aLnRvTG93ZXJDYXNlKCk7d1tBYV09ZnVuY3Rpb24ocGEpe3ZhciBGYT10aGlzO2lmKGIocGEpKXtwYT10aGlzLl9ub2RlO3ZhciBFYTtpZihwYSlpZighcGEudGFnTmFtZSYmOT09PXBhLm5vZGVUeXBlfHxwYS5hbGVydClFYT10aGlzLmdldCgicmVnaW9uIilbQWFdO2Vsc2V7RWE9dGhpcy5nZXQoIm9mZnNldCIrWik7aWYoIUVhKXtwYT10aGlzLmdldFN0eWxlKCJkaXNwbGF5Iik7dmFyIEZhPXRoaXMuZ2V0U3R5bGUoInBvc2l0aW9uIiksV2E9dGhpcy5nZXRTdHlsZSgidmlzaWJpbGl0eSIpO3RoaXMuc2V0U3R5bGVzKHtkaXNwbGF5OiJibG9jayAhaW1wb3J0YW50IiwKcG9zaXRpb246ImFic29sdXRlICFpbXBvcnRhbnQiLHZpc2liaWxpdHk6ImhpZGRlbiAhaW1wb3J0YW50In0pO0VhPXRoaXMuZ2V0KCJvZmZzZXQiK1opO3RoaXMuc2V0U3R5bGVzKHtkaXNwbGF5OnBhLHBvc2l0aW9uOkZhLHZpc2liaWxpdHk6V2F9KX1FYSYmKEVhLT10aGlzLmdldFBhZGRpbmcob2EpK3RoaXMuZ2V0Qm9yZGVyV2lkdGgob2EpKX1GYT1FYX1lbHNlIHRoaXMuc2V0U3R5bGUoQWEscGEpO3JldHVybiBGYX07d1siaW5uZXIiK1pdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbQWFdKCkrdGhpcy5nZXRQYWRkaW5nKG9hKX07d1sib3V0ZXIiK1pdPWZ1bmN0aW9uKHBhKXt2YXIgRmE9dGhpc1siaW5uZXIiK1pdKCksRWE9dGhpcy5nZXRCb3JkZXJXaWR0aChvYSksRmE9RmErRWE7cGEmJihGYSs9dGhpcy5nZXRNYXJnaW4ob2EpKTtyZXR1cm4gRmF9fSk7cHx8KGEuRE9NLl9BRERfSFRNTD1hLkRPTS5hZGRIVE1MLGEuRE9NLmFkZEhUTUw9ZnVuY3Rpb24oWixlYSxvYSl7dmFyIEFhPQpaLm5vZGVOYW1lJiZaLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl8fCIiLHBhPSIiO2IoZWEpfHwoYyhlYSk/cGE9KG5hLmV4ZWMoZWEpfHxGKVsxXTplYS5ub2RlVHlwZSYmMTE9PT1lYS5ub2RlVHlwZSYmZWEuY2hpbGROb2Rlcy5sZW5ndGg/cGE9ZWEuY2hpbGROb2Rlc1swXS5ub2RlTmFtZTplYS5ub2RlTmFtZSYmKHBhPWVhLm5vZGVOYW1lKSxwYT1wYSYmcGEudG9Mb3dlckNhc2UoKSk7InRhYmxlIj09PUFhJiYidHIiPT09cGEmJihaPVouZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fFouYXBwZW5kQ2hpbGQoWi5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpLCJ0Ym9keSI9PT0ob2EmJm9hLm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKSYmMDxvYS5jaGlsZE5vZGVzLmxlbmd0aCYmKG9hPW9hLmZpcnN0Q2hpbGQpKTtyZXR1cm4gYS5ET00uX0FERF9IVE1MKFosZWEsb2EpfSk7bS5pbXBvcnRNZXRob2QodywiYWZ0ZXIgYXBwZW5kVG8gYXR0ciBiZWZvcmUgZW1wdHkgZ2V0WCBnZXRYWSBnZXRZIGhvdmVyIGh0bWwgaW5uZXJIZWlnaHQgaW5uZXJXaWR0aCBvdXRlckhlaWdodCBvdXRlckhUTUwgb3V0ZXJXaWR0aCBwcmVwZW5kIHByZXBlbmRUbyBwdXJnZSBzZWxlY3RUZXh0IHNlbGVjdGFibGUgc2V0WCBzZXRYWSBzZXRZIHRleHQgdG9nZ2xlIHVuc2VsZWN0YWJsZSB2YWwiLnNwbGl0KCIgIikpOwphLm1peChILHthbGw6ZnVuY3Rpb24oWil7dmFyIGVhPVtdLG9hPXRoaXMuX25vZGVzLEFhPW9hLmxlbmd0aCxwYSxGYTtmb3IoRmE9MDtGYTxBYTtGYSsrKShwYT1hLlNlbGVjdG9yLnF1ZXJ5KFosb2FbRmFdKSkmJnBhLmxlbmd0aCYmZWEucHVzaC5hcHBseShlYSxwYSk7ZWE9ZS51bmlxdWUoZWEpO3JldHVybiBhLmFsbChlYSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlbSgwKX0sZ2V0RE9NOmZ1bmN0aW9uKCl7cmV0dXJuIG0uZ2V0RE9NTm9kZXModGhpcyl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVtKHRoaXMuX25vZGVzLmxlbmd0aC0xKX0sb25lOmZ1bmN0aW9uKFope3ZhciBlYT1udWxsLG9hPXRoaXMuX25vZGVzLEFhPW9hLmxlbmd0aCxwYTtmb3IocGE9MDtwYTxBYTtwYSsrKWlmKGVhPWEuU2VsZWN0b3IucXVlcnkoWixvYVtwYV0sITApKXtlYT1hLm9uZShlYSk7YnJlYWt9cmV0dXJuIGVhfX0pO0guX19maWx0ZXI9SC5maWx0ZXI7SC5maWx0ZXI9CmZ1bmN0aW9uKFosZWEpe3ZhciBvYTtpZihmKFopKXt2YXIgQWE9W107dGhpcy5lYWNoKGZ1bmN0aW9uKHBhLEZhLEVhKXtaLmNhbGwoZWF8fHBhLHBhLEZhLEVhKSYmQWEucHVzaChwYS5fbm9kZSl9KTtvYT1hLmFsbChBYSl9ZWxzZSBvYT1ILl9fZmlsdGVyLmNhbGwodGhpcyxaKTtyZXR1cm4gb2F9O2EubWl4KG0se2NyZWF0ZTpmdW5jdGlvbihaKXtyZXR1cm4gYS5nZXREb2MoKS5pbnZva2UoImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiKS5hcHBlbmQoWikuZ2V0KCJjaGlsZE5vZGVzIil9fSk7YS5taXgoYSx7Z2V0Qm9keTpmdW5jdGlvbigpe3RoaXMuX2JvZHlOb2RlfHwodGhpcy5fYm9keU5vZGU9YS5vbmUoaC5ib2R5KSk7cmV0dXJuIHRoaXMuX2JvZHlOb2RlfSxnZXREb2M6ZnVuY3Rpb24oKXt0aGlzLl9kb2N1bWVudE5vZGV8fCh0aGlzLl9kb2N1bWVudE5vZGU9YS5vbmUoaCkpO3JldHVybiB0aGlzLl9kb2N1bWVudE5vZGV9LGdldFdpbjpmdW5jdGlvbigpe3RoaXMuX3dpbmRvd05vZGV8fAoodGhpcy5fd2luZG93Tm9kZT1hLm9uZSh1KSk7cmV0dXJuIHRoaXMuX3dpbmRvd05vZGV9fSl9LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6WyJhcnJheS1leHRyYXMiLCJhdWktYmFzZS1sYW5nIiwiYXVpLWNsYXNzbmFtZW1hbmFnZXIiLCJhdWktZGVib3VuY2UiLCJub2RlIl19KTsKWVVJLmFkZCgiYXVpLW5vZGUtaHRtbDUiLGZ1bmN0aW9uKGEsRSl7aWYoYS5VQS5pZSl7dmFyIHE9YS5uYW1lc3BhY2UoIkhUTUw1IiksdD1hLkRPTS5fY3JlYXRlO3EuX2ZyYWdIVE1MNVNoaXZlZHx8KHEuX2ZyYWdIVE1MNVNoaXZlZD1hLmh0bWw1c2hpdihhLmNvbmZpZy5kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKSk7YS5taXgocSx7SUVDcmVhdGVGaXg6ZnVuY3Rpb24oQixJKXt2YXIgTT1xLl9mcmFnSFRNTDVTaGl2ZWQ7TS5hcHBlbmRDaGlsZChCKTtCLmlubmVySFRNTD1JO00ucmVtb3ZlQ2hpbGQoQik7cmV0dXJuIEJ9LF9kb0JlZm9yZUNyZWF0ZTpmdW5jdGlvbihCKXt2YXIgST10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxJPXEuSUVDcmVhdGVGaXgoSSxCKTtyZXR1cm4gbmV3IGEuRG8uSGFsdChudWxsLEkpfX0pO2EuRG8uYmVmb3JlKHEuX2RvQmVmb3JlQ3JlYXRlLGEuRE9NLCJfY3JlYXRlIixhLkRPTSl9dmFyIGY9YS5jb25maWcsZD1mLmRvYyxjPWYud2luLGI9CmEuVUE7aWYoKGY9Yi5pZSkmJiEoOTw9Znx8ITE9PT1jLkFVSV9IVE1MNV9JRSkpe3ZhciBnPVtdLGY9Yy5sb2NhdGlvbixmPWYucHJvdG9jb2wrIi8vIitmLmhvc3QsZT1kLmRvY3VtZW50RWxlbWVudCxrPWEuSFRNTDVfRUxFTUVOVFMsbT1rLmxlbmd0aCxwPWsuam9pbigifCIpLHM9UmVnRXhwKCJceDNjKC8/KTooIitwKyIpIiwiZ2kiKSxsPVJlZ0V4cCgiKCIrcCsiKSIsImdpIiksaD1SZWdFeHAoIlxcYigiK3ArIilcXGIiLCJpIiksdT0vcHJpbnR8YWxsLyx3PVJlZ0V4cCgiKF58W15cXG57fV0qP1xccykoIitwKyIpLio/eyhbXn1dKil9IiwiZ2ltIiksej1SZWdFeHAoIlx4M2MoLyopKCIrcCsiKSIsImdpIiksQT0idXJsKCIrZixIPWEuaHRtbDVzaGl2O0goZCk7dmFyIEY9ZnVuY3Rpb24oKXt2YXIgQixJPWZ1bmN0aW9uKCl7aWYoITE9PT1jLkFVSV9IVE1MNV9JRSlCKCk7ZWxzZSBGLm9uQWZ0ZXJQcmludCgpfSxNPWZ1bmN0aW9uKCl7aWYoITE9PT1jLkFVSV9IVE1MNV9JRSlCKCk7CmVsc2UgRi5vbkJlZm9yZVByaW50KCl9O0I9ZnVuY3Rpb24oKXtjLmRldGFjaEV2ZW50KCJvbmFmdGVycHJpbnQiLEkpO2MuZGV0YWNoRXZlbnQoIm9uYmVmb3JlcHJpbnQiLE0pfTt2YXIgRD1mdW5jdGlvbigpe2MuYXR0YWNoRXZlbnQoIm9uYWZ0ZXJwcmludCIsSSk7Yy5hdHRhY2hFdmVudCgib25iZWZvcmVwcmludCIsTSl9O0QoKTtGLmRlc3Ryb3k9QjtGLmluaXQ9RH07YS5taXgoRix7b25BZnRlclByaW50OmZ1bmN0aW9uKCl7dGhpcy5yZXN0b3JlSFRNTCgpO3RoaXMuX2dldFN0eWxlU2hlZXQoKS5zdHlsZVNoZWV0LmNzc1RleHQ9IiJ9LG9uQmVmb3JlUHJpbnQ6ZnVuY3Rpb24oKXt2YXIgQj10aGlzLl9nZXRTdHlsZVNoZWV0KCksST10aGlzLl9nZXRBbGxDU1NUZXh0KCk7Qi5zdHlsZVNoZWV0LmNzc1RleHQ9dGhpcy5wYXJzZUNTUyhJKTt0aGlzLndyaXRlSFRNTCgpfSxwYXJzZUNTUzpmdW5jdGlvbihCKXt2YXIgST0iIjsoQj1CLm1hdGNoKHcpKSYmKEk9Qi5qb2luKCJcbiIpLnJlcGxhY2UobCwKIi5wcmludGZpeC0kMSIpKTtyZXR1cm4gSX0scmVzdG9yZUhUTUw6ZnVuY3Rpb24oKXt2YXIgQj10aGlzLl9nZXRCb2R5Q2xvbmUoKSxJPXRoaXMuX2dldEJvZHlFbCgpLE09Qi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSUZSQU1FIiksRD1JLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJRlJBTUUiKSxKPUQubGVuZ3RoO2lmKEo9PT1NLmxlbmd0aClmb3IoO0otLTspRFtKXS5zd2FwTm9kZShNW0pdKTtCLmlubmVySFRNTD0iIjtlLnJlbW92ZUNoaWxkKEIpO2UuYXBwZW5kQ2hpbGQoSSl9LHdyaXRlSFRNTDpmdW5jdGlvbigpe2Zvcih2YXIgQj0tMSxJLE09dGhpcy5fZ2V0Qm9keUVsKCksRCxKLFAsVixZLG5hPVtdOysrQjxtOylmb3IoRD1rW0JdLFA9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShEKSxWPVAubGVuZ3RoLEk9LTE7KytJPFY7KVk9UFtJXSxKPVkuY2xhc3NOYW1lLC0xPT09Si5pbmRleE9mKCJwcmludGZpeC0iKSYmKG5hWzBdPSJwcmludGZpeC0iK0QsbmFbMV09SixZLmNsYXNzTmFtZT0KbmEuam9pbigiICIpKTtEPXRoaXMuX2dldERvY0ZyYWcoKTtJPXRoaXMuX2dldEJvZHlDbG9uZSgpO0QuYXBwZW5kQ2hpbGQoTSk7ZS5hcHBlbmRDaGlsZChJKTtJLmNsYXNzTmFtZT1NLmNsYXNzTmFtZTtJLmlkPU0uaWQ7RD1NLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Sj1ELmxlbmd0aDtpZihiLnNlY3VyZSl7UD1NLnN0eWxlO1AuZGlzcGxheT0ibm9uZSI7Zm9yKEI9MDtCPEo7QisrKVY9RFtCXS5zdHlsZSwoWT1WLmJhY2tncm91bmRJbWFnZSkmJi0xPFkuaW5kZXhPZigidXJsKCIpJiYtMT09PVkuaW5kZXhPZigiaHR0cHMiKSYmKFYuYmFja2dyb3VuZEltYWdlPVkucmVwbGFjZSgidXJsKCIsQSkpO1AuZGlzcGxheT0iIn1CPU0uY2xvbmVOb2RlKCEwKTtQPUIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtpZihKPT09UC5sZW5ndGgpZm9yKDtKLS07KXt2YXIgbmE9UFtKXSxmYT1uYS5ub2RlTmFtZTtpZigiSU5QVVQiPT09ZmF8fCJPUFRJT04iPT09ZmF8fCJJRlJBTUUiPT09CmZhKWlmKFY9RFtKXSxWLm5vZGVOYW1lPT09ZmEpWT1udWxsLCJPUFRJT04iPT09ZmE/WT0ic2VsZWN0ZWQiOiJJTlBVVCIhPT1mYXx8ImNoZWNrYm94IiE9PW5hLnR5cGUmJiJyYWRpbyIhPT1uYS50eXBlPyJJRlJBTUUiPT09ZmEmJihuYS5zcmM9IiIpOlk9ImNoZWNrZWQiLG51bGwhPT1ZJiYoKFY9VltZXSk/bmEuc2V0QXR0cmlidXRlKFksVik6bmEucmVtb3ZlQXR0cmlidXRlKFkpKX1EPUIuaW5uZXJIVE1MO0Q9RC5yZXBsYWNlKHMsIlx4M2MkMSQyIikucmVwbGFjZSh6LCJceDNjJDFmb250Iik7SS5pbm5lckhUTUw9RDtQPUkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklGUkFNRSIpO0Q9TS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSUZSQU1FIik7Sj1ELmxlbmd0aDtpZihKPT09UC5sZW5ndGgpZm9yKDtKLS07KURbSl0uc3dhcE5vZGUoUFtKXSl9LF9nZXRBbGxDU1NUZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBCPVtdLEk9dGhpcy5fZ2V0QWxsU3R5bGVTaGVldHMoZC5zdHlsZVNoZWV0cywKImFsbCIpLE0sRCxKPTA7RD1JW0pdO0orKylpZigoRD1ELnJ1bGVzKSYmRC5sZW5ndGgpZm9yKHZhciBQPTAsVj1ELmxlbmd0aDtQPFY7UCsrKU09RFtQXSxNLmhyZWZ8fChNPXRoaXMuX2dldENTU1RleHRGcm9tUnVsZShNKSxCLnB1c2goTSkpO3JldHVybiBCLmpvaW4oIiAiKX0sX2dldENTU1RleHRGcm9tUnVsZTpmdW5jdGlvbihCKXt2YXIgST0iIixNPUIuc3R5bGUsRCxKO00mJihEPU0uY3NzVGV4dCkmJihKPUIuc2VsZWN0b3JUZXh0KSYmaC50ZXN0KEopJiYoZy5sZW5ndGg9MCxnLnB1c2goSiwieyIsRCwifSIpLEk9Zy5qb2luKCIgIikpO3JldHVybiBJfSxfZ2V0QWxsU3R5bGVTaGVldHM6ZnVuY3Rpb24oQixJLE0sRCl7TT1NfHwxO0Q9RHx8W107dmFyIEo7aWYoQiYmdm9pZCAwIT09QisiIil7dmFyIFA9Qi5pbXBvcnRzO0k9Qi5tZWRpYVR5cGV8fEk7aWYodS50ZXN0KEkpKXt2YXIgVjtpZigzPj1NJiZQJiZ2b2lkIDAhPT1QKyIiJiZQLmxlbmd0aClmb3IoSj0wLFY9UC5sZW5ndGg7SjwKVjtKKyspdGhpcy5fZ2V0QWxsU3R5bGVTaGVldHMoUFtKXSxJLE0rMSxEKTtlbHNlIGlmKEIubGVuZ3RoKWZvcihKPTAsVj1CLmxlbmd0aDtKPFY7SisrKXRoaXMuX2dldEFsbFN0eWxlU2hlZXRzKEJbSl0sSSxNLEQpO2Vsc2V7dmFyIFA9Qi5ydWxlcyxZO2lmKFAmJlAubGVuZ3RoKWZvcihKPTAsVj1QLmxlbmd0aDtKPFY7SisrKShZPVBbSl0uc3R5bGVTaGVldCkmJnRoaXMuX2dldEFsbFN0eWxlU2hlZXRzKFksSSxNLEQpfSFCLmRpc2FibGVkJiZCLnJ1bGVzJiZELnB1c2goQil9fXJldHVybiBEfSxfZ2V0Qm9keUVsOmZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5fYm9keUVsO0J8fCh0aGlzLl9ib2R5RWw9Qj1kLmJvZHkpO3JldHVybiBCfSxfZ2V0Qm9keUNsb25lOmZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5fYm9keUNsb25lO0J8fCh0aGlzLl9ib2R5Q2xvbmU9Qj1kLmNyZWF0ZUVsZW1lbnQoImJvZHkiKSk7cmV0dXJuIEJ9LF9nZXREb2NGcmFnOmZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5fZG9jRnJhZzsKQnx8KEI9ZC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksSChCKSx0aGlzLl9kb2NGcmFnPUIpO3JldHVybiBCfSxfZ2V0U3R5bGVTaGVldDpmdW5jdGlvbigpe3ZhciBCPXRoaXMuX3N0eWxlU2hlZXQ7aWYoIUIpe3ZhciBCPWQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxJPWQuZG9jdW1lbnRFbGVtZW50LmZpcnN0Q2hpbGQ7SS5pbnNlcnRCZWZvcmUoQixJLmZpcnN0Q2hpbGQpO0IubWVkaWE9InByaW50IjtCLmNsYXNzTmFtZT0icHJpbnRmaXgiO3RoaXMuX3N0eWxlU2hlZXQ9Qn1yZXR1cm4gQn19KTthLm5hbWVzcGFjZSgiSFRNTDUiKS5wcmludEZpeD1GO0YoKX19LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6WyJjb2xsZWN0aW9uIiwiYXVpLW5vZGUtYmFzZSJdfSk7CllVSS5hZGQoImF1aS1zZWxlY3RvciIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLlNlbGVjdG9yLHQ9YS5nZXRDbGFzc05hbWUoInNyLW9ubHkiKSxmPWEuZ2V0Q2xhc3NOYW1lKCJoaWRlIiksZD1SZWdFeHAoL3JlY3RcKCgwKHB4KT8oLCk/KFxzKT8pezR9XCkvaSksYz1SZWdFeHAoZiksYj1SZWdFeHAodCk7cS5faXNOb2RlSGlkZGVuPWZ1bmN0aW9uKGcpe3ZhciBlPWcub2Zmc2V0V2lkdGgsaz1nLm9mZnNldEhlaWdodCxtPSJ0ciI9PT1nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkscD1nLmNsYXNzTmFtZTtnPWcuc3R5bGU7dmFyIHM9ITE7bXx8KDA9PT1lJiYwPT09az9zPSEwOjA8ZSYmMDxrJiYocz0hMSkpO3JldHVybiBzPXN8fCJub25lIj09PWcuZGlzcGxheXx8ImhpZGRlbiI9PT1nLnZpc2liaWxpdHl8fCJhYnNvbHV0ZSI9PT1nLnBvc2l0aW9uJiZkLnRlc3QoZy5jbGlwKXx8Yy50ZXN0KHApfHxiLnRlc3QocCl9O3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0KZ319O2EubWl4KHEucHNldWRvcyx7YnV0dG9uOmZ1bmN0aW9uKGcpe3JldHVybiJidXR0b24iPT09Zy50eXBlfHwiYnV0dG9uIj09PWcubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0sY2hlY2tib3g6dCgiY2hlY2tib3giKSxjaGVja2VkOmZ1bmN0aW9uKGcpe3JldHVybiEwPT09Zy5jaGVja2VkfSxkaXNhYmxlZDpmdW5jdGlvbihnKXtyZXR1cm4hMD09PWcuZGlzYWJsZWR9LGVtcHR5OmZ1bmN0aW9uKGcpe3JldHVybiFnLmZpcnN0Q2hpbGR9LGVuYWJsZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuITE9PT1nLmRpc2FibGVkJiYiaGlkZGVuIiE9PWcudHlwZX0sZmlsZTp0KCJmaWxlIiksaGVhZGVyOmZ1bmN0aW9uKGcpe3JldHVybi9oXGQvaS50ZXN0KGcubm9kZU5hbWUpfSxoaWRkZW46ZnVuY3Rpb24oZyl7cmV0dXJuIHEuX2lzTm9kZUhpZGRlbihnKX0saW1hZ2U6dCgiaW1hZ2UiKSxpbnB1dDpmdW5jdGlvbihnKXtyZXR1cm4vaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pLnRlc3QoZy5ub2RlTmFtZSl9LApwYXJlbnQ6ZnVuY3Rpb24oZyl7cmV0dXJuISFnLmZpcnN0Q2hpbGR9LHBhc3N3b3JkOnQoInBhc3N3b3JkIikscmFkaW86dCgicmFkaW8iKSxyZXNldDp0KCJyZXNldCIpLHNlbGVjdGVkOmZ1bmN0aW9uKGcpe3JldHVybiEwPT09Zy5zZWxlY3RlZH0sc3VibWl0OnQoInN1Ym1pdCIpLHRleHQ6dCgidGV4dCIpLHZpc2libGU6ZnVuY3Rpb24oZyl7cmV0dXJuIXEuX2lzTm9kZUhpZGRlbihnKX19KX0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbInNlbGVjdG9yLWNzczMiLCJhdWktY2xhc3NuYW1lbWFuYWdlciJdfSk7CllVSS5hZGQoImF1aS10aW1lciIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLkxhbmcubm93LHQ9YS5PYmplY3QuaXNFbXB0eSxmPWEuQXJyYXksZD17Y2xlYXJJbnRlcnZhbDpmdW5jdGlvbihjKXtkLnVucmVnaXN0ZXIoITAsYyl9LGNsZWFyVGltZW91dDpmdW5jdGlvbihjKXtkLnVucmVnaXN0ZXIoITEsYyl9LGludGVydmFsVGltZTpmdW5jdGlvbihjKXt2YXIgYj1kO2FyZ3VtZW50cy5sZW5ndGgmJihiLl9JTlRFUlZBTD1jKTtyZXR1cm4gYi5fSU5URVJWQUx9LGlzUmVwZWF0YWJsZTpmdW5jdGlvbihjKXtyZXR1cm4gYy5yZXBlYXRzfSxzZXRUaW1lb3V0OmZ1bmN0aW9uKGMsYixnKXt2YXIgZT1kLGs9Zihhcmd1bWVudHMsMywhMCk7cmV0dXJuIGUucmVnaXN0ZXIoITEsYyxiLGcsayl9LHNldEludGVydmFsOmZ1bmN0aW9uKGMsYixnKXt2YXIgZT1kLGs9Zihhcmd1bWVudHMsMywhMCk7cmV0dXJuIGUucmVnaXN0ZXIoITAsYyxiLGcsayl9LHJlZ2lzdGVyOmZ1bmN0aW9uKGMsYixnLAplLGspe3ZhciBtPWQscD0rK2EuRW52Ll91aWR4O2s9a3x8W107ay51bnNoaWZ0KGIsZSk7bS5fVEFTS1NbcF09bS5fY3JlYXRlKGMsbS5fZ2V0TmVhcmVzdEludGVydmFsKGcpLGEucmJpbmQuYXBwbHkoYSxrKSk7bS5fbGF6eUluaXQoKTtyZXR1cm4gcH0scnVuOmZ1bmN0aW9uKGMpe2MubGFzdFJ1blRpbWU9cSgpO3JldHVybiBjLmZuKCl9LHVucmVnaXN0ZXI6ZnVuY3Rpb24oYyxiKXt2YXIgZz1kLGU9Zy5fVEFTS1Msaz1lW2JdO2cuX2xhenlEZXN0cm95KCk7cmV0dXJuIGsmJmsucmVwZWF0cz09PWMmJmRlbGV0ZSBlW2JdfSxfY3JlYXRlOmZ1bmN0aW9uKGMsYixnKXtyZXR1cm57Zm46ZyxsYXN0UnVuVGltZTpxKCksbmV4dDpiLHJlcGVhdHM6Yyx0aW1lb3V0OmJ9fSxfZGVjcmVtZW50TmV4dFJ1blRpbWU6ZnVuY3Rpb24oYyl7cmV0dXJuIGMubmV4dD1jLnRpbWVvdXQtKHEoKS1jLmxhc3RSdW5UaW1lKX0sX2dldE5lYXJlc3RJbnRlcnZhbDpmdW5jdGlvbihjKXt2YXIgYj1kLl9JTlRFUlZBTCwKZz1jJWI7cmV0dXJuIGc8Yi8yP2MtZzpjK2ItZ30sX2xhenlEZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGM9ZDtjLl9pbml0aWFsaXplZCYmdChjLl9UQVNLUykmJihjbGVhclRpbWVvdXQoYy5fZ2xvYmFsSW50ZXJ2YWxJZCksYy5faW5pdGlhbGl6ZWQ9ITEpfSxfbGF6eUluaXQ6ZnVuY3Rpb24oKXt2YXIgYz1kO2MuX2luaXRpYWxpemVkfHx0KGMuX1RBU0tTKXx8KGMuX2xhc3RSdW5UaW1lPXEoKSxjLl9nbG9iYWxJbnRlcnZhbElkPXNldFRpbWVvdXQoYy5fcnVubmVyLGMuX0lOVEVSVkFMKSxjLl9pbml0aWFsaXplZD0hMCl9LF9sb29wOmZ1bmN0aW9uKGMsYixnKXtmb3IodmFyIGU9ZCxrPWUuX0lOVEVSVkFMLG09ZS5fVEFTS1MscD1rLzIscz1xKCk7YzxnJiY1MD5xKCktcztjKyspe3ZhciBsPWJbY10saD1tW2xdO2gmJmUuX2RlY3JlbWVudE5leHRSdW5UaW1lKGgpPHAmJihlLnJ1bihoKSxlLmlzUmVwZWF0YWJsZShoKT9lLl9yZXNldE5leHRSdW5UaW1lKGgpOmUudW5yZWdpc3RlcighMSwKbCkpfWUuX2luaXRpYWxpemVkJiYoZS5fZ2xvYmFsSW50ZXJ2YWxJZD1jPGc/c2V0VGltZW91dChlLl9sb29wLDEwKTpzZXRUaW1lb3V0KGUuX3J1bm5lcixrKSl9LF9ydW5uZXI6ZnVuY3Rpb24oKXt2YXIgYz1kLGI9YS5PYmplY3Qua2V5cyhjLl9UQVNLUyk7Yy5fbG9vcCgwLGIsYi5sZW5ndGgpfSxfcmVzZXROZXh0UnVuVGltZTpmdW5jdGlvbihjKXtyZXR1cm4gYy5uZXh0PWMudGltZW91dH0sX0lOVEVSVkFMOjUwLF9UQVNLUzp7fSxfbGFzdFJ1blRpbWU6MCxfZ2xvYmFsSW50ZXJ2YWxJZDowLF9pbml0aWFsaXplZDohMX07YS5jbGVhckludGVydmFsPWQuY2xlYXJJbnRlcnZhbDthLmNsZWFyVGltZW91dD1kLmNsZWFyVGltZW91dDthLnNldEludGVydmFsPWQuc2V0SW50ZXJ2YWw7YS5zZXRUaW1lb3V0PWQuc2V0VGltZW91dDthLlRpbWVyPWR9LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6WyJvb3AiXX0pOwooZnVuY3Rpb24oKXt2YXIgYT1BVUkoKS51c2UoIm9vcCIpLEU9e30scT17cHJvdmlkZTpmdW5jdGlvbih0LGYsZCxjLGIpe0FycmF5LmlzQXJyYXkoYyl8fChjPVtjXSk7dmFyIGcsZT1hLmd1aWQoKTthLkxhbmcuaXNPYmplY3QoZCwhMCkmJihnPWQsZD1nLmZuLGc9Zy5iZWZvcmUsYS5MYW5nLmlzRnVuY3Rpb24oZyl8fChnPW51bGwpKTtiJiZhLkxhbmcuaXNGdW5jdGlvbih0KSYmKHQ9dC5wcm90b3R5cGUpO3EuX2dldEFPUCh0LGYpJiZkZWxldGUgdC5feXVpYW9wW2ZdO2c9ZnVuY3Rpb24oKXt2YXIgaz1hcmd1bWVudHMsbT10O2ImJihtPXRoaXMpO2lmKDE9PWMubGVuZ3RoJiZjWzBdaW4gRSlxLl9yZXBsYWNlTWV0aG9kKHQsZixkLG0pLGQuYXBwbHkobSxrKTtlbHNle3ZhciBwPSExLHM9cS5fcHJveHlMb2FkZXJzW2VdO3N8fChwPSEwLHEuX3Byb3h5TG9hZGVyc1tlXT1uZXcgYS5RdWV1ZSxzPXEuX3Byb3h5TG9hZGVyc1tlXSk7cy5hZGQoayk7cCYmKGMucHVzaChhLmJpbmQocS5fcHJveHksCkxpZmVyYXksdCxmLGQsbSxlLGMpKSxhLnVzZS5hcHBseShhLGMpKX19O2cudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZC50b1N0cmluZygpfTt0W2ZdPWd9LF9nZXRBT1A6ZnVuY3Rpb24odCxmKXtyZXR1cm4gdC5feXVpYW9wJiZ0Ll95dWlhb3BbZl19LF9wcm94eTpmdW5jdGlvbih0LGYsZCxjLGIsZyxlKXtiPXEuX3Byb3h5TG9hZGVyc1tiXTtmb3IocS5fcmVwbGFjZU1ldGhvZCh0LGYsZCxjKTt0PWIubmV4dCgpOylkLmFwcGx5KGMsdCk7Zm9yKGQ9Zy5sZW5ndGgtMTswPD1kO2QtLSlFW2dbZF1dPSEwfSxfcmVwbGFjZU1ldGhvZDpmdW5jdGlvbih0LGYsZCxjKXtjPXEuX2dldEFPUCh0LGYpO3ZhciBiPXRbZl07Yz8oYj1jLm1ldGhvZCxjLm1ldGhvZD1kKTp0W2ZdPWQ7YS5taXgoZCxiKX0sX3Byb3h5TG9hZGVyczp7fX07TGlmZXJheS5EZXBlbmRlbmN5PXE7TGlmZXJheS5wcm92aWRlPXEucHJvdmlkZX0pKCk7CihmdW5jdGlvbihhKXthLkRPTVRhc2tSdW5uZXI9e2FkZFRhc2s6ZnVuY3Rpb24oRSl7dGhpcy5fc2NoZWR1bGVkVGFza3MucHVzaChFKX0sYWRkVGFza1N0YXRlOmZ1bmN0aW9uKEUpe3RoaXMuX3Rhc2tTdGF0ZXMucHVzaChFKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl90YXNrU3RhdGVzLmxlbmd0aD0wO3RoaXMuX3NjaGVkdWxlZFRhc2tzLmxlbmd0aD0wfSxydW5UYXNrczpmdW5jdGlvbihFKXtmb3IodmFyIHE9dGhpcy5fc2NoZWR1bGVkVGFza3MsdD10aGlzLl90YXNrU3RhdGVzLGY9cS5sZW5ndGgsZD10Lmxlbmd0aCxjPTA7YzxmO2MrKylmb3IodmFyIGI9cVtjXSxnPWIucGFyYW1zLGU9MDtlPGQ7ZSsrKXt2YXIgaz10W2VdO2IuY29uZGl0aW9uKGssZyxFKSYmYi5hY3Rpb24oayxnLEUpfX0sX3NjaGVkdWxlZFRhc2tzOltdLF90YXNrU3RhdGVzOltdfX0pKExpZmVyYXkpO0xpZmVyYXkub249ZnVuY3Rpb24oKXt9O0xpZmVyYXkuZmlyZT1mdW5jdGlvbigpe307CkxpZmVyYXkuZGV0YWNoPWZ1bmN0aW9uKCl7fTsKKGZ1bmN0aW9uKGEsRSl7dmFyIHE9e30sdD1hLmNvbmZpZy5kb2M7RS5wcm92aWRlKEUsImRlbGVnYXRlQ2xpY2siLGZ1bmN0aW9uKGYsZCl7dmFyIGM9dC5nZXRFbGVtZW50QnlJZChmKTtjJiZjLmlkPT1mJiYoYz1hLm9uZShjKS5hZGRDbGFzcygibGZyLWRlbGVnYXRlLWNsaWNrIikuZ3VpZCgpLHFbY109ZCxFLl9iYXNlRGVsZWdhdGVIYW5kbGV8fChFLl9iYXNlRGVsZWdhdGVIYW5kbGU9YS5nZXRCb2R5KCkuZGVsZWdhdGUoImNsaWNrIixFLl9iYXNlRGVsZWdhdGUsIi5sZnItZGVsZWdhdGUtY2xpY2siKSkpfSxbImF1aS1iYXNlIl0pO0UuX2Jhc2VEZWxlZ2F0ZT1mdW5jdGlvbihmKXt2YXIgZD1mLmN1cnJlbnRUYXJnZXQuYXR0cigiaWQiKTsoZD1xW2RdKSYmZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O0UuX0NMSUNLX0VWRU5UUz1xO2EudXNlKCJhdHRyaWJ1dGUiLCJvb3AiLGZ1bmN0aW9uKGYpe2YuYXVnbWVudChFLGYuQXR0cmlidXRlLCEwKX0pfSkoQVVJKCksTGlmZXJheSk7CihmdW5jdGlvbihhLEUpe3ZhciBxPXtnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fTthLnVzZSgiaW8tYmFzZSIsZnVuY3Rpb24odCl7cS5nZXQ9dC5jYWNoZWQoZnVuY3Rpb24oZixkKXt2YXIgYz10aGVtZURpc3BsYXkuZ2V0UGF0aENvbnRleHQoKSsiL2xhbmd1YWdlLyIrdGhlbWVEaXNwbGF5LmdldExhbmd1YWdlSWQoKSsiLyIrZisiLyI7ZCYmKCJzdHJpbmciPT10eXBlb2YgZD9jKz1kOkFycmF5LmlzQXJyYXkoZCkmJihjKz1kLmpvaW4oIi8iKSkpO3ZhciBiPSIiO3QuaW8oYyx7aGVhZGVyczp7IlgtQ1NSRi1Ub2tlbiI6RS5hdXRoVG9rZW59LG1ldGhvZDoiR0VUIixvbjp7Y29tcGxldGU6ZnVuY3Rpb24oZyxlKXtiPWUucmVzcG9uc2VUZXh0fX0sc3luYzohMH0pO3JldHVybiBifSl9KTtFLkxhbmd1YWdlPXF9KShBVUkoKSxMaWZlcmF5KTtMaWZlcmF5PXdpbmRvdy5MaWZlcmF5fHx7fTsKKGZ1bmN0aW9uKGEsRSxxKXt2YXIgdD0vXmdldCQvaTtxLm5hbWVzcGFjZT1FLm5hbWVzcGFjZTthLmFqYXhTZXR1cCh7ZGF0YTp7fSx0eXBlOiJQT1NUIn0pO2EuYWpheFByZWZpbHRlcihmdW5jdGlvbihjKXtjLmNyb3NzRG9tYWluJiYoYy5jb250ZW50cy5zY3JpcHQ9ITEpO2MudXJsJiYoYy51cmw9cS5VdGlsLmdldFVSTFdpdGhTZXNzaW9uSWQoYy51cmwpKX0pO3ZhciBmPWZ1bmN0aW9uKCl7dmFyIGM9Zi5wYXJzZUludm9rZUFyZ3MoYXJndW1lbnRzKTtyZXR1cm4gZi5pbnZva2UuYXBwbHkoZixjKX07RS5hc3NpZ24oZix7VVJMX0lOVk9LRTp0aGVtZURpc3BsYXkuZ2V0UGF0aENvbnRleHQoKSsiL2FwaS9qc29ud3MvaW52b2tlIixiaW5kOmZ1bmN0aW9uKCl7dmFyIGM9RS50b0FycmF5KGFyZ3VtZW50cyk7Yy51bnNoaWZ0KHEuU2VydmljZSxxKTtyZXR1cm4gRS5iaW5kLmFwcGx5KEUsYyl9LHBhcnNlSW52b2tlQXJnczpmdW5jdGlvbihjKXt2YXIgYj1jWzBdLGc9dGhpcy5wYXJzZUlPQ29uZmlnKGMpOwpFLmlzU3RyaW5nKGIpJiYoYj10aGlzLnBhcnNlU3RyaW5nUGF5bG9hZChjKSx0aGlzLnBhcnNlSU9Gb3JtQ29uZmlnKGcsYyksYz1jW2MubGVuZ3RoLTFdLEUuaXNPYmplY3QoYykmJmMubWV0aG9kJiYoZy5tZXRob2Q9Yy5tZXRob2QpKTtyZXR1cm5bYixnXX0scGFyc2VJT0NvbmZpZzpmdW5jdGlvbihjKXt2YXIgYj1jWzBdLGc9Yi5pb3x8e307ZGVsZXRlIGIuaW87aWYoIWcuc3VjY2Vzcyl7Yz1FLmZpbHRlcihjLEUuaXNGdW5jdGlvbik7dmFyIGU9Y1sxXSxrPWNbMF07ZXx8KGU9ayk7Zy5jb21wbGV0ZT1mdW5jdGlvbihtKXttPW0ucmVzcG9uc2VKU09OO251bGw9PT1tfHxFLmhhcyhtLCJleGNlcHRpb24iKT9lJiZlLmNhbGwodGhpcyxtP20uZXhjZXB0aW9uOiJUaGUgc2VydmVyIHJldHVybmVkIGFuIGVtcHR5IHJlc3BvbnNlIixtKTprJiZrLmNhbGwodGhpcyxtKX19IUUuaGFzKGcsImNhY2hlIikmJnQudGVzdChnLnR5cGUpJiYoZy5jYWNoZT0hMSk7cS5Qcm9wc1ZhbHVlcy5OVExNX0FVVEhfRU5BQkxFRCYmCnEuQnJvd3Nlci5pc0llKCkmJihnLnR5cGU9IkdFVCIpO3JldHVybiBnfSxwYXJzZUlPRm9ybUNvbmZpZzpmdW5jdGlvbihjLGIpe3ZhciBnPWJbMV07ZyYmKGcuX25vZGV8fGcuanF1ZXJ5fHxnLm5vZGVUeXBlKSYmKGMuZm9ybT1nLCJtdWx0aXBhcnQvZm9ybS1kYXRhIj09Yy5mb3JtLmVuY3R5cGUmJihjLmNvbnRlbnRUeXBlPSExLGMucHJvY2Vzc0RhdGE9ITEpKX0scGFyc2VTdHJpbmdQYXlsb2FkOmZ1bmN0aW9uKGMpe3ZhciBiPXt9LGc9e30sZT1jWzFdO0UuaXNGdW5jdGlvbihlKXx8ZSYmKGUuX25vZGV8fGUuanF1ZXJ5fHxlLm5vZGVUeXBlKXx8KGI9ZSk7Z1tjWzBdXT1iO3JldHVybiBnfX0sITApO2YuaW52b2tlPWZ1bmN0aW9uKGMsYil7dmFyIGc9SlNPTi5zdHJpbmdpZnkoYyksZT1xLmF1dGhUb2tlbjtFLmRlZmF1bHRzKGIse2RhdGE6e2NtZDpnLHBfYXV0aDplfSxkYXRhVHlwZToiSlNPTiJ9KTtiLmZvcm0mJigibXVsdGlwYXJ0L2Zvcm0tZGF0YSI9PWIuZm9ybS5lbmN0eXBlJiYKRS5pc0Z1bmN0aW9uKHdpbmRvdy5Gb3JtRGF0YSk/KGIuZGF0YT1uZXcgRm9ybURhdGEoYi5mb3JtKSxiLmRhdGEuYXBwZW5kKCJjbWQiLGcpLGIuZGF0YS5hcHBlbmQoInBfYXV0aCIsZSkpOkUuZm9yRWFjaChhKGIuZm9ybSkuc2VyaWFsaXplQXJyYXkoKSxmdW5jdGlvbihrLG0pe2IuZGF0YVtrLm5hbWVdPWsudmFsdWV9KSxkZWxldGUgYi5mb3JtKTtyZXR1cm4gYS5hamF4KHRoaXMuVVJMX0lOVk9LRSxiKX07RS5mb3JFYWNoKFsiZ2V0IiwiZGVsZXRlIiwicG9zdCIsInB1dCIsInVwZGF0ZSJdLGZ1bmN0aW9uKGMsYil7dmFyIGc9YzsiZGVsZXRlIj09PWMmJihnPSJkZWwiKTtmW2ddPUUuYmluZEtleVJpZ2h0KHEsIlNlcnZpY2UiLHttZXRob2Q6Y30pfSk7cS5TZXJ2aWNlPWY7dmFyIGQ9e307cS5jb21wb25lbnQ9ZnVuY3Rpb24oYyxiKXt2YXIgZzsxPT09YXJndW1lbnRzLmxlbmd0aD8oZz1kW2NdKSYmRS5pc0Z1bmN0aW9uKGcpJiYoZz1nKCksZFtjXT1nKTooZz1kW2NdPWIsCnEuZmlyZShjKyI6cmVnaXN0ZXJlZCIpKTtyZXR1cm4gZ307cS5fY29tcG9uZW50cz1kO3EuX2NvbXBvbmVudHNGbj1kO3EuVGVtcGxhdGU9e1BPUlRMRVQ6J1x4M2NkaXYgY2xhc3NceDNkInBvcnRsZXQiXHgzZVx4M2NkaXYgY2xhc3NceDNkInBvcnRsZXQtdG9wcGVyIlx4M2VceDNjZGl2IGNsYXNzXHgzZCJwb3J0bGV0LXRpdGxlIlx4M2VceDNjL2Rpdlx4M2VceDNjL2Rpdlx4M2VceDNjZGl2IGNsYXNzXHgzZCJwb3J0bGV0LWNvbnRlbnQiXHgzZVx4M2MvZGl2XHgzZVx4M2NkaXYgY2xhc3NceDNkImZvcmJpZGRlbi1hY3Rpb24iXHgzZVx4M2MvZGl2XHgzZVx4M2MvZGl2XHgzZSd9fSkoQVVJLiQsQVVJLl8sTGlmZXJheSk7KGZ1bmN0aW9uKGEsRSl7YS5taXgoYS5uYW1lc3BhY2UoImNvbmZpZy5pbyIpLHttZXRob2Q6IlBPU1QiLHVyaUZvcm1hdHRlcjpmdW5jdGlvbihxKXtyZXR1cm4gRS5VdGlsLmdldFVSTFdpdGhTZXNzaW9uSWQocSl9fSwhMCl9KShBVUkoKSxMaWZlcmF5KTsKKGZ1bmN0aW9uKGEsRSxxLHQpe2EudXNlKCJhdWktYmFzZS1sYW5nIik7dmFyIGY9YS5BcnJheSxkPWEuTGFuZyxjPXtmYWxzZTp7Y3NzQ2xhc3M6ImNvbnRyb2xzLWhpZGRlbiIsaWNvbkNzc0NsYXNzOiJoaWRkZW4iLHN0YXRlOiJoaWRkZW4ifSx0cnVlOntjc3NDbGFzczoiY29udHJvbHMtdmlzaWJsZSIsaWNvbkNzc0NsYXNzOiJ2aWV3IixzdGF0ZToidmlzaWJsZSJ9fSxiPS9eKD86cF9wX2lkKT9fKC4qKV8uKiQvLGc9e3NyYzoiaGlkZUxpbmsifSxlPSdceDNjc3ZnIGNsYXNzXHgzZCJsZXhpY29uLWljb24gbGV4aWNvbi1pY29uLXswfSB7MX0iIGZvY3VzYWJsZVx4M2QiZmFsc2UiIHJvbGVceDNkImltYWdlIlx4M2VceDNjdXNlIGRhdGEtaHJlZlx4M2QiJyt0aGVtZURpc3BsYXkuZ2V0UGF0aFRoZW1lSW1hZ2VzKCkrJy9sZXhpY29uL2ljb25zLnN2ZyN7MH0iIC9ceDNlXHgzY3RpdGxlXHgzZXswfVx4M2MvdGl0bGVceDNlJyxrPXtfbWFwOnt9fSxtPXtzdWJtaXRDb3VudGRvd246MCwKYWRkSW5wdXRDYW5jZWw6ZnVuY3Rpb24oKXthLnVzZSgiYXVpLWJ1dHRvbi1zZWFyY2gtY2FuY2VsIixmdW5jdGlvbihwKXtuZXcgcC5CdXR0b25TZWFyY2hDYW5jZWwoe3RyaWdnZXI6ImlucHV0W3R5cGVceDNkcGFzc3dvcmRdLCBpbnB1dFt0eXBlXHgzZHNlYXJjaF0sIGlucHV0LmNsZWFyYWJsZSwgaW5wdXQuc2VhcmNoLXF1ZXJ5In0pfSk7bS5hZGRJbnB1dENhbmNlbD1mdW5jdGlvbigpe319LGFkZFBhcmFtczpmdW5jdGlvbihwLHMpe3A9cS5pc09iamVjdChwKT9FLnBhcmFtKHAsITApOlN0cmluZyhwKS50cmltKCk7dmFyIGw9c3x8bG9jYXRpb24uaHJlZixoPWw7aWYocCl7dmFyIHU7LTE8bC5pbmRleE9mKCIjIikmJih1PWwuc3BsaXQoIiMiKSxsPXVbMF0sdT11WzFdKTtwPS0xPT1sLmluZGV4T2YoIj8iKT8iPyIrcDoiXHgyNiIrcDstMT09bC5pbmRleE9mKHApJiYoaD1sK3AsdSYmKGgrPSIjIit1KSxzfHwobG9jYXRpb24uaHJlZj1oKSl9cmV0dXJuIGh9LGNoZWNrQWxsOmZ1bmN0aW9uKHAsCnMsbCxoKXtpZihwKXtwPW0uZ2V0RE9NKHApO2w9bS5nZXRET00obCk7cz1xLmlzQXJyYXkocyk/ImlucHV0W25hbWVceDNkIitzLmpvaW4oIl0sIGlucHV0W25hbWVceDNkIikrIl0iOiJpbnB1dFtuYW1lXHgzZCIrcysiXSI7cD1FKHApO3ZhciB1PUUobCkucHJvcCgiY2hlY2tlZCIpO3AuZmluZChzKS5lYWNoKGZ1bmN0aW9uKHcseil7ej1FKHopO3oucHJvcCgiZGlzYWJsZWQiKXx8ei5wcm9wKCJjaGVja2VkIix1KX0pO2gmJnAuZmluZChoKS50b2dnbGVDbGFzcygiaW5mbyIsdSl9fSxjaGVja0FsbEJveDpmdW5jdGlvbihwLHMsbCl7dmFyIGg9MDtpZihwKXtwPW0uZ2V0RE9NKHApO2w9bS5nZXRET00obCk7cD1FKHApO3ZhciB1PUUobCk7dS5sZW5ndGh8fCh1PXAuZmluZCgnaW5wdXRbbmFtZVx4M2QiJytsKyciXScpKTt2YXIgdz0wO3A9cC5maW5kKCJpbnB1dFt0eXBlXHgzZGNoZWNrYm94XSIpO3EuaXNBcnJheShzKXx8KHM9W3NdKTtwLmVhY2goZnVuY3Rpb24oeixBKXtBPQpFKEEpOyFBLmlzKHUpJiYtMTxxLmluZGV4T2YocyxBLmF0dHIoIm5hbWUiKSkmJih3KyssQS5wcm9wKCJjaGVja2VkIikmJmgrKyl9KTt1LnByb3AoImNoZWNrZWQiLHc9PWgpfXJldHVybiBofSxjaGVja1RhYjpmdW5jdGlvbihwKXtkb2N1bWVudC5hbGwmJjk9PXdpbmRvdy5ldmVudC5rZXlDb2RlJiYocC5zZWxlY3Rpb249ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksc2V0VGltZW91dChmdW5jdGlvbigpe20ucHJvY2Vzc1RhYihwLmlkKX0sMCkpfSxkaXNhYmxlRWxlbWVudHM6ZnVuY3Rpb24ocCl7aWYocD1FKHApWzBdKXtwPXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtmb3IodmFyIHM9cS5jb25zdGFudCghMSksbD1wLmxlbmd0aC0xOzA8PWw7bC0tKXt2YXIgaD1wW2xdO2guc3R5bGUuY3Vyc29yPSJkZWZhdWx0IjtoLm9uY2xpY2s9cztoLm9ubW91c2VvdmVyPXM7aC5vbm1vdXNlb3V0PXM7aC5vbm1vdXNlZW50ZXI9cztoLm9ubW91c2VsZWF2ZT1zO2guYWN0aW9uPQoiIjtoLmRpc2FibGVkPSEwO2guaHJlZj0iamF2YXNjcmlwdDo7IjtoLm9uc3VibWl0PXM7RShoKS5vZmYoKX19fSxkaXNhYmxlRXNjOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWxsJiYyNz09d2luZG93LmV2ZW50LmtleUNvZGUmJih3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWU9ITEpfSxkaXNhYmxlRm9ybUJ1dHRvbnM6ZnVuY3Rpb24ocCxzKXtwLmF0dHIoImRpc2FibGVkIiwhMCk7cC5zZXRTdHlsZSgib3BhY2l0eSIsMC41KTtpZihhLlVBLmdlY2tvKWEuZ2V0V2luKCkub24oInVubG9hZCIsZnVuY3Rpb24obCl7cC5hdHRyKCJkaXNhYmxlZCIsITEpfSk7ZWxzZSBhLlVBLnNhZmFyaSYmYS51c2UoIm5vZGUtZXZlbnQtaHRtbDUiLGZ1bmN0aW9uKGwpe2wuZ2V0V2luKCkub24oInBhZ2VoaWRlIixmdW5jdGlvbihoKXttLmVuYWJsZUZvcm1CdXR0b25zKHAscyl9KX0pfSxkaXNhYmxlVG9nZ2xlQm94ZXM6ZnVuY3Rpb24ocCxzLGwpe3A9RSgiIyIrcCk7dmFyIGg9RSgiIyIrcyk7aC5wcm9wKCJkaXNhYmxlZCIsCmwmJnAucHJvcCgiY2hlY2tlZCIpKTtwLm9uKCJjbGljayIsZnVuY3Rpb24oKXtoLnByb3AoImRpc2FibGVkIiwhaC5wcm9wKCJkaXNhYmxlZCIpKX0pfSxlbmFibGVGb3JtQnV0dG9uczpmdW5jdGlvbihwKXttLl9zdWJtaXRMb2NrZWQ9bnVsbDttLnRvZ2dsZURpc2FibGVkKHAsITEpfSxlc2NhcGVDREFUQTpmdW5jdGlvbihwKXtyZXR1cm4gcC5yZXBsYWNlKC88IVxbQ0RBVEFcW3xcXVxdPi9naSxmdW5jdGlvbihzKXt2YXIgbD0iIjsiXV1ceDNlIj09cz9sPSJdXVx4MjZndDsiOiJceDNjIVtDREFUQVsiPT1zJiYobD0iXHgyNmx0OyFbQ0RBVEFbIik7cmV0dXJuIGx9KX0sZm9jdXNGb3JtRmllbGQ6ZnVuY3Rpb24ocCl7dmFyIHM9RShkb2N1bWVudCksbD0hMTtwPW0uZ2V0RE9NKHApO3A9RShwKTtzLm9uKCJjbGljay5mb2N1c0Zvcm1GaWVsZCIsZnVuY3Rpb24odyl7bD0hMDtzLm9mZigiY2xpY2suZm9jdXNGb3JtRmllbGQiKX0pO2lmKCFsJiZtLmluQnJvd3NlclZpZXcocCkpe3ZhciBoPQpwLmNsb3Nlc3QoImZvcm0iKSx1PSFwLmlzKCI6ZGlzYWJsZWQiKSYmIXAuaXMoIjpoaWRkZW4iKSYmIXAucGFyZW50cygiOmRpc2FibGVkIikubGVuZ3RoOyFoLmxlbmd0aHx8dT9wLmZvY3VzKCk6KGg9aC5kYXRhKCJmbS1uYW1lc3BhY2UiKSx0Lm9uY2UoaCsiZm9ybVJlYWR5IixmdW5jdGlvbigpe3AuZm9jdXMoKX0pKX19LGZvcmNlUG9zdDpmdW5jdGlvbihwKXtwPW0uZ2V0RE9NKHApO3A9RShwKTtpZihwLmxlbmd0aCl7dmFyIHM9cC5hdHRyKCJocmVmIik7cD0iX2JsYW5rIj09cC5hdHRyKCJ0YXJnZXQiKTt2YXIgbD1FKGRvY3VtZW50LmhyZWZGbSk7cCYmbC5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKTtzdWJtaXRGb3JtKGwscywhcCk7bS5fc3VibWl0TG9ja2VkPW51bGx9fSxnZXRBdHRyaWJ1dGVzOmZ1bmN0aW9uKHAscyl7dmFyIGw9bnVsbDtpZihwKXtwPW0uZ2V0RE9NKHApO3AuanF1ZXJ5JiYocD1wWzBdKTtmb3IodmFyIGw9e30saD1xLmlzRnVuY3Rpb24ocyksdT1xLmlzU3RyaW5nKHMpLAp3PXAuYXR0cmlidXRlcyx6PXcubGVuZ3RoO3otLTspe3ZhciBBPXdbel0sSD1BLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksQT1BLm5vZGVWYWx1ZTtpZih1KWlmKDA9PT1ILmluZGV4T2YocykpSD1ILnN1YnN0cihzLmxlbmd0aCk7ZWxzZSBjb250aW51ZTtlbHNlIGlmKGgmJihBPXMoQSxILHcpLCExPT09QSkpY29udGludWU7bFtIXT1BfX1yZXR1cm4gbH0sZ2V0Q29sdW1uSWQ6ZnVuY3Rpb24ocCl7cmV0dXJuIHAucmVwbGFjZSgvbGF5b3V0LWNvbHVtbl8vLCIiKX0sZ2V0RE9NOmZ1bmN0aW9uKHApe2lmKHAuX25vZGV8fHAuX25vZGVzKXA9cC5nZXRET00oKTtyZXR1cm4gcH0sZ2V0R2VvbG9jYXRpb246ZnVuY3Rpb24ocCxzLGwpe3AmJm5hdmlnYXRvci5nZW9sb2NhdGlvbj9uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKGgpe3AoaC5jb29yZHMubGF0aXR1ZGUsaC5jb29yZHMubG9uZ2l0dWRlLGgpfSxzLGwpOnMmJnMoKX0sZ2V0TGV4aWNvbkljb246ZnVuY3Rpb24ocCwKcyl7cmV0dXJuIEUodGhpcy5nZXRMZXhpY29uSWNvblRwbChwLHMpKVswXX0sZ2V0TGV4aWNvbkljb25UcGw6ZnVuY3Rpb24ocCxzKXtyZXR1cm4gcS5zdWIoZSxwLHN8fCIiKX0sZ2V0T3BlbmVyOmZ1bmN0aW9uKCl7dmFyIHA9ay5fb3BlbmVyO2lmKCFwKXt2YXIgcz10LlV0aWwuZ2V0VG9wKCkuTGlmZXJheS5VdGlsLGw9dC5VdGlsLmdldFdpbmRvd05hbWUoKTtzLldpbmRvdy5fbWFwW2xdJiYocD1zLldpbmRvdy5fbWFwW2xdLl9vcGVuZXIsay5fb3BlbmVyPXApfXJldHVybiBwfHx3aW5kb3cub3BlbmVyfHx3aW5kb3cucGFyZW50fSxnZXRQb3J0bGV0SWQ6ZnVuY3Rpb24ocCl7cmV0dXJuIFN0cmluZyhwKS5yZXBsYWNlKGIsIiQxIil9LGdldFBvcnRsZXROYW1lc3BhY2U6ZnVuY3Rpb24ocCl7cmV0dXJuIl8iK3ArIl8ifSxnZXRUb3A6ZnVuY3Rpb24oKXt2YXIgcD1tLl90b3BXaW5kb3c7aWYoIXApe2Zvcih2YXIgcz13aW5kb3cucGFyZW50LGw7cyE9d2luZG93Oyl7dHJ5e2lmKCJ1bmRlZmluZWQiPT0KdHlwZW9mIHMubG9jYXRpb24uaHJlZilicmVhaztsPXMudGhlbWVEaXNwbGF5fWNhdGNoKGgpe2JyZWFrfWlmKCFsfHwic2ltdWxhdGlvbkRldmljZUlmcmFtZSI9PT13aW5kb3cubmFtZSlicmVhaztlbHNlIGlmKCFsLmlzU3RhdGVQb3BVcCgpfHxzPT1zLnBhcmVudCl7cD1zO2JyZWFrfXM9cy5wYXJlbnR9cHx8KHA9d2luZG93KTttLl90b3BXaW5kb3c9cH1yZXR1cm4gcH0sZ2V0VVJMV2l0aFNlc3Npb25JZDpmdW5jdGlvbihwKXtpZighdGhlbWVEaXNwbGF5LmlzQWRkU2Vzc2lvbklkVG9VUkwoKSlyZXR1cm4gcDt2YXIgcz1wLmluZGV4T2YoIjsiKTtpZigtMTxzKXJldHVybiBwO3ZhciBsPSI7anNlc3Npb25pZFx4M2QiK3RoZW1lRGlzcGxheS5nZXRTZXNzaW9uSWQoKSxzPXAuaW5kZXhPZigiPyIpO2lmKC0xPHMpcmV0dXJuIHAuc3Vic3RyaW5nKDAscykrbCtwLnN1YnN0cmluZyhzKTtzPXAuaW5kZXhPZigiLy8iKTtpZigtMTxzKXt2YXIgaD1wLmxhc3RJbmRleE9mKCIvIik7CmlmKHMrMT09aClyZXR1cm4gcCsiLyIrbH1yZXR1cm4gcCtsfSxnZXRXaW5kb3c6ZnVuY3Rpb24ocCl7cHx8KHA9bS5nZXRXaW5kb3dOYW1lKCkpO3JldHVybiBtLmdldFRvcCgpLkxpZmVyYXkuVXRpbC5XaW5kb3cuZ2V0QnlJZChwKX0sZ2V0V2luZG93TmFtZTpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cubmFtZXx8ay5fbmFtZXx8IiJ9LGdldFdpbmRvd1dpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIDA8d2luZG93LmlubmVyV2lkdGg/d2luZG93LmlubmVyV2lkdGg6c2NyZWVuLndpZHRofSxpbkJyb3dzZXJWaWV3OmZ1bmN0aW9uKHAscyxsKXt2YXIgaD0hMTtwPUUocCk7aWYocC5sZW5ndGgpe2x8fChsPXAub2Zmc2V0KCksbC5ib3R0b209bC50b3ArcC5vdXRlckhlaWdodCgpLGwucmlnaHQ9bC5sZWZ0K3Aub3V0ZXJXaWR0aCgpKTtzfHwocz13aW5kb3cpO3M9RShzKTt2YXIgdT17fTt1LmxlZnQ9cy5zY3JvbGxMZWZ0KCk7dS5yaWdodD11LmxlZnQrcy53aWR0aCgpO3UudG9wPXMuc2Nyb2xsVG9wKCk7CnUuYm90dG9tPXUudG9wK3MuaGVpZ2h0KCk7aWYoaD1sLmJvdHRvbTw9dS5ib3R0b20mJmwubGVmdD49dS5sZWZ0JiZsLnJpZ2h0PD11LnJpZ2h0JiZsLnRvcD49dS50b3Ape3ZhciB3PUUocy5wcm9wKCJmcmFtZUVsZW1lbnQiKSk7dy5sZW5ndGgmJihoPXcub2Zmc2V0KCksdz1oLmxlZnQtdS5sZWZ0LGwubGVmdCs9dyxsLnJpZ2h0Kz13LHU9aC50b3AtdS50b3AsbC50b3ArPXUsbC5ib3R0b20rPXUsaD1tLmluQnJvd3NlclZpZXcocCxzLnByb3AoInBhcmVudCIpLGwpKX19cmV0dXJuIGh9LGlzUGhvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRXaW5kb3dXaWR0aCgpPHQuQlJFQUtQT0lOVFMuUEhPTkV9LGlzVGFibGV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0V2luZG93V2lkdGgoKTx0LkJSRUFLUE9JTlRTLlRBQkxFVH0sbGlzdENoZWNrYm94ZXNFeGNlcHQ6ZnVuY3Rpb24ocCxzLGwsaCl7cD1tLmdldERPTShwKTt2YXIgdT0iaW5wdXRbdHlwZVx4M2RjaGVja2JveF0iOwpsJiYodSs9IltuYW1lXHgzZCIrbCsiXSIpO3JldHVybiBxLnJlZHVjZShFKHApLmZpbmQodSksZnVuY3Rpb24odyx6LEEpe3o9RSh6KTsoQT16LnZhbCgpKSYmei5hdHRyKCJuYW1lIikhPXMmJnoucHJvcCgiY2hlY2tlZCIpPT1oJiYhei5wcm9wKCJkaXNhYmxlZCIpJiZ3LnB1c2goQSk7cmV0dXJuIHd9LFtdKS5qb2luKCl9LGxpc3RDaGVja2VkRXhjZXB0OmZ1bmN0aW9uKHAscyxsKXtyZXR1cm4gbS5saXN0Q2hlY2tib3hlc0V4Y2VwdChwLHMsbCwhMCl9LGxpc3RTZWxlY3Q6ZnVuY3Rpb24ocCxzKXtwPW0uZ2V0RE9NKHApO3JldHVybiBxLnJlZHVjZShFKHApLmZpbmQoIm9wdGlvbiIpLGZ1bmN0aW9uKGwsaCx1KXsoaD1FKGgpLnZhbCgpKSYmbC5wdXNoKGgpO3JldHVybiBsfSxbXSkuam9pbihzfHwiLCIpfSxsaXN0VW5jaGVja2VkRXhjZXB0OmZ1bmN0aW9uKHAscyxsKXtyZXR1cm4gbS5saXN0Q2hlY2tib3hlc0V4Y2VwdChwLHMsbCwhMSl9LG5vcm1hbGl6ZUZyaWVuZGx5VVJMOmZ1bmN0aW9uKHApe3A9CnAucmVwbGFjZSgvW15hLXpBLVowLTlfLV0vZywiLSIpOyItIj09PXBbMF0mJihwPXAucmVwbGFjZSgvXi0rLywiIikpO3A9cC5yZXBsYWNlKC8tLSsvZywiLSIpO3JldHVybiBwLnRvTG93ZXJDYXNlKCl9LG5zOmZ1bmN0aW9uKHAscyl7dmFyIGwsaD10aGlzLl9ucztxLmlzT2JqZWN0KHMpPyhsPXt9LHEuZm9yRWFjaChzLGZ1bmN0aW9uKHUsdyl7dz1oKHAsdyk7bFt3XT11fSkpOmw9aChwLHMpO3JldHVybiBsfSxvcGVuSW5EaWFsb2c6ZnVuY3Rpb24ocCxzKXtwLnByZXZlbnREZWZhdWx0KCk7dmFyIGw9bS5nZXRET00ocC5jdXJyZW50VGFyZ2V0KSxsPUUobCk7cz1hLm1peChsLmRhdGEoKSxzKTtzLnVyaXx8KHMudXJpPWwuZGF0YSgiaHJlZiIpfHxsLmF0dHIoImhyZWYiKSk7cy50aXRsZXx8KHMudGl0bGU9bC5hdHRyKCJ0aXRsZSIpKTt0LlV0aWwub3BlbldpbmRvdyhzKX0sb3BlbldpbmRvdzpmdW5jdGlvbihwLHMpe3Aub3BlbmluZ1dpbmRvdz13aW5kb3c7bS5nZXRUb3AoKS5MaWZlcmF5LlV0aWwuX29wZW5XaW5kb3dQcm92aWRlcihwLApzKX0scHJvY2Vzc1RhYjpmdW5jdGlvbihwKXtkb2N1bWVudC5hbGxbcF0uc2VsZWN0aW9uLnRleHQ9U3RyaW5nLmZyb21DaGFyQ29kZSg5KTtkb2N1bWVudC5hbGxbcF0uZm9jdXMoKX0scmFuZG9tSW50OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLnJhbmRvbSgpKihuZXcgRGF0ZSkuZ2V0VGltZSgpKX0scmVtb3ZlRW50aXR5U2VsZWN0aW9uOmZ1bmN0aW9uKHAscyxsLGgpe0UoIiMiK2grcCkudmFsKDApO0UoIiMiK2grcykudmFsKCIiKTt0LlV0aWwudG9nZ2xlRGlzYWJsZWQobCwhMCk7dC5maXJlKCJlbnRpdHlTZWxlY3Rpb25SZW1vdmVkIil9LHJlb3JkZXI6ZnVuY3Rpb24ocCxzKXtwPW0uZ2V0RE9NKHApO3A9RShwKTtpZigtMT09cC5wcm9wKCJzZWxlY3RlZEluZGV4IikpcC5wcm9wKCJzZWxlY3RlZEluZGV4IiwwKTtlbHNle3ZhciBsPXAuZmluZCgib3B0aW9uOnNlbGVjdGVkIik7cz9xLmZvckVhY2hSaWdodChsLGZ1bmN0aW9uKGgsdSl7aD1FKGgpO3ZhciB3PQpoLnByb3AoImluZGV4Iiksej1wLmZpbmQoIm9wdGlvbiIpLmxlbmd0aC0xO3c9PT16P3AucHJlcGVuZChoKTpoLmluc2VydEFmdGVyKGgubmV4dCgpKX0pOnEuZm9yRWFjaChsLGZ1bmN0aW9uKGgsdSl7aD1FKGgpOzA9PT1oLnByb3AoImluZGV4Iik/cC5hcHBlbmQoaCk6aC5pbnNlcnRCZWZvcmUoaC5wcmV2KCkpfSl9fSxyb3dDaGVja2VyQ2hlY2tBbGxCb3g6ZnVuY3Rpb24ocCxzLGwsaCx1KXttLmNoZWNrQWxsQm94KHAsbCxoKTtzJiZzLnRvZ2dsZUNsYXNzKHUpfSxzYXZlUG9ydGxldFRpdGxlOmZ1bmN0aW9uKHApe3EuZGVmYXVsdHMocCx7ZG9Bc1VzZXJJZDowLHBsaWQ6MCxwb3J0bGV0SWQ6MCx0aXRsZToiIix1cmw6dGhlbWVEaXNwbGF5LmdldFBhdGhNYWluKCkrIi9wb3J0YWwvdXBkYXRlX3BvcnRsZXRfdGl0bGUifSk7RS5hamF4KHAudXJsLHtkYXRhOntkb0FzVXNlcklkOnAuZG9Bc1VzZXJJZCxwX2F1dGg6dC5hdXRoVG9rZW4scF9sX2lkOnAucGxpZCxwb3J0bGV0SWQ6cC5wb3J0bGV0SWQsCnRpdGxlOnAudGl0bGV9fSl9LHNlbGVjdEVudGl0eUhhbmRsZXI6ZnVuY3Rpb24ocCxzLGwpe3A9RShwKTt2YXIgaD1tLmdldE9wZW5lcigpLkxpZmVyYXksdT1wLmZpbmQoIi5zZWxlY3Rvci1idXR0b24iKTtwLm9uKCJjbGljayIsIi5zZWxlY3Rvci1idXR0b24iLGZ1bmN0aW9uKHcpe2lmKCFFKHcudGFyZ2V0KS5hdHRyKCJkYXRhLXByZXZlbnQtc2VsZWN0aW9uIikpe3c9RSh3LmN1cnJlbnRUYXJnZXQpO3ZhciB6PSJ0cnVlIj09PXcuYXR0cigiZGF0YS1jb25maXJtLXNlbGVjdGlvbiIpLEE9dy5hdHRyKCJkYXRhLWNvbmZpcm0tc2VsZWN0aW9uLW1lc3NhZ2UiKTtpZighenx8Y29uZmlybShBKSkhMSE9PWwmJih1LnByb3AoImRpc2FibGVkIiwhMSksdy5wcm9wKCJkaXNhYmxlZCIsITApKSx3PW0uZ2V0QXR0cmlidXRlcyh3LCJkYXRhLSIpLGguZmlyZShzLHcpLG0uZ2V0V2luZG93KCkuaGlkZSgpfX0pO2gub24oImVudGl0eVNlbGVjdGlvblJlbW92ZWQiLGZ1bmN0aW9uKHcpe3UucHJvcCgiZGlzYWJsZWQiLAohMSl9KX0sc2VsZWN0Rm9sZGVyOmZ1bmN0aW9uKHAscyl7RSgiIyIrcytwLmlkU3RyaW5nKS52YWwocC5pZFZhbHVlKTt2YXIgbD1xLnVuZXNjYXBlKHAubmFtZVZhbHVlKTtFKCIjIitzK3AubmFtZVN0cmluZykudmFsKGwpO2w9RSgiIyIrcysicmVtb3ZlRm9sZGVyQnV0dG9uIik7dC5VdGlsLnRvZ2dsZURpc2FibGVkKGwsITEpfSxzZXRDdXJzb3JQb3NpdGlvbjpmdW5jdGlvbihwLHMpe3RoaXMuc2V0U2VsZWN0aW9uUmFuZ2UocCxzLHMpfSxzZXRTZWxlY3Rpb25SYW5nZTpmdW5jdGlvbihwLHMsbCl7cD1tLmdldERPTShwKTtwLmpxdWVyeSYmKHA9cFswXSk7cC5zZXRTZWxlY3Rpb25SYW5nZT8ocC5mb2N1cygpLHAuc2V0U2VsZWN0aW9uUmFuZ2UocyxsKSk6cC5jcmVhdGVUZXh0UmFuZ2UmJihwPXAuY3JlYXRlVGV4dFJhbmdlKCkscC5jb2xsYXBzZSghMCkscC5tb3ZlRW5kKCJjaGFyYWN0ZXIiLGwpLHAubW92ZUVuZCgiY2hhcmFjdGVyIixzKSxwLnNlbGVjdCgpKX0sc2hvd0NhcHNMb2NrOmZ1bmN0aW9uKHAsCnMpe3ZhciBsPXAua2V5Q29kZT9wLmtleUNvZGU6cC53aGljaCxoPXAuc2hpZnRLZXk/cC5zaGlmdEtleToxNj09PWwsdT0ibm9uZSI7aWYoNjU8PWwmJjkwPj1sJiYhaHx8OTc8PWwmJjEyMj49bCYmaCl1PSIiO0UoIiMiK3MpLmNzcygiZGlzcGxheSIsdSl9LHNvcnRCeUFzY2VuZGluZzpmdW5jdGlvbihwLHMpe3A9cFsxXS50b0xvd2VyQ2FzZSgpO3M9c1sxXS50b0xvd2VyQ2FzZSgpO3JldHVybiBwPnM/MTpwPHM/LTE6MH0sc3VibWl0Rm9ybTpmdW5jdGlvbihwKXtwLnN1Ym1pdCgpfSx0b0NoYXJDb2RlOnEubWVtb2l6ZShmdW5jdGlvbihwKXtyZXR1cm4gcS5pbnZva2UocCwiY2hhckNvZGVBdCIpLmpvaW4oIiIpfSksdG9nZ2xlQm94ZXM6ZnVuY3Rpb24ocCxzLGwsaCl7dmFyIHU9RSgiIyIrcCksdz1FKCIjIitzKTtwPXUucHJvcCgiY2hlY2tlZCIpO2wmJihwPSFwKTt3LnRvZ2dsZUNsYXNzKCJoaWRlIiwhcCk7dS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dy50b2dnbGVDbGFzcygiaGlkZSIpOwpoJiZ3LmZpbmQoImlucHV0W3R5cGVceDNkY2hlY2tib3hdIikucHJvcCgiY2hlY2tlZCIsdS5wcm9wKCJjaGVja2VkIikpfSl9LHRvZ2dsZURpc2FibGVkOmZ1bmN0aW9uKHAscyl7cD1tLmdldERPTShwKTtwPUUocCk7cC5lYWNoKGZ1bmN0aW9uKGwsaCl7aD1FKGgpO2gucHJvcCgiZGlzYWJsZWQiLHMpO2gudG9nZ2xlQ2xhc3MoImRpc2FibGVkIixzKX0pfSx0b2dnbGVSYWRpbzpmdW5jdGlvbihwLHMsbCl7cD1FKCIjIitwKTt2YXIgaDtzJiYocS5pc0FycmF5KHMpJiYocz1zLmpvaW4oIiwjIikpLGg9RSgiIyIrcyksaC50b2dnbGVDbGFzcygiaGlkZSIsIXAucHJvcCgiY2hlY2tlZCIpKSk7cC5vbigiY2hhbmdlIixmdW5jdGlvbigpe2gmJmgucmVtb3ZlQ2xhc3MoImhpZGUiKTtsJiYocS5pc0FycmF5KGwpJiYobD1sLmpvaW4oIiwjIikpLEUoIiMiK2wpLmFkZENsYXNzKCJoaWRlIikpfSl9LHRvZ2dsZVNlYXJjaENvbnRhaW5lckJ1dHRvbjpmdW5jdGlvbihwLHMsbCxoKXtFKHMpLm9uKCJjbGljayIsCiJpbnB1dFt0eXBlXHgzZGNoZWNrYm94XSIsZnVuY3Rpb24oKXttLnRvZ2dsZURpc2FibGVkKHAsIW0ubGlzdENoZWNrZWRFeGNlcHQobCxoKSl9KX0sdG9nZ2xlU2VsZWN0Qm94OmZ1bmN0aW9uKHAscyxsKXt2YXIgaD1FKCIjIitwKSx1PUUoIiMiK2wpLHc9cS5pc0Z1bmN0aW9uKHMpO3A9ZnVuY3Rpb24oKXt2YXIgej1oLnZhbCgpLEE9cz09ejt3JiYoQT1zKHoscykpO3UudG9nZ2xlQ2xhc3MoImhpZGUiLCFBKX07cCgpO2gub24oImNoYW5nZSIscCl9LHRvTnVtYmVyOmZ1bmN0aW9uKHApe3JldHVybiBwYXJzZUludChwLDEwKXx8MH0sX2RlZmF1bHRQcmV2aWV3QXJ0aWNsZUZuOmZ1bmN0aW9uKHApe3AucHJldmVudERlZmF1bHQoKTttLmRlZmF1bHRQcmV2aWV3QXJ0aWNsZUZuKHApfSxfZGVmYXVsdFN1Ym1pdEZvcm1GbjpmdW5jdGlvbihwKXt2YXIgcz1wLmZvcm0sbD0hMTtpZihwLnZhbGlkYXRlKXt2YXIgaD10LkZvcm0uZ2V0KHMuYXR0cigiaWQiKSk7aCYmKGg9aC5mb3JtVmFsaWRhdG9yLAphLmluc3RhbmNlT2YoaCxhLkZvcm1WYWxpZGF0b3IpJiYoaC52YWxpZGF0ZSgpLChsPWguaGFzRXJyb3JzKCkpJiZoLmZvY3VzSW52YWxpZEZpZWxkKCkpKX1pZighbCl7bD1wLmFjdGlvbnx8cy5hdHRyKCJhY3Rpb24iKTtwPXAuc2luZ2xlU3VibWl0O2g9cy5hbGwoImJ1dHRvblt0eXBlXHgzZHN1Ym1pdF0sIGlucHV0W3R5cGVceDNkYnV0dG9uXSwgaW5wdXRbdHlwZVx4M2RpbWFnZV0sIGlucHV0W3R5cGVceDNkcmVzZXRdLCBpbnB1dFt0eXBlXHgzZHN1Ym1pdF0iKTttLmRpc2FibGVGb3JtQnV0dG9ucyhoLHMpO20uX3N1Ym1pdExvY2tlZD0hMT09PXA/YS5sYXRlcigxRTMsbSxtLmVuYWJsZUZvcm1CdXR0b25zLFtoLHNdKTohMDtwPW5ldyBhLlVybChsKTtpZihoPXAuZ2V0UGFyYW1ldGVyKCJwX2F1dGgiKSlzLmFwcGVuZCgnXHgzY2lucHV0IG5hbWVceDNkInBfYXV0aCIgdHlwZVx4M2QiaGlkZGVuIiB2YWx1ZVx4M2QiJytoKyciIC9ceDNlJykscC5yZW1vdmVQYXJhbWV0ZXIoInBfYXV0aCIpLApsPXAudG9TdHJpbmcoKTtzLmF0dHIoImFjdGlvbiIsbCk7bS5zdWJtaXRGb3JtKHMpO3MuYXR0cigidGFyZ2V0IiwiIik7bS5fc3VibWl0TG9ja2VkPW51bGx9fSxfZ2V0RWRpdGFibGVJbnN0YW5jZTpmdW5jdGlvbihwKXt2YXIgcz1tLl9FRElUQUJMRTtzfHwocz1uZXcgYS5FZGl0YWJsZSh7YWZ0ZXI6e2NvbnRlbnRUZXh0Q2hhbmdlOmZ1bmN0aW9uKGwpe2lmKCFsLmluaXRpYWwpe3ZhciBoPXRoaXMuZ2V0KCJub2RlIikuZ2V0RGF0YSgicG9ydGxldFRpdGxlRWRpdE9wdGlvbnMiKTttLnNhdmVQb3J0bGV0VGl0bGUoe2RvQXNVc2VySWQ6aC5kb0FzVXNlcklkLHBsaWQ6aC5wbGlkLHBvcnRsZXRJZDpoLnBvcnRsZXRJZCx0aXRsZTpsLm5ld1ZhbH0pfX0sc3RhcnRFZGl0aW5nOmZ1bmN0aW9uKGwpe3ZhciBoPXRoaXM7aWYobD10LkxheW91dCloLl9kcmFnTGlzdGVuZXI9bC5nZXRMYXlvdXRIYW5kbGVyKCkub24oImRyYWc6c3RhcnQiLGZ1bmN0aW9uKHUpe2guZmlyZSgic2F2ZSIpfSl9LApzdG9wRWRpdGluZzpmdW5jdGlvbihsKXt0aGlzLl9kcmFnTGlzdGVuZXImJnRoaXMuX2RyYWdMaXN0ZW5lci5kZXRhY2goKX19LGNzc0NsYXNzOiJsZnItcG9ydGxldC10aXRsZS1lZGl0YWJsZSIsbm9kZTpwfSksbS5fRURJVEFCTEU9cyk7cmV0dXJuIHN9LF9uczpxLmNhY2hlZChmdW5jdGlvbihwLHMpe3EuaXNVbmRlZmluZWQocyl8fDA9PT1zLmxhc3RJbmRleE9mKHAsMCl8fChzPXArcyk7cmV0dXJuIHN9KX07dC5wcm92aWRlKG0sImFmdGVySWZyYW1lTG9hZGVkIixmdW5jdGlvbihwKXt2YXIgcz1hLk5vZGUuX2luc3RhbmNlcyxsPXAuZG9jLGg9bC5feXVpZDtoIGluIHMmJmRlbGV0ZSBzW2hdO3ZhciB1PWEub25lKGwpLHM9dS5vbmUoImJvZHkiKSx3PXAuZGlhbG9nLGw9cy5vbmUoIi5sZnItZm9ybS1jb250ZW50Iik7cy5hZGRDbGFzcygiZGlhbG9nLWlmcmFtZS1wb3B1cCIpO2wmJnMub25lKCIuYnV0dG9uLWhvbGRlci5kaWFsb2ctZm9vdGVyIikmJihzLmFkZENsYXNzKCJkaWFsb2ctd2l0aC1mb290ZXIiKSwKaD1zLm9uZSgiLnBvcnRsZXQtYm9keSBceDNlIC5sZnItcG9ydGxldC1tZXNzYWdlLXN0YWdpbmctYWxlcnQiKSkmJihoLnJlbW92ZSgpLGwucHJlcGVuZChoKSk7cy5hZGRDbGFzcyh3LmlmcmFtZUNvbmZpZy5ib2R5Q3NzQ2xhc3MpO3Aud2luLmZvY3VzKCk7dmFyIHo9ZnVuY3Rpb24oKXtmLmludm9rZShBLCJkZXRhY2giKTt1LnB1cmdlKCEwKX0sQT1bcy5kZWxlZ2F0ZSgic3VibWl0Iix6LCJmb3JtIikscy5kZWxlZ2F0ZSgiY2xpY2siLGZ1bmN0aW9uKEgpe3cuc2V0KCJ2aXNpYmxlIiwhMSxILmN1cnJlbnRUYXJnZXQuaGFzQ2xhc3MoImxmci1oaWRlLWRpYWxvZyIpP2c6bnVsbCk7eigpfSwiLmJ0bi1jYW5jZWwsLmxmci1oaWRlLWRpYWxvZyIpXX0sWyJhdWktYmFzZSJdKTt0LnByb3ZpZGUobSwib3BlbkRETVBvcnRsZXQiLGZ1bmN0aW9uKHAscyl7cD1hLm1lcmdlKHtldmVudE5hbWU6InNlbGVjdFN0cnVjdHVyZSJ9LHApO3ZhciBsO2w9cC5iYXNlUG9ydGxldFVSTD90LlBvcnRsZXRVUkwuY3JlYXRlVVJMKHAuYmFzZVBvcnRsZXRVUkwpOgp0LlBvcnRsZXRVUkwuY3JlYXRlUmVuZGVyVVJMKCk7bC5zZXRFc2NhcGVYTUwoITEpO2wuc2V0RG9Bc0dyb3VwSWQocC5kb0FzR3JvdXBJZHx8dGhlbWVEaXNwbGF5LmdldFNjb3BlR3JvdXBJZCgpKTtsLnNldFBhcmFtZXRlcigiY2xhc3NOYW1lSWQiLHAuY2xhc3NOYW1lSWQpO2wuc2V0UGFyYW1ldGVyKCJjbGFzc1BLIixwLmNsYXNzUEspO2wuc2V0UGFyYW1ldGVyKCJyZXNvdXJjZUNsYXNzTmFtZUlkIixwLnJlc291cmNlQ2xhc3NOYW1lSWQpO2wuc2V0UGFyYW1ldGVyKCJldmVudE5hbWUiLHAuZXZlbnROYW1lKTtsLnNldFBhcmFtZXRlcigiZ3JvdXBJZCIscC5ncm91cElkKTtsLnNldFBhcmFtZXRlcigibW9kZSIscC5tb2RlKTtwLm12Y1BhdGg/bC5zZXRQYXJhbWV0ZXIoIm12Y1BhdGgiLHAubXZjUGF0aCk6bC5zZXRQYXJhbWV0ZXIoIm12Y1BhdGgiLCIvdmlldy5qc3AiKTsibmF2aWdhdGlvblN0YXJ0c09uImluIHAmJmwuc2V0UGFyYW1ldGVyKCJuYXZpZ2F0aW9uU3RhcnRzT24iLApwLm5hdmlnYXRpb25TdGFydHNPbik7bC5zZXRQYXJhbWV0ZXIoInBvcnRsZXRSZXNvdXJjZU5hbWVzcGFjZSIscC5wb3J0bGV0UmVzb3VyY2VOYW1lc3BhY2UpOyJyZWRpcmVjdCJpbiBwJiZsLnNldFBhcmFtZXRlcigicmVkaXJlY3QiLHAucmVkaXJlY3QpOyJyZWZlcmVyUG9ydGxldE5hbWUiaW4gcCYmbC5zZXRQYXJhbWV0ZXIoInJlZmVyZXJQb3J0bGV0TmFtZSIscC5yZWZlcmVyUG9ydGxldE5hbWUpOyJyZWZlcmVyV2ViREFWVG9rZW4iaW4gcCYmbC5zZXRQYXJhbWV0ZXIoInJlZmVyZXJXZWJEQVZUb2tlbiIscC5yZWZlcmVyV2ViREFWVG9rZW4pO2wuc2V0UGFyYW1ldGVyKCJzY29wZVRpdGxlIixwLnRpdGxlKTsic2hvd0FuY2VzdG9yU2NvcGVzImluIHAmJmwuc2V0UGFyYW1ldGVyKCJzaG93QW5jZXN0b3JTY29wZXMiLHAuc2hvd0FuY2VzdG9yU2NvcGVzKTsic2hvd0JhY2tVUkwiaW4gcCYmbC5zZXRQYXJhbWV0ZXIoInNob3dCYWNrVVJMIixwLnNob3dCYWNrVVJMKTsic2hvd0NhY2hlYWJsZUlucHV0ImluCnAmJmwuc2V0UGFyYW1ldGVyKCJzaG93Q2FjaGVhYmxlSW5wdXQiLHAuc2hvd0NhY2hlYWJsZUlucHV0KTsic2hvd0hlYWRlciJpbiBwJiZsLnNldFBhcmFtZXRlcigic2hvd0hlYWRlciIscC5zaG93SGVhZGVyKTsic2hvd01hbmFnZVRlbXBsYXRlcyJpbiBwJiZsLnNldFBhcmFtZXRlcigic2hvd01hbmFnZVRlbXBsYXRlcyIscC5zaG93TWFuYWdlVGVtcGxhdGVzKTtsLnNldFBhcmFtZXRlcigic3RydWN0dXJlQXZhaWxhYmxlRmllbGRzIixwLnN0cnVjdHVyZUF2YWlsYWJsZUZpZWxkcyk7bC5zZXRQYXJhbWV0ZXIoInRlbXBsYXRlSWQiLHAudGVtcGxhdGVJZCk7bC5zZXRQb3J0bGV0SWQodC5Qb3J0bGV0S2V5cy5EWU5BTUlDX0RBVEFfTUFQUElORyk7bC5zZXRXaW5kb3dTdGF0ZSgicG9wX3VwIik7cC51cmk9bC50b1N0cmluZygpO2w9cC5kaWFsb2c7bHx8KGw9e30scC5kaWFsb2c9bCk7dmFyIGg9W3Qub25jZShwLmV2ZW50TmFtZSxzKV0sdT1mdW5jdGlvbih3KXt3Lm5ld1ZhbHx8CihuZXcgYS5FdmVudEhhbmRsZShoKSkuZGV0YWNoKCl9O20ub3BlbldpbmRvdyhwLGZ1bmN0aW9uKHcpe2gucHVzaCh3LmFmdGVyKFsiZGVzdHJveSIsInZpc2libGVDaGFuZ2UiXSx1KSl9KX0sWyJsaWZlcmF5LXBvcnRsZXQtdXJsIl0pO3QucHJvdmlkZShtLCJvcGVuRG9jdW1lbnQiLGZ1bmN0aW9uKHAscyxsKXtpZihhLlVBLmllKXRyeXsobmV3IGEuY29uZmlnLndpbi5BY3RpdmVYT2JqZWN0KCJTaGFyZVBvaW50Lk9wZW5Eb2N1bWVudHMiKSkuRWRpdERvY3VtZW50KHApLGQuaXNGdW5jdGlvbihzKSYmcygpfWNhdGNoKGgpe2QuaXNGdW5jdGlvbihsKSYmbChoKX19LFsiYXVpLWJhc2UiXSk7dC5wcm92aWRlKG0sInBvcnRsZXRUaXRsZUVkaXQiLGZ1bmN0aW9uKHApe3ZhciBzPXAub2JqO2lmKHMpe3ZhciBsPXMub25lKCIucG9ydGxldC10aXRsZS10ZXh0Iik7bCYmIWwuaGFzQ2xhc3MoIm5vdC1lZGl0YWJsZSIpJiYobC5hZGRDbGFzcygicG9ydGxldC10aXRsZS1lZGl0YWJsZSIpLApsLm9uKCJjbGljayIsZnVuY3Rpb24oaCl7dmFyIHU9bS5fZ2V0RWRpdGFibGVJbnN0YW5jZShsKSx3PXUuZ2V0KCJyZW5kZXJlZCIpO3cmJnUuZmlyZSgic3RvcEVkaXRpbmciKTt1LnNldCgibm9kZSIsaC5jdXJyZW50VGFyZ2V0KTt3JiZ1LnN5bmNVSSgpO3UuX3N0YXJ0RWRpdGluZyhoKX0pLGwuc2V0RGF0YSgicG9ydGxldFRpdGxlRWRpdE9wdGlvbnMiLHApKX19LFsiYXVpLWVkaXRhYmxlLWRlcHJlY2F0ZWQiXSk7dC5wcm92aWRlKG0sImVkaXRFbnRpdHkiLGZ1bmN0aW9uKHAscyl7dmFyIGw9bS5nZXRXaW5kb3cocC5pZCksaD1wLmV2ZW50TmFtZXx8cC5pZCx1PVt0Lm9uKGgscyldLHc9ZnVuY3Rpb24oQSl7QS5uZXdWYWx8fChuZXcgYS5FdmVudEhhbmRsZSh1KSkuZGV0YWNoKCl9O2lmKGwpdS5wdXNoKGwuYWZ0ZXIoWyJkZXN0cm95IiwidmlzaWJsZUNoYW5nZSJdLHcpKSxsLnNob3coKTtlbHNle3ZhciB6PWZ1bmN0aW9uKEEpe3ZhciBIPXAuaWQsRj1tLmdldFdpbmRvdyhIKTsKRiYmbS5nZXRQb3J0bGV0SWQoSCk9PT1BLnBvcnRsZXRJZCYmKEYuZGVzdHJveSgpLHQuZGV0YWNoKCJkZXN0cm95UG9ydGxldCIseikpfSxsPW5ldyB0LlBvcnRsZXRVUkwuY3JlYXRlVVJMKHAudXJpLGEubWVyZ2Uoe2V2ZW50TmFtZTpofSxwLnVybFBhcmFtcykpO3AudXJpPWwudG9TdHJpbmcoKTtwLmRpYWxvZ0lmcmFtZT1hLm1lcmdlKHtib2R5Q3NzQ2xhc3M6ImRpYWxvZy13aXRoLWZvb3RlciJ9LHAuZGlhbG9nSWZyYW1lfHx7fSk7bS5vcGVuV2luZG93KHAsZnVuY3Rpb24oQSl7dS5wdXNoKEEuYWZ0ZXIoWyJkZXN0cm95IiwidmlzaWJsZUNoYW5nZSJdLHcpKTt0Lm9uKCJkZXN0cm95UG9ydGxldCIseil9KX19LFsiYXVpLWJhc2UiLCJsaWZlcmF5LXBvcnRsZXQtdXJsIiwibGlmZXJheS11dGlsLXdpbmRvdyJdKTt0LnByb3ZpZGUobSwic2VsZWN0RW50aXR5IixmdW5jdGlvbihwLHMpe3ZhciBsPW0uZ2V0V2luZG93KHAuaWQpLGg9W3Qub24ocC5ldmVudE5hbWV8fHAuaWQsCnMpXSx1PXAuc2VsZWN0ZWREYXRhO3UmJihwLmRpYWxvZy5kZXN0cm95T25IaWRlPSEwKTt2YXIgdz1mdW5jdGlvbihIKXtILm5ld1ZhbHx8KG5ldyBhLkV2ZW50SGFuZGxlKGgpKS5kZXRhY2goKX0sej1mdW5jdGlvbihIKXt1JiZ1Lmxlbmd0aCYmKEg9SC5jdXJyZW50VGFyZ2V0Lm5vZGUuZ2V0KCJjb250ZW50V2luZG93LmRvY3VtZW50IikuYWxsKCIubGZyLXNlYXJjaC1jb250YWluZXItd3JhcHBlciAuc2VsZWN0b3ItYnV0dG9uIiksYS5zb21lKEgsZnVuY3Rpb24oRixCKXt2YXIgST1GLmF0dHIoImRhdGEtZW50aXR5aWQiKXx8Ri5hdHRyKCJkYXRhLWVudGl0eW5hbWUiKSxJPXUuaW5kZXhPZihJKTstMTxJJiYoRi5hdHRyKCJkYXRhLXByZXZlbnQtc2VsZWN0aW9uIiwhMCksRi5hdHRyKCJkaXNhYmxlZCIsITApLHUuc3BsaWNlKEksMSkpO3JldHVybiF1Lmxlbmd0aH0pKX07aWYobCloLnB1c2gobC5hZnRlcihbImRlc3Ryb3kiLCJ2aXNpYmxlQ2hhbmdlIl0sdykpLGwuc2hvdygpOwplbHNle3ZhciBBPWZ1bmN0aW9uKEgpe3ZhciBGPXAuaWQsQj1tLmdldFdpbmRvdyhGKTtCJiZtLmdldFBvcnRsZXRJZChGKT09PUgucG9ydGxldElkJiYoQi5kZXN0cm95KCksdC5kZXRhY2goImRlc3Ryb3lQb3J0bGV0IixBKSl9O20ub3BlbldpbmRvdyhwLGZ1bmN0aW9uKEgpe2gucHVzaChILmFmdGVyKFsiZGVzdHJveSIsInZpc2libGVDaGFuZ2UiXSx3KSxILmlmcmFtZS5hZnRlcihbImxvYWQiXSx6KSk7dC5vbigiZGVzdHJveVBvcnRsZXQiLEEpfSl9fSxbImF1aS1iYXNlIiwibGlmZXJheS11dGlsLXdpbmRvdyJdKTt0LnByb3ZpZGUobSwidG9nZ2xlQ29udHJvbHMiLGZ1bmN0aW9uKHApe3ZhciBzPWEuZ2V0Qm9keSgpO2lmKHA9KHB8fHMpLm9uZSgiLnRvZ2dsZS1jb250cm9scyIpKXt2YXIgbD0idmlzaWJsZSI9PT10Ll9lZGl0Q29udHJvbHNTdGF0ZSxoPWNbbF0sdT1wLm9uZSgiLmxleGljb24taWNvbiIpO3UmJihoLmljb249dSk7cy5hZGRDbGFzcyhoLmNzc0NsYXNzKTsKdC5maXJlKCJ0b2dnbGVDb250cm9scyIse2VuYWJsZWQ6bH0pO3Aub24oInRhcCIsZnVuY3Rpb24odyl7bD0hbDt3PWg7aD1jW2xdO3MudG9nZ2xlQ2xhc3Mody5jc3NDbGFzcyk7cy50b2dnbGVDbGFzcyhoLmNzc0NsYXNzKTt3PWguaWNvbkNzc0NsYXNzO3ZhciB6PWguc3RhdGU7aWYodSl7dmFyIEE9aC5pY29uO0F8fChBPW0uZ2V0TGV4aWNvbkljb24odyksQT1hLm9uZShBKSxoLmljb249QSk7dS5yZXBsYWNlKEEpO3U9QX10Ll9lZGl0Q29udHJvbHNTdGF0ZT16O3QuU3RvcmUoImNvbS5saWZlcmF5LmZyb250ZW5kLmpzLndlYl90b2dnbGVDb250cm9scyIseik7dC5maXJlKCJ0b2dnbGVDb250cm9scyIse2VuYWJsZWQ6bCxzcmM6InVpIn0pfSl9fSxbImV2ZW50LXRhcCIsImxpZmVyYXktc3RvcmUiXSk7dC5wcm92aWRlKHdpbmRvdywic3VibWl0Rm9ybSIsZnVuY3Rpb24ocCxzLGwsaCl7bS5fc3VibWl0TG9ja2VkfHwocC5qcXVlcnkmJihwPXBbMF0pLHQuZmlyZSgic3VibWl0Rm9ybSIsCnthY3Rpb246cyxmb3JtOmEub25lKHApLHNpbmdsZVN1Ym1pdDpsLHZhbGlkYXRlOiExIT09aH0pKX0sWyJhdWktYmFzZSIsImF1aS1mb3JtLXZhbGlkYXRvciIsImF1aS11cmwiLCJsaWZlcmF5LWZvcm0iXSk7dC5wdWJsaXNoKCJzdWJtaXRGb3JtIix7ZGVmYXVsdEZuOm0uX2RlZmF1bHRTdWJtaXRGb3JtRm59KTt0LnByb3ZpZGUobSwiZGVmYXVsdFByZXZpZXdBcnRpY2xlRm4iLGZ1bmN0aW9uKHApe3ZhciBzPXRoaXMuX3VybFByZXZpZXc7cz8ocy5zZXQoInRpdGxlIixtLmVzY2FwZUhUTUwocC50aXRsZSkpLHMuc2V0KCJ1cmwiLHAudXJpKSk6dGhpcy5fdXJsUHJldmlldz1zPW5ldyB0LlVybFByZXZpZXcoe3RpdGxlOm0uZXNjYXBlSFRNTChwLnRpdGxlKSx1cmw6cC51cml9KTtzLm9wZW4oKX0sWyJsaWZlcmF5LXVybC1wcmV2aWV3Il0pO3QucHVibGlzaCgicHJldmlld0FydGljbGUiLHtkZWZhdWx0Rm46bS5fZGVmYXVsdFByZXZpZXdBcnRpY2xlRm59KTt0LnByb3ZpZGUobSwKIl9vcGVuV2luZG93UHJvdmlkZXIiLGZ1bmN0aW9uKHAscyl7dmFyIGw9ay5nZXRXaW5kb3cocCk7ZC5pc0Z1bmN0aW9uKHMpJiZzKGwpfSxbImxpZmVyYXktdXRpbC13aW5kb3ciXSk7dC5hZnRlcigiY2xvc2VXaW5kb3ciLGZ1bmN0aW9uKHApe3ZhciBzPXAuaWQ7aWYoKHM9dC5VdGlsLmdldFRvcCgpLkxpZmVyYXkuVXRpbC5XaW5kb3cuZ2V0QnlJZChzKSkmJnMuaWZyYW1lKXt2YXIgbD1zLmlmcmFtZS5ub2RlLmdldCgiY29udGVudFdpbmRvdyIpLmdldERPTSgpLkxpZmVyYXkuVXRpbC5nZXRPcGVuZXIoKSxoPXAucmVkaXJlY3Q7aWYoaClsLmxvY2F0aW9uPWg7ZWxzZSBpZigoaD1wLnJlZnJlc2gpJiZsKXt2YXIgdTtwLnBvcnRsZXRBamF4YWJsZXx8KHU9e3BvcnRsZXRBamF4YWJsZTohMX0pO2wuTGlmZXJheS5Qb3J0bGV0LnJlZnJlc2goIiNwX3BfaWRfIitoKyJfIix1KX1zLmhpZGUoKX19KTttLldpbmRvdz1rO3QuVXRpbD1tO3QuQlJFQUtQT0lOVFM9e1BIT05FOjc2OCxUQUJMRVQ6OTgwfTsKdC5TVEFUVVNfQ09ERT17QkFEX1JFUVVFU1Q6NDAwLElOVEVSTkFMX1NFUlZFUl9FUlJPUjo1MDAsT0s6MjAwLFNDX0RVUExJQ0FURV9GSUxFX0VYQ0VQVElPTjo0OTAsU0NfRklMRV9BTlRJVklSVVNfRVhDRVBUSU9OOjQ5NCxTQ19GSUxFX0VYVEVOU0lPTl9FWENFUFRJT046NDkxLFNDX0ZJTEVfTkFNRV9FWENFUFRJT046NDkyLFNDX0ZJTEVfU0laRV9FWENFUFRJT046NDkzLFNDX1VQTE9BRF9SRVFVRVNUX1NJWkVfRVhDRVBUSU9OOjQ5NX07dC56SW5kZXg9e0FMRVJUOjQzMCxET0NLOjEwLERPQ0tfUEFSRU5UOjIwLERSQUdfSVRFTTo0NjAsRFJPUF9BUkVBOjQ0MCxEUk9QX1BPU0lUSU9OOjQ1MCxNRU5VOjVFMyxPVkVSTEFZOjFFMyxQT1BPVkVSOjE2MDAsVE9PTFRJUDoxRTQsV0lORE9XOjEyMDB9fSkoQVVJKCksQVVJLiQsQVVJLl8sTGlmZXJheSk7CihmdW5jdGlvbihhLEUpe3ZhciBxPUUubmFtZXNwYWNlKCJQb3J0YWwuVGFicyIpLHQ9RS5uYW1lc3BhY2UoIlBvcnRhbC5Ub29sVGlwIiksZj1FLlV0aWwudG9DaGFyQ29kZTtFLlBvcnRhbC5UYWJzLl9zaG93PWZ1bmN0aW9uKGQpe3ZhciBjPWQubmFtZXMsYj1kLm5hbWVzcGFjZSxnPWQuc2VsZWN0ZWRJbmRleCxlPWQudGFiSXRlbSxrPWQudGFiU2VjdGlvbjtlJiZlLnJhZGlvQ2xhc3MoImFjdGl2ZSIpO2smJmsuc2hvdygpOyhkPWEub25lKCIjIitkLm5hbWVzcGFjZSsiZHJvcGRvd25UaXRsZSIpKSYmZC5odG1sKGUub25lKCJhIikudGV4dCgpKTtjLnNwbGljZShnLDEpO2ZvcihlPTA7ZTxjLmxlbmd0aDtlKyspKGc9YS5vbmUoIiMiK2IrZihjW2VdKSsiVGFic1NlY3Rpb24iKSkmJmcuaGlkZSgpfTtFLnByb3ZpZGUocSwic2hvdyIsZnVuY3Rpb24oZCxjLGIsZyl7dmFyIGU9ZCtmKGIpLGs9YS5vbmUoIiMiK2UrIlRhYnNJZCIpLGU9YS5vbmUoIiMiK2UrIlRhYnNTZWN0aW9uIiksCms9e2lkOmIsbmFtZXM6YyxuYW1lc3BhY2U6ZCxzZWxlY3RlZEluZGV4OmMuaW5kZXhPZihiKSx0YWJJdGVtOmssdGFiU2VjdGlvbjplfTtnJiZhLkxhbmcuaXNGdW5jdGlvbihnKSYmZy5jYWxsKHRoaXMsZCxjLGIsayk7RS5maXJlKCJzaG93VGFiIixrKX0sWyJhdWktYmFzZSJdKTtFLnB1Ymxpc2goInNob3dUYWIiLHtkZWZhdWx0Rm46RS5Qb3J0YWwuVGFicy5fc2hvd30pO3QuX2dldFRleHQ9ZnVuY3Rpb24oZCl7dmFyIGM9YS5vbmUoIiMiK2QpO2Q9IiI7YyYmKGM9Yy5uZXh0KCIudGFnbGliLXRleHQiKSkmJihkPWMuaHRtbCgpKTtyZXR1cm4gZH07dC5oaWRlPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5fY2FjaGVkO2QmJmQuaGlkZSgpfTtFLnByb3ZpZGUodCwic2hvdyIsZnVuY3Rpb24oZCxjLGIpe3ZhciBnPXRoaXMuX2NhY2hlZCxlPXRoaXMuX2hpZGVUb29sdGlwVGFzaztnP2cuc2V0QXR0cnMoYik6KGc9YS5tZXJnZSh7Y3NzQ2xhc3M6InRvb2x0aXAtaGVscCIsaHRtbDohMCwKb3BhY2l0eToxLHN0aWNrRHVyYXRpb246MTAwLHZpc2libGU6ITEsekluZGV4OkUuekluZGV4LlRPT0xUSVB9LGIpLGc9KG5ldyBhLlRvb2x0aXAoZykpLnJlbmRlcigpLGcuYWZ0ZXIoInZpc2libGVDaGFuZ2UiLGEuYmluZCgiX3N5bmNVSVBvc0FsaWduIixnKSksdGhpcy5faGlkZVRvb2x0aXBUYXNrPWU9YS5kZWJvdW5jZSgiX29uQm91bmRpbmdCb3hNb3VzZWxlYXZlIixnLmdldCgic3RpY2tEdXJhdGlvbiIpLGcpLHRoaXMuX2NhY2hlZD1nKTtlLmNhbmNlbCgpO2QuanF1ZXJ5JiYoZD1kWzBdKTtkPWEub25lKGQpO251bGw9PWMmJihjPXRoaXMuX2dldFRleHQoZC5ndWlkKCkpKTtnLnNldCgiYm9keUNvbnRlbnQiLGMpO2cuc2V0KCJ0cmlnZ2VyIixkKTtjPWcuZ2V0KCJib3VuZGluZ0JveCIpO2MuZGV0YWNoKCJob3ZlciIpO2QuZGV0YWNoKCJob3ZlciIpO2Qub24oImhvdmVyIixhLmJpbmQoIl9vbkJvdW5kaW5nQm94TW91c2VlbnRlciIsZyksZSk7Yy5vbigiaG92ZXIiLGZ1bmN0aW9uKGspe2UuY2FuY2VsKCk7CmQub25jZSgibW91c2VlbnRlciIsZS5jYW5jZWwpfSxlKTtnLnNob3coKX0sWyJhdWktdG9vbHRpcC1iYXNlIl0pfSkoQVVJKCksTGlmZXJheSk7CihmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZyx0PUUuVXRpbCxmPXtsaXN0OltdLHJlYWR5Q291bnRlcjowLGlzU3RhdGljOmZ1bmN0aW9uKGQpe3JldHVybiB0LmdldFBvcnRsZXRJZChkLmlkfHxkKWluIHRoaXMuX3N0YXRpY1BvcnRsZXRzfSxyZWZyZXNoTGF5b3V0OmZ1bmN0aW9uKGQpe30scmVnaXN0ZXI6ZnVuY3Rpb24oZCl7MD50aGlzLmxpc3QuaW5kZXhPZihkKSYmdGhpcy5saXN0LnB1c2goZCl9LF9kZWZDbG9zZUZuOmZ1bmN0aW9uKGQpe2QucG9ydGxldC5yZW1vdmUoITApO2QubmVzdGVkUG9ydGxldHx8YS5pby5yZXF1ZXN0KHRoZW1lRGlzcGxheS5nZXRQYXRoTWFpbigpKyIvcG9ydGFsL3VwZGF0ZV9sYXlvdXQiLHthZnRlcjp7c3VjY2VzczpmdW5jdGlvbigpe0UuZmlyZSgidXBkYXRlZExheW91dCIpfX0sZGF0YTp7Y21kOiJkZWxldGUiLGRvQXNVc2VySWQ6ZC5kb0FzVXNlcklkLHBfYXV0aDpFLmF1dGhUb2tlbixwX2xfaWQ6ZC5wbGlkLHBfcF9pZDpkLnBvcnRsZXRJZCwKcF92X2xfc19nX2lkOnRoZW1lRGlzcGxheS5nZXRTaXRlR3JvdXBJZCgpfX0pfSxfbG9hZE1hcmt1cEhlYWRFbGVtZW50czpmdW5jdGlvbihkLGMpe3ZhciBiPWQubWFya3VwSGVhZEVsZW1lbnRzO2lmKGImJmIubGVuZ3RoKXthLm9uZSgiaGVhZCIpLmFwcGVuZChiKTt2YXIgZz1hLk5vZGUuY3JlYXRlKCJceDNjZGl2IC9ceDNlIik7Zy5wbHVnKGEuUGx1Z2luLlBhcnNlQ29udGVudCk7Zy5zZXRDb250ZW50KGIpfX0sX2xvYWRQb3J0bGV0RmlsZXM6ZnVuY3Rpb24oZCxjKXt2YXIgYj1kLmZvb3RlckNzc1BhdGhzfHxbXSxnPWQuaGVhZGVyQ3NzUGF0aHN8fFtdLGU9ZC5oZWFkZXJKYXZhU2NyaXB0UGF0aHN8fFtdLGU9ZS5jb25jYXQoZC5mb290ZXJKYXZhU2NyaXB0UGF0aHN8fFtdKSxrPWEuZ2V0Qm9keSgpLG09YS5vbmUoImhlYWQiKTtnLmxlbmd0aCYmYS5HZXQuY3NzKGcse2luc2VydEJlZm9yZTptLmdldCgiZmlyc3RDaGlsZCIpLmdldERPTSgpfSk7Zz1rLmdldCgibGFzdENoaWxkIikuZ2V0RE9NKCk7CmIubGVuZ3RoJiZhLkdldC5jc3MoYix7aW5zZXJ0QmVmb3JlOmd9KTt2YXIgcD1kLnBvcnRsZXRIVE1MO2UubGVuZ3RoP2EuR2V0LnNjcmlwdChlLHtvbkVuZDpmdW5jdGlvbihzKXtjKHApfX0pOmMocCl9LF9tZXJnZU9wdGlvbnM6ZnVuY3Rpb24oZCxjKXtjPWN8fHt9O2MuZG9Bc1VzZXJJZD1jLmRvQXNVc2VySWR8fHRoZW1lRGlzcGxheS5nZXREb0FzVXNlcklkRW5jb2RlZCgpO2MucGxpZD1jLnBsaWR8fHRoZW1lRGlzcGxheS5nZXRQbGlkKCk7Yy5wb3J0bGV0PWQ7Yy5wb3J0bGV0SWQ9ZC5wb3J0bGV0SWQ7cmV0dXJuIGN9LF9zdGF0aWNQb3J0bGV0czp7fX07RS5wcm92aWRlKGYsImFkZCIsZnVuY3Rpb24oZCl7dmFyIGM9dGhpcztFLmZpcmUoImluaXRMYXlvdXQiKTt2YXIgYj1kLmRvQXNVc2VySWR8fHRoZW1lRGlzcGxheS5nZXREb0FzVXNlcklkRW5jb2RlZCgpLGc9ZC5wbGlkfHx0aGVtZURpc3BsYXkuZ2V0UGxpZCgpLGU9ZC5wb3J0bGV0RGF0YSxrPWQucG9ydGxldElkLAptPWQucG9ydGxldEl0ZW1JZCxwPWQucGxhY2VIb2xkZXIscD1wP2Eub25lKHApOmEuTm9kZS5jcmVhdGUoJ1x4M2NkaXYgY2xhc3NceDNkImxvYWRpbmctYW5pbWF0aW9uIiAvXHgzZScpLHM9ZC5iZWZvcmVQb3J0bGV0TG9hZGVkLGw9ZC5vbkNvbXBsZXRlLGg9ZnVuY3Rpb24oQixJKXtsJiZsKEIsSSk7Yy5saXN0LnB1c2goQi5wb3J0bGV0SWQpO0ImJkIuYXR0cigiZGF0YS1xYS1pZCIsImFwcC1sb2FkZWQiKTtFLmZpcmUoImFkZFBvcnRsZXQiLHtwb3J0bGV0OkJ9KX0sdT1udWxsO0UuTGF5b3V0JiZFLkxheW91dC5JTklUSUFMSVpFRCYmKHU9RS5MYXlvdXQuZ2V0QWN0aXZlRHJvcENvbnRhaW5lcigpKTtpZih1KXt2YXIgdz10LmdldENvbHVtbklkKHUuYXR0cigiaWQiKSksej0wO2lmKGQucGxhY2VIb2xkZXIpe3ZhciBBPXAuZ2V0KCJwYXJlbnROb2RlIik7aWYoIUEpcmV0dXJuO3AuYWRkQ2xhc3MoInBvcnRsZXQtYm91bmRhcnkiKTt2YXIgSD1BLmFsbCgiLnBvcnRsZXQtYm91bmRhcnkiKSwKdz1BLmFsbCgiLnBvcnRsZXQtbmVzdGVkLXBvcnRsZXRzIiksej1ILmluZGV4T2YocCksRj0wO3cuc29tZShmdW5jdGlvbihCKXt2YXIgST1ILmluZGV4T2YoQik7aWYoLTEhPT1JJiZJPHopRis9Qi5hbGwoIi5wb3J0bGV0LWJvdW5kYXJ5Iikuc2l6ZSgpO2Vsc2UgaWYoST49eilyZXR1cm4hMH0pO3otPUY7dz10LmdldENvbHVtbklkKEEuYXR0cigiaWQiKSl9QT10aGVtZURpc3BsYXkuZ2V0UGF0aE1haW4oKSsiL3BvcnRhbC91cGRhdGVfbGF5b3V0IjtiPXtjbWQ6ImFkZCIsZGF0YVR5cGU6IkpTT04iLGRvQXNVc2VySWQ6YixwX2F1dGg6RS5hdXRoVG9rZW4scF9sX2lkOmcscF9wX2NvbF9pZDp3LHBfcF9jb2xfcG9zOnoscF9wX2lfaWQ6bSxwX3BfaWQ6ayxwX3BfaXNvbGF0ZWQ6ITAscF92X2xfc19nX2lkOnRoZW1lRGlzcGxheS5nZXRTaXRlR3JvdXBJZCgpLHBvcnRsZXREYXRhOmV9O2U9KGc9dS5vbmUoIi5wb3J0bGV0LWJvdW5kYXJ5IikpJiZnLmlzU3RhdGljO2QucGxhY2VIb2xkZXJ8fApkLnBsaWR8fChlP2cucGxhY2VBZnRlcihwKTp1LnByZXBlbmQocCkpO3RoZW1lRGlzcGxheS5pc0ZyZWVmb3JtTGF5b3V0KCkmJnUucHJlcGVuZChwKTtiLmN1cnJlbnRVUkw9RS5jdXJyZW50VVJMO2MuYWRkSFRNTCh7YmVmb3JlUG9ydGxldExvYWRlZDpzLGRhdGE6YixvbkNvbXBsZXRlOmgscGxhY2VIb2xkZXI6cCx1cmw6QX0pfX0sWyJhdWktYmFzZSJdKTtFLnByb3ZpZGUoZiwiYWRkSFRNTCIsZnVuY3Rpb24oZCl7dmFyIGM9dGhpcyxiPW51bGwsZz1kLmJlZm9yZVBvcnRsZXRMb2FkZWQsZT1kLmRhdGEsaz0iSFRNTCIsbT1kLm9uQ29tcGxldGUscD1kLnBsYWNlSG9sZGVyO2Q9ZC51cmw7ZSYmcS5pc1N0cmluZyhlLmRhdGFUeXBlKSYmKGs9ZS5kYXRhVHlwZSk7dmFyIGs9ay50b1VwcGVyQ2FzZSgpLHM9ZnVuY3Rpb24obCl7dmFyIGg9cC5nZXQoInBhcmVudE5vZGUiKSx1PWEuTm9kZS5jcmVhdGUoIlx4M2NkaXZceDNlXHgzYy9kaXZceDNlIik7dS5wbHVnKGEuUGx1Z2luLlBhcnNlQ29udGVudCk7CnUuc2V0Q29udGVudChsKTt2YXIgdT11Lm9uZSgiXHgzZSAqIiksdzt1Pyh3PXUuYXR0cigiaWQiKSx3PXQuZ2V0UG9ydGxldElkKHcpLHUucG9ydGxldElkPXcscC5oaWRlKCkscC5wbGFjZUFmdGVyKHUpLHAucmVtb3ZlKCksYy5yZWZyZXNoTGF5b3V0KHUpLHdpbmRvdy5sb2NhdGlvbi5oYXNoJiYod2luZG93LmxvY2F0aW9uLmhhc2g9InBfIit3KSxiPXUsKHU9RS5MYXlvdXQpJiZ1LklOSVRJQUxJWkVEJiYodS51cGRhdGVDdXJyZW50UG9ydGxldEluZm8oYiksaCYmdS5zeW5jRW1wdHlDb2x1bW5DbGFzc1VJKGgpLHUuc3luY0RyYWdnYWJsZUNsYXNzVUkoKSx1LnVwZGF0ZVBvcnRsZXREcm9wWm9uZXMoYikpLG0mJm0oYix3KSk6cC5yZW1vdmUoKTtyZXR1cm4gd307ZyYmZyhwKTthLmlvLnJlcXVlc3QoZCx7YWZ0ZXI6e3N1Y2Nlc3M6ZnVuY3Rpb24oKXtlJiZlLnByZXZlbnROb3RpZmljYXRpb258fEUuZmlyZSgidXBkYXRlZExheW91dCIpfX0sZGF0YTplLGRhdGFUeXBlOmssb246e2ZhaWx1cmU6ZnVuY3Rpb24obCwKaCx1KXtpZihsPXUuc3RhdHVzVGV4dCloPUUuTGFuZ3VhZ2UuZ2V0KCJ0aGVyZS13YXMtYW4tdW5leHBlY3RlZC1lcnJvci4tcGxlYXNlLXJlZnJlc2gtdGhlLWN1cnJlbnQtcGFnZSIpLCJ0aW1lb3V0Ij09bCYmKGg9RS5MYW5ndWFnZS5nZXQoInJlcXVlc3QtdGltZW91dCIpKSxwLmhpZGUoKSxwLnBsYWNlQWZ0ZXIoJ1x4M2NkaXYgY2xhc3NceDNkImFsZXJ0IGFsZXJ0LWRhbmdlciJceDNlJytoKyJceDNjL2Rpdlx4M2UiKX0sc3VjY2VzczpmdW5jdGlvbihsLGgsdSl7bD10aGlzLmdldCgicmVzcG9uc2VEYXRhIik7IkhUTUwiPT1rP3MobCk6bC5yZWZyZXNoP3MobC5wb3J0bGV0SFRNTCk6KGYuX2xvYWRNYXJrdXBIZWFkRWxlbWVudHMobCksZi5fbG9hZFBvcnRsZXRGaWxlcyhsLHMpKX19fSl9LFsiYXVpLWlvLXJlcXVlc3QiLCJhdWktcGFyc2UtY29udGVudCJdKTtFLnByb3ZpZGUoZiwiY2xvc2UiLGZ1bmN0aW9uKGQsYyxiKXsoZD1hLm9uZShkKSkmJihjfHxjb25maXJtKEUuTGFuZ3VhZ2UuZ2V0KCJhcmUteW91LXN1cmUteW91LXdhbnQtdG8tcmVtb3ZlLXRoaXMtY29tcG9uZW50IikpKT8KKGM9dGhpcy5saXN0LmluZGV4T2YoZC5wb3J0bGV0SWQpLDA8PWMmJnRoaXMubGlzdC5zcGxpY2UoYywxKSxiPWYuX21lcmdlT3B0aW9ucyhkLGIpLEUuZmlyZSgiZGVzdHJveVBvcnRsZXQiLGIpLEUuZmlyZSgiY2xvc2VQb3J0bGV0IixiKSk6YS5jb25maWcud2luLmZvY3VzKCl9LFsiYXVpLWlvLXJlcXVlc3QiXSk7RS5wcm92aWRlKGYsImRlc3Ryb3kiLGZ1bmN0aW9uKGQsYyl7KGQ9YS5vbmUoZCkpJiZFLmZpcmUoImRlc3Ryb3lQb3J0bGV0IixmLl9tZXJnZU9wdGlvbnMoZCxjKSl9LFsiYXVpLW5vZGUtYmFzZSJdKTtFLnByb3ZpZGUoZiwibWluaW1pemUiLGZ1bmN0aW9uKGQsYyxiKXtiPWJ8fHt9O3ZhciBnPWIuZG9Bc1VzZXJJZHx8dGhlbWVEaXNwbGF5LmdldERvQXNVc2VySWRFbmNvZGVkKCksZT1iLnBsaWR8fHRoZW1lRGlzcGxheS5nZXRQbGlkKCk7aWYoZD1hLm9uZShkKSlpZihiPWQub25lKCIucG9ydGxldC1jb250ZW50LWNvbnRhaW5lciIpKXt2YXIgaz1iLmhhc0NsYXNzKCJoaWRlIik7CmIudG9nZ2xlKCk7ZC50b2dnbGVDbGFzcygicG9ydGxldC1taW5pbWl6ZWQiKTtpZihjPWEub25lKGMpKXtiPWs/RS5MYW5ndWFnZS5nZXQoIm1pbmltaXplIik6RS5MYW5ndWFnZS5nZXQoInJlc3RvcmUiKTtjLmF0dHIoImFsdCIsYik7Yy5hdHRyKCJ0aXRsZSIsYik7dmFyIG09Yy5vbmUoIi50YWdsaWItdGV4dC1pY29uIik7bSYmbS5odG1sKGIpO2lmKGM9Yy5vbmUoImkiKSljLnJlbW92ZUNsYXNzKCJpY29uLW1pbnVzIGljb24tcmVzaXplLXZlcnRpY2FsIiksaz9jLmFkZENsYXNzKCJpY29uLW1pbnVzIik6Yy5hZGRDbGFzcygiaWNvbi1yZXNpemUtdmVydGljYWwiKX1hLmlvLnJlcXVlc3QodGhlbWVEaXNwbGF5LmdldFBhdGhNYWluKCkrIi9wb3J0YWwvdXBkYXRlX2xheW91dCIse2FmdGVyOntzdWNjZXNzOmZ1bmN0aW9uKCl7aWYoayl7dmFyIHA9e2RvQXNVc2VySWQ6ZyxwX2xfaWQ6ZSxwX3BfYm91bmRhcnk6ITEscF9wX2lkOmQucG9ydGxldElkLHBfcF9pc29sYXRlZDohMH07CmQucGx1ZyhhLlBsdWdpbi5QYXJzZUNvbnRlbnQpO2QubG9hZCh0aGVtZURpc3BsYXkuZ2V0UGF0aE1haW4oKSsiL3BvcnRhbC9yZW5kZXJfcG9ydGxldD8iK2EuUXVlcnlTdHJpbmcuc3RyaW5naWZ5KHApKX19fSxkYXRhOntjbWQ6Im1pbmltaXplIixkb0FzVXNlcklkOmcscF9hdXRoOkUuYXV0aFRva2VuLHBfbF9pZDplLHBfcF9pZDpkLnBvcnRsZXRJZCxwX3BfcmVzdG9yZTprLHBfdl9sX3NfZ19pZDp0aGVtZURpc3BsYXkuZ2V0U2l0ZUdyb3VwSWQoKX19KX19LFsiYXVpLWlvIiwiYXVpLXBhcnNlLWNvbnRlbnQiLCJub2RlLWxvYWQiLCJxdWVyeXN0cmluZy1zdHJpbmdpZnkiXSk7RS5wcm92aWRlKGYsIm9uTG9hZCIsZnVuY3Rpb24oZCl7dmFyIGM9ZC5jYW5FZGl0VGl0bGUsYj1kLmNvbHVtblBvcyxnPSJubyI9PWQuaXNTdGF0aWM/bnVsbDpkLmlzU3RhdGljLGU9ZC5uYW1lc3BhY2VkSWQsaz1kLnBvcnRsZXRJZCxtPWQucmVmcmVzaFVSTDtkPWQucmVmcmVzaFVSTERhdGE7ZyYmCnRoaXMucmVnaXN0ZXJTdGF0aWMoayk7dmFyIHA9YS5vbmUoIiMiK2UpO2lmKHAmJiFwLnBvcnRsZXRQcm9jZXNzZWQmJihwLnBvcnRsZXRQcm9jZXNzZWQ9ITAscC5wb3J0bGV0SWQ9ayxwLmNvbHVtblBvcz1iLHAuaXNTdGF0aWM9ZyxwLnJlZnJlc2hVUkw9bSxwLnJlZnJlc2hVUkxEYXRhPWQsYykpe2M9WyJmb2N1cyIsImdlc3R1cmVtb3Zlc3RhcnQiXTthLlVBLnRvdWNofHxjLnB1c2goIm1vdXNlbW92ZSIpO3ZhciBzPXAub24oYyxmdW5jdGlvbihsKXt0LnBvcnRsZXRUaXRsZUVkaXQoe2RvQXNVc2VySWQ6dGhlbWVEaXNwbGF5LmdldERvQXNVc2VySWRFbmNvZGVkKCksb2JqOnAscGxpZDp0aGVtZURpc3BsYXkuZ2V0UGxpZCgpLHBvcnRsZXRJZDprfSk7cy5kZXRhY2goKX0pfUUuZmlyZSgicG9ydGxldFJlYWR5Iix7cG9ydGxldDpwLHBvcnRsZXRJZDprfSk7dGhpcy5yZWFkeUNvdW50ZXIrKzt0aGlzLnJlYWR5Q291bnRlcj09PXRoaXMubGlzdC5sZW5ndGgmJkUuZmlyZSgiYWxsUG9ydGxldHNSZWFkeSIsCntwb3J0bGV0SWQ6a30pfSxbImF1aS1iYXNlIiwiYXVpLXRpbWVyIiwiZXZlbnQtbW92ZSJdKTtFLnByb3ZpZGUoZiwicmVmcmVzaCIsZnVuY3Rpb24oZCxjKXtpZihkPWEub25lKGQpKXtjPWN8fGQucmVmcmVzaFVSTERhdGF8fHt9O2MuaGFzT3duUHJvcGVydHkoInBvcnRsZXRBamF4YWJsZSIpfHwoYy5wb3J0bGV0QWpheGFibGU9ITApO3ZhciBiPWQuYXR0cigicG9ydGxldCIpLGc9ZC5yZWZyZXNoVVJMLGI9YS5Ob2RlLmNyZWF0ZSgnXHgzY2RpdiBjbGFzc1x4M2QibG9hZGluZy1hbmltYXRpb24iIGlkXHgzZCJwX3BfaWQnK2IrJyIgL1x4M2UnKTtpZihjLnBvcnRsZXRBamF4YWJsZSYmZyl7ZC5wbGFjZUJlZm9yZShiKTtkLnJlbW92ZSghMCk7dmFyIGU9e30saz1nLnNwbGl0KCI/Iik7MTxrLmxlbmd0aCYmKGU9YS5RdWVyeVN0cmluZy5wYXJzZShrWzFdKSxkZWxldGUgZS5kYXRhVHlwZSxnPWtbMF0pO3RoaXMuYWRkSFRNTCh7ZGF0YTphLm1peChlLGMsITApLG9uQ29tcGxldGU6ZnVuY3Rpb24obSwKcCl7bS5yZWZyZXNoVVJMPWc7bSYmbS5hdHRyKCJkYXRhLXFhLWlkIiwiYXBwLXJlZnJlc2hlZCIpO0UuZmlyZShtLnBvcnRsZXRJZCsiOnBvcnRsZXRSZWZyZXNoZWQiLHtwb3J0bGV0Om0scG9ydGxldElkOnB9KX0scGxhY2VIb2xkZXI6Yix1cmw6Z30pfWVsc2UgZC5nZXREYXRhKCJwZW5kaW5nUmVmcmVzaCIpfHwoZC5zZXREYXRhKCJwZW5kaW5nUmVmcmVzaCIsITApLGI9cS5zdWIoJ1x4M2NkaXYgY2xhc3NceDNkImFsZXJ0IGFsZXJ0LWluZm8iXHgzZXswfVx4M2MvZGl2XHgzZScsW0UuTGFuZ3VhZ2UuZ2V0KCJ0aGlzLWNoYW5nZS13aWxsLW9ubHktYmUtc2hvd24tYWZ0ZXIteW91LXJlZnJlc2gtdGhlLXBhZ2UiKV0pLGU9ZC5vbmUoIi5wb3J0bGV0LWJvZHkiKSxlLnBsYWNlQmVmb3JlKGIpLGUuaGlkZSgpKX19LFsiYXVpLWJhc2UiLCJxdWVyeXN0cmluZy1wYXJzZSJdKTtFLnByb3ZpZGUoZiwicmVnaXN0ZXJTdGF0aWMiLGZ1bmN0aW9uKGQpe3ZhciBjPWEuTm9kZTtjJiZkIGluc3RhbmNlb2YKYz9kPWQuYXR0cigiaWQiKTpkLmlkJiYoZD1kLmlkKTtkPXQuZ2V0UG9ydGxldElkKGQpO3RoaXMuX3N0YXRpY1BvcnRsZXRzW2RdPSEwfSxbImF1aS1iYXNlIl0pO0UucHJvdmlkZShmLCJvcGVuV2luZG93IixmdW5jdGlvbihkKXt2YXIgYz1kLmJvZHlDc3NDbGFzcyxiPWQuZGVzdHJveU9uSGlkZSxnPWQubmFtZXNwYWNlLGU9ZC5wb3J0bGV0LGs9ZC5zdWJUaXRsZSxtPWQudGl0bGU7ZD1kLnVyaTtpZigoZT1hLm9uZShlKSkmJmQpe3ZhciBwPWUub25lKCIucG9ydGxldC10aXRsZSIpfHxlLm9uZSgiLnBvcnRsZXQtdGl0bGUtZGVmYXVsdCIpO3AmJihtPWUub25lKCIjY3BQb3J0bGV0VGl0bGUiKT9wLm9uZSgiLnBvcnRsZXQtdGl0bGUtdGV4dCIpLm91dGVySFRNTCgpKyIgLSAiK206cC50ZXh0KCkrIiAtICIrbSk7ayYmKG0rPSdceDNjZGl2IGNsYXNzXHgzZCJwb3J0bGV0LWNvbmZpZ3VyYXRpb24tc3VidGl0bGUgc21hbGwiXHgzZVx4M2NzcGFuIGNsYXNzXHgzZCJwb3J0bGV0LWNvbmZpZ3VyYXRpb24tc3VidGl0bGUtdGV4dCJceDNlJysKaysiXHgzYy9zcGFuXHgzZVx4M2MvZGl2XHgzZSIpO0UuVXRpbC5vcGVuV2luZG93KHtjYWNoZTohMSxkaWFsb2c6e2Rlc3Ryb3lPbkhpZGU6Yn0sZGlhbG9nSWZyYW1lOntib2R5Q3NzQ2xhc3M6YyxpZDpnKyJjb25maWd1cmF0aW9uSWZyYW1lIix1cmk6ZH0saWQ6ZysiY29uZmlndXJhdGlvbklmcmFtZURpYWxvZyIsdGl0bGU6bSx1cmk6ZH0sZnVuY3Rpb24ocyl7cy5vbmNlKCJkcmFnOmluaXQiLGZ1bmN0aW9uKCl7cy5kZC5hZGRJbnZhbGlkKCIucG9ydGxldC1jb25maWd1cmF0aW9uLXN1YnRpdGxlLXRleHQiKX0pfSl9fSxbImxpZmVyYXktdXRpbC13aW5kb3ciXSk7RS5wdWJsaXNoKCJjbG9zZVBvcnRsZXQiLHtkZWZhdWx0Rm46Zi5fZGVmQ2xvc2VGbn0pO0UucHVibGlzaCgiYWxsUG9ydGxldHNSZWFkeSIse2ZpcmVPbmNlOiEwfSk7Zi5yZWFkeT1mdW5jdGlvbihkKXtFLm9uKCJwb3J0bGV0UmVhZHkiLGZ1bmN0aW9uKGMpe2QoYy5wb3J0bGV0SWQsYy5wb3J0bGV0KX0pfTtFLlBvcnRsZXQ9CmZ9KShBVUkoKSxMaWZlcmF5KTtMaWZlcmF5LldvcmtmbG93PXtBQ1RJT05fUFVCTElTSDoxLEFDVElPTl9TQVZFX0RSQUZUOjIsU1RBVFVTX0FOWTotMSxTVEFUVVNfQVBQUk9WRUQ6MCxTVEFUVVNfREVOSUVEOjQsU1RBVFVTX0RSQUZUOjIsU1RBVFVTX0VYUElSRUQ6MyxTVEFUVVNfUEVORElORzoxfTtBVUkuYWRkKCJsaWZlcmF5LWFkZHJlc3MiLGZ1bmN0aW9uKGEpe0xpZmVyYXkuQWRkcmVzcz17Z2V0Q291bnRyaWVzOmZ1bmN0aW9uKEUpe0xpZmVyYXkuU2VydmljZSgiL2NvdW50cnkvZ2V0LWNvdW50cmllcyIse2FjdGl2ZTohMH0sRSl9LGdldFJlZ2lvbnM6ZnVuY3Rpb24oRSxxKXtMaWZlcmF5LlNlcnZpY2UoIi9yZWdpb24vZ2V0LXJlZ2lvbnMiLHthY3RpdmU6ITAsY291bnRyeUlkOk51bWJlcihxKX0sRSl9fX0sIiIse3JlcXVpcmVzOltdfSk7CkFVSS5hZGQoImxpZmVyYXktZm9ybSIsZnVuY3Rpb24oYSl7dmFyIEU9YS5BcnJheSxxPWEuY29uZmlnLkZvcm1WYWxpZGF0b3IsdD1xLlJVTEVTLmFjY2VwdEZpbGVzO2EubWl4KHEuUlVMRVMse2FjY2VwdEZpbGVzOmZ1bmN0aW9uKGQsYyxiKXtyZXR1cm4iKiI9PWI/ITA6dChkLGMsYil9LG51bWJlcjpmdW5jdGlvbihkLGMsYil7cmV0dXJuKGM9L15bK1wtXT8oXGQrKShbLnwsXVxkKykqKFtlRV1bKy1dP1xkKyk/JC8pJiZjLnRlc3QoZCl9fSwhMCk7YS5taXgocS5TVFJJTkdTLHtERUZBVUxUOidQbGVhc2VceDIwZml4XHgyMHRoaXNceDIwZmllbGRceDJlJyxhY2NlcHRGaWxlczonUGxlYXNlXHgyMGVudGVyXHgyMGFceDIwZmlsZVx4MjB3aXRoXHgyMGFceDIwdmFsaWRceDIwZXh0ZW5zaW9uXHgyMFx4MjhceDdiMFx4N2RceDI5XHgyZScsYWxwaGE6J1BsZWFzZVx4MjBlbnRlclx4MjBvbmx5XHgyMGFscGhhXHgyMGNoYXJhY3RlcnNceDJlJyxhbHBoYW51bTonUGxlYXNlXHgyMGVudGVyXHgyMG9ubHlceDIwYWxwaGFudW1lcmljXHgyMGNoYXJhY3RlcnNceDJlJywKZGF0ZTonUGxlYXNlXHgyMGVudGVyXHgyMGFceDIwdmFsaWRceDIwZGF0ZVx4MmUnLGRpZ2l0czonUGxlYXNlXHgyMGVudGVyXHgyMG9ubHlceDIwZGlnaXRzXHgyZScsZW1haWw6J1BsZWFzZVx4MjBlbnRlclx4MjBhXHgyMHZhbGlkXHgyMGVtYWlsXHgyMGFkZHJlc3NceDJlJyxlcXVhbFRvOidQbGVhc2VceDIwZW50ZXJceDIwdGhlXHgyMHNhbWVceDIwdmFsdWVceDIwYWdhaW5ceDJlJyxtYXg6J1BsZWFzZVx4MjBlbnRlclx4MjBhXHgyMHZhbHVlXHgyMGxlc3NceDIwdGhhblx4MjBvclx4MjBlcXVhbFx4MjB0b1x4MjBceDdiMFx4N2RceDJlJyxtYXhMZW5ndGg6J1BsZWFzZVx4MjBlbnRlclx4MjBub1x4MjBtb3JlXHgyMHRoYW5ceDIwXHg3YjBceDdkXHgyMGNoYXJhY3RlcnNceDJlJyxtaW46J1BsZWFzZVx4MjBlbnRlclx4MjBhXHgyMHZhbHVlXHgyMGdyZWF0ZXJceDIwdGhhblx4MjBvclx4MjBlcXVhbFx4MjB0b1x4MjBceDdiMFx4N2RceDJlJyxtaW5MZW5ndGg6J1BsZWFzZVx4MjBlbnRlclx4MjBhdFx4MjBsZWFzdFx4MjBceDdiMFx4N2RceDIwY2hhcmFjdGVyc1x4MmUnLApudW1iZXI6J1BsZWFzZVx4MjBlbnRlclx4MjBhXHgyMHZhbGlkXHgyMG51bWJlclx4MmUnLHJhbmdlOidQbGVhc2VceDIwZW50ZXJceDIwYVx4MjB2YWx1ZVx4MjBiZXR3ZWVuXHgyMFx4N2IwXHg3ZFx4MjBhbmRceDIwXHg3YjFceDdkXHgyZScscmFuZ2VMZW5ndGg6J1BsZWFzZVx4MjBlbnRlclx4MjBhXHgyMHZhbHVlXHgyMGJldHdlZW5ceDIwXHg3YjBceDdkXHgyMGFuZFx4MjBceDdiMVx4N2RceDIwY2hhcmFjdGVyc1x4MjBsb25nXHgyZScscmVxdWlyZWQ6J1RoaXNceDIwZmllbGRceDIwaXNceDIwcmVxdWlyZWRceDJlJyx1cmw6J1BsZWFzZVx4MjBlbnRlclx4MjBhXHgyMHZhbGlkXHgyMFVSTFx4MmUnfSwhMCk7dmFyIGY9YS5Db21wb25lbnQuY3JlYXRlKHtBVFRSUzp7ZmllbGRSdWxlczp7c2V0dGVyOmZ1bmN0aW9uKGQpe3RoaXMuX3Byb2Nlc3NGaWVsZFJ1bGVzKGQpO3JldHVybiBkfX0saWQ6e30sbmFtZXNwYWNlOnt9LG9uU3VibWl0Ont2YWx1ZUZuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uU3VibWl0fX0sCnZhbGlkYXRlT25CbHVyOnt2YWxpZGF0b3I6YS5MYW5nLmlzQm9vbGVhbix2YWx1ZTohMH19LEVYVEVORFM6YS5CYXNlLHByb3RvdHlwZTp7aW5pdGlhbGl6ZXI6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmdldCgiaWQiKSxkPWRvY3VtZW50W2RdLGM9YS5vbmUoZCk7dGhpcy5mb3JtPWQ7aWYodGhpcy5mb3JtTm9kZT1jKXRoaXMuZm9ybVZhbGlkYXRvcj1uZXcgYS5Gb3JtVmFsaWRhdG9yKHtib3VuZGluZ0JveDpjLHZhbGlkYXRlT25CbHVyOnRoaXMuZ2V0KCJ2YWxpZGF0ZU9uQmx1ciIpfSksdGhpcy5fcHJvY2Vzc0ZpZWxkUnVsZXMoKSx0aGlzLl9iaW5kRm9ybSgpfSxhZGRSdWxlOmZ1bmN0aW9uKGQsYyxiLGcsZSl7dmFyIGs9dGhpcy5nZXQoImZpZWxkUnVsZXMiKTstMT09dGhpcy5fZmluZFJ1bGVJbmRleChrLGQsYykmJihrLnB1c2goe2JvZHk6Z3x8IiIsY3VzdG9tOmV8fCExLGVycm9yTWVzc2FnZTpifHwiIixmaWVsZE5hbWU6ZCx2YWxpZGF0b3JOYW1lOmN9KSx0aGlzLl9wcm9jZXNzRmllbGRSdWxlcyhrKSl9LApyZW1vdmVSdWxlOmZ1bmN0aW9uKGQsYyl7dmFyIGI9dGhpcy5nZXQoImZpZWxkUnVsZXMiKSxnPXRoaXMuX2ZpbmRSdWxlSW5kZXgoYixkLGMpOy0xIT1nJiYodGhpcy5mb3JtVmFsaWRhdG9yLnJlc2V0RmllbGQoYltnXS5maWVsZE5hbWUpLGIuc3BsaWNlKGcsMSksdGhpcy5fcHJvY2Vzc0ZpZWxkUnVsZXMoYikpfSxfYWZ0ZXJHZXRGaWVsZHNCeU5hbWU6ZnVuY3Rpb24oZCl7aWYoZC5sYXN0SW5kZXhPZigiRWRpdG9yIik9PT1kLmxlbmd0aC02KXJldHVybiBuZXcgYS5Eby5BbHRlclJldHVybigiUmV0dXJuIGVkaXRvciBkb20gZWxlbWVudCIsdGhpcy5mb3JtTm9kZS5vbmUoIiMiK2QpKX0sX2JpbmRGb3JtOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5mb3JtTm9kZSxjPXRoaXMuZm9ybVZhbGlkYXRvcjtjLm9uKCJzdWJtaXQiLGEuYmluZCgiX29uVmFsaWRhdG9yU3VibWl0Iix0aGlzKSk7Yy5vbigic3VibWl0RXJyb3IiLGEuYmluZCgiX29uU3VibWl0RXJyb3IiLHRoaXMpKTtkLmRlbGVnYXRlKFsiYmx1ciIsCiJmb2N1cyJdLGEuYmluZCgiX29uRmllbGRGb2N1c0NoYW5nZSIsdGhpcyksImJ1dHRvbixpbnB1dCxzZWxlY3QsdGV4dGFyZWEiKTtkLmRlbGVnYXRlKFsiYmx1ciIsImlucHV0Il0sYS5iaW5kKCJfb25FZGl0b3JCbHVyIix0aGlzKSwnZGl2W2NvbnRlbnRlZGl0YWJsZVx4M2QidHJ1ZSJdJyk7YS5Eby5hZnRlcigiX2FmdGVyR2V0RmllbGRzQnlOYW1lIixjLCJnZXRGaWVsZHNCeU5hbWUiLHRoaXMpfSxfZGVmYXVsdFN1Ym1pdEZuOmZ1bmN0aW9uKGQpe2Quc3RvcHBlZHx8c3VibWl0Rm9ybSh0aGlzLmZvcm0pfSxfZmluZFJ1bGVJbmRleDpmdW5jdGlvbihkLGMsYil7dmFyIGc9LTE7RS5zb21lKGQsZnVuY3Rpb24oZSxrKXtpZihlLmZpZWxkTmFtZT09PWMmJmUudmFsaWRhdG9yTmFtZT09PWIpcmV0dXJuIGc9aywhMH0pO3JldHVybiBnfSxfb25FZGl0b3JCbHVyOmZ1bmN0aW9uKGQpe3RoaXMuZm9ybVZhbGlkYXRvci52YWxpZGF0ZUZpZWxkKGQudGFyZ2V0KX0sX29uRmllbGRGb2N1c0NoYW5nZTpmdW5jdGlvbihkKXt2YXIgYz0KZC5jdXJyZW50VGFyZ2V0LmFuY2VzdG9yKCIuZmllbGQiKTtjJiZjLnRvZ2dsZUNsYXNzKCJmaWVsZC1mb2N1c2VkIiwiZm9jdXMiPT09ZC50eXBlKX0sX29uU3VibWl0OmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXM7ZC5wcmV2ZW50RGVmYXVsdCgpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLl9kZWZhdWx0U3VibWl0Rm4oZCl9LDApfSxfb25TdWJtaXRFcnJvcjpmdW5jdGlvbihkKXt0aGlzLmZvcm1Ob2RlLmFsbCgiLnBhbmVsLWNvbGxhcHNlIikuZWFjaChmdW5jdGlvbihjKXswPGMuZ2V0KCJjaGlsZHJlbiIpLmFsbCgiLmhhcy1lcnJvciIpLnNpemUoKSYmIWMuaGFzQ2xhc3MoImluIikmJihjPWMuZ2V0RE9NKCksQVVJLiQoYykuY29sbGFwc2UoInNob3ciKSl9KX0sX29uVmFsaWRhdG9yU3VibWl0OmZ1bmN0aW9uKGQpe3RoaXMuZ2V0KCJvblN1Ym1pdCIpLmNhbGwodGhpcyxkLnZhbGlkYXRvci5mb3JtRXZlbnQpfSxfcHJvY2Vzc0ZpZWxkUnVsZTpmdW5jdGlvbihkLGMsYil7dmFyIGc9CiEwLGU9Yi5maWVsZE5hbWUsaz1iLnZhbGlkYXRvck5hbWU7Yi5ib2R5JiYhYi5jdXN0b20mJihnPWIuYm9keSk7dmFyIG09ZFtlXTttfHwobT17fSxkW2VdPW0pO21ba109ZztiLmN1c3RvbSYmKHEuUlVMRVNba109Yi5ib2R5KTtpZihkPWIuZXJyb3JNZXNzYWdlKWI9Y1tlXSxifHwoYj17fSxjW2VdPWIpLGJba109ZH0sX3Byb2Nlc3NGaWVsZFJ1bGVzOmZ1bmN0aW9uKGQpe2R8fChkPXRoaXMuZ2V0KCJmaWVsZFJ1bGVzIikpO3ZhciBjPXt9LGI9e30sZztmb3IoZyBpbiBkKXRoaXMuX3Byb2Nlc3NGaWVsZFJ1bGUoYixjLGRbZ10pO2lmKGQ9dGhpcy5mb3JtVmFsaWRhdG9yKWQuc2V0KCJmaWVsZFN0cmluZ3MiLGMpLGQuc2V0KCJydWxlcyIsYil9fSxnZXQ6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuX0lOU1RBTkNFU1tkXX0scmVnaXN0ZXI6ZnVuY3Rpb24oZCl7dmFyIGM9bmV3IExpZmVyYXkuRm9ybShkKTtkPWQuaWR8fGQubmFtZXNwYWNlO3RoaXMuX0lOU1RBTkNFU1tkXT1jOwpMaWZlcmF5LmZpcmUoImZvcm06cmVnaXN0ZXJlZCIse2Zvcm06Yyxmb3JtTmFtZTpkfSk7cmV0dXJuIGN9LF9JTlNUQU5DRVM6e319KTtMaWZlcmF5LkZvcm09Zn0sIiIse3JlcXVpcmVzOlsiYXVpLWJhc2UiLCJhdWktZm9ybS12YWxpZGF0b3IiXX0pOwpBVUkuYWRkKCJsaWZlcmF5LWZvcm0tcGxhY2Vob2xkZXJzIixmdW5jdGlvbihhKXt2YXIgRT1hLk5vZGUscT17aWQ6MSxuYW1lOjEsdHlwZToxfSx0PWEuQ29tcG9uZW50LmNyZWF0ZSh7RVhURU5EUzphLlBsdWdpbi5CYXNlLE5BTUU6InBsYWNlaG9sZGVycyIsTlM6InBsYWNlaG9sZGVyIixwcm90b3R5cGU6e2luaXRpYWxpemVyOmZ1bmN0aW9uKGYpe3ZhciBkPXRoaXM7Zj1kLmdldCgiaG9zdCIpO3ZhciBjPWYuZm9ybU5vZGU7YyYmKGMuYWxsKCJpbnB1dFtwbGFjZWhvbGRlcl0sIHRleHRhcmVhW3BsYWNlaG9sZGVyXSIpLmVhY2goZnVuY3Rpb24oYixnKXtiLnZhbCgpfHwoInBhc3N3b3JkIj09PWIuYXR0cigidHlwZSIpP2QuX2luaXRpYWxpemVQYXNzd29yZE5vZGUoYik6KGIuYWRkQ2xhc3MoInRleHQtcGxhY2Vob2xkZXIiKSxiLnZhbChiLmF0dHIoInBsYWNlaG9sZGVyIikpKSl9KSxkLmhvc3Q9ZixkLmJlZm9yZUhvc3RNZXRob2QoIl9vblZhbGlkYXRvclN1Ym1pdCIsZC5fcmVtb3ZlUGxhY2Vob2xkZXJzLApkKSxkLmJlZm9yZUhvc3RNZXRob2QoIl9vbkZpZWxkRm9jdXNDaGFuZ2UiLGQuX3RvZ2dsZVBsYWNlaG9sZGVycyxkKSl9LF9pbml0aWFsaXplUGFzc3dvcmROb2RlOmZ1bmN0aW9uKGYpe3ZhciBkPUUuY3JlYXRlKCdceDNjaW5wdXQgbmFtZVx4M2QiJytmLmF0dHIoIm5hbWUiKSsnX3Bhc3NfcGxhY2Vob2xkZXIiIHR5cGVceDNkInRleHQiIC9ceDNlJyk7TGlmZXJheS5VdGlsLmdldEF0dHJpYnV0ZXMoZixmdW5jdGlvbihjLGIsZyl7cVtiXXx8KCJjbGFzcyI9PT1iJiYoYys9IiB0ZXh0LXBsYWNlaG9sZGVyIiksZC5zZXRBdHRyaWJ1dGUoYixjKSk7cmV0dXJuITF9KTtkLnZhbChmLmF0dHIoInBsYWNlaG9sZGVyIikpO2QuYXR0cigiZGF0YS10eXBlLXBhc3N3b3JkLXBsYWNlaG9sZGVyIiwhMCk7Zi5wbGFjZUJlZm9yZShkKTtmLmhpZGUoKX0sX3JlbW92ZVBsYWNlaG9sZGVyczpmdW5jdGlvbigpe3RoaXMuaG9zdC5mb3JtTm9kZS5hbGwoImlucHV0W3BsYWNlaG9sZGVyXSwgdGV4dGFyZWFbcGxhY2Vob2xkZXJdIikuZWFjaChmdW5jdGlvbihmLApkKXtmLnZhbCgpPT1mLmF0dHIoInBsYWNlaG9sZGVyIikmJmYudmFsKCIiKX0pfSxfdG9nZ2xlTG9jYWxpemVkUGxhY2Vob2xkZXJzOmZ1bmN0aW9uKGYsZCl7dmFyIGM9ZC5hdHRyKCJwbGFjZWhvbGRlciIpO2lmKGMpe3ZhciBiPWQudmFsKCk7ImZvY3VzIj09PWYudHlwZT9iPT09YyYmZC5yZW1vdmVDbGFzcygidGV4dC1wbGFjZWhvbGRlciIpOmJ8fChkLnZhbChjKSxkLmFkZENsYXNzKCJ0ZXh0LXBsYWNlaG9sZGVyIikpfX0sX3RvZ2dsZVBhc3N3b3JkUGxhY2Vob2xkZXJzOmZ1bmN0aW9uKGYsZCl7aWYoZC5hdHRyKCJwbGFjZWhvbGRlciIpKWlmKCJmb2N1cyI9PT1mLnR5cGUpe2lmKGQuaGFzQXR0cmlidXRlKCJkYXRhLXR5cGUtcGFzc3dvcmQtcGxhY2Vob2xkZXIiKSl7ZC5oaWRlKCk7dmFyIGM9ZC5uZXh0KCk7Yy5zaG93KCk7c2V0VGltZW91dChmdW5jdGlvbigpe0xpZmVyYXkuVXRpbC5mb2N1c0Zvcm1GaWVsZChjKX0sMCl9fWVsc2UicGFzc3dvcmQiIT09ZC5hdHRyKCJ0eXBlIil8fApkLnZhbCgpfHwoZC5oaWRlKCksZC5wcmV2aW91cygpLnNob3coKSl9LF90b2dnbGVQbGFjZWhvbGRlcnM6ZnVuY3Rpb24oZil7dmFyIGQ9Zi5jdXJyZW50VGFyZ2V0O2lmKGQuaGFzQXR0cmlidXRlKCJkYXRhLXR5cGUtcGFzc3dvcmQtcGxhY2Vob2xkZXIiKXx8InBhc3N3b3JkIj09PWQuYXR0cigidHlwZSIpKXRoaXMuX3RvZ2dsZVBhc3N3b3JkUGxhY2Vob2xkZXJzKGYsZCk7ZWxzZSBpZihkLmhhc0NsYXNzKCJsYW5ndWFnZS12YWx1ZSIpKXRoaXMuX3RvZ2dsZUxvY2FsaXplZFBsYWNlaG9sZGVycyhmLGQpO2Vsc2V7dmFyIGM9ZC5hdHRyKCJwbGFjZWhvbGRlciIpO2lmKGMpe3ZhciBiPWQudmFsKCk7ImZvY3VzIj09PWYudHlwZT9iPT09YyYmKGQudmFsKCIiKSxkLnJlbW92ZUNsYXNzKCJ0ZXh0LXBsYWNlaG9sZGVyIikpOmJ8fChkLnZhbChjKSxkLmFkZENsYXNzKCJ0ZXh0LXBsYWNlaG9sZGVyIikpfX19fX0pO0xpZmVyYXkuRm9ybS5QbGFjZWhvbGRlcnM9dDthLkJhc2UucGx1ZyhMaWZlcmF5LkZvcm0sCnQpfSwiIix7cmVxdWlyZXM6WyJsaWZlcmF5LWZvcm0iLCJwbHVnaW4iXX0pOwpBVUkuYWRkKCJsaWZlcmF5LWljb24iLGZ1bmN0aW9uKGEpe3ZhciBFPXt9O0xpZmVyYXkuSWNvbj17cmVnaXN0ZXI6ZnVuY3Rpb24ocSl7dmFyIHQ9YS5vbmUoYS5jb25maWcuZG9jKTtFW3EuaWRdPXE7dGhpcy5fZG9jQ2xpY2tIYW5kbGVyfHwodGhpcy5fZG9jQ2xpY2tIYW5kbGVyPXQuZGVsZWdhdGUoImNsaWNrIix0aGlzLl9oYW5kbGVEb2NDbGljaywiLmxmci1pY29uLWl0ZW0iLHRoaXMpKTt0aGlzLl9kb2NIb3ZlckhhbmRsZXJ8fCh0aGlzLl9kb2NIb3ZlckhhbmRsZXI9dC5kZWxlZ2F0ZSgiaG92ZXIiLHRoaXMuX2hhbmRsZURvY01vdXNlT3Zlcix0aGlzLl9oYW5kbGVEb2NNb3VzZU91dCwiLmxmci1pY29uLWl0ZW0iLHRoaXMpKTtMaWZlcmF5Lm9uY2UoInNjcmVlbkxvYWQiLGZ1bmN0aW9uKCl7ZGVsZXRlIEVbcS5pZF19KX0sX2ZvcmNlUG9zdDpmdW5jdGlvbihxKXtMaWZlcmF5LlNQQSYmTGlmZXJheS5TUEEuYXBwfHwoTGlmZXJheS5VdGlsLmZvcmNlUG9zdChxLmN1cnJlbnRUYXJnZXQpLApxLnByZXZlbnREZWZhdWx0KCkpfSxfZ2V0Q29uZmlnOmZ1bmN0aW9uKHEpe3JldHVybiBFW3EuY3VycmVudFRhcmdldC5hdHRyKCJpZCIpXX0sX2hhbmRsZURvY0NsaWNrOmZ1bmN0aW9uKHEpe3ZhciB0PXRoaXMuX2dldENvbmZpZyhxKTt0JiYocS5wcmV2ZW50RGVmYXVsdCgpLHQudXNlRGlhbG9nP3RoaXMuX3VzZURpYWxvZyhxKTp0aGlzLl9mb3JjZVBvc3QocSkpfSxfaGFuZGxlRG9jTW91c2VPdXQ6ZnVuY3Rpb24ocSl7dmFyIHQ9dGhpcy5fZ2V0Q29uZmlnKHEpO3QmJnQuc3JjSG92ZXImJnRoaXMuX29uTW91c2VIb3ZlcihxLHQuc3JjKX0sX2hhbmRsZURvY01vdXNlT3ZlcjpmdW5jdGlvbihxKXt2YXIgdD10aGlzLl9nZXRDb25maWcocSk7dCYmdC5zcmNIb3ZlciYmdGhpcy5fb25Nb3VzZUhvdmVyKHEsdC5zcmNIb3Zlcil9LF9vbk1vdXNlSG92ZXI6ZnVuY3Rpb24ocSx0KXt2YXIgZj1xLmN1cnJlbnRUYXJnZXQub25lKCJpbWciKTtmJiZmLmF0dHIoInNyYyIsdCl9LF91c2VEaWFsb2c6ZnVuY3Rpb24ocSl7TGlmZXJheS5VdGlsLm9wZW5JbkRpYWxvZyhxLAp7ZGlhbG9nOntkZXN0cm95T25IaWRlOiEwfSxkaWFsb2dJZnJhbWU6e2JvZHlDc3NDbGFzczoiZGlhbG9nLXdpdGgtZm9vdGVyIn19KX19fSwiIix7cmVxdWlyZXM6WyJhdWktYmFzZSIsImxpZmVyYXktdXRpbC13aW5kb3ciXX0pOwpBVUkuYWRkKCJsaWZlcmF5LW1lbnUiLGZ1bmN0aW9uKGEpe3ZhciBFPUxpZmVyYXkuVXRpbCxxPVsidGwiLCJibCJdLHQ9e2xlZnQ6InIiLHJpZ2h0OiJsIn0sZj17bGVmdDoibCIscmlnaHQ6InIifSxkPXtsZWZ0OiJsIixyaWdodDoiciJ9LGM9e2xlZnQ6InIiLHJpZ2h0OiJsIn0sYj17ZG93bjoidCIsdXA6ImIifSxnPXtkb3duOiJiIix1cDoidCJ9LGU9e30saz0vXGJkaXJlY3Rpb24tKGRvd258bGVmdHxyaWdodHx1cClcYi8sbT0vbWF4LWRpc3BsYXktaXRlbXMtKFxkKykvLHA9ZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVzPVtdO3AuX0lOU1RBTkNFfHwocC5fSU5TVEFOQ0U9dGhpcyl9O3AucHJvdG90eXBlPXtfY2xvc2VBY3RpdmVNZW51OmZ1bmN0aW9uKCl7aWYodGhpcy5fYWN0aXZlTWVudSl7dmFyIGw9dGhpcy5faGFuZGxlczthLkFycmF5Lmludm9rZShsLCJkZXRhY2giKTtsLmxlbmd0aD0wO3RoaXMuX292ZXJsYXkuaGlkZSgpO2w9dGhpcy5fYWN0aXZlVHJpZ2dlcjt0aGlzLl9hY3RpdmVUcmlnZ2VyPQp0aGlzLl9hY3RpdmVNZW51PW51bGw7bC5oYXNDbGFzcygibGZyLWV4dGVuZGVkIik/bC5yZW1vdmVDbGFzcygiYnRuLXByaW1hcnkiKTpsLmdldCgicGFyZW50Tm9kZSIpLnJlbW92ZUNsYXNzKCJvcGVuIil9fSxfZ2V0QWxpZ25Qb2ludHM6YS5jYWNoZWQoZnVuY3Rpb24obCl7dmFyIGg9cSx1PSJyIix3PSJsIix6PXQsQT1kOyJydGwiPT09KExpZmVyYXkuTGFuZ3VhZ2UuZGlyZWN0aW9uW3RoZW1lRGlzcGxheS5nZXRMYW5ndWFnZUlkKCldfHwibHRyIikmJih1PSJsIix3PSJyIix6PWYsQT1jKTstMT09PWwuaW5kZXhPZigiYXV0byIpJiYobD0obD1sLm1hdGNoKGspKSYmbFsxXXx8ImF1dG8iLGg9WyhiW2xdfHwidCIpKyh6W2xdfHx1KSwoZ1tsXXx8InQiKSsoQVtsXXx8dyldKTtyZXR1cm4gaH0pLF9nZXRNZW51OmZ1bmN0aW9uKGwpe3ZhciBoPXRoaXMsdT1oLl9vdmVybGF5O3U/dS5zZXQoImFsaWduLm5vZGUiLGwpOih1PShuZXcgKGEuQ29tcG9uZW50LmNyZWF0ZSh7QVVHTUVOVFM6W2EuV2lkZ2V0Q3NzQ2xhc3MsCmEuV2lkZ2V0UG9zaXRpb24sYS5XaWRnZXRTdGRNb2QsYS5XaWRnZXRNb2RhbGl0eSxhLldpZGdldFBvc2l0aW9uQWxpZ24sYS5XaWRnZXRQb3NpdGlvbkNvbnN0cmFpbixhLldpZGdldFN0YWNrXSxDU1NfUFJFRklYOiJvdmVybGF5IixFWFRFTkRTOmEuV2lkZ2V0LE5BTUU6Im92ZXJsYXkifSkpKHthbGlnbjp7bm9kZTpsLHBvaW50czpxfSxjb25zdHJhaW46ITAsaGlkZUNsYXNzOiExLHByZXZlbnRPdmVybGFwOiEwLHpJbmRleDpMaWZlcmF5LnpJbmRleC5NRU5VfSkpLnJlbmRlcigpLExpZmVyYXkub25jZSgiYmVmb3JlU2NyZWVuRmxpcCIsZnVuY3Rpb24oKXt1LmRlc3Ryb3koKTtoLl9vdmVybGF5PW51bGx9KSxoLl9vdmVybGF5PXUpO3ZhciB3PWwuZ2V0RGF0YSgibWVudUxpc3RDb250YWluZXIiKSx6PWwuZ2V0RGF0YSgibWVudSIpLEE9bC5nZXREYXRhKCJtZW51SGVpZ2h0IiksSD16JiZlW3ouZ3VpZCgpXTtIJiZILnJlc2V0KCk7dmFyIEY7eiYmd3x8KHc9bC5uZXh0KCJ1bCIpLApGPXcuYWxsKCJsaSIpLHo9YS5Ob2RlLmNyZWF0ZSgnXHgzY2RpdiBjbGFzc1x4M2Qib3BlbiIgL1x4M2UnKSx3LnBsYWNlQmVmb3JlKHopLEYubGFzdCgpLmFkZENsYXNzKCJsYXN0Iiksei5hcHBlbmQodyksbC5zZXREYXRhKCJtZW51TGlzdENvbnRhaW5lciIsdyksbC5zZXREYXRhKCJtZW51Iix6KSxoLl9zZXRBUklBUm9sZXMobCx6LHcpLGwuaGFzQ2xhc3MoInNlbGVjdCIpJiZ3LmRlbGVnYXRlKCJjbGljayIsZnVuY3Rpb24oQil7Qj1CLmN1cnJlbnRUYXJnZXQ7dmFyIEk9Qi5vbmUoImkiKSxNPWwub25lKCJpIik7SSYmTSYmKEk9SS5hdHRyKCJjbGFzcyIpLE0uYXR0cigiY2xhc3MiLEkpKTtCPUIub25lKCIubGZyLWljb24tbWVudS10ZXh0Iik7TT1sLm9uZSgiLmxmci1pY29uLW1lbnUtdGV4dCIpO0ImJk0mJk0uc2V0Q29udGVudChCLnRleHQoKSl9LCJsaSIpKTt1LnNldFN0ZE1vZENvbnRlbnQoYS5XaWRnZXRTdGRNb2QuQk9EWSx6KTtBfHwoQT1oLl9nZXRNZW51SGVpZ2h0KGwsCnosRnx8dy5hbGwoImxpIikpLGwuc2V0RGF0YSgibWVudUhlaWdodCIsQSksImF1dG8iIT09QSYmdy5zZXRTdHlsZSgibWF4SGVpZ2h0IixBKSk7aC5fZ2V0Rm9jdXNNYW5hZ2VyKCk7cmV0dXJuIHp9LF9nZXRNZW51SGVpZ2h0OmZ1bmN0aW9uKGwsaCx1KXt2YXIgdz1sLmF0dHIoImNsYXNzTmFtZSIpO2g9ImF1dG8iO2lmKC0xPT09dy5pbmRleE9mKCJsZnItbWVudS1leHBhbmRlZCIpJiYodz0odz1tLmV4ZWModykpJiZwYXJzZUludCh3WzFdLDEwKSkmJnUuc2l6ZSgpPncpZm9yKHRoaXMuX2dldExpdmVTZWFyY2gobCxsLmdldERhdGEoIm1lbnUiKSksaD0wLGw9dS5zbGljZSgwLHcpLmdldCgib2Zmc2V0SGVpZ2h0IiksdT1sLmxlbmd0aC0xOzA8PXU7dS0tKWgrPWxbdV07cmV0dXJuIGh9LF9wb3NpdGlvbkFjdGl2ZU1lbnU6ZnVuY3Rpb24oKXt2YXIgbD10aGlzLl9hY3RpdmVNZW51LGg9dGhpcy5fYWN0aXZlVHJpZ2dlcjtpZihsKXt2YXIgdT1oLmF0dHIoImNsYXNzTmFtZSIpLAp3PXRoaXMuX292ZXJsYXksej13LmdldCgiYWxpZ24iKSxBPWwub25lKCJ1bCIpLEg9QS5nZXQoIm9mZnNldEhlaWdodCIpLEE9QS5nZXQoIm9mZnNldFdpZHRoIiksRj0hMTt6LnBvaW50cz10aGlzLl9nZXRBbGlnblBvaW50cyh1KTtsLmFkZENsYXNzKCJsZnItaWNvbi1tZW51LW9wZW4iKTtpZihFLmlzUGhvbmUoKXx8RS5pc1RhYmxldCgpKXcuaGlkZSgpLEY9ITA7dy5zZXRBdHRycyh7YWxpZ246eixjZW50ZXJlZDohMSxoZWlnaHQ6SCxtb2RhbDpGLHdpZHRoOkF9KTtFLmlzUGhvbmUoKXx8RS5pc1RhYmxldCgpfHwobD13LmJvZHlOb2RlLmZvY3VzTWFuYWdlcikmJmwuZm9jdXMoMCk7dy5zaG93KCk7LTE8dS5pbmRleE9mKCJsZnItZXh0ZW5kZWQiKT9oLmFkZENsYXNzKCJidG4tcHJpbWFyeSIpOmguZ2V0KCJwYXJlbnROb2RlIikuYWRkQ2xhc3MoIm9wZW4iKX19LF9zZXRBUklBUm9sZXM6ZnVuY3Rpb24obCxoLHUpe3U9aC5hbGwoImEiKTt2YXIgdz1oLm9uZSgiLmxmci1tZW51LWxpc3Qtc2VhcmNoLWNvbnRhaW5lciIpOwpoPWgub25lKCJ1bCIpO3ZhciB6PSJtZW51Ijt3JiYoej0ib3B0aW9uIik7aC5zZXRBdHRyaWJ1dGUoInJvbGUiLHopO3Uuc2V0KCJyb2xlIiwibWVudWl0ZW0iKTtsLmF0dHIoeyJhcmlhLWhhc3BvcHVwIjohMCxyb2xlOiJidXR0b24ifSk7aC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsbC5ndWlkKCkpfX07cC5oYW5kbGVGb2N1cz1mdW5jdGlvbihsKXtpZihsPWEub25lKGwpKWwuZGVsZWdhdGUoIm1vdXNlZW50ZXIiLGEucmJpbmQocC5fdGFyZ2V0TGluayxsLCJmb2N1cyIpLCJsaSIpLGwuZGVsZWdhdGUoIm1vdXNlbGVhdmUiLGEucmJpbmQocC5fdGFyZ2V0TGluayxsLCJibHVyIiksImxpIil9O3ZhciBzPVtdO3AucmVnaXN0ZXI9ZnVuY3Rpb24obCl7aWYobD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChsKSlwLl9JTlNUQU5DRXx8bmV3IHAscy5wdXNoKGwpLHAuX3JlZ2lzdGVyVGFzaygpfTtwLl9yZWdpc3RlclRhc2s9YS5kZWJvdW5jZShmdW5jdGlvbigpe3MubGVuZ3RoJiYKKGEuYWxsKHMpLm9uKCJjbGljayIsYS5iaW5kKCJfcmVnaXN0ZXJNZW51IixwKSkscy5sZW5ndGg9MCl9LDEwMCk7cC5fdGFyZ2V0TGluaz1mdW5jdGlvbihsLGgpe3ZhciB1PWwuY3VycmVudFRhcmdldC5vbmUoImEiKTtpZih1KXVbaF0oKX07TGlmZXJheS5wcm92aWRlKHAsIl9nZXRGb2N1c01hbmFnZXIiLGZ1bmN0aW9uKCl7dmFyIGw9cC5fSU5TVEFOQ0UsaD1sLl9mb2N1c01hbmFnZXI7aWYoIWgpe3ZhciB1PWwuX292ZXJsYXkuYm9keU5vZGU7dS5wbHVnKGEuUGx1Z2luLk5vZGVGb2N1c01hbmFnZXIse2NpcmN1bGFyOiEwLGRlc2NlbmRhbnRzOiJsaTpub3QoLmhpZGUpIGEsaW5wdXQiLGZvY3VzQ2xhc3M6ImZvY3VzIixrZXlzOntuZXh0OiJkb3duOjQwIixwcmV2aW91czoiZG93bjozOCJ9fSk7dS5vbigia2V5IixmdW5jdGlvbih3KXtpZih3PWwuX2FjdGl2ZVRyaWdnZXIpbC5fY2xvc2VBY3RpdmVNZW51KCksdy5mb2N1cygpfSwiZG93bjoyNyw5Iik7aD11LmZvY3VzTWFuYWdlcjsKdS5kZWxlZ2F0ZSgibW91c2VlbnRlciIsZnVuY3Rpb24odyl7aC5nZXQoImZvY3VzZWQiKSYmaC5mb2N1cyh3LmN1cnJlbnRUYXJnZXQub25lKCJhIikpfSwibGkiKTtoLmFmdGVyKCJhY3RpdmVEZXNjZW5kYW50Q2hhbmdlIixmdW5jdGlvbih3KXt3PWguZ2V0KCJkZXNjZW5kYW50cyIpLml0ZW0ody5uZXdWYWwpO3Uub25lKCJ1bCIpLnNldEF0dHJpYnV0ZSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50Iix3Lmd1aWQoKSl9KTtsLl9mb2N1c01hbmFnZXI9aH1oLnJlZnJlc2goKX0sWyJub2RlLWZvY3VzbWFuYWdlciJdLCEwKTtMaWZlcmF5LnByb3ZpZGUocCwiX2dldExpdmVTZWFyY2giLGZ1bmN0aW9uKGwsaCl7dmFyIHU9aC5ndWlkKCksdz1lW3VdO2lmKCF3KXt2YXIgdz1oLm9uZSgidWwiKSx6PVtdO3cuYWxsKCJsaSIpLmVhY2goZnVuY3Rpb24oQSl7ei5wdXNoKHtuYW1lOkEub25lKCIudGFnbGliLXRleHQtaWNvbiIpLnRleHQoKS50cmltKCksbm9kZTpBfSl9KTt3PW5ldyBMaWZlcmF5Lk1lbnVGaWx0ZXIoe2NvbnRlbnQ6dywKbWluUXVlcnlMZW5ndGg6MCxxdWVyeURlbGF5OjAscmVzdWx0RmlsdGVyczoicGhyYXNlTWF0Y2giLHJlc3VsdFRleHRMb2NhdG9yOiJuYW1lIixzb3VyY2U6en0pO3cuZ2V0KCJpbnB1dE5vZGUiKS5zd2FsbG93RXZlbnQoImNsaWNrIik7ZVt1XT13fX0sWyJsaWZlcmF5LW1lbnUtZmlsdGVyIl0sITApO0xpZmVyYXkucHJvdmlkZShwLCJfcmVnaXN0ZXJNZW51IixmdW5jdGlvbihsKXt2YXIgaD1wLl9JTlNUQU5DRSx1PWguX2hhbmRsZXMsdz1sLmN1cnJlbnRUYXJnZXQsej1oLl9hY3RpdmVUcmlnZ2VyO2lmKHopaWYoeiE9dyl6LnJlbW92ZUNsYXNzKCJidG4tcHJpbWFyeSIpLHouZ2V0KCJwYXJlbnROb2RlIikucmVtb3ZlQ2xhc3MoIm9wZW4iKTtlbHNle2guX2Nsb3NlQWN0aXZlTWVudSgpO3JldHVybn13Lmhhc0NsYXNzKCJkaXNhYmxlZCIpfHwoej1oLl9nZXRNZW51KHcpLGguX2FjdGl2ZU1lbnU9eixoLl9hY3RpdmVUcmlnZ2VyPXcsdS5sZW5ndGh8fCh3PXcuZ2V0RGF0YSgibWVudUxpc3RDb250YWluZXIiKSwKYS5FdmVudC5kZWZpbmVPdXRzaWRlKCJ0b3VjaGVuZCIpLHUucHVzaChhLmdldFdpbigpLm9uKCJyZXNpemUiLGEuZGVib3VuY2UoaC5fcG9zaXRpb25BY3RpdmVNZW51LDIwMCxoKSksYS5nZXREb2MoKS5vbigiY2xpY2siLGguX2Nsb3NlQWN0aXZlTWVudSxoKSx3Lm9uKCJ0b3VjaGVuZG91dHNpZGUiLGZ1bmN0aW9uKEEpe0EucHJldmVudERlZmF1bHQoKTtoLl9jbG9zZUFjdGl2ZU1lbnUoKX0saCkpLCh3PWEuREQmJmEuREQuRERNKSYmdS5wdXNoKHcub24oImRkbTpzdGFydCIsaC5fY2xvc2VBY3RpdmVNZW51LGgpKSksaC5fcG9zaXRpb25BY3RpdmVNZW51KCksbC5oYWx0KCkpfSwiYXVpLXdpZGdldC1jc3NjbGFzcyBldmVudC1vdXRzaWRlIGV2ZW50LXRvdWNoIHdpZGdldCB3aWRnZXQtbW9kYWxpdHkgd2lkZ2V0LXBvc2l0aW9uIHdpZGdldC1wb3NpdGlvbi1hbGlnbiB3aWRnZXQtcG9zaXRpb24tY29uc3RyYWluIHdpZGdldC1zdGFjayB3aWRnZXQtc3RkbW9kIi5zcGxpdCgiICIpKTsKTGlmZXJheS5NZW51PXB9LCIiLHtyZXF1aXJlczpbImFycmF5LWludm9rZSIsImF1aS1kZWJvdW5jZSIsImF1aS1ub2RlIiwicG9ydGFsLWF2YWlsYWJsZS1sYW5ndWFnZXMiXX0pOwpBVUkuYWRkKCJsaWZlcmF5LW5vdGljZSIsZnVuY3Rpb24oYSl7dmFyIEU9YS5ET00scT1hLk5vZGUsdD1hLkRvLGY9YS5MYW5nLGQ9ZnVuY3Rpb24oYyl7Yz1jfHx7fTt0aGlzLl9jbG9zZVRleHQ9Yy5jbG9zZVRleHQ7dGhpcy5fbm9kZT1jLm5vZGU7dGhpcy5fbm90aWNlVHlwZT1jLnR5cGV8fCJub3RpY2UiO3RoaXMuX25vdGljZUNsYXNzPSJhbGVydC13YXJuaW5nIjt0aGlzLl9vbkNsb3NlPWMub25DbG9zZTt0aGlzLl91c2VDbG9zZUJ1dHRvbj0hMDtjLnVzZUFuaW1hdGlvbiYmKHRoaXMuX25vdGljZUNsYXNzKz0iIHBvcHVwLWFsZXJ0LW5vdGljZSIsZi5pc051bWJlcihjLnRpbWVvdXQpfHwoYy50aW1lb3V0PTVFMykpO3RoaXMuX2FuaW1hdGlvbkNvbmZpZz1jLmFuaW1hdGlvbkNvbmZpZ3x8e2R1cmF0aW9uOjIsZWFzaW5nOiJlYXNlLW91dCIsdG9wOiI1MHB4In07dGhpcy5fdXNlQW5pbWF0aW9uPWMudXNlQW5pbWF0aW9uO3RoaXMuX3RpbWVvdXQ9Yy50aW1lb3V0O3RoaXMuX2JvZHk9CmEuZ2V0Qm9keSgpO3RoaXMuX3VzZVRvZ2dsZUJ1dHRvbj0hMTt0aGlzLl9zaG93VGV4dD10aGlzLl9oaWRlVGV4dD0iIjshMSE9PWMudG9nZ2xlVGV4dCYmKHRoaXMudG9nZ2xlVGV4dD1hLm1peChjLnRvZ2dsZVRleHQse2hpZGU6bnVsbCxzaG93Om51bGx9KSx0aGlzLl91c2VUb2dnbGVCdXR0b249ITApOyJ3YXJuaW5nIj09dGhpcy5fbm90aWNlVHlwZSYmKHRoaXMuX25vdGljZUNsYXNzPSJhbGVydC1kYW5nZXIgcG9wdXAtYWxlcnQtd2FybmluZyIpO2Mubm90aWNlQ2xhc3MmJih0aGlzLl9ub3RpY2VDbGFzcys9IiAiK2Mubm90aWNlQ2xhc3MpO3RoaXMuX2NvbnRlbnQ9Yy5jb250ZW50fHwiIjt0aGlzLl9jcmVhdGVIVE1MKCk7cmV0dXJuIHRoaXMuX25vdGljZX07ZC5wcm90b3R5cGU9e2Nsb3NlOmZ1bmN0aW9uKCl7dGhpcy5fbm90aWNlLmhpZGUoKTt0aGlzLl9ib2R5LnJlbW92ZUNsYXNzKCJoYXMtYWxlcnRzIik7dGhpcy5fb25DbG9zZSYmdGhpcy5fb25DbG9zZSgpfSxzZXRDbG9zaW5nOmZ1bmN0aW9uKCl7dmFyIGM9CmEuYWxsKCIucG9wdXAtYWxlcnQtbm90aWNlLCAucG9wdXAtYWxlcnQtd2FybmluZyIpO2Muc2l6ZSgpJiYodGhpcy5fdXNlQ2xvc2VCdXR0b249ITAsdGhpcy5fYm9keXx8KHRoaXMuX2JvZHk9YS5nZXRCb2R5KCkpLHRoaXMuX2JvZHkuYWRkQ2xhc3MoImhhcy1hbGVydHMiKSxjLmVhY2godGhpcy5fYWRkQ2xvc2VCdXR0b24sdGhpcykpfSxfYWRkQ2xvc2VCdXR0b246ZnVuY3Rpb24oYyl7ITEhPT10aGlzLl9jbG9zZVRleHQ/dGhpcy5fY2xvc2VUZXh0PXRoaXMuX2Nsb3NlVGV4dHx8J0Nsb3NlJzoodGhpcy5fdXNlQ2xvc2VCdXR0b249ITEsdGhpcy5fY2xvc2VUZXh0PSIiKTtpZihjPXRoaXMuX3VzZUNsb3NlQnV0dG9uP2MuYXBwZW5kKCdceDNjYnV0dG9uIGNsYXNzXHgzZCJidG4gYnRuLWRlZmF1bHQgc3VibWl0IHBvcHVwLWFsZXJ0LWNsb3NlIlx4M2UnK3RoaXMuX2Nsb3NlVGV4dCsiXHgzYy9idXR0b25ceDNlIik6Yy5vbmUoIi5jbG9zZSIpKWMub24oImNsaWNrIiwKdGhpcy5jbG9zZSx0aGlzKX0sX2FkZFRvZ2dsZUJ1dHRvbjpmdW5jdGlvbihjKXtpZih0aGlzLl91c2VUb2dnbGVCdXR0b24pe3RoaXMuX2hpZGVUZXh0PXRoaXMuX3RvZ2dsZVRleHQuaGlkZXx8J0hpZGUnO3RoaXMuX3Nob3dUZXh0PXRoaXMuX3RvZ2dsZVRleHQuc2hvd3x8J1Nob3cnO3ZhciBiPXEuY3JlYXRlKCdceDNjYSBjbGFzc1x4M2QidG9nZ2xlLWJ1dHRvbiIgaHJlZlx4M2QiamF2YXNjcmlwdDo7Ilx4M2VceDNjc3Bhblx4M2UnK3RoaXMuX2hpZGVUZXh0KyJceDNjL3NwYW5ceDNlXHgzYy9hXHgzZSIpLGc9Yi5vbmUoInNwYW4iKSxlPTAsaz10aGlzLl9oaWRlVGV4dCxtPXRoaXMuX3Nob3dUZXh0O2Iub24oImNsaWNrIixmdW5jdGlvbihwKXtwPW07MD09PWU/KHA9ayxlPTEpOmU9MDtjLnRvZ2dsZSgpO2cudGV4dChwKX0pO2MuYXBwZW5kKGIpfX0sX2FmdGVyTm90aWNlU2hvdzpmdW5jdGlvbihjKXt2YXIgYj0KdGhpcztiLl9wcmV2ZW50SGlkZSgpO3ZhciBnPWIuX25vdGljZTtpZihiLl91c2VBbmltYXRpb24pe2M9Yi5fYW5pbWF0aW9uQ29uZmlnO3ZhciBlPWMubGVmdCxrPWMudG9wO2V8fChrPUUucmVnaW9uKHEuZ2V0RE9NTm9kZShnKSksZT1FLndpbldpZHRoKCkvMi1rLndpZHRoLzIsaz0tay5oZWlnaHQsYy5sZWZ0PWUrInB4Iik7Zy5zZXRYWShbZSxrXSk7Zy50cmFuc2l0aW9uKGIuX2FuaW1hdGlvbkNvbmZpZyxmdW5jdGlvbigpe2IuX2hpZGVIYW5kbGU9YS5sYXRlcihiLl90aW1lb3V0LGcsImhpZGUiKX0pfWVsc2UtMTxiLl90aW1lb3V0JiYoYi5faGlkZUhhbmRsZT1hLmxhdGVyKGIuX3RpbWVvdXQsZywiaGlkZSIpKTtMaWZlcmF5LmZpcmUoIm5vdGljZVNob3ciLHtub3RpY2U6Yix1c2VBbmltYXRpb246Yi5fdXNlQW5pbWF0aW9ufSl9LF9iZWZvcmVOb3RpY2VIaWRlOmZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMsZztiLl91c2VBbmltYXRpb24mJihjPWEubWVyZ2UoYi5fYW5pbWF0aW9uQ29uZmlnLAp7dG9wOi1iLl9ub3RpY2UuZ2V0KCJvZmZzZXRIZWlnaHQiKSsicHgifSksYi5fbm90aWNlLnRyYW5zaXRpb24oYyxmdW5jdGlvbigpe2IuX25vdGljZS50b2dnbGUoITEpfSksZz1uZXcgdC5IYWx0KG51bGwpKTtMaWZlcmF5LmZpcmUoIm5vdGljZUhpZGUiLHtub3RpY2U6Yix1c2VBbmltYXRpb246Yi5fdXNlQW5pbWF0aW9ufSk7cmV0dXJuIGd9LF9iZWZvcmVOb3RpY2VTaG93OmZ1bmN0aW9uKGMpe3RoaXMuX25vdGljZS50b2dnbGUoITApfSxfY3JlYXRlSFRNTDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuX2NvbnRlbnQsYj1hLm9uZSh0aGlzLl9ub2RlKSxnPWJ8fHEuY3JlYXRlKCdceDNjZGl2IGNsYXNzXHgzZCJhbGVydCBhbGVydC13YXJuaW5nIiBkeW5hbWljXHgzZCJ0cnVlIlx4M2VceDNjL2Rpdlx4M2UnKTtjJiZnLmh0bWwoYyk7dGhpcy5fbm90aWNlQ2xhc3Muc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUsayl7Zy5hZGRDbGFzcyhlKX0pO3RoaXMuX2FkZENsb3NlQnV0dG9uKGcpOwp0aGlzLl9hZGRUb2dnbGVCdXR0b24oZyk7KCFifHxiJiYhYi5pbkRvYygpKSYmdGhpcy5fYm9keS5wcmVwZW5kKGcpO3RoaXMuX2JvZHkuYWRkQ2xhc3MoImhhcy1hbGVydHMiKTt0LmJlZm9yZSh0aGlzLl9iZWZvcmVOb3RpY2VIaWRlLGcsImhpZGUiLHRoaXMpO3QuYmVmb3JlKHRoaXMuX2JlZm9yZU5vdGljZVNob3csZywic2hvdyIsdGhpcyk7dC5hZnRlcih0aGlzLl9hZnRlck5vdGljZVNob3csZywic2hvdyIsdGhpcyk7dGhpcy5fbm90aWNlPWd9LF9wcmV2ZW50SGlkZTpmdW5jdGlvbigpe3RoaXMuX2hpZGVIYW5kbGUmJih0aGlzLl9oaWRlSGFuZGxlLmNhbmNlbCgpLHRoaXMuX2hpZGVIYW5kbGU9bnVsbCl9fTtMaWZlcmF5Lk5vdGljZT1kfSwiIix7cmVxdWlyZXM6WyJhdWktYmFzZSJdfSk7CkFVSS5hZGQoImxpZmVyYXktcG9sbGVyIixmdW5jdGlvbihhKXt2YXIgRT1hLk9iamVjdCxxPUxpZmVyYXkuVXRpbC5yYW5kb21JbnQoKSx0PSExLGY9bnVsbCxkPSExLGM9MCxiPTAsZz1bMSwyLDMsNCw1LDcsMTBdLGU9ITEsaz0hMSxtPWcubGVuZ3RoLTEscD17fSxzPXticm93c2VyS2V5OnEsY29tcGFueUlkOnRoZW1lRGlzcGxheS5nZXRDb21wYW55SWQoKSxwb3J0bGV0SWRzTWFwOnAsc3RhcnRQb2xsaW5nOiEwfSxsPW51bGwsaD17fSx1PWdbMF0sdz1bXSx6PSExLEE9bnVsbCxIPXRoZW1lRGlzcGxheS5nZXRQYXRoQ29udGV4dCgpKyIvcG9sbGVyIixGPUgrIi9yZWNlaXZlIixCPUgrIi9zZW5kIixJPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KEEpO0E9bnVsbH0sTT1mdW5jdGlvbigpe0koKTt0JiYobmEuaXNTdXBwb3J0c0NvbWV0KCk/SigpOkE9c2V0VGltZW91dChKLG5hLmdldERlbGF5KCkpKX0sRD1mdW5jdGlvbihmYSxpYSl7dmFyIFo9SlNPTi5wYXJzZShpYS5yZXNwb25zZVRleHQpLAplYT0hMTtpZihBcnJheS5pc0FycmF5KFopKXtmb3IodmFyIG9hPVouc2hpZnQoKSxBYT0wO0FhPFoubGVuZ3RoO0FhKyspe3ZhciBwYT1aW0FhXS5wYXlsb2FkLEZhPXBhLmRhdGEsRWE9cGEucG9ydGxldElkLFdhPWhbRWFdO1dhJiYoRWE9cFtFYV0sRmEmJkVhJiYoRmEuaW5pdGlhbFJlcXVlc3Q9V2EuaW5pdGlhbFJlcXVlc3QpLFdhLmxpc3RlbmVyLmNhbGwoV2Euc2NvcGV8fG5hLEZhLHBhLmNodW5rSWQpLEZhJiZGYS5wb2xsZXJIaW50SGlnaENvbm5lY3Rpdml0eSYmKHU9Z1swXSxiPTApLFdhLmluaXRpYWxSZXF1ZXN0JiZFYSYmKGVhPSEwLFdhLmluaXRpYWxSZXF1ZXN0PSExKSl9InN0YXJ0UG9sbGluZyJpbiBzJiZkZWxldGUgcy5zdGFydFBvbGxpbmc7ZWEmJlYoKTtvYS5zdXNwZW5kUG9sbGluZz8oZT0hMCxJKCkpOihlPSExLE0oKSl9fSxKPWZ1bmN0aW9uKCl7aWYoIXomJiFlKXtzLnVzZXJJZD1mO3MudGltZXN0YW1wPShuZXcgRGF0ZSkuZ2V0VGltZSgpO0UuZWFjaChoLApZKTt2YXIgZmE9SlNPTi5zdHJpbmdpZnkoW3NdKTthLmlvKEYse2RhdGE6e3BvbGxlclJlcXVlc3Q6ZmF9LG1ldGhvZDphLmNvbmZpZy5pby5tZXRob2Qsb246e3N1Y2Nlc3M6RH19KX19LFA9ZnVuY3Rpb24oKXtrPSExO1YoKX0sVj1mdW5jdGlvbigpe2lmKHQmJiFrJiZ3Lmxlbmd0aCYmIXomJiFlKXtrPSEwO3ZhciBmYT13LnNoaWZ0KCk7cy51c2VySWQ9ZjtzLnRpbWVzdGFtcD0obmV3IERhdGUpLmdldFRpbWUoKTtFLmVhY2goaCxZKTtmYT1KU09OLnN0cmluZ2lmeShbc10uY29uY2F0KGZhKSk7YS5pbyhCLHtkYXRhOntwb2xsZXJSZXF1ZXN0OmZhfSxtZXRob2Q6YS5jb25maWcuaW8ubWV0aG9kLG9uOntjb21wbGV0ZTpQfX0pfX0sWT1mdW5jdGlvbihmYSxpYSl7cFtpYV09ZmEuaW5pdGlhbFJlcXVlc3R9LG5hPXtpbml0OmZ1bmN0aW9uKGZhKXt0aGlzLnNldEVuY3J5cHRlZFVzZXJJZChmYS5lbmNyeXB0ZWRVc2VySWQpO3RoaXMuc2V0U3VwcG9ydHNDb21ldChmYS5zdXBwb3J0c0NvbWV0KX0sCmFkZExpc3RlbmVyOmZ1bmN0aW9uKGZhLGlhLFope2hbZmFdPXtpbml0aWFsUmVxdWVzdDohMCxsaXN0ZW5lcjppYSxzY29wZTpafTt0fHwodD0hMCxKKCkpfSxjYW5jZWxDdXN0b21EZWxheTpmdW5jdGlvbigpe2w9bnVsbH0sZ2V0RGVsYXk6ZnVuY3Rpb24oKXtudWxsIT09bD91PWw6Yjw9bSYmKHU9Z1tiXSxjKyssMz09YyYmKGIrKyxjPTApKTtyZXR1cm4gMUUzKnV9LGdldFJlY2VpdmVVcmw6ZnVuY3Rpb24oKXtyZXR1cm4gRn0sZ2V0U2VuZFVybDpmdW5jdGlvbigpe3JldHVybiBCfSxpc1N1cHBvcnRzQ29tZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZH0scHJvY2Vzc1Jlc3BvbnNlOkQscmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oZmEpe2ZhIGluIGgmJmRlbGV0ZSBoW2ZhXTswPT09RS5rZXlzKGgpLmxlbmd0aCYmKHQ9ITEsSSgpKX0scmVzdW1lOmZ1bmN0aW9uKCl7ej0hMTtNKCl9LHNldEN1c3RvbURlbGF5OmZ1bmN0aW9uKGZhKXtsPW51bGw9PT1mYT9mYTpmYS8xRTN9LHNldERlbGF5OmZ1bmN0aW9uKGZhKXt1PQpmYS8xRTN9LHNldEVuY3J5cHRlZFVzZXJJZDpmdW5jdGlvbihmYSl7Zj1mYX0sc2V0U3VwcG9ydHNDb21ldDpmdW5jdGlvbihmYSl7ZD1mYX0sc2V0VXJsOmZ1bmN0aW9uKGZhKXtIPWZhfSxzdWJtaXRSZXF1ZXN0OmZ1bmN0aW9uKGZhLGlhLFope2lmKCFlJiZmYSBpbiBoKXtmb3IodmFyIGVhIGluIGlhKWlmKGlhLmhhc093blByb3BlcnR5KGVhKSl7dmFyIG9hPWlhW2VhXTtvYS5yZXBsYWNlJiYob2E9b2EucmVwbGFjZSgieyIsIlskT1BFTl9DVVJMWV9CUkFDRSRdIiksb2E9b2EucmVwbGFjZSgifSIsIlskQ0xPU0VfQ1VSTFlfQlJBQ0UkXSIpLGlhW2VhXT1vYSl9ZmE9e2RhdGE6aWEscG9ydGxldElkOmZhfTtaJiYoZmEuY2h1bmtJZD1aKTt3LnB1c2goZmEpO1YoKX19LHN1c3BlbmQ6ZnVuY3Rpb24oKXtJKCk7ej0hMH0sdXJsOkh9O2EuZ2V0V2luKCkub24oImZvY3VzIixmdW5jdGlvbihmYSl7cy5zdGFydFBvbGxpbmc9ITA7ZT0hMTtNKCl9KTtMaWZlcmF5LlBvbGxlcj1uYX0sCiIiLHtyZXF1aXJlczpbImF1aS1iYXNlIiwiaW8iLCJqc29uIl19KTsKWVVJLmFkZCgiYXN5bmMtcXVldWUiLGZ1bmN0aW9uKGEsRSl7YS5Bc3luY1F1ZXVlPWZ1bmN0aW9uKCl7dGhpcy5faW5pdCgpO3RoaXMuYWRkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIHE9YS5Bc3luY1F1ZXVlLHQ9YS5MYW5nLmlzT2JqZWN0LGY9YS5MYW5nLmlzRnVuY3Rpb247cS5kZWZhdWx0cz1hLm1peCh7YXV0b0NvbnRpbnVlOiEwLGl0ZXJhdGlvbnM6MSx0aW1lb3V0OjEwLHVudGlsOmZ1bmN0aW9uKCl7dGhpcy5pdGVyYXRpb25zfD0wO3JldHVybiAwPj10aGlzLml0ZXJhdGlvbnN9fSxhLmNvbmZpZy5xdWV1ZURlZmF1bHRzfHx7fSk7YS5leHRlbmQocSxhLkV2ZW50VGFyZ2V0LHtfcnVubmluZzohMSxfaW5pdDpmdW5jdGlvbigpe2EuRXZlbnRUYXJnZXQuY2FsbCh0aGlzLHtwcmVmaXg6InF1ZXVlIixlbWl0RmFjYWRlOiEwfSk7dGhpcy5fcT1bXTt0aGlzLmRlZmF1bHRzPXt9O3RoaXMuX2luaXRFdmVudHMoKX0sX2luaXRFdmVudHM6ZnVuY3Rpb24oKXt0aGlzLnB1Ymxpc2goe2V4ZWN1dGU6e2RlZmF1bHRGbjp0aGlzLl9kZWZFeGVjRm4sCmVtaXRGYWNhZGU6ITB9LHNoaWZ0OntkZWZhdWx0Rm46dGhpcy5fZGVmU2hpZnRGbixlbWl0RmFjYWRlOiEwfSxhZGQ6e2RlZmF1bHRGbjp0aGlzLl9kZWZBZGRGbixlbWl0RmFjYWRlOiEwfSxwcm9tb3RlOntkZWZhdWx0Rm46dGhpcy5fZGVmUHJvbW90ZUZuLGVtaXRGYWNhZGU6ITB9LHJlbW92ZTp7ZGVmYXVsdEZuOnRoaXMuX2RlZlJlbW92ZUZuLGVtaXRGYWNhZGU6ITB9fSl9LG5leHQ6ZnVuY3Rpb24oKXtmb3IodmFyIGQ7dGhpcy5fcS5sZW5ndGg7KWlmKChkPXRoaXMuX3FbMF09dGhpcy5fcHJlcGFyZSh0aGlzLl9xWzBdKSkmJmQudW50aWwoKSl0aGlzLmZpcmUoInNoaWZ0Iix7Y2FsbGJhY2s6ZH0pLGQ9bnVsbDtlbHNlIGJyZWFrO3JldHVybiBkfHxudWxsfSxfZGVmU2hpZnRGbjpmdW5jdGlvbihkKXswPT09dGhpcy5pbmRleE9mKGQuY2FsbGJhY2spJiZ0aGlzLl9xLnNoaWZ0KCl9LF9wcmVwYXJlOmZ1bmN0aW9uKGQpe2lmKGYoZCkmJmQuX3ByZXBhcmVkKXJldHVybiBkOwpkPWEubWVyZ2UocS5kZWZhdWx0cyx7Y29udGV4dDp0aGlzLGFyZ3M6W10sX3ByZXBhcmVkOiEwfSx0aGlzLmRlZmF1bHRzLGYoZCk/e2ZuOmR9OmQpO3ZhciBjPWEuYmluZChmdW5jdGlvbigpe2MuX3J1bm5pbmd8fGMuaXRlcmF0aW9ucy0tO2YoYy5mbikmJmMuZm4uYXBwbHkoYy5jb250ZXh0fHxhLGEuQXJyYXkoYy5hcmdzKSl9LHRoaXMpO3JldHVybiBhLm1peChjLGQpfSxydW46ZnVuY3Rpb24oKXt2YXIgZCxjPSEwO2lmKHRoaXMuX2V4ZWN1dGluZylyZXR1cm4gdGhpcy5fcnVubmluZz0hMCx0aGlzO2ZvcihkPXRoaXMubmV4dCgpO2QmJiF0aGlzLmlzUnVubmluZygpJiYoYz0wPmQudGltZW91dD90aGlzLl9leGVjdXRlKGQpOnRoaXMuX3NjaGVkdWxlKGQpLGMpO2Q9dGhpcy5uZXh0KCkpO2R8fHRoaXMuZmlyZSgiY29tcGxldGUiKTtyZXR1cm4gdGhpc30sX2V4ZWN1dGU6ZnVuY3Rpb24oZCl7dGhpcy5fcnVubmluZz1kLl9ydW5uaW5nPSEwO3RoaXMuX2V4ZWN1dGluZz1kO2QuaXRlcmF0aW9ucy0tOwp0aGlzLmZpcmUoImV4ZWN1dGUiLHtjYWxsYmFjazpkfSk7dmFyIGM9dGhpcy5fcnVubmluZyYmZC5hdXRvQ29udGludWU7dGhpcy5fZXhlY3V0aW5nPXRoaXMuX3J1bm5pbmc9ZC5fcnVubmluZz0hMTtyZXR1cm4gY30sX3NjaGVkdWxlOmZ1bmN0aW9uKGQpe3RoaXMuX3J1bm5pbmc9YS5sYXRlcihkLnRpbWVvdXQsdGhpcyxmdW5jdGlvbigpe3RoaXMuX2V4ZWN1dGUoZCkmJnRoaXMucnVuKCl9KTtyZXR1cm4hMX0saXNSdW5uaW5nOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9ydW5uaW5nfSxfZGVmRXhlY0ZuOmZ1bmN0aW9uKGQpe2QuY2FsbGJhY2soKX0sYWRkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGQiLHtjYWxsYmFja3M6YS5BcnJheShhcmd1bWVudHMsMCwhMCl9KTtyZXR1cm4gdGhpc30sX2RlZkFkZEZuOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuX3EsYj1bXTthLkFycmF5LmVhY2goZC5jYWxsYmFja3MsZnVuY3Rpb24oZyl7dChnKSYmKGMucHVzaChnKSxiLnB1c2goZykpfSk7CmQuYWRkZWQ9Yn0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLl9ydW5uaW5nJiZ0KHRoaXMuX3J1bm5pbmcpJiZ0aGlzLl9ydW5uaW5nLmNhbmNlbCgpO3RoaXMuX3J1bm5pbmc9ITE7cmV0dXJuIHRoaXN9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9xPVtdO3RoaXMuX3J1bm5pbmcmJnQodGhpcy5fcnVubmluZykmJih0aGlzLl9ydW5uaW5nLmNhbmNlbCgpLHRoaXMuX3J1bm5pbmc9ITEpO3RoaXMuX2V4ZWN1dGluZ3x8dGhpcy5ydW4oKTtyZXR1cm4gdGhpc30saW5kZXhPZjpmdW5jdGlvbihkKXtmb3IodmFyIGM9MCxiPXRoaXMuX3EubGVuZ3RoLGc7YzxiOysrYylpZihnPXRoaXMuX3FbY10sZz09PWR8fGcuaWQ9PT1kKXJldHVybiBjO3JldHVybi0xfSxnZXRDYWxsYmFjazpmdW5jdGlvbihkKXtkPXRoaXMuaW5kZXhPZihkKTtyZXR1cm4tMTxkP3RoaXMuX3FbZF06bnVsbH0scHJvbW90ZTpmdW5jdGlvbihkKXt2YXIgYz17Y2FsbGJhY2s6ZH0sYjt0aGlzLmlzUnVubmluZygpP2I9dGhpcy5hZnRlcigic2hpZnQiLApmdW5jdGlvbigpe3RoaXMuZmlyZSgicHJvbW90ZSIsYyk7Yi5kZXRhY2goKX0sdGhpcyk6dGhpcy5maXJlKCJwcm9tb3RlIixjKTtyZXR1cm4gdGhpc30sX2RlZlByb21vdGVGbjpmdW5jdGlvbihkKXt2YXIgYz10aGlzLmluZGV4T2YoZC5jYWxsYmFjayksYz0tMTxjP3RoaXMuX3Euc3BsaWNlKGMsMSlbMF06bnVsbDsoZC5wcm9tb3RlZD1jKSYmdGhpcy5fcS51bnNoaWZ0KGMpfSxyZW1vdmU6ZnVuY3Rpb24oZCl7dmFyIGM9e2NhbGxiYWNrOmR9LGI7dGhpcy5pc1J1bm5pbmcoKT9iPXRoaXMuYWZ0ZXIoInNoaWZ0IixmdW5jdGlvbigpe3RoaXMuZmlyZSgicmVtb3ZlIixjKTtiLmRldGFjaCgpfSx0aGlzKTp0aGlzLmZpcmUoInJlbW92ZSIsYyk7cmV0dXJuIHRoaXN9LF9kZWZSZW1vdmVGbjpmdW5jdGlvbihkKXt2YXIgYz10aGlzLmluZGV4T2YoZC5jYWxsYmFjayk7ZC5yZW1vdmVkPS0xPGM/dGhpcy5fcS5zcGxpY2UoYywxKVswXTpudWxsfSxzaXplOmZ1bmN0aW9uKCl7dGhpcy5pc1J1bm5pbmcoKXx8CnRoaXMubmV4dCgpO3JldHVybiB0aGlzLl9xLmxlbmd0aH19KX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiZXZlbnQtY3VzdG9tIl19KTsKWVVJLmFkZCgiYmFzZS1idWlsZCIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKGssbSxwKXtwW2tdJiYobVtrXT0obVtrXXx8W10pLmNvbmNhdChwW2tdKSl9ZnVuY3Rpb24gdChrLG0scCl7cC5fQVRUUl9DRkcmJihtLl9BVFRSX0NGR19IQVNIPW51bGwscS5hcHBseShudWxsLGFyZ3VtZW50cykpfWZ1bmN0aW9uIGYoayxtLHApe2QubW9kaWZ5QXR0cnMobSxwLkFUVFJTKX12YXIgZD1hLkJhc2VDb3JlLGM9YS5CYXNlLGI9YS5MYW5nLGc9WyJfUExVRyIsIl9VTlBMVUciXSxlO2MuX2J1aWxkPWZ1bmN0aW9uKGssbSxwLHMsbCxoKXt2YXIgdT1jLl9idWlsZCx3PXUuX2N0b3IobSxoKTtoPXUuX2NmZyhtLGgscCk7dmFyIHo9dS5fbWl4Q3VzdCxBPXcuX3l1aWJ1aWxkLmR5bmFtaWMsSCxGLEIsSSxNLEQ7SD0wO2ZvcihGPXAubGVuZ3RoO0g8RjtIKyspQj1wW0hdLEk9Qi5wcm90b3R5cGUsTT1JLmluaXRpYWxpemVyLEQ9SS5kZXN0cnVjdG9yLGRlbGV0ZSBJLmluaXRpYWxpemVyLGRlbGV0ZSBJLmRlc3RydWN0b3IsCmEubWl4KHcsQiwhMCxudWxsLDEpLHoodyxCLGgpLE0mJihJLmluaXRpYWxpemVyPU0pLEQmJihJLmRlc3RydWN0b3I9RCksdy5feXVpYnVpbGQuZXh0cy5wdXNoKEIpO3MmJmEubWl4KHcucHJvdG90eXBlLHMsITApO2wmJihhLm1peCh3LHUuX2NsZWFuKGwsaCksITApLHoodyxsLGgpKTt3LnByb3RvdHlwZS5oYXNJbXBsPXUuX2ltcGw7QSYmKHcuTkFNRT1rLHcucHJvdG90eXBlLmNvbnN0cnVjdG9yPXcsdy5tb2RpZnlBdHRycz1tLm1vZGlmeUF0dHJzKTtyZXR1cm4gd307ZT1jLl9idWlsZDthLm1peChlLHtfbWl4Q3VzdDpmdW5jdGlvbihrLG0scCl7dmFyIHMsbCxoLHU7cCYmKHM9cC5hZ2dyZWdhdGVzLGw9cC5jdXN0b20saD1wLnN0YXRpY3MpO2gmJmEubWl4KGssbSwhMCxoKTtpZihzKWZvcih1PTAsaD1zLmxlbmd0aDt1PGg7dSsrKXA9c1t1XSwhay5oYXNPd25Qcm9wZXJ0eShwKSYmbS5oYXNPd25Qcm9wZXJ0eShwKSYmKGtbcF09Yi5pc0FycmF5KG1bcF0pP1tdOnt9KSxhLmFnZ3JlZ2F0ZShrLAptLCEwLFtwXSk7aWYobClmb3IodSBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkodSkpbFt1XSh1LGssbSl9LF90bXBsOmZ1bmN0aW9uKGspe2Z1bmN0aW9uIG0oKXttLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfWEuZXh0ZW5kKG0sayk7cmV0dXJuIG19LF9pbXBsOmZ1bmN0aW9uKGspe3ZhciBtPXRoaXMuX2dldENsYXNzZXMoKSxwLHMsbCxoLHU7cD0wO2ZvcihzPW0ubGVuZ3RoO3A8cztwKyspaWYobD1tW3BdLGwuX3l1aWJ1aWxkKWZvcihsPWwuX3l1aWJ1aWxkLmV4dHMsaD1sLmxlbmd0aCx1PTA7dTxoO3UrKylpZihsW3VdPT09aylyZXR1cm4hMDtyZXR1cm4hMX0sX2N0b3I6ZnVuY3Rpb24oayxtKXt2YXIgcD1tJiYhMT09PW0uZHluYW1pYz8hMTohMCxzPXA/ZS5fdG1wbChrKTprLGw9cy5feXVpYnVpbGQ7bHx8KGw9cy5feXVpYnVpbGQ9e30pO2wuaWQ9bC5pZHx8bnVsbDtsLmV4dHM9bC5leHRzfHxbXTtsLmR5bmFtaWM9cDtyZXR1cm4gc30sCl9jZmc6ZnVuY3Rpb24oayxtLHApe2Zvcih2YXIgcz1bXSxsPXt9LGg9W10sdT1tJiZtLmFnZ3JlZ2F0ZXMsdz1tJiZtLmN1c3RvbSx6PW0mJm0uc3RhdGljcyxBPWssSCxGO0EmJkEucHJvdG90eXBlOyl7aWYoaz1BLl9idWlsZENmZylrLmFnZ3JlZ2F0ZXMmJihzPXMuY29uY2F0KGsuYWdncmVnYXRlcykpLGsuY3VzdG9tJiZhLm1peChsLGsuY3VzdG9tLCEwKSxrLnN0YXRpY3MmJihoPWguY29uY2F0KGsuc3RhdGljcykpO0E9QS5zdXBlcmNsYXNzP0Euc3VwZXJjbGFzcy5jb25zdHJ1Y3RvcjpudWxsfWlmKHApZm9yKEg9MCxGPXAubGVuZ3RoO0g8RjtIKyspaWYoQT1wW0hdLGs9QS5fYnVpbGRDZmcpay5hZ2dyZWdhdGVzJiYocz1zLmNvbmNhdChrLmFnZ3JlZ2F0ZXMpKSxrLmN1c3RvbSYmYS5taXgobCxrLmN1c3RvbSwhMCksay5zdGF0aWNzJiYoaD1oLmNvbmNhdChrLnN0YXRpY3MpKTt1JiYocz1zLmNvbmNhdCh1KSk7dyYmYS5taXgobCxtLmNmZ0J1aWxkLCEwKTt6JiYoaD1oLmNvbmNhdCh6KSk7CnJldHVybnthZ2dyZWdhdGVzOnMsY3VzdG9tOmwsc3RhdGljczpofX0sX2NsZWFuOmZ1bmN0aW9uKGssbSl7dmFyIHAscyxsLGg9YS5tZXJnZShrKSx1PW0uYWdncmVnYXRlcztzPW0uY3VzdG9tO2ZvcihwIGluIHMpaC5oYXNPd25Qcm9wZXJ0eShwKSYmZGVsZXRlIGhbcF07cz0wO2ZvcihsPXUubGVuZ3RoO3M8bDtzKyspcD11W3NdLGguaGFzT3duUHJvcGVydHkocCkmJmRlbGV0ZSBoW3BdO3JldHVybiBofX0pO2MuYnVpbGQ9ZnVuY3Rpb24oayxtLHAscyl7cmV0dXJuIGUoayxtLHAsbnVsbCxudWxsLHMpfTtjLmNyZWF0ZT1mdW5jdGlvbihrLG0scCxzLGwpe3JldHVybiBlKGssbSxwLHMsbCl9O2MubWl4PWZ1bmN0aW9uKGssbSl7ay5fQ0FDSEVEX0NMQVNTX0RBVEEmJihrLl9DQUNIRURfQ0xBU1NfREFUQT1udWxsKTtyZXR1cm4gZShudWxsLGssbSxudWxsLG51bGwse2R5bmFtaWM6ITF9KX07ZC5fYnVpbGRDZmc9e2FnZ3JlZ2F0ZXM6Zy5jb25jYXQoKSxjdXN0b206e0FUVFJTOmYsCl9BVFRSX0NGRzp0LF9OT05fQVRUUlNfQ0ZHOnF9fTtjLl9idWlsZENmZz17YWdncmVnYXRlczpnLmNvbmNhdCgpLGN1c3RvbTp7QVRUUlM6ZixfQVRUUl9DRkc6dCxfTk9OX0FUVFJTX0NGRzpxfX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImJhc2UtYmFzZSJdfSk7CllVSS5hZGQoImNvb2tpZSIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKGwpe3Rocm93IG5ldyBUeXBlRXJyb3IobCk7fWZ1bmN0aW9uIHQobCl7YihsKSYmIiIhPT1sfHxxKCJDb29raWUgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4iKX1mdW5jdGlvbiBmKGwpe2IobCkmJiIiIT09bHx8cSgiU3ViY29va2llIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuIil9dmFyIGQ9YS5MYW5nLGM9YS5PYmplY3QsYj1kLmlzU3RyaW5nLGc9ZC5pc09iamVjdCxlPWQuaXNVbmRlZmluZWQsaz1kLmlzRnVuY3Rpb24sbT1lbmNvZGVVUklDb21wb25lbnQscD1kZWNvZGVVUklDb21wb25lbnQscz1hLmNvbmZpZy5kb2M7YS5Db29raWU9e19jcmVhdGVDb29raWVTdHJpbmc6ZnVuY3Rpb24obCxoLHUsdyl7dz13fHx7fTtsPW0obCkrIlx4M2QiKyh1P20oaCk6aCk7aD13LmV4cGlyZXM7dT13LnBhdGg7dmFyIHo9dy5kb21haW47Zyh3KSYmKGggaW5zdGFuY2VvZiBEYXRlJiYobCs9CiI7IGV4cGlyZXNceDNkIitoLnRvVVRDU3RyaW5nKCkpLGIodSkmJiIiIT09dSYmKGwrPSI7IHBhdGhceDNkIit1KSxiKHopJiYiIiE9PXomJihsKz0iOyBkb21haW5ceDNkIit6KSwhMD09PXcuc2VjdXJlJiYobCs9Ijsgc2VjdXJlIikpO3JldHVybiBsfSxfY3JlYXRlQ29va2llSGFzaFN0cmluZzpmdW5jdGlvbihsKXtnKGwpfHxxKCJDb29raWUuX2NyZWF0ZUNvb2tpZUhhc2hTdHJpbmcoKTogQXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QuIik7dmFyIGg9W107Yy5lYWNoKGwsZnVuY3Rpb24odSx3KXtrKHUpfHxlKHUpfHxoLnB1c2gobSh3KSsiXHgzZCIrbShTdHJpbmcodSkpKX0pO3JldHVybiBoLmpvaW4oIlx4MjYiKX0sX3BhcnNlQ29va2llSGFzaDpmdW5jdGlvbihsKXt2YXIgaD1sLnNwbGl0KCJceDI2IiksdT1udWxsLHc9e307aWYobC5sZW5ndGgpe2w9MDtmb3IodmFyIHo9aC5sZW5ndGg7bDx6O2wrKyl1PWhbbF0uc3BsaXQoIlx4M2QiKSx3W3AodVswXSldPXAodVsxXSl9cmV0dXJuIHd9LApfcGFyc2VDb29raWVTdHJpbmc6ZnVuY3Rpb24obCxoLHUpe3ZhciB3PXt9O2lmKGIobCkmJjA8bC5sZW5ndGgpe2g9ITE9PT1oP2Z1bmN0aW9uKE0pe3JldHVybiBNfTpwO2w9bC5zcGxpdCgvO1xzL2cpO2Zvcih2YXIgej1udWxsLEE9bnVsbCxIPW51bGwsRj0wLEI9bC5sZW5ndGg7RjxCO0YrKyl7SD1sW0ZdLm1hdGNoKC8oW149XSspPS9pKTtpZihIIGluc3RhbmNlb2YgQXJyYXkpdHJ5e3o9cChIWzFdKSxBPWgobFtGXS5zdWJzdHJpbmcoSFsxXS5sZW5ndGgrMSkpfWNhdGNoKEkpe31lbHNlIHo9cChsW0ZdKSxBPSIiOyFlKHUpJiZ1LnJldmVyc2VDb29raWVMb2FkaW5nP2Uod1t6XSkmJih3W3pdPUEpOndbel09QX19cmV0dXJuIHd9LF9zZXREb2M6ZnVuY3Rpb24obCl7cz1sfSxleGlzdHM6ZnVuY3Rpb24obCl7dChsKTtyZXR1cm4gdGhpcy5fcGFyc2VDb29raWVTdHJpbmcocy5jb29raWUsITApLmhhc093blByb3BlcnR5KGwpfSxnZXQ6ZnVuY3Rpb24obCxoKXt0KGwpO3ZhciB1LAp3O2soaCk/KHc9aCxoPXt9KTpnKGgpP3c9aC5jb252ZXJ0ZXI6aD17fTt1PXRoaXMuX3BhcnNlQ29va2llU3RyaW5nKHMuY29va2llLCFoLnJhdyxoKVtsXTtyZXR1cm4gZSh1KT9udWxsOmsodyk/dyh1KTp1fSxnZXRTdWI6ZnVuY3Rpb24obCxoLHUsdyl7bD10aGlzLmdldFN1YnMobCx3KTtyZXR1cm4gbnVsbCE9PWw/KGYoaCksZShsW2hdKT9udWxsOmsodSk/dShsW2hdKTpsW2hdKTpudWxsfSxnZXRTdWJzOmZ1bmN0aW9uKGwsaCl7dChsKTt2YXIgdT10aGlzLl9wYXJzZUNvb2tpZVN0cmluZyhzLmNvb2tpZSwhMSxoKTtyZXR1cm4gYih1W2xdKT90aGlzLl9wYXJzZUNvb2tpZUhhc2godVtsXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGwsaCl7dChsKTtoPWEubWVyZ2UoaHx8e30se2V4cGlyZXM6bmV3IERhdGUoMCl9KTtyZXR1cm4gdGhpcy5zZXQobCwiIixoKX0scmVtb3ZlU3ViOmZ1bmN0aW9uKGwsaCx1KXt0KGwpO2YoaCk7dT11fHx7fTt2YXIgdz10aGlzLmdldFN1YnMobCk7CmlmKGcodykmJncuaGFzT3duUHJvcGVydHkoaCkpe2RlbGV0ZSB3W2hdO2lmKHUucmVtb3ZlSWZFbXB0eSl7Zm9yKHZhciB6IGluIHcpaWYody5oYXNPd25Qcm9wZXJ0eSh6KSYmIWsod1t6XSkmJiFlKHdbel0pKXJldHVybiB0aGlzLnNldFN1YnMobCx3LHUpO3JldHVybiB0aGlzLnJlbW92ZShsLHUpfXJldHVybiB0aGlzLnNldFN1YnMobCx3LHUpfXJldHVybiIifSxzZXQ6ZnVuY3Rpb24obCxoLHUpe3QobCk7ZShoKSYmcSgiQ29va2llLnNldCgpOiBWYWx1ZSBjYW5ub3QgYmUgdW5kZWZpbmVkLiIpO3U9dXx8e307bD10aGlzLl9jcmVhdGVDb29raWVTdHJpbmcobCxoLCF1LnJhdyx1KTtyZXR1cm4gcy5jb29raWU9bH0sc2V0U3ViOmZ1bmN0aW9uKGwsaCx1LHcpe3QobCk7ZihoKTtlKHUpJiZxKCJDb29raWUuc2V0U3ViKCk6IFN1YmNvb2tpZSB2YWx1ZSBjYW5ub3QgYmUgdW5kZWZpbmVkLiIpO3ZhciB6PXRoaXMuZ2V0U3VicyhsKTtnKHopfHwoej17fSk7eltoXT11O3JldHVybiB0aGlzLnNldFN1YnMobCwKeix3KX0sc2V0U3ViczpmdW5jdGlvbihsLGgsdSl7dChsKTtnKGgpfHxxKCJDb29raWUuc2V0U3VicygpOiBDb29raWUgdmFsdWUgbXVzdCBiZSBhbiBvYmplY3QuIik7bD10aGlzLl9jcmVhdGVDb29raWVTdHJpbmcobCx0aGlzLl9jcmVhdGVDb29raWVIYXNoU3RyaW5nKGgpLCExLHUpO3JldHVybiBzLmNvb2tpZT1sfX19LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbInl1aS1iYXNlIl19KTsKWVVJLmFkZCgiZXZlbnQtdG91Y2giLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5jb25maWcud2luLHQ9e307YS5ET01FdmVudEZhY2FkZS5wcm90b3R5cGUuX3RvdWNoPWZ1bmN0aW9uKGYsZCxjKXt2YXIgYixnLGUsayxtO2lmKGYudG91Y2hlcylmb3IodGhpcy50b3VjaGVzPVtdLG09e30sYj0wLGc9Zi50b3VjaGVzLmxlbmd0aDtiPGc7KytiKWs9Zi50b3VjaGVzW2JdLG1bYS5zdGFtcChrKV09dGhpcy50b3VjaGVzW2JdPW5ldyBhLkRPTUV2ZW50RmFjYWRlKGssZCxjKTtpZihmLnRhcmdldFRvdWNoZXMpZm9yKHRoaXMudGFyZ2V0VG91Y2hlcz1bXSxiPTAsZz1mLnRhcmdldFRvdWNoZXMubGVuZ3RoO2I8ZzsrK2Ipaz1mLnRhcmdldFRvdWNoZXNbYl0sZT1tJiZtW2Euc3RhbXAoaywhMCldLHRoaXMudGFyZ2V0VG91Y2hlc1tiXT1lfHxuZXcgYS5ET01FdmVudEZhY2FkZShrLGQsYyk7aWYoZi5jaGFuZ2VkVG91Y2hlcylmb3IodGhpcy5jaGFuZ2VkVG91Y2hlcz1bXSxiPTAsZz1mLmNoYW5nZWRUb3VjaGVzLmxlbmd0aDtiPApnOysrYilrPWYuY2hhbmdlZFRvdWNoZXNbYl0sZT1tJiZtW2Euc3RhbXAoaywhMCldLHRoaXMuY2hhbmdlZFRvdWNoZXNbYl09ZXx8bmV3IGEuRE9NRXZlbnRGYWNhZGUoayxkLGMpOyJzY2FsZSJpbiBmJiYodGhpcy5zY2FsZT1mLnNjYWxlKTsicm90YXRpb24iaW4gZiYmKHRoaXMucm90YXRpb249Zi5yb3RhdGlvbik7ImlkZW50aWZpZXIiaW4gZiYmKHRoaXMuaWRlbnRpZmllcj1mLmlkZW50aWZpZXIpfTthLk5vZGUuRE9NX0VWRU5UUyYmYS5taXgoYS5Ob2RlLkRPTV9FVkVOVFMse3RvdWNoc3RhcnQ6MSx0b3VjaG1vdmU6MSx0b3VjaGVuZDoxLHRvdWNoY2FuY2VsOjEsZ2VzdHVyZXN0YXJ0OjEsZ2VzdHVyZWNoYW5nZToxLGdlc3R1cmVlbmQ6MSxNU1BvaW50ZXJEb3duOjEsTVNQb2ludGVyVXA6MSxNU1BvaW50ZXJNb3ZlOjEsTVNQb2ludGVyQ2FuY2VsOjEscG9pbnRlcmRvd246MSxwb2ludGVydXA6MSxwb2ludGVybW92ZToxLHBvaW50ZXJjYW5jZWw6MX0pO3EmJiJvbnRvdWNoc3RhcnQiaW4KcSYmIShhLlVBLmNocm9tZSYmNj5hLlVBLmNocm9tZSk/KHQuc3RhcnQ9WyJ0b3VjaHN0YXJ0IiwibW91c2Vkb3duIl0sdC5lbmQ9WyJ0b3VjaGVuZCIsIm1vdXNldXAiXSx0Lm1vdmU9WyJ0b3VjaG1vdmUiLCJtb3VzZW1vdmUiXSx0LmNhbmNlbD1bInRvdWNoY2FuY2VsIiwibW91c2VjYW5jZWwiXSk6cSYmcS5Qb2ludGVyRXZlbnQ/KHQuc3RhcnQ9InBvaW50ZXJkb3duIix0LmVuZD0icG9pbnRlcnVwIix0Lm1vdmU9InBvaW50ZXJtb3ZlIix0LmNhbmNlbD0icG9pbnRlcmNhbmNlbCIpOnEmJiJtc1BvaW50ZXJFbmFibGVkImluIHEubmF2aWdhdG9yPyh0LnN0YXJ0PSJNU1BvaW50ZXJEb3duIix0LmVuZD0iTVNQb2ludGVyVXAiLHQubW92ZT0iTVNQb2ludGVyTW92ZSIsdC5jYW5jZWw9Ik1TUG9pbnRlckNhbmNlbCIpOih0LnN0YXJ0PSJtb3VzZWRvd24iLHQuZW5kPSJtb3VzZXVwIix0Lm1vdmU9Im1vdXNlbW92ZSIsdC5jYW5jZWw9Im1vdXNlY2FuY2VsIik7YS5FdmVudC5fR0VTVFVSRV9NQVA9CnR9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbIm5vZGUtYmFzZSJdfSk7WVVJLmFkZCgib3ZlcmxheSIsZnVuY3Rpb24oYSxFKXthLk92ZXJsYXk9YS5CYXNlLmNyZWF0ZSgib3ZlcmxheSIsYS5XaWRnZXQsW2EuV2lkZ2V0U3RkTW9kLGEuV2lkZ2V0UG9zaXRpb24sYS5XaWRnZXRTdGFjayxhLldpZGdldFBvc2l0aW9uQWxpZ24sYS5XaWRnZXRQb3NpdGlvbkNvbnN0cmFpbl0pfSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6IndpZGdldCB3aWRnZXQtc3RkbW9kIHdpZGdldC1wb3NpdGlvbiB3aWRnZXQtcG9zaXRpb24tYWxpZ24gd2lkZ2V0LXN0YWNrIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4iLnNwbGl0KCIgIiksc2tpbm5hYmxlOiEwfSk7CllVSS5hZGQoInF1ZXJ5c3RyaW5nLXN0cmluZ2lmeSIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLm5hbWVzcGFjZSgiUXVlcnlTdHJpbmciKSx0PVtdLGY9YS5MYW5nO3EuZXNjYXBlPWVuY29kZVVSSUNvbXBvbmVudDtxLnN0cmluZ2lmeT1mdW5jdGlvbihkLGMsYil7dmFyIGcsZSxrLG0scCxzPWMmJmMuc2VwP2Muc2VwOiJceDI2IjtwPWMmJmMuZXE/Yy5lcToiXHgzZCI7az1jJiZjLmFycmF5S2V5P2MuYXJyYXlLZXk6ITE7aWYoZi5pc051bGwoZCl8fGYuaXNVbmRlZmluZWQoZCl8fGYuaXNGdW5jdGlvbihkKSlyZXR1cm4gYj9xLmVzY2FwZShiKStwOiIiO2lmKGYuaXNCb29sZWFuKGQpfHwiW29iamVjdCBCb29sZWFuXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZCkpZD0rZDtpZihmLmlzTnVtYmVyKGQpfHxmLmlzU3RyaW5nKGQpKXJldHVybiBxLmVzY2FwZShiKStwK3EuZXNjYXBlKGQpO2lmKGYuaXNBcnJheShkKSl7cD1bXTtiPWs/YisiW10iOmI7Zz1kLmxlbmd0aDsKZm9yKGs9MDtrPGc7aysrKXAucHVzaChxLnN0cmluZ2lmeShkW2tdLGMsYikpO3JldHVybiBwLmpvaW4ocyl9Zm9yKGs9dC5sZW5ndGgtMTswPD1rOy0taylpZih0W2tdPT09ZCl0aHJvdyBFcnJvcigiUXVlcnlTdHJpbmcuc3RyaW5naWZ5LiBDeWNsaWNhbCByZWZlcmVuY2UiKTt0LnB1c2goZCk7cD1bXTtnPWI/YisiWyI6IiI7ZT1iPyJdIjoiIjtmb3IoayBpbiBkKWQuaGFzT3duUHJvcGVydHkoaykmJihtPWcraytlLHAucHVzaChxLnN0cmluZ2lmeShkW2tdLGMsbSkpKTt0LnBvcCgpO3A9cC5qb2luKHMpO3JldHVybiFwJiZiP2IrIlx4M2QiOnB9fSwicGF0Y2hlZC12My4xOC4xIix7cmVxdWlyZXM6WyJ5dWktYmFzZSJdfSk7CllVSS5hZGQoIndpZGdldC1jaGlsZCIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKCl7YS5hZnRlcih0aGlzLl9zeW5jVUlDaGlsZCx0aGlzLCJzeW5jVUkiKTthLmFmdGVyKHRoaXMuX2JpbmRVSUNoaWxkLHRoaXMsImJpbmRVSSIpfXZhciB0PWEuTGFuZztxLkFUVFJTPXtzZWxlY3RlZDp7dmFsdWU6MCx2YWxpZGF0b3I6dC5pc051bWJlcn0saW5kZXg6e3JlYWRPbmx5OiEwLGdldHRlcjpmdW5jdGlvbigpe3ZhciBmPXRoaXMuZ2V0KCJwYXJlbnQiKSxkPS0xO2YmJihkPWYuaW5kZXhPZih0aGlzKSk7cmV0dXJuIGR9fSxwYXJlbnQ6e3JlYWRPbmx5OiEwfSxkZXB0aDp7cmVhZE9ubHk6ITAsZ2V0dGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciBmPXRoaXMuZ2V0KCJwYXJlbnQiKSxkPXRoaXMuZ2V0KCJyb290IiksYz0tMTtmOyl7Yys9MTtpZihmPT1kKWJyZWFrO2Y9Zi5nZXQoInBhcmVudCIpfXJldHVybiBjfX0scm9vdDp7cmVhZE9ubHk6ITAsZ2V0dGVyOmZ1bmN0aW9uKCl7dmFyIGY9ZnVuY3Rpb24oZCl7dmFyIGM9CmQuZ2V0KCJwYXJlbnQiKSxiPWQuUk9PVF9UWVBFLGc9YztiJiYoZz1jJiZhLmluc3RhbmNlT2YoYyxiKSk7cmV0dXJuIGc/ZihjKTpkfTtyZXR1cm4gZih0aGlzKX19fTtxLnByb3RvdHlwZT17Uk9PVF9UWVBFOm51bGwsX2dldFVJRXZlbnROb2RlOmZ1bmN0aW9uKCl7dmFyIGY9dGhpcy5nZXQoInJvb3QiKSxkO2YmJihkPWYuZ2V0KCJib3VuZGluZ0JveCIpKTtyZXR1cm4gZH0sbmV4dDpmdW5jdGlvbihmKXt2YXIgZD10aGlzLmdldCgicGFyZW50IiksYztkJiYoYz1kLml0ZW0odGhpcy5nZXQoImluZGV4IikrMSkpOyFjJiZmJiYoYz1kLml0ZW0oMCkpO3JldHVybiBjfSxwcmV2aW91czpmdW5jdGlvbihmKXt2YXIgZD10aGlzLmdldCgicGFyZW50IiksYz10aGlzLmdldCgiaW5kZXgiKSxiO2QmJjA8YyYmKGI9ZC5pdGVtKFtjLTFdKSk7IWImJmYmJihiPWQuaXRlbShkLnNpemUoKS0xKSk7cmV0dXJuIGJ9LHJlbW92ZTpmdW5jdGlvbihmKXt2YXIgZCxjO3QuaXNOdW1iZXIoZik/Yz0KYS5XaWRnZXRQYXJlbnQucHJvdG90eXBlLnJlbW92ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6KGQ9dGhpcy5nZXQoInBhcmVudCIpKSYmKGM9ZC5yZW1vdmUodGhpcy5nZXQoImluZGV4IikpKTtyZXR1cm4gY30saXNSb290OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PXRoaXMuZ2V0KCJyb290Iil9LGFuY2VzdG9yOmZ1bmN0aW9uKGYpe3ZhciBkPXRoaXMuZ2V0KCJyb290IiksYztpZih0aGlzLmdldCgiZGVwdGgiKT5mKWZvcihjPXRoaXMuZ2V0KCJwYXJlbnQiKTtjIT1kJiZjLmdldCgiZGVwdGgiKT5mOyljPWMuZ2V0KCJwYXJlbnQiKTtyZXR1cm4gY30sX3VpU2V0Q2hpbGRTZWxlY3RlZDpmdW5jdGlvbihmKXt2YXIgZD10aGlzLmdldCgiYm91bmRpbmdCb3giKSxjPXRoaXMuZ2V0Q2xhc3NOYW1lKCJzZWxlY3RlZCIpOzA9PT1mP2QucmVtb3ZlQ2xhc3MoYyk6ZC5hZGRDbGFzcyhjKX0sX2FmdGVyQ2hpbGRTZWxlY3RlZENoYW5nZTpmdW5jdGlvbihmKXt0aGlzLl91aVNldENoaWxkU2VsZWN0ZWQoZi5uZXdWYWwpfSwKX3N5bmNVSUNoaWxkOmZ1bmN0aW9uKCl7dGhpcy5fdWlTZXRDaGlsZFNlbGVjdGVkKHRoaXMuZ2V0KCJzZWxlY3RlZCIpKX0sX2JpbmRVSUNoaWxkOmZ1bmN0aW9uKCl7dGhpcy5hZnRlcigic2VsZWN0ZWRDaGFuZ2UiLHRoaXMuX2FmdGVyQ2hpbGRTZWxlY3RlZENoYW5nZSl9fTthLldpZGdldENoaWxkPXF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJ3aWRnZXQiXX0pOwpZVUkuYWRkKCJ3aWRnZXQtcG9zaXRpb24tYWxpZ24iLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcShmKXt9dmFyIHQ9YS5MYW5nO3EuQVRUUlM9e2FsaWduOnt2YWx1ZTpudWxsfSxjZW50ZXJlZDp7c2V0dGVyOiJfc2V0QWxpZ25DZW50ZXIiLGxhenlBZGQ6ITEsdmFsdWU6ITF9LGFsaWduT246e3ZhbHVlOltdLHZhbGlkYXRvcjphLkxhbmcuaXNBcnJheX19O3EuVEw9InRsIjtxLlRSPSJ0ciI7cS5CTD0iYmwiO3EuQlI9ImJyIjtxLlRDPSJ0YyI7cS5SQz0icmMiO3EuQkM9ImJjIjtxLkxDPSJsYyI7cS5DQz0iY2MiO3EucHJvdG90eXBlPXtpbml0aWFsaXplcjpmdW5jdGlvbigpe3RoaXMuX3Bvc05vZGV8fGEuZXJyb3IoIldpZGdldFBvc2l0aW9uIG5lZWRzIHRvIGJlIGFkZGVkIHRvIHRoZSBXaWRnZXQsIGJlZm9yZSBXaWRnZXRQb3NpdGlvbkFsaWduIGlzIGFkZGVkIik7YS5hZnRlcih0aGlzLl9iaW5kVUlQb3NBbGlnbix0aGlzLCJiaW5kVUkiKTthLmFmdGVyKHRoaXMuX3N5bmNVSVBvc0FsaWduLAp0aGlzLCJzeW5jVUkiKX0sX3Bvc0FsaWduVUlIYW5kbGVzOm51bGwsaW5pdGlhbGl6ZXI6ZnVuY3Rpb24oKXt0aGlzLl9wb3NOb2RlfHxhLmVycm9yKCJXaWRnZXRQb3NpdGlvbiBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgV2lkZ2V0LCBiZWZvcmUgV2lkZ2V0UG9zaXRpb25BbGlnbiBpcyBhZGRlZCIpO2EuYWZ0ZXIodGhpcy5fYmluZFVJUG9zQWxpZ24sdGhpcywiYmluZFVJIik7YS5hZnRlcih0aGlzLl9zeW5jVUlQb3NBbGlnbix0aGlzLCJzeW5jVUkiKX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuX2RldGFjaFBvc0FsaWduVUlIYW5kbGVzKCl9LF9iaW5kVUlQb3NBbGlnbjpmdW5jdGlvbigpe3RoaXMuYWZ0ZXIoImFsaWduQ2hhbmdlIix0aGlzLl9hZnRlckFsaWduQ2hhbmdlKTt0aGlzLmFmdGVyKCJhbGlnbk9uQ2hhbmdlIix0aGlzLl9hZnRlckFsaWduT25DaGFuZ2UpO3RoaXMuYWZ0ZXIoInZpc2libGVDaGFuZ2UiLHRoaXMuX3N5bmNVSVBvc0FsaWduKX0sX3N5bmNVSVBvc0FsaWduOmZ1bmN0aW9uKCl7dmFyIGY9CnRoaXMuZ2V0KCJhbGlnbiIpO3RoaXMuX3VpU2V0VmlzaWJsZVBvc0FsaWduKHRoaXMuZ2V0KCJ2aXNpYmxlIikpO2YmJnRoaXMuX3VpU2V0QWxpZ24oZi5ub2RlLGYucG9pbnRzKX0sYWxpZ246ZnVuY3Rpb24oZixkKXthcmd1bWVudHMubGVuZ3RoP3RoaXMuc2V0KCJhbGlnbiIse25vZGU6Zixwb2ludHM6ZH0pOnRoaXMuX3N5bmNVSVBvc0FsaWduKCk7cmV0dXJuIHRoaXN9LGNlbnRlcmVkOmZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmFsaWduKGYsW3EuQ0MscS5DQ10pfSxfZ2V0QWxpZ25Ub1hZOmZ1bmN0aW9uKGYsZCxjLGIpe3ZhciBnO3N3aXRjaChkKXtjYXNlIHEuVEw6Zz1bYyxiXTticmVhaztjYXNlIHEuVFI6Zz1bYy1mLmdldCgib2Zmc2V0V2lkdGgiKSxiXTticmVhaztjYXNlIHEuQkw6Zz1bYyxiLWYuZ2V0KCJvZmZzZXRIZWlnaHQiKV07YnJlYWs7Y2FzZSBxLkJSOmc9W2MtZi5nZXQoIm9mZnNldFdpZHRoIiksYi1mLmdldCgib2Zmc2V0SGVpZ2h0IildO2JyZWFrO2Nhc2UgcS5UQzpnPQpbYy1mLmdldCgib2Zmc2V0V2lkdGgiKS8yLGJdO2JyZWFrO2Nhc2UgcS5CQzpnPVtjLWYuZ2V0KCJvZmZzZXRXaWR0aCIpLzIsYi1mLmdldCgib2Zmc2V0SGVpZ2h0IildO2JyZWFrO2Nhc2UgcS5MQzpnPVtjLGItZi5nZXQoIm9mZnNldEhlaWdodCIpLzJdO2JyZWFrO2Nhc2UgcS5SQzpnPVtjLWYuZ2V0KCJvZmZzZXRXaWR0aCIpLGItZi5nZXQoIm9mZnNldEhlaWdodCIpLzJdO2JyZWFrO2Nhc2UgcS5DQzpnPVtjLWYuZ2V0KCJvZmZzZXRXaWR0aCIpLzIsYi1mLmdldCgib2Zmc2V0SGVpZ2h0IikvMl19cmV0dXJuIGd9LF9nZXRBbGlnbmVkWFk6ZnVuY3Rpb24oZixkKXtpZih0LmlzQXJyYXkoZCkmJjI9PT1kLmxlbmd0aCl7dmFyIGM9dGhpcy5fZ2V0UmVnaW9uKGYpLGIsZztpZihjKXtiPWRbMV07c3dpdGNoKGIpe2Nhc2UgcS5UTDpnPVtjLmxlZnQsYy50b3BdO2JyZWFrO2Nhc2UgcS5UUjpnPVtjLnJpZ2h0LGMudG9wXTticmVhaztjYXNlIHEuQkw6Zz1bYy5sZWZ0LGMuYm90dG9tXTsKYnJlYWs7Y2FzZSBxLkJSOmc9W2MucmlnaHQsYy5ib3R0b21dO2JyZWFrO2Nhc2UgcS5UQzpnPVtjLmxlZnQrTWF0aC5mbG9vcihjLndpZHRoLzIpLGMudG9wXTticmVhaztjYXNlIHEuQkM6Zz1bYy5sZWZ0K01hdGguZmxvb3IoYy53aWR0aC8yKSxjLmJvdHRvbV07YnJlYWs7Y2FzZSBxLkxDOmc9W2MubGVmdCxjLnRvcCtNYXRoLmZsb29yKGMuaGVpZ2h0LzIpXTticmVhaztjYXNlIHEuUkM6Zz1bYy5yaWdodCxjLnRvcCtNYXRoLmZsb29yKGMuaGVpZ2h0LzIpXTticmVhaztjYXNlIHEuQ0M6Zz1bYy5sZWZ0K01hdGguZmxvb3IoYy53aWR0aC8yKSxjLnRvcCtNYXRoLmZsb29yKGMuaGVpZ2h0LzIpXX1yZXR1cm4gdGhpcy5fZ2V0QWxpZ25Ub1hZKHRoaXMuX3Bvc05vZGUsZFswXSxnWzBdLGdbMV0pfX1lbHNlIGEuZXJyb3IoImFsaWduOiBJbnZhbGlkIFBvaW50cyBBcmd1bWVudHMiKX0sX3NldEFsaWduQ2VudGVyOmZ1bmN0aW9uKGYpe2YmJnRoaXMuc2V0KCJhbGlnbiIse25vZGU6ITA9PT0KZj9udWxsOmYscG9pbnRzOltxLkNDLHEuQ0NdfSk7cmV0dXJuIGZ9LF91aVNldEFsaWduOmZ1bmN0aW9uKGYsZCl7dmFyIGM9dGhpcy5fZ2V0QWxpZ25lZFhZKGYsZCk7YyYmdGhpcy5fZG9BbGlnbihjKX0sX3VpU2V0VmlzaWJsZVBvc0FsaWduOmZ1bmN0aW9uKGYpe2Y/dGhpcy5fYXR0YWNoUG9zQWxpZ25VSUhhbmRsZXMoKTp0aGlzLl9kZXRhY2hQb3NBbGlnblVJSGFuZGxlcygpfSxfYXR0YWNoUG9zQWxpZ25VSUhhbmRsZXM6ZnVuY3Rpb24oKXtpZighdGhpcy5fcG9zQWxpZ25VSUhhbmRsZXMpe3ZhciBmPXRoaXMuZ2V0KCJib3VuZGluZ0JveCIpLGQ9YS5iaW5kKHRoaXMuX3N5bmNVSVBvc0FsaWduLHRoaXMpLGM9W107YS5BcnJheS5lYWNoKHRoaXMuZ2V0KCJhbGlnbk9uIiksZnVuY3Rpb24oYil7dmFyIGc9Yi5ldmVudE5hbWU7Yj1hLm9uZShiLm5vZGUpfHxmO2cmJmMucHVzaChiLm9uKGcsZCkpfSk7dGhpcy5fcG9zQWxpZ25VSUhhbmRsZXM9Y319LF9kZXRhY2hQb3NBbGlnblVJSGFuZGxlczpmdW5jdGlvbigpe3ZhciBmPQp0aGlzLl9wb3NBbGlnblVJSGFuZGxlcztmJiYoKG5ldyBhLkV2ZW50SGFuZGxlKGYpKS5kZXRhY2goKSx0aGlzLl9wb3NBbGlnblVJSGFuZGxlcz1udWxsKX0sX2RvQWxpZ246ZnVuY3Rpb24oZil7ZiYmdGhpcy5tb3ZlKGYpfSxfZ2V0UmVnaW9uOmZ1bmN0aW9uKGYpe3ZhciBkO2Y/KGY9YS5Ob2RlLm9uZShmKSkmJihkPWYuZ2V0KCJyZWdpb24iKSk6ZD10aGlzLl9wb3NOb2RlLmdldCgidmlld3BvcnRSZWdpb24iKTtyZXR1cm4gZH0sX2FmdGVyQWxpZ25DaGFuZ2U6ZnVuY3Rpb24oZil7KGY9Zi5uZXdWYWwpJiZ0aGlzLl91aVNldEFsaWduKGYubm9kZSxmLnBvaW50cyl9LF9hZnRlckFsaWduT25DaGFuZ2U6ZnVuY3Rpb24oZil7dGhpcy5fZGV0YWNoUG9zQWxpZ25VSUhhbmRsZXMoKTt0aGlzLmdldCgidmlzaWJsZSIpJiZ0aGlzLl9hdHRhY2hQb3NBbGlnblVJSGFuZGxlcygpfX07YS5XaWRnZXRQb3NpdGlvbkFsaWduPXF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbIndpZGdldC1wb3NpdGlvbiJdfSk7CllVSS5hZGQoIndpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4iLGZ1bmN0aW9uKGEsRSl7ZnVuY3Rpb24gcShkKXt9dmFyIHQ9YS5Ob2RlLGY7cS5BVFRSUz17Y29uc3RyYWluOnt2YWx1ZTpudWxsLHNldHRlcjoiX3NldENvbnN0cmFpbiJ9LHByZXZlbnRPdmVybGFwOnt2YWx1ZTohMX19O2Y9cS5fUFJFVkVOVF9PVkVSTEFQPXt4Ont0bHRyOjEsYmxicjoxLGJyYmw6MSx0cnRsOjF9LHk6e3RyYnI6MSx0bGJsOjEsYmx0bDoxLGJydHI6MX19O3EucHJvdG90eXBlPXtpbml0aWFsaXplcjpmdW5jdGlvbigpe3RoaXMuX3Bvc05vZGV8fGEuZXJyb3IoIldpZGdldFBvc2l0aW9uIG5lZWRzIHRvIGJlIGFkZGVkIHRvIHRoZSBXaWRnZXQsIGJlZm9yZSBXaWRnZXRQb3NpdGlvbkNvbnN0cmFpbiBpcyBhZGRlZCIpO2EuYWZ0ZXIodGhpcy5fYmluZFVJUG9zQ29uc3RyYWluZWQsdGhpcywiYmluZFVJIil9LGdldENvbnN0cmFpbmVkWFk6ZnVuY3Rpb24oZCxjKXtjPWN8fHRoaXMuZ2V0KCJjb25zdHJhaW4iKTsKdmFyIGI9dGhpcy5fZ2V0UmVnaW9uKCEwPT09Yz9udWxsOmMpLGc9dGhpcy5fcG9zTm9kZS5nZXQoInJlZ2lvbiIpO3JldHVyblt0aGlzLl9jb25zdHJhaW4oZFswXSwieCIsZyxiKSx0aGlzLl9jb25zdHJhaW4oZFsxXSwieSIsZyxiKV19LGNvbnN0cmFpbjpmdW5jdGlvbihkLGMpe3ZhciBiLGc7aWYoZz1jfHx0aGlzLmdldCgiY29uc3RyYWluIikpYj1kfHx0aGlzLmdldCgieHkiKSxnPXRoaXMuZ2V0Q29uc3RyYWluZWRYWShiLGcpLGdbMF09PT1iWzBdJiZnWzFdPT09YlsxXXx8dGhpcy5zZXQoInh5IixnLHtjb25zdHJhaW5lZDohMH0pfSxfc2V0Q29uc3RyYWluOmZ1bmN0aW9uKGQpe3JldHVybiEwPT09ZD9kOnQub25lKGQpfSxfY29uc3RyYWluOmZ1bmN0aW9uKGQsYyxiLGcpe2lmKGcpe3RoaXMuZ2V0KCJwcmV2ZW50T3ZlcmxhcCIpJiYoZD10aGlzLl9wcmV2ZW50T3ZlcmxhcChkLGMsYixnKSk7dmFyIGU9IngiPT1jO2M9ZT9nLndpZHRoOmcuaGVpZ2h0O2I9ZT9iLndpZHRoOgpiLmhlaWdodDt2YXIgaz1lP2cubGVmdDpnLnRvcDtnPWU/Zy5yaWdodC1iOmcuYm90dG9tLWI7aWYoZDxrfHxkPmcpYjxjP2Q8az9kPWs6ZD5nJiYoZD1nKTpkPWt9cmV0dXJuIGR9LF9wcmV2ZW50T3ZlcmxhcDpmdW5jdGlvbihkLGMsYixnKXt2YXIgZT10aGlzLmdldCgiYWxpZ24iKSxrPSJ4Ij09PWMsbSxwLHMsbCxoO2lmKGUmJmUucG9pbnRzJiZmW2NdW2UucG9pbnRzLmpvaW4oIiIpXSl7aWYoYz10aGlzLl9nZXRSZWdpb24oZS5ub2RlKSltPWs/Yi53aWR0aDpiLmhlaWdodCxwPWs/Yy5sZWZ0OmMudG9wLHM9az9jLnJpZ2h0OmMuYm90dG9tLGw9az9jLmxlZnQtZy5sZWZ0OmMudG9wLWcudG9wLGg9az9nLnJpZ2h0LWMucmlnaHQ6Zy5ib3R0b20tYy5ib3R0b207ZD5wP2g8bSYmbD5tJiYoZD1wLW0pOmw8bSYmaD5tJiYoZD1zKX1yZXR1cm4gZH0sX2JpbmRVSVBvc0NvbnN0cmFpbmVkOmZ1bmN0aW9uKCl7dGhpcy5hZnRlcigiY29uc3RyYWluQ2hhbmdlIix0aGlzLl9hZnRlckNvbnN0cmFpbkNoYW5nZSk7CnRoaXMuX2VuYWJsZUNvbnN0cmFpbnRzKHRoaXMuZ2V0KCJjb25zdHJhaW4iKSl9LF9hZnRlckNvbnN0cmFpbkNoYW5nZTpmdW5jdGlvbihkKXt0aGlzLl9lbmFibGVDb25zdHJhaW50cyhkLm5ld1ZhbCl9LF9lbmFibGVDb25zdHJhaW50czpmdW5jdGlvbihkKXtkPyh0aGlzLmNvbnN0cmFpbigpLHRoaXMuX2N4eUhhbmRsZT10aGlzLl9jeHlIYW5kbGV8fHRoaXMub24oImNvbnN0cmFpbnx4eUNoYW5nZSIsdGhpcy5fY29uc3RyYWluT25YWUNoYW5nZSkpOnRoaXMuX2N4eUhhbmRsZSYmKHRoaXMuX2N4eUhhbmRsZS5kZXRhY2goKSx0aGlzLl9jeHlIYW5kbGU9bnVsbCl9LF9jb25zdHJhaW5PblhZQ2hhbmdlOmZ1bmN0aW9uKGQpe2QuY29uc3RyYWluZWR8fChkLm5ld1ZhbD10aGlzLmdldENvbnN0cmFpbmVkWFkoZC5uZXdWYWwpKX0sX2dldFJlZ2lvbjpmdW5jdGlvbihkKXt2YXIgYztkPyhkPXQub25lKGQpKSYmKGM9ZC5nZXQoInJlZ2lvbiIpKTpjPXRoaXMuX3Bvc05vZGUuZ2V0KCJ2aWV3cG9ydFJlZ2lvbiIpOwpyZXR1cm4gY319O2EuV2lkZ2V0UG9zaXRpb25Db25zdHJhaW49cX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsid2lkZ2V0LXBvc2l0aW9uIl19KTsKWVVJLmFkZCgid2lkZ2V0LXBvc2l0aW9uIixmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEoYyl7fXZhciB0PWEuTGFuZyxmPWEuV2lkZ2V0LGQ9Zi5VSV9TUkM7cS5BVFRSUz17eDp7c2V0dGVyOmZ1bmN0aW9uKGMpe3RoaXMuX3NldFgoYyl9LGdldHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRYKCl9LGxhenlBZGQ6ITF9LHk6e3NldHRlcjpmdW5jdGlvbihjKXt0aGlzLl9zZXRZKGMpfSxnZXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0WSgpfSxsYXp5QWRkOiExfSx4eTp7dmFsdWU6WzAsMF0sdmFsaWRhdG9yOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl92YWxpZGF0ZVhZKGMpfX19O3EuUE9TSVRJT05FRF9DTEFTU19OQU1FPWYuZ2V0Q2xhc3NOYW1lKCJwb3NpdGlvbmVkIik7cS5wcm90b3R5cGU9e2luaXRpYWxpemVyOmZ1bmN0aW9uKCl7dGhpcy5fcG9zTm9kZT10aGlzLmdldCgiYm91bmRpbmdCb3giKTthLmFmdGVyKHRoaXMuX3JlbmRlclVJUG9zaXRpb24sCnRoaXMsInJlbmRlclVJIik7YS5hZnRlcih0aGlzLl9zeW5jVUlQb3NpdGlvbix0aGlzLCJzeW5jVUkiKTthLmFmdGVyKHRoaXMuX2JpbmRVSVBvc2l0aW9uLHRoaXMsImJpbmRVSSIpfSxfcmVuZGVyVUlQb3NpdGlvbjpmdW5jdGlvbigpe3RoaXMuX3Bvc05vZGUuYWRkQ2xhc3MocS5QT1NJVElPTkVEX0NMQVNTX05BTUUpfSxfc3luY1VJUG9zaXRpb246ZnVuY3Rpb24oKXsicmVsYXRpdmUiPT09dGhpcy5fcG9zTm9kZS5nZXRTdHlsZSgicG9zaXRpb24iKSYmdGhpcy5zeW5jWFkoKTt0aGlzLl91aVNldFhZKHRoaXMuZ2V0KCJ4eSIpKX0sX2JpbmRVSVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5hZnRlcigieHlDaGFuZ2UiLHRoaXMuX2FmdGVyWFlDaGFuZ2UpfSxtb3ZlOmZ1bmN0aW9uKCl7dmFyIGM9YXJndW1lbnRzLGM9dC5pc0FycmF5KGNbMF0pP2NbMF06W2NbMF0sY1sxXV07dGhpcy5zZXQoInh5IixjKX0sc3luY1hZOmZ1bmN0aW9uKCl7dGhpcy5zZXQoInh5Iix0aGlzLl9wb3NOb2RlLmdldFhZKCksCntzcmM6ZH0pfSxfdmFsaWRhdGVYWTpmdW5jdGlvbihjKXtyZXR1cm4gdC5pc0FycmF5KGMpJiZ0LmlzTnVtYmVyKGNbMF0pJiZ0LmlzTnVtYmVyKGNbMV0pfSxfc2V0WDpmdW5jdGlvbihjKXt0aGlzLnNldCgieHkiLFtjLHRoaXMuZ2V0KCJ4eSIpWzFdXSl9LF9zZXRZOmZ1bmN0aW9uKGMpe3RoaXMuc2V0KCJ4eSIsW3RoaXMuZ2V0KCJ4eSIpWzBdLGNdKX0sX2dldFg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoInh5IilbMF19LF9nZXRZOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJ4eSIpWzFdfSxfYWZ0ZXJYWUNoYW5nZTpmdW5jdGlvbihjKXtjLnNyYyE9ZCYmdGhpcy5fdWlTZXRYWShjLm5ld1ZhbCl9LF91aVNldFhZOmZ1bmN0aW9uKGMpe3RoaXMuX3Bvc05vZGUuc2V0WFkoYyl9fTthLldpZGdldFBvc2l0aW9uPXF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJub2RlLXNjcmVlbiIsIndpZGdldCJdfSk7CllVSS5hZGQoIndpZGdldC1zdGFjayIsZnVuY3Rpb24oYSxFKXtmdW5jdGlvbiBxKGIpe312YXIgdD1hLkxhbmcsZj1hLlVBLGQ9YS5Ob2RlLGM9YS5XaWRnZXQ7cS5BVFRSUz17c2hpbTp7dmFsdWU6Nj09Zi5pZX0sekluZGV4Ont2YWx1ZTowLHNldHRlcjoiX3NldFpJbmRleCJ9fTtxLkhUTUxfUEFSU0VSPXt6SW5kZXg6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3BhcnNlWkluZGV4KGIpfX07cS5TSElNX0NMQVNTX05BTUU9Yy5nZXRDbGFzc05hbWUoInNoaW0iKTtxLlNUQUNLRURfQ0xBU1NfTkFNRT1jLmdldENsYXNzTmFtZSgic3RhY2tlZCIpO3EuU0hJTV9URU1QTEFURT0nXHgzY2lmcmFtZSBjbGFzc1x4M2QiJytxLlNISU1fQ0xBU1NfTkFNRSsnIiBmcmFtZWJvcmRlclx4M2QiMCIgdGl0bGVceDNkIldpZGdldCBTdGFja2luZyBTaGltIiBzcmNceDNkImphdmFzY3JpcHQ6ZmFsc2UiIHRhYmluZGV4XHgzZCItMSIgcm9sZVx4M2QicHJlc2VudGF0aW9uIlx4M2VceDNjL2lmcmFtZVx4M2UnOwpxLnByb3RvdHlwZT17aW5pdGlhbGl6ZXI6ZnVuY3Rpb24oKXt0aGlzLl9zdGFja05vZGU9dGhpcy5nZXQoImJvdW5kaW5nQm94Iik7dGhpcy5fc3RhY2tIYW5kbGVzPXt9O2EuYWZ0ZXIodGhpcy5fcmVuZGVyVUlTdGFjayx0aGlzLCJyZW5kZXJVSSIpO2EuYWZ0ZXIodGhpcy5fc3luY1VJU3RhY2ssdGhpcywic3luY1VJIik7YS5hZnRlcih0aGlzLl9iaW5kVUlTdGFjayx0aGlzLCJiaW5kVUkiKX0sX3N5bmNVSVN0YWNrOmZ1bmN0aW9uKCl7dGhpcy5fdWlTZXRTaGltKHRoaXMuZ2V0KCJzaGltIikpO3RoaXMuX3VpU2V0WkluZGV4KHRoaXMuZ2V0KCJ6SW5kZXgiKSl9LF9iaW5kVUlTdGFjazpmdW5jdGlvbigpe3RoaXMuYWZ0ZXIoInNoaW1DaGFuZ2UiLHRoaXMuX2FmdGVyU2hpbUNoYW5nZSk7dGhpcy5hZnRlcigiekluZGV4Q2hhbmdlIix0aGlzLl9hZnRlclpJbmRleENoYW5nZSl9LF9yZW5kZXJVSVN0YWNrOmZ1bmN0aW9uKCl7dGhpcy5fc3RhY2tOb2RlLmFkZENsYXNzKHEuU1RBQ0tFRF9DTEFTU19OQU1FKX0sCl9wYXJzZVpJbmRleDpmdW5jdGlvbihiKXtiPWIuaW5Eb2MoKSYmInN0YXRpYyIhPT1iLmdldFN0eWxlKCJwb3NpdGlvbiIpP2IuZ2V0Q29tcHV0ZWRTdHlsZSgiekluZGV4Iik6ImF1dG8iO3JldHVybiJhdXRvIj09PWI/bnVsbDpifSxfc2V0WkluZGV4OmZ1bmN0aW9uKGIpe3QuaXNTdHJpbmcoYikmJihiPXBhcnNlSW50KGIsMTApKTt0LmlzTnVtYmVyKGIpfHwoYj0wKTtyZXR1cm4gYn0sX2FmdGVyU2hpbUNoYW5nZTpmdW5jdGlvbihiKXt0aGlzLl91aVNldFNoaW0oYi5uZXdWYWwpfSxfYWZ0ZXJaSW5kZXhDaGFuZ2U6ZnVuY3Rpb24oYil7dGhpcy5fdWlTZXRaSW5kZXgoYi5uZXdWYWwpfSxfdWlTZXRaSW5kZXg6ZnVuY3Rpb24oYil7dGhpcy5fc3RhY2tOb2RlLnNldFN0eWxlKCJ6SW5kZXgiLGIpfSxfdWlTZXRTaGltOmZ1bmN0aW9uKGIpe2I/KHRoaXMuZ2V0KCJ2aXNpYmxlIik/dGhpcy5fcmVuZGVyU2hpbSgpOnRoaXMuX3JlbmRlclNoaW1EZWZlcnJlZCgpLDY9PWYuaWUmJgp0aGlzLl9hZGRTaGltUmVzaXplSGFuZGxlcnMoKSk6dGhpcy5fZGVzdHJveVNoaW0oKX0sX3JlbmRlclNoaW1EZWZlcnJlZDpmdW5jdGlvbigpe3RoaXMuX3N0YWNrSGFuZGxlcy5zaGltZGVmZXJyZWQ9dGhpcy5fc3RhY2tIYW5kbGVzLnNoaW1kZWZlcnJlZHx8W107dGhpcy5fc3RhY2tIYW5kbGVzLnNoaW1kZWZlcnJlZC5wdXNoKHRoaXMub24oInZpc2libGVDaGFuZ2UiLGZ1bmN0aW9uKGIpe2IubmV3VmFsJiZ0aGlzLl9yZW5kZXJTaGltKCl9KSl9LF9hZGRTaGltUmVzaXplSGFuZGxlcnM6ZnVuY3Rpb24oKXt0aGlzLl9zdGFja0hhbmRsZXMuc2hpbXJlc2l6ZT10aGlzLl9zdGFja0hhbmRsZXMuc2hpbXJlc2l6ZXx8W107dmFyIGI9dGhpcy5zaXplU2hpbSxnPXRoaXMuX3N0YWNrSGFuZGxlcy5zaGltcmVzaXplO2cucHVzaCh0aGlzLmFmdGVyKCJ2aXNpYmxlQ2hhbmdlIixiKSk7Zy5wdXNoKHRoaXMuYWZ0ZXIoIndpZHRoQ2hhbmdlIixiKSk7Zy5wdXNoKHRoaXMuYWZ0ZXIoImhlaWdodENoYW5nZSIsCmIpKTtnLnB1c2godGhpcy5hZnRlcigiY29udGVudFVwZGF0ZSIsYikpfSxfZGV0YWNoU3RhY2tIYW5kbGVzOmZ1bmN0aW9uKGIpe2I9dGhpcy5fc3RhY2tIYW5kbGVzW2JdO3ZhciBnO2lmKGImJjA8Yi5sZW5ndGgpZm9yKDtnPWIucG9wKCk7KWcuZGV0YWNoKCl9LF9yZW5kZXJTaGltOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fc2hpbU5vZGUsZz10aGlzLl9zdGFja05vZGU7Ynx8KGI9dGhpcy5fc2hpbU5vZGU9dGhpcy5fZ2V0U2hpbVRlbXBsYXRlKCksZy5pbnNlcnRCZWZvcmUoYixnLmdldCgiZmlyc3RDaGlsZCIpKSx0aGlzLl9kZXRhY2hTdGFja0hhbmRsZXMoInNoaW1kZWZlcnJlZCIpLHRoaXMuc2l6ZVNoaW0oKSl9LF9kZXN0cm95U2hpbTpmdW5jdGlvbigpe3RoaXMuX3NoaW1Ob2RlJiYodGhpcy5fc2hpbU5vZGUuZ2V0KCJwYXJlbnROb2RlIikucmVtb3ZlQ2hpbGQodGhpcy5fc2hpbU5vZGUpLHRoaXMuX3NoaW1Ob2RlPW51bGwsdGhpcy5fZGV0YWNoU3RhY2tIYW5kbGVzKCJzaGltZGVmZXJyZWQiKSwKdGhpcy5fZGV0YWNoU3RhY2tIYW5kbGVzKCJzaGltcmVzaXplIikpfSxzaXplU2hpbTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuX3NoaW1Ob2RlLGc9dGhpcy5fc3RhY2tOb2RlO2ImJjY9PT1mLmllJiZ0aGlzLmdldCgidmlzaWJsZSIpJiYoYi5zZXRTdHlsZSgid2lkdGgiLGcuZ2V0KCJvZmZzZXRXaWR0aCIpKyJweCIpLGIuc2V0U3R5bGUoImhlaWdodCIsZy5nZXQoIm9mZnNldEhlaWdodCIpKyJweCIpKX0sX2dldFNoaW1UZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybiBkLmNyZWF0ZShxLlNISU1fVEVNUExBVEUsdGhpcy5fc3RhY2tOb2RlLmdldCgib3duZXJEb2N1bWVudCIpKX19O2EuV2lkZ2V0U3RhY2s9cX0sInBhdGNoZWQtdjMuMTguMSIse3JlcXVpcmVzOlsiYmFzZS1idWlsZCIsIndpZGdldCJdLHNraW5uYWJsZTohMH0pOwpZVUkuYWRkKCJ3aWRnZXQtc3RkbW9kIixmdW5jdGlvbihhLEUpe2Z1bmN0aW9uIHEobCl7fXZhciB0PWEuTGFuZyxmPWEuTm9kZSxkPWEuVUEsYz1hLldpZGdldCxiPWEuV2lkZ2V0LlVJX1NSQztxLkhFQURFUj0iaGVhZGVyIjtxLkJPRFk9ImJvZHkiO3EuRk9PVEVSPSJmb290ZXIiO3EuQUZURVI9ImFmdGVyIjtxLkJFRk9SRT0iYmVmb3JlIjtxLlJFUExBQ0U9InJlcGxhY2UiO3ZhciBnPXEuSEVBREVSLGU9cS5CT0RZLGs9cS5GT09URVIsbT1nKyJDb250ZW50IixwPWsrIkNvbnRlbnQiLHM9ZSsiQ29udGVudCI7cS5BVFRSUz17aGVhZGVyQ29udGVudDp7dmFsdWU6bnVsbH0sZm9vdGVyQ29udGVudDp7dmFsdWU6bnVsbH0sYm9keUNvbnRlbnQ6e3ZhbHVlOm51bGx9LGZpbGxIZWlnaHQ6e3ZhbHVlOnEuQk9EWSx2YWxpZGF0b3I6ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlRmlsbEhlaWdodChsKX19fTtxLkhUTUxfUEFSU0VSPXtoZWFkZXJDb250ZW50OmZ1bmN0aW9uKGwpe3JldHVybiB0aGlzLl9wYXJzZVN0ZE1vZEhUTUwoZyl9LApib2R5Q29udGVudDpmdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5fcGFyc2VTdGRNb2RIVE1MKGUpfSxmb290ZXJDb250ZW50OmZ1bmN0aW9uKGwpe3JldHVybiB0aGlzLl9wYXJzZVN0ZE1vZEhUTUwoayl9fTtxLlNFQ1RJT05fQ0xBU1NfTkFNRVM9e2hlYWRlcjpjLmdldENsYXNzTmFtZSgiaGQiKSxib2R5OmMuZ2V0Q2xhc3NOYW1lKCJiZCIpLGZvb3RlcjpjLmdldENsYXNzTmFtZSgiZnQiKX07cS5URU1QTEFURVM9e2hlYWRlcjonXHgzY2RpdiBjbGFzc1x4M2QiJytxLlNFQ1RJT05fQ0xBU1NfTkFNRVNbZ10rJyJceDNlXHgzYy9kaXZceDNlJyxib2R5OidceDNjZGl2IGNsYXNzXHgzZCInK3EuU0VDVElPTl9DTEFTU19OQU1FU1tlXSsnIlx4M2VceDNjL2Rpdlx4M2UnLGZvb3RlcjonXHgzY2RpdiBjbGFzc1x4M2QiJytxLlNFQ1RJT05fQ0xBU1NfTkFNRVNba10rJyJceDNlXHgzYy9kaXZceDNlJ307cS5wcm90b3R5cGU9e2luaXRpYWxpemVyOmZ1bmN0aW9uKCl7dGhpcy5fc3RkTW9kTm9kZT0KdGhpcy5nZXQoImNvbnRlbnRCb3giKTthLmJlZm9yZSh0aGlzLl9yZW5kZXJVSVN0ZE1vZCx0aGlzLCJyZW5kZXJVSSIpO2EuYmVmb3JlKHRoaXMuX2JpbmRVSVN0ZE1vZCx0aGlzLCJiaW5kVUkiKTthLmJlZm9yZSh0aGlzLl9zeW5jVUlTdGRNb2QsdGhpcywic3luY1VJIil9LF9zeW5jVUlTdGRNb2Q6ZnVuY3Rpb24oKXt2YXIgbD10aGlzLl9zdGRNb2RQYXJzZWQ7bCYmbFttXXx8dGhpcy5fdWlTZXRTdGRNb2QoZyx0aGlzLmdldChtKSk7bCYmbFtzXXx8dGhpcy5fdWlTZXRTdGRNb2QoZSx0aGlzLmdldChzKSk7bCYmbFtwXXx8dGhpcy5fdWlTZXRTdGRNb2Qoayx0aGlzLmdldChwKSk7dGhpcy5fdWlTZXRGaWxsSGVpZ2h0KHRoaXMuZ2V0KCJmaWxsSGVpZ2h0IikpfSxfcmVuZGVyVUlTdGRNb2Q6ZnVuY3Rpb24oKXt0aGlzLl9zdGRNb2ROb2RlLmFkZENsYXNzKGMuZ2V0Q2xhc3NOYW1lKCJzdGRtb2QiKSk7dGhpcy5fcmVuZGVyU3RkTW9kU2VjdGlvbnMoKTt0aGlzLmFmdGVyKCJoZWFkZXJDb250ZW50Q2hhbmdlIiwKdGhpcy5fYWZ0ZXJIZWFkZXJDaGFuZ2UpO3RoaXMuYWZ0ZXIoImJvZHlDb250ZW50Q2hhbmdlIix0aGlzLl9hZnRlckJvZHlDaGFuZ2UpO3RoaXMuYWZ0ZXIoImZvb3RlckNvbnRlbnRDaGFuZ2UiLHRoaXMuX2FmdGVyRm9vdGVyQ2hhbmdlKX0sX3JlbmRlclN0ZE1vZFNlY3Rpb25zOmZ1bmN0aW9uKCl7dC5pc1ZhbHVlKHRoaXMuZ2V0KG0pKSYmdGhpcy5fcmVuZGVyU3RkTW9kKGcpO3QuaXNWYWx1ZSh0aGlzLmdldChzKSkmJnRoaXMuX3JlbmRlclN0ZE1vZChlKTt0LmlzVmFsdWUodGhpcy5nZXQocCkpJiZ0aGlzLl9yZW5kZXJTdGRNb2Qoayl9LF9iaW5kVUlTdGRNb2Q6ZnVuY3Rpb24oKXt0aGlzLmFmdGVyKCJmaWxsSGVpZ2h0Q2hhbmdlIix0aGlzLl9hZnRlckZpbGxIZWlnaHRDaGFuZ2UpO3RoaXMuYWZ0ZXIoImhlaWdodENoYW5nZSIsdGhpcy5fZmlsbEhlaWdodCk7dGhpcy5hZnRlcigiY29udGVudFVwZGF0ZSIsdGhpcy5fZmlsbEhlaWdodCl9LF9hZnRlckhlYWRlckNoYW5nZTpmdW5jdGlvbihsKXtsLnNyYyE9PQpiJiZ0aGlzLl91aVNldFN0ZE1vZChnLGwubmV3VmFsLGwuc3RkTW9kUG9zaXRpb24pfSxfYWZ0ZXJCb2R5Q2hhbmdlOmZ1bmN0aW9uKGwpe2wuc3JjIT09YiYmdGhpcy5fdWlTZXRTdGRNb2QoZSxsLm5ld1ZhbCxsLnN0ZE1vZFBvc2l0aW9uKX0sX2FmdGVyRm9vdGVyQ2hhbmdlOmZ1bmN0aW9uKGwpe2wuc3JjIT09YiYmdGhpcy5fdWlTZXRTdGRNb2QoayxsLm5ld1ZhbCxsLnN0ZE1vZFBvc2l0aW9uKX0sX2FmdGVyRmlsbEhlaWdodENoYW5nZTpmdW5jdGlvbihsKXt0aGlzLl91aVNldEZpbGxIZWlnaHQobC5uZXdWYWwpfSxfdmFsaWRhdGVGaWxsSGVpZ2h0OmZ1bmN0aW9uKGwpe3JldHVybiFsfHxsPT1xLkJPRFl8fGw9PXEuSEVBREVSfHxsPT1xLkZPT1RFUn0sX3VpU2V0RmlsbEhlaWdodDpmdW5jdGlvbihsKXtsPXRoaXMuZ2V0U3RkTW9kTm9kZShsKTt2YXIgaD10aGlzLl9jdXJyRmlsbE5vZGU7aCYmbCE9PWgmJmguc2V0U3R5bGUoImhlaWdodCIsIiIpO2wmJih0aGlzLl9jdXJyRmlsbE5vZGU9CmwpO3RoaXMuX2ZpbGxIZWlnaHQoKX0sX2ZpbGxIZWlnaHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmdldCgiZmlsbEhlaWdodCIpKXt2YXIgbD10aGlzLmdldCgiaGVpZ2h0Iik7IiIhPWwmJiJhdXRvIiE9bCYmdGhpcy5maWxsSGVpZ2h0KHRoaXMuZ2V0U3RkTW9kTm9kZSh0aGlzLmdldCgiZmlsbEhlaWdodCIpKSl9fSxfdWlTZXRTdGRNb2Q6ZnVuY3Rpb24obCxoLHUpe2lmKHQuaXNWYWx1ZShoKSl7dmFyIHc9dGhpcy5nZXRTdGRNb2ROb2RlKGwsITApO3RoaXMuX2FkZFN0ZE1vZENvbnRlbnQodyxoLHUpO3RoaXMuc2V0KGwrIkNvbnRlbnQiLHRoaXMuX2dldFN0ZE1vZENvbnRlbnQobCkse3NyYzpifSl9ZWxzZSB0aGlzLl9lcmFzZVN0ZE1vZChsKTt0aGlzLmZpcmUoImNvbnRlbnRVcGRhdGUiKX0sX3JlbmRlclN0ZE1vZDpmdW5jdGlvbihsKXt2YXIgaD10aGlzLmdldCgiY29udGVudEJveCIpLHU9dGhpcy5fZmluZFN0ZE1vZFNlY3Rpb24obCk7dXx8KHU9dGhpcy5fZ2V0U3RkTW9kVGVtcGxhdGUobCkpOwp0aGlzLl9pbnNlcnRTdGRNb2RTZWN0aW9uKGgsbCx1KTt0aGlzW2wrIk5vZGUiXT11O3JldHVybiB0aGlzW2wrIk5vZGUiXX0sX2VyYXNlU3RkTW9kOmZ1bmN0aW9uKGwpe3ZhciBoPXRoaXMuZ2V0U3RkTW9kTm9kZShsKTtoJiYoaC5yZW1vdmUoITApLGRlbGV0ZSB0aGlzW2wrIk5vZGUiXSl9LF9pbnNlcnRTdGRNb2RTZWN0aW9uOmZ1bmN0aW9uKGwsaCx1KXt2YXIgdz1sLmdldCgiZmlyc3RDaGlsZCIpO2ghPT1rJiZ3P2g9PT1nP2wuaW5zZXJ0QmVmb3JlKHUsdyk6KGg9dGhpc1trKyJOb2RlIl0pP2wuaW5zZXJ0QmVmb3JlKHUsaCk6bC5hcHBlbmRDaGlsZCh1KTpsLmFwcGVuZENoaWxkKHUpfSxfZ2V0U3RkTW9kVGVtcGxhdGU6ZnVuY3Rpb24obCl7cmV0dXJuIGYuY3JlYXRlKHEuVEVNUExBVEVTW2xdLHRoaXMuX3N0ZE1vZE5vZGUuZ2V0KCJvd25lckRvY3VtZW50IikpfSxfYWRkU3RkTW9kQ29udGVudDpmdW5jdGlvbihsLGgsdSl7c3dpdGNoKHUpe2Nhc2UgcS5CRUZPUkU6dT0KMDticmVhaztjYXNlIHEuQUZURVI6dT12b2lkIDA7YnJlYWs7ZGVmYXVsdDp1PXEuUkVQTEFDRX1sLmluc2VydChoLHUpfSxfZ2V0UHJlY2lzZUhlaWdodDpmdW5jdGlvbihsKXt2YXIgaD1sP2wuZ2V0KCJvZmZzZXRIZWlnaHQiKTowO2wmJmwuaGFzTWV0aG9kKCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiKSYmKGw9bC5pbnZva2UoImdldEJvdW5kaW5nQ2xpZW50UmVjdCIpKSYmKGg9bC5ib3R0b20tbC50b3ApO3JldHVybiBofSxfZmluZFN0ZE1vZFNlY3Rpb246ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMuZ2V0KCJjb250ZW50Qm94Iikub25lKCJceDNlIC4iK3EuU0VDVElPTl9DTEFTU19OQU1FU1tsXSl9LF9wYXJzZVN0ZE1vZEhUTUw6ZnVuY3Rpb24obCl7dmFyIGg9dGhpcy5fZmluZFN0ZE1vZFNlY3Rpb24obCk7cmV0dXJuIGg/KHRoaXMuX3N0ZE1vZFBhcnNlZHx8KHRoaXMuX3N0ZE1vZFBhcnNlZD17fSxhLmJlZm9yZSh0aGlzLl9hcHBseVN0ZE1vZFBhcnNlZENvbmZpZyx0aGlzLAoiX2FwcGx5UGFyc2VkQ29uZmlnIikpLHRoaXMuX3N0ZE1vZFBhcnNlZFtsKyJDb250ZW50Il09MSxoLmdldCgiaW5uZXJIVE1MIikpOm51bGx9LF9hcHBseVN0ZE1vZFBhcnNlZENvbmZpZzpmdW5jdGlvbihsLGgsdSl7aWYobD10aGlzLl9zdGRNb2RQYXJzZWQpbFttXT0hKG0gaW4gaCkmJm0gaW4gbCxsW3NdPSEocyBpbiBoKSYmcyBpbiBsLGxbcF09IShwIGluIGgpJiZwIGluIGx9LF9nZXRTdGRNb2RDb250ZW50OmZ1bmN0aW9uKGwpe3JldHVybiB0aGlzW2wrIk5vZGUiXT90aGlzW2wrIk5vZGUiXS5nZXQoImNoaWxkTm9kZXMiKTpudWxsfSxzZXRTdGRNb2RDb250ZW50OmZ1bmN0aW9uKGwsaCx1KXt0aGlzLnNldChsKyJDb250ZW50IixoLHtzdGRNb2RQb3NpdGlvbjp1fSl9LGdldFN0ZE1vZE5vZGU6ZnVuY3Rpb24obCxoKXt2YXIgdT10aGlzW2wrIk5vZGUiXXx8bnVsbDshdSYmaCYmKHU9dGhpcy5fcmVuZGVyU3RkTW9kKGwpKTtyZXR1cm4gdX0sZmlsbEhlaWdodDpmdW5jdGlvbihsKXtpZihsKXt2YXIgaD0KdGhpcy5nZXQoImNvbnRlbnRCb3giKSx1PVt0aGlzLmhlYWRlck5vZGUsdGhpcy5ib2R5Tm9kZSx0aGlzLmZvb3Rlck5vZGVdLHcsej0wO3c9MDtmb3IodmFyIEE9ITEsSD0wLEY9dS5sZW5ndGg7SDxGO0grKykodz11W0hdKSYmKHchPT1sP3orPXRoaXMuX2dldFByZWNpc2VIZWlnaHQodyk6QT0hMCk7QSYmKChkLmllfHxkLm9wZXJhKSYmbC5zZXQoIm9mZnNldEhlaWdodCIsMCksaD1oLmdldCgib2Zmc2V0SGVpZ2h0IiktcGFyc2VJbnQoaC5nZXRDb21wdXRlZFN0eWxlKCJwYWRkaW5nVG9wIiksMTApLXBhcnNlSW50KGguZ2V0Q29tcHV0ZWRTdHlsZSgicGFkZGluZ0JvdHRvbSIpLDEwKS1wYXJzZUludChoLmdldENvbXB1dGVkU3R5bGUoImJvcmRlckJvdHRvbVdpZHRoIiksMTApLXBhcnNlSW50KGguZ2V0Q29tcHV0ZWRTdHlsZSgiYm9yZGVyVG9wV2lkdGgiKSwxMCksdC5pc051bWJlcihoKSYmKHc9aC16LDA8PXcmJmwuc2V0KCJvZmZzZXRIZWlnaHQiLHcpKSl9fX07YS5XaWRnZXRTdGRNb2Q9CnF9LCJwYXRjaGVkLXYzLjE4LjEiLHtyZXF1aXJlczpbImJhc2UtYnVpbGQiLCJ3aWRnZXQiXX0pOwpZVUkuYWRkKCJhdWktYXJpYSIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLkxhbmcsdD1xLmlzQm9vbGVhbixmPXEuaXNGdW5jdGlvbixkPXEuaXNPYmplY3QsYz1xLmlzU3RyaW5nLGI9LyhbXmEtel0pL2lnLGc9YS5jYWNoZWQoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShiLGZ1bmN0aW9uKCl7cmV0dXJuIiJ9KS50b0xvd2VyQ2FzZSgpfSkscT1hLkNvbXBvbmVudC5jcmVhdGUoe05BTUU6ImFyaWEiLE5TOiJhcmlhIixBVFRSUzp7YXR0cmlidXRlczp7dmFsdWU6e30sdmFsaWRhdG9yOmR9LGF0dHJpYnV0ZVZhbHVlRm9ybWF0Ont2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX0sdmFsaWRhdG9yOmZ9LGF0dHJpYnV0ZU5vZGU6e3dyaXRlT25jZTohMCxzZXR0ZXI6YS5vbmUsdmFsdWVGbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgiaG9zdCIpLmdldCgiYm91bmRpbmdCb3giKX19LHJvbGVOYW1lOnt2YWx1ZUZuOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXQoImhvc3QiKSwKZT1nKGUuY29uc3RydWN0b3IuTkFNRXx8IiIpO3JldHVybiB0aGlzLmlzVmFsaWRSb2xlKGUpP2U6IiJ9LHZhbGlkYXRvcjpjfSxyb2xlTm9kZTp7d3JpdGVPbmNlOiEwLHNldHRlcjphLm9uZSx2YWx1ZUZuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJob3N0IikuZ2V0KCJib3VuZGluZ0JveCIpfX0sdmFsaWRhdGVXM0M6e3ZhbHVlOiEwLHZhbGlkYXRvcjp0fX0sRVhURU5EUzphLlBsdWdpbi5CYXNlLHByb3RvdHlwZTp7aW5pdGlhbGl6ZXI6ZnVuY3Rpb24oKXt0aGlzLnB1Ymxpc2goImFyaWE6cHJvY2Vzc0F0dHJpYnV0ZSIse2RlZmF1bHRGbjp0aGlzLl9kZWZQcm9jZXNzRm4scXVldWFibGU6ITEsZW1pdEZhY2FkZTohMCxidWJibGVzOiEwLHByZWZpeDoiYXJpYSJ9KTt0aGlzLl91aVNldFJvbGVOYW1lKHRoaXMuZ2V0KCJyb2xlTmFtZSIpKTt0aGlzLmFmdGVyKCJyb2xlTmFtZUNoYW5nZSIsdGhpcy5fYWZ0ZXJSb2xlTmFtZUNoYW5nZSk7dGhpcy5fYmluZEhvc3RBdHRyaWJ1dGVzKCl9LAppc1ZhbGlkQXR0cmlidXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldCgidmFsaWRhdGVXM0MiKT9hLlBsdWdpbi5BcmlhLlczQ19BVFRSSUJVVEVTW2VdOiEwfSxpc1ZhbGlkUm9sZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXQoInZhbGlkYXRlVzNDIik/YS5QbHVnaW4uQXJpYS5XM0NfUk9MRVNbZV06ITB9LHNldEF0dHJpYnV0ZTpmdW5jdGlvbihlLGssbSl7cmV0dXJuIHRoaXMuaXNWYWxpZEF0dHJpYnV0ZShlKT8oKG18fHRoaXMuZ2V0KCJhdHRyaWJ1dGVOb2RlIikpLnNldCgiYXJpYS0iK2UsayksITApOiExfSxzZXRBdHRyaWJ1dGVzOmZ1bmN0aW9uKGUpe3ZhciBrPXRoaXM7YS5BcnJheS5lYWNoKGUsZnVuY3Rpb24obSl7ay5zZXRBdHRyaWJ1dGUobS5uYW1lLG0udmFsdWUsbS5ub2RlKX0pfSxzZXRSb2xlOmZ1bmN0aW9uKGUsayl7cmV0dXJuIHRoaXMuaXNWYWxpZFJvbGUoZSk/KChrfHx0aGlzLmdldCgicm9sZU5vZGUiKSkuc2V0KCJyb2xlIixlKSwhMCk6ITF9LApzZXRSb2xlczpmdW5jdGlvbihlKXt2YXIgaz10aGlzO2EuQXJyYXkuZWFjaChlLGZ1bmN0aW9uKG0pe2suc2V0Um9sZShtLm5hbWUsbS5ub2RlKX0pfSxfYWZ0ZXJIb3N0QXR0cmlidXRlQ2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMuX2hhbmRsZVByb2Nlc3NBdHRyaWJ1dGUoZSl9LF9hZnRlclJvbGVOYW1lQ2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMuX3VpU2V0Um9sZU5hbWUoZS5uZXdWYWwpfSxfYmluZEhvc3RBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxrPWUuZ2V0KCJhdHRyaWJ1dGVzIik7YS5lYWNoKGssZnVuY3Rpb24obSxwKXt2YXIgcz1lLl9nZXRBcmlhQXR0cmlidXRlKG0scCk7ZS5faGFuZGxlUHJvY2Vzc0F0dHJpYnV0ZSh7YXJpYTpzfSk7ZS5hZnRlckhvc3RFdmVudChwKyJDaGFuZ2UiLGZ1bmN0aW9uKGwpe2wuYXJpYT1zO2UuX2FmdGVySG9zdEF0dHJpYnV0ZUNoYW5nZShsKX0pfSl9LF9kZWZQcm9jZXNzRm46ZnVuY3Rpb24oZSl7dGhpcy5fc2V0QXR0cmlidXRlKGUuYXJpYSl9LApfZ2V0QXJpYUF0dHJpYnV0ZTpmdW5jdGlvbihlLGspe3ZhciBtPXRoaXMuZ2V0KCJhdHRyaWJ1dGVWYWx1ZUZvcm1hdCIpLHA9e307YyhlKT9wPWEubWVyZ2UocCx7YXJpYU5hbWU6ZSxhdHRyTmFtZTprLGZvcm1hdDptLG5vZGU6bnVsbH0pOmQoZSkmJihwPWEubWl4KGUse2FyaWFOYW1lOiIiLGF0dHJOYW1lOmssZm9ybWF0Om0sbm9kZTpudWxsfSkpO3JldHVybiBwfSxfaGFuZGxlUHJvY2Vzc0F0dHJpYnV0ZTpmdW5jdGlvbihlKXt0aGlzLmZpcmUoImFyaWE6cHJvY2Vzc0F0dHJpYnV0ZSIse2FyaWE6ZS5hcmlhfSl9LF9zZXRBdHRyaWJ1dGU6ZnVuY3Rpb24oZSl7dmFyIGs9dGhpcy5nZXQoImhvc3QiKS5nZXQoZS5hdHRyTmFtZSksbT1lLm5vZGU7ZihtKSYmKG09bS5hcHBseSh0aGlzLFtlXSkpO3RoaXMuc2V0QXR0cmlidXRlKGUuYXJpYU5hbWUsZS5mb3JtYXQuYXBwbHkodGhpcyxbayxlXSksbSl9LF91aVNldFJvbGVOYW1lOmZ1bmN0aW9uKGUpe3RoaXMuc2V0Um9sZShlKX19fSk7CmEuUGx1Z2luLkFyaWE9cTthLlBsdWdpbi5BcmlhLlczQ19ST0xFUz17YWxlcnQ6MSxhbGVydGRpYWxvZzoxLGFwcGxpY2F0aW9uOjEsYXJ0aWNsZToxLGJhbm5lcjoxLGJ1dHRvbjoxLGNoZWNrYm94OjEsY29sdW1uaGVhZGVyOjEsY29tYm9ib3g6MSxjb21tYW5kOjEsY29tcGxlbWVudGFyeToxLGNvbXBvc2l0ZToxLGNvbnRlbnRpbmZvOjEsZGVmaW5pdGlvbjoxLGRpYWxvZzoxLGRpcmVjdG9yeToxLGRvY3VtZW50OjEsZm9ybToxLGdyaWQ6MSxncmlkY2VsbDoxLGdyb3VwOjEsaGVhZGluZzoxLGltZzoxLGlucHV0OjEsbGFuZG1hcms6MSxsaW5rOjEsbGlzdDoxLGxpc3Rib3g6MSxsaXN0aXRlbToxLGxvZzoxLG1haW46MSxtYXJxdWVlOjEsbWF0aDoxLG1lbnU6MSxtZW51YmFyOjEsbWVudWl0ZW06MSxtZW51aXRlbWNoZWNrYm94OjEsbWVudWl0ZW1yYWRpbzoxLG5hdmlnYXRpb246MSxub3RlOjEsb3B0aW9uOjEscHJlc2VudGF0aW9uOjEscHJvZ3Jlc3NiYXI6MSxyYWRpbzoxLApyYWRpb2dyb3VwOjEscmFuZ2U6MSxyZWdpb246MSxyb2xldHlwZToxLHJvdzoxLHJvd2hlYWRlcjoxLHNjcm9sbGJhcjoxLHNlYXJjaDoxLHNlY3Rpb246MSxzZWN0aW9uaGVhZDoxLHNlbGVjdDoxLHNlcGFyYXRvcjoxLHNsaWRlcjoxLHNwaW5idXR0b246MSxzdGF0dXM6MSxzdHJ1Y3R1cmU6MSx0YWI6MSx0YWJsaXN0OjEsdGFicGFuZWw6MSx0ZXh0Ym94OjEsdGltZXI6MSx0b29sYmFyOjEsdG9vbHRpcDoxLHRyZWU6MSx0cmVlZ3JpZDoxLHRyZWVpdGVtOjEsd2lkZ2V0OjEsd2luZG93OjF9O2EuUGx1Z2luLkFyaWEuVzNDX0FUVFJJQlVURVM9e2FjdGl2ZWRlc2NlbmRhbnQ6MSxhdG9taWM6MSxhdXRvY29tcGxldGU6MSxidXN5OjEsY2hlY2tlZDoxLGNvbnRyb2xzOjEsZGVzY3JpYmVkYnk6MSxkaXNhYmxlZDoxLGRyb3BlZmZlY3Q6MSxleHBhbmRlZDoxLGZsb3d0bzoxLGdyYWJiZWQ6MSxoYXNwb3B1cDoxLGhpZGRlbjoxLGludmFsaWQ6MSxsYWJlbDoxLGxhYmVsbGVkYnk6MSwKbGV2ZWw6MSxsaXZlOjEsbXVsdGlsaW5lOjEsbXVsdGlzZWxlY3RhYmxlOjEsb3JpZW50YXRpb246MSxvd25zOjEscG9zaW5zZXQ6MSxwcmVzc2VkOjEscmVhZG9ubHk6MSxyZWxldmFudDoxLHJlcXVpcmVkOjEsc2VsZWN0ZWQ6MSxzZXRzaXplOjEsc29ydDoxLHZhbHVlbWF4OjEsdmFsdWVtaW46MSx2YWx1ZW5vdzoxLHZhbHVldGV4dDoxfX0sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbInBsdWdpbiIsImF1aS1jb21wb25lbnQiXX0pOwpZVUkuYWRkKCJhdWktaW8tcGx1Z2luLWRlcHJlY2F0ZWQiLGZ1bmN0aW9uKGEsRSl7dmFyIHE9YS5MYW5nLHQ9cS5pc0Jvb2xlYW4sZj1xLmlzU3RyaW5nLGQ9YS5XaWRnZXRTdGRNb2QsYz1hLmdldENsYXNzTmFtZTtjKCJpY29uIiwibG9hZGluZyIpO3ZhciBiPWEuQ29tcG9uZW50LmNyZWF0ZSh7TkFNRToiSU9QbHVnaW4iLE5TOiJpbyIsQVRUUlM6e25vZGU6e3ZhbHVlOm51bGwsZ2V0dGVyOmZ1bmN0aW9uKGcpe2lmKCFnKXt2YXIgZT10aGlzLmdldCgiaG9zdCIpLGs9dGhpcy5nZXQoInR5cGUiKTsiTm9kZSI9PWs/Zz1lOiJXaWRnZXQiPT1rJiYoZz10aGlzLmdldCgic2VjdGlvbiIpLGUuZ2V0U3RkTW9kTm9kZShnKXx8ZS5zZXRTdGRNb2RDb250ZW50KGcsIiIpLGc9ZS5nZXRTdGRNb2ROb2RlKGcpKX1yZXR1cm4gYS5vbmUoZyl9LHZhbGlkYXRvcjpmdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIGEuTm9kZX19LGZhaWx1cmVNZXNzYWdlOnt2YWx1ZToiRmFpbGVkIHRvIHJldHJpZXZlIGNvbnRlbnQiLAp2YWxpZGF0b3I6Zn0sbG9hZGluZ01hc2s6e3ZhbHVlOnt9fSxwYXJzZUNvbnRlbnQ6e3ZhbHVlOiEwLHZhbGlkYXRvcjp0fSxzaG93TG9hZGluZzp7dmFsdWU6ITAsdmFsaWRhdG9yOnR9LHNlY3Rpb246e3ZhbHVlOmQuQk9EWSx2YWxpZGF0b3I6ZnVuY3Rpb24oZyl7cmV0dXJuIWd8fGc9PWQuQk9EWXx8Zz09ZC5IRUFERVJ8fGc9PWQuRk9PVEVSfX0sdHlwZTp7cmVhZE9ubHk6ITAsdmFsdWVGbjpmdW5jdGlvbigpe3ZhciBnPSJOb2RlIjt0aGlzLmdldCgiaG9zdCIpaW5zdGFuY2VvZiBhLldpZGdldCYmKGc9IldpZGdldCIpO3JldHVybiBnfSx2YWxpZGF0b3I6Zn0sd2hlcmU6e3ZhbHVlOmQuUkVQTEFDRSx2YWxpZGF0b3I6ZnVuY3Rpb24oZyl7cmV0dXJuIWd8fGc9PWQuQUZURVJ8fGc9PWQuQkVGT1JFfHxnPT1kLlJFUExBQ0V8fCJvdXRlciI9PWd9fX0sRVhURU5EUzphLklPUmVxdWVzdCxwcm90b3R5cGU6e2JpbmRVSTpmdW5jdGlvbigpe3RoaXMub24oImFjdGl2ZUNoYW5nZSIsCnRoaXMuX29uQWN0aXZlQ2hhbmdlKTt0aGlzLm9uKCJzdWNjZXNzIix0aGlzLl9zdWNjZXNzSGFuZGxlcik7dGhpcy5vbigiZmFpbHVyZSIsdGhpcy5fZmFpbHVyZUhhbmRsZXIpO2lmKCJXaWRnZXQiPT10aGlzLmdldCgidHlwZSIpJiZ0aGlzLmdldCgic2hvd0xvYWRpbmciKSl7dmFyIGc9dGhpcy5nZXQoImhvc3QiKTtnLmFmdGVyKCJoZWlnaHRDaGFuZ2UiLHRoaXMuX3N5bmNMb2FkaW5nTWFza1VJLHRoaXMpO2cuYWZ0ZXIoIndpZHRoQ2hhbmdlIix0aGlzLl9zeW5jTG9hZGluZ01hc2tVSSx0aGlzKX19LF9hdXRvU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLmJpbmRVSSgpO2Iuc3VwZXJjbGFzcy5fYXV0b1N0YXJ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX2JpbmRQYXJzZUNvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmdldCgibm9kZSIpO2cmJiFnLlBhcnNlQ29udGVudCYmdGhpcy5nZXQoInBhcnNlQ29udGVudCIpJiZnLnBsdWcoYS5QbHVnaW4uUGFyc2VDb250ZW50KX0saGlkZUxvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgZz0KdGhpcy5nZXQoIm5vZGUiKTtnLmxvYWRpbmdtYXNrJiZnLmxvYWRpbmdtYXNrLmhpZGUoKX0sc2V0Q29udGVudDpmdW5jdGlvbihnKXt0aGlzLl9iaW5kUGFyc2VDb250ZW50KCk7dGhpcy5fZ2V0Q29udGVudFNldHRlckJ5VHlwZSgpLmFwcGx5KHRoaXMsW2ddKTt0aGlzLm92ZXJsYXlNYXNrQm91bmRpbmdCb3gmJnRoaXMub3ZlcmxheU1hc2tCb3VuZGluZ0JveC5yZW1vdmUoKX0sc2hvd0xvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmdldCgibm9kZSIpO2cubG9hZGluZ21hc2s/dGhpcy5vdmVybGF5TWFza0JvdW5kaW5nQm94JiZnLmFwcGVuZCh0aGlzLm92ZXJsYXlNYXNrQm91bmRpbmdCb3gpOihnLnBsdWcoYS5Mb2FkaW5nTWFzayx0aGlzLmdldCgibG9hZGluZ01hc2siKSksdGhpcy5vdmVybGF5TWFza0JvdW5kaW5nQm94PWcubG9hZGluZ21hc2sub3ZlcmxheU1hc2suZ2V0KCJib3VuZGluZ0JveCIpKTtnLmxvYWRpbmdtYXNrLnNob3coKX0sc3RhcnQ6ZnVuY3Rpb24oKXt2YXIgZz0KdGhpcyxlPWcuZ2V0KCJob3N0Iik7ZS5nZXQoInJlbmRlcmVkIil8fGUuYWZ0ZXIoInJlbmRlciIsZnVuY3Rpb24oKXtnLl9zZXRMb2FkaW5nVUkoITApfSk7Yi5zdXBlcmNsYXNzLnN0YXJ0LmFwcGx5KGcsYXJndW1lbnRzKX0sX2dldENvbnRlbnRTZXR0ZXJCeVR5cGU6ZnVuY3Rpb24oKXtyZXR1cm57Tm9kZTpmdW5jdGlvbihnKXt2YXIgZT10aGlzLmdldCgibm9kZSIpO2cgaW5zdGFuY2VvZiBhLk5vZGVMaXN0JiYoZz1nLnRvRnJhZygpKTtnIGluc3RhbmNlb2YgYS5Ob2RlJiYoZz1nLl9ub2RlKTt2YXIgaz10aGlzLmdldCgid2hlcmUiKTsib3V0ZXIiPT1rP2UucmVwbGFjZShnKTplLmluc2VydChnLGspfSxXaWRnZXQ6ZnVuY3Rpb24oZyl7dmFyIGU9dGhpcy5nZXQoImhvc3QiKTtlLnNldFN0ZE1vZENvbnRlbnQuYXBwbHkoZSxbdGhpcy5nZXQoInNlY3Rpb24iKSxnLHRoaXMuZ2V0KCJ3aGVyZSIpXSl9fVt0aGlzLmdldCgidHlwZSIpXX0sX3NldExvYWRpbmdVSTpmdW5jdGlvbihnKXt0aGlzLmdldCgic2hvd0xvYWRpbmciKSYmCihnP3RoaXMuc2hvd0xvYWRpbmcoKTp0aGlzLmhpZGVMb2FkaW5nKCkpfSxfc3luY0xvYWRpbmdNYXNrVUk6ZnVuY3Rpb24oKXt0aGlzLmdldCgibm9kZSIpLmxvYWRpbmdtYXNrLnJlZnJlc2hNYXNrKCl9LF9zdWNjZXNzSGFuZGxlcjpmdW5jdGlvbihnLGUsayl7dGhpcy5zZXRDb250ZW50KHRoaXMuZ2V0KCJyZXNwb25zZURhdGEiKSl9LF9mYWlsdXJlSGFuZGxlcjpmdW5jdGlvbihnLGUsayl7dGhpcy5zZXRDb250ZW50KHRoaXMuZ2V0KCJmYWlsdXJlTWVzc2FnZSIpKX0sX29uQWN0aXZlQ2hhbmdlOmZ1bmN0aW9uKGcpe3ZhciBlPXRoaXMuZ2V0KCJob3N0Iiksaz0iV2lkZ2V0Ij09dGhpcy5nZXQoInR5cGUiKTsoIWt8fGsmJmUmJmUuZ2V0KCJyZW5kZXJlZCIpKSYmdGhpcy5fc2V0TG9hZGluZ1VJKGcubmV3VmFsKX19fSk7YS5Ob2RlLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGcsZSxrKXt2YXIgbT1nLmluZGV4T2YoIiAiKSxwOzA8bSYmKHA9Zy5zbGljZShtLGcubGVuZ3RoKSwKZz1nLnNsaWNlKDAsbSkpO3EuaXNGdW5jdGlvbihlKSYmKGs9ZSxlPW51bGwpO2U9ZXx8e307ayYmKGUuYWZ0ZXI9ZS5hZnRlcnx8e30sZS5hZnRlci5zdWNjZXNzPWspO2s9ZS53aGVyZTtlLnVyaT1nO2Uud2hlcmU9aztwJiYoZS5zZWxlY3Rvcj1wLGUud2hlcmU9a3x8InJlcGxhY2UiKTt0aGlzLnBsdWcoYS5QbHVnaW4uSU8sZSk7cmV0dXJuIHRoaXN9O2EubmFtZXNwYWNlKCJQbHVnaW4iKS5JTz1ifSwiMy4wLjMtZGVwcmVjYXRlZC43MyIse3JlcXVpcmVzOlsiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIiwiYXVpLXBhcnNlLWNvbnRlbnQiLCJhdWktaW8tcmVxdWVzdCIsImF1aS1sb2FkaW5nLW1hc2stZGVwcmVjYXRlZCJdfSk7CllVSS5hZGQoImF1aS1pby1yZXF1ZXN0IixmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZyx0PXEuaXNCb29sZWFuLGY9cS5pc0Z1bmN0aW9uLHE9cS5pc1N0cmluZyxkPWEubmFtZXNwYWNlKCJjb25maWcuaW8iKSxjPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBkW2VdfX0sYj17YWxsOiIqLyoiLGh0bWw6InRleHQvaHRtbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0Iix0ZXh0OiJ0ZXh0L3BsYWluIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwifSxnPWEuQ29tcG9uZW50LmNyZWF0ZSh7TkFNRToiSU9SZXF1ZXN0IixBVFRSUzp7YXV0b0xvYWQ6e3ZhbHVlOiEwLHZhbGlkYXRvcjp0fSxjYWNoZTp7dmFsdWU6ITAsdmFsaWRhdG9yOnR9LGRhdGFUeXBlOntzZXR0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fCIiKS50b0xvd2VyQ2FzZSgpfSx2YWx1ZTpudWxsLHZhbGlkYXRvcjpxfSxyZXNwb25zZURhdGE6e3NldHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fc2V0UmVzcG9uc2VEYXRhKGUpfSwKdmFsdWU6bnVsbH0sdXJpOntzZXR0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcnNlVVJMKGUpfSx2YWx1ZTpudWxsLHZhbGlkYXRvcjpxfSxhY3RpdmU6e3ZhbHVlOiExLHZhbGlkYXRvcjp0fSxjZmc6e2dldHRlcjpmdW5jdGlvbigpe3JldHVybnthcmd1bWVudHM6dGhpcy5nZXQoImFyZ3VtZW50cyIpLGNvbnRleHQ6dGhpcy5nZXQoImNvbnRleHQiKSxkYXRhOnRoaXMuZ2V0Rm9ybWF0dGVkRGF0YSgpLGZvcm06dGhpcy5nZXQoImZvcm0iKSxoZWFkZXJzOnRoaXMuZ2V0KCJoZWFkZXJzIiksbWV0aG9kOnRoaXMuZ2V0KCJtZXRob2QiKSxvbjp7Y29tcGxldGU6YS5iaW5kKHRoaXMuZmlyZSx0aGlzLCJjb21wbGV0ZSIpLGVuZDphLmJpbmQodGhpcy5fZW5kLHRoaXMpLGZhaWx1cmU6YS5iaW5kKHRoaXMuZmlyZSx0aGlzLCJmYWlsdXJlIiksc3RhcnQ6YS5iaW5kKHRoaXMuZmlyZSx0aGlzLCJzdGFydCIpLHN1Y2Nlc3M6YS5iaW5kKHRoaXMuX3N1Y2Nlc3MsdGhpcyl9LHN5bmM6dGhpcy5nZXQoInN5bmMiKSwKdGltZW91dDp0aGlzLmdldCgidGltZW91dCIpLHhkcjp0aGlzLmdldCgieGRyIil9fSxyZWFkT25seTohMH0sdHJhbnNhY3Rpb246e3ZhbHVlOm51bGx9LGFyZ3VtZW50czp7dmFsdWVGbjpjKCJhcmd1bWVudHMiKX0sY29udGV4dDp7dmFsdWVGbjpjKCJjb250ZXh0Iil9LGRhdGE6e3ZhbHVlRm46YygiZGF0YSIpfSxmb3JtOnt2YWx1ZUZuOmMoImZvcm0iKX0saGVhZGVyczp7Z2V0dGVyOmZ1bmN0aW9uKGUpe3ZhciBrPVtdLG09dGhpcy5nZXQoImRhdGFUeXBlIik7bSYmay5wdXNoKGJbbV0pO2sucHVzaChiLmFsbCk7cmV0dXJuIGEubWVyZ2UoZSx7QWNjZXB0Omsuam9pbigiLCAiKX0pfSx2YWx1ZUZuOmMoImhlYWRlcnMiKX0sbWV0aG9kOntzZXR0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX0sdmFsdWVGbjpjKCJtZXRob2QiKX0sc2VsZWN0b3I6e3ZhbHVlOm51bGx9LHN5bmM6e3ZhbHVlRm46Yygic3luYyIpfSx0aW1lb3V0Ont2YWx1ZUZuOmMoInRpbWVvdXQiKX0sCnhkcjp7dmFsdWVGbjpjKCJ4ZHIiKX19LEVYVEVORFM6YS5QbHVnaW4uQmFzZSxwcm90b3R5cGU6e2luaXQ6ZnVuY3Rpb24oKXtnLnN1cGVyY2xhc3MuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fYXV0b1N0YXJ0KCl9LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLnN0b3AoKTt0aGlzLnNldCgidHJhbnNhY3Rpb24iLG51bGwpfSxnZXRGb3JtYXR0ZWREYXRhOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXQoImRhdGEiKSxrPWQuZGF0YUZvcm1hdHRlcjtmKGspJiYoZT1rLmNhbGwodGhpcyxlKSk7cmV0dXJuIGV9LHN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5kZXN0cnVjdG9yKCk7dGhpcy5zZXQoImFjdGl2ZSIsITApO3ZhciBlPXRoaXMuX3l1aUlPT2JqO2V8fCh0aGlzLl95dWlJT09iaj1lPW5ldyBhLklPKTtlPWUuc2VuZCh0aGlzLmdldCgidXJpIiksdGhpcy5nZXQoImNmZyIpKTt0aGlzLnNldCgidHJhbnNhY3Rpb24iLGUpfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXQoInRyYW5zYWN0aW9uIik7CmUmJmUuYWJvcnQoKX0sX2F1dG9TdGFydDpmdW5jdGlvbigpe3RoaXMuZ2V0KCJhdXRvTG9hZCIpJiZ0aGlzLnN0YXJ0KCl9LF9wYXJzZVVSTDpmdW5jdGlvbihlKXt2YXIgaz10aGlzLmdldCgiY2FjaGUiKSxtPXRoaXMuZ2V0KCJtZXRob2QiKTshMT09PWsmJiJnZXQiPT09bSYmKGs9K25ldyBEYXRlLG09ZS5yZXBsYWNlKC8oXD98JilfPS4qPygmfCQpLywiJDFfXHgzZCIraysiJDIiKSxlPW0rKG09PT1lPyhlLm1hdGNoKC9cPy8pPyJceDI2IjoiPyIpKyJfXHgzZCIrazoiIikpO2s9ZC51cmlGb3JtYXR0ZXI7ZihrKSYmKGU9ay5hcHBseSh0aGlzLFtlXSkpO3JldHVybiBlfSxfZW5kOmZ1bmN0aW9uKGUsayl7dGhpcy5zZXQoImFjdGl2ZSIsITEpO3RoaXMuc2V0KCJ0cmFuc2FjdGlvbiIsbnVsbCk7dGhpcy5maXJlKCJlbmQiLGUsayl9LF9zdWNjZXNzOmZ1bmN0aW9uKGUsayxtKXt0aGlzLnNldCgicmVzcG9uc2VEYXRhIixrKTt0aGlzLmZpcmUoInN1Y2Nlc3MiLGUsayxtKX0sX3NldFJlc3BvbnNlRGF0YTpmdW5jdGlvbihlKXt2YXIgaz0KbnVsbDtpZihlKXt2YXIgbT10aGlzLmdldCgiZGF0YVR5cGUiKSxrPWUuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIjtpZigieG1sIj09PW18fCFtJiYwPD1rLmluZGV4T2YoInhtbCIpKXtpZihrPWUucmVzcG9uc2VYTUwsInBhcnNlcmVycm9yIj09PWsuZG9jdW1lbnRFbGVtZW50LnRhZ05hbWUpdGhyb3ciUGFyc2VyIGVycm9yOiBJTyBkYXRhVHlwZSBpcyBub3QgY29ycmVjdGx5IHBhcnNpbmciO31lbHNlIGs9ZS5yZXNwb25zZVRleHQ7IiI9PT1rJiYoaz1udWxsKTtpZigianNvbiI9PT1tKXRyeXtrPWEuSlNPTi5wYXJzZShrKX1jYXRjaChwKXt9ZWxzZSBlPXRoaXMuZ2V0KCJzZWxlY3RvciIpLGsmJmUmJihrPShrLmRvY3VtZW50RWxlbWVudD9hLm9uZShrKTphLk5vZGUuY3JlYXRlKGspKS5hbGwoZSkpfXJldHVybiBrfX19KTthLklPUmVxdWVzdD1nO2EuaW8ucmVxdWVzdD1mdW5jdGlvbihlLGspe3JldHVybiBuZXcgYS5JT1JlcXVlc3QoYS5tZXJnZShrLAp7dXJpOmV9KSl9fSwiMy4wLjMtZGVwcmVjYXRlZC43MyIse3JlcXVpcmVzOlsiaW8tYmFzZSIsImpzb24iLCJwbHVnaW4iLCJxdWVyeXN0cmluZy1zdHJpbmdpZnkiLCJhdWktY29tcG9uZW50Il19KTsKWVVJLmFkZCgiYXVpLWxvYWRpbmctbWFzay1kZXByZWNhdGVkIixmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZztFPSJsb2FkaW5nbWFzayI7dmFyIHQ9YS5nZXRDbGFzc05hbWUsZj10KEUpLGQ9dChFLCJtYXNrZWQiKSxjPXQoRSwibWFza2VkIiwicmVsYXRpdmUiKSxiPXQoRSwibWVzc2FnZSIpLHQ9dChFLCJtZXNzYWdlIiwiY29udGVudCIpLGc9J1x4M2NkaXYgY2xhc3NceDNkIicrYisnIlx4M2VceDNjZGl2IGNsYXNzXHgzZCInK3QrJyJceDNlezB9XHgzYy9kaXZceDNlXHgzYy9kaXZceDNlJyxlPWEuQ29tcG9uZW50LmNyZWF0ZSh7TkFNRTpFLE5TOkUsQVRUUlM6e21lc3NhZ2VFbDp7dmFsdWVGbjpmdW5jdGlvbihrKXtrPXRoaXMuZ2V0KCJzdHJpbmdzIik7cmV0dXJuIGEuTm9kZS5jcmVhdGUocS5zdWIoZyxbay5sb2FkaW5nXSkpfX0sc3RyaW5nczp7dmFsdWU6e2xvYWRpbmc6IkxvYWRpbmdceDI2aGVsbGlwOyJ9fSx0YXJnZXQ6e3NldHRlcjpmdW5jdGlvbigpe3ZhciBrPQp0aGlzLmdldCgiaG9zdCIpO2sgaW5zdGFuY2VvZiBhLldpZGdldCYmKGs9ay5nZXQoImNvbnRlbnRCb3giKSk7cmV0dXJuIGt9LHZhbHVlOm51bGx9fSxFWFRFTkRTOmEuUGx1Z2luLkJhc2UscHJvdG90eXBlOntpbml0aWFsaXplcjpmdW5jdGlvbihrKXt0aGlzLklHTk9SRURfQVRUUlM9YS5tZXJnZSh7aG9zdDohMH0sZS5BVFRSUyk7dGhpcy5yZW5kZXJVSSgpO3RoaXMuYmluZFVJKCk7dGhpcy5fY3JlYXRlRHluYW1pY0F0dHJzKGspfSxyZW5kZXJVSTpmdW5jdGlvbigpe3RoaXMuZ2V0KCJzdHJpbmdzIik7dGhpcy5fcmVuZGVyT3ZlcmxheU1hc2soKTt0aGlzLm92ZXJsYXlNYXNrLmdldCgiYm91bmRpbmdCb3giKS5hcHBlbmQodGhpcy5nZXQoIm1lc3NhZ2VFbCIpKX0sYmluZFVJOmZ1bmN0aW9uKCl7dGhpcy5fYmluZE92ZXJsYXlNYXNrVUkoKX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMub3ZlcmxheU1hc2suZGVzdHJveSgpO3RoaXMuX3Zpc2libGVDaGFuZ2VIYW5kbGUuZGV0YWNoKCl9LApfYmluZE92ZXJsYXlNYXNrVUk6ZnVuY3Rpb24oKXt0aGlzLl92aXNpYmxlQ2hhbmdlSGFuZGxlPXRoaXMub3ZlcmxheU1hc2suYWZ0ZXIoInZpc2libGVDaGFuZ2UiLHRoaXMuX2FmdGVyVmlzaWJsZUNoYW5nZSx0aGlzKX0sY2VudGVyTWVzc2FnZTpmdW5jdGlvbigpe3RoaXMuZ2V0KCJtZXNzYWdlRWwiKS5jZW50ZXIodGhpcy5vdmVybGF5TWFzay5nZXQoImJvdW5kaW5nQm94IikpfSxyZWZyZXNoTWFzazpmdW5jdGlvbigpe3RoaXMub3ZlcmxheU1hc2sucmVmcmVzaE1hc2soKTt0aGlzLmNlbnRlck1lc3NhZ2UoKX0sX2FmdGVyVmlzaWJsZUNoYW5nZTpmdW5jdGlvbihrKXt2YXIgbT10aGlzLmdldCgidGFyZ2V0IikscD0ic3RhdGljIj09bS5nZXRTdHlsZSgicG9zaXRpb24iKTttLnRvZ2dsZUNsYXNzKGQsay5uZXdWYWwpO20udG9nZ2xlQ2xhc3MoYyxrLm5ld1ZhbCYmcCk7ay5uZXdWYWwmJnRoaXMucmVmcmVzaE1hc2soKX0sX3JlbmRlck92ZXJsYXlNYXNrOmZ1bmN0aW9uKCl7dmFyIGs9CnRoaXMuZ2V0KCJ0YXJnZXQiKTt0aGlzLm92ZXJsYXlNYXNrPShuZXcgYS5PdmVybGF5TWFzayh7dGFyZ2V0OmssY3NzQ2xhc3M6Zn0pKS5yZW5kZXIoayl9LF9jcmVhdGVEeW5hbWljQXR0cnM6ZnVuY3Rpb24oayl7dmFyIG09dGhpczthLmVhY2goayxmdW5jdGlvbihwLHMpe20uSUdOT1JFRF9BVFRSU1tzXXx8bS5hZGRBdHRyKHMse3NldHRlcjpmdW5jdGlvbihsKXt0aGlzLm92ZXJsYXlNYXNrLnNldChzLGwpO3JldHVybiBsfSx2YWx1ZTpwfSl9KX19fSk7YS5lYWNoKFsiaGlkZSIsInNob3ciLCJ0b2dnbGUiXSxmdW5jdGlvbihrKXtlLnByb3RvdHlwZVtrXT1mdW5jdGlvbigpe3RoaXMub3ZlcmxheU1hc2tba10oKX19KTthLkxvYWRpbmdNYXNrPWV9LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6WyJwbHVnaW4iLCJhdWktb3ZlcmxheS1tYXNrLWRlcHJlY2F0ZWQiXSxza2lubmFibGU6ITB9KTsKWVVJLmFkZCgiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIixmdW5jdGlvbihhLEUpe2EuT3ZlcmxheUJhc2U9YS5Db21wb25lbnQuY3JlYXRlKHtOQU1FOiJvdmVybGF5IixBVFRSUzp7aGlkZUNsYXNzOnt2YWx1ZTohMX19LEFVR01FTlRTOlthLldpZGdldFBvc2l0aW9uLGEuV2lkZ2V0U3RhY2ssYS5XaWRnZXRQb3NpdGlvbkFsaWduLGEuV2lkZ2V0UG9zaXRpb25Db25zdHJhaW4sYS5XaWRnZXRTdGRNb2RdfSl9LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6IndpZGdldC1wb3NpdGlvbiB3aWRnZXQtc3RhY2sgd2lkZ2V0LXBvc2l0aW9uLWFsaWduIHdpZGdldC1wb3NpdGlvbi1jb25zdHJhaW4gd2lkZ2V0LXN0ZG1vZCBhdWktY29tcG9uZW50Ii5zcGxpdCgiICIpfSk7CllVSS5hZGQoImF1aS1vdmVybGF5LWNvbnRleHQtZGVwcmVjYXRlZCIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLkxhbmcsdD1xLmlzU3RyaW5nLGY9cS5pc051bWJlcixkPXEuaXNCb29sZWFuLGM9YS5Db21wb25lbnQuY3JlYXRlKHtOQU1FOiJvdmVybGF5Y29udGV4dCIsQVRUUlM6e2FsaWduOnt2YWx1ZTp7bm9kZTpudWxsLHBvaW50czpbInRsIiwiYmwiXX19LGNhbmNlbGxhYmxlSGlkZTp7dmFsdWU6ITAsdmFsaWRhdG9yOmR9LGN1cnJlbnROb2RlOnt2YWx1ZUZuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJ0cmlnZ2VyIikuaXRlbSgwKX19LGRlbGF5Ont2YWx1ZTpudWxsLHZhbGlkYXRvcjpxLmlzT2JqZWN0fSxoaWRlT246e2xhenlBZGQ6ITEsdmFsdWU6Im1vdXNlb3V0IixzZXR0ZXI6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3NldEhpZGVPbihiKX19LGhpZGVPbkRvY3VtZW50Q2xpY2s6e2xhenlBZGQ6ITEsc2V0dGVyOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLl9zZXRIaWRlT25Eb2N1bWVudENsaWNrKGIpfSwKdmFsdWU6ITAsdmFsaWRhdG9yOmR9LGhpZGVEZWxheTp7bGF6eUFkZDohMSxzZXR0ZXI6Il9zZXRIaWRlRGVsYXkiLHZhbHVlOjAsdmFsaWRhdG9yOmZ9LHNob3dPbjp7bGF6eUFkZDohMSx2YWx1ZToibW91c2VvdmVyIixzZXR0ZXI6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3NldFNob3dPbihiKX19LHNob3dEZWxheTp7bGF6eUFkZDohMSxzZXR0ZXI6Il9zZXRTaG93RGVsYXkiLHZhbHVlOjAsdmFsaWRhdG9yOmZ9LHRyaWdnZXI6e2xhenlBZGQ6ITEsc2V0dGVyOmZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgYS5Ob2RlTGlzdD9iOnQoYik/YS5hbGwoYik6bmV3IGEuTm9kZUxpc3QoW2JdKX19LHVzZUFSSUE6e3ZhbHVlOiEwfSx2aXNpYmxlOnt2YWx1ZTohMX19LEVYVEVORFM6YS5PdmVybGF5QmFzZSxjb25zdHJ1Y3RvcjpmdW5jdGlvbihiKXt0aGlzLl9oaWRlQ2FsbGJhY2s9dGhpcy5fc2hvd0NhbGxiYWNrPW51bGw7Yy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsCmFyZ3VtZW50cyl9LHByb3RvdHlwZTp7aW5pdGlhbGl6ZXI6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldCgidHJpZ2dlciIpO2ImJmIuc2l6ZSgpJiZ0aGlzLnNldCgiYWxpZ24ubm9kZSIsYi5pdGVtKDApKX0sYmluZFVJOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXQoImJvdW5kaW5nQm94Iik7Yi5vbigibW91c2Vkb3duIix0aGlzLl9zdG9wVHJpZ2dlckV2ZW50UHJvcGFnYXRpb24pO3RoaXMuYmVmb3JlKCJ0cmlnZ2VyQ2hhbmdlIix0aGlzLl9iZWZvcmVUcmlnZ2VyQ2hhbmdlKTt0aGlzLmJlZm9yZSgic2hvd09uQ2hhbmdlIix0aGlzLl9iZWZvcmVTaG93T25DaGFuZ2UpO3RoaXMuYmVmb3JlKCJoaWRlT25DaGFuZ2UiLHRoaXMuX2JlZm9yZUhpZGVPbkNoYW5nZSk7dGhpcy5hZnRlcigidHJpZ2dlckNoYW5nZSIsdGhpcy5fYWZ0ZXJUcmlnZ2VyQ2hhbmdlKTt0aGlzLmFmdGVyKCJzaG93T25DaGFuZ2UiLHRoaXMuX2FmdGVyU2hvd09uQ2hhbmdlKTt0aGlzLmFmdGVyKCJoaWRlT25DaGFuZ2UiLAp0aGlzLl9hZnRlckhpZGVPbkNoYW5nZSk7Yi5vbigiY2xpY2siLGEuYmluZCh0aGlzLl9jYW5jZWxBdXRvSGlkZSx0aGlzKSk7Yi5vbigibW91c2VlbnRlciIsYS5iaW5kKHRoaXMuX2NhbmNlbEF1dG9IaWRlLHRoaXMpKTtiLm9uKCJtb3VzZWxlYXZlIixhLmJpbmQodGhpcy5faW52b2tlSGlkZVRhc2tPbkludGVyYWN0aW9uLHRoaXMpKTt0aGlzLmFmdGVyKCJmb2N1c2VkQ2hhbmdlIixhLmJpbmQodGhpcy5faW52b2tlSGlkZVRhc2tPbkludGVyYWN0aW9uLHRoaXMpKTt0aGlzLm9uKCJ2aXNpYmxlQ2hhbmdlIix0aGlzLl9vblZpc2libGVDaGFuZ2VPdmVybGF5Q29udGV4dCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLmNsZWFySW50ZXJ2YWxzKCk7dGhpcy5maXJlKCJoaWRlIik7Yy5zdXBlcmNsYXNzLmhpZGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxzaG93OmZ1bmN0aW9uKGIpe3RoaXMuY2xlYXJJbnRlcnZhbHMoKTt0aGlzLnVwZGF0ZUN1cnJlbnROb2RlKGIpO3RoaXMuZmlyZSgic2hvdyIpOwpjLnN1cGVyY2xhc3Muc2hvdy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5yZWZyZXNoQWxpZ24oKX0sc3luY1VJOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcztiLmdldCgidXNlQVJJQSIpJiZiLnBsdWcoYS5QbHVnaW4uQXJpYSx7YXR0cmlidXRlczp7dHJpZ2dlcjp7YXJpYU5hbWU6ImNvbnRyb2xzIixmb3JtYXQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGIuZ2V0KCJib3VuZGluZ0JveCIpLmdlbmVyYXRlSUQoKX0sbm9kZTpmdW5jdGlvbigpe3JldHVybiBiLmdldCgidHJpZ2dlciIpfX0sdmlzaWJsZTp7YXJpYU5hbWU6ImhpZGRlbiIsZm9ybWF0OmZ1bmN0aW9uKGcpe3JldHVybiFnfX19LHJvbGVOYW1lOiJkaWFsb2cifSl9LHRvZ2dsZTpmdW5jdGlvbihiKXt0aGlzLmdldCgidmlzaWJsZSIpP3RoaXMuX2hpZGVUYXNrKGIpOnRoaXMuX3Nob3dUYXNrKGIpfSxjbGVhckludGVydmFsczpmdW5jdGlvbigpe3RoaXMuX2hpZGVUYXNrLmNhbmNlbCgpO3RoaXMuX3Nob3dUYXNrLmNhbmNlbCgpfSwKcmVmcmVzaEFsaWduOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXQoImFsaWduIiksZz10aGlzLmdldCgiY3VycmVudE5vZGUiKTtnJiZ0aGlzLl91aVNldEFsaWduKGcsYi5wb2ludHMpfSx1cGRhdGVDdXJyZW50Tm9kZTpmdW5jdGlvbihiKXt2YXIgZz10aGlzLmdldCgiYWxpZ24iKSxlPXRoaXMuZ2V0KCJ0cmlnZ2VyIiksaz1udWxsO2ImJihrPWIuY3VycmVudFRhcmdldCk7KGI9a3x8ZS5pdGVtKDApfHxnLm5vZGUpJiZ0aGlzLnNldCgiY3VycmVudE5vZGUiLGIpfSxfdG9nZ2xlOmZ1bmN0aW9uKGIpe2lmKCF0aGlzLmdldCgiZGlzYWJsZWQiKSl7dmFyIGc9Yi5jdXJyZW50VGFyZ2V0O3RoaXMuX2xhc3RUYXJnZXQhPWcmJnRoaXMuaGlkZSgpO3RoaXMudG9nZ2xlKGIpO2Iuc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5fbGFzdFRhcmdldD1nfX0sX2FmdGVyU2hvd09uQ2hhbmdlOmZ1bmN0aW9uKGIpe2IucHJldlZhbD09dGhpcy5nZXQoImhpZGVPbiIpJiYodGhpcy5nZXQoInRyaWdnZXIiKS5kZXRhY2goYi5wcmV2VmFsLAp0aGlzLl9oaWRlQ2FsbGJhY2spLHRoaXMuX3NldEhpZGVPbih0aGlzLmdldCgiaGlkZU9uIikpKX0sX2FmdGVySGlkZU9uQ2hhbmdlOmZ1bmN0aW9uKGIpe2IucHJldlZhbD09dGhpcy5nZXQoInNob3dPbiIpJiYodGhpcy5nZXQoInRyaWdnZXIiKS5kZXRhY2goYi5wcmV2VmFsLHRoaXMuX3Nob3dDYWxsYmFjayksdGhpcy5fc2V0U2hvd09uKHRoaXMuZ2V0KCJzaG93T24iKSkpfSxfYWZ0ZXJUcmlnZ2VyQ2hhbmdlOmZ1bmN0aW9uKGIpe3RoaXMuX3NldFNob3dPbih0aGlzLmdldCgic2hvd09uIikpO3RoaXMuX3NldEhpZGVPbih0aGlzLmdldCgiaGlkZU9uIikpfSxfYmVmb3JlU2hvd09uQ2hhbmdlOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0KCJ0cmlnZ2VyIikuZGV0YWNoKGIucHJldlZhbCx0aGlzLl9zaG93Q2FsbGJhY2spfSxfYmVmb3JlSGlkZU9uQ2hhbmdlOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0KCJ0cmlnZ2VyIikuZGV0YWNoKGIucHJldlZhbCx0aGlzLl9oaWRlQ2FsbGJhY2spfSwKX2JlZm9yZVRyaWdnZXJDaGFuZ2U6ZnVuY3Rpb24oYil7Yj10aGlzLmdldCgidHJpZ2dlciIpO3ZhciBnPXRoaXMuZ2V0KCJzaG93T24iKSxlPXRoaXMuZ2V0KCJoaWRlT24iKTtiLmRldGFjaChnLHRoaXMuX3Nob3dDYWxsYmFjayk7Yi5kZXRhY2goZSx0aGlzLl9oaWRlQ2FsbGJhY2spO2IuZGV0YWNoKCJtb3VzZWRvd24iLHRoaXMuX3N0b3BUcmlnZ2VyRXZlbnRQcm9wYWdhdGlvbil9LF9jYW5jZWxBdXRvSGlkZTpmdW5jdGlvbihiKXt0aGlzLmdldCgiY2FuY2VsbGFibGVIaWRlIikmJnRoaXMuY2xlYXJJbnRlcnZhbHMoKTtiLnN0b3BQcm9wYWdhdGlvbigpfSxfaW52b2tlSGlkZVRhc2tPbkludGVyYWN0aW9uOmZ1bmN0aW9uKGIpe2I9dGhpcy5nZXQoImNhbmNlbGxhYmxlSGlkZSIpO3RoaXMuZ2V0KCJmb2N1c2VkIil8fGJ8fHRoaXMuX2hpZGVUYXNrKCl9LF9vblZpc2libGVDaGFuZ2VPdmVybGF5Q29udGV4dDpmdW5jdGlvbihiKXtiLm5ld1ZhbCYmdGhpcy5nZXQoImRpc2FibGVkIikmJgpiLnByZXZlbnREZWZhdWx0KCl9LF9zdG9wVHJpZ2dlckV2ZW50UHJvcGFnYXRpb246ZnVuY3Rpb24oYil7Yi5zdG9wUHJvcGFnYXRpb24oKX0sX3NldEhpZGVEZWxheTpmdW5jdGlvbihiKXt0aGlzLl9oaWRlVGFzaz1hLmRlYm91bmNlKHRoaXMuaGlkZSxiLHRoaXMpO3JldHVybiBifSxfc2V0SGlkZU9uOmZ1bmN0aW9uKGIpe3ZhciBnPXRoaXMsZT1nLmdldCgidHJpZ2dlciIpO2I9PWcuZ2V0KCJzaG93T24iKT8oZy5faGlkZUNhbGxiYWNrPWEuYmluZChnLl90b2dnbGUsZyksZS5kZXRhY2goYixnLl9zaG93Q2FsbGJhY2spKTooZy5nZXQoImhpZGVEZWxheSIpLGcuX2hpZGVDYWxsYmFjaz1mdW5jdGlvbihrKXtnLl9oaWRlVGFzayhrKTtrLnN0b3BQcm9wYWdhdGlvbigpfSk7ZS5vbihiLGcuX2hpZGVDYWxsYmFjayk7cmV0dXJuIGJ9LF9zZXRIaWRlT25Eb2N1bWVudENsaWNrOmZ1bmN0aW9uKGIpe2I/YS5PdmVybGF5Q29udGV4dE1hbmFnZXIucmVnaXN0ZXIodGhpcyk6YS5PdmVybGF5Q29udGV4dE1hbmFnZXIucmVtb3ZlKHRoaXMpOwpyZXR1cm4gYn0sX3NldFNob3dEZWxheTpmdW5jdGlvbihiKXt0aGlzLl9zaG93VGFzaz1hLmRlYm91bmNlKHRoaXMuc2hvdyxiLHRoaXMpO3JldHVybiBifSxfc2V0U2hvd09uOmZ1bmN0aW9uKGIpe3ZhciBnPXRoaXMsZT1nLmdldCgidHJpZ2dlciIpO2I9PWcuZ2V0KCJoaWRlT24iKT8oZy5fc2hvd0NhbGxiYWNrPWEuYmluZChnLl90b2dnbGUsZyksZS5kZXRhY2goYixnLl9oaWRlQ2FsbGJhY2spKTooZy5nZXQoInNob3dEZWxheSIpLGcuX3Nob3dDYWxsYmFjaz1mdW5jdGlvbihrKXtnLl9zaG93VGFzayhrKTtrLnN0b3BQcm9wYWdhdGlvbigpfSk7aWYoIm1vdXNlZG93biIhPWIpZS5vbigibW91c2Vkb3duIixnLl9zdG9wVHJpZ2dlckV2ZW50UHJvcGFnYXRpb24pO2Vsc2UgZS5kZXRhY2goIm1vdXNlZG93biIsZy5fc3RvcFRyaWdnZXJFdmVudFByb3BhZ2F0aW9uKTtlLm9uKGIsZy5fc2hvd0NhbGxiYWNrKTtyZXR1cm4gYn19fSk7YS5PdmVybGF5Q29udGV4dD1jO2EuT3ZlcmxheUNvbnRleHRNYW5hZ2VyPQpuZXcgYS5PdmVybGF5TWFuYWdlcih7fSk7YS5vbigibW91c2Vkb3duIixmdW5jdGlvbigpe2EuT3ZlcmxheUNvbnRleHRNYW5hZ2VyLmhpZGVBbGwoKX0sYS5nZXREb2MoKSl9LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6WyJhdWktb3ZlcmxheS1tYW5hZ2VyLWRlcHJlY2F0ZWQiLCJhdWktZGVsYXllZC10YXNrLWRlcHJlY2F0ZWQiLCJhdWktYXJpYSJdfSk7CllVSS5hZGQoImF1aS1vdmVybGF5LW1hbmFnZXItZGVwcmVjYXRlZCIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLkxhbmcsdD1xLmlzQXJyYXkscT1hLkNvbXBvbmVudC5jcmVhdGUoe05BTUU6Im92ZXJsYXltYW5hZ2VyIixBVFRSUzp7ekluZGV4QmFzZTp7dmFsdWU6MUUzLHZhbGlkYXRvcjpxLmlzTnVtYmVyLHNldHRlcjpxLnRvSW50fX0sRVhURU5EUzphLkJhc2UscHJvdG90eXBlOntpbml0aWFsaXplcjpmdW5jdGlvbigpe3RoaXMuX292ZXJsYXlzPVtdfSxicmluZ1RvVG9wOmZ1bmN0aW9uKGYpe3ZhciBkPXRoaXMuX292ZXJsYXlzLnNvcnQodGhpcy5zb3J0QnlaSW5kZXhEZXNjKVswXTtkIT09ZiYmKGYuZ2V0KCJ6SW5kZXgiKSxkPWQuZ2V0KCJ6SW5kZXgiKSxmLnNldCgiekluZGV4IixkKzEpLGYuc2V0KCJmb2N1c2VkIiwhMCkpfSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dGhpcy5fb3ZlcmxheXM9W119LHJlZ2lzdGVyOmZ1bmN0aW9uKGYpe3ZhciBkPXRoaXMsYz1kLl9vdmVybGF5czsKaWYodChmKSlhLkFycmF5LmVhY2goZixmdW5jdGlvbihrKXtkLnJlZ2lzdGVyKGspfSk7ZWxzZXt2YXIgYj1kLmdldCgiekluZGV4QmFzZSIpO2lmKCFkLl9yZWdpc3RlcmVkKGYpJiZmJiYoZiBpbnN0YW5jZW9mIGEuT3ZlcmxheXx8YS5Db21wb25lbnQmJmYgaW5zdGFuY2VvZiBhLkNvbXBvbmVudCkpe3ZhciBnPWYuZ2V0KCJib3VuZGluZ0JveCIpO2MucHVzaChmKTt2YXIgZT1mLmdldCgiekluZGV4Iil8fDA7Zi5zZXQoInpJbmRleCIsYy5sZW5ndGgrZStiKTtmLm9uKCJmb2N1c2VkQ2hhbmdlIixkLl9vbkZvY3VzZWRDaGFuZ2UsZCk7Zy5vbigibW91c2Vkb3duIixkLl9vbk1vdXNlRG93bixkKX19cmV0dXJuIGN9LHJlbW92ZTpmdW5jdGlvbihmKXt2YXIgZD10aGlzLl9vdmVybGF5cztyZXR1cm4gZC5sZW5ndGg/YS5BcnJheS5yZW1vdmVJdGVtKGQsZik6bnVsbH0sZWFjaDpmdW5jdGlvbihmKXthLkFycmF5LmVhY2godGhpcy5fb3ZlcmxheXMsZil9LHNob3dBbGw6ZnVuY3Rpb24oKXt0aGlzLmVhY2goZnVuY3Rpb24oZil7Zi5zaG93KCl9KX0sCmhpZGVBbGw6ZnVuY3Rpb24oKXt0aGlzLmVhY2goZnVuY3Rpb24oZil7Zi5oaWRlKCl9KX0sc29ydEJ5WkluZGV4RGVzYzpmdW5jdGlvbihmLGQpe2lmKGYmJmQmJmYuaGFzSW1wbChhLldpZGdldFN0YWNrKSYmZC5oYXNJbXBsKGEuV2lkZ2V0U3RhY2spKXt2YXIgYz1mLmdldCgiekluZGV4IiksYj1kLmdldCgiekluZGV4Iik7cmV0dXJuIGM+Yj8tMTpjPGI/MTowfXJldHVybiAwfSxfcmVnaXN0ZXJlZDpmdW5jdGlvbihmKXtyZXR1cm4tMSE9YS5BcnJheS5pbmRleE9mKHRoaXMuX292ZXJsYXlzLGYpfSxfb25Nb3VzZURvd246ZnVuY3Rpb24oZil7Zj1hLldpZGdldC5nZXRCeU5vZGUoZi5jdXJyZW50VGFyZ2V0fHxmLnRhcmdldCk7dmFyIGQ9dGhpcy5fcmVnaXN0ZXJlZChmKTtmJiZkJiZ0aGlzLmJyaW5nVG9Ub3AoZil9LF9vbkZvY3VzZWRDaGFuZ2U6ZnVuY3Rpb24oZil7aWYoZi5uZXdWYWwpe2Y9Zi5jdXJyZW50VGFyZ2V0fHxmLnRhcmdldDt2YXIgZD10aGlzLl9yZWdpc3RlcmVkKGYpOwpmJiZkJiZ0aGlzLmJyaW5nVG9Ub3AoZil9fX19KTthLk92ZXJsYXlNYW5hZ2VyPXF9LCIzLjAuMy1kZXByZWNhdGVkLjczIix7cmVxdWlyZXM6WyJvdmVybGF5IiwicGx1Z2luIiwiYXVpLWJhc2UtZGVwcmVjYXRlZCIsImF1aS1vdmVybGF5LWJhc2UtZGVwcmVjYXRlZCJdfSk7CllVSS5hZGQoImF1aS1vdmVybGF5LW1hc2stZGVwcmVjYXRlZCIsZnVuY3Rpb24oYSxFKXt2YXIgcT1hLkxhbmcsdD1xLmlzVmFsdWUsZj1hLmNvbmZpZyxkPTY+PWEuVUEuaWUsYz1hLkNvbXBvbmVudC5jcmVhdGUoe05BTUU6Im92ZXJsYXltYXNrIixBVFRSUzp7YWxpZ25Qb2ludHM6e3ZhbHVlOlsidGwiLCJ0bCJdLHZhbGlkYXRvcjpxLmlzQXJyYXl9LGJhY2tncm91bmQ6e2xhenlBZGQ6ITEsdmFsdWU6bnVsbCx2YWxpZGF0b3I6cS5pc1N0cmluZyxzZXR0ZXI6ZnVuY3Rpb24oYil7YiYmdGhpcy5nZXQoImNvbnRlbnRCb3giKS5zZXRTdHlsZSgiYmFja2dyb3VuZCIsYik7cmV0dXJuIGJ9fSx0YXJnZXQ6e2Nsb25lRGVmYXVsdFZhbHVlOiExLGxhenlBZGQ6ITEsdmFsdWU6Zi5kb2Msc2V0dGVyOmZ1bmN0aW9uKGIpe2I9YS5vbmUoYik7dmFyIGc9dGhpcy5faXNEb2M9Yi5jb21wYXJlVG8oZi5kb2MpLGU9dGhpcy5faXNXaW49Yi5jb21wYXJlVG8oZi53aW4pO3RoaXMuX2Z1bGxQYWdlPQpnfHxlO3JldHVybiBifX0sb3BhY2l0eTp7dmFsdWU6MC41LHZhbGlkYXRvcjpxLmlzTnVtYmVyLHNldHRlcjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5fc2V0T3BhY2l0eShiKX19LHNoaW06e3ZhbHVlOmEuVUEuaWV9LHZpc2libGU6e3ZhbHVlOiExfSx6SW5kZXg6e3ZhbHVlOjFFM319LEVYVEVORFM6YS5PdmVybGF5QmFzZSxwcm90b3R5cGU6e2JpbmRVSTpmdW5jdGlvbigpe2Muc3VwZXJjbGFzcy5iaW5kVUkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX2V2ZW50SGFuZGxlcz1bdGhpcy5hZnRlcigidGFyZ2V0Q2hhbmdlIix0aGlzLl9hZnRlclRhcmdldENoYW5nZSksdGhpcy5hZnRlcigidmlzaWJsZUNoYW5nZSIsdGhpcy5fYWZ0ZXJWaXNpYmxlQ2hhbmdlKSxhLm9uKCJ3aW5kb3dyZXNpemUiLGEuYmluZCh0aGlzLnJlZnJlc2hNYXNrLHRoaXMpKV19LHN5bmNVSTpmdW5jdGlvbigpe3RoaXMucmVmcmVzaE1hc2soKX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpeyhuZXcgYS5FdmVudEhhbmRsZSh0aGlzLl9ldmVudEhhbmRsZXMpKS5kZXRhY2goKX0sCmdldFRhcmdldFNpemU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldCgidGFyZ2V0IiksZz10aGlzLl9pc0RvYyxlPXRoaXMuX2lzV2luLGs9Yi5nZXQoIm9mZnNldEhlaWdodCIpLGI9Yi5nZXQoIm9mZnNldFdpZHRoIik7ZD9lPyhiPWEuRE9NLndpbldpZHRoKCksaz1hLkRPTS53aW5IZWlnaHQoKSk6ZyYmKGI9YS5ET00uZG9jV2lkdGgoKSxrPWEuRE9NLmRvY0hlaWdodCgpKTp0aGlzLl9mdWxsUGFnZSYmKGI9az0iMTAwJSIpO3JldHVybntoZWlnaHQ6ayx3aWR0aDpifX0scmVmcmVzaE1hc2s6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldCgiYWxpZ25Qb2ludHMiKSxnPXRoaXMuZ2V0KCJ0YXJnZXQiKSxlPXRoaXMuZ2V0KCJib3VuZGluZ0JveCIpLGs9dGhpcy5nZXRUYXJnZXRTaXplKCksbT10aGlzLl9mdWxsUGFnZTtlLnNldFN0eWxlcyh7cG9zaXRpb246ZHx8IW0/ImFic29sdXRlIjoiZml4ZWQiLGxlZnQ6MCx0b3A6MH0pO2U9ay5oZWlnaHQ7az1rLndpZHRoO3QoZSkmJnRoaXMuc2V0KCJoZWlnaHQiLAplKTt0KGspJiZ0aGlzLnNldCgid2lkdGgiLGspO218fHRoaXMuYWxpZ24oZyxiKX0sX3NldE9wYWNpdHk6ZnVuY3Rpb24oYil7dGhpcy5nZXQoImNvbnRlbnRCb3giKS5zZXRTdHlsZSgib3BhY2l0eSIsYik7cmV0dXJuIGJ9LF91aVNldFZpc2libGU6ZnVuY3Rpb24oYil7Yy5zdXBlcmNsYXNzLl91aVNldFZpc2libGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2ImJnRoaXMuX3NldE9wYWNpdHkodGhpcy5nZXQoIm9wYWNpdHkiKSl9LF9hZnRlclRhcmdldENoYW5nZTpmdW5jdGlvbihiKXt0aGlzLnJlZnJlc2hNYXNrKCl9LF9hZnRlclZpc2libGVDaGFuZ2U6ZnVuY3Rpb24oYil7dGhpcy5fdWlTZXRWaXNpYmxlKGIubmV3VmFsKX0sX3VpU2V0WFk6ZnVuY3Rpb24oKXt0aGlzLl9mdWxsUGFnZSYmIWR8fGMuc3VwZXJjbGFzcy5fdWlTZXRYWS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0pO2EuT3ZlcmxheU1hc2s9Y30sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbImV2ZW50LXJlc2l6ZSIsCiJhdWktYmFzZS1kZXByZWNhdGVkIiwiYXVpLW92ZXJsYXktYmFzZS1kZXByZWNhdGVkIl0sc2tpbm5hYmxlOiEwfSk7CllVSS5hZGQoImF1aS1wYXJzZS1jb250ZW50IixmdW5jdGlvbihhLEUpe3ZhciBxPWEuTGFuZyx0PXEuaXNTdHJpbmcsZj1hLmNvbmZpZy5kb2MsZD17IiI6MSwidGV4dC9qYXZhc2NyaXB0IjoxLCJ0ZXh0L3BhcnNlZCI6MX0sYz1hLkNvbXBvbmVudC5jcmVhdGUoe05BTUU6IlBhcnNlQ29udGVudCIsTlM6IlBhcnNlQ29udGVudCIsQVRUUlM6e3F1ZXVlOnt2YWx1ZTpudWxsfSxwcmVzZXJ2ZVNjcmlwdE5vZGVzOnt2YWxpZGF0b3I6cS5pc0Jvb2xlYW4sdmFsdWU6ITF9fSxFWFRFTkRTOmEuUGx1Z2luLkJhc2UscHJvdG90eXBlOntpbml0aWFsaXplcjpmdW5jdGlvbigpe2Muc3VwZXJjbGFzcy5pbml0aWFsaXplci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5zZXQoInF1ZXVlIixuZXcgYS5Bc3luY1F1ZXVlKTt0aGlzLl9iaW5kQU9QKCl9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7dmFyIGc9YS5nZXREb2MoKSxnPWcub25lKCJoZWFkIil8fGcuZ2V0KCJkb2N1bWVudEVsZW1lbnQiKSwKZT1mLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2UudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtiJiYoZS50ZXh0PXEudHJpbShiKSk7Zy5hcHBlbmRDaGlsZChlKS5yZW1vdmUoKX0scGFyc2VDb250ZW50OmZ1bmN0aW9uKGIpe2I9dGhpcy5fZXh0cmFjdFNjcmlwdHMoYik7dGhpcy5fZGlzcGF0Y2goYik7cmV0dXJuIGJ9LF9hZGRJbmxpbmVTY3JpcHQ6ZnVuY3Rpb24oYil7dGhpcy5nZXQoInF1ZXVlIikuYWRkKHthcmdzOmIsY29udGV4dDp0aGlzLGZuOnRoaXMuZ2xvYmFsRXZhbCx0aW1lb3V0OjB9KX0sX2JpbmRBT1A6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGc9ZnVuY3Rpb24oZSl7dmFyIGs9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxtPWIucGFyc2VDb250ZW50KGUpO2suc3BsaWNlKDAsMSxtLmZyYWdtZW50KTtyZXR1cm4gbmV3IGEuRG8uQWx0ZXJBcmdzKG51bGwsayl9O3RoaXMuZG9CZWZvcmUoImluc2VydCIsZyk7dGhpcy5kb0JlZm9yZSgicmVwbGFjZUNoaWxkIiwKZyk7Zz1mdW5jdGlvbihlKXtlPWIucGFyc2VDb250ZW50KGUpO3JldHVybiBuZXcgYS5Eby5BbHRlckFyZ3MobnVsbCxbZS5mcmFnbWVudF0pfTt0aGlzLmRvQmVmb3JlKCJyZXBsYWNlIixnKTt0aGlzLmRvQmVmb3JlKCJzZXRDb250ZW50IixnKX0sX2V4dHJhY3RTY3JpcHRzOmZ1bmN0aW9uKGIpe3ZhciBnPWEuTm9kZS5jcmVhdGUoIlx4M2NkaXZceDNlXHgzYy9kaXZceDNlIiksZT17fSxrPXRoaXMuZ2V0KCJwcmVzZXJ2ZVNjcmlwdE5vZGVzIik7dChiKT9hLkRPTS5hZGRIVE1MKGcsIlx4M2NkaXZceDNlX1x4M2MvZGl2XHgzZSIrYiwiYXBwZW5kIik6KGcuYXBwZW5kKCJceDNjZGl2XHgzZV9ceDNjL2Rpdlx4M2UiKSxnLmFwcGVuZChiKSk7ZS5qcz1nLmFsbCgic2NyaXB0IikuZmlsdGVyKGZ1bmN0aW9uKG0pe3ZhciBwPWRbbS5nZXRBdHRyaWJ1dGUoInR5cGUiKS50b0xvd2VyQ2FzZSgpXTtrJiZtLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvcGFyc2VkIik7cmV0dXJuIHB9KTsKa3x8ZS5qcy5lYWNoKGZ1bmN0aW9uKG0pe20ucmVtb3ZlKCl9KTtnLmdldCgiZmlyc3RDaGlsZCIpLnJlbW92ZSgpO2UuZnJhZ21lbnQ9Zy5nZXQoImNoaWxkTm9kZXMiKS50b0ZyYWcoKTtyZXR1cm4gZX0sX2Rpc3BhdGNoOmZ1bmN0aW9uKGIpe3ZhciBnPXRoaXMsZT1nLmdldCgicXVldWUiKSxrPVtdO2IuanMuZWFjaChmdW5jdGlvbihtKXt2YXIgcD1tLmdldCgic3JjIik7cD8oay5sZW5ndGgmJihnLl9hZGRJbmxpbmVTY3JpcHQoay5qb2luKCI7IikpLGsubGVuZ3RoPTApLGUuYWRkKHthdXRvQ29udGludWU6ITEsZm46ZnVuY3Rpb24oKXthLkdldC5zY3JpcHQocCx7b25FbmQ6ZnVuY3Rpb24ocyl7cy5wdXJnZSgpO2UucnVuKCl9fSl9LHRpbWVvdXQ6MH0pKToobT1tLl9ub2RlLGsucHVzaChtLnRleHR8fG0udGV4dENvbnRlbnR8fG0uaW5uZXJIVE1MfHwiIikpfSk7ay5sZW5ndGgmJmcuX2FkZElubGluZVNjcmlwdChrLmpvaW4oIjsiKSk7ZS5ydW4oKX19fSk7YS5uYW1lc3BhY2UoIlBsdWdpbiIpLlBhcnNlQ29udGVudD0KY30sIjMuMC4zLWRlcHJlY2F0ZWQuNzMiLHtyZXF1aXJlczpbImFzeW5jLXF1ZXVlIiwicGx1Z2luIiwiaW8tYmFzZSIsImF1aS1jb21wb25lbnQiLCJhdWktbm9kZS1iYXNlIl19KTsKKGZ1bmN0aW9uKGEsRSl7dmFyIHE9e2ljb25zOnttaW51czp0aGVtZURpc3BsYXkuZ2V0UGF0aFRoZW1lSW1hZ2VzKCkrIi9hcnJvd3MvMDFfbWludXMucG5nIixwbHVzOnRoZW1lRGlzcGxheS5nZXRQYXRoVGhlbWVJbWFnZXMoKSsiL2Fycm93cy8wMV9wbHVzLnBuZyJ9LHB1Ymxpc2hUb0xpdmU6ZnVuY3Rpb24odCl7dD10fHx7fTtFLlV0aWwub3BlbldpbmRvdyh7ZGlhbG9nOntjb25zdHJhaW46ITAsbW9kYWw6ITAsb246e3Zpc2libGVDaGFuZ2U6ZnVuY3Rpb24oZil7Zi5uZXdWYWx8fHRoaXMuZGVzdHJveSgpfX19LHRpdGxlOnQudGl0bGUsdXJpOnQudXJsfSl9fTtFLnByb3ZpZGUocSwiYWxsIixmdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBmPXQub2JqO3Q9dC5wYW5lO2YmJmYuY2hlY2tlZCYmKHQ9YS5vbmUodCkpJiZ0LmhpZGUoKX0sWyJhdWktYmFzZSJdKTtFLnByb3ZpZGUocSwiZGV0YWlscyIsZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZj1hLm9uZSh0LmRldGFpbCk7dD1hLm9uZSh0LnRvZ2dsZSk7CmlmKGYmJnQpe3ZhciBkPXEuaWNvbnMucGx1cztmLmhhc0NsYXNzKCJoaWRlIik/KGYuc2hvdygpLGQ9cS5pY29ucy5taW51cyk6Zi5oaWRlKCk7dC5hdHRyKCJzcmMiLGQpfX0sWyJhdWktYmFzZSJdKTtFLnByb3ZpZGUocSwicHJvcG9zZUxheW91dCIsZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZj10Lm5hbWVzcGFjZSxkPXQucmV2aWV3ZXJzO3Q9J1x4M2NkaXZceDNlXHgzY2Zvcm0gYWN0aW9uXHgzZCInK3QudXJsKyciIG1ldGhvZFx4M2QicG9zdCJceDNlJztpZigwPGQubGVuZ3RoKXt0Kz0nXHgzY3RleHRhcmVhIG5hbWVceDNkIicrZisnZGVzY3JpcHRpb24iIHN0eWxlXHgzZCJoZWlnaHQ6IDEwMHB4OyB3aWR0aDogMjg0cHg7Ilx4M2VceDNjL3RleHRhcmVhXHgzZVx4M2NiciAvXHgzZVx4M2NiciAvXHgzZScrRS5MYW5ndWFnZS5nZXQoInJldmlld2VyIikrJyBceDNjc2VsZWN0IG5hbWVceDNkIicrZisncmV2aWV3VXNlcklkIlx4M2UnO2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspdCs9CidceDNjb3B0aW9uIHZhbHVlXHgzZCInK2RbZl0udXNlcklkKyciXHgzZScrZFtmXS5mdWxsTmFtZSsiXHgzYy9vcHRpb25ceDNlIjt0Kz0nXHgzYy9zZWxlY3RceDNlXHgzY2JyIC9ceDNlXHgzY2JyIC9ceDNlXHgzY2lucHV0IHR5cGVceDNkInN1Ym1pdCIgdmFsdWVceDNkIicrRS5MYW5ndWFnZS5nZXQoInByb2NlZWQiKSsnIiAvXHgzZSd9ZWxzZSB0Kz1FLkxhbmd1YWdlLmdldCgibm8tcmV2aWV3ZXJzLXdlcmUtZm91bmQiKSsiXHgzY2JyIC9ceDNlIitFLkxhbmd1YWdlLmdldCgicGxlYXNlLWNvbnRhY3QtdGhlLWFkbWluaXN0cmF0b3ItdG8tYXNzaWduLXJldmlld2VycyIpKyJceDNjYnIgL1x4M2VceDNjYnIgL1x4M2UiO0UuVXRpbC5vcGVuV2luZG93KHtkaWFsb2c6e2Rlc3Ryb3lPbkhpZGU6ITB9LHRpdGxlOnQrIlx4M2MvZm9ybVx4M2VceDNjL2Rpdlx4M2UifSl9LFsibGlmZXJheS11dGlsLXdpbmRvdyJdKTtFLnByb3ZpZGUocSwic2VsZWN0ZWQiLGZ1bmN0aW9uKHQpe3Q9CnR8fHt9O3ZhciBmPXQub2JqO3Q9dC5wYW5lO2YmJmYuY2hlY2tlZCYmKHQ9YS5vbmUodCkpJiZ0LnNob3coKX0sWyJhdWktYmFzZSJdKTtFLkxheW91dEV4cG9ydGVyPXF9KShBVUkoKSxMaWZlcmF5KTsKQVVJLmFkZCgibGlmZXJheS1zZXNzaW9uIixmdW5jdGlvbihhKXt2YXIgRT1hLkxhbmcscT1bXSx0PWEuY29uZmlnLGY9dC5kb2MsZD17YWN0aXZlOiJhY3RpdmF0ZWQifSxjPXt9LGI9e3NyYzpjfSxnPXRoZW1lRGlzcGxheS5nZXRQYXRoTWFpbigpKyIvcG9ydGFsLyIsZT1hLkNvbXBvbmVudC5jcmVhdGUoe0FUVFJTOnthdXRvRXh0ZW5kOnt2YWx1ZTohMX0scmVkaXJlY3RPbkV4cGlyZTp7dmFsdWU6ITB9LHJlZGlyZWN0VXJsOnt2YWx1ZToiIn0sc2Vzc2lvbkxlbmd0aDp7Z2V0dGVyOiJfZ2V0TGVuZ3RoSW5NaWxsaXMiLHZhbHVlOjB9LHNlc3Npb25TdGF0ZTp7dmFsdWU6ImFjdGl2ZSJ9LHRpbWVzdGFtcDp7Z2V0dGVyOiJfZ2V0VGltZXN0YW1wIixzZXR0ZXI6Il9zZXRUaW1lc3RhbXAiLHZhbHVlOjB9LHdhcm5pbmdMZW5ndGg6e2dldHRlcjoiX2dldExlbmd0aEluTWlsbGlzIixzZXR0ZXI6Il9zZXRXYXJuaW5nTGVuZ3RoIix2YWx1ZTowfSx3YXJuaW5nVGltZTp7Z2V0dGVyOiJfZ2V0V2FybmluZ1RpbWUiLAp2YWx1ZTowfX0sRVhURU5EUzphLkJhc2UsTkFNRToibGlmZXJheXNlc3Npb24iLHByb3RvdHlwZTp7aW5pdGlhbGl6ZXI6ZnVuY3Rpb24obSl7dGhpcy5fY29va2llT3B0aW9ucz17cGF0aDoiLyIsc2VjdXJlOmEuVUEuc2VjdXJlfTt0aGlzLl9yZWdpc3RlcmVkPXt9O3RoaXMuc2V0KCJ0aW1lc3RhbXAiKTt0aGlzLl9pbml0RXZlbnRzKCk7dGhpcy5fc3RhcnRUaW1lcigpfSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7KG5ldyBhLkV2ZW50SGFuZGxlKHRoaXMuX2V2ZW50SGFuZGxlcnMpKS5kZXRhY2goKTt0aGlzLl9zdG9wVGltZXIoKX0sZXhwaXJlOmZ1bmN0aW9uKCl7dGhpcy5zZXQoInNlc3Npb25TdGF0ZSIsImV4cGlyZWQiLGIpfSxleHRlbmQ6ZnVuY3Rpb24oKXt0aGlzLnNldCgic2Vzc2lvblN0YXRlIiwiYWN0aXZlIixiKX0scmVnaXN0ZXJJbnRlcnZhbDpmdW5jdGlvbihtKXt2YXIgcCxzPXRoaXMuX3JlZ2lzdGVyZWQ7RS5pc0Z1bmN0aW9uKG0pJiYocD1hLnN0YW1wKG0pLHNbcF09Cm0pO3JldHVybiBwfSxyZXNldEludGVydmFsOmZ1bmN0aW9uKCl7dGhpcy5fc3RvcFRpbWVyKCk7dGhpcy5fc3RhcnRUaW1lcigpfSx1bnJlZ2lzdGVySW50ZXJ2YWw6ZnVuY3Rpb24obSl7dmFyIHA9dGhpcy5fcmVnaXN0ZXJlZDtwLmhhc093blByb3BlcnR5KG0pJiZkZWxldGUgcFttXTtyZXR1cm4gbX0sd2FybjpmdW5jdGlvbigpe3RoaXMuc2V0KCJzZXNzaW9uU3RhdGUiLCJ3YXJuZWQiLGIpfSxfYWZ0ZXJTZXNzaW9uU3RhdGVDaGFuZ2U6ZnVuY3Rpb24obSl7dmFyIHA9bS5kZXRhaWxzLHM9bS5uZXdWYWwsbD1udWxsOyJzcmMiaW4gbSYmcC5sZW5ndGgmJihsPXBbMF0pO3RoaXMuZmlyZShkW3NdfHxzLGwpfSxfZGVmQWN0aXZhdGVkRm46ZnVuY3Rpb24obSl7dGhpcy5zZXQoInRpbWVzdGFtcCIpO20uc3JjPT1jJiZ0aGlzLl9nZXRFeHRlbmRJTygpLnN0YXJ0KCl9LF9kZWZFeHBpcmVkRm46ZnVuY3Rpb24obSl7YS5jbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsSWQpO3RoaXMuc2V0KCJ0aW1lc3RhbXAiLAoiZXhwaXJlZCIpO20uc3JjPT09YyYmdGhpcy5fZ2V0RXhwaXJlSU8oKS5zdGFydCgpfSxfZ2V0RXhwaXJlSU86ZnVuY3Rpb24oKXt2YXIgbT10aGlzLHA9bS5fZXhwaXJlSU87cHx8KHA9YS5pby5yZXF1ZXN0KGcrImV4cGlyZV9zZXNzaW9uIix7YXV0b0xvYWQ6ITEsb246e2ZhaWx1cmU6ZnVuY3Rpb24ocyxsLGgpe20uX2V4cGlyZUlPPW51bGw7YS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bS5fZ2V0RXhwaXJlSU8oKS5zdGFydCgpfSwxRTMpfSxzdWNjZXNzOmZ1bmN0aW9uKHMsbCxoKXtMaWZlcmF5LmZpcmUoInNlc3Npb25FeHBpcmVkIik7bS5nZXQoInJlZGlyZWN0T25FeHBpcmUiKSYmKGxvY2F0aW9uLmhyZWY9bS5nZXQoInJlZGlyZWN0VXJsIikpfX19KSxtLl9leHBpcmVJTz1wKTtyZXR1cm4gcH0sX2dldEV4dGVuZElPOmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fZXh0ZW5kSU87bXx8KHRoaXMuX2V4dGVuZElPPW09YS5pby5yZXF1ZXN0KGcrImV4dGVuZF9zZXNzaW9uIix7YXV0b0xvYWQ6ITF9KSk7CnJldHVybiBtfSxfZ2V0TGVuZ3RoSW5NaWxsaXM6ZnVuY3Rpb24obSl7cmV0dXJuIDFFMyptfSxfZ2V0VGltZXN0YW1wOmZ1bmN0aW9uKG0pe3JldHVybiBhLkNvb2tpZS5nZXQodGhpcy5fY29va2llS2V5LHRoaXMuX2Nvb2tpZU9wdGlvbnMpfHx0aGlzLl9pbml0VGltZXN0YW1wfSxfZ2V0V2FybmluZ1RpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoInNlc3Npb25MZW5ndGgiKS10aGlzLmdldCgid2FybmluZ0xlbmd0aCIpfSxfaW5pdEV2ZW50czpmdW5jdGlvbigpe3ZhciBtPXRoaXM7bS5wdWJsaXNoKCJhY3RpdmF0ZWQiLHtkZWZhdWx0Rm46YS5iaW5kKCJfZGVmQWN0aXZhdGVkRm4iLG0pfSk7bS5wdWJsaXNoKCJleHBpcmVkIix7ZGVmYXVsdEZuOmEuYmluZCgiX2RlZkV4cGlyZWRGbiIsbSl9KTttLnB1Ymxpc2goIndhcm5lZCIpO20uX2V2ZW50SGFuZGxlcnM9W20ub24oInNlc3Npb25TdGF0ZUNoYW5nZSIsbS5fb25TZXNzaW9uU3RhdGVDaGFuZ2UpLG0uYWZ0ZXIoInNlc3Npb25TdGF0ZUNoYW5nZSIsCm0uX2FmdGVyU2Vzc2lvblN0YXRlQ2hhbmdlKSxhLm9uKCJpbzpjb21wbGV0ZSIsZnVuY3Rpb24ocCxzLGwpeyghbHx8bCYmbC5zZXNzaW9uRXh0ZW5kfHwhRS5pc0Jvb2xlYW4obC5zZXNzaW9uRXh0ZW5kKSkmJm0ucmVzZXRJbnRlcnZhbCgpfSksTGlmZXJheS5vbmNlKCJzY3JlZW5Mb2FkIixmdW5jdGlvbigpe20uZGVzdHJveSgpfSldfSxfb25TZXNzaW9uU3RhdGVDaGFuZ2U6ZnVuY3Rpb24obSl7dmFyIHA9bS5uZXdWYWwscz1tLnByZXZWYWw7ImV4cGlyZWQiPT1zJiZzIT1wP20ucHJldmVudERlZmF1bHQoKToiYWN0aXZlIj09cyYmcz09cCYmdGhpcy5fYWZ0ZXJTZXNzaW9uU3RhdGVDaGFuZ2UobSl9LF9zZXRUaW1lc3RhbXA6ZnVuY3Rpb24obSl7dGhpcy5faW5pdFRpbWVzdGFtcD1tPVN0cmluZyhtfHxEYXRlLm5vdygpKTtuYXZpZ2F0b3IuY29va2llRW5hYmxlZCYmYS5Db29raWUuc2V0KHRoaXMuX2Nvb2tpZUtleSxtLHRoaXMuX2Nvb2tpZU9wdGlvbnMpfSxfc2V0V2FybmluZ0xlbmd0aDpmdW5jdGlvbihtKXtyZXR1cm4gTWF0aC5taW4odGhpcy5nZXQoInNlc3Npb25MZW5ndGgiKSwKbSl9LF9zdGFydFRpbWVyOmZ1bmN0aW9uKCl7dmFyIG09dGhpcyxwPW0uZ2V0KCJzZXNzaW9uTGVuZ3RoIikscz1tLmdldCgid2FybmluZ1RpbWUiKSxsPW0uX3JlZ2lzdGVyZWQ7bS5faW50ZXJ2YWxJZD1hLnNldEludGVydmFsKGZ1bmN0aW9uKCl7dmFyIGgsdT1tLmdldCgidGltZXN0YW1wIik7aD1wO0UudG9JbnQodSk/aD0xRTMqTWF0aC5mbG9vcigoRGF0ZS5ub3coKS11KS8xRTMpOnU9ImV4cGlyZWQiO3ZhciB3PW0uZ2V0KCJhdXRvRXh0ZW5kIiksej0hMSxBPSExLEg9aD49cCxGPWg+PXM7RiYmKCJleHBpcmVkIj09dSYmKHo9ITAsdz0hMSxIPSEwKSx1PW0uZ2V0KCJzZXNzaW9uU3RhdGUiKSxIJiYiZXhwaXJlZCIhPXU/dz8oQT1GPUg9ej0hMSxtLmV4dGVuZCgpKToobS5leHBpcmUoKSx6PSEwKTohRnx8SHx8d3x8Indhcm5lZCI9PXV8fChtLndhcm4oKSxBPSEwKSk7Zm9yKHZhciBCIGluIGwpbFtCXShoLDFFMyxGLEgsQSx6KX0sMUUzKX0sX3N0b3BUaW1lcjpmdW5jdGlvbigpe2EuY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbElkKX0sCl9jb29raWVLZXk6IkxGUl9TRVNTSU9OX1NUQVRFXyIrdGhlbWVEaXNwbGF5LmdldFVzZXJJZCgpfX0pO2UuU1JDPWM7dmFyIGs9YS5Db21wb25lbnQuY3JlYXRlKHtBVFRSUzp7cGFnZVRpdGxlOnt2YWx1ZTpmLnRpdGxlfX0sRVhURU5EUzphLlBsdWdpbi5CYXNlLE5BTUU6ImxpZmVyYXlzZXNzaW9uZGlzcGxheSIsTlM6ImRpc3BsYXkiLHByb3RvdHlwZTp7aW5pdGlhbGl6ZXI6ZnVuY3Rpb24obSl7bT10aGlzLmdldCgiaG9zdCIpO0xpZmVyYXkuVXRpbC5nZXRUb3AoKT09dC53aW4/KHRoaXMuX2hvc3Q9bSx0aGlzLl90b2dnbGVUZXh0PXtoaWRlOidIaWRlJyxzaG93OidTaG93J30sdGhpcy5fZXhwaXJlZFRleHQ9J0R1ZVx4MjB0b1x4MjBpbmFjdGl2aXR5XHgyY1x4MjB5b3VyXHgyMHNlc3Npb25ceDIwaGFzXHgyMGV4cGlyZWRceDJlXHgyMFBsZWFzZVx4MjBzYXZlXHgyMGFueVx4MjBkYXRhXHgyMHlvdVx4MjBtYXlceDIwaGF2ZVx4MjBlbnRlcmVkXHgyMGJlZm9yZVx4MjByZWZyZXNoaW5nXHgyMHRoZVx4MjBwYWdlXHgyZScsdGhpcy5fd2FybmluZ1RleHQ9J0R1ZVx4MjB0b1x4MjBpbmFjdGl2aXR5XHgyY1x4MjB5b3VyXHgyMHNlc3Npb25ceDIwd2lsbFx4MjBleHBpcmVceDIwaW5ceDIwXHg3YjBceDdkXHgyZVx4MjBUb1x4MjBleHRlbmRceDIweW91clx4MjBzZXNzaW9uXHgyMGFub3RoZXJceDIwXHg3YjFceDdkXHgyMG1pbnV0ZVx4MjhzXHgyOVx4MmNceDIwcGxlYXNlXHgyMHByZXNzXHgyMHRoZVx4MjBceDNjZW1ceDNlRXh0ZW5kXHgzY1x4MmZlbVx4M2VceDIwYnV0dG9uXHgyZVx4MjBceDdiMlx4N2QnLAp0aGlzLl93YXJuaW5nVGV4dD1FLnN1Yih0aGlzLl93YXJuaW5nVGV4dCxbJ1x4M2NzcGFuIGNsYXNzXHgzZCJjb3VudGRvd24tdGltZXIiXHgzZXswfVx4M2Mvc3Bhblx4M2UnLG0uZ2V0KCJzZXNzaW9uTGVuZ3RoIikvNkU0LCdceDNjYSBjbGFzc1x4M2QiYWxlcnQtbGluayIgaHJlZlx4M2QiIyJceDNlJysnRXh0ZW5kJysiXHgzYy9hXHgzZSJdKSxtLm9uKCJzZXNzaW9uU3RhdGVDaGFuZ2UiLHRoaXMuX29uSG9zdFNlc3Npb25TdGF0ZUNoYW5nZSx0aGlzKSx0aGlzLmFmdGVySG9zdE1ldGhvZCgiX2RlZkFjdGl2YXRlZEZuIix0aGlzLl9hZnRlckRlZkFjdGl2YXRlZEZuKSx0aGlzLmFmdGVySG9zdE1ldGhvZCgiX2RlZkV4cGlyZWRGbiIsdGhpcy5fYWZ0ZXJEZWZFeHBpcmVkRm4pKTptLnVucGx1Zyh0aGlzKX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuX2Jhbm5lciYmdGhpcy5fYmFubmVyLmRlc3Ryb3koKX0sX2FmdGVyRGVmQWN0aXZhdGVkRm46ZnVuY3Rpb24obSl7dGhpcy5fdWlTZXRBY3RpdmF0ZWQoKX0sCl9hZnRlckRlZkV4cGlyZWRGbjpmdW5jdGlvbihtKXt0aGlzLl9ob3N0LnVucmVnaXN0ZXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbElkKTt0aGlzLl91aVNldEV4cGlyZWQoKX0sX2JlZm9yZUhvc3RXYXJuZWQ6ZnVuY3Rpb24obSl7dmFyIHA9dGhpczttPXAuX2hvc3Q7dmFyIHM9bS5nZXQoInNlc3Npb25MZW5ndGgiKSxsPW0uZ2V0KCJ0aW1lc3RhbXAiKSxoPW0uZ2V0KCJ3YXJuaW5nTGVuZ3RoIiksdT1zO0UudG9JbnQobCkmJih1PTFFMypNYXRoLmZsb29yKChEYXRlLm5vdygpLWwpLzFFMykpO3ZhciB3PXMtdTt3PmgmJih3PWgpO3ZhciB6PXAuX2dldEJhbm5lcigpLEE9ei5vbmUoIi5jb3VudGRvd24tdGltZXIiKTtwLl91aVNldFJlbWFpbmluZ1RpbWUodyxBKTt6LnNob3coKTtwLl9pbnRlcnZhbElkPW0ucmVnaXN0ZXJJbnRlcnZhbChmdW5jdGlvbihILEYsQixJLE0sRCl7Qj9JfHwoTSYmKDA+PXcmJih3PWgpLHouc2hvdygpKSxIPTFFMypNYXRoLmZsb29yKChEYXRlLm5vdygpLQpsKS8xRTMpLHc9cy1ILHAuX3VpU2V0UmVtYWluaW5nVGltZSh3LEEpKTpwLl91aVNldEFjdGl2YXRlZCgpO3ctPUZ9KX0sX2Zvcm1hdE51bWJlcjpmdW5jdGlvbihtKXtyZXR1cm4gRS5TdHJpbmcucGFkTnVtYmVyKE1hdGguZmxvb3IobSksMil9LF9mb3JtYXRUaW1lOmZ1bmN0aW9uKG0pe209TnVtYmVyKG0pO0UuaXNOdW1iZXIobSkmJjA8bT8obS89MUUzLHFbMF09dGhpcy5fZm9ybWF0TnVtYmVyKG0vMzYwMCksbSU9MzYwMCxxWzFdPXRoaXMuX2Zvcm1hdE51bWJlcihtLzYwKSxxWzJdPXRoaXMuX2Zvcm1hdE51bWJlcihtJTYwKSxtPXEuam9pbigiOiIpKTptPTA7cmV0dXJuIG19LF9nZXRCYW5uZXI6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLHA9bS5fYmFubmVyO3B8fChwPShuZXcgTGlmZXJheS5Ob3RpZmljYXRpb24oe2Nsb3NlYWJsZTohMCxkZWxheTp7aGlkZTowLHNob3c6MH0sZHVyYXRpb246NTAwLG1lc3NhZ2U6bS5fd2FybmluZ1RleHQsb246e2NsaWNrOmZ1bmN0aW9uKHMpe3MuZG9tRXZlbnQudGFyZ2V0LnRlc3QoIi5hbGVydC1saW5rIikmJgoocy5kb21FdmVudC5wcmV2ZW50RGVmYXVsdCgpLG0uX2hvc3QuZXh0ZW5kKCkpfX0sdGl0bGU6J1dhcm5pbmcnLHR5cGU6Indhcm5pbmcifSkpLnJlbmRlcigiYm9keSIpLG0uX2Jhbm5lcj1wKTtyZXR1cm4gcH0sX29uSG9zdFNlc3Npb25TdGF0ZUNoYW5nZTpmdW5jdGlvbihtKXsid2FybmVkIj09bS5uZXdWYWwmJnRoaXMuX2JlZm9yZUhvc3RXYXJuZWQobSl9LF91aVNldEFjdGl2YXRlZDpmdW5jdGlvbigpe2YudGl0bGU9dGhpcy5yZXNldCgicGFnZVRpdGxlIikuZ2V0KCJwYWdlVGl0bGUiKTt0aGlzLl9ob3N0LnVucmVnaXN0ZXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbElkKTt2YXIgbT10aGlzLl9nZXRCYW5uZXIoKTttJiZtLmhpZGUoKX0sX3VpU2V0RXhwaXJlZDpmdW5jdGlvbigpe3RoaXMuX2dldEJhbm5lcigpLnNldEF0dHJzKHttZXNzYWdlOnRoaXMuX2V4cGlyZWRUZXh0LHRpdGxlOidEYW5nZXInLAp0eXBlOiJkYW5nZXIifSk7Zi50aXRsZT10aGlzLmdldCgicGFnZVRpdGxlIil9LF91aVNldFJlbWFpbmluZ1RpbWU6ZnVuY3Rpb24obSxwKXt2YXIgcz10aGlzLl9nZXRCYW5uZXIoKTttPXRoaXMuX2Zvcm1hdFRpbWUobSk7cy5zZXQoIm1lc3NhZ2UiLEUuc3ViKHRoaXMuX3dhcm5pbmdUZXh0LFttXSkpO2YudGl0bGU9RS5zdWIoJ1Nlc3Npb25ceDIwZXhwaXJlc1x4MjBpblx4MjBceDdiMFx4N2RceDJlJyxbbV0pKyIgfCAiK3RoaXMuZ2V0KCJwYWdlVGl0bGUiKX19fSk7TGlmZXJheS5TZXNzaW9uQmFzZT1lO0xpZmVyYXkuU2Vzc2lvbkRpc3BsYXk9a30sIiIse3JlcXVpcmVzOlsiYXVpLWlvLXJlcXVlc3QiLCJhdWktdGltZXIiLCJjb29raWUiLCJsaWZlcmF5LW5vdGlmaWNhdGlvbiJdfSk7CihmdW5jdGlvbihhLEUpe3ZhciBxPUUubmFtZXNwYWNlKCJVdGlsIiksdD1hLkxhbmcsZj1hLkFycmF5LGQ9YS5PYmplY3QsYz1hLkxhbmcuU3RyaW5nLGI9W10sZz1bXSxlPXsnIic6Ilx4MjYjMDM0OyIsIlx4MjYiOiJceDI2YW1wOyIsIiciOiJceDI2IzAzOTsiLCIvIjoiXHgyNiMwNDc7IiwiXHgzYyI6Ilx4MjZsdDsiLCJceDNlIjoiXHgyNmd0OyIsImAiOiJceDI2IzA5NjsifSxrPXt9O2QuZWFjaChlLGZ1bmN0aW9uKGwsaCl7a1tsXT1oO2IucHVzaChsKTtnLnB1c2goaCl9KTt2YXIgbT0vLShbYS16XSkvZ2kscD1SZWdFeHAoIlsiK2cuam9pbigiIikrIl0iLCJnIikscz1SZWdFeHAoYi5qb2luKCJ8IiksImdpIik7cS5NQVBfSFRNTF9DSEFSU19FU0NBUEVEPWU7cS5hY3RzQXNBc3BlY3Q9ZnVuY3Rpb24obCl7bC55aWVsZD1udWxsO2wucnY9e307bC5iZWZvcmU9ZnVuY3Rpb24oaCx1KXt2YXIgdz1ldmFsKCJ0aGlzLiIraCk7dGhpc1toXT1mdW5jdGlvbigpe3UuYXBwbHkodGhpcywKYXJndW1lbnRzKTtyZXR1cm4gdy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTtsLmFmdGVyPWZ1bmN0aW9uKGgsdSl7dmFyIHc9ZXZhbCgidGhpcy4iK2gpO3RoaXNbaF09ZnVuY3Rpb24oKXt0aGlzLnJ2W2hdPXcuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O2wuYXJvdW5kPWZ1bmN0aW9uKGgsdSl7dmFyIHc9ZXZhbCgidGhpcy4iK2gpO3RoaXNbaF09ZnVuY3Rpb24oKXt0aGlzLnlpZWxkPXc7cmV0dXJuIHUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19O3EuYWRkSW5wdXRGb2N1cz1mdW5jdGlvbigpe2EudXNlKCJhdWktYmFzZSIsZnVuY3Rpb24obCl7dmFyIGg9ZnVuY3Rpb24odSl7dmFyIHc9dS50YXJnZXQsej13LmdldCgidGFnTmFtZSIpO3omJih6PXoudG9Mb3dlckNhc2UoKSk7dmFyIEE9dy5nZXQoInR5cGUiKTtpZigiaW5wdXQiPT16JiYvdGV4dHxwYXNzd29yZC8udGVzdChBKXx8InRleHRhcmVhIj09eil6PSJhZGRDbGFzcyIsCi9ibHVyfGZvY3Vzb3V0Ly50ZXN0KHUudHlwZSkmJih6PSJyZW1vdmVDbGFzcyIpLHdbel0oImZvY3VzIil9O2wub24oImZvY3VzIixoLGRvY3VtZW50KTtsLm9uKCJibHVyIixoLGRvY3VtZW50KX0pO3EuYWRkSW5wdXRGb2N1cz1mdW5jdGlvbigpe319O3EuYWRkSW5wdXRUeXBlPWZ1bmN0aW9uKGwpe3EuYWRkSW5wdXRUeXBlPXQuZW1wdHlGbjtFLkJyb3dzZXIuaXNJZSgpJiY3PkUuQnJvd3Nlci5nZXRNYWpvclZlcnNpb24oKSYmKHEuYWRkSW5wdXRUeXBlPWZ1bmN0aW9uKGgpe2g9aD9hLm9uZShoKTphLm9uZShkb2N1bWVudC5ib2R5KTtoLmFsbCgiaW5wdXQiKS5lYWNoKGZ1bmN0aW9uKHUsdyl7dmFyIHo9dS5nZXQoInR5cGUiKXx8InRleHQiO3UuYWRkQ2xhc3Moeil9KX0pO3JldHVybiBxLmFkZElucHV0VHlwZShsKX07cS5jYW1lbGl6ZT1mdW5jdGlvbihsLGgpe3ZhciB1PW07aCYmKHU9UmVnRXhwKGgrIihbYS16XSkiLCJnaSIpKTtyZXR1cm4gbD1sLnJlcGxhY2UodSxmdW5jdGlvbih3LAp6KXtyZXR1cm4gei50b1VwcGVyQ2FzZSgpfSl9O3EuY2xhbXA9ZnVuY3Rpb24obCxoLHUpe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChsLGgpLHUpfTtxLmVzY2FwZUhUTUw9ZnVuY3Rpb24obCxoLHUpe3ZhciB3PXAsej1bXSxBO3QuaXNPYmplY3QodSk/KEE9W10sZC5lYWNoKHUsZnVuY3Rpb24oSCxGKXt6LnB1c2goRik7QS5wdXNoKEgpfSksdz1SZWdFeHAoIlsiK2MuZXNjYXBlUmVnRXgoei5qb2luKCIiKSkrIl0iLCJnIikpOih1PWUsQT1iKTtyZXR1cm4gbC5yZXBsYWNlKHcsYS5iaW5kKCJfZXNjYXBlSFRNTCIscSwhIWgsdSxBKSl9O3EuaXNFZGl0b3JQcmVzZW50PWZ1bmN0aW9uKGwpe3JldHVybiBFLkVESVRPUlMmJkUuRURJVE9SU1tsXX07cS5yYW5kb21NaW5NYXg9ZnVuY3Rpb24obCxoKXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKihoLWwpKStsfTtxLnNlbGVjdEFuZENvcHk9ZnVuY3Rpb24obCl7bC5mb2N1cygpO2wuc2VsZWN0KCk7ZG9jdW1lbnQuYWxsJiYKbC5jcmVhdGVUZXh0UmFuZ2UoKS5leGVjQ29tbWFuZCgiY29weSIpfTtxLnNldEJveD1mdW5jdGlvbihsLGgpe2Zvcih2YXIgdT1sLmxlbmd0aC0xOy0xPHU7dS0tKWwub3B0aW9uc1t1XT1udWxsO2Zvcih1PTA7dTxoLmxlbmd0aDt1KyspbC5vcHRpb25zW3VdPW5ldyBPcHRpb24oaFt1XS52YWx1ZSx1KTtsLm9wdGlvbnNbMF0uc2VsZWN0ZWQ9ITB9O3Euc3RhcnRzV2l0aD1mdW5jdGlvbihsLGgpe3JldHVybiAwPT09bC5pbmRleE9mKGgpfTtxLnRleHRhcmVhVGFicz1mdW5jdGlvbihsKXt2YXIgaD1sLmN1cnJlbnRUYXJnZXQuZ2V0RE9NKCk7aWYobC5pc0tleSgiVEFCIikpe2wuaGFsdCgpO2w9aC5zY3JvbGxUb3A7aWYoaC5zZXRTZWxlY3Rpb25SYW5nZSl7dmFyIHU9aC5zZWxlY3Rpb25TdGFydCsxLHc9aC52YWx1ZTtoLnZhbHVlPXcuc3Vic3RyaW5nKDAsaC5zZWxlY3Rpb25TdGFydCkrIlx0Iit3LnN1YnN0cmluZyhoLnNlbGVjdGlvbkVuZCx3Lmxlbmd0aCk7c2V0VGltZW91dChmdW5jdGlvbigpe2guZm9jdXMoKTsKaC5zZXRTZWxlY3Rpb25SYW5nZSh1LHUpfSwwKX1lbHNlIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQ9Ilx0IjtoLnNjcm9sbFRvcD1sO3JldHVybiExfX07cS51bmNhbWVsaXplPWZ1bmN0aW9uKGwsaCl7aD1ofHwiICI7bD1sLnJlcGxhY2UoLyhbYS16QS1aXVthLXpBLVpdKShbQS1aXSkoW2Etel0pL2csIiQxIitoKyIkMiQzIik7cmV0dXJuIGw9bC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMSIraCsiJDIiKX07cS51bmVzY2FwZUhUTUw9ZnVuY3Rpb24obCxoKXt2YXIgdT1zLHc9aztpZihoKXt2YXIgej1bXSx3PXt9O2QuZWFjaChoLGZ1bmN0aW9uKEEsSCl7d1tBXT1IO3oucHVzaChBKX0pO3U9UmVnRXhwKHouam9pbigifCIpLCJnaSIpfXJldHVybiBsLnJlcGxhY2UodSxhLmJpbmQoIl91bmVzY2FwZUhUTUwiLHEsdykpfTtxLl9lc2NhcGVIVE1MPWZ1bmN0aW9uKGwsaCx1LHcpe3ZhciB6O2lmKGwpe3ZhciBBPWYoYXJndW1lbnRzKSxIPUEubGVuZ3RoLApGPUFbSC0yXSxBPUFbSC0xXSxIPUEuaW5kZXhPZigiOyIsRik7MDw9SCYmKEY9QS5zdWJzdHJpbmcoRixIKzEpLDA8PXUuaW5kZXhPZihGKSYmKHo9dykpfXp8fCh6PWhbd10pO3JldHVybiB6fTtxLl91bmVzY2FwZUhUTUw9ZnVuY3Rpb24obCxoKXtyZXR1cm4gbFtoXX07RS5wcm92aWRlKHEsImNoZWNrIixmdW5jdGlvbihsLGgsdSl7KGw9YS5vbmUobFtoXSkpJiZsLmF0dHIoImNoZWNrZWQiLHUpfSxbImF1aS1iYXNlIl0pO0UucHJvdmlkZShxLCJkaXNhYmxlU2VsZWN0Qm94ZXMiLGZ1bmN0aW9uKGwsaCx1KXt2YXIgdz1hLm9uZSgiIyIrdSksej1hLm9uZSgiIyIrbCk7aWYodyYmeil7dmFyIEE9dC5pc0Z1bmN0aW9uKGgpO2w9ZnVuY3Rpb24oKXt2YXIgSD13LnZhbCgpLEY9aD09SDtBJiYoRj1oKEgsaCkpO3ouYXR0cigiZGlzYWJsZWQiLCFGKX07bCgpO3cub24oImNoYW5nZSIsbCl9fSxbImF1aS1iYXNlIl0pO0UucHJvdmlkZShxLCJkaXNhYmxlVGV4dGFyZWFUYWJzIixmdW5jdGlvbihsKXsobD0KYS5vbmUobCkpJiYiZW5hYmxlZCIhPWwuYXR0cigidGV4dGFyZWF0YWJzIikmJihsLmF0dHIoInRleHRhcmVhdGFicyIsImRpc2FibGVkIiksbC5kZXRhY2goImtleWRvd24iLHEudGV4dGFyZWFUYWJzKSl9LFsiYXVpLWJhc2UiXSk7RS5wcm92aWRlKHEsImVuYWJsZVRleHRhcmVhVGFicyIsZnVuY3Rpb24obCl7KGw9YS5vbmUobCkpJiYiZW5hYmxlZCIhPWwuYXR0cigidGV4dGFyZWF0YWJzIikmJihsLmF0dHIoInRleHRhcmVhdGFicyIsImRpc2FibGVkIiksbC5vbigia2V5ZG93biIscS50ZXh0YXJlYVRhYnMpKX0sWyJhdWktYmFzZSJdKTtFLnByb3ZpZGUocSwicmVtb3ZlSXRlbSIsZnVuY3Rpb24obCxoKXtsPWEub25lKGwpO3ZhciB1PWwuZ2V0KCJzZWxlY3RlZEluZGV4Iik7aD9sLmFsbCgib3B0aW9uW3ZhbHVlXHgzZCIraCsiXSIpLml0ZW0odSkucmVtb3ZlKCEwKTpsLmFsbCgib3B0aW9uIikuaXRlbSh1KS5yZW1vdmUoITApfSxbImF1aS1iYXNlIl0pO0UucHJvdmlkZShxLAoicmVzaXplVGV4dGFyZWEiLGZ1bmN0aW9uKGwsaCl7dmFyIHU9YS5vbmUoIiMiK2wpO3V8fCh1PWEub25lKCJ0ZXh0YXJlYVtuYW1lXHgzZCIrbCsiXSIpKTtpZih1KXt2YXIgdz1hLmdldEJvZHkoKSx6LEE9ZnVuY3Rpb24oRil7dmFyIEI9dy5nZXQoIndpbkhlaWdodCIpO2lmKGgpdHJ5eyJpZnJhbWUiIT11LmdldCgibm9kZU5hbWUiKS50b0xvd2VyQ2FzZSgpJiYodT13aW5kb3dbbF0pfWNhdGNoKEkpe31pZigheil7dmFyIE09dy5vbmUoIi5idXR0b24taG9sZGVyIiksRD13Lm9uZSgiLmxmci10ZW1wbGF0ZS1lZGl0b3IiKTtNJiZEPyhEPUQuZ2V0WFkoKSx6PU0ub3V0ZXJIZWlnaHQoITApK0RbMV0rMjUpOno9MTcwfXU9YS5vbmUodSk7dmFyIEo9e3dpZHRoOiI5OCUifTtGJiYoSi5oZWlnaHQ9Qi16KTtpZighaHx8dSYmYS5ET00uaW5Eb2ModSkpdSYmdS5zZXRTdHlsZXMoSik7ZWxzZSBhLm9uKCJhdmFpbGFibGUiLGZ1bmN0aW9uKFApeyh1PWEub25lKHdpbmRvd1tsXSkpJiYKdS5zZXRTdHlsZXMoSil9LCIjIitsKyJfY3AiKX07QSgpO3ZhciBIPUUuVXRpbC5nZXRXaW5kb3coKTtIJiYoQT1ILmlmcmFtZS5hZnRlcigicmVzaXplaWZyYW1lOmhlaWdodENoYW5nZSIsQSksYS5nZXRXaW4oKS5vbigidW5sb2FkIixBLmRldGFjaCxBKSl9fSxbImF1aS1iYXNlIl0pO0UucHJvdmlkZShxLCJzZXRTZWxlY3RlZFZhbHVlIixmdW5jdGlvbihsLGgpe3ZhciB1PWEub25lKGwpLm9uZSgib3B0aW9uW3ZhbHVlXHgzZCIraCsiXSIpO3UmJnUuYXR0cigic2VsZWN0ZWQiLCEwKX0sWyJhdWktYmFzZSJdKTtFLnByb3ZpZGUocSwic3dpdGNoRWRpdG9yIixmdW5jdGlvbihsKXtsPWwudXJpO3ZhciBoPUUuVXRpbC5nZXRXaW5kb3dOYW1lKCk7KGg9RS5VdGlsLmdldFdpbmRvdyhoKSkmJmguaWZyYW1lLnNldCgidXJpIixsKX0sWyJhdWktaW8iXSl9KShBVUkoKSxMaWZlcmF5KTs=(Line 305)
Message:
Refused to load the script 'https://reliauscard.myvnc.com/combo/?browserId=other&minifierType=&languageId=en_US&b=7010&t=1634972436260&/o/frontend-js-spa-web/senna/src/screen/Screen.js&/o/frontend-js-metal-web/metal-useragent/src/UA.js&/o/frontend-js-spa-web/senna/src/screen/RequestScreen.js&/o/frontend-js-spa-web/senna/src/surface/Surface.js&/o/frontend-js-spa-web/senna/src/screen/HtmlScreen.js&/o/frontend-js-spa-web/liferay/util/Utils.es.js&/o/frontend-js-spa-web/liferay/screen/EventScreen.es.js&/o/frontend-js-spa-web/liferay/screen/ActionURLScreen.es.js&/o/frontend-js-metal-web/metal-debounce/src/debounce.js&/o/frontend-js-metal-web/metal-path-parser/src/pathParser.js&/o/frontend-js-spa-web/senna/src/route/Route.js&/o/frontend-js-spa-web/senna/src/app/App.js&/o/frontend-js-spa-web/liferay/surface/Surface.es.js&/o/frontend-js-spa-web/liferay/app/App.es.js&/o/frontend-js-spa-web/liferay/screen/RenderURLScreen.es.js&/o/frontend-js-spa-web/liferay/init.es.js' because it violates the following Content Security Policy directive: "script-src 'unsafe-inline' data:". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
security error URL: https://reliauscard.myvnc.com/Card(Line 18)
Message:
Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'unsafe-inline' data:".
security error URL: https://reliauscard.myvnc.com/Card(Line 19)
Message:
Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'unsafe-inline' data:".
security error URL: https://reliauscard.myvnc.com/Card(Line 20)
Message:
Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'unsafe-inline' data:".
security error URL: https://reliauscard.myvnc.com/Card(Line 20)
Message:
Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'unsafe-inline' data:".
security error URL: data:application/javascript;base64,Oy8qIFZlcnNpb24gYTVlOTIxZWFiMmRkZTJjNWFiNGI3OWVhNjM2YjgyNzEgdjo0LjUuMTcuMjg5MCwgYzo5MWQ3NTI1ZDdkOTk4MmYzZGQ3MTUxN2QzYjQ5MGU3ODFhYjM4OWM4LCBiOjQuNS4xNy4yODkwICovKGZ1bmN0aW9uKCl7bmV3IGZ1bmN0aW9uKCl7aWYoIXdpbmRvdy5BRFJVTSYmITAhPT13aW5kb3dbImFkcnVtLWRpc2FibGUiXSl7dmFyIGs9d2luZG93LkFEUlVNPXt9LEI9d2luZG93LmNvbnNvbGUseD1CJiYiZnVuY3Rpb24iPT10eXBlb2YgQi5sb2c/Qjp7bG9nOmZ1bmN0aW9uKCl7fX07d2luZG93WyJhZHJ1bS1zdGFydC10aW1lIl09d2luZG93WyJhZHJ1bS1zdGFydC10aW1lIl18fChuZXcgRGF0ZSkuZ2V0VGltZSgpO3ZhciB2PXRoaXMmJnRoaXMuQWN8fGZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGEsbCl7YS5fX3Byb3RvX189bH18fGZ1bmN0aW9uKGEsbCl7Zm9yKHZhciBlIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShlKSYmKGFbZV09bFtlXSl9O3JldHVybiBmdW5jdGlvbihiLGwpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvbnN0cnVjdG9yPWJ9YShiLGwpO2IucHJvdG90eXBlPW51bGw9PT1sP09iamVjdC5jcmVhdGUobCk6CihlLnByb3RvdHlwZT1sLnByb3RvdHlwZSxuZXcgZSl9fSgpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYSl7YS5zZXRVcE1vbml0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVtdLGI9MDtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKWFbYl09YXJndW1lbnRzW2JdO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl07YyYmYy5zZXRVcCgpfX19KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXtmdW5jdGlvbiBsKGEpe3JldHVybiBiLnJlZnMuc2xpY2UuYXBwbHkoYSxiLnJlZnMuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfWZ1bmN0aW9uIGUoYSxtKXtyZXR1cm4gYyhiLnJlZnMuc2V0VGltZW91dC5hcHBseSk/Yi5yZWZzLnNldFRpbWVvdXQuYXBwbHkod2luZG93LGFyZ3VtZW50cyk6Yi5yZWZzLnNldFRpbWVvdXQoYSxtKX1mdW5jdGlvbiBjKGEpe3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIGEmJm51bGwhPT0KYX1mdW5jdGlvbiBoKGEpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYSYmIWIuaXNBcnJheShhKSYmbnVsbCE9PWF9ZnVuY3Rpb24gZihhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYXx8ITF9ZnVuY3Rpb24gbihhKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGF9ZnVuY3Rpb24gbShhKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGF9ZnVuY3Rpb24gcShhLGMpe2Zvcih2YXIgbSBpbiBjKXt2YXIgZj1jW21dO2lmKHQoYyxtKSl7dmFyIG49YVttXTtoKGYpJiZoKG4pP3EobixmKTpiLmlzQXJyYXkobikmJmIuaXNBcnJheShmKT9hW21dPW4uY29uY2F0KGYpOmFbbV09Zn19cmV0dXJuIGF9ZnVuY3Rpb24gdChhLGIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxiKSYmYyhhW2JdKX1mdW5jdGlvbiBwKGEpe3JldHVybiBuKGEpP2EucmVwbGFjZSgvXlxzKi8sIiIpLnJlcGxhY2UoL1xzKiQvLCIiKTphfWZ1bmN0aW9uIHIoKXtyZXR1cm4gYi5yZWZzLmthJiYKZihiLnJlZnMua2Eubm93KX1mdW5jdGlvbiBzKCl7cmV0dXJuIHIoKT9iLnJlZnMucm91bmQoYi5yZWZzLmthLm5vdygpK3coKSk6KG5ldyBEYXRlKS5nZXRUaW1lKCl9ZnVuY3Rpb24gdygpe3ZhciBhPWIucmVmcy5rYSxhPWEmJmEudGltaW5nJiZtKGEudGltaW5nLm5hdmlnYXRpb25TdGFydCk/YS50aW1pbmcubmF2aWdhdGlvblN0YXJ0OndpbmRvd1siYWRydW0tc3RhcnQtdGltZSJdO2MoYSl8fChhPXMoKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQShhLGIpe3ZhciBjPUFycmF5LnByb3RvdHlwZVthXTtyZXR1cm4gYz9rKGMpOkMoYSxiKX1mdW5jdGlvbiBrKGEpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYS5hcHBseShjLGIucmVmcy5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9fWZ1bmN0aW9uIEMoYSxiKXtyZXR1cm4gZnVuY3Rpb24obSxoKXtpZighYyhtKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQiKTtpZighZihoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGgrCiIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gYi5hcHBseShudWxsLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHkoYSxiLGMpe3ZhciBtPU9iamVjdChhKSxoPW0ubGVuZ3RoPj4+MCxmPTA7aWYoMz5hcmd1bWVudHMubGVuZ3RoKXtmb3IoO2Y8aCYmIShmIGluIG0pOylmKys7aWYoZj49aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7Yz1tW2YrK119Zm9yKDtmPGg7ZisrKWYgaW4gbSYmKGM9YihjLG1bZl0sZixtKSk7cmV0dXJuIGN9ZnVuY3Rpb24geihhLGMsbSl7cmV0dXJuIGIucmVkdWNlKGEsZnVuY3Rpb24oYSxiLGgsZil7YVtoXT1jLmNhbGwobSxiLGgsZik7cmV0dXJuIGF9LEFycmF5KGEubGVuZ3RoPj4+MCkpfWZ1bmN0aW9uIEQoYSxjLG0pe3JldHVybiBiLnJlZHVjZShhLGZ1bmN0aW9uKGEsYixoLGYpe2MuY2FsbChtLGIsaCxmKSYmYS5wdXNoKGIpO3JldHVybiBhfSxbXSl9ZnVuY3Rpb24gRShhLApiLGMpe2E9T2JqZWN0KGEpO2Zvcih2YXIgbT1hLmxlbmd0aD4+PjAsaD0wO2g8bTtoKyspaWYoaCBpbiBhJiZiLmNhbGwoYyxhW2hdLGgsYSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRihhLGMsbSl7cmV0dXJuIWIuc29tZShhLGZ1bmN0aW9uKGEpe3JldHVybiFjLmNhbGwobSxhKX0pfWZ1bmN0aW9uIEcoYSxjLG0pe2IucmVkdWNlKGEsZnVuY3Rpb24oYSxiLGgsZil7Yy5jYWxsKG0sYixoLGYpfSx2b2lkIDApfWIucmVmcz17aXNBcnJheTpBcnJheS5pc0FycmF5LHRvU3RyaW5nOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsc2xpY2U6QXJyYXkucHJvdG90eXBlLnNsaWNlLHNldFRpbWVvdXQ6d2luZG93LnNldFRpbWVvdXQsc2V0SW50ZXJ2YWw6d2luZG93LnNldEludGVydmFsLGthOndpbmRvdy5wZXJmb3JtYW5jZXx8d2luZG93Lm1velBlcmZvcm1hbmNlfHx3aW5kb3cubXNQZXJmb3JtYW5jZXx8d2luZG93LndlYmtpdFBlcmZvcm1hbmNlLGFzc2lnbjpPYmplY3QuYXNzaWduLApyb3VuZDpNYXRoLnJvdW5kfTtiLndhPWw7Yi5vU1RPPWU7Yi5pc0NPUlNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cuSlNPTiYmZihKU09OLnN0cmluZ2lmeSk7cmV0dXJuIGMod2luZG93LlhNTEh0dHBSZXF1ZXN0KSYmIndpdGhDcmVkZW50aWFscyJpbiBuZXcgWE1MSHR0cFJlcXVlc3QmJmF9O2IuaXNEZWZpbmVkPWM7Yi5jbD1mdW5jdGlvbihhKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBhJiYhd2luZG93LmlzTmFOKGEpfTtiLmlzQXJyYXk9ZihiLnJlZnMuaXNBcnJheSkmJmYoYi5yZWZzLmlzQXJyYXkuYmluZCk/Yi5yZWZzLmlzQXJyYXkuYmluZChBcnJheSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGIucmVmcy50b1N0cmluZy5jYWxsKGEpPT09Yi5yZWZzLnRvU3RyaW5nLmNhbGwoW10pfTtiLmlzT2JqZWN0PWg7Yi5pc0Z1bmN0aW9uPWY7Yi5pc1N0cmluZz1uO2IuaXNOdW1iZXI9bTtiLmlzQm9vbGVhbj1mdW5jdGlvbihhKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBhfTsKYi5tYXg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWF0aC5tYXgoaXNOYU4oYSk/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOmEsaXNOYU4oYik/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOmIpfTtiLmdjPWU7Yi5wbz1mdW5jdGlvbihhLGIpe2UoYSxifHwxRTQpfTtiLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYixjLG0saCl7ZnVuY3Rpb24gZigpe3RyeXtyZXR1cm4gbS5hcHBseSh0aGlzLGwoYXJndW1lbnRzKSl9Y2F0Y2goaCl7YS5leGNlcHRpb24oaCwiTTEiLGMsYixoKX19dm9pZCAwPT09aCYmKGg9ITEpO2EuaXNEZWJ1ZyYmYS5sb2coIk0wIixjLGIpO2YuST0hMDtiLmFkZEV2ZW50TGlzdGVuZXI/Yi5hZGRFdmVudExpc3RlbmVyKGMsZixoKTpiLmF0dGFjaEV2ZW50JiZiLmF0dGFjaEV2ZW50KCJvbiIrYyxmKX07Yi5sb2FkU2NyaXB0QXN5bmM9ZnVuY3Rpb24oYil7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Yy50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiOwpjLmFzeW5jPSEwO2Muc3JjPWI7dmFyIG09ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzBdO20/KG0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYyxtKSxhLmxvZygiTTIiLGIpKTphLmxvZygiTTMiLGIpfTtiLm1lcmdlSlNPTj1xO2IuaGFzT3duUHJvcGVydHlEZWZpbmVkPXQ7Yi5uZj1mdW5jdGlvbihhLGMpe2lmKGIuaXNGdW5jdGlvbihPYmplY3QuZ2V0UHJvdG90eXBlT2YpKWZvcig7Yi5pc0RlZmluZWQoYSkmJiF0KGEsYyk7KWE9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO3JldHVybiBhfTtiLmJuPWZ1bmN0aW9uKGEpe3JldHVybiBjKGEpP2IuaXNBcnJheShhKT9hOlthXTpbXX07Yi51bz1mdW5jdGlvbihhLGIpe3JldHVybiBudWxsIT1hJiZhLnNsaWNlKDAsYi5sZW5ndGgpPT1ifTtiLmdlbmVyYXRlR1VJRD1mdW5jdGlvbihhKXtyZXR1cm4gYyhhKSYmZihhLmdldFJhbmRvbVZhbHVlcykmJmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihhKXthPWEudG9TdHJpbmcoMTYpOwpyZXR1cm4iMDAwMCIuc3Vic3RyKGEubGVuZ3RoKSthfXZhciBjPW5ldyBVaW50MTZBcnJheSg4KTthLmdldFJhbmRvbVZhbHVlcyhjKTtyZXR1cm4gYihjWzBdKStiKGNbMV0pKyJfIitiKGNbMl0pKyJfIitiKGNbM10pKyJfIitiKGNbNF0pKyJfIitiKGNbNV0pK2IoY1s2XSkrYihjWzddKX19KHdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0byl8fGZ1bmN0aW9uKCl7cmV0dXJuInh4eHh4eHh4X3h4eHhfNHh4eF95eHh4X3h4eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9nLGZ1bmN0aW9uKGEpe3ZhciBiPTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oIngiPT1hP2I6YiYzfDgpLnRvU3RyaW5nKDE2KX0pfTtiLnRyeUV4dHJhY3RpbmdFcnJvclN0YWNrPWZ1bmN0aW9uKGEpe3JldHVybiBhPyhhPWEuc3RhY2spJiYic3RyaW5nIj09PXR5cGVvZiBhP2E6bnVsbDpudWxsfTtiLnRyaW09cDtiLk9sPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGMsbTtpZighYSlyZXR1cm4gYjt2YXIgaD0KYS5zcGxpdCgiXG4iKTtmb3IobT0wO208aC5sZW5ndGg7bSsrKXt2YXIgZj1oW21dO2M9Zi5pbmRleE9mKCI6Iik7YT1wKGYuc3Vic3RyKDAsYykpLnRvTG93ZXJDYXNlKCk7Yz1wKGYuc3Vic3RyKGMrMSkpO2EmJihiW2FdPWJbYV0/YlthXSsoIiwgIitjKTpjKX1yZXR1cm4gYn07Yi50cnlQZXJpb2RpY2FsbHk9ZnVuY3Rpb24oYSxiLGMsbSl7ZnVuY3Rpb24gaCgpe2lmKGIoKSljJiZjKCk7ZWxzZXt2YXIgbj1hKCsrZik7MDxuP2UoaCxuKTptJiZtKCl9fXZhciBmPTA7aCgpfTtiLk9lPWZ1bmN0aW9uKGEpe3JldHVybiBhLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc2xpY2UoMSl9O2Iub2c9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbYy0xXT1hcmd1bWVudHNbY107cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBjPVtdLG09MDttPGFyZ3VtZW50cy5sZW5ndGg7bSsrKWNbbV09YXJndW1lbnRzW21dO3JldHVybiBhLmFwcGx5KHRoaXMsCmIuY29uY2F0KGMpKX19O2IuVG49cjtiLm5vdz1zO2IuaGI9dztiLkNuPXk7Yi5yZWR1Y2U9QSgicmVkdWNlIix5KTtiLkJuPXo7Yi5tYXA9QSgibWFwIix6KTtiLnpuPUQ7Yi5maWx0ZXI9QSgiZmlsdGVyIixEKTtiLkRuPUU7Yi5zb21lPUEoInNvbWUiLEUpO2IueW49RjtiLmV2ZXJ5PUEoImV2ZXJ5IixGKTtiLkFuPUc7Yi5mb3JFYWNoPUEoImZvckVhY2giLEcpO2IuQ2o9ZnVuY3Rpb24oYSl7cmV0dXJuIGIuZmlsdGVyKGEsYyl9O2IuSG49ZnVuY3Rpb24oYSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGEpfTtiLlFpPWMod2luZG93LlJlZmxlY3QpJiZjKHdpbmRvdy5SZWZsZWN0LmNvbnN0cnVjdCk/ZnVuY3Rpb24oYixjLG0saCl7dHJ5e3JldHVybiBudWxsIT09Yz93aW5kb3cuUmVmbGVjdC5jb25zdHJ1Y3QoYyxtLGgpOmJ9Y2F0Y2goZil7cmV0dXJuIGEubW9uaXRvci5FcnJvck1vbml0b3IubChmKSxifX06ZnVuY3Rpb24oYixjLG0pe3RyeXtyZXR1cm4gbnVsbCE9PWMmJgpjLmFwcGx5KGIsbSl8fGJ9Y2F0Y2goaCl7cmV0dXJuIGEubW9uaXRvci5FcnJvck1vbml0b3IubChoKSxifX07Yi5BYz1mdW5jdGlvbigpe3ZhciBhPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oYSxiKXt2YXIgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKSxtO2ZvcihtIGluIGMpYVttXT1iW21dfTtyZXR1cm4gZnVuY3Rpb24oYixjKXtmdW5jdGlvbiBtKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ifWEoYixjKTtiLnByb3RvdHlwZT1udWxsPT09Yz9PYmplY3QuY3JlYXRlKGMpOihtLnByb3RvdHlwZT1jLnByb3RvdHlwZSxuZXcgbSl9fSgpO2IuTGo9ZnVuY3Rpb24oYSl7aWYoIWIuaXNTdHJpbmcoYSkpcmV0dXJuIGE7dmFyIGM9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwiJyI6IiYjMzk7IiwnIic6IiZxdW90OyIsIi8iOiImIzQ3OyJ9O3JldHVybiBhLnJlcGxhY2UoL1smPD4nIi9dL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbYV19KX07Yi55bz0KZnVuY3Rpb24oYSl7aWYoIWIuaXNTdHJpbmcoYSkpcmV0dXJuIGE7dmFyIGM9eyImYW1wOyI6IiYiLCImIzM4OyI6IiYiLCImI3gyNjsiOiImIiwiJmx0OyI6IjwiLCImIzYwOyI6IjwiLCImI3gzYzsiOiI8IiwiJmd0OyI6Ij4iLCImIzYyOyI6Ij4iLCImI3gzZTsiOiI+IiwiJmFwb3M7IjoiJyIsIiYjMzk7IjoiJyIsIiYjeDI3OyI6IiciLCImcXVvdDsiOiciJywiJiMzNDsiOiciJywiJiN4MjI7IjonIicsIiZzb2w7IjoiLyIsIiYjNDc7IjoiLyIsIiYjeDJmOyI6Ii8ifTtyZXR1cm4gYS5yZXBsYWNlKC8mKD86YW1wfCMwKjM4fCN4MCoyNnxsdHwjMCo2MHwjeDAqM2N8Z3R8IzAqNjJ8I3gwKjNlfGFwb3N8IzAqMzl8I3gwKjI3fHF1b3R8IzAqMzR8I3gwKjIyfHNvbHwjMCo0N3wjeDAqMmYpOy9nLGZ1bmN0aW9uKGEpe2E9YS5yZXBsYWNlKC8wK1xCL2csIiIpO3JldHVybiBjW2FdfSl9O2IueWo9ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcztiJiYKY2xlYXJUaW1lb3V0KGIpO2I9ZShmdW5jdGlvbigpe2EuYXBwbHkoYyxhcmd1bWVudHMpfSwzMDApfX19KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS5jb25mfHwoYS5jb25mPXt9KTtiLnVzZXJDb25mPXdpbmRvd1siYWRydW0tY29uZmlnIl18fHt9O2IudXNlSFRUUFNBbHdheXM9ITA9PT1iLnVzZXJDb25mLnVzZUhUVFBTQWx3YXlzO2IubW9kZXJuQnJvd3NlckZlYXR1cmVzQXZhaWxhYmxlPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSYmYS51dGlscy5pc0NPUlNTdXBwb3J0ZWQoKSYmYS51dGlscy5pc0RlZmluZWQoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpO2Iuc3BhMj1iLnVzZXJDb25mLnNwYSYmYi51c2VyQ29uZi5zcGEuc3BhMiYmKCEwPT09Yi51c2VyQ29uZi5zcGEuc3BhMnx8YS51dGlscy5pc09iamVjdChiLnVzZXJDb25mLnNwYS5zcGEyKSk7Yi5jbGVhclJlc1RpbWluZz1iLnVzZXJDb25mLnNwYSYmCmEudXRpbHMuaXNPYmplY3QoYi51c2VyQ29uZi5zcGEuc3BhMikmJmEudXRpbHMuaXNEZWZpbmVkKGIudXNlckNvbmYuc3BhLnNwYTIuY2xlYXJSZXNUaW1pbmcpP2IudXNlckNvbmYuc3BhLnNwYTIuY2xlYXJSZXNUaW1pbmc6ITA7Yi5kaXNhYmxlVGV4dEZvclRlc3Rpbmc9ITA9PT1iLnVzZXJDb25mLmRpc2FibGVUZXh0Rm9yVGVzdGluZztiLmVuYWJsZVByaW1hcnlNZXRyaWNzPSghYS51dGlscy5pc0RlZmluZWQoYi51c2VyQ29uZi5lbmFibGVQcmltYXJ5TWV0cmljcyl8fCEwPT09Yi51c2VyQ29uZi5lbmFibGVQcmltYXJ5TWV0cmljcykmJmIubW9kZXJuQnJvd3NlckZlYXR1cmVzQXZhaWxhYmxlO2IuZGV2TW9kZT0hMD09PWIudXNlckNvbmYuZGV2TW9kZTtiLmlzWm9uZVByb21pc2U9ITA9PT1iLnVzZXJDb25mLmlzWm9uZVByb21pc2V8fCEwPT09Yi51c2VyQ29uZi5hbmd1bGFyO2IuZmV0Y2g9IWEudXRpbHMuaXNEZWZpbmVkKGIudXNlckNvbmYuZmV0Y2gpfHwhMD09Yi51c2VyQ29uZi5mZXRjaDsKYi5iYWNrVGltZUdhcD1NYXRoLmFicyhiLnVzZXJDb25mLmJhY2tUaW1lR2FwKXx8MDtiLm5ldmVyU2VuZEltYWdlQmVhY29uPSFhLnV0aWxzLmlzRGVmaW5lZChiLnVzZXJDb25mLmJlYWNvbil8fCFhLnV0aWxzLmlzRGVmaW5lZChiLnVzZXJDb25mLmJlYWNvbi5uZXZlclNlbmRJbWFnZUJlYWNvbil8fCEwPT1iLnVzZXJDb25mLmJlYWNvbi5uZXZlclNlbmRJbWFnZUJlYWNvbjtiLmJlYWNvblVybEh0dHA9YS51dGlscy5pc0RlZmluZWQoYi51c2VyQ29uZi5iZWFjb25VcmxIdHRwKT9iLnVzZXJDb25mLmJlYWNvblVybEh0dHA6Imh0dHA6Ly9jb2wuZXVtLWFwcGR5bmFtaWNzLmNvbSI7Yi5iZWFjb25VcmxIdHRwcz1hLnV0aWxzLmlzRGVmaW5lZChiLnVzZXJDb25mLmJlYWNvblVybEh0dHBzKT9iLnVzZXJDb25mLmJlYWNvblVybEh0dHBzOiJodHRwczovL2NvbC5ldW0tYXBwZHluYW1pY3MuY29tIjtiLmNvcnNFbmRwb2ludFBhdGg9Ii9ldW1jb2xsZWN0b3IvYmVhY29ucy9icm93c2VyIisKKGIuc3BhMj8iL3YyIjoiL3YxIik7Yi5pbWFnZUVuZHBvaW50UGF0aD0iL2V1bWNvbGxlY3Rvci9hZHJ1bS5naWY/IjtiLmFwcEtleT1iLnVzZXJDb25mLmFwcEtleXx8d2luZG93WyJhZHJ1bS1hcHAta2V5Il18fCJBUFBfS0VZX05PVF9TRVQiO2E9Yi51c2VIVFRQU0Fsd2F5c3x8Imh0dHBzOiI9PT1kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbDt2YXIgbD1iLnVzZXJDb25mLmFkcnVtRXh0VXJsSHR0cHx8Imh0dHA6Ly9jZG4uYXBwZHluYW1pY3MuY29tIixlPWIudXNlckNvbmYuYWRydW1FeHRVcmxIdHRwc3x8Imh0dHBzOi8vY2RuLmFwcGR5bmFtaWNzLmNvbSI7Yi5hZHJ1bUV4dFVybD0oYT9lOmwpKyIvYWRydW0tZXh0LmE1ZTkyMWVhYjJkZGUyYzVhYjRiNzllYTYzNmI4MjcxLmpzIjtiLmFkcnVtWGRVcmw9ZSsiL2FkcnVtLXhkLmE1ZTkyMWVhYjJkZGUyYzVhYjRiNzllYTYzNmI4MjcxLmh0bWwiO2IuYWdlbnRWZXI9IjQuNS4xNy4yODkwIjtiLnNlbmRJbWFnZUJlYWNvbj1iLnVzZXJDb25mLmJlYWNvbiYmCmIudXNlckNvbmYuYmVhY29uLnNlbmRJbWFnZUJlYWNvbnx8d2luZG93WyJhZHJ1bS1zZW5kLWltYWdlLWJlYWNvbiJdO3dpbmRvd1siYWRydW0tZ2VvLXJlc29sdmVyLXVybCJdPyhsPXdpbmRvd1siYWRydW0tZ2VvLXJlc29sdmVyLXVybCJdLGU9bC5pbmRleE9mKCI6Ly8iKSwtMSE9ZSYmKGw9bC5zdWJzdHJpbmcoZSszKSksbD0oYT8iaHR0cHM6Ly8iOiJodHRwOi8vIikrbCk6KGw9Yi51c2VyQ29uZi5nZW9SZXNvbHZlclVybEh0dHBzfHwiIixlPWIudXNlckNvbmYuZ2VvUmVzb2x2ZXJVcmxIdHRwfHwiIixsPWE/bDplKTtiLmdlb1Jlc29sdmVyVXJsPWw7Yi51c2VTdHJpY3REb21haW5Db29raWVzPSEwPT09d2luZG93WyJhZHJ1bS11c2Utc3RyaWN0LWRvbWFpbi1jb29raWVzIl07Yi5saT0xMDtiLmZpPTEwfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiLGMsbSxoKXtiPWEuY29uZi5iZWFjb25VcmxIdHRwcysiL2V1bWNvbGxlY3Rvci9lcnJvci5naWY/dmVyc2lvbj0xJmFwcEtleT0iKwptKyImbXNnPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIuc3Vic3RyaW5nKDAsNTAwKSk7aCYmKGIrPSImc3RhY2s9IixiKz1lbmNvZGVVUklDb21wb25lbnQoaC5zdWJzdHJpbmcoMCwxNTAwLWIubGVuZ3RoKSkpO3JldHVybiBifWZ1bmN0aW9uIGwoYyxtKXsyPD1zfHwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIikuc3JjPWIoYywwLGEuY29uZi5hcHBLZXksbSkscysrKX1mdW5jdGlvbiBlKGEpe3JldHVybiAwPD1hLmxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJBRFJVTV9kZWJ1Zz10cnVlIil8fDA8PWEuY29va2llLnNlYXJjaCgvKF58OylccypBRFJVTV9kZWJ1Zz10cnVlLyl9ZnVuY3Rpb24gYyhiKXthLmlzRGVidWcmJnAucHVzaChuKGFyZ3VtZW50cykuam9pbigiIHwgIikpfWZ1bmN0aW9uIGgoYSl7ci5wdXNoKG4oYXJndW1lbnRzKS5qb2luKCIgfCAiKSl9ZnVuY3Rpb24gZihhKXt2YXIgYj1uKGFyZ3VtZW50cykuam9pbigiIHwgIik7YyhiKTtsKGIsbnVsbCl9dmFyIG49CmEudXRpbHMud2EsbT1hLnV0aWxzLnJlZHVjZSxxPWEudXRpbHMuaXNEZWZpbmVkO2EuaURSPWU7dmFyIHQ7KGZ1bmN0aW9uKGEpe2FbYS5BUElfRVJST1I9MF09IkFQSV9FUlJPUiI7YVthLkFQSV9FUlJPUl9JTlZBTElEX1BBUkFNUz0xXT0iQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1TIjthW2EuQVBJX0VSUk9SX0lOVkFMSURfQ09ORklHPTJdPSJBUElfRVJST1JfSU5WQUxJRF9DT05GSUciO2FbYS5BUElfV0FSTklORz0zXT0iQVBJX1dBUk5JTkciO2FbYS5BUElfV0FSTklOR19JTkVGRkVDVElWRV9DT05GSUc9NF09IkFQSV9XQVJOSU5HX0lORUZGRUNUSVZFX0NPTkZJRyJ9KSh0PWEuVnx8KGEuVj17fSkpO2EuQmI9WyJKUyBBZ2VudCBBUEkgRXJyb3I6IiwiSlMgQWdlbnQgQVBJIEVycm9yIEludmFsaWQgUGFyYW1ldGVyczogIiwiSlMgQWdlbnQgQVBJIEVycm9yIEludmFsaWQgQ29uZmlnczogIiwiSlMgQWdlbnQgQVBJIFdhcm5pbmc6IiwiSlMgQWdlbnQgQVBJIFdhcm5pbmcgSW5lZmZlY3RpdmUgQ29uZmlnOiJdOwphLldhPSIgYSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbi4gRG9uJ3QgZm9yZ2V0IGtleXdvcmQgbmV3LiI7YS5pc0RlYnVnPWUoZG9jdW1lbnQpO2EuYXBpTWVzc2FnZUNvbnNvbGVPdXQ9cShhLmNvbmYudXNlckNvbmYpJiZxKGEuY29uZi51c2VyQ29uZi5sb2cpJiYhMD09PWEuY29uZi51c2VyQ29uZi5sb2cuYXBpTWVzc2FnZUNvbnNvbGVPdXQ/ITA6ITE7dmFyIHA9W10scj1bXTthLmxvZ01lc3NhZ2VzPXA7YS5hcGlNZXNzYWdlcz1yO2EubG9nPWM7YS5mbz1oO2EuZXJyb3I9ZjthLnJlcG9ydEFQSU1lc3NhZ2U9ZnVuY3Rpb24oYixjLG0sZil7dmFyIG49YS5VbC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aChuKTthLmFwaU1lc3NhZ2VDb25zb2xlT3V0JiZ4LmxvZyhuKTtyZXR1cm4gbn07YS5leGNlcHRpb249ZnVuY3Rpb24oKXtpZighKDE+YXJndW1lbnRzLmxlbmd0aCkpe3ZhciBiPW4oYXJndW1lbnRzKSxjPWEudXRpbHMudHJ5RXh0cmFjdGluZ0Vycm9yU3RhY2soYlswXSksCmI9Yi5zbGljZSgxKTthLnV0aWxzLmlzQXJyYXkoYikmJihiPWIuc2xpY2UoMCwyMCkpO2I9Yi5qb2luKCIgfCAiKTthLmxvZyhiKTtsKGIsYyl9fTthLmFzc2VydD1mdW5jdGlvbihhKXtmb3IodmFyIGI9MTtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKTt2YXIgYz1uKGFyZ3VtZW50cyk7YXx8KGI9Y1sxXSwoYz1jLnNsaWNlKDIpKSYmMDxjLmxlbmd0aD9mKCJNNCIsYixjKTpmKCJNNSIsYikpfTthLmR1bXBMb2c9YS5pc0RlYnVnP2Z1bmN0aW9uKCl7cmV0dXJuIG0ocCxmdW5jdGlvbihhLGIpe3JldHVybiBhK2IucmVwbGFjZSgvXDxiclwvXD4vZywiXG5cdCIpKyJcbiJ9LCIiKX06ZnVuY3Rpb24oKXt9O2EuZWY9MDthLlNjPTA7YS5QPWEuaXNEZWJ1ZyYmYS51dGlscy5yZWZzLmthP2Z1bmN0aW9uKCl7YS5lZj1hLnV0aWxzLnJlZnMua2Eubm93KCl9OmZ1bmN0aW9uKCl7fTthLlE9YS5pc0RlYnVnJiZhLnV0aWxzLnJlZnMua2E/ZnVuY3Rpb24oKXthLlNjKz1hLnV0aWxzLnJlZnMua2Eubm93KCktCmEuZWZ9OmZ1bmN0aW9uKCl7fTthLlVsPWZ1bmN0aW9uKGIsYyxtLGgpe3ZhciBmPSIiLGY9IiIsbj0obmV3IHdpbmRvdy5FcnJvcikuc3RhY2ssZSxuPWEudXRpbHMuaXNTdHJpbmcobik/bi5zdWJzdHJpbmcoNSk6bisiIjtxKGUpfHwoZT1hLnV0aWxzLm1hcChoLGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YT8ibnVsbCI6dm9pZCAwPT1hPyJ1bmRlZmluZWQiOiIiPT09YT8iJyciOmF9KSk7c3dpdGNoKGIpe2Nhc2UgdC5sYTpjYXNlIHQubG46Zj1hLkJiW2JdO2Y9cShtKT8iIitmK2MrIlxuIGluICIrbSsiKCIrZS5qb2luKCIsICIpKyIpXG4iK246IiIrZitjKyJcbiIrbjticmVhaztjYXNlIHQuV2Q6Zj1hLkJiW2JdO2Y9IiIrZitjKyJcbmluICIrbSsiKCIrZS5qb2luKCIsICIpKyIpXG4iK247YnJlYWs7Y2FzZSB0LmtuOmNhc2UgdC55aDpmPWEuQmJbYl07Zj0iIitmK2MrIiwgYnV0ICIrbSsiPSIrZS5qb2luKCIsICIpKyJcbiIrbjticmVhaztkZWZhdWx0OmY9YS5CYlt0LmxhXSwKZj0iIitmK2MrIlxuaW4gIittKyIoIitlLmpvaW4oIiwgIikrIilcbiIrbn1yZXR1cm4gZn07YS5jSUVCVT1iO3ZhciBzPTA7YygiTTYiKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXt0aGlzLm1heD1iO3RoaXMuSmM9MH1hLnByb3RvdHlwZS5Gaz1mdW5jdGlvbigpe3RoaXMuVWIoKXx8dGhpcy5KYysrfTthLnByb3RvdHlwZS5VYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkpjPj10aGlzLm1heH07YS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLkpjPTB9O3JldHVybiBhfSgpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5LYj1bXTt0aGlzLkVkPW5ldyBiKGUud2kpO3RoaXMubGQ9bmV3IGIoZS5waSl9ZS5wcm90b3R5cGUuc3VibWl0PWZ1bmN0aW9uKGIpe3RoaXMucHVzaChiKSYmYS5pbml0RVhURG9uZSYmdGhpcy5wcm9jZXNzUSgpfTtlLnByb3RvdHlwZS5wcm9jZXNzUT1mdW5jdGlvbigpe2Zvcih2YXIgYj0KdGhpcy5GaigpLGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIGY9YltoXTsiZnVuY3Rpb24iPT09dHlwZW9mIGEuY29tbWFuZHNbZlswXV0/KGEuaXNEZWJ1ZyYmYS5sb2coIk03IixmWzBdLGYuc2xpY2UoMSkuam9pbigiLCAiKSksYS5jb21tYW5kc1tmWzBdXS5hcHBseShhLGYuc2xpY2UoMSkpKTphLmVycm9yKCJNOCIsZlswXSl9fTtlLnByb3RvdHlwZS5qbD1mdW5jdGlvbihhKXtyZXR1cm4icmVwb3J0WGhyIj09PWF8fCJyZXBvcnRQYWdlRXJyb3IiPT09YX07ZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihiKXt2YXIgaD1iWzBdLGY9dGhpcy5qbChoKSxuPWY/dGhpcy5FZDp0aGlzLmxkO2lmKG4uVWIoKSlyZXR1cm4gYS5sb2coIk05IixmPyJzcG9udGFuZW91cyI6Im5vbiBzcG9udGFuZW91cyIsaCksITE7dGhpcy5LYi5wdXNoKGIpO24uRmsoKTtyZXR1cm4hMH07ZS5wcm90b3R5cGUuRmo9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktiO3RoaXMucmVzZXQoKTtyZXR1cm4gYX07ZS5wcm90b3R5cGUuc2l6ZT0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LYi5sZW5ndGh9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5LYj1bXTt0aGlzLkVkLnJlc2V0KCk7dGhpcy5sZC5yZXNldCgpfTtlLnByb3RvdHlwZS5pc1Nwb250YW5lb3VzUXVldWVEZWFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWQuVWIoKX07ZS5wcm90b3R5cGUuaXNOb25TcG9udGFuZW91c1F1ZXVlRGVhZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkLlViKCl9O3JldHVybiBlfSgpO2wud2k9MTAwO2wucGk9MTAwO2EuQ29tbWFuZEV4ZWN1dG9yPWx9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXthLnE9bmV3IGEuQ29tbWFuZEV4ZWN1dG9yO2EuY29tbWFuZD1mdW5jdGlvbihiKXtmb3IodmFyIGw9MTtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKTthLmlzRGVidWcmJmEubG9nKCJNMTAiLGIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5zbGljZSgxKS5qb2luKCIsICIpKTthLnEuc3VibWl0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfX0pKGt8fAooaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYSl7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dGhpcy5zdGF0dXM9e319YS5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt9O2EucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3RoaXMuc3RhdHVzW2FdPWJ9O3JldHVybiBhfSgpO2Eud2M9bH0pKGEubW9uaXRvcnx8KGEubW9uaXRvcj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWEudXRpbHMud2EsZT1hLnV0aWxzLmlzRGVmaW5lZDt3aW5kb3cuQURSVU0uYW9wPWI7Yi5zdXBwb3J0PWZ1bmN0aW9uKGEpe3JldHVybiFhfHwiYXBwbHkiaW4gYX07Yi5hcm91bmQ9ZnVuY3Rpb24oYyxoLGYsbixtKXthLmFzc2VydChiLnN1cHBvcnQoYyksIk0xMSIpO2M9Y3x8ZnVuY3Rpb24oKXt9O3JldHVybiBmdW5jdGlvbigpe2lmKGEuaXNEZWJ1Zyl0cnl7YS5sb2coIk0xMiIsbixsKGFyZ3VtZW50cykuam9pbigiLCAiKSl9Y2F0Y2goYil7YS5sb2coIk0xMyIsCmUoYi5zdGFjayl8fGIudG9TdHJpbmcoKSl9dmFyIHQ9bChhcmd1bWVudHMpLHA7dHJ5e2gmJihwPWguYXBwbHkodGhpcyx0KSl9Y2F0Y2gocil7YS5leGNlcHRpb24ociwiTTE0IixuLHIpfWEuYXNzZXJ0KCFwfHxhLnV0aWxzLmlzQXJyYXkocCkpO3ZhciBzPXZvaWQgMDt0cnl7cz1jLmFwcGx5KHRoaXMscHx8dCl9Y2F0Y2godyl7dGhyb3cgYS5sb2codywiTTE1IixuLHcpLG0/bSh3KTphLm1vbml0b3IuRXJyb3JNb25pdG9yLmwodyksdzt9ZmluYWxseXt0cnl7ZiYmKGUocykmJih0W3QubGVuZ3RoXT17bWc6c30pLGYuYXBwbHkodGhpcyx0KSl9Y2F0Y2goQSl7YS5leGNlcHRpb24oQSwiTTE2IixuLEEpfX1yZXR1cm4gc319O2IudWY9ZnVuY3Rpb24oYSl7YT1hW2EubGVuZ3RoLTFdO3ZhciBiO2UoYSkmJmUoYS5tZykmJihiPWEubWcpO3JldHVybiBifTtiLmJlZm9yZT1mdW5jdGlvbihhLGgsZil7cmV0dXJuIGIuYXJvdW5kKGEsaCxudWxsLGYpfTtiLmFmdGVyPWZ1bmN0aW9uKGEsCmgsZil7cmV0dXJuIGIuYXJvdW5kKGEsbnVsbCxoLGYpfTtiLmZvcmNlV3JhcD1mdW5jdGlvbihiKXt2YXIgaD1iLmN1c3RvbURlc2NyaXB0b3JDb25maWd8fHt9LGY9bnVsbCxuPWIucGFyZW50T2JqZWN0LG09Yi5wcm9wZXJ0eSxxPWIuc2V0VXBGdW5jLHQ9Yi53cmFwTmV3RnVuY3Rpb25BZ2Fpbnx8ITEscD1iLnByb3BlcnR5V3JhcHBlZEZ1bmN0aW9uTmFtZTtpZihuJiZtKXtmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixtKTtpZighZnx8Zi5jb25maWd1cmFibGUpe2Y/KGRlbGV0ZSBmLndyaXRhYmxlLGRlbGV0ZSBmLnZhbHVlKTpmPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH07dmFyIGw9Zi5zZXQscz1mLmdldDtmLnNldD1oLnNldHx8ZnVuY3Rpb24obSl7ITAhPT1tLnVzZWRCeUFnZW50JiYoZShsKSYmbChhcmd1bWVudHMpLGUoYi5MYSkmJiF0fHwhYS51dGlscy5pc0Z1bmN0aW9uKHEpfHxxKG0pKX07Zi5nZXQ9aC5nZXR8fGZ1bmN0aW9uKCl7dmFyIG09CnM/cygpOmEudXRpbHMucmVmc1twXTtlKGIuTGEpJiYobT1iLkxhKTtyZXR1cm4gbX19ZWxzZSBhLmxvZygiTTE3IixwKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixtLGYpfWVsc2UgYS5lcnJvcigiTTE4Iil9fSkoYS5hb3B8fChhLmFvcD17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7YT1hLkV2ZW50VHlwZXx8KGEuRXZlbnRUeXBlPXt9KTthW2EuUGFnZVZpZXc9MF09IlBhZ2VWaWV3IjthW2EuQWpheD0yXT0iQWpheCI7YVthLlZQYWdlVmlldz0zXT0iVlBhZ2VWaWV3IjthW2EuRXJyb3I9NF09IkVycm9yIjthW2EuSUZSQU1FPTFdPSJJRlJBTUUiO2FbYS5BQlNUUkFDVD0xMDBdPSJBQlNUUkFDVCI7YVthLkFEUlVNX1hIUj0xMDFdPSJBRFJVTV9YSFIiO2FbYS5OR19WSVJUVUFMX1BBR0U9MTAyXT0iTkdfVklSVFVBTF9QQUdFIn0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpe3ZhciBiPWEuZXZlbnRzfHwoYS5ldmVudHM9e30pO2IuVD17fTtiLlRbYS5FdmVudFR5cGUuQUJTVFJBQ1RdPQp7Z3VpZDoic3RyaW5nIix1cmw6InN0cmluZyIscGFyZW50R1VJRDoic3RyaW5nIixwYXJlbnRVcmw6InN0cmluZyIscGFyZW50VHlwZToibnVtYmVyIix0aW1lc3RhbXA6Im51bWJlciJ9O2IuVFthLkV2ZW50VHlwZS5WUGFnZVZpZXddPXtyZXNUaW1pbmc6Im9iamVjdCJ9O2IuVFthLkV2ZW50VHlwZS5OR19WSVJUVUFMX1BBR0VdPXtkaWdlc3RDb3VudDoibnVtYmVyIn07Yi5UW2EuRXZlbnRUeXBlLkFqYXhdPXttZXRob2Q6InN0cmluZyIscGFyZW50UGhhc2U6InN0cmluZyIscGFyZW50UGhhc2VJZDoibnVtYmVyIixlcnJvcjoib2JqZWN0IixwYXJhbWV0ZXI6Im9iamVjdCIseGhyU3RhdHVzOiJudW1iZXIiLGRhdGFPYmplY3Q6Im9iamVjdCJ9O2IuVFthLkV2ZW50VHlwZS5BRFJVTV9YSFJdPXthbGxSZXNwb25zZUhlYWRlcnM6InN0cmluZyJ9O2IuVFthLkV2ZW50VHlwZS5FcnJvcl09e21zZzoic3RyaW5nIixsaW5lOiJudW1iZXIiLHN0YWNrOiJzdHJpbmcifX0pKGt8fChrPXt9KSk7CihmdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt0aGlzLmZhPXt9fWEucHJvdG90eXBlLm1hcms9ZnVuY3Rpb24oYSxiKXtsLm1hcmsuYXBwbHkodGhpcyxhcmd1bWVudHMpfTthLnByb3RvdHlwZS5nZXRUaW1pbmc9ZnVuY3Rpb24oYSl7cmV0dXJuKGE9dGhpcy5nZXRFbnRyeUJ5TmFtZShhKSkmJmEuc3RhcnRUaW1lfTthLnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKGEsYixmKXtsLm1lYXN1cmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTthLnByb3RvdHlwZS5nZXRFbnRyeUJ5TmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gbC5nZXRFbnRyeUJ5TmFtZS5jYWxsKHRoaXMsYSl9O3JldHVybiBhfSgpO2IuSWM9ZnVuY3Rpb24oYSl7cmV0dXJuIGwuSWMoYSl9O2EuUGVyZm9ybWFuY2VUcmFja2VyPWI7dmFyIGw7KGZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMuaGFzT3duUHJvcGVydHlEZWZpbmVkLGg9YS51dGlscy5oYigpLGY9YS51dGlscy5ub3c7Yi5tYXJrPQpmdW5jdGlvbihiLGMpe3RoaXMuZmFbYl09e25hbWU6YixlbnRyeVR5cGU6Im1hcmsiLHN0YXJ0VGltZTphLnV0aWxzLmlzRGVmaW5lZChjKT9jOmYoKSxkdXJhdGlvbjowfX07Yi5tZWFzdXJlPWZ1bmN0aW9uKGIsbSxlKXtjKHRoaXMuZmEsbSkmJmModGhpcy5mYSxlKT90aGlzLmZhW2JdPXtuYW1lOmIsZW50cnlUeXBlOiJtZWFzdXJlIixzdGFydFRpbWU6bT90aGlzLmZhW21dLnN0YXJ0VGltZTpoLGR1cmF0aW9uOihlP3RoaXMuZmFbZV0uc3RhcnRUaW1lOmYoKSktKG0/dGhpcy5mYVttXS5zdGFydFRpbWU6aCl9OmEuZXJyb3IoIk0xOSIsYyh0aGlzLmZhLG0pP2U6bSl9O2IuZ2V0RW50cnlCeU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZmFbYV18fG51bGx9O2IuSWM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEraH19KShsfHwobD17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGwoYixjKXtiPWJ8fHt9O2Zvcih2YXIgbiBpbiBiKWNbbl09CmZ1bmN0aW9uKCl7dmFyIGM9bixmPWJbbl07cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBoPSJfIitjLG49dGhpc1toXTtpZihhLnV0aWxzLmlzRGVmaW5lZChiKSlpZih0eXBlb2YgYj09PWYpdGhpc1toXT1iO2Vsc2UgdGhyb3cgaD0id3JvbmcgdHlwZSBvZiAiK2MrIiB2YWx1ZSwgIit0eXBlb2YgYisiIHBhc3NlZCBpbiBidXQgc2hvdWxkIGJlIGEgIitmKyIuIixhLnJlcG9ydEFQSU1lc3NhZ2UoYS5WLldkLGgsIkFEUlVNLnJlcG9ydCIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSksVHlwZUVycm9yKGgpO3JldHVybiBufX0oKX1mdW5jdGlvbiBlKGEpe3ZhciBiPXt9LGM7Zm9yKGMgaW4gYSl7dmFyIG09YVtjXTtiW20uc3RhcnRdPSEwO2JbbS5lbmRdPSEwfXJldHVybiBifXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihjKXt0aGlzLnBlcmY9bmV3IGEuUGVyZm9ybWFuY2VUcmFja2VyOyJPYmplY3QiPT09dGhpcy5jb25zdHJ1Y3Rvci5uYW1lJiZhLnJlcG9ydEFQSU1lc3NhZ2UoYS5WLmxhLAphLldhKTt0aGlzLnRpbWVzdGFtcChhLnV0aWxzLm5vdygpKTt0aGlzLmd1aWQoYS51dGlscy5nZW5lcmF0ZUdVSUQoKSk7dGhpcy51cmwoZG9jdW1lbnQuVVJMKTt0aGlzLmtjKGMpfWIucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudFR5cGUuQUJTVFJBQ1R9O2IucHJvdG90eXBlLmtjPWZ1bmN0aW9uKGIpe2lmKGEudXRpbHMuaXNPYmplY3QoYikpZm9yKHZhciBjIGluIGIpe3ZhciBtPXRoaXNbY118fHRoaXNbIm1hcmsiK2EudXRpbHMuT2UoYyldO20mJmEudXRpbHMuaXNGdW5jdGlvbihtKSYmbS5jYWxsKHRoaXMsYltjXSl9fTtiLkRjPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm57Z3VpZDpmdW5jdGlvbigpe3JldHVybiBhfSx1cmw6ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdHlwZTpmdW5jdGlvbigpe3JldHVybiBjfX19O2IucHJvdG90eXBlLm5rPWZ1bmN0aW9uKCl7cmV0dXJuIGIuRGModGhpcy5wYXJlbnRHVUlEKCksdGhpcy5wYXJlbnRVcmwoKSx0aGlzLnBhcmVudFR5cGUoKSl9OwpiLnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5uaygpO2EudXRpbHMuaXNEZWZpbmVkKGIpJiYoYS51dGlscy5pc0Z1bmN0aW9uKGIuZ3VpZCkmJmEudXRpbHMuaXNGdW5jdGlvbihiLnVybCkmJmEudXRpbHMuaXNGdW5jdGlvbihiLnR5cGUpPyh0aGlzLnBhcmVudEdVSUQoYi5ndWlkKCkpLHRoaXMucGFyZW50VXJsKGIudXJsKCkpLHRoaXMucGFyZW50VHlwZShiLnR5cGUoKSkpOmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsIm9iamVjdCBpcyBub3QgYSB2YWxpZCBFdmVudElkZW50aWZpZXIiLCJFdmVudFRyYWNrZXIucGFyZW50IixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIGN9O3JldHVybiBifSgpO2IuRXZlbnRUcmFja2VyPWM7Yi5NYT1sO2IuSWU9ZnVuY3Rpb24oYixjKXtiPWJ8fHt9O3ZhciBuPWUoYiksbTtmb3IobSBpbiBuKW49YS51dGlscy5PZShtKSxjWyJtYXJrIituXT1hLnV0aWxzLm9nKGZ1bmN0aW9uKGEsCmIpe3RoaXMucGVyZi5tYXJrKGEsYil9LG0pLGNbImdldCIrbl09YS51dGlscy5vZyhmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wZXJmLmdldFRpbWluZyhhKX0sbSl9O2woYi5UW2EuRXZlbnRUeXBlLkFCU1RSQUNUXSxjLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhoKXtoPWIuY2FsbCh0aGlzLGgpfHx0aGlzO2guY29uc3RydWN0b3IhPWMmJmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLkVycm9yIixbXSk7cmV0dXJuIGh9dihjLGIpO2MucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudFR5cGUuRXJyb3J9O3JldHVybiBjfShiLkV2ZW50VHJhY2tlcik7Yi5FcnJvcj1sO2IuTWEoYi5UW2EuRXZlbnRUeXBlLkVycm9yXSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPQp7fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoKXt2YXIgaD1udWxsIT09YiYmYi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7aC5zbD1mdW5jdGlvbihiKXt2YXIgbj1iLm1lc3NhZ2UsbT1iLmZpbGVuYW1lLGU9Yi5saW5lbm8sdD1iLmNvbG5vO2I9Yi5lcnJvcjthLmxvZygiTTIwIik7aWYoYS51dGlscy5pc0RlZmluZWQoYil8fGMuWGIpYS5sb2coIk0yMSIpLGMuWGI9ITAsaC5IYShuLG0sZSx0LGIpfTtyZXR1cm4gaH12KGMsYik7Yy5sPWZ1bmN0aW9uKGIpe2EubW9uaXRvci5nYS5IYShiLm1lc3NhZ2V8fGIuZGVzY3JpcHRpb24sYi5maWxlTmFtZXx8Yi5maWxlbmFtZSxiLmxpbmVOdW1iZXIsYi5jb2x1bW5OdW1iZXIsYil9O2MucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcztiLnByb3RvdHlwZS5zZXRVcC5jYWxsKHRoaXMpO2EudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csCiJlcnJvciIsdGhpcy5zbCwhMCk7YS5saXN0ZW5Gb3JFcnJvcnM9ZnVuY3Rpb24oKXtjLldmKCl9O3RoaXMuV2YoKX07Yy5wcm90b3R5cGUuZW09ZnVuY3Rpb24oKXtjLlFjPTB9O2MucHJvdG90eXBlLkhhPWZ1bmN0aW9uKGIsZixuLG0sZSl7Yy5RYz49YS5jb25mLmxpP2EubG9nKCJNMjIiKToobT1hLnV0aWxzLnRyeUV4dHJhY3RpbmdFcnJvclN0YWNrKGUpLGEuY29tbWFuZCgicmVwb3J0UGFnZUVycm9yIixuZXcgYS5ldmVudHMuRXJyb3IoYS51dGlscy5tZXJnZUpTT04oe21zZzpiKyIiLHVybDphLnV0aWxzLmlzU3RyaW5nKGYpP2Y6dm9pZCAwLGxpbmU6YS51dGlscy5pc051bWJlcihuKT9uOnZvaWQgMCxzdGFjazptfSx0aGlzLnN0YXR1cykpKSxjLlFjKyssYy5oYWRFcnJvcnM9ITApfTtjLnByb3RvdHlwZS5XZj1mdW5jdGlvbigpe3ZhciBiPXRoaXM7Yy5YYj0hMTthLmFvcC5zdXBwb3J0KHdpbmRvdy5vbmVycm9yKT8od2luZG93Lm9uZXJyb3I9YS5hb3AuYXJvdW5kKHdpbmRvdy5vbmVycm9yLApmdW5jdGlvbihmLG4sbSxlLHQpe2MuWGI/YS5sb2coIk0yMyIpOmMuaGQ/YS5sb2coIk0yNSIpOihhLmxvZygiTTI0IiksYi5IYShmLG4sbSxlLHQpLGMuaGQ9ITApfSxmdW5jdGlvbigpe2EubG9nKCJNMjYiKTtjLmhkPSExfSwib25lcnJvciIpLGEubG9nKCJNMjciKSk6YS5sb2coIk0yOCIpfTtyZXR1cm4gY30oYi53Yyk7bC5oZD0hMTtsLlFjPTA7bC5oYWRFcnJvcnM9ITE7bC5YYj0hMTtiLkVycm9yTW9uaXRvcj1sO2IuZ2E9bmV3IGIuRXJyb3JNb25pdG9yfSkoYS5tb25pdG9yfHwoYS5tb25pdG9yPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS5sb2csZT1hLmFvcC5hZnRlcixjPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGYoKXtyZXR1cm4gbnVsbCE9PWMmJmMuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXYoZixjKTtmLnByb3RvdHlwZS5zZXRVcD1mdW5jdGlvbigpe2EudXRpbHMubWFwKFsiZXJyb3IiLCJleGNlcHRpb24iXSwKZnVuY3Rpb24oYil7dmFyIGM9eFtiXTthLnV0aWxzLmlzRnVuY3Rpb24oYykmJmEuYW9wLnN1cHBvcnQoYyk/KGwoIk0yOSIsYikseFtiXT1lKGMsZnVuY3Rpb24oYSl7bCgiTTMwIixiLGEpO2YuVGkoYSl9KSk6bCgiTTMxIixiKX0pO2IuZ2EuSGE9ZShiLmdhLkhhLGZ1bmN0aW9uKCl7MDxmLm9hLmxlbmd0aD8obCgiTTMyIiksZi5vYT1bXSk6bCgiTTMzIil9KX07Zi5UaT1mdW5jdGlvbihiKXtmLm9hLmxlbmd0aD49YS5jb25mLmZpP2woIk0zNCIpOmEudXRpbHMuaXNTdHJpbmcoYik/KGwoIk0zNSIsYiksZi5vYS5wdXNoKGIpLGEudXRpbHMub1NUTyhmLkNnKSk6YS51dGlscy5pc09iamVjdChiKT8oYj1hLnV0aWxzLnRvSlNPTlN0cmluZyhiKSxudWxsIT09Yj8obCgiTTM2IixiKSxmLm9hLnB1c2goYiksYS51dGlscy5vU1RPKGYuQ2cpKTphLmVycm9yKCJNMzciKSk6bCgiTTM4Iix0eXBlb2YgYil9O2YuQ2c9ZnVuY3Rpb24oKXswPGYub2EubGVuZ3RoPyhsKCJNMzkiKSxiLmdhLkhhKGYub2Euam9pbigiXG4iKSksCmYub2E9W10pOmwoIk00MCIpfTtyZXR1cm4gZn0oYi53Yyk7Yy5vYT1bXTtiLm5uPWM7Yi50aj1uZXcgY30pKGEubW9uaXRvcnx8KGEubW9uaXRvcj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYigpe31iLnNldFVwPWZ1bmN0aW9uKCl7Yi5wZXJmPWEudXRpbHMucmVmcy5rYTthLnV0aWxzLmlzT2JqZWN0KGIucGVyZikmJmEudXRpbHMuaXNPYmplY3QoYi5wZXJmLnRpbWluZyl8fChiLnBlcmY9dm9pZCAwKX07cmV0dXJuIGJ9KCk7bC5wZXJmPW51bGw7Yi5QZXJmb3JtYW5jZVdyYXBwZXI9bH0pKGEubW9uaXRvcnx8KGEubW9uaXRvcj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubmF2VGltaW5nPW51bGx9ZS5wcm90b3R5cGUuWGU9ZnVuY3Rpb24oKXt2YXIgYz1iLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmOwppZihjPWMmJmMudGltaW5nKWlmKGMubmF2aWdhdGlvblN0YXJ0JiZjLm5hdmlnYXRpb25TdGFydDw9Yy5sb2FkRXZlbnRFbmQpe3ZhciBoPXt9LGY7Zm9yKGYgaW4gYyl7dmFyIG49Y1tmXTsibnVtYmVyIj09PXR5cGVvZiBuJiYoaFtmXT1uKX10aGlzLm5hdlRpbWluZz1ofWVsc2UgYS5sb2coIk00MiIpO2Vsc2UgYS5sb2coIk00MSIpfTtlLnByb3RvdHlwZS5zZXRVcD1mdW5jdGlvbigpe2IuUGVyZm9ybWFuY2VXcmFwcGVyLnNldFVwKCl9O3JldHVybiBlfSgpO2IuTmF2VGltaW5nTW9uaXRvcj1sO2IubmF2TW9uaXRvcj1uZXcgYi5OYXZUaW1pbmdNb25pdG9yfSkoYS5tb25pdG9yfHwoYS5tb25pdG9yPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5zZD1udWxsO2IuUGVyZm9ybWFuY2VXcmFwcGVyLnNldFVwKCk7dGhpcy5yZXNvdXJjZUJ1ZmZlcj1bXTt0aGlzLmJhc2VQYWdlUmVzb3VyY2VCdWZmZXI9CltdO3RoaXMucWU9NTAwO3RoaXMuemM9MTUwO3RoaXMuRWk9M0UzO3RoaXMuc2V0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplKCk7dGhpcy5ybSgpfWUucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKCl7Yi5QZXJmb3JtYW5jZVdyYXBwZXIuc2V0VXAoKTthLnV0aWxzLmlzRGVmaW5lZChiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmKSYmYS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYuZ2V0RW50cmllc0J5VHlwZSk/YS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYuYWRkRXZlbnRMaXN0ZW5lcik/Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZi5hZGRFdmVudExpc3RlbmVyKCJyZXNvdXJjZXRpbWluZ2J1ZmZlcmZ1bGwiLHRoaXMuZmIuYmluZCh0aGlzKSk6Im9ucmVzb3VyY2V0aW1pbmdidWZmZXJmdWxsImluIGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmY/YS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYucmQpPwpiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmLnJkPWEuYW9wLmFyb3VuZChiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmLnJkLHRoaXMuZmIuYmluZCh0aGlzKSk6Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZi5yZD10aGlzLmZiLmJpbmQodGhpcyk6YS51dGlscy5yZWZzLnNldEludGVydmFsLmNhbGwod2luZG93LHRoaXMuaG0uYmluZCh0aGlzKSx0aGlzLkVpKTphLmxvZygiTTQzIik7dGhpcy52bSgpO3RoaXMuaW0oKX07ZS5wcm90b3R5cGUudm09ZnVuY3Rpb24oKXt2YXIgYz1hLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5yZXNUaW1pbmcmJmEuY29uZi51c2VyQ29uZi5yZXNUaW1pbmcuYnVmU2l6ZTthLnV0aWxzLmlzRGVmaW5lZChiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmKSYmYS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYuc2V0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplKSYmYS51dGlscy5pc051bWJlcihjKSYmMDxjJiYodGhpcy56Yz0KYyl9O2UucHJvdG90eXBlLmltPWZ1bmN0aW9uKCl7dmFyIGM9Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZjthLnV0aWxzLmlzRGVmaW5lZChjKSYmKGEudXRpbHMuaXNGdW5jdGlvbihjLnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZSkmJihjLnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZT1hLmFvcC5hcm91bmQoYy5zZXRSZXNvdXJjZVRpbWluZ0J1ZmZlclNpemUsZnVuY3Rpb24oKXthLnV0aWxzLmlzRGVmaW5lZChhcmd1bWVudHMpJiZhLnV0aWxzLmlzRGVmaW5lZChhcmd1bWVudHNbMF0pJiYodGhpcy56Yz1hcmd1bWVudHNbMF0pfS5iaW5kKHRoaXMpKSksYS51dGlscy5pc0Z1bmN0aW9uKGMuY2xlYXJSZXNvdXJjZVRpbWluZ3MpJiYoYy5jbGVhclJlc291cmNlVGltaW5ncz1hLmFvcC5hcm91bmQoYy5jbGVhclJlc291cmNlVGltaW5ncyxmdW5jdGlvbigpe3RoaXMuZmIoKX0uYmluZCh0aGlzKSkpKX07ZS5wcm90b3R5cGUuV2U9ZnVuY3Rpb24oKXt0aGlzLmJhc2VQYWdlUmVzb3VyY2VCdWZmZXI9CnRoaXMubWYoKX07ZS5wcm90b3R5cGUuZmI9ZnVuY3Rpb24oKXt0aGlzLnJlc291cmNlQnVmZmVyPXRoaXMubWYoKX07ZS5wcm90b3R5cGUuaG09ZnVuY3Rpb24oKXt0aGlzLmpiKCkubGVuZ3RoPj10aGlzLnpjJiZ0aGlzLmZiKCl9O2UucHJvdG90eXBlLmpiPWZ1bmN0aW9uKCl7dmFyIGM9Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZixoPVtdO2MmJmMuZ2V0RW50cmllc0J5VHlwZSYmKGM9Yy5nZXRFbnRyaWVzQnlUeXBlKCJyZXNvdXJjZSIpKSYmYy5sZW5ndGgmJjA8Yy5sZW5ndGgmJmMudW5zaGlmdCYmKGg9Yyk7MD09aC5sZW5ndGgmJmEubG9nKCJNNDQiKTtyZXR1cm4gaH07ZS5wcm90b3R5cGUucms9ZnVuY3Rpb24oYixoKXtyZXR1cm4gYS51dGlscy5maWx0ZXIodGhpcy5yZXNvdXJjZUJ1ZmZlcixmdW5jdGlvbihhKXtyZXR1cm4gYithLnN0YXJ0VGltZT49aH0pfTtlLnByb3RvdHlwZS5zaz1mdW5jdGlvbihhLGIpe3RoaXMucmVzb3VyY2VCdWZmZXI9dGhpcy5yZXNvdXJjZUJ1ZmZlci5jb25jYXQodGhpcy5qYigpKTsKdmFyIGY9dGhpcy5yayhhLGIpO3RoaXMuY2xlYXJSZXNvdXJjZVRpbWluZ3MoKTt0aGlzLnJlc291cmNlQnVmZmVyPVtdO3JldHVybiBmfTtlLnByb3RvdHlwZS5ybT1mdW5jdGlvbigpe3ZhciBjPWIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmY7YS51dGlscy5pc0RlZmluZWQoYykmJmEudXRpbHMuaXNGdW5jdGlvbihjLmNsZWFyUmVzb3VyY2VUaW1pbmdzKSYmKHRoaXMuc2Q9Yy5jbGVhclJlc291cmNlVGltaW5ncy5iaW5kKGMpKX07ZS5wcm90b3R5cGUuc2V0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIGM9Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZixoPWEuY29uZi51c2VyQ29uZiYmYS5jb25mLnVzZXJDb25mLnJlc1RpbWluZyYmYS5jb25mLnVzZXJDb25mLnJlc1RpbWluZy5idWZTaXplOyFhLnV0aWxzLmlzTnVtYmVyKGgpfHwwPj1oP2EubG9nKCJNNDUiKTpjJiZhLnV0aWxzLmlzRnVuY3Rpb24oYy5zZXRSZXNvdXJjZVRpbWluZ0J1ZmZlclNpemUpPwpjLnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZShoKTphLmxvZygiTTQ2Iil9O2UucHJvdG90eXBlLm1mPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5qYigpO2lmKHRoaXMucmVzb3VyY2VCdWZmZXIubGVuZ3RoK2IubGVuZ3RoPnRoaXMucWUpcmV0dXJuIGEubG9nKCJNNDciKSx0aGlzLnJlc291cmNlQnVmZmVyLmNvbmNhdChiLnNsaWNlKDAsdGhpcy5xZS10aGlzLnJlc291cmNlQnVmZmVyLmxlbmd0aCkpO3RoaXMuY2xlYXJSZXNvdXJjZVRpbWluZ3MoKTtyZXR1cm4gdGhpcy5yZXNvdXJjZUJ1ZmZlci5jb25jYXQoYil9O2UucHJvdG90eXBlLmNsZWFyUmVzb3VyY2VUaW1pbmdzPWZ1bmN0aW9uKCl7YS5jb25mLmNsZWFyUmVzVGltaW5nJiZhLnV0aWxzLmlzRnVuY3Rpb24odGhpcy5zZCkmJnRoaXMuc2QoKX07cmV0dXJuIGV9KCk7Yi5SZXNvdXJjZU1vbml0b3I9bDtiLnJlc291cmNlTW9uaXRvcj1uZXcgYi5SZXNvdXJjZU1vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fAooaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbChhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGUoYSl7cmV0dXJuInZpZGVvIj09bChhKX1mdW5jdGlvbiBjKGEpe3JldHVybiJpbWFnZSI9PWwoYSl9ZnVuY3Rpb24gaChhKXtyZXR1cm4ic3ZnIj09bChhKX1mdW5jdGlvbiBmKGEpe3JldHVybiAwPT09YS5sYXN0SW5kZXhPZigidmlkZW8vIiwwKXx8MD09PWEubGFzdEluZGV4T2YoImltYWdlLyIsMCl8fDA9PT1hLmxhc3RJbmRleE9mKCJmb250LyIsMCl8fDA9PT1hLmxhc3RJbmRleE9mKCJtb2RlbC8iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidGV4dC8iLDApfWZ1bmN0aW9uIG4oYSl7cmV0dXJuImVtYmVkIj09bChhKSYmZihhLnR5cGUpfWZ1bmN0aW9uIG0oYSl7cmV0dXJuIm9iamVjdCI9PWwoYSkmJmYoYS50eXBlKX1mdW5jdGlvbiBxKGEpe3JldHVybiJpbWciPT1sKGEpfWEuams9bDthLlNmPWU7YS5abj1jO2EuWW49Cmg7YS5LZj1mdW5jdGlvbihhKXtyZXR1cm4iY2FudmFzIj09bChhKX07YS5RZj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIFRleHR9O2EuV249ZjthLm9mPWZ1bmN0aW9uKGEpe3JldHVybihhLnJpZ2h0LWEubGVmdCkqKGEuYm90dG9tLWEudG9wKX07YS5Wbj1uO2EuWG49bTthLlVuPXE7YS5uYj1mdW5jdGlvbihhKXtyZXR1cm4gcShhKXx8bShhKXx8bihhKXx8ZShhKXx8YyhhKXx8aChhKX07YS5vYj1mdW5jdGlvbihhKXthPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEpO3JldHVybiJub25lIiE9PWEuZ2V0UHJvcGVydHlWYWx1ZSgiZGlzcGxheSIpJiYiaGlkZGVuIiE9PWEuZ2V0UHJvcGVydHlWYWx1ZSgidmlzaWJpbGl0eSIpfTthLlFiPWZ1bmN0aW9uKGEpe3ZhciBiPSIiO2EgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2I9YS5jdXJyZW50U3JjfHxhLnNyYzphIGluc3RhbmNlb2YgSFRNTEVtYmVkRWxlbWVudD9iPWEuc3JjOmEgaW5zdGFuY2VvZiBIVE1MT2JqZWN0RWxlbWVudD8KYj1hLmRhdGE6InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MVmlkZW9FbGVtZW50JiZhIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudD9iPWEuY3VycmVudFNyY3x8YS5zcmM6YSBpbnN0YW5jZW9mIFNWR0ltYWdlRWxlbWVudCYmKGI9YS5ocmVmLmJhc2VWYWwpO3JldHVybiBifTthLlBuPWZ1bmN0aW9uKGEpe3ZhciBiPSIiO2EgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2I9ImltZyI6YSBpbnN0YW5jZW9mIEhUTUxFbWJlZEVsZW1lbnQ/Yj0iZW1iZWQiOmEgaW5zdGFuY2VvZiBIVE1MT2JqZWN0RWxlbWVudD9iPSJvYmplY3QiOiJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTFZpZGVvRWxlbWVudCYmYSBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQ/Yj0idmlkZW8iOmEgaW5zdGFuY2VvZiBTVkdJbWFnZUVsZW1lbnQmJihiPSJpbWFnZSIpO3JldHVybiBifTthLlhjPWZ1bmN0aW9uKGMpe3JldHVybiBhLmlzRGVmaW5lZChjLmF0dHJpYnV0ZXMpP2MuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oInNyYyIpfHwKYy5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiaHJlZiIpOnZvaWQgMH19KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dGhpcy5Waz0wLjI7dGhpcy5VYT0wO3RoaXMubGI9ITE7dGhpcy56YT1hLmNvbmYuc3BhMjt0aGlzLnFjPXRoaXMuc2M9dGhpcy5nPXRoaXMuYmE9dGhpcy54YT0wO3RoaXMudmlld3BvcnQ9e3RvcDowLGxlZnQ6MCxib3R0b206dGhpcy5xYyxyaWdodDp0aGlzLnNjfTt0aGlzLlNhPTB9Yi5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt0aGlzLlI9e307dGhpcy5jYz17fTt0aGlzLmJhPWEudXRpbHMubm93KCk7dGhpcy5nPTA7dmFyIGI9d2luZG93Lk11dGF0aW9uT2JzZXJ2ZXI7dGhpcy5UZSgpO2EudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csInJlc2l6ZSIsYS51dGlscy55aih0aGlzLlRlKS5iaW5kKHRoaXMpKTthLnV0aWxzLmlzRGVmaW5lZChiKSYmCihhLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuWm9uZSkmJmEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5ab25lLl9fc3ltYm9sX18oIk11dGF0aW9uT2JzZXJ2ZXIiKSk/dGhpcy4kYj1uZXcgKHdpbmRvd1t3aW5kb3cuWm9uZS5fX3N5bWJvbF9fKCJNdXRhdGlvbk9ic2VydmVyIildKSh0aGlzLmlnLmJpbmQodGhpcykpOnRoaXMuJGI9bmV3IGIodGhpcy5pZy5iaW5kKHRoaXMpKSx0aGlzLiRiLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMCxhdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbInNyYyIsImhyZWYiXX0pLGEubG9nKCJNNDgiKSl9O2IucHJvdG90eXBlLmlnPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7YS5QKCk7Yi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3N3aXRjaChhLnR5cGUpe2Nhc2UgImNoaWxkTGlzdCI6W10uc2xpY2UuY2FsbChhLmFkZGVkTm9kZXMpLmZvckVhY2goZnVuY3Rpb24oYSl7Yy5MZShhKX0pO2JyZWFrOwpjYXNlICJhdHRyaWJ1dGVzIjpjLkxlKGEudGFyZ2V0KX19KTthLlEoKX07Yi5wcm90b3R5cGUuVGU9ZnVuY3Rpb24oKXt0aGlzLnNjPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5pbm5lcldpZHRoKSYmYS51dGlscy5pc0RlZmluZWQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKT9NYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpOndpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGh8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0uY2xpZW50V2lkdGg7dGhpcy5xYz1hLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuaW5uZXJIZWlnaHQpJiZhLnV0aWxzLmlzRGVmaW5lZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KT9NYXRoLm1pbih3aW5kb3cuaW5uZXJIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk6CndpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5jbGllbnRIZWlnaHQ7YS5sb2coIk00OSIsdGhpcy5zYyx0aGlzLnFjKTt0aGlzLnZpZXdwb3J0PXt0b3A6MCxsZWZ0OjAsYm90dG9tOnRoaXMucWMscmlnaHQ6dGhpcy5zY319O2IucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7YS5QKCk7dGhpcy5zZXRVcCgpO2EuUSgpO2EubG9nKCJNNTAiKX07Yi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLlI9e307dGhpcy5VYT0wO3RoaXMuY2M9e307dGhpcy5TYT0wO2EubG9nKCJNNTEiKX07Yi5wcm90b3R5cGUuTGU9ZnVuY3Rpb24oYil7YS5QKCk7dmFyIGM9YS51dGlscy5ub3coKTthLnV0aWxzLm5iKGIpJiYhYi5pc0FkcnVtVHJhY2tlZE5vZGU/KHRoaXMubGJ8fCh0aGlzLks9dGhpcy5LLmJpbmQodGhpcyksdGhpcy5sPXRoaXMubC5iaW5kKHRoaXMpLAp0aGlzLksuST0hMCx0aGlzLmxiPXRoaXMubC5JPSEwKSx0aGlzLmcrKyxhLmxvZygiTTUyIix0aGlzLmcpLGM9YS51dGlscy5YYyhiKSxjPWEudXRpbHMuaXNEZWZpbmVkKGMpP2MudmFsdWU6bnVsbCxhLnV0aWxzLlNmKGIpPyhiLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZGRhdGEiLHRoaXMuSyksYS5sb2coIk01MyIsYykpOihiLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHRoaXMuSyksYS5sb2coIk01NCIsYykpLGIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHRoaXMubCksYi5pc0FkcnVtVHJhY2tlZE5vZGU9ITApOmEudXRpbHMuS2YoYikmJiFiLmFkcnVtTm9kZUlkPyhhLmxvZygiTTU1IiksdGhpcy5JYihiLGMpKTphLnV0aWxzLlFmKGIpJiYodGhpcy5VYT1NYXRoLm1heCh0aGlzLlVhLGMpKTthLlEoKX07Yi5wcm90b3R5cGUuSz1mdW5jdGlvbihiKXthLlAoKTt2YXIgYz1hLnV0aWxzLm5vdygpO3RoaXMuYmE9YztiPWIudGFyZ2V0O3ZhciBoPWEudXRpbHMuUWIoYik7YS51dGlscy5pc0RlZmluZWQoaCkmJgowPGgubGVuZ3RoPyJkYXRhOiIhPWguc3Vic3RyaW5nKDAsNSl8fGIuYWRydW1Ob2RlSWQ/dGhpcy5WaShoLGMsYik6KGEubG9nKCJNNTYiKSx0aGlzLkliKGIsYykpOmIgaW5zdGFuY2VvZiBTVkdFbGVtZW50JiYhYi5hZHJ1bU5vZGVJZCYmKGEubG9nKCJNNTciKSx0aGlzLkliKGIsYykpO2ImJmIuaXNBZHJ1bVRyYWNrZWROb2RlJiYodGhpcy50YihiKSx0aGlzLmctLSxhLmxvZygiTTU4Iix0aGlzLmcpKTthLlEoKX07Yi5wcm90b3R5cGUubD1mdW5jdGlvbihiKXt2YXIgYz1iLnRhcmdldDtjJiZjLmlzQWRydW1UcmFja2VkTm9kZSYmKHRoaXMudGIoYyksdGhpcy5nLS0sYj1hLnV0aWxzLlFiKGIudGFyZ2V0KSxhLmxvZygiTTU5IixiKSl9O2IucHJvdG90eXBlLnRiPWZ1bmN0aW9uKGEpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsdGhpcy5LKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIix0aGlzLmwpfTtiLnByb3RvdHlwZS5TYj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tYihiKSYmCmEudXRpbHMub2IoYil9O2IucHJvdG90eXBlLlZpPWZ1bmN0aW9uKGIsYyxoKXthLnV0aWxzLmlzRGVmaW5lZCh0aGlzLlJbYl0pP3RoaXMuU2IoaCkmJih0aGlzLlJbYl09YyxhLmxvZygiTTYwIixiLGMpKToodGhpcy5SW2JdPWMsYS5sb2coIk02MSIsYixjKSl9O2IucHJvdG90eXBlLkliPWZ1bmN0aW9uKGIsYyl7YS5sb2coIk02MiIsdGhpcy5TYSxjLGIub3V0ZXJIVE1MKTtiLmFkcnVtTm9kZUlkPXRoaXMuU2E7dGhpcy5jY1t0aGlzLlNhXT1jO3RoaXMuU2ErPTF9O2IucHJvdG90eXBlLlVlPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7YS5qLkViLkZhJiYodGhpcy54YT1iKTt2YXIgaD0wLGY9MCxuPXRoaXMucGsodGhpcy54YSk7YS5sb2coIk02MyIsbik7W10uc2xpY2UuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKS5mb3JFYWNoKGZ1bmN0aW9uKG0pe3ZhciB0PWEudXRpbHMuUWIobSk7ZGVsZXRlIG0uaXNBZHJ1bVRyYWNrZWROb2RlO2lmKGEudXRpbHMuaXNEZWZpbmVkKHQpJiYKMDx0Lmxlbmd0aClpZihhLmxvZygiTTY0Iix0KSxhLnV0aWxzLmlzRGVmaW5lZChjLlJbdF0pKXt2YXIgcD1jLlJbdF07YS5sb2coIk02NSIsdCxwKTthLnV0aWxzLm9iKG0pJiYoYS5sb2coIk02NiIsdCxwKSxjLnphJiYoYS5sb2coIk02NyIsZixwLGIpLGY9TWF0aC5tYXgoZixwLWIpLGEubG9nKCJNNjgiLHQsZikpLGMubWIobSkmJihhLmxvZygiTTY5IixoLHAsYiksaD1NYXRoLm1heChoLHAtYiksYS5sb2coIk03MCIsdCxoKSkpfWVsc2V7aWYoYS51dGlscy5uYihtKSYmYS51dGlscy5vYihtKSYmKHA9Yy52Zih0KSxhLnV0aWxzLmlzRGVmaW5lZChwKSkpe3ZhciBsPXAuc3RhcnRUaW1lLShiLWMueGEpLHM9cC5kdXJhdGlvbipuK2w7YS5sb2coIk03MSIsdCxzKTthLmxvZygiTTcyIixwLmR1cmF0aW9uLGwpO2MuemEmJihmPU1hdGgubWF4KGYscyksYS5sb2coIk03MyIsdCxmKSk7Yy5tYihtKSYmKGg9TWF0aC5tYXgoaCxzKSxhLmxvZygiTTc0Iix0LGgpKX19ZWxzZSBhLnV0aWxzLmlzRGVmaW5lZChtLmFkcnVtTm9kZUlkKSYmCihhLnV0aWxzLmlzRGVmaW5lZChjLmNjW20uYWRydW1Ob2RlSWRdKSYmKHA9Yy5jY1ttLmFkcnVtTm9kZUlkXSxhLnV0aWxzLm9iKG0pJiYoYy56YSYmKGY9TWF0aC5tYXgoZixwLWIpLGEubG9nKCJNNzUiLG0uYWRydW1Ob2RlSWQscCkpLGMubWIobSkmJihoPU1hdGgubWF4KGgscC1iKSxhLmxvZygiTTc2IixtLmFkcnVtTm9kZUlkLHApKSkpLGRlbGV0ZSBtLmFkcnVtTm9kZUlkKX0pO2EubG9nKCJNNzciLGgsZik7dGhpcy5ZaigpLmZvckVhY2goZnVuY3Rpb24obSl7dmFyIHQ9bS51cmw7bT1tLlNiO3ZhciBwPWMudmYodCk7YS51dGlscy5pc0RlZmluZWQocCkmJihwPXAuZHVyYXRpb24qbisocC5zdGFydFRpbWUtKGItYy54YSkpLGMuemEmJihhLmxvZygiTTc4Iix0LHApLGY9TWF0aC5tYXgoZixwKSksbSYmKGEubG9nKCJNNzkiLHQscCksaD1NYXRoLm1heChoLHApKSl9KTtpZighYS5jb25mLmRpc2FibGVUZXh0Rm9yVGVzdGluZyl7dmFyIG09dGhpcy5VYS1iOzA9PWgmJihhLmxvZygiTTgwIiksCmg9TWF0aC5tYXgoaCxtKSk7dGhpcy56YSYmMD09ZiYmKGEubG9nKCJNODEiKSxmPU1hdGgubWF4KGYsbSkpfWh8PTA7Znw9MDthLmxvZygiTTgyIixiLHRoaXMueGEpO2EubG9nKCJNODMiLHdpbmRvdy5sb2NhdGlvbi5ocmVmKTthLmxvZygiTTg0IixoLGYpO2EuaXNEZWJ1ZyYmKHgubG9nKCJ1cmwgPSAiK3dpbmRvdy5sb2NhdGlvbi5ocmVmKSx4LmxvZygicmVuZGVyUmF0aW8gPSAiK24pLHgubG9nKCJ2aXN1YWxseUNvbXBsZXRlVGltZSA9ICIraCkseC5sb2coInBhZ2VDb21wbGV0ZVRpbWUgPSAiK2YpKTtyZXR1cm57dmN0OmgscGN0OmZ9fTtiLnByb3RvdHlwZS5raz1mdW5jdGlvbihhKXthPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5LGg9YS50b3ArKHdpbmRvdy5wYWdlWU9mZnNldHx8Yi5zY3JvbGxUb3ApLShiLmNsaWVudFRvcHx8MCksYj1hLmxlZnQrKHdpbmRvdy5wYWdlWE9mZnNldHx8Yi5zY3JvbGxMZWZ0KS0KKGIuY2xpZW50TGVmdHx8MCk7cmV0dXJue3RvcDpNYXRoLnJvdW5kKGgpLGxlZnQ6TWF0aC5yb3VuZChiKSxib3R0b206TWF0aC5yb3VuZChoKSthLmhlaWdodCxyaWdodDpNYXRoLnJvdW5kKGIpK2Eud2lkdGh9fTtiLnByb3RvdHlwZS5tYj1mdW5jdGlvbihiKXtiPXRoaXMua2soYik7aWYodGhpcy5ZayhiKSlyZXR1cm4gYS5sb2coIk04NSIpLCExO3ZhciBjPXt0b3A6TWF0aC5tYXgodGhpcy52aWV3cG9ydC50b3AsYi50b3ApLGxlZnQ6TWF0aC5tYXgodGhpcy52aWV3cG9ydC5sZWZ0LGIubGVmdCksYm90dG9tOk1hdGgubWluKHRoaXMudmlld3BvcnQuYm90dG9tLGIuYm90dG9tKSxyaWdodDpNYXRoLm1pbih0aGlzLnZpZXdwb3J0LnJpZ2h0LGIucmlnaHQpfSxjPWEudXRpbHMub2YoYyk7Yj1hLnV0aWxzLm9mKGIpO2lmKDAhPWImJmMvYj49dGhpcy5WaylyZXR1cm4hMDthLmxvZygiTTg2Iik7cmV0dXJuITF9O2IucHJvdG90eXBlLllrPWZ1bmN0aW9uKGEpe3JldHVybiBhLnRvcD4KdGhpcy52aWV3cG9ydC5ib3R0b218fGEuYm90dG9tPHRoaXMudmlld3BvcnQudG9wfHxhLnJpZ2h0PHRoaXMudmlld3BvcnQubGVmdHx8YS5sZWZ0PnRoaXMudmlld3BvcnQucmlnaHQ/ITA6ITF9O2IucHJvdG90eXBlLkRqPWZ1bmN0aW9uKCl7YS51dGlscy5pc0RlZmluZWQodGhpcy4kYikmJnRoaXMuJGIuZGlzY29ubmVjdCgpO2EubG9nKCJNODciKX07Yi5wcm90b3R5cGUucGs9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcyxoPTAsZj0wO3RoaXMueGYoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBtPW4ubmFtZTtpZihhLnV0aWxzLmlzRGVmaW5lZChjLlJbbV0pKXt2YXIgcT1jLlJbbV0tYi1uLnN0YXJ0VGltZSx0PW4uZHVyYXRpb247YS5sb2coIk04OCIsbSxiLG4uc3RhcnRUaW1lLGMuUlttXSx0KTt0JiYwPHEmJihoKz1xL3QsZisrKX19KTtyZXR1cm4gMDxmP2gvZjoxfTtiLnByb3RvdHlwZS5Zaj1mdW5jdGlvbigpe3ZhciBiPXRoaXMsYz1bXTtbXS5zbGljZS5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLmZvckVhY2goZnVuY3Rpb24oaCl7aWYoYS51dGlscy5vYihoKSl7dmFyIGY9CmIuWGooaCk7ZiYmKGIubWIoaCk/Yy5wdXNoKHt1cmw6ZixTYjohMH0pOmIuemEmJmMucHVzaCh7dXJsOmYsU2I6ITF9KSl9fSk7cmV0dXJuIGN9O2IucHJvdG90eXBlLlhqPWZ1bmN0aW9uKGIpe2lmKGImJmIuc3R5bGUpe3ZhciBjPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGIpLmdldFByb3BlcnR5VmFsdWUoImJhY2tncm91bmQtaW1hZ2UiKTtjfHwoYz0oYi5jdXJyZW50U3R5bGV8fGIuc3R5bGUpLmJhY2tncm91bmRJbWFnZSk7Yj10aGlzLnVrKGMpO3JldHVybiBhLnV0aWxzLmlzRGVmaW5lZChiKSYmYS51dGlscy5pc0RlZmluZWQoYi5zdWJzdHIpJiYidW5kZWZpbmVkIj09PWIuc3Vic3RyKGIubGFzdEluZGV4T2YoIi8iKSsxKT92b2lkIDA6Yn19O2IucHJvdG90eXBlLnVrPWZ1bmN0aW9uKGEpe2lmKGEmJmEubWF0Y2goInVybCIpKXJldHVybiBhLnJlcGxhY2UoJ3VybCgiJywiIikucmVwbGFjZSgnIiknLCIiKX07Yi5wcm90b3R5cGUudmY9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPQowLGg9dGhpcy54ZigpO2M8aC5sZW5ndGg7YysrKXt2YXIgZj1oW2NdO2lmKGEudXRpbHMuaXNEZWZpbmVkKGYubmFtZSkmJjA8PWYubmFtZS5pbmRleE9mKGIpKXJldHVybiBmfX07Yi5wcm90b3R5cGUueGY9ZnVuY3Rpb24oKXtyZXR1cm4gYS5qLkViLkZhP2EubW9uaXRvci5yZXNvdXJjZU1vbml0b3IuYmFzZVBhZ2VSZXNvdXJjZUJ1ZmZlcjphLm1vbml0b3IucmVzb3VyY2VNb25pdG9yLnJlc291cmNlQnVmZmVyLmNvbmNhdChhLm1vbml0b3IucmVzb3VyY2VNb25pdG9yLmpiKCkpfTtyZXR1cm4gYn0oKTthLnZuPWI7YS5OPW5ldyBifSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubGI9ITE7dGhpcy5MYz01RTM7dGhpcy5wYj1hLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZSYmYS5jb25mLnVzZXJDb25mLm5hdkNvbXBsZXRlLm1heFJlc291cmNlUXVpZXRUaW1lP2EuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZS5tYXhSZXNvdXJjZVF1aWV0VGltZToKdGhpcy5MY31lLnByb3RvdHlwZS5TZz1mdW5jdGlvbigpe2EuUCgpO3RoaXMua2IoRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIsdGhpcy51Zy5iaW5kKHRoaXMpKTt0aGlzLmtiKEhUTUxFbGVtZW50LnByb3RvdHlwZSwiaW5uZXJIVE1MIix0aGlzLnVnLmJpbmQodGhpcykpO3RoaXMua2IoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsInNyYyIsdGhpcy5xYi5iaW5kKHRoaXMpKTt0aGlzLmtiKEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSwic3JjIix0aGlzLnFiLmJpbmQodGhpcykpO3RoaXMua2IoSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZSwiaHJlZiIsdGhpcy5xYi5iaW5kKHRoaXMpKTt0aGlzLk1rKCk7dGhpcy5lZCgiYXBwZW5kIik7dGhpcy5lZCgiYXBwZW5kQ2hpbGQiKTt0aGlzLmVkKCJpbnNlcnRCZWZvcmUiKTthLlEoKX07ZS5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oYil7YS5QKCk7dGhpcy5tZD10aGlzLmc9MDt0aGlzLmJhPWI7dGhpcy5wYT10aGlzLkI9CiExO3RoaXMuYmM9e307dGhpcy5SPXt9O3RoaXMucGQ9e307YS5RKCl9O2UucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGIpe3RoaXMuc2V0VXAoYik7dGhpcy5wYT0hMDthLmxvZygiTTg5Iil9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5CPSExO3RoaXMuZz0wO3RoaXMucGE9ITE7dGhpcy5SPXt9O3RoaXMucGQ9e307YS5sb2coIk05MCIpfTtlLnByb3RvdHlwZS5rYj1mdW5jdGlvbihhLGIsZil7dGhpcy5MbChhLGIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGIpLGYpfTtlLnByb3RvdHlwZS5MbD1mdW5jdGlvbihiLGgsZixuKXtpZihhLnV0aWxzLmlzRGVmaW5lZChmKSYmYS51dGlscy5pc0RlZmluZWQoZi5zZXQpJiYhYS51dGlscy5pc0RlZmluZWQoZi5JKSl7dmFyIG09dGhpcztPYmplY3QuZGVmaW5lUHJvcGVydHkoYixoLHtzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7dHJ5e2I9Zi5zZXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKGMpe3Rocm93IGM7Cn1maW5hbGx5e24uY2FsbChtLHRoaXMpfXJldHVybiBifX0pfX07ZS5wcm90b3R5cGUucWI9ZnVuY3Rpb24oYil7YS5QKCk7dGhpcy5MZChiKTthLlEoKX07ZS5wcm90b3R5cGUuTWs9ZnVuY3Rpb24oKXt2YXIgYj1FbGVtZW50LnByb3RvdHlwZSxoPXRoaXM7YS51dGlscy5pc0RlZmluZWQoYi5zZXRBdHRyaWJ1dGUpJiYoYi5zZXRBdHRyaWJ1dGU9YS5hb3AuYXJvdW5kKGIuc2V0QXR0cmlidXRlLG51bGwsZnVuY3Rpb24oKXt2YXIgYT1kKGFyZ3VtZW50cyk7InNyYyIhPWFbMF0mJiJocmVmIiE9YVswXXx8aC5xYi5jYWxsKGgsdGhpcyl9KSl9O2UucHJvdG90eXBlLmVkPWZ1bmN0aW9uKGIpe3ZhciBoPUVsZW1lbnQucHJvdG90eXBlLGY9dGhpczthLnV0aWxzLmlzRGVmaW5lZChoW2JdKSYmKGhbYl09YS5hb3AuYXJvdW5kKGhbYl0sbnVsbCxmdW5jdGlvbigpezA8YXJndW1lbnRzLmxlbmd0aCYmZi5xYi5jYWxsKGYsYXJndW1lbnRzWzBdKX0pKX07ZS5wcm90b3R5cGUudWc9ZnVuY3Rpb24oYil7YS5QKCk7CnRoaXMucGEmJmEudXRpbHMuaXNEZWZpbmVkKGIpJiZhLnV0aWxzLmlzRGVmaW5lZChiLmNoaWxkTm9kZXMpJiYodGhpcy5MZChiKSx0aGlzLmRoKGIuY2hpbGROb2RlcykpO2EuUSgpfTtlLnByb3RvdHlwZS5kaD1mdW5jdGlvbihiKXtmb3IodmFyIGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIGY9YltoXTsic2NyaXB0IiE9YS51dGlscy5qayhmKSYmdGhpcy5MZChmKTt0aGlzLmRoKGYuY2hpbGROb2Rlcyl9fTtlLnByb3RvdHlwZS5MZD1mdW5jdGlvbihiKXthLm1vbml0b3IuQW55U3BhTW9uaXRvci5jZCgpfHwodGhpcy5XayhiKT90aGlzLmZqKGIpOmEuY29uZi5lbmFibGVQcmltYXJ5TWV0cmljcyYmdGhpcy5naihiKSl9O2UucHJvdG90eXBlLmZqPWZ1bmN0aW9uKGIpe3ZhciBoPWEudXRpbHMuWGMoYik7YS51dGlscy5pc0RlZmluZWQoaCkmJihoPWgudmFsdWUsIWEudXRpbHMuaXNEZWZpbmVkKHRoaXMuYmNbaF0pJiYwPGgubGVuZ3RoJiYodGhpcy5nKyssdGhpcy5iY1toXT0hMCwKYS5sb2coIk05MSIsaCx0aGlzLmcpLHRoaXMuTWUoYikpKX07ZS5wcm90b3R5cGUuZ2o9ZnVuY3Rpb24oYil7dmFyIGg9YS51dGlscy5ub3coKTthLnV0aWxzLm5iKGIpJiYhYi5pc0FkcnVtVHJhY2tlZE5vZGU/KGg9YS51dGlscy5RYihiKSwhYS51dGlscy5pc0RlZmluZWQodGhpcy5iY1toXSkmJjA8aC5sZW5ndGgmJih0aGlzLmcrKyx0aGlzLmJjW2hdPSEwLHRoaXMuTWUoYiksYS5sb2coIk05MiIsaCx0aGlzLmcpKSk6YS51dGlscy5LZihiKSYmIWIuYWRydW1Ob2RlSWQ/KGEubG9nKCJNOTMiLGgpLGEuTi5JYihiLGgpKTphLnV0aWxzLlFmKGIpJiYoYS5OLlVhPU1hdGgubWF4KGEuTi5VYSxoKSl9O2UucHJvdG90eXBlLk1lPWZ1bmN0aW9uKGIpe3RoaXMubGJ8fCh0aGlzLks9dGhpcy5LLmJpbmQodGhpcyksdGhpcy5sPXRoaXMubC5iaW5kKHRoaXMpLHRoaXMuSy5JPSEwLHRoaXMubGI9dGhpcy5sLkk9ITApO3ZhciBoPWEudXRpbHMuWGMoYiksaD1hLnV0aWxzLmlzRGVmaW5lZChoKT8KaC52YWx1ZTpudWxsO2EudXRpbHMuU2YoYik/KGIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsdGhpcy5LKSxhLmxvZygiTTk0IixoKSk6KGIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdGhpcy5LKSxhLmxvZygiTTk1IixoLGIubm9kZU5hbWUpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix0aGlzLmwpfTtlLnByb3RvdHlwZS5ibD1mdW5jdGlvbihiKXtyZXR1cm4iTElOSyI9PWIubm9kZU5hbWU/KGI9Yi5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgicmVsIiksYS51dGlscy5pc0RlZmluZWQoYik/MDw9Yi52YWx1ZS5pbmRleE9mKCJzdHlsZXNoZWV0Iik6ITApOiEwfTtlLnByb3RvdHlwZS5Xaz1mdW5jdGlvbihhKXtyZXR1cm4vXihTQ1JJUFR8SU1HfExJTkspJC8udGVzdChhLm5vZGVOYW1lKSYmdGhpcy5ibChhKX07ZS5wcm90b3R5cGUuSz1mdW5jdGlvbihjKXthLlAoKTt2YXIgaD10aGlzLnBmKGMudGFyZ2V0KTshYS51dGlscy5pc0RlZmluZWQodGhpcy5SW2hdKSYmCjA8dGhpcy5nJiYodGhpcy5nLS0sdGhpcy5SW2hdPSEwLGEubG9nKCJNOTYiLGgsdGhpcy5nKSk7dGhpcy5iYT1hLnV0aWxzLm5vdygpO3RoaXMubWQrPTE7MT09dGhpcy5tZCYmKGIubi5XZygpLHRoaXMuQj0hMCk7dGhpcy50YihjLnRhcmdldCk7aD1jLnRhcmdldDthLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJmEudXRpbHMubmIoaCkmJiFoLmlzQWRydW1UcmFja2VkTm9kZSYmKGEubG9nKCJNOTciKSxhLk4uSyhjKSk7YS5RKCl9O2UucHJvdG90eXBlLmw9ZnVuY3Rpb24oYil7YS5QKCk7dmFyIGg9dGhpcy5wZihiLnRhcmdldCksZj1iLnRhcmdldDthLnV0aWxzLmlzRGVmaW5lZCh0aGlzLnBkW2hdKXx8KHRoaXMuZy0tLHRoaXMucGRbaF09ITAsYS5sb2coIk05OCIsaCx0aGlzLmcpKTthLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJmEudXRpbHMubmIoZikmJiFmLmlzQWRydW1UcmFja2VkTm9kZSYmKGEubG9nKCJNOTkiKSxhLk4ubChiKSk7dGhpcy50YihiLnRhcmdldCk7CmEuUSgpfTtlLnByb3RvdHlwZS5jaj1mdW5jdGlvbigpe3JldHVybiAwPHRoaXMuZyYmdGhpcy5CfTtlLnByb3RvdHlwZS5wZj1mdW5jdGlvbihhKXt2YXIgYj0iIjthIGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQ/Yj1hLnNyYzphIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9iPWEuc3JjOmEgaW5zdGFuY2VvZiBIVE1MTGlua0VsZW1lbnQmJihiPWEuaHJlZik7cmV0dXJuIGJ9O2UucHJvdG90eXBlLmJkPWZ1bmN0aW9uKGIpe3ZhciBoPXRoaXMuZyxmPTA7YS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiYoaCs9YS5OLmcsZj1hLk4uYmEpO2EubG9nKCJNMTAwIixoKTtyZXR1cm4gMD09aCYmdGhpcy5CJiYoYS5sb2coIk0xMDEiKSxoPU1hdGgubWF4KHRoaXMuYmEsZiksYi1oPj10aGlzLnBiKT8odGhpcy5yZXNldCgpLGgpOi0xfTtlLnByb3RvdHlwZS50Yj1mdW5jdGlvbihhKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHRoaXMuSyk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsCnRoaXMubCl9O3JldHVybiBlfSgpO2IuTGg9bH0pKGEuanx8KGEuaj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuTGM9M0UzO3RoaXMucGI9YS5jb25mLnVzZXJDb25mJiZhLmNvbmYudXNlckNvbmYubmF2Q29tcGxldGUmJmEuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZS5tYXhYaHJRdWlldFRpbWU/YS5jb25mLnVzZXJDb25mLm5hdkNvbXBsZXRlLm1heFhoclF1aWV0VGltZTp0aGlzLkxjfWUucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKGEpe3RoaXMubmQ9dGhpcy5nPTA7dGhpcy5EYT1hO3RoaXMucGE9dGhpcy5CPSExO3RoaXMudGg9e307dGhpcy5WZD17fX07ZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oYSl7dGhpcy5zZXRVcChhKTt0aGlzLnBhPSEwfTtlLnByb3RvdHlwZS5CZT1mdW5jdGlvbihiKXthLm1vbml0b3IuQW55U3BhTW9uaXRvci5jZCgpfHxhLnV0aWxzLmlzRGVmaW5lZCh0aGlzLnRoW2JdKXx8CiF0aGlzLnBhfHwodGhpcy5nKz0xLHRoaXMudGhbYl09ITAsYS5sb2coIk0xMDIiLGIsdGhpcy5nKSl9O2UucHJvdG90eXBlLlhpPWZ1bmN0aW9uKGMpeyFhLm1vbml0b3IuQW55U3BhTW9uaXRvci5jZCgpJiZ0aGlzLnBhJiYwPHRoaXMuZyYmKGEudXRpbHMuaXNEZWZpbmVkKHRoaXMuVmQpJiYhYS51dGlscy5pc0RlZmluZWQodGhpcy5WZFtjXSkmJih0aGlzLkRhPWEudXRpbHMubm93KCksdGhpcy5nLT0xLHRoaXMuVmRbY109ITAsYS5sb2coIk0xMDMiLGMsdGhpcy5nKSksdGhpcy5uZCs9MSwxPT10aGlzLm5kJiYoYi5uLldnKCksdGhpcy5CPSEwKSl9O2UucHJvdG90eXBlLmJkPWZ1bmN0aW9uKGEpe3JldHVybiAwPT10aGlzLmcmJnRoaXMuQiYmYS10aGlzLkRhPj10aGlzLnBiPyh0aGlzLnJlc2V0KCksdGhpcy5EYSk6LTF9O2UucHJvdG90eXBlLmRqPWZ1bmN0aW9uKCl7cmV0dXJuIDA8dGhpcy5nJiZ0aGlzLkJ9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5CPQohMTt0aGlzLmc9MDt0aGlzLnBhPSExfTtyZXR1cm4gZX0oKTtiLkJoPWx9KShhLmp8fChhLmo9e30pKX0pKGt8fChrPXt9KSk7dmFyIGQ9ay51dGlscy53YSxnPWsudXRpbHMuaXNGdW5jdGlvbjsoZnVuY3Rpb24oYSl7dmFyIGI9YS51dGlscy5nZW5lcmF0ZUdVSUQsbDsoZnVuY3Rpb24oYSl7YVthLlVTRVI9MF09IlVTRVIiO2FbYS5USU1FUj0xXT0iVElNRVIiO2FbYS5YSFI9Ml09IlhIUiI7YVthLlJFU09VUkNFPTNdPSJSRVNPVVJDRSI7YVthLlBST01JU0U9NF09IlBST01JU0UiO2FbYS5GRVRDSD01XT0iRkVUQ0giO2FbYS5PVEhFUj02XT0iT1RIRVIifSkobD1hLkNhdXNlVHlwZXx8KGEuQ2F1c2VUeXBlPXt9KSk7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oYyxmLG4pe3RoaXMuc3RhcnQ9YS51dGlscy5ub3coKTt0aGlzLnBhcmVudD1jO3RoaXMub2M9Zjt0aGlzLmd1aWQ9YigpO3RoaXMudHlwZT1ufX0oKTthLkRiPWU7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7fQpiLk9uPWZ1bmN0aW9uKCl7cmV0dXJuIGIuZXZlbnRzfTtiLkxmPWZ1bmN0aW9uKGIpe3JldHVybiBhLnV0aWxzLmlzRGVmaW5lZChiKSYmYS51dGlscy5pc0Z1bmN0aW9uKGIuaGFuZGxlRXZlbnQpfTtiLnhnPWZ1bmN0aW9uKGEsYyxtLHEpe3ZhciBlO2IucWEoYyk7dHJ5e2IuTGYoYSk/ZT1hLmhhbmRsZUV2ZW50LmFwcGx5KG0scSk6ZyhhKSYmKGU9YS5hcHBseShtLHEpKX1jYXRjaChwKXt0aHJvdyBwO31maW5hbGx5e2IuTCgpfXJldHVybiBlfTtiLnVjPWZ1bmN0aW9uKGMsbixtLHEpe2lmKCFhLnV0aWxzLmlzRGVmaW5lZChuKXx8bi5JKXJldHVybiBuO3ZhciBlO3F8fChlPWIuaWEoKSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBxPWIuT2EoYyxhLGUsbSk7cmV0dXJuIGIueGcobixxLHRoaXMsYXJndW1lbnRzKX19O2IuT2E9ZnVuY3Rpb24oYixjLG0saCl7bT9hLmxvZygiTTEwNCIsYixtLm9jLmFjdGlvbik6YS5sb2coIk0xMDUiLGIpO2EudXRpbHMuaXNEZWZpbmVkKGMpPyhjPQphLmNlLnVsKGMudGFyZ2V0fHxjLnNyY0VsZW1lbnQpLGMuYWN0aW9uPWIpOmM9bmV3IGEuS2EoYik7cmV0dXJuIG5ldyBlKG0sYyxoKX07Yi5mbj1mdW5jdGlvbihjLG4sbSl7aWYoIWEudXRpbHMuaXNEZWZpbmVkKG4pfHxuLkkpcmV0dXJuIG47dmFyIHE9Yi5PYShjLHZvaWQgMCxiLmlhKCksbSk7cmV0dXJuIGZ1bmN0aW9uKCl7bmV3IGEuS2EoYyk7cmV0dXJuIGIueGcobixxLHRoaXMsYXJndW1lbnRzKX19O2IuQm89ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtiLkdjKGEpO3JldHVybiBtfX07Yi5pYT1mdW5jdGlvbigpe3JldHVybiAwPGIuZXZlbnRzLmxlbmd0aD9iLmV2ZW50c1tiLmV2ZW50cy5sZW5ndGgtMV06bnVsbH07Yi5xYT1mdW5jdGlvbihhKXtiLmV2ZW50cy5wdXNoKGEpfTtiLkw9ZnVuY3Rpb24oKXtyZXR1cm4gYi5ldmVudHMucG9wKCl9O2IuSGM9ZnVuY3Rpb24oYixjKXt2YXIgbT1iLGg9MSxlPSIiOwppZighYS51dGlscy5pc0RlZmluZWQobSkpcmV0dXJuIG51bGw7Zm9yKDthLnV0aWxzLmlzRGVmaW5lZChtLnBhcmVudCk7KWU9IiAtPiAiK20ub2MuYWN0aW9uK2UsbT1tLnBhcmVudCxoKz0xO3ZhciBwPWEudXRpbHMubm93KCk7YS51dGlscy5pc0RlZmluZWQobS5vYykmJihlPW0ub2MuYWN0aW9uK2UrIiAtPiAiK2MpO2EubG9nKCJNMTA2IixlKTthLmxvZygiTTEwNyIsbS5zdGFydCxoKTthLmxvZygiTTEwOCIscC1tLnN0YXJ0KTtyZXR1cm4gbX07Yi5HYz1mdW5jdGlvbihhKXtyZXR1cm4gYi5IYyhiLmlhKCksYSl9O2Iudms9ZnVuY3Rpb24oKXt2YXIgYz1iLkdjKHZvaWQgMCk7aWYoYS51dGlscy5pc0RlZmluZWQoYykmJmEudXRpbHMuaXNEZWZpbmVkKGMudHlwZSkpcmV0dXJuW2wuVElNRVIsbC5VU0VSXS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBjLnR5cGU9PWF9KT9jOnZvaWQgMH07Yi5Vaz1mdW5jdGlvbihhKXtpZihnKGEpKXJldHVybiBhO3ZhciBiPSIiK2E7cmV0dXJuIGZ1bmN0aW9uKCl7ZXZhbChiKX19OwpiLnNldFVwPWZ1bmN0aW9uKCl7Yi5ldmVudHM9W107dmFyIGM9YS51dGlscy5yZWZzO1t7bGc6Yy5zZXRUaW1lb3V0LGtmOiJzZXRUaW1lb3V0In0se2xnOmMuc2V0SW50ZXJ2YWwsa2Y6InNldEludGVydmFsIn1dLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9YS5sZyxmPWEua2Y7d2luZG93W2ZdPWZ1bmN0aW9uKGEpe3ZhciBuPWQoYXJndW1lbnRzKTtpZihhKXt2YXIgZT1iLmtsKGYsYXJndW1lbnRzWzFdKT9sLk9USEVSOmwuVElNRVIsZT1iLmZuKGYsYi5VayhhKSxlKTtuWzBdPWU7cmV0dXJuIGMuYXBwbHkod2luZG93LG4pfWMuYXBwbHkod2luZG93LG4pfX0pfTtiLmtsPWZ1bmN0aW9uKGIsYyl7cmV0dXJuInNldFRpbWVvdXQiPT1iJiYoYS51dGlscy5pc0RlZmluZWQoYykmJjA9PWN8fCFhLnV0aWxzLmlzRGVmaW5lZChjKSl9O3JldHVybiBifSgpO2MuZXZlbnRzPVtdO2EuYz1jfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS51dGlscy5MaixsPXdpbmRvdy5hZGRFdmVudExpc3RlbmVyLAplPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5FdmVudFRhcmdldCk/d2luZG93LkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxjPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5FdmVudFRhcmdldCk/d2luZG93LkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxoPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsYixjLGYsaCxlLGwsdyl7dGhpcy5hY3Rpb249YXx8IiI7dGhpcy5UaD1ifHwiIjt0aGlzLmNsYXNzTmFtZT1jfHwiIjt0aGlzLnRhZ05hbWU9Znx8IiI7dGhpcy5uYW1lPWh8fCIiO3RoaXMudGV4dD1lfHwiIjt0aGlzLnNyYz1sO3RoaXMuaXRlbT13fX0oKTthLkthPWg7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7fWYuc2V0VXA9ZnVuY3Rpb24oKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShmLk1jLFtdKTtmLmNuKCk7YS51dGlscy5pc0RlZmluZWQod2luZG93LkV2ZW50VGFyZ2V0KT8KKGYuZG4oKSxmLmVuKCkpOmYuV2koKTtmLklmKCJvbmxvYWQiKTtmLklmKCJvbmVycm9yIil9O2YubG89ZnVuY3Rpb24oKXtyZXR1cm5bXX07Zi5iaz1mdW5jdGlvbihiLGMpe3ZhciBoPSIiO2lmKGEudXRpbHMuaXNEZWZpbmVkKGIpKWlmKCJzdHJpbmciPT09dHlwZW9mIGIudGV4dENvbnRlbnQpaD1hLnV0aWxzLmlzRGVmaW5lZChTdHJpbmcucHJvdG90eXBlLnRyaW0pP2IudGV4dENvbnRlbnQudHJpbSgpOmIudGV4dENvbnRlbnQsaD1hLnV0aWxzLmlzRGVmaW5lZChjKT9oLnN1YnN0cmluZygwLGMpOmg7ZWxzZSBmb3IoYj1iLmZpcnN0Q2hpbGQ7YS51dGlscy5pc0RlZmluZWQoYikmJiEoaCs9Zi5iayhiLGMpLGEudXRpbHMuaXNEZWZpbmVkKGMpJiZoLmxlbmd0aD49Yyk7Yj1iLm5leHRTaWJsaW5nKTtyZXR1cm4gaH07Zi51bD1mdW5jdGlvbihjKXt2YXIgZj1iKGMuaWQpfHwiIixuPWIoYy5jbGFzc05hbWUpfHwiIixlPSIiLGw9bmV3IGg7YyBpbnN0YW5jZW9mIEhUTUxIdG1sRWxlbWVudD8KKGU9Imh0bWwiLGwudGV4dD0iI2h0bWwiKTpjPT09ZG9jdW1lbnQ/KGU9ImRvY3VtZW50IixsLnRleHQ9IiNkb2N1bWVudCIpOmM9PT13aW5kb3c/KGU9IndpbmRvdyIsbC50ZXh0PSIjd2luZG93Iik6YyBpbnN0YW5jZW9mIFhNTEh0dHBSZXF1ZXN0PyhlPSJ4aHIiLGwuc3JjPWEudXRpbHMuaXNPYmplY3QoYy5fYWRydW1BamF4VCk/ZW5jb2RlVVJJKGMuX2FkcnVtQWpheFQudXJsKCkpOiIiKTpjIGluc3RhbmNlb2YgV2ViU29ja2V0PyhlPSJ3ZWJzb2NrZXQiLGwuc3JjPWVuY29kZVVSSShjLnVybCkpOmMgaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudD8oZT0ic2NyaXB0IixsLnNyYz1lbmNvZGVVUkkoYy5zcmMpKTpjIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQ/KGU9ImEiLGwudGV4dD1iKGMudGV4dCl8fCIiKTpjIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQ/KGU9ImJ1dHRvbiIsbC5uYW1lPWIoYy5uYW1lKSk6YyBpbnN0YW5jZW9mIEhUTUxEaXZFbGVtZW50PwplPSJkaXYiOmMgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50PyhlPSJpbWciLGwuc3JjPWVuY29kZVVSSShjLnNyYyksbC50ZXh0PWIoYy50aXRsZSl8fCIiKTpjIGluc3RhbmNlb2YgSFRNTExJRWxlbWVudD8oZT0ibGkiLGwuaXRlbT1jLnZhbHVlKTpjIGluc3RhbmNlb2YgSFRNTFVMaXN0RWxlbWVudD9lPSJ1bCI6YyBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudD9lPSJmb3JtIjpjIGluc3RhbmNlb2YgSFRNTEZyYW1lRWxlbWVudD8oZT0iZnJhbWUiLGwuc3JjPWVuY29kZVVSSShjLnNyYykpOmMgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50PyhlPWIoYy50eXBlKXx8ImlucHV0IixsLnRleHQ9YihjLnZhbHVlKSxsLm5hbWU9YihjLm5hbWUpKTpjIGluc3RhbmNlb2YgSFRNTFRhYmxlRWxlbWVudD9lPSJ0YWJsZSI6YyBpbnN0YW5jZW9mIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50P2U9InRjYXAiOmMgaW5zdGFuY2VvZiBIVE1MVGFibGVDZWxsRWxlbWVudD9lPSJ0ZCI6YyBpbnN0YW5jZW9mCkhUTUxUYWJsZVJvd0VsZW1lbnQ/ZT0idHIiOihlPWEudXRpbHMuaXNEZWZpbmVkKGMudGFnTmFtZSk/YihjLnRhZ05hbWUpOiIiLGEubG9nKCJNMTA5IixlKSk7bC5UaD1mO2wuY2xhc3NOYW1lPW47bC50YWdOYW1lPWU7YS51dGlscy5pc1N0cmluZyhsLnRleHQpJiYobC50ZXh0PWEudXRpbHMuaXNEZWZpbmVkKFN0cmluZy5wcm90b3R5cGUudHJpbSk/bC50ZXh0LnRyaW0oKTpsLnRleHQsbC50ZXh0PWwudGV4dC5zdWJzdHJpbmcoMCwzMCkpO3JldHVybiBsfTtmLmNuPWZ1bmN0aW9uKCl7YS51dGlscy5mb3JFYWNoKGYuTWMsZnVuY3Rpb24oYil7bChiLGZ1bmN0aW9uKGMpe2M9Yy50YXJnZXR8fGMuc3JjRWxlbWVudDsoYz09PWRvY3VtZW50fHxjPT09d2luZG93fHxjIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3R8fGMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkmJm51bGwhPWMmJmNbIm9uIitiXSYmKGNbIm9uIitiXT1hLmMudWMoYixjWyJvbiIrYl0sYS5DYXVzZVR5cGUuVVNFUiwKITApLGNbIm9uIitiXS5JPSEwKX0sITApfSl9O2YuV2k9ZnVuY3Rpb24oKXthLnV0aWxzLmZvckVhY2goZi5NYyxmdW5jdGlvbihiKXtsKGIsZnVuY3Rpb24oYyl7Yz1hLmMuT2EoYixjLG51bGwsYS5DYXVzZVR5cGUuVVNFUik7YS5jLnFhKGMpfSwhMCk7bChiLGZ1bmN0aW9uKCl7YS5jLkwoKX0sITEpfSl9O2YuaGg9ZnVuY3Rpb24oYil7dmFyIGM9ITE7YS51dGlscy5pc0Jvb2xlYW4oYik/Yz1iOmEudXRpbHMuaXNPYmplY3QoYikmJmEudXRpbHMuaXNEZWZpbmVkKGIuY2FwdHVyZSkmJihjPSEhYi5jYXB0dXJlKTtyZXR1cm4gY307Zi5NZz1mdW5jdGlvbihiLGMsZixoKXtpZighYS51dGlscy5pc0RlZmluZWQoYi5ldmVudExpc3RlbmVyTWFwKXx8IWEudXRpbHMuaXNEZWZpbmVkKGIuZXZlbnRMaXN0ZW5lck1hcFtjXSl8fCFhLnV0aWxzLmlzRGVmaW5lZChmKSlyZXR1cm4tMTtiPWIuZXZlbnRMaXN0ZW5lck1hcFtjXTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKWlmKGJbY11bMF09PQpmJiZiW2NdWzFdPT1oKXJldHVybiBjO3JldHVybi0xfTtmLkdmPWZ1bmN0aW9uKGIsYyxmLGgsbil7YS51dGlscy5pc0RlZmluZWQoYikmJmEudXRpbHMuaXNEZWZpbmVkKG4pJiYoYS51dGlscy5pc0RlZmluZWQoYi5ldmVudExpc3RlbmVyTWFwKXx8KGIuZXZlbnRMaXN0ZW5lck1hcD17fSksYS51dGlscy5pc0RlZmluZWQoYi5ldmVudExpc3RlbmVyTWFwW2NdKXx8KGIuZXZlbnRMaXN0ZW5lck1hcFtjXT1bXSksYi5ldmVudExpc3RlbmVyTWFwW2NdLnB1c2goW2YsaCxuXSkpfTtmLmJtPWZ1bmN0aW9uKGEsYixjKXtpZigtMTxjKXt2YXIgZj1hLmV2ZW50TGlzdGVuZXJNYXBbYl07ZGVsZXRlIGZbY107Zi5zcGxpY2UoYywxKTswPT1mLmxlbmd0aCYmZGVsZXRlIGEuZXZlbnRMaXN0ZW5lck1hcFtiXX19O2YuZG49ZnVuY3Rpb24oKXtFdmVudFRhcmdldC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihiLGMsaCl7aWYoYS51dGlscy5pc0RlZmluZWQoYykmJmMuSXx8CiFhLmMuTGYoYykmJiFnKGMpKXJldHVybiBlLmNhbGwodGhpcyxiLGMsaCk7dmFyIGw9Zi5oaChoKSxyPWEudXRpbHMuaXNEZWZpbmVkKHRoaXMpP3RoaXM6d2luZG93O2lmKCEoLTE8Zi5NZyhyLGIsYyxsKSkpe3ZhciBzPWM7c3dpdGNoKGIpe2Nhc2UgImNsaWNrIjpjYXNlICJkYmxjbGljayI6Y2FzZSAiYXV4Y2xpY2siOmNhc2UgIm1vdXNlZG93biI6Y2FzZSAibW91c2V1cCI6Y2FzZSAiZHJvcCI6Y2FzZSAia2V5dXAiOmNhc2UgImtleWRvd24iOmNhc2UgImtleXByZXNzIjpjYXNlICJjb250ZXh0bWVudSI6Y2FzZSAicGFnZUNoYW5nZWQiOmNhc2UgImNsb3NlIjpzPWEuYy51YyhiLGMsYS5DYXVzZVR5cGUuVVNFUiwhMCk7Zi5HZihyLGIsYyxsLHMpO2JyZWFrO2Nhc2UgImxvYWQiOmNhc2UgImVycm9yIjpzPWEuYy51YyhiLGMsYS5DYXVzZVR5cGUuVVNFUiwhMSksZi5HZihyLGIsYyxsLHMpfWUuY2FsbChyLGIscyxoKX19fTtmLmVuPWZ1bmN0aW9uKCl7RXZlbnRUYXJnZXQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9CmZ1bmN0aW9uKGIsaCxlKXtpZihhLnV0aWxzLmlzRGVmaW5lZChoKSYmaC5JKXJldHVybiBjLmNhbGwodGhpcyxiLGgsZSk7dmFyIGw9Zi5oaChlKSxyPWEudXRpbHMuaXNEZWZpbmVkKHRoaXMpP3RoaXM6d2luZG93LGw9Zi5NZyhyLGIsaCxsKTswPD1sPyhjLmNhbGwocixiLHRoaXMuZXZlbnRMaXN0ZW5lck1hcFtiXVtsXVsyXSxlKSxmLmJtKHIsYixsKSk6Yy5jYWxsKHIsYixoLGUpfX07Zi5JZj1mdW5jdGlvbihiKXt2YXIgYz1IVE1MRWxlbWVudC5wcm90b3R5cGUsZj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsYik7YS51dGlscy5pc0RlZmluZWQoZikmJmEudXRpbHMuaXNEZWZpbmVkKGYuc2V0KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsYix7c2V0OmZ1bmN0aW9uKGMpe3ZhciBoPWM7YS51dGlscy5pc0RlZmluZWQoYykmJihoPWEuYy51YyhiLGMsYS5DYXVzZVR5cGUuUkVTT1VSQ0UsITEpKTt2YXIgbjt0cnl7bj1mLnNldC5jYWxsKHRoaXMsaCl9Y2F0Y2goZSl7dGhyb3cgZTsKfXJldHVybiBufX0pfTtyZXR1cm4gZn0oKTtmLk1jPSJjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGxvYWQgdW5sb2FkIi5zcGxpdCgiICIpO2EuY2U9Zn0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLm1hcCxlPWEudXRpbHMuYm4sYz1hLnV0aWxzLmlzRGVmaW5lZCxoPWEudXRpbHMuaXNTdHJpbmcsZj1hLnV0aWxzLkNqLG49YS51dGlscy5pc0Z1bmN0aW9uO2IuZGc9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9ITEsZj0wO2Y8Yi5sZW5ndGg7ZisrKXt2YXIgaD1iW2ZdO2lmKGgmJmgudGVzdChhKSl7Yz0hMDticmVha319cmV0dXJuIGN9O2IuVmI9ZnVuY3Rpb24oYSxmLGgpe3ZhciBuPSExO2lmKGYmJmgpZm9yKHZhciBlPTA7ZTxoLmxlbmd0aDtlKyspe3ZhciBsPWhbZV07aWYoIShjKGwubWV0aG9kKSYmYSE9PWwubWV0aG9kfHxjKGwudXJscykmJgohYi5kZyhmLGwudXJscykpKXtuPSEwO2JyZWFrfX1yZXR1cm4gbn07Yi56Yj1mdW5jdGlvbihhLGIpe3JldHVybiBmKGwoZShiKSxhKSl9O2IucGM9ZnVuY3Rpb24oYSl7dmFyIGM9Yi5mayhhKTthPWIucWYoYSk7cmV0dXJuIGN8fGF9O2IuZms9ZnVuY3Rpb24oYil7dmFyIGY9Yi5tZXRob2Q7aWYoYyhmKSl7aWYoaChmKSlyZXR1cm4gYjthLmVycm9yKCJNMTEwIil9fTtiLldtPWZ1bmN0aW9uKGEpe3ZhciBjPWIucWYoYSk7cmV0dXJuIGIuV2woYSkmJmN9O2IuV2w9ZnVuY3Rpb24oYil7aWYobihiLmdldEZyb21Cb2R5KSlyZXR1cm4gYjthLmVycm9yKCJNMTExIil9O2Iud2o9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPVtdLGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIG49YltmXS5wYXR0ZXJuO2lmKGgobikpdHJ5e2MucHVzaChuZXcgUmVnRXhwKG4pKX1jYXRjaChlKXthLmV4Y2VwdGlvbihlLCJNMTEyIil9ZWxzZSBhLmVycm9yKCJNMTEzIil9cmV0dXJuIGN9O2IucWY9ZnVuY3Rpb24oYSl7dmFyIGM9CmEudXJscztpZihjJiYwPGMubGVuZ3RoJiYoYS51cmxzPWIud2ooYyksMDxhLnVybHMubGVuZ3RoKSlyZXR1cm4gYX19KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7YT1hLmV2ZW50c3x8KGEuZXZlbnRzPXt9KTthPWEuYnx8KGEuYj17fSk7YS5uYXZpZ2F0aW9uU3RhcnQ9Im5hdmlnYXRpb25TdGFydCI7YS5kb21haW5Mb29rdXBTdGFydD0iZG9tYWluTG9va3VwU3RhcnQiO2EuZG9tYWluTG9va3VwRW5kPSJkb21haW5Mb29rdXBFbmQiO2EuY29ubmVjdFN0YXJ0PSJjb25uZWN0U3RhcnQiO2Euc2VjdXJlQ29ubmVjdGlvblN0YXJ0PSJzZWN1cmVDb25uZWN0aW9uU3RhcnQiO2EuY29ubmVjdEVuZD0iY29ubmVjdEVuZCI7YS5yZXF1ZXN0U3RhcnQ9InJlcXVlc3RTdGFydCI7YS5yZXNwb25zZVN0YXJ0PSJyZXNwb25zZVN0YXJ0IjthLnJlc3BvbnNlRW5kPSJyZXNwb25zZUVuZCI7YS5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydD0iZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQiOwphLmxvYWRFdmVudEVuZD0ibG9hZEV2ZW50RW5kIjthLk5nPSJzZW5kVGltZSI7YS5oZj0iZmlyc3RCeXRlVGltZSI7YS5IZz0icmVzcEF2YWlsVGltZSI7YS5JZz0icmVzcFByb2NUaW1lIjthLlJkPSJ2aWV3Q2hhbmdlU3RhcnQiO2Euamg9InZpZXdDaGFuZ2VFbmQiO2EuU2Q9InZpZXdET01Mb2FkZWQiO2Euc2g9InhoclJlcXVlc3RzQ29tcGxldGVkIjthLnpvPSJ2aWV3RnJhZ21lbnRzTG9hZGVkIjthLkFvPSJ2aWV3UmVzb3VyY2VzTG9hZGVkIjthLlRkPSJ2aXJ0dWFsUGFnZVN0YXJ0IjthLlptPSJ2aXJ0dWFsUGFnZUVuZCJ9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXt2YXIgYj1hLmV2ZW50c3x8KGEuZXZlbnRzPXt9KTtiLm1ldHJpY1NwZWM9e307Yi5tZXRyaWNTcGVjW2EuRXZlbnRUeXBlLlBhZ2VWaWV3XT17S2o6e3N0YXJ0OmIuYi5uYXZpZ2F0aW9uU3RhcnQsZW5kOmIuYi5sb2FkRXZlbnRFbmQsbmFtZToiUExUIn0sU2o6e3N0YXJ0OmIuYi5uYXZpZ2F0aW9uU3RhcnQsCmVuZDpiLmIucmVzcG9uc2VTdGFydCxuYW1lOiJGQlQifSxybzp7c3RhcnQ6Yi5iLm5hdmlnYXRpb25TdGFydCxlbmQ6Yi5iLnJlcXVlc3RTdGFydCxuYW1lOiJTQ1QifSxzbzp7c3RhcnQ6Yi5iLnNlY3VyZUNvbm5lY3Rpb25TdGFydCxlbmQ6Yi5iLmNvbm5lY3RFbmQsbmFtZToiU0hUIn0sTG46e3N0YXJ0OmIuYi5kb21haW5Mb29rdXBTdGFydCxlbmQ6Yi5iLmRvbWFpbkxvb2t1cEVuZCxuYW1lOiJETFQifSx3bzp7c3RhcnQ6Yi5iLmNvbm5lY3RTdGFydCxlbmQ6Yi5iLmNvbm5lY3RFbmQsbmFtZToiVENQIn0sb286e3N0YXJ0OmIuYi5yZXF1ZXN0U3RhcnQsZW5kOmIuYi5yZXNwb25zZVN0YXJ0LG5hbWU6IlJBVCJ9LE5uOntzdGFydDpiLmIucmVzcG9uc2VTdGFydCxlbmQ6Yi5iLmxvYWRFdmVudEVuZCxuYW1lOiJGRVQifSxSbjp7c3RhcnQ6Yi5iLnJlc3BvbnNlU3RhcnQsZW5kOmIuYi5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCxuYW1lOiJEUlQifSxRbjp7c3RhcnQ6Yi5iLnJlc3BvbnNlU3RhcnQsCmVuZDpiLmIucmVzcG9uc2VFbmQsbmFtZToiRERUIn0sSm46e3N0YXJ0OmIuYi5yZXNwb25zZUVuZCxlbmQ6Yi5iLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0LG5hbWU6IkRQVCJ9LG5vOntzdGFydDpiLmIuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQsZW5kOmIuYi5sb2FkRXZlbnRFbmQsbmFtZToiUFJUIn0sS246e3N0YXJ0OmIuYi5uYXZpZ2F0aW9uU3RhcnQsZW5kOmIuYi5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCxuYW1lOiJET00ifX07Yi5tZXRyaWNTcGVjW2EuRXZlbnRUeXBlLkFqYXhdPXtTajp7c3RhcnQ6Yi5iLk5nLGVuZDpiLmIuaGYsbmFtZToiRkJUIn0seG46e3N0YXJ0OmIuYi5oZixlbmQ6Yi5iLkhnLG5hbWU6IkREVCJ9LHduOntzdGFydDpiLmIuSGcsZW5kOmIuYi5JZyxuYW1lOiJEUFQifSxLajp7c3RhcnQ6Yi5iLk5nLGVuZDpiLmIuSWcsbmFtZToiUExUIn19O2IubWV0cmljU3BlY1thLkV2ZW50VHlwZS5WUGFnZVZpZXddPXtlbzp7c3RhcnQ6Yi5iLlRkLAplbmQ6Yi5iLlptLG5hbWU6IlBMVCJ9LEZuOntzdGFydDpiLmIuUmQsZW5kOmIuYi5qaCxuYW1lOiJERFQifSxhbzp7c3RhcnQ6Yi5iLlJkLGVuZDpiLmIuU2QsbmFtZToiRFJUIn0sb246e3N0YXJ0OmIuYi5qaCxlbmQ6Yi5iLlNkLG5hbWU6IkRQVCJ9LHBuOntzdGFydDpiLmIuUmQsZW5kOmIuYi5TZCxuYW1lOiJET00ifSxtbzp7c3RhcnQ6InZpZXdDaGFuZ2VFbmQiLGVuZDoieGhyUmVxdWVzdHNDb21wbGV0ZWQiLG5hbWU6bnVsbH0sYm86e3N0YXJ0OiJ2aWV3Q2hhbmdlRW5kIixlbmQ6InZpZXdQYXJ0aWFsc0xvYWRlZCIsbmFtZTpudWxsfSwkbjp7c3RhcnQ6InZpZXdQYXJ0aWFsc0xvYWRlZCIsZW5kOiJ2aWV3RnJhZ21lbnRzTG9hZGVkIixuYW1lOm51bGx9LGNvOntzdGFydDoidmlld1BhcnRpYWxzTG9hZGVkIixlbmQ6InZpZXdSZXNvdXJjZXNMb2FkZWQiLG5hbWU6bnVsbH19O2IubWV0cmljU3BlY1thLkV2ZW50VHlwZS5OR19WSVJUVUFMX1BBR0VdPWIubWV0cmljU3BlY1thLkV2ZW50VHlwZS5WUGFnZVZpZXddfSkoa3x8CihrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1mdW5jdGlvbihlKXtmdW5jdGlvbiBjKGgpe2g9ZS5jYWxsKHRoaXMsaCl8fHRoaXM7aC5jb25zdHJ1Y3RvciE9YyYmaC5jb25zdHJ1Y3RvciE9Yi5BZHJ1bUFqYXgmJmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLkFqYXgiLFtdKTtyZXR1cm4gaH12KGMsZSk7Yy5wcm90b3R5cGUudHlwZT1mdW5jdGlvbigpe3JldHVybiBhLkV2ZW50VHlwZS5BamF4fTtyZXR1cm4gY30oYi5FdmVudFRyYWNrZXIpO2IuQWpheD1sO2IuTWEoYi5UW2EuRXZlbnRUeXBlLkFqYXhdLGwucHJvdG90eXBlKTtiLkllKGIubWV0cmljU3BlY1thLkV2ZW50VHlwZS5BamF4XSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhhKXtyZXR1cm4gYi5jYWxsKHRoaXMsYSl8fAp0aGlzfXYoYyxiKTtjLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnRUeXBlLkFqYXh9O3JldHVybiBjfShiLkFqYXgpO2IuQWRydW1BamF4PWw7Yi5NYShiLlRbYS5FdmVudFR5cGUuQURSVU1fWEhSXSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS51dGlscy5pc0RlZmluZWQsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoKXt9Yy53ZD1mdW5jdGlvbihiLGYpe2EuY29uZi5zcGEyP2MudWooYixmKTpjLkxnKGIsZil9O2MudWo9ZnVuY3Rpb24oaCxmKXt2YXIgbj1hLmMuSGMoaC5oKTtpZihsKGEubW9uaXRvci5BbnlTcGFNb25pdG9yLnZwKSYmIWEubW9uaXRvci5BbnlTcGFNb25pdG9yLkJhJiZhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cC5lYj09bil7Zi5wYXJlbnQoYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnApO2lmKCsrYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnAuSmU+CmIudWEubWF4UGVyUGFnZVZpZXcpcmV0dXJuO2MuTGcoaCxmKX1lbHNlIGwoYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnApJiYhYS5tb25pdG9yLkFueVNwYU1vbml0b3IuQmEmJmYucGFyZW50KGEubW9uaXRvci5BbnlTcGFNb25pdG9yLnZwKSxjLnZkKGYsaCksYi5vU1RPKGMuY20sYy5BaSk7ZGVsZXRlIGguX2FkcnVtQWpheFQ7YS5qLm4uRy5YaShmLnVybCgpKX07Yy5MZz1mdW5jdGlvbihoLGYpe3ZhciBuPXt9O2guQWU9bjtkZWxldGUgaC5fYWRydW1BamF4VDt2YXIgbT17fTtpZihoIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3QpdHJ5e2lmKG09e3N0YXR1czpoLnN0YXR1cyxnZXRBbGxSZXNwb25zZUhlYWRlcnM6aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKX0sNDAwPD1oLnN0YXR1cylpZihiLmlzU3RyaW5nKGguc3RhdHVzVGV4dCkpbS5zdGF0dXNUZXh0PWguc3RhdHVzVGV4dDtlbHNlIHRyeXttLnJlc3BvbnNlVGV4dD1oLnJlc3BvbnNlVGV4dH1jYXRjaChlKXttLnJlc3BvbnNlVHlwZT0KaC5yZXNwb25zZVR5cGV9fWNhdGNoKGwpe2EuZXJyb3IoIk0xMTQiLGwpfWIuZ2MoZnVuY3Rpb24oKXtoLkFlPT09biYmYy5yZXBvcnRYaHIobSxmKX0pfTtjLnJlcG9ydFhocj1mdW5jdGlvbihiLGYpe2MuZmgoYixmKTthLmNvbW1hbmQoInJlcG9ydFhociIsZil9O2MudmQ9ZnVuY3Rpb24oYixmKXtpZihsKGYuaCkpe3ZhciBuPWEuYy5IYyhmLmgpLmd1aWQ7Yy5maChmLGIpO2woYy5oYVtuXSl8fChjLmhhW25dPVtdKTstMT09Yy5oYVtuXS5pbmRleE9mKGIpJiZjLmhhW25dLnB1c2goYil9ZWxzZSBhLmxvZygifkFueVNQQTogZXJyb3IgaW4gcHV0SW5QYXJlbnRFdmVudFdhaXRpbmdRdWV1ZSgpIGFzIHhoci5hZHJ1bV9jYXVzYWxFdmVudCBpcyB1bmRlZmluZWQuIil9O2MuZmg9ZnVuY3Rpb24oYSxjKXt2YXIgbj1jLnJlc3BvbnNlfHxhLG09bi5zdGF0dXMsZTtiLmlzTnVtYmVyKG0pJiZjLnhoclN0YXR1cyhtKTtpZihuLmdldEFsbFJlc3BvbnNlSGVhZGVycyl7dmFyIGw9Yi5pc0Z1bmN0aW9uKG4uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKT8Kbi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTpuLmdldEFsbFJlc3BvbnNlSGVhZGVycztjLmFsbFJlc3BvbnNlSGVhZGVycyhsKX1pZig0MDA8PW0pe2lmKGIuaXNTdHJpbmcobi5zdGF0dXNUZXh0KSllPW4uc3RhdHVzVGV4dDtlbHNlIHRyeXtiLmlzU3RyaW5nKG4ucmVzcG9uc2VUZXh0KSYmKGU9bi5yZXNwb25zZVRleHQpfWNhdGNoKHApe2IuaXNTdHJpbmcobi5yZXNwb25zZVR5cGUpJiYoZT1uLnJlc3BvbnNlVHlwZSl9Yy5lcnJvcih7c3RhdHVzOm0sbXNnOmV9KX19O2MuU209ZnVuY3Rpb24oYSxiKXt2YXIgYz0iIjthLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihhLGIpe2MrPWIrIjogIithKyJcclxuIn0pO2IuYWxsUmVzcG9uc2VIZWFkZXJzKGMpfTtjLkJnPWZ1bmN0aW9uKGEpe2MuaGFbYV09W107ZGVsZXRlIGMuaGFbYV19O2Mud2w9ZnVuY3Rpb24oYixmKXt2YXIgbj1jLmhhW2ZdO2wobikmJihuLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5wYXJlbnQoYik7YS5jb21tYW5kKCJyZXBvcnRYaHIiLApjKX0pLGMuQmcoZikpfTtjLmNtPWZ1bmN0aW9uKCl7Zm9yKHZhciBoIGluIGMuaGEpe2Zvcih2YXIgZj0wLG49Yy5oYVtoXTtmPG4ubGVuZ3RoO2YrKyl7dmFyIG09bltmXTshbChhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cCkmJisrYy5oajw9Yi51YS5tYXhQZXJQYWdlVmlldz9hLmNvbW1hbmQoInJlcG9ydFhociIsbSk6bChhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cCkmJisrYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnAuSmU8PWIudWEubWF4UGVyUGFnZVZpZXcmJmEuY29tbWFuZCgicmVwb3J0WGhyIixtKX1jLkJnKGgpfX07cmV0dXJuIGN9KCk7ZS5BaT0yRTM7ZS5oYT17fTtlLmhqPTA7Yi52Yz1lfSkoYS51dGlsc3x8KGEudXRpbHM9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLmlzRGVmaW5lZCxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe31jLnNldFVwPWZ1bmN0aW9uKCl7Yy5leGNsdWRlPVt7dXJsczpbbmV3IFJlZ0V4cChhLmNvbmYuYmVhY29uVXJsSHR0cCsKYS5jb25mLmNvcnNFbmRwb2ludFBhdGgpLG5ldyBSZWdFeHAoYS5jb25mLmJlYWNvblVybEh0dHBzK2EuY29uZi5jb3JzRW5kcG9pbnRQYXRoKV19XTtjLmluY2x1ZGU9W107Yy5tYXhQZXJQYWdlVmlldz1jLlZsKGEuY29uZi51c2VyQ29uZiYmYS5jb25mLnVzZXJDb25mLnhocik7Yy5wYXlsb2FkUGFyYW1zPVtdO2MucGFyYW1ldGVyPXt9O2MudGcoYS5jb25mLnVzZXJDb25mJiZhLmNvbmYudXNlckNvbmYueGhyKX07Yy50Zz1mdW5jdGlvbihhKXtsKGEpJiYoYy5leGNsdWRlPWMuZXhjbHVkZS5jb25jYXQoYi56YihiLnBjLGEuZXhjbHVkZSkpLGMuaW5jbHVkZT1jLmluY2x1ZGUuY29uY2F0KGIuemIoYi5wYyxhLmluY2x1ZGUpKSxjLnBheWxvYWRQYXJhbXM9Yy5wYXlsb2FkUGFyYW1zLmNvbmNhdChiLnpiKGIucGMsYS5wYXlsb2FkUGFyYW1zKSksYy5wYXJhbWV0ZXI9Yi56YihiLldtLGEucGFyYW1ldGVyKSl9O2MuVmw9ZnVuY3Rpb24oaCl7aWYobChoKSl7aD1oLm1heFBlclBhZ2VWaWV3OwppZihiLmlzTnVtYmVyKGgpJiYwPGgpcmV0dXJuIGg7YS5yZXBvcnRBUElNZXNzYWdlKGEuVi55aCwidmFsdWUgaXMgbm90IHZhbGlkOyBkb24ndCBsaW1pdCB4aHIiLCJ4aHIubWF4UGVyUGFnZVZpZXciLFtoXSl9cmV0dXJuIGEuY29uZi5zcGEyP2MuSGg6Yy5HaH07Yy5sYz1mdW5jdGlvbihhLGYpe3ZhciBuPWMuaW5jbHVkZSxtPWMuZXhjbHVkZTtyZXR1cm4gbChuKSYmMDxuLmxlbmd0aCYmIWIuVmIoZixhLG4pfHxsKG0pJiYwPG0ubGVuZ3RoJiZiLlZiKGYsYSxtKX07Yy5VZz1mdW5jdGlvbihhLGYpe3ZhciBuPWMucGF5bG9hZFBhcmFtcztiLlZiKGEubWV0aG9kKCksYS51cmwoKSxuKSYmYS5kYXRhT2JqZWN0KHtkYXRhOmZ9KX07cmV0dXJuIGN9KCk7ZS5HaD01MDtlLkhoPTI1MDtiLnVhPWV9KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe2IucGFyc2VVUkk9ZnVuY3Rpb24oYSl7dmFyIGI9U3RyaW5nKGEpLnJlcGxhY2UoL15ccyt8XHMrJC9nLAoiIikubWF0Y2goL14oW146XC8/I10rOik/KD86XC9cLyg/OihbXjpAXC8/I10qKSg/OjooW146QFwvPyNdKikpP0ApPygoW146XC8/I10qKSg/OjooXGQqKSk/KSk/KFtePyNdKikoXD9bXiNdKik/KCNbXHNcU10qKT8vKTthPWImJm51bGwhPWEubWF0Y2goYlsxXSsiLy8iKTtyZXR1cm4gYiYme2hyZWY6YlswXXx8IiIscHJvdG9jb2w6YlsxXXx8IiIsc2xhc2g6YT8iLy8iOiIiLHVzZXJuYW1lOmJbMl18fCIiLHBhc3N3b3JkOmJbM118fCIiLGhvc3Q6Yls0XXx8IiIsaG9zdG5hbWU6Yls1XXx8IiIscG9ydDpiWzZdfHwiIixwYXRobmFtZTpiWzddfHwiIixzZWFyY2g6Yls4XXx8IiIsaGFzaDpiWzldfHwiIn19O2IuYWJzb2x1dGl6ZVVSST1mdW5jdGlvbihhLGUpe2Z1bmN0aW9uIGMoYSl7dmFyIGI9W107YS5yZXBsYWNlKC9eKFwuXC4/KFwvfCQpKSsvLCIiKS5yZXBsYWNlKC9cLyhcLihcL3wkKSkrL2csIi8iKS5yZXBsYWNlKC9cL1wuXC4kLywiLy4uLyIpLnJlcGxhY2UoL1wvP1teXC9dKi9nLApmdW5jdGlvbihhKXsiLy4uIj09PWE/Yi5wb3AoKTpiLnB1c2goYSl9KTtyZXR1cm4gYi5qb2luKCIiKS5yZXBsYWNlKC9eXC8vLCIvIj09PWEuY2hhckF0KDApPyIvIjoiIil9dmFyIGgsZixuLG0scSx0LHAscjtyPWU/Yi5wYXJzZVVSSShlKTp7fTtwPWE/Yi5wYXJzZVVSSShhKTp7fTtyLnByb3RvY29sPyhoPXIucHJvdG9jb2wsZj1yLnNsYXNoLG49ci51c2VybmFtZSxtPXIucGFzc3dvcmQscT1yLmhvc3QsdD1jKHIucGF0aG5hbWUpLHA9ci5zZWFyY2gpOnIuaG9zdD8oaD1wLnByb3RvY29sLGY9cC5zbGFzaCxuPXIudXNlcm5hbWUsbT1yLnBhc3N3b3JkLHE9ci5ob3N0LHQ9YyhyLnBhdGhuYW1lKSxwPXIuc2VhcmNoKTooaD1wLnByb3RvY29sLGY9cC5zbGFzaCxuPXAudXNlcm5hbWUsbT1wLnBhc3N3b3JkLHE9cC5ob3N0LHIucGF0aG5hbWU/KCIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3Q9YyhyLnBhdGhuYW1lKToodD1wLnBhdGhuYW1lP3AucGF0aG5hbWUuc2xpY2UoMCwKcC5wYXRobmFtZS5sYXN0SW5kZXhPZigiLyIpKzEpK3IucGF0aG5hbWU6Zj8iLyIrci5wYXRobmFtZTpyLnBhdGhuYW1lLHQ9Yyh0KSkscD1yLnNlYXJjaCk6KHQ9YyhwLnBhdGhuYW1lKSxwPXIuc2VhcmNofHxwLnNlYXJjaCkpO3JldHVybiBoK2YrKG4/bisobT8iOiIrbToiIikrIkAiOiIiKStxK3QrcCsoci5oYXNoP3IuaGFzaDoiIil9O2IuZ2V0RnVsbHlRdWFsaWZpZWRVcmw9ZnVuY3Rpb24obCl7dHJ5e3ZhciBlLGM9ZG9jdW1lbnQubG9jYXRpb24uaHJlZixoO2E6e2Zvcih2YXIgZj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYmFzZSIpLG49MDtuPGYubGVuZ3RoO24rKyl7dmFyIG09ZltuXS5ocmVmO2lmKG0pe2g9bTticmVhayBhfX1oPXZvaWQgMH1lPWg/Yi5hYnNvbHV0aXplVVJJKGMsaCk6YztyZXR1cm4gYi5hYnNvbHV0aXplVVJJKGUsbCl9Y2F0Y2gocSl7cmV0dXJuIGEuZXhjZXB0aW9uKHEsIk0xMTUiLGwsZSksbH19fSkoYS51dGlsc3x8KGEudXRpbHM9Cnt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS51dGlscy5pc1N0cmluZyxlPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGgoKXt2YXIgYT1jLmNhbGwodGhpcyl8fHRoaXM7YS5jYT0wO2EuY2E9MDtyZXR1cm4gYX12KGgsYyk7aC5wcm90b3R5cGUuZmM9ZnVuY3Rpb24oKXt0aGlzLmNhPTB9O2gubD1mdW5jdGlvbihiKXt2YXIgYz1iLm1lc3NhZ2V8fGIuZGVzY3JpcHRpb24sbT1iLmZpbGVOYW1lfHxiLmZpbGVuYW1lLGg9Yi5saW5lTnVtYmVyLGU9Yi5jb2x1bW5OdW1iZXI7bChiLmRlc2NyaXB0aW9uKSYmMDw9Yi5kZXNjcmlwdGlvbi5pbmRleE9mKCJBY2Nlc3MgaXMgZGVuaWVkLiIpJiYoYys9IjogbWF5YmUgeW91IGhhdmUgQ09SUyBYSFIgZXJyb3IgaW4gSUUiKTthLm1vbml0b3IuZ2EuSGEoYyxtLGgsZSxiKX07aC5QZj1mdW5jdGlvbihhKXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Yy5ocmVmPWE7YT1kb2N1bWVudC5sb2NhdGlvbjsKdmFyIG09YS5wcm90b2NvbDtyZXR1cm4gYy5wcm90b2NvbD09PW0mJmMuaG9zdG5hbWU9PT1hLmhvc3RuYW1lJiZoLlBsKGIuWEhSTW9uaXRvci5CalttXSxjLnBvcnQsYS5wb3J0KX07aC5QbD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuKGJ8fGEpPT09KGN8fGEpfTtyZXR1cm4gaH0oYi53Yyk7ZS5Caj17Imh0dHA6IjoiODAiLCJodHRwczoiOiI0NDMifTtiLnZhPWV9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLnVhLGU9YS51dGlscy52YyxjPWEudXRpbHMubWVyZ2VKU09OLGg9YS5ldmVudHMuQWRydW1BamF4LGY9YS51dGlscy5pc1N0cmluZyxuPWEudXRpbHMuaXNEZWZpbmVkLG09YS51dGlscy5pc051bWJlcixxPWEudXRpbHMuZ2V0RnVsbHlRdWFsaWZpZWRVcmwsdD1hLmNvbmYuc3BhMjtiLmNiPW51bGw7Yi5vaD13aW5kb3cuZmV0Y2g7dmFyIHA9ZnVuY3Rpb24ocCl7ZnVuY3Rpb24gaygpe3JldHVybiBudWxsIT09CnAmJnAuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXYoayxwKTtrLnByb3RvdHlwZS5Oaz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywiZmV0Y2giKTtpZighY3x8Yy5jb25maWd1cmFibGUpe2MmJmRlbGV0ZSBjLndyaXRhYmxlO2MmJmRlbGV0ZSBjLnZhbHVlO2N8fChjPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pO3ZhciBmPWMuc2V0LG09Yy5nZXQ7Yy5zZXQ9ZnVuY3Rpb24oYyl7ITAhPT1jLmlzQWdlbnRGZXRjaCYmKG4oZikmJmYuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4oYi5jYil8fGEuc2V0VXAoYykpfTtjLmdldD1mdW5jdGlvbigpe3ZhciBhPWIub2g7bihtKSYmKGE9bS5hcHBseSh0aGlzLGFyZ3VtZW50cykpO24oYi5jYikmJihhPWIuY2IpO3JldHVybiBhfX1PYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJmZXRjaCIsYyl9O2sucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKGYpe3ZhciBtPQp0aGlzO2Y9Znx8d2luZG93LmZldGNofHxiLm9oO2EubG9nKCJNMTE2Iik7aWYobihmKSl7dmFyIHE9ZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKGYsaCl7dmFyIG49YXJndW1lbnRzO2EubG9nKCJNMTE3IixtLl9hZHJ1bUFqYXhULnVybCgpLG0uX2FkcnVtQWpheFQubWV0aG9kKCkpO3ZhciBsPWEudXRpbHMubm93KCk7Yi52YS5QZihtLl9hZHJ1bUFqYXhULnVybCgpKSYmKG49ay5SaShhcmd1bWVudHMpKTt2YXIgcT1jLmFwcGx5KHRoaXMsbikscD1uZXcgd2luZG93LlByb21pc2UoZnVuY3Rpb24oYixjKXtxLnRoZW4oZnVuY3Rpb24oYyl7YS5sb2coIk0xMTgiLG0uX2FkcnVtQWpheFQudXJsKCkpO2EubG9nKCJNMTE5IixsLG0uX2FkcnVtQWpheFQudXJsKCkpO2UuU20oYyxwLl9hZHJ1bUFqYXhUKTtwLl9hZHJ1bUFqYXhULm1hcmtGaXJzdEJ5dGVUaW1lKHAuX2FkcnVtQWpheFQuZ2V0Rmlyc3RCeXRlVGltZSgpfHxhLnV0aWxzLm5vdygpKTtwLl9hZHJ1bUFqYXhULnJlc3BvbnNlPQpjO2lmKGcoYy5jbG9uZSkpe2EubG9nKCJNMTIwIixtLl9hZHJ1bUFqYXhULnVybCgpKTt2YXIgZj1jLmNsb25lKCkudGV4dCgpO2ZbImNhdGNoIl0oZnVuY3Rpb24oKXtrLlRjKHApfSk7ay54ayhmLHApfWVsc2UgYS5sb2coIk0xMjEiLG0uX2FkcnVtQWpheFQudXJsKCkpLGsud20ocCxjKTtiKGMpfSk7cVsiY2F0Y2giXShmdW5jdGlvbihiKXthLmxvZygiTTEyMiIsbS5fYWRydW1BamF4VC51cmwoKSk7cC5fYWRydW1BamF4VC5tYXJrRmlyc3RCeXRlVGltZShwLl9hZHJ1bUFqYXhULmdldEZpcnN0Qnl0ZVRpbWUoKXx8YS51dGlscy5ub3coKSk7ay5UYyhwKTtjKGIpfSl9KTtwLl9hZHJ1bUFqYXhUPW0uX2FkcnVtQWpheFQ7cC5JPSEwO3AuX2FkcnVtQWpheFQudGltZXN0YW1wKGwpO3AuX2FkcnVtQWpheFQubWFya1NlbmRUaW1lKGwpO3AuX2FkcnVtQWpheFQucGFyZW50UGhhc2UoYS5saWZlY3ljbGUuZ2V0UGhhc2VOYW1lKCkpO2sucW0ocC5fYWRydW1BamF4VCxhcmd1bWVudHMpOwphLmxvZygiTTEyMyIsbCxtLl9hZHJ1bUFqYXhULnVybCgpKTt0JiYocC5oPW5ldyBhLkRiKGEuYy5pYSgpLG5ldyBhLkthKCJ3aW5kb3cuZmV0Y2giKSxhLkNhdXNlVHlwZS5GRVRDSCkpO3JldHVybiBwfX07cS5pc0FnZW50RmV0Y2g9ITA7Yi5jYj1hLmFvcC5hcm91bmQocShmKSxmdW5jdGlvbigpe3ZhciBmPWsucWsoYXJndW1lbnRzKTshdCYmKyttLmNhK2IueGhyTW9uaXRvci5jYT49bC5tYXhQZXJQYWdlVmlld3x8bC5sYyhmLnVybCxmLm1ldGhvZCk/YS5sb2coIk0xMjQiLGYudXJsKToobS5fYWRydW1BamF4VD1uZXcgaChjKGYsbS5zdGF0dXMpKSx0JiYobS5oPWEuYy5PYSgid2luZG93LmZldGNoLnNlbmQiLHZvaWQgMCxhLmMuaWEoKSxhLkNhdXNlVHlwZS5GRVRDSCksYS5jLnFhKG0uaCkpKX0sZnVuY3Rpb24oKXshdCYmbS5jYStiLnhock1vbml0b3IuY2E+PWwubWF4UGVyUGFnZVZpZXc/YS5sb2coIk0xMjUiLG0uX2FkcnVtQWpheFQudXJsKCkpOmwubGMobS5fYWRydW1BamF4VC51cmwoKSwKbS5fYWRydW1BamF4VC5tZXRob2QoKSk/YS5sb2coIk0xMjYiLG0uX2FkcnVtQWpheFQudXJsKCkpOnQmJihhLmoubi5HLkJlKG0uX2FkcnVtQWpheFQudXJsKCkpLGEuYy5MKCkpfSwiZmV0Y2giLGIudmEubCk7d2luZG93LmZldGNoPWIuY2J9fTtrLnhrPWZ1bmN0aW9uKGIsYyl7Yi50aGVuKGZ1bmN0aW9uKGIpe3ZhciBmPWEudXRpbHMubm93KCk7ay5hYShjKSYmKGMuX2FkcnVtQWpheFQucmVzcG9uc2UucmVzcG9uc2VUZXh0PWIsay4kZihjLl9hZHJ1bUFqYXhULGYpLGI9Yy5fYWRydW1BamF4VC5nZXRSZXNwUHJvY1RpbWUoKSxuKGIpfHxuKGMuX2FkcnVtQWpheFQudykmJjAhPT1jLl9hZHJ1bUFqYXhULnd8fChhLmxvZygiTTEyNyIsZixjLl9hZHJ1bUFqYXhULnVybCgpKSxjLl9hZHJ1bUFqYXhULm1hcmtSZXNwUHJvY1RpbWUoZiksay5UYShjKSkpfSlbImNhdGNoIl0oZnVuY3Rpb24oKXtrLlRjKGMpfSl9O2suVGM9ZnVuY3Rpb24oYil7YS5sb2coIk0xMjgiLGIuX2FkcnVtQWpheFQudXJsKCkpOwp2YXIgYz1hLnV0aWxzLm5vdygpO2suYWEoYikmJihrLiRmKGIuX2FkcnVtQWpheFQsYyksay5hZyhiLl9hZHJ1bUFqYXhULGMpLGsuVGEoYikpfTtrLiRmPWZ1bmN0aW9uKGIsYyl7dmFyIGY9Yi5nZXRSZXNwQXZhaWxUaW1lKCk7bihmKXx8KGEubG9nKCJNMTI5IixjLGIudXJsKCkpLGIubWFya1Jlc3BBdmFpbFRpbWUoYykpfTtrLmFnPWZ1bmN0aW9uKGIsYyl7dmFyIGY9Yi5nZXRSZXNwUHJvY1RpbWUoKTtpZihuKGYpKXJldHVybiExO2EubG9nKCJNMTMwIixjLGIudXJsKCkpO2IubWFya1Jlc3BQcm9jVGltZShjKTtyZXR1cm4hMH07ay53bT1mdW5jdGlvbihhLGIpe2IuZWo9ay5BYihhLGIuZWopO2IubGo9ay5BYihhLGIubGopO2IuVWo9ay5BYihhLGIuVWopO2Iucmw9ay5BYihhLGIucmwpO2IudGV4dD1rLkFiKGEsYi50ZXh0KX07ay5BYj1mdW5jdGlvbihiLGMpe3JldHVybiBhLmFvcC5hcm91bmQoYyxmdW5jdGlvbigpe2suYWEoYikmJmIuX2FkcnVtQWpheFQubWFya1Jlc3BBdmFpbFRpbWUoYS51dGlscy5ub3coKSl9LApmdW5jdGlvbigpe2suYWEoYikmJihiLl9hZHJ1bUFqYXhULm1hcmtSZXNwUHJvY1RpbWUoYS51dGlscy5ub3coKSksay5UYShiKSl9LCJ3cmFwUmVzcG9uc2VSZWFkZXIiLGEubW9uaXRvci5FcnJvck1vbml0b3IubCl9O2suUmk9ZnVuY3Rpb24oYSl7MT09YS5sZW5ndGg/ZihhWzBdKT8oW10ucHVzaC5jYWxsKGEse30pLGsuRWMoYVsxXSkpOmsuRWMoYVswXSk6Mj09YS5sZW5ndGgmJmsuRWMoYVsxXSk7cmV0dXJuIGF9O2suRWM9ZnVuY3Rpb24oYil7bihiKSYmKG4oYi5oZWFkZXJzKXx8KGIuaGVhZGVycz1uZXcgSGVhZGVycyxhLmxvZygiTTEzMSIpKSxiLmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzP2IuaGVhZGVycy5oYXMoIkFEUlVNIik/Yi5oZWFkZXJzLnNldCgiQURSVU0iLCJpc0FqYXg6dHJ1ZSIpOmIuaGVhZGVycy5hcHBlbmQoIkFEUlVNIiwiaXNBamF4OnRydWUiKTpiLmhlYWRlcnMuQURSVU09ImlzQWpheDp0cnVlIil9O2sucW09ZnVuY3Rpb24oYixjKXsyPD1jLmxlbmd0aCYmCmEudXRpbHMuaXNPYmplY3QoY1sxXSkmJm4oY1sxXS5ib2R5KSYmbC5VZyhiLGNbMV0uYm9keSl9O2sucWs9ZnVuY3Rpb24oYil7dmFyIGM9e3VybDoiIixtZXRob2Q6IiJ9O2EudXRpbHMuaXNPYmplY3QoYlswXSk/KGMudXJsPWJbMF0udXJsfHwoYS51dGlscy5pc0RlZmluZWQoYlswXS50b1N0cmluZyk/YlswXS50b1N0cmluZygpOnZvaWQgMCksYy5tZXRob2Q9YlswXS5tZXRob2R8fCJHRVQiKTpmKGJbMF0pJiYoYy51cmw9YlswXSxjLm1ldGhvZD1iWzFdJiZiWzFdLm1ldGhvZHx8IkdFVCIpO2MudXJsPW4oYy51cmwpP2MudXJsOiIiO2MudXJsPXEoYy51cmwpO2MubWV0aG9kPWMubWV0aG9kO3JldHVybiBjfTtrLkhrPWZ1bmN0aW9uKGIpe3ZhciBjO24oYyl8fChhLmxvZygiTTEzMiIsYi5fYWRydW1BamF4VC51cmwoKSksYz0xKTtuKGIuX2FkcnVtQWpheFQudykmJm0oYi5fYWRydW1BamF4VC53KSYmKGIuX2FkcnVtQWpheFQudys9YyxhLmxvZygiTTEzMyIsYi5fYWRydW1BamF4VC53LApiLl9hZHJ1bUFqYXhULnVybCgpKSl9O2suTWI9ZnVuY3Rpb24oYil7dmFyIGM7bihjKXx8KGEubG9nKCJNMTM0IixiLl9hZHJ1bUFqYXhULnVybCgpKSxjPTEpO24oYi5fYWRydW1BamF4VC53KSYmbShiLl9hZHJ1bUFqYXhULncpJiYoYi5fYWRydW1BamF4VC53LT1jLGEubG9nKCJNMTM1IixiLl9hZHJ1bUFqYXhULncsYi5fYWRydW1BamF4VC51cmwoKSkpfTtrLmFhPWZ1bmN0aW9uKGEpe3JldHVybiBuKGEuX2FkcnVtQWpheFQpfTtrLlJiPWZ1bmN0aW9uKGEpe3JldHVybiBuKGEuX2FkcnVtQWpheFQudyl9O2suVW09ZnVuY3Rpb24oYixjKXtiLl9hZHJ1bUFqYXhUPWMuX2FkcnVtQWpheFQ7Yi5fYWRydW1BamF4VC53Kz1iLkQ7YS5sb2coIk0xMzYiLGIuX2FkcnVtQWpheFQudyxjLl9hZHJ1bUFqYXhULnVybCgpKTtiLkQ9MH07ay5YbT1mdW5jdGlvbihhKXt2YXIgYj0hMTtrLmFhKGEpJiZuKGEuX2FkcnVtQWpheFQudykmJihrLkhrKGEpLGI9ITApO3JldHVybiBifTtrLlRhPWZ1bmN0aW9uKGEpe2Uud2QoYSwKYS5fYWRydW1BamF4VCl9O2suUWQ9ZnVuY3Rpb24oYil7dmFyIGM9YS51dGlscy5ub3coKTtyZXR1cm4gMD09PWIuX2FkcnVtQWpheFQudyYmbihiLl9hZHJ1bUFqYXhUKT9rLmFnKGIuX2FkcnVtQWpheFQsYyk6ITF9O2suUGQ9ZnVuY3Rpb24oYil7dmFyIGM9ITEsZj1hLnV0aWxzLm5vdygpLG09Yi5fYWRydW1BamF4VC5nZXRSZXNwQXZhaWxUaW1lKCk7bihtKXx8KGIuX2FkcnVtQWpheFQubWFya1Jlc3BBdmFpbFRpbWUoZiksYz0hMCk7cmV0dXJuIGN9O2suSms9ZnVuY3Rpb24oYil7YS5sb2coIk0xMzciLGIuX2FkcnVtQWpheFQudXJsKCkpO2IuX2FkcnVtQWpheFQudz0wfTtyZXR1cm4ga30oYi52YSk7Yi5lZT1wO2IuaWI9bmV3IGIuZWV9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLmlzT2JqZWN0LGU9YS51dGlscy5tYXAsYz1hLnV0aWxzLnJlZHVjZSxoPWEudXRpbHMuZmlsdGVyLApmPWEudXRpbHMuaXNEZWZpbmVkLG49YS51dGlscy5pc1N0cmluZyxtPWEudXRpbHMubWVyZ2VKU09OLHE9YS51dGlscy53YSx0PWEudXRpbHMuZ2MscD1hLnV0aWxzLnVhLGs9YS51dGlscy52YyxzPWEuY29uZi5zcGEyLHc9ZnVuY3Rpb24odyl7ZnVuY3Rpb24gdSgpe3ZhciBiPXcuY2FsbCh0aGlzKXx8dGhpcztiLklkPSExO2lmKCEwPT09d2luZG93WyJhZHJ1bS14aHItZGlzYWJsZSJdKXJldHVybiBhLmxvZygiTTEzOCIpLGI7aWYoIXdpbmRvdy5YTUxIdHRwUmVxdWVzdClyZXR1cm4gYS5sb2coIk0xMzkiKSxiO2IuQz13aW5kb3cuWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlO2lmKCFiLkMpcmV0dXJuIGEubG9nKCJNMTQwIiksYjtpZighKCJvcGVuImluIGIuQyYmInNlbmQiaW4gYi5DKSlyZXR1cm4gYS5sb2coIk0xNDEiKSxiO2IuSWQ9YS5hb3Auc3VwcG9ydChiLkMub3BlbikmJmEuYW9wLnN1cHBvcnQoYi5DLnNlbmQpO2IuSWR8fGEubG9nKCJNMTQyIik7cmV0dXJuIGJ9dih1LAp3KTt1LnByb3RvdHlwZS5zZXRVcD1mdW5jdGlvbigpe2lmKHRoaXMuSWQpe2EubG9nKCJNMTQzIik7YS54aHJDb25zdHJ1Y3Rvcj13aW5kb3cuWE1MSHR0cFJlcXVlc3Q7YS54aHJPcGVuPXRoaXMueGhyT3Blbj10aGlzLkMub3BlbjthLnhoclNlbmQ9dGhpcy54aHJTZW5kPXRoaXMuQy5zZW5kO3Auc2V0VXAoKTt2YXIgYz10aGlzO3RoaXMuQy5vcGVuPWEuYW9wLmFyb3VuZCh0aGlzLkMub3BlbixmdW5jdGlvbigpe3UuaGwodGhpcykmJig0PT09dGhpcy5yZWFkeVN0YXRlPyhhLmxvZygiTTE0NCIpLHUuTWoodGhpcy5fYWRydW1BamF4VCksZGVsZXRlIHRoaXMuQWUsay5yZXBvcnRYaHIodGhpcyx0aGlzLl9hZHJ1bUFqYXhUKSk6YS5sb2coIk0xNDUiLHRoaXMuX2FkcnVtQWpheFQudXJsKCkpKTt2YXIgZj0xPD1hcmd1bWVudHMubGVuZ3RoP1N0cmluZyhhcmd1bWVudHNbMF0pOiIiLGg9Mjw9YXJndW1lbnRzLmxlbmd0aD9TdHJpbmcoYXJndW1lbnRzWzFdKToiIixoPWEudXRpbHMuZ2V0RnVsbHlRdWFsaWZpZWRVcmwoaCk7CiFzJiZjLmNhK2IuaWIuY2E+PXAubWF4UGVyUGFnZVZpZXd8fHAubGMoaCxmKXx8KHRoaXMuX2FkcnVtQWpheFQ9bmV3IGEuZXZlbnRzLkFkcnVtQWpheChtKHttZXRob2Q6Zix1cmw6aH0sYy5zdGF0dXMpKSl9LG51bGwsIlhIUi5vcGVuIixiLnZhLmwpO3RoaXMuQy5zZW5kPWEuYW9wLmFyb3VuZCh0aGlzLkMuc2VuZCxmdW5jdGlvbihmKXt2YXIgbT10aGlzLG49dGhpcy5fYWRydW1BamF4VCxlPSExO2lmKCEoIW58fCFzJiYrK2MuY2ErYi5pYi5jYT49cC5tYXhQZXJQYWdlVmlldykpe3ZhciBsPWEudXRpbHMubm93KCkscT1uLmdldFNlbmRUaW1lKCk7YS5hc3NlcnQobnVsbD09PXEsIk0xNDYiKTtuLnRpbWVzdGFtcChsKTtuLm1hcmtTZW5kVGltZShxfHxsKTtuLnBhcmVudFBoYXNlKGEubGlmZWN5Y2xlLmdldFBoYXNlTmFtZSgpKTtzJiYobS5oPWEuYy5PYSgiWEhSLnNlbmQiLHZvaWQgMCxhLmMuaWEoKSxhLkNhdXNlVHlwZS5YSFIpKTtiLnZhLlBmKG4udXJsKCkpP20uc2V0UmVxdWVzdEhlYWRlcigiQURSVU0iLAoiaXNBamF4OnRydWUiKTphLmxvZygiTTE0NyIsZG9jdW1lbnQubG9jYXRpb24uaHJlZixuLnVybCgpKTtwLlVnKG4sZik7Zj11Lm1rKG4udXJsKCkscC5wYXJhbWV0ZXIsZik7bi5wYXJhbWV0ZXIoZik7dmFyIGs9MCxyPWZ1bmN0aW9uKCl7aWYoND09bS5yZWFkeVN0YXRlKWU/YS5sb2coIk0xNDgiKTooYS5sb2coIk0xNDkiKSxjLnRjKG0pKTtlbHNle3ZhciBiPW51bGw7dHJ5e2I9bS5vbnJlYWR5c3RhdGVjaGFuZ2V9Y2F0Y2goZil7aWYoZSl7YS5sb2coIk0xNTAiLGYpO3JldHVybn1hLmxvZygiTTE1MSIsZik7Yy50YyhtKTtyZXR1cm59aysrO2I/YS5hb3Auc3VwcG9ydChiKT8obS5vbnJlYWR5c3RhdGVjaGFuZ2U9dS5aZShiLCJYSFIub25SZWFkeVN0YXRlQ2hhbmdlIiksaCYmYy5yaC5jYWxsKG0sInJlYWR5c3RhdGVjaGFuZ2UiLHUuYmYpLGEubG9nKCJNMTUyIixrKSk6aHx8KGEubG9nKCJNMTUzIiksYy50YyhtKSk6azx1Lk9pP3Qocik6ZT9hLmxvZygiTTE1NCIpOihhLmxvZygiTTE1NSIpLApjLnRjKG0pKX19O2lmKGgpe2EubG9nKCJNMTU2Iik7dHJ5e2MuaG4uY2FsbChtLCJyZWFkeXN0YXRlY2hhbmdlIix1LmJmKSxlPSEwfWNhdGNoKHcpe2EuZXJyb3IoIk0xNTciLHcpfX1yKCl9fSxmdW5jdGlvbigpe2lmKHMpe3ZhciBiPXRoaXMuX2FkcnVtQWpheFQ7YiYmYS5qLm4uRy5CZShiLnVybCgpKX19LCJYSFIuc2VuZCIsYi52YS5sKTt2YXIgaD0iYWRkRXZlbnRMaXN0ZW5lciJpbiB0aGlzLkMmJiJyZW1vdmVFdmVudExpc3RlbmVyImluIHRoaXMuQyYmYS5hb3Auc3VwcG9ydCh0aGlzLkMuYWRkRXZlbnRMaXN0ZW5lcikmJmEuYW9wLnN1cHBvcnQodGhpcy5DLnJlbW92ZUV2ZW50TGlzdGVuZXIpO2lmKGgpe3ZhciBuPWEudXRpbHMubmYodGhpcy5DLCJhZGRFdmVudExpc3RlbmVyIik7dGhpcy5obj1uLmFkZEV2ZW50TGlzdGVuZXI7bi5hZGRFdmVudExpc3RlbmVyPWEuYW9wLmFyb3VuZChuLmFkZEV2ZW50TGlzdGVuZXIsZnVuY3Rpb24oYixjLG0pe2lmKGYoYykmJihjLkk9CiEwLHRoaXMgaW5zdGFuY2VvZiBYTUxIdHRwUmVxdWVzdCYmL14obG9hZHxlcnJvcnxyZWFkeXN0YXRlY2hhbmdlKSQvLnRlc3QoYikmJmMpKXt2YXIgaD11Lk9tKGMpO2lmKGgpe3ZhciBuPXEoYXJndW1lbnRzKTtuWzFdPWg7YS5sb2coIk0xNTgiKTtyZXR1cm4gbn1hLmxvZygiTTE1OSIsYixjKX19LG51bGwsIlhIUi5hZGRFdmVudExpc3RlbmVyIik7bj1hLnV0aWxzLm5mKHRoaXMuQywicmVtb3ZlRXZlbnRMaXN0ZW5lciIpO3RoaXMucmg9bi5yZW1vdmVFdmVudExpc3RlbmVyO24ucmVtb3ZlRXZlbnRMaXN0ZW5lcj1hLmFvcC5hcm91bmQobi5yZW1vdmVFdmVudExpc3RlbmVyLGZ1bmN0aW9uKGIsZixtKXtpZih0aGlzIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3QmJnRoaXMuX2FkcnVtQWpheFQpe3ZhciBoPXEoYXJndW1lbnRzKTtmLl9fYWRydW1JbnRlcmNlcHRvcj8oaFsxXT1mLl9fYWRydW1JbnRlcmNlcHRvcixhLmxvZygiTTE2MCIpLGMucmguYXBwbHkodGhpcyxoKSk6YS5sb2coIk0xNjEiKX19LApudWxsLCJYSFIucmVtb3ZlRXZlbnRMaXN0ZW5lciIpfWVsc2UgYS5sb2coIk0xNjIiKTthLmxvZygiTTE2MyIpfX07dS5taz1mdW5jdGlvbihiLGYsbil7aWYoZiYmKGY9aChlKGgoZixmdW5jdGlvbihjKXtyZXR1cm4gYS51dGlscy5kZyhiLGMudXJscyl9KSxmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRGcm9tQm9keShuKX0pLGwpLDA8Zi5sZW5ndGgpKXJldHVybiBjKGYsbSx7fSl9O3UuYWQ9ZnVuY3Rpb24oYil7dmFyIGM9Yi5fYWRydW1BamF4VDtpZihjKXt2YXIgZj1hLnV0aWxzLm5vdygpOzI9PWIucmVhZHlTdGF0ZT9jLm1hcmtGaXJzdEJ5dGVUaW1lKGMuZ2V0Rmlyc3RCeXRlVGltZSgpfHxmKTo0PT1iLnJlYWR5U3RhdGUmJihjLm1hcmtSZXNwQXZhaWxUaW1lKGMuZ2V0UmVzcEF2YWlsVGltZSgpfHxmKSxjLm1hcmtGaXJzdEJ5dGVUaW1lKGMuZ2V0Rmlyc3RCeXRlVGltZSgpfHxmKSxzJiYoYj1iLmg9YS5jLk9hKCJYSFIubG9hZCIsdm9pZCAwLGIuaCxhLkNhdXNlVHlwZS5YSFIpLAphLmMucWEoYikpKX19O3UuemY9ZnVuY3Rpb24oYil7dmFyIGM9Yi5fYWRydW1BamF4VDtpZihjJiY0PT1iLnJlYWR5U3RhdGUpe3ZhciBmPWEudXRpbHMubm93KCksbT1jLmdldFJlc3BQcm9jVGltZSgpO2MubWFya1Jlc3BBdmFpbFRpbWUoYy5nZXRSZXNwQXZhaWxUaW1lKCl8fGYpO2Y+bSYmYy5tYXJrUmVzcFByb2NUaW1lKGYpO2sud2QoYixjKTthLmNvbmYuc3BhMiYmYS5jLkwoKX19O3UuWmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdS5qbihhLGZ1bmN0aW9uKCl7dS5hZCh0aGlzKX0sZnVuY3Rpb24oKXt1LnpmKHRoaXMpfSxiKX07dS5iZj1mdW5jdGlvbigpe3UuYWQodGhpcyk7dS56Zih0aGlzKX07dS5obD1mdW5jdGlvbihhKXtyZXR1cm4gZihhLl9hZHJ1bUFqYXhUKSYmbihhLl9hZHJ1bUFqYXhULl91cmwpfTt1Lk1qPWZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMubm93KCk7Yi5tYXJrUmVzcEF2YWlsVGltZShiLmdldFJlc3BBdmFpbFRpbWUoKXx8Yyk7Yi5tYXJrRmlyc3RCeXRlVGltZShiLmdldEZpcnN0Qnl0ZVRpbWUoKXx8CmMpO2IubWFya1Jlc3BQcm9jVGltZShiLmdldFJlc3BQcm9jVGltZSgpfHxjKX07dS5wcm90b3R5cGUudGM9ZnVuY3Rpb24oYil7aWYoYi5fYWRydW1BamF4VCl7dmFyIGM9YS51dGlscy5ub3coKSszRTQsZj1mdW5jdGlvbigpe3UuYWQoYik7dmFyIG09Yi5fYWRydW1BamF4VDtpZihtKXt2YXIgaD1hLnV0aWxzLm5vdygpOzQ9PWIucmVhZHlTdGF0ZT8oYS5hc3NlcnQobnVsbD09PW0uZ2V0UmVzcFByb2NUaW1lKCksIk0xNjQiKSxtLm1hcmtSZXNwUHJvY1RpbWUobS5nZXRSZXNwUHJvY1RpbWUoKXx8aCksYS5sb2coIk0xNjUiKSxrLndkKGIsbSksYS5jb25mLnNwYTImJmEuYy5MKCkpOmg8Yz9hLnV0aWxzLm9TVE8oZix1LmJlKTooZGVsZXRlIGIuX2FkcnVtQWpheFQsYS5sb2coIk0xNjYiKSl9fTtmKCl9fTt1LmpuPWZ1bmN0aW9uKGIsYyxmLG0pe3ZhciBoPWI7YiYmIm9iamVjdCI9PT10eXBlb2YgYiYmInRvU3RyaW5nImluIGImJiJbeHBjb25uZWN0IHdyYXBwZWQgbnNJRE9NRXZlbnRMaXN0ZW5lcl0iPT09CmIudG9TdHJpbmcoKSYmImhhbmRsZUV2ZW50ImluIGImJihoPWZ1bmN0aW9uKCl7Yi5oYW5kbGVFdmVudC5hcHBseSh0aGlzLHEoYXJndW1lbnRzKSl9KTtyZXR1cm4gYS5hb3AuYXJvdW5kKGgsYyxmLG0pfTt1Lk9tPWZ1bmN0aW9uKGIpe2lmKGIuX19hZHJ1bUludGVyY2VwdG9yKXJldHVybiBiLl9fYWRydW1JbnRlcmNlcHRvcjtpZihhLmFvcC5zdXBwb3J0KGIpKXt2YXIgYz11LlplKGIsIlhIUi5pbnZva2VFdmVudExpc3RlbmVyIik7cmV0dXJuIGIuX19hZHJ1bUludGVyY2VwdG9yPWN9fTtyZXR1cm4gdX0oYi52YSk7dy5PaT01O3cuYmU9NTA7Yi5YSFJNb25pdG9yPXc7Yi54aHJNb25pdG9yPW5ldyBiLlhIUk1vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLnZjLGU9ZnVuY3Rpb24oYyl7ZnVuY3Rpb24gaChiKXtiPWMuY2FsbCh0aGlzLGIpfHx0aGlzO2IucGVyZj1uZXcgYS5QZXJmb3JtYW5jZVRyYWNrZXI7CmIuJGU9ITE7Yi5KZT0wO3JldHVybiBifXYoaCxjKTtoLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnRUeXBlLlZQYWdlVmlld307aC5wcm90b3R5cGUuV2M9ZnVuY3Rpb24oKXtyZXR1cm4gYi5FdmVudFRyYWNrZXIuRGModGhpcy5ndWlkKCksdGhpcy51cmwoKSx0aGlzLnR5cGUoKSl9O2gucHJvdG90eXBlLkZkPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5XYygpO2EubW9uaXRvci5nYS5zZXQoInBhcmVudCIsYik7YS5sb2coIk0xNjciLGIuZ3VpZCgpLGIudXJsKCkpfTtoLnByb3RvdHlwZS5zdGFydENvcnJlbGF0aW5nWGhycz1mdW5jdGlvbigpe2EubG9nKCJNMTY4Iik7YS51dGlscy5pc0RlZmluZWQodGhpcy5lYikmJiFhLm1vbml0b3IuQW55U3BhTW9uaXRvci5CYSYmbC53bCh0aGlzLHRoaXMuZWIuZ3VpZCl9O2gucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5zdGFydENvcnJlbGF0aW5nWGhycygpO3RoaXMuRmQoKX07cmV0dXJuIGh9KGIuRXZlbnRUcmFja2VyKTsKYi5BbnlTcGFWUGFnZVZpZXc9ZTtiLk1hKGIuVFthLkV2ZW50VHlwZS5WUGFnZVZpZXddLGUucHJvdG90eXBlKX0pKGEuZXZlbnRzfHwoYS5ldmVudHM9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpe2EucmVwb3J0PWZ1bmN0aW9uKGIpe2EudXRpbHMuaXNPYmplY3QoYikmJmEudXRpbHMuaXNGdW5jdGlvbihiLnR5cGUpPy0xPT1bYS5FdmVudFR5cGUuUGFnZVZpZXcsYS5FdmVudFR5cGUuQWpheCxhLkV2ZW50VHlwZS5WUGFnZVZpZXcsYS5FdmVudFR5cGUuRXJyb3JdLmluZGV4T2YoYi50eXBlKCkpP2EucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYi50eXBlKCkrImlzIG5vdCBhIHZhbGlkIGV4dGVybmFsIGV2ZW50IHR5cGUiLCJBRFJVTS5yZXBvcnQiLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpOmEuY29uZi5zcGEyJiZhLkV2ZW50VHlwZS5WUGFnZVZpZXc9PWIudHlwZSgpP2EubG9nKCJNMTY5Iik6YS51dGlscy5nYyhmdW5jdGlvbigpe2EuY29tbWFuZCgicmVwb3J0RXZlbnQiLApiKX0pOmEucmVwb3J0QVBJTWVzc2FnZShhLlYuV2QsIiIsIkFEUlVNLnJlcG9ydCIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9O2EubWFya1ZpcnR1YWxQYWdlQmVnaW49ZnVuY3Rpb24oYixsKXthLmNvbmYuc3BhMiYmKHRoaXMuUGE9YS51dGlscy5pc0RlZmluZWQobCk/bDohMCxhLmxvZygiTTE3MCIsZG9jdW1lbnQuVVJMKSxhLm1vbml0b3IuQW55U3BhTW9uaXRvci5EZChkb2N1bWVudC5VUkwsYiwhMCksYS5tb25pdG9yLkFueVNwYU1vbml0b3IuUWcoKSl9O2EubWFya1ZpcnR1YWxQYWdlRW5kPWZ1bmN0aW9uKCl7YS5jb25mLnNwYTImJnRoaXMuUGEmJihhLmxvZygiTTE3MSIsYS5tb25pdG9yLkFueVNwYU1vbml0b3IuamEpLGEubW9uaXRvci5BbnlTcGFNb25pdG9yLmJnKGEubW9uaXRvci5BbnlTcGFNb25pdG9yLnZwLnN0YXJ0VGltZSxhLnV0aWxzLm5vdygpKSx0aGlzLlBhPSExKX19KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9CmEudXRpbHMuaXNEZWZpbmVkLGU9YS5hb3AuYWZ0ZXIsYz1hLmFvcC5iZWZvcmUsaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoKXt9Zi5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt2YXIgYz0hMTtmLnhhPWEudXRpbHMuaGIoKTthLmMuc2V0VXAoKTthLmNlLnNldFVwKCk7Zi50bSgpO2Euai5uLnNldFVwKGEudXRpbHMubm93KCkpO2YuamE9ZG9jdW1lbnQuVVJMO2YuUmM9W107YS51dGlscy5pc0RlZmluZWQod2luZG93Lmhpc3RvcnkpJiZhLnV0aWxzLmlzRnVuY3Rpb24od2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKSYmKGM9ITAsd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlPWEuYW9wLmFyb3VuZCh3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUsZnVuY3Rpb24oKXtiLkRPTUV2ZW50c01vbml0b3IuWmImJiFhLlBhJiYoYS5sb2coIk0xNzIiKSxmLkRkKGRvY3VtZW50LlVSTCkpfSxmdW5jdGlvbigpe2IuRE9NRXZlbnRzTW9uaXRvci5aYiYmKGEuUGE/KGEubG9nKCJNMTczIiksZi52cC51cmwoZG9jdW1lbnQuVVJMKSk6CihhLmxvZygiTTE3NCIpLGYuUWcoKSkpO2YuamE9ZG9jdW1lbnQuVVJMfSwiaGlzdG9yeVB1c2hTdGF0ZSIpKTtmLlJjPWYuUmMuY29uY2F0KGEudXRpbHMuemIoYS51dGlscy5wYyxhLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5zcGEmJmEuY29uZi51c2VyQ29uZi5zcGEuc3BhMiYmYS51dGlscy5pc09iamVjdChhLmNvbmYudXNlckNvbmYuc3BhLnNwYTIpJiZhLmNvbmYudXNlckNvbmYuc3BhLnNwYTIudnAmJmEuY29uZi51c2VyQ29uZi5zcGEuc3BhMi52cC5leGNsdWRlKSk7aWYoYS51dGlscy5pc0RlZmluZWQod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpKXt2YXIgYz0hMCxtPWZ1bmN0aW9uKCl7Zi5qYSE9ZG9jdW1lbnQuVVJMJiZmLlJnKCl9O20uST0hMDt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLG0pfWN8fGEubG9nKCJNMTc1Iil9O2YuUmc9ZnVuY3Rpb24oKXt2YXIgYz1kb2N1bWVudC5VUkw7YS5sb2coIk0xNzYiLGYuamEsYyk7Yi5ET01FdmVudHNNb25pdG9yLlpiJiYKKGEuUGE/KGEubG9nKCJNMTc3IiksZi52cC51cmwoZG9jdW1lbnQuVVJMKSk6KGYuRGQoZi5qYSksZi5HZChjKSkpO2YuamE9Y307Zi50bT1mdW5jdGlvbigpe3ZhciBiO2EuYy5xYT1lKGEuYy5xYSxmdW5jdGlvbigpe2I9bG9jYXRpb24uaGFzaH0pO2EuYy5MPWMoYS5jLkwsZnVuY3Rpb24oKXtiIT1sb2NhdGlvbi5oYXNoJiZmLmphIT1kb2N1bWVudC5VUkwmJmYuUmcoKX0pfTtmLkRkPWZ1bmN0aW9uKGEsYixjKXtmLm5tKCk7Zi5CYT0hMTtmLlllKGEsYixjKX07Zi5RZz1mdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LlVSTDtmLkdkKGEpO2YuamE9YX07Zi5Jbj1mdW5jdGlvbigpe2YuQmE9ITA7Zi5ZZShmLmphKTtmLkdkKCl9O2Yubm09ZnVuY3Rpb24oKXt2YXIgYz1hLmoubjthLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJmEuai5FYi5GYSYmYS51dGlscy5pc0RlZmluZWQoYi5ET01FdmVudHNNb25pdG9yLmN1cnJlbnRCYXNlUGFnZSkmJihhLmxvZygiTTE3OCIpLGMuRy5CfHwKYy5KLkI/Yy5uYXZDb21wbGV0ZShhLnV0aWxzLm5vdygpKTpjLm5hdkNvbXBsZXRlKGEudXRpbHMubWF4KGMuRy5EYSxjLkouYmEpKSxjLnJlc2V0KCkpO2YuQmF8fCFhLnV0aWxzLmlzRGVmaW5lZChmLnZwKXx8Zi52cC5EZ3x8KGEubG9nKCJNMTc5IiksYz1mLmNrKGEuai5uLkIpLGYuYmcoZi52cC5zdGFydFRpbWUsYykpfTtmLmNrPWZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMubm93KCk7Yj8oYz1mLmRrKGEuai5uLlFhKSxhLmoubi5yZXNldCgpKTpjPWYudnAudGltZXN0YW1wKCk7cmV0dXJuIGN9O2YueW09ZnVuY3Rpb24oYixjKXtyZXR1cm4gZi52cC4kZT8hMTpsKGMpJiYwPGMubGVuZ3RoJiZhLnV0aWxzLlZiKHZvaWQgMCxiLGMpfTtmLmRrPWZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMubm93KCk7Yj9hLmoubi5KLmNqKCl8fGEuai5uLkcuZGooKXx8KGM9YS51dGlscy5tYXgoYS5qLm4uSi5iYSxhLmoubi5HLkRhKSk6Yz1hLmoubi5zdGFydFRpbWU7cmV0dXJuIGN9O2YuYmc9CmZ1bmN0aW9uKGEsYil7Zi5rZChhLGIpO2YuWmYoYSk7Zi5yZXBvcnQoKX07Zi5ZZT1mdW5jdGlvbihiLGMsaCl7Zi5yZXNldCgpO2YudnA9bmV3IGEuZXZlbnRzLkFueVNwYVZQYWdlVmlldztmLnZwLnN0YXJ0VXJsPWI7YS51dGlscy5pc0RlZmluZWQoYykmJihmLnZwLnVzZXJQYWdlTmFtZT1jKTthLnV0aWxzLmlzQm9vbGVhbihoKSYmKGYudnAuJGU9aCk7Yj1hLmMuR2MoKTtmLnZwLnN0YXJ0VGltZT1mLkJhP2EudXRpbHMuaGIoKTphLnV0aWxzLmlzRGVmaW5lZChiKT9iLnN0YXJ0OmEudXRpbHMubm93KCk7Zi52cC5lYj1ifTtmLkdkPWZ1bmN0aW9uKGIpe2EudXRpbHMuaXNEZWZpbmVkKGIpJiZmLnZwLnVybChiKTtmLnZwLnN0YXJ0KCk7YS5QYXx8YS5qLm4uc3RhcnQoYS51dGlscy5ub3coKSl9O2Yua2Q9ZnVuY3Rpb24oYixjKXthLnV0aWxzLmlzRGVmaW5lZChmLnZwKSYmKGEuY29uZi5lbmFibGVQcmltYXJ5TWV0cmljcyYmZi5waihiKSxhLnV0aWxzLmlzRGVmaW5lZChjKT8KYS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzP2YudnAudGltZXN0YW1wKGMtYj5mLnZwLnZjdD9jOmYudnAudmN0K2IpOmYudnAudGltZXN0YW1wKGMpOmYudnAudGltZXN0YW1wKGIpKX07Zi5waj1mdW5jdGlvbihiKXthLmxvZygiTTE4MCIpO2I9YS5OLlVlKGIpO2YudnAudmN0PWIudmN0O2EuTi5yZXNldCgpfTtmLlpmPWZ1bmN0aW9uKGMpe2EudXRpbHMuaXNEZWZpbmVkKGYudnApJiZmLnZwLnJlc1RpbWluZyhiLnJlc291cmNlTW9uaXRvci5zayhmLnhhLGMpKX07Zi5jZD1mdW5jdGlvbigpe3ZhciBiPWEuYy52aygpO3JldHVybiBhLnV0aWxzLmlzRGVmaW5lZChiKSYmYS51dGlscy5pc0RlZmluZWQoZi52cCkmJighYS51dGlscy5pc0RlZmluZWQoZi52cC5lYil8fGYudnAuZWIhPWIpfTtmLnJlcG9ydD1mdW5jdGlvbigpe2lmKGEudXRpbHMuaXNEZWZpbmVkKGYudnApKWlmKGYueW0oZi52cC51cmwoKSxmLlJjKSlhLmxvZygiTTE4MiIsZi52cC51cmwoKSk7ZWxzZXthLmxvZygiTTE4MyIpOwp2YXIgYz1mLnZwO2lmKGMuRGcpYS5sb2coIk0xODQiKTtlbHNle3ZhciBtPWEudXRpbHMuaXNEZWZpbmVkKGIuRE9NRXZlbnRzTW9uaXRvci5jdXJyZW50QmFzZVBhZ2UpP2IuRE9NRXZlbnRzTW9uaXRvci5jdXJyZW50QmFzZVBhZ2UudXJsKCk6ZG9jdW1lbnQuVVJMO2MucGFyZW50VXJsKG0pO2EuY29tbWFuZCgiY2FsbCIsZnVuY3Rpb24oKXthLnJlcG9ydGVyLnJlcG9ydEV2ZW50KGMpfSk7Yy5EZz0hMH19ZWxzZSBhLmxvZygiTTE4MSIpfTtmLnJlc2V0PWZ1bmN0aW9uKCl7Zi52cD1udWxsfTtyZXR1cm4gZn0oKTtiLkFueVNwYU1vbml0b3I9aDtiLmJqPW5ldyBiLkFueVNwYU1vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLko9bmV3IGIuTGg7dGhpcy5HPW5ldyBiLkJoO3RoaXMuemw9M0UzO3RoaXMubWF4SW5hY3RpdmVUaW1lPWEuY29uZi51c2VyQ29uZiYmCmEuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZSYmYS5jb25mLnVzZXJDb25mLm5hdkNvbXBsZXRlLm1heEluYWN0aXZlVGltZT9hLmNvbmYudXNlckNvbmYubmF2Q29tcGxldGUubWF4SW5hY3RpdmVUaW1lOk1hdGgubWF4KHRoaXMuSi5wYix0aGlzLkcucGIpK3RoaXMuemw7dGhpcy5zZz0xRTN9ZS5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oYSl7dGhpcy5jdXJyZW50VGltZT10aGlzLnN0YXJ0VGltZT1hO3RoaXMuQj10aGlzLlFhPSExO3RoaXMuSi5zZXRVcChhKTt0aGlzLkcuc2V0VXAoYSl9O2UucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGEpe3RoaXMuc2V0VXAoYSk7dGhpcy5CPSEwO3RoaXMuSi5zdGFydChhKTt0aGlzLkcuc3RhcnQoYSk7dGhpcy5QZSgpO3RoaXMuQ20oKX07ZS5wcm90b3R5cGUuQ209ZnVuY3Rpb24oKXt0aGlzLmJoPWEudXRpbHMucmVmcy5zZXRJbnRlcnZhbC5jYWxsKHdpbmRvdyxmdW5jdGlvbigpe2EuUCgpO3RoaXMuY3VycmVudFRpbWU9YS51dGlscy5ub3coKTsKdmFyIGI9YS51dGlscy5tYXgodGhpcy5KLmJhLHRoaXMuRy5EYSk7aWYodGhpcy5jdXJyZW50VGltZS1iPj10aGlzLm1heEluYWN0aXZlVGltZSl7aWYoYS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiZlLkZhJiYhYS51dGlscy5pc0RlZmluZWQoYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKSl7YS5sb2coIk0xODUiKTtlLk5hPWUuTmF8fHRoaXMuUWE/dGhpcy5jdXJyZW50VGltZTpiO3JldHVybn10aGlzLmN1cnJlbnRUaW1lPWUuTmF8fHRoaXMuY3VycmVudFRpbWU7YS5sb2coIk0xODYiKTt0aGlzLm5hdkNvbXBsZXRlKHRoaXMuUWE/dGhpcy5jdXJyZW50VGltZTpiKTt0aGlzLnJlc2V0KCl9YS5RKCl9LmJpbmQodGhpcyksdGhpcy5zZyl9O2UucHJvdG90eXBlLldnPWZ1bmN0aW9uKCl7dGhpcy5RYXx8KHRoaXMuQW0oKSx0aGlzLlFhPSEwKX07ZS5wcm90b3R5cGUuUGU9ZnVuY3Rpb24oKXthLnV0aWxzLmlzRGVmaW5lZCh0aGlzLnlnKSYmY2xlYXJJbnRlcnZhbCh0aGlzLnlnKTsKYS51dGlscy5pc0RlZmluZWQodGhpcy5iaCkmJmNsZWFySW50ZXJ2YWwodGhpcy5iaCl9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5QZSgpO3RoaXMuQj10aGlzLlFhPSExO3RoaXMuSi5yZXNldCgpO3RoaXMuRy5yZXNldCgpfTtlLnByb3RvdHlwZS5uYXZDb21wbGV0ZT1mdW5jdGlvbihiKXthLlAoKTt2YXIgaD1hLnV0aWxzLmlzRGVmaW5lZChhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cCYmYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnAuc3RhcnRUaW1lKT9hLm1vbml0b3IuQW55U3BhTW9uaXRvci52cC5zdGFydFRpbWU6dGhpcy5zdGFydFRpbWU7YS5sb2coIk0xODciLGItaCk7YS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzP2UuRmE/KGEubW9uaXRvci5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZiYmKGEubW9uaXRvci5uYXZNb25pdG9yLlhlKCksYS5tb25pdG9yLnJlc291cmNlTW9uaXRvci5XZSgpKSxhLmxvZygiTTE4OCIpLGI9YS5OLlVlKGEudXRpbHMuaGIoKSksCmEubW9uaXRvci5ET01FdmVudHNNb25pdG9yLmN1cnJlbnRCYXNlUGFnZS52Y3Q9Yi52Y3QsYS5jb25mLnNwYTImJihhLm1vbml0b3IuRE9NRXZlbnRzTW9uaXRvci5jdXJyZW50QmFzZVBhZ2UucGN0PWIucGN0KSxhLmNvbW1hbmQoInJlcG9ydE9ubG9hZCIsYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKSxhLk4ucmVzZXQoKSxhLk4uemE9ITEsZS5GYT0hMSk6YS5tb25pdG9yLkFueVNwYU1vbml0b3Iua2QoaCxiKTooYS5tb25pdG9yLnJlc291cmNlTW9uaXRvci5iYXNlUGFnZVJlc291cmNlQnVmZmVyPVtdLGEubW9uaXRvci5BbnlTcGFNb25pdG9yLmtkKGgsYikpO2EubW9uaXRvci5BbnlTcGFNb25pdG9yLkJhfHwoYS5tb25pdG9yLkFueVNwYU1vbml0b3IuWmYoaCksYS5tb25pdG9yLkFueVNwYU1vbml0b3IucmVwb3J0KCkpO2EuUSgpO2EuaXNEZWJ1ZyYmeC5sb2coImV4ZWNUaW1lID0gIithLlNjKX07ZS5wcm90b3R5cGUuQW09ZnVuY3Rpb24oKXt0aGlzLnlnPQphLnV0aWxzLnJlZnMuc2V0SW50ZXJ2YWwuY2FsbCh3aW5kb3csZnVuY3Rpb24oKXthLlAoKTt0aGlzLmN1cnJlbnRUaW1lPWEudXRpbHMubm93KCk7dmFyIGI9dGhpcy5KLmJkKHRoaXMuY3VycmVudFRpbWUpOzA8PWImJmEubG9nKCJNMTg5IixiLXRoaXMuc3RhcnRUaW1lKTtiPXRoaXMuRy5iZCh0aGlzLmN1cnJlbnRUaW1lKTswPD1iJiZhLmxvZygiTTE5MCIsYi10aGlzLnN0YXJ0VGltZSk7aWYoIXRoaXMuRy5CJiYhdGhpcy5KLkIpe2I9YS51dGlscy5tYXgodGhpcy5HLkRhLHRoaXMuSi5iYSk7aWYoYS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiZlLkZhJiYhYS51dGlscy5pc0RlZmluZWQoYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKSl7YS5sb2coIk0xOTEiKTtlLk5hPWUuTmF8fGI7cmV0dXJufWI9ZS5OYXx8YjthLmxvZygiTTE5MiIpO3RoaXMubmF2Q29tcGxldGUoYik7dGhpcy5yZXNldCgpfWEuUSgpfS5iaW5kKHRoaXMpLHRoaXMuc2cpfTsKcmV0dXJuIGV9KCk7bC5GYT0hMDtsLk5hPTA7Yi5FYj1sO2Iubj1uZXcgYi5FYn0pKGEuanx8KGEuaj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dGhpcy5uYz1bXTt0aGlzLmVjKGIuQ2MsMCl9Yi5wcm90b3R5cGUuRGw9ZnVuY3Rpb24oYSl7dGhpcy5lYyhiLkNlLGEpfTtiLnByb3RvdHlwZS5GbD1mdW5jdGlvbihhKXt0aGlzLmVjKGIuS2UsYSl9O2IucHJvdG90eXBlLkVsPWZ1bmN0aW9uKGEpe3RoaXMuZWMoYi5FZSxhKX07Yi5wcm90b3R5cGUuZWM9ZnVuY3Rpb24oYSxiKXt0aGlzLm5jLnB1c2goe0NsOihuZXcgRGF0ZSkuZ2V0VGltZSgpLEJsOmIscGc6YX0pO3RoaXMueGo9YX07Yi5wcm90b3R5cGUuZ2V0UGhhc2VOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueGp9O2IucHJvdG90eXBlLmdldFBoYXNlSUQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTA7YzxiLkhlLmxlbmd0aDtjKyspaWYoYi5IZVtjXT09PWEpcmV0dXJuIGM7CnJldHVybiBudWxsfTtiLnByb3RvdHlwZS5nZXRQaGFzZUNhbGxiYWNrVGltZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5uYyxoPTA7aDxiLmxlbmd0aDtoKyspaWYoYltoXS5wZz09PWEpcmV0dXJuIGJbaF0uQ2w7cmV0dXJuIG51bGx9O2IucHJvdG90eXBlLmZpbmRQaGFzZUF0Tm9taW5hbFRpbWU9ZnVuY3Rpb24oZSl7YS5hc3NlcnQoMDw9ZSk7Zm9yKHZhciBjPXRoaXMubmMsaD1jLmxlbmd0aC0xOzA8PWg7aC0tKWlmKGU+PWNbaF0uQmwpcmV0dXJuIGNbaF0ucGc7YS5lcnJvcigiTTE5MyIsZSxhLnV0aWxzLmR1bXBPYmplY3QoYykpO3JldHVybiBiLkNjfTtyZXR1cm4gYn0oKTtiLkNjPSJBRlRFUl9GSVJTVF9CWVRFIjtiLkNlPSJBRlRFUl9ET01fSU5URVJBQ1RJVkUiO2IuS2U9IkFUX09OTE9BRCI7Yi5FZT0iQUZURVJfT05MT0FEIjtiLkhlPVtiLkNjLGIuQ2UsYi5LZSxiLkVlXTthLlBhZ2VMaWZlY3ljbGVUcmFja2VyPWI7YS5saWZlY3ljbGU9bmV3IGI7YS5saWZlY3ljbGU9CmEubGlmZWN5Y2xlfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoYyl7Yz1iLmNhbGwodGhpcyxjKXx8dGhpcztjLmJhY2tUaW1lR2FwPWEuY29uZi5iYWNrVGltZUdhcDtyZXR1cm4gY312KGMsYik7Yy5wcm90b3R5cGUudHlwZT1mdW5jdGlvbigpe3JldHVybiBhLkV2ZW50VHlwZS5QYWdlVmlld307cmV0dXJuIGN9KGIuRXZlbnRUcmFja2VyKTtiLlBhZ2VWaWV3PWx9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS51dGlscy5ub3csZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoKXt9Yy5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5yZWFkeVN0YXRlO2lmKCJsb2FkaW5nIj09PWIpYS5sb2coIk0xOTQiKSxjLnVtKCksYy5UZygpO2Vsc2V7dmFyIGY9e3RpbWVTdGFtcDpsKCl9O2MuWWEoZik7ImludGVyYWN0aXZlIj09PQpiPyhhLmxvZygiTTE5NSIpLGMuVGcoKSk6KGEubG9nKCJNMTk2IiksYy5zYihmKSxjLmtnKGYpKX19O2MuVGc9ZnVuY3Rpb24oKXthLnV0aWxzLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCJsb2FkIixjLnNiKTthLnV0aWxzLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCJsb2FkIixjLmtnKX07Yy5rZz1mdW5jdGlvbihoKXtjLmN1cnJlbnRCYXNlUGFnZT1uZXcgYS5ldmVudHMuUGFnZVZpZXc7YS5saWZlY3ljbGUuRmwoaCYmaC50aW1lU3RhbXApO2EudXRpbHMuZ2MoZnVuY3Rpb24oKXt2YXIgZj1sKCk7YS5saWZlY3ljbGUuRWwoZik7YS5jb21tYW5kKCJtYXJrIiwib25sb2FkIixmKTtjLlpiPSEwO2EuY29uZi5lbmFibGVQcmltYXJ5TWV0cmljcz9hLk4uRGooKTooYi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZiYmKGIubmF2TW9uaXRvci5YZSgpLGIucmVzb3VyY2VNb25pdG9yLldlKCkpLGEuY29tbWFuZCgicmVwb3J0T25sb2FkIixjLmN1cnJlbnRCYXNlUGFnZSkpOyFhLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJgphLmNvbmYuc3BhMiYmYS5jb25mLm1vZGVybkJyb3dzZXJGZWF0dXJlc0F2YWlsYWJsZSYmYS5qLm4uSi5TZygpO2EudXRpbHMubG9hZFNjcmlwdEFzeW5jKGEuY29uZi5hZHJ1bUV4dFVybCl9KTthLmxvZygiTTE5NyIpfTtjLnVtPWZ1bmN0aW9uKCl7aWYoYS51dGlscy5pc0Z1bmN0aW9uKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGMuWWEsITEpO2Vsc2UgaWYoYS51dGlscy5pc09iamVjdChkb2N1bWVudC5hdHRhY2hFdmVudCkpe2RvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGMuWWEpO3ZhciBiPW51bGw7dHJ5e2I9bnVsbD09PXdpbmRvdy5mcmFtZUVsZW1lbnQ/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Om51bGx9Y2F0Y2goZil7fW51bGwhPWImJmIuZG9TY3JvbGwmJmZ1bmN0aW9uIG0oKXtpZighYy5pc1JlYWR5KXt0cnl7Yi5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGYpe2EudXRpbHMub1NUTyhtLAoxMCk7cmV0dXJufWMuc2IoKX19KCl9ZWxzZSBhLmV4Y2VwdGlvbigiTTE5OCIpO2EubG9nKCJNMTk5Iil9O2Muc2I9ZnVuY3Rpb24oYil7Yy5jZ3x8KGEubGlmZWN5Y2xlLkRsKGImJmIudGltZVN0YW1wKSxhLmNvbW1hbmQoIm1hcmsiLCJvbnJlYWR5IixsKCkpLGMuY2c9ITApfTtjLllhPWZ1bmN0aW9uKGEpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXI/KGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGMuWWEsITEpLGMuc2IoYSkpOiJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlJiYoZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsYy5ZYSksYy5zYihhKSl9O3JldHVybiBjfSgpO2UuaXNSZWFkeT0hMTtlLmNnPSExO2UuWmI9ITE7Yi5ET01FdmVudHNNb25pdG9yPWU7Yi5kb21FdmVudHNNb25pdG9yPW5ldyBiLkRPTUV2ZW50c01vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPQp7fSkpOyhmdW5jdGlvbihhKXt2YXIgYj1hLnV0aWxzLmlzRGVmaW5lZCxsPWEudXRpbHMuaXNOdW1iZXIsZT1hLm1vbml0b3IuZWU7YS5uaD13aW5kb3cuUHJvbWlzZTthLkpiPW51bGw7YS54bz1udWxsO2EudGU9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBjPWEuY29uZi5zcGEyJiZhLmNvbmYubW9kZXJuQnJvd3NlckZlYXR1cmVzQXZhaWxhYmxlLGg9YS5jb25mLmlzWm9uZVByb21pc2UsZj1hLmNvbmYuZmV0Y2gsbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoKXt9Zi5Qaz1mdW5jdGlvbigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eT1hLmFvcC5hcm91bmQoYS50ZSxmdW5jdGlvbihhLGMsaCl7IlByb21pc2UiPT09YyYmYihoKSYmZi5IZihoKX0pO2lmKGgmJmYuSmYoKSl7YS5sb2coIk0yMDAiKTt2YXIgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywiUHJvbWlzZSIpO2YuSGYoYyk7YS50ZSh3aW5kb3csIlByb21pc2UiLGMpO3dpbmRvdy5Qcm9taXNlPXdpbmRvdy5Qcm9taXNlfX07CmYuSmY9ZnVuY3Rpb24oKXtyZXR1cm4gYih3aW5kb3cuX196b25lX3N5bWJvbF9fUHJvbWlzZSl8fGIod2luZG93Ll9fem9uZV9zeW1ib2xfX1pvbmVBd2FyZVByb21pc2UpfTtmLkhmPWZ1bmN0aW9uKGMpe2Iod2luZG93LlpvbmUpJiZiKHdpbmRvdy5ab25lLmFzc2VydFpvbmVQYXRjaGVkKSYmKHdpbmRvdy5ab25lLmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7fSk7Yz1jfHxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywiUHJvbWlzZSIpO3ZhciBoPWMuc2V0LG49Yy5nZXQ7ZyhoKSYmKGMuc2V0PWZ1bmN0aW9uKGMpeyEwPT09Yy5hZ2VudFByb21pc2U/YS5sb2coIk0yMDEiKTooaC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYihhLkpiKT9oLmFwcGx5KHRoaXMsYXJndW1lbnRzKTooYS5sb2coIk0yMDIiKSxmLnNldFVwKCksKG5ldyBlKS5OaygpKSl9KTtnKG4pJiYoYy5nZXQ9ZnVuY3Rpb24oKXt2YXIgYz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtiKGEuSmIpJiYKKGEubG9nKCJNMjAzIiksYz1hLkpiKTtyZXR1cm4gY30pfTtmLnNldFVwPWZ1bmN0aW9uKCl7aWYoYihhLm5oKSl7Zi5TaygpO2YuUmsoKTt2YXIgaD1mdW5jdGlvbihoKXtmdW5jdGlvbiBlKG4pe3ZhciBsPXRoaXMuY29uc3RydWN0b3IscT1uO3RoaXMuWj1hLnV0aWxzLmdlbmVyYXRlR1VJRCgpO2IobikmJihxPWYuUWsobix0aGlzKSk7bj1hLnV0aWxzLlFpKHRoaXMsaCxbcV0sbCk7YyYmKGIodGhpcy5oKSYmKG4uaD10aGlzLmgpLGIodGhpcy5HYSk/bi5oPXRoaXMuR2EuaDpuLmg9YS5jLmlhKCkpO24uWj10aGlzLlo7dGhpcy5HYT1uO2EubG9nKCJNMjA0IixuLlopO2MmJmIobi5oKSYmYS5sb2coIk0yMDUiLG4uaC5ndWlkKTtyZXR1cm4gbn1hLnV0aWxzLkFjKGUsaCk7cmV0dXJuIGV9KHdpbmRvdy5Qcm9taXNlKTtoLmFnZW50UHJvbWlzZT0hMDthLkpiPWg7d2luZG93LlByb21pc2U9aH19O2YueWE9ZnVuY3Rpb24oaCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihjKXt2YXIgZSwKbD1lPXZvaWQgMDthLmxvZygiTTIwNiIsaCk7c3dpdGNoKGgpe2Nhc2UgZi5ILmxlOmNhc2UgZi5ILmtlOmNhc2UgZi5ILlpkOmNhc2UgZi5ILllkOmEudXRpbHMuaXNEZWZpbmVkKG4pJiZhLnV0aWxzLmlzRGVmaW5lZChuLkdhKSYmKGU9bi5HYS5oKTtlPWEuYy5pYSgpfHxlO2w9bmV3IGEuRGIoZSxuZXcgYS5LYShoKSxhLkNhdXNlVHlwZS5QUk9NSVNFKTticmVhaztjYXNlIGYuSC5pZTpjYXNlIGYuSC5qZTpjYXNlIGYuSC5oZTplPW4uaCxsPW5ldyBhLkRiKGUsbmV3IGEuS2EoaCksYS5DYXVzZVR5cGUuUFJPTUlTRSksYS5jLnFhKGwpfWIobikmJihiKG4uR2EpPyhuLkdhLmg9bCxhLmxvZygiTTIwNyIsbi5HYS5aKSk6KGEubG9nKCJNMjA4IixuLlopLG4uaD1sKSl9fX07Zi5Raz1mdW5jdGlvbihoLG4pe2MmJihoPWEuYW9wLmFyb3VuZChoLGZ1bmN0aW9uKCl7bi5oPW5ldyBhLkRiKGEuYy5pYSgpLG5ldyBhLkthKGYuSC5XaCksYS5DYXVzZVR5cGUuUFJPTUlTRSk7YS5jLnFhKG4uaCk7CmEubG9nKCJNMjA5IixuLmguZ3VpZCxuLlopO2lmKGIoYXJndW1lbnRzWzBdKSl7YS5sb2coIk0yMTAiKTt2YXIgYz1hLmFvcC5hcm91bmQoYXJndW1lbnRzWzBdLGYueWEoZi5ILmxlLG4pKTthcmd1bWVudHNbMF09Y31iKGFyZ3VtZW50c1sxXSkmJihhLmxvZygiTTIxMSIpLGM9YS5hb3AuYXJvdW5kKGFyZ3VtZW50c1sxXSxmLnlhKGYuSC5rZSxuKSksYXJndW1lbnRzWzFdPWMpO3JldHVybiBhLnV0aWxzLndhKGFyZ3VtZW50cyl9LGZ1bmN0aW9uKCl7YS5sb2coIk0yMTIiKTthLmMuTCgpfSwiaW50ZXJjZXB0UHJvbWlzZUV4ZWN1dG9yIixmLnJiKSk7cmV0dXJuIGh9O2YuUms9ZnVuY3Rpb24oKXthLnV0aWxzLnJlZnMucHJvbWlzZVRoZW49d2luZG93LlByb21pc2UucHJvdG90eXBlLnRoZW47dmFyIGI9Zi53ZygpLGM9e3BhcmVudE9iamVjdDp3aW5kb3cuUHJvbWlzZS5wcm90b3R5cGUscHJvcGVydHk6InRoZW4iLHByb3BlcnR5V3JhcHBlZEZ1bmN0aW9uTmFtZToicHJvbWlzZVRoZW4iLAp3cmFwTmV3RnVuY3Rpb25BZ2FpbjohMH07Yy5zZXRVcEZ1bmM9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2YuSmYoKXx8Zi5hbShiLGEpfX0uY2FsbCh0aGlzLGMpO2MuTGE9YjthLmFvcC5mb3JjZVdyYXAoYyk7YS51dGlscy5yZWZzLnByb21pc2VGaW5hbGx5PXdpbmRvdy5Qcm9taXNlLnByb3RvdHlwZVsiZmluYWxseSJdO2I9Zi52ZygpO2M9e3BhcmVudE9iamVjdDp3aW5kb3cuUHJvbWlzZS5wcm90b3R5cGUscHJvcGVydHk6ImZpbmFsbHkiLHByb3BlcnR5V3JhcHBlZEZ1bmN0aW9uTmFtZToicHJvbWlzZUZpbmFsbHkiLHdyYXBOZXdGdW5jdGlvbkFnYWluOiEwfTtjLnNldFVwRnVuYz1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7Zi4kbChiLGEpfX0uY2FsbCh0aGlzLGMpO2MuTGE9YjthLmFvcC5mb3JjZVdyYXAoYyl9O2YuYW09ZnVuY3Rpb24oYSxiKXtiLkxhPWYud2coYSl9O2YuJGw9ZnVuY3Rpb24oYSxiKXtiLkxhPWYudmcoYSl9O2YuU2s9ZnVuY3Rpb24oKXtmLllsKCk7CmYuWGwoKX07Zi5nbD1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIGZ8fGIgaW5zdGFuY2VvZiBhLm5ofTtmLkdrPWZ1bmN0aW9uKGMpe3ZhciBmO2IoZil8fChhLmxvZygiTTIxMyIpLGY9MSk7YihjLkQpJiZsKGMuRCkmJihjLkQrPWYsYS5sb2coIk0yMTQiLGMuRCkpfTtmLkFqPWZ1bmN0aW9uKGEpe3ZhciBjO2IoYyl8fChjPTEpO2IoYS5EKSYmbChhLkQpJiYoYS5ELT1jKX07Zi5Jaz1mdW5jdGlvbihjKXtiKGMuRCkmJmEudXRpbHMuY2woYy5EKT8oYS5sb2coIk0yMTUiKSxmLkdrKGMpKTpjLkQ9MX07Zi5UbT1mdW5jdGlvbihiKXtlLlhtKGIpfHwoYS5sb2coIk0yMTYiKSxmLklrKGIpKX07Zi5mbT1mdW5jdGlvbihhKXthLkQ9MH07Zi5PZj1mdW5jdGlvbihhKXtyZXR1cm4gYihhLkkpfTtmLmZkPWZ1bmN0aW9uKGEpe3JldHVybiBiKGEpJiZhIGluc3RhbmNlb2Ygd2luZG93LlByb21pc2V9O2Yud2c9ZnVuY3Rpb24oaCl7dmFyIG49bnVsbDtoPWh8fHdpbmRvdy5Qcm9taXNlLnByb3RvdHlwZS50aGVuOwpoPWEuYW9wLmFyb3VuZChoLGZ1bmN0aW9uKCl7dmFyIGg9dGhpcztuPWg7YS5sb2coIk0yMTciLGguWik7aWYoYihhcmd1bWVudHNbMF0pJiYhZi5mZChhcmd1bWVudHNbMF0pKXtmLlRtKGgpO2EubG9nKCJNMjE4IixoLlopO3ZhciBsPWEuYW9wLmFyb3VuZChhcmd1bWVudHNbMF0sZi55YShmLkguaWUsaCksZnVuY3Rpb24oKXt2YXIgbj1hLmFvcC51Zihhcmd1bWVudHMpO2IobikmJmIobi5EKSYmZi5nbChuKSYmZS5hYShoKT8oZS5VbShuLGgpLGYuZm0obikpOihlLmFhKGgpJiYhZi5PZihoKSYmZS5SYihoKSYmKGUuUGQoaCksZS5NYihoKSwhMD09PWUuUWQoaCkmJihhLmxvZygiTTIxOSIpLGEubG9nKCJNMjIwIiksZS5UYShoKSkpLGMmJihhLmxvZygiTTIyMSIpLGEuYy5MKCkpKX0sImludGVyY2VwdFByb21pc2VUaGVuRnVsZmlsIixmdW5jdGlvbihiKXtlLmFhKGgpJiZlLlJiKGgpJiYoZS5QZChoKSYmZS5NYihoKSwhMD09PWUuUWQoaCkmJihhLmxvZygiTTIyMiIpLGEubG9nKCJNMjIzIiksCmUuVGEoaCkpKTtmLnJiKGIpfSk7YXJndW1lbnRzWzBdPWx9Yihhcmd1bWVudHNbMV0pJiYhZi5mZChhcmd1bWVudHNbMV0pJiYoYS5sb2coIk0yMjQiLGguWiksbD1hLmFvcC5hcm91bmQoYXJndW1lbnRzWzFdLGYueWEoZi5ILmplLGgpLGZ1bmN0aW9uKCl7YyYmKGEubG9nKCJNMjI1IiksYS5jLkwoKSl9KSxhcmd1bWVudHNbMV09bCk7cmV0dXJuIGEudXRpbHMud2EoYXJndW1lbnRzKX0sZnVuY3Rpb24oKXt2YXIgaD1hLmFvcC51Zihhcmd1bWVudHMpOyFiKGgpfHxiKGFyZ3VtZW50c1swXSkmJmYuZmQoYXJndW1lbnRzWzBdKXx8KGMmJihoLmg9dGhpcy5oKSxmLk9mKHRoaXMpJiZlLmFhKHRoaXMpJiYoaC5fYWRydW1BamF4VD10aGlzLl9hZHJ1bUFqYXhULGUuUmIodGhpcyl8fGUuSmsoaCkpKX0sImludGVyY2VwdFByb21pc2VUaGVuSW50ZXJjZXB0b3IiLGZ1bmN0aW9uKGIpe3ZhciBjPW47ZS5hYShjKSYmZS5SYihjKSYmKGUuUGQoYykmJmUuTWIoYyksITA9PT1lLlFkKGMpJiYKKGEubG9nKCJNMjI2IiksYS5sb2coIk0yMjciKSxlLlRhKGMpKSk7Zi5yYihiKX0pO2gudXNlZEJ5QWdlbnQ9ITA7cmV0dXJuIHdpbmRvdy5Qcm9taXNlLnByb3RvdHlwZS50aGVuPWh9O2Yudmc9ZnVuY3Rpb24oaCl7aWYoYih3aW5kb3cuUHJvbWlzZS5wcm90b3R5cGVbImZpbmFsbHkiXSkpcmV0dXJuIGg9aHx8d2luZG93LlByb21pc2UucHJvdG90eXBlWyJmaW5hbGx5Il0saD1hLmFvcC5hcm91bmQoaCxmdW5jdGlvbigpe2IodGhpcy5fYWRydW1BamF4VCkmJmIodGhpcy5fYWRydW1BamF4VC53KT9lLk1iKHRoaXMpOmIodGhpcy5EKSYmZi5Baih0aGlzKTtpZihiKGFyZ3VtZW50c1swXSkpe2EubG9nKCJNMjI4Iix0aGlzLlopO3ZhciBoPWEuYW9wLmFyb3VuZChhcmd1bWVudHNbMF0sZi55YShmLkguaGUsdGhpcyksZnVuY3Rpb24oKXtjJiYoYS5sb2coIk0yMjkiKSxhLmMuTCgpKX0pO2FyZ3VtZW50c1swXT1oO3JldHVybiBhLnV0aWxzLndhKGFyZ3VtZW50cyl9fSxmdW5jdGlvbigpe2EubG9nKCJNMjMwIik7CmEuYy5MKCl9LCJpbnRlcmNlcHRQcm9taXNlRmluYWxseSIpLGgudXNlZEJ5QWdlbnQ9ITAsd2luZG93LlByb21pc2UucHJvdG90eXBlWyJmaW5hbGx5Il09aH07Zi5ZbD1mdW5jdGlvbigpe3dpbmRvdy5Qcm9taXNlLnJlc29sdmU9YS5hb3AuYXJvdW5kKHdpbmRvdy5Qcm9taXNlLnJlc29sdmUsZi55YShmLkguWmQsbnVsbCksZnVuY3Rpb24oKXthLmxvZygiTTIzMSIpO2EuYy5MKCl9LCJpbnRlcmNlcHRQcm9taXNlUmVzb2x2ZSIsZi5yYil9O2YuWGw9ZnVuY3Rpb24oKXt3aW5kb3cuUHJvbWlzZS5yZWplY3Q9YS5hb3AuYXJvdW5kKHdpbmRvdy5Qcm9taXNlLnJlamVjdCxmLnlhKGYuSC5ZZCxudWxsKSxmdW5jdGlvbigpe2EubG9nKCJNMjMyIik7YS5jLkwoKX0sImludGVyY2VwdFByb21pc2VSZWplY3QiLGYucmIpfTtyZXR1cm4gZn0oKTtuLkg9e1doOiJQcm9taXNlSW5zdGFuY2UuaW5pdCIsbGU6IlByb21pc2VJbnN0YW5jZS5yZXNvbHZlIixrZToiUHJvbWlzZUluc3RhbmNlLnJlamVjdCIsCmllOiJQcm9taXNlSW5zdGFuY2Uub25GdWxmaWxsZWQiLGplOiJQcm9taXNlSW5zdGFuY2Uub25SZWplY3RlZCIsaGU6IlByb21pc2VJbnN0YW5jZS5maW5hbGx5IixaZDoiUHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUiLFlkOiJQcm9taXNlQ29uc3RydWN0b3IucmVqZWN0In07bi5yYj1hLm1vbml0b3IuRXJyb3JNb25pdG9yLmw7YS5EaT1uO2gmJmYmJm4uUGsoKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXtmdW5jdGlvbiBsKGEsYil7dmFyIGM9W10sZT0vXlxzKihBRFJVTV9CVFx3Kik9KC4qKVxzKiQvaS5leGVjKGEpO2lmKGUpe3ZhciBsPWVbMV0sZT1lWzJdLnJlcGxhY2UoL14ifCIkL2csIiIpLGU9ZGVjb2RlVVJJQ29tcG9uZW50KGUpLnNwbGl0KCJ8Iiksaz1lWzBdLnNwbGl0KCI6Iik7aWYoIlIiPT09a1swXSYmTnVtYmVyKGtbMV0pPT09Yilmb3IoaChsKSxsPTE7bDxlLmxlbmd0aDtsKyspYy5wdXNoKGVbbF0pfXJldHVybiBjfWZ1bmN0aW9uIGUoYSwKYil7dmFyIGM9L15ccyooQURSVU1fKFxkKylfKFxkKylfKFxkKykpPSguKilccyokL2kuZXhlYyhhKTtpZihjKXt2YXIgZT1jWzFdLGw9Y1s0XSxrPWNbNV07aWYoTnVtYmVyKGNbM10pPT09YilyZXR1cm4gaChlKSx7aW5kZXg6TnVtYmVyKGwpLHZhbHVlOmt9fXJldHVybiBudWxsfWZ1bmN0aW9uIGMoYil7dmFyIGM9L15ccypBRFJVTT1zPShbXGRdKykmcj0oLiopXHMqLy5leGVjKGIpO2lmKGMpe2EubG9nKCJNMjM1IixiKTtpZigzPT09Yy5sZW5ndGgpcmV0dXJuIGgoIkFEUlVNIikse3N0YXJ0VGltZTpOdW1iZXIoY1sxXSksc3RhcnRQYWdlOmNbMl19O2EuZXJyb3IoIk0yMzYiLGIpO3JldHVybiBudWxsfX1mdW5jdGlvbiBoKGIpe2EubG9nKCJNMjM0IixiKTt2YXIgYz1uZXcgRGF0ZTtjLnNldFRpbWUoYy5nZXRUaW1lKCktMUUzKTtkb2N1bWVudC5jb29raWU9YisiPTtFeHBpcmVzPSIrYy50b1VUQ1N0cmluZygpfWIuc3RhcnRUaW1lQ29va2llPW51bGw7Yi5jb29raWVNZXRhZGF0YUNodW5rcz0KbnVsbDtiLmNmPWZ1bmN0aW9uKGYsaCl7YS5sb2coIk0yMzMiKTtmb3IodmFyIG09aD9oLmxlbmd0aDowLGs9W10sdD1mLnNwbGl0KCI7IikscD0wO3A8dC5sZW5ndGg7cCsrKXt2YXIgcj10W3BdLHM9ZShyLG0pO3M/ay5wdXNoKHMpOihyPWMociksbnVsbCE9ciYmKGIuc3RhcnRUaW1lQ29va2llPXIpKX1BcnJheS5wcm90b3R5cGUuc29ydC5jYWxsKGssZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5pbmRleC1iLmluZGV4fSk7cj1bXTtmb3IocD0wO3A8ay5sZW5ndGg7cCsrKXIucHVzaChrW3BdLnZhbHVlKTtmb3IocD0wO3A8dC5sZW5ndGg7cCsrKShrPWwodFtwXSxtKSkmJjA8ay5sZW5ndGgmJihyPXIuY29uY2F0KGspKTtiLmNvb2tpZU1ldGFkYXRhQ2h1bmtzPXJ9O2EuY29ycmVsYXRpb24uZWNrPWIuY2Z9KShhLmNvcnJlbGF0aW9ufHwoYS5jb3JyZWxhdGlvbj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7IkFQUF9LRVlfTk9UX1NFVCIhPT1hLmNvbmYuYXBwS2V5fHxhLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuQURFVU1fanNfaGFuZGxlcil8fAphLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cud2Via2l0KXx8eC5sb2coIkFwcER5bmFtaWNzIEVVTSBjbG91ZCBhcHBsaWNhdGlvbiBrZXkgbWlzc2luZy4gUGxlYXNlIHNwZWNpZnkgd2luZG93WydhZHJ1bS1hcHAta2V5J10iKTthLmNvcnJlbGF0aW9uLmNmKGRvY3VtZW50LmNvb2tpZSxkb2N1bWVudC5yZWZlcnJlcik7YS5jb21tYW5kKCJtYXJrIiwiZmlyc3RieXRlIix3aW5kb3dbImFkcnVtLXN0YXJ0LXRpbWUiXSk7YS5tb25pdG9yLnNldFVwTW9uaXRvcnMoYS5tb25pdG9yLmdhLGEubW9uaXRvci50aixhLm1vbml0b3IuZG9tRXZlbnRzTW9uaXRvcixhLm1vbml0b3IubmF2TW9uaXRvcixhLm1vbml0b3IueGhyTW9uaXRvcixhLm1vbml0b3IucmVzb3VyY2VNb25pdG9yKTthLmNvbmYuZmV0Y2gmJiFhLmNvbmYuaXNab25lUHJvbWlzZSYmKGEuRGkuc2V0VXAoKSxhLm1vbml0b3Iuc2V0VXBNb25pdG9ycyhhLm1vbml0b3IuaWIpKTthLmNvbmYuc3BhMiYmYS5jb25mLm1vZGVybkJyb3dzZXJGZWF0dXJlc0F2YWlsYWJsZSYmCmEubW9uaXRvci5zZXRVcE1vbml0b3JzKGEubW9uaXRvci5iaik7YS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiZhLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuTXV0YXRpb25PYnNlcnZlcikmJihhLmoubi5KLlNnKCksYS5qLm4uc3RhcnQoYS51dGlscy5oYigpKSxhLk4uc3RhcnQoKSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXthPWEubmd8fChhLm5nPXt9KTthPWEua3x8KGEuaz17fSk7YS5YZj0ibG9jYXRpb25DaGFuZ2VTdGFydCI7YS50bD0ibG9jYXRpb25DaGFuZ2VTdWNjZXNzIjthLkpnPSJyb3V0ZUNoYW5nZVN0YXJ0IjthLktnPSJyb3V0ZUNoYW5nZVN1Y2Nlc3MiO2EuWGc9InN0YXRlQ2hhbmdlU3RhcnQiO2EuWWc9InN0YXRlQ2hhbmdlU3VjY2VzcyI7YS5raD0idmlld0NvbnRlbnRMb2FkZWQiO2EuQ2s9ImluY2x1ZGVDb250ZW50UmVxdWVzdGVkIjthLkJrPSJpbmNsdWRlQ29udGVudExvYWRlZCI7YS5hZj0iZGlnZXN0IjthLmlvPSJvdXRzdGFuZGluZ1JlcXVlc3RzQ29tcGxldGUiOwphLk5lPSJiZWZvcmVOZ1hoclJlcXVlc3RlZCI7YS5EZT0iYWZ0ZXJOZ1hoclJlcXVlc3RlZCI7YS5obz0ibmdYaHJMb2FkZWQiO2EuUmU9IiQkY29tcGxldGVPdXRzdGFuZGluZ1JlcXVlc3QifSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGwoYSxjLGUsbSxsLGspe2lmKGMpdHJ5e3JldHVybiBjLmFwcGx5KGEsW2UsbSxsXS5jb25jYXQoaykpfWNhdGNoKHApe3JldHVybiBhLmVycm9yKGUsbSxsLGssYi5FcnJvci5YaCwiTTIzNyIscCl9fWZ1bmN0aW9uIGUoYSxjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnQsbT1jW2VdfHxjW2IuR2JdfHxlLGs9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtpZih0aGlzLnJqKGEpKXJldHVybiB0aGlzLmVycm9yKGEsZSxtLGssYi5FcnJvci5ZaCwiZXZlbnQgIithKyJNMjM4Iit0aGlzLmN1cnJlbnQpO2lmKCExPT09bCh0aGlzLHRoaXNbIm9uYmVmb3JlIithXSwKYSxlLG0saykpcmV0dXJuIGIuRmIuWGQ7bT09PWIuR2ImJihtPWUpO2lmKGU9PT1tKXJldHVybiBsKHRoaXMsdGhpc1sib25hZnRlciIrYV18fHRoaXNbIm9uIithXSxhLGUsbSxrKSxiLkZiLnhpO3ZhciB0PXRoaXM7dGhpcy50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7dC50cmFuc2l0aW9uPW51bGw7dC5jdXJyZW50PW07bCh0LHRbIm9uZW50ZXIiK21dfHx0WyJvbiIrbV0sYSxlLG0sayk7bCh0LHRbIm9uYWZ0ZXIiK2FdfHx0WyJvbiIrYV0sYSxlLG0sayk7cmV0dXJuIGIuRmIuSWl9O2lmKCExPT09bCh0aGlzLHRoaXNbIm9ubGVhdmUiK2VdLGEsZSxtLGspKXJldHVybiB0aGlzLnRyYW5zaXRpb249bnVsbCxiLkZiLlhkO2lmKHRoaXMudHJhbnNpdGlvbilyZXR1cm4gdGhpcy50cmFuc2l0aW9uKCl9fXZhciBjPWEudXRpbHMuaGFzT3duUHJvcGVydHlEZWZpbmVkO2IuVkVSU0lPTj0iMi4zLjUiO2IuRmI9e0lpOjEseGk6MixYZDozLHJuOjR9O2IuRXJyb3I9e1loOjEwMCxzbjoyMDAsClhoOjMwMH07Yi5HYj0iKiI7Yi5jcmVhdGU9ZnVuY3Rpb24oYSxmKXtmdW5jdGlvbiBuKGEpe3ZhciBjPWEuZnJvbSBpbnN0YW5jZW9mIEFycmF5P2EuZnJvbTphLmZyb20/W2EuZnJvbV06W2IuR2JdO3JbYS5uYW1lXT1yW2EubmFtZV18fHt9O2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXNbY1tmXV09c1tjW2ZdXXx8W10sc1tjW2ZdXS5wdXNoKGEubmFtZSksclthLm5hbWVdW2NbZl1dPWEudG98fGNbZl19dmFyIG09InN0cmluZyI9PXR5cGVvZiBhLmluaXRpYWw/e3N0YXRlOmEuaW5pdGlhbH06YS5pbml0aWFsLGw9Znx8YS50YXJnZXR8fHt9LGs9YS5ldmVudHN8fFtdLHA9YS5jYWxsYmFja3N8fHt9LHI9e30scz17fTttJiYobS5ldmVudD1tLmV2ZW50fHwic3RhcnR1cCIsbih7bmFtZTptLmV2ZW50LGZyb206Im5vbmUiLHRvOm0uc3RhdGV9KSk7Zm9yKHZhciB3PTA7dzxrLmxlbmd0aDt3KyspbihrW3ddKTtmb3IodmFyIEEgaW4gciljKHIsQSkmJihsW0FdPWUoQSxyW0FdKSk7CmZvcihBIGluIHApYyhwLEEpJiYobFtBXT1wW0FdKTtsLmN1cnJlbnQ9Im5vbmUiO2wuU249ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT8wPD1hLmluZGV4T2YodGhpcy5jdXJyZW50KTp0aGlzLmN1cnJlbnQ9PT1hfTtsLnFqPWZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLnRyYW5zaXRpb24mJihjKHJbYV0sdGhpcy5jdXJyZW50KXx8YyhyW2FdLGIuR2IpKX07bC5yaj1mdW5jdGlvbihhKXtyZXR1cm4hdGhpcy5xaihhKX07bC5uYz1mdW5jdGlvbigpe3JldHVybiBzW3RoaXMuY3VycmVudF19O2wuZXJyb3I9YS5lcnJvcnx8ZnVuY3Rpb24oYSxiLGMsZixoLG0sZSl7dGhyb3cgZXx8bTt9O2lmKG0mJiFtLmRlZmVyKWxbbS5ldmVudF0oKTtyZXR1cm4gbH19KShhLndlfHwoYS53ZT17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGMoYil7Yj1lLmNhbGwodGhpcyxiKXx8dGhpczthLnV0aWxzLmlzRGVmaW5lZChhLm5nKSYmCmIuY29uc3RydWN0b3IhPWEubmcuTmdWUGFnZVZpZXcmJmIuY29uc3RydWN0b3IhPWMmJmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLlZQYWdlVmlldyIsW10pO2lmKGEuY29uZi5zcGEyKXJldHVybiBiO2IucGVyZj1uZXcgYS5QZXJmb3JtYW5jZVRyYWNrZXI7Yi5zdGFydCgpO2EubW9uaXRvci54aHJNb25pdG9yLmZjKCk7YS5tb25pdG9yLmliLmZjKCk7YS5tb25pdG9yLmdhLmVtKCk7cmV0dXJuIGJ9dihjLGUpO2MucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudFR5cGUuVlBhZ2VWaWV3fTtjLnByb3RvdHlwZS5XYz1mdW5jdGlvbigpe3JldHVybiBiLkV2ZW50VHJhY2tlci5EYyh0aGlzLmd1aWQoKSx0aGlzLnVybCgpLHRoaXMudHlwZSgpKX07Yy5wcm90b3R5cGUuVmc9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5XYygpO2Iuc2V0KCJwYXJlbnQiLGMpO2EubG9nKCJNMjM5IixjLmd1aWQoKSxjLnVybCgpKX07Yy5wcm90b3R5cGUuc3RhcnRDb3JyZWxhdGluZ1hocnM9CmZ1bmN0aW9uKCl7YS5jb25mLnNwYTJ8fChhLmxvZygiTTI0MCIpLHRoaXMuVmcoYS5tb25pdG9yLnhock1vbml0b3IpKX07Yy5wcm90b3R5cGUuc3RvcENvcnJlbGF0aW5nWGhycz1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwoYS5tb25pdG9yLnhock1vbml0b3Iuc2V0KCJwYXJlbnQiLG51bGwpLGEubG9nKCJNMjQxIikpfTtjLnByb3RvdHlwZS5GZD1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwoYS5sb2coIk0yNDIiKSx0aGlzLlZnKGEubW9uaXRvci5nYSkpfTtjLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwodGhpcy5tYXJrVmlydHVhbFBhZ2VTdGFydCgpLHRoaXMuc3RhcnRDb3JyZWxhdGluZ1hocnMoKSl9O2MucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwodGhpcy5tYXJrVmlydHVhbFBhZ2VFbmQoKSx0aGlzLnN0b3BDb3JyZWxhdGluZ1hocnMoKSl9O3JldHVybiBjfShiLkV2ZW50VHJhY2tlcik7Yi5WUGFnZVZpZXc9bDtiLk1hKGIuVFthLkV2ZW50VHlwZS5WUGFnZVZpZXddLApsLnByb3RvdHlwZSk7Yi5JZShiLm1ldHJpY1NwZWNbYS5FdmVudFR5cGUuVlBhZ2VWaWV3XSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXt2YXIgYj1hLm5nfHwoYS5uZz17fSksYj1iLmNvbmZ8fChiLmNvbmY9e30pO2IuZGlzYWJsZWQ9YS5jb25mLnVzZXJDb25mJiZhLmNvbmYudXNlckNvbmYuc3BhJiZhLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXImJmEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhci5kaXNhYmxlO2IuZGlzdGluZ3Vpc2hWUHdpdGhJdHNUZW1wbGF0ZVVybD1hLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5zcGEmJmEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhciYmITA9PT1hLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXIuZGlzdGluZ3Vpc2hWUHdpdGhJdHNUZW1wbGF0ZVVybD8hMDohMTtiLnhocj17fTtiLm1ldHJpY3M9e2luY2x1ZGVSZXNUaW1pbmdJbkVuZFVzZXJSZXNwb25zZVRpbWluZzohMH07CmEuY29uZi51c2VyQ29uZiYmYS5jb25mLnVzZXJDb25mLnNwYSYmYS5jb25mLnVzZXJDb25mLnNwYS5hbmd1bGFyJiZhLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXIudnAmJihhLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXIudnAueGhyJiZhLnV0aWxzLnVhLnRnKGEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhci52cC54aHIpLGEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhci52cC5tZXRyaWNzJiZhLnV0aWxzLm1lcmdlSlNPTihiLm1ldHJpY3MsYS5jb25mLnVzZXJDb25mLnNwYS5hbmd1bGFyLnZwLm1ldHJpY3MpKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLm1hcCxlPWEudXRpbHMucmVkdWNlLGM9YS51dGlscy5maWx0ZXIsaD1mdW5jdGlvbihmKXtmdW5jdGlvbiBoKGIpe2I9Zi5jYWxsKHRoaXMsYil8fHRoaXM7Yi5OZj0hMDtiLnViPXt9O2IuVmE9MDtiLkNvPVtdO2IuZGlnZXN0Q291bnQoMCk7aWYoYi5jb25zdHJ1Y3RvciE9CmgpcmV0dXJuIGEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLkFqYXgiLFtdKSxiO2Iuc3RvcENvcnJlbGF0aW5nWGhycygpO3JldHVybiBifXYoaCxmKTtoLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnRUeXBlLlZQYWdlVmlld307aC5wcm90b3R5cGUuVGQ9ZnVuY3Rpb24oKXt0aGlzLm1hcmtWaWV3Q2hhbmdlU3RhcnQoKTt0aGlzLm1hcmtWaXJ0dWFsUGFnZVN0YXJ0KHRoaXMuZ2V0Vmlld0NoYW5nZVN0YXJ0KCkpO3RoaXMudGltZXN0YW1wKHRoaXMuZ2V0Vmlld0NoYW5nZVN0YXJ0KCkpfTtoLnByb3RvdHlwZS5Eaz1mdW5jdGlvbigpe3RoaXMuZGlnZXN0Q291bnQodGhpcy5kaWdlc3RDb3VudCgpKzEpfTtoLnByb3RvdHlwZS5Faz1mdW5jdGlvbigpe3RoaXMuVmErKzthLmxvZygiTTI0MyIsdGhpcy5WYSl9O2gucHJvdG90eXBlLnpqPWZ1bmN0aW9uKCl7dGhpcy5WYS0tO2EubG9nKCJNMjQ0Iix0aGlzLlZhKX07aC5wcm90b3R5cGUueWs9CmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wZXJmLmdldEVudHJ5QnlOYW1lKGEuZXZlbnRzLmIuc2gpO2EubG9nKCJNMjQ1Iix0aGlzLlZhLGIpO3JldHVybiAwPHRoaXMuVmF9O2gucHJvdG90eXBlLm1qPWZ1bmN0aW9uKCl7dmFyIGE9e21jOjB9LGI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgibmctdmlldywgW25nLXZpZXddLCAubmctdmlldywgW3VpLXZpZXddIiksYj1sKGIsYW5ndWxhci5lbGVtZW50KSxjO2ZvcihjIGluIGguR2cpe3ZhciBmPWguR2dbY107bChiLGZ1bmN0aW9uKGIpe2I9Yi5maW5kKGMpO2woYixmdW5jdGlvbihiKXtpZihiPWJbZl0pYj1kZWNvZGVVUklDb21wb25lbnQoYiksYVtiXXx8KGFbYl09YyxhLm1jKyspfSl9KX10aGlzLnViPWF9O2gucHJvdG90eXBlLmtqPWZ1bmN0aW9uKGEpe3JldHVybiEhdGhpcy51YltkZWNvZGVVUklDb21wb25lbnQoYS5uYW1lKV19O2gucHJvdG90eXBlLm5qPWZ1bmN0aW9uKCl7dmFyIGI9W10sYz10aGlzOzA8dGhpcy51Yi5tYyYmCihiPWEubW9uaXRvci5yZXNvdXJjZU1vbml0b3IuamIoKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGMua2ooYSl9KSk7dGhpcy5yZXNUaW1pbmcoYil9O2guUGo9ZnVuY3Rpb24oYil7cmV0dXJuIGMoYixmdW5jdGlvbihiKXtyZXR1cm4oYi5ldmVudFR5cGU9PT1hLkV2ZW50VHlwZS5BamF4fHxiLmV2ZW50VHlwZT09PWEuRXZlbnRUeXBlLkFEUlVNX1hIUikmJiFhLnV0aWxzLnVhLmxjKGIuZXZlbnRVcmwsYi5tZXRob2QpfSl9O2guaGs9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSxmdW5jdGlvbihhLGIpe3JldHVybiBNYXRoLm1heChhLGIudGltZXN0YW1wK2IubWV0cmljcy5QTFQpfSwtMSl9O2gucHJvdG90eXBlLlppPWZ1bmN0aW9uKCl7aWYoYi5jb25mLnhocil7dmFyIGM9aC5QaihhLmNoYW5uZWwuZ2V0RXZlbnRzV2l0aFBhcmVudEdVSUQodGhpcy5ndWlkKCkpKSxjPWguaGsoYyk7aWYoMDxjKXt2YXIgZj10aGlzLnBlcmYuZ2V0RW50cnlCeU5hbWUoYS5ldmVudHMuYi5zaCk7CnRoaXMubWFya1hoclJlcXVlc3RzQ29tcGxldGVkKE1hdGgubWluKGYmJmYuc3RhcnRUaW1lfHxOdW1iZXIuTUFYX1ZBTFVFLGMpKX19fTtoLnByb3RvdHlwZS5hZGp1c3RUaW1pbmdzPWZ1bmN0aW9uKCl7dGhpcy5aaSgpO3ZhciBjPXRoaXMuZ2V0Vmlld0RPTUxvYWRlZCgpLGY9dGhpcy5nZXRYaHJSZXF1ZXN0c0NvbXBsZXRlZCgpLGM9TWF0aC5tYXgoYyxmKTtiLmNvbmYubWV0cmljcy5pbmNsdWRlUmVzVGltaW5nSW5FbmRVc2VyUmVzcG9uc2VUaW1pbmcmJih0aGlzLllpKCksZj10aGlzLmdldFZpZXdSZXNvdXJjZXNMb2FkZWQoKSxmPU1hdGgubWF4KGMsZiksYS5sb2coIk0yNDYiLGMsZiksYz1mKTt0aGlzLm1hcmtWaXJ0dWFsUGFnZUVuZChjKX07aC5wcm90b3R5cGUuWWk9ZnVuY3Rpb24oKXtpZigwPHRoaXMudWIubWMpe3RoaXMubmooKTt2YXIgYj10aGlzLnJlc1RpbWluZygpO2ImJmIubGVuZ3RoPj10aGlzLnViLm1jJiYoYj1lKGIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWF0aC5tYXgoYSwKYi5yZXNwb25zZUVuZCl9LDApLHRoaXMubWFya1ZpZXdSZXNvdXJjZXNMb2FkZWQoYS5QZXJmb3JtYW5jZVRyYWNrZXIuSWMoYikpKX19O2gucHJvdG90eXBlLmlkZW50aWZpZXI9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5taDthLnV0aWxzLmlzRGVmaW5lZChiKSYmKHRoaXMubWg9aC5OaihiKSx0aGlzLnVybCh0aGlzLm1oLnVybCkpO3JldHVybiBjfTtoLk5qPWZ1bmN0aW9uKGIpe3ZhciBjPXt9O2ImJmIuTT8oYy5NPXt0ZDoiIn0sYS51dGlscy5tZXJnZUpTT04oYy5NLHt0ZDpiLk0ub3JpZ2luYWxQYXRoLHZiOmIuTS50ZW1wbGF0ZSx3YjpiLk0udGVtcGxhdGVVcmx9KSk6YiYmYi5zdGF0ZSYmKGMuc3RhdGU9e3VybDoiIn0sYS51dGlscy5tZXJnZUpTT04oYy5zdGF0ZSx7dXJsOmIuc3RhdGUudXJsLG5hbWU6Yi5zdGF0ZS5uYW1lLHZiOmIuc3RhdGUudGVtcGxhdGUsd2I6Yi5zdGF0ZS50ZW1wbGF0ZVVybH0pKTtyZXR1cm4gY307cmV0dXJuIGh9KGEuZXZlbnRzLlZQYWdlVmlldyk7CmguR2c9e2ltZzoic3JjIixzY3JpcHQ6InNyYyIsbGluazoiaHJlZiJ9O2IuTmdWUGFnZVZpZXc9aDthLmV2ZW50cy5NYShhLmV2ZW50cy5UW2EuRXZlbnRUeXBlLk5HX1ZJUlRVQUxfUEFHRV0saC5wcm90b3R5cGUpfSkoYS5uZ3x8KGEubmc9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLkE9bmV3IGIuTmdWUGFnZVZpZXd9ZS5wcm90b3R5cGUubG09ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGg9dGhpcy5BO2IuY29uZi5tZXRyaWNzLmluY2x1ZGVSZXNUaW1pbmdJbkVuZFVzZXJSZXNwb25zZVRpbWluZz8oYS5sb2coIk0yNDciKSxhLnV0aWxzLm9TVE8oZnVuY3Rpb24oKXtjLnlkKGgpfSxlLktpKSk6YS51dGlscy5vU1RPKGZ1bmN0aW9uKCl7Yy55ZChoKX0sZS5MaSl9O2UucHJvdG90eXBlLnlkPWZ1bmN0aW9uKGIpe2EubG9nKCJNMjQ4Iik7Yi5wYXJlbnQoYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKTsKYS5jb21tYW5kKCJjYWxsIixmdW5jdGlvbigpe2IuYWRqdXN0VGltaW5ncygpO2EucmVwb3J0ZXIucmVwb3J0RXZlbnQoYil9KX07ZS5wcm90b3R5cGUuc209ZnVuY3Rpb24oYSl7dGhpcy5BPWF9O3JldHVybiBlfSgpO2wuS2k9NUUzO2wuTGk9MiphLm1vbml0b3IuWEhSTW9uaXRvci5iZTtiLlZpcnR1YWxQYWdlU3RhdGVNYWNoaW5lPWw7YS53ZS5jcmVhdGUoe2V2ZW50czpbe25hbWU6InN0YXJ0Iixmcm9tOiJub25lIix0bzoiQ2hhbmdlVmlldyJ9LHtuYW1lOiJ2aWV3TG9hZGVkIixmcm9tOiJDaGFuZ2VWaWV3Iix0bzoiWGhyUGVuZGluZyJ9LHtuYW1lOiJ4aHJDb21wbGV0ZWQiLGZyb206IlhoclBlbmRpbmciLHRvOiJFbmQifSx7bmFtZToiYWJvcnQiLGZyb206IioiLHRvOiJub25lIn0se25hbWU6ImluaXQiLGZyb206IioiLHRvOiJub25lIn0se25hbWU6ImxvY0NoYW5nZSIsZnJvbToiKiIsdG86IioifSx7bmFtZToiYmVmb3JlWGhyUmVxIixmcm9tOiIqIix0bzoiKiJ9LHtuYW1lOiJhZnRlclhoclJlcSIsCmZyb206IioiLHRvOiIqIn1dLGVycm9yOmZ1bmN0aW9uKGIpe2EubG9nKCJNMjQ5IixiKX0sY2FsbGJhY2tzOntvbkNoYW5nZVZpZXc6ZnVuY3Rpb24oKXt0aGlzLkEuVGQoKTt0aGlzLkEuRmQoKX0sb252aWV3TG9hZGVkOmZ1bmN0aW9uKCl7dGhpcy5BLm1hcmtWaWV3RE9NTG9hZGVkKCl9LG9uWGhyUGVuZGluZzpmdW5jdGlvbigpe3RoaXMuQS5OZiYmdGhpcy54aHJDb21wbGV0ZWQoKX0sb25sZWF2ZVhoclBlbmRpbmc6ZnVuY3Rpb24oYSxiLGgpe2lmKCJhYm9ydCI9PT1hKXJldHVybiB0aGlzLnlkKCksITA7aWYoInhockNvbXBsZXRlZCI9PT1hJiYiRW5kIj09PWgpe2lmKHRoaXMuQS55aygpKXJldHVybiExO3RoaXMuQS5tYXJrWGhyUmVxdWVzdHNDb21wbGV0ZWQoKTtyZXR1cm4hMH19LG9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5BLm1qKCk7dGhpcy5sbSgpfSxvbmluaXQ6ZnVuY3Rpb24oYixjLGgsZil7dGhpcy5zbShmKTthLm1vbml0b3IueGhyTW9uaXRvci5mYygpO2EubW9uaXRvci5pYi5mYygpfSwKb25sb2NDaGFuZ2U6ZnVuY3Rpb24oYSxiLGgsZil7dGhpcy5BLmlkZW50aWZpZXIudXJsPWY7dGhpcy5BLmtjKHt1cmw6Zn0pfSxvbmJlZm9yZVhoclJlcTpmdW5jdGlvbihiLGMsaCxmKXt2YXIgbj10aGlzLkE7bi5OZj0hMTthLmxvZygiTTI1MCIsZiYmZlsxXXx8IiIsbi5ndWlkKCkpO24uRWsoKTtuLnN0YXJ0Q29ycmVsYXRpbmdYaHJzKCk7ZlszXSYmKGZbM109YS5hb3AuYmVmb3JlKGZbM10sZnVuY3Rpb24oYixjLGYpe2EubG9nKCJNMjUxIik7bi56aigpO2YmJihiPWEudXRpbHMuT2woZilbImNvbnRlbnQtdHlwZSJdKSYmMDw9Yi5pbmRleE9mKCJ0ZXh0L2h0bWwiKSYmbi5tYXJrVmlld0ZyYWdtZW50c0xvYWRlZCgpfSkpO3JldHVybiBmfSxvbmFmdGVyWGhyUmVxOmZ1bmN0aW9uKCl7dGhpcy5BLnN0b3BDb3JyZWxhdGluZ1hocnMoKX19fSxsLnByb3RvdHlwZSl9KShhLm5nfHwoYS5uZz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPQpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLk89bmV3IGIuVmlydHVhbFBhZ2VTdGF0ZU1hY2hpbmU7dGhpcy5kaXN0aW5ndWlzaFZQd2l0aEl0c1RlbXBsYXRlVXJsPWEubmcuY29uZi5kaXN0aW5ndWlzaFZQd2l0aEl0c1RlbXBsYXRlVXJsfWUucHJvdG90eXBlLlM9ZnVuY3Rpb24oYyxoKXthLmxvZygiTTI1MiIsYyk7c3dpdGNoKGMpe2Nhc2UgYi5rLkpnOmNhc2UgYi5rLlhnOnRoaXMuTy5zdGFydCgpO3ZhciBmPWgubmV4dC51cmx8fGRvY3VtZW50LlVSTCxuPW5ldyBiLk5nVlBhZ2VWaWV3KHt1cmw6ZixpZGVudGlmaWVyOmgubmV4dH0pO3RoaXMuZGlzdGluZ3Vpc2hWUHdpdGhJdHNUZW1wbGF0ZVVybCYmZS5aayh0aGlzLk8uQSxuKT90aGlzLk8uQS5rYyh7dXJsOmYsaWRlbnRpZmllcjpoLm5leHR9KTp0aGlzLkdtKG4pO2JyZWFrO2Nhc2UgYi5rLktnOmNhc2UgYi5rLllnOnRoaXMuTy5BLm1hcmtWaWV3Q2hhbmdlRW5kKCk7YnJlYWs7Y2FzZSBiLmsua2g6dGhpcy5PLnZpZXdMb2FkZWQoKTsKYnJlYWs7Y2FzZSBiLmsuTmU6dGhpcy5PLmJlZm9yZVhoclJlcShoKTticmVhaztjYXNlIGIuay5EZTp0aGlzLk8uYWZ0ZXJYaHJSZXEoKTticmVhaztjYXNlIGIuay5SZTp0aGlzLk8ueGhyQ29tcGxldGVkKCk7YnJlYWs7Y2FzZSBiLmsuWGY6dGhpcy5PLkEua2Moe3VybDpoLm5leHQudXJsfSk7dGhpcy5PLmxvY0NoYW5nZShoLm5leHQudXJsKTticmVhaztjYXNlIGIuay5hZjp0aGlzLk8uQS5EaygpfX07ZS5wcm90b3R5cGUuR209ZnVuY3Rpb24oYSl7dGhpcy5PLmFib3J0KCk7dGhpcy5PLmluaXQoYSk7dGhpcy5PLnN0YXJ0KCl9O2UuWms9ZnVuY3Rpb24oYixoKXt2YXIgZj1iLmlkZW50aWZpZXIoKSxlPWguaWRlbnRpZmllcigpLG09ITE7cmV0dXJuIG09IWEudXRpbHMuaXNEZWZpbmVkKGYpJiYhYS51dGlscy5pc0RlZmluZWQoZSl8fGY9PT1lPyEwOmEudXRpbHMuaXNEZWZpbmVkKGYpJiZhLnV0aWxzLmlzRGVmaW5lZChlKT9mLnN0YXRlfHxlLnN0YXRlP2EudXRpbHMuaXNEZWZpbmVkKGYuc3RhdGUpJiYKYS51dGlscy5pc0RlZmluZWQoZS5zdGF0ZSk/Zi5zdGF0ZS5uYW1lPT09ZS5zdGF0ZS5uYW1lJiZmLnN0YXRlLnZiPT09ZS5zdGF0ZS52YiYmZi5zdGF0ZS53Yj09PWUuc3RhdGUud2ImJmYuc3RhdGUudXJsPT09ZS5zdGF0ZS51cmw6ITE6Zi5NJiZlLk0/Zi5NLnRkPT09ZS5NLnRkJiZmLk0udmI9PT1lLk0udmImJmYuTS53Yj09PWUuTS53YjpmLnVybD09PWUudXJsOiExfTtyZXR1cm4gZX0oKTtiLk1pPWx9KShhLm5nfHwoYS5uZz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWEudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcixlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe3RoaXMuVT1uZXcgYi5NaTt0aGlzLkZmPSExfWMucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihoKXtyZXR1cm4gZnVuY3Rpb24oKXthLmxvZyhoKTtjLmluaXQoKX19dmFyIGM9dGhpcztiKCJNMjUzIikoKTtsKGRvY3VtZW50LCJET01Db250ZW50TG9hZGVkIiwKYigiTTI1NCIpKTtsKHdpbmRvdywibG9hZCIsYigiTTI1NSIpKX07Yy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2lmKCJsb2FkaW5nIj09PWRvY3VtZW50LnJlYWR5U3RhdGUpYS5sb2coIk0yNTYiKTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2YgYW5ndWxhciYmIXRoaXMuRmYpe3RoaXMuRmY9ITA7YS5sb2coIk0yNTciKTt2YXIgYj10aGlzLGM9YW5ndWxhci5tb2R1bGUoIm5nIik7Yy5jb25maWcoWyIkcHJvdmlkZSIsZnVuY3Rpb24oYSl7Yi5UayhhKTtiLk9rKGEpfV0pO2MucnVuKFsiJGJyb3dzZXIiLGZ1bmN0aW9uKGEpe2IuTGsoYSl9XSk7YS5sb2coIk0yNTgiKX19O2MucHJvdG90eXBlLk9rPWZ1bmN0aW9uKGMpe3ZhciBmPWEuYW9wLGU9dGhpcztjLmRlY29yYXRvcigiJGh0dHBCYWNrZW5kIixbIiRkZWxlZ2F0ZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9Zi5hcm91bmQoYSxmdW5jdGlvbigpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CmUuVS5TKGIuay5OZSxhKTtyZXR1cm4gYX0sZnVuY3Rpb24oKXtlLlUuUyhiLmsuRGUpfSwibmcuaHR0cEJhY2tlbmQiKX1dKX07Yy5wcm90b3R5cGUuVGs9ZnVuY3Rpb24oYyl7dmFyIGY9YS5hb3AsZT10aGlzO2MuZGVjb3JhdG9yKCIkcm9vdFNjb3BlIixbIiRkZWxlZ2F0ZSIsZnVuY3Rpb24oYSl7YS4kZGlnZXN0PWYuYWZ0ZXIoYS4kZGlnZXN0LGZ1bmN0aW9uKCl7ZS5VLlMoYi5rLmFmKX0sIm5nZXZlbnRzLmRpZ2VzdCIpO2EuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdGFydCIsZnVuY3Rpb24oYSxjKXt2YXIgZj17dXJsOmN9LGg9YSYmYS5nYiYmYS5nYi4kc3RhdGUmJmEuZ2IuJHN0YXRlLmN1cnJlbnQ7aCYmKGYuc3RhdGU9aCk7ZS5VLlMoYi5rLlhmLHtuZXh0OmZ9KX0pO2EuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdWNjZXNzIixmdW5jdGlvbigpe2UuVS5TKGIuay50bCl9KTthLiRvbigiJHJvdXRlQ2hhbmdlU3RhcnQiLGZ1bmN0aW9uKGEsYyl7dmFyIGY9e3VybDpsb2NhdGlvbi5ocmVmfSwKaD1jJiZjLiQkcm91dGU7aCYmKGYuTT1oKTtlLlUuUyhiLmsuSmcse25leHQ6Zn0pfSk7YS4kb24oIiRyb3V0ZUNoYW5nZVN1Y2Nlc3MiLGZ1bmN0aW9uKCl7ZS5VLlMoYi5rLktnKX0pO2EuJG9uKCIkc3RhdGVDaGFuZ2VTdGFydCIsZnVuY3Rpb24oYSxjKXtlLlUuUyhiLmsuWGcse25leHQ6e3N0YXRlOmN9fSl9KTthLiRvbigiJHN0YXRlQ2hhbmdlU3VjY2VzcyIsZnVuY3Rpb24oKXtlLlUuUyhiLmsuWWcpfSk7YS4kb24oIiR2aWV3Q29udGVudExvYWRlZCIsZnVuY3Rpb24oYSl7dmFyIGM9e3VybDpsb2NhdGlvbi5ocmVmfTtpZihhPWEmJmEuZ2ImJmEuZ2IuJHN0YXRlJiZhLmdiLiRzdGF0ZS5jdXJyZW50KWMuc3RhdGU9YTtlLlUuUyhiLmsua2gse25leHQ6Y30pfSk7YS4kb24oIiRpbmNsdWRlQ29udGVudFJlcXVlc3RlZCIsZnVuY3Rpb24oKXtlLlUuUyhiLmsuQ2spfSk7YS4kb24oIiRpbmNsdWRlQ29udGVudExvYWRlZCIsZnVuY3Rpb24oKXtlLlUuUyhiLmsuQmspfSk7cmV0dXJuIGF9XSl9OwpjLnByb3RvdHlwZS5Maz1mdW5jdGlvbihjKXt2YXIgZj10aGlzO2MuJCRjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdD1hLmFvcC5iZWZvcmUoYy4kJGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0LGZ1bmN0aW9uKCl7Zi5VLlMoYi5rLlJlKX0pfTtyZXR1cm4gY30oKTtiLm1uPWU7Yi5uZ01vbml0b3I9bmV3IGV9KShhLm5nfHwoYS5uZz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS5uZ3x8KGEubmc9e30pO2IuY29uZi5kaXNhYmxlZHx8YS5jb25mLnNwYTJ8fGEubW9uaXRvci5zZXRVcE1vbml0b3JzKGIubmdNb25pdG9yKX0pKGt8fChrPXt9KSl9fTt9KSgpOwo=(Line 28)
Message:
Refused to load the script 'https://tags.tiqcdn.com/utag/usbank/prepaid/prod/utag.5.js?utv=ut4.46.202006120224' because it violates the following Content Security Policy directive: "script-src 'unsafe-inline' data:". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
security error URL: data:application/javascript;base64,Oy8qIFZlcnNpb24gYTVlOTIxZWFiMmRkZTJjNWFiNGI3OWVhNjM2YjgyNzEgdjo0LjUuMTcuMjg5MCwgYzo5MWQ3NTI1ZDdkOTk4MmYzZGQ3MTUxN2QzYjQ5MGU3ODFhYjM4OWM4LCBiOjQuNS4xNy4yODkwICovKGZ1bmN0aW9uKCl7bmV3IGZ1bmN0aW9uKCl7aWYoIXdpbmRvdy5BRFJVTSYmITAhPT13aW5kb3dbImFkcnVtLWRpc2FibGUiXSl7dmFyIGs9d2luZG93LkFEUlVNPXt9LEI9d2luZG93LmNvbnNvbGUseD1CJiYiZnVuY3Rpb24iPT10eXBlb2YgQi5sb2c/Qjp7bG9nOmZ1bmN0aW9uKCl7fX07d2luZG93WyJhZHJ1bS1zdGFydC10aW1lIl09d2luZG93WyJhZHJ1bS1zdGFydC10aW1lIl18fChuZXcgRGF0ZSkuZ2V0VGltZSgpO3ZhciB2PXRoaXMmJnRoaXMuQWN8fGZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGEsbCl7YS5fX3Byb3RvX189bH18fGZ1bmN0aW9uKGEsbCl7Zm9yKHZhciBlIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShlKSYmKGFbZV09bFtlXSl9O3JldHVybiBmdW5jdGlvbihiLGwpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvbnN0cnVjdG9yPWJ9YShiLGwpO2IucHJvdG90eXBlPW51bGw9PT1sP09iamVjdC5jcmVhdGUobCk6CihlLnByb3RvdHlwZT1sLnByb3RvdHlwZSxuZXcgZSl9fSgpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYSl7YS5zZXRVcE1vbml0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVtdLGI9MDtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKWFbYl09YXJndW1lbnRzW2JdO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl07YyYmYy5zZXRVcCgpfX19KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXtmdW5jdGlvbiBsKGEpe3JldHVybiBiLnJlZnMuc2xpY2UuYXBwbHkoYSxiLnJlZnMuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfWZ1bmN0aW9uIGUoYSxtKXtyZXR1cm4gYyhiLnJlZnMuc2V0VGltZW91dC5hcHBseSk/Yi5yZWZzLnNldFRpbWVvdXQuYXBwbHkod2luZG93LGFyZ3VtZW50cyk6Yi5yZWZzLnNldFRpbWVvdXQoYSxtKX1mdW5jdGlvbiBjKGEpe3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIGEmJm51bGwhPT0KYX1mdW5jdGlvbiBoKGEpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYSYmIWIuaXNBcnJheShhKSYmbnVsbCE9PWF9ZnVuY3Rpb24gZihhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYXx8ITF9ZnVuY3Rpb24gbihhKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGF9ZnVuY3Rpb24gbShhKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGF9ZnVuY3Rpb24gcShhLGMpe2Zvcih2YXIgbSBpbiBjKXt2YXIgZj1jW21dO2lmKHQoYyxtKSl7dmFyIG49YVttXTtoKGYpJiZoKG4pP3EobixmKTpiLmlzQXJyYXkobikmJmIuaXNBcnJheShmKT9hW21dPW4uY29uY2F0KGYpOmFbbV09Zn19cmV0dXJuIGF9ZnVuY3Rpb24gdChhLGIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxiKSYmYyhhW2JdKX1mdW5jdGlvbiBwKGEpe3JldHVybiBuKGEpP2EucmVwbGFjZSgvXlxzKi8sIiIpLnJlcGxhY2UoL1xzKiQvLCIiKTphfWZ1bmN0aW9uIHIoKXtyZXR1cm4gYi5yZWZzLmthJiYKZihiLnJlZnMua2Eubm93KX1mdW5jdGlvbiBzKCl7cmV0dXJuIHIoKT9iLnJlZnMucm91bmQoYi5yZWZzLmthLm5vdygpK3coKSk6KG5ldyBEYXRlKS5nZXRUaW1lKCl9ZnVuY3Rpb24gdygpe3ZhciBhPWIucmVmcy5rYSxhPWEmJmEudGltaW5nJiZtKGEudGltaW5nLm5hdmlnYXRpb25TdGFydCk/YS50aW1pbmcubmF2aWdhdGlvblN0YXJ0OndpbmRvd1siYWRydW0tc3RhcnQtdGltZSJdO2MoYSl8fChhPXMoKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQShhLGIpe3ZhciBjPUFycmF5LnByb3RvdHlwZVthXTtyZXR1cm4gYz9rKGMpOkMoYSxiKX1mdW5jdGlvbiBrKGEpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYS5hcHBseShjLGIucmVmcy5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9fWZ1bmN0aW9uIEMoYSxiKXtyZXR1cm4gZnVuY3Rpb24obSxoKXtpZighYyhtKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQiKTtpZighZihoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGgrCiIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gYi5hcHBseShudWxsLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHkoYSxiLGMpe3ZhciBtPU9iamVjdChhKSxoPW0ubGVuZ3RoPj4+MCxmPTA7aWYoMz5hcmd1bWVudHMubGVuZ3RoKXtmb3IoO2Y8aCYmIShmIGluIG0pOylmKys7aWYoZj49aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7Yz1tW2YrK119Zm9yKDtmPGg7ZisrKWYgaW4gbSYmKGM9YihjLG1bZl0sZixtKSk7cmV0dXJuIGN9ZnVuY3Rpb24geihhLGMsbSl7cmV0dXJuIGIucmVkdWNlKGEsZnVuY3Rpb24oYSxiLGgsZil7YVtoXT1jLmNhbGwobSxiLGgsZik7cmV0dXJuIGF9LEFycmF5KGEubGVuZ3RoPj4+MCkpfWZ1bmN0aW9uIEQoYSxjLG0pe3JldHVybiBiLnJlZHVjZShhLGZ1bmN0aW9uKGEsYixoLGYpe2MuY2FsbChtLGIsaCxmKSYmYS5wdXNoKGIpO3JldHVybiBhfSxbXSl9ZnVuY3Rpb24gRShhLApiLGMpe2E9T2JqZWN0KGEpO2Zvcih2YXIgbT1hLmxlbmd0aD4+PjAsaD0wO2g8bTtoKyspaWYoaCBpbiBhJiZiLmNhbGwoYyxhW2hdLGgsYSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRihhLGMsbSl7cmV0dXJuIWIuc29tZShhLGZ1bmN0aW9uKGEpe3JldHVybiFjLmNhbGwobSxhKX0pfWZ1bmN0aW9uIEcoYSxjLG0pe2IucmVkdWNlKGEsZnVuY3Rpb24oYSxiLGgsZil7Yy5jYWxsKG0sYixoLGYpfSx2b2lkIDApfWIucmVmcz17aXNBcnJheTpBcnJheS5pc0FycmF5LHRvU3RyaW5nOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsc2xpY2U6QXJyYXkucHJvdG90eXBlLnNsaWNlLHNldFRpbWVvdXQ6d2luZG93LnNldFRpbWVvdXQsc2V0SW50ZXJ2YWw6d2luZG93LnNldEludGVydmFsLGthOndpbmRvdy5wZXJmb3JtYW5jZXx8d2luZG93Lm1velBlcmZvcm1hbmNlfHx3aW5kb3cubXNQZXJmb3JtYW5jZXx8d2luZG93LndlYmtpdFBlcmZvcm1hbmNlLGFzc2lnbjpPYmplY3QuYXNzaWduLApyb3VuZDpNYXRoLnJvdW5kfTtiLndhPWw7Yi5vU1RPPWU7Yi5pc0NPUlNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cuSlNPTiYmZihKU09OLnN0cmluZ2lmeSk7cmV0dXJuIGMod2luZG93LlhNTEh0dHBSZXF1ZXN0KSYmIndpdGhDcmVkZW50aWFscyJpbiBuZXcgWE1MSHR0cFJlcXVlc3QmJmF9O2IuaXNEZWZpbmVkPWM7Yi5jbD1mdW5jdGlvbihhKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBhJiYhd2luZG93LmlzTmFOKGEpfTtiLmlzQXJyYXk9ZihiLnJlZnMuaXNBcnJheSkmJmYoYi5yZWZzLmlzQXJyYXkuYmluZCk/Yi5yZWZzLmlzQXJyYXkuYmluZChBcnJheSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGIucmVmcy50b1N0cmluZy5jYWxsKGEpPT09Yi5yZWZzLnRvU3RyaW5nLmNhbGwoW10pfTtiLmlzT2JqZWN0PWg7Yi5pc0Z1bmN0aW9uPWY7Yi5pc1N0cmluZz1uO2IuaXNOdW1iZXI9bTtiLmlzQm9vbGVhbj1mdW5jdGlvbihhKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBhfTsKYi5tYXg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWF0aC5tYXgoaXNOYU4oYSk/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOmEsaXNOYU4oYik/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOmIpfTtiLmdjPWU7Yi5wbz1mdW5jdGlvbihhLGIpe2UoYSxifHwxRTQpfTtiLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYixjLG0saCl7ZnVuY3Rpb24gZigpe3RyeXtyZXR1cm4gbS5hcHBseSh0aGlzLGwoYXJndW1lbnRzKSl9Y2F0Y2goaCl7YS5leGNlcHRpb24oaCwiTTEiLGMsYixoKX19dm9pZCAwPT09aCYmKGg9ITEpO2EuaXNEZWJ1ZyYmYS5sb2coIk0wIixjLGIpO2YuST0hMDtiLmFkZEV2ZW50TGlzdGVuZXI/Yi5hZGRFdmVudExpc3RlbmVyKGMsZixoKTpiLmF0dGFjaEV2ZW50JiZiLmF0dGFjaEV2ZW50KCJvbiIrYyxmKX07Yi5sb2FkU2NyaXB0QXN5bmM9ZnVuY3Rpb24oYil7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Yy50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiOwpjLmFzeW5jPSEwO2Muc3JjPWI7dmFyIG09ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzBdO20/KG0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYyxtKSxhLmxvZygiTTIiLGIpKTphLmxvZygiTTMiLGIpfTtiLm1lcmdlSlNPTj1xO2IuaGFzT3duUHJvcGVydHlEZWZpbmVkPXQ7Yi5uZj1mdW5jdGlvbihhLGMpe2lmKGIuaXNGdW5jdGlvbihPYmplY3QuZ2V0UHJvdG90eXBlT2YpKWZvcig7Yi5pc0RlZmluZWQoYSkmJiF0KGEsYyk7KWE9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO3JldHVybiBhfTtiLmJuPWZ1bmN0aW9uKGEpe3JldHVybiBjKGEpP2IuaXNBcnJheShhKT9hOlthXTpbXX07Yi51bz1mdW5jdGlvbihhLGIpe3JldHVybiBudWxsIT1hJiZhLnNsaWNlKDAsYi5sZW5ndGgpPT1ifTtiLmdlbmVyYXRlR1VJRD1mdW5jdGlvbihhKXtyZXR1cm4gYyhhKSYmZihhLmdldFJhbmRvbVZhbHVlcykmJmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihhKXthPWEudG9TdHJpbmcoMTYpOwpyZXR1cm4iMDAwMCIuc3Vic3RyKGEubGVuZ3RoKSthfXZhciBjPW5ldyBVaW50MTZBcnJheSg4KTthLmdldFJhbmRvbVZhbHVlcyhjKTtyZXR1cm4gYihjWzBdKStiKGNbMV0pKyJfIitiKGNbMl0pKyJfIitiKGNbM10pKyJfIitiKGNbNF0pKyJfIitiKGNbNV0pK2IoY1s2XSkrYihjWzddKX19KHdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0byl8fGZ1bmN0aW9uKCl7cmV0dXJuInh4eHh4eHh4X3h4eHhfNHh4eF95eHh4X3h4eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9nLGZ1bmN0aW9uKGEpe3ZhciBiPTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oIngiPT1hP2I6YiYzfDgpLnRvU3RyaW5nKDE2KX0pfTtiLnRyeUV4dHJhY3RpbmdFcnJvclN0YWNrPWZ1bmN0aW9uKGEpe3JldHVybiBhPyhhPWEuc3RhY2spJiYic3RyaW5nIj09PXR5cGVvZiBhP2E6bnVsbDpudWxsfTtiLnRyaW09cDtiLk9sPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGMsbTtpZighYSlyZXR1cm4gYjt2YXIgaD0KYS5zcGxpdCgiXG4iKTtmb3IobT0wO208aC5sZW5ndGg7bSsrKXt2YXIgZj1oW21dO2M9Zi5pbmRleE9mKCI6Iik7YT1wKGYuc3Vic3RyKDAsYykpLnRvTG93ZXJDYXNlKCk7Yz1wKGYuc3Vic3RyKGMrMSkpO2EmJihiW2FdPWJbYV0/YlthXSsoIiwgIitjKTpjKX1yZXR1cm4gYn07Yi50cnlQZXJpb2RpY2FsbHk9ZnVuY3Rpb24oYSxiLGMsbSl7ZnVuY3Rpb24gaCgpe2lmKGIoKSljJiZjKCk7ZWxzZXt2YXIgbj1hKCsrZik7MDxuP2UoaCxuKTptJiZtKCl9fXZhciBmPTA7aCgpfTtiLk9lPWZ1bmN0aW9uKGEpe3JldHVybiBhLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc2xpY2UoMSl9O2Iub2c9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbYy0xXT1hcmd1bWVudHNbY107cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBjPVtdLG09MDttPGFyZ3VtZW50cy5sZW5ndGg7bSsrKWNbbV09YXJndW1lbnRzW21dO3JldHVybiBhLmFwcGx5KHRoaXMsCmIuY29uY2F0KGMpKX19O2IuVG49cjtiLm5vdz1zO2IuaGI9dztiLkNuPXk7Yi5yZWR1Y2U9QSgicmVkdWNlIix5KTtiLkJuPXo7Yi5tYXA9QSgibWFwIix6KTtiLnpuPUQ7Yi5maWx0ZXI9QSgiZmlsdGVyIixEKTtiLkRuPUU7Yi5zb21lPUEoInNvbWUiLEUpO2IueW49RjtiLmV2ZXJ5PUEoImV2ZXJ5IixGKTtiLkFuPUc7Yi5mb3JFYWNoPUEoImZvckVhY2giLEcpO2IuQ2o9ZnVuY3Rpb24oYSl7cmV0dXJuIGIuZmlsdGVyKGEsYyl9O2IuSG49ZnVuY3Rpb24oYSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGEpfTtiLlFpPWMod2luZG93LlJlZmxlY3QpJiZjKHdpbmRvdy5SZWZsZWN0LmNvbnN0cnVjdCk/ZnVuY3Rpb24oYixjLG0saCl7dHJ5e3JldHVybiBudWxsIT09Yz93aW5kb3cuUmVmbGVjdC5jb25zdHJ1Y3QoYyxtLGgpOmJ9Y2F0Y2goZil7cmV0dXJuIGEubW9uaXRvci5FcnJvck1vbml0b3IubChmKSxifX06ZnVuY3Rpb24oYixjLG0pe3RyeXtyZXR1cm4gbnVsbCE9PWMmJgpjLmFwcGx5KGIsbSl8fGJ9Y2F0Y2goaCl7cmV0dXJuIGEubW9uaXRvci5FcnJvck1vbml0b3IubChoKSxifX07Yi5BYz1mdW5jdGlvbigpe3ZhciBhPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oYSxiKXt2YXIgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKSxtO2ZvcihtIGluIGMpYVttXT1iW21dfTtyZXR1cm4gZnVuY3Rpb24oYixjKXtmdW5jdGlvbiBtKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ifWEoYixjKTtiLnByb3RvdHlwZT1udWxsPT09Yz9PYmplY3QuY3JlYXRlKGMpOihtLnByb3RvdHlwZT1jLnByb3RvdHlwZSxuZXcgbSl9fSgpO2IuTGo9ZnVuY3Rpb24oYSl7aWYoIWIuaXNTdHJpbmcoYSkpcmV0dXJuIGE7dmFyIGM9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwiJyI6IiYjMzk7IiwnIic6IiZxdW90OyIsIi8iOiImIzQ3OyJ9O3JldHVybiBhLnJlcGxhY2UoL1smPD4nIi9dL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbYV19KX07Yi55bz0KZnVuY3Rpb24oYSl7aWYoIWIuaXNTdHJpbmcoYSkpcmV0dXJuIGE7dmFyIGM9eyImYW1wOyI6IiYiLCImIzM4OyI6IiYiLCImI3gyNjsiOiImIiwiJmx0OyI6IjwiLCImIzYwOyI6IjwiLCImI3gzYzsiOiI8IiwiJmd0OyI6Ij4iLCImIzYyOyI6Ij4iLCImI3gzZTsiOiI+IiwiJmFwb3M7IjoiJyIsIiYjMzk7IjoiJyIsIiYjeDI3OyI6IiciLCImcXVvdDsiOiciJywiJiMzNDsiOiciJywiJiN4MjI7IjonIicsIiZzb2w7IjoiLyIsIiYjNDc7IjoiLyIsIiYjeDJmOyI6Ii8ifTtyZXR1cm4gYS5yZXBsYWNlKC8mKD86YW1wfCMwKjM4fCN4MCoyNnxsdHwjMCo2MHwjeDAqM2N8Z3R8IzAqNjJ8I3gwKjNlfGFwb3N8IzAqMzl8I3gwKjI3fHF1b3R8IzAqMzR8I3gwKjIyfHNvbHwjMCo0N3wjeDAqMmYpOy9nLGZ1bmN0aW9uKGEpe2E9YS5yZXBsYWNlKC8wK1xCL2csIiIpO3JldHVybiBjW2FdfSl9O2IueWo9ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcztiJiYKY2xlYXJUaW1lb3V0KGIpO2I9ZShmdW5jdGlvbigpe2EuYXBwbHkoYyxhcmd1bWVudHMpfSwzMDApfX19KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS5jb25mfHwoYS5jb25mPXt9KTtiLnVzZXJDb25mPXdpbmRvd1siYWRydW0tY29uZmlnIl18fHt9O2IudXNlSFRUUFNBbHdheXM9ITA9PT1iLnVzZXJDb25mLnVzZUhUVFBTQWx3YXlzO2IubW9kZXJuQnJvd3NlckZlYXR1cmVzQXZhaWxhYmxlPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSYmYS51dGlscy5pc0NPUlNTdXBwb3J0ZWQoKSYmYS51dGlscy5pc0RlZmluZWQoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpO2Iuc3BhMj1iLnVzZXJDb25mLnNwYSYmYi51c2VyQ29uZi5zcGEuc3BhMiYmKCEwPT09Yi51c2VyQ29uZi5zcGEuc3BhMnx8YS51dGlscy5pc09iamVjdChiLnVzZXJDb25mLnNwYS5zcGEyKSk7Yi5jbGVhclJlc1RpbWluZz1iLnVzZXJDb25mLnNwYSYmCmEudXRpbHMuaXNPYmplY3QoYi51c2VyQ29uZi5zcGEuc3BhMikmJmEudXRpbHMuaXNEZWZpbmVkKGIudXNlckNvbmYuc3BhLnNwYTIuY2xlYXJSZXNUaW1pbmcpP2IudXNlckNvbmYuc3BhLnNwYTIuY2xlYXJSZXNUaW1pbmc6ITA7Yi5kaXNhYmxlVGV4dEZvclRlc3Rpbmc9ITA9PT1iLnVzZXJDb25mLmRpc2FibGVUZXh0Rm9yVGVzdGluZztiLmVuYWJsZVByaW1hcnlNZXRyaWNzPSghYS51dGlscy5pc0RlZmluZWQoYi51c2VyQ29uZi5lbmFibGVQcmltYXJ5TWV0cmljcyl8fCEwPT09Yi51c2VyQ29uZi5lbmFibGVQcmltYXJ5TWV0cmljcykmJmIubW9kZXJuQnJvd3NlckZlYXR1cmVzQXZhaWxhYmxlO2IuZGV2TW9kZT0hMD09PWIudXNlckNvbmYuZGV2TW9kZTtiLmlzWm9uZVByb21pc2U9ITA9PT1iLnVzZXJDb25mLmlzWm9uZVByb21pc2V8fCEwPT09Yi51c2VyQ29uZi5hbmd1bGFyO2IuZmV0Y2g9IWEudXRpbHMuaXNEZWZpbmVkKGIudXNlckNvbmYuZmV0Y2gpfHwhMD09Yi51c2VyQ29uZi5mZXRjaDsKYi5iYWNrVGltZUdhcD1NYXRoLmFicyhiLnVzZXJDb25mLmJhY2tUaW1lR2FwKXx8MDtiLm5ldmVyU2VuZEltYWdlQmVhY29uPSFhLnV0aWxzLmlzRGVmaW5lZChiLnVzZXJDb25mLmJlYWNvbil8fCFhLnV0aWxzLmlzRGVmaW5lZChiLnVzZXJDb25mLmJlYWNvbi5uZXZlclNlbmRJbWFnZUJlYWNvbil8fCEwPT1iLnVzZXJDb25mLmJlYWNvbi5uZXZlclNlbmRJbWFnZUJlYWNvbjtiLmJlYWNvblVybEh0dHA9YS51dGlscy5pc0RlZmluZWQoYi51c2VyQ29uZi5iZWFjb25VcmxIdHRwKT9iLnVzZXJDb25mLmJlYWNvblVybEh0dHA6Imh0dHA6Ly9jb2wuZXVtLWFwcGR5bmFtaWNzLmNvbSI7Yi5iZWFjb25VcmxIdHRwcz1hLnV0aWxzLmlzRGVmaW5lZChiLnVzZXJDb25mLmJlYWNvblVybEh0dHBzKT9iLnVzZXJDb25mLmJlYWNvblVybEh0dHBzOiJodHRwczovL2NvbC5ldW0tYXBwZHluYW1pY3MuY29tIjtiLmNvcnNFbmRwb2ludFBhdGg9Ii9ldW1jb2xsZWN0b3IvYmVhY29ucy9icm93c2VyIisKKGIuc3BhMj8iL3YyIjoiL3YxIik7Yi5pbWFnZUVuZHBvaW50UGF0aD0iL2V1bWNvbGxlY3Rvci9hZHJ1bS5naWY/IjtiLmFwcEtleT1iLnVzZXJDb25mLmFwcEtleXx8d2luZG93WyJhZHJ1bS1hcHAta2V5Il18fCJBUFBfS0VZX05PVF9TRVQiO2E9Yi51c2VIVFRQU0Fsd2F5c3x8Imh0dHBzOiI9PT1kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbDt2YXIgbD1iLnVzZXJDb25mLmFkcnVtRXh0VXJsSHR0cHx8Imh0dHA6Ly9jZG4uYXBwZHluYW1pY3MuY29tIixlPWIudXNlckNvbmYuYWRydW1FeHRVcmxIdHRwc3x8Imh0dHBzOi8vY2RuLmFwcGR5bmFtaWNzLmNvbSI7Yi5hZHJ1bUV4dFVybD0oYT9lOmwpKyIvYWRydW0tZXh0LmE1ZTkyMWVhYjJkZGUyYzVhYjRiNzllYTYzNmI4MjcxLmpzIjtiLmFkcnVtWGRVcmw9ZSsiL2FkcnVtLXhkLmE1ZTkyMWVhYjJkZGUyYzVhYjRiNzllYTYzNmI4MjcxLmh0bWwiO2IuYWdlbnRWZXI9IjQuNS4xNy4yODkwIjtiLnNlbmRJbWFnZUJlYWNvbj1iLnVzZXJDb25mLmJlYWNvbiYmCmIudXNlckNvbmYuYmVhY29uLnNlbmRJbWFnZUJlYWNvbnx8d2luZG93WyJhZHJ1bS1zZW5kLWltYWdlLWJlYWNvbiJdO3dpbmRvd1siYWRydW0tZ2VvLXJlc29sdmVyLXVybCJdPyhsPXdpbmRvd1siYWRydW0tZ2VvLXJlc29sdmVyLXVybCJdLGU9bC5pbmRleE9mKCI6Ly8iKSwtMSE9ZSYmKGw9bC5zdWJzdHJpbmcoZSszKSksbD0oYT8iaHR0cHM6Ly8iOiJodHRwOi8vIikrbCk6KGw9Yi51c2VyQ29uZi5nZW9SZXNvbHZlclVybEh0dHBzfHwiIixlPWIudXNlckNvbmYuZ2VvUmVzb2x2ZXJVcmxIdHRwfHwiIixsPWE/bDplKTtiLmdlb1Jlc29sdmVyVXJsPWw7Yi51c2VTdHJpY3REb21haW5Db29raWVzPSEwPT09d2luZG93WyJhZHJ1bS11c2Utc3RyaWN0LWRvbWFpbi1jb29raWVzIl07Yi5saT0xMDtiLmZpPTEwfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiLGMsbSxoKXtiPWEuY29uZi5iZWFjb25VcmxIdHRwcysiL2V1bWNvbGxlY3Rvci9lcnJvci5naWY/dmVyc2lvbj0xJmFwcEtleT0iKwptKyImbXNnPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIuc3Vic3RyaW5nKDAsNTAwKSk7aCYmKGIrPSImc3RhY2s9IixiKz1lbmNvZGVVUklDb21wb25lbnQoaC5zdWJzdHJpbmcoMCwxNTAwLWIubGVuZ3RoKSkpO3JldHVybiBifWZ1bmN0aW9uIGwoYyxtKXsyPD1zfHwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIikuc3JjPWIoYywwLGEuY29uZi5hcHBLZXksbSkscysrKX1mdW5jdGlvbiBlKGEpe3JldHVybiAwPD1hLmxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJBRFJVTV9kZWJ1Zz10cnVlIil8fDA8PWEuY29va2llLnNlYXJjaCgvKF58OylccypBRFJVTV9kZWJ1Zz10cnVlLyl9ZnVuY3Rpb24gYyhiKXthLmlzRGVidWcmJnAucHVzaChuKGFyZ3VtZW50cykuam9pbigiIHwgIikpfWZ1bmN0aW9uIGgoYSl7ci5wdXNoKG4oYXJndW1lbnRzKS5qb2luKCIgfCAiKSl9ZnVuY3Rpb24gZihhKXt2YXIgYj1uKGFyZ3VtZW50cykuam9pbigiIHwgIik7YyhiKTtsKGIsbnVsbCl9dmFyIG49CmEudXRpbHMud2EsbT1hLnV0aWxzLnJlZHVjZSxxPWEudXRpbHMuaXNEZWZpbmVkO2EuaURSPWU7dmFyIHQ7KGZ1bmN0aW9uKGEpe2FbYS5BUElfRVJST1I9MF09IkFQSV9FUlJPUiI7YVthLkFQSV9FUlJPUl9JTlZBTElEX1BBUkFNUz0xXT0iQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1TIjthW2EuQVBJX0VSUk9SX0lOVkFMSURfQ09ORklHPTJdPSJBUElfRVJST1JfSU5WQUxJRF9DT05GSUciO2FbYS5BUElfV0FSTklORz0zXT0iQVBJX1dBUk5JTkciO2FbYS5BUElfV0FSTklOR19JTkVGRkVDVElWRV9DT05GSUc9NF09IkFQSV9XQVJOSU5HX0lORUZGRUNUSVZFX0NPTkZJRyJ9KSh0PWEuVnx8KGEuVj17fSkpO2EuQmI9WyJKUyBBZ2VudCBBUEkgRXJyb3I6IiwiSlMgQWdlbnQgQVBJIEVycm9yIEludmFsaWQgUGFyYW1ldGVyczogIiwiSlMgQWdlbnQgQVBJIEVycm9yIEludmFsaWQgQ29uZmlnczogIiwiSlMgQWdlbnQgQVBJIFdhcm5pbmc6IiwiSlMgQWdlbnQgQVBJIFdhcm5pbmcgSW5lZmZlY3RpdmUgQ29uZmlnOiJdOwphLldhPSIgYSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbi4gRG9uJ3QgZm9yZ2V0IGtleXdvcmQgbmV3LiI7YS5pc0RlYnVnPWUoZG9jdW1lbnQpO2EuYXBpTWVzc2FnZUNvbnNvbGVPdXQ9cShhLmNvbmYudXNlckNvbmYpJiZxKGEuY29uZi51c2VyQ29uZi5sb2cpJiYhMD09PWEuY29uZi51c2VyQ29uZi5sb2cuYXBpTWVzc2FnZUNvbnNvbGVPdXQ/ITA6ITE7dmFyIHA9W10scj1bXTthLmxvZ01lc3NhZ2VzPXA7YS5hcGlNZXNzYWdlcz1yO2EubG9nPWM7YS5mbz1oO2EuZXJyb3I9ZjthLnJlcG9ydEFQSU1lc3NhZ2U9ZnVuY3Rpb24oYixjLG0sZil7dmFyIG49YS5VbC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aChuKTthLmFwaU1lc3NhZ2VDb25zb2xlT3V0JiZ4LmxvZyhuKTtyZXR1cm4gbn07YS5leGNlcHRpb249ZnVuY3Rpb24oKXtpZighKDE+YXJndW1lbnRzLmxlbmd0aCkpe3ZhciBiPW4oYXJndW1lbnRzKSxjPWEudXRpbHMudHJ5RXh0cmFjdGluZ0Vycm9yU3RhY2soYlswXSksCmI9Yi5zbGljZSgxKTthLnV0aWxzLmlzQXJyYXkoYikmJihiPWIuc2xpY2UoMCwyMCkpO2I9Yi5qb2luKCIgfCAiKTthLmxvZyhiKTtsKGIsYyl9fTthLmFzc2VydD1mdW5jdGlvbihhKXtmb3IodmFyIGI9MTtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKTt2YXIgYz1uKGFyZ3VtZW50cyk7YXx8KGI9Y1sxXSwoYz1jLnNsaWNlKDIpKSYmMDxjLmxlbmd0aD9mKCJNNCIsYixjKTpmKCJNNSIsYikpfTthLmR1bXBMb2c9YS5pc0RlYnVnP2Z1bmN0aW9uKCl7cmV0dXJuIG0ocCxmdW5jdGlvbihhLGIpe3JldHVybiBhK2IucmVwbGFjZSgvXDxiclwvXD4vZywiXG5cdCIpKyJcbiJ9LCIiKX06ZnVuY3Rpb24oKXt9O2EuZWY9MDthLlNjPTA7YS5QPWEuaXNEZWJ1ZyYmYS51dGlscy5yZWZzLmthP2Z1bmN0aW9uKCl7YS5lZj1hLnV0aWxzLnJlZnMua2Eubm93KCl9OmZ1bmN0aW9uKCl7fTthLlE9YS5pc0RlYnVnJiZhLnV0aWxzLnJlZnMua2E/ZnVuY3Rpb24oKXthLlNjKz1hLnV0aWxzLnJlZnMua2Eubm93KCktCmEuZWZ9OmZ1bmN0aW9uKCl7fTthLlVsPWZ1bmN0aW9uKGIsYyxtLGgpe3ZhciBmPSIiLGY9IiIsbj0obmV3IHdpbmRvdy5FcnJvcikuc3RhY2ssZSxuPWEudXRpbHMuaXNTdHJpbmcobik/bi5zdWJzdHJpbmcoNSk6bisiIjtxKGUpfHwoZT1hLnV0aWxzLm1hcChoLGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YT8ibnVsbCI6dm9pZCAwPT1hPyJ1bmRlZmluZWQiOiIiPT09YT8iJyciOmF9KSk7c3dpdGNoKGIpe2Nhc2UgdC5sYTpjYXNlIHQubG46Zj1hLkJiW2JdO2Y9cShtKT8iIitmK2MrIlxuIGluICIrbSsiKCIrZS5qb2luKCIsICIpKyIpXG4iK246IiIrZitjKyJcbiIrbjticmVhaztjYXNlIHQuV2Q6Zj1hLkJiW2JdO2Y9IiIrZitjKyJcbmluICIrbSsiKCIrZS5qb2luKCIsICIpKyIpXG4iK247YnJlYWs7Y2FzZSB0LmtuOmNhc2UgdC55aDpmPWEuQmJbYl07Zj0iIitmK2MrIiwgYnV0ICIrbSsiPSIrZS5qb2luKCIsICIpKyJcbiIrbjticmVhaztkZWZhdWx0OmY9YS5CYlt0LmxhXSwKZj0iIitmK2MrIlxuaW4gIittKyIoIitlLmpvaW4oIiwgIikrIilcbiIrbn1yZXR1cm4gZn07YS5jSUVCVT1iO3ZhciBzPTA7YygiTTYiKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXt0aGlzLm1heD1iO3RoaXMuSmM9MH1hLnByb3RvdHlwZS5Gaz1mdW5jdGlvbigpe3RoaXMuVWIoKXx8dGhpcy5KYysrfTthLnByb3RvdHlwZS5VYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkpjPj10aGlzLm1heH07YS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLkpjPTB9O3JldHVybiBhfSgpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5LYj1bXTt0aGlzLkVkPW5ldyBiKGUud2kpO3RoaXMubGQ9bmV3IGIoZS5waSl9ZS5wcm90b3R5cGUuc3VibWl0PWZ1bmN0aW9uKGIpe3RoaXMucHVzaChiKSYmYS5pbml0RVhURG9uZSYmdGhpcy5wcm9jZXNzUSgpfTtlLnByb3RvdHlwZS5wcm9jZXNzUT1mdW5jdGlvbigpe2Zvcih2YXIgYj0KdGhpcy5GaigpLGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIGY9YltoXTsiZnVuY3Rpb24iPT09dHlwZW9mIGEuY29tbWFuZHNbZlswXV0/KGEuaXNEZWJ1ZyYmYS5sb2coIk03IixmWzBdLGYuc2xpY2UoMSkuam9pbigiLCAiKSksYS5jb21tYW5kc1tmWzBdXS5hcHBseShhLGYuc2xpY2UoMSkpKTphLmVycm9yKCJNOCIsZlswXSl9fTtlLnByb3RvdHlwZS5qbD1mdW5jdGlvbihhKXtyZXR1cm4icmVwb3J0WGhyIj09PWF8fCJyZXBvcnRQYWdlRXJyb3IiPT09YX07ZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihiKXt2YXIgaD1iWzBdLGY9dGhpcy5qbChoKSxuPWY/dGhpcy5FZDp0aGlzLmxkO2lmKG4uVWIoKSlyZXR1cm4gYS5sb2coIk05IixmPyJzcG9udGFuZW91cyI6Im5vbiBzcG9udGFuZW91cyIsaCksITE7dGhpcy5LYi5wdXNoKGIpO24uRmsoKTtyZXR1cm4hMH07ZS5wcm90b3R5cGUuRmo9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktiO3RoaXMucmVzZXQoKTtyZXR1cm4gYX07ZS5wcm90b3R5cGUuc2l6ZT0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LYi5sZW5ndGh9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5LYj1bXTt0aGlzLkVkLnJlc2V0KCk7dGhpcy5sZC5yZXNldCgpfTtlLnByb3RvdHlwZS5pc1Nwb250YW5lb3VzUXVldWVEZWFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWQuVWIoKX07ZS5wcm90b3R5cGUuaXNOb25TcG9udGFuZW91c1F1ZXVlRGVhZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkLlViKCl9O3JldHVybiBlfSgpO2wud2k9MTAwO2wucGk9MTAwO2EuQ29tbWFuZEV4ZWN1dG9yPWx9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXthLnE9bmV3IGEuQ29tbWFuZEV4ZWN1dG9yO2EuY29tbWFuZD1mdW5jdGlvbihiKXtmb3IodmFyIGw9MTtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKTthLmlzRGVidWcmJmEubG9nKCJNMTAiLGIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5zbGljZSgxKS5qb2luKCIsICIpKTthLnEuc3VibWl0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfX0pKGt8fAooaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYSl7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dGhpcy5zdGF0dXM9e319YS5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt9O2EucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3RoaXMuc3RhdHVzW2FdPWJ9O3JldHVybiBhfSgpO2Eud2M9bH0pKGEubW9uaXRvcnx8KGEubW9uaXRvcj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWEudXRpbHMud2EsZT1hLnV0aWxzLmlzRGVmaW5lZDt3aW5kb3cuQURSVU0uYW9wPWI7Yi5zdXBwb3J0PWZ1bmN0aW9uKGEpe3JldHVybiFhfHwiYXBwbHkiaW4gYX07Yi5hcm91bmQ9ZnVuY3Rpb24oYyxoLGYsbixtKXthLmFzc2VydChiLnN1cHBvcnQoYyksIk0xMSIpO2M9Y3x8ZnVuY3Rpb24oKXt9O3JldHVybiBmdW5jdGlvbigpe2lmKGEuaXNEZWJ1Zyl0cnl7YS5sb2coIk0xMiIsbixsKGFyZ3VtZW50cykuam9pbigiLCAiKSl9Y2F0Y2goYil7YS5sb2coIk0xMyIsCmUoYi5zdGFjayl8fGIudG9TdHJpbmcoKSl9dmFyIHQ9bChhcmd1bWVudHMpLHA7dHJ5e2gmJihwPWguYXBwbHkodGhpcyx0KSl9Y2F0Y2gocil7YS5leGNlcHRpb24ociwiTTE0IixuLHIpfWEuYXNzZXJ0KCFwfHxhLnV0aWxzLmlzQXJyYXkocCkpO3ZhciBzPXZvaWQgMDt0cnl7cz1jLmFwcGx5KHRoaXMscHx8dCl9Y2F0Y2godyl7dGhyb3cgYS5sb2codywiTTE1IixuLHcpLG0/bSh3KTphLm1vbml0b3IuRXJyb3JNb25pdG9yLmwodyksdzt9ZmluYWxseXt0cnl7ZiYmKGUocykmJih0W3QubGVuZ3RoXT17bWc6c30pLGYuYXBwbHkodGhpcyx0KSl9Y2F0Y2goQSl7YS5leGNlcHRpb24oQSwiTTE2IixuLEEpfX1yZXR1cm4gc319O2IudWY9ZnVuY3Rpb24oYSl7YT1hW2EubGVuZ3RoLTFdO3ZhciBiO2UoYSkmJmUoYS5tZykmJihiPWEubWcpO3JldHVybiBifTtiLmJlZm9yZT1mdW5jdGlvbihhLGgsZil7cmV0dXJuIGIuYXJvdW5kKGEsaCxudWxsLGYpfTtiLmFmdGVyPWZ1bmN0aW9uKGEsCmgsZil7cmV0dXJuIGIuYXJvdW5kKGEsbnVsbCxoLGYpfTtiLmZvcmNlV3JhcD1mdW5jdGlvbihiKXt2YXIgaD1iLmN1c3RvbURlc2NyaXB0b3JDb25maWd8fHt9LGY9bnVsbCxuPWIucGFyZW50T2JqZWN0LG09Yi5wcm9wZXJ0eSxxPWIuc2V0VXBGdW5jLHQ9Yi53cmFwTmV3RnVuY3Rpb25BZ2Fpbnx8ITEscD1iLnByb3BlcnR5V3JhcHBlZEZ1bmN0aW9uTmFtZTtpZihuJiZtKXtmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixtKTtpZighZnx8Zi5jb25maWd1cmFibGUpe2Y/KGRlbGV0ZSBmLndyaXRhYmxlLGRlbGV0ZSBmLnZhbHVlKTpmPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH07dmFyIGw9Zi5zZXQscz1mLmdldDtmLnNldD1oLnNldHx8ZnVuY3Rpb24obSl7ITAhPT1tLnVzZWRCeUFnZW50JiYoZShsKSYmbChhcmd1bWVudHMpLGUoYi5MYSkmJiF0fHwhYS51dGlscy5pc0Z1bmN0aW9uKHEpfHxxKG0pKX07Zi5nZXQ9aC5nZXR8fGZ1bmN0aW9uKCl7dmFyIG09CnM/cygpOmEudXRpbHMucmVmc1twXTtlKGIuTGEpJiYobT1iLkxhKTtyZXR1cm4gbX19ZWxzZSBhLmxvZygiTTE3IixwKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixtLGYpfWVsc2UgYS5lcnJvcigiTTE4Iil9fSkoYS5hb3B8fChhLmFvcD17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7YT1hLkV2ZW50VHlwZXx8KGEuRXZlbnRUeXBlPXt9KTthW2EuUGFnZVZpZXc9MF09IlBhZ2VWaWV3IjthW2EuQWpheD0yXT0iQWpheCI7YVthLlZQYWdlVmlldz0zXT0iVlBhZ2VWaWV3IjthW2EuRXJyb3I9NF09IkVycm9yIjthW2EuSUZSQU1FPTFdPSJJRlJBTUUiO2FbYS5BQlNUUkFDVD0xMDBdPSJBQlNUUkFDVCI7YVthLkFEUlVNX1hIUj0xMDFdPSJBRFJVTV9YSFIiO2FbYS5OR19WSVJUVUFMX1BBR0U9MTAyXT0iTkdfVklSVFVBTF9QQUdFIn0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpe3ZhciBiPWEuZXZlbnRzfHwoYS5ldmVudHM9e30pO2IuVD17fTtiLlRbYS5FdmVudFR5cGUuQUJTVFJBQ1RdPQp7Z3VpZDoic3RyaW5nIix1cmw6InN0cmluZyIscGFyZW50R1VJRDoic3RyaW5nIixwYXJlbnRVcmw6InN0cmluZyIscGFyZW50VHlwZToibnVtYmVyIix0aW1lc3RhbXA6Im51bWJlciJ9O2IuVFthLkV2ZW50VHlwZS5WUGFnZVZpZXddPXtyZXNUaW1pbmc6Im9iamVjdCJ9O2IuVFthLkV2ZW50VHlwZS5OR19WSVJUVUFMX1BBR0VdPXtkaWdlc3RDb3VudDoibnVtYmVyIn07Yi5UW2EuRXZlbnRUeXBlLkFqYXhdPXttZXRob2Q6InN0cmluZyIscGFyZW50UGhhc2U6InN0cmluZyIscGFyZW50UGhhc2VJZDoibnVtYmVyIixlcnJvcjoib2JqZWN0IixwYXJhbWV0ZXI6Im9iamVjdCIseGhyU3RhdHVzOiJudW1iZXIiLGRhdGFPYmplY3Q6Im9iamVjdCJ9O2IuVFthLkV2ZW50VHlwZS5BRFJVTV9YSFJdPXthbGxSZXNwb25zZUhlYWRlcnM6InN0cmluZyJ9O2IuVFthLkV2ZW50VHlwZS5FcnJvcl09e21zZzoic3RyaW5nIixsaW5lOiJudW1iZXIiLHN0YWNrOiJzdHJpbmcifX0pKGt8fChrPXt9KSk7CihmdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt0aGlzLmZhPXt9fWEucHJvdG90eXBlLm1hcms9ZnVuY3Rpb24oYSxiKXtsLm1hcmsuYXBwbHkodGhpcyxhcmd1bWVudHMpfTthLnByb3RvdHlwZS5nZXRUaW1pbmc9ZnVuY3Rpb24oYSl7cmV0dXJuKGE9dGhpcy5nZXRFbnRyeUJ5TmFtZShhKSkmJmEuc3RhcnRUaW1lfTthLnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKGEsYixmKXtsLm1lYXN1cmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTthLnByb3RvdHlwZS5nZXRFbnRyeUJ5TmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gbC5nZXRFbnRyeUJ5TmFtZS5jYWxsKHRoaXMsYSl9O3JldHVybiBhfSgpO2IuSWM9ZnVuY3Rpb24oYSl7cmV0dXJuIGwuSWMoYSl9O2EuUGVyZm9ybWFuY2VUcmFja2VyPWI7dmFyIGw7KGZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMuaGFzT3duUHJvcGVydHlEZWZpbmVkLGg9YS51dGlscy5oYigpLGY9YS51dGlscy5ub3c7Yi5tYXJrPQpmdW5jdGlvbihiLGMpe3RoaXMuZmFbYl09e25hbWU6YixlbnRyeVR5cGU6Im1hcmsiLHN0YXJ0VGltZTphLnV0aWxzLmlzRGVmaW5lZChjKT9jOmYoKSxkdXJhdGlvbjowfX07Yi5tZWFzdXJlPWZ1bmN0aW9uKGIsbSxlKXtjKHRoaXMuZmEsbSkmJmModGhpcy5mYSxlKT90aGlzLmZhW2JdPXtuYW1lOmIsZW50cnlUeXBlOiJtZWFzdXJlIixzdGFydFRpbWU6bT90aGlzLmZhW21dLnN0YXJ0VGltZTpoLGR1cmF0aW9uOihlP3RoaXMuZmFbZV0uc3RhcnRUaW1lOmYoKSktKG0/dGhpcy5mYVttXS5zdGFydFRpbWU6aCl9OmEuZXJyb3IoIk0xOSIsYyh0aGlzLmZhLG0pP2U6bSl9O2IuZ2V0RW50cnlCeU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZmFbYV18fG51bGx9O2IuSWM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEraH19KShsfHwobD17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGwoYixjKXtiPWJ8fHt9O2Zvcih2YXIgbiBpbiBiKWNbbl09CmZ1bmN0aW9uKCl7dmFyIGM9bixmPWJbbl07cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBoPSJfIitjLG49dGhpc1toXTtpZihhLnV0aWxzLmlzRGVmaW5lZChiKSlpZih0eXBlb2YgYj09PWYpdGhpc1toXT1iO2Vsc2UgdGhyb3cgaD0id3JvbmcgdHlwZSBvZiAiK2MrIiB2YWx1ZSwgIit0eXBlb2YgYisiIHBhc3NlZCBpbiBidXQgc2hvdWxkIGJlIGEgIitmKyIuIixhLnJlcG9ydEFQSU1lc3NhZ2UoYS5WLldkLGgsIkFEUlVNLnJlcG9ydCIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSksVHlwZUVycm9yKGgpO3JldHVybiBufX0oKX1mdW5jdGlvbiBlKGEpe3ZhciBiPXt9LGM7Zm9yKGMgaW4gYSl7dmFyIG09YVtjXTtiW20uc3RhcnRdPSEwO2JbbS5lbmRdPSEwfXJldHVybiBifXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihjKXt0aGlzLnBlcmY9bmV3IGEuUGVyZm9ybWFuY2VUcmFja2VyOyJPYmplY3QiPT09dGhpcy5jb25zdHJ1Y3Rvci5uYW1lJiZhLnJlcG9ydEFQSU1lc3NhZ2UoYS5WLmxhLAphLldhKTt0aGlzLnRpbWVzdGFtcChhLnV0aWxzLm5vdygpKTt0aGlzLmd1aWQoYS51dGlscy5nZW5lcmF0ZUdVSUQoKSk7dGhpcy51cmwoZG9jdW1lbnQuVVJMKTt0aGlzLmtjKGMpfWIucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudFR5cGUuQUJTVFJBQ1R9O2IucHJvdG90eXBlLmtjPWZ1bmN0aW9uKGIpe2lmKGEudXRpbHMuaXNPYmplY3QoYikpZm9yKHZhciBjIGluIGIpe3ZhciBtPXRoaXNbY118fHRoaXNbIm1hcmsiK2EudXRpbHMuT2UoYyldO20mJmEudXRpbHMuaXNGdW5jdGlvbihtKSYmbS5jYWxsKHRoaXMsYltjXSl9fTtiLkRjPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm57Z3VpZDpmdW5jdGlvbigpe3JldHVybiBhfSx1cmw6ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdHlwZTpmdW5jdGlvbigpe3JldHVybiBjfX19O2IucHJvdG90eXBlLm5rPWZ1bmN0aW9uKCl7cmV0dXJuIGIuRGModGhpcy5wYXJlbnRHVUlEKCksdGhpcy5wYXJlbnRVcmwoKSx0aGlzLnBhcmVudFR5cGUoKSl9OwpiLnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5uaygpO2EudXRpbHMuaXNEZWZpbmVkKGIpJiYoYS51dGlscy5pc0Z1bmN0aW9uKGIuZ3VpZCkmJmEudXRpbHMuaXNGdW5jdGlvbihiLnVybCkmJmEudXRpbHMuaXNGdW5jdGlvbihiLnR5cGUpPyh0aGlzLnBhcmVudEdVSUQoYi5ndWlkKCkpLHRoaXMucGFyZW50VXJsKGIudXJsKCkpLHRoaXMucGFyZW50VHlwZShiLnR5cGUoKSkpOmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsIm9iamVjdCBpcyBub3QgYSB2YWxpZCBFdmVudElkZW50aWZpZXIiLCJFdmVudFRyYWNrZXIucGFyZW50IixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIGN9O3JldHVybiBifSgpO2IuRXZlbnRUcmFja2VyPWM7Yi5NYT1sO2IuSWU9ZnVuY3Rpb24oYixjKXtiPWJ8fHt9O3ZhciBuPWUoYiksbTtmb3IobSBpbiBuKW49YS51dGlscy5PZShtKSxjWyJtYXJrIituXT1hLnV0aWxzLm9nKGZ1bmN0aW9uKGEsCmIpe3RoaXMucGVyZi5tYXJrKGEsYil9LG0pLGNbImdldCIrbl09YS51dGlscy5vZyhmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wZXJmLmdldFRpbWluZyhhKX0sbSl9O2woYi5UW2EuRXZlbnRUeXBlLkFCU1RSQUNUXSxjLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhoKXtoPWIuY2FsbCh0aGlzLGgpfHx0aGlzO2guY29uc3RydWN0b3IhPWMmJmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLkVycm9yIixbXSk7cmV0dXJuIGh9dihjLGIpO2MucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudFR5cGUuRXJyb3J9O3JldHVybiBjfShiLkV2ZW50VHJhY2tlcik7Yi5FcnJvcj1sO2IuTWEoYi5UW2EuRXZlbnRUeXBlLkVycm9yXSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPQp7fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoKXt2YXIgaD1udWxsIT09YiYmYi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7aC5zbD1mdW5jdGlvbihiKXt2YXIgbj1iLm1lc3NhZ2UsbT1iLmZpbGVuYW1lLGU9Yi5saW5lbm8sdD1iLmNvbG5vO2I9Yi5lcnJvcjthLmxvZygiTTIwIik7aWYoYS51dGlscy5pc0RlZmluZWQoYil8fGMuWGIpYS5sb2coIk0yMSIpLGMuWGI9ITAsaC5IYShuLG0sZSx0LGIpfTtyZXR1cm4gaH12KGMsYik7Yy5sPWZ1bmN0aW9uKGIpe2EubW9uaXRvci5nYS5IYShiLm1lc3NhZ2V8fGIuZGVzY3JpcHRpb24sYi5maWxlTmFtZXx8Yi5maWxlbmFtZSxiLmxpbmVOdW1iZXIsYi5jb2x1bW5OdW1iZXIsYil9O2MucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcztiLnByb3RvdHlwZS5zZXRVcC5jYWxsKHRoaXMpO2EudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csCiJlcnJvciIsdGhpcy5zbCwhMCk7YS5saXN0ZW5Gb3JFcnJvcnM9ZnVuY3Rpb24oKXtjLldmKCl9O3RoaXMuV2YoKX07Yy5wcm90b3R5cGUuZW09ZnVuY3Rpb24oKXtjLlFjPTB9O2MucHJvdG90eXBlLkhhPWZ1bmN0aW9uKGIsZixuLG0sZSl7Yy5RYz49YS5jb25mLmxpP2EubG9nKCJNMjIiKToobT1hLnV0aWxzLnRyeUV4dHJhY3RpbmdFcnJvclN0YWNrKGUpLGEuY29tbWFuZCgicmVwb3J0UGFnZUVycm9yIixuZXcgYS5ldmVudHMuRXJyb3IoYS51dGlscy5tZXJnZUpTT04oe21zZzpiKyIiLHVybDphLnV0aWxzLmlzU3RyaW5nKGYpP2Y6dm9pZCAwLGxpbmU6YS51dGlscy5pc051bWJlcihuKT9uOnZvaWQgMCxzdGFjazptfSx0aGlzLnN0YXR1cykpKSxjLlFjKyssYy5oYWRFcnJvcnM9ITApfTtjLnByb3RvdHlwZS5XZj1mdW5jdGlvbigpe3ZhciBiPXRoaXM7Yy5YYj0hMTthLmFvcC5zdXBwb3J0KHdpbmRvdy5vbmVycm9yKT8od2luZG93Lm9uZXJyb3I9YS5hb3AuYXJvdW5kKHdpbmRvdy5vbmVycm9yLApmdW5jdGlvbihmLG4sbSxlLHQpe2MuWGI/YS5sb2coIk0yMyIpOmMuaGQ/YS5sb2coIk0yNSIpOihhLmxvZygiTTI0IiksYi5IYShmLG4sbSxlLHQpLGMuaGQ9ITApfSxmdW5jdGlvbigpe2EubG9nKCJNMjYiKTtjLmhkPSExfSwib25lcnJvciIpLGEubG9nKCJNMjciKSk6YS5sb2coIk0yOCIpfTtyZXR1cm4gY30oYi53Yyk7bC5oZD0hMTtsLlFjPTA7bC5oYWRFcnJvcnM9ITE7bC5YYj0hMTtiLkVycm9yTW9uaXRvcj1sO2IuZ2E9bmV3IGIuRXJyb3JNb25pdG9yfSkoYS5tb25pdG9yfHwoYS5tb25pdG9yPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS5sb2csZT1hLmFvcC5hZnRlcixjPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGYoKXtyZXR1cm4gbnVsbCE9PWMmJmMuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXYoZixjKTtmLnByb3RvdHlwZS5zZXRVcD1mdW5jdGlvbigpe2EudXRpbHMubWFwKFsiZXJyb3IiLCJleGNlcHRpb24iXSwKZnVuY3Rpb24oYil7dmFyIGM9eFtiXTthLnV0aWxzLmlzRnVuY3Rpb24oYykmJmEuYW9wLnN1cHBvcnQoYyk/KGwoIk0yOSIsYikseFtiXT1lKGMsZnVuY3Rpb24oYSl7bCgiTTMwIixiLGEpO2YuVGkoYSl9KSk6bCgiTTMxIixiKX0pO2IuZ2EuSGE9ZShiLmdhLkhhLGZ1bmN0aW9uKCl7MDxmLm9hLmxlbmd0aD8obCgiTTMyIiksZi5vYT1bXSk6bCgiTTMzIil9KX07Zi5UaT1mdW5jdGlvbihiKXtmLm9hLmxlbmd0aD49YS5jb25mLmZpP2woIk0zNCIpOmEudXRpbHMuaXNTdHJpbmcoYik/KGwoIk0zNSIsYiksZi5vYS5wdXNoKGIpLGEudXRpbHMub1NUTyhmLkNnKSk6YS51dGlscy5pc09iamVjdChiKT8oYj1hLnV0aWxzLnRvSlNPTlN0cmluZyhiKSxudWxsIT09Yj8obCgiTTM2IixiKSxmLm9hLnB1c2goYiksYS51dGlscy5vU1RPKGYuQ2cpKTphLmVycm9yKCJNMzciKSk6bCgiTTM4Iix0eXBlb2YgYil9O2YuQ2c9ZnVuY3Rpb24oKXswPGYub2EubGVuZ3RoPyhsKCJNMzkiKSxiLmdhLkhhKGYub2Euam9pbigiXG4iKSksCmYub2E9W10pOmwoIk00MCIpfTtyZXR1cm4gZn0oYi53Yyk7Yy5vYT1bXTtiLm5uPWM7Yi50aj1uZXcgY30pKGEubW9uaXRvcnx8KGEubW9uaXRvcj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYigpe31iLnNldFVwPWZ1bmN0aW9uKCl7Yi5wZXJmPWEudXRpbHMucmVmcy5rYTthLnV0aWxzLmlzT2JqZWN0KGIucGVyZikmJmEudXRpbHMuaXNPYmplY3QoYi5wZXJmLnRpbWluZyl8fChiLnBlcmY9dm9pZCAwKX07cmV0dXJuIGJ9KCk7bC5wZXJmPW51bGw7Yi5QZXJmb3JtYW5jZVdyYXBwZXI9bH0pKGEubW9uaXRvcnx8KGEubW9uaXRvcj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubmF2VGltaW5nPW51bGx9ZS5wcm90b3R5cGUuWGU9ZnVuY3Rpb24oKXt2YXIgYz1iLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmOwppZihjPWMmJmMudGltaW5nKWlmKGMubmF2aWdhdGlvblN0YXJ0JiZjLm5hdmlnYXRpb25TdGFydDw9Yy5sb2FkRXZlbnRFbmQpe3ZhciBoPXt9LGY7Zm9yKGYgaW4gYyl7dmFyIG49Y1tmXTsibnVtYmVyIj09PXR5cGVvZiBuJiYoaFtmXT1uKX10aGlzLm5hdlRpbWluZz1ofWVsc2UgYS5sb2coIk00MiIpO2Vsc2UgYS5sb2coIk00MSIpfTtlLnByb3RvdHlwZS5zZXRVcD1mdW5jdGlvbigpe2IuUGVyZm9ybWFuY2VXcmFwcGVyLnNldFVwKCl9O3JldHVybiBlfSgpO2IuTmF2VGltaW5nTW9uaXRvcj1sO2IubmF2TW9uaXRvcj1uZXcgYi5OYXZUaW1pbmdNb25pdG9yfSkoYS5tb25pdG9yfHwoYS5tb25pdG9yPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5zZD1udWxsO2IuUGVyZm9ybWFuY2VXcmFwcGVyLnNldFVwKCk7dGhpcy5yZXNvdXJjZUJ1ZmZlcj1bXTt0aGlzLmJhc2VQYWdlUmVzb3VyY2VCdWZmZXI9CltdO3RoaXMucWU9NTAwO3RoaXMuemM9MTUwO3RoaXMuRWk9M0UzO3RoaXMuc2V0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplKCk7dGhpcy5ybSgpfWUucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKCl7Yi5QZXJmb3JtYW5jZVdyYXBwZXIuc2V0VXAoKTthLnV0aWxzLmlzRGVmaW5lZChiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmKSYmYS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYuZ2V0RW50cmllc0J5VHlwZSk/YS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYuYWRkRXZlbnRMaXN0ZW5lcik/Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZi5hZGRFdmVudExpc3RlbmVyKCJyZXNvdXJjZXRpbWluZ2J1ZmZlcmZ1bGwiLHRoaXMuZmIuYmluZCh0aGlzKSk6Im9ucmVzb3VyY2V0aW1pbmdidWZmZXJmdWxsImluIGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmY/YS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYucmQpPwpiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmLnJkPWEuYW9wLmFyb3VuZChiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmLnJkLHRoaXMuZmIuYmluZCh0aGlzKSk6Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZi5yZD10aGlzLmZiLmJpbmQodGhpcyk6YS51dGlscy5yZWZzLnNldEludGVydmFsLmNhbGwod2luZG93LHRoaXMuaG0uYmluZCh0aGlzKSx0aGlzLkVpKTphLmxvZygiTTQzIik7dGhpcy52bSgpO3RoaXMuaW0oKX07ZS5wcm90b3R5cGUudm09ZnVuY3Rpb24oKXt2YXIgYz1hLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5yZXNUaW1pbmcmJmEuY29uZi51c2VyQ29uZi5yZXNUaW1pbmcuYnVmU2l6ZTthLnV0aWxzLmlzRGVmaW5lZChiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmKSYmYS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYuc2V0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplKSYmYS51dGlscy5pc051bWJlcihjKSYmMDxjJiYodGhpcy56Yz0KYyl9O2UucHJvdG90eXBlLmltPWZ1bmN0aW9uKCl7dmFyIGM9Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZjthLnV0aWxzLmlzRGVmaW5lZChjKSYmKGEudXRpbHMuaXNGdW5jdGlvbihjLnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZSkmJihjLnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZT1hLmFvcC5hcm91bmQoYy5zZXRSZXNvdXJjZVRpbWluZ0J1ZmZlclNpemUsZnVuY3Rpb24oKXthLnV0aWxzLmlzRGVmaW5lZChhcmd1bWVudHMpJiZhLnV0aWxzLmlzRGVmaW5lZChhcmd1bWVudHNbMF0pJiYodGhpcy56Yz1hcmd1bWVudHNbMF0pfS5iaW5kKHRoaXMpKSksYS51dGlscy5pc0Z1bmN0aW9uKGMuY2xlYXJSZXNvdXJjZVRpbWluZ3MpJiYoYy5jbGVhclJlc291cmNlVGltaW5ncz1hLmFvcC5hcm91bmQoYy5jbGVhclJlc291cmNlVGltaW5ncyxmdW5jdGlvbigpe3RoaXMuZmIoKX0uYmluZCh0aGlzKSkpKX07ZS5wcm90b3R5cGUuV2U9ZnVuY3Rpb24oKXt0aGlzLmJhc2VQYWdlUmVzb3VyY2VCdWZmZXI9CnRoaXMubWYoKX07ZS5wcm90b3R5cGUuZmI9ZnVuY3Rpb24oKXt0aGlzLnJlc291cmNlQnVmZmVyPXRoaXMubWYoKX07ZS5wcm90b3R5cGUuaG09ZnVuY3Rpb24oKXt0aGlzLmpiKCkubGVuZ3RoPj10aGlzLnpjJiZ0aGlzLmZiKCl9O2UucHJvdG90eXBlLmpiPWZ1bmN0aW9uKCl7dmFyIGM9Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZixoPVtdO2MmJmMuZ2V0RW50cmllc0J5VHlwZSYmKGM9Yy5nZXRFbnRyaWVzQnlUeXBlKCJyZXNvdXJjZSIpKSYmYy5sZW5ndGgmJjA8Yy5sZW5ndGgmJmMudW5zaGlmdCYmKGg9Yyk7MD09aC5sZW5ndGgmJmEubG9nKCJNNDQiKTtyZXR1cm4gaH07ZS5wcm90b3R5cGUucms9ZnVuY3Rpb24oYixoKXtyZXR1cm4gYS51dGlscy5maWx0ZXIodGhpcy5yZXNvdXJjZUJ1ZmZlcixmdW5jdGlvbihhKXtyZXR1cm4gYithLnN0YXJ0VGltZT49aH0pfTtlLnByb3RvdHlwZS5zaz1mdW5jdGlvbihhLGIpe3RoaXMucmVzb3VyY2VCdWZmZXI9dGhpcy5yZXNvdXJjZUJ1ZmZlci5jb25jYXQodGhpcy5qYigpKTsKdmFyIGY9dGhpcy5yayhhLGIpO3RoaXMuY2xlYXJSZXNvdXJjZVRpbWluZ3MoKTt0aGlzLnJlc291cmNlQnVmZmVyPVtdO3JldHVybiBmfTtlLnByb3RvdHlwZS5ybT1mdW5jdGlvbigpe3ZhciBjPWIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmY7YS51dGlscy5pc0RlZmluZWQoYykmJmEudXRpbHMuaXNGdW5jdGlvbihjLmNsZWFyUmVzb3VyY2VUaW1pbmdzKSYmKHRoaXMuc2Q9Yy5jbGVhclJlc291cmNlVGltaW5ncy5iaW5kKGMpKX07ZS5wcm90b3R5cGUuc2V0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIGM9Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZixoPWEuY29uZi51c2VyQ29uZiYmYS5jb25mLnVzZXJDb25mLnJlc1RpbWluZyYmYS5jb25mLnVzZXJDb25mLnJlc1RpbWluZy5idWZTaXplOyFhLnV0aWxzLmlzTnVtYmVyKGgpfHwwPj1oP2EubG9nKCJNNDUiKTpjJiZhLnV0aWxzLmlzRnVuY3Rpb24oYy5zZXRSZXNvdXJjZVRpbWluZ0J1ZmZlclNpemUpPwpjLnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZShoKTphLmxvZygiTTQ2Iil9O2UucHJvdG90eXBlLm1mPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5qYigpO2lmKHRoaXMucmVzb3VyY2VCdWZmZXIubGVuZ3RoK2IubGVuZ3RoPnRoaXMucWUpcmV0dXJuIGEubG9nKCJNNDciKSx0aGlzLnJlc291cmNlQnVmZmVyLmNvbmNhdChiLnNsaWNlKDAsdGhpcy5xZS10aGlzLnJlc291cmNlQnVmZmVyLmxlbmd0aCkpO3RoaXMuY2xlYXJSZXNvdXJjZVRpbWluZ3MoKTtyZXR1cm4gdGhpcy5yZXNvdXJjZUJ1ZmZlci5jb25jYXQoYil9O2UucHJvdG90eXBlLmNsZWFyUmVzb3VyY2VUaW1pbmdzPWZ1bmN0aW9uKCl7YS5jb25mLmNsZWFyUmVzVGltaW5nJiZhLnV0aWxzLmlzRnVuY3Rpb24odGhpcy5zZCkmJnRoaXMuc2QoKX07cmV0dXJuIGV9KCk7Yi5SZXNvdXJjZU1vbml0b3I9bDtiLnJlc291cmNlTW9uaXRvcj1uZXcgYi5SZXNvdXJjZU1vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fAooaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbChhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGUoYSl7cmV0dXJuInZpZGVvIj09bChhKX1mdW5jdGlvbiBjKGEpe3JldHVybiJpbWFnZSI9PWwoYSl9ZnVuY3Rpb24gaChhKXtyZXR1cm4ic3ZnIj09bChhKX1mdW5jdGlvbiBmKGEpe3JldHVybiAwPT09YS5sYXN0SW5kZXhPZigidmlkZW8vIiwwKXx8MD09PWEubGFzdEluZGV4T2YoImltYWdlLyIsMCl8fDA9PT1hLmxhc3RJbmRleE9mKCJmb250LyIsMCl8fDA9PT1hLmxhc3RJbmRleE9mKCJtb2RlbC8iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidGV4dC8iLDApfWZ1bmN0aW9uIG4oYSl7cmV0dXJuImVtYmVkIj09bChhKSYmZihhLnR5cGUpfWZ1bmN0aW9uIG0oYSl7cmV0dXJuIm9iamVjdCI9PWwoYSkmJmYoYS50eXBlKX1mdW5jdGlvbiBxKGEpe3JldHVybiJpbWciPT1sKGEpfWEuams9bDthLlNmPWU7YS5abj1jO2EuWW49Cmg7YS5LZj1mdW5jdGlvbihhKXtyZXR1cm4iY2FudmFzIj09bChhKX07YS5RZj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIFRleHR9O2EuV249ZjthLm9mPWZ1bmN0aW9uKGEpe3JldHVybihhLnJpZ2h0LWEubGVmdCkqKGEuYm90dG9tLWEudG9wKX07YS5Wbj1uO2EuWG49bTthLlVuPXE7YS5uYj1mdW5jdGlvbihhKXtyZXR1cm4gcShhKXx8bShhKXx8bihhKXx8ZShhKXx8YyhhKXx8aChhKX07YS5vYj1mdW5jdGlvbihhKXthPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEpO3JldHVybiJub25lIiE9PWEuZ2V0UHJvcGVydHlWYWx1ZSgiZGlzcGxheSIpJiYiaGlkZGVuIiE9PWEuZ2V0UHJvcGVydHlWYWx1ZSgidmlzaWJpbGl0eSIpfTthLlFiPWZ1bmN0aW9uKGEpe3ZhciBiPSIiO2EgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2I9YS5jdXJyZW50U3JjfHxhLnNyYzphIGluc3RhbmNlb2YgSFRNTEVtYmVkRWxlbWVudD9iPWEuc3JjOmEgaW5zdGFuY2VvZiBIVE1MT2JqZWN0RWxlbWVudD8KYj1hLmRhdGE6InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MVmlkZW9FbGVtZW50JiZhIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudD9iPWEuY3VycmVudFNyY3x8YS5zcmM6YSBpbnN0YW5jZW9mIFNWR0ltYWdlRWxlbWVudCYmKGI9YS5ocmVmLmJhc2VWYWwpO3JldHVybiBifTthLlBuPWZ1bmN0aW9uKGEpe3ZhciBiPSIiO2EgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2I9ImltZyI6YSBpbnN0YW5jZW9mIEhUTUxFbWJlZEVsZW1lbnQ/Yj0iZW1iZWQiOmEgaW5zdGFuY2VvZiBIVE1MT2JqZWN0RWxlbWVudD9iPSJvYmplY3QiOiJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTFZpZGVvRWxlbWVudCYmYSBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQ/Yj0idmlkZW8iOmEgaW5zdGFuY2VvZiBTVkdJbWFnZUVsZW1lbnQmJihiPSJpbWFnZSIpO3JldHVybiBifTthLlhjPWZ1bmN0aW9uKGMpe3JldHVybiBhLmlzRGVmaW5lZChjLmF0dHJpYnV0ZXMpP2MuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oInNyYyIpfHwKYy5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiaHJlZiIpOnZvaWQgMH19KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dGhpcy5Waz0wLjI7dGhpcy5VYT0wO3RoaXMubGI9ITE7dGhpcy56YT1hLmNvbmYuc3BhMjt0aGlzLnFjPXRoaXMuc2M9dGhpcy5nPXRoaXMuYmE9dGhpcy54YT0wO3RoaXMudmlld3BvcnQ9e3RvcDowLGxlZnQ6MCxib3R0b206dGhpcy5xYyxyaWdodDp0aGlzLnNjfTt0aGlzLlNhPTB9Yi5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt0aGlzLlI9e307dGhpcy5jYz17fTt0aGlzLmJhPWEudXRpbHMubm93KCk7dGhpcy5nPTA7dmFyIGI9d2luZG93Lk11dGF0aW9uT2JzZXJ2ZXI7dGhpcy5UZSgpO2EudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csInJlc2l6ZSIsYS51dGlscy55aih0aGlzLlRlKS5iaW5kKHRoaXMpKTthLnV0aWxzLmlzRGVmaW5lZChiKSYmCihhLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuWm9uZSkmJmEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5ab25lLl9fc3ltYm9sX18oIk11dGF0aW9uT2JzZXJ2ZXIiKSk/dGhpcy4kYj1uZXcgKHdpbmRvd1t3aW5kb3cuWm9uZS5fX3N5bWJvbF9fKCJNdXRhdGlvbk9ic2VydmVyIildKSh0aGlzLmlnLmJpbmQodGhpcykpOnRoaXMuJGI9bmV3IGIodGhpcy5pZy5iaW5kKHRoaXMpKSx0aGlzLiRiLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMCxhdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbInNyYyIsImhyZWYiXX0pLGEubG9nKCJNNDgiKSl9O2IucHJvdG90eXBlLmlnPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7YS5QKCk7Yi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3N3aXRjaChhLnR5cGUpe2Nhc2UgImNoaWxkTGlzdCI6W10uc2xpY2UuY2FsbChhLmFkZGVkTm9kZXMpLmZvckVhY2goZnVuY3Rpb24oYSl7Yy5MZShhKX0pO2JyZWFrOwpjYXNlICJhdHRyaWJ1dGVzIjpjLkxlKGEudGFyZ2V0KX19KTthLlEoKX07Yi5wcm90b3R5cGUuVGU9ZnVuY3Rpb24oKXt0aGlzLnNjPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5pbm5lcldpZHRoKSYmYS51dGlscy5pc0RlZmluZWQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKT9NYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpOndpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGh8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0uY2xpZW50V2lkdGg7dGhpcy5xYz1hLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuaW5uZXJIZWlnaHQpJiZhLnV0aWxzLmlzRGVmaW5lZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KT9NYXRoLm1pbih3aW5kb3cuaW5uZXJIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk6CndpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5jbGllbnRIZWlnaHQ7YS5sb2coIk00OSIsdGhpcy5zYyx0aGlzLnFjKTt0aGlzLnZpZXdwb3J0PXt0b3A6MCxsZWZ0OjAsYm90dG9tOnRoaXMucWMscmlnaHQ6dGhpcy5zY319O2IucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7YS5QKCk7dGhpcy5zZXRVcCgpO2EuUSgpO2EubG9nKCJNNTAiKX07Yi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLlI9e307dGhpcy5VYT0wO3RoaXMuY2M9e307dGhpcy5TYT0wO2EubG9nKCJNNTEiKX07Yi5wcm90b3R5cGUuTGU9ZnVuY3Rpb24oYil7YS5QKCk7dmFyIGM9YS51dGlscy5ub3coKTthLnV0aWxzLm5iKGIpJiYhYi5pc0FkcnVtVHJhY2tlZE5vZGU/KHRoaXMubGJ8fCh0aGlzLks9dGhpcy5LLmJpbmQodGhpcyksdGhpcy5sPXRoaXMubC5iaW5kKHRoaXMpLAp0aGlzLksuST0hMCx0aGlzLmxiPXRoaXMubC5JPSEwKSx0aGlzLmcrKyxhLmxvZygiTTUyIix0aGlzLmcpLGM9YS51dGlscy5YYyhiKSxjPWEudXRpbHMuaXNEZWZpbmVkKGMpP2MudmFsdWU6bnVsbCxhLnV0aWxzLlNmKGIpPyhiLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZGRhdGEiLHRoaXMuSyksYS5sb2coIk01MyIsYykpOihiLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHRoaXMuSyksYS5sb2coIk01NCIsYykpLGIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHRoaXMubCksYi5pc0FkcnVtVHJhY2tlZE5vZGU9ITApOmEudXRpbHMuS2YoYikmJiFiLmFkcnVtTm9kZUlkPyhhLmxvZygiTTU1IiksdGhpcy5JYihiLGMpKTphLnV0aWxzLlFmKGIpJiYodGhpcy5VYT1NYXRoLm1heCh0aGlzLlVhLGMpKTthLlEoKX07Yi5wcm90b3R5cGUuSz1mdW5jdGlvbihiKXthLlAoKTt2YXIgYz1hLnV0aWxzLm5vdygpO3RoaXMuYmE9YztiPWIudGFyZ2V0O3ZhciBoPWEudXRpbHMuUWIoYik7YS51dGlscy5pc0RlZmluZWQoaCkmJgowPGgubGVuZ3RoPyJkYXRhOiIhPWguc3Vic3RyaW5nKDAsNSl8fGIuYWRydW1Ob2RlSWQ/dGhpcy5WaShoLGMsYik6KGEubG9nKCJNNTYiKSx0aGlzLkliKGIsYykpOmIgaW5zdGFuY2VvZiBTVkdFbGVtZW50JiYhYi5hZHJ1bU5vZGVJZCYmKGEubG9nKCJNNTciKSx0aGlzLkliKGIsYykpO2ImJmIuaXNBZHJ1bVRyYWNrZWROb2RlJiYodGhpcy50YihiKSx0aGlzLmctLSxhLmxvZygiTTU4Iix0aGlzLmcpKTthLlEoKX07Yi5wcm90b3R5cGUubD1mdW5jdGlvbihiKXt2YXIgYz1iLnRhcmdldDtjJiZjLmlzQWRydW1UcmFja2VkTm9kZSYmKHRoaXMudGIoYyksdGhpcy5nLS0sYj1hLnV0aWxzLlFiKGIudGFyZ2V0KSxhLmxvZygiTTU5IixiKSl9O2IucHJvdG90eXBlLnRiPWZ1bmN0aW9uKGEpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsdGhpcy5LKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIix0aGlzLmwpfTtiLnByb3RvdHlwZS5TYj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tYihiKSYmCmEudXRpbHMub2IoYil9O2IucHJvdG90eXBlLlZpPWZ1bmN0aW9uKGIsYyxoKXthLnV0aWxzLmlzRGVmaW5lZCh0aGlzLlJbYl0pP3RoaXMuU2IoaCkmJih0aGlzLlJbYl09YyxhLmxvZygiTTYwIixiLGMpKToodGhpcy5SW2JdPWMsYS5sb2coIk02MSIsYixjKSl9O2IucHJvdG90eXBlLkliPWZ1bmN0aW9uKGIsYyl7YS5sb2coIk02MiIsdGhpcy5TYSxjLGIub3V0ZXJIVE1MKTtiLmFkcnVtTm9kZUlkPXRoaXMuU2E7dGhpcy5jY1t0aGlzLlNhXT1jO3RoaXMuU2ErPTF9O2IucHJvdG90eXBlLlVlPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7YS5qLkViLkZhJiYodGhpcy54YT1iKTt2YXIgaD0wLGY9MCxuPXRoaXMucGsodGhpcy54YSk7YS5sb2coIk02MyIsbik7W10uc2xpY2UuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKS5mb3JFYWNoKGZ1bmN0aW9uKG0pe3ZhciB0PWEudXRpbHMuUWIobSk7ZGVsZXRlIG0uaXNBZHJ1bVRyYWNrZWROb2RlO2lmKGEudXRpbHMuaXNEZWZpbmVkKHQpJiYKMDx0Lmxlbmd0aClpZihhLmxvZygiTTY0Iix0KSxhLnV0aWxzLmlzRGVmaW5lZChjLlJbdF0pKXt2YXIgcD1jLlJbdF07YS5sb2coIk02NSIsdCxwKTthLnV0aWxzLm9iKG0pJiYoYS5sb2coIk02NiIsdCxwKSxjLnphJiYoYS5sb2coIk02NyIsZixwLGIpLGY9TWF0aC5tYXgoZixwLWIpLGEubG9nKCJNNjgiLHQsZikpLGMubWIobSkmJihhLmxvZygiTTY5IixoLHAsYiksaD1NYXRoLm1heChoLHAtYiksYS5sb2coIk03MCIsdCxoKSkpfWVsc2V7aWYoYS51dGlscy5uYihtKSYmYS51dGlscy5vYihtKSYmKHA9Yy52Zih0KSxhLnV0aWxzLmlzRGVmaW5lZChwKSkpe3ZhciBsPXAuc3RhcnRUaW1lLShiLWMueGEpLHM9cC5kdXJhdGlvbipuK2w7YS5sb2coIk03MSIsdCxzKTthLmxvZygiTTcyIixwLmR1cmF0aW9uLGwpO2MuemEmJihmPU1hdGgubWF4KGYscyksYS5sb2coIk03MyIsdCxmKSk7Yy5tYihtKSYmKGg9TWF0aC5tYXgoaCxzKSxhLmxvZygiTTc0Iix0LGgpKX19ZWxzZSBhLnV0aWxzLmlzRGVmaW5lZChtLmFkcnVtTm9kZUlkKSYmCihhLnV0aWxzLmlzRGVmaW5lZChjLmNjW20uYWRydW1Ob2RlSWRdKSYmKHA9Yy5jY1ttLmFkcnVtTm9kZUlkXSxhLnV0aWxzLm9iKG0pJiYoYy56YSYmKGY9TWF0aC5tYXgoZixwLWIpLGEubG9nKCJNNzUiLG0uYWRydW1Ob2RlSWQscCkpLGMubWIobSkmJihoPU1hdGgubWF4KGgscC1iKSxhLmxvZygiTTc2IixtLmFkcnVtTm9kZUlkLHApKSkpLGRlbGV0ZSBtLmFkcnVtTm9kZUlkKX0pO2EubG9nKCJNNzciLGgsZik7dGhpcy5ZaigpLmZvckVhY2goZnVuY3Rpb24obSl7dmFyIHQ9bS51cmw7bT1tLlNiO3ZhciBwPWMudmYodCk7YS51dGlscy5pc0RlZmluZWQocCkmJihwPXAuZHVyYXRpb24qbisocC5zdGFydFRpbWUtKGItYy54YSkpLGMuemEmJihhLmxvZygiTTc4Iix0LHApLGY9TWF0aC5tYXgoZixwKSksbSYmKGEubG9nKCJNNzkiLHQscCksaD1NYXRoLm1heChoLHApKSl9KTtpZighYS5jb25mLmRpc2FibGVUZXh0Rm9yVGVzdGluZyl7dmFyIG09dGhpcy5VYS1iOzA9PWgmJihhLmxvZygiTTgwIiksCmg9TWF0aC5tYXgoaCxtKSk7dGhpcy56YSYmMD09ZiYmKGEubG9nKCJNODEiKSxmPU1hdGgubWF4KGYsbSkpfWh8PTA7Znw9MDthLmxvZygiTTgyIixiLHRoaXMueGEpO2EubG9nKCJNODMiLHdpbmRvdy5sb2NhdGlvbi5ocmVmKTthLmxvZygiTTg0IixoLGYpO2EuaXNEZWJ1ZyYmKHgubG9nKCJ1cmwgPSAiK3dpbmRvdy5sb2NhdGlvbi5ocmVmKSx4LmxvZygicmVuZGVyUmF0aW8gPSAiK24pLHgubG9nKCJ2aXN1YWxseUNvbXBsZXRlVGltZSA9ICIraCkseC5sb2coInBhZ2VDb21wbGV0ZVRpbWUgPSAiK2YpKTtyZXR1cm57dmN0OmgscGN0OmZ9fTtiLnByb3RvdHlwZS5raz1mdW5jdGlvbihhKXthPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5LGg9YS50b3ArKHdpbmRvdy5wYWdlWU9mZnNldHx8Yi5zY3JvbGxUb3ApLShiLmNsaWVudFRvcHx8MCksYj1hLmxlZnQrKHdpbmRvdy5wYWdlWE9mZnNldHx8Yi5zY3JvbGxMZWZ0KS0KKGIuY2xpZW50TGVmdHx8MCk7cmV0dXJue3RvcDpNYXRoLnJvdW5kKGgpLGxlZnQ6TWF0aC5yb3VuZChiKSxib3R0b206TWF0aC5yb3VuZChoKSthLmhlaWdodCxyaWdodDpNYXRoLnJvdW5kKGIpK2Eud2lkdGh9fTtiLnByb3RvdHlwZS5tYj1mdW5jdGlvbihiKXtiPXRoaXMua2soYik7aWYodGhpcy5ZayhiKSlyZXR1cm4gYS5sb2coIk04NSIpLCExO3ZhciBjPXt0b3A6TWF0aC5tYXgodGhpcy52aWV3cG9ydC50b3AsYi50b3ApLGxlZnQ6TWF0aC5tYXgodGhpcy52aWV3cG9ydC5sZWZ0LGIubGVmdCksYm90dG9tOk1hdGgubWluKHRoaXMudmlld3BvcnQuYm90dG9tLGIuYm90dG9tKSxyaWdodDpNYXRoLm1pbih0aGlzLnZpZXdwb3J0LnJpZ2h0LGIucmlnaHQpfSxjPWEudXRpbHMub2YoYyk7Yj1hLnV0aWxzLm9mKGIpO2lmKDAhPWImJmMvYj49dGhpcy5WaylyZXR1cm4hMDthLmxvZygiTTg2Iik7cmV0dXJuITF9O2IucHJvdG90eXBlLllrPWZ1bmN0aW9uKGEpe3JldHVybiBhLnRvcD4KdGhpcy52aWV3cG9ydC5ib3R0b218fGEuYm90dG9tPHRoaXMudmlld3BvcnQudG9wfHxhLnJpZ2h0PHRoaXMudmlld3BvcnQubGVmdHx8YS5sZWZ0PnRoaXMudmlld3BvcnQucmlnaHQ/ITA6ITF9O2IucHJvdG90eXBlLkRqPWZ1bmN0aW9uKCl7YS51dGlscy5pc0RlZmluZWQodGhpcy4kYikmJnRoaXMuJGIuZGlzY29ubmVjdCgpO2EubG9nKCJNODciKX07Yi5wcm90b3R5cGUucGs9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcyxoPTAsZj0wO3RoaXMueGYoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBtPW4ubmFtZTtpZihhLnV0aWxzLmlzRGVmaW5lZChjLlJbbV0pKXt2YXIgcT1jLlJbbV0tYi1uLnN0YXJ0VGltZSx0PW4uZHVyYXRpb247YS5sb2coIk04OCIsbSxiLG4uc3RhcnRUaW1lLGMuUlttXSx0KTt0JiYwPHEmJihoKz1xL3QsZisrKX19KTtyZXR1cm4gMDxmP2gvZjoxfTtiLnByb3RvdHlwZS5Zaj1mdW5jdGlvbigpe3ZhciBiPXRoaXMsYz1bXTtbXS5zbGljZS5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLmZvckVhY2goZnVuY3Rpb24oaCl7aWYoYS51dGlscy5vYihoKSl7dmFyIGY9CmIuWGooaCk7ZiYmKGIubWIoaCk/Yy5wdXNoKHt1cmw6ZixTYjohMH0pOmIuemEmJmMucHVzaCh7dXJsOmYsU2I6ITF9KSl9fSk7cmV0dXJuIGN9O2IucHJvdG90eXBlLlhqPWZ1bmN0aW9uKGIpe2lmKGImJmIuc3R5bGUpe3ZhciBjPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGIpLmdldFByb3BlcnR5VmFsdWUoImJhY2tncm91bmQtaW1hZ2UiKTtjfHwoYz0oYi5jdXJyZW50U3R5bGV8fGIuc3R5bGUpLmJhY2tncm91bmRJbWFnZSk7Yj10aGlzLnVrKGMpO3JldHVybiBhLnV0aWxzLmlzRGVmaW5lZChiKSYmYS51dGlscy5pc0RlZmluZWQoYi5zdWJzdHIpJiYidW5kZWZpbmVkIj09PWIuc3Vic3RyKGIubGFzdEluZGV4T2YoIi8iKSsxKT92b2lkIDA6Yn19O2IucHJvdG90eXBlLnVrPWZ1bmN0aW9uKGEpe2lmKGEmJmEubWF0Y2goInVybCIpKXJldHVybiBhLnJlcGxhY2UoJ3VybCgiJywiIikucmVwbGFjZSgnIiknLCIiKX07Yi5wcm90b3R5cGUudmY9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPQowLGg9dGhpcy54ZigpO2M8aC5sZW5ndGg7YysrKXt2YXIgZj1oW2NdO2lmKGEudXRpbHMuaXNEZWZpbmVkKGYubmFtZSkmJjA8PWYubmFtZS5pbmRleE9mKGIpKXJldHVybiBmfX07Yi5wcm90b3R5cGUueGY9ZnVuY3Rpb24oKXtyZXR1cm4gYS5qLkViLkZhP2EubW9uaXRvci5yZXNvdXJjZU1vbml0b3IuYmFzZVBhZ2VSZXNvdXJjZUJ1ZmZlcjphLm1vbml0b3IucmVzb3VyY2VNb25pdG9yLnJlc291cmNlQnVmZmVyLmNvbmNhdChhLm1vbml0b3IucmVzb3VyY2VNb25pdG9yLmpiKCkpfTtyZXR1cm4gYn0oKTthLnZuPWI7YS5OPW5ldyBifSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubGI9ITE7dGhpcy5MYz01RTM7dGhpcy5wYj1hLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZSYmYS5jb25mLnVzZXJDb25mLm5hdkNvbXBsZXRlLm1heFJlc291cmNlUXVpZXRUaW1lP2EuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZS5tYXhSZXNvdXJjZVF1aWV0VGltZToKdGhpcy5MY31lLnByb3RvdHlwZS5TZz1mdW5jdGlvbigpe2EuUCgpO3RoaXMua2IoRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIsdGhpcy51Zy5iaW5kKHRoaXMpKTt0aGlzLmtiKEhUTUxFbGVtZW50LnByb3RvdHlwZSwiaW5uZXJIVE1MIix0aGlzLnVnLmJpbmQodGhpcykpO3RoaXMua2IoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsInNyYyIsdGhpcy5xYi5iaW5kKHRoaXMpKTt0aGlzLmtiKEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSwic3JjIix0aGlzLnFiLmJpbmQodGhpcykpO3RoaXMua2IoSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZSwiaHJlZiIsdGhpcy5xYi5iaW5kKHRoaXMpKTt0aGlzLk1rKCk7dGhpcy5lZCgiYXBwZW5kIik7dGhpcy5lZCgiYXBwZW5kQ2hpbGQiKTt0aGlzLmVkKCJpbnNlcnRCZWZvcmUiKTthLlEoKX07ZS5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oYil7YS5QKCk7dGhpcy5tZD10aGlzLmc9MDt0aGlzLmJhPWI7dGhpcy5wYT10aGlzLkI9CiExO3RoaXMuYmM9e307dGhpcy5SPXt9O3RoaXMucGQ9e307YS5RKCl9O2UucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGIpe3RoaXMuc2V0VXAoYik7dGhpcy5wYT0hMDthLmxvZygiTTg5Iil9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5CPSExO3RoaXMuZz0wO3RoaXMucGE9ITE7dGhpcy5SPXt9O3RoaXMucGQ9e307YS5sb2coIk05MCIpfTtlLnByb3RvdHlwZS5rYj1mdW5jdGlvbihhLGIsZil7dGhpcy5MbChhLGIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGIpLGYpfTtlLnByb3RvdHlwZS5MbD1mdW5jdGlvbihiLGgsZixuKXtpZihhLnV0aWxzLmlzRGVmaW5lZChmKSYmYS51dGlscy5pc0RlZmluZWQoZi5zZXQpJiYhYS51dGlscy5pc0RlZmluZWQoZi5JKSl7dmFyIG09dGhpcztPYmplY3QuZGVmaW5lUHJvcGVydHkoYixoLHtzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7dHJ5e2I9Zi5zZXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKGMpe3Rocm93IGM7Cn1maW5hbGx5e24uY2FsbChtLHRoaXMpfXJldHVybiBifX0pfX07ZS5wcm90b3R5cGUucWI9ZnVuY3Rpb24oYil7YS5QKCk7dGhpcy5MZChiKTthLlEoKX07ZS5wcm90b3R5cGUuTWs9ZnVuY3Rpb24oKXt2YXIgYj1FbGVtZW50LnByb3RvdHlwZSxoPXRoaXM7YS51dGlscy5pc0RlZmluZWQoYi5zZXRBdHRyaWJ1dGUpJiYoYi5zZXRBdHRyaWJ1dGU9YS5hb3AuYXJvdW5kKGIuc2V0QXR0cmlidXRlLG51bGwsZnVuY3Rpb24oKXt2YXIgYT1kKGFyZ3VtZW50cyk7InNyYyIhPWFbMF0mJiJocmVmIiE9YVswXXx8aC5xYi5jYWxsKGgsdGhpcyl9KSl9O2UucHJvdG90eXBlLmVkPWZ1bmN0aW9uKGIpe3ZhciBoPUVsZW1lbnQucHJvdG90eXBlLGY9dGhpczthLnV0aWxzLmlzRGVmaW5lZChoW2JdKSYmKGhbYl09YS5hb3AuYXJvdW5kKGhbYl0sbnVsbCxmdW5jdGlvbigpezA8YXJndW1lbnRzLmxlbmd0aCYmZi5xYi5jYWxsKGYsYXJndW1lbnRzWzBdKX0pKX07ZS5wcm90b3R5cGUudWc9ZnVuY3Rpb24oYil7YS5QKCk7CnRoaXMucGEmJmEudXRpbHMuaXNEZWZpbmVkKGIpJiZhLnV0aWxzLmlzRGVmaW5lZChiLmNoaWxkTm9kZXMpJiYodGhpcy5MZChiKSx0aGlzLmRoKGIuY2hpbGROb2RlcykpO2EuUSgpfTtlLnByb3RvdHlwZS5kaD1mdW5jdGlvbihiKXtmb3IodmFyIGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIGY9YltoXTsic2NyaXB0IiE9YS51dGlscy5qayhmKSYmdGhpcy5MZChmKTt0aGlzLmRoKGYuY2hpbGROb2Rlcyl9fTtlLnByb3RvdHlwZS5MZD1mdW5jdGlvbihiKXthLm1vbml0b3IuQW55U3BhTW9uaXRvci5jZCgpfHwodGhpcy5XayhiKT90aGlzLmZqKGIpOmEuY29uZi5lbmFibGVQcmltYXJ5TWV0cmljcyYmdGhpcy5naihiKSl9O2UucHJvdG90eXBlLmZqPWZ1bmN0aW9uKGIpe3ZhciBoPWEudXRpbHMuWGMoYik7YS51dGlscy5pc0RlZmluZWQoaCkmJihoPWgudmFsdWUsIWEudXRpbHMuaXNEZWZpbmVkKHRoaXMuYmNbaF0pJiYwPGgubGVuZ3RoJiYodGhpcy5nKyssdGhpcy5iY1toXT0hMCwKYS5sb2coIk05MSIsaCx0aGlzLmcpLHRoaXMuTWUoYikpKX07ZS5wcm90b3R5cGUuZ2o9ZnVuY3Rpb24oYil7dmFyIGg9YS51dGlscy5ub3coKTthLnV0aWxzLm5iKGIpJiYhYi5pc0FkcnVtVHJhY2tlZE5vZGU/KGg9YS51dGlscy5RYihiKSwhYS51dGlscy5pc0RlZmluZWQodGhpcy5iY1toXSkmJjA8aC5sZW5ndGgmJih0aGlzLmcrKyx0aGlzLmJjW2hdPSEwLHRoaXMuTWUoYiksYS5sb2coIk05MiIsaCx0aGlzLmcpKSk6YS51dGlscy5LZihiKSYmIWIuYWRydW1Ob2RlSWQ/KGEubG9nKCJNOTMiLGgpLGEuTi5JYihiLGgpKTphLnV0aWxzLlFmKGIpJiYoYS5OLlVhPU1hdGgubWF4KGEuTi5VYSxoKSl9O2UucHJvdG90eXBlLk1lPWZ1bmN0aW9uKGIpe3RoaXMubGJ8fCh0aGlzLks9dGhpcy5LLmJpbmQodGhpcyksdGhpcy5sPXRoaXMubC5iaW5kKHRoaXMpLHRoaXMuSy5JPSEwLHRoaXMubGI9dGhpcy5sLkk9ITApO3ZhciBoPWEudXRpbHMuWGMoYiksaD1hLnV0aWxzLmlzRGVmaW5lZChoKT8KaC52YWx1ZTpudWxsO2EudXRpbHMuU2YoYik/KGIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsdGhpcy5LKSxhLmxvZygiTTk0IixoKSk6KGIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdGhpcy5LKSxhLmxvZygiTTk1IixoLGIubm9kZU5hbWUpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix0aGlzLmwpfTtlLnByb3RvdHlwZS5ibD1mdW5jdGlvbihiKXtyZXR1cm4iTElOSyI9PWIubm9kZU5hbWU/KGI9Yi5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgicmVsIiksYS51dGlscy5pc0RlZmluZWQoYik/MDw9Yi52YWx1ZS5pbmRleE9mKCJzdHlsZXNoZWV0Iik6ITApOiEwfTtlLnByb3RvdHlwZS5Xaz1mdW5jdGlvbihhKXtyZXR1cm4vXihTQ1JJUFR8SU1HfExJTkspJC8udGVzdChhLm5vZGVOYW1lKSYmdGhpcy5ibChhKX07ZS5wcm90b3R5cGUuSz1mdW5jdGlvbihjKXthLlAoKTt2YXIgaD10aGlzLnBmKGMudGFyZ2V0KTshYS51dGlscy5pc0RlZmluZWQodGhpcy5SW2hdKSYmCjA8dGhpcy5nJiYodGhpcy5nLS0sdGhpcy5SW2hdPSEwLGEubG9nKCJNOTYiLGgsdGhpcy5nKSk7dGhpcy5iYT1hLnV0aWxzLm5vdygpO3RoaXMubWQrPTE7MT09dGhpcy5tZCYmKGIubi5XZygpLHRoaXMuQj0hMCk7dGhpcy50YihjLnRhcmdldCk7aD1jLnRhcmdldDthLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJmEudXRpbHMubmIoaCkmJiFoLmlzQWRydW1UcmFja2VkTm9kZSYmKGEubG9nKCJNOTciKSxhLk4uSyhjKSk7YS5RKCl9O2UucHJvdG90eXBlLmw9ZnVuY3Rpb24oYil7YS5QKCk7dmFyIGg9dGhpcy5wZihiLnRhcmdldCksZj1iLnRhcmdldDthLnV0aWxzLmlzRGVmaW5lZCh0aGlzLnBkW2hdKXx8KHRoaXMuZy0tLHRoaXMucGRbaF09ITAsYS5sb2coIk05OCIsaCx0aGlzLmcpKTthLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJmEudXRpbHMubmIoZikmJiFmLmlzQWRydW1UcmFja2VkTm9kZSYmKGEubG9nKCJNOTkiKSxhLk4ubChiKSk7dGhpcy50YihiLnRhcmdldCk7CmEuUSgpfTtlLnByb3RvdHlwZS5jaj1mdW5jdGlvbigpe3JldHVybiAwPHRoaXMuZyYmdGhpcy5CfTtlLnByb3RvdHlwZS5wZj1mdW5jdGlvbihhKXt2YXIgYj0iIjthIGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQ/Yj1hLnNyYzphIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9iPWEuc3JjOmEgaW5zdGFuY2VvZiBIVE1MTGlua0VsZW1lbnQmJihiPWEuaHJlZik7cmV0dXJuIGJ9O2UucHJvdG90eXBlLmJkPWZ1bmN0aW9uKGIpe3ZhciBoPXRoaXMuZyxmPTA7YS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiYoaCs9YS5OLmcsZj1hLk4uYmEpO2EubG9nKCJNMTAwIixoKTtyZXR1cm4gMD09aCYmdGhpcy5CJiYoYS5sb2coIk0xMDEiKSxoPU1hdGgubWF4KHRoaXMuYmEsZiksYi1oPj10aGlzLnBiKT8odGhpcy5yZXNldCgpLGgpOi0xfTtlLnByb3RvdHlwZS50Yj1mdW5jdGlvbihhKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHRoaXMuSyk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsCnRoaXMubCl9O3JldHVybiBlfSgpO2IuTGg9bH0pKGEuanx8KGEuaj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuTGM9M0UzO3RoaXMucGI9YS5jb25mLnVzZXJDb25mJiZhLmNvbmYudXNlckNvbmYubmF2Q29tcGxldGUmJmEuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZS5tYXhYaHJRdWlldFRpbWU/YS5jb25mLnVzZXJDb25mLm5hdkNvbXBsZXRlLm1heFhoclF1aWV0VGltZTp0aGlzLkxjfWUucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKGEpe3RoaXMubmQ9dGhpcy5nPTA7dGhpcy5EYT1hO3RoaXMucGE9dGhpcy5CPSExO3RoaXMudGg9e307dGhpcy5WZD17fX07ZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oYSl7dGhpcy5zZXRVcChhKTt0aGlzLnBhPSEwfTtlLnByb3RvdHlwZS5CZT1mdW5jdGlvbihiKXthLm1vbml0b3IuQW55U3BhTW9uaXRvci5jZCgpfHxhLnV0aWxzLmlzRGVmaW5lZCh0aGlzLnRoW2JdKXx8CiF0aGlzLnBhfHwodGhpcy5nKz0xLHRoaXMudGhbYl09ITAsYS5sb2coIk0xMDIiLGIsdGhpcy5nKSl9O2UucHJvdG90eXBlLlhpPWZ1bmN0aW9uKGMpeyFhLm1vbml0b3IuQW55U3BhTW9uaXRvci5jZCgpJiZ0aGlzLnBhJiYwPHRoaXMuZyYmKGEudXRpbHMuaXNEZWZpbmVkKHRoaXMuVmQpJiYhYS51dGlscy5pc0RlZmluZWQodGhpcy5WZFtjXSkmJih0aGlzLkRhPWEudXRpbHMubm93KCksdGhpcy5nLT0xLHRoaXMuVmRbY109ITAsYS5sb2coIk0xMDMiLGMsdGhpcy5nKSksdGhpcy5uZCs9MSwxPT10aGlzLm5kJiYoYi5uLldnKCksdGhpcy5CPSEwKSl9O2UucHJvdG90eXBlLmJkPWZ1bmN0aW9uKGEpe3JldHVybiAwPT10aGlzLmcmJnRoaXMuQiYmYS10aGlzLkRhPj10aGlzLnBiPyh0aGlzLnJlc2V0KCksdGhpcy5EYSk6LTF9O2UucHJvdG90eXBlLmRqPWZ1bmN0aW9uKCl7cmV0dXJuIDA8dGhpcy5nJiZ0aGlzLkJ9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5CPQohMTt0aGlzLmc9MDt0aGlzLnBhPSExfTtyZXR1cm4gZX0oKTtiLkJoPWx9KShhLmp8fChhLmo9e30pKX0pKGt8fChrPXt9KSk7dmFyIGQ9ay51dGlscy53YSxnPWsudXRpbHMuaXNGdW5jdGlvbjsoZnVuY3Rpb24oYSl7dmFyIGI9YS51dGlscy5nZW5lcmF0ZUdVSUQsbDsoZnVuY3Rpb24oYSl7YVthLlVTRVI9MF09IlVTRVIiO2FbYS5USU1FUj0xXT0iVElNRVIiO2FbYS5YSFI9Ml09IlhIUiI7YVthLlJFU09VUkNFPTNdPSJSRVNPVVJDRSI7YVthLlBST01JU0U9NF09IlBST01JU0UiO2FbYS5GRVRDSD01XT0iRkVUQ0giO2FbYS5PVEhFUj02XT0iT1RIRVIifSkobD1hLkNhdXNlVHlwZXx8KGEuQ2F1c2VUeXBlPXt9KSk7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oYyxmLG4pe3RoaXMuc3RhcnQ9YS51dGlscy5ub3coKTt0aGlzLnBhcmVudD1jO3RoaXMub2M9Zjt0aGlzLmd1aWQ9YigpO3RoaXMudHlwZT1ufX0oKTthLkRiPWU7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7fQpiLk9uPWZ1bmN0aW9uKCl7cmV0dXJuIGIuZXZlbnRzfTtiLkxmPWZ1bmN0aW9uKGIpe3JldHVybiBhLnV0aWxzLmlzRGVmaW5lZChiKSYmYS51dGlscy5pc0Z1bmN0aW9uKGIuaGFuZGxlRXZlbnQpfTtiLnhnPWZ1bmN0aW9uKGEsYyxtLHEpe3ZhciBlO2IucWEoYyk7dHJ5e2IuTGYoYSk/ZT1hLmhhbmRsZUV2ZW50LmFwcGx5KG0scSk6ZyhhKSYmKGU9YS5hcHBseShtLHEpKX1jYXRjaChwKXt0aHJvdyBwO31maW5hbGx5e2IuTCgpfXJldHVybiBlfTtiLnVjPWZ1bmN0aW9uKGMsbixtLHEpe2lmKCFhLnV0aWxzLmlzRGVmaW5lZChuKXx8bi5JKXJldHVybiBuO3ZhciBlO3F8fChlPWIuaWEoKSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBxPWIuT2EoYyxhLGUsbSk7cmV0dXJuIGIueGcobixxLHRoaXMsYXJndW1lbnRzKX19O2IuT2E9ZnVuY3Rpb24oYixjLG0saCl7bT9hLmxvZygiTTEwNCIsYixtLm9jLmFjdGlvbik6YS5sb2coIk0xMDUiLGIpO2EudXRpbHMuaXNEZWZpbmVkKGMpPyhjPQphLmNlLnVsKGMudGFyZ2V0fHxjLnNyY0VsZW1lbnQpLGMuYWN0aW9uPWIpOmM9bmV3IGEuS2EoYik7cmV0dXJuIG5ldyBlKG0sYyxoKX07Yi5mbj1mdW5jdGlvbihjLG4sbSl7aWYoIWEudXRpbHMuaXNEZWZpbmVkKG4pfHxuLkkpcmV0dXJuIG47dmFyIHE9Yi5PYShjLHZvaWQgMCxiLmlhKCksbSk7cmV0dXJuIGZ1bmN0aW9uKCl7bmV3IGEuS2EoYyk7cmV0dXJuIGIueGcobixxLHRoaXMsYXJndW1lbnRzKX19O2IuQm89ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtiLkdjKGEpO3JldHVybiBtfX07Yi5pYT1mdW5jdGlvbigpe3JldHVybiAwPGIuZXZlbnRzLmxlbmd0aD9iLmV2ZW50c1tiLmV2ZW50cy5sZW5ndGgtMV06bnVsbH07Yi5xYT1mdW5jdGlvbihhKXtiLmV2ZW50cy5wdXNoKGEpfTtiLkw9ZnVuY3Rpb24oKXtyZXR1cm4gYi5ldmVudHMucG9wKCl9O2IuSGM9ZnVuY3Rpb24oYixjKXt2YXIgbT1iLGg9MSxlPSIiOwppZighYS51dGlscy5pc0RlZmluZWQobSkpcmV0dXJuIG51bGw7Zm9yKDthLnV0aWxzLmlzRGVmaW5lZChtLnBhcmVudCk7KWU9IiAtPiAiK20ub2MuYWN0aW9uK2UsbT1tLnBhcmVudCxoKz0xO3ZhciBwPWEudXRpbHMubm93KCk7YS51dGlscy5pc0RlZmluZWQobS5vYykmJihlPW0ub2MuYWN0aW9uK2UrIiAtPiAiK2MpO2EubG9nKCJNMTA2IixlKTthLmxvZygiTTEwNyIsbS5zdGFydCxoKTthLmxvZygiTTEwOCIscC1tLnN0YXJ0KTtyZXR1cm4gbX07Yi5HYz1mdW5jdGlvbihhKXtyZXR1cm4gYi5IYyhiLmlhKCksYSl9O2Iudms9ZnVuY3Rpb24oKXt2YXIgYz1iLkdjKHZvaWQgMCk7aWYoYS51dGlscy5pc0RlZmluZWQoYykmJmEudXRpbHMuaXNEZWZpbmVkKGMudHlwZSkpcmV0dXJuW2wuVElNRVIsbC5VU0VSXS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBjLnR5cGU9PWF9KT9jOnZvaWQgMH07Yi5Vaz1mdW5jdGlvbihhKXtpZihnKGEpKXJldHVybiBhO3ZhciBiPSIiK2E7cmV0dXJuIGZ1bmN0aW9uKCl7ZXZhbChiKX19OwpiLnNldFVwPWZ1bmN0aW9uKCl7Yi5ldmVudHM9W107dmFyIGM9YS51dGlscy5yZWZzO1t7bGc6Yy5zZXRUaW1lb3V0LGtmOiJzZXRUaW1lb3V0In0se2xnOmMuc2V0SW50ZXJ2YWwsa2Y6InNldEludGVydmFsIn1dLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9YS5sZyxmPWEua2Y7d2luZG93W2ZdPWZ1bmN0aW9uKGEpe3ZhciBuPWQoYXJndW1lbnRzKTtpZihhKXt2YXIgZT1iLmtsKGYsYXJndW1lbnRzWzFdKT9sLk9USEVSOmwuVElNRVIsZT1iLmZuKGYsYi5VayhhKSxlKTtuWzBdPWU7cmV0dXJuIGMuYXBwbHkod2luZG93LG4pfWMuYXBwbHkod2luZG93LG4pfX0pfTtiLmtsPWZ1bmN0aW9uKGIsYyl7cmV0dXJuInNldFRpbWVvdXQiPT1iJiYoYS51dGlscy5pc0RlZmluZWQoYykmJjA9PWN8fCFhLnV0aWxzLmlzRGVmaW5lZChjKSl9O3JldHVybiBifSgpO2MuZXZlbnRzPVtdO2EuYz1jfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS51dGlscy5MaixsPXdpbmRvdy5hZGRFdmVudExpc3RlbmVyLAplPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5FdmVudFRhcmdldCk/d2luZG93LkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxjPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5FdmVudFRhcmdldCk/d2luZG93LkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxoPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsYixjLGYsaCxlLGwsdyl7dGhpcy5hY3Rpb249YXx8IiI7dGhpcy5UaD1ifHwiIjt0aGlzLmNsYXNzTmFtZT1jfHwiIjt0aGlzLnRhZ05hbWU9Znx8IiI7dGhpcy5uYW1lPWh8fCIiO3RoaXMudGV4dD1lfHwiIjt0aGlzLnNyYz1sO3RoaXMuaXRlbT13fX0oKTthLkthPWg7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7fWYuc2V0VXA9ZnVuY3Rpb24oKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShmLk1jLFtdKTtmLmNuKCk7YS51dGlscy5pc0RlZmluZWQod2luZG93LkV2ZW50VGFyZ2V0KT8KKGYuZG4oKSxmLmVuKCkpOmYuV2koKTtmLklmKCJvbmxvYWQiKTtmLklmKCJvbmVycm9yIil9O2YubG89ZnVuY3Rpb24oKXtyZXR1cm5bXX07Zi5iaz1mdW5jdGlvbihiLGMpe3ZhciBoPSIiO2lmKGEudXRpbHMuaXNEZWZpbmVkKGIpKWlmKCJzdHJpbmciPT09dHlwZW9mIGIudGV4dENvbnRlbnQpaD1hLnV0aWxzLmlzRGVmaW5lZChTdHJpbmcucHJvdG90eXBlLnRyaW0pP2IudGV4dENvbnRlbnQudHJpbSgpOmIudGV4dENvbnRlbnQsaD1hLnV0aWxzLmlzRGVmaW5lZChjKT9oLnN1YnN0cmluZygwLGMpOmg7ZWxzZSBmb3IoYj1iLmZpcnN0Q2hpbGQ7YS51dGlscy5pc0RlZmluZWQoYikmJiEoaCs9Zi5iayhiLGMpLGEudXRpbHMuaXNEZWZpbmVkKGMpJiZoLmxlbmd0aD49Yyk7Yj1iLm5leHRTaWJsaW5nKTtyZXR1cm4gaH07Zi51bD1mdW5jdGlvbihjKXt2YXIgZj1iKGMuaWQpfHwiIixuPWIoYy5jbGFzc05hbWUpfHwiIixlPSIiLGw9bmV3IGg7YyBpbnN0YW5jZW9mIEhUTUxIdG1sRWxlbWVudD8KKGU9Imh0bWwiLGwudGV4dD0iI2h0bWwiKTpjPT09ZG9jdW1lbnQ/KGU9ImRvY3VtZW50IixsLnRleHQ9IiNkb2N1bWVudCIpOmM9PT13aW5kb3c/KGU9IndpbmRvdyIsbC50ZXh0PSIjd2luZG93Iik6YyBpbnN0YW5jZW9mIFhNTEh0dHBSZXF1ZXN0PyhlPSJ4aHIiLGwuc3JjPWEudXRpbHMuaXNPYmplY3QoYy5fYWRydW1BamF4VCk/ZW5jb2RlVVJJKGMuX2FkcnVtQWpheFQudXJsKCkpOiIiKTpjIGluc3RhbmNlb2YgV2ViU29ja2V0PyhlPSJ3ZWJzb2NrZXQiLGwuc3JjPWVuY29kZVVSSShjLnVybCkpOmMgaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudD8oZT0ic2NyaXB0IixsLnNyYz1lbmNvZGVVUkkoYy5zcmMpKTpjIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQ/KGU9ImEiLGwudGV4dD1iKGMudGV4dCl8fCIiKTpjIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQ/KGU9ImJ1dHRvbiIsbC5uYW1lPWIoYy5uYW1lKSk6YyBpbnN0YW5jZW9mIEhUTUxEaXZFbGVtZW50PwplPSJkaXYiOmMgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50PyhlPSJpbWciLGwuc3JjPWVuY29kZVVSSShjLnNyYyksbC50ZXh0PWIoYy50aXRsZSl8fCIiKTpjIGluc3RhbmNlb2YgSFRNTExJRWxlbWVudD8oZT0ibGkiLGwuaXRlbT1jLnZhbHVlKTpjIGluc3RhbmNlb2YgSFRNTFVMaXN0RWxlbWVudD9lPSJ1bCI6YyBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudD9lPSJmb3JtIjpjIGluc3RhbmNlb2YgSFRNTEZyYW1lRWxlbWVudD8oZT0iZnJhbWUiLGwuc3JjPWVuY29kZVVSSShjLnNyYykpOmMgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50PyhlPWIoYy50eXBlKXx8ImlucHV0IixsLnRleHQ9YihjLnZhbHVlKSxsLm5hbWU9YihjLm5hbWUpKTpjIGluc3RhbmNlb2YgSFRNTFRhYmxlRWxlbWVudD9lPSJ0YWJsZSI6YyBpbnN0YW5jZW9mIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50P2U9InRjYXAiOmMgaW5zdGFuY2VvZiBIVE1MVGFibGVDZWxsRWxlbWVudD9lPSJ0ZCI6YyBpbnN0YW5jZW9mCkhUTUxUYWJsZVJvd0VsZW1lbnQ/ZT0idHIiOihlPWEudXRpbHMuaXNEZWZpbmVkKGMudGFnTmFtZSk/YihjLnRhZ05hbWUpOiIiLGEubG9nKCJNMTA5IixlKSk7bC5UaD1mO2wuY2xhc3NOYW1lPW47bC50YWdOYW1lPWU7YS51dGlscy5pc1N0cmluZyhsLnRleHQpJiYobC50ZXh0PWEudXRpbHMuaXNEZWZpbmVkKFN0cmluZy5wcm90b3R5cGUudHJpbSk/bC50ZXh0LnRyaW0oKTpsLnRleHQsbC50ZXh0PWwudGV4dC5zdWJzdHJpbmcoMCwzMCkpO3JldHVybiBsfTtmLmNuPWZ1bmN0aW9uKCl7YS51dGlscy5mb3JFYWNoKGYuTWMsZnVuY3Rpb24oYil7bChiLGZ1bmN0aW9uKGMpe2M9Yy50YXJnZXR8fGMuc3JjRWxlbWVudDsoYz09PWRvY3VtZW50fHxjPT09d2luZG93fHxjIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3R8fGMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkmJm51bGwhPWMmJmNbIm9uIitiXSYmKGNbIm9uIitiXT1hLmMudWMoYixjWyJvbiIrYl0sYS5DYXVzZVR5cGUuVVNFUiwKITApLGNbIm9uIitiXS5JPSEwKX0sITApfSl9O2YuV2k9ZnVuY3Rpb24oKXthLnV0aWxzLmZvckVhY2goZi5NYyxmdW5jdGlvbihiKXtsKGIsZnVuY3Rpb24oYyl7Yz1hLmMuT2EoYixjLG51bGwsYS5DYXVzZVR5cGUuVVNFUik7YS5jLnFhKGMpfSwhMCk7bChiLGZ1bmN0aW9uKCl7YS5jLkwoKX0sITEpfSl9O2YuaGg9ZnVuY3Rpb24oYil7dmFyIGM9ITE7YS51dGlscy5pc0Jvb2xlYW4oYik/Yz1iOmEudXRpbHMuaXNPYmplY3QoYikmJmEudXRpbHMuaXNEZWZpbmVkKGIuY2FwdHVyZSkmJihjPSEhYi5jYXB0dXJlKTtyZXR1cm4gY307Zi5NZz1mdW5jdGlvbihiLGMsZixoKXtpZighYS51dGlscy5pc0RlZmluZWQoYi5ldmVudExpc3RlbmVyTWFwKXx8IWEudXRpbHMuaXNEZWZpbmVkKGIuZXZlbnRMaXN0ZW5lck1hcFtjXSl8fCFhLnV0aWxzLmlzRGVmaW5lZChmKSlyZXR1cm4tMTtiPWIuZXZlbnRMaXN0ZW5lck1hcFtjXTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKWlmKGJbY11bMF09PQpmJiZiW2NdWzFdPT1oKXJldHVybiBjO3JldHVybi0xfTtmLkdmPWZ1bmN0aW9uKGIsYyxmLGgsbil7YS51dGlscy5pc0RlZmluZWQoYikmJmEudXRpbHMuaXNEZWZpbmVkKG4pJiYoYS51dGlscy5pc0RlZmluZWQoYi5ldmVudExpc3RlbmVyTWFwKXx8KGIuZXZlbnRMaXN0ZW5lck1hcD17fSksYS51dGlscy5pc0RlZmluZWQoYi5ldmVudExpc3RlbmVyTWFwW2NdKXx8KGIuZXZlbnRMaXN0ZW5lck1hcFtjXT1bXSksYi5ldmVudExpc3RlbmVyTWFwW2NdLnB1c2goW2YsaCxuXSkpfTtmLmJtPWZ1bmN0aW9uKGEsYixjKXtpZigtMTxjKXt2YXIgZj1hLmV2ZW50TGlzdGVuZXJNYXBbYl07ZGVsZXRlIGZbY107Zi5zcGxpY2UoYywxKTswPT1mLmxlbmd0aCYmZGVsZXRlIGEuZXZlbnRMaXN0ZW5lck1hcFtiXX19O2YuZG49ZnVuY3Rpb24oKXtFdmVudFRhcmdldC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihiLGMsaCl7aWYoYS51dGlscy5pc0RlZmluZWQoYykmJmMuSXx8CiFhLmMuTGYoYykmJiFnKGMpKXJldHVybiBlLmNhbGwodGhpcyxiLGMsaCk7dmFyIGw9Zi5oaChoKSxyPWEudXRpbHMuaXNEZWZpbmVkKHRoaXMpP3RoaXM6d2luZG93O2lmKCEoLTE8Zi5NZyhyLGIsYyxsKSkpe3ZhciBzPWM7c3dpdGNoKGIpe2Nhc2UgImNsaWNrIjpjYXNlICJkYmxjbGljayI6Y2FzZSAiYXV4Y2xpY2siOmNhc2UgIm1vdXNlZG93biI6Y2FzZSAibW91c2V1cCI6Y2FzZSAiZHJvcCI6Y2FzZSAia2V5dXAiOmNhc2UgImtleWRvd24iOmNhc2UgImtleXByZXNzIjpjYXNlICJjb250ZXh0bWVudSI6Y2FzZSAicGFnZUNoYW5nZWQiOmNhc2UgImNsb3NlIjpzPWEuYy51YyhiLGMsYS5DYXVzZVR5cGUuVVNFUiwhMCk7Zi5HZihyLGIsYyxsLHMpO2JyZWFrO2Nhc2UgImxvYWQiOmNhc2UgImVycm9yIjpzPWEuYy51YyhiLGMsYS5DYXVzZVR5cGUuVVNFUiwhMSksZi5HZihyLGIsYyxsLHMpfWUuY2FsbChyLGIscyxoKX19fTtmLmVuPWZ1bmN0aW9uKCl7RXZlbnRUYXJnZXQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9CmZ1bmN0aW9uKGIsaCxlKXtpZihhLnV0aWxzLmlzRGVmaW5lZChoKSYmaC5JKXJldHVybiBjLmNhbGwodGhpcyxiLGgsZSk7dmFyIGw9Zi5oaChlKSxyPWEudXRpbHMuaXNEZWZpbmVkKHRoaXMpP3RoaXM6d2luZG93LGw9Zi5NZyhyLGIsaCxsKTswPD1sPyhjLmNhbGwocixiLHRoaXMuZXZlbnRMaXN0ZW5lck1hcFtiXVtsXVsyXSxlKSxmLmJtKHIsYixsKSk6Yy5jYWxsKHIsYixoLGUpfX07Zi5JZj1mdW5jdGlvbihiKXt2YXIgYz1IVE1MRWxlbWVudC5wcm90b3R5cGUsZj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsYik7YS51dGlscy5pc0RlZmluZWQoZikmJmEudXRpbHMuaXNEZWZpbmVkKGYuc2V0KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsYix7c2V0OmZ1bmN0aW9uKGMpe3ZhciBoPWM7YS51dGlscy5pc0RlZmluZWQoYykmJihoPWEuYy51YyhiLGMsYS5DYXVzZVR5cGUuUkVTT1VSQ0UsITEpKTt2YXIgbjt0cnl7bj1mLnNldC5jYWxsKHRoaXMsaCl9Y2F0Y2goZSl7dGhyb3cgZTsKfXJldHVybiBufX0pfTtyZXR1cm4gZn0oKTtmLk1jPSJjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGxvYWQgdW5sb2FkIi5zcGxpdCgiICIpO2EuY2U9Zn0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLm1hcCxlPWEudXRpbHMuYm4sYz1hLnV0aWxzLmlzRGVmaW5lZCxoPWEudXRpbHMuaXNTdHJpbmcsZj1hLnV0aWxzLkNqLG49YS51dGlscy5pc0Z1bmN0aW9uO2IuZGc9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9ITEsZj0wO2Y8Yi5sZW5ndGg7ZisrKXt2YXIgaD1iW2ZdO2lmKGgmJmgudGVzdChhKSl7Yz0hMDticmVha319cmV0dXJuIGN9O2IuVmI9ZnVuY3Rpb24oYSxmLGgpe3ZhciBuPSExO2lmKGYmJmgpZm9yKHZhciBlPTA7ZTxoLmxlbmd0aDtlKyspe3ZhciBsPWhbZV07aWYoIShjKGwubWV0aG9kKSYmYSE9PWwubWV0aG9kfHxjKGwudXJscykmJgohYi5kZyhmLGwudXJscykpKXtuPSEwO2JyZWFrfX1yZXR1cm4gbn07Yi56Yj1mdW5jdGlvbihhLGIpe3JldHVybiBmKGwoZShiKSxhKSl9O2IucGM9ZnVuY3Rpb24oYSl7dmFyIGM9Yi5mayhhKTthPWIucWYoYSk7cmV0dXJuIGN8fGF9O2IuZms9ZnVuY3Rpb24oYil7dmFyIGY9Yi5tZXRob2Q7aWYoYyhmKSl7aWYoaChmKSlyZXR1cm4gYjthLmVycm9yKCJNMTEwIil9fTtiLldtPWZ1bmN0aW9uKGEpe3ZhciBjPWIucWYoYSk7cmV0dXJuIGIuV2woYSkmJmN9O2IuV2w9ZnVuY3Rpb24oYil7aWYobihiLmdldEZyb21Cb2R5KSlyZXR1cm4gYjthLmVycm9yKCJNMTExIil9O2Iud2o9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPVtdLGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIG49YltmXS5wYXR0ZXJuO2lmKGgobikpdHJ5e2MucHVzaChuZXcgUmVnRXhwKG4pKX1jYXRjaChlKXthLmV4Y2VwdGlvbihlLCJNMTEyIil9ZWxzZSBhLmVycm9yKCJNMTEzIil9cmV0dXJuIGN9O2IucWY9ZnVuY3Rpb24oYSl7dmFyIGM9CmEudXJscztpZihjJiYwPGMubGVuZ3RoJiYoYS51cmxzPWIud2ooYyksMDxhLnVybHMubGVuZ3RoKSlyZXR1cm4gYX19KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7YT1hLmV2ZW50c3x8KGEuZXZlbnRzPXt9KTthPWEuYnx8KGEuYj17fSk7YS5uYXZpZ2F0aW9uU3RhcnQ9Im5hdmlnYXRpb25TdGFydCI7YS5kb21haW5Mb29rdXBTdGFydD0iZG9tYWluTG9va3VwU3RhcnQiO2EuZG9tYWluTG9va3VwRW5kPSJkb21haW5Mb29rdXBFbmQiO2EuY29ubmVjdFN0YXJ0PSJjb25uZWN0U3RhcnQiO2Euc2VjdXJlQ29ubmVjdGlvblN0YXJ0PSJzZWN1cmVDb25uZWN0aW9uU3RhcnQiO2EuY29ubmVjdEVuZD0iY29ubmVjdEVuZCI7YS5yZXF1ZXN0U3RhcnQ9InJlcXVlc3RTdGFydCI7YS5yZXNwb25zZVN0YXJ0PSJyZXNwb25zZVN0YXJ0IjthLnJlc3BvbnNlRW5kPSJyZXNwb25zZUVuZCI7YS5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydD0iZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQiOwphLmxvYWRFdmVudEVuZD0ibG9hZEV2ZW50RW5kIjthLk5nPSJzZW5kVGltZSI7YS5oZj0iZmlyc3RCeXRlVGltZSI7YS5IZz0icmVzcEF2YWlsVGltZSI7YS5JZz0icmVzcFByb2NUaW1lIjthLlJkPSJ2aWV3Q2hhbmdlU3RhcnQiO2Euamg9InZpZXdDaGFuZ2VFbmQiO2EuU2Q9InZpZXdET01Mb2FkZWQiO2Euc2g9InhoclJlcXVlc3RzQ29tcGxldGVkIjthLnpvPSJ2aWV3RnJhZ21lbnRzTG9hZGVkIjthLkFvPSJ2aWV3UmVzb3VyY2VzTG9hZGVkIjthLlRkPSJ2aXJ0dWFsUGFnZVN0YXJ0IjthLlptPSJ2aXJ0dWFsUGFnZUVuZCJ9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXt2YXIgYj1hLmV2ZW50c3x8KGEuZXZlbnRzPXt9KTtiLm1ldHJpY1NwZWM9e307Yi5tZXRyaWNTcGVjW2EuRXZlbnRUeXBlLlBhZ2VWaWV3XT17S2o6e3N0YXJ0OmIuYi5uYXZpZ2F0aW9uU3RhcnQsZW5kOmIuYi5sb2FkRXZlbnRFbmQsbmFtZToiUExUIn0sU2o6e3N0YXJ0OmIuYi5uYXZpZ2F0aW9uU3RhcnQsCmVuZDpiLmIucmVzcG9uc2VTdGFydCxuYW1lOiJGQlQifSxybzp7c3RhcnQ6Yi5iLm5hdmlnYXRpb25TdGFydCxlbmQ6Yi5iLnJlcXVlc3RTdGFydCxuYW1lOiJTQ1QifSxzbzp7c3RhcnQ6Yi5iLnNlY3VyZUNvbm5lY3Rpb25TdGFydCxlbmQ6Yi5iLmNvbm5lY3RFbmQsbmFtZToiU0hUIn0sTG46e3N0YXJ0OmIuYi5kb21haW5Mb29rdXBTdGFydCxlbmQ6Yi5iLmRvbWFpbkxvb2t1cEVuZCxuYW1lOiJETFQifSx3bzp7c3RhcnQ6Yi5iLmNvbm5lY3RTdGFydCxlbmQ6Yi5iLmNvbm5lY3RFbmQsbmFtZToiVENQIn0sb286e3N0YXJ0OmIuYi5yZXF1ZXN0U3RhcnQsZW5kOmIuYi5yZXNwb25zZVN0YXJ0LG5hbWU6IlJBVCJ9LE5uOntzdGFydDpiLmIucmVzcG9uc2VTdGFydCxlbmQ6Yi5iLmxvYWRFdmVudEVuZCxuYW1lOiJGRVQifSxSbjp7c3RhcnQ6Yi5iLnJlc3BvbnNlU3RhcnQsZW5kOmIuYi5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCxuYW1lOiJEUlQifSxRbjp7c3RhcnQ6Yi5iLnJlc3BvbnNlU3RhcnQsCmVuZDpiLmIucmVzcG9uc2VFbmQsbmFtZToiRERUIn0sSm46e3N0YXJ0OmIuYi5yZXNwb25zZUVuZCxlbmQ6Yi5iLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0LG5hbWU6IkRQVCJ9LG5vOntzdGFydDpiLmIuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQsZW5kOmIuYi5sb2FkRXZlbnRFbmQsbmFtZToiUFJUIn0sS246e3N0YXJ0OmIuYi5uYXZpZ2F0aW9uU3RhcnQsZW5kOmIuYi5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCxuYW1lOiJET00ifX07Yi5tZXRyaWNTcGVjW2EuRXZlbnRUeXBlLkFqYXhdPXtTajp7c3RhcnQ6Yi5iLk5nLGVuZDpiLmIuaGYsbmFtZToiRkJUIn0seG46e3N0YXJ0OmIuYi5oZixlbmQ6Yi5iLkhnLG5hbWU6IkREVCJ9LHduOntzdGFydDpiLmIuSGcsZW5kOmIuYi5JZyxuYW1lOiJEUFQifSxLajp7c3RhcnQ6Yi5iLk5nLGVuZDpiLmIuSWcsbmFtZToiUExUIn19O2IubWV0cmljU3BlY1thLkV2ZW50VHlwZS5WUGFnZVZpZXddPXtlbzp7c3RhcnQ6Yi5iLlRkLAplbmQ6Yi5iLlptLG5hbWU6IlBMVCJ9LEZuOntzdGFydDpiLmIuUmQsZW5kOmIuYi5qaCxuYW1lOiJERFQifSxhbzp7c3RhcnQ6Yi5iLlJkLGVuZDpiLmIuU2QsbmFtZToiRFJUIn0sb246e3N0YXJ0OmIuYi5qaCxlbmQ6Yi5iLlNkLG5hbWU6IkRQVCJ9LHBuOntzdGFydDpiLmIuUmQsZW5kOmIuYi5TZCxuYW1lOiJET00ifSxtbzp7c3RhcnQ6InZpZXdDaGFuZ2VFbmQiLGVuZDoieGhyUmVxdWVzdHNDb21wbGV0ZWQiLG5hbWU6bnVsbH0sYm86e3N0YXJ0OiJ2aWV3Q2hhbmdlRW5kIixlbmQ6InZpZXdQYXJ0aWFsc0xvYWRlZCIsbmFtZTpudWxsfSwkbjp7c3RhcnQ6InZpZXdQYXJ0aWFsc0xvYWRlZCIsZW5kOiJ2aWV3RnJhZ21lbnRzTG9hZGVkIixuYW1lOm51bGx9LGNvOntzdGFydDoidmlld1BhcnRpYWxzTG9hZGVkIixlbmQ6InZpZXdSZXNvdXJjZXNMb2FkZWQiLG5hbWU6bnVsbH19O2IubWV0cmljU3BlY1thLkV2ZW50VHlwZS5OR19WSVJUVUFMX1BBR0VdPWIubWV0cmljU3BlY1thLkV2ZW50VHlwZS5WUGFnZVZpZXddfSkoa3x8CihrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1mdW5jdGlvbihlKXtmdW5jdGlvbiBjKGgpe2g9ZS5jYWxsKHRoaXMsaCl8fHRoaXM7aC5jb25zdHJ1Y3RvciE9YyYmaC5jb25zdHJ1Y3RvciE9Yi5BZHJ1bUFqYXgmJmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLkFqYXgiLFtdKTtyZXR1cm4gaH12KGMsZSk7Yy5wcm90b3R5cGUudHlwZT1mdW5jdGlvbigpe3JldHVybiBhLkV2ZW50VHlwZS5BamF4fTtyZXR1cm4gY30oYi5FdmVudFRyYWNrZXIpO2IuQWpheD1sO2IuTWEoYi5UW2EuRXZlbnRUeXBlLkFqYXhdLGwucHJvdG90eXBlKTtiLkllKGIubWV0cmljU3BlY1thLkV2ZW50VHlwZS5BamF4XSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhhKXtyZXR1cm4gYi5jYWxsKHRoaXMsYSl8fAp0aGlzfXYoYyxiKTtjLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnRUeXBlLkFqYXh9O3JldHVybiBjfShiLkFqYXgpO2IuQWRydW1BamF4PWw7Yi5NYShiLlRbYS5FdmVudFR5cGUuQURSVU1fWEhSXSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS51dGlscy5pc0RlZmluZWQsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoKXt9Yy53ZD1mdW5jdGlvbihiLGYpe2EuY29uZi5zcGEyP2MudWooYixmKTpjLkxnKGIsZil9O2MudWo9ZnVuY3Rpb24oaCxmKXt2YXIgbj1hLmMuSGMoaC5oKTtpZihsKGEubW9uaXRvci5BbnlTcGFNb25pdG9yLnZwKSYmIWEubW9uaXRvci5BbnlTcGFNb25pdG9yLkJhJiZhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cC5lYj09bil7Zi5wYXJlbnQoYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnApO2lmKCsrYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnAuSmU+CmIudWEubWF4UGVyUGFnZVZpZXcpcmV0dXJuO2MuTGcoaCxmKX1lbHNlIGwoYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnApJiYhYS5tb25pdG9yLkFueVNwYU1vbml0b3IuQmEmJmYucGFyZW50KGEubW9uaXRvci5BbnlTcGFNb25pdG9yLnZwKSxjLnZkKGYsaCksYi5vU1RPKGMuY20sYy5BaSk7ZGVsZXRlIGguX2FkcnVtQWpheFQ7YS5qLm4uRy5YaShmLnVybCgpKX07Yy5MZz1mdW5jdGlvbihoLGYpe3ZhciBuPXt9O2guQWU9bjtkZWxldGUgaC5fYWRydW1BamF4VDt2YXIgbT17fTtpZihoIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3QpdHJ5e2lmKG09e3N0YXR1czpoLnN0YXR1cyxnZXRBbGxSZXNwb25zZUhlYWRlcnM6aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKX0sNDAwPD1oLnN0YXR1cylpZihiLmlzU3RyaW5nKGguc3RhdHVzVGV4dCkpbS5zdGF0dXNUZXh0PWguc3RhdHVzVGV4dDtlbHNlIHRyeXttLnJlc3BvbnNlVGV4dD1oLnJlc3BvbnNlVGV4dH1jYXRjaChlKXttLnJlc3BvbnNlVHlwZT0KaC5yZXNwb25zZVR5cGV9fWNhdGNoKGwpe2EuZXJyb3IoIk0xMTQiLGwpfWIuZ2MoZnVuY3Rpb24oKXtoLkFlPT09biYmYy5yZXBvcnRYaHIobSxmKX0pfTtjLnJlcG9ydFhocj1mdW5jdGlvbihiLGYpe2MuZmgoYixmKTthLmNvbW1hbmQoInJlcG9ydFhociIsZil9O2MudmQ9ZnVuY3Rpb24oYixmKXtpZihsKGYuaCkpe3ZhciBuPWEuYy5IYyhmLmgpLmd1aWQ7Yy5maChmLGIpO2woYy5oYVtuXSl8fChjLmhhW25dPVtdKTstMT09Yy5oYVtuXS5pbmRleE9mKGIpJiZjLmhhW25dLnB1c2goYil9ZWxzZSBhLmxvZygifkFueVNQQTogZXJyb3IgaW4gcHV0SW5QYXJlbnRFdmVudFdhaXRpbmdRdWV1ZSgpIGFzIHhoci5hZHJ1bV9jYXVzYWxFdmVudCBpcyB1bmRlZmluZWQuIil9O2MuZmg9ZnVuY3Rpb24oYSxjKXt2YXIgbj1jLnJlc3BvbnNlfHxhLG09bi5zdGF0dXMsZTtiLmlzTnVtYmVyKG0pJiZjLnhoclN0YXR1cyhtKTtpZihuLmdldEFsbFJlc3BvbnNlSGVhZGVycyl7dmFyIGw9Yi5pc0Z1bmN0aW9uKG4uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKT8Kbi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTpuLmdldEFsbFJlc3BvbnNlSGVhZGVycztjLmFsbFJlc3BvbnNlSGVhZGVycyhsKX1pZig0MDA8PW0pe2lmKGIuaXNTdHJpbmcobi5zdGF0dXNUZXh0KSllPW4uc3RhdHVzVGV4dDtlbHNlIHRyeXtiLmlzU3RyaW5nKG4ucmVzcG9uc2VUZXh0KSYmKGU9bi5yZXNwb25zZVRleHQpfWNhdGNoKHApe2IuaXNTdHJpbmcobi5yZXNwb25zZVR5cGUpJiYoZT1uLnJlc3BvbnNlVHlwZSl9Yy5lcnJvcih7c3RhdHVzOm0sbXNnOmV9KX19O2MuU209ZnVuY3Rpb24oYSxiKXt2YXIgYz0iIjthLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihhLGIpe2MrPWIrIjogIithKyJcclxuIn0pO2IuYWxsUmVzcG9uc2VIZWFkZXJzKGMpfTtjLkJnPWZ1bmN0aW9uKGEpe2MuaGFbYV09W107ZGVsZXRlIGMuaGFbYV19O2Mud2w9ZnVuY3Rpb24oYixmKXt2YXIgbj1jLmhhW2ZdO2wobikmJihuLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5wYXJlbnQoYik7YS5jb21tYW5kKCJyZXBvcnRYaHIiLApjKX0pLGMuQmcoZikpfTtjLmNtPWZ1bmN0aW9uKCl7Zm9yKHZhciBoIGluIGMuaGEpe2Zvcih2YXIgZj0wLG49Yy5oYVtoXTtmPG4ubGVuZ3RoO2YrKyl7dmFyIG09bltmXTshbChhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cCkmJisrYy5oajw9Yi51YS5tYXhQZXJQYWdlVmlldz9hLmNvbW1hbmQoInJlcG9ydFhociIsbSk6bChhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cCkmJisrYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnAuSmU8PWIudWEubWF4UGVyUGFnZVZpZXcmJmEuY29tbWFuZCgicmVwb3J0WGhyIixtKX1jLkJnKGgpfX07cmV0dXJuIGN9KCk7ZS5BaT0yRTM7ZS5oYT17fTtlLmhqPTA7Yi52Yz1lfSkoYS51dGlsc3x8KGEudXRpbHM9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLmlzRGVmaW5lZCxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe31jLnNldFVwPWZ1bmN0aW9uKCl7Yy5leGNsdWRlPVt7dXJsczpbbmV3IFJlZ0V4cChhLmNvbmYuYmVhY29uVXJsSHR0cCsKYS5jb25mLmNvcnNFbmRwb2ludFBhdGgpLG5ldyBSZWdFeHAoYS5jb25mLmJlYWNvblVybEh0dHBzK2EuY29uZi5jb3JzRW5kcG9pbnRQYXRoKV19XTtjLmluY2x1ZGU9W107Yy5tYXhQZXJQYWdlVmlldz1jLlZsKGEuY29uZi51c2VyQ29uZiYmYS5jb25mLnVzZXJDb25mLnhocik7Yy5wYXlsb2FkUGFyYW1zPVtdO2MucGFyYW1ldGVyPXt9O2MudGcoYS5jb25mLnVzZXJDb25mJiZhLmNvbmYudXNlckNvbmYueGhyKX07Yy50Zz1mdW5jdGlvbihhKXtsKGEpJiYoYy5leGNsdWRlPWMuZXhjbHVkZS5jb25jYXQoYi56YihiLnBjLGEuZXhjbHVkZSkpLGMuaW5jbHVkZT1jLmluY2x1ZGUuY29uY2F0KGIuemIoYi5wYyxhLmluY2x1ZGUpKSxjLnBheWxvYWRQYXJhbXM9Yy5wYXlsb2FkUGFyYW1zLmNvbmNhdChiLnpiKGIucGMsYS5wYXlsb2FkUGFyYW1zKSksYy5wYXJhbWV0ZXI9Yi56YihiLldtLGEucGFyYW1ldGVyKSl9O2MuVmw9ZnVuY3Rpb24oaCl7aWYobChoKSl7aD1oLm1heFBlclBhZ2VWaWV3OwppZihiLmlzTnVtYmVyKGgpJiYwPGgpcmV0dXJuIGg7YS5yZXBvcnRBUElNZXNzYWdlKGEuVi55aCwidmFsdWUgaXMgbm90IHZhbGlkOyBkb24ndCBsaW1pdCB4aHIiLCJ4aHIubWF4UGVyUGFnZVZpZXciLFtoXSl9cmV0dXJuIGEuY29uZi5zcGEyP2MuSGg6Yy5HaH07Yy5sYz1mdW5jdGlvbihhLGYpe3ZhciBuPWMuaW5jbHVkZSxtPWMuZXhjbHVkZTtyZXR1cm4gbChuKSYmMDxuLmxlbmd0aCYmIWIuVmIoZixhLG4pfHxsKG0pJiYwPG0ubGVuZ3RoJiZiLlZiKGYsYSxtKX07Yy5VZz1mdW5jdGlvbihhLGYpe3ZhciBuPWMucGF5bG9hZFBhcmFtcztiLlZiKGEubWV0aG9kKCksYS51cmwoKSxuKSYmYS5kYXRhT2JqZWN0KHtkYXRhOmZ9KX07cmV0dXJuIGN9KCk7ZS5HaD01MDtlLkhoPTI1MDtiLnVhPWV9KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe2IucGFyc2VVUkk9ZnVuY3Rpb24oYSl7dmFyIGI9U3RyaW5nKGEpLnJlcGxhY2UoL15ccyt8XHMrJC9nLAoiIikubWF0Y2goL14oW146XC8/I10rOik/KD86XC9cLyg/OihbXjpAXC8/I10qKSg/OjooW146QFwvPyNdKikpP0ApPygoW146XC8/I10qKSg/OjooXGQqKSk/KSk/KFtePyNdKikoXD9bXiNdKik/KCNbXHNcU10qKT8vKTthPWImJm51bGwhPWEubWF0Y2goYlsxXSsiLy8iKTtyZXR1cm4gYiYme2hyZWY6YlswXXx8IiIscHJvdG9jb2w6YlsxXXx8IiIsc2xhc2g6YT8iLy8iOiIiLHVzZXJuYW1lOmJbMl18fCIiLHBhc3N3b3JkOmJbM118fCIiLGhvc3Q6Yls0XXx8IiIsaG9zdG5hbWU6Yls1XXx8IiIscG9ydDpiWzZdfHwiIixwYXRobmFtZTpiWzddfHwiIixzZWFyY2g6Yls4XXx8IiIsaGFzaDpiWzldfHwiIn19O2IuYWJzb2x1dGl6ZVVSST1mdW5jdGlvbihhLGUpe2Z1bmN0aW9uIGMoYSl7dmFyIGI9W107YS5yZXBsYWNlKC9eKFwuXC4/KFwvfCQpKSsvLCIiKS5yZXBsYWNlKC9cLyhcLihcL3wkKSkrL2csIi8iKS5yZXBsYWNlKC9cL1wuXC4kLywiLy4uLyIpLnJlcGxhY2UoL1wvP1teXC9dKi9nLApmdW5jdGlvbihhKXsiLy4uIj09PWE/Yi5wb3AoKTpiLnB1c2goYSl9KTtyZXR1cm4gYi5qb2luKCIiKS5yZXBsYWNlKC9eXC8vLCIvIj09PWEuY2hhckF0KDApPyIvIjoiIil9dmFyIGgsZixuLG0scSx0LHAscjtyPWU/Yi5wYXJzZVVSSShlKTp7fTtwPWE/Yi5wYXJzZVVSSShhKTp7fTtyLnByb3RvY29sPyhoPXIucHJvdG9jb2wsZj1yLnNsYXNoLG49ci51c2VybmFtZSxtPXIucGFzc3dvcmQscT1yLmhvc3QsdD1jKHIucGF0aG5hbWUpLHA9ci5zZWFyY2gpOnIuaG9zdD8oaD1wLnByb3RvY29sLGY9cC5zbGFzaCxuPXIudXNlcm5hbWUsbT1yLnBhc3N3b3JkLHE9ci5ob3N0LHQ9YyhyLnBhdGhuYW1lKSxwPXIuc2VhcmNoKTooaD1wLnByb3RvY29sLGY9cC5zbGFzaCxuPXAudXNlcm5hbWUsbT1wLnBhc3N3b3JkLHE9cC5ob3N0LHIucGF0aG5hbWU/KCIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3Q9YyhyLnBhdGhuYW1lKToodD1wLnBhdGhuYW1lP3AucGF0aG5hbWUuc2xpY2UoMCwKcC5wYXRobmFtZS5sYXN0SW5kZXhPZigiLyIpKzEpK3IucGF0aG5hbWU6Zj8iLyIrci5wYXRobmFtZTpyLnBhdGhuYW1lLHQ9Yyh0KSkscD1yLnNlYXJjaCk6KHQ9YyhwLnBhdGhuYW1lKSxwPXIuc2VhcmNofHxwLnNlYXJjaCkpO3JldHVybiBoK2YrKG4/bisobT8iOiIrbToiIikrIkAiOiIiKStxK3QrcCsoci5oYXNoP3IuaGFzaDoiIil9O2IuZ2V0RnVsbHlRdWFsaWZpZWRVcmw9ZnVuY3Rpb24obCl7dHJ5e3ZhciBlLGM9ZG9jdW1lbnQubG9jYXRpb24uaHJlZixoO2E6e2Zvcih2YXIgZj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYmFzZSIpLG49MDtuPGYubGVuZ3RoO24rKyl7dmFyIG09ZltuXS5ocmVmO2lmKG0pe2g9bTticmVhayBhfX1oPXZvaWQgMH1lPWg/Yi5hYnNvbHV0aXplVVJJKGMsaCk6YztyZXR1cm4gYi5hYnNvbHV0aXplVVJJKGUsbCl9Y2F0Y2gocSl7cmV0dXJuIGEuZXhjZXB0aW9uKHEsIk0xMTUiLGwsZSksbH19fSkoYS51dGlsc3x8KGEudXRpbHM9Cnt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS51dGlscy5pc1N0cmluZyxlPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGgoKXt2YXIgYT1jLmNhbGwodGhpcyl8fHRoaXM7YS5jYT0wO2EuY2E9MDtyZXR1cm4gYX12KGgsYyk7aC5wcm90b3R5cGUuZmM9ZnVuY3Rpb24oKXt0aGlzLmNhPTB9O2gubD1mdW5jdGlvbihiKXt2YXIgYz1iLm1lc3NhZ2V8fGIuZGVzY3JpcHRpb24sbT1iLmZpbGVOYW1lfHxiLmZpbGVuYW1lLGg9Yi5saW5lTnVtYmVyLGU9Yi5jb2x1bW5OdW1iZXI7bChiLmRlc2NyaXB0aW9uKSYmMDw9Yi5kZXNjcmlwdGlvbi5pbmRleE9mKCJBY2Nlc3MgaXMgZGVuaWVkLiIpJiYoYys9IjogbWF5YmUgeW91IGhhdmUgQ09SUyBYSFIgZXJyb3IgaW4gSUUiKTthLm1vbml0b3IuZ2EuSGEoYyxtLGgsZSxiKX07aC5QZj1mdW5jdGlvbihhKXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Yy5ocmVmPWE7YT1kb2N1bWVudC5sb2NhdGlvbjsKdmFyIG09YS5wcm90b2NvbDtyZXR1cm4gYy5wcm90b2NvbD09PW0mJmMuaG9zdG5hbWU9PT1hLmhvc3RuYW1lJiZoLlBsKGIuWEhSTW9uaXRvci5CalttXSxjLnBvcnQsYS5wb3J0KX07aC5QbD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuKGJ8fGEpPT09KGN8fGEpfTtyZXR1cm4gaH0oYi53Yyk7ZS5Caj17Imh0dHA6IjoiODAiLCJodHRwczoiOiI0NDMifTtiLnZhPWV9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLnVhLGU9YS51dGlscy52YyxjPWEudXRpbHMubWVyZ2VKU09OLGg9YS5ldmVudHMuQWRydW1BamF4LGY9YS51dGlscy5pc1N0cmluZyxuPWEudXRpbHMuaXNEZWZpbmVkLG09YS51dGlscy5pc051bWJlcixxPWEudXRpbHMuZ2V0RnVsbHlRdWFsaWZpZWRVcmwsdD1hLmNvbmYuc3BhMjtiLmNiPW51bGw7Yi5vaD13aW5kb3cuZmV0Y2g7dmFyIHA9ZnVuY3Rpb24ocCl7ZnVuY3Rpb24gaygpe3JldHVybiBudWxsIT09CnAmJnAuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXYoayxwKTtrLnByb3RvdHlwZS5Oaz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywiZmV0Y2giKTtpZighY3x8Yy5jb25maWd1cmFibGUpe2MmJmRlbGV0ZSBjLndyaXRhYmxlO2MmJmRlbGV0ZSBjLnZhbHVlO2N8fChjPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pO3ZhciBmPWMuc2V0LG09Yy5nZXQ7Yy5zZXQ9ZnVuY3Rpb24oYyl7ITAhPT1jLmlzQWdlbnRGZXRjaCYmKG4oZikmJmYuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4oYi5jYil8fGEuc2V0VXAoYykpfTtjLmdldD1mdW5jdGlvbigpe3ZhciBhPWIub2g7bihtKSYmKGE9bS5hcHBseSh0aGlzLGFyZ3VtZW50cykpO24oYi5jYikmJihhPWIuY2IpO3JldHVybiBhfX1PYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJmZXRjaCIsYyl9O2sucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKGYpe3ZhciBtPQp0aGlzO2Y9Znx8d2luZG93LmZldGNofHxiLm9oO2EubG9nKCJNMTE2Iik7aWYobihmKSl7dmFyIHE9ZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKGYsaCl7dmFyIG49YXJndW1lbnRzO2EubG9nKCJNMTE3IixtLl9hZHJ1bUFqYXhULnVybCgpLG0uX2FkcnVtQWpheFQubWV0aG9kKCkpO3ZhciBsPWEudXRpbHMubm93KCk7Yi52YS5QZihtLl9hZHJ1bUFqYXhULnVybCgpKSYmKG49ay5SaShhcmd1bWVudHMpKTt2YXIgcT1jLmFwcGx5KHRoaXMsbikscD1uZXcgd2luZG93LlByb21pc2UoZnVuY3Rpb24oYixjKXtxLnRoZW4oZnVuY3Rpb24oYyl7YS5sb2coIk0xMTgiLG0uX2FkcnVtQWpheFQudXJsKCkpO2EubG9nKCJNMTE5IixsLG0uX2FkcnVtQWpheFQudXJsKCkpO2UuU20oYyxwLl9hZHJ1bUFqYXhUKTtwLl9hZHJ1bUFqYXhULm1hcmtGaXJzdEJ5dGVUaW1lKHAuX2FkcnVtQWpheFQuZ2V0Rmlyc3RCeXRlVGltZSgpfHxhLnV0aWxzLm5vdygpKTtwLl9hZHJ1bUFqYXhULnJlc3BvbnNlPQpjO2lmKGcoYy5jbG9uZSkpe2EubG9nKCJNMTIwIixtLl9hZHJ1bUFqYXhULnVybCgpKTt2YXIgZj1jLmNsb25lKCkudGV4dCgpO2ZbImNhdGNoIl0oZnVuY3Rpb24oKXtrLlRjKHApfSk7ay54ayhmLHApfWVsc2UgYS5sb2coIk0xMjEiLG0uX2FkcnVtQWpheFQudXJsKCkpLGsud20ocCxjKTtiKGMpfSk7cVsiY2F0Y2giXShmdW5jdGlvbihiKXthLmxvZygiTTEyMiIsbS5fYWRydW1BamF4VC51cmwoKSk7cC5fYWRydW1BamF4VC5tYXJrRmlyc3RCeXRlVGltZShwLl9hZHJ1bUFqYXhULmdldEZpcnN0Qnl0ZVRpbWUoKXx8YS51dGlscy5ub3coKSk7ay5UYyhwKTtjKGIpfSl9KTtwLl9hZHJ1bUFqYXhUPW0uX2FkcnVtQWpheFQ7cC5JPSEwO3AuX2FkcnVtQWpheFQudGltZXN0YW1wKGwpO3AuX2FkcnVtQWpheFQubWFya1NlbmRUaW1lKGwpO3AuX2FkcnVtQWpheFQucGFyZW50UGhhc2UoYS5saWZlY3ljbGUuZ2V0UGhhc2VOYW1lKCkpO2sucW0ocC5fYWRydW1BamF4VCxhcmd1bWVudHMpOwphLmxvZygiTTEyMyIsbCxtLl9hZHJ1bUFqYXhULnVybCgpKTt0JiYocC5oPW5ldyBhLkRiKGEuYy5pYSgpLG5ldyBhLkthKCJ3aW5kb3cuZmV0Y2giKSxhLkNhdXNlVHlwZS5GRVRDSCkpO3JldHVybiBwfX07cS5pc0FnZW50RmV0Y2g9ITA7Yi5jYj1hLmFvcC5hcm91bmQocShmKSxmdW5jdGlvbigpe3ZhciBmPWsucWsoYXJndW1lbnRzKTshdCYmKyttLmNhK2IueGhyTW9uaXRvci5jYT49bC5tYXhQZXJQYWdlVmlld3x8bC5sYyhmLnVybCxmLm1ldGhvZCk/YS5sb2coIk0xMjQiLGYudXJsKToobS5fYWRydW1BamF4VD1uZXcgaChjKGYsbS5zdGF0dXMpKSx0JiYobS5oPWEuYy5PYSgid2luZG93LmZldGNoLnNlbmQiLHZvaWQgMCxhLmMuaWEoKSxhLkNhdXNlVHlwZS5GRVRDSCksYS5jLnFhKG0uaCkpKX0sZnVuY3Rpb24oKXshdCYmbS5jYStiLnhock1vbml0b3IuY2E+PWwubWF4UGVyUGFnZVZpZXc/YS5sb2coIk0xMjUiLG0uX2FkcnVtQWpheFQudXJsKCkpOmwubGMobS5fYWRydW1BamF4VC51cmwoKSwKbS5fYWRydW1BamF4VC5tZXRob2QoKSk/YS5sb2coIk0xMjYiLG0uX2FkcnVtQWpheFQudXJsKCkpOnQmJihhLmoubi5HLkJlKG0uX2FkcnVtQWpheFQudXJsKCkpLGEuYy5MKCkpfSwiZmV0Y2giLGIudmEubCk7d2luZG93LmZldGNoPWIuY2J9fTtrLnhrPWZ1bmN0aW9uKGIsYyl7Yi50aGVuKGZ1bmN0aW9uKGIpe3ZhciBmPWEudXRpbHMubm93KCk7ay5hYShjKSYmKGMuX2FkcnVtQWpheFQucmVzcG9uc2UucmVzcG9uc2VUZXh0PWIsay4kZihjLl9hZHJ1bUFqYXhULGYpLGI9Yy5fYWRydW1BamF4VC5nZXRSZXNwUHJvY1RpbWUoKSxuKGIpfHxuKGMuX2FkcnVtQWpheFQudykmJjAhPT1jLl9hZHJ1bUFqYXhULnd8fChhLmxvZygiTTEyNyIsZixjLl9hZHJ1bUFqYXhULnVybCgpKSxjLl9hZHJ1bUFqYXhULm1hcmtSZXNwUHJvY1RpbWUoZiksay5UYShjKSkpfSlbImNhdGNoIl0oZnVuY3Rpb24oKXtrLlRjKGMpfSl9O2suVGM9ZnVuY3Rpb24oYil7YS5sb2coIk0xMjgiLGIuX2FkcnVtQWpheFQudXJsKCkpOwp2YXIgYz1hLnV0aWxzLm5vdygpO2suYWEoYikmJihrLiRmKGIuX2FkcnVtQWpheFQsYyksay5hZyhiLl9hZHJ1bUFqYXhULGMpLGsuVGEoYikpfTtrLiRmPWZ1bmN0aW9uKGIsYyl7dmFyIGY9Yi5nZXRSZXNwQXZhaWxUaW1lKCk7bihmKXx8KGEubG9nKCJNMTI5IixjLGIudXJsKCkpLGIubWFya1Jlc3BBdmFpbFRpbWUoYykpfTtrLmFnPWZ1bmN0aW9uKGIsYyl7dmFyIGY9Yi5nZXRSZXNwUHJvY1RpbWUoKTtpZihuKGYpKXJldHVybiExO2EubG9nKCJNMTMwIixjLGIudXJsKCkpO2IubWFya1Jlc3BQcm9jVGltZShjKTtyZXR1cm4hMH07ay53bT1mdW5jdGlvbihhLGIpe2IuZWo9ay5BYihhLGIuZWopO2IubGo9ay5BYihhLGIubGopO2IuVWo9ay5BYihhLGIuVWopO2Iucmw9ay5BYihhLGIucmwpO2IudGV4dD1rLkFiKGEsYi50ZXh0KX07ay5BYj1mdW5jdGlvbihiLGMpe3JldHVybiBhLmFvcC5hcm91bmQoYyxmdW5jdGlvbigpe2suYWEoYikmJmIuX2FkcnVtQWpheFQubWFya1Jlc3BBdmFpbFRpbWUoYS51dGlscy5ub3coKSl9LApmdW5jdGlvbigpe2suYWEoYikmJihiLl9hZHJ1bUFqYXhULm1hcmtSZXNwUHJvY1RpbWUoYS51dGlscy5ub3coKSksay5UYShiKSl9LCJ3cmFwUmVzcG9uc2VSZWFkZXIiLGEubW9uaXRvci5FcnJvck1vbml0b3IubCl9O2suUmk9ZnVuY3Rpb24oYSl7MT09YS5sZW5ndGg/ZihhWzBdKT8oW10ucHVzaC5jYWxsKGEse30pLGsuRWMoYVsxXSkpOmsuRWMoYVswXSk6Mj09YS5sZW5ndGgmJmsuRWMoYVsxXSk7cmV0dXJuIGF9O2suRWM9ZnVuY3Rpb24oYil7bihiKSYmKG4oYi5oZWFkZXJzKXx8KGIuaGVhZGVycz1uZXcgSGVhZGVycyxhLmxvZygiTTEzMSIpKSxiLmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzP2IuaGVhZGVycy5oYXMoIkFEUlVNIik/Yi5oZWFkZXJzLnNldCgiQURSVU0iLCJpc0FqYXg6dHJ1ZSIpOmIuaGVhZGVycy5hcHBlbmQoIkFEUlVNIiwiaXNBamF4OnRydWUiKTpiLmhlYWRlcnMuQURSVU09ImlzQWpheDp0cnVlIil9O2sucW09ZnVuY3Rpb24oYixjKXsyPD1jLmxlbmd0aCYmCmEudXRpbHMuaXNPYmplY3QoY1sxXSkmJm4oY1sxXS5ib2R5KSYmbC5VZyhiLGNbMV0uYm9keSl9O2sucWs9ZnVuY3Rpb24oYil7dmFyIGM9e3VybDoiIixtZXRob2Q6IiJ9O2EudXRpbHMuaXNPYmplY3QoYlswXSk/KGMudXJsPWJbMF0udXJsfHwoYS51dGlscy5pc0RlZmluZWQoYlswXS50b1N0cmluZyk/YlswXS50b1N0cmluZygpOnZvaWQgMCksYy5tZXRob2Q9YlswXS5tZXRob2R8fCJHRVQiKTpmKGJbMF0pJiYoYy51cmw9YlswXSxjLm1ldGhvZD1iWzFdJiZiWzFdLm1ldGhvZHx8IkdFVCIpO2MudXJsPW4oYy51cmwpP2MudXJsOiIiO2MudXJsPXEoYy51cmwpO2MubWV0aG9kPWMubWV0aG9kO3JldHVybiBjfTtrLkhrPWZ1bmN0aW9uKGIpe3ZhciBjO24oYyl8fChhLmxvZygiTTEzMiIsYi5fYWRydW1BamF4VC51cmwoKSksYz0xKTtuKGIuX2FkcnVtQWpheFQudykmJm0oYi5fYWRydW1BamF4VC53KSYmKGIuX2FkcnVtQWpheFQudys9YyxhLmxvZygiTTEzMyIsYi5fYWRydW1BamF4VC53LApiLl9hZHJ1bUFqYXhULnVybCgpKSl9O2suTWI9ZnVuY3Rpb24oYil7dmFyIGM7bihjKXx8KGEubG9nKCJNMTM0IixiLl9hZHJ1bUFqYXhULnVybCgpKSxjPTEpO24oYi5fYWRydW1BamF4VC53KSYmbShiLl9hZHJ1bUFqYXhULncpJiYoYi5fYWRydW1BamF4VC53LT1jLGEubG9nKCJNMTM1IixiLl9hZHJ1bUFqYXhULncsYi5fYWRydW1BamF4VC51cmwoKSkpfTtrLmFhPWZ1bmN0aW9uKGEpe3JldHVybiBuKGEuX2FkcnVtQWpheFQpfTtrLlJiPWZ1bmN0aW9uKGEpe3JldHVybiBuKGEuX2FkcnVtQWpheFQudyl9O2suVW09ZnVuY3Rpb24oYixjKXtiLl9hZHJ1bUFqYXhUPWMuX2FkcnVtQWpheFQ7Yi5fYWRydW1BamF4VC53Kz1iLkQ7YS5sb2coIk0xMzYiLGIuX2FkcnVtQWpheFQudyxjLl9hZHJ1bUFqYXhULnVybCgpKTtiLkQ9MH07ay5YbT1mdW5jdGlvbihhKXt2YXIgYj0hMTtrLmFhKGEpJiZuKGEuX2FkcnVtQWpheFQudykmJihrLkhrKGEpLGI9ITApO3JldHVybiBifTtrLlRhPWZ1bmN0aW9uKGEpe2Uud2QoYSwKYS5fYWRydW1BamF4VCl9O2suUWQ9ZnVuY3Rpb24oYil7dmFyIGM9YS51dGlscy5ub3coKTtyZXR1cm4gMD09PWIuX2FkcnVtQWpheFQudyYmbihiLl9hZHJ1bUFqYXhUKT9rLmFnKGIuX2FkcnVtQWpheFQsYyk6ITF9O2suUGQ9ZnVuY3Rpb24oYil7dmFyIGM9ITEsZj1hLnV0aWxzLm5vdygpLG09Yi5fYWRydW1BamF4VC5nZXRSZXNwQXZhaWxUaW1lKCk7bihtKXx8KGIuX2FkcnVtQWpheFQubWFya1Jlc3BBdmFpbFRpbWUoZiksYz0hMCk7cmV0dXJuIGN9O2suSms9ZnVuY3Rpb24oYil7YS5sb2coIk0xMzciLGIuX2FkcnVtQWpheFQudXJsKCkpO2IuX2FkcnVtQWpheFQudz0wfTtyZXR1cm4ga30oYi52YSk7Yi5lZT1wO2IuaWI9bmV3IGIuZWV9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLmlzT2JqZWN0LGU9YS51dGlscy5tYXAsYz1hLnV0aWxzLnJlZHVjZSxoPWEudXRpbHMuZmlsdGVyLApmPWEudXRpbHMuaXNEZWZpbmVkLG49YS51dGlscy5pc1N0cmluZyxtPWEudXRpbHMubWVyZ2VKU09OLHE9YS51dGlscy53YSx0PWEudXRpbHMuZ2MscD1hLnV0aWxzLnVhLGs9YS51dGlscy52YyxzPWEuY29uZi5zcGEyLHc9ZnVuY3Rpb24odyl7ZnVuY3Rpb24gdSgpe3ZhciBiPXcuY2FsbCh0aGlzKXx8dGhpcztiLklkPSExO2lmKCEwPT09d2luZG93WyJhZHJ1bS14aHItZGlzYWJsZSJdKXJldHVybiBhLmxvZygiTTEzOCIpLGI7aWYoIXdpbmRvdy5YTUxIdHRwUmVxdWVzdClyZXR1cm4gYS5sb2coIk0xMzkiKSxiO2IuQz13aW5kb3cuWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlO2lmKCFiLkMpcmV0dXJuIGEubG9nKCJNMTQwIiksYjtpZighKCJvcGVuImluIGIuQyYmInNlbmQiaW4gYi5DKSlyZXR1cm4gYS5sb2coIk0xNDEiKSxiO2IuSWQ9YS5hb3Auc3VwcG9ydChiLkMub3BlbikmJmEuYW9wLnN1cHBvcnQoYi5DLnNlbmQpO2IuSWR8fGEubG9nKCJNMTQyIik7cmV0dXJuIGJ9dih1LAp3KTt1LnByb3RvdHlwZS5zZXRVcD1mdW5jdGlvbigpe2lmKHRoaXMuSWQpe2EubG9nKCJNMTQzIik7YS54aHJDb25zdHJ1Y3Rvcj13aW5kb3cuWE1MSHR0cFJlcXVlc3Q7YS54aHJPcGVuPXRoaXMueGhyT3Blbj10aGlzLkMub3BlbjthLnhoclNlbmQ9dGhpcy54aHJTZW5kPXRoaXMuQy5zZW5kO3Auc2V0VXAoKTt2YXIgYz10aGlzO3RoaXMuQy5vcGVuPWEuYW9wLmFyb3VuZCh0aGlzLkMub3BlbixmdW5jdGlvbigpe3UuaGwodGhpcykmJig0PT09dGhpcy5yZWFkeVN0YXRlPyhhLmxvZygiTTE0NCIpLHUuTWoodGhpcy5fYWRydW1BamF4VCksZGVsZXRlIHRoaXMuQWUsay5yZXBvcnRYaHIodGhpcyx0aGlzLl9hZHJ1bUFqYXhUKSk6YS5sb2coIk0xNDUiLHRoaXMuX2FkcnVtQWpheFQudXJsKCkpKTt2YXIgZj0xPD1hcmd1bWVudHMubGVuZ3RoP1N0cmluZyhhcmd1bWVudHNbMF0pOiIiLGg9Mjw9YXJndW1lbnRzLmxlbmd0aD9TdHJpbmcoYXJndW1lbnRzWzFdKToiIixoPWEudXRpbHMuZ2V0RnVsbHlRdWFsaWZpZWRVcmwoaCk7CiFzJiZjLmNhK2IuaWIuY2E+PXAubWF4UGVyUGFnZVZpZXd8fHAubGMoaCxmKXx8KHRoaXMuX2FkcnVtQWpheFQ9bmV3IGEuZXZlbnRzLkFkcnVtQWpheChtKHttZXRob2Q6Zix1cmw6aH0sYy5zdGF0dXMpKSl9LG51bGwsIlhIUi5vcGVuIixiLnZhLmwpO3RoaXMuQy5zZW5kPWEuYW9wLmFyb3VuZCh0aGlzLkMuc2VuZCxmdW5jdGlvbihmKXt2YXIgbT10aGlzLG49dGhpcy5fYWRydW1BamF4VCxlPSExO2lmKCEoIW58fCFzJiYrK2MuY2ErYi5pYi5jYT49cC5tYXhQZXJQYWdlVmlldykpe3ZhciBsPWEudXRpbHMubm93KCkscT1uLmdldFNlbmRUaW1lKCk7YS5hc3NlcnQobnVsbD09PXEsIk0xNDYiKTtuLnRpbWVzdGFtcChsKTtuLm1hcmtTZW5kVGltZShxfHxsKTtuLnBhcmVudFBoYXNlKGEubGlmZWN5Y2xlLmdldFBoYXNlTmFtZSgpKTtzJiYobS5oPWEuYy5PYSgiWEhSLnNlbmQiLHZvaWQgMCxhLmMuaWEoKSxhLkNhdXNlVHlwZS5YSFIpKTtiLnZhLlBmKG4udXJsKCkpP20uc2V0UmVxdWVzdEhlYWRlcigiQURSVU0iLAoiaXNBamF4OnRydWUiKTphLmxvZygiTTE0NyIsZG9jdW1lbnQubG9jYXRpb24uaHJlZixuLnVybCgpKTtwLlVnKG4sZik7Zj11Lm1rKG4udXJsKCkscC5wYXJhbWV0ZXIsZik7bi5wYXJhbWV0ZXIoZik7dmFyIGs9MCxyPWZ1bmN0aW9uKCl7aWYoND09bS5yZWFkeVN0YXRlKWU/YS5sb2coIk0xNDgiKTooYS5sb2coIk0xNDkiKSxjLnRjKG0pKTtlbHNle3ZhciBiPW51bGw7dHJ5e2I9bS5vbnJlYWR5c3RhdGVjaGFuZ2V9Y2F0Y2goZil7aWYoZSl7YS5sb2coIk0xNTAiLGYpO3JldHVybn1hLmxvZygiTTE1MSIsZik7Yy50YyhtKTtyZXR1cm59aysrO2I/YS5hb3Auc3VwcG9ydChiKT8obS5vbnJlYWR5c3RhdGVjaGFuZ2U9dS5aZShiLCJYSFIub25SZWFkeVN0YXRlQ2hhbmdlIiksaCYmYy5yaC5jYWxsKG0sInJlYWR5c3RhdGVjaGFuZ2UiLHUuYmYpLGEubG9nKCJNMTUyIixrKSk6aHx8KGEubG9nKCJNMTUzIiksYy50YyhtKSk6azx1Lk9pP3Qocik6ZT9hLmxvZygiTTE1NCIpOihhLmxvZygiTTE1NSIpLApjLnRjKG0pKX19O2lmKGgpe2EubG9nKCJNMTU2Iik7dHJ5e2MuaG4uY2FsbChtLCJyZWFkeXN0YXRlY2hhbmdlIix1LmJmKSxlPSEwfWNhdGNoKHcpe2EuZXJyb3IoIk0xNTciLHcpfX1yKCl9fSxmdW5jdGlvbigpe2lmKHMpe3ZhciBiPXRoaXMuX2FkcnVtQWpheFQ7YiYmYS5qLm4uRy5CZShiLnVybCgpKX19LCJYSFIuc2VuZCIsYi52YS5sKTt2YXIgaD0iYWRkRXZlbnRMaXN0ZW5lciJpbiB0aGlzLkMmJiJyZW1vdmVFdmVudExpc3RlbmVyImluIHRoaXMuQyYmYS5hb3Auc3VwcG9ydCh0aGlzLkMuYWRkRXZlbnRMaXN0ZW5lcikmJmEuYW9wLnN1cHBvcnQodGhpcy5DLnJlbW92ZUV2ZW50TGlzdGVuZXIpO2lmKGgpe3ZhciBuPWEudXRpbHMubmYodGhpcy5DLCJhZGRFdmVudExpc3RlbmVyIik7dGhpcy5obj1uLmFkZEV2ZW50TGlzdGVuZXI7bi5hZGRFdmVudExpc3RlbmVyPWEuYW9wLmFyb3VuZChuLmFkZEV2ZW50TGlzdGVuZXIsZnVuY3Rpb24oYixjLG0pe2lmKGYoYykmJihjLkk9CiEwLHRoaXMgaW5zdGFuY2VvZiBYTUxIdHRwUmVxdWVzdCYmL14obG9hZHxlcnJvcnxyZWFkeXN0YXRlY2hhbmdlKSQvLnRlc3QoYikmJmMpKXt2YXIgaD11Lk9tKGMpO2lmKGgpe3ZhciBuPXEoYXJndW1lbnRzKTtuWzFdPWg7YS5sb2coIk0xNTgiKTtyZXR1cm4gbn1hLmxvZygiTTE1OSIsYixjKX19LG51bGwsIlhIUi5hZGRFdmVudExpc3RlbmVyIik7bj1hLnV0aWxzLm5mKHRoaXMuQywicmVtb3ZlRXZlbnRMaXN0ZW5lciIpO3RoaXMucmg9bi5yZW1vdmVFdmVudExpc3RlbmVyO24ucmVtb3ZlRXZlbnRMaXN0ZW5lcj1hLmFvcC5hcm91bmQobi5yZW1vdmVFdmVudExpc3RlbmVyLGZ1bmN0aW9uKGIsZixtKXtpZih0aGlzIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3QmJnRoaXMuX2FkcnVtQWpheFQpe3ZhciBoPXEoYXJndW1lbnRzKTtmLl9fYWRydW1JbnRlcmNlcHRvcj8oaFsxXT1mLl9fYWRydW1JbnRlcmNlcHRvcixhLmxvZygiTTE2MCIpLGMucmguYXBwbHkodGhpcyxoKSk6YS5sb2coIk0xNjEiKX19LApudWxsLCJYSFIucmVtb3ZlRXZlbnRMaXN0ZW5lciIpfWVsc2UgYS5sb2coIk0xNjIiKTthLmxvZygiTTE2MyIpfX07dS5taz1mdW5jdGlvbihiLGYsbil7aWYoZiYmKGY9aChlKGgoZixmdW5jdGlvbihjKXtyZXR1cm4gYS51dGlscy5kZyhiLGMudXJscyl9KSxmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRGcm9tQm9keShuKX0pLGwpLDA8Zi5sZW5ndGgpKXJldHVybiBjKGYsbSx7fSl9O3UuYWQ9ZnVuY3Rpb24oYil7dmFyIGM9Yi5fYWRydW1BamF4VDtpZihjKXt2YXIgZj1hLnV0aWxzLm5vdygpOzI9PWIucmVhZHlTdGF0ZT9jLm1hcmtGaXJzdEJ5dGVUaW1lKGMuZ2V0Rmlyc3RCeXRlVGltZSgpfHxmKTo0PT1iLnJlYWR5U3RhdGUmJihjLm1hcmtSZXNwQXZhaWxUaW1lKGMuZ2V0UmVzcEF2YWlsVGltZSgpfHxmKSxjLm1hcmtGaXJzdEJ5dGVUaW1lKGMuZ2V0Rmlyc3RCeXRlVGltZSgpfHxmKSxzJiYoYj1iLmg9YS5jLk9hKCJYSFIubG9hZCIsdm9pZCAwLGIuaCxhLkNhdXNlVHlwZS5YSFIpLAphLmMucWEoYikpKX19O3UuemY9ZnVuY3Rpb24oYil7dmFyIGM9Yi5fYWRydW1BamF4VDtpZihjJiY0PT1iLnJlYWR5U3RhdGUpe3ZhciBmPWEudXRpbHMubm93KCksbT1jLmdldFJlc3BQcm9jVGltZSgpO2MubWFya1Jlc3BBdmFpbFRpbWUoYy5nZXRSZXNwQXZhaWxUaW1lKCl8fGYpO2Y+bSYmYy5tYXJrUmVzcFByb2NUaW1lKGYpO2sud2QoYixjKTthLmNvbmYuc3BhMiYmYS5jLkwoKX19O3UuWmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdS5qbihhLGZ1bmN0aW9uKCl7dS5hZCh0aGlzKX0sZnVuY3Rpb24oKXt1LnpmKHRoaXMpfSxiKX07dS5iZj1mdW5jdGlvbigpe3UuYWQodGhpcyk7dS56Zih0aGlzKX07dS5obD1mdW5jdGlvbihhKXtyZXR1cm4gZihhLl9hZHJ1bUFqYXhUKSYmbihhLl9hZHJ1bUFqYXhULl91cmwpfTt1Lk1qPWZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMubm93KCk7Yi5tYXJrUmVzcEF2YWlsVGltZShiLmdldFJlc3BBdmFpbFRpbWUoKXx8Yyk7Yi5tYXJrRmlyc3RCeXRlVGltZShiLmdldEZpcnN0Qnl0ZVRpbWUoKXx8CmMpO2IubWFya1Jlc3BQcm9jVGltZShiLmdldFJlc3BQcm9jVGltZSgpfHxjKX07dS5wcm90b3R5cGUudGM9ZnVuY3Rpb24oYil7aWYoYi5fYWRydW1BamF4VCl7dmFyIGM9YS51dGlscy5ub3coKSszRTQsZj1mdW5jdGlvbigpe3UuYWQoYik7dmFyIG09Yi5fYWRydW1BamF4VDtpZihtKXt2YXIgaD1hLnV0aWxzLm5vdygpOzQ9PWIucmVhZHlTdGF0ZT8oYS5hc3NlcnQobnVsbD09PW0uZ2V0UmVzcFByb2NUaW1lKCksIk0xNjQiKSxtLm1hcmtSZXNwUHJvY1RpbWUobS5nZXRSZXNwUHJvY1RpbWUoKXx8aCksYS5sb2coIk0xNjUiKSxrLndkKGIsbSksYS5jb25mLnNwYTImJmEuYy5MKCkpOmg8Yz9hLnV0aWxzLm9TVE8oZix1LmJlKTooZGVsZXRlIGIuX2FkcnVtQWpheFQsYS5sb2coIk0xNjYiKSl9fTtmKCl9fTt1LmpuPWZ1bmN0aW9uKGIsYyxmLG0pe3ZhciBoPWI7YiYmIm9iamVjdCI9PT10eXBlb2YgYiYmInRvU3RyaW5nImluIGImJiJbeHBjb25uZWN0IHdyYXBwZWQgbnNJRE9NRXZlbnRMaXN0ZW5lcl0iPT09CmIudG9TdHJpbmcoKSYmImhhbmRsZUV2ZW50ImluIGImJihoPWZ1bmN0aW9uKCl7Yi5oYW5kbGVFdmVudC5hcHBseSh0aGlzLHEoYXJndW1lbnRzKSl9KTtyZXR1cm4gYS5hb3AuYXJvdW5kKGgsYyxmLG0pfTt1Lk9tPWZ1bmN0aW9uKGIpe2lmKGIuX19hZHJ1bUludGVyY2VwdG9yKXJldHVybiBiLl9fYWRydW1JbnRlcmNlcHRvcjtpZihhLmFvcC5zdXBwb3J0KGIpKXt2YXIgYz11LlplKGIsIlhIUi5pbnZva2VFdmVudExpc3RlbmVyIik7cmV0dXJuIGIuX19hZHJ1bUludGVyY2VwdG9yPWN9fTtyZXR1cm4gdX0oYi52YSk7dy5PaT01O3cuYmU9NTA7Yi5YSFJNb25pdG9yPXc7Yi54aHJNb25pdG9yPW5ldyBiLlhIUk1vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLnZjLGU9ZnVuY3Rpb24oYyl7ZnVuY3Rpb24gaChiKXtiPWMuY2FsbCh0aGlzLGIpfHx0aGlzO2IucGVyZj1uZXcgYS5QZXJmb3JtYW5jZVRyYWNrZXI7CmIuJGU9ITE7Yi5KZT0wO3JldHVybiBifXYoaCxjKTtoLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnRUeXBlLlZQYWdlVmlld307aC5wcm90b3R5cGUuV2M9ZnVuY3Rpb24oKXtyZXR1cm4gYi5FdmVudFRyYWNrZXIuRGModGhpcy5ndWlkKCksdGhpcy51cmwoKSx0aGlzLnR5cGUoKSl9O2gucHJvdG90eXBlLkZkPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5XYygpO2EubW9uaXRvci5nYS5zZXQoInBhcmVudCIsYik7YS5sb2coIk0xNjciLGIuZ3VpZCgpLGIudXJsKCkpfTtoLnByb3RvdHlwZS5zdGFydENvcnJlbGF0aW5nWGhycz1mdW5jdGlvbigpe2EubG9nKCJNMTY4Iik7YS51dGlscy5pc0RlZmluZWQodGhpcy5lYikmJiFhLm1vbml0b3IuQW55U3BhTW9uaXRvci5CYSYmbC53bCh0aGlzLHRoaXMuZWIuZ3VpZCl9O2gucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5zdGFydENvcnJlbGF0aW5nWGhycygpO3RoaXMuRmQoKX07cmV0dXJuIGh9KGIuRXZlbnRUcmFja2VyKTsKYi5BbnlTcGFWUGFnZVZpZXc9ZTtiLk1hKGIuVFthLkV2ZW50VHlwZS5WUGFnZVZpZXddLGUucHJvdG90eXBlKX0pKGEuZXZlbnRzfHwoYS5ldmVudHM9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpe2EucmVwb3J0PWZ1bmN0aW9uKGIpe2EudXRpbHMuaXNPYmplY3QoYikmJmEudXRpbHMuaXNGdW5jdGlvbihiLnR5cGUpPy0xPT1bYS5FdmVudFR5cGUuUGFnZVZpZXcsYS5FdmVudFR5cGUuQWpheCxhLkV2ZW50VHlwZS5WUGFnZVZpZXcsYS5FdmVudFR5cGUuRXJyb3JdLmluZGV4T2YoYi50eXBlKCkpP2EucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYi50eXBlKCkrImlzIG5vdCBhIHZhbGlkIGV4dGVybmFsIGV2ZW50IHR5cGUiLCJBRFJVTS5yZXBvcnQiLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpOmEuY29uZi5zcGEyJiZhLkV2ZW50VHlwZS5WUGFnZVZpZXc9PWIudHlwZSgpP2EubG9nKCJNMTY5Iik6YS51dGlscy5nYyhmdW5jdGlvbigpe2EuY29tbWFuZCgicmVwb3J0RXZlbnQiLApiKX0pOmEucmVwb3J0QVBJTWVzc2FnZShhLlYuV2QsIiIsIkFEUlVNLnJlcG9ydCIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9O2EubWFya1ZpcnR1YWxQYWdlQmVnaW49ZnVuY3Rpb24oYixsKXthLmNvbmYuc3BhMiYmKHRoaXMuUGE9YS51dGlscy5pc0RlZmluZWQobCk/bDohMCxhLmxvZygiTTE3MCIsZG9jdW1lbnQuVVJMKSxhLm1vbml0b3IuQW55U3BhTW9uaXRvci5EZChkb2N1bWVudC5VUkwsYiwhMCksYS5tb25pdG9yLkFueVNwYU1vbml0b3IuUWcoKSl9O2EubWFya1ZpcnR1YWxQYWdlRW5kPWZ1bmN0aW9uKCl7YS5jb25mLnNwYTImJnRoaXMuUGEmJihhLmxvZygiTTE3MSIsYS5tb25pdG9yLkFueVNwYU1vbml0b3IuamEpLGEubW9uaXRvci5BbnlTcGFNb25pdG9yLmJnKGEubW9uaXRvci5BbnlTcGFNb25pdG9yLnZwLnN0YXJ0VGltZSxhLnV0aWxzLm5vdygpKSx0aGlzLlBhPSExKX19KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9CmEudXRpbHMuaXNEZWZpbmVkLGU9YS5hb3AuYWZ0ZXIsYz1hLmFvcC5iZWZvcmUsaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoKXt9Zi5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt2YXIgYz0hMTtmLnhhPWEudXRpbHMuaGIoKTthLmMuc2V0VXAoKTthLmNlLnNldFVwKCk7Zi50bSgpO2Euai5uLnNldFVwKGEudXRpbHMubm93KCkpO2YuamE9ZG9jdW1lbnQuVVJMO2YuUmM9W107YS51dGlscy5pc0RlZmluZWQod2luZG93Lmhpc3RvcnkpJiZhLnV0aWxzLmlzRnVuY3Rpb24od2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKSYmKGM9ITAsd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlPWEuYW9wLmFyb3VuZCh3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUsZnVuY3Rpb24oKXtiLkRPTUV2ZW50c01vbml0b3IuWmImJiFhLlBhJiYoYS5sb2coIk0xNzIiKSxmLkRkKGRvY3VtZW50LlVSTCkpfSxmdW5jdGlvbigpe2IuRE9NRXZlbnRzTW9uaXRvci5aYiYmKGEuUGE/KGEubG9nKCJNMTczIiksZi52cC51cmwoZG9jdW1lbnQuVVJMKSk6CihhLmxvZygiTTE3NCIpLGYuUWcoKSkpO2YuamE9ZG9jdW1lbnQuVVJMfSwiaGlzdG9yeVB1c2hTdGF0ZSIpKTtmLlJjPWYuUmMuY29uY2F0KGEudXRpbHMuemIoYS51dGlscy5wYyxhLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5zcGEmJmEuY29uZi51c2VyQ29uZi5zcGEuc3BhMiYmYS51dGlscy5pc09iamVjdChhLmNvbmYudXNlckNvbmYuc3BhLnNwYTIpJiZhLmNvbmYudXNlckNvbmYuc3BhLnNwYTIudnAmJmEuY29uZi51c2VyQ29uZi5zcGEuc3BhMi52cC5leGNsdWRlKSk7aWYoYS51dGlscy5pc0RlZmluZWQod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpKXt2YXIgYz0hMCxtPWZ1bmN0aW9uKCl7Zi5qYSE9ZG9jdW1lbnQuVVJMJiZmLlJnKCl9O20uST0hMDt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLG0pfWN8fGEubG9nKCJNMTc1Iil9O2YuUmc9ZnVuY3Rpb24oKXt2YXIgYz1kb2N1bWVudC5VUkw7YS5sb2coIk0xNzYiLGYuamEsYyk7Yi5ET01FdmVudHNNb25pdG9yLlpiJiYKKGEuUGE/KGEubG9nKCJNMTc3IiksZi52cC51cmwoZG9jdW1lbnQuVVJMKSk6KGYuRGQoZi5qYSksZi5HZChjKSkpO2YuamE9Y307Zi50bT1mdW5jdGlvbigpe3ZhciBiO2EuYy5xYT1lKGEuYy5xYSxmdW5jdGlvbigpe2I9bG9jYXRpb24uaGFzaH0pO2EuYy5MPWMoYS5jLkwsZnVuY3Rpb24oKXtiIT1sb2NhdGlvbi5oYXNoJiZmLmphIT1kb2N1bWVudC5VUkwmJmYuUmcoKX0pfTtmLkRkPWZ1bmN0aW9uKGEsYixjKXtmLm5tKCk7Zi5CYT0hMTtmLlllKGEsYixjKX07Zi5RZz1mdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LlVSTDtmLkdkKGEpO2YuamE9YX07Zi5Jbj1mdW5jdGlvbigpe2YuQmE9ITA7Zi5ZZShmLmphKTtmLkdkKCl9O2Yubm09ZnVuY3Rpb24oKXt2YXIgYz1hLmoubjthLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJmEuai5FYi5GYSYmYS51dGlscy5pc0RlZmluZWQoYi5ET01FdmVudHNNb25pdG9yLmN1cnJlbnRCYXNlUGFnZSkmJihhLmxvZygiTTE3OCIpLGMuRy5CfHwKYy5KLkI/Yy5uYXZDb21wbGV0ZShhLnV0aWxzLm5vdygpKTpjLm5hdkNvbXBsZXRlKGEudXRpbHMubWF4KGMuRy5EYSxjLkouYmEpKSxjLnJlc2V0KCkpO2YuQmF8fCFhLnV0aWxzLmlzRGVmaW5lZChmLnZwKXx8Zi52cC5EZ3x8KGEubG9nKCJNMTc5IiksYz1mLmNrKGEuai5uLkIpLGYuYmcoZi52cC5zdGFydFRpbWUsYykpfTtmLmNrPWZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMubm93KCk7Yj8oYz1mLmRrKGEuai5uLlFhKSxhLmoubi5yZXNldCgpKTpjPWYudnAudGltZXN0YW1wKCk7cmV0dXJuIGN9O2YueW09ZnVuY3Rpb24oYixjKXtyZXR1cm4gZi52cC4kZT8hMTpsKGMpJiYwPGMubGVuZ3RoJiZhLnV0aWxzLlZiKHZvaWQgMCxiLGMpfTtmLmRrPWZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMubm93KCk7Yj9hLmoubi5KLmNqKCl8fGEuai5uLkcuZGooKXx8KGM9YS51dGlscy5tYXgoYS5qLm4uSi5iYSxhLmoubi5HLkRhKSk6Yz1hLmoubi5zdGFydFRpbWU7cmV0dXJuIGN9O2YuYmc9CmZ1bmN0aW9uKGEsYil7Zi5rZChhLGIpO2YuWmYoYSk7Zi5yZXBvcnQoKX07Zi5ZZT1mdW5jdGlvbihiLGMsaCl7Zi5yZXNldCgpO2YudnA9bmV3IGEuZXZlbnRzLkFueVNwYVZQYWdlVmlldztmLnZwLnN0YXJ0VXJsPWI7YS51dGlscy5pc0RlZmluZWQoYykmJihmLnZwLnVzZXJQYWdlTmFtZT1jKTthLnV0aWxzLmlzQm9vbGVhbihoKSYmKGYudnAuJGU9aCk7Yj1hLmMuR2MoKTtmLnZwLnN0YXJ0VGltZT1mLkJhP2EudXRpbHMuaGIoKTphLnV0aWxzLmlzRGVmaW5lZChiKT9iLnN0YXJ0OmEudXRpbHMubm93KCk7Zi52cC5lYj1ifTtmLkdkPWZ1bmN0aW9uKGIpe2EudXRpbHMuaXNEZWZpbmVkKGIpJiZmLnZwLnVybChiKTtmLnZwLnN0YXJ0KCk7YS5QYXx8YS5qLm4uc3RhcnQoYS51dGlscy5ub3coKSl9O2Yua2Q9ZnVuY3Rpb24oYixjKXthLnV0aWxzLmlzRGVmaW5lZChmLnZwKSYmKGEuY29uZi5lbmFibGVQcmltYXJ5TWV0cmljcyYmZi5waihiKSxhLnV0aWxzLmlzRGVmaW5lZChjKT8KYS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzP2YudnAudGltZXN0YW1wKGMtYj5mLnZwLnZjdD9jOmYudnAudmN0K2IpOmYudnAudGltZXN0YW1wKGMpOmYudnAudGltZXN0YW1wKGIpKX07Zi5waj1mdW5jdGlvbihiKXthLmxvZygiTTE4MCIpO2I9YS5OLlVlKGIpO2YudnAudmN0PWIudmN0O2EuTi5yZXNldCgpfTtmLlpmPWZ1bmN0aW9uKGMpe2EudXRpbHMuaXNEZWZpbmVkKGYudnApJiZmLnZwLnJlc1RpbWluZyhiLnJlc291cmNlTW9uaXRvci5zayhmLnhhLGMpKX07Zi5jZD1mdW5jdGlvbigpe3ZhciBiPWEuYy52aygpO3JldHVybiBhLnV0aWxzLmlzRGVmaW5lZChiKSYmYS51dGlscy5pc0RlZmluZWQoZi52cCkmJighYS51dGlscy5pc0RlZmluZWQoZi52cC5lYil8fGYudnAuZWIhPWIpfTtmLnJlcG9ydD1mdW5jdGlvbigpe2lmKGEudXRpbHMuaXNEZWZpbmVkKGYudnApKWlmKGYueW0oZi52cC51cmwoKSxmLlJjKSlhLmxvZygiTTE4MiIsZi52cC51cmwoKSk7ZWxzZXthLmxvZygiTTE4MyIpOwp2YXIgYz1mLnZwO2lmKGMuRGcpYS5sb2coIk0xODQiKTtlbHNle3ZhciBtPWEudXRpbHMuaXNEZWZpbmVkKGIuRE9NRXZlbnRzTW9uaXRvci5jdXJyZW50QmFzZVBhZ2UpP2IuRE9NRXZlbnRzTW9uaXRvci5jdXJyZW50QmFzZVBhZ2UudXJsKCk6ZG9jdW1lbnQuVVJMO2MucGFyZW50VXJsKG0pO2EuY29tbWFuZCgiY2FsbCIsZnVuY3Rpb24oKXthLnJlcG9ydGVyLnJlcG9ydEV2ZW50KGMpfSk7Yy5EZz0hMH19ZWxzZSBhLmxvZygiTTE4MSIpfTtmLnJlc2V0PWZ1bmN0aW9uKCl7Zi52cD1udWxsfTtyZXR1cm4gZn0oKTtiLkFueVNwYU1vbml0b3I9aDtiLmJqPW5ldyBiLkFueVNwYU1vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLko9bmV3IGIuTGg7dGhpcy5HPW5ldyBiLkJoO3RoaXMuemw9M0UzO3RoaXMubWF4SW5hY3RpdmVUaW1lPWEuY29uZi51c2VyQ29uZiYmCmEuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZSYmYS5jb25mLnVzZXJDb25mLm5hdkNvbXBsZXRlLm1heEluYWN0aXZlVGltZT9hLmNvbmYudXNlckNvbmYubmF2Q29tcGxldGUubWF4SW5hY3RpdmVUaW1lOk1hdGgubWF4KHRoaXMuSi5wYix0aGlzLkcucGIpK3RoaXMuemw7dGhpcy5zZz0xRTN9ZS5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oYSl7dGhpcy5jdXJyZW50VGltZT10aGlzLnN0YXJ0VGltZT1hO3RoaXMuQj10aGlzLlFhPSExO3RoaXMuSi5zZXRVcChhKTt0aGlzLkcuc2V0VXAoYSl9O2UucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGEpe3RoaXMuc2V0VXAoYSk7dGhpcy5CPSEwO3RoaXMuSi5zdGFydChhKTt0aGlzLkcuc3RhcnQoYSk7dGhpcy5QZSgpO3RoaXMuQ20oKX07ZS5wcm90b3R5cGUuQ209ZnVuY3Rpb24oKXt0aGlzLmJoPWEudXRpbHMucmVmcy5zZXRJbnRlcnZhbC5jYWxsKHdpbmRvdyxmdW5jdGlvbigpe2EuUCgpO3RoaXMuY3VycmVudFRpbWU9YS51dGlscy5ub3coKTsKdmFyIGI9YS51dGlscy5tYXgodGhpcy5KLmJhLHRoaXMuRy5EYSk7aWYodGhpcy5jdXJyZW50VGltZS1iPj10aGlzLm1heEluYWN0aXZlVGltZSl7aWYoYS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiZlLkZhJiYhYS51dGlscy5pc0RlZmluZWQoYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKSl7YS5sb2coIk0xODUiKTtlLk5hPWUuTmF8fHRoaXMuUWE/dGhpcy5jdXJyZW50VGltZTpiO3JldHVybn10aGlzLmN1cnJlbnRUaW1lPWUuTmF8fHRoaXMuY3VycmVudFRpbWU7YS5sb2coIk0xODYiKTt0aGlzLm5hdkNvbXBsZXRlKHRoaXMuUWE/dGhpcy5jdXJyZW50VGltZTpiKTt0aGlzLnJlc2V0KCl9YS5RKCl9LmJpbmQodGhpcyksdGhpcy5zZyl9O2UucHJvdG90eXBlLldnPWZ1bmN0aW9uKCl7dGhpcy5RYXx8KHRoaXMuQW0oKSx0aGlzLlFhPSEwKX07ZS5wcm90b3R5cGUuUGU9ZnVuY3Rpb24oKXthLnV0aWxzLmlzRGVmaW5lZCh0aGlzLnlnKSYmY2xlYXJJbnRlcnZhbCh0aGlzLnlnKTsKYS51dGlscy5pc0RlZmluZWQodGhpcy5iaCkmJmNsZWFySW50ZXJ2YWwodGhpcy5iaCl9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5QZSgpO3RoaXMuQj10aGlzLlFhPSExO3RoaXMuSi5yZXNldCgpO3RoaXMuRy5yZXNldCgpfTtlLnByb3RvdHlwZS5uYXZDb21wbGV0ZT1mdW5jdGlvbihiKXthLlAoKTt2YXIgaD1hLnV0aWxzLmlzRGVmaW5lZChhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cCYmYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnAuc3RhcnRUaW1lKT9hLm1vbml0b3IuQW55U3BhTW9uaXRvci52cC5zdGFydFRpbWU6dGhpcy5zdGFydFRpbWU7YS5sb2coIk0xODciLGItaCk7YS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzP2UuRmE/KGEubW9uaXRvci5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZiYmKGEubW9uaXRvci5uYXZNb25pdG9yLlhlKCksYS5tb25pdG9yLnJlc291cmNlTW9uaXRvci5XZSgpKSxhLmxvZygiTTE4OCIpLGI9YS5OLlVlKGEudXRpbHMuaGIoKSksCmEubW9uaXRvci5ET01FdmVudHNNb25pdG9yLmN1cnJlbnRCYXNlUGFnZS52Y3Q9Yi52Y3QsYS5jb25mLnNwYTImJihhLm1vbml0b3IuRE9NRXZlbnRzTW9uaXRvci5jdXJyZW50QmFzZVBhZ2UucGN0PWIucGN0KSxhLmNvbW1hbmQoInJlcG9ydE9ubG9hZCIsYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKSxhLk4ucmVzZXQoKSxhLk4uemE9ITEsZS5GYT0hMSk6YS5tb25pdG9yLkFueVNwYU1vbml0b3Iua2QoaCxiKTooYS5tb25pdG9yLnJlc291cmNlTW9uaXRvci5iYXNlUGFnZVJlc291cmNlQnVmZmVyPVtdLGEubW9uaXRvci5BbnlTcGFNb25pdG9yLmtkKGgsYikpO2EubW9uaXRvci5BbnlTcGFNb25pdG9yLkJhfHwoYS5tb25pdG9yLkFueVNwYU1vbml0b3IuWmYoaCksYS5tb25pdG9yLkFueVNwYU1vbml0b3IucmVwb3J0KCkpO2EuUSgpO2EuaXNEZWJ1ZyYmeC5sb2coImV4ZWNUaW1lID0gIithLlNjKX07ZS5wcm90b3R5cGUuQW09ZnVuY3Rpb24oKXt0aGlzLnlnPQphLnV0aWxzLnJlZnMuc2V0SW50ZXJ2YWwuY2FsbCh3aW5kb3csZnVuY3Rpb24oKXthLlAoKTt0aGlzLmN1cnJlbnRUaW1lPWEudXRpbHMubm93KCk7dmFyIGI9dGhpcy5KLmJkKHRoaXMuY3VycmVudFRpbWUpOzA8PWImJmEubG9nKCJNMTg5IixiLXRoaXMuc3RhcnRUaW1lKTtiPXRoaXMuRy5iZCh0aGlzLmN1cnJlbnRUaW1lKTswPD1iJiZhLmxvZygiTTE5MCIsYi10aGlzLnN0YXJ0VGltZSk7aWYoIXRoaXMuRy5CJiYhdGhpcy5KLkIpe2I9YS51dGlscy5tYXgodGhpcy5HLkRhLHRoaXMuSi5iYSk7aWYoYS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiZlLkZhJiYhYS51dGlscy5pc0RlZmluZWQoYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKSl7YS5sb2coIk0xOTEiKTtlLk5hPWUuTmF8fGI7cmV0dXJufWI9ZS5OYXx8YjthLmxvZygiTTE5MiIpO3RoaXMubmF2Q29tcGxldGUoYik7dGhpcy5yZXNldCgpfWEuUSgpfS5iaW5kKHRoaXMpLHRoaXMuc2cpfTsKcmV0dXJuIGV9KCk7bC5GYT0hMDtsLk5hPTA7Yi5FYj1sO2Iubj1uZXcgYi5FYn0pKGEuanx8KGEuaj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dGhpcy5uYz1bXTt0aGlzLmVjKGIuQ2MsMCl9Yi5wcm90b3R5cGUuRGw9ZnVuY3Rpb24oYSl7dGhpcy5lYyhiLkNlLGEpfTtiLnByb3RvdHlwZS5GbD1mdW5jdGlvbihhKXt0aGlzLmVjKGIuS2UsYSl9O2IucHJvdG90eXBlLkVsPWZ1bmN0aW9uKGEpe3RoaXMuZWMoYi5FZSxhKX07Yi5wcm90b3R5cGUuZWM9ZnVuY3Rpb24oYSxiKXt0aGlzLm5jLnB1c2goe0NsOihuZXcgRGF0ZSkuZ2V0VGltZSgpLEJsOmIscGc6YX0pO3RoaXMueGo9YX07Yi5wcm90b3R5cGUuZ2V0UGhhc2VOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueGp9O2IucHJvdG90eXBlLmdldFBoYXNlSUQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTA7YzxiLkhlLmxlbmd0aDtjKyspaWYoYi5IZVtjXT09PWEpcmV0dXJuIGM7CnJldHVybiBudWxsfTtiLnByb3RvdHlwZS5nZXRQaGFzZUNhbGxiYWNrVGltZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5uYyxoPTA7aDxiLmxlbmd0aDtoKyspaWYoYltoXS5wZz09PWEpcmV0dXJuIGJbaF0uQ2w7cmV0dXJuIG51bGx9O2IucHJvdG90eXBlLmZpbmRQaGFzZUF0Tm9taW5hbFRpbWU9ZnVuY3Rpb24oZSl7YS5hc3NlcnQoMDw9ZSk7Zm9yKHZhciBjPXRoaXMubmMsaD1jLmxlbmd0aC0xOzA8PWg7aC0tKWlmKGU+PWNbaF0uQmwpcmV0dXJuIGNbaF0ucGc7YS5lcnJvcigiTTE5MyIsZSxhLnV0aWxzLmR1bXBPYmplY3QoYykpO3JldHVybiBiLkNjfTtyZXR1cm4gYn0oKTtiLkNjPSJBRlRFUl9GSVJTVF9CWVRFIjtiLkNlPSJBRlRFUl9ET01fSU5URVJBQ1RJVkUiO2IuS2U9IkFUX09OTE9BRCI7Yi5FZT0iQUZURVJfT05MT0FEIjtiLkhlPVtiLkNjLGIuQ2UsYi5LZSxiLkVlXTthLlBhZ2VMaWZlY3ljbGVUcmFja2VyPWI7YS5saWZlY3ljbGU9bmV3IGI7YS5saWZlY3ljbGU9CmEubGlmZWN5Y2xlfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoYyl7Yz1iLmNhbGwodGhpcyxjKXx8dGhpcztjLmJhY2tUaW1lR2FwPWEuY29uZi5iYWNrVGltZUdhcDtyZXR1cm4gY312KGMsYik7Yy5wcm90b3R5cGUudHlwZT1mdW5jdGlvbigpe3JldHVybiBhLkV2ZW50VHlwZS5QYWdlVmlld307cmV0dXJuIGN9KGIuRXZlbnRUcmFja2VyKTtiLlBhZ2VWaWV3PWx9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS51dGlscy5ub3csZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoKXt9Yy5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5yZWFkeVN0YXRlO2lmKCJsb2FkaW5nIj09PWIpYS5sb2coIk0xOTQiKSxjLnVtKCksYy5UZygpO2Vsc2V7dmFyIGY9e3RpbWVTdGFtcDpsKCl9O2MuWWEoZik7ImludGVyYWN0aXZlIj09PQpiPyhhLmxvZygiTTE5NSIpLGMuVGcoKSk6KGEubG9nKCJNMTk2IiksYy5zYihmKSxjLmtnKGYpKX19O2MuVGc9ZnVuY3Rpb24oKXthLnV0aWxzLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCJsb2FkIixjLnNiKTthLnV0aWxzLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCJsb2FkIixjLmtnKX07Yy5rZz1mdW5jdGlvbihoKXtjLmN1cnJlbnRCYXNlUGFnZT1uZXcgYS5ldmVudHMuUGFnZVZpZXc7YS5saWZlY3ljbGUuRmwoaCYmaC50aW1lU3RhbXApO2EudXRpbHMuZ2MoZnVuY3Rpb24oKXt2YXIgZj1sKCk7YS5saWZlY3ljbGUuRWwoZik7YS5jb21tYW5kKCJtYXJrIiwib25sb2FkIixmKTtjLlpiPSEwO2EuY29uZi5lbmFibGVQcmltYXJ5TWV0cmljcz9hLk4uRGooKTooYi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZiYmKGIubmF2TW9uaXRvci5YZSgpLGIucmVzb3VyY2VNb25pdG9yLldlKCkpLGEuY29tbWFuZCgicmVwb3J0T25sb2FkIixjLmN1cnJlbnRCYXNlUGFnZSkpOyFhLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJgphLmNvbmYuc3BhMiYmYS5jb25mLm1vZGVybkJyb3dzZXJGZWF0dXJlc0F2YWlsYWJsZSYmYS5qLm4uSi5TZygpO2EudXRpbHMubG9hZFNjcmlwdEFzeW5jKGEuY29uZi5hZHJ1bUV4dFVybCl9KTthLmxvZygiTTE5NyIpfTtjLnVtPWZ1bmN0aW9uKCl7aWYoYS51dGlscy5pc0Z1bmN0aW9uKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGMuWWEsITEpO2Vsc2UgaWYoYS51dGlscy5pc09iamVjdChkb2N1bWVudC5hdHRhY2hFdmVudCkpe2RvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGMuWWEpO3ZhciBiPW51bGw7dHJ5e2I9bnVsbD09PXdpbmRvdy5mcmFtZUVsZW1lbnQ/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Om51bGx9Y2F0Y2goZil7fW51bGwhPWImJmIuZG9TY3JvbGwmJmZ1bmN0aW9uIG0oKXtpZighYy5pc1JlYWR5KXt0cnl7Yi5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGYpe2EudXRpbHMub1NUTyhtLAoxMCk7cmV0dXJufWMuc2IoKX19KCl9ZWxzZSBhLmV4Y2VwdGlvbigiTTE5OCIpO2EubG9nKCJNMTk5Iil9O2Muc2I9ZnVuY3Rpb24oYil7Yy5jZ3x8KGEubGlmZWN5Y2xlLkRsKGImJmIudGltZVN0YW1wKSxhLmNvbW1hbmQoIm1hcmsiLCJvbnJlYWR5IixsKCkpLGMuY2c9ITApfTtjLllhPWZ1bmN0aW9uKGEpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXI/KGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGMuWWEsITEpLGMuc2IoYSkpOiJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlJiYoZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsYy5ZYSksYy5zYihhKSl9O3JldHVybiBjfSgpO2UuaXNSZWFkeT0hMTtlLmNnPSExO2UuWmI9ITE7Yi5ET01FdmVudHNNb25pdG9yPWU7Yi5kb21FdmVudHNNb25pdG9yPW5ldyBiLkRPTUV2ZW50c01vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPQp7fSkpOyhmdW5jdGlvbihhKXt2YXIgYj1hLnV0aWxzLmlzRGVmaW5lZCxsPWEudXRpbHMuaXNOdW1iZXIsZT1hLm1vbml0b3IuZWU7YS5uaD13aW5kb3cuUHJvbWlzZTthLkpiPW51bGw7YS54bz1udWxsO2EudGU9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBjPWEuY29uZi5zcGEyJiZhLmNvbmYubW9kZXJuQnJvd3NlckZlYXR1cmVzQXZhaWxhYmxlLGg9YS5jb25mLmlzWm9uZVByb21pc2UsZj1hLmNvbmYuZmV0Y2gsbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoKXt9Zi5Qaz1mdW5jdGlvbigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eT1hLmFvcC5hcm91bmQoYS50ZSxmdW5jdGlvbihhLGMsaCl7IlByb21pc2UiPT09YyYmYihoKSYmZi5IZihoKX0pO2lmKGgmJmYuSmYoKSl7YS5sb2coIk0yMDAiKTt2YXIgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywiUHJvbWlzZSIpO2YuSGYoYyk7YS50ZSh3aW5kb3csIlByb21pc2UiLGMpO3dpbmRvdy5Qcm9taXNlPXdpbmRvdy5Qcm9taXNlfX07CmYuSmY9ZnVuY3Rpb24oKXtyZXR1cm4gYih3aW5kb3cuX196b25lX3N5bWJvbF9fUHJvbWlzZSl8fGIod2luZG93Ll9fem9uZV9zeW1ib2xfX1pvbmVBd2FyZVByb21pc2UpfTtmLkhmPWZ1bmN0aW9uKGMpe2Iod2luZG93LlpvbmUpJiZiKHdpbmRvdy5ab25lLmFzc2VydFpvbmVQYXRjaGVkKSYmKHdpbmRvdy5ab25lLmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7fSk7Yz1jfHxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywiUHJvbWlzZSIpO3ZhciBoPWMuc2V0LG49Yy5nZXQ7ZyhoKSYmKGMuc2V0PWZ1bmN0aW9uKGMpeyEwPT09Yy5hZ2VudFByb21pc2U/YS5sb2coIk0yMDEiKTooaC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYihhLkpiKT9oLmFwcGx5KHRoaXMsYXJndW1lbnRzKTooYS5sb2coIk0yMDIiKSxmLnNldFVwKCksKG5ldyBlKS5OaygpKSl9KTtnKG4pJiYoYy5nZXQ9ZnVuY3Rpb24oKXt2YXIgYz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtiKGEuSmIpJiYKKGEubG9nKCJNMjAzIiksYz1hLkpiKTtyZXR1cm4gY30pfTtmLnNldFVwPWZ1bmN0aW9uKCl7aWYoYihhLm5oKSl7Zi5TaygpO2YuUmsoKTt2YXIgaD1mdW5jdGlvbihoKXtmdW5jdGlvbiBlKG4pe3ZhciBsPXRoaXMuY29uc3RydWN0b3IscT1uO3RoaXMuWj1hLnV0aWxzLmdlbmVyYXRlR1VJRCgpO2IobikmJihxPWYuUWsobix0aGlzKSk7bj1hLnV0aWxzLlFpKHRoaXMsaCxbcV0sbCk7YyYmKGIodGhpcy5oKSYmKG4uaD10aGlzLmgpLGIodGhpcy5HYSk/bi5oPXRoaXMuR2EuaDpuLmg9YS5jLmlhKCkpO24uWj10aGlzLlo7dGhpcy5HYT1uO2EubG9nKCJNMjA0IixuLlopO2MmJmIobi5oKSYmYS5sb2coIk0yMDUiLG4uaC5ndWlkKTtyZXR1cm4gbn1hLnV0aWxzLkFjKGUsaCk7cmV0dXJuIGV9KHdpbmRvdy5Qcm9taXNlKTtoLmFnZW50UHJvbWlzZT0hMDthLkpiPWg7d2luZG93LlByb21pc2U9aH19O2YueWE9ZnVuY3Rpb24oaCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihjKXt2YXIgZSwKbD1lPXZvaWQgMDthLmxvZygiTTIwNiIsaCk7c3dpdGNoKGgpe2Nhc2UgZi5ILmxlOmNhc2UgZi5ILmtlOmNhc2UgZi5ILlpkOmNhc2UgZi5ILllkOmEudXRpbHMuaXNEZWZpbmVkKG4pJiZhLnV0aWxzLmlzRGVmaW5lZChuLkdhKSYmKGU9bi5HYS5oKTtlPWEuYy5pYSgpfHxlO2w9bmV3IGEuRGIoZSxuZXcgYS5LYShoKSxhLkNhdXNlVHlwZS5QUk9NSVNFKTticmVhaztjYXNlIGYuSC5pZTpjYXNlIGYuSC5qZTpjYXNlIGYuSC5oZTplPW4uaCxsPW5ldyBhLkRiKGUsbmV3IGEuS2EoaCksYS5DYXVzZVR5cGUuUFJPTUlTRSksYS5jLnFhKGwpfWIobikmJihiKG4uR2EpPyhuLkdhLmg9bCxhLmxvZygiTTIwNyIsbi5HYS5aKSk6KGEubG9nKCJNMjA4IixuLlopLG4uaD1sKSl9fX07Zi5Raz1mdW5jdGlvbihoLG4pe2MmJihoPWEuYW9wLmFyb3VuZChoLGZ1bmN0aW9uKCl7bi5oPW5ldyBhLkRiKGEuYy5pYSgpLG5ldyBhLkthKGYuSC5XaCksYS5DYXVzZVR5cGUuUFJPTUlTRSk7YS5jLnFhKG4uaCk7CmEubG9nKCJNMjA5IixuLmguZ3VpZCxuLlopO2lmKGIoYXJndW1lbnRzWzBdKSl7YS5sb2coIk0yMTAiKTt2YXIgYz1hLmFvcC5hcm91bmQoYXJndW1lbnRzWzBdLGYueWEoZi5ILmxlLG4pKTthcmd1bWVudHNbMF09Y31iKGFyZ3VtZW50c1sxXSkmJihhLmxvZygiTTIxMSIpLGM9YS5hb3AuYXJvdW5kKGFyZ3VtZW50c1sxXSxmLnlhKGYuSC5rZSxuKSksYXJndW1lbnRzWzFdPWMpO3JldHVybiBhLnV0aWxzLndhKGFyZ3VtZW50cyl9LGZ1bmN0aW9uKCl7YS5sb2coIk0yMTIiKTthLmMuTCgpfSwiaW50ZXJjZXB0UHJvbWlzZUV4ZWN1dG9yIixmLnJiKSk7cmV0dXJuIGh9O2YuUms9ZnVuY3Rpb24oKXthLnV0aWxzLnJlZnMucHJvbWlzZVRoZW49d2luZG93LlByb21pc2UucHJvdG90eXBlLnRoZW47dmFyIGI9Zi53ZygpLGM9e3BhcmVudE9iamVjdDp3aW5kb3cuUHJvbWlzZS5wcm90b3R5cGUscHJvcGVydHk6InRoZW4iLHByb3BlcnR5V3JhcHBlZEZ1bmN0aW9uTmFtZToicHJvbWlzZVRoZW4iLAp3cmFwTmV3RnVuY3Rpb25BZ2FpbjohMH07Yy5zZXRVcEZ1bmM9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2YuSmYoKXx8Zi5hbShiLGEpfX0uY2FsbCh0aGlzLGMpO2MuTGE9YjthLmFvcC5mb3JjZVdyYXAoYyk7YS51dGlscy5yZWZzLnByb21pc2VGaW5hbGx5PXdpbmRvdy5Qcm9taXNlLnByb3RvdHlwZVsiZmluYWxseSJdO2I9Zi52ZygpO2M9e3BhcmVudE9iamVjdDp3aW5kb3cuUHJvbWlzZS5wcm90b3R5cGUscHJvcGVydHk6ImZpbmFsbHkiLHByb3BlcnR5V3JhcHBlZEZ1bmN0aW9uTmFtZToicHJvbWlzZUZpbmFsbHkiLHdyYXBOZXdGdW5jdGlvbkFnYWluOiEwfTtjLnNldFVwRnVuYz1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7Zi4kbChiLGEpfX0uY2FsbCh0aGlzLGMpO2MuTGE9YjthLmFvcC5mb3JjZVdyYXAoYyl9O2YuYW09ZnVuY3Rpb24oYSxiKXtiLkxhPWYud2coYSl9O2YuJGw9ZnVuY3Rpb24oYSxiKXtiLkxhPWYudmcoYSl9O2YuU2s9ZnVuY3Rpb24oKXtmLllsKCk7CmYuWGwoKX07Zi5nbD1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIGZ8fGIgaW5zdGFuY2VvZiBhLm5ofTtmLkdrPWZ1bmN0aW9uKGMpe3ZhciBmO2IoZil8fChhLmxvZygiTTIxMyIpLGY9MSk7YihjLkQpJiZsKGMuRCkmJihjLkQrPWYsYS5sb2coIk0yMTQiLGMuRCkpfTtmLkFqPWZ1bmN0aW9uKGEpe3ZhciBjO2IoYyl8fChjPTEpO2IoYS5EKSYmbChhLkQpJiYoYS5ELT1jKX07Zi5Jaz1mdW5jdGlvbihjKXtiKGMuRCkmJmEudXRpbHMuY2woYy5EKT8oYS5sb2coIk0yMTUiKSxmLkdrKGMpKTpjLkQ9MX07Zi5UbT1mdW5jdGlvbihiKXtlLlhtKGIpfHwoYS5sb2coIk0yMTYiKSxmLklrKGIpKX07Zi5mbT1mdW5jdGlvbihhKXthLkQ9MH07Zi5PZj1mdW5jdGlvbihhKXtyZXR1cm4gYihhLkkpfTtmLmZkPWZ1bmN0aW9uKGEpe3JldHVybiBiKGEpJiZhIGluc3RhbmNlb2Ygd2luZG93LlByb21pc2V9O2Yud2c9ZnVuY3Rpb24oaCl7dmFyIG49bnVsbDtoPWh8fHdpbmRvdy5Qcm9taXNlLnByb3RvdHlwZS50aGVuOwpoPWEuYW9wLmFyb3VuZChoLGZ1bmN0aW9uKCl7dmFyIGg9dGhpcztuPWg7YS5sb2coIk0yMTciLGguWik7aWYoYihhcmd1bWVudHNbMF0pJiYhZi5mZChhcmd1bWVudHNbMF0pKXtmLlRtKGgpO2EubG9nKCJNMjE4IixoLlopO3ZhciBsPWEuYW9wLmFyb3VuZChhcmd1bWVudHNbMF0sZi55YShmLkguaWUsaCksZnVuY3Rpb24oKXt2YXIgbj1hLmFvcC51Zihhcmd1bWVudHMpO2IobikmJmIobi5EKSYmZi5nbChuKSYmZS5hYShoKT8oZS5VbShuLGgpLGYuZm0obikpOihlLmFhKGgpJiYhZi5PZihoKSYmZS5SYihoKSYmKGUuUGQoaCksZS5NYihoKSwhMD09PWUuUWQoaCkmJihhLmxvZygiTTIxOSIpLGEubG9nKCJNMjIwIiksZS5UYShoKSkpLGMmJihhLmxvZygiTTIyMSIpLGEuYy5MKCkpKX0sImludGVyY2VwdFByb21pc2VUaGVuRnVsZmlsIixmdW5jdGlvbihiKXtlLmFhKGgpJiZlLlJiKGgpJiYoZS5QZChoKSYmZS5NYihoKSwhMD09PWUuUWQoaCkmJihhLmxvZygiTTIyMiIpLGEubG9nKCJNMjIzIiksCmUuVGEoaCkpKTtmLnJiKGIpfSk7YXJndW1lbnRzWzBdPWx9Yihhcmd1bWVudHNbMV0pJiYhZi5mZChhcmd1bWVudHNbMV0pJiYoYS5sb2coIk0yMjQiLGguWiksbD1hLmFvcC5hcm91bmQoYXJndW1lbnRzWzFdLGYueWEoZi5ILmplLGgpLGZ1bmN0aW9uKCl7YyYmKGEubG9nKCJNMjI1IiksYS5jLkwoKSl9KSxhcmd1bWVudHNbMV09bCk7cmV0dXJuIGEudXRpbHMud2EoYXJndW1lbnRzKX0sZnVuY3Rpb24oKXt2YXIgaD1hLmFvcC51Zihhcmd1bWVudHMpOyFiKGgpfHxiKGFyZ3VtZW50c1swXSkmJmYuZmQoYXJndW1lbnRzWzBdKXx8KGMmJihoLmg9dGhpcy5oKSxmLk9mKHRoaXMpJiZlLmFhKHRoaXMpJiYoaC5fYWRydW1BamF4VD10aGlzLl9hZHJ1bUFqYXhULGUuUmIodGhpcyl8fGUuSmsoaCkpKX0sImludGVyY2VwdFByb21pc2VUaGVuSW50ZXJjZXB0b3IiLGZ1bmN0aW9uKGIpe3ZhciBjPW47ZS5hYShjKSYmZS5SYihjKSYmKGUuUGQoYykmJmUuTWIoYyksITA9PT1lLlFkKGMpJiYKKGEubG9nKCJNMjI2IiksYS5sb2coIk0yMjciKSxlLlRhKGMpKSk7Zi5yYihiKX0pO2gudXNlZEJ5QWdlbnQ9ITA7cmV0dXJuIHdpbmRvdy5Qcm9taXNlLnByb3RvdHlwZS50aGVuPWh9O2Yudmc9ZnVuY3Rpb24oaCl7aWYoYih3aW5kb3cuUHJvbWlzZS5wcm90b3R5cGVbImZpbmFsbHkiXSkpcmV0dXJuIGg9aHx8d2luZG93LlByb21pc2UucHJvdG90eXBlWyJmaW5hbGx5Il0saD1hLmFvcC5hcm91bmQoaCxmdW5jdGlvbigpe2IodGhpcy5fYWRydW1BamF4VCkmJmIodGhpcy5fYWRydW1BamF4VC53KT9lLk1iKHRoaXMpOmIodGhpcy5EKSYmZi5Baih0aGlzKTtpZihiKGFyZ3VtZW50c1swXSkpe2EubG9nKCJNMjI4Iix0aGlzLlopO3ZhciBoPWEuYW9wLmFyb3VuZChhcmd1bWVudHNbMF0sZi55YShmLkguaGUsdGhpcyksZnVuY3Rpb24oKXtjJiYoYS5sb2coIk0yMjkiKSxhLmMuTCgpKX0pO2FyZ3VtZW50c1swXT1oO3JldHVybiBhLnV0aWxzLndhKGFyZ3VtZW50cyl9fSxmdW5jdGlvbigpe2EubG9nKCJNMjMwIik7CmEuYy5MKCl9LCJpbnRlcmNlcHRQcm9taXNlRmluYWxseSIpLGgudXNlZEJ5QWdlbnQ9ITAsd2luZG93LlByb21pc2UucHJvdG90eXBlWyJmaW5hbGx5Il09aH07Zi5ZbD1mdW5jdGlvbigpe3dpbmRvdy5Qcm9taXNlLnJlc29sdmU9YS5hb3AuYXJvdW5kKHdpbmRvdy5Qcm9taXNlLnJlc29sdmUsZi55YShmLkguWmQsbnVsbCksZnVuY3Rpb24oKXthLmxvZygiTTIzMSIpO2EuYy5MKCl9LCJpbnRlcmNlcHRQcm9taXNlUmVzb2x2ZSIsZi5yYil9O2YuWGw9ZnVuY3Rpb24oKXt3aW5kb3cuUHJvbWlzZS5yZWplY3Q9YS5hb3AuYXJvdW5kKHdpbmRvdy5Qcm9taXNlLnJlamVjdCxmLnlhKGYuSC5ZZCxudWxsKSxmdW5jdGlvbigpe2EubG9nKCJNMjMyIik7YS5jLkwoKX0sImludGVyY2VwdFByb21pc2VSZWplY3QiLGYucmIpfTtyZXR1cm4gZn0oKTtuLkg9e1doOiJQcm9taXNlSW5zdGFuY2UuaW5pdCIsbGU6IlByb21pc2VJbnN0YW5jZS5yZXNvbHZlIixrZToiUHJvbWlzZUluc3RhbmNlLnJlamVjdCIsCmllOiJQcm9taXNlSW5zdGFuY2Uub25GdWxmaWxsZWQiLGplOiJQcm9taXNlSW5zdGFuY2Uub25SZWplY3RlZCIsaGU6IlByb21pc2VJbnN0YW5jZS5maW5hbGx5IixaZDoiUHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUiLFlkOiJQcm9taXNlQ29uc3RydWN0b3IucmVqZWN0In07bi5yYj1hLm1vbml0b3IuRXJyb3JNb25pdG9yLmw7YS5EaT1uO2gmJmYmJm4uUGsoKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXtmdW5jdGlvbiBsKGEsYil7dmFyIGM9W10sZT0vXlxzKihBRFJVTV9CVFx3Kik9KC4qKVxzKiQvaS5leGVjKGEpO2lmKGUpe3ZhciBsPWVbMV0sZT1lWzJdLnJlcGxhY2UoL14ifCIkL2csIiIpLGU9ZGVjb2RlVVJJQ29tcG9uZW50KGUpLnNwbGl0KCJ8Iiksaz1lWzBdLnNwbGl0KCI6Iik7aWYoIlIiPT09a1swXSYmTnVtYmVyKGtbMV0pPT09Yilmb3IoaChsKSxsPTE7bDxlLmxlbmd0aDtsKyspYy5wdXNoKGVbbF0pfXJldHVybiBjfWZ1bmN0aW9uIGUoYSwKYil7dmFyIGM9L15ccyooQURSVU1fKFxkKylfKFxkKylfKFxkKykpPSguKilccyokL2kuZXhlYyhhKTtpZihjKXt2YXIgZT1jWzFdLGw9Y1s0XSxrPWNbNV07aWYoTnVtYmVyKGNbM10pPT09YilyZXR1cm4gaChlKSx7aW5kZXg6TnVtYmVyKGwpLHZhbHVlOmt9fXJldHVybiBudWxsfWZ1bmN0aW9uIGMoYil7dmFyIGM9L15ccypBRFJVTT1zPShbXGRdKykmcj0oLiopXHMqLy5leGVjKGIpO2lmKGMpe2EubG9nKCJNMjM1IixiKTtpZigzPT09Yy5sZW5ndGgpcmV0dXJuIGgoIkFEUlVNIikse3N0YXJ0VGltZTpOdW1iZXIoY1sxXSksc3RhcnRQYWdlOmNbMl19O2EuZXJyb3IoIk0yMzYiLGIpO3JldHVybiBudWxsfX1mdW5jdGlvbiBoKGIpe2EubG9nKCJNMjM0IixiKTt2YXIgYz1uZXcgRGF0ZTtjLnNldFRpbWUoYy5nZXRUaW1lKCktMUUzKTtkb2N1bWVudC5jb29raWU9YisiPTtFeHBpcmVzPSIrYy50b1VUQ1N0cmluZygpfWIuc3RhcnRUaW1lQ29va2llPW51bGw7Yi5jb29raWVNZXRhZGF0YUNodW5rcz0KbnVsbDtiLmNmPWZ1bmN0aW9uKGYsaCl7YS5sb2coIk0yMzMiKTtmb3IodmFyIG09aD9oLmxlbmd0aDowLGs9W10sdD1mLnNwbGl0KCI7IikscD0wO3A8dC5sZW5ndGg7cCsrKXt2YXIgcj10W3BdLHM9ZShyLG0pO3M/ay5wdXNoKHMpOihyPWMociksbnVsbCE9ciYmKGIuc3RhcnRUaW1lQ29va2llPXIpKX1BcnJheS5wcm90b3R5cGUuc29ydC5jYWxsKGssZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5pbmRleC1iLmluZGV4fSk7cj1bXTtmb3IocD0wO3A8ay5sZW5ndGg7cCsrKXIucHVzaChrW3BdLnZhbHVlKTtmb3IocD0wO3A8dC5sZW5ndGg7cCsrKShrPWwodFtwXSxtKSkmJjA8ay5sZW5ndGgmJihyPXIuY29uY2F0KGspKTtiLmNvb2tpZU1ldGFkYXRhQ2h1bmtzPXJ9O2EuY29ycmVsYXRpb24uZWNrPWIuY2Z9KShhLmNvcnJlbGF0aW9ufHwoYS5jb3JyZWxhdGlvbj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7IkFQUF9LRVlfTk9UX1NFVCIhPT1hLmNvbmYuYXBwS2V5fHxhLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuQURFVU1fanNfaGFuZGxlcil8fAphLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cud2Via2l0KXx8eC5sb2coIkFwcER5bmFtaWNzIEVVTSBjbG91ZCBhcHBsaWNhdGlvbiBrZXkgbWlzc2luZy4gUGxlYXNlIHNwZWNpZnkgd2luZG93WydhZHJ1bS1hcHAta2V5J10iKTthLmNvcnJlbGF0aW9uLmNmKGRvY3VtZW50LmNvb2tpZSxkb2N1bWVudC5yZWZlcnJlcik7YS5jb21tYW5kKCJtYXJrIiwiZmlyc3RieXRlIix3aW5kb3dbImFkcnVtLXN0YXJ0LXRpbWUiXSk7YS5tb25pdG9yLnNldFVwTW9uaXRvcnMoYS5tb25pdG9yLmdhLGEubW9uaXRvci50aixhLm1vbml0b3IuZG9tRXZlbnRzTW9uaXRvcixhLm1vbml0b3IubmF2TW9uaXRvcixhLm1vbml0b3IueGhyTW9uaXRvcixhLm1vbml0b3IucmVzb3VyY2VNb25pdG9yKTthLmNvbmYuZmV0Y2gmJiFhLmNvbmYuaXNab25lUHJvbWlzZSYmKGEuRGkuc2V0VXAoKSxhLm1vbml0b3Iuc2V0VXBNb25pdG9ycyhhLm1vbml0b3IuaWIpKTthLmNvbmYuc3BhMiYmYS5jb25mLm1vZGVybkJyb3dzZXJGZWF0dXJlc0F2YWlsYWJsZSYmCmEubW9uaXRvci5zZXRVcE1vbml0b3JzKGEubW9uaXRvci5iaik7YS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiZhLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuTXV0YXRpb25PYnNlcnZlcikmJihhLmoubi5KLlNnKCksYS5qLm4uc3RhcnQoYS51dGlscy5oYigpKSxhLk4uc3RhcnQoKSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXthPWEubmd8fChhLm5nPXt9KTthPWEua3x8KGEuaz17fSk7YS5YZj0ibG9jYXRpb25DaGFuZ2VTdGFydCI7YS50bD0ibG9jYXRpb25DaGFuZ2VTdWNjZXNzIjthLkpnPSJyb3V0ZUNoYW5nZVN0YXJ0IjthLktnPSJyb3V0ZUNoYW5nZVN1Y2Nlc3MiO2EuWGc9InN0YXRlQ2hhbmdlU3RhcnQiO2EuWWc9InN0YXRlQ2hhbmdlU3VjY2VzcyI7YS5raD0idmlld0NvbnRlbnRMb2FkZWQiO2EuQ2s9ImluY2x1ZGVDb250ZW50UmVxdWVzdGVkIjthLkJrPSJpbmNsdWRlQ29udGVudExvYWRlZCI7YS5hZj0iZGlnZXN0IjthLmlvPSJvdXRzdGFuZGluZ1JlcXVlc3RzQ29tcGxldGUiOwphLk5lPSJiZWZvcmVOZ1hoclJlcXVlc3RlZCI7YS5EZT0iYWZ0ZXJOZ1hoclJlcXVlc3RlZCI7YS5obz0ibmdYaHJMb2FkZWQiO2EuUmU9IiQkY29tcGxldGVPdXRzdGFuZGluZ1JlcXVlc3QifSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGwoYSxjLGUsbSxsLGspe2lmKGMpdHJ5e3JldHVybiBjLmFwcGx5KGEsW2UsbSxsXS5jb25jYXQoaykpfWNhdGNoKHApe3JldHVybiBhLmVycm9yKGUsbSxsLGssYi5FcnJvci5YaCwiTTIzNyIscCl9fWZ1bmN0aW9uIGUoYSxjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnQsbT1jW2VdfHxjW2IuR2JdfHxlLGs9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtpZih0aGlzLnJqKGEpKXJldHVybiB0aGlzLmVycm9yKGEsZSxtLGssYi5FcnJvci5ZaCwiZXZlbnQgIithKyJNMjM4Iit0aGlzLmN1cnJlbnQpO2lmKCExPT09bCh0aGlzLHRoaXNbIm9uYmVmb3JlIithXSwKYSxlLG0saykpcmV0dXJuIGIuRmIuWGQ7bT09PWIuR2ImJihtPWUpO2lmKGU9PT1tKXJldHVybiBsKHRoaXMsdGhpc1sib25hZnRlciIrYV18fHRoaXNbIm9uIithXSxhLGUsbSxrKSxiLkZiLnhpO3ZhciB0PXRoaXM7dGhpcy50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7dC50cmFuc2l0aW9uPW51bGw7dC5jdXJyZW50PW07bCh0LHRbIm9uZW50ZXIiK21dfHx0WyJvbiIrbV0sYSxlLG0sayk7bCh0LHRbIm9uYWZ0ZXIiK2FdfHx0WyJvbiIrYV0sYSxlLG0sayk7cmV0dXJuIGIuRmIuSWl9O2lmKCExPT09bCh0aGlzLHRoaXNbIm9ubGVhdmUiK2VdLGEsZSxtLGspKXJldHVybiB0aGlzLnRyYW5zaXRpb249bnVsbCxiLkZiLlhkO2lmKHRoaXMudHJhbnNpdGlvbilyZXR1cm4gdGhpcy50cmFuc2l0aW9uKCl9fXZhciBjPWEudXRpbHMuaGFzT3duUHJvcGVydHlEZWZpbmVkO2IuVkVSU0lPTj0iMi4zLjUiO2IuRmI9e0lpOjEseGk6MixYZDozLHJuOjR9O2IuRXJyb3I9e1loOjEwMCxzbjoyMDAsClhoOjMwMH07Yi5HYj0iKiI7Yi5jcmVhdGU9ZnVuY3Rpb24oYSxmKXtmdW5jdGlvbiBuKGEpe3ZhciBjPWEuZnJvbSBpbnN0YW5jZW9mIEFycmF5P2EuZnJvbTphLmZyb20/W2EuZnJvbV06W2IuR2JdO3JbYS5uYW1lXT1yW2EubmFtZV18fHt9O2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXNbY1tmXV09c1tjW2ZdXXx8W10sc1tjW2ZdXS5wdXNoKGEubmFtZSksclthLm5hbWVdW2NbZl1dPWEudG98fGNbZl19dmFyIG09InN0cmluZyI9PXR5cGVvZiBhLmluaXRpYWw/e3N0YXRlOmEuaW5pdGlhbH06YS5pbml0aWFsLGw9Znx8YS50YXJnZXR8fHt9LGs9YS5ldmVudHN8fFtdLHA9YS5jYWxsYmFja3N8fHt9LHI9e30scz17fTttJiYobS5ldmVudD1tLmV2ZW50fHwic3RhcnR1cCIsbih7bmFtZTptLmV2ZW50LGZyb206Im5vbmUiLHRvOm0uc3RhdGV9KSk7Zm9yKHZhciB3PTA7dzxrLmxlbmd0aDt3KyspbihrW3ddKTtmb3IodmFyIEEgaW4gciljKHIsQSkmJihsW0FdPWUoQSxyW0FdKSk7CmZvcihBIGluIHApYyhwLEEpJiYobFtBXT1wW0FdKTtsLmN1cnJlbnQ9Im5vbmUiO2wuU249ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT8wPD1hLmluZGV4T2YodGhpcy5jdXJyZW50KTp0aGlzLmN1cnJlbnQ9PT1hfTtsLnFqPWZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLnRyYW5zaXRpb24mJihjKHJbYV0sdGhpcy5jdXJyZW50KXx8YyhyW2FdLGIuR2IpKX07bC5yaj1mdW5jdGlvbihhKXtyZXR1cm4hdGhpcy5xaihhKX07bC5uYz1mdW5jdGlvbigpe3JldHVybiBzW3RoaXMuY3VycmVudF19O2wuZXJyb3I9YS5lcnJvcnx8ZnVuY3Rpb24oYSxiLGMsZixoLG0sZSl7dGhyb3cgZXx8bTt9O2lmKG0mJiFtLmRlZmVyKWxbbS5ldmVudF0oKTtyZXR1cm4gbH19KShhLndlfHwoYS53ZT17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGMoYil7Yj1lLmNhbGwodGhpcyxiKXx8dGhpczthLnV0aWxzLmlzRGVmaW5lZChhLm5nKSYmCmIuY29uc3RydWN0b3IhPWEubmcuTmdWUGFnZVZpZXcmJmIuY29uc3RydWN0b3IhPWMmJmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLlZQYWdlVmlldyIsW10pO2lmKGEuY29uZi5zcGEyKXJldHVybiBiO2IucGVyZj1uZXcgYS5QZXJmb3JtYW5jZVRyYWNrZXI7Yi5zdGFydCgpO2EubW9uaXRvci54aHJNb25pdG9yLmZjKCk7YS5tb25pdG9yLmliLmZjKCk7YS5tb25pdG9yLmdhLmVtKCk7cmV0dXJuIGJ9dihjLGUpO2MucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudFR5cGUuVlBhZ2VWaWV3fTtjLnByb3RvdHlwZS5XYz1mdW5jdGlvbigpe3JldHVybiBiLkV2ZW50VHJhY2tlci5EYyh0aGlzLmd1aWQoKSx0aGlzLnVybCgpLHRoaXMudHlwZSgpKX07Yy5wcm90b3R5cGUuVmc9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5XYygpO2Iuc2V0KCJwYXJlbnQiLGMpO2EubG9nKCJNMjM5IixjLmd1aWQoKSxjLnVybCgpKX07Yy5wcm90b3R5cGUuc3RhcnRDb3JyZWxhdGluZ1hocnM9CmZ1bmN0aW9uKCl7YS5jb25mLnNwYTJ8fChhLmxvZygiTTI0MCIpLHRoaXMuVmcoYS5tb25pdG9yLnhock1vbml0b3IpKX07Yy5wcm90b3R5cGUuc3RvcENvcnJlbGF0aW5nWGhycz1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwoYS5tb25pdG9yLnhock1vbml0b3Iuc2V0KCJwYXJlbnQiLG51bGwpLGEubG9nKCJNMjQxIikpfTtjLnByb3RvdHlwZS5GZD1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwoYS5sb2coIk0yNDIiKSx0aGlzLlZnKGEubW9uaXRvci5nYSkpfTtjLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwodGhpcy5tYXJrVmlydHVhbFBhZ2VTdGFydCgpLHRoaXMuc3RhcnRDb3JyZWxhdGluZ1hocnMoKSl9O2MucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwodGhpcy5tYXJrVmlydHVhbFBhZ2VFbmQoKSx0aGlzLnN0b3BDb3JyZWxhdGluZ1hocnMoKSl9O3JldHVybiBjfShiLkV2ZW50VHJhY2tlcik7Yi5WUGFnZVZpZXc9bDtiLk1hKGIuVFthLkV2ZW50VHlwZS5WUGFnZVZpZXddLApsLnByb3RvdHlwZSk7Yi5JZShiLm1ldHJpY1NwZWNbYS5FdmVudFR5cGUuVlBhZ2VWaWV3XSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXt2YXIgYj1hLm5nfHwoYS5uZz17fSksYj1iLmNvbmZ8fChiLmNvbmY9e30pO2IuZGlzYWJsZWQ9YS5jb25mLnVzZXJDb25mJiZhLmNvbmYudXNlckNvbmYuc3BhJiZhLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXImJmEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhci5kaXNhYmxlO2IuZGlzdGluZ3Vpc2hWUHdpdGhJdHNUZW1wbGF0ZVVybD1hLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5zcGEmJmEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhciYmITA9PT1hLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXIuZGlzdGluZ3Vpc2hWUHdpdGhJdHNUZW1wbGF0ZVVybD8hMDohMTtiLnhocj17fTtiLm1ldHJpY3M9e2luY2x1ZGVSZXNUaW1pbmdJbkVuZFVzZXJSZXNwb25zZVRpbWluZzohMH07CmEuY29uZi51c2VyQ29uZiYmYS5jb25mLnVzZXJDb25mLnNwYSYmYS5jb25mLnVzZXJDb25mLnNwYS5hbmd1bGFyJiZhLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXIudnAmJihhLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXIudnAueGhyJiZhLnV0aWxzLnVhLnRnKGEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhci52cC54aHIpLGEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhci52cC5tZXRyaWNzJiZhLnV0aWxzLm1lcmdlSlNPTihiLm1ldHJpY3MsYS5jb25mLnVzZXJDb25mLnNwYS5hbmd1bGFyLnZwLm1ldHJpY3MpKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLm1hcCxlPWEudXRpbHMucmVkdWNlLGM9YS51dGlscy5maWx0ZXIsaD1mdW5jdGlvbihmKXtmdW5jdGlvbiBoKGIpe2I9Zi5jYWxsKHRoaXMsYil8fHRoaXM7Yi5OZj0hMDtiLnViPXt9O2IuVmE9MDtiLkNvPVtdO2IuZGlnZXN0Q291bnQoMCk7aWYoYi5jb25zdHJ1Y3RvciE9CmgpcmV0dXJuIGEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLkFqYXgiLFtdKSxiO2Iuc3RvcENvcnJlbGF0aW5nWGhycygpO3JldHVybiBifXYoaCxmKTtoLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnRUeXBlLlZQYWdlVmlld307aC5wcm90b3R5cGUuVGQ9ZnVuY3Rpb24oKXt0aGlzLm1hcmtWaWV3Q2hhbmdlU3RhcnQoKTt0aGlzLm1hcmtWaXJ0dWFsUGFnZVN0YXJ0KHRoaXMuZ2V0Vmlld0NoYW5nZVN0YXJ0KCkpO3RoaXMudGltZXN0YW1wKHRoaXMuZ2V0Vmlld0NoYW5nZVN0YXJ0KCkpfTtoLnByb3RvdHlwZS5Eaz1mdW5jdGlvbigpe3RoaXMuZGlnZXN0Q291bnQodGhpcy5kaWdlc3RDb3VudCgpKzEpfTtoLnByb3RvdHlwZS5Faz1mdW5jdGlvbigpe3RoaXMuVmErKzthLmxvZygiTTI0MyIsdGhpcy5WYSl9O2gucHJvdG90eXBlLnpqPWZ1bmN0aW9uKCl7dGhpcy5WYS0tO2EubG9nKCJNMjQ0Iix0aGlzLlZhKX07aC5wcm90b3R5cGUueWs9CmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wZXJmLmdldEVudHJ5QnlOYW1lKGEuZXZlbnRzLmIuc2gpO2EubG9nKCJNMjQ1Iix0aGlzLlZhLGIpO3JldHVybiAwPHRoaXMuVmF9O2gucHJvdG90eXBlLm1qPWZ1bmN0aW9uKCl7dmFyIGE9e21jOjB9LGI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgibmctdmlldywgW25nLXZpZXddLCAubmctdmlldywgW3VpLXZpZXddIiksYj1sKGIsYW5ndWxhci5lbGVtZW50KSxjO2ZvcihjIGluIGguR2cpe3ZhciBmPWguR2dbY107bChiLGZ1bmN0aW9uKGIpe2I9Yi5maW5kKGMpO2woYixmdW5jdGlvbihiKXtpZihiPWJbZl0pYj1kZWNvZGVVUklDb21wb25lbnQoYiksYVtiXXx8KGFbYl09YyxhLm1jKyspfSl9KX10aGlzLnViPWF9O2gucHJvdG90eXBlLmtqPWZ1bmN0aW9uKGEpe3JldHVybiEhdGhpcy51YltkZWNvZGVVUklDb21wb25lbnQoYS5uYW1lKV19O2gucHJvdG90eXBlLm5qPWZ1bmN0aW9uKCl7dmFyIGI9W10sYz10aGlzOzA8dGhpcy51Yi5tYyYmCihiPWEubW9uaXRvci5yZXNvdXJjZU1vbml0b3IuamIoKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGMua2ooYSl9KSk7dGhpcy5yZXNUaW1pbmcoYil9O2guUGo9ZnVuY3Rpb24oYil7cmV0dXJuIGMoYixmdW5jdGlvbihiKXtyZXR1cm4oYi5ldmVudFR5cGU9PT1hLkV2ZW50VHlwZS5BamF4fHxiLmV2ZW50VHlwZT09PWEuRXZlbnRUeXBlLkFEUlVNX1hIUikmJiFhLnV0aWxzLnVhLmxjKGIuZXZlbnRVcmwsYi5tZXRob2QpfSl9O2guaGs9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSxmdW5jdGlvbihhLGIpe3JldHVybiBNYXRoLm1heChhLGIudGltZXN0YW1wK2IubWV0cmljcy5QTFQpfSwtMSl9O2gucHJvdG90eXBlLlppPWZ1bmN0aW9uKCl7aWYoYi5jb25mLnhocil7dmFyIGM9aC5QaihhLmNoYW5uZWwuZ2V0RXZlbnRzV2l0aFBhcmVudEdVSUQodGhpcy5ndWlkKCkpKSxjPWguaGsoYyk7aWYoMDxjKXt2YXIgZj10aGlzLnBlcmYuZ2V0RW50cnlCeU5hbWUoYS5ldmVudHMuYi5zaCk7CnRoaXMubWFya1hoclJlcXVlc3RzQ29tcGxldGVkKE1hdGgubWluKGYmJmYuc3RhcnRUaW1lfHxOdW1iZXIuTUFYX1ZBTFVFLGMpKX19fTtoLnByb3RvdHlwZS5hZGp1c3RUaW1pbmdzPWZ1bmN0aW9uKCl7dGhpcy5aaSgpO3ZhciBjPXRoaXMuZ2V0Vmlld0RPTUxvYWRlZCgpLGY9dGhpcy5nZXRYaHJSZXF1ZXN0c0NvbXBsZXRlZCgpLGM9TWF0aC5tYXgoYyxmKTtiLmNvbmYubWV0cmljcy5pbmNsdWRlUmVzVGltaW5nSW5FbmRVc2VyUmVzcG9uc2VUaW1pbmcmJih0aGlzLllpKCksZj10aGlzLmdldFZpZXdSZXNvdXJjZXNMb2FkZWQoKSxmPU1hdGgubWF4KGMsZiksYS5sb2coIk0yNDYiLGMsZiksYz1mKTt0aGlzLm1hcmtWaXJ0dWFsUGFnZUVuZChjKX07aC5wcm90b3R5cGUuWWk9ZnVuY3Rpb24oKXtpZigwPHRoaXMudWIubWMpe3RoaXMubmooKTt2YXIgYj10aGlzLnJlc1RpbWluZygpO2ImJmIubGVuZ3RoPj10aGlzLnViLm1jJiYoYj1lKGIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWF0aC5tYXgoYSwKYi5yZXNwb25zZUVuZCl9LDApLHRoaXMubWFya1ZpZXdSZXNvdXJjZXNMb2FkZWQoYS5QZXJmb3JtYW5jZVRyYWNrZXIuSWMoYikpKX19O2gucHJvdG90eXBlLmlkZW50aWZpZXI9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5taDthLnV0aWxzLmlzRGVmaW5lZChiKSYmKHRoaXMubWg9aC5OaihiKSx0aGlzLnVybCh0aGlzLm1oLnVybCkpO3JldHVybiBjfTtoLk5qPWZ1bmN0aW9uKGIpe3ZhciBjPXt9O2ImJmIuTT8oYy5NPXt0ZDoiIn0sYS51dGlscy5tZXJnZUpTT04oYy5NLHt0ZDpiLk0ub3JpZ2luYWxQYXRoLHZiOmIuTS50ZW1wbGF0ZSx3YjpiLk0udGVtcGxhdGVVcmx9KSk6YiYmYi5zdGF0ZSYmKGMuc3RhdGU9e3VybDoiIn0sYS51dGlscy5tZXJnZUpTT04oYy5zdGF0ZSx7dXJsOmIuc3RhdGUudXJsLG5hbWU6Yi5zdGF0ZS5uYW1lLHZiOmIuc3RhdGUudGVtcGxhdGUsd2I6Yi5zdGF0ZS50ZW1wbGF0ZVVybH0pKTtyZXR1cm4gY307cmV0dXJuIGh9KGEuZXZlbnRzLlZQYWdlVmlldyk7CmguR2c9e2ltZzoic3JjIixzY3JpcHQ6InNyYyIsbGluazoiaHJlZiJ9O2IuTmdWUGFnZVZpZXc9aDthLmV2ZW50cy5NYShhLmV2ZW50cy5UW2EuRXZlbnRUeXBlLk5HX1ZJUlRVQUxfUEFHRV0saC5wcm90b3R5cGUpfSkoYS5uZ3x8KGEubmc9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLkE9bmV3IGIuTmdWUGFnZVZpZXd9ZS5wcm90b3R5cGUubG09ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGg9dGhpcy5BO2IuY29uZi5tZXRyaWNzLmluY2x1ZGVSZXNUaW1pbmdJbkVuZFVzZXJSZXNwb25zZVRpbWluZz8oYS5sb2coIk0yNDciKSxhLnV0aWxzLm9TVE8oZnVuY3Rpb24oKXtjLnlkKGgpfSxlLktpKSk6YS51dGlscy5vU1RPKGZ1bmN0aW9uKCl7Yy55ZChoKX0sZS5MaSl9O2UucHJvdG90eXBlLnlkPWZ1bmN0aW9uKGIpe2EubG9nKCJNMjQ4Iik7Yi5wYXJlbnQoYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKTsKYS5jb21tYW5kKCJjYWxsIixmdW5jdGlvbigpe2IuYWRqdXN0VGltaW5ncygpO2EucmVwb3J0ZXIucmVwb3J0RXZlbnQoYil9KX07ZS5wcm90b3R5cGUuc209ZnVuY3Rpb24oYSl7dGhpcy5BPWF9O3JldHVybiBlfSgpO2wuS2k9NUUzO2wuTGk9MiphLm1vbml0b3IuWEhSTW9uaXRvci5iZTtiLlZpcnR1YWxQYWdlU3RhdGVNYWNoaW5lPWw7YS53ZS5jcmVhdGUoe2V2ZW50czpbe25hbWU6InN0YXJ0Iixmcm9tOiJub25lIix0bzoiQ2hhbmdlVmlldyJ9LHtuYW1lOiJ2aWV3TG9hZGVkIixmcm9tOiJDaGFuZ2VWaWV3Iix0bzoiWGhyUGVuZGluZyJ9LHtuYW1lOiJ4aHJDb21wbGV0ZWQiLGZyb206IlhoclBlbmRpbmciLHRvOiJFbmQifSx7bmFtZToiYWJvcnQiLGZyb206IioiLHRvOiJub25lIn0se25hbWU6ImluaXQiLGZyb206IioiLHRvOiJub25lIn0se25hbWU6ImxvY0NoYW5nZSIsZnJvbToiKiIsdG86IioifSx7bmFtZToiYmVmb3JlWGhyUmVxIixmcm9tOiIqIix0bzoiKiJ9LHtuYW1lOiJhZnRlclhoclJlcSIsCmZyb206IioiLHRvOiIqIn1dLGVycm9yOmZ1bmN0aW9uKGIpe2EubG9nKCJNMjQ5IixiKX0sY2FsbGJhY2tzOntvbkNoYW5nZVZpZXc6ZnVuY3Rpb24oKXt0aGlzLkEuVGQoKTt0aGlzLkEuRmQoKX0sb252aWV3TG9hZGVkOmZ1bmN0aW9uKCl7dGhpcy5BLm1hcmtWaWV3RE9NTG9hZGVkKCl9LG9uWGhyUGVuZGluZzpmdW5jdGlvbigpe3RoaXMuQS5OZiYmdGhpcy54aHJDb21wbGV0ZWQoKX0sb25sZWF2ZVhoclBlbmRpbmc6ZnVuY3Rpb24oYSxiLGgpe2lmKCJhYm9ydCI9PT1hKXJldHVybiB0aGlzLnlkKCksITA7aWYoInhockNvbXBsZXRlZCI9PT1hJiYiRW5kIj09PWgpe2lmKHRoaXMuQS55aygpKXJldHVybiExO3RoaXMuQS5tYXJrWGhyUmVxdWVzdHNDb21wbGV0ZWQoKTtyZXR1cm4hMH19LG9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5BLm1qKCk7dGhpcy5sbSgpfSxvbmluaXQ6ZnVuY3Rpb24oYixjLGgsZil7dGhpcy5zbShmKTthLm1vbml0b3IueGhyTW9uaXRvci5mYygpO2EubW9uaXRvci5pYi5mYygpfSwKb25sb2NDaGFuZ2U6ZnVuY3Rpb24oYSxiLGgsZil7dGhpcy5BLmlkZW50aWZpZXIudXJsPWY7dGhpcy5BLmtjKHt1cmw6Zn0pfSxvbmJlZm9yZVhoclJlcTpmdW5jdGlvbihiLGMsaCxmKXt2YXIgbj10aGlzLkE7bi5OZj0hMTthLmxvZygiTTI1MCIsZiYmZlsxXXx8IiIsbi5ndWlkKCkpO24uRWsoKTtuLnN0YXJ0Q29ycmVsYXRpbmdYaHJzKCk7ZlszXSYmKGZbM109YS5hb3AuYmVmb3JlKGZbM10sZnVuY3Rpb24oYixjLGYpe2EubG9nKCJNMjUxIik7bi56aigpO2YmJihiPWEudXRpbHMuT2woZilbImNvbnRlbnQtdHlwZSJdKSYmMDw9Yi5pbmRleE9mKCJ0ZXh0L2h0bWwiKSYmbi5tYXJrVmlld0ZyYWdtZW50c0xvYWRlZCgpfSkpO3JldHVybiBmfSxvbmFmdGVyWGhyUmVxOmZ1bmN0aW9uKCl7dGhpcy5BLnN0b3BDb3JyZWxhdGluZ1hocnMoKX19fSxsLnByb3RvdHlwZSl9KShhLm5nfHwoYS5uZz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPQpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLk89bmV3IGIuVmlydHVhbFBhZ2VTdGF0ZU1hY2hpbmU7dGhpcy5kaXN0aW5ndWlzaFZQd2l0aEl0c1RlbXBsYXRlVXJsPWEubmcuY29uZi5kaXN0aW5ndWlzaFZQd2l0aEl0c1RlbXBsYXRlVXJsfWUucHJvdG90eXBlLlM9ZnVuY3Rpb24oYyxoKXthLmxvZygiTTI1MiIsYyk7c3dpdGNoKGMpe2Nhc2UgYi5rLkpnOmNhc2UgYi5rLlhnOnRoaXMuTy5zdGFydCgpO3ZhciBmPWgubmV4dC51cmx8fGRvY3VtZW50LlVSTCxuPW5ldyBiLk5nVlBhZ2VWaWV3KHt1cmw6ZixpZGVudGlmaWVyOmgubmV4dH0pO3RoaXMuZGlzdGluZ3Vpc2hWUHdpdGhJdHNUZW1wbGF0ZVVybCYmZS5aayh0aGlzLk8uQSxuKT90aGlzLk8uQS5rYyh7dXJsOmYsaWRlbnRpZmllcjpoLm5leHR9KTp0aGlzLkdtKG4pO2JyZWFrO2Nhc2UgYi5rLktnOmNhc2UgYi5rLllnOnRoaXMuTy5BLm1hcmtWaWV3Q2hhbmdlRW5kKCk7YnJlYWs7Y2FzZSBiLmsua2g6dGhpcy5PLnZpZXdMb2FkZWQoKTsKYnJlYWs7Y2FzZSBiLmsuTmU6dGhpcy5PLmJlZm9yZVhoclJlcShoKTticmVhaztjYXNlIGIuay5EZTp0aGlzLk8uYWZ0ZXJYaHJSZXEoKTticmVhaztjYXNlIGIuay5SZTp0aGlzLk8ueGhyQ29tcGxldGVkKCk7YnJlYWs7Y2FzZSBiLmsuWGY6dGhpcy5PLkEua2Moe3VybDpoLm5leHQudXJsfSk7dGhpcy5PLmxvY0NoYW5nZShoLm5leHQudXJsKTticmVhaztjYXNlIGIuay5hZjp0aGlzLk8uQS5EaygpfX07ZS5wcm90b3R5cGUuR209ZnVuY3Rpb24oYSl7dGhpcy5PLmFib3J0KCk7dGhpcy5PLmluaXQoYSk7dGhpcy5PLnN0YXJ0KCl9O2UuWms9ZnVuY3Rpb24oYixoKXt2YXIgZj1iLmlkZW50aWZpZXIoKSxlPWguaWRlbnRpZmllcigpLG09ITE7cmV0dXJuIG09IWEudXRpbHMuaXNEZWZpbmVkKGYpJiYhYS51dGlscy5pc0RlZmluZWQoZSl8fGY9PT1lPyEwOmEudXRpbHMuaXNEZWZpbmVkKGYpJiZhLnV0aWxzLmlzRGVmaW5lZChlKT9mLnN0YXRlfHxlLnN0YXRlP2EudXRpbHMuaXNEZWZpbmVkKGYuc3RhdGUpJiYKYS51dGlscy5pc0RlZmluZWQoZS5zdGF0ZSk/Zi5zdGF0ZS5uYW1lPT09ZS5zdGF0ZS5uYW1lJiZmLnN0YXRlLnZiPT09ZS5zdGF0ZS52YiYmZi5zdGF0ZS53Yj09PWUuc3RhdGUud2ImJmYuc3RhdGUudXJsPT09ZS5zdGF0ZS51cmw6ITE6Zi5NJiZlLk0/Zi5NLnRkPT09ZS5NLnRkJiZmLk0udmI9PT1lLk0udmImJmYuTS53Yj09PWUuTS53YjpmLnVybD09PWUudXJsOiExfTtyZXR1cm4gZX0oKTtiLk1pPWx9KShhLm5nfHwoYS5uZz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWEudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcixlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe3RoaXMuVT1uZXcgYi5NaTt0aGlzLkZmPSExfWMucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihoKXtyZXR1cm4gZnVuY3Rpb24oKXthLmxvZyhoKTtjLmluaXQoKX19dmFyIGM9dGhpcztiKCJNMjUzIikoKTtsKGRvY3VtZW50LCJET01Db250ZW50TG9hZGVkIiwKYigiTTI1NCIpKTtsKHdpbmRvdywibG9hZCIsYigiTTI1NSIpKX07Yy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2lmKCJsb2FkaW5nIj09PWRvY3VtZW50LnJlYWR5U3RhdGUpYS5sb2coIk0yNTYiKTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2YgYW5ndWxhciYmIXRoaXMuRmYpe3RoaXMuRmY9ITA7YS5sb2coIk0yNTciKTt2YXIgYj10aGlzLGM9YW5ndWxhci5tb2R1bGUoIm5nIik7Yy5jb25maWcoWyIkcHJvdmlkZSIsZnVuY3Rpb24oYSl7Yi5UayhhKTtiLk9rKGEpfV0pO2MucnVuKFsiJGJyb3dzZXIiLGZ1bmN0aW9uKGEpe2IuTGsoYSl9XSk7YS5sb2coIk0yNTgiKX19O2MucHJvdG90eXBlLk9rPWZ1bmN0aW9uKGMpe3ZhciBmPWEuYW9wLGU9dGhpcztjLmRlY29yYXRvcigiJGh0dHBCYWNrZW5kIixbIiRkZWxlZ2F0ZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9Zi5hcm91bmQoYSxmdW5jdGlvbigpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CmUuVS5TKGIuay5OZSxhKTtyZXR1cm4gYX0sZnVuY3Rpb24oKXtlLlUuUyhiLmsuRGUpfSwibmcuaHR0cEJhY2tlbmQiKX1dKX07Yy5wcm90b3R5cGUuVGs9ZnVuY3Rpb24oYyl7dmFyIGY9YS5hb3AsZT10aGlzO2MuZGVjb3JhdG9yKCIkcm9vdFNjb3BlIixbIiRkZWxlZ2F0ZSIsZnVuY3Rpb24oYSl7YS4kZGlnZXN0PWYuYWZ0ZXIoYS4kZGlnZXN0LGZ1bmN0aW9uKCl7ZS5VLlMoYi5rLmFmKX0sIm5nZXZlbnRzLmRpZ2VzdCIpO2EuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdGFydCIsZnVuY3Rpb24oYSxjKXt2YXIgZj17dXJsOmN9LGg9YSYmYS5nYiYmYS5nYi4kc3RhdGUmJmEuZ2IuJHN0YXRlLmN1cnJlbnQ7aCYmKGYuc3RhdGU9aCk7ZS5VLlMoYi5rLlhmLHtuZXh0OmZ9KX0pO2EuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdWNjZXNzIixmdW5jdGlvbigpe2UuVS5TKGIuay50bCl9KTthLiRvbigiJHJvdXRlQ2hhbmdlU3RhcnQiLGZ1bmN0aW9uKGEsYyl7dmFyIGY9e3VybDpsb2NhdGlvbi5ocmVmfSwKaD1jJiZjLiQkcm91dGU7aCYmKGYuTT1oKTtlLlUuUyhiLmsuSmcse25leHQ6Zn0pfSk7YS4kb24oIiRyb3V0ZUNoYW5nZVN1Y2Nlc3MiLGZ1bmN0aW9uKCl7ZS5VLlMoYi5rLktnKX0pO2EuJG9uKCIkc3RhdGVDaGFuZ2VTdGFydCIsZnVuY3Rpb24oYSxjKXtlLlUuUyhiLmsuWGcse25leHQ6e3N0YXRlOmN9fSl9KTthLiRvbigiJHN0YXRlQ2hhbmdlU3VjY2VzcyIsZnVuY3Rpb24oKXtlLlUuUyhiLmsuWWcpfSk7YS4kb24oIiR2aWV3Q29udGVudExvYWRlZCIsZnVuY3Rpb24oYSl7dmFyIGM9e3VybDpsb2NhdGlvbi5ocmVmfTtpZihhPWEmJmEuZ2ImJmEuZ2IuJHN0YXRlJiZhLmdiLiRzdGF0ZS5jdXJyZW50KWMuc3RhdGU9YTtlLlUuUyhiLmsua2gse25leHQ6Y30pfSk7YS4kb24oIiRpbmNsdWRlQ29udGVudFJlcXVlc3RlZCIsZnVuY3Rpb24oKXtlLlUuUyhiLmsuQ2spfSk7YS4kb24oIiRpbmNsdWRlQ29udGVudExvYWRlZCIsZnVuY3Rpb24oKXtlLlUuUyhiLmsuQmspfSk7cmV0dXJuIGF9XSl9OwpjLnByb3RvdHlwZS5Maz1mdW5jdGlvbihjKXt2YXIgZj10aGlzO2MuJCRjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdD1hLmFvcC5iZWZvcmUoYy4kJGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0LGZ1bmN0aW9uKCl7Zi5VLlMoYi5rLlJlKX0pfTtyZXR1cm4gY30oKTtiLm1uPWU7Yi5uZ01vbml0b3I9bmV3IGV9KShhLm5nfHwoYS5uZz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS5uZ3x8KGEubmc9e30pO2IuY29uZi5kaXNhYmxlZHx8YS5jb25mLnNwYTJ8fGEubW9uaXRvci5zZXRVcE1vbml0b3JzKGIubmdNb25pdG9yKX0pKGt8fChrPXt9KSl9fTt9KSgpOwo=(Line 28)
Message:
Refused to load the script 'https://tags.tiqcdn.com/utag/usbank/prepaid/prod/utag.sync.js' because it violates the following Content Security Policy directive: "script-src 'unsafe-inline' data:". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
security error URL: data:application/javascript;base64,Oy8qIFZlcnNpb24gYTVlOTIxZWFiMmRkZTJjNWFiNGI3OWVhNjM2YjgyNzEgdjo0LjUuMTcuMjg5MCwgYzo5MWQ3NTI1ZDdkOTk4MmYzZGQ3MTUxN2QzYjQ5MGU3ODFhYjM4OWM4LCBiOjQuNS4xNy4yODkwICovKGZ1bmN0aW9uKCl7bmV3IGZ1bmN0aW9uKCl7aWYoIXdpbmRvdy5BRFJVTSYmITAhPT13aW5kb3dbImFkcnVtLWRpc2FibGUiXSl7dmFyIGs9d2luZG93LkFEUlVNPXt9LEI9d2luZG93LmNvbnNvbGUseD1CJiYiZnVuY3Rpb24iPT10eXBlb2YgQi5sb2c/Qjp7bG9nOmZ1bmN0aW9uKCl7fX07d2luZG93WyJhZHJ1bS1zdGFydC10aW1lIl09d2luZG93WyJhZHJ1bS1zdGFydC10aW1lIl18fChuZXcgRGF0ZSkuZ2V0VGltZSgpO3ZhciB2PXRoaXMmJnRoaXMuQWN8fGZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGEsbCl7YS5fX3Byb3RvX189bH18fGZ1bmN0aW9uKGEsbCl7Zm9yKHZhciBlIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShlKSYmKGFbZV09bFtlXSl9O3JldHVybiBmdW5jdGlvbihiLGwpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvbnN0cnVjdG9yPWJ9YShiLGwpO2IucHJvdG90eXBlPW51bGw9PT1sP09iamVjdC5jcmVhdGUobCk6CihlLnByb3RvdHlwZT1sLnByb3RvdHlwZSxuZXcgZSl9fSgpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYSl7YS5zZXRVcE1vbml0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVtdLGI9MDtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKWFbYl09YXJndW1lbnRzW2JdO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl07YyYmYy5zZXRVcCgpfX19KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXtmdW5jdGlvbiBsKGEpe3JldHVybiBiLnJlZnMuc2xpY2UuYXBwbHkoYSxiLnJlZnMuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfWZ1bmN0aW9uIGUoYSxtKXtyZXR1cm4gYyhiLnJlZnMuc2V0VGltZW91dC5hcHBseSk/Yi5yZWZzLnNldFRpbWVvdXQuYXBwbHkod2luZG93LGFyZ3VtZW50cyk6Yi5yZWZzLnNldFRpbWVvdXQoYSxtKX1mdW5jdGlvbiBjKGEpe3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIGEmJm51bGwhPT0KYX1mdW5jdGlvbiBoKGEpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYSYmIWIuaXNBcnJheShhKSYmbnVsbCE9PWF9ZnVuY3Rpb24gZihhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYXx8ITF9ZnVuY3Rpb24gbihhKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGF9ZnVuY3Rpb24gbShhKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGF9ZnVuY3Rpb24gcShhLGMpe2Zvcih2YXIgbSBpbiBjKXt2YXIgZj1jW21dO2lmKHQoYyxtKSl7dmFyIG49YVttXTtoKGYpJiZoKG4pP3EobixmKTpiLmlzQXJyYXkobikmJmIuaXNBcnJheShmKT9hW21dPW4uY29uY2F0KGYpOmFbbV09Zn19cmV0dXJuIGF9ZnVuY3Rpb24gdChhLGIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxiKSYmYyhhW2JdKX1mdW5jdGlvbiBwKGEpe3JldHVybiBuKGEpP2EucmVwbGFjZSgvXlxzKi8sIiIpLnJlcGxhY2UoL1xzKiQvLCIiKTphfWZ1bmN0aW9uIHIoKXtyZXR1cm4gYi5yZWZzLmthJiYKZihiLnJlZnMua2Eubm93KX1mdW5jdGlvbiBzKCl7cmV0dXJuIHIoKT9iLnJlZnMucm91bmQoYi5yZWZzLmthLm5vdygpK3coKSk6KG5ldyBEYXRlKS5nZXRUaW1lKCl9ZnVuY3Rpb24gdygpe3ZhciBhPWIucmVmcy5rYSxhPWEmJmEudGltaW5nJiZtKGEudGltaW5nLm5hdmlnYXRpb25TdGFydCk/YS50aW1pbmcubmF2aWdhdGlvblN0YXJ0OndpbmRvd1siYWRydW0tc3RhcnQtdGltZSJdO2MoYSl8fChhPXMoKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQShhLGIpe3ZhciBjPUFycmF5LnByb3RvdHlwZVthXTtyZXR1cm4gYz9rKGMpOkMoYSxiKX1mdW5jdGlvbiBrKGEpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYS5hcHBseShjLGIucmVmcy5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9fWZ1bmN0aW9uIEMoYSxiKXtyZXR1cm4gZnVuY3Rpb24obSxoKXtpZighYyhtKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQiKTtpZighZihoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGgrCiIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gYi5hcHBseShudWxsLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHkoYSxiLGMpe3ZhciBtPU9iamVjdChhKSxoPW0ubGVuZ3RoPj4+MCxmPTA7aWYoMz5hcmd1bWVudHMubGVuZ3RoKXtmb3IoO2Y8aCYmIShmIGluIG0pOylmKys7aWYoZj49aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7Yz1tW2YrK119Zm9yKDtmPGg7ZisrKWYgaW4gbSYmKGM9YihjLG1bZl0sZixtKSk7cmV0dXJuIGN9ZnVuY3Rpb24geihhLGMsbSl7cmV0dXJuIGIucmVkdWNlKGEsZnVuY3Rpb24oYSxiLGgsZil7YVtoXT1jLmNhbGwobSxiLGgsZik7cmV0dXJuIGF9LEFycmF5KGEubGVuZ3RoPj4+MCkpfWZ1bmN0aW9uIEQoYSxjLG0pe3JldHVybiBiLnJlZHVjZShhLGZ1bmN0aW9uKGEsYixoLGYpe2MuY2FsbChtLGIsaCxmKSYmYS5wdXNoKGIpO3JldHVybiBhfSxbXSl9ZnVuY3Rpb24gRShhLApiLGMpe2E9T2JqZWN0KGEpO2Zvcih2YXIgbT1hLmxlbmd0aD4+PjAsaD0wO2g8bTtoKyspaWYoaCBpbiBhJiZiLmNhbGwoYyxhW2hdLGgsYSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRihhLGMsbSl7cmV0dXJuIWIuc29tZShhLGZ1bmN0aW9uKGEpe3JldHVybiFjLmNhbGwobSxhKX0pfWZ1bmN0aW9uIEcoYSxjLG0pe2IucmVkdWNlKGEsZnVuY3Rpb24oYSxiLGgsZil7Yy5jYWxsKG0sYixoLGYpfSx2b2lkIDApfWIucmVmcz17aXNBcnJheTpBcnJheS5pc0FycmF5LHRvU3RyaW5nOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsc2xpY2U6QXJyYXkucHJvdG90eXBlLnNsaWNlLHNldFRpbWVvdXQ6d2luZG93LnNldFRpbWVvdXQsc2V0SW50ZXJ2YWw6d2luZG93LnNldEludGVydmFsLGthOndpbmRvdy5wZXJmb3JtYW5jZXx8d2luZG93Lm1velBlcmZvcm1hbmNlfHx3aW5kb3cubXNQZXJmb3JtYW5jZXx8d2luZG93LndlYmtpdFBlcmZvcm1hbmNlLGFzc2lnbjpPYmplY3QuYXNzaWduLApyb3VuZDpNYXRoLnJvdW5kfTtiLndhPWw7Yi5vU1RPPWU7Yi5pc0NPUlNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cuSlNPTiYmZihKU09OLnN0cmluZ2lmeSk7cmV0dXJuIGMod2luZG93LlhNTEh0dHBSZXF1ZXN0KSYmIndpdGhDcmVkZW50aWFscyJpbiBuZXcgWE1MSHR0cFJlcXVlc3QmJmF9O2IuaXNEZWZpbmVkPWM7Yi5jbD1mdW5jdGlvbihhKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBhJiYhd2luZG93LmlzTmFOKGEpfTtiLmlzQXJyYXk9ZihiLnJlZnMuaXNBcnJheSkmJmYoYi5yZWZzLmlzQXJyYXkuYmluZCk/Yi5yZWZzLmlzQXJyYXkuYmluZChBcnJheSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGIucmVmcy50b1N0cmluZy5jYWxsKGEpPT09Yi5yZWZzLnRvU3RyaW5nLmNhbGwoW10pfTtiLmlzT2JqZWN0PWg7Yi5pc0Z1bmN0aW9uPWY7Yi5pc1N0cmluZz1uO2IuaXNOdW1iZXI9bTtiLmlzQm9vbGVhbj1mdW5jdGlvbihhKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBhfTsKYi5tYXg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWF0aC5tYXgoaXNOYU4oYSk/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOmEsaXNOYU4oYik/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOmIpfTtiLmdjPWU7Yi5wbz1mdW5jdGlvbihhLGIpe2UoYSxifHwxRTQpfTtiLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYixjLG0saCl7ZnVuY3Rpb24gZigpe3RyeXtyZXR1cm4gbS5hcHBseSh0aGlzLGwoYXJndW1lbnRzKSl9Y2F0Y2goaCl7YS5leGNlcHRpb24oaCwiTTEiLGMsYixoKX19dm9pZCAwPT09aCYmKGg9ITEpO2EuaXNEZWJ1ZyYmYS5sb2coIk0wIixjLGIpO2YuST0hMDtiLmFkZEV2ZW50TGlzdGVuZXI/Yi5hZGRFdmVudExpc3RlbmVyKGMsZixoKTpiLmF0dGFjaEV2ZW50JiZiLmF0dGFjaEV2ZW50KCJvbiIrYyxmKX07Yi5sb2FkU2NyaXB0QXN5bmM9ZnVuY3Rpb24oYil7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Yy50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiOwpjLmFzeW5jPSEwO2Muc3JjPWI7dmFyIG09ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzBdO20/KG0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYyxtKSxhLmxvZygiTTIiLGIpKTphLmxvZygiTTMiLGIpfTtiLm1lcmdlSlNPTj1xO2IuaGFzT3duUHJvcGVydHlEZWZpbmVkPXQ7Yi5uZj1mdW5jdGlvbihhLGMpe2lmKGIuaXNGdW5jdGlvbihPYmplY3QuZ2V0UHJvdG90eXBlT2YpKWZvcig7Yi5pc0RlZmluZWQoYSkmJiF0KGEsYyk7KWE9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO3JldHVybiBhfTtiLmJuPWZ1bmN0aW9uKGEpe3JldHVybiBjKGEpP2IuaXNBcnJheShhKT9hOlthXTpbXX07Yi51bz1mdW5jdGlvbihhLGIpe3JldHVybiBudWxsIT1hJiZhLnNsaWNlKDAsYi5sZW5ndGgpPT1ifTtiLmdlbmVyYXRlR1VJRD1mdW5jdGlvbihhKXtyZXR1cm4gYyhhKSYmZihhLmdldFJhbmRvbVZhbHVlcykmJmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihhKXthPWEudG9TdHJpbmcoMTYpOwpyZXR1cm4iMDAwMCIuc3Vic3RyKGEubGVuZ3RoKSthfXZhciBjPW5ldyBVaW50MTZBcnJheSg4KTthLmdldFJhbmRvbVZhbHVlcyhjKTtyZXR1cm4gYihjWzBdKStiKGNbMV0pKyJfIitiKGNbMl0pKyJfIitiKGNbM10pKyJfIitiKGNbNF0pKyJfIitiKGNbNV0pK2IoY1s2XSkrYihjWzddKX19KHdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0byl8fGZ1bmN0aW9uKCl7cmV0dXJuInh4eHh4eHh4X3h4eHhfNHh4eF95eHh4X3h4eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9nLGZ1bmN0aW9uKGEpe3ZhciBiPTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oIngiPT1hP2I6YiYzfDgpLnRvU3RyaW5nKDE2KX0pfTtiLnRyeUV4dHJhY3RpbmdFcnJvclN0YWNrPWZ1bmN0aW9uKGEpe3JldHVybiBhPyhhPWEuc3RhY2spJiYic3RyaW5nIj09PXR5cGVvZiBhP2E6bnVsbDpudWxsfTtiLnRyaW09cDtiLk9sPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGMsbTtpZighYSlyZXR1cm4gYjt2YXIgaD0KYS5zcGxpdCgiXG4iKTtmb3IobT0wO208aC5sZW5ndGg7bSsrKXt2YXIgZj1oW21dO2M9Zi5pbmRleE9mKCI6Iik7YT1wKGYuc3Vic3RyKDAsYykpLnRvTG93ZXJDYXNlKCk7Yz1wKGYuc3Vic3RyKGMrMSkpO2EmJihiW2FdPWJbYV0/YlthXSsoIiwgIitjKTpjKX1yZXR1cm4gYn07Yi50cnlQZXJpb2RpY2FsbHk9ZnVuY3Rpb24oYSxiLGMsbSl7ZnVuY3Rpb24gaCgpe2lmKGIoKSljJiZjKCk7ZWxzZXt2YXIgbj1hKCsrZik7MDxuP2UoaCxuKTptJiZtKCl9fXZhciBmPTA7aCgpfTtiLk9lPWZ1bmN0aW9uKGEpe3JldHVybiBhLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc2xpY2UoMSl9O2Iub2c9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbYy0xXT1hcmd1bWVudHNbY107cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBjPVtdLG09MDttPGFyZ3VtZW50cy5sZW5ndGg7bSsrKWNbbV09YXJndW1lbnRzW21dO3JldHVybiBhLmFwcGx5KHRoaXMsCmIuY29uY2F0KGMpKX19O2IuVG49cjtiLm5vdz1zO2IuaGI9dztiLkNuPXk7Yi5yZWR1Y2U9QSgicmVkdWNlIix5KTtiLkJuPXo7Yi5tYXA9QSgibWFwIix6KTtiLnpuPUQ7Yi5maWx0ZXI9QSgiZmlsdGVyIixEKTtiLkRuPUU7Yi5zb21lPUEoInNvbWUiLEUpO2IueW49RjtiLmV2ZXJ5PUEoImV2ZXJ5IixGKTtiLkFuPUc7Yi5mb3JFYWNoPUEoImZvckVhY2giLEcpO2IuQ2o9ZnVuY3Rpb24oYSl7cmV0dXJuIGIuZmlsdGVyKGEsYyl9O2IuSG49ZnVuY3Rpb24oYSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGEpfTtiLlFpPWMod2luZG93LlJlZmxlY3QpJiZjKHdpbmRvdy5SZWZsZWN0LmNvbnN0cnVjdCk/ZnVuY3Rpb24oYixjLG0saCl7dHJ5e3JldHVybiBudWxsIT09Yz93aW5kb3cuUmVmbGVjdC5jb25zdHJ1Y3QoYyxtLGgpOmJ9Y2F0Y2goZil7cmV0dXJuIGEubW9uaXRvci5FcnJvck1vbml0b3IubChmKSxifX06ZnVuY3Rpb24oYixjLG0pe3RyeXtyZXR1cm4gbnVsbCE9PWMmJgpjLmFwcGx5KGIsbSl8fGJ9Y2F0Y2goaCl7cmV0dXJuIGEubW9uaXRvci5FcnJvck1vbml0b3IubChoKSxifX07Yi5BYz1mdW5jdGlvbigpe3ZhciBhPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oYSxiKXt2YXIgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKSxtO2ZvcihtIGluIGMpYVttXT1iW21dfTtyZXR1cm4gZnVuY3Rpb24oYixjKXtmdW5jdGlvbiBtKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ifWEoYixjKTtiLnByb3RvdHlwZT1udWxsPT09Yz9PYmplY3QuY3JlYXRlKGMpOihtLnByb3RvdHlwZT1jLnByb3RvdHlwZSxuZXcgbSl9fSgpO2IuTGo9ZnVuY3Rpb24oYSl7aWYoIWIuaXNTdHJpbmcoYSkpcmV0dXJuIGE7dmFyIGM9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwiJyI6IiYjMzk7IiwnIic6IiZxdW90OyIsIi8iOiImIzQ3OyJ9O3JldHVybiBhLnJlcGxhY2UoL1smPD4nIi9dL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbYV19KX07Yi55bz0KZnVuY3Rpb24oYSl7aWYoIWIuaXNTdHJpbmcoYSkpcmV0dXJuIGE7dmFyIGM9eyImYW1wOyI6IiYiLCImIzM4OyI6IiYiLCImI3gyNjsiOiImIiwiJmx0OyI6IjwiLCImIzYwOyI6IjwiLCImI3gzYzsiOiI8IiwiJmd0OyI6Ij4iLCImIzYyOyI6Ij4iLCImI3gzZTsiOiI+IiwiJmFwb3M7IjoiJyIsIiYjMzk7IjoiJyIsIiYjeDI3OyI6IiciLCImcXVvdDsiOiciJywiJiMzNDsiOiciJywiJiN4MjI7IjonIicsIiZzb2w7IjoiLyIsIiYjNDc7IjoiLyIsIiYjeDJmOyI6Ii8ifTtyZXR1cm4gYS5yZXBsYWNlKC8mKD86YW1wfCMwKjM4fCN4MCoyNnxsdHwjMCo2MHwjeDAqM2N8Z3R8IzAqNjJ8I3gwKjNlfGFwb3N8IzAqMzl8I3gwKjI3fHF1b3R8IzAqMzR8I3gwKjIyfHNvbHwjMCo0N3wjeDAqMmYpOy9nLGZ1bmN0aW9uKGEpe2E9YS5yZXBsYWNlKC8wK1xCL2csIiIpO3JldHVybiBjW2FdfSl9O2IueWo9ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcztiJiYKY2xlYXJUaW1lb3V0KGIpO2I9ZShmdW5jdGlvbigpe2EuYXBwbHkoYyxhcmd1bWVudHMpfSwzMDApfX19KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS5jb25mfHwoYS5jb25mPXt9KTtiLnVzZXJDb25mPXdpbmRvd1siYWRydW0tY29uZmlnIl18fHt9O2IudXNlSFRUUFNBbHdheXM9ITA9PT1iLnVzZXJDb25mLnVzZUhUVFBTQWx3YXlzO2IubW9kZXJuQnJvd3NlckZlYXR1cmVzQXZhaWxhYmxlPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSYmYS51dGlscy5pc0NPUlNTdXBwb3J0ZWQoKSYmYS51dGlscy5pc0RlZmluZWQoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpO2Iuc3BhMj1iLnVzZXJDb25mLnNwYSYmYi51c2VyQ29uZi5zcGEuc3BhMiYmKCEwPT09Yi51c2VyQ29uZi5zcGEuc3BhMnx8YS51dGlscy5pc09iamVjdChiLnVzZXJDb25mLnNwYS5zcGEyKSk7Yi5jbGVhclJlc1RpbWluZz1iLnVzZXJDb25mLnNwYSYmCmEudXRpbHMuaXNPYmplY3QoYi51c2VyQ29uZi5zcGEuc3BhMikmJmEudXRpbHMuaXNEZWZpbmVkKGIudXNlckNvbmYuc3BhLnNwYTIuY2xlYXJSZXNUaW1pbmcpP2IudXNlckNvbmYuc3BhLnNwYTIuY2xlYXJSZXNUaW1pbmc6ITA7Yi5kaXNhYmxlVGV4dEZvclRlc3Rpbmc9ITA9PT1iLnVzZXJDb25mLmRpc2FibGVUZXh0Rm9yVGVzdGluZztiLmVuYWJsZVByaW1hcnlNZXRyaWNzPSghYS51dGlscy5pc0RlZmluZWQoYi51c2VyQ29uZi5lbmFibGVQcmltYXJ5TWV0cmljcyl8fCEwPT09Yi51c2VyQ29uZi5lbmFibGVQcmltYXJ5TWV0cmljcykmJmIubW9kZXJuQnJvd3NlckZlYXR1cmVzQXZhaWxhYmxlO2IuZGV2TW9kZT0hMD09PWIudXNlckNvbmYuZGV2TW9kZTtiLmlzWm9uZVByb21pc2U9ITA9PT1iLnVzZXJDb25mLmlzWm9uZVByb21pc2V8fCEwPT09Yi51c2VyQ29uZi5hbmd1bGFyO2IuZmV0Y2g9IWEudXRpbHMuaXNEZWZpbmVkKGIudXNlckNvbmYuZmV0Y2gpfHwhMD09Yi51c2VyQ29uZi5mZXRjaDsKYi5iYWNrVGltZUdhcD1NYXRoLmFicyhiLnVzZXJDb25mLmJhY2tUaW1lR2FwKXx8MDtiLm5ldmVyU2VuZEltYWdlQmVhY29uPSFhLnV0aWxzLmlzRGVmaW5lZChiLnVzZXJDb25mLmJlYWNvbil8fCFhLnV0aWxzLmlzRGVmaW5lZChiLnVzZXJDb25mLmJlYWNvbi5uZXZlclNlbmRJbWFnZUJlYWNvbil8fCEwPT1iLnVzZXJDb25mLmJlYWNvbi5uZXZlclNlbmRJbWFnZUJlYWNvbjtiLmJlYWNvblVybEh0dHA9YS51dGlscy5pc0RlZmluZWQoYi51c2VyQ29uZi5iZWFjb25VcmxIdHRwKT9iLnVzZXJDb25mLmJlYWNvblVybEh0dHA6Imh0dHA6Ly9jb2wuZXVtLWFwcGR5bmFtaWNzLmNvbSI7Yi5iZWFjb25VcmxIdHRwcz1hLnV0aWxzLmlzRGVmaW5lZChiLnVzZXJDb25mLmJlYWNvblVybEh0dHBzKT9iLnVzZXJDb25mLmJlYWNvblVybEh0dHBzOiJodHRwczovL2NvbC5ldW0tYXBwZHluYW1pY3MuY29tIjtiLmNvcnNFbmRwb2ludFBhdGg9Ii9ldW1jb2xsZWN0b3IvYmVhY29ucy9icm93c2VyIisKKGIuc3BhMj8iL3YyIjoiL3YxIik7Yi5pbWFnZUVuZHBvaW50UGF0aD0iL2V1bWNvbGxlY3Rvci9hZHJ1bS5naWY/IjtiLmFwcEtleT1iLnVzZXJDb25mLmFwcEtleXx8d2luZG93WyJhZHJ1bS1hcHAta2V5Il18fCJBUFBfS0VZX05PVF9TRVQiO2E9Yi51c2VIVFRQU0Fsd2F5c3x8Imh0dHBzOiI9PT1kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbDt2YXIgbD1iLnVzZXJDb25mLmFkcnVtRXh0VXJsSHR0cHx8Imh0dHA6Ly9jZG4uYXBwZHluYW1pY3MuY29tIixlPWIudXNlckNvbmYuYWRydW1FeHRVcmxIdHRwc3x8Imh0dHBzOi8vY2RuLmFwcGR5bmFtaWNzLmNvbSI7Yi5hZHJ1bUV4dFVybD0oYT9lOmwpKyIvYWRydW0tZXh0LmE1ZTkyMWVhYjJkZGUyYzVhYjRiNzllYTYzNmI4MjcxLmpzIjtiLmFkcnVtWGRVcmw9ZSsiL2FkcnVtLXhkLmE1ZTkyMWVhYjJkZGUyYzVhYjRiNzllYTYzNmI4MjcxLmh0bWwiO2IuYWdlbnRWZXI9IjQuNS4xNy4yODkwIjtiLnNlbmRJbWFnZUJlYWNvbj1iLnVzZXJDb25mLmJlYWNvbiYmCmIudXNlckNvbmYuYmVhY29uLnNlbmRJbWFnZUJlYWNvbnx8d2luZG93WyJhZHJ1bS1zZW5kLWltYWdlLWJlYWNvbiJdO3dpbmRvd1siYWRydW0tZ2VvLXJlc29sdmVyLXVybCJdPyhsPXdpbmRvd1siYWRydW0tZ2VvLXJlc29sdmVyLXVybCJdLGU9bC5pbmRleE9mKCI6Ly8iKSwtMSE9ZSYmKGw9bC5zdWJzdHJpbmcoZSszKSksbD0oYT8iaHR0cHM6Ly8iOiJodHRwOi8vIikrbCk6KGw9Yi51c2VyQ29uZi5nZW9SZXNvbHZlclVybEh0dHBzfHwiIixlPWIudXNlckNvbmYuZ2VvUmVzb2x2ZXJVcmxIdHRwfHwiIixsPWE/bDplKTtiLmdlb1Jlc29sdmVyVXJsPWw7Yi51c2VTdHJpY3REb21haW5Db29raWVzPSEwPT09d2luZG93WyJhZHJ1bS11c2Utc3RyaWN0LWRvbWFpbi1jb29raWVzIl07Yi5saT0xMDtiLmZpPTEwfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiLGMsbSxoKXtiPWEuY29uZi5iZWFjb25VcmxIdHRwcysiL2V1bWNvbGxlY3Rvci9lcnJvci5naWY/dmVyc2lvbj0xJmFwcEtleT0iKwptKyImbXNnPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIuc3Vic3RyaW5nKDAsNTAwKSk7aCYmKGIrPSImc3RhY2s9IixiKz1lbmNvZGVVUklDb21wb25lbnQoaC5zdWJzdHJpbmcoMCwxNTAwLWIubGVuZ3RoKSkpO3JldHVybiBifWZ1bmN0aW9uIGwoYyxtKXsyPD1zfHwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIikuc3JjPWIoYywwLGEuY29uZi5hcHBLZXksbSkscysrKX1mdW5jdGlvbiBlKGEpe3JldHVybiAwPD1hLmxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJBRFJVTV9kZWJ1Zz10cnVlIil8fDA8PWEuY29va2llLnNlYXJjaCgvKF58OylccypBRFJVTV9kZWJ1Zz10cnVlLyl9ZnVuY3Rpb24gYyhiKXthLmlzRGVidWcmJnAucHVzaChuKGFyZ3VtZW50cykuam9pbigiIHwgIikpfWZ1bmN0aW9uIGgoYSl7ci5wdXNoKG4oYXJndW1lbnRzKS5qb2luKCIgfCAiKSl9ZnVuY3Rpb24gZihhKXt2YXIgYj1uKGFyZ3VtZW50cykuam9pbigiIHwgIik7YyhiKTtsKGIsbnVsbCl9dmFyIG49CmEudXRpbHMud2EsbT1hLnV0aWxzLnJlZHVjZSxxPWEudXRpbHMuaXNEZWZpbmVkO2EuaURSPWU7dmFyIHQ7KGZ1bmN0aW9uKGEpe2FbYS5BUElfRVJST1I9MF09IkFQSV9FUlJPUiI7YVthLkFQSV9FUlJPUl9JTlZBTElEX1BBUkFNUz0xXT0iQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1TIjthW2EuQVBJX0VSUk9SX0lOVkFMSURfQ09ORklHPTJdPSJBUElfRVJST1JfSU5WQUxJRF9DT05GSUciO2FbYS5BUElfV0FSTklORz0zXT0iQVBJX1dBUk5JTkciO2FbYS5BUElfV0FSTklOR19JTkVGRkVDVElWRV9DT05GSUc9NF09IkFQSV9XQVJOSU5HX0lORUZGRUNUSVZFX0NPTkZJRyJ9KSh0PWEuVnx8KGEuVj17fSkpO2EuQmI9WyJKUyBBZ2VudCBBUEkgRXJyb3I6IiwiSlMgQWdlbnQgQVBJIEVycm9yIEludmFsaWQgUGFyYW1ldGVyczogIiwiSlMgQWdlbnQgQVBJIEVycm9yIEludmFsaWQgQ29uZmlnczogIiwiSlMgQWdlbnQgQVBJIFdhcm5pbmc6IiwiSlMgQWdlbnQgQVBJIFdhcm5pbmcgSW5lZmZlY3RpdmUgQ29uZmlnOiJdOwphLldhPSIgYSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbi4gRG9uJ3QgZm9yZ2V0IGtleXdvcmQgbmV3LiI7YS5pc0RlYnVnPWUoZG9jdW1lbnQpO2EuYXBpTWVzc2FnZUNvbnNvbGVPdXQ9cShhLmNvbmYudXNlckNvbmYpJiZxKGEuY29uZi51c2VyQ29uZi5sb2cpJiYhMD09PWEuY29uZi51c2VyQ29uZi5sb2cuYXBpTWVzc2FnZUNvbnNvbGVPdXQ/ITA6ITE7dmFyIHA9W10scj1bXTthLmxvZ01lc3NhZ2VzPXA7YS5hcGlNZXNzYWdlcz1yO2EubG9nPWM7YS5mbz1oO2EuZXJyb3I9ZjthLnJlcG9ydEFQSU1lc3NhZ2U9ZnVuY3Rpb24oYixjLG0sZil7dmFyIG49YS5VbC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aChuKTthLmFwaU1lc3NhZ2VDb25zb2xlT3V0JiZ4LmxvZyhuKTtyZXR1cm4gbn07YS5leGNlcHRpb249ZnVuY3Rpb24oKXtpZighKDE+YXJndW1lbnRzLmxlbmd0aCkpe3ZhciBiPW4oYXJndW1lbnRzKSxjPWEudXRpbHMudHJ5RXh0cmFjdGluZ0Vycm9yU3RhY2soYlswXSksCmI9Yi5zbGljZSgxKTthLnV0aWxzLmlzQXJyYXkoYikmJihiPWIuc2xpY2UoMCwyMCkpO2I9Yi5qb2luKCIgfCAiKTthLmxvZyhiKTtsKGIsYyl9fTthLmFzc2VydD1mdW5jdGlvbihhKXtmb3IodmFyIGI9MTtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKTt2YXIgYz1uKGFyZ3VtZW50cyk7YXx8KGI9Y1sxXSwoYz1jLnNsaWNlKDIpKSYmMDxjLmxlbmd0aD9mKCJNNCIsYixjKTpmKCJNNSIsYikpfTthLmR1bXBMb2c9YS5pc0RlYnVnP2Z1bmN0aW9uKCl7cmV0dXJuIG0ocCxmdW5jdGlvbihhLGIpe3JldHVybiBhK2IucmVwbGFjZSgvXDxiclwvXD4vZywiXG5cdCIpKyJcbiJ9LCIiKX06ZnVuY3Rpb24oKXt9O2EuZWY9MDthLlNjPTA7YS5QPWEuaXNEZWJ1ZyYmYS51dGlscy5yZWZzLmthP2Z1bmN0aW9uKCl7YS5lZj1hLnV0aWxzLnJlZnMua2Eubm93KCl9OmZ1bmN0aW9uKCl7fTthLlE9YS5pc0RlYnVnJiZhLnV0aWxzLnJlZnMua2E/ZnVuY3Rpb24oKXthLlNjKz1hLnV0aWxzLnJlZnMua2Eubm93KCktCmEuZWZ9OmZ1bmN0aW9uKCl7fTthLlVsPWZ1bmN0aW9uKGIsYyxtLGgpe3ZhciBmPSIiLGY9IiIsbj0obmV3IHdpbmRvdy5FcnJvcikuc3RhY2ssZSxuPWEudXRpbHMuaXNTdHJpbmcobik/bi5zdWJzdHJpbmcoNSk6bisiIjtxKGUpfHwoZT1hLnV0aWxzLm1hcChoLGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YT8ibnVsbCI6dm9pZCAwPT1hPyJ1bmRlZmluZWQiOiIiPT09YT8iJyciOmF9KSk7c3dpdGNoKGIpe2Nhc2UgdC5sYTpjYXNlIHQubG46Zj1hLkJiW2JdO2Y9cShtKT8iIitmK2MrIlxuIGluICIrbSsiKCIrZS5qb2luKCIsICIpKyIpXG4iK246IiIrZitjKyJcbiIrbjticmVhaztjYXNlIHQuV2Q6Zj1hLkJiW2JdO2Y9IiIrZitjKyJcbmluICIrbSsiKCIrZS5qb2luKCIsICIpKyIpXG4iK247YnJlYWs7Y2FzZSB0LmtuOmNhc2UgdC55aDpmPWEuQmJbYl07Zj0iIitmK2MrIiwgYnV0ICIrbSsiPSIrZS5qb2luKCIsICIpKyJcbiIrbjticmVhaztkZWZhdWx0OmY9YS5CYlt0LmxhXSwKZj0iIitmK2MrIlxuaW4gIittKyIoIitlLmpvaW4oIiwgIikrIilcbiIrbn1yZXR1cm4gZn07YS5jSUVCVT1iO3ZhciBzPTA7YygiTTYiKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXt0aGlzLm1heD1iO3RoaXMuSmM9MH1hLnByb3RvdHlwZS5Gaz1mdW5jdGlvbigpe3RoaXMuVWIoKXx8dGhpcy5KYysrfTthLnByb3RvdHlwZS5VYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkpjPj10aGlzLm1heH07YS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLkpjPTB9O3JldHVybiBhfSgpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5LYj1bXTt0aGlzLkVkPW5ldyBiKGUud2kpO3RoaXMubGQ9bmV3IGIoZS5waSl9ZS5wcm90b3R5cGUuc3VibWl0PWZ1bmN0aW9uKGIpe3RoaXMucHVzaChiKSYmYS5pbml0RVhURG9uZSYmdGhpcy5wcm9jZXNzUSgpfTtlLnByb3RvdHlwZS5wcm9jZXNzUT1mdW5jdGlvbigpe2Zvcih2YXIgYj0KdGhpcy5GaigpLGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIGY9YltoXTsiZnVuY3Rpb24iPT09dHlwZW9mIGEuY29tbWFuZHNbZlswXV0/KGEuaXNEZWJ1ZyYmYS5sb2coIk03IixmWzBdLGYuc2xpY2UoMSkuam9pbigiLCAiKSksYS5jb21tYW5kc1tmWzBdXS5hcHBseShhLGYuc2xpY2UoMSkpKTphLmVycm9yKCJNOCIsZlswXSl9fTtlLnByb3RvdHlwZS5qbD1mdW5jdGlvbihhKXtyZXR1cm4icmVwb3J0WGhyIj09PWF8fCJyZXBvcnRQYWdlRXJyb3IiPT09YX07ZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihiKXt2YXIgaD1iWzBdLGY9dGhpcy5qbChoKSxuPWY/dGhpcy5FZDp0aGlzLmxkO2lmKG4uVWIoKSlyZXR1cm4gYS5sb2coIk05IixmPyJzcG9udGFuZW91cyI6Im5vbiBzcG9udGFuZW91cyIsaCksITE7dGhpcy5LYi5wdXNoKGIpO24uRmsoKTtyZXR1cm4hMH07ZS5wcm90b3R5cGUuRmo9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktiO3RoaXMucmVzZXQoKTtyZXR1cm4gYX07ZS5wcm90b3R5cGUuc2l6ZT0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LYi5sZW5ndGh9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5LYj1bXTt0aGlzLkVkLnJlc2V0KCk7dGhpcy5sZC5yZXNldCgpfTtlLnByb3RvdHlwZS5pc1Nwb250YW5lb3VzUXVldWVEZWFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWQuVWIoKX07ZS5wcm90b3R5cGUuaXNOb25TcG9udGFuZW91c1F1ZXVlRGVhZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkLlViKCl9O3JldHVybiBlfSgpO2wud2k9MTAwO2wucGk9MTAwO2EuQ29tbWFuZEV4ZWN1dG9yPWx9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXthLnE9bmV3IGEuQ29tbWFuZEV4ZWN1dG9yO2EuY29tbWFuZD1mdW5jdGlvbihiKXtmb3IodmFyIGw9MTtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKTthLmlzRGVidWcmJmEubG9nKCJNMTAiLGIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5zbGljZSgxKS5qb2luKCIsICIpKTthLnEuc3VibWl0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfX0pKGt8fAooaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYSl7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dGhpcy5zdGF0dXM9e319YS5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt9O2EucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3RoaXMuc3RhdHVzW2FdPWJ9O3JldHVybiBhfSgpO2Eud2M9bH0pKGEubW9uaXRvcnx8KGEubW9uaXRvcj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWEudXRpbHMud2EsZT1hLnV0aWxzLmlzRGVmaW5lZDt3aW5kb3cuQURSVU0uYW9wPWI7Yi5zdXBwb3J0PWZ1bmN0aW9uKGEpe3JldHVybiFhfHwiYXBwbHkiaW4gYX07Yi5hcm91bmQ9ZnVuY3Rpb24oYyxoLGYsbixtKXthLmFzc2VydChiLnN1cHBvcnQoYyksIk0xMSIpO2M9Y3x8ZnVuY3Rpb24oKXt9O3JldHVybiBmdW5jdGlvbigpe2lmKGEuaXNEZWJ1Zyl0cnl7YS5sb2coIk0xMiIsbixsKGFyZ3VtZW50cykuam9pbigiLCAiKSl9Y2F0Y2goYil7YS5sb2coIk0xMyIsCmUoYi5zdGFjayl8fGIudG9TdHJpbmcoKSl9dmFyIHQ9bChhcmd1bWVudHMpLHA7dHJ5e2gmJihwPWguYXBwbHkodGhpcyx0KSl9Y2F0Y2gocil7YS5leGNlcHRpb24ociwiTTE0IixuLHIpfWEuYXNzZXJ0KCFwfHxhLnV0aWxzLmlzQXJyYXkocCkpO3ZhciBzPXZvaWQgMDt0cnl7cz1jLmFwcGx5KHRoaXMscHx8dCl9Y2F0Y2godyl7dGhyb3cgYS5sb2codywiTTE1IixuLHcpLG0/bSh3KTphLm1vbml0b3IuRXJyb3JNb25pdG9yLmwodyksdzt9ZmluYWxseXt0cnl7ZiYmKGUocykmJih0W3QubGVuZ3RoXT17bWc6c30pLGYuYXBwbHkodGhpcyx0KSl9Y2F0Y2goQSl7YS5leGNlcHRpb24oQSwiTTE2IixuLEEpfX1yZXR1cm4gc319O2IudWY9ZnVuY3Rpb24oYSl7YT1hW2EubGVuZ3RoLTFdO3ZhciBiO2UoYSkmJmUoYS5tZykmJihiPWEubWcpO3JldHVybiBifTtiLmJlZm9yZT1mdW5jdGlvbihhLGgsZil7cmV0dXJuIGIuYXJvdW5kKGEsaCxudWxsLGYpfTtiLmFmdGVyPWZ1bmN0aW9uKGEsCmgsZil7cmV0dXJuIGIuYXJvdW5kKGEsbnVsbCxoLGYpfTtiLmZvcmNlV3JhcD1mdW5jdGlvbihiKXt2YXIgaD1iLmN1c3RvbURlc2NyaXB0b3JDb25maWd8fHt9LGY9bnVsbCxuPWIucGFyZW50T2JqZWN0LG09Yi5wcm9wZXJ0eSxxPWIuc2V0VXBGdW5jLHQ9Yi53cmFwTmV3RnVuY3Rpb25BZ2Fpbnx8ITEscD1iLnByb3BlcnR5V3JhcHBlZEZ1bmN0aW9uTmFtZTtpZihuJiZtKXtmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixtKTtpZighZnx8Zi5jb25maWd1cmFibGUpe2Y/KGRlbGV0ZSBmLndyaXRhYmxlLGRlbGV0ZSBmLnZhbHVlKTpmPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH07dmFyIGw9Zi5zZXQscz1mLmdldDtmLnNldD1oLnNldHx8ZnVuY3Rpb24obSl7ITAhPT1tLnVzZWRCeUFnZW50JiYoZShsKSYmbChhcmd1bWVudHMpLGUoYi5MYSkmJiF0fHwhYS51dGlscy5pc0Z1bmN0aW9uKHEpfHxxKG0pKX07Zi5nZXQ9aC5nZXR8fGZ1bmN0aW9uKCl7dmFyIG09CnM/cygpOmEudXRpbHMucmVmc1twXTtlKGIuTGEpJiYobT1iLkxhKTtyZXR1cm4gbX19ZWxzZSBhLmxvZygiTTE3IixwKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixtLGYpfWVsc2UgYS5lcnJvcigiTTE4Iil9fSkoYS5hb3B8fChhLmFvcD17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7YT1hLkV2ZW50VHlwZXx8KGEuRXZlbnRUeXBlPXt9KTthW2EuUGFnZVZpZXc9MF09IlBhZ2VWaWV3IjthW2EuQWpheD0yXT0iQWpheCI7YVthLlZQYWdlVmlldz0zXT0iVlBhZ2VWaWV3IjthW2EuRXJyb3I9NF09IkVycm9yIjthW2EuSUZSQU1FPTFdPSJJRlJBTUUiO2FbYS5BQlNUUkFDVD0xMDBdPSJBQlNUUkFDVCI7YVthLkFEUlVNX1hIUj0xMDFdPSJBRFJVTV9YSFIiO2FbYS5OR19WSVJUVUFMX1BBR0U9MTAyXT0iTkdfVklSVFVBTF9QQUdFIn0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpe3ZhciBiPWEuZXZlbnRzfHwoYS5ldmVudHM9e30pO2IuVD17fTtiLlRbYS5FdmVudFR5cGUuQUJTVFJBQ1RdPQp7Z3VpZDoic3RyaW5nIix1cmw6InN0cmluZyIscGFyZW50R1VJRDoic3RyaW5nIixwYXJlbnRVcmw6InN0cmluZyIscGFyZW50VHlwZToibnVtYmVyIix0aW1lc3RhbXA6Im51bWJlciJ9O2IuVFthLkV2ZW50VHlwZS5WUGFnZVZpZXddPXtyZXNUaW1pbmc6Im9iamVjdCJ9O2IuVFthLkV2ZW50VHlwZS5OR19WSVJUVUFMX1BBR0VdPXtkaWdlc3RDb3VudDoibnVtYmVyIn07Yi5UW2EuRXZlbnRUeXBlLkFqYXhdPXttZXRob2Q6InN0cmluZyIscGFyZW50UGhhc2U6InN0cmluZyIscGFyZW50UGhhc2VJZDoibnVtYmVyIixlcnJvcjoib2JqZWN0IixwYXJhbWV0ZXI6Im9iamVjdCIseGhyU3RhdHVzOiJudW1iZXIiLGRhdGFPYmplY3Q6Im9iamVjdCJ9O2IuVFthLkV2ZW50VHlwZS5BRFJVTV9YSFJdPXthbGxSZXNwb25zZUhlYWRlcnM6InN0cmluZyJ9O2IuVFthLkV2ZW50VHlwZS5FcnJvcl09e21zZzoic3RyaW5nIixsaW5lOiJudW1iZXIiLHN0YWNrOiJzdHJpbmcifX0pKGt8fChrPXt9KSk7CihmdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt0aGlzLmZhPXt9fWEucHJvdG90eXBlLm1hcms9ZnVuY3Rpb24oYSxiKXtsLm1hcmsuYXBwbHkodGhpcyxhcmd1bWVudHMpfTthLnByb3RvdHlwZS5nZXRUaW1pbmc9ZnVuY3Rpb24oYSl7cmV0dXJuKGE9dGhpcy5nZXRFbnRyeUJ5TmFtZShhKSkmJmEuc3RhcnRUaW1lfTthLnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKGEsYixmKXtsLm1lYXN1cmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTthLnByb3RvdHlwZS5nZXRFbnRyeUJ5TmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gbC5nZXRFbnRyeUJ5TmFtZS5jYWxsKHRoaXMsYSl9O3JldHVybiBhfSgpO2IuSWM9ZnVuY3Rpb24oYSl7cmV0dXJuIGwuSWMoYSl9O2EuUGVyZm9ybWFuY2VUcmFja2VyPWI7dmFyIGw7KGZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMuaGFzT3duUHJvcGVydHlEZWZpbmVkLGg9YS51dGlscy5oYigpLGY9YS51dGlscy5ub3c7Yi5tYXJrPQpmdW5jdGlvbihiLGMpe3RoaXMuZmFbYl09e25hbWU6YixlbnRyeVR5cGU6Im1hcmsiLHN0YXJ0VGltZTphLnV0aWxzLmlzRGVmaW5lZChjKT9jOmYoKSxkdXJhdGlvbjowfX07Yi5tZWFzdXJlPWZ1bmN0aW9uKGIsbSxlKXtjKHRoaXMuZmEsbSkmJmModGhpcy5mYSxlKT90aGlzLmZhW2JdPXtuYW1lOmIsZW50cnlUeXBlOiJtZWFzdXJlIixzdGFydFRpbWU6bT90aGlzLmZhW21dLnN0YXJ0VGltZTpoLGR1cmF0aW9uOihlP3RoaXMuZmFbZV0uc3RhcnRUaW1lOmYoKSktKG0/dGhpcy5mYVttXS5zdGFydFRpbWU6aCl9OmEuZXJyb3IoIk0xOSIsYyh0aGlzLmZhLG0pP2U6bSl9O2IuZ2V0RW50cnlCeU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZmFbYV18fG51bGx9O2IuSWM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEraH19KShsfHwobD17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGwoYixjKXtiPWJ8fHt9O2Zvcih2YXIgbiBpbiBiKWNbbl09CmZ1bmN0aW9uKCl7dmFyIGM9bixmPWJbbl07cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBoPSJfIitjLG49dGhpc1toXTtpZihhLnV0aWxzLmlzRGVmaW5lZChiKSlpZih0eXBlb2YgYj09PWYpdGhpc1toXT1iO2Vsc2UgdGhyb3cgaD0id3JvbmcgdHlwZSBvZiAiK2MrIiB2YWx1ZSwgIit0eXBlb2YgYisiIHBhc3NlZCBpbiBidXQgc2hvdWxkIGJlIGEgIitmKyIuIixhLnJlcG9ydEFQSU1lc3NhZ2UoYS5WLldkLGgsIkFEUlVNLnJlcG9ydCIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSksVHlwZUVycm9yKGgpO3JldHVybiBufX0oKX1mdW5jdGlvbiBlKGEpe3ZhciBiPXt9LGM7Zm9yKGMgaW4gYSl7dmFyIG09YVtjXTtiW20uc3RhcnRdPSEwO2JbbS5lbmRdPSEwfXJldHVybiBifXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihjKXt0aGlzLnBlcmY9bmV3IGEuUGVyZm9ybWFuY2VUcmFja2VyOyJPYmplY3QiPT09dGhpcy5jb25zdHJ1Y3Rvci5uYW1lJiZhLnJlcG9ydEFQSU1lc3NhZ2UoYS5WLmxhLAphLldhKTt0aGlzLnRpbWVzdGFtcChhLnV0aWxzLm5vdygpKTt0aGlzLmd1aWQoYS51dGlscy5nZW5lcmF0ZUdVSUQoKSk7dGhpcy51cmwoZG9jdW1lbnQuVVJMKTt0aGlzLmtjKGMpfWIucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudFR5cGUuQUJTVFJBQ1R9O2IucHJvdG90eXBlLmtjPWZ1bmN0aW9uKGIpe2lmKGEudXRpbHMuaXNPYmplY3QoYikpZm9yKHZhciBjIGluIGIpe3ZhciBtPXRoaXNbY118fHRoaXNbIm1hcmsiK2EudXRpbHMuT2UoYyldO20mJmEudXRpbHMuaXNGdW5jdGlvbihtKSYmbS5jYWxsKHRoaXMsYltjXSl9fTtiLkRjPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm57Z3VpZDpmdW5jdGlvbigpe3JldHVybiBhfSx1cmw6ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdHlwZTpmdW5jdGlvbigpe3JldHVybiBjfX19O2IucHJvdG90eXBlLm5rPWZ1bmN0aW9uKCl7cmV0dXJuIGIuRGModGhpcy5wYXJlbnRHVUlEKCksdGhpcy5wYXJlbnRVcmwoKSx0aGlzLnBhcmVudFR5cGUoKSl9OwpiLnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5uaygpO2EudXRpbHMuaXNEZWZpbmVkKGIpJiYoYS51dGlscy5pc0Z1bmN0aW9uKGIuZ3VpZCkmJmEudXRpbHMuaXNGdW5jdGlvbihiLnVybCkmJmEudXRpbHMuaXNGdW5jdGlvbihiLnR5cGUpPyh0aGlzLnBhcmVudEdVSUQoYi5ndWlkKCkpLHRoaXMucGFyZW50VXJsKGIudXJsKCkpLHRoaXMucGFyZW50VHlwZShiLnR5cGUoKSkpOmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsIm9iamVjdCBpcyBub3QgYSB2YWxpZCBFdmVudElkZW50aWZpZXIiLCJFdmVudFRyYWNrZXIucGFyZW50IixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIGN9O3JldHVybiBifSgpO2IuRXZlbnRUcmFja2VyPWM7Yi5NYT1sO2IuSWU9ZnVuY3Rpb24oYixjKXtiPWJ8fHt9O3ZhciBuPWUoYiksbTtmb3IobSBpbiBuKW49YS51dGlscy5PZShtKSxjWyJtYXJrIituXT1hLnV0aWxzLm9nKGZ1bmN0aW9uKGEsCmIpe3RoaXMucGVyZi5tYXJrKGEsYil9LG0pLGNbImdldCIrbl09YS51dGlscy5vZyhmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wZXJmLmdldFRpbWluZyhhKX0sbSl9O2woYi5UW2EuRXZlbnRUeXBlLkFCU1RSQUNUXSxjLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhoKXtoPWIuY2FsbCh0aGlzLGgpfHx0aGlzO2guY29uc3RydWN0b3IhPWMmJmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLkVycm9yIixbXSk7cmV0dXJuIGh9dihjLGIpO2MucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudFR5cGUuRXJyb3J9O3JldHVybiBjfShiLkV2ZW50VHJhY2tlcik7Yi5FcnJvcj1sO2IuTWEoYi5UW2EuRXZlbnRUeXBlLkVycm9yXSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPQp7fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoKXt2YXIgaD1udWxsIT09YiYmYi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7aC5zbD1mdW5jdGlvbihiKXt2YXIgbj1iLm1lc3NhZ2UsbT1iLmZpbGVuYW1lLGU9Yi5saW5lbm8sdD1iLmNvbG5vO2I9Yi5lcnJvcjthLmxvZygiTTIwIik7aWYoYS51dGlscy5pc0RlZmluZWQoYil8fGMuWGIpYS5sb2coIk0yMSIpLGMuWGI9ITAsaC5IYShuLG0sZSx0LGIpfTtyZXR1cm4gaH12KGMsYik7Yy5sPWZ1bmN0aW9uKGIpe2EubW9uaXRvci5nYS5IYShiLm1lc3NhZ2V8fGIuZGVzY3JpcHRpb24sYi5maWxlTmFtZXx8Yi5maWxlbmFtZSxiLmxpbmVOdW1iZXIsYi5jb2x1bW5OdW1iZXIsYil9O2MucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcztiLnByb3RvdHlwZS5zZXRVcC5jYWxsKHRoaXMpO2EudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csCiJlcnJvciIsdGhpcy5zbCwhMCk7YS5saXN0ZW5Gb3JFcnJvcnM9ZnVuY3Rpb24oKXtjLldmKCl9O3RoaXMuV2YoKX07Yy5wcm90b3R5cGUuZW09ZnVuY3Rpb24oKXtjLlFjPTB9O2MucHJvdG90eXBlLkhhPWZ1bmN0aW9uKGIsZixuLG0sZSl7Yy5RYz49YS5jb25mLmxpP2EubG9nKCJNMjIiKToobT1hLnV0aWxzLnRyeUV4dHJhY3RpbmdFcnJvclN0YWNrKGUpLGEuY29tbWFuZCgicmVwb3J0UGFnZUVycm9yIixuZXcgYS5ldmVudHMuRXJyb3IoYS51dGlscy5tZXJnZUpTT04oe21zZzpiKyIiLHVybDphLnV0aWxzLmlzU3RyaW5nKGYpP2Y6dm9pZCAwLGxpbmU6YS51dGlscy5pc051bWJlcihuKT9uOnZvaWQgMCxzdGFjazptfSx0aGlzLnN0YXR1cykpKSxjLlFjKyssYy5oYWRFcnJvcnM9ITApfTtjLnByb3RvdHlwZS5XZj1mdW5jdGlvbigpe3ZhciBiPXRoaXM7Yy5YYj0hMTthLmFvcC5zdXBwb3J0KHdpbmRvdy5vbmVycm9yKT8od2luZG93Lm9uZXJyb3I9YS5hb3AuYXJvdW5kKHdpbmRvdy5vbmVycm9yLApmdW5jdGlvbihmLG4sbSxlLHQpe2MuWGI/YS5sb2coIk0yMyIpOmMuaGQ/YS5sb2coIk0yNSIpOihhLmxvZygiTTI0IiksYi5IYShmLG4sbSxlLHQpLGMuaGQ9ITApfSxmdW5jdGlvbigpe2EubG9nKCJNMjYiKTtjLmhkPSExfSwib25lcnJvciIpLGEubG9nKCJNMjciKSk6YS5sb2coIk0yOCIpfTtyZXR1cm4gY30oYi53Yyk7bC5oZD0hMTtsLlFjPTA7bC5oYWRFcnJvcnM9ITE7bC5YYj0hMTtiLkVycm9yTW9uaXRvcj1sO2IuZ2E9bmV3IGIuRXJyb3JNb25pdG9yfSkoYS5tb25pdG9yfHwoYS5tb25pdG9yPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS5sb2csZT1hLmFvcC5hZnRlcixjPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGYoKXtyZXR1cm4gbnVsbCE9PWMmJmMuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXYoZixjKTtmLnByb3RvdHlwZS5zZXRVcD1mdW5jdGlvbigpe2EudXRpbHMubWFwKFsiZXJyb3IiLCJleGNlcHRpb24iXSwKZnVuY3Rpb24oYil7dmFyIGM9eFtiXTthLnV0aWxzLmlzRnVuY3Rpb24oYykmJmEuYW9wLnN1cHBvcnQoYyk/KGwoIk0yOSIsYikseFtiXT1lKGMsZnVuY3Rpb24oYSl7bCgiTTMwIixiLGEpO2YuVGkoYSl9KSk6bCgiTTMxIixiKX0pO2IuZ2EuSGE9ZShiLmdhLkhhLGZ1bmN0aW9uKCl7MDxmLm9hLmxlbmd0aD8obCgiTTMyIiksZi5vYT1bXSk6bCgiTTMzIil9KX07Zi5UaT1mdW5jdGlvbihiKXtmLm9hLmxlbmd0aD49YS5jb25mLmZpP2woIk0zNCIpOmEudXRpbHMuaXNTdHJpbmcoYik/KGwoIk0zNSIsYiksZi5vYS5wdXNoKGIpLGEudXRpbHMub1NUTyhmLkNnKSk6YS51dGlscy5pc09iamVjdChiKT8oYj1hLnV0aWxzLnRvSlNPTlN0cmluZyhiKSxudWxsIT09Yj8obCgiTTM2IixiKSxmLm9hLnB1c2goYiksYS51dGlscy5vU1RPKGYuQ2cpKTphLmVycm9yKCJNMzciKSk6bCgiTTM4Iix0eXBlb2YgYil9O2YuQ2c9ZnVuY3Rpb24oKXswPGYub2EubGVuZ3RoPyhsKCJNMzkiKSxiLmdhLkhhKGYub2Euam9pbigiXG4iKSksCmYub2E9W10pOmwoIk00MCIpfTtyZXR1cm4gZn0oYi53Yyk7Yy5vYT1bXTtiLm5uPWM7Yi50aj1uZXcgY30pKGEubW9uaXRvcnx8KGEubW9uaXRvcj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYigpe31iLnNldFVwPWZ1bmN0aW9uKCl7Yi5wZXJmPWEudXRpbHMucmVmcy5rYTthLnV0aWxzLmlzT2JqZWN0KGIucGVyZikmJmEudXRpbHMuaXNPYmplY3QoYi5wZXJmLnRpbWluZyl8fChiLnBlcmY9dm9pZCAwKX07cmV0dXJuIGJ9KCk7bC5wZXJmPW51bGw7Yi5QZXJmb3JtYW5jZVdyYXBwZXI9bH0pKGEubW9uaXRvcnx8KGEubW9uaXRvcj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubmF2VGltaW5nPW51bGx9ZS5wcm90b3R5cGUuWGU9ZnVuY3Rpb24oKXt2YXIgYz1iLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmOwppZihjPWMmJmMudGltaW5nKWlmKGMubmF2aWdhdGlvblN0YXJ0JiZjLm5hdmlnYXRpb25TdGFydDw9Yy5sb2FkRXZlbnRFbmQpe3ZhciBoPXt9LGY7Zm9yKGYgaW4gYyl7dmFyIG49Y1tmXTsibnVtYmVyIj09PXR5cGVvZiBuJiYoaFtmXT1uKX10aGlzLm5hdlRpbWluZz1ofWVsc2UgYS5sb2coIk00MiIpO2Vsc2UgYS5sb2coIk00MSIpfTtlLnByb3RvdHlwZS5zZXRVcD1mdW5jdGlvbigpe2IuUGVyZm9ybWFuY2VXcmFwcGVyLnNldFVwKCl9O3JldHVybiBlfSgpO2IuTmF2VGltaW5nTW9uaXRvcj1sO2IubmF2TW9uaXRvcj1uZXcgYi5OYXZUaW1pbmdNb25pdG9yfSkoYS5tb25pdG9yfHwoYS5tb25pdG9yPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5zZD1udWxsO2IuUGVyZm9ybWFuY2VXcmFwcGVyLnNldFVwKCk7dGhpcy5yZXNvdXJjZUJ1ZmZlcj1bXTt0aGlzLmJhc2VQYWdlUmVzb3VyY2VCdWZmZXI9CltdO3RoaXMucWU9NTAwO3RoaXMuemM9MTUwO3RoaXMuRWk9M0UzO3RoaXMuc2V0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplKCk7dGhpcy5ybSgpfWUucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKCl7Yi5QZXJmb3JtYW5jZVdyYXBwZXIuc2V0VXAoKTthLnV0aWxzLmlzRGVmaW5lZChiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmKSYmYS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYuZ2V0RW50cmllc0J5VHlwZSk/YS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYuYWRkRXZlbnRMaXN0ZW5lcik/Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZi5hZGRFdmVudExpc3RlbmVyKCJyZXNvdXJjZXRpbWluZ2J1ZmZlcmZ1bGwiLHRoaXMuZmIuYmluZCh0aGlzKSk6Im9ucmVzb3VyY2V0aW1pbmdidWZmZXJmdWxsImluIGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmY/YS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYucmQpPwpiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmLnJkPWEuYW9wLmFyb3VuZChiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmLnJkLHRoaXMuZmIuYmluZCh0aGlzKSk6Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZi5yZD10aGlzLmZiLmJpbmQodGhpcyk6YS51dGlscy5yZWZzLnNldEludGVydmFsLmNhbGwod2luZG93LHRoaXMuaG0uYmluZCh0aGlzKSx0aGlzLkVpKTphLmxvZygiTTQzIik7dGhpcy52bSgpO3RoaXMuaW0oKX07ZS5wcm90b3R5cGUudm09ZnVuY3Rpb24oKXt2YXIgYz1hLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5yZXNUaW1pbmcmJmEuY29uZi51c2VyQ29uZi5yZXNUaW1pbmcuYnVmU2l6ZTthLnV0aWxzLmlzRGVmaW5lZChiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmKSYmYS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYuc2V0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplKSYmYS51dGlscy5pc051bWJlcihjKSYmMDxjJiYodGhpcy56Yz0KYyl9O2UucHJvdG90eXBlLmltPWZ1bmN0aW9uKCl7dmFyIGM9Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZjthLnV0aWxzLmlzRGVmaW5lZChjKSYmKGEudXRpbHMuaXNGdW5jdGlvbihjLnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZSkmJihjLnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZT1hLmFvcC5hcm91bmQoYy5zZXRSZXNvdXJjZVRpbWluZ0J1ZmZlclNpemUsZnVuY3Rpb24oKXthLnV0aWxzLmlzRGVmaW5lZChhcmd1bWVudHMpJiZhLnV0aWxzLmlzRGVmaW5lZChhcmd1bWVudHNbMF0pJiYodGhpcy56Yz1hcmd1bWVudHNbMF0pfS5iaW5kKHRoaXMpKSksYS51dGlscy5pc0Z1bmN0aW9uKGMuY2xlYXJSZXNvdXJjZVRpbWluZ3MpJiYoYy5jbGVhclJlc291cmNlVGltaW5ncz1hLmFvcC5hcm91bmQoYy5jbGVhclJlc291cmNlVGltaW5ncyxmdW5jdGlvbigpe3RoaXMuZmIoKX0uYmluZCh0aGlzKSkpKX07ZS5wcm90b3R5cGUuV2U9ZnVuY3Rpb24oKXt0aGlzLmJhc2VQYWdlUmVzb3VyY2VCdWZmZXI9CnRoaXMubWYoKX07ZS5wcm90b3R5cGUuZmI9ZnVuY3Rpb24oKXt0aGlzLnJlc291cmNlQnVmZmVyPXRoaXMubWYoKX07ZS5wcm90b3R5cGUuaG09ZnVuY3Rpb24oKXt0aGlzLmpiKCkubGVuZ3RoPj10aGlzLnpjJiZ0aGlzLmZiKCl9O2UucHJvdG90eXBlLmpiPWZ1bmN0aW9uKCl7dmFyIGM9Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZixoPVtdO2MmJmMuZ2V0RW50cmllc0J5VHlwZSYmKGM9Yy5nZXRFbnRyaWVzQnlUeXBlKCJyZXNvdXJjZSIpKSYmYy5sZW5ndGgmJjA8Yy5sZW5ndGgmJmMudW5zaGlmdCYmKGg9Yyk7MD09aC5sZW5ndGgmJmEubG9nKCJNNDQiKTtyZXR1cm4gaH07ZS5wcm90b3R5cGUucms9ZnVuY3Rpb24oYixoKXtyZXR1cm4gYS51dGlscy5maWx0ZXIodGhpcy5yZXNvdXJjZUJ1ZmZlcixmdW5jdGlvbihhKXtyZXR1cm4gYithLnN0YXJ0VGltZT49aH0pfTtlLnByb3RvdHlwZS5zaz1mdW5jdGlvbihhLGIpe3RoaXMucmVzb3VyY2VCdWZmZXI9dGhpcy5yZXNvdXJjZUJ1ZmZlci5jb25jYXQodGhpcy5qYigpKTsKdmFyIGY9dGhpcy5yayhhLGIpO3RoaXMuY2xlYXJSZXNvdXJjZVRpbWluZ3MoKTt0aGlzLnJlc291cmNlQnVmZmVyPVtdO3JldHVybiBmfTtlLnByb3RvdHlwZS5ybT1mdW5jdGlvbigpe3ZhciBjPWIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmY7YS51dGlscy5pc0RlZmluZWQoYykmJmEudXRpbHMuaXNGdW5jdGlvbihjLmNsZWFyUmVzb3VyY2VUaW1pbmdzKSYmKHRoaXMuc2Q9Yy5jbGVhclJlc291cmNlVGltaW5ncy5iaW5kKGMpKX07ZS5wcm90b3R5cGUuc2V0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIGM9Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZixoPWEuY29uZi51c2VyQ29uZiYmYS5jb25mLnVzZXJDb25mLnJlc1RpbWluZyYmYS5jb25mLnVzZXJDb25mLnJlc1RpbWluZy5idWZTaXplOyFhLnV0aWxzLmlzTnVtYmVyKGgpfHwwPj1oP2EubG9nKCJNNDUiKTpjJiZhLnV0aWxzLmlzRnVuY3Rpb24oYy5zZXRSZXNvdXJjZVRpbWluZ0J1ZmZlclNpemUpPwpjLnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZShoKTphLmxvZygiTTQ2Iil9O2UucHJvdG90eXBlLm1mPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5qYigpO2lmKHRoaXMucmVzb3VyY2VCdWZmZXIubGVuZ3RoK2IubGVuZ3RoPnRoaXMucWUpcmV0dXJuIGEubG9nKCJNNDciKSx0aGlzLnJlc291cmNlQnVmZmVyLmNvbmNhdChiLnNsaWNlKDAsdGhpcy5xZS10aGlzLnJlc291cmNlQnVmZmVyLmxlbmd0aCkpO3RoaXMuY2xlYXJSZXNvdXJjZVRpbWluZ3MoKTtyZXR1cm4gdGhpcy5yZXNvdXJjZUJ1ZmZlci5jb25jYXQoYil9O2UucHJvdG90eXBlLmNsZWFyUmVzb3VyY2VUaW1pbmdzPWZ1bmN0aW9uKCl7YS5jb25mLmNsZWFyUmVzVGltaW5nJiZhLnV0aWxzLmlzRnVuY3Rpb24odGhpcy5zZCkmJnRoaXMuc2QoKX07cmV0dXJuIGV9KCk7Yi5SZXNvdXJjZU1vbml0b3I9bDtiLnJlc291cmNlTW9uaXRvcj1uZXcgYi5SZXNvdXJjZU1vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fAooaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbChhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGUoYSl7cmV0dXJuInZpZGVvIj09bChhKX1mdW5jdGlvbiBjKGEpe3JldHVybiJpbWFnZSI9PWwoYSl9ZnVuY3Rpb24gaChhKXtyZXR1cm4ic3ZnIj09bChhKX1mdW5jdGlvbiBmKGEpe3JldHVybiAwPT09YS5sYXN0SW5kZXhPZigidmlkZW8vIiwwKXx8MD09PWEubGFzdEluZGV4T2YoImltYWdlLyIsMCl8fDA9PT1hLmxhc3RJbmRleE9mKCJmb250LyIsMCl8fDA9PT1hLmxhc3RJbmRleE9mKCJtb2RlbC8iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidGV4dC8iLDApfWZ1bmN0aW9uIG4oYSl7cmV0dXJuImVtYmVkIj09bChhKSYmZihhLnR5cGUpfWZ1bmN0aW9uIG0oYSl7cmV0dXJuIm9iamVjdCI9PWwoYSkmJmYoYS50eXBlKX1mdW5jdGlvbiBxKGEpe3JldHVybiJpbWciPT1sKGEpfWEuams9bDthLlNmPWU7YS5abj1jO2EuWW49Cmg7YS5LZj1mdW5jdGlvbihhKXtyZXR1cm4iY2FudmFzIj09bChhKX07YS5RZj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIFRleHR9O2EuV249ZjthLm9mPWZ1bmN0aW9uKGEpe3JldHVybihhLnJpZ2h0LWEubGVmdCkqKGEuYm90dG9tLWEudG9wKX07YS5Wbj1uO2EuWG49bTthLlVuPXE7YS5uYj1mdW5jdGlvbihhKXtyZXR1cm4gcShhKXx8bShhKXx8bihhKXx8ZShhKXx8YyhhKXx8aChhKX07YS5vYj1mdW5jdGlvbihhKXthPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEpO3JldHVybiJub25lIiE9PWEuZ2V0UHJvcGVydHlWYWx1ZSgiZGlzcGxheSIpJiYiaGlkZGVuIiE9PWEuZ2V0UHJvcGVydHlWYWx1ZSgidmlzaWJpbGl0eSIpfTthLlFiPWZ1bmN0aW9uKGEpe3ZhciBiPSIiO2EgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2I9YS5jdXJyZW50U3JjfHxhLnNyYzphIGluc3RhbmNlb2YgSFRNTEVtYmVkRWxlbWVudD9iPWEuc3JjOmEgaW5zdGFuY2VvZiBIVE1MT2JqZWN0RWxlbWVudD8KYj1hLmRhdGE6InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MVmlkZW9FbGVtZW50JiZhIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudD9iPWEuY3VycmVudFNyY3x8YS5zcmM6YSBpbnN0YW5jZW9mIFNWR0ltYWdlRWxlbWVudCYmKGI9YS5ocmVmLmJhc2VWYWwpO3JldHVybiBifTthLlBuPWZ1bmN0aW9uKGEpe3ZhciBiPSIiO2EgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2I9ImltZyI6YSBpbnN0YW5jZW9mIEhUTUxFbWJlZEVsZW1lbnQ/Yj0iZW1iZWQiOmEgaW5zdGFuY2VvZiBIVE1MT2JqZWN0RWxlbWVudD9iPSJvYmplY3QiOiJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTFZpZGVvRWxlbWVudCYmYSBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQ/Yj0idmlkZW8iOmEgaW5zdGFuY2VvZiBTVkdJbWFnZUVsZW1lbnQmJihiPSJpbWFnZSIpO3JldHVybiBifTthLlhjPWZ1bmN0aW9uKGMpe3JldHVybiBhLmlzRGVmaW5lZChjLmF0dHJpYnV0ZXMpP2MuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oInNyYyIpfHwKYy5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiaHJlZiIpOnZvaWQgMH19KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dGhpcy5Waz0wLjI7dGhpcy5VYT0wO3RoaXMubGI9ITE7dGhpcy56YT1hLmNvbmYuc3BhMjt0aGlzLnFjPXRoaXMuc2M9dGhpcy5nPXRoaXMuYmE9dGhpcy54YT0wO3RoaXMudmlld3BvcnQ9e3RvcDowLGxlZnQ6MCxib3R0b206dGhpcy5xYyxyaWdodDp0aGlzLnNjfTt0aGlzLlNhPTB9Yi5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt0aGlzLlI9e307dGhpcy5jYz17fTt0aGlzLmJhPWEudXRpbHMubm93KCk7dGhpcy5nPTA7dmFyIGI9d2luZG93Lk11dGF0aW9uT2JzZXJ2ZXI7dGhpcy5UZSgpO2EudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csInJlc2l6ZSIsYS51dGlscy55aih0aGlzLlRlKS5iaW5kKHRoaXMpKTthLnV0aWxzLmlzRGVmaW5lZChiKSYmCihhLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuWm9uZSkmJmEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5ab25lLl9fc3ltYm9sX18oIk11dGF0aW9uT2JzZXJ2ZXIiKSk/dGhpcy4kYj1uZXcgKHdpbmRvd1t3aW5kb3cuWm9uZS5fX3N5bWJvbF9fKCJNdXRhdGlvbk9ic2VydmVyIildKSh0aGlzLmlnLmJpbmQodGhpcykpOnRoaXMuJGI9bmV3IGIodGhpcy5pZy5iaW5kKHRoaXMpKSx0aGlzLiRiLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMCxhdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbInNyYyIsImhyZWYiXX0pLGEubG9nKCJNNDgiKSl9O2IucHJvdG90eXBlLmlnPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7YS5QKCk7Yi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3N3aXRjaChhLnR5cGUpe2Nhc2UgImNoaWxkTGlzdCI6W10uc2xpY2UuY2FsbChhLmFkZGVkTm9kZXMpLmZvckVhY2goZnVuY3Rpb24oYSl7Yy5MZShhKX0pO2JyZWFrOwpjYXNlICJhdHRyaWJ1dGVzIjpjLkxlKGEudGFyZ2V0KX19KTthLlEoKX07Yi5wcm90b3R5cGUuVGU9ZnVuY3Rpb24oKXt0aGlzLnNjPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5pbm5lcldpZHRoKSYmYS51dGlscy5pc0RlZmluZWQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKT9NYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpOndpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGh8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0uY2xpZW50V2lkdGg7dGhpcy5xYz1hLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuaW5uZXJIZWlnaHQpJiZhLnV0aWxzLmlzRGVmaW5lZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KT9NYXRoLm1pbih3aW5kb3cuaW5uZXJIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk6CndpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5jbGllbnRIZWlnaHQ7YS5sb2coIk00OSIsdGhpcy5zYyx0aGlzLnFjKTt0aGlzLnZpZXdwb3J0PXt0b3A6MCxsZWZ0OjAsYm90dG9tOnRoaXMucWMscmlnaHQ6dGhpcy5zY319O2IucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7YS5QKCk7dGhpcy5zZXRVcCgpO2EuUSgpO2EubG9nKCJNNTAiKX07Yi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLlI9e307dGhpcy5VYT0wO3RoaXMuY2M9e307dGhpcy5TYT0wO2EubG9nKCJNNTEiKX07Yi5wcm90b3R5cGUuTGU9ZnVuY3Rpb24oYil7YS5QKCk7dmFyIGM9YS51dGlscy5ub3coKTthLnV0aWxzLm5iKGIpJiYhYi5pc0FkcnVtVHJhY2tlZE5vZGU/KHRoaXMubGJ8fCh0aGlzLks9dGhpcy5LLmJpbmQodGhpcyksdGhpcy5sPXRoaXMubC5iaW5kKHRoaXMpLAp0aGlzLksuST0hMCx0aGlzLmxiPXRoaXMubC5JPSEwKSx0aGlzLmcrKyxhLmxvZygiTTUyIix0aGlzLmcpLGM9YS51dGlscy5YYyhiKSxjPWEudXRpbHMuaXNEZWZpbmVkKGMpP2MudmFsdWU6bnVsbCxhLnV0aWxzLlNmKGIpPyhiLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZGRhdGEiLHRoaXMuSyksYS5sb2coIk01MyIsYykpOihiLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHRoaXMuSyksYS5sb2coIk01NCIsYykpLGIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHRoaXMubCksYi5pc0FkcnVtVHJhY2tlZE5vZGU9ITApOmEudXRpbHMuS2YoYikmJiFiLmFkcnVtTm9kZUlkPyhhLmxvZygiTTU1IiksdGhpcy5JYihiLGMpKTphLnV0aWxzLlFmKGIpJiYodGhpcy5VYT1NYXRoLm1heCh0aGlzLlVhLGMpKTthLlEoKX07Yi5wcm90b3R5cGUuSz1mdW5jdGlvbihiKXthLlAoKTt2YXIgYz1hLnV0aWxzLm5vdygpO3RoaXMuYmE9YztiPWIudGFyZ2V0O3ZhciBoPWEudXRpbHMuUWIoYik7YS51dGlscy5pc0RlZmluZWQoaCkmJgowPGgubGVuZ3RoPyJkYXRhOiIhPWguc3Vic3RyaW5nKDAsNSl8fGIuYWRydW1Ob2RlSWQ/dGhpcy5WaShoLGMsYik6KGEubG9nKCJNNTYiKSx0aGlzLkliKGIsYykpOmIgaW5zdGFuY2VvZiBTVkdFbGVtZW50JiYhYi5hZHJ1bU5vZGVJZCYmKGEubG9nKCJNNTciKSx0aGlzLkliKGIsYykpO2ImJmIuaXNBZHJ1bVRyYWNrZWROb2RlJiYodGhpcy50YihiKSx0aGlzLmctLSxhLmxvZygiTTU4Iix0aGlzLmcpKTthLlEoKX07Yi5wcm90b3R5cGUubD1mdW5jdGlvbihiKXt2YXIgYz1iLnRhcmdldDtjJiZjLmlzQWRydW1UcmFja2VkTm9kZSYmKHRoaXMudGIoYyksdGhpcy5nLS0sYj1hLnV0aWxzLlFiKGIudGFyZ2V0KSxhLmxvZygiTTU5IixiKSl9O2IucHJvdG90eXBlLnRiPWZ1bmN0aW9uKGEpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsdGhpcy5LKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIix0aGlzLmwpfTtiLnByb3RvdHlwZS5TYj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tYihiKSYmCmEudXRpbHMub2IoYil9O2IucHJvdG90eXBlLlZpPWZ1bmN0aW9uKGIsYyxoKXthLnV0aWxzLmlzRGVmaW5lZCh0aGlzLlJbYl0pP3RoaXMuU2IoaCkmJih0aGlzLlJbYl09YyxhLmxvZygiTTYwIixiLGMpKToodGhpcy5SW2JdPWMsYS5sb2coIk02MSIsYixjKSl9O2IucHJvdG90eXBlLkliPWZ1bmN0aW9uKGIsYyl7YS5sb2coIk02MiIsdGhpcy5TYSxjLGIub3V0ZXJIVE1MKTtiLmFkcnVtTm9kZUlkPXRoaXMuU2E7dGhpcy5jY1t0aGlzLlNhXT1jO3RoaXMuU2ErPTF9O2IucHJvdG90eXBlLlVlPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7YS5qLkViLkZhJiYodGhpcy54YT1iKTt2YXIgaD0wLGY9MCxuPXRoaXMucGsodGhpcy54YSk7YS5sb2coIk02MyIsbik7W10uc2xpY2UuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKS5mb3JFYWNoKGZ1bmN0aW9uKG0pe3ZhciB0PWEudXRpbHMuUWIobSk7ZGVsZXRlIG0uaXNBZHJ1bVRyYWNrZWROb2RlO2lmKGEudXRpbHMuaXNEZWZpbmVkKHQpJiYKMDx0Lmxlbmd0aClpZihhLmxvZygiTTY0Iix0KSxhLnV0aWxzLmlzRGVmaW5lZChjLlJbdF0pKXt2YXIgcD1jLlJbdF07YS5sb2coIk02NSIsdCxwKTthLnV0aWxzLm9iKG0pJiYoYS5sb2coIk02NiIsdCxwKSxjLnphJiYoYS5sb2coIk02NyIsZixwLGIpLGY9TWF0aC5tYXgoZixwLWIpLGEubG9nKCJNNjgiLHQsZikpLGMubWIobSkmJihhLmxvZygiTTY5IixoLHAsYiksaD1NYXRoLm1heChoLHAtYiksYS5sb2coIk03MCIsdCxoKSkpfWVsc2V7aWYoYS51dGlscy5uYihtKSYmYS51dGlscy5vYihtKSYmKHA9Yy52Zih0KSxhLnV0aWxzLmlzRGVmaW5lZChwKSkpe3ZhciBsPXAuc3RhcnRUaW1lLShiLWMueGEpLHM9cC5kdXJhdGlvbipuK2w7YS5sb2coIk03MSIsdCxzKTthLmxvZygiTTcyIixwLmR1cmF0aW9uLGwpO2MuemEmJihmPU1hdGgubWF4KGYscyksYS5sb2coIk03MyIsdCxmKSk7Yy5tYihtKSYmKGg9TWF0aC5tYXgoaCxzKSxhLmxvZygiTTc0Iix0LGgpKX19ZWxzZSBhLnV0aWxzLmlzRGVmaW5lZChtLmFkcnVtTm9kZUlkKSYmCihhLnV0aWxzLmlzRGVmaW5lZChjLmNjW20uYWRydW1Ob2RlSWRdKSYmKHA9Yy5jY1ttLmFkcnVtTm9kZUlkXSxhLnV0aWxzLm9iKG0pJiYoYy56YSYmKGY9TWF0aC5tYXgoZixwLWIpLGEubG9nKCJNNzUiLG0uYWRydW1Ob2RlSWQscCkpLGMubWIobSkmJihoPU1hdGgubWF4KGgscC1iKSxhLmxvZygiTTc2IixtLmFkcnVtTm9kZUlkLHApKSkpLGRlbGV0ZSBtLmFkcnVtTm9kZUlkKX0pO2EubG9nKCJNNzciLGgsZik7dGhpcy5ZaigpLmZvckVhY2goZnVuY3Rpb24obSl7dmFyIHQ9bS51cmw7bT1tLlNiO3ZhciBwPWMudmYodCk7YS51dGlscy5pc0RlZmluZWQocCkmJihwPXAuZHVyYXRpb24qbisocC5zdGFydFRpbWUtKGItYy54YSkpLGMuemEmJihhLmxvZygiTTc4Iix0LHApLGY9TWF0aC5tYXgoZixwKSksbSYmKGEubG9nKCJNNzkiLHQscCksaD1NYXRoLm1heChoLHApKSl9KTtpZighYS5jb25mLmRpc2FibGVUZXh0Rm9yVGVzdGluZyl7dmFyIG09dGhpcy5VYS1iOzA9PWgmJihhLmxvZygiTTgwIiksCmg9TWF0aC5tYXgoaCxtKSk7dGhpcy56YSYmMD09ZiYmKGEubG9nKCJNODEiKSxmPU1hdGgubWF4KGYsbSkpfWh8PTA7Znw9MDthLmxvZygiTTgyIixiLHRoaXMueGEpO2EubG9nKCJNODMiLHdpbmRvdy5sb2NhdGlvbi5ocmVmKTthLmxvZygiTTg0IixoLGYpO2EuaXNEZWJ1ZyYmKHgubG9nKCJ1cmwgPSAiK3dpbmRvdy5sb2NhdGlvbi5ocmVmKSx4LmxvZygicmVuZGVyUmF0aW8gPSAiK24pLHgubG9nKCJ2aXN1YWxseUNvbXBsZXRlVGltZSA9ICIraCkseC5sb2coInBhZ2VDb21wbGV0ZVRpbWUgPSAiK2YpKTtyZXR1cm57dmN0OmgscGN0OmZ9fTtiLnByb3RvdHlwZS5raz1mdW5jdGlvbihhKXthPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5LGg9YS50b3ArKHdpbmRvdy5wYWdlWU9mZnNldHx8Yi5zY3JvbGxUb3ApLShiLmNsaWVudFRvcHx8MCksYj1hLmxlZnQrKHdpbmRvdy5wYWdlWE9mZnNldHx8Yi5zY3JvbGxMZWZ0KS0KKGIuY2xpZW50TGVmdHx8MCk7cmV0dXJue3RvcDpNYXRoLnJvdW5kKGgpLGxlZnQ6TWF0aC5yb3VuZChiKSxib3R0b206TWF0aC5yb3VuZChoKSthLmhlaWdodCxyaWdodDpNYXRoLnJvdW5kKGIpK2Eud2lkdGh9fTtiLnByb3RvdHlwZS5tYj1mdW5jdGlvbihiKXtiPXRoaXMua2soYik7aWYodGhpcy5ZayhiKSlyZXR1cm4gYS5sb2coIk04NSIpLCExO3ZhciBjPXt0b3A6TWF0aC5tYXgodGhpcy52aWV3cG9ydC50b3AsYi50b3ApLGxlZnQ6TWF0aC5tYXgodGhpcy52aWV3cG9ydC5sZWZ0LGIubGVmdCksYm90dG9tOk1hdGgubWluKHRoaXMudmlld3BvcnQuYm90dG9tLGIuYm90dG9tKSxyaWdodDpNYXRoLm1pbih0aGlzLnZpZXdwb3J0LnJpZ2h0LGIucmlnaHQpfSxjPWEudXRpbHMub2YoYyk7Yj1hLnV0aWxzLm9mKGIpO2lmKDAhPWImJmMvYj49dGhpcy5WaylyZXR1cm4hMDthLmxvZygiTTg2Iik7cmV0dXJuITF9O2IucHJvdG90eXBlLllrPWZ1bmN0aW9uKGEpe3JldHVybiBhLnRvcD4KdGhpcy52aWV3cG9ydC5ib3R0b218fGEuYm90dG9tPHRoaXMudmlld3BvcnQudG9wfHxhLnJpZ2h0PHRoaXMudmlld3BvcnQubGVmdHx8YS5sZWZ0PnRoaXMudmlld3BvcnQucmlnaHQ/ITA6ITF9O2IucHJvdG90eXBlLkRqPWZ1bmN0aW9uKCl7YS51dGlscy5pc0RlZmluZWQodGhpcy4kYikmJnRoaXMuJGIuZGlzY29ubmVjdCgpO2EubG9nKCJNODciKX07Yi5wcm90b3R5cGUucGs9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcyxoPTAsZj0wO3RoaXMueGYoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBtPW4ubmFtZTtpZihhLnV0aWxzLmlzRGVmaW5lZChjLlJbbV0pKXt2YXIgcT1jLlJbbV0tYi1uLnN0YXJ0VGltZSx0PW4uZHVyYXRpb247YS5sb2coIk04OCIsbSxiLG4uc3RhcnRUaW1lLGMuUlttXSx0KTt0JiYwPHEmJihoKz1xL3QsZisrKX19KTtyZXR1cm4gMDxmP2gvZjoxfTtiLnByb3RvdHlwZS5Zaj1mdW5jdGlvbigpe3ZhciBiPXRoaXMsYz1bXTtbXS5zbGljZS5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLmZvckVhY2goZnVuY3Rpb24oaCl7aWYoYS51dGlscy5vYihoKSl7dmFyIGY9CmIuWGooaCk7ZiYmKGIubWIoaCk/Yy5wdXNoKHt1cmw6ZixTYjohMH0pOmIuemEmJmMucHVzaCh7dXJsOmYsU2I6ITF9KSl9fSk7cmV0dXJuIGN9O2IucHJvdG90eXBlLlhqPWZ1bmN0aW9uKGIpe2lmKGImJmIuc3R5bGUpe3ZhciBjPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGIpLmdldFByb3BlcnR5VmFsdWUoImJhY2tncm91bmQtaW1hZ2UiKTtjfHwoYz0oYi5jdXJyZW50U3R5bGV8fGIuc3R5bGUpLmJhY2tncm91bmRJbWFnZSk7Yj10aGlzLnVrKGMpO3JldHVybiBhLnV0aWxzLmlzRGVmaW5lZChiKSYmYS51dGlscy5pc0RlZmluZWQoYi5zdWJzdHIpJiYidW5kZWZpbmVkIj09PWIuc3Vic3RyKGIubGFzdEluZGV4T2YoIi8iKSsxKT92b2lkIDA6Yn19O2IucHJvdG90eXBlLnVrPWZ1bmN0aW9uKGEpe2lmKGEmJmEubWF0Y2goInVybCIpKXJldHVybiBhLnJlcGxhY2UoJ3VybCgiJywiIikucmVwbGFjZSgnIiknLCIiKX07Yi5wcm90b3R5cGUudmY9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPQowLGg9dGhpcy54ZigpO2M8aC5sZW5ndGg7YysrKXt2YXIgZj1oW2NdO2lmKGEudXRpbHMuaXNEZWZpbmVkKGYubmFtZSkmJjA8PWYubmFtZS5pbmRleE9mKGIpKXJldHVybiBmfX07Yi5wcm90b3R5cGUueGY9ZnVuY3Rpb24oKXtyZXR1cm4gYS5qLkViLkZhP2EubW9uaXRvci5yZXNvdXJjZU1vbml0b3IuYmFzZVBhZ2VSZXNvdXJjZUJ1ZmZlcjphLm1vbml0b3IucmVzb3VyY2VNb25pdG9yLnJlc291cmNlQnVmZmVyLmNvbmNhdChhLm1vbml0b3IucmVzb3VyY2VNb25pdG9yLmpiKCkpfTtyZXR1cm4gYn0oKTthLnZuPWI7YS5OPW5ldyBifSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubGI9ITE7dGhpcy5MYz01RTM7dGhpcy5wYj1hLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZSYmYS5jb25mLnVzZXJDb25mLm5hdkNvbXBsZXRlLm1heFJlc291cmNlUXVpZXRUaW1lP2EuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZS5tYXhSZXNvdXJjZVF1aWV0VGltZToKdGhpcy5MY31lLnByb3RvdHlwZS5TZz1mdW5jdGlvbigpe2EuUCgpO3RoaXMua2IoRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIsdGhpcy51Zy5iaW5kKHRoaXMpKTt0aGlzLmtiKEhUTUxFbGVtZW50LnByb3RvdHlwZSwiaW5uZXJIVE1MIix0aGlzLnVnLmJpbmQodGhpcykpO3RoaXMua2IoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsInNyYyIsdGhpcy5xYi5iaW5kKHRoaXMpKTt0aGlzLmtiKEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSwic3JjIix0aGlzLnFiLmJpbmQodGhpcykpO3RoaXMua2IoSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZSwiaHJlZiIsdGhpcy5xYi5iaW5kKHRoaXMpKTt0aGlzLk1rKCk7dGhpcy5lZCgiYXBwZW5kIik7dGhpcy5lZCgiYXBwZW5kQ2hpbGQiKTt0aGlzLmVkKCJpbnNlcnRCZWZvcmUiKTthLlEoKX07ZS5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oYil7YS5QKCk7dGhpcy5tZD10aGlzLmc9MDt0aGlzLmJhPWI7dGhpcy5wYT10aGlzLkI9CiExO3RoaXMuYmM9e307dGhpcy5SPXt9O3RoaXMucGQ9e307YS5RKCl9O2UucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGIpe3RoaXMuc2V0VXAoYik7dGhpcy5wYT0hMDthLmxvZygiTTg5Iil9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5CPSExO3RoaXMuZz0wO3RoaXMucGE9ITE7dGhpcy5SPXt9O3RoaXMucGQ9e307YS5sb2coIk05MCIpfTtlLnByb3RvdHlwZS5rYj1mdW5jdGlvbihhLGIsZil7dGhpcy5MbChhLGIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGIpLGYpfTtlLnByb3RvdHlwZS5MbD1mdW5jdGlvbihiLGgsZixuKXtpZihhLnV0aWxzLmlzRGVmaW5lZChmKSYmYS51dGlscy5pc0RlZmluZWQoZi5zZXQpJiYhYS51dGlscy5pc0RlZmluZWQoZi5JKSl7dmFyIG09dGhpcztPYmplY3QuZGVmaW5lUHJvcGVydHkoYixoLHtzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7dHJ5e2I9Zi5zZXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKGMpe3Rocm93IGM7Cn1maW5hbGx5e24uY2FsbChtLHRoaXMpfXJldHVybiBifX0pfX07ZS5wcm90b3R5cGUucWI9ZnVuY3Rpb24oYil7YS5QKCk7dGhpcy5MZChiKTthLlEoKX07ZS5wcm90b3R5cGUuTWs9ZnVuY3Rpb24oKXt2YXIgYj1FbGVtZW50LnByb3RvdHlwZSxoPXRoaXM7YS51dGlscy5pc0RlZmluZWQoYi5zZXRBdHRyaWJ1dGUpJiYoYi5zZXRBdHRyaWJ1dGU9YS5hb3AuYXJvdW5kKGIuc2V0QXR0cmlidXRlLG51bGwsZnVuY3Rpb24oKXt2YXIgYT1kKGFyZ3VtZW50cyk7InNyYyIhPWFbMF0mJiJocmVmIiE9YVswXXx8aC5xYi5jYWxsKGgsdGhpcyl9KSl9O2UucHJvdG90eXBlLmVkPWZ1bmN0aW9uKGIpe3ZhciBoPUVsZW1lbnQucHJvdG90eXBlLGY9dGhpczthLnV0aWxzLmlzRGVmaW5lZChoW2JdKSYmKGhbYl09YS5hb3AuYXJvdW5kKGhbYl0sbnVsbCxmdW5jdGlvbigpezA8YXJndW1lbnRzLmxlbmd0aCYmZi5xYi5jYWxsKGYsYXJndW1lbnRzWzBdKX0pKX07ZS5wcm90b3R5cGUudWc9ZnVuY3Rpb24oYil7YS5QKCk7CnRoaXMucGEmJmEudXRpbHMuaXNEZWZpbmVkKGIpJiZhLnV0aWxzLmlzRGVmaW5lZChiLmNoaWxkTm9kZXMpJiYodGhpcy5MZChiKSx0aGlzLmRoKGIuY2hpbGROb2RlcykpO2EuUSgpfTtlLnByb3RvdHlwZS5kaD1mdW5jdGlvbihiKXtmb3IodmFyIGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIGY9YltoXTsic2NyaXB0IiE9YS51dGlscy5qayhmKSYmdGhpcy5MZChmKTt0aGlzLmRoKGYuY2hpbGROb2Rlcyl9fTtlLnByb3RvdHlwZS5MZD1mdW5jdGlvbihiKXthLm1vbml0b3IuQW55U3BhTW9uaXRvci5jZCgpfHwodGhpcy5XayhiKT90aGlzLmZqKGIpOmEuY29uZi5lbmFibGVQcmltYXJ5TWV0cmljcyYmdGhpcy5naihiKSl9O2UucHJvdG90eXBlLmZqPWZ1bmN0aW9uKGIpe3ZhciBoPWEudXRpbHMuWGMoYik7YS51dGlscy5pc0RlZmluZWQoaCkmJihoPWgudmFsdWUsIWEudXRpbHMuaXNEZWZpbmVkKHRoaXMuYmNbaF0pJiYwPGgubGVuZ3RoJiYodGhpcy5nKyssdGhpcy5iY1toXT0hMCwKYS5sb2coIk05MSIsaCx0aGlzLmcpLHRoaXMuTWUoYikpKX07ZS5wcm90b3R5cGUuZ2o9ZnVuY3Rpb24oYil7dmFyIGg9YS51dGlscy5ub3coKTthLnV0aWxzLm5iKGIpJiYhYi5pc0FkcnVtVHJhY2tlZE5vZGU/KGg9YS51dGlscy5RYihiKSwhYS51dGlscy5pc0RlZmluZWQodGhpcy5iY1toXSkmJjA8aC5sZW5ndGgmJih0aGlzLmcrKyx0aGlzLmJjW2hdPSEwLHRoaXMuTWUoYiksYS5sb2coIk05MiIsaCx0aGlzLmcpKSk6YS51dGlscy5LZihiKSYmIWIuYWRydW1Ob2RlSWQ/KGEubG9nKCJNOTMiLGgpLGEuTi5JYihiLGgpKTphLnV0aWxzLlFmKGIpJiYoYS5OLlVhPU1hdGgubWF4KGEuTi5VYSxoKSl9O2UucHJvdG90eXBlLk1lPWZ1bmN0aW9uKGIpe3RoaXMubGJ8fCh0aGlzLks9dGhpcy5LLmJpbmQodGhpcyksdGhpcy5sPXRoaXMubC5iaW5kKHRoaXMpLHRoaXMuSy5JPSEwLHRoaXMubGI9dGhpcy5sLkk9ITApO3ZhciBoPWEudXRpbHMuWGMoYiksaD1hLnV0aWxzLmlzRGVmaW5lZChoKT8KaC52YWx1ZTpudWxsO2EudXRpbHMuU2YoYik/KGIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsdGhpcy5LKSxhLmxvZygiTTk0IixoKSk6KGIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdGhpcy5LKSxhLmxvZygiTTk1IixoLGIubm9kZU5hbWUpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix0aGlzLmwpfTtlLnByb3RvdHlwZS5ibD1mdW5jdGlvbihiKXtyZXR1cm4iTElOSyI9PWIubm9kZU5hbWU/KGI9Yi5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgicmVsIiksYS51dGlscy5pc0RlZmluZWQoYik/MDw9Yi52YWx1ZS5pbmRleE9mKCJzdHlsZXNoZWV0Iik6ITApOiEwfTtlLnByb3RvdHlwZS5Xaz1mdW5jdGlvbihhKXtyZXR1cm4vXihTQ1JJUFR8SU1HfExJTkspJC8udGVzdChhLm5vZGVOYW1lKSYmdGhpcy5ibChhKX07ZS5wcm90b3R5cGUuSz1mdW5jdGlvbihjKXthLlAoKTt2YXIgaD10aGlzLnBmKGMudGFyZ2V0KTshYS51dGlscy5pc0RlZmluZWQodGhpcy5SW2hdKSYmCjA8dGhpcy5nJiYodGhpcy5nLS0sdGhpcy5SW2hdPSEwLGEubG9nKCJNOTYiLGgsdGhpcy5nKSk7dGhpcy5iYT1hLnV0aWxzLm5vdygpO3RoaXMubWQrPTE7MT09dGhpcy5tZCYmKGIubi5XZygpLHRoaXMuQj0hMCk7dGhpcy50YihjLnRhcmdldCk7aD1jLnRhcmdldDthLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJmEudXRpbHMubmIoaCkmJiFoLmlzQWRydW1UcmFja2VkTm9kZSYmKGEubG9nKCJNOTciKSxhLk4uSyhjKSk7YS5RKCl9O2UucHJvdG90eXBlLmw9ZnVuY3Rpb24oYil7YS5QKCk7dmFyIGg9dGhpcy5wZihiLnRhcmdldCksZj1iLnRhcmdldDthLnV0aWxzLmlzRGVmaW5lZCh0aGlzLnBkW2hdKXx8KHRoaXMuZy0tLHRoaXMucGRbaF09ITAsYS5sb2coIk05OCIsaCx0aGlzLmcpKTthLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJmEudXRpbHMubmIoZikmJiFmLmlzQWRydW1UcmFja2VkTm9kZSYmKGEubG9nKCJNOTkiKSxhLk4ubChiKSk7dGhpcy50YihiLnRhcmdldCk7CmEuUSgpfTtlLnByb3RvdHlwZS5jaj1mdW5jdGlvbigpe3JldHVybiAwPHRoaXMuZyYmdGhpcy5CfTtlLnByb3RvdHlwZS5wZj1mdW5jdGlvbihhKXt2YXIgYj0iIjthIGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQ/Yj1hLnNyYzphIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9iPWEuc3JjOmEgaW5zdGFuY2VvZiBIVE1MTGlua0VsZW1lbnQmJihiPWEuaHJlZik7cmV0dXJuIGJ9O2UucHJvdG90eXBlLmJkPWZ1bmN0aW9uKGIpe3ZhciBoPXRoaXMuZyxmPTA7YS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiYoaCs9YS5OLmcsZj1hLk4uYmEpO2EubG9nKCJNMTAwIixoKTtyZXR1cm4gMD09aCYmdGhpcy5CJiYoYS5sb2coIk0xMDEiKSxoPU1hdGgubWF4KHRoaXMuYmEsZiksYi1oPj10aGlzLnBiKT8odGhpcy5yZXNldCgpLGgpOi0xfTtlLnByb3RvdHlwZS50Yj1mdW5jdGlvbihhKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHRoaXMuSyk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsCnRoaXMubCl9O3JldHVybiBlfSgpO2IuTGg9bH0pKGEuanx8KGEuaj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuTGM9M0UzO3RoaXMucGI9YS5jb25mLnVzZXJDb25mJiZhLmNvbmYudXNlckNvbmYubmF2Q29tcGxldGUmJmEuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZS5tYXhYaHJRdWlldFRpbWU/YS5jb25mLnVzZXJDb25mLm5hdkNvbXBsZXRlLm1heFhoclF1aWV0VGltZTp0aGlzLkxjfWUucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKGEpe3RoaXMubmQ9dGhpcy5nPTA7dGhpcy5EYT1hO3RoaXMucGE9dGhpcy5CPSExO3RoaXMudGg9e307dGhpcy5WZD17fX07ZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oYSl7dGhpcy5zZXRVcChhKTt0aGlzLnBhPSEwfTtlLnByb3RvdHlwZS5CZT1mdW5jdGlvbihiKXthLm1vbml0b3IuQW55U3BhTW9uaXRvci5jZCgpfHxhLnV0aWxzLmlzRGVmaW5lZCh0aGlzLnRoW2JdKXx8CiF0aGlzLnBhfHwodGhpcy5nKz0xLHRoaXMudGhbYl09ITAsYS5sb2coIk0xMDIiLGIsdGhpcy5nKSl9O2UucHJvdG90eXBlLlhpPWZ1bmN0aW9uKGMpeyFhLm1vbml0b3IuQW55U3BhTW9uaXRvci5jZCgpJiZ0aGlzLnBhJiYwPHRoaXMuZyYmKGEudXRpbHMuaXNEZWZpbmVkKHRoaXMuVmQpJiYhYS51dGlscy5pc0RlZmluZWQodGhpcy5WZFtjXSkmJih0aGlzLkRhPWEudXRpbHMubm93KCksdGhpcy5nLT0xLHRoaXMuVmRbY109ITAsYS5sb2coIk0xMDMiLGMsdGhpcy5nKSksdGhpcy5uZCs9MSwxPT10aGlzLm5kJiYoYi5uLldnKCksdGhpcy5CPSEwKSl9O2UucHJvdG90eXBlLmJkPWZ1bmN0aW9uKGEpe3JldHVybiAwPT10aGlzLmcmJnRoaXMuQiYmYS10aGlzLkRhPj10aGlzLnBiPyh0aGlzLnJlc2V0KCksdGhpcy5EYSk6LTF9O2UucHJvdG90eXBlLmRqPWZ1bmN0aW9uKCl7cmV0dXJuIDA8dGhpcy5nJiZ0aGlzLkJ9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5CPQohMTt0aGlzLmc9MDt0aGlzLnBhPSExfTtyZXR1cm4gZX0oKTtiLkJoPWx9KShhLmp8fChhLmo9e30pKX0pKGt8fChrPXt9KSk7dmFyIGQ9ay51dGlscy53YSxnPWsudXRpbHMuaXNGdW5jdGlvbjsoZnVuY3Rpb24oYSl7dmFyIGI9YS51dGlscy5nZW5lcmF0ZUdVSUQsbDsoZnVuY3Rpb24oYSl7YVthLlVTRVI9MF09IlVTRVIiO2FbYS5USU1FUj0xXT0iVElNRVIiO2FbYS5YSFI9Ml09IlhIUiI7YVthLlJFU09VUkNFPTNdPSJSRVNPVVJDRSI7YVthLlBST01JU0U9NF09IlBST01JU0UiO2FbYS5GRVRDSD01XT0iRkVUQ0giO2FbYS5PVEhFUj02XT0iT1RIRVIifSkobD1hLkNhdXNlVHlwZXx8KGEuQ2F1c2VUeXBlPXt9KSk7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oYyxmLG4pe3RoaXMuc3RhcnQ9YS51dGlscy5ub3coKTt0aGlzLnBhcmVudD1jO3RoaXMub2M9Zjt0aGlzLmd1aWQ9YigpO3RoaXMudHlwZT1ufX0oKTthLkRiPWU7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7fQpiLk9uPWZ1bmN0aW9uKCl7cmV0dXJuIGIuZXZlbnRzfTtiLkxmPWZ1bmN0aW9uKGIpe3JldHVybiBhLnV0aWxzLmlzRGVmaW5lZChiKSYmYS51dGlscy5pc0Z1bmN0aW9uKGIuaGFuZGxlRXZlbnQpfTtiLnhnPWZ1bmN0aW9uKGEsYyxtLHEpe3ZhciBlO2IucWEoYyk7dHJ5e2IuTGYoYSk/ZT1hLmhhbmRsZUV2ZW50LmFwcGx5KG0scSk6ZyhhKSYmKGU9YS5hcHBseShtLHEpKX1jYXRjaChwKXt0aHJvdyBwO31maW5hbGx5e2IuTCgpfXJldHVybiBlfTtiLnVjPWZ1bmN0aW9uKGMsbixtLHEpe2lmKCFhLnV0aWxzLmlzRGVmaW5lZChuKXx8bi5JKXJldHVybiBuO3ZhciBlO3F8fChlPWIuaWEoKSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBxPWIuT2EoYyxhLGUsbSk7cmV0dXJuIGIueGcobixxLHRoaXMsYXJndW1lbnRzKX19O2IuT2E9ZnVuY3Rpb24oYixjLG0saCl7bT9hLmxvZygiTTEwNCIsYixtLm9jLmFjdGlvbik6YS5sb2coIk0xMDUiLGIpO2EudXRpbHMuaXNEZWZpbmVkKGMpPyhjPQphLmNlLnVsKGMudGFyZ2V0fHxjLnNyY0VsZW1lbnQpLGMuYWN0aW9uPWIpOmM9bmV3IGEuS2EoYik7cmV0dXJuIG5ldyBlKG0sYyxoKX07Yi5mbj1mdW5jdGlvbihjLG4sbSl7aWYoIWEudXRpbHMuaXNEZWZpbmVkKG4pfHxuLkkpcmV0dXJuIG47dmFyIHE9Yi5PYShjLHZvaWQgMCxiLmlhKCksbSk7cmV0dXJuIGZ1bmN0aW9uKCl7bmV3IGEuS2EoYyk7cmV0dXJuIGIueGcobixxLHRoaXMsYXJndW1lbnRzKX19O2IuQm89ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtiLkdjKGEpO3JldHVybiBtfX07Yi5pYT1mdW5jdGlvbigpe3JldHVybiAwPGIuZXZlbnRzLmxlbmd0aD9iLmV2ZW50c1tiLmV2ZW50cy5sZW5ndGgtMV06bnVsbH07Yi5xYT1mdW5jdGlvbihhKXtiLmV2ZW50cy5wdXNoKGEpfTtiLkw9ZnVuY3Rpb24oKXtyZXR1cm4gYi5ldmVudHMucG9wKCl9O2IuSGM9ZnVuY3Rpb24oYixjKXt2YXIgbT1iLGg9MSxlPSIiOwppZighYS51dGlscy5pc0RlZmluZWQobSkpcmV0dXJuIG51bGw7Zm9yKDthLnV0aWxzLmlzRGVmaW5lZChtLnBhcmVudCk7KWU9IiAtPiAiK20ub2MuYWN0aW9uK2UsbT1tLnBhcmVudCxoKz0xO3ZhciBwPWEudXRpbHMubm93KCk7YS51dGlscy5pc0RlZmluZWQobS5vYykmJihlPW0ub2MuYWN0aW9uK2UrIiAtPiAiK2MpO2EubG9nKCJNMTA2IixlKTthLmxvZygiTTEwNyIsbS5zdGFydCxoKTthLmxvZygiTTEwOCIscC1tLnN0YXJ0KTtyZXR1cm4gbX07Yi5HYz1mdW5jdGlvbihhKXtyZXR1cm4gYi5IYyhiLmlhKCksYSl9O2Iudms9ZnVuY3Rpb24oKXt2YXIgYz1iLkdjKHZvaWQgMCk7aWYoYS51dGlscy5pc0RlZmluZWQoYykmJmEudXRpbHMuaXNEZWZpbmVkKGMudHlwZSkpcmV0dXJuW2wuVElNRVIsbC5VU0VSXS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBjLnR5cGU9PWF9KT9jOnZvaWQgMH07Yi5Vaz1mdW5jdGlvbihhKXtpZihnKGEpKXJldHVybiBhO3ZhciBiPSIiK2E7cmV0dXJuIGZ1bmN0aW9uKCl7ZXZhbChiKX19OwpiLnNldFVwPWZ1bmN0aW9uKCl7Yi5ldmVudHM9W107dmFyIGM9YS51dGlscy5yZWZzO1t7bGc6Yy5zZXRUaW1lb3V0LGtmOiJzZXRUaW1lb3V0In0se2xnOmMuc2V0SW50ZXJ2YWwsa2Y6InNldEludGVydmFsIn1dLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9YS5sZyxmPWEua2Y7d2luZG93W2ZdPWZ1bmN0aW9uKGEpe3ZhciBuPWQoYXJndW1lbnRzKTtpZihhKXt2YXIgZT1iLmtsKGYsYXJndW1lbnRzWzFdKT9sLk9USEVSOmwuVElNRVIsZT1iLmZuKGYsYi5VayhhKSxlKTtuWzBdPWU7cmV0dXJuIGMuYXBwbHkod2luZG93LG4pfWMuYXBwbHkod2luZG93LG4pfX0pfTtiLmtsPWZ1bmN0aW9uKGIsYyl7cmV0dXJuInNldFRpbWVvdXQiPT1iJiYoYS51dGlscy5pc0RlZmluZWQoYykmJjA9PWN8fCFhLnV0aWxzLmlzRGVmaW5lZChjKSl9O3JldHVybiBifSgpO2MuZXZlbnRzPVtdO2EuYz1jfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS51dGlscy5MaixsPXdpbmRvdy5hZGRFdmVudExpc3RlbmVyLAplPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5FdmVudFRhcmdldCk/d2luZG93LkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxjPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5FdmVudFRhcmdldCk/d2luZG93LkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxoPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsYixjLGYsaCxlLGwsdyl7dGhpcy5hY3Rpb249YXx8IiI7dGhpcy5UaD1ifHwiIjt0aGlzLmNsYXNzTmFtZT1jfHwiIjt0aGlzLnRhZ05hbWU9Znx8IiI7dGhpcy5uYW1lPWh8fCIiO3RoaXMudGV4dD1lfHwiIjt0aGlzLnNyYz1sO3RoaXMuaXRlbT13fX0oKTthLkthPWg7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7fWYuc2V0VXA9ZnVuY3Rpb24oKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShmLk1jLFtdKTtmLmNuKCk7YS51dGlscy5pc0RlZmluZWQod2luZG93LkV2ZW50VGFyZ2V0KT8KKGYuZG4oKSxmLmVuKCkpOmYuV2koKTtmLklmKCJvbmxvYWQiKTtmLklmKCJvbmVycm9yIil9O2YubG89ZnVuY3Rpb24oKXtyZXR1cm5bXX07Zi5iaz1mdW5jdGlvbihiLGMpe3ZhciBoPSIiO2lmKGEudXRpbHMuaXNEZWZpbmVkKGIpKWlmKCJzdHJpbmciPT09dHlwZW9mIGIudGV4dENvbnRlbnQpaD1hLnV0aWxzLmlzRGVmaW5lZChTdHJpbmcucHJvdG90eXBlLnRyaW0pP2IudGV4dENvbnRlbnQudHJpbSgpOmIudGV4dENvbnRlbnQsaD1hLnV0aWxzLmlzRGVmaW5lZChjKT9oLnN1YnN0cmluZygwLGMpOmg7ZWxzZSBmb3IoYj1iLmZpcnN0Q2hpbGQ7YS51dGlscy5pc0RlZmluZWQoYikmJiEoaCs9Zi5iayhiLGMpLGEudXRpbHMuaXNEZWZpbmVkKGMpJiZoLmxlbmd0aD49Yyk7Yj1iLm5leHRTaWJsaW5nKTtyZXR1cm4gaH07Zi51bD1mdW5jdGlvbihjKXt2YXIgZj1iKGMuaWQpfHwiIixuPWIoYy5jbGFzc05hbWUpfHwiIixlPSIiLGw9bmV3IGg7YyBpbnN0YW5jZW9mIEhUTUxIdG1sRWxlbWVudD8KKGU9Imh0bWwiLGwudGV4dD0iI2h0bWwiKTpjPT09ZG9jdW1lbnQ/KGU9ImRvY3VtZW50IixsLnRleHQ9IiNkb2N1bWVudCIpOmM9PT13aW5kb3c/KGU9IndpbmRvdyIsbC50ZXh0PSIjd2luZG93Iik6YyBpbnN0YW5jZW9mIFhNTEh0dHBSZXF1ZXN0PyhlPSJ4aHIiLGwuc3JjPWEudXRpbHMuaXNPYmplY3QoYy5fYWRydW1BamF4VCk/ZW5jb2RlVVJJKGMuX2FkcnVtQWpheFQudXJsKCkpOiIiKTpjIGluc3RhbmNlb2YgV2ViU29ja2V0PyhlPSJ3ZWJzb2NrZXQiLGwuc3JjPWVuY29kZVVSSShjLnVybCkpOmMgaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudD8oZT0ic2NyaXB0IixsLnNyYz1lbmNvZGVVUkkoYy5zcmMpKTpjIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQ/KGU9ImEiLGwudGV4dD1iKGMudGV4dCl8fCIiKTpjIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQ/KGU9ImJ1dHRvbiIsbC5uYW1lPWIoYy5uYW1lKSk6YyBpbnN0YW5jZW9mIEhUTUxEaXZFbGVtZW50PwplPSJkaXYiOmMgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50PyhlPSJpbWciLGwuc3JjPWVuY29kZVVSSShjLnNyYyksbC50ZXh0PWIoYy50aXRsZSl8fCIiKTpjIGluc3RhbmNlb2YgSFRNTExJRWxlbWVudD8oZT0ibGkiLGwuaXRlbT1jLnZhbHVlKTpjIGluc3RhbmNlb2YgSFRNTFVMaXN0RWxlbWVudD9lPSJ1bCI6YyBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudD9lPSJmb3JtIjpjIGluc3RhbmNlb2YgSFRNTEZyYW1lRWxlbWVudD8oZT0iZnJhbWUiLGwuc3JjPWVuY29kZVVSSShjLnNyYykpOmMgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50PyhlPWIoYy50eXBlKXx8ImlucHV0IixsLnRleHQ9YihjLnZhbHVlKSxsLm5hbWU9YihjLm5hbWUpKTpjIGluc3RhbmNlb2YgSFRNTFRhYmxlRWxlbWVudD9lPSJ0YWJsZSI6YyBpbnN0YW5jZW9mIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50P2U9InRjYXAiOmMgaW5zdGFuY2VvZiBIVE1MVGFibGVDZWxsRWxlbWVudD9lPSJ0ZCI6YyBpbnN0YW5jZW9mCkhUTUxUYWJsZVJvd0VsZW1lbnQ/ZT0idHIiOihlPWEudXRpbHMuaXNEZWZpbmVkKGMudGFnTmFtZSk/YihjLnRhZ05hbWUpOiIiLGEubG9nKCJNMTA5IixlKSk7bC5UaD1mO2wuY2xhc3NOYW1lPW47bC50YWdOYW1lPWU7YS51dGlscy5pc1N0cmluZyhsLnRleHQpJiYobC50ZXh0PWEudXRpbHMuaXNEZWZpbmVkKFN0cmluZy5wcm90b3R5cGUudHJpbSk/bC50ZXh0LnRyaW0oKTpsLnRleHQsbC50ZXh0PWwudGV4dC5zdWJzdHJpbmcoMCwzMCkpO3JldHVybiBsfTtmLmNuPWZ1bmN0aW9uKCl7YS51dGlscy5mb3JFYWNoKGYuTWMsZnVuY3Rpb24oYil7bChiLGZ1bmN0aW9uKGMpe2M9Yy50YXJnZXR8fGMuc3JjRWxlbWVudDsoYz09PWRvY3VtZW50fHxjPT09d2luZG93fHxjIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3R8fGMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkmJm51bGwhPWMmJmNbIm9uIitiXSYmKGNbIm9uIitiXT1hLmMudWMoYixjWyJvbiIrYl0sYS5DYXVzZVR5cGUuVVNFUiwKITApLGNbIm9uIitiXS5JPSEwKX0sITApfSl9O2YuV2k9ZnVuY3Rpb24oKXthLnV0aWxzLmZvckVhY2goZi5NYyxmdW5jdGlvbihiKXtsKGIsZnVuY3Rpb24oYyl7Yz1hLmMuT2EoYixjLG51bGwsYS5DYXVzZVR5cGUuVVNFUik7YS5jLnFhKGMpfSwhMCk7bChiLGZ1bmN0aW9uKCl7YS5jLkwoKX0sITEpfSl9O2YuaGg9ZnVuY3Rpb24oYil7dmFyIGM9ITE7YS51dGlscy5pc0Jvb2xlYW4oYik/Yz1iOmEudXRpbHMuaXNPYmplY3QoYikmJmEudXRpbHMuaXNEZWZpbmVkKGIuY2FwdHVyZSkmJihjPSEhYi5jYXB0dXJlKTtyZXR1cm4gY307Zi5NZz1mdW5jdGlvbihiLGMsZixoKXtpZighYS51dGlscy5pc0RlZmluZWQoYi5ldmVudExpc3RlbmVyTWFwKXx8IWEudXRpbHMuaXNEZWZpbmVkKGIuZXZlbnRMaXN0ZW5lck1hcFtjXSl8fCFhLnV0aWxzLmlzRGVmaW5lZChmKSlyZXR1cm4tMTtiPWIuZXZlbnRMaXN0ZW5lck1hcFtjXTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKWlmKGJbY11bMF09PQpmJiZiW2NdWzFdPT1oKXJldHVybiBjO3JldHVybi0xfTtmLkdmPWZ1bmN0aW9uKGIsYyxmLGgsbil7YS51dGlscy5pc0RlZmluZWQoYikmJmEudXRpbHMuaXNEZWZpbmVkKG4pJiYoYS51dGlscy5pc0RlZmluZWQoYi5ldmVudExpc3RlbmVyTWFwKXx8KGIuZXZlbnRMaXN0ZW5lck1hcD17fSksYS51dGlscy5pc0RlZmluZWQoYi5ldmVudExpc3RlbmVyTWFwW2NdKXx8KGIuZXZlbnRMaXN0ZW5lck1hcFtjXT1bXSksYi5ldmVudExpc3RlbmVyTWFwW2NdLnB1c2goW2YsaCxuXSkpfTtmLmJtPWZ1bmN0aW9uKGEsYixjKXtpZigtMTxjKXt2YXIgZj1hLmV2ZW50TGlzdGVuZXJNYXBbYl07ZGVsZXRlIGZbY107Zi5zcGxpY2UoYywxKTswPT1mLmxlbmd0aCYmZGVsZXRlIGEuZXZlbnRMaXN0ZW5lck1hcFtiXX19O2YuZG49ZnVuY3Rpb24oKXtFdmVudFRhcmdldC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihiLGMsaCl7aWYoYS51dGlscy5pc0RlZmluZWQoYykmJmMuSXx8CiFhLmMuTGYoYykmJiFnKGMpKXJldHVybiBlLmNhbGwodGhpcyxiLGMsaCk7dmFyIGw9Zi5oaChoKSxyPWEudXRpbHMuaXNEZWZpbmVkKHRoaXMpP3RoaXM6d2luZG93O2lmKCEoLTE8Zi5NZyhyLGIsYyxsKSkpe3ZhciBzPWM7c3dpdGNoKGIpe2Nhc2UgImNsaWNrIjpjYXNlICJkYmxjbGljayI6Y2FzZSAiYXV4Y2xpY2siOmNhc2UgIm1vdXNlZG93biI6Y2FzZSAibW91c2V1cCI6Y2FzZSAiZHJvcCI6Y2FzZSAia2V5dXAiOmNhc2UgImtleWRvd24iOmNhc2UgImtleXByZXNzIjpjYXNlICJjb250ZXh0bWVudSI6Y2FzZSAicGFnZUNoYW5nZWQiOmNhc2UgImNsb3NlIjpzPWEuYy51YyhiLGMsYS5DYXVzZVR5cGUuVVNFUiwhMCk7Zi5HZihyLGIsYyxsLHMpO2JyZWFrO2Nhc2UgImxvYWQiOmNhc2UgImVycm9yIjpzPWEuYy51YyhiLGMsYS5DYXVzZVR5cGUuVVNFUiwhMSksZi5HZihyLGIsYyxsLHMpfWUuY2FsbChyLGIscyxoKX19fTtmLmVuPWZ1bmN0aW9uKCl7RXZlbnRUYXJnZXQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9CmZ1bmN0aW9uKGIsaCxlKXtpZihhLnV0aWxzLmlzRGVmaW5lZChoKSYmaC5JKXJldHVybiBjLmNhbGwodGhpcyxiLGgsZSk7dmFyIGw9Zi5oaChlKSxyPWEudXRpbHMuaXNEZWZpbmVkKHRoaXMpP3RoaXM6d2luZG93LGw9Zi5NZyhyLGIsaCxsKTswPD1sPyhjLmNhbGwocixiLHRoaXMuZXZlbnRMaXN0ZW5lck1hcFtiXVtsXVsyXSxlKSxmLmJtKHIsYixsKSk6Yy5jYWxsKHIsYixoLGUpfX07Zi5JZj1mdW5jdGlvbihiKXt2YXIgYz1IVE1MRWxlbWVudC5wcm90b3R5cGUsZj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsYik7YS51dGlscy5pc0RlZmluZWQoZikmJmEudXRpbHMuaXNEZWZpbmVkKGYuc2V0KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsYix7c2V0OmZ1bmN0aW9uKGMpe3ZhciBoPWM7YS51dGlscy5pc0RlZmluZWQoYykmJihoPWEuYy51YyhiLGMsYS5DYXVzZVR5cGUuUkVTT1VSQ0UsITEpKTt2YXIgbjt0cnl7bj1mLnNldC5jYWxsKHRoaXMsaCl9Y2F0Y2goZSl7dGhyb3cgZTsKfXJldHVybiBufX0pfTtyZXR1cm4gZn0oKTtmLk1jPSJjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGxvYWQgdW5sb2FkIi5zcGxpdCgiICIpO2EuY2U9Zn0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLm1hcCxlPWEudXRpbHMuYm4sYz1hLnV0aWxzLmlzRGVmaW5lZCxoPWEudXRpbHMuaXNTdHJpbmcsZj1hLnV0aWxzLkNqLG49YS51dGlscy5pc0Z1bmN0aW9uO2IuZGc9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9ITEsZj0wO2Y8Yi5sZW5ndGg7ZisrKXt2YXIgaD1iW2ZdO2lmKGgmJmgudGVzdChhKSl7Yz0hMDticmVha319cmV0dXJuIGN9O2IuVmI9ZnVuY3Rpb24oYSxmLGgpe3ZhciBuPSExO2lmKGYmJmgpZm9yKHZhciBlPTA7ZTxoLmxlbmd0aDtlKyspe3ZhciBsPWhbZV07aWYoIShjKGwubWV0aG9kKSYmYSE9PWwubWV0aG9kfHxjKGwudXJscykmJgohYi5kZyhmLGwudXJscykpKXtuPSEwO2JyZWFrfX1yZXR1cm4gbn07Yi56Yj1mdW5jdGlvbihhLGIpe3JldHVybiBmKGwoZShiKSxhKSl9O2IucGM9ZnVuY3Rpb24oYSl7dmFyIGM9Yi5mayhhKTthPWIucWYoYSk7cmV0dXJuIGN8fGF9O2IuZms9ZnVuY3Rpb24oYil7dmFyIGY9Yi5tZXRob2Q7aWYoYyhmKSl7aWYoaChmKSlyZXR1cm4gYjthLmVycm9yKCJNMTEwIil9fTtiLldtPWZ1bmN0aW9uKGEpe3ZhciBjPWIucWYoYSk7cmV0dXJuIGIuV2woYSkmJmN9O2IuV2w9ZnVuY3Rpb24oYil7aWYobihiLmdldEZyb21Cb2R5KSlyZXR1cm4gYjthLmVycm9yKCJNMTExIil9O2Iud2o9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPVtdLGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIG49YltmXS5wYXR0ZXJuO2lmKGgobikpdHJ5e2MucHVzaChuZXcgUmVnRXhwKG4pKX1jYXRjaChlKXthLmV4Y2VwdGlvbihlLCJNMTEyIil9ZWxzZSBhLmVycm9yKCJNMTEzIil9cmV0dXJuIGN9O2IucWY9ZnVuY3Rpb24oYSl7dmFyIGM9CmEudXJscztpZihjJiYwPGMubGVuZ3RoJiYoYS51cmxzPWIud2ooYyksMDxhLnVybHMubGVuZ3RoKSlyZXR1cm4gYX19KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7YT1hLmV2ZW50c3x8KGEuZXZlbnRzPXt9KTthPWEuYnx8KGEuYj17fSk7YS5uYXZpZ2F0aW9uU3RhcnQ9Im5hdmlnYXRpb25TdGFydCI7YS5kb21haW5Mb29rdXBTdGFydD0iZG9tYWluTG9va3VwU3RhcnQiO2EuZG9tYWluTG9va3VwRW5kPSJkb21haW5Mb29rdXBFbmQiO2EuY29ubmVjdFN0YXJ0PSJjb25uZWN0U3RhcnQiO2Euc2VjdXJlQ29ubmVjdGlvblN0YXJ0PSJzZWN1cmVDb25uZWN0aW9uU3RhcnQiO2EuY29ubmVjdEVuZD0iY29ubmVjdEVuZCI7YS5yZXF1ZXN0U3RhcnQ9InJlcXVlc3RTdGFydCI7YS5yZXNwb25zZVN0YXJ0PSJyZXNwb25zZVN0YXJ0IjthLnJlc3BvbnNlRW5kPSJyZXNwb25zZUVuZCI7YS5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydD0iZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQiOwphLmxvYWRFdmVudEVuZD0ibG9hZEV2ZW50RW5kIjthLk5nPSJzZW5kVGltZSI7YS5oZj0iZmlyc3RCeXRlVGltZSI7YS5IZz0icmVzcEF2YWlsVGltZSI7YS5JZz0icmVzcFByb2NUaW1lIjthLlJkPSJ2aWV3Q2hhbmdlU3RhcnQiO2Euamg9InZpZXdDaGFuZ2VFbmQiO2EuU2Q9InZpZXdET01Mb2FkZWQiO2Euc2g9InhoclJlcXVlc3RzQ29tcGxldGVkIjthLnpvPSJ2aWV3RnJhZ21lbnRzTG9hZGVkIjthLkFvPSJ2aWV3UmVzb3VyY2VzTG9hZGVkIjthLlRkPSJ2aXJ0dWFsUGFnZVN0YXJ0IjthLlptPSJ2aXJ0dWFsUGFnZUVuZCJ9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXt2YXIgYj1hLmV2ZW50c3x8KGEuZXZlbnRzPXt9KTtiLm1ldHJpY1NwZWM9e307Yi5tZXRyaWNTcGVjW2EuRXZlbnRUeXBlLlBhZ2VWaWV3XT17S2o6e3N0YXJ0OmIuYi5uYXZpZ2F0aW9uU3RhcnQsZW5kOmIuYi5sb2FkRXZlbnRFbmQsbmFtZToiUExUIn0sU2o6e3N0YXJ0OmIuYi5uYXZpZ2F0aW9uU3RhcnQsCmVuZDpiLmIucmVzcG9uc2VTdGFydCxuYW1lOiJGQlQifSxybzp7c3RhcnQ6Yi5iLm5hdmlnYXRpb25TdGFydCxlbmQ6Yi5iLnJlcXVlc3RTdGFydCxuYW1lOiJTQ1QifSxzbzp7c3RhcnQ6Yi5iLnNlY3VyZUNvbm5lY3Rpb25TdGFydCxlbmQ6Yi5iLmNvbm5lY3RFbmQsbmFtZToiU0hUIn0sTG46e3N0YXJ0OmIuYi5kb21haW5Mb29rdXBTdGFydCxlbmQ6Yi5iLmRvbWFpbkxvb2t1cEVuZCxuYW1lOiJETFQifSx3bzp7c3RhcnQ6Yi5iLmNvbm5lY3RTdGFydCxlbmQ6Yi5iLmNvbm5lY3RFbmQsbmFtZToiVENQIn0sb286e3N0YXJ0OmIuYi5yZXF1ZXN0U3RhcnQsZW5kOmIuYi5yZXNwb25zZVN0YXJ0LG5hbWU6IlJBVCJ9LE5uOntzdGFydDpiLmIucmVzcG9uc2VTdGFydCxlbmQ6Yi5iLmxvYWRFdmVudEVuZCxuYW1lOiJGRVQifSxSbjp7c3RhcnQ6Yi5iLnJlc3BvbnNlU3RhcnQsZW5kOmIuYi5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCxuYW1lOiJEUlQifSxRbjp7c3RhcnQ6Yi5iLnJlc3BvbnNlU3RhcnQsCmVuZDpiLmIucmVzcG9uc2VFbmQsbmFtZToiRERUIn0sSm46e3N0YXJ0OmIuYi5yZXNwb25zZUVuZCxlbmQ6Yi5iLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0LG5hbWU6IkRQVCJ9LG5vOntzdGFydDpiLmIuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQsZW5kOmIuYi5sb2FkRXZlbnRFbmQsbmFtZToiUFJUIn0sS246e3N0YXJ0OmIuYi5uYXZpZ2F0aW9uU3RhcnQsZW5kOmIuYi5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCxuYW1lOiJET00ifX07Yi5tZXRyaWNTcGVjW2EuRXZlbnRUeXBlLkFqYXhdPXtTajp7c3RhcnQ6Yi5iLk5nLGVuZDpiLmIuaGYsbmFtZToiRkJUIn0seG46e3N0YXJ0OmIuYi5oZixlbmQ6Yi5iLkhnLG5hbWU6IkREVCJ9LHduOntzdGFydDpiLmIuSGcsZW5kOmIuYi5JZyxuYW1lOiJEUFQifSxLajp7c3RhcnQ6Yi5iLk5nLGVuZDpiLmIuSWcsbmFtZToiUExUIn19O2IubWV0cmljU3BlY1thLkV2ZW50VHlwZS5WUGFnZVZpZXddPXtlbzp7c3RhcnQ6Yi5iLlRkLAplbmQ6Yi5iLlptLG5hbWU6IlBMVCJ9LEZuOntzdGFydDpiLmIuUmQsZW5kOmIuYi5qaCxuYW1lOiJERFQifSxhbzp7c3RhcnQ6Yi5iLlJkLGVuZDpiLmIuU2QsbmFtZToiRFJUIn0sb246e3N0YXJ0OmIuYi5qaCxlbmQ6Yi5iLlNkLG5hbWU6IkRQVCJ9LHBuOntzdGFydDpiLmIuUmQsZW5kOmIuYi5TZCxuYW1lOiJET00ifSxtbzp7c3RhcnQ6InZpZXdDaGFuZ2VFbmQiLGVuZDoieGhyUmVxdWVzdHNDb21wbGV0ZWQiLG5hbWU6bnVsbH0sYm86e3N0YXJ0OiJ2aWV3Q2hhbmdlRW5kIixlbmQ6InZpZXdQYXJ0aWFsc0xvYWRlZCIsbmFtZTpudWxsfSwkbjp7c3RhcnQ6InZpZXdQYXJ0aWFsc0xvYWRlZCIsZW5kOiJ2aWV3RnJhZ21lbnRzTG9hZGVkIixuYW1lOm51bGx9LGNvOntzdGFydDoidmlld1BhcnRpYWxzTG9hZGVkIixlbmQ6InZpZXdSZXNvdXJjZXNMb2FkZWQiLG5hbWU6bnVsbH19O2IubWV0cmljU3BlY1thLkV2ZW50VHlwZS5OR19WSVJUVUFMX1BBR0VdPWIubWV0cmljU3BlY1thLkV2ZW50VHlwZS5WUGFnZVZpZXddfSkoa3x8CihrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1mdW5jdGlvbihlKXtmdW5jdGlvbiBjKGgpe2g9ZS5jYWxsKHRoaXMsaCl8fHRoaXM7aC5jb25zdHJ1Y3RvciE9YyYmaC5jb25zdHJ1Y3RvciE9Yi5BZHJ1bUFqYXgmJmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLkFqYXgiLFtdKTtyZXR1cm4gaH12KGMsZSk7Yy5wcm90b3R5cGUudHlwZT1mdW5jdGlvbigpe3JldHVybiBhLkV2ZW50VHlwZS5BamF4fTtyZXR1cm4gY30oYi5FdmVudFRyYWNrZXIpO2IuQWpheD1sO2IuTWEoYi5UW2EuRXZlbnRUeXBlLkFqYXhdLGwucHJvdG90eXBlKTtiLkllKGIubWV0cmljU3BlY1thLkV2ZW50VHlwZS5BamF4XSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhhKXtyZXR1cm4gYi5jYWxsKHRoaXMsYSl8fAp0aGlzfXYoYyxiKTtjLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnRUeXBlLkFqYXh9O3JldHVybiBjfShiLkFqYXgpO2IuQWRydW1BamF4PWw7Yi5NYShiLlRbYS5FdmVudFR5cGUuQURSVU1fWEhSXSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS51dGlscy5pc0RlZmluZWQsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoKXt9Yy53ZD1mdW5jdGlvbihiLGYpe2EuY29uZi5zcGEyP2MudWooYixmKTpjLkxnKGIsZil9O2MudWo9ZnVuY3Rpb24oaCxmKXt2YXIgbj1hLmMuSGMoaC5oKTtpZihsKGEubW9uaXRvci5BbnlTcGFNb25pdG9yLnZwKSYmIWEubW9uaXRvci5BbnlTcGFNb25pdG9yLkJhJiZhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cC5lYj09bil7Zi5wYXJlbnQoYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnApO2lmKCsrYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnAuSmU+CmIudWEubWF4UGVyUGFnZVZpZXcpcmV0dXJuO2MuTGcoaCxmKX1lbHNlIGwoYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnApJiYhYS5tb25pdG9yLkFueVNwYU1vbml0b3IuQmEmJmYucGFyZW50KGEubW9uaXRvci5BbnlTcGFNb25pdG9yLnZwKSxjLnZkKGYsaCksYi5vU1RPKGMuY20sYy5BaSk7ZGVsZXRlIGguX2FkcnVtQWpheFQ7YS5qLm4uRy5YaShmLnVybCgpKX07Yy5MZz1mdW5jdGlvbihoLGYpe3ZhciBuPXt9O2guQWU9bjtkZWxldGUgaC5fYWRydW1BamF4VDt2YXIgbT17fTtpZihoIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3QpdHJ5e2lmKG09e3N0YXR1czpoLnN0YXR1cyxnZXRBbGxSZXNwb25zZUhlYWRlcnM6aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKX0sNDAwPD1oLnN0YXR1cylpZihiLmlzU3RyaW5nKGguc3RhdHVzVGV4dCkpbS5zdGF0dXNUZXh0PWguc3RhdHVzVGV4dDtlbHNlIHRyeXttLnJlc3BvbnNlVGV4dD1oLnJlc3BvbnNlVGV4dH1jYXRjaChlKXttLnJlc3BvbnNlVHlwZT0KaC5yZXNwb25zZVR5cGV9fWNhdGNoKGwpe2EuZXJyb3IoIk0xMTQiLGwpfWIuZ2MoZnVuY3Rpb24oKXtoLkFlPT09biYmYy5yZXBvcnRYaHIobSxmKX0pfTtjLnJlcG9ydFhocj1mdW5jdGlvbihiLGYpe2MuZmgoYixmKTthLmNvbW1hbmQoInJlcG9ydFhociIsZil9O2MudmQ9ZnVuY3Rpb24oYixmKXtpZihsKGYuaCkpe3ZhciBuPWEuYy5IYyhmLmgpLmd1aWQ7Yy5maChmLGIpO2woYy5oYVtuXSl8fChjLmhhW25dPVtdKTstMT09Yy5oYVtuXS5pbmRleE9mKGIpJiZjLmhhW25dLnB1c2goYil9ZWxzZSBhLmxvZygifkFueVNQQTogZXJyb3IgaW4gcHV0SW5QYXJlbnRFdmVudFdhaXRpbmdRdWV1ZSgpIGFzIHhoci5hZHJ1bV9jYXVzYWxFdmVudCBpcyB1bmRlZmluZWQuIil9O2MuZmg9ZnVuY3Rpb24oYSxjKXt2YXIgbj1jLnJlc3BvbnNlfHxhLG09bi5zdGF0dXMsZTtiLmlzTnVtYmVyKG0pJiZjLnhoclN0YXR1cyhtKTtpZihuLmdldEFsbFJlc3BvbnNlSGVhZGVycyl7dmFyIGw9Yi5pc0Z1bmN0aW9uKG4uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKT8Kbi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTpuLmdldEFsbFJlc3BvbnNlSGVhZGVycztjLmFsbFJlc3BvbnNlSGVhZGVycyhsKX1pZig0MDA8PW0pe2lmKGIuaXNTdHJpbmcobi5zdGF0dXNUZXh0KSllPW4uc3RhdHVzVGV4dDtlbHNlIHRyeXtiLmlzU3RyaW5nKG4ucmVzcG9uc2VUZXh0KSYmKGU9bi5yZXNwb25zZVRleHQpfWNhdGNoKHApe2IuaXNTdHJpbmcobi5yZXNwb25zZVR5cGUpJiYoZT1uLnJlc3BvbnNlVHlwZSl9Yy5lcnJvcih7c3RhdHVzOm0sbXNnOmV9KX19O2MuU209ZnVuY3Rpb24oYSxiKXt2YXIgYz0iIjthLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihhLGIpe2MrPWIrIjogIithKyJcclxuIn0pO2IuYWxsUmVzcG9uc2VIZWFkZXJzKGMpfTtjLkJnPWZ1bmN0aW9uKGEpe2MuaGFbYV09W107ZGVsZXRlIGMuaGFbYV19O2Mud2w9ZnVuY3Rpb24oYixmKXt2YXIgbj1jLmhhW2ZdO2wobikmJihuLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5wYXJlbnQoYik7YS5jb21tYW5kKCJyZXBvcnRYaHIiLApjKX0pLGMuQmcoZikpfTtjLmNtPWZ1bmN0aW9uKCl7Zm9yKHZhciBoIGluIGMuaGEpe2Zvcih2YXIgZj0wLG49Yy5oYVtoXTtmPG4ubGVuZ3RoO2YrKyl7dmFyIG09bltmXTshbChhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cCkmJisrYy5oajw9Yi51YS5tYXhQZXJQYWdlVmlldz9hLmNvbW1hbmQoInJlcG9ydFhociIsbSk6bChhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cCkmJisrYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnAuSmU8PWIudWEubWF4UGVyUGFnZVZpZXcmJmEuY29tbWFuZCgicmVwb3J0WGhyIixtKX1jLkJnKGgpfX07cmV0dXJuIGN9KCk7ZS5BaT0yRTM7ZS5oYT17fTtlLmhqPTA7Yi52Yz1lfSkoYS51dGlsc3x8KGEudXRpbHM9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLmlzRGVmaW5lZCxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe31jLnNldFVwPWZ1bmN0aW9uKCl7Yy5leGNsdWRlPVt7dXJsczpbbmV3IFJlZ0V4cChhLmNvbmYuYmVhY29uVXJsSHR0cCsKYS5jb25mLmNvcnNFbmRwb2ludFBhdGgpLG5ldyBSZWdFeHAoYS5jb25mLmJlYWNvblVybEh0dHBzK2EuY29uZi5jb3JzRW5kcG9pbnRQYXRoKV19XTtjLmluY2x1ZGU9W107Yy5tYXhQZXJQYWdlVmlldz1jLlZsKGEuY29uZi51c2VyQ29uZiYmYS5jb25mLnVzZXJDb25mLnhocik7Yy5wYXlsb2FkUGFyYW1zPVtdO2MucGFyYW1ldGVyPXt9O2MudGcoYS5jb25mLnVzZXJDb25mJiZhLmNvbmYudXNlckNvbmYueGhyKX07Yy50Zz1mdW5jdGlvbihhKXtsKGEpJiYoYy5leGNsdWRlPWMuZXhjbHVkZS5jb25jYXQoYi56YihiLnBjLGEuZXhjbHVkZSkpLGMuaW5jbHVkZT1jLmluY2x1ZGUuY29uY2F0KGIuemIoYi5wYyxhLmluY2x1ZGUpKSxjLnBheWxvYWRQYXJhbXM9Yy5wYXlsb2FkUGFyYW1zLmNvbmNhdChiLnpiKGIucGMsYS5wYXlsb2FkUGFyYW1zKSksYy5wYXJhbWV0ZXI9Yi56YihiLldtLGEucGFyYW1ldGVyKSl9O2MuVmw9ZnVuY3Rpb24oaCl7aWYobChoKSl7aD1oLm1heFBlclBhZ2VWaWV3OwppZihiLmlzTnVtYmVyKGgpJiYwPGgpcmV0dXJuIGg7YS5yZXBvcnRBUElNZXNzYWdlKGEuVi55aCwidmFsdWUgaXMgbm90IHZhbGlkOyBkb24ndCBsaW1pdCB4aHIiLCJ4aHIubWF4UGVyUGFnZVZpZXciLFtoXSl9cmV0dXJuIGEuY29uZi5zcGEyP2MuSGg6Yy5HaH07Yy5sYz1mdW5jdGlvbihhLGYpe3ZhciBuPWMuaW5jbHVkZSxtPWMuZXhjbHVkZTtyZXR1cm4gbChuKSYmMDxuLmxlbmd0aCYmIWIuVmIoZixhLG4pfHxsKG0pJiYwPG0ubGVuZ3RoJiZiLlZiKGYsYSxtKX07Yy5VZz1mdW5jdGlvbihhLGYpe3ZhciBuPWMucGF5bG9hZFBhcmFtcztiLlZiKGEubWV0aG9kKCksYS51cmwoKSxuKSYmYS5kYXRhT2JqZWN0KHtkYXRhOmZ9KX07cmV0dXJuIGN9KCk7ZS5HaD01MDtlLkhoPTI1MDtiLnVhPWV9KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe2IucGFyc2VVUkk9ZnVuY3Rpb24oYSl7dmFyIGI9U3RyaW5nKGEpLnJlcGxhY2UoL15ccyt8XHMrJC9nLAoiIikubWF0Y2goL14oW146XC8/I10rOik/KD86XC9cLyg/OihbXjpAXC8/I10qKSg/OjooW146QFwvPyNdKikpP0ApPygoW146XC8/I10qKSg/OjooXGQqKSk/KSk/KFtePyNdKikoXD9bXiNdKik/KCNbXHNcU10qKT8vKTthPWImJm51bGwhPWEubWF0Y2goYlsxXSsiLy8iKTtyZXR1cm4gYiYme2hyZWY6YlswXXx8IiIscHJvdG9jb2w6YlsxXXx8IiIsc2xhc2g6YT8iLy8iOiIiLHVzZXJuYW1lOmJbMl18fCIiLHBhc3N3b3JkOmJbM118fCIiLGhvc3Q6Yls0XXx8IiIsaG9zdG5hbWU6Yls1XXx8IiIscG9ydDpiWzZdfHwiIixwYXRobmFtZTpiWzddfHwiIixzZWFyY2g6Yls4XXx8IiIsaGFzaDpiWzldfHwiIn19O2IuYWJzb2x1dGl6ZVVSST1mdW5jdGlvbihhLGUpe2Z1bmN0aW9uIGMoYSl7dmFyIGI9W107YS5yZXBsYWNlKC9eKFwuXC4/KFwvfCQpKSsvLCIiKS5yZXBsYWNlKC9cLyhcLihcL3wkKSkrL2csIi8iKS5yZXBsYWNlKC9cL1wuXC4kLywiLy4uLyIpLnJlcGxhY2UoL1wvP1teXC9dKi9nLApmdW5jdGlvbihhKXsiLy4uIj09PWE/Yi5wb3AoKTpiLnB1c2goYSl9KTtyZXR1cm4gYi5qb2luKCIiKS5yZXBsYWNlKC9eXC8vLCIvIj09PWEuY2hhckF0KDApPyIvIjoiIil9dmFyIGgsZixuLG0scSx0LHAscjtyPWU/Yi5wYXJzZVVSSShlKTp7fTtwPWE/Yi5wYXJzZVVSSShhKTp7fTtyLnByb3RvY29sPyhoPXIucHJvdG9jb2wsZj1yLnNsYXNoLG49ci51c2VybmFtZSxtPXIucGFzc3dvcmQscT1yLmhvc3QsdD1jKHIucGF0aG5hbWUpLHA9ci5zZWFyY2gpOnIuaG9zdD8oaD1wLnByb3RvY29sLGY9cC5zbGFzaCxuPXIudXNlcm5hbWUsbT1yLnBhc3N3b3JkLHE9ci5ob3N0LHQ9YyhyLnBhdGhuYW1lKSxwPXIuc2VhcmNoKTooaD1wLnByb3RvY29sLGY9cC5zbGFzaCxuPXAudXNlcm5hbWUsbT1wLnBhc3N3b3JkLHE9cC5ob3N0LHIucGF0aG5hbWU/KCIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3Q9YyhyLnBhdGhuYW1lKToodD1wLnBhdGhuYW1lP3AucGF0aG5hbWUuc2xpY2UoMCwKcC5wYXRobmFtZS5sYXN0SW5kZXhPZigiLyIpKzEpK3IucGF0aG5hbWU6Zj8iLyIrci5wYXRobmFtZTpyLnBhdGhuYW1lLHQ9Yyh0KSkscD1yLnNlYXJjaCk6KHQ9YyhwLnBhdGhuYW1lKSxwPXIuc2VhcmNofHxwLnNlYXJjaCkpO3JldHVybiBoK2YrKG4/bisobT8iOiIrbToiIikrIkAiOiIiKStxK3QrcCsoci5oYXNoP3IuaGFzaDoiIil9O2IuZ2V0RnVsbHlRdWFsaWZpZWRVcmw9ZnVuY3Rpb24obCl7dHJ5e3ZhciBlLGM9ZG9jdW1lbnQubG9jYXRpb24uaHJlZixoO2E6e2Zvcih2YXIgZj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYmFzZSIpLG49MDtuPGYubGVuZ3RoO24rKyl7dmFyIG09ZltuXS5ocmVmO2lmKG0pe2g9bTticmVhayBhfX1oPXZvaWQgMH1lPWg/Yi5hYnNvbHV0aXplVVJJKGMsaCk6YztyZXR1cm4gYi5hYnNvbHV0aXplVVJJKGUsbCl9Y2F0Y2gocSl7cmV0dXJuIGEuZXhjZXB0aW9uKHEsIk0xMTUiLGwsZSksbH19fSkoYS51dGlsc3x8KGEudXRpbHM9Cnt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS51dGlscy5pc1N0cmluZyxlPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGgoKXt2YXIgYT1jLmNhbGwodGhpcyl8fHRoaXM7YS5jYT0wO2EuY2E9MDtyZXR1cm4gYX12KGgsYyk7aC5wcm90b3R5cGUuZmM9ZnVuY3Rpb24oKXt0aGlzLmNhPTB9O2gubD1mdW5jdGlvbihiKXt2YXIgYz1iLm1lc3NhZ2V8fGIuZGVzY3JpcHRpb24sbT1iLmZpbGVOYW1lfHxiLmZpbGVuYW1lLGg9Yi5saW5lTnVtYmVyLGU9Yi5jb2x1bW5OdW1iZXI7bChiLmRlc2NyaXB0aW9uKSYmMDw9Yi5kZXNjcmlwdGlvbi5pbmRleE9mKCJBY2Nlc3MgaXMgZGVuaWVkLiIpJiYoYys9IjogbWF5YmUgeW91IGhhdmUgQ09SUyBYSFIgZXJyb3IgaW4gSUUiKTthLm1vbml0b3IuZ2EuSGEoYyxtLGgsZSxiKX07aC5QZj1mdW5jdGlvbihhKXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Yy5ocmVmPWE7YT1kb2N1bWVudC5sb2NhdGlvbjsKdmFyIG09YS5wcm90b2NvbDtyZXR1cm4gYy5wcm90b2NvbD09PW0mJmMuaG9zdG5hbWU9PT1hLmhvc3RuYW1lJiZoLlBsKGIuWEhSTW9uaXRvci5CalttXSxjLnBvcnQsYS5wb3J0KX07aC5QbD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuKGJ8fGEpPT09KGN8fGEpfTtyZXR1cm4gaH0oYi53Yyk7ZS5Caj17Imh0dHA6IjoiODAiLCJodHRwczoiOiI0NDMifTtiLnZhPWV9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLnVhLGU9YS51dGlscy52YyxjPWEudXRpbHMubWVyZ2VKU09OLGg9YS5ldmVudHMuQWRydW1BamF4LGY9YS51dGlscy5pc1N0cmluZyxuPWEudXRpbHMuaXNEZWZpbmVkLG09YS51dGlscy5pc051bWJlcixxPWEudXRpbHMuZ2V0RnVsbHlRdWFsaWZpZWRVcmwsdD1hLmNvbmYuc3BhMjtiLmNiPW51bGw7Yi5vaD13aW5kb3cuZmV0Y2g7dmFyIHA9ZnVuY3Rpb24ocCl7ZnVuY3Rpb24gaygpe3JldHVybiBudWxsIT09CnAmJnAuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXYoayxwKTtrLnByb3RvdHlwZS5Oaz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywiZmV0Y2giKTtpZighY3x8Yy5jb25maWd1cmFibGUpe2MmJmRlbGV0ZSBjLndyaXRhYmxlO2MmJmRlbGV0ZSBjLnZhbHVlO2N8fChjPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pO3ZhciBmPWMuc2V0LG09Yy5nZXQ7Yy5zZXQ9ZnVuY3Rpb24oYyl7ITAhPT1jLmlzQWdlbnRGZXRjaCYmKG4oZikmJmYuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4oYi5jYil8fGEuc2V0VXAoYykpfTtjLmdldD1mdW5jdGlvbigpe3ZhciBhPWIub2g7bihtKSYmKGE9bS5hcHBseSh0aGlzLGFyZ3VtZW50cykpO24oYi5jYikmJihhPWIuY2IpO3JldHVybiBhfX1PYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJmZXRjaCIsYyl9O2sucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKGYpe3ZhciBtPQp0aGlzO2Y9Znx8d2luZG93LmZldGNofHxiLm9oO2EubG9nKCJNMTE2Iik7aWYobihmKSl7dmFyIHE9ZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKGYsaCl7dmFyIG49YXJndW1lbnRzO2EubG9nKCJNMTE3IixtLl9hZHJ1bUFqYXhULnVybCgpLG0uX2FkcnVtQWpheFQubWV0aG9kKCkpO3ZhciBsPWEudXRpbHMubm93KCk7Yi52YS5QZihtLl9hZHJ1bUFqYXhULnVybCgpKSYmKG49ay5SaShhcmd1bWVudHMpKTt2YXIgcT1jLmFwcGx5KHRoaXMsbikscD1uZXcgd2luZG93LlByb21pc2UoZnVuY3Rpb24oYixjKXtxLnRoZW4oZnVuY3Rpb24oYyl7YS5sb2coIk0xMTgiLG0uX2FkcnVtQWpheFQudXJsKCkpO2EubG9nKCJNMTE5IixsLG0uX2FkcnVtQWpheFQudXJsKCkpO2UuU20oYyxwLl9hZHJ1bUFqYXhUKTtwLl9hZHJ1bUFqYXhULm1hcmtGaXJzdEJ5dGVUaW1lKHAuX2FkcnVtQWpheFQuZ2V0Rmlyc3RCeXRlVGltZSgpfHxhLnV0aWxzLm5vdygpKTtwLl9hZHJ1bUFqYXhULnJlc3BvbnNlPQpjO2lmKGcoYy5jbG9uZSkpe2EubG9nKCJNMTIwIixtLl9hZHJ1bUFqYXhULnVybCgpKTt2YXIgZj1jLmNsb25lKCkudGV4dCgpO2ZbImNhdGNoIl0oZnVuY3Rpb24oKXtrLlRjKHApfSk7ay54ayhmLHApfWVsc2UgYS5sb2coIk0xMjEiLG0uX2FkcnVtQWpheFQudXJsKCkpLGsud20ocCxjKTtiKGMpfSk7cVsiY2F0Y2giXShmdW5jdGlvbihiKXthLmxvZygiTTEyMiIsbS5fYWRydW1BamF4VC51cmwoKSk7cC5fYWRydW1BamF4VC5tYXJrRmlyc3RCeXRlVGltZShwLl9hZHJ1bUFqYXhULmdldEZpcnN0Qnl0ZVRpbWUoKXx8YS51dGlscy5ub3coKSk7ay5UYyhwKTtjKGIpfSl9KTtwLl9hZHJ1bUFqYXhUPW0uX2FkcnVtQWpheFQ7cC5JPSEwO3AuX2FkcnVtQWpheFQudGltZXN0YW1wKGwpO3AuX2FkcnVtQWpheFQubWFya1NlbmRUaW1lKGwpO3AuX2FkcnVtQWpheFQucGFyZW50UGhhc2UoYS5saWZlY3ljbGUuZ2V0UGhhc2VOYW1lKCkpO2sucW0ocC5fYWRydW1BamF4VCxhcmd1bWVudHMpOwphLmxvZygiTTEyMyIsbCxtLl9hZHJ1bUFqYXhULnVybCgpKTt0JiYocC5oPW5ldyBhLkRiKGEuYy5pYSgpLG5ldyBhLkthKCJ3aW5kb3cuZmV0Y2giKSxhLkNhdXNlVHlwZS5GRVRDSCkpO3JldHVybiBwfX07cS5pc0FnZW50RmV0Y2g9ITA7Yi5jYj1hLmFvcC5hcm91bmQocShmKSxmdW5jdGlvbigpe3ZhciBmPWsucWsoYXJndW1lbnRzKTshdCYmKyttLmNhK2IueGhyTW9uaXRvci5jYT49bC5tYXhQZXJQYWdlVmlld3x8bC5sYyhmLnVybCxmLm1ldGhvZCk/YS5sb2coIk0xMjQiLGYudXJsKToobS5fYWRydW1BamF4VD1uZXcgaChjKGYsbS5zdGF0dXMpKSx0JiYobS5oPWEuYy5PYSgid2luZG93LmZldGNoLnNlbmQiLHZvaWQgMCxhLmMuaWEoKSxhLkNhdXNlVHlwZS5GRVRDSCksYS5jLnFhKG0uaCkpKX0sZnVuY3Rpb24oKXshdCYmbS5jYStiLnhock1vbml0b3IuY2E+PWwubWF4UGVyUGFnZVZpZXc/YS5sb2coIk0xMjUiLG0uX2FkcnVtQWpheFQudXJsKCkpOmwubGMobS5fYWRydW1BamF4VC51cmwoKSwKbS5fYWRydW1BamF4VC5tZXRob2QoKSk/YS5sb2coIk0xMjYiLG0uX2FkcnVtQWpheFQudXJsKCkpOnQmJihhLmoubi5HLkJlKG0uX2FkcnVtQWpheFQudXJsKCkpLGEuYy5MKCkpfSwiZmV0Y2giLGIudmEubCk7d2luZG93LmZldGNoPWIuY2J9fTtrLnhrPWZ1bmN0aW9uKGIsYyl7Yi50aGVuKGZ1bmN0aW9uKGIpe3ZhciBmPWEudXRpbHMubm93KCk7ay5hYShjKSYmKGMuX2FkcnVtQWpheFQucmVzcG9uc2UucmVzcG9uc2VUZXh0PWIsay4kZihjLl9hZHJ1bUFqYXhULGYpLGI9Yy5fYWRydW1BamF4VC5nZXRSZXNwUHJvY1RpbWUoKSxuKGIpfHxuKGMuX2FkcnVtQWpheFQudykmJjAhPT1jLl9hZHJ1bUFqYXhULnd8fChhLmxvZygiTTEyNyIsZixjLl9hZHJ1bUFqYXhULnVybCgpKSxjLl9hZHJ1bUFqYXhULm1hcmtSZXNwUHJvY1RpbWUoZiksay5UYShjKSkpfSlbImNhdGNoIl0oZnVuY3Rpb24oKXtrLlRjKGMpfSl9O2suVGM9ZnVuY3Rpb24oYil7YS5sb2coIk0xMjgiLGIuX2FkcnVtQWpheFQudXJsKCkpOwp2YXIgYz1hLnV0aWxzLm5vdygpO2suYWEoYikmJihrLiRmKGIuX2FkcnVtQWpheFQsYyksay5hZyhiLl9hZHJ1bUFqYXhULGMpLGsuVGEoYikpfTtrLiRmPWZ1bmN0aW9uKGIsYyl7dmFyIGY9Yi5nZXRSZXNwQXZhaWxUaW1lKCk7bihmKXx8KGEubG9nKCJNMTI5IixjLGIudXJsKCkpLGIubWFya1Jlc3BBdmFpbFRpbWUoYykpfTtrLmFnPWZ1bmN0aW9uKGIsYyl7dmFyIGY9Yi5nZXRSZXNwUHJvY1RpbWUoKTtpZihuKGYpKXJldHVybiExO2EubG9nKCJNMTMwIixjLGIudXJsKCkpO2IubWFya1Jlc3BQcm9jVGltZShjKTtyZXR1cm4hMH07ay53bT1mdW5jdGlvbihhLGIpe2IuZWo9ay5BYihhLGIuZWopO2IubGo9ay5BYihhLGIubGopO2IuVWo9ay5BYihhLGIuVWopO2Iucmw9ay5BYihhLGIucmwpO2IudGV4dD1rLkFiKGEsYi50ZXh0KX07ay5BYj1mdW5jdGlvbihiLGMpe3JldHVybiBhLmFvcC5hcm91bmQoYyxmdW5jdGlvbigpe2suYWEoYikmJmIuX2FkcnVtQWpheFQubWFya1Jlc3BBdmFpbFRpbWUoYS51dGlscy5ub3coKSl9LApmdW5jdGlvbigpe2suYWEoYikmJihiLl9hZHJ1bUFqYXhULm1hcmtSZXNwUHJvY1RpbWUoYS51dGlscy5ub3coKSksay5UYShiKSl9LCJ3cmFwUmVzcG9uc2VSZWFkZXIiLGEubW9uaXRvci5FcnJvck1vbml0b3IubCl9O2suUmk9ZnVuY3Rpb24oYSl7MT09YS5sZW5ndGg/ZihhWzBdKT8oW10ucHVzaC5jYWxsKGEse30pLGsuRWMoYVsxXSkpOmsuRWMoYVswXSk6Mj09YS5sZW5ndGgmJmsuRWMoYVsxXSk7cmV0dXJuIGF9O2suRWM9ZnVuY3Rpb24oYil7bihiKSYmKG4oYi5oZWFkZXJzKXx8KGIuaGVhZGVycz1uZXcgSGVhZGVycyxhLmxvZygiTTEzMSIpKSxiLmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzP2IuaGVhZGVycy5oYXMoIkFEUlVNIik/Yi5oZWFkZXJzLnNldCgiQURSVU0iLCJpc0FqYXg6dHJ1ZSIpOmIuaGVhZGVycy5hcHBlbmQoIkFEUlVNIiwiaXNBamF4OnRydWUiKTpiLmhlYWRlcnMuQURSVU09ImlzQWpheDp0cnVlIil9O2sucW09ZnVuY3Rpb24oYixjKXsyPD1jLmxlbmd0aCYmCmEudXRpbHMuaXNPYmplY3QoY1sxXSkmJm4oY1sxXS5ib2R5KSYmbC5VZyhiLGNbMV0uYm9keSl9O2sucWs9ZnVuY3Rpb24oYil7dmFyIGM9e3VybDoiIixtZXRob2Q6IiJ9O2EudXRpbHMuaXNPYmplY3QoYlswXSk/KGMudXJsPWJbMF0udXJsfHwoYS51dGlscy5pc0RlZmluZWQoYlswXS50b1N0cmluZyk/YlswXS50b1N0cmluZygpOnZvaWQgMCksYy5tZXRob2Q9YlswXS5tZXRob2R8fCJHRVQiKTpmKGJbMF0pJiYoYy51cmw9YlswXSxjLm1ldGhvZD1iWzFdJiZiWzFdLm1ldGhvZHx8IkdFVCIpO2MudXJsPW4oYy51cmwpP2MudXJsOiIiO2MudXJsPXEoYy51cmwpO2MubWV0aG9kPWMubWV0aG9kO3JldHVybiBjfTtrLkhrPWZ1bmN0aW9uKGIpe3ZhciBjO24oYyl8fChhLmxvZygiTTEzMiIsYi5fYWRydW1BamF4VC51cmwoKSksYz0xKTtuKGIuX2FkcnVtQWpheFQudykmJm0oYi5fYWRydW1BamF4VC53KSYmKGIuX2FkcnVtQWpheFQudys9YyxhLmxvZygiTTEzMyIsYi5fYWRydW1BamF4VC53LApiLl9hZHJ1bUFqYXhULnVybCgpKSl9O2suTWI9ZnVuY3Rpb24oYil7dmFyIGM7bihjKXx8KGEubG9nKCJNMTM0IixiLl9hZHJ1bUFqYXhULnVybCgpKSxjPTEpO24oYi5fYWRydW1BamF4VC53KSYmbShiLl9hZHJ1bUFqYXhULncpJiYoYi5fYWRydW1BamF4VC53LT1jLGEubG9nKCJNMTM1IixiLl9hZHJ1bUFqYXhULncsYi5fYWRydW1BamF4VC51cmwoKSkpfTtrLmFhPWZ1bmN0aW9uKGEpe3JldHVybiBuKGEuX2FkcnVtQWpheFQpfTtrLlJiPWZ1bmN0aW9uKGEpe3JldHVybiBuKGEuX2FkcnVtQWpheFQudyl9O2suVW09ZnVuY3Rpb24oYixjKXtiLl9hZHJ1bUFqYXhUPWMuX2FkcnVtQWpheFQ7Yi5fYWRydW1BamF4VC53Kz1iLkQ7YS5sb2coIk0xMzYiLGIuX2FkcnVtQWpheFQudyxjLl9hZHJ1bUFqYXhULnVybCgpKTtiLkQ9MH07ay5YbT1mdW5jdGlvbihhKXt2YXIgYj0hMTtrLmFhKGEpJiZuKGEuX2FkcnVtQWpheFQudykmJihrLkhrKGEpLGI9ITApO3JldHVybiBifTtrLlRhPWZ1bmN0aW9uKGEpe2Uud2QoYSwKYS5fYWRydW1BamF4VCl9O2suUWQ9ZnVuY3Rpb24oYil7dmFyIGM9YS51dGlscy5ub3coKTtyZXR1cm4gMD09PWIuX2FkcnVtQWpheFQudyYmbihiLl9hZHJ1bUFqYXhUKT9rLmFnKGIuX2FkcnVtQWpheFQsYyk6ITF9O2suUGQ9ZnVuY3Rpb24oYil7dmFyIGM9ITEsZj1hLnV0aWxzLm5vdygpLG09Yi5fYWRydW1BamF4VC5nZXRSZXNwQXZhaWxUaW1lKCk7bihtKXx8KGIuX2FkcnVtQWpheFQubWFya1Jlc3BBdmFpbFRpbWUoZiksYz0hMCk7cmV0dXJuIGN9O2suSms9ZnVuY3Rpb24oYil7YS5sb2coIk0xMzciLGIuX2FkcnVtQWpheFQudXJsKCkpO2IuX2FkcnVtQWpheFQudz0wfTtyZXR1cm4ga30oYi52YSk7Yi5lZT1wO2IuaWI9bmV3IGIuZWV9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLmlzT2JqZWN0LGU9YS51dGlscy5tYXAsYz1hLnV0aWxzLnJlZHVjZSxoPWEudXRpbHMuZmlsdGVyLApmPWEudXRpbHMuaXNEZWZpbmVkLG49YS51dGlscy5pc1N0cmluZyxtPWEudXRpbHMubWVyZ2VKU09OLHE9YS51dGlscy53YSx0PWEudXRpbHMuZ2MscD1hLnV0aWxzLnVhLGs9YS51dGlscy52YyxzPWEuY29uZi5zcGEyLHc9ZnVuY3Rpb24odyl7ZnVuY3Rpb24gdSgpe3ZhciBiPXcuY2FsbCh0aGlzKXx8dGhpcztiLklkPSExO2lmKCEwPT09d2luZG93WyJhZHJ1bS14aHItZGlzYWJsZSJdKXJldHVybiBhLmxvZygiTTEzOCIpLGI7aWYoIXdpbmRvdy5YTUxIdHRwUmVxdWVzdClyZXR1cm4gYS5sb2coIk0xMzkiKSxiO2IuQz13aW5kb3cuWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlO2lmKCFiLkMpcmV0dXJuIGEubG9nKCJNMTQwIiksYjtpZighKCJvcGVuImluIGIuQyYmInNlbmQiaW4gYi5DKSlyZXR1cm4gYS5sb2coIk0xNDEiKSxiO2IuSWQ9YS5hb3Auc3VwcG9ydChiLkMub3BlbikmJmEuYW9wLnN1cHBvcnQoYi5DLnNlbmQpO2IuSWR8fGEubG9nKCJNMTQyIik7cmV0dXJuIGJ9dih1LAp3KTt1LnByb3RvdHlwZS5zZXRVcD1mdW5jdGlvbigpe2lmKHRoaXMuSWQpe2EubG9nKCJNMTQzIik7YS54aHJDb25zdHJ1Y3Rvcj13aW5kb3cuWE1MSHR0cFJlcXVlc3Q7YS54aHJPcGVuPXRoaXMueGhyT3Blbj10aGlzLkMub3BlbjthLnhoclNlbmQ9dGhpcy54aHJTZW5kPXRoaXMuQy5zZW5kO3Auc2V0VXAoKTt2YXIgYz10aGlzO3RoaXMuQy5vcGVuPWEuYW9wLmFyb3VuZCh0aGlzLkMub3BlbixmdW5jdGlvbigpe3UuaGwodGhpcykmJig0PT09dGhpcy5yZWFkeVN0YXRlPyhhLmxvZygiTTE0NCIpLHUuTWoodGhpcy5fYWRydW1BamF4VCksZGVsZXRlIHRoaXMuQWUsay5yZXBvcnRYaHIodGhpcyx0aGlzLl9hZHJ1bUFqYXhUKSk6YS5sb2coIk0xNDUiLHRoaXMuX2FkcnVtQWpheFQudXJsKCkpKTt2YXIgZj0xPD1hcmd1bWVudHMubGVuZ3RoP1N0cmluZyhhcmd1bWVudHNbMF0pOiIiLGg9Mjw9YXJndW1lbnRzLmxlbmd0aD9TdHJpbmcoYXJndW1lbnRzWzFdKToiIixoPWEudXRpbHMuZ2V0RnVsbHlRdWFsaWZpZWRVcmwoaCk7CiFzJiZjLmNhK2IuaWIuY2E+PXAubWF4UGVyUGFnZVZpZXd8fHAubGMoaCxmKXx8KHRoaXMuX2FkcnVtQWpheFQ9bmV3IGEuZXZlbnRzLkFkcnVtQWpheChtKHttZXRob2Q6Zix1cmw6aH0sYy5zdGF0dXMpKSl9LG51bGwsIlhIUi5vcGVuIixiLnZhLmwpO3RoaXMuQy5zZW5kPWEuYW9wLmFyb3VuZCh0aGlzLkMuc2VuZCxmdW5jdGlvbihmKXt2YXIgbT10aGlzLG49dGhpcy5fYWRydW1BamF4VCxlPSExO2lmKCEoIW58fCFzJiYrK2MuY2ErYi5pYi5jYT49cC5tYXhQZXJQYWdlVmlldykpe3ZhciBsPWEudXRpbHMubm93KCkscT1uLmdldFNlbmRUaW1lKCk7YS5hc3NlcnQobnVsbD09PXEsIk0xNDYiKTtuLnRpbWVzdGFtcChsKTtuLm1hcmtTZW5kVGltZShxfHxsKTtuLnBhcmVudFBoYXNlKGEubGlmZWN5Y2xlLmdldFBoYXNlTmFtZSgpKTtzJiYobS5oPWEuYy5PYSgiWEhSLnNlbmQiLHZvaWQgMCxhLmMuaWEoKSxhLkNhdXNlVHlwZS5YSFIpKTtiLnZhLlBmKG4udXJsKCkpP20uc2V0UmVxdWVzdEhlYWRlcigiQURSVU0iLAoiaXNBamF4OnRydWUiKTphLmxvZygiTTE0NyIsZG9jdW1lbnQubG9jYXRpb24uaHJlZixuLnVybCgpKTtwLlVnKG4sZik7Zj11Lm1rKG4udXJsKCkscC5wYXJhbWV0ZXIsZik7bi5wYXJhbWV0ZXIoZik7dmFyIGs9MCxyPWZ1bmN0aW9uKCl7aWYoND09bS5yZWFkeVN0YXRlKWU/YS5sb2coIk0xNDgiKTooYS5sb2coIk0xNDkiKSxjLnRjKG0pKTtlbHNle3ZhciBiPW51bGw7dHJ5e2I9bS5vbnJlYWR5c3RhdGVjaGFuZ2V9Y2F0Y2goZil7aWYoZSl7YS5sb2coIk0xNTAiLGYpO3JldHVybn1hLmxvZygiTTE1MSIsZik7Yy50YyhtKTtyZXR1cm59aysrO2I/YS5hb3Auc3VwcG9ydChiKT8obS5vbnJlYWR5c3RhdGVjaGFuZ2U9dS5aZShiLCJYSFIub25SZWFkeVN0YXRlQ2hhbmdlIiksaCYmYy5yaC5jYWxsKG0sInJlYWR5c3RhdGVjaGFuZ2UiLHUuYmYpLGEubG9nKCJNMTUyIixrKSk6aHx8KGEubG9nKCJNMTUzIiksYy50YyhtKSk6azx1Lk9pP3Qocik6ZT9hLmxvZygiTTE1NCIpOihhLmxvZygiTTE1NSIpLApjLnRjKG0pKX19O2lmKGgpe2EubG9nKCJNMTU2Iik7dHJ5e2MuaG4uY2FsbChtLCJyZWFkeXN0YXRlY2hhbmdlIix1LmJmKSxlPSEwfWNhdGNoKHcpe2EuZXJyb3IoIk0xNTciLHcpfX1yKCl9fSxmdW5jdGlvbigpe2lmKHMpe3ZhciBiPXRoaXMuX2FkcnVtQWpheFQ7YiYmYS5qLm4uRy5CZShiLnVybCgpKX19LCJYSFIuc2VuZCIsYi52YS5sKTt2YXIgaD0iYWRkRXZlbnRMaXN0ZW5lciJpbiB0aGlzLkMmJiJyZW1vdmVFdmVudExpc3RlbmVyImluIHRoaXMuQyYmYS5hb3Auc3VwcG9ydCh0aGlzLkMuYWRkRXZlbnRMaXN0ZW5lcikmJmEuYW9wLnN1cHBvcnQodGhpcy5DLnJlbW92ZUV2ZW50TGlzdGVuZXIpO2lmKGgpe3ZhciBuPWEudXRpbHMubmYodGhpcy5DLCJhZGRFdmVudExpc3RlbmVyIik7dGhpcy5obj1uLmFkZEV2ZW50TGlzdGVuZXI7bi5hZGRFdmVudExpc3RlbmVyPWEuYW9wLmFyb3VuZChuLmFkZEV2ZW50TGlzdGVuZXIsZnVuY3Rpb24oYixjLG0pe2lmKGYoYykmJihjLkk9CiEwLHRoaXMgaW5zdGFuY2VvZiBYTUxIdHRwUmVxdWVzdCYmL14obG9hZHxlcnJvcnxyZWFkeXN0YXRlY2hhbmdlKSQvLnRlc3QoYikmJmMpKXt2YXIgaD11Lk9tKGMpO2lmKGgpe3ZhciBuPXEoYXJndW1lbnRzKTtuWzFdPWg7YS5sb2coIk0xNTgiKTtyZXR1cm4gbn1hLmxvZygiTTE1OSIsYixjKX19LG51bGwsIlhIUi5hZGRFdmVudExpc3RlbmVyIik7bj1hLnV0aWxzLm5mKHRoaXMuQywicmVtb3ZlRXZlbnRMaXN0ZW5lciIpO3RoaXMucmg9bi5yZW1vdmVFdmVudExpc3RlbmVyO24ucmVtb3ZlRXZlbnRMaXN0ZW5lcj1hLmFvcC5hcm91bmQobi5yZW1vdmVFdmVudExpc3RlbmVyLGZ1bmN0aW9uKGIsZixtKXtpZih0aGlzIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3QmJnRoaXMuX2FkcnVtQWpheFQpe3ZhciBoPXEoYXJndW1lbnRzKTtmLl9fYWRydW1JbnRlcmNlcHRvcj8oaFsxXT1mLl9fYWRydW1JbnRlcmNlcHRvcixhLmxvZygiTTE2MCIpLGMucmguYXBwbHkodGhpcyxoKSk6YS5sb2coIk0xNjEiKX19LApudWxsLCJYSFIucmVtb3ZlRXZlbnRMaXN0ZW5lciIpfWVsc2UgYS5sb2coIk0xNjIiKTthLmxvZygiTTE2MyIpfX07dS5taz1mdW5jdGlvbihiLGYsbil7aWYoZiYmKGY9aChlKGgoZixmdW5jdGlvbihjKXtyZXR1cm4gYS51dGlscy5kZyhiLGMudXJscyl9KSxmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRGcm9tQm9keShuKX0pLGwpLDA8Zi5sZW5ndGgpKXJldHVybiBjKGYsbSx7fSl9O3UuYWQ9ZnVuY3Rpb24oYil7dmFyIGM9Yi5fYWRydW1BamF4VDtpZihjKXt2YXIgZj1hLnV0aWxzLm5vdygpOzI9PWIucmVhZHlTdGF0ZT9jLm1hcmtGaXJzdEJ5dGVUaW1lKGMuZ2V0Rmlyc3RCeXRlVGltZSgpfHxmKTo0PT1iLnJlYWR5U3RhdGUmJihjLm1hcmtSZXNwQXZhaWxUaW1lKGMuZ2V0UmVzcEF2YWlsVGltZSgpfHxmKSxjLm1hcmtGaXJzdEJ5dGVUaW1lKGMuZ2V0Rmlyc3RCeXRlVGltZSgpfHxmKSxzJiYoYj1iLmg9YS5jLk9hKCJYSFIubG9hZCIsdm9pZCAwLGIuaCxhLkNhdXNlVHlwZS5YSFIpLAphLmMucWEoYikpKX19O3UuemY9ZnVuY3Rpb24oYil7dmFyIGM9Yi5fYWRydW1BamF4VDtpZihjJiY0PT1iLnJlYWR5U3RhdGUpe3ZhciBmPWEudXRpbHMubm93KCksbT1jLmdldFJlc3BQcm9jVGltZSgpO2MubWFya1Jlc3BBdmFpbFRpbWUoYy5nZXRSZXNwQXZhaWxUaW1lKCl8fGYpO2Y+bSYmYy5tYXJrUmVzcFByb2NUaW1lKGYpO2sud2QoYixjKTthLmNvbmYuc3BhMiYmYS5jLkwoKX19O3UuWmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdS5qbihhLGZ1bmN0aW9uKCl7dS5hZCh0aGlzKX0sZnVuY3Rpb24oKXt1LnpmKHRoaXMpfSxiKX07dS5iZj1mdW5jdGlvbigpe3UuYWQodGhpcyk7dS56Zih0aGlzKX07dS5obD1mdW5jdGlvbihhKXtyZXR1cm4gZihhLl9hZHJ1bUFqYXhUKSYmbihhLl9hZHJ1bUFqYXhULl91cmwpfTt1Lk1qPWZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMubm93KCk7Yi5tYXJrUmVzcEF2YWlsVGltZShiLmdldFJlc3BBdmFpbFRpbWUoKXx8Yyk7Yi5tYXJrRmlyc3RCeXRlVGltZShiLmdldEZpcnN0Qnl0ZVRpbWUoKXx8CmMpO2IubWFya1Jlc3BQcm9jVGltZShiLmdldFJlc3BQcm9jVGltZSgpfHxjKX07dS5wcm90b3R5cGUudGM9ZnVuY3Rpb24oYil7aWYoYi5fYWRydW1BamF4VCl7dmFyIGM9YS51dGlscy5ub3coKSszRTQsZj1mdW5jdGlvbigpe3UuYWQoYik7dmFyIG09Yi5fYWRydW1BamF4VDtpZihtKXt2YXIgaD1hLnV0aWxzLm5vdygpOzQ9PWIucmVhZHlTdGF0ZT8oYS5hc3NlcnQobnVsbD09PW0uZ2V0UmVzcFByb2NUaW1lKCksIk0xNjQiKSxtLm1hcmtSZXNwUHJvY1RpbWUobS5nZXRSZXNwUHJvY1RpbWUoKXx8aCksYS5sb2coIk0xNjUiKSxrLndkKGIsbSksYS5jb25mLnNwYTImJmEuYy5MKCkpOmg8Yz9hLnV0aWxzLm9TVE8oZix1LmJlKTooZGVsZXRlIGIuX2FkcnVtQWpheFQsYS5sb2coIk0xNjYiKSl9fTtmKCl9fTt1LmpuPWZ1bmN0aW9uKGIsYyxmLG0pe3ZhciBoPWI7YiYmIm9iamVjdCI9PT10eXBlb2YgYiYmInRvU3RyaW5nImluIGImJiJbeHBjb25uZWN0IHdyYXBwZWQgbnNJRE9NRXZlbnRMaXN0ZW5lcl0iPT09CmIudG9TdHJpbmcoKSYmImhhbmRsZUV2ZW50ImluIGImJihoPWZ1bmN0aW9uKCl7Yi5oYW5kbGVFdmVudC5hcHBseSh0aGlzLHEoYXJndW1lbnRzKSl9KTtyZXR1cm4gYS5hb3AuYXJvdW5kKGgsYyxmLG0pfTt1Lk9tPWZ1bmN0aW9uKGIpe2lmKGIuX19hZHJ1bUludGVyY2VwdG9yKXJldHVybiBiLl9fYWRydW1JbnRlcmNlcHRvcjtpZihhLmFvcC5zdXBwb3J0KGIpKXt2YXIgYz11LlplKGIsIlhIUi5pbnZva2VFdmVudExpc3RlbmVyIik7cmV0dXJuIGIuX19hZHJ1bUludGVyY2VwdG9yPWN9fTtyZXR1cm4gdX0oYi52YSk7dy5PaT01O3cuYmU9NTA7Yi5YSFJNb25pdG9yPXc7Yi54aHJNb25pdG9yPW5ldyBiLlhIUk1vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLnZjLGU9ZnVuY3Rpb24oYyl7ZnVuY3Rpb24gaChiKXtiPWMuY2FsbCh0aGlzLGIpfHx0aGlzO2IucGVyZj1uZXcgYS5QZXJmb3JtYW5jZVRyYWNrZXI7CmIuJGU9ITE7Yi5KZT0wO3JldHVybiBifXYoaCxjKTtoLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnRUeXBlLlZQYWdlVmlld307aC5wcm90b3R5cGUuV2M9ZnVuY3Rpb24oKXtyZXR1cm4gYi5FdmVudFRyYWNrZXIuRGModGhpcy5ndWlkKCksdGhpcy51cmwoKSx0aGlzLnR5cGUoKSl9O2gucHJvdG90eXBlLkZkPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5XYygpO2EubW9uaXRvci5nYS5zZXQoInBhcmVudCIsYik7YS5sb2coIk0xNjciLGIuZ3VpZCgpLGIudXJsKCkpfTtoLnByb3RvdHlwZS5zdGFydENvcnJlbGF0aW5nWGhycz1mdW5jdGlvbigpe2EubG9nKCJNMTY4Iik7YS51dGlscy5pc0RlZmluZWQodGhpcy5lYikmJiFhLm1vbml0b3IuQW55U3BhTW9uaXRvci5CYSYmbC53bCh0aGlzLHRoaXMuZWIuZ3VpZCl9O2gucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5zdGFydENvcnJlbGF0aW5nWGhycygpO3RoaXMuRmQoKX07cmV0dXJuIGh9KGIuRXZlbnRUcmFja2VyKTsKYi5BbnlTcGFWUGFnZVZpZXc9ZTtiLk1hKGIuVFthLkV2ZW50VHlwZS5WUGFnZVZpZXddLGUucHJvdG90eXBlKX0pKGEuZXZlbnRzfHwoYS5ldmVudHM9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpe2EucmVwb3J0PWZ1bmN0aW9uKGIpe2EudXRpbHMuaXNPYmplY3QoYikmJmEudXRpbHMuaXNGdW5jdGlvbihiLnR5cGUpPy0xPT1bYS5FdmVudFR5cGUuUGFnZVZpZXcsYS5FdmVudFR5cGUuQWpheCxhLkV2ZW50VHlwZS5WUGFnZVZpZXcsYS5FdmVudFR5cGUuRXJyb3JdLmluZGV4T2YoYi50eXBlKCkpP2EucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYi50eXBlKCkrImlzIG5vdCBhIHZhbGlkIGV4dGVybmFsIGV2ZW50IHR5cGUiLCJBRFJVTS5yZXBvcnQiLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpOmEuY29uZi5zcGEyJiZhLkV2ZW50VHlwZS5WUGFnZVZpZXc9PWIudHlwZSgpP2EubG9nKCJNMTY5Iik6YS51dGlscy5nYyhmdW5jdGlvbigpe2EuY29tbWFuZCgicmVwb3J0RXZlbnQiLApiKX0pOmEucmVwb3J0QVBJTWVzc2FnZShhLlYuV2QsIiIsIkFEUlVNLnJlcG9ydCIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9O2EubWFya1ZpcnR1YWxQYWdlQmVnaW49ZnVuY3Rpb24oYixsKXthLmNvbmYuc3BhMiYmKHRoaXMuUGE9YS51dGlscy5pc0RlZmluZWQobCk/bDohMCxhLmxvZygiTTE3MCIsZG9jdW1lbnQuVVJMKSxhLm1vbml0b3IuQW55U3BhTW9uaXRvci5EZChkb2N1bWVudC5VUkwsYiwhMCksYS5tb25pdG9yLkFueVNwYU1vbml0b3IuUWcoKSl9O2EubWFya1ZpcnR1YWxQYWdlRW5kPWZ1bmN0aW9uKCl7YS5jb25mLnNwYTImJnRoaXMuUGEmJihhLmxvZygiTTE3MSIsYS5tb25pdG9yLkFueVNwYU1vbml0b3IuamEpLGEubW9uaXRvci5BbnlTcGFNb25pdG9yLmJnKGEubW9uaXRvci5BbnlTcGFNb25pdG9yLnZwLnN0YXJ0VGltZSxhLnV0aWxzLm5vdygpKSx0aGlzLlBhPSExKX19KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9CmEudXRpbHMuaXNEZWZpbmVkLGU9YS5hb3AuYWZ0ZXIsYz1hLmFvcC5iZWZvcmUsaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoKXt9Zi5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt2YXIgYz0hMTtmLnhhPWEudXRpbHMuaGIoKTthLmMuc2V0VXAoKTthLmNlLnNldFVwKCk7Zi50bSgpO2Euai5uLnNldFVwKGEudXRpbHMubm93KCkpO2YuamE9ZG9jdW1lbnQuVVJMO2YuUmM9W107YS51dGlscy5pc0RlZmluZWQod2luZG93Lmhpc3RvcnkpJiZhLnV0aWxzLmlzRnVuY3Rpb24od2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKSYmKGM9ITAsd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlPWEuYW9wLmFyb3VuZCh3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUsZnVuY3Rpb24oKXtiLkRPTUV2ZW50c01vbml0b3IuWmImJiFhLlBhJiYoYS5sb2coIk0xNzIiKSxmLkRkKGRvY3VtZW50LlVSTCkpfSxmdW5jdGlvbigpe2IuRE9NRXZlbnRzTW9uaXRvci5aYiYmKGEuUGE/KGEubG9nKCJNMTczIiksZi52cC51cmwoZG9jdW1lbnQuVVJMKSk6CihhLmxvZygiTTE3NCIpLGYuUWcoKSkpO2YuamE9ZG9jdW1lbnQuVVJMfSwiaGlzdG9yeVB1c2hTdGF0ZSIpKTtmLlJjPWYuUmMuY29uY2F0KGEudXRpbHMuemIoYS51dGlscy5wYyxhLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5zcGEmJmEuY29uZi51c2VyQ29uZi5zcGEuc3BhMiYmYS51dGlscy5pc09iamVjdChhLmNvbmYudXNlckNvbmYuc3BhLnNwYTIpJiZhLmNvbmYudXNlckNvbmYuc3BhLnNwYTIudnAmJmEuY29uZi51c2VyQ29uZi5zcGEuc3BhMi52cC5leGNsdWRlKSk7aWYoYS51dGlscy5pc0RlZmluZWQod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpKXt2YXIgYz0hMCxtPWZ1bmN0aW9uKCl7Zi5qYSE9ZG9jdW1lbnQuVVJMJiZmLlJnKCl9O20uST0hMDt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLG0pfWN8fGEubG9nKCJNMTc1Iil9O2YuUmc9ZnVuY3Rpb24oKXt2YXIgYz1kb2N1bWVudC5VUkw7YS5sb2coIk0xNzYiLGYuamEsYyk7Yi5ET01FdmVudHNNb25pdG9yLlpiJiYKKGEuUGE/KGEubG9nKCJNMTc3IiksZi52cC51cmwoZG9jdW1lbnQuVVJMKSk6KGYuRGQoZi5qYSksZi5HZChjKSkpO2YuamE9Y307Zi50bT1mdW5jdGlvbigpe3ZhciBiO2EuYy5xYT1lKGEuYy5xYSxmdW5jdGlvbigpe2I9bG9jYXRpb24uaGFzaH0pO2EuYy5MPWMoYS5jLkwsZnVuY3Rpb24oKXtiIT1sb2NhdGlvbi5oYXNoJiZmLmphIT1kb2N1bWVudC5VUkwmJmYuUmcoKX0pfTtmLkRkPWZ1bmN0aW9uKGEsYixjKXtmLm5tKCk7Zi5CYT0hMTtmLlllKGEsYixjKX07Zi5RZz1mdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LlVSTDtmLkdkKGEpO2YuamE9YX07Zi5Jbj1mdW5jdGlvbigpe2YuQmE9ITA7Zi5ZZShmLmphKTtmLkdkKCl9O2Yubm09ZnVuY3Rpb24oKXt2YXIgYz1hLmoubjthLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJmEuai5FYi5GYSYmYS51dGlscy5pc0RlZmluZWQoYi5ET01FdmVudHNNb25pdG9yLmN1cnJlbnRCYXNlUGFnZSkmJihhLmxvZygiTTE3OCIpLGMuRy5CfHwKYy5KLkI/Yy5uYXZDb21wbGV0ZShhLnV0aWxzLm5vdygpKTpjLm5hdkNvbXBsZXRlKGEudXRpbHMubWF4KGMuRy5EYSxjLkouYmEpKSxjLnJlc2V0KCkpO2YuQmF8fCFhLnV0aWxzLmlzRGVmaW5lZChmLnZwKXx8Zi52cC5EZ3x8KGEubG9nKCJNMTc5IiksYz1mLmNrKGEuai5uLkIpLGYuYmcoZi52cC5zdGFydFRpbWUsYykpfTtmLmNrPWZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMubm93KCk7Yj8oYz1mLmRrKGEuai5uLlFhKSxhLmoubi5yZXNldCgpKTpjPWYudnAudGltZXN0YW1wKCk7cmV0dXJuIGN9O2YueW09ZnVuY3Rpb24oYixjKXtyZXR1cm4gZi52cC4kZT8hMTpsKGMpJiYwPGMubGVuZ3RoJiZhLnV0aWxzLlZiKHZvaWQgMCxiLGMpfTtmLmRrPWZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMubm93KCk7Yj9hLmoubi5KLmNqKCl8fGEuai5uLkcuZGooKXx8KGM9YS51dGlscy5tYXgoYS5qLm4uSi5iYSxhLmoubi5HLkRhKSk6Yz1hLmoubi5zdGFydFRpbWU7cmV0dXJuIGN9O2YuYmc9CmZ1bmN0aW9uKGEsYil7Zi5rZChhLGIpO2YuWmYoYSk7Zi5yZXBvcnQoKX07Zi5ZZT1mdW5jdGlvbihiLGMsaCl7Zi5yZXNldCgpO2YudnA9bmV3IGEuZXZlbnRzLkFueVNwYVZQYWdlVmlldztmLnZwLnN0YXJ0VXJsPWI7YS51dGlscy5pc0RlZmluZWQoYykmJihmLnZwLnVzZXJQYWdlTmFtZT1jKTthLnV0aWxzLmlzQm9vbGVhbihoKSYmKGYudnAuJGU9aCk7Yj1hLmMuR2MoKTtmLnZwLnN0YXJ0VGltZT1mLkJhP2EudXRpbHMuaGIoKTphLnV0aWxzLmlzRGVmaW5lZChiKT9iLnN0YXJ0OmEudXRpbHMubm93KCk7Zi52cC5lYj1ifTtmLkdkPWZ1bmN0aW9uKGIpe2EudXRpbHMuaXNEZWZpbmVkKGIpJiZmLnZwLnVybChiKTtmLnZwLnN0YXJ0KCk7YS5QYXx8YS5qLm4uc3RhcnQoYS51dGlscy5ub3coKSl9O2Yua2Q9ZnVuY3Rpb24oYixjKXthLnV0aWxzLmlzRGVmaW5lZChmLnZwKSYmKGEuY29uZi5lbmFibGVQcmltYXJ5TWV0cmljcyYmZi5waihiKSxhLnV0aWxzLmlzRGVmaW5lZChjKT8KYS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzP2YudnAudGltZXN0YW1wKGMtYj5mLnZwLnZjdD9jOmYudnAudmN0K2IpOmYudnAudGltZXN0YW1wKGMpOmYudnAudGltZXN0YW1wKGIpKX07Zi5waj1mdW5jdGlvbihiKXthLmxvZygiTTE4MCIpO2I9YS5OLlVlKGIpO2YudnAudmN0PWIudmN0O2EuTi5yZXNldCgpfTtmLlpmPWZ1bmN0aW9uKGMpe2EudXRpbHMuaXNEZWZpbmVkKGYudnApJiZmLnZwLnJlc1RpbWluZyhiLnJlc291cmNlTW9uaXRvci5zayhmLnhhLGMpKX07Zi5jZD1mdW5jdGlvbigpe3ZhciBiPWEuYy52aygpO3JldHVybiBhLnV0aWxzLmlzRGVmaW5lZChiKSYmYS51dGlscy5pc0RlZmluZWQoZi52cCkmJighYS51dGlscy5pc0RlZmluZWQoZi52cC5lYil8fGYudnAuZWIhPWIpfTtmLnJlcG9ydD1mdW5jdGlvbigpe2lmKGEudXRpbHMuaXNEZWZpbmVkKGYudnApKWlmKGYueW0oZi52cC51cmwoKSxmLlJjKSlhLmxvZygiTTE4MiIsZi52cC51cmwoKSk7ZWxzZXthLmxvZygiTTE4MyIpOwp2YXIgYz1mLnZwO2lmKGMuRGcpYS5sb2coIk0xODQiKTtlbHNle3ZhciBtPWEudXRpbHMuaXNEZWZpbmVkKGIuRE9NRXZlbnRzTW9uaXRvci5jdXJyZW50QmFzZVBhZ2UpP2IuRE9NRXZlbnRzTW9uaXRvci5jdXJyZW50QmFzZVBhZ2UudXJsKCk6ZG9jdW1lbnQuVVJMO2MucGFyZW50VXJsKG0pO2EuY29tbWFuZCgiY2FsbCIsZnVuY3Rpb24oKXthLnJlcG9ydGVyLnJlcG9ydEV2ZW50KGMpfSk7Yy5EZz0hMH19ZWxzZSBhLmxvZygiTTE4MSIpfTtmLnJlc2V0PWZ1bmN0aW9uKCl7Zi52cD1udWxsfTtyZXR1cm4gZn0oKTtiLkFueVNwYU1vbml0b3I9aDtiLmJqPW5ldyBiLkFueVNwYU1vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLko9bmV3IGIuTGg7dGhpcy5HPW5ldyBiLkJoO3RoaXMuemw9M0UzO3RoaXMubWF4SW5hY3RpdmVUaW1lPWEuY29uZi51c2VyQ29uZiYmCmEuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZSYmYS5jb25mLnVzZXJDb25mLm5hdkNvbXBsZXRlLm1heEluYWN0aXZlVGltZT9hLmNvbmYudXNlckNvbmYubmF2Q29tcGxldGUubWF4SW5hY3RpdmVUaW1lOk1hdGgubWF4KHRoaXMuSi5wYix0aGlzLkcucGIpK3RoaXMuemw7dGhpcy5zZz0xRTN9ZS5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oYSl7dGhpcy5jdXJyZW50VGltZT10aGlzLnN0YXJ0VGltZT1hO3RoaXMuQj10aGlzLlFhPSExO3RoaXMuSi5zZXRVcChhKTt0aGlzLkcuc2V0VXAoYSl9O2UucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGEpe3RoaXMuc2V0VXAoYSk7dGhpcy5CPSEwO3RoaXMuSi5zdGFydChhKTt0aGlzLkcuc3RhcnQoYSk7dGhpcy5QZSgpO3RoaXMuQ20oKX07ZS5wcm90b3R5cGUuQ209ZnVuY3Rpb24oKXt0aGlzLmJoPWEudXRpbHMucmVmcy5zZXRJbnRlcnZhbC5jYWxsKHdpbmRvdyxmdW5jdGlvbigpe2EuUCgpO3RoaXMuY3VycmVudFRpbWU9YS51dGlscy5ub3coKTsKdmFyIGI9YS51dGlscy5tYXgodGhpcy5KLmJhLHRoaXMuRy5EYSk7aWYodGhpcy5jdXJyZW50VGltZS1iPj10aGlzLm1heEluYWN0aXZlVGltZSl7aWYoYS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiZlLkZhJiYhYS51dGlscy5pc0RlZmluZWQoYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKSl7YS5sb2coIk0xODUiKTtlLk5hPWUuTmF8fHRoaXMuUWE/dGhpcy5jdXJyZW50VGltZTpiO3JldHVybn10aGlzLmN1cnJlbnRUaW1lPWUuTmF8fHRoaXMuY3VycmVudFRpbWU7YS5sb2coIk0xODYiKTt0aGlzLm5hdkNvbXBsZXRlKHRoaXMuUWE/dGhpcy5jdXJyZW50VGltZTpiKTt0aGlzLnJlc2V0KCl9YS5RKCl9LmJpbmQodGhpcyksdGhpcy5zZyl9O2UucHJvdG90eXBlLldnPWZ1bmN0aW9uKCl7dGhpcy5RYXx8KHRoaXMuQW0oKSx0aGlzLlFhPSEwKX07ZS5wcm90b3R5cGUuUGU9ZnVuY3Rpb24oKXthLnV0aWxzLmlzRGVmaW5lZCh0aGlzLnlnKSYmY2xlYXJJbnRlcnZhbCh0aGlzLnlnKTsKYS51dGlscy5pc0RlZmluZWQodGhpcy5iaCkmJmNsZWFySW50ZXJ2YWwodGhpcy5iaCl9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5QZSgpO3RoaXMuQj10aGlzLlFhPSExO3RoaXMuSi5yZXNldCgpO3RoaXMuRy5yZXNldCgpfTtlLnByb3RvdHlwZS5uYXZDb21wbGV0ZT1mdW5jdGlvbihiKXthLlAoKTt2YXIgaD1hLnV0aWxzLmlzRGVmaW5lZChhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cCYmYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnAuc3RhcnRUaW1lKT9hLm1vbml0b3IuQW55U3BhTW9uaXRvci52cC5zdGFydFRpbWU6dGhpcy5zdGFydFRpbWU7YS5sb2coIk0xODciLGItaCk7YS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzP2UuRmE/KGEubW9uaXRvci5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZiYmKGEubW9uaXRvci5uYXZNb25pdG9yLlhlKCksYS5tb25pdG9yLnJlc291cmNlTW9uaXRvci5XZSgpKSxhLmxvZygiTTE4OCIpLGI9YS5OLlVlKGEudXRpbHMuaGIoKSksCmEubW9uaXRvci5ET01FdmVudHNNb25pdG9yLmN1cnJlbnRCYXNlUGFnZS52Y3Q9Yi52Y3QsYS5jb25mLnNwYTImJihhLm1vbml0b3IuRE9NRXZlbnRzTW9uaXRvci5jdXJyZW50QmFzZVBhZ2UucGN0PWIucGN0KSxhLmNvbW1hbmQoInJlcG9ydE9ubG9hZCIsYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKSxhLk4ucmVzZXQoKSxhLk4uemE9ITEsZS5GYT0hMSk6YS5tb25pdG9yLkFueVNwYU1vbml0b3Iua2QoaCxiKTooYS5tb25pdG9yLnJlc291cmNlTW9uaXRvci5iYXNlUGFnZVJlc291cmNlQnVmZmVyPVtdLGEubW9uaXRvci5BbnlTcGFNb25pdG9yLmtkKGgsYikpO2EubW9uaXRvci5BbnlTcGFNb25pdG9yLkJhfHwoYS5tb25pdG9yLkFueVNwYU1vbml0b3IuWmYoaCksYS5tb25pdG9yLkFueVNwYU1vbml0b3IucmVwb3J0KCkpO2EuUSgpO2EuaXNEZWJ1ZyYmeC5sb2coImV4ZWNUaW1lID0gIithLlNjKX07ZS5wcm90b3R5cGUuQW09ZnVuY3Rpb24oKXt0aGlzLnlnPQphLnV0aWxzLnJlZnMuc2V0SW50ZXJ2YWwuY2FsbCh3aW5kb3csZnVuY3Rpb24oKXthLlAoKTt0aGlzLmN1cnJlbnRUaW1lPWEudXRpbHMubm93KCk7dmFyIGI9dGhpcy5KLmJkKHRoaXMuY3VycmVudFRpbWUpOzA8PWImJmEubG9nKCJNMTg5IixiLXRoaXMuc3RhcnRUaW1lKTtiPXRoaXMuRy5iZCh0aGlzLmN1cnJlbnRUaW1lKTswPD1iJiZhLmxvZygiTTE5MCIsYi10aGlzLnN0YXJ0VGltZSk7aWYoIXRoaXMuRy5CJiYhdGhpcy5KLkIpe2I9YS51dGlscy5tYXgodGhpcy5HLkRhLHRoaXMuSi5iYSk7aWYoYS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiZlLkZhJiYhYS51dGlscy5pc0RlZmluZWQoYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKSl7YS5sb2coIk0xOTEiKTtlLk5hPWUuTmF8fGI7cmV0dXJufWI9ZS5OYXx8YjthLmxvZygiTTE5MiIpO3RoaXMubmF2Q29tcGxldGUoYik7dGhpcy5yZXNldCgpfWEuUSgpfS5iaW5kKHRoaXMpLHRoaXMuc2cpfTsKcmV0dXJuIGV9KCk7bC5GYT0hMDtsLk5hPTA7Yi5FYj1sO2Iubj1uZXcgYi5FYn0pKGEuanx8KGEuaj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dGhpcy5uYz1bXTt0aGlzLmVjKGIuQ2MsMCl9Yi5wcm90b3R5cGUuRGw9ZnVuY3Rpb24oYSl7dGhpcy5lYyhiLkNlLGEpfTtiLnByb3RvdHlwZS5GbD1mdW5jdGlvbihhKXt0aGlzLmVjKGIuS2UsYSl9O2IucHJvdG90eXBlLkVsPWZ1bmN0aW9uKGEpe3RoaXMuZWMoYi5FZSxhKX07Yi5wcm90b3R5cGUuZWM9ZnVuY3Rpb24oYSxiKXt0aGlzLm5jLnB1c2goe0NsOihuZXcgRGF0ZSkuZ2V0VGltZSgpLEJsOmIscGc6YX0pO3RoaXMueGo9YX07Yi5wcm90b3R5cGUuZ2V0UGhhc2VOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueGp9O2IucHJvdG90eXBlLmdldFBoYXNlSUQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTA7YzxiLkhlLmxlbmd0aDtjKyspaWYoYi5IZVtjXT09PWEpcmV0dXJuIGM7CnJldHVybiBudWxsfTtiLnByb3RvdHlwZS5nZXRQaGFzZUNhbGxiYWNrVGltZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5uYyxoPTA7aDxiLmxlbmd0aDtoKyspaWYoYltoXS5wZz09PWEpcmV0dXJuIGJbaF0uQ2w7cmV0dXJuIG51bGx9O2IucHJvdG90eXBlLmZpbmRQaGFzZUF0Tm9taW5hbFRpbWU9ZnVuY3Rpb24oZSl7YS5hc3NlcnQoMDw9ZSk7Zm9yKHZhciBjPXRoaXMubmMsaD1jLmxlbmd0aC0xOzA8PWg7aC0tKWlmKGU+PWNbaF0uQmwpcmV0dXJuIGNbaF0ucGc7YS5lcnJvcigiTTE5MyIsZSxhLnV0aWxzLmR1bXBPYmplY3QoYykpO3JldHVybiBiLkNjfTtyZXR1cm4gYn0oKTtiLkNjPSJBRlRFUl9GSVJTVF9CWVRFIjtiLkNlPSJBRlRFUl9ET01fSU5URVJBQ1RJVkUiO2IuS2U9IkFUX09OTE9BRCI7Yi5FZT0iQUZURVJfT05MT0FEIjtiLkhlPVtiLkNjLGIuQ2UsYi5LZSxiLkVlXTthLlBhZ2VMaWZlY3ljbGVUcmFja2VyPWI7YS5saWZlY3ljbGU9bmV3IGI7YS5saWZlY3ljbGU9CmEubGlmZWN5Y2xlfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoYyl7Yz1iLmNhbGwodGhpcyxjKXx8dGhpcztjLmJhY2tUaW1lR2FwPWEuY29uZi5iYWNrVGltZUdhcDtyZXR1cm4gY312KGMsYik7Yy5wcm90b3R5cGUudHlwZT1mdW5jdGlvbigpe3JldHVybiBhLkV2ZW50VHlwZS5QYWdlVmlld307cmV0dXJuIGN9KGIuRXZlbnRUcmFja2VyKTtiLlBhZ2VWaWV3PWx9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS51dGlscy5ub3csZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoKXt9Yy5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5yZWFkeVN0YXRlO2lmKCJsb2FkaW5nIj09PWIpYS5sb2coIk0xOTQiKSxjLnVtKCksYy5UZygpO2Vsc2V7dmFyIGY9e3RpbWVTdGFtcDpsKCl9O2MuWWEoZik7ImludGVyYWN0aXZlIj09PQpiPyhhLmxvZygiTTE5NSIpLGMuVGcoKSk6KGEubG9nKCJNMTk2IiksYy5zYihmKSxjLmtnKGYpKX19O2MuVGc9ZnVuY3Rpb24oKXthLnV0aWxzLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCJsb2FkIixjLnNiKTthLnV0aWxzLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCJsb2FkIixjLmtnKX07Yy5rZz1mdW5jdGlvbihoKXtjLmN1cnJlbnRCYXNlUGFnZT1uZXcgYS5ldmVudHMuUGFnZVZpZXc7YS5saWZlY3ljbGUuRmwoaCYmaC50aW1lU3RhbXApO2EudXRpbHMuZ2MoZnVuY3Rpb24oKXt2YXIgZj1sKCk7YS5saWZlY3ljbGUuRWwoZik7YS5jb21tYW5kKCJtYXJrIiwib25sb2FkIixmKTtjLlpiPSEwO2EuY29uZi5lbmFibGVQcmltYXJ5TWV0cmljcz9hLk4uRGooKTooYi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZiYmKGIubmF2TW9uaXRvci5YZSgpLGIucmVzb3VyY2VNb25pdG9yLldlKCkpLGEuY29tbWFuZCgicmVwb3J0T25sb2FkIixjLmN1cnJlbnRCYXNlUGFnZSkpOyFhLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJgphLmNvbmYuc3BhMiYmYS5jb25mLm1vZGVybkJyb3dzZXJGZWF0dXJlc0F2YWlsYWJsZSYmYS5qLm4uSi5TZygpO2EudXRpbHMubG9hZFNjcmlwdEFzeW5jKGEuY29uZi5hZHJ1bUV4dFVybCl9KTthLmxvZygiTTE5NyIpfTtjLnVtPWZ1bmN0aW9uKCl7aWYoYS51dGlscy5pc0Z1bmN0aW9uKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGMuWWEsITEpO2Vsc2UgaWYoYS51dGlscy5pc09iamVjdChkb2N1bWVudC5hdHRhY2hFdmVudCkpe2RvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGMuWWEpO3ZhciBiPW51bGw7dHJ5e2I9bnVsbD09PXdpbmRvdy5mcmFtZUVsZW1lbnQ/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Om51bGx9Y2F0Y2goZil7fW51bGwhPWImJmIuZG9TY3JvbGwmJmZ1bmN0aW9uIG0oKXtpZighYy5pc1JlYWR5KXt0cnl7Yi5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGYpe2EudXRpbHMub1NUTyhtLAoxMCk7cmV0dXJufWMuc2IoKX19KCl9ZWxzZSBhLmV4Y2VwdGlvbigiTTE5OCIpO2EubG9nKCJNMTk5Iil9O2Muc2I9ZnVuY3Rpb24oYil7Yy5jZ3x8KGEubGlmZWN5Y2xlLkRsKGImJmIudGltZVN0YW1wKSxhLmNvbW1hbmQoIm1hcmsiLCJvbnJlYWR5IixsKCkpLGMuY2c9ITApfTtjLllhPWZ1bmN0aW9uKGEpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXI/KGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGMuWWEsITEpLGMuc2IoYSkpOiJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlJiYoZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsYy5ZYSksYy5zYihhKSl9O3JldHVybiBjfSgpO2UuaXNSZWFkeT0hMTtlLmNnPSExO2UuWmI9ITE7Yi5ET01FdmVudHNNb25pdG9yPWU7Yi5kb21FdmVudHNNb25pdG9yPW5ldyBiLkRPTUV2ZW50c01vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPQp7fSkpOyhmdW5jdGlvbihhKXt2YXIgYj1hLnV0aWxzLmlzRGVmaW5lZCxsPWEudXRpbHMuaXNOdW1iZXIsZT1hLm1vbml0b3IuZWU7YS5uaD13aW5kb3cuUHJvbWlzZTthLkpiPW51bGw7YS54bz1udWxsO2EudGU9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBjPWEuY29uZi5zcGEyJiZhLmNvbmYubW9kZXJuQnJvd3NlckZlYXR1cmVzQXZhaWxhYmxlLGg9YS5jb25mLmlzWm9uZVByb21pc2UsZj1hLmNvbmYuZmV0Y2gsbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoKXt9Zi5Qaz1mdW5jdGlvbigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eT1hLmFvcC5hcm91bmQoYS50ZSxmdW5jdGlvbihhLGMsaCl7IlByb21pc2UiPT09YyYmYihoKSYmZi5IZihoKX0pO2lmKGgmJmYuSmYoKSl7YS5sb2coIk0yMDAiKTt2YXIgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywiUHJvbWlzZSIpO2YuSGYoYyk7YS50ZSh3aW5kb3csIlByb21pc2UiLGMpO3dpbmRvdy5Qcm9taXNlPXdpbmRvdy5Qcm9taXNlfX07CmYuSmY9ZnVuY3Rpb24oKXtyZXR1cm4gYih3aW5kb3cuX196b25lX3N5bWJvbF9fUHJvbWlzZSl8fGIod2luZG93Ll9fem9uZV9zeW1ib2xfX1pvbmVBd2FyZVByb21pc2UpfTtmLkhmPWZ1bmN0aW9uKGMpe2Iod2luZG93LlpvbmUpJiZiKHdpbmRvdy5ab25lLmFzc2VydFpvbmVQYXRjaGVkKSYmKHdpbmRvdy5ab25lLmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7fSk7Yz1jfHxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywiUHJvbWlzZSIpO3ZhciBoPWMuc2V0LG49Yy5nZXQ7ZyhoKSYmKGMuc2V0PWZ1bmN0aW9uKGMpeyEwPT09Yy5hZ2VudFByb21pc2U/YS5sb2coIk0yMDEiKTooaC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYihhLkpiKT9oLmFwcGx5KHRoaXMsYXJndW1lbnRzKTooYS5sb2coIk0yMDIiKSxmLnNldFVwKCksKG5ldyBlKS5OaygpKSl9KTtnKG4pJiYoYy5nZXQ9ZnVuY3Rpb24oKXt2YXIgYz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtiKGEuSmIpJiYKKGEubG9nKCJNMjAzIiksYz1hLkpiKTtyZXR1cm4gY30pfTtmLnNldFVwPWZ1bmN0aW9uKCl7aWYoYihhLm5oKSl7Zi5TaygpO2YuUmsoKTt2YXIgaD1mdW5jdGlvbihoKXtmdW5jdGlvbiBlKG4pe3ZhciBsPXRoaXMuY29uc3RydWN0b3IscT1uO3RoaXMuWj1hLnV0aWxzLmdlbmVyYXRlR1VJRCgpO2IobikmJihxPWYuUWsobix0aGlzKSk7bj1hLnV0aWxzLlFpKHRoaXMsaCxbcV0sbCk7YyYmKGIodGhpcy5oKSYmKG4uaD10aGlzLmgpLGIodGhpcy5HYSk/bi5oPXRoaXMuR2EuaDpuLmg9YS5jLmlhKCkpO24uWj10aGlzLlo7dGhpcy5HYT1uO2EubG9nKCJNMjA0IixuLlopO2MmJmIobi5oKSYmYS5sb2coIk0yMDUiLG4uaC5ndWlkKTtyZXR1cm4gbn1hLnV0aWxzLkFjKGUsaCk7cmV0dXJuIGV9KHdpbmRvdy5Qcm9taXNlKTtoLmFnZW50UHJvbWlzZT0hMDthLkpiPWg7d2luZG93LlByb21pc2U9aH19O2YueWE9ZnVuY3Rpb24oaCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihjKXt2YXIgZSwKbD1lPXZvaWQgMDthLmxvZygiTTIwNiIsaCk7c3dpdGNoKGgpe2Nhc2UgZi5ILmxlOmNhc2UgZi5ILmtlOmNhc2UgZi5ILlpkOmNhc2UgZi5ILllkOmEudXRpbHMuaXNEZWZpbmVkKG4pJiZhLnV0aWxzLmlzRGVmaW5lZChuLkdhKSYmKGU9bi5HYS5oKTtlPWEuYy5pYSgpfHxlO2w9bmV3IGEuRGIoZSxuZXcgYS5LYShoKSxhLkNhdXNlVHlwZS5QUk9NSVNFKTticmVhaztjYXNlIGYuSC5pZTpjYXNlIGYuSC5qZTpjYXNlIGYuSC5oZTplPW4uaCxsPW5ldyBhLkRiKGUsbmV3IGEuS2EoaCksYS5DYXVzZVR5cGUuUFJPTUlTRSksYS5jLnFhKGwpfWIobikmJihiKG4uR2EpPyhuLkdhLmg9bCxhLmxvZygiTTIwNyIsbi5HYS5aKSk6KGEubG9nKCJNMjA4IixuLlopLG4uaD1sKSl9fX07Zi5Raz1mdW5jdGlvbihoLG4pe2MmJihoPWEuYW9wLmFyb3VuZChoLGZ1bmN0aW9uKCl7bi5oPW5ldyBhLkRiKGEuYy5pYSgpLG5ldyBhLkthKGYuSC5XaCksYS5DYXVzZVR5cGUuUFJPTUlTRSk7YS5jLnFhKG4uaCk7CmEubG9nKCJNMjA5IixuLmguZ3VpZCxuLlopO2lmKGIoYXJndW1lbnRzWzBdKSl7YS5sb2coIk0yMTAiKTt2YXIgYz1hLmFvcC5hcm91bmQoYXJndW1lbnRzWzBdLGYueWEoZi5ILmxlLG4pKTthcmd1bWVudHNbMF09Y31iKGFyZ3VtZW50c1sxXSkmJihhLmxvZygiTTIxMSIpLGM9YS5hb3AuYXJvdW5kKGFyZ3VtZW50c1sxXSxmLnlhKGYuSC5rZSxuKSksYXJndW1lbnRzWzFdPWMpO3JldHVybiBhLnV0aWxzLndhKGFyZ3VtZW50cyl9LGZ1bmN0aW9uKCl7YS5sb2coIk0yMTIiKTthLmMuTCgpfSwiaW50ZXJjZXB0UHJvbWlzZUV4ZWN1dG9yIixmLnJiKSk7cmV0dXJuIGh9O2YuUms9ZnVuY3Rpb24oKXthLnV0aWxzLnJlZnMucHJvbWlzZVRoZW49d2luZG93LlByb21pc2UucHJvdG90eXBlLnRoZW47dmFyIGI9Zi53ZygpLGM9e3BhcmVudE9iamVjdDp3aW5kb3cuUHJvbWlzZS5wcm90b3R5cGUscHJvcGVydHk6InRoZW4iLHByb3BlcnR5V3JhcHBlZEZ1bmN0aW9uTmFtZToicHJvbWlzZVRoZW4iLAp3cmFwTmV3RnVuY3Rpb25BZ2FpbjohMH07Yy5zZXRVcEZ1bmM9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2YuSmYoKXx8Zi5hbShiLGEpfX0uY2FsbCh0aGlzLGMpO2MuTGE9YjthLmFvcC5mb3JjZVdyYXAoYyk7YS51dGlscy5yZWZzLnByb21pc2VGaW5hbGx5PXdpbmRvdy5Qcm9taXNlLnByb3RvdHlwZVsiZmluYWxseSJdO2I9Zi52ZygpO2M9e3BhcmVudE9iamVjdDp3aW5kb3cuUHJvbWlzZS5wcm90b3R5cGUscHJvcGVydHk6ImZpbmFsbHkiLHByb3BlcnR5V3JhcHBlZEZ1bmN0aW9uTmFtZToicHJvbWlzZUZpbmFsbHkiLHdyYXBOZXdGdW5jdGlvbkFnYWluOiEwfTtjLnNldFVwRnVuYz1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7Zi4kbChiLGEpfX0uY2FsbCh0aGlzLGMpO2MuTGE9YjthLmFvcC5mb3JjZVdyYXAoYyl9O2YuYW09ZnVuY3Rpb24oYSxiKXtiLkxhPWYud2coYSl9O2YuJGw9ZnVuY3Rpb24oYSxiKXtiLkxhPWYudmcoYSl9O2YuU2s9ZnVuY3Rpb24oKXtmLllsKCk7CmYuWGwoKX07Zi5nbD1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIGZ8fGIgaW5zdGFuY2VvZiBhLm5ofTtmLkdrPWZ1bmN0aW9uKGMpe3ZhciBmO2IoZil8fChhLmxvZygiTTIxMyIpLGY9MSk7YihjLkQpJiZsKGMuRCkmJihjLkQrPWYsYS5sb2coIk0yMTQiLGMuRCkpfTtmLkFqPWZ1bmN0aW9uKGEpe3ZhciBjO2IoYyl8fChjPTEpO2IoYS5EKSYmbChhLkQpJiYoYS5ELT1jKX07Zi5Jaz1mdW5jdGlvbihjKXtiKGMuRCkmJmEudXRpbHMuY2woYy5EKT8oYS5sb2coIk0yMTUiKSxmLkdrKGMpKTpjLkQ9MX07Zi5UbT1mdW5jdGlvbihiKXtlLlhtKGIpfHwoYS5sb2coIk0yMTYiKSxmLklrKGIpKX07Zi5mbT1mdW5jdGlvbihhKXthLkQ9MH07Zi5PZj1mdW5jdGlvbihhKXtyZXR1cm4gYihhLkkpfTtmLmZkPWZ1bmN0aW9uKGEpe3JldHVybiBiKGEpJiZhIGluc3RhbmNlb2Ygd2luZG93LlByb21pc2V9O2Yud2c9ZnVuY3Rpb24oaCl7dmFyIG49bnVsbDtoPWh8fHdpbmRvdy5Qcm9taXNlLnByb3RvdHlwZS50aGVuOwpoPWEuYW9wLmFyb3VuZChoLGZ1bmN0aW9uKCl7dmFyIGg9dGhpcztuPWg7YS5sb2coIk0yMTciLGguWik7aWYoYihhcmd1bWVudHNbMF0pJiYhZi5mZChhcmd1bWVudHNbMF0pKXtmLlRtKGgpO2EubG9nKCJNMjE4IixoLlopO3ZhciBsPWEuYW9wLmFyb3VuZChhcmd1bWVudHNbMF0sZi55YShmLkguaWUsaCksZnVuY3Rpb24oKXt2YXIgbj1hLmFvcC51Zihhcmd1bWVudHMpO2IobikmJmIobi5EKSYmZi5nbChuKSYmZS5hYShoKT8oZS5VbShuLGgpLGYuZm0obikpOihlLmFhKGgpJiYhZi5PZihoKSYmZS5SYihoKSYmKGUuUGQoaCksZS5NYihoKSwhMD09PWUuUWQoaCkmJihhLmxvZygiTTIxOSIpLGEubG9nKCJNMjIwIiksZS5UYShoKSkpLGMmJihhLmxvZygiTTIyMSIpLGEuYy5MKCkpKX0sImludGVyY2VwdFByb21pc2VUaGVuRnVsZmlsIixmdW5jdGlvbihiKXtlLmFhKGgpJiZlLlJiKGgpJiYoZS5QZChoKSYmZS5NYihoKSwhMD09PWUuUWQoaCkmJihhLmxvZygiTTIyMiIpLGEubG9nKCJNMjIzIiksCmUuVGEoaCkpKTtmLnJiKGIpfSk7YXJndW1lbnRzWzBdPWx9Yihhcmd1bWVudHNbMV0pJiYhZi5mZChhcmd1bWVudHNbMV0pJiYoYS5sb2coIk0yMjQiLGguWiksbD1hLmFvcC5hcm91bmQoYXJndW1lbnRzWzFdLGYueWEoZi5ILmplLGgpLGZ1bmN0aW9uKCl7YyYmKGEubG9nKCJNMjI1IiksYS5jLkwoKSl9KSxhcmd1bWVudHNbMV09bCk7cmV0dXJuIGEudXRpbHMud2EoYXJndW1lbnRzKX0sZnVuY3Rpb24oKXt2YXIgaD1hLmFvcC51Zihhcmd1bWVudHMpOyFiKGgpfHxiKGFyZ3VtZW50c1swXSkmJmYuZmQoYXJndW1lbnRzWzBdKXx8KGMmJihoLmg9dGhpcy5oKSxmLk9mKHRoaXMpJiZlLmFhKHRoaXMpJiYoaC5fYWRydW1BamF4VD10aGlzLl9hZHJ1bUFqYXhULGUuUmIodGhpcyl8fGUuSmsoaCkpKX0sImludGVyY2VwdFByb21pc2VUaGVuSW50ZXJjZXB0b3IiLGZ1bmN0aW9uKGIpe3ZhciBjPW47ZS5hYShjKSYmZS5SYihjKSYmKGUuUGQoYykmJmUuTWIoYyksITA9PT1lLlFkKGMpJiYKKGEubG9nKCJNMjI2IiksYS5sb2coIk0yMjciKSxlLlRhKGMpKSk7Zi5yYihiKX0pO2gudXNlZEJ5QWdlbnQ9ITA7cmV0dXJuIHdpbmRvdy5Qcm9taXNlLnByb3RvdHlwZS50aGVuPWh9O2Yudmc9ZnVuY3Rpb24oaCl7aWYoYih3aW5kb3cuUHJvbWlzZS5wcm90b3R5cGVbImZpbmFsbHkiXSkpcmV0dXJuIGg9aHx8d2luZG93LlByb21pc2UucHJvdG90eXBlWyJmaW5hbGx5Il0saD1hLmFvcC5hcm91bmQoaCxmdW5jdGlvbigpe2IodGhpcy5fYWRydW1BamF4VCkmJmIodGhpcy5fYWRydW1BamF4VC53KT9lLk1iKHRoaXMpOmIodGhpcy5EKSYmZi5Baih0aGlzKTtpZihiKGFyZ3VtZW50c1swXSkpe2EubG9nKCJNMjI4Iix0aGlzLlopO3ZhciBoPWEuYW9wLmFyb3VuZChhcmd1bWVudHNbMF0sZi55YShmLkguaGUsdGhpcyksZnVuY3Rpb24oKXtjJiYoYS5sb2coIk0yMjkiKSxhLmMuTCgpKX0pO2FyZ3VtZW50c1swXT1oO3JldHVybiBhLnV0aWxzLndhKGFyZ3VtZW50cyl9fSxmdW5jdGlvbigpe2EubG9nKCJNMjMwIik7CmEuYy5MKCl9LCJpbnRlcmNlcHRQcm9taXNlRmluYWxseSIpLGgudXNlZEJ5QWdlbnQ9ITAsd2luZG93LlByb21pc2UucHJvdG90eXBlWyJmaW5hbGx5Il09aH07Zi5ZbD1mdW5jdGlvbigpe3dpbmRvdy5Qcm9taXNlLnJlc29sdmU9YS5hb3AuYXJvdW5kKHdpbmRvdy5Qcm9taXNlLnJlc29sdmUsZi55YShmLkguWmQsbnVsbCksZnVuY3Rpb24oKXthLmxvZygiTTIzMSIpO2EuYy5MKCl9LCJpbnRlcmNlcHRQcm9taXNlUmVzb2x2ZSIsZi5yYil9O2YuWGw9ZnVuY3Rpb24oKXt3aW5kb3cuUHJvbWlzZS5yZWplY3Q9YS5hb3AuYXJvdW5kKHdpbmRvdy5Qcm9taXNlLnJlamVjdCxmLnlhKGYuSC5ZZCxudWxsKSxmdW5jdGlvbigpe2EubG9nKCJNMjMyIik7YS5jLkwoKX0sImludGVyY2VwdFByb21pc2VSZWplY3QiLGYucmIpfTtyZXR1cm4gZn0oKTtuLkg9e1doOiJQcm9taXNlSW5zdGFuY2UuaW5pdCIsbGU6IlByb21pc2VJbnN0YW5jZS5yZXNvbHZlIixrZToiUHJvbWlzZUluc3RhbmNlLnJlamVjdCIsCmllOiJQcm9taXNlSW5zdGFuY2Uub25GdWxmaWxsZWQiLGplOiJQcm9taXNlSW5zdGFuY2Uub25SZWplY3RlZCIsaGU6IlByb21pc2VJbnN0YW5jZS5maW5hbGx5IixaZDoiUHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUiLFlkOiJQcm9taXNlQ29uc3RydWN0b3IucmVqZWN0In07bi5yYj1hLm1vbml0b3IuRXJyb3JNb25pdG9yLmw7YS5EaT1uO2gmJmYmJm4uUGsoKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXtmdW5jdGlvbiBsKGEsYil7dmFyIGM9W10sZT0vXlxzKihBRFJVTV9CVFx3Kik9KC4qKVxzKiQvaS5leGVjKGEpO2lmKGUpe3ZhciBsPWVbMV0sZT1lWzJdLnJlcGxhY2UoL14ifCIkL2csIiIpLGU9ZGVjb2RlVVJJQ29tcG9uZW50KGUpLnNwbGl0KCJ8Iiksaz1lWzBdLnNwbGl0KCI6Iik7aWYoIlIiPT09a1swXSYmTnVtYmVyKGtbMV0pPT09Yilmb3IoaChsKSxsPTE7bDxlLmxlbmd0aDtsKyspYy5wdXNoKGVbbF0pfXJldHVybiBjfWZ1bmN0aW9uIGUoYSwKYil7dmFyIGM9L15ccyooQURSVU1fKFxkKylfKFxkKylfKFxkKykpPSguKilccyokL2kuZXhlYyhhKTtpZihjKXt2YXIgZT1jWzFdLGw9Y1s0XSxrPWNbNV07aWYoTnVtYmVyKGNbM10pPT09YilyZXR1cm4gaChlKSx7aW5kZXg6TnVtYmVyKGwpLHZhbHVlOmt9fXJldHVybiBudWxsfWZ1bmN0aW9uIGMoYil7dmFyIGM9L15ccypBRFJVTT1zPShbXGRdKykmcj0oLiopXHMqLy5leGVjKGIpO2lmKGMpe2EubG9nKCJNMjM1IixiKTtpZigzPT09Yy5sZW5ndGgpcmV0dXJuIGgoIkFEUlVNIikse3N0YXJ0VGltZTpOdW1iZXIoY1sxXSksc3RhcnRQYWdlOmNbMl19O2EuZXJyb3IoIk0yMzYiLGIpO3JldHVybiBudWxsfX1mdW5jdGlvbiBoKGIpe2EubG9nKCJNMjM0IixiKTt2YXIgYz1uZXcgRGF0ZTtjLnNldFRpbWUoYy5nZXRUaW1lKCktMUUzKTtkb2N1bWVudC5jb29raWU9YisiPTtFeHBpcmVzPSIrYy50b1VUQ1N0cmluZygpfWIuc3RhcnRUaW1lQ29va2llPW51bGw7Yi5jb29raWVNZXRhZGF0YUNodW5rcz0KbnVsbDtiLmNmPWZ1bmN0aW9uKGYsaCl7YS5sb2coIk0yMzMiKTtmb3IodmFyIG09aD9oLmxlbmd0aDowLGs9W10sdD1mLnNwbGl0KCI7IikscD0wO3A8dC5sZW5ndGg7cCsrKXt2YXIgcj10W3BdLHM9ZShyLG0pO3M/ay5wdXNoKHMpOihyPWMociksbnVsbCE9ciYmKGIuc3RhcnRUaW1lQ29va2llPXIpKX1BcnJheS5wcm90b3R5cGUuc29ydC5jYWxsKGssZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5pbmRleC1iLmluZGV4fSk7cj1bXTtmb3IocD0wO3A8ay5sZW5ndGg7cCsrKXIucHVzaChrW3BdLnZhbHVlKTtmb3IocD0wO3A8dC5sZW5ndGg7cCsrKShrPWwodFtwXSxtKSkmJjA8ay5sZW5ndGgmJihyPXIuY29uY2F0KGspKTtiLmNvb2tpZU1ldGFkYXRhQ2h1bmtzPXJ9O2EuY29ycmVsYXRpb24uZWNrPWIuY2Z9KShhLmNvcnJlbGF0aW9ufHwoYS5jb3JyZWxhdGlvbj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7IkFQUF9LRVlfTk9UX1NFVCIhPT1hLmNvbmYuYXBwS2V5fHxhLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuQURFVU1fanNfaGFuZGxlcil8fAphLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cud2Via2l0KXx8eC5sb2coIkFwcER5bmFtaWNzIEVVTSBjbG91ZCBhcHBsaWNhdGlvbiBrZXkgbWlzc2luZy4gUGxlYXNlIHNwZWNpZnkgd2luZG93WydhZHJ1bS1hcHAta2V5J10iKTthLmNvcnJlbGF0aW9uLmNmKGRvY3VtZW50LmNvb2tpZSxkb2N1bWVudC5yZWZlcnJlcik7YS5jb21tYW5kKCJtYXJrIiwiZmlyc3RieXRlIix3aW5kb3dbImFkcnVtLXN0YXJ0LXRpbWUiXSk7YS5tb25pdG9yLnNldFVwTW9uaXRvcnMoYS5tb25pdG9yLmdhLGEubW9uaXRvci50aixhLm1vbml0b3IuZG9tRXZlbnRzTW9uaXRvcixhLm1vbml0b3IubmF2TW9uaXRvcixhLm1vbml0b3IueGhyTW9uaXRvcixhLm1vbml0b3IucmVzb3VyY2VNb25pdG9yKTthLmNvbmYuZmV0Y2gmJiFhLmNvbmYuaXNab25lUHJvbWlzZSYmKGEuRGkuc2V0VXAoKSxhLm1vbml0b3Iuc2V0VXBNb25pdG9ycyhhLm1vbml0b3IuaWIpKTthLmNvbmYuc3BhMiYmYS5jb25mLm1vZGVybkJyb3dzZXJGZWF0dXJlc0F2YWlsYWJsZSYmCmEubW9uaXRvci5zZXRVcE1vbml0b3JzKGEubW9uaXRvci5iaik7YS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiZhLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuTXV0YXRpb25PYnNlcnZlcikmJihhLmoubi5KLlNnKCksYS5qLm4uc3RhcnQoYS51dGlscy5oYigpKSxhLk4uc3RhcnQoKSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXthPWEubmd8fChhLm5nPXt9KTthPWEua3x8KGEuaz17fSk7YS5YZj0ibG9jYXRpb25DaGFuZ2VTdGFydCI7YS50bD0ibG9jYXRpb25DaGFuZ2VTdWNjZXNzIjthLkpnPSJyb3V0ZUNoYW5nZVN0YXJ0IjthLktnPSJyb3V0ZUNoYW5nZVN1Y2Nlc3MiO2EuWGc9InN0YXRlQ2hhbmdlU3RhcnQiO2EuWWc9InN0YXRlQ2hhbmdlU3VjY2VzcyI7YS5raD0idmlld0NvbnRlbnRMb2FkZWQiO2EuQ2s9ImluY2x1ZGVDb250ZW50UmVxdWVzdGVkIjthLkJrPSJpbmNsdWRlQ29udGVudExvYWRlZCI7YS5hZj0iZGlnZXN0IjthLmlvPSJvdXRzdGFuZGluZ1JlcXVlc3RzQ29tcGxldGUiOwphLk5lPSJiZWZvcmVOZ1hoclJlcXVlc3RlZCI7YS5EZT0iYWZ0ZXJOZ1hoclJlcXVlc3RlZCI7YS5obz0ibmdYaHJMb2FkZWQiO2EuUmU9IiQkY29tcGxldGVPdXRzdGFuZGluZ1JlcXVlc3QifSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGwoYSxjLGUsbSxsLGspe2lmKGMpdHJ5e3JldHVybiBjLmFwcGx5KGEsW2UsbSxsXS5jb25jYXQoaykpfWNhdGNoKHApe3JldHVybiBhLmVycm9yKGUsbSxsLGssYi5FcnJvci5YaCwiTTIzNyIscCl9fWZ1bmN0aW9uIGUoYSxjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnQsbT1jW2VdfHxjW2IuR2JdfHxlLGs9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtpZih0aGlzLnJqKGEpKXJldHVybiB0aGlzLmVycm9yKGEsZSxtLGssYi5FcnJvci5ZaCwiZXZlbnQgIithKyJNMjM4Iit0aGlzLmN1cnJlbnQpO2lmKCExPT09bCh0aGlzLHRoaXNbIm9uYmVmb3JlIithXSwKYSxlLG0saykpcmV0dXJuIGIuRmIuWGQ7bT09PWIuR2ImJihtPWUpO2lmKGU9PT1tKXJldHVybiBsKHRoaXMsdGhpc1sib25hZnRlciIrYV18fHRoaXNbIm9uIithXSxhLGUsbSxrKSxiLkZiLnhpO3ZhciB0PXRoaXM7dGhpcy50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7dC50cmFuc2l0aW9uPW51bGw7dC5jdXJyZW50PW07bCh0LHRbIm9uZW50ZXIiK21dfHx0WyJvbiIrbV0sYSxlLG0sayk7bCh0LHRbIm9uYWZ0ZXIiK2FdfHx0WyJvbiIrYV0sYSxlLG0sayk7cmV0dXJuIGIuRmIuSWl9O2lmKCExPT09bCh0aGlzLHRoaXNbIm9ubGVhdmUiK2VdLGEsZSxtLGspKXJldHVybiB0aGlzLnRyYW5zaXRpb249bnVsbCxiLkZiLlhkO2lmKHRoaXMudHJhbnNpdGlvbilyZXR1cm4gdGhpcy50cmFuc2l0aW9uKCl9fXZhciBjPWEudXRpbHMuaGFzT3duUHJvcGVydHlEZWZpbmVkO2IuVkVSU0lPTj0iMi4zLjUiO2IuRmI9e0lpOjEseGk6MixYZDozLHJuOjR9O2IuRXJyb3I9e1loOjEwMCxzbjoyMDAsClhoOjMwMH07Yi5HYj0iKiI7Yi5jcmVhdGU9ZnVuY3Rpb24oYSxmKXtmdW5jdGlvbiBuKGEpe3ZhciBjPWEuZnJvbSBpbnN0YW5jZW9mIEFycmF5P2EuZnJvbTphLmZyb20/W2EuZnJvbV06W2IuR2JdO3JbYS5uYW1lXT1yW2EubmFtZV18fHt9O2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXNbY1tmXV09c1tjW2ZdXXx8W10sc1tjW2ZdXS5wdXNoKGEubmFtZSksclthLm5hbWVdW2NbZl1dPWEudG98fGNbZl19dmFyIG09InN0cmluZyI9PXR5cGVvZiBhLmluaXRpYWw/e3N0YXRlOmEuaW5pdGlhbH06YS5pbml0aWFsLGw9Znx8YS50YXJnZXR8fHt9LGs9YS5ldmVudHN8fFtdLHA9YS5jYWxsYmFja3N8fHt9LHI9e30scz17fTttJiYobS5ldmVudD1tLmV2ZW50fHwic3RhcnR1cCIsbih7bmFtZTptLmV2ZW50LGZyb206Im5vbmUiLHRvOm0uc3RhdGV9KSk7Zm9yKHZhciB3PTA7dzxrLmxlbmd0aDt3KyspbihrW3ddKTtmb3IodmFyIEEgaW4gciljKHIsQSkmJihsW0FdPWUoQSxyW0FdKSk7CmZvcihBIGluIHApYyhwLEEpJiYobFtBXT1wW0FdKTtsLmN1cnJlbnQ9Im5vbmUiO2wuU249ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT8wPD1hLmluZGV4T2YodGhpcy5jdXJyZW50KTp0aGlzLmN1cnJlbnQ9PT1hfTtsLnFqPWZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLnRyYW5zaXRpb24mJihjKHJbYV0sdGhpcy5jdXJyZW50KXx8YyhyW2FdLGIuR2IpKX07bC5yaj1mdW5jdGlvbihhKXtyZXR1cm4hdGhpcy5xaihhKX07bC5uYz1mdW5jdGlvbigpe3JldHVybiBzW3RoaXMuY3VycmVudF19O2wuZXJyb3I9YS5lcnJvcnx8ZnVuY3Rpb24oYSxiLGMsZixoLG0sZSl7dGhyb3cgZXx8bTt9O2lmKG0mJiFtLmRlZmVyKWxbbS5ldmVudF0oKTtyZXR1cm4gbH19KShhLndlfHwoYS53ZT17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGMoYil7Yj1lLmNhbGwodGhpcyxiKXx8dGhpczthLnV0aWxzLmlzRGVmaW5lZChhLm5nKSYmCmIuY29uc3RydWN0b3IhPWEubmcuTmdWUGFnZVZpZXcmJmIuY29uc3RydWN0b3IhPWMmJmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLlZQYWdlVmlldyIsW10pO2lmKGEuY29uZi5zcGEyKXJldHVybiBiO2IucGVyZj1uZXcgYS5QZXJmb3JtYW5jZVRyYWNrZXI7Yi5zdGFydCgpO2EubW9uaXRvci54aHJNb25pdG9yLmZjKCk7YS5tb25pdG9yLmliLmZjKCk7YS5tb25pdG9yLmdhLmVtKCk7cmV0dXJuIGJ9dihjLGUpO2MucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudFR5cGUuVlBhZ2VWaWV3fTtjLnByb3RvdHlwZS5XYz1mdW5jdGlvbigpe3JldHVybiBiLkV2ZW50VHJhY2tlci5EYyh0aGlzLmd1aWQoKSx0aGlzLnVybCgpLHRoaXMudHlwZSgpKX07Yy5wcm90b3R5cGUuVmc9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5XYygpO2Iuc2V0KCJwYXJlbnQiLGMpO2EubG9nKCJNMjM5IixjLmd1aWQoKSxjLnVybCgpKX07Yy5wcm90b3R5cGUuc3RhcnRDb3JyZWxhdGluZ1hocnM9CmZ1bmN0aW9uKCl7YS5jb25mLnNwYTJ8fChhLmxvZygiTTI0MCIpLHRoaXMuVmcoYS5tb25pdG9yLnhock1vbml0b3IpKX07Yy5wcm90b3R5cGUuc3RvcENvcnJlbGF0aW5nWGhycz1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwoYS5tb25pdG9yLnhock1vbml0b3Iuc2V0KCJwYXJlbnQiLG51bGwpLGEubG9nKCJNMjQxIikpfTtjLnByb3RvdHlwZS5GZD1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwoYS5sb2coIk0yNDIiKSx0aGlzLlZnKGEubW9uaXRvci5nYSkpfTtjLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwodGhpcy5tYXJrVmlydHVhbFBhZ2VTdGFydCgpLHRoaXMuc3RhcnRDb3JyZWxhdGluZ1hocnMoKSl9O2MucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwodGhpcy5tYXJrVmlydHVhbFBhZ2VFbmQoKSx0aGlzLnN0b3BDb3JyZWxhdGluZ1hocnMoKSl9O3JldHVybiBjfShiLkV2ZW50VHJhY2tlcik7Yi5WUGFnZVZpZXc9bDtiLk1hKGIuVFthLkV2ZW50VHlwZS5WUGFnZVZpZXddLApsLnByb3RvdHlwZSk7Yi5JZShiLm1ldHJpY1NwZWNbYS5FdmVudFR5cGUuVlBhZ2VWaWV3XSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXt2YXIgYj1hLm5nfHwoYS5uZz17fSksYj1iLmNvbmZ8fChiLmNvbmY9e30pO2IuZGlzYWJsZWQ9YS5jb25mLnVzZXJDb25mJiZhLmNvbmYudXNlckNvbmYuc3BhJiZhLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXImJmEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhci5kaXNhYmxlO2IuZGlzdGluZ3Vpc2hWUHdpdGhJdHNUZW1wbGF0ZVVybD1hLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5zcGEmJmEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhciYmITA9PT1hLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXIuZGlzdGluZ3Vpc2hWUHdpdGhJdHNUZW1wbGF0ZVVybD8hMDohMTtiLnhocj17fTtiLm1ldHJpY3M9e2luY2x1ZGVSZXNUaW1pbmdJbkVuZFVzZXJSZXNwb25zZVRpbWluZzohMH07CmEuY29uZi51c2VyQ29uZiYmYS5jb25mLnVzZXJDb25mLnNwYSYmYS5jb25mLnVzZXJDb25mLnNwYS5hbmd1bGFyJiZhLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXIudnAmJihhLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXIudnAueGhyJiZhLnV0aWxzLnVhLnRnKGEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhci52cC54aHIpLGEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhci52cC5tZXRyaWNzJiZhLnV0aWxzLm1lcmdlSlNPTihiLm1ldHJpY3MsYS5jb25mLnVzZXJDb25mLnNwYS5hbmd1bGFyLnZwLm1ldHJpY3MpKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLm1hcCxlPWEudXRpbHMucmVkdWNlLGM9YS51dGlscy5maWx0ZXIsaD1mdW5jdGlvbihmKXtmdW5jdGlvbiBoKGIpe2I9Zi5jYWxsKHRoaXMsYil8fHRoaXM7Yi5OZj0hMDtiLnViPXt9O2IuVmE9MDtiLkNvPVtdO2IuZGlnZXN0Q291bnQoMCk7aWYoYi5jb25zdHJ1Y3RvciE9CmgpcmV0dXJuIGEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLkFqYXgiLFtdKSxiO2Iuc3RvcENvcnJlbGF0aW5nWGhycygpO3JldHVybiBifXYoaCxmKTtoLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnRUeXBlLlZQYWdlVmlld307aC5wcm90b3R5cGUuVGQ9ZnVuY3Rpb24oKXt0aGlzLm1hcmtWaWV3Q2hhbmdlU3RhcnQoKTt0aGlzLm1hcmtWaXJ0dWFsUGFnZVN0YXJ0KHRoaXMuZ2V0Vmlld0NoYW5nZVN0YXJ0KCkpO3RoaXMudGltZXN0YW1wKHRoaXMuZ2V0Vmlld0NoYW5nZVN0YXJ0KCkpfTtoLnByb3RvdHlwZS5Eaz1mdW5jdGlvbigpe3RoaXMuZGlnZXN0Q291bnQodGhpcy5kaWdlc3RDb3VudCgpKzEpfTtoLnByb3RvdHlwZS5Faz1mdW5jdGlvbigpe3RoaXMuVmErKzthLmxvZygiTTI0MyIsdGhpcy5WYSl9O2gucHJvdG90eXBlLnpqPWZ1bmN0aW9uKCl7dGhpcy5WYS0tO2EubG9nKCJNMjQ0Iix0aGlzLlZhKX07aC5wcm90b3R5cGUueWs9CmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wZXJmLmdldEVudHJ5QnlOYW1lKGEuZXZlbnRzLmIuc2gpO2EubG9nKCJNMjQ1Iix0aGlzLlZhLGIpO3JldHVybiAwPHRoaXMuVmF9O2gucHJvdG90eXBlLm1qPWZ1bmN0aW9uKCl7dmFyIGE9e21jOjB9LGI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgibmctdmlldywgW25nLXZpZXddLCAubmctdmlldywgW3VpLXZpZXddIiksYj1sKGIsYW5ndWxhci5lbGVtZW50KSxjO2ZvcihjIGluIGguR2cpe3ZhciBmPWguR2dbY107bChiLGZ1bmN0aW9uKGIpe2I9Yi5maW5kKGMpO2woYixmdW5jdGlvbihiKXtpZihiPWJbZl0pYj1kZWNvZGVVUklDb21wb25lbnQoYiksYVtiXXx8KGFbYl09YyxhLm1jKyspfSl9KX10aGlzLnViPWF9O2gucHJvdG90eXBlLmtqPWZ1bmN0aW9uKGEpe3JldHVybiEhdGhpcy51YltkZWNvZGVVUklDb21wb25lbnQoYS5uYW1lKV19O2gucHJvdG90eXBlLm5qPWZ1bmN0aW9uKCl7dmFyIGI9W10sYz10aGlzOzA8dGhpcy51Yi5tYyYmCihiPWEubW9uaXRvci5yZXNvdXJjZU1vbml0b3IuamIoKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGMua2ooYSl9KSk7dGhpcy5yZXNUaW1pbmcoYil9O2guUGo9ZnVuY3Rpb24oYil7cmV0dXJuIGMoYixmdW5jdGlvbihiKXtyZXR1cm4oYi5ldmVudFR5cGU9PT1hLkV2ZW50VHlwZS5BamF4fHxiLmV2ZW50VHlwZT09PWEuRXZlbnRUeXBlLkFEUlVNX1hIUikmJiFhLnV0aWxzLnVhLmxjKGIuZXZlbnRVcmwsYi5tZXRob2QpfSl9O2guaGs9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSxmdW5jdGlvbihhLGIpe3JldHVybiBNYXRoLm1heChhLGIudGltZXN0YW1wK2IubWV0cmljcy5QTFQpfSwtMSl9O2gucHJvdG90eXBlLlppPWZ1bmN0aW9uKCl7aWYoYi5jb25mLnhocil7dmFyIGM9aC5QaihhLmNoYW5uZWwuZ2V0RXZlbnRzV2l0aFBhcmVudEdVSUQodGhpcy5ndWlkKCkpKSxjPWguaGsoYyk7aWYoMDxjKXt2YXIgZj10aGlzLnBlcmYuZ2V0RW50cnlCeU5hbWUoYS5ldmVudHMuYi5zaCk7CnRoaXMubWFya1hoclJlcXVlc3RzQ29tcGxldGVkKE1hdGgubWluKGYmJmYuc3RhcnRUaW1lfHxOdW1iZXIuTUFYX1ZBTFVFLGMpKX19fTtoLnByb3RvdHlwZS5hZGp1c3RUaW1pbmdzPWZ1bmN0aW9uKCl7dGhpcy5aaSgpO3ZhciBjPXRoaXMuZ2V0Vmlld0RPTUxvYWRlZCgpLGY9dGhpcy5nZXRYaHJSZXF1ZXN0c0NvbXBsZXRlZCgpLGM9TWF0aC5tYXgoYyxmKTtiLmNvbmYubWV0cmljcy5pbmNsdWRlUmVzVGltaW5nSW5FbmRVc2VyUmVzcG9uc2VUaW1pbmcmJih0aGlzLllpKCksZj10aGlzLmdldFZpZXdSZXNvdXJjZXNMb2FkZWQoKSxmPU1hdGgubWF4KGMsZiksYS5sb2coIk0yNDYiLGMsZiksYz1mKTt0aGlzLm1hcmtWaXJ0dWFsUGFnZUVuZChjKX07aC5wcm90b3R5cGUuWWk9ZnVuY3Rpb24oKXtpZigwPHRoaXMudWIubWMpe3RoaXMubmooKTt2YXIgYj10aGlzLnJlc1RpbWluZygpO2ImJmIubGVuZ3RoPj10aGlzLnViLm1jJiYoYj1lKGIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWF0aC5tYXgoYSwKYi5yZXNwb25zZUVuZCl9LDApLHRoaXMubWFya1ZpZXdSZXNvdXJjZXNMb2FkZWQoYS5QZXJmb3JtYW5jZVRyYWNrZXIuSWMoYikpKX19O2gucHJvdG90eXBlLmlkZW50aWZpZXI9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5taDthLnV0aWxzLmlzRGVmaW5lZChiKSYmKHRoaXMubWg9aC5OaihiKSx0aGlzLnVybCh0aGlzLm1oLnVybCkpO3JldHVybiBjfTtoLk5qPWZ1bmN0aW9uKGIpe3ZhciBjPXt9O2ImJmIuTT8oYy5NPXt0ZDoiIn0sYS51dGlscy5tZXJnZUpTT04oYy5NLHt0ZDpiLk0ub3JpZ2luYWxQYXRoLHZiOmIuTS50ZW1wbGF0ZSx3YjpiLk0udGVtcGxhdGVVcmx9KSk6YiYmYi5zdGF0ZSYmKGMuc3RhdGU9e3VybDoiIn0sYS51dGlscy5tZXJnZUpTT04oYy5zdGF0ZSx7dXJsOmIuc3RhdGUudXJsLG5hbWU6Yi5zdGF0ZS5uYW1lLHZiOmIuc3RhdGUudGVtcGxhdGUsd2I6Yi5zdGF0ZS50ZW1wbGF0ZVVybH0pKTtyZXR1cm4gY307cmV0dXJuIGh9KGEuZXZlbnRzLlZQYWdlVmlldyk7CmguR2c9e2ltZzoic3JjIixzY3JpcHQ6InNyYyIsbGluazoiaHJlZiJ9O2IuTmdWUGFnZVZpZXc9aDthLmV2ZW50cy5NYShhLmV2ZW50cy5UW2EuRXZlbnRUeXBlLk5HX1ZJUlRVQUxfUEFHRV0saC5wcm90b3R5cGUpfSkoYS5uZ3x8KGEubmc9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLkE9bmV3IGIuTmdWUGFnZVZpZXd9ZS5wcm90b3R5cGUubG09ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGg9dGhpcy5BO2IuY29uZi5tZXRyaWNzLmluY2x1ZGVSZXNUaW1pbmdJbkVuZFVzZXJSZXNwb25zZVRpbWluZz8oYS5sb2coIk0yNDciKSxhLnV0aWxzLm9TVE8oZnVuY3Rpb24oKXtjLnlkKGgpfSxlLktpKSk6YS51dGlscy5vU1RPKGZ1bmN0aW9uKCl7Yy55ZChoKX0sZS5MaSl9O2UucHJvdG90eXBlLnlkPWZ1bmN0aW9uKGIpe2EubG9nKCJNMjQ4Iik7Yi5wYXJlbnQoYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKTsKYS5jb21tYW5kKCJjYWxsIixmdW5jdGlvbigpe2IuYWRqdXN0VGltaW5ncygpO2EucmVwb3J0ZXIucmVwb3J0RXZlbnQoYil9KX07ZS5wcm90b3R5cGUuc209ZnVuY3Rpb24oYSl7dGhpcy5BPWF9O3JldHVybiBlfSgpO2wuS2k9NUUzO2wuTGk9MiphLm1vbml0b3IuWEhSTW9uaXRvci5iZTtiLlZpcnR1YWxQYWdlU3RhdGVNYWNoaW5lPWw7YS53ZS5jcmVhdGUoe2V2ZW50czpbe25hbWU6InN0YXJ0Iixmcm9tOiJub25lIix0bzoiQ2hhbmdlVmlldyJ9LHtuYW1lOiJ2aWV3TG9hZGVkIixmcm9tOiJDaGFuZ2VWaWV3Iix0bzoiWGhyUGVuZGluZyJ9LHtuYW1lOiJ4aHJDb21wbGV0ZWQiLGZyb206IlhoclBlbmRpbmciLHRvOiJFbmQifSx7bmFtZToiYWJvcnQiLGZyb206IioiLHRvOiJub25lIn0se25hbWU6ImluaXQiLGZyb206IioiLHRvOiJub25lIn0se25hbWU6ImxvY0NoYW5nZSIsZnJvbToiKiIsdG86IioifSx7bmFtZToiYmVmb3JlWGhyUmVxIixmcm9tOiIqIix0bzoiKiJ9LHtuYW1lOiJhZnRlclhoclJlcSIsCmZyb206IioiLHRvOiIqIn1dLGVycm9yOmZ1bmN0aW9uKGIpe2EubG9nKCJNMjQ5IixiKX0sY2FsbGJhY2tzOntvbkNoYW5nZVZpZXc6ZnVuY3Rpb24oKXt0aGlzLkEuVGQoKTt0aGlzLkEuRmQoKX0sb252aWV3TG9hZGVkOmZ1bmN0aW9uKCl7dGhpcy5BLm1hcmtWaWV3RE9NTG9hZGVkKCl9LG9uWGhyUGVuZGluZzpmdW5jdGlvbigpe3RoaXMuQS5OZiYmdGhpcy54aHJDb21wbGV0ZWQoKX0sb25sZWF2ZVhoclBlbmRpbmc6ZnVuY3Rpb24oYSxiLGgpe2lmKCJhYm9ydCI9PT1hKXJldHVybiB0aGlzLnlkKCksITA7aWYoInhockNvbXBsZXRlZCI9PT1hJiYiRW5kIj09PWgpe2lmKHRoaXMuQS55aygpKXJldHVybiExO3RoaXMuQS5tYXJrWGhyUmVxdWVzdHNDb21wbGV0ZWQoKTtyZXR1cm4hMH19LG9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5BLm1qKCk7dGhpcy5sbSgpfSxvbmluaXQ6ZnVuY3Rpb24oYixjLGgsZil7dGhpcy5zbShmKTthLm1vbml0b3IueGhyTW9uaXRvci5mYygpO2EubW9uaXRvci5pYi5mYygpfSwKb25sb2NDaGFuZ2U6ZnVuY3Rpb24oYSxiLGgsZil7dGhpcy5BLmlkZW50aWZpZXIudXJsPWY7dGhpcy5BLmtjKHt1cmw6Zn0pfSxvbmJlZm9yZVhoclJlcTpmdW5jdGlvbihiLGMsaCxmKXt2YXIgbj10aGlzLkE7bi5OZj0hMTthLmxvZygiTTI1MCIsZiYmZlsxXXx8IiIsbi5ndWlkKCkpO24uRWsoKTtuLnN0YXJ0Q29ycmVsYXRpbmdYaHJzKCk7ZlszXSYmKGZbM109YS5hb3AuYmVmb3JlKGZbM10sZnVuY3Rpb24oYixjLGYpe2EubG9nKCJNMjUxIik7bi56aigpO2YmJihiPWEudXRpbHMuT2woZilbImNvbnRlbnQtdHlwZSJdKSYmMDw9Yi5pbmRleE9mKCJ0ZXh0L2h0bWwiKSYmbi5tYXJrVmlld0ZyYWdtZW50c0xvYWRlZCgpfSkpO3JldHVybiBmfSxvbmFmdGVyWGhyUmVxOmZ1bmN0aW9uKCl7dGhpcy5BLnN0b3BDb3JyZWxhdGluZ1hocnMoKX19fSxsLnByb3RvdHlwZSl9KShhLm5nfHwoYS5uZz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPQpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLk89bmV3IGIuVmlydHVhbFBhZ2VTdGF0ZU1hY2hpbmU7dGhpcy5kaXN0aW5ndWlzaFZQd2l0aEl0c1RlbXBsYXRlVXJsPWEubmcuY29uZi5kaXN0aW5ndWlzaFZQd2l0aEl0c1RlbXBsYXRlVXJsfWUucHJvdG90eXBlLlM9ZnVuY3Rpb24oYyxoKXthLmxvZygiTTI1MiIsYyk7c3dpdGNoKGMpe2Nhc2UgYi5rLkpnOmNhc2UgYi5rLlhnOnRoaXMuTy5zdGFydCgpO3ZhciBmPWgubmV4dC51cmx8fGRvY3VtZW50LlVSTCxuPW5ldyBiLk5nVlBhZ2VWaWV3KHt1cmw6ZixpZGVudGlmaWVyOmgubmV4dH0pO3RoaXMuZGlzdGluZ3Vpc2hWUHdpdGhJdHNUZW1wbGF0ZVVybCYmZS5aayh0aGlzLk8uQSxuKT90aGlzLk8uQS5rYyh7dXJsOmYsaWRlbnRpZmllcjpoLm5leHR9KTp0aGlzLkdtKG4pO2JyZWFrO2Nhc2UgYi5rLktnOmNhc2UgYi5rLllnOnRoaXMuTy5BLm1hcmtWaWV3Q2hhbmdlRW5kKCk7YnJlYWs7Y2FzZSBiLmsua2g6dGhpcy5PLnZpZXdMb2FkZWQoKTsKYnJlYWs7Y2FzZSBiLmsuTmU6dGhpcy5PLmJlZm9yZVhoclJlcShoKTticmVhaztjYXNlIGIuay5EZTp0aGlzLk8uYWZ0ZXJYaHJSZXEoKTticmVhaztjYXNlIGIuay5SZTp0aGlzLk8ueGhyQ29tcGxldGVkKCk7YnJlYWs7Y2FzZSBiLmsuWGY6dGhpcy5PLkEua2Moe3VybDpoLm5leHQudXJsfSk7dGhpcy5PLmxvY0NoYW5nZShoLm5leHQudXJsKTticmVhaztjYXNlIGIuay5hZjp0aGlzLk8uQS5EaygpfX07ZS5wcm90b3R5cGUuR209ZnVuY3Rpb24oYSl7dGhpcy5PLmFib3J0KCk7dGhpcy5PLmluaXQoYSk7dGhpcy5PLnN0YXJ0KCl9O2UuWms9ZnVuY3Rpb24oYixoKXt2YXIgZj1iLmlkZW50aWZpZXIoKSxlPWguaWRlbnRpZmllcigpLG09ITE7cmV0dXJuIG09IWEudXRpbHMuaXNEZWZpbmVkKGYpJiYhYS51dGlscy5pc0RlZmluZWQoZSl8fGY9PT1lPyEwOmEudXRpbHMuaXNEZWZpbmVkKGYpJiZhLnV0aWxzLmlzRGVmaW5lZChlKT9mLnN0YXRlfHxlLnN0YXRlP2EudXRpbHMuaXNEZWZpbmVkKGYuc3RhdGUpJiYKYS51dGlscy5pc0RlZmluZWQoZS5zdGF0ZSk/Zi5zdGF0ZS5uYW1lPT09ZS5zdGF0ZS5uYW1lJiZmLnN0YXRlLnZiPT09ZS5zdGF0ZS52YiYmZi5zdGF0ZS53Yj09PWUuc3RhdGUud2ImJmYuc3RhdGUudXJsPT09ZS5zdGF0ZS51cmw6ITE6Zi5NJiZlLk0/Zi5NLnRkPT09ZS5NLnRkJiZmLk0udmI9PT1lLk0udmImJmYuTS53Yj09PWUuTS53YjpmLnVybD09PWUudXJsOiExfTtyZXR1cm4gZX0oKTtiLk1pPWx9KShhLm5nfHwoYS5uZz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWEudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcixlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe3RoaXMuVT1uZXcgYi5NaTt0aGlzLkZmPSExfWMucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihoKXtyZXR1cm4gZnVuY3Rpb24oKXthLmxvZyhoKTtjLmluaXQoKX19dmFyIGM9dGhpcztiKCJNMjUzIikoKTtsKGRvY3VtZW50LCJET01Db250ZW50TG9hZGVkIiwKYigiTTI1NCIpKTtsKHdpbmRvdywibG9hZCIsYigiTTI1NSIpKX07Yy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2lmKCJsb2FkaW5nIj09PWRvY3VtZW50LnJlYWR5U3RhdGUpYS5sb2coIk0yNTYiKTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2YgYW5ndWxhciYmIXRoaXMuRmYpe3RoaXMuRmY9ITA7YS5sb2coIk0yNTciKTt2YXIgYj10aGlzLGM9YW5ndWxhci5tb2R1bGUoIm5nIik7Yy5jb25maWcoWyIkcHJvdmlkZSIsZnVuY3Rpb24oYSl7Yi5UayhhKTtiLk9rKGEpfV0pO2MucnVuKFsiJGJyb3dzZXIiLGZ1bmN0aW9uKGEpe2IuTGsoYSl9XSk7YS5sb2coIk0yNTgiKX19O2MucHJvdG90eXBlLk9rPWZ1bmN0aW9uKGMpe3ZhciBmPWEuYW9wLGU9dGhpcztjLmRlY29yYXRvcigiJGh0dHBCYWNrZW5kIixbIiRkZWxlZ2F0ZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9Zi5hcm91bmQoYSxmdW5jdGlvbigpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CmUuVS5TKGIuay5OZSxhKTtyZXR1cm4gYX0sZnVuY3Rpb24oKXtlLlUuUyhiLmsuRGUpfSwibmcuaHR0cEJhY2tlbmQiKX1dKX07Yy5wcm90b3R5cGUuVGs9ZnVuY3Rpb24oYyl7dmFyIGY9YS5hb3AsZT10aGlzO2MuZGVjb3JhdG9yKCIkcm9vdFNjb3BlIixbIiRkZWxlZ2F0ZSIsZnVuY3Rpb24oYSl7YS4kZGlnZXN0PWYuYWZ0ZXIoYS4kZGlnZXN0LGZ1bmN0aW9uKCl7ZS5VLlMoYi5rLmFmKX0sIm5nZXZlbnRzLmRpZ2VzdCIpO2EuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdGFydCIsZnVuY3Rpb24oYSxjKXt2YXIgZj17dXJsOmN9LGg9YSYmYS5nYiYmYS5nYi4kc3RhdGUmJmEuZ2IuJHN0YXRlLmN1cnJlbnQ7aCYmKGYuc3RhdGU9aCk7ZS5VLlMoYi5rLlhmLHtuZXh0OmZ9KX0pO2EuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdWNjZXNzIixmdW5jdGlvbigpe2UuVS5TKGIuay50bCl9KTthLiRvbigiJHJvdXRlQ2hhbmdlU3RhcnQiLGZ1bmN0aW9uKGEsYyl7dmFyIGY9e3VybDpsb2NhdGlvbi5ocmVmfSwKaD1jJiZjLiQkcm91dGU7aCYmKGYuTT1oKTtlLlUuUyhiLmsuSmcse25leHQ6Zn0pfSk7YS4kb24oIiRyb3V0ZUNoYW5nZVN1Y2Nlc3MiLGZ1bmN0aW9uKCl7ZS5VLlMoYi5rLktnKX0pO2EuJG9uKCIkc3RhdGVDaGFuZ2VTdGFydCIsZnVuY3Rpb24oYSxjKXtlLlUuUyhiLmsuWGcse25leHQ6e3N0YXRlOmN9fSl9KTthLiRvbigiJHN0YXRlQ2hhbmdlU3VjY2VzcyIsZnVuY3Rpb24oKXtlLlUuUyhiLmsuWWcpfSk7YS4kb24oIiR2aWV3Q29udGVudExvYWRlZCIsZnVuY3Rpb24oYSl7dmFyIGM9e3VybDpsb2NhdGlvbi5ocmVmfTtpZihhPWEmJmEuZ2ImJmEuZ2IuJHN0YXRlJiZhLmdiLiRzdGF0ZS5jdXJyZW50KWMuc3RhdGU9YTtlLlUuUyhiLmsua2gse25leHQ6Y30pfSk7YS4kb24oIiRpbmNsdWRlQ29udGVudFJlcXVlc3RlZCIsZnVuY3Rpb24oKXtlLlUuUyhiLmsuQ2spfSk7YS4kb24oIiRpbmNsdWRlQ29udGVudExvYWRlZCIsZnVuY3Rpb24oKXtlLlUuUyhiLmsuQmspfSk7cmV0dXJuIGF9XSl9OwpjLnByb3RvdHlwZS5Maz1mdW5jdGlvbihjKXt2YXIgZj10aGlzO2MuJCRjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdD1hLmFvcC5iZWZvcmUoYy4kJGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0LGZ1bmN0aW9uKCl7Zi5VLlMoYi5rLlJlKX0pfTtyZXR1cm4gY30oKTtiLm1uPWU7Yi5uZ01vbml0b3I9bmV3IGV9KShhLm5nfHwoYS5uZz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS5uZ3x8KGEubmc9e30pO2IuY29uZi5kaXNhYmxlZHx8YS5jb25mLnNwYTJ8fGEubW9uaXRvci5zZXRVcE1vbml0b3JzKGIubmdNb25pdG9yKX0pKGt8fChrPXt9KSl9fTt9KSgpOwo=(Line 28)
Message:
Refused to load the script 'https://tags.tiqcdn.com/utag/usbank/prepaid/prod/utag.js' because it violates the following Content Security Policy directive: "script-src 'unsafe-inline' data:". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
security error URL: data:application/javascript;base64,Oy8qIFZlcnNpb24gYTVlOTIxZWFiMmRkZTJjNWFiNGI3OWVhNjM2YjgyNzEgdjo0LjUuMTcuMjg5MCwgYzo5MWQ3NTI1ZDdkOTk4MmYzZGQ3MTUxN2QzYjQ5MGU3ODFhYjM4OWM4LCBiOjQuNS4xNy4yODkwICovKGZ1bmN0aW9uKCl7bmV3IGZ1bmN0aW9uKCl7aWYoIXdpbmRvdy5BRFJVTSYmITAhPT13aW5kb3dbImFkcnVtLWRpc2FibGUiXSl7dmFyIGs9d2luZG93LkFEUlVNPXt9LEI9d2luZG93LmNvbnNvbGUseD1CJiYiZnVuY3Rpb24iPT10eXBlb2YgQi5sb2c/Qjp7bG9nOmZ1bmN0aW9uKCl7fX07d2luZG93WyJhZHJ1bS1zdGFydC10aW1lIl09d2luZG93WyJhZHJ1bS1zdGFydC10aW1lIl18fChuZXcgRGF0ZSkuZ2V0VGltZSgpO3ZhciB2PXRoaXMmJnRoaXMuQWN8fGZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGEsbCl7YS5fX3Byb3RvX189bH18fGZ1bmN0aW9uKGEsbCl7Zm9yKHZhciBlIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShlKSYmKGFbZV09bFtlXSl9O3JldHVybiBmdW5jdGlvbihiLGwpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvbnN0cnVjdG9yPWJ9YShiLGwpO2IucHJvdG90eXBlPW51bGw9PT1sP09iamVjdC5jcmVhdGUobCk6CihlLnByb3RvdHlwZT1sLnByb3RvdHlwZSxuZXcgZSl9fSgpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYSl7YS5zZXRVcE1vbml0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVtdLGI9MDtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKWFbYl09YXJndW1lbnRzW2JdO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl07YyYmYy5zZXRVcCgpfX19KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXtmdW5jdGlvbiBsKGEpe3JldHVybiBiLnJlZnMuc2xpY2UuYXBwbHkoYSxiLnJlZnMuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfWZ1bmN0aW9uIGUoYSxtKXtyZXR1cm4gYyhiLnJlZnMuc2V0VGltZW91dC5hcHBseSk/Yi5yZWZzLnNldFRpbWVvdXQuYXBwbHkod2luZG93LGFyZ3VtZW50cyk6Yi5yZWZzLnNldFRpbWVvdXQoYSxtKX1mdW5jdGlvbiBjKGEpe3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIGEmJm51bGwhPT0KYX1mdW5jdGlvbiBoKGEpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYSYmIWIuaXNBcnJheShhKSYmbnVsbCE9PWF9ZnVuY3Rpb24gZihhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYXx8ITF9ZnVuY3Rpb24gbihhKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGF9ZnVuY3Rpb24gbShhKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGF9ZnVuY3Rpb24gcShhLGMpe2Zvcih2YXIgbSBpbiBjKXt2YXIgZj1jW21dO2lmKHQoYyxtKSl7dmFyIG49YVttXTtoKGYpJiZoKG4pP3EobixmKTpiLmlzQXJyYXkobikmJmIuaXNBcnJheShmKT9hW21dPW4uY29uY2F0KGYpOmFbbV09Zn19cmV0dXJuIGF9ZnVuY3Rpb24gdChhLGIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxiKSYmYyhhW2JdKX1mdW5jdGlvbiBwKGEpe3JldHVybiBuKGEpP2EucmVwbGFjZSgvXlxzKi8sIiIpLnJlcGxhY2UoL1xzKiQvLCIiKTphfWZ1bmN0aW9uIHIoKXtyZXR1cm4gYi5yZWZzLmthJiYKZihiLnJlZnMua2Eubm93KX1mdW5jdGlvbiBzKCl7cmV0dXJuIHIoKT9iLnJlZnMucm91bmQoYi5yZWZzLmthLm5vdygpK3coKSk6KG5ldyBEYXRlKS5nZXRUaW1lKCl9ZnVuY3Rpb24gdygpe3ZhciBhPWIucmVmcy5rYSxhPWEmJmEudGltaW5nJiZtKGEudGltaW5nLm5hdmlnYXRpb25TdGFydCk/YS50aW1pbmcubmF2aWdhdGlvblN0YXJ0OndpbmRvd1siYWRydW0tc3RhcnQtdGltZSJdO2MoYSl8fChhPXMoKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQShhLGIpe3ZhciBjPUFycmF5LnByb3RvdHlwZVthXTtyZXR1cm4gYz9rKGMpOkMoYSxiKX1mdW5jdGlvbiBrKGEpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYS5hcHBseShjLGIucmVmcy5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9fWZ1bmN0aW9uIEMoYSxiKXtyZXR1cm4gZnVuY3Rpb24obSxoKXtpZighYyhtKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQiKTtpZighZihoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGgrCiIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gYi5hcHBseShudWxsLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHkoYSxiLGMpe3ZhciBtPU9iamVjdChhKSxoPW0ubGVuZ3RoPj4+MCxmPTA7aWYoMz5hcmd1bWVudHMubGVuZ3RoKXtmb3IoO2Y8aCYmIShmIGluIG0pOylmKys7aWYoZj49aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7Yz1tW2YrK119Zm9yKDtmPGg7ZisrKWYgaW4gbSYmKGM9YihjLG1bZl0sZixtKSk7cmV0dXJuIGN9ZnVuY3Rpb24geihhLGMsbSl7cmV0dXJuIGIucmVkdWNlKGEsZnVuY3Rpb24oYSxiLGgsZil7YVtoXT1jLmNhbGwobSxiLGgsZik7cmV0dXJuIGF9LEFycmF5KGEubGVuZ3RoPj4+MCkpfWZ1bmN0aW9uIEQoYSxjLG0pe3JldHVybiBiLnJlZHVjZShhLGZ1bmN0aW9uKGEsYixoLGYpe2MuY2FsbChtLGIsaCxmKSYmYS5wdXNoKGIpO3JldHVybiBhfSxbXSl9ZnVuY3Rpb24gRShhLApiLGMpe2E9T2JqZWN0KGEpO2Zvcih2YXIgbT1hLmxlbmd0aD4+PjAsaD0wO2g8bTtoKyspaWYoaCBpbiBhJiZiLmNhbGwoYyxhW2hdLGgsYSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRihhLGMsbSl7cmV0dXJuIWIuc29tZShhLGZ1bmN0aW9uKGEpe3JldHVybiFjLmNhbGwobSxhKX0pfWZ1bmN0aW9uIEcoYSxjLG0pe2IucmVkdWNlKGEsZnVuY3Rpb24oYSxiLGgsZil7Yy5jYWxsKG0sYixoLGYpfSx2b2lkIDApfWIucmVmcz17aXNBcnJheTpBcnJheS5pc0FycmF5LHRvU3RyaW5nOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsc2xpY2U6QXJyYXkucHJvdG90eXBlLnNsaWNlLHNldFRpbWVvdXQ6d2luZG93LnNldFRpbWVvdXQsc2V0SW50ZXJ2YWw6d2luZG93LnNldEludGVydmFsLGthOndpbmRvdy5wZXJmb3JtYW5jZXx8d2luZG93Lm1velBlcmZvcm1hbmNlfHx3aW5kb3cubXNQZXJmb3JtYW5jZXx8d2luZG93LndlYmtpdFBlcmZvcm1hbmNlLGFzc2lnbjpPYmplY3QuYXNzaWduLApyb3VuZDpNYXRoLnJvdW5kfTtiLndhPWw7Yi5vU1RPPWU7Yi5pc0NPUlNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cuSlNPTiYmZihKU09OLnN0cmluZ2lmeSk7cmV0dXJuIGMod2luZG93LlhNTEh0dHBSZXF1ZXN0KSYmIndpdGhDcmVkZW50aWFscyJpbiBuZXcgWE1MSHR0cFJlcXVlc3QmJmF9O2IuaXNEZWZpbmVkPWM7Yi5jbD1mdW5jdGlvbihhKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBhJiYhd2luZG93LmlzTmFOKGEpfTtiLmlzQXJyYXk9ZihiLnJlZnMuaXNBcnJheSkmJmYoYi5yZWZzLmlzQXJyYXkuYmluZCk/Yi5yZWZzLmlzQXJyYXkuYmluZChBcnJheSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGIucmVmcy50b1N0cmluZy5jYWxsKGEpPT09Yi5yZWZzLnRvU3RyaW5nLmNhbGwoW10pfTtiLmlzT2JqZWN0PWg7Yi5pc0Z1bmN0aW9uPWY7Yi5pc1N0cmluZz1uO2IuaXNOdW1iZXI9bTtiLmlzQm9vbGVhbj1mdW5jdGlvbihhKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBhfTsKYi5tYXg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWF0aC5tYXgoaXNOYU4oYSk/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOmEsaXNOYU4oYik/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOmIpfTtiLmdjPWU7Yi5wbz1mdW5jdGlvbihhLGIpe2UoYSxifHwxRTQpfTtiLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYixjLG0saCl7ZnVuY3Rpb24gZigpe3RyeXtyZXR1cm4gbS5hcHBseSh0aGlzLGwoYXJndW1lbnRzKSl9Y2F0Y2goaCl7YS5leGNlcHRpb24oaCwiTTEiLGMsYixoKX19dm9pZCAwPT09aCYmKGg9ITEpO2EuaXNEZWJ1ZyYmYS5sb2coIk0wIixjLGIpO2YuST0hMDtiLmFkZEV2ZW50TGlzdGVuZXI/Yi5hZGRFdmVudExpc3RlbmVyKGMsZixoKTpiLmF0dGFjaEV2ZW50JiZiLmF0dGFjaEV2ZW50KCJvbiIrYyxmKX07Yi5sb2FkU2NyaXB0QXN5bmM9ZnVuY3Rpb24oYil7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Yy50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiOwpjLmFzeW5jPSEwO2Muc3JjPWI7dmFyIG09ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzBdO20/KG0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYyxtKSxhLmxvZygiTTIiLGIpKTphLmxvZygiTTMiLGIpfTtiLm1lcmdlSlNPTj1xO2IuaGFzT3duUHJvcGVydHlEZWZpbmVkPXQ7Yi5uZj1mdW5jdGlvbihhLGMpe2lmKGIuaXNGdW5jdGlvbihPYmplY3QuZ2V0UHJvdG90eXBlT2YpKWZvcig7Yi5pc0RlZmluZWQoYSkmJiF0KGEsYyk7KWE9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO3JldHVybiBhfTtiLmJuPWZ1bmN0aW9uKGEpe3JldHVybiBjKGEpP2IuaXNBcnJheShhKT9hOlthXTpbXX07Yi51bz1mdW5jdGlvbihhLGIpe3JldHVybiBudWxsIT1hJiZhLnNsaWNlKDAsYi5sZW5ndGgpPT1ifTtiLmdlbmVyYXRlR1VJRD1mdW5jdGlvbihhKXtyZXR1cm4gYyhhKSYmZihhLmdldFJhbmRvbVZhbHVlcykmJmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihhKXthPWEudG9TdHJpbmcoMTYpOwpyZXR1cm4iMDAwMCIuc3Vic3RyKGEubGVuZ3RoKSthfXZhciBjPW5ldyBVaW50MTZBcnJheSg4KTthLmdldFJhbmRvbVZhbHVlcyhjKTtyZXR1cm4gYihjWzBdKStiKGNbMV0pKyJfIitiKGNbMl0pKyJfIitiKGNbM10pKyJfIitiKGNbNF0pKyJfIitiKGNbNV0pK2IoY1s2XSkrYihjWzddKX19KHdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0byl8fGZ1bmN0aW9uKCl7cmV0dXJuInh4eHh4eHh4X3h4eHhfNHh4eF95eHh4X3h4eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9nLGZ1bmN0aW9uKGEpe3ZhciBiPTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oIngiPT1hP2I6YiYzfDgpLnRvU3RyaW5nKDE2KX0pfTtiLnRyeUV4dHJhY3RpbmdFcnJvclN0YWNrPWZ1bmN0aW9uKGEpe3JldHVybiBhPyhhPWEuc3RhY2spJiYic3RyaW5nIj09PXR5cGVvZiBhP2E6bnVsbDpudWxsfTtiLnRyaW09cDtiLk9sPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGMsbTtpZighYSlyZXR1cm4gYjt2YXIgaD0KYS5zcGxpdCgiXG4iKTtmb3IobT0wO208aC5sZW5ndGg7bSsrKXt2YXIgZj1oW21dO2M9Zi5pbmRleE9mKCI6Iik7YT1wKGYuc3Vic3RyKDAsYykpLnRvTG93ZXJDYXNlKCk7Yz1wKGYuc3Vic3RyKGMrMSkpO2EmJihiW2FdPWJbYV0/YlthXSsoIiwgIitjKTpjKX1yZXR1cm4gYn07Yi50cnlQZXJpb2RpY2FsbHk9ZnVuY3Rpb24oYSxiLGMsbSl7ZnVuY3Rpb24gaCgpe2lmKGIoKSljJiZjKCk7ZWxzZXt2YXIgbj1hKCsrZik7MDxuP2UoaCxuKTptJiZtKCl9fXZhciBmPTA7aCgpfTtiLk9lPWZ1bmN0aW9uKGEpe3JldHVybiBhLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc2xpY2UoMSl9O2Iub2c9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbYy0xXT1hcmd1bWVudHNbY107cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBjPVtdLG09MDttPGFyZ3VtZW50cy5sZW5ndGg7bSsrKWNbbV09YXJndW1lbnRzW21dO3JldHVybiBhLmFwcGx5KHRoaXMsCmIuY29uY2F0KGMpKX19O2IuVG49cjtiLm5vdz1zO2IuaGI9dztiLkNuPXk7Yi5yZWR1Y2U9QSgicmVkdWNlIix5KTtiLkJuPXo7Yi5tYXA9QSgibWFwIix6KTtiLnpuPUQ7Yi5maWx0ZXI9QSgiZmlsdGVyIixEKTtiLkRuPUU7Yi5zb21lPUEoInNvbWUiLEUpO2IueW49RjtiLmV2ZXJ5PUEoImV2ZXJ5IixGKTtiLkFuPUc7Yi5mb3JFYWNoPUEoImZvckVhY2giLEcpO2IuQ2o9ZnVuY3Rpb24oYSl7cmV0dXJuIGIuZmlsdGVyKGEsYyl9O2IuSG49ZnVuY3Rpb24oYSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGEpfTtiLlFpPWMod2luZG93LlJlZmxlY3QpJiZjKHdpbmRvdy5SZWZsZWN0LmNvbnN0cnVjdCk/ZnVuY3Rpb24oYixjLG0saCl7dHJ5e3JldHVybiBudWxsIT09Yz93aW5kb3cuUmVmbGVjdC5jb25zdHJ1Y3QoYyxtLGgpOmJ9Y2F0Y2goZil7cmV0dXJuIGEubW9uaXRvci5FcnJvck1vbml0b3IubChmKSxifX06ZnVuY3Rpb24oYixjLG0pe3RyeXtyZXR1cm4gbnVsbCE9PWMmJgpjLmFwcGx5KGIsbSl8fGJ9Y2F0Y2goaCl7cmV0dXJuIGEubW9uaXRvci5FcnJvck1vbml0b3IubChoKSxifX07Yi5BYz1mdW5jdGlvbigpe3ZhciBhPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oYSxiKXt2YXIgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKSxtO2ZvcihtIGluIGMpYVttXT1iW21dfTtyZXR1cm4gZnVuY3Rpb24oYixjKXtmdW5jdGlvbiBtKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ifWEoYixjKTtiLnByb3RvdHlwZT1udWxsPT09Yz9PYmplY3QuY3JlYXRlKGMpOihtLnByb3RvdHlwZT1jLnByb3RvdHlwZSxuZXcgbSl9fSgpO2IuTGo9ZnVuY3Rpb24oYSl7aWYoIWIuaXNTdHJpbmcoYSkpcmV0dXJuIGE7dmFyIGM9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwiJyI6IiYjMzk7IiwnIic6IiZxdW90OyIsIi8iOiImIzQ3OyJ9O3JldHVybiBhLnJlcGxhY2UoL1smPD4nIi9dL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbYV19KX07Yi55bz0KZnVuY3Rpb24oYSl7aWYoIWIuaXNTdHJpbmcoYSkpcmV0dXJuIGE7dmFyIGM9eyImYW1wOyI6IiYiLCImIzM4OyI6IiYiLCImI3gyNjsiOiImIiwiJmx0OyI6IjwiLCImIzYwOyI6IjwiLCImI3gzYzsiOiI8IiwiJmd0OyI6Ij4iLCImIzYyOyI6Ij4iLCImI3gzZTsiOiI+IiwiJmFwb3M7IjoiJyIsIiYjMzk7IjoiJyIsIiYjeDI3OyI6IiciLCImcXVvdDsiOiciJywiJiMzNDsiOiciJywiJiN4MjI7IjonIicsIiZzb2w7IjoiLyIsIiYjNDc7IjoiLyIsIiYjeDJmOyI6Ii8ifTtyZXR1cm4gYS5yZXBsYWNlKC8mKD86YW1wfCMwKjM4fCN4MCoyNnxsdHwjMCo2MHwjeDAqM2N8Z3R8IzAqNjJ8I3gwKjNlfGFwb3N8IzAqMzl8I3gwKjI3fHF1b3R8IzAqMzR8I3gwKjIyfHNvbHwjMCo0N3wjeDAqMmYpOy9nLGZ1bmN0aW9uKGEpe2E9YS5yZXBsYWNlKC8wK1xCL2csIiIpO3JldHVybiBjW2FdfSl9O2IueWo9ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcztiJiYKY2xlYXJUaW1lb3V0KGIpO2I9ZShmdW5jdGlvbigpe2EuYXBwbHkoYyxhcmd1bWVudHMpfSwzMDApfX19KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS5jb25mfHwoYS5jb25mPXt9KTtiLnVzZXJDb25mPXdpbmRvd1siYWRydW0tY29uZmlnIl18fHt9O2IudXNlSFRUUFNBbHdheXM9ITA9PT1iLnVzZXJDb25mLnVzZUhUVFBTQWx3YXlzO2IubW9kZXJuQnJvd3NlckZlYXR1cmVzQXZhaWxhYmxlPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSYmYS51dGlscy5pc0NPUlNTdXBwb3J0ZWQoKSYmYS51dGlscy5pc0RlZmluZWQoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpO2Iuc3BhMj1iLnVzZXJDb25mLnNwYSYmYi51c2VyQ29uZi5zcGEuc3BhMiYmKCEwPT09Yi51c2VyQ29uZi5zcGEuc3BhMnx8YS51dGlscy5pc09iamVjdChiLnVzZXJDb25mLnNwYS5zcGEyKSk7Yi5jbGVhclJlc1RpbWluZz1iLnVzZXJDb25mLnNwYSYmCmEudXRpbHMuaXNPYmplY3QoYi51c2VyQ29uZi5zcGEuc3BhMikmJmEudXRpbHMuaXNEZWZpbmVkKGIudXNlckNvbmYuc3BhLnNwYTIuY2xlYXJSZXNUaW1pbmcpP2IudXNlckNvbmYuc3BhLnNwYTIuY2xlYXJSZXNUaW1pbmc6ITA7Yi5kaXNhYmxlVGV4dEZvclRlc3Rpbmc9ITA9PT1iLnVzZXJDb25mLmRpc2FibGVUZXh0Rm9yVGVzdGluZztiLmVuYWJsZVByaW1hcnlNZXRyaWNzPSghYS51dGlscy5pc0RlZmluZWQoYi51c2VyQ29uZi5lbmFibGVQcmltYXJ5TWV0cmljcyl8fCEwPT09Yi51c2VyQ29uZi5lbmFibGVQcmltYXJ5TWV0cmljcykmJmIubW9kZXJuQnJvd3NlckZlYXR1cmVzQXZhaWxhYmxlO2IuZGV2TW9kZT0hMD09PWIudXNlckNvbmYuZGV2TW9kZTtiLmlzWm9uZVByb21pc2U9ITA9PT1iLnVzZXJDb25mLmlzWm9uZVByb21pc2V8fCEwPT09Yi51c2VyQ29uZi5hbmd1bGFyO2IuZmV0Y2g9IWEudXRpbHMuaXNEZWZpbmVkKGIudXNlckNvbmYuZmV0Y2gpfHwhMD09Yi51c2VyQ29uZi5mZXRjaDsKYi5iYWNrVGltZUdhcD1NYXRoLmFicyhiLnVzZXJDb25mLmJhY2tUaW1lR2FwKXx8MDtiLm5ldmVyU2VuZEltYWdlQmVhY29uPSFhLnV0aWxzLmlzRGVmaW5lZChiLnVzZXJDb25mLmJlYWNvbil8fCFhLnV0aWxzLmlzRGVmaW5lZChiLnVzZXJDb25mLmJlYWNvbi5uZXZlclNlbmRJbWFnZUJlYWNvbil8fCEwPT1iLnVzZXJDb25mLmJlYWNvbi5uZXZlclNlbmRJbWFnZUJlYWNvbjtiLmJlYWNvblVybEh0dHA9YS51dGlscy5pc0RlZmluZWQoYi51c2VyQ29uZi5iZWFjb25VcmxIdHRwKT9iLnVzZXJDb25mLmJlYWNvblVybEh0dHA6Imh0dHA6Ly9jb2wuZXVtLWFwcGR5bmFtaWNzLmNvbSI7Yi5iZWFjb25VcmxIdHRwcz1hLnV0aWxzLmlzRGVmaW5lZChiLnVzZXJDb25mLmJlYWNvblVybEh0dHBzKT9iLnVzZXJDb25mLmJlYWNvblVybEh0dHBzOiJodHRwczovL2NvbC5ldW0tYXBwZHluYW1pY3MuY29tIjtiLmNvcnNFbmRwb2ludFBhdGg9Ii9ldW1jb2xsZWN0b3IvYmVhY29ucy9icm93c2VyIisKKGIuc3BhMj8iL3YyIjoiL3YxIik7Yi5pbWFnZUVuZHBvaW50UGF0aD0iL2V1bWNvbGxlY3Rvci9hZHJ1bS5naWY/IjtiLmFwcEtleT1iLnVzZXJDb25mLmFwcEtleXx8d2luZG93WyJhZHJ1bS1hcHAta2V5Il18fCJBUFBfS0VZX05PVF9TRVQiO2E9Yi51c2VIVFRQU0Fsd2F5c3x8Imh0dHBzOiI9PT1kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbDt2YXIgbD1iLnVzZXJDb25mLmFkcnVtRXh0VXJsSHR0cHx8Imh0dHA6Ly9jZG4uYXBwZHluYW1pY3MuY29tIixlPWIudXNlckNvbmYuYWRydW1FeHRVcmxIdHRwc3x8Imh0dHBzOi8vY2RuLmFwcGR5bmFtaWNzLmNvbSI7Yi5hZHJ1bUV4dFVybD0oYT9lOmwpKyIvYWRydW0tZXh0LmE1ZTkyMWVhYjJkZGUyYzVhYjRiNzllYTYzNmI4MjcxLmpzIjtiLmFkcnVtWGRVcmw9ZSsiL2FkcnVtLXhkLmE1ZTkyMWVhYjJkZGUyYzVhYjRiNzllYTYzNmI4MjcxLmh0bWwiO2IuYWdlbnRWZXI9IjQuNS4xNy4yODkwIjtiLnNlbmRJbWFnZUJlYWNvbj1iLnVzZXJDb25mLmJlYWNvbiYmCmIudXNlckNvbmYuYmVhY29uLnNlbmRJbWFnZUJlYWNvbnx8d2luZG93WyJhZHJ1bS1zZW5kLWltYWdlLWJlYWNvbiJdO3dpbmRvd1siYWRydW0tZ2VvLXJlc29sdmVyLXVybCJdPyhsPXdpbmRvd1siYWRydW0tZ2VvLXJlc29sdmVyLXVybCJdLGU9bC5pbmRleE9mKCI6Ly8iKSwtMSE9ZSYmKGw9bC5zdWJzdHJpbmcoZSszKSksbD0oYT8iaHR0cHM6Ly8iOiJodHRwOi8vIikrbCk6KGw9Yi51c2VyQ29uZi5nZW9SZXNvbHZlclVybEh0dHBzfHwiIixlPWIudXNlckNvbmYuZ2VvUmVzb2x2ZXJVcmxIdHRwfHwiIixsPWE/bDplKTtiLmdlb1Jlc29sdmVyVXJsPWw7Yi51c2VTdHJpY3REb21haW5Db29raWVzPSEwPT09d2luZG93WyJhZHJ1bS11c2Utc3RyaWN0LWRvbWFpbi1jb29raWVzIl07Yi5saT0xMDtiLmZpPTEwfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiLGMsbSxoKXtiPWEuY29uZi5iZWFjb25VcmxIdHRwcysiL2V1bWNvbGxlY3Rvci9lcnJvci5naWY/dmVyc2lvbj0xJmFwcEtleT0iKwptKyImbXNnPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIuc3Vic3RyaW5nKDAsNTAwKSk7aCYmKGIrPSImc3RhY2s9IixiKz1lbmNvZGVVUklDb21wb25lbnQoaC5zdWJzdHJpbmcoMCwxNTAwLWIubGVuZ3RoKSkpO3JldHVybiBifWZ1bmN0aW9uIGwoYyxtKXsyPD1zfHwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIikuc3JjPWIoYywwLGEuY29uZi5hcHBLZXksbSkscysrKX1mdW5jdGlvbiBlKGEpe3JldHVybiAwPD1hLmxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJBRFJVTV9kZWJ1Zz10cnVlIil8fDA8PWEuY29va2llLnNlYXJjaCgvKF58OylccypBRFJVTV9kZWJ1Zz10cnVlLyl9ZnVuY3Rpb24gYyhiKXthLmlzRGVidWcmJnAucHVzaChuKGFyZ3VtZW50cykuam9pbigiIHwgIikpfWZ1bmN0aW9uIGgoYSl7ci5wdXNoKG4oYXJndW1lbnRzKS5qb2luKCIgfCAiKSl9ZnVuY3Rpb24gZihhKXt2YXIgYj1uKGFyZ3VtZW50cykuam9pbigiIHwgIik7YyhiKTtsKGIsbnVsbCl9dmFyIG49CmEudXRpbHMud2EsbT1hLnV0aWxzLnJlZHVjZSxxPWEudXRpbHMuaXNEZWZpbmVkO2EuaURSPWU7dmFyIHQ7KGZ1bmN0aW9uKGEpe2FbYS5BUElfRVJST1I9MF09IkFQSV9FUlJPUiI7YVthLkFQSV9FUlJPUl9JTlZBTElEX1BBUkFNUz0xXT0iQVBJX0VSUk9SX0lOVkFMSURfUEFSQU1TIjthW2EuQVBJX0VSUk9SX0lOVkFMSURfQ09ORklHPTJdPSJBUElfRVJST1JfSU5WQUxJRF9DT05GSUciO2FbYS5BUElfV0FSTklORz0zXT0iQVBJX1dBUk5JTkciO2FbYS5BUElfV0FSTklOR19JTkVGRkVDVElWRV9DT05GSUc9NF09IkFQSV9XQVJOSU5HX0lORUZGRUNUSVZFX0NPTkZJRyJ9KSh0PWEuVnx8KGEuVj17fSkpO2EuQmI9WyJKUyBBZ2VudCBBUEkgRXJyb3I6IiwiSlMgQWdlbnQgQVBJIEVycm9yIEludmFsaWQgUGFyYW1ldGVyczogIiwiSlMgQWdlbnQgQVBJIEVycm9yIEludmFsaWQgQ29uZmlnczogIiwiSlMgQWdlbnQgQVBJIFdhcm5pbmc6IiwiSlMgQWdlbnQgQVBJIFdhcm5pbmcgSW5lZmZlY3RpdmUgQ29uZmlnOiJdOwphLldhPSIgYSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbi4gRG9uJ3QgZm9yZ2V0IGtleXdvcmQgbmV3LiI7YS5pc0RlYnVnPWUoZG9jdW1lbnQpO2EuYXBpTWVzc2FnZUNvbnNvbGVPdXQ9cShhLmNvbmYudXNlckNvbmYpJiZxKGEuY29uZi51c2VyQ29uZi5sb2cpJiYhMD09PWEuY29uZi51c2VyQ29uZi5sb2cuYXBpTWVzc2FnZUNvbnNvbGVPdXQ/ITA6ITE7dmFyIHA9W10scj1bXTthLmxvZ01lc3NhZ2VzPXA7YS5hcGlNZXNzYWdlcz1yO2EubG9nPWM7YS5mbz1oO2EuZXJyb3I9ZjthLnJlcG9ydEFQSU1lc3NhZ2U9ZnVuY3Rpb24oYixjLG0sZil7dmFyIG49YS5VbC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aChuKTthLmFwaU1lc3NhZ2VDb25zb2xlT3V0JiZ4LmxvZyhuKTtyZXR1cm4gbn07YS5leGNlcHRpb249ZnVuY3Rpb24oKXtpZighKDE+YXJndW1lbnRzLmxlbmd0aCkpe3ZhciBiPW4oYXJndW1lbnRzKSxjPWEudXRpbHMudHJ5RXh0cmFjdGluZ0Vycm9yU3RhY2soYlswXSksCmI9Yi5zbGljZSgxKTthLnV0aWxzLmlzQXJyYXkoYikmJihiPWIuc2xpY2UoMCwyMCkpO2I9Yi5qb2luKCIgfCAiKTthLmxvZyhiKTtsKGIsYyl9fTthLmFzc2VydD1mdW5jdGlvbihhKXtmb3IodmFyIGI9MTtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKTt2YXIgYz1uKGFyZ3VtZW50cyk7YXx8KGI9Y1sxXSwoYz1jLnNsaWNlKDIpKSYmMDxjLmxlbmd0aD9mKCJNNCIsYixjKTpmKCJNNSIsYikpfTthLmR1bXBMb2c9YS5pc0RlYnVnP2Z1bmN0aW9uKCl7cmV0dXJuIG0ocCxmdW5jdGlvbihhLGIpe3JldHVybiBhK2IucmVwbGFjZSgvXDxiclwvXD4vZywiXG5cdCIpKyJcbiJ9LCIiKX06ZnVuY3Rpb24oKXt9O2EuZWY9MDthLlNjPTA7YS5QPWEuaXNEZWJ1ZyYmYS51dGlscy5yZWZzLmthP2Z1bmN0aW9uKCl7YS5lZj1hLnV0aWxzLnJlZnMua2Eubm93KCl9OmZ1bmN0aW9uKCl7fTthLlE9YS5pc0RlYnVnJiZhLnV0aWxzLnJlZnMua2E/ZnVuY3Rpb24oKXthLlNjKz1hLnV0aWxzLnJlZnMua2Eubm93KCktCmEuZWZ9OmZ1bmN0aW9uKCl7fTthLlVsPWZ1bmN0aW9uKGIsYyxtLGgpe3ZhciBmPSIiLGY9IiIsbj0obmV3IHdpbmRvdy5FcnJvcikuc3RhY2ssZSxuPWEudXRpbHMuaXNTdHJpbmcobik/bi5zdWJzdHJpbmcoNSk6bisiIjtxKGUpfHwoZT1hLnV0aWxzLm1hcChoLGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YT8ibnVsbCI6dm9pZCAwPT1hPyJ1bmRlZmluZWQiOiIiPT09YT8iJyciOmF9KSk7c3dpdGNoKGIpe2Nhc2UgdC5sYTpjYXNlIHQubG46Zj1hLkJiW2JdO2Y9cShtKT8iIitmK2MrIlxuIGluICIrbSsiKCIrZS5qb2luKCIsICIpKyIpXG4iK246IiIrZitjKyJcbiIrbjticmVhaztjYXNlIHQuV2Q6Zj1hLkJiW2JdO2Y9IiIrZitjKyJcbmluICIrbSsiKCIrZS5qb2luKCIsICIpKyIpXG4iK247YnJlYWs7Y2FzZSB0LmtuOmNhc2UgdC55aDpmPWEuQmJbYl07Zj0iIitmK2MrIiwgYnV0ICIrbSsiPSIrZS5qb2luKCIsICIpKyJcbiIrbjticmVhaztkZWZhdWx0OmY9YS5CYlt0LmxhXSwKZj0iIitmK2MrIlxuaW4gIittKyIoIitlLmpvaW4oIiwgIikrIilcbiIrbn1yZXR1cm4gZn07YS5jSUVCVT1iO3ZhciBzPTA7YygiTTYiKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXt0aGlzLm1heD1iO3RoaXMuSmM9MH1hLnByb3RvdHlwZS5Gaz1mdW5jdGlvbigpe3RoaXMuVWIoKXx8dGhpcy5KYysrfTthLnByb3RvdHlwZS5VYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkpjPj10aGlzLm1heH07YS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLkpjPTB9O3JldHVybiBhfSgpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5LYj1bXTt0aGlzLkVkPW5ldyBiKGUud2kpO3RoaXMubGQ9bmV3IGIoZS5waSl9ZS5wcm90b3R5cGUuc3VibWl0PWZ1bmN0aW9uKGIpe3RoaXMucHVzaChiKSYmYS5pbml0RVhURG9uZSYmdGhpcy5wcm9jZXNzUSgpfTtlLnByb3RvdHlwZS5wcm9jZXNzUT1mdW5jdGlvbigpe2Zvcih2YXIgYj0KdGhpcy5GaigpLGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIGY9YltoXTsiZnVuY3Rpb24iPT09dHlwZW9mIGEuY29tbWFuZHNbZlswXV0/KGEuaXNEZWJ1ZyYmYS5sb2coIk03IixmWzBdLGYuc2xpY2UoMSkuam9pbigiLCAiKSksYS5jb21tYW5kc1tmWzBdXS5hcHBseShhLGYuc2xpY2UoMSkpKTphLmVycm9yKCJNOCIsZlswXSl9fTtlLnByb3RvdHlwZS5qbD1mdW5jdGlvbihhKXtyZXR1cm4icmVwb3J0WGhyIj09PWF8fCJyZXBvcnRQYWdlRXJyb3IiPT09YX07ZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihiKXt2YXIgaD1iWzBdLGY9dGhpcy5qbChoKSxuPWY/dGhpcy5FZDp0aGlzLmxkO2lmKG4uVWIoKSlyZXR1cm4gYS5sb2coIk05IixmPyJzcG9udGFuZW91cyI6Im5vbiBzcG9udGFuZW91cyIsaCksITE7dGhpcy5LYi5wdXNoKGIpO24uRmsoKTtyZXR1cm4hMH07ZS5wcm90b3R5cGUuRmo9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLktiO3RoaXMucmVzZXQoKTtyZXR1cm4gYX07ZS5wcm90b3R5cGUuc2l6ZT0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LYi5sZW5ndGh9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5LYj1bXTt0aGlzLkVkLnJlc2V0KCk7dGhpcy5sZC5yZXNldCgpfTtlLnByb3RvdHlwZS5pc1Nwb250YW5lb3VzUXVldWVEZWFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWQuVWIoKX07ZS5wcm90b3R5cGUuaXNOb25TcG9udGFuZW91c1F1ZXVlRGVhZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkLlViKCl9O3JldHVybiBlfSgpO2wud2k9MTAwO2wucGk9MTAwO2EuQ29tbWFuZEV4ZWN1dG9yPWx9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXthLnE9bmV3IGEuQ29tbWFuZEV4ZWN1dG9yO2EuY29tbWFuZD1mdW5jdGlvbihiKXtmb3IodmFyIGw9MTtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKTthLmlzRGVidWcmJmEubG9nKCJNMTAiLGIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5zbGljZSgxKS5qb2luKCIsICIpKTthLnEuc3VibWl0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfX0pKGt8fAooaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYSl7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dGhpcy5zdGF0dXM9e319YS5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt9O2EucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3RoaXMuc3RhdHVzW2FdPWJ9O3JldHVybiBhfSgpO2Eud2M9bH0pKGEubW9uaXRvcnx8KGEubW9uaXRvcj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWEudXRpbHMud2EsZT1hLnV0aWxzLmlzRGVmaW5lZDt3aW5kb3cuQURSVU0uYW9wPWI7Yi5zdXBwb3J0PWZ1bmN0aW9uKGEpe3JldHVybiFhfHwiYXBwbHkiaW4gYX07Yi5hcm91bmQ9ZnVuY3Rpb24oYyxoLGYsbixtKXthLmFzc2VydChiLnN1cHBvcnQoYyksIk0xMSIpO2M9Y3x8ZnVuY3Rpb24oKXt9O3JldHVybiBmdW5jdGlvbigpe2lmKGEuaXNEZWJ1Zyl0cnl7YS5sb2coIk0xMiIsbixsKGFyZ3VtZW50cykuam9pbigiLCAiKSl9Y2F0Y2goYil7YS5sb2coIk0xMyIsCmUoYi5zdGFjayl8fGIudG9TdHJpbmcoKSl9dmFyIHQ9bChhcmd1bWVudHMpLHA7dHJ5e2gmJihwPWguYXBwbHkodGhpcyx0KSl9Y2F0Y2gocil7YS5leGNlcHRpb24ociwiTTE0IixuLHIpfWEuYXNzZXJ0KCFwfHxhLnV0aWxzLmlzQXJyYXkocCkpO3ZhciBzPXZvaWQgMDt0cnl7cz1jLmFwcGx5KHRoaXMscHx8dCl9Y2F0Y2godyl7dGhyb3cgYS5sb2codywiTTE1IixuLHcpLG0/bSh3KTphLm1vbml0b3IuRXJyb3JNb25pdG9yLmwodyksdzt9ZmluYWxseXt0cnl7ZiYmKGUocykmJih0W3QubGVuZ3RoXT17bWc6c30pLGYuYXBwbHkodGhpcyx0KSl9Y2F0Y2goQSl7YS5leGNlcHRpb24oQSwiTTE2IixuLEEpfX1yZXR1cm4gc319O2IudWY9ZnVuY3Rpb24oYSl7YT1hW2EubGVuZ3RoLTFdO3ZhciBiO2UoYSkmJmUoYS5tZykmJihiPWEubWcpO3JldHVybiBifTtiLmJlZm9yZT1mdW5jdGlvbihhLGgsZil7cmV0dXJuIGIuYXJvdW5kKGEsaCxudWxsLGYpfTtiLmFmdGVyPWZ1bmN0aW9uKGEsCmgsZil7cmV0dXJuIGIuYXJvdW5kKGEsbnVsbCxoLGYpfTtiLmZvcmNlV3JhcD1mdW5jdGlvbihiKXt2YXIgaD1iLmN1c3RvbURlc2NyaXB0b3JDb25maWd8fHt9LGY9bnVsbCxuPWIucGFyZW50T2JqZWN0LG09Yi5wcm9wZXJ0eSxxPWIuc2V0VXBGdW5jLHQ9Yi53cmFwTmV3RnVuY3Rpb25BZ2Fpbnx8ITEscD1iLnByb3BlcnR5V3JhcHBlZEZ1bmN0aW9uTmFtZTtpZihuJiZtKXtmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixtKTtpZighZnx8Zi5jb25maWd1cmFibGUpe2Y/KGRlbGV0ZSBmLndyaXRhYmxlLGRlbGV0ZSBmLnZhbHVlKTpmPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH07dmFyIGw9Zi5zZXQscz1mLmdldDtmLnNldD1oLnNldHx8ZnVuY3Rpb24obSl7ITAhPT1tLnVzZWRCeUFnZW50JiYoZShsKSYmbChhcmd1bWVudHMpLGUoYi5MYSkmJiF0fHwhYS51dGlscy5pc0Z1bmN0aW9uKHEpfHxxKG0pKX07Zi5nZXQ9aC5nZXR8fGZ1bmN0aW9uKCl7dmFyIG09CnM/cygpOmEudXRpbHMucmVmc1twXTtlKGIuTGEpJiYobT1iLkxhKTtyZXR1cm4gbX19ZWxzZSBhLmxvZygiTTE3IixwKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixtLGYpfWVsc2UgYS5lcnJvcigiTTE4Iil9fSkoYS5hb3B8fChhLmFvcD17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7YT1hLkV2ZW50VHlwZXx8KGEuRXZlbnRUeXBlPXt9KTthW2EuUGFnZVZpZXc9MF09IlBhZ2VWaWV3IjthW2EuQWpheD0yXT0iQWpheCI7YVthLlZQYWdlVmlldz0zXT0iVlBhZ2VWaWV3IjthW2EuRXJyb3I9NF09IkVycm9yIjthW2EuSUZSQU1FPTFdPSJJRlJBTUUiO2FbYS5BQlNUUkFDVD0xMDBdPSJBQlNUUkFDVCI7YVthLkFEUlVNX1hIUj0xMDFdPSJBRFJVTV9YSFIiO2FbYS5OR19WSVJUVUFMX1BBR0U9MTAyXT0iTkdfVklSVFVBTF9QQUdFIn0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpe3ZhciBiPWEuZXZlbnRzfHwoYS5ldmVudHM9e30pO2IuVD17fTtiLlRbYS5FdmVudFR5cGUuQUJTVFJBQ1RdPQp7Z3VpZDoic3RyaW5nIix1cmw6InN0cmluZyIscGFyZW50R1VJRDoic3RyaW5nIixwYXJlbnRVcmw6InN0cmluZyIscGFyZW50VHlwZToibnVtYmVyIix0aW1lc3RhbXA6Im51bWJlciJ9O2IuVFthLkV2ZW50VHlwZS5WUGFnZVZpZXddPXtyZXNUaW1pbmc6Im9iamVjdCJ9O2IuVFthLkV2ZW50VHlwZS5OR19WSVJUVUFMX1BBR0VdPXtkaWdlc3RDb3VudDoibnVtYmVyIn07Yi5UW2EuRXZlbnRUeXBlLkFqYXhdPXttZXRob2Q6InN0cmluZyIscGFyZW50UGhhc2U6InN0cmluZyIscGFyZW50UGhhc2VJZDoibnVtYmVyIixlcnJvcjoib2JqZWN0IixwYXJhbWV0ZXI6Im9iamVjdCIseGhyU3RhdHVzOiJudW1iZXIiLGRhdGFPYmplY3Q6Im9iamVjdCJ9O2IuVFthLkV2ZW50VHlwZS5BRFJVTV9YSFJdPXthbGxSZXNwb25zZUhlYWRlcnM6InN0cmluZyJ9O2IuVFthLkV2ZW50VHlwZS5FcnJvcl09e21zZzoic3RyaW5nIixsaW5lOiJudW1iZXIiLHN0YWNrOiJzdHJpbmcifX0pKGt8fChrPXt9KSk7CihmdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt0aGlzLmZhPXt9fWEucHJvdG90eXBlLm1hcms9ZnVuY3Rpb24oYSxiKXtsLm1hcmsuYXBwbHkodGhpcyxhcmd1bWVudHMpfTthLnByb3RvdHlwZS5nZXRUaW1pbmc9ZnVuY3Rpb24oYSl7cmV0dXJuKGE9dGhpcy5nZXRFbnRyeUJ5TmFtZShhKSkmJmEuc3RhcnRUaW1lfTthLnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKGEsYixmKXtsLm1lYXN1cmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTthLnByb3RvdHlwZS5nZXRFbnRyeUJ5TmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gbC5nZXRFbnRyeUJ5TmFtZS5jYWxsKHRoaXMsYSl9O3JldHVybiBhfSgpO2IuSWM9ZnVuY3Rpb24oYSl7cmV0dXJuIGwuSWMoYSl9O2EuUGVyZm9ybWFuY2VUcmFja2VyPWI7dmFyIGw7KGZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMuaGFzT3duUHJvcGVydHlEZWZpbmVkLGg9YS51dGlscy5oYigpLGY9YS51dGlscy5ub3c7Yi5tYXJrPQpmdW5jdGlvbihiLGMpe3RoaXMuZmFbYl09e25hbWU6YixlbnRyeVR5cGU6Im1hcmsiLHN0YXJ0VGltZTphLnV0aWxzLmlzRGVmaW5lZChjKT9jOmYoKSxkdXJhdGlvbjowfX07Yi5tZWFzdXJlPWZ1bmN0aW9uKGIsbSxlKXtjKHRoaXMuZmEsbSkmJmModGhpcy5mYSxlKT90aGlzLmZhW2JdPXtuYW1lOmIsZW50cnlUeXBlOiJtZWFzdXJlIixzdGFydFRpbWU6bT90aGlzLmZhW21dLnN0YXJ0VGltZTpoLGR1cmF0aW9uOihlP3RoaXMuZmFbZV0uc3RhcnRUaW1lOmYoKSktKG0/dGhpcy5mYVttXS5zdGFydFRpbWU6aCl9OmEuZXJyb3IoIk0xOSIsYyh0aGlzLmZhLG0pP2U6bSl9O2IuZ2V0RW50cnlCeU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZmFbYV18fG51bGx9O2IuSWM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEraH19KShsfHwobD17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGwoYixjKXtiPWJ8fHt9O2Zvcih2YXIgbiBpbiBiKWNbbl09CmZ1bmN0aW9uKCl7dmFyIGM9bixmPWJbbl07cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBoPSJfIitjLG49dGhpc1toXTtpZihhLnV0aWxzLmlzRGVmaW5lZChiKSlpZih0eXBlb2YgYj09PWYpdGhpc1toXT1iO2Vsc2UgdGhyb3cgaD0id3JvbmcgdHlwZSBvZiAiK2MrIiB2YWx1ZSwgIit0eXBlb2YgYisiIHBhc3NlZCBpbiBidXQgc2hvdWxkIGJlIGEgIitmKyIuIixhLnJlcG9ydEFQSU1lc3NhZ2UoYS5WLldkLGgsIkFEUlVNLnJlcG9ydCIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSksVHlwZUVycm9yKGgpO3JldHVybiBufX0oKX1mdW5jdGlvbiBlKGEpe3ZhciBiPXt9LGM7Zm9yKGMgaW4gYSl7dmFyIG09YVtjXTtiW20uc3RhcnRdPSEwO2JbbS5lbmRdPSEwfXJldHVybiBifXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihjKXt0aGlzLnBlcmY9bmV3IGEuUGVyZm9ybWFuY2VUcmFja2VyOyJPYmplY3QiPT09dGhpcy5jb25zdHJ1Y3Rvci5uYW1lJiZhLnJlcG9ydEFQSU1lc3NhZ2UoYS5WLmxhLAphLldhKTt0aGlzLnRpbWVzdGFtcChhLnV0aWxzLm5vdygpKTt0aGlzLmd1aWQoYS51dGlscy5nZW5lcmF0ZUdVSUQoKSk7dGhpcy51cmwoZG9jdW1lbnQuVVJMKTt0aGlzLmtjKGMpfWIucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudFR5cGUuQUJTVFJBQ1R9O2IucHJvdG90eXBlLmtjPWZ1bmN0aW9uKGIpe2lmKGEudXRpbHMuaXNPYmplY3QoYikpZm9yKHZhciBjIGluIGIpe3ZhciBtPXRoaXNbY118fHRoaXNbIm1hcmsiK2EudXRpbHMuT2UoYyldO20mJmEudXRpbHMuaXNGdW5jdGlvbihtKSYmbS5jYWxsKHRoaXMsYltjXSl9fTtiLkRjPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm57Z3VpZDpmdW5jdGlvbigpe3JldHVybiBhfSx1cmw6ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdHlwZTpmdW5jdGlvbigpe3JldHVybiBjfX19O2IucHJvdG90eXBlLm5rPWZ1bmN0aW9uKCl7cmV0dXJuIGIuRGModGhpcy5wYXJlbnRHVUlEKCksdGhpcy5wYXJlbnRVcmwoKSx0aGlzLnBhcmVudFR5cGUoKSl9OwpiLnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5uaygpO2EudXRpbHMuaXNEZWZpbmVkKGIpJiYoYS51dGlscy5pc0Z1bmN0aW9uKGIuZ3VpZCkmJmEudXRpbHMuaXNGdW5jdGlvbihiLnVybCkmJmEudXRpbHMuaXNGdW5jdGlvbihiLnR5cGUpPyh0aGlzLnBhcmVudEdVSUQoYi5ndWlkKCkpLHRoaXMucGFyZW50VXJsKGIudXJsKCkpLHRoaXMucGFyZW50VHlwZShiLnR5cGUoKSkpOmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsIm9iamVjdCBpcyBub3QgYSB2YWxpZCBFdmVudElkZW50aWZpZXIiLCJFdmVudFRyYWNrZXIucGFyZW50IixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIGN9O3JldHVybiBifSgpO2IuRXZlbnRUcmFja2VyPWM7Yi5NYT1sO2IuSWU9ZnVuY3Rpb24oYixjKXtiPWJ8fHt9O3ZhciBuPWUoYiksbTtmb3IobSBpbiBuKW49YS51dGlscy5PZShtKSxjWyJtYXJrIituXT1hLnV0aWxzLm9nKGZ1bmN0aW9uKGEsCmIpe3RoaXMucGVyZi5tYXJrKGEsYil9LG0pLGNbImdldCIrbl09YS51dGlscy5vZyhmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wZXJmLmdldFRpbWluZyhhKX0sbSl9O2woYi5UW2EuRXZlbnRUeXBlLkFCU1RSQUNUXSxjLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhoKXtoPWIuY2FsbCh0aGlzLGgpfHx0aGlzO2guY29uc3RydWN0b3IhPWMmJmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLkVycm9yIixbXSk7cmV0dXJuIGh9dihjLGIpO2MucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudFR5cGUuRXJyb3J9O3JldHVybiBjfShiLkV2ZW50VHJhY2tlcik7Yi5FcnJvcj1sO2IuTWEoYi5UW2EuRXZlbnRUeXBlLkVycm9yXSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPQp7fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoKXt2YXIgaD1udWxsIT09YiYmYi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7aC5zbD1mdW5jdGlvbihiKXt2YXIgbj1iLm1lc3NhZ2UsbT1iLmZpbGVuYW1lLGU9Yi5saW5lbm8sdD1iLmNvbG5vO2I9Yi5lcnJvcjthLmxvZygiTTIwIik7aWYoYS51dGlscy5pc0RlZmluZWQoYil8fGMuWGIpYS5sb2coIk0yMSIpLGMuWGI9ITAsaC5IYShuLG0sZSx0LGIpfTtyZXR1cm4gaH12KGMsYik7Yy5sPWZ1bmN0aW9uKGIpe2EubW9uaXRvci5nYS5IYShiLm1lc3NhZ2V8fGIuZGVzY3JpcHRpb24sYi5maWxlTmFtZXx8Yi5maWxlbmFtZSxiLmxpbmVOdW1iZXIsYi5jb2x1bW5OdW1iZXIsYil9O2MucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcztiLnByb3RvdHlwZS5zZXRVcC5jYWxsKHRoaXMpO2EudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csCiJlcnJvciIsdGhpcy5zbCwhMCk7YS5saXN0ZW5Gb3JFcnJvcnM9ZnVuY3Rpb24oKXtjLldmKCl9O3RoaXMuV2YoKX07Yy5wcm90b3R5cGUuZW09ZnVuY3Rpb24oKXtjLlFjPTB9O2MucHJvdG90eXBlLkhhPWZ1bmN0aW9uKGIsZixuLG0sZSl7Yy5RYz49YS5jb25mLmxpP2EubG9nKCJNMjIiKToobT1hLnV0aWxzLnRyeUV4dHJhY3RpbmdFcnJvclN0YWNrKGUpLGEuY29tbWFuZCgicmVwb3J0UGFnZUVycm9yIixuZXcgYS5ldmVudHMuRXJyb3IoYS51dGlscy5tZXJnZUpTT04oe21zZzpiKyIiLHVybDphLnV0aWxzLmlzU3RyaW5nKGYpP2Y6dm9pZCAwLGxpbmU6YS51dGlscy5pc051bWJlcihuKT9uOnZvaWQgMCxzdGFjazptfSx0aGlzLnN0YXR1cykpKSxjLlFjKyssYy5oYWRFcnJvcnM9ITApfTtjLnByb3RvdHlwZS5XZj1mdW5jdGlvbigpe3ZhciBiPXRoaXM7Yy5YYj0hMTthLmFvcC5zdXBwb3J0KHdpbmRvdy5vbmVycm9yKT8od2luZG93Lm9uZXJyb3I9YS5hb3AuYXJvdW5kKHdpbmRvdy5vbmVycm9yLApmdW5jdGlvbihmLG4sbSxlLHQpe2MuWGI/YS5sb2coIk0yMyIpOmMuaGQ/YS5sb2coIk0yNSIpOihhLmxvZygiTTI0IiksYi5IYShmLG4sbSxlLHQpLGMuaGQ9ITApfSxmdW5jdGlvbigpe2EubG9nKCJNMjYiKTtjLmhkPSExfSwib25lcnJvciIpLGEubG9nKCJNMjciKSk6YS5sb2coIk0yOCIpfTtyZXR1cm4gY30oYi53Yyk7bC5oZD0hMTtsLlFjPTA7bC5oYWRFcnJvcnM9ITE7bC5YYj0hMTtiLkVycm9yTW9uaXRvcj1sO2IuZ2E9bmV3IGIuRXJyb3JNb25pdG9yfSkoYS5tb25pdG9yfHwoYS5tb25pdG9yPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS5sb2csZT1hLmFvcC5hZnRlcixjPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGYoKXtyZXR1cm4gbnVsbCE9PWMmJmMuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXYoZixjKTtmLnByb3RvdHlwZS5zZXRVcD1mdW5jdGlvbigpe2EudXRpbHMubWFwKFsiZXJyb3IiLCJleGNlcHRpb24iXSwKZnVuY3Rpb24oYil7dmFyIGM9eFtiXTthLnV0aWxzLmlzRnVuY3Rpb24oYykmJmEuYW9wLnN1cHBvcnQoYyk/KGwoIk0yOSIsYikseFtiXT1lKGMsZnVuY3Rpb24oYSl7bCgiTTMwIixiLGEpO2YuVGkoYSl9KSk6bCgiTTMxIixiKX0pO2IuZ2EuSGE9ZShiLmdhLkhhLGZ1bmN0aW9uKCl7MDxmLm9hLmxlbmd0aD8obCgiTTMyIiksZi5vYT1bXSk6bCgiTTMzIil9KX07Zi5UaT1mdW5jdGlvbihiKXtmLm9hLmxlbmd0aD49YS5jb25mLmZpP2woIk0zNCIpOmEudXRpbHMuaXNTdHJpbmcoYik/KGwoIk0zNSIsYiksZi5vYS5wdXNoKGIpLGEudXRpbHMub1NUTyhmLkNnKSk6YS51dGlscy5pc09iamVjdChiKT8oYj1hLnV0aWxzLnRvSlNPTlN0cmluZyhiKSxudWxsIT09Yj8obCgiTTM2IixiKSxmLm9hLnB1c2goYiksYS51dGlscy5vU1RPKGYuQ2cpKTphLmVycm9yKCJNMzciKSk6bCgiTTM4Iix0eXBlb2YgYil9O2YuQ2c9ZnVuY3Rpb24oKXswPGYub2EubGVuZ3RoPyhsKCJNMzkiKSxiLmdhLkhhKGYub2Euam9pbigiXG4iKSksCmYub2E9W10pOmwoIk00MCIpfTtyZXR1cm4gZn0oYi53Yyk7Yy5vYT1bXTtiLm5uPWM7Yi50aj1uZXcgY30pKGEubW9uaXRvcnx8KGEubW9uaXRvcj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYigpe31iLnNldFVwPWZ1bmN0aW9uKCl7Yi5wZXJmPWEudXRpbHMucmVmcy5rYTthLnV0aWxzLmlzT2JqZWN0KGIucGVyZikmJmEudXRpbHMuaXNPYmplY3QoYi5wZXJmLnRpbWluZyl8fChiLnBlcmY9dm9pZCAwKX07cmV0dXJuIGJ9KCk7bC5wZXJmPW51bGw7Yi5QZXJmb3JtYW5jZVdyYXBwZXI9bH0pKGEubW9uaXRvcnx8KGEubW9uaXRvcj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubmF2VGltaW5nPW51bGx9ZS5wcm90b3R5cGUuWGU9ZnVuY3Rpb24oKXt2YXIgYz1iLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmOwppZihjPWMmJmMudGltaW5nKWlmKGMubmF2aWdhdGlvblN0YXJ0JiZjLm5hdmlnYXRpb25TdGFydDw9Yy5sb2FkRXZlbnRFbmQpe3ZhciBoPXt9LGY7Zm9yKGYgaW4gYyl7dmFyIG49Y1tmXTsibnVtYmVyIj09PXR5cGVvZiBuJiYoaFtmXT1uKX10aGlzLm5hdlRpbWluZz1ofWVsc2UgYS5sb2coIk00MiIpO2Vsc2UgYS5sb2coIk00MSIpfTtlLnByb3RvdHlwZS5zZXRVcD1mdW5jdGlvbigpe2IuUGVyZm9ybWFuY2VXcmFwcGVyLnNldFVwKCl9O3JldHVybiBlfSgpO2IuTmF2VGltaW5nTW9uaXRvcj1sO2IubmF2TW9uaXRvcj1uZXcgYi5OYXZUaW1pbmdNb25pdG9yfSkoYS5tb25pdG9yfHwoYS5tb25pdG9yPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5zZD1udWxsO2IuUGVyZm9ybWFuY2VXcmFwcGVyLnNldFVwKCk7dGhpcy5yZXNvdXJjZUJ1ZmZlcj1bXTt0aGlzLmJhc2VQYWdlUmVzb3VyY2VCdWZmZXI9CltdO3RoaXMucWU9NTAwO3RoaXMuemM9MTUwO3RoaXMuRWk9M0UzO3RoaXMuc2V0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplKCk7dGhpcy5ybSgpfWUucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKCl7Yi5QZXJmb3JtYW5jZVdyYXBwZXIuc2V0VXAoKTthLnV0aWxzLmlzRGVmaW5lZChiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmKSYmYS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYuZ2V0RW50cmllc0J5VHlwZSk/YS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYuYWRkRXZlbnRMaXN0ZW5lcik/Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZi5hZGRFdmVudExpc3RlbmVyKCJyZXNvdXJjZXRpbWluZ2J1ZmZlcmZ1bGwiLHRoaXMuZmIuYmluZCh0aGlzKSk6Im9ucmVzb3VyY2V0aW1pbmdidWZmZXJmdWxsImluIGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmY/YS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYucmQpPwpiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmLnJkPWEuYW9wLmFyb3VuZChiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmLnJkLHRoaXMuZmIuYmluZCh0aGlzKSk6Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZi5yZD10aGlzLmZiLmJpbmQodGhpcyk6YS51dGlscy5yZWZzLnNldEludGVydmFsLmNhbGwod2luZG93LHRoaXMuaG0uYmluZCh0aGlzKSx0aGlzLkVpKTphLmxvZygiTTQzIik7dGhpcy52bSgpO3RoaXMuaW0oKX07ZS5wcm90b3R5cGUudm09ZnVuY3Rpb24oKXt2YXIgYz1hLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5yZXNUaW1pbmcmJmEuY29uZi51c2VyQ29uZi5yZXNUaW1pbmcuYnVmU2l6ZTthLnV0aWxzLmlzRGVmaW5lZChiLlBlcmZvcm1hbmNlV3JhcHBlci5wZXJmKSYmYS51dGlscy5pc0Z1bmN0aW9uKGIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmYuc2V0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplKSYmYS51dGlscy5pc051bWJlcihjKSYmMDxjJiYodGhpcy56Yz0KYyl9O2UucHJvdG90eXBlLmltPWZ1bmN0aW9uKCl7dmFyIGM9Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZjthLnV0aWxzLmlzRGVmaW5lZChjKSYmKGEudXRpbHMuaXNGdW5jdGlvbihjLnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZSkmJihjLnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZT1hLmFvcC5hcm91bmQoYy5zZXRSZXNvdXJjZVRpbWluZ0J1ZmZlclNpemUsZnVuY3Rpb24oKXthLnV0aWxzLmlzRGVmaW5lZChhcmd1bWVudHMpJiZhLnV0aWxzLmlzRGVmaW5lZChhcmd1bWVudHNbMF0pJiYodGhpcy56Yz1hcmd1bWVudHNbMF0pfS5iaW5kKHRoaXMpKSksYS51dGlscy5pc0Z1bmN0aW9uKGMuY2xlYXJSZXNvdXJjZVRpbWluZ3MpJiYoYy5jbGVhclJlc291cmNlVGltaW5ncz1hLmFvcC5hcm91bmQoYy5jbGVhclJlc291cmNlVGltaW5ncyxmdW5jdGlvbigpe3RoaXMuZmIoKX0uYmluZCh0aGlzKSkpKX07ZS5wcm90b3R5cGUuV2U9ZnVuY3Rpb24oKXt0aGlzLmJhc2VQYWdlUmVzb3VyY2VCdWZmZXI9CnRoaXMubWYoKX07ZS5wcm90b3R5cGUuZmI9ZnVuY3Rpb24oKXt0aGlzLnJlc291cmNlQnVmZmVyPXRoaXMubWYoKX07ZS5wcm90b3R5cGUuaG09ZnVuY3Rpb24oKXt0aGlzLmpiKCkubGVuZ3RoPj10aGlzLnpjJiZ0aGlzLmZiKCl9O2UucHJvdG90eXBlLmpiPWZ1bmN0aW9uKCl7dmFyIGM9Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZixoPVtdO2MmJmMuZ2V0RW50cmllc0J5VHlwZSYmKGM9Yy5nZXRFbnRyaWVzQnlUeXBlKCJyZXNvdXJjZSIpKSYmYy5sZW5ndGgmJjA8Yy5sZW5ndGgmJmMudW5zaGlmdCYmKGg9Yyk7MD09aC5sZW5ndGgmJmEubG9nKCJNNDQiKTtyZXR1cm4gaH07ZS5wcm90b3R5cGUucms9ZnVuY3Rpb24oYixoKXtyZXR1cm4gYS51dGlscy5maWx0ZXIodGhpcy5yZXNvdXJjZUJ1ZmZlcixmdW5jdGlvbihhKXtyZXR1cm4gYithLnN0YXJ0VGltZT49aH0pfTtlLnByb3RvdHlwZS5zaz1mdW5jdGlvbihhLGIpe3RoaXMucmVzb3VyY2VCdWZmZXI9dGhpcy5yZXNvdXJjZUJ1ZmZlci5jb25jYXQodGhpcy5qYigpKTsKdmFyIGY9dGhpcy5yayhhLGIpO3RoaXMuY2xlYXJSZXNvdXJjZVRpbWluZ3MoKTt0aGlzLnJlc291cmNlQnVmZmVyPVtdO3JldHVybiBmfTtlLnByb3RvdHlwZS5ybT1mdW5jdGlvbigpe3ZhciBjPWIuUGVyZm9ybWFuY2VXcmFwcGVyLnBlcmY7YS51dGlscy5pc0RlZmluZWQoYykmJmEudXRpbHMuaXNGdW5jdGlvbihjLmNsZWFyUmVzb3VyY2VUaW1pbmdzKSYmKHRoaXMuc2Q9Yy5jbGVhclJlc291cmNlVGltaW5ncy5iaW5kKGMpKX07ZS5wcm90b3R5cGUuc2V0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIGM9Yi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZixoPWEuY29uZi51c2VyQ29uZiYmYS5jb25mLnVzZXJDb25mLnJlc1RpbWluZyYmYS5jb25mLnVzZXJDb25mLnJlc1RpbWluZy5idWZTaXplOyFhLnV0aWxzLmlzTnVtYmVyKGgpfHwwPj1oP2EubG9nKCJNNDUiKTpjJiZhLnV0aWxzLmlzRnVuY3Rpb24oYy5zZXRSZXNvdXJjZVRpbWluZ0J1ZmZlclNpemUpPwpjLnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZShoKTphLmxvZygiTTQ2Iil9O2UucHJvdG90eXBlLm1mPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5qYigpO2lmKHRoaXMucmVzb3VyY2VCdWZmZXIubGVuZ3RoK2IubGVuZ3RoPnRoaXMucWUpcmV0dXJuIGEubG9nKCJNNDciKSx0aGlzLnJlc291cmNlQnVmZmVyLmNvbmNhdChiLnNsaWNlKDAsdGhpcy5xZS10aGlzLnJlc291cmNlQnVmZmVyLmxlbmd0aCkpO3RoaXMuY2xlYXJSZXNvdXJjZVRpbWluZ3MoKTtyZXR1cm4gdGhpcy5yZXNvdXJjZUJ1ZmZlci5jb25jYXQoYil9O2UucHJvdG90eXBlLmNsZWFyUmVzb3VyY2VUaW1pbmdzPWZ1bmN0aW9uKCl7YS5jb25mLmNsZWFyUmVzVGltaW5nJiZhLnV0aWxzLmlzRnVuY3Rpb24odGhpcy5zZCkmJnRoaXMuc2QoKX07cmV0dXJuIGV9KCk7Yi5SZXNvdXJjZU1vbml0b3I9bDtiLnJlc291cmNlTW9uaXRvcj1uZXcgYi5SZXNvdXJjZU1vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fAooaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbChhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGUoYSl7cmV0dXJuInZpZGVvIj09bChhKX1mdW5jdGlvbiBjKGEpe3JldHVybiJpbWFnZSI9PWwoYSl9ZnVuY3Rpb24gaChhKXtyZXR1cm4ic3ZnIj09bChhKX1mdW5jdGlvbiBmKGEpe3JldHVybiAwPT09YS5sYXN0SW5kZXhPZigidmlkZW8vIiwwKXx8MD09PWEubGFzdEluZGV4T2YoImltYWdlLyIsMCl8fDA9PT1hLmxhc3RJbmRleE9mKCJmb250LyIsMCl8fDA9PT1hLmxhc3RJbmRleE9mKCJtb2RlbC8iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidGV4dC8iLDApfWZ1bmN0aW9uIG4oYSl7cmV0dXJuImVtYmVkIj09bChhKSYmZihhLnR5cGUpfWZ1bmN0aW9uIG0oYSl7cmV0dXJuIm9iamVjdCI9PWwoYSkmJmYoYS50eXBlKX1mdW5jdGlvbiBxKGEpe3JldHVybiJpbWciPT1sKGEpfWEuams9bDthLlNmPWU7YS5abj1jO2EuWW49Cmg7YS5LZj1mdW5jdGlvbihhKXtyZXR1cm4iY2FudmFzIj09bChhKX07YS5RZj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIFRleHR9O2EuV249ZjthLm9mPWZ1bmN0aW9uKGEpe3JldHVybihhLnJpZ2h0LWEubGVmdCkqKGEuYm90dG9tLWEudG9wKX07YS5Wbj1uO2EuWG49bTthLlVuPXE7YS5uYj1mdW5jdGlvbihhKXtyZXR1cm4gcShhKXx8bShhKXx8bihhKXx8ZShhKXx8YyhhKXx8aChhKX07YS5vYj1mdW5jdGlvbihhKXthPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEpO3JldHVybiJub25lIiE9PWEuZ2V0UHJvcGVydHlWYWx1ZSgiZGlzcGxheSIpJiYiaGlkZGVuIiE9PWEuZ2V0UHJvcGVydHlWYWx1ZSgidmlzaWJpbGl0eSIpfTthLlFiPWZ1bmN0aW9uKGEpe3ZhciBiPSIiO2EgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2I9YS5jdXJyZW50U3JjfHxhLnNyYzphIGluc3RhbmNlb2YgSFRNTEVtYmVkRWxlbWVudD9iPWEuc3JjOmEgaW5zdGFuY2VvZiBIVE1MT2JqZWN0RWxlbWVudD8KYj1hLmRhdGE6InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MVmlkZW9FbGVtZW50JiZhIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudD9iPWEuY3VycmVudFNyY3x8YS5zcmM6YSBpbnN0YW5jZW9mIFNWR0ltYWdlRWxlbWVudCYmKGI9YS5ocmVmLmJhc2VWYWwpO3JldHVybiBifTthLlBuPWZ1bmN0aW9uKGEpe3ZhciBiPSIiO2EgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2I9ImltZyI6YSBpbnN0YW5jZW9mIEhUTUxFbWJlZEVsZW1lbnQ/Yj0iZW1iZWQiOmEgaW5zdGFuY2VvZiBIVE1MT2JqZWN0RWxlbWVudD9iPSJvYmplY3QiOiJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTFZpZGVvRWxlbWVudCYmYSBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQ/Yj0idmlkZW8iOmEgaW5zdGFuY2VvZiBTVkdJbWFnZUVsZW1lbnQmJihiPSJpbWFnZSIpO3JldHVybiBifTthLlhjPWZ1bmN0aW9uKGMpe3JldHVybiBhLmlzRGVmaW5lZChjLmF0dHJpYnV0ZXMpP2MuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oInNyYyIpfHwKYy5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiaHJlZiIpOnZvaWQgMH19KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dGhpcy5Waz0wLjI7dGhpcy5VYT0wO3RoaXMubGI9ITE7dGhpcy56YT1hLmNvbmYuc3BhMjt0aGlzLnFjPXRoaXMuc2M9dGhpcy5nPXRoaXMuYmE9dGhpcy54YT0wO3RoaXMudmlld3BvcnQ9e3RvcDowLGxlZnQ6MCxib3R0b206dGhpcy5xYyxyaWdodDp0aGlzLnNjfTt0aGlzLlNhPTB9Yi5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt0aGlzLlI9e307dGhpcy5jYz17fTt0aGlzLmJhPWEudXRpbHMubm93KCk7dGhpcy5nPTA7dmFyIGI9d2luZG93Lk11dGF0aW9uT2JzZXJ2ZXI7dGhpcy5UZSgpO2EudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csInJlc2l6ZSIsYS51dGlscy55aih0aGlzLlRlKS5iaW5kKHRoaXMpKTthLnV0aWxzLmlzRGVmaW5lZChiKSYmCihhLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuWm9uZSkmJmEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5ab25lLl9fc3ltYm9sX18oIk11dGF0aW9uT2JzZXJ2ZXIiKSk/dGhpcy4kYj1uZXcgKHdpbmRvd1t3aW5kb3cuWm9uZS5fX3N5bWJvbF9fKCJNdXRhdGlvbk9ic2VydmVyIildKSh0aGlzLmlnLmJpbmQodGhpcykpOnRoaXMuJGI9bmV3IGIodGhpcy5pZy5iaW5kKHRoaXMpKSx0aGlzLiRiLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMCxhdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbInNyYyIsImhyZWYiXX0pLGEubG9nKCJNNDgiKSl9O2IucHJvdG90eXBlLmlnPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7YS5QKCk7Yi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3N3aXRjaChhLnR5cGUpe2Nhc2UgImNoaWxkTGlzdCI6W10uc2xpY2UuY2FsbChhLmFkZGVkTm9kZXMpLmZvckVhY2goZnVuY3Rpb24oYSl7Yy5MZShhKX0pO2JyZWFrOwpjYXNlICJhdHRyaWJ1dGVzIjpjLkxlKGEudGFyZ2V0KX19KTthLlEoKX07Yi5wcm90b3R5cGUuVGU9ZnVuY3Rpb24oKXt0aGlzLnNjPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5pbm5lcldpZHRoKSYmYS51dGlscy5pc0RlZmluZWQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKT9NYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpOndpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGh8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0uY2xpZW50V2lkdGg7dGhpcy5xYz1hLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuaW5uZXJIZWlnaHQpJiZhLnV0aWxzLmlzRGVmaW5lZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KT9NYXRoLm1pbih3aW5kb3cuaW5uZXJIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk6CndpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5jbGllbnRIZWlnaHQ7YS5sb2coIk00OSIsdGhpcy5zYyx0aGlzLnFjKTt0aGlzLnZpZXdwb3J0PXt0b3A6MCxsZWZ0OjAsYm90dG9tOnRoaXMucWMscmlnaHQ6dGhpcy5zY319O2IucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7YS5QKCk7dGhpcy5zZXRVcCgpO2EuUSgpO2EubG9nKCJNNTAiKX07Yi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLlI9e307dGhpcy5VYT0wO3RoaXMuY2M9e307dGhpcy5TYT0wO2EubG9nKCJNNTEiKX07Yi5wcm90b3R5cGUuTGU9ZnVuY3Rpb24oYil7YS5QKCk7dmFyIGM9YS51dGlscy5ub3coKTthLnV0aWxzLm5iKGIpJiYhYi5pc0FkcnVtVHJhY2tlZE5vZGU/KHRoaXMubGJ8fCh0aGlzLks9dGhpcy5LLmJpbmQodGhpcyksdGhpcy5sPXRoaXMubC5iaW5kKHRoaXMpLAp0aGlzLksuST0hMCx0aGlzLmxiPXRoaXMubC5JPSEwKSx0aGlzLmcrKyxhLmxvZygiTTUyIix0aGlzLmcpLGM9YS51dGlscy5YYyhiKSxjPWEudXRpbHMuaXNEZWZpbmVkKGMpP2MudmFsdWU6bnVsbCxhLnV0aWxzLlNmKGIpPyhiLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZGRhdGEiLHRoaXMuSyksYS5sb2coIk01MyIsYykpOihiLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHRoaXMuSyksYS5sb2coIk01NCIsYykpLGIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHRoaXMubCksYi5pc0FkcnVtVHJhY2tlZE5vZGU9ITApOmEudXRpbHMuS2YoYikmJiFiLmFkcnVtTm9kZUlkPyhhLmxvZygiTTU1IiksdGhpcy5JYihiLGMpKTphLnV0aWxzLlFmKGIpJiYodGhpcy5VYT1NYXRoLm1heCh0aGlzLlVhLGMpKTthLlEoKX07Yi5wcm90b3R5cGUuSz1mdW5jdGlvbihiKXthLlAoKTt2YXIgYz1hLnV0aWxzLm5vdygpO3RoaXMuYmE9YztiPWIudGFyZ2V0O3ZhciBoPWEudXRpbHMuUWIoYik7YS51dGlscy5pc0RlZmluZWQoaCkmJgowPGgubGVuZ3RoPyJkYXRhOiIhPWguc3Vic3RyaW5nKDAsNSl8fGIuYWRydW1Ob2RlSWQ/dGhpcy5WaShoLGMsYik6KGEubG9nKCJNNTYiKSx0aGlzLkliKGIsYykpOmIgaW5zdGFuY2VvZiBTVkdFbGVtZW50JiYhYi5hZHJ1bU5vZGVJZCYmKGEubG9nKCJNNTciKSx0aGlzLkliKGIsYykpO2ImJmIuaXNBZHJ1bVRyYWNrZWROb2RlJiYodGhpcy50YihiKSx0aGlzLmctLSxhLmxvZygiTTU4Iix0aGlzLmcpKTthLlEoKX07Yi5wcm90b3R5cGUubD1mdW5jdGlvbihiKXt2YXIgYz1iLnRhcmdldDtjJiZjLmlzQWRydW1UcmFja2VkTm9kZSYmKHRoaXMudGIoYyksdGhpcy5nLS0sYj1hLnV0aWxzLlFiKGIudGFyZ2V0KSxhLmxvZygiTTU5IixiKSl9O2IucHJvdG90eXBlLnRiPWZ1bmN0aW9uKGEpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsdGhpcy5LKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIix0aGlzLmwpfTtiLnByb3RvdHlwZS5TYj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tYihiKSYmCmEudXRpbHMub2IoYil9O2IucHJvdG90eXBlLlZpPWZ1bmN0aW9uKGIsYyxoKXthLnV0aWxzLmlzRGVmaW5lZCh0aGlzLlJbYl0pP3RoaXMuU2IoaCkmJih0aGlzLlJbYl09YyxhLmxvZygiTTYwIixiLGMpKToodGhpcy5SW2JdPWMsYS5sb2coIk02MSIsYixjKSl9O2IucHJvdG90eXBlLkliPWZ1bmN0aW9uKGIsYyl7YS5sb2coIk02MiIsdGhpcy5TYSxjLGIub3V0ZXJIVE1MKTtiLmFkcnVtTm9kZUlkPXRoaXMuU2E7dGhpcy5jY1t0aGlzLlNhXT1jO3RoaXMuU2ErPTF9O2IucHJvdG90eXBlLlVlPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7YS5qLkViLkZhJiYodGhpcy54YT1iKTt2YXIgaD0wLGY9MCxuPXRoaXMucGsodGhpcy54YSk7YS5sb2coIk02MyIsbik7W10uc2xpY2UuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKS5mb3JFYWNoKGZ1bmN0aW9uKG0pe3ZhciB0PWEudXRpbHMuUWIobSk7ZGVsZXRlIG0uaXNBZHJ1bVRyYWNrZWROb2RlO2lmKGEudXRpbHMuaXNEZWZpbmVkKHQpJiYKMDx0Lmxlbmd0aClpZihhLmxvZygiTTY0Iix0KSxhLnV0aWxzLmlzRGVmaW5lZChjLlJbdF0pKXt2YXIgcD1jLlJbdF07YS5sb2coIk02NSIsdCxwKTthLnV0aWxzLm9iKG0pJiYoYS5sb2coIk02NiIsdCxwKSxjLnphJiYoYS5sb2coIk02NyIsZixwLGIpLGY9TWF0aC5tYXgoZixwLWIpLGEubG9nKCJNNjgiLHQsZikpLGMubWIobSkmJihhLmxvZygiTTY5IixoLHAsYiksaD1NYXRoLm1heChoLHAtYiksYS5sb2coIk03MCIsdCxoKSkpfWVsc2V7aWYoYS51dGlscy5uYihtKSYmYS51dGlscy5vYihtKSYmKHA9Yy52Zih0KSxhLnV0aWxzLmlzRGVmaW5lZChwKSkpe3ZhciBsPXAuc3RhcnRUaW1lLShiLWMueGEpLHM9cC5kdXJhdGlvbipuK2w7YS5sb2coIk03MSIsdCxzKTthLmxvZygiTTcyIixwLmR1cmF0aW9uLGwpO2MuemEmJihmPU1hdGgubWF4KGYscyksYS5sb2coIk03MyIsdCxmKSk7Yy5tYihtKSYmKGg9TWF0aC5tYXgoaCxzKSxhLmxvZygiTTc0Iix0LGgpKX19ZWxzZSBhLnV0aWxzLmlzRGVmaW5lZChtLmFkcnVtTm9kZUlkKSYmCihhLnV0aWxzLmlzRGVmaW5lZChjLmNjW20uYWRydW1Ob2RlSWRdKSYmKHA9Yy5jY1ttLmFkcnVtTm9kZUlkXSxhLnV0aWxzLm9iKG0pJiYoYy56YSYmKGY9TWF0aC5tYXgoZixwLWIpLGEubG9nKCJNNzUiLG0uYWRydW1Ob2RlSWQscCkpLGMubWIobSkmJihoPU1hdGgubWF4KGgscC1iKSxhLmxvZygiTTc2IixtLmFkcnVtTm9kZUlkLHApKSkpLGRlbGV0ZSBtLmFkcnVtTm9kZUlkKX0pO2EubG9nKCJNNzciLGgsZik7dGhpcy5ZaigpLmZvckVhY2goZnVuY3Rpb24obSl7dmFyIHQ9bS51cmw7bT1tLlNiO3ZhciBwPWMudmYodCk7YS51dGlscy5pc0RlZmluZWQocCkmJihwPXAuZHVyYXRpb24qbisocC5zdGFydFRpbWUtKGItYy54YSkpLGMuemEmJihhLmxvZygiTTc4Iix0LHApLGY9TWF0aC5tYXgoZixwKSksbSYmKGEubG9nKCJNNzkiLHQscCksaD1NYXRoLm1heChoLHApKSl9KTtpZighYS5jb25mLmRpc2FibGVUZXh0Rm9yVGVzdGluZyl7dmFyIG09dGhpcy5VYS1iOzA9PWgmJihhLmxvZygiTTgwIiksCmg9TWF0aC5tYXgoaCxtKSk7dGhpcy56YSYmMD09ZiYmKGEubG9nKCJNODEiKSxmPU1hdGgubWF4KGYsbSkpfWh8PTA7Znw9MDthLmxvZygiTTgyIixiLHRoaXMueGEpO2EubG9nKCJNODMiLHdpbmRvdy5sb2NhdGlvbi5ocmVmKTthLmxvZygiTTg0IixoLGYpO2EuaXNEZWJ1ZyYmKHgubG9nKCJ1cmwgPSAiK3dpbmRvdy5sb2NhdGlvbi5ocmVmKSx4LmxvZygicmVuZGVyUmF0aW8gPSAiK24pLHgubG9nKCJ2aXN1YWxseUNvbXBsZXRlVGltZSA9ICIraCkseC5sb2coInBhZ2VDb21wbGV0ZVRpbWUgPSAiK2YpKTtyZXR1cm57dmN0OmgscGN0OmZ9fTtiLnByb3RvdHlwZS5raz1mdW5jdGlvbihhKXthPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5LGg9YS50b3ArKHdpbmRvdy5wYWdlWU9mZnNldHx8Yi5zY3JvbGxUb3ApLShiLmNsaWVudFRvcHx8MCksYj1hLmxlZnQrKHdpbmRvdy5wYWdlWE9mZnNldHx8Yi5zY3JvbGxMZWZ0KS0KKGIuY2xpZW50TGVmdHx8MCk7cmV0dXJue3RvcDpNYXRoLnJvdW5kKGgpLGxlZnQ6TWF0aC5yb3VuZChiKSxib3R0b206TWF0aC5yb3VuZChoKSthLmhlaWdodCxyaWdodDpNYXRoLnJvdW5kKGIpK2Eud2lkdGh9fTtiLnByb3RvdHlwZS5tYj1mdW5jdGlvbihiKXtiPXRoaXMua2soYik7aWYodGhpcy5ZayhiKSlyZXR1cm4gYS5sb2coIk04NSIpLCExO3ZhciBjPXt0b3A6TWF0aC5tYXgodGhpcy52aWV3cG9ydC50b3AsYi50b3ApLGxlZnQ6TWF0aC5tYXgodGhpcy52aWV3cG9ydC5sZWZ0LGIubGVmdCksYm90dG9tOk1hdGgubWluKHRoaXMudmlld3BvcnQuYm90dG9tLGIuYm90dG9tKSxyaWdodDpNYXRoLm1pbih0aGlzLnZpZXdwb3J0LnJpZ2h0LGIucmlnaHQpfSxjPWEudXRpbHMub2YoYyk7Yj1hLnV0aWxzLm9mKGIpO2lmKDAhPWImJmMvYj49dGhpcy5WaylyZXR1cm4hMDthLmxvZygiTTg2Iik7cmV0dXJuITF9O2IucHJvdG90eXBlLllrPWZ1bmN0aW9uKGEpe3JldHVybiBhLnRvcD4KdGhpcy52aWV3cG9ydC5ib3R0b218fGEuYm90dG9tPHRoaXMudmlld3BvcnQudG9wfHxhLnJpZ2h0PHRoaXMudmlld3BvcnQubGVmdHx8YS5sZWZ0PnRoaXMudmlld3BvcnQucmlnaHQ/ITA6ITF9O2IucHJvdG90eXBlLkRqPWZ1bmN0aW9uKCl7YS51dGlscy5pc0RlZmluZWQodGhpcy4kYikmJnRoaXMuJGIuZGlzY29ubmVjdCgpO2EubG9nKCJNODciKX07Yi5wcm90b3R5cGUucGs9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcyxoPTAsZj0wO3RoaXMueGYoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBtPW4ubmFtZTtpZihhLnV0aWxzLmlzRGVmaW5lZChjLlJbbV0pKXt2YXIgcT1jLlJbbV0tYi1uLnN0YXJ0VGltZSx0PW4uZHVyYXRpb247YS5sb2coIk04OCIsbSxiLG4uc3RhcnRUaW1lLGMuUlttXSx0KTt0JiYwPHEmJihoKz1xL3QsZisrKX19KTtyZXR1cm4gMDxmP2gvZjoxfTtiLnByb3RvdHlwZS5Zaj1mdW5jdGlvbigpe3ZhciBiPXRoaXMsYz1bXTtbXS5zbGljZS5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLmZvckVhY2goZnVuY3Rpb24oaCl7aWYoYS51dGlscy5vYihoKSl7dmFyIGY9CmIuWGooaCk7ZiYmKGIubWIoaCk/Yy5wdXNoKHt1cmw6ZixTYjohMH0pOmIuemEmJmMucHVzaCh7dXJsOmYsU2I6ITF9KSl9fSk7cmV0dXJuIGN9O2IucHJvdG90eXBlLlhqPWZ1bmN0aW9uKGIpe2lmKGImJmIuc3R5bGUpe3ZhciBjPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGIpLmdldFByb3BlcnR5VmFsdWUoImJhY2tncm91bmQtaW1hZ2UiKTtjfHwoYz0oYi5jdXJyZW50U3R5bGV8fGIuc3R5bGUpLmJhY2tncm91bmRJbWFnZSk7Yj10aGlzLnVrKGMpO3JldHVybiBhLnV0aWxzLmlzRGVmaW5lZChiKSYmYS51dGlscy5pc0RlZmluZWQoYi5zdWJzdHIpJiYidW5kZWZpbmVkIj09PWIuc3Vic3RyKGIubGFzdEluZGV4T2YoIi8iKSsxKT92b2lkIDA6Yn19O2IucHJvdG90eXBlLnVrPWZ1bmN0aW9uKGEpe2lmKGEmJmEubWF0Y2goInVybCIpKXJldHVybiBhLnJlcGxhY2UoJ3VybCgiJywiIikucmVwbGFjZSgnIiknLCIiKX07Yi5wcm90b3R5cGUudmY9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPQowLGg9dGhpcy54ZigpO2M8aC5sZW5ndGg7YysrKXt2YXIgZj1oW2NdO2lmKGEudXRpbHMuaXNEZWZpbmVkKGYubmFtZSkmJjA8PWYubmFtZS5pbmRleE9mKGIpKXJldHVybiBmfX07Yi5wcm90b3R5cGUueGY9ZnVuY3Rpb24oKXtyZXR1cm4gYS5qLkViLkZhP2EubW9uaXRvci5yZXNvdXJjZU1vbml0b3IuYmFzZVBhZ2VSZXNvdXJjZUJ1ZmZlcjphLm1vbml0b3IucmVzb3VyY2VNb25pdG9yLnJlc291cmNlQnVmZmVyLmNvbmNhdChhLm1vbml0b3IucmVzb3VyY2VNb25pdG9yLmpiKCkpfTtyZXR1cm4gYn0oKTthLnZuPWI7YS5OPW5ldyBifSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubGI9ITE7dGhpcy5MYz01RTM7dGhpcy5wYj1hLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZSYmYS5jb25mLnVzZXJDb25mLm5hdkNvbXBsZXRlLm1heFJlc291cmNlUXVpZXRUaW1lP2EuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZS5tYXhSZXNvdXJjZVF1aWV0VGltZToKdGhpcy5MY31lLnByb3RvdHlwZS5TZz1mdW5jdGlvbigpe2EuUCgpO3RoaXMua2IoRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIsdGhpcy51Zy5iaW5kKHRoaXMpKTt0aGlzLmtiKEhUTUxFbGVtZW50LnByb3RvdHlwZSwiaW5uZXJIVE1MIix0aGlzLnVnLmJpbmQodGhpcykpO3RoaXMua2IoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsInNyYyIsdGhpcy5xYi5iaW5kKHRoaXMpKTt0aGlzLmtiKEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSwic3JjIix0aGlzLnFiLmJpbmQodGhpcykpO3RoaXMua2IoSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZSwiaHJlZiIsdGhpcy5xYi5iaW5kKHRoaXMpKTt0aGlzLk1rKCk7dGhpcy5lZCgiYXBwZW5kIik7dGhpcy5lZCgiYXBwZW5kQ2hpbGQiKTt0aGlzLmVkKCJpbnNlcnRCZWZvcmUiKTthLlEoKX07ZS5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oYil7YS5QKCk7dGhpcy5tZD10aGlzLmc9MDt0aGlzLmJhPWI7dGhpcy5wYT10aGlzLkI9CiExO3RoaXMuYmM9e307dGhpcy5SPXt9O3RoaXMucGQ9e307YS5RKCl9O2UucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGIpe3RoaXMuc2V0VXAoYik7dGhpcy5wYT0hMDthLmxvZygiTTg5Iil9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5CPSExO3RoaXMuZz0wO3RoaXMucGE9ITE7dGhpcy5SPXt9O3RoaXMucGQ9e307YS5sb2coIk05MCIpfTtlLnByb3RvdHlwZS5rYj1mdW5jdGlvbihhLGIsZil7dGhpcy5MbChhLGIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGIpLGYpfTtlLnByb3RvdHlwZS5MbD1mdW5jdGlvbihiLGgsZixuKXtpZihhLnV0aWxzLmlzRGVmaW5lZChmKSYmYS51dGlscy5pc0RlZmluZWQoZi5zZXQpJiYhYS51dGlscy5pc0RlZmluZWQoZi5JKSl7dmFyIG09dGhpcztPYmplY3QuZGVmaW5lUHJvcGVydHkoYixoLHtzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7dHJ5e2I9Zi5zZXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKGMpe3Rocm93IGM7Cn1maW5hbGx5e24uY2FsbChtLHRoaXMpfXJldHVybiBifX0pfX07ZS5wcm90b3R5cGUucWI9ZnVuY3Rpb24oYil7YS5QKCk7dGhpcy5MZChiKTthLlEoKX07ZS5wcm90b3R5cGUuTWs9ZnVuY3Rpb24oKXt2YXIgYj1FbGVtZW50LnByb3RvdHlwZSxoPXRoaXM7YS51dGlscy5pc0RlZmluZWQoYi5zZXRBdHRyaWJ1dGUpJiYoYi5zZXRBdHRyaWJ1dGU9YS5hb3AuYXJvdW5kKGIuc2V0QXR0cmlidXRlLG51bGwsZnVuY3Rpb24oKXt2YXIgYT1kKGFyZ3VtZW50cyk7InNyYyIhPWFbMF0mJiJocmVmIiE9YVswXXx8aC5xYi5jYWxsKGgsdGhpcyl9KSl9O2UucHJvdG90eXBlLmVkPWZ1bmN0aW9uKGIpe3ZhciBoPUVsZW1lbnQucHJvdG90eXBlLGY9dGhpczthLnV0aWxzLmlzRGVmaW5lZChoW2JdKSYmKGhbYl09YS5hb3AuYXJvdW5kKGhbYl0sbnVsbCxmdW5jdGlvbigpezA8YXJndW1lbnRzLmxlbmd0aCYmZi5xYi5jYWxsKGYsYXJndW1lbnRzWzBdKX0pKX07ZS5wcm90b3R5cGUudWc9ZnVuY3Rpb24oYil7YS5QKCk7CnRoaXMucGEmJmEudXRpbHMuaXNEZWZpbmVkKGIpJiZhLnV0aWxzLmlzRGVmaW5lZChiLmNoaWxkTm9kZXMpJiYodGhpcy5MZChiKSx0aGlzLmRoKGIuY2hpbGROb2RlcykpO2EuUSgpfTtlLnByb3RvdHlwZS5kaD1mdW5jdGlvbihiKXtmb3IodmFyIGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIGY9YltoXTsic2NyaXB0IiE9YS51dGlscy5qayhmKSYmdGhpcy5MZChmKTt0aGlzLmRoKGYuY2hpbGROb2Rlcyl9fTtlLnByb3RvdHlwZS5MZD1mdW5jdGlvbihiKXthLm1vbml0b3IuQW55U3BhTW9uaXRvci5jZCgpfHwodGhpcy5XayhiKT90aGlzLmZqKGIpOmEuY29uZi5lbmFibGVQcmltYXJ5TWV0cmljcyYmdGhpcy5naihiKSl9O2UucHJvdG90eXBlLmZqPWZ1bmN0aW9uKGIpe3ZhciBoPWEudXRpbHMuWGMoYik7YS51dGlscy5pc0RlZmluZWQoaCkmJihoPWgudmFsdWUsIWEudXRpbHMuaXNEZWZpbmVkKHRoaXMuYmNbaF0pJiYwPGgubGVuZ3RoJiYodGhpcy5nKyssdGhpcy5iY1toXT0hMCwKYS5sb2coIk05MSIsaCx0aGlzLmcpLHRoaXMuTWUoYikpKX07ZS5wcm90b3R5cGUuZ2o9ZnVuY3Rpb24oYil7dmFyIGg9YS51dGlscy5ub3coKTthLnV0aWxzLm5iKGIpJiYhYi5pc0FkcnVtVHJhY2tlZE5vZGU/KGg9YS51dGlscy5RYihiKSwhYS51dGlscy5pc0RlZmluZWQodGhpcy5iY1toXSkmJjA8aC5sZW5ndGgmJih0aGlzLmcrKyx0aGlzLmJjW2hdPSEwLHRoaXMuTWUoYiksYS5sb2coIk05MiIsaCx0aGlzLmcpKSk6YS51dGlscy5LZihiKSYmIWIuYWRydW1Ob2RlSWQ/KGEubG9nKCJNOTMiLGgpLGEuTi5JYihiLGgpKTphLnV0aWxzLlFmKGIpJiYoYS5OLlVhPU1hdGgubWF4KGEuTi5VYSxoKSl9O2UucHJvdG90eXBlLk1lPWZ1bmN0aW9uKGIpe3RoaXMubGJ8fCh0aGlzLks9dGhpcy5LLmJpbmQodGhpcyksdGhpcy5sPXRoaXMubC5iaW5kKHRoaXMpLHRoaXMuSy5JPSEwLHRoaXMubGI9dGhpcy5sLkk9ITApO3ZhciBoPWEudXRpbHMuWGMoYiksaD1hLnV0aWxzLmlzRGVmaW5lZChoKT8KaC52YWx1ZTpudWxsO2EudXRpbHMuU2YoYik/KGIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsdGhpcy5LKSxhLmxvZygiTTk0IixoKSk6KGIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdGhpcy5LKSxhLmxvZygiTTk1IixoLGIubm9kZU5hbWUpKTtiLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix0aGlzLmwpfTtlLnByb3RvdHlwZS5ibD1mdW5jdGlvbihiKXtyZXR1cm4iTElOSyI9PWIubm9kZU5hbWU/KGI9Yi5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgicmVsIiksYS51dGlscy5pc0RlZmluZWQoYik/MDw9Yi52YWx1ZS5pbmRleE9mKCJzdHlsZXNoZWV0Iik6ITApOiEwfTtlLnByb3RvdHlwZS5Xaz1mdW5jdGlvbihhKXtyZXR1cm4vXihTQ1JJUFR8SU1HfExJTkspJC8udGVzdChhLm5vZGVOYW1lKSYmdGhpcy5ibChhKX07ZS5wcm90b3R5cGUuSz1mdW5jdGlvbihjKXthLlAoKTt2YXIgaD10aGlzLnBmKGMudGFyZ2V0KTshYS51dGlscy5pc0RlZmluZWQodGhpcy5SW2hdKSYmCjA8dGhpcy5nJiYodGhpcy5nLS0sdGhpcy5SW2hdPSEwLGEubG9nKCJNOTYiLGgsdGhpcy5nKSk7dGhpcy5iYT1hLnV0aWxzLm5vdygpO3RoaXMubWQrPTE7MT09dGhpcy5tZCYmKGIubi5XZygpLHRoaXMuQj0hMCk7dGhpcy50YihjLnRhcmdldCk7aD1jLnRhcmdldDthLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJmEudXRpbHMubmIoaCkmJiFoLmlzQWRydW1UcmFja2VkTm9kZSYmKGEubG9nKCJNOTciKSxhLk4uSyhjKSk7YS5RKCl9O2UucHJvdG90eXBlLmw9ZnVuY3Rpb24oYil7YS5QKCk7dmFyIGg9dGhpcy5wZihiLnRhcmdldCksZj1iLnRhcmdldDthLnV0aWxzLmlzRGVmaW5lZCh0aGlzLnBkW2hdKXx8KHRoaXMuZy0tLHRoaXMucGRbaF09ITAsYS5sb2coIk05OCIsaCx0aGlzLmcpKTthLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJmEudXRpbHMubmIoZikmJiFmLmlzQWRydW1UcmFja2VkTm9kZSYmKGEubG9nKCJNOTkiKSxhLk4ubChiKSk7dGhpcy50YihiLnRhcmdldCk7CmEuUSgpfTtlLnByb3RvdHlwZS5jaj1mdW5jdGlvbigpe3JldHVybiAwPHRoaXMuZyYmdGhpcy5CfTtlLnByb3RvdHlwZS5wZj1mdW5jdGlvbihhKXt2YXIgYj0iIjthIGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQ/Yj1hLnNyYzphIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9iPWEuc3JjOmEgaW5zdGFuY2VvZiBIVE1MTGlua0VsZW1lbnQmJihiPWEuaHJlZik7cmV0dXJuIGJ9O2UucHJvdG90eXBlLmJkPWZ1bmN0aW9uKGIpe3ZhciBoPXRoaXMuZyxmPTA7YS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiYoaCs9YS5OLmcsZj1hLk4uYmEpO2EubG9nKCJNMTAwIixoKTtyZXR1cm4gMD09aCYmdGhpcy5CJiYoYS5sb2coIk0xMDEiKSxoPU1hdGgubWF4KHRoaXMuYmEsZiksYi1oPj10aGlzLnBiKT8odGhpcy5yZXNldCgpLGgpOi0xfTtlLnByb3RvdHlwZS50Yj1mdW5jdGlvbihhKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHRoaXMuSyk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsCnRoaXMubCl9O3JldHVybiBlfSgpO2IuTGg9bH0pKGEuanx8KGEuaj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuTGM9M0UzO3RoaXMucGI9YS5jb25mLnVzZXJDb25mJiZhLmNvbmYudXNlckNvbmYubmF2Q29tcGxldGUmJmEuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZS5tYXhYaHJRdWlldFRpbWU/YS5jb25mLnVzZXJDb25mLm5hdkNvbXBsZXRlLm1heFhoclF1aWV0VGltZTp0aGlzLkxjfWUucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKGEpe3RoaXMubmQ9dGhpcy5nPTA7dGhpcy5EYT1hO3RoaXMucGE9dGhpcy5CPSExO3RoaXMudGg9e307dGhpcy5WZD17fX07ZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oYSl7dGhpcy5zZXRVcChhKTt0aGlzLnBhPSEwfTtlLnByb3RvdHlwZS5CZT1mdW5jdGlvbihiKXthLm1vbml0b3IuQW55U3BhTW9uaXRvci5jZCgpfHxhLnV0aWxzLmlzRGVmaW5lZCh0aGlzLnRoW2JdKXx8CiF0aGlzLnBhfHwodGhpcy5nKz0xLHRoaXMudGhbYl09ITAsYS5sb2coIk0xMDIiLGIsdGhpcy5nKSl9O2UucHJvdG90eXBlLlhpPWZ1bmN0aW9uKGMpeyFhLm1vbml0b3IuQW55U3BhTW9uaXRvci5jZCgpJiZ0aGlzLnBhJiYwPHRoaXMuZyYmKGEudXRpbHMuaXNEZWZpbmVkKHRoaXMuVmQpJiYhYS51dGlscy5pc0RlZmluZWQodGhpcy5WZFtjXSkmJih0aGlzLkRhPWEudXRpbHMubm93KCksdGhpcy5nLT0xLHRoaXMuVmRbY109ITAsYS5sb2coIk0xMDMiLGMsdGhpcy5nKSksdGhpcy5uZCs9MSwxPT10aGlzLm5kJiYoYi5uLldnKCksdGhpcy5CPSEwKSl9O2UucHJvdG90eXBlLmJkPWZ1bmN0aW9uKGEpe3JldHVybiAwPT10aGlzLmcmJnRoaXMuQiYmYS10aGlzLkRhPj10aGlzLnBiPyh0aGlzLnJlc2V0KCksdGhpcy5EYSk6LTF9O2UucHJvdG90eXBlLmRqPWZ1bmN0aW9uKCl7cmV0dXJuIDA8dGhpcy5nJiZ0aGlzLkJ9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5CPQohMTt0aGlzLmc9MDt0aGlzLnBhPSExfTtyZXR1cm4gZX0oKTtiLkJoPWx9KShhLmp8fChhLmo9e30pKX0pKGt8fChrPXt9KSk7dmFyIGQ9ay51dGlscy53YSxnPWsudXRpbHMuaXNGdW5jdGlvbjsoZnVuY3Rpb24oYSl7dmFyIGI9YS51dGlscy5nZW5lcmF0ZUdVSUQsbDsoZnVuY3Rpb24oYSl7YVthLlVTRVI9MF09IlVTRVIiO2FbYS5USU1FUj0xXT0iVElNRVIiO2FbYS5YSFI9Ml09IlhIUiI7YVthLlJFU09VUkNFPTNdPSJSRVNPVVJDRSI7YVthLlBST01JU0U9NF09IlBST01JU0UiO2FbYS5GRVRDSD01XT0iRkVUQ0giO2FbYS5PVEhFUj02XT0iT1RIRVIifSkobD1hLkNhdXNlVHlwZXx8KGEuQ2F1c2VUeXBlPXt9KSk7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oYyxmLG4pe3RoaXMuc3RhcnQ9YS51dGlscy5ub3coKTt0aGlzLnBhcmVudD1jO3RoaXMub2M9Zjt0aGlzLmd1aWQ9YigpO3RoaXMudHlwZT1ufX0oKTthLkRiPWU7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7fQpiLk9uPWZ1bmN0aW9uKCl7cmV0dXJuIGIuZXZlbnRzfTtiLkxmPWZ1bmN0aW9uKGIpe3JldHVybiBhLnV0aWxzLmlzRGVmaW5lZChiKSYmYS51dGlscy5pc0Z1bmN0aW9uKGIuaGFuZGxlRXZlbnQpfTtiLnhnPWZ1bmN0aW9uKGEsYyxtLHEpe3ZhciBlO2IucWEoYyk7dHJ5e2IuTGYoYSk/ZT1hLmhhbmRsZUV2ZW50LmFwcGx5KG0scSk6ZyhhKSYmKGU9YS5hcHBseShtLHEpKX1jYXRjaChwKXt0aHJvdyBwO31maW5hbGx5e2IuTCgpfXJldHVybiBlfTtiLnVjPWZ1bmN0aW9uKGMsbixtLHEpe2lmKCFhLnV0aWxzLmlzRGVmaW5lZChuKXx8bi5JKXJldHVybiBuO3ZhciBlO3F8fChlPWIuaWEoKSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBxPWIuT2EoYyxhLGUsbSk7cmV0dXJuIGIueGcobixxLHRoaXMsYXJndW1lbnRzKX19O2IuT2E9ZnVuY3Rpb24oYixjLG0saCl7bT9hLmxvZygiTTEwNCIsYixtLm9jLmFjdGlvbik6YS5sb2coIk0xMDUiLGIpO2EudXRpbHMuaXNEZWZpbmVkKGMpPyhjPQphLmNlLnVsKGMudGFyZ2V0fHxjLnNyY0VsZW1lbnQpLGMuYWN0aW9uPWIpOmM9bmV3IGEuS2EoYik7cmV0dXJuIG5ldyBlKG0sYyxoKX07Yi5mbj1mdW5jdGlvbihjLG4sbSl7aWYoIWEudXRpbHMuaXNEZWZpbmVkKG4pfHxuLkkpcmV0dXJuIG47dmFyIHE9Yi5PYShjLHZvaWQgMCxiLmlhKCksbSk7cmV0dXJuIGZ1bmN0aW9uKCl7bmV3IGEuS2EoYyk7cmV0dXJuIGIueGcobixxLHRoaXMsYXJndW1lbnRzKX19O2IuQm89ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtiLkdjKGEpO3JldHVybiBtfX07Yi5pYT1mdW5jdGlvbigpe3JldHVybiAwPGIuZXZlbnRzLmxlbmd0aD9iLmV2ZW50c1tiLmV2ZW50cy5sZW5ndGgtMV06bnVsbH07Yi5xYT1mdW5jdGlvbihhKXtiLmV2ZW50cy5wdXNoKGEpfTtiLkw9ZnVuY3Rpb24oKXtyZXR1cm4gYi5ldmVudHMucG9wKCl9O2IuSGM9ZnVuY3Rpb24oYixjKXt2YXIgbT1iLGg9MSxlPSIiOwppZighYS51dGlscy5pc0RlZmluZWQobSkpcmV0dXJuIG51bGw7Zm9yKDthLnV0aWxzLmlzRGVmaW5lZChtLnBhcmVudCk7KWU9IiAtPiAiK20ub2MuYWN0aW9uK2UsbT1tLnBhcmVudCxoKz0xO3ZhciBwPWEudXRpbHMubm93KCk7YS51dGlscy5pc0RlZmluZWQobS5vYykmJihlPW0ub2MuYWN0aW9uK2UrIiAtPiAiK2MpO2EubG9nKCJNMTA2IixlKTthLmxvZygiTTEwNyIsbS5zdGFydCxoKTthLmxvZygiTTEwOCIscC1tLnN0YXJ0KTtyZXR1cm4gbX07Yi5HYz1mdW5jdGlvbihhKXtyZXR1cm4gYi5IYyhiLmlhKCksYSl9O2Iudms9ZnVuY3Rpb24oKXt2YXIgYz1iLkdjKHZvaWQgMCk7aWYoYS51dGlscy5pc0RlZmluZWQoYykmJmEudXRpbHMuaXNEZWZpbmVkKGMudHlwZSkpcmV0dXJuW2wuVElNRVIsbC5VU0VSXS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBjLnR5cGU9PWF9KT9jOnZvaWQgMH07Yi5Vaz1mdW5jdGlvbihhKXtpZihnKGEpKXJldHVybiBhO3ZhciBiPSIiK2E7cmV0dXJuIGZ1bmN0aW9uKCl7ZXZhbChiKX19OwpiLnNldFVwPWZ1bmN0aW9uKCl7Yi5ldmVudHM9W107dmFyIGM9YS51dGlscy5yZWZzO1t7bGc6Yy5zZXRUaW1lb3V0LGtmOiJzZXRUaW1lb3V0In0se2xnOmMuc2V0SW50ZXJ2YWwsa2Y6InNldEludGVydmFsIn1dLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9YS5sZyxmPWEua2Y7d2luZG93W2ZdPWZ1bmN0aW9uKGEpe3ZhciBuPWQoYXJndW1lbnRzKTtpZihhKXt2YXIgZT1iLmtsKGYsYXJndW1lbnRzWzFdKT9sLk9USEVSOmwuVElNRVIsZT1iLmZuKGYsYi5VayhhKSxlKTtuWzBdPWU7cmV0dXJuIGMuYXBwbHkod2luZG93LG4pfWMuYXBwbHkod2luZG93LG4pfX0pfTtiLmtsPWZ1bmN0aW9uKGIsYyl7cmV0dXJuInNldFRpbWVvdXQiPT1iJiYoYS51dGlscy5pc0RlZmluZWQoYykmJjA9PWN8fCFhLnV0aWxzLmlzRGVmaW5lZChjKSl9O3JldHVybiBifSgpO2MuZXZlbnRzPVtdO2EuYz1jfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS51dGlscy5MaixsPXdpbmRvdy5hZGRFdmVudExpc3RlbmVyLAplPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5FdmVudFRhcmdldCk/d2luZG93LkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxjPWEudXRpbHMuaXNEZWZpbmVkKHdpbmRvdy5FdmVudFRhcmdldCk/d2luZG93LkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxoPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsYixjLGYsaCxlLGwsdyl7dGhpcy5hY3Rpb249YXx8IiI7dGhpcy5UaD1ifHwiIjt0aGlzLmNsYXNzTmFtZT1jfHwiIjt0aGlzLnRhZ05hbWU9Znx8IiI7dGhpcy5uYW1lPWh8fCIiO3RoaXMudGV4dD1lfHwiIjt0aGlzLnNyYz1sO3RoaXMuaXRlbT13fX0oKTthLkthPWg7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7fWYuc2V0VXA9ZnVuY3Rpb24oKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShmLk1jLFtdKTtmLmNuKCk7YS51dGlscy5pc0RlZmluZWQod2luZG93LkV2ZW50VGFyZ2V0KT8KKGYuZG4oKSxmLmVuKCkpOmYuV2koKTtmLklmKCJvbmxvYWQiKTtmLklmKCJvbmVycm9yIil9O2YubG89ZnVuY3Rpb24oKXtyZXR1cm5bXX07Zi5iaz1mdW5jdGlvbihiLGMpe3ZhciBoPSIiO2lmKGEudXRpbHMuaXNEZWZpbmVkKGIpKWlmKCJzdHJpbmciPT09dHlwZW9mIGIudGV4dENvbnRlbnQpaD1hLnV0aWxzLmlzRGVmaW5lZChTdHJpbmcucHJvdG90eXBlLnRyaW0pP2IudGV4dENvbnRlbnQudHJpbSgpOmIudGV4dENvbnRlbnQsaD1hLnV0aWxzLmlzRGVmaW5lZChjKT9oLnN1YnN0cmluZygwLGMpOmg7ZWxzZSBmb3IoYj1iLmZpcnN0Q2hpbGQ7YS51dGlscy5pc0RlZmluZWQoYikmJiEoaCs9Zi5iayhiLGMpLGEudXRpbHMuaXNEZWZpbmVkKGMpJiZoLmxlbmd0aD49Yyk7Yj1iLm5leHRTaWJsaW5nKTtyZXR1cm4gaH07Zi51bD1mdW5jdGlvbihjKXt2YXIgZj1iKGMuaWQpfHwiIixuPWIoYy5jbGFzc05hbWUpfHwiIixlPSIiLGw9bmV3IGg7YyBpbnN0YW5jZW9mIEhUTUxIdG1sRWxlbWVudD8KKGU9Imh0bWwiLGwudGV4dD0iI2h0bWwiKTpjPT09ZG9jdW1lbnQ/KGU9ImRvY3VtZW50IixsLnRleHQ9IiNkb2N1bWVudCIpOmM9PT13aW5kb3c/KGU9IndpbmRvdyIsbC50ZXh0PSIjd2luZG93Iik6YyBpbnN0YW5jZW9mIFhNTEh0dHBSZXF1ZXN0PyhlPSJ4aHIiLGwuc3JjPWEudXRpbHMuaXNPYmplY3QoYy5fYWRydW1BamF4VCk/ZW5jb2RlVVJJKGMuX2FkcnVtQWpheFQudXJsKCkpOiIiKTpjIGluc3RhbmNlb2YgV2ViU29ja2V0PyhlPSJ3ZWJzb2NrZXQiLGwuc3JjPWVuY29kZVVSSShjLnVybCkpOmMgaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudD8oZT0ic2NyaXB0IixsLnNyYz1lbmNvZGVVUkkoYy5zcmMpKTpjIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQ/KGU9ImEiLGwudGV4dD1iKGMudGV4dCl8fCIiKTpjIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQ/KGU9ImJ1dHRvbiIsbC5uYW1lPWIoYy5uYW1lKSk6YyBpbnN0YW5jZW9mIEhUTUxEaXZFbGVtZW50PwplPSJkaXYiOmMgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50PyhlPSJpbWciLGwuc3JjPWVuY29kZVVSSShjLnNyYyksbC50ZXh0PWIoYy50aXRsZSl8fCIiKTpjIGluc3RhbmNlb2YgSFRNTExJRWxlbWVudD8oZT0ibGkiLGwuaXRlbT1jLnZhbHVlKTpjIGluc3RhbmNlb2YgSFRNTFVMaXN0RWxlbWVudD9lPSJ1bCI6YyBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudD9lPSJmb3JtIjpjIGluc3RhbmNlb2YgSFRNTEZyYW1lRWxlbWVudD8oZT0iZnJhbWUiLGwuc3JjPWVuY29kZVVSSShjLnNyYykpOmMgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50PyhlPWIoYy50eXBlKXx8ImlucHV0IixsLnRleHQ9YihjLnZhbHVlKSxsLm5hbWU9YihjLm5hbWUpKTpjIGluc3RhbmNlb2YgSFRNTFRhYmxlRWxlbWVudD9lPSJ0YWJsZSI6YyBpbnN0YW5jZW9mIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50P2U9InRjYXAiOmMgaW5zdGFuY2VvZiBIVE1MVGFibGVDZWxsRWxlbWVudD9lPSJ0ZCI6YyBpbnN0YW5jZW9mCkhUTUxUYWJsZVJvd0VsZW1lbnQ/ZT0idHIiOihlPWEudXRpbHMuaXNEZWZpbmVkKGMudGFnTmFtZSk/YihjLnRhZ05hbWUpOiIiLGEubG9nKCJNMTA5IixlKSk7bC5UaD1mO2wuY2xhc3NOYW1lPW47bC50YWdOYW1lPWU7YS51dGlscy5pc1N0cmluZyhsLnRleHQpJiYobC50ZXh0PWEudXRpbHMuaXNEZWZpbmVkKFN0cmluZy5wcm90b3R5cGUudHJpbSk/bC50ZXh0LnRyaW0oKTpsLnRleHQsbC50ZXh0PWwudGV4dC5zdWJzdHJpbmcoMCwzMCkpO3JldHVybiBsfTtmLmNuPWZ1bmN0aW9uKCl7YS51dGlscy5mb3JFYWNoKGYuTWMsZnVuY3Rpb24oYil7bChiLGZ1bmN0aW9uKGMpe2M9Yy50YXJnZXR8fGMuc3JjRWxlbWVudDsoYz09PWRvY3VtZW50fHxjPT09d2luZG93fHxjIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3R8fGMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkmJm51bGwhPWMmJmNbIm9uIitiXSYmKGNbIm9uIitiXT1hLmMudWMoYixjWyJvbiIrYl0sYS5DYXVzZVR5cGUuVVNFUiwKITApLGNbIm9uIitiXS5JPSEwKX0sITApfSl9O2YuV2k9ZnVuY3Rpb24oKXthLnV0aWxzLmZvckVhY2goZi5NYyxmdW5jdGlvbihiKXtsKGIsZnVuY3Rpb24oYyl7Yz1hLmMuT2EoYixjLG51bGwsYS5DYXVzZVR5cGUuVVNFUik7YS5jLnFhKGMpfSwhMCk7bChiLGZ1bmN0aW9uKCl7YS5jLkwoKX0sITEpfSl9O2YuaGg9ZnVuY3Rpb24oYil7dmFyIGM9ITE7YS51dGlscy5pc0Jvb2xlYW4oYik/Yz1iOmEudXRpbHMuaXNPYmplY3QoYikmJmEudXRpbHMuaXNEZWZpbmVkKGIuY2FwdHVyZSkmJihjPSEhYi5jYXB0dXJlKTtyZXR1cm4gY307Zi5NZz1mdW5jdGlvbihiLGMsZixoKXtpZighYS51dGlscy5pc0RlZmluZWQoYi5ldmVudExpc3RlbmVyTWFwKXx8IWEudXRpbHMuaXNEZWZpbmVkKGIuZXZlbnRMaXN0ZW5lck1hcFtjXSl8fCFhLnV0aWxzLmlzRGVmaW5lZChmKSlyZXR1cm4tMTtiPWIuZXZlbnRMaXN0ZW5lck1hcFtjXTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKWlmKGJbY11bMF09PQpmJiZiW2NdWzFdPT1oKXJldHVybiBjO3JldHVybi0xfTtmLkdmPWZ1bmN0aW9uKGIsYyxmLGgsbil7YS51dGlscy5pc0RlZmluZWQoYikmJmEudXRpbHMuaXNEZWZpbmVkKG4pJiYoYS51dGlscy5pc0RlZmluZWQoYi5ldmVudExpc3RlbmVyTWFwKXx8KGIuZXZlbnRMaXN0ZW5lck1hcD17fSksYS51dGlscy5pc0RlZmluZWQoYi5ldmVudExpc3RlbmVyTWFwW2NdKXx8KGIuZXZlbnRMaXN0ZW5lck1hcFtjXT1bXSksYi5ldmVudExpc3RlbmVyTWFwW2NdLnB1c2goW2YsaCxuXSkpfTtmLmJtPWZ1bmN0aW9uKGEsYixjKXtpZigtMTxjKXt2YXIgZj1hLmV2ZW50TGlzdGVuZXJNYXBbYl07ZGVsZXRlIGZbY107Zi5zcGxpY2UoYywxKTswPT1mLmxlbmd0aCYmZGVsZXRlIGEuZXZlbnRMaXN0ZW5lck1hcFtiXX19O2YuZG49ZnVuY3Rpb24oKXtFdmVudFRhcmdldC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihiLGMsaCl7aWYoYS51dGlscy5pc0RlZmluZWQoYykmJmMuSXx8CiFhLmMuTGYoYykmJiFnKGMpKXJldHVybiBlLmNhbGwodGhpcyxiLGMsaCk7dmFyIGw9Zi5oaChoKSxyPWEudXRpbHMuaXNEZWZpbmVkKHRoaXMpP3RoaXM6d2luZG93O2lmKCEoLTE8Zi5NZyhyLGIsYyxsKSkpe3ZhciBzPWM7c3dpdGNoKGIpe2Nhc2UgImNsaWNrIjpjYXNlICJkYmxjbGljayI6Y2FzZSAiYXV4Y2xpY2siOmNhc2UgIm1vdXNlZG93biI6Y2FzZSAibW91c2V1cCI6Y2FzZSAiZHJvcCI6Y2FzZSAia2V5dXAiOmNhc2UgImtleWRvd24iOmNhc2UgImtleXByZXNzIjpjYXNlICJjb250ZXh0bWVudSI6Y2FzZSAicGFnZUNoYW5nZWQiOmNhc2UgImNsb3NlIjpzPWEuYy51YyhiLGMsYS5DYXVzZVR5cGUuVVNFUiwhMCk7Zi5HZihyLGIsYyxsLHMpO2JyZWFrO2Nhc2UgImxvYWQiOmNhc2UgImVycm9yIjpzPWEuYy51YyhiLGMsYS5DYXVzZVR5cGUuVVNFUiwhMSksZi5HZihyLGIsYyxsLHMpfWUuY2FsbChyLGIscyxoKX19fTtmLmVuPWZ1bmN0aW9uKCl7RXZlbnRUYXJnZXQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9CmZ1bmN0aW9uKGIsaCxlKXtpZihhLnV0aWxzLmlzRGVmaW5lZChoKSYmaC5JKXJldHVybiBjLmNhbGwodGhpcyxiLGgsZSk7dmFyIGw9Zi5oaChlKSxyPWEudXRpbHMuaXNEZWZpbmVkKHRoaXMpP3RoaXM6d2luZG93LGw9Zi5NZyhyLGIsaCxsKTswPD1sPyhjLmNhbGwocixiLHRoaXMuZXZlbnRMaXN0ZW5lck1hcFtiXVtsXVsyXSxlKSxmLmJtKHIsYixsKSk6Yy5jYWxsKHIsYixoLGUpfX07Zi5JZj1mdW5jdGlvbihiKXt2YXIgYz1IVE1MRWxlbWVudC5wcm90b3R5cGUsZj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsYik7YS51dGlscy5pc0RlZmluZWQoZikmJmEudXRpbHMuaXNEZWZpbmVkKGYuc2V0KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsYix7c2V0OmZ1bmN0aW9uKGMpe3ZhciBoPWM7YS51dGlscy5pc0RlZmluZWQoYykmJihoPWEuYy51YyhiLGMsYS5DYXVzZVR5cGUuUkVTT1VSQ0UsITEpKTt2YXIgbjt0cnl7bj1mLnNldC5jYWxsKHRoaXMsaCl9Y2F0Y2goZSl7dGhyb3cgZTsKfXJldHVybiBufX0pfTtyZXR1cm4gZn0oKTtmLk1jPSJjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGxvYWQgdW5sb2FkIi5zcGxpdCgiICIpO2EuY2U9Zn0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLm1hcCxlPWEudXRpbHMuYm4sYz1hLnV0aWxzLmlzRGVmaW5lZCxoPWEudXRpbHMuaXNTdHJpbmcsZj1hLnV0aWxzLkNqLG49YS51dGlscy5pc0Z1bmN0aW9uO2IuZGc9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9ITEsZj0wO2Y8Yi5sZW5ndGg7ZisrKXt2YXIgaD1iW2ZdO2lmKGgmJmgudGVzdChhKSl7Yz0hMDticmVha319cmV0dXJuIGN9O2IuVmI9ZnVuY3Rpb24oYSxmLGgpe3ZhciBuPSExO2lmKGYmJmgpZm9yKHZhciBlPTA7ZTxoLmxlbmd0aDtlKyspe3ZhciBsPWhbZV07aWYoIShjKGwubWV0aG9kKSYmYSE9PWwubWV0aG9kfHxjKGwudXJscykmJgohYi5kZyhmLGwudXJscykpKXtuPSEwO2JyZWFrfX1yZXR1cm4gbn07Yi56Yj1mdW5jdGlvbihhLGIpe3JldHVybiBmKGwoZShiKSxhKSl9O2IucGM9ZnVuY3Rpb24oYSl7dmFyIGM9Yi5mayhhKTthPWIucWYoYSk7cmV0dXJuIGN8fGF9O2IuZms9ZnVuY3Rpb24oYil7dmFyIGY9Yi5tZXRob2Q7aWYoYyhmKSl7aWYoaChmKSlyZXR1cm4gYjthLmVycm9yKCJNMTEwIil9fTtiLldtPWZ1bmN0aW9uKGEpe3ZhciBjPWIucWYoYSk7cmV0dXJuIGIuV2woYSkmJmN9O2IuV2w9ZnVuY3Rpb24oYil7aWYobihiLmdldEZyb21Cb2R5KSlyZXR1cm4gYjthLmVycm9yKCJNMTExIil9O2Iud2o9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPVtdLGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIG49YltmXS5wYXR0ZXJuO2lmKGgobikpdHJ5e2MucHVzaChuZXcgUmVnRXhwKG4pKX1jYXRjaChlKXthLmV4Y2VwdGlvbihlLCJNMTEyIil9ZWxzZSBhLmVycm9yKCJNMTEzIil9cmV0dXJuIGN9O2IucWY9ZnVuY3Rpb24oYSl7dmFyIGM9CmEudXJscztpZihjJiYwPGMubGVuZ3RoJiYoYS51cmxzPWIud2ooYyksMDxhLnVybHMubGVuZ3RoKSlyZXR1cm4gYX19KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7YT1hLmV2ZW50c3x8KGEuZXZlbnRzPXt9KTthPWEuYnx8KGEuYj17fSk7YS5uYXZpZ2F0aW9uU3RhcnQ9Im5hdmlnYXRpb25TdGFydCI7YS5kb21haW5Mb29rdXBTdGFydD0iZG9tYWluTG9va3VwU3RhcnQiO2EuZG9tYWluTG9va3VwRW5kPSJkb21haW5Mb29rdXBFbmQiO2EuY29ubmVjdFN0YXJ0PSJjb25uZWN0U3RhcnQiO2Euc2VjdXJlQ29ubmVjdGlvblN0YXJ0PSJzZWN1cmVDb25uZWN0aW9uU3RhcnQiO2EuY29ubmVjdEVuZD0iY29ubmVjdEVuZCI7YS5yZXF1ZXN0U3RhcnQ9InJlcXVlc3RTdGFydCI7YS5yZXNwb25zZVN0YXJ0PSJyZXNwb25zZVN0YXJ0IjthLnJlc3BvbnNlRW5kPSJyZXNwb25zZUVuZCI7YS5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydD0iZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQiOwphLmxvYWRFdmVudEVuZD0ibG9hZEV2ZW50RW5kIjthLk5nPSJzZW5kVGltZSI7YS5oZj0iZmlyc3RCeXRlVGltZSI7YS5IZz0icmVzcEF2YWlsVGltZSI7YS5JZz0icmVzcFByb2NUaW1lIjthLlJkPSJ2aWV3Q2hhbmdlU3RhcnQiO2Euamg9InZpZXdDaGFuZ2VFbmQiO2EuU2Q9InZpZXdET01Mb2FkZWQiO2Euc2g9InhoclJlcXVlc3RzQ29tcGxldGVkIjthLnpvPSJ2aWV3RnJhZ21lbnRzTG9hZGVkIjthLkFvPSJ2aWV3UmVzb3VyY2VzTG9hZGVkIjthLlRkPSJ2aXJ0dWFsUGFnZVN0YXJ0IjthLlptPSJ2aXJ0dWFsUGFnZUVuZCJ9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXt2YXIgYj1hLmV2ZW50c3x8KGEuZXZlbnRzPXt9KTtiLm1ldHJpY1NwZWM9e307Yi5tZXRyaWNTcGVjW2EuRXZlbnRUeXBlLlBhZ2VWaWV3XT17S2o6e3N0YXJ0OmIuYi5uYXZpZ2F0aW9uU3RhcnQsZW5kOmIuYi5sb2FkRXZlbnRFbmQsbmFtZToiUExUIn0sU2o6e3N0YXJ0OmIuYi5uYXZpZ2F0aW9uU3RhcnQsCmVuZDpiLmIucmVzcG9uc2VTdGFydCxuYW1lOiJGQlQifSxybzp7c3RhcnQ6Yi5iLm5hdmlnYXRpb25TdGFydCxlbmQ6Yi5iLnJlcXVlc3RTdGFydCxuYW1lOiJTQ1QifSxzbzp7c3RhcnQ6Yi5iLnNlY3VyZUNvbm5lY3Rpb25TdGFydCxlbmQ6Yi5iLmNvbm5lY3RFbmQsbmFtZToiU0hUIn0sTG46e3N0YXJ0OmIuYi5kb21haW5Mb29rdXBTdGFydCxlbmQ6Yi5iLmRvbWFpbkxvb2t1cEVuZCxuYW1lOiJETFQifSx3bzp7c3RhcnQ6Yi5iLmNvbm5lY3RTdGFydCxlbmQ6Yi5iLmNvbm5lY3RFbmQsbmFtZToiVENQIn0sb286e3N0YXJ0OmIuYi5yZXF1ZXN0U3RhcnQsZW5kOmIuYi5yZXNwb25zZVN0YXJ0LG5hbWU6IlJBVCJ9LE5uOntzdGFydDpiLmIucmVzcG9uc2VTdGFydCxlbmQ6Yi5iLmxvYWRFdmVudEVuZCxuYW1lOiJGRVQifSxSbjp7c3RhcnQ6Yi5iLnJlc3BvbnNlU3RhcnQsZW5kOmIuYi5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCxuYW1lOiJEUlQifSxRbjp7c3RhcnQ6Yi5iLnJlc3BvbnNlU3RhcnQsCmVuZDpiLmIucmVzcG9uc2VFbmQsbmFtZToiRERUIn0sSm46e3N0YXJ0OmIuYi5yZXNwb25zZUVuZCxlbmQ6Yi5iLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0LG5hbWU6IkRQVCJ9LG5vOntzdGFydDpiLmIuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQsZW5kOmIuYi5sb2FkRXZlbnRFbmQsbmFtZToiUFJUIn0sS246e3N0YXJ0OmIuYi5uYXZpZ2F0aW9uU3RhcnQsZW5kOmIuYi5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCxuYW1lOiJET00ifX07Yi5tZXRyaWNTcGVjW2EuRXZlbnRUeXBlLkFqYXhdPXtTajp7c3RhcnQ6Yi5iLk5nLGVuZDpiLmIuaGYsbmFtZToiRkJUIn0seG46e3N0YXJ0OmIuYi5oZixlbmQ6Yi5iLkhnLG5hbWU6IkREVCJ9LHduOntzdGFydDpiLmIuSGcsZW5kOmIuYi5JZyxuYW1lOiJEUFQifSxLajp7c3RhcnQ6Yi5iLk5nLGVuZDpiLmIuSWcsbmFtZToiUExUIn19O2IubWV0cmljU3BlY1thLkV2ZW50VHlwZS5WUGFnZVZpZXddPXtlbzp7c3RhcnQ6Yi5iLlRkLAplbmQ6Yi5iLlptLG5hbWU6IlBMVCJ9LEZuOntzdGFydDpiLmIuUmQsZW5kOmIuYi5qaCxuYW1lOiJERFQifSxhbzp7c3RhcnQ6Yi5iLlJkLGVuZDpiLmIuU2QsbmFtZToiRFJUIn0sb246e3N0YXJ0OmIuYi5qaCxlbmQ6Yi5iLlNkLG5hbWU6IkRQVCJ9LHBuOntzdGFydDpiLmIuUmQsZW5kOmIuYi5TZCxuYW1lOiJET00ifSxtbzp7c3RhcnQ6InZpZXdDaGFuZ2VFbmQiLGVuZDoieGhyUmVxdWVzdHNDb21wbGV0ZWQiLG5hbWU6bnVsbH0sYm86e3N0YXJ0OiJ2aWV3Q2hhbmdlRW5kIixlbmQ6InZpZXdQYXJ0aWFsc0xvYWRlZCIsbmFtZTpudWxsfSwkbjp7c3RhcnQ6InZpZXdQYXJ0aWFsc0xvYWRlZCIsZW5kOiJ2aWV3RnJhZ21lbnRzTG9hZGVkIixuYW1lOm51bGx9LGNvOntzdGFydDoidmlld1BhcnRpYWxzTG9hZGVkIixlbmQ6InZpZXdSZXNvdXJjZXNMb2FkZWQiLG5hbWU6bnVsbH19O2IubWV0cmljU3BlY1thLkV2ZW50VHlwZS5OR19WSVJUVUFMX1BBR0VdPWIubWV0cmljU3BlY1thLkV2ZW50VHlwZS5WUGFnZVZpZXddfSkoa3x8CihrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1mdW5jdGlvbihlKXtmdW5jdGlvbiBjKGgpe2g9ZS5jYWxsKHRoaXMsaCl8fHRoaXM7aC5jb25zdHJ1Y3RvciE9YyYmaC5jb25zdHJ1Y3RvciE9Yi5BZHJ1bUFqYXgmJmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLkFqYXgiLFtdKTtyZXR1cm4gaH12KGMsZSk7Yy5wcm90b3R5cGUudHlwZT1mdW5jdGlvbigpe3JldHVybiBhLkV2ZW50VHlwZS5BamF4fTtyZXR1cm4gY30oYi5FdmVudFRyYWNrZXIpO2IuQWpheD1sO2IuTWEoYi5UW2EuRXZlbnRUeXBlLkFqYXhdLGwucHJvdG90eXBlKTtiLkllKGIubWV0cmljU3BlY1thLkV2ZW50VHlwZS5BamF4XSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhhKXtyZXR1cm4gYi5jYWxsKHRoaXMsYSl8fAp0aGlzfXYoYyxiKTtjLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnRUeXBlLkFqYXh9O3JldHVybiBjfShiLkFqYXgpO2IuQWRydW1BamF4PWw7Yi5NYShiLlRbYS5FdmVudFR5cGUuQURSVU1fWEhSXSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS51dGlscy5pc0RlZmluZWQsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoKXt9Yy53ZD1mdW5jdGlvbihiLGYpe2EuY29uZi5zcGEyP2MudWooYixmKTpjLkxnKGIsZil9O2MudWo9ZnVuY3Rpb24oaCxmKXt2YXIgbj1hLmMuSGMoaC5oKTtpZihsKGEubW9uaXRvci5BbnlTcGFNb25pdG9yLnZwKSYmIWEubW9uaXRvci5BbnlTcGFNb25pdG9yLkJhJiZhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cC5lYj09bil7Zi5wYXJlbnQoYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnApO2lmKCsrYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnAuSmU+CmIudWEubWF4UGVyUGFnZVZpZXcpcmV0dXJuO2MuTGcoaCxmKX1lbHNlIGwoYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnApJiYhYS5tb25pdG9yLkFueVNwYU1vbml0b3IuQmEmJmYucGFyZW50KGEubW9uaXRvci5BbnlTcGFNb25pdG9yLnZwKSxjLnZkKGYsaCksYi5vU1RPKGMuY20sYy5BaSk7ZGVsZXRlIGguX2FkcnVtQWpheFQ7YS5qLm4uRy5YaShmLnVybCgpKX07Yy5MZz1mdW5jdGlvbihoLGYpe3ZhciBuPXt9O2guQWU9bjtkZWxldGUgaC5fYWRydW1BamF4VDt2YXIgbT17fTtpZihoIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3QpdHJ5e2lmKG09e3N0YXR1czpoLnN0YXR1cyxnZXRBbGxSZXNwb25zZUhlYWRlcnM6aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKX0sNDAwPD1oLnN0YXR1cylpZihiLmlzU3RyaW5nKGguc3RhdHVzVGV4dCkpbS5zdGF0dXNUZXh0PWguc3RhdHVzVGV4dDtlbHNlIHRyeXttLnJlc3BvbnNlVGV4dD1oLnJlc3BvbnNlVGV4dH1jYXRjaChlKXttLnJlc3BvbnNlVHlwZT0KaC5yZXNwb25zZVR5cGV9fWNhdGNoKGwpe2EuZXJyb3IoIk0xMTQiLGwpfWIuZ2MoZnVuY3Rpb24oKXtoLkFlPT09biYmYy5yZXBvcnRYaHIobSxmKX0pfTtjLnJlcG9ydFhocj1mdW5jdGlvbihiLGYpe2MuZmgoYixmKTthLmNvbW1hbmQoInJlcG9ydFhociIsZil9O2MudmQ9ZnVuY3Rpb24oYixmKXtpZihsKGYuaCkpe3ZhciBuPWEuYy5IYyhmLmgpLmd1aWQ7Yy5maChmLGIpO2woYy5oYVtuXSl8fChjLmhhW25dPVtdKTstMT09Yy5oYVtuXS5pbmRleE9mKGIpJiZjLmhhW25dLnB1c2goYil9ZWxzZSBhLmxvZygifkFueVNQQTogZXJyb3IgaW4gcHV0SW5QYXJlbnRFdmVudFdhaXRpbmdRdWV1ZSgpIGFzIHhoci5hZHJ1bV9jYXVzYWxFdmVudCBpcyB1bmRlZmluZWQuIil9O2MuZmg9ZnVuY3Rpb24oYSxjKXt2YXIgbj1jLnJlc3BvbnNlfHxhLG09bi5zdGF0dXMsZTtiLmlzTnVtYmVyKG0pJiZjLnhoclN0YXR1cyhtKTtpZihuLmdldEFsbFJlc3BvbnNlSGVhZGVycyl7dmFyIGw9Yi5pc0Z1bmN0aW9uKG4uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKT8Kbi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTpuLmdldEFsbFJlc3BvbnNlSGVhZGVycztjLmFsbFJlc3BvbnNlSGVhZGVycyhsKX1pZig0MDA8PW0pe2lmKGIuaXNTdHJpbmcobi5zdGF0dXNUZXh0KSllPW4uc3RhdHVzVGV4dDtlbHNlIHRyeXtiLmlzU3RyaW5nKG4ucmVzcG9uc2VUZXh0KSYmKGU9bi5yZXNwb25zZVRleHQpfWNhdGNoKHApe2IuaXNTdHJpbmcobi5yZXNwb25zZVR5cGUpJiYoZT1uLnJlc3BvbnNlVHlwZSl9Yy5lcnJvcih7c3RhdHVzOm0sbXNnOmV9KX19O2MuU209ZnVuY3Rpb24oYSxiKXt2YXIgYz0iIjthLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihhLGIpe2MrPWIrIjogIithKyJcclxuIn0pO2IuYWxsUmVzcG9uc2VIZWFkZXJzKGMpfTtjLkJnPWZ1bmN0aW9uKGEpe2MuaGFbYV09W107ZGVsZXRlIGMuaGFbYV19O2Mud2w9ZnVuY3Rpb24oYixmKXt2YXIgbj1jLmhhW2ZdO2wobikmJihuLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5wYXJlbnQoYik7YS5jb21tYW5kKCJyZXBvcnRYaHIiLApjKX0pLGMuQmcoZikpfTtjLmNtPWZ1bmN0aW9uKCl7Zm9yKHZhciBoIGluIGMuaGEpe2Zvcih2YXIgZj0wLG49Yy5oYVtoXTtmPG4ubGVuZ3RoO2YrKyl7dmFyIG09bltmXTshbChhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cCkmJisrYy5oajw9Yi51YS5tYXhQZXJQYWdlVmlldz9hLmNvbW1hbmQoInJlcG9ydFhociIsbSk6bChhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cCkmJisrYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnAuSmU8PWIudWEubWF4UGVyUGFnZVZpZXcmJmEuY29tbWFuZCgicmVwb3J0WGhyIixtKX1jLkJnKGgpfX07cmV0dXJuIGN9KCk7ZS5BaT0yRTM7ZS5oYT17fTtlLmhqPTA7Yi52Yz1lfSkoYS51dGlsc3x8KGEudXRpbHM9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLmlzRGVmaW5lZCxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe31jLnNldFVwPWZ1bmN0aW9uKCl7Yy5leGNsdWRlPVt7dXJsczpbbmV3IFJlZ0V4cChhLmNvbmYuYmVhY29uVXJsSHR0cCsKYS5jb25mLmNvcnNFbmRwb2ludFBhdGgpLG5ldyBSZWdFeHAoYS5jb25mLmJlYWNvblVybEh0dHBzK2EuY29uZi5jb3JzRW5kcG9pbnRQYXRoKV19XTtjLmluY2x1ZGU9W107Yy5tYXhQZXJQYWdlVmlldz1jLlZsKGEuY29uZi51c2VyQ29uZiYmYS5jb25mLnVzZXJDb25mLnhocik7Yy5wYXlsb2FkUGFyYW1zPVtdO2MucGFyYW1ldGVyPXt9O2MudGcoYS5jb25mLnVzZXJDb25mJiZhLmNvbmYudXNlckNvbmYueGhyKX07Yy50Zz1mdW5jdGlvbihhKXtsKGEpJiYoYy5leGNsdWRlPWMuZXhjbHVkZS5jb25jYXQoYi56YihiLnBjLGEuZXhjbHVkZSkpLGMuaW5jbHVkZT1jLmluY2x1ZGUuY29uY2F0KGIuemIoYi5wYyxhLmluY2x1ZGUpKSxjLnBheWxvYWRQYXJhbXM9Yy5wYXlsb2FkUGFyYW1zLmNvbmNhdChiLnpiKGIucGMsYS5wYXlsb2FkUGFyYW1zKSksYy5wYXJhbWV0ZXI9Yi56YihiLldtLGEucGFyYW1ldGVyKSl9O2MuVmw9ZnVuY3Rpb24oaCl7aWYobChoKSl7aD1oLm1heFBlclBhZ2VWaWV3OwppZihiLmlzTnVtYmVyKGgpJiYwPGgpcmV0dXJuIGg7YS5yZXBvcnRBUElNZXNzYWdlKGEuVi55aCwidmFsdWUgaXMgbm90IHZhbGlkOyBkb24ndCBsaW1pdCB4aHIiLCJ4aHIubWF4UGVyUGFnZVZpZXciLFtoXSl9cmV0dXJuIGEuY29uZi5zcGEyP2MuSGg6Yy5HaH07Yy5sYz1mdW5jdGlvbihhLGYpe3ZhciBuPWMuaW5jbHVkZSxtPWMuZXhjbHVkZTtyZXR1cm4gbChuKSYmMDxuLmxlbmd0aCYmIWIuVmIoZixhLG4pfHxsKG0pJiYwPG0ubGVuZ3RoJiZiLlZiKGYsYSxtKX07Yy5VZz1mdW5jdGlvbihhLGYpe3ZhciBuPWMucGF5bG9hZFBhcmFtcztiLlZiKGEubWV0aG9kKCksYS51cmwoKSxuKSYmYS5kYXRhT2JqZWN0KHtkYXRhOmZ9KX07cmV0dXJuIGN9KCk7ZS5HaD01MDtlLkhoPTI1MDtiLnVhPWV9KShhLnV0aWxzfHwoYS51dGlscz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe2IucGFyc2VVUkk9ZnVuY3Rpb24oYSl7dmFyIGI9U3RyaW5nKGEpLnJlcGxhY2UoL15ccyt8XHMrJC9nLAoiIikubWF0Y2goL14oW146XC8/I10rOik/KD86XC9cLyg/OihbXjpAXC8/I10qKSg/OjooW146QFwvPyNdKikpP0ApPygoW146XC8/I10qKSg/OjooXGQqKSk/KSk/KFtePyNdKikoXD9bXiNdKik/KCNbXHNcU10qKT8vKTthPWImJm51bGwhPWEubWF0Y2goYlsxXSsiLy8iKTtyZXR1cm4gYiYme2hyZWY6YlswXXx8IiIscHJvdG9jb2w6YlsxXXx8IiIsc2xhc2g6YT8iLy8iOiIiLHVzZXJuYW1lOmJbMl18fCIiLHBhc3N3b3JkOmJbM118fCIiLGhvc3Q6Yls0XXx8IiIsaG9zdG5hbWU6Yls1XXx8IiIscG9ydDpiWzZdfHwiIixwYXRobmFtZTpiWzddfHwiIixzZWFyY2g6Yls4XXx8IiIsaGFzaDpiWzldfHwiIn19O2IuYWJzb2x1dGl6ZVVSST1mdW5jdGlvbihhLGUpe2Z1bmN0aW9uIGMoYSl7dmFyIGI9W107YS5yZXBsYWNlKC9eKFwuXC4/KFwvfCQpKSsvLCIiKS5yZXBsYWNlKC9cLyhcLihcL3wkKSkrL2csIi8iKS5yZXBsYWNlKC9cL1wuXC4kLywiLy4uLyIpLnJlcGxhY2UoL1wvP1teXC9dKi9nLApmdW5jdGlvbihhKXsiLy4uIj09PWE/Yi5wb3AoKTpiLnB1c2goYSl9KTtyZXR1cm4gYi5qb2luKCIiKS5yZXBsYWNlKC9eXC8vLCIvIj09PWEuY2hhckF0KDApPyIvIjoiIil9dmFyIGgsZixuLG0scSx0LHAscjtyPWU/Yi5wYXJzZVVSSShlKTp7fTtwPWE/Yi5wYXJzZVVSSShhKTp7fTtyLnByb3RvY29sPyhoPXIucHJvdG9jb2wsZj1yLnNsYXNoLG49ci51c2VybmFtZSxtPXIucGFzc3dvcmQscT1yLmhvc3QsdD1jKHIucGF0aG5hbWUpLHA9ci5zZWFyY2gpOnIuaG9zdD8oaD1wLnByb3RvY29sLGY9cC5zbGFzaCxuPXIudXNlcm5hbWUsbT1yLnBhc3N3b3JkLHE9ci5ob3N0LHQ9YyhyLnBhdGhuYW1lKSxwPXIuc2VhcmNoKTooaD1wLnByb3RvY29sLGY9cC5zbGFzaCxuPXAudXNlcm5hbWUsbT1wLnBhc3N3b3JkLHE9cC5ob3N0LHIucGF0aG5hbWU/KCIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3Q9YyhyLnBhdGhuYW1lKToodD1wLnBhdGhuYW1lP3AucGF0aG5hbWUuc2xpY2UoMCwKcC5wYXRobmFtZS5sYXN0SW5kZXhPZigiLyIpKzEpK3IucGF0aG5hbWU6Zj8iLyIrci5wYXRobmFtZTpyLnBhdGhuYW1lLHQ9Yyh0KSkscD1yLnNlYXJjaCk6KHQ9YyhwLnBhdGhuYW1lKSxwPXIuc2VhcmNofHxwLnNlYXJjaCkpO3JldHVybiBoK2YrKG4/bisobT8iOiIrbToiIikrIkAiOiIiKStxK3QrcCsoci5oYXNoP3IuaGFzaDoiIil9O2IuZ2V0RnVsbHlRdWFsaWZpZWRVcmw9ZnVuY3Rpb24obCl7dHJ5e3ZhciBlLGM9ZG9jdW1lbnQubG9jYXRpb24uaHJlZixoO2E6e2Zvcih2YXIgZj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYmFzZSIpLG49MDtuPGYubGVuZ3RoO24rKyl7dmFyIG09ZltuXS5ocmVmO2lmKG0pe2g9bTticmVhayBhfX1oPXZvaWQgMH1lPWg/Yi5hYnNvbHV0aXplVVJJKGMsaCk6YztyZXR1cm4gYi5hYnNvbHV0aXplVVJJKGUsbCl9Y2F0Y2gocSl7cmV0dXJuIGEuZXhjZXB0aW9uKHEsIk0xMTUiLGwsZSksbH19fSkoYS51dGlsc3x8KGEudXRpbHM9Cnt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS51dGlscy5pc1N0cmluZyxlPWZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGgoKXt2YXIgYT1jLmNhbGwodGhpcyl8fHRoaXM7YS5jYT0wO2EuY2E9MDtyZXR1cm4gYX12KGgsYyk7aC5wcm90b3R5cGUuZmM9ZnVuY3Rpb24oKXt0aGlzLmNhPTB9O2gubD1mdW5jdGlvbihiKXt2YXIgYz1iLm1lc3NhZ2V8fGIuZGVzY3JpcHRpb24sbT1iLmZpbGVOYW1lfHxiLmZpbGVuYW1lLGg9Yi5saW5lTnVtYmVyLGU9Yi5jb2x1bW5OdW1iZXI7bChiLmRlc2NyaXB0aW9uKSYmMDw9Yi5kZXNjcmlwdGlvbi5pbmRleE9mKCJBY2Nlc3MgaXMgZGVuaWVkLiIpJiYoYys9IjogbWF5YmUgeW91IGhhdmUgQ09SUyBYSFIgZXJyb3IgaW4gSUUiKTthLm1vbml0b3IuZ2EuSGEoYyxtLGgsZSxiKX07aC5QZj1mdW5jdGlvbihhKXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Yy5ocmVmPWE7YT1kb2N1bWVudC5sb2NhdGlvbjsKdmFyIG09YS5wcm90b2NvbDtyZXR1cm4gYy5wcm90b2NvbD09PW0mJmMuaG9zdG5hbWU9PT1hLmhvc3RuYW1lJiZoLlBsKGIuWEhSTW9uaXRvci5CalttXSxjLnBvcnQsYS5wb3J0KX07aC5QbD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuKGJ8fGEpPT09KGN8fGEpfTtyZXR1cm4gaH0oYi53Yyk7ZS5Caj17Imh0dHA6IjoiODAiLCJodHRwczoiOiI0NDMifTtiLnZhPWV9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLnVhLGU9YS51dGlscy52YyxjPWEudXRpbHMubWVyZ2VKU09OLGg9YS5ldmVudHMuQWRydW1BamF4LGY9YS51dGlscy5pc1N0cmluZyxuPWEudXRpbHMuaXNEZWZpbmVkLG09YS51dGlscy5pc051bWJlcixxPWEudXRpbHMuZ2V0RnVsbHlRdWFsaWZpZWRVcmwsdD1hLmNvbmYuc3BhMjtiLmNiPW51bGw7Yi5vaD13aW5kb3cuZmV0Y2g7dmFyIHA9ZnVuY3Rpb24ocCl7ZnVuY3Rpb24gaygpe3JldHVybiBudWxsIT09CnAmJnAuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXYoayxwKTtrLnByb3RvdHlwZS5Oaz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywiZmV0Y2giKTtpZighY3x8Yy5jb25maWd1cmFibGUpe2MmJmRlbGV0ZSBjLndyaXRhYmxlO2MmJmRlbGV0ZSBjLnZhbHVlO2N8fChjPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pO3ZhciBmPWMuc2V0LG09Yy5nZXQ7Yy5zZXQ9ZnVuY3Rpb24oYyl7ITAhPT1jLmlzQWdlbnRGZXRjaCYmKG4oZikmJmYuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4oYi5jYil8fGEuc2V0VXAoYykpfTtjLmdldD1mdW5jdGlvbigpe3ZhciBhPWIub2g7bihtKSYmKGE9bS5hcHBseSh0aGlzLGFyZ3VtZW50cykpO24oYi5jYikmJihhPWIuY2IpO3JldHVybiBhfX1PYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJmZXRjaCIsYyl9O2sucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKGYpe3ZhciBtPQp0aGlzO2Y9Znx8d2luZG93LmZldGNofHxiLm9oO2EubG9nKCJNMTE2Iik7aWYobihmKSl7dmFyIHE9ZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKGYsaCl7dmFyIG49YXJndW1lbnRzO2EubG9nKCJNMTE3IixtLl9hZHJ1bUFqYXhULnVybCgpLG0uX2FkcnVtQWpheFQubWV0aG9kKCkpO3ZhciBsPWEudXRpbHMubm93KCk7Yi52YS5QZihtLl9hZHJ1bUFqYXhULnVybCgpKSYmKG49ay5SaShhcmd1bWVudHMpKTt2YXIgcT1jLmFwcGx5KHRoaXMsbikscD1uZXcgd2luZG93LlByb21pc2UoZnVuY3Rpb24oYixjKXtxLnRoZW4oZnVuY3Rpb24oYyl7YS5sb2coIk0xMTgiLG0uX2FkcnVtQWpheFQudXJsKCkpO2EubG9nKCJNMTE5IixsLG0uX2FkcnVtQWpheFQudXJsKCkpO2UuU20oYyxwLl9hZHJ1bUFqYXhUKTtwLl9hZHJ1bUFqYXhULm1hcmtGaXJzdEJ5dGVUaW1lKHAuX2FkcnVtQWpheFQuZ2V0Rmlyc3RCeXRlVGltZSgpfHxhLnV0aWxzLm5vdygpKTtwLl9hZHJ1bUFqYXhULnJlc3BvbnNlPQpjO2lmKGcoYy5jbG9uZSkpe2EubG9nKCJNMTIwIixtLl9hZHJ1bUFqYXhULnVybCgpKTt2YXIgZj1jLmNsb25lKCkudGV4dCgpO2ZbImNhdGNoIl0oZnVuY3Rpb24oKXtrLlRjKHApfSk7ay54ayhmLHApfWVsc2UgYS5sb2coIk0xMjEiLG0uX2FkcnVtQWpheFQudXJsKCkpLGsud20ocCxjKTtiKGMpfSk7cVsiY2F0Y2giXShmdW5jdGlvbihiKXthLmxvZygiTTEyMiIsbS5fYWRydW1BamF4VC51cmwoKSk7cC5fYWRydW1BamF4VC5tYXJrRmlyc3RCeXRlVGltZShwLl9hZHJ1bUFqYXhULmdldEZpcnN0Qnl0ZVRpbWUoKXx8YS51dGlscy5ub3coKSk7ay5UYyhwKTtjKGIpfSl9KTtwLl9hZHJ1bUFqYXhUPW0uX2FkcnVtQWpheFQ7cC5JPSEwO3AuX2FkcnVtQWpheFQudGltZXN0YW1wKGwpO3AuX2FkcnVtQWpheFQubWFya1NlbmRUaW1lKGwpO3AuX2FkcnVtQWpheFQucGFyZW50UGhhc2UoYS5saWZlY3ljbGUuZ2V0UGhhc2VOYW1lKCkpO2sucW0ocC5fYWRydW1BamF4VCxhcmd1bWVudHMpOwphLmxvZygiTTEyMyIsbCxtLl9hZHJ1bUFqYXhULnVybCgpKTt0JiYocC5oPW5ldyBhLkRiKGEuYy5pYSgpLG5ldyBhLkthKCJ3aW5kb3cuZmV0Y2giKSxhLkNhdXNlVHlwZS5GRVRDSCkpO3JldHVybiBwfX07cS5pc0FnZW50RmV0Y2g9ITA7Yi5jYj1hLmFvcC5hcm91bmQocShmKSxmdW5jdGlvbigpe3ZhciBmPWsucWsoYXJndW1lbnRzKTshdCYmKyttLmNhK2IueGhyTW9uaXRvci5jYT49bC5tYXhQZXJQYWdlVmlld3x8bC5sYyhmLnVybCxmLm1ldGhvZCk/YS5sb2coIk0xMjQiLGYudXJsKToobS5fYWRydW1BamF4VD1uZXcgaChjKGYsbS5zdGF0dXMpKSx0JiYobS5oPWEuYy5PYSgid2luZG93LmZldGNoLnNlbmQiLHZvaWQgMCxhLmMuaWEoKSxhLkNhdXNlVHlwZS5GRVRDSCksYS5jLnFhKG0uaCkpKX0sZnVuY3Rpb24oKXshdCYmbS5jYStiLnhock1vbml0b3IuY2E+PWwubWF4UGVyUGFnZVZpZXc/YS5sb2coIk0xMjUiLG0uX2FkcnVtQWpheFQudXJsKCkpOmwubGMobS5fYWRydW1BamF4VC51cmwoKSwKbS5fYWRydW1BamF4VC5tZXRob2QoKSk/YS5sb2coIk0xMjYiLG0uX2FkcnVtQWpheFQudXJsKCkpOnQmJihhLmoubi5HLkJlKG0uX2FkcnVtQWpheFQudXJsKCkpLGEuYy5MKCkpfSwiZmV0Y2giLGIudmEubCk7d2luZG93LmZldGNoPWIuY2J9fTtrLnhrPWZ1bmN0aW9uKGIsYyl7Yi50aGVuKGZ1bmN0aW9uKGIpe3ZhciBmPWEudXRpbHMubm93KCk7ay5hYShjKSYmKGMuX2FkcnVtQWpheFQucmVzcG9uc2UucmVzcG9uc2VUZXh0PWIsay4kZihjLl9hZHJ1bUFqYXhULGYpLGI9Yy5fYWRydW1BamF4VC5nZXRSZXNwUHJvY1RpbWUoKSxuKGIpfHxuKGMuX2FkcnVtQWpheFQudykmJjAhPT1jLl9hZHJ1bUFqYXhULnd8fChhLmxvZygiTTEyNyIsZixjLl9hZHJ1bUFqYXhULnVybCgpKSxjLl9hZHJ1bUFqYXhULm1hcmtSZXNwUHJvY1RpbWUoZiksay5UYShjKSkpfSlbImNhdGNoIl0oZnVuY3Rpb24oKXtrLlRjKGMpfSl9O2suVGM9ZnVuY3Rpb24oYil7YS5sb2coIk0xMjgiLGIuX2FkcnVtQWpheFQudXJsKCkpOwp2YXIgYz1hLnV0aWxzLm5vdygpO2suYWEoYikmJihrLiRmKGIuX2FkcnVtQWpheFQsYyksay5hZyhiLl9hZHJ1bUFqYXhULGMpLGsuVGEoYikpfTtrLiRmPWZ1bmN0aW9uKGIsYyl7dmFyIGY9Yi5nZXRSZXNwQXZhaWxUaW1lKCk7bihmKXx8KGEubG9nKCJNMTI5IixjLGIudXJsKCkpLGIubWFya1Jlc3BBdmFpbFRpbWUoYykpfTtrLmFnPWZ1bmN0aW9uKGIsYyl7dmFyIGY9Yi5nZXRSZXNwUHJvY1RpbWUoKTtpZihuKGYpKXJldHVybiExO2EubG9nKCJNMTMwIixjLGIudXJsKCkpO2IubWFya1Jlc3BQcm9jVGltZShjKTtyZXR1cm4hMH07ay53bT1mdW5jdGlvbihhLGIpe2IuZWo9ay5BYihhLGIuZWopO2IubGo9ay5BYihhLGIubGopO2IuVWo9ay5BYihhLGIuVWopO2Iucmw9ay5BYihhLGIucmwpO2IudGV4dD1rLkFiKGEsYi50ZXh0KX07ay5BYj1mdW5jdGlvbihiLGMpe3JldHVybiBhLmFvcC5hcm91bmQoYyxmdW5jdGlvbigpe2suYWEoYikmJmIuX2FkcnVtQWpheFQubWFya1Jlc3BBdmFpbFRpbWUoYS51dGlscy5ub3coKSl9LApmdW5jdGlvbigpe2suYWEoYikmJihiLl9hZHJ1bUFqYXhULm1hcmtSZXNwUHJvY1RpbWUoYS51dGlscy5ub3coKSksay5UYShiKSl9LCJ3cmFwUmVzcG9uc2VSZWFkZXIiLGEubW9uaXRvci5FcnJvck1vbml0b3IubCl9O2suUmk9ZnVuY3Rpb24oYSl7MT09YS5sZW5ndGg/ZihhWzBdKT8oW10ucHVzaC5jYWxsKGEse30pLGsuRWMoYVsxXSkpOmsuRWMoYVswXSk6Mj09YS5sZW5ndGgmJmsuRWMoYVsxXSk7cmV0dXJuIGF9O2suRWM9ZnVuY3Rpb24oYil7bihiKSYmKG4oYi5oZWFkZXJzKXx8KGIuaGVhZGVycz1uZXcgSGVhZGVycyxhLmxvZygiTTEzMSIpKSxiLmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzP2IuaGVhZGVycy5oYXMoIkFEUlVNIik/Yi5oZWFkZXJzLnNldCgiQURSVU0iLCJpc0FqYXg6dHJ1ZSIpOmIuaGVhZGVycy5hcHBlbmQoIkFEUlVNIiwiaXNBamF4OnRydWUiKTpiLmhlYWRlcnMuQURSVU09ImlzQWpheDp0cnVlIil9O2sucW09ZnVuY3Rpb24oYixjKXsyPD1jLmxlbmd0aCYmCmEudXRpbHMuaXNPYmplY3QoY1sxXSkmJm4oY1sxXS5ib2R5KSYmbC5VZyhiLGNbMV0uYm9keSl9O2sucWs9ZnVuY3Rpb24oYil7dmFyIGM9e3VybDoiIixtZXRob2Q6IiJ9O2EudXRpbHMuaXNPYmplY3QoYlswXSk/KGMudXJsPWJbMF0udXJsfHwoYS51dGlscy5pc0RlZmluZWQoYlswXS50b1N0cmluZyk/YlswXS50b1N0cmluZygpOnZvaWQgMCksYy5tZXRob2Q9YlswXS5tZXRob2R8fCJHRVQiKTpmKGJbMF0pJiYoYy51cmw9YlswXSxjLm1ldGhvZD1iWzFdJiZiWzFdLm1ldGhvZHx8IkdFVCIpO2MudXJsPW4oYy51cmwpP2MudXJsOiIiO2MudXJsPXEoYy51cmwpO2MubWV0aG9kPWMubWV0aG9kO3JldHVybiBjfTtrLkhrPWZ1bmN0aW9uKGIpe3ZhciBjO24oYyl8fChhLmxvZygiTTEzMiIsYi5fYWRydW1BamF4VC51cmwoKSksYz0xKTtuKGIuX2FkcnVtQWpheFQudykmJm0oYi5fYWRydW1BamF4VC53KSYmKGIuX2FkcnVtQWpheFQudys9YyxhLmxvZygiTTEzMyIsYi5fYWRydW1BamF4VC53LApiLl9hZHJ1bUFqYXhULnVybCgpKSl9O2suTWI9ZnVuY3Rpb24oYil7dmFyIGM7bihjKXx8KGEubG9nKCJNMTM0IixiLl9hZHJ1bUFqYXhULnVybCgpKSxjPTEpO24oYi5fYWRydW1BamF4VC53KSYmbShiLl9hZHJ1bUFqYXhULncpJiYoYi5fYWRydW1BamF4VC53LT1jLGEubG9nKCJNMTM1IixiLl9hZHJ1bUFqYXhULncsYi5fYWRydW1BamF4VC51cmwoKSkpfTtrLmFhPWZ1bmN0aW9uKGEpe3JldHVybiBuKGEuX2FkcnVtQWpheFQpfTtrLlJiPWZ1bmN0aW9uKGEpe3JldHVybiBuKGEuX2FkcnVtQWpheFQudyl9O2suVW09ZnVuY3Rpb24oYixjKXtiLl9hZHJ1bUFqYXhUPWMuX2FkcnVtQWpheFQ7Yi5fYWRydW1BamF4VC53Kz1iLkQ7YS5sb2coIk0xMzYiLGIuX2FkcnVtQWpheFQudyxjLl9hZHJ1bUFqYXhULnVybCgpKTtiLkQ9MH07ay5YbT1mdW5jdGlvbihhKXt2YXIgYj0hMTtrLmFhKGEpJiZuKGEuX2FkcnVtQWpheFQudykmJihrLkhrKGEpLGI9ITApO3JldHVybiBifTtrLlRhPWZ1bmN0aW9uKGEpe2Uud2QoYSwKYS5fYWRydW1BamF4VCl9O2suUWQ9ZnVuY3Rpb24oYil7dmFyIGM9YS51dGlscy5ub3coKTtyZXR1cm4gMD09PWIuX2FkcnVtQWpheFQudyYmbihiLl9hZHJ1bUFqYXhUKT9rLmFnKGIuX2FkcnVtQWpheFQsYyk6ITF9O2suUGQ9ZnVuY3Rpb24oYil7dmFyIGM9ITEsZj1hLnV0aWxzLm5vdygpLG09Yi5fYWRydW1BamF4VC5nZXRSZXNwQXZhaWxUaW1lKCk7bihtKXx8KGIuX2FkcnVtQWpheFQubWFya1Jlc3BBdmFpbFRpbWUoZiksYz0hMCk7cmV0dXJuIGN9O2suSms9ZnVuY3Rpb24oYil7YS5sb2coIk0xMzciLGIuX2FkcnVtQWpheFQudXJsKCkpO2IuX2FkcnVtQWpheFQudz0wfTtyZXR1cm4ga30oYi52YSk7Yi5lZT1wO2IuaWI9bmV3IGIuZWV9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLmlzT2JqZWN0LGU9YS51dGlscy5tYXAsYz1hLnV0aWxzLnJlZHVjZSxoPWEudXRpbHMuZmlsdGVyLApmPWEudXRpbHMuaXNEZWZpbmVkLG49YS51dGlscy5pc1N0cmluZyxtPWEudXRpbHMubWVyZ2VKU09OLHE9YS51dGlscy53YSx0PWEudXRpbHMuZ2MscD1hLnV0aWxzLnVhLGs9YS51dGlscy52YyxzPWEuY29uZi5zcGEyLHc9ZnVuY3Rpb24odyl7ZnVuY3Rpb24gdSgpe3ZhciBiPXcuY2FsbCh0aGlzKXx8dGhpcztiLklkPSExO2lmKCEwPT09d2luZG93WyJhZHJ1bS14aHItZGlzYWJsZSJdKXJldHVybiBhLmxvZygiTTEzOCIpLGI7aWYoIXdpbmRvdy5YTUxIdHRwUmVxdWVzdClyZXR1cm4gYS5sb2coIk0xMzkiKSxiO2IuQz13aW5kb3cuWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlO2lmKCFiLkMpcmV0dXJuIGEubG9nKCJNMTQwIiksYjtpZighKCJvcGVuImluIGIuQyYmInNlbmQiaW4gYi5DKSlyZXR1cm4gYS5sb2coIk0xNDEiKSxiO2IuSWQ9YS5hb3Auc3VwcG9ydChiLkMub3BlbikmJmEuYW9wLnN1cHBvcnQoYi5DLnNlbmQpO2IuSWR8fGEubG9nKCJNMTQyIik7cmV0dXJuIGJ9dih1LAp3KTt1LnByb3RvdHlwZS5zZXRVcD1mdW5jdGlvbigpe2lmKHRoaXMuSWQpe2EubG9nKCJNMTQzIik7YS54aHJDb25zdHJ1Y3Rvcj13aW5kb3cuWE1MSHR0cFJlcXVlc3Q7YS54aHJPcGVuPXRoaXMueGhyT3Blbj10aGlzLkMub3BlbjthLnhoclNlbmQ9dGhpcy54aHJTZW5kPXRoaXMuQy5zZW5kO3Auc2V0VXAoKTt2YXIgYz10aGlzO3RoaXMuQy5vcGVuPWEuYW9wLmFyb3VuZCh0aGlzLkMub3BlbixmdW5jdGlvbigpe3UuaGwodGhpcykmJig0PT09dGhpcy5yZWFkeVN0YXRlPyhhLmxvZygiTTE0NCIpLHUuTWoodGhpcy5fYWRydW1BamF4VCksZGVsZXRlIHRoaXMuQWUsay5yZXBvcnRYaHIodGhpcyx0aGlzLl9hZHJ1bUFqYXhUKSk6YS5sb2coIk0xNDUiLHRoaXMuX2FkcnVtQWpheFQudXJsKCkpKTt2YXIgZj0xPD1hcmd1bWVudHMubGVuZ3RoP1N0cmluZyhhcmd1bWVudHNbMF0pOiIiLGg9Mjw9YXJndW1lbnRzLmxlbmd0aD9TdHJpbmcoYXJndW1lbnRzWzFdKToiIixoPWEudXRpbHMuZ2V0RnVsbHlRdWFsaWZpZWRVcmwoaCk7CiFzJiZjLmNhK2IuaWIuY2E+PXAubWF4UGVyUGFnZVZpZXd8fHAubGMoaCxmKXx8KHRoaXMuX2FkcnVtQWpheFQ9bmV3IGEuZXZlbnRzLkFkcnVtQWpheChtKHttZXRob2Q6Zix1cmw6aH0sYy5zdGF0dXMpKSl9LG51bGwsIlhIUi5vcGVuIixiLnZhLmwpO3RoaXMuQy5zZW5kPWEuYW9wLmFyb3VuZCh0aGlzLkMuc2VuZCxmdW5jdGlvbihmKXt2YXIgbT10aGlzLG49dGhpcy5fYWRydW1BamF4VCxlPSExO2lmKCEoIW58fCFzJiYrK2MuY2ErYi5pYi5jYT49cC5tYXhQZXJQYWdlVmlldykpe3ZhciBsPWEudXRpbHMubm93KCkscT1uLmdldFNlbmRUaW1lKCk7YS5hc3NlcnQobnVsbD09PXEsIk0xNDYiKTtuLnRpbWVzdGFtcChsKTtuLm1hcmtTZW5kVGltZShxfHxsKTtuLnBhcmVudFBoYXNlKGEubGlmZWN5Y2xlLmdldFBoYXNlTmFtZSgpKTtzJiYobS5oPWEuYy5PYSgiWEhSLnNlbmQiLHZvaWQgMCxhLmMuaWEoKSxhLkNhdXNlVHlwZS5YSFIpKTtiLnZhLlBmKG4udXJsKCkpP20uc2V0UmVxdWVzdEhlYWRlcigiQURSVU0iLAoiaXNBamF4OnRydWUiKTphLmxvZygiTTE0NyIsZG9jdW1lbnQubG9jYXRpb24uaHJlZixuLnVybCgpKTtwLlVnKG4sZik7Zj11Lm1rKG4udXJsKCkscC5wYXJhbWV0ZXIsZik7bi5wYXJhbWV0ZXIoZik7dmFyIGs9MCxyPWZ1bmN0aW9uKCl7aWYoND09bS5yZWFkeVN0YXRlKWU/YS5sb2coIk0xNDgiKTooYS5sb2coIk0xNDkiKSxjLnRjKG0pKTtlbHNle3ZhciBiPW51bGw7dHJ5e2I9bS5vbnJlYWR5c3RhdGVjaGFuZ2V9Y2F0Y2goZil7aWYoZSl7YS5sb2coIk0xNTAiLGYpO3JldHVybn1hLmxvZygiTTE1MSIsZik7Yy50YyhtKTtyZXR1cm59aysrO2I/YS5hb3Auc3VwcG9ydChiKT8obS5vbnJlYWR5c3RhdGVjaGFuZ2U9dS5aZShiLCJYSFIub25SZWFkeVN0YXRlQ2hhbmdlIiksaCYmYy5yaC5jYWxsKG0sInJlYWR5c3RhdGVjaGFuZ2UiLHUuYmYpLGEubG9nKCJNMTUyIixrKSk6aHx8KGEubG9nKCJNMTUzIiksYy50YyhtKSk6azx1Lk9pP3Qocik6ZT9hLmxvZygiTTE1NCIpOihhLmxvZygiTTE1NSIpLApjLnRjKG0pKX19O2lmKGgpe2EubG9nKCJNMTU2Iik7dHJ5e2MuaG4uY2FsbChtLCJyZWFkeXN0YXRlY2hhbmdlIix1LmJmKSxlPSEwfWNhdGNoKHcpe2EuZXJyb3IoIk0xNTciLHcpfX1yKCl9fSxmdW5jdGlvbigpe2lmKHMpe3ZhciBiPXRoaXMuX2FkcnVtQWpheFQ7YiYmYS5qLm4uRy5CZShiLnVybCgpKX19LCJYSFIuc2VuZCIsYi52YS5sKTt2YXIgaD0iYWRkRXZlbnRMaXN0ZW5lciJpbiB0aGlzLkMmJiJyZW1vdmVFdmVudExpc3RlbmVyImluIHRoaXMuQyYmYS5hb3Auc3VwcG9ydCh0aGlzLkMuYWRkRXZlbnRMaXN0ZW5lcikmJmEuYW9wLnN1cHBvcnQodGhpcy5DLnJlbW92ZUV2ZW50TGlzdGVuZXIpO2lmKGgpe3ZhciBuPWEudXRpbHMubmYodGhpcy5DLCJhZGRFdmVudExpc3RlbmVyIik7dGhpcy5obj1uLmFkZEV2ZW50TGlzdGVuZXI7bi5hZGRFdmVudExpc3RlbmVyPWEuYW9wLmFyb3VuZChuLmFkZEV2ZW50TGlzdGVuZXIsZnVuY3Rpb24oYixjLG0pe2lmKGYoYykmJihjLkk9CiEwLHRoaXMgaW5zdGFuY2VvZiBYTUxIdHRwUmVxdWVzdCYmL14obG9hZHxlcnJvcnxyZWFkeXN0YXRlY2hhbmdlKSQvLnRlc3QoYikmJmMpKXt2YXIgaD11Lk9tKGMpO2lmKGgpe3ZhciBuPXEoYXJndW1lbnRzKTtuWzFdPWg7YS5sb2coIk0xNTgiKTtyZXR1cm4gbn1hLmxvZygiTTE1OSIsYixjKX19LG51bGwsIlhIUi5hZGRFdmVudExpc3RlbmVyIik7bj1hLnV0aWxzLm5mKHRoaXMuQywicmVtb3ZlRXZlbnRMaXN0ZW5lciIpO3RoaXMucmg9bi5yZW1vdmVFdmVudExpc3RlbmVyO24ucmVtb3ZlRXZlbnRMaXN0ZW5lcj1hLmFvcC5hcm91bmQobi5yZW1vdmVFdmVudExpc3RlbmVyLGZ1bmN0aW9uKGIsZixtKXtpZih0aGlzIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3QmJnRoaXMuX2FkcnVtQWpheFQpe3ZhciBoPXEoYXJndW1lbnRzKTtmLl9fYWRydW1JbnRlcmNlcHRvcj8oaFsxXT1mLl9fYWRydW1JbnRlcmNlcHRvcixhLmxvZygiTTE2MCIpLGMucmguYXBwbHkodGhpcyxoKSk6YS5sb2coIk0xNjEiKX19LApudWxsLCJYSFIucmVtb3ZlRXZlbnRMaXN0ZW5lciIpfWVsc2UgYS5sb2coIk0xNjIiKTthLmxvZygiTTE2MyIpfX07dS5taz1mdW5jdGlvbihiLGYsbil7aWYoZiYmKGY9aChlKGgoZixmdW5jdGlvbihjKXtyZXR1cm4gYS51dGlscy5kZyhiLGMudXJscyl9KSxmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRGcm9tQm9keShuKX0pLGwpLDA8Zi5sZW5ndGgpKXJldHVybiBjKGYsbSx7fSl9O3UuYWQ9ZnVuY3Rpb24oYil7dmFyIGM9Yi5fYWRydW1BamF4VDtpZihjKXt2YXIgZj1hLnV0aWxzLm5vdygpOzI9PWIucmVhZHlTdGF0ZT9jLm1hcmtGaXJzdEJ5dGVUaW1lKGMuZ2V0Rmlyc3RCeXRlVGltZSgpfHxmKTo0PT1iLnJlYWR5U3RhdGUmJihjLm1hcmtSZXNwQXZhaWxUaW1lKGMuZ2V0UmVzcEF2YWlsVGltZSgpfHxmKSxjLm1hcmtGaXJzdEJ5dGVUaW1lKGMuZ2V0Rmlyc3RCeXRlVGltZSgpfHxmKSxzJiYoYj1iLmg9YS5jLk9hKCJYSFIubG9hZCIsdm9pZCAwLGIuaCxhLkNhdXNlVHlwZS5YSFIpLAphLmMucWEoYikpKX19O3UuemY9ZnVuY3Rpb24oYil7dmFyIGM9Yi5fYWRydW1BamF4VDtpZihjJiY0PT1iLnJlYWR5U3RhdGUpe3ZhciBmPWEudXRpbHMubm93KCksbT1jLmdldFJlc3BQcm9jVGltZSgpO2MubWFya1Jlc3BBdmFpbFRpbWUoYy5nZXRSZXNwQXZhaWxUaW1lKCl8fGYpO2Y+bSYmYy5tYXJrUmVzcFByb2NUaW1lKGYpO2sud2QoYixjKTthLmNvbmYuc3BhMiYmYS5jLkwoKX19O3UuWmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdS5qbihhLGZ1bmN0aW9uKCl7dS5hZCh0aGlzKX0sZnVuY3Rpb24oKXt1LnpmKHRoaXMpfSxiKX07dS5iZj1mdW5jdGlvbigpe3UuYWQodGhpcyk7dS56Zih0aGlzKX07dS5obD1mdW5jdGlvbihhKXtyZXR1cm4gZihhLl9hZHJ1bUFqYXhUKSYmbihhLl9hZHJ1bUFqYXhULl91cmwpfTt1Lk1qPWZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMubm93KCk7Yi5tYXJrUmVzcEF2YWlsVGltZShiLmdldFJlc3BBdmFpbFRpbWUoKXx8Yyk7Yi5tYXJrRmlyc3RCeXRlVGltZShiLmdldEZpcnN0Qnl0ZVRpbWUoKXx8CmMpO2IubWFya1Jlc3BQcm9jVGltZShiLmdldFJlc3BQcm9jVGltZSgpfHxjKX07dS5wcm90b3R5cGUudGM9ZnVuY3Rpb24oYil7aWYoYi5fYWRydW1BamF4VCl7dmFyIGM9YS51dGlscy5ub3coKSszRTQsZj1mdW5jdGlvbigpe3UuYWQoYik7dmFyIG09Yi5fYWRydW1BamF4VDtpZihtKXt2YXIgaD1hLnV0aWxzLm5vdygpOzQ9PWIucmVhZHlTdGF0ZT8oYS5hc3NlcnQobnVsbD09PW0uZ2V0UmVzcFByb2NUaW1lKCksIk0xNjQiKSxtLm1hcmtSZXNwUHJvY1RpbWUobS5nZXRSZXNwUHJvY1RpbWUoKXx8aCksYS5sb2coIk0xNjUiKSxrLndkKGIsbSksYS5jb25mLnNwYTImJmEuYy5MKCkpOmg8Yz9hLnV0aWxzLm9TVE8oZix1LmJlKTooZGVsZXRlIGIuX2FkcnVtQWpheFQsYS5sb2coIk0xNjYiKSl9fTtmKCl9fTt1LmpuPWZ1bmN0aW9uKGIsYyxmLG0pe3ZhciBoPWI7YiYmIm9iamVjdCI9PT10eXBlb2YgYiYmInRvU3RyaW5nImluIGImJiJbeHBjb25uZWN0IHdyYXBwZWQgbnNJRE9NRXZlbnRMaXN0ZW5lcl0iPT09CmIudG9TdHJpbmcoKSYmImhhbmRsZUV2ZW50ImluIGImJihoPWZ1bmN0aW9uKCl7Yi5oYW5kbGVFdmVudC5hcHBseSh0aGlzLHEoYXJndW1lbnRzKSl9KTtyZXR1cm4gYS5hb3AuYXJvdW5kKGgsYyxmLG0pfTt1Lk9tPWZ1bmN0aW9uKGIpe2lmKGIuX19hZHJ1bUludGVyY2VwdG9yKXJldHVybiBiLl9fYWRydW1JbnRlcmNlcHRvcjtpZihhLmFvcC5zdXBwb3J0KGIpKXt2YXIgYz11LlplKGIsIlhIUi5pbnZva2VFdmVudExpc3RlbmVyIik7cmV0dXJuIGIuX19hZHJ1bUludGVyY2VwdG9yPWN9fTtyZXR1cm4gdX0oYi52YSk7dy5PaT01O3cuYmU9NTA7Yi5YSFJNb25pdG9yPXc7Yi54aHJNb25pdG9yPW5ldyBiLlhIUk1vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLnZjLGU9ZnVuY3Rpb24oYyl7ZnVuY3Rpb24gaChiKXtiPWMuY2FsbCh0aGlzLGIpfHx0aGlzO2IucGVyZj1uZXcgYS5QZXJmb3JtYW5jZVRyYWNrZXI7CmIuJGU9ITE7Yi5KZT0wO3JldHVybiBifXYoaCxjKTtoLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnRUeXBlLlZQYWdlVmlld307aC5wcm90b3R5cGUuV2M9ZnVuY3Rpb24oKXtyZXR1cm4gYi5FdmVudFRyYWNrZXIuRGModGhpcy5ndWlkKCksdGhpcy51cmwoKSx0aGlzLnR5cGUoKSl9O2gucHJvdG90eXBlLkZkPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5XYygpO2EubW9uaXRvci5nYS5zZXQoInBhcmVudCIsYik7YS5sb2coIk0xNjciLGIuZ3VpZCgpLGIudXJsKCkpfTtoLnByb3RvdHlwZS5zdGFydENvcnJlbGF0aW5nWGhycz1mdW5jdGlvbigpe2EubG9nKCJNMTY4Iik7YS51dGlscy5pc0RlZmluZWQodGhpcy5lYikmJiFhLm1vbml0b3IuQW55U3BhTW9uaXRvci5CYSYmbC53bCh0aGlzLHRoaXMuZWIuZ3VpZCl9O2gucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5zdGFydENvcnJlbGF0aW5nWGhycygpO3RoaXMuRmQoKX07cmV0dXJuIGh9KGIuRXZlbnRUcmFja2VyKTsKYi5BbnlTcGFWUGFnZVZpZXc9ZTtiLk1hKGIuVFthLkV2ZW50VHlwZS5WUGFnZVZpZXddLGUucHJvdG90eXBlKX0pKGEuZXZlbnRzfHwoYS5ldmVudHM9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpe2EucmVwb3J0PWZ1bmN0aW9uKGIpe2EudXRpbHMuaXNPYmplY3QoYikmJmEudXRpbHMuaXNGdW5jdGlvbihiLnR5cGUpPy0xPT1bYS5FdmVudFR5cGUuUGFnZVZpZXcsYS5FdmVudFR5cGUuQWpheCxhLkV2ZW50VHlwZS5WUGFnZVZpZXcsYS5FdmVudFR5cGUuRXJyb3JdLmluZGV4T2YoYi50eXBlKCkpP2EucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYi50eXBlKCkrImlzIG5vdCBhIHZhbGlkIGV4dGVybmFsIGV2ZW50IHR5cGUiLCJBRFJVTS5yZXBvcnQiLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpOmEuY29uZi5zcGEyJiZhLkV2ZW50VHlwZS5WUGFnZVZpZXc9PWIudHlwZSgpP2EubG9nKCJNMTY5Iik6YS51dGlscy5nYyhmdW5jdGlvbigpe2EuY29tbWFuZCgicmVwb3J0RXZlbnQiLApiKX0pOmEucmVwb3J0QVBJTWVzc2FnZShhLlYuV2QsIiIsIkFEUlVNLnJlcG9ydCIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9O2EubWFya1ZpcnR1YWxQYWdlQmVnaW49ZnVuY3Rpb24oYixsKXthLmNvbmYuc3BhMiYmKHRoaXMuUGE9YS51dGlscy5pc0RlZmluZWQobCk/bDohMCxhLmxvZygiTTE3MCIsZG9jdW1lbnQuVVJMKSxhLm1vbml0b3IuQW55U3BhTW9uaXRvci5EZChkb2N1bWVudC5VUkwsYiwhMCksYS5tb25pdG9yLkFueVNwYU1vbml0b3IuUWcoKSl9O2EubWFya1ZpcnR1YWxQYWdlRW5kPWZ1bmN0aW9uKCl7YS5jb25mLnNwYTImJnRoaXMuUGEmJihhLmxvZygiTTE3MSIsYS5tb25pdG9yLkFueVNwYU1vbml0b3IuamEpLGEubW9uaXRvci5BbnlTcGFNb25pdG9yLmJnKGEubW9uaXRvci5BbnlTcGFNb25pdG9yLnZwLnN0YXJ0VGltZSxhLnV0aWxzLm5vdygpKSx0aGlzLlBhPSExKX19KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9CmEudXRpbHMuaXNEZWZpbmVkLGU9YS5hb3AuYWZ0ZXIsYz1hLmFvcC5iZWZvcmUsaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoKXt9Zi5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt2YXIgYz0hMTtmLnhhPWEudXRpbHMuaGIoKTthLmMuc2V0VXAoKTthLmNlLnNldFVwKCk7Zi50bSgpO2Euai5uLnNldFVwKGEudXRpbHMubm93KCkpO2YuamE9ZG9jdW1lbnQuVVJMO2YuUmM9W107YS51dGlscy5pc0RlZmluZWQod2luZG93Lmhpc3RvcnkpJiZhLnV0aWxzLmlzRnVuY3Rpb24od2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKSYmKGM9ITAsd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlPWEuYW9wLmFyb3VuZCh3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUsZnVuY3Rpb24oKXtiLkRPTUV2ZW50c01vbml0b3IuWmImJiFhLlBhJiYoYS5sb2coIk0xNzIiKSxmLkRkKGRvY3VtZW50LlVSTCkpfSxmdW5jdGlvbigpe2IuRE9NRXZlbnRzTW9uaXRvci5aYiYmKGEuUGE/KGEubG9nKCJNMTczIiksZi52cC51cmwoZG9jdW1lbnQuVVJMKSk6CihhLmxvZygiTTE3NCIpLGYuUWcoKSkpO2YuamE9ZG9jdW1lbnQuVVJMfSwiaGlzdG9yeVB1c2hTdGF0ZSIpKTtmLlJjPWYuUmMuY29uY2F0KGEudXRpbHMuemIoYS51dGlscy5wYyxhLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5zcGEmJmEuY29uZi51c2VyQ29uZi5zcGEuc3BhMiYmYS51dGlscy5pc09iamVjdChhLmNvbmYudXNlckNvbmYuc3BhLnNwYTIpJiZhLmNvbmYudXNlckNvbmYuc3BhLnNwYTIudnAmJmEuY29uZi51c2VyQ29uZi5zcGEuc3BhMi52cC5leGNsdWRlKSk7aWYoYS51dGlscy5pc0RlZmluZWQod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpKXt2YXIgYz0hMCxtPWZ1bmN0aW9uKCl7Zi5qYSE9ZG9jdW1lbnQuVVJMJiZmLlJnKCl9O20uST0hMDt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLG0pfWN8fGEubG9nKCJNMTc1Iil9O2YuUmc9ZnVuY3Rpb24oKXt2YXIgYz1kb2N1bWVudC5VUkw7YS5sb2coIk0xNzYiLGYuamEsYyk7Yi5ET01FdmVudHNNb25pdG9yLlpiJiYKKGEuUGE/KGEubG9nKCJNMTc3IiksZi52cC51cmwoZG9jdW1lbnQuVVJMKSk6KGYuRGQoZi5qYSksZi5HZChjKSkpO2YuamE9Y307Zi50bT1mdW5jdGlvbigpe3ZhciBiO2EuYy5xYT1lKGEuYy5xYSxmdW5jdGlvbigpe2I9bG9jYXRpb24uaGFzaH0pO2EuYy5MPWMoYS5jLkwsZnVuY3Rpb24oKXtiIT1sb2NhdGlvbi5oYXNoJiZmLmphIT1kb2N1bWVudC5VUkwmJmYuUmcoKX0pfTtmLkRkPWZ1bmN0aW9uKGEsYixjKXtmLm5tKCk7Zi5CYT0hMTtmLlllKGEsYixjKX07Zi5RZz1mdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LlVSTDtmLkdkKGEpO2YuamE9YX07Zi5Jbj1mdW5jdGlvbigpe2YuQmE9ITA7Zi5ZZShmLmphKTtmLkdkKCl9O2Yubm09ZnVuY3Rpb24oKXt2YXIgYz1hLmoubjthLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJmEuai5FYi5GYSYmYS51dGlscy5pc0RlZmluZWQoYi5ET01FdmVudHNNb25pdG9yLmN1cnJlbnRCYXNlUGFnZSkmJihhLmxvZygiTTE3OCIpLGMuRy5CfHwKYy5KLkI/Yy5uYXZDb21wbGV0ZShhLnV0aWxzLm5vdygpKTpjLm5hdkNvbXBsZXRlKGEudXRpbHMubWF4KGMuRy5EYSxjLkouYmEpKSxjLnJlc2V0KCkpO2YuQmF8fCFhLnV0aWxzLmlzRGVmaW5lZChmLnZwKXx8Zi52cC5EZ3x8KGEubG9nKCJNMTc5IiksYz1mLmNrKGEuai5uLkIpLGYuYmcoZi52cC5zdGFydFRpbWUsYykpfTtmLmNrPWZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMubm93KCk7Yj8oYz1mLmRrKGEuai5uLlFhKSxhLmoubi5yZXNldCgpKTpjPWYudnAudGltZXN0YW1wKCk7cmV0dXJuIGN9O2YueW09ZnVuY3Rpb24oYixjKXtyZXR1cm4gZi52cC4kZT8hMTpsKGMpJiYwPGMubGVuZ3RoJiZhLnV0aWxzLlZiKHZvaWQgMCxiLGMpfTtmLmRrPWZ1bmN0aW9uKGIpe3ZhciBjPWEudXRpbHMubm93KCk7Yj9hLmoubi5KLmNqKCl8fGEuai5uLkcuZGooKXx8KGM9YS51dGlscy5tYXgoYS5qLm4uSi5iYSxhLmoubi5HLkRhKSk6Yz1hLmoubi5zdGFydFRpbWU7cmV0dXJuIGN9O2YuYmc9CmZ1bmN0aW9uKGEsYil7Zi5rZChhLGIpO2YuWmYoYSk7Zi5yZXBvcnQoKX07Zi5ZZT1mdW5jdGlvbihiLGMsaCl7Zi5yZXNldCgpO2YudnA9bmV3IGEuZXZlbnRzLkFueVNwYVZQYWdlVmlldztmLnZwLnN0YXJ0VXJsPWI7YS51dGlscy5pc0RlZmluZWQoYykmJihmLnZwLnVzZXJQYWdlTmFtZT1jKTthLnV0aWxzLmlzQm9vbGVhbihoKSYmKGYudnAuJGU9aCk7Yj1hLmMuR2MoKTtmLnZwLnN0YXJ0VGltZT1mLkJhP2EudXRpbHMuaGIoKTphLnV0aWxzLmlzRGVmaW5lZChiKT9iLnN0YXJ0OmEudXRpbHMubm93KCk7Zi52cC5lYj1ifTtmLkdkPWZ1bmN0aW9uKGIpe2EudXRpbHMuaXNEZWZpbmVkKGIpJiZmLnZwLnVybChiKTtmLnZwLnN0YXJ0KCk7YS5QYXx8YS5qLm4uc3RhcnQoYS51dGlscy5ub3coKSl9O2Yua2Q9ZnVuY3Rpb24oYixjKXthLnV0aWxzLmlzRGVmaW5lZChmLnZwKSYmKGEuY29uZi5lbmFibGVQcmltYXJ5TWV0cmljcyYmZi5waihiKSxhLnV0aWxzLmlzRGVmaW5lZChjKT8KYS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzP2YudnAudGltZXN0YW1wKGMtYj5mLnZwLnZjdD9jOmYudnAudmN0K2IpOmYudnAudGltZXN0YW1wKGMpOmYudnAudGltZXN0YW1wKGIpKX07Zi5waj1mdW5jdGlvbihiKXthLmxvZygiTTE4MCIpO2I9YS5OLlVlKGIpO2YudnAudmN0PWIudmN0O2EuTi5yZXNldCgpfTtmLlpmPWZ1bmN0aW9uKGMpe2EudXRpbHMuaXNEZWZpbmVkKGYudnApJiZmLnZwLnJlc1RpbWluZyhiLnJlc291cmNlTW9uaXRvci5zayhmLnhhLGMpKX07Zi5jZD1mdW5jdGlvbigpe3ZhciBiPWEuYy52aygpO3JldHVybiBhLnV0aWxzLmlzRGVmaW5lZChiKSYmYS51dGlscy5pc0RlZmluZWQoZi52cCkmJighYS51dGlscy5pc0RlZmluZWQoZi52cC5lYil8fGYudnAuZWIhPWIpfTtmLnJlcG9ydD1mdW5jdGlvbigpe2lmKGEudXRpbHMuaXNEZWZpbmVkKGYudnApKWlmKGYueW0oZi52cC51cmwoKSxmLlJjKSlhLmxvZygiTTE4MiIsZi52cC51cmwoKSk7ZWxzZXthLmxvZygiTTE4MyIpOwp2YXIgYz1mLnZwO2lmKGMuRGcpYS5sb2coIk0xODQiKTtlbHNle3ZhciBtPWEudXRpbHMuaXNEZWZpbmVkKGIuRE9NRXZlbnRzTW9uaXRvci5jdXJyZW50QmFzZVBhZ2UpP2IuRE9NRXZlbnRzTW9uaXRvci5jdXJyZW50QmFzZVBhZ2UudXJsKCk6ZG9jdW1lbnQuVVJMO2MucGFyZW50VXJsKG0pO2EuY29tbWFuZCgiY2FsbCIsZnVuY3Rpb24oKXthLnJlcG9ydGVyLnJlcG9ydEV2ZW50KGMpfSk7Yy5EZz0hMH19ZWxzZSBhLmxvZygiTTE4MSIpfTtmLnJlc2V0PWZ1bmN0aW9uKCl7Zi52cD1udWxsfTtyZXR1cm4gZn0oKTtiLkFueVNwYU1vbml0b3I9aDtiLmJqPW5ldyBiLkFueVNwYU1vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLko9bmV3IGIuTGg7dGhpcy5HPW5ldyBiLkJoO3RoaXMuemw9M0UzO3RoaXMubWF4SW5hY3RpdmVUaW1lPWEuY29uZi51c2VyQ29uZiYmCmEuY29uZi51c2VyQ29uZi5uYXZDb21wbGV0ZSYmYS5jb25mLnVzZXJDb25mLm5hdkNvbXBsZXRlLm1heEluYWN0aXZlVGltZT9hLmNvbmYudXNlckNvbmYubmF2Q29tcGxldGUubWF4SW5hY3RpdmVUaW1lOk1hdGgubWF4KHRoaXMuSi5wYix0aGlzLkcucGIpK3RoaXMuemw7dGhpcy5zZz0xRTN9ZS5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oYSl7dGhpcy5jdXJyZW50VGltZT10aGlzLnN0YXJ0VGltZT1hO3RoaXMuQj10aGlzLlFhPSExO3RoaXMuSi5zZXRVcChhKTt0aGlzLkcuc2V0VXAoYSl9O2UucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGEpe3RoaXMuc2V0VXAoYSk7dGhpcy5CPSEwO3RoaXMuSi5zdGFydChhKTt0aGlzLkcuc3RhcnQoYSk7dGhpcy5QZSgpO3RoaXMuQ20oKX07ZS5wcm90b3R5cGUuQ209ZnVuY3Rpb24oKXt0aGlzLmJoPWEudXRpbHMucmVmcy5zZXRJbnRlcnZhbC5jYWxsKHdpbmRvdyxmdW5jdGlvbigpe2EuUCgpO3RoaXMuY3VycmVudFRpbWU9YS51dGlscy5ub3coKTsKdmFyIGI9YS51dGlscy5tYXgodGhpcy5KLmJhLHRoaXMuRy5EYSk7aWYodGhpcy5jdXJyZW50VGltZS1iPj10aGlzLm1heEluYWN0aXZlVGltZSl7aWYoYS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiZlLkZhJiYhYS51dGlscy5pc0RlZmluZWQoYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKSl7YS5sb2coIk0xODUiKTtlLk5hPWUuTmF8fHRoaXMuUWE/dGhpcy5jdXJyZW50VGltZTpiO3JldHVybn10aGlzLmN1cnJlbnRUaW1lPWUuTmF8fHRoaXMuY3VycmVudFRpbWU7YS5sb2coIk0xODYiKTt0aGlzLm5hdkNvbXBsZXRlKHRoaXMuUWE/dGhpcy5jdXJyZW50VGltZTpiKTt0aGlzLnJlc2V0KCl9YS5RKCl9LmJpbmQodGhpcyksdGhpcy5zZyl9O2UucHJvdG90eXBlLldnPWZ1bmN0aW9uKCl7dGhpcy5RYXx8KHRoaXMuQW0oKSx0aGlzLlFhPSEwKX07ZS5wcm90b3R5cGUuUGU9ZnVuY3Rpb24oKXthLnV0aWxzLmlzRGVmaW5lZCh0aGlzLnlnKSYmY2xlYXJJbnRlcnZhbCh0aGlzLnlnKTsKYS51dGlscy5pc0RlZmluZWQodGhpcy5iaCkmJmNsZWFySW50ZXJ2YWwodGhpcy5iaCl9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5QZSgpO3RoaXMuQj10aGlzLlFhPSExO3RoaXMuSi5yZXNldCgpO3RoaXMuRy5yZXNldCgpfTtlLnByb3RvdHlwZS5uYXZDb21wbGV0ZT1mdW5jdGlvbihiKXthLlAoKTt2YXIgaD1hLnV0aWxzLmlzRGVmaW5lZChhLm1vbml0b3IuQW55U3BhTW9uaXRvci52cCYmYS5tb25pdG9yLkFueVNwYU1vbml0b3IudnAuc3RhcnRUaW1lKT9hLm1vbml0b3IuQW55U3BhTW9uaXRvci52cC5zdGFydFRpbWU6dGhpcy5zdGFydFRpbWU7YS5sb2coIk0xODciLGItaCk7YS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzP2UuRmE/KGEubW9uaXRvci5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZiYmKGEubW9uaXRvci5uYXZNb25pdG9yLlhlKCksYS5tb25pdG9yLnJlc291cmNlTW9uaXRvci5XZSgpKSxhLmxvZygiTTE4OCIpLGI9YS5OLlVlKGEudXRpbHMuaGIoKSksCmEubW9uaXRvci5ET01FdmVudHNNb25pdG9yLmN1cnJlbnRCYXNlUGFnZS52Y3Q9Yi52Y3QsYS5jb25mLnNwYTImJihhLm1vbml0b3IuRE9NRXZlbnRzTW9uaXRvci5jdXJyZW50QmFzZVBhZ2UucGN0PWIucGN0KSxhLmNvbW1hbmQoInJlcG9ydE9ubG9hZCIsYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKSxhLk4ucmVzZXQoKSxhLk4uemE9ITEsZS5GYT0hMSk6YS5tb25pdG9yLkFueVNwYU1vbml0b3Iua2QoaCxiKTooYS5tb25pdG9yLnJlc291cmNlTW9uaXRvci5iYXNlUGFnZVJlc291cmNlQnVmZmVyPVtdLGEubW9uaXRvci5BbnlTcGFNb25pdG9yLmtkKGgsYikpO2EubW9uaXRvci5BbnlTcGFNb25pdG9yLkJhfHwoYS5tb25pdG9yLkFueVNwYU1vbml0b3IuWmYoaCksYS5tb25pdG9yLkFueVNwYU1vbml0b3IucmVwb3J0KCkpO2EuUSgpO2EuaXNEZWJ1ZyYmeC5sb2coImV4ZWNUaW1lID0gIithLlNjKX07ZS5wcm90b3R5cGUuQW09ZnVuY3Rpb24oKXt0aGlzLnlnPQphLnV0aWxzLnJlZnMuc2V0SW50ZXJ2YWwuY2FsbCh3aW5kb3csZnVuY3Rpb24oKXthLlAoKTt0aGlzLmN1cnJlbnRUaW1lPWEudXRpbHMubm93KCk7dmFyIGI9dGhpcy5KLmJkKHRoaXMuY3VycmVudFRpbWUpOzA8PWImJmEubG9nKCJNMTg5IixiLXRoaXMuc3RhcnRUaW1lKTtiPXRoaXMuRy5iZCh0aGlzLmN1cnJlbnRUaW1lKTswPD1iJiZhLmxvZygiTTE5MCIsYi10aGlzLnN0YXJ0VGltZSk7aWYoIXRoaXMuRy5CJiYhdGhpcy5KLkIpe2I9YS51dGlscy5tYXgodGhpcy5HLkRhLHRoaXMuSi5iYSk7aWYoYS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiZlLkZhJiYhYS51dGlscy5pc0RlZmluZWQoYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKSl7YS5sb2coIk0xOTEiKTtlLk5hPWUuTmF8fGI7cmV0dXJufWI9ZS5OYXx8YjthLmxvZygiTTE5MiIpO3RoaXMubmF2Q29tcGxldGUoYik7dGhpcy5yZXNldCgpfWEuUSgpfS5iaW5kKHRoaXMpLHRoaXMuc2cpfTsKcmV0dXJuIGV9KCk7bC5GYT0hMDtsLk5hPTA7Yi5FYj1sO2Iubj1uZXcgYi5FYn0pKGEuanx8KGEuaj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dGhpcy5uYz1bXTt0aGlzLmVjKGIuQ2MsMCl9Yi5wcm90b3R5cGUuRGw9ZnVuY3Rpb24oYSl7dGhpcy5lYyhiLkNlLGEpfTtiLnByb3RvdHlwZS5GbD1mdW5jdGlvbihhKXt0aGlzLmVjKGIuS2UsYSl9O2IucHJvdG90eXBlLkVsPWZ1bmN0aW9uKGEpe3RoaXMuZWMoYi5FZSxhKX07Yi5wcm90b3R5cGUuZWM9ZnVuY3Rpb24oYSxiKXt0aGlzLm5jLnB1c2goe0NsOihuZXcgRGF0ZSkuZ2V0VGltZSgpLEJsOmIscGc6YX0pO3RoaXMueGo9YX07Yi5wcm90b3R5cGUuZ2V0UGhhc2VOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueGp9O2IucHJvdG90eXBlLmdldFBoYXNlSUQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTA7YzxiLkhlLmxlbmd0aDtjKyspaWYoYi5IZVtjXT09PWEpcmV0dXJuIGM7CnJldHVybiBudWxsfTtiLnByb3RvdHlwZS5nZXRQaGFzZUNhbGxiYWNrVGltZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5uYyxoPTA7aDxiLmxlbmd0aDtoKyspaWYoYltoXS5wZz09PWEpcmV0dXJuIGJbaF0uQ2w7cmV0dXJuIG51bGx9O2IucHJvdG90eXBlLmZpbmRQaGFzZUF0Tm9taW5hbFRpbWU9ZnVuY3Rpb24oZSl7YS5hc3NlcnQoMDw9ZSk7Zm9yKHZhciBjPXRoaXMubmMsaD1jLmxlbmd0aC0xOzA8PWg7aC0tKWlmKGU+PWNbaF0uQmwpcmV0dXJuIGNbaF0ucGc7YS5lcnJvcigiTTE5MyIsZSxhLnV0aWxzLmR1bXBPYmplY3QoYykpO3JldHVybiBiLkNjfTtyZXR1cm4gYn0oKTtiLkNjPSJBRlRFUl9GSVJTVF9CWVRFIjtiLkNlPSJBRlRFUl9ET01fSU5URVJBQ1RJVkUiO2IuS2U9IkFUX09OTE9BRCI7Yi5FZT0iQUZURVJfT05MT0FEIjtiLkhlPVtiLkNjLGIuQ2UsYi5LZSxiLkVlXTthLlBhZ2VMaWZlY3ljbGVUcmFja2VyPWI7YS5saWZlY3ljbGU9bmV3IGI7YS5saWZlY3ljbGU9CmEubGlmZWN5Y2xlfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoYyl7Yz1iLmNhbGwodGhpcyxjKXx8dGhpcztjLmJhY2tUaW1lR2FwPWEuY29uZi5iYWNrVGltZUdhcDtyZXR1cm4gY312KGMsYik7Yy5wcm90b3R5cGUudHlwZT1mdW5jdGlvbigpe3JldHVybiBhLkV2ZW50VHlwZS5QYWdlVmlld307cmV0dXJuIGN9KGIuRXZlbnRUcmFja2VyKTtiLlBhZ2VWaWV3PWx9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXsoZnVuY3Rpb24oYil7dmFyIGw9YS51dGlscy5ub3csZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoKXt9Yy5wcm90b3R5cGUuc2V0VXA9ZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5yZWFkeVN0YXRlO2lmKCJsb2FkaW5nIj09PWIpYS5sb2coIk0xOTQiKSxjLnVtKCksYy5UZygpO2Vsc2V7dmFyIGY9e3RpbWVTdGFtcDpsKCl9O2MuWWEoZik7ImludGVyYWN0aXZlIj09PQpiPyhhLmxvZygiTTE5NSIpLGMuVGcoKSk6KGEubG9nKCJNMTk2IiksYy5zYihmKSxjLmtnKGYpKX19O2MuVGc9ZnVuY3Rpb24oKXthLnV0aWxzLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCJsb2FkIixjLnNiKTthLnV0aWxzLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCJsb2FkIixjLmtnKX07Yy5rZz1mdW5jdGlvbihoKXtjLmN1cnJlbnRCYXNlUGFnZT1uZXcgYS5ldmVudHMuUGFnZVZpZXc7YS5saWZlY3ljbGUuRmwoaCYmaC50aW1lU3RhbXApO2EudXRpbHMuZ2MoZnVuY3Rpb24oKXt2YXIgZj1sKCk7YS5saWZlY3ljbGUuRWwoZik7YS5jb21tYW5kKCJtYXJrIiwib25sb2FkIixmKTtjLlpiPSEwO2EuY29uZi5lbmFibGVQcmltYXJ5TWV0cmljcz9hLk4uRGooKTooYi5QZXJmb3JtYW5jZVdyYXBwZXIucGVyZiYmKGIubmF2TW9uaXRvci5YZSgpLGIucmVzb3VyY2VNb25pdG9yLldlKCkpLGEuY29tbWFuZCgicmVwb3J0T25sb2FkIixjLmN1cnJlbnRCYXNlUGFnZSkpOyFhLmNvbmYuZW5hYmxlUHJpbWFyeU1ldHJpY3MmJgphLmNvbmYuc3BhMiYmYS5jb25mLm1vZGVybkJyb3dzZXJGZWF0dXJlc0F2YWlsYWJsZSYmYS5qLm4uSi5TZygpO2EudXRpbHMubG9hZFNjcmlwdEFzeW5jKGEuY29uZi5hZHJ1bUV4dFVybCl9KTthLmxvZygiTTE5NyIpfTtjLnVtPWZ1bmN0aW9uKCl7aWYoYS51dGlscy5pc0Z1bmN0aW9uKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGMuWWEsITEpO2Vsc2UgaWYoYS51dGlscy5pc09iamVjdChkb2N1bWVudC5hdHRhY2hFdmVudCkpe2RvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGMuWWEpO3ZhciBiPW51bGw7dHJ5e2I9bnVsbD09PXdpbmRvdy5mcmFtZUVsZW1lbnQ/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Om51bGx9Y2F0Y2goZil7fW51bGwhPWImJmIuZG9TY3JvbGwmJmZ1bmN0aW9uIG0oKXtpZighYy5pc1JlYWR5KXt0cnl7Yi5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGYpe2EudXRpbHMub1NUTyhtLAoxMCk7cmV0dXJufWMuc2IoKX19KCl9ZWxzZSBhLmV4Y2VwdGlvbigiTTE5OCIpO2EubG9nKCJNMTk5Iil9O2Muc2I9ZnVuY3Rpb24oYil7Yy5jZ3x8KGEubGlmZWN5Y2xlLkRsKGImJmIudGltZVN0YW1wKSxhLmNvbW1hbmQoIm1hcmsiLCJvbnJlYWR5IixsKCkpLGMuY2c9ITApfTtjLllhPWZ1bmN0aW9uKGEpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXI/KGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGMuWWEsITEpLGMuc2IoYSkpOiJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlJiYoZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsYy5ZYSksYy5zYihhKSl9O3JldHVybiBjfSgpO2UuaXNSZWFkeT0hMTtlLmNnPSExO2UuWmI9ITE7Yi5ET01FdmVudHNNb25pdG9yPWU7Yi5kb21FdmVudHNNb25pdG9yPW5ldyBiLkRPTUV2ZW50c01vbml0b3J9KShhLm1vbml0b3J8fChhLm1vbml0b3I9e30pKX0pKGt8fChrPQp7fSkpOyhmdW5jdGlvbihhKXt2YXIgYj1hLnV0aWxzLmlzRGVmaW5lZCxsPWEudXRpbHMuaXNOdW1iZXIsZT1hLm1vbml0b3IuZWU7YS5uaD13aW5kb3cuUHJvbWlzZTthLkpiPW51bGw7YS54bz1udWxsO2EudGU9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBjPWEuY29uZi5zcGEyJiZhLmNvbmYubW9kZXJuQnJvd3NlckZlYXR1cmVzQXZhaWxhYmxlLGg9YS5jb25mLmlzWm9uZVByb21pc2UsZj1hLmNvbmYuZmV0Y2gsbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoKXt9Zi5Qaz1mdW5jdGlvbigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eT1hLmFvcC5hcm91bmQoYS50ZSxmdW5jdGlvbihhLGMsaCl7IlByb21pc2UiPT09YyYmYihoKSYmZi5IZihoKX0pO2lmKGgmJmYuSmYoKSl7YS5sb2coIk0yMDAiKTt2YXIgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywiUHJvbWlzZSIpO2YuSGYoYyk7YS50ZSh3aW5kb3csIlByb21pc2UiLGMpO3dpbmRvdy5Qcm9taXNlPXdpbmRvdy5Qcm9taXNlfX07CmYuSmY9ZnVuY3Rpb24oKXtyZXR1cm4gYih3aW5kb3cuX196b25lX3N5bWJvbF9fUHJvbWlzZSl8fGIod2luZG93Ll9fem9uZV9zeW1ib2xfX1pvbmVBd2FyZVByb21pc2UpfTtmLkhmPWZ1bmN0aW9uKGMpe2Iod2luZG93LlpvbmUpJiZiKHdpbmRvdy5ab25lLmFzc2VydFpvbmVQYXRjaGVkKSYmKHdpbmRvdy5ab25lLmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7fSk7Yz1jfHxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywiUHJvbWlzZSIpO3ZhciBoPWMuc2V0LG49Yy5nZXQ7ZyhoKSYmKGMuc2V0PWZ1bmN0aW9uKGMpeyEwPT09Yy5hZ2VudFByb21pc2U/YS5sb2coIk0yMDEiKTooaC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYihhLkpiKT9oLmFwcGx5KHRoaXMsYXJndW1lbnRzKTooYS5sb2coIk0yMDIiKSxmLnNldFVwKCksKG5ldyBlKS5OaygpKSl9KTtnKG4pJiYoYy5nZXQ9ZnVuY3Rpb24oKXt2YXIgYz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtiKGEuSmIpJiYKKGEubG9nKCJNMjAzIiksYz1hLkpiKTtyZXR1cm4gY30pfTtmLnNldFVwPWZ1bmN0aW9uKCl7aWYoYihhLm5oKSl7Zi5TaygpO2YuUmsoKTt2YXIgaD1mdW5jdGlvbihoKXtmdW5jdGlvbiBlKG4pe3ZhciBsPXRoaXMuY29uc3RydWN0b3IscT1uO3RoaXMuWj1hLnV0aWxzLmdlbmVyYXRlR1VJRCgpO2IobikmJihxPWYuUWsobix0aGlzKSk7bj1hLnV0aWxzLlFpKHRoaXMsaCxbcV0sbCk7YyYmKGIodGhpcy5oKSYmKG4uaD10aGlzLmgpLGIodGhpcy5HYSk/bi5oPXRoaXMuR2EuaDpuLmg9YS5jLmlhKCkpO24uWj10aGlzLlo7dGhpcy5HYT1uO2EubG9nKCJNMjA0IixuLlopO2MmJmIobi5oKSYmYS5sb2coIk0yMDUiLG4uaC5ndWlkKTtyZXR1cm4gbn1hLnV0aWxzLkFjKGUsaCk7cmV0dXJuIGV9KHdpbmRvdy5Qcm9taXNlKTtoLmFnZW50UHJvbWlzZT0hMDthLkpiPWg7d2luZG93LlByb21pc2U9aH19O2YueWE9ZnVuY3Rpb24oaCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihjKXt2YXIgZSwKbD1lPXZvaWQgMDthLmxvZygiTTIwNiIsaCk7c3dpdGNoKGgpe2Nhc2UgZi5ILmxlOmNhc2UgZi5ILmtlOmNhc2UgZi5ILlpkOmNhc2UgZi5ILllkOmEudXRpbHMuaXNEZWZpbmVkKG4pJiZhLnV0aWxzLmlzRGVmaW5lZChuLkdhKSYmKGU9bi5HYS5oKTtlPWEuYy5pYSgpfHxlO2w9bmV3IGEuRGIoZSxuZXcgYS5LYShoKSxhLkNhdXNlVHlwZS5QUk9NSVNFKTticmVhaztjYXNlIGYuSC5pZTpjYXNlIGYuSC5qZTpjYXNlIGYuSC5oZTplPW4uaCxsPW5ldyBhLkRiKGUsbmV3IGEuS2EoaCksYS5DYXVzZVR5cGUuUFJPTUlTRSksYS5jLnFhKGwpfWIobikmJihiKG4uR2EpPyhuLkdhLmg9bCxhLmxvZygiTTIwNyIsbi5HYS5aKSk6KGEubG9nKCJNMjA4IixuLlopLG4uaD1sKSl9fX07Zi5Raz1mdW5jdGlvbihoLG4pe2MmJihoPWEuYW9wLmFyb3VuZChoLGZ1bmN0aW9uKCl7bi5oPW5ldyBhLkRiKGEuYy5pYSgpLG5ldyBhLkthKGYuSC5XaCksYS5DYXVzZVR5cGUuUFJPTUlTRSk7YS5jLnFhKG4uaCk7CmEubG9nKCJNMjA5IixuLmguZ3VpZCxuLlopO2lmKGIoYXJndW1lbnRzWzBdKSl7YS5sb2coIk0yMTAiKTt2YXIgYz1hLmFvcC5hcm91bmQoYXJndW1lbnRzWzBdLGYueWEoZi5ILmxlLG4pKTthcmd1bWVudHNbMF09Y31iKGFyZ3VtZW50c1sxXSkmJihhLmxvZygiTTIxMSIpLGM9YS5hb3AuYXJvdW5kKGFyZ3VtZW50c1sxXSxmLnlhKGYuSC5rZSxuKSksYXJndW1lbnRzWzFdPWMpO3JldHVybiBhLnV0aWxzLndhKGFyZ3VtZW50cyl9LGZ1bmN0aW9uKCl7YS5sb2coIk0yMTIiKTthLmMuTCgpfSwiaW50ZXJjZXB0UHJvbWlzZUV4ZWN1dG9yIixmLnJiKSk7cmV0dXJuIGh9O2YuUms9ZnVuY3Rpb24oKXthLnV0aWxzLnJlZnMucHJvbWlzZVRoZW49d2luZG93LlByb21pc2UucHJvdG90eXBlLnRoZW47dmFyIGI9Zi53ZygpLGM9e3BhcmVudE9iamVjdDp3aW5kb3cuUHJvbWlzZS5wcm90b3R5cGUscHJvcGVydHk6InRoZW4iLHByb3BlcnR5V3JhcHBlZEZ1bmN0aW9uTmFtZToicHJvbWlzZVRoZW4iLAp3cmFwTmV3RnVuY3Rpb25BZ2FpbjohMH07Yy5zZXRVcEZ1bmM9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2YuSmYoKXx8Zi5hbShiLGEpfX0uY2FsbCh0aGlzLGMpO2MuTGE9YjthLmFvcC5mb3JjZVdyYXAoYyk7YS51dGlscy5yZWZzLnByb21pc2VGaW5hbGx5PXdpbmRvdy5Qcm9taXNlLnByb3RvdHlwZVsiZmluYWxseSJdO2I9Zi52ZygpO2M9e3BhcmVudE9iamVjdDp3aW5kb3cuUHJvbWlzZS5wcm90b3R5cGUscHJvcGVydHk6ImZpbmFsbHkiLHByb3BlcnR5V3JhcHBlZEZ1bmN0aW9uTmFtZToicHJvbWlzZUZpbmFsbHkiLHdyYXBOZXdGdW5jdGlvbkFnYWluOiEwfTtjLnNldFVwRnVuYz1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7Zi4kbChiLGEpfX0uY2FsbCh0aGlzLGMpO2MuTGE9YjthLmFvcC5mb3JjZVdyYXAoYyl9O2YuYW09ZnVuY3Rpb24oYSxiKXtiLkxhPWYud2coYSl9O2YuJGw9ZnVuY3Rpb24oYSxiKXtiLkxhPWYudmcoYSl9O2YuU2s9ZnVuY3Rpb24oKXtmLllsKCk7CmYuWGwoKX07Zi5nbD1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIGZ8fGIgaW5zdGFuY2VvZiBhLm5ofTtmLkdrPWZ1bmN0aW9uKGMpe3ZhciBmO2IoZil8fChhLmxvZygiTTIxMyIpLGY9MSk7YihjLkQpJiZsKGMuRCkmJihjLkQrPWYsYS5sb2coIk0yMTQiLGMuRCkpfTtmLkFqPWZ1bmN0aW9uKGEpe3ZhciBjO2IoYyl8fChjPTEpO2IoYS5EKSYmbChhLkQpJiYoYS5ELT1jKX07Zi5Jaz1mdW5jdGlvbihjKXtiKGMuRCkmJmEudXRpbHMuY2woYy5EKT8oYS5sb2coIk0yMTUiKSxmLkdrKGMpKTpjLkQ9MX07Zi5UbT1mdW5jdGlvbihiKXtlLlhtKGIpfHwoYS5sb2coIk0yMTYiKSxmLklrKGIpKX07Zi5mbT1mdW5jdGlvbihhKXthLkQ9MH07Zi5PZj1mdW5jdGlvbihhKXtyZXR1cm4gYihhLkkpfTtmLmZkPWZ1bmN0aW9uKGEpe3JldHVybiBiKGEpJiZhIGluc3RhbmNlb2Ygd2luZG93LlByb21pc2V9O2Yud2c9ZnVuY3Rpb24oaCl7dmFyIG49bnVsbDtoPWh8fHdpbmRvdy5Qcm9taXNlLnByb3RvdHlwZS50aGVuOwpoPWEuYW9wLmFyb3VuZChoLGZ1bmN0aW9uKCl7dmFyIGg9dGhpcztuPWg7YS5sb2coIk0yMTciLGguWik7aWYoYihhcmd1bWVudHNbMF0pJiYhZi5mZChhcmd1bWVudHNbMF0pKXtmLlRtKGgpO2EubG9nKCJNMjE4IixoLlopO3ZhciBsPWEuYW9wLmFyb3VuZChhcmd1bWVudHNbMF0sZi55YShmLkguaWUsaCksZnVuY3Rpb24oKXt2YXIgbj1hLmFvcC51Zihhcmd1bWVudHMpO2IobikmJmIobi5EKSYmZi5nbChuKSYmZS5hYShoKT8oZS5VbShuLGgpLGYuZm0obikpOihlLmFhKGgpJiYhZi5PZihoKSYmZS5SYihoKSYmKGUuUGQoaCksZS5NYihoKSwhMD09PWUuUWQoaCkmJihhLmxvZygiTTIxOSIpLGEubG9nKCJNMjIwIiksZS5UYShoKSkpLGMmJihhLmxvZygiTTIyMSIpLGEuYy5MKCkpKX0sImludGVyY2VwdFByb21pc2VUaGVuRnVsZmlsIixmdW5jdGlvbihiKXtlLmFhKGgpJiZlLlJiKGgpJiYoZS5QZChoKSYmZS5NYihoKSwhMD09PWUuUWQoaCkmJihhLmxvZygiTTIyMiIpLGEubG9nKCJNMjIzIiksCmUuVGEoaCkpKTtmLnJiKGIpfSk7YXJndW1lbnRzWzBdPWx9Yihhcmd1bWVudHNbMV0pJiYhZi5mZChhcmd1bWVudHNbMV0pJiYoYS5sb2coIk0yMjQiLGguWiksbD1hLmFvcC5hcm91bmQoYXJndW1lbnRzWzFdLGYueWEoZi5ILmplLGgpLGZ1bmN0aW9uKCl7YyYmKGEubG9nKCJNMjI1IiksYS5jLkwoKSl9KSxhcmd1bWVudHNbMV09bCk7cmV0dXJuIGEudXRpbHMud2EoYXJndW1lbnRzKX0sZnVuY3Rpb24oKXt2YXIgaD1hLmFvcC51Zihhcmd1bWVudHMpOyFiKGgpfHxiKGFyZ3VtZW50c1swXSkmJmYuZmQoYXJndW1lbnRzWzBdKXx8KGMmJihoLmg9dGhpcy5oKSxmLk9mKHRoaXMpJiZlLmFhKHRoaXMpJiYoaC5fYWRydW1BamF4VD10aGlzLl9hZHJ1bUFqYXhULGUuUmIodGhpcyl8fGUuSmsoaCkpKX0sImludGVyY2VwdFByb21pc2VUaGVuSW50ZXJjZXB0b3IiLGZ1bmN0aW9uKGIpe3ZhciBjPW47ZS5hYShjKSYmZS5SYihjKSYmKGUuUGQoYykmJmUuTWIoYyksITA9PT1lLlFkKGMpJiYKKGEubG9nKCJNMjI2IiksYS5sb2coIk0yMjciKSxlLlRhKGMpKSk7Zi5yYihiKX0pO2gudXNlZEJ5QWdlbnQ9ITA7cmV0dXJuIHdpbmRvdy5Qcm9taXNlLnByb3RvdHlwZS50aGVuPWh9O2Yudmc9ZnVuY3Rpb24oaCl7aWYoYih3aW5kb3cuUHJvbWlzZS5wcm90b3R5cGVbImZpbmFsbHkiXSkpcmV0dXJuIGg9aHx8d2luZG93LlByb21pc2UucHJvdG90eXBlWyJmaW5hbGx5Il0saD1hLmFvcC5hcm91bmQoaCxmdW5jdGlvbigpe2IodGhpcy5fYWRydW1BamF4VCkmJmIodGhpcy5fYWRydW1BamF4VC53KT9lLk1iKHRoaXMpOmIodGhpcy5EKSYmZi5Baih0aGlzKTtpZihiKGFyZ3VtZW50c1swXSkpe2EubG9nKCJNMjI4Iix0aGlzLlopO3ZhciBoPWEuYW9wLmFyb3VuZChhcmd1bWVudHNbMF0sZi55YShmLkguaGUsdGhpcyksZnVuY3Rpb24oKXtjJiYoYS5sb2coIk0yMjkiKSxhLmMuTCgpKX0pO2FyZ3VtZW50c1swXT1oO3JldHVybiBhLnV0aWxzLndhKGFyZ3VtZW50cyl9fSxmdW5jdGlvbigpe2EubG9nKCJNMjMwIik7CmEuYy5MKCl9LCJpbnRlcmNlcHRQcm9taXNlRmluYWxseSIpLGgudXNlZEJ5QWdlbnQ9ITAsd2luZG93LlByb21pc2UucHJvdG90eXBlWyJmaW5hbGx5Il09aH07Zi5ZbD1mdW5jdGlvbigpe3dpbmRvdy5Qcm9taXNlLnJlc29sdmU9YS5hb3AuYXJvdW5kKHdpbmRvdy5Qcm9taXNlLnJlc29sdmUsZi55YShmLkguWmQsbnVsbCksZnVuY3Rpb24oKXthLmxvZygiTTIzMSIpO2EuYy5MKCl9LCJpbnRlcmNlcHRQcm9taXNlUmVzb2x2ZSIsZi5yYil9O2YuWGw9ZnVuY3Rpb24oKXt3aW5kb3cuUHJvbWlzZS5yZWplY3Q9YS5hb3AuYXJvdW5kKHdpbmRvdy5Qcm9taXNlLnJlamVjdCxmLnlhKGYuSC5ZZCxudWxsKSxmdW5jdGlvbigpe2EubG9nKCJNMjMyIik7YS5jLkwoKX0sImludGVyY2VwdFByb21pc2VSZWplY3QiLGYucmIpfTtyZXR1cm4gZn0oKTtuLkg9e1doOiJQcm9taXNlSW5zdGFuY2UuaW5pdCIsbGU6IlByb21pc2VJbnN0YW5jZS5yZXNvbHZlIixrZToiUHJvbWlzZUluc3RhbmNlLnJlamVjdCIsCmllOiJQcm9taXNlSW5zdGFuY2Uub25GdWxmaWxsZWQiLGplOiJQcm9taXNlSW5zdGFuY2Uub25SZWplY3RlZCIsaGU6IlByb21pc2VJbnN0YW5jZS5maW5hbGx5IixaZDoiUHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUiLFlkOiJQcm9taXNlQ29uc3RydWN0b3IucmVqZWN0In07bi5yYj1hLm1vbml0b3IuRXJyb3JNb25pdG9yLmw7YS5EaT1uO2gmJmYmJm4uUGsoKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXtmdW5jdGlvbiBsKGEsYil7dmFyIGM9W10sZT0vXlxzKihBRFJVTV9CVFx3Kik9KC4qKVxzKiQvaS5leGVjKGEpO2lmKGUpe3ZhciBsPWVbMV0sZT1lWzJdLnJlcGxhY2UoL14ifCIkL2csIiIpLGU9ZGVjb2RlVVJJQ29tcG9uZW50KGUpLnNwbGl0KCJ8Iiksaz1lWzBdLnNwbGl0KCI6Iik7aWYoIlIiPT09a1swXSYmTnVtYmVyKGtbMV0pPT09Yilmb3IoaChsKSxsPTE7bDxlLmxlbmd0aDtsKyspYy5wdXNoKGVbbF0pfXJldHVybiBjfWZ1bmN0aW9uIGUoYSwKYil7dmFyIGM9L15ccyooQURSVU1fKFxkKylfKFxkKylfKFxkKykpPSguKilccyokL2kuZXhlYyhhKTtpZihjKXt2YXIgZT1jWzFdLGw9Y1s0XSxrPWNbNV07aWYoTnVtYmVyKGNbM10pPT09YilyZXR1cm4gaChlKSx7aW5kZXg6TnVtYmVyKGwpLHZhbHVlOmt9fXJldHVybiBudWxsfWZ1bmN0aW9uIGMoYil7dmFyIGM9L15ccypBRFJVTT1zPShbXGRdKykmcj0oLiopXHMqLy5leGVjKGIpO2lmKGMpe2EubG9nKCJNMjM1IixiKTtpZigzPT09Yy5sZW5ndGgpcmV0dXJuIGgoIkFEUlVNIikse3N0YXJ0VGltZTpOdW1iZXIoY1sxXSksc3RhcnRQYWdlOmNbMl19O2EuZXJyb3IoIk0yMzYiLGIpO3JldHVybiBudWxsfX1mdW5jdGlvbiBoKGIpe2EubG9nKCJNMjM0IixiKTt2YXIgYz1uZXcgRGF0ZTtjLnNldFRpbWUoYy5nZXRUaW1lKCktMUUzKTtkb2N1bWVudC5jb29raWU9YisiPTtFeHBpcmVzPSIrYy50b1VUQ1N0cmluZygpfWIuc3RhcnRUaW1lQ29va2llPW51bGw7Yi5jb29raWVNZXRhZGF0YUNodW5rcz0KbnVsbDtiLmNmPWZ1bmN0aW9uKGYsaCl7YS5sb2coIk0yMzMiKTtmb3IodmFyIG09aD9oLmxlbmd0aDowLGs9W10sdD1mLnNwbGl0KCI7IikscD0wO3A8dC5sZW5ndGg7cCsrKXt2YXIgcj10W3BdLHM9ZShyLG0pO3M/ay5wdXNoKHMpOihyPWMociksbnVsbCE9ciYmKGIuc3RhcnRUaW1lQ29va2llPXIpKX1BcnJheS5wcm90b3R5cGUuc29ydC5jYWxsKGssZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5pbmRleC1iLmluZGV4fSk7cj1bXTtmb3IocD0wO3A8ay5sZW5ndGg7cCsrKXIucHVzaChrW3BdLnZhbHVlKTtmb3IocD0wO3A8dC5sZW5ndGg7cCsrKShrPWwodFtwXSxtKSkmJjA8ay5sZW5ndGgmJihyPXIuY29uY2F0KGspKTtiLmNvb2tpZU1ldGFkYXRhQ2h1bmtzPXJ9O2EuY29ycmVsYXRpb24uZWNrPWIuY2Z9KShhLmNvcnJlbGF0aW9ufHwoYS5jb3JyZWxhdGlvbj17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7IkFQUF9LRVlfTk9UX1NFVCIhPT1hLmNvbmYuYXBwS2V5fHxhLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuQURFVU1fanNfaGFuZGxlcil8fAphLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cud2Via2l0KXx8eC5sb2coIkFwcER5bmFtaWNzIEVVTSBjbG91ZCBhcHBsaWNhdGlvbiBrZXkgbWlzc2luZy4gUGxlYXNlIHNwZWNpZnkgd2luZG93WydhZHJ1bS1hcHAta2V5J10iKTthLmNvcnJlbGF0aW9uLmNmKGRvY3VtZW50LmNvb2tpZSxkb2N1bWVudC5yZWZlcnJlcik7YS5jb21tYW5kKCJtYXJrIiwiZmlyc3RieXRlIix3aW5kb3dbImFkcnVtLXN0YXJ0LXRpbWUiXSk7YS5tb25pdG9yLnNldFVwTW9uaXRvcnMoYS5tb25pdG9yLmdhLGEubW9uaXRvci50aixhLm1vbml0b3IuZG9tRXZlbnRzTW9uaXRvcixhLm1vbml0b3IubmF2TW9uaXRvcixhLm1vbml0b3IueGhyTW9uaXRvcixhLm1vbml0b3IucmVzb3VyY2VNb25pdG9yKTthLmNvbmYuZmV0Y2gmJiFhLmNvbmYuaXNab25lUHJvbWlzZSYmKGEuRGkuc2V0VXAoKSxhLm1vbml0b3Iuc2V0VXBNb25pdG9ycyhhLm1vbml0b3IuaWIpKTthLmNvbmYuc3BhMiYmYS5jb25mLm1vZGVybkJyb3dzZXJGZWF0dXJlc0F2YWlsYWJsZSYmCmEubW9uaXRvci5zZXRVcE1vbml0b3JzKGEubW9uaXRvci5iaik7YS5jb25mLmVuYWJsZVByaW1hcnlNZXRyaWNzJiZhLnV0aWxzLmlzRGVmaW5lZCh3aW5kb3cuTXV0YXRpb25PYnNlcnZlcikmJihhLmoubi5KLlNnKCksYS5qLm4uc3RhcnQoYS51dGlscy5oYigpKSxhLk4uc3RhcnQoKSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXthPWEubmd8fChhLm5nPXt9KTthPWEua3x8KGEuaz17fSk7YS5YZj0ibG9jYXRpb25DaGFuZ2VTdGFydCI7YS50bD0ibG9jYXRpb25DaGFuZ2VTdWNjZXNzIjthLkpnPSJyb3V0ZUNoYW5nZVN0YXJ0IjthLktnPSJyb3V0ZUNoYW5nZVN1Y2Nlc3MiO2EuWGc9InN0YXRlQ2hhbmdlU3RhcnQiO2EuWWc9InN0YXRlQ2hhbmdlU3VjY2VzcyI7YS5raD0idmlld0NvbnRlbnRMb2FkZWQiO2EuQ2s9ImluY2x1ZGVDb250ZW50UmVxdWVzdGVkIjthLkJrPSJpbmNsdWRlQ29udGVudExvYWRlZCI7YS5hZj0iZGlnZXN0IjthLmlvPSJvdXRzdGFuZGluZ1JlcXVlc3RzQ29tcGxldGUiOwphLk5lPSJiZWZvcmVOZ1hoclJlcXVlc3RlZCI7YS5EZT0iYWZ0ZXJOZ1hoclJlcXVlc3RlZCI7YS5obz0ibmdYaHJMb2FkZWQiO2EuUmU9IiQkY29tcGxldGVPdXRzdGFuZGluZ1JlcXVlc3QifSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGwoYSxjLGUsbSxsLGspe2lmKGMpdHJ5e3JldHVybiBjLmFwcGx5KGEsW2UsbSxsXS5jb25jYXQoaykpfWNhdGNoKHApe3JldHVybiBhLmVycm9yKGUsbSxsLGssYi5FcnJvci5YaCwiTTIzNyIscCl9fWZ1bmN0aW9uIGUoYSxjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnQsbT1jW2VdfHxjW2IuR2JdfHxlLGs9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtpZih0aGlzLnJqKGEpKXJldHVybiB0aGlzLmVycm9yKGEsZSxtLGssYi5FcnJvci5ZaCwiZXZlbnQgIithKyJNMjM4Iit0aGlzLmN1cnJlbnQpO2lmKCExPT09bCh0aGlzLHRoaXNbIm9uYmVmb3JlIithXSwKYSxlLG0saykpcmV0dXJuIGIuRmIuWGQ7bT09PWIuR2ImJihtPWUpO2lmKGU9PT1tKXJldHVybiBsKHRoaXMsdGhpc1sib25hZnRlciIrYV18fHRoaXNbIm9uIithXSxhLGUsbSxrKSxiLkZiLnhpO3ZhciB0PXRoaXM7dGhpcy50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7dC50cmFuc2l0aW9uPW51bGw7dC5jdXJyZW50PW07bCh0LHRbIm9uZW50ZXIiK21dfHx0WyJvbiIrbV0sYSxlLG0sayk7bCh0LHRbIm9uYWZ0ZXIiK2FdfHx0WyJvbiIrYV0sYSxlLG0sayk7cmV0dXJuIGIuRmIuSWl9O2lmKCExPT09bCh0aGlzLHRoaXNbIm9ubGVhdmUiK2VdLGEsZSxtLGspKXJldHVybiB0aGlzLnRyYW5zaXRpb249bnVsbCxiLkZiLlhkO2lmKHRoaXMudHJhbnNpdGlvbilyZXR1cm4gdGhpcy50cmFuc2l0aW9uKCl9fXZhciBjPWEudXRpbHMuaGFzT3duUHJvcGVydHlEZWZpbmVkO2IuVkVSU0lPTj0iMi4zLjUiO2IuRmI9e0lpOjEseGk6MixYZDozLHJuOjR9O2IuRXJyb3I9e1loOjEwMCxzbjoyMDAsClhoOjMwMH07Yi5HYj0iKiI7Yi5jcmVhdGU9ZnVuY3Rpb24oYSxmKXtmdW5jdGlvbiBuKGEpe3ZhciBjPWEuZnJvbSBpbnN0YW5jZW9mIEFycmF5P2EuZnJvbTphLmZyb20/W2EuZnJvbV06W2IuR2JdO3JbYS5uYW1lXT1yW2EubmFtZV18fHt9O2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXNbY1tmXV09c1tjW2ZdXXx8W10sc1tjW2ZdXS5wdXNoKGEubmFtZSksclthLm5hbWVdW2NbZl1dPWEudG98fGNbZl19dmFyIG09InN0cmluZyI9PXR5cGVvZiBhLmluaXRpYWw/e3N0YXRlOmEuaW5pdGlhbH06YS5pbml0aWFsLGw9Znx8YS50YXJnZXR8fHt9LGs9YS5ldmVudHN8fFtdLHA9YS5jYWxsYmFja3N8fHt9LHI9e30scz17fTttJiYobS5ldmVudD1tLmV2ZW50fHwic3RhcnR1cCIsbih7bmFtZTptLmV2ZW50LGZyb206Im5vbmUiLHRvOm0uc3RhdGV9KSk7Zm9yKHZhciB3PTA7dzxrLmxlbmd0aDt3KyspbihrW3ddKTtmb3IodmFyIEEgaW4gciljKHIsQSkmJihsW0FdPWUoQSxyW0FdKSk7CmZvcihBIGluIHApYyhwLEEpJiYobFtBXT1wW0FdKTtsLmN1cnJlbnQ9Im5vbmUiO2wuU249ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT8wPD1hLmluZGV4T2YodGhpcy5jdXJyZW50KTp0aGlzLmN1cnJlbnQ9PT1hfTtsLnFqPWZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLnRyYW5zaXRpb24mJihjKHJbYV0sdGhpcy5jdXJyZW50KXx8YyhyW2FdLGIuR2IpKX07bC5yaj1mdW5jdGlvbihhKXtyZXR1cm4hdGhpcy5xaihhKX07bC5uYz1mdW5jdGlvbigpe3JldHVybiBzW3RoaXMuY3VycmVudF19O2wuZXJyb3I9YS5lcnJvcnx8ZnVuY3Rpb24oYSxiLGMsZixoLG0sZSl7dGhyb3cgZXx8bTt9O2lmKG0mJiFtLmRlZmVyKWxbbS5ldmVudF0oKTtyZXR1cm4gbH19KShhLndlfHwoYS53ZT17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGMoYil7Yj1lLmNhbGwodGhpcyxiKXx8dGhpczthLnV0aWxzLmlzRGVmaW5lZChhLm5nKSYmCmIuY29uc3RydWN0b3IhPWEubmcuTmdWUGFnZVZpZXcmJmIuY29uc3RydWN0b3IhPWMmJmEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLlZQYWdlVmlldyIsW10pO2lmKGEuY29uZi5zcGEyKXJldHVybiBiO2IucGVyZj1uZXcgYS5QZXJmb3JtYW5jZVRyYWNrZXI7Yi5zdGFydCgpO2EubW9uaXRvci54aHJNb25pdG9yLmZjKCk7YS5tb25pdG9yLmliLmZjKCk7YS5tb25pdG9yLmdhLmVtKCk7cmV0dXJuIGJ9dihjLGUpO2MucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5FdmVudFR5cGUuVlBhZ2VWaWV3fTtjLnByb3RvdHlwZS5XYz1mdW5jdGlvbigpe3JldHVybiBiLkV2ZW50VHJhY2tlci5EYyh0aGlzLmd1aWQoKSx0aGlzLnVybCgpLHRoaXMudHlwZSgpKX07Yy5wcm90b3R5cGUuVmc9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5XYygpO2Iuc2V0KCJwYXJlbnQiLGMpO2EubG9nKCJNMjM5IixjLmd1aWQoKSxjLnVybCgpKX07Yy5wcm90b3R5cGUuc3RhcnRDb3JyZWxhdGluZ1hocnM9CmZ1bmN0aW9uKCl7YS5jb25mLnNwYTJ8fChhLmxvZygiTTI0MCIpLHRoaXMuVmcoYS5tb25pdG9yLnhock1vbml0b3IpKX07Yy5wcm90b3R5cGUuc3RvcENvcnJlbGF0aW5nWGhycz1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwoYS5tb25pdG9yLnhock1vbml0b3Iuc2V0KCJwYXJlbnQiLG51bGwpLGEubG9nKCJNMjQxIikpfTtjLnByb3RvdHlwZS5GZD1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwoYS5sb2coIk0yNDIiKSx0aGlzLlZnKGEubW9uaXRvci5nYSkpfTtjLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwodGhpcy5tYXJrVmlydHVhbFBhZ2VTdGFydCgpLHRoaXMuc3RhcnRDb3JyZWxhdGluZ1hocnMoKSl9O2MucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2EuY29uZi5zcGEyfHwodGhpcy5tYXJrVmlydHVhbFBhZ2VFbmQoKSx0aGlzLnN0b3BDb3JyZWxhdGluZ1hocnMoKSl9O3JldHVybiBjfShiLkV2ZW50VHJhY2tlcik7Yi5WUGFnZVZpZXc9bDtiLk1hKGIuVFthLkV2ZW50VHlwZS5WUGFnZVZpZXddLApsLnByb3RvdHlwZSk7Yi5JZShiLm1ldHJpY1NwZWNbYS5FdmVudFR5cGUuVlBhZ2VWaWV3XSxsLnByb3RvdHlwZSl9KShhLmV2ZW50c3x8KGEuZXZlbnRzPXt9KSl9KShrfHwoaz17fSkpOyhmdW5jdGlvbihhKXt2YXIgYj1hLm5nfHwoYS5uZz17fSksYj1iLmNvbmZ8fChiLmNvbmY9e30pO2IuZGlzYWJsZWQ9YS5jb25mLnVzZXJDb25mJiZhLmNvbmYudXNlckNvbmYuc3BhJiZhLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXImJmEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhci5kaXNhYmxlO2IuZGlzdGluZ3Vpc2hWUHdpdGhJdHNUZW1wbGF0ZVVybD1hLmNvbmYudXNlckNvbmYmJmEuY29uZi51c2VyQ29uZi5zcGEmJmEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhciYmITA9PT1hLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXIuZGlzdGluZ3Vpc2hWUHdpdGhJdHNUZW1wbGF0ZVVybD8hMDohMTtiLnhocj17fTtiLm1ldHJpY3M9e2luY2x1ZGVSZXNUaW1pbmdJbkVuZFVzZXJSZXNwb25zZVRpbWluZzohMH07CmEuY29uZi51c2VyQ29uZiYmYS5jb25mLnVzZXJDb25mLnNwYSYmYS5jb25mLnVzZXJDb25mLnNwYS5hbmd1bGFyJiZhLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXIudnAmJihhLmNvbmYudXNlckNvbmYuc3BhLmFuZ3VsYXIudnAueGhyJiZhLnV0aWxzLnVhLnRnKGEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhci52cC54aHIpLGEuY29uZi51c2VyQ29uZi5zcGEuYW5ndWxhci52cC5tZXRyaWNzJiZhLnV0aWxzLm1lcmdlSlNPTihiLm1ldHJpY3MsYS5jb25mLnVzZXJDb25mLnNwYS5hbmd1bGFyLnZwLm1ldHJpY3MpKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1hLnV0aWxzLm1hcCxlPWEudXRpbHMucmVkdWNlLGM9YS51dGlscy5maWx0ZXIsaD1mdW5jdGlvbihmKXtmdW5jdGlvbiBoKGIpe2I9Zi5jYWxsKHRoaXMsYil8fHRoaXM7Yi5OZj0hMDtiLnViPXt9O2IuVmE9MDtiLkNvPVtdO2IuZGlnZXN0Q291bnQoMCk7aWYoYi5jb25zdHJ1Y3RvciE9CmgpcmV0dXJuIGEucmVwb3J0QVBJTWVzc2FnZShhLlYubGEsYS5XYSwiQURSVU0uZXZlbnRzLkFqYXgiLFtdKSxiO2Iuc3RvcENvcnJlbGF0aW5nWGhycygpO3JldHVybiBifXYoaCxmKTtoLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuRXZlbnRUeXBlLlZQYWdlVmlld307aC5wcm90b3R5cGUuVGQ9ZnVuY3Rpb24oKXt0aGlzLm1hcmtWaWV3Q2hhbmdlU3RhcnQoKTt0aGlzLm1hcmtWaXJ0dWFsUGFnZVN0YXJ0KHRoaXMuZ2V0Vmlld0NoYW5nZVN0YXJ0KCkpO3RoaXMudGltZXN0YW1wKHRoaXMuZ2V0Vmlld0NoYW5nZVN0YXJ0KCkpfTtoLnByb3RvdHlwZS5Eaz1mdW5jdGlvbigpe3RoaXMuZGlnZXN0Q291bnQodGhpcy5kaWdlc3RDb3VudCgpKzEpfTtoLnByb3RvdHlwZS5Faz1mdW5jdGlvbigpe3RoaXMuVmErKzthLmxvZygiTTI0MyIsdGhpcy5WYSl9O2gucHJvdG90eXBlLnpqPWZ1bmN0aW9uKCl7dGhpcy5WYS0tO2EubG9nKCJNMjQ0Iix0aGlzLlZhKX07aC5wcm90b3R5cGUueWs9CmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wZXJmLmdldEVudHJ5QnlOYW1lKGEuZXZlbnRzLmIuc2gpO2EubG9nKCJNMjQ1Iix0aGlzLlZhLGIpO3JldHVybiAwPHRoaXMuVmF9O2gucHJvdG90eXBlLm1qPWZ1bmN0aW9uKCl7dmFyIGE9e21jOjB9LGI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgibmctdmlldywgW25nLXZpZXddLCAubmctdmlldywgW3VpLXZpZXddIiksYj1sKGIsYW5ndWxhci5lbGVtZW50KSxjO2ZvcihjIGluIGguR2cpe3ZhciBmPWguR2dbY107bChiLGZ1bmN0aW9uKGIpe2I9Yi5maW5kKGMpO2woYixmdW5jdGlvbihiKXtpZihiPWJbZl0pYj1kZWNvZGVVUklDb21wb25lbnQoYiksYVtiXXx8KGFbYl09YyxhLm1jKyspfSl9KX10aGlzLnViPWF9O2gucHJvdG90eXBlLmtqPWZ1bmN0aW9uKGEpe3JldHVybiEhdGhpcy51YltkZWNvZGVVUklDb21wb25lbnQoYS5uYW1lKV19O2gucHJvdG90eXBlLm5qPWZ1bmN0aW9uKCl7dmFyIGI9W10sYz10aGlzOzA8dGhpcy51Yi5tYyYmCihiPWEubW9uaXRvci5yZXNvdXJjZU1vbml0b3IuamIoKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGMua2ooYSl9KSk7dGhpcy5yZXNUaW1pbmcoYil9O2guUGo9ZnVuY3Rpb24oYil7cmV0dXJuIGMoYixmdW5jdGlvbihiKXtyZXR1cm4oYi5ldmVudFR5cGU9PT1hLkV2ZW50VHlwZS5BamF4fHxiLmV2ZW50VHlwZT09PWEuRXZlbnRUeXBlLkFEUlVNX1hIUikmJiFhLnV0aWxzLnVhLmxjKGIuZXZlbnRVcmwsYi5tZXRob2QpfSl9O2guaGs9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSxmdW5jdGlvbihhLGIpe3JldHVybiBNYXRoLm1heChhLGIudGltZXN0YW1wK2IubWV0cmljcy5QTFQpfSwtMSl9O2gucHJvdG90eXBlLlppPWZ1bmN0aW9uKCl7aWYoYi5jb25mLnhocil7dmFyIGM9aC5QaihhLmNoYW5uZWwuZ2V0RXZlbnRzV2l0aFBhcmVudEdVSUQodGhpcy5ndWlkKCkpKSxjPWguaGsoYyk7aWYoMDxjKXt2YXIgZj10aGlzLnBlcmYuZ2V0RW50cnlCeU5hbWUoYS5ldmVudHMuYi5zaCk7CnRoaXMubWFya1hoclJlcXVlc3RzQ29tcGxldGVkKE1hdGgubWluKGYmJmYuc3RhcnRUaW1lfHxOdW1iZXIuTUFYX1ZBTFVFLGMpKX19fTtoLnByb3RvdHlwZS5hZGp1c3RUaW1pbmdzPWZ1bmN0aW9uKCl7dGhpcy5aaSgpO3ZhciBjPXRoaXMuZ2V0Vmlld0RPTUxvYWRlZCgpLGY9dGhpcy5nZXRYaHJSZXF1ZXN0c0NvbXBsZXRlZCgpLGM9TWF0aC5tYXgoYyxmKTtiLmNvbmYubWV0cmljcy5pbmNsdWRlUmVzVGltaW5nSW5FbmRVc2VyUmVzcG9uc2VUaW1pbmcmJih0aGlzLllpKCksZj10aGlzLmdldFZpZXdSZXNvdXJjZXNMb2FkZWQoKSxmPU1hdGgubWF4KGMsZiksYS5sb2coIk0yNDYiLGMsZiksYz1mKTt0aGlzLm1hcmtWaXJ0dWFsUGFnZUVuZChjKX07aC5wcm90b3R5cGUuWWk9ZnVuY3Rpb24oKXtpZigwPHRoaXMudWIubWMpe3RoaXMubmooKTt2YXIgYj10aGlzLnJlc1RpbWluZygpO2ImJmIubGVuZ3RoPj10aGlzLnViLm1jJiYoYj1lKGIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWF0aC5tYXgoYSwKYi5yZXNwb25zZUVuZCl9LDApLHRoaXMubWFya1ZpZXdSZXNvdXJjZXNMb2FkZWQoYS5QZXJmb3JtYW5jZVRyYWNrZXIuSWMoYikpKX19O2gucHJvdG90eXBlLmlkZW50aWZpZXI9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5taDthLnV0aWxzLmlzRGVmaW5lZChiKSYmKHRoaXMubWg9aC5OaihiKSx0aGlzLnVybCh0aGlzLm1oLnVybCkpO3JldHVybiBjfTtoLk5qPWZ1bmN0aW9uKGIpe3ZhciBjPXt9O2ImJmIuTT8oYy5NPXt0ZDoiIn0sYS51dGlscy5tZXJnZUpTT04oYy5NLHt0ZDpiLk0ub3JpZ2luYWxQYXRoLHZiOmIuTS50ZW1wbGF0ZSx3YjpiLk0udGVtcGxhdGVVcmx9KSk6YiYmYi5zdGF0ZSYmKGMuc3RhdGU9e3VybDoiIn0sYS51dGlscy5tZXJnZUpTT04oYy5zdGF0ZSx7dXJsOmIuc3RhdGUudXJsLG5hbWU6Yi5zdGF0ZS5uYW1lLHZiOmIuc3RhdGUudGVtcGxhdGUsd2I6Yi5zdGF0ZS50ZW1wbGF0ZVVybH0pKTtyZXR1cm4gY307cmV0dXJuIGh9KGEuZXZlbnRzLlZQYWdlVmlldyk7CmguR2c9e2ltZzoic3JjIixzY3JpcHQ6InNyYyIsbGluazoiaHJlZiJ9O2IuTmdWUGFnZVZpZXc9aDthLmV2ZW50cy5NYShhLmV2ZW50cy5UW2EuRXZlbnRUeXBlLk5HX1ZJUlRVQUxfUEFHRV0saC5wcm90b3R5cGUpfSkoYS5uZ3x8KGEubmc9e30pKX0pKGt8fChrPXt9KSk7KGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihiKXt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLkE9bmV3IGIuTmdWUGFnZVZpZXd9ZS5wcm90b3R5cGUubG09ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGg9dGhpcy5BO2IuY29uZi5tZXRyaWNzLmluY2x1ZGVSZXNUaW1pbmdJbkVuZFVzZXJSZXNwb25zZVRpbWluZz8oYS5sb2coIk0yNDciKSxhLnV0aWxzLm9TVE8oZnVuY3Rpb24oKXtjLnlkKGgpfSxlLktpKSk6YS51dGlscy5vU1RPKGZ1bmN0aW9uKCl7Yy55ZChoKX0sZS5MaSl9O2UucHJvdG90eXBlLnlkPWZ1bmN0aW9uKGIpe2EubG9nKCJNMjQ4Iik7Yi5wYXJlbnQoYS5tb25pdG9yLkRPTUV2ZW50c01vbml0b3IuY3VycmVudEJhc2VQYWdlKTsKYS5jb21tYW5kKCJjYWxsIixmdW5jdGlvbigpe2IuYWRqdXN0VGltaW5ncygpO2EucmVwb3J0ZXIucmVwb3J0RXZlbnQoYil9KX07ZS5wcm90b3R5cGUuc209ZnVuY3Rpb24oYSl7dGhpcy5BPWF9O3JldHVybiBlfSgpO2wuS2k9NUUzO2wuTGk9MiphLm1vbml0b3IuWEhSTW9uaXRvci5iZTtiLlZpcnR1YWxQYWdlU3RhdGVNYWNoaW5lPWw7YS53ZS5jcmVhdGUoe2V2ZW50czpbe25hbWU6InN0YXJ0Iixmcm9tOiJub25lIix0bzoiQ2hhbmdlVmlldyJ9LHtuYW1lOiJ2aWV3TG9hZGVkIixmcm9tOiJDaGFuZ2VWaWV3Iix0bzoiWGhyUGVuZGluZyJ9LHtuYW1lOiJ4aHJDb21wbGV0ZWQiLGZyb206IlhoclBlbmRpbmciLHRvOiJFbmQifSx7bmFtZToiYWJvcnQiLGZyb206IioiLHRvOiJub25lIn0se25hbWU6ImluaXQiLGZyb206IioiLHRvOiJub25lIn0se25hbWU6ImxvY0NoYW5nZSIsZnJvbToiKiIsdG86IioifSx7bmFtZToiYmVmb3JlWGhyUmVxIixmcm9tOiIqIix0bzoiKiJ9LHtuYW1lOiJhZnRlclhoclJlcSIsCmZyb206IioiLHRvOiIqIn1dLGVycm9yOmZ1bmN0aW9uKGIpe2EubG9nKCJNMjQ5IixiKX0sY2FsbGJhY2tzOntvbkNoYW5nZVZpZXc6ZnVuY3Rpb24oKXt0aGlzLkEuVGQoKTt0aGlzLkEuRmQoKX0sb252aWV3TG9hZGVkOmZ1bmN0aW9uKCl7dGhpcy5BLm1hcmtWaWV3RE9NTG9hZGVkKCl9LG9uWGhyUGVuZGluZzpmdW5jdGlvbigpe3RoaXMuQS5OZiYmdGhpcy54aHJDb21wbGV0ZWQoKX0sb25sZWF2ZVhoclBlbmRpbmc6ZnVuY3Rpb24oYSxiLGgpe2lmKCJhYm9ydCI9PT1hKXJldHVybiB0aGlzLnlkKCksITA7aWYoInhockNvbXBsZXRlZCI9PT1hJiYiRW5kIj09PWgpe2lmKHRoaXMuQS55aygpKXJldHVybiExO3RoaXMuQS5tYXJrWGhyUmVxdWVzdHNDb21wbGV0ZWQoKTtyZXR1cm4hMH19LG9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5BLm1qKCk7dGhpcy5sbSgpfSxvbmluaXQ6ZnVuY3Rpb24oYixjLGgsZil7dGhpcy5zbShmKTthLm1vbml0b3IueGhyTW9uaXRvci5mYygpO2EubW9uaXRvci5pYi5mYygpfSwKb25sb2NDaGFuZ2U6ZnVuY3Rpb24oYSxiLGgsZil7dGhpcy5BLmlkZW50aWZpZXIudXJsPWY7dGhpcy5BLmtjKHt1cmw6Zn0pfSxvbmJlZm9yZVhoclJlcTpmdW5jdGlvbihiLGMsaCxmKXt2YXIgbj10aGlzLkE7bi5OZj0hMTthLmxvZygiTTI1MCIsZiYmZlsxXXx8IiIsbi5ndWlkKCkpO24uRWsoKTtuLnN0YXJ0Q29ycmVsYXRpbmdYaHJzKCk7ZlszXSYmKGZbM109YS5hb3AuYmVmb3JlKGZbM10sZnVuY3Rpb24oYixjLGYpe2EubG9nKCJNMjUxIik7bi56aigpO2YmJihiPWEudXRpbHMuT2woZilbImNvbnRlbnQtdHlwZSJdKSYmMDw9Yi5pbmRleE9mKCJ0ZXh0L2h0bWwiKSYmbi5tYXJrVmlld0ZyYWdtZW50c0xvYWRlZCgpfSkpO3JldHVybiBmfSxvbmFmdGVyWGhyUmVxOmZ1bmN0aW9uKCl7dGhpcy5BLnN0b3BDb3JyZWxhdGluZ1hocnMoKX19fSxsLnByb3RvdHlwZSl9KShhLm5nfHwoYS5uZz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPQpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLk89bmV3IGIuVmlydHVhbFBhZ2VTdGF0ZU1hY2hpbmU7dGhpcy5kaXN0aW5ndWlzaFZQd2l0aEl0c1RlbXBsYXRlVXJsPWEubmcuY29uZi5kaXN0aW5ndWlzaFZQd2l0aEl0c1RlbXBsYXRlVXJsfWUucHJvdG90eXBlLlM9ZnVuY3Rpb24oYyxoKXthLmxvZygiTTI1MiIsYyk7c3dpdGNoKGMpe2Nhc2UgYi5rLkpnOmNhc2UgYi5rLlhnOnRoaXMuTy5zdGFydCgpO3ZhciBmPWgubmV4dC51cmx8fGRvY3VtZW50LlVSTCxuPW5ldyBiLk5nVlBhZ2VWaWV3KHt1cmw6ZixpZGVudGlmaWVyOmgubmV4dH0pO3RoaXMuZGlzdGluZ3Vpc2hWUHdpdGhJdHNUZW1wbGF0ZVVybCYmZS5aayh0aGlzLk8uQSxuKT90aGlzLk8uQS5rYyh7dXJsOmYsaWRlbnRpZmllcjpoLm5leHR9KTp0aGlzLkdtKG4pO2JyZWFrO2Nhc2UgYi5rLktnOmNhc2UgYi5rLllnOnRoaXMuTy5BLm1hcmtWaWV3Q2hhbmdlRW5kKCk7YnJlYWs7Y2FzZSBiLmsua2g6dGhpcy5PLnZpZXdMb2FkZWQoKTsKYnJlYWs7Y2FzZSBiLmsuTmU6dGhpcy5PLmJlZm9yZVhoclJlcShoKTticmVhaztjYXNlIGIuay5EZTp0aGlzLk8uYWZ0ZXJYaHJSZXEoKTticmVhaztjYXNlIGIuay5SZTp0aGlzLk8ueGhyQ29tcGxldGVkKCk7YnJlYWs7Y2FzZSBiLmsuWGY6dGhpcy5PLkEua2Moe3VybDpoLm5leHQudXJsfSk7dGhpcy5PLmxvY0NoYW5nZShoLm5leHQudXJsKTticmVhaztjYXNlIGIuay5hZjp0aGlzLk8uQS5EaygpfX07ZS5wcm90b3R5cGUuR209ZnVuY3Rpb24oYSl7dGhpcy5PLmFib3J0KCk7dGhpcy5PLmluaXQoYSk7dGhpcy5PLnN0YXJ0KCl9O2UuWms9ZnVuY3Rpb24oYixoKXt2YXIgZj1iLmlkZW50aWZpZXIoKSxlPWguaWRlbnRpZmllcigpLG09ITE7cmV0dXJuIG09IWEudXRpbHMuaXNEZWZpbmVkKGYpJiYhYS51dGlscy5pc0RlZmluZWQoZSl8fGY9PT1lPyEwOmEudXRpbHMuaXNEZWZpbmVkKGYpJiZhLnV0aWxzLmlzRGVmaW5lZChlKT9mLnN0YXRlfHxlLnN0YXRlP2EudXRpbHMuaXNEZWZpbmVkKGYuc3RhdGUpJiYKYS51dGlscy5pc0RlZmluZWQoZS5zdGF0ZSk/Zi5zdGF0ZS5uYW1lPT09ZS5zdGF0ZS5uYW1lJiZmLnN0YXRlLnZiPT09ZS5zdGF0ZS52YiYmZi5zdGF0ZS53Yj09PWUuc3RhdGUud2ImJmYuc3RhdGUudXJsPT09ZS5zdGF0ZS51cmw6ITE6Zi5NJiZlLk0/Zi5NLnRkPT09ZS5NLnRkJiZmLk0udmI9PT1lLk0udmImJmYuTS53Yj09PWUuTS53YjpmLnVybD09PWUudXJsOiExfTtyZXR1cm4gZX0oKTtiLk1pPWx9KShhLm5nfHwoYS5uZz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGIpe3ZhciBsPWEudXRpbHMuYWRkRXZlbnRMaXN0ZW5lcixlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe3RoaXMuVT1uZXcgYi5NaTt0aGlzLkZmPSExfWMucHJvdG90eXBlLnNldFVwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihoKXtyZXR1cm4gZnVuY3Rpb24oKXthLmxvZyhoKTtjLmluaXQoKX19dmFyIGM9dGhpcztiKCJNMjUzIikoKTtsKGRvY3VtZW50LCJET01Db250ZW50TG9hZGVkIiwKYigiTTI1NCIpKTtsKHdpbmRvdywibG9hZCIsYigiTTI1NSIpKX07Yy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2lmKCJsb2FkaW5nIj09PWRvY3VtZW50LnJlYWR5U3RhdGUpYS5sb2coIk0yNTYiKTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2YgYW5ndWxhciYmIXRoaXMuRmYpe3RoaXMuRmY9ITA7YS5sb2coIk0yNTciKTt2YXIgYj10aGlzLGM9YW5ndWxhci5tb2R1bGUoIm5nIik7Yy5jb25maWcoWyIkcHJvdmlkZSIsZnVuY3Rpb24oYSl7Yi5UayhhKTtiLk9rKGEpfV0pO2MucnVuKFsiJGJyb3dzZXIiLGZ1bmN0aW9uKGEpe2IuTGsoYSl9XSk7YS5sb2coIk0yNTgiKX19O2MucHJvdG90eXBlLk9rPWZ1bmN0aW9uKGMpe3ZhciBmPWEuYW9wLGU9dGhpcztjLmRlY29yYXRvcigiJGh0dHBCYWNrZW5kIixbIiRkZWxlZ2F0ZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9Zi5hcm91bmQoYSxmdW5jdGlvbigpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CmUuVS5TKGIuay5OZSxhKTtyZXR1cm4gYX0sZnVuY3Rpb24oKXtlLlUuUyhiLmsuRGUpfSwibmcuaHR0cEJhY2tlbmQiKX1dKX07Yy5wcm90b3R5cGUuVGs9ZnVuY3Rpb24oYyl7dmFyIGY9YS5hb3AsZT10aGlzO2MuZGVjb3JhdG9yKCIkcm9vdFNjb3BlIixbIiRkZWxlZ2F0ZSIsZnVuY3Rpb24oYSl7YS4kZGlnZXN0PWYuYWZ0ZXIoYS4kZGlnZXN0LGZ1bmN0aW9uKCl7ZS5VLlMoYi5rLmFmKX0sIm5nZXZlbnRzLmRpZ2VzdCIpO2EuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdGFydCIsZnVuY3Rpb24oYSxjKXt2YXIgZj17dXJsOmN9LGg9YSYmYS5nYiYmYS5nYi4kc3RhdGUmJmEuZ2IuJHN0YXRlLmN1cnJlbnQ7aCYmKGYuc3RhdGU9aCk7ZS5VLlMoYi5rLlhmLHtuZXh0OmZ9KX0pO2EuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdWNjZXNzIixmdW5jdGlvbigpe2UuVS5TKGIuay50bCl9KTthLiRvbigiJHJvdXRlQ2hhbmdlU3RhcnQiLGZ1bmN0aW9uKGEsYyl7dmFyIGY9e3VybDpsb2NhdGlvbi5ocmVmfSwKaD1jJiZjLiQkcm91dGU7aCYmKGYuTT1oKTtlLlUuUyhiLmsuSmcse25leHQ6Zn0pfSk7YS4kb24oIiRyb3V0ZUNoYW5nZVN1Y2Nlc3MiLGZ1bmN0aW9uKCl7ZS5VLlMoYi5rLktnKX0pO2EuJG9uKCIkc3RhdGVDaGFuZ2VTdGFydCIsZnVuY3Rpb24oYSxjKXtlLlUuUyhiLmsuWGcse25leHQ6e3N0YXRlOmN9fSl9KTthLiRvbigiJHN0YXRlQ2hhbmdlU3VjY2VzcyIsZnVuY3Rpb24oKXtlLlUuUyhiLmsuWWcpfSk7YS4kb24oIiR2aWV3Q29udGVudExvYWRlZCIsZnVuY3Rpb24oYSl7dmFyIGM9e3VybDpsb2NhdGlvbi5ocmVmfTtpZihhPWEmJmEuZ2ImJmEuZ2IuJHN0YXRlJiZhLmdiLiRzdGF0ZS5jdXJyZW50KWMuc3RhdGU9YTtlLlUuUyhiLmsua2gse25leHQ6Y30pfSk7YS4kb24oIiRpbmNsdWRlQ29udGVudFJlcXVlc3RlZCIsZnVuY3Rpb24oKXtlLlUuUyhiLmsuQ2spfSk7YS4kb24oIiRpbmNsdWRlQ29udGVudExvYWRlZCIsZnVuY3Rpb24oKXtlLlUuUyhiLmsuQmspfSk7cmV0dXJuIGF9XSl9OwpjLnByb3RvdHlwZS5Maz1mdW5jdGlvbihjKXt2YXIgZj10aGlzO2MuJCRjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdD1hLmFvcC5iZWZvcmUoYy4kJGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0LGZ1bmN0aW9uKCl7Zi5VLlMoYi5rLlJlKX0pfTtyZXR1cm4gY30oKTtiLm1uPWU7Yi5uZ01vbml0b3I9bmV3IGV9KShhLm5nfHwoYS5uZz17fSkpfSkoa3x8KGs9e30pKTsoZnVuY3Rpb24oYSl7dmFyIGI9YS5uZ3x8KGEubmc9e30pO2IuY29uZi5kaXNhYmxlZHx8YS5jb25mLnNwYTJ8fGEubW9uaXRvci5zZXRVcE1vbml0b3JzKGIubmdNb25pdG9yKX0pKGt8fChrPXt9KSl9fTt9KSgpOwo=(Line 28)
Message:
Refused to load the script 'https://cdn.appdynamics.com/adrum-ext.a5e921eab2dde2c5ab4b79ea636b8271.js' because it violates the following Content Security Policy directive: "script-src 'unsafe-inline' data:". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.

Indicators

This is a term in the security industry to describe indicators such as IPs, Domains, Hashes, etc. This does not imply that any of these indicate malicious activity.

cdn.appdynamics.com
reliauscard.com
reliauscard.myvnc.com
tags.tiqcdn.com
www.google-analytics.com
cdn.appdynamics.com
reliauscard.myvnc.com
tags.tiqcdn.com
www.google-analytics.com
23.95.80.43
64.225.111.8
000c23b360dd3a32d131af2c43db6ad60a0f637721fe9b42f85ad7e1204701c7
10fd97358e3e295c0dd817f2f2de51346a58befc3dce480ba825704005072ee2
11e301f1348a47453bbb63097f7672309434aff0467b10e217a170a793f06ac6
14e82dcfebfbe8089ec2904d6ae62236f3fda269b1bd2342a6256462c491c6fa
19c85d4ae54b8085ef9e183d871ca4041a19123b3f0e8e8080669fb199191c94
36310c9fd2c92d18fef7f82bad4e2551a294400bc06b0c929b8c7f28111d0d20
3a7a992929b0af019d45d0b1707be3cfee029fb7c760300f9727ffb1e5fae507
40fef0b8a0da73493c95a417b28a3e847cf9e146605eaf095d3ec2cb6cf0272d
500330ccc9234c24ecf1dc806c5632dc1e3114323822c567c971324ccb531cf7
555b050bd869797233fcfd1080d3494f5667b12be87a9a308572f6e39100f281
5ab37111a8d0664346119976e4030a241654bd47477fded71e61bd50a1230fb6
62ed2e922b527de7f63d37b9d121642ba7a80107f148ff7bf9c07c72f3d212d4
6b305c807c5e6c509163a6f330f439dd52308b98173874b2918b603f9a960dc1
75dfe3d9341e1ed00993168e4ffdb46d1a9866e9ccbc9b021f29f872ff8fdd0f
7923c5df4689d8e2b03d4b24349057eb7415f9d70b6cd91975fd19814b402821
826aa0764c0d6c224e3a5223e40dd7af368e386bac1d79fb760a33870fbd8240
8ba8596ad0dd9da4cbcd32260e4a26c353ecfff7afb5c91009218ed0be299d67
93f84f7b97ca285048f2c5f1f774a466457777716a3e32af3191f43ac02262ba
a5437085c1dcb711cd72c9a5ced577df6d75511ffd54391fcc16fc6509687839
b56bb658575a7e0683e8ce69d261f9dd41cce63a6574eba9cfeeb522c7ddfd93
b75c055f47de9f69167f10e86d52053a0eecf1ae3373b2aef55de7dc1276233c
c09eca3258342cbc78b20a7e5ef1d79fdca51bfadd3db1e63a72c85b01e39143
d994adb9dccaa79728cf9feaa4262fd8b7d7e29b7ad5a13562f9b7012033b372
e5d0de278bc7272608da57b7ac2ac247df12499dd130802d6df2c63369aa6df3
fc27aed7787a4f63d2feba50e6bc6122ac3c5479456d40c0a445899a08ad92f3