Created
July 19, 2016 21:49
-
-
Save daniilyar-confyrm/986a97747589e75016acfa482435c44c to your computer and use it in GitHub Desktop.
The full error stacktrace from browser
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
StackStorm Stanley | |
<html> <head> <title>Pecan - Application Error</title> <link rel="stylesheet" type="text/css" href="data:text/css;base64,LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKgogKiBAY29weXJpZ2h0CiAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEFsZXggR29yYmF0Y2hldi4KICoKICogQGxpY2Vuc2UKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMuCiAqLwouc3ludGF4aGlnaGxpZ2h0ZXIgYSwKLnN5bnRheGhpZ2hsaWdodGVyIGRpdiwKLnN5bnRheGhpZ2hsaWdodGVyIGNvZGUsCi5zeW50YXhoaWdobGlnaHRlciB0YWJsZSwKLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLAouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdHIsCi5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0Ym9keSwKLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRoZWFkLAouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgY2FwdGlvbiwKLnN5bnRheGhpZ2hsaWdodGVyIHRleHRhcmVhIHsKICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCAwIDAgIWltcG9ydGFudDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCAwIDAgIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7CiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7CiAgYm90dG9tOiBhdXRvICFpbXBvcnRhbnQ7CiAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsKICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgbGluZS1oZWlnaHQ6IDEuMWVtICFpbXBvcnRhbnQ7CiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgb3V0bGluZTogMCAhaW1wb3J0YW50OwogIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICByaWdodDogYXV0byAhaW1wb3J0YW50OwogIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsKICB0b3A6IGF1dG8gIWltcG9ydGFudDsKICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDsKICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7CiAgZm9udC1mYW1pbHk6ICJDb25zb2xhcyIsICJCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8iLCAiQ291cmllciBOZXciLCBDb3VyaWVyLCBtb25vc3BhY2UgIWltcG9ydGFudDsKICBmb250LXdlaWdodDogbm9ybWFsICFpbXBvcnRhbnQ7CiAgZm9udC1zdHlsZTogbm9ybWFsICFpbXBvcnRhbnQ7CiAgZm9udC1zaXplOiAxZW0gIWltcG9ydGFudDsKICBtaW4taGVpZ2h0OiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgbWluLWhlaWdodDogYXV0byAhaW1wb3J0YW50Owp9Cgouc3ludGF4aGlnaGxpZ2h0ZXIgewogIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgbWFyZ2luOiAxZW0gMCAxZW0gMCAhaW1wb3J0YW50OwogIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OwogIG92ZXJmbG93OiBhdXRvICFpbXBvcnRhbnQ7CiAgZm9udC1zaXplOiAxZW0gIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuc291cmNlIHsKICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5ib2xkIHsKICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuaXRhbGljIHsKICBmb250LXN0eWxlOiBpdGFsaWMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUgewogIHdoaXRlLXNwYWNlOiBwcmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgewogIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIGNhcHRpb24gewogIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsKICBwYWRkaW5nOiAuNWVtIDAgMC41ZW0gMWVtICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLmNvZGUgewogIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLmNvZGUgLmNvbnRhaW5lciB7CiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLmNvZGUgLmNvbnRhaW5lciB0ZXh0YXJlYSB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50OwogIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogIGxlZnQ6IDAgIWltcG9ydGFudDsKICB0b3A6IDAgIWltcG9ydGFudDsKICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogIGJhY2tncm91bmQ6IHdoaXRlICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1sZWZ0OiAxZW0gIWltcG9ydGFudDsKICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7CiAgd2hpdGUtc3BhY2U6IHByZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5ndXR0ZXIgLmxpbmUgewogIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7CiAgcGFkZGluZzogMCAwLjVlbSAwIDFlbSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5jb2RlIC5saW5lIHsKICBwYWRkaW5nOiAwIDFlbSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5ub2d1dHRlciB0ZC5jb2RlIC5jb250YWluZXIgdGV4dGFyZWEsIC5zeW50YXhoaWdobGlnaHRlci5ub2d1dHRlciB0ZC5jb2RlIC5saW5lIHsKICBwYWRkaW5nLWxlZnQ6IDBlbSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5zaG93IHsKICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgdGFibGUgewogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIHsKICBwYWRkaW5nOiAwLjFlbSAwLjhlbSAwZW0gMC44ZW0gIWltcG9ydGFudDsKICBmb250LXNpemU6IDFlbSAhaW1wb3J0YW50OwogIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogIGhlaWdodDogYXV0byAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgc3BhbiB7CiAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7CiAgbWFyZ2luLXJpZ2h0OiAxZW0gIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIHNwYW4gYSB7CiAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIHNwYW4gYS5leHBhbmRTb3VyY2UgewogIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciB7CiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7CiAgcmlnaHQ6IDFweCAhaW1wb3J0YW50OwogIHRvcDogMXB4ICFpbXBvcnRhbnQ7CiAgd2lkdGg6IDExcHggIWltcG9ydGFudDsKICBoZWlnaHQ6IDExcHggIWltcG9ydGFudDsKICBmb250LXNpemU6IDEwcHggIWltcG9ydGFudDsKICB6LWluZGV4OiAxMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciBzcGFuLnRpdGxlIHsKICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgYSB7CiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKICBwYWRkaW5nLXRvcDogMXB4ICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFyIGEuZXhwYW5kU291cmNlIHsKICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmllIHsKICBmb250LXNpemU6IC45ZW0gIWltcG9ydGFudDsKICBwYWRkaW5nOiAxcHggMCAxcHggMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5pZSAudG9vbGJhciB7CiAgbGluZS1oZWlnaHQ6IDhweCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5pZSAudG9vbGJhciBhIHsKICBwYWRkaW5nLXRvcDogMHB4ICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lLmFsdDEgLmNvbnRlbnQsCi5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZS5hbHQyIC5jb250ZW50LAouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuaGlnaGxpZ2h0ZWQgLm51bWJlciwKLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lLmhpZ2hsaWdodGVkLmFsdDEgLmNvbnRlbnQsCi5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZS5oaWdobGlnaHRlZC5hbHQyIC5jb250ZW50IHsKICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lIC5udW1iZXIgewogIGNvbG9yOiAjYmJiYmJiICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lIC5jb250ZW50IHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnRvb2xiYXIgewogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgYSB7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5wbGFpbiwgLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5wbGFpbiBhIHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbW1lbnRzLCAuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbW1lbnRzIGEgewogIGNvbG9yOiAjMDA4MjAwICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5zdHJpbmcsIC5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuc3RyaW5nIGEgewogIGNvbG9yOiBibHVlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5rZXl3b3JkIHsKICBjb2xvcjogIzAwNjY5OSAhaW1wb3J0YW50OwogIGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5wcmVwcm9jZXNzb3IgewogIGNvbG9yOiBncmF5ICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC52YXJpYWJsZSB7CiAgY29sb3I6ICNhYTc3MDAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnZhbHVlIHsKICBjb2xvcjogIzAwOTkwMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuZnVuY3Rpb25zIHsKICBjb2xvcjogI2ZmMTQ5MyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuY29uc3RhbnRzIHsKICBjb2xvcjogIzAwNjZjYyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuc2NyaXB0IHsKICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuY29sb3IxLCAuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbG9yMSBhIHsKICBjb2xvcjogZ3JheSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuY29sb3IyLCAuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbG9yMiBhIHsKICBjb2xvcjogI2ZmMTQ5MyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuY29sb3IzLCAuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbG9yMyBhIHsKICBjb2xvcjogcmVkICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5icmVhaywgLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5icmVhayBhIHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQo%3D" /> <link rel="stylesheet" type="text/css" href="data:text/css;base64,LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKgogKiBAY29weXJpZ2h0CiAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEFsZXggR29yYmF0Y2hldi4KICoKICogQGxpY2Vuc2UKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMuCiAqLwouc3ludGF4aGlnaGxpZ2h0ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5saW5lLmFsdDEgewogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5saW5lLmFsdDIgewogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5saW5lLmhpZ2hsaWdodGVkLmFsdDEsIC5zeW50YXhoaWdobGlnaHRlciAubGluZS5oaWdobGlnaHRlZC5hbHQyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5saW5lLmhpZ2hsaWdodGVkLm51bWJlciB7CiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIGNhcHRpb24gewogIGNvbG9yOiBibGFjayAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuZ3V0dGVyIHsKICBjb2xvcjogI2FmYWZhZiAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuZ3V0dGVyIC5saW5lIHsKICBib3JkZXItcmlnaHQ6IDNweCBzb2xpZCAjNmNlMjZjICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5ndXR0ZXIgLmxpbmUuaGlnaGxpZ2h0ZWQgewogIGJhY2tncm91bmQtY29sb3I6ICM2Y2UyNmMgIWltcG9ydGFudDsKICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUgLmNvbnRlbnQgewogIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgewogIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciB7CiAgY29sb3I6IGJsdWUgIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kOiB3aGl0ZSAhaW1wb3J0YW50OwogIGJvcmRlcjogMXB4IHNvbGlkICM2Y2UyNmMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIGEgewogIGNvbG9yOiBibHVlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciBhOmhvdmVyIHsKICBjb2xvcjogcmVkICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFyIHsKICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kOiAjNmNlMjZjICFpbXBvcnRhbnQ7CiAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFyIGEgewogIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciBhOmhvdmVyIHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnBsYWluLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLnBsYWluIGEgewogIGNvbG9yOiBibGFjayAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuY29tbWVudHMsIC5zeW50YXhoaWdobGlnaHRlciAuY29tbWVudHMgYSB7CiAgY29sb3I6ICMwMDgyMDAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnN0cmluZywgLnN5bnRheGhpZ2hsaWdodGVyIC5zdHJpbmcgYSB7CiAgY29sb3I6IGJsdWUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmtleXdvcmQgewogIGNvbG9yOiAjMDA2Njk5ICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5wcmVwcm9jZXNzb3IgewogIGNvbG9yOiBncmF5ICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC52YXJpYWJsZSB7CiAgY29sb3I6ICNhYTc3MDAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnZhbHVlIHsKICBjb2xvcjogIzAwOTkwMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuZnVuY3Rpb25zIHsKICBjb2xvcjogI2ZmMTQ5MyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuY29uc3RhbnRzIHsKICBjb2xvcjogIzAwNjZjYyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuc2NyaXB0IHsKICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50OwogIGNvbG9yOiAjMDA2Njk5ICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZC1jb2xvcjogbm9uZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuY29sb3IxLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMSBhIHsKICBjb2xvcjogZ3JheSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuY29sb3IyLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMiBhIHsKICBjb2xvcjogI2ZmMTQ5MyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuY29sb3IzLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMyBhIHsKICBjb2xvcjogcmVkICFpbXBvcnRhbnQ7Cn0KCi5zeW50YXhoaWdobGlnaHRlciAua2V5d29yZCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKfQo%3D" /> <script type="text/javascript" src="data:application/javascript;base64,Ly8gWFJlZ0V4cCAxLjUuMQovLyAoYykgMjAwNy0yMDEyIFN0ZXZlbiBMZXZpdGhhbgovLyBNSVQgTGljZW5zZQovLyA8aHR0cDovL3hyZWdleHAuY29tPgovLyBQcm92aWRlcyBhbiBhdWdtZW50ZWQsIGV4dGVuc2libGUsIGNyb3NzLWJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgcmVndWxhciBleHByZXNzaW9ucywKLy8gaW5jbHVkaW5nIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgc3ludGF4LCBmbGFncywgYW5kIG1ldGhvZHMKCnZhciBYUmVnRXhwOwoKaWYgKFhSZWdFeHApIHsKICAgIC8vIEF2b2lkIHJ1bm5pbmcgdHdpY2UsIHNpbmNlIHRoYXQgd291bGQgYnJlYWsgcmVmZXJlbmNlcyB0byBuYXRpdmUgZ2xvYmFscwogICAgdGhyb3cgRXJyb3IoImNhbid0IGxvYWQgWFJlZ0V4cCB0d2ljZSBpbiB0aGUgc2FtZSBmcmFtZSIpOwp9CgovLyBSdW4gd2l0aGluIGFuIGFub255bW91cyBmdW5jdGlvbiB0byBwcm90ZWN0IHZhcmlhYmxlcyBhbmQgYXZvaWQgbmV3IGdsb2JhbHMKKGZ1bmN0aW9uICh1bmRlZmluZWQpIHsKCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIENvbnN0cnVjdG9yCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIC8vIEFjY2VwdHMgYSBwYXR0ZXJuIGFuZCBmbGFnczsgcmV0dXJucyBhIG5ldywgZXh0ZW5kZWQgYFJlZ0V4cGAgb2JqZWN0LiBEaWZmZXJzIGZyb20gYSBuYXRpdmUKICAgIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiB0aGF0IGFkZGl0aW9uYWwgc3ludGF4IGFuZCBmbGFncyBhcmUgc3VwcG9ydGVkIGFuZCBjcm9zcy1icm93c2VyCiAgICAvLyBzeW50YXggaW5jb25zaXN0ZW5jaWVzIGFyZSBhbWVsaW9yYXRlZC4gYFhSZWdFeHAoL3JlZ2V4LylgIGNsb25lcyBhbiBleGlzdGluZyByZWdleCBhbmQKICAgIC8vIGNvbnZlcnRzIHRvIHR5cGUgWFJlZ0V4cAogICAgWFJlZ0V4cCA9IGZ1bmN0aW9uIChwYXR0ZXJuLCBmbGFncykgewogICAgICAgIHZhciBvdXRwdXQgPSBbXSwKICAgICAgICAgICAgY3VyclNjb3BlID0gWFJlZ0V4cC5PVVRTSURFX0NMQVNTLAogICAgICAgICAgICBwb3MgPSAwLAogICAgICAgICAgICBjb250ZXh0LCB0b2tlblJlc3VsdCwgbWF0Y2gsIGNociwgcmVnZXg7CgogICAgICAgIGlmIChYUmVnRXhwLmlzUmVnRXhwKHBhdHRlcm4pKSB7CiAgICAgICAgICAgIGlmIChmbGFncyAhPT0gdW5kZWZpbmVkKQogICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCJjYW4ndCBzdXBwbHkgZmxhZ3Mgd2hlbiBjb25zdHJ1Y3Rpbmcgb25lIFJlZ0V4cCBmcm9tIGFub3RoZXIiKTsKICAgICAgICAgICAgcmV0dXJuIGNsb25lKHBhdHRlcm4pOwogICAgICAgIH0KICAgICAgICAvLyBUb2tlbnMgYmVjb21lIHBhcnQgb2YgdGhlIHJlZ2V4IGNvbnN0cnVjdGlvbiBwcm9jZXNzLCBzbyBwcm90ZWN0IGFnYWluc3QgaW5maW5pdGUKICAgICAgICAvLyByZWN1cnNpb24gd2hlbiBhbiBYUmVnRXhwIGlzIGNvbnN0cnVjdGVkIHdpdGhpbiBhIHRva2VuIGhhbmRsZXIgb3IgdHJpZ2dlcgogICAgICAgIGlmIChpc0luc2lkZUNvbnN0cnVjdG9yKQogICAgICAgICAgICB0aHJvdyBFcnJvcigiY2FuJ3QgY2FsbCB0aGUgWFJlZ0V4cCBjb25zdHJ1Y3RvciB3aXRoaW4gdG9rZW4gZGVmaW5pdGlvbiBmdW5jdGlvbnMiKTsKCiAgICAgICAgZmxhZ3MgPSBmbGFncyB8fCAiIjsKICAgICAgICBjb250ZXh0ID0geyAvLyBgdGhpc2Agb2JqZWN0IGZvciBjdXN0b20gdG9rZW5zCiAgICAgICAgICAgIGhhc05hbWVkQ2FwdHVyZTogZmFsc2UsCiAgICAgICAgICAgIGNhcHR1cmVOYW1lczogW10sCiAgICAgICAgICAgIGhhc0ZsYWc6IGZ1bmN0aW9uIChmbGFnKSB7cmV0dXJuIGZsYWdzLmluZGV4T2YoZmxhZykgPiAtMTt9LAogICAgICAgICAgICBzZXRGbGFnOiBmdW5jdGlvbiAoZmxhZykge2ZsYWdzICs9IGZsYWc7fQogICAgICAgIH07CgogICAgICAgIHdoaWxlIChwb3MgPCBwYXR0ZXJuLmxlbmd0aCkgewogICAgICAgICAgICAvLyBDaGVjayBmb3IgY3VzdG9tIHRva2VucyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbgogICAgICAgICAgICB0b2tlblJlc3VsdCA9IHJ1blRva2VucyhwYXR0ZXJuLCBwb3MsIGN1cnJTY29wZSwgY29udGV4dCk7CgogICAgICAgICAgICBpZiAodG9rZW5SZXN1bHQpIHsKICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKHRva2VuUmVzdWx0Lm91dHB1dCk7CiAgICAgICAgICAgICAgICBwb3MgKz0gKHRva2VuUmVzdWx0Lm1hdGNoWzBdLmxlbmd0aCB8fCAxKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBuYXRpdmUgbXVsdGljaGFyYWN0ZXIgbWV0YXNlcXVlbmNlcyAoZXhjbHVkaW5nIGNoYXJhY3RlciBjbGFzc2VzKSBhdAogICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24KICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IG5hdGl2LmV4ZWMuY2FsbChuYXRpdmVUb2tlbnNbY3VyclNjb3BlXSwgcGF0dGVybi5zbGljZShwb3MpKSkgewogICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKG1hdGNoWzBdKTsKICAgICAgICAgICAgICAgICAgICBwb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBjaHIgPSBwYXR0ZXJuLmNoYXJBdChwb3MpOwogICAgICAgICAgICAgICAgICAgIGlmIChjaHIgPT09ICJbIikKICAgICAgICAgICAgICAgICAgICAgICAgY3VyclNjb3BlID0gWFJlZ0V4cC5JTlNJREVfQ0xBU1M7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09PSAiXSIpCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJTY29wZSA9IFhSZWdFeHAuT1VUU0lERV9DTEFTUzsKICAgICAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHBvc2l0aW9uIG9uZSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChjaHIpOwogICAgICAgICAgICAgICAgICAgIHBvcysrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZWdleCA9IFJlZ0V4cChvdXRwdXQuam9pbigiIiksIG5hdGl2LnJlcGxhY2UuY2FsbChmbGFncywgZmxhZ0NsaXAsICIiKSk7CiAgICAgICAgcmVnZXguX3hyZWdleHAgPSB7CiAgICAgICAgICAgIHNvdXJjZTogcGF0dGVybiwKICAgICAgICAgICAgY2FwdHVyZU5hbWVzOiBjb250ZXh0Lmhhc05hbWVkQ2FwdHVyZSA/IGNvbnRleHQuY2FwdHVyZU5hbWVzIDogbnVsbAogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHJlZ2V4OwogICAgfTsKCgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vICBQdWJsaWMgcHJvcGVydGllcwogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBYUmVnRXhwLnZlcnNpb24gPSAiMS41LjEiOwoKICAgIC8vIFRva2VuIHNjb3BlIGJpdGZsYWdzCiAgICBYUmVnRXhwLklOU0lERV9DTEFTUyA9IDE7CiAgICBYUmVnRXhwLk9VVFNJREVfQ0xBU1MgPSAyOwoKCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIFByaXZhdGUgdmFyaWFibGVzCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHZhciByZXBsYWNlbWVudFRva2VuID0gL1wkKD86KFxkXGQ/fFskJmAnXSl8eyhbJFx3XSspfSkvZywKICAgICAgICBmbGFnQ2xpcCA9IC9bXmdpbXldK3woW1xzXFNdKSg/PVtcc1xTXSpcMSkvZywgLy8gTm9ubmF0aXZlIGFuZCBkdXBsaWNhdGUgZmxhZ3MKICAgICAgICBxdWFudGlmaWVyID0gL14oPzpbPyorXXx7XGQrKD86LFxkKik/fSlcPz8vLAogICAgICAgIGlzSW5zaWRlQ29uc3RydWN0b3IgPSBmYWxzZSwKICAgICAgICB0b2tlbnMgPSBbXSwKICAgICAgICAvLyBDb3B5IG5hdGl2ZSBnbG9iYWxzIGZvciByZWZlcmVuY2UgKCJuYXRpdmUiIGlzIGFuIEVTMyByZXNlcnZlZCBrZXl3b3JkKQogICAgICAgIG5hdGl2ID0gewogICAgICAgICAgICBleGVjOiBSZWdFeHAucHJvdG90eXBlLmV4ZWMsCiAgICAgICAgICAgIHRlc3Q6IFJlZ0V4cC5wcm90b3R5cGUudGVzdCwKICAgICAgICAgICAgbWF0Y2g6IFN0cmluZy5wcm90b3R5cGUubWF0Y2gsCiAgICAgICAgICAgIHJlcGxhY2U6IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSwKICAgICAgICAgICAgc3BsaXQ6IFN0cmluZy5wcm90b3R5cGUuc3BsaXQKICAgICAgICB9LAogICAgICAgIGNvbXBsaWFudEV4ZWNOcGNnID0gbmF0aXYuZXhlYy5jYWxsKC8oKT8/LywgIiIpWzFdID09PSB1bmRlZmluZWQsIC8vIGNoZWNrIGBleGVjYCBoYW5kbGluZyBvZiBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cHMKICAgICAgICBjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciB4ID0gL14vZzsKICAgICAgICAgICAgbmF0aXYudGVzdC5jYWxsKHgsICIiKTsKICAgICAgICAgICAgcmV0dXJuICF4Lmxhc3RJbmRleDsKICAgICAgICB9KCksCiAgICAgICAgaGFzTmF0aXZlWSA9IFJlZ0V4cC5wcm90b3R5cGUuc3RpY2t5ICE9PSB1bmRlZmluZWQsCiAgICAgICAgbmF0aXZlVG9rZW5zID0ge307CgogICAgLy8gYG5hdGl2ZVRva2Vuc2AgbWF0Y2ggbmF0aXZlIG11bHRpY2hhcmFjdGVyIG1ldGFzZXF1ZW5jZXMgb25seSAoaW5jbHVkaW5nIGRlcHJlY2F0ZWQgb2N0YWxzLAogICAgLy8gZXhjbHVkaW5nIGNoYXJhY3RlciBjbGFzc2VzKQogICAgbmF0aXZlVG9rZW5zW1hSZWdFeHAuSU5TSURFX0NMQVNTXSA9IC9eKD86XFwoPzpbMC0zXVswLTddezAsMn18WzQtN11bMC03XT98eFtcZEEtRmEtZl17Mn18dVtcZEEtRmEtZl17NH18Y1tBLVphLXpdfFtcc1xTXSkpLzsKICAgIG5hdGl2ZVRva2Vuc1tYUmVnRXhwLk9VVFNJREVfQ0xBU1NdID0gL14oPzpcXCg/OjAoPzpbMC0zXVswLTddezAsMn18WzQtN11bMC03XT8pP3xbMS05XVxkKnx4W1xkQS1GYS1mXXsyfXx1W1xkQS1GYS1mXXs0fXxjW0EtWmEtel18W1xzXFNdKXxcKFw/Wzo9IV18Wz8qK11cP3x7XGQrKD86LFxkKik/fVw/PykvOwoKCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIFB1YmxpYyBtZXRob2RzCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIC8vIExldHMgeW91IGV4dGVuZCBvciBjaGFuZ2UgWFJlZ0V4cCBzeW50YXggYW5kIGNyZWF0ZSBjdXN0b20gZmxhZ3MuIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5CiAgICAvLyB0aGUgWFJlZ0V4cCBsaWJyYXJ5IGFuZCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgWFJlZ0V4cCBwbHVnaW5zLiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvcgogICAgLy8gdXNlcnMgd2l0aCBhZHZhbmNlZCBrbm93bGVkZ2Ugb2YgSmF2YVNjcmlwdCdzIHJlZ3VsYXIgZXhwcmVzc2lvbiBzeW50YXggYW5kIGJlaGF2aW9yLiBJdCBjYW4KICAgIC8vIGJlIGRpc2FibGVkIGJ5IGBYUmVnRXhwLmZyZWV6ZVRva2Vuc2AKICAgIFhSZWdFeHAuYWRkVG9rZW4gPSBmdW5jdGlvbiAocmVnZXgsIGhhbmRsZXIsIHNjb3BlLCB0cmlnZ2VyKSB7CiAgICAgICAgdG9rZW5zLnB1c2goewogICAgICAgICAgICBwYXR0ZXJuOiBjbG9uZShyZWdleCwgImciICsgKGhhc05hdGl2ZVkgPyAieSIgOiAiIikpLAogICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLAogICAgICAgICAgICBzY29wZTogc2NvcGUgfHwgWFJlZ0V4cC5PVVRTSURFX0NMQVNTLAogICAgICAgICAgICB0cmlnZ2VyOiB0cmlnZ2VyIHx8IG51bGwKICAgICAgICB9KTsKICAgIH07CgogICAgLy8gQWNjZXB0cyBhIHBhdHRlcm4gYW5kIGZsYWdzOyByZXR1cm5zIGFuIGV4dGVuZGVkIGBSZWdFeHBgIG9iamVjdC4gSWYgdGhlIHBhdHRlcm4gYW5kIGZsYWcKICAgIC8vIGNvbWJpbmF0aW9uIGhhcyBwcmV2aW91c2x5IGJlZW4gY2FjaGVkLCB0aGUgY2FjaGVkIGNvcHkgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSB0aGUgbmV3bHkKICAgIC8vIGNyZWF0ZWQgcmVnZXggaXMgY2FjaGVkCiAgICBYUmVnRXhwLmNhY2hlID0gZnVuY3Rpb24gKHBhdHRlcm4sIGZsYWdzKSB7CiAgICAgICAgdmFyIGtleSA9IHBhdHRlcm4gKyAiLyIgKyAoZmxhZ3MgfHwgIiIpOwogICAgICAgIHJldHVybiBYUmVnRXhwLmNhY2hlW2tleV0gfHwgKFhSZWdFeHAuY2FjaGVba2V5XSA9IFhSZWdFeHAocGF0dGVybiwgZmxhZ3MpKTsKICAgIH07CgogICAgLy8gQWNjZXB0cyBhIGBSZWdFeHBgIGluc3RhbmNlOyByZXR1cm5zIGEgY29weSB3aXRoIHRoZSBgL2dgIGZsYWcgc2V0LiBUaGUgY29weSBoYXMgYSBmcmVzaAogICAgLy8gYGxhc3RJbmRleGAgKHNldCB0byB6ZXJvKS4gSWYgeW91IHdhbnQgdG8gY29weSBhIHJlZ2V4IHdpdGhvdXQgZm9yY2luZyB0aGUgYGdsb2JhbGAKICAgIC8vIHByb3BlcnR5LCB1c2UgYFhSZWdFeHAocmVnZXgpYC4gRG8gbm90IHVzZSBgUmVnRXhwKHJlZ2V4KWAgYmVjYXVzZSBpdCB3aWxsIG5vdCBwcmVzZXJ2ZQogICAgLy8gc3BlY2lhbCBwcm9wZXJ0aWVzIHJlcXVpcmVkIGZvciBuYW1lZCBjYXB0dXJlCiAgICBYUmVnRXhwLmNvcHlBc0dsb2JhbCA9IGZ1bmN0aW9uIChyZWdleCkgewogICAgICAgIHJldHVybiBjbG9uZShyZWdleCwgImciKTsKICAgIH07CgogICAgLy8gQWNjZXB0cyBhIHN0cmluZzsgcmV0dXJucyB0aGUgc3RyaW5nIHdpdGggcmVnZXggbWV0YWNoYXJhY3RlcnMgZXNjYXBlZC4gVGhlIHJldHVybmVkIHN0cmluZwogICAgLy8gY2FuIHNhZmVseSBiZSB1c2VkIGF0IGFueSBwb2ludCB3aXRoaW4gYSByZWdleCB0byBtYXRjaCB0aGUgcHJvdmlkZWQgbGl0ZXJhbCBzdHJpbmcuIEVzY2FwZWQKICAgIC8vIGNoYXJhY3RlcnMgYXJlIFsgXSB7IH0gKCApICogKyA/IC0gLiAsIFwgXiAkIHwgIyBhbmQgd2hpdGVzcGFjZQogICAgWFJlZ0V4cC5lc2NhcGUgPSBmdW5jdGlvbiAoc3RyKSB7CiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLVtcXXt9KCkqKz8uLFxcXiR8I1xzXS9nLCAiXFwkJiIpOwogICAgfTsKCiAgICAvLyBBY2NlcHRzIGEgc3RyaW5nIHRvIHNlYXJjaCwgcmVnZXggdG8gc2VhcmNoIHdpdGgsIHBvc2l0aW9uIHRvIHN0YXJ0IHRoZSBzZWFyY2ggd2l0aGluIHRoZQogICAgLy8gc3RyaW5nIChkZWZhdWx0OiAwKSwgYW5kIGFuIG9wdGlvbmFsIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG1hdGNoZXMgbXVzdCBzdGFydCBhdC1vci0KICAgIC8vIGFmdGVyIHRoZSBwb3NpdGlvbiBvciBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIG9ubHkuIFRoaXMgZnVuY3Rpb24gaWdub3JlcyB0aGUgYGxhc3RJbmRleGAKICAgIC8vIG9mIHRoZSBwcm92aWRlZCByZWdleCBpbiBpdHMgb3duIGhhbmRsaW5nLCBidXQgdXBkYXRlcyB0aGUgcHJvcGVydHkgZm9yIGNvbXBhdGliaWxpdHkKICAgIFhSZWdFeHAuZXhlY0F0ID0gZnVuY3Rpb24gKHN0ciwgcmVnZXgsIHBvcywgYW5jaG9yZWQpIHsKICAgICAgICB2YXIgcjIgPSBjbG9uZShyZWdleCwgImciICsgKChhbmNob3JlZCAmJiBoYXNOYXRpdmVZKSA/ICJ5IiA6ICIiKSksCiAgICAgICAgICAgIG1hdGNoOwogICAgICAgIHIyLmxhc3RJbmRleCA9IHBvcyA9IHBvcyB8fCAwOwogICAgICAgIG1hdGNoID0gcjIuZXhlYyhzdHIpOyAvLyBSdW4gdGhlIGFsdGVyZWQgYGV4ZWNgIChyZXF1aXJlZCBmb3IgYGxhc3RJbmRleGAgZml4LCBldGMuKQogICAgICAgIGlmIChhbmNob3JlZCAmJiBtYXRjaCAmJiBtYXRjaC5pbmRleCAhPT0gcG9zKQogICAgICAgICAgICBtYXRjaCA9IG51bGw7CiAgICAgICAgaWYgKHJlZ2V4Lmdsb2JhbCkKICAgICAgICAgICAgcmVnZXgubGFzdEluZGV4ID0gbWF0Y2ggPyByMi5sYXN0SW5kZXggOiAwOwogICAgICAgIHJldHVybiBtYXRjaDsKICAgIH07CgogICAgLy8gQnJlYWtzIHRoZSB1bnJlc3RvcmFibGUgbGluayB0byBYUmVnRXhwJ3MgcHJpdmF0ZSBsaXN0IG9mIHRva2VucywgdGhlcmVieSBwcmV2ZW50aW5nCiAgICAvLyBzeW50YXggYW5kIGZsYWcgY2hhbmdlcy4gU2hvdWxkIGJlIHJ1biBhZnRlciBYUmVnRXhwIGFuZCBhbnkgcGx1Z2lucyBhcmUgbG9hZGVkCiAgICBYUmVnRXhwLmZyZWV6ZVRva2VucyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBYUmVnRXhwLmFkZFRva2VuID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aHJvdyBFcnJvcigiY2FuJ3QgcnVuIGFkZFRva2VuIGFmdGVyIGZyZWV6ZVRva2VucyIpOwogICAgICAgIH07CiAgICB9OwoKICAgIC8vIEFjY2VwdHMgYW55IHZhbHVlOyByZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgYFJlZ0V4cGAgb2JqZWN0LgogICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYWxzbyBgdHJ1ZWAgZm9yIHJlZ2V4IGxpdGVyYWxzIGFuZCByZWdleGVzIGNyZWF0ZWQgYnkgdGhlIGBYUmVnRXhwYAogICAgLy8gY29uc3RydWN0b3IuIFRoaXMgd29ya3MgY29ycmVjdGx5IGZvciB2YXJpYWJsZXMgY3JlYXRlZCBpbiBhbm90aGVyIGZyYW1lLCB3aGVuIGBpbnN0YW5jZW9mYAogICAgLy8gYW5kIGBjb25zdHJ1Y3RvcmAgY2hlY2tzIHdvdWxkIGZhaWwgdG8gd29yayBhcyBpbnRlbmRlZAogICAgWFJlZ0V4cC5pc1JlZ0V4cCA9IGZ1bmN0aW9uIChvKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gIltvYmplY3QgUmVnRXhwXSI7CiAgICB9OwoKICAgIC8vIEV4ZWN1dGVzIGBjYWxsYmFja2Agb25jZSBwZXIgbWF0Y2ggd2l0aGluIGBzdHJgLiBQcm92aWRlcyBhIHNpbXBsZXIgYW5kIGNsZWFuZXIgd2F5IHRvCiAgICAvLyBpdGVyYXRlIG92ZXIgcmVnZXggbWF0Y2hlcyBjb21wYXJlZCB0byB0aGUgdHJhZGl0aW9uYWwgYXBwcm9hY2hlcyBvZiBzdWJ2ZXJ0aW5nCiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBvciByZXBlYXRlZGx5IGNhbGxpbmcgYGV4ZWNgIHdpdGhpbiBhIGB3aGlsZWAgbG9vcAogICAgWFJlZ0V4cC5pdGVyYXRlID0gZnVuY3Rpb24gKHN0ciwgcmVnZXgsIGNhbGxiYWNrLCBjb250ZXh0KSB7CiAgICAgICAgdmFyIHIyID0gY2xvbmUocmVnZXgsICJnIiksCiAgICAgICAgICAgIGkgPSAtMSwgbWF0Y2g7CiAgICAgICAgd2hpbGUgKG1hdGNoID0gcjIuZXhlYyhzdHIpKSB7IC8vIFJ1biB0aGUgYWx0ZXJlZCBgZXhlY2AgKHJlcXVpcmVkIGZvciBgbGFzdEluZGV4YCBmaXgsIGV0Yy4pCiAgICAgICAgICAgIGlmIChyZWdleC5nbG9iYWwpCiAgICAgICAgICAgICAgICByZWdleC5sYXN0SW5kZXggPSByMi5sYXN0SW5kZXg7IC8vIERvaW5nIHRoaXMgdG8gZm9sbG93IGV4cGVjdGF0aW9ucyBpZiBgbGFzdEluZGV4YCBpcyBjaGVja2VkIHdpdGhpbiBgY2FsbGJhY2tgCiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgbWF0Y2gsICsraSwgc3RyLCByZWdleCk7CiAgICAgICAgICAgIGlmIChyMi5sYXN0SW5kZXggPT09IG1hdGNoLmluZGV4KQogICAgICAgICAgICAgICAgcjIubGFzdEluZGV4Kys7CiAgICAgICAgfQogICAgICAgIGlmIChyZWdleC5nbG9iYWwpCiAgICAgICAgICAgIHJlZ2V4Lmxhc3RJbmRleCA9IDA7CiAgICB9OwoKICAgIC8vIEFjY2VwdHMgYSBzdHJpbmcgYW5kIGFuIGFycmF5IG9mIHJlZ2V4ZXM7IHJldHVybnMgdGhlIHJlc3VsdCBvZiB1c2luZyBlYWNoIHN1Y2Nlc3NpdmUgcmVnZXgKICAgIC8vIHRvIHNlYXJjaCB3aXRoaW4gdGhlIG1hdGNoZXMgb2YgdGhlIHByZXZpb3VzIHJlZ2V4LiBUaGUgYXJyYXkgb2YgcmVnZXhlcyBjYW4gYWxzbyBjb250YWluCiAgICAvLyBvYmplY3RzIHdpdGggYHJlZ2V4YCBhbmQgYGJhY2tyZWZgIHByb3BlcnRpZXMsIGluIHdoaWNoIGNhc2UgdGhlIG5hbWVkIG9yIG51bWJlcmVkIGJhY2stCiAgICAvLyByZWZlcmVuY2VzIHNwZWNpZmllZCBhcmUgcGFzc2VkIGZvcndhcmQgdG8gdGhlIG5leHQgcmVnZXggb3IgcmV0dXJuZWQuIEUuZy46CiAgICAvLyB2YXIgeHJlZ2V4cEltZ0ZpbGVOYW1lcyA9IFhSZWdFeHAubWF0Y2hDaGFpbihodG1sLCBbCiAgICAvLyAgICAge3JlZ2V4OiAvPGltZ1xiKFtePl0rKT4vaSwgYmFja3JlZjogMX0sIC8vIDxpbWc%2BIHRhZyBhdHRyaWJ1dGVzCiAgICAvLyAgICAge3JlZ2V4OiBYUmVnRXhwKCcoP2l4KSBcXHMgc3JjPSIgKD88c3JjPiBbXiJdKyApJyksIGJhY2tyZWY6ICJzcmMifSwgLy8gc3JjIGF0dHJpYnV0ZSB2YWx1ZXMKICAgIC8vICAgICB7cmVnZXg6IFhSZWdFeHAoIl5odHRwOi8veHJlZ2V4cFxcLmNvbSgvW14jP10rKSIsICJpIiksIGJhY2tyZWY6IDF9LCAvLyB4cmVnZXhwLmNvbSBwYXRocwogICAgLy8gICAgIC9bXlwvXSskLyAvLyBmaWxlbmFtZXMgKHN0cmlwIGRpcmVjdG9yeSBwYXRocykKICAgIC8vIF0pOwogICAgWFJlZ0V4cC5tYXRjaENoYWluID0gZnVuY3Rpb24gKHN0ciwgY2hhaW4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gcmVjdXJzZUNoYWluICh2YWx1ZXMsIGxldmVsKSB7CiAgICAgICAgICAgIHZhciBpdGVtID0gY2hhaW5bbGV2ZWxdLnJlZ2V4ID8gY2hhaW5bbGV2ZWxdIDoge3JlZ2V4OiBjaGFpbltsZXZlbF19LAogICAgICAgICAgICAgICAgcmVnZXggPSBjbG9uZShpdGVtLnJlZ2V4LCAiZyIpLAogICAgICAgICAgICAgICAgbWF0Y2hlcyA9IFtdLCBpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBYUmVnRXhwLml0ZXJhdGUodmFsdWVzW2ldLCByZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKGl0ZW0uYmFja3JlZiA/IChtYXRjaFtpdGVtLmJhY2tyZWZdIHx8ICIiKSA6IG1hdGNoWzBdKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAoKGxldmVsID09PSBjaGFpbi5sZW5ndGggLSAxKSB8fCAhbWF0Y2hlcy5sZW5ndGgpID8KICAgICAgICAgICAgICAgIG1hdGNoZXMgOiByZWN1cnNlQ2hhaW4obWF0Y2hlcywgbGV2ZWwgKyAxKTsKICAgICAgICB9KFtzdHJdLCAwKTsKICAgIH07CgoKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyAgTmV3IFJlZ0V4cCBwcm90b3R5cGUgbWV0aG9kcwogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvLyBBY2NlcHRzIGEgY29udGV4dCBvYmplY3QgYW5kIGFyZ3VtZW50cyBhcnJheTsgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgYGV4ZWNgIHdpdGggdGhlCiAgICAvLyBmaXJzdCB2YWx1ZSBpbiB0aGUgYXJndW1lbnRzIGFycmF5LiB0aGUgY29udGV4dCBpcyBpZ25vcmVkIGJ1dCBpcyBhY2NlcHRlZCBmb3IgY29uZ3J1aXR5CiAgICAvLyB3aXRoIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgCiAgICBSZWdFeHAucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKGNvbnRleHQsIGFyZ3MpIHsKICAgICAgICByZXR1cm4gdGhpcy5leGVjKGFyZ3NbMF0pOwogICAgfTsKCiAgICAvLyBBY2NlcHRzIGEgY29udGV4dCBvYmplY3QgYW5kIHN0cmluZzsgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgYGV4ZWNgIHdpdGggdGhlIHByb3ZpZGVkCiAgICAvLyBzdHJpbmcuIHRoZSBjb250ZXh0IGlzIGlnbm9yZWQgYnV0IGlzIGFjY2VwdGVkIGZvciBjb25ncnVpdHkgd2l0aCBgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGxgCiAgICBSZWdFeHAucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoY29udGV4dCwgc3RyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZXhlYyhzdHIpOwogICAgfTsKCgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vICBPdmVycmlkZW4gbmF0aXZlIG1ldGhvZHMKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgLy8gQWRkcyBuYW1lZCBjYXB0dXJlIHN1cHBvcnQgKHdpdGggYmFja3JlZmVyZW5jZXMgcmV0dXJuZWQgYXMgYHJlc3VsdC5uYW1lYCksIGFuZCBmaXhlcyB0d28KICAgIC8vIGNyb3NzLWJyb3dzZXIgaXNzdWVzIHBlciBFUzM6CiAgICAvLyAtIENhcHR1cmVkIHZhbHVlcyBmb3Igbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXBzIHNob3VsZCBiZSByZXR1cm5lZCBhcyBgdW5kZWZpbmVkYCwKICAgIC8vICAgcmF0aGVyIHRoYW4gdGhlIGVtcHR5IHN0cmluZy4KICAgIC8vIC0gYGxhc3RJbmRleGAgc2hvdWxkIG5vdCBiZSBpbmNyZW1lbnRlZCBhZnRlciB6ZXJvLWxlbmd0aCBtYXRjaGVzLgogICAgUmVnRXhwLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24gKHN0cikgewogICAgICAgIHZhciBtYXRjaCwgbmFtZSwgcjIsIG9yaWdMYXN0SW5kZXg7CiAgICAgICAgaWYgKCF0aGlzLmdsb2JhbCkKICAgICAgICAgICAgb3JpZ0xhc3RJbmRleCA9IHRoaXMubGFzdEluZGV4OwogICAgICAgIG1hdGNoID0gbmF0aXYuZXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYCBmb3IKICAgICAgICAgICAgLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXBzCiAgICAgICAgICAgIGlmICghY29tcGxpYW50RXhlY05wY2cgJiYgbWF0Y2gubGVuZ3RoID4gMSAmJiBpbmRleE9mKG1hdGNoLCAiIikgPiAtMSkgewogICAgICAgICAgICAgICAgcjIgPSBSZWdFeHAodGhpcy5zb3VyY2UsIG5hdGl2LnJlcGxhY2UuY2FsbChnZXROYXRpdmVGbGFncyh0aGlzKSwgImciLCAiIikpOwogICAgICAgICAgICAgICAgLy8gVXNpbmcgYHN0ci5zbGljZShtYXRjaC5pbmRleClgIHJhdGhlciB0aGFuIGBtYXRjaFswXWAgaW4gY2FzZSBsb29rYWhlYWQgYWxsb3dlZAogICAgICAgICAgICAgICAgLy8gbWF0Y2hpbmcgZHVlIHRvIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgbWF0Y2gKICAgICAgICAgICAgICAgIG5hdGl2LnJlcGxhY2UuY2FsbCgoc3RyICsgIiIpLnNsaWNlKG1hdGNoLmluZGV4KSwgcjIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQXR0YWNoIG5hbWVkIGNhcHR1cmUgcHJvcGVydGllcwogICAgICAgICAgICBpZiAodGhpcy5feHJlZ2V4cCAmJiB0aGlzLl94cmVnZXhwLmNhcHR1cmVOYW1lcykgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLl94cmVnZXhwLmNhcHR1cmVOYW1lc1tpIC0gMV07CiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbbmFtZV0gPSBtYXRjaFtpXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBGaXggYnJvd3NlcnMgdGhhdCBpbmNyZW1lbnQgYGxhc3RJbmRleGAgYWZ0ZXIgemVyby1sZW5ndGggbWF0Y2hlcwogICAgICAgICAgICBpZiAoIWNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCAmJiB0aGlzLmdsb2JhbCAmJiAhbWF0Y2hbMF0ubGVuZ3RoICYmICh0aGlzLmxhc3RJbmRleCA%2BIG1hdGNoLmluZGV4KSkKICAgICAgICAgICAgICAgIHRoaXMubGFzdEluZGV4LS07CiAgICAgICAgfQogICAgICAgIGlmICghdGhpcy5nbG9iYWwpCiAgICAgICAgICAgIHRoaXMubGFzdEluZGV4ID0gb3JpZ0xhc3RJbmRleDsgLy8gRml4IElFLCBPcGVyYSBidWcgKGxhc3QgdGVzdGVkIElFIDkuMC41LCBPcGVyYSAxMS42MSBvbiBXaW5kb3dzKQogICAgICAgIHJldHVybiBtYXRjaDsKICAgIH07CgogICAgLy8gRml4IGJyb3dzZXIgYnVncyBpbiBuYXRpdmUgbWV0aG9kCiAgICBSZWdFeHAucHJvdG90eXBlLnRlc3QgPSBmdW5jdGlvbiAoc3RyKSB7CiAgICAgICAgLy8gVXNlIHRoZSBuYXRpdmUgYGV4ZWNgIHRvIHNraXAgc29tZSBwcm9jZXNzaW5nIG92ZXJoZWFkLCBldmVuIHRob3VnaCB0aGUgYWx0ZXJlZAogICAgICAgIC8vIGBleGVjYCB3b3VsZCB0YWtlIGNhcmUgb2YgdGhlIGBsYXN0SW5kZXhgIGZpeGVzCiAgICAgICAgdmFyIG1hdGNoLCBvcmlnTGFzdEluZGV4OwogICAgICAgIGlmICghdGhpcy5nbG9iYWwpCiAgICAgICAgICAgIG9yaWdMYXN0SW5kZXggPSB0aGlzLmxhc3RJbmRleDsKICAgICAgICBtYXRjaCA9IG5hdGl2LmV4ZWMuY2FsbCh0aGlzLCBzdHIpOwogICAgICAgIC8vIEZpeCBicm93c2VycyB0aGF0IGluY3JlbWVudCBgbGFzdEluZGV4YCBhZnRlciB6ZXJvLWxlbmd0aCBtYXRjaGVzCiAgICAgICAgaWYgKG1hdGNoICYmICFjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQgJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0aCAmJiAodGhpcy5sYXN0SW5kZXggPiBtYXRjaC5pbmRleCkpCiAgICAgICAgICAgIHRoaXMubGFzdEluZGV4LS07CiAgICAgICAgaWYgKCF0aGlzLmdsb2JhbCkKICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXggPSBvcmlnTGFzdEluZGV4OyAvLyBGaXggSUUsIE9wZXJhIGJ1ZyAobGFzdCB0ZXN0ZWQgSUUgOS4wLjUsIE9wZXJhIDExLjYxIG9uIFdpbmRvd3MpCiAgICAgICAgcmV0dXJuICEhbWF0Y2g7CiAgICB9OwoKICAgIC8vIEFkZHMgbmFtZWQgY2FwdHVyZSBzdXBwb3J0IGFuZCBmaXhlcyBicm93c2VyIGJ1Z3MgaW4gbmF0aXZlIG1ldGhvZAogICAgU3RyaW5nLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uIChyZWdleCkgewogICAgICAgIGlmICghWFJlZ0V4cC5pc1JlZ0V4cChyZWdleCkpCiAgICAgICAgICAgIHJlZ2V4ID0gUmVnRXhwKHJlZ2V4KTsgLy8gTmF0aXZlIGBSZWdFeHBgCiAgICAgICAgaWYgKHJlZ2V4Lmdsb2JhbCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmF0aXYubWF0Y2guYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgICAgcmVnZXgubGFzdEluZGV4ID0gMDsgLy8gRml4IElFIGJ1ZwogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVnZXguZXhlYyh0aGlzKTsgLy8gUnVuIHRoZSBhbHRlcmVkIGBleGVjYAogICAgfTsKCiAgICAvLyBBZGRzIHN1cHBvcnQgZm9yIGAke259YCB0b2tlbnMgZm9yIG5hbWVkIGFuZCBudW1iZXJlZCBiYWNrcmVmZXJlbmNlcyBpbiByZXBsYWNlbWVudCB0ZXh0LAogICAgLy8gYW5kIHByb3ZpZGVzIG5hbWVkIGJhY2tyZWZlcmVuY2VzIHRvIHJlcGxhY2VtZW50IGZ1bmN0aW9ucyBhcyBgYXJndW1lbnRzWzBdLm5hbWVgLiBBbHNvCiAgICAvLyBmaXhlcyBjcm9zcy1icm93c2VyIGRpZmZlcmVuY2VzIGluIHJlcGxhY2VtZW50IHRleHQgc3ludGF4IHdoZW4gcGVyZm9ybWluZyBhIHJlcGxhY2VtZW50CiAgICAvLyB1c2luZyBhIG5vbnJlZ2V4IHNlYXJjaCB2YWx1ZSwgYW5kIHRoZSB2YWx1ZSBvZiByZXBsYWNlbWVudCByZWdleGVzJyBgbGFzdEluZGV4YCBwcm9wZXJ0eQogICAgLy8gZHVyaW5nIHJlcGxhY2VtZW50IGl0ZXJhdGlvbnMuIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3Qgc3VwcG9ydCBTcGlkZXJNb25rZXkncyBwcm9wcmlldGFyeQogICAgLy8gdGhpcmQgKGBmbGFnc2ApIHBhcmFtZXRlcgogICAgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gKHNlYXJjaCwgcmVwbGFjZW1lbnQpIHsKICAgICAgICB2YXIgaXNSZWdleCA9IFhSZWdFeHAuaXNSZWdFeHAoc2VhcmNoKSwKICAgICAgICAgICAgY2FwdHVyZU5hbWVzLCByZXN1bHQsIHN0ciwgb3JpZ0xhc3RJbmRleDsKCiAgICAgICAgLy8gVGhlcmUgYXJlIHRvbyBtYW55IGNvbWJpbmF0aW9ucyBvZiBzZWFyY2gvcmVwbGFjZW1lbnQgdHlwZXMvdmFsdWVzIGFuZCBicm93c2VyIGJ1Z3MgdGhhdAogICAgICAgIC8vIHByZWNsdWRlIHBhc3NpbmcgdG8gbmF0aXZlIGByZXBsYWNlYCwgc28gZG9uJ3QgdHJ5CiAgICAgICAgLy9pZiAoLi4uKQogICAgICAgIC8vICAgIHJldHVybiBuYXRpdi5yZXBsYWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgogICAgICAgIGlmIChpc1JlZ2V4KSB7CiAgICAgICAgICAgIGlmIChzZWFyY2guX3hyZWdleHApCiAgICAgICAgICAgICAgICBjYXB0dXJlTmFtZXMgPSBzZWFyY2guX3hyZWdleHAuY2FwdHVyZU5hbWVzOyAvLyBBcnJheSBvciBgbnVsbGAKICAgICAgICAgICAgaWYgKCFzZWFyY2guZ2xvYmFsKQogICAgICAgICAgICAgICAgb3JpZ0xhc3RJbmRleCA9IHNlYXJjaC5sYXN0SW5kZXg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VhcmNoID0gc2VhcmNoICsgIiI7IC8vIFR5cGUgY29udmVyc2lvbgogICAgICAgIH0KCiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZXBsYWNlbWVudCkgPT09ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgcmVzdWx0ID0gbmF0aXYucmVwbGFjZS5jYWxsKHRoaXMgKyAiIiwgc2VhcmNoLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZU5hbWVzKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSBgYXJndW1lbnRzWzBdYCBzdHJpbmcgcHJpbWl0aXZlIHRvIGEgU3RyaW5nIG9iamVjdCB3aGljaCBjYW4gc3RvcmUgcHJvcGVydGllcwogICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXSA9IG5ldyBTdHJpbmcoYXJndW1lbnRzWzBdKTsKICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSBuYW1lZCBiYWNrcmVmZXJlbmNlcyBvbiBgYXJndW1lbnRzWzBdYAogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FwdHVyZU5hbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXB0dXJlTmFtZXNbaV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbMF1bY2FwdHVyZU5hbWVzW2ldXSA9IGFyZ3VtZW50c1tpICsgMV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gVXBkYXRlIGBsYXN0SW5kZXhgIGJlZm9yZSBjYWxsaW5nIGByZXBsYWNlbWVudGAgKGZpeCBicm93c2VycykKICAgICAgICAgICAgICAgIGlmIChpc1JlZ2V4ICYmIHNlYXJjaC5nbG9iYWwpCiAgICAgICAgICAgICAgICAgICAgc2VhcmNoLmxhc3RJbmRleCA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMl0gKyBhcmd1bWVudHNbMF0ubGVuZ3RoOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0ciA9IHRoaXMgKyAiIjsgLy8gVHlwZSBjb252ZXJzaW9uLCBzbyBgYXJnc1thcmdzLmxlbmd0aCAtIDFdYCB3aWxsIGJlIGEgc3RyaW5nIChnaXZlbiBub25zdHJpbmcgYHRoaXNgKQogICAgICAgICAgICByZXN1bHQgPSBuYXRpdi5yZXBsYWNlLmNhbGwoc3RyLCBzZWFyY2gsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzOyAvLyBLZWVwIHRoaXMgZnVuY3Rpb24ncyBgYXJndW1lbnRzYCBhdmFpbGFibGUgdGhyb3VnaCBjbG9zdXJlCiAgICAgICAgICAgICAgICByZXR1cm4gbmF0aXYucmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50ICsgIiIsIHJlcGxhY2VtZW50VG9rZW4sIGZ1bmN0aW9uICgkMCwgJDEsICQyKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyZWQgYmFja3JlZmVyZW5jZSAod2l0aG91dCBkZWxpbWl0ZXJzKSBvciBzcGVjaWFsIHZhcmlhYmxlCiAgICAgICAgICAgICAgICAgICAgaWYgKCQxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoJDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiQiOiByZXR1cm4gIiQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJiI6IHJldHVybiBhcmdzWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiYCI6IHJldHVybiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0uc2xpY2UoMCwgYXJnc1thcmdzLmxlbmd0aCAtIDJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiciOiByZXR1cm4gYXJnc1thcmdzLmxlbmd0aCAtIDFdLnNsaWNlKGFyZ3NbYXJncy5sZW5ndGggLSAyXSArIGFyZ3NbMF0ubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE51bWJlcmVkIGJhY2tyZWZlcmVuY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCBkb2VzICIkMTAiIG1lYW4/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBCYWNrcmVmZXJlbmNlIDEwLCBpZiAxMCBvciBtb3JlIGNhcHR1cmluZyBncm91cHMgZXhpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtIEJhY2tyZWZlcmVuY2UgMSBmb2xsb3dlZCBieSAiMCIsIGlmIDEtOSBjYXB0dXJpbmcgZ3JvdXBzIGV4aXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBPdGhlcndpc2UsIGl0J3MgdGhlIHN0cmluZyAiJDEwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsc28gbm90ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtIEJhY2tyZWZlcmVuY2VzIGNhbm5vdCBiZSBtb3JlIHRoYW4gdHdvIGRpZ2l0cyAoZW5mb3JjZWQgYnkgYHJlcGxhY2VtZW50VG9rZW5gKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0gIiQwMSIgaXMgZXF1aXZhbGVudCB0byAiJDEiIGlmIGEgY2FwdHVyaW5nIGdyb3VwIGV4aXN0cywgb3RoZXJ3aXNlIGl0J3MgdGhlIHN0cmluZyAiJDAxIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0gVGhlcmUgaXMgbm8gIiQwIiB0b2tlbiAoIiQmIiBpcyB0aGUgZW50aXJlIG1hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXRlcmFsTnVtYmVycyA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxID0gKyQxOyAvLyBUeXBlIGNvbnZlcnNpb247IGRyb3AgbGVhZGluZyB6ZXJvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkMSkgLy8gYCQxYCB3YXMgIjAiIG9yICIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgkMSA%2BIGFyZ3MubGVuZ3RoIC0gMykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsTnVtYmVycyA9IFN0cmluZy5wcm90b3R5cGUuc2xpY2UuY2FsbCgkMSwgLTEpICsgbGl0ZXJhbE51bWJlcnM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxID0gTWF0aC5mbG9vcigkMSAvIDEwKTsgLy8gRHJvcCB0aGUgbGFzdCBkaWdpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCQxID8gYXJnc1skMV0gfHwgIiIgOiAiJCIpICsgbGl0ZXJhbE51bWJlcnM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBiYWNrcmVmZXJlbmNlIG9yIGRlbGltaXRlZCBudW1iZXJlZCBiYWNrcmVmZXJlbmNlCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCBkb2VzICIke259IiBtZWFuPwogICAgICAgICAgICAgICAgICAgICAgICAvLyAtIEJhY2tyZWZlcmVuY2UgdG8gbnVtYmVyZWQgY2FwdHVyZSBuLiBUd28gZGlmZmVyZW5jZXMgZnJvbSAiJG4iOgogICAgICAgICAgICAgICAgICAgICAgICAvLyAgIC0gbiBjYW4gYmUgbW9yZSB0aGFuIHR3byBkaWdpdHMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAtIEJhY2tyZWZlcmVuY2UgMCBpcyBhbGxvd2VkLCBhbmQgaXMgdGhlIGVudGlyZSBtYXRjaAogICAgICAgICAgICAgICAgICAgICAgICAvLyAtIEJhY2tyZWZlcmVuY2UgdG8gbmFtZWQgY2FwdHVyZSBuLCBpZiBpdCBleGlzdHMgYW5kIGlzIG5vdCBhIG51bWJlciBvdmVycmlkZGVuIGJ5IG51bWJlcmVkIGNhcHR1cmUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBPdGhlcndpc2UsIGl0J3MgdGhlIHN0cmluZyAiJHtufSIKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSArJDI7IC8vIFR5cGUgY29udmVyc2lvbjsgZHJvcCBsZWFkaW5nIHplcm9zCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuIDw9IGFyZ3MubGVuZ3RoIC0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW25dOwogICAgICAgICAgICAgICAgICAgICAgICBuID0gY2FwdHVyZU5hbWVzID8gaW5kZXhPZihjYXB0dXJlTmFtZXMsICQyKSA6IC0xOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiA%2BIC0xID8gYXJnc1tuICsgMV0gOiAkMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNSZWdleCkgewogICAgICAgICAgICBpZiAoc2VhcmNoLmdsb2JhbCkKICAgICAgICAgICAgICAgIHNlYXJjaC5sYXN0SW5kZXggPSAwOyAvLyBGaXggSUUsIFNhZmFyaSBidWcgKGxhc3QgdGVzdGVkIElFIDkuMC41LCBTYWZhcmkgNS4xLjIgb24gV2luZG93cykKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc2VhcmNoLmxhc3RJbmRleCA9IG9yaWdMYXN0SW5kZXg7IC8vIEZpeCBJRSwgT3BlcmEgYnVnIChsYXN0IHRlc3RlZCBJRSA5LjAuNSwgT3BlcmEgMTEuNjEgb24gV2luZG93cykKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwoKICAgIC8vIEEgY29uc2lzdGVudCBjcm9zcy1icm93c2VyLCBFUzMgY29tcGxpYW50IGBzcGxpdGAKICAgIFN0cmluZy5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbiAocyAvKiBzZXBhcmF0b3IgKi8sIGxpbWl0KSB7CiAgICAgICAgLy8gSWYgc2VwYXJhdG9yIGBzYCBpcyBub3QgYSByZWdleCwgdXNlIHRoZSBuYXRpdmUgYHNwbGl0YAogICAgICAgIGlmICghWFJlZ0V4cC5pc1JlZ0V4cChzKSkKICAgICAgICAgICAgcmV0dXJuIG5hdGl2LnNwbGl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgogICAgICAgIHZhciBzdHIgPSB0aGlzICsgIiIsIC8vIFR5cGUgY29udmVyc2lvbgogICAgICAgICAgICBvdXRwdXQgPSBbXSwKICAgICAgICAgICAgbGFzdExhc3RJbmRleCA9IDAsCiAgICAgICAgICAgIG1hdGNoLCBsYXN0TGVuZ3RoOwoKICAgICAgICAvLyBCZWhhdmlvciBmb3IgYGxpbWl0YDogaWYgaXQncy4uLgogICAgICAgIC8vIC0gYHVuZGVmaW5lZGA6IE5vIGxpbWl0CiAgICAgICAgLy8gLSBgTmFOYCBvciB6ZXJvOiBSZXR1cm4gYW4gZW1wdHkgYXJyYXkKICAgICAgICAvLyAtIEEgcG9zaXRpdmUgbnVtYmVyOiBVc2UgYE1hdGguZmxvb3IobGltaXQpYAogICAgICAgIC8vIC0gQSBuZWdhdGl2ZSBudW1iZXI6IE5vIGxpbWl0CiAgICAgICAgLy8gLSBPdGhlcjogVHlwZS1jb252ZXJ0LCB0aGVuIHVzZSB0aGUgYWJvdmUgcnVsZXMKICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCB8fCArbGltaXQgPCAwKSB7CiAgICAgICAgICAgIGxpbWl0ID0gSW5maW5pdHk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGltaXQgPSBNYXRoLmZsb29yKCtsaW1pdCk7CiAgICAgICAgICAgIGlmICghbGltaXQpCiAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQoKICAgICAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGlmIG5vdCBgcy5nbG9iYWxgLCBhbmQgaXQgYXZvaWRzIG5lZWRpbmcgdG8gc2V0IGBzLmxhc3RJbmRleGAgdG8gemVybwogICAgICAgIC8vIGFuZCByZXN0b3JlIGl0IHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSB3aGVuIHdlJ3JlIGRvbmUgdXNpbmcgdGhlIHJlZ2V4CiAgICAgICAgcyA9IFhSZWdFeHAuY29weUFzR2xvYmFsKHMpOwoKICAgICAgICB3aGlsZSAobWF0Y2ggPSBzLmV4ZWMoc3RyKSkgeyAvLyBSdW4gdGhlIGFsdGVyZWQgYGV4ZWNgIChyZXF1aXJlZCBmb3IgYGxhc3RJbmRleGAgZml4LCBldGMuKQogICAgICAgICAgICBpZiAocy5sYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7CiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChzdHIuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTsKCiAgICAgICAgICAgICAgICBpZiAobWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0ci5sZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7CgogICAgICAgICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBzLmxhc3RJbmRleDsKCiAgICAgICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA%2BPSBsaW1pdCkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHMubGFzdEluZGV4ID09PSBtYXRjaC5pbmRleCkKICAgICAgICAgICAgICAgIHMubGFzdEluZGV4Kys7CiAgICAgICAgfQoKICAgICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyLmxlbmd0aCkgewogICAgICAgICAgICBpZiAoIW5hdGl2LnRlc3QuY2FsbChzLCAiIikgfHwgbGFzdExlbmd0aCkKICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCIiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvdXRwdXQucHVzaChzdHIuc2xpY2UobGFzdExhc3RJbmRleCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG91dHB1dC5sZW5ndGggPiBsaW1pdCA/IG91dHB1dC5zbGljZSgwLCBsaW1pdCkgOiBvdXRwdXQ7CiAgICB9OwoKCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucwogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvLyBTdXBwb3J0aW5nIGZ1bmN0aW9uIGZvciBgWFJlZ0V4cGAsIGBYUmVnRXhwLmNvcHlBc0dsb2JhbGAsIGV0Yy4gUmV0dXJucyBhIGNvcHkgb2YgYSBgUmVnRXhwYAogICAgLy8gaW5zdGFuY2Ugd2l0aCBhIGZyZXNoIGBsYXN0SW5kZXhgIChzZXQgdG8gemVybyksIHByZXNlcnZpbmcgcHJvcGVydGllcyByZXF1aXJlZCBmb3IgbmFtZWQKICAgIC8vIGNhcHR1cmUuIEFsc28gYWxsb3dzIGFkZGluZyBuZXcgZmxhZ3MgaW4gdGhlIHByb2Nlc3Mgb2YgY29weWluZyB0aGUgcmVnZXgKICAgIGZ1bmN0aW9uIGNsb25lIChyZWdleCwgYWRkaXRpb25hbEZsYWdzKSB7CiAgICAgICAgaWYgKCFYUmVnRXhwLmlzUmVnRXhwKHJlZ2V4KSkKICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCJ0eXBlIFJlZ0V4cCBleHBlY3RlZCIpOwogICAgICAgIHZhciB4ID0gcmVnZXguX3hyZWdleHA7CiAgICAgICAgcmVnZXggPSBYUmVnRXhwKHJlZ2V4LnNvdXJjZSwgZ2V0TmF0aXZlRmxhZ3MocmVnZXgpICsgKGFkZGl0aW9uYWxGbGFncyB8fCAiIikpOwogICAgICAgIGlmICh4KSB7CiAgICAgICAgICAgIHJlZ2V4Ll94cmVnZXhwID0gewogICAgICAgICAgICAgICAgc291cmNlOiB4LnNvdXJjZSwKICAgICAgICAgICAgICAgIGNhcHR1cmVOYW1lczogeC5jYXB0dXJlTmFtZXMgPyB4LmNhcHR1cmVOYW1lcy5zbGljZSgwKSA6IG51bGwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlZ2V4OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE5hdGl2ZUZsYWdzIChyZWdleCkgewogICAgICAgIHJldHVybiAocmVnZXguZ2xvYmFsICAgICA/ICJnIiA6ICIiKSArCiAgICAgICAgICAgICAgIChyZWdleC5pZ25vcmVDYXNlID8gImkiIDogIiIpICsKICAgICAgICAgICAgICAgKHJlZ2V4Lm11bHRpbGluZSAgPyAibSIgOiAiIikgKwogICAgICAgICAgICAgICAocmVnZXguZXh0ZW5kZWQgICA/ICJ4IiA6ICIiKSArIC8vIFByb3Bvc2VkIGZvciBFUzQ7IGluY2x1ZGVkIGluIEFTMwogICAgICAgICAgICAgICAocmVnZXguc3RpY2t5ICAgICA/ICJ5IiA6ICIiKTsKICAgIH0KCiAgICBmdW5jdGlvbiBydW5Ub2tlbnMgKHBhdHRlcm4sIGluZGV4LCBzY29wZSwgY29udGV4dCkgewogICAgICAgIHZhciBpID0gdG9rZW5zLmxlbmd0aCwKICAgICAgICAgICAgcmVzdWx0LCBtYXRjaCwgdDsKICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY29uc3RydWN0aW5nIFhSZWdFeHBzIHdpdGhpbiB0b2tlbiBoYW5kbGVyIGFuZCB0cmlnZ2VyIGZ1bmN0aW9ucwogICAgICAgIGlzSW5zaWRlQ29uc3RydWN0b3IgPSB0cnVlOwogICAgICAgIC8vIE11c3QgcmVzZXQgYGlzSW5zaWRlQ29uc3RydWN0b3JgLCBldmVuIGlmIGEgYHRyaWdnZXJgIG9yIGBoYW5kbGVyYCB0aHJvd3MKICAgICAgICB0cnkgewogICAgICAgICAgICB3aGlsZSAoaS0tKSB7IC8vIFJ1biBpbiByZXZlcnNlIG9yZGVyCiAgICAgICAgICAgICAgICB0ID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgaWYgKChzY29wZSAmIHQuc2NvcGUpICYmICghdC50cmlnZ2VyIHx8IHQudHJpZ2dlci5jYWxsKGNvbnRleHQpKSkgewogICAgICAgICAgICAgICAgICAgIHQucGF0dGVybi5sYXN0SW5kZXggPSBpbmRleDsKICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHQucGF0dGVybi5leGVjKHBhdHRlcm4pOyAvLyBSdW5uaW5nIHRoZSBhbHRlcmVkIGBleGVjYCBoZXJlIGFsbG93cyB1c2Ugb2YgbmFtZWQgYmFja3JlZmVyZW5jZXMsIGV0Yy4KICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2guaW5kZXggPT09IGluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dDogdC5oYW5kbGVyLmNhbGwoY29udGV4dCwgbWF0Y2gsIHNjb3BlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiBtYXRjaAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgdGhyb3cgZXJyOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGlzSW5zaWRlQ29uc3RydWN0b3IgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBmdW5jdGlvbiBpbmRleE9mIChhcnJheSwgaXRlbSwgZnJvbSkgewogICAgICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikgLy8gVXNlIHRoZSBuYXRpdmUgYXJyYXkgbWV0aG9kIGlmIGF2YWlsYWJsZQogICAgICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtLCBmcm9tKTsKICAgICAgICBmb3IgKHZhciBpID0gZnJvbSB8fCAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGFycmF5W2ldID09PSBpdGVtKQogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH0KCgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vICBCdWlsdC1pbiB0b2tlbnMKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgLy8gQXVnbWVudCBYUmVnRXhwJ3MgcmVndWxhciBleHByZXNzaW9uIHN5bnRheCBhbmQgZmxhZ3MuIE5vdGUgdGhhdCB3aGVuIGFkZGluZyB0b2tlbnMsIHRoZQogICAgLy8gdGhpcmQgKGBzY29wZWApIGFyZ3VtZW50IGRlZmF1bHRzIHRvIGBYUmVnRXhwLk9VVFNJREVfQ0xBU1NgCgogICAgLy8gQ29tbWVudCBwYXR0ZXJuOiAoPyMgKQogICAgWFJlZ0V4cC5hZGRUb2tlbigKICAgICAgICAvXChcPyNbXildKlwpLywKICAgICAgICBmdW5jdGlvbiAobWF0Y2gpIHsKICAgICAgICAgICAgLy8gS2VlcCB0b2tlbnMgc2VwYXJhdGVkIHVubGVzcyB0aGUgZm9sbG93aW5nIHRva2VuIGlzIGEgcXVhbnRpZmllcgogICAgICAgICAgICByZXR1cm4gbmF0aXYudGVzdC5jYWxsKHF1YW50aWZpZXIsIG1hdGNoLmlucHV0LnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKSkgPyAiIiA6ICIoPzopIjsKICAgICAgICB9CiAgICApOwoKICAgIC8vIENhcHR1cmluZyBncm91cCAobWF0Y2ggdGhlIG9wZW5pbmcgcGFyZW50aGVzaXMgb25seSkuCiAgICAvLyBSZXF1aXJlZCBmb3Igc3VwcG9ydCBvZiBuYW1lZCBjYXB0dXJpbmcgZ3JvdXBzCiAgICBYUmVnRXhwLmFkZFRva2VuKAogICAgICAgIC9cKCg/IVw/KS8sCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLmNhcHR1cmVOYW1lcy5wdXNoKG51bGwpOwogICAgICAgICAgICByZXR1cm4gIigiOwogICAgICAgIH0KICAgICk7CgogICAgLy8gTmFtZWQgY2FwdHVyaW5nIGdyb3VwIChtYXRjaCB0aGUgb3BlbmluZyBkZWxpbWl0ZXIgb25seSk6ICg/PG5hbWU%2BCiAgICBYUmVnRXhwLmFkZFRva2VuKAogICAgICAgIC9cKFw/PChbJFx3XSspPi8sCiAgICAgICAgZnVuY3Rpb24gKG1hdGNoKSB7CiAgICAgICAgICAgIHRoaXMuY2FwdHVyZU5hbWVzLnB1c2gobWF0Y2hbMV0pOwogICAgICAgICAgICB0aGlzLmhhc05hbWVkQ2FwdHVyZSA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiAiKCI7CiAgICAgICAgfQogICAgKTsKCiAgICAvLyBOYW1lZCBiYWNrcmVmZXJlbmNlOiBcazxuYW1lPgogICAgWFJlZ0V4cC5hZGRUb2tlbigKICAgICAgICAvXFxrPChbXHckXSspPi8sCiAgICAgICAgZnVuY3Rpb24gKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpbmRleCA9IGluZGV4T2YodGhpcy5jYXB0dXJlTmFtZXMsIG1hdGNoWzFdKTsKICAgICAgICAgICAgLy8gS2VlcCBiYWNrcmVmZXJlbmNlcyBzZXBhcmF0ZSBmcm9tIHN1YnNlcXVlbnQgbGl0ZXJhbCBudW1iZXJzLiBQcmVzZXJ2ZSBiYWNrLQogICAgICAgICAgICAvLyByZWZlcmVuY2VzIHRvIG5hbWVkIGdyb3VwcyB0aGF0IGFyZSB1bmRlZmluZWQgYXQgdGhpcyBwb2ludCBhcyBsaXRlcmFsIHN0cmluZ3MKICAgICAgICAgICAgcmV0dXJuIGluZGV4ID4gLTEgPwogICAgICAgICAgICAgICAgIlxcIiArIChpbmRleCArIDEpICsgKGlzTmFOKG1hdGNoLmlucHV0LmNoYXJBdChtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCkpID8gIiIgOiAiKD86KSIpIDoKICAgICAgICAgICAgICAgIG1hdGNoWzBdOwogICAgICAgIH0KICAgICk7CgogICAgLy8gRW1wdHkgY2hhcmFjdGVyIGNsYXNzOiBbXSBvciBbXl0KICAgIFhSZWdFeHAuYWRkVG9rZW4oCiAgICAgICAgL1xbXF4/XS8sCiAgICAgICAgZnVuY3Rpb24gKG1hdGNoKSB7CiAgICAgICAgICAgIC8vIEZvciBjcm9zcy1icm93c2VyIGNvbXBhdGliaWxpdHkgd2l0aCBFUzMsIGNvbnZlcnQgW10gdG8gXGJcQiBhbmQgW15dIHRvIFtcc1xTXS4KICAgICAgICAgICAgLy8gKD8hKSBzaG91bGQgd29yayBsaWtlIFxiXEIsIGJ1dCBpcyB1bnJlbGlhYmxlIGluIEZpcmVmb3gKICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzBdID09PSAiW10iID8gIlxcYlxcQiIgOiAiW1xcc1xcU10iOwogICAgICAgIH0KICAgICk7CgogICAgLy8gTW9kZSBtb2RpZmllciBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4gb25seSwgd2l0aCBhbnkgY29tYmluYXRpb24gb2YgZmxhZ3MgaW1zeDogKD9pbXN4KQogICAgLy8gRG9lcyBub3Qgc3VwcG9ydCB4KD9pKSwgKD8taSksICg/aS1tKSwgKD9pOiApLCAoP2kpKD9tKSwgZXRjLgogICAgWFJlZ0V4cC5hZGRUb2tlbigKICAgICAgICAvXlwoXD8oW2ltc3hdKylcKS8sCiAgICAgICAgZnVuY3Rpb24gKG1hdGNoKSB7CiAgICAgICAgICAgIHRoaXMuc2V0RmxhZyhtYXRjaFsxXSk7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICApOwoKICAgIC8vIFdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzLCBpbiBmcmVlLXNwYWNpbmcgKGFrYSBleHRlbmRlZCkgbW9kZSBvbmx5CiAgICBYUmVnRXhwLmFkZFRva2VuKAogICAgICAgIC8oPzpccyt8Iy4qKSsvLAogICAgICAgIGZ1bmN0aW9uIChtYXRjaCkgewogICAgICAgICAgICAvLyBLZWVwIHRva2VucyBzZXBhcmF0ZWQgdW5sZXNzIHRoZSBmb2xsb3dpbmcgdG9rZW4gaXMgYSBxdWFudGlmaWVyCiAgICAgICAgICAgIHJldHVybiBuYXRpdi50ZXN0LmNhbGwocXVhbnRpZmllciwgbWF0Y2guaW5wdXQuc2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpKSA/ICIiIDogIig/OikiOwogICAgICAgIH0sCiAgICAgICAgWFJlZ0V4cC5PVVRTSURFX0NMQVNTLAogICAgICAgIGZ1bmN0aW9uICgpIHtyZXR1cm4gdGhpcy5oYXNGbGFnKCJ4Iik7fQogICAgKTsKCiAgICAvLyBEb3QsIGluIGRvdGFsbCAoYWthIHNpbmdsZWxpbmUpIG1vZGUgb25seQogICAgWFJlZ0V4cC5hZGRUb2tlbigKICAgICAgICAvXC4vLAogICAgICAgIGZ1bmN0aW9uICgpIHtyZXR1cm4gIltcXHNcXFNdIjt9LAogICAgICAgIFhSZWdFeHAuT1VUU0lERV9DTEFTUywKICAgICAgICBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXMuaGFzRmxhZygicyIpO30KICAgICk7CgoKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyAgQmFja3dhcmQgY29tcGF0aWJpbGl0eQogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvLyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBibG9jayBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFhSZWdFeHAgMS4wLTEuMjoKICAgIC8qCiAgICBYUmVnRXhwLm1hdGNoV2l0aGluQ2hhaW4gPSBYUmVnRXhwLm1hdGNoQ2hhaW47CiAgICBSZWdFeHAucHJvdG90eXBlLmFkZEZsYWdzID0gZnVuY3Rpb24gKHMpIHtyZXR1cm4gY2xvbmUodGhpcywgcyk7fTsKICAgIFJlZ0V4cC5wcm90b3R5cGUuZXhlY0FsbCA9IGZ1bmN0aW9uIChzKSB7dmFyIHIgPSBbXTsgWFJlZ0V4cC5pdGVyYXRlKHMsIHRoaXMsIGZ1bmN0aW9uIChtKSB7ci5wdXNoKG0pO30pOyByZXR1cm4gcjt9OwogICAgUmVnRXhwLnByb3RvdHlwZS5mb3JFYWNoRXhlYyA9IGZ1bmN0aW9uIChzLCBmLCBjKSB7cmV0dXJuIFhSZWdFeHAuaXRlcmF0ZShzLCB0aGlzLCBmLCBjKTt9OwogICAgUmVnRXhwLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIChzKSB7dmFyIHIgPSBSZWdFeHAoIl4oPzoiICsgdGhpcy5zb3VyY2UgKyAiKSQoPyFcXHMpIiwgZ2V0TmF0aXZlRmxhZ3ModGhpcykpOyBpZiAodGhpcy5nbG9iYWwpIHRoaXMubGFzdEluZGV4ID0gMDsgcmV0dXJuIHMuc2VhcmNoKHIpID09PSAwO307CiAgICAqLwoKfSkoKTsKCg%3D%3D"></script> <script type="text/javascript" src="data:application/javascript;base64,LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIEBWRVJTSU9OQCAoQERBVEVAKQogKiAKICogQGNvcHlyaWdodAogKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBBbGV4IEdvcmJhdGNoZXYuCiAqCiAqIEBsaWNlbnNlCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKi8KCi8vCi8vIEJlZ2luIGFub255bW91cyBmdW5jdGlvbi4gVGhpcyBpcyB1c2VkIHRvIGNvbnRhaW4gbG9jYWwgc2NvcGUgdmFyaWFibGVzIHdpdGhvdXQgcG9sdXR0aW5nIGdsb2JhbCBzY29wZS4KLy8KaWYgKHR5cGVvZihTeW50YXhIaWdobGlnaHRlcikgPT0gJ3VuZGVmaW5lZCcpIHZhciBTeW50YXhIaWdobGlnaHRlciA9IGZ1bmN0aW9uKCkgeyAKCi8vIENvbW1vbkpTCmlmICh0eXBlb2YocmVxdWlyZSkgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKFhSZWdFeHApID09ICd1bmRlZmluZWQnKQp7CglYUmVnRXhwID0gcmVxdWlyZSgnWFJlZ0V4cCcpLlhSZWdFeHA7Cn0KCi8vIFNob3J0Y3V0IG9iamVjdCB3aGljaCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSBTeW50YXhIaWdobGlnaHRlciB2YXJpYWJsZS4KLy8gVGhpcyBpcyBhIHNob3J0aGFuZCBmb3IgbG9jYWwgcmVmZXJlbmNlIGluIG9yZGVyIHRvIGF2b2lkIGxvbmcgbmFtZXNwYWNlIAovLyByZWZlcmVuY2VzIHRvIFN5bnRheEhpZ2hsaWdodGVyLndoYXRldmVyLi4uCnZhciBzaCA9IHsKCWRlZmF1bHRzIDogewoJCS8qKiBBZGRpdGlvbmFsIENTUyBjbGFzcyBuYW1lcyB0byBiZSBhZGRlZCB0byBoaWdobGlnaHRlciBlbGVtZW50cy4gKi8KCQknY2xhc3MtbmFtZScgOiAnJywKCQkKCQkvKiogRmlyc3QgbGluZSBudW1iZXIuICovCgkJJ2ZpcnN0LWxpbmUnIDogMSwKCQkKCQkvKioKCQkgKiBQYWRzIGxpbmUgbnVtYmVycy4gUG9zc2libGUgdmFsdWVzIGFyZToKCQkgKgoJCSAqICAgZmFsc2UgLSBkb24ndCBwYWQgbGluZSBudW1iZXJzLgoJCSAqICAgdHJ1ZSAgLSBhdXRvbWF0aWNhbHkgcGFkIG51bWJlcnMgd2l0aCBtaW5pbXVtIHJlcXVpcmVkIG51bWJlciBvZiBsZWFkaW5nIHplcm9lcy4KCQkgKiAgIFtpbnRdIC0gbGVuZ3RoIHVwIHRvIHdoaWNoIHBhZCBsaW5lIG51bWJlcnMuCgkJICovCgkJJ3BhZC1saW5lLW51bWJlcnMnIDogZmFsc2UsCgkJCgkJLyoqIExpbmVzIHRvIGhpZ2hsaWdodC4gKi8KCQknaGlnaGxpZ2h0JyA6IG51bGwsCgkJCgkJLyoqIFRpdGxlIHRvIGJlIGRpc3BsYXllZCBhYm92ZSB0aGUgY29kZSBibG9jay4gKi8KCQkndGl0bGUnIDogbnVsbCwKCQkKCQkvKiogRW5hYmxlcyBvciBkaXNhYmxlcyBzbWFydCB0YWJzLiAqLwoJCSdzbWFydC10YWJzJyA6IHRydWUsCgkJCgkJLyoqIEdldHMgb3Igc2V0cyB0YWIgc2l6ZS4gKi8KCQkndGFiLXNpemUnIDogNCwKCQkKCQkvKiogRW5hYmxlcyBvciBkaXNhYmxlcyBndXR0ZXIuICovCgkJJ2d1dHRlcicgOiB0cnVlLAoJCQoJCS8qKiBFbmFibGVzIG9yIGRpc2FibGVzIHRvb2xiYXIuICovCgkJJ3Rvb2xiYXInIDogdHJ1ZSwKCQkKCQkvKiogRW5hYmxlcyBxdWljayBjb2RlIGNvcHkgYW5kIHBhc3RlIGZyb20gZG91YmxlIGNsaWNrLiAqLwoJCSdxdWljay1jb2RlJyA6IHRydWUsCgkJCgkJLyoqIEZvcmNlcyBjb2RlIHZpZXcgdG8gYmUgY29sbGFwc2VkLiAqLwoJCSdjb2xsYXBzZScgOiBmYWxzZSwKCQkKCQkvKiogRW5hYmxlcyBvciBkaXNhYmxlcyBhdXRvbWF0aWMgbGlua3MuICovCgkJJ2F1dG8tbGlua3MnIDogdHJ1ZSwKCQkKCQkvKiogR2V0cyBvciBzZXRzIGxpZ2h0IG1vZGUuIEVxdWF2YWxlbnQgdG8gdHVybmluZyBvZmYgZ3V0dGVyIGFuZCB0b29sYmFyLiAqLwoJCSdsaWdodCcgOiBmYWxzZSwKCgkJJ3VuaW5kZW50JyA6IHRydWUsCgkJCgkJJ2h0bWwtc2NyaXB0JyA6IGZhbHNlCgl9LAoJCgljb25maWcgOiB7CgkJc3BhY2UgOiAnJm5ic3A7JywKCQkKCQkvKiogRW5hYmxlcyB1c2Ugb2YgPFNDUklQVCB0eXBlPSJzeW50YXhoaWdobGlnaHRlciIgLz4gdGFncy4gKi8KCQl1c2VTY3JpcHRUYWdzIDogdHJ1ZSwKCQkKCQkvKiogQmxvZ2dlciBtb2RlIGZsYWcuICovCgkJYmxvZ2dlck1vZGUgOiBmYWxzZSwKCQkKCQlzdHJpcEJycyA6IGZhbHNlLAoJCQoJCS8qKiBOYW1lIG9mIHRoZSB0YWcgdGhhdCBTeW50YXhIaWdobGlnaHRlciB3aWxsIGF1dG9tYXRpY2FsbHkgbG9vayBmb3IuICovCgkJdGFnTmFtZSA6ICdwcmUnLAoJCQoJCXN0cmluZ3MgOiB7CgkJCWV4cGFuZFNvdXJjZSA6ICdleHBhbmQgc291cmNlJywKCQkJaGVscCA6ICc/JywKCQkJYWxlcnQ6ICdTeW50YXhIaWdobGlnaHRlclxuXG4nLAoJCQlub0JydXNoIDogJ0NhblwndCBmaW5kIGJydXNoIGZvcjogJywKCQkJYnJ1c2hOb3RIdG1sU2NyaXB0IDogJ0JydXNoIHdhc25cJ3QgY29uZmlndXJlZCBmb3IgaHRtbC1zY3JpcHQgb3B0aW9uOiAnLAoJCQkKCQkJLy8gdGhpcyBpcyBwb3B1bGF0ZWQgYnkgdGhlIGJ1aWxkIHNjcmlwdAoJCQlhYm91dERpYWxvZyA6ICdAQUJPVVRAJwoJCX0KCX0sCgkKCS8qKiBJbnRlcm5hbCAnZ2xvYmFsJyB2YXJpYWJsZXMuICovCgl2YXJzIDogewoJCWRpc2NvdmVyZWRCcnVzaGVzIDogbnVsbCwKCQloaWdobGlnaHRlcnMgOiB7fQoJfSwKCQoJLyoqIFRoaXMgb2JqZWN0IGlzIHBvcHVsYXRlZCBieSB1c2VyIGluY2x1ZGVkIGV4dGVybmFsIGJydXNoIGZpbGVzLiAqLwoJYnJ1c2hlcyA6IHt9LAoKCS8qKiBDb21tb24gcmVndWxhciBleHByZXNzaW9ucy4gKi8KCXJlZ2V4TGliIDogewoJCW11bHRpTGluZUNDb21tZW50cwkJCTogL1wvXCpbXHNcU10qP1wqXC8vZ20sCgkJc2luZ2xlTGluZUNDb21tZW50cwkJCTogL1wvXC8uKiQvZ20sCgkJc2luZ2xlTGluZVBlcmxDb21tZW50cwkJOiAvIy4qJC9nbSwKCQlkb3VibGVRdW90ZWRTdHJpbmcJCQk6IC8iKFteXFwiXG5dfFxcLikqIi9nLAoJCXNpbmdsZVF1b3RlZFN0cmluZwkJCTogLycoW15cXCdcbl18XFwuKSonL2csCgkJbXVsdGlMaW5lRG91YmxlUXVvdGVkU3RyaW5nCTogbmV3IFhSZWdFeHAoJyIoW15cXFxcIl18XFxcXC4pKiInLCAnZ3MnKSwKCQltdWx0aUxpbmVTaW5nbGVRdW90ZWRTdHJpbmcJOiBuZXcgWFJlZ0V4cCgiJyhbXlxcXFwnXXxcXFxcLikqJyIsICdncycpLAoJCXhtbENvbW1lbnRzCQkJCQk6IC8oJmx0O3w8KSEtLVtcc1xTXSo/LS0oJmd0O3w%2BKS9nbSwKCQl1cmwJCQkJCQkJOiAvXHcrOlwvXC9bXHctLlwvPyUmPTpAOyNdKi9nLAoJCQoJCS8qKiA8Pz0gPz4gdGFncy4gKi8KCQlwaHBTY3JpcHRUYWdzIAkJCQk6IHsgbGVmdDogLygmbHQ7fDwpXD8oPzo9fHBocCk/L2csIHJpZ2h0OiAvXD8oJmd0O3w%2BKS9nLCAnZW9mJyA6IHRydWUgfSwKCQkKCQkvKiogPCU9ICU%2BIHRhZ3MuICovCgkJYXNwU2NyaXB0VGFncwkJCQk6IHsgbGVmdDogLygmbHQ7fDwpJT0/L2csIHJpZ2h0OiAvJSgmZ3Q7fD4pL2cgfSwKCQkKCQkvKiogPHNjcmlwdD4gdGFncy4gKi8KCQlzY3JpcHRTY3JpcHRUYWdzCQkJOiB7IGxlZnQ6IC8oJmx0O3w8KVxzKnNjcmlwdC4qPygmZ3Q7fD4pL2dpLCByaWdodDogLygmbHQ7fDwpXC9ccypzY3JpcHRccyooJmd0O3w%2BKS9naSB9Cgl9LAoKCXRvb2xiYXI6IHsKCQkvKioKCQkgKiBHZW5lcmF0ZXMgSFRNTCBtYXJrdXAgZm9yIHRoZSB0b29sYmFyLgoJCSAqIEBwYXJhbSB7SGlnaGxpZ2h0ZXJ9IGhpZ2hsaWdodGVyIEhpZ2hsaWdodGVyIGluc3RhbmNlLgoJCSAqIEByZXR1cm4ge1N0cmluZ30gUmV0dXJucyBIVE1MIG1hcmt1cC4KCQkgKi8KCQlnZXRIdG1sOiBmdW5jdGlvbihoaWdobGlnaHRlcikKCQl7CgkJCXZhciBodG1sID0gJzxkaXYgY2xhc3M9InRvb2xiYXIiPicsCgkJCQlpdGVtcyA9IHNoLnRvb2xiYXIuaXRlbXMsCgkJCQlsaXN0ID0gaXRlbXMubGlzdAoJCQkJOwoJCQkKCQkJZnVuY3Rpb24gZGVmYXVsdEdldEh0bWwoaGlnaGxpZ2h0ZXIsIG5hbWUpCgkJCXsKCQkJCXJldHVybiBzaC50b29sYmFyLmdldEJ1dHRvbkh0bWwoaGlnaGxpZ2h0ZXIsIG5hbWUsIHNoLmNvbmZpZy5zdHJpbmdzW25hbWVdKTsKCQkJfTsKCQkJCgkJCWZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykKCQkJCWh0bWwgKz0gKGl0ZW1zW2xpc3RbaV1dLmdldEh0bWwgfHwgZGVmYXVsdEdldEh0bWwpKGhpZ2hsaWdodGVyLCBsaXN0W2ldKTsKCQkJCgkJCWh0bWwgKz0gJzwvZGl2Pic7CgkJCQoJCQlyZXR1cm4gaHRtbDsKCQl9LAoJCQoJCS8qKgoJCSAqIEdlbmVyYXRlcyBIVE1MIG1hcmt1cCBmb3IgYSByZWd1bGFyIGJ1dHRvbiBpbiB0aGUgdG9vbGJhci4KCQkgKiBAcGFyYW0ge0hpZ2hsaWdodGVyfSBoaWdobGlnaHRlciBIaWdobGlnaHRlciBpbnN0YW5jZS4KCQkgKiBAcGFyYW0ge1N0cmluZ30gY29tbWFuZE5hbWUJCUNvbW1hbmQgbmFtZSB0aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLgoJCSAqIEBwYXJhbSB7U3RyaW5nfSBsYWJlbAkJCUxhYmVsIHRleHQgdG8gZGlzcGxheS4KCQkgKiBAcmV0dXJuIHtTdHJpbmd9CQkJCQlSZXR1cm5zIEhUTUwgbWFya3VwLgoJCSAqLwoJCWdldEJ1dHRvbkh0bWw6IGZ1bmN0aW9uKGhpZ2hsaWdodGVyLCBjb21tYW5kTmFtZSwgbGFiZWwpCgkJewoJCQlyZXR1cm4gJzxzcGFuPjxhIGhyZWY9IiMiIGNsYXNzPSJ0b29sYmFyX2l0ZW0nCgkJCQkrICcgY29tbWFuZF8nICsgY29tbWFuZE5hbWUKCQkJCSsgJyAnICsgY29tbWFuZE5hbWUKCQkJCSsgJyI%2BJyArIGxhYmVsICsgJzwvYT48L3NwYW4%2BJwoJCQkJOwoJCX0sCgkJCgkJLyoqCgkJICogRXZlbnQgaGFuZGxlciBmb3IgYSB0b29sYmFyIGFuY2hvci4KCQkgKi8KCQloYW5kbGVyOiBmdW5jdGlvbihlKQoJCXsKCQkJdmFyIHRhcmdldCA9IGUudGFyZ2V0LAoJCQkJY2xhc3NOYW1lID0gdGFyZ2V0LmNsYXNzTmFtZSB8fCAnJwoJCQkJOwoKCQkJZnVuY3Rpb24gZ2V0VmFsdWUobmFtZSkKCQkJewoJCQkJdmFyIHIgPSBuZXcgUmVnRXhwKG5hbWUgKyAnXyhcXHcrKScpLAoJCQkJCW1hdGNoID0gci5leGVjKGNsYXNzTmFtZSkKCQkJCQk7CgoJCQkJcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBudWxsOwoJCQl9OwoJCQkKCQkJdmFyIGhpZ2hsaWdodGVyID0gZ2V0SGlnaGxpZ2h0ZXJCeUlkKGZpbmRQYXJlbnRFbGVtZW50KHRhcmdldCwgJy5zeW50YXhoaWdobGlnaHRlcicpLmlkKSwKCQkJCWNvbW1hbmROYW1lID0gZ2V0VmFsdWUoJ2NvbW1hbmQnKQoJCQkJOwoJCQkKCQkJLy8gZXhlY3V0ZSB0aGUgdG9vbGJhciBjb21tYW5kCgkJCWlmIChoaWdobGlnaHRlciAmJiBjb21tYW5kTmFtZSkKCQkJCXNoLnRvb2xiYXIuaXRlbXNbY29tbWFuZE5hbWVdLmV4ZWN1dGUoaGlnaGxpZ2h0ZXIpOwoKCQkJLy8gZGlzYWJsZSBkZWZhdWx0IEEgY2xpY2sgYmVoYXZpb3VyCgkJCWUucHJldmVudERlZmF1bHQoKTsKCQl9LAoJCQoJCS8qKiBDb2xsZWN0aW9uIG9mIHRvb2xiYXIgaXRlbXMuICovCgkJaXRlbXMgOiB7CgkJCS8vIE9yZGVyZWQgbGlzIG9mIGl0ZW1zIGluIHRoZSB0b29sYmFyLiBDYW4ndCBleHBlY3QgYGZvciAodmFyIG4gaW4gaXRlbXMpYCB0byBiZSBjb25zaXN0ZW50LgoJCQlsaXN0OiBbJ2V4cGFuZFNvdXJjZScsICdoZWxwJ10sCgoJCQlleHBhbmRTb3VyY2U6IHsKCQkJCWdldEh0bWw6IGZ1bmN0aW9uKGhpZ2hsaWdodGVyKQoJCQkJewoJCQkJCWlmIChoaWdobGlnaHRlci5nZXRQYXJhbSgnY29sbGFwc2UnKSAhPSB0cnVlKQoJCQkJCQlyZXR1cm4gJyc7CgkJCQkJCQoJCQkJCXZhciB0aXRsZSA9IGhpZ2hsaWdodGVyLmdldFBhcmFtKCd0aXRsZScpOwoJCQkJCXJldHVybiBzaC50b29sYmFyLmdldEJ1dHRvbkh0bWwoaGlnaGxpZ2h0ZXIsICdleHBhbmRTb3VyY2UnLCB0aXRsZSA/IHRpdGxlIDogc2guY29uZmlnLnN0cmluZ3MuZXhwYW5kU291cmNlKTsKCQkJCX0sCgkJCQoJCQkJZXhlY3V0ZTogZnVuY3Rpb24oaGlnaGxpZ2h0ZXIpCgkJCQl7CgkJCQkJdmFyIGRpdiA9IGdldEhpZ2hsaWdodGVyRGl2QnlJZChoaWdobGlnaHRlci5pZCk7CgkJCQkJcmVtb3ZlQ2xhc3MoZGl2LCAnY29sbGFwc2VkJyk7CgkJCQl9CgkJCX0sCgoJCQkvKiogQ29tbWFuZCB0byBkaXNwbGF5IHRoZSBhYm91dCBkaWFsb2cgd2luZG93LiAqLwoJCQloZWxwOiB7CgkJCQlleGVjdXRlOiBmdW5jdGlvbihoaWdobGlnaHRlcikKCQkJCXsJCgkJCQkJdmFyIHduZCA9IHBvcHVwKCcnLCAnX2JsYW5rJywgNTAwLCAyNTAsICdzY3JvbGxiYXJzPTAnKSwKCQkJCQkJZG9jID0gd25kLmRvY3VtZW50CgkJCQkJCTsKCQkJCQkKCQkJCQlkb2Mud3JpdGUoc2guY29uZmlnLnN0cmluZ3MuYWJvdXREaWFsb2cpOwoJCQkJCWRvYy5jbG9zZSgpOwoJCQkJCXduZC5mb2N1cygpOwoJCQkJfQoJCQl9CgkJfQoJfSwKCgkvKioKCSAqIEZpbmRzIGFsbCBlbGVtZW50cyBvbiB0aGUgcGFnZSB3aGljaCBzaG91bGQgYmUgcHJvY2Vzc2VzIGJ5IFN5bnRheEhpZ2hsaWdodGVyLgoJICoKCSAqIEBwYXJhbSB7T2JqZWN0fSBnbG9iYWxQYXJhbXMJCU9wdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggb3ZlcnJpZGUgZWxlbWVudCdzIAoJICogCQkJCQkJCQkJcGFyYW1ldGVycy4gT25seSB1c2VkIGlmIGVsZW1lbnQgaXMgc3BlY2lmaWVkLgoJICogCgkgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudAlPcHRpb25hbCBlbGVtZW50IHRvIGhpZ2hsaWdodC4gSWYgbm9uZSBpcwoJICogCQkJCQkJCXByb3ZpZGVkLCBhbGwgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQgCgkgKiAJCQkJCQkJYXJlIHJldHVybmVkIHdoaWNoIHF1YWxpZnkuCgkgKgoJICogQHJldHVybiB7QXJyYXl9CVJldHVybnMgbGlzdCBvZiA8Y29kZT57IHRhcmdldDogRE9NRWxlbWVudCwgcGFyYW1zOiBPYmplY3QgfTwvY29kZT4gb2JqZWN0cy4KCSAqLwoJZmluZEVsZW1lbnRzOiBmdW5jdGlvbihnbG9iYWxQYXJhbXMsIGVsZW1lbnQpCgl7CgkJdmFyIGVsZW1lbnRzID0gZWxlbWVudCA/IFtlbGVtZW50XSA6IHRvQXJyYXkoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoc2guY29uZmlnLnRhZ05hbWUpKSwgCgkJCWNvbmYgPSBzaC5jb25maWcsCgkJCXJlc3VsdCA9IFtdCgkJCTsKCgkJLy8gc3VwcG9ydCBmb3IgPFNDUklQVCBUWVBFPSJzeW50YXhoaWdobGlnaHRlciIgLz4gZmVhdHVyZQoJCWlmIChjb25mLnVzZVNjcmlwdFRhZ3MpCgkJCWVsZW1lbnRzID0gZWxlbWVudHMuY29uY2F0KGdldFN5bnRheEhpZ2hsaWdodGVyU2NyaXB0VGFncygpKTsKCgkJaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgCgkJCXJldHVybiByZXN1bHQ7CgkKCQlmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSAKCQl7CgkJCXZhciBpdGVtID0gewoJCQkJdGFyZ2V0OiBlbGVtZW50c1tpXSwgCgkJCQkvLyBsb2NhbCBwYXJhbXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgZ2xvYmFscwoJCQkJcGFyYW1zOiBtZXJnZShnbG9iYWxQYXJhbXMsIHBhcnNlUGFyYW1zKGVsZW1lbnRzW2ldLmNsYXNzTmFtZSkpCgkJCX07CgoJCQlpZiAoaXRlbS5wYXJhbXNbJ2JydXNoJ10gPT0gbnVsbCkKCQkJCWNvbnRpbnVlOwoJCQkJCgkJCXJlc3VsdC5wdXNoKGl0ZW0pOwoJCX0KCQkKCQlyZXR1cm4gcmVzdWx0OwoJfSwKCgkvKioKCSAqIFNob3J0aGFuZCB0byBoaWdobGlnaHQgYWxsIGVsZW1lbnRzIG9uIHRoZSBwYWdlIHRoYXQgYXJlIG1hcmtlZCBhcyAKCSAqIFN5bnRheEhpZ2hsaWdodGVyIHNvdXJjZSBjb2RlLgoJICogCgkgKiBAcGFyYW0ge09iamVjdH0gZ2xvYmFsUGFyYW1zCQlPcHRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIG92ZXJyaWRlIGVsZW1lbnQncyAKCSAqIAkJCQkJCQkJCXBhcmFtZXRlcnMuIE9ubHkgdXNlZCBpZiBlbGVtZW50IGlzIHNwZWNpZmllZC4KCSAqIAoJICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQJT3B0aW9uYWwgZWxlbWVudCB0byBoaWdobGlnaHQuIElmIG5vbmUgaXMKCSAqIAkJCQkJCQlwcm92aWRlZCwgYWxsIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IAoJICogCQkJCQkJCWFyZSBoaWdobGlnaHRlZC4KCSAqLyAKCWhpZ2hsaWdodDogZnVuY3Rpb24oZ2xvYmFsUGFyYW1zLCBlbGVtZW50KQoJewoJCXZhciBlbGVtZW50cyA9IHRoaXMuZmluZEVsZW1lbnRzKGdsb2JhbFBhcmFtcywgZWxlbWVudCksCgkJCXByb3BlcnR5TmFtZSA9ICdpbm5lckhUTUwnLCAKCQkJaGlnaGxpZ2h0ZXIgPSBudWxsLAoJCQljb25mID0gc2guY29uZmlnCgkJCTsKCgkJaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgCgkJCXJldHVybjsKCQoJCWZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIAoJCXsKCQkJdmFyIGVsZW1lbnQgPSBlbGVtZW50c1tpXSwKCQkJCXRhcmdldCA9IGVsZW1lbnQudGFyZ2V0LAoJCQkJcGFyYW1zID0gZWxlbWVudC5wYXJhbXMsCgkJCQlicnVzaE5hbWUgPSBwYXJhbXMuYnJ1c2gsCgkJCQljb2RlCgkJCQk7CgoJCQlpZiAoYnJ1c2hOYW1lID09IG51bGwpCgkJCQljb250aW51ZTsKCgkJCS8vIEluc3RhbnRpYXRlIGEgYnJ1c2gKCQkJaWYgKHBhcmFtc1snaHRtbC1zY3JpcHQnXSA9PSAndHJ1ZScgfHwgc2guZGVmYXVsdHNbJ2h0bWwtc2NyaXB0J10gPT0gdHJ1ZSkgCgkJCXsKCQkJCWhpZ2hsaWdodGVyID0gbmV3IHNoLkh0bWxTY3JpcHQoYnJ1c2hOYW1lKTsKCQkJCWJydXNoTmFtZSA9ICdodG1sc2NyaXB0JzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXZhciBicnVzaCA9IGZpbmRCcnVzaChicnVzaE5hbWUpOwoJCQkJCgkJCQlpZiAoYnJ1c2gpCgkJCQkJaGlnaGxpZ2h0ZXIgPSBuZXcgYnJ1c2goKTsKCQkJCWVsc2UKCQkJCQljb250aW51ZTsKCQkJfQoJCQkKCQkJY29kZSA9IHRhcmdldFtwcm9wZXJ0eU5hbWVdOwoJCQkKCQkJLy8gcmVtb3ZlIENEQVRBIGZyb20gPFNDUklQVC8%2BIHRhZ3MgaWYgaXQncyBwcmVzZW50CgkJCWlmIChjb25mLnVzZVNjcmlwdFRhZ3MpCgkJCQljb2RlID0gc3RyaXBDRGF0YShjb2RlKTsKCQkJCQoJCQkvLyBJbmplY3QgdGl0bGUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBwcmVzZW50CgkJCWlmICgodGFyZ2V0LnRpdGxlIHx8ICcnKSAhPSAnJykKCQkJCXBhcmFtcy50aXRsZSA9IHRhcmdldC50aXRsZTsKCQkJCQoJCQlwYXJhbXNbJ2JydXNoJ10gPSBicnVzaE5hbWU7CgkJCWhpZ2hsaWdodGVyLmluaXQocGFyYW1zKTsKCQkJZWxlbWVudCA9IGhpZ2hsaWdodGVyLmdldERpdihjb2RlKTsKCQkJCgkJCS8vIGNhcnJ5IG92ZXIgSUQKCQkJaWYgKCh0YXJnZXQuaWQgfHwgJycpICE9ICcnKQoJCQkJZWxlbWVudC5pZCA9IHRhcmdldC5pZDsKCQkJCgkJCXRhcmdldC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlbGVtZW50LCB0YXJnZXQpOwoJCX0KCX0sCgoJLyoqCgkgKiBNYWluIGVudHJ5IHBvaW50IGZvciB0aGUgU3ludGF4SGlnaGxpZ2h0ZXIuCgkgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIE9wdGlvbmFsIHBhcmFtcyB0byBhcHBseSB0byBhbGwgaGlnaGxpZ2h0ZWQgZWxlbWVudHMuCgkgKi8KCWFsbDogZnVuY3Rpb24ocGFyYW1zKQoJewoJCWF0dGFjaEV2ZW50KAoJCQl3aW5kb3csCgkJCSdsb2FkJywKCQkJZnVuY3Rpb24oKSB7IHNoLmhpZ2hsaWdodChwYXJhbXMpOyB9CgkJKTsKCX0KfTsgLy8gZW5kIG9mIHNoCgovKioKICogQ2hlY2tzIGlmIHRhcmdldCBET00gZWxlbWVudHMgaGFzIHNwZWNpZmllZCBDU1MgY2xhc3MuCiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gdGFyZ2V0IFRhcmdldCBET00gZWxlbWVudCB0byBjaGVjay4KICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZSBOYW1lIG9mIHRoZSBDU1MgY2xhc3MgdG8gY2hlY2sgZm9yLgogKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgY2xhc3MgbmFtZSBpcyBwcmVzZW50LCBmYWxzZSBvdGhlcndpc2UuCiAqLwpmdW5jdGlvbiBoYXNDbGFzcyh0YXJnZXQsIGNsYXNzTmFtZSkKewoJcmV0dXJuIHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihjbGFzc05hbWUpICE9IC0xOwp9OwoKLyoqCiAqIEFkZHMgQ1NTIGNsYXNzIG5hbWUgdG8gdGhlIHRhcmdldCBET00gZWxlbWVudC4KICogQHBhcmFtIHtET01FbGVtZW50fSB0YXJnZXQgVGFyZ2V0IERPTSBlbGVtZW50LgogKiBAcGFyYW0ge1N0cmluZ30gY2xhc3NOYW1lIE5ldyBDU1MgY2xhc3MgdG8gYWRkLgogKi8KZnVuY3Rpb24gYWRkQ2xhc3ModGFyZ2V0LCBjbGFzc05hbWUpCnsKCWlmICghaGFzQ2xhc3ModGFyZ2V0LCBjbGFzc05hbWUpKQoJCXRhcmdldC5jbGFzc05hbWUgKz0gJyAnICsgY2xhc3NOYW1lOwp9OwoKLyoqCiAqIFJlbW92ZXMgQ1NTIGNsYXNzIG5hbWUgZnJvbSB0aGUgdGFyZ2V0IERPTSBlbGVtZW50LgogKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHRhcmdldCBUYXJnZXQgRE9NIGVsZW1lbnQuCiAqIEBwYXJhbSB7U3RyaW5nfSBjbGFzc05hbWUgQ1NTIGNsYXNzIHRvIHJlbW92ZS4KICovCmZ1bmN0aW9uIHJlbW92ZUNsYXNzKHRhcmdldCwgY2xhc3NOYW1lKQp7Cgl0YXJnZXQuY2xhc3NOYW1lID0gdGFyZ2V0LmNsYXNzTmFtZS5yZXBsYWNlKGNsYXNzTmFtZSwgJycpOwp9OwoKLyoqCiAqIENvbnZlcnRzIHRoZSBzb3VyY2UgdG8gYXJyYXkgb2JqZWN0LiBNb3N0bHkgdXNlZCBmb3IgZnVuY3Rpb24gYXJndW1lbnRzIGFuZCAKICogbGlzdHMgcmV0dXJuZWQgYnkgZ2V0RWxlbWVudHNCeVRhZ05hbWUoKSB3aGljaCBhcmVuJ3QgQXJyYXkgb2JqZWN0cy4KICogQHBhcmFtIHtMaXN0fSBzb3VyY2UgU291cmNlIGxpc3QuCiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFycmF5LgogKi8KZnVuY3Rpb24gdG9BcnJheShzb3VyY2UpCnsKCXZhciByZXN1bHQgPSBbXTsKCQoJZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIAoJCXJlc3VsdC5wdXNoKHNvdXJjZVtpXSk7CgkJCglyZXR1cm4gcmVzdWx0Owp9OwoKLyoqCiAqIFNwbGl0cyBibG9jayBvZiB0ZXh0IGludG8gbGluZXMuCiAqIEBwYXJhbSB7U3RyaW5nfSBibG9jayBCbG9jayBvZiB0ZXh0LgogKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyBhcnJheSBvZiBsaW5lcy4KICovCmZ1bmN0aW9uIHNwbGl0TGluZXMoYmxvY2spCnsKCXJldHVybiBibG9jay5zcGxpdCgvXHI/XG4vKTsKfQoKLyoqCiAqIEdlbmVyYXRlcyBIVE1MIElEIGZvciB0aGUgaGlnaGxpZ2h0ZXIuCiAqIEBwYXJhbSB7U3RyaW5nfSBoaWdobGlnaHRlcklkIEhpZ2hsaWdodGVyIElELgogKiBAcmV0dXJuIHtTdHJpbmd9IFJldHVybnMgSFRNTCBJRC4KICovCmZ1bmN0aW9uIGdldEhpZ2hsaWdodGVySWQoaWQpCnsKCXZhciBwcmVmaXggPSAnaGlnaGxpZ2h0ZXJfJzsKCXJldHVybiBpZC5pbmRleE9mKHByZWZpeCkgPT0gMCA/IGlkIDogcHJlZml4ICsgaWQ7Cn07CgovKioKICogRmluZHMgSGlnaGxpZ2h0ZXIgaW5zdGFuY2UgYnkgSUQuCiAqIEBwYXJhbSB7U3RyaW5nfSBoaWdobGlnaHRlcklkIEhpZ2hsaWdodGVyIElELgogKiBAcmV0dXJuIHtIaWdobGlnaHRlcn0gUmV0dXJucyBpbnN0YW5jZSBvZiB0aGUgaGlnaGxpZ2h0ZXIuCiAqLwpmdW5jdGlvbiBnZXRIaWdobGlnaHRlckJ5SWQoaWQpCnsKCXJldHVybiBzaC52YXJzLmhpZ2hsaWdodGVyc1tnZXRIaWdobGlnaHRlcklkKGlkKV07Cn07CgovKioKICogRmluZHMgaGlnaGxpZ2h0ZXIncyBESVYgY29udGFpbmVyLgogKiBAcGFyYW0ge1N0cmluZ30gaGlnaGxpZ2h0ZXJJZCBIaWdobGlnaHRlciBJRC4KICogQHJldHVybiB7RWxlbWVudH0gUmV0dXJucyBoaWdobGlnaHRlcidzIERJViBlbGVtZW50LgogKi8KZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0ZXJEaXZCeUlkKGlkKQp7CglyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZ2V0SGlnaGxpZ2h0ZXJJZChpZCkpOwp9OwoKLyoqCiAqIFN0b3JlcyBoaWdobGlnaHRlciBzbyB0aGF0IGdldEhpZ2hsaWdodGVyQnlJZCgpIGNhbiBkbyBpdHMgdGhpbmcuIEVhY2gKICogaGlnaGxpZ2h0ZXIgbXVzdCBjYWxsIHRoaXMgbWV0aG9kIHRvIHByZXNlcnZlIGl0c2VsZi4KICogQHBhcmFtIHtIaWdoaWxnaHRlcn0gaGlnaGxpZ2h0ZXIgSGlnaGxpZ2h0ZXIgaW5zdGFuY2UuCiAqLwpmdW5jdGlvbiBzdG9yZUhpZ2hsaWdodGVyKGhpZ2hsaWdodGVyKQp7CglzaC52YXJzLmhpZ2hsaWdodGVyc1tnZXRIaWdobGlnaHRlcklkKGhpZ2hsaWdodGVyLmlkKV0gPSBoaWdobGlnaHRlcjsKfTsKCi8qKgogKiBMb29rcyBmb3IgYSBjaGlsZCBvciBwYXJlbnQgbm9kZSB3aGljaCBoYXMgc3BlY2lmaWVkIGNsYXNzbmFtZS4KICogRXF1aXZhbGVudCB0byBqUXVlcnkncyAkKGNvbnRhaW5lcikuZmluZCgiLmNsYXNzTmFtZSIpCiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IFRhcmdldCBlbGVtZW50LgogKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoIENsYXNzIG5hbWUgb3Igbm9kZSBuYW1lIHRvIGxvb2sgZm9yLgogKiBAcGFyYW0ge0Jvb2xlYW59IHJldmVyc2UgSWYgc2V0IHRvIHRydWUsIHdpbGwgZ28gdXAgdGhlIG5vZGUgdHJlZSBpbnN0ZWFkIG9mIGRvd24uCiAqIEByZXR1cm4ge0VsZW1lbnR9IFJldHVybnMgZm91bmQgY2hpbGQgb3IgcGFyZW50IGVsZW1lbnQgb24gbnVsbC4KICovCmZ1bmN0aW9uIGZpbmRFbGVtZW50KHRhcmdldCwgc2VhcmNoLCByZXZlcnNlIC8qIG9wdGlvbmFsICovKQp7CglpZiAodGFyZ2V0ID09IG51bGwpCgkJcmV0dXJuIG51bGw7CgkJCgl2YXIgbm9kZXMJCQk9IHJldmVyc2UgIT0gdHJ1ZSA/IHRhcmdldC5jaGlsZE5vZGVzIDogWyB0YXJnZXQucGFyZW50Tm9kZSBdLAoJCXByb3BlcnR5VG9GaW5kCT0geyAnIycgOiAnaWQnLCAnLicgOiAnY2xhc3NOYW1lJyB9W3NlYXJjaC5zdWJzdHIoMCwgMSldIHx8ICdub2RlTmFtZScsCgkJZXhwZWN0ZWRWYWx1ZSwKCQlmb3VuZAoJCTsKCglleHBlY3RlZFZhbHVlID0gcHJvcGVydHlUb0ZpbmQgIT0gJ25vZGVOYW1lJwoJCT8gc2VhcmNoLnN1YnN0cigxKQoJCTogc2VhcmNoLnRvVXBwZXJDYXNlKCkKCQk7CgkJCgkvLyBtYWluIHJldHVybiBvZiB0aGUgZm91bmQgbm9kZQoJaWYgKCh0YXJnZXRbcHJvcGVydHlUb0ZpbmRdIHx8ICcnKS5pbmRleE9mKGV4cGVjdGVkVmFsdWUpICE9IC0xKQoJCXJldHVybiB0YXJnZXQ7CgkKCWZvciAodmFyIGkgPSAwOyBub2RlcyAmJiBpIDwgbm9kZXMubGVuZ3RoICYmIGZvdW5kID09IG51bGw7IGkrKykKCQlmb3VuZCA9IGZpbmRFbGVtZW50KG5vZGVzW2ldLCBzZWFyY2gsIHJldmVyc2UpOwoJCglyZXR1cm4gZm91bmQ7Cn07CgovKioKICogTG9va3MgZm9yIGEgcGFyZW50IG5vZGUgd2hpY2ggaGFzIHNwZWNpZmllZCBjbGFzc25hbWUuCiAqIFRoaXMgaXMgYW4gYWxpYXMgdG8gPGNvZGU%2BZmluZEVsZW1lbnQoY29udGFpbmVyLCBjbGFzc05hbWUsIHRydWUpPC9jb2RlPi4KICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgVGFyZ2V0IGVsZW1lbnQuCiAqIEBwYXJhbSB7U3RyaW5nfSBjbGFzc05hbWUgQ2xhc3MgbmFtZSB0byBsb29rIGZvci4KICogQHJldHVybiB7RWxlbWVudH0gUmV0dXJucyBmb3VuZCBwYXJlbnQgZWxlbWVudCBvbiBudWxsLgogKi8KZnVuY3Rpb24gZmluZFBhcmVudEVsZW1lbnQodGFyZ2V0LCBjbGFzc05hbWUpCnsKCXJldHVybiBmaW5kRWxlbWVudCh0YXJnZXQsIGNsYXNzTmFtZSwgdHJ1ZSk7Cn07CgovKioKICogRmluZHMgYW4gaW5kZXggb2YgZWxlbWVudCBpbiB0aGUgYXJyYXkuCiAqIEBpZ25vcmUKICogQHBhcmFtIHtPYmplY3R9IHNlYXJjaEVsZW1lbnQKICogQHBhcmFtIHtOdW1iZXJ9IGZyb21JbmRleAogKiBAcmV0dXJuIHtOdW1iZXJ9IFJldHVybnMgaW5kZXggb2YgZWxlbWVudCBpZiBmb3VuZDsgLTEgb3RoZXJ3aXNlLgogKi8KZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KQp7Cglmcm9tSW5kZXggPSBNYXRoLm1heChmcm9tSW5kZXggfHwgMCwgMCk7CgoJZm9yICh2YXIgaSA9IGZyb21JbmRleDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKQoJCWlmKGFycmF5W2ldID09IHNlYXJjaEVsZW1lbnQpCgkJCXJldHVybiBpOwoJCglyZXR1cm4gLTE7Cn07CgovKioKICogR2VuZXJhdGVzIGEgdW5pcXVlIGVsZW1lbnQgSUQuCiAqLwpmdW5jdGlvbiBndWlkKHByZWZpeCkKewoJcmV0dXJuIChwcmVmaXggfHwgJycpICsgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwMDAwMCkudG9TdHJpbmcoKTsKfTsKCi8qKgogKiBNZXJnZXMgdHdvIG9iamVjdHMuIFZhbHVlcyBmcm9tIG9iajIgb3ZlcnJpZGUgdmFsdWVzIGluIG9iajEuCiAqIEZ1bmN0aW9uIGlzIE5PVCByZWN1cnNpdmUgYW5kIHdvcmtzIG9ubHkgZm9yIG9uZSBkaW1lbnNpb25hbCBvYmplY3RzLgogKiBAcGFyYW0ge09iamVjdH0gb2JqMSBGaXJzdCBvYmplY3QuCiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoyIFNlY29uZCBvYmplY3QuCiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBjb21iaW5hdGlvbiBvZiBib3RoIG9iamVjdHMuCiAqLwpmdW5jdGlvbiBtZXJnZShvYmoxLCBvYmoyKQp7Cgl2YXIgcmVzdWx0ID0ge30sIG5hbWU7CgoJZm9yIChuYW1lIGluIG9iajEpIAoJCXJlc3VsdFtuYW1lXSA9IG9iajFbbmFtZV07CgkKCWZvciAobmFtZSBpbiBvYmoyKSAKCQlyZXN1bHRbbmFtZV0gPSBvYmoyW25hbWVdOwoJCQoJcmV0dXJuIHJlc3VsdDsKfTsKCi8qKgogKiBBdHRlbXB0cyB0byBjb252ZXJ0IHN0cmluZyB0byBib29sZWFuLgogKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgSW5wdXQgc3RyaW5nLgogKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgaW5wdXQgd2FzICJ0cnVlIiwgZmFsc2UgaWYgaW5wdXQgd2FzICJmYWxzZSIgYW5kIHZhbHVlIG90aGVyd2lzZS4KICovCmZ1bmN0aW9uIHRvQm9vbGVhbih2YWx1ZSkKewoJdmFyIHJlc3VsdCA9IHsgInRydWUiIDogdHJ1ZSwgImZhbHNlIiA6IGZhbHNlIH1bdmFsdWVdOwoJcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gdmFsdWUgOiByZXN1bHQ7Cn07CgovKioKICogT3BlbnMgdXAgYSBjZW50ZXJlZCBwb3B1cCB3aW5kb3cuCiAqIEBwYXJhbSB7U3RyaW5nfSB1cmwJCVVSTCB0byBvcGVuIGluIHRoZSB3aW5kb3cuCiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lCQlQb3B1cCBuYW1lLgogKiBAcGFyYW0ge2ludH0gd2lkdGgJCVBvcHVwIHdpZHRoLgogKiBAcGFyYW0ge2ludH0gaGVpZ2h0CQlQb3B1cCBoZWlnaHQuCiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zCXdpbmRvdy5vcGVuKCkgb3B0aW9ucy4KICogQHJldHVybiB7V2luZG93fQkJCVJldHVybnMgd2luZG93IGluc3RhbmNlLgogKi8KZnVuY3Rpb24gcG9wdXAodXJsLCBuYW1lLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKQp7Cgl2YXIgeCA9IChzY3JlZW4ud2lkdGggLSB3aWR0aCkgLyAyLAoJCXkgPSAoc2NyZWVuLmhlaWdodCAtIGhlaWdodCkgLyAyCgkJOwoJCQoJb3B0aW9ucyArPQknLCBsZWZ0PScgKyB4ICsgCgkJCQknLCB0b3A9JyArIHkgKwoJCQkJJywgd2lkdGg9JyArIHdpZHRoICsKCQkJCScsIGhlaWdodD0nICsgaGVpZ2h0CgkJOwoJb3B0aW9ucyA9IG9wdGlvbnMucmVwbGFjZSgvXiwvLCAnJyk7CgoJdmFyIHdpbiA9IHdpbmRvdy5vcGVuKHVybCwgbmFtZSwgb3B0aW9ucyk7Cgl3aW4uZm9jdXMoKTsKCXJldHVybiB3aW47Cn07CgovKioKICogQWRkcyBldmVudCBoYW5kbGVyIHRvIHRoZSB0YXJnZXQgb2JqZWN0LgogKiBAcGFyYW0ge09iamVjdH0gb2JqCQlUYXJnZXQgb2JqZWN0LgogKiBAcGFyYW0ge1N0cmluZ30gdHlwZQkJTmFtZSBvZiB0aGUgZXZlbnQuCiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMJSGFuZGxpbmcgZnVuY3Rpb24uCiAqLwpmdW5jdGlvbiBhdHRhY2hFdmVudChvYmosIHR5cGUsIGZ1bmMsIHNjb3BlKQp7CglmdW5jdGlvbiBoYW5kbGVyKGUpCgl7CgkJZSA9IGUgfHwgd2luZG93LmV2ZW50OwoJCQoJCWlmICghZS50YXJnZXQpCgkJewoJCQllLnRhcmdldCA9IGUuc3JjRWxlbWVudDsKCQkJZS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkKCQkJewoJCQkJdGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOwoJCQl9OwoJCX0KCQkJCgkJZnVuYy5jYWxsKHNjb3BlIHx8IHdpbmRvdywgZSk7Cgl9OwoJCglpZiAob2JqLmF0dGFjaEV2ZW50KSAKCXsKCQlvYmouYXR0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGhhbmRsZXIpOwoJfQoJZWxzZSAKCXsKCQlvYmouYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7Cgl9Cn07CgovKioKICogRGlzcGxheXMgYW4gYWxlcnQuCiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgU3RyaW5nIHRvIGRpc3BsYXkuCiAqLwpmdW5jdGlvbiBhbGVydChzdHIpCnsKCXdpbmRvdy5hbGVydChzaC5jb25maWcuc3RyaW5ncy5hbGVydCArIHN0cik7Cn07CgovKioKICogRmluZHMgYSBicnVzaCBieSBpdHMgYWxpYXMuCiAqCiAqIEBwYXJhbSB7U3RyaW5nfSBhbGlhcwkJQnJ1c2ggYWxpYXMuCiAqIEBwYXJhbSB7Qm9vbGVhbn0gc2hvd0FsZXJ0CVN1cHByZXNzZXMgdGhlIGFsZXJ0IGlmIGZhbHNlLgogKiBAcmV0dXJuIHtCcnVzaH0JCQkJUmV0dXJucyBidXJzaCBjb25zdHJ1Y3RvciBpZiBmb3VuZCwgbnVsbCBvdGhlcndpc2UuCiAqLwpmdW5jdGlvbiBmaW5kQnJ1c2goYWxpYXMsIHNob3dBbGVydCkKewoJdmFyIGJydXNoZXMgPSBzaC52YXJzLmRpc2NvdmVyZWRCcnVzaGVzLAoJCXJlc3VsdCA9IG51bGwKCQk7CgkKCWlmIChicnVzaGVzID09IG51bGwpIAoJewoJCWJydXNoZXMgPSB7fTsKCQkKCQkvLyBGaW5kIGFsbCBicnVzaGVzCgkJZm9yICh2YXIgYnJ1c2ggaW4gc2guYnJ1c2hlcykgCgkJewoJCQl2YXIgaW5mbyA9IHNoLmJydXNoZXNbYnJ1c2hdLAoJCQkJYWxpYXNlcyA9IGluZm8uYWxpYXNlcwoJCQkJOwoJCQkKCQkJaWYgKGFsaWFzZXMgPT0gbnVsbCkgCgkJCQljb250aW51ZTsKCQkJCgkJCS8vIGtlZXAgdGhlIGJydXNoIG5hbWUKCQkJaW5mby5icnVzaE5hbWUgPSBicnVzaC50b0xvd2VyQ2FzZSgpOwoJCQkKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgaSsrKSAKCQkJCWJydXNoZXNbYWxpYXNlc1tpXV0gPSBicnVzaDsKCQl9CgkJCgkJc2gudmFycy5kaXNjb3ZlcmVkQnJ1c2hlcyA9IGJydXNoZXM7Cgl9CgkKCXJlc3VsdCA9IHNoLmJydXNoZXNbYnJ1c2hlc1thbGlhc11dOwoKCWlmIChyZXN1bHQgPT0gbnVsbCAmJiBzaG93QWxlcnQpCgkJYWxlcnQoc2guY29uZmlnLnN0cmluZ3Mubm9CcnVzaCArIGFsaWFzKTsKCQoJcmV0dXJuIHJlc3VsdDsKfTsKCi8qKgogKiBFeGVjdXRlcyBhIGNhbGxiYWNrIG9uIGVhY2ggbGluZSBhbmQgcmVwbGFjZXMgZWFjaCBsaW5lIHdpdGggcmVzdWx0IGZyb20gdGhlIGNhbGxiYWNrLgogKiBAcGFyYW0ge09iamVjdH0gc3RyCQkJSW5wdXQgc3RyaW5nLgogKiBAcGFyYW0ge09iamVjdH0gY2FsbGJhY2sJCUNhbGxiYWNrIGZ1bmN0aW9uIHRha2luZyBvbmUgc3RyaW5nIGFyZ3VtZW50IGFuZCByZXR1cm5pbmcgYSBzdHJpbmcuCiAqLwpmdW5jdGlvbiBlYWNoTGluZShzdHIsIGNhbGxiYWNrKQp7Cgl2YXIgbGluZXMgPSBzcGxpdExpbmVzKHN0cik7CgkKCWZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspCgkJbGluZXNbaV0gPSBjYWxsYmFjayhsaW5lc1tpXSwgaSk7CgkJCgkvLyBpbmNsdWRlIFxyIHRvIGVuYWJsZSBjb3B5LXBhc3RlIG9uIHdpbmRvd3MgKGllOCkgd2l0aG91dCBnZXR0aW5nIGV2ZXJ5dGhpbmcgb24gb25lIGxpbmUKCXJldHVybiBsaW5lcy5qb2luKCdcclxuJyk7Cn07CgovKioKICogVGhpcyBpcyBhIHNwZWNpYWwgdHJpbSB3aGljaCBvbmx5IHJlbW92ZXMgZmlyc3QgYW5kIGxhc3QgZW1wdHkgbGluZXMKICogYW5kIGRvZXNuJ3QgYWZmZWN0IHZhbGlkIGxlYWRpbmcgc3BhY2Ugb24gdGhlIGZpcnN0IGxpbmUuCiAqIAogKiBAcGFyYW0ge1N0cmluZ30gc3RyICAgSW5wdXQgc3RyaW5nCiAqIEByZXR1cm4ge1N0cmluZ30gICAgICBSZXR1cm5zIHN0cmluZyB3aXRob3V0IGVtcHR5IGZpcnN0IGFuZCBsYXN0IGxpbmVzLgogKi8KZnVuY3Rpb24gdHJpbUZpcnN0QW5kTGFzdExpbmVzKHN0cikKewoJcmV0dXJuIHN0ci5yZXBsYWNlKC9eWyBdKltcbl0rfFtcbl0qWyBdKiQvZywgJycpOwp9OwoKLyoqCiAqIFBhcnNlcyBrZXkvdmFsdWUgcGFpcnMgaW50byBoYXNoIG9iamVjdC4KICogCiAqIFVuZGVyc3RhbmRzIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKICogLSBuYW1lOiB3b3JkOwogKiAtIG5hbWU6IFt3b3JkLCB3b3JkXTsKICogLSBuYW1lOiAic3RyaW5nIjsKICogLSBuYW1lOiAnc3RyaW5nJzsKICogCiAqIEZvciBleGFtcGxlOgogKiAgIG5hbWUxOiB2YWx1ZTsgbmFtZTI6IFt2YWx1ZSwgdmFsdWVdOyBuYW1lMzogJ3ZhbHVlJwogKiAgIAogKiBAcGFyYW0ge1N0cmluZ30gc3RyICAgIElucHV0IHN0cmluZy4KICogQHJldHVybiB7T2JqZWN0fSAgICAgICBSZXR1cm5zIGRlc2VyaWFsaXplZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBwYXJzZVBhcmFtcyhzdHIpCnsKCXZhciBtYXRjaCwgCgkJcmVzdWx0ID0ge30sCgkJYXJyYXlSZWdleCA9IG5ldyBYUmVnRXhwKCJeXFxbKD88dmFsdWVzPiguKj8pKVxcXSQiKSwKCQlyZWdleCA9IG5ldyBYUmVnRXhwKAoJCQkiKD88bmFtZT5bXFx3LV0rKSIgKwoJCQkiXFxzKjpcXHMqIiArCgkJCSIoPzx2YWx1ZT4iICsKCQkJCSJbXFx3LSUjXSt8IiArCQkvLyB3b3JkCgkJCQkiXFxbLio/XFxdfCIgKwkJLy8gW10gYXJyYXkKCQkJCSciLio/InwnICsJCQkvLyAiIiBzdHJpbmcKCQkJCSInLio/JyIgKwkJCS8vICcnIHN0cmluZwoJCQkiKVxccyo7PyIsCgkJCSJnIgoJCSkKCQk7CgoJd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyKSkgIT0gbnVsbCkgCgl7CgkJdmFyIHZhbHVlID0gbWF0Y2gudmFsdWUKCQkJLnJlcGxhY2UoL15bJyJdfFsnIl0kL2csICcnKSAvLyBzdHJpcCBxdW90ZXMgZnJvbSBlbmQgb2Ygc3RyaW5ncwoJCQk7CgkJCgkJLy8gdHJ5IHRvIHBhcnNlIGFycmF5IHZhbHVlCgkJaWYgKHZhbHVlICE9IG51bGwgJiYgYXJyYXlSZWdleC50ZXN0KHZhbHVlKSkKCQl7CgkJCXZhciBtID0gYXJyYXlSZWdleC5leGVjKHZhbHVlKTsKCQkJdmFsdWUgPSBtLnZhbHVlcy5sZW5ndGggPiAwID8gbS52YWx1ZXMuc3BsaXQoL1xzKixccyovKSA6IFtdOwoJCX0KCQkKCQlyZXN1bHRbbWF0Y2gubmFtZV0gPSB2YWx1ZTsKCX0KCQoJcmV0dXJuIHJlc3VsdDsKfTsKCi8qKgogKiBXcmFwcyBlYWNoIGxpbmUgb2YgdGhlIHN0cmluZyBpbnRvIDxjb2RlLz4gdGFnIHdpdGggZ2l2ZW4gc3R5bGUgYXBwbGllZCB0byBpdC4KICogCiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgICBJbnB1dCBzdHJpbmcuCiAqIEBwYXJhbSB7U3RyaW5nfSBjc3MgICBTdHlsZSBuYW1lIHRvIGFwcGx5IHRvIHRoZSBzdHJpbmcuCiAqIEByZXR1cm4ge1N0cmluZ30gICAgICBSZXR1cm5zIGlucHV0IHN0cmluZyB3aXRoIGVhY2ggbGluZSBzdXJyb3VuZGVkIGJ5IDxzcGFuLz4gdGFnLgogKi8KZnVuY3Rpb24gd3JhcExpbmVzV2l0aENvZGUoc3RyLCBjc3MpCnsKCWlmIChzdHIgPT0gbnVsbCB8fCBzdHIubGVuZ3RoID09IDAgfHwgc3RyID09ICdcbicpIAoJCXJldHVybiBzdHI7CgoJc3RyID0gc3RyLnJlcGxhY2UoLzwvZywgJyZsdDsnKTsKCgkvLyBSZXBsYWNlIHR3byBvciBtb3JlIHNlcXVlbnRpYWwgc3BhY2VzIHdpdGggJm5ic3A7IGxlYXZpbmcgbGFzdCBzcGFjZSB1bnRvdWNoZWQuCglzdHIgPSBzdHIucmVwbGFjZSgvIHsyLH0vZywgZnVuY3Rpb24obSkKCXsKCQl2YXIgc3BhY2VzID0gJyc7CgkJCgkJZm9yICh2YXIgaSA9IDA7IGkgPCBtLmxlbmd0aCAtIDE7IGkrKykKCQkJc3BhY2VzICs9IHNoLmNvbmZpZy5zcGFjZTsKCQkKCQlyZXR1cm4gc3BhY2VzICsgJyAnOwoJfSk7CgoJLy8gU3BsaXQgZWFjaCBsaW5lIGFuZCBhcHBseSA8c3BhbiBjbGFzcz0iLi4uIj4uLi48L3NwYW4%2BIHRvIHRoZW0gc28gdGhhdAoJLy8gbGVhZGluZyBzcGFjZXMgYXJlbid0IGluY2x1ZGVkLgoJaWYgKGNzcyAhPSBudWxsKSAKCQlzdHIgPSBlYWNoTGluZShzdHIsIGZ1bmN0aW9uKGxpbmUpCgkJewoJCQlpZiAobGluZS5sZW5ndGggPT0gMCkgCgkJCQlyZXR1cm4gJyc7CgkJCQoJCQl2YXIgc3BhY2VzID0gJyc7CgkJCQoJCQlsaW5lID0gbGluZS5yZXBsYWNlKC9eKCZuYnNwO3wgKSsvLCBmdW5jdGlvbihzKQoJCQl7CgkJCQlzcGFjZXMgPSBzOwoJCQkJcmV0dXJuICcnOwoJCQl9KTsKCQkJCgkJCWlmIChsaW5lLmxlbmd0aCA9PSAwKSAKCQkJCXJldHVybiBzcGFjZXM7CgkJCQoJCQlyZXR1cm4gc3BhY2VzICsgJzxjb2RlIGNsYXNzPSInICsgY3NzICsgJyI%2BJyArIGxpbmUgKyAnPC9jb2RlPic7CgkJfSk7CgoJcmV0dXJuIHN0cjsKfTsKCi8qKgogKiBQYWRzIG51bWJlciB3aXRoIHplcm9zIHVudGlsIGl0J3MgbGVuZ3RoIGlzIHRoZSBzYW1lIGFzIGdpdmVuIGxlbmd0aC4KICogCiAqIEBwYXJhbSB7TnVtYmVyfSBudW1iZXIJTnVtYmVyIHRvIHBhZC4KICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aAlNYXggc3RyaW5nIGxlbmd0aCB3aXRoLgogKiBAcmV0dXJuIHtTdHJpbmd9CQkJUmV0dXJucyBhIHN0cmluZyBwYWRkZWQgd2l0aCBwcm9wZXIgYW1vdW50IG9mICcwJy4KICovCmZ1bmN0aW9uIHBhZE51bWJlcihudW1iZXIsIGxlbmd0aCkKewoJdmFyIHJlc3VsdCA9IG51bWJlci50b1N0cmluZygpOwoJCgl3aGlsZSAocmVzdWx0Lmxlbmd0aCA8IGxlbmd0aCkKCQlyZXN1bHQgPSAnMCcgKyByZXN1bHQ7CgkKCXJldHVybiByZXN1bHQ7Cn07CgovKioKICogUmVwbGFjZXMgdGFicyB3aXRoIHNwYWNlcy4KICogCiAqIEBwYXJhbSB7U3RyaW5nfSBjb2RlCQlTb3VyY2UgY29kZS4KICogQHBhcmFtIHtOdW1iZXJ9IHRhYlNpemUJU2l6ZSBvZiB0aGUgdGFiLgogKiBAcmV0dXJuIHtTdHJpbmd9CQkJUmV0dXJucyBjb2RlIHdpdGggYWxsIHRhYnMgcmVwbGFjZXMgYnkgc3BhY2VzLgogKi8KZnVuY3Rpb24gcHJvY2Vzc1RhYnMoY29kZSwgdGFiU2l6ZSkKewoJdmFyIHRhYiA9ICcnOwoJCglmb3IgKHZhciBpID0gMDsgaSA8IHRhYlNpemU7IGkrKykKCQl0YWIgKz0gJyAnOwoKCXJldHVybiBjb2RlLnJlcGxhY2UoL1x0L2csIHRhYik7Cn07CgovKioKICogUmVwbGFjZXMgdGFicyB3aXRoIHNtYXJ0IHNwYWNlcy4KICogCiAqIEBwYXJhbSB7U3RyaW5nfSBjb2RlICAgIENvZGUgdG8gZml4IHRoZSB0YWJzIGluLgogKiBAcGFyYW0ge051bWJlcn0gdGFiU2l6ZSBOdW1iZXIgb2Ygc3BhY2VzIGluIGEgY29sdW1uLgogKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgICBSZXR1cm5zIGNvZGUgd2l0aCBhbGwgdGFicyByZXBsYWNlcyB3aXRoIHJvcGVyIGFtb3VudCBvZiBzcGFjZXMuCiAqLwpmdW5jdGlvbiBwcm9jZXNzU21hcnRUYWJzKGNvZGUsIHRhYlNpemUpCnsKCXZhciBsaW5lcyA9IHNwbGl0TGluZXMoY29kZSksCgkJdGFiID0gJ1x0JywKCQlzcGFjZXMgPSAnJwoJCTsKCQoJLy8gQ3JlYXRlIGEgc3RyaW5nIHdpdGggMTAwMCBzcGFjZXMgdG8gY29weSBzcGFjZXMgZnJvbS4uLiAKCS8vIEl0J3MgYXNzdW1lZCB0aGF0IHRoZXJlIHdvdWxkIGJlIG5vIGluZGVudGF0aW9uIGxvbmdlciB0aGFuIHRoYXQuCglmb3IgKHZhciBpID0gMDsgaSA8IDUwOyBpKyspIAoJCXNwYWNlcyArPSAnICAgICAgICAgICAgICAgICAgICAnOyAvLyAyMCBzcGFjZXMgKiA1MAoJCQkKCS8vIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBzcGVjaWZpZWQgYW1vdW50IG9mIHNwYWNlcyBpbiB0aGUgc3RyaW5nCgkvLyB3aGVyZSBhIHRhYiBpcyB3aGlsZSByZW1vdmluZyB0aGF0IGdpdmVuIHRhYi4KCWZ1bmN0aW9uIGluc2VydFNwYWNlcyhsaW5lLCBwb3MsIGNvdW50KQoJewoJCXJldHVybiBsaW5lLnN1YnN0cigwLCBwb3MpCgkJCSsgc3BhY2VzLnN1YnN0cigwLCBjb3VudCkKCQkJKyBsaW5lLnN1YnN0cihwb3MgKyAxLCBsaW5lLmxlbmd0aCkgLy8gcG9zICsgMSB3aWxsIGdldCByaWQgb2YgdGhlIHRhYgoJCQk7Cgl9OwoKCS8vIEdvIHRocm91Z2ggYWxsIHRoZSBsaW5lcyBhbmQgZG8gdGhlICdzbWFydCB0YWJzJyBtYWdpYy4KCWNvZGUgPSBlYWNoTGluZShjb2RlLCBmdW5jdGlvbihsaW5lKQoJewoJCWlmIChsaW5lLmluZGV4T2YodGFiKSA9PSAtMSkgCgkJCXJldHVybiBsaW5lOwoJCQoJCXZhciBwb3MgPSAwOwoJCQoJCXdoaWxlICgocG9zID0gbGluZS5pbmRleE9mKHRhYikpICE9IC0xKSAKCQl7CgkJCS8vIFRoaXMgaXMgcHJldHR5IG11Y2ggYWxsIHRoZXJlIGlzIHRvIHRoZSAnc21hcnQgdGFicycgbG9naWMuCgkJCS8vIEJhc2VkIG9uIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIGxpbmUgYW5kIHNpemUgb2YgYSB0YWIsCgkJCS8vIGNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlcyB3ZSBuZWVkIHRvIGluc2VydC4KCQkJdmFyIHNwYWNlcyA9IHRhYlNpemUgLSBwb3MgJSB0YWJTaXplOwoJCQlsaW5lID0gaW5zZXJ0U3BhY2VzKGxpbmUsIHBvcywgc3BhY2VzKTsKCQl9CgkJCgkJcmV0dXJuIGxpbmU7Cgl9KTsKCQoJcmV0dXJuIGNvZGU7Cn07CgovKioKICogUGVyZm9ybXMgdmFyaW91cyBzdHJpbmcgZml4ZXMgYmFzZWQgb24gY29uZmlndXJhdGlvbi4KICovCmZ1bmN0aW9uIGZpeElucHV0U3RyaW5nKHN0cikKewoJdmFyIGJyID0gLzxiclxzKlwvPz58Jmx0O2JyXHMqXC8/Jmd0Oy9naTsKCQoJaWYgKHNoLmNvbmZpZy5ibG9nZ2VyTW9kZSA9PSB0cnVlKQoJCXN0ciA9IHN0ci5yZXBsYWNlKGJyLCAnXG4nKTsKCglpZiAoc2guY29uZmlnLnN0cmlwQnJzID09IHRydWUpCgkJc3RyID0gc3RyLnJlcGxhY2UoYnIsICcnKTsKCQkKCXJldHVybiBzdHI7Cn07CgovKioKICogUmVtb3ZlcyBhbGwgd2hpdGUgc3BhY2UgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nLgogKiAKICogQHBhcmFtIHtTdHJpbmd9IHN0ciAgIFN0cmluZyB0byB0cmltLgogKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgUmV0dXJucyBzdHJpbmcgd2l0aG91dCBsZWFkaW5nIGFuZCBmb2xsb3dpbmcgd2hpdGUgc3BhY2UgY2hhcmFjdGVycy4KICovCmZ1bmN0aW9uIHRyaW0oc3RyKQp7CglyZXR1cm4gc3RyLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7Cn07CgovKioKICogVW5pbmRlbnRzIGEgYmxvY2sgb2YgdGV4dCBieSB0aGUgbG93ZXN0IGNvbW1vbiBpbmRlbnQgYW1vdW50LgogKiBAcGFyYW0ge1N0cmluZ30gc3RyICAgVGV4dCB0byB1bmluZGVudC4KICogQHJldHVybiB7U3RyaW5nfSAgICAgIFJldHVybnMgdW5pbmRlbnRlZCB0ZXh0IGJsb2NrLgogKi8KZnVuY3Rpb24gdW5pbmRlbnQoc3RyKQp7Cgl2YXIgbGluZXMgPSBzcGxpdExpbmVzKGZpeElucHV0U3RyaW5nKHN0cikpLAoJCWluZGVudHMgPSBuZXcgQXJyYXkoKSwKCQlyZWdleCA9IC9eXHMqLywKCQltaW4gPSAxMDAwCgkJOwoJCgkvLyBnbyB0aHJvdWdoIGV2ZXJ5IGxpbmUgYW5kIGNoZWNrIGZvciBjb21tb24gbnVtYmVyIG9mIGluZGVudHMKCWZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoICYmIG1pbiA%2BIDA7IGkrKykgCgl7CgkJdmFyIGxpbmUgPSBsaW5lc1tpXTsKCQkKCQlpZiAodHJpbShsaW5lKS5sZW5ndGggPT0gMCkgCgkJCWNvbnRpbnVlOwoJCQoJCXZhciBtYXRjaGVzID0gcmVnZXguZXhlYyhsaW5lKTsKCQkKCQkvLyBJbiB0aGUgZXZlbnQgdGhhdCBqdXN0IG9uZSBsaW5lIGRvZXNuJ3QgaGF2ZSBsZWFkaW5nIHdoaXRlIHNwYWNlCgkJLy8gd2UgY2FuJ3QgdW5pbmRlbnQgYW55dGhpbmcsIHNvIGJhaWwgY29tcGxldGVseS4KCQlpZiAobWF0Y2hlcyA9PSBudWxsKSAKCQkJcmV0dXJuIHN0cjsKCQkJCgkJbWluID0gTWF0aC5taW4obWF0Y2hlc1swXS5sZW5ndGgsIG1pbik7Cgl9CgkKCS8vIHRyaW0gbWluaW11bSBjb21tb24gbnVtYmVyIG9mIHdoaXRlIHNwYWNlIGZyb20gdGhlIGJlZ2lubmluZyBvZiBldmVyeSBsaW5lCglpZiAobWluID4gMCkgCgkJZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgCgkJCWxpbmVzW2ldID0gbGluZXNbaV0uc3Vic3RyKG1pbik7CgkKCXJldHVybiBsaW5lcy5qb2luKCdcbicpOwp9OwoKLyoqCiAqIENhbGxiYWNrIG1ldGhvZCBmb3IgQXJyYXkuc29ydCgpIHdoaWNoIHNvcnRzIG1hdGNoZXMgYnkKICogaW5kZXggcG9zaXRpb24gYW5kIHRoZW4gYnkgbGVuZ3RoLgogKiAKICogQHBhcmFtIHtNYXRjaH0gbTEJTGVmdCBvYmplY3QuCiAqIEBwYXJhbSB7TWF0Y2h9IG0yICAgIFJpZ2h0IG9iamVjdC4KICogQHJldHVybiB7TnVtYmVyfSAgICAgUmV0dXJucyAtMSwgMCBvciAtMSBhcyBhIGNvbXBhcmlzb24gcmVzdWx0LgogKi8KZnVuY3Rpb24gbWF0Y2hlc1NvcnRDYWxsYmFjayhtMSwgbTIpCnsKCS8vIHNvcnQgbWF0Y2hlcyBieSBpbmRleCBmaXJzdAoJaWYobTEuaW5kZXggPCBtMi5pbmRleCkKCQlyZXR1cm4gLTE7CgllbHNlIGlmKG0xLmluZGV4ID4gbTIuaW5kZXgpCgkJcmV0dXJuIDE7CgllbHNlCgl7CgkJLy8gaWYgaW5kZXggaXMgdGhlIHNhbWUsIHNvcnQgYnkgbGVuZ3RoCgkJaWYobTEubGVuZ3RoIDwgbTIubGVuZ3RoKQoJCQlyZXR1cm4gLTE7CgkJZWxzZSBpZihtMS5sZW5ndGggPiBtMi5sZW5ndGgpCgkJCXJldHVybiAxOwoJfQoJCglyZXR1cm4gMDsKfTsKCi8qKgogKiBFeGVjdXRlcyBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gb24gcHJvdmlkZWQgY29kZSBhbmQgcmV0dXJucyBhbGwKICogbWF0Y2hlcyB0aGF0IGFyZSBmb3VuZC4KICogCiAqIEBwYXJhbSB7U3RyaW5nfSBjb2RlICAgIENvZGUgdG8gZXhlY3V0ZSByZWd1bGFyIGV4cHJlc3Npb24gb24uCiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleCAgIFJlZ3VsYXIgZXhwcmVzc2lvbiBpdGVtIGluZm8gZnJvbSA8Y29kZT5yZWdleExpc3Q8L2NvZGU%2BIGNvbGxlY3Rpb24uCiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgIFJldHVybnMgYSBsaXN0IG9mIE1hdGNoIG9iamVjdHMuCiAqLyAKZnVuY3Rpb24gZ2V0TWF0Y2hlcyhjb2RlLCByZWdleEluZm8pCnsKCWZ1bmN0aW9uIGRlZmF1bHRBZGQobWF0Y2gsIHJlZ2V4SW5mbykKCXsKCQlyZXR1cm4gbWF0Y2hbMF07Cgl9OwoJCgl2YXIgaW5kZXggPSAwLAoJCW1hdGNoID0gbnVsbCwKCQltYXRjaGVzID0gW10sCgkJZnVuYyA9IHJlZ2V4SW5mby5mdW5jID8gcmVnZXhJbmZvLmZ1bmMgOiBkZWZhdWx0QWRkCgkJOwoJCgl3aGlsZSgobWF0Y2ggPSByZWdleEluZm8ucmVnZXguZXhlYyhjb2RlKSkgIT0gbnVsbCkKCXsKCQl2YXIgcmVzdWx0TWF0Y2ggPSBmdW5jKG1hdGNoLCByZWdleEluZm8pOwoJCQoJCWlmICh0eXBlb2YocmVzdWx0TWF0Y2gpID09ICdzdHJpbmcnKQoJCQlyZXN1bHRNYXRjaCA9IFtuZXcgc2guTWF0Y2gocmVzdWx0TWF0Y2gsIG1hdGNoLmluZGV4LCByZWdleEluZm8uY3NzKV07CgoJCW1hdGNoZXMgPSBtYXRjaGVzLmNvbmNhdChyZXN1bHRNYXRjaCk7Cgl9CgkKCXJldHVybiBtYXRjaGVzOwp9OwoKLyoqCiAqIFR1cm5zIGFsbCBVUkxzIGluIHRoZSBjb2RlIGludG8gPGEvPiB0YWdzLgogKiBAcGFyYW0ge1N0cmluZ30gY29kZSBJbnB1dCBjb2RlLgogKiBAcmV0dXJuIHtTdHJpbmd9IFJldHVybnMgY29kZSB3aXRoIDwvYT4gdGFncy4KICovCmZ1bmN0aW9uIHByb2Nlc3NVcmxzKGNvZGUpCnsKCXZhciBndCA9IC8oLiopKCgmZ3Q7fCZsdDspLiopLzsKCQoJcmV0dXJuIGNvZGUucmVwbGFjZShzaC5yZWdleExpYi51cmwsIGZ1bmN0aW9uKG0pCgl7CgkJdmFyIHN1ZmZpeCA9ICcnLAoJCQltYXRjaCA9IG51bGwKCQkJOwoJCQoJCS8vIFdlIGluY2x1ZGUgJmx0OyBhbmQgJmd0OyBpbiB0aGUgVVJMIGZvciB0aGUgY29tbW9uIGNhc2VzIGxpa2UgPGh0dHA6Ly9nb29nbGUuY29tPgoJCS8vIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhleSBnZXQgdHJhbnNmb3JtZWQgaW50byAmbHQ7aHR0cDovL2dvb2dsZS5jb20mZ3Q7CgkJLy8gV2hlcmUgYXMgJmd0OyBlYXNpbHkgbG9va3MgbGlrZSBwYXJ0IG9mIHRoZSBVUkwgc3RyaW5nLgoJCgkJaWYgKG1hdGNoID0gZ3QuZXhlYyhtKSkKCQl7CgkJCW0gPSBtYXRjaFsxXTsKCQkJc3VmZml4ID0gbWF0Y2hbMl07CgkJfQoJCQoJCXJldHVybiAnPGEgaHJlZj0iJyArIG0gKyAnIj4nICsgbSArICc8L2E%2BJyArIHN1ZmZpeDsKCX0pOwp9OwoKLyoqCiAqIEZpbmRzIGFsbCA8U0NSSVBUIFRZUEU9InN5bnRheGhpZ2hsaWdodGVyIiAvPiBlbGVtZW50c3MuCiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFycmF5IG9mIGFsbCBmb3VuZCBTeW50YXhIaWdobGlnaHRlciB0YWdzLgogKi8KZnVuY3Rpb24gZ2V0U3ludGF4SGlnaGxpZ2h0ZXJTY3JpcHRUYWdzKCkKewoJdmFyIHRhZ3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JyksCgkJcmVzdWx0ID0gW10KCQk7CgkKCWZvciAodmFyIGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykKCQlpZiAodGFnc1tpXS50eXBlID09ICdzeW50YXhoaWdobGlnaHRlcicpCgkJCXJlc3VsdC5wdXNoKHRhZ3NbaV0pOwoJCQkKCXJldHVybiByZXN1bHQ7Cn07CgovKioKICogU3RyaXBzIDwhW0NEQVRBW11dPiBmcm9tIDxTQ1JJUFQgLz4gY29udGVudCBiZWNhdXNlIGl0IHNob3VsZCBiZSB1c2VkCiAqIHRoZXJlIGluIG1vc3QgY2FzZXMgZm9yIFhIVE1MIGNvbXBsaWFuY2UuCiAqIEBwYXJhbSB7U3RyaW5nfSBvcmlnaW5hbAlJbnB1dCBjb2RlLgogKiBAcmV0dXJuIHtTdHJpbmd9IFJldHVybnMgY29kZSB3aXRob3V0IGxlYWRpbmcgPCFbQ0RBVEFbXV0%2BIHRhZ3MuCiAqLwpmdW5jdGlvbiBzdHJpcENEYXRhKG9yaWdpbmFsKQp7Cgl2YXIgbGVmdCA9ICc8IVtDREFUQVsnLAoJCXJpZ2h0ID0gJ11dPicsCgkJLy8gZm9yIHNvbWUgcmVhc29uIElFIGluc2VydHMgc29tZSBsZWFkaW5nIGJsYW5rcyBoZXJlCgkJY29weSA9IHRyaW0ob3JpZ2luYWwpLAoJCWNoYW5nZWQgPSBmYWxzZSwKCQlsZWZ0TGVuZ3RoID0gbGVmdC5sZW5ndGgsCgkJcmlnaHRMZW5ndGggPSByaWdodC5sZW5ndGgKCQk7CgkKCWlmIChjb3B5LmluZGV4T2YobGVmdCkgPT0gMCkKCXsKCQljb3B5ID0gY29weS5zdWJzdHJpbmcobGVmdExlbmd0aCk7CgkJY2hhbmdlZCA9IHRydWU7Cgl9CgkKCXZhciBjb3B5TGVuZ3RoID0gY29weS5sZW5ndGg7CgkKCWlmIChjb3B5LmluZGV4T2YocmlnaHQpID09IGNvcHlMZW5ndGggLSByaWdodExlbmd0aCkKCXsKCQljb3B5ID0gY29weS5zdWJzdHJpbmcoMCwgY29weUxlbmd0aCAtIHJpZ2h0TGVuZ3RoKTsKCQljaGFuZ2VkID0gdHJ1ZTsKCX0KCQoJcmV0dXJuIGNoYW5nZWQgPyBjb3B5IDogb3JpZ2luYWw7Cn07CgoKLyoqCiAqIFF1aWNrIGNvZGUgbW91c2UgZG91YmxlIGNsaWNrIGhhbmRsZXIuCiAqLwpmdW5jdGlvbiBxdWlja0NvZGVIYW5kbGVyKGUpCnsKCXZhciB0YXJnZXQgPSBlLnRhcmdldCwKCQloaWdobGlnaHRlckRpdiA9IGZpbmRQYXJlbnRFbGVtZW50KHRhcmdldCwgJy5zeW50YXhoaWdobGlnaHRlcicpLAoJCWNvbnRhaW5lciA9IGZpbmRQYXJlbnRFbGVtZW50KHRhcmdldCwgJy5jb250YWluZXInKSwKCQl0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyksCgkJaGlnaGxpZ2h0ZXIKCQk7CgoJaWYgKCFjb250YWluZXIgfHwgIWhpZ2hsaWdodGVyRGl2IHx8IGZpbmRFbGVtZW50KGNvbnRhaW5lciwgJ3RleHRhcmVhJykpCgkJcmV0dXJuOwoKCWhpZ2hsaWdodGVyID0gZ2V0SGlnaGxpZ2h0ZXJCeUlkKGhpZ2hsaWdodGVyRGl2LmlkKTsKCQoJLy8gYWRkIHNvdXJjZSBjbGFzcyBuYW1lCglhZGRDbGFzcyhoaWdobGlnaHRlckRpdiwgJ3NvdXJjZScpOwoKCS8vIEhhdmUgdG8gZ28gb3ZlciBlYWNoIGxpbmUgYW5kIGdyYWIgaXQncyB0ZXh0LCBjYW4ndCBqdXN0IGRvIGl0IG9uIHRoZQoJLy8gY29udGFpbmVyIGJlY2F1c2UgRmlyZWZveCBsb3NlcyBhbGwgXG4gd2hlcmUgYXMgV2Via2l0IGRvZXNuJ3QuCgl2YXIgbGluZXMgPSBjb250YWluZXIuY2hpbGROb2RlcywKCQljb2RlID0gW10KCQk7CgkKCWZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspCgkJY29kZS5wdXNoKGxpbmVzW2ldLmlubmVyVGV4dCB8fCBsaW5lc1tpXS50ZXh0Q29udGVudCk7CgkKCS8vIHVzaW5nIFxyIGluc3RlYWQgb2YgXHIgb3IgXHJcbiBtYWtlcyB0aGlzIHdvcmsgZXF1YWxseSB3ZWxsIG9uIElFLCBGRiBhbmQgV2Via2l0Cgljb2RlID0gY29kZS5qb2luKCdccicpOwoKICAgIC8vIEZvciBXZWJraXQgYnJvd3NlcnMsIHJlcGxhY2UgbmJzcCB3aXRoIGEgYnJlYWtpbmcgc3BhY2UKICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL1x1MDBhMC9nLCAiICIpOwoJCgkvLyBpbmplY3QgPHRleHRhcmVhLz4gdGFnCgl0ZXh0YXJlYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb2RlKSk7Cgljb250YWluZXIuYXBwZW5kQ2hpbGQodGV4dGFyZWEpOwoJCgkvLyBwcmVzZWxlY3QgYWxsIHRleHQKCXRleHRhcmVhLmZvY3VzKCk7Cgl0ZXh0YXJlYS5zZWxlY3QoKTsKCQoJLy8gc2V0IHVwIGhhbmRsZXIgZm9yIGxvc3QgZm9jdXMKCWF0dGFjaEV2ZW50KHRleHRhcmVhLCAnYmx1cicsIGZ1bmN0aW9uKGUpCgl7CgkJdGV4dGFyZWEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXh0YXJlYSk7CgkJcmVtb3ZlQ2xhc3MoaGlnaGxpZ2h0ZXJEaXYsICdzb3VyY2UnKTsKCX0pOwp9OwoKLyoqCiAqIE1hdGNoIG9iamVjdC4KICovCnNoLk1hdGNoID0gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjc3MpCnsKCXRoaXMudmFsdWUgPSB2YWx1ZTsKCXRoaXMuaW5kZXggPSBpbmRleDsKCXRoaXMubGVuZ3RoID0gdmFsdWUubGVuZ3RoOwoJdGhpcy5jc3MgPSBjc3M7Cgl0aGlzLmJydXNoTmFtZSA9IG51bGw7Cn07CgpzaC5NYXRjaC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpCnsKCXJldHVybiB0aGlzLnZhbHVlOwp9OwoKLyoqCiAqIFNpbXVsYXRlcyBIVE1MIGNvZGUgd2l0aCBhIHNjcmlwdGluZyBsYW5ndWFnZSBlbWJlZGRlZC4KICogCiAqIEBwYXJhbSB7U3RyaW5nfSBzY3JpcHRCcnVzaE5hbWUgQnJ1c2ggbmFtZSBvZiB0aGUgc2NyaXB0aW5nIGxhbmd1YWdlLgogKi8Kc2guSHRtbFNjcmlwdCA9IGZ1bmN0aW9uKHNjcmlwdEJydXNoTmFtZSkKewoJdmFyIGJydXNoQ2xhc3MgPSBmaW5kQnJ1c2goc2NyaXB0QnJ1c2hOYW1lKSwKCQlzY3JpcHRCcnVzaCwKCQl4bWxCcnVzaCA9IG5ldyBzaC5icnVzaGVzLlhtbCgpLAoJCWJyYWNrZXRzUmVnZXggPSBudWxsLAoJCXJlZiA9IHRoaXMsCgkJbWV0aG9kc1RvRXhwb3NlID0gJ2dldERpdiBnZXRIdG1sIGluaXQnLnNwbGl0KCcgJykKCQk7CgoJaWYgKGJydXNoQ2xhc3MgPT0gbnVsbCkKCQlyZXR1cm47CgkKCXNjcmlwdEJydXNoID0gbmV3IGJydXNoQ2xhc3MoKTsKCQoJZm9yKHZhciBpID0gMDsgaSA8IG1ldGhvZHNUb0V4cG9zZS5sZW5ndGg7IGkrKykKCQkvLyBtYWtlIGEgY2xvc3VyZSBzbyB3ZSBkb24ndCBsb3NlIHRoZSBuYW1lIGFmdGVyIGkgY2hhbmdlcwoJCShmdW5jdGlvbigpIHsKCQkJdmFyIG5hbWUgPSBtZXRob2RzVG9FeHBvc2VbaV07CgkJCQoJCQlyZWZbbmFtZV0gPSBmdW5jdGlvbigpCgkJCXsKCQkJCXJldHVybiB4bWxCcnVzaFtuYW1lXS5hcHBseSh4bWxCcnVzaCwgYXJndW1lbnRzKTsKCQkJfTsKCQl9KSgpOwoJCglpZiAoc2NyaXB0QnJ1c2guaHRtbFNjcmlwdCA9PSBudWxsKQoJewoJCWFsZXJ0KHNoLmNvbmZpZy5zdHJpbmdzLmJydXNoTm90SHRtbFNjcmlwdCArIHNjcmlwdEJydXNoTmFtZSk7CgkJcmV0dXJuOwoJfQoJCgl4bWxCcnVzaC5yZWdleExpc3QucHVzaCgKCQl7IHJlZ2V4OiBzY3JpcHRCcnVzaC5odG1sU2NyaXB0LmNvZGUsIGZ1bmM6IHByb2Nlc3MgfQoJKTsKCQoJZnVuY3Rpb24gb2Zmc2V0TWF0Y2hlcyhtYXRjaGVzLCBvZmZzZXQpCgl7CgkJZm9yICh2YXIgaiA9IDA7IGogPCBtYXRjaGVzLmxlbmd0aDsgaisrKSAKCQkJbWF0Y2hlc1tqXS5pbmRleCArPSBvZmZzZXQ7Cgl9CgkKCWZ1bmN0aW9uIHByb2Nlc3MobWF0Y2gsIGluZm8pCgl7CgkJdmFyIGNvZGUgPSBtYXRjaC5jb2RlLAoJCQltYXRjaGVzID0gW10sCgkJCXJlZ2V4TGlzdCA9IHNjcmlwdEJydXNoLnJlZ2V4TGlzdCwKCQkJb2Zmc2V0ID0gbWF0Y2guaW5kZXggKyBtYXRjaC5sZWZ0Lmxlbmd0aCwKCQkJaHRtbFNjcmlwdCA9IHNjcmlwdEJydXNoLmh0bWxTY3JpcHQsCgkJCXJlc3VsdAoJCQk7CgoJCS8vIGFkZCBhbGwgbWF0Y2hlcyBmcm9tIHRoZSBjb2RlCgkJZm9yICh2YXIgaSA9IDA7IGkgPCByZWdleExpc3QubGVuZ3RoOyBpKyspCgkJewoJCQlyZXN1bHQgPSBnZXRNYXRjaGVzKGNvZGUsIHJlZ2V4TGlzdFtpXSk7CgkJCW9mZnNldE1hdGNoZXMocmVzdWx0LCBvZmZzZXQpOwoJCQltYXRjaGVzID0gbWF0Y2hlcy5jb25jYXQocmVzdWx0KTsKCQl9CgkJCgkJLy8gYWRkIGxlZnQgc2NyaXB0IGJyYWNrZXQKCQlpZiAoaHRtbFNjcmlwdC5sZWZ0ICE9IG51bGwgJiYgbWF0Y2gubGVmdCAhPSBudWxsKQoJCXsKCQkJcmVzdWx0ID0gZ2V0TWF0Y2hlcyhtYXRjaC5sZWZ0LCBodG1sU2NyaXB0LmxlZnQpOwoJCQlvZmZzZXRNYXRjaGVzKHJlc3VsdCwgbWF0Y2guaW5kZXgpOwoJCQltYXRjaGVzID0gbWF0Y2hlcy5jb25jYXQocmVzdWx0KTsKCQl9CgkJCgkJLy8gYWRkIHJpZ2h0IHNjcmlwdCBicmFja2V0CgkJaWYgKGh0bWxTY3JpcHQucmlnaHQgIT0gbnVsbCAmJiBtYXRjaC5yaWdodCAhPSBudWxsKQoJCXsKCQkJcmVzdWx0ID0gZ2V0TWF0Y2hlcyhtYXRjaC5yaWdodCwgaHRtbFNjcmlwdC5yaWdodCk7CgkJCW9mZnNldE1hdGNoZXMocmVzdWx0LCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxhc3RJbmRleE9mKG1hdGNoLnJpZ2h0KSk7CgkJCW1hdGNoZXMgPSBtYXRjaGVzLmNvbmNhdChyZXN1bHQpOwoJCX0KCQkKCQlmb3IgKHZhciBqID0gMDsgaiA8IG1hdGNoZXMubGVuZ3RoOyBqKyspCgkJCW1hdGNoZXNbal0uYnJ1c2hOYW1lID0gYnJ1c2hDbGFzcy5icnVzaE5hbWU7CgkJCQoJCXJldHVybiBtYXRjaGVzOwoJfQp9OwoKLyoqCiAqIE1haW4gSGlnaGxpdGhlciBjbGFzcy4KICogQGNvbnN0cnVjdG9yCiAqLwpzaC5IaWdobGlnaHRlciA9IGZ1bmN0aW9uKCkKewoJLy8gbm90IHB1dHRpbmcgYW55IGNvZGUgaW4gaGVyZSBiZWNhdXNlIG9mIHRoZSBwcm90b3R5cGUgaW5oZXJpdGFuY2UKfTsKCnNoLkhpZ2hsaWdodGVyLnByb3RvdHlwZSA9IHsKCS8qKgoJICogUmV0dXJucyB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgaGlnaGxpZ2h0ZXIuCgkgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQkJCQlOYW1lIG9mIHRoZSBwYXJhbWV0ZXIuCgkgKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdFZhbHVlCQlEZWZhdWx0IHZhbHVlLgoJICogQHJldHVybiB7T2JqZWN0fQkJCQkJUmV0dXJucyBmb3VuZCB2YWx1ZSBvciBkZWZhdWx0IHZhbHVlIG90aGVyd2lzZS4KCSAqLwoJZ2V0UGFyYW06IGZ1bmN0aW9uKG5hbWUsIGRlZmF1bHRWYWx1ZSkKCXsKCQl2YXIgcmVzdWx0ID0gdGhpcy5wYXJhbXNbbmFtZV07CgkJcmV0dXJuIHRvQm9vbGVhbihyZXN1bHQgPT0gbnVsbCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdCk7Cgl9LAoJCgkvKioKCSAqIFNob3J0Y3V0IHRvIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKS4KCSAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lCQlOYW1lIG9mIHRoZSBlbGVtZW50IHRvIGNyZWF0ZSAoRElWLCBBLCBldGMpLgoJICogQHJldHVybiB7SFRNTEVsZW1lbnR9CVJldHVybnMgbmV3IEhUTUwgZWxlbWVudC4KCSAqLwoJY3JlYXRlOiBmdW5jdGlvbihuYW1lKQoJewoJCXJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpOwoJfSwKCQoJLyoqCgkgKiBBcHBsaWVzIGFsbCByZWd1bGFyIGV4cHJlc3Npb24gdG8gdGhlIGNvZGUgYW5kIHN0b3JlcyBhbGwgZm91bmQKCSAqIG1hdGNoZXMgaW4gdGhlIGB0aGlzLm1hdGNoZXNgIGFycmF5LgoJICogQHBhcmFtIHtBcnJheX0gcmVnZXhMaXN0CQlMaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCgkgKiBAcGFyYW0ge1N0cmluZ30gY29kZQkJCVNvdXJjZSBjb2RlLgoJICogQHJldHVybiB7QXJyYXl9CQkJCVJldHVybnMgbGlzdCBvZiBtYXRjaGVzLgoJICovCglmaW5kTWF0Y2hlczogZnVuY3Rpb24ocmVnZXhMaXN0LCBjb2RlKQoJewoJCXZhciByZXN1bHQgPSBbXTsKCQkKCQlpZiAocmVnZXhMaXN0ICE9IG51bGwpCgkJCWZvciAodmFyIGkgPSAwOyBpIDwgcmVnZXhMaXN0Lmxlbmd0aDsgaSsrKSAKCQkJCS8vIEJVRzogbGVuZ3RoIHJldHVybnMgbGVuKzEgZm9yIGFycmF5IGlmIG1ldGhvZHMgYWRkZWQgdG8gcHJvdG90eXBlIGNoYWluIChvaXNpbmdAZ21haWwuY29tKQoJCQkJaWYgKHR5cGVvZiAocmVnZXhMaXN0W2ldKSA9PSAib2JqZWN0IikKCQkJCQlyZXN1bHQgPSByZXN1bHQuY29uY2F0KGdldE1hdGNoZXMoY29kZSwgcmVnZXhMaXN0W2ldKSk7CgkJCgkJLy8gc29ydCBhbmQgcmVtb3ZlIG5lc3RlZCB0aGUgbWF0Y2hlcwoJCXJldHVybiB0aGlzLnJlbW92ZU5lc3RlZE1hdGNoZXMocmVzdWx0LnNvcnQobWF0Y2hlc1NvcnRDYWxsYmFjaykpOwoJfSwKCQoJLyoqCgkgKiBDaGVja3MgdG8gc2VlIGlmIGFueSBvZiB0aGUgbWF0Y2hlcyBhcmUgaW5zaWRlIG9mIG90aGVyIG1hdGNoZXMuIAoJICogVGhpcyBwcm9jZXNzIHdvdWxkIGdldCByaWQgb2YgaGlnaGxpZ3RlZCBzdHJpbmdzIGluc2lkZSBjb21tZW50cywgCgkgKiBrZXl3b3JkcyBpbnNpZGUgc3RyaW5ncyBhbmQgc28gb24uCgkgKi8KCXJlbW92ZU5lc3RlZE1hdGNoZXM6IGZ1bmN0aW9uKG1hdGNoZXMpCgl7CgkJLy8gT3B0aW1pemVkIGJ5IEpvc2UgUHJhZG8gKGh0dHA6Ly9qb3NlcHJhZG8uY29tKQoJCWZvciAodmFyIGkgPSAwOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykgCgkJeyAKCQkJaWYgKG1hdGNoZXNbaV0gPT09IG51bGwpCgkJCQljb250aW51ZTsKCQkJCgkJCXZhciBpdGVtSSA9IG1hdGNoZXNbaV0sCgkJCQlpdGVtSUVuZFBvcyA9IGl0ZW1JLmluZGV4ICsgaXRlbUkubGVuZ3RoCgkJCQk7CgkJCQoJCQlmb3IgKHZhciBqID0gaSArIDE7IGogPCBtYXRjaGVzLmxlbmd0aCAmJiBtYXRjaGVzW2ldICE9PSBudWxsOyBqKyspIAoJCQl7CgkJCQl2YXIgaXRlbUogPSBtYXRjaGVzW2pdOwoJCQkJCgkJCQlpZiAoaXRlbUogPT09IG51bGwpIAoJCQkJCWNvbnRpbnVlOwoJCQkJZWxzZSBpZiAoaXRlbUouaW5kZXggPiBpdGVtSUVuZFBvcykgCgkJCQkJYnJlYWs7CgkJCQllbHNlIGlmIChpdGVtSi5pbmRleCA9PSBpdGVtSS5pbmRleCAmJiBpdGVtSi5sZW5ndGggPiBpdGVtSS5sZW5ndGgpCgkJCQkJbWF0Y2hlc1tpXSA9IG51bGw7CgkJCQllbHNlIGlmIChpdGVtSi5pbmRleCA%2BPSBpdGVtSS5pbmRleCAmJiBpdGVtSi5pbmRleCA8IGl0ZW1JRW5kUG9zKSAKCQkJCQltYXRjaGVzW2pdID0gbnVsbDsKCQkJfQoJCX0KCQkKCQlyZXR1cm4gbWF0Y2hlczsKCX0sCgkKCS8qKgoJICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIGludGVnZXIgbGluZSBudW1iZXJzIHN0YXJ0aW5nIGZyb20gdGhlICdmaXJzdC1saW5lJyBwYXJhbS4KCSAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFycmF5IG9mIGludGVnZXJzLgoJICovCglmaWd1cmVPdXRMaW5lTnVtYmVyczogZnVuY3Rpb24oY29kZSkKCXsKCQl2YXIgbGluZXMgPSBbXSwKCQkJZmlyc3RMaW5lID0gcGFyc2VJbnQodGhpcy5nZXRQYXJhbSgnZmlyc3QtbGluZScpKQoJCQk7CgkJCgkJZWFjaExpbmUoY29kZSwgZnVuY3Rpb24obGluZSwgaW5kZXgpCgkJewoJCQlsaW5lcy5wdXNoKGluZGV4ICsgZmlyc3RMaW5lKTsKCQl9KTsKCQkKCQlyZXR1cm4gbGluZXM7Cgl9LAoJCgkvKioKCSAqIERldGVybWluZXMgaWYgc3BlY2lmaWVkIGxpbmUgbnVtYmVyIGlzIGluIHRoZSBoaWdobGlnaHRlZCBsaXN0LgoJICovCglpc0xpbmVIaWdobGlnaHRlZDogZnVuY3Rpb24obGluZU51bWJlcikKCXsKCQl2YXIgbGlzdCA9IHRoaXMuZ2V0UGFyYW0oJ2hpZ2hsaWdodCcsIFtdKTsKCQkKCQlpZiAodHlwZW9mKGxpc3QpICE9ICdvYmplY3QnICYmIGxpc3QucHVzaCA9PSBudWxsKSAKCQkJbGlzdCA9IFsgbGlzdCBdOwoJCQoJCXJldHVybiBpbmRleE9mKGxpc3QsIGxpbmVOdW1iZXIudG9TdHJpbmcoKSkgIT0gLTE7Cgl9LAoJCgkvKioKCSAqIEdlbmVyYXRlcyBIVE1MIG1hcmt1cCBmb3IgYSBzaW5nbGUgbGluZSBvZiBjb2RlIHdoaWxlIGRldGVybWluaW5nIGFsdGVybmF0aW5nIGxpbmUgc3R5bGUuCgkgKiBAcGFyYW0ge0ludGVnZXJ9IGxpbmVOdW1iZXIJTGluZSBudW1iZXIuCgkgKiBAcGFyYW0ge1N0cmluZ30gY29kZSBMaW5lCUhUTUwgbWFya3VwLgoJICogQHJldHVybiB7U3RyaW5nfQkJCQlSZXR1cm5zIEhUTUwgbWFya3VwLgoJICovCglnZXRMaW5lSHRtbDogZnVuY3Rpb24obGluZUluZGV4LCBsaW5lTnVtYmVyLCBjb2RlKQoJewoJCXZhciBjbGFzc2VzID0gWwoJCQknbGluZScsCgkJCSdudW1iZXInICsgbGluZU51bWJlciwKCQkJJ2luZGV4JyArIGxpbmVJbmRleCwKCQkJJ2FsdCcgKyAobGluZU51bWJlciAlIDIgPT0gMCA/IDEgOiAyKS50b1N0cmluZygpCgkJXTsKCQkKCQlpZiAodGhpcy5pc0xpbmVIaWdobGlnaHRlZChsaW5lTnVtYmVyKSkKCQkgCWNsYXNzZXMucHVzaCgnaGlnaGxpZ2h0ZWQnKTsKCQkKCQlpZiAobGluZU51bWJlciA9PSAwKQoJCQljbGFzc2VzLnB1c2goJ2JyZWFrJyk7CgkJCQoJCXJldHVybiAnPGRpdiBjbGFzcz0iJyArIGNsYXNzZXMuam9pbignICcpICsgJyI%2BJyArIGNvZGUgKyAnPC9kaXY%2BJzsKCX0sCgkKCS8qKgoJICogR2VuZXJhdGVzIEhUTUwgbWFya3VwIGZvciBsaW5lIG51bWJlciBjb2x1bW4uCgkgKiBAcGFyYW0ge1N0cmluZ30gY29kZQkJCUNvbXBsZXRlIGNvZGUgSFRNTCBtYXJrdXAuCgkgKiBAcGFyYW0ge0FycmF5fSBsaW5lTnVtYmVycwlDYWxjdWxhdGVkIGxpbmUgbnVtYmVycy4KCSAqIEByZXR1cm4ge1N0cmluZ30JCQkJUmV0dXJucyBIVE1MIG1hcmt1cC4KCSAqLwoJZ2V0TGluZU51bWJlcnNIdG1sOiBmdW5jdGlvbihjb2RlLCBsaW5lTnVtYmVycykKCXsKCQl2YXIgaHRtbCA9ICcnLAoJCQljb3VudCA9IHNwbGl0TGluZXMoY29kZSkubGVuZ3RoLAoJCQlmaXJzdExpbmUgPSBwYXJzZUludCh0aGlzLmdldFBhcmFtKCdmaXJzdC1saW5lJykpLAoJCQlwYWQgPSB0aGlzLmdldFBhcmFtKCdwYWQtbGluZS1udW1iZXJzJykKCQkJOwoJCQoJCWlmIChwYWQgPT0gdHJ1ZSkKCQkJcGFkID0gKGZpcnN0TGluZSArIGNvdW50IC0gMSkudG9TdHJpbmcoKS5sZW5ndGg7CgkJZWxzZSBpZiAoaXNOYU4ocGFkKSA9PSB0cnVlKQoJCQlwYWQgPSAwOwoJCQkKCQlmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspCgkJewoJCQl2YXIgbGluZU51bWJlciA9IGxpbmVOdW1iZXJzID8gbGluZU51bWJlcnNbaV0gOiBmaXJzdExpbmUgKyBpLAoJCQkJY29kZSA9IGxpbmVOdW1iZXIgPT0gMCA/IHNoLmNvbmZpZy5zcGFjZSA6IHBhZE51bWJlcihsaW5lTnVtYmVyLCBwYWQpCgkJCQk7CgkJCQkKCQkJaHRtbCArPSB0aGlzLmdldExpbmVIdG1sKGksIGxpbmVOdW1iZXIsIGNvZGUpOwoJCX0KCQkKCQlyZXR1cm4gaHRtbDsKCX0sCgkKCS8qKgoJICogU3BsaXRzIGJsb2NrIG9mIHRleHQgaW50byBpbmRpdmlkdWFsIERJViBsaW5lcy4KCSAqIEBwYXJhbSB7U3RyaW5nfSBjb2RlCQkJQ29kZSB0byBoaWdobGlnaHQuCgkgKiBAcGFyYW0ge0FycmF5fSBsaW5lTnVtYmVycwlDYWxjdWxhdGVkIGxpbmUgbnVtYmVycy4KCSAqIEByZXR1cm4ge1N0cmluZ30JCQkJUmV0dXJucyBoaWdobGlnaHRlZCBjb2RlIGluIEhUTUwgZm9ybS4KCSAqLwoJZ2V0Q29kZUxpbmVzSHRtbDogZnVuY3Rpb24oaHRtbCwgbGluZU51bWJlcnMpCgl7CgkJaHRtbCA9IHRyaW0oaHRtbCk7CgkJCgkJdmFyIGxpbmVzID0gc3BsaXRMaW5lcyhodG1sKSwKCQkJcGFkTGVuZ3RoID0gdGhpcy5nZXRQYXJhbSgncGFkLWxpbmUtbnVtYmVycycpLAoJCQlmaXJzdExpbmUgPSBwYXJzZUludCh0aGlzLmdldFBhcmFtKCdmaXJzdC1saW5lJykpLAoJCQlodG1sID0gJycsCgkJCWJydXNoTmFtZSA9IHRoaXMuZ2V0UGFyYW0oJ2JydXNoJykKCQkJOwoKCQlmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKQoJCXsKCQkJdmFyIGxpbmUgPSBsaW5lc1tpXSwKCQkJCWluZGVudCA9IC9eKCZuYnNwO3xccykrLy5leGVjKGxpbmUpLAoJCQkJc3BhY2VzID0gbnVsbCwKCQkJCWxpbmVOdW1iZXIgPSBsaW5lTnVtYmVycyA/IGxpbmVOdW1iZXJzW2ldIDogZmlyc3RMaW5lICsgaTsKCQkJCTsKCgkJCWlmIChpbmRlbnQgIT0gbnVsbCkKCQkJewoJCQkJc3BhY2VzID0gaW5kZW50WzBdLnRvU3RyaW5nKCk7CgkJCQlsaW5lID0gbGluZS5zdWJzdHIoc3BhY2VzLmxlbmd0aCk7CgkJCQlzcGFjZXMgPSBzcGFjZXMucmVwbGFjZSgnICcsIHNoLmNvbmZpZy5zcGFjZSk7CgkJCX0KCgkJCWxpbmUgPSB0cmltKGxpbmUpOwoJCQkKCQkJaWYgKGxpbmUubGVuZ3RoID09IDApCgkJCQlsaW5lID0gc2guY29uZmlnLnNwYWNlOwoJCQkKCQkJaHRtbCArPSB0aGlzLmdldExpbmVIdG1sKAoJCQkJaSwKCQkJCWxpbmVOdW1iZXIsIAoJCQkJKHNwYWNlcyAhPSBudWxsID8gJzxjb2RlIGNsYXNzPSInICsgYnJ1c2hOYW1lICsgJyBzcGFjZXMiPicgKyBzcGFjZXMgKyAnPC9jb2RlPicgOiAnJykgKyBsaW5lCgkJCSk7CgkJfQoJCQoJCXJldHVybiBodG1sOwoJfSwKCQoJLyoqCgkgKiBSZXR1cm5zIEhUTUwgZm9yIHRoZSB0YWJsZSB0aXRsZSBvciBlbXB0eSBzdHJpbmcgaWYgdGl0bGUgaXMgbnVsbC4KCSAqLwoJZ2V0VGl0bGVIdG1sOiBmdW5jdGlvbih0aXRsZSkKCXsKCQlyZXR1cm4gdGl0bGUgPyAnPGNhcHRpb24%2BJyArIHRpdGxlICsgJzwvY2FwdGlvbj4nIDogJyc7Cgl9LAoJCgkvKioKCSAqIEZpbmRzIGFsbCBtYXRjaGVzIGluIHRoZSBzb3VyY2UgY29kZS4KCSAqIEBwYXJhbSB7U3RyaW5nfSBjb2RlCQlTb3VyY2UgY29kZSB0byBwcm9jZXNzIG1hdGNoZXMgaW4uCgkgKiBAcGFyYW0ge0FycmF5fSBtYXRjaGVzCURpc2NvdmVyZWQgcmVnZXggbWF0Y2hlcy4KCSAqIEByZXR1cm4ge1N0cmluZ30gUmV0dXJucyBmb3JtYXR0ZWQgSFRNTCB3aXRoIHByb2Nlc3NlZCBtYXRoZXMuCgkgKi8KCWdldE1hdGNoZXNIdG1sOiBmdW5jdGlvbihjb2RlLCBtYXRjaGVzKQoJewoJCXZhciBwb3MgPSAwLCAKCQkJcmVzdWx0ID0gJycsCgkJCWJydXNoTmFtZSA9IHRoaXMuZ2V0UGFyYW0oJ2JydXNoJywgJycpCgkJCTsKCQkKCQlmdW5jdGlvbiBnZXRCcnVzaE5hbWVDc3MobWF0Y2gpCgkJewoJCQl2YXIgcmVzdWx0ID0gbWF0Y2ggPyAobWF0Y2guYnJ1c2hOYW1lIHx8IGJydXNoTmFtZSkgOiBicnVzaE5hbWU7CgkJCXJldHVybiByZXN1bHQgPyByZXN1bHQgKyAnICcgOiAnJzsKCQl9OwoJCQoJCS8vIEZpbmFsbHksIGdvIHRocm91Z2ggdGhlIGZpbmFsIGxpc3Qgb2YgbWF0Y2hlcyBhbmQgcHVsbCB0aGUgYWxsCgkJLy8gdG9nZXRoZXIgYWRkaW5nIGV2ZXJ5dGhpbmcgaW4gYmV0d2VlbiB0aGF0IGlzbid0IGEgbWF0Y2guCgkJZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGVzLmxlbmd0aDsgaSsrKSAKCQl7CgkJCXZhciBtYXRjaCA9IG1hdGNoZXNbaV0sCgkJCQltYXRjaEJydXNoTmFtZQoJCQkJOwoJCQkKCQkJaWYgKG1hdGNoID09PSBudWxsIHx8IG1hdGNoLmxlbmd0aCA9PT0gMCkgCgkJCQljb250aW51ZTsKCQkJCgkJCW1hdGNoQnJ1c2hOYW1lID0gZ2V0QnJ1c2hOYW1lQ3NzKG1hdGNoKTsKCQkJCgkJCXJlc3VsdCArPSB3cmFwTGluZXNXaXRoQ29kZShjb2RlLnN1YnN0cihwb3MsIG1hdGNoLmluZGV4IC0gcG9zKSwgbWF0Y2hCcnVzaE5hbWUgKyAncGxhaW4nKQoJCQkJCSsgd3JhcExpbmVzV2l0aENvZGUobWF0Y2gudmFsdWUsIG1hdGNoQnJ1c2hOYW1lICsgbWF0Y2guY3NzKQoJCQkJCTsKCgkJCXBvcyA9IG1hdGNoLmluZGV4ICsgbWF0Y2gubGVuZ3RoICsgKG1hdGNoLm9mZnNldCB8fCAwKTsKCQl9CgoJCS8vIGRvbid0IGZvcmdldCB0byBhZGQgd2hhdGV2ZXIncyByZW1haW5pbmcgaW4gdGhlIHN0cmluZwoJCXJlc3VsdCArPSB3cmFwTGluZXNXaXRoQ29kZShjb2RlLnN1YnN0cihwb3MpLCBnZXRCcnVzaE5hbWVDc3MoKSArICdwbGFpbicpOwoKCQlyZXR1cm4gcmVzdWx0OwoJfSwKCQoJLyoqCgkgKiBHZW5lcmF0ZXMgSFRNTCBtYXJrdXAgZm9yIHRoZSB3aG9sZSBzeW50YXggaGlnaGxpZ2h0ZXIuCgkgKiBAcGFyYW0ge1N0cmluZ30gY29kZSBTb3VyY2UgY29kZS4KCSAqIEByZXR1cm4ge1N0cmluZ30gUmV0dXJucyBIVE1MIG1hcmt1cC4KCSAqLwoJZ2V0SHRtbDogZnVuY3Rpb24oY29kZSkKCXsKCQl2YXIgaHRtbCA9ICcnLAoJCQljbGFzc2VzID0gWyAnc3ludGF4aGlnaGxpZ2h0ZXInIF0sCgkJCXRhYlNpemUsCgkJCW1hdGNoZXMsCgkJCWxpbmVOdW1iZXJzCgkJCTsKCQkKCQkvLyBwcm9jZXNzIGxpZ2h0IG1vZGUKCQlpZiAodGhpcy5nZXRQYXJhbSgnbGlnaHQnKSA9PSB0cnVlKQoJCQl0aGlzLnBhcmFtcy50b29sYmFyID0gdGhpcy5wYXJhbXMuZ3V0dGVyID0gZmFsc2U7CgoJCWNsYXNzTmFtZSA9ICdzeW50YXhoaWdobGlnaHRlcic7CgoJCWlmICh0aGlzLmdldFBhcmFtKCdjb2xsYXBzZScpID09IHRydWUpCgkJCWNsYXNzZXMucHVzaCgnY29sbGFwc2VkJyk7CgkJCgkJaWYgKChndXR0ZXIgPSB0aGlzLmdldFBhcmFtKCdndXR0ZXInKSkgPT0gZmFsc2UpCgkJCWNsYXNzZXMucHVzaCgnbm9ndXR0ZXInKTsKCgkJLy8gYWRkIGN1c3RvbSB1c2VyIHN0eWxlIG5hbWUKCQljbGFzc2VzLnB1c2godGhpcy5nZXRQYXJhbSgnY2xhc3MtbmFtZScpKTsKCgkJLy8gYWRkIGJydXNoIGFsaWFzIHRvIHRoZSBjbGFzcyBuYW1lIGZvciBjdXN0b20gQ1NTCgkJY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0UGFyYW0oJ2JydXNoJykpOwoKCQljb2RlID0gdHJpbUZpcnN0QW5kTGFzdExpbmVzKGNvZGUpCgkJCS5yZXBsYWNlKC9cci9nLCAnICcpIC8vIElFIGxldHMgdGhlc2UgYnVnZ2VycyB0aHJvdWdoCgkJCTsKCgkJdGFiU2l6ZSA9IHRoaXMuZ2V0UGFyYW0oJ3RhYi1zaXplJyk7CgoJCS8vIHJlcGxhY2UgdGFicyB3aXRoIHNwYWNlcwoJCWNvZGUgPSB0aGlzLmdldFBhcmFtKCdzbWFydC10YWJzJykgPT0gdHJ1ZQoJCQk/IHByb2Nlc3NTbWFydFRhYnMoY29kZSwgdGFiU2l6ZSkKCQkJOiBwcm9jZXNzVGFicyhjb2RlLCB0YWJTaXplKQoJCQk7CgoJCS8vIHVuaW5kZW50IGNvZGUgYnkgdGhlIGNvbW1vbiBpbmRlbnRhdGlvbgoJCWlmICh0aGlzLmdldFBhcmFtKCd1bmluZGVudCcpKQoJCQljb2RlID0gdW5pbmRlbnQoY29kZSk7CgoJCWlmIChndXR0ZXIpCgkJCWxpbmVOdW1iZXJzID0gdGhpcy5maWd1cmVPdXRMaW5lTnVtYmVycyhjb2RlKTsKCQkKCQkvLyBmaW5kIG1hdGNoZXMgaW4gdGhlIGNvZGUgdXNpbmcgYnJ1c2hlcyByZWdleCBsaXN0CgkJbWF0Y2hlcyA9IHRoaXMuZmluZE1hdGNoZXModGhpcy5yZWdleExpc3QsIGNvZGUpOwoJCS8vIHByb2Nlc3NlcyBmb3VuZCBtYXRjaGVzIGludG8gdGhlIGh0bWwKCQlodG1sID0gdGhpcy5nZXRNYXRjaGVzSHRtbChjb2RlLCBtYXRjaGVzKTsKCQkvLyBmaW5hbGx5LCBzcGxpdCBhbGwgbGluZXMgc28gdGhhdCB0aGV5IHdyYXAgd2VsbAoJCWh0bWwgPSB0aGlzLmdldENvZGVMaW5lc0h0bWwoaHRtbCwgbGluZU51bWJlcnMpOwoKCQkvLyBmaW5hbGx5LCBwcm9jZXNzIHRoZSBsaW5rcwoJCWlmICh0aGlzLmdldFBhcmFtKCdhdXRvLWxpbmtzJykpCgkJCWh0bWwgPSBwcm9jZXNzVXJscyhodG1sKTsKCQkKCQlpZiAodHlwZW9mKG5hdmlnYXRvcikgIT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9NU0lFLykpCgkJCWNsYXNzZXMucHVzaCgnaWUnKTsKCQkKCQlodG1sID0gCgkJCSc8ZGl2IGlkPSInICsgZ2V0SGlnaGxpZ2h0ZXJJZCh0aGlzLmlkKSArICciIGNsYXNzPSInICsgY2xhc3Nlcy5qb2luKCcgJykgKyAnIj4nCgkJCQkrICh0aGlzLmdldFBhcmFtKCd0b29sYmFyJykgPyBzaC50b29sYmFyLmdldEh0bWwodGhpcykgOiAnJykKCQkJCSsgJzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI%2BJwoJCQkJCSsgdGhpcy5nZXRUaXRsZUh0bWwodGhpcy5nZXRQYXJhbSgndGl0bGUnKSkKCQkJCQkrICc8dGJvZHk%2BJwoJCQkJCQkrICc8dHI%2BJwoJCQkJCQkJKyAoZ3V0dGVyID8gJzx0ZCBjbGFzcz0iZ3V0dGVyIj4nICsgdGhpcy5nZXRMaW5lTnVtYmVyc0h0bWwoY29kZSkgKyAnPC90ZD4nIDogJycpCgkJCQkJCQkrICc8dGQgY2xhc3M9ImNvZGUiPicKCQkJCQkJCQkrICc8ZGl2IGNsYXNzPSJjb250YWluZXIiPicKCQkJCQkJCQkJKyBodG1sCgkJCQkJCQkJKyAnPC9kaXY%2BJwoJCQkJCQkJKyAnPC90ZD4nCgkJCQkJCSsgJzwvdHI%2BJwoJCQkJCSsgJzwvdGJvZHk%2BJwoJCQkJKyAnPC90YWJsZT4nCgkJCSsgJzwvZGl2PicKCQkJOwoJCQkKCQlyZXR1cm4gaHRtbDsKCX0sCgkKCS8qKgoJICogSGlnaGxpZ2h0cyB0aGUgY29kZSBhbmQgcmV0dXJucyBjb21wbGV0ZSBIVE1MLgoJICogQHBhcmFtIHtTdHJpbmd9IGNvZGUgICAgIENvZGUgdG8gaGlnaGxpZ2h0LgoJICogQHJldHVybiB7RWxlbWVudH0gICAgICAgIFJldHVybnMgY29udGFpbmVyIERJViBlbGVtZW50IHdpdGggYWxsIG1hcmt1cC4KCSAqLwoJZ2V0RGl2OiBmdW5jdGlvbihjb2RlKQoJewoJCWlmIChjb2RlID09PSBudWxsKSAKCQkJY29kZSA9ICcnOwoJCQoJCXRoaXMuY29kZSA9IGNvZGU7CgoJCXZhciBkaXYgPSB0aGlzLmNyZWF0ZSgnZGl2Jyk7CgoJCS8vIGNyZWF0ZSBtYWluIEhUTUwKCQlkaXYuaW5uZXJIVE1MID0gdGhpcy5nZXRIdG1sKGNvZGUpOwoJCQoJCS8vIHNldCB1cCBjbGljayBoYW5kbGVycwoJCWlmICh0aGlzLmdldFBhcmFtKCd0b29sYmFyJykpCgkJCWF0dGFjaEV2ZW50KGZpbmRFbGVtZW50KGRpdiwgJy50b29sYmFyJyksICdjbGljaycsIHNoLnRvb2xiYXIuaGFuZGxlcik7CgkJCgkJaWYgKHRoaXMuZ2V0UGFyYW0oJ3F1aWNrLWNvZGUnKSkKCQkJYXR0YWNoRXZlbnQoZmluZEVsZW1lbnQoZGl2LCAnLmNvZGUnKSwgJ2RibGNsaWNrJywgcXVpY2tDb2RlSGFuZGxlcik7CgkJCgkJcmV0dXJuIGRpdjsKCX0sCgkKCS8qKgoJICogSW5pdGlhbGl6ZXMgdGhlIGhpZ2hsaWdodGVyL2JydXNoLgoJICoKCSAqIENvbnN0cnVjdG9yIGlzbid0IHVzZWQgZm9yIGluaXRpYWxpemF0aW9uIHNvIHRoYXQgbm90aGluZyBleGVjdXRlcyBkdXJpbmcgbmVjZXNzYXJ5CgkgKiBgbmV3IFN5bnRheEhpZ2hsaWdodGVyLkhpZ2hsaWdodGVyKClgIGNhbGwgd2hlbiBzZXR0aW5nIHVwIGJydXNoIGluaGVyaXRhbmNlLgoJICoKCSAqIEBwYXJhbSB7SGFzaH0gcGFyYW1zIEhpZ2hsaWdodGVyIHBhcmFtZXRlcnMuCgkgKi8KCWluaXQ6IGZ1bmN0aW9uKHBhcmFtcykKCXsKCQl0aGlzLmlkID0gZ3VpZCgpOwoJCQoJCS8vIHJlZ2lzdGVyIHRoaXMgaW5zdGFuY2UgaW4gdGhlIGhpZ2hsaWdodGVycyBsaXN0CgkJc3RvcmVIaWdobGlnaHRlcih0aGlzKTsKCQkKCQkvLyBsb2NhbCBwYXJhbXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgZGVmYXVsdHMKCQl0aGlzLnBhcmFtcyA9IG1lcmdlKHNoLmRlZmF1bHRzLCBwYXJhbXMgfHwge30pCgkJCgkJLy8gcHJvY2VzcyBsaWdodCBtb2RlCgkJaWYgKHRoaXMuZ2V0UGFyYW0oJ2xpZ2h0JykgPT0gdHJ1ZSkKCQkJdGhpcy5wYXJhbXMudG9vbGJhciA9IHRoaXMucGFyYW1zLmd1dHRlciA9IGZhbHNlOwoJfSwKCQoJLyoqCgkgKiBDb252ZXJ0cyBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBrZXl3b3JkcyBpbnRvIGEgcmVndWxhciBleHByZXNzaW9uIHN0cmluZy4KCSAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgICAgU3BhY2Ugc2VwYXJhdGVkIGtleXdvcmRzLgoJICogQHJldHVybiB7U3RyaW5nfSAgICAgICBSZXR1cm5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcuCgkgKi8KCWdldEtleXdvcmRzOiBmdW5jdGlvbihzdHIpCgl7CgkJc3RyID0gc3RyCgkJCS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpCgkJCS5yZXBsYWNlKC9ccysvZywgJ3wnKQoJCQk7CgkJCgkJcmV0dXJuICdcXGIoPzonICsgc3RyICsgJylcXGInOwoJfSwKCQoJLyoqCgkgKiBNYWtlcyBhIGJydXNoIGNvbXBhdGlibGUgd2l0aCB0aGUgYGh0bWwtc2NyaXB0YCBmdW5jdGlvbmFsaXR5LgoJICogQHBhcmFtIHtPYmplY3R9IHJlZ2V4R3JvdXAgT2JqZWN0IGNvbnRhaW5pbmcgYGxlZnRgIGFuZCBgcmlnaHRgIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCgkgKi8KCWZvckh0bWxTY3JpcHQ6IGZ1bmN0aW9uKHJlZ2V4R3JvdXApCgl7CgkJdmFyIHJlZ2V4ID0geyAnZW5kJyA6IHJlZ2V4R3JvdXAucmlnaHQuc291cmNlIH07CgoJCWlmKHJlZ2V4R3JvdXAuZW9mKQoJCQlyZWdleC5lbmQgPSAiKD86KD86IiArIHJlZ2V4LmVuZCArICIpfCQpIjsKCQkKCQl0aGlzLmh0bWxTY3JpcHQgPSB7CgkJCWxlZnQgOiB7IHJlZ2V4OiByZWdleEdyb3VwLmxlZnQsIGNzczogJ3NjcmlwdCcgfSwKCQkJcmlnaHQgOiB7IHJlZ2V4OiByZWdleEdyb3VwLnJpZ2h0LCBjc3M6ICdzY3JpcHQnIH0sCgkJCWNvZGUgOiBuZXcgWFJlZ0V4cCgKCQkJCSIoPzxsZWZ0PiIgKyByZWdleEdyb3VwLmxlZnQuc291cmNlICsgIikiICsKCQkJCSIoPzxjb2RlPi4qPykiICsKCQkJCSIoPzxyaWdodD4iICsgcmVnZXguZW5kICsgIikiLAoJCQkJInNnaSIKCQkJCSkKCQl9OwoJfQp9OyAvLyBlbmQgb2YgSGlnaGxpZ2h0ZXIKCnJldHVybiBzaDsKfSgpOyAvLyBlbmQgb2YgYW5vbnltb3VzIGZ1bmN0aW9uCgovLyBDb21tb25KUwp0eXBlb2YoZXhwb3J0cykgIT0gJ3VuZGVmaW5lZCcgPyBleHBvcnRzLlN5bnRheEhpZ2hsaWdodGVyID0gU3ludGF4SGlnaGxpZ2h0ZXIgOiBudWxsOwo%3D"> /** * SyntaxHighlighter * http://alexgorbatchev.com/SyntaxHighlighter * * SyntaxHighlighter is donationware. If you are using it, please donate. * http://alexgorbatchev.com/SyntaxHighlighter/donate.html * * @version * 3.0.83 (July 02 2010) * * @copyright * Copyright (C) 2004-2010 Alex Gorbatchev. * * @license * Dual licensed under the MIT and GPL licenses. */ </script> <script type="text/javascript" src="data:application/javascript;base64,LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKgogKiBAY29weXJpZ2h0CiAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEFsZXggR29yYmF0Y2hldi4KICoKICogQGxpY2Vuc2UKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMuCiAqLwooZnVuY3Rpb24oKQp7CgkvLyBDb21tb25KUwoJdHlwZW9mKHJlcXVpcmUpICE9ICd1bmRlZmluZWQnID8gU3ludGF4SGlnaGxpZ2h0ZXIgPSByZXF1aXJlKCdzaENvcmUnKS5TeW50YXhIaWdobGlnaHRlciA6IG51bGw7CgoJZnVuY3Rpb24gQnJ1c2goKQoJewoJCS8vIENvbnRyaWJ1dGVkIGJ5IEdoZW9yZ2hlIE1pbGFzIGFuZCBBaG1hZCBTaGVyaWYKCgkJdmFyIGtleXdvcmRzID0gICdhbmQgYXNzZXJ0IGJyZWFrIGNsYXNzIGNvbnRpbnVlIGRlZiBkZWwgZWxpZiBlbHNlICcgKwoJCQkJCQknZXhjZXB0IGV4ZWMgZmluYWxseSBmb3IgZnJvbSBnbG9iYWwgaWYgaW1wb3J0IGluIGlzICcgKwoJCQkJCQknbGFtYmRhIG5vdCBvciBwYXNzIHByaW50IHJhaXNlIHJldHVybiB0cnkgeWllbGQgd2hpbGUnOwoKCQl2YXIgZnVuY3MgPSAnX19pbXBvcnRfXyBhYnMgYWxsIGFueSBhcHBseSBiYXNlc3RyaW5nIGJpbiBib29sIGJ1ZmZlciBjYWxsYWJsZSAnICsKCQkJCQknY2hyIGNsYXNzbWV0aG9kIGNtcCBjb2VyY2UgY29tcGlsZSBjb21wbGV4IGRlbGF0dHIgZGljdCBkaXIgJyArCgkJCQkJJ2Rpdm1vZCBlbnVtZXJhdGUgZXZhbCBleGVjZmlsZSBmaWxlIGZpbHRlciBmbG9hdCBmb3JtYXQgZnJvemVuc2V0ICcgKwoJCQkJCSdnZXRhdHRyIGdsb2JhbHMgaGFzYXR0ciBoYXNoIGhlbHAgaGV4IGlkIGlucHV0IGludCBpbnRlcm4gJyArCgkJCQkJJ2lzaW5zdGFuY2UgaXNzdWJjbGFzcyBpdGVyIGxlbiBsaXN0IGxvY2FscyBsb25nIG1hcCBtYXggbWluIG5leHQgJyArCgkJCQkJJ29iamVjdCBvY3Qgb3BlbiBvcmQgcG93IHByaW50IHByb3BlcnR5IHJhbmdlIHJhd19pbnB1dCByZWR1Y2UgJyArCgkJCQkJJ3JlbG9hZCByZXByIHJldmVyc2VkIHJvdW5kIHNldCBzZXRhdHRyIHNsaWNlIHNvcnRlZCBzdGF0aWNtZXRob2QgJyArCgkJCQkJJ3N0ciBzdW0gc3VwZXIgdHVwbGUgdHlwZSB0eXBlIHVuaWNociB1bmljb2RlIHZhcnMgeHJhbmdlIHppcCc7CgoJCXZhciBzcGVjaWFsID0gICdOb25lIFRydWUgRmFsc2Ugc2VsZiBjbHMgY2xhc3NfJzsKCgkJdGhpcy5yZWdleExpc3QgPSBbCgkJCQl7IHJlZ2V4OiBTeW50YXhIaWdobGlnaHRlci5yZWdleExpYi5zaW5nbGVMaW5lUGVybENvbW1lbnRzLCBjc3M6ICdjb21tZW50cycgfSwKCQkJCXsgcmVnZXg6IC9eXHMqQFx3Ky9nbSwgCQkJCQkJCQkJCWNzczogJ2RlY29yYXRvcicgfSwKCQkJCXsgcmVnZXg6IC8oWydcIl17M30pKFteXDFdKSo/XDEvZ20sIAkJCQkJCWNzczogJ2NvbW1lbnRzJyB9LAoJCQkJeyByZWdleDogLyIoPyEiKSg/OlwufFxcXCJ8W15cIiJcbl0pKiIvZ20sIAkJCQkJY3NzOiAnc3RyaW5nJyB9LAoJCQkJeyByZWdleDogLycoPyEnKSg/OlwufChcXFwnKXxbXlwnJ1xuXSkqJy9nbSwgCQkJCWNzczogJ3N0cmluZycgfSwKCQkJCXsgcmVnZXg6IC9cK3xcLXxcKnxcL3xcJXw9fD09L2dtLCAJCQkJCQkJY3NzOiAna2V5d29yZCcgfSwKCQkJCXsgcmVnZXg6IC9cYlxkK1wuP1x3Ki9nLCAJCQkJCQkJCQljc3M6ICd2YWx1ZScgfSwKCQkJCXsgcmVnZXg6IG5ldyBSZWdFeHAodGhpcy5nZXRLZXl3b3JkcyhmdW5jcyksICdnbWknKSwJCWNzczogJ2Z1bmN0aW9ucycgfSwKCQkJCXsgcmVnZXg6IG5ldyBSZWdFeHAodGhpcy5nZXRLZXl3b3JkcyhrZXl3b3JkcyksICdnbScpLCAJCWNzczogJ2tleXdvcmQnIH0sCgkJCQl7IHJlZ2V4OiBuZXcgUmVnRXhwKHRoaXMuZ2V0S2V5d29yZHMoc3BlY2lhbCksICdnbScpLCAJCWNzczogJ2NvbG9yMScgfQoJCQkJXTsKCgkJdGhpcy5mb3JIdG1sU2NyaXB0KFN5bnRheEhpZ2hsaWdodGVyLnJlZ2V4TGliLmFzcFNjcmlwdFRhZ3MpOwoJfTsKCglCcnVzaC5wcm90b3R5cGUJPSBuZXcgU3ludGF4SGlnaGxpZ2h0ZXIuSGlnaGxpZ2h0ZXIoKTsKCUJydXNoLmFsaWFzZXMJPSBbJ3B5JywgJ3B5dGhvbiddOwoKCVN5bnRheEhpZ2hsaWdodGVyLmJydXNoZXMuUHl0aG9uID0gQnJ1c2g7CgoJLy8gQ29tbW9uSlMKCXR5cGVvZihleHBvcnRzKSAhPSAndW5kZWZpbmVkJyA/IGV4cG9ydHMuQnJ1c2ggPSBCcnVzaCA6IG51bGw7Cn0pKCk7Cg%3D%3D"> /** * SyntaxHighlighter * http://alexgorbatchev.com/SyntaxHighlighter * * SyntaxHighlighter is donationware. If you are using it, please donate. * http://alexgorbatchev.com/SyntaxHighlighter/donate.html * * @version * 3.0.83 (July 02 2010) * * @copyright * Copyright (C) 2004-2010 Alex Gorbatchev. * * @license * Dual licensed under the MIT and GPL licenses. */ </script> <style type="text/css"> body { color: #000; background: #FFF; font-family: 'Helvetica Neue', 'Helvetica', 'Verdana', sans-serif; font-size: 12px; padding: 0; margin: 0; } a { color: #FAFF78; } h1, h2, h3, h4, h5, h6 { font-family: 'Helvetica', sans-serif; } h1 { margin: 0; padding: .75em 1.5em 1em 1.5em; color: #F90; font-size: 14px; font-weight: bold; } h1 img { padding-right: 5px; } h2 { color: #311F00; } header { width: 100%; background: #311F00; } div#error-content { padding: 0 2em; } .syntaxhighlighter a, .syntaxhighlighter div, .syntaxhighlighter code, .syntaxhighlighter table, .syntaxhighlighter table td, .syntaxhighlighter table tr, .syntaxhighlighter table tbody, .syntaxhighlighter table thead, .syntaxhighlighter table caption, .syntaxhighlighter textarea { font-family: monospace !important; } .syntaxhighlighter .container { background: #FDF6E3 !important; padding: 1em !important; } .syntaxhighlighter .container .line { background: #FDF6E3 !important; } .syntaxhighlighter .container .line .python.string { color: #C70 !important; } #debug { background: #FDF6E3; padding: 10px !important; margin-top: 10px; font-family: monospace; } </style> <script type="text/javascript"> SyntaxHighlighter.defaults['gutter'] = false; SyntaxHighlighter.defaults['toolbar'] = false; SyntaxHighlighter.all() </script> <script type="text/javascript"> function get_request() { /* ajax sans jquery makes me sad */ var request = false; // Mozilla/Safari if (window.XMLHttpRequest) { request = new XMLHttpRequest(); } // IE else if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); } return request; } function debug_request(btn) { btn.disabled = true; request = get_request(); request.open('GET', '/__pecan_initiate_pdb__', true); request.onreadystatechange = function() { if (request.readyState == 4) { btn.disabled = false; } } request.send(''); /* automatically timeout after 5 minutes, re-enabling the button */ setTimeout(function() { request.abort(); }, 5 * 60 * 1000); } </script> </head> <body> <header> <h1> <img style="padding-top: 7px" align="center" alt="pecan logo" height="25" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAmCAYAAAAP4F9VAAAD8GlDQ1BJQ0MgUHJvZmlsZQAAKJGNVd1v21QUP4lvXKQWP6Cxjg4Vi69VU1u5GxqtxgZJk6XpQhq5zdgqpMl1bhpT1za2021Vn/YCbwz4A4CyBx6QeEIaDMT2su0BtElTQRXVJKQ9dNpAaJP2gqpwrq9Tu13GuJGvfznndz7v0TVAx1ea45hJGWDe8l01n5GPn5iWO1YhCc9BJ/RAp6Z7TrpcLgIuxoVH1sNfIcHeNwfa6/9zdVappwMknkJsVz19HvFpgJSpO64PIN5G%2BfAp30Hc8TziHS4miFhheJbjLMMzHB8POFPqKGKWi6TXtSriJcT9MzH5bAzzHIK1I08t6hq6zHpRdu2aYdJYuk9Q/881bzZa8Xrx6fLmJo/iu4/VXnfH1BB/rmu5ScQvI77m%2BBkmfxXxvcZcJY14L0DymZp7pML5yTcW61PvIN6JuGr4halQvmjNlCa4bXJ5zj6qhpxrujeKPYMXEd%2Bq00KR5yNAlWZzrF%2BIe%2BuNsdC/MO4tTOZafhbroyXuR3Df08bLiHsQf%2Bja6gTPWVimZl7l/oUrjl8OcxDWLbNU5D6JRL2gxkDu16fGuC054OMhclsyXTOOFEL%2BkmMGs4i5kfNuQ62EnBuam8tzP%2BQ%2BtSqhz9SuqpZlvR1EfBiOJTSgYMMM7jpYsAEyqJCHDL4dcFFTAwNMlFDUUpQYiadhDmXteeWAw3HEmA2s15k1RmnP4RHuhBybdBOF7MfnICmSQ2SYjIBM3iRvkcMki9IRcnDTthyLz2Ld2fTzPjTQK%2BMdg8y5nkZfFO%2Bse9LQr3/09xZr%2B5GcaSufeAfAww60mAPx%2Bq8u/bAr8rFCLrx7s%2BvqEkw8qb%2Bp26n11Aruq6m1iJH6PbWGv1VIY25mkNE8PkaQhxfLIF7DZXx80HD/A3l2jLclYs061xNpWCfoB6WHJTjbH0mV35Q/lRXlC%2BW8cndbl9t2SfhU%2BFb4UfhO%2BF74GWThknBZ%2BEm4InwjXIyd1ePnY/Psg3pb1TJNu15TMKWMtFt6ScpKL0ivSMXIn9QtDUlj0h7U7N48t3i8eC0GnMC91dX2sTivgloDTgUVeEGHLTizbf5Da9JLhkhh29QOs1luMcScmBXTIIt7xRFxSBxnuJWfuAd1I7jntkyd/pgKaIwVr3MgmDo2q8x6IdB5QH162mcX7ajtnHGN2bov71OU1%2BU0fqqoXLD0wX5ZM005UHmySz3qLtDqILDvIL%2BiH6jB9y2x83ok898GOPQX3lk3Itl0A%2BBrD6D7tUjWh3fis58BXDigN9yF8M5PJH4B8Gr79/F/XRm8m241mw/wvur4BGDj42bzn%2BVmc%2BNL9L8GcMn8F1kAcXjEKMJAAAAACXBIWXMAAAsTAAALEwEAmpwYAAANHElEQVR4nO2bf6xlVXXHP/uce2fmMc9xADsOCqJWO4WKEKIVSPmVkNRqFElFKP1h/9D6T1stCjFp/yJtbNqY2NBorBGhWqtN/BF/tGpURAutMkNkHEh0qiDOwFCZnw5v3r33nP3tH3uve9Y979z77jBgw%2BStZL9z7jlrr71%2B7b3XXuu8IIkOCPkqoATqLiQHZcaNq%2BB5KPI4q9EOGXc1vC6emLNfj8T7LP7n5dfTrEl6OV7wOp933E47BUkv9L%2BBJeBA/t0HRvn%2BAuA1wFkxxvUUHFStB8uyvAf434zTA6o5BPB4zwEuBM4DzgDWAUfquv5xWZbfBX58nLQDSVjDPbWiuqBH7xxgK7CQZfwp8APgfmCYcac58/j5oUOHNm/evPmVwLbM72KMUUVRHK7r%2BpGyLHcCOx0vgW7H2Zxlr2kmFMDjmfe2HFvqur60LMtfz30HwB7gXmBHxlmpI0mHJR2OMR6WdCjGeFDSRyStk4Sky2KM39Z0OFDX9T9KOjXj9/K1qwVJZb5/vqS/l/SzGbSXJX1R0oW5T5FpTKNfuvvzJH00Ku6bQV%2BSfiTpLyUtdNDwv7dIulXSo6vQk6T7JP2Ro1F00PuHhBr3K9ngUL7ulnSNw1%2BU9AFJB2aMd4%2BkV3Xxz4xOV0m6vvVsZC3GOJJU2YsY4x5Jv6npRg5O0Gujomc4KhlzKbdjeZwx1HX9Z45Ol5G9YH8rqW7RH%2BYxrE3Ql7RraWnprBYtu75Y0iNtejHGY7N4lvRvTma7Gs2PajocVtLhi5QMblBJGkZF0/8o86Is71VtXeCErSXVMUZTzNccw4NMvFJj5NoRHkhSjHE4GAxeqW4j26B/7hge5uaNMYaoWOX3Bu%2BcQruQxO7du9dL%2Buq4f%2BOEQ6cIe1c7mZbzs7vV4ZAxxs/nbkumpy5%2BMxhN4/tj6jbwB/P7J9Xo3ibMLyRdGWM04x7TpJ28/m1ySNLPJZ3ux/Mz2CvAC1BpCmQlGa4NslONAWym2e83NYPFqjXOLkl3SPpg1MSWYIYwuECTivKz%2BQsZZ5DlsWb8Ho6Ke5UU2JbbeLko0%2Brn63MkPex0UWdaI0lfkfQhpS3tP1s0o%2BGORqMrnR5KSdR1/UmtBOPlCUk78v2xDjwDr79Bvt7k%2BUdp/3nAdYhZgCOSjjgC%2B2OM35H0SaV90S9ZZgDz2pudQOa5myU9nt97DzxQVdV1WrnkviHGuOQEN9r/rm7neU9LUC/8Z5SWrzMkbZK0taqqP3b8DLPBJOn1mZ7FIKdK2uv4MHhtB8/XqFn1orv/uJpZVUiiqqqrJd0i6Z81HUzmo3Vd31HX9Z9IulbSjUqxg5fTxrpLTj/G2I2JoziKiibEPklXSLp0NBpdLGlrS5iNkt6hZjbY0qQ8uM0AU9RfOaa9oi5VMyPXuYakt0vjlcL6RKUAys%2ByLcpBSAtXkt6mlYawdotWwhtbfG%2BWojmzOc%2BjWX7D66txtA9lHB%2Bj/FDSenXHEIuSDmY875Rm3LuVYoA276dLeijj%2BNVwr6TnZpwCpeXiZseUYqOfV3cQLjUZFb5Cae23gazz5U6gvqQHHY552/s66LfbAx39/iK/s8jXZu/I4UrSu9XM8r6aGWTGuz7GuEtpeb1HKfq9RBK6c2ywUtI2Jaf6DUnn5/tT1B3svT6P7bevw5LO1ORebM55htOf4Rv/2x2eOVEvj42k90ppYqrR%2B5OSXmK89wCKopg4jIfmWHZKvq4nnYcjkwfwdcAu4O3A5/KzCujHGC8piuIuQKPR6MJ%2Bv3%2BO9ZMUQgiQzqFnA89dcX5LtJ4EHgXOxSUMYowXFkUBzfn1ja5fnc%2BPu4D3Wxcmz6LW71MhhE/RBVeM%2BamBH3biJCiBTbkdy7IY/zbmArCY7025tbv6c7AllwDeQdL7etK5tw07E8FQ5H52du4bQq%2BjkyEuA4/lZxUrD%2BsxDxqAzwPbgVdlhvtFUWwzxH6//wonTJmNK6HbAyEwO9tjwlpmiKIoXuDoPR8YO4/j89M2PE2y5qnCWMFHjx7dsri4%2BFukpM95wFnA6cApkvohhNL1y4KqCCEUc45Vk2T9BimBUdJtXEgJG4SKQPD2GetzqoEl7Q0h7MnPpqXwRJM9%2BRbJwAZb3f3Z7YGBEJhQxjTwq4bNznWtcU43mvk9dV3vKMuyPWYXhNbvNn4JDAbw0vVw0%2BLi4puB53USCuGppCWbgdPKZjS%2Bka%2Brp2ltSnbANAMD7Cd7yJxg6co8lBbcqBunsDSPV3ucfuqsDbaNVFQbe/S8eAGgLMuDc/I9yyim3OvXodsgLABIqkMII2BDC3%2BKmueDbFyT93/m4G9VWGFg2x9DCJtJAiyvQsMY2DL5O9g%2BR4xxkPdMex%2BAXwD/mumXzCdIBBYD4b8bAXrt5cvot53qeMHyz78PfCI71AgIIYRefn%2BMtD8/DPEAFEdIW8Z1JEPNmFtTIQDUdb2UV6ATgq4ZbJb4NVJwcx%2BTSe82M7Z8n9d6t39MsCj2Onw/e98LzDvT2mAGeAI4SgpiRBOknENa5uZVsK%2BI2cw9TehWZ9xepjcE/gb4OPBw6jd24F8Frn%2BKMjXMPA3GhY4lMgdAFUCM8d35se21E6g0StlAEszDj%2BymqiqrrpQ0kfZG4Ib8fGN%2B1%2Btotueuo4kQSxrH2gM85Pi022vzTTtKXSFyplnTGNf0cnUgnAqMhPqOzpuBW/K4tqzacn0R0ytIv3SYtgeWgIqiuAH4U5LwvoRly4/N6o00gY45wn/la9i3b992mrKfV/iNJOU%2BSRMlV66Zwoe51aSZZHVWm8UWkNizCOEy4A8yjT7N7LNW0BwnRsBlwG9nfJs%2B41UpECzQuRf4Io1D2qpkkbo5VmTSsYzmvNH0icB4rGmDecZuBT5AilZF4%2BmQ6pmbSMHY4/lZT9JjwN35d//MM888Bth5MwKlUA281D0fsDL4ijSKex9wuzHe4vcTNjaTe/lHgDeQnKOiWcJtKR7l%2Bz8E7pT0YZLRBwAxRh%2BtG9gzc1RbVWrgtcDVkqBRsgVPh/PPEz2yzQPNWDnjcVMrE6ScIfEpvyOSvlrX9W2SPi3pe0q13CdijN9TkzaTpL/Wylz0aS5j08443S/pdS5DY22rpLfGGO93tF/naPuiwx35/XLm3af9blcqImxyfV4g6bqOWrfxPs4UKacNY6OOt2plBuvyXFP3ciVWErxL0rnLy8vbWnxvUSouSJPZL8uJd5Vee5IYjUZXOL68rd6plHV7%2BUwDqyk%2BtJ93QMx/4x6lwoJPyxmTv5dxxkrIVSWDnyhVaD4r6TuS9rt3lgd%2BQI2hfI35eZIea%2BG2y3o/lXSvpO9rsoBuJThTkhXPL82yRavBOGE/LOm6LFNXbTc6WT18WZM6OXEDW31o5VifXc3AUpPItnql1YMrV1NdcviXT2HMPPZmhzuQFDPdFdy58a1ubHBDawy7nq/GcFbDnuWgnrYpdsfS0tILHd//kZ9b2W4an8bfbkk/yPfjmm2MsV0N6zKwLxqsamClYpCN4x3KHPxzXXtwBJB0H/AFmqAq5r3EghSFECwgWQCqmvoa4C66v5%2ByoOPvSLnrirSfWV66kjQknYutDUEW5dre%2BC6aNKQFPlUe8/7BYPAaUo7Wom6DUaLHILchaf812gVwG3DxwsLCXpoA7G2SHiFFyZZVGwkNHL3ljC/gd2miesvfy2WourJSFtOodT8NBDAcDn%2Bef9uxLuaUpQAkxa4ZbEvmd5WWv/fP8FqDr0k6Z4bHWfNL6jZJ/6LmQ4FZcEDSP0l6WYtWp2dv3769L%2Bk9Unx4DtqKMX5Tk/Xd9ic7Z6iZydPgQVklKpUch1Pw7tSknraqmXEertZ0fXrZPzaDp6%2BkojDcRJpZ/ij0AGBFgm0xxrcURXGRpC3ZG58gJUG%2BBFhm6al8VfkS4CrgYuDFkjZl%2BgdJZ%2Bl7gK8z%2BeXmrM9R/ZeRC8CVMcbLi6I4V%2BhXAqEPHIsx/qwoih2j0ejr/X7/%2B24mwOQZ1tO7DHgTcD6pajSMMT5UFMWXSatKTS5uLC8vn71hw4ZXA72aGmpUluU60tec36Y5Xm0AfifzauP0gW%2BSKmnTijH%2B%2BSXAi9y7mOn%2BZJaBd5KKBxWzlwsb7Hi/Xe78bjmEEJSZaoEdgeYZI2T8riNJl8Lan6h28Tpe%2BmbQMcf1Va1p/M2Tml0Nb1U6XalKDyaU4fmZM67c5OfH%2B2G64ZeO0doZ15zGskLzrAwGlniwrJTtbXYGpuPdLPp25vVO1qZjSRpokiVdGbQuJ%2B2ywzwfzfsacOf71QzcNZj/r4fjUfos2gbtwvfxOk0b2oX%2BMOPdauDlnYfO8fB%2BInqcaYd5Ddwm%2BEzBM0n76aT/TPP5tMEvIy%2B6Bv%2BPsGbgkxzWDHySw5qBT3JYM/BJDmsGPsnBDGxhvz/TPWuOAmswHewcbJkQ/wVDnzV41oPNYPv09Ajpc1ZIXyquwbMcrNiwCTiNZnkuSEZ/bEq/NXiWwP8BUFwRoWrkjx4AAAAASUVORK5CYII%3D" /> application error </h1> </header> <div id="error-content"> <p> <b>To disable this interface, set </b> <pre class="brush: python">conf.app.debug = False</pre> </p> <h2>Traceback</h2> <div id="traceback"> <pre class="brush: python">Traceback (most recent call last): File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/pecan/middleware/debug.py", line 289, in __call__ return self.app(environ, start_response) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/pecan/middleware/recursive.py", line 56, in __call__ return self.application(environ, start_response) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/pecan/core.py", line 768, in __call__ return super(Pecan, self).__call__(environ, start_response) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/pecan/core.py", line 660, in __call__ e File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/pecan/core.py", line 793, in handle_hooks return super(Pecan, self).handle_hooks(hooks, *args, **kw) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/pecan/core.py", line 320, in handle_hooks result = getattr(hook, hook_type)(*args) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/hooks.py", line 268, in on_error LOG.exception('API call failed: %s', error_msg, extra=extra) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 100, in func_wrapper return func(*args, **kwargs) File "/usr/lib/python2.7/logging/__init__.py", line 1185, in exception self.error(msg, *args, **kwargs) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 100, in func_wrapper return func(*args, **kwargs) File "/usr/lib/python2.7/logging/__init__.py", line 1178, in error self._log(ERROR, msg, args, **kwargs) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1270, in _log record = self.makeRecord(self.name, level, fn, lno, msg, args, exc_info, func, extra) File "/usr/lib/python2.7/logging/__init__.py", line 1244, in makeRecord rv = LogRecord(name, level, fn, lno, msg, args, exc_info, func) File "/usr/lib/python2.7/logging/__init__.py", line 266, in __init__ self.levelname = getLevelName(level) File "/usr/lib/python2.7/logging/__init__.py", line 167, in getLevelName return _levelNames.get(level, ("Level %s" % level)) RuntimeError: maximum recursion depth exceeded while getting the str of an object </pre> </div> <b>Want to debug this request?</b> <div id="debug"> You can <button onclick="debug_request(this)"> repeat this request </button> with a Python debugger breakpoint. </div> <h2>WSGI Environment</h2> <div id="environ"> <pre class="brush: python">{'CONTENT_LENGTH': '0', 'HTTP_ACCEPT': 'application/json, text/plain, */*', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate, br', 'HTTP_ACCEPT_LANGUAGE': 'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,uk;q=0.2', 'HTTP_AUTHORIZATION': 'Basic c3QyYWRtaW46c3QyYWRtaW4=', 'HTTP_COOKIE': '_reamaze_sc=1; _reamaze_uc=%7B%22fs%22%3A%222016-07-19T19%3A44%3A55.605Z%22%7D', 'HTTP_HOST': 'stackstorm.dev.confyrm.com,stackstorm.dev.confyrm.com', 'HTTP_ORIGIN': 'https://stackstorm.dev.confyrm.com', 'HTTP_REFERER': 'https://stackstorm.dev.confyrm.com/', 'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36', 'HTTP_X_FORWARDED_FOR': '10.144.101.18', 'HTTP_X_REAL_IP': '10.144.101.18', 'PATH_INFO': '/tokens', 'QUERY_STRING': '', 'RAW_URI': '/tokens', 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_PORT': '51490', 'REQUEST_METHOD': 'POST', 'SCRIPT_NAME': '', 'SERVER_NAME': '127.0.0.1', 'SERVER_PORT': '9100', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': 'gunicorn/19.6.0', 'gunicorn.socket': <eventlet.greenio.base.GreenSocket object at 0x7fc5d0d87110>, 'pecan.recursive.script_name': '', 'webob._body_file': (<_io.BufferedReader>, <gunicorn.http.body.Body object at 0x7fc5d07f3690>), 'webob._parsed_post_vars': (MultiDict([]), <_io.BytesIO object at 0x7fc5d0860650>), 'webob._parsed_query_vars': (GET([]), ''), 'webob.adhoc_attrs': {'context': {}, 'pecan': {'content_type': 'application/json', 'extension': None, 'routing_path': '/tokens'}}, 'webob.is_body_seekable': True, 'wsgi.errors': <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7fc5d07f3a50>, 'wsgi.file_wrapper': <class 'gunicorn.http.wsgi.FileWrapper'>, 'wsgi.input': <_io.BytesIO object at 0x7fc5d0860650>, 'wsgi.multiprocess': False, 'wsgi.multithread': True, 'wsgi.run_once': False, 'wsgi.url_scheme': 'http', 'wsgi.version': (1, 0)}</pre> </div> </div> </body> </html> | |
st2admin | |
•••••••• | |
CONNECT | |
remember | |
Documentation |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment