Name: series-workflowqd2wq Phase: Failed StartedAt: 2026-07-09 03:15:54 +0000 UTC FinishedAt: 2026-07-09 03:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd2wq[0] Phase: Succeeded StartedAt: 2026-07-09 03:15:54 +0000 UTC FinishedAt: 2026-07-09 03:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd2wq[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 03:15:54 +0000 UTC FinishedAt: 2026-07-09 03:53:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjODFlYjA5MGE3YmJmMzM5NGY0MmUyNzFjYzg0ZWM2OGZlZmMxZjcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwMzo1Mjo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHlcbmluZGV4IDMzYTE5ODUzNTZkOTAyLi42ODdjNDNhMTc5N2E0YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L3hkcF9tZXRhZGF0YS5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcveGRwX21ldGFkYXRhLnB5XG5AQCAtOCw2ICYjNDM7OCw4IEBAIFRoZXNlIHRlc3RzIGxvYWQgZGV2aWNlLWJvdW5kIFhEUCBwcm9ncmFtcyBmcm9tIHhkcF9tZXRhZGF0YS5icGYub1xuIHRoYXQgY2FsbCBtZXRhZGF0YSBrZnVuY3MsIHNlbmQgdHJhZmZpYywgYW5kIHZlcmlmeSB0aGUgZXh0cmFjdGVkXG4gbWV0YWRhdGEgdmlhIEJQRiBtYXBzLlxuIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztpbXBvcnQgdGltZVxuJiM0MztcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZXhpdCwga3NmdF9nZSwga3NmdF9uZSwga3NmdF9wclxuIGZyb20gbGliLnB5IGltcG9ydCBLc2Z0TmFtZWRWYXJpYW50LCBrc2Z0X3ZhcmlhbnRzXG4gZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBLc2Z0U2tpcEV4LCBOZXREcnZFcEVudlxuQEAgLTgxLDggJiM0Mzs4MywyMiBAQCBfUlNTX0tFWV9UWVBFID0gMVxuIF9SU1NfS0VZX1BLVF9DTlQgPSAyXG4gX1JTU19LRVlfRVJSX0NOVCA9IDNcbiBcbiYjNDM7X0NTVU1fS0VZX0lQX1NVTU1FRCA9IDBcbiYjNDM7X0NTVU1fS0VZX0NLU1VNID0gMVxuJiM0MztfQ1NVTV9LRVlfTEVWRUwgPSAyXG4mIzQzO19DU1VNX0tFWV9QS1RfQ05UID0gM1xuJiM0MztfQ1NVTV9LRVlfRVJSX0NOVCA9IDRcbiYjNDM7XG4gWERQX1JTU19MNCA9IDB4OCAgIyBCSVQoMykgZnJvbSBlbnVtIHhkcF9yc3NfaGFzaF90eXBlXG4gXG4mIzQzOyMgTWlycm9yIG9mIGVudW0geGRwX2NoZWNrc3VtIGZyb20gaW5jbHVkZS9uZXQveGRwLmhcbiYjNDM7WERQX0NIRUNLU1VNX05PTkUgPSAweDFcbiYjNDM7WERQX0NIRUNLU1VNX1VOTkVDRVNTQVJZID0gMHgyXG4mIzQzO1hEUF9DSEVDS1NVTV9DT01QTEVURSA9IDB4NFxuJiM0MztcbiYjNDM7IyBGaXhlZCBkZXN0aW5hdGlvbiBwb3J0IG9mIHRoZSBuZXQvbGliIGNzdW0gdG9vbFxuJiM0MztfQ1NVTV9UT09MX1BPUlQgPSAzNDAwMFxuJiM0MztcbiBcbiBAa3NmdF92YXJpYW50cyhbXG4gICAgIEtzZnROYW1lZFZhcmlhbnQoXCYjMzQ7dGNwXCYjMzQ7LCBcJiMzNDt0Y3BcJiMzNDspLFxuQEAgLTEzMCw2ICYjNDM7MTQ2LDkxIEBAIGRlZiB0ZXN0X3hkcF9yc3NfaGFzaChjZmcsIHByb3RvKTpcbiAgICAgICAgICAgICBmXCYjMzQ7UlNTIGhhc2ggdHlwZSBzaG91bGQgaW5jbHVkZSBMNCBmb3Ige3Byb3RvLnVwcGVyKCl9IHRyYWZmaWNcJiMzNDspXG4gXG4gXG4mIzQzO2RlZiBfcmVxdWlyZV9yeF9jc3VtX21ldGEoY2ZnKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1NraXAgdW5sZXNzIHRoZSBkZXZpY2UgZXhwb3NlcyBYRFAgUlggY2hlY2tzdW0gbWV0YWRhdGEuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBkZXZfaW5mbyA9IGNmZy5uZXRubC5kZXZfZ2V0KHtcJiMzNDtpZmluZGV4XCYjMzQ7OiBjZmcuaWZpbmRleH0pXG4mIzQzOyAgICByeF9tZXRhID0gZGV2X2luZm8uZ2V0KFwmIzM0O3hkcC1yeC1tZXRhZGF0YS1mZWF0dXJlc1wmIzM0OywgW10pXG4mIzQzOyAgICBpZiBcJiMzNDtjaGVja3N1bVwmIzM0OyBub3QgaW4gcnhfbWV0YTpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O2RldmljZSBkb2VzIG5vdCBzdXBwb3J0IFhEUCByeCBjaGVja3N1bSBtZXRhZGF0YVwmIzM0OylcbiYjNDM7XG4mIzQzO1xuJiM0MztAa3NmdF92YXJpYW50cyhbXG4mIzQzOyAgICBLc2Z0TmFtZWRWYXJpYW50KFwmIzM0O3RjcFwmIzM0OywgXCYjMzQ7dGNwXCYjMzQ7KSxcbiYjNDM7ICAgIEtzZnROYW1lZFZhcmlhbnQoXCYjMzQ7dWRwXCYjMzQ7LCBcJiMzNDt1ZHBcJiMzNDspLFxuJiM0MztdKVxuJiM0MztkZWYgdGVzdF94ZHBfcnhfY3N1bV92YWxpZChjZmcsIHByb3RvKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgUlggY2hlY2tzdW0gbWV0YWRhdGEgZm9yIHBhY2tldHMgd2l0aCBhIGNvcnJlY3QgY2hlY2tzdW0uXG4mIzQzO1xuJiM0MzsgICAgTG9hZHMgdGhlIHhkcF9yeF9jc3VtIHByb2dyYW0sIHNlbmRzIHRyYWZmaWMgd2l0aCBhIHZhbGlkIEw0IGNoZWNrc3VtXG4mIzQzOyAgICBmcm9tIHRoZSByZW1vdGUgZW5kcG9pbnQsIGFuZCB2ZXJpZmllcyB0aGF0IHRoZSBkZXZpY2UgcmVwb3J0ZWQgYVxuJiM0MzsgICAgdXNhYmxlIGNoZWNrc3VtIHZlcmRpY3QgKENIRUNLU1VNX1VOTkVDRVNTQVJZIGFuZC9vciBhXG4mIzQzOyAgICBDSEVDS1NVTV9DT01QTEVURSB2YWx1ZSkgdmlhIGJwZl94ZHBfbWV0YWRhdGFfcnhfY2hlY2tzdW0oKS5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgX3JlcXVpcmVfcnhfY3N1bV9tZXRhKGNmZylcbiYjNDM7XG4mIzQzOyAgICBwcm9nX2luZm8gPSBfbG9hZF94ZHBfbWV0YWRhdGFfcHJvZyhjZmcsIFwmIzM0O3hkcF9yeF9jc3VtXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIHBvcnQgPSByYW5kX3BvcnQoKVxuJiM0MzsgICAgYnBmX21hcF9zZXQoXCYjMzQ7bWFwX3hkcF9zZXR1cFwmIzM0OywgX1NFVFVQX0tFWV9QT1JULCBwb3J0KVxuJiM0MztcbiYjNDM7ICAgIGNzdW1fbWFwX2lkID0gcHJvZ19pbmZvW1wmIzM0O21hcHNcJiMzNDtdW1wmIzM0O21hcF9jc3VtXCYjMzQ7XVxuJiM0MztcbiYjNDM7ICAgIF9zZW5kX3Byb2JlKGNmZywgcG9ydCwgcHJvdG89cHJvdG8pXG4mIzQzO1xuJiM0MzsgICAgY3N1bSA9IGJwZl9tYXBfZHVtcChjc3VtX21hcF9pZClcbiYjNDM7XG4mIzQzOyAgICBwa3RfY250ID0gY3N1bS5nZXQoX0NTVU1fS0VZX1BLVF9DTlQsIDApXG4mIzQzOyAgICBlcnJfY250ID0gY3N1bS5nZXQoX0NTVU1fS0VZX0VSUl9DTlQsIDApXG4mIzQzOyAgICBpcF9zdW1tZWQgPSBjc3VtLmdldChfQ1NVTV9LRVlfSVBfU1VNTUVELCAwKVxuJiM0MztcbiYjNDM7ICAgIGtzZnRfZ2UocGt0X2NudCwgMSwgY29tbWVudD1cJiMzNDtzaG91bGQgaGF2ZSByZWNlaXZlZCBhdCBsZWFzdCBvbmUgcGFja2V0XCYjMzQ7KVxuJiM0MzsgICAga3NmdF9lcShlcnJfY250LCAwLCBjb21tZW50PWZcJiMzNDtSWCBjaGVja3N1bSBlcnJvciBjb3VudDoge2Vycl9jbnR9XCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIGtzZnRfcHIoZlwmIzM0OyAgaXBfc3VtbWVkOiB7aXBfc3VtbWVkOiN4fSBja3N1bTogXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgIGZcJiMzNDt7Y3N1bS5nZXQoX0NTVU1fS0VZX0NLU1VNLCAwKTojMDEweH0gXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgIGZcJiMzNDtsZXZlbDoge2NzdW0uZ2V0KF9DU1VNX0tFWV9MRVZFTCwgMCl9XCYjMzQ7KVxuJiM0MzsgICAga3NmdF9uZShpcF9zdW1tZWQgXHUwMDI2IChYRFBfQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgfCBYRFBfQ0hFQ0tTVU1fQ09NUExFVEUpLCAwLFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtkZXZpY2Ugc2hvdWxkIHJlcG9ydCBhIGNoZWNrc3VtIHZlcmRpY3QgZm9yIGEgdmFsaWQgcGFja2V0XCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiB0ZXN0X3hkcF9yeF9jc3VtX2ludmFsaWQoY2ZnKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgUlggY2hlY2tzdW0gbWV0YWRhdGEgZm9yIHBhY2tldHMgd2l0aCBhIGNvcnJ1cHRlZCBjaGVja3N1bS5cbiYjNDM7XG4mIzQzOyAgICBTZW5kcyBVRFAgcGFja2V0cyB3aXRoIGFuIGludGVudGlvbmFsbHkgYmFkIEw0IGNoZWNrc3VtIHVzaW5nIHRoZVxuJiM0MzsgICAgbmV0L2xpYiBjc3VtIHRvb2wgYW5kIHZlcmlmaWVzIHRoZSBkZXZpY2UgZG9lcyBub3QgY2xhaW0gaXQgdmFsaWRhdGVkXG4mIzQzOyAgICB0aGVtOiB0aGUgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgYml0IG11c3Qgbm90IGJlIHNldC5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgX3JlcXVpcmVfcnhfY3N1bV9tZXRhKGNmZylcbiYjNDM7XG4mIzQzOyAgICBpcHZlciA9IGNmZy5hZGRyX2lwdmVyXG4mIzQzOyAgICBiaW5fcmVtb3RlID0gY2ZnLnJlbW90ZS5kZXBsb3koY2ZnLm5ldF9saWJfZGlyIC8gXCYjMzQ7Y3N1bVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICBwcm9nX2luZm8gPSBfbG9hZF94ZHBfbWV0YWRhdGFfcHJvZyhjZmcsIFwmIzM0O3hkcF9yeF9jc3VtXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIGJwZl9tYXBfc2V0KFwmIzM0O21hcF94ZHBfc2V0dXBcJiMzNDssIF9TRVRVUF9LRVlfUE9SVCwgX0NTVU1fVE9PTF9QT1JUKVxuJiM0MztcbiYjNDM7ICAgIGNzdW1fbWFwX2lkID0gcHJvZ19pbmZvW1wmIzM0O21hcHNcJiMzNDtdW1wmIzM0O21hcF9jc3VtXCYjMzQ7XVxuJiM0MztcbiYjNDM7ICAgIGNtZChmXCYjMzQ7e2Jpbl9yZW1vdGV9IC1pIHtjZmcucmVtb3RlX2lmbmFtZX0gLW4gMjAgLXtpcHZlcn0gXCYjMzQ7XG4mIzQzOyAgICAgICAgZlwmIzM0Oy1TIHtjZmcucmVtb3RlX2FkZHJ9IC1EIHtjZmcuYWRkcn0gLXIgMSAtVCAtRVwmIzM0OyxcbiYjNDM7ICAgICAgICBob3N0PWNmZy5yZW1vdGUpXG4mIzQzO1xuJiM0MzsgICAgIyBubyByZWNlaXZlciB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0OyBsZXQgTkFQSSBkcmFpbiB0aGUgbGFzdCBwYWNrZXRzXG4mIzQzOyAgICB0aW1lLnNsZWVwKDEpXG4mIzQzO1xuJiM0MzsgICAgY3N1bSA9IGJwZl9tYXBfZHVtcChjc3VtX21hcF9pZClcbiYjNDM7XG4mIzQzOyAgICBwa3RfY250ID0gY3N1bS5nZXQoX0NTVU1fS0VZX1BLVF9DTlQsIDApXG4mIzQzOyAgICBpcF9zdW1tZWQgPSBjc3VtLmdldChfQ1NVTV9LRVlfSVBfU1VNTUVELCAwKVxuJiM0MztcbiYjNDM7ICAgIGtzZnRfZ2UocGt0X2NudCwgMSwgY29tbWVudD1cJiMzNDtzaG91bGQgaGF2ZSByZWNlaXZlZCBhdCBsZWFzdCBvbmUgcGFja2V0XCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIGtzZnRfcHIoZlwmIzM0OyAgaXBfc3VtbWVkOiB7aXBfc3VtbWVkOiN4fVwmIzM0OylcbiYjNDM7ICAgIGtzZnRfZXEoaXBfc3VtbWVkIFx1MDAyNiBYRFBfQ0hFQ0tTVU1fVU5ORUNFU1NBUlksIDAsXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2RldmljZSBtdXN0IG5vdCByZXBvcnQgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgZm9yIGEgY29ycnVwdGVkIFwmIzM0O1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtjaGVja3N1bVwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBtYWluKCk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biBYRFAgbWV0YWRhdGEga2Z1bmMgdGVzdHMgYWdhaW5zdCBhIHJlYWwgZGV2aWNlLlwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6XG5AQCAtMTM3LDYgJiM0MzsyMzgsOCBAQCBkZWYgbWFpbigpOlxuICAgICAgICAga3NmdF9ydW4oXG4gICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICB0ZXN0X3hkcF9yc3NfaGFzaCxcbiYjNDM7ICAgICAgICAgICAgICAgIHRlc3RfeGRwX3J4X2NzdW1fdmFsaWQsXG4mIzQzOyAgICAgICAgICAgICAgICB0ZXN0X3hkcF9yeF9jc3VtX2ludmFsaWQsXG4gICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICBhcmdzPShjZmcsKSlcbiAgICAga3NmdF9leGl0KClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIveGRwX21ldGFkYXRhLmJwZi5jXG5pbmRleCBmNzFmNTkyMTUyMzlmZC4uNzBkZWNhZTBhNjYzN2UgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi94ZHBfbWV0YWRhdGEuYnBmLmNcbkBAIC0xLDYgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuICNpbmNsdWRlIFx1MDAzY3N0ZGRlZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbkBAIC00MCw2ICYjNDM7NDEsMjQgQEAgc3RydWN0IHtcbiBcdF9fdWludChtYXhfZW50cmllcywgNCk7XG4gfSBtYXBfcnNzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4gXG4mIzQzOy8qIFJYIGNoZWNrc3VtIHJlc3VsdHM6IGtleSAwID0gaXBfc3VtbWVkIGJpdG1hc2ssIGtleSAxID0gaHcgY2tzdW0gdmFsdWUsXG4mIzQzOyAqIGtleSAyID0gY2tzdW0gbGV2ZWwsIGtleSAzID0gcGFja2V0IGNvdW50LCBrZXkgNCA9IGVycm9yIGNvdW50LlxuJiM0MzsgKi9cbiYjNDM7ZW51bSB7XG4mIzQzO1x0Q1NVTV9LRVlfSVBfU1VNTUVEID0gMCxcbiYjNDM7XHRDU1VNX0tFWV9DS1NVTSA9IDEsXG4mIzQzO1x0Q1NVTV9LRVlfTEVWRUwgPSAyLFxuJiM0MztcdENTVU1fS0VZX1BLVF9DTlQgPSAzLFxuJiM0MztcdENTVU1fS0VZX0VSUl9DTlQgPSA0LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBfX3UzMik7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBfX3UzMik7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCA1KTtcbiYjNDM7fSBtYXBfY3N1bSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiAvKiBNaXJyb3Igb2YgZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSBmcm9tIGluY2x1ZGUvbmV0L3hkcC5oLlxuICAqIE5lZWRlZCBiZWNhdXNlIHRoZSBlbnVtIGlzIG5vdCBwYXJ0IG9mIFVBUEkgaGVhZGVycy5cbiAgKi9cbkBAIC01NSw4ICYjNDM7NzQsMjAgQEAgZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSB7XG4gXHRYRFBfUlNTX0w0X0lDTVAgPSAxVSBcdTAwM2NcdTAwM2MgOCxcbiB9O1xuIFxuJiM0MzsvKiBNaXJyb3Igb2YgZW51bSB4ZHBfY2hlY2tzdW0gZnJvbSBpbmNsdWRlL25ldC94ZHAuaC5cbiYjNDM7ICogTmVlZGVkIGJlY2F1c2UgdGhlIGVudW0gaXMgbm90IHBhcnQgb2YgVUFQSSBoZWFkZXJzLlxuJiM0MzsgKi9cbiYjNDM7ZW51bSB4ZHBfY2hlY2tzdW0ge1xuJiM0MztcdFhEUF9DSEVDS1NVTV9OT05FID0gMVUgXHUwMDNjXHUwMDNjIDAsXG4mIzQzO1x0WERQX0NIRUNLU1VNX1VOTkVDRVNTQVJZID0gMVUgXHUwMDNjXHUwMDNjIDEsXG4mIzQzO1x0WERQX0NIRUNLU1VNX0NPTVBMRVRFID0gMVUgXHUwMDNjXHUwMDNjIDIsXG4mIzQzO307XG4mIzQzO1xuIGV4dGVybiBpbnQgYnBmX3hkcF9tZXRhZGF0YV9yeF9oYXNoKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCwgX191MzIgKmhhc2gsXG4gXHRcdFx0XHQgICAgZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSAqcnNzX3R5cGUpIF9fa3N5bTtcbiYjNDM7ZXh0ZXJuIGludCBicGZfeGRwX21ldGFkYXRhX3J4X2NoZWNrc3VtKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCxcbiYjNDM7XHRcdFx0XHRcdGVudW0geGRwX2NoZWNrc3VtICppcF9zdW1tZWQsXG4mIzQzO1x0XHRcdFx0XHRfX3UzMiAqY2tzdW0sIF9fdTggKmNrc3VtX2xldmVsKSBfX2tzeW07XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3UxNiBnZXRfZGVzdF9wb3J0KHZvaWQgKmw0LCB2b2lkICpkYXRhX2VuZCxcbiBcdFx0XHRcdFx0ICAgX191OCBwcm90b2NvbClcbkBAIC03OCw0MSAmIzQzOzEwOSwzOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fdTE2IGdldF9kZXN0X3BvcnQodm9pZCAqbDQsIHZvaWQgKmRhdGFfZW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVNFQyhcJiMzNDt4ZHBcJiMzNDspXG4taW50IHhkcF9yc3NfaGFzaChzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzOy8qIFJldHVybiB0cnVlIHdoZW4gdGhlIHBhY2tldCBtYXRjaGVzIHRoZSBMNCBwcm90b2NvbCBhbmQgZGVzdGluYXRpb25cbiYjNDM7ICogcG9ydCBjb25maWd1cmVkIGluIG1hcF94ZHBfc2V0dXAgKHplcm8vdW5zZXQgZmlsdGVycyBtYXRjaCBhbnl0aGluZykuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgeGRwX21hdGNoX3NldHVwKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiB7XG4gXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpY3R4LVx1MDAzZWRhdGFfZW5kO1xuIFx0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpY3R4LVx1MDAzZWRhdGE7XG4tXHRlbnVtIHhkcF9yc3NfaGFzaF90eXBlIHJzc190eXBlID0gMDtcbiBcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGRhdGE7XG4gXHRfX3U4IGw0X3Byb3RvID0gMDtcbi1cdF9fdTMyIGhhc2ggPSAwO1xuLVx0X191MzIga2V5LCB2YWw7XG4gXHR2b2lkICpsNCA9IE5VTEw7XG4tXHRfX3UzMiAqY250O1xuLVx0aW50IHJldDtcbiYjNDM7XHRfX3UzMiBrZXk7XG4gXG4gXHRpZiAoKHZvaWQgKikoZXRoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZClcbi1cdFx0cmV0dXJuIFhEUF9QQVNTO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGJwZl9odG9ucyhFVEhfUF9JUCkpIHtcbiBcdFx0c3RydWN0IGlwaGRyICppcGggPSAodm9pZCAqKShldGggJiM0MzsgMSk7XG4gXG4gXHRcdGlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kKVxuLVx0XHRcdHJldHVybiBYRFBfUEFTUztcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHRsNF9wcm90byA9IGlwaC1cdTAwM2Vwcm90b2NvbDtcbiBcdFx0bDQgPSAodm9pZCAqKShpcGggJiM0MzsgMSk7XG4gXHR9IGVsc2UgaWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGJwZl9odG9ucyhFVEhfUF9JUFY2KSkge1xuIFx0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9ICh2b2lkICopKGV0aCAmIzQzOyAxKTtcbiBcbiBcdFx0aWYgKCh2b2lkICopKGlwNmggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kKVxuLVx0XHRcdHJldHVybiBYRFBfUEFTUztcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHRsNF9wcm90byA9IGlwNmgtXHUwMDNlbmV4dGhkcjtcbiBcdFx0bDQgPSAodm9pZCAqKShpcDZoICYjNDM7IDEpO1xuIFx0fVxuIFxuIFx0aWYgKCFsNClcbi1cdFx0cmV0dXJuIFhEUF9QQVNTO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogRmlsdGVyIG9uIHRoZSBjb25maWd1cmVkIHByb3RvY29sIChtYXBfeGRwX3NldHVwIGtleSBYRFBfUFJPVE8pLlxuIFx0ICogV2hlbiBzZXQsIG9ubHkgcHJvY2VzcyBwYWNrZXRzIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgTDQgcHJvdG9jb2wuXG5AQCAtMTIxLDcgJiM0MzsxNTAsNyBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiBcdF9fczMyICpwcm90b19jZmcgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNm1hcF94ZHBfc2V0dXAsIFx1MDAyNmtleSk7XG4gXG4gXHRpZiAocHJvdG9fY2ZnIFx1MDAyNlx1MDAyNiAqcHJvdG9fY2ZnICE9IDAgXHUwMDI2XHUwMDI2IGw0X3Byb3RvICE9IChfX3U4KSpwcm90b19jZmcpXG4tXHRcdHJldHVybiBYRFBfUEFTUztcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIEZpbHRlciBvbiB0aGUgY29uZmlndXJlZCBwb3J0IChtYXBfeGRwX3NldHVwIGtleSBYRFBfUE9SVCkuXG4gXHQgKiBPbmx5IGFwcGxpZXMgdG8gcHJvdG9jb2xzIHdpdGggcG9ydHMgKFVEUCwgVENQKS5cbkBAIC0xMzMsOSAmIzQzOzE2MiwyNCBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiBcdFx0X191MTYgZGVzdCA9IGdldF9kZXN0X3BvcnQobDQsIGRhdGFfZW5kLCBsNF9wcm90byk7XG4gXG4gXHRcdGlmICghZGVzdCB8fCBicGZfbnRvaHMoZGVzdCkgIT0gKF9fdTE2KSpwb3J0X2NmZylcbi1cdFx0XHRyZXR1cm4gWERQX1BBU1M7XG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3hkcFwmIzM0OylcbiYjNDM7aW50IHhkcF9yc3NfaGFzaChzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIHhkcF9yc3NfaGFzaF90eXBlIHJzc190eXBlID0gMDtcbiYjNDM7XHRfX3UzMiBoYXNoID0gMDtcbiYjNDM7XHRfX3UzMiBrZXksIHZhbDtcbiYjNDM7XHRfX3UzMiAqY250O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICgheGRwX21hdGNoX3NldHVwKGN0eCkpXG4mIzQzO1x0XHRyZXR1cm4gWERQX1BBU1M7XG4mIzQzO1xuIFx0cmV0ID0gYnBmX3hkcF9tZXRhZGF0YV9yeF9oYXNoKGN0eCwgXHUwMDI2aGFzaCwgXHUwMDI2cnNzX3R5cGUpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRrZXkgPSBSU1NfS0VZX0VSUl9DTlQ7XG5AQCAtMTYwLDQgJiM0MzsyMDQsNDYgQEAgaW50IHhkcF9yc3NfaGFzaChzdHJ1Y3QgeGRwX21kICpjdHgpXG4gXHRyZXR1cm4gWERQX1BBU1M7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuJiM0MztpbnQgeGRwX3J4X2NzdW0oc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSB4ZHBfY2hlY2tzdW0gaXBfc3VtbWVkID0gMDtcbiYjNDM7XHRfX3U4IGNrc3VtX2xldmVsID0gMDtcbiYjNDM7XHRfX3UzMiBja3N1bSA9IDA7XG4mIzQzO1x0X191MzIga2V5LCB2YWw7XG4mIzQzO1x0X191MzIgKmNudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXhkcF9tYXRjaF9zZXR1cChjdHgpKVxuJiM0MztcdFx0cmV0dXJuIFhEUF9QQVNTO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfeGRwX21ldGFkYXRhX3J4X2NoZWNrc3VtKGN0eCwgXHUwMDI2aXBfc3VtbWVkLCBcdTAwMjZja3N1bSxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNmNrc3VtX2xldmVsKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrZXkgPSBDU1VNX0tFWV9FUlJfQ05UO1xuJiM0MztcdFx0Y250ID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZtYXBfY3N1bSwgXHUwMDI2a2V5KTtcbiYjNDM7XHRcdGlmIChjbnQpXG4mIzQzO1x0XHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKGNudCwgMSk7XG4mIzQzO1x0XHRyZXR1cm4gWERQX1BBU1M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZXkgPSBDU1VNX0tFWV9JUF9TVU1NRUQ7XG4mIzQzO1x0dmFsID0gKF9fdTMyKWlwX3N1bW1lZDtcbiYjNDM7XHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNm1hcF9jc3VtLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgQlBGX0FOWSk7XG4mIzQzO1xuJiM0MztcdGtleSA9IENTVU1fS0VZX0NLU1VNO1xuJiM0MztcdGJwZl9tYXBfdXBkYXRlX2VsZW0oXHUwMDI2bWFwX2NzdW0sIFx1MDAyNmtleSwgXHUwMDI2Y2tzdW0sIEJQRl9BTlkpO1xuJiM0MztcbiYjNDM7XHRrZXkgPSBDU1VNX0tFWV9MRVZFTDtcbiYjNDM7XHR2YWwgPSBja3N1bV9sZXZlbDtcbiYjNDM7XHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNm1hcF9jc3VtLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgQlBGX0FOWSk7XG4mIzQzO1xuJiM0MztcdGtleSA9IENTVU1fS0VZX1BLVF9DTlQ7XG4mIzQzO1x0Y250ID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZtYXBfY3N1bSwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoY250KVxuJiM0MztcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoY250LCAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFhEUF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLykgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzgxZWIwOTBhN2JiZjMzOTRmNDJlMjcxY2M4NGVjNjhmZWZjMWY3MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMDM6NTI6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHkKaW5kZXggMzNhMTk4NTM1NmQ5MDIuLjY4N2M0M2ExNzk3YTRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcveGRwX21ldGFkYXRhLnB5CkBAIC04LDYgJiM0Mzs4LDggQEAgVGhlc2UgdGVzdHMgbG9hZCBkZXZpY2UtYm91bmQgWERQIHByb2dyYW1zIGZyb20geGRwX21ldGFkYXRhLmJwZi5vCiB0aGF0IGNhbGwgbWV0YWRhdGEga2Z1bmNzLCBzZW5kIHRyYWZmaWMsIGFuZCB2ZXJpZnkgdGhlIGV4dHJhY3RlZAogbWV0YWRhdGEgdmlhIEJQRiBtYXBzLgogJiMzNDsmIzM0OyYjMzQ7CiYjNDM7aW1wb3J0IHRpbWUKJiM0MzsKIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9leGl0LCBrc2Z0X2dlLCBrc2Z0X25lLCBrc2Z0X3ByCiBmcm9tIGxpYi5weSBpbXBvcnQgS3NmdE5hbWVkVmFyaWFudCwga3NmdF92YXJpYW50cwogZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBLc2Z0U2tpcEV4LCBOZXREcnZFcEVudgpAQCAtODEsOCAmIzQzOzgzLDIyIEBAIF9SU1NfS0VZX1RZUEUgPSAxCiBfUlNTX0tFWV9QS1RfQ05UID0gMgogX1JTU19LRVlfRVJSX0NOVCA9IDMKIAomIzQzO19DU1VNX0tFWV9JUF9TVU1NRUQgPSAwCiYjNDM7X0NTVU1fS0VZX0NLU1VNID0gMQomIzQzO19DU1VNX0tFWV9MRVZFTCA9IDIKJiM0MztfQ1NVTV9LRVlfUEtUX0NOVCA9IDMKJiM0MztfQ1NVTV9LRVlfRVJSX0NOVCA9IDQKJiM0MzsKIFhEUF9SU1NfTDQgPSAweDggICMgQklUKDMpIGZyb20gZW51bSB4ZHBfcnNzX2hhc2hfdHlwZQogCiYjNDM7IyBNaXJyb3Igb2YgZW51bSB4ZHBfY2hlY2tzdW0gZnJvbSBpbmNsdWRlL25ldC94ZHAuaAomIzQzO1hEUF9DSEVDS1NVTV9OT05FID0gMHgxCiYjNDM7WERQX0NIRUNLU1VNX1VOTkVDRVNTQVJZID0gMHgyCiYjNDM7WERQX0NIRUNLU1VNX0NPTVBMRVRFID0gMHg0CiYjNDM7CiYjNDM7IyBGaXhlZCBkZXN0aW5hdGlvbiBwb3J0IG9mIHRoZSBuZXQvbGliIGNzdW0gdG9vbAomIzQzO19DU1VNX1RPT0xfUE9SVCA9IDM0MDAwCiYjNDM7CiAKIEBrc2Z0X3ZhcmlhbnRzKFsKICAgICBLc2Z0TmFtZWRWYXJpYW50KCYjMzQ7dGNwJiMzNDssICYjMzQ7dGNwJiMzNDspLApAQCAtMTMwLDYgJiM0MzsxNDYsOTEgQEAgZGVmIHRlc3RfeGRwX3Jzc19oYXNoKGNmZywgcHJvdG8pOgogICAgICAgICAgICAgZiYjMzQ7UlNTIGhhc2ggdHlwZSBzaG91bGQgaW5jbHVkZSBMNCBmb3Ige3Byb3RvLnVwcGVyKCl9IHRyYWZmaWMmIzM0OykKIAogCiYjNDM7ZGVmIF9yZXF1aXJlX3J4X2NzdW1fbWV0YShjZmcpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtTa2lwIHVubGVzcyB0aGUgZGV2aWNlIGV4cG9zZXMgWERQIFJYIGNoZWNrc3VtIG1ldGFkYXRhLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBkZXZfaW5mbyA9IGNmZy5uZXRubC5kZXZfZ2V0KHsmIzM0O2lmaW5kZXgmIzM0OzogY2ZnLmlmaW5kZXh9KQomIzQzOyAgICByeF9tZXRhID0gZGV2X2luZm8uZ2V0KCYjMzQ7eGRwLXJ4LW1ldGFkYXRhLWZlYXR1cmVzJiMzNDssIFtdKQomIzQzOyAgICBpZiAmIzM0O2NoZWNrc3VtJiMzNDsgbm90IGluIHJ4X21ldGE6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7ZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgWERQIHJ4IGNoZWNrc3VtIG1ldGFkYXRhJiMzNDspCiYjNDM7CiYjNDM7CiYjNDM7QGtzZnRfdmFyaWFudHMoWwomIzQzOyAgICBLc2Z0TmFtZWRWYXJpYW50KCYjMzQ7dGNwJiMzNDssICYjMzQ7dGNwJiMzNDspLAomIzQzOyAgICBLc2Z0TmFtZWRWYXJpYW50KCYjMzQ7dWRwJiMzNDssICYjMzQ7dWRwJiMzNDspLAomIzQzO10pCiYjNDM7ZGVmIHRlc3RfeGRwX3J4X2NzdW1fdmFsaWQoY2ZnLCBwcm90byk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1Rlc3QgUlggY2hlY2tzdW0gbWV0YWRhdGEgZm9yIHBhY2tldHMgd2l0aCBhIGNvcnJlY3QgY2hlY2tzdW0uCiYjNDM7CiYjNDM7ICAgIExvYWRzIHRoZSB4ZHBfcnhfY3N1bSBwcm9ncmFtLCBzZW5kcyB0cmFmZmljIHdpdGggYSB2YWxpZCBMNCBjaGVja3N1bQomIzQzOyAgICBmcm9tIHRoZSByZW1vdGUgZW5kcG9pbnQsIGFuZCB2ZXJpZmllcyB0aGF0IHRoZSBkZXZpY2UgcmVwb3J0ZWQgYQomIzQzOyAgICB1c2FibGUgY2hlY2tzdW0gdmVyZGljdCAoQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgYW5kL29yIGEKJiM0MzsgICAgQ0hFQ0tTVU1fQ09NUExFVEUgdmFsdWUpIHZpYSBicGZfeGRwX21ldGFkYXRhX3J4X2NoZWNrc3VtKCkuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBfcmVxdWlyZV9yeF9jc3VtX21ldGEoY2ZnKQomIzQzOwomIzQzOyAgICBwcm9nX2luZm8gPSBfbG9hZF94ZHBfbWV0YWRhdGFfcHJvZyhjZmcsICYjMzQ7eGRwX3J4X2NzdW0mIzM0OykKJiM0MzsKJiM0MzsgICAgcG9ydCA9IHJhbmRfcG9ydCgpCiYjNDM7ICAgIGJwZl9tYXBfc2V0KCYjMzQ7bWFwX3hkcF9zZXR1cCYjMzQ7LCBfU0VUVVBfS0VZX1BPUlQsIHBvcnQpCiYjNDM7CiYjNDM7ICAgIGNzdW1fbWFwX2lkID0gcHJvZ19pbmZvWyYjMzQ7bWFwcyYjMzQ7XVsmIzM0O21hcF9jc3VtJiMzNDtdCiYjNDM7CiYjNDM7ICAgIF9zZW5kX3Byb2JlKGNmZywgcG9ydCwgcHJvdG89cHJvdG8pCiYjNDM7CiYjNDM7ICAgIGNzdW0gPSBicGZfbWFwX2R1bXAoY3N1bV9tYXBfaWQpCiYjNDM7CiYjNDM7ICAgIHBrdF9jbnQgPSBjc3VtLmdldChfQ1NVTV9LRVlfUEtUX0NOVCwgMCkKJiM0MzsgICAgZXJyX2NudCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9FUlJfQ05ULCAwKQomIzQzOyAgICBpcF9zdW1tZWQgPSBjc3VtLmdldChfQ1NVTV9LRVlfSVBfU1VNTUVELCAwKQomIzQzOwomIzQzOyAgICBrc2Z0X2dlKHBrdF9jbnQsIDEsIGNvbW1lbnQ9JiMzNDtzaG91bGQgaGF2ZSByZWNlaXZlZCBhdCBsZWFzdCBvbmUgcGFja2V0JiMzNDspCiYjNDM7ICAgIGtzZnRfZXEoZXJyX2NudCwgMCwgY29tbWVudD1mJiMzNDtSWCBjaGVja3N1bSBlcnJvciBjb3VudDoge2Vycl9jbnR9JiMzNDspCiYjNDM7CiYjNDM7ICAgIGtzZnRfcHIoZiYjMzQ7ICBpcF9zdW1tZWQ6IHtpcF9zdW1tZWQ6I3h9IGNrc3VtOiAmIzM0OwomIzQzOyAgICAgICAgICAgIGYmIzM0O3tjc3VtLmdldChfQ1NVTV9LRVlfQ0tTVU0sIDApOiMwMTB4fSAmIzM0OwomIzQzOyAgICAgICAgICAgIGYmIzM0O2xldmVsOiB7Y3N1bS5nZXQoX0NTVU1fS0VZX0xFVkVMLCAwKX0mIzM0OykKJiM0MzsgICAga3NmdF9uZShpcF9zdW1tZWQgJmFtcDsgKFhEUF9DSEVDS1NVTV9VTk5FQ0VTU0FSWSB8IFhEUF9DSEVDS1NVTV9DT01QTEVURSksIDAsCiYjNDM7ICAgICAgICAgICAgJiMzNDtkZXZpY2Ugc2hvdWxkIHJlcG9ydCBhIGNoZWNrc3VtIHZlcmRpY3QgZm9yIGEgdmFsaWQgcGFja2V0JiMzNDspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIHRlc3RfeGRwX3J4X2NzdW1faW52YWxpZChjZmcpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IFJYIGNoZWNrc3VtIG1ldGFkYXRhIGZvciBwYWNrZXRzIHdpdGggYSBjb3JydXB0ZWQgY2hlY2tzdW0uCiYjNDM7CiYjNDM7ICAgIFNlbmRzIFVEUCBwYWNrZXRzIHdpdGggYW4gaW50ZW50aW9uYWxseSBiYWQgTDQgY2hlY2tzdW0gdXNpbmcgdGhlCiYjNDM7ICAgIG5ldC9saWIgY3N1bSB0b29sIGFuZCB2ZXJpZmllcyB0aGUgZGV2aWNlIGRvZXMgbm90IGNsYWltIGl0IHZhbGlkYXRlZAomIzQzOyAgICB0aGVtOiB0aGUgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgYml0IG11c3Qgbm90IGJlIHNldC4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIF9yZXF1aXJlX3J4X2NzdW1fbWV0YShjZmcpCiYjNDM7CiYjNDM7ICAgIGlwdmVyID0gY2ZnLmFkZHJfaXB2ZXIKJiM0MzsgICAgYmluX3JlbW90ZSA9IGNmZy5yZW1vdGUuZGVwbG95KGNmZy5uZXRfbGliX2RpciAvICYjMzQ7Y3N1bSYjMzQ7KQomIzQzOwomIzQzOyAgICBwcm9nX2luZm8gPSBfbG9hZF94ZHBfbWV0YWRhdGFfcHJvZyhjZmcsICYjMzQ7eGRwX3J4X2NzdW0mIzM0OykKJiM0MzsKJiM0MzsgICAgYnBmX21hcF9zZXQoJiMzNDttYXBfeGRwX3NldHVwJiMzNDssIF9TRVRVUF9LRVlfUE9SVCwgX0NTVU1fVE9PTF9QT1JUKQomIzQzOwomIzQzOyAgICBjc3VtX21hcF9pZCA9IHByb2dfaW5mb1smIzM0O21hcHMmIzM0O11bJiMzNDttYXBfY3N1bSYjMzQ7XQomIzQzOwomIzQzOyAgICBjbWQoZiYjMzQ7e2Jpbl9yZW1vdGV9IC1pIHtjZmcucmVtb3RlX2lmbmFtZX0gLW4gMjAgLXtpcHZlcn0gJiMzNDsKJiM0MzsgICAgICAgIGYmIzM0Oy1TIHtjZmcucmVtb3RlX2FkZHJ9IC1EIHtjZmcuYWRkcn0gLXIgMSAtVCAtRSYjMzQ7LAomIzQzOyAgICAgICAgaG9zdD1jZmcucmVtb3RlKQomIzQzOwomIzQzOyAgICAjIG5vIHJlY2VpdmVyIHRvIHN5bmNocm9uaXplIGFnYWluc3Q7IGxldCBOQVBJIGRyYWluIHRoZSBsYXN0IHBhY2tldHMKJiM0MzsgICAgdGltZS5zbGVlcCgxKQomIzQzOwomIzQzOyAgICBjc3VtID0gYnBmX21hcF9kdW1wKGNzdW1fbWFwX2lkKQomIzQzOwomIzQzOyAgICBwa3RfY250ID0gY3N1bS5nZXQoX0NTVU1fS0VZX1BLVF9DTlQsIDApCiYjNDM7ICAgIGlwX3N1bW1lZCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9JUF9TVU1NRUQsIDApCiYjNDM7CiYjNDM7ICAgIGtzZnRfZ2UocGt0X2NudCwgMSwgY29tbWVudD0mIzM0O3Nob3VsZCBoYXZlIHJlY2VpdmVkIGF0IGxlYXN0IG9uZSBwYWNrZXQmIzM0OykKJiM0MzsKJiM0MzsgICAga3NmdF9wcihmJiMzNDsgIGlwX3N1bW1lZDoge2lwX3N1bW1lZDojeH0mIzM0OykKJiM0MzsgICAga3NmdF9lcShpcF9zdW1tZWQgJmFtcDsgWERQX0NIRUNLU1VNX1VOTkVDRVNTQVJZLCAwLAomIzQzOyAgICAgICAgICAgICYjMzQ7ZGV2aWNlIG11c3Qgbm90IHJlcG9ydCBDSEVDS1NVTV9VTk5FQ0VTU0FSWSBmb3IgYSBjb3JydXB0ZWQgJiMzNDsKJiM0MzsgICAgICAgICAgICAmIzM0O2NoZWNrc3VtJiMzNDspCiYjNDM7CiYjNDM7CiBkZWYgbWFpbigpOgogICAgICYjMzQ7JiMzNDsmIzM0O1J1biBYRFAgbWV0YWRhdGEga2Z1bmMgdGVzdHMgYWdhaW5zdCBhIHJlYWwgZGV2aWNlLiYjMzQ7JiMzNDsmIzM0OwogICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzoKQEAgLTEzNyw2ICYjNDM7MjM4LDggQEAgZGVmIG1haW4oKToKICAgICAgICAga3NmdF9ydW4oCiAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgdGVzdF94ZHBfcnNzX2hhc2gsCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3RfeGRwX3J4X2NzdW1fdmFsaWQsCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3RfeGRwX3J4X2NzdW1faW52YWxpZCwKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICBhcmdzPShjZmcsKSkKICAgICBrc2Z0X2V4aXQoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi94ZHBfbWV0YWRhdGEuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuYwppbmRleCBmNzFmNTkyMTUyMzlmZC4uNzBkZWNhZTBhNjYzN2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIveGRwX21ldGFkYXRhLmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIveGRwX21ldGFkYXRhLmJwZi5jCkBAIC0xLDYgJiM0MzsxLDcgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAKICNpbmNsdWRlICZsdDtzdGRkZWYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKQEAgLTQwLDYgJiM0Mzs0MSwyNCBAQCBzdHJ1Y3QgewogCV9fdWludChtYXhfZW50cmllcywgNCk7CiB9IG1hcF9yc3MgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MzsvKiBSWCBjaGVja3N1bSByZXN1bHRzOiBrZXkgMCA9IGlwX3N1bW1lZCBiaXRtYXNrLCBrZXkgMSA9IGh3IGNrc3VtIHZhbHVlLAomIzQzOyAqIGtleSAyID0gY2tzdW0gbGV2ZWwsIGtleSAzID0gcGFja2V0IGNvdW50LCBrZXkgNCA9IGVycm9yIGNvdW50LgomIzQzOyAqLwomIzQzO2VudW0gewomIzQzOwlDU1VNX0tFWV9JUF9TVU1NRUQgPSAwLAomIzQzOwlDU1VNX0tFWV9DS1NVTSA9IDEsCiYjNDM7CUNTVU1fS0VZX0xFVkVMID0gMiwKJiM0MzsJQ1NVTV9LRVlfUEtUX0NOVCA9IDMsCiYjNDM7CUNTVU1fS0VZX0VSUl9DTlQgPSA0LAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdHlwZShrZXksIF9fdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBfX3UzMik7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgNSk7CiYjNDM7fSBtYXBfY3N1bSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKIC8qIE1pcnJvciBvZiBlbnVtIHhkcF9yc3NfaGFzaF90eXBlIGZyb20gaW5jbHVkZS9uZXQveGRwLmguCiAgKiBOZWVkZWQgYmVjYXVzZSB0aGUgZW51bSBpcyBub3QgcGFydCBvZiBVQVBJIGhlYWRlcnMuCiAgKi8KQEAgLTU1LDggJiM0Mzs3NCwyMCBAQCBlbnVtIHhkcF9yc3NfaGFzaF90eXBlIHsKIAlYRFBfUlNTX0w0X0lDTVAgPSAxVSAmbHQ7Jmx0OyA4LAogfTsKIAomIzQzOy8qIE1pcnJvciBvZiBlbnVtIHhkcF9jaGVja3N1bSBmcm9tIGluY2x1ZGUvbmV0L3hkcC5oLgomIzQzOyAqIE5lZWRlZCBiZWNhdXNlIHRoZSBlbnVtIGlzIG5vdCBwYXJ0IG9mIFVBUEkgaGVhZGVycy4KJiM0MzsgKi8KJiM0MztlbnVtIHhkcF9jaGVja3N1bSB7CiYjNDM7CVhEUF9DSEVDS1NVTV9OT05FID0gMVUgJmx0OyZsdDsgMCwKJiM0MzsJWERQX0NIRUNLU1VNX1VOTkVDRVNTQVJZID0gMVUgJmx0OyZsdDsgMSwKJiM0MzsJWERQX0NIRUNLU1VNX0NPTVBMRVRFID0gMVUgJmx0OyZsdDsgMiwKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIGludCBicGZfeGRwX21ldGFkYXRhX3J4X2hhc2goY29uc3Qgc3RydWN0IHhkcF9tZCAqY3R4LCBfX3UzMiAqaGFzaCwKIAkJCQkgICAgZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSAqcnNzX3R5cGUpIF9fa3N5bTsKJiM0MztleHRlcm4gaW50IGJwZl94ZHBfbWV0YWRhdGFfcnhfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHhkcF9tZCAqY3R4LAomIzQzOwkJCQkJZW51bSB4ZHBfY2hlY2tzdW0gKmlwX3N1bW1lZCwKJiM0MzsJCQkJCV9fdTMyICpja3N1bSwgX191OCAqY2tzdW1fbGV2ZWwpIF9fa3N5bTsKIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3UxNiBnZXRfZGVzdF9wb3J0KHZvaWQgKmw0LCB2b2lkICpkYXRhX2VuZCwKIAkJCQkJICAgX191OCBwcm90b2NvbCkKQEAgLTc4LDQxICYjNDM7MTA5LDM5IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX191MTYgZ2V0X2Rlc3RfcG9ydCh2b2lkICpsNCwgdm9pZCAqZGF0YV9lbmQsCiAJcmV0dXJuIDA7CiB9CiAKLVNFQygmIzM0O3hkcCYjMzQ7KQotaW50IHhkcF9yc3NfaGFzaChzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7LyogUmV0dXJuIHRydWUgd2hlbiB0aGUgcGFja2V0IG1hdGNoZXMgdGhlIEw0IHByb3RvY29sIGFuZCBkZXN0aW5hdGlvbgomIzQzOyAqIHBvcnQgY29uZmlndXJlZCBpbiBtYXBfeGRwX3NldHVwICh6ZXJvL3Vuc2V0IGZpbHRlcnMgbWF0Y2ggYW55dGhpbmcpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB4ZHBfbWF0Y2hfc2V0dXAoc3RydWN0IHhkcF9tZCAqY3R4KQogewogCXZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZyljdHgtJmd0O2RhdGFfZW5kOwogCXZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKWN0eC0mZ3Q7ZGF0YTsKLQllbnVtIHhkcF9yc3NfaGFzaF90eXBlIHJzc190eXBlID0gMDsKIAlzdHJ1Y3QgZXRoaGRyICpldGggPSBkYXRhOwogCV9fdTggbDRfcHJvdG8gPSAwOwotCV9fdTMyIGhhc2ggPSAwOwotCV9fdTMyIGtleSwgdmFsOwogCXZvaWQgKmw0ID0gTlVMTDsKLQlfX3UzMiAqY250OwotCWludCByZXQ7CiYjNDM7CV9fdTMyIGtleTsKIAogCWlmICgodm9pZCAqKShldGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCkKLQkJcmV0dXJuIFhEUF9QQVNTOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGV0aC0mZ3Q7aF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVApKSB7CiAJCXN0cnVjdCBpcGhkciAqaXBoID0gKHZvaWQgKikoZXRoICYjNDM7IDEpOwogCiAJCWlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCkKLQkJCXJldHVybiBYRFBfUEFTUzsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiAJCWw0X3Byb3RvID0gaXBoLSZndDtwcm90b2NvbDsKIAkJbDQgPSAodm9pZCAqKShpcGggJiM0MzsgMSk7CiAJfSBlbHNlIGlmIChldGgtJmd0O2hfcHJvdG8gPT0gYnBmX2h0b25zKEVUSF9QX0lQVjYpKSB7CiAJCXN0cnVjdCBpcHY2aGRyICppcDZoID0gKHZvaWQgKikoZXRoICYjNDM7IDEpOwogCiAJCWlmICgodm9pZCAqKShpcDZoICYjNDM7IDEpICZndDsgZGF0YV9lbmQpCi0JCQlyZXR1cm4gWERQX1BBU1M7CiYjNDM7CQkJcmV0dXJuIGZhbHNlOwogCQlsNF9wcm90byA9IGlwNmgtJmd0O25leHRoZHI7CiAJCWw0ID0gKHZvaWQgKikoaXA2aCAmIzQzOyAxKTsKIAl9CiAKIAlpZiAoIWw0KQotCQlyZXR1cm4gWERQX1BBU1M7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBGaWx0ZXIgb24gdGhlIGNvbmZpZ3VyZWQgcHJvdG9jb2wgKG1hcF94ZHBfc2V0dXAga2V5IFhEUF9QUk9UTykuCiAJICogV2hlbiBzZXQsIG9ubHkgcHJvY2VzcyBwYWNrZXRzIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgTDQgcHJvdG9jb2wuCkBAIC0xMjEsNyAmIzQzOzE1MCw3IEBAIGludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KQogCV9fczMyICpwcm90b19jZmcgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7bWFwX3hkcF9zZXR1cCwgJmFtcDtrZXkpOwogCiAJaWYgKHByb3RvX2NmZyAmYW1wOyZhbXA7ICpwcm90b19jZmcgIT0gMCAmYW1wOyZhbXA7IGw0X3Byb3RvICE9IChfX3U4KSpwcm90b19jZmcpCi0JCXJldHVybiBYRFBfUEFTUzsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAogCS8qIEZpbHRlciBvbiB0aGUgY29uZmlndXJlZCBwb3J0IChtYXBfeGRwX3NldHVwIGtleSBYRFBfUE9SVCkuCiAJICogT25seSBhcHBsaWVzIHRvIHByb3RvY29scyB3aXRoIHBvcnRzIChVRFAsIFRDUCkuCkBAIC0xMzMsOSAmIzQzOzE2MiwyNCBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eCkKIAkJX191MTYgZGVzdCA9IGdldF9kZXN0X3BvcnQobDQsIGRhdGFfZW5kLCBsNF9wcm90byk7CiAKIAkJaWYgKCFkZXN0IHx8IGJwZl9udG9ocyhkZXN0KSAhPSAoX191MTYpKnBvcnRfY2ZnKQotCQkJcmV0dXJuIFhEUF9QQVNTOwomIzQzOwkJCXJldHVybiBmYWxzZTsKIAl9CiAKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSByc3NfdHlwZSA9IDA7CiYjNDM7CV9fdTMyIGhhc2ggPSAwOwomIzQzOwlfX3UzMiBrZXksIHZhbDsKJiM0MzsJX191MzIgKmNudDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF4ZHBfbWF0Y2hfc2V0dXAoY3R4KSkKJiM0MzsJCXJldHVybiBYRFBfUEFTUzsKJiM0MzsKIAlyZXQgPSBicGZfeGRwX21ldGFkYXRhX3J4X2hhc2goY3R4LCAmYW1wO2hhc2gsICZhbXA7cnNzX3R5cGUpOwogCWlmIChyZXQgJmx0OyAwKSB7CiAJCWtleSA9IFJTU19LRVlfRVJSX0NOVDsKQEAgLTE2MCw0ICYjNDM7MjA0LDQ2IEBAIGludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KQogCXJldHVybiBYRFBfUEFTUzsKIH0KIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCB4ZHBfcnhfY3N1bShzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7ewomIzQzOwllbnVtIHhkcF9jaGVja3N1bSBpcF9zdW1tZWQgPSAwOwomIzQzOwlfX3U4IGNrc3VtX2xldmVsID0gMDsKJiM0MzsJX191MzIgY2tzdW0gPSAwOwomIzQzOwlfX3UzMiBrZXksIHZhbDsKJiM0MzsJX191MzIgKmNudDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF4ZHBfbWF0Y2hfc2V0dXAoY3R4KSkKJiM0MzsJCXJldHVybiBYRFBfUEFTUzsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3hkcF9tZXRhZGF0YV9yeF9jaGVja3N1bShjdHgsICZhbXA7aXBfc3VtbWVkLCAmYW1wO2Nrc3VtLAomIzQzOwkJCQkJICAgJmFtcDtja3N1bV9sZXZlbCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlrZXkgPSBDU1VNX0tFWV9FUlJfQ05UOwomIzQzOwkJY250ID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO21hcF9jc3VtLCAmYW1wO2tleSk7CiYjNDM7CQlpZiAoY250KQomIzQzOwkJCV9fc3luY19mZXRjaF9hbmRfYWRkKGNudCwgMSk7CiYjNDM7CQlyZXR1cm4gWERQX1BBU1M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2V5ID0gQ1NVTV9LRVlfSVBfU1VNTUVEOwomIzQzOwl2YWwgPSAoX191MzIpaXBfc3VtbWVkOwomIzQzOwlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7bWFwX2NzdW0sICZhbXA7a2V5LCAmYW1wO3ZhbCwgQlBGX0FOWSk7CiYjNDM7CiYjNDM7CWtleSA9IENTVU1fS0VZX0NLU1VNOwomIzQzOwlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7bWFwX2NzdW0sICZhbXA7a2V5LCAmYW1wO2Nrc3VtLCBCUEZfQU5ZKTsKJiM0MzsKJiM0MzsJa2V5ID0gQ1NVTV9LRVlfTEVWRUw7CiYjNDM7CXZhbCA9IGNrc3VtX2xldmVsOwomIzQzOwlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7bWFwX2NzdW0sICZhbXA7a2V5LCAmYW1wO3ZhbCwgQlBGX0FOWSk7CiYjNDM7CiYjNDM7CWtleSA9IENTVU1fS0VZX1BLVF9DTlQ7CiYjNDM7CWNudCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDttYXBfY3N1bSwgJmFtcDtrZXkpOwomIzQzOwlpZiAoY250KQomIzQzOwkJX19zeW5jX2ZldGNoX2FuZF9hZGQoY250LCAxKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFhEUF9QQVNTOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwNwoJCQkJCQkJb3V0cHV0OiA2MAoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBc3Nlc3NtZW50OiBYRFAgTWV0YWRhdGEgU2VsZnRlc3QgQWRkaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYWRkaW5nIG5ldyB0ZXN0cywgc3BlY2lmaWNhbGx5IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHlgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi94ZHBfbWV0YWRhdGEuYnBmLmNgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBhcmUgdGhlICpvbmx5KiBmaWxlcyBtb2RpZmllZC4gWWVwLCB0aGUgZGlmZiBzaG93cyBleGFjdGx5IHRob3NlIHR3by4KCkFscmlnaHQsIHRoZSBjb3JlIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtEb2VzIHRoaXMgcGF0Y2ggaW1wYWN0IGZ1bmN0aW9uYWwgYXNwZWN0cyB0aGF0IHdlIG5lZWQgdG8gZnV6ej8mIzM0OyBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIGFuZCB2ZXJpZnkuIE5vIGNoYW5nZXMgdG8gYW55dGhpbmcgY29yZSwgbm8gZHJpdmVycywgbm8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUuIEdvb2QsIGp1c3Qgc2VsZi10ZXN0cy4gVGhhdCBtZWFucywgYnkgZGVmYXVsdCwgd2Ugc2hvdWxkbiYjMzk7dCBoYXZlIHRvIGZ1enogdGhpcy4KCk5vdywgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgdGhlIGluc3RydWN0aW9uczogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24vLi4uLCBjb2RlIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLi4uJiMzNDsuIEhtbSwgc2VsZnRlc3RzIGFyZW4mIzM5O3QgZXhwbGljaXRseSAqbGlzdGVkKiwgYnV0IHRoZXkgZmFsbCB1bmRlciB0aGUgY2F0ZWdvcnkgb2Ygbm9uLWZ1bmN0aW9uYWwgY2hhbmdlczsgdGhleSYjMzk7cmUgdGVzdGluZyB0b29scy4gVGhleSBhcmVuJiMzOTt0IGFsdGVyaW5nIGtlcm5lbCBiZWhhdmlvciBkaXJlY3RseS4KCkxldCYjMzk7cyBjb25maXJtIHRoYXQgYWdhaW4uIFRoZSBkaWZmIHN0aWxsIG9ubHkgc2hvd3MgdGhvc2Ugc2FtZSB0d28gZmlsZXMuIFNvLCBnaXZlbiB0aGF0IGl0JiMzOTtzIHB1cmVseSB0ZXN0cywgYW5kIGJhc2VkIG9uIHRoZSBndWlkYW5jZSwgSSB0aGluayB0aGlzIGlzIGEgY2xlYXIgV29ydGhGdXp6aW5nPWZhbHNlLiBObyBuZWVkIHRvIGNvbnN1bHQgYSB0b29sIG9uIHRoaXMgb25lOyBJJiMzOTttIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6NTI6NTMuMDcxMTA5MTY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNTU4NzQ4MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjUyOjUzLjA3MTExNjIyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwMDY3ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzgxZWIwOTBhN2JiZjMzOTRmNDJlMjcxY2M4NGVjNjhmZWZjMWY3MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCA5IDAzOjUyOjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L3hkcF9tZXRhZGF0YS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L3hkcF9tZXRhZGF0YS5weVxcbmluZGV4IDMzYTE5ODUzNTZkOTAyLi42ODdjNDNhMTc5N2E0YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHlcXG5AQCAtOCw2ICs4LDggQEAgVGhlc2UgdGVzdHMgbG9hZCBkZXZpY2UtYm91bmQgWERQIHByb2dyYW1zIGZyb20geGRwX21ldGFkYXRhLmJwZi5vXFxuIHRoYXQgY2FsbCBtZXRhZGF0YSBrZnVuY3MsIHNlbmQgdHJhZmZpYywgYW5kIHZlcmlmeSB0aGUgZXh0cmFjdGVkXFxuIG1ldGFkYXRhIHZpYSBCUEYgbWFwcy5cXG4gXFxcIlxcXCJcXFwiXFxuK2ltcG9ydCB0aW1lXFxuK1xcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZXhpdCwga3NmdF9nZSwga3NmdF9uZSwga3NmdF9wclxcbiBmcm9tIGxpYi5weSBpbXBvcnQgS3NmdE5hbWVkVmFyaWFudCwga3NmdF92YXJpYW50c1xcbiBmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIEtzZnRTa2lwRXgsIE5ldERydkVwRW52XFxuQEAgLTgxLDggKzgzLDIyIEBAIF9SU1NfS0VZX1RZUEUgPSAxXFxuIF9SU1NfS0VZX1BLVF9DTlQgPSAyXFxuIF9SU1NfS0VZX0VSUl9DTlQgPSAzXFxuIFxcbitfQ1NVTV9LRVlfSVBfU1VNTUVEID0gMFxcbitfQ1NVTV9LRVlfQ0tTVU0gPSAxXFxuK19DU1VNX0tFWV9MRVZFTCA9IDJcXG4rX0NTVU1fS0VZX1BLVF9DTlQgPSAzXFxuK19DU1VNX0tFWV9FUlJfQ05UID0gNFxcbitcXG4gWERQX1JTU19MNCA9IDB4OCAgIyBCSVQoMykgZnJvbSBlbnVtIHhkcF9yc3NfaGFzaF90eXBlXFxuIFxcbisjIE1pcnJvciBvZiBlbnVtIHhkcF9jaGVja3N1bSBmcm9tIGluY2x1ZGUvbmV0L3hkcC5oXFxuK1hEUF9DSEVDS1NVTV9OT05FID0gMHgxXFxuK1hEUF9DSEVDS1NVTV9VTk5FQ0VTU0FSWSA9IDB4MlxcbitYRFBfQ0hFQ0tTVU1fQ09NUExFVEUgPSAweDRcXG4rXFxuKyMgRml4ZWQgZGVzdGluYXRpb24gcG9ydCBvZiB0aGUgbmV0L2xpYiBjc3VtIHRvb2xcXG4rX0NTVU1fVE9PTF9QT1JUID0gMzQwMDBcXG4rXFxuIFxcbiBAa3NmdF92YXJpYW50cyhbXFxuICAgICBLc2Z0TmFtZWRWYXJpYW50KFxcXCJ0Y3BcXFwiLCBcXFwidGNwXFxcIiksXFxuQEAgLTEzMCw2ICsxNDYsOTEgQEAgZGVmIHRlc3RfeGRwX3Jzc19oYXNoKGNmZywgcHJvdG8pOlxcbiAgICAgICAgICAgICBmXFxcIlJTUyBoYXNoIHR5cGUgc2hvdWxkIGluY2x1ZGUgTDQgZm9yIHtwcm90by51cHBlcigpfSB0cmFmZmljXFxcIilcXG4gXFxuIFxcbitkZWYgX3JlcXVpcmVfcnhfY3N1bV9tZXRhKGNmZyk6XFxuKyAgICBcXFwiXFxcIlxcXCJTa2lwIHVubGVzcyB0aGUgZGV2aWNlIGV4cG9zZXMgWERQIFJYIGNoZWNrc3VtIG1ldGFkYXRhLlxcXCJcXFwiXFxcIlxcbisgICAgZGV2X2luZm8gPSBjZmcubmV0bmwuZGV2X2dldCh7XFxcImlmaW5kZXhcXFwiOiBjZmcuaWZpbmRleH0pXFxuKyAgICByeF9tZXRhID0gZGV2X2luZm8uZ2V0KFxcXCJ4ZHAtcngtbWV0YWRhdGEtZmVhdHVyZXNcXFwiLCBbXSlcXG4rICAgIGlmIFxcXCJjaGVja3N1bVxcXCIgbm90IGluIHJ4X21ldGE6XFxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwiZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgWERQIHJ4IGNoZWNrc3VtIG1ldGFkYXRhXFxcIilcXG4rXFxuK1xcbitAa3NmdF92YXJpYW50cyhbXFxuKyAgICBLc2Z0TmFtZWRWYXJpYW50KFxcXCJ0Y3BcXFwiLCBcXFwidGNwXFxcIiksXFxuKyAgICBLc2Z0TmFtZWRWYXJpYW50KFxcXCJ1ZHBcXFwiLCBcXFwidWRwXFxcIiksXFxuK10pXFxuK2RlZiB0ZXN0X3hkcF9yeF9jc3VtX3ZhbGlkKGNmZywgcHJvdG8pOlxcbisgICAgXFxcIlxcXCJcXFwiVGVzdCBSWCBjaGVja3N1bSBtZXRhZGF0YSBmb3IgcGFja2V0cyB3aXRoIGEgY29ycmVjdCBjaGVja3N1bS5cXG4rXFxuKyAgICBMb2FkcyB0aGUgeGRwX3J4X2NzdW0gcHJvZ3JhbSwgc2VuZHMgdHJhZmZpYyB3aXRoIGEgdmFsaWQgTDQgY2hlY2tzdW1cXG4rICAgIGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludCwgYW5kIHZlcmlmaWVzIHRoYXQgdGhlIGRldmljZSByZXBvcnRlZCBhXFxuKyAgICB1c2FibGUgY2hlY2tzdW0gdmVyZGljdCAoQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgYW5kL29yIGFcXG4rICAgIENIRUNLU1VNX0NPTVBMRVRFIHZhbHVlKSB2aWEgYnBmX3hkcF9tZXRhZGF0YV9yeF9jaGVja3N1bSgpLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBfcmVxdWlyZV9yeF9jc3VtX21ldGEoY2ZnKVxcbitcXG4rICAgIHByb2dfaW5mbyA9IF9sb2FkX3hkcF9tZXRhZGF0YV9wcm9nKGNmZywgXFxcInhkcF9yeF9jc3VtXFxcIilcXG4rXFxuKyAgICBwb3J0ID0gcmFuZF9wb3J0KClcXG4rICAgIGJwZl9tYXBfc2V0KFxcXCJtYXBfeGRwX3NldHVwXFxcIiwgX1NFVFVQX0tFWV9QT1JULCBwb3J0KVxcbitcXG4rICAgIGNzdW1fbWFwX2lkID0gcHJvZ19pbmZvW1xcXCJtYXBzXFxcIl1bXFxcIm1hcF9jc3VtXFxcIl1cXG4rXFxuKyAgICBfc2VuZF9wcm9iZShjZmcsIHBvcnQsIHByb3RvPXByb3RvKVxcbitcXG4rICAgIGNzdW0gPSBicGZfbWFwX2R1bXAoY3N1bV9tYXBfaWQpXFxuK1xcbisgICAgcGt0X2NudCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9QS1RfQ05ULCAwKVxcbisgICAgZXJyX2NudCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9FUlJfQ05ULCAwKVxcbisgICAgaXBfc3VtbWVkID0gY3N1bS5nZXQoX0NTVU1fS0VZX0lQX1NVTU1FRCwgMClcXG4rXFxuKyAgICBrc2Z0X2dlKHBrdF9jbnQsIDEsIGNvbW1lbnQ9XFxcInNob3VsZCBoYXZlIHJlY2VpdmVkIGF0IGxlYXN0IG9uZSBwYWNrZXRcXFwiKVxcbisgICAga3NmdF9lcShlcnJfY250LCAwLCBjb21tZW50PWZcXFwiUlggY2hlY2tzdW0gZXJyb3IgY291bnQ6IHtlcnJfY250fVxcXCIpXFxuK1xcbisgICAga3NmdF9wcihmXFxcIiAgaXBfc3VtbWVkOiB7aXBfc3VtbWVkOiN4fSBja3N1bTogXFxcIlxcbisgICAgICAgICAgICBmXFxcIntjc3VtLmdldChfQ1NVTV9LRVlfQ0tTVU0sIDApOiMwMTB4fSBcXFwiXFxuKyAgICAgICAgICAgIGZcXFwibGV2ZWw6IHtjc3VtLmdldChfQ1NVTV9LRVlfTEVWRUwsIDApfVxcXCIpXFxuKyAgICBrc2Z0X25lKGlwX3N1bW1lZCBcXHUwMDI2IChYRFBfQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgfCBYRFBfQ0hFQ0tTVU1fQ09NUExFVEUpLCAwLFxcbisgICAgICAgICAgICBcXFwiZGV2aWNlIHNob3VsZCByZXBvcnQgYSBjaGVja3N1bSB2ZXJkaWN0IGZvciBhIHZhbGlkIHBhY2tldFxcXCIpXFxuK1xcbitcXG4rZGVmIHRlc3RfeGRwX3J4X2NzdW1faW52YWxpZChjZmcpOlxcbisgICAgXFxcIlxcXCJcXFwiVGVzdCBSWCBjaGVja3N1bSBtZXRhZGF0YSBmb3IgcGFja2V0cyB3aXRoIGEgY29ycnVwdGVkIGNoZWNrc3VtLlxcbitcXG4rICAgIFNlbmRzIFVEUCBwYWNrZXRzIHdpdGggYW4gaW50ZW50aW9uYWxseSBiYWQgTDQgY2hlY2tzdW0gdXNpbmcgdGhlXFxuKyAgICBuZXQvbGliIGNzdW0gdG9vbCBhbmQgdmVyaWZpZXMgdGhlIGRldmljZSBkb2VzIG5vdCBjbGFpbSBpdCB2YWxpZGF0ZWRcXG4rICAgIHRoZW06IHRoZSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSBiaXQgbXVzdCBub3QgYmUgc2V0LlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBfcmVxdWlyZV9yeF9jc3VtX21ldGEoY2ZnKVxcbitcXG4rICAgIGlwdmVyID0gY2ZnLmFkZHJfaXB2ZXJcXG4rICAgIGJpbl9yZW1vdGUgPSBjZmcucmVtb3RlLmRlcGxveShjZmcubmV0X2xpYl9kaXIgLyBcXFwiY3N1bVxcXCIpXFxuK1xcbisgICAgcHJvZ19pbmZvID0gX2xvYWRfeGRwX21ldGFkYXRhX3Byb2coY2ZnLCBcXFwieGRwX3J4X2NzdW1cXFwiKVxcbitcXG4rICAgIGJwZl9tYXBfc2V0KFxcXCJtYXBfeGRwX3NldHVwXFxcIiwgX1NFVFVQX0tFWV9QT1JULCBfQ1NVTV9UT09MX1BPUlQpXFxuK1xcbisgICAgY3N1bV9tYXBfaWQgPSBwcm9nX2luZm9bXFxcIm1hcHNcXFwiXVtcXFwibWFwX2NzdW1cXFwiXVxcbitcXG4rICAgIGNtZChmXFxcIntiaW5fcmVtb3RlfSAtaSB7Y2ZnLnJlbW90ZV9pZm5hbWV9IC1uIDIwIC17aXB2ZXJ9IFxcXCJcXG4rICAgICAgICBmXFxcIi1TIHtjZmcucmVtb3RlX2FkZHJ9IC1EIHtjZmcuYWRkcn0gLXIgMSAtVCAtRVxcXCIsXFxuKyAgICAgICAgaG9zdD1jZmcucmVtb3RlKVxcbitcXG4rICAgICMgbm8gcmVjZWl2ZXIgdG8gc3luY2hyb25pemUgYWdhaW5zdDsgbGV0IE5BUEkgZHJhaW4gdGhlIGxhc3QgcGFja2V0c1xcbisgICAgdGltZS5zbGVlcCgxKVxcbitcXG4rICAgIGNzdW0gPSBicGZfbWFwX2R1bXAoY3N1bV9tYXBfaWQpXFxuK1xcbisgICAgcGt0X2NudCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9QS1RfQ05ULCAwKVxcbisgICAgaXBfc3VtbWVkID0gY3N1bS5nZXQoX0NTVU1fS0VZX0lQX1NVTU1FRCwgMClcXG4rXFxuKyAgICBrc2Z0X2dlKHBrdF9jbnQsIDEsIGNvbW1lbnQ9XFxcInNob3VsZCBoYXZlIHJlY2VpdmVkIGF0IGxlYXN0IG9uZSBwYWNrZXRcXFwiKVxcbitcXG4rICAgIGtzZnRfcHIoZlxcXCIgIGlwX3N1bW1lZDoge2lwX3N1bW1lZDojeH1cXFwiKVxcbisgICAga3NmdF9lcShpcF9zdW1tZWQgXFx1MDAyNiBYRFBfQ0hFQ0tTVU1fVU5ORUNFU1NBUlksIDAsXFxuKyAgICAgICAgICAgIFxcXCJkZXZpY2UgbXVzdCBub3QgcmVwb3J0IENIRUNLU1VNX1VOTkVDRVNTQVJZIGZvciBhIGNvcnJ1cHRlZCBcXFwiXFxuKyAgICAgICAgICAgIFxcXCJjaGVja3N1bVxcXCIpXFxuK1xcbitcXG4gZGVmIG1haW4oKTpcXG4gICAgIFxcXCJcXFwiXFxcIlJ1biBYRFAgbWV0YWRhdGEga2Z1bmMgdGVzdHMgYWdhaW5zdCBhIHJlYWwgZGV2aWNlLlxcXCJcXFwiXFxcIlxcbiAgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxcbkBAIC0xMzcsNiArMjM4LDggQEAgZGVmIG1haW4oKTpcXG4gICAgICAgICBrc2Z0X3J1bihcXG4gICAgICAgICAgICAgW1xcbiAgICAgICAgICAgICAgICAgdGVzdF94ZHBfcnNzX2hhc2gsXFxuKyAgICAgICAgICAgICAgICB0ZXN0X3hkcF9yeF9jc3VtX3ZhbGlkLFxcbisgICAgICAgICAgICAgICAgdGVzdF94ZHBfcnhfY3N1bV9pbnZhbGlkLFxcbiAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICBhcmdzPShjZmcsKSlcXG4gICAgIGtzZnRfZXhpdCgpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIveGRwX21ldGFkYXRhLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi94ZHBfbWV0YWRhdGEuYnBmLmNcXG5pbmRleCBmNzFmNTkyMTUyMzlmZC4uNzBkZWNhZTBhNjYzN2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi94ZHBfbWV0YWRhdGEuYnBmLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuY1xcbkBAIC0xLDYgKzEsNyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGRlZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfZXRoZXIuaFxcdTAwM2VcXG5AQCAtNDAsNiArNDEsMjQgQEAgc3RydWN0IHtcXG4gXFx0X191aW50KG1heF9lbnRyaWVzLCA0KTtcXG4gfSBtYXBfcnNzIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4gXFxuKy8qIFJYIGNoZWNrc3VtIHJlc3VsdHM6IGtleSAwID0gaXBfc3VtbWVkIGJpdG1hc2ssIGtleSAxID0gaHcgY2tzdW0gdmFsdWUsXFxuKyAqIGtleSAyID0gY2tzdW0gbGV2ZWwsIGtleSAzID0gcGFja2V0IGNvdW50LCBrZXkgNCA9IGVycm9yIGNvdW50LlxcbisgKi9cXG4rZW51bSB7XFxuK1xcdENTVU1fS0VZX0lQX1NVTU1FRCA9IDAsXFxuK1xcdENTVU1fS0VZX0NLU1VNID0gMSxcXG4rXFx0Q1NVTV9LRVlfTEVWRUwgPSAyLFxcbitcXHRDU1VNX0tFWV9QS1RfQ05UID0gMyxcXG4rXFx0Q1NVTV9LRVlfRVJSX0NOVCA9IDQsXFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X190eXBlKGtleSwgX191MzIpO1xcbitcXHRfX3R5cGUodmFsdWUsIF9fdTMyKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCA1KTtcXG4rfSBtYXBfY3N1bSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbiAvKiBNaXJyb3Igb2YgZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSBmcm9tIGluY2x1ZGUvbmV0L3hkcC5oLlxcbiAgKiBOZWVkZWQgYmVjYXVzZSB0aGUgZW51bSBpcyBub3QgcGFydCBvZiBVQVBJIGhlYWRlcnMuXFxuICAqL1xcbkBAIC01NSw4ICs3NCwyMCBAQCBlbnVtIHhkcF9yc3NfaGFzaF90eXBlIHtcXG4gXFx0WERQX1JTU19MNF9JQ01QID0gMVUgXFx1MDAzY1xcdTAwM2MgOCxcXG4gfTtcXG4gXFxuKy8qIE1pcnJvciBvZiBlbnVtIHhkcF9jaGVja3N1bSBmcm9tIGluY2x1ZGUvbmV0L3hkcC5oLlxcbisgKiBOZWVkZWQgYmVjYXVzZSB0aGUgZW51bSBpcyBub3QgcGFydCBvZiBVQVBJIGhlYWRlcnMuXFxuKyAqL1xcbitlbnVtIHhkcF9jaGVja3N1bSB7XFxuK1xcdFhEUF9DSEVDS1NVTV9OT05FID0gMVUgXFx1MDAzY1xcdTAwM2MgMCxcXG4rXFx0WERQX0NIRUNLU1VNX1VOTkVDRVNTQVJZID0gMVUgXFx1MDAzY1xcdTAwM2MgMSxcXG4rXFx0WERQX0NIRUNLU1VNX0NPTVBMRVRFID0gMVUgXFx1MDAzY1xcdTAwM2MgMixcXG4rfTtcXG4rXFxuIGV4dGVybiBpbnQgYnBmX3hkcF9tZXRhZGF0YV9yeF9oYXNoKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCwgX191MzIgKmhhc2gsXFxuIFxcdFxcdFxcdFxcdCAgICBlbnVtIHhkcF9yc3NfaGFzaF90eXBlICpyc3NfdHlwZSkgX19rc3ltO1xcbitleHRlcm4gaW50IGJwZl94ZHBfbWV0YWRhdGFfcnhfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHhkcF9tZCAqY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRlbnVtIHhkcF9jaGVja3N1bSAqaXBfc3VtbWVkLFxcbitcXHRcXHRcXHRcXHRcXHRfX3UzMiAqY2tzdW0sIF9fdTggKmNrc3VtX2xldmVsKSBfX2tzeW07XFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fdTE2IGdldF9kZXN0X3BvcnQodm9pZCAqbDQsIHZvaWQgKmRhdGFfZW5kLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBfX3U4IHByb3RvY29sKVxcbkBAIC03OCw0MSArMTA5LDM5IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX191MTYgZ2V0X2Rlc3RfcG9ydCh2b2lkICpsNCwgdm9pZCAqZGF0YV9lbmQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1TRUMoXFxcInhkcFxcXCIpXFxuLWludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KVxcbisvKiBSZXR1cm4gdHJ1ZSB3aGVuIHRoZSBwYWNrZXQgbWF0Y2hlcyB0aGUgTDQgcHJvdG9jb2wgYW5kIGRlc3RpbmF0aW9uXFxuKyAqIHBvcnQgY29uZmlndXJlZCBpbiBtYXBfeGRwX3NldHVwICh6ZXJvL3Vuc2V0IGZpbHRlcnMgbWF0Y2ggYW55dGhpbmcpLlxcbisgKi9cXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHhkcF9tYXRjaF9zZXR1cChzdHJ1Y3QgeGRwX21kICpjdHgpXFxuIHtcXG4gXFx0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKWN0eC1cXHUwMDNlZGF0YV9lbmQ7XFxuIFxcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKWN0eC1cXHUwMDNlZGF0YTtcXG4tXFx0ZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSByc3NfdHlwZSA9IDA7XFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGRhdGE7XFxuIFxcdF9fdTggbDRfcHJvdG8gPSAwO1xcbi1cXHRfX3UzMiBoYXNoID0gMDtcXG4tXFx0X191MzIga2V5LCB2YWw7XFxuIFxcdHZvaWQgKmw0ID0gTlVMTDtcXG4tXFx0X191MzIgKmNudDtcXG4tXFx0aW50IHJldDtcXG4rXFx0X191MzIga2V5O1xcbiBcXG4gXFx0aWYgKCh2b2lkICopKGV0aCArIDEpIFxcdTAwM2UgZGF0YV9lbmQpXFxuLVxcdFxcdHJldHVybiBYRFBfUEFTUztcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0aWYgKGV0aC1cXHUwMDNlaF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVApKSB7XFxuIFxcdFxcdHN0cnVjdCBpcGhkciAqaXBoID0gKHZvaWQgKikoZXRoICsgMSk7XFxuIFxcbiBcXHRcXHRpZiAoKHZvaWQgKikoaXBoICsgMSkgXFx1MDAzZSBkYXRhX2VuZClcXG4tXFx0XFx0XFx0cmV0dXJuIFhEUF9QQVNTO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdGw0X3Byb3RvID0gaXBoLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0XFx0bDQgPSAodm9pZCAqKShpcGggKyAxKTtcXG4gXFx0fSBlbHNlIGlmIChldGgtXFx1MDAzZWhfcHJvdG8gPT0gYnBmX2h0b25zKEVUSF9QX0lQVjYpKSB7XFxuIFxcdFxcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gKHZvaWQgKikoZXRoICsgMSk7XFxuIFxcbiBcXHRcXHRpZiAoKHZvaWQgKikoaXA2aCArIDEpIFxcdTAwM2UgZGF0YV9lbmQpXFxuLVxcdFxcdFxcdHJldHVybiBYRFBfUEFTUztcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRcXHRsNF9wcm90byA9IGlwNmgtXFx1MDAzZW5leHRoZHI7XFxuIFxcdFxcdGw0ID0gKHZvaWQgKikoaXA2aCArIDEpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWw0KVxcbi1cXHRcXHRyZXR1cm4gWERQX1BBU1M7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdC8qIEZpbHRlciBvbiB0aGUgY29uZmlndXJlZCBwcm90b2NvbCAobWFwX3hkcF9zZXR1cCBrZXkgWERQX1BST1RPKS5cXG4gXFx0ICogV2hlbiBzZXQsIG9ubHkgcHJvY2VzcyBwYWNrZXRzIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgTDQgcHJvdG9jb2wuXFxuQEAgLTEyMSw3ICsxNTAsNyBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4gXFx0X19zMzIgKnByb3RvX2NmZyA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNm1hcF94ZHBfc2V0dXAsIFxcdTAwMjZrZXkpO1xcbiBcXG4gXFx0aWYgKHByb3RvX2NmZyBcXHUwMDI2XFx1MDAyNiAqcHJvdG9fY2ZnICE9IDAgXFx1MDAyNlxcdTAwMjYgbDRfcHJvdG8gIT0gKF9fdTgpKnByb3RvX2NmZylcXG4tXFx0XFx0cmV0dXJuIFhEUF9QQVNTO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKiBGaWx0ZXIgb24gdGhlIGNvbmZpZ3VyZWQgcG9ydCAobWFwX3hkcF9zZXR1cCBrZXkgWERQX1BPUlQpLlxcbiBcXHQgKiBPbmx5IGFwcGxpZXMgdG8gcHJvdG9jb2xzIHdpdGggcG9ydHMgKFVEUCwgVENQKS5cXG5AQCAtMTMzLDkgKzE2MiwyNCBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4gXFx0XFx0X191MTYgZGVzdCA9IGdldF9kZXN0X3BvcnQobDQsIGRhdGFfZW5kLCBsNF9wcm90byk7XFxuIFxcbiBcXHRcXHRpZiAoIWRlc3QgfHwgYnBmX250b2hzKGRlc3QpICE9IChfX3UxNikqcG9ydF9jZmcpXFxuLVxcdFxcdFxcdHJldHVybiBYRFBfUEFTUztcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ4ZHBcXFwiKVxcbitpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4re1xcbitcXHRlbnVtIHhkcF9yc3NfaGFzaF90eXBlIHJzc190eXBlID0gMDtcXG4rXFx0X191MzIgaGFzaCA9IDA7XFxuK1xcdF9fdTMyIGtleSwgdmFsO1xcbitcXHRfX3UzMiAqY250O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCF4ZHBfbWF0Y2hfc2V0dXAoY3R4KSlcXG4rXFx0XFx0cmV0dXJuIFhEUF9QQVNTO1xcbitcXG4gXFx0cmV0ID0gYnBmX3hkcF9tZXRhZGF0YV9yeF9oYXNoKGN0eCwgXFx1MDAyNmhhc2gsIFxcdTAwMjZyc3NfdHlwZSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGtleSA9IFJTU19LRVlfRVJSX0NOVDtcXG5AQCAtMTYwLDQgKzIwNCw0NiBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4gXFx0cmV0dXJuIFhEUF9QQVNTO1xcbiB9XFxuIFxcbitTRUMoXFxcInhkcFxcXCIpXFxuK2ludCB4ZHBfcnhfY3N1bShzdHJ1Y3QgeGRwX21kICpjdHgpXFxuK3tcXG4rXFx0ZW51bSB4ZHBfY2hlY2tzdW0gaXBfc3VtbWVkID0gMDtcXG4rXFx0X191OCBja3N1bV9sZXZlbCA9IDA7XFxuK1xcdF9fdTMyIGNrc3VtID0gMDtcXG4rXFx0X191MzIga2V5LCB2YWw7XFxuK1xcdF9fdTMyICpjbnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXhkcF9tYXRjaF9zZXR1cChjdHgpKVxcbitcXHRcXHRyZXR1cm4gWERQX1BBU1M7XFxuK1xcbitcXHRyZXQgPSBicGZfeGRwX21ldGFkYXRhX3J4X2NoZWNrc3VtKGN0eCwgXFx1MDAyNmlwX3N1bW1lZCwgXFx1MDAyNmNrc3VtLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2Y2tzdW1fbGV2ZWwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRrZXkgPSBDU1VNX0tFWV9FUlJfQ05UO1xcbitcXHRcXHRjbnQgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZtYXBfY3N1bSwgXFx1MDAyNmtleSk7XFxuK1xcdFxcdGlmIChjbnQpXFxuK1xcdFxcdFxcdF9fc3luY19mZXRjaF9hbmRfYWRkKGNudCwgMSk7XFxuK1xcdFxcdHJldHVybiBYRFBfUEFTUztcXG4rXFx0fVxcbitcXG4rXFx0a2V5ID0gQ1NVTV9LRVlfSVBfU1VNTUVEO1xcbitcXHR2YWwgPSAoX191MzIpaXBfc3VtbWVkO1xcbitcXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFxcdTAwMjZtYXBfY3N1bSwgXFx1MDAyNmtleSwgXFx1MDAyNnZhbCwgQlBGX0FOWSk7XFxuK1xcbitcXHRrZXkgPSBDU1VNX0tFWV9DS1NVTTtcXG4rXFx0YnBmX21hcF91cGRhdGVfZWxlbShcXHUwMDI2bWFwX2NzdW0sIFxcdTAwMjZrZXksIFxcdTAwMjZja3N1bSwgQlBGX0FOWSk7XFxuK1xcbitcXHRrZXkgPSBDU1VNX0tFWV9MRVZFTDtcXG4rXFx0dmFsID0gY2tzdW1fbGV2ZWw7XFxuK1xcdGJwZl9tYXBfdXBkYXRlX2VsZW0oXFx1MDAyNm1hcF9jc3VtLCBcXHUwMDI2a2V5LCBcXHUwMDI2dmFsLCBCUEZfQU5ZKTtcXG4rXFxuK1xcdGtleSA9IENTVU1fS0VZX1BLVF9DTlQ7XFxuK1xcdGNudCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNm1hcF9jc3VtLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKGNudClcXG4rXFx0XFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoY250LCAxKTtcXG4rXFxuK1xcdHJldHVybiBYRFBfUEFTUztcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjUyOjUzLjk0MjI2ODU3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIzODQ3MDYyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzgxZWIwOTBhN2JiZjMzOTRmNDJlMjcxY2M4NGVjNjhmZWZjMWY3MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMDM6NTI6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHlcbmluZGV4IDMzYTE5ODUzNTZkOTAyLi42ODdjNDNhMTc5N2E0YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L3hkcF9tZXRhZGF0YS5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcveGRwX21ldGFkYXRhLnB5XG5AQCAtOCw2ICs4LDggQEAgVGhlc2UgdGVzdHMgbG9hZCBkZXZpY2UtYm91bmQgWERQIHByb2dyYW1zIGZyb20geGRwX21ldGFkYXRhLmJwZi5vXG4gdGhhdCBjYWxsIG1ldGFkYXRhIGtmdW5jcywgc2VuZCB0cmFmZmljLCBhbmQgdmVyaWZ5IHRoZSBleHRyYWN0ZWRcbiBtZXRhZGF0YSB2aWEgQlBGIG1hcHMuXG4gXCJcIlwiXG4raW1wb3J0IHRpbWVcbitcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZXhpdCwga3NmdF9nZSwga3NmdF9uZSwga3NmdF9wclxuIGZyb20gbGliLnB5IGltcG9ydCBLc2Z0TmFtZWRWYXJpYW50LCBrc2Z0X3ZhcmlhbnRzXG4gZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBLc2Z0U2tpcEV4LCBOZXREcnZFcEVudlxuQEAgLTgxLDggKzgzLDIyIEBAIF9SU1NfS0VZX1RZUEUgPSAxXG4gX1JTU19LRVlfUEtUX0NOVCA9IDJcbiBfUlNTX0tFWV9FUlJfQ05UID0gM1xuIFxuK19DU1VNX0tFWV9JUF9TVU1NRUQgPSAwXG4rX0NTVU1fS0VZX0NLU1VNID0gMVxuK19DU1VNX0tFWV9MRVZFTCA9IDJcbitfQ1NVTV9LRVlfUEtUX0NOVCA9IDNcbitfQ1NVTV9LRVlfRVJSX0NOVCA9IDRcbitcbiBYRFBfUlNTX0w0ID0gMHg4ICAjIEJJVCgzKSBmcm9tIGVudW0geGRwX3Jzc19oYXNoX3R5cGVcbiBcbisjIE1pcnJvciBvZiBlbnVtIHhkcF9jaGVja3N1bSBmcm9tIGluY2x1ZGUvbmV0L3hkcC5oXG4rWERQX0NIRUNLU1VNX05PTkUgPSAweDFcbitYRFBfQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgPSAweDJcbitYRFBfQ0hFQ0tTVU1fQ09NUExFVEUgPSAweDRcbitcbisjIEZpeGVkIGRlc3RpbmF0aW9uIHBvcnQgb2YgdGhlIG5ldC9saWIgY3N1bSB0b29sXG4rX0NTVU1fVE9PTF9QT1JUID0gMzQwMDBcbitcbiBcbiBAa3NmdF92YXJpYW50cyhbXG4gICAgIEtzZnROYW1lZFZhcmlhbnQoXCJ0Y3BcIiwgXCJ0Y3BcIiksXG5AQCAtMTMwLDYgKzE0Niw5MSBAQCBkZWYgdGVzdF94ZHBfcnNzX2hhc2goY2ZnLCBwcm90byk6XG4gICAgICAgICAgICAgZlwiUlNTIGhhc2ggdHlwZSBzaG91bGQgaW5jbHVkZSBMNCBmb3Ige3Byb3RvLnVwcGVyKCl9IHRyYWZmaWNcIilcbiBcbiBcbitkZWYgX3JlcXVpcmVfcnhfY3N1bV9tZXRhKGNmZyk6XG4rICAgIFwiXCJcIlNraXAgdW5sZXNzIHRoZSBkZXZpY2UgZXhwb3NlcyBYRFAgUlggY2hlY2tzdW0gbWV0YWRhdGEuXCJcIlwiXG4rICAgIGRldl9pbmZvID0gY2ZnLm5ldG5sLmRldl9nZXQoe1wiaWZpbmRleFwiOiBjZmcuaWZpbmRleH0pXG4rICAgIHJ4X21ldGEgPSBkZXZfaW5mby5nZXQoXCJ4ZHAtcngtbWV0YWRhdGEtZmVhdHVyZXNcIiwgW10pXG4rICAgIGlmIFwiY2hlY2tzdW1cIiBub3QgaW4gcnhfbWV0YTpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBYRFAgcnggY2hlY2tzdW0gbWV0YWRhdGFcIilcbitcbitcbitAa3NmdF92YXJpYW50cyhbXG4rICAgIEtzZnROYW1lZFZhcmlhbnQoXCJ0Y3BcIiwgXCJ0Y3BcIiksXG4rICAgIEtzZnROYW1lZFZhcmlhbnQoXCJ1ZHBcIiwgXCJ1ZHBcIiksXG4rXSlcbitkZWYgdGVzdF94ZHBfcnhfY3N1bV92YWxpZChjZmcsIHByb3RvKTpcbisgICAgXCJcIlwiVGVzdCBSWCBjaGVja3N1bSBtZXRhZGF0YSBmb3IgcGFja2V0cyB3aXRoIGEgY29ycmVjdCBjaGVja3N1bS5cbitcbisgICAgTG9hZHMgdGhlIHhkcF9yeF9jc3VtIHByb2dyYW0sIHNlbmRzIHRyYWZmaWMgd2l0aCBhIHZhbGlkIEw0IGNoZWNrc3VtXG4rICAgIGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludCwgYW5kIHZlcmlmaWVzIHRoYXQgdGhlIGRldmljZSByZXBvcnRlZCBhXG4rICAgIHVzYWJsZSBjaGVja3N1bSB2ZXJkaWN0IChDSEVDS1NVTV9VTk5FQ0VTU0FSWSBhbmQvb3IgYVxuKyAgICBDSEVDS1NVTV9DT01QTEVURSB2YWx1ZSkgdmlhIGJwZl94ZHBfbWV0YWRhdGFfcnhfY2hlY2tzdW0oKS5cbisgICAgXCJcIlwiXG4rICAgIF9yZXF1aXJlX3J4X2NzdW1fbWV0YShjZmcpXG4rXG4rICAgIHByb2dfaW5mbyA9IF9sb2FkX3hkcF9tZXRhZGF0YV9wcm9nKGNmZywgXCJ4ZHBfcnhfY3N1bVwiKVxuK1xuKyAgICBwb3J0ID0gcmFuZF9wb3J0KClcbisgICAgYnBmX21hcF9zZXQoXCJtYXBfeGRwX3NldHVwXCIsIF9TRVRVUF9LRVlfUE9SVCwgcG9ydClcbitcbisgICAgY3N1bV9tYXBfaWQgPSBwcm9nX2luZm9bXCJtYXBzXCJdW1wibWFwX2NzdW1cIl1cbitcbisgICAgX3NlbmRfcHJvYmUoY2ZnLCBwb3J0LCBwcm90bz1wcm90bylcbitcbisgICAgY3N1bSA9IGJwZl9tYXBfZHVtcChjc3VtX21hcF9pZClcbitcbisgICAgcGt0X2NudCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9QS1RfQ05ULCAwKVxuKyAgICBlcnJfY250ID0gY3N1bS5nZXQoX0NTVU1fS0VZX0VSUl9DTlQsIDApXG4rICAgIGlwX3N1bW1lZCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9JUF9TVU1NRUQsIDApXG4rXG4rICAgIGtzZnRfZ2UocGt0X2NudCwgMSwgY29tbWVudD1cInNob3VsZCBoYXZlIHJlY2VpdmVkIGF0IGxlYXN0IG9uZSBwYWNrZXRcIilcbisgICAga3NmdF9lcShlcnJfY250LCAwLCBjb21tZW50PWZcIlJYIGNoZWNrc3VtIGVycm9yIGNvdW50OiB7ZXJyX2NudH1cIilcbitcbisgICAga3NmdF9wcihmXCIgIGlwX3N1bW1lZDoge2lwX3N1bW1lZDojeH0gY2tzdW06IFwiXG4rICAgICAgICAgICAgZlwie2NzdW0uZ2V0KF9DU1VNX0tFWV9DS1NVTSwgMCk6IzAxMHh9IFwiXG4rICAgICAgICAgICAgZlwibGV2ZWw6IHtjc3VtLmdldChfQ1NVTV9LRVlfTEVWRUwsIDApfVwiKVxuKyAgICBrc2Z0X25lKGlwX3N1bW1lZCBcdTAwMjYgKFhEUF9DSEVDS1NVTV9VTk5FQ0VTU0FSWSB8IFhEUF9DSEVDS1NVTV9DT01QTEVURSksIDAsXG4rICAgICAgICAgICAgXCJkZXZpY2Ugc2hvdWxkIHJlcG9ydCBhIGNoZWNrc3VtIHZlcmRpY3QgZm9yIGEgdmFsaWQgcGFja2V0XCIpXG4rXG4rXG4rZGVmIHRlc3RfeGRwX3J4X2NzdW1faW52YWxpZChjZmcpOlxuKyAgICBcIlwiXCJUZXN0IFJYIGNoZWNrc3VtIG1ldGFkYXRhIGZvciBwYWNrZXRzIHdpdGggYSBjb3JydXB0ZWQgY2hlY2tzdW0uXG4rXG4rICAgIFNlbmRzIFVEUCBwYWNrZXRzIHdpdGggYW4gaW50ZW50aW9uYWxseSBiYWQgTDQgY2hlY2tzdW0gdXNpbmcgdGhlXG4rICAgIG5ldC9saWIgY3N1bSB0b29sIGFuZCB2ZXJpZmllcyB0aGUgZGV2aWNlIGRvZXMgbm90IGNsYWltIGl0IHZhbGlkYXRlZFxuKyAgICB0aGVtOiB0aGUgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgYml0IG11c3Qgbm90IGJlIHNldC5cbisgICAgXCJcIlwiXG4rICAgIF9yZXF1aXJlX3J4X2NzdW1fbWV0YShjZmcpXG4rXG4rICAgIGlwdmVyID0gY2ZnLmFkZHJfaXB2ZXJcbisgICAgYmluX3JlbW90ZSA9IGNmZy5yZW1vdGUuZGVwbG95KGNmZy5uZXRfbGliX2RpciAvIFwiY3N1bVwiKVxuK1xuKyAgICBwcm9nX2luZm8gPSBfbG9hZF94ZHBfbWV0YWRhdGFfcHJvZyhjZmcsIFwieGRwX3J4X2NzdW1cIilcbitcbisgICAgYnBmX21hcF9zZXQoXCJtYXBfeGRwX3NldHVwXCIsIF9TRVRVUF9LRVlfUE9SVCwgX0NTVU1fVE9PTF9QT1JUKVxuK1xuKyAgICBjc3VtX21hcF9pZCA9IHByb2dfaW5mb1tcIm1hcHNcIl1bXCJtYXBfY3N1bVwiXVxuK1xuKyAgICBjbWQoZlwie2Jpbl9yZW1vdGV9IC1pIHtjZmcucmVtb3RlX2lmbmFtZX0gLW4gMjAgLXtpcHZlcn0gXCJcbisgICAgICAgIGZcIi1TIHtjZmcucmVtb3RlX2FkZHJ9IC1EIHtjZmcuYWRkcn0gLXIgMSAtVCAtRVwiLFxuKyAgICAgICAgaG9zdD1jZmcucmVtb3RlKVxuK1xuKyAgICAjIG5vIHJlY2VpdmVyIHRvIHN5bmNocm9uaXplIGFnYWluc3Q7IGxldCBOQVBJIGRyYWluIHRoZSBsYXN0IHBhY2tldHNcbisgICAgdGltZS5zbGVlcCgxKVxuK1xuKyAgICBjc3VtID0gYnBmX21hcF9kdW1wKGNzdW1fbWFwX2lkKVxuK1xuKyAgICBwa3RfY250ID0gY3N1bS5nZXQoX0NTVU1fS0VZX1BLVF9DTlQsIDApXG4rICAgIGlwX3N1bW1lZCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9JUF9TVU1NRUQsIDApXG4rXG4rICAgIGtzZnRfZ2UocGt0X2NudCwgMSwgY29tbWVudD1cInNob3VsZCBoYXZlIHJlY2VpdmVkIGF0IGxlYXN0IG9uZSBwYWNrZXRcIilcbitcbisgICAga3NmdF9wcihmXCIgIGlwX3N1bW1lZDoge2lwX3N1bW1lZDojeH1cIilcbisgICAga3NmdF9lcShpcF9zdW1tZWQgXHUwMDI2IFhEUF9DSEVDS1NVTV9VTk5FQ0VTU0FSWSwgMCxcbisgICAgICAgICAgICBcImRldmljZSBtdXN0IG5vdCByZXBvcnQgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgZm9yIGEgY29ycnVwdGVkIFwiXG4rICAgICAgICAgICAgXCJjaGVja3N1bVwiKVxuK1xuK1xuIGRlZiBtYWluKCk6XG4gICAgIFwiXCJcIlJ1biBYRFAgbWV0YWRhdGEga2Z1bmMgdGVzdHMgYWdhaW5zdCBhIHJlYWwgZGV2aWNlLlwiXCJcIlxuICAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6XG5AQCAtMTM3LDYgKzIzOCw4IEBAIGRlZiBtYWluKCk6XG4gICAgICAgICBrc2Z0X3J1bihcbiAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgIHRlc3RfeGRwX3Jzc19oYXNoLFxuKyAgICAgICAgICAgICAgICB0ZXN0X3hkcF9yeF9jc3VtX3ZhbGlkLFxuKyAgICAgICAgICAgICAgICB0ZXN0X3hkcF9yeF9jc3VtX2ludmFsaWQsXG4gICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICBhcmdzPShjZmcsKSlcbiAgICAga3NmdF9leGl0KClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIveGRwX21ldGFkYXRhLmJwZi5jXG5pbmRleCBmNzFmNTkyMTUyMzlmZC4uNzBkZWNhZTBhNjYzN2UgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi94ZHBfbWV0YWRhdGEuYnBmLmNcbkBAIC0xLDYgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4gI2luY2x1ZGUgXHUwMDNjc3RkZGVmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG5AQCAtNDAsNiArNDEsMjQgQEAgc3RydWN0IHtcbiBcdF9fdWludChtYXhfZW50cmllcywgNCk7XG4gfSBtYXBfcnNzIFNFQyhcIi5tYXBzXCIpO1xuIFxuKy8qIFJYIGNoZWNrc3VtIHJlc3VsdHM6IGtleSAwID0gaXBfc3VtbWVkIGJpdG1hc2ssIGtleSAxID0gaHcgY2tzdW0gdmFsdWUsXG4rICoga2V5IDIgPSBja3N1bSBsZXZlbCwga2V5IDMgPSBwYWNrZXQgY291bnQsIGtleSA0ID0gZXJyb3IgY291bnQuXG4rICovXG4rZW51bSB7XG4rXHRDU1VNX0tFWV9JUF9TVU1NRUQgPSAwLFxuK1x0Q1NVTV9LRVlfQ0tTVU0gPSAxLFxuK1x0Q1NVTV9LRVlfTEVWRUwgPSAyLFxuK1x0Q1NVTV9LRVlfUEtUX0NOVCA9IDMsXG4rXHRDU1VNX0tFWV9FUlJfQ05UID0gNCxcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIF9fdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgX191MzIpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCA1KTtcbit9IG1hcF9jc3VtIFNFQyhcIi5tYXBzXCIpO1xuK1xuIC8qIE1pcnJvciBvZiBlbnVtIHhkcF9yc3NfaGFzaF90eXBlIGZyb20gaW5jbHVkZS9uZXQveGRwLmguXG4gICogTmVlZGVkIGJlY2F1c2UgdGhlIGVudW0gaXMgbm90IHBhcnQgb2YgVUFQSSBoZWFkZXJzLlxuICAqL1xuQEAgLTU1LDggKzc0LDIwIEBAIGVudW0geGRwX3Jzc19oYXNoX3R5cGUge1xuIFx0WERQX1JTU19MNF9JQ01QID0gMVUgXHUwMDNjXHUwMDNjIDgsXG4gfTtcbiBcbisvKiBNaXJyb3Igb2YgZW51bSB4ZHBfY2hlY2tzdW0gZnJvbSBpbmNsdWRlL25ldC94ZHAuaC5cbisgKiBOZWVkZWQgYmVjYXVzZSB0aGUgZW51bSBpcyBub3QgcGFydCBvZiBVQVBJIGhlYWRlcnMuXG4rICovXG4rZW51bSB4ZHBfY2hlY2tzdW0ge1xuK1x0WERQX0NIRUNLU1VNX05PTkUgPSAxVSBcdTAwM2NcdTAwM2MgMCxcbitcdFhEUF9DSEVDS1NVTV9VTk5FQ0VTU0FSWSA9IDFVIFx1MDAzY1x1MDAzYyAxLFxuK1x0WERQX0NIRUNLU1VNX0NPTVBMRVRFID0gMVUgXHUwMDNjXHUwMDNjIDIsXG4rfTtcbitcbiBleHRlcm4gaW50IGJwZl94ZHBfbWV0YWRhdGFfcnhfaGFzaChjb25zdCBzdHJ1Y3QgeGRwX21kICpjdHgsIF9fdTMyICpoYXNoLFxuIFx0XHRcdFx0ICAgIGVudW0geGRwX3Jzc19oYXNoX3R5cGUgKnJzc190eXBlKSBfX2tzeW07XG4rZXh0ZXJuIGludCBicGZfeGRwX21ldGFkYXRhX3J4X2NoZWNrc3VtKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCxcbitcdFx0XHRcdFx0ZW51bSB4ZHBfY2hlY2tzdW0gKmlwX3N1bW1lZCxcbitcdFx0XHRcdFx0X191MzIgKmNrc3VtLCBfX3U4ICpja3N1bV9sZXZlbCkgX19rc3ltO1xuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX191MTYgZ2V0X2Rlc3RfcG9ydCh2b2lkICpsNCwgdm9pZCAqZGF0YV9lbmQsXG4gXHRcdFx0XHRcdCAgIF9fdTggcHJvdG9jb2wpXG5AQCAtNzgsNDEgKzEwOSwzOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fdTE2IGdldF9kZXN0X3BvcnQodm9pZCAqbDQsIHZvaWQgKmRhdGFfZW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVNFQyhcInhkcFwiKVxuLWludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KVxuKy8qIFJldHVybiB0cnVlIHdoZW4gdGhlIHBhY2tldCBtYXRjaGVzIHRoZSBMNCBwcm90b2NvbCBhbmQgZGVzdGluYXRpb25cbisgKiBwb3J0IGNvbmZpZ3VyZWQgaW4gbWFwX3hkcF9zZXR1cCAoemVyby91bnNldCBmaWx0ZXJzIG1hdGNoIGFueXRoaW5nKS5cbisgKi9cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgeGRwX21hdGNoX3NldHVwKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiB7XG4gXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpY3R4LVx1MDAzZWRhdGFfZW5kO1xuIFx0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpY3R4LVx1MDAzZWRhdGE7XG4tXHRlbnVtIHhkcF9yc3NfaGFzaF90eXBlIHJzc190eXBlID0gMDtcbiBcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGRhdGE7XG4gXHRfX3U4IGw0X3Byb3RvID0gMDtcbi1cdF9fdTMyIGhhc2ggPSAwO1xuLVx0X191MzIga2V5LCB2YWw7XG4gXHR2b2lkICpsNCA9IE5VTEw7XG4tXHRfX3UzMiAqY250O1xuLVx0aW50IHJldDtcbitcdF9fdTMyIGtleTtcbiBcbiBcdGlmICgodm9pZCAqKShldGggKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4tXHRcdHJldHVybiBYRFBfUEFTUztcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGJwZl9odG9ucyhFVEhfUF9JUCkpIHtcbiBcdFx0c3RydWN0IGlwaGRyICppcGggPSAodm9pZCAqKShldGggKyAxKTtcbiBcbiBcdFx0aWYgKCh2b2lkICopKGlwaCArIDEpIFx1MDAzZSBkYXRhX2VuZClcbi1cdFx0XHRyZXR1cm4gWERQX1BBU1M7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHRsNF9wcm90byA9IGlwaC1cdTAwM2Vwcm90b2NvbDtcbiBcdFx0bDQgPSAodm9pZCAqKShpcGggKyAxKTtcbiBcdH0gZWxzZSBpZiAoZXRoLVx1MDAzZWhfcHJvdG8gPT0gYnBmX2h0b25zKEVUSF9QX0lQVjYpKSB7XG4gXHRcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gKHZvaWQgKikoZXRoICsgMSk7XG4gXG4gXHRcdGlmICgodm9pZCAqKShpcDZoICsgMSkgXHUwMDNlIGRhdGFfZW5kKVxuLVx0XHRcdHJldHVybiBYRFBfUEFTUztcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdGw0X3Byb3RvID0gaXA2aC1cdTAwM2VuZXh0aGRyO1xuIFx0XHRsNCA9ICh2b2lkICopKGlwNmggKyAxKTtcbiBcdH1cbiBcbiBcdGlmICghbDQpXG4tXHRcdHJldHVybiBYRFBfUEFTUztcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogRmlsdGVyIG9uIHRoZSBjb25maWd1cmVkIHByb3RvY29sIChtYXBfeGRwX3NldHVwIGtleSBYRFBfUFJPVE8pLlxuIFx0ICogV2hlbiBzZXQsIG9ubHkgcHJvY2VzcyBwYWNrZXRzIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgTDQgcHJvdG9jb2wuXG5AQCAtMTIxLDcgKzE1MCw3IEBAIGludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KVxuIFx0X19zMzIgKnByb3RvX2NmZyA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2bWFwX3hkcF9zZXR1cCwgXHUwMDI2a2V5KTtcbiBcbiBcdGlmIChwcm90b19jZmcgXHUwMDI2XHUwMDI2ICpwcm90b19jZmcgIT0gMCBcdTAwMjZcdTAwMjYgbDRfcHJvdG8gIT0gKF9fdTgpKnByb3RvX2NmZylcbi1cdFx0cmV0dXJuIFhEUF9QQVNTO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBGaWx0ZXIgb24gdGhlIGNvbmZpZ3VyZWQgcG9ydCAobWFwX3hkcF9zZXR1cCBrZXkgWERQX1BPUlQpLlxuIFx0ICogT25seSBhcHBsaWVzIHRvIHByb3RvY29scyB3aXRoIHBvcnRzIChVRFAsIFRDUCkuXG5AQCAtMTMzLDkgKzE2MiwyNCBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiBcdFx0X191MTYgZGVzdCA9IGdldF9kZXN0X3BvcnQobDQsIGRhdGFfZW5kLCBsNF9wcm90byk7XG4gXG4gXHRcdGlmICghZGVzdCB8fCBicGZfbnRvaHMoZGVzdCkgIT0gKF9fdTE2KSpwb3J0X2NmZylcbi1cdFx0XHRyZXR1cm4gWERQX1BBU1M7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK1NFQyhcInhkcFwiKVxuK2ludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdGVudW0geGRwX3Jzc19oYXNoX3R5cGUgcnNzX3R5cGUgPSAwO1xuK1x0X191MzIgaGFzaCA9IDA7XG4rXHRfX3UzMiBrZXksIHZhbDtcbitcdF9fdTMyICpjbnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF4ZHBfbWF0Y2hfc2V0dXAoY3R4KSlcbitcdFx0cmV0dXJuIFhEUF9QQVNTO1xuK1xuIFx0cmV0ID0gYnBmX3hkcF9tZXRhZGF0YV9yeF9oYXNoKGN0eCwgXHUwMDI2aGFzaCwgXHUwMDI2cnNzX3R5cGUpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRrZXkgPSBSU1NfS0VZX0VSUl9DTlQ7XG5AQCAtMTYwLDQgKzIwNCw0NiBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiBcdHJldHVybiBYRFBfUEFTUztcbiB9XG4gXG4rU0VDKFwieGRwXCIpXG4raW50IHhkcF9yeF9jc3VtKHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHRlbnVtIHhkcF9jaGVja3N1bSBpcF9zdW1tZWQgPSAwO1xuK1x0X191OCBja3N1bV9sZXZlbCA9IDA7XG4rXHRfX3UzMiBja3N1bSA9IDA7XG4rXHRfX3UzMiBrZXksIHZhbDtcbitcdF9fdTMyICpjbnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF4ZHBfbWF0Y2hfc2V0dXAoY3R4KSlcbitcdFx0cmV0dXJuIFhEUF9QQVNTO1xuK1xuK1x0cmV0ID0gYnBmX3hkcF9tZXRhZGF0YV9yeF9jaGVja3N1bShjdHgsIFx1MDAyNmlwX3N1bW1lZCwgXHUwMDI2Y2tzdW0sXG4rXHRcdFx0XHRcdCAgIFx1MDAyNmNrc3VtX2xldmVsKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0a2V5ID0gQ1NVTV9LRVlfRVJSX0NOVDtcbitcdFx0Y250ID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZtYXBfY3N1bSwgXHUwMDI2a2V5KTtcbitcdFx0aWYgKGNudClcbitcdFx0XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChjbnQsIDEpO1xuK1x0XHRyZXR1cm4gWERQX1BBU1M7XG4rXHR9XG4rXG4rXHRrZXkgPSBDU1VNX0tFWV9JUF9TVU1NRUQ7XG4rXHR2YWwgPSAoX191MzIpaXBfc3VtbWVkO1xuK1x0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZtYXBfY3N1bSwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIEJQRl9BTlkpO1xuK1xuK1x0a2V5ID0gQ1NVTV9LRVlfQ0tTVU07XG4rXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNm1hcF9jc3VtLCBcdTAwMjZrZXksIFx1MDAyNmNrc3VtLCBCUEZfQU5ZKTtcbitcbitcdGtleSA9IENTVU1fS0VZX0xFVkVMO1xuK1x0dmFsID0gY2tzdW1fbGV2ZWw7XG4rXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNm1hcF9jc3VtLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgQlBGX0FOWSk7XG4rXG4rXHRrZXkgPSBDU1VNX0tFWV9QS1RfQ05UO1xuK1x0Y250ID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZtYXBfY3N1bSwgXHUwMDI2a2V5KTtcbitcdGlmIChjbnQpXG4rXHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKGNudCwgMSk7XG4rXG4rXHRyZXR1cm4gWERQX1BBU1M7XG4rfVxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjUyOjUzLjk0MjI3MDk3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMzg0NjY3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFzc2Vzc21lbnQ6IFhEUCBNZXRhZGF0YSBTZWxmdGVzdCBBZGRpdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgaXQncyBhZGRpbmcgbmV3IHRlc3RzLCBzcGVjaWZpY2FsbHkgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L3hkcF9tZXRhZGF0YS5weWAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuY2AuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSB0aGUgKm9ubHkqIGZpbGVzIG1vZGlmaWVkLiBZZXAsIHRoZSBkaWZmIHNob3dzIGV4YWN0bHkgdGhvc2UgdHdvLlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBxdWVzdGlvbiBpcyBhbHdheXMsIFwiRG9lcyB0aGlzIHBhdGNoIGltcGFjdCBmdW5jdGlvbmFsIGFzcGVjdHMgdGhhdCB3ZSBuZWVkIHRvIGZ1eno/XCIgSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5LiBObyBjaGFuZ2VzIHRvIGFueXRoaW5nIGNvcmUsIG5vIGRyaXZlcnMsIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlLiBHb29kLCBqdXN0IHNlbGYtdGVzdHMuIFRoYXQgbWVhbnMsIGJ5IGRlZmF1bHQsIHdlIHNob3VsZG4ndCBoYXZlIHRvIGZ1enogdGhpcy5cblxuTm93LCBsZXQncyBzZWUuLi4gSSd2ZSBnb3QgdGhlIGluc3RydWN0aW9uczogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24vLi4uLCBjb2RlIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLi4uXCIuIEhtbSwgc2VsZnRlc3RzIGFyZW4ndCBleHBsaWNpdGx5ICpsaXN0ZWQqLCBidXQgdGhleSBmYWxsIHVuZGVyIHRoZSBjYXRlZ29yeSBvZiBub24tZnVuY3Rpb25hbCBjaGFuZ2VzOyB0aGV5J3JlIHRlc3RpbmcgdG9vbHMuIFRoZXkgYXJlbid0IGFsdGVyaW5nIGtlcm5lbCBiZWhhdmlvciBkaXJlY3RseS5cblxuTGV0J3MgY29uZmlybSB0aGF0IGFnYWluLiBUaGUgZGlmZiBzdGlsbCBvbmx5IHNob3dzIHRob3NlIHNhbWUgdHdvIGZpbGVzLiBTbywgZ2l2ZW4gdGhhdCBpdCdzIHB1cmVseSB0ZXN0cywgYW5kIGJhc2VkIG9uIHRoZSBndWlkYW5jZSwgSSB0aGluayB0aGlzIGlzIGEgY2xlYXIgV29ydGhGdXp6aW5nPWZhbHNlLiBObyBuZWVkIHRvIGNvbnN1bHQgYSB0b29sIG9uIHRoaXMgb25lOyBJJ20gY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkwNywiT3V0cHV0VG9rZW5zIjo2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjUzOjE2LjMyNjk0MTQ1NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLykgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLykgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqd2wq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 03:15:54 +0000 UTC FinishedAt: 2026-07-09 03:53:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDAzOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjODFlYjA5MGE3YmJmMzM5NGY0MmUyNzFjYzg0ZWM2OGZlZmMxZjcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwMzo1Mjo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHlcbmluZGV4IDMzYTE5ODUzNTZkOTAyLi42ODdjNDNhMTc5N2E0YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L3hkcF9tZXRhZGF0YS5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcveGRwX21ldGFkYXRhLnB5XG5AQCAtOCw2ICYjNDM7OCw4IEBAIFRoZXNlIHRlc3RzIGxvYWQgZGV2aWNlLWJvdW5kIFhEUCBwcm9ncmFtcyBmcm9tIHhkcF9tZXRhZGF0YS5icGYub1xuIHRoYXQgY2FsbCBtZXRhZGF0YSBrZnVuY3MsIHNlbmQgdHJhZmZpYywgYW5kIHZlcmlmeSB0aGUgZXh0cmFjdGVkXG4gbWV0YWRhdGEgdmlhIEJQRiBtYXBzLlxuIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztpbXBvcnQgdGltZVxuJiM0MztcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZXhpdCwga3NmdF9nZSwga3NmdF9uZSwga3NmdF9wclxuIGZyb20gbGliLnB5IGltcG9ydCBLc2Z0TmFtZWRWYXJpYW50LCBrc2Z0X3ZhcmlhbnRzXG4gZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBLc2Z0U2tpcEV4LCBOZXREcnZFcEVudlxuQEAgLTgxLDggJiM0Mzs4MywyMiBAQCBfUlNTX0tFWV9UWVBFID0gMVxuIF9SU1NfS0VZX1BLVF9DTlQgPSAyXG4gX1JTU19LRVlfRVJSX0NOVCA9IDNcbiBcbiYjNDM7X0NTVU1fS0VZX0lQX1NVTU1FRCA9IDBcbiYjNDM7X0NTVU1fS0VZX0NLU1VNID0gMVxuJiM0MztfQ1NVTV9LRVlfTEVWRUwgPSAyXG4mIzQzO19DU1VNX0tFWV9QS1RfQ05UID0gM1xuJiM0MztfQ1NVTV9LRVlfRVJSX0NOVCA9IDRcbiYjNDM7XG4gWERQX1JTU19MNCA9IDB4OCAgIyBCSVQoMykgZnJvbSBlbnVtIHhkcF9yc3NfaGFzaF90eXBlXG4gXG4mIzQzOyMgTWlycm9yIG9mIGVudW0geGRwX2NoZWNrc3VtIGZyb20gaW5jbHVkZS9uZXQveGRwLmhcbiYjNDM7WERQX0NIRUNLU1VNX05PTkUgPSAweDFcbiYjNDM7WERQX0NIRUNLU1VNX1VOTkVDRVNTQVJZID0gMHgyXG4mIzQzO1hEUF9DSEVDS1NVTV9DT01QTEVURSA9IDB4NFxuJiM0MztcbiYjNDM7IyBGaXhlZCBkZXN0aW5hdGlvbiBwb3J0IG9mIHRoZSBuZXQvbGliIGNzdW0gdG9vbFxuJiM0MztfQ1NVTV9UT09MX1BPUlQgPSAzNDAwMFxuJiM0MztcbiBcbiBAa3NmdF92YXJpYW50cyhbXG4gICAgIEtzZnROYW1lZFZhcmlhbnQoXCYjMzQ7dGNwXCYjMzQ7LCBcJiMzNDt0Y3BcJiMzNDspLFxuQEAgLTEzMCw2ICYjNDM7MTQ2LDkxIEBAIGRlZiB0ZXN0X3hkcF9yc3NfaGFzaChjZmcsIHByb3RvKTpcbiAgICAgICAgICAgICBmXCYjMzQ7UlNTIGhhc2ggdHlwZSBzaG91bGQgaW5jbHVkZSBMNCBmb3Ige3Byb3RvLnVwcGVyKCl9IHRyYWZmaWNcJiMzNDspXG4gXG4gXG4mIzQzO2RlZiBfcmVxdWlyZV9yeF9jc3VtX21ldGEoY2ZnKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1NraXAgdW5sZXNzIHRoZSBkZXZpY2UgZXhwb3NlcyBYRFAgUlggY2hlY2tzdW0gbWV0YWRhdGEuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBkZXZfaW5mbyA9IGNmZy5uZXRubC5kZXZfZ2V0KHtcJiMzNDtpZmluZGV4XCYjMzQ7OiBjZmcuaWZpbmRleH0pXG4mIzQzOyAgICByeF9tZXRhID0gZGV2X2luZm8uZ2V0KFwmIzM0O3hkcC1yeC1tZXRhZGF0YS1mZWF0dXJlc1wmIzM0OywgW10pXG4mIzQzOyAgICBpZiBcJiMzNDtjaGVja3N1bVwmIzM0OyBub3QgaW4gcnhfbWV0YTpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O2RldmljZSBkb2VzIG5vdCBzdXBwb3J0IFhEUCByeCBjaGVja3N1bSBtZXRhZGF0YVwmIzM0OylcbiYjNDM7XG4mIzQzO1xuJiM0MztAa3NmdF92YXJpYW50cyhbXG4mIzQzOyAgICBLc2Z0TmFtZWRWYXJpYW50KFwmIzM0O3RjcFwmIzM0OywgXCYjMzQ7dGNwXCYjMzQ7KSxcbiYjNDM7ICAgIEtzZnROYW1lZFZhcmlhbnQoXCYjMzQ7dWRwXCYjMzQ7LCBcJiMzNDt1ZHBcJiMzNDspLFxuJiM0MztdKVxuJiM0MztkZWYgdGVzdF94ZHBfcnhfY3N1bV92YWxpZChjZmcsIHByb3RvKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgUlggY2hlY2tzdW0gbWV0YWRhdGEgZm9yIHBhY2tldHMgd2l0aCBhIGNvcnJlY3QgY2hlY2tzdW0uXG4mIzQzO1xuJiM0MzsgICAgTG9hZHMgdGhlIHhkcF9yeF9jc3VtIHByb2dyYW0sIHNlbmRzIHRyYWZmaWMgd2l0aCBhIHZhbGlkIEw0IGNoZWNrc3VtXG4mIzQzOyAgICBmcm9tIHRoZSByZW1vdGUgZW5kcG9pbnQsIGFuZCB2ZXJpZmllcyB0aGF0IHRoZSBkZXZpY2UgcmVwb3J0ZWQgYVxuJiM0MzsgICAgdXNhYmxlIGNoZWNrc3VtIHZlcmRpY3QgKENIRUNLU1VNX1VOTkVDRVNTQVJZIGFuZC9vciBhXG4mIzQzOyAgICBDSEVDS1NVTV9DT01QTEVURSB2YWx1ZSkgdmlhIGJwZl94ZHBfbWV0YWRhdGFfcnhfY2hlY2tzdW0oKS5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgX3JlcXVpcmVfcnhfY3N1bV9tZXRhKGNmZylcbiYjNDM7XG4mIzQzOyAgICBwcm9nX2luZm8gPSBfbG9hZF94ZHBfbWV0YWRhdGFfcHJvZyhjZmcsIFwmIzM0O3hkcF9yeF9jc3VtXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIHBvcnQgPSByYW5kX3BvcnQoKVxuJiM0MzsgICAgYnBmX21hcF9zZXQoXCYjMzQ7bWFwX3hkcF9zZXR1cFwmIzM0OywgX1NFVFVQX0tFWV9QT1JULCBwb3J0KVxuJiM0MztcbiYjNDM7ICAgIGNzdW1fbWFwX2lkID0gcHJvZ19pbmZvW1wmIzM0O21hcHNcJiMzNDtdW1wmIzM0O21hcF9jc3VtXCYjMzQ7XVxuJiM0MztcbiYjNDM7ICAgIF9zZW5kX3Byb2JlKGNmZywgcG9ydCwgcHJvdG89cHJvdG8pXG4mIzQzO1xuJiM0MzsgICAgY3N1bSA9IGJwZl9tYXBfZHVtcChjc3VtX21hcF9pZClcbiYjNDM7XG4mIzQzOyAgICBwa3RfY250ID0gY3N1bS5nZXQoX0NTVU1fS0VZX1BLVF9DTlQsIDApXG4mIzQzOyAgICBlcnJfY250ID0gY3N1bS5nZXQoX0NTVU1fS0VZX0VSUl9DTlQsIDApXG4mIzQzOyAgICBpcF9zdW1tZWQgPSBjc3VtLmdldChfQ1NVTV9LRVlfSVBfU1VNTUVELCAwKVxuJiM0MztcbiYjNDM7ICAgIGtzZnRfZ2UocGt0X2NudCwgMSwgY29tbWVudD1cJiMzNDtzaG91bGQgaGF2ZSByZWNlaXZlZCBhdCBsZWFzdCBvbmUgcGFja2V0XCYjMzQ7KVxuJiM0MzsgICAga3NmdF9lcShlcnJfY250LCAwLCBjb21tZW50PWZcJiMzNDtSWCBjaGVja3N1bSBlcnJvciBjb3VudDoge2Vycl9jbnR9XCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIGtzZnRfcHIoZlwmIzM0OyAgaXBfc3VtbWVkOiB7aXBfc3VtbWVkOiN4fSBja3N1bTogXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgIGZcJiMzNDt7Y3N1bS5nZXQoX0NTVU1fS0VZX0NLU1VNLCAwKTojMDEweH0gXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgIGZcJiMzNDtsZXZlbDoge2NzdW0uZ2V0KF9DU1VNX0tFWV9MRVZFTCwgMCl9XCYjMzQ7KVxuJiM0MzsgICAga3NmdF9uZShpcF9zdW1tZWQgXHUwMDI2IChYRFBfQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgfCBYRFBfQ0hFQ0tTVU1fQ09NUExFVEUpLCAwLFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtkZXZpY2Ugc2hvdWxkIHJlcG9ydCBhIGNoZWNrc3VtIHZlcmRpY3QgZm9yIGEgdmFsaWQgcGFja2V0XCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiB0ZXN0X3hkcF9yeF9jc3VtX2ludmFsaWQoY2ZnKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgUlggY2hlY2tzdW0gbWV0YWRhdGEgZm9yIHBhY2tldHMgd2l0aCBhIGNvcnJ1cHRlZCBjaGVja3N1bS5cbiYjNDM7XG4mIzQzOyAgICBTZW5kcyBVRFAgcGFja2V0cyB3aXRoIGFuIGludGVudGlvbmFsbHkgYmFkIEw0IGNoZWNrc3VtIHVzaW5nIHRoZVxuJiM0MzsgICAgbmV0L2xpYiBjc3VtIHRvb2wgYW5kIHZlcmlmaWVzIHRoZSBkZXZpY2UgZG9lcyBub3QgY2xhaW0gaXQgdmFsaWRhdGVkXG4mIzQzOyAgICB0aGVtOiB0aGUgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgYml0IG11c3Qgbm90IGJlIHNldC5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgX3JlcXVpcmVfcnhfY3N1bV9tZXRhKGNmZylcbiYjNDM7XG4mIzQzOyAgICBpcHZlciA9IGNmZy5hZGRyX2lwdmVyXG4mIzQzOyAgICBiaW5fcmVtb3RlID0gY2ZnLnJlbW90ZS5kZXBsb3koY2ZnLm5ldF9saWJfZGlyIC8gXCYjMzQ7Y3N1bVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICBwcm9nX2luZm8gPSBfbG9hZF94ZHBfbWV0YWRhdGFfcHJvZyhjZmcsIFwmIzM0O3hkcF9yeF9jc3VtXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIGJwZl9tYXBfc2V0KFwmIzM0O21hcF94ZHBfc2V0dXBcJiMzNDssIF9TRVRVUF9LRVlfUE9SVCwgX0NTVU1fVE9PTF9QT1JUKVxuJiM0MztcbiYjNDM7ICAgIGNzdW1fbWFwX2lkID0gcHJvZ19pbmZvW1wmIzM0O21hcHNcJiMzNDtdW1wmIzM0O21hcF9jc3VtXCYjMzQ7XVxuJiM0MztcbiYjNDM7ICAgIGNtZChmXCYjMzQ7e2Jpbl9yZW1vdGV9IC1pIHtjZmcucmVtb3RlX2lmbmFtZX0gLW4gMjAgLXtpcHZlcn0gXCYjMzQ7XG4mIzQzOyAgICAgICAgZlwmIzM0Oy1TIHtjZmcucmVtb3RlX2FkZHJ9IC1EIHtjZmcuYWRkcn0gLXIgMSAtVCAtRVwmIzM0OyxcbiYjNDM7ICAgICAgICBob3N0PWNmZy5yZW1vdGUpXG4mIzQzO1xuJiM0MzsgICAgIyBubyByZWNlaXZlciB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0OyBsZXQgTkFQSSBkcmFpbiB0aGUgbGFzdCBwYWNrZXRzXG4mIzQzOyAgICB0aW1lLnNsZWVwKDEpXG4mIzQzO1xuJiM0MzsgICAgY3N1bSA9IGJwZl9tYXBfZHVtcChjc3VtX21hcF9pZClcbiYjNDM7XG4mIzQzOyAgICBwa3RfY250ID0gY3N1bS5nZXQoX0NTVU1fS0VZX1BLVF9DTlQsIDApXG4mIzQzOyAgICBpcF9zdW1tZWQgPSBjc3VtLmdldChfQ1NVTV9LRVlfSVBfU1VNTUVELCAwKVxuJiM0MztcbiYjNDM7ICAgIGtzZnRfZ2UocGt0X2NudCwgMSwgY29tbWVudD1cJiMzNDtzaG91bGQgaGF2ZSByZWNlaXZlZCBhdCBsZWFzdCBvbmUgcGFja2V0XCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIGtzZnRfcHIoZlwmIzM0OyAgaXBfc3VtbWVkOiB7aXBfc3VtbWVkOiN4fVwmIzM0OylcbiYjNDM7ICAgIGtzZnRfZXEoaXBfc3VtbWVkIFx1MDAyNiBYRFBfQ0hFQ0tTVU1fVU5ORUNFU1NBUlksIDAsXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2RldmljZSBtdXN0IG5vdCByZXBvcnQgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgZm9yIGEgY29ycnVwdGVkIFwmIzM0O1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtjaGVja3N1bVwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBtYWluKCk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biBYRFAgbWV0YWRhdGEga2Z1bmMgdGVzdHMgYWdhaW5zdCBhIHJlYWwgZGV2aWNlLlwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6XG5AQCAtMTM3LDYgJiM0MzsyMzgsOCBAQCBkZWYgbWFpbigpOlxuICAgICAgICAga3NmdF9ydW4oXG4gICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICB0ZXN0X3hkcF9yc3NfaGFzaCxcbiYjNDM7ICAgICAgICAgICAgICAgIHRlc3RfeGRwX3J4X2NzdW1fdmFsaWQsXG4mIzQzOyAgICAgICAgICAgICAgICB0ZXN0X3hkcF9yeF9jc3VtX2ludmFsaWQsXG4gICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICBhcmdzPShjZmcsKSlcbiAgICAga3NmdF9leGl0KClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIveGRwX21ldGFkYXRhLmJwZi5jXG5pbmRleCBmNzFmNTkyMTUyMzlmZC4uNzBkZWNhZTBhNjYzN2UgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi94ZHBfbWV0YWRhdGEuYnBmLmNcbkBAIC0xLDYgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuICNpbmNsdWRlIFx1MDAzY3N0ZGRlZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbkBAIC00MCw2ICYjNDM7NDEsMjQgQEAgc3RydWN0IHtcbiBcdF9fdWludChtYXhfZW50cmllcywgNCk7XG4gfSBtYXBfcnNzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4gXG4mIzQzOy8qIFJYIGNoZWNrc3VtIHJlc3VsdHM6IGtleSAwID0gaXBfc3VtbWVkIGJpdG1hc2ssIGtleSAxID0gaHcgY2tzdW0gdmFsdWUsXG4mIzQzOyAqIGtleSAyID0gY2tzdW0gbGV2ZWwsIGtleSAzID0gcGFja2V0IGNvdW50LCBrZXkgNCA9IGVycm9yIGNvdW50LlxuJiM0MzsgKi9cbiYjNDM7ZW51bSB7XG4mIzQzO1x0Q1NVTV9LRVlfSVBfU1VNTUVEID0gMCxcbiYjNDM7XHRDU1VNX0tFWV9DS1NVTSA9IDEsXG4mIzQzO1x0Q1NVTV9LRVlfTEVWRUwgPSAyLFxuJiM0MztcdENTVU1fS0VZX1BLVF9DTlQgPSAzLFxuJiM0MztcdENTVU1fS0VZX0VSUl9DTlQgPSA0LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBfX3UzMik7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBfX3UzMik7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCA1KTtcbiYjNDM7fSBtYXBfY3N1bSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiAvKiBNaXJyb3Igb2YgZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSBmcm9tIGluY2x1ZGUvbmV0L3hkcC5oLlxuICAqIE5lZWRlZCBiZWNhdXNlIHRoZSBlbnVtIGlzIG5vdCBwYXJ0IG9mIFVBUEkgaGVhZGVycy5cbiAgKi9cbkBAIC01NSw4ICYjNDM7NzQsMjAgQEAgZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSB7XG4gXHRYRFBfUlNTX0w0X0lDTVAgPSAxVSBcdTAwM2NcdTAwM2MgOCxcbiB9O1xuIFxuJiM0MzsvKiBNaXJyb3Igb2YgZW51bSB4ZHBfY2hlY2tzdW0gZnJvbSBpbmNsdWRlL25ldC94ZHAuaC5cbiYjNDM7ICogTmVlZGVkIGJlY2F1c2UgdGhlIGVudW0gaXMgbm90IHBhcnQgb2YgVUFQSSBoZWFkZXJzLlxuJiM0MzsgKi9cbiYjNDM7ZW51bSB4ZHBfY2hlY2tzdW0ge1xuJiM0MztcdFhEUF9DSEVDS1NVTV9OT05FID0gMVUgXHUwMDNjXHUwMDNjIDAsXG4mIzQzO1x0WERQX0NIRUNLU1VNX1VOTkVDRVNTQVJZID0gMVUgXHUwMDNjXHUwMDNjIDEsXG4mIzQzO1x0WERQX0NIRUNLU1VNX0NPTVBMRVRFID0gMVUgXHUwMDNjXHUwMDNjIDIsXG4mIzQzO307XG4mIzQzO1xuIGV4dGVybiBpbnQgYnBmX3hkcF9tZXRhZGF0YV9yeF9oYXNoKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCwgX191MzIgKmhhc2gsXG4gXHRcdFx0XHQgICAgZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSAqcnNzX3R5cGUpIF9fa3N5bTtcbiYjNDM7ZXh0ZXJuIGludCBicGZfeGRwX21ldGFkYXRhX3J4X2NoZWNrc3VtKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCxcbiYjNDM7XHRcdFx0XHRcdGVudW0geGRwX2NoZWNrc3VtICppcF9zdW1tZWQsXG4mIzQzO1x0XHRcdFx0XHRfX3UzMiAqY2tzdW0sIF9fdTggKmNrc3VtX2xldmVsKSBfX2tzeW07XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3UxNiBnZXRfZGVzdF9wb3J0KHZvaWQgKmw0LCB2b2lkICpkYXRhX2VuZCxcbiBcdFx0XHRcdFx0ICAgX191OCBwcm90b2NvbClcbkBAIC03OCw0MSAmIzQzOzEwOSwzOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fdTE2IGdldF9kZXN0X3BvcnQodm9pZCAqbDQsIHZvaWQgKmRhdGFfZW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVNFQyhcJiMzNDt4ZHBcJiMzNDspXG4taW50IHhkcF9yc3NfaGFzaChzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzOy8qIFJldHVybiB0cnVlIHdoZW4gdGhlIHBhY2tldCBtYXRjaGVzIHRoZSBMNCBwcm90b2NvbCBhbmQgZGVzdGluYXRpb25cbiYjNDM7ICogcG9ydCBjb25maWd1cmVkIGluIG1hcF94ZHBfc2V0dXAgKHplcm8vdW5zZXQgZmlsdGVycyBtYXRjaCBhbnl0aGluZykuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgeGRwX21hdGNoX3NldHVwKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiB7XG4gXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpY3R4LVx1MDAzZWRhdGFfZW5kO1xuIFx0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpY3R4LVx1MDAzZWRhdGE7XG4tXHRlbnVtIHhkcF9yc3NfaGFzaF90eXBlIHJzc190eXBlID0gMDtcbiBcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGRhdGE7XG4gXHRfX3U4IGw0X3Byb3RvID0gMDtcbi1cdF9fdTMyIGhhc2ggPSAwO1xuLVx0X191MzIga2V5LCB2YWw7XG4gXHR2b2lkICpsNCA9IE5VTEw7XG4tXHRfX3UzMiAqY250O1xuLVx0aW50IHJldDtcbiYjNDM7XHRfX3UzMiBrZXk7XG4gXG4gXHRpZiAoKHZvaWQgKikoZXRoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZClcbi1cdFx0cmV0dXJuIFhEUF9QQVNTO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGJwZl9odG9ucyhFVEhfUF9JUCkpIHtcbiBcdFx0c3RydWN0IGlwaGRyICppcGggPSAodm9pZCAqKShldGggJiM0MzsgMSk7XG4gXG4gXHRcdGlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kKVxuLVx0XHRcdHJldHVybiBYRFBfUEFTUztcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHRsNF9wcm90byA9IGlwaC1cdTAwM2Vwcm90b2NvbDtcbiBcdFx0bDQgPSAodm9pZCAqKShpcGggJiM0MzsgMSk7XG4gXHR9IGVsc2UgaWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGJwZl9odG9ucyhFVEhfUF9JUFY2KSkge1xuIFx0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9ICh2b2lkICopKGV0aCAmIzQzOyAxKTtcbiBcbiBcdFx0aWYgKCh2b2lkICopKGlwNmggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kKVxuLVx0XHRcdHJldHVybiBYRFBfUEFTUztcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHRsNF9wcm90byA9IGlwNmgtXHUwMDNlbmV4dGhkcjtcbiBcdFx0bDQgPSAodm9pZCAqKShpcDZoICYjNDM7IDEpO1xuIFx0fVxuIFxuIFx0aWYgKCFsNClcbi1cdFx0cmV0dXJuIFhEUF9QQVNTO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogRmlsdGVyIG9uIHRoZSBjb25maWd1cmVkIHByb3RvY29sIChtYXBfeGRwX3NldHVwIGtleSBYRFBfUFJPVE8pLlxuIFx0ICogV2hlbiBzZXQsIG9ubHkgcHJvY2VzcyBwYWNrZXRzIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgTDQgcHJvdG9jb2wuXG5AQCAtMTIxLDcgJiM0MzsxNTAsNyBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiBcdF9fczMyICpwcm90b19jZmcgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNm1hcF94ZHBfc2V0dXAsIFx1MDAyNmtleSk7XG4gXG4gXHRpZiAocHJvdG9fY2ZnIFx1MDAyNlx1MDAyNiAqcHJvdG9fY2ZnICE9IDAgXHUwMDI2XHUwMDI2IGw0X3Byb3RvICE9IChfX3U4KSpwcm90b19jZmcpXG4tXHRcdHJldHVybiBYRFBfUEFTUztcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIEZpbHRlciBvbiB0aGUgY29uZmlndXJlZCBwb3J0IChtYXBfeGRwX3NldHVwIGtleSBYRFBfUE9SVCkuXG4gXHQgKiBPbmx5IGFwcGxpZXMgdG8gcHJvdG9jb2xzIHdpdGggcG9ydHMgKFVEUCwgVENQKS5cbkBAIC0xMzMsOSAmIzQzOzE2MiwyNCBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiBcdFx0X191MTYgZGVzdCA9IGdldF9kZXN0X3BvcnQobDQsIGRhdGFfZW5kLCBsNF9wcm90byk7XG4gXG4gXHRcdGlmICghZGVzdCB8fCBicGZfbnRvaHMoZGVzdCkgIT0gKF9fdTE2KSpwb3J0X2NmZylcbi1cdFx0XHRyZXR1cm4gWERQX1BBU1M7XG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3hkcFwmIzM0OylcbiYjNDM7aW50IHhkcF9yc3NfaGFzaChzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIHhkcF9yc3NfaGFzaF90eXBlIHJzc190eXBlID0gMDtcbiYjNDM7XHRfX3UzMiBoYXNoID0gMDtcbiYjNDM7XHRfX3UzMiBrZXksIHZhbDtcbiYjNDM7XHRfX3UzMiAqY250O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICgheGRwX21hdGNoX3NldHVwKGN0eCkpXG4mIzQzO1x0XHRyZXR1cm4gWERQX1BBU1M7XG4mIzQzO1xuIFx0cmV0ID0gYnBmX3hkcF9tZXRhZGF0YV9yeF9oYXNoKGN0eCwgXHUwMDI2aGFzaCwgXHUwMDI2cnNzX3R5cGUpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRrZXkgPSBSU1NfS0VZX0VSUl9DTlQ7XG5AQCAtMTYwLDQgJiM0MzsyMDQsNDYgQEAgaW50IHhkcF9yc3NfaGFzaChzdHJ1Y3QgeGRwX21kICpjdHgpXG4gXHRyZXR1cm4gWERQX1BBU1M7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuJiM0MztpbnQgeGRwX3J4X2NzdW0oc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSB4ZHBfY2hlY2tzdW0gaXBfc3VtbWVkID0gMDtcbiYjNDM7XHRfX3U4IGNrc3VtX2xldmVsID0gMDtcbiYjNDM7XHRfX3UzMiBja3N1bSA9IDA7XG4mIzQzO1x0X191MzIga2V5LCB2YWw7XG4mIzQzO1x0X191MzIgKmNudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXhkcF9tYXRjaF9zZXR1cChjdHgpKVxuJiM0MztcdFx0cmV0dXJuIFhEUF9QQVNTO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfeGRwX21ldGFkYXRhX3J4X2NoZWNrc3VtKGN0eCwgXHUwMDI2aXBfc3VtbWVkLCBcdTAwMjZja3N1bSxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNmNrc3VtX2xldmVsKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrZXkgPSBDU1VNX0tFWV9FUlJfQ05UO1xuJiM0MztcdFx0Y250ID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZtYXBfY3N1bSwgXHUwMDI2a2V5KTtcbiYjNDM7XHRcdGlmIChjbnQpXG4mIzQzO1x0XHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKGNudCwgMSk7XG4mIzQzO1x0XHRyZXR1cm4gWERQX1BBU1M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZXkgPSBDU1VNX0tFWV9JUF9TVU1NRUQ7XG4mIzQzO1x0dmFsID0gKF9fdTMyKWlwX3N1bW1lZDtcbiYjNDM7XHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNm1hcF9jc3VtLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgQlBGX0FOWSk7XG4mIzQzO1xuJiM0MztcdGtleSA9IENTVU1fS0VZX0NLU1VNO1xuJiM0MztcdGJwZl9tYXBfdXBkYXRlX2VsZW0oXHUwMDI2bWFwX2NzdW0sIFx1MDAyNmtleSwgXHUwMDI2Y2tzdW0sIEJQRl9BTlkpO1xuJiM0MztcbiYjNDM7XHRrZXkgPSBDU1VNX0tFWV9MRVZFTDtcbiYjNDM7XHR2YWwgPSBja3N1bV9sZXZlbDtcbiYjNDM7XHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNm1hcF9jc3VtLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgQlBGX0FOWSk7XG4mIzQzO1xuJiM0MztcdGtleSA9IENTVU1fS0VZX1BLVF9DTlQ7XG4mIzQzO1x0Y250ID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZtYXBfY3N1bSwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoY250KVxuJiM0MztcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoY250LCAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFhEUF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLykgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzgxZWIwOTBhN2JiZjMzOTRmNDJlMjcxY2M4NGVjNjhmZWZjMWY3MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMDM6NTI6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHkKaW5kZXggMzNhMTk4NTM1NmQ5MDIuLjY4N2M0M2ExNzk3YTRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcveGRwX21ldGFkYXRhLnB5CkBAIC04LDYgJiM0Mzs4LDggQEAgVGhlc2UgdGVzdHMgbG9hZCBkZXZpY2UtYm91bmQgWERQIHByb2dyYW1zIGZyb20geGRwX21ldGFkYXRhLmJwZi5vCiB0aGF0IGNhbGwgbWV0YWRhdGEga2Z1bmNzLCBzZW5kIHRyYWZmaWMsIGFuZCB2ZXJpZnkgdGhlIGV4dHJhY3RlZAogbWV0YWRhdGEgdmlhIEJQRiBtYXBzLgogJiMzNDsmIzM0OyYjMzQ7CiYjNDM7aW1wb3J0IHRpbWUKJiM0MzsKIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9leGl0LCBrc2Z0X2dlLCBrc2Z0X25lLCBrc2Z0X3ByCiBmcm9tIGxpYi5weSBpbXBvcnQgS3NmdE5hbWVkVmFyaWFudCwga3NmdF92YXJpYW50cwogZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBLc2Z0U2tpcEV4LCBOZXREcnZFcEVudgpAQCAtODEsOCAmIzQzOzgzLDIyIEBAIF9SU1NfS0VZX1RZUEUgPSAxCiBfUlNTX0tFWV9QS1RfQ05UID0gMgogX1JTU19LRVlfRVJSX0NOVCA9IDMKIAomIzQzO19DU1VNX0tFWV9JUF9TVU1NRUQgPSAwCiYjNDM7X0NTVU1fS0VZX0NLU1VNID0gMQomIzQzO19DU1VNX0tFWV9MRVZFTCA9IDIKJiM0MztfQ1NVTV9LRVlfUEtUX0NOVCA9IDMKJiM0MztfQ1NVTV9LRVlfRVJSX0NOVCA9IDQKJiM0MzsKIFhEUF9SU1NfTDQgPSAweDggICMgQklUKDMpIGZyb20gZW51bSB4ZHBfcnNzX2hhc2hfdHlwZQogCiYjNDM7IyBNaXJyb3Igb2YgZW51bSB4ZHBfY2hlY2tzdW0gZnJvbSBpbmNsdWRlL25ldC94ZHAuaAomIzQzO1hEUF9DSEVDS1NVTV9OT05FID0gMHgxCiYjNDM7WERQX0NIRUNLU1VNX1VOTkVDRVNTQVJZID0gMHgyCiYjNDM7WERQX0NIRUNLU1VNX0NPTVBMRVRFID0gMHg0CiYjNDM7CiYjNDM7IyBGaXhlZCBkZXN0aW5hdGlvbiBwb3J0IG9mIHRoZSBuZXQvbGliIGNzdW0gdG9vbAomIzQzO19DU1VNX1RPT0xfUE9SVCA9IDM0MDAwCiYjNDM7CiAKIEBrc2Z0X3ZhcmlhbnRzKFsKICAgICBLc2Z0TmFtZWRWYXJpYW50KCYjMzQ7dGNwJiMzNDssICYjMzQ7dGNwJiMzNDspLApAQCAtMTMwLDYgJiM0MzsxNDYsOTEgQEAgZGVmIHRlc3RfeGRwX3Jzc19oYXNoKGNmZywgcHJvdG8pOgogICAgICAgICAgICAgZiYjMzQ7UlNTIGhhc2ggdHlwZSBzaG91bGQgaW5jbHVkZSBMNCBmb3Ige3Byb3RvLnVwcGVyKCl9IHRyYWZmaWMmIzM0OykKIAogCiYjNDM7ZGVmIF9yZXF1aXJlX3J4X2NzdW1fbWV0YShjZmcpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtTa2lwIHVubGVzcyB0aGUgZGV2aWNlIGV4cG9zZXMgWERQIFJYIGNoZWNrc3VtIG1ldGFkYXRhLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBkZXZfaW5mbyA9IGNmZy5uZXRubC5kZXZfZ2V0KHsmIzM0O2lmaW5kZXgmIzM0OzogY2ZnLmlmaW5kZXh9KQomIzQzOyAgICByeF9tZXRhID0gZGV2X2luZm8uZ2V0KCYjMzQ7eGRwLXJ4LW1ldGFkYXRhLWZlYXR1cmVzJiMzNDssIFtdKQomIzQzOyAgICBpZiAmIzM0O2NoZWNrc3VtJiMzNDsgbm90IGluIHJ4X21ldGE6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7ZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgWERQIHJ4IGNoZWNrc3VtIG1ldGFkYXRhJiMzNDspCiYjNDM7CiYjNDM7CiYjNDM7QGtzZnRfdmFyaWFudHMoWwomIzQzOyAgICBLc2Z0TmFtZWRWYXJpYW50KCYjMzQ7dGNwJiMzNDssICYjMzQ7dGNwJiMzNDspLAomIzQzOyAgICBLc2Z0TmFtZWRWYXJpYW50KCYjMzQ7dWRwJiMzNDssICYjMzQ7dWRwJiMzNDspLAomIzQzO10pCiYjNDM7ZGVmIHRlc3RfeGRwX3J4X2NzdW1fdmFsaWQoY2ZnLCBwcm90byk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1Rlc3QgUlggY2hlY2tzdW0gbWV0YWRhdGEgZm9yIHBhY2tldHMgd2l0aCBhIGNvcnJlY3QgY2hlY2tzdW0uCiYjNDM7CiYjNDM7ICAgIExvYWRzIHRoZSB4ZHBfcnhfY3N1bSBwcm9ncmFtLCBzZW5kcyB0cmFmZmljIHdpdGggYSB2YWxpZCBMNCBjaGVja3N1bQomIzQzOyAgICBmcm9tIHRoZSByZW1vdGUgZW5kcG9pbnQsIGFuZCB2ZXJpZmllcyB0aGF0IHRoZSBkZXZpY2UgcmVwb3J0ZWQgYQomIzQzOyAgICB1c2FibGUgY2hlY2tzdW0gdmVyZGljdCAoQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgYW5kL29yIGEKJiM0MzsgICAgQ0hFQ0tTVU1fQ09NUExFVEUgdmFsdWUpIHZpYSBicGZfeGRwX21ldGFkYXRhX3J4X2NoZWNrc3VtKCkuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBfcmVxdWlyZV9yeF9jc3VtX21ldGEoY2ZnKQomIzQzOwomIzQzOyAgICBwcm9nX2luZm8gPSBfbG9hZF94ZHBfbWV0YWRhdGFfcHJvZyhjZmcsICYjMzQ7eGRwX3J4X2NzdW0mIzM0OykKJiM0MzsKJiM0MzsgICAgcG9ydCA9IHJhbmRfcG9ydCgpCiYjNDM7ICAgIGJwZl9tYXBfc2V0KCYjMzQ7bWFwX3hkcF9zZXR1cCYjMzQ7LCBfU0VUVVBfS0VZX1BPUlQsIHBvcnQpCiYjNDM7CiYjNDM7ICAgIGNzdW1fbWFwX2lkID0gcHJvZ19pbmZvWyYjMzQ7bWFwcyYjMzQ7XVsmIzM0O21hcF9jc3VtJiMzNDtdCiYjNDM7CiYjNDM7ICAgIF9zZW5kX3Byb2JlKGNmZywgcG9ydCwgcHJvdG89cHJvdG8pCiYjNDM7CiYjNDM7ICAgIGNzdW0gPSBicGZfbWFwX2R1bXAoY3N1bV9tYXBfaWQpCiYjNDM7CiYjNDM7ICAgIHBrdF9jbnQgPSBjc3VtLmdldChfQ1NVTV9LRVlfUEtUX0NOVCwgMCkKJiM0MzsgICAgZXJyX2NudCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9FUlJfQ05ULCAwKQomIzQzOyAgICBpcF9zdW1tZWQgPSBjc3VtLmdldChfQ1NVTV9LRVlfSVBfU1VNTUVELCAwKQomIzQzOwomIzQzOyAgICBrc2Z0X2dlKHBrdF9jbnQsIDEsIGNvbW1lbnQ9JiMzNDtzaG91bGQgaGF2ZSByZWNlaXZlZCBhdCBsZWFzdCBvbmUgcGFja2V0JiMzNDspCiYjNDM7ICAgIGtzZnRfZXEoZXJyX2NudCwgMCwgY29tbWVudD1mJiMzNDtSWCBjaGVja3N1bSBlcnJvciBjb3VudDoge2Vycl9jbnR9JiMzNDspCiYjNDM7CiYjNDM7ICAgIGtzZnRfcHIoZiYjMzQ7ICBpcF9zdW1tZWQ6IHtpcF9zdW1tZWQ6I3h9IGNrc3VtOiAmIzM0OwomIzQzOyAgICAgICAgICAgIGYmIzM0O3tjc3VtLmdldChfQ1NVTV9LRVlfQ0tTVU0sIDApOiMwMTB4fSAmIzM0OwomIzQzOyAgICAgICAgICAgIGYmIzM0O2xldmVsOiB7Y3N1bS5nZXQoX0NTVU1fS0VZX0xFVkVMLCAwKX0mIzM0OykKJiM0MzsgICAga3NmdF9uZShpcF9zdW1tZWQgJmFtcDsgKFhEUF9DSEVDS1NVTV9VTk5FQ0VTU0FSWSB8IFhEUF9DSEVDS1NVTV9DT01QTEVURSksIDAsCiYjNDM7ICAgICAgICAgICAgJiMzNDtkZXZpY2Ugc2hvdWxkIHJlcG9ydCBhIGNoZWNrc3VtIHZlcmRpY3QgZm9yIGEgdmFsaWQgcGFja2V0JiMzNDspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIHRlc3RfeGRwX3J4X2NzdW1faW52YWxpZChjZmcpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IFJYIGNoZWNrc3VtIG1ldGFkYXRhIGZvciBwYWNrZXRzIHdpdGggYSBjb3JydXB0ZWQgY2hlY2tzdW0uCiYjNDM7CiYjNDM7ICAgIFNlbmRzIFVEUCBwYWNrZXRzIHdpdGggYW4gaW50ZW50aW9uYWxseSBiYWQgTDQgY2hlY2tzdW0gdXNpbmcgdGhlCiYjNDM7ICAgIG5ldC9saWIgY3N1bSB0b29sIGFuZCB2ZXJpZmllcyB0aGUgZGV2aWNlIGRvZXMgbm90IGNsYWltIGl0IHZhbGlkYXRlZAomIzQzOyAgICB0aGVtOiB0aGUgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgYml0IG11c3Qgbm90IGJlIHNldC4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIF9yZXF1aXJlX3J4X2NzdW1fbWV0YShjZmcpCiYjNDM7CiYjNDM7ICAgIGlwdmVyID0gY2ZnLmFkZHJfaXB2ZXIKJiM0MzsgICAgYmluX3JlbW90ZSA9IGNmZy5yZW1vdGUuZGVwbG95KGNmZy5uZXRfbGliX2RpciAvICYjMzQ7Y3N1bSYjMzQ7KQomIzQzOwomIzQzOyAgICBwcm9nX2luZm8gPSBfbG9hZF94ZHBfbWV0YWRhdGFfcHJvZyhjZmcsICYjMzQ7eGRwX3J4X2NzdW0mIzM0OykKJiM0MzsKJiM0MzsgICAgYnBmX21hcF9zZXQoJiMzNDttYXBfeGRwX3NldHVwJiMzNDssIF9TRVRVUF9LRVlfUE9SVCwgX0NTVU1fVE9PTF9QT1JUKQomIzQzOwomIzQzOyAgICBjc3VtX21hcF9pZCA9IHByb2dfaW5mb1smIzM0O21hcHMmIzM0O11bJiMzNDttYXBfY3N1bSYjMzQ7XQomIzQzOwomIzQzOyAgICBjbWQoZiYjMzQ7e2Jpbl9yZW1vdGV9IC1pIHtjZmcucmVtb3RlX2lmbmFtZX0gLW4gMjAgLXtpcHZlcn0gJiMzNDsKJiM0MzsgICAgICAgIGYmIzM0Oy1TIHtjZmcucmVtb3RlX2FkZHJ9IC1EIHtjZmcuYWRkcn0gLXIgMSAtVCAtRSYjMzQ7LAomIzQzOyAgICAgICAgaG9zdD1jZmcucmVtb3RlKQomIzQzOwomIzQzOyAgICAjIG5vIHJlY2VpdmVyIHRvIHN5bmNocm9uaXplIGFnYWluc3Q7IGxldCBOQVBJIGRyYWluIHRoZSBsYXN0IHBhY2tldHMKJiM0MzsgICAgdGltZS5zbGVlcCgxKQomIzQzOwomIzQzOyAgICBjc3VtID0gYnBmX21hcF9kdW1wKGNzdW1fbWFwX2lkKQomIzQzOwomIzQzOyAgICBwa3RfY250ID0gY3N1bS5nZXQoX0NTVU1fS0VZX1BLVF9DTlQsIDApCiYjNDM7ICAgIGlwX3N1bW1lZCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9JUF9TVU1NRUQsIDApCiYjNDM7CiYjNDM7ICAgIGtzZnRfZ2UocGt0X2NudCwgMSwgY29tbWVudD0mIzM0O3Nob3VsZCBoYXZlIHJlY2VpdmVkIGF0IGxlYXN0IG9uZSBwYWNrZXQmIzM0OykKJiM0MzsKJiM0MzsgICAga3NmdF9wcihmJiMzNDsgIGlwX3N1bW1lZDoge2lwX3N1bW1lZDojeH0mIzM0OykKJiM0MzsgICAga3NmdF9lcShpcF9zdW1tZWQgJmFtcDsgWERQX0NIRUNLU1VNX1VOTkVDRVNTQVJZLCAwLAomIzQzOyAgICAgICAgICAgICYjMzQ7ZGV2aWNlIG11c3Qgbm90IHJlcG9ydCBDSEVDS1NVTV9VTk5FQ0VTU0FSWSBmb3IgYSBjb3JydXB0ZWQgJiMzNDsKJiM0MzsgICAgICAgICAgICAmIzM0O2NoZWNrc3VtJiMzNDspCiYjNDM7CiYjNDM7CiBkZWYgbWFpbigpOgogICAgICYjMzQ7JiMzNDsmIzM0O1J1biBYRFAgbWV0YWRhdGEga2Z1bmMgdGVzdHMgYWdhaW5zdCBhIHJlYWwgZGV2aWNlLiYjMzQ7JiMzNDsmIzM0OwogICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzoKQEAgLTEzNyw2ICYjNDM7MjM4LDggQEAgZGVmIG1haW4oKToKICAgICAgICAga3NmdF9ydW4oCiAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgdGVzdF94ZHBfcnNzX2hhc2gsCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3RfeGRwX3J4X2NzdW1fdmFsaWQsCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3RfeGRwX3J4X2NzdW1faW52YWxpZCwKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICBhcmdzPShjZmcsKSkKICAgICBrc2Z0X2V4aXQoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi94ZHBfbWV0YWRhdGEuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuYwppbmRleCBmNzFmNTkyMTUyMzlmZC4uNzBkZWNhZTBhNjYzN2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIveGRwX21ldGFkYXRhLmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIveGRwX21ldGFkYXRhLmJwZi5jCkBAIC0xLDYgJiM0MzsxLDcgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAKICNpbmNsdWRlICZsdDtzdGRkZWYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKQEAgLTQwLDYgJiM0Mzs0MSwyNCBAQCBzdHJ1Y3QgewogCV9fdWludChtYXhfZW50cmllcywgNCk7CiB9IG1hcF9yc3MgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MzsvKiBSWCBjaGVja3N1bSByZXN1bHRzOiBrZXkgMCA9IGlwX3N1bW1lZCBiaXRtYXNrLCBrZXkgMSA9IGh3IGNrc3VtIHZhbHVlLAomIzQzOyAqIGtleSAyID0gY2tzdW0gbGV2ZWwsIGtleSAzID0gcGFja2V0IGNvdW50LCBrZXkgNCA9IGVycm9yIGNvdW50LgomIzQzOyAqLwomIzQzO2VudW0gewomIzQzOwlDU1VNX0tFWV9JUF9TVU1NRUQgPSAwLAomIzQzOwlDU1VNX0tFWV9DS1NVTSA9IDEsCiYjNDM7CUNTVU1fS0VZX0xFVkVMID0gMiwKJiM0MzsJQ1NVTV9LRVlfUEtUX0NOVCA9IDMsCiYjNDM7CUNTVU1fS0VZX0VSUl9DTlQgPSA0LAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdHlwZShrZXksIF9fdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBfX3UzMik7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgNSk7CiYjNDM7fSBtYXBfY3N1bSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKIC8qIE1pcnJvciBvZiBlbnVtIHhkcF9yc3NfaGFzaF90eXBlIGZyb20gaW5jbHVkZS9uZXQveGRwLmguCiAgKiBOZWVkZWQgYmVjYXVzZSB0aGUgZW51bSBpcyBub3QgcGFydCBvZiBVQVBJIGhlYWRlcnMuCiAgKi8KQEAgLTU1LDggJiM0Mzs3NCwyMCBAQCBlbnVtIHhkcF9yc3NfaGFzaF90eXBlIHsKIAlYRFBfUlNTX0w0X0lDTVAgPSAxVSAmbHQ7Jmx0OyA4LAogfTsKIAomIzQzOy8qIE1pcnJvciBvZiBlbnVtIHhkcF9jaGVja3N1bSBmcm9tIGluY2x1ZGUvbmV0L3hkcC5oLgomIzQzOyAqIE5lZWRlZCBiZWNhdXNlIHRoZSBlbnVtIGlzIG5vdCBwYXJ0IG9mIFVBUEkgaGVhZGVycy4KJiM0MzsgKi8KJiM0MztlbnVtIHhkcF9jaGVja3N1bSB7CiYjNDM7CVhEUF9DSEVDS1NVTV9OT05FID0gMVUgJmx0OyZsdDsgMCwKJiM0MzsJWERQX0NIRUNLU1VNX1VOTkVDRVNTQVJZID0gMVUgJmx0OyZsdDsgMSwKJiM0MzsJWERQX0NIRUNLU1VNX0NPTVBMRVRFID0gMVUgJmx0OyZsdDsgMiwKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIGludCBicGZfeGRwX21ldGFkYXRhX3J4X2hhc2goY29uc3Qgc3RydWN0IHhkcF9tZCAqY3R4LCBfX3UzMiAqaGFzaCwKIAkJCQkgICAgZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSAqcnNzX3R5cGUpIF9fa3N5bTsKJiM0MztleHRlcm4gaW50IGJwZl94ZHBfbWV0YWRhdGFfcnhfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHhkcF9tZCAqY3R4LAomIzQzOwkJCQkJZW51bSB4ZHBfY2hlY2tzdW0gKmlwX3N1bW1lZCwKJiM0MzsJCQkJCV9fdTMyICpja3N1bSwgX191OCAqY2tzdW1fbGV2ZWwpIF9fa3N5bTsKIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3UxNiBnZXRfZGVzdF9wb3J0KHZvaWQgKmw0LCB2b2lkICpkYXRhX2VuZCwKIAkJCQkJICAgX191OCBwcm90b2NvbCkKQEAgLTc4LDQxICYjNDM7MTA5LDM5IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX191MTYgZ2V0X2Rlc3RfcG9ydCh2b2lkICpsNCwgdm9pZCAqZGF0YV9lbmQsCiAJcmV0dXJuIDA7CiB9CiAKLVNFQygmIzM0O3hkcCYjMzQ7KQotaW50IHhkcF9yc3NfaGFzaChzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7LyogUmV0dXJuIHRydWUgd2hlbiB0aGUgcGFja2V0IG1hdGNoZXMgdGhlIEw0IHByb3RvY29sIGFuZCBkZXN0aW5hdGlvbgomIzQzOyAqIHBvcnQgY29uZmlndXJlZCBpbiBtYXBfeGRwX3NldHVwICh6ZXJvL3Vuc2V0IGZpbHRlcnMgbWF0Y2ggYW55dGhpbmcpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB4ZHBfbWF0Y2hfc2V0dXAoc3RydWN0IHhkcF9tZCAqY3R4KQogewogCXZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZyljdHgtJmd0O2RhdGFfZW5kOwogCXZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKWN0eC0mZ3Q7ZGF0YTsKLQllbnVtIHhkcF9yc3NfaGFzaF90eXBlIHJzc190eXBlID0gMDsKIAlzdHJ1Y3QgZXRoaGRyICpldGggPSBkYXRhOwogCV9fdTggbDRfcHJvdG8gPSAwOwotCV9fdTMyIGhhc2ggPSAwOwotCV9fdTMyIGtleSwgdmFsOwogCXZvaWQgKmw0ID0gTlVMTDsKLQlfX3UzMiAqY250OwotCWludCByZXQ7CiYjNDM7CV9fdTMyIGtleTsKIAogCWlmICgodm9pZCAqKShldGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCkKLQkJcmV0dXJuIFhEUF9QQVNTOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGV0aC0mZ3Q7aF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVApKSB7CiAJCXN0cnVjdCBpcGhkciAqaXBoID0gKHZvaWQgKikoZXRoICYjNDM7IDEpOwogCiAJCWlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCkKLQkJCXJldHVybiBYRFBfUEFTUzsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiAJCWw0X3Byb3RvID0gaXBoLSZndDtwcm90b2NvbDsKIAkJbDQgPSAodm9pZCAqKShpcGggJiM0MzsgMSk7CiAJfSBlbHNlIGlmIChldGgtJmd0O2hfcHJvdG8gPT0gYnBmX2h0b25zKEVUSF9QX0lQVjYpKSB7CiAJCXN0cnVjdCBpcHY2aGRyICppcDZoID0gKHZvaWQgKikoZXRoICYjNDM7IDEpOwogCiAJCWlmICgodm9pZCAqKShpcDZoICYjNDM7IDEpICZndDsgZGF0YV9lbmQpCi0JCQlyZXR1cm4gWERQX1BBU1M7CiYjNDM7CQkJcmV0dXJuIGZhbHNlOwogCQlsNF9wcm90byA9IGlwNmgtJmd0O25leHRoZHI7CiAJCWw0ID0gKHZvaWQgKikoaXA2aCAmIzQzOyAxKTsKIAl9CiAKIAlpZiAoIWw0KQotCQlyZXR1cm4gWERQX1BBU1M7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBGaWx0ZXIgb24gdGhlIGNvbmZpZ3VyZWQgcHJvdG9jb2wgKG1hcF94ZHBfc2V0dXAga2V5IFhEUF9QUk9UTykuCiAJICogV2hlbiBzZXQsIG9ubHkgcHJvY2VzcyBwYWNrZXRzIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgTDQgcHJvdG9jb2wuCkBAIC0xMjEsNyAmIzQzOzE1MCw3IEBAIGludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KQogCV9fczMyICpwcm90b19jZmcgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7bWFwX3hkcF9zZXR1cCwgJmFtcDtrZXkpOwogCiAJaWYgKHByb3RvX2NmZyAmYW1wOyZhbXA7ICpwcm90b19jZmcgIT0gMCAmYW1wOyZhbXA7IGw0X3Byb3RvICE9IChfX3U4KSpwcm90b19jZmcpCi0JCXJldHVybiBYRFBfUEFTUzsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAogCS8qIEZpbHRlciBvbiB0aGUgY29uZmlndXJlZCBwb3J0IChtYXBfeGRwX3NldHVwIGtleSBYRFBfUE9SVCkuCiAJICogT25seSBhcHBsaWVzIHRvIHByb3RvY29scyB3aXRoIHBvcnRzIChVRFAsIFRDUCkuCkBAIC0xMzMsOSAmIzQzOzE2MiwyNCBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eCkKIAkJX191MTYgZGVzdCA9IGdldF9kZXN0X3BvcnQobDQsIGRhdGFfZW5kLCBsNF9wcm90byk7CiAKIAkJaWYgKCFkZXN0IHx8IGJwZl9udG9ocyhkZXN0KSAhPSAoX191MTYpKnBvcnRfY2ZnKQotCQkJcmV0dXJuIFhEUF9QQVNTOwomIzQzOwkJCXJldHVybiBmYWxzZTsKIAl9CiAKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSByc3NfdHlwZSA9IDA7CiYjNDM7CV9fdTMyIGhhc2ggPSAwOwomIzQzOwlfX3UzMiBrZXksIHZhbDsKJiM0MzsJX191MzIgKmNudDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF4ZHBfbWF0Y2hfc2V0dXAoY3R4KSkKJiM0MzsJCXJldHVybiBYRFBfUEFTUzsKJiM0MzsKIAlyZXQgPSBicGZfeGRwX21ldGFkYXRhX3J4X2hhc2goY3R4LCAmYW1wO2hhc2gsICZhbXA7cnNzX3R5cGUpOwogCWlmIChyZXQgJmx0OyAwKSB7CiAJCWtleSA9IFJTU19LRVlfRVJSX0NOVDsKQEAgLTE2MCw0ICYjNDM7MjA0LDQ2IEBAIGludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KQogCXJldHVybiBYRFBfUEFTUzsKIH0KIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCB4ZHBfcnhfY3N1bShzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7ewomIzQzOwllbnVtIHhkcF9jaGVja3N1bSBpcF9zdW1tZWQgPSAwOwomIzQzOwlfX3U4IGNrc3VtX2xldmVsID0gMDsKJiM0MzsJX191MzIgY2tzdW0gPSAwOwomIzQzOwlfX3UzMiBrZXksIHZhbDsKJiM0MzsJX191MzIgKmNudDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF4ZHBfbWF0Y2hfc2V0dXAoY3R4KSkKJiM0MzsJCXJldHVybiBYRFBfUEFTUzsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3hkcF9tZXRhZGF0YV9yeF9jaGVja3N1bShjdHgsICZhbXA7aXBfc3VtbWVkLCAmYW1wO2Nrc3VtLAomIzQzOwkJCQkJICAgJmFtcDtja3N1bV9sZXZlbCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlrZXkgPSBDU1VNX0tFWV9FUlJfQ05UOwomIzQzOwkJY250ID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO21hcF9jc3VtLCAmYW1wO2tleSk7CiYjNDM7CQlpZiAoY250KQomIzQzOwkJCV9fc3luY19mZXRjaF9hbmRfYWRkKGNudCwgMSk7CiYjNDM7CQlyZXR1cm4gWERQX1BBU1M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2V5ID0gQ1NVTV9LRVlfSVBfU1VNTUVEOwomIzQzOwl2YWwgPSAoX191MzIpaXBfc3VtbWVkOwomIzQzOwlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7bWFwX2NzdW0sICZhbXA7a2V5LCAmYW1wO3ZhbCwgQlBGX0FOWSk7CiYjNDM7CiYjNDM7CWtleSA9IENTVU1fS0VZX0NLU1VNOwomIzQzOwlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7bWFwX2NzdW0sICZhbXA7a2V5LCAmYW1wO2Nrc3VtLCBCUEZfQU5ZKTsKJiM0MzsKJiM0MzsJa2V5ID0gQ1NVTV9LRVlfTEVWRUw7CiYjNDM7CXZhbCA9IGNrc3VtX2xldmVsOwomIzQzOwlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7bWFwX2NzdW0sICZhbXA7a2V5LCAmYW1wO3ZhbCwgQlBGX0FOWSk7CiYjNDM7CiYjNDM7CWtleSA9IENTVU1fS0VZX1BLVF9DTlQ7CiYjNDM7CWNudCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDttYXBfY3N1bSwgJmFtcDtrZXkpOwomIzQzOwlpZiAoY250KQomIzQzOwkJX19zeW5jX2ZldGNoX2FuZF9hZGQoY250LCAxKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFhEUF9QQVNTOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwNwoJCQkJCQkJb3V0cHV0OiA2MAoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBc3Nlc3NtZW50OiBYRFAgTWV0YWRhdGEgU2VsZnRlc3QgQWRkaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYWRkaW5nIG5ldyB0ZXN0cywgc3BlY2lmaWNhbGx5IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHlgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi94ZHBfbWV0YWRhdGEuYnBmLmNgLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBhcmUgdGhlICpvbmx5KiBmaWxlcyBtb2RpZmllZC4gWWVwLCB0aGUgZGlmZiBzaG93cyBleGFjdGx5IHRob3NlIHR3by4KCkFscmlnaHQsIHRoZSBjb3JlIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtEb2VzIHRoaXMgcGF0Y2ggaW1wYWN0IGZ1bmN0aW9uYWwgYXNwZWN0cyB0aGF0IHdlIG5lZWQgdG8gZnV6ej8mIzM0OyBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIGFuZCB2ZXJpZnkuIE5vIGNoYW5nZXMgdG8gYW55dGhpbmcgY29yZSwgbm8gZHJpdmVycywgbm8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUuIEdvb2QsIGp1c3Qgc2VsZi10ZXN0cy4gVGhhdCBtZWFucywgYnkgZGVmYXVsdCwgd2Ugc2hvdWxkbiYjMzk7dCBoYXZlIHRvIGZ1enogdGhpcy4KCk5vdywgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgdGhlIGluc3RydWN0aW9uczogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24vLi4uLCBjb2RlIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLi4uJiMzNDsuIEhtbSwgc2VsZnRlc3RzIGFyZW4mIzM5O3QgZXhwbGljaXRseSAqbGlzdGVkKiwgYnV0IHRoZXkgZmFsbCB1bmRlciB0aGUgY2F0ZWdvcnkgb2Ygbm9uLWZ1bmN0aW9uYWwgY2hhbmdlczsgdGhleSYjMzk7cmUgdGVzdGluZyB0b29scy4gVGhleSBhcmVuJiMzOTt0IGFsdGVyaW5nIGtlcm5lbCBiZWhhdmlvciBkaXJlY3RseS4KCkxldCYjMzk7cyBjb25maXJtIHRoYXQgYWdhaW4uIFRoZSBkaWZmIHN0aWxsIG9ubHkgc2hvd3MgdGhvc2Ugc2FtZSB0d28gZmlsZXMuIFNvLCBnaXZlbiB0aGF0IGl0JiMzOTtzIHB1cmVseSB0ZXN0cywgYW5kIGJhc2VkIG9uIHRoZSBndWlkYW5jZSwgSSB0aGluayB0aGlzIGlzIGEgY2xlYXIgV29ydGhGdXp6aW5nPWZhbHNlLiBObyBuZWVkIHRvIGNvbnN1bHQgYSB0b29sIG9uIHRoaXMgb25lOyBJJiMzOTttIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMDM6NTI6NTMuMDcxMTA5MTY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNTU4NzQ4MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjUyOjUzLjA3MTExNjIyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwMDY3ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzgxZWIwOTBhN2JiZjMzOTRmNDJlMjcxY2M4NGVjNjhmZWZjMWY3MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCA5IDAzOjUyOjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L3hkcF9tZXRhZGF0YS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L3hkcF9tZXRhZGF0YS5weVxcbmluZGV4IDMzYTE5ODUzNTZkOTAyLi42ODdjNDNhMTc5N2E0YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHlcXG5AQCAtOCw2ICs4LDggQEAgVGhlc2UgdGVzdHMgbG9hZCBkZXZpY2UtYm91bmQgWERQIHByb2dyYW1zIGZyb20geGRwX21ldGFkYXRhLmJwZi5vXFxuIHRoYXQgY2FsbCBtZXRhZGF0YSBrZnVuY3MsIHNlbmQgdHJhZmZpYywgYW5kIHZlcmlmeSB0aGUgZXh0cmFjdGVkXFxuIG1ldGFkYXRhIHZpYSBCUEYgbWFwcy5cXG4gXFxcIlxcXCJcXFwiXFxuK2ltcG9ydCB0aW1lXFxuK1xcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZXhpdCwga3NmdF9nZSwga3NmdF9uZSwga3NmdF9wclxcbiBmcm9tIGxpYi5weSBpbXBvcnQgS3NmdE5hbWVkVmFyaWFudCwga3NmdF92YXJpYW50c1xcbiBmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIEtzZnRTa2lwRXgsIE5ldERydkVwRW52XFxuQEAgLTgxLDggKzgzLDIyIEBAIF9SU1NfS0VZX1RZUEUgPSAxXFxuIF9SU1NfS0VZX1BLVF9DTlQgPSAyXFxuIF9SU1NfS0VZX0VSUl9DTlQgPSAzXFxuIFxcbitfQ1NVTV9LRVlfSVBfU1VNTUVEID0gMFxcbitfQ1NVTV9LRVlfQ0tTVU0gPSAxXFxuK19DU1VNX0tFWV9MRVZFTCA9IDJcXG4rX0NTVU1fS0VZX1BLVF9DTlQgPSAzXFxuK19DU1VNX0tFWV9FUlJfQ05UID0gNFxcbitcXG4gWERQX1JTU19MNCA9IDB4OCAgIyBCSVQoMykgZnJvbSBlbnVtIHhkcF9yc3NfaGFzaF90eXBlXFxuIFxcbisjIE1pcnJvciBvZiBlbnVtIHhkcF9jaGVja3N1bSBmcm9tIGluY2x1ZGUvbmV0L3hkcC5oXFxuK1hEUF9DSEVDS1NVTV9OT05FID0gMHgxXFxuK1hEUF9DSEVDS1NVTV9VTk5FQ0VTU0FSWSA9IDB4MlxcbitYRFBfQ0hFQ0tTVU1fQ09NUExFVEUgPSAweDRcXG4rXFxuKyMgRml4ZWQgZGVzdGluYXRpb24gcG9ydCBvZiB0aGUgbmV0L2xpYiBjc3VtIHRvb2xcXG4rX0NTVU1fVE9PTF9QT1JUID0gMzQwMDBcXG4rXFxuIFxcbiBAa3NmdF92YXJpYW50cyhbXFxuICAgICBLc2Z0TmFtZWRWYXJpYW50KFxcXCJ0Y3BcXFwiLCBcXFwidGNwXFxcIiksXFxuQEAgLTEzMCw2ICsxNDYsOTEgQEAgZGVmIHRlc3RfeGRwX3Jzc19oYXNoKGNmZywgcHJvdG8pOlxcbiAgICAgICAgICAgICBmXFxcIlJTUyBoYXNoIHR5cGUgc2hvdWxkIGluY2x1ZGUgTDQgZm9yIHtwcm90by51cHBlcigpfSB0cmFmZmljXFxcIilcXG4gXFxuIFxcbitkZWYgX3JlcXVpcmVfcnhfY3N1bV9tZXRhKGNmZyk6XFxuKyAgICBcXFwiXFxcIlxcXCJTa2lwIHVubGVzcyB0aGUgZGV2aWNlIGV4cG9zZXMgWERQIFJYIGNoZWNrc3VtIG1ldGFkYXRhLlxcXCJcXFwiXFxcIlxcbisgICAgZGV2X2luZm8gPSBjZmcubmV0bmwuZGV2X2dldCh7XFxcImlmaW5kZXhcXFwiOiBjZmcuaWZpbmRleH0pXFxuKyAgICByeF9tZXRhID0gZGV2X2luZm8uZ2V0KFxcXCJ4ZHAtcngtbWV0YWRhdGEtZmVhdHVyZXNcXFwiLCBbXSlcXG4rICAgIGlmIFxcXCJjaGVja3N1bVxcXCIgbm90IGluIHJ4X21ldGE6XFxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwiZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgWERQIHJ4IGNoZWNrc3VtIG1ldGFkYXRhXFxcIilcXG4rXFxuK1xcbitAa3NmdF92YXJpYW50cyhbXFxuKyAgICBLc2Z0TmFtZWRWYXJpYW50KFxcXCJ0Y3BcXFwiLCBcXFwidGNwXFxcIiksXFxuKyAgICBLc2Z0TmFtZWRWYXJpYW50KFxcXCJ1ZHBcXFwiLCBcXFwidWRwXFxcIiksXFxuK10pXFxuK2RlZiB0ZXN0X3hkcF9yeF9jc3VtX3ZhbGlkKGNmZywgcHJvdG8pOlxcbisgICAgXFxcIlxcXCJcXFwiVGVzdCBSWCBjaGVja3N1bSBtZXRhZGF0YSBmb3IgcGFja2V0cyB3aXRoIGEgY29ycmVjdCBjaGVja3N1bS5cXG4rXFxuKyAgICBMb2FkcyB0aGUgeGRwX3J4X2NzdW0gcHJvZ3JhbSwgc2VuZHMgdHJhZmZpYyB3aXRoIGEgdmFsaWQgTDQgY2hlY2tzdW1cXG4rICAgIGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludCwgYW5kIHZlcmlmaWVzIHRoYXQgdGhlIGRldmljZSByZXBvcnRlZCBhXFxuKyAgICB1c2FibGUgY2hlY2tzdW0gdmVyZGljdCAoQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgYW5kL29yIGFcXG4rICAgIENIRUNLU1VNX0NPTVBMRVRFIHZhbHVlKSB2aWEgYnBmX3hkcF9tZXRhZGF0YV9yeF9jaGVja3N1bSgpLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBfcmVxdWlyZV9yeF9jc3VtX21ldGEoY2ZnKVxcbitcXG4rICAgIHByb2dfaW5mbyA9IF9sb2FkX3hkcF9tZXRhZGF0YV9wcm9nKGNmZywgXFxcInhkcF9yeF9jc3VtXFxcIilcXG4rXFxuKyAgICBwb3J0ID0gcmFuZF9wb3J0KClcXG4rICAgIGJwZl9tYXBfc2V0KFxcXCJtYXBfeGRwX3NldHVwXFxcIiwgX1NFVFVQX0tFWV9QT1JULCBwb3J0KVxcbitcXG4rICAgIGNzdW1fbWFwX2lkID0gcHJvZ19pbmZvW1xcXCJtYXBzXFxcIl1bXFxcIm1hcF9jc3VtXFxcIl1cXG4rXFxuKyAgICBfc2VuZF9wcm9iZShjZmcsIHBvcnQsIHByb3RvPXByb3RvKVxcbitcXG4rICAgIGNzdW0gPSBicGZfbWFwX2R1bXAoY3N1bV9tYXBfaWQpXFxuK1xcbisgICAgcGt0X2NudCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9QS1RfQ05ULCAwKVxcbisgICAgZXJyX2NudCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9FUlJfQ05ULCAwKVxcbisgICAgaXBfc3VtbWVkID0gY3N1bS5nZXQoX0NTVU1fS0VZX0lQX1NVTU1FRCwgMClcXG4rXFxuKyAgICBrc2Z0X2dlKHBrdF9jbnQsIDEsIGNvbW1lbnQ9XFxcInNob3VsZCBoYXZlIHJlY2VpdmVkIGF0IGxlYXN0IG9uZSBwYWNrZXRcXFwiKVxcbisgICAga3NmdF9lcShlcnJfY250LCAwLCBjb21tZW50PWZcXFwiUlggY2hlY2tzdW0gZXJyb3IgY291bnQ6IHtlcnJfY250fVxcXCIpXFxuK1xcbisgICAga3NmdF9wcihmXFxcIiAgaXBfc3VtbWVkOiB7aXBfc3VtbWVkOiN4fSBja3N1bTogXFxcIlxcbisgICAgICAgICAgICBmXFxcIntjc3VtLmdldChfQ1NVTV9LRVlfQ0tTVU0sIDApOiMwMTB4fSBcXFwiXFxuKyAgICAgICAgICAgIGZcXFwibGV2ZWw6IHtjc3VtLmdldChfQ1NVTV9LRVlfTEVWRUwsIDApfVxcXCIpXFxuKyAgICBrc2Z0X25lKGlwX3N1bW1lZCBcXHUwMDI2IChYRFBfQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgfCBYRFBfQ0hFQ0tTVU1fQ09NUExFVEUpLCAwLFxcbisgICAgICAgICAgICBcXFwiZGV2aWNlIHNob3VsZCByZXBvcnQgYSBjaGVja3N1bSB2ZXJkaWN0IGZvciBhIHZhbGlkIHBhY2tldFxcXCIpXFxuK1xcbitcXG4rZGVmIHRlc3RfeGRwX3J4X2NzdW1faW52YWxpZChjZmcpOlxcbisgICAgXFxcIlxcXCJcXFwiVGVzdCBSWCBjaGVja3N1bSBtZXRhZGF0YSBmb3IgcGFja2V0cyB3aXRoIGEgY29ycnVwdGVkIGNoZWNrc3VtLlxcbitcXG4rICAgIFNlbmRzIFVEUCBwYWNrZXRzIHdpdGggYW4gaW50ZW50aW9uYWxseSBiYWQgTDQgY2hlY2tzdW0gdXNpbmcgdGhlXFxuKyAgICBuZXQvbGliIGNzdW0gdG9vbCBhbmQgdmVyaWZpZXMgdGhlIGRldmljZSBkb2VzIG5vdCBjbGFpbSBpdCB2YWxpZGF0ZWRcXG4rICAgIHRoZW06IHRoZSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSBiaXQgbXVzdCBub3QgYmUgc2V0LlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBfcmVxdWlyZV9yeF9jc3VtX21ldGEoY2ZnKVxcbitcXG4rICAgIGlwdmVyID0gY2ZnLmFkZHJfaXB2ZXJcXG4rICAgIGJpbl9yZW1vdGUgPSBjZmcucmVtb3RlLmRlcGxveShjZmcubmV0X2xpYl9kaXIgLyBcXFwiY3N1bVxcXCIpXFxuK1xcbisgICAgcHJvZ19pbmZvID0gX2xvYWRfeGRwX21ldGFkYXRhX3Byb2coY2ZnLCBcXFwieGRwX3J4X2NzdW1cXFwiKVxcbitcXG4rICAgIGJwZl9tYXBfc2V0KFxcXCJtYXBfeGRwX3NldHVwXFxcIiwgX1NFVFVQX0tFWV9QT1JULCBfQ1NVTV9UT09MX1BPUlQpXFxuK1xcbisgICAgY3N1bV9tYXBfaWQgPSBwcm9nX2luZm9bXFxcIm1hcHNcXFwiXVtcXFwibWFwX2NzdW1cXFwiXVxcbitcXG4rICAgIGNtZChmXFxcIntiaW5fcmVtb3RlfSAtaSB7Y2ZnLnJlbW90ZV9pZm5hbWV9IC1uIDIwIC17aXB2ZXJ9IFxcXCJcXG4rICAgICAgICBmXFxcIi1TIHtjZmcucmVtb3RlX2FkZHJ9IC1EIHtjZmcuYWRkcn0gLXIgMSAtVCAtRVxcXCIsXFxuKyAgICAgICAgaG9zdD1jZmcucmVtb3RlKVxcbitcXG4rICAgICMgbm8gcmVjZWl2ZXIgdG8gc3luY2hyb25pemUgYWdhaW5zdDsgbGV0IE5BUEkgZHJhaW4gdGhlIGxhc3QgcGFja2V0c1xcbisgICAgdGltZS5zbGVlcCgxKVxcbitcXG4rICAgIGNzdW0gPSBicGZfbWFwX2R1bXAoY3N1bV9tYXBfaWQpXFxuK1xcbisgICAgcGt0X2NudCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9QS1RfQ05ULCAwKVxcbisgICAgaXBfc3VtbWVkID0gY3N1bS5nZXQoX0NTVU1fS0VZX0lQX1NVTU1FRCwgMClcXG4rXFxuKyAgICBrc2Z0X2dlKHBrdF9jbnQsIDEsIGNvbW1lbnQ9XFxcInNob3VsZCBoYXZlIHJlY2VpdmVkIGF0IGxlYXN0IG9uZSBwYWNrZXRcXFwiKVxcbitcXG4rICAgIGtzZnRfcHIoZlxcXCIgIGlwX3N1bW1lZDoge2lwX3N1bW1lZDojeH1cXFwiKVxcbisgICAga3NmdF9lcShpcF9zdW1tZWQgXFx1MDAyNiBYRFBfQ0hFQ0tTVU1fVU5ORUNFU1NBUlksIDAsXFxuKyAgICAgICAgICAgIFxcXCJkZXZpY2UgbXVzdCBub3QgcmVwb3J0IENIRUNLU1VNX1VOTkVDRVNTQVJZIGZvciBhIGNvcnJ1cHRlZCBcXFwiXFxuKyAgICAgICAgICAgIFxcXCJjaGVja3N1bVxcXCIpXFxuK1xcbitcXG4gZGVmIG1haW4oKTpcXG4gICAgIFxcXCJcXFwiXFxcIlJ1biBYRFAgbWV0YWRhdGEga2Z1bmMgdGVzdHMgYWdhaW5zdCBhIHJlYWwgZGV2aWNlLlxcXCJcXFwiXFxcIlxcbiAgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxcbkBAIC0xMzcsNiArMjM4LDggQEAgZGVmIG1haW4oKTpcXG4gICAgICAgICBrc2Z0X3J1bihcXG4gICAgICAgICAgICAgW1xcbiAgICAgICAgICAgICAgICAgdGVzdF94ZHBfcnNzX2hhc2gsXFxuKyAgICAgICAgICAgICAgICB0ZXN0X3hkcF9yeF9jc3VtX3ZhbGlkLFxcbisgICAgICAgICAgICAgICAgdGVzdF94ZHBfcnhfY3N1bV9pbnZhbGlkLFxcbiAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICBhcmdzPShjZmcsKSlcXG4gICAgIGtzZnRfZXhpdCgpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIveGRwX21ldGFkYXRhLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi94ZHBfbWV0YWRhdGEuYnBmLmNcXG5pbmRleCBmNzFmNTkyMTUyMzlmZC4uNzBkZWNhZTBhNjYzN2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi94ZHBfbWV0YWRhdGEuYnBmLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuY1xcbkBAIC0xLDYgKzEsNyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGRlZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfZXRoZXIuaFxcdTAwM2VcXG5AQCAtNDAsNiArNDEsMjQgQEAgc3RydWN0IHtcXG4gXFx0X191aW50KG1heF9lbnRyaWVzLCA0KTtcXG4gfSBtYXBfcnNzIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4gXFxuKy8qIFJYIGNoZWNrc3VtIHJlc3VsdHM6IGtleSAwID0gaXBfc3VtbWVkIGJpdG1hc2ssIGtleSAxID0gaHcgY2tzdW0gdmFsdWUsXFxuKyAqIGtleSAyID0gY2tzdW0gbGV2ZWwsIGtleSAzID0gcGFja2V0IGNvdW50LCBrZXkgNCA9IGVycm9yIGNvdW50LlxcbisgKi9cXG4rZW51bSB7XFxuK1xcdENTVU1fS0VZX0lQX1NVTU1FRCA9IDAsXFxuK1xcdENTVU1fS0VZX0NLU1VNID0gMSxcXG4rXFx0Q1NVTV9LRVlfTEVWRUwgPSAyLFxcbitcXHRDU1VNX0tFWV9QS1RfQ05UID0gMyxcXG4rXFx0Q1NVTV9LRVlfRVJSX0NOVCA9IDQsXFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X190eXBlKGtleSwgX191MzIpO1xcbitcXHRfX3R5cGUodmFsdWUsIF9fdTMyKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCA1KTtcXG4rfSBtYXBfY3N1bSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbiAvKiBNaXJyb3Igb2YgZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSBmcm9tIGluY2x1ZGUvbmV0L3hkcC5oLlxcbiAgKiBOZWVkZWQgYmVjYXVzZSB0aGUgZW51bSBpcyBub3QgcGFydCBvZiBVQVBJIGhlYWRlcnMuXFxuICAqL1xcbkBAIC01NSw4ICs3NCwyMCBAQCBlbnVtIHhkcF9yc3NfaGFzaF90eXBlIHtcXG4gXFx0WERQX1JTU19MNF9JQ01QID0gMVUgXFx1MDAzY1xcdTAwM2MgOCxcXG4gfTtcXG4gXFxuKy8qIE1pcnJvciBvZiBlbnVtIHhkcF9jaGVja3N1bSBmcm9tIGluY2x1ZGUvbmV0L3hkcC5oLlxcbisgKiBOZWVkZWQgYmVjYXVzZSB0aGUgZW51bSBpcyBub3QgcGFydCBvZiBVQVBJIGhlYWRlcnMuXFxuKyAqL1xcbitlbnVtIHhkcF9jaGVja3N1bSB7XFxuK1xcdFhEUF9DSEVDS1NVTV9OT05FID0gMVUgXFx1MDAzY1xcdTAwM2MgMCxcXG4rXFx0WERQX0NIRUNLU1VNX1VOTkVDRVNTQVJZID0gMVUgXFx1MDAzY1xcdTAwM2MgMSxcXG4rXFx0WERQX0NIRUNLU1VNX0NPTVBMRVRFID0gMVUgXFx1MDAzY1xcdTAwM2MgMixcXG4rfTtcXG4rXFxuIGV4dGVybiBpbnQgYnBmX3hkcF9tZXRhZGF0YV9yeF9oYXNoKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCwgX191MzIgKmhhc2gsXFxuIFxcdFxcdFxcdFxcdCAgICBlbnVtIHhkcF9yc3NfaGFzaF90eXBlICpyc3NfdHlwZSkgX19rc3ltO1xcbitleHRlcm4gaW50IGJwZl94ZHBfbWV0YWRhdGFfcnhfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHhkcF9tZCAqY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRlbnVtIHhkcF9jaGVja3N1bSAqaXBfc3VtbWVkLFxcbitcXHRcXHRcXHRcXHRcXHRfX3UzMiAqY2tzdW0sIF9fdTggKmNrc3VtX2xldmVsKSBfX2tzeW07XFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fdTE2IGdldF9kZXN0X3BvcnQodm9pZCAqbDQsIHZvaWQgKmRhdGFfZW5kLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBfX3U4IHByb3RvY29sKVxcbkBAIC03OCw0MSArMTA5LDM5IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX191MTYgZ2V0X2Rlc3RfcG9ydCh2b2lkICpsNCwgdm9pZCAqZGF0YV9lbmQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1TRUMoXFxcInhkcFxcXCIpXFxuLWludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KVxcbisvKiBSZXR1cm4gdHJ1ZSB3aGVuIHRoZSBwYWNrZXQgbWF0Y2hlcyB0aGUgTDQgcHJvdG9jb2wgYW5kIGRlc3RpbmF0aW9uXFxuKyAqIHBvcnQgY29uZmlndXJlZCBpbiBtYXBfeGRwX3NldHVwICh6ZXJvL3Vuc2V0IGZpbHRlcnMgbWF0Y2ggYW55dGhpbmcpLlxcbisgKi9cXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHhkcF9tYXRjaF9zZXR1cChzdHJ1Y3QgeGRwX21kICpjdHgpXFxuIHtcXG4gXFx0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKWN0eC1cXHUwMDNlZGF0YV9lbmQ7XFxuIFxcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKWN0eC1cXHUwMDNlZGF0YTtcXG4tXFx0ZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSByc3NfdHlwZSA9IDA7XFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGRhdGE7XFxuIFxcdF9fdTggbDRfcHJvdG8gPSAwO1xcbi1cXHRfX3UzMiBoYXNoID0gMDtcXG4tXFx0X191MzIga2V5LCB2YWw7XFxuIFxcdHZvaWQgKmw0ID0gTlVMTDtcXG4tXFx0X191MzIgKmNudDtcXG4tXFx0aW50IHJldDtcXG4rXFx0X191MzIga2V5O1xcbiBcXG4gXFx0aWYgKCh2b2lkICopKGV0aCArIDEpIFxcdTAwM2UgZGF0YV9lbmQpXFxuLVxcdFxcdHJldHVybiBYRFBfUEFTUztcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0aWYgKGV0aC1cXHUwMDNlaF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVApKSB7XFxuIFxcdFxcdHN0cnVjdCBpcGhkciAqaXBoID0gKHZvaWQgKikoZXRoICsgMSk7XFxuIFxcbiBcXHRcXHRpZiAoKHZvaWQgKikoaXBoICsgMSkgXFx1MDAzZSBkYXRhX2VuZClcXG4tXFx0XFx0XFx0cmV0dXJuIFhEUF9QQVNTO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdGw0X3Byb3RvID0gaXBoLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0XFx0bDQgPSAodm9pZCAqKShpcGggKyAxKTtcXG4gXFx0fSBlbHNlIGlmIChldGgtXFx1MDAzZWhfcHJvdG8gPT0gYnBmX2h0b25zKEVUSF9QX0lQVjYpKSB7XFxuIFxcdFxcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gKHZvaWQgKikoZXRoICsgMSk7XFxuIFxcbiBcXHRcXHRpZiAoKHZvaWQgKikoaXA2aCArIDEpIFxcdTAwM2UgZGF0YV9lbmQpXFxuLVxcdFxcdFxcdHJldHVybiBYRFBfUEFTUztcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRcXHRsNF9wcm90byA9IGlwNmgtXFx1MDAzZW5leHRoZHI7XFxuIFxcdFxcdGw0ID0gKHZvaWQgKikoaXA2aCArIDEpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWw0KVxcbi1cXHRcXHRyZXR1cm4gWERQX1BBU1M7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdC8qIEZpbHRlciBvbiB0aGUgY29uZmlndXJlZCBwcm90b2NvbCAobWFwX3hkcF9zZXR1cCBrZXkgWERQX1BST1RPKS5cXG4gXFx0ICogV2hlbiBzZXQsIG9ubHkgcHJvY2VzcyBwYWNrZXRzIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgTDQgcHJvdG9jb2wuXFxuQEAgLTEyMSw3ICsxNTAsNyBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4gXFx0X19zMzIgKnByb3RvX2NmZyA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNm1hcF94ZHBfc2V0dXAsIFxcdTAwMjZrZXkpO1xcbiBcXG4gXFx0aWYgKHByb3RvX2NmZyBcXHUwMDI2XFx1MDAyNiAqcHJvdG9fY2ZnICE9IDAgXFx1MDAyNlxcdTAwMjYgbDRfcHJvdG8gIT0gKF9fdTgpKnByb3RvX2NmZylcXG4tXFx0XFx0cmV0dXJuIFhEUF9QQVNTO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKiBGaWx0ZXIgb24gdGhlIGNvbmZpZ3VyZWQgcG9ydCAobWFwX3hkcF9zZXR1cCBrZXkgWERQX1BPUlQpLlxcbiBcXHQgKiBPbmx5IGFwcGxpZXMgdG8gcHJvdG9jb2xzIHdpdGggcG9ydHMgKFVEUCwgVENQKS5cXG5AQCAtMTMzLDkgKzE2MiwyNCBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4gXFx0XFx0X191MTYgZGVzdCA9IGdldF9kZXN0X3BvcnQobDQsIGRhdGFfZW5kLCBsNF9wcm90byk7XFxuIFxcbiBcXHRcXHRpZiAoIWRlc3QgfHwgYnBmX250b2hzKGRlc3QpICE9IChfX3UxNikqcG9ydF9jZmcpXFxuLVxcdFxcdFxcdHJldHVybiBYRFBfUEFTUztcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ4ZHBcXFwiKVxcbitpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4re1xcbitcXHRlbnVtIHhkcF9yc3NfaGFzaF90eXBlIHJzc190eXBlID0gMDtcXG4rXFx0X191MzIgaGFzaCA9IDA7XFxuK1xcdF9fdTMyIGtleSwgdmFsO1xcbitcXHRfX3UzMiAqY250O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCF4ZHBfbWF0Y2hfc2V0dXAoY3R4KSlcXG4rXFx0XFx0cmV0dXJuIFhEUF9QQVNTO1xcbitcXG4gXFx0cmV0ID0gYnBmX3hkcF9tZXRhZGF0YV9yeF9oYXNoKGN0eCwgXFx1MDAyNmhhc2gsIFxcdTAwMjZyc3NfdHlwZSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGtleSA9IFJTU19LRVlfRVJSX0NOVDtcXG5AQCAtMTYwLDQgKzIwNCw0NiBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4gXFx0cmV0dXJuIFhEUF9QQVNTO1xcbiB9XFxuIFxcbitTRUMoXFxcInhkcFxcXCIpXFxuK2ludCB4ZHBfcnhfY3N1bShzdHJ1Y3QgeGRwX21kICpjdHgpXFxuK3tcXG4rXFx0ZW51bSB4ZHBfY2hlY2tzdW0gaXBfc3VtbWVkID0gMDtcXG4rXFx0X191OCBja3N1bV9sZXZlbCA9IDA7XFxuK1xcdF9fdTMyIGNrc3VtID0gMDtcXG4rXFx0X191MzIga2V5LCB2YWw7XFxuK1xcdF9fdTMyICpjbnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXhkcF9tYXRjaF9zZXR1cChjdHgpKVxcbitcXHRcXHRyZXR1cm4gWERQX1BBU1M7XFxuK1xcbitcXHRyZXQgPSBicGZfeGRwX21ldGFkYXRhX3J4X2NoZWNrc3VtKGN0eCwgXFx1MDAyNmlwX3N1bW1lZCwgXFx1MDAyNmNrc3VtLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2Y2tzdW1fbGV2ZWwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRrZXkgPSBDU1VNX0tFWV9FUlJfQ05UO1xcbitcXHRcXHRjbnQgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZtYXBfY3N1bSwgXFx1MDAyNmtleSk7XFxuK1xcdFxcdGlmIChjbnQpXFxuK1xcdFxcdFxcdF9fc3luY19mZXRjaF9hbmRfYWRkKGNudCwgMSk7XFxuK1xcdFxcdHJldHVybiBYRFBfUEFTUztcXG4rXFx0fVxcbitcXG4rXFx0a2V5ID0gQ1NVTV9LRVlfSVBfU1VNTUVEO1xcbitcXHR2YWwgPSAoX191MzIpaXBfc3VtbWVkO1xcbitcXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFxcdTAwMjZtYXBfY3N1bSwgXFx1MDAyNmtleSwgXFx1MDAyNnZhbCwgQlBGX0FOWSk7XFxuK1xcbitcXHRrZXkgPSBDU1VNX0tFWV9DS1NVTTtcXG4rXFx0YnBmX21hcF91cGRhdGVfZWxlbShcXHUwMDI2bWFwX2NzdW0sIFxcdTAwMjZrZXksIFxcdTAwMjZja3N1bSwgQlBGX0FOWSk7XFxuK1xcbitcXHRrZXkgPSBDU1VNX0tFWV9MRVZFTDtcXG4rXFx0dmFsID0gY2tzdW1fbGV2ZWw7XFxuK1xcdGJwZl9tYXBfdXBkYXRlX2VsZW0oXFx1MDAyNm1hcF9jc3VtLCBcXHUwMDI2a2V5LCBcXHUwMDI2dmFsLCBCUEZfQU5ZKTtcXG4rXFxuK1xcdGtleSA9IENTVU1fS0VZX1BLVF9DTlQ7XFxuK1xcdGNudCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNm1hcF9jc3VtLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKGNudClcXG4rXFx0XFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoY250LCAxKTtcXG4rXFxuK1xcdHJldHVybiBYRFBfUEFTUztcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjUyOjUzLjk0MjI2ODU3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIzODQ3MDYyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzgxZWIwOTBhN2JiZjMzOTRmNDJlMjcxY2M4NGVjNjhmZWZjMWY3MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMDM6NTI6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody94ZHBfbWV0YWRhdGEucHlcbmluZGV4IDMzYTE5ODUzNTZkOTAyLi42ODdjNDNhMTc5N2E0YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L3hkcF9tZXRhZGF0YS5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcveGRwX21ldGFkYXRhLnB5XG5AQCAtOCw2ICs4LDggQEAgVGhlc2UgdGVzdHMgbG9hZCBkZXZpY2UtYm91bmQgWERQIHByb2dyYW1zIGZyb20geGRwX21ldGFkYXRhLmJwZi5vXG4gdGhhdCBjYWxsIG1ldGFkYXRhIGtmdW5jcywgc2VuZCB0cmFmZmljLCBhbmQgdmVyaWZ5IHRoZSBleHRyYWN0ZWRcbiBtZXRhZGF0YSB2aWEgQlBGIG1hcHMuXG4gXCJcIlwiXG4raW1wb3J0IHRpbWVcbitcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZXhpdCwga3NmdF9nZSwga3NmdF9uZSwga3NmdF9wclxuIGZyb20gbGliLnB5IGltcG9ydCBLc2Z0TmFtZWRWYXJpYW50LCBrc2Z0X3ZhcmlhbnRzXG4gZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBLc2Z0U2tpcEV4LCBOZXREcnZFcEVudlxuQEAgLTgxLDggKzgzLDIyIEBAIF9SU1NfS0VZX1RZUEUgPSAxXG4gX1JTU19LRVlfUEtUX0NOVCA9IDJcbiBfUlNTX0tFWV9FUlJfQ05UID0gM1xuIFxuK19DU1VNX0tFWV9JUF9TVU1NRUQgPSAwXG4rX0NTVU1fS0VZX0NLU1VNID0gMVxuK19DU1VNX0tFWV9MRVZFTCA9IDJcbitfQ1NVTV9LRVlfUEtUX0NOVCA9IDNcbitfQ1NVTV9LRVlfRVJSX0NOVCA9IDRcbitcbiBYRFBfUlNTX0w0ID0gMHg4ICAjIEJJVCgzKSBmcm9tIGVudW0geGRwX3Jzc19oYXNoX3R5cGVcbiBcbisjIE1pcnJvciBvZiBlbnVtIHhkcF9jaGVja3N1bSBmcm9tIGluY2x1ZGUvbmV0L3hkcC5oXG4rWERQX0NIRUNLU1VNX05PTkUgPSAweDFcbitYRFBfQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgPSAweDJcbitYRFBfQ0hFQ0tTVU1fQ09NUExFVEUgPSAweDRcbitcbisjIEZpeGVkIGRlc3RpbmF0aW9uIHBvcnQgb2YgdGhlIG5ldC9saWIgY3N1bSB0b29sXG4rX0NTVU1fVE9PTF9QT1JUID0gMzQwMDBcbitcbiBcbiBAa3NmdF92YXJpYW50cyhbXG4gICAgIEtzZnROYW1lZFZhcmlhbnQoXCJ0Y3BcIiwgXCJ0Y3BcIiksXG5AQCAtMTMwLDYgKzE0Niw5MSBAQCBkZWYgdGVzdF94ZHBfcnNzX2hhc2goY2ZnLCBwcm90byk6XG4gICAgICAgICAgICAgZlwiUlNTIGhhc2ggdHlwZSBzaG91bGQgaW5jbHVkZSBMNCBmb3Ige3Byb3RvLnVwcGVyKCl9IHRyYWZmaWNcIilcbiBcbiBcbitkZWYgX3JlcXVpcmVfcnhfY3N1bV9tZXRhKGNmZyk6XG4rICAgIFwiXCJcIlNraXAgdW5sZXNzIHRoZSBkZXZpY2UgZXhwb3NlcyBYRFAgUlggY2hlY2tzdW0gbWV0YWRhdGEuXCJcIlwiXG4rICAgIGRldl9pbmZvID0gY2ZnLm5ldG5sLmRldl9nZXQoe1wiaWZpbmRleFwiOiBjZmcuaWZpbmRleH0pXG4rICAgIHJ4X21ldGEgPSBkZXZfaW5mby5nZXQoXCJ4ZHAtcngtbWV0YWRhdGEtZmVhdHVyZXNcIiwgW10pXG4rICAgIGlmIFwiY2hlY2tzdW1cIiBub3QgaW4gcnhfbWV0YTpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBYRFAgcnggY2hlY2tzdW0gbWV0YWRhdGFcIilcbitcbitcbitAa3NmdF92YXJpYW50cyhbXG4rICAgIEtzZnROYW1lZFZhcmlhbnQoXCJ0Y3BcIiwgXCJ0Y3BcIiksXG4rICAgIEtzZnROYW1lZFZhcmlhbnQoXCJ1ZHBcIiwgXCJ1ZHBcIiksXG4rXSlcbitkZWYgdGVzdF94ZHBfcnhfY3N1bV92YWxpZChjZmcsIHByb3RvKTpcbisgICAgXCJcIlwiVGVzdCBSWCBjaGVja3N1bSBtZXRhZGF0YSBmb3IgcGFja2V0cyB3aXRoIGEgY29ycmVjdCBjaGVja3N1bS5cbitcbisgICAgTG9hZHMgdGhlIHhkcF9yeF9jc3VtIHByb2dyYW0sIHNlbmRzIHRyYWZmaWMgd2l0aCBhIHZhbGlkIEw0IGNoZWNrc3VtXG4rICAgIGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludCwgYW5kIHZlcmlmaWVzIHRoYXQgdGhlIGRldmljZSByZXBvcnRlZCBhXG4rICAgIHVzYWJsZSBjaGVja3N1bSB2ZXJkaWN0IChDSEVDS1NVTV9VTk5FQ0VTU0FSWSBhbmQvb3IgYVxuKyAgICBDSEVDS1NVTV9DT01QTEVURSB2YWx1ZSkgdmlhIGJwZl94ZHBfbWV0YWRhdGFfcnhfY2hlY2tzdW0oKS5cbisgICAgXCJcIlwiXG4rICAgIF9yZXF1aXJlX3J4X2NzdW1fbWV0YShjZmcpXG4rXG4rICAgIHByb2dfaW5mbyA9IF9sb2FkX3hkcF9tZXRhZGF0YV9wcm9nKGNmZywgXCJ4ZHBfcnhfY3N1bVwiKVxuK1xuKyAgICBwb3J0ID0gcmFuZF9wb3J0KClcbisgICAgYnBmX21hcF9zZXQoXCJtYXBfeGRwX3NldHVwXCIsIF9TRVRVUF9LRVlfUE9SVCwgcG9ydClcbitcbisgICAgY3N1bV9tYXBfaWQgPSBwcm9nX2luZm9bXCJtYXBzXCJdW1wibWFwX2NzdW1cIl1cbitcbisgICAgX3NlbmRfcHJvYmUoY2ZnLCBwb3J0LCBwcm90bz1wcm90bylcbitcbisgICAgY3N1bSA9IGJwZl9tYXBfZHVtcChjc3VtX21hcF9pZClcbitcbisgICAgcGt0X2NudCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9QS1RfQ05ULCAwKVxuKyAgICBlcnJfY250ID0gY3N1bS5nZXQoX0NTVU1fS0VZX0VSUl9DTlQsIDApXG4rICAgIGlwX3N1bW1lZCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9JUF9TVU1NRUQsIDApXG4rXG4rICAgIGtzZnRfZ2UocGt0X2NudCwgMSwgY29tbWVudD1cInNob3VsZCBoYXZlIHJlY2VpdmVkIGF0IGxlYXN0IG9uZSBwYWNrZXRcIilcbisgICAga3NmdF9lcShlcnJfY250LCAwLCBjb21tZW50PWZcIlJYIGNoZWNrc3VtIGVycm9yIGNvdW50OiB7ZXJyX2NudH1cIilcbitcbisgICAga3NmdF9wcihmXCIgIGlwX3N1bW1lZDoge2lwX3N1bW1lZDojeH0gY2tzdW06IFwiXG4rICAgICAgICAgICAgZlwie2NzdW0uZ2V0KF9DU1VNX0tFWV9DS1NVTSwgMCk6IzAxMHh9IFwiXG4rICAgICAgICAgICAgZlwibGV2ZWw6IHtjc3VtLmdldChfQ1NVTV9LRVlfTEVWRUwsIDApfVwiKVxuKyAgICBrc2Z0X25lKGlwX3N1bW1lZCBcdTAwMjYgKFhEUF9DSEVDS1NVTV9VTk5FQ0VTU0FSWSB8IFhEUF9DSEVDS1NVTV9DT01QTEVURSksIDAsXG4rICAgICAgICAgICAgXCJkZXZpY2Ugc2hvdWxkIHJlcG9ydCBhIGNoZWNrc3VtIHZlcmRpY3QgZm9yIGEgdmFsaWQgcGFja2V0XCIpXG4rXG4rXG4rZGVmIHRlc3RfeGRwX3J4X2NzdW1faW52YWxpZChjZmcpOlxuKyAgICBcIlwiXCJUZXN0IFJYIGNoZWNrc3VtIG1ldGFkYXRhIGZvciBwYWNrZXRzIHdpdGggYSBjb3JydXB0ZWQgY2hlY2tzdW0uXG4rXG4rICAgIFNlbmRzIFVEUCBwYWNrZXRzIHdpdGggYW4gaW50ZW50aW9uYWxseSBiYWQgTDQgY2hlY2tzdW0gdXNpbmcgdGhlXG4rICAgIG5ldC9saWIgY3N1bSB0b29sIGFuZCB2ZXJpZmllcyB0aGUgZGV2aWNlIGRvZXMgbm90IGNsYWltIGl0IHZhbGlkYXRlZFxuKyAgICB0aGVtOiB0aGUgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgYml0IG11c3Qgbm90IGJlIHNldC5cbisgICAgXCJcIlwiXG4rICAgIF9yZXF1aXJlX3J4X2NzdW1fbWV0YShjZmcpXG4rXG4rICAgIGlwdmVyID0gY2ZnLmFkZHJfaXB2ZXJcbisgICAgYmluX3JlbW90ZSA9IGNmZy5yZW1vdGUuZGVwbG95KGNmZy5uZXRfbGliX2RpciAvIFwiY3N1bVwiKVxuK1xuKyAgICBwcm9nX2luZm8gPSBfbG9hZF94ZHBfbWV0YWRhdGFfcHJvZyhjZmcsIFwieGRwX3J4X2NzdW1cIilcbitcbisgICAgYnBmX21hcF9zZXQoXCJtYXBfeGRwX3NldHVwXCIsIF9TRVRVUF9LRVlfUE9SVCwgX0NTVU1fVE9PTF9QT1JUKVxuK1xuKyAgICBjc3VtX21hcF9pZCA9IHByb2dfaW5mb1tcIm1hcHNcIl1bXCJtYXBfY3N1bVwiXVxuK1xuKyAgICBjbWQoZlwie2Jpbl9yZW1vdGV9IC1pIHtjZmcucmVtb3RlX2lmbmFtZX0gLW4gMjAgLXtpcHZlcn0gXCJcbisgICAgICAgIGZcIi1TIHtjZmcucmVtb3RlX2FkZHJ9IC1EIHtjZmcuYWRkcn0gLXIgMSAtVCAtRVwiLFxuKyAgICAgICAgaG9zdD1jZmcucmVtb3RlKVxuK1xuKyAgICAjIG5vIHJlY2VpdmVyIHRvIHN5bmNocm9uaXplIGFnYWluc3Q7IGxldCBOQVBJIGRyYWluIHRoZSBsYXN0IHBhY2tldHNcbisgICAgdGltZS5zbGVlcCgxKVxuK1xuKyAgICBjc3VtID0gYnBmX21hcF9kdW1wKGNzdW1fbWFwX2lkKVxuK1xuKyAgICBwa3RfY250ID0gY3N1bS5nZXQoX0NTVU1fS0VZX1BLVF9DTlQsIDApXG4rICAgIGlwX3N1bW1lZCA9IGNzdW0uZ2V0KF9DU1VNX0tFWV9JUF9TVU1NRUQsIDApXG4rXG4rICAgIGtzZnRfZ2UocGt0X2NudCwgMSwgY29tbWVudD1cInNob3VsZCBoYXZlIHJlY2VpdmVkIGF0IGxlYXN0IG9uZSBwYWNrZXRcIilcbitcbisgICAga3NmdF9wcihmXCIgIGlwX3N1bW1lZDoge2lwX3N1bW1lZDojeH1cIilcbisgICAga3NmdF9lcShpcF9zdW1tZWQgXHUwMDI2IFhEUF9DSEVDS1NVTV9VTk5FQ0VTU0FSWSwgMCxcbisgICAgICAgICAgICBcImRldmljZSBtdXN0IG5vdCByZXBvcnQgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgZm9yIGEgY29ycnVwdGVkIFwiXG4rICAgICAgICAgICAgXCJjaGVja3N1bVwiKVxuK1xuK1xuIGRlZiBtYWluKCk6XG4gICAgIFwiXCJcIlJ1biBYRFAgbWV0YWRhdGEga2Z1bmMgdGVzdHMgYWdhaW5zdCBhIHJlYWwgZGV2aWNlLlwiXCJcIlxuICAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6XG5AQCAtMTM3LDYgKzIzOCw4IEBAIGRlZiBtYWluKCk6XG4gICAgICAgICBrc2Z0X3J1bihcbiAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgIHRlc3RfeGRwX3Jzc19oYXNoLFxuKyAgICAgICAgICAgICAgICB0ZXN0X3hkcF9yeF9jc3VtX3ZhbGlkLFxuKyAgICAgICAgICAgICAgICB0ZXN0X3hkcF9yeF9jc3VtX2ludmFsaWQsXG4gICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICBhcmdzPShjZmcsKSlcbiAgICAga3NmdF9leGl0KClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIveGRwX21ldGFkYXRhLmJwZi5jXG5pbmRleCBmNzFmNTkyMTUyMzlmZC4uNzBkZWNhZTBhNjYzN2UgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi94ZHBfbWV0YWRhdGEuYnBmLmNcbkBAIC0xLDYgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4gI2luY2x1ZGUgXHUwMDNjc3RkZGVmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG5AQCAtNDAsNiArNDEsMjQgQEAgc3RydWN0IHtcbiBcdF9fdWludChtYXhfZW50cmllcywgNCk7XG4gfSBtYXBfcnNzIFNFQyhcIi5tYXBzXCIpO1xuIFxuKy8qIFJYIGNoZWNrc3VtIHJlc3VsdHM6IGtleSAwID0gaXBfc3VtbWVkIGJpdG1hc2ssIGtleSAxID0gaHcgY2tzdW0gdmFsdWUsXG4rICoga2V5IDIgPSBja3N1bSBsZXZlbCwga2V5IDMgPSBwYWNrZXQgY291bnQsIGtleSA0ID0gZXJyb3IgY291bnQuXG4rICovXG4rZW51bSB7XG4rXHRDU1VNX0tFWV9JUF9TVU1NRUQgPSAwLFxuK1x0Q1NVTV9LRVlfQ0tTVU0gPSAxLFxuK1x0Q1NVTV9LRVlfTEVWRUwgPSAyLFxuK1x0Q1NVTV9LRVlfUEtUX0NOVCA9IDMsXG4rXHRDU1VNX0tFWV9FUlJfQ05UID0gNCxcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIF9fdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgX191MzIpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCA1KTtcbit9IG1hcF9jc3VtIFNFQyhcIi5tYXBzXCIpO1xuK1xuIC8qIE1pcnJvciBvZiBlbnVtIHhkcF9yc3NfaGFzaF90eXBlIGZyb20gaW5jbHVkZS9uZXQveGRwLmguXG4gICogTmVlZGVkIGJlY2F1c2UgdGhlIGVudW0gaXMgbm90IHBhcnQgb2YgVUFQSSBoZWFkZXJzLlxuICAqL1xuQEAgLTU1LDggKzc0LDIwIEBAIGVudW0geGRwX3Jzc19oYXNoX3R5cGUge1xuIFx0WERQX1JTU19MNF9JQ01QID0gMVUgXHUwMDNjXHUwMDNjIDgsXG4gfTtcbiBcbisvKiBNaXJyb3Igb2YgZW51bSB4ZHBfY2hlY2tzdW0gZnJvbSBpbmNsdWRlL25ldC94ZHAuaC5cbisgKiBOZWVkZWQgYmVjYXVzZSB0aGUgZW51bSBpcyBub3QgcGFydCBvZiBVQVBJIGhlYWRlcnMuXG4rICovXG4rZW51bSB4ZHBfY2hlY2tzdW0ge1xuK1x0WERQX0NIRUNLU1VNX05PTkUgPSAxVSBcdTAwM2NcdTAwM2MgMCxcbitcdFhEUF9DSEVDS1NVTV9VTk5FQ0VTU0FSWSA9IDFVIFx1MDAzY1x1MDAzYyAxLFxuK1x0WERQX0NIRUNLU1VNX0NPTVBMRVRFID0gMVUgXHUwMDNjXHUwMDNjIDIsXG4rfTtcbitcbiBleHRlcm4gaW50IGJwZl94ZHBfbWV0YWRhdGFfcnhfaGFzaChjb25zdCBzdHJ1Y3QgeGRwX21kICpjdHgsIF9fdTMyICpoYXNoLFxuIFx0XHRcdFx0ICAgIGVudW0geGRwX3Jzc19oYXNoX3R5cGUgKnJzc190eXBlKSBfX2tzeW07XG4rZXh0ZXJuIGludCBicGZfeGRwX21ldGFkYXRhX3J4X2NoZWNrc3VtKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCxcbitcdFx0XHRcdFx0ZW51bSB4ZHBfY2hlY2tzdW0gKmlwX3N1bW1lZCxcbitcdFx0XHRcdFx0X191MzIgKmNrc3VtLCBfX3U4ICpja3N1bV9sZXZlbCkgX19rc3ltO1xuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX191MTYgZ2V0X2Rlc3RfcG9ydCh2b2lkICpsNCwgdm9pZCAqZGF0YV9lbmQsXG4gXHRcdFx0XHRcdCAgIF9fdTggcHJvdG9jb2wpXG5AQCAtNzgsNDEgKzEwOSwzOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fdTE2IGdldF9kZXN0X3BvcnQodm9pZCAqbDQsIHZvaWQgKmRhdGFfZW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVNFQyhcInhkcFwiKVxuLWludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KVxuKy8qIFJldHVybiB0cnVlIHdoZW4gdGhlIHBhY2tldCBtYXRjaGVzIHRoZSBMNCBwcm90b2NvbCBhbmQgZGVzdGluYXRpb25cbisgKiBwb3J0IGNvbmZpZ3VyZWQgaW4gbWFwX3hkcF9zZXR1cCAoemVyby91bnNldCBmaWx0ZXJzIG1hdGNoIGFueXRoaW5nKS5cbisgKi9cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgeGRwX21hdGNoX3NldHVwKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiB7XG4gXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpY3R4LVx1MDAzZWRhdGFfZW5kO1xuIFx0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpY3R4LVx1MDAzZWRhdGE7XG4tXHRlbnVtIHhkcF9yc3NfaGFzaF90eXBlIHJzc190eXBlID0gMDtcbiBcdHN0cnVjdCBldGhoZHIgKmV0aCA9IGRhdGE7XG4gXHRfX3U4IGw0X3Byb3RvID0gMDtcbi1cdF9fdTMyIGhhc2ggPSAwO1xuLVx0X191MzIga2V5LCB2YWw7XG4gXHR2b2lkICpsNCA9IE5VTEw7XG4tXHRfX3UzMiAqY250O1xuLVx0aW50IHJldDtcbitcdF9fdTMyIGtleTtcbiBcbiBcdGlmICgodm9pZCAqKShldGggKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4tXHRcdHJldHVybiBYRFBfUEFTUztcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGJwZl9odG9ucyhFVEhfUF9JUCkpIHtcbiBcdFx0c3RydWN0IGlwaGRyICppcGggPSAodm9pZCAqKShldGggKyAxKTtcbiBcbiBcdFx0aWYgKCh2b2lkICopKGlwaCArIDEpIFx1MDAzZSBkYXRhX2VuZClcbi1cdFx0XHRyZXR1cm4gWERQX1BBU1M7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHRsNF9wcm90byA9IGlwaC1cdTAwM2Vwcm90b2NvbDtcbiBcdFx0bDQgPSAodm9pZCAqKShpcGggKyAxKTtcbiBcdH0gZWxzZSBpZiAoZXRoLVx1MDAzZWhfcHJvdG8gPT0gYnBmX2h0b25zKEVUSF9QX0lQVjYpKSB7XG4gXHRcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gKHZvaWQgKikoZXRoICsgMSk7XG4gXG4gXHRcdGlmICgodm9pZCAqKShpcDZoICsgMSkgXHUwMDNlIGRhdGFfZW5kKVxuLVx0XHRcdHJldHVybiBYRFBfUEFTUztcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdGw0X3Byb3RvID0gaXA2aC1cdTAwM2VuZXh0aGRyO1xuIFx0XHRsNCA9ICh2b2lkICopKGlwNmggKyAxKTtcbiBcdH1cbiBcbiBcdGlmICghbDQpXG4tXHRcdHJldHVybiBYRFBfUEFTUztcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogRmlsdGVyIG9uIHRoZSBjb25maWd1cmVkIHByb3RvY29sIChtYXBfeGRwX3NldHVwIGtleSBYRFBfUFJPVE8pLlxuIFx0ICogV2hlbiBzZXQsIG9ubHkgcHJvY2VzcyBwYWNrZXRzIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgTDQgcHJvdG9jb2wuXG5AQCAtMTIxLDcgKzE1MCw3IEBAIGludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KVxuIFx0X19zMzIgKnByb3RvX2NmZyA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2bWFwX3hkcF9zZXR1cCwgXHUwMDI2a2V5KTtcbiBcbiBcdGlmIChwcm90b19jZmcgXHUwMDI2XHUwMDI2ICpwcm90b19jZmcgIT0gMCBcdTAwMjZcdTAwMjYgbDRfcHJvdG8gIT0gKF9fdTgpKnByb3RvX2NmZylcbi1cdFx0cmV0dXJuIFhEUF9QQVNTO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBGaWx0ZXIgb24gdGhlIGNvbmZpZ3VyZWQgcG9ydCAobWFwX3hkcF9zZXR1cCBrZXkgWERQX1BPUlQpLlxuIFx0ICogT25seSBhcHBsaWVzIHRvIHByb3RvY29scyB3aXRoIHBvcnRzIChVRFAsIFRDUCkuXG5AQCAtMTMzLDkgKzE2MiwyNCBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiBcdFx0X191MTYgZGVzdCA9IGdldF9kZXN0X3BvcnQobDQsIGRhdGFfZW5kLCBsNF9wcm90byk7XG4gXG4gXHRcdGlmICghZGVzdCB8fCBicGZfbnRvaHMoZGVzdCkgIT0gKF9fdTE2KSpwb3J0X2NmZylcbi1cdFx0XHRyZXR1cm4gWERQX1BBU1M7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK1NFQyhcInhkcFwiKVxuK2ludCB4ZHBfcnNzX2hhc2goc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdGVudW0geGRwX3Jzc19oYXNoX3R5cGUgcnNzX3R5cGUgPSAwO1xuK1x0X191MzIgaGFzaCA9IDA7XG4rXHRfX3UzMiBrZXksIHZhbDtcbitcdF9fdTMyICpjbnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF4ZHBfbWF0Y2hfc2V0dXAoY3R4KSlcbitcdFx0cmV0dXJuIFhEUF9QQVNTO1xuK1xuIFx0cmV0ID0gYnBmX3hkcF9tZXRhZGF0YV9yeF9oYXNoKGN0eCwgXHUwMDI2aGFzaCwgXHUwMDI2cnNzX3R5cGUpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRrZXkgPSBSU1NfS0VZX0VSUl9DTlQ7XG5AQCAtMTYwLDQgKzIwNCw0NiBAQCBpbnQgeGRwX3Jzc19oYXNoKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiBcdHJldHVybiBYRFBfUEFTUztcbiB9XG4gXG4rU0VDKFwieGRwXCIpXG4raW50IHhkcF9yeF9jc3VtKHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHRlbnVtIHhkcF9jaGVja3N1bSBpcF9zdW1tZWQgPSAwO1xuK1x0X191OCBja3N1bV9sZXZlbCA9IDA7XG4rXHRfX3UzMiBja3N1bSA9IDA7XG4rXHRfX3UzMiBrZXksIHZhbDtcbitcdF9fdTMyICpjbnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF4ZHBfbWF0Y2hfc2V0dXAoY3R4KSlcbitcdFx0cmV0dXJuIFhEUF9QQVNTO1xuK1xuK1x0cmV0ID0gYnBmX3hkcF9tZXRhZGF0YV9yeF9jaGVja3N1bShjdHgsIFx1MDAyNmlwX3N1bW1lZCwgXHUwMDI2Y2tzdW0sXG4rXHRcdFx0XHRcdCAgIFx1MDAyNmNrc3VtX2xldmVsKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0a2V5ID0gQ1NVTV9LRVlfRVJSX0NOVDtcbitcdFx0Y250ID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZtYXBfY3N1bSwgXHUwMDI2a2V5KTtcbitcdFx0aWYgKGNudClcbitcdFx0XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChjbnQsIDEpO1xuK1x0XHRyZXR1cm4gWERQX1BBU1M7XG4rXHR9XG4rXG4rXHRrZXkgPSBDU1VNX0tFWV9JUF9TVU1NRUQ7XG4rXHR2YWwgPSAoX191MzIpaXBfc3VtbWVkO1xuK1x0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZtYXBfY3N1bSwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIEJQRl9BTlkpO1xuK1xuK1x0a2V5ID0gQ1NVTV9LRVlfQ0tTVU07XG4rXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNm1hcF9jc3VtLCBcdTAwMjZrZXksIFx1MDAyNmNrc3VtLCBCUEZfQU5ZKTtcbitcbitcdGtleSA9IENTVU1fS0VZX0xFVkVMO1xuK1x0dmFsID0gY2tzdW1fbGV2ZWw7XG4rXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNm1hcF9jc3VtLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgQlBGX0FOWSk7XG4rXG4rXHRrZXkgPSBDU1VNX0tFWV9QS1RfQ05UO1xuK1x0Y250ID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZtYXBfY3N1bSwgXHUwMDI2a2V5KTtcbitcdGlmIChjbnQpXG4rXHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKGNudCwgMSk7XG4rXG4rXHRyZXR1cm4gWERQX1BBU1M7XG4rfVxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjUyOjUzLjk0MjI3MDk3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMzg0NjY3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFzc2Vzc21lbnQ6IFhEUCBNZXRhZGF0YSBTZWxmdGVzdCBBZGRpdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgaXQncyBhZGRpbmcgbmV3IHRlc3RzLCBzcGVjaWZpY2FsbHkgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L3hkcF9tZXRhZGF0YS5weWAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3hkcF9tZXRhZGF0YS5icGYuY2AuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSB0aGUgKm9ubHkqIGZpbGVzIG1vZGlmaWVkLiBZZXAsIHRoZSBkaWZmIHNob3dzIGV4YWN0bHkgdGhvc2UgdHdvLlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBxdWVzdGlvbiBpcyBhbHdheXMsIFwiRG9lcyB0aGlzIHBhdGNoIGltcGFjdCBmdW5jdGlvbmFsIGFzcGVjdHMgdGhhdCB3ZSBuZWVkIHRvIGZ1eno/XCIgSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5LiBObyBjaGFuZ2VzIHRvIGFueXRoaW5nIGNvcmUsIG5vIGRyaXZlcnMsIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlLiBHb29kLCBqdXN0IHNlbGYtdGVzdHMuIFRoYXQgbWVhbnMsIGJ5IGRlZmF1bHQsIHdlIHNob3VsZG4ndCBoYXZlIHRvIGZ1enogdGhpcy5cblxuTm93LCBsZXQncyBzZWUuLi4gSSd2ZSBnb3QgdGhlIGluc3RydWN0aW9uczogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24vLi4uLCBjb2RlIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLi4uXCIuIEhtbSwgc2VsZnRlc3RzIGFyZW4ndCBleHBsaWNpdGx5ICpsaXN0ZWQqLCBidXQgdGhleSBmYWxsIHVuZGVyIHRoZSBjYXRlZ29yeSBvZiBub24tZnVuY3Rpb25hbCBjaGFuZ2VzOyB0aGV5J3JlIHRlc3RpbmcgdG9vbHMuIFRoZXkgYXJlbid0IGFsdGVyaW5nIGtlcm5lbCBiZWhhdmlvciBkaXJlY3RseS5cblxuTGV0J3MgY29uZmlybSB0aGF0IGFnYWluLiBUaGUgZGlmZiBzdGlsbCBvbmx5IHNob3dzIHRob3NlIHNhbWUgdHdvIGZpbGVzLiBTbywgZ2l2ZW4gdGhhdCBpdCdzIHB1cmVseSB0ZXN0cywgYW5kIGJhc2VkIG9uIHRoZSBndWlkYW5jZSwgSSB0aGluayB0aGlzIGlzIGEgY2xlYXIgV29ydGhGdXp6aW5nPWZhbHNlLiBObyBuZWVkIHRvIGNvbnN1bHQgYSB0b29sIG9uIHRoaXMgb25lOyBJJ20gY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkwNywiT3V0cHV0VG9rZW5zIjo2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDAzOjUzOjE2LjMyNjk0MTQ1NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLykgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLykgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqd2wq[1] Phase: Running StartedAt: 2026-07-09 03:53:28 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd2wq[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-09 03:53:28 +0000 UTC FinishedAt: 2026-07-09 03:53:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}