managehosting144202b3-aruba.zukunst.at Open in urlscan Pro
172.171.241.51  Malicious Activity! Public Scan

Submitted URL: https://managehosting144202b3-aruba.zukunst.at/indexxx.php?ozO5pwmmkgf5bZkUNSjLxGj84fGk8mePN3xsqjs8XMq2GzEF1UlctclgFeFpLvHMaMIExOO4VddK2bzjtfOo...
Effective URL: https://managehosting144202b3-aruba.zukunst.at/login.php?bdyx0Ld2ln93DyAcKy4h8JGQ49mIwlyNVzKLhj8Lpnk0p5xVJtKzmtIbAT80iBNgWDCB1wKqyAEj5kz0p8rFae...
Submission: On September 17 via automatic, source phishtank — Scanned from AT

Summary

This website contacted 2 IPs in 1 countries across 3 domains to perform 4 HTTP transactions. The main IP is 172.171.241.51, located in Tappahannock, United States and belongs to MICROSOFT-CORP-MSN-AS-BLOCK, US. The main domain is managehosting144202b3-aruba.zukunst.at.
TLS certificate: Issued by R3 on September 15th 2023. Valid for: 3 months.
This is the only time managehosting144202b3-aruba.zukunst.at was scanned on urlscan.io!

urlscan.io Verdict: Potentially Malicious

Targeting these brands: Aruba (Online)

Domain & IP information

IP Address AS Autonomous System
1 2 172.171.241.51 8075 (MICROSOFT...)
4 2
Apex Domain
Subdomains
Transfer
2 zukunst.at
managehosting144202b3-aruba.zukunst.at
1 MB
0 usabilla.com Failed
w.usabilla.com Failed
0 google-analytics.com Failed
www.google-analytics.com Failed
4 3
Domain Requested by
2 managehosting144202b3-aruba.zukunst.at 1 redirects
0 w.usabilla.com Failed managehosting144202b3-aruba.zukunst.at
0 www.google-analytics.com Failed managehosting144202b3-aruba.zukunst.at
4 3
Subject Issuer Validity Valid
*.zukunst.at
R3
2023-09-15 -
2023-12-14
3 months crt.sh

This page contains 3 frames:

Primary Page: https://managehosting144202b3-aruba.zukunst.at/login.php?bdyx0Ld2ln93DyAcKy4h8JGQ49mIwlyNVzKLhj8Lpnk0p5xVJtKzmtIbAT80iBNgWDCB1wKqyAEj5kz0p8rFaebmUr9RFblwZ7D6o3FbHROycLol8j9lbqL1
Frame ID: 9477BC355FBF6ADB7A24E58659175136
Requests: 20 HTTP requests in this frame

Frame: https://w.usabilla.com/719697a0b3af.js?lv=1
Frame ID: 082909BAF0B28AE17CF037E91FC52B9F
Requests: 1 HTTP requests in this frame

Frame: data://truncated
Frame ID: FC94CA07DD21F12DE4262A83018D47EA
Requests: 1 HTTP requests in this frame

Screenshot

Page Title

Pagamenti.aruba.it

Page URL History Show full URLs

  1. https://managehosting144202b3-aruba.zukunst.at/indexxx.php?ozO5pwmmkgf5bZkUNSjLxGj84fGk8mePN3xsqjs8XMq2GzEF1UlctclgFeFpLvHM... HTTP 302
    https://managehosting144202b3-aruba.zukunst.at/login.php?bdyx0Ld2ln93DyAcKy4h8JGQ49mIwlyNVzKLhj8Lpnk0p5xVJtKzmtIbAT80iBNgWD... Page URL

Detected technologies

Overall confidence: 100%
Detected patterns
  • \.php(?:$|\?)

Overall confidence: 100%
Detected patterns

Page Statistics

4
Requests

25 %
HTTPS

0 %
IPv6

3
Domains

3
Subdomains

2
IPs

1
Countries

1292 kB
Transfer

2202 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. https://managehosting144202b3-aruba.zukunst.at/indexxx.php?ozO5pwmmkgf5bZkUNSjLxGj84fGk8mePN3xsqjs8XMq2GzEF1UlctclgFeFpLvHMaMIExOO4VddK2bzjtfOoxskNJOcpDJczUik2RlMFjlFsKhiGbCMwmG84 HTTP 302
    https://managehosting144202b3-aruba.zukunst.at/login.php?bdyx0Ld2ln93DyAcKy4h8JGQ49mIwlyNVzKLhj8Lpnk0p5xVJtKzmtIbAT80iBNgWDCB1wKqyAEj5kz0p8rFaebmUr9RFblwZ7D6o3FbHROycLol8j9lbqL1 Page URL

Redirected requests

There were HTTP redirect chains for the following requests:

4 HTTP transactions

Resource
Path
Size
x-fer
Type
MIME-Type
Primary Request login.php
managehosting144202b3-aruba.zukunst.at/
Redirect Chain
  • https://managehosting144202b3-aruba.zukunst.at/indexxx.php?ozO5pwmmkgf5bZkUNSjLxGj84fGk8mePN3xsqjs8XMq2GzEF1UlctclgFeFpLvHMaMIExOO4VddK2bzjtfOoxskNJOcpDJczUik2RlMFjlFsKhiGbCMwmG84
  • https://managehosting144202b3-aruba.zukunst.at/login.php?bdyx0Ld2ln93DyAcKy4h8JGQ49mIwlyNVzKLhj8Lpnk0p5xVJtKzmtIbAT80iBNgWDCB1wKqyAEj5kz0p8rFaebmUr9RFblwZ7D6o3FbHROycLol8j9lbqL1
1 MB
1 MB
Document
General
Full URL
https://managehosting144202b3-aruba.zukunst.at/login.php?bdyx0Ld2ln93DyAcKy4h8JGQ49mIwlyNVzKLhj8Lpnk0p5xVJtKzmtIbAT80iBNgWDCB1wKqyAEj5kz0p8rFaebmUr9RFblwZ7D6o3FbHROycLol8j9lbqL1
Protocol
H2
Security
TLS 1.2, ECDHE_RSA, AES_256_GCM
Server
172.171.241.51 Tappahannock, United States, ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK, US),
Reverse DNS
Software
Microsoft-IIS/10.0 / PHP/7.2.7
Resource Hash
e2aea7d05ea8c125ee448f0c47b1aef02c52ce13a16871992bc4158c80546f83

Request headers

Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36
accept-language
de-AT,de;q=0.9

Response headers

cache-control
no-store, no-cache, must-revalidate
content-length
1299016
content-type
text/html; charset=UTF-8
date
Sun, 17 Sep 2023 15:49:16 GMT
expires
Thu, 19 Nov 1981 08:52:00 GMT
pragma
no-cache
server
Microsoft-IIS/10.0
x-powered-by
PHP/7.2.7

Redirect headers

cache-control
no-store, no-cache, must-revalidate
content-length
0
content-type
text/html; charset=UTF-8
date
Sun, 17 Sep 2023 15:49:16 GMT
expires
Thu, 19 Nov 1981 08:52:00 GMT
location
login.php?bdyx0Ld2ln93DyAcKy4h8JGQ49mIwlyNVzKLhj8Lpnk0p5xVJtKzmtIbAT80iBNgWDCB1wKqyAEj5kz0p8rFaebmUr9RFblwZ7D6o3FbHROycLol8j9lbqL1
pragma
no-cache
server
Microsoft-IIS/10.0
x-powered-by
PHP/7.2.7
truncated
/
401 B
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
015fcd7aac5929a1c6619aaa37ab852552ed42a800c116216049ab9e8433ea27

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

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

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

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

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

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

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

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

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

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

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

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

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

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

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

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

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

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

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

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

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

Content-Type
application/x-javascript
collect
www.google-analytics.com/j/
0
0

analytics.js
www.google-analytics.com/
0
0

truncated
/
39 KB
0
Script
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
398cdf1b27ef247e5bc77805f266bb441e60355463fc3d1776f41aae58b08cf1

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

Content-Type
application/x-javascript
truncated
/
13 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
ae3759174cc8b31507df02ef40c88a63857b4ef7b8dd8733899c08e557ce9366

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

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

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

Content-Type
image/png
truncated
/
17 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
a525f163e73542be1b82c5ae4e4beed74d137d56161ac5b02833a279ef6d9b61

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

Content-Type
image/png
truncated
/
15 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
bcedcafd81248b08cb428b22618a38866d0cee85b4e9ecd27ef734d0533e2792

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

Content-Type
image/png
truncated
/
23 KB
23 KB
Font
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
918b7dc3e2e2d015c16ce08b57bcb64d2253bafc1707658f361e72865498e537

Request headers

Referer
Origin
https://managehosting144202b3-aruba.zukunst.at
accept-language
de-AT,de;q=0.9
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

Content-Type
font/woff2
719697a0b3af.js
w.usabilla.com/ Frame 0829
0
0

truncated
/ Frame FC94
6 KB
0
Image
General
Full URL
data:truncated
Protocol
DATA
Server
-, , ASN (),
Reverse DNS
Software
/
Resource Hash
52897547cfc7be3ea57d0a07398a6c8d5f01c9cb02309c7ab2ba9ab27ebd73a4

Request headers

accept-language
de-AT,de;q=0.9
Referer
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.62 Safari/537.36

Response headers

Content-Type
image/png

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/j/collect?v=1&_v=j96&a=26235169&t=pageview&_s=1&dl=https%3A%2F%2Fmanagehosting144202b3-aruba.zukunst.at%2Flogin.php%3Fbdyx0Ld2ln93DyAcKy4h8JGQ49mIwlyNVzKLhj8Lpnk0p5xVJtKzmtIbAT80iBNgWDCB1wKqyAEj5kz0p8rFaebmUr9RFblwZ7D6o3FbHROycLol8j9lbqL1&ul=en-us&de=UTF-8&dt=Pagamenti.aruba.it&sd=24-bit&sr=1600x1200&vp=1600x1200&je=0&_u=aEBAAUABEAAAAC~&jid=57048223&gjid=1314185881&cid=1547943106.1694965758&tid=UA-47997651-24&_gid=1301808691.1694965758&_r=1&gtm=2ou6f0&z=2065928649
Domain
www.google-analytics.com
URL
https://www.google-analytics.com/analytics.js
Domain
w.usabilla.com
URL
https://w.usabilla.com/719697a0b3af.js?lv=1

Verdicts & Comments Add Verdict or Comment

Potentially malicious activity detected
Disclaimer: These verdicts should be used to detect potentially malicious websites, not as a final verdict!

urlscan

Phishing against: Aruba (Online)

138 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 object| 1 object| 2 object| 3 object| 4 object| documentPictureInPicture object| google_tag_data function| ga object| gaplugins undefined| CookiebotDialog undefined| CookieConsentDialog function| lightningjs function| usabilla_live function| $ function| jQuery undefined| isXHTML function| NiftyCheck function| Rounded function| AddBorder function| AddTop function| AddBottom function| CreateEl function| getElementsBySelector function| Mix function| openMenu function| closeMenu function| IntxlaALSprecheck function| SetLingua function| createCookie function| ShowP function| CheckSelectedOption function| setSelectedDevice object| CookieControl function| __uspapi function| addUspapiLocatorFrame function| __handleUspapiMessage function| propagateIABStub function| gtag object| dataLayer object| theForm function| __doPostBack object| google_tag_manager function| WebForm_PostBackOptions function| WebForm_DoPostBackWithOptions object| __pendingCallbacks number| __synchronousCallBackIndex function| WebForm_DoCallback function| WebForm_CallbackComplete function| WebForm_ExecuteCallback function| WebForm_FillFirstAvailableSlot boolean| __nonMSDOMBrowser string| __theFormPostData object| __theFormPostCollection object| __callbackTextTypes function| WebForm_InitCallback function| WebForm_InitCallbackAddField function| WebForm_EncodeCallback object| __disabledControlArray function| WebForm_ReEnableControls function| WebForm_ReDisableControls function| WebForm_SimulateClick function| WebForm_FireDefaultButton function| WebForm_GetScrollX function| WebForm_GetScrollY function| WebForm_SaveScrollPositionSubmit function| WebForm_SaveScrollPositionOnSubmit function| WebForm_RestoreScrollPosition function| WebForm_TextBoxKeyHandler function| WebForm_TrimString function| WebForm_AppendToClassName function| WebForm_RemoveClassName function| WebForm_GetElementById function| WebForm_GetElementByTagName function| WebForm_GetElementsByTagName function| WebForm_GetElementDir function| WebForm_GetElementPosition function| WebForm_GetParentByTagName function| WebForm_SetElementHeight function| WebForm_SetElementWidth function| WebForm_SetElementX function| WebForm_SetElementY string| Page_ValidationVer boolean| Page_IsValid boolean| Page_BlockSubmit object| Page_InvalidControlToBeFocused object| Page_TextTypes function| ValidatorUpdateDisplay function| ValidatorUpdateIsValid function| AllValidatorsValid function| ValidatorHookupControlID function| ValidatorHookupControl function| ValidatorHookupEvent function| ValidatorGetValue function| ValidatorGetValueRecursive function| Page_ClientValidate function| ValidatorCommonOnSubmit function| ValidatorEnable function| ValidatorOnChange function| ValidatedTextBoxOnKeyPress function| ValidatedControlOnBlur function| ValidatorValidate function| ValidatorSetFocus function| IsInVisibleContainer function| IsValidationGroupMatch function| ValidatorOnLoad function| ValidatorConvert function| ValidatorCompare function| CompareValidatorEvaluateIsValid function| CustomValidatorEvaluateIsValid function| RegularExpressionValidatorEvaluateIsValid function| ValidatorTrim function| RequiredFieldValidatorEvaluateIsValid function| RangeValidatorEvaluateIsValid function| ValidationSummaryOnSubmit function| Sys$Enum$parse function| Sys$Enum$toString function| Sys$Component$_setProperties function| Sys$Component$_setReferences function| $create function| $addHandler function| $addHandlers function| $clearHandlers function| $removeHandler function| $get function| $find function| Type object| Sys object| _events string| GoogleAnalyticsObject object| gaGlobal object| gaData function| WebForm_OnSubmit object| Page_Validators object| cphBody_rfvOrderValidator boolean| Page_ValidationActive function| ValidatorOnSubmit string| theAgent object| Page_ValidationSummaries

6 Cookies

Domain/Path Name / Value
managehosting144202b3-aruba.zukunst.at/ Name: PHPSESSID
Value: mn8fjng8msnns9cfq3gpl1edsl
managehosting144202b3-aruba.zukunst.at/ Name: cleana
Value: true
.zukunst.at/ Name: _ga
Value: GA1.2.1547943106.1694965758
.zukunst.at/ Name: _gid
Value: GA1.2.1301808691.1694965758
.zukunst.at/ Name: _gat_gtag_UA_47997651_24
Value: 1
managehosting144202b3-aruba.zukunst.at/ Name: OpenChatControl
Value: true

4 Console Messages

Source Level URL
Text
security error URL: data:text/javascript;base64,KGZ1bmN0aW9uKCl7LyoKCiBDb3B5cmlnaHQgVGhlIENsb3N1cmUgTGlicmFyeSBBdXRob3JzLgogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKi8KdmFyIGFhPXRoaXN8fHNlbGYsbD1mdW5jdGlvbihhLGIpe2E9YS5zcGxpdCgiLiIpO3ZhciBjPWFhO2FbMF1pbiBjfHwidW5kZWZpbmVkIj09dHlwZW9mIGMuZXhlY1NjcmlwdHx8Yy5leGVjU2NyaXB0KCJ2YXIgIithWzBdKTtmb3IodmFyIGQ7YS5sZW5ndGgmJihkPWEuc2hpZnQoKSk7KWEubGVuZ3RofHx2b2lkIDA9PT1iP2M9Y1tkXSYmY1tkXSE9PU9iamVjdC5wcm90b3R5cGVbZF0/Y1tkXTpjW2RdPXt9OmNbZF09Yn07dmFyIG09ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMgaW4gYiliLmhhc093blByb3BlcnR5KGMpJiYoYVtjXT1iW2NdKX0scT1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGIpKXJldHVybiEwO3JldHVybiExfTt2YXIgcj0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwKTp8W146Lz8jXSooPzpbLz8jXXwkKSkvaTsvKgoKIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiovCnZhciB0PXdpbmRvdyx1PXdpbmRvdy5oaXN0b3J5LHY9ZG9jdW1lbnQsdz1uYXZpZ2F0b3IseD1mdW5jdGlvbihhLGIpe3YuYWRkRXZlbnRMaXN0ZW5lcj92LmFkZEV2ZW50TGlzdGVuZXIoYSxiLCExKTp2LmF0dGFjaEV2ZW50JiZ2LmF0dGFjaEV2ZW50KCJvbiIrYSxiKX07dmFyIHk9e30sej1mdW5jdGlvbigpe3kuVEFHR0lORz15LlRBR0dJTkd8fFtdO3kuVEFHR0lOR1sxXT0hMH07dmFyIEE9LzpbMC05XSskLyxCPWZ1bmN0aW9uKGEsYixjKXthPWEuc3BsaXQoIiYiKTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGU9YVtkXS5zcGxpdCgiPSIpO2lmKGRlY29kZVVSSUNvbXBvbmVudChlWzBdKS5yZXBsYWNlKC9cKy9nLCIgIik9PT1iKXJldHVybiBiPWUuc2xpY2UoMSkuam9pbigiPSIpLGM/YjpkZWNvZGVVUklDb21wb25lbnQoYikucmVwbGFjZSgvXCsvZywiICIpfX0sRT1mdW5jdGlvbihhLGIpe2ImJihiPVN0cmluZyhiKS50b0xvd2VyQ2FzZSgpKTtpZigicHJvdG9jb2wiPT09Ynx8InBvcnQiPT09YilhLnByb3RvY29sPUMoYS5wcm90b2NvbCl8fEModC5sb2NhdGlvbi5wcm90b2NvbCk7InBvcnQiPT09Yj9hLnBvcnQ9U3RyaW5nKE51bWJlcihhLmhvc3RuYW1lP2EucG9ydDp0LmxvY2F0aW9uLnBvcnQpfHwoImh0dHAiPT1hLnByb3RvY29sPzgwOiJodHRwcyI9PWEucHJvdG9jb2w/NDQzOiIiKSk6Imhvc3QiPT09YiYmKGEuaG9zdG5hbWU9KGEuaG9zdG5hbWV8fAp0LmxvY2F0aW9uLmhvc3RuYW1lKS5yZXBsYWNlKEEsIiIpLnRvTG93ZXJDYXNlKCkpO3JldHVybiBEKGEsYix2b2lkIDAsdm9pZCAwLHZvaWQgMCl9LEQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1DKGEucHJvdG9jb2wpO2ImJihiPVN0cmluZyhiKS50b0xvd2VyQ2FzZSgpKTtzd2l0Y2goYil7Y2FzZSAidXJsX25vX2ZyYWdtZW50IjpkPSIiO2EmJmEuaHJlZiYmKGQ9YS5ocmVmLmluZGV4T2YoIiMiKSxkPTA+ZD9hLmhyZWY6YS5ocmVmLnN1YnN0cigwLGQpKTthPWQ7YnJlYWs7Y2FzZSAicHJvdG9jb2wiOmE9ZjticmVhaztjYXNlICJob3N0IjphPWEuaG9zdG5hbWUucmVwbGFjZShBLCIiKS50b0xvd2VyQ2FzZSgpO2MmJihkPS9ed3d3XGQqXC4vLmV4ZWMoYSkpJiZkWzBdJiYoYT1hLnN1YnN0cihkWzBdLmxlbmd0aCkpO2JyZWFrO2Nhc2UgInBvcnQiOmE9U3RyaW5nKE51bWJlcihhLnBvcnQpfHwoImh0dHAiPT1mPzgwOiJodHRwcyI9PWY/NDQzOiIiKSk7YnJlYWs7Y2FzZSAicGF0aCI6YS5wYXRobmFtZXx8CmEuaG9zdG5hbWV8fHooKTthPSIvIj09YS5wYXRobmFtZS5zdWJzdHIoMCwxKT9hLnBhdGhuYW1lOiIvIithLnBhdGhuYW1lO2E9YS5zcGxpdCgiLyIpOzA8PShkfHxbXSkuaW5kZXhPZihhW2EubGVuZ3RoLTFdKSYmKGFbYS5sZW5ndGgtMV09IiIpO2E9YS5qb2luKCIvIik7YnJlYWs7Y2FzZSAicXVlcnkiOmE9YS5zZWFyY2gucmVwbGFjZSgiPyIsIiIpO2UmJihhPUIoYSxlLHZvaWQgMCkpO2JyZWFrO2Nhc2UgImV4dGVuc2lvbiI6YT1hLnBhdGhuYW1lLnNwbGl0KCIuIik7YT0xPGEubGVuZ3RoP2FbYS5sZW5ndGgtMV06IiI7YT1hLnNwbGl0KCIvIilbMF07YnJlYWs7Y2FzZSAiZnJhZ21lbnQiOmE9YS5oYXNoLnJlcGxhY2UoIiMiLCIiKTticmVhaztkZWZhdWx0OmE9YSYmYS5ocmVmfXJldHVybiBhfSxDPWZ1bmN0aW9uKGEpe3JldHVybiBhP2EucmVwbGFjZSgiOiIsIiIpLnRvTG93ZXJDYXNlKCk6IiJ9LEY9ZnVuY3Rpb24oYSl7dmFyIGI9di5jcmVhdGVFbGVtZW50KCJhIik7YSYmCihiLmhyZWY9YSk7dmFyIGM9Yi5wYXRobmFtZTsiLyIhPT1jWzBdJiYoYXx8eigpLGM9Ii8iK2MpO2E9Yi5ob3N0bmFtZS5yZXBsYWNlKEEsIiIpO3JldHVybntocmVmOmIuaHJlZixwcm90b2NvbDpiLnByb3RvY29sLGhvc3Q6Yi5ob3N0LGhvc3RuYW1lOmEscGF0aG5hbWU6YyxzZWFyY2g6Yi5zZWFyY2gsaGFzaDpiLmhhc2gscG9ydDpiLnBvcnR9fTtmdW5jdGlvbiBHKCl7Zm9yKHZhciBhPUgsYj17fSxjPTA7YzxhLmxlbmd0aDsrK2MpYlthW2NdXT1jO3JldHVybiBifWZ1bmN0aW9uIEkoKXt2YXIgYT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiO2ErPWEudG9Mb3dlckNhc2UoKSsiMDEyMzQ1Njc4OS1fIjtyZXR1cm4gYSsiLiJ9dmFyIEgsSjtmdW5jdGlvbiBLKGEpe0g9SHx8SSgpO0o9Snx8RygpO2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKz0zKXt2YXIgZD1jKzE8YS5sZW5ndGgsZT1jKzI8YS5sZW5ndGgsZj1hLmNoYXJDb2RlQXQoYyksZz1kP2EuY2hhckNvZGVBdChjKzEpOjAsaD1lP2EuY2hhckNvZGVBdChjKzIpOjAsaz1mPj4yO2Y9KGYmMyk8PDR8Zz4+NDtnPShnJjE1KTw8MnxoPj42O2gmPTYzO2V8fChoPTY0LGR8fChnPTY0KSk7Yi5wdXNoKEhba10sSFtmXSxIW2ddLEhbaF0pfXJldHVybiBiLmpvaW4oIiIpfQpmdW5jdGlvbiBiYShhKXtmdW5jdGlvbiBiKGspe2Zvcig7ZDxhLmxlbmd0aDspe3ZhciBuPWEuY2hhckF0KGQrKykscD1KW25dO2lmKG51bGwhPXApcmV0dXJuIHA7aWYoIS9eW1xzXHhhMF0qJC8udGVzdChuKSl0aHJvdyBFcnJvcigiVW5rbm93biBiYXNlNjQgZW5jb2RpbmcgYXQgY2hhcjogIituKTt9cmV0dXJuIGt9SD1IfHxJKCk7Sj1KfHxHKCk7Zm9yKHZhciBjPSIiLGQ9MDs7KXt2YXIgZT1iKC0xKSxmPWIoMCksZz1iKDY0KSxoPWIoNjQpO2lmKDY0PT09aCYmLTE9PT1lKXJldHVybiBjO2MrPVN0cmluZy5mcm9tQ2hhckNvZGUoZTw8MnxmPj40KTs2NCE9ZyYmKGMrPVN0cmluZy5mcm9tQ2hhckNvZGUoZjw8NCYyNDB8Zz4+MiksNjQhPWgmJihjKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGc8PDYmMTkyfGgpKSl9fTt2YXIgTDt2YXIgTT12b2lkIDAsTz1mdW5jdGlvbigpe3ZhciBhPWNhLGI9ZGEsYz1OKCksZD1mdW5jdGlvbihnKXthKGcudGFyZ2V0fHxnLnNyY0VsZW1lbnR8fHt9KX0sZT1mdW5jdGlvbihnKXtiKGcudGFyZ2V0fHxnLnNyY0VsZW1lbnR8fHt9KX07aWYoIWMuaW5pdCl7eCgibW91c2Vkb3duIixkKTt4KCJrZXl1cCIsZCk7eCgic3VibWl0IixlKTt2YXIgZj1IVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnN1Ym1pdDtIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnN1Ym1pdD1mdW5jdGlvbigpe2IodGhpcyk7Zi5jYWxsKHRoaXMpfTtjLmluaXQ9ITB9fSxQPWZ1bmN0aW9uKGEsYixjLGQsZSl7YT17Y2FsbGJhY2s6YSxkb21haW5zOmIsZnJhZ21lbnQ6Mj09PWMscGxhY2VtZW50OmMsZm9ybXM6ZCxzYW1lSG9zdDplfTtOKCkuZGVjb3JhdG9ycy5wdXNoKGEpfSxRPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9TigpLmRlY29yYXRvcnMsZT17fSxmPTA7ZjxkLmxlbmd0aDsrK2Ype3ZhciBnPWRbZl0sCmg7aWYoaD0hY3x8Zy5mb3JtcylhOntoPWcuZG9tYWluczt2YXIgaz1hLG49ISFnLnNhbWVIb3N0O2lmKGgmJihufHxrIT09di5sb2NhdGlvbi5ob3N0bmFtZSkpZm9yKHZhciBwPTA7cDxoLmxlbmd0aDtwKyspaWYoaFtwXWluc3RhbmNlb2YgUmVnRXhwKXtpZihoW3BdLnRlc3Qoaykpe2g9ITA7YnJlYWsgYX19ZWxzZSBpZigwPD1rLmluZGV4T2YoaFtwXSl8fG4mJjA8PWhbcF0uaW5kZXhPZihrKSl7aD0hMDticmVhayBhfWg9ITF9aCYmKGg9Zy5wbGFjZW1lbnQsdm9pZCAwPT1oJiYoaD1nLmZyYWdtZW50PzI6MSksaD09PWImJm0oZSxnLmNhbGxiYWNrKCkpKX1yZXR1cm4gZX07ZnVuY3Rpb24gTigpe3ZhciBhPXt9O3ZhciBiPXQuZ29vZ2xlX3RhZ19kYXRhO3QuZ29vZ2xlX3RhZ19kYXRhPXZvaWQgMD09PWI/YTpiO2E9dC5nb29nbGVfdGFnX2RhdGE7Yj1hLmdsO2ImJmIuZGVjb3JhdG9yc3x8KGI9e2RlY29yYXRvcnM6W119LGEuZ2w9Yik7cmV0dXJuIGJ9O3ZhciBlYT0vKC4qPylcKiguKj8pXCooLiopLyxmYT0vKFtePyNdKykoXD9bXiNdKik/KCMuKik/LztmdW5jdGlvbiBSKGEpe3JldHVybiBuZXcgUmVnRXhwKCIoLio/KShefCYpIithKyI9KFteJl0qKSY/KC4qKSIpfXZhciBUPWZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZDtmb3IoZCBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoZCkpe3ZhciBlPWFbZF07dm9pZCAwIT09ZSYmZT09PWUmJm51bGwhPT1lJiYiW29iamVjdCBPYmplY3RdIiE9PWUudG9TdHJpbmcoKSYmKGMucHVzaChkKSxjLnB1c2goSyhTdHJpbmcoZSkpKSl9YT1jLmpvaW4oIioiKTt2b2lkIDAhPT1iJiYoYz0ieHBfIitiLGI9aGFbYl0oYSksYT1hKyIqIitbYyxLKFN0cmluZyhiKSldLmpvaW4oIioiKSk7cmV0dXJuWyIxIixTKGEpLGFdLmpvaW4oIioiKX07CmZ1bmN0aW9uIFMoYSxiKXthPVt0Lm5hdmlnYXRvci51c2VyQWdlbnQsKG5ldyBEYXRlKS5nZXRUaW1lem9uZU9mZnNldCgpLHcudXNlckxhbmd1YWdlfHx3Lmxhbmd1YWdlLE1hdGguZmxvb3IoKG5ldyBEYXRlKERhdGUubm93KCkpKS5nZXRUaW1lKCkvNjAvMUUzKS0odm9pZCAwPT09Yj8wOmIpLGFdLmpvaW4oIioiKTtpZighKGI9TCkpe2I9QXJyYXkoMjU2KTtmb3IodmFyIGM9MDsyNTY+YztjKyspe2Zvcih2YXIgZD1jLGU9MDs4PmU7ZSsrKWQ9ZCYxP2Q+Pj4xXjM5ODgyOTIzODQ6ZD4+PjE7YltjXT1kfX1MPWI7Yj00Mjk0OTY3Mjk1O2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYj1iPj4+OF5MWyhiXmEuY2hhckNvZGVBdChjKSkmMjU1XTtyZXR1cm4oKGJeLTEpPj4+MCkudG9TdHJpbmcoMzYpfXZhciBVPXt9LGhhPShVWzFdPWlhLFVbMl09amEsVVszXT1rYSxVKTtmdW5jdGlvbiBpYSgpe3JldHVybiJDSEVDS1NVTV9FWFBfRElTQUJMRUQifQpmdW5jdGlvbiBqYSgpe3JldHVybiJDSEVDS1NVTV9FWFBfRElTQUJMRUQifWZ1bmN0aW9uIGxhKCl7dy51c2VyQWdlbnREYXRhJiZ3LnVzZXJBZ2VudERhdGEuZ2V0SGlnaEVudHJvcHlWYWx1ZXMoWyJhcmNoaXRlY3R1cmUiLCJtb2RlbCIsImJpdG5lc3MiLCJwbGF0Zm9ybVZlcnNpb24iLCJ1YUZ1bGxWZXJzaW9uIl0pLnRoZW4oZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiBrYSgpe3JldHVybiJDSEVDS1NVTV9FWFBfRElTQUJMRUQifWZ1bmN0aW9uIG1hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1GKHQubG9jYXRpb24uaHJlZiksZD1jLnNlYXJjaC5yZXBsYWNlKCI/IiwiIik7dmFyIGU9QihkLCJfZ2wiLCEwKTtiLnF1ZXJ5PVYoZXx8IiIpfHx7fTtlPUUoYywiZnJhZ21lbnQiKTt2YXIgZj1lLm1hdGNoKFIoIl9nbCIpKTtiLmZyYWdtZW50PVYoZiYmZlszXXx8IiIpfHx7fTthJiZuYShjLGQsZSl9fQpmdW5jdGlvbiBXKGEsYil7aWYoYT1SKGEpLmV4ZWMoYikpe3ZhciBjPWFbMl0sZD1hWzRdO2I9YVsxXTtkJiYoYj1iK2MrZCl9cmV0dXJuIGJ9ZnVuY3Rpb24gbmEoYSxiLGMpe2Z1bmN0aW9uIGQoZixnKXtmPVcoIl9nbCIsZik7Zi5sZW5ndGgmJihmPWcrZik7cmV0dXJuIGZ9aWYodSYmdS5yZXBsYWNlU3RhdGUpe3ZhciBlPVIoIl9nbCIpO2lmKGUudGVzdChiKXx8ZS50ZXN0KGMpKWE9RShhLCJwYXRoIiksYj1kKGIsIj8iKSxjPWQoYywiIyIpLHUucmVwbGFjZVN0YXRlKHt9LHZvaWQgMCwiIithK2IrYyl9fQp2YXIgVj1mdW5jdGlvbihhKXt2YXIgYj12b2lkIDA9PT1iPzM6Yjt0cnl7aWYoYSl7YTp7Zm9yKHZhciBjPTA7Mz5jOysrYyl7dmFyIGQ9ZWEuZXhlYyhhKTtpZihkKXt2YXIgZT1kO2JyZWFrIGF9YT1kZWNvZGVVUklDb21wb25lbnQoYSl9ZT12b2lkIDB9aWYoZSYmIjEiPT09ZVsxXSl7dmFyIGY9ZVsyXSxnPWVbM107YTp7Zm9yKGU9MDtlPGI7KytlKWlmKGY9PT1TKGcsZSkpe3ZhciBoPSEwO2JyZWFrIGF9aD0hMX1pZihoKXtiPXt9O3ZhciBrPWc/Zy5zcGxpdCgiKiIpOltdO2ZvcihnPTA7ZzxrLmxlbmd0aDtnKz0yKWJba1tnXV09YmEoa1tnKzFdKTtyZXR1cm4gYn19fX1jYXRjaChuKXt9fTsKZnVuY3Rpb24gWChhLGIsYyxkKXtmdW5jdGlvbiBlKGspe2s9VyhhLGspO3ZhciBuPWsuY2hhckF0KGsubGVuZ3RoLTEpO2smJiImIiE9PW4mJihrKz0iJiIpO3JldHVybiBrK2h9ZD12b2lkIDA9PT1kPyExOmQ7dmFyIGY9ZmEuZXhlYyhjKTtpZighZilyZXR1cm4iIjtjPWZbMV07dmFyIGc9ZlsyXXx8IiI7Zj1mWzNdfHwiIjt2YXIgaD1hKyI9IitiO2Q/Zj0iIyIrZShmLnN1YnN0cmluZygxKSk6Zz0iPyIrZShnLnN1YnN0cmluZygxKSk7cmV0dXJuIiIrYytnK2Z9ZnVuY3Rpb24gWShhLGIpe3ZhciBjPSJGT1JNIj09PShhLnRhZ05hbWV8fCIiKS50b1VwcGVyQ2FzZSgpLGQ9UShiLDEsYyksZT1RKGIsMixjKTtiPVEoYiwzLGMpO3ZhciBmPU07cShkKSYmKGQ9VChkLGYpLGM/b2EoIl9nbCIsZCxhKTpaKCJfZ2wiLGQsYSwhMSkpOyFjJiZxKGUpJiYoYz1UKGUpLFooIl9nbCIsYyxhLCEwKSk7Zm9yKHZhciBnIGluIGIpYi5oYXNPd25Qcm9wZXJ0eShnKSYmcGEoZyxiW2ddLGEpfQpmdW5jdGlvbiBwYShhLGIsYyxkKXtpZihjLnRhZ05hbWUpe2lmKCJhIj09PWMudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBaKGEsYixjLGQpO2lmKCJmb3JtIj09PWMudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBvYShhLGIsYyl9aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBYKGEsYixjLGQpfWZ1bmN0aW9uIFooYSxiLGMsZCl7Yy5ocmVmJiYoYT1YKGEsYixjLmhyZWYsdm9pZCAwPT09ZD8hMTpkKSxyLnRlc3QoYSkmJihjLmhyZWY9YSkpfQpmdW5jdGlvbiBvYShhLGIsYyl7aWYoYyYmYy5hY3Rpb24pe3ZhciBkPShjLm1ldGhvZHx8IiIpLnRvTG93ZXJDYXNlKCk7aWYoImdldCI9PT1kKXtkPWMuY2hpbGROb2Rlc3x8W107Zm9yKHZhciBlPSExLGY9MDtmPGQubGVuZ3RoO2YrKyl7dmFyIGc9ZFtmXTtpZihnLm5hbWU9PT1hKXtnLnNldEF0dHJpYnV0ZSgidmFsdWUiLGIpO2U9ITA7YnJlYWt9fWV8fChkPXYuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxkLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGQuc2V0QXR0cmlidXRlKCJuYW1lIixhKSxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLGIpLGMuYXBwZW5kQ2hpbGQoZCkpfWVsc2UicG9zdCI9PT1kJiYoYT1YKGEsYixjLmFjdGlvbiksci50ZXN0KGEpJiYoYy5hY3Rpb249YSkpfX0KZnVuY3Rpb24gY2EoYSl7dHJ5e2E6e2Zvcih2YXIgYj0xMDA7YSYmMDxiOyl7aWYoYS5ocmVmJiZhLm5vZGVOYW1lLm1hdGNoKC9eYSg/OnJlYSk/JC9pKSl7dmFyIGM9YTticmVhayBhfWE9YS5wYXJlbnROb2RlO2ItLX1jPW51bGx9aWYoYyl7dmFyIGQ9Yy5wcm90b2NvbDsiaHR0cDoiIT09ZCYmImh0dHBzOiIhPT1kfHxZKGMsYy5ob3N0bmFtZSl9fWNhdGNoKGUpe319ZnVuY3Rpb24gZGEoYSl7dHJ5e2lmKGEuYWN0aW9uKXt2YXIgYj1FKEYoYS5hY3Rpb24pLCJob3N0Iik7WShhLGIpfX1jYXRjaChjKXt9fTtsKCJnb29nbGVfdGFnX2RhdGEuZ2xCcmlkZ2UuYXV0byIsZnVuY3Rpb24oYSxiLGMsZCxlKXtPKCk7dm9pZCAwIT09ZSYmKE09ZSk7Mz09PWUmJmxhKCk7UChhLGIsImZyYWdtZW50Ij09PWM/MjoxLCEhZCwhMSl9KTtsKCJnb29nbGVfdGFnX2RhdGEuZ2xCcmlkZ2UucGFzc3Rocm91Z2giLGZ1bmN0aW9uKGEsYixjLGQpe08oKTt2b2lkIDAhPT1kJiYoTT1kKTtQKGEsW0QodC5sb2NhdGlvbiwiaG9zdCIsITApXSxiLCEhYywhMCl9KTtsKCJnb29nbGVfdGFnX2RhdGEuZ2xCcmlkZ2UuZGVjb3JhdGUiLGZ1bmN0aW9uKGEsYixjKXthPVQoYSk7cmV0dXJuIHBhKCJfZ2wiLGEsYiwhIWMpfSk7bCgiZ29vZ2xlX3RhZ19kYXRhLmdsQnJpZGdlLmdlbmVyYXRlIixUKTsKbCgiZ29vZ2xlX3RhZ19kYXRhLmdsQnJpZGdlLmdldCIsZnVuY3Rpb24oYSxiKXt2YXIgYz1tYSghIWIpO2I9TigpO2IuZGF0YXx8KGIuZGF0YT17cXVlcnk6e30sZnJhZ21lbnQ6e319LGMoYi5kYXRhKSk7Yz17fTtpZihiPWIuZGF0YSltKGMsYi5xdWVyeSksYSYmbShjLGIuZnJhZ21lbnQpO3JldHVybiBjfSk7fSkod2luZG93KTsKKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gTGEoYSl7dmFyIGI9MSxjO2lmKGEpZm9yKGI9MCxjPWEubGVuZ3RoLTE7MDw9YztjLS0pe3ZhciBkPWEuY2hhckNvZGVBdChjKTtiPShiPDw2JjI2ODQzNTQ1NSkrZCsoZDw8MTQpO2Q9YiYyNjYzMzgzMDQ7Yj0wIT1kP2JeZD4+MjE6Yn1yZXR1cm4gYn07LyoKCiBDb3B5cmlnaHQgVGhlIENsb3N1cmUgTGlicmFyeSBBdXRob3JzLgogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKi8KdmFyICRjPWZ1bmN0aW9uKGEpe3RoaXMuQz1hfHxbXX07JGMucHJvdG90eXBlLnNldD1mdW5jdGlvbihhKXt0aGlzLkNbYV09ITB9OyRjLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sYj0wO2I8dGhpcy5DLmxlbmd0aDtiKyspdGhpcy5DW2JdJiYoYVtNYXRoLmZsb29yKGIvNildXj0xPDxiJTYpO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspYVtiXT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXyIuY2hhckF0KGFbYl18fDApO3JldHVybiBhLmpvaW4oIiIpKyJ+In07dmFyIGhhPXdpbmRvdy5Hb29nbGVBbmFseXRpY3NPYmplY3Qsd2E7aWYod2E9dm9pZCAwIT1oYSl3YT0tMTwoaGEuY29uc3RydWN0b3IrIiIpLmluZGV4T2YoIlN0cmluZyIpO3ZhciB5YTtpZih5YT13YSl7dmFyIGZjPXdpbmRvdy5Hb29nbGVBbmFseXRpY3NPYmplY3Q7eWE9ZmM/ZmMucmVwbGFjZSgvXltcc1x4YTBdK3xbXHNceGEwXSskL2csIiIpOiIifXZhciBnYj15YXx8ImdhIixqZD0vXig/OnV0bWFcLik/XGQrXC5cZCskLyxrZD0vXmFtcC1bXHcuLV17MjIsNjR9JC8sQmE9ITE7dmFyIHZkPW5ldyAkYztmdW5jdGlvbiBKKGEpe3ZkLnNldChhKX12YXIgVGQ9ZnVuY3Rpb24oYSl7YT1EZChhKTthPW5ldyAkYyhhKTtmb3IodmFyIGI9dmQuQy5zbGljZSgpLGM9MDtjPGEuQy5sZW5ndGg7YysrKWJbY109YltjXXx8YS5DW2NdO3JldHVybihuZXcgJGMoYikpLmVuY29kZSgpfSxEZD1mdW5jdGlvbihhKXthPWEuZ2V0KEdkKTtrYShhKXx8KGE9W10pO3JldHVybiBhfTt2YXIgZWE9ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGF9LGthPWZ1bmN0aW9uKGEpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChPYmplY3QoYSkpfSxxYT1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwIT1hJiYtMTwoYS5jb25zdHJ1Y3RvcisiIikuaW5kZXhPZigiU3RyaW5nIil9LEQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09YS5pbmRleE9mKGIpfSxzYT1mdW5jdGlvbihhKXtyZXR1cm4gYT9hLnJlcGxhY2UoL15bXHNceGEwXSt8W1xzXHhhMF0rJC9nLCIiKToiIn0scmE9ZnVuY3Rpb24oKXtmb3IodmFyIGE9Ty5uYXZpZ2F0b3IudXNlckFnZW50KyhNLmNvb2tpZT9NLmNvb2tpZToiIikrKE0ucmVmZXJyZXI/TS5yZWZlcnJlcjoiIiksYj1hLmxlbmd0aCxjPU8uaGlzdG9yeS5sZW5ndGg7MDxjOylhKz1jLS1eYisrO3JldHVybltoZCgpXkxhKGEpJjIxNDc0ODM2NDcsTWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8KMUUzKV0uam9pbigiLiIpfSx0YT1mdW5jdGlvbihhKXt2YXIgYj1NLmNyZWF0ZUVsZW1lbnQoImltZyIpO2Iud2lkdGg9MTtiLmhlaWdodD0xO2Iuc3JjPWE7cmV0dXJuIGJ9LHVhPWZ1bmN0aW9uKCl7fSxLPWZ1bmN0aW9uKGEpe2lmKGVuY29kZVVSSUNvbXBvbmVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybiBlbmNvZGVVUklDb21wb25lbnQoYSk7SigyOCk7cmV0dXJuIGF9LEw9ZnVuY3Rpb24oYSxiLGMsZCl7dHJ5e2EuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2ZW50TGlzdGVuZXIoYixjLCEhZCk6YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib24iK2IsYyl9Y2F0Y2goZSl7SigyNyl9fSxmPS9eW1x3XC06Ly4/PSYlIVxbXF1dKyQvLE5kPS9eW1x3Ky9fLV0rWz1dezAsMn0kLyxmZj1udWxsLElkPWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoIWZmKXtmZj17Y3JlYXRlU2NyaXB0VVJMOmZ1bmN0aW9uKGNhKXtyZXR1cm4gY2F9LGNyZWF0ZUhUTUw6ZnVuY3Rpb24oY2Epe3JldHVybiBjYX19Owp0cnl7ZmY9d2luZG93LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImdvb2dsZS1hbmFseXRpY3MiLGZmKX1jYXRjaChjYSl7fX1pZihhKXt2YXIgZz1NLnF1ZXJ5U2VsZWN0b3ImJk0ucXVlcnlTZWxlY3Rvcigic2NyaXB0W25vbmNlXSIpfHxudWxsO2c9Zz9nLm5vbmNlfHxnLmdldEF0dHJpYnV0ZSYmZy5nZXRBdHRyaWJ1dGUoIm5vbmNlIil8fCIiOiIiO2M/KGU9ZD0iIixiJiZmLnRlc3QoYikmJihkPScgaWQ9IicrYisnIicpLGcmJk5kLnRlc3QoZykmJihlPScgbm9uY2U9IicrZysnIicpLGYudGVzdChhKSYmTS53cml0ZShmZi5jcmVhdGVIVE1MKCI8c2NyaXB0IitkK2UrJyBzcmM9IicrYSsnIj5ceDNjL3NjcmlwdD4nKSkpOihjPU0uY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYy50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiLGMuYXN5bmM9ITAsYy5zcmM9ZmYuY3JlYXRlU2NyaXB0VVJMKGEpLGQmJihjLm9ubG9hZD1kKSxlJiYoYy5vbmVycm9yPWUpLGImJihjLmlkPWIpLGcmJmMuc2V0QXR0cmlidXRlKCJub25jZSIsCmcpLGE9TS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF0sYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjLGEpKX19LGJlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIEUoTS5sb2NhdGlvbltiPyJocmVmIjoic2VhcmNoIl0sYSl9LEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYT1hLm1hdGNoKCIoPzomfCN8XFw/KSIrSyhiKS5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8XFtcXVwvXFxdKS9nLCJcXCQxIikrIj0oW14mI10qKSIpKSYmMj09YS5sZW5ndGg/YVsxXToiIn0seGE9ZnVuY3Rpb24oKXt2YXIgYT0iIitNLmxvY2F0aW9uLmhvc3RuYW1lO3JldHVybiAwPT1hLmluZGV4T2YoInd3dy4iKT9hLnN1YnN0cmluZyg0KTphfSxkZT1mdW5jdGlvbihhLGIpe3ZhciBjPWEuaW5kZXhPZihiKTtpZig1PT1jfHw2PT1jKWlmKGE9YS5jaGFyQXQoYytiLmxlbmd0aCksIi8iPT1hfHwiPyI9PWF8fCIiPT1hfHwiOiI9PWEpcmV0dXJuITA7cmV0dXJuITF9LHphPWZ1bmN0aW9uKGEsYil7aWYoMT09CmIubGVuZ3RoJiZudWxsIT1iWzBdJiYib2JqZWN0Ij09PXR5cGVvZiBiWzBdKXJldHVybiBiWzBdO2Zvcih2YXIgYz17fSxkPU1hdGgubWluKGEubGVuZ3RoKzEsYi5sZW5ndGgpLGU9MDtlPGQ7ZSsrKWlmKCJvYmplY3QiPT09dHlwZW9mIGJbZV0pe2Zvcih2YXIgZyBpbiBiW2VdKWJbZV0uaGFzT3duUHJvcGVydHkoZykmJihjW2ddPWJbZV1bZ10pO2JyZWFrfWVsc2UgZTxhLmxlbmd0aCYmKGNbYVtlXV09YltlXSk7cmV0dXJuIGN9LEVlPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYj09YVtjXSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIGVlPWZ1bmN0aW9uKCl7dGhpcy5vYT1bXTt0aGlzLmVhPXt9O3RoaXMubT17fX07ZWUucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7dGhpcy5vYS5wdXNoKGEpO2M/dGhpcy5tWyI6IithXT1iOnRoaXMuZWFbIjoiK2FdPWJ9O2VlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubS5oYXNPd25Qcm9wZXJ0eSgiOiIrYSk/dGhpcy5tWyI6IithXTp0aGlzLmVhWyI6IithXX07ZWUucHJvdG90eXBlLm1hcD1mdW5jdGlvbihhKXtmb3IodmFyIGI9MDtiPHRoaXMub2EubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5vYVtiXSxkPXRoaXMuZ2V0KGMpO2QmJmEoYyxkKX19O3ZhciBPPXdpbmRvdyxNPWRvY3VtZW50LGpmPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6IiIsdmE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gc2V0VGltZW91dChhLGIpfTt2YXIgUWE9d2luZG93LFphPWRvY3VtZW50LEc9ZnVuY3Rpb24oYSl7dmFyIGI9UWEuX2dhVXNlclByZWZzO2lmKGImJmIuaW9vJiZiLmlvbygpfHxhJiYhMD09PVFhWyJnYS1kaXNhYmxlLSIrYV0pcmV0dXJuITA7dHJ5e3ZhciBjPVFhLmV4dGVybmFsO2lmKGMmJmMuX2dhVXNlclByZWZzJiYib28iPT1jLl9nYVVzZXJQcmVmcylyZXR1cm4hMH1jYXRjaChnKXt9YT1bXTtiPVN0cmluZyhaYS5jb29raWUpLnNwbGl0KCI7Iik7Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXS5zcGxpdCgiPSIpLGU9ZFswXS5yZXBsYWNlKC9eXHMqfFxzKiQvZywiIik7ZSYmIkFNUF9UT0tFTiI9PWUmJigoZD1kLnNsaWNlKDEpLmpvaW4oIj0iKS5yZXBsYWNlKC9eXHMqfFxzKiQvZywiIikpJiYoZD1kZWNvZGVVUklDb21wb25lbnQoZCkpLGEucHVzaChkKSl9Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylpZigiJE9QVF9PVVQiPT1hW2JdKXJldHVybiEwO3JldHVybiBaYS5nZXRFbGVtZW50QnlJZCgiX19nYU9wdE91dEV4dGVuc2lvbiIpPwohMDohMX07dmFyIENhPWZ1bmN0aW9uKGEpe3ZhciBiPVtdLGM9TS5jb29raWUuc3BsaXQoIjsiKTthPW5ldyBSZWdFeHAoIl5cXHMqIithKyI9XFxzKiguKj8pXFxzKiQiKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXS5tYXRjaChhKTtlJiZiLnB1c2goZVsxXSl9cmV0dXJuIGJ9LHpjPWZ1bmN0aW9uKGEsYixjLGQsZSxnLGNhKXtlPUcoZSk/ITE6ZWIudGVzdChNLmxvY2F0aW9uLmhvc3RuYW1lKXx8Ii8iPT1jJiZ2Yy50ZXN0KGQpPyExOiEwO2lmKCFlKXJldHVybiExO2ImJjEyMDA8Yi5sZW5ndGgmJihiPWIuc3Vic3RyaW5nKDAsMTIwMCkpO2M9YSsiPSIrYisiOyBwYXRoPSIrYysiOyAiO2cmJihjKz0iZXhwaXJlcz0iKyhuZXcgRGF0ZSgobmV3IERhdGUpLmdldFRpbWUoKStnKSkudG9HTVRTdHJpbmcoKSsiOyAiKTtkJiYibm9uZSIhPT1kJiYoYys9ImRvbWFpbj0iK2QrIjsiKTtjYSYmKGMrPWNhKyI7Iik7ZD1NLmNvb2tpZTtNLmNvb2tpZT1jO2lmKCEoZD1kIT1NLmNvb2tpZSkpYTp7YT0KQ2EoYSk7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylpZihiPT1hW2RdKXtkPSEwO2JyZWFrIGF9ZD0hMX1yZXR1cm4gZH0sQ2M9ZnVuY3Rpb24oYSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudD9lbmNvZGVVUklDb21wb25lbnQoYSkucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5Iik6YX0sdmM9L14od3d3XC4pP2dvb2dsZShcLmNvbT8pPyhcLlthLXpdezJ9KT8kLyxlYj0vKF58XC4pZG91YmxlY2xpY2tcLm5ldCQvaTt2YXIgT2U9ZnVuY3Rpb24oYSl7dmFyIGI9W10sYz1NLmNvb2tpZS5zcGxpdCgiOyIpO2E9bmV3IFJlZ0V4cCgiXlxccyoiKyhhfHwiX2dhYyIpKyJfKFVBLVxcZCstXFxkKyk9XFxzKiguKz8pXFxzKiQiKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXS5tYXRjaChhKTtlJiZiLnB1c2goe2phOmVbMV0sdmFsdWU6ZVsyXSx0aW1lc3RhbXA6TnVtYmVyKGVbMl0uc3BsaXQoIi4iKVsxXSl8fDB9KX1iLnNvcnQoZnVuY3Rpb24oZyxjYSl7cmV0dXJuIGNhLnRpbWVzdGFtcC1nLnRpbWVzdGFtcH0pO3JldHVybiBifTsKZnVuY3Rpb24gZGYoYSxiLGMpe2I9T2UoYik7dmFyIGQ9e307aWYoIWJ8fCFiLmxlbmd0aClyZXR1cm4gZDtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIGc9YltlXS52YWx1ZS5zcGxpdCgiLiIpO2lmKCIxIiE9PWdbMF18fGMmJjM+Zy5sZW5ndGh8fCFjJiYzIT09Zy5sZW5ndGgpYSYmKGEubmE9ITApO2Vsc2UgaWYoTnVtYmVyKGdbMV0pKXtkW2JbZV0uamFdP2EmJihhLnBhPSEwKTpkW2JbZV0uamFdPVtdO3ZhciBjYT17dmVyc2lvbjpnWzBdLHRpbWVzdGFtcDoxRTMqTnVtYmVyKGdbMV0pLHFhOmdbMl19O2MmJjM8Zy5sZW5ndGgmJihjYS5sYWJlbHM9Zy5zbGljZSgzKSk7ZFtiW2VdLmphXS5wdXNoKGNhKX19cmV0dXJuIGR9O3ZhciBGYSxHYSxmYixBYixqYT0vXmh0dHBzPzpcL1wvW14vXSpjZG5cLmFtcHByb2plY3RcLm9yZ1wvLyxVZT0vXig/Ond3d1wufG1cLnxhbXBcLikrLyxVYj1bXSxkYT1mdW5jdGlvbihhKXtpZih5ZShhW0tkXSkpe2lmKHZvaWQgMD09PUFiKXt2YXIgYjtpZihiPShiPURlLmdldCgpKSYmYi5fZ2F8fHZvaWQgMClBYj1iLEooODEpfWlmKHZvaWQgMCE9PUFiKXJldHVybiBhW1FdfHwoYVtRXT1BYiksITF9aWYoYVtLZF0pe0ooNjcpO2lmKGFbYWNdJiYiY29va2llIiE9YVthY10pcmV0dXJuITE7aWYodm9pZCAwIT09QWIpYVtRXXx8KGFbUV09QWIpO2Vsc2V7YTp7Yj1TdHJpbmcoYVtXXXx8eGEoKSk7dmFyIGM9U3RyaW5nKGFbWWJdfHwiLyIpLGQ9Q2EoU3RyaW5nKGFbVV18fCJfZ2EiKSk7Yj1uYShkLGIsYyk7aWYoIWJ8fGpkLnRlc3QoYikpYj0hMDtlbHNlIGlmKGI9Q2EoIkFNUF9UT0tFTiIpLDA9PWIubGVuZ3RoKWI9ITA7ZWxzZXtpZigxPT1iLmxlbmd0aCYmKGI9ZGVjb2RlVVJJQ29tcG9uZW50KGJbMF0pLAoiJFJFVFJJRVZJTkciPT1ifHwiJE9QVF9PVVQiPT1ifHwiJEVSUk9SIj09Ynx8IiROT1RfRk9VTkQiPT1iKSl7Yj0hMDticmVhayBhfWI9ITF9fWlmKGImJnRjKGljLFN0cmluZyhhW05hXSkpKXJldHVybiEwfX1yZXR1cm4hMX0saWM9ZnVuY3Rpb24oKXtaLkQoW3VhXSl9LHRjPWZ1bmN0aW9uKGEsYil7dmFyIGM9Q2EoIkFNUF9UT0tFTiIpO2lmKDE8Yy5sZW5ndGgpcmV0dXJuIEooNTUpLCExO2M9ZGVjb2RlVVJJQ29tcG9uZW50KGNbMF18fCIiKTtpZigiJE9QVF9PVVQiPT1jfHwiJEVSUk9SIj09Y3x8RyhiKSlyZXR1cm4gSig2MiksITE7aWYoIWphLnRlc3QoTS5yZWZlcnJlcikmJiIkTk9UX0ZPVU5EIj09YylyZXR1cm4gSig2OCksITE7aWYodm9pZCAwIT09QWIpcmV0dXJuIEooNTYpLHZhKGZ1bmN0aW9uKCl7YShBYil9LDApLCEwO2lmKEZhKXJldHVybiBVYi5wdXNoKGEpLCEwO2lmKCIkUkVUUklFVklORyI9PWMpcmV0dXJuIEooNTcpLHZhKGZ1bmN0aW9uKCl7dGMoYSxiKX0sCjFFNCksITA7RmE9ITA7YyYmIiQiIT1jWzBdfHwoeGMoIiRSRVRSSUVWSU5HIiwzRTQpLHNldFRpbWVvdXQoTWMsM0U0KSxjPSIiKTtyZXR1cm4gUGMoYyxiKT8oVWIucHVzaChhKSwhMCk6ITF9LFBjPWZ1bmN0aW9uKGEsYixjKXtpZighd2luZG93LkpTT04pcmV0dXJuIEooNTgpLCExO3ZhciBkPU8uWE1MSHR0cFJlcXVlc3Q7aWYoIWQpcmV0dXJuIEooNTkpLCExO3ZhciBlPW5ldyBkO2lmKCEoIndpdGhDcmVkZW50aWFscyJpbiBlKSlyZXR1cm4gSig2MCksITE7ZS5vcGVuKCJQT1NUIiwoY3x8Imh0dHBzOi8vYW1wY2lkLmdvb2dsZS5jb20vdjEvcHVibGlzaGVyOmdldENsaWVudElkIikrIj9rZXk9QUl6YVN5QTY1bEVIVUVpeklzTnRsYk5vLWwySzE4ZFQ2ODBuc2FNIiwhMCk7ZS53aXRoQ3JlZGVudGlhbHM9ITA7ZS5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJ0ZXh0L3BsYWluIik7ZS5vbmxvYWQ9ZnVuY3Rpb24oKXtGYT0hMTtpZig0PT1lLnJlYWR5U3RhdGUpe3RyeXsyMDAhPQplLnN0YXR1cyYmKEooNjEpLFFjKCIiLCIkRVJST1IiLDNFNCkpO3ZhciBnPUpTT04ucGFyc2UoZS5yZXNwb25zZVRleHQpO2cub3B0T3V0PyhKKDYzKSxRYygiIiwiJE9QVF9PVVQiLDMxNTM2RTYpKTpnLmNsaWVudElkP1FjKGcuY2xpZW50SWQsZy5zZWN1cml0eVRva2VuLDMxNTM2RTYpOiFjJiZnLmFsdGVybmF0ZVVybD8oR2EmJmNsZWFyVGltZW91dChHYSksRmE9ITAsUGMoYSxiLGcuYWx0ZXJuYXRlVXJsKSk6KEooNjQpLFFjKCIiLCIkTk9UX0ZPVU5EIiwzNkU1KSl9Y2F0Y2goY2Epe0ooNjUpLFFjKCIiLCIkRVJST1IiLDNFNCl9ZT1udWxsfX07ZD17b3JpZ2luU2NvcGU6IkFNUF9FQ0lEX0dPT0dMRSJ9O2EmJihkLnNlY3VyaXR5VG9rZW49YSk7ZS5zZW5kKEpTT04uc3RyaW5naWZ5KGQpKTtHYT12YShmdW5jdGlvbigpe0ooNjYpO1FjKCIiLCIkRVJST1IiLDNFNCl9LDFFNCk7cmV0dXJuITB9LE1jPWZ1bmN0aW9uKCl7RmE9ITF9LHhjPWZ1bmN0aW9uKGEsYil7aWYodm9pZCAwPT09CmZiKXtmYj0iIjtmb3IodmFyIGM9aWQoKSxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07aWYoemMoIkFNUF9UT0tFTiIsZW5jb2RlVVJJQ29tcG9uZW50KGEpLCIvIixlLCIiLGIpKXtmYj1lO3JldHVybn19fXpjKCJBTVBfVE9LRU4iLGVuY29kZVVSSUNvbXBvbmVudChhKSwiLyIsZmIsIiIsYil9LFFjPWZ1bmN0aW9uKGEsYixjKXtHYSYmY2xlYXJUaW1lb3V0KEdhKTtiJiZ4YyhiLGMpO0FiPWE7Yj1VYjtVYj1bXTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10oYSl9LHllPWZ1bmN0aW9uKGEpe2E6e2lmKGphLnRlc3QoTS5yZWZlcnJlcikpe3ZhciBiPU0ubG9jYXRpb24uaG9zdG5hbWUucmVwbGFjZShVZSwiIik7Yjp7dmFyIGM9TS5yZWZlcnJlcjtjPWMucmVwbGFjZSgvXmh0dHBzPzpcL1wvLywiIik7dmFyIGQ9Yy5yZXBsYWNlKC9eW14vXSsvLCIiKS5zcGxpdCgiLyIpLGU9ZFsyXTtkPShkPSJzIj09ZT9kWzNdOmUpP2RlY29kZVVSSUNvbXBvbmVudChkKTpkO2lmKCFkKXtpZigwPT0KYy5pbmRleE9mKCJ4bi0tIikpe2M9IiI7YnJlYWsgYn0oYz1jLm1hdGNoKC8oLiopXC5jZG5cLmFtcHByb2plY3RcLm9yZ1wvPyQvKSkmJjI9PWMubGVuZ3RoJiYoZD1jWzFdLnJlcGxhY2UoLy0vZywiLiIpLnJlcGxhY2UoL1wuXC4vZywiLSIpKX1jPWQ/ZC5yZXBsYWNlKFVlLCIiKToiIn0oZD1iPT09Yyl8fChjPSIuIitjLGQ9Yi5zdWJzdHJpbmcoYi5sZW5ndGgtYy5sZW5ndGgsYi5sZW5ndGgpPT09Yyk7aWYoZCl7Yj0hMDticmVhayBhfWVsc2UgSig3OCl9Yj0hMX1yZXR1cm4gYiYmITEhPT1hfTt2YXIgYmQ9ZnVuY3Rpb24oYSl7cmV0dXJuKGE/Imh0dHBzOiI6QmF8fCJodHRwczoiPT1NLmxvY2F0aW9uLnByb3RvY29sPyJodHRwczoiOiJodHRwOiIpKyIvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbSJ9LEdlPWZ1bmN0aW9uKGEpe3N3aXRjaChhKXtkZWZhdWx0OmNhc2UgMTpyZXR1cm4iaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vZ3RtL2pzP2lkPSI7Y2FzZSAyOnJldHVybiJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbS9ndGFnL2pzP2lkPSJ9fSxEYT1mdW5jdGlvbihhKXt0aGlzLm5hbWU9ImxlbiI7dGhpcy5tZXNzYWdlPWErIi04MTkyIn0sYmE9ZnVuY3Rpb24oYSxiLGMpe2M9Y3x8dWE7aWYoMjAzNj49Yi5sZW5ndGgpd2MoYSxiLGMpO2Vsc2UgaWYoODE5Mj49Yi5sZW5ndGgpeChhLGIsYyl8fHdkKGEsYixjKXx8d2MoYSxiLGMpO2Vsc2UgdGhyb3cgZ2UoImxlbiIsYi5sZW5ndGgpLG5ldyBEYShiLmxlbmd0aCk7fSxwZT1mdW5jdGlvbihhLGIsCmMsZCl7ZD1kfHx1YTt3ZChhKyI/IitiLCIiLGQsYyl9LHdjPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10YShhKyI/IitiKTtkLm9ubG9hZD1kLm9uZXJyb3I9ZnVuY3Rpb24oKXtkLm9ubG9hZD1udWxsO2Qub25lcnJvcj1udWxsO2MoKX19LHdkPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPU8uWE1MSHR0cFJlcXVlc3Q7aWYoIWUpcmV0dXJuITE7dmFyIGc9bmV3IGU7aWYoISgid2l0aENyZWRlbnRpYWxzImluIGcpKXJldHVybiExO2E9YS5yZXBsYWNlKC9eaHR0cDovLCJodHRwczoiKTtnLm9wZW4oIlBPU1QiLGEsITApO2cud2l0aENyZWRlbnRpYWxzPSEwO2cuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwidGV4dC9wbGFpbiIpO2cub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoND09Zy5yZWFkeVN0YXRlKXtpZihkJiYidGV4dC9wbGFpbiI9PT1nLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSl0cnl7RWEoZCxnLnJlc3BvbnNlVGV4dCxjKX1jYXRjaChjYSl7Z2UoInhociIsCiJyc3AiKSxjKCl9ZWxzZSBjKCk7Zz1udWxsfX07Zy5zZW5kKGIpO3JldHVybiEwfSxFYT1mdW5jdGlvbihhLGIsYyl7aWYoMT5iLmxlbmd0aClnZSgieGhyIiwidmVyIiwiMCIpLGMoKTtlbHNlIGlmKDM8YS5jb3VudCsrKWdlKCJ4aHIiLCJ0bXIiLCIiK2EuY291bnQpLGMoKTtlbHNle3ZhciBkPWIuY2hhckF0KDApO2lmKCIxIj09PWQpb2MoYSxiLnN1YnN0cmluZygxKSxjKTtlbHNlIGlmKGEuViYmIjIiPT09ZCl7dmFyIGU9Yi5zdWJzdHJpbmcoMSkuc3BsaXQoIiwiKSxnPTA7Yj1mdW5jdGlvbigpeysrZz09PWUubGVuZ3RoJiZjKCl9O2ZvcihkPTA7ZDxlLmxlbmd0aDtkKyspb2MoYSxlW2RdLGIpfWVsc2UgZ2UoInhociIsInZlciIsU3RyaW5nKGIubGVuZ3RoKSksYygpfX0sb2M9ZnVuY3Rpb24oYSxiLGMpe2lmKDA9PT1iLmxlbmd0aCljKCk7ZWxzZXt2YXIgZD1iLmNoYXJBdCgwKTtzd2l0Y2goZCl7Y2FzZSAiZCI6cGUoImh0dHBzOi8vc3RhdHMuZy5kb3VibGVjbGljay5uZXQvai9jb2xsZWN0IiwKYS5VLGEsYyk7YnJlYWs7Y2FzZSAiZyI6d2MoImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vYWRzL2dhLWF1ZGllbmNlcyIsYS5nb29nbGUsYyk7KGI9Yi5zdWJzdHJpbmcoMSkpJiYoL15bYS16Ll17MSw2fSQvLnRlc3QoYik/d2MoImh0dHBzOi8vd3d3Lmdvb2dsZS4lL2Fkcy9nYS1hdWRpZW5jZXMiLnJlcGxhY2UoIiUiLGIpLGEuZ29vZ2xlLHVhKTpnZSgidGxkIiwiYmNjIixiKSk7YnJlYWs7Y2FzZSAiRyI6aWYoYS5WKXthLlYoIkctIitiLnN1YnN0cmluZygxKSk7YygpO2JyZWFrfWNhc2UgIngiOmlmKGEuVil7YS5WKCk7YygpO2JyZWFrfWRlZmF1bHQ6Z2UoInhociIsImJyYyIsZCksYygpfX19LHg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBPLm5hdmlnYXRvci5zZW5kQmVhY29uP08ubmF2aWdhdG9yLnNlbmRCZWFjb24oYSxiKT8oYygpLCEwKTohMTohMX0sZ2U9ZnVuY3Rpb24oYSxiLGMpezE8PTEwMCpNYXRoLnJhbmRvbSgpfHxHKCI/Iil8fChhPVsidD1lcnJvciIsIl9lPSIrCmEsIl92PWo5NiIsInNyPTEiXSxiJiZhLnB1c2goIl9mPSIrYiksYyYmYS5wdXNoKCJfbT0iK0soYy5zdWJzdHJpbmcoMCwxMDApKSksYS5wdXNoKCJhaXA9MSIpLGEucHVzaCgiej0iK2hkKCkpLHdjKGJkKCEwKSsiL3UvZCIsYS5qb2luKCImIiksdWEpKX07dmFyIHFjPWZ1bmN0aW9uKCl7cmV0dXJuIE8uZ2FEYXRhPU8uZ2FEYXRhfHx7fX0saD1mdW5jdGlvbihhKXt2YXIgYj1xYygpO3JldHVybiBiW2FdPWJbYV18fHt9fTt2YXIgSGE9ZnVuY3Rpb24oKXt0aGlzLk09W119O0hhLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7dGhpcy5NLnB1c2goYSl9O0hhLnByb3RvdHlwZS5EPWZ1bmN0aW9uKGEpe3RyeXtmb3IodmFyIGI9MDtiPHRoaXMuTS5sZW5ndGg7YisrKXt2YXIgYz1hLmdldCh0aGlzLk1bYl0pO2MmJmVhKGMpJiZjLmNhbGwoTyxhKX19Y2F0Y2goZCl7fWI9YS5nZXQoSWEpO2IhPXVhJiZlYShiKSYmKGEuc2V0KElhLHVhLCEwKSxzZXRUaW1lb3V0KGIsMTApKX07ZnVuY3Rpb24gSmEoYSl7aWYoMTAwIT1hLmdldChLYSkmJkxhKFAoYSxRKSklMUU0Pj0xMDAqUihhLEthKSl0aHJvdyJhYm9ydCI7fWZ1bmN0aW9uIE1hKGEpe2lmKEcoUChhLE5hKSkpdGhyb3ciYWJvcnQiO31mdW5jdGlvbiBPYSgpe3ZhciBhPU0ubG9jYXRpb24ucHJvdG9jb2w7aWYoImh0dHA6IiE9YSYmImh0dHBzOiIhPWEpdGhyb3ciYWJvcnQiO30KZnVuY3Rpb24gUGEoYSl7dHJ5e08ubmF2aWdhdG9yLnNlbmRCZWFjb24/Sig0Mik6Ty5YTUxIdHRwUmVxdWVzdCYmIndpdGhDcmVkZW50aWFscyJpbiBuZXcgTy5YTUxIdHRwUmVxdWVzdCYmSig0MCl9Y2F0Y2goYyl7fWEuc2V0KGxkLFRkKGEpLCEwKTthLnNldChBYyxSKGEsQWMpKzEpO3ZhciBiPVtdO3VlLm1hcChmdW5jdGlvbihjLGQpe2QuRiYmKGM9YS5nZXQoYyksdm9pZCAwIT1jJiZjIT1kLmRlZmF1bHRWYWx1ZSYmKCJib29sZWFuIj09dHlwZW9mIGMmJihjKj0xKSxiLnB1c2goZC5GKyI9IitLKCIiK2MpKSkpfSk7ITE9PT1hLmdldCh4ZSkmJmIucHVzaCgibnBhPTEiKTtiLnB1c2goIno9IitCZCgpKTthLnNldChSYSxiLmpvaW4oIiYiKSwhMCl9CmZ1bmN0aW9uIFNhKGEpe3ZhciBiPVAoYSxmYSk7IWImJmEuZ2V0KFZkKSYmKGI9ImJlYWNvbiIpO3ZhciBjPVAoYSxnZCksZD1QKGEsb2UpLGU9Y3x8KGR8fGJkKCExKSsiIikrIi9jb2xsZWN0Ijtzd2l0Y2goUChhLGFkKSl7Y2FzZSAiZCI6ZT1jfHwoZHx8YmQoITEpKyIiKSsiL2ovY29sbGVjdCI7Yj1hLmdldChxZSl8fHZvaWQgMDtwZShlLFAoYSxSYSksYixhLlooSWEpKTticmVhaztkZWZhdWx0OmI/KGM9UChhLFJhKSxkPShkPWEuWihJYSkpfHx1YSwiaW1hZ2UiPT1iP3djKGUsYyxkKToieGhyIj09YiYmd2QoZSxjLGQpfHwiYmVhY29uIj09YiYmeChlLGMsZCl8fGJhKGUsYyxkKSk6YmEoZSxQKGEsUmEpLGEuWihJYSkpfWU9UChhLE5hKTtlPWgoZSk7Yj1lLmhpdGNvdW50O2UuaGl0Y291bnQ9Yj9iKzE6MTtlLmZpcnN0X2hpdHx8KGUuZmlyc3RfaGl0PShuZXcgRGF0ZSkuZ2V0VGltZSgpKTtlPVAoYSxOYSk7ZGVsZXRlIGgoZSkucGVuZGluZ19leHBlcmltZW50czthLnNldChJYSwKdWEsITApfWZ1bmN0aW9uIEhjKGEpe3FjKCkuZXhwSWQmJmEuc2V0KE5jLHFjKCkuZXhwSWQpO3FjKCkuZXhwVmFyJiZhLnNldChPYyxxYygpLmV4cFZhcik7dmFyIGI9UChhLE5hKTtpZihiPWgoYikucGVuZGluZ19leHBlcmltZW50cyl7dmFyIGM9W107Zm9yKGQgaW4gYiliLmhhc093blByb3BlcnR5KGQpJiZiW2RdJiZjLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGQpKyIuIitlbmNvZGVVUklDb21wb25lbnQoYltkXSkpO3ZhciBkPWMuam9pbigiISIpfWVsc2UgZD12b2lkIDA7ZCYmKChiPWEuZ2V0KG0pKSYmKGQ9YisiISIrZCksYS5zZXQobSxkLCEwKSl9ZnVuY3Rpb24gY2QoKXtpZihPLm5hdmlnYXRvciYmInByZXZpZXciPT1PLm5hdmlnYXRvci5sb2FkUHVycG9zZSl0aHJvdyJhYm9ydCI7fQpmdW5jdGlvbiB5ZChhKXt2YXIgYj1PLmdhRGV2SWRzfHxbXTtpZihrYShiKSl7dmFyIGM9YS5nZXQoIiZkaWQiKTtxYShjKSYmMDxjLmxlbmd0aCYmKGI9Yi5jb25jYXQoYy5zcGxpdCgiLCIpKSk7Yz1bXTtmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKylFZShjLGJbZF0pfHxjLnB1c2goYltkXSk7MCE9Yy5sZW5ndGgmJmEuc2V0KCImZGlkIixjLmpvaW4oIiwiKSwhMCl9fWZ1bmN0aW9uIHZiKGEpe2lmKCFhLmdldChOYSkpdGhyb3ciYWJvcnQiO30KZnVuY3Rpb24gUGUoYSl7dHJ5e2lmKCFhLmdldChRZSkmJihhLnNldChRZSwhMCksIWEuZ2V0KCImZ3RtIikpKXt2YXIgYj12b2lkIDA7bGYoYmUoImd0bV9kZWJ1ZyIpKSYmKGI9Mik7IWImJkQoTS5yZWZlcnJlciwiaHR0cHM6Ly90YWdhc3Npc3RhbnQuZ29vZ2xlLmNvbS8iKSYmKGI9Myk7IWImJkVlKE0uY29va2llLnNwbGl0KCI7ICIpLCJfX1RBR19BU1NJU1RBTlQ9eCIpJiYoYj00KTtpZighYil7dmFyIGM9TS5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLXRhZy1hc3Npc3RhbnQtcHJlc2VudCIpO2xmKGMpJiYoYj01KX1pZihiKXtPWyJnb29nbGUudGFnbWFuYWdlci5kZWJ1Z3VpMi5xdWV1ZSJdfHwoT1siZ29vZ2xlLnRhZ21hbmFnZXIuZGVidWd1aTIucXVldWUiXT1bXSxJZCgiaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vZGVidWcvYm9vdHN0cmFwP2lkPSIrYS5nZXQoTmEpKyImc3JjPUxFR0FDWSZjb25kPSIrYikpO3ZhciBkPU0uY3VycmVudFNjcmlwdDsKT1siZ29vZ2xlLnRhZ21hbmFnZXIuZGVidWd1aTIucXVldWUiXS5wdXNoKHttZXNzYWdlVHlwZToiTEVHQUNZX0NPTlRBSU5FUl9TVEFSVElORyIsZGF0YTp7aWQ6YS5nZXQoTmEpLHNjcmlwdFNvdXJjZTpkJiZkLnNyY3x8IiJ9fSl9fX1jYXRjaChlKXt9fWZ1bmN0aW9uIGxmKGEpe2lmKG51bGw9PWF8fDA9PT1hLmxlbmd0aClyZXR1cm4hMTthPU51bWJlcihhKTt2YXIgYj1EYXRlLm5vdygpO3JldHVybiBhPGIrM0U1JiZhPmItOUU1fTt2YXIgaGQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZCgyMTQ3NDgzNjQ3Kk1hdGgucmFuZG9tKCkpfSxCZD1mdW5jdGlvbigpe3RyeXt2YXIgYT1uZXcgVWludDMyQXJyYXkoMSk7Ty5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGEpO3JldHVybiBhWzBdJjIxNDc0ODM2NDd9Y2F0Y2goYil7cmV0dXJuIGhkKCl9fTtmdW5jdGlvbiBUYShhKXt2YXIgYj1SKGEsVWEpOzUwMDw9YiYmSigxNSk7dmFyIGM9UChhLFZhKTtpZigidHJhbnNhY3Rpb24iIT1jJiYiaXRlbSIhPWMpe2M9UihhLFdhKTt2YXIgZD0obmV3IERhdGUpLmdldFRpbWUoKSxlPVIoYSxYYSk7MD09ZSYmYS5zZXQoWGEsZCk7ZT1NYXRoLnJvdW5kKDIqKGQtZSkvMUUzKTswPGUmJihjPU1hdGgubWluKGMrZSwyMCksYS5zZXQoWGEsZCkpO2lmKDA+PWMpdGhyb3ciYWJvcnQiO2Euc2V0KFdhLC0tYyl9YS5zZXQoVWEsKytiKX07dmFyIFlhPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPW5ldyBlZX07WWEucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXt2YXIgYj0kYShhKSxjPXRoaXMuZGF0YS5nZXQoYSk7YiYmdm9pZCAwPT1jJiYoYz1lYShiLmRlZmF1bHRWYWx1ZSk/Yi5kZWZhdWx0VmFsdWUoKTpiLmRlZmF1bHRWYWx1ZSk7cmV0dXJuIGImJmIuWj9iLloodGhpcyxhLGMpOmN9O3ZhciBQPWZ1bmN0aW9uKGEsYil7YT1hLmdldChiKTtyZXR1cm4gdm9pZCAwPT1hPyIiOiIiK2F9LFI9ZnVuY3Rpb24oYSxiKXthPWEuZ2V0KGIpO3JldHVybiB2b2lkIDA9PWF8fCIiPT09YT8wOk51bWJlcihhKX07WWEucHJvdG90eXBlLlo9ZnVuY3Rpb24oYSl7cmV0dXJuKGE9dGhpcy5nZXQoYSkpJiZlYShhKT9hOnVhfTsKWWEucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7aWYoYSlpZigib2JqZWN0Ij09dHlwZW9mIGEpZm9yKHZhciBkIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShkKSYmYWIodGhpcyxkLGFbZF0sYyk7ZWxzZSBhYih0aGlzLGEsYixjKX07dmFyIGFiPWZ1bmN0aW9uKGEsYixjLGQpe2lmKHZvaWQgMCE9Yylzd2l0Y2goYil7Y2FzZSBOYTp3Yi50ZXN0KGMpfXZhciBlPSRhKGIpO2UmJmUubz9lLm8oYSxiLGMsZCk6YS5kYXRhLnNldChiLGMsZCl9O3ZhciB1ZT1uZXcgZWUsdmU9W10sYmI9ZnVuY3Rpb24oYSxiLGMsZCxlKXt0aGlzLm5hbWU9YTt0aGlzLkY9Yjt0aGlzLlo9ZDt0aGlzLm89ZTt0aGlzLmRlZmF1bHRWYWx1ZT1jfSwkYT1mdW5jdGlvbihhKXt2YXIgYj11ZS5nZXQoYSk7aWYoIWIpZm9yKHZhciBjPTA7Yzx2ZS5sZW5ndGg7YysrKXt2YXIgZD12ZVtjXSxlPWRbMF0uZXhlYyhhKTtpZihlKXtiPWRbMV0oZSk7dWUuc2V0KGIubmFtZSxiKTticmVha319cmV0dXJuIGJ9LHljPWZ1bmN0aW9uKGEpe3ZhciBiO3VlLm1hcChmdW5jdGlvbihjLGQpe2QuRj09YSYmKGI9ZCl9KTtyZXR1cm4gYiYmYi5uYW1lfSxTPWZ1bmN0aW9uKGEsYixjLGQsZSl7YT1uZXcgYmIoYSxiLGMsZCxlKTt1ZS5zZXQoYS5uYW1lLGEpO3JldHVybiBhLm5hbWV9LGNiPWZ1bmN0aW9uKGEsYil7dmUucHVzaChbbmV3IFJlZ0V4cCgiXiIrYSsiJCIpLGJdKX0sVD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIFMoYSxiLGMsdm9pZCAwLGRiKX0sZGI9ZnVuY3Rpb24oKXt9O3ZhciBoYj1UKCJhcGlWZXJzaW9uIiwidiIpLGliPVQoImNsaWVudFZlcnNpb24iLCJfdiIpO1MoImFub255bWl6ZUlwIiwiYWlwIik7dmFyIGpiPVMoImFkU2Vuc2VJZCIsImEiKSxWYT1TKCJoaXRUeXBlIiwidCIpLElhPVMoImhpdENhbGxiYWNrIiksUmE9UygiaGl0UGF5bG9hZCIpO1MoIm5vbkludGVyYWN0aW9uIiwibmkiKTtTKCJjdXJyZW5jeUNvZGUiLCJjdSIpO1MoImRhdGFTb3VyY2UiLCJkcyIpO3ZhciBWZD1TKCJ1c2VCZWFjb24iLHZvaWQgMCwhMSksZmE9UygidHJhbnNwb3J0Iik7Uygic2Vzc2lvbkNvbnRyb2wiLCJzYyIsIiIpO1MoInNlc3Npb25Hcm91cCIsInNnIik7UygicXVldWVUaW1lIiwicXQiKTt2YXIgQWM9UygiX3MiLCJfcyIpO1MoInNjcmVlbk5hbWUiLCJjZCIpO3ZhciBrYj1TKCJsb2NhdGlvbiIsImRsIiwiIiksbGI9UygicmVmZXJyZXIiLCJkciIpLG1iPVMoInBhZ2UiLCJkcCIsIiIpO1MoImhvc3RuYW1lIiwiZGgiKTsKdmFyIG5iPVMoImxhbmd1YWdlIiwidWwiKSxvYj1TKCJlbmNvZGluZyIsImRlIik7UygidGl0bGUiLCJkdCIsZnVuY3Rpb24oKXtyZXR1cm4gTS50aXRsZXx8dm9pZCAwfSk7Y2IoImNvbnRlbnRHcm91cChbMC05XSspIixmdW5jdGlvbihhKXtyZXR1cm4gbmV3IGJiKGFbMF0sImNnIithWzFdKX0pO3ZhciBwYj1TKCJzY3JlZW5Db2xvcnMiLCJzZCIpLHFiPVMoInNjcmVlblJlc29sdXRpb24iLCJzciIpLHJiPVMoInZpZXdwb3J0U2l6ZSIsInZwIiksc2I9UygiamF2YUVuYWJsZWQiLCJqZSIpLHRiPVMoImZsYXNoVmVyc2lvbiIsImZsIik7UygiY2FtcGFpZ25JZCIsImNpIik7UygiY2FtcGFpZ25OYW1lIiwiY24iKTtTKCJjYW1wYWlnblNvdXJjZSIsImNzIik7UygiY2FtcGFpZ25NZWRpdW0iLCJjbSIpO1MoImNhbXBhaWduS2V5d29yZCIsImNrIik7UygiY2FtcGFpZ25Db250ZW50IiwiY2MiKTsKdmFyIHViPVMoImV2ZW50Q2F0ZWdvcnkiLCJlYyIpLHhiPVMoImV2ZW50QWN0aW9uIiwiZWEiKSx5Yj1TKCJldmVudExhYmVsIiwiZWwiKSx6Yj1TKCJldmVudFZhbHVlIiwiZXYiKSxCYj1TKCJzb2NpYWxOZXR3b3JrIiwic24iKSxDYj1TKCJzb2NpYWxBY3Rpb24iLCJzYSIpLERiPVMoInNvY2lhbFRhcmdldCIsInN0IiksRWI9UygibDEiLCJwbHQiKSxGYj1TKCJsMiIsInBkdCIpLEdiPVMoImwzIiwiZG5zIiksSGI9UygibDQiLCJycnQiKSxJYj1TKCJsNSIsInNydCIpLEpiPVMoImw2IiwidGNwIiksS2I9UygibDciLCJkaXQiKSxMYj1TKCJsOCIsImNsdCIpLFZlPVMoImw5IiwiX2dzdCIpLFdlPVMoImwxMCIsIl9nYnQiKSxYZT1TKCJsMTEiLCJfY3N0IiksWWU9UygibDEyIiwiX2NidCIpLE1iPVMoInRpbWluZ0NhdGVnb3J5IiwidXRjIiksTmI9UygidGltaW5nVmFyIiwidXR2IiksT2I9UygidGltaW5nTGFiZWwiLCJ1dGwiKSxQYj1TKCJ0aW1pbmdWYWx1ZSIsInV0dCIpOwpTKCJhcHBOYW1lIiwiYW4iKTtTKCJhcHBWZXJzaW9uIiwiYXYiLCIiKTtTKCJhcHBJZCIsImFpZCIsIiIpO1MoImFwcEluc3RhbGxlcklkIiwiYWlpZCIsIiIpO1MoImV4RGVzY3JpcHRpb24iLCJleGQiKTtTKCJleEZhdGFsIiwiZXhmIik7dmFyIE5jPVMoImV4cElkIiwieGlkIiksT2M9UygiZXhwVmFyIiwieHZhciIpLG09UygiZXhwIiwiZXhwIiksUmM9UygiX3V0bWEiLCJfdXRtYSIpLFNjPVMoIl91dG16IiwiX3V0bXoiKSxUYz1TKCJfdXRtaHQiLCJfdXRtaHQiKSxVYT1TKCJfaGMiLHZvaWQgMCwwKSxYYT1TKCJfdGkiLHZvaWQgMCwwKSxXYT1TKCJfdG8iLHZvaWQgMCwyMCk7Y2IoImRpbWVuc2lvbihbMC05XSspIixmdW5jdGlvbihhKXtyZXR1cm4gbmV3IGJiKGFbMF0sImNkIithWzFdKX0pO2NiKCJtZXRyaWMoWzAtOV0rKSIsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBiYihhWzBdLCJjbSIrYVsxXSl9KTtTKCJsaW5rZXJQYXJhbSIsdm9pZCAwLHZvaWQgMCxCYyxkYik7CnZhciBaZT1UKCJfY2QybCIsdm9pZCAwLCExKSxsZD1TKCJ1c2FnZSIsIl91IiksR2Q9UygiX3VtIik7UygiZm9yY2VTU0wiLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gQmF9LGZ1bmN0aW9uKGEsYixjKXtKKDM0KTtCYT0hIWN9KTt2YXIgZWQ9UygiX2oxIiwiamlkIiksaWE9UygiX2oyIiwiZ2ppZCIpO2NiKCJcXCYoLiopIixmdW5jdGlvbihhKXt2YXIgYj1uZXcgYmIoYVswXSxhWzFdKSxjPXljKGFbMF0uc3Vic3RyaW5nKDEpKTtjJiYoYi5aPWZ1bmN0aW9uKGQpe3JldHVybiBkLmdldChjKX0sYi5vPWZ1bmN0aW9uKGQsZSxnLGNhKXtkLnNldChjLGcsY2EpfSxiLkY9dm9pZCAwKTtyZXR1cm4gYn0pOwp2YXIgUWI9VCgiX29vdCIpLGRkPVMoInByZXZpZXdUYXNrIiksUmI9UygiY2hlY2tQcm90b2NvbFRhc2siKSxtZD1TKCJ2YWxpZGF0aW9uVGFzayIpLFNiPVMoImNoZWNrU3RvcmFnZVRhc2siKSxVYz1TKCJoaXN0b3J5SW1wb3J0VGFzayIpLFRiPVMoInNhbXBsZXJUYXNrIiksVmI9UygiX3JsdCIpLFdiPVMoImJ1aWxkSGl0VGFzayIpLFhiPVMoInNlbmRIaXRUYXNrIiksVmM9UygiY2VUYXNrIiksemQ9UygiZGV2SWRUYXNrIiksQ2Q9UygidGltaW5nVGFzayIpLExkPVMoImRpc3BsYXlGZWF0dXJlc1Rhc2siKSxvYT1TKCJjdXN0b21UYXNrIiksemU9UygiZnBzQ3Jvc3NEb21haW5UYXNrIiksUmU9VCgiX2N0YSIpLFY9VCgibmFtZSIpLFE9VCgiY2xpZW50SWQiLCJjaWQiKSxuPVQoImNsaWVudElkVGltZSIpLHhkPVQoInN0b3JlZENsaWVudElkIiksQWQ9UygidXNlcklkIiwidWlkIiksTmE9VCgidHJhY2tpbmdJZCIsInRpZCIpLFU9VCgiY29va2llTmFtZSIsdm9pZCAwLCJfZ2EiKSwKVz1UKCJjb29raWVEb21haW4iKSxZYj1UKCJjb29raWVQYXRoIix2b2lkIDAsIi8iKSxaYj1UKCJjb29raWVFeHBpcmVzIix2b2lkIDAsNjMwNzJFMyksSGQ9VCgiY29va2llVXBkYXRlIix2b2lkIDAsITApLEJlPVQoImNvb2tpZUZsYWdzIix2b2lkIDAsIiIpLCRiPVQoImxlZ2FjeUNvb2tpZURvbWFpbiIpLFdjPVQoImxlZ2FjeUhpc3RvcnlJbXBvcnQiLHZvaWQgMCwhMCksYWM9VCgic3RvcmFnZSIsdm9pZCAwLCJjb29raWUiKSxiYz1UKCJhbGxvd0xpbmtlciIsdm9pZCAwLCExKSxjYz1UKCJhbGxvd0FuY2hvciIsdm9pZCAwLCEwKSxLYT1UKCJzYW1wbGVSYXRlIiwic2YiLDEwMCksZGM9VCgic2l0ZVNwZWVkU2FtcGxlUmF0ZSIsdm9pZCAwLDEpLGVjPVQoImFsd2F5c1NlbmRSZWZlcnJlciIsdm9pZCAwLCExKSxJPVQoIl9naWQiLCJfZ2lkIiksbGE9VCgiX2djbiIpLEtkPVQoInVzZUFtcENsaWVudElkIiksY2U9VCgiX2djbGlkIiksZmU9VCgiX2d0IiksaGU9VCgiX2dlIix2b2lkIDAsCjc3NzZFNiksaWU9VCgiX2djbHNyYyIpLGplPVQoInN0b3JlR2FjIix2b2lkIDAsITApLG9lPVMoIl94XzE5IiksQWU9UygiX2ZwbGMiLCJfZnBsYyIpLEY9VCgiX2NzIiksSmU9VCgiX3VzZVVwIix2b2lkIDAsITEpLExlPVMoInVwIiwidXAiKSxRZT1TKCJfdGFjIix2b2lkIDAsITEpLFNlPVQoIl9nYnJhaWQiKSxUZT1UKCJfZ2J0IiksYmY9VCgiX2diZSIsdm9pZCAwLDc3NzZFNiksZ2Q9UygidHJhbnNwb3J0VXJsIiksTWQ9UygiX3IiLCJfciIpLE9kPVMoIl9zbGMiLCJfc2xjIikscWU9UygiX2RwIiksYWQ9UygiX2p0Iix2b2lkIDAsIm4iKSxVZD1TKCJhbGxvd0FkRmVhdHVyZXMiLHZvaWQgMCwhMCkseGU9UygiYWxsb3dBZFBlcnNvbmFsaXphdGlvblNpZ25hbHMiLHZvaWQgMCwhMCk7CmZ1bmN0aW9uIFgoYSxiLGMsZCl7YlthXT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gZCYmSihkKSxjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jYXRjaChlKXt0aHJvdyBnZSgiZXhjIixhLGUmJmUubmFtZSksZTt9fX07dmFyIEVkPWZ1bmN0aW9uKGEpe2lmKCJjb29raWUiPT1hLmdldChhYykpcmV0dXJuIGE9Q2EoIkZQTEMiKSwwPGEubGVuZ3RoP2FbMF06dm9pZCAwfSxGZT1mdW5jdGlvbihhKXt2YXIgYjtpZihiPVAoYSxvZSkmJmEuZ2V0KFplKSliPURlLmdldChhLmdldChjYykpLGI9IShiJiZiLl9mcGxjKTtiJiYhRWQoYSkmJmEuc2V0KEFlLCIwIil9O3ZhciBhYT1mdW5jdGlvbihhKXt2YXIgYj1NYXRoLm1pbihSKGEsZGMpLDEwMCk7cmV0dXJuIExhKFAoYSxRKSklMTAwPj1iPyExOiEwfSxnYz1mdW5jdGlvbihhKXt2YXIgYj17fTtpZihFYyhiKXx8RmMoYikpe3ZhciBjPWJbRWJdO3ZvaWQgMD09Y3x8SW5maW5pdHk9PWN8fGlzTmFOKGMpfHwoMDxjPyhZKGIsR2IpLFkoYixKYiksWShiLEliKSxZKGIsRmIpLFkoYixIYiksWShiLEtiKSxZKGIsTGIpLFkoYixWZSksWShiLFdlKSxZKGIsWGUpLFkoYixZZSksdmEoZnVuY3Rpb24oKXthKGIpfSwxMCkpOkwoTywibG9hZCIsZnVuY3Rpb24oKXtnYyhhKX0sITEpKX19LEVjPWZ1bmN0aW9uKGEpe3ZhciBiPU8ucGVyZm9ybWFuY2V8fE8ud2Via2l0UGVyZm9ybWFuY2U7Yj1iJiZiLnRpbWluZztpZighYilyZXR1cm4hMTt2YXIgYz1iLm5hdmlnYXRpb25TdGFydDtpZigwPT1jKXJldHVybiExO2FbRWJdPWIubG9hZEV2ZW50U3RhcnQtYzthW0diXT1iLmRvbWFpbkxvb2t1cEVuZC1iLmRvbWFpbkxvb2t1cFN0YXJ0OwphW0piXT1iLmNvbm5lY3RFbmQtYi5jb25uZWN0U3RhcnQ7YVtJYl09Yi5yZXNwb25zZVN0YXJ0LWIucmVxdWVzdFN0YXJ0O2FbRmJdPWIucmVzcG9uc2VFbmQtYi5yZXNwb25zZVN0YXJ0O2FbSGJdPWIuZmV0Y2hTdGFydC1jO2FbS2JdPWIuZG9tSW50ZXJhY3RpdmUtYzthW0xiXT1iLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0LWM7YVtWZV09Ti5MLWM7YVtXZV09Ti55YS1jO08uZ29vZ2xlX3RhZ19tYW5hZ2VyJiZPLmdvb2dsZV90YWdfbWFuYWdlci5fbGkmJihiPU8uZ29vZ2xlX3RhZ19tYW5hZ2VyLl9saSxhW1hlXT1iLmNzdCxhW1llXT1iLmNidCk7cmV0dXJuITB9LEZjPWZ1bmN0aW9uKGEpe2lmKE8udG9wIT1PKXJldHVybiExO3ZhciBiPU8uZXh0ZXJuYWwsYz1iJiZiLm9ubG9hZFQ7YiYmIWIuaXNWYWxpZExvYWRUaW1lJiYoYz12b2lkIDApOzIxNDc0ODM2NDg8YyYmKGM9dm9pZCAwKTswPGMmJmIuc2V0UGFnZVJlYWR5VGltZSgpO2lmKHZvaWQgMD09YylyZXR1cm4hMTsKYVtFYl09YztyZXR1cm4hMH0sWT1mdW5jdGlvbihhLGIpe3ZhciBjPWFbYl07aWYoaXNOYU4oYyl8fEluZmluaXR5PT1jfHwwPmMpYVtiXT12b2lkIDB9LEZkPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtpZigicGFnZXZpZXciPT1iLmdldChWYSkmJiFhLkkpe2EuST0hMDt2YXIgYz1hYShiKSxkPTA8RShQKGIsa2IpLCJnY2xpZCIpLmxlbmd0aCxlPTA8RShQKGIsa2IpLCJ3YnJhaWQiKS5sZW5ndGg7KGN8fGR8fGUpJiZnYyhmdW5jdGlvbihnKXtjJiZhLnNlbmQoInRpbWluZyIsZyk7KGR8fGUpJiZhLnNlbmQoImFkdGltaW5nIixnKX0pfX19O3ZhciBoYz0hMSxtYz1mdW5jdGlvbihhKXtpZigiY29va2llIj09UChhLGFjKSl7aWYoYS5nZXQoSGQpfHxQKGEseGQpIT1QKGEsUSkpe3ZhciBiPTFFMypSKGEsWmIpO21hKGEsUSxVLGIpO2EuZGF0YS5zZXQoeGQsUChhLFEpKX0oYS5nZXQoSGQpfHx1YyhhKSE9UChhLEkpKSYmbWEoYSxJLGxhLDg2NEU1KTtpZihhLmdldChqZSkpe2lmKGI9UChhLGNlKSl7dmFyIGM9TWF0aC5taW4oUihhLGhlKSwxRTMqUihhLFpiKSk7Yz0wPT09Yz8wOk1hdGgubWluKGMsMUUzKlIoYSxmZSkrYy0obmV3IERhdGUpLmdldFRpbWUoKSk7YS5kYXRhLnNldChoZSxjKTt2YXIgZD17fSxlPVAoYSxmZSksZz1QKGEsaWUpLGNhPWtjKFAoYSxZYikpLGw9bGMoUChhLFcpKSxrPVAoYSxOYSksdz1QKGEsQmUpO2cmJiJhdy5kcyIhPWc/ZCYmKGQudWE9ITApOihiPVsiMSIsZSxDYyhiKV0uam9pbigiLiIpLDA8PWMmJihkJiYoZC50YT0hMCksemMoIl9nYWNfIitDYyhrKSxiLGNhLGwsayxjLHcpKSk7bGUoZCl9fWVsc2UgSig3NSk7CmEuZ2V0KGplKSYmKGI9UChhLFNlKSkmJihjPU1hdGgubWluKFIoYSxiZiksMUUzKlIoYSxaYikpLGM9MD09PWM/MDpNYXRoLm1pbihjLDFFMypSKGEsVGUpK2MtKG5ldyBEYXRlKS5nZXRUaW1lKCkpLGEuZGF0YS5zZXQoYmYsYyksZD17fSx3PVAoYSxUZSksY2E9a2MoUChhLFliKSksbD1sYyhQKGEsVykpLGs9UChhLE5hKSxhPVAoYSxCZSksYj1bIjEiLHcsQ2MoYildLmpvaW4oIi4iKSwwPD1jJiYoZCYmKGQudGE9ITApLHpjKCJfZ2FjX2diXyIrQ2MoayksYixjYSxsLGssYyxhKSksZWYoZCkpfX0sbWE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bmQoYSxiKTtpZihlKXtjPVAoYSxjKTt2YXIgZz1rYyhQKGEsWWIpKSxjYT1sYyhQKGEsVykpLGw9UChhLEJlKSxrPVAoYSxOYSk7aWYoImF1dG8iIT1jYSl6YyhjLGUsZyxjYSxrLGQsbCkmJihoYz0hMCk7ZWxzZXtKKDMyKTtmb3IodmFyIHc9aWQoKSxDZT0wO0NlPHcubGVuZ3RoO0NlKyspaWYoY2E9d1tDZV0sYS5kYXRhLnNldChXLApjYSksZT1uZChhLGIpLHpjKGMsZSxnLGNhLGssZCxsKSl7aGM9ITA7cmV0dXJufWEuZGF0YS5zZXQoVywiYXV0byIpfX19LHVjPWZ1bmN0aW9uKGEpe3ZhciBiPUNhKFAoYSxsYSkpO3JldHVybiBYZChhLGIpfSxuYz1mdW5jdGlvbihhKXtpZigiY29va2llIj09UChhLGFjKSYmIWhjJiYobWMoYSksIWhjKSl0aHJvdyJhYm9ydCI7fSxZYz1mdW5jdGlvbihhKXtpZihhLmdldChXYykpe3ZhciBiPVAoYSxXKSxjPVAoYSwkYil8fHhhKCksZD1YYygiX191dG1hIixjLGIpO2QmJihKKDE5KSxhLnNldChUYywobmV3IERhdGUpLmdldFRpbWUoKSwhMCksYS5zZXQoUmMsZC5SKSwoYj1YYygiX191dG16IixjLGIpKSYmZC5oYXNoPT1iLmhhc2gmJmEuc2V0KFNjLGIuUikpfX0sbmQ9ZnVuY3Rpb24oYSxiKXtiPUNjKFAoYSxiKSk7dmFyIGM9bGMoUChhLFcpKS5zcGxpdCgiLiIpLmxlbmd0aDthPWpjKFAoYSxZYikpOzE8YSYmKGMrPSItIithKTtyZXR1cm4gYj9bIkdBMSIsYyxiXS5qb2luKCIuIik6CiIifSxYZD1mdW5jdGlvbihhLGIpe3JldHVybiBuYShiLFAoYSxXKSxQKGEsWWIpKX0sbmE9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwxPmEubGVuZ3RoKUooMTIpO2Vsc2V7Zm9yKHZhciBkPVtdLGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIGc9YVtlXTt2YXIgY2E9Zy5zcGxpdCgiLiIpO3ZhciBsPWNhLnNoaWZ0KCk7KCJHQTEiPT1sfHwiMSI9PWwpJiYxPGNhLmxlbmd0aD8oZz1jYS5zaGlmdCgpLnNwbGl0KCItIiksMT09Zy5sZW5ndGgmJihnWzFdPSIxIiksZ1swXSo9MSxnWzFdKj0xLGNhPXtIOmcsczpjYS5qb2luKCIuIil9KTpjYT1rZC50ZXN0KGcpP3tIOlswLDBdLHM6Z306dm9pZCAwO2NhJiZkLnB1c2goY2EpfWlmKDE9PWQubGVuZ3RoKXJldHVybiBKKDEzKSxkWzBdLnM7aWYoMD09ZC5sZW5ndGgpSigxMik7ZWxzZXtKKDE0KTtkPUdjKGQsbGMoYikuc3BsaXQoIi4iKS5sZW5ndGgsMCk7aWYoMT09ZC5sZW5ndGgpcmV0dXJuIGRbMF0ucztkPUdjKGQsamMoYyksMSk7MTxkLmxlbmd0aCYmCkooNDEpO3JldHVybiBkWzBdJiZkWzBdLnN9fX0sR2M9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPVtdLGcsY2E9MDtjYTxhLmxlbmd0aDtjYSsrKXt2YXIgbD1hW2NhXTtsLkhbY109PWI/ZC5wdXNoKGwpOnZvaWQgMD09Z3x8bC5IW2NdPGc/KGU9W2xdLGc9bC5IW2NdKTpsLkhbY109PWcmJmUucHVzaChsKX1yZXR1cm4gMDxkLmxlbmd0aD9kOmV9LGxjPWZ1bmN0aW9uKGEpe3JldHVybiAwPT1hLmluZGV4T2YoIi4iKT9hLnN1YnN0cigxKTphfSxpZD1mdW5jdGlvbigpe3ZhciBhPVtdLGI9eGEoKS5zcGxpdCgiLiIpO2lmKDQ9PWIubGVuZ3RoKXt2YXIgYz1iW2IubGVuZ3RoLTFdO2lmKHBhcnNlSW50KGMsMTApPT1jKXJldHVyblsibm9uZSJdfWZvcihjPWIubGVuZ3RoLTI7MDw9YztjLS0pYS5wdXNoKGIuc2xpY2UoYykuam9pbigiLiIpKTtiPU0ubG9jYXRpb24uaG9zdG5hbWU7ZWIudGVzdChiKXx8dmMudGVzdChiKXx8YS5wdXNoKCJub25lIik7cmV0dXJuIGF9LGtjPQpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4iLyI7MTxhLmxlbmd0aCYmYS5sYXN0SW5kZXhPZigiLyIpPT1hLmxlbmd0aC0xJiYoYT1hLnN1YnN0cigwLGEubGVuZ3RoLTEpKTswIT1hLmluZGV4T2YoIi8iKSYmKGE9Ii8iK2EpO3JldHVybiBhfSxqYz1mdW5jdGlvbihhKXthPWtjKGEpO3JldHVybiIvIj09YT8xOmEuc3BsaXQoIi8iKS5sZW5ndGh9LGxlPWZ1bmN0aW9uKGEpe2EudGEmJkooNzcpO2EubmEmJkooNzQpO2EucGEmJkooNzMpO2EudWEmJkooNjkpfSxlZj1mdW5jdGlvbihhKXthLnRhJiZKKDg1KTthLm5hJiZKKDg2KTthLnBhJiZKKDg3KX07ZnVuY3Rpb24gWGMoYSxiLGMpeyJub25lIj09YiYmKGI9IiIpO3ZhciBkPVtdLGU9Q2EoYSk7YT0iX191dG1hIj09YT82OjI7Zm9yKHZhciBnPTA7ZzxlLmxlbmd0aDtnKyspe3ZhciBjYT0oIiIrZVtnXSkuc3BsaXQoIi4iKTtjYS5sZW5ndGg+PWEmJmQucHVzaCh7aGFzaDpjYVswXSxSOmVbZ10sTzpjYX0pfWlmKDAhPWQubGVuZ3RoKXJldHVybiAxPT1kLmxlbmd0aD9kWzBdOlpjKGIsZCl8fFpjKGMsZCl8fFpjKG51bGwsZCl8fGRbMF19ZnVuY3Rpb24gWmMoYSxiKXtpZihudWxsPT1hKXZhciBjPWE9MTtlbHNlIGM9TGEoYSksYT1MYShEKGEsIi4iKT9hLnN1YnN0cmluZygxKToiLiIrYSk7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspaWYoYltkXS5oYXNoPT1jfHxiW2RdLmhhc2g9PWEpcmV0dXJuIGJbZF19O3ZhciBKYz1uZXcgUmVnRXhwKC9eaHR0cHM/OlwvXC8oW15cLzpdKykvKSxEZT1PLmdvb2dsZV90YWdfZGF0YS5nbEJyaWRnZSxLYz1SZWdFeHAoIiguKikoWz8mI10pKD86X2dhPVteJiNdKikoPzomPykoLiopIiksb2Q9UmVnRXhwKCIoLiopKFs/JiNdKSg/Ol9nYWM9W14mI10qKSg/OiY/KSguKikiKTtmdW5jdGlvbiBCYyhhKXtpZihhLmdldChaZSkpcmV0dXJuIEooMzUpLERlLmdlbmVyYXRlKCRlKGEpKTt2YXIgYj1QKGEsUSksYz1QKGEsSSl8fCIiO2I9Il9nYT0yLiIrSyhwYShjK2IsMCkrIi4iK2MrIi0iK2IpOyhhPWFmKGEpKT8oSig0NCksYT0iJl9nYWM9MS4iK0soW3BhKGEucWEsMCksYS50aW1lc3RhbXAsYS5xYV0uam9pbigiLiIpKSk6YT0iIjtyZXR1cm4gYithfQpmdW5jdGlvbiBJYyhhLGIpe3ZhciBjPW5ldyBEYXRlLGQ9Ty5uYXZpZ2F0b3IsZT1kLnBsdWdpbnN8fFtdO2E9W2EsZC51c2VyQWdlbnQsYy5nZXRUaW1lem9uZU9mZnNldCgpLGMuZ2V0WWVhcigpLGMuZ2V0RGF0ZSgpLGMuZ2V0SG91cnMoKSxjLmdldE1pbnV0ZXMoKStiXTtmb3IoYj0wO2I8ZS5sZW5ndGg7KytiKWEucHVzaChlW2JdLmRlc2NyaXB0aW9uKTtyZXR1cm4gTGEoYS5qb2luKCIuIikpfWZ1bmN0aW9uIHBhKGEsYil7dmFyIGM9bmV3IERhdGUsZD1PLm5hdmlnYXRvcixlPWMuZ2V0SG91cnMoKStNYXRoLmZsb29yKChjLmdldE1pbnV0ZXMoKStiKS82MCk7cmV0dXJuIExhKFthLGQudXNlckFnZW50LGQubGFuZ3VhZ2V8fCIiLGMuZ2V0VGltZXpvbmVPZmZzZXQoKSxjLmdldFllYXIoKSxjLmdldERhdGUoKStNYXRoLmZsb29yKGUvMjQpLCgyNCtlKSUyNCwoNjArYy5nZXRNaW51dGVzKCkrYiklNjBdLmpvaW4oIi4iKSl9CnZhciBEYz1mdW5jdGlvbihhKXtKKDQ4KTt0aGlzLnRhcmdldD1hO3RoaXMuVD0hMX07RGMucHJvdG90eXBlLmNhPWZ1bmN0aW9uKGEsYil7aWYoYSl7aWYodGhpcy50YXJnZXQuZ2V0KFplKSlyZXR1cm4gRGUuZGVjb3JhdGUoJGUodGhpcy50YXJnZXQpLGEsYik7aWYoYS50YWdOYW1lKXtpZigiYSI9PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXthLmhyZWYmJihhLmhyZWY9cWQodGhpcyxhLmhyZWYsYikpO3JldHVybn1pZigiZm9ybSI9PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiByZCh0aGlzLGEpfWlmKCJzdHJpbmciPT10eXBlb2YgYSlyZXR1cm4gcWQodGhpcyxhLGIpfX07CnZhciBxZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9S2MuZXhlYyhiKTtkJiYzPD1kLmxlbmd0aCYmKGI9ZFsxXSsoZFszXT9kWzJdK2RbM106IiIpKTsoZD1vZC5leGVjKGIpKSYmMzw9ZC5sZW5ndGgmJihiPWRbMV0rKGRbM10/ZFsyXStkWzNdOiIiKSk7YT1hLnRhcmdldC5nZXQoImxpbmtlclBhcmFtIik7ZD1iLmluZGV4T2YoIj8iKTt2YXIgZT1iLmluZGV4T2YoIiMiKTtiPWM/YisoKC0xPT1lPyIjIjoiJiIpK2EpOi0xPT1lP2IrKCgtMT09PWQ/Ij8iOiImIikrYSk6Yi5zdWJzdHJpbmcoMCxlKSsoLTE9PT1kfHxkPmU/Ij8iOiImIikrYStiLnN1YnN0cmluZyhlKTtiPWIucmVwbGFjZSgvJitfZ2E9LywiJl9nYT0iKTtyZXR1cm4gYj1iLnJlcGxhY2UoUmVnRXhwKCImK19nYWM9IiksIiZfZ2FjPSIpfSxyZD1mdW5jdGlvbihhLGIpe2lmKGImJmIuYWN0aW9uKWlmKCJnZXQiPT1iLm1ldGhvZC50b0xvd2VyQ2FzZSgpKXthPWEudGFyZ2V0LmdldCgibGlua2VyUGFyYW0iKS5zcGxpdCgiJiIpOwpmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXS5zcGxpdCgiPSIpLGU9ZFsxXTtkPWRbMF07Zm9yKHZhciBnPWIuY2hpbGROb2Rlc3x8W10sY2E9ITEsbD0wO2w8Zy5sZW5ndGg7bCsrKWlmKGdbbF0ubmFtZT09ZCl7Z1tsXS5zZXRBdHRyaWJ1dGUoInZhbHVlIixlKTtjYT0hMDticmVha31jYXx8KGc9TS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGcuc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZy5zZXRBdHRyaWJ1dGUoIm5hbWUiLGQpLGcuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsZSksYi5hcHBlbmRDaGlsZChnKSl9fWVsc2UicG9zdCI9PWIubWV0aG9kLnRvTG93ZXJDYXNlKCkmJihiLmFjdGlvbj1xZChhLGIuYWN0aW9uKSl9OwpEYy5wcm90b3R5cGUuUz1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChnKXt0cnl7Zz1nfHxPLmV2ZW50O2E6e3ZhciBjYT1nLnRhcmdldHx8Zy5zcmNFbGVtZW50O2ZvcihnPTEwMDtjYSYmMDxnOyl7aWYoY2EuaHJlZiYmY2Eubm9kZU5hbWUubWF0Y2goL15hKD86cmVhKT8kL2kpKXt2YXIgbD1jYTticmVhayBhfWNhPWNhLnBhcmVudE5vZGU7Zy0tfWw9e319KCJodHRwOiI9PWwucHJvdG9jb2x8fCJodHRwczoiPT1sLnByb3RvY29sKSYmc2QoYSxsLmhvc3RuYW1lfHwiIikmJmwuaHJlZiYmKGwuaHJlZj1xZChlLGwuaHJlZixiKSl9Y2F0Y2goayl7SigyNil9fXZhciBlPXRoaXM7dGhpcy50YXJnZXQuZ2V0KFplKT9EZS5hdXRvKGZ1bmN0aW9uKCl7cmV0dXJuICRlKGUudGFyZ2V0KX0sYSxiPyJmcmFnbWVudCI6IiIsYyk6KHRoaXMuVHx8KHRoaXMuVD0hMCxMKE0sIm1vdXNlZG93biIsZCwhMSksTChNLCJrZXl1cCIsZCwhMSkpLGMmJkwoTSwic3VibWl0IixmdW5jdGlvbihnKXtnPQpnfHxPLmV2ZW50O2lmKChnPWcudGFyZ2V0fHxnLnNyY0VsZW1lbnQpJiZnLmFjdGlvbil7dmFyIGNhPWcuYWN0aW9uLm1hdGNoKEpjKTtjYSYmc2QoYSxjYVsxXSkmJnJkKGUsZyl9fSkpfTtEYy5wcm90b3R5cGUuJD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj10aGlzLGM9Yi50YXJnZXQuZ2V0KEYpO3ZvaWQgMCE9PWMmJkRlLnBhc3N0aHJvdWdoKGZ1bmN0aW9uKCl7aWYoYygiYW5hbHl0aWNzX3N0b3JhZ2UiKSlyZXR1cm57fTt2YXIgZD17fTtyZXR1cm4gZC5fZ2E9Yi50YXJnZXQuZ2V0KFEpLGQuX3VwPSIxIixkfSwxLCEwKX19O2Z1bmN0aW9uIHNkKGEsYil7aWYoYj09TS5sb2NhdGlvbi5ob3N0bmFtZSlyZXR1cm4hMTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdaW5zdGFuY2VvZiBSZWdFeHApe2lmKGFbY10udGVzdChiKSlyZXR1cm4hMH1lbHNlIGlmKDA8PWIuaW5kZXhPZihhW2NdKSlyZXR1cm4hMDtyZXR1cm4hMX0KZnVuY3Rpb24ga2UoYSxiKXtyZXR1cm4gYiE9SWMoYSwwKSYmYiE9SWMoYSwtMSkmJmIhPUljKGEsLTIpJiZiIT1wYShhLDApJiZiIT1wYShhLC0xKSYmYiE9cGEoYSwtMil9ZnVuY3Rpb24gJGUoYSl7dmFyIGI9YWYoYSksYz17fTtjLl9nYT1hLmdldChRKTtjLl9naWQ9YS5nZXQoSSl8fHZvaWQgMDtjLl9nYWM9Yj9bYi5xYSxiLnRpbWVzdGFtcF0uam9pbigiLiIpOnZvaWQgMDtiPWEuZ2V0KEFlKTthPUVkKGEpO3JldHVybiBjLl9mcGxjPWImJiIwIiE9PWI/YjphLGN9ZnVuY3Rpb24gYWYoYSl7ZnVuY3Rpb24gYihlKXtyZXR1cm4gdm9pZCAwPT1lfHwiIj09PWU/MDpOdW1iZXIoZSl9dmFyIGM9YS5nZXQoY2UpO2lmKGMmJmEuZ2V0KGplKSl7dmFyIGQ9YihhLmdldChmZSkpO2lmKDFFMypkK2IoYS5nZXQoaGUpKTw9KG5ldyBEYXRlKS5nZXRUaW1lKCkpSig3Nik7ZWxzZSByZXR1cm57dGltZXN0YW1wOmQscWE6Y319fTt2YXIgcD0vXihHVE18T1BUKS1bQS1aMC05XSskLyxJZT0vXkctW0EtWjAtOV0rJC8scT0vO19nYWV4cD1bXjtdKi9nLHI9LzsoKF9fdXRtYT0pfChbXjs9XSs9R0FYP1xkK1wuKSlbXjtdKi9nLEFhPS9eaHR0cHM/OlwvXC9bXHdcLS5dK1wuZ29vZ2xlLmNvbSg6XGQrKT9cL29wdGltaXplXC9vcHQtbGF1bmNoXC5odG1sXD8uKiQvLHQ9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihkLGUpe2UmJihjKz0iJiIrZCsiPSIrSyhlKSl9dmFyIGM9R2UoYS50eXBlKStLKGEuaWQpOyJkYXRhTGF5ZXIiIT1hLkImJmIoImwiLGEuQik7YigiY3giLGEuY29udGV4dCk7YigidCIsYS50YXJnZXQpO2IoImNpZCIsYS5jbGllbnRJZCk7YigiY2lkdCIsYS5rYSk7YigiZ2FjIixhLmxhKTtiKCJhaXAiLGEuaWEpO2Euc3luYyYmYigibSIsInN5bmMiKTtiKCJjeWNsZSIsYS5HKTthLnFhJiZiKCJnY2xpZCIsYS5xYSk7QWEudGVzdChNLnJlZmVycmVyKSYmYigiY2IiLFN0cmluZyhoZCgpKSk7cmV0dXJuIGN9LApIZT1mdW5jdGlvbihhLGIpe3ZhciBjPShuZXcgRGF0ZSkuZ2V0VGltZSgpO09bYS5CXT1PW2EuQl18fFtdO2M9eyJndG0uc3RhcnQiOmN9O2Euc3luY3x8KGMuZXZlbnQ9Imd0bS5qcyIpO09bYS5CXS5wdXNoKGMpOzI9PT1hLnR5cGUmJmZ1bmN0aW9uKGQsZSxnKXtPW2EuQl0ucHVzaChhcmd1bWVudHMpfSgiY29uZmlnIixhLmlkLGIpfSxLZT1mdW5jdGlvbihhLGIsYyxkKXtjPWN8fHt9O3ZhciBlPTE7SWUudGVzdChiKSYmKGU9Mik7dmFyIGc9e2lkOmIsdHlwZTplLEI6Yy5kYXRhTGF5ZXJ8fCJkYXRhTGF5ZXIiLEc6ITF9LGNhPXZvaWQgMDthLmdldCgiJmd0bSIpPT1iJiYoZy5HPSEwKTsxPT09ZT8oZy5pYT0hIWEuZ2V0KCJhbm9ueW1pemVJcCIpLGcuc3luYz1kLGI9U3RyaW5nKGEuZ2V0KCJuYW1lIikpLCJ0MCIhPWImJihnLnRhcmdldD1iKSxHKFN0cmluZyhhLmdldCgidHJhY2tpbmdJZCIpKSl8fChnLmNsaWVudElkPVN0cmluZyhhLmdldChRKSksZy5rYT1OdW1iZXIoYS5nZXQobikpLApjPWMucGFsaW5kcm9tZT9yOnEsYz0oYz1NLmNvb2tpZS5yZXBsYWNlKC9efCg7ICspL2csIjsiKS5tYXRjaChjKSk/Yy5zb3J0KCkuam9pbigiIikuc3Vic3RyaW5nKDEpOnZvaWQgMCxnLmxhPWMsZy5xYT1FKFAoYSxrYiksImdjbGlkIikpKToyPT09ZSYmKGcuY29udGV4dD0iYyIsY2E9e2FsbG93X2dvb2dsZV9zaWduYWxzOmEuZ2V0KFVkKSxhbGxvd19hZF9wZXJzb25hbGl6YXRpb25fc2lnbmFsczphLmdldCh4ZSl9KTtIZShnLGNhKTtyZXR1cm4gdChnKX07dmFyIEg9e30sSmQ9ZnVuY3Rpb24oYSxiKXtifHwoYj0oYj1QKGEsVikpJiYidDAiIT1iP1dkLnRlc3QoYik/Il9nYXRfIitDYyhQKGEsTmEpKToiX2dhdF8iK0NjKGIpOiJfZ2F0Iik7dGhpcy5ZPWJ9LFJkPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5nZXQoV2IpO2Iuc2V0KFdiLGZ1bmN0aW9uKGUpe1BkKGEsZSxlZCk7UGQoYSxlLGlhKTt2YXIgZz1jKGUpO1FkKGEsZSk7cmV0dXJuIGd9KTt2YXIgZD1iLmdldChYYik7Yi5zZXQoWGIsZnVuY3Rpb24oZSl7dmFyIGc9ZChlKTtpZihzZShlKSl7Sig4MCk7dmFyIGNhPXtVOnJlKGUsMSksZ29vZ2xlOnJlKGUsMiksY291bnQ6MH07cGUoImh0dHBzOi8vc3RhdHMuZy5kb3VibGVjbGljay5uZXQvai9jb2xsZWN0IixjYS5VLGNhKTtlLnNldChlZCwiIiwhMCl9cmV0dXJuIGd9KX0sUGQ9ZnVuY3Rpb24oYSxiLGMpeyExPT09Yi5nZXQoVWQpfHxiLmdldChjKXx8KCIxIj09Q2EoYS5ZKVswXT9iLnNldChjLCIiLCEwKTpiLnNldChjLCIiK2hkKCksCiEwKSl9LFFkPWZ1bmN0aW9uKGEsYil7c2UoYikmJnpjKGEuWSwiMSIsUChiLFliKSxQKGIsVyksUChiLE5hKSw2RTQsUChiLEJlKSl9LHNlPWZ1bmN0aW9uKGEpe3JldHVybiEhYS5nZXQoZWQpJiYhMSE9PWEuZ2V0KFVkKX0sTmU9ZnVuY3Rpb24oYSl7cmV0dXJuIUhbUChhLE5hKV0mJnZvaWQgMD09PWEuZ2V0KCImZ3RtIikmJnZvaWQgMD09PWEuZ2V0KGZhKSYmdm9pZCAwPT09YS5nZXQoZ2QpJiZ2b2lkIDA9PT1hLmdldChvZSl9LHJlPWZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IGVlLGQ9ZnVuY3Rpb24oZyl7JGEoZykuRiYmYy5zZXQoJGEoZykuRixhLmdldChnKSl9O2QoaGIpO2QoaWIpO2QoTmEpO2QoUSk7ZChlZCk7MT09YiYmKGQoQWQpLGQoaWEpLGQoSSkpOyExPT09YS5nZXQoeGUpJiZjLnNldCgibnBhIiwiMSIpO2Muc2V0KCRhKGxkKS5GLFRkKGEpKTt2YXIgZT0iIjtjLm1hcChmdW5jdGlvbihnLGNhKXtlKz1LKGcpKyI9IjtlKz1LKCIiK2NhKSsiJiJ9KTtlKz0iej0iKwpoZCgpOzE9PWI/ZT0idD1kYyZhaXA9MSZfcj0zJiIrZToyPT1iJiYoZT0idD1zciZhaXA9MSZfcj00JnNsZl9yZD0xJiIrZSk7cmV0dXJuIGV9LE1lPWZ1bmN0aW9uKGEpe2lmKE5lKGEpKXJldHVybiBIW1AoYSxOYSldPSEwLGZ1bmN0aW9uKGIpe2lmKGImJiFIW2JdKXt2YXIgYz1LZShhLGIpO0lkKGMpO0hbYl09ITB9fX0sV2Q9L15ndG1cZCskLzt2YXIgZmQ9ZnVuY3Rpb24oYSxiKXthPWEubW9kZWw7aWYoIWEuZ2V0KCJkY0xvYWRlZCIpKXt2YXIgYz1uZXcgJGMoRGQoYSkpO2Muc2V0KDI5KTthLnNldChHZCxjLkMpO2I9Ynx8e307dmFyIGQ7YltVXSYmKGQ9Q2MoYltVXSkpO2I9bmV3IEpkKGEsZCk7UmQoYixhKTthLnNldCgiZGNMb2FkZWQiLCEwKX19O3ZhciBTZD1mdW5jdGlvbihhKXtpZighYS5nZXQoImRjTG9hZGVkIikmJiJjb29raWUiPT1hLmdldChhYykpe3ZhciBiPW5ldyBKZChhKTtQZChiLGEsZWQpO1BkKGIsYSxpYSk7UWQoYixhKTtiPXNlKGEpO3ZhciBjPU5lKGEpO2ImJmEuc2V0KE1kLDEsITApO2MmJmEuc2V0KE9kLDEsITApO2lmKGJ8fGMpYS5zZXQoYWQsImQiLCEwKSxKKDc5KSxhLnNldChxZSx7VTpyZShhLDEpLGdvb2dsZTpyZShhLDIpLFY6TWUoYSksY291bnQ6MH0sITApfX07dmFyIExjPWZ1bmN0aW9uKCl7dmFyIGE9Ty5nYUdsb2JhbD1PLmdhR2xvYmFsfHx7fTtyZXR1cm4gYS5oaWQ9YS5oaWR8fGhkKCl9O3ZhciB3Yj0vXihVQXxZVHxNT3xHUCktKFxkKyktKFxkKykkLyxwYz1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGUsZyl7ZC5tb2RlbC5kYXRhLnNldChlLGcpfWZ1bmN0aW9uIGMoZSxnKXtiKGUsZyk7ZC5maWx0ZXJzLmFkZChlKX12YXIgZD10aGlzO3RoaXMubW9kZWw9bmV3IFlhO3RoaXMuZmlsdGVycz1uZXcgSGE7YihWLGFbVl0pO2IoTmEsc2EoYVtOYV0pKTtiKFUsYVtVXSk7YihXLGFbV118fHhhKCkpO2IoWWIsYVtZYl0pO2IoWmIsYVtaYl0pO2IoSGQsYVtIZF0pO2IoQmUsYVtCZV0pO2IoJGIsYVskYl0pO2IoV2MsYVtXY10pO2IoYmMsYVtiY10pO2IoY2MsYVtjY10pO2IoS2EsYVtLYV0pO2IoZGMsYVtkY10pO2IoZWMsYVtlY10pO2IoYWMsYVthY10pO2IoQWQsYVtBZF0pO2IobixhW25dKTtiKEtkLGFbS2RdKTtiKGplLGFbamVdKTtiKFplLGFbWmVdKTtiKG9lLGFbb2VdKTtiKEplLGFbSmVdKTtiKEYsYVtGXSk7YihoYiwxKTtiKGliLCJqOTYiKTtjKFJlLFBlKTtjKFFiLApNYSk7YyhvYSx1YSk7YyhkZCxjZCk7YyhSYixPYSk7YyhtZCx2Yik7YyhTYixuYyk7YyhVYyxZYyk7YyhUYixKYSk7YyhWYixUYSk7YyhWYyxIYyk7Yyh6ZCx5ZCk7YyhMZCxTZCk7Yyh6ZSxGZSk7YyhXYixQYSk7YyhYYixTYSk7YyhDZCxGZCh0aGlzKSk7cGQodGhpcy5tb2RlbCk7dGQodGhpcy5tb2RlbCxhW1FdKTt0aGlzLm1vZGVsLnNldChqYixMYygpKX07cGMucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tb2RlbC5nZXQoYSl9O3BjLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLm1vZGVsLnNldChhLGIpfTsKcGMucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oYSl7aWYoISgxPmFyZ3VtZW50cy5sZW5ndGgpKXtpZigic3RyaW5nIj09PXR5cGVvZiBhcmd1bWVudHNbMF0pe3ZhciBiPWFyZ3VtZW50c1swXTt2YXIgYz1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKX1lbHNlIGI9YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF1bVmFdLGM9YXJndW1lbnRzO2ImJihjPXphKG1lW2JdfHxbXSxjKSxjW1ZhXT1iLHRoaXMubW9kZWwuc2V0KGMsdm9pZCAwLCEwKSx0aGlzLmZpbHRlcnMuRCh0aGlzLm1vZGVsKSx0aGlzLm1vZGVsLmRhdGEubT17fSl9fTtwYy5wcm90b3R5cGUubWE9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3UoYSxjLGIpfHwodihhLGZ1bmN0aW9uKCl7dShhLGMsYil9KSx5KFN0cmluZyhjLmdldChWKSksYSx2b2lkIDAsYiwhMCkpfTsKdmFyIHRkPWZ1bmN0aW9uKGEsYil7dmFyIGM9UChhLFUpO2EuZGF0YS5zZXQobGEsIl9nYSI9PWM/Il9naWQiOmMrIl9naWQiKTtpZigiY29va2llIj09UChhLGFjKSl7aGM9ITE7Yz1DYShQKGEsVSkpO2M9WGQoYSxjKTtpZighYyl7Yz1QKGEsVyk7dmFyIGQ9UChhLCRiKXx8eGEoKTtjPVhjKCJfX3V0bWEiLGQsYyk7dm9pZCAwIT1jPyhKKDEwKSxjPWMuT1sxXSsiLiIrYy5PWzJdKTpjPXZvaWQgMH1jJiYoaGM9ITApO2lmKGQ9YyYmIWEuZ2V0KEhkKSlpZihkPWMuc3BsaXQoIi4iKSwyIT1kLmxlbmd0aClkPSExO2Vsc2UgaWYoZD1OdW1iZXIoZFsxXSkpe3ZhciBlPVIoYSxaYik7ZD1kK2U8KG5ldyBEYXRlKS5nZXRUaW1lKCkvMUUzfWVsc2UgZD0hMTtkJiYoYz12b2lkIDApO2MmJihhLmRhdGEuc2V0KHhkLGMpLGEuZGF0YS5zZXQoUSxjKSwoYz11YyhhKSkmJmEuZGF0YS5zZXQoSSxjKSk7YS5nZXQoamUpJiYoYz1hLmdldChjZSksZD1hLmdldChpZSksIWN8fGQmJiJhdy5kcyIhPQpkKSYmKGM9e30sZD0oTT9kZihjKTp7fSlbUChhLE5hKV0sbGUoYyksZCYmMCE9ZC5sZW5ndGgmJihjPWRbMF0sYS5kYXRhLnNldChmZSxjLnRpbWVzdGFtcC8xRTMpLGEuZGF0YS5zZXQoY2UsYy5xYSkpKTthLmdldChqZSkmJihjPWEuZ2V0KFNlKSxkPXt9LGU9KE0/ZGYoZCwiX2dhY19nYiIsITApOnt9KVtQKGEsTmEpXSxlZihkKSxlJiYwIT1lLmxlbmd0aCYmKGQ9ZVswXSxlPWQucWEsYyYmYyE9PWV8fChkLmxhYmVscyYmZC5sYWJlbHMubGVuZ3RoJiYoZSs9Ii4iK2QubGFiZWxzLmpvaW4oIi4iKSksYS5kYXRhLnNldChUZSxkLnRpbWVzdGFtcC8xRTMpLGEuZGF0YS5zZXQoU2UsZSkpKSl9aWYoYS5nZXQoSGQpKXtjPWJlKCJfZ2EiLCEhYS5nZXQoY2MpKTt2YXIgZz1iZSgiX2dsIiwhIWEuZ2V0KGNjKSk7ZD1EZS5nZXQoYS5nZXQoY2MpKTtlPWQuX2dhO2cmJjA8Zy5pbmRleE9mKCJfZ2EqIikmJiFlJiZKKDMwKTtpZihifHwhYS5nZXQoSmUpKWc9ITE7ZWxzZSBpZihnPWEuZ2V0KEYpLAp2b2lkIDA9PT1nfHxnKCJhbmFseXRpY3Nfc3RvcmFnZSIpKWc9ITE7ZWxzZXtKKDg0KTthLmRhdGEuc2V0KExlLDEpO2lmKGc9ZC5fdXApaWYoZz1KYy5leGVjKE0ucmVmZXJyZXIpKXtnPWdbMV07dmFyIGNhPU0ubG9jYXRpb24uaG9zdG5hbWU7Zz1jYT09PWd8fDA8PWNhLmluZGV4T2YoIi4iK2cpfHwwPD1nLmluZGV4T2YoIi4iK2NhKT8hMDohMX1lbHNlIGc9ITE7Zz1nPyEwOiExfWNhPWQuZ2NsaWQ7dmFyIGw9ZC5fZ2FjO2lmKGN8fGV8fGNhfHxsKWlmKGMmJmUmJkooMzYpLGEuZ2V0KGJjKXx8eWUoYS5nZXQoS2QpKXx8Zyl7aWYoZSYmKEooMzgpLGEuZGF0YS5zZXQoUSxlKSxkLl9naWQmJihKKDUxKSxhLmRhdGEuc2V0KEksZC5fZ2lkKSkpLGNhPyhKKDgyKSxhLmRhdGEuc2V0KGNlLGNhKSxkLmdjbHNyYyYmYS5kYXRhLnNldChpZSxkLmdjbHNyYykpOmwmJihlPWwuc3BsaXQoIi4iKSkmJjI9PT1lLmxlbmd0aCYmKEooMzcpLGEuZGF0YS5zZXQoY2UsZVswXSksYS5kYXRhLnNldChmZSwKZVsxXSkpLChkPWQuX2ZwbGMpJiZQKGEsb2UpJiYoSig4MyksYS5kYXRhLnNldChBZSxkKSksYyliOmlmKGQ9Yy5pbmRleE9mKCIuIiksLTE9PWQpSigyMik7ZWxzZXtlPWMuc3Vic3RyaW5nKDAsZCk7Zz1jLnN1YnN0cmluZyhkKzEpO2Q9Zy5pbmRleE9mKCIuIik7Yz1nLnN1YnN0cmluZygwLGQpO2c9Zy5zdWJzdHJpbmcoZCsxKTtpZigiMSI9PWUpe2lmKGQ9ZyxrZShkLGMpKXtKKDIzKTticmVhayBifX1lbHNlIGlmKCIyIj09ZSl7ZD1nLmluZGV4T2YoIi0iKTtlPSIiOzA8ZD8oZT1nLnN1YnN0cmluZygwLGQpLGQ9Zy5zdWJzdHJpbmcoZCsxKSk6ZD1nLnN1YnN0cmluZygxKTtpZihrZShlK2QsYykpe0ooNTMpO2JyZWFrIGJ9ZSYmKEooMiksYS5kYXRhLnNldChJLGUpKX1lbHNle0ooMjIpO2JyZWFrIGJ9SigxMSk7YS5kYXRhLnNldChRLGQpO2lmKGM9YmUoIl9nYWMiLCEhYS5nZXQoY2MpKSljPWMuc3BsaXQoIi4iKSwiMSIhPWNbMF18fDQhPWMubGVuZ3RoP0ooNzIpOmtlKGNbM10sCmNbMV0pP0ooNzEpOihhLmRhdGEuc2V0KGNlLGNbM10pLGEuZGF0YS5zZXQoZmUsY1syXSksSig3MCkpfX1lbHNlIEooMjEpfWImJihKKDkpLGEuZGF0YS5zZXQoUSxLKGIpKSk7YS5nZXQoUSl8fChiPShiPU8uZ2FHbG9iYWwpJiZiLmZyb21fY29va2llJiYiY29va2llIiE9PVAoYSxhYyk/dm9pZCAwOihiPWImJmIudmlkKSYmLTEhPT1iLnNlYXJjaChqZCk/Yjp2b2lkIDAsYj8oSigxNyksYS5kYXRhLnNldChRLGIpKTooSig4KSxhLmRhdGEuc2V0KFEscmEoKSkpKTthLmdldChJKXx8KEooMyksYS5kYXRhLnNldChJLHJhKCkpKTttYyhhKTtiPU8uZ2FHbG9iYWw9Ty5nYUdsb2JhbHx8e307Yz1QKGEsUSk7YT1jPT09UChhLHhkKTtpZih2b2lkIDA9PWIudmlkfHxhJiYhYi5mcm9tX2Nvb2tpZSliLnZpZD1jLGIuZnJvbV9jb29raWU9YX0scGQ9ZnVuY3Rpb24oYSl7dmFyIGI9Ty5uYXZpZ2F0b3IsYz1PLnNjcmVlbixkPU0ubG9jYXRpb24sZT1hLnNldDthOnt2YXIgZz0hIWEuZ2V0KGVjKSwKY2E9ISFhLmdldChLZCk7dmFyIGw9TS5yZWZlcnJlcjtpZigvXihodHRwcz98YW5kcm9pZC1hcHApOlwvXC8vaS50ZXN0KGwpKXtpZihnKWJyZWFrIGE7Zz0iLy8iK00ubG9jYXRpb24uaG9zdG5hbWU7aWYoIWRlKGwsZykpe2lmKGNhJiYoY2E9Zy5yZXBsYWNlKC9cLi9nLCItIikrIi5jZG4uYW1wcHJvamVjdC5vcmciLGRlKGwsY2EpKSl7bD12b2lkIDA7YnJlYWsgYX1icmVhayBhfX1sPXZvaWQgMH1lLmNhbGwoYSxsYixsKTtkJiYoZT1kLnBhdGhuYW1lfHwiIiwiLyIhPWUuY2hhckF0KDApJiYoSigzMSksZT0iLyIrZSksYS5zZXQoa2IsZC5wcm90b2NvbCsiLy8iK2QuaG9zdG5hbWUrZStkLnNlYXJjaCkpO2MmJmEuc2V0KHFiLGMud2lkdGgrIngiK2MuaGVpZ2h0KTtjJiZhLnNldChwYixjLmNvbG9yRGVwdGgrIi1iaXQiKTtjPU0uZG9jdW1lbnRFbGVtZW50O2w9KGU9TS5ib2R5KSYmZS5jbGllbnRXaWR0aCYmZS5jbGllbnRIZWlnaHQ7Y2E9W107YyYmYy5jbGllbnRXaWR0aCYmCmMuY2xpZW50SGVpZ2h0JiYoIkNTUzFDb21wYXQiPT09TS5jb21wYXRNb2RlfHwhbCk/Y2E9W2MuY2xpZW50V2lkdGgsYy5jbGllbnRIZWlnaHRdOmwmJihjYT1bZS5jbGllbnRXaWR0aCxlLmNsaWVudEhlaWdodF0pO2M9MD49Y2FbMF18fDA+PWNhWzFdPyIiOmNhLmpvaW4oIngiKTthLnNldChyYixjKTtjPWEuc2V0O3ZhciBrO2lmKChlPShlPU8ubmF2aWdhdG9yKT9lLnBsdWdpbnM6bnVsbCkmJmUubGVuZ3RoKWZvcihsPTA7bDxlLmxlbmd0aCYmIWs7bCsrKWNhPWVbbF0sLTE8Y2EubmFtZS5pbmRleE9mKCJTaG9ja3dhdmUgRmxhc2giKSYmKGs9Y2EuZGVzY3JpcHRpb24pO2lmKCFrKXRyeXt2YXIgdz1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guNyIpO2s9dy5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKX1jYXRjaChDZSl7fWlmKCFrKXRyeXt3PW5ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaC42Iiksaz0KIldJTiA2LDAsMjEsMCIsdy5BbGxvd1NjcmlwdEFjY2Vzcz0iYWx3YXlzIixrPXcuR2V0VmFyaWFibGUoIiR2ZXJzaW9uIil9Y2F0Y2goQ2Upe31pZighayl0cnl7dz1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2giKSxrPXcuR2V0VmFyaWFibGUoIiR2ZXJzaW9uIil9Y2F0Y2goQ2Upe31rJiYodz1rLm1hdGNoKC9bXGRdKy9nKSkmJjM8PXcubGVuZ3RoJiYoaz13WzBdKyIuIit3WzFdKyIgciIrd1syXSk7Yy5jYWxsKGEsdGIsa3x8dm9pZCAwKTthLnNldChvYixNLmNoYXJhY3RlclNldHx8TS5jaGFyc2V0KTthLnNldChzYixiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGIuamF2YUVuYWJsZWQmJmIuamF2YUVuYWJsZWQoKXx8ITEpO2Euc2V0KG5iLChiJiYoYi5sYW5ndWFnZXx8Yi5icm93c2VyTGFuZ3VhZ2UpfHwiIikudG9Mb3dlckNhc2UoKSk7YS5kYXRhLnNldChjZSxiZSgiZ2NsaWQiLCEwKSk7YS5kYXRhLnNldChpZSxiZSgiZ2Nsc3JjIiwhMCkpOwphLmRhdGEuc2V0KGZlLE1hdGgucm91bmQoKG5ldyBEYXRlKS5nZXRUaW1lKCkvMUUzKSk7YS5nZXQoY2UpfHwoYS5kYXRhLnNldChTZSxiZSgid2JyYWlkIiwhMCkpLGEuZGF0YS5zZXQoVGUsTWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpKSk7aWYoZCYmYS5nZXQoY2MpJiYoYj1NLmxvY2F0aW9uLmhhc2gpKXtiPWIuc3BsaXQoL1s/JiNdKy8pO2Q9W107Zm9yKGs9MDtrPGIubGVuZ3RoOysraykoRChiW2tdLCJ1dG1faWQiKXx8RChiW2tdLCJ1dG1fY2FtcGFpZ24iKXx8RChiW2tdLCJ1dG1fc291cmNlIil8fEQoYltrXSwidXRtX21lZGl1bSIpfHxEKGJba10sInV0bV90ZXJtIil8fEQoYltrXSwidXRtX2NvbnRlbnQiKXx8RChiW2tdLCJnY2xpZCIpfHxEKGJba10sImRjbGlkIil8fEQoYltrXSwiZ2Nsc3JjIil8fEQoYltrXSwid2JyYWlkIikpJiZkLnB1c2goYltrXSk7MDxkLmxlbmd0aCYmKGI9IiMiK2Quam9pbigiJiIpLGEuc2V0KGtiLGEuZ2V0KGtiKStiKSl9fSwKbWU9e3BhZ2V2aWV3OlttYl0sZXZlbnQ6W3ViLHhiLHliLHpiXSxzb2NpYWw6W0JiLENiLERiXSx0aW1pbmc6W01iLE5iLFBiLE9iXX07dmFyIHJjPWZ1bmN0aW9uKGEpe2lmKCJwcmVyZW5kZXIiPT1NLnZpc2liaWxpdHlTdGF0ZSlyZXR1cm4hMTthKCk7cmV0dXJuITB9LHo9ZnVuY3Rpb24oYSl7aWYoIXJjKGEpKXtKKDE2KTt2YXIgYj0hMSxjPWZ1bmN0aW9uKCl7aWYoIWImJnJjKGEpKXtiPSEwO3ZhciBkPWMsZT1NO2UucmVtb3ZlRXZlbnRMaXN0ZW5lcj9lLnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGQsITEpOmUuZGV0YWNoRXZlbnQmJmUuZGV0YWNoRXZlbnQoIm9udmlzaWJpbGl0eWNoYW5nZSIsZCl9fTtMKE0sInZpc2liaWxpdHljaGFuZ2UiLGMpfX07dmFyIHRlPS9eKD86KFx3KylcLik/KD86KFx3Kyk6KT8oXHcrKSQvLHNjPWZ1bmN0aW9uKGEpe2lmKGVhKGFbMF0pKXRoaXMudT1hWzBdO2Vsc2V7dmFyIGI9dGUuZXhlYyhhWzBdKTtudWxsIT1iJiY0PT1iLmxlbmd0aCYmKHRoaXMuZGE9YlsxXXx8InQwIix0aGlzLks9YlsyXXx8IiIsdGhpcy5tZXRob2ROYW1lPWJbM10sdGhpcy5hYT1bXS5zbGljZS5jYWxsKGEsMSksdGhpcy5LfHwodGhpcy5BPSJjcmVhdGUiPT10aGlzLm1ldGhvZE5hbWUsdGhpcy5pPSJyZXF1aXJlIj09dGhpcy5tZXRob2ROYW1lLHRoaXMuZz0icHJvdmlkZSI9PXRoaXMubWV0aG9kTmFtZSx0aGlzLmJhPSJyZW1vdmUiPT10aGlzLm1ldGhvZE5hbWUpLHRoaXMuaSYmKDM8PXRoaXMuYWEubGVuZ3RoPyh0aGlzLlg9dGhpcy5hYVsxXSx0aGlzLlc9dGhpcy5hYVsyXSk6dGhpcy5hYVsxXSYmKHFhKHRoaXMuYWFbMV0pP3RoaXMuWD10aGlzLmFhWzFdOnRoaXMuVz10aGlzLmFhWzFdKSkpO2I9YVsxXTthPWFbMl07CmlmKCF0aGlzLm1ldGhvZE5hbWUpdGhyb3ciYWJvcnQiO2lmKHRoaXMuaSYmKCFxYShiKXx8IiI9PWIpKXRocm93ImFib3J0IjtpZih0aGlzLmcmJighcWEoYil8fCIiPT1ifHwhZWEoYSkpKXRocm93ImFib3J0IjtpZih1ZCh0aGlzLmRhKXx8dWQodGhpcy5LKSl0aHJvdyJhYm9ydCI7aWYodGhpcy5nJiYidDAiIT10aGlzLmRhKXRocm93ImFib3J0Ijt9fTtmdW5jdGlvbiB1ZChhKXtyZXR1cm4gMDw9YS5pbmRleE9mKCIuIil8fDA8PWEuaW5kZXhPZigiOiIpfTt2YXIgWWQsWmQsJGQsQTtZZD1uZXcgZWU7JGQ9bmV3IGVlO0E9bmV3IGVlO1pkPXtlYzo0NSxlY29tbWVyY2U6NDYsbGlua2lkOjQ3fTsKdmFyIHU9ZnVuY3Rpb24oYSxiLGMpe2I9PU58fGIuZ2V0KFYpO3ZhciBkPVlkLmdldChhKTtpZighZWEoZCkpcmV0dXJuITE7Yi5wbHVnaW5zXz1iLnBsdWdpbnNffHxuZXcgZWU7aWYoYi5wbHVnaW5zXy5nZXQoYSkpcmV0dXJuITA7Yi5wbHVnaW5zXy5zZXQoYSxuZXcgZChiLGN8fHt9KSk7cmV0dXJuITB9LHk9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighZWEoWWQuZ2V0KGIpKSYmISRkLmdldChiKSl7WmQuaGFzT3duUHJvcGVydHkoYikmJkooWmRbYl0pO3ZhciBnPXZvaWQgMDtpZihwLnRlc3QoYikpe0ooNTIpO2E9Ti5qKGEpO2lmKCFhKXJldHVybiEwO2M9S2UoYS5tb2RlbCxiLGQsZSk7Zz1mdW5jdGlvbigpe1ouRChbInByb3ZpZGUiLGIsZnVuY3Rpb24oKXt9XSk7dmFyIGw9T1tkJiZkLmRhdGFMYXllcnx8ImRhdGFMYXllciJdO2wmJmwuaGlkZSYmZWEobC5oaWRlLmVuZCkmJmwuaGlkZVtiXSYmKGwuaGlkZS5lbmQoKSxsLmhpZGUuZW5kPXZvaWQgMCl9fSFjJiZaZC5oYXNPd25Qcm9wZXJ0eShiKT8KKEooMzkpLGM9YisiLmpzIik6Sig0Myk7aWYoYyl7dmFyIGNhO2QmJihjYT1kW29lXSk7cWEoY2EpfHwoY2E9dm9pZCAwKTthPWFlKGNmKGMsY2EpKTshY2F8fG5lKGEucHJvdG9jb2wpJiZCKGEpfHwoYT1hZShjZihjKSkpO25lKGEucHJvdG9jb2wpJiZCKGEpJiYoSWQoYS51cmwsdm9pZCAwLGUsdm9pZCAwLGcpLCRkLnNldChiLCEwKSl9fX0sdj1mdW5jdGlvbihhLGIpe3ZhciBjPUEuZ2V0KGEpfHxbXTtjLnB1c2goYik7QS5zZXQoYSxjKX0sQz1mdW5jdGlvbihhLGIpe1lkLnNldChhLGIpO2I9QS5nZXQoYSl8fFtdO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10oKTtBLnNldChhLFtdKX0sQj1mdW5jdGlvbihhKXt2YXIgYj1hZShNLmxvY2F0aW9uLmhyZWYpO2lmKEQoYS51cmwsR2UoMSkpfHxEKGEudXJsLEdlKDIpKSlyZXR1cm4hMDtpZihhLnF1ZXJ5fHwwPD1hLnVybC5pbmRleE9mKCI/Iil8fDA8PWEucGF0aC5pbmRleE9mKCI6Ly8iKSlyZXR1cm4hMTtpZihhLmhvc3Q9PQpiLmhvc3QmJmEucG9ydD09Yi5wb3J0fHxqZiYmKGI9TS5jcmVhdGVFbGVtZW50KCJhIiksYi5ocmVmPWpmLGI9a2YoYiksYS5ob3N0PT09YlswXSYmYS5wb3J0PT09YlsxXSkpcmV0dXJuITA7Yj0iaHR0cDoiPT1hLnByb3RvY29sPzgwOjQ0MztyZXR1cm4id3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tIj09YS5ob3N0JiYoYS5wb3J0fHxiKT09YiYmRChhLnBhdGgsIi9wbHVnaW5zLyIpPyEwOiExfSxuZT1mdW5jdGlvbihhKXt2YXIgYj1NLmxvY2F0aW9uLnByb3RvY29sO3JldHVybiJodHRwczoiPT1hfHxhPT1iPyEwOiJodHRwOiIhPWE/ITE6Imh0dHA6Ij09Yn0sa2Y9ZnVuY3Rpb24oYSl7dmFyIGI9YS5ob3N0bmFtZXx8IiIsYz0wPD1iLmluZGV4T2YoIl0iKTtiPWIuc3BsaXQoYz8iXSI6IjoiKVswXS50b0xvd2VyQ2FzZSgpO2MmJihiKz0iXSIpO2M9KGEucHJvdG9jb2x8fCIiKS50b0xvd2VyQ2FzZSgpO2M9MSphLnBvcnR8fCgiaHR0cDoiPT1jPzgwOiJodHRwczoiPT1jPzQ0MzoKIiIpO2E9YS5wYXRobmFtZXx8IiI7RChhLCIvIil8fChhPSIvIithKTtyZXR1cm5bYiwiIitjLGFdfSxhZT1mdW5jdGlvbihhKXt2YXIgYj1NLmNyZWF0ZUVsZW1lbnQoImEiKTtiLmhyZWY9TS5sb2NhdGlvbi5ocmVmO3ZhciBjPShiLnByb3RvY29sfHwiIikudG9Mb3dlckNhc2UoKSxkPWtmKGIpLGU9Yi5zZWFyY2h8fCIiLGc9YysiLy8iK2RbMF0rKGRbMV0/IjoiK2RbMV06IiIpO0QoYSwiLy8iKT9hPWMrYTpEKGEsIi8iKT9hPWcrYTohYXx8RChhLCI/Iik/YT1nK2RbMl0rKGF8fGUpOjA+YS5zcGxpdCgiLyIpWzBdLmluZGV4T2YoIjoiKSYmKGE9ZytkWzJdLnN1YnN0cmluZygwLGRbMl0ubGFzdEluZGV4T2YoIi8iKSkrIi8iK2EpO2IuaHJlZj1hO2M9a2YoYik7cmV0dXJue3Byb3RvY29sOihiLnByb3RvY29sfHwiIikudG9Mb3dlckNhc2UoKSxob3N0OmNbMF0scG9ydDpjWzFdLHBhdGg6Y1syXSxxdWVyeTpiLnNlYXJjaHx8IiIsdXJsOmF8fCIifX0sY2Y9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSYmCjA8PWEuaW5kZXhPZigiLyIpP2E6KGJ8fGJkKCExKSkrIi9wbHVnaW5zL3VhLyIrYX07dmFyIFo9e2dhOmZ1bmN0aW9uKCl7Wi5mYT1bXX19O1ouZ2EoKTtaLkQ9ZnVuY3Rpb24oYSl7dmFyIGI9Wi5KLmFwcGx5KFosYXJndW1lbnRzKTtiPVouZmEuY29uY2F0KGIpO2ZvcihaLmZhPVtdOzA8Yi5sZW5ndGgmJiFaLnYoYlswXSkmJiEoYi5zaGlmdCgpLDA8Wi5mYS5sZW5ndGgpOyk7Wi5mYT1aLmZhLmNvbmNhdChiKX07Wi5yYT1mdW5jdGlvbihhKXtOLnEmJigzMDA9PT1OLnEubGVuZ3RoJiYoTi5xLnNoaWZ0KCksTi5xZCsrKSxOLnEucHVzaChhKSl9O1ouSj1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspdHJ5e3ZhciBkPW5ldyBzYyhhcmd1bWVudHNbY10pO2QuZz9DKGQuYWFbMF0sZC5hYVsxXSk6KGQuaSYmKGQuaGE9eShkLmRhLGQuYWFbMF0sZC5YLGQuVykpLGIucHVzaChkKSk7Wi5yYShhcmd1bWVudHNbY10pfWNhdGNoKGUpe31yZXR1cm4gYn07Cloudj1mdW5jdGlvbihhKXt0cnl7aWYoYS51KWEudS5jYWxsKE8sTi5qKCJ0MCIpKTtlbHNle3ZhciBiPWEuZGE9PWdiP046Ti5qKGEuZGEpO2lmKGEuQSl7aWYoInQwIj09YS5kYSYmKGI9Ti5jcmVhdGUuYXBwbHkoTixhLmFhKSxudWxsPT09YikpcmV0dXJuITB9ZWxzZSBpZihhLmJhKU4ucmVtb3ZlKGEuZGEpO2Vsc2UgaWYoYilpZihhLmkpe2lmKGEuaGEmJihhLmhhPXkoYS5kYSxhLmFhWzBdLGEuWCxhLlcpKSwhdShhLmFhWzBdLGIsYS5XKSlyZXR1cm4hMH1lbHNlIGlmKGEuSyl7dmFyIGM9YS5tZXRob2ROYW1lLGQ9YS5hYSxlPWIucGx1Z2luc18uZ2V0KGEuSyk7ZVtjXS5hcHBseShlLGQpfWVsc2UgYlthLm1ldGhvZE5hbWVdLmFwcGx5KGIsYS5hYSl9fWNhdGNoKGcpe319O3ZhciBOPWZ1bmN0aW9uKGEpe0ooMSk7Wi5ELmFwcGx5KFosW2FyZ3VtZW50c10pfTtOLmg9e307Ti5QPVtdO04uTD0wO04ueWE9MDtOLmFuc3dlcj00Mjt2YXIgd2U9W05hLFcsVl07Ti5jcmVhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9emEod2UsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtiW1ZdfHwoYltWXT0idDAiKTt2YXIgYz0iIitiW1ZdO2lmKE4uaFtjXSlyZXR1cm4gTi5oW2NdO2lmKGRhKGIpKXJldHVybiBudWxsO2I9bmV3IHBjKGIpO04uaFtjXT1iO04uUC5wdXNoKGIpO2M9cWMoKS50cmFja2VyX2NyZWF0ZWQ7aWYoZWEoYykpdHJ5e2MoYil9Y2F0Y2goZCl7fXJldHVybiBifTtOLnJlbW92ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MDtiPE4uUC5sZW5ndGg7YisrKWlmKE4uUFtiXS5nZXQoVik9PWEpe04uUC5zcGxpY2UoYiwxKTtOLmhbYV09bnVsbDticmVha319O04uaj1mdW5jdGlvbihhKXtyZXR1cm4gTi5oW2FdfTtOLmdldEFsbD1mdW5jdGlvbigpe3JldHVybiBOLlAuc2xpY2UoMCl9OwpOLk49ZnVuY3Rpb24oKXsiZ2EiIT1nYiYmSig0OSk7dmFyIGE9T1tnYl07aWYoIWF8fDQyIT1hLmFuc3dlcil7Ti5MPWEmJmEubDtOLnlhPTEqbmV3IERhdGU7Ti5sb2FkZWQ9ITA7dmFyIGI9YSYmYS5xLGM9a2EoYik7YT1bXTtjP2E9Yi5zbGljZSgwKTpKKDUwKTtOLnE9Yz9iOltdO04ucS5zcGxpY2UoMCk7Ti5xZD0wO2I9T1tnYl09TjtYKCJjcmVhdGUiLGIsYi5jcmVhdGUpO1goInJlbW92ZSIsYixiLnJlbW92ZSk7WCgiZ2V0QnlOYW1lIixiLGIuaiw1KTtYKCJnZXRBbGwiLGIsYi5nZXRBbGwsNik7Yj1wYy5wcm90b3R5cGU7WCgiZ2V0IixiLGIuZ2V0LDcpO1goInNldCIsYixiLnNldCw0KTtYKCJzZW5kIixiLGIuc2VuZCk7WCgicmVxdWlyZVN5bmMiLGIsYi5tYSk7Yj1ZYS5wcm90b3R5cGU7WCgiZ2V0IixiLGIuZ2V0KTtYKCJzZXQiLGIsYi5zZXQpO2lmKCJodHRwczoiIT1NLmxvY2F0aW9uLnByb3RvY29sJiYhQmEpe2E6e2I9TS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7CmZvcihjPTA7YzxiLmxlbmd0aCYmMTAwPmM7YysrKXt2YXIgZD1iW2NdLnNyYztpZihkJiYwPT1kLmluZGV4T2YoYmQoITApKyIvYW5hbHl0aWNzIikpe2I9ITA7YnJlYWsgYX19Yj0hMX1iJiYoQmE9ITApfShPLmdhcGx1Z2lucz1PLmdhcGx1Z2luc3x8e30pLkxpbmtlcj1EYztiPURjLnByb3RvdHlwZTtDKCJsaW5rZXIiLERjKTtYKCJkZWNvcmF0ZSIsYixiLmNhLDIwKTtYKCJhdXRvTGluayIsYixiLlMsMjUpO1goInBhc3N0aHJvdWdoIixiLGIuJCwyNSk7QygiZGlzcGxheWZlYXR1cmVzIixmZCk7QygiYWRmZWF0dXJlcyIsZmQpO1ouRC5hcHBseShOLGEpfX07dmFyIGdmPU4uTixoZj1PW2diXTtoZiYmaGYucj9nZigpOnooZ2YpO3ooZnVuY3Rpb24oKXtaLkQoWyJwcm92aWRlIiwicmVuZGVyIix1YV0pfSk7fSkod2luZG93KTsK(Line 43)
Message:
Refused to connect to 'https://www.google-analytics.com/j/collect?v=1&_v=j96&a=26235169&t=pageview&_s=1&dl=https%3A%2F%2Fmanagehosting144202b3-aruba.zukunst.at%2Flogin.php%3Fbdyx0Ld2ln93DyAcKy4h8JGQ49mIwlyNVzKLhj8Lpnk0p5xVJtKzmtIbAT80iBNgWDCB1wKqyAEj5kz0p8rFaebmUr9RFblwZ7D6o3FbHROycLol8j9lbqL1&ul=en-us&de=UTF-8&dt=Pagamenti.aruba.it&sd=24-bit&sr=1600x1200&vp=1600x1200&je=0&_u=aEBAAUABEAAAAC~&jid=57048223&gjid=1314185881&cid=1547943106.1694965758&tid=UA-47997651-24&_gid=1301808691.1694965758&_r=1&gtm=2ou6f0&z=2065928649' 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:application/javascript;base64,Ci8vIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCihmdW5jdGlvbigpewoKdmFyIGRhdGEgPSB7CiJyZXNvdXJjZSI6IHsKICAidmVyc2lvbiI6IjEiLAogIAogICJtYWNyb3MiOlt7ImZ1bmN0aW9uIjoiX19lIn0seyJmdW5jdGlvbiI6Il9fY2lkIn1dLAogICJ0YWdzIjpbeyJmdW5jdGlvbiI6Il9fcmVwIiwib25jZV9wZXJfZXZlbnQiOnRydWUsInZ0cF9jb250YWluZXJJZCI6WyJtYWNybyIsMV0sInRhZ19pZCI6MX1dLAogICJwcmVkaWNhdGVzIjpbeyJmdW5jdGlvbiI6Il9lcSIsImFyZzAiOlsibWFjcm8iLDBdLCJhcmcxIjoiZ3RtLmpzIn1dLAogICJydWxlcyI6W1tbImlmIiwwXSxbImFkZCIsMF1dXQp9LAoicnVudGltZSI6W10KCgoKCn07CgoKLyoKCiBDb3B5cmlnaHQgVGhlIENsb3N1cmUgTGlicmFyeSBBdXRob3JzLgogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKi8KdmFyIGgsYWE9ZnVuY3Rpb24oYSl7dmFyIGI9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYjxhLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTphW2IrK119Ontkb25lOiEwfX19LGJhPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5jcmVhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPWE7cmV0dXJuIG5ldyBifSxjYTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LnNldFByb3RvdHlwZU9mKWNhPU9iamVjdC5zZXRQcm90b3R5cGVPZjtlbHNle3ZhciBkYTthOnt2YXIgZWE9e2E6ITB9LGZhPXt9O3RyeXtmYS5fX3Byb3RvX189ZWE7ZGE9ZmEuYTticmVhayBhfWNhdGNoKGEpe31kYT0hMX1jYT1kYT9mdW5jdGlvbihhLGIpe2EuX19wcm90b19fPWI7aWYoYS5fX3Byb3RvX18hPT1iKXRocm93IG5ldyBUeXBlRXJyb3IoYSsiIGlzIG5vdCBleHRlbnNpYmxlIik7cmV0dXJuIGF9Om51bGx9CnZhciBoYT1jYSxrYT1mdW5jdGlvbihhLGIpe2EucHJvdG90eXBlPWJhKGIucHJvdG90eXBlKTthLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hO2lmKGhhKWhhKGEsYik7ZWxzZSBmb3IodmFyIGMgaW4gYilpZigicHJvdG90eXBlIiE9YylpZihPYmplY3QuZGVmaW5lUHJvcGVydGllcyl7dmFyIGQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiLGMpO2QmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGMsZCl9ZWxzZSBhW2NdPWJbY107YS5uaz1iLnByb3RvdHlwZX0sbGE9dGhpc3x8c2VsZixtYT1mdW5jdGlvbihhKXtyZXR1cm4gYX07dmFyIG5hPWZ1bmN0aW9uKCl7fSxwYT1mdW5jdGlvbihhKXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIGF9LGs9ZnVuY3Rpb24oYSl7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgYX0scWE9ZnVuY3Rpb24oYSl7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgYSYmIWlzTmFOKGEpfSxyYT1BcnJheS5pc0FycmF5LHNhPWZ1bmN0aW9uKGEsYil7aWYoYSYmcmEoYSkpZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYVtjXSYmYihhW2NdKSlyZXR1cm4gYVtjXX0sdGE9ZnVuY3Rpb24oYSxiKXtpZighcWEoYSl8fCFxYShiKXx8YT5iKWE9MCxiPTIxNDc0ODM2NDc7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooYi1hKzEpK2EpfSx2YT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1uZXcgdWEsZD0wO2Q8YS5sZW5ndGg7ZCsrKWMuc2V0KGFbZF0sITApO2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKWlmKGMuZ2V0KGJbZV0pKXJldHVybiEwO3JldHVybiExfSxCPWZ1bmN0aW9uKGEsCmIpe2Zvcih2YXIgYyBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGMpJiZiKGMsYVtjXSl9LHdhPWZ1bmN0aW9uKGEpe3JldHVybiEhYSYmKCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwiY2FsbGVlIikpfSx4YT1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChOdW1iZXIoYSkpfHwwfSx6YT1mdW5jdGlvbihhKXtyZXR1cm4iZmFsc2UiPT09U3RyaW5nKGEpLnRvTG93ZXJDYXNlKCk/ITE6ISFhfSxBYT1mdW5jdGlvbihhKXt2YXIgYj1bXTtpZihyYShhKSlmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyliLnB1c2goU3RyaW5nKGFbY10pKTtyZXR1cm4gYn0sQmE9ZnVuY3Rpb24oYSl7cmV0dXJuIGE/YS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik6IiJ9LENhPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkpfSwKRGE9ZnVuY3Rpb24oKXtyZXR1cm4gQ2EoKS5nZXRUaW1lKCl9LHVhPWZ1bmN0aW9uKCl7dGhpcy5wcmVmaXg9Imd0bS4iO3RoaXMudmFsdWVzPXt9fTt1YS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy52YWx1ZXNbdGhpcy5wcmVmaXgrYV09Yn07dWEucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy52YWx1ZXNbdGhpcy5wcmVmaXgrYV19Owp2YXIgRWE9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhJiZhLmhhc093blByb3BlcnR5KGIpP2FbYl06Y30sRmE9ZnVuY3Rpb24oYSl7dmFyIGI9YTtyZXR1cm4gZnVuY3Rpb24oKXtpZihiKXt2YXIgYz1iO2I9dm9pZCAwO3RyeXtjKCl9Y2F0Y2goZCl7fX19fSxHYT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiBiKWIuaGFzT3duUHJvcGVydHkoYykmJihhW2NdPWJbY10pfSxIYT1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGIpKXJldHVybiEwO3JldHVybiExfSxJYT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspYy5wdXNoKGFbZF0pLGMucHVzaC5hcHBseShjLGJbYVtkXV18fFtdKTtyZXR1cm4gY30sSmE9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9e30sZD1jLGU9YS5zcGxpdCgiLiIpLGY9MDtmPGUubGVuZ3RoLTE7ZisrKWQ9ZFtlW2ZdXT17fTtkW2VbZS5sZW5ndGgtMV1dPWI7cmV0dXJuIGN9LExhPS9eXHd7MSw5fSQvLApNYT1mdW5jdGlvbihhLGIpe2E9YXx8e307Yj1ifHwiLCI7dmFyIGM9W107QihhLGZ1bmN0aW9uKGQsZSl7TGEudGVzdChkKSYmZSYmYy5wdXNoKGQpfSk7cmV0dXJuIGMuam9pbihiKX07LyoKCiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAoqLwp2YXIgTmEsT2E9ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1OYSl7dmFyIGE9bnVsbCxiPWxhLnRydXN0ZWRUeXBlcztpZihiJiZiLmNyZWF0ZVBvbGljeSl7dHJ5e2E9Yi5jcmVhdGVQb2xpY3koImdvb2cjaHRtbCIse2NyZWF0ZUhUTUw6bWEsY3JlYXRlU2NyaXB0Om1hLGNyZWF0ZVNjcmlwdFVSTDptYX0pfWNhdGNoKGMpe2xhLmNvbnNvbGUmJmxhLmNvbnNvbGUuZXJyb3IoYy5tZXNzYWdlKX1OYT1hfWVsc2UgTmE9YX1yZXR1cm4gTmF9O3ZhciBRYT1mdW5jdGlvbihhLGIpe3RoaXMuZz1iPT09UGE/YToiIn07UWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZysiIn07dmFyIFBhPXt9O3ZhciBSYT0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwKTp8W146Lz8jXSooPzpbLz8jXXwkKSkvaTtmdW5jdGlvbiBTYSgpe3ZhciBhPWxhLm5hdmlnYXRvcjtpZihhKXt2YXIgYj1hLnVzZXJBZ2VudDtpZihiKXJldHVybiBifXJldHVybiIifWZ1bmN0aW9uIFRhKGEpe3JldHVybi0xIT1TYSgpLmluZGV4T2YoYSl9O3ZhciBVYT17fSxWYT1mdW5jdGlvbihhLGIpe3RoaXMuZz1iPT09VWE/YToiIn07VmEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZy50b1N0cmluZygpfTt2YXIgV2E9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBWYSYmYS5jb25zdHJ1Y3Rvcj09PVZhP2EuZzoidHlwZV9lcnJvcjpTYWZlSHRtbCJ9LFhhPWZ1bmN0aW9uKGEpe3ZhciBiPWEsYz1PYSgpLGQ9Yz9jLmNyZWF0ZUhUTUwoYik6YjtyZXR1cm4gbmV3IFZhKGQsVWEpfTtmdW5jdGlvbiBZYShhKXtpZigic2NyaXB0Ij09PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXRocm93IEVycm9yKCJVc2Ugc2V0VGV4dENvbnRlbnQgd2l0aCBhIFNhZmVTY3JpcHQuIik7aWYoInN0eWxlIj09PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXRocm93IEVycm9yKCJVc2Ugc2V0VGV4dENvbnRlbnQgd2l0aCBhIFNhZmVTdHlsZVNoZWV0LiIpO307dmFyIEc9d2luZG93LEg9ZG9jdW1lbnQsWmE9bmF2aWdhdG9yLCRhPUguY3VycmVudFNjcmlwdCYmSC5jdXJyZW50U2NyaXB0LnNyYyxhYj1mdW5jdGlvbihhLGIpe3ZhciBjPUdbYV07R1thXT12b2lkIDA9PT1jP2I6YztyZXR1cm4gR1thXX0sYmI9ZnVuY3Rpb24oYSxiKXtiJiYoYS5hZGRFdmVudExpc3RlbmVyP2Eub25sb2FkPWI6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXthLnJlYWR5U3RhdGUgaW57bG9hZGVkOjEsY29tcGxldGU6MX0mJihhLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIoKSl9KX0sY2I9e2FzeW5jOjEsbm9uY2U6MSxvbmVycm9yOjEsb25sb2FkOjEsc3JjOjEsdHlwZToxfSxkYj17b25sb2FkOjEsc3JjOjEsd2lkdGg6MSxoZWlnaHQ6MSxzdHlsZToxfTtmdW5jdGlvbiBlYihhLGIsYyl7YiYmQihiLGZ1bmN0aW9uKGQsZSl7ZD1kLnRvTG93ZXJDYXNlKCk7Yy5oYXNPd25Qcm9wZXJ0eShkKXx8YS5zZXRBdHRyaWJ1dGUoZCxlKX0pfQp2YXIgZmI9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9SC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtlYihlLGQsY2IpO2UudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtlLmFzeW5jPSEwO3ZhciBmLGc9YSxsPU9hKCksbT1sP2wuY3JlYXRlU2NyaXB0VVJMKGcpOmc7Zj1uZXcgUWEobSxQYSk7ZS5zcmM9ZiBpbnN0YW5jZW9mIFFhJiZmLmNvbnN0cnVjdG9yPT09UWE/Zi5nOiJ0eXBlX2Vycm9yOlRydXN0ZWRSZXNvdXJjZVVybCI7dmFyIG4scCxxLHI9bnVsbD09KHE9KHA9KGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKT92b2lkIDA6cS5jYWxsKHAsInNjcmlwdFtub25jZV0iKTsobj1yP3Iubm9uY2V8fHIuZ2V0QXR0cmlidXRlKCJub25jZSIpfHwiIjoiIikmJmUuc2V0QXR0cmlidXRlKCJub25jZSIsbik7YmIoZSxiKTtjJiYoZS5vbmVycm9yPWMpO3ZhciB0PUguZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzBdfHwKSC5ib2R5fHxILmhlYWQ7dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHQpO3JldHVybiBlfSxnYj1mdW5jdGlvbigpe2lmKCRhKXt2YXIgYT0kYS50b0xvd2VyQ2FzZSgpO2lmKDA9PT1hLmluZGV4T2YoImh0dHBzOi8vIikpcmV0dXJuIDI7aWYoMD09PWEuaW5kZXhPZigiaHR0cDovLyIpKXJldHVybiAzfXJldHVybiAxfSxoYj1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWUsZz0hMTtmfHwoZj1ILmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLGc9ITApO2ViKGYsYyxkYik7ZCYmQihkLGZ1bmN0aW9uKG0sbil7Zi5kYXRhc2V0W21dPW59KTtmLmhlaWdodD0iMCI7Zi53aWR0aD0iMCI7Zi5zdHlsZS5kaXNwbGF5PSJub25lIjtmLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7aWYoZyl7dmFyIGw9SC5ib2R5JiZILmJvZHkubGFzdENoaWxkfHxILmJvZHl8fEguaGVhZDtsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGYsbCl9YmIoZixiKTt2b2lkIDAhPT1hJiYoZi5zcmM9YSk7cmV0dXJuIGZ9LAppYj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9bmV3IEltYWdlKDEsMSk7ZC5vbmxvYWQ9ZnVuY3Rpb24oKXtkLm9ubG9hZD1udWxsO2ImJmIoKX07ZC5vbmVycm9yPWZ1bmN0aW9uKCl7ZC5vbmVycm9yPW51bGw7YyYmYygpfTtkLnNyYz1hO3JldHVybiBkfSxqYj1mdW5jdGlvbihhLGIsYyxkKXthLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKGIsYywhIWQpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitiLGMpfSxrYj1mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyP2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpOmEuZGV0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoIm9uIitiLGMpfSxKPWZ1bmN0aW9uKGEpe0cuc2V0VGltZW91dChhLDApfSxsYj1mdW5jdGlvbihhLGIpe3JldHVybiBhJiZiJiZhLmF0dHJpYnV0ZXMmJmEuYXR0cmlidXRlc1tiXT9hLmF0dHJpYnV0ZXNbYl0udmFsdWU6bnVsbH0sbWI9ZnVuY3Rpb24oYSl7dmFyIGI9CmEuaW5uZXJUZXh0fHxhLnRleHRDb250ZW50fHwiIjtiJiYiICIhPWImJihiPWIucmVwbGFjZSgvXltcc1x4YTBdK3xbXHNceGEwXSskL2csIiIpKTtiJiYoYj1iLnJlcGxhY2UoLyhceGEwK3xcc3syLH18XG58XHJcdCkvZywiICIpKTtyZXR1cm4gYn0sbmI9ZnVuY3Rpb24oYSl7dmFyIGI9SC5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPWIsZD1YYSgiQTxkaXY+IithKyI8L2Rpdj4iKTt2b2lkIDAhPT1jLnRhZ05hbWUmJllhKGMpO2MuaW5uZXJIVE1MPVdhKGQpO2I9Yi5sYXN0Q2hpbGQ7Zm9yKHZhciBlPVtdO2IuZmlyc3RDaGlsZDspZS5wdXNoKGIucmVtb3ZlQ2hpbGQoYi5maXJzdENoaWxkKSk7cmV0dXJuIGV9LG9iPWZ1bmN0aW9uKGEsYixjKXtjPWN8fDEwMDtmb3IodmFyIGQ9e30sZT0wO2U8Yi5sZW5ndGg7ZSsrKWRbYltlXV09ITA7Zm9yKHZhciBmPWEsZz0wO2YmJmc8PWM7ZysrKXtpZihkW1N0cmluZyhmLnRhZ05hbWUpLnRvTG93ZXJDYXNlKCldKXJldHVybiBmO2Y9Zi5wYXJlbnRFbGVtZW50fXJldHVybiBudWxsfSwKcGI9ZnVuY3Rpb24oYSl7dmFyIGI7dHJ5e2I9WmEuc2VuZEJlYWNvbiYmWmEuc2VuZEJlYWNvbihhKX1jYXRjaChjKXt9Ynx8aWIoYSl9LHFiPWZ1bmN0aW9uKGEsYil7dmFyIGM9YVtiXTtjJiYic3RyaW5nIj09PXR5cGVvZiBjLmFuaW1WYWwmJihjPWMuYW5pbVZhbCk7cmV0dXJuIGN9LHJiPWZ1bmN0aW9uKGEpe3ZhciBiPXtoZWFkZXJzOnsiQXR0cmlidXRpb24tUmVwb3J0aW5nLUVsaWdpYmxlIjoidHJpZ2dlciJ9LGtlZXBhbGl2ZTohMH07dHJ5e0cuZmV0Y2goYSxiKX1jYXRjaChjKXt9fTsvKgogalF1ZXJ5IChjKSAyMDA1LCAyMDEyIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGpxdWVyeS5vcmcvbGljZW5zZS4gKi8KdmFyIHNiPS9cW29iamVjdCAoQm9vbGVhbnxOdW1iZXJ8U3RyaW5nfEZ1bmN0aW9ufEFycmF5fERhdGV8UmVnRXhwKVxdLyx0Yj1mdW5jdGlvbihhKXtpZihudWxsPT1hKXJldHVybiBTdHJpbmcoYSk7dmFyIGI9c2IuZXhlYyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoT2JqZWN0KGEpKSk7cmV0dXJuIGI/YlsxXS50b0xvd2VyQ2FzZSgpOiJvYmplY3QifSx1Yj1mdW5jdGlvbihhLGIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT2JqZWN0KGEpLGIpfSx2Yj1mdW5jdGlvbihhKXtpZighYXx8Im9iamVjdCIhPXRiKGEpfHxhLm5vZGVUeXBlfHxhPT1hLndpbmRvdylyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIXViKGEsImNvbnN0cnVjdG9yIikmJiF1YihhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfWZvcih2YXIgYiBpbiBhKTtyZXR1cm4gdm9pZCAwPT09CmJ8fHViKGEsYil9LE49ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHwoImFycmF5Ij09dGIoYSk/W106e30pLGQ7Zm9yKGQgaW4gYSlpZih1YihhLGQpKXt2YXIgZT1hW2RdOyJhcnJheSI9PXRiKGUpPygiYXJyYXkiIT10YihjW2RdKSYmKGNbZF09W10pLGNbZF09TihlLGNbZF0pKTp2YihlKT8odmIoY1tkXSl8fChjW2RdPXt9KSxjW2RdPU4oZSxjW2RdKSk6Y1tkXT1lfXJldHVybiBjfTt2YXIgd2I9ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YXx8cmEoYSl8fHZiKGEpKXJldHVybiEwO3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSAiYm9vbGVhbiI6Y2FzZSAibnVtYmVyIjpjYXNlICJzdHJpbmciOmNhc2UgImZ1bmN0aW9uIjpyZXR1cm4hMH1yZXR1cm4hMX07dmFyIHhiPWZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oYil7cmV0dXJue3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIGJ9fX07cmV0dXJue3hoOmEoImNvbnNlbnQiKSx5aDphKCJjb25zZW50X2Fsd2F5c19maXJlIiksQWY6YSgiY29udmVydF9jYXNlX3RvIiksQmY6YSgiY29udmVydF9mYWxzZV90byIpLENmOmEoImNvbnZlcnRfbnVsbF90byIpLERmOmEoImNvbnZlcnRfdHJ1ZV90byIpLEVmOmEoImNvbnZlcnRfdW5kZWZpbmVkX3RvIiksU2o6YSgiZGVidWdfbW9kZV9tZXRhZGF0YSIpLHViOmEoImZ1bmN0aW9uIiksSmU6YSgiaW5zdGFuY2VfbmFtZSIpLGlpOmEoImxpdmVfb25seSIpLGppOmEoIm1hbHdhcmVfZGlzYWJsZWQiKSxraTphKCJtZXRhZGF0YSIpLHJpOmEoIm9yaWdpbmFsX2FjdGl2aXR5X2lkIiksZGs6YSgib3JpZ2luYWxfdmVuZG9yX3RlbXBsYXRlX2lkIiksY2s6YSgib25jZV9vbl9sb2FkIiksb2k6YSgib25jZV9wZXJfZXZlbnQiKSxpZzphKCJvbmNlX3Blcl9sb2FkIiksCmVrOmEoInByaW9yaXR5X292ZXJyaWRlIiksZms6YSgicmVzcGVjdGVkX2NvbnNlbnRfdHlwZXMiKSxvZzphKCJzZXR1cF90YWdzIikscWc6YSgidGFnX2lkIikscmc6YSgidGVhcmRvd25fdGFncyIpfX0oKTt2YXIgVWI7CnZhciBWYj1bXSxXYj1bXSxYYj1bXSxZYj1bXSxaYj1bXSwkYj17fSxhYyxiYyxjYyxkYz1mdW5jdGlvbihhLGIpe3ZhciBjPWFbImZ1bmN0aW9uIl0sZD1iJiZiLmV2ZW50O2lmKCFjKXRocm93IEVycm9yKCJFcnJvcjogTm8gZnVuY3Rpb24gbmFtZSBnaXZlbiBmb3IgZnVuY3Rpb24gY2FsbC4iKTt2YXIgZT0kYltjXSxmPXt9LGc7Zm9yKGcgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGcpKWlmKDA9PT1nLmluZGV4T2YoInZ0cF8iKSllJiZkJiZkLkVnJiZkLkVnKGFbZ10pLGZbdm9pZCAwIT09ZT9nOmcuc3Vic3RyKDQpXT1hW2ddO2Vsc2UgaWYoZz09PXhiLnloLnRvU3RyaW5nKCkmJmFbZ10pe31lJiZkJiZkLkRnJiYoZi52dHBfZ3RtQ2FjaGVkVmFsdWVzPWQuRGcpOwppZihiKXtpZihudWxsPT1iLm5hbWUpe3ZhciBsO2E6e3ZhciBtPWIuaW5kZXg7aWYobnVsbD09bSlsPSIiO2Vsc2V7dmFyIG47c3dpdGNoKGIudHlwZSl7Y2FzZSAyOm49VmJbbV07YnJlYWs7Y2FzZSAxOm49WWJbbV07YnJlYWs7ZGVmYXVsdDpsPSIiO2JyZWFrIGF9dmFyIHA9biYmblt4Yi5KZV07bD1wP1N0cmluZyhwKToiIn19Yi5uYW1lPWx9ZSYmKGYudnRwX2d0bUVudGl0eUluZGV4PWIuaW5kZXgsZi52dHBfZ3RtRW50aXR5TmFtZT1iLm5hbWUpfXJldHVybiB2b2lkIDAhPT1lP2UoZik6VWIoYyxmLGIpfSxnYz1mdW5jdGlvbihhLGIsYyl7Yz1jfHxbXTt2YXIgZD17fSxlO2ZvcihlIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShlKSYmKGRbZV09ZmMoYVtlXSxiLGMpKTtyZXR1cm4gZH0sZmM9ZnVuY3Rpb24oYSxiLGMpe2lmKHJhKGEpKXt2YXIgZDtzd2l0Y2goYVswXSl7Y2FzZSAiZnVuY3Rpb25faWQiOnJldHVybiBhWzFdO2Nhc2UgImxpc3QiOmQ9W107Zm9yKHZhciBlPTE7ZTwKYS5sZW5ndGg7ZSsrKWQucHVzaChmYyhhW2VdLGIsYykpO3JldHVybiBkO2Nhc2UgIm1hY3JvIjp2YXIgZj1hWzFdO2lmKGNbZl0pcmV0dXJuO3ZhciBnPVZiW2ZdO2lmKCFnfHxiLmFmKGcpKXJldHVybjtjW2ZdPSEwO3ZhciBsPVN0cmluZyhnW3hiLkplXSk7dHJ5e3ZhciBtPWdjKGcsYixjKTttLnZ0cF9ndG1FdmVudElkPWIuaWQ7Yi5wcmlvcml0eUlkJiYobS52dHBfZ3RtUHJpb3JpdHlJZD1iLnByaW9yaXR5SWQpO2Q9ZGMobSx7ZXZlbnQ6YixpbmRleDpmLHR5cGU6MixuYW1lOmx9KTtjYyYmKGQ9Y2MuRGkoZCxtKSl9Y2F0Y2godyl7Yi5YZyYmYi5YZyh3LE51bWJlcihmKSxsKSxkPSExfWNbZl09ITE7cmV0dXJuIGQ7Y2FzZSAibWFwIjpkPXt9O2Zvcih2YXIgbj0xO248YS5sZW5ndGg7bis9MilkW2ZjKGFbbl0sYixjKV09ZmMoYVtuKzFdLGIsYyk7cmV0dXJuIGQ7Y2FzZSAidGVtcGxhdGUiOmQ9W107Zm9yKHZhciBwPSExLHE9MTtxPGEubGVuZ3RoO3ErKyl7dmFyIHI9ZmMoYVtxXSwKYixjKTtiYyYmKHA9cHx8cj09PWJjLnpkKTtkLnB1c2gocil9cmV0dXJuIGJjJiZwP2JjLkdpKGQpOmQuam9pbigiIik7Y2FzZSAiZXNjYXBlIjpkPWZjKGFbMV0sYixjKTtpZihiYyYmcmEoYVsxXSkmJiJtYWNybyI9PT1hWzFdWzBdJiZiYy5aaShhKSlyZXR1cm4gYmMucmooZCk7ZD1TdHJpbmcoZCk7Zm9yKHZhciB0PTI7dDxhLmxlbmd0aDt0KyspeWJbYVt0XV0mJihkPXliW2FbdF1dKGQpKTtyZXR1cm4gZDtjYXNlICJ0YWciOnZhciB1PWFbMV07aWYoIVliW3VdKXRocm93IEVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSB0YWcgcmVmZXJlbmNlICIrdSsiLiIpO3JldHVybiBkPXtNZzphWzJdLGluZGV4OnV9O2Nhc2UgInpiIjp2YXIgdj17YXJnMDphWzJdLGFyZzE6YVszXSxpZ25vcmVfY2FzZTphWzVdfTt2WyJmdW5jdGlvbiJdPWFbMV07dmFyIHg9aGModixiLGMpLHk9ISFhWzRdO3JldHVybiB5fHwyIT09eD95IT09KDE9PT14KTpudWxsO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZXhwYW5kIHVua25vd24gVmFsdWUgdHlwZTogIisKYVswXSsiLiIpO319cmV0dXJuIGF9LGhjPWZ1bmN0aW9uKGEsYixjKXt0cnl7cmV0dXJuIGFjKGdjKGEsYixjKSl9Y2F0Y2goZCl7SlNPTi5zdHJpbmdpZnkoYSl9cmV0dXJuIDJ9O3ZhciBrYz1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKHIpe2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7dCsrKWRbclt0XV09ITB9Zm9yKHZhciBjPVtdLGQ9W10sZT1pYyhhKSxmPTA7ZjxXYi5sZW5ndGg7ZisrKXt2YXIgZz1XYltmXSxsPWpjKGcsZSk7aWYobCl7Zm9yKHZhciBtPWcuYWRkfHxbXSxuPTA7bjxtLmxlbmd0aDtuKyspY1ttW25dXT0hMDtiKGcuYmxvY2t8fFtdKX1lbHNlIG51bGw9PT1sJiZiKGcuYmxvY2t8fFtdKTt9Zm9yKHZhciBwPVtdLHE9MDtxPFliLmxlbmd0aDtxKyspY1txXSYmIWRbcV0mJihwW3FdPSEwKTtyZXR1cm4gcH0samM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9YVsiaWYiXXx8W10sZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1iKGNbZF0pO2lmKDA9PT1lKXJldHVybiExO2lmKDI9PT1lKXJldHVybiBudWxsfWZvcih2YXIgZj0KYS51bmxlc3N8fFtdLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGw9YihmW2ddKTtpZigyPT09bClyZXR1cm4gbnVsbDtpZigxPT09bClyZXR1cm4hMX1yZXR1cm4hMH0saWM9ZnVuY3Rpb24oYSl7dmFyIGI9W107cmV0dXJuIGZ1bmN0aW9uKGMpe3ZvaWQgMD09PWJbY10mJihiW2NdPWhjKFhiW2NdLGEpKTtyZXR1cm4gYltjXX19O3ZhciBsYz17RGk6ZnVuY3Rpb24oYSxiKXtiW3hiLkFmXSYmInN0cmluZyI9PT10eXBlb2YgYSYmKGE9MT09Ylt4Yi5BZl0/YS50b0xvd2VyQ2FzZSgpOmEudG9VcHBlckNhc2UoKSk7Yi5oYXNPd25Qcm9wZXJ0eSh4Yi5DZikmJm51bGw9PT1hJiYoYT1iW3hiLkNmXSk7Yi5oYXNPd25Qcm9wZXJ0eSh4Yi5FZikmJnZvaWQgMD09PWEmJihhPWJbeGIuRWZdKTtiLmhhc093blByb3BlcnR5KHhiLkRmKSYmITA9PT1hJiYoYT1iW3hiLkRmXSk7Yi5oYXNPd25Qcm9wZXJ0eSh4Yi5CZikmJiExPT09YSYmKGE9Ylt4Yi5CZl0pO3JldHVybiBhfX07Cgp2YXIgTWM9ZnVuY3Rpb24oYSl7cmV0dXJuIExjP0gucXVlcnlTZWxlY3RvckFsbChhKTpudWxsfSxOYz1mdW5jdGlvbihhLGIpe2lmKCFMYylyZXR1cm4gbnVsbDtpZihFbGVtZW50LnByb3RvdHlwZS5jbG9zZXN0KXRyeXtyZXR1cm4gYS5jbG9zZXN0KGIpfWNhdGNoKGUpe3JldHVybiBudWxsfXZhciBjPUVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXN8fEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8RWxlbWVudC5wcm90b3R5cGUubW96TWF0Y2hlc1NlbGVjdG9yfHxFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3Rvcnx8RWxlbWVudC5wcm90b3R5cGUub01hdGNoZXNTZWxlY3RvcixkPWE7aWYoIUguZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGQpKXJldHVybiBudWxsO2Rve3RyeXtpZihjLmNhbGwoZCxiKSlyZXR1cm4gZH1jYXRjaChlKXticmVha31kPWQucGFyZW50RWxlbWVudHx8ZC5wYXJlbnROb2RlfXdoaWxlKG51bGwhPT1kJiYxPT09ZC5ub2RlVHlwZSk7CnJldHVybiBudWxsfSxPYz0hMTtpZihILnF1ZXJ5U2VsZWN0b3JBbGwpdHJ5e3ZhciBQYz1ILnF1ZXJ5U2VsZWN0b3JBbGwoIjpyb290Iik7UGMmJjE9PVBjLmxlbmd0aCYmUGNbMF09PUguZG9jdW1lbnRFbGVtZW50JiYoT2M9ITApfWNhdGNoKGEpe312YXIgTGM9T2M7dmFyIFFjPXt9LFJjPWZ1bmN0aW9uKGEsYil7UWNbYV09UWNbYV18fFtdO1FjW2FdW2JdPSEwfSxTYz1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz1RY1thXXx8W10sZD0wO2Q8Yy5sZW5ndGg7ZCsrKWNbZF0mJihiW01hdGguZmxvb3IoZC82KV1ePTE8PGQlNik7Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspYltlXT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXyIuY2hhckF0KGJbZV18fDApO3JldHVybiBiLmpvaW4oIiIpfSxUYz1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPVFjLkdBNF9FVkVOVHx8W10sYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10mJmEucHVzaChjKTtyZXR1cm4gMDxhLmxlbmd0aD9hOnZvaWQgMH07dmFyIFE9ZnVuY3Rpb24oYSl7UmMoIkdUTSIsYSl9O3ZhciBUPXtVYjoiX2VlIixoZzoiX2lzX3Bhc3N0aHJvdWdoX2NpZCIsZ2c6Il9pc19saW5rZXJfdmFsaWQiLFFiOiJldmVudF9jYWxsYmFjayIsbWQ6ImV2ZW50X3RpbWVvdXQiLEFhOiJndGFnLmNvbmZpZyIsR2E6Imd0YWcuZ2V0Iix5YToicHVyY2hhc2UiLE1iOiJyZWZ1bmQiLG9iOiJiZWdpbl9jaGVja291dCIsSmI6ImFkZF90b19jYXJ0IixLYjoicmVtb3ZlX2Zyb21fY2FydCIsSGg6InZpZXdfY2FydCIsR2Y6ImFkZF90b193aXNobGlzdCIsemE6InZpZXdfaXRlbSIsTGI6InZpZXdfcHJvbW90aW9uIixoZToic2VsZWN0X3Byb21vdGlvbiIsZmU6InNlbGVjdF9pdGVtIixwYjoidmlld19pdGVtX2xpc3QiLEZmOiJhZGRfcGF5bWVudF9pbmZvIixHaDoiYWRkX3NoaXBwaW5nX2luZm8iLElhOiJ2YWx1ZV9rZXkiLFFhOiJ2YWx1ZV9jYWxsYmFjayIsVToiYWxsb3dfYWRfcGVyc29uYWxpemF0aW9uX3NpZ25hbHMiLHhjOiJyZXN0cmljdGVkX2RhdGFfcHJvY2Vzc2luZyIsb2M6ImFsbG93X2dvb2dsZV9zaWduYWxzIiwKb2E6ImNvb2tpZV9leHBpcmVzIixyYjoiY29va2llX3VwZGF0ZSIseWM6InNlc3Npb25fZHVyYXRpb24iLHVkOiJzZXNzaW9uX2VuZ2FnZWRfdGltZSIsa2Q6ImVuZ2FnZW1lbnRfdGltZV9tc2VjIixLYToidXNlcl9wcm9wZXJ0aWVzIixWOiJ0cmFuc3BvcnRfdXJsIixhYToiYWRzX2RhdGFfcmVkYWN0aW9uIixsYToidXNlcl9kYXRhIix1YzoiZmlyc3RfcGFydHlfY29sbGVjdGlvbiIsRDoiYWRfc3RvcmFnZSIsTToiYW5hbHl0aWNzX3N0b3JhZ2UiLHlmOiJyZWdpb24iLHpmOiJ3YWl0X2Zvcl91cGRhdGUiLGlhOiJjb252ZXJzaW9uX2xpbmtlciIsQmE6ImNvbnZlcnNpb25fY29va2llX3ByZWZpeCIsZGE6InZhbHVlIixxYToiY3VycmVuY3kiLGJnOiJ0cmlwX3R5cGUiLFc6Iml0ZW1zIixUZjoicGFzc2VuZ2VycyIsYmQ6ImFsbG93X2N1c3RvbV9zY3JpcHRzIixoYjoic2Vzc2lvbl9pZCIsQmU6InF1YW50aXR5IixTYToidHJhbnNhY3Rpb25faWQiLFJhOiJsYW5ndWFnZSIsT2I6ImNvdW50cnkiLApjZDoiYWxsb3dfZW5oYW5jZWRfY29udmVyc2lvbnMiLG9lOiJhd19tZXJjaGFudF9pZCIsbWU6ImF3X2ZlZWRfY291bnRyeSIsbmU6ImF3X2ZlZWRfbGFuZ3VhZ2UiLGtlOiJkaXNjb3VudCIsUDoiZGV2ZWxvcGVyX2lkIixRZjoiZ2xvYmFsX2RldmVsb3Blcl9pZF9zdHJpbmciLE9mOiJldmVudF9kZXZlbG9wZXJfaWRfc3RyaW5nIix2ZDoiZGVsaXZlcnlfcG9zdGFsX2NvZGUiLHZlOiJlc3RpbWF0ZWRfZGVsaXZlcnlfZGF0ZSIsdGU6InNoaXBwaW5nIix6ZToibmV3X2N1c3RvbWVyIixwZToiY3VzdG9tZXJfbGlmZXRpbWVfdmFsdWUiLHVlOiJlbmhhbmNlZF9jb252ZXJzaW9ucyIsbWM6InBhZ2VfdmlldyIsa2E6ImxpbmtlciIsTjoiZG9tYWlucyIsU2I6ImRlY29yYXRlX2Zvcm1zIixOZjoiZW5oYW5jZWRfY29udmVyc2lvbnNfYXV0b21hdGljX3NldHRpbmdzIixPaDoiYXV0b19kZXRlY3Rpb25fZW5hYmxlZCIseGU6ImdhX3RlbXBfY2xpZW50X2lkIixuYzoidXNlcl9lbmdhZ2VtZW50IiwKQmg6ImFwcF9yZW1vdmUiLENoOiJhcHBfc3RvcmVfcmVmdW5kIixEaDoiYXBwX3N0b3JlX3N1YnNjcmlwdGlvbl9jYW5jZWwiLEVoOiJhcHBfc3RvcmVfc3Vic2NyaXB0aW9uX2NvbnZlcnQiLEZoOiJhcHBfc3RvcmVfc3Vic2NyaXB0aW9uX3JlbmV3IixJaDoiZmlyc3Rfb3BlbiIsSmg6ImZpcnN0X3Zpc2l0IixLaDoiaW5fYXBwX3B1cmNoYXNlIixMaDoic2Vzc2lvbl9zdGFydCIsTWg6ImFsbG93X2Rpc3BsYXlfZmVhdHVyZXMiLHFjOiJjYW1wYWlnbiIsZGQ6ImNhbXBhaWduX2NvbnRlbnQiLGVkOiJjYW1wYWlnbl9pZCIsZmQ6ImNhbXBhaWduX21lZGl1bSIsZ2Q6ImNhbXBhaWduX25hbWUiLGhkOiJjYW1wYWlnbl9zb3VyY2UiLGpkOiJjYW1wYWlnbl90ZXJtIixuYToiY2xpZW50X2lkIixqYToiY29va2llX2RvbWFpbiIsTmI6ImNvb2tpZV9uYW1lIixaYToiY29va2llX3BhdGgiLEhhOiJjb29raWVfZmxhZ3MiLFBiOiJjdXN0b21fbWFwIixwZDoiZ3JvdXBzIixTZjoibm9uX2ludGVyYWN0aW9uIiwKZWI6InBhZ2VfbG9jYXRpb24iLEFlOiJwYWdlX3BhdGgiLGZiOiJwYWdlX3JlZmVycmVyIixyZDoicGFnZV90aXRsZSIsRGE6InNlbmRfcGFnZV92aWV3Iix0Yjoic2VuZF90byIsemM6InNlc3Npb25fZW5nYWdlZCIsc2M6ImV1aWRfbG9nZ2VkX2luX3N0YXRlIixBYzoic2Vzc2lvbl9udW1iZXIiLGNpOiJ0cmFja2luZ19pZCIsVGE6InVybF9wYXNzdGhyb3VnaCIsUmI6ImFjY2VwdF9pbmNvbWluZyIsd2M6InVybF9wb3NpdGlvbiIsV2Y6InBob25lX2NvbnZlcnNpb25fbnVtYmVyIixVZjoicGhvbmVfY29udmVyc2lvbl9jYWxsYmFjayIsVmY6InBob25lX2NvbnZlcnNpb25fY3NzX2NsYXNzIixYZjoicGhvbmVfY29udmVyc2lvbl9vcHRpb25zIixYaDoicGhvbmVfY29udmVyc2lvbl9pZHMiLFdoOiJwaG9uZV9jb252ZXJzaW9uX2NvdW50cnlfY29kZSIscWI6ImF3X3JlbWFya2V0aW5nIixqZToiYXdfcmVtYXJrZXRpbmdfb25seSIsaWU6ImdjbGlkIixOaDoiYXVpZCIsUmg6ImFmZmlsaWF0aW9uIiwKTWY6InRheCIsc2U6Imxpc3RfbmFtZSIsTGY6ImNoZWNrb3V0X3N0ZXAiLEtmOiJjaGVja291dF9vcHRpb24iLFNoOiJjb3Vwb24iLFRoOiJwcm9tb3Rpb25zIixKYToidXNlcl9pZCIsYWk6InJldG9rZW4iLENhOiJjb29raWVfcHJlZml4IixIZjoiZGlzYWJsZV9tZXJjaGFudF9yZXBvcnRlZF9wdXJjaGFzZXMiLEpmOiJkY19uYXR1cmFsX3NlYXJjaCIsSWY6ImRjX2N1c3RvbV9wYXJhbXMiLFJmOiJtZXRob2QiLGJpOiJzZWFyY2hfdGVybSIsUWg6ImNvbnRlbnRfdHlwZSIsVmg6Im9wdGltaXplX2lkIixVaDoiZXhwZXJpbWVudHMiLGNiOiJnb29nbGVfc2lnbmFscyJ9O1Qub2Q9Imdvb2dsZV90bGQiO1Qud2Q9InVwZGF0ZSI7VC53ZT0iZmlyZWJhc2VfaWQiOwpULnZjPSJnYV9yZXN0cmljdF9kb21haW4iO1QubGQ9ImV2ZW50X3NldHRpbmdzIjtULnFlPSJkeW5hbWljX2V2ZW50X3NldHRpbmdzIjtULlRiPSJ1c2VyX2RhdGFfc2V0dGluZ3MiO1QuWmY9InNjcmVlbl9uYW1lIjtULkRlPSJzY3JlZW5fcmVzb2x1dGlvbiI7VC5zYj0iX3hfMTkiO1QuYWI9ImVuaGFuY2VkX2NsaWVudF9pZCI7VC5uZD0iX3hfMjAiO1QueWU9ImludGVybmFsX3RyYWZmaWNfcmVzdWx0cyI7VC5FZT0idHJhZmZpY190eXBlIjtULnNkPSJyZWZlcnJhbF9leGNsdXNpb25fZGVmaW5pdGlvbiI7VC5xZD0iaWdub3JlX3JlZmVycmVyIjtULlBoPSJjb250ZW50X2dyb3VwIjtULm1hPSJhbGxvd19pbnRlcmVzdF9ncm91cHMiO1QuVmo9ImRlYnVnX21vZGUiO1QuQ2U9InJlZGFjdF9kZXZpY2VfaW5mbyIsVC5QZj0iZ2VvX2dyYW51bGFyaXR5IjsKdmFyIHBkPXt9O1QuZWc9T2JqZWN0LmZyZWV6ZSgocGRbVC5GZl09MSxwZFtULkdoXT0xLHBkW1QuSmJdPTEscGRbVC5LYl09MSxwZFtULkhoXT0xLHBkW1Qub2JdPTEscGRbVC5mZV09MSxwZFtULnBiXT0xLHBkW1QuaGVdPTEscGRbVC5MYl09MSxwZFtULnlhXT0xLHBkW1QuTWJdPTEscGRbVC56YV09MSxwZFtULkdmXT0xLHBkKSk7VC5HZT1PYmplY3QuZnJlZXplKFtULlUsVC5vYyxULnJiXSk7VC5taT1PYmplY3QuZnJlZXplKFtdLmNvbmNhdChULkdlKSk7VC5IZT1PYmplY3QuZnJlZXplKFtULm9hLFQubWQsVC55YyxULnVkLFQua2RdKTtULm5pPU9iamVjdC5mcmVlemUoW10uY29uY2F0KFQuSGUpKTt2YXIgcWQ9e307ClQuZGU9KHFkW1QuRF09IjEiLHFkW1QuTV09IjIiLHFkKTt2YXIgc2Q9e30sVT1HLmdvb2dsZV90YWdfbWFuYWdlcj1HLmdvb2dsZV90YWdfbWFuYWdlcnx8e30sdGQ9TWF0aC5yYW5kb20oKTtzZC5GZD0iNmYwIjtzZC5aPSJkYXRhTGF5ZXIiO3NkLkFoPSJDaEVJOE8rMWxRWVFtZmZlcHRqdWo3dVVBUkluQUVZZlB0UVJ2dVpXVm9OQ2xIT05BRWFpZ0RYRW94V3dMV3dqZ0NldUE0YzhNWU85RGdqWkdnTEc5Z1x4M2RceDNkIjt2YXIgdWQ9e19fY2w6ITAsX19lY2w6ITAsX19laGw6ITAsX19ldmw6ITAsX19mYWw6ITAsX19maWw6ITAsX19mc2w6ITAsX19obDohMCxfX2plbDohMCxfX2xjbDohMCxfX3NkbDohMCxfX3RsOiEwLF9feXRsOiEwfSx2ZD17X19wYXVzZWQ6ITAsX190ZzohMH0sd2Q7Zm9yKHdkIGluIHVkKXVkLmhhc093blByb3BlcnR5KHdkKSYmKHZkW3dkXT0hMCk7c2Qua2M9Ind3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbSI7dmFyIHhkLHlkPXNkLmtjKyIvZ3RtLmpzIjt5ZD1zZC5rYysiL2d0YWcvanMiO3hkPXlkOwp2YXIgemQ9emEoIiIpLEFkPXphKCIiKSxCZD1udWxsLENkPW51bGwsRGQ9e30sRWQ9e30sRmQ9ZnVuY3Rpb24oKXt2YXIgYT1VLnNlcXVlbmNlfHwxO1Uuc2VxdWVuY2U9YSsxO3JldHVybiBhfTtzZC56aD0iIjt2YXIgR2Q9IiI7c2QuR2Q9R2Q7dmFyIElkPW5ldyB1YSxKZD17fSxLZD17fSxOZD17bmFtZTpzZC5aLHNldDpmdW5jdGlvbihhLGIpe04oSmEoYSxiKSxKZCk7TGQoKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBNZChhLDIpfSxyZXNldDpmdW5jdGlvbigpe0lkPW5ldyB1YTtKZD17fTtMZCgpfX0sTWQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gMiE9Yj9JZC5nZXQoYSk6T2QoYSl9LE9kPWZ1bmN0aW9uKGEpe3ZhciBiLGM9YS5zcGxpdCgiLiIpO2I9Ynx8W107Zm9yKHZhciBkPUpkLGU9MDtlPGMubGVuZ3RoO2UrKyl7aWYobnVsbD09PWQpcmV0dXJuITE7aWYodm9pZCAwPT09ZClicmVhaztkPWRbY1tlXV07aWYoLTEhPT1iLmluZGV4T2YoZCkpcmV0dXJufXJldHVybiBkfSxQZD1mdW5jdGlvbihhLGIpe0tkLmhhc093blByb3BlcnR5KGEpfHwoSWQuc2V0KGEsYiksTihKYShhLGIpLEpkKSxMZCgpKX0sTGQ9ZnVuY3Rpb24oYSl7QihLZCxmdW5jdGlvbihiLGMpe0lkLnNldChiLGMpO04oSmEoYiksSmQpO04oSmEoYixjKSwKSmQpO2EmJmRlbGV0ZSBLZFtiXX0pfSxRZD1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9MSE9PSh2b2lkIDA9PT1iPzI6Yik/T2QoYSk6SWQuZ2V0KGEpOyJhcnJheSI9PT10YihkKXx8Im9iamVjdCI9PT10YihkKT9jPU4oZCk6Yz1kO3JldHVybiBjfTt2YXIgUmQsU2Q9ITEsVGQ9ZnVuY3Rpb24oYSl7aWYoIVNkKXtTZD0hMDtSZD1SZHx8e319cmV0dXJuIFJkW2FdfTt2YXIgVWQ9ZnVuY3Rpb24oYSl7aWYoSC5oaWRkZW4pcmV0dXJuITA7dmFyIGI9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihiLnRvcD09Yi5ib3R0b218fGIubGVmdD09Yi5yaWdodHx8IUcuZ2V0Q29tcHV0ZWRTdHlsZSlyZXR1cm4hMDt2YXIgYz1HLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKTtpZigiaGlkZGVuIj09PWMudmlzaWJpbGl0eSlyZXR1cm4hMDtmb3IodmFyIGQ9YSxlPWM7ZDspe2lmKCJub25lIj09PWUuZGlzcGxheSlyZXR1cm4hMDt2YXIgZj1lLm9wYWNpdHksZz1lLmZpbHRlcjtpZihnKXt2YXIgbD1nLmluZGV4T2YoIm9wYWNpdHkoIik7MDw9bCYmKGc9Zy5zdWJzdHJpbmcobCs4LGcuaW5kZXhPZigiKSIsbCkpLCIlIj09Zy5jaGFyQXQoZy5sZW5ndGgtMSkmJihnPWcuc3Vic3RyaW5nKDAsZy5sZW5ndGgtMSkpLGY9TWF0aC5taW4oZyxmKSl9aWYodm9pZCAwIT09ZiYmMD49ZilyZXR1cm4hMDsoZD1kLnBhcmVudEVsZW1lbnQpJiYoZT1HLmdldENvbXB1dGVkU3R5bGUoZCwKbnVsbCkpfXJldHVybiExfTt2YXIgY2U9LzpbMC05XSskLyxkZT1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWEuc3BsaXQoIiYiKSxlPTA7ZTxkLmxlbmd0aDtlKyspe3ZhciBmPWRbZV0uc3BsaXQoIj0iKTtpZihkZWNvZGVVUklDb21wb25lbnQoZlswXSkucmVwbGFjZSgvXCsvZywiICIpPT09Yil7dmFyIGc9Zi5zbGljZSgxKS5qb2luKCI9Iik7cmV0dXJuIGM/ZzpkZWNvZGVVUklDb21wb25lbnQoZykucmVwbGFjZSgvXCsvZywiICIpfX19LGdlPWZ1bmN0aW9uKGEsYixjLGQsZSl7YiYmKGI9U3RyaW5nKGIpLnRvTG93ZXJDYXNlKCkpO2lmKCJwcm90b2NvbCI9PT1ifHwicG9ydCI9PT1iKWEucHJvdG9jb2w9ZWUoYS5wcm90b2NvbCl8fGVlKEcubG9jYXRpb24ucHJvdG9jb2wpOyJwb3J0Ij09PWI/YS5wb3J0PVN0cmluZyhOdW1iZXIoYS5ob3N0bmFtZT9hLnBvcnQ6Ry5sb2NhdGlvbi5wb3J0KXx8KCJodHRwIj09PWEucHJvdG9jb2w/ODA6Imh0dHBzIj09PWEucHJvdG9jb2w/NDQzOiIiKSk6Imhvc3QiPT09CmImJihhLmhvc3RuYW1lPShhLmhvc3RuYW1lfHxHLmxvY2F0aW9uLmhvc3RuYW1lKS5yZXBsYWNlKGNlLCIiKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gZmUoYSxiLGMsZCxlKX0sZmU9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnPWVlKGEucHJvdG9jb2wpO2ImJihiPVN0cmluZyhiKS50b0xvd2VyQ2FzZSgpKTtzd2l0Y2goYil7Y2FzZSAidXJsX25vX2ZyYWdtZW50IjpmPWhlKGEpO2JyZWFrO2Nhc2UgInByb3RvY29sIjpmPWc7YnJlYWs7Y2FzZSAiaG9zdCI6Zj1hLmhvc3RuYW1lLnJlcGxhY2UoY2UsIiIpLnRvTG93ZXJDYXNlKCk7aWYoYyl7dmFyIGw9L153d3dcZCpcLi8uZXhlYyhmKTtsJiZsWzBdJiYoZj1mLnN1YnN0cihsWzBdLmxlbmd0aCkpfWJyZWFrO2Nhc2UgInBvcnQiOmY9U3RyaW5nKE51bWJlcihhLnBvcnQpfHwoImh0dHAiPT09Zz84MDoiaHR0cHMiPT09Zz80NDM6IiIpKTticmVhaztjYXNlICJwYXRoIjphLnBhdGhuYW1lfHxhLmhvc3RuYW1lfHxSYygiVEFHR0lORyIsCjEpO2Y9Ii8iPT09YS5wYXRobmFtZS5zdWJzdHIoMCwxKT9hLnBhdGhuYW1lOiIvIithLnBhdGhuYW1lO3ZhciBtPWYuc3BsaXQoIi8iKTswPD0oZHx8W10pLmluZGV4T2YobVttLmxlbmd0aC0xXSkmJihtW20ubGVuZ3RoLTFdPSIiKTtmPW0uam9pbigiLyIpO2JyZWFrO2Nhc2UgInF1ZXJ5IjpmPWEuc2VhcmNoLnJlcGxhY2UoIj8iLCIiKTtlJiYoZj1kZShmLGUpKTticmVhaztjYXNlICJleHRlbnNpb24iOnZhciBuPWEucGF0aG5hbWUuc3BsaXQoIi4iKTtmPTE8bi5sZW5ndGg/bltuLmxlbmd0aC0xXToiIjtmPWYuc3BsaXQoIi8iKVswXTticmVhaztjYXNlICJmcmFnbWVudCI6Zj1hLmhhc2gucmVwbGFjZSgiIyIsIiIpO2JyZWFrO2RlZmF1bHQ6Zj1hJiZhLmhyZWZ9cmV0dXJuIGZ9LGVlPWZ1bmN0aW9uKGEpe3JldHVybiBhP2EucmVwbGFjZSgiOiIsIiIpLnRvTG93ZXJDYXNlKCk6IiJ9LGhlPWZ1bmN0aW9uKGEpe3ZhciBiPSIiO2lmKGEmJmEuaHJlZil7dmFyIGM9YS5ocmVmLmluZGV4T2YoIiMiKTsKYj0wPmM/YS5ocmVmOmEuaHJlZi5zdWJzdHIoMCxjKX1yZXR1cm4gYn0saWU9ZnVuY3Rpb24oYSl7dmFyIGI9SC5jcmVhdGVFbGVtZW50KCJhIik7YSYmKGIuaHJlZj1hKTt2YXIgYz1iLnBhdGhuYW1lOyIvIiE9PWNbMF0mJihhfHxSYygiVEFHR0lORyIsMSksYz0iLyIrYyk7dmFyIGQ9Yi5ob3N0bmFtZS5yZXBsYWNlKGNlLCIiKTtyZXR1cm57aHJlZjpiLmhyZWYscHJvdG9jb2w6Yi5wcm90b2NvbCxob3N0OmIuaG9zdCxob3N0bmFtZTpkLHBhdGhuYW1lOmMsc2VhcmNoOmIuc2VhcmNoLGhhc2g6Yi5oYXNoLHBvcnQ6Yi5wb3J0fX0samU9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihuKXt2YXIgcD1uLnNwbGl0KCI9IilbMF07cmV0dXJuIDA+ZC5pbmRleE9mKHApP246cCsiPTAifWZ1bmN0aW9uIGMobil7cmV0dXJuIG4uc3BsaXQoIiYiKS5tYXAoYikuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiB2b2lkIDAhPT1wfSkuam9pbigiJiIpfXZhciBkPSJnY2xpZCBkY2xpZCBnYnJhaWQgd2JyYWlkIGdjbGF3IGdjbGRjIGdjbGhhIGdjbGdmIGdjbGdiIF9nbCIuc3BsaXQoIiAiKSwKZT1pZShhKSxmPWEuc3BsaXQoL1s/I10vKVswXSxnPWUuc2VhcmNoLGw9ZS5oYXNoOyI/Ij09PWdbMF0mJihnPWcuc3Vic3RyaW5nKDEpKTsiIyI9PT1sWzBdJiYobD1sLnN1YnN0cmluZygxKSk7Zz1jKGcpO2w9YyhsKTsiIiE9PWcmJihnPSI/IitnKTsiIiE9PWwmJihsPSIjIitsKTt2YXIgbT0iIitmK2crbDsiLyI9PT1tW20ubGVuZ3RoLTFdJiYobT1tLnN1YnN0cmluZygwLG0ubGVuZ3RoLTEpKTtyZXR1cm4gbX07dmFyIGtlPXt9O3ZhciBNZT17fSxOZT1mdW5jdGlvbihhLGIpe2lmKEcuX2d0bWV4cGdycCYmRy5fZ3RtZXhwZ3JwLmhhc093blByb3BlcnR5KGEpKXJldHVybiBHLl9ndG1leHBncnBbYV07dm9pZCAwPT09TWVbYV0mJihNZVthXT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqYikpO3JldHVybiBNZVthXX07dmFyIFBlPVtdO1BlWzZdPSEwO1BlWzVdPSEwOwpQZVs5XT0hMDtQZVsxMF09ITA7UGVbMTJdPSEwO1BlWzE0XT0hMDtQZVsxNl09ITA7dmFyIFFlPS9bQS1aXSsvLFJlPS9ccy8sU2U9ZnVuY3Rpb24oYSl7aWYoayhhKSl7YT1CYShhKTt2YXIgYj1hLmluZGV4T2YoIi0iKTtpZighKDA+Yikpe3ZhciBjPWEuc3Vic3RyaW5nKDAsYik7aWYoUWUudGVzdChjKSl7Zm9yKHZhciBkPWEuc3Vic3RyaW5nKGIrMSkuc3BsaXQoIi8iKSxlPTA7ZTxkLmxlbmd0aDtlKyspaWYoIWRbZV18fFJlLnRlc3QoZFtlXSkmJigiQVciIT09Y3x8MSE9PWUpKXJldHVybjtyZXR1cm57aWQ6YSxwcmVmaXg6Yyxjb250YWluZXJJZDpjKyItIitkWzBdLEo6ZH19fX19LFVlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDsrK2Mpe3ZhciBkPVNlKGFbY10pO2QmJihiW2QuaWRdPWQpfVRlKGIpO3ZhciBlPVtdO0IoYixmdW5jdGlvbihmLGcpe2UucHVzaChnKX0pO3JldHVybiBlfTsKZnVuY3Rpb24gVGUoYSl7dmFyIGI9W10sYztmb3IoYyBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoYykpe3ZhciBkPWFbY107IkFXIj09PWQucHJlZml4JiZkLkpbMV0mJmIucHVzaChkLmNvbnRhaW5lcklkKX1mb3IodmFyIGU9MDtlPGIubGVuZ3RoOysrZSlkZWxldGUgYVtiW2VdXX07dmFyIFZlPWZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oKXt9O2MucHJvdG90eXBlPWEucHJvdG90eXBlO3ZhciBkPW5ldyBjO2EuYXBwbHkoZCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpO3JldHVybiBkfSxXZT1mdW5jdGlvbihhKXt2YXIgYj1hO3JldHVybiBmdW5jdGlvbigpe2lmKGIpe3ZhciBjPWI7Yj1udWxsO2MoKX19fTt2YXIgWGU9ZnVuY3Rpb24oYSxiKXthLmFkZEV2ZW50TGlzdGVuZXImJmEuYWRkRXZlbnRMaXN0ZW5lci5jYWxsKGEsIm1lc3NhZ2UiLGIsITEpfTtmdW5jdGlvbiBZZSgpe3JldHVybiBUYSgiaVBob25lIikmJiFUYSgiaVBvZCIpJiYhVGEoImlQYWQiKX07VGEoIk9wZXJhIik7VGEoIlRyaWRlbnQiKXx8VGEoIk1TSUUiKTtUYSgiRWRnZSIpOyFUYSgiR2Vja28iKXx8LTEhPVNhKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJ3ZWJraXQiKSYmIVRhKCJFZGdlIil8fFRhKCJUcmlkZW50Iil8fFRhKCJNU0lFIil8fFRhKCJFZGdlIik7LTEhPVNhKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJ3ZWJraXQiKSYmIVRhKCJFZGdlIikmJlRhKCJNb2JpbGUiKTtUYSgiTWFjaW50b3NoIik7VGEoIldpbmRvd3MiKTtUYSgiTGludXgiKXx8VGEoIkNyT1MiKTt2YXIgWmU9bGEubmF2aWdhdG9yfHxudWxsO1plJiYoWmUuYXBwVmVyc2lvbnx8IiIpLmluZGV4T2YoIlgxMSIpO1RhKCJBbmRyb2lkIik7WWUoKTtUYSgiaVBhZCIpO1RhKCJpUG9kIik7WWUoKXx8VGEoImlQYWQiKXx8VGEoImlQb2QiKTtTYSgpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigia2Fpb3MiKTt2YXIgJGU9ZnVuY3Rpb24oYSl7aWYoIWF8fCFILmhlYWQpcmV0dXJuIG51bGw7dmFyIGIsYztjPXZvaWQgMD09PWM/ZG9jdW1lbnQ6YztiPWMuY3JlYXRlRWxlbWVudCgibWV0YSIpO0guaGVhZC5hcHBlbmRDaGlsZChiKTtiLmh0dHBFcXVpdj0ib3JpZ2luLXRyaWFsIjtiLmNvbnRlbnQ9YTtyZXR1cm4gYn07dmFyIGFmPXtIZzoiUlUiLHlqOiIifTt2YXIgYmY9bmV3IGZ1bmN0aW9uKGEsYil7dGhpcy5nPWE7dGhpcy5kZWZhdWx0VmFsdWU9dm9pZCAwPT09Yj8hMTpifSgxOTMzKTt2YXIgZGY9ZnVuY3Rpb24oKXt2YXIgYT1jZixiPSJZZSI7aWYoYS5ZZSYmYS5oYXNPd25Qcm9wZXJ0eShiKSlyZXR1cm4gYS5ZZTt2YXIgYz1uZXcgYTthLlllPWM7YS5oYXNPd25Qcm9wZXJ0eShiKTtyZXR1cm4gY307dmFyIGNmPWZ1bmN0aW9uKCl7dmFyIGE9e307dGhpcy5nPWZ1bmN0aW9uKCl7dmFyIGI9YmYuZyxjPWJmLmRlZmF1bHRWYWx1ZTtyZXR1cm4gbnVsbCE9YVtiXT9hW2JdOmN9O3RoaXMubz1mdW5jdGlvbigpe2FbYmYuZ109ITB9fTt2YXIgZWY9W107ZnVuY3Rpb24gZmYoKXt2YXIgYT1hYigiZ29vZ2xlX3RhZ19kYXRhIix7fSk7YS5pY3N8fChhLmljcz17ZW50cmllczp7fSxzZXQ6Z2YsdXBkYXRlOmhmLGFkZExpc3RlbmVyOmpmLG5vdGlmeUxpc3RlbmVyczprZixhY3RpdmU6ITEsdXNlZERlZmF1bHQ6ITEsdXNlZFVwZGF0ZTohMSxhY2Nlc3NlZERlZmF1bHQ6ITEsYWNjZXNzZWRBbnk6ITEsd2FzU2V0TGF0ZTohMX0pO3JldHVybiBhLmljc30KZnVuY3Rpb24gZ2YoYSxiLGMsZCxlLGYpe3ZhciBnPWZmKCk7Zy51c2VkRGVmYXVsdHx8IWcuYWNjZXNzZWREZWZhdWx0JiYhZy5hY2Nlc3NlZEFueXx8KGcud2FzU2V0TGF0ZT0hMCk7Zy5hY3RpdmU9ITA7Zy51c2VkRGVmYXVsdD0hMDtpZih2b2lkIDAhPWIpe3ZhciBsPWcuZW50cmllcyxtPWxbYV18fHt9LG49bS5yZWdpb24scD1jJiZrKGMpP2MudG9VcHBlckNhc2UoKTp2b2lkIDA7ZD1kLnRvVXBwZXJDYXNlKCk7ZT1lLnRvVXBwZXJDYXNlKCk7aWYoIiI9PT1kfHxwPT09ZXx8KHA9PT1kP24hPT1lOiFwJiYhbikpe3ZhciBxPSEhKGYmJjA8ZiYmdm9pZCAwPT09bS51cGRhdGUpLHI9e3JlZ2lvbjpwLGluaXRpYWw6ImdyYW50ZWQiPT09Yix1cGRhdGU6bS51cGRhdGUscXVpZXQ6cX07aWYoIiIhPT1kfHwhMSE9PW0uaW5pdGlhbClsW2FdPXI7cSYmRy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bFthXT09PXImJnIucXVpZXQmJihyLnF1aWV0PSExLGxmKGEpLGtmKCksUmMoIlRBR0dJTkciLAoyKSl9LGYpfX19ZnVuY3Rpb24gaGYoYSxiKXt2YXIgYz1mZigpO2MudXNlZERlZmF1bHR8fGMudXNlZFVwZGF0ZXx8IWMuYWNjZXNzZWRBbnl8fChjLndhc1NldExhdGU9ITApO2MuYWN0aXZlPSEwO2MudXNlZFVwZGF0ZT0hMDtpZih2b2lkIDAhPWIpe3ZhciBkPW1mKGMsYSksZT1jLmVudHJpZXMsZj1lW2FdPWVbYV18fHt9O2YudXBkYXRlPSJncmFudGVkIj09PWI7dmFyIGc9bWYoYyxhKTtmLnF1aWV0PyhmLnF1aWV0PSExLGxmKGEpKTpnIT09ZCYmbGYoYSl9fWZ1bmN0aW9uIGpmKGEsYil7ZWYucHVzaCh7U2U6YSxOaTpifSl9ZnVuY3Rpb24gbGYoYSl7Zm9yKHZhciBiPTA7YjxlZi5sZW5ndGg7KytiKXt2YXIgYz1lZltiXTtyYShjLlNlKSYmLTEhPT1jLlNlLmluZGV4T2YoYSkmJihjLmRoPSEwKX19CmZ1bmN0aW9uIGtmKGEsYil7Zm9yKHZhciBjPTA7YzxlZi5sZW5ndGg7KytjKXt2YXIgZD1lZltjXTtpZihkLmRoKXtkLmRoPSExO3RyeXtkLk5pKHtjb25zZW50RXZlbnRJZDphLGNvbnNlbnRQcmlvcml0eUlkOmJ9KX1jYXRjaChlKXt9fX19ZnVuY3Rpb24gbWYoYSxiKXt2YXIgYz1hLmVudHJpZXNbYl18fHt9O3JldHVybiB2b2lkIDAhPT1jLnVwZGF0ZT9jLnVwZGF0ZTpjLmluaXRpYWx9CnZhciBuZj1mdW5jdGlvbihhKXt2YXIgYj1mZigpO2IuYWNjZXNzZWRBbnk9ITA7cmV0dXJuIG1mKGIsYSl9LG9mPWZ1bmN0aW9uKGEpe3ZhciBiPWZmKCk7Yi5hY2Nlc3NlZERlZmF1bHQ9ITA7cmV0dXJuKGIuZW50cmllc1thXXx8e30pLmluaXRpYWx9LHBmPWZ1bmN0aW9uKGEpe3ZhciBiPWZmKCk7Yi5hY2Nlc3NlZEFueT0hMDtyZXR1cm4hKGIuZW50cmllc1thXXx8e30pLnF1aWV0fSxxZj1mdW5jdGlvbigpe2lmKCFkZigpLmcoKSlyZXR1cm4hMTt2YXIgYT1mZigpO2EuYWNjZXNzZWRBbnk9ITA7cmV0dXJuIGEuYWN0aXZlfSxyZj1mdW5jdGlvbigpe3ZhciBhPWZmKCk7YS5hY2Nlc3NlZERlZmF1bHQ9ITA7cmV0dXJuIGEudXNlZERlZmF1bHR9LHNmPWZ1bmN0aW9uKGEsYil7ZmYoKS5hZGRMaXN0ZW5lcihhLGIpfSx0Zj1mdW5jdGlvbihhLGIpe2ZmKCkubm90aWZ5TGlzdGVuZXJzKGEsYil9LHVmPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYygpe2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKWlmKCFwZihiW2VdKSlyZXR1cm4hMDsKcmV0dXJuITF9aWYoYygpKXt2YXIgZD0hMTtzZihiLGZ1bmN0aW9uKGUpe2R8fGMoKXx8KGQ9ITAsYShlKSl9KX1lbHNlIGEoe30pfSx2Zj1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoKXtmb3IodmFyIGY9W10sZz0wO2c8ZC5sZW5ndGg7ZysrKXt2YXIgbD1kW2ddOyExPT09bmYobCl8fGVbbF18fChmLnB1c2gobCksZVtsXT0hMCl9cmV0dXJuIGZ9dmFyIGQ9ayhiKT9bYl06YixlPXt9O2MoKS5sZW5ndGghPT1kLmxlbmd0aCYmc2YoZCxmdW5jdGlvbihmKXt2YXIgZz1jKCk7MDxnLmxlbmd0aCYmKGYuU2U9ZyxhKGYpKX0pfTtmdW5jdGlvbiB3Zigpe31mdW5jdGlvbiB4Zigpe307ZnVuY3Rpb24geWYoYSl7Zm9yKHZhciBiPVtdLGM9MDtjPHpmLmxlbmd0aDtjKyspe3ZhciBkPWEoemZbY10pO2JbY109ITA9PT1kPyIxIjohMT09PWQ/IjAiOiItIn1yZXR1cm4gYi5qb2luKCIiKX0KdmFyIHpmPVtULkQsVC5NXSxBZj1mdW5jdGlvbihhKXt2YXIgYj1hW1QueWZdO2ImJlEoNDApO3ZhciBjPWFbVC56Zl07YyYmUSg0MSk7Zm9yKHZhciBkPXJhKGIpP2I6W2JdLGU9e2ZjOjB9O2UuZmM8ZC5sZW5ndGg7ZT17ZmM6ZS5mY30sKytlLmZjKUIoYSxmdW5jdGlvbihmKXtyZXR1cm4gZnVuY3Rpb24oZyxsKXtpZihnIT09VC55ZiYmZyE9PVQuemYpe3ZhciBtPWRbZi5mY10sbj1hZi5IZyxwPWFmLnlqO2ZmKCkuc2V0KGcsbCxtLG4scCxjKX19fShlKSl9LEJmPTAsQ2Y9ZnVuY3Rpb24oYSxiKXtCKGEsZnVuY3Rpb24oZSxmKXtmZigpLnVwZGF0ZShlLGYpfSk7dGYoYi5ldmVudElkLGIucHJpb3JpdHlJZCk7dmFyIGM9RGEoKSxkPWMtQmY7QmYmJjA8PWQmJjFFMz5kJiZRKDY2KTtCZj1jfSxEZj1mdW5jdGlvbihhKXt2YXIgYj1uZihhKTtyZXR1cm4gdm9pZCAwIT1iP2I6ITB9LEVmPWZ1bmN0aW9uKCl7cmV0dXJuIkcxIit5ZihuZil9LEZmPWZ1bmN0aW9uKGEsYil7dmYoYSxiKX0sCkdmPWZ1bmN0aW9uKGEsYil7dWYoYSxiKX07dmFyIEhmPWZ1bmN0aW9uKGEpe3ZhciBiPTEsYyxkLGU7aWYoYSlmb3IoYj0wLGQ9YS5sZW5ndGgtMTswPD1kO2QtLSllPWEuY2hhckNvZGVBdChkKSxiPShiPDw2JjI2ODQzNTQ1NSkrZSsoZTw8MTQpLGM9YiYyNjYzMzgzMDQsYj0wIT09Yz9iXmM+PjIxOmI7cmV0dXJuIGJ9O3ZhciBJZj1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9Yi5zcGxpdCgiOyIpLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXS5zcGxpdCgiPSIpLGw9Z1swXS5yZXBsYWNlKC9eXHMqfFxzKiQvZywiIik7aWYobCYmbD09YSl7dmFyIG09Zy5zbGljZSgxKS5qb2luKCI9IikucmVwbGFjZSgvXlxzKnxccyokL2csIiIpO20mJmMmJihtPWRlY29kZVVSSUNvbXBvbmVudChtKSk7ZC5wdXNoKG0pfX1yZXR1cm4gZH07ZnVuY3Rpb24gSmYoYSl7cmV0dXJuIm51bGwiIT09YS5vcmlnaW59O3ZhciBNZj1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gS2YoZCk/SWYoYSxTdHJpbmcoYnx8TGYoKSksYyk6W119LFBmPWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoS2YoZSkpe3ZhciBmPU5mKGEsZCxlKTtpZigxPT09Zi5sZW5ndGgpcmV0dXJuIGZbMF0uaWQ7aWYoMCE9PWYubGVuZ3RoKXtmPU9mKGYsZnVuY3Rpb24oZyl7cmV0dXJuIGcuT2R9LGIpO2lmKDE9PT1mLmxlbmd0aClyZXR1cm4gZlswXS5pZDtmPU9mKGYsZnVuY3Rpb24oZyl7cmV0dXJuIGcuT2N9LGMpO3JldHVybiBmWzBdP2ZbMF0uaWQ6dm9pZCAwfX19O2Z1bmN0aW9uIFFmKGEsYixjLGQpe3ZhciBlPUxmKCksZj13aW5kb3c7SmYoZikmJihmLmRvY3VtZW50LmNvb2tpZT1hKTt2YXIgZz1MZigpO3JldHVybiBlIT1nfHx2b2lkIDAhPWMmJjA8PU1mKGIsZywhMSxkKS5pbmRleE9mKGMpfQp2YXIgVWY9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQodCx1LHYpe2lmKG51bGw9PXYpcmV0dXJuIGRlbGV0ZSBnW3VdLHQ7Z1t1XT12O3JldHVybiB0KyI7ICIrdSsiPSIrdn1mdW5jdGlvbiBlKHQsdSl7aWYobnVsbD09dSlyZXR1cm4gZGVsZXRlIGdbdV0sdDtnW3VdPSEwO3JldHVybiB0KyI7ICIrdX1pZighS2YoYy5WYSkpcmV0dXJuIDI7dmFyIGY7dm9pZCAwPT1iP2Y9YSsiPWRlbGV0ZWQ7IGV4cGlyZXM9IisobmV3IERhdGUoMCkpLnRvVVRDU3RyaW5nKCk6KGMuZW5jb2RlJiYoYj1lbmNvZGVVUklDb21wb25lbnQoYikpLGI9UmYoYiksZj1hKyI9IitiKTt2YXIgZz17fTtmPWQoZiwicGF0aCIsYy5wYXRoKTt2YXIgbDtjLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlP2w9Yy5leHBpcmVzLnRvVVRDU3RyaW5nKCk6bnVsbCE9Yy5leHBpcmVzJiYobD0iIitjLmV4cGlyZXMpO2Y9ZChmLCJleHBpcmVzIixsKTtmPWQoZiwibWF4LWFnZSIsYy5qayk7Zj1kKGYsInNhbWVzaXRlIiwKYy5sayk7Yy5tayYmKGY9ZShmLCJzZWN1cmUiKSk7dmFyIG09Yy5kb21haW47aWYobSYmImF1dG8iPT09bS50b0xvd2VyQ2FzZSgpKXtmb3IodmFyIG49U2YoKSxwPTA7cDxuLmxlbmd0aDsrK3Ape3ZhciBxPSJub25lIiE9PW5bcF0/bltwXTp2b2lkIDAscj1kKGYsImRvbWFpbiIscSk7cj1lKHIsYy5mbGFncyk7aWYoIVRmKHEsYy5wYXRoKSYmUWYocixhLGIsYy5WYSkpcmV0dXJuIDB9cmV0dXJuIDF9bSYmIm5vbmUiIT09bS50b0xvd2VyQ2FzZSgpJiYoZj1kKGYsImRvbWFpbiIsbSkpO2Y9ZShmLGMuZmxhZ3MpO3JldHVybiBUZihtLGMucGF0aCk/MTpRZihmLGEsYixjLlZhKT8wOjF9LFZmPWZ1bmN0aW9uKGEsYixjKXtudWxsPT1jLnBhdGgmJihjLnBhdGg9Ii8iKTtjLmRvbWFpbnx8KGMuZG9tYWluPSJhdXRvIik7cmV0dXJuIFVmKGEsYixjKX07CmZ1bmN0aW9uIE9mKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmLGc9MDtnPGEubGVuZ3RoO2crKyl7dmFyIGw9YVtnXSxtPWIobCk7bT09PWM/ZC5wdXNoKGwpOnZvaWQgMD09PWZ8fG08Zj8oZT1bbF0sZj1tKTptPT09ZiYmZS5wdXNoKGwpfXJldHVybiAwPGQubGVuZ3RoP2Q6ZX1mdW5jdGlvbiBOZihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9TWYoYSx2b2lkIDAsdm9pZCAwLGMpLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXS5zcGxpdCgiLiIpLGw9Zy5zaGlmdCgpO2lmKCFifHwtMSE9PWIuaW5kZXhPZihsKSl7dmFyIG09Zy5zaGlmdCgpO20mJihtPW0uc3BsaXQoIi0iKSxkLnB1c2goe2lkOmcuam9pbigiLiIpLE9kOjEqbVswXXx8MSxPYzoxKm1bMV18fDF9KSl9fXJldHVybiBkfQp2YXIgUmY9ZnVuY3Rpb24oYSl7YSYmMTIwMDxhLmxlbmd0aCYmKGE9YS5zdWJzdHJpbmcoMCwxMjAwKSk7cmV0dXJuIGF9LFdmPS9eKHd3d1wuKT9nb29nbGUoXC5jb20/KT8oXC5bYS16XXsyfSk/JC8sWGY9LyhefFwuKWRvdWJsZWNsaWNrXC5uZXQkL2ksVGY9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gWGYudGVzdCh3aW5kb3cuZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUpfHwiLyI9PT1iJiZXZi50ZXN0KGEpfSxMZj1mdW5jdGlvbigpe3JldHVybiBKZih3aW5kb3cpP3dpbmRvdy5kb2N1bWVudC5jb29raWU6IiJ9LFNmPWZ1bmN0aW9uKCl7dmFyIGE9W10sYj13aW5kb3cuZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUuc3BsaXQoIi4iKTtpZig0PT09Yi5sZW5ndGgpe3ZhciBjPWJbYi5sZW5ndGgtMV07aWYocGFyc2VJbnQoYywxMCkudG9TdHJpbmcoKT09PWMpcmV0dXJuWyJub25lIl19Zm9yKHZhciBkPWIubGVuZ3RoLTI7MDw9ZDtkLS0pYS5wdXNoKGIuc2xpY2UoZCkuam9pbigiLiIpKTsKdmFyIGU9d2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lO1hmLnRlc3QoZSl8fFdmLnRlc3QoZSl8fGEucHVzaCgibm9uZSIpO3JldHVybiBhfSxLZj1mdW5jdGlvbihhKXtpZighZGYoKS5nKCl8fCFhfHwhcWYoKSlyZXR1cm4hMDtpZighcGYoYSkpcmV0dXJuITE7dmFyIGI9bmYoYSk7cmV0dXJuIG51bGw9PWI/ITA6ISFifTt2YXIgWWY9ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5yb3VuZCgyMTQ3NDgzNjQ3Kk1hdGgucmFuZG9tKCkpO3JldHVybiBhP1N0cmluZyhiXkhmKGEpJjIxNDc0ODM2NDcpOlN0cmluZyhiKX0sWmY9ZnVuY3Rpb24oYSl7cmV0dXJuW1lmKGEpLE1hdGgucm91bmQoRGEoKS8xRTMpXS5qb2luKCIuIil9LGJnPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9JGYoYik7cmV0dXJuIFBmKGEsZixhZyhjKSxkLGUpfSxjZz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0iIiskZihjKSxmPWFnKGQpOzE8ZiYmKGUrPSItIitmKTtyZXR1cm5bYixlLGFdLmpvaW4oIi4iKX0sJGY9ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIDE7YT0wPT09YS5pbmRleE9mKCIuIik/YS5zdWJzdHIoMSk6YTtyZXR1cm4gYS5zcGxpdCgiLiIpLmxlbmd0aH0sYWc9ZnVuY3Rpb24oYSl7aWYoIWF8fCIvIj09PWEpcmV0dXJuIDE7Ii8iIT09YVswXSYmKGE9Ii8iK2EpOyIvIiE9PWFbYS5sZW5ndGgtMV0mJihhKz0iLyIpO3JldHVybiBhLnNwbGl0KCIvIikubGVuZ3RoLQoxfTtmdW5jdGlvbiBkZyhhLGIsYyl7dmFyIGQsZT1OdW1iZXIobnVsbCE9YS5sYj9hLmxiOnZvaWQgMCk7MCE9PWUmJihkPW5ldyBEYXRlKChifHxEYSgpKSsxRTMqKGV8fDc3NzZFMykpKTtyZXR1cm57cGF0aDphLnBhdGgsZG9tYWluOmEuZG9tYWluLGZsYWdzOmEuZmxhZ3MsZW5jb2RlOiEhYyxleHBpcmVzOmR9fTt2YXIgZWc9WyIxIl0sZmc9e30sZ2c9e30saWc9ZnVuY3Rpb24oYSl7cmV0dXJuIGZnW2hnKGEpXX0sbGc9ZnVuY3Rpb24oYSxiKXtiPXZvaWQgMD09PWI/ITA6Yjt2YXIgYz1oZyhhLnByZWZpeCk7aWYoIWZnW2NdJiYhamcoYyxhLnBhdGgsYS5kb21haW4pJiZiKXt2YXIgZD1oZyhhLnByZWZpeCksZT1aZigpO2lmKDA9PT1rZyhkLGUsYSkpe3ZhciBmPWFiKCJnb29nbGVfdGFnX2RhdGEiLHt9KTtmLl9nY2xfYXU/UmMoIkdUTSIsNTcpOmYuX2djbF9hdT1lfWpnKGMsYS5wYXRoLGEuZG9tYWluKX19O2Z1bmN0aW9uIGtnKGEsYixjLGQpe3ZhciBlPWNnKGIsIjEiLGMuZG9tYWluLGMucGF0aCksZj1kZyhjLGQpO2YuVmE9ImFkX3N0b3JhZ2UiO3JldHVybiBWZihhLGUsZil9CmZ1bmN0aW9uIGpnKGEsYixjKXt2YXIgZD1iZyhhLGIsYyxlZywiYWRfc3RvcmFnZSIpO2lmKCFkKXJldHVybiExO3ZhciBlPWQuc3BsaXQoIi4iKTs1PT09ZS5sZW5ndGg/KGZnW2FdPWUuc2xpY2UoMCwyKS5qb2luKCIuIiksZ2dbYV09e2lkOmUuc2xpY2UoMiw0KS5qb2luKCIuIiksV2c6TnVtYmVyKGVbNF0pfHwwfSk6Mz09PWUubGVuZ3RoP2dnW2FdPXtpZDplLnNsaWNlKDAsMikuam9pbigiLiIpLFdnOk51bWJlcihlWzJdKXx8MH06ZmdbYV09ZDtyZXR1cm4hMH1mdW5jdGlvbiBoZyhhKXtyZXR1cm4oYXx8Il9nY2wiKSsiX2F1In07dmFyIG1nPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPUguY29va2llLnNwbGl0KCI7IiksZD1uZXcgUmVnRXhwKCJeXFxzKiIrKGF8fCJfZ2FjIikrIl8oVUEtXFxkKy1cXGQrKT1cXHMqKC4rPylcXHMqJCIpLGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGY9Y1tlXS5tYXRjaChkKTtmJiZiLnB1c2goe3RmOmZbMV0sdmFsdWU6ZlsyXSx0aW1lc3RhbXA6TnVtYmVyKGZbMl0uc3BsaXQoIi4iKVsxXSl8fDB9KX1iLnNvcnQoZnVuY3Rpb24oZyxsKXtyZXR1cm4gbC50aW1lc3RhbXAtZy50aW1lc3RhbXB9KTtyZXR1cm4gYn07CmZ1bmN0aW9uIG5nKGEsYil7dmFyIGM9bWcoYSksZD17fTtpZighY3x8IWMubGVuZ3RoKXJldHVybiBkO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZj1jW2VdLnZhbHVlLnNwbGl0KCIuIik7aWYoISgiMSIhPT1mWzBdfHxiJiYzPmYubGVuZ3RofHwhYiYmMyE9PWYubGVuZ3RoKSYmTnVtYmVyKGZbMV0pKXtkW2NbZV0udGZdfHwoZFtjW2VdLnRmXT1bXSk7dmFyIGc9e3ZlcnNpb246ZlswXSx0aW1lc3RhbXA6MUUzKk51bWJlcihmWzFdKSxFYTpmWzJdfTtiJiYzPGYubGVuZ3RoJiYoZy5sYWJlbHM9Zi5zbGljZSgzKSk7ZFtjW2VdLnRmXS5wdXNoKGcpfX1yZXR1cm4gZH07ZnVuY3Rpb24gb2coKXtmb3IodmFyIGE9cGcsYj17fSxjPTA7YzxhLmxlbmd0aDsrK2MpYlthW2NdXT1jO3JldHVybiBifWZ1bmN0aW9uIHFnKCl7dmFyIGE9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjthKz1hLnRvTG93ZXJDYXNlKCkrIjAxMjM0NTY3ODktXyI7cmV0dXJuIGErIi4ifXZhciBwZyxyZzsKZnVuY3Rpb24gc2coYSl7ZnVuY3Rpb24gYihtKXtmb3IoO2Q8YS5sZW5ndGg7KXt2YXIgbj1hLmNoYXJBdChkKyspLHA9cmdbbl07aWYobnVsbCE9cClyZXR1cm4gcDtpZighL15bXHNceGEwXSokLy50ZXN0KG4pKXRocm93IEVycm9yKCJVbmtub3duIGJhc2U2NCBlbmNvZGluZyBhdCBjaGFyOiAiK24pO31yZXR1cm4gbX1wZz1wZ3x8cWcoKTtyZz1yZ3x8b2coKTtmb3IodmFyIGM9IiIsZD0wOzspe3ZhciBlPWIoLTEpLGY9YigwKSxnPWIoNjQpLGw9Yig2NCk7aWYoNjQ9PT1sJiYtMT09PWUpcmV0dXJuIGM7Yys9U3RyaW5nLmZyb21DaGFyQ29kZShlPDwyfGY+PjQpOzY0IT1nJiYoYys9U3RyaW5nLmZyb21DaGFyQ29kZShmPDw0JjI0MHxnPj4yKSw2NCE9bCYmKGMrPVN0cmluZy5mcm9tQ2hhckNvZGUoZzw8NiYxOTJ8bCkpKX19O3ZhciB0Zzt2YXIgeGc9ZnVuY3Rpb24oKXt2YXIgYT11ZyxiPXZnLGM9d2coKSxkPWZ1bmN0aW9uKGcpe2EoZy50YXJnZXR8fGcuc3JjRWxlbWVudHx8e30pfSxlPWZ1bmN0aW9uKGcpe2IoZy50YXJnZXR8fGcuc3JjRWxlbWVudHx8e30pfTtpZighYy5pbml0KXtqYihILCJtb3VzZWRvd24iLGQpO2piKEgsImtleXVwIixkKTtqYihILCJzdWJtaXQiLGUpO3ZhciBmPUhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuc3VibWl0O0hUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuc3VibWl0PWZ1bmN0aW9uKCl7Yih0aGlzKTtmLmNhbGwodGhpcyl9O2MuaW5pdD0hMH19LEhnPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9e2NhbGxiYWNrOmEsZG9tYWluczpiLGZyYWdtZW50OjI9PT1jLHBsYWNlbWVudDpjLGZvcm1zOmQsc2FtZUhvc3Q6ZX07d2coKS5kZWNvcmF0b3JzLnB1c2goZil9LElnPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9d2coKS5kZWNvcmF0b3JzLGU9e30sZj0wO2Y8ZC5sZW5ndGg7KytmKXt2YXIgZz0KZFtmXSxsO2lmKGw9IWN8fGcuZm9ybXMpYTp7dmFyIG09Zy5kb21haW5zLG49YSxwPSEhZy5zYW1lSG9zdDtpZihtJiYocHx8biE9PUgubG9jYXRpb24uaG9zdG5hbWUpKWZvcih2YXIgcT0wO3E8bS5sZW5ndGg7cSsrKWlmKG1bcV1pbnN0YW5jZW9mIFJlZ0V4cCl7aWYobVtxXS50ZXN0KG4pKXtsPSEwO2JyZWFrIGF9fWVsc2UgaWYoMDw9bi5pbmRleE9mKG1bcV0pfHxwJiYwPD1tW3FdLmluZGV4T2Yobikpe2w9ITA7YnJlYWsgYX1sPSExfWlmKGwpe3ZhciByPWcucGxhY2VtZW50O3ZvaWQgMD09ciYmKHI9Zy5mcmFnbWVudD8yOjEpO3I9PT1iJiZHYShlLGcuY2FsbGJhY2soKSl9fXJldHVybiBlfTtmdW5jdGlvbiB3Zygpe3ZhciBhPWFiKCJnb29nbGVfdGFnX2RhdGEiLHt9KSxiPWEuZ2w7YiYmYi5kZWNvcmF0b3JzfHwoYj17ZGVjb3JhdG9yczpbXX0sYS5nbD1iKTtyZXR1cm4gYn07dmFyIEpnPS8oLio/KVwqKC4qPylcKiguKikvLEtnPS9eaHR0cHM/OlwvXC8oW15cL10qPylcLj9jZG5cLmFtcHByb2plY3RcLm9yZ1wvPyguKikvLExnPS9eKD86d3d3XC58bVwufGFtcFwuKSsvLE1nPS8oW14/I10rKShcP1teI10qKT8oIy4qKT8vO2Z1bmN0aW9uIE5nKGEpe3JldHVybiBuZXcgUmVnRXhwKCIoLio/KShefCYpIithKyI9KFteJl0qKSY/KC4qKSIpfQp2YXIgUGc9ZnVuY3Rpb24oYSl7dmFyIGI9W10sYztmb3IoYyBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoYykpe3ZhciBkPWFbY107aWYodm9pZCAwIT09ZCYmZD09PWQmJm51bGwhPT1kJiYiW29iamVjdCBPYmplY3RdIiE9PWQudG9TdHJpbmcoKSl7Yi5wdXNoKGMpO3ZhciBlPWIsZj1lLnB1c2gsZyxsPVN0cmluZyhkKTtwZz1wZ3x8cWcoKTtyZz1yZ3x8b2coKTtmb3IodmFyIG09W10sbj0wO248bC5sZW5ndGg7bis9Myl7dmFyIHA9bisxPGwubGVuZ3RoLHE9bisyPGwubGVuZ3RoLHI9bC5jaGFyQ29kZUF0KG4pLHQ9cD9sLmNoYXJDb2RlQXQobisxKTowLHU9cT9sLmNoYXJDb2RlQXQobisyKTowLHY9cj4+Mix4PShyJjMpPDw0fHQ+PjQseT0odCYxNSk8PDJ8dT4+Nix3PXUmNjM7cXx8KHc9NjQscHx8KHk9NjQpKTttLnB1c2gocGdbdl0scGdbeF0scGdbeV0scGdbd10pfWc9bS5qb2luKCIiKTtmLmNhbGwoZSxnKX19dmFyIEE9Yi5qb2luKCIqIik7cmV0dXJuWyIxIixPZyhBKSwKQV0uam9pbigiKiIpfTtmdW5jdGlvbiBPZyhhLGIpe3ZhciBjPVtHLm5hdmlnYXRvci51c2VyQWdlbnQsKG5ldyBEYXRlKS5nZXRUaW1lem9uZU9mZnNldCgpLFphLnVzZXJMYW5ndWFnZXx8WmEubGFuZ3VhZ2UsTWF0aC5mbG9vcihEYSgpLzYwLzFFMyktKHZvaWQgMD09PWI/MDpiKSxhXS5qb2luKCIqIiksZDtpZighKGQ9dGcpKXtmb3IodmFyIGU9QXJyYXkoMjU2KSxmPTA7MjU2PmY7ZisrKXtmb3IodmFyIGc9ZixsPTA7OD5sO2wrKylnPWcmMT9nPj4+MV4zOTg4MjkyMzg0Omc+Pj4xO2VbZl09Z31kPWV9dGc9ZDtmb3IodmFyIG09NDI5NDk2NzI5NSxuPTA7bjxjLmxlbmd0aDtuKyspbT1tPj4+OF50Z1sobV5jLmNoYXJDb2RlQXQobikpJjI1NV07cmV0dXJuKChtXi0xKT4+PjApLnRvU3RyaW5nKDM2KX0KZnVuY3Rpb24gUWcoKXtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGI9aWUoRy5sb2NhdGlvbi5ocmVmKSxjPWIuc2VhcmNoLnJlcGxhY2UoIj8iLCIiKSxkPWRlKGMsIl9nbCIsITApfHwiIjthLnF1ZXJ5PVJnKGQpfHx7fTt2YXIgZT1nZShiLCJmcmFnbWVudCIpLm1hdGNoKE5nKCJfZ2wiKSk7YS5mcmFnbWVudD1SZyhlJiZlWzNdfHwiIil8fHt9fX1mdW5jdGlvbiBTZyhhLGIpe3ZhciBjPU5nKGEpLmV4ZWMoYiksZD1iO2lmKGMpe3ZhciBlPWNbMl0sZj1jWzRdO2Q9Y1sxXTtmJiYoZD1kK2UrZil9cmV0dXJuIGR9CnZhciBUZz1mdW5jdGlvbihhLGIpe2J8fChiPSJfZ2wiKTt2YXIgYz1NZy5leGVjKGEpO2lmKCFjKXJldHVybiIiO3ZhciBkPWNbMV0sZT1TZyhiLChjWzJdfHwiIikuc2xpY2UoMSkpLGY9U2coYiwoY1szXXx8IiIpLnNsaWNlKDEpKTtlLmxlbmd0aCYmKGU9Ij8iK2UpO2YubGVuZ3RoJiYoZj0iIyIrZik7cmV0dXJuIiIrZCtlK2Z9LFVnPWZ1bmN0aW9uKGEpe3ZhciBiPVFnKCksYz13ZygpO2MuZGF0YXx8KGMuZGF0YT17cXVlcnk6e30sZnJhZ21lbnQ6e319LGIoYy5kYXRhKSk7dmFyIGQ9e30sZT1jLmRhdGE7ZSYmKEdhKGQsZS5xdWVyeSksYSYmR2EoZCxlLmZyYWdtZW50KSk7cmV0dXJuIGR9LFJnPWZ1bmN0aW9uKGEpe3RyeXt2YXIgYj1WZyhhLDMpO2lmKHZvaWQgMCE9PWIpe2Zvcih2YXIgYz17fSxkPWI/Yi5zcGxpdCgiKiIpOltdLGU9MDtlKzE8ZC5sZW5ndGg7ZSs9Mil7dmFyIGY9ZFtlXSxnPXNnKGRbZSsxXSk7Y1tmXT1nfVJjKCJUQUdHSU5HIiw2KTtyZXR1cm4gY319Y2F0Y2gobCl7UmMoIlRBR0dJTkciLAo4KX19O2Z1bmN0aW9uIFZnKGEsYil7aWYoYSl7dmFyIGM7YTp7Zm9yKHZhciBkPWEsZT0wOzM+ZTsrK2Upe3ZhciBmPUpnLmV4ZWMoZCk7aWYoZil7Yz1mO2JyZWFrIGF9ZD1kZWNvZGVVUklDb21wb25lbnQoZCl9Yz12b2lkIDB9dmFyIGc9YztpZihnJiYiMSI9PT1nWzFdKXt2YXIgbD1nWzNdLG07YTp7Zm9yKHZhciBuPWdbMl0scD0wO3A8YjsrK3ApaWYobj09PU9nKGwscCkpe209ITA7YnJlYWsgYX1tPSExfWlmKG0pcmV0dXJuIGw7UmMoIlRBR0dJTkciLDcpfX19CmZ1bmN0aW9uIFdnKGEsYixjLGQpe2Z1bmN0aW9uIGUocCl7cD1TZyhhLHApO3ZhciBxPXAuY2hhckF0KHAubGVuZ3RoLTEpO3AmJiImIiE9PXEmJihwKz0iJiIpO3JldHVybiBwK259ZD12b2lkIDA9PT1kPyExOmQ7dmFyIGY9TWcuZXhlYyhjKTtpZighZilyZXR1cm4iIjt2YXIgZz1mWzFdLGw9ZlsyXXx8IiIsbT1mWzNdfHwiIixuPWErIj0iK2I7ZD9tPSIjIitlKG0uc3Vic3RyaW5nKDEpKTpsPSI/IitlKGwuc3Vic3RyaW5nKDEpKTtyZXR1cm4iIitnK2wrbX0KZnVuY3Rpb24gWGcoYSxiKXt2YXIgYz0iRk9STSI9PT0oYS50YWdOYW1lfHwiIikudG9VcHBlckNhc2UoKSxkPUlnKGIsMSxjKSxlPUlnKGIsMixjKSxmPUlnKGIsMyxjKTtpZihIYShkKSl7dmFyIGc9UGcoZCk7Yz9ZZygiX2dsIixnLGEpOlpnKCJfZ2wiLGcsYSwhMSl9aWYoIWMmJkhhKGUpKXt2YXIgbD1QZyhlKTtaZygiX2dsIixsLGEsITApfWZvcih2YXIgbSBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkobSkpYTp7dmFyIG49bSxwPWZbbV0scT1hO2lmKHEudGFnTmFtZSl7aWYoImEiPT09cS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe1pnKG4scCxxKTticmVhayBhfWlmKCJmb3JtIj09PXEudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXtZZyhuLHAscSk7YnJlYWsgYX19InN0cmluZyI9PXR5cGVvZiBxJiZXZyhuLHAscSl9fQpmdW5jdGlvbiBaZyhhLGIsYyxkKXtpZihjLmhyZWYpe3ZhciBlPVdnKGEsYixjLmhyZWYsdm9pZCAwPT09ZD8hMTpkKTtSYS50ZXN0KGUpJiYoYy5ocmVmPWUpfX0KZnVuY3Rpb24gWWcoYSxiLGMpe2lmKGMmJmMuYWN0aW9uKXt2YXIgZD0oYy5tZXRob2R8fCIiKS50b0xvd2VyQ2FzZSgpO2lmKCJnZXQiPT09ZCl7Zm9yKHZhciBlPWMuY2hpbGROb2Rlc3x8W10sZj0hMSxnPTA7ZzxlLmxlbmd0aDtnKyspe3ZhciBsPWVbZ107aWYobC5uYW1lPT09YSl7bC5zZXRBdHRyaWJ1dGUoInZhbHVlIixiKTtmPSEwO2JyZWFrfX1pZighZil7dmFyIG09SC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO20uc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIik7bS5zZXRBdHRyaWJ1dGUoIm5hbWUiLGEpO20uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsYik7Yy5hcHBlbmRDaGlsZChtKX19ZWxzZSBpZigicG9zdCI9PT1kKXt2YXIgbj1XZyhhLGIsYy5hY3Rpb24pO1JhLnRlc3QobikmJihjLmFjdGlvbj1uKX19fQpmdW5jdGlvbiB1ZyhhKXt0cnl7dmFyIGI7YTp7Zm9yKHZhciBjPWEsZD0xMDA7YyYmMDxkOyl7aWYoYy5ocmVmJiZjLm5vZGVOYW1lLm1hdGNoKC9eYSg/OnJlYSk/JC9pKSl7Yj1jO2JyZWFrIGF9Yz1jLnBhcmVudE5vZGU7ZC0tfWI9bnVsbH12YXIgZT1iO2lmKGUpe3ZhciBmPWUucHJvdG9jb2w7Imh0dHA6IiE9PWYmJiJodHRwczoiIT09Znx8WGcoZSxlLmhvc3RuYW1lKX19Y2F0Y2goZyl7fX1mdW5jdGlvbiB2ZyhhKXt0cnl7aWYoYS5hY3Rpb24pe3ZhciBiPWdlKGllKGEuYWN0aW9uKSwiaG9zdCIpO1hnKGEsYil9fWNhdGNoKGMpe319CnZhciAkZz1mdW5jdGlvbihhLGIsYyxkKXt4ZygpO0hnKGEsYiwiZnJhZ21lbnQiPT09Yz8yOjEsISFkLCExKX0sYWg9ZnVuY3Rpb24oYSxiKXt4ZygpO0hnKGEsW2ZlKEcubG9jYXRpb24sImhvc3QiLCEwKV0sYiwhMCwhMCl9LGJoPWZ1bmN0aW9uKCl7dmFyIGE9SC5sb2NhdGlvbi5ob3N0bmFtZSxiPUtnLmV4ZWMoSC5yZWZlcnJlcik7aWYoIWIpcmV0dXJuITE7dmFyIGM9YlsyXSxkPWJbMV0sZT0iIjtpZihjKXt2YXIgZj1jLnNwbGl0KCIvIiksZz1mWzFdO2U9InMiPT09Zz9kZWNvZGVVUklDb21wb25lbnQoZlsyXSk6ZGVjb2RlVVJJQ29tcG9uZW50KGcpfWVsc2UgaWYoZCl7aWYoMD09PWQuaW5kZXhPZigieG4tLSIpKXJldHVybiExO2U9ZC5yZXBsYWNlKC8tL2csIi4iKS5yZXBsYWNlKC9cLlwuL2csIi0iKX12YXIgbD1hLnJlcGxhY2UoTGcsIiIpLG09ZS5yZXBsYWNlKExnLCIiKSxuO2lmKCEobj1sPT09bSkpe3ZhciBwPSIuIittO249bC5zdWJzdHJpbmcobC5sZW5ndGgtcC5sZW5ndGgsCmwubGVuZ3RoKT09PXB9cmV0dXJuIG59LGNoPWZ1bmN0aW9uKGEsYil7cmV0dXJuITE9PT1hPyExOmF8fGJ8fGJoKCl9O3ZhciBkaD17fTt2YXIgZWg9L15cdyskLyxmaD0vXltcdy1dKyQvLGdoPXthdzoiX2F3IixkYzoiX2RjIixnZjoiX2dmIixoYToiX2hhIixncDoiX2dwIixnYjoiX2diIn0saGg9ZnVuY3Rpb24oKXtpZighZGYoKS5nKCl8fCFxZigpKXJldHVybiEwO3ZhciBhPW5mKCJhZF9zdG9yYWdlIik7cmV0dXJuIG51bGw9PWE/ITA6ISFhfSxpaD1mdW5jdGlvbihhLGIpe3BmKCJhZF9zdG9yYWdlIik/aGgoKT9hKCk6dmYoYSwiYWRfc3RvcmFnZSIpOmI/UmMoIlRBR0dJTkciLDMpOnVmKGZ1bmN0aW9uKCl7aWgoYSwhMCl9LFsiYWRfc3RvcmFnZSJdKX0sa2g9ZnVuY3Rpb24oYSl7cmV0dXJuIGpoKGEpLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi5FYX0pfSxqaD1mdW5jdGlvbihhKXt2YXIgYj1bXTtpZighSmYoRyl8fCFILmNvb2tpZSlyZXR1cm4gYjt2YXIgYz1NZihhLEguY29va2llLHZvaWQgMCwiYWRfc3RvcmFnZSIpO2lmKCFjfHwwPT1jLmxlbmd0aClyZXR1cm4gYjtmb3IodmFyIGQ9e30sZT0wO2U8Yy5sZW5ndGg7ZD0Ke1hjOmQuWGN9LGUrKyl7dmFyIGY9bGgoY1tlXSk7aWYobnVsbCE9Zil7dmFyIGc9ZixsPWcudmVyc2lvbjtkLlhjPWcuRWE7dmFyIG09Zy50aW1lc3RhbXAsbj1nLmxhYmVscyxwPXNhKGIsZnVuY3Rpb24ocSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLkVhPT09cS5YY319KGQpKTtwPyhwLnRpbWVzdGFtcD1NYXRoLm1heChwLnRpbWVzdGFtcCxtKSxwLmxhYmVscz1taChwLmxhYmVscyxufHxbXSkpOmIucHVzaCh7dmVyc2lvbjpsLEVhOmQuWGMsdGltZXN0YW1wOm0sbGFiZWxzOm59KX19Yi5zb3J0KGZ1bmN0aW9uKHEscil7cmV0dXJuIHIudGltZXN0YW1wLXEudGltZXN0YW1wfSk7cmV0dXJuIG5oKGIpfTtmdW5jdGlvbiBtaChhLGIpe2Zvcih2YXIgYz17fSxkPVtdLGU9MDtlPGEubGVuZ3RoO2UrKyljW2FbZV1dPSEwLGQucHVzaChhW2VdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyljW2JbZl1dfHxkLnB1c2goYltmXSk7cmV0dXJuIGR9CmZ1bmN0aW9uIG9oKGEpe3JldHVybiBhJiYic3RyaW5nIj09dHlwZW9mIGEmJmEubWF0Y2goZWgpP2E6Il9nY2wifQp2YXIgcWg9ZnVuY3Rpb24oKXt2YXIgYT1pZShHLmxvY2F0aW9uLmhyZWYpLGI9Z2UoYSwicXVlcnkiLCExLHZvaWQgMCwiZ2NsaWQiKSxjPWdlKGEsInF1ZXJ5IiwhMSx2b2lkIDAsImdjbHNyYyIpLGQ9Z2UoYSwicXVlcnkiLCExLHZvaWQgMCwid2JyYWlkIiksZT1nZShhLCJxdWVyeSIsITEsdm9pZCAwLCJkY2xpZCIpO2lmKCFifHwhY3x8IWQpe3ZhciBmPWEuaGFzaC5yZXBsYWNlKCIjIiwiIik7Yj1ifHxkZShmLCJnY2xpZCIpO2M9Y3x8ZGUoZiwiZ2Nsc3JjIik7ZD1kfHxkZShmLCJ3YnJhaWQiKX1yZXR1cm4gcGgoYixjLGUsZCl9LHBoPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXt9LGY9ZnVuY3Rpb24oZyxsKXtlW2xdfHwoZVtsXT1bXSk7ZVtsXS5wdXNoKGcpfTtlLmdjbGlkPWE7ZS5nY2xzcmM9YjtlLmRjbGlkPWM7dm9pZCAwIT09ZCYmZmgudGVzdChkKSYmKGUuZ2JyYWlkPWQsZihkLCJnYiIpKTtpZih2b2lkIDAhPT1hJiZhLm1hdGNoKGZoKSlzd2l0Y2goYil7Y2FzZSB2b2lkIDA6ZihhLAoiYXciKTticmVhaztjYXNlICJhdy5kcyI6ZihhLCJhdyIpO2YoYSwiZGMiKTticmVhaztjYXNlICJkcyI6ZihhLCJkYyIpO2JyZWFrO2Nhc2UgIjNwLmRzIjpmKGEsImRjIik7YnJlYWs7Y2FzZSAiZ2YiOmYoYSwiZ2YiKTticmVhaztjYXNlICJoYSI6ZihhLCJoYSIpfWMmJmYoYywiZGMiKTtyZXR1cm4gZX0sc2g9ZnVuY3Rpb24oYSl7dmFyIGI9cWgoKTtpaChmdW5jdGlvbigpe3JoKGIsITEsYSl9KX07CmZ1bmN0aW9uIHJoKGEsYixjLGQsZSl7ZnVuY3Rpb24gZih4LHkpe3ZhciB3PXRoKHgsZyk7dyYmKFZmKHcseSxsKSxtPSEwKX1jPWN8fHt9O2U9ZXx8W107dmFyIGc9b2goYy5wcmVmaXgpO2Q9ZHx8RGEoKTt2YXIgbD1kZyhjLGQsITApO2wuVmE9ImFkX3N0b3JhZ2UiO3ZhciBtPSExLG49TWF0aC5yb3VuZChkLzFFMykscD1mdW5jdGlvbih4KXt2YXIgeT1bIkdDTCIsbix4XTswPGUubGVuZ3RoJiZ5LnB1c2goZS5qb2luKCIuIikpO3JldHVybiB5LmpvaW4oIi4iKX07YS5hdyYmZigiYXciLHAoYS5hd1swXSkpO2EuZGMmJmYoImRjIixwKGEuZGNbMF0pKTthLmdmJiZmKCJnZiIscChhLmdmWzBdKSk7YS5oYSYmZigiaGEiLHAoYS5oYVswXSkpO2EuZ3AmJmYoImdwIixwKGEuZ3BbMF0pKTtpZigodm9pZCAwPT1kaC5lbmFibGVfZ2JyYWlkX2Nvb2tpZV93cml0ZT8wOmRoLmVuYWJsZV9nYnJhaWRfY29va2llX3dyaXRlKSYmIW0mJmEuZ2Ipe3ZhciBxPWEuZ2JbMF0scj10aCgiZ2IiLApnKSx0PSExO2lmKCFiKWZvcih2YXIgdT1qaChyKSx2PTA7djx1Lmxlbmd0aDt2KyspdVt2XS5FYT09PXEmJnVbdl0ubGFiZWxzJiYwPHVbdl0ubGFiZWxzLmxlbmd0aCYmKHQ9ITApO3R8fGYoImdiIixwKHEpKX19CnZhciB2aD1mdW5jdGlvbihhLGIpe3ZhciBjPVVnKCEwKTtpaChmdW5jdGlvbigpe2Zvcih2YXIgZD1vaChiLnByZWZpeCksZT0wO2U8YS5sZW5ndGg7KytlKXt2YXIgZj1hW2VdO2lmKHZvaWQgMCE9PWdoW2ZdKXt2YXIgZz10aChmLGQpLGw9Y1tnXTtpZihsKXt2YXIgbT1NYXRoLm1pbih1aChsKSxEYSgpKSxuO2I6e3ZhciBwPW07aWYoSmYoRykpZm9yKHZhciBxPU1mKGcsSC5jb29raWUsdm9pZCAwLCJhZF9zdG9yYWdlIikscj0wO3I8cS5sZW5ndGg7KytyKWlmKHVoKHFbcl0pPnApe249ITA7YnJlYWsgYn1uPSExfWlmKCFuKXt2YXIgdD1kZyhiLG0sITApO3QuVmE9ImFkX3N0b3JhZ2UiO1ZmKGcsbCx0KX19fX1yaChwaChjLmdjbGlkLGMuZ2Nsc3JjKSwhMSxiKX0pfSx0aD1mdW5jdGlvbihhLGIpe3ZhciBjPWdoW2FdO2lmKHZvaWQgMCE9PWMpcmV0dXJuIGIrY30sdWg9ZnVuY3Rpb24oYSl7cmV0dXJuIDAhPT13aChhLnNwbGl0KCIuIikpLmxlbmd0aD8xRTMqKE51bWJlcihhLnNwbGl0KCIuIilbMV0pfHwKMCk6MH07ZnVuY3Rpb24gbGgoYSl7dmFyIGI9d2goYS5zcGxpdCgiLiIpKTtyZXR1cm4gMD09PWIubGVuZ3RoP251bGw6e3ZlcnNpb246YlswXSxFYTpiWzJdLHRpbWVzdGFtcDoxRTMqKE51bWJlcihiWzFdKXx8MCksbGFiZWxzOmIuc2xpY2UoMyl9fWZ1bmN0aW9uIHdoKGEpe3JldHVybiAzPmEubGVuZ3RofHwiR0NMIiE9PWFbMF0mJiIxIiE9PWFbMF18fCEvXlxkKyQvLnRlc3QoYVsxXSl8fCFmaC50ZXN0KGFbMl0pP1tdOmF9CnZhciB4aD1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKHJhKGIpJiZKZihHKSl7dmFyIGY9b2goZSksZz1mdW5jdGlvbigpe2Zvcih2YXIgbD17fSxtPTA7bTxhLmxlbmd0aDsrK20pe3ZhciBuPXRoKGFbbV0sZik7aWYobil7dmFyIHA9TWYobixILmNvb2tpZSx2b2lkIDAsImFkX3N0b3JhZ2UiKTtwLmxlbmd0aCYmKGxbbl09cC5zb3J0KClbcC5sZW5ndGgtMV0pfX1yZXR1cm4gbH07aWgoZnVuY3Rpb24oKXskZyhnLGIsYyxkKX0pfX0sbmg9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBmaC50ZXN0KGIuRWEpfSl9LHloPWZ1bmN0aW9uKGEsYil7aWYoSmYoRykpe2Zvcih2YXIgYz1vaChiLnByZWZpeCksZD17fSxlPTA7ZTxhLmxlbmd0aDtlKyspZ2hbYVtlXV0mJihkW2FbZV1dPWdoW2FbZV1dKTtpaChmdW5jdGlvbigpe0IoZCxmdW5jdGlvbihmLGcpe3ZhciBsPU1mKGMrZyxILmNvb2tpZSx2b2lkIDAsImFkX3N0b3JhZ2UiKTtsLnNvcnQoZnVuY3Rpb24odCwKdSl7cmV0dXJuIHVoKHUpLXVoKHQpfSk7aWYobC5sZW5ndGgpe3ZhciBtPWxbMF0sbj11aChtKSxwPTAhPT13aChtLnNwbGl0KCIuIikpLmxlbmd0aD9tLnNwbGl0KCIuIikuc2xpY2UoMyk6W10scT17fSxyO3I9MCE9PXdoKG0uc3BsaXQoIi4iKSkubGVuZ3RoP20uc3BsaXQoIi4iKVsyXTp2b2lkIDA7cVtmXT1bcl07cmgocSwhMCxiLG4scCl9fSl9KX19O2Z1bmN0aW9uIHpoKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDsrK2MpaWYoYVtiW2NdXSlyZXR1cm4hMDtyZXR1cm4hMX0KdmFyIEFoPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoZSxmLGcpe2cmJihlW2ZdPWcpfWlmKHFmKCkpe3ZhciBjPXFoKCk7aWYoemgoYyxhKSl7dmFyIGQ9e307YihkLCJnY2xpZCIsYy5nY2xpZCk7YihkLCJkY2xpZCIsYy5kY2xpZCk7YihkLCJnY2xzcmMiLGMuZ2Nsc3JjKTtiKGQsIndicmFpZCIsYy5nYnJhaWQpO2FoKGZ1bmN0aW9uKCl7cmV0dXJuIGR9LDMpO2FoKGZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGUuX3VwPSIxIixlfSwxKX19fTtmdW5jdGlvbiBCaChhLGIpe3ZhciBjPW9oKGIpLGQ9dGgoYSxjKTtpZighZClyZXR1cm4gMDtmb3IodmFyIGU9amgoZCksZj0wLGc9MDtnPGUubGVuZ3RoO2crKylmPU1hdGgubWF4KGYsZVtnXS50aW1lc3RhbXApO3JldHVybiBmfQpmdW5jdGlvbiBDaChhKXt2YXIgYj0wLGM7Zm9yKGMgaW4gYSlmb3IodmFyIGQ9YVtjXSxlPTA7ZTxkLmxlbmd0aDtlKyspYj1NYXRoLm1heChiLE51bWJlcihkW2VdLnRpbWVzdGFtcCkpO3JldHVybiBifTt2YXIgUmg9ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gYX07dmFyIFNoPXtIOiJVQS00Nzk5NzY1MS0yNCIsamM6IiJ9LFRoPXthaDoiVUEtNDc5OTc2NTEtMjQiLGJoOiJVQS00Nzk5NzY1MS0yNCJ9LFVoPWZ1bmN0aW9uKCl7dmFyIGE9W1NoLkhdO3JldHVybiBhfSxWaD1mdW5jdGlvbigpe3ZhciBhPVtTaC5IXTsKcmV0dXJuIGF9LFdoPWZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXI9e307dGhpcy5kZXN0aW5hdGlvbj17fTt0aGlzLmNhbm9uaWNhbD17fX0sWWg9ZnVuY3Rpb24oYSl7cmV0dXJuIFhoKCkuY29udGFpbmVyLmhhc093blByb3BlcnR5KGEpfTtmdW5jdGlvbiBYaCgpe3ZhciBhPVUudGlkcjthfHwoYT1uZXcgV2gsVS50aWRyPWEpO3JldHVybiBhfXZhciBaaDtpZigzPT09c2QuRmQubGVuZ3RoKVpoPSJnIjtlbHNle3ZhciAkaD0iRyI7JGg9ImciO1poPSRofQp2YXIgYWk9eyIiOiJuIixVQToidSIsQVc6ImEiLERDOiJkIixHOiJlIixHRjoiZiIsSEE6ImgiLEdUTTpaaCxPUFQ6Im8ifSxiaT1mdW5jdGlvbihhKXt2YXIgYj1TaC5ILnNwbGl0KCItIiksYz1iWzBdLnRvVXBwZXJDYXNlKCksZD1haVtjXXx8ImkiLGU9YSYmIkdUTSI9PT1jP2JbMV06Ik9QVCI9PT1jP2JbMV06IiIsZjtpZigzPT09c2QuRmQubGVuZ3RoKXt2YXIgZz0idyI7Zz1SaCgpPyJzIjoibyI7Zj0iMiIrZ31lbHNlIGY9IiI7cmV0dXJuIGYrZCtzZC5GZCtlfTt2YXIgY2k9ITE7dmFyIGRpPWZ1bmN0aW9uKCl7dGhpcy5nPXt9fSxlaT1mdW5jdGlvbihhLGIsYyl7bnVsbCE9YyYmKGEuZ1tiXT1jKX0sZmk9ZnVuY3Rpb24oYSl7cmV0dXJuIE9iamVjdC5rZXlzKGEuZykubWFwKGZ1bmN0aW9uKGIpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYikrIj0iK2VuY29kZVVSSUNvbXBvbmVudChhLmdbYl0pfSkuam9pbigiJiIpfSxoaT1mdW5jdGlvbihhLGIsYyxkLGUpe307CnZhciBqaT1uZXcgUmVnRXhwKC9eKC4qXC4pPyhnb29nbGV8eW91dHViZXxibG9nZ2VyfHdpdGhnb29nbGUpKFwuY29tPyk/KFwuW2Etel17Mn0pP1wuPyQvKSxraT17Y2w6WyJlY2wiXSxjdXN0b21QaXhlbHM6WyJub25Hb29nbGVQaXhlbHMiXSxlY2w6WyJjbCJdLGVobDpbImhsIl0saGw6WyJlaGwiXSxodG1sOlsiY3VzdG9tU2NyaXB0cyIsImN1c3RvbVBpeGVscyIsIm5vbkdvb2dsZVBpeGVscyIsIm5vbkdvb2dsZVNjcmlwdHMiLCJub25Hb29nbGVJZnJhbWVzIl0sY3VzdG9tU2NyaXB0czpbImh0bWwiLCJjdXN0b21QaXhlbHMiLCJub25Hb29nbGVQaXhlbHMiLCJub25Hb29nbGVTY3JpcHRzIiwibm9uR29vZ2xlSWZyYW1lcyJdLG5vbkdvb2dsZVBpeGVsczpbXSxub25Hb29nbGVTY3JpcHRzOlsibm9uR29vZ2xlUGl4ZWxzIl0sbm9uR29vZ2xlSWZyYW1lczpbIm5vbkdvb2dsZVBpeGVscyJdfSxsaT17Y2w6WyJlY2wiXSxjdXN0b21QaXhlbHM6WyJjdXN0b21TY3JpcHRzIiwiaHRtbCJdLAplY2w6WyJjbCJdLGVobDpbImhsIl0saGw6WyJlaGwiXSxodG1sOlsiY3VzdG9tU2NyaXB0cyJdLGN1c3RvbVNjcmlwdHM6WyJodG1sIl0sbm9uR29vZ2xlUGl4ZWxzOlsiY3VzdG9tUGl4ZWxzIiwiY3VzdG9tU2NyaXB0cyIsImh0bWwiLCJub25Hb29nbGVTY3JpcHRzIiwibm9uR29vZ2xlSWZyYW1lcyJdLG5vbkdvb2dsZVNjcmlwdHM6WyJjdXN0b21TY3JpcHRzIiwiaHRtbCJdLG5vbkdvb2dsZUlmcmFtZXM6WyJjdXN0b21TY3JpcHRzIiwiaHRtbCIsIm5vbkdvb2dsZVNjcmlwdHMiXX0sbWk9Imdvb2dsZSBjdXN0b21QaXhlbHMgY3VzdG9tU2NyaXB0cyBodG1sIG5vbkdvb2dsZVBpeGVscyBub25Hb29nbGVTY3JpcHRzIG5vbkdvb2dsZUlmcmFtZXMiLnNwbGl0KCIgIik7CnZhciBuaT1mdW5jdGlvbigpe3ZhciBhPSExO2E9ITA7cmV0dXJuIGF9LHBpPWZ1bmN0aW9uKGEpe3ZhciBiPU1kKCJndG0uYWxsb3dsaXN0Iil8fE1kKCJndG0ud2hpdGVsaXN0Iik7YiYmUSg5KTtuaSgpJiYoYj1bImdvb2dsZSIsImd0YWdmbCIsImxjbCIsInpvbmUiXSk7dmFyIGM9YiYmSWEoQWEoYiksa2kpLGQ9TWQoImd0bS5ibG9ja2xpc3QiKXx8Ck1kKCJndG0uYmxhY2tsaXN0Iik7ZHx8KGQ9TWQoInRhZ1R5cGVCbGFja2xpc3QiKSkmJlEoMyk7ZD9RKDgpOmQ9W107b2koKSYmKGQ9QWEoZCksZC5wdXNoKCJub25Hb29nbGVQaXhlbHMiLCJub25Hb29nbGVTY3JpcHRzIiwic2FuZGJveGVkU2NyaXB0cyIpKTswPD1BYShkKS5pbmRleE9mKCJnb29nbGUiKSYmUSgyKTt2YXIgZT1kJiZJYShBYShkKSxsaSksZj17fTtyZXR1cm4gZnVuY3Rpb24oZyl7dmFyIGw9ZyYmZ1t4Yi51Yl07aWYoIWx8fCJzdHJpbmciIT10eXBlb2YgbClyZXR1cm4hMDtsPWwucmVwbGFjZSgvXl8qLywiIik7aWYodm9pZCAwIT09ZltsXSlyZXR1cm4gZltsXTt2YXIgbT1FZFtsXXx8W10sbj1hKGwsbSk7aWYoYil7dmFyIHA7CmlmKHA9bilhOntpZigwPmMuaW5kZXhPZihsKSlpZihtJiYwPG0ubGVuZ3RoKWZvcih2YXIgcT0wO3E8bS5sZW5ndGg7cSsrKXtpZigwPmMuaW5kZXhPZihtW3FdKSl7USgxMSk7cD0hMTticmVhayBhfX1lbHNle3A9ITE7YnJlYWsgYX1wPSEwfW49cH12YXIgcj0hMTtpZihkKXt2YXIgdD0wPD1lLmluZGV4T2YobCk7aWYodClyPXQ7ZWxzZXt2YXIgdT12YShlLG18fFtdKTt1JiZRKDEwKTtyPXV9fXZhciB2PSFufHxyO3Z8fCEoMDw9bS5pbmRleE9mKCJzYW5kYm94ZWRTY3JpcHRzIikpfHxjJiYtMSE9PWMuaW5kZXhPZigic2FuZGJveGVkU2NyaXB0cyIpfHwodj12YShlLG1pKSk7cmV0dXJuIGZbbF09dn19LG9pPWZ1bmN0aW9uKCl7cmV0dXJuIGppLnRlc3QoRy5sb2NhdGlvbiYmRy5sb2NhdGlvbi5ob3N0bmFtZSl9Owp2YXIgc2k9ZnVuY3Rpb24oYSl7fSx3aT1mdW5jdGlvbihhKXt9LHhpPQpmdW5jdGlvbigpe3JldHVybiImdGM9IitZYi5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGF9KS5sZW5ndGh9LEFpPWZ1bmN0aW9uKCl7MjAyMjw9eWkoKS5sZW5ndGgmJnppKCl9LEJpPWZ1bmN0aW9uKGEpe3JldHVybiBhLm1hdGNoKC9eKGd0bXxndGFnKVwuLyk/ZW5jb2RlVVJJQ29tcG9uZW50KGEpOiIqIn0sRGk9ZnVuY3Rpb24oKXtDaXx8KENpPUcuc2V0VGltZW91dCh6aSw1MDApKX0semk9ZnVuY3Rpb24oKXtDaSYmKEcuY2xlYXJUaW1lb3V0KENpKSxDaT12b2lkIDApO2lmKHZvaWQgMCE9PUVpJiYoIUZpW0VpXXx8R2l8fEhpKSlpZihJaVtFaV18fEppLmFqKCl8fDA+PUtpLS0pUSgxKSxJaVtFaV09ITA7ZWxzZXtKaS56aigpO3ZhciBhPXlpKCEwKTtpYihhKTtpZihMaXx8TWkmJjA8TmkubGVuZ3RoKXt2YXIgYj1hLnJlcGxhY2UoIi9hPyIsIi90ZD8iKTtpYihiKX1GaVtFaV09ITA7TWk9TGk9T2k9UGk9UWk9SGk9R2k9IiI7Tmk9W119fSx5aT1mdW5jdGlvbihhKXt2YXIgYj0KRWk7aWYodm9pZCAwPT09YilyZXR1cm4iIjt2YXIgYz1TYygiR1RNIiksZD1TYygiVEFHR0lORyIpO3JldHVybltSaSxGaVtiXT8iIjoiJmVzPTEiLFNpW2JdLHNpKGIpLGM/IiZ1PSIrYzoiIixkPyImdXQ9IitkOiIiLHhpKCksR2ksSGksUWksUGksd2koYSksT2ksTGksTWk/IiZkbD0iK2VuY29kZVVSSUNvbXBvbmVudChNaSk6IiIsMDxOaS5sZW5ndGg/IiZ0ZHA9IitOaS5qb2luKCIuIik6IiIsIiZ6PTAiXS5qb2luKCIiKX0sVWk9ZnVuY3Rpb24oKXtSaT1UaSgpfSxUaT1mdW5jdGlvbigpe3JldHVybltWaSwiJnY9MyZ0PXQiLCImcGlkPSIrdGEoKSwiJnJ2PSIrc2QuRmRdLmpvaW4oIiIpfSx2aT1bIkwiLCJTIiwiWSJdLHJpPVsiUyIsIkUiXSxXaT17c2FtcGxlUmF0ZToiMC4wMDUwMDAiLHRoOiIiLHNoOk51bWJlcigiNSIpfSxYaT0KMDw9SC5sb2NhdGlvbi5zZWFyY2guaW5kZXhPZigiP2d0bV9sYXRlbmN5PSIpfHwwPD1ILmxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCImZ3RtX2xhdGVuY3k9IiksWWk7aWYoIShZaT1YaSkpe3ZhciBaaT1NYXRoLnJhbmRvbSgpLCRpPVdpLnNhbXBsZVJhdGU7WWk9Wmk8JGl9dmFyIGFqPVlpLFZpPSJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbS9hP2lkPSIrU2guSCsiJmN2PTEiLGJqPXtsYWJlbDpTaC5IKyIgQ29udGFpbmVyIixjaGlsZHJlbjpbe2xhYmVsOiJJbml0aWFsaXphdGlvbiIsY2hpbGRyZW46W119XX0sUmk9VGkoKSxGaT17fSxHaT0iIixIaT0iIixPaT0iIixQaT0iIixMaT0iIixOaT0KW10sTWk9IiIsdWk9e30sdGk9ITEscWk9e30sY2o9e30sUWk9IiIsRWk9dm9pZCAwLFNpPXt9LElpPXt9LENpPXZvaWQgMCxkaj01OzA8V2kuc2gmJihkaj1XaS5zaCk7dmFyIEppPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD1bXSxlPTA7ZTxhOysrZSlkLnB1c2goMCk7cmV0dXJue2FqOmZ1bmN0aW9uKCl7cmV0dXJuIGM8YT8hMTpEYSgpLWRbYyVhXTxifSx6ajpmdW5jdGlvbigpe3ZhciBmPWMrKyVhO2RbZl09RGEoKX19fShkaiwxRTMpLEtpPTFFMyxmaj1mdW5jdGlvbihhLGIpe2lmKGFqJiZ2b2lkIDAhPT1hJiYhSWlbYV0mJkVpIT09YSl7emkoKTtFaT1hO09pPUdpPSIiO1NpW2FdPSImZT0iK0JpKGIpKyImZWlkPSIrYTtEaSgpO319LGdqPWZ1bmN0aW9uKGEsYixjLGQpe2lmKGFqJiZiKXt2YXIgZSxmPVN0cmluZyhiW3hiLnViXXx8IiIpLnJlcGxhY2UoL18vZywiIik7MD09PWYuaW5kZXhPZigiY3Z0IikmJihmPSJjdnQiKTtlPWY7dmFyIGc9YytlOwppZighSWlbYV0pe2EhPT1FaSYmKHppKCksRWk9YSk7R2k9R2k/R2krIi4iK2c6IiZ0cj0iK2c7dmFyIGw9YlsiZnVuY3Rpb24iXTtpZighbCl0aHJvdyBFcnJvcigiRXJyb3I6IE5vIGZ1bmN0aW9uIG5hbWUgZ2l2ZW4gZm9yIGZ1bmN0aW9uIGNhbGwuIik7dmFyIG09KCRiW2xdPyIxIjoiMiIpK2U7T2k9T2k/T2krIi4iK206IiZ0aT0iK207RGkoKTtBaSgpfX19Owp2YXIgbmo9ZnVuY3Rpb24oYSxiLGMpe2lmKGFqJiZ2b2lkIDAhPT1hJiYhSWlbYV0pe2EhPT1FaSYmKHppKCksRWk9YSk7dmFyIGQ9YytiO0hpPUhpP0hpKyIuIitkOiImZXByPSIrZDtEaSgpO0FpKCl9fSxvaj1mdW5jdGlvbihhLGIsYyl7fTt2YXIgcGo9e2luaXRpYWxpemVkOjExLGNvbXBsZXRlOjEyLGludGVyYWN0aXZlOjEzfSxxaj17fSxyaj1PYmplY3QuZnJlZXplKChxaltULlViXT0hMCxxaikpLHNqPXt9LHRqPU9iamVjdC5mcmVlemUoKHNqW1QuRGFdPSEwLHNqKSksdWo9MDw9SC5sb2NhdGlvbi5zZWFyY2guaW5kZXhPZigiP2d0bV9kaWFnbm9zdGljcz0iKXx8MDw9SC5sb2NhdGlvbi5zZWFyY2guaW5kZXhPZigiJmd0bV9kaWFnbm9zdGljcz0iKSx3aj1mdW5jdGlvbihhLGIsYyl7aWYoImNvbmZpZyIhPT1hKXJldHVybjt2YXIgZCxlPWFiKCJnb29nbGVfdGFnX2RhdGEiLHt9KTtlLnRkfHwoZS50ZD17fSk7ZD1lLnRkO3ZhciBmPU4oYy5nbG9iYWxDb25maWcpO04oYy5ldmVudE1vZGVsLGYpO3ZhciBnPVtdLGw7Zm9yKGwgaW4gZCl7dmFyIG09CnZqKGRbbF0sZik7bS5sZW5ndGgmJih1aiYmY29uc29sZS5sb2cobSksZy5wdXNoKGwpKX1pZihnLmxlbmd0aCl7aWYoZy5sZW5ndGgpe3ZhciBuPWIrIioiK2cuam9pbigiLiIpO0xpPUxpP0xpKyIhIituOiImdGRjPSIrbn1SYygiVEFHR0lORyIscGpbSC5yZWFkeVN0YXRlXXx8MTQpfWRbYl09Zjt9O2Z1bmN0aW9uIHhqKGEsYil7dmFyIGM9e30sZDtmb3IoZCBpbiBiKWIuaGFzT3duUHJvcGVydHkoZCkmJihjW2RdPSEwKTtmb3IodmFyIGUgaW4gYSlhLmhhc093blByb3BlcnR5KGUpJiYoY1tlXT0hMCk7cmV0dXJuIGN9CmZ1bmN0aW9uIHZqKGEsYixjLGQpe2M9dm9pZCAwPT09Yz97fTpjO2Q9dm9pZCAwPT09ZD8iIjpkO2lmKGE9PT1iKXJldHVybltdO3ZhciBlPWZ1bmN0aW9uKHEscil7dmFyIHQ9cltxXTtyZXR1cm4gdm9pZCAwPT09dD90altxXTp0fSxmO2ZvcihmIGluIHhqKGEsYikpaWYoIXJqW2ZdKXt2YXIgZz0oZD9kKyIuIjoiIikrZixsPWUoZixhKSxtPWUoZixiKSxuPSJvYmplY3QiPT09dGIobCl8fCJhcnJheSI9PT10YihsKSxwPSJvYmplY3QiPT09dGIobSl8fCJhcnJheSI9PT10YihtKTtpZihuJiZwKXZqKGwsbSxjLGcpO2Vsc2UgaWYobnx8cHx8bCE9PW0pY1tnXT0hMH1yZXR1cm4gT2JqZWN0LmtleXMoYyl9O3ZhciB5aj0hMSx6aj0wLEFqPVtdO2Z1bmN0aW9uIEJqKGEpe2lmKCF5ail7dmFyIGI9SC5jcmVhdGVFdmVudE9iamVjdCxjPSJjb21wbGV0ZSI9PUgucmVhZHlTdGF0ZSxkPSJpbnRlcmFjdGl2ZSI9PUgucmVhZHlTdGF0ZTtpZighYXx8InJlYWR5c3RhdGVjaGFuZ2UiIT1hLnR5cGV8fGN8fCFiJiZkKXt5aj0hMDtmb3IodmFyIGU9MDtlPEFqLmxlbmd0aDtlKyspSihBaltlXSl9QWoucHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgZj0wO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspSihhcmd1bWVudHNbZl0pO3JldHVybiAwfX19ZnVuY3Rpb24gQ2ooKXtpZigheWomJjE0MD56ail7emorKzt0cnl7SC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKSxCaigpfWNhdGNoKGEpe0cuc2V0VGltZW91dChDaiw1MCl9fX12YXIgRGo9ZnVuY3Rpb24oYSl7eWo/YSgpOkFqLnB1c2goYSl9O3ZhciBFaj1mdW5jdGlvbihhLGIpe3JldHVybntlbnRpdHlUeXBlOjEsaW5kZXhJbk9yaWdpbkNvbnRhaW5lcjphLG5hbWVJbk9yaWdpbkNvbnRhaW5lcjpiLG9yaWdpbkNvbnRhaW5lcklkOlNoLkh9fTt2YXIgR2o9ZnVuY3Rpb24oYSxiKXt0aGlzLmc9ITE7dGhpcy5DPVtdO3RoaXMuST17dGFnczpbXX07dGhpcy5YPSExO3RoaXMubz10aGlzLnM9MDtGaih0aGlzLGEsYil9LEhqPWZ1bmN0aW9uKGEsYixjLGQpe2lmKHZkLmhhc093blByb3BlcnR5KGIpfHwiX196b25lIj09PWIpcmV0dXJuLTE7dmFyIGU9e307dmIoZCkmJihlPU4oZCxlKSk7ZS5pZD1jO2Uuc3RhdHVzPSJ0aW1lb3V0IjtyZXR1cm4gYS5JLnRhZ3MucHVzaChlKS0xfSxZaj1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1hLkkudGFnc1tiXTtlJiYoZS5zdGF0dXM9YyxlLmV4ZWN1dGlvblRpbWU9ZCl9LFpqPWZ1bmN0aW9uKGEpe2lmKCFhLmcpe2Zvcih2YXIgYj1hLkMsYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10oKTthLmc9ITA7YS5DLmxlbmd0aD0wfX0sRmo9ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMCE9PWImJmFrKGEsYik7YyYmRy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIFpqKGEpfSxOdW1iZXIoYykpfSxhaz0KZnVuY3Rpb24oYSxiKXt2YXIgYz1GYShmdW5jdGlvbigpe3JldHVybiBKKGZ1bmN0aW9uKCl7YihTaC5ILGEuSSl9KX0pO2EuZz9jKCk6YS5DLnB1c2goYyl9LGJrPWZ1bmN0aW9uKGEpe2EucysrO3JldHVybiBGYShmdW5jdGlvbigpe2EubysrO2EuWCYmYS5vPj1hLnMmJlpqKGEpfSl9LGNrPWZ1bmN0aW9uKGEpe2EuWD0hMDthLm8+PWEucyYmWmooYSl9O3ZhciBkaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoZCl7cmV0dXJuIXFhKGQpfHwwPmQ/MDpkfWlmKCFVLl9saSYmRy5wZXJmb3JtYW5jZSYmRy5wZXJmb3JtYW5jZS50aW1pbmcpe3ZhciBiPUcucGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCxjPXFhKE5kLmdldCgiZ3RtLnN0YXJ0IikpP05kLmdldCgiZ3RtLnN0YXJ0Iik6MDtVLl9saT17Y3N0OmEoYy1iKSxjYnQ6YShDZC1iKX19fSxlaz1mdW5jdGlvbihhKXtHLnBlcmZvcm1hbmNlJiZHLnBlcmZvcm1hbmNlLm1hcmsoU2guSCsiXyIrYSsiX3N0YXJ0Iil9LGZrPWZ1bmN0aW9uKGEpe2lmKEcucGVyZm9ybWFuY2Upe3ZhciBiPVNoLkgrIl8iK2ErIl9zdGFydCIsYz1TaC5IKyJfIithKyJfZHVyYXRpb24iO0cucGVyZm9ybWFuY2UubWVhc3VyZShjLGIpO3ZhciBkPUcucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZShjKVswXTtHLnBlcmZvcm1hbmNlLmNsZWFyTWFya3MoYik7Ry5wZXJmb3JtYW5jZS5jbGVhck1lYXN1cmVzKGMpOwp2YXIgZT1VLl9wfHx7fTt2b2lkIDA9PT1lW2FdJiYoZVthXT1kLmR1cmF0aW9uLFUuX3A9ZSk7cmV0dXJuIGQuZHVyYXRpb259fSxnaz1mdW5jdGlvbigpe2lmKEcucGVyZm9ybWFuY2UmJkcucGVyZm9ybWFuY2Uubm93KXt2YXIgYT1VLl9wfHx7fTthLlBBR0VWSUVXPUcucGVyZm9ybWFuY2Uubm93KCk7VS5fcD1hfX07dmFyIGhrPXt9LGlrPWZ1bmN0aW9uKCl7cmV0dXJuIEcuR29vZ2xlQW5hbHl0aWNzT2JqZWN0JiZHW0cuR29vZ2xlQW5hbHl0aWNzT2JqZWN0XX0sams9ITE7dmFyIGtrPWZ1bmN0aW9uKGEpe0cuR29vZ2xlQW5hbHl0aWNzT2JqZWN0fHwoRy5Hb29nbGVBbmFseXRpY3NPYmplY3Q9YXx8ImdhIik7dmFyIGI9Ry5Hb29nbGVBbmFseXRpY3NPYmplY3Q7aWYoR1tiXSlHLmhhc093blByb3BlcnR5KGIpfHxRKDEyKTtlbHNle3ZhciBjPWZ1bmN0aW9uKCl7Yy5xPWMucXx8W107Yy5xLnB1c2goYXJndW1lbnRzKX07Yy5sPU51bWJlcihDYSgpKTtHW2JdPWN9ZGsoKTtyZXR1cm4gR1tiXX0sbGs9ZnVuY3Rpb24oYSl7aWYocWYoKSl7dmFyIGI9aWsoKTtiKGErInJlcXVpcmUiLCJsaW5rZXIiKTtiKGErImxpbmtlcjpwYXNzdGhyb3VnaCIsITApfX07CmZ1bmN0aW9uIG1rKCl7cmV0dXJuIEcuR29vZ2xlQW5hbHl0aWNzT2JqZWN0fHwiZ2EifQp2YXIgbms9ZnVuY3Rpb24oYSl7fSxvaz1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBjPWlrKCksZD1jJiZjLmdldEJ5TmFtZSYmYy5nZXRCeU5hbWUoYSk7aWYoZCl7dmFyIGU9ZC5nZXQoInNlbmRIaXRUYXNrIik7ZC5zZXQoInNlbmRIaXRUYXNrIixmdW5jdGlvbihmKXt2YXIgZz1mLmdldCgiaGl0UGF5bG9hZCIpLGw9Zi5nZXQoImhpdENhbGxiYWNrIiksbT0wPmcuaW5kZXhPZigiJnRpZD0iK2IpO20mJihmLnNldCgiaGl0UGF5bG9hZCIsZy5yZXBsYWNlKC8mdGlkPVVBLVswLTldKy1bMC05XSsvLCImdGlkPSIrYiksITApLGYuc2V0KCJoaXRDYWxsYmFjayIsdm9pZCAwLCEwKSk7ZShmKTttJiYoZi5zZXQoImhpdFBheWxvYWQiLApnLCEwKSxmLnNldCgiaGl0Q2FsbGJhY2siLGwsITApLGYuc2V0KCJfeF8xOSIsdm9pZCAwLCEwKSxlKGYpKX0pfX19O2Z1bmN0aW9uIHRrKGEsYixjLGQpe3ZhciBlPVliW2FdLGY9dWsoYSxiLGMsZCk7aWYoIWYpcmV0dXJuIG51bGw7dmFyIGc9ZmMoZVt4Yi5vZ10sYyxbXSk7aWYoZyYmZy5sZW5ndGgpe3ZhciBsPWdbMF07Zj10ayhsLmluZGV4LHtvblN1Y2Nlc3M6ZixvbkZhaWx1cmU6MT09PWwuTWc/Yi50ZXJtaW5hdGU6Zix0ZXJtaW5hdGU6Yi50ZXJtaW5hdGV9LGMsZCl9cmV0dXJuIGZ9CmZ1bmN0aW9uIHVrKGEsYixjLGQpe2Z1bmN0aW9uIGUoKXtpZihmW3hiLmppXSlsKCk7ZWxzZXt2YXIgeD1nYyhmLGMsW10pO3ZhciB5PXhbeGIueGhdO2lmKG51bGwhPXkpZm9yKHZhciB3PTA7dzx5Lmxlbmd0aDt3KyspaWYoIURmKHlbd10pKXtsKCk7cmV0dXJufXZhciBBPUhqKGMueGIsU3RyaW5nKGZbeGIudWJdKSxOdW1iZXIoZlt4Yi5xZ10pLHhbeGIua2ldKSx6PSExO3gudnRwX2d0bU9uU3VjY2Vzcz1mdW5jdGlvbigpe2lmKCF6KXt6PSEwO3ZhciBGPURhKCktRTtnaihjLmlkLFliW2FdLCI1IixGKTtZaihjLnhiLEEsInN1Y2Nlc3MiLApGKTtnKCl9fTt4LnZ0cF9ndG1PbkZhaWx1cmU9ZnVuY3Rpb24oKXtpZigheil7ej0hMDt2YXIgRj1EYSgpLUU7Z2ooYy5pZCxZYlthXSwiNiIsRik7WWooYy54YixBLCJmYWlsdXJlIixGKTtsKCl9fTt4LnZ0cF9ndG1UYWdJZD1mLnRhZ19pZDt4LnZ0cF9ndG1FdmVudElkPWMuaWQ7Yy5wcmlvcml0eUlkJiYoeC52dHBfZ3RtUHJpb3JpdHlJZD1jLnByaW9yaXR5SWQpO2dqKGMuaWQsZiwiMSIpO3ZhciBDPWZ1bmN0aW9uKCl7dmFyIEY9RGEoKS1FO2dqKGMuaWQsZiwiNyIsRik7WWooYy54YixBLCJleGNlcHRpb24iLApGKTt6fHwoej0hMCxsKCkpfTt2YXIgRT1EYSgpO3RyeXtkYyh4LHtldmVudDpjLGluZGV4OmEsdHlwZToxfSl9Y2F0Y2goRil7QyhGKX19fXZhciBmPVliW2FdLGc9Yi5vblN1Y2Nlc3MsbD1iLm9uRmFpbHVyZSxtPWIudGVybWluYXRlO2lmKGMuYWYoZikpcmV0dXJuIG51bGw7dmFyIG49ZmMoZlt4Yi5yZ10sYyxbXSk7aWYobiYmbi5sZW5ndGgpe3ZhciBwPW5bMF0scT10ayhwLmluZGV4LHtvblN1Y2Nlc3M6ZyxvbkZhaWx1cmU6bCwKdGVybWluYXRlOm19LGMsZCk7aWYoIXEpcmV0dXJuIG51bGw7Zz1xO2w9Mj09PXAuTWc/bTpxfWlmKGZbeGIuaWddfHxmW3hiLm9pXSl7dmFyIHI9Zlt4Yi5pZ10/WmI6Yy5Naix0PWcsdT1sO2lmKCFyW2FdKXtlPUZhKGUpO3ZhciB2PXZrKGEscixlKTtnPXYub25TdWNjZXNzO2w9di5vbkZhaWx1cmV9cmV0dXJuIGZ1bmN0aW9uKCl7clthXSh0LHUpfX1yZXR1cm4gZX1mdW5jdGlvbiB2ayhhLGIsYyl7dmFyIGQ9W10sZT1bXTtiW2FdPXdrKGQsZSxjKTtyZXR1cm57b25TdWNjZXNzOmZ1bmN0aW9uKCl7YlthXT14aztmb3IodmFyIGY9MDtmPGQubGVuZ3RoO2YrKylkW2ZdKCl9LG9uRmFpbHVyZTpmdW5jdGlvbigpe2JbYV09eWs7Zm9yKHZhciBmPTA7ZjxlLmxlbmd0aDtmKyspZVtmXSgpfX19ZnVuY3Rpb24gd2soYSxiLGMpe3JldHVybiBmdW5jdGlvbihkLGUpe2EucHVzaChkKTtiLnB1c2goZSk7YygpfX1mdW5jdGlvbiB4ayhhKXthKCl9ZnVuY3Rpb24geWsoYSxiKXtiKCl9O2Z1bmN0aW9uIHprKGEsYil7aWYoYSl7dmFyIGM9IiIrYTswIT09Yy5pbmRleE9mKCJodHRwOi8vIikmJjAhPT1jLmluZGV4T2YoImh0dHBzOi8vIikmJihjPSJodHRwczovLyIrYyk7Ii8iPT09Y1tjLmxlbmd0aC0xXSYmKGM9Yy5zdWJzdHJpbmcoMCxjLmxlbmd0aC0xKSk7cmV0dXJuIGllKCIiK2MrYikuaHJlZn19ZnVuY3Rpb24gQWsoYSxiKXtyZXR1cm4gQmsoKT96ayhhLGIpOnZvaWQgMH1mdW5jdGlvbiBCaygpe3ZhciBhPSExO3JldHVybiBhfQpmdW5jdGlvbiBDaygpe3JldHVybiEhc2QuR2QmJiJTR1RNX1RPS0VOIiE9PXNkLkdkLnNwbGl0KCJAQCIpLmpvaW4oIiIpfTt2YXIgRWs9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKDI9PT1EaygpfHxkfHwiaHR0cDoiIT1HLmxvY2F0aW9uLnByb3RvY29sP2E6YikrY30sRGs9ZnVuY3Rpb24oKXt2YXIgYT1nYigpLGI7aWYoMT09PWEpYTp7dmFyIGM9eGQ7Yz1jLnRvTG93ZXJDYXNlKCk7Zm9yKHZhciBkPSJodHRwczovLyIrYyxlPSJodHRwOi8vIitjLGY9MSxnPUguZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpLGw9MDtsPGcubGVuZ3RoJiYxMDA+bDtsKyspe3ZhciBtPWdbbF0uc3JjO2lmKG0pe209bS50b0xvd2VyQ2FzZSgpO2lmKDA9PT1tLmluZGV4T2YoZSkpe2I9MzticmVhayBhfTE9PT1mJiYwPT09bS5pbmRleE9mKGQpJiYoZj0yKX19Yj1mfWVsc2UgYj1hO3JldHVybiBifTt2YXIgRms9ITE7CnZhciBIaz1mdW5jdGlvbihhLGIsYyl7aWYoIUdrKCkmJiFZaChhKSl7dmFyIGQ9Yz8iL2d0YWcvanMiOiIvZ3RtLmpzIixlPSI/aWQ9IitlbmNvZGVVUklDb21wb25lbnQoYSkrIiZsPSIrc2QuWixmPTA9PT1hLmluZGV4T2YoIkdUTS0iKTtmfHwoZSs9IiZjeD1jIik7dmFyIGc9Q2soKTtnJiYoZSs9IiZzaWduPSIrc2QuR2QpO3ZhciBsPUFrKGIsZCtlKTtpZighbCl7dmFyIG09c2Qua2MrZDtnJiYkYSYmZiYmKG09JGEucmVwbGFjZSgvXig/Omh0dHBzPzpcL1wvKT8vaSwiIikuc3BsaXQoL1s/I10vKVswXSk7bD1FaygiaHR0cHM6Ly8iLCJodHRwOi8vIixtK2UpfVhoKCkuY29udGFpbmVyW2FdPSEwO2ZiKGwpfX0sSWs9ZnVuY3Rpb24oYSxiKXtpZihGayl7dmFyIGM7aWYoYz0hR2soKSljPSFYaCgpLmRlc3RpbmF0aW9uLmhhc093blByb3BlcnR5KGEpO2lmKGMpe3ZhciBkPSIvZ3RhZy9kZXN0aW5hdGlvbj9pZD0iK2VuY29kZVVSSUNvbXBvbmVudChhKSsiJmw9IitzZC5aKyImY3g9YyI7CkNrKCkmJihkKz0iJnNpZ249IitzZC5HZCk7dmFyIGU9QWsoYixkKTtlfHwoZT1FaygiaHR0cHM6Ly8iLCJodHRwOi8vIixzZC5rYytkKSk7WGgoKS5kZXN0aW5hdGlvblthXT0hMDtmYihlKX19ZWxzZSBIayhhLGIsITApfTtmdW5jdGlvbiBHaygpe2lmKFJoKCkpe3JldHVybiEwfXJldHVybiExfXZhciBLaz1mdW5jdGlvbihhLGIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9Kaygic2V0IixhKTpKaygic2V0IixhLGIpfSxMaz1mdW5jdGlvbihhLGIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9KaygiY29uZmlnIixhKTpKaygiY29uZmlnIixhLGIpfSxNaz1mdW5jdGlvbihhLGIsYyl7Yz1jfHx7fTtjW1QudGJdPWE7aWYoIkciPT09YS5zcGxpdCgiLSIpWzBdKWZvcih2YXIgZCBpbiBjKSJfIj09PWRbMF0mJmRlbGV0ZSBjW2RdO3JldHVybiBKaygiZXZlbnQiLGIsYyl9O2Z1bmN0aW9uIEprKGEpe3JldHVybiBhcmd1bWVudHN9dmFyIE5rPWZ1bmN0aW9uKCl7dGhpcy5nPVtdO3RoaXMubz1bXX07TmsucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZy5sZW5ndGgrMTthWyJndG0udW5pcXVlRXZlbnRJZCJdPWI7YVsiZ3RtLnByaW9yaXR5SWQiXT1kO2MuZXZlbnRJZD1iO2MuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbj0hMDtjLmZyb21NZXNzYWdlQnVzPSEwO2MucHJpb3JpdHlJZD1kO3ZhciBlPXttZXNzYWdlOmEsbm90QmVmb3JlRXZlbnRJZDpiLHByaW9yaXR5SWQ6ZCxtZXNzYWdlQ29udGV4dDpjfTt0aGlzLmcucHVzaChlKTtmb3IodmFyIGY9MDtmPHRoaXMuby5sZW5ndGg7ZisrKXRyeXt0aGlzLm9bZl0oZSl9Y2F0Y2goZyl7fX07TmsucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbihhKXt0aGlzLm8ucHVzaChhKX07Ck5rLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIGE9e30sYj0wO2I8dGhpcy5nLmxlbmd0aDtiKyspe3ZhciBjPXRoaXMuZ1tiXSxkPWFbYy5ub3RCZWZvcmVFdmVudElkXTtkfHwoZD1bXSxhW2Mubm90QmVmb3JlRXZlbnRJZF09ZCk7ZC5wdXNoKGMpfXJldHVybiBhfTt2YXIgUGs9ZnVuY3Rpb24oYSxiLGMpe09rKCkuZW5xdWV1ZShhLGIsYyl9LFJrPWZ1bmN0aW9uKCl7dmFyIGE9UWs7T2soKS5saXN0ZW4oYSl9O2Z1bmN0aW9uIE9rKCl7dmFyIGE9VS5tYjthfHwoYT1uZXcgTmssVS5tYj1hKTtyZXR1cm4gYX12YXIgWms9ZnVuY3Rpb24oYSl7dmFyIGI9VS56b25lcztyZXR1cm4gYj9iLmdldElzQWxsb3dlZEZuKFVoKCksYSk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LCRrPWZ1bmN0aW9uKGEpe3ZhciBiPVUuem9uZXM7cmV0dXJuIGI/Yi5pc0FjdGl2ZShVaCgpLGEpOiEwfTt2YXIgY2w9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W10sZD0wO2Q8WWIubGVuZ3RoO2QrKylpZihhW2RdKXt2YXIgZT1ZYltkXTt2YXIgZj1iayhiLnhiKTt0cnl7dmFyIGc9dGsoZCx7b25TdWNjZXNzOmYsb25GYWlsdXJlOmYsdGVybWluYXRlOmZ9LGIsZCk7aWYoZyl7dmFyIGw9YyxtPWwucHVzaCxuPWQscD1lWyJmdW5jdGlvbiJdO2lmKCFwKXRocm93IkVycm9yOiBObyBmdW5jdGlvbiBuYW1lIGdpdmVuIGZvciBmdW5jdGlvbiBjYWxsLiI7dmFyIHE9JGJbcF07bS5jYWxsKGwse25oOm4sZWg6cT9xLnByaW9yaXR5T3ZlcnJpZGV8fDA6MCxleGVjdXRlOmd9KX1lbHNlIGFsKGQsYiksZigpfWNhdGNoKHQpe2YoKX19Yy5zb3J0KGJsKTtmb3IodmFyIHI9MDtyPGMubGVuZ3RoO3IrKyljW3JdLmV4ZWN1dGUoKTtyZXR1cm4gMDwKYy5sZW5ndGh9O2Z1bmN0aW9uIGJsKGEsYil7dmFyIGMsZD1iLmVoLGU9YS5laDtjPWQ+ZT8xOmQ8ZT8tMTowO3ZhciBmO2lmKDAhPT1jKWY9YztlbHNle3ZhciBnPWEubmgsbD1iLm5oO2Y9Zz5sPzE6ZzxsPy0xOjB9cmV0dXJuIGZ9CmZ1bmN0aW9uIGFsKGEsYil7aWYoIWFqKXJldHVybjt2YXIgYz1mdW5jdGlvbihkKXt2YXIgZT1iLmFmKFliW2RdKT8iMyI6IjQiLGY9ZmMoWWJbZF1beGIub2ddLGIsW10pO2YmJmYubGVuZ3RoJiZjKGZbMF0uaW5kZXgpO2dqKGIuaWQsWWJbZF0sZSk7dmFyIGc9ZmMoWWJbZF1beGIucmddLGIsW10pO2cmJmcubGVuZ3RoJiZjKGdbMF0uaW5kZXgpfTtjKGEpO312YXIgZmw9ITEsZGw7CnZhciBrbD1mdW5jdGlvbihhKXt2YXIgYj1EYSgpLGM9YVsiZ3RtLnVuaXF1ZUV2ZW50SWQiXSxkPWFbImd0bS5wcmlvcml0eUlkIl0sZT1hLmV2ZW50O2lmKCJndG0uanMiPT09ZSl7aWYoZmwpcmV0dXJuITE7Zmw9ITA7fXZhciBsLG09ITE7aWYoJGsoYykpbD1aayhjKTtlbHNle2lmKCJndG0uanMiIT09ZSYmImd0bS5pbml0IiE9PWUmJiJndG0uaW5pdF9jb25zZW50IiE9PWUpcmV0dXJuITE7bT0hMDtsPVprKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKX0KZmooYyxlKTt2YXIgbj1hLmV2ZW50Q2FsbGJhY2sscD1hLmV2ZW50VGltZW91dCxxPW47dmFyIHI9e2lkOmMscHJpb3JpdHlJZDpkLG5hbWU6ZSxhZjpwaShsKSxNajpbXSxYZzpmdW5jdGlvbigpe1EoNil9LERnOmdsKCksRWc6aGwoYykseGI6bmV3IEdqKHEscCl9LHQ9a2Mocik7Cm0mJih0PWlsKHQpKTt2YXIgdT1jbCh0LHIpLHY9ITE7Y2soci54Yik7Imd0bS5qcyIhPT1lJiYiZ3RtLnN5bmMiIT09ZXx8bmsoU2guSCk7cmV0dXJuIGpsKHQsdSl8fHZ9OwpmdW5jdGlvbiBobChhKXtyZXR1cm4gZnVuY3Rpb24oYil7YWomJih3YihiKXx8b2ooYSwiaW5wdXQiLGIpKX19ZnVuY3Rpb24gZ2woKXt2YXIgYT17fTthLmV2ZW50PVFkKCJldmVudCIsMSk7YS5lY29tbWVyY2U9UWQoImVjb21tZXJjZSIsMSk7YS5ndG09UWQoImd0bSIpO2EuZXZlbnRNb2RlbD1RZCgiZXZlbnRNb2RlbCIpO3JldHVybiBhfWZ1bmN0aW9uIGlsKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspYVtjXSYmKHVkW1N0cmluZyhZYltjXVt4Yi51Yl0pXSYmKGJbY109ITApLHZvaWQgMCE9PVliW2NdW3hiLnJpXSYmKGJbY109ITApKTtyZXR1cm4gYn1mdW5jdGlvbiBqbChhLGIpe2lmKCFiKXJldHVybiBiO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGFbY10mJlliW2NdJiYhdmRbU3RyaW5nKFliW2NdW3hiLnViXSldKXJldHVybiEwO3JldHVybiExfXZhciBsbD1mdW5jdGlvbihhLGIpe3RoaXMuZXZlbnRJZD1hO3RoaXMucHJpb3JpdHlJZD1iO3RoaXMuZXZlbnRNb2RlbD17fTt0aGlzLnRhcmdldENvbmZpZz17fTt0aGlzLmNvbnRhaW5lckNvbmZpZz17fTt0aGlzLmdsb2JhbENvbmZpZz17fTt0aGlzLmRhdGFMYXllckNvbmZpZz17fTt0aGlzLnJlbW90ZUNvbmZpZz17fTt0aGlzLmV2ZW50TWV0YWRhdGE9e307dGhpcy5vblN1Y2Nlc3M9ZnVuY3Rpb24oKXt9O3RoaXMub25GYWlsdXJlPWZ1bmN0aW9uKCl7fTt0aGlzLnNldENvbnRhaW5lclR5cGVMb2FkZWQ9ZnVuY3Rpb24oKXt9O3RoaXMuZ2V0Q29udGFpbmVyVHlwZUxvYWRlZD1mdW5jdGlvbigpe307dGhpcy5pc0d0bUV2ZW50PSExfSxtbD1mdW5jdGlvbihhLGIpe2EuZXZlbnRNb2RlbD1iO3JldHVybiBhfSxubD1mdW5jdGlvbihhLGIpe2EudGFyZ2V0Q29uZmlnPWI7cmV0dXJuIGF9LG9sPWZ1bmN0aW9uKGEsYil7YS5jb250YWluZXJDb25maWc9YjtyZXR1cm4gYX0scGw9ZnVuY3Rpb24oYSwKYil7YS5nbG9iYWxDb25maWc9YjtyZXR1cm4gYX0scWw9ZnVuY3Rpb24oYSxiKXthLmRhdGFMYXllckNvbmZpZz1iO3JldHVybiBhfSxybD1mdW5jdGlvbihhLGIpe2EucmVtb3RlQ29uZmlnPWI7cmV0dXJuIGF9LHNsPWZ1bmN0aW9uKGEsYil7YS5ldmVudE1ldGFkYXRhPWJ8fHt9O3JldHVybiBhfSx0bD1mdW5jdGlvbihhLGIpe2Eub25TdWNjZXNzPWI7cmV0dXJuIGF9LHVsPWZ1bmN0aW9uKGEsYil7YS5zZXRDb250YWluZXJUeXBlTG9hZGVkPWI7cmV0dXJuIGF9LHZsPWZ1bmN0aW9uKGEsYil7YS5nZXRDb250YWluZXJUeXBlTG9hZGVkPWI7cmV0dXJuIGF9LHdsPWZ1bmN0aW9uKGEsYil7YS5vbkZhaWx1cmU9YjtyZXR1cm4gYX07CmxsLnByb3RvdHlwZS5nZXRXaXRoQ29uZmlnPWZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PXRoaXMuZXZlbnRNb2RlbFthXSlyZXR1cm4gdGhpcy5ldmVudE1vZGVsW2FdO2lmKHZvaWQgMCE9PXRoaXMudGFyZ2V0Q29uZmlnW2FdKXJldHVybiB0aGlzLnRhcmdldENvbmZpZ1thXTtpZih2b2lkIDAhPT10aGlzLmNvbnRhaW5lckNvbmZpZ1thXSlyZXR1cm4gdGhpcy5jb250YWluZXJDb25maWdbYV07eGwodGhpcyx0aGlzLmdsb2JhbENvbmZpZ1thXSx0aGlzLmRhdGFMYXllckNvbmZpZ1thXSkmJihRKDcxKSxRKDc5KSk7aWYodm9pZCAwIT09CnRoaXMuZ2xvYmFsQ29uZmlnW2FdKXJldHVybiB0aGlzLmdsb2JhbENvbmZpZ1thXTtpZih2b2lkIDAhPT10aGlzLnJlbW90ZUNvbmZpZ1thXSlyZXR1cm4gdGhpcy5yZW1vdGVDb25maWdbYV19OwpsbC5wcm90b3R5cGUuZ2V0VG9wTGV2ZWxLZXlzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShmKXtmb3IodmFyIGc9T2JqZWN0LmtleXMoZiksbD0wO2w8Zy5sZW5ndGg7KytsKWJbZ1tsXV09MX12YXIgYj17fTthKHRoaXMuZXZlbnRNb2RlbCk7YSh0aGlzLnRhcmdldENvbmZpZyk7YSh0aGlzLmNvbnRhaW5lckNvbmZpZyk7YSh0aGlzLmdsb2JhbENvbmZpZyk7Zm9yKHZhciBjPU9iamVjdC5rZXlzKHRoaXMuZGF0YUxheWVyQ29uZmlnKSxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07aWYoImV2ZW50IiE9PWUmJiJndG0iIT09ZSYmInRhZ1R5cGVCbGFja2xpc3QiIT09ZSYmIWIuaGFzT3duUHJvcGVydHkoZSkpe1EoNzEpO1EoODApO2JyZWFrfX0KcmV0dXJuIE9iamVjdC5rZXlzKGIpfTsKbGwucHJvdG90eXBlLmdldE1lcmdlZFZhbHVlcz1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMobCl7dmIobCkmJkIobCxmdW5jdGlvbihtLG4pe2U9ITA7ZFttXT1ufSl9dmFyIGQ9e30sZT0hMTtiJiYxIT09Ynx8KGModGhpcy5yZW1vdGVDb25maWdbYV0pLGModGhpcy5nbG9iYWxDb25maWdbYV0pLGModGhpcy5jb250YWluZXJDb25maWdbYV0pLGModGhpcy50YXJnZXRDb25maWdbYV0pKTtiJiYyIT09Ynx8Yyh0aGlzLmV2ZW50TW9kZWxbYV0pO3ZhciBmPWUsZz1kO2Q9e307ZT0hMTtiJiYxIT09Ynx8KGModGhpcy5yZW1vdGVDb25maWdbYV0pLGModGhpcy5kYXRhTGF5ZXJDb25maWdbYV0pLGModGhpcy5jb250YWluZXJDb25maWdbYV0pLGModGhpcy50YXJnZXRDb25maWdbYV0pKTtiJiYyIT09CmJ8fGModGhpcy5ldmVudE1vZGVsW2FdKTtpZihlIT09Znx8eGwodGhpcyxkLGcpKVEoNzEpLFEoODEpO2U9ZjtkPWc7cmV0dXJuIGU/ZDp2b2lkIDB9OwpsbC5wcm90b3R5cGUuZ2V0S2V5c0Zyb21GaXJzdE9mQW55U2NvcGU9ZnVuY3Rpb24oYSl7dmFyIGI9e30sYz0hMSxkPWZ1bmN0aW9uKGcpe2Zvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKXZvaWQgMCE9PWdbYVtsXV0mJihiW2FbbF1dPWdbYVtsXV0sYz0hMCk7cmV0dXJuIGN9O2lmKGQodGhpcy5ldmVudE1vZGVsKXx8ZCh0aGlzLnRhcmdldENvbmZpZyl8fGQodGhpcy5jb250YWluZXJDb25maWcpKXJldHVybiBiO2QodGhpcy5nbG9iYWxDb25maWcpO3ZhciBlPWIsZj1jO2I9e307Yz0hMTtkKHRoaXMuZGF0YUxheWVyQ29uZmlnKTt4bCh0aGlzLGIsZSkmJihRKDcxKSxRKDgyKSk7Yj1lO2M9ZjsKaWYoYylyZXR1cm4gYjtkKHRoaXMucmVtb3RlQ29uZmlnKTtyZXR1cm4gYn07CnZhciB4bD1mdW5jdGlvbihhLGIsYyl7dHJ5e2lmKGI9PT1jKXJldHVybiExO3ZhciBkPXRiKGIpO2lmKGQhPT10YihjKXx8ISh2YihiKSYmdmIoYyl8fCJhcnJheSI9PT1kKSlyZXR1cm4hMDtpZigiYXJyYXkiPT09ZCl7aWYoYi5sZW5ndGghPT1jLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKylpZih4bChhLGJbZV0sY1tlXSkpcmV0dXJuITB9ZWxzZXtmb3IodmFyIGYgaW4gYylpZighYi5oYXNPd25Qcm9wZXJ0eShmKSlyZXR1cm4hMDtmb3IodmFyIGcgaW4gYilpZighYy5oYXNPd25Qcm9wZXJ0eShnKXx8eGwoYSxiW2ddLGNbZ10pKXJldHVybiEwfX1jYXRjaChsKXtRKDcyKX0KcmV0dXJuITF9O3ZhciB5bD1mdW5jdGlvbigpe1UuZGVkdXBlX2djbGlkfHwoVS5kZWR1cGVfZ2NsaWQ9IiIrWmYoKSk7cmV0dXJuIFUuZGVkdXBlX2djbGlkfTtmdW5jdGlvbiB6bChhLGIpe2lmKCIiPT09YSlyZXR1cm4gYjt2YXIgYz1OdW1iZXIoYSk7cmV0dXJuIGlzTmFOKGMpP2I6Y307dmFyIEFsPWZ1bmN0aW9uKCl7fTt2YXIgQmw9ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5hZGR0bENvbnNlbnQmJiJzdHJpbmciIT09dHlwZW9mIGEuYWRkdGxDb25zZW50JiYoYS5hZGR0bENvbnNlbnQ9dm9pZCAwKTt2b2lkIDAhPT1hLmdkcHJBcHBsaWVzJiYiYm9vbGVhbiIhPT10eXBlb2YgYS5nZHByQXBwbGllcyYmKGEuZ2RwckFwcGxpZXM9dm9pZCAwKTtyZXR1cm4gdm9pZCAwIT09YS50Y1N0cmluZyYmInN0cmluZyIhPT10eXBlb2YgYS50Y1N0cmluZ3x8dm9pZCAwIT09YS5saXN0ZW5lcklkJiYibnVtYmVyIiE9PXR5cGVvZiBhLmxpc3RlbmVySWQ/MjphLmNtcFN0YXR1cyYmImVycm9yIiE9PWEuY21wU3RhdHVzPzA6M30sQ2w9ZnVuY3Rpb24oYSxiLGMpe3RoaXMubz1hO3RoaXMuZz1udWxsO3RoaXMuST17fTt0aGlzLk5hPTA7dGhpcy5YPXZvaWQgMD09PWI/NTAwOmI7dGhpcy5DPXZvaWQgMD09PWM/ITE6Yzt0aGlzLnM9bnVsbH07a2EoQ2wsQWwpOwpDbC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9e2ludGVybmFsQmxvY2tPbkVycm9yczp0aGlzLkN9LGQ9V2UoZnVuY3Rpb24oKXtyZXR1cm4gYShjKX0pLGU9MDstMSE9PXRoaXMuWCYmKGU9c2V0VGltZW91dChmdW5jdGlvbigpe2MudGNTdHJpbmc9InRjdW5hdmFpbGFibGUiO2MuaW50ZXJuYWxFcnJvclN0YXRlPTE7ZCgpfSx0aGlzLlgpKTt2YXIgZj1mdW5jdGlvbihnLGwpe2NsZWFyVGltZW91dChlKTtnPyhjPWcsYy5pbnRlcm5hbEVycm9yU3RhdGU9QmwoYyksYy5pbnRlcm5hbEJsb2NrT25FcnJvcnM9Yi5DLGwmJjA9PT1jLmludGVybmFsRXJyb3JTdGF0ZXx8KGMudGNTdHJpbmc9InRjdW5hdmFpbGFibGUiLGx8fChjLmludGVybmFsRXJyb3JTdGF0ZT0zKSkpOihjLnRjU3RyaW5nPSJ0Y3VuYXZhaWxhYmxlIixjLmludGVybmFsRXJyb3JTdGF0ZT0zKTthKGMpfTt0cnl7RGwodGhpcywiYWRkRXZlbnRMaXN0ZW5lciIsZil9Y2F0Y2goZyl7Yy50Y1N0cmluZz0KInRjdW5hdmFpbGFibGUiLGMuaW50ZXJuYWxFcnJvclN0YXRlPTMsZSYmKGNsZWFyVGltZW91dChlKSxlPTApLGQoKX19O0NsLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEpe2EmJmEubGlzdGVuZXJJZCYmRGwodGhpcywicmVtb3ZlRXZlbnRMaXN0ZW5lciIsbnVsbCxhLmxpc3RlbmVySWQpfTsKdmFyIEZsPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDtkPXZvaWQgMD09PWQ/Ijc1NSI6ZDt2YXIgZTthOntpZihhLnB1Ymxpc2hlciYmYS5wdWJsaXNoZXIucmVzdHJpY3Rpb25zKXt2YXIgZj1hLnB1Ymxpc2hlci5yZXN0cmljdGlvbnNbYl07aWYodm9pZCAwIT09Zil7ZT1mW3ZvaWQgMD09PWQ/Ijc1NSI6ZF07YnJlYWsgYX19ZT12b2lkIDB9dmFyIGc9ZTtpZigwPT09ZylyZXR1cm4hMTt2YXIgbD1jOzI9PT1jPyhsPTAsMj09PWcmJihsPTEpKTozPT09YyYmKGw9MSwxPT09ZyYmKGw9MCkpO3ZhciBtO2lmKDA9PT1sKWlmKGEucHVycG9zZSYmYS52ZW5kb3Ipe3ZhciBuPUVsKGEudmVuZG9yLmNvbnNlbnRzLHZvaWQgMD09PWQ/Ijc1NSI6ZCk7bT1uJiYiMSI9PT1iJiZhLnB1cnBvc2VPbmVUcmVhdG1lbnQmJiJDSCI9PT1hLnB1Ymxpc2hlckNDPyEwOm4mJkVsKGEucHVycG9zZS5jb25zZW50cyxiKX1lbHNlIG09ITA7ZWxzZSBtPTE9PT1sP2EucHVycG9zZSYmYS52ZW5kb3I/RWwoYS5wdXJwb3NlLmxlZ2l0aW1hdGVJbnRlcmVzdHMsCmIpJiZFbChhLnZlbmRvci5sZWdpdGltYXRlSW50ZXJlc3RzLHZvaWQgMD09PWQ/Ijc1NSI6ZCk6ITA6ITA7cmV0dXJuIG19LEVsPWZ1bmN0aW9uKGEsYil7cmV0dXJuISghYXx8IWFbYl0pfSxEbD1mdW5jdGlvbihhLGIsYyxkKXtjfHwoYz1mdW5jdGlvbigpe30pO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYS5vLl9fdGNmYXBpKXt2YXIgZT1hLm8uX190Y2ZhcGk7ZShiLDIsYyxkKX1lbHNlIGlmKEdsKGEpKXtIbChhKTt2YXIgZj0rK2EuTmE7YS5JW2ZdPWM7aWYoYS5nKXt2YXIgZz17fTthLmcucG9zdE1lc3NhZ2UoKGcuX190Y2ZhcGlDYWxsPXtjb21tYW5kOmIsdmVyc2lvbjoyLGNhbGxJZDpmLHBhcmFtZXRlcjpkfSxnKSwiKiIpfX1lbHNlIGMoe30sITEpfSxHbD1mdW5jdGlvbihhKXtpZihhLmcpcmV0dXJuIGEuZzt2YXIgYjthOntmb3IodmFyIGM9YS5vLGQ9MDs1MD5kOysrZCl7dmFyIGU7dHJ5e2U9ISghYy5mcmFtZXN8fCFjLmZyYW1lcy5fX3RjZmFwaUxvY2F0b3IpfWNhdGNoKGwpe2U9CiExfWlmKGUpe2I9YzticmVhayBhfXZhciBmO2I6e3RyeXt2YXIgZz1jLnBhcmVudDtpZihnJiZnIT1jKXtmPWc7YnJlYWsgYn19Y2F0Y2gobCl7fWY9bnVsbH1pZighKGM9ZikpYnJlYWt9Yj1udWxsfWEuZz1iO3JldHVybiBhLmd9LEhsPWZ1bmN0aW9uKGEpe2Euc3x8KGEucz1mdW5jdGlvbihiKXt0cnl7dmFyIGM7Yz0oInN0cmluZyI9PT10eXBlb2YgYi5kYXRhP0pTT04ucGFyc2UoYi5kYXRhKTpiLmRhdGEpLl9fdGNmYXBpUmV0dXJuO2EuSVtjLmNhbGxJZF0oYy5yZXR1cm5WYWx1ZSxjLnN1Y2Nlc3MpfWNhdGNoKGQpe319LFhlKGEubyxhLnMpKX07dmFyIElsPSEwO0lsPSExO3ZhciBKbD17MTowLDM6MCw0OjAsNzozLDk6MywxMDozfSxLbD16bCgiIiw1NTApLExsPXpsKCIiLDUwMCk7ZnVuY3Rpb24gTWwoKXt2YXIgYT1VLnRjZnx8e307cmV0dXJuIFUudGNmPWF9CnZhciBSbD1mdW5jdGlvbigpe3ZhciBhPU1sKCksYj1uZXcgQ2woRyxJbD8zRTM6LTEpO2lmKCEwPT09Ry5ndGFnX2VuYWJsZV90Y2Zfc3VwcG9ydCYmIWEuYWN0aXZlJiYoImZ1bmN0aW9uIj09PXR5cGVvZiBHLl9fdGNmYXBpfHwiZnVuY3Rpb24iPT09dHlwZW9mIGIuby5fX3RjZmFwaXx8bnVsbCE9R2woYikpKXthLmFjdGl2ZT0hMDthLlFjPXt9O05sKCk7dmFyIGM9bnVsbDtJbD9jPUcuc2V0VGltZW91dChmdW5jdGlvbigpe09sKGEpO1BsKGEpO2M9bnVsbH0sTGwpOmEudGNTdHJpbmc9InRjdW5hdmFpbGFibGUiO3RyeXtiLmFkZEV2ZW50TGlzdGVuZXIoZnVuY3Rpb24oZCl7YyYmKGNsZWFyVGltZW91dChjKSxjPW51bGwpO2lmKDAhPT1kLmludGVybmFsRXJyb3JTdGF0ZSlPbChhKSxQbChhKTtlbHNle3ZhciBlO2EuZ2RwckFwcGxpZXM9ZC5nZHByQXBwbGllcztpZighMT09PWQuZ2RwckFwcGxpZXMpZT1RbCgpLGIucmVtb3ZlRXZlbnRMaXN0ZW5lcihkKTtlbHNlIGlmKCJ0Y2xvYWRlZCI9PT0KZC5ldmVudFN0YXR1c3x8InVzZXJhY3Rpb25jb21wbGV0ZSI9PT1kLmV2ZW50U3RhdHVzfHwiY21wdWlzaG93biI9PT1kLmV2ZW50U3RhdHVzKXt2YXIgZj17fSxnO2ZvcihnIGluIEpsKWlmKEpsLmhhc093blByb3BlcnR5KGcpKWlmKCIxIj09PWcpe3ZhciBsPWQsbT0hMDttPXZvaWQgMD09PW0/ITE6bTt2YXIgbjt2YXIgcD1sOyExPT09cC5nZHByQXBwbGllcz9uPSEwOih2b2lkIDA9PT1wLmludGVybmFsRXJyb3JTdGF0ZSYmKHAuaW50ZXJuYWxFcnJvclN0YXRlPUJsKHApKSxuPSJlcnJvciI9PT1wLmNtcFN0YXR1c3x8MCE9PXAuaW50ZXJuYWxFcnJvclN0YXRlPyFwLmludGVybmFsQmxvY2tPbkVycm9yczoibG9hZGVkIiE9PXAuY21wU3RhdHVzfHwidGNsb2FkZWQiIT09cC5ldmVudFN0YXR1cyYmInVzZXJhY3Rpb25jb21wbGV0ZSIhPT1wLmV2ZW50U3RhdHVzPyExOiEwKTtmWyIxIl09bj8hMT09PWwuZ2RwckFwcGxpZXN8fCJ0Y3VuYXZhaWxhYmxlIj09PWwudGNTdHJpbmd8fAp2b2lkIDA9PT1sLmdkcHJBcHBsaWVzJiYhbXx8InN0cmluZyIhPT10eXBlb2YgbC50Y1N0cmluZ3x8IWwudGNTdHJpbmcubGVuZ3RoPyEwOkZsKGwsIjEiLDApOiExfWVsc2UgZltnXT1GbChkLGcsSmxbZ10pO2U9Zn1lJiYoYS50Y1N0cmluZz1kLnRjU3RyaW5nfHwidGNlbXB0eSIsYS5RYz1lLFBsKGEpKX19KX1jYXRjaChkKXtjJiYoY2xlYXJUaW1lb3V0KGMpLGM9bnVsbCksT2woYSksUGwoYSl9fX07ZnVuY3Rpb24gT2woYSl7YS50eXBlPSJlIjthLnRjU3RyaW5nPSJ0Y3VuYXZhaWxhYmxlIjtJbCYmKGEuUWM9UWwoKSl9ZnVuY3Rpb24gTmwoKXt2YXIgYT17fSxiPShhLmFkX3N0b3JhZ2U9ImRlbmllZCIsYS53YWl0X2Zvcl91cGRhdGU9S2wsYSk7QWYoYil9ZnVuY3Rpb24gUWwoKXt2YXIgYT17fSxiO2ZvcihiIGluIEpsKUpsLmhhc093blByb3BlcnR5KGIpJiYoYVtiXT0hMCk7cmV0dXJuIGF9CmZ1bmN0aW9uIFBsKGEpe3ZhciBiPXt9LGM9KGIuYWRfc3RvcmFnZT1hLlFjWyIxIl0/ImdyYW50ZWQiOiJkZW5pZWQiLGIpO0NmKGMse2V2ZW50SWQ6MH0se2dkcHJBcHBsaWVzOmE/YS5nZHByQXBwbGllczp2b2lkIDAsdGNTdHJpbmc6U2woKX0pfXZhciBTbD1mdW5jdGlvbigpe3ZhciBhPU1sKCk7cmV0dXJuIGEuYWN0aXZlP2EudGNTdHJpbmd8fCIiOiIifSxUbD1mdW5jdGlvbigpe3ZhciBhPU1sKCk7cmV0dXJuIGEuYWN0aXZlJiZ2b2lkIDAhPT1hLmdkcHJBcHBsaWVzP2EuZ2RwckFwcGxpZXM/IjEiOiIwIjoiIn0sVWw9ZnVuY3Rpb24oYSl7aWYoIUpsLmhhc093blByb3BlcnR5KFN0cmluZyhhKSkpcmV0dXJuITA7dmFyIGI9TWwoKTtyZXR1cm4gYi5hY3RpdmUmJmIuUWM/ISFiLlFjW1N0cmluZyhhKV06ITB9Owp2YXIgYW09ZnVuY3Rpb24oYSxiLGMpe2lmKEdbYS5mdW5jdGlvbk5hbWVdKXJldHVybiBiLmpmJiZKKGIuamYpLEdbYS5mdW5jdGlvbk5hbWVdO3ZhciBkPSRsKCk7R1thLmZ1bmN0aW9uTmFtZV09ZDtpZihhLktkKWZvcih2YXIgZT0wO2U8YS5LZC5sZW5ndGg7ZSsrKUdbYS5LZFtlXV09R1thLktkW2VdXXx8JGwoKTthLlZkJiZ2b2lkIDA9PT1HW2EuVmRdJiYoR1thLlZkXT1jKTtmYihFaygiaHR0cHM6Ly8iLCJodHRwOi8vIixhLnNmKSxiLmpmLGIubWopO3JldHVybiBkfSwkbD1mdW5jdGlvbigpe3ZhciBhPWZ1bmN0aW9uKCl7YS5xPWEucXx8W107YS5xLnB1c2goYXJndW1lbnRzKX07cmV0dXJuIGF9LGJtPXtmdW5jdGlvbk5hbWU6Il9nb29nV2NtSW1wbCIsVmQ6Il9nb29nV2NtQWsiLHNmOiJ3d3cuZ3N0YXRpYy5jb20vd2NtL2xvYWRlci5qcyJ9LGNtPXtmdW5jdGlvbk5hbWU6Il9nYVBob25lSW1wbCIsVmQ6ImdhX3dwaWQiLHNmOiJ3d3cuZ3N0YXRpYy5jb20vZ2FwaG9uZS9sb2FkZXIuanMifSwKZG09e3doOiIiLHNpOiI1In0sZW09e2Z1bmN0aW9uTmFtZToiX2dvb2dDYWxsVHJhY2tpbmdJbXBsIixLZDpbY20uZnVuY3Rpb25OYW1lLGJtLmZ1bmN0aW9uTmFtZV0sc2Y6Ind3dy5nc3RhdGljLmNvbS9jYWxsLXRyYWNraW5nL2NhbGwtdHJhY2tpbmdfIisoZG0ud2h8fGRtLnNpKSsiLmpzIn0sZm09e30sZ209ZnVuY3Rpb24oYSxiLGMsZCl7USgyMik7aWYoYyl7ZD1kfHx7fTt2YXIgZT1hbShibSxkLGEpLGY9e2FrOmEsY2w6Yn07dm9pZCAwPT09ZC5VYSYmKGYuYXV0b3JlcGxhY2U9Yyk7ZSgyLGQuVWEsZixjLDAsQ2EoKSxkLm9wdGlvbnMpfX0saG09ZnVuY3Rpb24oYSxiLGMsZCl7USgyMSk7aWYoYiYmYyl7ZD1kfHx7fTtmb3IodmFyIGU9e2NvdW50cnlOYW1lQ29kZTpjLGRlc3RpbmF0aW9uTnVtYmVyOmIscmV0cmlldmFsVGltZTpDYSgpfSxmPTA7ZjxhLmxlbmd0aDtmKyspe3ZhciBnPWFbZl07Zm1bZy5pZF18fAooZyYmIkFXIj09PWcucHJlZml4JiYhZS5hZERhdGEmJjI8PWcuSi5sZW5ndGg/KGUuYWREYXRhPXthazpnLkpbMF0sY2w6Zy5KWzFdfSxmbVtnLmlkXT0hMCk6ZyYmIlVBIj09PWcucHJlZml4JiYhZS5nYURhdGEmJihlLmdhRGF0YT17Z2FXcGlkOmcuY29udGFpbmVySWR9LGZtW2cuaWRdPSEwKSl9KGUuZ2FEYXRhfHxlLmFkRGF0YSkmJmFtKGVtLGQpKGQuVWEsZSxkLm9wdGlvbnMpfX0saW09ZnVuY3Rpb24oKXt2YXIgYT0hMTtyZXR1cm4gYX0sam09ZnVuY3Rpb24oYSxiKXtpZihhKWlmKFJoKCkpe31lbHNle2lmKGsoYSkpe3ZhciBjPQpTZShhKTtpZighYylyZXR1cm47YT1jfXZhciBkPXZvaWQgMCxlPSExLGY9Yi5nZXRXaXRoQ29uZmlnKFQuWGgpO2lmKGYmJnJhKGYpKXtkPVtdO2Zvcih2YXIgZz0wO2c8Zi5sZW5ndGg7ZysrKXt2YXIgbD1TZShmW2ddKTtsJiYoZC5wdXNoKGwpLChhLmlkPT09bC5pZHx8YS5pZD09PWEuY29udGFpbmVySWQmJmEuY29udGFpbmVySWQ9PT1sLmNvbnRhaW5lcklkKSYmKGU9ITApKX19aWYoIWR8fGUpe3ZhciBtPWIuZ2V0V2l0aENvbmZpZyhULldmKSxuO2lmKG0pe3JhKG0pP249bTpuPVttXTt2YXIgcD1iLmdldFdpdGhDb25maWcoVC5VZikscT1iLmdldFdpdGhDb25maWcoVC5WZikscj1iLmdldFdpdGhDb25maWcoVC5YZiksdD1iLmdldFdpdGhDb25maWcoVC5XaCksdT1wfHxxLHY9MTsiVUEiIT09YS5wcmVmaXh8fGR8fCh2PTUpO2Zvcih2YXIgeD0wO3g8bi5sZW5ndGg7eCsrKWlmKHg8dilpZihkKWhtKGQsblt4XSx0LHtVYTp1LG9wdGlvbnM6cn0pO2Vsc2UgaWYoIkFXIj09PWEucHJlZml4JiYKYS5KWzFdKWltKCk/aG0oW2FdLG5beF0sdHx8IlVTIix7VWE6dSxvcHRpb25zOnJ9KTpnbShhLkpbMF0sYS5KWzFdLG5beF0se1VhOnUsb3B0aW9uczpyfSk7ZWxzZSBpZigiVUEiPT09YS5wcmVmaXgpaWYoaW0oKSlobShbYV0sblt4XSx0fHwiVVMiLHtVYTp1fSk7ZWxzZXt2YXIgeT1hLmNvbnRhaW5lcklkLHc9blt4XSxBPXtVYTp1fTtRKDIzKTtpZih3KXtBPUF8fHt9O3ZhciB6PWFtKGNtLEEseSksQz17fTt2b2lkIDAhPT1BLlVhP0MucmVjZWl2ZXI9QS5VYTpDLnJlcGxhY2U9dztDLmdhX3dwaWQ9eTtDLmRlc3RpbmF0aW9uPXc7eigyLENhKCksQyl9fX19fX07ZnVuY3Rpb24gcm0oKXtyZXR1cm4iYXR0cmlidXRpb24tcmVwb3J0aW5nIn1mdW5jdGlvbiBzbShhKXt2YXIgYjtiPXZvaWQgMD09PWI/ZG9jdW1lbnQ6Yjt2YXIgYztyZXR1cm4hKG51bGw9PShjPWIuZmVhdHVyZVBvbGljeSl8fCFjLmFsbG93ZWRGZWF0dXJlcygpLmluY2x1ZGVzKGEpKX07dmFyIHRtPSExO2Z1bmN0aW9uIHVtKCl7aWYoc20oImpvaW4tYWQtaW50ZXJlc3QtZ3JvdXAiKSYmcGEoWmEuam9pbkFkSW50ZXJlc3RHcm91cCkpcmV0dXJuITA7dG18fCgkZSgnQTl3a3J2cDl5MjFrMzBVOWxVN01KTWpCajRVU2pMckd3VitaOHpPM0ozWkJIMTM5RE9uQ3YzWExLMklpNDBTOTRIRzFTWi9aZWcyR1NIT0Qzd2xXbmdZQUFBQjdleUp2Y21sbmFXNGlPaUpvZEhSd2N6b3ZMM2QzZHk1bmIyOW5iR1YwWVdkdFlXNWhaMlZ5TG1OdmJUbzBORE1pTENKbVpXRjBkWEpsSWpvaVVISnBkbUZqZVZOaGJtUmliM2hCWkhOQlVFbHpJaXdpWlhod2FYSjVJam94TmpZeE1qazVNVGs1TENKcGMxUm9hWEprVUdGeWRIa2lPblJ5ZFdWOScpLHRtPSEwKTtyZXR1cm4gc20oImpvaW4tYWQtaW50ZXJlc3QtZ3JvdXAiKSYmcGEoWmEuam9pbkFkSW50ZXJlc3RHcm91cCl9CmZ1bmN0aW9uIHZtKGEsYil7dmFyIGM9dm9pZCAwO3RyeXtjPUgucXVlcnlTZWxlY3RvcignaWZyYW1lW2RhdGEtdGFnZ2luZy1pZD0iJytiKyciXScpfWNhdGNoKGUpe31pZihjKXt2YXIgZD1OdW1iZXIoYy5kYXRhc2V0LmxvYWRUaW1lKTtpZihkJiY2RTQ+RGEoKS1kKXtSYygiVEFHR0lORyIsOSk7cmV0dXJufX1lbHNlIHRyeXtpZig1MDw9SC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWVbYWxsb3c9ImpvaW4tYWQtaW50ZXJlc3QtZ3JvdXAiXVtkYXRhLXRhZ2dpbmctaWQqPSItIl0nKS5sZW5ndGgpe1JjKCJUQUdHSU5HIiwxMCk7cmV0dXJufX1jYXRjaChlKXt9aGIoYSx2b2lkIDAse2FsbG93OiJqb2luLWFkLWludGVyZXN0LWdyb3VwIn0se3RhZ2dpbmdJZDpiLGxvYWRUaW1lOkRhKCl9LGMpfTt2YXIgU209ZnVuY3Rpb24oYSxiLGMpe3RoaXMuQz1hO3RoaXMuZXZlbnROYW1lPWI7dGhpcy5nPWM7dGhpcy5vPXt9O3RoaXMubWV0YWRhdGE9TihjLmV2ZW50TWV0YWRhdGF8fHt9KTt0aGlzLnM9ITF9LFRtPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmcuZ2V0V2l0aENvbmZpZyhiKTt2b2lkIDAhPT1kP2Eub1tiXT1kOnZvaWQgMCE9PWMmJihhLm9bYl09Yyl9LFVtPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1UZChhLkMpO3JldHVybiBkJiZkLmhhc093blByb3BlcnR5KGIpP2RbYl06Y307ZnVuY3Rpb24gVm0oYSl7cmV0dXJue2dldERlc3RpbmF0aW9uSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5DfSxnZXRFdmVudE5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gYS5ldmVudE5hbWV9LHNldEV2ZW50TmFtZTpmdW5jdGlvbihiKXtyZXR1cm4gdm9pZChhLmV2ZW50TmFtZT1iKX0sZ2V0SGl0RGF0YTpmdW5jdGlvbihiKXtyZXR1cm4gYS5vW2JdfSxzZXRIaXREYXRhOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIHZvaWQoYS5vW2JdPWMpfSxzZXRIaXREYXRhSWZOb3REZWZpbmVkOmZ1bmN0aW9uKGIsYyl7dm9pZCAwPT09YS5vW2JdJiYoYS5vW2JdPWMpfSxjb3B5VG9IaXREYXRhOmZ1bmN0aW9uKGIsYyl7VG0oYSxiLGMpfSxnZXRNZXRhZGF0YTpmdW5jdGlvbihiKXtyZXR1cm4gYS5tZXRhZGF0YVtiXX0sc2V0TWV0YWRhdGE6ZnVuY3Rpb24oYixjKXtyZXR1cm4gdm9pZChhLm1ldGFkYXRhW2JdPWMpfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiB2b2lkKGEucz0hMCl9LGdldFByb2Nlc3NlZEV2ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGF9fX0KO3ZhciBJbj1mdW5jdGlvbigpe3ZhciBhPSEwO1VsKDcpJiZVbCg5KSYmVWwoMTApfHwoYT0hMSk7cmV0dXJuIGF9LEpuPWZ1bmN0aW9uKCl7dmFyIGE9ITA7VWwoMykmJlVsKDQpfHwoYT0hMSk7cmV0dXJuIGF9Owp2YXIgTm49ZnVuY3Rpb24oYSxiKXtpZihiLmlzR3RtRXZlbnQpcmV0dXJuO3ZhciBjPWIuZ2V0V2l0aENvbmZpZyhULklhKSxkPWIuZ2V0V2l0aENvbmZpZyhULlFhKSxlPWIuZ2V0V2l0aENvbmZpZyhjKTtpZih2b2lkIDA9PT1lKXt2YXIgZj12b2lkIDA7S24uaGFzT3duUHJvcGVydHkoYyk/Zj1LbltjXTpMbi5oYXNPd25Qcm9wZXJ0eShjKSYmKGY9TG5bY10pOzE9PT1mJiYoZj1NbihjKSk7ayhmKT9paygpKGZ1bmN0aW9uKCl7dmFyIGc9aWsoKS5nZXRCeU5hbWUoYSkuZ2V0KGYpO2QoZyl9KTpkKHZvaWQgMCl9ZWxzZSBkKGUpO30sT249ZnVuY3Rpb24oYSxiKXt2YXIgYz1hW1Qud2NdLGQ9YisiLiIsZT1hW1QuTl18fCIiLGY9dm9pZCAwPT09Yz8hIWEudXNlX2FuY2hvcjoiZnJhZ21lbnQiPT09CmMsZz0hIWFbVC5TYl07ZT1TdHJpbmcoZSkucmVwbGFjZSgvXHMrL2csIiIpLnNwbGl0KCIsIik7dmFyIGw9aWsoKTtsKGQrInJlcXVpcmUiLCJsaW5rZXIiKTtsKGQrImxpbmtlcjphdXRvTGluayIsZSxmLGcpfSxTbj1mdW5jdGlvbihhLGIsYyl7aWYocWYoKSYmKCFjLmlzR3RtRXZlbnR8fCFQblthXSkpe3ZhciBkPSFEZihULk0pLGU9ZnVuY3Rpb24oZil7dmFyIGcsbCxtPWlrKCksbj1RbihiLCIiLGMpLHAscT1uLmNyZWF0ZU9ubHlGaWVsZHMuX3VzZVVwO2lmKGMuaXNHdG1FdmVudHx8Um4oYixuLmNyZWF0ZU9ubHlGaWVsZHMpKXtjLmlzR3RtRXZlbnQmJihnPSJndG0iK0ZkKCksbD1uLmNyZWF0ZU9ubHlGaWVsZHMsbi5ndG1UcmFja2VyTmFtZSYmKGwubmFtZT1nKSk7bShmdW5jdGlvbigpe3ZhciB0PW0uZ2V0QnlOYW1lKGIpO3QmJihwPXQuZ2V0KCJjbGllbnRJZCIpKTtjLmlzR3RtRXZlbnR8fG0ucmVtb3ZlKGIpfSk7bSgiY3JlYXRlIixhLGMuaXNHdG1FdmVudD9sOm4uY3JlYXRlT25seUZpZWxkcyk7CmQmJkRmKFQuTSkmJihkPSExLG0oZnVuY3Rpb24oKXt2YXIgdD1paygpLmdldEJ5TmFtZShjLmlzR3RtRXZlbnQ/ZzpiKTshdHx8dC5nZXQoImNsaWVudElkIik9PXAmJnF8fChjLmlzR3RtRXZlbnQ/KG4uZmllbGRzVG9TZXRbIiZnY3UiXT0iMSIsbi5maWVsZHNUb1NldFsiJmdjdXQiXT1ULmRlW2ZdKToobi5maWVsZHNUb1NlbmRbIiZnY3UiXT0iMSIsbi5maWVsZHNUb1NlbmRbIiZnY3V0Il09VC5kZVtmXSksdC5zZXQobi5maWVsZHNUb1NldCksYy5pc0d0bUV2ZW50P3Quc2VuZCgicGFnZXZpZXciKTp0LnNlbmQoInBhZ2V2aWV3IixuLmZpZWxkc1RvU2VuZCkpfSkpOwpjLmlzR3RtRXZlbnQmJm0oZnVuY3Rpb24oKXttLnJlbW92ZShnKX0pfX07RmYoZnVuY3Rpb24oKXtyZXR1cm4gZShULk0pfSxULk0pO0ZmKGZ1bmN0aW9uKCl7cmV0dXJuIGUoVC5EKX0sVC5EKTtjLmlzR3RtRXZlbnQmJihQblthXT0hMCl9fSxUbj1mdW5jdGlvbihhLGIpe0NrKCkmJmImJihhW1Quc2JdPWIpfSxibz1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZCgpe3ZhciBJPWMuZ2V0V2l0aENvbmZpZyhULlBiKTtsKGZ1bmN0aW9uKCl7aWYoIWMuaXNHdG1FdmVudCYmdmIoSSkpe3ZhciBNPXUuZmllbGRzVG9TZW5kLFA9bSgpLmdldEJ5TmFtZShuKSxPO2ZvcihPIGluIEkpaWYoSS5oYXNPd25Qcm9wZXJ0eShPKSYmL14oZGltZW5zaW9ufG1ldHJpYylcZCskLy50ZXN0KE8pJiZ2b2lkIDAhPUlbT10pe3ZhciBLPVAuZ2V0KE1uKElbT10pKTtVbihNLE8sSyl9fX0pfWZ1bmN0aW9uIGUoKXtpZih1LmRpc3BsYXlmZWF0dXJlcyl7dmFyIEk9Il9kY19ndG1fIitmLnJlcGxhY2UoL1teQS1aYS16MC05LV0vZywKIiIpO3AoInJlcXVpcmUiLCJkaXNwbGF5ZmVhdHVyZXMiLHZvaWQgMCx7Y29va2llTmFtZTpJfSl9fXZhciBmPWEsZz0iaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vYW5hbHl0aWNzLmpzIixsPWMuaXNHdG1FdmVudD9rayhjLmdldFdpdGhDb25maWcoImdhRnVuY3Rpb25OYW1lIikpOmtrKCk7aWYocGEobCkpe3ZhciBtPWlrLG47Yy5pc0d0bUV2ZW50P249Yy5nZXRXaXRoQ29uZmlnKCJuYW1lIil8fGMuZ2V0V2l0aENvbmZpZygiZ3RtVHJhY2tlck5hbWUiKTpuPSJndGFnXyIrZi5zcGxpdCgiLSIpLmpvaW4oIl8iKTt2YXIgcD1mdW5jdGlvbihJKXt2YXIgTT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtNWzBdPW4/bisiLiIrTVswXToiIitNWzBdO2wuYXBwbHkod2luZG93LE0pfSxxPWZ1bmN0aW9uKEkpe3ZhciBNPWZ1bmN0aW9uKFIsamEpe2Zvcih2YXIgb2E9MDtqYSYmb2E8amEubGVuZ3RoO29hKyspcChSLGphW29hXSl9LFA9Yy5pc0d0bUV2ZW50LE89UD9Wbih1KToKV24oYixjKTtpZihPKXt2YXIgSz17fTtUbihLLEkpO3AoInJlcXVpcmUiLCJlYyIsImVjLmpzIixLKTtQJiZPLlRlJiZwKCJzZXQiLCImY3UiLE8uVGUpO3ZhciBTPU8uYWN0aW9uO2lmKFB8fCJpbXByZXNzaW9ucyI9PT1TKWlmKE0oImVjOmFkZEltcHJlc3Npb24iLE8uVmcpLCFQKXJldHVybjtpZigicHJvbW9fY2xpY2siPT09U3x8InByb21vX3ZpZXciPT09U3x8UCYmTy5QYyl7dmFyIFc9Ty5QYztNKCJlYzphZGRQcm9tbyIsVyk7aWYoVyYmMDxXLmxlbmd0aCYmInByb21vX2NsaWNrIj09PVMpe1A/cCgiZWM6c2V0QWN0aW9uIixTLE8uaWIpOnAoImVjOnNldEFjdGlvbiIsUyk7cmV0dXJufWlmKCFQKXJldHVybn0icHJvbW9fdmlldyIhPT1TJiYiaW1wcmVzc2lvbnMiIT09UyYmKE0oImVjOmFkZFByb2R1Y3QiLE8uRWIpLHAoImVjOnNldEFjdGlvbiIsUyxPLmliKSl9fSxyPWZ1bmN0aW9uKEkpe2lmKEkpe3ZhciBNPXt9O2lmKHZiKEkpKWZvcih2YXIgUCBpbiBYbilYbi5oYXNPd25Qcm9wZXJ0eShQKSYmClluKFhuW1BdLFAsSVtQXSxNKTtUbihNLHkpO3AoInJlcXVpcmUiLCJsaW5raWQiLE0pfX0sdD1mdW5jdGlvbigpe2lmKFJoKCkpe31lbHNle3ZhciBJPWMuZ2V0V2l0aENvbmZpZyhULlZoKTtJJiYocCgicmVxdWlyZSIsSSx7ZGF0YUxheWVyOnNkLlp9KSxwKCJyZXF1aXJlIiwicmVuZGVyIikpfX0sdT1RbihuLGIsYyksdj1mdW5jdGlvbihJLE0sUCl7UCYmKE09IiIrTSk7dS5maWVsZHNUb1NlbmRbSV09TX07IWMuaXNHdG1FdmVudCYmUm4obix1LmNyZWF0ZU9ubHlGaWVsZHMpJiYobChmdW5jdGlvbigpe20oKSYmbSgpLnJlbW92ZShuKX0pLFpuW25dPSExKTtsKCJjcmVhdGUiLGYsdS5jcmVhdGVPbmx5RmllbGRzKTtpZih1LmNyZWF0ZU9ubHlGaWVsZHNbVC5zYl0mJiFjLmlzR3RtRXZlbnQpe3ZhciB4PUFrKHUuY3JlYXRlT25seUZpZWxkc1tULnNiXSwKIi9hbmFseXRpY3MuanMiKTt4JiYoZz14KX12YXIgeT1jLmlzR3RtRXZlbnQ/dS5maWVsZHNUb1NldFtULnNiXTp1LmNyZWF0ZU9ubHlGaWVsZHNbVC5zYl07aWYoeSl7dmFyIHc9Yy5pc0d0bUV2ZW50P3UuZmllbGRzVG9TZXRbVC5uZF06dS5jcmVhdGVPbmx5RmllbGRzW1QubmRdO3cmJiFabltuXSYmKFpuW25dPSEwLGwob2sobix3KSkpfWMuaXNHdG1FdmVudD91LmVuYWJsZVJlY2FwdGNoYSYmcCgicmVxdWlyZSIsInJlY2FwdGNoYSIsInJlY2FwdGNoYS5qcyIpOihkKCkscih1LmxpbmtBdHRyaWJ1dGlvbikpO3ZhciBBPXVbVC5rYV07QSYmQVtULk5dJiZPbihBLG4pO3AoInNldCIsdS5maWVsZHNUb1NldCk7aWYoYy5pc0d0bUV2ZW50KXtpZih1LmVuYWJsZUxpbmtJZCl7dmFyIHo9e307VG4oeix5KTtwKCJyZXF1aXJlIiwibGlua2lkIiwibGlua2lkLmpzIix6KX1xZigpJiZTbihmLG4sYyl9aWYoYj09PVQubWMpaWYoYy5pc0d0bUV2ZW50KXtlKCk7aWYodS5yZW1hcmtldGluZ0xpc3RzKXt2YXIgQz0KIl9kY19ndG1fIitmLnJlcGxhY2UoL1teQS1aYS16MC05LV0vZywiIik7cCgicmVxdWlyZSIsImFkZmVhdHVyZXMiLHtjb29raWVOYW1lOkN9KX1xKHkpO3AoInNlbmQiLCJwYWdldmlldyIpO3UuY3JlYXRlT25seUZpZWxkcy5fdXNlVXAmJmxrKG4rIi4iKX1lbHNlIHQoKSxwKCJzZW5kIiwicGFnZXZpZXciLHUuZmllbGRzVG9TZW5kKTtlbHNlIGI9PT1ULkFhPyh0KCksam0oZixjKSxjLmdldFdpdGhDb25maWcoVC5UYSkmJihBaChbImF3IiwiZGMiXSksbGsobisiLiIpKSwwIT11LnNlbmRQYWdlVmlldyYmcCgic2VuZCIsInBhZ2V2aWV3Iix1LmZpZWxkc1RvU2VuZCksU24oZixuLGMpKTpiPT09VC5HYT9ObihuLGMpOiJzY3JlZW5fdmlldyI9PT1iP3AoInNlbmQiLCJzY3JlZW52aWV3Iix1LmZpZWxkc1RvU2VuZCk6InRpbWluZ19jb21wbGV0ZSI9PT1iPyh1LmZpZWxkc1RvU2VuZC5oaXRUeXBlPSJ0aW1pbmciLHYoInRpbWluZ0NhdGVnb3J5Iix1LmV2ZW50Q2F0ZWdvcnksITApLApjLmlzR3RtRXZlbnQ/digidGltaW5nVmFyIix1LnRpbWluZ1ZhciwhMCk6digidGltaW5nVmFyIix1Lm5hbWUsITApLHYoInRpbWluZ1ZhbHVlIix4YSh1LnZhbHVlKSksdm9pZCAwIT09dS5ldmVudExhYmVsJiZ2KCJ0aW1pbmdMYWJlbCIsdS5ldmVudExhYmVsLCEwKSxwKCJzZW5kIix1LmZpZWxkc1RvU2VuZCkpOiJleGNlcHRpb24iPT09Yj9wKCJzZW5kIiwiZXhjZXB0aW9uIix1LmZpZWxkc1RvU2VuZCk6IiI9PT1iJiZjLmlzR3RtRXZlbnR8fCgidHJhY2tfc29jaWFsIj09PWImJmMuaXNHdG1FdmVudD8odS5maWVsZHNUb1NlbmQuaGl0VHlwZT0ic29jaWFsIix2KCJzb2NpYWxOZXR3b3JrIix1LnNvY2lhbE5ldHdvcmssITApLHYoInNvY2lhbEFjdGlvbiIsdS5zb2NpYWxBY3Rpb24sITApLHYoInNvY2lhbFRhcmdldCIsdS5zb2NpYWxUYXJnZXQsITApKTooKGMuaXNHdG1FdmVudHx8JG5bYl0pJiZxKHkpLGMuaXNHdG1FdmVudCYmZSgpLHUuZmllbGRzVG9TZW5kLmhpdFR5cGU9CiJldmVudCIsdigiZXZlbnRDYXRlZ29yeSIsdS5ldmVudENhdGVnb3J5LCEwKSx2KCJldmVudEFjdGlvbiIsdS5ldmVudEFjdGlvbnx8YiwhMCksdm9pZCAwIT09dS5ldmVudExhYmVsJiZ2KCJldmVudExhYmVsIix1LmV2ZW50TGFiZWwsITApLHZvaWQgMCE9PXUudmFsdWUmJnYoImV2ZW50VmFsdWUiLHhhKHUudmFsdWUpKSkscCgic2VuZCIsdS5maWVsZHNUb1NlbmQpKTt2YXIgRT0hMTt2YXIgRj1hbztFJiYoRj1jLmdldENvbnRhaW5lclR5cGVMb2FkZWQoIlVBIikpO2lmKCFGJiYhYy5pc0d0bUV2ZW50KXthbz0hMDtFJiZjLnNldENvbnRhaW5lclR5cGVMb2FkZWQoIlVBIiwhMCk7ZGsoKTt2YXIgRD1mdW5jdGlvbigpe0UmJgpjLnNldENvbnRhaW5lclR5cGVMb2FkZWQoIlVBIiwhMSk7Yy5vbkZhaWx1cmUoKX0sTD1mdW5jdGlvbigpe20oKS5sb2FkZWR8fEQoKX07UmgoKT9KKEwpOmZiKGcsTCxEKX19ZWxzZSBKKGMub25GYWlsdXJlKX0sY289ZnVuY3Rpb24oYSxiLGMsZCl7R2YoZnVuY3Rpb24oKXtibyhhLGIsZCl9LFtULk0sVC5EXSl9LGZvPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhmKXtmdW5jdGlvbiBnKHAscSl7Zm9yKHZhciByPTA7cjxxLmxlbmd0aDtyKyspe3ZhciB0PXFbcl07aWYoZlt0XSl7bVtwXT1mW3RdO2JyZWFrfX19ZnVuY3Rpb24gbCgpe2lmKGYuY2F0ZWdvcnkpbS5jYXRlZ29yeT1mLmNhdGVnb3J5O2Vsc2V7Zm9yKHZhciBwPSIiLHE9MDtxPGVvLmxlbmd0aDtxKyspdm9pZCAwIT09Zltlb1txXV0mJihwJiYocCs9Ii8iKSxwKz1mW2VvW3FdXSk7cCYmKG0uY2F0ZWdvcnk9cCl9fXZhciBtPU4oZiksbj0hMTtpZihufHxiKWcoImlkIixbImlkIiwiaXRlbV9pZCIsInByb21vdGlvbl9pZCJdKSxnKCJuYW1lIixbIm5hbWUiLCJpdGVtX25hbWUiLCJwcm9tb3Rpb25fbmFtZSJdKSxnKCJicmFuZCIsWyJicmFuZCIsIml0ZW1fYnJhbmQiXSksZygidmFyaWFudCIsWyJ2YXJpYW50IiwiaXRlbV92YXJpYW50Il0pLGcoImxpc3QiLFsibGlzdF9uYW1lIiwiaXRlbV9saXN0X25hbWUiXSksZygicG9zaXRpb24iLFsibGlzdF9wb3NpdGlvbiIsImNyZWF0aXZlX3Nsb3QiLCJpbmRleCJdKSxsKCk7ZygibGlzdFBvc2l0aW9uIixbImxpc3RfcG9zaXRpb24iXSk7ZygiY3JlYXRpdmUiLFsiY3JlYXRpdmVfbmFtZSJdKTtnKCJsaXN0IixbImxpc3RfbmFtZSJdKTtnKCJwb3NpdGlvbiIsWyJsaXN0X3Bvc2l0aW9uIiwiY3JlYXRpdmVfc2xvdCJdKTtyZXR1cm4gbX1iPXZvaWQgMD09PQpiPyExOmI7Zm9yKHZhciBkPVtdLGU9MDthJiZlPGEubGVuZ3RoO2UrKylhW2VdJiZ2YihhW2VdKSYmZC5wdXNoKGMoYVtlXSkpO3JldHVybiBkLmxlbmd0aD9kOnZvaWQgMH0sZ289ZnVuY3Rpb24oYSl7cmV0dXJuIERmKGEpfSxobz0hMTt2YXIgYW8sWm49e30sUG49e30saW89e30sS249T2JqZWN0LmZyZWV6ZSgoaW8uY2xpZW50X3N0b3JhZ2U9InN0b3JhZ2UiLGlvLnNhbXBsZV9yYXRlPTEsaW8uc2l0ZV9zcGVlZF9zYW1wbGVfcmF0ZT0xLGlvLnN0b3JlX2dhYz0xLGlvLnVzZV9hbXBfY2xpZW50X2lkPTEsaW9bVC5uYV09MSxpb1tULmlhXT0ic3RvcmVHYWMiLGlvW1QuamFdPTEsaW9bVC5vYV09MSxpb1tULkhhXT0xLGlvW1QuTmJdPTEsaW9bVC5aYV09MSxpb1tULnJiXT0xLGlvKSksam89e30sCmtvPU9iamVjdC5mcmVlemUoKGpvLl9jcz0xLGpvLl91c2VVcD0xLGpvLmFsbG93QW5jaG9yPTEsam8uYWxsb3dMaW5rZXI9MSxqby5hbHdheXNTZW5kUmVmZXJyZXI9MSxqby5jbGllbnRJZD0xLGpvLmNvb2tpZURvbWFpbj0xLGpvLmNvb2tpZUV4cGlyZXM9MSxqby5jb29raWVGbGFncz0xLGpvLmNvb2tpZU5hbWU9MSxqby5jb29raWVQYXRoPTEsam8uY29va2llVXBkYXRlPTEsam8ubGVnYWN5Q29va2llRG9tYWluPTEsam8ubGVnYWN5SGlzdG9yeUltcG9ydD0xLGpvLm5hbWU9MSxqby5zYW1wbGVSYXRlPTEsam8uc2l0ZVNwZWVkU2FtcGxlUmF0ZT0xLGpvLnN0b3JhZ2U9MSxqby5zdG9yZUdhYz0xLGpvLnVzZUFtcENsaWVudElkPTEsam8uX2NkMmw9MSxqbykpLGxvPU9iamVjdC5mcmVlemUoe2Fub255bWl6ZV9pcDoxfSksbW89e30sTG49T2JqZWN0LmZyZWV6ZSgobW8uY2FtcGFpZ249e2NvbnRlbnQ6ImNhbXBhaWduQ29udGVudCIsaWQ6ImNhbXBhaWduSWQiLG1lZGl1bToiY2FtcGFpZ25NZWRpdW0iLApuYW1lOiJjYW1wYWlnbk5hbWUiLHNvdXJjZToiY2FtcGFpZ25Tb3VyY2UiLHRlcm06ImNhbXBhaWduS2V5d29yZCJ9LG1vLmFwcF9pZD0xLG1vLmFwcF9pbnN0YWxsZXJfaWQ9MSxtby5hcHBfbmFtZT0xLG1vLmFwcF92ZXJzaW9uPTEsbW8uZGVzY3JpcHRpb249ImV4RGVzY3JpcHRpb24iLG1vLmZhdGFsPSJleEZhdGFsIixtby5sYW5ndWFnZT0xLG1vLnBhZ2VfaG9zdG5hbWU9Imhvc3RuYW1lIixtby50cmFuc3BvcnRfdHlwZT0idHJhbnNwb3J0Iixtb1tULnFhXT0iY3VycmVuY3lDb2RlIixtb1tULlNmXT0xLG1vW1QuZWJdPSJsb2NhdGlvbiIsbW9bVC5BZV09InBhZ2UiLG1vW1QuZmJdPSJyZWZlcnJlciIsbW9bVC5yZF09InRpdGxlIixtb1tULlpmXT0xLG1vW1QuSmFdPTEsbW8pKSxubz17fSxvbz1PYmplY3QuZnJlZXplKChuby5jb250ZW50X2lkPTEsbm8uZXZlbnRfYWN0aW9uPTEsbm8uZXZlbnRfY2F0ZWdvcnk9MSxuby5ldmVudF9sYWJlbD0xLG5vLmxpbmtfYXR0cmlidXRpb249CjEsbm8ubmFtZT0xLG5vW1Qua2FdPTEsbm9bVC5SZl09MSxub1tULkRhXT0xLG5vW1QuZGFdPTEsbm8pKSxwbz1PYmplY3QuZnJlZXplKHtkaXNwbGF5ZmVhdHVyZXM6MSxlbmFibGVMaW5rSWQ6MSxlbmFibGVSZWNhcHRjaGE6MSxldmVudEFjdGlvbjoxLGV2ZW50Q2F0ZWdvcnk6MSxldmVudExhYmVsOjEsZ2FGdW5jdGlvbk5hbWU6MSxndG1FY29tbWVyY2VEYXRhOjEsZ3RtVHJhY2tlck5hbWU6MSxsaW5rZXI6MSxyZW1hcmtldGluZ0xpc3RzOjEsc29jaWFsQWN0aW9uOjEsc29jaWFsTmV0d29yazoxLHNvY2lhbFRhcmdldDoxLHRpbWluZ1ZhcjoxLHZhbHVlOjF9KSxlbz1PYmplY3QuZnJlZXplKFsiaXRlbV9jYXRlZ29yeSIsIml0ZW1fY2F0ZWdvcnkyIiwiaXRlbV9jYXRlZ29yeTMiLCJpdGVtX2NhdGVnb3J5NCIsIml0ZW1fY2F0ZWdvcnk1Il0pLHFvPXt9LFhuPU9iamVjdC5mcmVlemUoKHFvLmxldmVscz0xLHFvW1Qub2FdPSJkdXJhdGlvbiIscW9bVC5OYl09MSxxbykpLHJvPQp7fSxzbz1PYmplY3QuZnJlZXplKChyby5hbm9ueW1pemVfaXA9MSxyby5mYXRhbD0xLHJvLnNlbmRfcGFnZV92aWV3PTEscm8uc3RvcmVfZ2FjPTEscm8udXNlX2FtcF9jbGllbnRfaWQ9MSxyb1tULmlhXT0xLHJvW1QuU2ZdPTEscm8pKSxZbj1mdW5jdGlvbihhLGIsYyxkKXtpZih2b2lkIDAhPT1jKWlmKHNvW2JdJiYoYz16YShjKSksImFub255bWl6ZV9pcCIhPT1ifHxjfHwoYz12b2lkIDApLDE9PT1hKWRbTW4oYildPWM7ZWxzZSBpZihrKGEpKWRbYV09YztlbHNlIGZvcih2YXIgZSBpbiBhKWEuaGFzT3duUHJvcGVydHkoZSkmJnZvaWQgMCE9PWNbZV0mJihkW2FbZV1dPWNbZV0pfSxNbj1mdW5jdGlvbihhKXtyZXR1cm4gYSYmayhhKT9hLnJlcGxhY2UoLyhfW2Etel0pL2csZnVuY3Rpb24oYil7cmV0dXJuIGJbMV0udG9VcHBlckNhc2UoKX0pOmF9LHRvPXt9LCRuPU9iamVjdC5mcmVlemUoKHRvLmNoZWNrb3V0X3Byb2dyZXNzPTEsdG8uc2VsZWN0X2NvbnRlbnQ9MSx0by5zZXRfY2hlY2tvdXRfb3B0aW9uPQoxLHRvW1QuSmJdPTEsdG9bVC5LYl09MSx0b1tULm9iXT0xLHRvW1QucGJdPTEsdG9bVC5MYl09MSx0b1tULnlhXT0xLHRvW1QuTWJdPTEsdG9bVC56YV09MSx0bykpLHVvPXt9LHZvPU9iamVjdC5mcmVlemUoKHVvLmNoZWNrb3V0X3Byb2dyZXNzPTEsdW8uc2V0X2NoZWNrb3V0X29wdGlvbj0xLHVvW1QuRmZdPTEsdW9bVC5KYl09MSx1b1tULktiXT0xLHVvW1Qub2JdPTEsdW9bVC55YV09MSx1b1tULk1iXT0xLHVvW1QuR2ZdPTEsdW8pKSx3bz17fSx4bz1PYmplY3QuZnJlZXplKCh3by5nZW5lcmF0ZV9sZWFkPTEsd28ubG9naW49MSx3by5zZWFyY2g9MSx3by5zZWxlY3RfY29udGVudD0xLHdvLnNoYXJlPTEsd28uc2lnbl91cD0xLHdvLnZpZXdfc2VhcmNoX3Jlc3VsdHM9MSx3b1tULnBiXT0xLHdvW1QuTGJdPTEsd29bVC56YV09MSx3bykpLHlvPWZ1bmN0aW9uKGEpe3ZhciBiPSJnZW5lcmFsIjt2b1thXT9iPSJlY29tbWVyY2UiOnhvW2FdP2I9ImVuZ2FnZW1lbnQiOiJleGNlcHRpb24iPT09CmEmJihiPSJlcnJvciIpO3JldHVybiBifSx6bz17fSxBbz1PYmplY3QuZnJlZXplKCh6by52aWV3X3NlYXJjaF9yZXN1bHRzPTEsem9bVC5wYl09MSx6b1tULkxiXT0xLHpvW1QuemFdPTEsem8pKSxVbj1mdW5jdGlvbihhLGIsYyl7YS5oYXNPd25Qcm9wZXJ0eShiKXx8KGFbYl09Yyl9LEJvPWZ1bmN0aW9uKGEpe2lmKHJhKGEpKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgZD1hW2NdO2lmKHZvaWQgMCE9ZCl7dmFyIGU9ZC5pZCxmPWQudmFyaWFudDt2b2lkIDAhPWUmJnZvaWQgMCE9ZiYmYi5wdXNoKFN0cmluZyhlKSsiLiIrU3RyaW5nKGYpKX19cmV0dXJuIDA8Yi5sZW5ndGg/Yi5qb2luKCIhIik6dm9pZCAwfX0sUW49ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWZ1bmN0aW9uKEwpe3JldHVybiBjLmdldFdpdGhDb25maWcoTCl9LGU9e30sZj17fSxnPXt9LGw9e30sbT1CbyhkKFQuVWgpKTshYy5pc0d0bUV2ZW50JiZtJiZVbihmLCJleHAiLG0pO2dbIiZndG0iXT0KYmkoITApO3FmKCkmJihsLl9jcz1nbyk7dmFyIG49ZChULlBiKTtpZighYy5pc0d0bUV2ZW50JiZ2YihuKSlmb3IodmFyIHAgaW4gbilpZihuLmhhc093blByb3BlcnR5KHApJiYvXihkaW1lbnNpb258bWV0cmljKVxkKyQvLnRlc3QocCkmJnZvaWQgMCE9bltwXSl7dmFyIHE9ZChTdHJpbmcobltwXSkpO3ZvaWQgMCE9PXEmJlVuKGYscCxxKX1mb3IodmFyIHI9Yy5nZXRUb3BMZXZlbEtleXMoKSx0PTA7dDxyLmxlbmd0aDsrK3Qpe3ZhciB1PXJbdF07aWYoYy5pc0d0bUV2ZW50KXt2YXIgdj1kKHUpO3BvLmhhc093blByb3BlcnR5KHUpP2VbdV09djprby5oYXNPd25Qcm9wZXJ0eSh1KT9sW3VdPXY6Z1t1XT12fWVsc2V7dmFyIHg9dm9pZCAwO3g9dSE9PVQuUD9kKHUpOmMuZ2V0TWVyZ2VkVmFsdWVzKHUpO2lmKG9vLmhhc093blByb3BlcnR5KHUpKVluKG9vW3VdLHUseCxlKTtlbHNlIGlmKGxvLmhhc093blByb3BlcnR5KHUpKVluKGxvW3VdLHUseCxnKTtlbHNlIGlmKExuLmhhc093blByb3BlcnR5KHUpKVluKExuW3VdLAp1LHgsZik7ZWxzZSBpZihLbi5oYXNPd25Qcm9wZXJ0eSh1KSlZbihLblt1XSx1LHgsbCk7ZWxzZSBpZigvXihkaW1lbnNpb258bWV0cmljfGNvbnRlbnRfZ3JvdXApXGQrJC8udGVzdCh1KSlZbigxLHUseCxmKTtlbHNlIGlmKHU9PT1ULlApe2lmKCFobyl7dmFyIHk9TWEoeCk7eSYmKGZbIiZkaWQiXT15KX12YXIgdz12b2lkIDAsQT12b2lkIDA7Yj09PVQuQWE/dz1NYShjLmdldE1lcmdlZFZhbHVlcyh1KSwiLiIpOih3PU1hKGMuZ2V0TWVyZ2VkVmFsdWVzKHUsMSksIi4iKSxBPU1hKGMuZ2V0TWVyZ2VkVmFsdWVzKHUsMiksIi4iKSk7dyYmKGZbIiZnZGlkIl09dyk7QSYmKGZbIiZlZGlkIl09QSl9ZWxzZSB1PT09VC5DYSYmMD5yLmluZGV4T2YoVC5OYikmJihsLmNvb2tpZU5hbWU9eCsiX2dhIil9fSExIT09ZChULk1oKSYmITEhPT1kKFQub2MpJiZJbigpfHwoZy5hbGxvd0FkRmVhdHVyZXM9ITEpOyExIT09ZChULlUpJiZKbigpfHwoZy5hbGxvd0FkUGVyc29uYWxpemF0aW9uU2lnbmFscz0KITEpOyFjLmlzR3RtRXZlbnQmJmQoVC5UYSkmJihsLl91c2VVcD0hMCk7aWYoYy5pc0d0bUV2ZW50KXtsLm5hbWU9bC5uYW1lfHxlLmd0bVRyYWNrZXJOYW1lO3ZhciB6PWcuaGl0Q2FsbGJhY2s7Zy5oaXRDYWxsYmFjaz1mdW5jdGlvbigpe3BhKHopJiZ6KCk7Yy5vblN1Y2Nlc3MoKX19ZWxzZXtVbihsLCJjb29raWVEb21haW4iLCJhdXRvIik7VW4oZywiZm9yY2VTU0wiLCEwKTtVbihlLCJldmVudENhdGVnb3J5Iix5byhiKSk7QW9bYl0mJlVuKGYsIm5vbkludGVyYWN0aW9uIiwhMCk7ImxvZ2luIj09PWJ8fCJzaWduX3VwIj09PWJ8fCJzaGFyZSI9PT1iP1VuKGUsImV2ZW50TGFiZWwiLGQoVC5SZikpOiJzZWFyY2giPT09Ynx8InZpZXdfc2VhcmNoX3Jlc3VsdHMiPT09Yj9VbihlLCJldmVudExhYmVsIixkKFQuYmkpKToic2VsZWN0X2NvbnRlbnQiPT09YiYmVW4oZSwiZXZlbnRMYWJlbCIsZChULlFoKSk7dmFyIEM9ZVtULmthXXx8e30sRT1DW1QuUmJdO0V8fDAhPUUmJkNbVC5OXT8KbC5hbGxvd0xpbmtlcj0hMDohMT09PUUmJlVuKGwsInVzZUFtcENsaWVudElkIiwhMSk7Zi5oaXRDYWxsYmFjaz1jLm9uU3VjY2VzcztsLm5hbWU9YX1xZigpJiYoZ1siJmdjcyJdPUVmKCksRGYoVC5NKXx8KGwuc3RvcmFnZT0ibm9uZSIpLERmKFQuRCl8fChnLmFsbG93QWRGZWF0dXJlcz0hMSxsLnN0b3JlR2FjPSExKSk7dmFyIEY9ZChULlYpfHxkKFQuc2IpLEQ9ZChULm5kKTtGJiYoYy5pc0d0bUV2ZW50fHwobFtULnNiXT1GKSxsLl9jZDJsPSEwKTtEJiYhYy5pc0d0bUV2ZW50JiYobFtULm5kXT1EKTtlLmZpZWxkc1RvU2VuZD1mO2UuZmllbGRzVG9TZXQ9ZztlLmNyZWF0ZU9ubHlGaWVsZHM9bDtyZXR1cm4gZX0sVm49ZnVuY3Rpb24oYSl7dmFyIGI9YS5ndG1FY29tbWVyY2VEYXRhO2lmKCFiKXJldHVybiBudWxsO3ZhciBjPXt9O2IuY3VycmVuY3lDb2RlJiYoYy5UZT1iLmN1cnJlbmN5Q29kZSk7aWYoYi5pbXByZXNzaW9ucyl7Yy5hY3Rpb249ImltcHJlc3Npb25zIjt2YXIgZD0KYi5pbXByZXNzaW9ucztjLlZnPSJpbXByZXNzaW9ucyI9PT1iLnRyYW5zbGF0ZUlmS2V5RXF1YWxzP2ZvKGQsITApOmR9aWYoYi5wcm9tb1ZpZXcpe2MuYWN0aW9uPSJwcm9tb192aWV3Ijt2YXIgZT1iLnByb21vVmlldy5wcm9tb3Rpb25zO2MuUGM9InByb21vVmlldyI9PT1iLnRyYW5zbGF0ZUlmS2V5RXF1YWxzP2ZvKGUsITApOmV9aWYoYi5wcm9tb0NsaWNrKXtjLmFjdGlvbj0icHJvbW9fY2xpY2siO3ZhciBmPWIucHJvbW9DbGljay5wcm9tb3Rpb25zO2MuUGM9InByb21vQ2xpY2siPT09Yi50cmFuc2xhdGVJZktleUVxdWFscz9mbyhmLCEwKTpmO2MuaWI9Yi5wcm9tb0NsaWNrLmFjdGlvbkZpZWxkO3JldHVybiBjfWZvcih2YXIgZyBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZykmJiJ0cmFuc2xhdGVJZktleUVxdWFscyIhPT1nJiYiaW1wcmVzc2lvbnMiIT09ZyYmInByb21vVmlldyIhPT1nJiYicHJvbW9DbGljayIhPT1nJiYiY3VycmVuY3lDb2RlIiE9PWcpe2MuYWN0aW9uPQpnO3ZhciBsPWJbZ10ucHJvZHVjdHM7Yy5FYj0icHJvZHVjdHMiPT09Yi50cmFuc2xhdGVJZktleUVxdWFscz9mbyhsLCEwKTpsO2MuaWI9YltnXS5hY3Rpb25GaWVsZDticmVha31yZXR1cm4gT2JqZWN0LmtleXMoYykubGVuZ3RoP2M6bnVsbH0sV249ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKHQpe3JldHVybntpZDpkKFQuU2EpLGFmZmlsaWF0aW9uOmQoVC5SaCkscmV2ZW51ZTpkKFQuZGEpLHRheDpkKFQuTWYpLHNoaXBwaW5nOmQoVC50ZSksY291cG9uOmQoVC5TaCksbGlzdDpkKFQuc2UpfHx0fX1mb3IodmFyIGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGIuZ2V0V2l0aENvbmZpZyh0KX0sZT1kKFQuVyksZixnPTA7ZSYmZzxlLmxlbmd0aCYmIShmPWVbZ11bVC5zZV0pO2crKyk7dmFyIGw9ZChULlBiKTtpZih2YihsKSlmb3IodmFyIG09MDtlJiZtPGUubGVuZ3RoOysrbSl7dmFyIG49ZVttXSxwO2ZvcihwIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShwKSYmL14oZGltZW5zaW9ufG1ldHJpYylcZCskLy50ZXN0KHApJiYKdm9pZCAwIT1sW3BdJiZVbihuLHAsbltsW3BdXSl9dmFyIHE9bnVsbCxyPWQoVC5UaCk7YT09PVQueWF8fGE9PT1ULk1iP3E9e2FjdGlvbjphLGliOmMoKSxFYjpmbyhlKX06YT09PVQuSmI/cT17YWN0aW9uOiJhZGQiLEViOmZvKGUpfTphPT09VC5LYj9xPXthY3Rpb246InJlbW92ZSIsRWI6Zm8oZSl9OmE9PT1ULnphP3E9e2FjdGlvbjoiZGV0YWlsIixpYjpjKGYpLEViOmZvKGUpfTphPT09VC5wYj9xPXthY3Rpb246ImltcHJlc3Npb25zIixWZzpmbyhlKX06InZpZXdfcHJvbW90aW9uIj09PWE/cT17YWN0aW9uOiJwcm9tb192aWV3IixQYzpmbyhyKX06InNlbGVjdF9jb250ZW50Ij09PWEmJnImJjA8ci5sZW5ndGg/cT17YWN0aW9uOiJwcm9tb19jbGljayIsUGM6Zm8ocil9OiJzZWxlY3RfY29udGVudCI9PT1hP3E9e2FjdGlvbjoiY2xpY2siLGliOntsaXN0OmQoVC5zZSl8fGZ9LEViOmZvKGUpfTphPT09VC5vYnx8ImNoZWNrb3V0X3Byb2dyZXNzIj09PWE/cT17YWN0aW9uOiJjaGVja291dCIsCkViOmZvKGUpLGliOntzdGVwOmE9PT1ULm9iPzE6ZChULkxmKSxvcHRpb246ZChULktmKX19OiJzZXRfY2hlY2tvdXRfb3B0aW9uIj09PWEmJihxPXthY3Rpb246ImNoZWNrb3V0X29wdGlvbiIsaWI6e3N0ZXA6ZChULkxmKSxvcHRpb246ZChULktmKX19KTtxJiYocS5UZT1kKFQucWEpKTtyZXR1cm4gcX0sQ289e30sUm49ZnVuY3Rpb24oYSxiKXt2YXIgYz1Db1thXTtDb1thXT1OKGIpO2lmKCFjKXJldHVybiExO2Zvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkmJmJbZF0hPT1jW2RdKXJldHVybiEwO2Zvcih2YXIgZSBpbiBjKWlmKGMuaGFzT3duUHJvcGVydHkoZSkmJmNbZV0hPT1iW2VdKXJldHVybiEwO3JldHVybiExfTt2YXIgRG89bnVsbCxFbz0hMTtmdW5jdGlvbiBGbyhhKXtyZXR1cm4gRW8mJiFhP0RvPURvfHxuZXcgR286VS5nY3E9VS5nY3F8fG5ldyBHb30KdmFyIEhvPWZ1bmN0aW9uKGEsYixjKXtGbygpLnJlZ2lzdGVyKGEsYixjKX0sSW89ZnVuY3Rpb24oYSxiLGMsZCl7Rm8oKS5wdXNoKCJldmVudCIsW2IsYV0sYyxkKX0sSm89ZnVuY3Rpb24oYSxiLGMpe0ZvKCkucHVzaCgiY29uZmlnIixbYV0sYixjKX0sS289ZnVuY3Rpb24oYSxiLGMsZCl7Rm8oKS5wdXNoKCJnZXQiLFthLGJdLGMsZCl9LExvPWZ1bmN0aW9uKCl7dmFyIGE9VC5WO3JldHVybiBGbygpLmdldEdsb2JhbENvbmZpZ1ZhbHVlJiZGbygpLmdldEdsb2JhbENvbmZpZ1ZhbHVlKGEpfSxNbz17fSxObz1mdW5jdGlvbigpe3RoaXMuc3RhdHVzPTE7dGhpcy5jb250YWluZXJDb25maWc9e307dGhpcy50YXJnZXRDb25maWc9e307dGhpcy5yZW1vdGVDb25maWc9e307dGhpcy5vPXt9O3RoaXMucz1udWxsO3RoaXMuY2xhaW1lZD10aGlzLmc9ITF9LE9vPWZ1bmN0aW9uKGEsYixjLGQsZSl7dGhpcy50eXBlPWE7dGhpcy5vPWI7dGhpcy5LPWN8fCIiO3RoaXMuZz1kO3RoaXMubWVzc2FnZUNvbnRleHQ9CmV9LEdvPWZ1bmN0aW9uKCl7dGhpcy5vPXt9O3RoaXMucz17fTt0aGlzLmc9W107dGhpcy5DPXtBVzohMSxVQTohMX19LFBvPWZ1bmN0aW9uKGEsYil7dmFyIGM9U2UoYik7cmV0dXJuIGEub1tjLmNvbnRhaW5lcklkXT1hLm9bYy5jb250YWluZXJJZF18fG5ldyBOb30sUW89ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYil7dmFyIGU9U2UoYik7aWYoZSYmMT09PVBvKGEsYikuc3RhdHVzKXtQbyhhLGIpLnN0YXR1cz0yO3ZhciBmPXt9O2FqJiYoZi50aW1lb3V0SWQ9Ry5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7USgzOCk7RGkoKX0sM0UzKSk7YS5wdXNoKCJyZXF1aXJlIixbZl0sZS5jb250YWluZXJJZCx7fSk7TW9bZS5jb250YWluZXJJZF09RGEoKTtpZihSaCgpKXt9ZWxzZSAyPT09ZD9JayhlLmNvbnRhaW5lcklkLGMpOkhrKGUuY29udGFpbmVySWQsYywhMCl9fX0sUm89ZnVuY3Rpb24oYSxiLGMsZCl7aWYoZC5LKXt2YXIgZT1QbyhhLGQuSyksZj1lLnM7aWYoZil7dmFyIGc9TihjKSxsPU4oZS50YXJnZXRDb25maWdbZC5LXSksbT1OKGUuY29udGFpbmVyQ29uZmlnKSxuPU4oZS5yZW1vdGVDb25maWcpLHA9TihhLnMpLHE9e307dHJ5e3E9TihKZCl9Y2F0Y2godil7USg3Mil9CnZhciByPVNlKGQuSykucHJlZml4LHQ9ZnVuY3Rpb24odil7bmooZC5tZXNzYWdlQ29udGV4dC5ldmVudElkLHIsdik7dmFyIHg9Z1tULlFiXTt4JiZKKHgpfSx1PXZsKHVsKHdsKHRsKHNsKHFsKHBsKHJsKG9sKG5sKG1sKG5ldyBsbChkLm1lc3NhZ2VDb250ZXh0LmV2ZW50SWQsZC5tZXNzYWdlQ29udGV4dC5wcmlvcml0eUlkKSxnKSxsKSxtKSxuKSxwKSxxKSxkLm1lc3NhZ2VDb250ZXh0LmV2ZW50TWV0YWRhdGEpLGZ1bmN0aW9uKCl7aWYodCl7dmFyIHY9dDt0PXZvaWQgMDt2KCIyIil9fSksZnVuY3Rpb24oKXtpZih0KXt2YXIgdj10O3Q9dm9pZCAwO3YoIjMiKX19KSxmdW5jdGlvbih2LHgpe2EuQ1t2XT14fSksZnVuY3Rpb24odil7cmV0dXJuIGEuQ1t2XX0pO3RyeXsKbmooZC5tZXNzYWdlQ29udGV4dC5ldmVudElkLHIsIjEiKSx3aihkLnR5cGUsZC5LLHUpO2YoZC5LLGIsZC5vLHUpfWNhdGNoKHYpe25qKGQubWVzc2FnZUNvbnRleHQuZXZlbnRJZCxyLCI0Iik7fX19fTtoPUdvLnByb3RvdHlwZTsKaC5yZWdpc3Rlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9UG8odGhpcyxhKTtpZigzIT09ZC5zdGF0dXMpe2Qucz1iO2Quc3RhdHVzPTM7YyYmKE4oZC5yZW1vdGVDb25maWcsYyksZC5yZW1vdGVDb25maWc9Yyk7dmFyIGU9U2UoYSksZj1Nb1tlLmNvbnRhaW5lcklkXTtpZih2b2lkIDAhPT1mKXt2YXIgZz1VW2UuY29udGFpbmVySWRdLmJvb3RzdHJhcCxsPWUucHJlZml4LnRvVXBwZXJDYXNlKCk7VVtlLmNvbnRhaW5lcklkXS5fc3B4JiYobD1sLnRvTG93ZXJDYXNlKCkpO3ZhciBtPU1kKCJndG0udW5pcXVlRXZlbnRJZCIpLG49bCxwPURhKCktZztpZihhaiYmIUlpW21dKXttIT09RWkmJih6aSgpLEVpPW0pO3ZhciBxPW4rIi4iK01hdGguZmxvb3IoZy1mKSsiLiIrTWF0aC5mbG9vcihwKTtQaT1QaT9QaSsiLCIrcToiJmNsPSIrcX1kZWxldGUgTW9bZS5jb250YWluZXJJZF19dGhpcy5mbHVzaCgpfX07Cmgubm90aWZ5Q29udGFpbmVyTG9hZGVkPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxkPWZ1bmN0aW9uKGYpe2lmKFNlKGYpKXt2YXIgZz1QbyhjLGYpO2cuc3RhdHVzPTM7Zy5jbGFpbWVkPSEwfX07ZChhKTtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKylkKGJbZV0pO3RoaXMuZmx1c2goKX07aC5wdXNoPWZ1bmN0aW9uKGEsYixjLGQpe251bGw9PWQ/ZD17fToiYm9vbGVhbiI9PT10eXBlb2YgZCYmKGQ9e2RlZmVycmFibGU6ZH0pO2lmKHZvaWQgMCE9PWMpe2lmKCFTZShjKSlyZXR1cm47UW8odGhpcyxjLGJbMF1bVC5WXXx8dGhpcy5zW1QuVl0sImV2ZW50Ij09PWE/MjoxKTtQbyh0aGlzLGMpLmcmJihkLmRlZmVycmFibGU9ITEpfXRoaXMuZy5wdXNoKG5ldyBPbyhhLE1hdGguZmxvb3IoRGEoKS8xRTMpLGMsYixkKSk7ZC5kZWZlcnJhYmxlfHx0aGlzLmZsdXNoKCl9OwpoLmluc2VydD1mdW5jdGlvbihhLGIsYyxkKXtudWxsPT1kJiYoZD17fSk7dmFyIGU9TWF0aC5mbG9vcihEYSgpLzFFMyk7MDx0aGlzLmcubGVuZ3RoP3RoaXMuZy5zcGxpY2UoMSwwLG5ldyBPbyhhLGUsYyxiLGQpKTp0aGlzLmcucHVzaChuZXcgT28oYSxlLGMsYixkKSl9OwpoLmZsdXNoPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLGM9W10sZD0hMSxlPXt9O3RoaXMuZy5sZW5ndGg7KXt2YXIgZj10aGlzLmdbMF07aWYoZi5tZXNzYWdlQ29udGV4dC5kZWZlcnJhYmxlKSFmLkt8fFBvKHRoaXMsZi5LKS5nPyhmLm1lc3NhZ2VDb250ZXh0LmRlZmVycmFibGU9ITEsdGhpcy5nLnB1c2goZikpOmMucHVzaChmKSx0aGlzLmcuc2hpZnQoKTtlbHNle3ZhciBnPXZvaWQgMDtzd2l0Y2goZi50eXBlKXtjYXNlICJyZXF1aXJlIjpnPVBvKHRoaXMsZi5LKTtpZigzIT09Zy5zdGF0dXMmJiFhKXt0aGlzLmcucHVzaC5hcHBseSh0aGlzLmcsYyk7cmV0dXJufWFqJiZHLmNsZWFyVGltZW91dChmLmdbMF0udGltZW91dElkKTticmVhaztjYXNlICJzZXQiOkIoZi5nWzBdLGZ1bmN0aW9uKHIsdCl7TihKYShyLHQpLGIucyl9KTticmVhaztjYXNlICJjb25maWciOmc9UG8odGhpcyxmLkspO2lmKGcuY2xhaW1lZClicmVhaztlLlBhPXt9O0IoZi5nWzBdLGZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0LAp1KXtOKEphKHQsdSksci5QYSl9fShlKSk7dmFyIGw9ISFlLlBhW1Qud2RdO2RlbGV0ZSBlLlBhW1Qud2RdO3ZhciBtPVNlKGYuSyksbj1tLmNvbnRhaW5lcklkPT09bS5pZDtsfHwobj9nLmNvbnRhaW5lckNvbmZpZz17fTpnLnRhcmdldENvbmZpZ1tmLktdPXt9KTtnLmcmJmx8fFJvKHRoaXMsVC5BYSxlLlBhLGYpO2cuZz0hMDtkZWxldGUgZS5QYVtULlViXTtuP04oZS5QYSxnLmNvbnRhaW5lckNvbmZpZyk6KE4oZS5QYSxnLnRhcmdldENvbmZpZ1tmLktdKSxRKDcwKSk7ZD0hMDticmVhaztjYXNlICJldmVudCI6Zz1Qbyh0aGlzLGYuSyk7aWYoZy5jbGFpbWVkKWJyZWFrO2UuV2M9e307QihmLmdbMF0sZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQsdSl7TihKYSh0LHUpLHIuV2MpfX0oZSkpO1JvKHRoaXMsZi5nWzFdLGUuV2MsZik7YnJlYWs7Y2FzZSAiZ2V0IjppZihnPVBvKHRoaXMsZi5LKSwhZy5jbGFpbWVkKXt2YXIgcD17fSxxPShwW1QuSWFdPWYuZ1swXSxwW1QuUWFdPQpmLmdbMV0scCk7Um8odGhpcyxULkdhLHEsZil9fXRoaXMuZy5zaGlmdCgpO1NvKHRoaXMsZil9ZT17UGE6ZS5QYSxXYzplLldjfX10aGlzLmcucHVzaC5hcHBseSh0aGlzLmcsYyk7ZCYmdGhpcy5mbHVzaCgpfTt2YXIgU289ZnVuY3Rpb24oYSxiKXtpZigicmVxdWlyZSIhPT1iLnR5cGUpaWYoYi5LKWZvcih2YXIgYz1hLmdldENvbW1hbmRMaXN0ZW5lcnMoYi5LKVtiLnR5cGVdfHxbXSxkPTA7ZDxjLmxlbmd0aDtkKyspY1tkXSgpO2Vsc2UgZm9yKHZhciBlIGluIGEubylpZihhLm8uaGFzT3duUHJvcGVydHkoZSkpe3ZhciBmPWEub1tlXTtpZihmJiZmLm8pZm9yKHZhciBnPWYub1tiLnR5cGVdfHxbXSxsPTA7bDxnLmxlbmd0aDtsKyspZ1tsXSgpfX07R28ucHJvdG90eXBlLmdldFJlbW90ZUNvbmZpZz1mdW5jdGlvbihhKXtyZXR1cm4gUG8odGhpcyxhKS5yZW1vdGVDb25maWd9OwpHby5wcm90b3R5cGUuZ2V0Q29tbWFuZExpc3RlbmVycz1mdW5jdGlvbihhKXtyZXR1cm4gUG8odGhpcyxhKS5vfTtHby5wcm90b3R5cGUuZ2V0R2xvYmFsQ29uZmlnVmFsdWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc1thXX07dmFyIFRvPSExO3ZhciBVbz0hMTsKdmFyIFZvPXt9LFdvPXt9LFhvPXt9LFlvPWZ1bmN0aW9uKGEsYil7dmFyIGM9V29bYl18fFtdO2MucHVzaChhKTtXb1tiXT1jfSwkbz1mdW5jdGlvbigpe1UuYWRkVGFyZ2V0VG9Hcm91cD1mdW5jdGlvbihlKXtabyhlLCJkZWZhdWx0Iil9O1UuYWRkRGVzdGluYXRpb25Ub0NvbnRhaW5lcj1mdW5jdGlvbihlLGYpe1lvKGUsZil9O3ZhciBhPVUucGVuZGluZ0RlZmF1bHRUYXJnZXRzO2RlbGV0ZSBVLnBlbmRpbmdEZWZhdWx0VGFyZ2V0cztpZihBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgYj0wO2I8YS5sZW5ndGg7KytiKVpvKGFbYl0sImRlZmF1bHQiKTt2YXIgYz1VLnBlbmRpbmdEZXN0aW5hdGlvbklkcztkZWxldGUgVS5wZW5kaW5nRGVzdGluYXRpb25JZHM7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IodmFyIGQ9MDtkPGMubGVuZ3RoOysrZClZbyhjW2RdWzBdLGNbZF1bMV0pfSxabz1mdW5jdGlvbihhLGIpe2I9Yi50b1N0cmluZygpLnNwbGl0KCIsIik7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPQpWb1tiW2NdXXx8W107Vm9bYltjXV09ZDswPmQuaW5kZXhPZihhKSYmZC5wdXNoKGEpfX0sYXA9ZnVuY3Rpb24oYSxiKXtiPVN0cmluZyhiKS5zcGxpdCgiLCIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1Yb1tiW2NdXXx8W107WG9bYltjXV09ZDswPmQuaW5kZXhPZihhKSYmZC5wdXNoKGEpfX0sYnA9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9W10sZD17fSxlPTA7ZTxhLmxlbmd0aDtkPXtpYzpkLmljLFljOmQuWWN9LGUrKyl7dmFyIGY9YVtlXTtpZigwPD1mLmluZGV4T2YoIi0iKSlpZihVbyl7aWYoZC5pYz1TZShmKSxkLmljKWlmKFRvKXt2YXIgZz1WaCgpO3NhKGcsZnVuY3Rpb24odSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiB1LmljLmNvbnRhaW5lcklkPT09dn19KGQpKT9iLnB1c2goZik6Yy5wdXNoKGYpfWVsc2UgZC5pYy5jb250YWluZXJJZD09PVNoLkh8fFJoKCk/Yi5wdXNoKGYpOmMucHVzaChmKX1lbHNlIGIucHVzaChmKTtlbHNle3ZhciBsPQpWb1tmXXx8W107aWYoVW8paWYoVG8pe2QuWWM9e307bC5mb3JFYWNoKGZ1bmN0aW9uKHUpe3JldHVybiBmdW5jdGlvbih2KXtyZXR1cm4gdS5ZY1t2XT0hMH19KGQpKTtmb3IodmFyIG09VWgoKSxuPTA7bjxtLmxlbmd0aDtuKyspaWYoZC5ZY1ttW25dXSl7dmFyIHA9VmgoKTtwJiZwLmxlbmd0aCYmKGI9Yi5jb25jYXQocCkpO2JyZWFrfXZhciBxPVhvW2ZdfHxbXTtxLmxlbmd0aCYmKGI9Yi5jb25jYXQocSkpfWVsc2UgZm9yKHZhciByPTA7cjxsLmxlbmd0aDtyKyspe3ZhciB0PVNlKGxbcl0pOyh0JiZ0LmNvbnRhaW5lcklkPT09U2guSHx8UmgoKSkmJmIucHVzaCh0LmlkKX1lbHNlIGwmJmwubGVuZ3RoJiYoYj1iLmNvbmNhdChsKSl9fXJldHVybntqajpiLGxqOmN9fSxjcD1mdW5jdGlvbihhKXtCKFZvLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9Yy5pbmRleE9mKGEpOzA8PWQmJmMuc3BsaWNlKGQsMSl9KX0sZHA9ZnVuY3Rpb24oYSl7QihYbyxmdW5jdGlvbihiLGMpe3ZhciBkPWMuaW5kZXhPZihhKTsKMDw9ZCYmYy5zcGxpY2UoZCwxKX0pfTt2YXIgR3A9ITE7dmFyIEhwPSJIQSBHRiBHIFVBIEFXIERDIi5zcGxpdCgiICIpLElwPSExLEpwPSExLEtwPSExO2Z1bmN0aW9uIExwKGEsYil7YS5oYXNPd25Qcm9wZXJ0eSgiZ3RtLnVuaXF1ZUV2ZW50SWQiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsImd0bS51bmlxdWVFdmVudElkIix7dmFsdWU6RmQoKX0pO2IuZXZlbnRJZD1hWyJndG0udW5pcXVlRXZlbnRJZCJdO2IucHJpb3JpdHlJZD1hWyJndG0ucHJpb3JpdHlJZCJdO3JldHVybntldmVudElkOmIuZXZlbnRJZCxwcmlvcml0eUlkOmIucHJpb3JpdHlJZH19CmZ1bmN0aW9uIE1wKCl7aWYoRW8pcmV0dXJuITE7SXB8fFUuZ3RhZ1JlZ2lzdGVyZWR8fChJcD1VLmd0YWdSZWdpc3RlcmVkPSEwLCRvKCkpO3JldHVybiBJcH0KdmFyIE5wPXtjb25maWc6ZnVuY3Rpb24oYSxiKXt2YXIgYz1McChhLGIpO2lmKDI+YS5sZW5ndGh8fCFrKGFbMV0pKXJldHVybjt2YXIgZD17fTtpZigyPGEubGVuZ3RoKXtpZih2b2lkIDAhPWFbMl0mJiF2YihhWzJdKXx8MzxhLmxlbmd0aClyZXR1cm47ZD1hWzJdfXZhciBlPVNlKGFbMV0pO2lmKCFlKXJldHVybjtmaihjLmV2ZW50SWQsImd0YWcuY29uZmlnIik7dmFyIGY9ZS5pZCE9PWUuY29udGFpbmVySWQsZz0hMSxsPS0xIT09VWgoKS5pbmRleE9mKGUuY29udGFpbmVySWQpO2wmJihnPUtwLEtwPSEwKTtpZihQZVsxMl0mJkFkJiYhZiYmZylyZXR1cm47aWYoRW8pe3ZhciBtPWRbVC5WXXx8TG8oKTtpZihHcCYmZil7aWYoIXNhKFZoKCksZnVuY3Rpb24oeCl7cmV0dXJuIHg9PT1lLmNvbnRhaW5lcklkfSkpe0lrKGUuY29udGFpbmVySWQsbSk7cmV0dXJufX1lbHNlIGlmKCFsJiYhUmgoKSl7SGsoZS5jb250YWluZXJJZCwKbSwhMCk7cmV0dXJufX12YXIgbj1NcCgpfHxFbztiLm5vVGFyZ2V0R3JvdXB8fChHcCYmZj8oZHAoZS5pZCksYXAoZS5pZCxkW1QucGRdfHwiZGVmYXVsdCIpKTooY3AoZS5pZCksWm8oZS5pZCxkW1QucGRdfHwiZGVmYXVsdCIpKSk7ZGVsZXRlIGRbVC5wZF07SnB8fFEoNDMpO2lmKG4pe3ZhciBwPVtlLmlkXTtHcCYmIWYmJihwPVZoKCkpO2Zvcih2YXIgcT0hMSxyPTA7cjxwLmxlbmd0aDtyKyspe3ZhciB0PVNlKHBbcl0pLHU9TihiKTtpZih0JiYtMSE9PUhwLmluZGV4T2YodC5wcmVmaXgpKXsiRyI9PT10LnByZWZpeCYmKGRbVC5VYl09ITApO3ZhciB2PXUuZXZlbnRNZXRhZGF0YXx8e307di5oYXNPd25Qcm9wZXJ0eSgiaXNfZXh0ZXJuYWxfZXZlbnQiKXx8KHYuaXNfZXh0ZXJuYWxfZXZlbnQ9IXUuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbik7dS5ldmVudE1ldGFkYXRhPXY7ZGVsZXRlIGRbVC5RYl07Sm8oZCx0LmlkLHUpO3E9ITB9fWlmKHEpcmV0dXJufVBkKCJndGFnLnRhcmdldHMuIisKZS5pZCk7UGQoImd0YWcudGFyZ2V0cy4iK2UuaWQsTihkKSk7fSxjb25zZW50OmZ1bmN0aW9uKGEsYil7aWYoMz09PWEubGVuZ3RoKXtRKDM5KTt2YXIgYz1McChhLGIpLGQ9YVsxXTsiZGVmYXVsdCI9PT1kP0FmKGFbMl0pOiJ1cGRhdGUiPT09ZCYmQ2YoYVsyXSxjKX19LGV2ZW50OmZ1bmN0aW9uKGEsYil7dmFyIGM9YVsxXTtpZighKDI+YS5sZW5ndGgpJiZrKGMpKXt2YXIgZDtpZigyPGEubGVuZ3RoKXtpZighdmIoYVsyXSkmJnZvaWQgMCE9YVsyXXx8MzxhLmxlbmd0aClyZXR1cm47ZD1hWzJdfXZhciBlPWQsZj17fSxnPShmLmV2ZW50PWMsZik7ZSYmKGcuZXZlbnRNb2RlbD1OKGUpLGVbVC5RYl0mJihnLmV2ZW50Q2FsbGJhY2s9ZVtULlFiXSksZVtULm1kXSYmKGcuZXZlbnRUaW1lb3V0PWVbVC5tZF0pKTt2YXIgbD1McChhLGIpLG09bC5ldmVudElkLG49bC5wcmlvcml0eUlkO2dbImd0bS51bmlxdWVFdmVudElkIl09Cm07biYmKGdbImd0bS5wcmlvcml0eUlkIl09bik7aWYoIm9wdGltaXplLmNhbGxiYWNrIj09PWMpcmV0dXJuIGcuZXZlbnRNb2RlbD1nLmV2ZW50TW9kZWx8fHt9LGc7dmFyIHA7dmFyIHE9ZCxyPXEmJnFbVC50Yl07dm9pZCAwPT09ciYmKHI9TWQoVC50YiwyKSx2b2lkIDA9PT1yJiYocj0iZGVmYXVsdCIpKTtpZihrKHIpfHxyYShyKSl7dmFyIHQ9ci50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKS5zcGxpdCgiLCIpLHU9YnAodCksdj11LmpqLHg9dS5sajtpZih4Lmxlbmd0aClmb3IodmFyIHk9cSYmcVtULlZdfHxMbygpLHc9MDt3PHgubGVuZ3RoO3crKyl7dmFyIEE9U2UoeFt3XSk7QSYmKEdwP0lrKEEuY29udGFpbmVySWQseSk6SGsoQS5jb250YWluZXJJZCx5LCEwKSl9cD1VZSh2KX1lbHNlIHA9dm9pZCAwO3ZhciB6PXA7aWYoIXopcmV0dXJuO2ZqKG0sYyk7Zm9yKHZhciBDPQpNcCgpfHxFbyxFPVtdLEY9MDtDJiZGPHoubGVuZ3RoO0YrKyl7dmFyIEQ9eltGXSxMPU4oYik7aWYoLTEhPT1IcC5pbmRleE9mKEQucHJlZml4KSl7dmFyIEk9TihkKTsiRyIhPT1ELnByZWZpeHx8TC5mcm9tTWVzc2FnZUJ1c3x8KElbVC5VYl09ITApO3ZhciBNPUwuZXZlbnRNZXRhZGF0YXx8e307TS5oYXNPd25Qcm9wZXJ0eSgiaXNfZXh0ZXJuYWxfZXZlbnQiKXx8KE0uaXNfZXh0ZXJuYWxfZXZlbnQ9IUwuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbik7TC5ldmVudE1ldGFkYXRhPU07ZGVsZXRlIElbVC5RYl07SW8oYyxJLEQuaWQsTCl9RS5wdXNoKEQuaWQpfWcuZXZlbnRNb2RlbD1nLmV2ZW50TW9kZWx8fHt9OzA8ei5sZW5ndGg/Zy5ldmVudE1vZGVsW1QudGJdPUUuam9pbigpOmRlbGV0ZSBnLmV2ZW50TW9kZWxbVC50Yl07SnB8fFEoNDMpO3JldHVybiBiLm5vR3RtRXZlbnQ/dm9pZCAwOgpnfX0sZ2V0OmZ1bmN0aW9uKGEsYil7USg1Myk7aWYoNCE9PWEubGVuZ3RofHwhayhhWzFdKXx8IWsoYVsyXSl8fCFwYShhWzNdKSlyZXR1cm47dmFyIGM9U2UoYVsxXSksZD1TdHJpbmcoYVsyXSksZT1hWzNdO2lmKCFjKXJldHVybjtKcHx8USg0Myk7aWYoRW8pe3ZhciBmPUxvKCk7aWYoR3Ape2lmKCFzYShWaCgpLGZ1bmN0aW9uKGwpe3JldHVybiBjLmNvbnRhaW5lcklkPT09bH0pKXtJayhjLmNvbnRhaW5lcklkLGYpO3JldHVybn19ZWxzZSBpZihjLmNvbnRhaW5lcklkIT09U2guSCYmIVJoKCkpe0hrKGMuY29udGFpbmVySWQsZiwhMCk7cmV0dXJufX1lbHNlIGlmKCFNcCgpKXJldHVybjtpZigtMT09PUhwLmluZGV4T2YoYy5wcmVmaXgpKXJldHVybjtMcChhLGIpO3ZhciBnPXt9O3dmKE4oKGdbVC5JYV09ZCxnW1QuUWFdPWUsZykpKTtLbyhkLGZ1bmN0aW9uKGwpe0ooZnVuY3Rpb24oKXtyZXR1cm4gZShsKX0pfSwKYy5pZCxiKTt9LGpzOmZ1bmN0aW9uKGEsYil7aWYoMj09YS5sZW5ndGgmJmFbMV0uZ2V0VGltZSl7SnA9ITA7TXAoKTt2YXIgYz1McChhLGIpLGQ9Yy5ldmVudElkLGU9Yy5wcmlvcml0eUlkLGY9e307cmV0dXJuIGYuZXZlbnQ9Imd0bS5qcyIsZlsiZ3RtLnN0YXJ0Il09YVsxXS5nZXRUaW1lKCksZlsiZ3RtLnVuaXF1ZUV2ZW50SWQiXT1kLGZbImd0bS5wcmlvcml0eUlkIl09ZSxmfX0scG9saWN5OmZ1bmN0aW9uKCl7fSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYzsyPT1hLmxlbmd0aCYmdmIoYVsxXSk/Yz1OKGFbMV0pOjM9PWEubGVuZ3RoJiZrKGFbMV0pJiYoYz17fSx2YihhWzJdKXx8cmEoYVsyXSk/Y1thWzFdXT1OKGFbMl0pOmNbYVsxXV09YVsyXSk7aWYoYyl7dmFyIGQ9THAoYSxiKSxlPWQuZXZlbnRJZCxmPWQucHJpb3JpdHlJZDsKTihjKTtpZihNcCgpfHxFbyl7dmFyIGc9TihjKTtGbygpLnB1c2goInNldCIsW2ddLHZvaWQgMCxiKX1jWyJndG0udW5pcXVlRXZlbnRJZCJdPWU7ZiYmKGNbImd0bS5wcmlvcml0eUlkIl09Zik7Yi5vdmVyd3JpdGVNb2RlbEZpZWxkcz0hMDtyZXR1cm4gY319fSxPcD17cG9saWN5OiEwfTt2YXIgUHA9ZnVuY3Rpb24oYSl7dmFyIGI9R1tzZC5aXS5oaWRlO2lmKGImJnZvaWQgMCE9PWJbYV0mJmIuZW5kKXtiW2FdPSExO3ZhciBjPSEwLGQ7Zm9yKGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpJiYhMD09PWJbZF0pe2M9ITE7YnJlYWt9YyYmKGIuZW5kKCksYi5lbmQ9bnVsbCl9fSxRcD1mdW5jdGlvbihhKXt2YXIgYj1HW3NkLlpdLGM9YiYmYi5oaWRlO2MmJmMuZW5kJiYoY1thXT0hMCl9O3ZhciBScD0hMSxTcD1bXTtmdW5jdGlvbiBUcCgpe2lmKCFScCl7UnA9ITA7Zm9yKHZhciBhPTA7YTxTcC5sZW5ndGg7YSsrKUooU3BbYV0pfX12YXIgVXA9ZnVuY3Rpb24oYSl7UnA/SihhKTpTcC5wdXNoKGEpfTt2YXIga3E9ZnVuY3Rpb24oYSl7aWYoanEoYSkpcmV0dXJuIGE7dGhpcy5nPWF9O2txLnByb3RvdHlwZS5nZXRVbnRydXN0ZWRNZXNzYWdlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfTt2YXIganE9ZnVuY3Rpb24oYSl7cmV0dXJuIWF8fCJvYmplY3QiIT09dGIoYSl8fHZiKGEpPyExOiJnZXRVbnRydXN0ZWRNZXNzYWdlVmFsdWUiaW4gYX07a3EucHJvdG90eXBlLmdldFVudHJ1c3RlZE1lc3NhZ2VWYWx1ZT1rcS5wcm90b3R5cGUuZ2V0VW50cnVzdGVkTWVzc2FnZVZhbHVlO3ZhciBscT0wLG1xPXt9LG5xPVtdLG9xPVtdLHBxPSExLHFxPSExO2Z1bmN0aW9uIHJxKGEsYil7cmV0dXJuIGEubWVzc2FnZUNvbnRleHQuZXZlbnRJZC1iLm1lc3NhZ2VDb250ZXh0LmV2ZW50SWR8fGEubWVzc2FnZUNvbnRleHQucHJpb3JpdHlJZC1iLm1lc3NhZ2VDb250ZXh0LnByaW9yaXR5SWR9dmFyIHNxPWZ1bmN0aW9uKGEpe3JldHVybiBHW3NkLlpdLnB1c2goYSl9LHRxPWZ1bmN0aW9uKGEsYil7dmFyIGM9VVtzZC5aXSxkPWM/Yy5zdWJzY3JpYmVyczoxLGU9MCxmPSExLGc9dm9pZCAwO2ImJihnPUcuc2V0VGltZW91dChmdW5jdGlvbigpe2Z8fChmPSEwLGEoKSk7Zz12b2lkIDB9LGIpKTtyZXR1cm4gZnVuY3Rpb24oKXsrK2U9PT1kJiYoZyYmKEcuY2xlYXJUaW1lb3V0KGcpLGc9dm9pZCAwKSxmfHwoYSgpLGY9ITApKX19OwpmdW5jdGlvbiB1cShhLGIpe3ZhciBjPSEhUGVbMTBdJiZhLl9jbGVhcnx8Yi5vdmVyd3JpdGVNb2RlbEZpZWxkcztCKGEsZnVuY3Rpb24oZSxmKXsiX2NsZWFyIiE9PWUmJihjJiZQZChlKSxQZChlLGYpKX0pO0JkfHwoQmQ9YVsiZ3RtLnN0YXJ0Il0pO3ZhciBkPWFbImd0bS51bmlxdWVFdmVudElkIl07aWYoIWEuZXZlbnQpcmV0dXJuITE7Im51bWJlciIhPT10eXBlb2YgZCYmKGQ9RmQoKSxhWyJndG0udW5pcXVlRXZlbnRJZCJdPWQsUGQoImd0bS51bmlxdWVFdmVudElkIixkKSk7cmV0dXJuIGtsKGEpfQpmdW5jdGlvbiB2cShhKXtpZihudWxsPT1hfHwib2JqZWN0IiE9PXR5cGVvZiBhKXJldHVybiExO2lmKGEuZXZlbnQpcmV0dXJuITA7aWYod2EoYSkpe3ZhciBiPWFbMF07aWYoImNvbmZpZyI9PT1ifHwiZXZlbnQiPT09Ynx8ImpzIj09PWJ8fCJnZXQiPT09YilyZXR1cm4hMH1yZXR1cm4hMX0KZnVuY3Rpb24gd3EoKXt2YXIgYTtpZihvcS5sZW5ndGgpYT1vcS5zaGlmdCgpO2Vsc2UgaWYobnEubGVuZ3RoKWE9bnEuc2hpZnQoKTtlbHNlIHJldHVybjt2YXIgYjt2YXIgYz1hO2lmKHBxfHwhdnEoYy5tZXNzYWdlKSliPWM7ZWxzZXtwcT0hMDt2YXIgZD1jLm1lc3NhZ2VbImd0bS51bmlxdWVFdmVudElkIl07Im51bWJlciIhPT10eXBlb2YgZCYmKGQ9Yy5tZXNzYWdlWyJndG0udW5pcXVlRXZlbnRJZCJdPUZkKCkpO3ZhciBlPXt9LGY9e21lc3NhZ2U6KGUuZXZlbnQ9Imd0bS5pbml0X2NvbnNlbnQiLGVbImd0bS51bmlxdWVFdmVudElkIl09ZC0yLGUpLG1lc3NhZ2VDb250ZXh0OntldmVudElkOmQtMn19LGc9e30sbD17bWVzc2FnZTooZy5ldmVudD0iZ3RtLmluaXQiLGdbImd0bS51bmlxdWVFdmVudElkIl09ZC0xLGcpLG1lc3NhZ2VDb250ZXh0OntldmVudElkOmQtMX19O25xLnVuc2hpZnQobCxjKTtiPWZ9cmV0dXJuIGJ9CmZ1bmN0aW9uIHhxKCl7Zm9yKHZhciBhPSExLGI7IXFxJiYoYj13cSgpKTspe3FxPSEwO2RlbGV0ZSBKZC5ldmVudE1vZGVsO0xkKCk7dmFyIGM9YixkPWMubWVzc2FnZSxlPWMubWVzc2FnZUNvbnRleHQ7aWYobnVsbD09ZClxcT0hMTtlbHNle2lmKGUuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbilmb3IodmFyIGY9WyJndG0uYWxsb3dsaXN0IiwiZ3RtLmJsb2NrbGlzdCIsImd0bS53aGl0ZWxpc3QiLCJndG0uYmxhY2tsaXN0IiwidGFnVHlwZUJsYWNrbGlzdCJdLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGw9ZltnXSxtPU1kKGwsMSk7aWYocmEobSl8fHZiKG0pKW09TihtKTtLZFtsXT1tfXRyeXtpZihwYShkKSl0cnl7ZC5jYWxsKE5kKX1jYXRjaChBKXt9ZWxzZSBpZihyYShkKSl7dmFyIG49CmQ7aWYoayhuWzBdKSl7dmFyIHA9blswXS5zcGxpdCgiLiIpLHE9cC5wb3AoKSxyPW4uc2xpY2UoMSksdD1NZChwLmpvaW4oIi4iKSwyKTtpZihudWxsIT10KXRyeXt0W3FdLmFwcGx5KHQscil9Y2F0Y2goQSl7fX19ZWxzZXt2YXIgdT12b2lkIDA7aWYod2EoZCkpYTp7aWYoZC5sZW5ndGgmJmsoZFswXSkpe3ZhciB2PU5wW2RbMF1dO2lmKHYmJighZS5mcm9tQ29udGFpbmVyRXhlY3V0aW9ufHwhT3BbZFswXV0pKXt1PXYoZCxlKTticmVhayBhfX11PXZvaWQgMH1lbHNlIHU9ZDt1JiYoYT11cSh1LGUpfHxhKX19ZmluYWxseXtlLmZyb21Db250YWluZXJFeGVjdXRpb24mJkxkKCEwKTt2YXIgeD1kWyJndG0udW5pcXVlRXZlbnRJZCJdO2lmKCJudW1iZXIiPT09dHlwZW9mIHgpe2Zvcih2YXIgeT1tcVtTdHJpbmcoeCldfHxbXSx3PTA7dzx5Lmxlbmd0aDt3Kyspb3EucHVzaCh5cSh5W3ddKSk7eS5sZW5ndGgmJm9xLnNvcnQocnEpO2RlbGV0ZSBtcVtTdHJpbmcoeCldO2xxPXh9cXE9ITF9fX1yZXR1cm4hYX1mdW5jdGlvbiB6cSgpe3ZhciBiPXhxKCk7dHJ5e1BwKFNoLkgpfWNhdGNoKGMpe31yZXR1cm4gYn0KZnVuY3Rpb24gUWsoYSl7aWYobHE8YS5ub3RCZWZvcmVFdmVudElkKXt2YXIgYj1TdHJpbmcoYS5ub3RCZWZvcmVFdmVudElkKTttcVtiXT1tcVtiXXx8W107bXFbYl0ucHVzaChhKX1lbHNlIG9xLnB1c2goeXEoYSkpLG9xLnNvcnQocnEpLEooZnVuY3Rpb24oKXtxcXx8eHEoKX0pfWZ1bmN0aW9uIHlxKGEpe3JldHVybnttZXNzYWdlOmEubWVzc2FnZSxtZXNzYWdlQ29udGV4dDphLm1lc3NhZ2VDb250ZXh0fX0KdmFyIEJxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShmKXt2YXIgZz17fTtpZihqcShmKSl7dmFyIGw9ZjtmPWpxKGwpP2wuZ2V0VW50cnVzdGVkTWVzc2FnZVZhbHVlKCk6dm9pZCAwO2cuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbj0hMH1yZXR1cm57bWVzc2FnZTpmLG1lc3NhZ2VDb250ZXh0Omd9fXZhciBiPWFiKHNkLlosW10pLGM9VVtzZC5aXT1VW3NkLlpdfHx7fTshMD09PWMucHJ1bmVkJiZRKDgzKTttcT1PaygpLmdldCgpO1JrKCk7RGooZnVuY3Rpb24oKXtpZighYy5ndG1Eb20pe2MuZ3RtRG9tPSEwO3ZhciBmPXt9O2IucHVzaCgoZi5ldmVudD0iZ3RtLmRvbSIsZikpfX0pO1VwKGZ1bmN0aW9uKCl7aWYoIWMuZ3RtTG9hZCl7Yy5ndG1Mb2FkPSEwO3ZhciBmPXt9O2IucHVzaCgoZi5ldmVudD0iZ3RtLmxvYWQiLGYpKX19KTtjLnN1YnNjcmliZXJzPShjLnN1YnNjcmliZXJzfHwwKSsxO3ZhciBkPWIucHVzaDtiLnB1c2g9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKHIpe2lmKFBlWzE4XSYmCndhKHIpJiYic2V0Ij09PXJbMF0pe3ZhciB0O2lmKDI9PXIubGVuZ3RoJiZ2YihyWzFdKSl0PXJbMV07ZWxzZSBpZigzPT1yLmxlbmd0aCYmayhyWzFdKSl7dmFyIHU9e307dD0odVtyWzFdXT1yWzJdLHUpfWVsc2UgcmV0dXJuO2MucGFnZUNvbmZpZz1jLnBhZ2VDb25maWd8fHt9O0IodCxmdW5jdGlvbih2LHgpe04oSmEodix4KSxjLnBhZ2VDb25maWcpfSl9fXZhciBnO2lmKDA8VS5TQU5EQk9YRURfSlNfU0VNQVBIT1JFKXtnPVtdO2Zvcih2YXIgbD0wO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspZ1tsXT1uZXcga3EoYXJndW1lbnRzW2xdKX1lbHNlIGc9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7dmFyIG09Zy5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIGEocil9KTtucS5wdXNoLmFwcGx5KG5xLG0pO3ZhciBuPWQuYXBwbHkoYixnKSxwPTMwMDtQZVsxNl0mJihwPU1hdGgubWF4KDEwMCxOdW1iZXIoIjEwMDAiKXx8cCkpO2lmKHRoaXMubGVuZ3RoPgpwKWZvcihRKDQpLGMucHJ1bmVkPSEwO3RoaXMubGVuZ3RoPnA7KWYodGhpcy5zaGlmdCgpKTt2YXIgcT0iYm9vbGVhbiIhPT10eXBlb2Ygbnx8bjtyZXR1cm4geHEoKSYmcX07dmFyIGU9Yi5zbGljZSgwKS5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIGEoZil9KTtQZVsxOF0mJmMucGFnZUNvbmZpZyYmZS51bnNoaWZ0KHttZXNzYWdlOktrKE4oYy5wYWdlQ29uZmlnKSksbWVzc2FnZUNvbnRleHQ6e319KTtucS5wdXNoLmFwcGx5KG5xLGUpO2lmKEFxKCkpe0ooenEpfX0sQXE9ZnVuY3Rpb24oKXt2YXIgYT0KITA7cmV0dXJuIGF9O2Z1bmN0aW9uIENxKGEpe2lmKG51bGw9PWF8fDA9PT1hLmxlbmd0aClyZXR1cm4hMTt2YXIgYj1OdW1iZXIoYSksYz1EYSgpO3JldHVybiBiPGMrM0U1JiZiPmMtOUU1fTt2YXIgRHE9e307RHEuemQ9bmV3IFN0cmluZygidW5kZWZpbmVkIik7dmFyIGRyPUcuY2xlYXJUaW1lb3V0LGVyPUcuc2V0VGltZW91dCxWPWZ1bmN0aW9uKGEsYixjLGQpe2lmKFJoKCkpe2ImJkooYil9ZWxzZSByZXR1cm4gZmIoYSxiLGMsZCl9LGZyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlfSxncj1mdW5jdGlvbigpe3JldHVybiBHLmxvY2F0aW9uLmhyZWZ9LGhyPWZ1bmN0aW9uKGEpe3JldHVybiBnZShpZShhKSwiZnJhZ21lbnQiKX0saXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGhlKGllKGEpKX0sanI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWQoYSxifHwyKX0sa3I9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2I/KGEuZXZlbnRDYWxsYmFjaz1iLGMmJihhLmV2ZW50VGltZW91dD1jKSxkPXNxKGEpKTpkPXNxKGEpO3JldHVybiBkfSxscj1mdW5jdGlvbihhLGIpe0dbYV09Yn0sWD1mdW5jdGlvbihhLGIsYyl7YiYmCih2b2lkIDA9PT1HW2FdfHxjJiYhR1thXSkmJihHW2FdPWIpO3JldHVybiBHW2FdfSxtcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE1mKGEsYix2b2lkIDA9PT1jPyEwOiEhYyl9LG5yPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMD09PVZmKGEsYixjKX0sb3I9ZnVuY3Rpb24oYSxiKXtpZihSaCgpKXtiJiZKKGIpfWVsc2UgaGIoYSxiKX0scHI9ZnVuY3Rpb24oYSl7cmV0dXJuISFLcShhLCJpbml0IiwhMSl9LHFyPWZ1bmN0aW9uKGEpe0lxKGEsImluaXQiLCEwKX0scnI9ZnVuY3Rpb24oYSxiLGMpe2FqJiYod2IoYSl8fG9qKGMsYixhKSl9Owp2YXIgUHI9WyJtYXRjaGVzIiwid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwibXNNYXRjaGVzU2VsZWN0b3IiLCJvTWF0Y2hlc1NlbGVjdG9yIl07ZnVuY3Rpb24gUXIoYSxiKXthPVN0cmluZyhhKTtiPVN0cmluZyhiKTt2YXIgYz1hLmxlbmd0aC1iLmxlbmd0aDtyZXR1cm4gMDw9YyYmYS5pbmRleE9mKGIsYyk9PT1jfXZhciBScj1uZXcgdWE7ZnVuY3Rpb24gU3IoYSxiLGMpe3ZhciBkPWM/ImkiOnZvaWQgMDt0cnl7dmFyIGU9U3RyaW5nKGIpK2QsZj1Sci5nZXQoZSk7Znx8KGY9bmV3IFJlZ0V4cChiLGQpLFJyLnNldChlLGYpKTtyZXR1cm4gZi50ZXN0KGEpfWNhdGNoKGcpe3JldHVybiExfX0KZnVuY3Rpb24gVHIoYSxiKXtmdW5jdGlvbiBjKGcpe3ZhciBsPWllKGcpLG09Z2UobCwicHJvdG9jb2wiKSxuPWdlKGwsImhvc3QiLCEwKSxwPWdlKGwsInBvcnQiKSxxPWdlKGwsInBhdGgiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1wvJC8sIiIpO2lmKHZvaWQgMD09PW18fCJodHRwIj09PW0mJiI4MCI9PT1wfHwiaHR0cHMiPT09bSYmIjQ0MyI9PT1wKW09IndlYiIscD0iZGVmYXVsdCI7cmV0dXJuW20sbixwLHFdfWZvcih2YXIgZD1jKFN0cmluZyhhKSksZT1jKFN0cmluZyhiKSksZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl0hPT1lW2ZdKXJldHVybiExO3JldHVybiEwfQpmdW5jdGlvbiBVcihhKXtyZXR1cm4gVnIoYSk/MTowfQpmdW5jdGlvbiBWcihhKXt2YXIgYj1hLmFyZzAsYz1hLmFyZzE7aWYoYS5hbnlfb2YmJkFycmF5LmlzQXJyYXkoYykpe2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1OKGEse30pO04oe2FyZzE6Y1tkXSxhbnlfb2Y6dm9pZCAwfSxlKTtpZihVcihlKSlyZXR1cm4hMH1yZXR1cm4hMX1zd2l0Y2goYVsiZnVuY3Rpb24iXSl7Y2FzZSAiX2NuIjpyZXR1cm4gMDw9U3RyaW5nKGIpLmluZGV4T2YoU3RyaW5nKGMpKTtjYXNlICJfY3NzIjp2YXIgZjthOntpZihiKXRyeXtmb3IodmFyIGc9MDtnPFByLmxlbmd0aDtnKyspe3ZhciBsPVByW2ddO2lmKGJbbF0pe2Y9YltsXShjKTticmVhayBhfX19Y2F0Y2gobSl7fWY9ITF9cmV0dXJuIGY7Y2FzZSAiX2V3IjpyZXR1cm4gUXIoYixjKTtjYXNlICJfZXEiOnJldHVybiBTdHJpbmcoYik9PT1TdHJpbmcoYyk7Y2FzZSAiX2dlIjpyZXR1cm4gTnVtYmVyKGIpPj1OdW1iZXIoYyk7Y2FzZSAiX2d0IjpyZXR1cm4gTnVtYmVyKGIpPk51bWJlcihjKTsKY2FzZSAiX2xjIjpyZXR1cm4gMDw9U3RyaW5nKGIpLnNwbGl0KCIsIikuaW5kZXhPZihTdHJpbmcoYykpO2Nhc2UgIl9sZSI6cmV0dXJuIE51bWJlcihiKTw9TnVtYmVyKGMpO2Nhc2UgIl9sdCI6cmV0dXJuIE51bWJlcihiKTxOdW1iZXIoYyk7Y2FzZSAiX3JlIjpyZXR1cm4gU3IoYixjLGEuaWdub3JlX2Nhc2UpO2Nhc2UgIl9zdyI6cmV0dXJuIDA9PT1TdHJpbmcoYikuaW5kZXhPZihTdHJpbmcoYykpO2Nhc2UgIl91bSI6cmV0dXJuIFRyKGIsYyl9cmV0dXJuITF9O09iamVjdC5mcmVlemUoe2RsOjEsaWQ6MX0pO09iamVjdC5mcmVlemUoWyJjb25maWciLCJldmVudCIsImdldCIsInNldCJdKTt2YXIgYXM9ZW5jb2RlVVJJLFk9ZW5jb2RlVVJJQ29tcG9uZW50LGJzPWliOwp2YXIgY3M9ZnVuY3Rpb24oYSxiKXtpZighYSlyZXR1cm4hMTt2YXIgYz1nZShpZShhKSwiaG9zdCIpO2lmKCFjKXJldHVybiExO2Zvcih2YXIgZD0wO2ImJmQ8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1iW2RdJiZiW2RdLnRvTG93ZXJDYXNlKCk7aWYoZSl7dmFyIGY9Yy5sZW5ndGgtZS5sZW5ndGg7MDxmJiYiLiIhPWUuY2hhckF0KDApJiYoZi0tLGU9Ii4iK2UpO2lmKDA8PWYmJmMuaW5kZXhPZihlLGYpPT1mKXJldHVybiEwfX1yZXR1cm4hMX0sZHM9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD17fSxlPSExLGY9MDthJiZmPGEubGVuZ3RoO2YrKylhW2ZdJiZhW2ZdLmhhc093blByb3BlcnR5KGIpJiZhW2ZdLmhhc093blByb3BlcnR5KGMpJiYoZFthW2ZdW2JdXT1hW2ZdW2NdLGU9ITApO3JldHVybiBlP2Q6bnVsbH07CmZ1bmN0aW9uIEJ0KCl7cmV0dXJuIEcuZ2FHbG9iYWw9Ry5nYUdsb2JhbHx8e319dmFyIEN0PWZ1bmN0aW9uKCl7dmFyIGE9QnQoKTthLmhpZD1hLmhpZHx8dGEoKTtyZXR1cm4gYS5oaWR9LER0PWZ1bmN0aW9uKGEsYil7dmFyIGM9QnQoKTtpZih2b2lkIDA9PWMudmlkfHxiJiYhYy5mcm9tX2Nvb2tpZSljLnZpZD1hLGMuZnJvbV9jb29raWU9Yn07dmFyIGh1PWZ1bmN0aW9uKCl7aWYocGEoRy5fX3VzcGFwaSkpe3ZhciBhPSIiO3RyeXtHLl9fdXNwYXBpKCJnZXRVU1BEYXRhIiwxLGZ1bmN0aW9uKGIsYyl7aWYoYyYmYil7dmFyIGQ9Yi51c3BTdHJpbmc7ZCYmUmVnRXhwKCJeW1xcZGEtekEtWi1dezEsMjB9JCIpLnRlc3QoZCkmJihhPWQpfX0pfWNhdGNoKGIpe31yZXR1cm4gYX19O3ZhciBNdT13aW5kb3csTnU9ZG9jdW1lbnQsT3U9ZnVuY3Rpb24oYSl7dmFyIGI9TXUuX2dhVXNlclByZWZzO2lmKGImJmIuaW9vJiZiLmlvbygpfHxhJiYhMD09PU11WyJnYS1kaXNhYmxlLSIrYV0pcmV0dXJuITA7dHJ5e3ZhciBjPU11LmV4dGVybmFsO2lmKGMmJmMuX2dhVXNlclByZWZzJiYib28iPT1jLl9nYVVzZXJQcmVmcylyZXR1cm4hMH1jYXRjaChmKXt9Zm9yKHZhciBkPUlmKCJBTVBfVE9LRU4iLFN0cmluZyhOdS5jb29raWUpLCEwKSxlPTA7ZTxkLmxlbmd0aDtlKyspaWYoIiRPUFRfT1VUIj09ZFtlXSlyZXR1cm4hMDtyZXR1cm4gTnUuZ2V0RWxlbWVudEJ5SWQoIl9fZ2FPcHRPdXRFeHRlbnNpb24iKT8hMDohMX07dmFyIFB1PXt9OwpmdW5jdGlvbiBYdShhKXtkZWxldGUgYS5ldmVudE1vZGVsW1QuVWJdO2R2KGEuZXZlbnRNb2RlbCl9dmFyIGR2PWZ1bmN0aW9uKGEpe0IoYSxmdW5jdGlvbihjKXsiXyI9PT1jLmNoYXJBdCgwKSYmZGVsZXRlIGFbY119KTt2YXIgYj1hW1QuS2FdfHx7fTtCKGIsZnVuY3Rpb24oYyl7Il8iPT09Yy5jaGFyQXQoMCkmJmRlbGV0ZSBiW2NdfSl9O3ZhciB6dj1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKFBlWzEzXSl7dmFyIGY9TWsoYSxiLGQpO2U9ZXx8e307UGsoZixjLGUpfWVsc2UgZT1lfHx7fSxlLmZyb21Db250YWluZXJFeGVjdXRpb249ITAsSW8oYixkLGEsZSl9LEF2PWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoUGVbMTNdKXt2YXIgZj1NayhhLGIsZCk7ZT1lfHx7fTtlLmRlZmVycmFibGU9ITA7UGsoZixjLGUpfWVsc2UgZT1lfHx7fSxlLmRlZmVycmFibGU9ITAsZS5mcm9tQ29udGFpbmVyRXhlY3V0aW9uPSEwLElvKGIsZCxhLGUpfSxDdj1mdW5jdGlvbihhLGIsYyl7fTsKZnVuY3Rpb24gQnYoYSxiLGMpe312YXIgWj17aDp7fX07CgoKCgoKWi5oLmU9WyJnb29nbGUiXSxmdW5jdGlvbigpeyhmdW5jdGlvbihhKXtaLl9fZT1hO1ouX19lLm09ImUiO1ouX19lLmlzVmVuZG9yVGVtcGxhdGU9ITA7Wi5fX2UucHJpb3JpdHlPdmVycmlkZT0wfSkoZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhLnZ0cF9ndG1DYWNoZWRWYWx1ZXMuZXZlbnQpfSl9KCk7CgoKWi5oLnY9WyJnb29nbGUiXSxmdW5jdGlvbigpeyhmdW5jdGlvbihhKXtaLl9fdj1hO1ouX192Lm09InYiO1ouX192LmlzVmVuZG9yVGVtcGxhdGU9ITA7Wi5fX3YucHJpb3JpdHlPdmVycmlkZT0wfSkoZnVuY3Rpb24oYSl7dmFyIGI9YS52dHBfbmFtZTtpZighYnx8IWIucmVwbGFjZSlyZXR1cm4hMTt2YXIgYz1qcihiLnJlcGxhY2UoL1xcXC4vZywiLiIpLGEudnRwX2RhdGFMYXllclZlcnNpb258fDEpLGQ9dm9pZCAwIT09Yz9jOmEudnRwX2RlZmF1bHRWYWx1ZTtycihkLCJ2IixhLnZ0cF9ndG1FdmVudElkKTtyZXR1cm4gZH0pfSgpOwoKWi5oLnJlcD1bImdvb2dsZSJdLGZ1bmN0aW9uKCl7dmFyIGE9ITE7KGZ1bmN0aW9uKGIpe1ouX19yZXA9YjtaLl9fcmVwLm09InJlcCI7Wi5fX3JlcC5pc1ZlbmRvclRlbXBsYXRlPSEwO1ouX19yZXAucHJpb3JpdHlPdmVycmlkZT0wfSkoZnVuY3Rpb24oYil7dmFyIGM9U2UoYi52dHBfY29udGFpbmVySWQpLGQ7c3dpdGNoKGMucHJlZml4KXtjYXNlICJBVyI6ZD1SbTticmVhaztjYXNlICJEQyI6ZD11bjticmVhaztjYXNlICJHRiI6ZD16bjticmVhaztjYXNlICJIQSI6ZD1FbjticmVhaztjYXNlICJVQSI6ZD1jbzticmVhaztkZWZhdWx0OkooYi52dHBfZ3RtT25GYWlsdXJlKTtyZXR1cm59SihiLnZ0cF9ndG1PblN1Y2Nlc3MpO2lmKGEpe3ZhciBlPWMuY29udGFpbmVySWQsCmY9VmgoKTtGbyghMCkubm90aWZ5Q29udGFpbmVyTG9hZGVkKGUsZil9SG8oYi52dHBfY29udGFpbmVySWQsZCxiLnZ0cF9yZW1vdGVDb25maWd8fHt9KX0pO30oKTsKClouaC5jaWQ9WyJnb29nbGUiXSxmdW5jdGlvbigpeyhmdW5jdGlvbihhKXtaLl9fY2lkPWE7Wi5fX2NpZC5tPSJjaWQiO1ouX19jaWQuaXNWZW5kb3JUZW1wbGF0ZT0hMDtaLl9fY2lkLnByaW9yaXR5T3ZlcnJpZGU9MH0pKGZ1bmN0aW9uKCl7cmV0dXJuIFNoLkh9KX0oKTsKCgoKCgoKWi5oLmdldD1bImdvb2dsZSJdLGZ1bmN0aW9uKCl7KGZ1bmN0aW9uKGEpe1ouX19nZXQ9YTtaLl9fZ2V0Lm09ImdldCI7Wi5fX2dldC5pc1ZlbmRvclRlbXBsYXRlPSEwO1ouX19nZXQucHJpb3JpdHlPdmVycmlkZT0wfSkoZnVuY3Rpb24oYSl7dmFyIGI9YS52dHBfc2V0dGluZ3MsYz1iLmV2ZW50UGFyYW1ldGVyc3x8e30sZD1TdHJpbmcoYS52dHBfZXZlbnROYW1lKSxlPXt9O2UuZXZlbnRJZD1hLnZ0cF9ndG1FdmVudElkO2UucHJpb3JpdHlJZD1hLnZ0cF9ndG1Qcmlvcml0eUlkOyhhLnZ0cF9kZWZlcnJhYmxlP0F2Onp2KShTdHJpbmcoYi5zdHJlYW1JZCksZCxlLmV2ZW50SWQsYyxlKTthLnZ0cF9ndG1PblN1Y2Nlc3MoKX0pfSgpOwoKCgoKCgoKCgp2YXIgRHY9e307RHYuZGF0YUxheWVyPU5kO0R2LmNhbGxiYWNrPWZ1bmN0aW9uKGEpe0RkLmhhc093blByb3BlcnR5KGEpJiZwYShEZFthXSkmJkRkW2FdKCk7ZGVsZXRlIERkW2FdfTtEdi5ib290c3RyYXA9MDtEdi5fc3B4PSExOwooZnVuY3Rpb24oYSl7aWYoIUdbIl9fVEFHR1lfSU5TVEFMTEVEIl0pe3ZhciBiPSExO2lmKEgucmVmZXJyZXIpe3ZhciBjPWllKEgucmVmZXJyZXIpO2I9ImNjdC5nb29nbGUiPT09ZmUoYywiaG9zdCIpfWlmKCFiKXt2YXIgZD1NZigiZ29vZ1RhZ2d5UmVmZXJyZXIiKTtiPWQubGVuZ3RoJiZkWzBdLmxlbmd0aH1iJiYoR1siX19UQUdHWV9JTlNUQUxMRUQiXT0hMCxmYigiaHR0cHM6Ly9jY3QuZ29vZ2xlL3RhZ2d5L2FnZW50LmpzIikpfQp2YXIgZj1mdW5jdGlvbihxKXt2YXIgcj0iR1RNIix0PSJHVE0iO3I9Ik9HVCIsdD0iR1RBRyI7dmFyIHU9R1siZ29vZ2xlLnRhZ21hbmFnZXIuZGVidWd1aTIucXVldWUiXTt1fHwodT1bXSxHWyJnb29nbGUudGFnbWFuYWdlci5kZWJ1Z3VpMi5xdWV1ZSJdPXUsZmIoImh0dHBzOi8vIitzZC5rYysiL2RlYnVnL2Jvb3RzdHJhcD9pZD0iK1NoLkgrIiZzcmM9Iit0KyImY29uZD0iK3ErIiZndG09IitiaSgpKSk7dmFyIHY9e21lc3NhZ2VUeXBlOiJDT05UQUlORVJfU1RBUlRJTkciLGRhdGE6e3NjcmlwdFNvdXJjZTokYSxjb250YWluZXJQcm9kdWN0OnIsZGVidWc6ITEsaWQ6U2guSH19O3YuZGF0YS5yZXN1bWU9ZnVuY3Rpb24oKXthKCl9O3NkLnpoJiYodi5kYXRhLmluaXRpYWxQdWJsaXNoPQohMCk7dS5wdXNoKHYpfSxnPXZvaWQgMCxsPWdlKEcubG9jYXRpb24sInF1ZXJ5IiwhMSx2b2lkIDAsImd0bV9kZWJ1ZyIpO0NxKGwpJiYoZz0yKTtpZighZyYmSC5yZWZlcnJlcil7dmFyIG09aWUoSC5yZWZlcnJlcik7InRhZ2Fzc2lzdGFudC5nb29nbGUuY29tIj09PWZlKG0sImhvc3QiKSYmKGc9Myl9aWYoIWcpe3ZhciBuPU1mKCJfX1RBR19BU1NJU1RBTlQiKTtuLmxlbmd0aCYmblswXS5sZW5ndGgmJihnPTQpfWlmKCFnKXt2YXIgcD1ILmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtdGFnLWFzc2lzdGFudC1wcmVzZW50Iik7Q3EocCkmJihnPTUpfWcmJiRhP2YoZyk6YSgpfSkoZnVuY3Rpb24oKXt2YXIgYT0hMTsKYSYmZWsoIklOSVQiKTtkZigpLm8oKTtSbCgpO2RoLmVuYWJsZV9nYnJhaWRfY29va2llX3dyaXRlPSEwO3ZhciBiPSEhVVtTaC5IXTshYiYmU2guamMmJihiPSEhVVsiY3RpZF8iK1NoLmpjXSk7aWYoYil7dmFyIGM9VS56b25lcztjJiZjLnVucmVnaXN0ZXJDaGlsZChVaCgpKTt9ZWxzZXtmb3IodmFyIGQ9VmgoKSxlPTA7ZTxkLmxlbmd0aDtlKyspe3ZhciBmPWRbZV0sZz1TaC5IO1UuYWRkRGVzdGluYXRpb25Ub0NvbnRhaW5lcj9VLmFkZERlc3RpbmF0aW9uVG9Db250YWluZXIoZixnKTooVS5wZW5kaW5nRGVzdGluYXRpb25JZHM9VS5wZW5kaW5nRGVzdGluYXRpb25JZHN8fFtdLFUucGVuZGluZ0Rlc3RpbmF0aW9uSWRzLnB1c2goW2YsZ10pKX1mb3IodmFyIGw9ZGF0YS5yZXNvdXJjZXx8e30sbT1sLm1hY3Jvc3x8W10sbj0wO248bS5sZW5ndGg7bisrKVZiLnB1c2gobVtuXSk7Zm9yKHZhciBwPWwudGFnc3x8W10scT0wO3E8cC5sZW5ndGg7cSsrKVliLnB1c2gocFtxXSk7Zm9yKHZhciByPWwucHJlZGljYXRlc3x8W10sdD0wO3Q8ci5sZW5ndGg7dCsrKVhiLnB1c2goclt0XSk7Zm9yKHZhciB1PWwucnVsZXN8fFtdLHY9MDt2PHUubGVuZ3RoO3YrKyl7Zm9yKHZhciB4PQp1W3ZdLHk9e30sdz0wO3c8eC5sZW5ndGg7dysrKXlbeFt3XVswXV09QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeFt3XSwxKTtXYi5wdXNoKHkpfSRiPVo7YWM9VXI7VVtTaC5IXT1EdjtTaC5qYyYmKFVbImN0aWRfIitTaC5qY109RHYpO2Zvcih2YXIgQT1YaCgpLHo9VWgoKSxDPTA7Qzx6Lmxlbmd0aDtDKyspQS5jb250YWluZXJbeltDXV09ITA7Zm9yKHZhciBFPVZoKCksRj0wO0Y8RS5sZW5ndGg7RisrKUEuZGVzdGluYXRpb25bRVtGXV09ITA7QS5jYW5vbmljYWxbU2guamNdPSEwO0dhKEVkLFouaCk7CmNjPWxjO0JxKCk7eWo9ITE7emo9MDtpZigiaW50ZXJhY3RpdmUiPT1ILnJlYWR5U3RhdGUmJiFILmNyZWF0ZUV2ZW50T2JqZWN0fHwiY29tcGxldGUiPT1ILnJlYWR5U3RhdGUpQmooKTtlbHNle2piKEgsIkRPTUNvbnRlbnRMb2FkZWQiLEJqKTtqYihILCJyZWFkeXN0YXRlY2hhbmdlIixCaik7aWYoSC5jcmVhdGVFdmVudE9iamVjdCYmSC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwpe3ZhciBEPSEwO3RyeXtEPSFHLmZyYW1lRWxlbWVudH1jYXRjaChPKXt9RCYmQ2ooKX1qYihHLCJsb2FkIixCail9UnA9ITE7ImNvbXBsZXRlIj09PUgucmVhZHlTdGF0ZT9UcCgpOmpiKEcsImxvYWQiLFRwKTsKYWomJkcuc2V0SW50ZXJ2YWwoVWksODY0RTUpO0NkPURhKCk7RHYuYm9vdHN0cmFwPUNkO2lmKGEpe3ZhciBQPWZrKCJJTklUIik7fX19KTsKCn0pKCkK(Line 37)
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: https://managehosting144202b3-aruba.zukunst.at/login.php?bdyx0Ld2ln93DyAcKy4h8JGQ49mIwlyNVzKLhj8Lpnk0p5xVJtKzmtIbAT80iBNgWDCB1wKqyAEj5kz0p8rFaebmUr9RFblwZ7D6o3FbHROycLol8j9lbqL1
Message:
Refused to load the script 'https://w.usabilla.com/719697a0b3af.js?lv=1' 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 warning URL: about:srcdoc
Message:
An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing.

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.

managehosting144202b3-aruba.zukunst.at
w.usabilla.com
www.google-analytics.com
w.usabilla.com
www.google-analytics.com
172.171.241.51
015fcd7aac5929a1c6619aaa37ab852552ed42a800c116216049ab9e8433ea27
398cdf1b27ef247e5bc77805f266bb441e60355463fc3d1776f41aae58b08cf1
402a2a5420e7d4bd3943ae8770d80858e3449b96e7df4a3973b87b1d08ce5813
40732e9dcfa704cf615e4691bb07aecfd1cc5e063220a46e4a7ff6560c77f5db
42070923ab969239a90ad7906011ed437355696d75340bb7677313fcb945b08a
502a3766309b1092890b0e535e784678bfd584a598bf84e20fd530424c79ecbd
52897547cfc7be3ea57d0a07398a6c8d5f01c9cb02309c7ab2ba9ab27ebd73a4
528a1886f07e7777a6ee359f49155202a3ca8670e7f8feb399ca186a8bf80ac6
66b804e7a96a87c11e1dd74ea04ac2285df5ad9043f48046c3e5000114d39b1c
86ad3d8f9f61e5f04d64235f71997729afae5272d54e276dd0165f6ef288bd85
918b7dc3e2e2d015c16ce08b57bcb64d2253bafc1707658f361e72865498e537
933586ce236a056afb0307f7439bfa146555502a99d2d3f3f60af907c7a56e1d
a1925038db769477ab74b4df34350c35688a795bb718727b0f4292a4a78a6210
a525f163e73542be1b82c5ae4e4beed74d137d56161ac5b02833a279ef6d9b61
ae3759174cc8b31507df02ef40c88a63857b4ef7b8dd8733899c08e557ce9366
bcedcafd81248b08cb428b22618a38866d0cee85b4e9ecd27ef734d0533e2792
e2aea7d05ea8c125ee448f0c47b1aef02c52ce13a16871992bc4158c80546f83
ec227d9ca399ba8a2e7cebb750bee9a167f55232808dffe912449692df8fa4b3
ef9453f74b2617d43dcef4242cf5845101fcfb57289c81bceb20042b0023a192