headers info

Domain name: finya dot de

HTTP headers

HTTP headers allow the client and the server to pass additional information with the request or the response. A request header consists of its case-insensitive name followed by a colon ':', then by its value (without line breaks). Leading white space before the value is ignored.

Name Value
HTTP/1.1 301 Moved Permanently
HTTP/1.1 200 OK
Date Thu, 28 Sep 2017 05:33:18 GMT
Server Apache
X-XSS-Protection 1; mode=block
Cache-Control private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires Thu, 09 Feb 1978 12:00:00 GMT
Pragma no-cache
X-Content-Type-Options nosniff
Vary Accept-Encoding
Content-Type text/html;charset=utf-8
Set-Cookie _fds=4b9f68c20bdb7b0ec23c1cc93e9588ce86d5097ec86bdd14ee; path=/; domain=.finyade; HttpOnly
Set-Cookie fy_lc=de_DE; expires=Fri, 28-Sep-2018 05:33:18 GMT; path=/; httponly
Set-Cookie msfcid2=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; httponly
Connection close
Transfer-Encoding chunked

HTML <head>

The <head> element is a container for metadata (data about data) and is placed between the <html> tag and the <body> tag.

HTML metadata is data about the HTML document. Metadata is not displayed.

Metadata typically define the document title, character set, styles, links, scripts, and other meta information.

The following tags describe metadata: <title>, <style>, <meta>, <link>, <script>, and <base>.

<title>

Title contains 4 words. 33 bytes.

<meta> description

Meta description contains 12 words. 90 bytes.

<meta> keywords

Meta keywords are missing.

<meta> other (9 records found)

