YTo4OntzOjQ6Im5hbWUiO3M6MTI6Im9iMV9tb2RpZmllZCI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMzEiO3M6NjoiYXV0aG9yIjtzOjE0OiJIZW5yaWsgSvZuc3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyNToiaHR0cDovL3Jpc2UubGV3YW5kZXIuY29tLyI7czoxMToiZGVzY3JpcHRpb24iO3M6NzM6Ik91dHB1dHMgd2hlbiB0aGUgYXJ0aWNsZSB3YXMgbGFzdCBtb2RpZmllZCBvciB0aGUgYXV0aG9yIHdobyBtb2RpZmllZCBpdC4iO3M6NDoiaGVscCI7czoyMzgxOiIKCTxoMT5TdW1tYXJ5PC9oMT4KCgk8cD5PdXRwdXRzIHdoZW4gdGhlIGFydGljbGUgd2FzIGxhc3QgbW9kaWZpZWQuIFRoZSB3aG9sZSB0YWcgd29ya3MgZXhhY3RseSBsaWtlIHR4cDpwb3N0ZWQ8YnIgLz4KZXhjZXB0IHRoYXQgaXQgb3V0cHV0cyBsYXN0IG1vZGlmaWVkIGluc3RlYWQuPC9wPgoKCTxoMT5BdHRyaWJ1dGVzPC9oMT4KCgk8aDI+Zm9ybWF0PC9oMj4KCgk8cD5PdmVycmlkZXMgdGhlIGZvcm1hdCBzZXQgaW4gdGhlIFRleHRwYXR0ZXJuIHByZWZlcmVuY2VzLjwvcD4KCgk8dWw+Cgk8bGk+PGVtPnNpbmNlPC9lbT4gJiM4MjExOyBvdXRwdXRzIHdoYXQgdGltZSBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZWRpdC48L2xpPgoJCTxsaT5fW2RhdGVmb3JtYXRdXyAmIzgyMTE7IG91dHB1dHMgYW55IGZvcm1hdCB1c2luZyB0aGUgPGEgaHJlZj0iaHR0cDovL3NlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRhdGUucGhwIj5QSFAgZGF0ZTwvYT4gZm9ybWF0LjwvbGk+CgkJPGxpPjxlbT5hdXRob3I8L2VtPiAmIzgyMTE7IE91dHB1dCB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIGluc3RlYWQgb2YgdGhlIGRhdGUuPC9saT4KCTwvdWw+CgoJPGgyPm91dHB1dDwvaDI+CgoJPHA+V2hlbiB0byBvdXRwdXQgYW55dGhpbmcuPC9wPgoKCTx1bD4KCTxsaT48ZW0+YWx3YXlzPC9lbT4gJiM4MjExOyBBbHdheXMgb3V0cHV0IChkZWZhdWx0KS48L2xpPgoJCTxsaT48ZW0+ZGlmZmVyczwvZW0+ICYjODIxMTsgT3V0cHV0IGlmIG1vZGlmaWVkIGRhdGUgZGlmZmVycyBmcm9tIHRoZSBwb3N0ZWQgb25lLjwvbGk+Cgk8L3VsPgoKCTxoMj5zdGFydHRleHQ8L2gyPgoKCTxwPkFkZCB0ZXh0IGJlZm9yZSB0aGUgb3V0cHV0LjwvcD4KCgk8aDI+d3JhcHRhZzwvaDI+CgoJPHA+U3RhbmRhcmQgYXR0cmlidXRlLjwvcD4KCgk8aDI+bGFuZzwvaDI+CgoJPHA+U3RhbmRhcmQgYXR0cmlidXRlLjwvcD4KCgk8aDE+RXhhbXBsZXM8L2gxPgoKCTxwPjxzcGFuIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyBib3JkZXI6IDFweCBzb2xpZCAjOTk5OyBiYWNrZ3JvdW5kOiAjZWVlOyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiAxMHB4IDAgMCAwOyB0ZXh0LWluZGVudDogMDsgdGV4dC1hbGlnbjogbGVmdDsgY29sb3I6ICM2MDA7d2lkdGg6NjAwcHg7Ij4gPGNvZGU+Jmx0O3R4cDpvYjFfbW9kaWZpZWQgZm9ybWF0PSJZIiAvJmd0OzwvY29kZT4gPC9zcGFuPjxiciAvPgpUaGlzIHdvdWxkIG91dHB1dCBpZiB0aGUgYXJ0aWNsZSB3YXMgbGFzdCBtb2RpZmVkIDZ0aCBvZiBmZWJ1YXJ5IDIwMDM6PGJyIC8+CjxiciAvPgoyMDAzPC9wPgoKCTxwPjxzcGFuIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyBib3JkZXI6IDFweCBzb2xpZCAjOTk5OyBiYWNrZ3JvdW5kOiAjZWVlOyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiAxMHB4IDAgMCAwOyB0ZXh0LWluZGVudDogMDsgdGV4dC1hbGlnbjogbGVmdDsgY29sb3I6ICM2MDA7d2lkdGg6NjAwcHg7Ij4gPGNvZGU+Jmx0O3R4cDpvYjFfbW9kaWZpZWQgZm9ybWF0PSJhdXRob3IiIC8mZ3Q7PC9jb2RlPiA8L3NwYW4+PGJyIC8+ClRoaXMgd291bGQgb3V0cHV0IGlmIHRoZSBhdXRob3Igd2FzIG1lOjxiciAvPgpIZW5yaWsgSiZvdW1sO25zc29uPC9wPgoKCTxwPjxwPjxzcGFuIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyBib3JkZXI6IDFweCBzb2xpZCAjOTk5OyBiYWNrZ3JvdW5kOiAjZWVlOyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiAxMHB4IDAgMCAwOyB0ZXh0LWluZGVudDogMDsgdGV4dC1hbGlnbjogbGVmdDsgY29sb3I6ICM2MDA7d2lkdGg6NjAwcHg7Ij4gPGNvZGU+Jmx0O3R4cDpvYjFfbW9kaWZpZWQgZm9ybWF0PSJhdXRob3IiIHN0YXJ0dGV4dD0iTGFzdCBtb2RpZmllZCBieSAiIC8mZ3Q7Jmx0O3R4cDpvYjFfbW9kaWZpZWQgZm9ybWF0PSJZLW0tZCBIOmkiIHN0YXJ0dGV4dD0iIGF0ICIgLyZndDs8L2NvZGU+IDwvc3Bhbj48YnIgLz4KVGhpcyB3b3VsZCBvdXRwdXQgaWYgdGhlIGF1dGhvciB3YXMgbWU6PGJyIC8+Ckxhc3QgbW9kaWZpZWQgYnkgSGVucmlrIEomb3VtbDtuc3NvbiBhdCAyMDA0LTA5LTEwIDIyOjI5LjwvcD4KCgk8aDE+Q2hhbmdlbG9nPC9oMT4KCgk8dWw+Cgk8bGk+djAuMzEgJiM4MjExOyBGaXhlZCBhIGJ1ZyB3aXRoIHRoZSAkZGlmZmVyc0AgYXR0cmlidXRlLjwvbGk+CgkJPGxpPnYwLjMgJiM4MjExOyBBZGRlZCA8Y29kZT5zdGFydHRleHQ8L2NvZGU+IGF0dHJpYnV0ZS48L2xpPgoJCTxsaT52MC4yICYjODIxMTsgQWx0ZXJlZCBzeW50YXggZm9yIDxjb2RlPmZvcm1hdDwvY29kZT4sIGFkZGVkIDxjb2RlPm91dHB1dDwvY29kZT4gYXR0cmlidXRlLjwvbGk+CgkJPGxpPnYwLjEgJiM4MjExOyBJbml0aWFsIHJlbGVhc2U8L2xpPgoJPC91bD4KCgoKICI7czo0OiJjb2RlIjtzOjE1Nzk6IgpmdW5jdGlvbiBvYjFfbW9kaWZpZWQoJGF0dHMpIHsKCQlnbG9iYWwgJHRoaXNhcnRpY2xlLCRkYXRlZm9ybWF0LCRhcmNoaXZlX2RhdGVmb3JtYXQsJHRpbWVvZmZzZXQsJHBnLCRpZCwkYzsKCQlpZiAoaXNfYXJyYXkoJGF0dHMpKSBleHRyYWN0KCRhdHRzKTsKCQkkb3V0cHV0ID0gKGVtcHR5KCRvdXRwdXQpKSA/ICdhbHdheXMnIDogJG91dHB1dDsKCgkJZ2xvYmFsICR0aGlzYXJ0aWNsZSwkZGF0ZWZvcm1hdCwkYXJjaGl2ZV9kYXRlZm9ybWF0LCR0aW1lb2Zmc2V0LCRwZywkaWQsJGM7CgkJaWYgKGlzX2FycmF5KCRhdHRzKSkgZXh0cmFjdCgkYXR0cyk7CgkJJGF1dGhvciA9IChlbXB0eSgkYXV0aG9yKSkgPyAnMCcgOiAkYXV0aG9yOwoJCWlmKCRhdXRob3IpewoJCQkkbGFzdE1vZEF1dGhvciA9IGZldGNoKCdMYXN0TW9kSUQnLCd0ZXh0cGF0dGVybicsJ0lEJywkdGhpc2FydGljbGVbJ3RoaXNpZCddKTsKCQkJJGRhdGVfb3V0ID0gZmV0Y2goJ1JlYWxOYW1lJywndHhwX3VzZXJzJywnbmFtZScsJGxhc3RNb2RBdXRob3IpOwoJCX1lbHNlewoJCQkkbGFzdE1vZCA9IGZldGNoKCdMYXN0TW9kJywndGV4dHBhdHRlcm4nLCdJRCcsJHRoaXNhcnRpY2xlWyd0aGlzaWQnXSk7CgkJCSRsYXN0TW9kID0gc3RydG90aW1lKCRsYXN0TW9kKTsKCQkJJGRhdGVfb2Zmc2V0ID0gJGxhc3RNb2QgKyAkdGltZW9mZnNldDsKCgkJCWlmKCFlbXB0eSgkZm9ybWF0KSkgewoKCQkJCWlmKCRmb3JtYXQ9PSdzaW5jZScpIHsKCgkJCQkJJGRhdGVfb3V0ID0gc2luY2UoJGxhc3RNb2QpOwoKCQkJCX0gZWxzZSB7CgoJCQkJCSRkYXRlX291dCA9IGRhdGUoJGZvcm1hdCwkZGF0ZV9vZmZzZXQpOwoKCQkJCX0KCgkJCX0gZWxzZSB7CgoJCQkJaWYgKCRwZyBvciAkaWQgb3IgJGMpIHsKCgkJCQkJJGRhdGVmb3JtYXQgPSAkYXJjaGl2ZV9kYXRlZm9ybWF0OwoJCQkJfQoKCQkJCWlmKCRkYXRlZm9ybWF0ID09ICJzaW5jZSIpIHsKCgkJCQkJJGRhdGVfb3V0ID0gc2luY2UoJGxhc3RNb2QpOwoKCQkJCX0gZWxzZSB7CgoJCQkJCSRkYXRlX291dCA9IGRhdGUoJGRhdGVmb3JtYXQsJGRhdGVfb2Zmc2V0KTsKCQkJCX0KCQkJfQoJCQlpZiAoIWVtcHR5KCRsYW5nKSkgewoKCQkJCWlmIChlbXB0eSgkR0xPQkFMU1snZGF0ZV9sYW5nJ10pKSB7CgoJCQkJCSRkYXRlX2xhbmcgPSBsb2FkX2xhbmcoJGxhbmcuJ19kYXRlcycpOwoKCQkJCX0gZWxzZSBnbG9iYWwgJGRhdGVfbGFuZzsKCgkJCQlpZiAoJGRhdGVfbGFuZykgewoKCQkJCQlmb3JlYWNoICgkZGF0ZV9sYW5nIGFzICRrID0+ICR2KSB7CgoJCQkJCQkkZGF0ZV9vdXQgPSBzdHJfcmVwbGFjZSgkaywkdiwkZGF0ZV9vdXQpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQlpZigkb3V0cHV0PT0iZGlmZmVycyIpewoJCQlpZigkbGFzdE1vZD09JHRoaXNhcnRpY2xlWyJwb3N0ZWQiXSkgcmV0dXJuICIiOwoJCX0KCQlpZighZW1wdHkoJHN0YXJ0dGV4dCkpICRkYXRlX291dCA9ICRzdGFydHRleHQuJGRhdGVfb3V0OwoJCWlmKCFlbXB0eSgkd3JhcHRhZykpICRkYXRlX291dCA9IHRhZygkZGF0ZV9vdXQsJHdyYXB0YWcpOwoKCQlyZXR1cm4gJGRhdGVfb3V0Owp9CgoiO3M6MzoibWQ1IjtzOjMyOiIyZjM2NGQxOTJlMDg2MDMwMjM4ZDQwOWIxMzJkNDM2OSI7fQ==