forked from Ecalose/my-qinglong-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path小阅阅.py
41 lines (40 loc) · 57.1 KB
/
小阅阅.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# -*- coding: utf-8 -*-
#!/usr/bin/env python3
"""
* 仅供学习交流,请在下载后的24小时内完全删除 请勿将任何内容用于商业或非法目的,否则后果自负。
* 小阅阅阅读 V1.80
* 活动入口,微信打开:
* 如果连接过期了运行一下就出来了最新的入口!
* http://ztyd.jigrefsf.shop/yunonline/v1/auth/2639bb95daba1d99e5338a8c2e21e2f0?codeurl=ztyd.jigrefsf.shop&codeuserid=2&time=1709021176
* 打开活动入口,抓包的任意接口cookies中的ysm_uid参数
*
* 变量格式:
* 新建同名环境变量
* 变量名:xyyyd
* 变量值:
* # 3000 代表 3毛,后面两个推送参数可不填,那就必须配置全局推送!
* 账号备注#ysm_uid参数#unionId#提现金额如3000#wxpushApptoken#wxpushTopicId
*
* 其他参数说明(脚本最下方填写参数)
* wxpusher全局参数:wxpusherAppToken、wxpusherTopicId
* 具体使用方法请看文档地址:https://wxpusher.zjiecode.com/docs/#/
*
* 也可使用 微信机器人:wechatBussinessKey
*
* 支持支付宝提现:账号备注#ysm_uid参数#unionId#提现金额如3000#wxpushApptoken#wxpushTopicId#支付宝姓名#支付宝账号
* 只想提现支付宝,不想填写其他参数,最少的参数就是:账号备注#ysm_uid参数#unionId####支付宝姓名#支付宝账号
*
* 增加 自定义检测文章等待时间:xyyydReadPostDelay,默认值是 15-20秒
* 增加 精简日志:xyyydReadPureLog,默认值是 true(也就是精简日志,如果需要显示完整的,请设置为 false)
*
* 定时运行每半小时一次
* 达到标准自动提现
* 达到标准,自动提现
"""
# This file requires Python 3.x and the following dependencies:
# - base64
try:
import base64
exec(base64.b64decode('IiIiCiog5LuF5L6b5a2m5Lmg5Lqk5rWB77yM6K+35Zyo5LiL6L295ZCO55qEMjTlsI/ml7blhoXlrozlhajliKDpmaQg6K+35Yu/5bCG5Lu75L2V5YaF5a6555So5LqO5ZWG5Lia5oiW6Z2e5rOV55uu55qE77yM5ZCm5YiZ5ZCO5p6c6Ieq6LSf44CCCiog5bCP6ZiF6ZiF6ZiF6K+7IFYxLjgwCgoqIOa0u+WKqOWFpeWPoyzlvq7kv6HmiZPlvIDvvJoKKiDlpoLmnpzov57mjqXov4fmnJ/kuobov5DooYzkuIDkuIvlsLHlh7rmnaXkuobmnIDmlrDnmoTlhaXlj6PvvIEKKiBodHRwOi8vMThobi5hN2M5OGsuc2hvcC95dW5vbmxpbmUvdjEvYXV0aC8yNjM5YmI5NWRhYmExZDk5ZTUzMzhhOGMyZTIxZTJmMD9jb2RldXJsPTE4aG4uYTdjOThrLnNob3AmY29kZXVzZXJpZD0yJnRpbWU9MTcwOTAyMTE3NgoqIOaJk+W8gOa0u+WKqOWFpeWPo++8jOaKk+WMheeahOS7u+aEj+aOpeWPo2Nvb2tpZXPkuK3nmoR5c21fdWlk5Y+C5pWwCiogCiog5Y+Y6YeP5qC85byP77yaCiog5paw5bu65ZCM5ZCN546v5aKD5Y+Y6YePCiog5Y+Y6YeP5ZCN77yaeHl5eWQKKiDlj5jph4/lgLzvvJoKKiAjIDMwMDAg5Luj6KGoIDPmr5vvvIzlkI7pnaLkuKTkuKrmjqjpgIHlj4LmlbDlj6/kuI3loavvvIzpgqPlsLHlv4XpobvphY3nva7lhajlsYDmjqjpgIHvvIEKKiDotKblj7flpIfms6gjeXNtX3VpZOWPguaVsCN1bmlvbklkI+aPkOeOsOmHkemineWmgjMwMDAjd3hwdXNoQXBwdG9rZW4jd3hwdXNoVG9waWNJZAoqIAoqIOWFtuS7luWPguaVsOivtOaYju+8iOiEmuacrOacgOS4i+aWueWhq+WGmeWPguaVsO+8iQoqIHd4cHVzaGVy5YWo5bGA5Y+C5pWw77yad3hwdXNoZXJBcHBUb2tlbuOAgXd4cHVzaGVyVG9waWNJZAoqIOWFt+S9k+S9v+eUqOaWueazleivt+eci+aWh+aho+WcsOWdgO+8mmh0dHBzOi8vd3hwdXNoZXIuemppZWNvZGUuY29tL2RvY3MvIy8KKiAKKiDkuZ/lj6/kvb/nlKgg5b6u5L+h5py65Zmo5Lq677yad2VjaGF0QnVzc2luZXNzS2V5CiogCiog5pSv5oyB5pSv5LuY5a6d5o+Q546w77ya6LSm5Y+35aSH5rOoI3lzbV91aWTlj4LmlbAjdW5pb25JZCPmj5DnjrDph5Hpop3lpoIzMDAwI3d4cHVzaEFwcHRva2VuI3d4cHVzaFRvcGljSWQj5pSv5LuY5a6d5aeT5ZCNI+aUr+S7mOWunei0puWPtwoqIOWPquaDs+aPkOeOsOaUr+S7mOWune+8jOS4jeaDs+Whq+WGmeWFtuS7luWPguaVsO+8jOacgOWwkeeahOWPguaVsOWwseaYr++8mui0puWPt+Wkh+azqCN5c21fdWlk5Y+C5pWwI3VuaW9uSWQjIyMj5pSv5LuY5a6d5aeT5ZCNI+aUr+S7mOWunei0puWPtwoqCiog5aKe5YqgIOiHquWumuS5ieajgOa1i+aWh+eroOetieW+heaXtumXtO+8mnh5eXlkUmVhZFBvc3REZWxhee+8jOm7mOiupOWAvOaYryAxNS0yMOenkgoqIOWinuWKoCDnsr7nroDml6Xlv5fvvJp4eXl5ZFJlYWRQdXJlTG9n77yM6buY6K6k5YC85pivIHRydWXvvIjkuZ/lsLHmmK/nsr7nroDml6Xlv5fvvIzlpoLmnpzpnIDopoHmmL7npLrlrozmlbTnmoTvvIzor7forr7nva7kuLogZmFsc2XvvIkKKiAKKiDlrprml7bov5DooYzmr4/ljYrlsI/ml7bkuIDmrKEKKiDovr7liLDmoIflh4boh6rliqjmj5DnjrAKKiDovr7liLDmoIflh4bvvIzoh6rliqjmj5DnjrAKIiIiCgpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQppbXBvcnQgaGFzaGxpYgppbXBvcnQganNvbgppbXBvcnQgbWF0aAppbXBvcnQgb3MKaW1wb3J0IHN0cmluZwppbXBvcnQgc3lzCmltcG9ydCB0aW1lCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgcmFuZG9tCmltcG9ydCByZQpmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgcXVvdGUsIHVybHBhcnNlLCBwYXJzZV9xcwppbXBvcnQgdXJsbGliMwpmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgcGFyc2VfcXMsIHVybHNwbGl0Cgp1cmxsaWIzLmRpc2FibGVfd2FybmluZ3MoKQoKIyDloat3eHB1c2hlcueahGFwcFRva2Vu77yM6YWN572u5Zyo546v5aKD5Y+Y6YeP6YeM6L+Z5qC35rKh6YWN572u55qE6LSm5Y+35Lya6Ieq5Yqo5L2/55So6L+Z5Liq5o6o6YCBCnd4cHVzaGVyQXBwVG9rZW4gPSBvcy5nZXRlbnYoInd4cHVzaGVyQXBwVG9rZW4iKSBvciAiIgp3eHB1c2hlclRvcGljSWQgPSBvcy5nZXRlbnYoInd4cHVzaGVyVG9waWNJZCIpIG9yICIiCndlY2hhdEJ1c3NpbmVzc0tleSA9IG9zLmdldGVudigid2VjaGF0QnVzc2luZXNzS2V5Iikgb3IgIiIKcmVhZFBvc3REZWxheSA9IDAKaWYgb3MuZ2V0ZW52KCJ4eXl5ZFJlYWRQb3N0RGVsYXkiKSBhbmQgb3MuZ2V0ZW52KCJ4eXl5ZFJlYWRQb3N0RGVsYXkiKS5pc2RlY2ltYWwoKToKICAgIHJlYWRQb3N0RGVsYXkgPSBpbnQob3MuZ2V0ZW52KCJ4eXl5ZFJlYWRQb3N0RGVsYXkiKSkKcmVhZFRpbWVSYW5nZVN0ciA9IG9zLmdldGVudigieHl5eWRSZWFkVGltZVJhbmdlIikgb3IgIlswLDIzXSIKaWYgcmVhZFRpbWVSYW5nZVN0cjoKICAgIHJlYWRUaW1lUmFuZ2UgPSBqc29uLmxvYWRzKHJlYWRUaW1lUmFuZ2VTdHIpCnh5eXlkUmVhZFB1cmVMb2cgPSBUcnVlCmlmIG9zLmdldGVudigieHl5eWRSZWFkUHVyZUxvZyIpOgogICAgeHl5eWRSZWFkUHVyZUxvZyA9IG9zLmdldGVudigieHl5eWRSZWFkUHVyZUxvZyIpID09ICJ0cnVlIgoKCmRlZiBjaGVja19maWxlX21kNSh1cmwsIGV4cGVjdGVkX21kNSk6CiAgICAjIOiOt+WPluaWh+S7tuWGheWuuQogICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQodXJsKQogICAgZGF0YSA9IHJlc3BvbnNlLmNvbnRlbnQKCiAgICAjIOiuoeeul01ENQogICAgbWQ1ID0gaGFzaGxpYi5tZDUoKQogICAgbWQ1LnVwZGF0ZShkYXRhKQogICAgY2FsY3VsYXRlZF9tZDUgPSBtZDUuaGV4ZGlnZXN0KCkKICAgICMgcHJpbnQoIuW9k+WJjeaWh+S7tueahE1ENeWAvOS4uu+8miIsIGNhbGN1bGF0ZWRfbWQ1KQogICAgIyDmr5TovoNNRDUKICAgIHJldHVybiBjYWxjdWxhdGVkX21kNSA9PSBleHBlY3RlZF9tZDUKCgpkZWYgZXh0cmFjdF9taWRkbGVfdGV4dChzb3VyY2UsIGJlZm9yZV90ZXh0LCBhZnRlcl90ZXh0LCBhbGxfbWF0Y2hlcz1GYWxzZSk6CiAgICByZXN1bHRzID0gW10KICAgIHN0YXJ0X2luZGV4ID0gc291cmNlLmZpbmQoYmVmb3JlX3RleHQpCgogICAgd2hpbGUgc3RhcnRfaW5kZXggIT0gLTE6CiAgICAgICAgc291cmNlX2FmdGVyX2JlZm9yZV90ZXh0ID0gc291cmNlW3N0YXJ0X2luZGV4ICsgbGVuKGJlZm9yZV90ZXh0KSA6XQogICAgICAgIGVuZF9pbmRleCA9IHNvdXJjZV9hZnRlcl9iZWZvcmVfdGV4dC5maW5kKGFmdGVyX3RleHQpCgogICAgICAgIGlmIGVuZF9pbmRleCA9PSAtMToKICAgICAgICAgICAgYnJlYWsKCiAgICAgICAgcmVzdWx0cy5hcHBlbmQoc291cmNlX2FmdGVyX2JlZm9yZV90ZXh0WzplbmRfaW5kZXhdKQogICAgICAgIGlmIG5vdCBhbGxfbWF0Y2hlczoKICAgICAgICAgICAgYnJlYWsKCiAgICAgICAgc291cmNlID0gc291cmNlX2FmdGVyX2JlZm9yZV90ZXh0W2VuZF9pbmRleCArIGxlbihhZnRlcl90ZXh0KSA6XQogICAgICAgIHN0YXJ0X2luZGV4ID0gc291cmNlLmZpbmQoYmVmb3JlX3RleHQpCgogICAgcmV0dXJuIHJlc3VsdHMgaWYgYWxsX21hdGNoZXMgZWxzZSByZXN1bHRzWzBdIGlmIHJlc3VsdHMgZWxzZSAiIgoKCmRlZiBzYWZlX3JlcXVlc3QobWV0aG9kLCB1cmwsIHJldHJpZXM9MywgKiprd2FyZ3MpOgogICAgZm9yIGkgaW4gcmFuZ2UocmV0cmllcyk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBtZXRob2QudXBwZXIoKSA9PSAiR0VUIjoKICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KHVybCwgKiprd2FyZ3MpCiAgICAgICAgICAgIGVsaWYgbWV0aG9kLnVwcGVyKCkgPT0gIlBPU1QiOgogICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0KHVybCwgKiprd2FyZ3MpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmludChmIuS4jeaUr+aMgeeahOivt+axguexu+Weizoge21ldGhvZH0iKQogICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCiAgICAgICAgZXhjZXB0IHJlcXVlc3RzLmV4Y2VwdGlvbnMuUmVxdWVzdEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwcmludChmIuivt+axguWksei0pToge2V9IikKICAgICAgICAgICAgaWYgaSA8IHJldHJpZXMgLSAxOiAgIyDlpoLmnpzkuI3mmK/mnIDlkI7kuIDmrKHlsJ3or5XvvIzlsLHnrYnlvoXkuIDmrrXml7bpl7Tlho3ph43or5UKICAgICAgICAgICAgICAgIHdhaXQgPSByYW5kb20ucmFuZGludCgxLCA1KSAgIyDpmo/mnLrnrYnlvoXml7bpl7QKICAgICAgICAgICAgICAgIHByaW50KGYi562J5b6FIHt3YWl0fSDnp5LlkI7ph43or5UuLi4iKQogICAgICAgICAgICAgICAgdGltZS5zbGVlcCh3YWl0KQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcHJpbnQoIuWwneivleivt+axguWksei0pe+8jOW3sui+vuWIsOacgOWkp+WwneivleasoeaVsCIpCiAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSAgIyDmiJbogIXkvaDlj6/ku6Xov5Tlm57kuIDkuKrnibnlrprnmoTlgLzmiJblr7nosaHmnaXooajnpLror7fmsYLlpLHotKUKCgpkZWYgcHVzaChhcHBUb2tlbiwgdG9waWNJZHMsIHRpdGxlLCBsaW5rLCB0ZXh0KToKICAgIGRhdGFwdXN0ID0gewogICAgICAgICJhcHBUb2tlbiI6IGFwcFRva2VuLAogICAgICAgICJjb250ZW50IjogZiIiIjxib2R5IG9ubG9hZD0id2luZG93LmxvY2F0aW9uLmhyZWY9J3tsaW5rfSciPuWHuueOsOajgOa1i+aWh+eroO+8ge+8ge+8gVxuPGEgc3R5bGU9J3BhZGRpbmc6MTBweDtjb2xvcjpyZWQ7Zm9udC1zaXplOjIwcHg7JyBocmVmPSd7bGlua30nPueCueWHu+aIkeaJk+W8gOW+heajgOa1i+aWh+eroDwvYT5cbuivt+WwveW/q+eCueWHu+mTvuaOpeWujOaIkOmYheivu1xu5aSH5rOo77yae3RleHR9PC9ib2R5PiIiIiwKICAgICAgICAic3VtbWFyeSI6IHRpdGxlIG9yICLlsI/pmIXpmIXpmIXor7siLAogICAgICAgICJjb250ZW50VHlwZSI6IDIsCiAgICAgICAgInRvcGljSWRzIjogW3RvcGljSWRzIG9yICIxMTY4NiJdLAogICAgICAgICJ1cmwiOiBsaW5rLAogICAgfQogICAgIyBwcmludChkYXRhcHVzdCkKICAgIHVybHB1c3QgPSAiaHR0cDovL3d4cHVzaGVyLnpqaWVjb2RlLmNvbS9hcGkvc2VuZC9tZXNzYWdlIgogICAgdHJ5OgogICAgICAgIHAgPSBzYWZlX3JlcXVlc3QoIlBPU1QiLCB1cmw9dXJscHVzdCwganNvbj1kYXRhcHVzdCwgdmVyaWZ5PUZhbHNlKQogICAgICAgICMgcHJpbnQocCkKICAgICAgICBpZiBwLmpzb24oKVsiY29kZSJdID09IDEwMDA6CiAgICAgICAgICAgIHByaW50KCLinIUg5o6o6YCB5paH56ug5Yiw5b6u5L+h5oiQ5Yqf77yM6K+35bC95b+r5YmN5b6A54K55Ye75paH56ug77yM5LiN54S25bCx6buR5Y+35ZWm77yBIikKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgi4p2MIOaOqOmAgeaWh+eroOWIsOW+ruS/oeWksei0pe+8jOWujOeKiuWtkO+8jOimgem7keWPt+S6hu+8gSIpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHByaW50KCLinYwg5o6o6YCB5paH56ug5Yiw5b6u5L+h5aSx6LSl77yM5a6M54qK5a2Q77yM6KaB6buR5Y+35LqG77yBIikKICAgICAgICByYWlzZSBlCiAgICAgICAgcmV0dXJuIEZhbHNlCgoKZGVmIHB1c2hXZWNoYXRCdXNzaW5lc3Mocm9ib3RLZXksIGxpbmspOgogICAgZGF0YXB1c3QgPSB7Im1zZ3R5cGUiOiAidGV4dCIsICJ0ZXh0IjogeyJjb250ZW50IjogbGlua319CiAgICAjIHByaW50KGRhdGFwdXN0KQogICAgdXJscHVzdCA9ICJodHRwczovL3F5YXBpLndlaXhpbi5xcS5jb20vY2dpLWJpbi93ZWJob29rL3NlbmQ/a2V5PSIgKyByb2JvdEtleQogICAgdHJ5OgogICAgICAgIHAgPSBzYWZlX3JlcXVlc3QoIlBPU1QiLCB1cmw9dXJscHVzdCwganNvbj1kYXRhcHVzdCwgdmVyaWZ5PUZhbHNlKQogICAgICAgICMgcHJpbnQocCkKICAgICAgICBpZiBwLmpzb24oKVsiZXJyY29kZSJdID09IDA6CiAgICAgICAgICAgIHByaW50KCLinIUg5o6o6YCB5paH56ug5Yiw5LyB5Lia5b6u5L+h5oiQ5Yqf77yBIikKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgi4p2MIOaOqOmAgeaWh+eroOWIsOS8geS4muW+ruS/oeWksei0pe+8gSIpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgZXhjZXB0OgogICAgICAgIHByaW50KCLinYwg5o6o6YCB5paH56ug5Yiw5LyB5Lia5b6u5L+h5aSx6LSl77yBIikKICAgICAgICByZXR1cm4gRmFsc2UKCgpkZWYgZ2V0UG9zdFdlY2hhdEluZm8obGluayk6CiAgICB0cnk6CiAgICAgICAgciA9IHNhZmVfcmVxdWVzdCgiR0VUIiwgbGluaywgdmVyaWZ5PUZhbHNlKQogICAgICAgICMgcHJpbnQobGluaywgci50ZXh0KQogICAgICAgIGh0bWwgPSByZS5zdWIoIlxzIiwgIiIsIHIudGV4dCkKICAgICAgICBiaXogPSByZS5maW5kYWxsKCd2YXJiaXo9IiguKj8pIlx8XHwnLCBodG1sKQogICAgICAgIGlmIGJpeiAhPSBbXToKICAgICAgICAgICAgYml6ID0gYml6WzBdCiAgICAgICAgaWYgYml6ID09ICIiIG9yIGJpeiA9PSBbXToKICAgICAgICAgICAgaWYgIl9fYml6IiBpbiBsaW5rOgogICAgICAgICAgICAgICAgYml6ID0gcmUuZmluZGFsbCgiX19iaXo9KC4qPykmIiwgbGluaykKICAgICAgICAgICAgICAgIGlmIGJpeiAhPSBbXToKICAgICAgICAgICAgICAgICAgICBiaXogPSBiaXpbMF0KICAgICAgICBuaWNrbmFtZSA9IHJlLmZpbmRhbGwoJ3Zhcm5pY2tuYW1lPWh0bWxEZWNvZGVcKCIoLio/KSJcKTsnLCBodG1sKQogICAgICAgIGlmIG5pY2tuYW1lICE9IFtdOgogICAgICAgICAgICBuaWNrbmFtZSA9IG5pY2tuYW1lWzBdCiAgICAgICAgdXNlcl9uYW1lID0gcmUuZmluZGFsbCgndmFydXNlcl9uYW1lPSIoLio/KSI7JywgaHRtbCkKICAgICAgICBpZiB1c2VyX25hbWUgIT0gW106CiAgICAgICAgICAgIHVzZXJfbmFtZSA9IHVzZXJfbmFtZVswXQogICAgICAgIG1zZ190aXRsZSA9IHJlLmZpbmRhbGwoInZhcm1zZ190aXRsZT0nKC4qPyknXC5odG1sXCgiLCBodG1sKQogICAgICAgIGlmIG1zZ190aXRsZSAhPSBbXToKICAgICAgICAgICAgbXNnX3RpdGxlID0gbXNnX3RpdGxlWzBdCiAgICAgICAgdGV4dCA9IGYi5YWs5LyX5Y+35ZSv5LiA5qCH6K+G77yae2Jpen185paH56ugOnttc2dfdGl0bGV9fOS9nOiAhTp7bmlja25hbWV9fOi0puWPtzp7dXNlcl9uYW1lfSIKICAgICAgICBwcmludCh0ZXh0KQogICAgICAgIHJldHVybiBuaWNrbmFtZSwgdXNlcl9uYW1lLCBtc2dfdGl0bGUsIHRleHQsIGJpegogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICMgcHJpbnQoZSkKICAgICAgICBwcmludCgi4p2MIOaPkOWPluaWh+eroOS/oeaBr+Wksei0pSIpCiAgICAgICAgcmV0dXJuIEZhbHNlCgoKZGVmIHRzKCk6CiAgICByZXR1cm4gc3RyKGludCh0aW1lLnRpbWUoKSkpICsgIjAwMCIKCgpjaGVja0RpY3QgPSB7CiAgICAiTXpreE5URTNNelE0TVE9PSI6IFsi6aaZ5aeQ54ix5peF6KGMIiwgImdoXzU0YTY1ZGM2MDAzOSJdLAogICAgIk16ZzVNak0wTURFd053PT0iOiBbIuaIkeacrOmdnuWHoSIsICJnaF80NmIwNzY5MDM0NzMiXSwKICAgICJNelV6T0RZNE56RTJPUT09IjogWyLlpJrogonokaHokIQyMDIwIiwgImdoX2IzZDc5Y2QxZTFiNSJdLAogICAgIk16a3lNakUzTXpZeE1nPT0iOiBbIllvdWhmdWwiLCAiZ2hfYjNkNzljZDFlMWI1Il0sCiAgICAiTXpreE5qTXdOREl6T0E9PSI6IFsi5bCR5bm05rKh5pyJ5LmM5omY6YKmMyIsICJnaF9iM2Q3OWNkMWUxYjUiXSwKICAgICJNemczTnpVeE1qYzVNZz09IjogWyLmmJ/mmJ/or7roqIAiLCAiZ2hfYjNkNzljZDFlMWI1Il0sCiAgICAiTXpnNE5UY3dPREUxTkE9PSI6IFsi5paR6ams6L+Y5rKh552hMTIzIiwgImdoX2IzZDc5Y2QxZTFiNSJdLAogICAgIk16azBPREl4T0RFNE9RPT0iOiBbIuaMgeWutuWmmeaLm+WuneWFuCIsICJnaF9iM2Q3OWNkMWUxYjUiXSwKICAgICJNemcyTmpVeU1qSTFOQT09IjogWyJMaWxpbm5nIiwgImdoX2IzZDc5Y2QxZTFiNSJdLAogICAgIk16SXpNRGN6T0RnNE13PT0iOiBbIuacieaVheS6i+eahOWQjOWtplkiLCAiZ2hfYjNkNzljZDFlMWI1Il0sCiAgICAiTXpnNU9EVXlNell6TVE9PSI6IFsiNzg55Lmf5LiN6KGMIiwgImdoX2IzZDc5Y2QxZTFiNSJdLAogICAgIk16VTBOekk1TWpjNE9RPT0iOiBbIuearuibi+eYpuiCieeMqiIsICJnaF81OGQ3ZWU1OTNiODYiXSwKICAgICJNemc1TURneE9EQXpNZz09IjogWyLljJfljJflsI/liqnmiYsiLCAiZ2hfNThkN2VlNTkzYjg2Il0sCiAgICAiTXpJek1EY3pPRGc0TXc9PSI6IFsi5pyJ5pWF5LqL55qE5ZCM5a2mWSIsICJnaF9iOGI5MjkzNGRhNWYiXSwKICAgICJNemt4TkRVMU5ERXpOdz09IjogWyLlsI/pmIXpmIXmnI3liqEiLCAiZ2hfZTUwY2ZlZmVmOWU1Il0sCiAgICAiTXpreE5EWXpPVEV5TXc9PSI6IFsi6JOd6I6T5Y+v5LmQIiwgImdoXzczY2EyMzhhZGQ5NyJdLAp9CgoKY2xhc3MgSEhZRDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjZyk6CiAgICAgICAgc2VsZi5iYWxhbmNlID0gMAogICAgICAgIHNlbGYudW5pb25JZCA9IGNnWyJ1bmlvbklkIl0KICAgICAgICBzZWxmLnlzbV91aWQgPSBjZ1sieXNtX3VpZCJdCiAgICAgICAgIyBwcmludCgiY2ciLCBjZywgc2VsZi51bmlvbklkLCBzZWxmLnlzbV91aWQpCiAgICAgICAgc2VsZi50eGJ6ID0gY2dbInR4YnoiXQogICAgICAgIHNlbGYudG9waWNJZHMgPSBjZ1sidG9waWNJZHMiXQogICAgICAgIHNlbGYuYXBwVG9rZW4gPSBjZ1siYXBwVG9rZW4iXQogICAgICAgIGdsb2JhbCB3ZWNoYXRCdXNzaW5lc3NLZXkKICAgICAgICBzZWxmLndlY2hhdEJ1c3NpbmVzc0tleSA9IHdlY2hhdEJ1c3NpbmVzc0tleSBvciAiIgogICAgICAgIHNlbGYuYWxpQWNjb3VudCA9IGNnWyJhbGlBY2NvdW50Il0gb3IgIiIKICAgICAgICBzZWxmLmFsaU5hbWUgPSBjZ1siYWxpTmFtZSJdIG9yICIiCiAgICAgICAgc2VsZi5uYW1lID0gY2dbIm5hbWUiXQogICAgICAgIHNlbGYuZG9tbmFpbkhvc3QgPSAiMTY5ODg1NTEzOS5oeGlvbmcudG9wIgogICAgICAgIHNlbGYuZXhjaGFuZ2VQYXJhbXMgPSAiIgogICAgICAgIHNlbGYuaGVhZGVycyA9IHsKICAgICAgICAgICAgIkNvbm5lY3Rpb24iOiAia2VlcC1hbGl2ZSIsCiAgICAgICAgICAgICJBY2NlcHQiOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0LCAqLyo7IHE9MC4wMSIsCiAgICAgICAgICAgICJVc2VyLUFnZW50IjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMDcuMC4wLjAgU2FmYXJpLzUzNy4zNiBOZXRUeXBlL1dJRkkgTWljcm9NZXNzZW5nZXIvNy4wLjIwLjE3ODEoMHg2NzAwMTQzQikgV2luZG93c1dlY2hhdCgweDYzMDkwNjIxKSBYV0VCLzgzNTEgRmx1ZSIsCiAgICAgICAgICAgICJYLVJlcXVlc3RlZC1XaXRoIjogIlhNTEh0dHBSZXF1ZXN0IiwKICAgICAgICAgICAgIlJlZmVyZXIiOiBmImh0dHA6Ly97c2VsZi5kb21uYWluSG9zdH0vIiwKICAgICAgICAgICAgIk9yaWdpbiI6IGYiaHR0cDovL3tzZWxmLmRvbW5haW5Ib3N0fSIsCiAgICAgICAgICAgICMgIkhvc3QiOiBmIntzZWxmLmRvbW5haW5Ib3N0fSIsCiAgICAgICAgICAgICJBY2NlcHQtRW5jb2RpbmciOiAiZ3ppcCwgZGVmbGF0ZSIsCiAgICAgICAgICAgICJBY2NlcHQtTGFuZ3VhZ2UiOiAiemgtQ04semgiLAogICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsCiAgICAgICAgICAgICJDb29raWUiOiBmInlzbV91aWQ9e3NlbGYueXNtX3VpZH07IiwKICAgICAgICB9CiAgICAgICAgc2VsZi5yZWFkSnVtcFBhdGggPSAiIgoKICAgIGRlZiB1c2VyX2luZm8oc2VsZik6CiAgICAgICAgdSA9IGYiaHR0cDovL3tzZWxmLmRvbW5haW5Ib3N0fS95dW5vbmxpbmUvdjEvc2lnbl9pbmZvP3RpbWU9e3RzKCl9JnVuaW9uaWQ9e3NlbGYudW5pb25JZH0iCiAgICAgICAgciA9ICIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICByID0gc2FmZV9yZXF1ZXN0KCJHRVQiLCB1KQogICAgICAgICAgICByaiA9IHIuanNvbigpCiAgICAgICAgICAgIGlmIHJqLmdldCgiZXJyY29kZSIpID09IDA6CiAgICAgICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICAgICBmIui0puWPt1t7c2VsZi5uYW1lfV3ojrflj5bkv6Hmga/miJDlip/vvIzlvZPliY3pmIXor7vmlofnq6Dmr4/nr4flpZblirEge3IuanNvbigpWydkYXRhJ11bJ2F3YXJkJ1195Liq6YeR5biBIgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHByaW50KGYi6LSm5Y+3W3tzZWxmLm5hbWV9XeiOt+WPlueUqOaIt+S/oeaBr+Wksei0pe+8jOi0puWPt+W8guW4uCDmiJbogIUgeXNtX3VpZOaXoOaViO+8jOivt+ajgOa1i3lzbV91aWTmmK/lkKbmraPnoa4iKQogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwcmludChyLnRleHQpCiAgICAgICAgICAgIHByaW50KGYi6LSm5Y+3W3tzZWxmLm5hbWV9XeiOt+WPlueUqOaIt+S/oeaBr+Wksei0pSx5c21fdWlk5peg5pWI77yM6K+35qOA5rWLeXNtX3VpZOaYr+WQpuato+ehriIpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBoYXNXZWNoYXQoc2VsZik6CiAgICAgICAgciA9ICIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICB1ID0gZiJodHRwOi8ve3NlbGYuZG9tbmFpbkhvc3R9L3l1bm9ubGluZS92MS9oYXNXZWNoYXQ/dW5pb25pZD17c2VsZi51bmlvbklkfSIKICAgICAgICAgICAgciA9IHNhZmVfcmVxdWVzdCgiR0VUIiwgdSkKICAgICAgICAgICAgcHJpbnQoZiLotKblj7dbe3NlbGYubmFtZX1d5Yik5pat5YWs5LyX5Y+35Lu75Yqh5pWw6YeP77yae3IuanNvbigpWydkYXRhJ11bJ2hhcyddfSIpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwcmludChmIui0puWPt1t7c2VsZi5uYW1lfV3liKTmlq3mmK/lkKbmnInlhazkvJflj7fku7vliqHlpLHotKXvvJp7ci50ZXh0fSIpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBnb2xkKHNlbGYpOgogICAgICAgIHIgPSAiIgogICAgICAgIHRyeToKICAgICAgICAgICAgdSA9IGYiaHR0cDovL3tzZWxmLmRvbW5haW5Ib3N0fS95dW5vbmxpbmUvdjEvZ29sZD91bmlvbmlkPXtzZWxmLnVuaW9uSWR9JnRpbWU9e3RzKCl9IgogICAgICAgICAgICByID0gc2FmZV9yZXF1ZXN0KCJHRVQiLCB1KQogICAgICAgICAgICAjIHByaW50KHIuanNvbigpKQogICAgICAgICAgICByaiA9IHIuanNvbigpCiAgICAgICAgICAgIHNlbGYucmVtYWluID0gbWF0aC5mbG9vcihpbnQocmouZ2V0KCJkYXRhIikuZ2V0KCJsYXN0X2dvbGQiKSkpCiAgICAgICAgICAgIHByaW50KAogICAgICAgICAgICAgICAgZifotKblj7dbe3NlbGYubmFtZX1d5LuK5pel5bey57uP6ZiF6K+75LqGe3JqLmdldCgiZGF0YSIpLmdldCgiZGF5X3JlYWQiKX3nr4fmlofnq6As5Ymp5L2Ze3JqLmdldCgiZGF0YSIpLmdldCgicmVtYWluX3JlYWQiKX3mnKrpmIXor7vvvIzku4rml6Xojrflj5bph5HluIF7cmouZ2V0KCJkYXRhIikuZ2V0KCJkYXlfZ29sZCIpfe+8jOWJqeS9mXtzZWxmLnJlbWFpbn0nCiAgICAgICAgICAgICkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIHByaW50KGYi6LSm5Y+3W3tzZWxmLm5hbWV9XeiOt+WPlumHkeW4geWksei0pe+8miIsIGUpCiAgICAgICAgICAgICMgcmFpc2UgZQogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgZ2V0S2V5KHNlbGYpOgogICAgICAgIHVrID0gIiIKICAgICAgICB1a1JlcyA9IE5vbmUKICAgICAgICB1ID0gZiJodHRwOi8ve3NlbGYuZG9tbmFpbkhvc3R9L3l1bm9ubGluZS92MS97c2VsZi5yZWFkSnVtcFBhdGh9IgogICAgICAgICMgcHJpbnQoIuaPkOekuiBnZXRLZXnvvJoiLCB1KQogICAgICAgIHAgPSBmInVuaW9uaWQ9e3NlbGYudW5pb25JZH0iCiAgICAgICAgciA9IHNhZmVfcmVxdWVzdCgiUE9TVCIsIHUsIGhlYWRlcnM9c2VsZi5oZWFkZXJzLCBkYXRhPXAsIHZlcmlmeT1GYWxzZSkKICAgICAgICAjIHByaW50KCJnZXRLZXnvvJoiLCByLnRleHQpCiAgICAgICAgcmogPSByLmpzb24oKQogICAgICAgIGRvbWFpbiA9IHJqLmdldCgiZGF0YSIpLmdldCgiZG9tYWluIikKICAgICAgICAjIHByaW50KCLor7fmsYLkuK3ovazpobXvvJoiLCByLnRleHQpCiAgICAgICAgcHAgPSBwYXJzZV9xcyh1cmxwYXJzZShkb21haW4pLnF1ZXJ5KQogICAgICAgIGhuID0gdXJscGFyc2UoZG9tYWluKS5uZXRsb2MKICAgICAgICB1ayA9IHBwLmdldCgidWsiKVswXQogICAgICAgIHVrUmVzID0gci50ZXh0CiAgICAgICAgaWYgdWsgPT0gIiI6CiAgICAgICAgICAgIHByaW50KGYi6LSm5Y+3W3tzZWxmLm5hbWV9XeiOt+WPlnVr5aSx6LSl77yM6L+U5Zue6ZSZ6K+v77yae3VrUmVzfSIpCiAgICAgICAgICAgIHJldHVybgogICAgICAgIHRpbWUuc2xlZXAoOCkKICAgICAgICByID0gc2FmZV9yZXF1ZXN0KAogICAgICAgICAgICAiR0VUIiwKICAgICAgICAgICAgZG9tYWluLAogICAgICAgICAgICBoZWFkZXJzPXsKICAgICAgICAgICAgICAgICJBY2NlcHQiOiAidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC45IiwKICAgICAgICAgICAgICAgICJBY2NlcHQtRW5jb2RpbmciOiAiZ3ppcCwgZGVmbGF0ZSwgYnIiLAogICAgICAgICAgICAgICAgIkFjY2VwdC1MYW5ndWFnZSI6ICJ6aC1DTix6aDtxPTAuOSIsCiAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiI6ICJrZWVwLWFsaXZlIiwKICAgICAgICAgICAgICAgICJIb3N0IjogZiJ7aG59IiwKICAgICAgICAgICAgICAgICJTZWMtRmV0Y2gtRGVzdCI6ICJkb2N1bWVudCIsCiAgICAgICAgICAgICAgICAiU2VjLUZldGNoLU1vZGUiOiAibmF2aWdhdGUiLAogICAgICAgICAgICAgICAgIlNlYy1GZXRjaC1TaXRlIjogIm5vbmUiLAogICAgICAgICAgICAgICAgIlNlYy1GZXRjaC1Vc2VyIjogIj8xIiwKICAgICAgICAgICAgICAgICJVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzIjogIjEiLAogICAgICAgICAgICAgICAgIlVzZXItQWdlbnQiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwNy4wLjAuMCBTYWZhcmkvNTM3LjM2IE5ldFR5cGUvV0lGSSBNaWNyb01lc3Nlbmdlci83LjAuMjAuMTc4MSgweDY3MDAxNDNCKSBXaW5kb3dzV2VjaGF0KDB4NjMwOTA3MWQpIFhXRUIvODQ2MSBGbHVlIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdmVyaWZ5PUZhbHNlLAogICAgICAgICkKICAgICAgICAjIDxzY3JpcHQgc3JjPSJodHRwczovL2ltYWdlLmh6eXNteXkuY24veXVuc2FvbWEvanMvYXJ0aWNsZS5qcz92NC4wIj48L3NjcmlwdD4KICAgICAgICByZWFkSnNWZXJzaW9uID0gZXh0cmFjdF9taWRkbGVfdGV4dChyLnRleHQsICJqcy9hcnRpY2xlLmpzPyIsICciJykKICAgICAgICBjaGVja0pzQ29kZUNoYW5nZWQgPSAoCiAgICAgICAgICAgIGNoZWNrX2ZpbGVfbWQ1KAogICAgICAgICAgICAgICAgZXh0cmFjdF9taWRkbGVfdGV4dChyLnRleHQsICc8c2NyaXB0IHNyYz0iJywgJyI+PC9zY3JpcCcpLAogICAgICAgICAgICAgICAgIjk4OTA0NzcwZjdjNjVhNDk5YTFkNTJlOWQ3NWMxOWRmIiwKICAgICAgICAgICAgKQogICAgICAgICAgICA9PSBGYWxzZQogICAgICAgICkKICAgICAgICBpZiAocmVhZEpzVmVyc2lvbiAhPSAidjYuMCIpIG9yIGNoZWNrSnNDb2RlQ2hhbmdlZDoKICAgICAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICAgICBmIui0puWPt1t7c2VsZi5uYW1lfV0g5qOA5rWL5Yiw5o6l5Y+j54mI5pys5Y+R55Sf5Y+Y5YyW77yM5b2T5YmN5o6l5Y+j54mI5pys5Li677yae3JlYWRKc1ZlcnNpb25977yM5ouJ5ZON6K2m5oql77yM5Y+w5a2Q5pCe5LqL77yM6KaB5oqT5Lq65LqG77yM5byA5aeL5pKk6YCA77yM6YCA5Ye656iL5bqPID4+ICIKICAgICAgICAgICAgKQogICAgICAgICAgICBzeXMuZXhpdCgwKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMgcHJpbnQoZiLotKblj7dbe3NlbGYubmFtZX1dIOmYheivu+WHhuWkh+WujOaIkO+8mnt1a33vvIzmj5Dlj5bliLDnmoTlnLDlnYDvvJp7ZG9tYWlufSIpCiAgICAgICAgICAgIGlmIHh5eXlkUmVhZFB1cmVMb2cgPT0gRmFsc2U6CiAgICAgICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICAgICBmIui0puWPt1t7c2VsZi5uYW1lfV0g6ZiF6K+75YeG5aSH5oiQ5Yqf77yM5b2T5YmN5o6l5Y+j54mI5pys5Li677yae3JlYWRKc1ZlcnNpb259IOWNs+WwhuW8gOWni+mYheivuyDinIUg77yM6ZiF6K+75Y+C5pWw5Li677yae3VrfSIKICAgICAgICAgICAgICAgICkKICAgICAgICBoID0gewogICAgICAgICAgICAiQWNjZXB0IjogImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCwgKi8qOyBxPTAuMDEiLAogICAgICAgICAgICAiQWNjZXB0LUVuY29kaW5nIjogImd6aXAsIGRlZmxhdGUsIGJyIiwKICAgICAgICAgICAgIkFjY2VwdC1MYW5ndWFnZSI6ICJ6aC1DTix6aDtxPTAuOSIsCiAgICAgICAgICAgICJDb25uZWN0aW9uIjogImtlZXAtYWxpdmUiLAogICAgICAgICAgICAiSG9zdCI6ICJuc3IuenNmMjAyM2U0NTguY2xvdWQiLAogICAgICAgICAgICAiT3JpZ2luIjogZiJodHRwczovL3tobn0iLAogICAgICAgICAgICAiU2VjLUZldGNoLURlc3QiOiAiZW1wdHkiLAogICAgICAgICAgICAiU2VjLUZldGNoLU1vZGUiOiAiY29ycyIsCiAgICAgICAgICAgICJTZWMtRmV0Y2gtU2l0ZSI6ICJjcm9zcy1zaXRlIiwKICAgICAgICAgICAgIlVzZXItQWdlbnQiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwNy4wLjAuMCBTYWZhcmkvNTM3LjM2IE5ldFR5cGUvV0lGSSBNaWNyb01lc3Nlbmdlci83LjAuMjAuMTc4MSgweDY3MDAxNDNCKSBXaW5kb3dzV2VjaGF0KDB4NjMwOTA3MWQpIFhXRUIvODQ2MSBGbHVlIiwKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHVrLCBoCgogICAgZGVmIHJlYWQoc2VsZik6CiAgICAgICAgaW5mbyA9IHNlbGYuZ2V0S2V5KCkKICAgICAgICBpZiBsZW4oaW5mbykgPT0gMDoKICAgICAgICAgICAgcHJpbnQoZiLotKblj7dbe3NlbGYubmFtZX1d6I635Y+W6ZiF6K+75Y+C5pWw5aSx6LSl77yM5YGc5q2i5b6A5ZCO6ZiF6K+777yB4pqg77iPICIpCiAgICAgICAgICAgIHJldHVybgogICAgICAgICMgcHJpbnQoaW5mbykKICAgICAgICB0aW1lLnNsZWVwKDIpCiAgICAgICAgYXJjdGlsZVRpbWUgPSAxCiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgcmVzID0geyJlcnJjb2RlIjogLTF9CiAgICAgICAgICAgIHJlZnJlc2hUaW1lID0gMAogICAgICAgICAgICB3aGlsZSByZXNbImVycmNvZGUiXSAhPSAwOgogICAgICAgICAgICAgICAgdGltZVN0YW1wID0gc3RyKHRzKCkpCiAgICAgICAgICAgICAgICBwc2duID0gaGFzaGxpYi5tZDUoCiAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICBpbmZvWzFdWyJPcmlnaW4iXS5yZXBsYWNlKCJodHRwczovLyIsICIiKVswOjExXQogICAgICAgICAgICAgICAgICAgICAgICArIGluZm9bMF0KICAgICAgICAgICAgICAgICAgICAgICAgKyB0aW1lU3RhbXAKICAgICAgICAgICAgICAgICAgICAgICAgKyAiQSZJMjVMSUxJWURTJCIKICAgICAgICAgICAgICAgICAgICApLmVuY29kZSgpCiAgICAgICAgICAgICAgICApLmhleGRpZ2VzdCgpCiAgICAgICAgICAgICAgICAjIHByaW50KGluZm8sIHRpbWVTdGFtcCkKICAgICAgICAgICAgICAgIHNlbGYucGFyYW1zID0gewogICAgICAgICAgICAgICAgICAgICJ1ayI6IGluZm9bMF0sCiAgICAgICAgICAgICAgICAgICAgInRpbWUiOiB0aW1lU3RhbXAsCiAgICAgICAgICAgICAgICAgICAgInBzZ24iOiBwc2duLAogICAgICAgICAgICAgICAgICAgICJ2IjogIjQuMCIsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB1ID0gZiJodHRwczovL25zci56c2YyMDIzZTQ1OC5jbG91ZC95dW5vbmxpbmUvdjEvZ2V0d2VuemhhbmciCiAgICAgICAgICAgICAgICByID0gc2FmZV9yZXF1ZXN0KAogICAgICAgICAgICAgICAgICAgICJHRVQiLAogICAgICAgICAgICAgICAgICAgIHUsCiAgICAgICAgICAgICAgICAgICAgaGVhZGVycz1pbmZvWzFdLAogICAgICAgICAgICAgICAgICAgIHBhcmFtcz1zZWxmLnBhcmFtcywKICAgICAgICAgICAgICAgICAgICB2ZXJpZnk9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgdGltZW91dD02MCwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHByaW50KCItIiAqIDUwKQogICAgICAgICAgICAgICAgIyBwcmludCgKICAgICAgICAgICAgICAgICMgICAgIGYi6LSm5Y+3W3tzZWxmLm5hbWV9XeesrFt7cmVmcmVzaFRpbWUrMX1d5qyh6I635Y+W6ZiF6K+75paH56ugW3tpbmZvWzBdfV3nm67nmoTpobXvvJp7ci50ZXh0fSIKICAgICAgICAgICAgICAgICMgKQogICAgICAgICAgICAgICAgIyBwcmludCgi6ZiF6K+75paH56ug5Y+C5pWw5p+l55yL77yaIiwgdSwgc2VsZi5wYXJhbXMsIHIudGV4dCwgaW5mb1sxXSkKICAgICAgICAgICAgICAgIGlmIHIudGV4dCBhbmQgci5qc29uKClbImVycmNvZGUiXSA9PSAwOgogICAgICAgICAgICAgICAgICAgIHJlcyA9IHIuanNvbigpCiAgICAgICAgICAgICAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICAgICAgICAgICAgIGYi6LSm5Y+3W3tzZWxmLm5hbWV9XeesrFt7cmVmcmVzaFRpbWUrMX1d5qyh6I635Y+W56ysW3thcmN0aWxlVGltZX1d56+H6ZiF6K+75paH56ugW3tpbmZvWzBdfV3ot7Povazpk77mjqXmiJDlip8iCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBkZWNvZGVkX3N0ciA9IGpzb24ubG9hZHMoci50ZXh0KQogICAgICAgICAgICAgICAgICAgIGlmIGRlY29kZWRfc3RyWyJtc2ciXToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIui0puWPt1t7c2VsZi5uYW1lfV3nrKxbe3JlZnJlc2hUaW1lKzF9XeasoeiOt+WPluesrFt7YXJjdGlsZVRpbWV9Xeevh+mYheivu+aWh+eroFt7aW5mb1swXX1d6Lez6L2s6ZO+5o6l5aSx6LSl77yae2RlY29kZWRfc3RyWydtc2cnXX0iCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIui0puWPt1t7c2VsZi5uYW1lfV3nrKxbe3JlZnJlc2hUaW1lKzF9XeasoeiOt+WPluesrFt7YXJjdGlsZVRpbWV9Xeevh+mYheivu+aWh+eroFt7aW5mb1swXX1d6Lez6L2s6ZO+5o6l5aSx6LSl77yae3IudGV4dH0iCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMS41KQogICAgICAgICAgICAgICAgcmVmcmVzaFRpbWUgPSByZWZyZXNoVGltZSArIDEKICAgICAgICAgICAgICAgIGlmIHJlZnJlc2hUaW1lID49IDU6CiAgICAgICAgICAgICAgICAgICAgcHJpbnQoZiLimqDvuI8g6LSm5Y+3W3tzZWxmLm5hbWV9XeiOt+WPlumYheivu+esrFt7YXJjdGlsZVRpbWV9Xeevh+aWh+eroFt7aW5mb1swXX1d6LaF5pe24oCm4oCmIikKICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgd2VjaGF0UG9zdExpbmsgPSAiIgogICAgICAgICAgICBpZiByZXMuZ2V0KCJlcnJjb2RlIikgPT0gMDoKICAgICAgICAgICAgICAgIHJldHVybkxpbmsgPSAiIgogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHJldHVybkxpbmsgPSByZXMuZ2V0KCJkYXRhIikuZ2V0KCJsaW5rIikKICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICAgICAgICAgZiLimqDvuI8g6LSm5Y+3W3tzZWxmLm5hbWV9XeiOt+WPlumYheivu+esrFt7YXJjdGlsZVRpbWV9Xeevh+aWh+eroFt7aW5mb1swXX1d6ZO+5o6l5aSx6LSl77yM55aR5Ly85Y+w5a2Q5o6l5Y+j5aSq5Z6D5Zy+77yM5bSp5LqG77yM6L+U5Zue5pWw5o2u5Li677yaIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmdldCgiZGF0YSIpLAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgaWYgIm1wLndlaXhpbi5xcS5jb20iIGluIHJldHVybkxpbms6CiAgICAgICAgICAgICAgICAgICAgaWYgeHl5eWRSZWFkUHVyZUxvZyA9PSBGYWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZiLotKblj7dbe3NlbGYubmFtZX1dIOmYheivu+esrFt7YXJjdGlsZVRpbWV9Xeevh+W+ruS/oeaWh+eroO+8mntyZXR1cm5MaW5rfSIpCiAgICAgICAgICAgICAgICAgICAgd2VjaGF0UG9zdExpbmsgPSByZXR1cm5MaW5rCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICMgcHJpbnQoZiLotKblj7dbe3NlbGYubmFtZX1dIOmYheivu+esrFt7YXJjdGlsZVRpbWV9Xeevh+aWh+eroOWHhuWkh+i3s+i9rO+8mntsaW5rfSIpCiAgICAgICAgICAgICAgICAgICAgd2VjaGF0UG9zdExpbmsgPSBzZWxmLmp1bXAocmV0dXJuTGluaykKICAgICAgICAgICAgICAgICAgICBpZiB4eXl5ZFJlYWRQdXJlTG9nID09IEZhbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYi6LSm5Y+3W3tzZWxmLm5hbWV9XSDpmIXor7vnrKxbe2FyY3RpbGVUaW1lfV3nr4flvq7kv6Hmlofnq6DvvJp7d2VjaGF0UG9zdExpbmt9IgogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBpZiB4eXl5ZFJlYWRQdXJlTG9nID09IEZhbHNlOgogICAgICAgICAgICAgICAgICAgIHByaW50KGYi6LSm5Y+3W3tzZWxmLm5hbWV9XSDpmIXor7vnrKxbe2FyY3RpbGVUaW1lfV3nr4fmlofnq6DvvJp7d2VjaGF0UG9zdExpbmt9IikKICAgICAgICAgICAgICAgIHNsZWVwVGltZSA9IHJhbmRvbS5yYW5kaW50KDcsIDEwKQogICAgICAgICAgICAgICAgaWYgIm1wLndlaXhpbi5xcS5jb20iIGluIHdlY2hhdFBvc3RMaW5rOgogICAgICAgICAgICAgICAgICAgIHBvc3RXZWNoYXRJbmZvID0gZ2V0UG9zdFdlY2hhdEluZm8od2VjaGF0UG9zdExpbmspCiAgICAgICAgICAgICAgICAgICAgaWYgcG9zdFdlY2hhdEluZm8gPT0gRmFsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZiLimqDvuI8g6LSm5Y+3W3tzZWxmLm5hbWV9XeWboCDojrflj5blhazkvJflj7fmlofnq6Dkv6Hmga/kuI3miJDlip/vvIzlr7zoh7TpmIXor7vnrKxbe2FyY3RpbGVUaW1lfV3nr4fmlofnq6Bbe2luZm9bMF19XSDlpLHotKXigKbigKYiCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICAgICAgICAgIyDlpoLmnpzmmK/mo4DmtYvnibnlvoHliLDnmoTmlofnq6Ag5oiW6ICFIOWQjuS4gOevh+aWh+eroOS4juWJjeS4gOevh+ebuOS8vAogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tEaWN0LmdldChwb3N0V2VjaGF0SW5mb1s0XSkgIT0gTm9uZQogICAgICAgICAgICAgICAgICAgICAgICBvciAocmVzLmdldCgiZGF0YSIpLmdldCgiYSIpID09IDIpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgiJmNoa3NtPSIgaW4gd2VjaGF0UG9zdExpbmspCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgiX19iaXoiIG5vdCBpbiB3ZWNoYXRQb3N0TGluaykKICAgICAgICAgICAgICAgICAgICApOgogICAgICAgICAgICAgICAgICAgICAgICBzbGVlcFRpbWUgPSByZWFkUG9zdERlbGF5IG9yIHJhbmRvbS5yYW5kaW50KDE1LCAyMCkKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIuKaoO+4jyDotKblj7dbe3NlbGYubmFtZX1d6ZiF6K+756ysW3thcmN0aWxlVGltZX1d56+H5paH56ugW3tpbmZvWzBdfV0g5qOA5rWL5Yiw55aR5Ly85qOA5rWL5paH56ug77yM5q2j5Zyo5o6o6YCB77yM562J5b6F6L+H5qOA5rWL77yM562J5b6F5pe26Ze077yae3NsZWVwVGltZX3np5LjgILjgILjgIIiCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi53ZWNoYXRCdXNzaW5lc3NLZXk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoV2VjaGF0QnVzc2luZXNzKHNlbGYud2VjaGF0QnVzc2luZXNzS2V5LCB3ZWNoYXRQb3N0TGluaykKICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLmFwcFRva2VuOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFwcFRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9waWNJZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIuWwj+mYhemYhemYheivu+i/h+ajgOa1iyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VjaGF0UG9zdExpbmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiLotKblj7dbe3NlbGYubmFtZX1d6ZiF6K+756ysW3thcmN0aWxlVGltZX1d56+H5paH56ugW3tpbmZvWzBdfV0g5q2j5Zyo562J5b6F6L+H5qOA5rWL77yM562J5b6F5pe26Ze077yae3NsZWVwVGltZX3np5JcbuW5u+eUn+aPkOekuu+8muW/q+eCue+8jOWIq+iAveaQgeaXtumXtOS6hu+8gSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIuKaoO+4jyDotKblj7dbe3NlbGYubmFtZX1d6ZiF6K+756ysW3thcmN0aWxlVGltZX1d56+H5paH56ugW3tpbmZvWzBdfV0g6ZyA6KaB6L+H5qOA5rWL77yM5L2G5piv5pyq6YWN572u5o6o6YCBdG9rZW7vvIzkuLrkuobpgb/lhY3pu5Hlj7fvvIzlgZzmraLpmIXor7vjgILjgILjgIIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYi4pyFIOi0puWPt1t7c2VsZi5uYW1lfV3pmIXor7vnrKxbe2FyY3RpbGVUaW1lfV3nr4fmlofnq6Bbe2luZm9bMF19XSDpnZ7mo4DmtYvmlofnq6DvvIzmqKHmi5/or7t7c2xlZXBUaW1lfeenkiIKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICAgICAgICAgZiLinIUg6LSm5Y+3W3tzZWxmLm5hbWV9XemYheivu+esrFt7YXJjdGlsZVRpbWV9Xeevh+aWh+eroFt7aW5mb1swXX1dIOmdnuajgOa1i+aWh+eroO+8jOaooeaLn+ivu3tzbGVlcFRpbWV956eSIgogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoc2xlZXBUaW1lKQogICAgICAgICAgICAgICAgdTEgPSBmImh0dHBzOi8vbnNyLnpzZjIwMjNlNDU4LmNsb3VkL3l1bm9ubGluZS92MS9nZXRfcmVhZF9nb2xkP3VrPXtpbmZvWzBdfSZ0aW1lPXtzbGVlcFRpbWV9JnRpbWVzdGFtcD17dHMoKX0iCiAgICAgICAgICAgICAgICByMSA9IHNhZmVfcmVxdWVzdCgiR0VUIiwgdTEsIGhlYWRlcnM9aW5mb1sxXSwgdmVyaWZ5PUZhbHNlKQogICAgICAgICAgICAgICAgaWYgcjEudGV4dCBhbmQgcjEuanNvbigpOgogICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIuKchSDotKblj7dbe3NlbGYubmFtZX1d6ZiF6K+756ysW3thcmN0aWxlVGltZX1d56+H5paH56ugW3tpbmZvWzBdfV3miYDlvpfph5HluIHvvJp7cjEuanNvbigpWydkYXRhJ11bJ2dvbGQnXX3kuKrvvIzotKbmiLflvZPliY3ph5HluIHvvJp7cjEuanNvbigpWydkYXRhJ11bJ2xhc3RfZ29sZCddfeS4qu+8jOS7iuaXpeW3suivu++8mntyMS5qc29uKClbJ2RhdGEnXVsnZGF5X3JlYWQnXX3mrKHvvIzku4rml6XmnKror7sge3IxLmpzb24oKVsnZGF0YSddWydyZW1haW5fcmVhZCddfeevh+aWh+eroCIKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIuKdjCDotKblj7dbe3NlbGYubmFtZX1d6ZiF6K+756ysW3thcmN0aWxlVGltZX1d56+H5paH56ugW3tpbmZvWzBdfV3lvILluLjvvJp7cjEuanNvbigpLmdldCgnbXNnJyl9IgogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICLmnKzmrKHpmIXor7vml6DmlYgiIGluIHIxLmpzb24oKS5nZXQoIm1zZyIpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHByaW50KAogICAgICAgICAgICAgICAgICAgICAgICBmIuKdjCDotKblj7dbe3NlbGYubmFtZX1d6ZiF6K+756ysW3thcmN0aWxlVGltZX1d56+H5paH56ugW3tpbmZvWzBdfV3lpLHotKXvvJp7cjEudGV4dH0iCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGVsaWYgcmVzLmdldCgiZXJyY29kZSIpID09IDQwNToKICAgICAgICAgICAgICAgIHByaW50KGYi4pqg77iPIOi0puWPt1t7c2VsZi5uYW1lfV3pmIXor7vnrKxbe2FyY3RpbGVUaW1lfV3nr4fmlofnq6Bbe2luZm9bMF19XemYheivu+mHjeWkjSIpCiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEuNSkKICAgICAgICAgICAgZWxpZiByZXMuZ2V0KCJlcnJjb2RlIikgPT0gNDA3OgogICAgICAgICAgICAgICAgcHJpbnQoZiLimqDvuI8g6LSm5Y+3W3tzZWxmLm5hbWV9XemYheivu+esrFt7YXJjdGlsZVRpbWV9Xeevh+aWh+eroFt7aW5mb1swXX1d6ZiF6K+757uT5p2fIikKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmludChmIuKaoO+4jyDotKblj7dbe3NlbGYubmFtZX1d6ZiF6K+756ysW3thcmN0aWxlVGltZX1d56+H5paH56ugW3tpbmZvWzBdfV3mnKrnn6Xmg4XlhrUiKQogICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxLjUpCiAgICAgICAgICAgIGFyY3RpbGVUaW1lID0gYXJjdGlsZVRpbWUgKyAxCgogICAgZGVmIGp1bXAoc2VsZiwgbGluayk6CiAgICAgICAgcHJpbnQoZiLotKblj7dbe3NlbGYubmFtZX1d5byA5aeL5pys5qyh6ZiF6K+74oCm4oCmIikKICAgICAgICBobiA9IHVybHBhcnNlKGxpbmspLm5ldGxvYwogICAgICAgIGggPSB7CiAgICAgICAgICAgICJIb3N0IjogaG4sCiAgICAgICAgICAgICJDb25uZWN0aW9uIjogImtlZXAtYWxpdmUiLAogICAgICAgICAgICAiVXBncmFkZS1JbnNlY3VyZS1SZXF1ZXN0cyI6ICIxIiwKICAgICAgICAgICAgIlVzZXItQWdlbnQiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwNy4wLjAuMCBTYWZhcmkvNTM3LjM2IE5ldFR5cGUvV0lGSSBNaWNyb01lc3Nlbmdlci83LjAuMjAuMTc4MSgweDY3MDAxNDNCKSBXaW5kb3dzV2VjaGF0KDB4NjMwOTA2MjEpIFhXRUIvODM1MSBGbHVlIiwKICAgICAgICAgICAgIkFjY2VwdCI6ICJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgsYXBwbGljYXRpb24vc2lnbmVkLWV4Y2hhbmdlO3Y9YjM7cT0wLjkiLAogICAgICAgICAgICAiQWNjZXB0LUVuY29kaW5nIjogImd6aXAsIGRlZmxhdGUiLAogICAgICAgICAgICAiQWNjZXB0LUxhbmd1YWdlIjogInpoLUNOLHpoIiwKICAgICAgICAgICAgIkNvb2tpZSI6IGYieXNtX3VpZD17c2VsZi55c21fdWlkfSIsCiAgICAgICAgfQogICAgICAgIHIgPSBzYWZlX3JlcXVlc3QoIkdFVCIsIGxpbmssIGhlYWRlcnM9aCwgYWxsb3dfcmVkaXJlY3RzPUZhbHNlLCB2ZXJpZnk9RmFsc2UpCiAgICAgICAgIyBwcmludChyLnN0YXR1c19jb2RlKQogICAgICAgIExvY2F0aW9uID0gci5oZWFkZXJzLmdldCgiTG9jYXRpb24iKQogICAgICAgIHByaW50KGYi6LSm5Y+3W3tzZWxmLm5hbWV9XeW8gOWni+mYheivu+aWh+eroCAtIHtMb2NhdGlvbn0iKQogICAgICAgIHJldHVybiBMb2NhdGlvbgoKICAgIGRlZiB3aXRoZHJhd1Bvc3Qoc2VsZiwgZXhjaGFuZ2VQYXJhbXMpOgogICAgICAgIHUgPSBmImh0dHA6Ly97c2VsZi5kb21uYWluSG9zdH0veXVub25saW5lL3YxL3dpdGhkcmF3IgogICAgICAgIHAgPSBmInVuaW9uaWQ9e2V4Y2hhbmdlUGFyYW1zWyd1bmlvbmlkJ119JnNpZ25pZD17ZXhjaGFuZ2VQYXJhbXNbJ3JlcXVlc3RfaWQnXX0mdWE9MCZwdHlwZT0wJnBhY2NvdW50PSZwbmFtZT0iCiAgICAgICAgaWYgc2VsZi5hbGlBY2NvdW50IGFuZCBzZWxmLmFsaU5hbWU6CiAgICAgICAgICAgIHAgPSBmInVuaW9uaWQ9e2V4Y2hhbmdlUGFyYW1zWyd1bmlvbmlkJ119JnNpZ25pZD17ZXhjaGFuZ2VQYXJhbXNbJ3JlcXVlc3RfaWQnXX0mdWE9MiZwdHlwZT0xJnBhY2NvdW50PXtxdW90ZShzZWxmLmFsaUFjY291bnQpfSZwbmFtZT17cXVvdGUoc2VsZi5hbGlOYW1lKX0iCiAgICAgICAgciA9IHNhZmVfcmVxdWVzdCgKICAgICAgICAgICAgIlBPU1QiLAogICAgICAgICAgICB1LAogICAgICAgICAgICBoZWFkZXJzPXsKICAgICAgICAgICAgICAgICJBY2NlcHQiOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0LCAqLyo7IHE9MC4wMSIsCiAgICAgICAgICAgICAgICAiQWNjZXB0LUVuY29kaW5nIjogImd6aXAsIGRlZmxhdGUiLAogICAgICAgICAgICAgICAgIkFjY2VwdC1MYW5ndWFnZSI6ICJ6aC1DTix6aDtxPTAuOSIsCiAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsCiAgICAgICAgICAgICAgICAiQ29va2llIjogZiJ5c211aWQ9e3NlbGYueXNtX3VpZH07IGVqZWN0Q29kZT0xIiwKICAgICAgICAgICAgICAgICJIb3N0IjogZiJ7c2VsZi5kb21uYWluSG9zdH0iLAogICAgICAgICAgICAgICAgIk9yaWdpbiI6IGYiaHR0cDovL3tzZWxmLmRvbW5haW5Ib3N0fSIsCiAgICAgICAgICAgICAgICAiUHJveHktQ29ubmVjdGlvbiI6ICJrZWVwLWFsaXZlIiwKICAgICAgICAgICAgICAgICJSZWZlcmVyIjogZiJodHRwOi8ve3NlbGYuZG9tbmFpbkhvc3R9L3l1bm9ubGluZS92MS9leGNoYW5nZT91bmlvbmlkPXtleGNoYW5nZVBhcmFtc1sndW5pb25pZCddfSZyZXF1ZXN0X2lkPXtleGNoYW5nZVBhcmFtc1sncmVxdWVzdF9pZCddfSZxcmNvZGVfbnVtYmVyPTE2NjA3ODY0MzU4MTQ1NTg4IiwKICAgICAgICAgICAgICAgICJYLVJlcXVlc3RlZC1XaXRoIjogIlhNTEh0dHBSZXF1ZXN0IiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGF0YT1wLAogICAgICAgICAgICB2ZXJpZnk9RmFsc2UsCiAgICAgICAgKQogICAgICAgIHByaW50KGYi4pyFIOi0puWPt1t7c2VsZi5uYW1lfV0g5o+Q546w57uT5p6c77yaIiwgci5qc29uKClbIm1zZyJdKQoKICAgIGRlZiB3aXRoZHJhdyhzZWxmKToKICAgICAgICBnb2xkID0gaW50KGludChzZWxmLnJlbWFpbikgLyAxMDAwKSAqIDEwMDAKICAgICAgICBwcmludChmIui0puWPt1t7c2VsZi5uYW1lfV0g5pys5qyh5o+Q546w6YeR6aKdICIsIHNlbGYuYmFsYW5jZSwgIuWFgyArICIsIGdvbGQsICLph5HluIEiKQogICAgICAgIHF1ZXJ5ID0gdXJsc3BsaXQoc2VsZi5leGNoYW5nZVBhcmFtcykucXVlcnkKICAgICAgICBleGNoYW5nZVBhcmFtcyA9IHBhcnNlX3FzKHF1ZXJ5KQogICAgICAgICMg5bCG5YiX6KGo5YC86L2s5o2i5Li65a2X56ym5LiyCiAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZXhjaGFuZ2VQYXJhbXMuaXRlbXMoKToKICAgICAgICAgICAgZXhjaGFuZ2VQYXJhbXNba2V5XSA9IHZhbHVlWzBdCiAgICAgICAgd2l0aGRyYXdCYWxhbmNlID0gcm91bmQoKGludChzZWxmLnR4YnopIC8gMTAwMDApLCAzKQogICAgICAgIGlmIGdvbGQgb3IgKHNlbGYuYmFsYW5jZSA+PSB3aXRoZHJhd0JhbGFuY2UpOgogICAgICAgICAgICBpZiBnb2xkOgogICAgICAgICAgICAgICAgIyDlvIDlp4vmj5DnjrAKICAgICAgICAgICAgICAgIHUxID0gZiJodHRwOi8ve3NlbGYuZG9tbmFpbkhvc3R9L3l1bm9ubGluZS92MS91c2VyX2dvbGQiCiAgICAgICAgICAgICAgICBwMSA9IGYidW5pb25pZD17ZXhjaGFuZ2VQYXJhbXNbJ3VuaW9uaWQnXX0mcmVxdWVzdF9pZD17ZXhjaGFuZ2VQYXJhbXNbJ3JlcXVlc3RfaWQnXX0mZ29sZD17Z29sZH0iCiAgICAgICAgICAgICAgICByID0gc2FmZV9yZXF1ZXN0KAogICAgICAgICAgICAgICAgICAgICJQT1NUIiwKICAgICAgICAgICAgICAgICAgICB1MSwKICAgICAgICAgICAgICAgICAgICBkYXRhPXAxLAogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9ewogICAgICAgICAgICAgICAgICAgICAgICAiQWNjZXB0IjogImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCwgKi8qOyBxPTAuMDEiLAogICAgICAgICAgICAgICAgICAgICAgICAiQWNjZXB0LUVuY29kaW5nIjogImd6aXAsIGRlZmxhdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAiQWNjZXB0LUxhbmd1YWdlIjogInpoLUNOLHpoO3E9MC45IiwKICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLAogICAgICAgICAgICAgICAgICAgICAgICAiQ29va2llIjogZiJ5c211aWQ9e3NlbGYueXNtX3VpZH07IGVqZWN0Q29kZT0xIiwKICAgICAgICAgICAgICAgICAgICAgICAgIkhvc3QiOiBmIntzZWxmLmRvbW5haW5Ib3N0fSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJPcmlnaW4iOiBmImh0dHA6Ly97c2VsZi5kb21uYWluSG9zdH0iLAogICAgICAgICAgICAgICAgICAgICAgICAiUHJveHktQ29ubmVjdGlvbiI6ICJrZWVwLWFsaXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIlJlZmVyZXIiOiBmImh0dHA6Ly97c2VsZi5kb21uYWluSG9zdH0veXVub25saW5lL3YxL2V4Y2hhbmdle3NlbGYuZXhjaGFuZ2VQYXJhbXN9IiwKICAgICAgICAgICAgICAgICAgICAgICAgIlVzZXItQWdlbnQiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwNy4wLjAuMCBTYWZhcmkvNTM3LjM2IE5ldFR5cGUvV0lGSSBNaWNyb01lc3Nlbmdlci83LjAuMjAuMTc4MSgweDY3MDAxNDNCKSBXaW5kb3dzV2VjaGF0KDB4NjMwOTA3MWQpIFhXRUIvODQ2MSBGbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIlgtUmVxdWVzdGVkLVdpdGgiOiAiWE1MSHR0cFJlcXVlc3QiLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgdmVyaWZ5PUZhbHNlLAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHJlcyA9IHIuanNvbigpCiAgICAgICAgICAgICAgICAgICAgaWYgcmVzLmdldCgiZXJyY29kZSIpID09IDA6CiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhkcmF3QmFsYW5jZU51bSA9IHNlbGYuYmFsYW5jZSArIGZsb2F0KHJlc1siZGF0YSJdWyJtb25leSJdKQogICAgICAgICAgICAgICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYi4pyFIOi0puWPt1t7c2VsZi5uYW1lfV0g6YeR5biB5YWR5o2i5Li6546w6YeR5oiQ5Yqf77yM5byA5aeL5o+Q546w77yM6aKE6K6h5Yiw6LSmIHt3aXRoZHJhd0JhbGFuY2VOdW19IOWFgyA+Pj4gIgogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHdpdGhkcmF3QmFsYW5jZU51bSA8IHdpdGhkcmF3QmFsYW5jZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGYi6LSm5Y+3W3tzZWxmLm5hbWV9Xeayoeaciei+vuWIsOaPkOeOsOagh+WHhiB7d2l0aGRyYXdCYWxhbmNlfSDlhYMiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2l0aGRyYXdQb3N0KGV4Y2hhbmdlUGFyYW1zKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYi6LSm5Y+3W3tzZWxmLm5hbWV9XSDph5HluIHlhZHmjaLkuLrnjrDph5HlpLHotKXvvJoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgci50ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIiDmj5DnjrDlnLDlnYDvvJoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIOaPkOeOsOWPguaVsO+8miIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSwKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgICAgICMgcmFpc2UgZQogICAgICAgICAgICAgICAgICAgICMg5aSE55CG5byC5bi4CiAgICAgICAgICAgICAgICAgICAgcHJpbnQoZiLotKblj7dbe3NlbGYubmFtZX1dIOaPkOeOsOWksei0pe+8miIsIGUpCiAgICAgICAgICAgIHNlbGYud2l0aGRyYXdQb3N0KGV4Y2hhbmdlUGFyYW1zKQoKICAgIGRlZiBpbml0KHNlbGYpOgogICAgICAgIHRyeToKICAgICAgICAgICAgY2hhcmFjdGVycyA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cwogICAgICAgICAgICByID0gc2FmZV9yZXF1ZXN0KAogICAgICAgICAgICAgICAgIkdFVCIsCiAgICAgICAgICAgICAgICBmImh0dHBzOi8vbnNyLnpzZjIwMjNlNDU4LmNsb3VkL3l1bm9ubGluZS92MS9nZXRjaGF0c2l0ZT90PXt0aW1lLnRpbWUoKX0mY2lkPXsnJy5qb2luKHJhbmRvbS5jaG9pY2VzKGNoYXJhY3RlcnMsIGs9MzIpKX0mY29kZT0wODFrdFJGYTFUTTYwSDBncjRHYTFVeycnLmpvaW4ocmFuZG9tLmNob2ljZXMoY2hhcmFjdGVycywgaz0xMCkpfSZzdGF0ZT0xIiwKICAgICAgICAgICAgICAgIHZlcmlmeT1GYWxzZSwKICAgICAgICAgICAgKQogICAgICAgICAgICBzZWxmLmRvbW5haW5Ib3N0ID0gci5qc29uKClbImRhdGEiXVsibHVvZGkiXS5zcGxpdCgiLyIpWzJdCiAgICAgICAgICAgICMgcHJpbnQoci50ZXh0KQogICAgICAgICAgICBpZiB4eXl5ZFJlYWRQdXJlTG9nID09IEZhbHNlOgogICAgICAgICAgICAgICAgcHJpbnQoZiLotKblj7dbe3NlbGYubmFtZX1d5o+Q5Y+W5Yiw55qE5Z+f5ZCN77yae3NlbGYuZG9tbmFpbkhvc3R9IikKICAgICAgICAgICAgc2VsZi5oZWFkZXJzID0gewogICAgICAgICAgICAgICAgIkNvbm5lY3Rpb24iOiAia2VlcC1hbGl2ZSIsCiAgICAgICAgICAgICAgICAiQWNjZXB0IjogImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCwgKi8qOyBxPTAuMDEiLAogICAgICAgICAgICAgICAgIlVzZXItQWdlbnQiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwNy4wLjAuMCBTYWZhcmkvNTM3LjM2IE5ldFR5cGUvV0lGSSBNaWNyb01lc3Nlbmdlci83LjAuMjAuMTc4MSgweDY3MDAxNDNCKSBXaW5kb3dzV2VjaGF0KDB4NjMwOTA2MjEpIFhXRUIvODM1MSBGbHVlIiwKICAgICAgICAgICAgICAgICJYLVJlcXVlc3RlZC1XaXRoIjogIlhNTEh0dHBSZXF1ZXN0IiwKICAgICAgICAgICAgICAgICJSZWZlcmVyIjogZiJodHRwOi8ve3NlbGYuZG9tbmFpbkhvc3R9LyIsCiAgICAgICAgICAgICAgICAiT3JpZ2luIjogZiJodHRwOi8ve3NlbGYuZG9tbmFpbkhvc3R9IiwKICAgICAgICAgICAgICAgICMgIkhvc3QiOiBmIntzZWxmLmRvbW5haW5Ib3N0fSIsCiAgICAgICAgICAgICAgICAiQWNjZXB0LUVuY29kaW5nIjogImd6aXAsIGRlZmxhdGUiLAogICAgICAgICAgICAgICAgIkFjY2VwdC1MYW5ndWFnZSI6ICJ6aC1DTix6aCIsCiAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsCiAgICAgICAgICAgICAgICAiQ29va2llIjogZiJ5c21fdWlkPXtzZWxmLnlzbV91aWR9OyIsCiAgICAgICAgICAgIH0KICAgICAgICAgICAgIyDojrflj5ZyZXF1ZXN0SWQKICAgICAgICAgICAgc2VsZi5zaWduaWQgPSAiIgogICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKICAgICAgICAgICAgICAgIHIgPSBzYWZlX3JlcXVlc3QoCiAgICAgICAgICAgICAgICAgICAgIkdFVCIsCiAgICAgICAgICAgICAgICAgICAgZiJodHRwOi8ve3NlbGYuZG9tbmFpbkhvc3R9LyIsCiAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17CiAgICAgICAgICAgICAgICAgICAgICAgICJVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzIjogIjEiLAogICAgICAgICAgICAgICAgICAgICAgICAiVXNlci1BZ2VudCI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA3LjAuMC4wIFNhZmFyaS81MzcuMzYgTmV0VHlwZS9XSUZJIE1pY3JvTWVzc2VuZ2VyLzcuMC4yMC4xNzgxKDB4NjcwMDE0M0IpIFdpbmRvd3NXZWNoYXQoMHg2MzA5MDcxZCkgWFdFQi84NDYxIEZsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAiQWNjZXB0IjogInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOCxhcHBsaWNhdGlvbi9zaWduZWQtZXhjaGFuZ2U7dj1iMztxPTAuOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJBY2NlcHQtRW5jb2RpbmciOiAiZ3ppcCwgZGVmbGF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJBY2NlcHQtTGFuZ3VhZ2UiOiAiemgtQ04semg7cT0wLjkiLAogICAgICAgICAgICAgICAgICAgICAgICAiQ29va2llIjogZiJ5c211aWQ9e3NlbGYueXNtX3VpZH0iLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgdmVyaWZ5PUZhbHNlLAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgaHRtbHRleHQgPSByLnRleHQKICAgICAgICAgICAgICAgIGlmIHIuaGlzdG9yeToKICAgICAgICAgICAgICAgICAgICBmb3IgcmVzcCBpbiByLmhpc3Rvcnk6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICJvcGVuLndlaXhpbi5xcS5jb20iIGluIHJlc3AuaGVhZGVyc1siTG9jYXRpb24iXToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYi6LSm5Y+3W3tzZWxmLm5hbWV9XSBDb29raWXlt7Lov4fmnJ/vvIzor7fph43ov5vkuIDkuIvnvZHnq5nvvIzlsLHkvJroh6rliqjmm7TmlrBDb29raWXvvIjnm67liY3kuI3noa7lrprov4fmnJ/mmK/lm6DkuLroh6rlt7HmiYvliqjov5vljrvov4fkuobov5jmmK/ku4DkuYjlhbbku5bljp/lm6DvvIkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgICAgIHJlczEgPSByZS5zdWIoIlxzIiwgIiIsIGh0bWx0ZXh0KQogICAgICAgICAgICAgICAgc2lnbmlkbCA9IHJlLmZpbmRhbGwoJ1wpXHxcfCIoLio/KSI7JywgcmVzMSkKICAgICAgICAgICAgICAgICMgcHJpbnQoc2lnbmlkbCwgaHRtbHRleHQpCiAgICAgICAgICAgICAgICBpZiAi6K+l6LSm5Y+35a2Y5Zyo6L+d6KeE5pON5L2c77yM5bey6KKr5bCB56aBIiBpbiBodG1sdGV4dDoKICAgICAgICAgICAgICAgICAgICBwcmludChmIui0puWPt1t7c2VsZi5uYW1lfV0g5a2Y5Zyo6L+d6KeE5pON5L2c77yM5bey6KKr5bCB56aB77yM5YeJ5YeJ77yM6L+H5Lik5Liq5pyI5YaN55yL55yL6Kej5rKh6Kej5bCB5ZCnfiAiKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgICAgaWYgc2lnbmlkbCA9PSBbXToKICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5zaWduaWQgPSBzaWduaWRsWzBdCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIyDojrflj5bmj5DnjrDpobXpnaLlnLDlnYAKICAgICAgICAgICAgciA9IHNhZmVfcmVxdWVzdCgKICAgICAgICAgICAgICAgICJHRVQiLAogICAgICAgICAgICAgICAgZiJodHRwOi8ve3NlbGYuZG9tbmFpbkhvc3R9Lz9jYXRlPTAiLAogICAgICAgICAgICAgICAgaGVhZGVycz17CiAgICAgICAgICAgICAgICAgICAgIlVwZ3JhZGUtSW5zZWN1cmUtUmVxdWVzdHMiOiAiMSIsCiAgICAgICAgICAgICAgICAgICAgIlVzZXItQWdlbnQiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwNy4wLjAuMCBTYWZhcmkvNTM3LjM2IE5ldFR5cGUvV0lGSSBNaWNyb01lc3Nlbmdlci83LjAuMjAuMTc4MSgweDY3MDAxNDNCKSBXaW5kb3dzV2VjaGF0KDB4NjMwOTA3MWQpIFhXRUIvODQ2MSBGbHVlIiwKICAgICAgICAgICAgICAgICAgICAiQWNjZXB0IjogInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOCxhcHBsaWNhdGlvbi9zaWduZWQtZXhjaGFuZ2U7dj1iMztxPTAuOSIsCiAgICAgICAgICAgICAgICAgICAgIkFjY2VwdC1FbmNvZGluZyI6ICJnemlwLCBkZWZsYXRlIiwKICAgICAgICAgICAgICAgICAgICAiQWNjZXB0LUxhbmd1YWdlIjogInpoLUNOLHpoO3E9MC45IiwKICAgICAgICAgICAgICAgICAgICAiQ29va2llIjogZiJ5c211aWQ9e3NlbGYueXNtX3VpZH0iLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHZlcmlmeT1GYWxzZSwKICAgICAgICAgICAgKQogICAgICAgICAgICBodG1sdGV4dCA9IHIudGV4dAogICAgICAgICAgICByZWFkX2p1bXBfcmVhZF90ZXh0ID0gZXh0cmFjdF9taWRkbGVfdGV4dCgKICAgICAgICAgICAgICAgIGh0bWx0ZXh0LAogICAgICAgICAgICAgICAgImZ1bmN0aW9uIHJlYWRfanVtcF9yZWFkKHR5cGUsdGltZSl7IiwKICAgICAgICAgICAgICAgICJzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsiLAogICAgICAgICAgICApCiAgICAgICAgICAgIGlmIHJlYWRfanVtcF9yZWFkX3RleHQ6CiAgICAgICAgICAgICAgICByZWFkSnVtcFBhdGggPSBleHRyYWN0X21pZGRsZV90ZXh0KAogICAgICAgICAgICAgICAgICAgIHJlYWRfanVtcF9yZWFkX3RleHQsICJ1cmw6IGRvbWFpbisnIiwgIicsIgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgaWYgcmVhZEp1bXBQYXRoOgogICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZEp1bXBQYXRoID0gcmVhZEp1bXBQYXRoCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHByaW50KAogICAgICAgICAgICAgICAgICAgICAgICBmIui0puWPt1t7c2VsZi5uYW1lfV0g5Yid5aeL5YyW5aSx6LSl77yM6K+35omL5Yqo6K6/6Zeu5LiL56Gu6K6k6aG16Z2i5rKh5bSp5rqDIOaIluiAhSDnqI3lkI7lho3or5XlkKfvvIzkuIDnm7TkuI3ooYzvvIzor7fliY3lvoBUR+e+pOWPjemmiH4gIgogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGlmICLlrZjlnKjov53op4Tmk43kvZwiIGluIGh0bWx0ZXh0OgogICAgICAgICAgICAgICAgICAgIHByaW50KGYi6LSm5Y+3W3tzZWxmLm5hbWV9XSDooqvmo4DmtYvliLDkuobvvIzlt7Lnu4/ooqvlsIHvvIznu4jmraLku7vliqHvvIzlv6vljrvmj5DphpLlpKflrrblkKd+ICIpCiAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICAgICAgICAgICAgIGYi6LSm5Y+3W3tzZWxmLm5hbWV9XSDliJ3lp4vljJblpLHotKXvvIzor7fmiYvliqjorr/pl67kuIvnoa7orqTpobXpnaLmsqHltKnmuoMg5oiW6ICFIOeojeWQjuWGjeivleWQp++8jOS4gOebtOS4jeihjO+8jOivt+WJjeW+gFRH576k5Y+N6aaIfiAiCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICByZXMxID0gcmUuc3ViKCJccyIsICIiLCBodG1sdGV4dCkKICAgICAgICAgICAgc2lnbmlkbCA9IHJlLmZpbmRhbGwoJy95dW5vbmxpbmUvdjEvZXhjaGFuZ2UoLio/KSInLCByZXMxKQogICAgICAgICAgICAjIHByaW50KCLliJ3lp4vljJYg5o+Q546w5Y+C5pWwOiIsIHNpZ25pZGxbMF0pCiAgICAgICAgICAgIGlmIHNpZ25pZGwgPT0gW106CiAgICAgICAgICAgICAgICBwcmludChmIui0puWPt1t7c2VsZi5uYW1lfV3liJ3lp4vljJYg5o+Q546w5Y+C5pWwIOWksei0pSzotKblj7flvILluLgiKQogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLmV4Y2hhbmdlUGFyYW1zID0gc2lnbmlkbFswXQogICAgICAgICAgICByZXdhcmROdW1SZXN1bHQgPSByZS5zZWFyY2goCiAgICAgICAgICAgICAgICAnZGl2IGNsYXNzPSJudW0gbnVtYmVyIHJld2FyZE51bSI+KC4qPyk8LycsIGh0bWx0ZXh0CiAgICAgICAgICAgICkKICAgICAgICAgICAgIyBwcmludCgi5Yid5aeL5YyWIOaPkOeOsOWPguaVsDoiLCBzaWduaWRsWzBdKQogICAgICAgICAgICBpZiByZXdhcmROdW1SZXN1bHQgPT0gW106CiAgICAgICAgICAgICAgICBwcmludChmIui0puWPt1t7c2VsZi5uYW1lfV3liJ3lp4vljJYg5o+Q546w5Y+C5pWwIOWksei0pSzotKblj7flvILluLgiKQogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLmJhbGFuY2UgPSBmbG9hdChyZXdhcmROdW1SZXN1bHRbMV0pCiAgICAgICAgICAgIGlmIHNlbGYuc2lnbmlkID09ICIiOgogICAgICAgICAgICAgICAgcHJpbnQoZiLotKblj7dbe3NlbGYubmFtZX1d5Yid5aeL5YyWIHJlcXVlc3RJZCDlpLHotKUs6LSm5Y+35byC5bi4IikKICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIyByYWlzZSBlCiAgICAgICAgICAgIHByaW50KGYi6LSm5Y+3W3tzZWxmLm5hbWV9XeWIneWni+WMluWksei0pSzor7fmo4Dmn6XkvaDnmoRjayIpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgaWYgc2VsZi5pbml0KCk6CiAgICAgICAgICAgIHNlbGYudXNlcl9pbmZvKCkKICAgICAgICAgICAgc2VsZi5oYXNXZWNoYXQoKQogICAgICAgICAgICBzZWxmLmdvbGQoKQogICAgICAgICAgICBjdXJyZW50SG91ciA9IGRhdGV0aW1lLm5vdygpLmhvdXIKICAgICAgICAgICAgaWYgKGN1cnJlbnRIb3VyIDwgcmVhZFRpbWVSYW5nZVswXSkgb3IgKGN1cnJlbnRIb3VyID4gcmVhZFRpbWVSYW5nZVsxXSk6CiAgICAgICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICAgICBmIui0puWPt1t7c2VsZi5uYW1lfV0g5qOA5rWL5Yiw5b2T5YmN5pe26Ze05LiN5Zyo6K6+5a6a55qE6ZiF6K+75pe26Ze06IyD5Zu0IHtyZWFkVGltZVJhbmdlWzBdfS17cmVhZFRpbWVSYW5nZVsxXX3lsI/ml7Yg5YaF77yM6Lez6L+H6ZiF6K+7IgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc2VsZi5yZWFkKCkKICAgICAgICAgICAgdGltZS5zbGVlcCgzKQogICAgICAgICAgICBzZWxmLmdvbGQoKQogICAgICAgICAgICB0aW1lLnNsZWVwKDMpCiAgICAgICAgICAgIHNlbGYud2l0aGRyYXcoKQoKCmRlZiBnZXROZXdJbnZpdGVVcmwoKToKICAgIHIgPSBzYWZlX3JlcXVlc3QoCiAgICAgICAgIkdFVCIsICJodHRwczovL3d3dy5maWxlc21lai5jbi93YWlkb21haW4ucGhwIiwgdmVyaWZ5PUZhbHNlCiAgICApLmpzb24oKQogICAgaWYgci5nZXQoImNvZGUiKSA9PSAwOgogICAgICAgIG5ld0VudHJ5VXJsID0gci5nZXQoImRhdGEiKS5nZXQoImx1b2RpIikKICAgICAgICBwYXJzZWRfdXJsID0gdXJscGFyc2UobmV3RW50cnlVcmwpCiAgICAgICAgaG9zdCA9IHBhcnNlZF91cmwuaG9zdG5hbWUKICAgICAgICByZXR1cm4gZiJodHRwOi8vdTdkcy5zeTY3My5zaG9wL3l1bm9ubGluZS92MS9hdXRoLzI2MzliYjk1ZGFiYTFkOTllNTMzOGE4YzJlMjFlMmYwP2NvZGV1cmw9dTdkcy5zeTY3My5zaG9wJmNvZGV1c2VyaWQ9MiZ0aW1lPTE3MDkwMjExNzYiLnJlcGxhY2UoCiAgICAgICAgICAgICJ1N2RzLnN5NjczLnNob3AiLCBob3N0IG9yICJ1N2RzLnN5NjczLnNob3AiCiAgICAgICAgKQogICAgZWxzZToKICAgICAgICByZXR1cm4gImh0dHA6Ly91N2RzLnN5NjczLnNob3AveXVub25saW5lL3YxL2F1dGgvMjYzOWJiOTVkYWJhMWQ5OWU1MzM4YThjMmUyMWUyZjA/Y29kZXVybD11N2RzLnN5NjczLnNob3AmY29kZXVzZXJpZD0yJnRpbWU9MTcwOTAyMTE3NiIKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIyBhcHBUb2tlbu+8mui/meS4quaYr+Whq3d4cHVzaGVy55qEYXBwVG9rZW4KICAgICMgdG9waWNJZHPvvJrov5nkuKrmmK93eHB1c2hlcueahHRvcGljSWRz5pS55oiQ5L2g6Ieq5bex55qECiAgICAjIOekuuS+izog5bm755SfI29aZEJwMDRwc2dvTjhkTjFFVF91bzgxTlRDMzEjMzAwMCNBVF9VeUlsYmoyMjIybnluRVNiTTJ2SnlBN0RybVVtVVhEIzExNjg2CiAgICBhY2NvdW50cyA9IG9zLmdldGVudigieHl5eWQiKQogICAgaW52aXRlVXJsID0gZ2V0TmV3SW52aXRlVXJsKCkKICAgIGlmIGFjY291bnRzIGlzIE5vbmU6CiAgICAgICAgcHJpbnQoZiLkvaDmsqHmnInloavlhaV4eXl5ZO+8jOWSi+i/kOihjO+8n1xu6LWw5LiL6YKA6K+35ZGX77yae2ludml0ZVVybH0iKQogICAgZWxzZToKICAgICAgICAjIOiOt+WPlueOr+Wig+WPmOmHj+eahOWAvO+8jOW5tuaMieaMh+WumuWtl+espuS4suWIhuWJsuaIkOWkmuS4qui0puWPt+eahOWPguaVsOe7hOWQiAogICAgICAgIGFjY291bnRzX2xpc3QgPSBvcy5lbnZpcm9uLmdldCgieHl5eWQiKS5zcGxpdCgiJiIpCgogICAgICAgICMg6L6T5Ye65pyJ5Yeg5Liq6LSm5Y+3CiAgICAgICAgbnVtX29mX2FjY291bnRzID0gbGVuKGFjY291bnRzX2xpc3QpCiAgICAgICAgbW9yZVRpcCA9ICIiCiAgICAgICAgaWYgcmVhZFBvc3REZWxheSA+IDA6CiAgICAgICAgICAgIG1vcmVUaXAgPSBmIuW3suiuvue9rueahOaOqOmAgeaWh+eroOetieW+heeCueWHu+aXtumXtOS4uiB7cmVhZFBvc3REZWxheX3np5IgIgogICAgICAgIHByaW50KAogICAgICAgICAgICBmIuW9k+WJjeiEmuacrOeJiOacrO+8muWwj+mYhemYhemYheivuyBWMS44MCBcbuW5u+eUn+aPkOekuu+8muiOt+WPluWIsCB7bnVtX29mX2FjY291bnRzfSDkuKrotKblj7cge21vcmVUaXB9XG7ms6jlhozlnLDlnYDvvJp7aW52aXRlVXJsfSIKICAgICAgICApCgogICAgICAgICMg6YGN5Y6G5omA5pyJ6LSm5Y+3CiAgICAgICAgZm9yIGksIGFjY291bnQgaW4gZW51bWVyYXRlKGFjY291bnRzX2xpc3QsIHN0YXJ0PTEpOgogICAgICAgICAgICAjIHByaW50KCJcbiIpCiAgICAgICAgICAgIHByaW50KCItIiAqIDUwKQogICAgICAgICAgICBwcmludChmIui0puWPt1t7YWNjb3VudC5zcGxpdCgnIycpWzBdfV3lvIDlp4vmiafooYzku7vliqEgPj4+IikKICAgICAgICAgICAgIyBwcmludCgiXG4iKQogICAgICAgICAgICAjIOaMiUDnrKblj7fliIblibLlvZPliY3otKblj7fnmoTkuI3lkIzlj4LmlbAKICAgICAgICAgICAgdmFsdWVzID0gYWNjb3VudC5zcGxpdCgiIyIpCiAgICAgICAgICAgICMgcHJpbnQodmFsdWVzKQogICAgICAgICAgICBjZyA9IHt9CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGlmIGxlbih2YWx1ZXMpID09IDM6CiAgICAgICAgICAgICAgICAgICAgY2cgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogdmFsdWVzWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAieXNtX3VpZCI6IHZhbHVlc1sxXSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuaW9uSWQiOiB2YWx1ZXNbMl0sCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eGJ6IjogMzAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgImFsaUFjY291bnQiOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgImFsaU5hbWUiOiAiIiwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGNnID0gewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6IHZhbHVlc1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgInlzbV91aWQiOiB2YWx1ZXNbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmlvbklkIjogdmFsdWVzWzJdLAogICAgICAgICAgICAgICAgICAgICAgICAidHhieiI6IHZhbHVlc1szXSBvciAzMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAiYWxpQWNjb3VudCI6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAiYWxpTmFtZSI6ICIiLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgIyDlpITnkIblvILluLgKICAgICAgICAgICAgICAgIHByaW50KCLlubvnlJ/pgLzpgLzlj6g6IiwgIumFjee9rueahOWVpeeOqeaEj++8jOe8uuWPguaVsOS6huaGqOaJue+8jOeci+a4heiEmuacrOivtOaYju+8gSIpCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBjZ1siYXBwVG9rZW4iXSA9ICIiCiAgICAgICAgICAgIGNnWyJ0b3BpY0lkcyJdID0gIiIKICAgICAgICAgICAgIyBwcmludCgi5omL5Yqo77yaIiwgbGVuKHZhbHVlcyksIHZhbHVlc1s0XSkKICAgICAgICAgICAgaWYgbGVuKHZhbHVlcykgPj0gNToKICAgICAgICAgICAgICAgIGlmIHZhbHVlc1s0XToKICAgICAgICAgICAgICAgICAgICBjZ1siYXBwVG9rZW4iXSA9IHZhbHVlc1s0XQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgY2dbImFwcFRva2VuIl0gPSB3eHB1c2hlckFwcFRva2VuCiAgICAgICAgICAgIGlmIGxlbih2YWx1ZXMpID49IDY6CiAgICAgICAgICAgICAgICBpZiB2YWx1ZXNbNV06CiAgICAgICAgICAgICAgICAgICAgY2dbInRvcGljSWRzIl0gPSB2YWx1ZXNbNV0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGNnWyJ0b3BpY0lkcyJdID0gd3hwdXNoZXJUb3BpY0lkCiAgICAgICAgICAgIGlmIGxlbih2YWx1ZXMpID49IDc6CiAgICAgICAgICAgICAgICBpZiB2YWx1ZXNbNl06CiAgICAgICAgICAgICAgICAgICAgY2dbImFsaU5hbWUiXSA9IHZhbHVlc1s2XQogICAgICAgICAgICBpZiBsZW4odmFsdWVzKSA+PSA4OgogICAgICAgICAgICAgICAgaWYgdmFsdWVzWzddOgogICAgICAgICAgICAgICAgICAgIGNnWyJhbGlBY2NvdW50Il0gPSB2YWx1ZXNbN10KICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgaWYgd2VjaGF0QnVzc2luZXNzS2V5ID09ICIiOgogICAgICAgICAgICAgICAgICAgIGlmIGNnWyJhcHBUb2tlbiJdLnN0YXJ0c3dpdGgoIkFUXyIpID09IEZhbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBwcmludChmIuW5u+eUn+aPkOekuu+8jOi0puWPt1t7YWNjb3VudC5zcGxpdCgnIycpWzBdfV0gd3hwdXNoIOmFjee9rumUmeivr++8jOW/q+S7lOe7hueci+WktOmDqOivtOaYju+8gSIpCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgaWYgKGNnWyJhcHBUb2tlbiJdLnN0YXJ0c3dpdGgoIkFUXyIpID09IEZhbHNlKSBvciAoCiAgICAgICAgICAgICAgICAgICAgICAgIGNnWyJ0b3BpY0lkcyJdLmlzZGlnaXQoKSA9PSBGYWxzZQogICAgICAgICAgICAgICAgICAgICk6CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGYi5bm755Sf5o+Q56S677yM6LSm5Y+3W3thY2NvdW50LnNwbGl0KCcjJylbMF19XSB3eHB1c2gg6YWN572u6ZSZ6K+v77yM5b+r5LuU57uG55yL5aS06YOo6K+05piO77yBIikKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGFwaSA9IEhIWUQoY2cpCiAgICAgICAgICAgICAgICBpZiBjZ1siYWxpTmFtZSJdIGFuZCBjZ1siYWxpQWNjb3VudCJdOgogICAgICAgICAgICAgICAgICAgIHByaW50KAogICAgICAgICAgICAgICAgICAgICAgICBmIuW5u+eUn+aPkOekuu+8jOi0puWPt1t7YWNjb3VudC5zcGxpdCgnIycpWzBdfV0g6YeH55So5LqGIOaUr+S7mOWuneaPkOeOsO+8jOWnk+WQje+8mntjZ1snYWxpTmFtZSddfe+8jOi0puaIt++8mntjZ1snYWxpQWNjb3VudCddfSIKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHByaW50KGYi5bm755Sf5o+Q56S677yM6LSm5Y+3W3thY2NvdW50LnNwbGl0KCcjJylbMF19XSDph4fnlKjkuoYg5b6u5L+h5o+Q546wIikKICAgICAgICAgICAgICAgIGFwaS5ydW4oKQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICBpZiAiRXhwZWN0aW5nIHZhbHVlOiBsaW5lIDEgY29sdW1uIDEiIGluIHN0cihlKToKICAgICAgICAgICAgICAgICAgICBwcmludChmIuW5u+eUn+aPkOekuu+8jOi0puWPt1t7YWNjb3VudC5zcGxpdCgnIycpWzBdfV0g55aR5Ly8IHVuaW9uSWTlh7rplJnvvIzmjaLkuIDkuKrlkKfvvIEiKQogICAgICAgICAgICAgICAgZWxpZiAibGluaycgaXMgbm90IGRlZmluZWQiIGluIHN0cihlKToKICAgICAgICAgICAgICAgICAgICBwcmludCgKICAgICAgICAgICAgICAgICAgICAgICAgZiLlubvnlJ/mj5DnpLrvvIzotKblj7dbe2FjY291bnQuc3BsaXQoJyMnKVswXX1dIOeWkeS8vCDmlrDlj7fnmoTmn5Dnp43ljp/lm6Dlr7zoh7TnmoTml6Dms5XpmIXor7vvvIzor7fmiYvliqjpmIXor7vkuKTnr4flho3or5Xor5XlkKfvvIEiCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBwcmludChmIuW5u+eUn+aPkOekuu+8jOi0puWPt1t7YWNjb3VudC5zcGxpdCgnIycpWzBdfV0g5Ye66ZSZ5ZWm77yM6K+35bCG5LiL6Z2i5oql6ZSZ5oiq5Zu+5Y+R5YiwdGfkuqTmtYHnvqQ6IikKICAgICAgICAgICAgICAgIHJhaXNlIGUKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICMgcHJpbnQoIlxuIikKICAgICAgICAgICAgcHJpbnQoIi0iICogNTApCiAgICAgICAgICAgIHByaW50KGYi6LSm5Y+3W3thY2NvdW50LnNwbGl0KCcjJylbMF19XeaJp+ihjOS7u+WKoeWujOavle+8gSIpCiAgICAgICAgICAgICMgcHJpbnQoIlxuIikK'))
except Exception as e:
print('脚本执行出错:', str(e))