Name Value
Meta #1
charset utf-8
Meta #2
equiv content-type
content text/html; charset=utf-8
Meta #3
equiv X-UA-Compatible
content IE=edge
Meta #4
name application-name
content Finya
Meta #5
name msapplication-TileColor
content #2270b9
Meta #6
name fdghrt350
content ICAgIHZhciBkaXNhYmxlUmFuZCA9IGZhbHNlOwogICAgdmFyIF9ldXJ1c2QgPSBwYXJzZUZsb2F0KCcxLDInKTsKICAgIHZhciBhZFVuaXRSZXBvUHJlYmlkID0geyIxMDA1Ijp7ImNvZGUiOiJkaXYtYWQtZ3B0LXNjcmlwdCIsInNpemVzIjpbWzEsMV1dLCJiaWRzIjpbeyJiaWRkZXIiOiJqdXN0cHJlbWl1bSIsInBhcmFtcyI6eyJhbGxvdyI6WyJwdSIsImZhIiwiY2YiLCJwYSIsImxiIiwiYnIiLCJmaSJdLCJ6b25lIjoiMzcwNzYifX1dfX07CiAgICB2YXIgYWRVbml0UmVwb0FhbSA9IHsiMTAwNSI6eyJzbG90SUQiOiJkaXYtYWQtZ3B0LXNjcmlwdCIsInNsb3ROYW1lIjoiLzEwMDk2NTAvZGVza3RvcF9zY3JpcHQvb3RoZXIiLCJzaXplcyI6W119fTsKICAgIHZhciBwYmpzID0gcGJqcyB8fCB7fTsKICAgIHBianMucXVlID0gcGJqcy5xdWUgfHwgW107CgogICAgdmFyIEFkVW5pdFJlcG8gPSBmdW5jdGlvbihwQWRVbml0cykgewogICAgdmFyIGFkVW5pdHMgPSBwQWRVbml0czsKICAgIHZhciBnZXRBZFVuaXRzID0gZnVuY3Rpb24oYWRzLCBkaXZQcm9wZXJ0eSkgewogICAgICAgIHZhciBmaWx0ZXJlZEFkVW5pdHMgPSBbXTsKICAgICAgICBhZHMuZm9yRWFjaChmdW5jdGlvbihhZCkgewogICAgICAgICAgICB2YXIgdW5pdCA9IGRlZXBDb3B5KGFkVW5pdHNbYWQuYWRJZF0pOwogICAgICAgICAgICBpZiAodW5pdCkgewogICAgICAgICAgICAgICAgaWYoYWQuZGl2SWQpIHsKICAgICAgICAgICAgICAgICAgICB1bml0W2RpdlByb3BlcnR5XSA9IGFkLmRpdklkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmlsdGVyZWRBZFVuaXRzLnB1c2godW5pdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGZpbHRlcmVkQWRVbml0czsKICAgIH07CgogICAgdmFyIGdldE5ld1JlcG9MaW1pdGVkVG9BZElkcyA9IGZ1bmN0aW9uKGFkT2JqcykgewogICAgICAgIHZhciBsaW1pdGVkQWRVbml0cyA9IGRlZXBDb3B5KGFkVW5pdHMpOwoKICAgICAgICBmb3IgKHZhciBhZElkIGluIGxpbWl0ZWRBZFVuaXRzKSB7CiAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICBhZE9ianMuZm9yRWFjaChmdW5jdGlvbihhZE9iaikgewogICAgICAgICAgICAgICAgaWYocGFyc2VJbnQoYWRPYmouYWRJZCkgPT09IHBhcnNlSW50KGFkSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgICAgZGVsZXRlIGxpbWl0ZWRBZFVuaXRzW2FkSWRdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBuZXdBZFVuaXRSZXBvID0gbmV3IEFkVW5pdFJlcG8obGltaXRlZEFkVW5pdHMpOwogICAgICAgIG5ld0FkVW5pdFJlcG8uYWRkQ29uc3RyYWludHMoY29uc3RyYWludHMuZ2V0KCkpOwogICAgICAgIG5ld0FkVW5pdFJlcG8uYWRkQ2hhbmdlcyhjaGFuZ2VzLmdldCgpKTsKCiAgICAgICAgcmV0dXJuIG5ld0FkVW5pdFJlcG87CiAgICB9OwogICAgdmFyIGFwcGx5RmlsdGVycyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBmaWx0ZXJlZEFkVW5pdHMgPSBkZWVwQ29weShhZFVuaXRzKTsKCiAgICAgICAgdmFyIHRvQXBwbHkgPSBjb25zdHJhaW50cy5nZXQoKTsKICAgICAgICB0b0FwcGx5LmZvckVhY2goZnVuY3Rpb24oY29uc3RyYWludCkgewogICAgICAgICAgICBpZiAoY29uc3RyYWludC5pbml0ICYmIHR5cGVvZihjb25zdHJhaW50LmluaXQgPT0gImZ1bmN0aW9uIikpIHsKICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQuaW5pdC5hcHBseShjb25zdHJhaW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBmb3IgKHZhciBhZElkIGluIGZpbHRlcmVkQWRVbml0cykgewogICAgICAgICAgICBmaWx0ZXJlZEFkVW5pdHNbYWRJZF0uYmlkcyA9IGZpbHRlcmVkQWRVbml0c1thZElkXS5iaWRzLmZpbHRlcihmdW5jdGlvbihiaWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0b0FwcGx5LmV2ZXJ5KGZ1bmN0aW9uKGNvbnN0cmFpbnQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWNvbnN0cmFpbnQudmlvbGF0ZXMuYXBwbHkoY29uc3RyYWludCwgW2JpZCwgYWRJZF0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKCFmaWx0ZXJlZEFkVW5pdHNbYWRJZF0uYmlkcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWx0ZXJlZEFkVW5pdHNbYWRJZF07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBuZXdBZFVuaXRSZXBvID0gbmV3IEFkVW5pdFJlcG8oZmlsdGVyZWRBZFVuaXRzKTsKICAgICAgICBuZXdBZFVuaXRSZXBvLmFkZENvbnN0cmFpbnRzKGNvbnN0cmFpbnRzLmdldCgpKTsKICAgICAgICBuZXdBZFVuaXRSZXBvLmFkZENoYW5nZXMoY2hhbmdlcy5nZXQoKSk7CiAgICAgICAgcmV0dXJuIG5ld0FkVW5pdFJlcG87CiAgICB9OwoKICAgIHZhciBjaGFuZ2VzID0gY3JlYXRlUmVwbygpOwogICAgdmFyIGFwcGx5Q2hhbmdlcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB0b0FwcGx5ID0gY2hhbmdlcy5nZXQoKTsKICAgICAgICBmb3IgKHZhciBhZElkIGluIGFkVW5pdHMpIHsKICAgICAgICAgICAgdG9BcHBseS5mb3JFYWNoKGZ1bmN0aW9uKGNoYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKGFkSWQgPT0gY2hhbmdlLmFkSWQpIHsKICAgICAgICAgICAgICAgICAgICBjaGFuZ2UucHJvY2Vzcy5hcHBseShjaGFuZ2UsIFthZFVuaXRzW2FkSWRdXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICB9OwogICAgdmFyIGFkZENoYW5nZSA9IGZ1bmN0aW9uKGNoYW5nZSkgewogICAgICAgIGNoYW5nZXMuYWRkKGNoYW5nZSk7CiAgICB9OwogICAgdmFyIGFkZENoYW5nZXMgPSBmdW5jdGlvbihjaGFuZ2VzKSB7CiAgICAgICAgY2hhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uKGNoYW5nZSkgewogICAgICAgICAgICBhZGRDaGFuZ2UoY2hhbmdlKTsKICAgICAgICB9KTsKICAgIH07CgogICAgdmFyIGdldEFkSWRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGFkSWRzID0gW107CiAgICAgICAgZm9yICh2YXIgYWRJZCBpbiBhZFVuaXRzKSB7CiAgICAgICAgICAgIGFkSWRzLnB1c2gocGFyc2VJbnQoYWRJZCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWRJZHM7CiAgICB9OwoKICAgIHZhciBjb25zdHJhaW50cyA9IGNyZWF0ZVJlcG8oKTsKICAgIHZhciBhZGRDb25zdHJhaW50ID0gZnVuY3Rpb24oY29uc3RyYWludCkgewogICAgICAgIGNvbnN0cmFpbnRzLmFkZChjb25zdHJhaW50KTsKICAgIH07CiAgICB2YXIgYWRkQ29uc3RyYWludHMgPSBmdW5jdGlvbihjb25zdHJhaW50cykgewogICAgICAgIGNvbnN0cmFpbnRzLmZvckVhY2goZnVuY3Rpb24oY29uc3RyYWludCkgewogICAgICAgICAgICBhZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpOwogICAgICAgIH0pOwogICAgfTsKICAgIHZhciBnZXRDb25zdHJhaW50ID0gZnVuY3Rpb24oaWQpIHsKICAgICAgICByZXR1cm4gY29uc3RyYWludHMuZ2V0KGlkKTsKICAgIH07CgogICAgcmV0dXJuIHsKICAgICAgICBnZXROZXdSZXBvTGltaXRlZFRvQWRJZHM6IGdldE5ld1JlcG9MaW1pdGVkVG9BZElkcywKICAgICAgICBhcHBseUZpbHRlcnM6IGFwcGx5RmlsdGVycywKICAgICAgICBhcHBseUNoYW5nZXM6IGFwcGx5Q2hhbmdlcywKICAgICAgICBhZGRDaGFuZ2U6IGFkZENoYW5nZSwKICAgICAgICBhZGRDaGFuZ2VzOiBhZGRDaGFuZ2VzLAogICAgICAgIGdldEFkSWRzOiBnZXRBZElkcywKICAgICAgICBnZXRBZFVuaXRzOiBnZXRBZFVuaXRzLAogICAgICAgIGFkZENvbnN0cmFpbnQ6IGFkZENvbnN0cmFpbnQsCiAgICAgICAgYWRkQ29uc3RyYWludHM6IGFkZENvbnN0cmFpbnRzLAogICAgICAgIGdldENvbnN0cmFpbnQ6IGdldENvbnN0cmFpbnQKICAgIH07Cn07CiAgICB2YXIgY3JlYXRlQXVjdGlvblByZWJpZCA9IGZ1bmN0aW9uKGFkVW5pdHMpIHsKCiAgICB2YXIgYWRVbml0UmVwbyA9IG5ldyBBZFVuaXRSZXBvKGFkVW5pdHMpOwoKICAgIHZhciBwcm9jZXNzZWQgPSBmYWxzZTsKICAgIHZhciBoYXNCaWRzTWFwID0ge307CgogICAgdmFyIHBianNCYWNrdXAgPSB7CiAgICAgICAgaXNPYmZ1c2NhdGVkOiBmYWxzZSwKICAgICAgICBmdW5jczoge30sCiAgICAgICAgdmFsczoge30sCiAgICAgICAgb2JmdXNjYXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmIChwYmpzQmFja3VwLmlzT2JmdXNjYXRlZCB8fCAhcHJvY2Vzc2VkKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGN1cnJlbnQ7CiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbJ19iaWRzUmVxdWVzdGVkJywgJ19iaWRzUmVjZWl2ZWQnLCAnX3dpbm5pbmdCaWRzJ107CiAgICAgICAgICAgIHdoaWxlIChjdXJyZW50ID0gdmFsdWVzLnBvcCgpKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBianNbY3VycmVudF0gPT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgICAgICAgICBwYmpzQmFja3VwLnZhbHNbY3VycmVudF0gPSBwYmpzW2N1cnJlbnRdOwogICAgICAgICAgICAgICAgICAgIHBianNbY3VycmVudF0gPSBbXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHJldHVybkVtcHR5T2JqZWN0ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHt9OwogICAgICAgICAgICB9OwogICAgICAgICAgICB2YXIgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwYmpzKTsKICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnQgPSBwcm9wcy5wb3AoKSkgewogICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgcGJqc1tjdXJyZW50XSA9PSAnZnVuY3Rpb24nKSAmJiAoY3VycmVudC5pbmRleE9mKCdnZXQnKSA9PSAwKSkgewogICAgICAgICAgICAgICAgICAgIHBianNCYWNrdXAuZnVuY3NbY3VycmVudF0gPSBwYmpzW2N1cnJlbnRdOwogICAgICAgICAgICAgICAgICAgIHBianNbY3VycmVudF0gPSByZXR1cm5FbXB0eU9iamVjdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBwYmpzQmFja3VwLmlzT2JmdXNjYXRlZCA9IHRydWU7CiAgICAgICAgfSwKCiAgICAgICAgcmVzdG9yZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZighcGJqc0JhY2t1cC5pc09iZnVzY2F0ZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHBianNCYWNrdXAudmFscykgewogICAgICAgICAgICAgICAgcGJqc1twcm9wXSA9IHBianNCYWNrdXAudmFsc1twcm9wXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBwYmpzQmFja3VwLmZ1bmNzKSB7CiAgICAgICAgICAgICAgICBwYmpzW3Byb3BdID0gcGJqc0JhY2t1cC5mdW5jc1twcm9wXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcGJqc0JhY2t1cC5pc09iZnVzY2F0ZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICB9OwoKICAgIHZhciBhdWN0aW9uUHJlYmlkID0gewogICAgICAgIGlkOiAicHJlYmlkIiwKICAgICAgICBUSU1FT1VUOiA3NTAsCgogICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBwYmpzLnF1ZS5wdXNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKCFnZXRDb29raWUoJ3ByZWJpZE9iZnVzY2F0aW9uRGlzYWJsZWQnKSkgewogICAgICAgICAgICAgICAgICAgIHBianMubG9nZ2luZyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICBpZiAocGJqcy5vbkV2ZW50ICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGJqcy5vbkV2ZW50KCdyZXF1ZXN0QmlkcycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJqc0JhY2t1cC5yZXN0b3JlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL3NldCBjdXN0b20gY29uZmlnIG9iamVjdAogICAgICAgICAgICAgICAgcGJqcy5zZXRQcmljZUdyYW51bGFyaXR5KHsKICAgICAgICAgICAgICAgICAgICAnYnVja2V0cyc6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgICdwcmVjaXNpb24nOiAyLAogICAgICAgICAgICAgICAgICAgICAgICAnbWluJzogLjMsCiAgICAgICAgICAgICAgICAgICAgICAgICdtYXgnOiAyMCwKICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlbWVudCc6IDAuMDEKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJ3ByZWNpc2lvbic6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICdtaW4nOiAyMCwKICAgICAgICAgICAgICAgICAgICAgICAgJ21heCc6IDEwMCwKICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlbWVudCc6IDEKICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgcGJqcy5zZXRCaWRkZXJTZXF1ZW5jZSgncmFuZG9tJyk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcGJqcy5xdWUucHVzaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHBianMub25FdmVudCgnYmlkV29uJywgZnVuY3Rpb24oYmlkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoYmlkLmJpZGRlciA9PT0gJ2p1c3RwcmVtaXVtJyAmJiBiaWQuZm9ybWF0ID09PSAncGQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJ2hlYWRlcicpLmNzcygncG9zaXRpb24nLCAncmVsYXRpdmUnKS5jc3MoJ3RvcCcsICdpbmhlcml0Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNwcmVoZWFkZXInKS5oaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmKGJpZC5iaWRkZXIgPT09ICdqdXN0cHJlbWl1bScgJiYgYmlkLmZvcm1hdCA9PT0gJ3dwJykgewogICAgICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ2pweC13cCcpOwogICAgICAgICAgICAgICAgICAgICAgICAkKCcjcHJlaGVhZGVyJykuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIHN0YXJ0OiBmdW5jdGlvbihhZE9ianMpIHsKICAgICAgICAgICAgcHJvY2Vzc2VkID0gZmFsc2U7CiAgICAgICAgICAgIHBianNCYWNrdXAucmVzdG9yZSgpOwoKICAgICAgICAgICAgdmFyIGFkVW5pdFJlcG9MaW1pdGVkID0gYWRVbml0UmVwby5nZXROZXdSZXBvTGltaXRlZFRvQWRJZHMoYWRPYmpzKTsKICAgICAgICAgICAgdmFyIGFkVW5pdFJlcG9GaWx0ZXJlZCA9IGFkVW5pdFJlcG9MaW1pdGVkLmFwcGx5RmlsdGVycygpOwogICAgICAgICAgICBhZFVuaXRSZXBvRmlsdGVyZWQuYXBwbHlDaGFuZ2VzKCk7CiAgICAgICAgICAgIHZhciBhZFVuaXRzID0gYWRVbml0UmVwb0ZpbHRlcmVkLmdldEFkVW5pdHMoYWRPYmpzLCAnY29kZScpOwogICAgICAgICAgICB2YXIgcHJvbWlzZSA9IGFkU2xvdHMuY3JlYXRlU2xvdHMoYWRVbml0cyk7CiAgICAgICAgICAgIGhhc0JpZHNNYXAgPSB7fTsKICAgICAgICAgICAgZm9yKHZhciBpbmRleCBpbiBhZFVuaXRzKSB7CiAgICAgICAgICAgICAgICBoYXNCaWRzTWFwW2FkVW5pdHNbaW5kZXhdLmNvZGVdID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGFkVW5pdHMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgcGJqcy5xdWUucHVzaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBwYmpzLnJlcXVlc3RCaWRzKHsKICAgICAgICAgICAgICAgICAgICAgICAgYmlkc0JhY2tIYW5kbGVyOiBmdW5jdGlvbihiaWRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVjdGlvblByZWJpZC5vbkF1Y3Rpb25FbmQoYmlkcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogYXVjdGlvblByZWJpZC5USU1FT1VULAogICAgICAgICAgICAgICAgICAgICAgICBhZFVuaXRzOiBhZFVuaXRzCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHBianMucXVlLnB1c2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgYXVjdGlvblByZWJpZC5vbkF1Y3Rpb25FbmQoe30pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdldEhhc0JpZHNNYXA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gaGFzQmlkc01hcDsKICAgICAgICB9LAogICAgICAgIGlzUHJvY2Vzc2VkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NlZDsKICAgICAgICB9LAogICAgICAgIGp1c3RQcmVtaXVtV2FsbHBhcGVyRmlsdGVyOiBmdW5jdGlvbihiaWRSZXNwb25zZXMsIGJpZHNSZWNlaXZlZCkgewogICAgICAgICAgICB2YXIgYWRVbml0Q29kZVRvcCA9ICdkaXYtYWQtZ3B0LXRvcG9maGVhZCc7CiAgICAgICAgICAgIHZhciBhZFVuaXRDb2RlU2lkZWJhciA9ICdkaXYtYWQtZ3B0LXJjYW52YXMnOwoKICAgICAgICAgICAgdmFyIGlzSnVzdFByZW1pdW1XUEJpZCA9IGZ1bmN0aW9uKGJpZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGJpZC5iaWRkZXIgPT0gJ2p1c3RwcmVtaXVtJyAmJiBiaWQuZm9ybWF0ID09ICd3cCc7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZhciBoaWdoZXN0Qmlkc1RvcE9mSGVhZCA9IHsKICAgICAgICAgICAgICAgIHdpbm5lcjogdW5kZWZpbmVkLAogICAgICAgICAgICAgICAgcnVubmluZ1VwOiB1bmRlZmluZWQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGJpZFJlc3BvbnNlc1thZFVuaXRDb2RlVG9wXSkgewogICAgICAgICAgICAgICAgaGlnaGVzdEJpZHNUb3BPZkhlYWQgPSBiaWRSZXNwb25zZXNbYWRVbml0Q29kZVRvcF0uYmlkcy5yZWR1Y2UoCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oaGlnaGVzdEJpZHMsIGJpZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhpZ2hlc3RCaWRzLndpbm5lcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdEJpZHMud2lubmVyID0gYmlkOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpZC5jcG0gPiBoaWdoZXN0Qmlkcy53aW5uZXIuY3BtIHx8IGJpZC5jcG0gPT0gaGlnaGVzdEJpZHMud2lubmVyLmNwbSAmJiAhaXNKdXN0UHJlbWl1bVdQQmlkKGhpZ2hlc3RCaWRzLndpbm5lcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RCaWRzLnJ1bm5pbmdVcCA9IGhpZ2hlc3RCaWRzLndpbm5lcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RCaWRzLndpbm5lciA9IGJpZDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaGlnaGVzdEJpZHMucnVubmluZ1VwIHx8IGJpZC5jcG0gPiBoaWdoZXN0Qmlkcy5ydW5uaW5nVXAuY3BtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0Qmlkcy5ydW5uaW5nVXAgPSBiaWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhpZ2hlc3RCaWRzOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaGlnaGVzdEJpZHNUb3BPZkhlYWQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHdhbGxwYXBlcldpbnNUb3BPZkhlYWQgPSAoaGlnaGVzdEJpZHNUb3BPZkhlYWQud2lubmVyICYmIGlzSnVzdFByZW1pdW1XUEJpZChoaWdoZXN0Qmlkc1RvcE9mSGVhZC53aW5uZXIpKTsKICAgICAgICAgICAgaWYgKHdhbGxwYXBlcldpbnNUb3BPZkhlYWQpIHsKICAgICAgICAgICAgICAgIHZhciBydW5uaW5nVXBDcG0gPSAoaGlnaGVzdEJpZHNUb3BPZkhlYWQucnVubmluZ1VwID8gaGlnaGVzdEJpZHNUb3BPZkhlYWQucnVubmluZ1VwLmNwbSA6IDApOwogICAgICAgICAgICAgICAgdmFyIGhpZ2hlc3RCaWRDcG1TaWRlYmFyID0gMDsKICAgICAgICAgICAgICAgIGlmIChiaWRSZXNwb25zZXNbYWRVbml0Q29kZVNpZGViYXJdKSB7CiAgICAgICAgICAgICAgICAgICAgaGlnaGVzdEJpZENwbVNpZGViYXIgPSBiaWRSZXNwb25zZXNbYWRVbml0Q29kZVNpZGViYXJdLmJpZHMucmVkdWNlKAogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihoaWdoZXN0QmlkQ3BtLCBiaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGlnaGVzdEJpZENwbSB8fCBiaWQuY3BtID4gaGlnaGVzdEJpZENwbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RCaWRDcG0gPSBiaWQuY3BtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhpZ2hlc3RCaWRDcG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RCaWRDcG1TaWRlYmFyCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciB3YWxscGFwZXJXaW5zQWxsID0gKHJ1bm5pbmdVcENwbSArIGhpZ2hlc3RCaWRDcG1TaWRlYmFyIDwgaGlnaGVzdEJpZHNUb3BPZkhlYWQud2lubmVyLmNwbSk7CiAgICAgICAgICAgICAgICBpZiAod2FsbHBhcGVyV2luc0FsbCkgewogICAgICAgICAgICAgICAgICAgIGFkU2xvdHMuZGVzdHJveShhZFVuaXRDb2RlU2lkZWJhcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAod2FsbHBhcGVyV2luc0FsbCAmJiBiaWRSZXNwb25zZXNbYWRVbml0Q29kZVNpZGViYXJdKSB7CiAgICAgICAgICAgICAgICAgICAgYmlkc1JlY2VpdmVkID0gYmlkc1JlY2VpdmVkLmZpbHRlcihmdW5jdGlvbihiaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJpZC5hZFVuaXRDb2RlICE9IGFkVW5pdENvZGVTaWRlYmFyOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghd2FsbHBhcGVyV2luc0FsbCkgewogICAgICAgICAgICAgICAgICAgIGJpZHNSZWNlaXZlZCA9IGJpZHNSZWNlaXZlZC5maWx0ZXIoZnVuY3Rpb24oYmlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNKdXN0UHJlbWl1bVdQQmlkKGJpZCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBiaWRzUmVjZWl2ZWQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9LAogICAgICAgIG9uRG9tTG9hZFByb21pc2U6IG51bGwsCiAgICAgICAgb25Eb21Mb2FkOiBmdW5jdGlvbihjYWxsYmFjaykgewogICAgICAgIAlpZiAoIWF1Y3Rpb25QcmViaWQub25Eb21Mb2FkUHJvbWlzZSkgewogICAgICAgIAkJYXVjdGlvblByZWJpZC5vbkRvbUxvYWRQcm9taXNlID0gbmV3IEN1c3RvbVByb21pc2UoZnVuY3Rpb24oZnVsZmlsbCwgcmVqZWN0KSB7CiAgICAgICAgCQkJaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScKICAgICAgICAJCQkJfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRlZCcKICAgICAgIAkJCQkJfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJwogICAgICAgIAkJCSkgewogICAgICAgIAkJCQlmdWxmaWxsKCk7CiAgICAgICAgCQkJfSBlbHNlIHsKICAgICAgICAJCQkJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHsKICAgICAgICAJCQkJCWZ1bGZpbGwoKTsKICAgICAgICAJCQkJfSwgdHJ1ZSk7CiAgICAgICAgCQkJfQogICAgCQkJfSk7CiAgICAgICAgCX0KICAgICAgICAJYXVjdGlvblByZWJpZC5vbkRvbUxvYWRQcm9taXNlLnRoZW4oY2FsbGJhY2spOwogICAgICAgIH0sCiAgICAgICAgb25BdWN0aW9uRW5kOiBmdW5jdGlvbihiaWRSZXNwb25zZXMpIHsKICAgICAgICAgICAgdmFyIHN5bmNocm9uaXplciA9IHsKICAgICAgICAgICAgICAgIHRocmVhZHM6IDAsCiAgICAgICAgICAgICAgICB0aHJlYWRTdGFydDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVyLnRocmVhZHMrKzsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB0aHJlYWRFbmQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplci50aHJlYWRzLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmNocm9uaXplci50aHJlYWRzID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVyLmFsbFRocmVhZHNFbmQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgYWxsVGhyZWFkc0VuZDogZnVuY3Rpb24oKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgc3luY2hyb25pemVyLnRocmVhZFN0YXJ0KCk7CgogICAgICAgICAgICBnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZXIudGhyZWFkU3RhcnQoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGRpdklkIGluIGJpZFJlc3BvbnNlcykgewogICAgICAgICAgICAgICAgICAgIGlmIChhZFNsb3RzLmhhcyhkaXZJZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpZFJlc3BvbnNlID0gYmlkUmVzcG9uc2VzW2RpdklkXTsKICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmlkc01hcFtkaXZJZF0gPSBiaWRSZXNwb25zZS5iaWRzLnNvbWUoZnVuY3Rpb24oYmlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmlkLmNwbSA+IDAuMzU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgYmlkc1JlY2VpdmVkRmlsdGVyZWQgPSBhdWN0aW9uUHJlYmlkLmp1c3RQcmVtaXVtV2FsbHBhcGVyRmlsdGVyKGJpZFJlc3BvbnNlcywgcGJqcy5fYmlkc1JlY2VpdmVkKTsKICAgICAgICAgICAgICAgIGlmIChiaWRzUmVjZWl2ZWRGaWx0ZXJlZCkgewogICAgICAgICAgICAgICAgICAgIHBianMuX2JpZHNSZWNlaXZlZCA9IGJpZHNSZWNlaXZlZEZpbHRlcmVkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBiaWRzV29uID0gcGJqcy5nZXRIaWdoZXN0Q3BtQmlkcygpOwogICAgICAgICAgICAgICAgdmFyIHNjcmlwdEFkSWQgPSBhZFNsb3RzLmdldFNjcmlwdEFkSWQoKTsKICAgICAgICAgICAgICAgIHZhciBzY3JpcHREaXZJZCA9IGFkU2xvdHMuZ2V0RGVmYXVsdERpdklkKHNjcmlwdEFkSWQpOwogICAgICAgICAgICAgICAgdmFyIGhhc1NjcmlwdEJpZHMgPSBiaWRzV29uLnNvbWUoZnVuY3Rpb24oYmlkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJpZC5hZFVuaXRDb2RlID09PSBzY3JpcHREaXZJZDsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaWYgKGhhc1NjcmlwdEJpZHMgfHwgYWRzLmhhc0FkZGl0aW9uYWxTY3JpcHREZW1hbmQoKSkgewogICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplci50aHJlYWRTdGFydCgpOwoKICAgICAgICAgICAgICAgICAgICBhdWN0aW9uUHJlYmlkLm9uRG9tTG9hZChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICAgICAgICAgICAgICBkaXYuaWQgPSBzY3JpcHREaXZJZDsKICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Zvb3RlcicpWzBdLmFwcGVuZENoaWxkKGRpdik7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IGFkU2xvdHMuY3JlYXRlU2xvdHMoW3thZElkOiBzY3JpcHRBZElkLCBkaXZJZDogc2NyaXB0RGl2SWR9XSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbihhZElkcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29vZ2xldGFnLmRpc3BsYXkoc2NyaXB0RGl2SWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVyLnRocmVhZEVuZCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBiaWRzV29uKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGJpZCA9IGJpZHNXb25ba2V5XTsKICAgICAgICAgICAgICAgICAgICBpZiAoYWRTbG90cy5oYXMoYmlkLmFkVW5pdENvZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzbG90ID0gYWRTbG90cy5nZXQoYmlkLmFkVW5pdENvZGUpOwogICAgICAgICAgICAgICAgICAgICAgICBzbG90LnNldFRhcmdldGluZygnaGJfYmlkZGVyeHNpemUnLCBiaWQuYmlkZGVyQ29kZSArICdfJyArIGJpZC5nZXRTaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICBzbG90LnNldFRhcmdldGluZygnaGJfZGVhbCcsICghIWJpZC5kZWFsSWQgPyAnMScgOiAnMCcpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcGJqcy5zZXRUYXJnZXRpbmdGb3JHUFRBc3luYygpOwoKICAgICAgICAgICAgICAgIHN5bmNocm9uaXplci5hbGxUaHJlYWRzRW5kID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBhZHMub25BdWN0aW9uRW5kKGF1Y3Rpb25QcmViaWQpOyAvLyBAVE9ETzogZHVyY2ggdHJpZ2dlciBlcnNldHplbgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN5bmNocm9uaXplci50aHJlYWRFbmQoKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBzeW5jaHJvbml6ZXIudGhyZWFkRW5kKCk7CiAgICAgICAgfSwKICAgICAgICBvbkFsbEF1Y3Rpb25zRW5kOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFnZXRDb29raWUoJ3ByZWJpZE9iZnVzY2F0aW9uRGlzYWJsZWQnKSkgewogICAgICAgICAgICAgICAgc2V0VGltZW91dChwYmpzQmFja3VwLm9iZnVzY2F0ZSwgMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGFkZFJlcG9zaXRvcnlDb25zdHJhaW50OiBmdW5jdGlvbihjb25zdHJhaW50KSB7CiAgICAgICAgICAgIGFkVW5pdFJlcG8uYWRkQ29uc3RyYWludChjb25zdHJhaW50KTsKICAgICAgICB9LAogICAgICAgIGdldFJlcG9zaXRvcnlDb25zdHJhaW50OiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICByZXR1cm4gYWRVbml0UmVwby5nZXRDb25zdHJhaW50KGlkKTsKICAgICAgICB9LAogICAgICAgIGFkZENoYW5nZTogZnVuY3Rpb24oY2hhbmdlKSB7CiAgICAgICAgICAgIGFkVW5pdFJlcG8uYWRkQ2hhbmdlKGNoYW5nZSk7CiAgICAgICAgfQogICAgfTsKCiAgICByZXR1cm4gYXVjdGlvblByZWJpZDsKfTsKCnZhciBiaWRDcG1BZGp1c3RtZW50cyA9IHsKICAgIGV1cnVzZDogZnVuY3Rpb24gKGJpZENwbSwgYmlkKSB7CiAgICAgICAgcmV0dXJuIGJpZENwbSAqIF9ldXJ1c2Q7CiAgICB9LAogICAgcHVibWF0aWM6IGZ1bmN0aW9uKGJpZENwbSwgYmlkKSB7CiAgICAgICAgcmV0dXJuIChiaWRDcG0gKiAwLjgzKTsKICAgIH0sCiAgICBzbWFydGFkc2VydmVyOiBmdW5jdGlvbihiaWRDcG0sIGJpZCkgewogICAgICAgIHJldHVybiAoYmlkQ3BtICogMC44MSk7CiAgICB9LAogICAgaGltZWRpYTogZnVuY3Rpb24oYmlkQ3BtLCBiaWQpIHsKICAgICAgICByZXR1cm4gKGJpZENwbSAqIDAuNDUpOwogICAgfSwKICAgIHB1bHNlcG9pbnRMaXRlOiBmdW5jdGlvbihiaWRDcG0sIGJpZCkgewogICAgICAgIHJldHVybiAoYmlkQ3BtICogMC43MCk7CiAgICB9Cn07Cgp2YXIgcGJqcyA9IHBianMgfHwge307CnBianMuYmlkZGVyU2V0dGluZ3MgPSB7CiAgICBvcGVueDogewogICAgICAgIGJpZENwbUFkanVzdG1lbnQgOiBiaWRDcG1BZGp1c3RtZW50cy5ldXJ1c2QKICAgIH0sCiAgICBzbWFydGFkc2VydmVyOiB7CiAgICAgICAgYmlkQ3BtQWRqdXN0bWVudCA6IGJpZENwbUFkanVzdG1lbnRzLnNtYXJ0YWRzZXJ2ZXIKICAgIH0sCiAgICBwdWJtYXRpYzogewogICAgICAgIGJpZENwbUFkanVzdG1lbnQgOiBiaWRDcG1BZGp1c3RtZW50cy5wdWJtYXRpYwogICAgfSwKICAgIGhpbWVkaWE6IHsKICAgICAgICBiaWRDcG1BZGp1c3RtZW50IDogYmlkQ3BtQWRqdXN0bWVudHMuaGltZWRpYQogICAgfSwKICAgIHB1bHNlcG9pbnRMaXRlOiB7CiAgICAgICAgYmlkQ3BtQWRqdXN0bWVudCA6IGJpZENwbUFkanVzdG1lbnRzLnB1bHNlcG9pbnRMaXRlCiAgICB9Cn07CiAgICB2YXIgYXVjdGlvbkFhbSA9IHsKICAgIGlkOiAiQWFtIiwKICAgIFRJTUVPVVQ6IDc1MCwKICAgIGFkVW5pdFJlcG86IHt9LAogICAgaGFzQmlkc01hcDoge30sCiAgICBwcm9jZXNzZWQ6IGZhbHNlLAogICAgYWRJZHNSZXF1ZXN0ZWQ6IFtdLAoKICAgIHNldEFkVW5pdHM6IGZ1bmN0aW9uKGFkVW5pdHMpIHsKICAgICAgICBhdWN0aW9uQWFtLmFkVW5pdFJlcG8gPSBuZXcgQWRVbml0UmVwbyhhZFVuaXRzKTsKICAgIH0sCiAgICBhZGRDaGFuZ2U6IGZ1bmN0aW9uKGNoYW5nZSkgewogICAgICAgIGF1Y3Rpb25BYW0uYWRVbml0UmVwby5hZGRDaGFuZ2UoY2hhbmdlKTsKICAgIH0sCiAgICBpbml0OiBmdW5jdGlvbigpIHsKICAgICAgICAvL0luaXRpYWxpemUgdGhlIExpYnJhcnkKICAgICAgICBhcHN0YWcuaW5pdCh7CiAgICAgICAgICAgIHB1YklEOiAnMzU1NCcsCiAgICAgICAgICAgIGFkU2VydmVyOiAnZ29vZ2xldGFnJywKICAgICAgICAgICAgYmlkVGltZW91dDogYXVjdGlvbkFhbS5USU1FT1VUCiAgICAgICAgfSk7CiAgICB9LAogICAgc3RhcnQ6IGZ1bmN0aW9uKGFkT2JqcykgewogICAgICAgIGF1Y3Rpb25BYW0ucHJvY2Vzc2VkID0gZmFsc2U7CgogICAgICAgIHZhciBhZFVuaXRSZXBvTGltaXRlZCA9IGF1Y3Rpb25BYW0uYWRVbml0UmVwby5nZXROZXdSZXBvTGltaXRlZFRvQWRJZHMoYWRPYmpzKTsKICAgICAgICBhZFVuaXRSZXBvTGltaXRlZC5hcHBseUNoYW5nZXMoKTsKICAgICAgICB2YXIgYWRVbml0cyA9IGFkVW5pdFJlcG9MaW1pdGVkLmdldEFkVW5pdHMoYWRPYmpzLCAnc2xvdElEJyk7CiAgICAgICAgdmFyIHByb21pc2UgPSBhZFNsb3RzLmNyZWF0ZVNsb3RzKGFkT2Jqcyk7CgogICAgICAgIGF1Y3Rpb25BYW0uaGFzQmlkc01hcCA9IHt9OwogICAgICAgIGZvcih2YXIgaW5kZXggaW4gYWRVbml0cykgewogICAgICAgICAgICBhdWN0aW9uQWFtLmhhc0JpZHNNYXBbYWRVbml0c1tpbmRleF0uc2xvdElEXSA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGFkVW5pdHMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBhcHN0YWcuZmV0Y2hCaWRzKAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHNsb3RzOiBhZFVuaXRzCiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoYmlkcykgewogICAgICAgICAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoYWRJZHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXVjdGlvbkFhbS5vbkF1Y3Rpb25FbmQoYmlkcyk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYXVjdGlvbkFhbS5vbkF1Y3Rpb25FbmQoW10pOwogICAgICAgIH0KICAgIH0sCiAgICBnZXRBZFVuaXRzOiBmdW5jdGlvbihhZE9ianMpIHsKICAgICAgICByZXR1cm4gYXVjdGlvbkFhbS5hZFVuaXRSZXBvLmdldEFkVW5pdHMoYWRPYmpzLCAnc2xvdElEJyk7CiAgICB9LAogICAgZ2V0SGFzQmlkc01hcDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGF1Y3Rpb25BYW0uaGFzQmlkc01hcDsKICAgIH0sCiAgICBpc1Byb2Nlc3NlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGF1Y3Rpb25BYW0ucHJvY2Vzc2VkOwogICAgfSwKICAgIG9uQXVjdGlvbkVuZDogZnVuY3Rpb24oYmlkcykgewogICAgICAgIGJpZHMuZm9yRWFjaChmdW5jdGlvbihiaWQpIHsKICAgICAgICAgICAgdmFyIGRpdklkID0gYmlkLnNsb3RJRDsKICAgICAgICAgICAgaWYgKGFkU2xvdHMuaGFzKGRpdklkKSkgewogICAgICAgICAgICAgICAgLy8gQXJyYXkgb2YgYmlkIHZhbHVlcyBiZXR3ZWVuIDAuMDEgYW5kIDAuMzUgVVNECiAgICAgICAgICAgICAgICB2YXIgcHJpY2VQb2ludHMgPSBbCiAgICAgICAgICAgICAgICAgICAgIjFuMnZqMGciLCAiNXQxaGo0IiwgIjE1YmxpaW8iLCAid2Z5aTlzIiwgIjF2eWlqOWMiLAogICAgICAgICAgICAgICAgICAgICJlb29oczAiLCAiMWU3OGlyayIsICJqNGh6d2ciLCAiMWluMjB3MCIsICIxZDd6ZW8iLAogICAgICAgICAgICAgICAgICAgICIxMHZzMGU4IiwgInMwNTA1YyIsICIxcmlwMTR3IiwgImE4dXpuayIsICIxOXJmMG40IiwKICAgICAgICAgICAgICAgICAgICAicHM4OTM0IiwgIjFwYXNhMm8iLCAiODB5OGxjIiwgIjE3amk5a3ciLCAieW52OWMwIiwKICAgICAgICAgICAgICAgICAgICAiMXk2ZmFiayIsICJnd2w4dTgiLCAiMWdmNTl0cyIsICJsY2VxeW8iLCAiMWt1eXJ5OCIsCiAgICAgICAgICAgICAgICAgICAgIjNsNHFndyIsICIxMzNvcmdnIiwgInU4MXI3ayIsICIxdHFsczc0IiwgImNncnFwcyIsCiAgICAgICAgICAgICAgICAgICAgIjFiemJycGMiLCAibWdkNGhzIiwgIjFseXg1aGMiLCAiNHAzNDAwIiwgIjE0N240emsiCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgYXVjdGlvbkFhbS5oYXNCaWRzTWFwW2RpdklkXSA9IChwcmljZVBvaW50cy5pbmRleE9mKGJpZC5hbXpuYmlkKSA9PT0gLTEpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgYXBzdGFnLnNldERpc3BsYXlCaWRzKCk7CgogICAgICAgICAgICBhdWN0aW9uQWFtLnByb2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAgIGFkcy5vbkF1Y3Rpb25FbmQoYXVjdGlvbkFhbSk7IC8vIEBUT0RPOiBkdXJjaCB0cmlnZ2VyIGVyc2V0emVuCiAgICAgICAgfSk7CiAgICB9LAogICAgb25BbGxBdWN0aW9uc0VuZDogZnVuY3Rpb24oKSB7fQp9OwogICAgdmFyIGFkcyA9IHsKICAgIGF1Y3Rpb25RdWV1ZTogW10sCiAgICBhdWN0aW9uc1J1bm5pbmc6IGZhbHNlLAogICAgYXVjdGlvbnM6IFtdLAogICAgcmVnaXN0ZXJBdWN0aW9uOiBmdW5jdGlvbihhdWN0aW9uKSB7CiAgICAgICAgYWRzLmF1Y3Rpb25zLnB1c2goYXVjdGlvbik7CiAgICB9LAogICAgZ2V0QWxsQXVjdGlvbnM6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmF1Y3Rpb25zOwogICAgfSwKICAgIGluaXRBdWN0aW9uczogZnVuY3Rpb24oKSB7CiAgICAgICAgYWRzLmdldEFsbEF1Y3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbihhdWN0aW9uKSB7CiAgICAgICAgICAgIGF1Y3Rpb24uaW5pdCgpOwogICAgICAgIH0pOwogICAgfSwKICAgIHN0YXJ0QXVjdGlvbnM6IGZ1bmN0aW9uKGFkT2JqcykgewogICAgICAgIGlmKGFkT2Jqcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGFkcy5hdWN0aW9uUXVldWUucHVzaChhZE9ianMpOwogICAgICAgICAgICBhZHMuc3RhcnROZXh0UXVldWVkQXVjdGlvbigpOwogICAgICAgIH0KICAgIH0sCiAgICBzdGFydE5leHRRdWV1ZWRBdWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICBpZighYWRzLmF1Y3Rpb25zUnVubmluZyAmJiBhZHMuYXVjdGlvblF1ZXVlLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgYWRzLmF1Y3Rpb25zUnVubmluZyA9IHRydWU7CiAgICAgICAgICAgIHZhciBhZE9ianMgPSBhZHMuYXVjdGlvblF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmKGFkT2Jqcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICB2YXIgYXVjdGlvbnMgPSBhZHMuZ2V0QWxsQXVjdGlvbnMoKTsKICAgICAgICAgICAgICAgIGlmIChhdWN0aW9ucy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBhdWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhdWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF1Y3Rpb24uc3RhcnQoYWRPYmpzKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYWRzLm9uQWxsQXVjdGlvbnNFbmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICB9LAogICAgc2V0VGFyZ2V0aW5nOiBmdW5jdGlvbih0YXJnZXRpbmcpIHsKICAgICAgICBnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0YXJnZXRpbmcpIHsKICAgICAgICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5zZXRUYXJnZXRpbmcoa2V5LCB0YXJnZXRpbmdba2V5XSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0sCiAgICBoYXNCaWRzTWFwOiB7fSwKICAgIG9uQXVjdGlvbkVuZDogZnVuY3Rpb24oYXVjdGlvbikgewogICAgICAgIHZhciBiaWRNYXAgPSBhdWN0aW9uLmdldEhhc0JpZHNNYXAoKTsKICAgICAgICBmb3IodmFyIGRpdklkIGluIGJpZE1hcCkgewogICAgICAgICAgICBpZiAoYWRTbG90cy5oYXMoZGl2SWQpKSB7CiAgICAgICAgICAgICAgICBhZHMuaGFzQmlkc01hcFtkaXZJZF0gPSBiaWRNYXBbZGl2SWRdIHx8ICEhYWRzLmhhc0JpZHNNYXBbZGl2SWRdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoYWRzLmdldEFsbEF1Y3Rpb25zKCkuc29tZShmdW5jdGlvbihhdWN0aW9uKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIWF1Y3Rpb24uaXNQcm9jZXNzZWQoKTsKICAgICAgICAgICAgfSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBhZHMub25BbGxBdWN0aW9uc0VuZCgpOwogICAgfSwKICAgIG9uQWxsQXVjdGlvbnNFbmQ6IGZ1bmN0aW9uKCkgewogICAgICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIHNsb3RzID0gW107CiAgICAgICAgICAgIGZvciAodmFyIGRpdklkIGluIGFkcy5oYXNCaWRzTWFwKSB7CiAgICAgICAgICAgICAgICBpZiAoYWRTbG90cy5oYXMoZGl2SWQpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBhZFNsb3RzLmdldChkaXZJZCk7CiAgICAgICAgICAgICAgICAgICAgc2xvdHMucHVzaChzbG90KTsKICAgICAgICAgICAgICAgICAgICBhZFNsb3RzLnNldFBvc2l0aW9uVGFyZ2V0aW5nKHNsb3QpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoIWFkcy5oYXNCaWRzTWFwW2RpdklkXSkgewogICAgICAgICAgICAgICAgICAgICAgICBzbG90LnNldFRhcmdldGluZygnZnAnLCAnMjQnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKHNsb3RzKTsKCiAgICAgICAgICAgIGFkcy5oYXNCaWRzTWFwID0ge307CgogICAgICAgICAgICB2YXIgYXVjdGlvbnMgPSBhZHMuZ2V0QWxsQXVjdGlvbnMoKTsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGF1Y3Rpb25zKSB7CiAgICAgICAgICAgICAgICBhdWN0aW9uc1trZXldLm9uQWxsQXVjdGlvbnNFbmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZHMuYXVjdGlvbnNSdW5uaW5nID0gZmFsc2U7CiAgICAgICAgICAgIGFkcy5zdGFydE5leHRRdWV1ZWRBdWN0aW9uKCk7CiAgICAgICAgfSk7CiAgICB9LAogICAgaGFzQWRkaXRpb25hbFNjcmlwdERlbWFuZDogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG5hbWVzcGFjZSA9ICdBZHMuaGFzQWRkaXRpb25hbFNjcmlwdERlbWFuZCc7CiAgICAgICAgdmFyIHRpbWVzdGFtcCA9IHBhcnNlSW50KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0obmFtZXNwYWNlKSB8fCAwKTsKICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTsKICAgICAgICBpZiAodGltZXN0YW1wID09PSAwIHx8IG5vdyA+ICh0aW1lc3RhbXAgKyAzMCAqIDYwICogMTAwMCkpIHsgLy8gMzAgbWluIGluIG1pbGlzZWNvbmRzCiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0obmFtZXNwYWNlLCBub3cpOwogICAgICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSA8IDAuMDI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfTsKCiAgICBhZHMuc2V0VGFyZ2V0aW5nKHRhcmdldGluZyk7CgogICAgdmFyIGF1Y3Rpb25QcmViaWQgPSBjcmVhdGVBdWN0aW9uUHJlYmlkKGFkVW5pdFJlcG9QcmViaWQpOwogICAgYXVjdGlvbkFhbS5zZXRBZFVuaXRzKGFkVW5pdFJlcG9BYW0pOwoKICAgIGZ1bmN0aW9uIGZpbHRlclNsb3RTaXplcyhzaXplcykgewogICAgICAgIHNpemVzID0gc2l6ZXMuZmlsdGVyKGZ1bmN0aW9uKHNpemVzKSB7CiAgICAgICAgICAgIHJldHVybiAhKHNpemVzWzFdID4gOTAgJiYgdmlvbGF0ZXNHYWxsZXJ5Q29udHJvbHNWaXNpYmlsaXR5KHNpemVzWzFdKSk7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHNpemVzOwogICAgfQogICAgZnVuY3Rpb24gdmlvbGF0ZXNHYWxsZXJ5Q29udHJvbHNWaXNpYmlsaXR5KGJhbm5lckhlaWdodCkgewogICAgICAgIHJldHVybiA3MTAgKyBiYW5uZXJIZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQ7ICAgICB9CgogICAgYXVjdGlvblByZWJpZC5hZGRSZXBvc2l0b3J5Q29uc3RyYWludCh7CiAgICAgICAgaWQ6ICd2aW9sYXRlc09wZW54JywKICAgICAgICB2aW9sYXRlczogZnVuY3Rpb24oYmlkLCBhZElkKSB7CiAgICAgICAgICAgIHJldHVybiAoZmNhcCA+PSA1ICYmIGJpZC5iaWRkZXIgPT0gJ29wZW54Jyk7CiAgICAgICAgfQogICAgfSk7CiAgICBhdWN0aW9uUHJlYmlkLmFkZFJlcG9zaXRvcnlDb25zdHJhaW50KHsKICAgICAgICBpZDogJ3Zpb2xhdGVzUHVibWF0aWMnLAogICAgICAgIHZpb2xhdGVzOiBmdW5jdGlvbihiaWQsIGFkSWQpIHsKICAgICAgICAgICAgcmV0dXJuIChmY2FwID49IDkgJiYgYmlkLmJpZGRlciA9PSAncHVibWF0aWMnKTsKICAgICAgICB9CiAgICB9KTsKICAgIGF1Y3Rpb25QcmViaWQuYWRkUmVwb3NpdG9yeUNvbnN0cmFpbnQoewogICAgICAgIGlkOiAndmlvbGF0ZXNIaW1lZGlhJywKICAgICAgICBoaW1lZGlhX3Byb2JhYmlsaXR5OiAoZGlzYWJsZVJhbmQgPyAxMDAgOiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApKSwKICAgICAgICB2aW9sYXRlczogZnVuY3Rpb24oYmlkLCBhZElkKSB7CiAgICAgICAgICAgIHJldHVybiAoZmNhcCA+PSA5ICYmIGJpZC5iaWRkZXIgPT0gJ2hpbWVkaWEnICYmIHRoaXMuaGltZWRpYV9wcm9iYWJpbGl0eSA8IDc1KTsKICAgICAgICB9CiAgICB9KTsKICAgIGF1Y3Rpb25QcmViaWQuYWRkUmVwb3NpdG9yeUNvbnN0cmFpbnQoewogICAgICAgIGlkOiAndmlvbGF0ZXNTa3lzY3JhcGVyU3BhY2UnLAogICAgICAgIGhhc1Zpb2xhdGlvbjogZmFsc2UsCiAgICAgICAgd2lkdGhDb250ZW50OiAxMDMwLAogICAgICAgIHdpZHRoU2t5c2NyYXBlcjogMzAwLAogICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLmhhc1Zpb2xhdGlvbiA9IGZhbHNlOwogICAgICAgIH0sCiAgICAgICAgdmlvbGF0ZXM6IGZ1bmN0aW9uKGJpZCwgYWRJZCkgewoKICAgICAgICAgICAgdmFyIHZpb2xhdGlvbiA9IChhZElkID09ICcxMDAyJyAmJiB3aW5kb3cuaW5uZXJXaWR0aCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IHRoaXMud2lkdGhDb250ZW50ICsgdGhpcy53aWR0aFNreXNjcmFwZXIgLyAyKTsKICAgICAgICAgICAgdGhpcy5oYXNWaW9sYXRpb24gfD0gdmlvbGF0aW9uOwoKICAgICAgICAgICAgcmV0dXJuIHZpb2xhdGlvbjsKICAgICAgICB9CiAgICB9KTsKICAgIAogICAgYXVjdGlvblByZWJpZC5hZGRSZXBvc2l0b3J5Q29uc3RyYWludCh7CiAgICAgICAgaWQ6ICdzYW1wbGluZ0p1c3RQcmVtaXVtJywKICAgICAgICB2aW9sYXRlczogZnVuY3Rpb24ocmFuZCwgYmlkLCBhZElkKSB7CiAgICAgICAgICAgIHJldHVybiAoYmlkLmJpZGRlciA9PT0gJ2p1c3RwcmVtaXVtJyAmJiAoZmNhcCA8PSAwIHx8IGZjYXAgPiA0ICYmIHJhbmQgPiAyNSkpOwogICAgICAgIH0uYmluZChudWxsLCAoZGlzYWJsZVJhbmQgPyAwIDogTWF0aC5yYW5kb20oKSAqIDEwMCkpCiAgICB9KTsKICAgIGF1Y3Rpb25QcmViaWQuYWRkQ2hhbmdlKHsKICAgICAgICBhZElkOiAnMTAwNScsCiAgICAgICAgcHJvY2VzczogZnVuY3Rpb24oYWRVbml0KSB7CiAgICAgICAgICAgIHZhciBiaWRzID0gYWRVbml0LmJpZHMuZmlsdGVyKGZ1bmN0aW9uKGJpZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGJpZC5iaWRkZXIgPT09ICdqdXN0cHJlbWl1bSc7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgaW52YWxpZEZvcm1hdHMgPSBbXTsKICAgICAgICAgICAgaWYgKGZjYXAgPD0gMSkgewogICAgICAgICAgICAgICAgaW52YWxpZEZvcm1hdHMgPSBbJ3NhJywgJ3B1JywgJ2ZhJywgJ2NmJywgJ3BhJywgJ2xiJywgJ2JyJywgJ2ZpJywgJ21zJywgJ21vJywgJ2lzJ107CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoU3RyID0gZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoLnNsaWNlKDEpOwogICAgICAgICAgICAgICAgdmFyIGhhc1NlYXJjaGJhciA9IHNlYXJjaFN0ci5zcGxpdCgnJicpLnNvbWUoZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ciA9PT0gJ3JlZj1zZWFyY2gnOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBpZiAoaGFzU2VhcmNoYmFyKSB7CiAgICAgICAgICAgICAgICAgICAgaW52YWxpZEZvcm1hdHMgPSBbJ3B1JywgJ2ZhJywgJ2NmJ107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGludmFsaWRGb3JtYXRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgYmlkcy5tYXAoZnVuY3Rpb24oYmlkKSB7CiAgICAgICAgICAgICAgICAgICAgYmlkLnBhcmFtcy5hbGxvdyA9IGJpZC5wYXJhbXMuYWxsb3cuZmlsdGVyKGZ1bmN0aW9uKGZvcm1hdCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGludmFsaWRGb3JtYXRzLmluZGV4T2YoZm9ybWF0KSA9PT0gLTEpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQFRPRE86IHdhcyB0dW4sIHdlbm4gYmlkLnBhcmFtcy5hbGxvdyBuYWNoIEZpbHRlcnVuZyBsZWVyIGlzdD8gKFN0YW5kYXJkZmFsbCBiZWkgZjw9MSkKICAgICAgICB9CiAgICB9KTsKICAgIHZhciBkaWFsb2dTZW50Q2hhbmdlciA9IHsKICAgICAgICBhZElkOiAxMDAzLAogICAgICAgIGRpYWxvZ1NlbnRBZDogZmFsc2UsCiAgICAgICAgcHJvY2VzczogZnVuY3Rpb24oYWRVbml0KSB7CiAgICAgICAgICAgIGlmICghdGhpcy5kaWFsb2dTZW50QWQpIHsKICAgICAgICAgICAgICAgIGFkVW5pdC5zaXplcyA9IFtbNDY4LCA2MF1dOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIGF1Y3Rpb25BYW0uYWRkQ2hhbmdlKGRpYWxvZ1NlbnRDaGFuZ2VyKTsKICAgIGF1Y3Rpb25QcmViaWQuYWRkQ2hhbmdlKGRpYWxvZ1NlbnRDaGFuZ2VyKTsKICAgIGFkU2xvdHMuYWRkQ2hhbmdlKGRpYWxvZ1NlbnRDaGFuZ2VyKTsKCiAgICBnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rpb24oKSB7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmRpc2FibGVJbml0aWFsTG9hZCgpOwogICAgfSk7CgogICAgCiAgICB2YXIgYWRJZHMgPSBbeyJhZElkIjoxMDA1fV07CgogICAgYWRzLnJlZ2lzdGVyQXVjdGlvbihhdWN0aW9uUHJlYmlkKTsKICAgIGFkcy5yZWdpc3RlckF1Y3Rpb24oYXVjdGlvbkFhbSk7CiAgICBhZHMuaW5pdEF1Y3Rpb25zKCk7CiAgICBhZHMuc3RhcnRBdWN0aW9ucyhhZElkcyk7Cg==
Meta #7
name viewport
content width=device-width, initial-scale=1, maximum-scale=2
Meta #8
name robots
content index,follow
Meta #9
name robots
content noodp,noydir

<style>

<head> contains 3 <style> sections. Total size: 17729 bytes.

<link> (11 records found)

<script>

Internal

<head> contains 10 internal script sections. Total size: 13883 bytes.

External

Name Value
Script #1
type text/javascript
src /js/lib/prebid-75ee6f19ff10e8559d61cc8a30c2be95.js
Script #2
type text/javascript
src /js/lib/jquery-2.1.3.min.js
Script #3
type text/javascript
src /js/finya_core-new.js?v=16092202
Script #4
type text/javascript
src /js/lib/jquery.sha256.min.js

<base>

<head> section doesn't contain a base section.

copy

Processing yahoo.com

Please wait...

Redirecting...

Error

Error message

close