Name: series-workflow68zcd Phase: Failed StartedAt: 2026-08-30 22:35:59 +0000 UTC FinishedAt: 2026-08-30 22:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68zcd[0] Phase: Succeeded StartedAt: 2026-08-30 22:35:59 +0000 UTC FinishedAt: 2026-08-30 22:39:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68zcd[0].run-triage Phase: Succeeded StartedAt: 2026-08-30 22:35:59 +0000 UTC FinishedAt: 2026-08-30 22:39:38 +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+CgkJCTx0ZD4yMDI2LzA4LzMwIDIyOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXIgcmVxdWlyaW5nIGRlZGljYXRlZCBDaXNjbyBWSUMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBUaGVyZWZvcmUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAyMjozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNkMWZlYjVkMThhNThmYWE2NWZhY2MwYjNlZjU5OTAxMmRmOGRjYmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAzMCAyMjozOToxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXG5pbmRleCA0YTY3OTQ3Y2ZiOWYzLi43YTUwOWEwNTY5OTAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXG5AQCAtMTM3LDYgJiM0MzsxMzcsMTIgQEAgc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlIHtcbiBcdHU4IG1hY19hZGRyW0VUSF9BTEVOXTtcbiB9O1xuIFxuJiM0MztlbnVtIGVuaWNfdmZfbGlua19zdGF0ZSB7XG4mIzQzO1x0RU5JQ19WRl9MSU5LX1NUQVRFX1VOS05PV04sXG4mIzQzO1x0RU5JQ19WRl9MSU5LX1NUQVRFX0RPV04sXG4mIzQzO1x0RU5JQ19WRl9MSU5LX1NUQVRFX1VQLFxuJiM0Mzt9O1xuJiM0MztcbiAvKiBlbmljX3Jmc19mbHRyX25vZGUgLSByZnMgZmlsdGVyIG5vZGUgaW4gaGFzaCB0YWJsZVxuICAqXHRAQGtleXM6IElQdjQgNSB0dXBsZVxuICAqXHRAZmxvd19pZDogZmxvd19pZCBvZiBjbHNmIGZpbHRlciBwcm92aWRlZCBieSBrZXJuZWxcbkBAIC0zMTIsMTkgJiM0MzszMTgsMjUgQEAgc3RydWN0IGVuaWMge1xuIFx0dW5zaWduZWQgaW50IGFkbWluX21zZ19jb3VudDtcdC8qIGN1cnJlbnQgZGVwdGggb2YgYWRtaW5fbXNnX2xpc3QgKi9cbiBcdHZvaWQgKCphZG1pbl9ycV9oYW5kbGVyKShzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqYnVmLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGludCBsZW4pO1xuJiM0MztcdC8qIFRoZSBQRiBpcyBhdXRob3JpdGF0aXZlIGZvciBhIFYyIFZGJiMzOTtzIGNhcnJpZXIuICBLZWVwIHRoZSBsYXN0XG4mIzQzO1x0ICogbm90aWZpY2F0aW9uIGFjcm9zcyBhbiBvcmRpbmFyeSBuZXRkZXYgY2xvc2Uvb3BlbiBhbmQgc2VyaWFsaXplIGl0XG4mIzQzO1x0ICogYWdhaW5zdCB0aGUgb3Blbi9zdG9wIGNhcnJpZXIgdHJhbnNpdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGlubG9ja190IHZmX2xpbmtfc3RhdGVfbG9jaztcbiYjNDM7XHRlbnVtIGVuaWNfdmZfbGlua19zdGF0ZSB2Zl9saW5rX3N0YXRlO1xuJiM0MztcdGJvb2wgdmZfbGlua19ydW5uaW5nO1xuIFxuIFx0LyogTUJPWCBwcm90b2NvbCBzdGF0ZSDigJQgbWJveF9sb2NrIHNlcmlhbGl6ZXMgYWRtaW4gV1Egc2VuZHMgKi9cbiBcdHN0cnVjdCBtdXRleCBtYm94X2xvY2s7XG4gXHR1NjQgbWJveF9tc2dfbnVtO1xuLVx0LyogTUJPWCByZXF1ZXN0LXJlcGx5IHN0YXRlLiAgbWJveF9leHBlY3RlZF9yZXBseSBpcyB3cml0dGVuIGFuZFxuLVx0ICogY2xlYXJlZCBieSB0aGUgcHJvY2Vzcy1jb250ZXh0IHJlcXVlc3QgaGVscGVycyAoY2FwYWJpbGl0eS9yZWdpc3Rlci9cbi1cdCAqIHVucmVnaXN0ZXIpIGFuZCBvbmx5IHJlYWQgYnkgdGhlIGFkbWluX21zZ193b3JrIHJlY2VpdmUgaGFuZGxlcnMsIHNvXG4tXHQgKiBpdCBpcyBhbm5vdGF0ZWQgd2l0aCBSRUFEX09OQ0UoKS9XUklURV9PTkNFKCkgcmF0aGVyIHRoYW4gbG9ja2VkOlxuLVx0ICogb25seSBvbmUgcmVxdWVzdCBpcyBpbiBmbGlnaHQgYXQgYSB0aW1lIChyZXF1ZXN0ZXJzIHJ1biB1bmRlciBSVE5MIG9yXG4tXHQgKiBzaW5nbGUtdGhyZWFkZWQgcHJvYmUvcmVtb3ZlKSwgc28gZWFjaCByZXF1ZXN0IGlzIHNlcmlhbGl6ZWQgYW5kIGl0c1xuLVx0ICogcmVwbHkgY29tcGxldGVzIG1ib3hfY29tcCBiZWZvcmUgdGhlIG5leHQgcmVxdWVzdCBpcyBpc3N1ZWQuXG4mIzQzO1x0LyogTUJPWCByZXF1ZXN0LXJlcGx5IHN0YXRlLiAgRXhpc3RpbmcgcmVxdWVzdCBjYWxsZXJzIGFsbG93IG9ubHkgb25lXG4mIzQzO1x0ICogcmVxdWVzdCBpbiBmbGlnaHQuICBUaGUgc3RhdGUgbG9jayBhcmJpdHJhdGVzIHJlcGx5IGFjY2VwdGFuY2UgYWdhaW5zdFxuJiM0MztcdCAqIHRpbWVvdXQgaW52YWxpZGF0aW9uLCB3aGlsZSBtYm94X2NvbXAgcHVibGlzaGVzIHRoZSBhY2NlcHRlZCByZXN1bHQgdG9cbiYjNDM7XHQgKiB0aGUgcmVxdWVzdGVyLlxuIFx0ICovXG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBtYm94X2NvbXA7XG4mIzQzO1x0c3BpbmxvY2tfdCBtYm94X3N0YXRlX2xvY2s7XHQvKiBwcm90ZWN0cyBleHBlY3RlZCByZXBseSBzdGF0ZSAqL1xuJiM0MztcdHU2NCBtYm94X2V4cGVjdGVkX21zZ19udW07XG4gXHR1OCBtYm94X2V4cGVjdGVkX3JlcGx5O1xuIFx0Ym9vbCBtYm94X2luaXRpYWxpemVkO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jXG5pbmRleCAwYmFlZjdhMTIwZWM2Li4xNGQxNjM3YTQzNDJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uY1xuQEAgLTE4MDAsNiAmIzQzOzE4MDAsOCBAQCBzdGF0aWMgaW50IGVuaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFxuIFx0ZW5pY19ub3RpZnlfdGltZXJfc3RhcnQoZW5pYyk7XG4gXHRlbmljX3Jmc190aW1lcl9zdGFydChlbmljKTtcbiYjNDM7XHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3NldF9ydW5uaW5nKGVuaWMsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTg1Myw3ICYjNDM7MTg1NSwxMCBAQCBzdGF0aWMgaW50IGVuaWNfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZW5pYy1cdTAwM2VycV9jb3VudDsgaSYjNDM7JiM0MzspXG4gXHRcdG5hcGlfZGlzYWJsZShcdTAwMjZlbmljLVx1MDAzZW5hcGlbaV0pO1xuIFxuLVx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcbiYjNDM7XHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3NldF9ydW5uaW5nKGVuaWMsIGZhbHNlKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuIFx0aWYgKHZuaWNfZGV2X2dldF9pbnRyX21vZGUoZW5pYy1cdTAwM2V2ZGV2KSA9PSBWTklDX0RFVl9JTlRSX01PREVfTVNJWClcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZW5pYy1cdTAwM2V3cV9jb3VudDsgaSYjNDM7JiM0MzspXG4gXHRcdFx0bmFwaV9kaXNhYmxlKFx1MDAyNmVuaWMtXHUwMDNlbmFwaVtlbmljX2NxX3dxKGVuaWMsIGkpXSk7XG5AQCAtMjIwMSw5ICYjNDM7MjIwNiwxMCBAQCBzdGF0aWMgdm9pZCBlbmljX2FkbWluX2NoYW5fcmVvcGVuKHN0cnVjdCBlbmljICplbmljKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHQvKiBJbnN0YWxsIHRoZSBNQk9YIHJlY2VpdmUgaGFuZGxlciBhbmQgcmVzZXQgdGhlIHNlcXVlbmNlIG51bWJlclxuLVx0ICogYmVmb3JlIG9wZW5pbmcgdGhlIGNoYW5uZWwsIHNvIHRoZSBoYW5kbGVyIGlzIGluIHBsYWNlIGJlZm9yZSB0aGVcbi1cdCAqIGFkbWluIGludGVycnVwdCBpcyB1bm1hc2tlZCBhbmQgbm8gZWFybHkgY29tcGxldGlvbiBpcyBkcm9wcGVkLlxuJiM0MztcdC8qIEluc3RhbGwgdGhlIE1CT1ggcmVjZWl2ZSBoYW5kbGVyIGFuZCBjbGVhciBwZW5kaW5nIHJlcGx5IHN0YXRlIGJlZm9yZVxuJiM0MztcdCAqIG9wZW5pbmcgdGhlIGNoYW5uZWwsIHNvIHRoZSBoYW5kbGVyIGlzIGluIHBsYWNlIGJlZm9yZSB0aGUgYWRtaW5cbiYjNDM7XHQgKiBpbnRlcnJ1cHQgaXMgdW5tYXNrZWQgYW5kIG5vIGVhcmx5IGNvbXBsZXRpb24gaXMgZHJvcHBlZC4gIEtlZXAgdGhlXG4mIzQzO1x0ICogc2VxdWVuY2UgbnVtYmVyIG1vbm90b25pYyBhY3Jvc3MgY2hhbm5lbCBnZW5lcmF0aW9ucy5cbiBcdCAqL1xuIFx0ZW5pY19tYm94X2luaXQoZW5pYyk7XG4gXG5AQCAtMjIxNSw3ICYjNDM7MjIyMSw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fY2hhbl9yZW9wZW4oc3RydWN0IGVuaWMgKmVuaWMpXG4gXHQgKiByZWdpc3RyYXRpb24gb3ZlciBhIGRlYWQgY2hhbm5lbC5cbiBcdCAqL1xuIFx0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpXG4tXHRcdGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuJiM0MztcdFx0V1JJVEVfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQsIGZhbHNlKTtcbiBcbiBcdGVyciA9IGVuaWNfYWRtaW5fY2hhbm5lbF9vcGVuKGVuaWMpO1xuIFx0aWYgKGVycikge1xuQEAgLTIyNzEsNiAmIzQzOzIyNzcsOCBAQCBzdGF0aWMgdm9pZCBlbmljX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0ZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKGVuaWMpO1xuIFxuIFx0ZW5pY19zdG9wKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3Jlc2V0KGVuaWMpO1xuIFxuIFx0ZW5pY19kZXZfc29mdF9yZXNldChlbmljKTtcbiBcdGVuaWNfcmVzZXRfYWRkcl9saXN0cyhlbmljKTtcbkBAIC0yMzE1LDYgJiM0MzsyMzIzLDggQEAgc3RhdGljIHZvaWQgZW5pY190eF9oYW5nX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGVuaWNfZGV2X2hhbmdfbm90aWZ5KGVuaWMpO1xuIFx0ZW5pY19zdG9wKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3Jlc2V0KGVuaWMpO1xuIFxuIFx0ZW5pY19kZXZfaGFuZ19yZXNldChlbmljKTtcbiBcdGVuaWNfcmVzZXRfYWRkcl9saXN0cyhlbmljKTtcbkBAIC0zMDE1LDYgJiM0MzszMDI1LDcgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0ZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRlbmljLVx1MDAzZW5ldGRldiA9IG5ldGRldjtcbiBcdGVuaWMtXHUwMDNlcGRldiA9IHBkZXY7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xuIFxuIFx0LyogU2V0dXAgUENJIHJlc291cmNlc1xuIFx0ICovXG5AQCAtMzMzOSw3ICYjNDM7MzM1MCw3IEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcbiBlcnJfb3V0X2FkbWluX2Nsb3NlOlxuIFx0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpIHtcbi1cdFx0aWYgKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCkge1xuJiM0MztcdFx0aWYgKFJFQURfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpKSB7XG4gXHRcdFx0aW50IHVucmVnX2VyciA9IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKGVuaWMpO1xuIFxuIFx0XHRcdGlmICh1bnJlZ19lcnIpXG5AQCAtMzM5Miw3ICYjNDM7MzQwMyw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHQgKiB0b3VjaGluZyBhIG5ldGRldiB0aGF0IGlzIGJlaW5nIHRvcm4gZG93bi5cbiBcdFx0ICovXG4gXHRcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKSB7XG4tXHRcdFx0aWYgKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCkge1xuJiM0MztcdFx0XHRpZiAoUkVBRF9PTkNFKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCkpIHtcbiBcdFx0XHRcdGludCB1bnJlZ19lcnIgPSBlbmljX21ib3hfdmZfdW5yZWdpc3RlcihlbmljKTtcbiBcbiBcdFx0XHRcdGlmICh1bnJlZ19lcnIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmNcbmluZGV4IDJmYjBmMWUyZmY1MDEuLjVjOTNjYTQ5NTUyYWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jXG5AQCAtMTgsMjIgJiM0MzsxOCwyNSBAQFxuICNkZWZpbmUgRU5JQ19NQk9YX1BPTExfVElNRU9VVF9VU1x0NTAwMDAwMFxuICNkZWZpbmUgRU5JQ19NQk9YX1BPTExfSU5URVJWQUxfVVNcdDEwMFxuIFxuLXN0YXRpYyB2b2lkIGVuaWNfbWJveF9maWxsX2hkcihzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkcixcbi1cdFx0XHQgICAgICAgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCwgdTE2IG1zZ19sZW4pXG4mIzQzO3N0YXRpYyB2b2lkIGVuaWNfbWJveF9maWxsX2hkcihzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLCB1OCBtc2dfdHlwZSxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiBkc3Rfdm5pY19pZCwgdTE2IG1zZ19sZW4sIHU2NCBtc2dfbnVtKVxuIHtcbiBcdG1lbXNldChoZHIsIDAsIHNpemVvZigqaGRyKSk7XG4gXHRoZHItXHUwMDNlZHN0X3ZuaWNfaWQgPSBjcHVfdG9fbGUxNihkc3Rfdm5pY19pZCk7XG4gXHRoZHItXHUwMDNlbXNnX3R5cGUgPSBtc2dfdHlwZTtcbiBcdGhkci1cdTAwM2Vtc2dfbGVuID0gY3B1X3RvX2xlMTYobXNnX2xlbik7XG4tXHRoZHItXHUwMDNlbXNnX251bSA9IGNwdV90b19sZTY0KCYjNDM7JiM0MztlbmljLVx1MDAzZW1ib3hfbXNnX251bSk7XG4mIzQzO1x0aGRyLVx1MDAzZW1zZ19udW0gPSBjcHVfdG9fbGU2NChtc2dfbnVtKTtcbiB9XG4gXG4taW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCxcbi1cdFx0ICAgICAgIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbilcbiYjNDM7c3RhdGljIGludCBlbmljX21ib3hfc2VuZF9tc2dfaWQoc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxuJiM0MztcdFx0XHRcdCB1MTYgZHN0X3ZuaWNfaWQsIHZvaWQgKnBheWxvYWQsXG4mIzQzO1x0XHRcdFx0IHUxNiBwYXlsb2FkX2xlbiwgdTY0IG1zZ19udW0sIGJvb2wgcmV1c2VfbXNnX251bSxcbiYjNDM7XHRcdFx0XHQgdTggZXhwZWN0ZWRfcmVwbHkpXG4ge1xuIFx0c2l6ZV90IHRvdGFsX2xlbiA9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X2hkcikgJiM0MzsgcGF5bG9hZF9sZW47XG4gXHRzdHJ1Y3Qgdm5pY193cSAqd3EgPSBcdTAwMjZlbmljLVx1MDAzZWFkbWluX3dxO1xuIFx0c3RydWN0IHdxX2VuZXRfZGVzYyAqZGVzYztcbiYjNDM7XHRib29sIHJlcGx5X2V4cGVjdGVkID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQ7XG4gXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuIFx0dTE2IHZsYW5fdGFnO1xuQEAgLTY4LDcgJiM0Mzs3MSwyMSBAQCBpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbi1cdGVuaWNfbWJveF9maWxsX2hkcihlbmljLCBidWYsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgdG90YWxfbGVuKTtcbiYjNDM7XHQvKiBSZXBsaWVzIHJldXNlIHRoZSBpbml0aWF0aW5nIG1lc3NhZ2UgbnVtYmVyLiAgUmVxdWVzdHMgYW5kXG4mIzQzO1x0ICogbm90aWZpY2F0aW9ucyBhbGxvY2F0ZSBhIG5ldyBvbmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFyZXVzZV9tc2dfbnVtKVxuJiM0MztcdFx0bXNnX251bSA9ICYjNDM7JiM0MztlbmljLVx1MDAzZW1ib3hfbXNnX251bTtcbiYjNDM7XHRpZiAoZXhwZWN0ZWRfcmVwbHkpIHtcbiYjNDM7XHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZlbmljLVx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XG4mIzQzO1x0XHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSBleHBlY3RlZF9yZXBseTtcbiYjNDM7XHRcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID0gbXNnX251bTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiYjNDM7XHRcdHJlcGx5X2V4cGVjdGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVuaWNfbWJveF9maWxsX2hkcihidWYsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgdG90YWxfbGVuLCBtc2dfbnVtKTtcbiBcdGlmIChwYXlsb2FkX2xlbikge1xuIFx0XHR2b2lkICpkc3QgPSBidWYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKTtcbiBcbkBAIC0xMzksMTggJiM0MzsxNTYsNjYgQEAgaW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCxcbiBcdFx0ICAgXCYjMzQ7TUJPWCBzZW5kIG1zZ190eXBlICV1IGRzdCAldSB2bGFuICV1IGVyciAlZFxcblwmIzM0OyxcbiBcdFx0ICAgbXNnX3R5cGUsIGRzdF92bmljX2lkLCB2bGFuX3RhZywgZXJyKTtcbiB1bmxvY2s6XG4mIzQzO1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgcmVwbHlfZXhwZWN0ZWQpIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZlbmljLVx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XG4mIzQzO1x0XHRpZiAoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID09IGV4cGVjdGVkX3JlcGx5IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID09IG1zZ19udW0pIHtcbiYjNDM7XHRcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcbiYjNDM7XHRcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuJiM0MztcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZlbmljLVx1MDAzZW1ib3hfbG9jayk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7aW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCxcbiYjNDM7XHRcdCAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnX2lkKGVuaWMsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgcGF5bG9hZCxcbiYjNDM7XHRcdFx0XHQgICAgIHBheWxvYWRfbGVuLCAwLCBmYWxzZSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW5pY19tYm94X3NlbmRfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxuJiM0MztcdFx0XHRcdHUxNiBkc3Rfdm5pY19pZCwgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfbGVuLFxuJiM0MztcdFx0XHRcdHU2NCBtc2dfbnVtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZ19pZChlbmljLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHBheWxvYWQsXG4mIzQzO1x0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgbXNnX251bSwgdHJ1ZSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW5pY19tYm94X3ZmX3NlbmRfcmVxdWVzdChzdHJ1Y3QgZW5pYyAqZW5pYywgdTggcmVxdWVzdF90eXBlLFxuJiM0MztcdFx0XHRcdCAgICAgdTggZXhwZWN0ZWRfcmVwbHksIHZvaWQgKnBheWxvYWQsXG4mIzQzO1x0XHRcdFx0ICAgICB1MTYgcGF5bG9hZF9sZW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnX2lkKGVuaWMsIHJlcXVlc3RfdHlwZSwgRU5JQ19NQk9YX0RTVF9QRixcbiYjNDM7XHRcdFx0XHQgICAgIHBheWxvYWQsIHBheWxvYWRfbGVuLCAwLCBmYWxzZSxcbiYjNDM7XHRcdFx0XHQgICAgIGV4cGVjdGVkX3JlcGx5KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGVuaWNfbWJveF93YWl0X3JlcGx5KHN0cnVjdCBlbmljICplbmljLCB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBsZWZ0O1xuJiM0MztcdGludCBlcnIgPSAwO1xuIFxuIFx0bGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCxcbiBcdFx0XHRcdFx0ICAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKSk7XG4mIzQzO1x0aWYgKGxlZnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogSW52YWxpZGF0ZSBhIHJlcXVlc3QgdGhhdCB0aGUgaGFuZGxlciBoYXMgbm90IGFscmVhZHkgYWNjZXB0ZWQuICBBXG4mIzQzO1x0ICogZGVsYXllZCByZXBseSBjYW5ub3QgbWF0Y2ggYSBsYXRlciByZXF1ZXN0IGJlY2F1c2UgbWVzc2FnZSBudW1iZXJzIGFyZVxuJiM0MztcdCAqIG1vbm90b25pYyBhY3Jvc3MgY2hhbm5lbCByZW9wZW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiYjNDM7XHRpZiAoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KSB7XG4mIzQzO1x0XHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwO1xuJiM0MztcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPSAwO1xuJiM0MztcdFx0ZXJyID0gLUVUSU1FRE9VVDtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuIFxuLVx0cmV0dXJuIGxlZnQgPyAwIDogLUVUSU1FRE9VVDtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBpbnQgZW5pY19tYm94X3NlbmRfbGlua19zdGF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZmX2lkLCB1MzIgbGlua19zdGF0ZSlcbkBAIC0xNzgsOCAmIzQzOzI0Myw4IEBAIHN0YXRpYyBpbnQgZW5pY19tYm94X3BmX2hhbmRsZV9jYXBhYmlsaXR5KHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXG4gXHRyZXBseS5yZXBseS5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNigwKTtcbiBcdHJlcGx5LnZlcnNpb24gPSBjcHVfdG9fbGUzMihFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSk7XG4gXG4tXHRyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZLCB2Zl9pZCxcbi1cdFx0XHRcdCAgXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSkpO1xuJiM0MztcdHJldHVybiBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSwgdmZfaWQsXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpLCBtc2dfbnVtKTtcbiB9XG4gXG4gc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXG5AQCAtMjA4LDggJiM0MzsyNzMsOCBAQCBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZyxcbiBcdH1cbiBcbiBcdHJlcGx5LnJlcGx5LnJldF9tYWpvciA9IGNwdV90b19sZTE2KDApO1xuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXG4tXHRcdFx0XHQgXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSkpO1xuJiM0MztcdGVyciA9IGVuaWNfbWJveF9zZW5kX3JlcGx5KGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXG4mIzQzO1x0XHRcdFx0ICAgXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSksIG1zZ19udW0pO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC0yNTMsOCAmIzQzOzMxOCw4IEBAIHN0YXRpYyBpbnQgZW5pY19tYm94X3BmX2hhbmRsZV91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXG4gXHRlbmljLVx1MDAzZXZmX3N0YXRlW3ZmX2lkXS5yZWdpc3RlcmVkID0gZmFsc2U7XG4gXG4gXHRyZXBseS5yZXBseS5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNigwKTtcbi1cdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXG4tXHRcdFx0XHQgXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSkpO1xuJiM0MztcdGVyciA9IGVuaWNfbWJveF9zZW5kX3JlcGx5KGVuaWMsIEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUExZLCB2Zl9pZCxcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZyZXBseSwgc2l6ZW9mKHJlcGx5KSwgbXNnX251bSk7XG4gXG4gXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuIFx0XHRuZXRkZXZfaW5mbyhlbmljLVx1MDAzZW5ldGRldixcbkBAIC0zMjQsMTA1ICYjNDM7Mzg5LDExNiBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfcGZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXG4gXHRcdFx0ICAgIGhkci1cdTAwM2Vtc2dfdHlwZSwgdmZfaWQsIGVycik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfY2FwYWJpbGl0eV9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYyxcbi1cdFx0XHRcdFx0XHQgdm9pZCAqcGF5bG9hZClcbiYjNDM7c3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYywgdTggcmVwbHlfdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICB2b2lkICpwYXlsb2FkLCB1NjQgbXNnX251bSlcbiB7XG4tXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnICpyZXBseSA9IHBheWxvYWQ7XG4tXG4tXHRpZiAoUkVBRF9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSkgIT0gRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFkpIHtcbiYjNDM7XHRzdHJ1Y3QgZW5pY19tYm94X2dlbmVyaWNfcmVwbHkgKnJlcGx5ID0gcGF5bG9hZDtcbiYjNDM7XHR1MTYgcmV0X21ham9yID0gbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmV0X21ham9yKTtcbiYjNDM7XHR1NjQgZXhwZWN0ZWRfbXNnX251bTtcbiYjNDM7XHR1OCBleHBlY3RlZF90eXBlO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuJiM0MztcdGV4cGVjdGVkX3R5cGUgPSBlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHk7XG4mIzQzO1x0ZXhwZWN0ZWRfbXNnX251bSA9IGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtO1xuJiM0MztcdGlmIChleHBlY3RlZF90eXBlICE9IHJlcGx5X3R5cGUgfHwgZXhwZWN0ZWRfbXNnX251bSAhPSBtc2dfbnVtKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZlbmljLVx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XG4gXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuLVx0XHRcdCAgICBcJiMzNDtNQk9YOiBzdGFsZSBjYXBhYmlsaXR5IHJlcGx5IChleHBlY3RlZCAldSksIGRyb3BcXG5cJiMzNDssXG4tXHRcdFx0ICAgIFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpKTtcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O01CT1g6IHN0YWxlIHJlcGx5ICV1LyVsbHUgKGV4cGVjdGVkICV1LyVsbHUpLCBkcm9wXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgcmVwbHlfdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyltc2dfbnVtLFxuJiM0MztcdFx0XHQgICAgZXhwZWN0ZWRfdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylleHBlY3RlZF9tc2dfbnVtKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvcikgPT0gMClcbi1cdFx0ZW5pYy1cdTAwM2VwZl9jYXBfdmVyc2lvbiA9IGxlMzJfdG9fY3B1KHJlcGx5LVx1MDAzZXZlcnNpb24pO1xuLVx0ZWxzZVxuLVx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbi1cdFx0XHQgICAgXCYjMzQ7TUJPWDogUEYgcmVqZWN0ZWQgY2FwYWJpbGl0eSByZXF1ZXN0OiAldS8ldVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21ham9yKSxcbi1cdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21pbm9yKSk7XG4tXHRjb21wbGV0ZShcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4tfVxuJiM0MztcdGlmICghcmV0X21ham9yKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKHJlcGx5X3R5cGUpIHtcbiYjNDM7XHRcdGNhc2UgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFk6IHtcbiYjNDM7XHRcdFx0c3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyAqY2FwID0gcGF5bG9hZDtcbiBcbi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX3JlZ2lzdGVyX3JlcGx5KHN0cnVjdCBlbmljICplbmljLFxuLVx0XHRcdFx0XHQgICAgICAgdm9pZCAqcGF5bG9hZClcbi17XG4tXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyAqcmVwbHkgPSBwYXlsb2FkO1xuLVxuLVx0aWYgKFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpICE9IEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSkge1xuLVx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbi1cdFx0XHQgICAgXCYjMzQ7TUJPWDogc3RhbGUgcmVnaXN0ZXIgcmVwbHkgKGV4cGVjdGVkICV1KSwgZHJvcFxcblwmIzM0Oyxcbi1cdFx0XHQgICAgUkVBRF9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSkpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRpZiAobGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21ham9yKSkge1xuLVx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbi1cdFx0XHQgICAgXCYjMzQ7TUJPWDogVkYgcmVnaXN0ZXIgcmVqZWN0ZWQgYnkgUEY6ICV1LyV1XFxuXCYjMzQ7LFxuLVx0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWFqb3IpLFxuLVx0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWlub3IpKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCA9IHRydWU7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VwZl9jYXBfdmVyc2lvbixcbiYjNDM7XHRcdFx0XHQgICBsZTMyX3RvX2NwdShjYXAtXHUwMDNldmVyc2lvbikpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOlxuJiM0MztcdFx0XHRXUklURV9PTkNFKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCwgdHJ1ZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWTpcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQsIGZhbHNlKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXHR9XG4mIzQzO1x0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcbiYjNDM7XHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfbXNnX251bSA9IDA7XG4gXHRjb21wbGV0ZShcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4tfVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiBcbi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX3VucmVnaXN0ZXJfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsXG4tXHRcdFx0XHRcdFx0IHZvaWQgKnBheWxvYWQpXG4te1xuLVx0c3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDtcbi1cbi1cdGlmIChSRUFEX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KSAhPSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSkge1xuJiM0MztcdGlmIChyZXRfbWFqb3IpXG4gXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuLVx0XHRcdCAgICBcJiMzNDtNQk9YOiBzdGFsZSB1bnJlZ2lzdGVyIHJlcGx5IChleHBlY3RlZCAldSksIGRyb3BcXG5cJiMzNDssXG4tXHRcdFx0ICAgIFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuLVx0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvcikpIHtcbi1cdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4tXHRcdFx0ICAgIFwmIzM0O01CT1g6IFZGIHVucmVnaXN0ZXIgcmVqZWN0ZWQgYnkgUEY6ICV1LyV1XFxuXCYjMzQ7LFxuLVx0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWFqb3IpLFxuLVx0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWlub3IpKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuLVx0fVxuLVx0Y29tcGxldGUoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuJiM0MztcdFx0XHQgICAgXCYjMzQ7TUJPWDogUEYgcmVqZWN0ZWQgcmVwbHkgdHlwZSAldTogJXUvJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICByZXBseV90eXBlLCByZXRfbWFqb3IsXG4mIzQzO1x0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXRfbWlub3IpKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpwYXlsb2FkKVxuJiM0MztzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKnBheWxvYWQsXG4mIzQzO1x0XHRcdFx0XHQgICB1NjQgbXNnX251bSlcbiB7XG4gXHRzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfbm90aWZfbXNnICpub3RpZiA9IHBheWxvYWQ7XG4gXHRzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfYWNrX21zZyBhY2sgPSB7fTtcbiYjNDM7XHR1MzIgbGlua19zdGF0ZSA9IGxlMzJfdG9fY3B1KG5vdGlmLVx1MDAzZWxpbmtfc3RhdGUpO1xuIFx0aW50IGVycjtcbiBcbi1cdHN3aXRjaCAobGUzMl90b19jcHUobm90aWYtXHUwMDNlbGlua19zdGF0ZSkpIHtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xuJiM0MztcdHN3aXRjaCAobGlua19zdGF0ZSkge1xuIFx0Y2FzZSBFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEU6XG4tXHRcdGlmICghbmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRlbmljLVx1MDAzZXZmX2xpbmtfc3RhdGUgPSBFTklDX1ZGX0xJTktfU1RBVEVfVVA7XG4mIzQzO1x0XHRpZiAoZW5pYy1cdTAwM2V2Zl9saW5rX3J1bm5pbmcgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKVxuIFx0XHRcdG5ldGlmX2NhcnJpZXJfb24oZW5pYy1cdTAwM2VuZXRkZXYpO1xuIFx0XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LCBcJiMzNDtNQk9YOiBsaW5rIHN0YXRlIC1cdTAwM2UgVVBcXG5cJiMzNDspO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgRU5JQ19NQk9YX0xJTktfU1RBVEVfRElTQUJMRTpcbi1cdFx0aWYgKG5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKVxuJiM0MztcdFx0ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlID0gRU5JQ19WRl9MSU5LX1NUQVRFX0RPV047XG4mIzQzO1x0XHRpZiAoZW5pYy1cdTAwM2V2Zl9saW5rX3J1bm5pbmcgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikpXG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vZmYoZW5pYy1cdTAwM2VuZXRkZXYpO1xuIFx0XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LCBcJiMzNDtNQk9YOiBsaW5rIHN0YXRlIC1cdTAwM2UgRE9XTlxcblwmIzM0Oyk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsIFwmIzM0O01CT1g6IHVua25vd24gbGluayBzdGF0ZSAldVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgbGUzMl90b19jcHUobm90aWYtXHUwMDNlbGlua19zdGF0ZSkpO1xuJiM0MztcdFx0XHQgICAgbGlua19zdGF0ZSk7XG4gXHRcdGFjay5hY2sucmV0X21ham9yID0gY3B1X3RvX2xlMTYoRU5JQ19NQk9YX0VSUl9HRU5FUklDKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xuIFxuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX0FDSyxcbi1cdFx0XHRcdCBFTklDX01CT1hfRFNUX1BGLCBcdTAwMjZhY2ssIHNpemVvZihhY2spKTtcbiYjNDM7XHRlcnIgPSBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0ssXG4mIzQzO1x0XHRcdFx0ICAgRU5JQ19NQk9YX0RTVF9QRiwgXHUwMDI2YWNrLCBzaXplb2YoYWNrKSwgbXNnX251bSk7XG4gXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXG4gXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuIFx0XHRcdCAgICBcJiMzNDtNQk9YOiBmYWlsZWQgdG8gc2VuZCBsaW5rIHN0YXRlIEFDSzogJWRcXG5cJiMzNDssIGVycik7XG4gfVxuIFxuJiM0Mzt2b2lkIGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3Jlc2V0KHN0cnVjdCBlbmljICplbmljKVxuJiM0Mzt7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbiYjNDM7XHRlbmljLVx1MDAzZXZmX2xpbmtfc3RhdGUgPSBFTklDX1ZGX0xJTktfU1RBVEVfVU5LTk9XTjtcbiYjNDM7XHRpZiAoZW5pYy1cdTAwM2V2Zl9saW5rX3J1bm5pbmcgXHUwMDI2XHUwMDI2IG5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKVxuJiM0MztcdFx0bmV0aWZfY2Fycmllcl9vZmYoZW5pYy1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBlbmljX21ib3hfdmZfbGlua19zdGF0ZV9zZXRfcnVubmluZyhzdHJ1Y3QgZW5pYyAqZW5pYywgYm9vbCBydW5uaW5nKVxuJiM0Mzt7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbiYjNDM7XHRlbmljLVx1MDAzZXZmX2xpbmtfcnVubmluZyA9IHJ1bm5pbmc7XG4mIzQzO1x0aWYgKHJ1bm5pbmcgXHUwMDI2XHUwMDI2IGVuaWMtXHUwMDNldmZfbGlua19zdGF0ZSA9PSBFTklDX1ZGX0xJTktfU1RBVEVfVVApIHtcbiYjNDM7XHRcdGlmICghbmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRcdG5ldGlmX2NhcnJpZXJfb24oZW5pYy1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdH0gZWxzZSBpZiAobmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikpIHtcbiYjNDM7XHRcdG5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGVuaWNfbWJveF92Zl9wYXlsb2FkX29rKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSxcbiBcdFx0XHRcdCAgICB1MTYgcGF5bG9hZF9sZW4sIHNpemVfdCBtaW5fbGVuKVxuIHtcbkBAIC00MzksNiAmIzQzOzUxNSw4IEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYyxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkciwgdm9pZCAqcGF5bG9hZCxcbiBcdFx0XHRcdCAgICAgdTE2IHBheWxvYWRfbGVuKVxuIHtcbiYjNDM7XHR1NjQgbXNnX251bSA9IGxlNjRfdG9fY3B1KGhkci1cdTAwM2Vtc2dfbnVtKTtcbiYjNDM7XG4gXHRzd2l0Y2ggKGhkci1cdTAwM2Vtc2dfdHlwZSkge1xuIFx0Y2FzZSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWToge1xuIFx0XHRzaXplX3QgZXhwID0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cpO1xuQEAgLTQ0Niw3ICYjNDM7NTI0LDcgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuIFx0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbiBcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbiBcdFx0XHRyZXR1cm47XG4tXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfY2FwYWJpbGl0eV9yZXBseShlbmljLCBwYXlsb2FkKTtcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoZW5pYywgaGRyLVx1MDAzZW1zZ190eXBlLCBwYXlsb2FkLCBtc2dfbnVtKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWToge1xuQEAgLTQ1NSw3ICYjNDM7NTMzLDcgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuIFx0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbiBcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbiBcdFx0XHRyZXR1cm47XG4tXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVnaXN0ZXJfcmVwbHkoZW5pYywgcGF5bG9hZCk7XG4mIzQzO1x0XHRlbmljX21ib3hfdmZfaGFuZGxlX3JlcGx5KGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSwgcGF5bG9hZCwgbXNnX251bSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFx0Y2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWToge1xuQEAgLTQ2NCw3ICYjNDM7NTQyLDcgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuIFx0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbiBcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbiBcdFx0XHRyZXR1cm47XG4tXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfdW5yZWdpc3Rlcl9yZXBseShlbmljLCBwYXlsb2FkKTtcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoZW5pYywgaGRyLVx1MDAzZW1zZ190eXBlLCBwYXlsb2FkLCBtc2dfbnVtKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX05PVElGOiB7XG5AQCAtNDczLDcgJiM0Mzs1NTEsNyBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXG4gXHRcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVx1MDAzZW1zZ190eXBlLFxuIFx0XHRcdFx0XHQgICAgIHBheWxvYWRfbGVuLCBleHApKVxuIFx0XHRcdHJldHVybjtcbi1cdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKGVuaWMsIHBheWxvYWQpO1xuJiM0MztcdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKGVuaWMsIHBheWxvYWQsIG1zZ19udW0pO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGRlZmF1bHQ6XG5AQCAtNTQyLDMyICYjNDM7NjIwLDMxIEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF9yZWN2X2hhbmRsZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcbiBpbnQgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpXG4ge1xuIFx0c3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X21zZyByZXEgPSB7fTtcbiYjNDM7XHR1MzIgdmVyc2lvbjtcbiBcdGludCBlcnI7XG4gXG4tXHRlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uID0gMDtcbi1cdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbi1cdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSk7XG4mIzQzO1x0V1JJVEVfT05DRShlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uLCAwKTtcbiBcdHJlcS52ZXJzaW9uID0gY3B1X3RvX2xlMzIoRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpO1xuIFxuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QsXG4tXHRcdFx0XHQgRU5JQ19NQk9YX0RTVF9QRiwgXHUwMDI2cmVxLCBzaXplb2YocmVxKSk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCAwKTtcbiYjNDM7XHRlcnIgPSBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KGVuaWMsXG4mIzQzO1x0XHRcdFx0XHRFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVFVRVNULFxuJiM0MztcdFx0XHRcdFx0RU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFksXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbiYjNDM7XHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuIFxuIFx0ZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7XG4tXHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgMCk7XG4mIzQzO1x0dmVyc2lvbiA9IFJFQURfT05DRShlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0ICAgIFwmIzM0O01CT1g6IG5vIGNhcGFiaWxpdHkgcmVwbHkgZnJvbSBQRlxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRpZiAoZW5pYy1cdTAwM2VwZl9jYXBfdmVyc2lvbiBcdTAwM2MgRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpIHtcbiYjNDM7XHRpZiAodmVyc2lvbiBcdTAwM2MgRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0ICAgIFwmIzM0O01CT1g6IFBGIHJlamVjdGVkIGNhcGFiaWxpdHkgcmVxdWVzdCBvciByZXBvcnRlZCB1bnN1cHBvcnRlZCB2ZXJzaW9uICV1XFxuXCYjMzQ7LFxuLVx0XHRcdCAgICBlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uKTtcbiYjNDM7XHRcdFx0ICAgIHZlcnNpb24pO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG5AQCAtNTc2LDI4ICYjNDM7NjUzLDI1IEBAIGludCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcbiBpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKVxuIHtcbiYjNDM7XHRib29sIHJlZ2lzdGVyZWQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkID0gZmFsc2U7XG4tXHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4tXHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZKTtcbiYjNDM7XHRXUklURV9PTkNFKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCwgZmFsc2UpO1xuIFxuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVFVRVNULFxuLVx0XHRcdFx0IEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApO1xuLVx0aWYgKGVycikge1xuLVx0XHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgMCk7XG4mIzQzO1x0ZXJyID0gZW5pY19tYm94X3ZmX3NlbmRfcmVxdWVzdChlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVRVUVTVCxcbiYjNDM7XHRcdFx0XHRcdEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSwgTlVMTCwgMCk7XG4mIzQzO1x0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdH1cbiBcbiBcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xuLVx0V1JJVEVfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xuJiM0MztcdHJlZ2lzdGVyZWQgPSBSRUFEX09OQ0UoZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0ICAgIFwmIzM0O01CT1g6IFZGIHJlZ2lzdHJhdGlvbiB3aXRoIFBGIHRpbWVkIG91dFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRpZiAoIWVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZClcbiYjNDM7XHRpZiAoIXJlZ2lzdGVyZWQpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNjA1LDQzICYjNDM7Njc5LDQ4IEBAIGludCBlbmljX21ib3hfdmZfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpXG4gXG4gaW50IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKVxuIHtcbiYjNDM7XHRib29sIHJlZ2lzdGVyZWQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCFlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpXG4mIzQzO1x0aWYgKCFSRUFEX09OQ0UoZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4tXHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFkpO1xuLVxuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUVVFU1QsXG4tXHRcdFx0XHQgRU5JQ19NQk9YX0RTVF9QRiwgTlVMTCwgMCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCAwKTtcbiYjNDM7XHRlcnIgPSBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KGVuaWMsXG4mIzQzO1x0XHRcdFx0XHRFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVFVRVNULFxuJiM0MztcdFx0XHRcdFx0RU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFksXG4mIzQzO1x0XHRcdFx0XHROVUxMLCAwKTtcbiYjNDM7XHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuIFxuIFx0ZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7XG4tXHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgMCk7XG4mIzQzO1x0cmVnaXN0ZXJlZCA9IFJFQURfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdGlmIChlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpXG4mIzQzO1x0aWYgKHJlZ2lzdGVyZWQpXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpXG4ge1xuLVx0LyogbWJveF9sb2NrIGFuZCBtYm94X2NvbXAgbXVzdCBiZSBpbml0aWFsaXplZCBleGFjdGx5IG9uY2UgcGVyXG4mIzQzO1x0Ym9vbCByZWluaXQgPSBlbmljLVx1MDAzZW1ib3hfaW5pdGlhbGl6ZWQ7XG4mIzQzO1xuJiM0MztcdC8qIE1CT1ggbG9ja3MgYW5kIG1ib3hfY29tcCBtdXN0IGJlIGluaXRpYWxpemVkIGV4YWN0bHkgb25jZSBwZXJcbiBcdCAqIGRldmljZSBsaWZldGltZTsgdGhlIFBGIHNyaW92X2NvbmZpZ3VyZSBwYXRoIGNhbiByZS1lbnRlciB0aGlzXG4gXHQgKiBvbiBlYWNoIGVuYWJsZSBjeWNsZSB3aGVyZSB0aGVzZSBwcmltaXRpdmVzIGFyZSBhbHJlYWR5IHNldCB1cC5cbiBcdCAqL1xuLVx0aWYgKCFlbmljLVx1MDAzZW1ib3hfaW5pdGlhbGl6ZWQpIHtcbiYjNDM7XHRpZiAoIXJlaW5pdCkge1xuIFx0XHRtdXRleF9pbml0KFx1MDAyNmVuaWMtXHUwMDNlbWJveF9sb2NrKTtcbiBcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiYjNDM7XHRcdGVuaWMtXHUwMDNlbWJveF9tc2dfbnVtID0gMDtcbiBcdFx0ZW5pYy1cdTAwM2VtYm94X2luaXRpYWxpemVkID0gdHJ1ZTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbiBcdH1cbi1cdGVuaWMtXHUwMDNlbWJveF9tc2dfbnVtID0gMDtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuJiM0MztcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XG4mIzQzO1x0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPSAwO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiBcdGVuaWMtXHUwMDNlYWRtaW5fcnFfaGFuZGxlciA9IGVuaWNfbWJveF9yZWN2X2hhbmRsZXI7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5oXG5pbmRleCAxNWUzMGVlMmIwZWQ5Li42MDQwOWJhZDJmMjg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaFxuQEAgLTg4LDYgJiM0Mzs4OCw4IEBAIHZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpO1xuIGludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsXG4gXHRcdCAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pO1xuIGludCBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmZfaWQsIHUzMiBsaW5rX3N0YXRlKTtcbiYjNDM7dm9pZCBlbmljX21ib3hfdmZfbGlua19zdGF0ZV9yZXNldChzdHJ1Y3QgZW5pYyAqZW5pYyk7XG4mIzQzO3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfc2V0X3J1bm5pbmcoc3RydWN0IGVuaWMgKmVuaWMsIGJvb2wgcnVubmluZyk7XG4gaW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKTtcbiBpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKTtcbiBpbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDIyOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDaXNjbyBWSUMgRXRoZXJuZXQgTklDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy8pLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVyIHJlcXVpcmluZyBkZWRpY2F0ZWQgQ2lzY28gVklDIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gVGhlcmVmb3JlLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZDFmZWI1ZDE4YTU4ZmFhNjVmYWNjMGIzZWY1OTkwMTJkZjhkY2JlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMzAgMjI6Mzk6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oCmluZGV4IDRhNjc5NDdjZmI5ZjMuLjdhNTA5YTA1Njk5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oCkBAIC0xMzcsNiAmIzQzOzEzNywxMiBAQCBzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgewogCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKIH07CiAKJiM0MztlbnVtIGVuaWNfdmZfbGlua19zdGF0ZSB7CiYjNDM7CUVOSUNfVkZfTElOS19TVEFURV9VTktOT1dOLAomIzQzOwlFTklDX1ZGX0xJTktfU1RBVEVfRE9XTiwKJiM0MzsJRU5JQ19WRl9MSU5LX1NUQVRFX1VQLAomIzQzO307CiYjNDM7CiAvKiBlbmljX3Jmc19mbHRyX25vZGUgLSByZnMgZmlsdGVyIG5vZGUgaW4gaGFzaCB0YWJsZQogICoJQEBrZXlzOiBJUHY0IDUgdHVwbGUKICAqCUBmbG93X2lkOiBmbG93X2lkIG9mIGNsc2YgZmlsdGVyIHByb3ZpZGVkIGJ5IGtlcm5lbApAQCAtMzEyLDE5ICYjNDM7MzE4LDI1IEBAIHN0cnVjdCBlbmljIHsKIAl1bnNpZ25lZCBpbnQgYWRtaW5fbXNnX2NvdW50OwkvKiBjdXJyZW50IGRlcHRoIG9mIGFkbWluX21zZ19saXN0ICovCiAJdm9pZCAoKmFkbWluX3JxX2hhbmRsZXIpKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpidWYsCiAJCQkJIHVuc2lnbmVkIGludCBsZW4pOwomIzQzOwkvKiBUaGUgUEYgaXMgYXV0aG9yaXRhdGl2ZSBmb3IgYSBWMiBWRiYjMzk7cyBjYXJyaWVyLiAgS2VlcCB0aGUgbGFzdAomIzQzOwkgKiBub3RpZmljYXRpb24gYWNyb3NzIGFuIG9yZGluYXJ5IG5ldGRldiBjbG9zZS9vcGVuIGFuZCBzZXJpYWxpemUgaXQKJiM0MzsJICogYWdhaW5zdCB0aGUgb3Blbi9zdG9wIGNhcnJpZXIgdHJhbnNpdGlvbi4KJiM0MzsJICovCiYjNDM7CXNwaW5sb2NrX3QgdmZfbGlua19zdGF0ZV9sb2NrOwomIzQzOwllbnVtIGVuaWNfdmZfbGlua19zdGF0ZSB2Zl9saW5rX3N0YXRlOwomIzQzOwlib29sIHZmX2xpbmtfcnVubmluZzsKIAogCS8qIE1CT1ggcHJvdG9jb2wgc3RhdGUg4oCUIG1ib3hfbG9jayBzZXJpYWxpemVzIGFkbWluIFdRIHNlbmRzICovCiAJc3RydWN0IG11dGV4IG1ib3hfbG9jazsKIAl1NjQgbWJveF9tc2dfbnVtOwotCS8qIE1CT1ggcmVxdWVzdC1yZXBseSBzdGF0ZS4gIG1ib3hfZXhwZWN0ZWRfcmVwbHkgaXMgd3JpdHRlbiBhbmQKLQkgKiBjbGVhcmVkIGJ5IHRoZSBwcm9jZXNzLWNvbnRleHQgcmVxdWVzdCBoZWxwZXJzIChjYXBhYmlsaXR5L3JlZ2lzdGVyLwotCSAqIHVucmVnaXN0ZXIpIGFuZCBvbmx5IHJlYWQgYnkgdGhlIGFkbWluX21zZ193b3JrIHJlY2VpdmUgaGFuZGxlcnMsIHNvCi0JICogaXQgaXMgYW5ub3RhdGVkIHdpdGggUkVBRF9PTkNFKCkvV1JJVEVfT05DRSgpIHJhdGhlciB0aGFuIGxvY2tlZDoKLQkgKiBvbmx5IG9uZSByZXF1ZXN0IGlzIGluIGZsaWdodCBhdCBhIHRpbWUgKHJlcXVlc3RlcnMgcnVuIHVuZGVyIFJUTkwgb3IKLQkgKiBzaW5nbGUtdGhyZWFkZWQgcHJvYmUvcmVtb3ZlKSwgc28gZWFjaCByZXF1ZXN0IGlzIHNlcmlhbGl6ZWQgYW5kIGl0cwotCSAqIHJlcGx5IGNvbXBsZXRlcyBtYm94X2NvbXAgYmVmb3JlIHRoZSBuZXh0IHJlcXVlc3QgaXMgaXNzdWVkLgomIzQzOwkvKiBNQk9YIHJlcXVlc3QtcmVwbHkgc3RhdGUuICBFeGlzdGluZyByZXF1ZXN0IGNhbGxlcnMgYWxsb3cgb25seSBvbmUKJiM0MzsJICogcmVxdWVzdCBpbiBmbGlnaHQuICBUaGUgc3RhdGUgbG9jayBhcmJpdHJhdGVzIHJlcGx5IGFjY2VwdGFuY2UgYWdhaW5zdAomIzQzOwkgKiB0aW1lb3V0IGludmFsaWRhdGlvbiwgd2hpbGUgbWJveF9jb21wIHB1Ymxpc2hlcyB0aGUgYWNjZXB0ZWQgcmVzdWx0IHRvCiYjNDM7CSAqIHRoZSByZXF1ZXN0ZXIuCiAJICovCiAJc3RydWN0IGNvbXBsZXRpb24gbWJveF9jb21wOwomIzQzOwlzcGlubG9ja190IG1ib3hfc3RhdGVfbG9jazsJLyogcHJvdGVjdHMgZXhwZWN0ZWQgcmVwbHkgc3RhdGUgKi8KJiM0MzsJdTY0IG1ib3hfZXhwZWN0ZWRfbXNnX251bTsKIAl1OCBtYm94X2V4cGVjdGVkX3JlcGx5OwogCWJvb2wgbWJveF9pbml0aWFsaXplZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMKaW5kZXggMGJhZWY3YTEyMGVjNi4uMTRkMTYzN2E0MzQyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jCkBAIC0xODAwLDYgJiM0MzsxODAwLDggQEAgc3RhdGljIGludCBlbmljX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAogCWVuaWNfbm90aWZ5X3RpbWVyX3N0YXJ0KGVuaWMpOwogCWVuaWNfcmZzX3RpbWVyX3N0YXJ0KGVuaWMpOwomIzQzOwlpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkKJiM0MzsJCWVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3NldF9ydW5uaW5nKGVuaWMsIHRydWUpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTE4NTMsNyAmIzQzOzE4NTUsMTAgQEAgc3RhdGljIGludCBlbmljX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlmb3IgKGkgPSAwOyBpICZsdDsgZW5pYy0mZ3Q7cnFfY291bnQ7IGkmIzQzOyYjNDM7KQogCQluYXBpX2Rpc2FibGUoJmFtcDtlbmljLSZndDtuYXBpW2ldKTsKIAotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiYjNDM7CWlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKQomIzQzOwkJZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfc2V0X3J1bm5pbmcoZW5pYywgZmFsc2UpOwomIzQzOwllbHNlCiYjNDM7CQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCWlmICh2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtJmd0O3ZkZXYpID09IFZOSUNfREVWX0lOVFJfTU9ERV9NU0lYKQogCQlmb3IgKGkgPSAwOyBpICZsdDsgZW5pYy0mZ3Q7d3FfY291bnQ7IGkmIzQzOyYjNDM7KQogCQkJbmFwaV9kaXNhYmxlKCZhbXA7ZW5pYy0mZ3Q7bmFwaVtlbmljX2NxX3dxKGVuaWMsIGkpXSk7CkBAIC0yMjAxLDkgJiM0MzsyMjA2LDEwIEBAIHN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fY2hhbl9yZW9wZW4oc3RydWN0IGVuaWMgKmVuaWMpCiB7CiAJaW50IGVycjsKIAotCS8qIEluc3RhbGwgdGhlIE1CT1ggcmVjZWl2ZSBoYW5kbGVyIGFuZCByZXNldCB0aGUgc2VxdWVuY2UgbnVtYmVyCi0JICogYmVmb3JlIG9wZW5pbmcgdGhlIGNoYW5uZWwsIHNvIHRoZSBoYW5kbGVyIGlzIGluIHBsYWNlIGJlZm9yZSB0aGUKLQkgKiBhZG1pbiBpbnRlcnJ1cHQgaXMgdW5tYXNrZWQgYW5kIG5vIGVhcmx5IGNvbXBsZXRpb24gaXMgZHJvcHBlZC4KJiM0MzsJLyogSW5zdGFsbCB0aGUgTUJPWCByZWNlaXZlIGhhbmRsZXIgYW5kIGNsZWFyIHBlbmRpbmcgcmVwbHkgc3RhdGUgYmVmb3JlCiYjNDM7CSAqIG9wZW5pbmcgdGhlIGNoYW5uZWwsIHNvIHRoZSBoYW5kbGVyIGlzIGluIHBsYWNlIGJlZm9yZSB0aGUgYWRtaW4KJiM0MzsJICogaW50ZXJydXB0IGlzIHVubWFza2VkIGFuZCBubyBlYXJseSBjb21wbGV0aW9uIGlzIGRyb3BwZWQuICBLZWVwIHRoZQomIzQzOwkgKiBzZXF1ZW5jZSBudW1iZXIgbW9ub3RvbmljIGFjcm9zcyBjaGFubmVsIGdlbmVyYXRpb25zLgogCSAqLwogCWVuaWNfbWJveF9pbml0KGVuaWMpOwogCkBAIC0yMjE1LDcgJiM0MzsyMjIxLDcgQEAgc3RhdGljIHZvaWQgZW5pY19hZG1pbl9jaGFuX3Jlb3BlbihzdHJ1Y3QgZW5pYyAqZW5pYykKIAkgKiByZWdpc3RyYXRpb24gb3ZlciBhIGRlYWQgY2hhbm5lbC4KIAkgKi8KIAlpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkKLQkJZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCA9IGZhbHNlOwomIzQzOwkJV1JJVEVfT05DRShlbmljLSZndDt2Zl9yZWdpc3RlcmVkLCBmYWxzZSk7CiAKIAllcnIgPSBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihlbmljKTsKIAlpZiAoZXJyKSB7CkBAIC0yMjcxLDYgJiM0MzsyMjc3LDggQEAgc3RhdGljIHZvaWQgZW5pY19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCWVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShlbmljKTsKIAogCWVuaWNfc3RvcChlbmljLSZndDtuZXRkZXYpOwomIzQzOwlpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkKJiM0MzsJCWVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3Jlc2V0KGVuaWMpOwogCiAJZW5pY19kZXZfc29mdF9yZXNldChlbmljKTsKIAllbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7CkBAIC0yMzE1LDYgJiM0MzsyMzIzLDggQEAgc3RhdGljIHZvaWQgZW5pY190eF9oYW5nX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAogCWVuaWNfZGV2X2hhbmdfbm90aWZ5KGVuaWMpOwogCWVuaWNfc3RvcChlbmljLSZndDtuZXRkZXYpOwomIzQzOwlpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkKJiM0MzsJCWVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3Jlc2V0KGVuaWMpOwogCiAJZW5pY19kZXZfaGFuZ19yZXNldChlbmljKTsKIAllbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7CkBAIC0zMDE1LDYgJiM0MzszMDI1LDcgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCWVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWVuaWMtJmd0O25ldGRldiA9IG5ldGRldjsKIAllbmljLSZndDtwZGV2ID0gcGRldjsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtlbmljLSZndDt2Zl9saW5rX3N0YXRlX2xvY2spOwogCiAJLyogU2V0dXAgUENJIHJlc291cmNlcwogCSAqLwpAQCAtMzMzOSw3ICYjNDM7MzM1MCw3IEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAogZXJyX291dF9hZG1pbl9jbG9zZToKIAlpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkgewotCQlpZiAoZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCkgewomIzQzOwkJaWYgKFJFQURfT05DRShlbmljLSZndDt2Zl9yZWdpc3RlcmVkKSkgewogCQkJaW50IHVucmVnX2VyciA9IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKGVuaWMpOwogCiAJCQlpZiAodW5yZWdfZXJyKQpAQCAtMzM5Miw3ICYjNDM7MzQwMyw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQkgKiB0b3VjaGluZyBhIG5ldGRldiB0aGF0IGlzIGJlaW5nIHRvcm4gZG93bi4KIAkJICovCiAJCWlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKSB7Ci0JCQlpZiAoZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCkgewomIzQzOwkJCWlmIChSRUFEX09OQ0UoZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCkpIHsKIAkJCQlpbnQgdW5yZWdfZXJyID0gZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoZW5pYyk7CiAKIAkJCQlpZiAodW5yZWdfZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMKaW5kZXggMmZiMGYxZTJmZjUwMS4uNWM5M2NhNDk1NTJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jCkBAIC0xOCwyMiAmIzQzOzE4LDI1IEBACiAjZGVmaW5lIEVOSUNfTUJPWF9QT0xMX1RJTUVPVVRfVVMJNTAwMDAwMAogI2RlZmluZSBFTklDX01CT1hfUE9MTF9JTlRFUlZBTF9VUwkxMDAKIAotc3RhdGljIHZvaWQgZW5pY19tYm94X2ZpbGxfaGRyKHN0cnVjdCBlbmljICplbmljLCBzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLAotCQkJICAgICAgIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsIHUxNiBtc2dfbGVuKQomIzQzO3N0YXRpYyB2b2lkIGVuaWNfbWJveF9maWxsX2hkcihzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLCB1OCBtc2dfdHlwZSwKJiM0MzsJCQkgICAgICAgdTE2IGRzdF92bmljX2lkLCB1MTYgbXNnX2xlbiwgdTY0IG1zZ19udW0pCiB7CiAJbWVtc2V0KGhkciwgMCwgc2l6ZW9mKCpoZHIpKTsKIAloZHItJmd0O2RzdF92bmljX2lkID0gY3B1X3RvX2xlMTYoZHN0X3ZuaWNfaWQpOwogCWhkci0mZ3Q7bXNnX3R5cGUgPSBtc2dfdHlwZTsKIAloZHItJmd0O21zZ19sZW4gPSBjcHVfdG9fbGUxNihtc2dfbGVuKTsKLQloZHItJmd0O21zZ19udW0gPSBjcHVfdG9fbGU2NCgmIzQzOyYjNDM7ZW5pYy0mZ3Q7bWJveF9tc2dfbnVtKTsKJiM0MzsJaGRyLSZndDttc2dfbnVtID0gY3B1X3RvX2xlNjQobXNnX251bSk7CiB9CiAKLWludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsCi0JCSAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pCiYjNDM7c3RhdGljIGludCBlbmljX21ib3hfc2VuZF9tc2dfaWQoc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLAomIzQzOwkJCQkgdTE2IGRzdF92bmljX2lkLCB2b2lkICpwYXlsb2FkLAomIzQzOwkJCQkgdTE2IHBheWxvYWRfbGVuLCB1NjQgbXNnX251bSwgYm9vbCByZXVzZV9tc2dfbnVtLAomIzQzOwkJCQkgdTggZXhwZWN0ZWRfcmVwbHkpCiB7CiAJc2l6ZV90IHRvdGFsX2xlbiA9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X2hkcikgJiM0MzsgcGF5bG9hZF9sZW47CiAJc3RydWN0IHZuaWNfd3EgKndxID0gJmFtcDtlbmljLSZndDthZG1pbl93cTsKIAlzdHJ1Y3Qgd3FfZW5ldF9kZXNjICpkZXNjOwomIzQzOwlib29sIHJlcGx5X2V4cGVjdGVkID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJdTE2IHZsYW5fdGFnOwpAQCAtNjgsNyAmIzQzOzcxLDIxIEBAIGludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsCiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCWVuaWNfbWJveF9maWxsX2hkcihlbmljLCBidWYsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgdG90YWxfbGVuKTsKJiM0MzsJLyogUmVwbGllcyByZXVzZSB0aGUgaW5pdGlhdGluZyBtZXNzYWdlIG51bWJlci4gIFJlcXVlc3RzIGFuZAomIzQzOwkgKiBub3RpZmljYXRpb25zIGFsbG9jYXRlIGEgbmV3IG9uZS4KJiM0MzsJICovCiYjNDM7CWlmICghcmV1c2VfbXNnX251bSkKJiM0MzsJCW1zZ19udW0gPSAmIzQzOyYjNDM7ZW5pYy0mZ3Q7bWJveF9tc2dfbnVtOwomIzQzOwlpZiAoZXhwZWN0ZWRfcmVwbHkpIHsKJiM0MzsJCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7ZW5pYy0mZ3Q7bWJveF9jb21wKTsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO2VuaWMtJmd0O21ib3hfc3RhdGVfbG9jayk7CiYjNDM7CQllbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5ID0gZXhwZWN0ZWRfcmVwbHk7CiYjNDM7CQllbmljLSZndDttYm94X2V4cGVjdGVkX21zZ19udW0gPSBtc2dfbnVtOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwomIzQzOwkJcmVwbHlfZXhwZWN0ZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVuaWNfbWJveF9maWxsX2hkcihidWYsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgdG90YWxfbGVuLCBtc2dfbnVtKTsKIAlpZiAocGF5bG9hZF9sZW4pIHsKIAkJdm9pZCAqZHN0ID0gYnVmICYjNDM7IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X2hkcik7CiAKQEAgLTEzOSwxOCAmIzQzOzE1Niw2NiBAQCBpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLAogCQkgICAmIzM0O01CT1ggc2VuZCBtc2dfdHlwZSAldSBkc3QgJXUgdmxhbiAldSBlcnIgJWRcbiYjMzQ7LAogCQkgICBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHZsYW5fdGFnLCBlcnIpOwogdW5sb2NrOgomIzQzOwlpZiAoZXJyICZhbXA7JmFtcDsgcmVwbHlfZXhwZWN0ZWQpIHsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO2VuaWMtJmd0O21ib3hfc3RhdGVfbG9jayk7CiYjNDM7CQlpZiAoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSA9PSBleHBlY3RlZF9yZXBseSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9tc2dfbnVtID09IG1zZ19udW0pIHsKJiM0MzsJCQllbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5ID0gMDsKJiM0MzsJCQllbmljLSZndDttYm94X2V4cGVjdGVkX21zZ19udW0gPSAwOwomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZW5pYy0mZ3Q7bWJveF9sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7aW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCwKJiM0MzsJCSAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnX2lkKGVuaWMsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgcGF5bG9hZCwKJiM0MzsJCQkJICAgICBwYXlsb2FkX2xlbiwgMCwgZmFsc2UsIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuaWNfbWJveF9zZW5kX3JlcGx5KHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwKJiM0MzsJCQkJdTE2IGRzdF92bmljX2lkLCB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4sCiYjNDM7CQkJCXU2NCBtc2dfbnVtKQomIzQzO3sKJiM0MzsJcmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZ19pZChlbmljLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHBheWxvYWQsCiYjNDM7CQkJCSAgICAgcGF5bG9hZF9sZW4sIG1zZ19udW0sIHRydWUsIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuaWNfbWJveF92Zl9zZW5kX3JlcXVlc3Qoc3RydWN0IGVuaWMgKmVuaWMsIHU4IHJlcXVlc3RfdHlwZSwKJiM0MzsJCQkJICAgICB1OCBleHBlY3RlZF9yZXBseSwgdm9pZCAqcGF5bG9hZCwKJiM0MzsJCQkJICAgICB1MTYgcGF5bG9hZF9sZW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnX2lkKGVuaWMsIHJlcXVlc3RfdHlwZSwgRU5JQ19NQk9YX0RTVF9QRiwKJiM0MzsJCQkJICAgICBwYXlsb2FkLCBwYXlsb2FkX2xlbiwgMCwgZmFsc2UsCiYjNDM7CQkJCSAgICAgZXhwZWN0ZWRfcmVwbHkpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZW5pY19tYm94X3dhaXRfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tcykKIHsKIAl1bnNpZ25lZCBsb25nIGxlZnQ7CiYjNDM7CWludCBlcnIgPSAwOwogCiAJbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO2VuaWMtJmd0O21ib3hfY29tcCwKIAkJCQkJICAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKSk7CiYjNDM7CWlmIChsZWZ0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIEludmFsaWRhdGUgYSByZXF1ZXN0IHRoYXQgdGhlIGhhbmRsZXIgaGFzIG5vdCBhbHJlYWR5IGFjY2VwdGVkLiAgQQomIzQzOwkgKiBkZWxheWVkIHJlcGx5IGNhbm5vdCBtYXRjaCBhIGxhdGVyIHJlcXVlc3QgYmVjYXVzZSBtZXNzYWdlIG51bWJlcnMgYXJlCiYjNDM7CSAqIG1vbm90b25pYyBhY3Jvc3MgY2hhbm5lbCByZW9wZW4uCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwomIzQzOwlpZiAoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSkgewomIzQzOwkJZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSA9IDA7CiYjNDM7CQllbmljLSZndDttYm94X2V4cGVjdGVkX21zZ19udW0gPSAwOwomIzQzOwkJZXJyID0gLUVUSU1FRE9VVDsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2VuaWMtJmd0O21ib3hfc3RhdGVfbG9jayk7CiAKLQlyZXR1cm4gbGVmdCA/IDAgOiAtRVRJTUVET1VUOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBpbnQgZW5pY19tYm94X3NlbmRfbGlua19zdGF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZmX2lkLCB1MzIgbGlua19zdGF0ZSkKQEAgLTE3OCw4ICYjNDM7MjQzLDggQEAgc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX2NhcGFiaWxpdHkoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZywKIAlyZXBseS5yZXBseS5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNigwKTsKIAlyZXBseS52ZXJzaW9uID0gY3B1X3RvX2xlMzIoRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpOwogCi0JcmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSwgdmZfaWQsCi0JCQkJICAmYW1wO3JlcGx5LCBzaXplb2YocmVwbHkpKTsKJiM0MzsJcmV0dXJuIGVuaWNfbWJveF9zZW5kX3JlcGx5KGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZLCB2Zl9pZCwKJiM0MzsJCQkJICAgICZhbXA7cmVwbHksIHNpemVvZihyZXBseSksIG1zZ19udW0pOwogfQogCiBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZywKQEAgLTIwOCw4ICYjNDM7MjczLDggQEAgc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csCiAJfQogCiAJcmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7Ci0JZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSwgdmZfaWQsCi0JCQkJICZhbXA7cmVwbHksIHNpemVvZihyZXBseSkpOwomIzQzOwllcnIgPSBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFksIHZmX2lkLAomIzQzOwkJCQkgICAmYW1wO3JlcGx5LCBzaXplb2YocmVwbHkpLCBtc2dfbnVtKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0yNTMsOCAmIzQzOzMxOCw4IEBAIHN0YXRpYyBpbnQgZW5pY19tYm94X3BmX2hhbmRsZV91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csCiAJZW5pYy0mZ3Q7dmZfc3RhdGVbdmZfaWRdLnJlZ2lzdGVyZWQgPSBmYWxzZTsKIAogCXJlcGx5LnJlcGx5LnJldF9tYWpvciA9IGNwdV90b19sZTE2KDApOwotCWVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSwgdmZfaWQsCi0JCQkJICZhbXA7cmVwbHksIHNpemVvZihyZXBseSkpOwomIzQzOwllcnIgPSBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSwgdmZfaWQsCiYjNDM7CQkJCSAgICZhbXA7cmVwbHksIHNpemVvZihyZXBseSksIG1zZ19udW0pOwogCiAJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJbmV0ZGV2X2luZm8oZW5pYy0mZ3Q7bmV0ZGV2LApAQCAtMzI0LDEwNSAmIzQzOzM4OSwxMTYgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3BmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLAogCQkJICAgIGhkci0mZ3Q7bXNnX3R5cGUsIHZmX2lkLCBlcnIpOwogfQogCi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX2NhcGFiaWxpdHlfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsCi0JCQkJCQkgdm9pZCAqcGF5bG9hZCkKJiM0MztzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX3JlcGx5KHN0cnVjdCBlbmljICplbmljLCB1OCByZXBseV90eXBlLAomIzQzOwkJCQkgICAgICB2b2lkICpwYXlsb2FkLCB1NjQgbXNnX251bSkKIHsKLQlzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnICpyZXBseSA9IHBheWxvYWQ7Ci0KLQlpZiAoUkVBRF9PTkNFKGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHkpICE9IEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZKSB7CiYjNDM7CXN0cnVjdCBlbmljX21ib3hfZ2VuZXJpY19yZXBseSAqcmVwbHkgPSBwYXlsb2FkOwomIzQzOwl1MTYgcmV0X21ham9yID0gbGUxNl90b19jcHUocmVwbHktJmd0O3JldF9tYWpvcik7CiYjNDM7CXU2NCBleHBlY3RlZF9tc2dfbnVtOwomIzQzOwl1OCBleHBlY3RlZF90eXBlOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwomIzQzOwlleHBlY3RlZF90eXBlID0gZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseTsKJiM0MzsJZXhwZWN0ZWRfbXNnX251bSA9IGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfbXNnX251bTsKJiM0MzsJaWYgKGV4cGVjdGVkX3R5cGUgIT0gcmVwbHlfdHlwZSB8fCBleHBlY3RlZF9tc2dfbnVtICE9IG1zZ19udW0pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZW5pYy0mZ3Q7bWJveF9zdGF0ZV9sb2NrKTsKIAkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAotCQkJICAgICYjMzQ7TUJPWDogc3RhbGUgY2FwYWJpbGl0eSByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXG4mIzM0OywKLQkJCSAgICBSRUFEX09OQ0UoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSkpOwomIzQzOwkJCSAgICAmIzM0O01CT1g6IHN0YWxlIHJlcGx5ICV1LyVsbHUgKGV4cGVjdGVkICV1LyVsbHUpLCBkcm9wXG4mIzM0OywKJiM0MzsJCQkgICAgcmVwbHlfdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyltc2dfbnVtLAomIzQzOwkJCSAgICBleHBlY3RlZF90eXBlLCAodW5zaWduZWQgbG9uZyBsb25nKWV4cGVjdGVkX21zZ19udW0pOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKGxlMTZfdG9fY3B1KHJlcGx5LSZndDtyZXBseS5yZXRfbWFqb3IpID09IDApCi0JCWVuaWMtJmd0O3BmX2NhcF92ZXJzaW9uID0gbGUzMl90b19jcHUocmVwbHktJmd0O3ZlcnNpb24pOwotCWVsc2UKLQkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAotCQkJICAgICYjMzQ7TUJPWDogUEYgcmVqZWN0ZWQgY2FwYWJpbGl0eSByZXF1ZXN0OiAldS8ldVxuJiMzNDssCi0JCQkgICAgbGUxNl90b19jcHUocmVwbHktJmd0O3JlcGx5LnJldF9tYWpvciksCi0JCQkgICAgbGUxNl90b19jcHUocmVwbHktJmd0O3JlcGx5LnJldF9taW5vcikpOwotCWNvbXBsZXRlKCZhbXA7ZW5pYy0mZ3Q7bWJveF9jb21wKTsKLX0KJiM0MzsJaWYgKCFyZXRfbWFqb3IpIHsKJiM0MzsJCXN3aXRjaCAocmVwbHlfdHlwZSkgewomIzQzOwkJY2FzZSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWTogewomIzQzOwkJCXN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cgKmNhcCA9IHBheWxvYWQ7CiAKLXN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfcmVnaXN0ZXJfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsCi0JCQkJCSAgICAgICB2b2lkICpwYXlsb2FkKQotewotCXN0cnVjdCBlbmljX21ib3hfdmZfcmVnaXN0ZXJfcmVwbHlfbXNnICpyZXBseSA9IHBheWxvYWQ7Ci0KLQlpZiAoUkVBRF9PTkNFKGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHkpICE9IEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSkgewotCQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCi0JCQkgICAgJiMzNDtNQk9YOiBzdGFsZSByZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXG4mIzM0OywKLQkJCSAgICBSRUFEX09OQ0UoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSkpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGxlMTZfdG9fY3B1KHJlcGx5LSZndDtyZXBseS5yZXRfbWFqb3IpKSB7Ci0JCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKLQkJCSAgICAmIzM0O01CT1g6IFZGIHJlZ2lzdGVyIHJlamVjdGVkIGJ5IFBGOiAldS8ldVxuJiMzNDssCi0JCQkgICAgbGUxNl90b19jcHUocmVwbHktJmd0O3JlcGx5LnJldF9tYWpvciksCi0JCQkgICAgbGUxNl90b19jcHUocmVwbHktJmd0O3JlcGx5LnJldF9taW5vcikpOwotCX0gZWxzZSB7Ci0JCWVuaWMtJmd0O3ZmX3JlZ2lzdGVyZWQgPSB0cnVlOwomIzQzOwkJCVdSSVRFX09OQ0UoZW5pYy0mZ3Q7cGZfY2FwX3ZlcnNpb24sCiYjNDM7CQkJCSAgIGxlMzJfdG9fY3B1KGNhcC0mZ3Q7dmVyc2lvbikpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJY2FzZSBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFk6CiYjNDM7CQkJV1JJVEVfT05DRShlbmljLSZndDt2Zl9yZWdpc3RlcmVkLCB0cnVlKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFk6CiYjNDM7CQkJV1JJVEVfT05DRShlbmljLSZndDt2Zl9yZWdpc3RlcmVkLCBmYWxzZSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiAJfQomIzQzOwllbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5ID0gMDsKJiM0MzsJZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9tc2dfbnVtID0gMDsKIAljb21wbGV0ZSgmYW1wO2VuaWMtJmd0O21ib3hfY29tcCk7Ci19CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7ZW5pYy0mZ3Q7bWJveF9zdGF0ZV9sb2NrKTsKIAotc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV91bnJlZ2lzdGVyX3JlcGx5KHN0cnVjdCBlbmljICplbmljLAotCQkJCQkJIHZvaWQgKnBheWxvYWQpCi17Ci0Jc3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDsKLQotCWlmIChSRUFEX09OQ0UoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSkgIT0gRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFkpIHsKJiM0MzsJaWYgKHJldF9tYWpvcikKIAkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAotCQkJICAgICYjMzQ7TUJPWDogc3RhbGUgdW5yZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXG4mIzM0OywKLQkJCSAgICBSRUFEX09OQ0UoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSkpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGxlMTZfdG9fY3B1KHJlcGx5LSZndDtyZXBseS5yZXRfbWFqb3IpKSB7Ci0JCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKLQkJCSAgICAmIzM0O01CT1g6IFZGIHVucmVnaXN0ZXIgcmVqZWN0ZWQgYnkgUEY6ICV1LyV1XG4mIzM0OywKLQkJCSAgICBsZTE2X3RvX2NwdShyZXBseS0mZ3Q7cmVwbHkucmV0X21ham9yKSwKLQkJCSAgICBsZTE2X3RvX2NwdShyZXBseS0mZ3Q7cmVwbHkucmV0X21pbm9yKSk7Ci0JfSBlbHNlIHsKLQkJZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCA9IGZhbHNlOwotCX0KLQljb21wbGV0ZSgmYW1wO2VuaWMtJmd0O21ib3hfY29tcCk7CiYjNDM7CQkJICAgICYjMzQ7TUJPWDogUEYgcmVqZWN0ZWQgcmVwbHkgdHlwZSAldTogJXUvJXVcbiYjMzQ7LAomIzQzOwkJCSAgICByZXBseV90eXBlLCByZXRfbWFqb3IsCiYjNDM7CQkJICAgIGxlMTZfdG9fY3B1KHJlcGx5LSZndDtyZXRfbWlub3IpKTsKIH0KIAotc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpwYXlsb2FkKQomIzQzO3N0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfbGlua19zdGF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqcGF5bG9hZCwKJiM0MzsJCQkJCSAgIHU2NCBtc2dfbnVtKQogewogCXN0cnVjdCBlbmljX21ib3hfcGZfbGlua19zdGF0ZV9ub3RpZl9tc2cgKm5vdGlmID0gcGF5bG9hZDsKIAlzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfYWNrX21zZyBhY2sgPSB7fTsKJiM0MzsJdTMyIGxpbmtfc3RhdGUgPSBsZTMyX3RvX2NwdShub3RpZi0mZ3Q7bGlua19zdGF0ZSk7CiAJaW50IGVycjsKIAotCXN3aXRjaCAobGUzMl90b19jcHUobm90aWYtJmd0O2xpbmtfc3RhdGUpKSB7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2VuaWMtJmd0O3ZmX2xpbmtfc3RhdGVfbG9jayk7CiYjNDM7CXN3aXRjaCAobGlua19zdGF0ZSkgewogCWNhc2UgRU5JQ19NQk9YX0xJTktfU1RBVEVfRU5BQkxFOgotCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCWVuaWMtJmd0O3ZmX2xpbmtfc3RhdGUgPSBFTklDX1ZGX0xJTktfU1RBVEVfVVA7CiYjNDM7CQlpZiAoZW5pYy0mZ3Q7dmZfbGlua19ydW5uaW5nICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhbmV0aWZfY2Fycmllcl9vayhlbmljLSZndDtuZXRkZXYpKQogCQkJbmV0aWZfY2Fycmllcl9vbihlbmljLSZndDtuZXRkZXYpOwogCQluZXRkZXZfZGJnKGVuaWMtJmd0O25ldGRldiwgJiMzNDtNQk9YOiBsaW5rIHN0YXRlIC0mZ3Q7IFVQXG4mIzM0Oyk7CiAJCWJyZWFrOwogCWNhc2UgRU5JQ19NQk9YX0xJTktfU1RBVEVfRElTQUJMRToKLQkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCWVuaWMtJmd0O3ZmX2xpbmtfc3RhdGUgPSBFTklDX1ZGX0xJTktfU1RBVEVfRE9XTjsKJiM0MzsJCWlmIChlbmljLSZndDt2Zl9saW5rX3J1bm5pbmcgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSkKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtJmd0O25ldGRldik7CiAJCW5ldGRldl9kYmcoZW5pYy0mZ3Q7bmV0ZGV2LCAmIzM0O01CT1g6IGxpbmsgc3RhdGUgLSZndDsgRE9XTlxuJiMzNDspOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsICYjMzQ7TUJPWDogdW5rbm93biBsaW5rIHN0YXRlICV1XG4mIzM0OywKLQkJCSAgICBsZTMyX3RvX2NwdShub3RpZi0mZ3Q7bGlua19zdGF0ZSkpOwomIzQzOwkJCSAgICBsaW5rX3N0YXRlKTsKIAkJYWNrLmFjay5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNihFTklDX01CT1hfRVJSX0dFTkVSSUMpOwogCQlicmVhazsKIAl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7ZW5pYy0mZ3Q7dmZfbGlua19zdGF0ZV9sb2NrKTsKIAotCWVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0ssCi0JCQkJIEVOSUNfTUJPWF9EU1RfUEYsICZhbXA7YWNrLCBzaXplb2YoYWNrKSk7CiYjNDM7CWVyciA9IGVuaWNfbWJveF9zZW5kX3JlcGx5KGVuaWMsIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX0FDSywKJiM0MzsJCQkJICAgRU5JQ19NQk9YX0RTVF9QRiwgJmFtcDthY2ssIHNpemVvZihhY2spLCBtc2dfbnVtKTsKIAlpZiAoZXJyICZhbXA7JmFtcDsgbmV0X3JhdGVsaW1pdCgpKQogCQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiAJCQkgICAgJiMzNDtNQk9YOiBmYWlsZWQgdG8gc2VuZCBsaW5rIHN0YXRlIEFDSzogJWRcbiYjMzQ7LCBlcnIpOwogfQogCiYjNDM7dm9pZCBlbmljX21ib3hfdmZfbGlua19zdGF0ZV9yZXNldChzdHJ1Y3QgZW5pYyAqZW5pYykKJiM0Mzt7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2VuaWMtJmd0O3ZmX2xpbmtfc3RhdGVfbG9jayk7CiYjNDM7CWVuaWMtJmd0O3ZmX2xpbmtfc3RhdGUgPSBFTklDX1ZGX0xJTktfU1RBVEVfVU5LTk9XTjsKJiM0MzsJaWYgKGVuaWMtJmd0O3ZmX2xpbmtfcnVubmluZyAmYW1wOyZhbXA7IG5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCW5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtJmd0O25ldGRldik7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7ZW5pYy0mZ3Q7dmZfbGlua19zdGF0ZV9sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBlbmljX21ib3hfdmZfbGlua19zdGF0ZV9zZXRfcnVubmluZyhzdHJ1Y3QgZW5pYyAqZW5pYywgYm9vbCBydW5uaW5nKQomIzQzO3sKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7ZW5pYy0mZ3Q7dmZfbGlua19zdGF0ZV9sb2NrKTsKJiM0MzsJZW5pYy0mZ3Q7dmZfbGlua19ydW5uaW5nID0gcnVubmluZzsKJiM0MzsJaWYgKHJ1bm5pbmcgJmFtcDsmYW1wOyBlbmljLSZndDt2Zl9saW5rX3N0YXRlID09IEVOSUNfVkZfTElOS19TVEFURV9VUCkgewomIzQzOwkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGVuaWMtJmd0O25ldGRldikpCiYjNDM7CQkJbmV0aWZfY2Fycmllcl9vbihlbmljLSZndDtuZXRkZXYpOwomIzQzOwl9IGVsc2UgaWYgKG5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSkgewomIzQzOwkJbmV0aWZfY2Fycmllcl9vZmYoZW5pYy0mZ3Q7bmV0ZGV2KTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2VuaWMtJmd0O3ZmX2xpbmtfc3RhdGVfbG9jayk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgZW5pY19tYm94X3ZmX3BheWxvYWRfb2soc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLAogCQkJCSAgICB1MTYgcGF5bG9hZF9sZW4sIHNpemVfdCBtaW5fbGVuKQogewpAQCAtNDM5LDYgJiM0Mzs1MTUsOCBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsCiAJCQkJICAgICBzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLCB2b2lkICpwYXlsb2FkLAogCQkJCSAgICAgdTE2IHBheWxvYWRfbGVuKQogewomIzQzOwl1NjQgbXNnX251bSA9IGxlNjRfdG9fY3B1KGhkci0mZ3Q7bXNnX251bSk7CiYjNDM7CiAJc3dpdGNoIChoZHItJmd0O21zZ190eXBlKSB7CiAJY2FzZSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWTogewogCQlzaXplX3QgZXhwID0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cpOwpAQCAtNDQ2LDcgJiM0Mzs1MjQsNyBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsCiAJCWlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLSZndDttc2dfdHlwZSwKIAkJCQkJICAgICBwYXlsb2FkX2xlbiwgZXhwKSkKIAkJCXJldHVybjsKLQkJZW5pY19tYm94X3ZmX2hhbmRsZV9jYXBhYmlsaXR5X3JlcGx5KGVuaWMsIHBheWxvYWQpOwomIzQzOwkJZW5pY19tYm94X3ZmX2hhbmRsZV9yZXBseShlbmljLCBoZHItJmd0O21zZ190eXBlLCBwYXlsb2FkLCBtc2dfbnVtKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOiB7CkBAIC00NTUsNyAmIzQzOzUzMyw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywKIAkJaWYgKCFlbmljX21ib3hfdmZfcGF5bG9hZF9vayhlbmljLCBoZHItJmd0O21zZ190eXBlLAogCQkJCQkgICAgIHBheWxvYWRfbGVuLCBleHApKQogCQkJcmV0dXJuOwotCQllbmljX21ib3hfdmZfaGFuZGxlX3JlZ2lzdGVyX3JlcGx5KGVuaWMsIHBheWxvYWQpOwomIzQzOwkJZW5pY19tYm94X3ZmX2hhbmRsZV9yZXBseShlbmljLCBoZHItJmd0O21zZ190eXBlLCBwYXlsb2FkLCBtc2dfbnVtKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFk6IHsKQEAgLTQ2NCw3ICYjNDM7NTQyLDcgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLAogCQlpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci0mZ3Q7bXNnX3R5cGUsCiAJCQkJCSAgICAgcGF5bG9hZF9sZW4sIGV4cCkpCiAJCQlyZXR1cm47Ci0JCWVuaWNfbWJveF92Zl9oYW5kbGVfdW5yZWdpc3Rlcl9yZXBseShlbmljLCBwYXlsb2FkKTsKJiM0MzsJCWVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoZW5pYywgaGRyLSZndDttc2dfdHlwZSwgcGF5bG9hZCwgbXNnX251bSk7CiAJCWJyZWFrOwogCX0KIAljYXNlIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX05PVElGOiB7CkBAIC00NzMsNyAmIzQzOzU1MSw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywKIAkJaWYgKCFlbmljX21ib3hfdmZfcGF5bG9hZF9vayhlbmljLCBoZHItJmd0O21zZ190eXBlLAogCQkJCQkgICAgIHBheWxvYWRfbGVuLCBleHApKQogCQkJcmV0dXJuOwotCQllbmljX21ib3hfdmZfaGFuZGxlX2xpbmtfc3RhdGUoZW5pYywgcGF5bG9hZCk7CiYjNDM7CQllbmljX21ib3hfdmZfaGFuZGxlX2xpbmtfc3RhdGUoZW5pYywgcGF5bG9hZCwgbXNnX251bSk7CiAJCWJyZWFrOwogCX0KIAlkZWZhdWx0OgpAQCAtNTQyLDMyICYjNDM7NjIwLDMxIEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF9yZWN2X2hhbmRsZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZiwKIGludCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYykKIHsKIAlzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfbXNnIHJlcSA9IHt9OwomIzQzOwl1MzIgdmVyc2lvbjsKIAlpbnQgZXJyOwogCi0JZW5pYy0mZ3Q7cGZfY2FwX3ZlcnNpb24gPSAwOwotCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7ZW5pYy0mZ3Q7bWJveF9jb21wKTsKLQlXUklURV9PTkNFKGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHksIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZKTsKJiM0MzsJV1JJVEVfT05DRShlbmljLSZndDtwZl9jYXBfdmVyc2lvbiwgMCk7CiAJcmVxLnZlcnNpb24gPSBjcHVfdG9fbGUzMihFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSk7CiAKLQllcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVRVUVTVCwKLQkJCQkgRU5JQ19NQk9YX0RTVF9QRiwgJmFtcDtyZXEsIHNpemVvZihyZXEpKTsKLQlpZiAoZXJyKSB7Ci0JCVdSSVRFX09OQ0UoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSwgMCk7CiYjNDM7CWVyciA9IGVuaWNfbWJveF92Zl9zZW5kX3JlcXVlc3QoZW5pYywKJiM0MzsJCQkJCUVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QsCiYjNDM7CQkJCQlFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSwKJiM0MzsJCQkJCSZhbXA7cmVxLCBzaXplb2YocmVxKSk7CiYjNDM7CWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JfQogCiAJZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7Ci0JV1JJVEVfT05DRShlbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5LCAwKTsKJiM0MzsJdmVyc2lvbiA9IFJFQURfT05DRShlbmljLSZndDtwZl9jYXBfdmVyc2lvbik7CiAJaWYgKGVycikgewogCQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiAJCQkgICAgJiMzNDtNQk9YOiBubyBjYXBhYmlsaXR5IHJlcGx5IGZyb20gUEZcbiYjMzQ7KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAoZW5pYy0mZ3Q7cGZfY2FwX3ZlcnNpb24gJmx0OyBFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSkgewomIzQzOwlpZiAodmVyc2lvbiAmbHQ7IEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8xKSB7CiAJCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKIAkJCSAgICAmIzM0O01CT1g6IFBGIHJlamVjdGVkIGNhcGFiaWxpdHkgcmVxdWVzdCBvciByZXBvcnRlZCB1bnN1cHBvcnRlZCB2ZXJzaW9uICV1XG4mIzM0OywKLQkJCSAgICBlbmljLSZndDtwZl9jYXBfdmVyc2lvbik7CiYjNDM7CQkJICAgIHZlcnNpb24pOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC01NzYsMjggJiM0Mzs2NTMsMjUgQEAgaW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKQogCiBpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKQogewomIzQzOwlib29sIHJlZ2lzdGVyZWQ7CiAJaW50IGVycjsKIAotCWVuaWMtJmd0O3ZmX3JlZ2lzdGVyZWQgPSBmYWxzZTsKLQlyZWluaXRfY29tcGxldGlvbigmYW1wO2VuaWMtJmd0O21ib3hfY29tcCk7Ci0JV1JJVEVfT05DRShlbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5LCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFkpOwomIzQzOwlXUklURV9PTkNFKGVuaWMtJmd0O3ZmX3JlZ2lzdGVyZWQsIGZhbHNlKTsKIAotCWVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVRVUVTVCwKLQkJCQkgRU5JQ19NQk9YX0RTVF9QRiwgTlVMTCwgMCk7Ci0JaWYgKGVycikgewotCQlXUklURV9PTkNFKGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHksIDApOwomIzQzOwllcnIgPSBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVFVRVNULAomIzQzOwkJCQkJRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZLCBOVUxMLCAwKTsKJiM0MzsJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQl9CiAKIAllcnIgPSBlbmljX21ib3hfd2FpdF9yZXBseShlbmljLCAzMDAwKTsKLQlXUklURV9PTkNFKGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHksIDApOwomIzQzOwlyZWdpc3RlcmVkID0gUkVBRF9PTkNFKGVuaWMtJmd0O3ZmX3JlZ2lzdGVyZWQpOwogCWlmIChlcnIpIHsKIAkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAogCQkJICAgICYjMzQ7TUJPWDogVkYgcmVnaXN0cmF0aW9uIHdpdGggUEYgdGltZWQgb3V0XG4mIzM0Oyk7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKCFlbmljLSZndDt2Zl9yZWdpc3RlcmVkKQomIzQzOwlpZiAoIXJlZ2lzdGVyZWQpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcmV0dXJuIDA7CkBAIC02MDUsNDMgJiM0Mzs2NzksNDggQEAgaW50IGVuaWNfbWJveF92Zl9yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYykKIAogaW50IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKQogewomIzQzOwlib29sIHJlZ2lzdGVyZWQ7CiAJaW50IGVycjsKIAotCWlmICghZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCkKJiM0MzsJaWYgKCFSRUFEX09OQ0UoZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCkpCiAJCXJldHVybiAwOwogCi0JcmVpbml0X2NvbXBsZXRpb24oJmFtcDtlbmljLSZndDttYm94X2NvbXApOwotCVdSSVRFX09OQ0UoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSwgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFkpOwotCi0JZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUVVFU1QsCi0JCQkJIEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApOwotCWlmIChlcnIpIHsKLQkJV1JJVEVfT05DRShlbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5LCAwKTsKJiM0MzsJZXJyID0gZW5pY19tYm94X3ZmX3NlbmRfcmVxdWVzdChlbmljLAomIzQzOwkJCQkJRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVRVUVTVCwKJiM0MzsJCQkJCUVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUExZLAomIzQzOwkJCQkJTlVMTCwgMCk7CiYjNDM7CWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JfQogCiAJZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7Ci0JV1JJVEVfT05DRShlbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5LCAwKTsKJiM0MzsJcmVnaXN0ZXJlZCA9IFJFQURfT05DRShlbmljLSZndDt2Zl9yZWdpc3RlcmVkKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCWlmIChlbmljLSZndDt2Zl9yZWdpc3RlcmVkKQomIzQzOwlpZiAocmVnaXN0ZXJlZCkKIAkJcmV0dXJuIC1FQUNDRVM7CiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpCiB7Ci0JLyogbWJveF9sb2NrIGFuZCBtYm94X2NvbXAgbXVzdCBiZSBpbml0aWFsaXplZCBleGFjdGx5IG9uY2UgcGVyCiYjNDM7CWJvb2wgcmVpbml0ID0gZW5pYy0mZ3Q7bWJveF9pbml0aWFsaXplZDsKJiM0MzsKJiM0MzsJLyogTUJPWCBsb2NrcyBhbmQgbWJveF9jb21wIG11c3QgYmUgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlIHBlcgogCSAqIGRldmljZSBsaWZldGltZTsgdGhlIFBGIHNyaW92X2NvbmZpZ3VyZSBwYXRoIGNhbiByZS1lbnRlciB0aGlzCiAJICogb24gZWFjaCBlbmFibGUgY3ljbGUgd2hlcmUgdGhlc2UgcHJpbWl0aXZlcyBhcmUgYWxyZWFkeSBzZXQgdXAuCiAJICovCi0JaWYgKCFlbmljLSZndDttYm94X2luaXRpYWxpemVkKSB7CiYjNDM7CWlmICghcmVpbml0KSB7CiAJCW11dGV4X2luaXQoJmFtcDtlbmljLSZndDttYm94X2xvY2spOwogCQlpbml0X2NvbXBsZXRpb24oJmFtcDtlbmljLSZndDttYm94X2NvbXApOwomIzQzOwkJc3Bpbl9sb2NrX2luaXQoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwomIzQzOwkJZW5pYy0mZ3Q7bWJveF9tc2dfbnVtID0gMDsKIAkJZW5pYy0mZ3Q7bWJveF9pbml0aWFsaXplZCA9IHRydWU7CiAJfSBlbHNlIHsKIAkJcmVpbml0X2NvbXBsZXRpb24oJmFtcDtlbmljLSZndDttYm94X2NvbXApOwogCX0KLQllbmljLSZndDttYm94X21zZ19udW0gPSAwOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwomIzQzOwllbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5ID0gMDsKJiM0MzsJZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9tc2dfbnVtID0gMDsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwogCWVuaWMtJmd0O2FkbWluX3JxX2hhbmRsZXIgPSBlbmljX21ib3hfcmVjdl9oYW5kbGVyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmgKaW5kZXggMTVlMzBlZTJiMGVkOS4uNjA0MDliYWQyZjI4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5oCkBAIC04OCw2ICYjNDM7ODgsOCBAQCB2b2lkIGVuaWNfbWJveF9pbml0KHN0cnVjdCBlbmljICplbmljKTsKIGludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsCiAJCSAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pOwogaW50IGVuaWNfbWJveF9zZW5kX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHUxNiB2Zl9pZCwgdTMyIGxpbmtfc3RhdGUpOwomIzQzO3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfcmVzZXQoc3RydWN0IGVuaWMgKmVuaWMpOwomIzQzO3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfc2V0X3J1bm5pbmcoc3RydWN0IGVuaWMgKmVuaWMsIGJvb2wgcnVubmluZyk7CiBpbnQgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpOwogaW50IGVuaWNfbWJveF92Zl9yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYyk7CiBpbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAyMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcwMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBXb3J0aEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCB0byB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljLypgKSBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCBmYWxscyBpbnRvIGNlcnRhaW4gY2F0ZWdvcmllcy4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlcyBhZmZlY3QgY29kZSB0aGF0JiMzOTtzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuCgpUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBleGNsdWRlOgoKKiAgIFVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoqICAgVmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgZm9yIGhhcmR3YXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCiogICBUZWFyZG93biBjYWxsYmFja3MgbGlrZSBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYC4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IElzIHRoZSBDaXNjbyBWSUMgKGVuaWMpIGVtdWxhdGVkIGluIFFFTVU/IEkga25vdyB0aGUgdXN1YWwgc3VzcGVjdHM6IGUxMDAwLCB2aXJ0aW8tbmV0LCB0aG9zZSBhcmUgc3RhbmRhcmQuIEJ1dCBgZW5pY2A/IEkgZG9uJiMzOTt0IHRoaW5rIHNvLiBJIG5lZWQgdG8gYmUgc3VyZS4gQSBxdWljayBzZWFyY2ggb2YgdGhlIFFFTVUgZG9jdW1lbnRhdGlvbiBjb25maXJtcyBteSBzdXNwaWNpb24uIEl0IGRvZXNuJiMzOTt0IGVtdWxhdGUgQ2lzY28gVklDLiBTbywgaXQgYXBwZWFycyB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBhY2N1cmF0ZSBhbmQgc2hvdWxkIGd1aWRlIHVzLCBpZiB3ZSBoYXZlIHRoZSBjb3JyZWN0IGFuYWx5c2lzIG9mIHRoZSBkZXZpY2UuCgpUbyBiZSAxMDAlIHN1cmUsIGFuZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZHJpdmVyIHNpdHMgaW4gdGhlIGtlcm5lbCwgSSYjMzk7bGwgZG8gYSBxdWljayBgS2NvbmZpZ2Agc2VhcmNoIGZvciBgZW5pY2AgdG8gdmVyaWZ5IHRoZSBoYXJkd2FyZSBpdCBkcml2ZXMuIElmIGl0ICppcyogdmVuZG9yIHNwZWNpZmljIGFuZCBkZXBlbmRlbnQgb24gYSBwaHlzaWNhbCBjYXJkLCB0aGVuIGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDIyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFTklDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnOjY6Y29uZmlnIEVOSUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7Q2lzY28gVklDIEV0aGVybmV0IE5JQyBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MjAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgbGluZToKCioqRGl2aW5nIGludG8gdGhlIENpc2NvIEVOSUMgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmVnYXJkaW5nIHRoZSBDaXNjbyBFTklDIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWdgLiBSaWdodCwgdGhpcyBpcyB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgZHJpdmVyJiMzOTtzIGJ1aWxkLXRpbWUgb3B0aW9ucyB3aWxsIGJlIGRlZmluZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYWxsIHRoZSB1c3VhbCBzdXNwZWN0czogbW9kdWxlIGRlcGVuZGVuY2llcywgZmVhdHVyZSBmbGFncyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGNlcnRhaW4gZnVuY3Rpb25hbGl0aWVzIChsaWtlIFNSLUlPViwgcGVyaGFwcywgb3Igc3BlY2lmaWMgb2ZmbG9hZHMpLCBkZWJ1Z2dpbmcgb3B0aW9ucywgYW5kIG1heWJlIGV2ZW4gc29tZSBwZXJmb3JtYW5jZSB0dW5pbmcga25vYnMuIEtub3dpbmcgdGhlIHNwZWNpZmljIEVOSUMgaGFyZHdhcmUgcmV2aXNpb24gaXMga2V5IGhlcmUsIEkgd2lsbCBjaGVjayB0aGUgYXBwcm9wcmlhdGUgS2NvbmZpZyBmaWxlIGZvciBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLCB0b28uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBzZXQuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGZsZXhpYmlsaXR5IHRoZSBkcml2ZXIgb2ZmZXJzIGFuZCB3aGF0IGNvbXBpbGUtdGltZSBkZWNpc2lvbnMgYXJlIGF2YWlsYWJsZSB0byBvcHRpbWl6ZSBpdCBmb3IgYSBwYXJ0aWN1bGFyIGRlcGxveW1lbnQgc2NlbmFyaW8uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbi4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDaXNjbyBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgRU5JQ1xuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q2lzY28gVklDIEV0aGVybmV0IE5JQyBTdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIFBDSVxuICAgOTpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIHRoZSBDaXNjbyBWSUMgRXRoZXJuZXQgY2FyZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAyMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk0NQoJCQkJCQkJb3V0cHV0OiA5NQoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIHJpZ2h0LiBJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGUgY3JpdGVyaWEgZm9yIGZ1enppbmcuIEkgaGF2ZSBhIGZlZWxpbmcgdGhpcyBpcyBhIGNsYXNzaWMgY2FzZSB3aGVyZSB3ZSBjYW4mIzM5O3QgcmVsaWFibHkgZnV6ei4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZXNlIHR3byBydWxlcyBhZ2FpbjogRmlyc3RseSwgY29kZSBwYXRocyB0aGF0IGFyZSBpbmhlcmVudGx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uIG9mIGhhcmR3YXJlLiBTZWNvbmRseSwgY29kZSB0aGF0IGxpdmVzIHdpdGhpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycywgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgb3IgYGFtZGdwdWAsIHNwZWNpZmljYWxseSBjb2RlIHRoYXQgbmVlZHMgcmVhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLgoKVGhlIGRyaXZlciB3ZSBhcmUgbG9va2luZyBhdCBpcyB0aGUgYGVuaWNgIGRyaXZlciwgd2hpY2ggZnJvbSBteSBleHBlcmllbmNlLCBoYW5kbGVzIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgc3VwcG9ydC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGV0aGVybmV0IGRyaXZlciBmb3IgQ2lzY28gVUNTIGFuZCBDaXNjbyBWSUMgaGFyZHdhcmUsIGluY2x1ZGluZyBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMuIEFuZCBjcml0aWNhbGx5LCBpdCAqbmVlZHMqIHBoeXNpY2FsIENpc2NvIFZJQyBoYXJkd2FyZSwgc29tZXRoaW5nIHRoYXQmIzM5O3Mgbm90IGdvaW5nIHRvIGJlIGF2YWlsYWJsZSBpbiBRRU1VIG9yIGFueSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LgoKUmlnaHQsIHNvIHRoYXQmIzM5O3MgcHJldHR5IGNsZWFyLiBUaGlzIHBhdGNoIGZhbGxzIHBlcmZlY3RseSB1bmRlciAqYm90aCogb2YgdGhvc2UgZGlzcXVhbGlmeWluZyBydWxlcywgcmVhbGx5LiBJdCYjMzk7cyB2ZW5kb3Itc3BlY2lmaWMsIGhhcmR3YXJlLWRlcGVuZGVudCBQQ0llIGRyaXZlciBjb2RlLCBhbmQgaW5oZXJlbnRseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbi4gVGhpcyBtYWtlcyB0aGUgYW5zd2VyIHZlcnkgc2ltcGxlLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBoYXMgdG8gYmUgYGZhbHNlYC4KCkxldCBtZSB0cmlwbGUtY2hlY2sgYWxsIHRoZSBwYXJhbWV0ZXJzIGp1c3QgdG8gYmUgY2VydGFpbi4gSSB3YW50IHRvIGJlIDEwMCUgYWNjdXJhdGUuCgoqICAgYFdvcnRoRnV6emluZzogZmFsc2VgIC0gVGhhdCYjMzk7cyBjb3JyZWN0LgoqICAgYEZvY3VzU3ltYm9sczogW11gIC0gTWFrZXMgc2Vuc2UsIG5vIHNwZWNpZmljIHN5bWJvbHMgdG8gdGFyZ2V0LgoqICAgYEVuYWJsZUNvbmZpZ3M6IFtdYCAtIE5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4KKiAgIGBSZWFzb25pbmc6IENvbmNpc2UgZXhwbGFuYXRpb25gIC0gVGhlIHJlYXNvbmluZyBpcyBhY2N1cmF0ZSBhbmQgY29uY2lzZS4KCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSYjMzk7bSBnb2luZyB0byBjb21taXQgdGhpcyBhbmQgY2FsbCBpdCBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDIyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXIgcmVxdWlyaW5nIGRlZGljYXRlZCBDaXNjbyBWSUMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBUaGVyZWZvcmUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXIgcmVxdWlyaW5nIGRlZGljYXRlZCBDaXNjbyBWSUMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBUaGVyZWZvcmUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAyMjozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzBUMjI6Mzk6MTMuNDMyNjM0Nzg4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MzAyMDI1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciByZXF1aXJpbmcgZGVkaWNhdGVkIENpc2NvIFZJQyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZXJlZm9yZSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQyMjozOToxMy40MzI2Mzk0MjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTEzODM1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZDFmZWI1ZDE4YTU4ZmFhNjVmYWNjMGIzZWY1OTkwMTJkZjhkY2JlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDMwIDIyOjM5OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmhcXG5pbmRleCA0YTY3OTQ3Y2ZiOWYzLi43YTUwOWEwNTY5OTAwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmhcXG5AQCAtMTM3LDYgKzEzNywxMiBAQCBzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUge1xcbiBcXHR1OCBtYWNfYWRkcltFVEhfQUxFTl07XFxuIH07XFxuIFxcbitlbnVtIGVuaWNfdmZfbGlua19zdGF0ZSB7XFxuK1xcdEVOSUNfVkZfTElOS19TVEFURV9VTktOT1dOLFxcbitcXHRFTklDX1ZGX0xJTktfU1RBVEVfRE9XTixcXG4rXFx0RU5JQ19WRl9MSU5LX1NUQVRFX1VQLFxcbit9O1xcbitcXG4gLyogZW5pY19yZnNfZmx0cl9ub2RlIC0gcmZzIGZpbHRlciBub2RlIGluIGhhc2ggdGFibGVcXG4gICpcXHRAQGtleXM6IElQdjQgNSB0dXBsZVxcbiAgKlxcdEBmbG93X2lkOiBmbG93X2lkIG9mIGNsc2YgZmlsdGVyIHByb3ZpZGVkIGJ5IGtlcm5lbFxcbkBAIC0zMTIsMTkgKzMxOCwyNSBAQCBzdHJ1Y3QgZW5pYyB7XFxuIFxcdHVuc2lnbmVkIGludCBhZG1pbl9tc2dfY291bnQ7XFx0LyogY3VycmVudCBkZXB0aCBvZiBhZG1pbl9tc2dfbGlzdCAqL1xcbiBcXHR2b2lkICgqYWRtaW5fcnFfaGFuZGxlcikoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBsZW4pO1xcbitcXHQvKiBUaGUgUEYgaXMgYXV0aG9yaXRhdGl2ZSBmb3IgYSBWMiBWRidzIGNhcnJpZXIuICBLZWVwIHRoZSBsYXN0XFxuK1xcdCAqIG5vdGlmaWNhdGlvbiBhY3Jvc3MgYW4gb3JkaW5hcnkgbmV0ZGV2IGNsb3NlL29wZW4gYW5kIHNlcmlhbGl6ZSBpdFxcbitcXHQgKiBhZ2FpbnN0IHRoZSBvcGVuL3N0b3AgY2FycmllciB0cmFuc2l0aW9uLlxcbitcXHQgKi9cXG4rXFx0c3BpbmxvY2tfdCB2Zl9saW5rX3N0YXRlX2xvY2s7XFxuK1xcdGVudW0gZW5pY192Zl9saW5rX3N0YXRlIHZmX2xpbmtfc3RhdGU7XFxuK1xcdGJvb2wgdmZfbGlua19ydW5uaW5nO1xcbiBcXG4gXFx0LyogTUJPWCBwcm90b2NvbCBzdGF0ZSDigJQgbWJveF9sb2NrIHNlcmlhbGl6ZXMgYWRtaW4gV1Egc2VuZHMgKi9cXG4gXFx0c3RydWN0IG11dGV4IG1ib3hfbG9jaztcXG4gXFx0dTY0IG1ib3hfbXNnX251bTtcXG4tXFx0LyogTUJPWCByZXF1ZXN0LXJlcGx5IHN0YXRlLiAgbWJveF9leHBlY3RlZF9yZXBseSBpcyB3cml0dGVuIGFuZFxcbi1cXHQgKiBjbGVhcmVkIGJ5IHRoZSBwcm9jZXNzLWNvbnRleHQgcmVxdWVzdCBoZWxwZXJzIChjYXBhYmlsaXR5L3JlZ2lzdGVyL1xcbi1cXHQgKiB1bnJlZ2lzdGVyKSBhbmQgb25seSByZWFkIGJ5IHRoZSBhZG1pbl9tc2dfd29yayByZWNlaXZlIGhhbmRsZXJzLCBzb1xcbi1cXHQgKiBpdCBpcyBhbm5vdGF0ZWQgd2l0aCBSRUFEX09OQ0UoKS9XUklURV9PTkNFKCkgcmF0aGVyIHRoYW4gbG9ja2VkOlxcbi1cXHQgKiBvbmx5IG9uZSByZXF1ZXN0IGlzIGluIGZsaWdodCBhdCBhIHRpbWUgKHJlcXVlc3RlcnMgcnVuIHVuZGVyIFJUTkwgb3JcXG4tXFx0ICogc2luZ2xlLXRocmVhZGVkIHByb2JlL3JlbW92ZSksIHNvIGVhY2ggcmVxdWVzdCBpcyBzZXJpYWxpemVkIGFuZCBpdHNcXG4tXFx0ICogcmVwbHkgY29tcGxldGVzIG1ib3hfY29tcCBiZWZvcmUgdGhlIG5leHQgcmVxdWVzdCBpcyBpc3N1ZWQuXFxuK1xcdC8qIE1CT1ggcmVxdWVzdC1yZXBseSBzdGF0ZS4gIEV4aXN0aW5nIHJlcXVlc3QgY2FsbGVycyBhbGxvdyBvbmx5IG9uZVxcbitcXHQgKiByZXF1ZXN0IGluIGZsaWdodC4gIFRoZSBzdGF0ZSBsb2NrIGFyYml0cmF0ZXMgcmVwbHkgYWNjZXB0YW5jZSBhZ2FpbnN0XFxuK1xcdCAqIHRpbWVvdXQgaW52YWxpZGF0aW9uLCB3aGlsZSBtYm94X2NvbXAgcHVibGlzaGVzIHRoZSBhY2NlcHRlZCByZXN1bHQgdG9cXG4rXFx0ICogdGhlIHJlcXVlc3Rlci5cXG4gXFx0ICovXFxuIFxcdHN0cnVjdCBjb21wbGV0aW9uIG1ib3hfY29tcDtcXG4rXFx0c3BpbmxvY2tfdCBtYm94X3N0YXRlX2xvY2s7XFx0LyogcHJvdGVjdHMgZXhwZWN0ZWQgcmVwbHkgc3RhdGUgKi9cXG4rXFx0dTY0IG1ib3hfZXhwZWN0ZWRfbXNnX251bTtcXG4gXFx0dTggbWJveF9leHBlY3RlZF9yZXBseTtcXG4gXFx0Ym9vbCBtYm94X2luaXRpYWxpemVkO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmNcXG5pbmRleCAwYmFlZjdhMTIwZWM2Li4xNGQxNjM3YTQzNDJlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jXFxuQEAgLTE4MDAsNiArMTgwMCw4IEBAIHN0YXRpYyBpbnQgZW5pY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcbiBcXHRlbmljX25vdGlmeV90aW1lcl9zdGFydChlbmljKTtcXG4gXFx0ZW5pY19yZnNfdGltZXJfc3RhcnQoZW5pYyk7XFxuK1xcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKVxcbitcXHRcXHRlbmljX21ib3hfdmZfbGlua19zdGF0ZV9zZXRfcnVubmluZyhlbmljLCB0cnVlKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTg1Myw3ICsxODU1LDEwIEBAIHN0YXRpYyBpbnQgZW5pY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlbmljLVxcdTAwM2VycV9jb3VudDsgaSsrKVxcbiBcXHRcXHRuYXBpX2Rpc2FibGUoXFx1MDAyNmVuaWMtXFx1MDAzZW5hcGlbaV0pO1xcbiBcXG4tXFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcXG4rXFx0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpXFxuK1xcdFxcdGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3NldF9ydW5uaW5nKGVuaWMsIGZhbHNlKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xcbiBcXHRpZiAodm5pY19kZXZfZ2V0X2ludHJfbW9kZShlbmljLVxcdTAwM2V2ZGV2KSA9PSBWTklDX0RFVl9JTlRSX01PREVfTVNJWClcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGVuaWMtXFx1MDAzZXdxX2NvdW50OyBpKyspXFxuIFxcdFxcdFxcdG5hcGlfZGlzYWJsZShcXHUwMDI2ZW5pYy1cXHUwMDNlbmFwaVtlbmljX2NxX3dxKGVuaWMsIGkpXSk7XFxuQEAgLTIyMDEsOSArMjIwNiwxMCBAQCBzdGF0aWMgdm9pZCBlbmljX2FkbWluX2NoYW5fcmVvcGVuKHN0cnVjdCBlbmljICplbmljKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHQvKiBJbnN0YWxsIHRoZSBNQk9YIHJlY2VpdmUgaGFuZGxlciBhbmQgcmVzZXQgdGhlIHNlcXVlbmNlIG51bWJlclxcbi1cXHQgKiBiZWZvcmUgb3BlbmluZyB0aGUgY2hhbm5lbCwgc28gdGhlIGhhbmRsZXIgaXMgaW4gcGxhY2UgYmVmb3JlIHRoZVxcbi1cXHQgKiBhZG1pbiBpbnRlcnJ1cHQgaXMgdW5tYXNrZWQgYW5kIG5vIGVhcmx5IGNvbXBsZXRpb24gaXMgZHJvcHBlZC5cXG4rXFx0LyogSW5zdGFsbCB0aGUgTUJPWCByZWNlaXZlIGhhbmRsZXIgYW5kIGNsZWFyIHBlbmRpbmcgcmVwbHkgc3RhdGUgYmVmb3JlXFxuK1xcdCAqIG9wZW5pbmcgdGhlIGNoYW5uZWwsIHNvIHRoZSBoYW5kbGVyIGlzIGluIHBsYWNlIGJlZm9yZSB0aGUgYWRtaW5cXG4rXFx0ICogaW50ZXJydXB0IGlzIHVubWFza2VkIGFuZCBubyBlYXJseSBjb21wbGV0aW9uIGlzIGRyb3BwZWQuICBLZWVwIHRoZVxcbitcXHQgKiBzZXF1ZW5jZSBudW1iZXIgbW9ub3RvbmljIGFjcm9zcyBjaGFubmVsIGdlbmVyYXRpb25zLlxcbiBcXHQgKi9cXG4gXFx0ZW5pY19tYm94X2luaXQoZW5pYyk7XFxuIFxcbkBAIC0yMjE1LDcgKzIyMjEsNyBAQCBzdGF0aWMgdm9pZCBlbmljX2FkbWluX2NoYW5fcmVvcGVuKHN0cnVjdCBlbmljICplbmljKVxcbiBcXHQgKiByZWdpc3RyYXRpb24gb3ZlciBhIGRlYWQgY2hhbm5lbC5cXG4gXFx0ICovXFxuIFxcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKVxcbi1cXHRcXHRlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkID0gZmFsc2U7XFxuK1xcdFxcdFdSSVRFX09OQ0UoZW5pYy1cXHUwMDNldmZfcmVnaXN0ZXJlZCwgZmFsc2UpO1xcbiBcXG4gXFx0ZXJyID0gZW5pY19hZG1pbl9jaGFubmVsX29wZW4oZW5pYyk7XFxuIFxcdGlmIChlcnIpIHtcXG5AQCAtMjI3MSw2ICsyMjc3LDggQEAgc3RhdGljIHZvaWQgZW5pY19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShlbmljKTtcXG4gXFxuIFxcdGVuaWNfc3RvcChlbmljLVxcdTAwM2VuZXRkZXYpO1xcbitcXHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcXG4rXFx0XFx0ZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfcmVzZXQoZW5pYyk7XFxuIFxcbiBcXHRlbmljX2Rldl9zb2Z0X3Jlc2V0KGVuaWMpO1xcbiBcXHRlbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7XFxuQEAgLTIzMTUsNiArMjMyMyw4IEBAIHN0YXRpYyB2b2lkIGVuaWNfdHhfaGFuZ19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcbiBcXHRlbmljX2Rldl9oYW5nX25vdGlmeShlbmljKTtcXG4gXFx0ZW5pY19zdG9wKGVuaWMtXFx1MDAzZW5ldGRldik7XFxuK1xcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKVxcbitcXHRcXHRlbmljX21ib3hfdmZfbGlua19zdGF0ZV9yZXNldChlbmljKTtcXG4gXFxuIFxcdGVuaWNfZGV2X2hhbmdfcmVzZXQoZW5pYyk7XFxuIFxcdGVuaWNfcmVzZXRfYWRkcl9saXN0cyhlbmljKTtcXG5AQCAtMzAxNSw2ICszMDI1LDcgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHRlbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFx0ZW5pYy1cXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xcbiBcXHRlbmljLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmVuaWMtXFx1MDAzZXZmX2xpbmtfc3RhdGVfbG9jayk7XFxuIFxcbiBcXHQvKiBTZXR1cCBQQ0kgcmVzb3VyY2VzXFxuIFxcdCAqL1xcbkBAIC0zMzM5LDcgKzMzNTAsNyBAQCBzdGF0aWMgaW50IGVuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcbiBlcnJfb3V0X2FkbWluX2Nsb3NlOlxcbiBcXHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkge1xcbi1cXHRcXHRpZiAoZW5pYy1cXHUwMDNldmZfcmVnaXN0ZXJlZCkge1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKGVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQpKSB7XFxuIFxcdFxcdFxcdGludCB1bnJlZ19lcnIgPSBlbmljX21ib3hfdmZfdW5yZWdpc3RlcihlbmljKTtcXG4gXFxuIFxcdFxcdFxcdGlmICh1bnJlZ19lcnIpXFxuQEAgLTMzOTIsNyArMzQwMyw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHQgKiB0b3VjaGluZyBhIG5ldGRldiB0aGF0IGlzIGJlaW5nIHRvcm4gZG93bi5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKSB7XFxuLVxcdFxcdFxcdGlmIChlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKSB7XFxuK1xcdFxcdFxcdGlmIChSRUFEX09OQ0UoZW5pYy1cXHUwMDNldmZfcmVnaXN0ZXJlZCkpIHtcXG4gXFx0XFx0XFx0XFx0aW50IHVucmVnX2VyciA9IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKGVuaWMpO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKHVucmVnX2VycilcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmNcXG5pbmRleCAyZmIwZjFlMmZmNTAxLi41YzkzY2E0OTU1MmFjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jXFxuQEAgLTE4LDIyICsxOCwyNSBAQFxcbiAjZGVmaW5lIEVOSUNfTUJPWF9QT0xMX1RJTUVPVVRfVVNcXHQ1MDAwMDAwXFxuICNkZWZpbmUgRU5JQ19NQk9YX1BPTExfSU5URVJWQUxfVVNcXHQxMDBcXG4gXFxuLXN0YXRpYyB2b2lkIGVuaWNfbWJveF9maWxsX2hkcihzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkcixcXG4tXFx0XFx0XFx0ICAgICAgIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsIHUxNiBtc2dfbGVuKVxcbitzdGF0aWMgdm9pZCBlbmljX21ib3hfZmlsbF9oZHIoc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkciwgdTggbXNnX3R5cGUsXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgZHN0X3ZuaWNfaWQsIHUxNiBtc2dfbGVuLCB1NjQgbXNnX251bSlcXG4ge1xcbiBcXHRtZW1zZXQoaGRyLCAwLCBzaXplb2YoKmhkcikpO1xcbiBcXHRoZHItXFx1MDAzZWRzdF92bmljX2lkID0gY3B1X3RvX2xlMTYoZHN0X3ZuaWNfaWQpO1xcbiBcXHRoZHItXFx1MDAzZW1zZ190eXBlID0gbXNnX3R5cGU7XFxuIFxcdGhkci1cXHUwMDNlbXNnX2xlbiA9IGNwdV90b19sZTE2KG1zZ19sZW4pO1xcbi1cXHRoZHItXFx1MDAzZW1zZ19udW0gPSBjcHVfdG9fbGU2NCgrK2VuaWMtXFx1MDAzZW1ib3hfbXNnX251bSk7XFxuK1xcdGhkci1cXHUwMDNlbXNnX251bSA9IGNwdV90b19sZTY0KG1zZ19udW0pO1xcbiB9XFxuIFxcbi1pbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxcbi1cXHRcXHQgICAgICAgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfbGVuKVxcbitzdGF0aWMgaW50IGVuaWNfbWJveF9zZW5kX21zZ19pZChzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCB1MTYgZHN0X3ZuaWNfaWQsIHZvaWQgKnBheWxvYWQsXFxuK1xcdFxcdFxcdFxcdCB1MTYgcGF5bG9hZF9sZW4sIHU2NCBtc2dfbnVtLCBib29sIHJldXNlX21zZ19udW0sXFxuK1xcdFxcdFxcdFxcdCB1OCBleHBlY3RlZF9yZXBseSlcXG4ge1xcbiBcXHRzaXplX3QgdG90YWxfbGVuID0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKSArIHBheWxvYWRfbGVuO1xcbiBcXHRzdHJ1Y3Qgdm5pY193cSAqd3EgPSBcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fd3E7XFxuIFxcdHN0cnVjdCB3cV9lbmV0X2Rlc2MgKmRlc2M7XFxuK1xcdGJvb2wgcmVwbHlfZXhwZWN0ZWQgPSBmYWxzZTtcXG4gXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0O1xcbiBcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbiBcXHR1MTYgdmxhbl90YWc7XFxuQEAgLTY4LDcgKzcxLDIxIEBAIGludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsXFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHR9XFxuIFxcbi1cXHRlbmljX21ib3hfZmlsbF9oZHIoZW5pYywgYnVmLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHRvdGFsX2xlbik7XFxuK1xcdC8qIFJlcGxpZXMgcmV1c2UgdGhlIGluaXRpYXRpbmcgbWVzc2FnZSBudW1iZXIuICBSZXF1ZXN0cyBhbmRcXG4rXFx0ICogbm90aWZpY2F0aW9ucyBhbGxvY2F0ZSBhIG5ldyBvbmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJldXNlX21zZ19udW0pXFxuK1xcdFxcdG1zZ19udW0gPSArK2VuaWMtXFx1MDAzZW1ib3hfbXNnX251bTtcXG4rXFx0aWYgKGV4cGVjdGVkX3JlcGx5KSB7XFxuK1xcdFxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXApO1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XFxuK1xcdFxcdGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSBleHBlY3RlZF9yZXBseTtcXG4rXFx0XFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID0gbXNnX251bTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XFxuK1xcdFxcdHJlcGx5X2V4cGVjdGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0ZW5pY19tYm94X2ZpbGxfaGRyKGJ1ZiwgbXNnX3R5cGUsIGRzdF92bmljX2lkLCB0b3RhbF9sZW4sIG1zZ19udW0pO1xcbiBcXHRpZiAocGF5bG9hZF9sZW4pIHtcXG4gXFx0XFx0dm9pZCAqZHN0ID0gYnVmICsgc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKTtcXG4gXFxuQEAgLTEzOSwxOCArMTU2LDY2IEBAIGludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsXFxuIFxcdFxcdCAgIFxcXCJNQk9YIHNlbmQgbXNnX3R5cGUgJXUgZHN0ICV1IHZsYW4gJXUgZXJyICVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgICBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHZsYW5fdGFnLCBlcnIpO1xcbiB1bmxvY2s6XFxuK1xcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgcmVwbHlfZXhwZWN0ZWQpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X3N0YXRlX2xvY2spO1xcbitcXHRcXHRpZiAoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9PSBleHBlY3RlZF9yZXBseSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID09IG1zZ19udW0pIHtcXG4rXFx0XFx0XFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XFxuK1xcdFxcdFxcdGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfbXNnX251bSA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XFxuK1xcdH1cXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2xvY2spO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxcbitcXHRcXHQgICAgICAgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfbGVuKVxcbit7XFxuK1xcdHJldHVybiBlbmljX21ib3hfc2VuZF9tc2dfaWQoZW5pYywgbXNnX3R5cGUsIGRzdF92bmljX2lkLCBwYXlsb2FkLFxcbitcXHRcXHRcXHRcXHQgICAgIHBheWxvYWRfbGVuLCAwLCBmYWxzZSwgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW5pY19tYm94X3NlbmRfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxcbitcXHRcXHRcXHRcXHR1MTYgZHN0X3ZuaWNfaWQsIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbixcXG4rXFx0XFx0XFx0XFx0dTY0IG1zZ19udW0pXFxuK3tcXG4rXFx0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZ19pZChlbmljLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHBheWxvYWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGF5bG9hZF9sZW4sIG1zZ19udW0sIHRydWUsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuaWNfbWJveF92Zl9zZW5kX3JlcXVlc3Qoc3RydWN0IGVuaWMgKmVuaWMsIHU4IHJlcXVlc3RfdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgICB1OCBleHBlY3RlZF9yZXBseSwgdm9pZCAqcGF5bG9hZCxcXG4rXFx0XFx0XFx0XFx0ICAgICB1MTYgcGF5bG9hZF9sZW4pXFxuK3tcXG4rXFx0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZ19pZChlbmljLCByZXF1ZXN0X3R5cGUsIEVOSUNfTUJPWF9EU1RfUEYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGF5bG9hZCwgcGF5bG9hZF9sZW4sIDAsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHQgICAgIGV4cGVjdGVkX3JlcGx5KTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBlbmljX21ib3hfd2FpdF9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYywgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbGVmdDtcXG4rXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcykpO1xcbitcXHRpZiAobGVmdClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBJbnZhbGlkYXRlIGEgcmVxdWVzdCB0aGF0IHRoZSBoYW5kbGVyIGhhcyBub3QgYWxyZWFkeSBhY2NlcHRlZC4gIEFcXG4rXFx0ICogZGVsYXllZCByZXBseSBjYW5ub3QgbWF0Y2ggYSBsYXRlciByZXF1ZXN0IGJlY2F1c2UgbWVzc2FnZSBudW1iZXJzIGFyZVxcbitcXHQgKiBtb25vdG9uaWMgYWNyb3NzIGNoYW5uZWwgcmVvcGVuLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X3N0YXRlX2xvY2spO1xcbitcXHRpZiAoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSkge1xcbitcXHRcXHRlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcXG4rXFx0XFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID0gMDtcXG4rXFx0XFx0ZXJyID0gLUVUSU1FRE9VVDtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcXG4gXFxuLVxcdHJldHVybiBsZWZ0ID8gMCA6IC1FVElNRURPVVQ7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIGludCBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmZfaWQsIHUzMiBsaW5rX3N0YXRlKVxcbkBAIC0xNzgsOCArMjQzLDggQEAgc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX2NhcGFiaWxpdHkoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZyxcXG4gXFx0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XFxuIFxcdHJlcGx5LnZlcnNpb24gPSBjcHVfdG9fbGUzMihFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSk7XFxuIFxcbi1cXHRyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZLCB2Zl9pZCxcXG4tXFx0XFx0XFx0XFx0ICBcXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSkpO1xcbitcXHRyZXR1cm4gZW5pY19tYm94X3NlbmRfcmVwbHkoZW5pYywgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFksIHZmX2lkLFxcbitcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpLCBtc2dfbnVtKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXFxuQEAgLTIwOCw4ICsyNzMsOCBAQCBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZyxcXG4gXFx0fVxcbiBcXG4gXFx0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XFxuLVxcdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFksIHZmX2lkLFxcbi1cXHRcXHRcXHRcXHQgXFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcXG4rXFx0ZXJyID0gZW5pY19tYm94X3NlbmRfcmVwbHkoZW5pYywgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZLCB2Zl9pZCxcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpLCBtc2dfbnVtKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTI1Myw4ICszMTgsOCBAQCBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfdW5yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqbXNnLFxcbiBcXHRlbmljLVxcdTAwM2V2Zl9zdGF0ZVt2Zl9pZF0ucmVnaXN0ZXJlZCA9IGZhbHNlO1xcbiBcXG4gXFx0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XFxuLVxcdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXFxuLVxcdFxcdFxcdFxcdCBcXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSkpO1xcbitcXHRlcnIgPSBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXFxuK1xcdFxcdFxcdFxcdCAgIFxcdTAwMjZyZXBseSwgc2l6ZW9mKHJlcGx5KSwgbXNnX251bSk7XFxuIFxcbiBcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbiBcXHRcXHRuZXRkZXZfaW5mbyhlbmljLVxcdTAwM2VuZXRkZXYsXFxuQEAgLTMyNCwxMDUgKzM4OSwxMTYgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3BmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxcbiBcXHRcXHRcXHQgICAgaGRyLVxcdTAwM2Vtc2dfdHlwZSwgdmZfaWQsIGVycik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfY2FwYWJpbGl0eV9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHZvaWQgKnBheWxvYWQpXFxuK3N0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsIHU4IHJlcGx5X3R5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZvaWQgKnBheWxvYWQsIHU2NCBtc2dfbnVtKVxcbiB7XFxuLVxcdHN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDtcXG4tXFxuLVxcdGlmIChSRUFEX09OQ0UoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSkgIT0gRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFkpIHtcXG4rXFx0c3RydWN0IGVuaWNfbWJveF9nZW5lcmljX3JlcGx5ICpyZXBseSA9IHBheWxvYWQ7XFxuK1xcdHUxNiByZXRfbWFqb3IgPSBsZTE2X3RvX2NwdShyZXBseS1cXHUwMDNlcmV0X21ham9yKTtcXG4rXFx0dTY0IGV4cGVjdGVkX21zZ19udW07XFxuK1xcdHU4IGV4cGVjdGVkX3R5cGU7XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XFxuK1xcdGV4cGVjdGVkX3R5cGUgPSBlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5O1xcbitcXHRleHBlY3RlZF9tc2dfbnVtID0gZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtO1xcbitcXHRpZiAoZXhwZWN0ZWRfdHlwZSAhPSByZXBseV90eXBlIHx8IGV4cGVjdGVkX21zZ19udW0gIT0gbXNnX251bSkge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcXG4gXFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbi1cXHRcXHRcXHQgICAgXFxcIk1CT1g6IHN0YWxlIGNhcGFiaWxpdHkgcmVwbHkgKGV4cGVjdGVkICV1KSwgZHJvcFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgIFJFQURfT05DRShlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KSk7XFxuK1xcdFxcdFxcdCAgICBcXFwiTUJPWDogc3RhbGUgcmVwbHkgJXUvJWxsdSAoZXhwZWN0ZWQgJXUvJWxsdSksIGRyb3BcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICByZXBseV90eXBlLCAodW5zaWduZWQgbG9uZyBsb25nKW1zZ19udW0sXFxuK1xcdFxcdFxcdCAgICBleHBlY3RlZF90eXBlLCAodW5zaWduZWQgbG9uZyBsb25nKWV4cGVjdGVkX21zZ19udW0pO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChsZTE2X3RvX2NwdShyZXBseS1cXHUwMDNlcmVwbHkucmV0X21ham9yKSA9PSAwKVxcbi1cXHRcXHRlbmljLVxcdTAwM2VwZl9jYXBfdmVyc2lvbiA9IGxlMzJfdG9fY3B1KHJlcGx5LVxcdTAwM2V2ZXJzaW9uKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuLVxcdFxcdFxcdCAgICBcXFwiTUJPWDogUEYgcmVqZWN0ZWQgY2FwYWJpbGl0eSByZXF1ZXN0OiAldS8ldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVxcdTAwM2VyZXBseS5yZXRfbWFqb3IpLFxcbi1cXHRcXHRcXHQgICAgbGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9taW5vcikpO1xcbi1cXHRjb21wbGV0ZShcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9jb21wKTtcXG4tfVxcbitcXHRpZiAoIXJldF9tYWpvcikge1xcbitcXHRcXHRzd2l0Y2ggKHJlcGx5X3R5cGUpIHtcXG4rXFx0XFx0Y2FzZSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWToge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnICpjYXAgPSBwYXlsb2FkO1xcbiBcXG4tc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9yZWdpc3Rlcl9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKnBheWxvYWQpXFxuLXtcXG4tXFx0c3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDtcXG4tXFxuLVxcdGlmIChSRUFEX09OQ0UoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSkgIT0gRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZKSB7XFxuLVxcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4tXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBzdGFsZSByZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgUkVBRF9PTkNFKGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpKTtcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAobGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9tYWpvcikpIHtcXG4tXFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbi1cXHRcXHRcXHQgICAgXFxcIk1CT1g6IFZGIHJlZ2lzdGVyIHJlamVjdGVkIGJ5IFBGOiAldS8ldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVxcdTAwM2VyZXBseS5yZXRfbWFqb3IpLFxcbi1cXHRcXHRcXHQgICAgbGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9taW5vcikpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2VwZl9jYXBfdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0ICAgbGUzMl90b19jcHUoY2FwLVxcdTAwM2V2ZXJzaW9uKSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOlxcbitcXHRcXHRcXHRXUklURV9PTkNFKGVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQsIHRydWUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWTpcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkLCBmYWxzZSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4rXFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XFxuK1xcdGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfbXNnX251bSA9IDA7XFxuIFxcdGNvbXBsZXRlKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXApO1xcbi19XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X3N0YXRlX2xvY2spO1xcbiBcXG4tc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV91bnJlZ2lzdGVyX3JlcGx5KHN0cnVjdCBlbmljICplbmljLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgdm9pZCAqcGF5bG9hZClcXG4te1xcbi1cXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyAqcmVwbHkgPSBwYXlsb2FkO1xcbi1cXG4tXFx0aWYgKFJFQURfT05DRShlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KSAhPSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSkge1xcbitcXHRpZiAocmV0X21ham9yKVxcbiBcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuLVxcdFxcdFxcdCAgICBcXFwiTUJPWDogc3RhbGUgdW5yZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgUkVBRF9PTkNFKGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpKTtcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAobGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9tYWpvcikpIHtcXG4tXFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbi1cXHRcXHRcXHQgICAgXFxcIk1CT1g6IFZGIHVucmVnaXN0ZXIgcmVqZWN0ZWQgYnkgUEY6ICV1LyV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgbGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9tYWpvciksXFxuLVxcdFxcdFxcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cXHUwMDNlcmVwbHkucmV0X21pbm9yKSk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQgPSBmYWxzZTtcXG4tXFx0fVxcbi1cXHRjb21wbGV0ZShcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9jb21wKTtcXG4rXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBQRiByZWplY3RlZCByZXBseSB0eXBlICV1OiAldS8ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIHJlcGx5X3R5cGUsIHJldF9tYWpvcixcXG4rXFx0XFx0XFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVxcdTAwM2VyZXRfbWlub3IpKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpwYXlsb2FkKVxcbitzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKnBheWxvYWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHU2NCBtc2dfbnVtKVxcbiB7XFxuIFxcdHN0cnVjdCBlbmljX21ib3hfcGZfbGlua19zdGF0ZV9ub3RpZl9tc2cgKm5vdGlmID0gcGF5bG9hZDtcXG4gXFx0c3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX2Fja19tc2cgYWNrID0ge307XFxuK1xcdHUzMiBsaW5rX3N0YXRlID0gbGUzMl90b19jcHUobm90aWYtXFx1MDAzZWxpbmtfc3RhdGUpO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0c3dpdGNoIChsZTMyX3RvX2NwdShub3RpZi1cXHUwMDNlbGlua19zdGF0ZSkpIHtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xcbitcXHRzd2l0Y2ggKGxpbmtfc3RhdGUpIHtcXG4gXFx0Y2FzZSBFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEU6XFxuLVxcdFxcdGlmICghbmV0aWZfY2Fycmllcl9vayhlbmljLVxcdTAwM2VuZXRkZXYpKVxcbitcXHRcXHRlbmljLVxcdTAwM2V2Zl9saW5rX3N0YXRlID0gRU5JQ19WRl9MSU5LX1NUQVRFX1VQO1xcbitcXHRcXHRpZiAoZW5pYy1cXHUwMDNldmZfbGlua19ydW5uaW5nIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhbmV0aWZfY2Fycmllcl9vayhlbmljLVxcdTAwM2VuZXRkZXYpKVxcbiBcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29uKGVuaWMtXFx1MDAzZW5ldGRldik7XFxuIFxcdFxcdG5ldGRldl9kYmcoZW5pYy1cXHUwMDNlbmV0ZGV2LCBcXFwiTUJPWDogbGluayBzdGF0ZSAtXFx1MDAzZSBVUFxcXFxuXFxcIik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEVOSUNfTUJPWF9MSU5LX1NUQVRFX0RJU0FCTEU6XFxuLVxcdFxcdGlmIChuZXRpZl9jYXJyaWVyX29rKGVuaWMtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdGVuaWMtXFx1MDAzZXZmX2xpbmtfc3RhdGUgPSBFTklDX1ZGX0xJTktfU1RBVEVfRE9XTjtcXG4rXFx0XFx0aWYgKGVuaWMtXFx1MDAzZXZmX2xpbmtfcnVubmluZyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgbmV0aWZfY2Fycmllcl9vayhlbmljLVxcdTAwM2VuZXRkZXYpKVxcbiBcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihlbmljLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRcXHRuZXRkZXZfZGJnKGVuaWMtXFx1MDAzZW5ldGRldiwgXFxcIk1CT1g6IGxpbmsgc3RhdGUgLVxcdTAwM2UgRE9XTlxcXFxuXFxcIik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsIFxcXCJNQk9YOiB1bmtub3duIGxpbmsgc3RhdGUgJXVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICBsZTMyX3RvX2NwdShub3RpZi1cXHUwMDNlbGlua19zdGF0ZSkpO1xcbitcXHRcXHRcXHQgICAgbGlua19zdGF0ZSk7XFxuIFxcdFxcdGFjay5hY2sucmV0X21ham9yID0gY3B1X3RvX2xlMTYoRU5JQ19NQk9YX0VSUl9HRU5FUklDKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmVuaWMtXFx1MDAzZXZmX2xpbmtfc3RhdGVfbG9jayk7XFxuIFxcbi1cXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfQUNLLFxcbi1cXHRcXHRcXHRcXHQgRU5JQ19NQk9YX0RTVF9QRiwgXFx1MDAyNmFjaywgc2l6ZW9mKGFjaykpO1xcbitcXHRlcnIgPSBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0ssXFxuK1xcdFxcdFxcdFxcdCAgIEVOSUNfTUJPWF9EU1RfUEYsIFxcdTAwMjZhY2ssIHNpemVvZihhY2spLCBtc2dfbnVtKTtcXG4gXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXFxuIFxcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4gXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBmYWlsZWQgdG8gc2VuZCBsaW5rIHN0YXRlIEFDSzogJWRcXFxcblxcXCIsIGVycik7XFxuIH1cXG4gXFxuK3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfcmVzZXQoc3RydWN0IGVuaWMgKmVuaWMpXFxuK3tcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xcbitcXHRlbmljLVxcdTAwM2V2Zl9saW5rX3N0YXRlID0gRU5JQ19WRl9MSU5LX1NUQVRFX1VOS05PV047XFxuK1xcdGlmIChlbmljLVxcdTAwM2V2Zl9saW5rX3J1bm5pbmcgXFx1MDAyNlxcdTAwMjYgbmV0aWZfY2Fycmllcl9vayhlbmljLVxcdTAwM2VuZXRkZXYpKVxcbitcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihlbmljLVxcdTAwM2VuZXRkZXYpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcXG4rfVxcbitcXG4rdm9pZCBlbmljX21ib3hfdmZfbGlua19zdGF0ZV9zZXRfcnVubmluZyhzdHJ1Y3QgZW5pYyAqZW5pYywgYm9vbCBydW5uaW5nKVxcbit7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcXG4rXFx0ZW5pYy1cXHUwMDNldmZfbGlua19ydW5uaW5nID0gcnVubmluZztcXG4rXFx0aWYgKHJ1bm5pbmcgXFx1MDAyNlxcdTAwMjYgZW5pYy1cXHUwMDNldmZfbGlua19zdGF0ZSA9PSBFTklDX1ZGX0xJTktfU1RBVEVfVVApIHtcXG4rXFx0XFx0aWYgKCFuZXRpZl9jYXJyaWVyX29rKGVuaWMtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdFxcdG5ldGlmX2NhcnJpZXJfb24oZW5pYy1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0fSBlbHNlIGlmIChuZXRpZl9jYXJyaWVyX29rKGVuaWMtXFx1MDAzZW5ldGRldikpIHtcXG4rXFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoZW5pYy1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgZW5pY19tYm94X3ZmX3BheWxvYWRfb2soc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxcbiBcXHRcXHRcXHRcXHQgICAgdTE2IHBheWxvYWRfbGVuLCBzaXplX3QgbWluX2xlbilcXG4ge1xcbkBAIC00MzksNiArNTE1LDggQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIsIHZvaWQgKnBheWxvYWQsXFxuIFxcdFxcdFxcdFxcdCAgICAgdTE2IHBheWxvYWRfbGVuKVxcbiB7XFxuK1xcdHU2NCBtc2dfbnVtID0gbGU2NF90b19jcHUoaGRyLVxcdTAwM2Vtc2dfbnVtKTtcXG4rXFxuIFxcdHN3aXRjaCAoaGRyLVxcdTAwM2Vtc2dfdHlwZSkge1xcbiBcXHRjYXNlIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZOiB7XFxuIFxcdFxcdHNpemVfdCBleHAgPSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyk7XFxuQEAgLTQ0Niw3ICs1MjQsNyBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXFxuIFxcdFxcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVxcdTAwM2Vtc2dfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRlbmljX21ib3hfdmZfaGFuZGxlX2NhcGFiaWxpdHlfcmVwbHkoZW5pYywgcGF5bG9hZCk7XFxuK1xcdFxcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoZW5pYywgaGRyLVxcdTAwM2Vtc2dfdHlwZSwgcGF5bG9hZCwgbXNnX251bSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOiB7XFxuQEAgLTQ1NSw3ICs1MzMsNyBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXFxuIFxcdFxcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVxcdTAwM2Vtc2dfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRlbmljX21ib3hfdmZfaGFuZGxlX3JlZ2lzdGVyX3JlcGx5KGVuaWMsIHBheWxvYWQpO1xcbitcXHRcXHRlbmljX21ib3hfdmZfaGFuZGxlX3JlcGx5KGVuaWMsIGhkci1cXHUwMDNlbXNnX3R5cGUsIHBheWxvYWQsIG1zZ19udW0pO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRjYXNlIEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUExZOiB7XFxuQEAgLTQ2NCw3ICs1NDIsNyBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXFxuIFxcdFxcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVxcdTAwM2Vtc2dfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRlbmljX21ib3hfdmZfaGFuZGxlX3VucmVnaXN0ZXJfcmVwbHkoZW5pYywgcGF5bG9hZCk7XFxuK1xcdFxcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoZW5pYywgaGRyLVxcdTAwM2Vtc2dfdHlwZSwgcGF5bG9hZCwgbXNnX251bSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcdGNhc2UgRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfTk9USUY6IHtcXG5AQCAtNDczLDcgKzU1MSw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYyxcXG4gXFx0XFx0aWYgKCFlbmljX21ib3hfdmZfcGF5bG9hZF9vayhlbmljLCBoZHItXFx1MDAzZW1zZ190eXBlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHBheWxvYWRfbGVuLCBleHApKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdGVuaWNfbWJveF92Zl9oYW5kbGVfbGlua19zdGF0ZShlbmljLCBwYXlsb2FkKTtcXG4rXFx0XFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKGVuaWMsIHBheWxvYWQsIG1zZ19udW0pO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRkZWZhdWx0OlxcbkBAIC01NDIsMzIgKzYyMCwzMSBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfcmVjdl9oYW5kbGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpidWYsXFxuIGludCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYylcXG4ge1xcbiBcXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfbXNnIHJlcSA9IHt9O1xcbitcXHR1MzIgdmVyc2lvbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVuaWMtXFx1MDAzZXBmX2NhcF92ZXJzaW9uID0gMDtcXG4tXFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfY29tcCk7XFxuLVxcdFdSSVRFX09OQ0UoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFkpO1xcbitcXHRXUklURV9PTkNFKGVuaWMtXFx1MDAzZXBmX2NhcF92ZXJzaW9uLCAwKTtcXG4gXFx0cmVxLnZlcnNpb24gPSBjcHVfdG9fbGUzMihFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSk7XFxuIFxcbi1cXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVRVUVTVCxcXG4tXFx0XFx0XFx0XFx0IEVOSUNfTUJPWF9EU1RfUEYsIFxcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRXUklURV9PTkNFKGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xcbitcXHRlcnIgPSBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KGVuaWMsXFxuK1xcdFxcdFxcdFxcdFxcdEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QsXFxuK1xcdFxcdFxcdFxcdFxcdEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSk7XFxuK1xcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4gXFxuIFxcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xcbi1cXHRXUklURV9PTkNFKGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xcbitcXHR2ZXJzaW9uID0gUkVBRF9PTkNFKGVuaWMtXFx1MDAzZXBmX2NhcF92ZXJzaW9uKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuIFxcdFxcdFxcdCAgICBcXFwiTUJPWDogbm8gY2FwYWJpbGl0eSByZXBseSBmcm9tIFBGXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGVuaWMtXFx1MDAzZXBmX2NhcF92ZXJzaW9uIFxcdTAwM2MgRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpIHtcXG4rXFx0aWYgKHZlcnNpb24gXFx1MDAzYyBFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSkge1xcbiBcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuIFxcdFxcdFxcdCAgICBcXFwiTUJPWDogUEYgcmVqZWN0ZWQgY2FwYWJpbGl0eSByZXF1ZXN0IG9yIHJlcG9ydGVkIHVuc3VwcG9ydGVkIHZlcnNpb24gJXVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICBlbmljLVxcdTAwM2VwZl9jYXBfdmVyc2lvbik7XFxuK1xcdFxcdFxcdCAgICB2ZXJzaW9uKTtcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuIFxcbkBAIC01NzYsMjggKzY1MywyNSBAQCBpbnQgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpXFxuIFxcbiBpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKVxcbiB7XFxuK1xcdGJvb2wgcmVnaXN0ZXJlZDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQgPSBmYWxzZTtcXG4tXFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfY29tcCk7XFxuLVxcdFdSSVRFX09OQ0UoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZKTtcXG4rXFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkLCBmYWxzZSk7XFxuIFxcbi1cXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUVVFU1QsXFxuLVxcdFxcdFxcdFxcdCBFTklDX01CT1hfRFNUX1BGLCBOVUxMLCAwKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRXUklURV9PTkNFKGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xcbitcXHRlcnIgPSBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVFVRVNULFxcbitcXHRcXHRcXHRcXHRcXHRFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFksIE5VTEwsIDApO1xcbitcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuIFxcbiBcXHRlcnIgPSBlbmljX21ib3hfd2FpdF9yZXBseShlbmljLCAzMDAwKTtcXG4tXFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCAwKTtcXG4rXFx0cmVnaXN0ZXJlZCA9IFJFQURfT05DRShlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuIFxcdFxcdFxcdCAgICBcXFwiTUJPWDogVkYgcmVnaXN0cmF0aW9uIHdpdGggUEYgdGltZWQgb3V0XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKVxcbitcXHRpZiAoIXJlZ2lzdGVyZWQpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTYwNSw0MyArNjc5LDQ4IEBAIGludCBlbmljX21ib3hfdmZfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpXFxuIFxcbiBpbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpXFxuIHtcXG4rXFx0Ym9vbCByZWdpc3RlcmVkO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCFlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKVxcbitcXHRpZiAoIVJFQURfT05DRShlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9jb21wKTtcXG4tXFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSk7XFxuLVxcbi1cXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVRVUVTVCxcXG4tXFx0XFx0XFx0XFx0IEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFdSSVRFX09OQ0UoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgMCk7XFxuK1xcdGVyciA9IGVuaWNfbWJveF92Zl9zZW5kX3JlcXVlc3QoZW5pYyxcXG4rXFx0XFx0XFx0XFx0XFx0RU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVRVUVTVCxcXG4rXFx0XFx0XFx0XFx0XFx0RU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFksXFxuK1xcdFxcdFxcdFxcdFxcdE5VTEwsIDApO1xcbitcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuIFxcbiBcXHRlcnIgPSBlbmljX21ib3hfd2FpdF9yZXBseShlbmljLCAzMDAwKTtcXG4tXFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCAwKTtcXG4rXFx0cmVnaXN0ZXJlZCA9IFJFQURfT05DRShlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0aWYgKGVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQpXFxuK1xcdGlmIChyZWdpc3RlcmVkKVxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpXFxuIHtcXG4tXFx0LyogbWJveF9sb2NrIGFuZCBtYm94X2NvbXAgbXVzdCBiZSBpbml0aWFsaXplZCBleGFjdGx5IG9uY2UgcGVyXFxuK1xcdGJvb2wgcmVpbml0ID0gZW5pYy1cXHUwMDNlbWJveF9pbml0aWFsaXplZDtcXG4rXFxuK1xcdC8qIE1CT1ggbG9ja3MgYW5kIG1ib3hfY29tcCBtdXN0IGJlIGluaXRpYWxpemVkIGV4YWN0bHkgb25jZSBwZXJcXG4gXFx0ICogZGV2aWNlIGxpZmV0aW1lOyB0aGUgUEYgc3Jpb3ZfY29uZmlndXJlIHBhdGggY2FuIHJlLWVudGVyIHRoaXNcXG4gXFx0ICogb24gZWFjaCBlbmFibGUgY3ljbGUgd2hlcmUgdGhlc2UgcHJpbWl0aXZlcyBhcmUgYWxyZWFkeSBzZXQgdXAuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIWVuaWMtXFx1MDAzZW1ib3hfaW5pdGlhbGl6ZWQpIHtcXG4rXFx0aWYgKCFyZWluaXQpIHtcXG4gXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9sb2NrKTtcXG4gXFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXApO1xcbitcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcXG4rXFx0XFx0ZW5pYy1cXHUwMDNlbWJveF9tc2dfbnVtID0gMDtcXG4gXFx0XFx0ZW5pYy1cXHUwMDNlbWJveF9pbml0aWFsaXplZCA9IHRydWU7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXApO1xcbiBcXHR9XFxuLVxcdGVuaWMtXFx1MDAzZW1ib3hfbXNnX251bSA9IDA7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcXG4rXFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XFxuK1xcdGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfbXNnX251bSA9IDA7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X3N0YXRlX2xvY2spO1xcbiBcXHRlbmljLVxcdTAwM2VhZG1pbl9ycV9oYW5kbGVyID0gZW5pY19tYm94X3JlY3ZfaGFuZGxlcjtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaFxcbmluZGV4IDE1ZTMwZWUyYjBlZDkuLjYwNDA5YmFkMmYyODQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmhcXG5AQCAtODgsNiArODgsOCBAQCB2b2lkIGVuaWNfbWJveF9pbml0KHN0cnVjdCBlbmljICplbmljKTtcXG4gaW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCxcXG4gXFx0XFx0ICAgICAgIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbik7XFxuIGludCBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmZfaWQsIHUzMiBsaW5rX3N0YXRlKTtcXG4rdm9pZCBlbmljX21ib3hfdmZfbGlua19zdGF0ZV9yZXNldChzdHJ1Y3QgZW5pYyAqZW5pYyk7XFxuK3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfc2V0X3J1bm5pbmcoc3RydWN0IGVuaWMgKmVuaWMsIGJvb2wgcnVubmluZyk7XFxuIGludCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYyk7XFxuIGludCBlbmljX21ib3hfdmZfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpO1xcbiBpbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQyMjozOToxNC43MjQ3NjU0NjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyNjM4MDYwMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciByZXF1aXJpbmcgZGVkaWNhdGVkIENpc2NvIFZJQyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZXJlZm9yZSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZDFmZWI1ZDE4YTU4ZmFhNjVmYWNjMGIzZWY1OTkwMTJkZjhkY2JlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMzAgMjI6Mzk6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXG5pbmRleCA0YTY3OTQ3Y2ZiOWYzLi43YTUwOWEwNTY5OTAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXG5AQCAtMTM3LDYgKzEzNywxMiBAQCBzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUge1xuIFx0dTggbWFjX2FkZHJbRVRIX0FMRU5dO1xuIH07XG4gXG4rZW51bSBlbmljX3ZmX2xpbmtfc3RhdGUge1xuK1x0RU5JQ19WRl9MSU5LX1NUQVRFX1VOS05PV04sXG4rXHRFTklDX1ZGX0xJTktfU1RBVEVfRE9XTixcbitcdEVOSUNfVkZfTElOS19TVEFURV9VUCxcbit9O1xuK1xuIC8qIGVuaWNfcmZzX2ZsdHJfbm9kZSAtIHJmcyBmaWx0ZXIgbm9kZSBpbiBoYXNoIHRhYmxlXG4gICpcdEBAa2V5czogSVB2NCA1IHR1cGxlXG4gICpcdEBmbG93X2lkOiBmbG93X2lkIG9mIGNsc2YgZmlsdGVyIHByb3ZpZGVkIGJ5IGtlcm5lbFxuQEAgLTMxMiwxOSArMzE4LDI1IEBAIHN0cnVjdCBlbmljIHtcbiBcdHVuc2lnbmVkIGludCBhZG1pbl9tc2dfY291bnQ7XHQvKiBjdXJyZW50IGRlcHRoIG9mIGFkbWluX21zZ19saXN0ICovXG4gXHR2b2lkICgqYWRtaW5fcnFfaGFuZGxlcikoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcbiBcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbGVuKTtcbitcdC8qIFRoZSBQRiBpcyBhdXRob3JpdGF0aXZlIGZvciBhIFYyIFZGJ3MgY2Fycmllci4gIEtlZXAgdGhlIGxhc3RcbitcdCAqIG5vdGlmaWNhdGlvbiBhY3Jvc3MgYW4gb3JkaW5hcnkgbmV0ZGV2IGNsb3NlL29wZW4gYW5kIHNlcmlhbGl6ZSBpdFxuK1x0ICogYWdhaW5zdCB0aGUgb3Blbi9zdG9wIGNhcnJpZXIgdHJhbnNpdGlvbi5cbitcdCAqL1xuK1x0c3BpbmxvY2tfdCB2Zl9saW5rX3N0YXRlX2xvY2s7XG4rXHRlbnVtIGVuaWNfdmZfbGlua19zdGF0ZSB2Zl9saW5rX3N0YXRlO1xuK1x0Ym9vbCB2Zl9saW5rX3J1bm5pbmc7XG4gXG4gXHQvKiBNQk9YIHByb3RvY29sIHN0YXRlIOKAlCBtYm94X2xvY2sgc2VyaWFsaXplcyBhZG1pbiBXUSBzZW5kcyAqL1xuIFx0c3RydWN0IG11dGV4IG1ib3hfbG9jaztcbiBcdHU2NCBtYm94X21zZ19udW07XG4tXHQvKiBNQk9YIHJlcXVlc3QtcmVwbHkgc3RhdGUuICBtYm94X2V4cGVjdGVkX3JlcGx5IGlzIHdyaXR0ZW4gYW5kXG4tXHQgKiBjbGVhcmVkIGJ5IHRoZSBwcm9jZXNzLWNvbnRleHQgcmVxdWVzdCBoZWxwZXJzIChjYXBhYmlsaXR5L3JlZ2lzdGVyL1xuLVx0ICogdW5yZWdpc3RlcikgYW5kIG9ubHkgcmVhZCBieSB0aGUgYWRtaW5fbXNnX3dvcmsgcmVjZWl2ZSBoYW5kbGVycywgc29cbi1cdCAqIGl0IGlzIGFubm90YXRlZCB3aXRoIFJFQURfT05DRSgpL1dSSVRFX09OQ0UoKSByYXRoZXIgdGhhbiBsb2NrZWQ6XG4tXHQgKiBvbmx5IG9uZSByZXF1ZXN0IGlzIGluIGZsaWdodCBhdCBhIHRpbWUgKHJlcXVlc3RlcnMgcnVuIHVuZGVyIFJUTkwgb3Jcbi1cdCAqIHNpbmdsZS10aHJlYWRlZCBwcm9iZS9yZW1vdmUpLCBzbyBlYWNoIHJlcXVlc3QgaXMgc2VyaWFsaXplZCBhbmQgaXRzXG4tXHQgKiByZXBseSBjb21wbGV0ZXMgbWJveF9jb21wIGJlZm9yZSB0aGUgbmV4dCByZXF1ZXN0IGlzIGlzc3VlZC5cbitcdC8qIE1CT1ggcmVxdWVzdC1yZXBseSBzdGF0ZS4gIEV4aXN0aW5nIHJlcXVlc3QgY2FsbGVycyBhbGxvdyBvbmx5IG9uZVxuK1x0ICogcmVxdWVzdCBpbiBmbGlnaHQuICBUaGUgc3RhdGUgbG9jayBhcmJpdHJhdGVzIHJlcGx5IGFjY2VwdGFuY2UgYWdhaW5zdFxuK1x0ICogdGltZW91dCBpbnZhbGlkYXRpb24sIHdoaWxlIG1ib3hfY29tcCBwdWJsaXNoZXMgdGhlIGFjY2VwdGVkIHJlc3VsdCB0b1xuK1x0ICogdGhlIHJlcXVlc3Rlci5cbiBcdCAqL1xuIFx0c3RydWN0IGNvbXBsZXRpb24gbWJveF9jb21wO1xuK1x0c3BpbmxvY2tfdCBtYm94X3N0YXRlX2xvY2s7XHQvKiBwcm90ZWN0cyBleHBlY3RlZCByZXBseSBzdGF0ZSAqL1xuK1x0dTY0IG1ib3hfZXhwZWN0ZWRfbXNnX251bTtcbiBcdHU4IG1ib3hfZXhwZWN0ZWRfcmVwbHk7XG4gXHRib29sIG1ib3hfaW5pdGlhbGl6ZWQ7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmNcbmluZGV4IDBiYWVmN2ExMjBlYzYuLjE0ZDE2MzdhNDM0MmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jXG5AQCAtMTgwMCw2ICsxODAwLDggQEAgc3RhdGljIGludCBlbmljX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcbiBcdGVuaWNfbm90aWZ5X3RpbWVyX3N0YXJ0KGVuaWMpO1xuIFx0ZW5pY19yZnNfdGltZXJfc3RhcnQoZW5pYyk7XG4rXHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcbitcdFx0ZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfc2V0X3J1bm5pbmcoZW5pYywgdHJ1ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC0xODUzLDcgKzE4NTUsMTAgQEAgc3RhdGljIGludCBlbmljX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVuaWMtXHUwMDNlcnFfY291bnQ7IGkrKylcbiBcdFx0bmFwaV9kaXNhYmxlKFx1MDAyNmVuaWMtXHUwMDNlbmFwaVtpXSk7XG4gXG4tXHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuK1x0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpXG4rXHRcdGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3NldF9ydW5uaW5nKGVuaWMsIGZhbHNlKTtcbitcdGVsc2VcbitcdFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcbiBcdGlmICh2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtXHUwMDNldmRldikgPT0gVk5JQ19ERVZfSU5UUl9NT0RFX01TSVgpXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVuaWMtXHUwMDNld3FfY291bnQ7IGkrKylcbiBcdFx0XHRuYXBpX2Rpc2FibGUoXHUwMDI2ZW5pYy1cdTAwM2VuYXBpW2VuaWNfY3Ffd3EoZW5pYywgaSldKTtcbkBAIC0yMjAxLDkgKzIyMDYsMTAgQEAgc3RhdGljIHZvaWQgZW5pY19hZG1pbl9jaGFuX3Jlb3BlbihzdHJ1Y3QgZW5pYyAqZW5pYylcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogSW5zdGFsbCB0aGUgTUJPWCByZWNlaXZlIGhhbmRsZXIgYW5kIHJlc2V0IHRoZSBzZXF1ZW5jZSBudW1iZXJcbi1cdCAqIGJlZm9yZSBvcGVuaW5nIHRoZSBjaGFubmVsLCBzbyB0aGUgaGFuZGxlciBpcyBpbiBwbGFjZSBiZWZvcmUgdGhlXG4tXHQgKiBhZG1pbiBpbnRlcnJ1cHQgaXMgdW5tYXNrZWQgYW5kIG5vIGVhcmx5IGNvbXBsZXRpb24gaXMgZHJvcHBlZC5cbitcdC8qIEluc3RhbGwgdGhlIE1CT1ggcmVjZWl2ZSBoYW5kbGVyIGFuZCBjbGVhciBwZW5kaW5nIHJlcGx5IHN0YXRlIGJlZm9yZVxuK1x0ICogb3BlbmluZyB0aGUgY2hhbm5lbCwgc28gdGhlIGhhbmRsZXIgaXMgaW4gcGxhY2UgYmVmb3JlIHRoZSBhZG1pblxuK1x0ICogaW50ZXJydXB0IGlzIHVubWFza2VkIGFuZCBubyBlYXJseSBjb21wbGV0aW9uIGlzIGRyb3BwZWQuICBLZWVwIHRoZVxuK1x0ICogc2VxdWVuY2UgbnVtYmVyIG1vbm90b25pYyBhY3Jvc3MgY2hhbm5lbCBnZW5lcmF0aW9ucy5cbiBcdCAqL1xuIFx0ZW5pY19tYm94X2luaXQoZW5pYyk7XG4gXG5AQCAtMjIxNSw3ICsyMjIxLDcgQEAgc3RhdGljIHZvaWQgZW5pY19hZG1pbl9jaGFuX3Jlb3BlbihzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcdCAqIHJlZ2lzdHJhdGlvbiBvdmVyIGEgZGVhZCBjaGFubmVsLlxuIFx0ICovXG4gXHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcbi1cdFx0ZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkID0gZmFsc2U7XG4rXHRcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkLCBmYWxzZSk7XG4gXG4gXHRlcnIgPSBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihlbmljKTtcbiBcdGlmIChlcnIpIHtcbkBAIC0yMjcxLDYgKzIyNzcsOCBAQCBzdGF0aWMgdm9pZCBlbmljX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0ZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKGVuaWMpO1xuIFxuIFx0ZW5pY19zdG9wKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbitcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKVxuK1x0XHRlbmljX21ib3hfdmZfbGlua19zdGF0ZV9yZXNldChlbmljKTtcbiBcbiBcdGVuaWNfZGV2X3NvZnRfcmVzZXQoZW5pYyk7XG4gXHRlbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7XG5AQCAtMjMxNSw2ICsyMzIzLDggQEAgc3RhdGljIHZvaWQgZW5pY190eF9oYW5nX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGVuaWNfZGV2X2hhbmdfbm90aWZ5KGVuaWMpO1xuIFx0ZW5pY19zdG9wKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbitcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKVxuK1x0XHRlbmljX21ib3hfdmZfbGlua19zdGF0ZV9yZXNldChlbmljKTtcbiBcbiBcdGVuaWNfZGV2X2hhbmdfcmVzZXQoZW5pYyk7XG4gXHRlbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7XG5AQCAtMzAxNSw2ICszMDI1LDcgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0ZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRlbmljLVx1MDAzZW5ldGRldiA9IG5ldGRldjtcbiBcdGVuaWMtXHUwMDNlcGRldiA9IHBkZXY7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZlbmljLVx1MDAzZXZmX2xpbmtfc3RhdGVfbG9jayk7XG4gXG4gXHQvKiBTZXR1cCBQQ0kgcmVzb3VyY2VzXG4gXHQgKi9cbkBAIC0zMzM5LDcgKzMzNTAsNyBAQCBzdGF0aWMgaW50IGVuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gZXJyX291dF9hZG1pbl9jbG9zZTpcbiBcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKSB7XG4tXHRcdGlmIChlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpIHtcbitcdFx0aWYgKFJFQURfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpKSB7XG4gXHRcdFx0aW50IHVucmVnX2VyciA9IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKGVuaWMpO1xuIFxuIFx0XHRcdGlmICh1bnJlZ19lcnIpXG5AQCAtMzM5Miw3ICszNDAzLDcgQEAgc3RhdGljIHZvaWQgZW5pY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdCAqIHRvdWNoaW5nIGEgbmV0ZGV2IHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpIHtcbi1cdFx0XHRpZiAoZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkKSB7XG4rXHRcdFx0aWYgKFJFQURfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpKSB7XG4gXHRcdFx0XHRpbnQgdW5yZWdfZXJyID0gZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoZW5pYyk7XG4gXG4gXHRcdFx0XHRpZiAodW5yZWdfZXJyKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jXG5pbmRleCAyZmIwZjFlMmZmNTAxLi41YzkzY2E0OTU1MmFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guY1xuQEAgLTE4LDIyICsxOCwyNSBAQFxuICNkZWZpbmUgRU5JQ19NQk9YX1BPTExfVElNRU9VVF9VU1x0NTAwMDAwMFxuICNkZWZpbmUgRU5JQ19NQk9YX1BPTExfSU5URVJWQUxfVVNcdDEwMFxuIFxuLXN0YXRpYyB2b2lkIGVuaWNfbWJveF9maWxsX2hkcihzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkcixcbi1cdFx0XHQgICAgICAgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCwgdTE2IG1zZ19sZW4pXG4rc3RhdGljIHZvaWQgZW5pY19tYm94X2ZpbGxfaGRyKHN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIsIHU4IG1zZ190eXBlLFxuK1x0XHRcdCAgICAgICB1MTYgZHN0X3ZuaWNfaWQsIHUxNiBtc2dfbGVuLCB1NjQgbXNnX251bSlcbiB7XG4gXHRtZW1zZXQoaGRyLCAwLCBzaXplb2YoKmhkcikpO1xuIFx0aGRyLVx1MDAzZWRzdF92bmljX2lkID0gY3B1X3RvX2xlMTYoZHN0X3ZuaWNfaWQpO1xuIFx0aGRyLVx1MDAzZW1zZ190eXBlID0gbXNnX3R5cGU7XG4gXHRoZHItXHUwMDNlbXNnX2xlbiA9IGNwdV90b19sZTE2KG1zZ19sZW4pO1xuLVx0aGRyLVx1MDAzZW1zZ19udW0gPSBjcHVfdG9fbGU2NCgrK2VuaWMtXHUwMDNlbWJveF9tc2dfbnVtKTtcbitcdGhkci1cdTAwM2Vtc2dfbnVtID0gY3B1X3RvX2xlNjQobXNnX251bSk7XG4gfVxuIFxuLWludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsXG4tXHRcdCAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pXG4rc3RhdGljIGludCBlbmljX21ib3hfc2VuZF9tc2dfaWQoc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxuK1x0XHRcdFx0IHUxNiBkc3Rfdm5pY19pZCwgdm9pZCAqcGF5bG9hZCxcbitcdFx0XHRcdCB1MTYgcGF5bG9hZF9sZW4sIHU2NCBtc2dfbnVtLCBib29sIHJldXNlX21zZ19udW0sXG4rXHRcdFx0XHQgdTggZXhwZWN0ZWRfcmVwbHkpXG4ge1xuIFx0c2l6ZV90IHRvdGFsX2xlbiA9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X2hkcikgKyBwYXlsb2FkX2xlbjtcbiBcdHN0cnVjdCB2bmljX3dxICp3cSA9IFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fd3E7XG4gXHRzdHJ1Y3Qgd3FfZW5ldF9kZXNjICpkZXNjO1xuK1x0Ym9vbCByZXBseV9leHBlY3RlZCA9IGZhbHNlO1xuIFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0O1xuIFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiBcdHUxNiB2bGFuX3RhZztcbkBAIC02OCw3ICs3MSwyMSBAQCBpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbi1cdGVuaWNfbWJveF9maWxsX2hkcihlbmljLCBidWYsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgdG90YWxfbGVuKTtcbitcdC8qIFJlcGxpZXMgcmV1c2UgdGhlIGluaXRpYXRpbmcgbWVzc2FnZSBudW1iZXIuICBSZXF1ZXN0cyBhbmRcbitcdCAqIG5vdGlmaWNhdGlvbnMgYWxsb2NhdGUgYSBuZXcgb25lLlxuK1x0ICovXG4rXHRpZiAoIXJldXNlX21zZ19udW0pXG4rXHRcdG1zZ19udW0gPSArK2VuaWMtXHUwMDNlbWJveF9tc2dfbnVtO1xuK1x0aWYgKGV4cGVjdGVkX3JlcGx5KSB7XG4rXHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbitcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gZXhwZWN0ZWRfcmVwbHk7XG4rXHRcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID0gbXNnX251bTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuK1x0XHRyZXBseV9leHBlY3RlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRlbmljX21ib3hfZmlsbF9oZHIoYnVmLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHRvdGFsX2xlbiwgbXNnX251bSk7XG4gXHRpZiAocGF5bG9hZF9sZW4pIHtcbiBcdFx0dm9pZCAqZHN0ID0gYnVmICsgc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKTtcbiBcbkBAIC0xMzksMTggKzE1Niw2NiBAQCBpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxuIFx0XHQgICBcIk1CT1ggc2VuZCBtc2dfdHlwZSAldSBkc3QgJXUgdmxhbiAldSBlcnIgJWRcXG5cIixcbiBcdFx0ICAgbXNnX3R5cGUsIGRzdF92bmljX2lkLCB2bGFuX3RhZywgZXJyKTtcbiB1bmxvY2s6XG4rXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiByZXBseV9leHBlY3RlZCkge1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuK1x0XHRpZiAoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID09IGV4cGVjdGVkX3JlcGx5IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPT0gbXNnX251bSkge1xuK1x0XHRcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XG4rXHRcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPSAwO1xuK1x0XHR9XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbitcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZlbmljLVx1MDAzZW1ib3hfbG9jayk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxuK1x0XHQgICAgICAgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfbGVuKVxuK3tcbitcdHJldHVybiBlbmljX21ib3hfc2VuZF9tc2dfaWQoZW5pYywgbXNnX3R5cGUsIGRzdF92bmljX2lkLCBwYXlsb2FkLFxuK1x0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgMCwgZmFsc2UsIDApO1xuK31cbitcbitzdGF0aWMgaW50IGVuaWNfbWJveF9zZW5kX3JlcGx5KHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSxcbitcdFx0XHRcdHUxNiBkc3Rfdm5pY19pZCwgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfbGVuLFxuK1x0XHRcdFx0dTY0IG1zZ19udW0pXG4re1xuK1x0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZ19pZChlbmljLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHBheWxvYWQsXG4rXHRcdFx0XHQgICAgIHBheWxvYWRfbGVuLCBtc2dfbnVtLCB0cnVlLCAwKTtcbit9XG4rXG4rc3RhdGljIGludCBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KHN0cnVjdCBlbmljICplbmljLCB1OCByZXF1ZXN0X3R5cGUsXG4rXHRcdFx0XHQgICAgIHU4IGV4cGVjdGVkX3JlcGx5LCB2b2lkICpwYXlsb2FkLFxuK1x0XHRcdFx0ICAgICB1MTYgcGF5bG9hZF9sZW4pXG4re1xuK1x0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZ19pZChlbmljLCByZXF1ZXN0X3R5cGUsIEVOSUNfTUJPWF9EU1RfUEYsXG4rXHRcdFx0XHQgICAgIHBheWxvYWQsIHBheWxvYWRfbGVuLCAwLCBmYWxzZSxcbitcdFx0XHRcdCAgICAgZXhwZWN0ZWRfcmVwbHkpO1xuK31cbitcbiBzdGF0aWMgaW50IGVuaWNfbWJveF93YWl0X3JlcGx5KHN0cnVjdCBlbmljICplbmljLCB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBsZWZ0O1xuK1x0aW50IGVyciA9IDA7XG4gXG4gXHRsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wLFxuIFx0XHRcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpKTtcbitcdGlmIChsZWZ0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIEludmFsaWRhdGUgYSByZXF1ZXN0IHRoYXQgdGhlIGhhbmRsZXIgaGFzIG5vdCBhbHJlYWR5IGFjY2VwdGVkLiAgQVxuK1x0ICogZGVsYXllZCByZXBseSBjYW5ub3QgbWF0Y2ggYSBsYXRlciByZXF1ZXN0IGJlY2F1c2UgbWVzc2FnZSBudW1iZXJzIGFyZVxuK1x0ICogbW9ub3RvbmljIGFjcm9zcyBjaGFubmVsIHJlb3Blbi5cbitcdCAqL1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbitcdGlmIChlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpIHtcbitcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcbitcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPSAwO1xuK1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuIFxuLVx0cmV0dXJuIGxlZnQgPyAwIDogLUVUSU1FRE9VVDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIGludCBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmZfaWQsIHUzMiBsaW5rX3N0YXRlKVxuQEAgLTE3OCw4ICsyNDMsOCBAQCBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfY2FwYWJpbGl0eShzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqbXNnLFxuIFx0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XG4gXHRyZXBseS52ZXJzaW9uID0gY3B1X3RvX2xlMzIoRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpO1xuIFxuLVx0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSwgdmZfaWQsXG4tXHRcdFx0XHQgIFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcbitcdHJldHVybiBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSwgdmZfaWQsXG4rXHRcdFx0XHQgICAgXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSksIG1zZ19udW0pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZyxcbkBAIC0yMDgsOCArMjczLDggQEAgc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXG4gXHR9XG4gXG4gXHRyZXBseS5yZXBseS5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNigwKTtcbi1cdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFksIHZmX2lkLFxuLVx0XHRcdFx0IFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcbitcdGVyciA9IGVuaWNfbWJveF9zZW5kX3JlcGx5KGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXG4rXHRcdFx0XHQgICBcdTAwMjZyZXBseSwgc2l6ZW9mKHJlcGx5KSwgbXNnX251bSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTI1Myw4ICszMTgsOCBAQCBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfdW5yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqbXNnLFxuIFx0ZW5pYy1cdTAwM2V2Zl9zdGF0ZVt2Zl9pZF0ucmVnaXN0ZXJlZCA9IGZhbHNlO1xuIFxuIFx0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XG4tXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFksIHZmX2lkLFxuLVx0XHRcdFx0IFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcbitcdGVyciA9IGVuaWNfbWJveF9zZW5kX3JlcGx5KGVuaWMsIEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUExZLCB2Zl9pZCxcbitcdFx0XHRcdCAgIFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpLCBtc2dfbnVtKTtcbiBcbiBcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4gXHRcdG5ldGRldl9pbmZvKGVuaWMtXHUwMDNlbmV0ZGV2LFxuQEAgLTMyNCwxMDUgKzM4OSwxMTYgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3BmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuIFx0XHRcdCAgICBoZHItXHUwMDNlbXNnX3R5cGUsIHZmX2lkLCBlcnIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX2NhcGFiaWxpdHlfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsXG4tXHRcdFx0XHRcdFx0IHZvaWQgKnBheWxvYWQpXG4rc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYywgdTggcmVwbHlfdHlwZSxcbitcdFx0XHRcdCAgICAgIHZvaWQgKnBheWxvYWQsIHU2NCBtc2dfbnVtKVxuIHtcbi1cdHN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDtcbi1cbi1cdGlmIChSRUFEX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KSAhPSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSkge1xuK1x0c3RydWN0IGVuaWNfbWJveF9nZW5lcmljX3JlcGx5ICpyZXBseSA9IHBheWxvYWQ7XG4rXHR1MTYgcmV0X21ham9yID0gbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmV0X21ham9yKTtcbitcdHU2NCBleHBlY3RlZF9tc2dfbnVtO1xuK1x0dTggZXhwZWN0ZWRfdHlwZTtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZlbmljLVx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XG4rXHRleHBlY3RlZF90eXBlID0gZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5O1xuK1x0ZXhwZWN0ZWRfbXNnX251bSA9IGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtO1xuK1x0aWYgKGV4cGVjdGVkX3R5cGUgIT0gcmVwbHlfdHlwZSB8fCBleHBlY3RlZF9tc2dfbnVtICE9IG1zZ19udW0pIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuIFx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbi1cdFx0XHQgICAgXCJNQk9YOiBzdGFsZSBjYXBhYmlsaXR5IHJlcGx5IChleHBlY3RlZCAldSksIGRyb3BcXG5cIixcbi1cdFx0XHQgICAgUkVBRF9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSkpO1xuK1x0XHRcdCAgICBcIk1CT1g6IHN0YWxlIHJlcGx5ICV1LyVsbHUgKGV4cGVjdGVkICV1LyVsbHUpLCBkcm9wXFxuXCIsXG4rXHRcdFx0ICAgIHJlcGx5X3R5cGUsICh1bnNpZ25lZCBsb25nIGxvbmcpbXNnX251bSxcbitcdFx0XHQgICAgZXhwZWN0ZWRfdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylleHBlY3RlZF9tc2dfbnVtKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvcikgPT0gMClcbi1cdFx0ZW5pYy1cdTAwM2VwZl9jYXBfdmVyc2lvbiA9IGxlMzJfdG9fY3B1KHJlcGx5LVx1MDAzZXZlcnNpb24pO1xuLVx0ZWxzZVxuLVx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbi1cdFx0XHQgICAgXCJNQk9YOiBQRiByZWplY3RlZCBjYXBhYmlsaXR5IHJlcXVlc3Q6ICV1LyV1XFxuXCIsXG4tXHRcdFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvciksXG4tXHRcdFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9taW5vcikpO1xuLVx0Y29tcGxldGUoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuLX1cbitcdGlmICghcmV0X21ham9yKSB7XG4rXHRcdHN3aXRjaCAocmVwbHlfdHlwZSkge1xuK1x0XHRjYXNlIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZOiB7XG4rXHRcdFx0c3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyAqY2FwID0gcGF5bG9hZDtcbiBcbi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX3JlZ2lzdGVyX3JlcGx5KHN0cnVjdCBlbmljICplbmljLFxuLVx0XHRcdFx0XHQgICAgICAgdm9pZCAqcGF5bG9hZClcbi17XG4tXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyAqcmVwbHkgPSBwYXlsb2FkO1xuLVxuLVx0aWYgKFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpICE9IEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSkge1xuLVx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbi1cdFx0XHQgICAgXCJNQk9YOiBzdGFsZSByZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxuXCIsXG4tXHRcdFx0ICAgIFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuLVx0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvcikpIHtcbi1cdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4tXHRcdFx0ICAgIFwiTUJPWDogVkYgcmVnaXN0ZXIgcmVqZWN0ZWQgYnkgUEY6ICV1LyV1XFxuXCIsXG4tXHRcdFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvciksXG4tXHRcdFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9taW5vcikpO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkID0gdHJ1ZTtcbitcdFx0XHRXUklURV9PTkNFKGVuaWMtXHUwMDNlcGZfY2FwX3ZlcnNpb24sXG4rXHRcdFx0XHQgICBsZTMyX3RvX2NwdShjYXAtXHUwMDNldmVyc2lvbikpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOlxuK1x0XHRcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkLCB0cnVlKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWTpcbitcdFx0XHRXUklURV9PTkNFKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCwgZmFsc2UpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXHR9XG4rXHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwO1xuK1x0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPSAwO1xuIFx0Y29tcGxldGUoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuLX1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiBcbi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX3VucmVnaXN0ZXJfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsXG4tXHRcdFx0XHRcdFx0IHZvaWQgKnBheWxvYWQpXG4te1xuLVx0c3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDtcbi1cbi1cdGlmIChSRUFEX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KSAhPSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSkge1xuK1x0aWYgKHJldF9tYWpvcilcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4tXHRcdFx0ICAgIFwiTUJPWDogc3RhbGUgdW5yZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxuXCIsXG4tXHRcdFx0ICAgIFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuLVx0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvcikpIHtcbi1cdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4tXHRcdFx0ICAgIFwiTUJPWDogVkYgdW5yZWdpc3RlciByZWplY3RlZCBieSBQRjogJXUvJXVcXG5cIixcbi1cdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21ham9yKSxcbi1cdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21pbm9yKSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQgPSBmYWxzZTtcbi1cdH1cbi1cdGNvbXBsZXRlKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbitcdFx0XHQgICAgXCJNQk9YOiBQRiByZWplY3RlZCByZXBseSB0eXBlICV1OiAldS8ldVxcblwiLFxuK1x0XHRcdCAgICByZXBseV90eXBlLCByZXRfbWFqb3IsXG4rXHRcdFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJldF9taW5vcikpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKnBheWxvYWQpXG4rc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpwYXlsb2FkLFxuK1x0XHRcdFx0XHQgICB1NjQgbXNnX251bSlcbiB7XG4gXHRzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfbm90aWZfbXNnICpub3RpZiA9IHBheWxvYWQ7XG4gXHRzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfYWNrX21zZyBhY2sgPSB7fTtcbitcdHUzMiBsaW5rX3N0YXRlID0gbGUzMl90b19jcHUobm90aWYtXHUwMDNlbGlua19zdGF0ZSk7XG4gXHRpbnQgZXJyO1xuIFxuLVx0c3dpdGNoIChsZTMyX3RvX2NwdShub3RpZi1cdTAwM2VsaW5rX3N0YXRlKSkge1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbitcdHN3aXRjaCAobGlua19zdGF0ZSkge1xuIFx0Y2FzZSBFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEU6XG4tXHRcdGlmICghbmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikpXG4rXHRcdGVuaWMtXHUwMDNldmZfbGlua19zdGF0ZSA9IEVOSUNfVkZfTElOS19TVEFURV9VUDtcbitcdFx0aWYgKGVuaWMtXHUwMDNldmZfbGlua19ydW5uaW5nIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKVxuIFx0XHRcdG5ldGlmX2NhcnJpZXJfb24oZW5pYy1cdTAwM2VuZXRkZXYpO1xuIFx0XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LCBcIk1CT1g6IGxpbmsgc3RhdGUgLVx1MDAzZSBVUFxcblwiKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEVOSUNfTUJPWF9MSU5LX1NUQVRFX0RJU0FCTEU6XG4tXHRcdGlmIChuZXRpZl9jYXJyaWVyX29rKGVuaWMtXHUwMDNlbmV0ZGV2KSlcbitcdFx0ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlID0gRU5JQ19WRl9MSU5LX1NUQVRFX0RPV047XG4rXHRcdGlmIChlbmljLVx1MDAzZXZmX2xpbmtfcnVubmluZyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKVxuIFx0XHRcdG5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbiBcdFx0bmV0ZGV2X2RiZyhlbmljLVx1MDAzZW5ldGRldiwgXCJNQk9YOiBsaW5rIHN0YXRlIC1cdTAwM2UgRE9XTlxcblwiKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldiwgXCJNQk9YOiB1bmtub3duIGxpbmsgc3RhdGUgJXVcXG5cIixcbi1cdFx0XHQgICAgbGUzMl90b19jcHUobm90aWYtXHUwMDNlbGlua19zdGF0ZSkpO1xuK1x0XHRcdCAgICBsaW5rX3N0YXRlKTtcbiBcdFx0YWNrLmFjay5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNihFTklDX01CT1hfRVJSX0dFTkVSSUMpO1xuIFx0XHRicmVhaztcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbiBcbi1cdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0ssXG4tXHRcdFx0XHQgRU5JQ19NQk9YX0RTVF9QRiwgXHUwMDI2YWNrLCBzaXplb2YoYWNrKSk7XG4rXHRlcnIgPSBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0ssXG4rXHRcdFx0XHQgICBFTklDX01CT1hfRFNUX1BGLCBcdTAwMjZhY2ssIHNpemVvZihhY2spLCBtc2dfbnVtKTtcbiBcdGlmIChlcnIgXHUwMDI2XHUwMDI2IG5ldF9yYXRlbGltaXQoKSlcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0ICAgIFwiTUJPWDogZmFpbGVkIHRvIHNlbmQgbGluayBzdGF0ZSBBQ0s6ICVkXFxuXCIsIGVycik7XG4gfVxuIFxuK3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfcmVzZXQoc3RydWN0IGVuaWMgKmVuaWMpXG4re1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbitcdGVuaWMtXHUwMDNldmZfbGlua19zdGF0ZSA9IEVOSUNfVkZfTElOS19TVEFURV9VTktOT1dOO1xuK1x0aWYgKGVuaWMtXHUwMDNldmZfbGlua19ydW5uaW5nIFx1MDAyNlx1MDAyNiBuZXRpZl9jYXJyaWVyX29rKGVuaWMtXHUwMDNlbmV0ZGV2KSlcbitcdFx0bmV0aWZfY2Fycmllcl9vZmYoZW5pYy1cdTAwM2VuZXRkZXYpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xuK31cbitcbit2b2lkIGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3NldF9ydW5uaW5nKHN0cnVjdCBlbmljICplbmljLCBib29sIHJ1bm5pbmcpXG4re1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbitcdGVuaWMtXHUwMDNldmZfbGlua19ydW5uaW5nID0gcnVubmluZztcbitcdGlmIChydW5uaW5nIFx1MDAyNlx1MDAyNiBlbmljLVx1MDAzZXZmX2xpbmtfc3RhdGUgPT0gRU5JQ19WRl9MSU5LX1NUQVRFX1VQKSB7XG4rXHRcdGlmICghbmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikpXG4rXHRcdFx0bmV0aWZfY2Fycmllcl9vbihlbmljLVx1MDAzZW5ldGRldik7XG4rXHR9IGVsc2UgaWYgKG5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKSB7XG4rXHRcdG5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgZW5pY19tYm94X3ZmX3BheWxvYWRfb2soc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxuIFx0XHRcdFx0ICAgIHUxNiBwYXlsb2FkX2xlbiwgc2l6ZV90IG1pbl9sZW4pXG4ge1xuQEAgLTQzOSw2ICs1MTUsOCBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIsIHZvaWQgKnBheWxvYWQsXG4gXHRcdFx0XHQgICAgIHUxNiBwYXlsb2FkX2xlbilcbiB7XG4rXHR1NjQgbXNnX251bSA9IGxlNjRfdG9fY3B1KGhkci1cdTAwM2Vtc2dfbnVtKTtcbitcbiBcdHN3aXRjaCAoaGRyLVx1MDAzZW1zZ190eXBlKSB7XG4gXHRjYXNlIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZOiB7XG4gXHRcdHNpemVfdCBleHAgPSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyk7XG5AQCAtNDQ2LDcgKzUyNCw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYyxcbiBcdFx0aWYgKCFlbmljX21ib3hfdmZfcGF5bG9hZF9vayhlbmljLCBoZHItXHUwMDNlbXNnX3R5cGUsXG4gXHRcdFx0XHRcdCAgICAgcGF5bG9hZF9sZW4sIGV4cCkpXG4gXHRcdFx0cmV0dXJuO1xuLVx0XHRlbmljX21ib3hfdmZfaGFuZGxlX2NhcGFiaWxpdHlfcmVwbHkoZW5pYywgcGF5bG9hZCk7XG4rXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoZW5pYywgaGRyLVx1MDAzZW1zZ190eXBlLCBwYXlsb2FkLCBtc2dfbnVtKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWToge1xuQEAgLTQ1NSw3ICs1MzMsNyBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXG4gXHRcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVx1MDAzZW1zZ190eXBlLFxuIFx0XHRcdFx0XHQgICAgIHBheWxvYWRfbGVuLCBleHApKVxuIFx0XHRcdHJldHVybjtcbi1cdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9yZWdpc3Rlcl9yZXBseShlbmljLCBwYXlsb2FkKTtcbitcdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9yZXBseShlbmljLCBoZHItXHUwMDNlbXNnX3R5cGUsIHBheWxvYWQsIG1zZ19udW0pO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGNhc2UgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFk6IHtcbkBAIC00NjQsNyArNTQyLDcgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuIFx0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbiBcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbiBcdFx0XHRyZXR1cm47XG4tXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfdW5yZWdpc3Rlcl9yZXBseShlbmljLCBwYXlsb2FkKTtcbitcdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9yZXBseShlbmljLCBoZHItXHUwMDNlbXNnX3R5cGUsIHBheWxvYWQsIG1zZ19udW0pO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGNhc2UgRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfTk9USUY6IHtcbkBAIC00NzMsNyArNTUxLDcgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuIFx0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbiBcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbiBcdFx0XHRyZXR1cm47XG4tXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfbGlua19zdGF0ZShlbmljLCBwYXlsb2FkKTtcbitcdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKGVuaWMsIHBheWxvYWQsIG1zZ19udW0pO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGRlZmF1bHQ6XG5AQCAtNTQyLDMyICs2MjAsMzEgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3JlY3ZfaGFuZGxlcihzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqYnVmLFxuIGludCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYylcbiB7XG4gXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfbXNnIHJlcSA9IHt9O1xuK1x0dTMyIHZlcnNpb247XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZW5pYy1cdTAwM2VwZl9jYXBfdmVyc2lvbiA9IDA7XG4tXHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4tXHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFkpO1xuK1x0V1JJVEVfT05DRShlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uLCAwKTtcbiBcdHJlcS52ZXJzaW9uID0gY3B1X3RvX2xlMzIoRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpO1xuIFxuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QsXG4tXHRcdFx0XHQgRU5JQ19NQk9YX0RTVF9QRiwgXHUwMDI2cmVxLCBzaXplb2YocmVxKSk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCAwKTtcbitcdGVyciA9IGVuaWNfbWJveF92Zl9zZW5kX3JlcXVlc3QoZW5pYyxcbitcdFx0XHRcdFx0RU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVRVUVTVCxcbitcdFx0XHRcdFx0RU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFksXG4rXHRcdFx0XHRcdFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xuK1x0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdH1cbiBcbiBcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xuLVx0V1JJVEVfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xuK1x0dmVyc2lvbiA9IFJFQURfT05DRShlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0ICAgIFwiTUJPWDogbm8gY2FwYWJpbGl0eSByZXBseSBmcm9tIFBGXFxuXCIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0aWYgKGVuaWMtXHUwMDNlcGZfY2FwX3ZlcnNpb24gXHUwMDNjIEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8xKSB7XG4rXHRpZiAodmVyc2lvbiBcdTAwM2MgRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0ICAgIFwiTUJPWDogUEYgcmVqZWN0ZWQgY2FwYWJpbGl0eSByZXF1ZXN0IG9yIHJlcG9ydGVkIHVuc3VwcG9ydGVkIHZlcnNpb24gJXVcXG5cIixcbi1cdFx0XHQgICAgZW5pYy1cdTAwM2VwZl9jYXBfdmVyc2lvbik7XG4rXHRcdFx0ICAgIHZlcnNpb24pO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG5AQCAtNTc2LDI4ICs2NTMsMjUgQEAgaW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKVxuIFxuIGludCBlbmljX21ib3hfdmZfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpXG4ge1xuK1x0Ym9vbCByZWdpc3RlcmVkO1xuIFx0aW50IGVycjtcbiBcbi1cdGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuLVx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuLVx0V1JJVEVfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSk7XG4rXHRXUklURV9PTkNFKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCwgZmFsc2UpO1xuIFxuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVFVRVNULFxuLVx0XHRcdFx0IEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApO1xuLVx0aWYgKGVycikge1xuLVx0XHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgMCk7XG4rXHRlcnIgPSBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVFVRVNULFxuK1x0XHRcdFx0XHRFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFksIE5VTEwsIDApO1xuK1x0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdH1cbiBcbiBcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xuLVx0V1JJVEVfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xuK1x0cmVnaXN0ZXJlZCA9IFJFQURfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpO1xuIFx0aWYgKGVycikge1xuIFx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbiBcdFx0XHQgICAgXCJNQk9YOiBWRiByZWdpc3RyYXRpb24gd2l0aCBQRiB0aW1lZCBvdXRcXG5cIik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRpZiAoIWVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZClcbitcdGlmICghcmVnaXN0ZXJlZClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC02MDUsNDMgKzY3OSw0OCBAQCBpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKVxuIFxuIGludCBlbmljX21ib3hfdmZfdW5yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYylcbiB7XG4rXHRib29sIHJlZ2lzdGVyZWQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCFlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpXG4rXHRpZiAoIVJFQURfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbi1cdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSk7XG4tXG4tXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVRVUVTVCxcbi1cdFx0XHRcdCBFTklDX01CT1hfRFNUX1BGLCBOVUxMLCAwKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0V1JJVEVfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xuK1x0ZXJyID0gZW5pY19tYm94X3ZmX3NlbmRfcmVxdWVzdChlbmljLFxuK1x0XHRcdFx0XHRFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVFVRVNULFxuK1x0XHRcdFx0XHRFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSxcbitcdFx0XHRcdFx0TlVMTCwgMCk7XG4rXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuIFxuIFx0ZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7XG4tXHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgMCk7XG4rXHRyZWdpc3RlcmVkID0gUkVBRF9PTkNFKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuLVx0aWYgKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZClcbitcdGlmIChyZWdpc3RlcmVkKVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdHJldHVybiAwO1xuIH1cbiBcbiB2b2lkIGVuaWNfbWJveF9pbml0KHN0cnVjdCBlbmljICplbmljKVxuIHtcbi1cdC8qIG1ib3hfbG9jayBhbmQgbWJveF9jb21wIG11c3QgYmUgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlIHBlclxuK1x0Ym9vbCByZWluaXQgPSBlbmljLVx1MDAzZW1ib3hfaW5pdGlhbGl6ZWQ7XG4rXG4rXHQvKiBNQk9YIGxvY2tzIGFuZCBtYm94X2NvbXAgbXVzdCBiZSBpbml0aWFsaXplZCBleGFjdGx5IG9uY2UgcGVyXG4gXHQgKiBkZXZpY2UgbGlmZXRpbWU7IHRoZSBQRiBzcmlvdl9jb25maWd1cmUgcGF0aCBjYW4gcmUtZW50ZXIgdGhpc1xuIFx0ICogb24gZWFjaCBlbmFibGUgY3ljbGUgd2hlcmUgdGhlc2UgcHJpbWl0aXZlcyBhcmUgYWxyZWFkeSBzZXQgdXAuXG4gXHQgKi9cbi1cdGlmICghZW5pYy1cdTAwM2VtYm94X2luaXRpYWxpemVkKSB7XG4rXHRpZiAoIXJlaW5pdCkge1xuIFx0XHRtdXRleF9pbml0KFx1MDAyNmVuaWMtXHUwMDNlbWJveF9sb2NrKTtcbiBcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbitcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuK1x0XHRlbmljLVx1MDAzZW1ib3hfbXNnX251bSA9IDA7XG4gXHRcdGVuaWMtXHUwMDNlbWJveF9pbml0aWFsaXplZCA9IHRydWU7XG4gXHR9IGVsc2Uge1xuIFx0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4gXHR9XG4tXHRlbmljLVx1MDAzZW1ib3hfbXNnX251bSA9IDA7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuK1x0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcbitcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID0gMDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiBcdGVuaWMtXHUwMDNlYWRtaW5fcnFfaGFuZGxlciA9IGVuaWNfbWJveF9yZWN2X2hhbmRsZXI7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5oXG5pbmRleCAxNWUzMGVlMmIwZWQ5Li42MDQwOWJhZDJmMjg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaFxuQEAgLTg4LDYgKzg4LDggQEAgdm9pZCBlbmljX21ib3hfaW5pdChzdHJ1Y3QgZW5pYyAqZW5pYyk7XG4gaW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCxcbiBcdFx0ICAgICAgIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbik7XG4gaW50IGVuaWNfbWJveF9zZW5kX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHUxNiB2Zl9pZCwgdTMyIGxpbmtfc3RhdGUpO1xuK3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfcmVzZXQoc3RydWN0IGVuaWMgKmVuaWMpO1xuK3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfc2V0X3J1bm5pbmcoc3RydWN0IGVuaWMgKmVuaWMsIGJvb2wgcnVubmluZyk7XG4gaW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKTtcbiBpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKTtcbiBpbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMjI6Mzk6MTQuNzI0NzcxNDg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg4MjkxNjIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBXb3J0aEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggdG8gdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy8qYCkgaXMgd29ydGggZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyOiByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQgZmFsbHMgaW50byBjZXJ0YWluIGNhdGVnb3JpZXMuIFRoZSBrZXkgcG9pbnQgaGVyZSBpcyB0aGF0IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZXMgYWZmZWN0IGNvZGUgdGhhdCdzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuXG5cblRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGV4Y2x1ZGU6XG5cbiogICBVbnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cbiogICBWZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBmb3IgaGFyZHdhcmUgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbiogICBUZWFyZG93biBjYWxsYmFja3MgbGlrZSBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYC5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhlIENpc2NvIFZJQyAoZW5pYykgZW11bGF0ZWQgaW4gUUVNVT8gSSBrbm93IHRoZSB1c3VhbCBzdXNwZWN0czogZTEwMDAsIHZpcnRpby1uZXQsIHRob3NlIGFyZSBzdGFuZGFyZC4gQnV0IGBlbmljYD8gSSBkb24ndCB0aGluayBzby4gSSBuZWVkIHRvIGJlIHN1cmUuIEEgcXVpY2sgc2VhcmNoIG9mIHRoZSBRRU1VIGRvY3VtZW50YXRpb24gY29uZmlybXMgbXkgc3VzcGljaW9uLiBJdCBkb2Vzbid0IGVtdWxhdGUgQ2lzY28gVklDLiBTbywgaXQgYXBwZWFycyB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBhY2N1cmF0ZSBhbmQgc2hvdWxkIGd1aWRlIHVzLCBpZiB3ZSBoYXZlIHRoZSBjb3JyZWN0IGFuYWx5c2lzIG9mIHRoZSBkZXZpY2UuXG5cblRvIGJlIDEwMCUgc3VyZSwgYW5kIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBkcml2ZXIgc2l0cyBpbiB0aGUga2VybmVsLCBJJ2xsIGRvIGEgcXVpY2sgYEtjb25maWdgIHNlYXJjaCBmb3IgYGVuaWNgIHRvIHZlcmlmeSB0aGUgaGFyZHdhcmUgaXQgZHJpdmVzLiBJZiBpdCAqaXMqIHZlbmRvciBzcGVjaWZpYyBhbmQgZGVwZW5kZW50IG9uIGEgcGh5c2ljYWwgY2FyZCwgdGhlbiBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDIyOjM5OjIxLjYwNzY4OTg0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc1OTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRU5JQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnOjY6Y29uZmlnIEVOSUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQ2lzY28gVklDIEV0aGVybmV0IE5JQyBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQyMjozOToyMS42NTM0NTI2NDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ0Mjg1MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGxpbmU6XG5cbioqRGl2aW5nIGludG8gdGhlIENpc2NvIEVOSUMgS2NvbmZpZyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGggcmVnYXJkaW5nIHRoZSBDaXNjbyBFTklDIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZ2AuIFJpZ2h0LCB0aGlzIGlzIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBkcml2ZXIncyBidWlsZC10aW1lIG9wdGlvbnMgd2lsbCBiZSBkZWZpbmVkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYWxsIHRoZSB1c3VhbCBzdXNwZWN0czogbW9kdWxlIGRlcGVuZGVuY2llcywgZmVhdHVyZSBmbGFncyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGNlcnRhaW4gZnVuY3Rpb25hbGl0aWVzIChsaWtlIFNSLUlPViwgcGVyaGFwcywgb3Igc3BlY2lmaWMgb2ZmbG9hZHMpLCBkZWJ1Z2dpbmcgb3B0aW9ucywgYW5kIG1heWJlIGV2ZW4gc29tZSBwZXJmb3JtYW5jZSB0dW5pbmcga25vYnMuIEtub3dpbmcgdGhlIHNwZWNpZmljIEVOSUMgaGFyZHdhcmUgcmV2aXNpb24gaXMga2V5IGhlcmUsIEkgd2lsbCBjaGVjayB0aGUgYXBwcm9wcmlhdGUgS2NvbmZpZyBmaWxlIGZvciBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLCB0b28uIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgdmFsdWVzIHNldC4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZmxleGliaWxpdHkgdGhlIGRyaXZlciBvZmZlcnMgYW5kIHdoYXQgY29tcGlsZS10aW1lIGRlY2lzaW9ucyBhcmUgYXZhaWxhYmxlIHRvIG9wdGltaXplIGl0IGZvciBhIHBhcnRpY3VsYXIgZGVwbG95bWVudCBzY2VuYXJpby4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUyMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDIyOjM5OjIzLjc5NzczOTI5OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBDaXNjbyBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgRU5JQ1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkNpc2NvIFZJQyBFdGhlcm5ldCBOSUMgU3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICAgOTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBjYXJkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQyMjozOToyMy43OTc3OTg5MzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTY1MDAxMDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIEkndmUgZ290IHRoaXMgcmlnaHQuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoZSBjcml0ZXJpYSBmb3IgZnV6emluZy4gSSBoYXZlIGEgZmVlbGluZyB0aGlzIGlzIGEgY2xhc3NpYyBjYXNlIHdoZXJlIHdlIGNhbid0IHJlbGlhYmx5IGZ1enouIEkgbmVlZCB0byBjb25zaWRlciB0aGVzZSB0d28gcnVsZXMgYWdhaW46IEZpcnN0bHksIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW5oZXJlbnRseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBoYXJkd2FyZS4gU2Vjb25kbHksIGNvZGUgdGhhdCBsaXZlcyB3aXRoaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMsIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIG9yIGBhbWRncHVgLCBzcGVjaWZpY2FsbHkgY29kZSB0aGF0IG5lZWRzIHJlYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVS5cblxuVGhlIGRyaXZlciB3ZSBhcmUgbG9va2luZyBhdCBpcyB0aGUgYGVuaWNgIGRyaXZlciwgd2hpY2ggZnJvbSBteSBleHBlcmllbmNlLCBoYW5kbGVzIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgc3VwcG9ydC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGV0aGVybmV0IGRyaXZlciBmb3IgQ2lzY28gVUNTIGFuZCBDaXNjbyBWSUMgaGFyZHdhcmUsIGluY2x1ZGluZyBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMuIEFuZCBjcml0aWNhbGx5LCBpdCAqbmVlZHMqIHBoeXNpY2FsIENpc2NvIFZJQyBoYXJkd2FyZSwgc29tZXRoaW5nIHRoYXQncyBub3QgZ29pbmcgdG8gYmUgYXZhaWxhYmxlIGluIFFFTVUgb3IgYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cblJpZ2h0LCBzbyB0aGF0J3MgcHJldHR5IGNsZWFyLiBUaGlzIHBhdGNoIGZhbGxzIHBlcmZlY3RseSB1bmRlciAqYm90aCogb2YgdGhvc2UgZGlzcXVhbGlmeWluZyBydWxlcywgcmVhbGx5LiBJdCdzIHZlbmRvci1zcGVjaWZpYywgaGFyZHdhcmUtZGVwZW5kZW50IFBDSWUgZHJpdmVyIGNvZGUsIGFuZCBpbmhlcmVudGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLiBUaGlzIG1ha2VzIHRoZSBhbnN3ZXIgdmVyeSBzaW1wbGUuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaGFzIHRvIGJlIGBmYWxzZWAuXG5cbkxldCBtZSB0cmlwbGUtY2hlY2sgYWxsIHRoZSBwYXJhbWV0ZXJzIGp1c3QgdG8gYmUgY2VydGFpbi4gSSB3YW50IHRvIGJlIDEwMCUgYWNjdXJhdGUuXG5cbiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWAgLSBUaGF0J3MgY29ycmVjdC5cbiogICBgRm9jdXNTeW1ib2xzOiBbXWAgLSBNYWtlcyBzZW5zZSwgbm8gc3BlY2lmaWMgc3ltYm9scyB0byB0YXJnZXQuXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtdYCAtIE5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC5cbiogICBgUmVhc29uaW5nOiBDb25jaXNlIGV4cGxhbmF0aW9uYCAtIFRoZSByZWFzb25pbmcgaXMgYWNjdXJhdGUgYW5kIGNvbmNpc2UuXG5cbkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSdtIGdvaW5nIHRvIGNvbW1pdCB0aGlzIGFuZCBjYWxsIGl0IGdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTQ1LCJPdXRwdXRUb2tlbnMiOjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMjI6Mzk6MjcuMzYyODAyNDUxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciByZXF1aXJpbmcgZGVkaWNhdGVkIENpc2NvIFZJQyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZXJlZm9yZSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciByZXF1aXJpbmcgZGVkaWNhdGVkIENpc2NvIFZJQyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZXJlZm9yZSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQyMjozOToyNy4zNjI4MjcwNTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow68zcd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-30 22:35:59 +0000 UTC FinishedAt: 2026-08-30 22:39:29 +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+CgkJCTx0ZD4yMDI2LzA4LzMwIDIyOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXIgcmVxdWlyaW5nIGRlZGljYXRlZCBDaXNjbyBWSUMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBUaGVyZWZvcmUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAyMjozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNkMWZlYjVkMThhNThmYWE2NWZhY2MwYjNlZjU5OTAxMmRmOGRjYmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAzMCAyMjozOToxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXG5pbmRleCA0YTY3OTQ3Y2ZiOWYzLi43YTUwOWEwNTY5OTAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXG5AQCAtMTM3LDYgJiM0MzsxMzcsMTIgQEAgc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlIHtcbiBcdHU4IG1hY19hZGRyW0VUSF9BTEVOXTtcbiB9O1xuIFxuJiM0MztlbnVtIGVuaWNfdmZfbGlua19zdGF0ZSB7XG4mIzQzO1x0RU5JQ19WRl9MSU5LX1NUQVRFX1VOS05PV04sXG4mIzQzO1x0RU5JQ19WRl9MSU5LX1NUQVRFX0RPV04sXG4mIzQzO1x0RU5JQ19WRl9MSU5LX1NUQVRFX1VQLFxuJiM0Mzt9O1xuJiM0MztcbiAvKiBlbmljX3Jmc19mbHRyX25vZGUgLSByZnMgZmlsdGVyIG5vZGUgaW4gaGFzaCB0YWJsZVxuICAqXHRAQGtleXM6IElQdjQgNSB0dXBsZVxuICAqXHRAZmxvd19pZDogZmxvd19pZCBvZiBjbHNmIGZpbHRlciBwcm92aWRlZCBieSBrZXJuZWxcbkBAIC0zMTIsMTkgJiM0MzszMTgsMjUgQEAgc3RydWN0IGVuaWMge1xuIFx0dW5zaWduZWQgaW50IGFkbWluX21zZ19jb3VudDtcdC8qIGN1cnJlbnQgZGVwdGggb2YgYWRtaW5fbXNnX2xpc3QgKi9cbiBcdHZvaWQgKCphZG1pbl9ycV9oYW5kbGVyKShzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqYnVmLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGludCBsZW4pO1xuJiM0MztcdC8qIFRoZSBQRiBpcyBhdXRob3JpdGF0aXZlIGZvciBhIFYyIFZGJiMzOTtzIGNhcnJpZXIuICBLZWVwIHRoZSBsYXN0XG4mIzQzO1x0ICogbm90aWZpY2F0aW9uIGFjcm9zcyBhbiBvcmRpbmFyeSBuZXRkZXYgY2xvc2Uvb3BlbiBhbmQgc2VyaWFsaXplIGl0XG4mIzQzO1x0ICogYWdhaW5zdCB0aGUgb3Blbi9zdG9wIGNhcnJpZXIgdHJhbnNpdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGlubG9ja190IHZmX2xpbmtfc3RhdGVfbG9jaztcbiYjNDM7XHRlbnVtIGVuaWNfdmZfbGlua19zdGF0ZSB2Zl9saW5rX3N0YXRlO1xuJiM0MztcdGJvb2wgdmZfbGlua19ydW5uaW5nO1xuIFxuIFx0LyogTUJPWCBwcm90b2NvbCBzdGF0ZSDigJQgbWJveF9sb2NrIHNlcmlhbGl6ZXMgYWRtaW4gV1Egc2VuZHMgKi9cbiBcdHN0cnVjdCBtdXRleCBtYm94X2xvY2s7XG4gXHR1NjQgbWJveF9tc2dfbnVtO1xuLVx0LyogTUJPWCByZXF1ZXN0LXJlcGx5IHN0YXRlLiAgbWJveF9leHBlY3RlZF9yZXBseSBpcyB3cml0dGVuIGFuZFxuLVx0ICogY2xlYXJlZCBieSB0aGUgcHJvY2Vzcy1jb250ZXh0IHJlcXVlc3QgaGVscGVycyAoY2FwYWJpbGl0eS9yZWdpc3Rlci9cbi1cdCAqIHVucmVnaXN0ZXIpIGFuZCBvbmx5IHJlYWQgYnkgdGhlIGFkbWluX21zZ193b3JrIHJlY2VpdmUgaGFuZGxlcnMsIHNvXG4tXHQgKiBpdCBpcyBhbm5vdGF0ZWQgd2l0aCBSRUFEX09OQ0UoKS9XUklURV9PTkNFKCkgcmF0aGVyIHRoYW4gbG9ja2VkOlxuLVx0ICogb25seSBvbmUgcmVxdWVzdCBpcyBpbiBmbGlnaHQgYXQgYSB0aW1lIChyZXF1ZXN0ZXJzIHJ1biB1bmRlciBSVE5MIG9yXG4tXHQgKiBzaW5nbGUtdGhyZWFkZWQgcHJvYmUvcmVtb3ZlKSwgc28gZWFjaCByZXF1ZXN0IGlzIHNlcmlhbGl6ZWQgYW5kIGl0c1xuLVx0ICogcmVwbHkgY29tcGxldGVzIG1ib3hfY29tcCBiZWZvcmUgdGhlIG5leHQgcmVxdWVzdCBpcyBpc3N1ZWQuXG4mIzQzO1x0LyogTUJPWCByZXF1ZXN0LXJlcGx5IHN0YXRlLiAgRXhpc3RpbmcgcmVxdWVzdCBjYWxsZXJzIGFsbG93IG9ubHkgb25lXG4mIzQzO1x0ICogcmVxdWVzdCBpbiBmbGlnaHQuICBUaGUgc3RhdGUgbG9jayBhcmJpdHJhdGVzIHJlcGx5IGFjY2VwdGFuY2UgYWdhaW5zdFxuJiM0MztcdCAqIHRpbWVvdXQgaW52YWxpZGF0aW9uLCB3aGlsZSBtYm94X2NvbXAgcHVibGlzaGVzIHRoZSBhY2NlcHRlZCByZXN1bHQgdG9cbiYjNDM7XHQgKiB0aGUgcmVxdWVzdGVyLlxuIFx0ICovXG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBtYm94X2NvbXA7XG4mIzQzO1x0c3BpbmxvY2tfdCBtYm94X3N0YXRlX2xvY2s7XHQvKiBwcm90ZWN0cyBleHBlY3RlZCByZXBseSBzdGF0ZSAqL1xuJiM0MztcdHU2NCBtYm94X2V4cGVjdGVkX21zZ19udW07XG4gXHR1OCBtYm94X2V4cGVjdGVkX3JlcGx5O1xuIFx0Ym9vbCBtYm94X2luaXRpYWxpemVkO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jXG5pbmRleCAwYmFlZjdhMTIwZWM2Li4xNGQxNjM3YTQzNDJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uY1xuQEAgLTE4MDAsNiAmIzQzOzE4MDAsOCBAQCBzdGF0aWMgaW50IGVuaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFxuIFx0ZW5pY19ub3RpZnlfdGltZXJfc3RhcnQoZW5pYyk7XG4gXHRlbmljX3Jmc190aW1lcl9zdGFydChlbmljKTtcbiYjNDM7XHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3NldF9ydW5uaW5nKGVuaWMsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTg1Myw3ICYjNDM7MTg1NSwxMCBAQCBzdGF0aWMgaW50IGVuaWNfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZW5pYy1cdTAwM2VycV9jb3VudDsgaSYjNDM7JiM0MzspXG4gXHRcdG5hcGlfZGlzYWJsZShcdTAwMjZlbmljLVx1MDAzZW5hcGlbaV0pO1xuIFxuLVx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcbiYjNDM7XHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3NldF9ydW5uaW5nKGVuaWMsIGZhbHNlKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuIFx0aWYgKHZuaWNfZGV2X2dldF9pbnRyX21vZGUoZW5pYy1cdTAwM2V2ZGV2KSA9PSBWTklDX0RFVl9JTlRSX01PREVfTVNJWClcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZW5pYy1cdTAwM2V3cV9jb3VudDsgaSYjNDM7JiM0MzspXG4gXHRcdFx0bmFwaV9kaXNhYmxlKFx1MDAyNmVuaWMtXHUwMDNlbmFwaVtlbmljX2NxX3dxKGVuaWMsIGkpXSk7XG5AQCAtMjIwMSw5ICYjNDM7MjIwNiwxMCBAQCBzdGF0aWMgdm9pZCBlbmljX2FkbWluX2NoYW5fcmVvcGVuKHN0cnVjdCBlbmljICplbmljKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHQvKiBJbnN0YWxsIHRoZSBNQk9YIHJlY2VpdmUgaGFuZGxlciBhbmQgcmVzZXQgdGhlIHNlcXVlbmNlIG51bWJlclxuLVx0ICogYmVmb3JlIG9wZW5pbmcgdGhlIGNoYW5uZWwsIHNvIHRoZSBoYW5kbGVyIGlzIGluIHBsYWNlIGJlZm9yZSB0aGVcbi1cdCAqIGFkbWluIGludGVycnVwdCBpcyB1bm1hc2tlZCBhbmQgbm8gZWFybHkgY29tcGxldGlvbiBpcyBkcm9wcGVkLlxuJiM0MztcdC8qIEluc3RhbGwgdGhlIE1CT1ggcmVjZWl2ZSBoYW5kbGVyIGFuZCBjbGVhciBwZW5kaW5nIHJlcGx5IHN0YXRlIGJlZm9yZVxuJiM0MztcdCAqIG9wZW5pbmcgdGhlIGNoYW5uZWwsIHNvIHRoZSBoYW5kbGVyIGlzIGluIHBsYWNlIGJlZm9yZSB0aGUgYWRtaW5cbiYjNDM7XHQgKiBpbnRlcnJ1cHQgaXMgdW5tYXNrZWQgYW5kIG5vIGVhcmx5IGNvbXBsZXRpb24gaXMgZHJvcHBlZC4gIEtlZXAgdGhlXG4mIzQzO1x0ICogc2VxdWVuY2UgbnVtYmVyIG1vbm90b25pYyBhY3Jvc3MgY2hhbm5lbCBnZW5lcmF0aW9ucy5cbiBcdCAqL1xuIFx0ZW5pY19tYm94X2luaXQoZW5pYyk7XG4gXG5AQCAtMjIxNSw3ICYjNDM7MjIyMSw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fY2hhbl9yZW9wZW4oc3RydWN0IGVuaWMgKmVuaWMpXG4gXHQgKiByZWdpc3RyYXRpb24gb3ZlciBhIGRlYWQgY2hhbm5lbC5cbiBcdCAqL1xuIFx0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpXG4tXHRcdGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuJiM0MztcdFx0V1JJVEVfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQsIGZhbHNlKTtcbiBcbiBcdGVyciA9IGVuaWNfYWRtaW5fY2hhbm5lbF9vcGVuKGVuaWMpO1xuIFx0aWYgKGVycikge1xuQEAgLTIyNzEsNiAmIzQzOzIyNzcsOCBAQCBzdGF0aWMgdm9pZCBlbmljX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0ZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKGVuaWMpO1xuIFxuIFx0ZW5pY19zdG9wKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3Jlc2V0KGVuaWMpO1xuIFxuIFx0ZW5pY19kZXZfc29mdF9yZXNldChlbmljKTtcbiBcdGVuaWNfcmVzZXRfYWRkcl9saXN0cyhlbmljKTtcbkBAIC0yMzE1LDYgJiM0MzsyMzIzLDggQEAgc3RhdGljIHZvaWQgZW5pY190eF9oYW5nX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGVuaWNfZGV2X2hhbmdfbm90aWZ5KGVuaWMpO1xuIFx0ZW5pY19zdG9wKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3Jlc2V0KGVuaWMpO1xuIFxuIFx0ZW5pY19kZXZfaGFuZ19yZXNldChlbmljKTtcbiBcdGVuaWNfcmVzZXRfYWRkcl9saXN0cyhlbmljKTtcbkBAIC0zMDE1LDYgJiM0MzszMDI1LDcgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0ZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRlbmljLVx1MDAzZW5ldGRldiA9IG5ldGRldjtcbiBcdGVuaWMtXHUwMDNlcGRldiA9IHBkZXY7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xuIFxuIFx0LyogU2V0dXAgUENJIHJlc291cmNlc1xuIFx0ICovXG5AQCAtMzMzOSw3ICYjNDM7MzM1MCw3IEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcbiBlcnJfb3V0X2FkbWluX2Nsb3NlOlxuIFx0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpIHtcbi1cdFx0aWYgKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCkge1xuJiM0MztcdFx0aWYgKFJFQURfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpKSB7XG4gXHRcdFx0aW50IHVucmVnX2VyciA9IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKGVuaWMpO1xuIFxuIFx0XHRcdGlmICh1bnJlZ19lcnIpXG5AQCAtMzM5Miw3ICYjNDM7MzQwMyw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHQgKiB0b3VjaGluZyBhIG5ldGRldiB0aGF0IGlzIGJlaW5nIHRvcm4gZG93bi5cbiBcdFx0ICovXG4gXHRcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKSB7XG4tXHRcdFx0aWYgKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCkge1xuJiM0MztcdFx0XHRpZiAoUkVBRF9PTkNFKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCkpIHtcbiBcdFx0XHRcdGludCB1bnJlZ19lcnIgPSBlbmljX21ib3hfdmZfdW5yZWdpc3RlcihlbmljKTtcbiBcbiBcdFx0XHRcdGlmICh1bnJlZ19lcnIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmNcbmluZGV4IDJmYjBmMWUyZmY1MDEuLjVjOTNjYTQ5NTUyYWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jXG5AQCAtMTgsMjIgJiM0MzsxOCwyNSBAQFxuICNkZWZpbmUgRU5JQ19NQk9YX1BPTExfVElNRU9VVF9VU1x0NTAwMDAwMFxuICNkZWZpbmUgRU5JQ19NQk9YX1BPTExfSU5URVJWQUxfVVNcdDEwMFxuIFxuLXN0YXRpYyB2b2lkIGVuaWNfbWJveF9maWxsX2hkcihzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkcixcbi1cdFx0XHQgICAgICAgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCwgdTE2IG1zZ19sZW4pXG4mIzQzO3N0YXRpYyB2b2lkIGVuaWNfbWJveF9maWxsX2hkcihzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLCB1OCBtc2dfdHlwZSxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiBkc3Rfdm5pY19pZCwgdTE2IG1zZ19sZW4sIHU2NCBtc2dfbnVtKVxuIHtcbiBcdG1lbXNldChoZHIsIDAsIHNpemVvZigqaGRyKSk7XG4gXHRoZHItXHUwMDNlZHN0X3ZuaWNfaWQgPSBjcHVfdG9fbGUxNihkc3Rfdm5pY19pZCk7XG4gXHRoZHItXHUwMDNlbXNnX3R5cGUgPSBtc2dfdHlwZTtcbiBcdGhkci1cdTAwM2Vtc2dfbGVuID0gY3B1X3RvX2xlMTYobXNnX2xlbik7XG4tXHRoZHItXHUwMDNlbXNnX251bSA9IGNwdV90b19sZTY0KCYjNDM7JiM0MztlbmljLVx1MDAzZW1ib3hfbXNnX251bSk7XG4mIzQzO1x0aGRyLVx1MDAzZW1zZ19udW0gPSBjcHVfdG9fbGU2NChtc2dfbnVtKTtcbiB9XG4gXG4taW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCxcbi1cdFx0ICAgICAgIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbilcbiYjNDM7c3RhdGljIGludCBlbmljX21ib3hfc2VuZF9tc2dfaWQoc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxuJiM0MztcdFx0XHRcdCB1MTYgZHN0X3ZuaWNfaWQsIHZvaWQgKnBheWxvYWQsXG4mIzQzO1x0XHRcdFx0IHUxNiBwYXlsb2FkX2xlbiwgdTY0IG1zZ19udW0sIGJvb2wgcmV1c2VfbXNnX251bSxcbiYjNDM7XHRcdFx0XHQgdTggZXhwZWN0ZWRfcmVwbHkpXG4ge1xuIFx0c2l6ZV90IHRvdGFsX2xlbiA9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X2hkcikgJiM0MzsgcGF5bG9hZF9sZW47XG4gXHRzdHJ1Y3Qgdm5pY193cSAqd3EgPSBcdTAwMjZlbmljLVx1MDAzZWFkbWluX3dxO1xuIFx0c3RydWN0IHdxX2VuZXRfZGVzYyAqZGVzYztcbiYjNDM7XHRib29sIHJlcGx5X2V4cGVjdGVkID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQ7XG4gXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuIFx0dTE2IHZsYW5fdGFnO1xuQEAgLTY4LDcgJiM0Mzs3MSwyMSBAQCBpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbi1cdGVuaWNfbWJveF9maWxsX2hkcihlbmljLCBidWYsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgdG90YWxfbGVuKTtcbiYjNDM7XHQvKiBSZXBsaWVzIHJldXNlIHRoZSBpbml0aWF0aW5nIG1lc3NhZ2UgbnVtYmVyLiAgUmVxdWVzdHMgYW5kXG4mIzQzO1x0ICogbm90aWZpY2F0aW9ucyBhbGxvY2F0ZSBhIG5ldyBvbmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFyZXVzZV9tc2dfbnVtKVxuJiM0MztcdFx0bXNnX251bSA9ICYjNDM7JiM0MztlbmljLVx1MDAzZW1ib3hfbXNnX251bTtcbiYjNDM7XHRpZiAoZXhwZWN0ZWRfcmVwbHkpIHtcbiYjNDM7XHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZlbmljLVx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XG4mIzQzO1x0XHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSBleHBlY3RlZF9yZXBseTtcbiYjNDM7XHRcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID0gbXNnX251bTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiYjNDM7XHRcdHJlcGx5X2V4cGVjdGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVuaWNfbWJveF9maWxsX2hkcihidWYsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgdG90YWxfbGVuLCBtc2dfbnVtKTtcbiBcdGlmIChwYXlsb2FkX2xlbikge1xuIFx0XHR2b2lkICpkc3QgPSBidWYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKTtcbiBcbkBAIC0xMzksMTggJiM0MzsxNTYsNjYgQEAgaW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCxcbiBcdFx0ICAgXCYjMzQ7TUJPWCBzZW5kIG1zZ190eXBlICV1IGRzdCAldSB2bGFuICV1IGVyciAlZFxcblwmIzM0OyxcbiBcdFx0ICAgbXNnX3R5cGUsIGRzdF92bmljX2lkLCB2bGFuX3RhZywgZXJyKTtcbiB1bmxvY2s6XG4mIzQzO1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgcmVwbHlfZXhwZWN0ZWQpIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZlbmljLVx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XG4mIzQzO1x0XHRpZiAoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID09IGV4cGVjdGVkX3JlcGx5IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID09IG1zZ19udW0pIHtcbiYjNDM7XHRcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcbiYjNDM7XHRcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuJiM0MztcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZlbmljLVx1MDAzZW1ib3hfbG9jayk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7aW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCxcbiYjNDM7XHRcdCAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnX2lkKGVuaWMsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgcGF5bG9hZCxcbiYjNDM7XHRcdFx0XHQgICAgIHBheWxvYWRfbGVuLCAwLCBmYWxzZSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW5pY19tYm94X3NlbmRfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxuJiM0MztcdFx0XHRcdHUxNiBkc3Rfdm5pY19pZCwgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfbGVuLFxuJiM0MztcdFx0XHRcdHU2NCBtc2dfbnVtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZ19pZChlbmljLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHBheWxvYWQsXG4mIzQzO1x0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgbXNnX251bSwgdHJ1ZSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW5pY19tYm94X3ZmX3NlbmRfcmVxdWVzdChzdHJ1Y3QgZW5pYyAqZW5pYywgdTggcmVxdWVzdF90eXBlLFxuJiM0MztcdFx0XHRcdCAgICAgdTggZXhwZWN0ZWRfcmVwbHksIHZvaWQgKnBheWxvYWQsXG4mIzQzO1x0XHRcdFx0ICAgICB1MTYgcGF5bG9hZF9sZW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnX2lkKGVuaWMsIHJlcXVlc3RfdHlwZSwgRU5JQ19NQk9YX0RTVF9QRixcbiYjNDM7XHRcdFx0XHQgICAgIHBheWxvYWQsIHBheWxvYWRfbGVuLCAwLCBmYWxzZSxcbiYjNDM7XHRcdFx0XHQgICAgIGV4cGVjdGVkX3JlcGx5KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGVuaWNfbWJveF93YWl0X3JlcGx5KHN0cnVjdCBlbmljICplbmljLCB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBsZWZ0O1xuJiM0MztcdGludCBlcnIgPSAwO1xuIFxuIFx0bGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCxcbiBcdFx0XHRcdFx0ICAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKSk7XG4mIzQzO1x0aWYgKGxlZnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogSW52YWxpZGF0ZSBhIHJlcXVlc3QgdGhhdCB0aGUgaGFuZGxlciBoYXMgbm90IGFscmVhZHkgYWNjZXB0ZWQuICBBXG4mIzQzO1x0ICogZGVsYXllZCByZXBseSBjYW5ub3QgbWF0Y2ggYSBsYXRlciByZXF1ZXN0IGJlY2F1c2UgbWVzc2FnZSBudW1iZXJzIGFyZVxuJiM0MztcdCAqIG1vbm90b25pYyBhY3Jvc3MgY2hhbm5lbCByZW9wZW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiYjNDM7XHRpZiAoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KSB7XG4mIzQzO1x0XHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwO1xuJiM0MztcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPSAwO1xuJiM0MztcdFx0ZXJyID0gLUVUSU1FRE9VVDtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuIFxuLVx0cmV0dXJuIGxlZnQgPyAwIDogLUVUSU1FRE9VVDtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBpbnQgZW5pY19tYm94X3NlbmRfbGlua19zdGF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZmX2lkLCB1MzIgbGlua19zdGF0ZSlcbkBAIC0xNzgsOCAmIzQzOzI0Myw4IEBAIHN0YXRpYyBpbnQgZW5pY19tYm94X3BmX2hhbmRsZV9jYXBhYmlsaXR5KHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXG4gXHRyZXBseS5yZXBseS5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNigwKTtcbiBcdHJlcGx5LnZlcnNpb24gPSBjcHVfdG9fbGUzMihFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSk7XG4gXG4tXHRyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZLCB2Zl9pZCxcbi1cdFx0XHRcdCAgXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSkpO1xuJiM0MztcdHJldHVybiBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSwgdmZfaWQsXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpLCBtc2dfbnVtKTtcbiB9XG4gXG4gc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXG5AQCAtMjA4LDggJiM0MzsyNzMsOCBAQCBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZyxcbiBcdH1cbiBcbiBcdHJlcGx5LnJlcGx5LnJldF9tYWpvciA9IGNwdV90b19sZTE2KDApO1xuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXG4tXHRcdFx0XHQgXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSkpO1xuJiM0MztcdGVyciA9IGVuaWNfbWJveF9zZW5kX3JlcGx5KGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXG4mIzQzO1x0XHRcdFx0ICAgXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSksIG1zZ19udW0pO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC0yNTMsOCAmIzQzOzMxOCw4IEBAIHN0YXRpYyBpbnQgZW5pY19tYm94X3BmX2hhbmRsZV91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXG4gXHRlbmljLVx1MDAzZXZmX3N0YXRlW3ZmX2lkXS5yZWdpc3RlcmVkID0gZmFsc2U7XG4gXG4gXHRyZXBseS5yZXBseS5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNigwKTtcbi1cdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXG4tXHRcdFx0XHQgXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSkpO1xuJiM0MztcdGVyciA9IGVuaWNfbWJveF9zZW5kX3JlcGx5KGVuaWMsIEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUExZLCB2Zl9pZCxcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZyZXBseSwgc2l6ZW9mKHJlcGx5KSwgbXNnX251bSk7XG4gXG4gXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuIFx0XHRuZXRkZXZfaW5mbyhlbmljLVx1MDAzZW5ldGRldixcbkBAIC0zMjQsMTA1ICYjNDM7Mzg5LDExNiBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfcGZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXG4gXHRcdFx0ICAgIGhkci1cdTAwM2Vtc2dfdHlwZSwgdmZfaWQsIGVycik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfY2FwYWJpbGl0eV9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYyxcbi1cdFx0XHRcdFx0XHQgdm9pZCAqcGF5bG9hZClcbiYjNDM7c3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYywgdTggcmVwbHlfdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICB2b2lkICpwYXlsb2FkLCB1NjQgbXNnX251bSlcbiB7XG4tXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnICpyZXBseSA9IHBheWxvYWQ7XG4tXG4tXHRpZiAoUkVBRF9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSkgIT0gRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFkpIHtcbiYjNDM7XHRzdHJ1Y3QgZW5pY19tYm94X2dlbmVyaWNfcmVwbHkgKnJlcGx5ID0gcGF5bG9hZDtcbiYjNDM7XHR1MTYgcmV0X21ham9yID0gbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmV0X21ham9yKTtcbiYjNDM7XHR1NjQgZXhwZWN0ZWRfbXNnX251bTtcbiYjNDM7XHR1OCBleHBlY3RlZF90eXBlO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuJiM0MztcdGV4cGVjdGVkX3R5cGUgPSBlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHk7XG4mIzQzO1x0ZXhwZWN0ZWRfbXNnX251bSA9IGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtO1xuJiM0MztcdGlmIChleHBlY3RlZF90eXBlICE9IHJlcGx5X3R5cGUgfHwgZXhwZWN0ZWRfbXNnX251bSAhPSBtc2dfbnVtKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZlbmljLVx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XG4gXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuLVx0XHRcdCAgICBcJiMzNDtNQk9YOiBzdGFsZSBjYXBhYmlsaXR5IHJlcGx5IChleHBlY3RlZCAldSksIGRyb3BcXG5cJiMzNDssXG4tXHRcdFx0ICAgIFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpKTtcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O01CT1g6IHN0YWxlIHJlcGx5ICV1LyVsbHUgKGV4cGVjdGVkICV1LyVsbHUpLCBkcm9wXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgcmVwbHlfdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyltc2dfbnVtLFxuJiM0MztcdFx0XHQgICAgZXhwZWN0ZWRfdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylleHBlY3RlZF9tc2dfbnVtKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvcikgPT0gMClcbi1cdFx0ZW5pYy1cdTAwM2VwZl9jYXBfdmVyc2lvbiA9IGxlMzJfdG9fY3B1KHJlcGx5LVx1MDAzZXZlcnNpb24pO1xuLVx0ZWxzZVxuLVx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbi1cdFx0XHQgICAgXCYjMzQ7TUJPWDogUEYgcmVqZWN0ZWQgY2FwYWJpbGl0eSByZXF1ZXN0OiAldS8ldVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21ham9yKSxcbi1cdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21pbm9yKSk7XG4tXHRjb21wbGV0ZShcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4tfVxuJiM0MztcdGlmICghcmV0X21ham9yKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKHJlcGx5X3R5cGUpIHtcbiYjNDM7XHRcdGNhc2UgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFk6IHtcbiYjNDM7XHRcdFx0c3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyAqY2FwID0gcGF5bG9hZDtcbiBcbi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX3JlZ2lzdGVyX3JlcGx5KHN0cnVjdCBlbmljICplbmljLFxuLVx0XHRcdFx0XHQgICAgICAgdm9pZCAqcGF5bG9hZClcbi17XG4tXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyAqcmVwbHkgPSBwYXlsb2FkO1xuLVxuLVx0aWYgKFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpICE9IEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSkge1xuLVx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbi1cdFx0XHQgICAgXCYjMzQ7TUJPWDogc3RhbGUgcmVnaXN0ZXIgcmVwbHkgKGV4cGVjdGVkICV1KSwgZHJvcFxcblwmIzM0Oyxcbi1cdFx0XHQgICAgUkVBRF9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSkpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRpZiAobGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21ham9yKSkge1xuLVx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbi1cdFx0XHQgICAgXCYjMzQ7TUJPWDogVkYgcmVnaXN0ZXIgcmVqZWN0ZWQgYnkgUEY6ICV1LyV1XFxuXCYjMzQ7LFxuLVx0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWFqb3IpLFxuLVx0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWlub3IpKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCA9IHRydWU7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VwZl9jYXBfdmVyc2lvbixcbiYjNDM7XHRcdFx0XHQgICBsZTMyX3RvX2NwdShjYXAtXHUwMDNldmVyc2lvbikpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOlxuJiM0MztcdFx0XHRXUklURV9PTkNFKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCwgdHJ1ZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWTpcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQsIGZhbHNlKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXHR9XG4mIzQzO1x0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcbiYjNDM7XHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfbXNnX251bSA9IDA7XG4gXHRjb21wbGV0ZShcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4tfVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiBcbi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX3VucmVnaXN0ZXJfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsXG4tXHRcdFx0XHRcdFx0IHZvaWQgKnBheWxvYWQpXG4te1xuLVx0c3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDtcbi1cbi1cdGlmIChSRUFEX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KSAhPSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSkge1xuJiM0MztcdGlmIChyZXRfbWFqb3IpXG4gXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuLVx0XHRcdCAgICBcJiMzNDtNQk9YOiBzdGFsZSB1bnJlZ2lzdGVyIHJlcGx5IChleHBlY3RlZCAldSksIGRyb3BcXG5cJiMzNDssXG4tXHRcdFx0ICAgIFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuLVx0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvcikpIHtcbi1cdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4tXHRcdFx0ICAgIFwmIzM0O01CT1g6IFZGIHVucmVnaXN0ZXIgcmVqZWN0ZWQgYnkgUEY6ICV1LyV1XFxuXCYjMzQ7LFxuLVx0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWFqb3IpLFxuLVx0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWlub3IpKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuLVx0fVxuLVx0Y29tcGxldGUoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuJiM0MztcdFx0XHQgICAgXCYjMzQ7TUJPWDogUEYgcmVqZWN0ZWQgcmVwbHkgdHlwZSAldTogJXUvJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICByZXBseV90eXBlLCByZXRfbWFqb3IsXG4mIzQzO1x0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXRfbWlub3IpKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpwYXlsb2FkKVxuJiM0MztzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKnBheWxvYWQsXG4mIzQzO1x0XHRcdFx0XHQgICB1NjQgbXNnX251bSlcbiB7XG4gXHRzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfbm90aWZfbXNnICpub3RpZiA9IHBheWxvYWQ7XG4gXHRzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfYWNrX21zZyBhY2sgPSB7fTtcbiYjNDM7XHR1MzIgbGlua19zdGF0ZSA9IGxlMzJfdG9fY3B1KG5vdGlmLVx1MDAzZWxpbmtfc3RhdGUpO1xuIFx0aW50IGVycjtcbiBcbi1cdHN3aXRjaCAobGUzMl90b19jcHUobm90aWYtXHUwMDNlbGlua19zdGF0ZSkpIHtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xuJiM0MztcdHN3aXRjaCAobGlua19zdGF0ZSkge1xuIFx0Y2FzZSBFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEU6XG4tXHRcdGlmICghbmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRlbmljLVx1MDAzZXZmX2xpbmtfc3RhdGUgPSBFTklDX1ZGX0xJTktfU1RBVEVfVVA7XG4mIzQzO1x0XHRpZiAoZW5pYy1cdTAwM2V2Zl9saW5rX3J1bm5pbmcgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKVxuIFx0XHRcdG5ldGlmX2NhcnJpZXJfb24oZW5pYy1cdTAwM2VuZXRkZXYpO1xuIFx0XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LCBcJiMzNDtNQk9YOiBsaW5rIHN0YXRlIC1cdTAwM2UgVVBcXG5cJiMzNDspO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgRU5JQ19NQk9YX0xJTktfU1RBVEVfRElTQUJMRTpcbi1cdFx0aWYgKG5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKVxuJiM0MztcdFx0ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlID0gRU5JQ19WRl9MSU5LX1NUQVRFX0RPV047XG4mIzQzO1x0XHRpZiAoZW5pYy1cdTAwM2V2Zl9saW5rX3J1bm5pbmcgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikpXG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vZmYoZW5pYy1cdTAwM2VuZXRkZXYpO1xuIFx0XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LCBcJiMzNDtNQk9YOiBsaW5rIHN0YXRlIC1cdTAwM2UgRE9XTlxcblwmIzM0Oyk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsIFwmIzM0O01CT1g6IHVua25vd24gbGluayBzdGF0ZSAldVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgbGUzMl90b19jcHUobm90aWYtXHUwMDNlbGlua19zdGF0ZSkpO1xuJiM0MztcdFx0XHQgICAgbGlua19zdGF0ZSk7XG4gXHRcdGFjay5hY2sucmV0X21ham9yID0gY3B1X3RvX2xlMTYoRU5JQ19NQk9YX0VSUl9HRU5FUklDKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xuIFxuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX0FDSyxcbi1cdFx0XHRcdCBFTklDX01CT1hfRFNUX1BGLCBcdTAwMjZhY2ssIHNpemVvZihhY2spKTtcbiYjNDM7XHRlcnIgPSBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0ssXG4mIzQzO1x0XHRcdFx0ICAgRU5JQ19NQk9YX0RTVF9QRiwgXHUwMDI2YWNrLCBzaXplb2YoYWNrKSwgbXNnX251bSk7XG4gXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXG4gXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuIFx0XHRcdCAgICBcJiMzNDtNQk9YOiBmYWlsZWQgdG8gc2VuZCBsaW5rIHN0YXRlIEFDSzogJWRcXG5cJiMzNDssIGVycik7XG4gfVxuIFxuJiM0Mzt2b2lkIGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3Jlc2V0KHN0cnVjdCBlbmljICplbmljKVxuJiM0Mzt7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbiYjNDM7XHRlbmljLVx1MDAzZXZmX2xpbmtfc3RhdGUgPSBFTklDX1ZGX0xJTktfU1RBVEVfVU5LTk9XTjtcbiYjNDM7XHRpZiAoZW5pYy1cdTAwM2V2Zl9saW5rX3J1bm5pbmcgXHUwMDI2XHUwMDI2IG5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKVxuJiM0MztcdFx0bmV0aWZfY2Fycmllcl9vZmYoZW5pYy1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBlbmljX21ib3hfdmZfbGlua19zdGF0ZV9zZXRfcnVubmluZyhzdHJ1Y3QgZW5pYyAqZW5pYywgYm9vbCBydW5uaW5nKVxuJiM0Mzt7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbiYjNDM7XHRlbmljLVx1MDAzZXZmX2xpbmtfcnVubmluZyA9IHJ1bm5pbmc7XG4mIzQzO1x0aWYgKHJ1bm5pbmcgXHUwMDI2XHUwMDI2IGVuaWMtXHUwMDNldmZfbGlua19zdGF0ZSA9PSBFTklDX1ZGX0xJTktfU1RBVEVfVVApIHtcbiYjNDM7XHRcdGlmICghbmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRcdG5ldGlmX2NhcnJpZXJfb24oZW5pYy1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdH0gZWxzZSBpZiAobmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikpIHtcbiYjNDM7XHRcdG5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGVuaWNfbWJveF92Zl9wYXlsb2FkX29rKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSxcbiBcdFx0XHRcdCAgICB1MTYgcGF5bG9hZF9sZW4sIHNpemVfdCBtaW5fbGVuKVxuIHtcbkBAIC00MzksNiAmIzQzOzUxNSw4IEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYyxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkciwgdm9pZCAqcGF5bG9hZCxcbiBcdFx0XHRcdCAgICAgdTE2IHBheWxvYWRfbGVuKVxuIHtcbiYjNDM7XHR1NjQgbXNnX251bSA9IGxlNjRfdG9fY3B1KGhkci1cdTAwM2Vtc2dfbnVtKTtcbiYjNDM7XG4gXHRzd2l0Y2ggKGhkci1cdTAwM2Vtc2dfdHlwZSkge1xuIFx0Y2FzZSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWToge1xuIFx0XHRzaXplX3QgZXhwID0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cpO1xuQEAgLTQ0Niw3ICYjNDM7NTI0LDcgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuIFx0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbiBcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbiBcdFx0XHRyZXR1cm47XG4tXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfY2FwYWJpbGl0eV9yZXBseShlbmljLCBwYXlsb2FkKTtcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoZW5pYywgaGRyLVx1MDAzZW1zZ190eXBlLCBwYXlsb2FkLCBtc2dfbnVtKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWToge1xuQEAgLTQ1NSw3ICYjNDM7NTMzLDcgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuIFx0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbiBcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbiBcdFx0XHRyZXR1cm47XG4tXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVnaXN0ZXJfcmVwbHkoZW5pYywgcGF5bG9hZCk7XG4mIzQzO1x0XHRlbmljX21ib3hfdmZfaGFuZGxlX3JlcGx5KGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSwgcGF5bG9hZCwgbXNnX251bSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFx0Y2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWToge1xuQEAgLTQ2NCw3ICYjNDM7NTQyLDcgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuIFx0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbiBcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbiBcdFx0XHRyZXR1cm47XG4tXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfdW5yZWdpc3Rlcl9yZXBseShlbmljLCBwYXlsb2FkKTtcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoZW5pYywgaGRyLVx1MDAzZW1zZ190eXBlLCBwYXlsb2FkLCBtc2dfbnVtKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX05PVElGOiB7XG5AQCAtNDczLDcgJiM0Mzs1NTEsNyBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXG4gXHRcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVx1MDAzZW1zZ190eXBlLFxuIFx0XHRcdFx0XHQgICAgIHBheWxvYWRfbGVuLCBleHApKVxuIFx0XHRcdHJldHVybjtcbi1cdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKGVuaWMsIHBheWxvYWQpO1xuJiM0MztcdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKGVuaWMsIHBheWxvYWQsIG1zZ19udW0pO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGRlZmF1bHQ6XG5AQCAtNTQyLDMyICYjNDM7NjIwLDMxIEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF9yZWN2X2hhbmRsZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcbiBpbnQgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpXG4ge1xuIFx0c3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X21zZyByZXEgPSB7fTtcbiYjNDM7XHR1MzIgdmVyc2lvbjtcbiBcdGludCBlcnI7XG4gXG4tXHRlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uID0gMDtcbi1cdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbi1cdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSk7XG4mIzQzO1x0V1JJVEVfT05DRShlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uLCAwKTtcbiBcdHJlcS52ZXJzaW9uID0gY3B1X3RvX2xlMzIoRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpO1xuIFxuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QsXG4tXHRcdFx0XHQgRU5JQ19NQk9YX0RTVF9QRiwgXHUwMDI2cmVxLCBzaXplb2YocmVxKSk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCAwKTtcbiYjNDM7XHRlcnIgPSBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KGVuaWMsXG4mIzQzO1x0XHRcdFx0XHRFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVFVRVNULFxuJiM0MztcdFx0XHRcdFx0RU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFksXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbiYjNDM7XHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuIFxuIFx0ZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7XG4tXHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgMCk7XG4mIzQzO1x0dmVyc2lvbiA9IFJFQURfT05DRShlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0ICAgIFwmIzM0O01CT1g6IG5vIGNhcGFiaWxpdHkgcmVwbHkgZnJvbSBQRlxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRpZiAoZW5pYy1cdTAwM2VwZl9jYXBfdmVyc2lvbiBcdTAwM2MgRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpIHtcbiYjNDM7XHRpZiAodmVyc2lvbiBcdTAwM2MgRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0ICAgIFwmIzM0O01CT1g6IFBGIHJlamVjdGVkIGNhcGFiaWxpdHkgcmVxdWVzdCBvciByZXBvcnRlZCB1bnN1cHBvcnRlZCB2ZXJzaW9uICV1XFxuXCYjMzQ7LFxuLVx0XHRcdCAgICBlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uKTtcbiYjNDM7XHRcdFx0ICAgIHZlcnNpb24pO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG5AQCAtNTc2LDI4ICYjNDM7NjUzLDI1IEBAIGludCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcbiBpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKVxuIHtcbiYjNDM7XHRib29sIHJlZ2lzdGVyZWQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkID0gZmFsc2U7XG4tXHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4tXHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZKTtcbiYjNDM7XHRXUklURV9PTkNFKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCwgZmFsc2UpO1xuIFxuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVFVRVNULFxuLVx0XHRcdFx0IEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApO1xuLVx0aWYgKGVycikge1xuLVx0XHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgMCk7XG4mIzQzO1x0ZXJyID0gZW5pY19tYm94X3ZmX3NlbmRfcmVxdWVzdChlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVRVUVTVCxcbiYjNDM7XHRcdFx0XHRcdEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSwgTlVMTCwgMCk7XG4mIzQzO1x0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdH1cbiBcbiBcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xuLVx0V1JJVEVfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xuJiM0MztcdHJlZ2lzdGVyZWQgPSBSRUFEX09OQ0UoZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0ICAgIFwmIzM0O01CT1g6IFZGIHJlZ2lzdHJhdGlvbiB3aXRoIFBGIHRpbWVkIG91dFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRpZiAoIWVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZClcbiYjNDM7XHRpZiAoIXJlZ2lzdGVyZWQpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNjA1LDQzICYjNDM7Njc5LDQ4IEBAIGludCBlbmljX21ib3hfdmZfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpXG4gXG4gaW50IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKVxuIHtcbiYjNDM7XHRib29sIHJlZ2lzdGVyZWQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCFlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpXG4mIzQzO1x0aWYgKCFSRUFEX09OQ0UoZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4tXHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFkpO1xuLVxuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUVVFU1QsXG4tXHRcdFx0XHQgRU5JQ19NQk9YX0RTVF9QRiwgTlVMTCwgMCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCAwKTtcbiYjNDM7XHRlcnIgPSBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KGVuaWMsXG4mIzQzO1x0XHRcdFx0XHRFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVFVRVNULFxuJiM0MztcdFx0XHRcdFx0RU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFksXG4mIzQzO1x0XHRcdFx0XHROVUxMLCAwKTtcbiYjNDM7XHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuIFxuIFx0ZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7XG4tXHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgMCk7XG4mIzQzO1x0cmVnaXN0ZXJlZCA9IFJFQURfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdGlmIChlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpXG4mIzQzO1x0aWYgKHJlZ2lzdGVyZWQpXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpXG4ge1xuLVx0LyogbWJveF9sb2NrIGFuZCBtYm94X2NvbXAgbXVzdCBiZSBpbml0aWFsaXplZCBleGFjdGx5IG9uY2UgcGVyXG4mIzQzO1x0Ym9vbCByZWluaXQgPSBlbmljLVx1MDAzZW1ib3hfaW5pdGlhbGl6ZWQ7XG4mIzQzO1xuJiM0MztcdC8qIE1CT1ggbG9ja3MgYW5kIG1ib3hfY29tcCBtdXN0IGJlIGluaXRpYWxpemVkIGV4YWN0bHkgb25jZSBwZXJcbiBcdCAqIGRldmljZSBsaWZldGltZTsgdGhlIFBGIHNyaW92X2NvbmZpZ3VyZSBwYXRoIGNhbiByZS1lbnRlciB0aGlzXG4gXHQgKiBvbiBlYWNoIGVuYWJsZSBjeWNsZSB3aGVyZSB0aGVzZSBwcmltaXRpdmVzIGFyZSBhbHJlYWR5IHNldCB1cC5cbiBcdCAqL1xuLVx0aWYgKCFlbmljLVx1MDAzZW1ib3hfaW5pdGlhbGl6ZWQpIHtcbiYjNDM7XHRpZiAoIXJlaW5pdCkge1xuIFx0XHRtdXRleF9pbml0KFx1MDAyNmVuaWMtXHUwMDNlbWJveF9sb2NrKTtcbiBcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiYjNDM7XHRcdGVuaWMtXHUwMDNlbWJveF9tc2dfbnVtID0gMDtcbiBcdFx0ZW5pYy1cdTAwM2VtYm94X2luaXRpYWxpemVkID0gdHJ1ZTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbiBcdH1cbi1cdGVuaWMtXHUwMDNlbWJveF9tc2dfbnVtID0gMDtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuJiM0MztcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XG4mIzQzO1x0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPSAwO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiBcdGVuaWMtXHUwMDNlYWRtaW5fcnFfaGFuZGxlciA9IGVuaWNfbWJveF9yZWN2X2hhbmRsZXI7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5oXG5pbmRleCAxNWUzMGVlMmIwZWQ5Li42MDQwOWJhZDJmMjg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaFxuQEAgLTg4LDYgJiM0Mzs4OCw4IEBAIHZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpO1xuIGludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsXG4gXHRcdCAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pO1xuIGludCBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmZfaWQsIHUzMiBsaW5rX3N0YXRlKTtcbiYjNDM7dm9pZCBlbmljX21ib3hfdmZfbGlua19zdGF0ZV9yZXNldChzdHJ1Y3QgZW5pYyAqZW5pYyk7XG4mIzQzO3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfc2V0X3J1bm5pbmcoc3RydWN0IGVuaWMgKmVuaWMsIGJvb2wgcnVubmluZyk7XG4gaW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKTtcbiBpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKTtcbiBpbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDIyOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDaXNjbyBWSUMgRXRoZXJuZXQgTklDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy8pLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVyIHJlcXVpcmluZyBkZWRpY2F0ZWQgQ2lzY28gVklDIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gVGhlcmVmb3JlLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZDFmZWI1ZDE4YTU4ZmFhNjVmYWNjMGIzZWY1OTkwMTJkZjhkY2JlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMzAgMjI6Mzk6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oCmluZGV4IDRhNjc5NDdjZmI5ZjMuLjdhNTA5YTA1Njk5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oCkBAIC0xMzcsNiAmIzQzOzEzNywxMiBAQCBzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgewogCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKIH07CiAKJiM0MztlbnVtIGVuaWNfdmZfbGlua19zdGF0ZSB7CiYjNDM7CUVOSUNfVkZfTElOS19TVEFURV9VTktOT1dOLAomIzQzOwlFTklDX1ZGX0xJTktfU1RBVEVfRE9XTiwKJiM0MzsJRU5JQ19WRl9MSU5LX1NUQVRFX1VQLAomIzQzO307CiYjNDM7CiAvKiBlbmljX3Jmc19mbHRyX25vZGUgLSByZnMgZmlsdGVyIG5vZGUgaW4gaGFzaCB0YWJsZQogICoJQEBrZXlzOiBJUHY0IDUgdHVwbGUKICAqCUBmbG93X2lkOiBmbG93X2lkIG9mIGNsc2YgZmlsdGVyIHByb3ZpZGVkIGJ5IGtlcm5lbApAQCAtMzEyLDE5ICYjNDM7MzE4LDI1IEBAIHN0cnVjdCBlbmljIHsKIAl1bnNpZ25lZCBpbnQgYWRtaW5fbXNnX2NvdW50OwkvKiBjdXJyZW50IGRlcHRoIG9mIGFkbWluX21zZ19saXN0ICovCiAJdm9pZCAoKmFkbWluX3JxX2hhbmRsZXIpKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpidWYsCiAJCQkJIHVuc2lnbmVkIGludCBsZW4pOwomIzQzOwkvKiBUaGUgUEYgaXMgYXV0aG9yaXRhdGl2ZSBmb3IgYSBWMiBWRiYjMzk7cyBjYXJyaWVyLiAgS2VlcCB0aGUgbGFzdAomIzQzOwkgKiBub3RpZmljYXRpb24gYWNyb3NzIGFuIG9yZGluYXJ5IG5ldGRldiBjbG9zZS9vcGVuIGFuZCBzZXJpYWxpemUgaXQKJiM0MzsJICogYWdhaW5zdCB0aGUgb3Blbi9zdG9wIGNhcnJpZXIgdHJhbnNpdGlvbi4KJiM0MzsJICovCiYjNDM7CXNwaW5sb2NrX3QgdmZfbGlua19zdGF0ZV9sb2NrOwomIzQzOwllbnVtIGVuaWNfdmZfbGlua19zdGF0ZSB2Zl9saW5rX3N0YXRlOwomIzQzOwlib29sIHZmX2xpbmtfcnVubmluZzsKIAogCS8qIE1CT1ggcHJvdG9jb2wgc3RhdGUg4oCUIG1ib3hfbG9jayBzZXJpYWxpemVzIGFkbWluIFdRIHNlbmRzICovCiAJc3RydWN0IG11dGV4IG1ib3hfbG9jazsKIAl1NjQgbWJveF9tc2dfbnVtOwotCS8qIE1CT1ggcmVxdWVzdC1yZXBseSBzdGF0ZS4gIG1ib3hfZXhwZWN0ZWRfcmVwbHkgaXMgd3JpdHRlbiBhbmQKLQkgKiBjbGVhcmVkIGJ5IHRoZSBwcm9jZXNzLWNvbnRleHQgcmVxdWVzdCBoZWxwZXJzIChjYXBhYmlsaXR5L3JlZ2lzdGVyLwotCSAqIHVucmVnaXN0ZXIpIGFuZCBvbmx5IHJlYWQgYnkgdGhlIGFkbWluX21zZ193b3JrIHJlY2VpdmUgaGFuZGxlcnMsIHNvCi0JICogaXQgaXMgYW5ub3RhdGVkIHdpdGggUkVBRF9PTkNFKCkvV1JJVEVfT05DRSgpIHJhdGhlciB0aGFuIGxvY2tlZDoKLQkgKiBvbmx5IG9uZSByZXF1ZXN0IGlzIGluIGZsaWdodCBhdCBhIHRpbWUgKHJlcXVlc3RlcnMgcnVuIHVuZGVyIFJUTkwgb3IKLQkgKiBzaW5nbGUtdGhyZWFkZWQgcHJvYmUvcmVtb3ZlKSwgc28gZWFjaCByZXF1ZXN0IGlzIHNlcmlhbGl6ZWQgYW5kIGl0cwotCSAqIHJlcGx5IGNvbXBsZXRlcyBtYm94X2NvbXAgYmVmb3JlIHRoZSBuZXh0IHJlcXVlc3QgaXMgaXNzdWVkLgomIzQzOwkvKiBNQk9YIHJlcXVlc3QtcmVwbHkgc3RhdGUuICBFeGlzdGluZyByZXF1ZXN0IGNhbGxlcnMgYWxsb3cgb25seSBvbmUKJiM0MzsJICogcmVxdWVzdCBpbiBmbGlnaHQuICBUaGUgc3RhdGUgbG9jayBhcmJpdHJhdGVzIHJlcGx5IGFjY2VwdGFuY2UgYWdhaW5zdAomIzQzOwkgKiB0aW1lb3V0IGludmFsaWRhdGlvbiwgd2hpbGUgbWJveF9jb21wIHB1Ymxpc2hlcyB0aGUgYWNjZXB0ZWQgcmVzdWx0IHRvCiYjNDM7CSAqIHRoZSByZXF1ZXN0ZXIuCiAJICovCiAJc3RydWN0IGNvbXBsZXRpb24gbWJveF9jb21wOwomIzQzOwlzcGlubG9ja190IG1ib3hfc3RhdGVfbG9jazsJLyogcHJvdGVjdHMgZXhwZWN0ZWQgcmVwbHkgc3RhdGUgKi8KJiM0MzsJdTY0IG1ib3hfZXhwZWN0ZWRfbXNnX251bTsKIAl1OCBtYm94X2V4cGVjdGVkX3JlcGx5OwogCWJvb2wgbWJveF9pbml0aWFsaXplZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMKaW5kZXggMGJhZWY3YTEyMGVjNi4uMTRkMTYzN2E0MzQyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jCkBAIC0xODAwLDYgJiM0MzsxODAwLDggQEAgc3RhdGljIGludCBlbmljX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAogCWVuaWNfbm90aWZ5X3RpbWVyX3N0YXJ0KGVuaWMpOwogCWVuaWNfcmZzX3RpbWVyX3N0YXJ0KGVuaWMpOwomIzQzOwlpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkKJiM0MzsJCWVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3NldF9ydW5uaW5nKGVuaWMsIHRydWUpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTE4NTMsNyAmIzQzOzE4NTUsMTAgQEAgc3RhdGljIGludCBlbmljX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlmb3IgKGkgPSAwOyBpICZsdDsgZW5pYy0mZ3Q7cnFfY291bnQ7IGkmIzQzOyYjNDM7KQogCQluYXBpX2Rpc2FibGUoJmFtcDtlbmljLSZndDtuYXBpW2ldKTsKIAotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiYjNDM7CWlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKQomIzQzOwkJZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfc2V0X3J1bm5pbmcoZW5pYywgZmFsc2UpOwomIzQzOwllbHNlCiYjNDM7CQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCWlmICh2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtJmd0O3ZkZXYpID09IFZOSUNfREVWX0lOVFJfTU9ERV9NU0lYKQogCQlmb3IgKGkgPSAwOyBpICZsdDsgZW5pYy0mZ3Q7d3FfY291bnQ7IGkmIzQzOyYjNDM7KQogCQkJbmFwaV9kaXNhYmxlKCZhbXA7ZW5pYy0mZ3Q7bmFwaVtlbmljX2NxX3dxKGVuaWMsIGkpXSk7CkBAIC0yMjAxLDkgJiM0MzsyMjA2LDEwIEBAIHN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fY2hhbl9yZW9wZW4oc3RydWN0IGVuaWMgKmVuaWMpCiB7CiAJaW50IGVycjsKIAotCS8qIEluc3RhbGwgdGhlIE1CT1ggcmVjZWl2ZSBoYW5kbGVyIGFuZCByZXNldCB0aGUgc2VxdWVuY2UgbnVtYmVyCi0JICogYmVmb3JlIG9wZW5pbmcgdGhlIGNoYW5uZWwsIHNvIHRoZSBoYW5kbGVyIGlzIGluIHBsYWNlIGJlZm9yZSB0aGUKLQkgKiBhZG1pbiBpbnRlcnJ1cHQgaXMgdW5tYXNrZWQgYW5kIG5vIGVhcmx5IGNvbXBsZXRpb24gaXMgZHJvcHBlZC4KJiM0MzsJLyogSW5zdGFsbCB0aGUgTUJPWCByZWNlaXZlIGhhbmRsZXIgYW5kIGNsZWFyIHBlbmRpbmcgcmVwbHkgc3RhdGUgYmVmb3JlCiYjNDM7CSAqIG9wZW5pbmcgdGhlIGNoYW5uZWwsIHNvIHRoZSBoYW5kbGVyIGlzIGluIHBsYWNlIGJlZm9yZSB0aGUgYWRtaW4KJiM0MzsJICogaW50ZXJydXB0IGlzIHVubWFza2VkIGFuZCBubyBlYXJseSBjb21wbGV0aW9uIGlzIGRyb3BwZWQuICBLZWVwIHRoZQomIzQzOwkgKiBzZXF1ZW5jZSBudW1iZXIgbW9ub3RvbmljIGFjcm9zcyBjaGFubmVsIGdlbmVyYXRpb25zLgogCSAqLwogCWVuaWNfbWJveF9pbml0KGVuaWMpOwogCkBAIC0yMjE1LDcgJiM0MzsyMjIxLDcgQEAgc3RhdGljIHZvaWQgZW5pY19hZG1pbl9jaGFuX3Jlb3BlbihzdHJ1Y3QgZW5pYyAqZW5pYykKIAkgKiByZWdpc3RyYXRpb24gb3ZlciBhIGRlYWQgY2hhbm5lbC4KIAkgKi8KIAlpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkKLQkJZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCA9IGZhbHNlOwomIzQzOwkJV1JJVEVfT05DRShlbmljLSZndDt2Zl9yZWdpc3RlcmVkLCBmYWxzZSk7CiAKIAllcnIgPSBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihlbmljKTsKIAlpZiAoZXJyKSB7CkBAIC0yMjcxLDYgJiM0MzsyMjc3LDggQEAgc3RhdGljIHZvaWQgZW5pY19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCWVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShlbmljKTsKIAogCWVuaWNfc3RvcChlbmljLSZndDtuZXRkZXYpOwomIzQzOwlpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkKJiM0MzsJCWVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3Jlc2V0KGVuaWMpOwogCiAJZW5pY19kZXZfc29mdF9yZXNldChlbmljKTsKIAllbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7CkBAIC0yMzE1LDYgJiM0MzsyMzIzLDggQEAgc3RhdGljIHZvaWQgZW5pY190eF9oYW5nX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAogCWVuaWNfZGV2X2hhbmdfbm90aWZ5KGVuaWMpOwogCWVuaWNfc3RvcChlbmljLSZndDtuZXRkZXYpOwomIzQzOwlpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkKJiM0MzsJCWVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3Jlc2V0KGVuaWMpOwogCiAJZW5pY19kZXZfaGFuZ19yZXNldChlbmljKTsKIAllbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7CkBAIC0zMDE1LDYgJiM0MzszMDI1LDcgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCWVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWVuaWMtJmd0O25ldGRldiA9IG5ldGRldjsKIAllbmljLSZndDtwZGV2ID0gcGRldjsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtlbmljLSZndDt2Zl9saW5rX3N0YXRlX2xvY2spOwogCiAJLyogU2V0dXAgUENJIHJlc291cmNlcwogCSAqLwpAQCAtMzMzOSw3ICYjNDM7MzM1MCw3IEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAogZXJyX291dF9hZG1pbl9jbG9zZToKIAlpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkgewotCQlpZiAoZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCkgewomIzQzOwkJaWYgKFJFQURfT05DRShlbmljLSZndDt2Zl9yZWdpc3RlcmVkKSkgewogCQkJaW50IHVucmVnX2VyciA9IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKGVuaWMpOwogCiAJCQlpZiAodW5yZWdfZXJyKQpAQCAtMzM5Miw3ICYjNDM7MzQwMyw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQkgKiB0b3VjaGluZyBhIG5ldGRldiB0aGF0IGlzIGJlaW5nIHRvcm4gZG93bi4KIAkJICovCiAJCWlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKSB7Ci0JCQlpZiAoZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCkgewomIzQzOwkJCWlmIChSRUFEX09OQ0UoZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCkpIHsKIAkJCQlpbnQgdW5yZWdfZXJyID0gZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoZW5pYyk7CiAKIAkJCQlpZiAodW5yZWdfZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMKaW5kZXggMmZiMGYxZTJmZjUwMS4uNWM5M2NhNDk1NTJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jCkBAIC0xOCwyMiAmIzQzOzE4LDI1IEBACiAjZGVmaW5lIEVOSUNfTUJPWF9QT0xMX1RJTUVPVVRfVVMJNTAwMDAwMAogI2RlZmluZSBFTklDX01CT1hfUE9MTF9JTlRFUlZBTF9VUwkxMDAKIAotc3RhdGljIHZvaWQgZW5pY19tYm94X2ZpbGxfaGRyKHN0cnVjdCBlbmljICplbmljLCBzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLAotCQkJICAgICAgIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsIHUxNiBtc2dfbGVuKQomIzQzO3N0YXRpYyB2b2lkIGVuaWNfbWJveF9maWxsX2hkcihzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLCB1OCBtc2dfdHlwZSwKJiM0MzsJCQkgICAgICAgdTE2IGRzdF92bmljX2lkLCB1MTYgbXNnX2xlbiwgdTY0IG1zZ19udW0pCiB7CiAJbWVtc2V0KGhkciwgMCwgc2l6ZW9mKCpoZHIpKTsKIAloZHItJmd0O2RzdF92bmljX2lkID0gY3B1X3RvX2xlMTYoZHN0X3ZuaWNfaWQpOwogCWhkci0mZ3Q7bXNnX3R5cGUgPSBtc2dfdHlwZTsKIAloZHItJmd0O21zZ19sZW4gPSBjcHVfdG9fbGUxNihtc2dfbGVuKTsKLQloZHItJmd0O21zZ19udW0gPSBjcHVfdG9fbGU2NCgmIzQzOyYjNDM7ZW5pYy0mZ3Q7bWJveF9tc2dfbnVtKTsKJiM0MzsJaGRyLSZndDttc2dfbnVtID0gY3B1X3RvX2xlNjQobXNnX251bSk7CiB9CiAKLWludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsCi0JCSAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pCiYjNDM7c3RhdGljIGludCBlbmljX21ib3hfc2VuZF9tc2dfaWQoc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLAomIzQzOwkJCQkgdTE2IGRzdF92bmljX2lkLCB2b2lkICpwYXlsb2FkLAomIzQzOwkJCQkgdTE2IHBheWxvYWRfbGVuLCB1NjQgbXNnX251bSwgYm9vbCByZXVzZV9tc2dfbnVtLAomIzQzOwkJCQkgdTggZXhwZWN0ZWRfcmVwbHkpCiB7CiAJc2l6ZV90IHRvdGFsX2xlbiA9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X2hkcikgJiM0MzsgcGF5bG9hZF9sZW47CiAJc3RydWN0IHZuaWNfd3EgKndxID0gJmFtcDtlbmljLSZndDthZG1pbl93cTsKIAlzdHJ1Y3Qgd3FfZW5ldF9kZXNjICpkZXNjOwomIzQzOwlib29sIHJlcGx5X2V4cGVjdGVkID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJdTE2IHZsYW5fdGFnOwpAQCAtNjgsNyAmIzQzOzcxLDIxIEBAIGludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsCiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCWVuaWNfbWJveF9maWxsX2hkcihlbmljLCBidWYsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgdG90YWxfbGVuKTsKJiM0MzsJLyogUmVwbGllcyByZXVzZSB0aGUgaW5pdGlhdGluZyBtZXNzYWdlIG51bWJlci4gIFJlcXVlc3RzIGFuZAomIzQzOwkgKiBub3RpZmljYXRpb25zIGFsbG9jYXRlIGEgbmV3IG9uZS4KJiM0MzsJICovCiYjNDM7CWlmICghcmV1c2VfbXNnX251bSkKJiM0MzsJCW1zZ19udW0gPSAmIzQzOyYjNDM7ZW5pYy0mZ3Q7bWJveF9tc2dfbnVtOwomIzQzOwlpZiAoZXhwZWN0ZWRfcmVwbHkpIHsKJiM0MzsJCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7ZW5pYy0mZ3Q7bWJveF9jb21wKTsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO2VuaWMtJmd0O21ib3hfc3RhdGVfbG9jayk7CiYjNDM7CQllbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5ID0gZXhwZWN0ZWRfcmVwbHk7CiYjNDM7CQllbmljLSZndDttYm94X2V4cGVjdGVkX21zZ19udW0gPSBtc2dfbnVtOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwomIzQzOwkJcmVwbHlfZXhwZWN0ZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVuaWNfbWJveF9maWxsX2hkcihidWYsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgdG90YWxfbGVuLCBtc2dfbnVtKTsKIAlpZiAocGF5bG9hZF9sZW4pIHsKIAkJdm9pZCAqZHN0ID0gYnVmICYjNDM7IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X2hkcik7CiAKQEAgLTEzOSwxOCAmIzQzOzE1Niw2NiBAQCBpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLAogCQkgICAmIzM0O01CT1ggc2VuZCBtc2dfdHlwZSAldSBkc3QgJXUgdmxhbiAldSBlcnIgJWRcbiYjMzQ7LAogCQkgICBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHZsYW5fdGFnLCBlcnIpOwogdW5sb2NrOgomIzQzOwlpZiAoZXJyICZhbXA7JmFtcDsgcmVwbHlfZXhwZWN0ZWQpIHsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO2VuaWMtJmd0O21ib3hfc3RhdGVfbG9jayk7CiYjNDM7CQlpZiAoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSA9PSBleHBlY3RlZF9yZXBseSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9tc2dfbnVtID09IG1zZ19udW0pIHsKJiM0MzsJCQllbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5ID0gMDsKJiM0MzsJCQllbmljLSZndDttYm94X2V4cGVjdGVkX21zZ19udW0gPSAwOwomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZW5pYy0mZ3Q7bWJveF9sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7aW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCwKJiM0MzsJCSAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnX2lkKGVuaWMsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgcGF5bG9hZCwKJiM0MzsJCQkJICAgICBwYXlsb2FkX2xlbiwgMCwgZmFsc2UsIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuaWNfbWJveF9zZW5kX3JlcGx5KHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwKJiM0MzsJCQkJdTE2IGRzdF92bmljX2lkLCB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4sCiYjNDM7CQkJCXU2NCBtc2dfbnVtKQomIzQzO3sKJiM0MzsJcmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZ19pZChlbmljLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHBheWxvYWQsCiYjNDM7CQkJCSAgICAgcGF5bG9hZF9sZW4sIG1zZ19udW0sIHRydWUsIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuaWNfbWJveF92Zl9zZW5kX3JlcXVlc3Qoc3RydWN0IGVuaWMgKmVuaWMsIHU4IHJlcXVlc3RfdHlwZSwKJiM0MzsJCQkJICAgICB1OCBleHBlY3RlZF9yZXBseSwgdm9pZCAqcGF5bG9hZCwKJiM0MzsJCQkJICAgICB1MTYgcGF5bG9hZF9sZW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnX2lkKGVuaWMsIHJlcXVlc3RfdHlwZSwgRU5JQ19NQk9YX0RTVF9QRiwKJiM0MzsJCQkJICAgICBwYXlsb2FkLCBwYXlsb2FkX2xlbiwgMCwgZmFsc2UsCiYjNDM7CQkJCSAgICAgZXhwZWN0ZWRfcmVwbHkpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZW5pY19tYm94X3dhaXRfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tcykKIHsKIAl1bnNpZ25lZCBsb25nIGxlZnQ7CiYjNDM7CWludCBlcnIgPSAwOwogCiAJbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO2VuaWMtJmd0O21ib3hfY29tcCwKIAkJCQkJICAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKSk7CiYjNDM7CWlmIChsZWZ0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIEludmFsaWRhdGUgYSByZXF1ZXN0IHRoYXQgdGhlIGhhbmRsZXIgaGFzIG5vdCBhbHJlYWR5IGFjY2VwdGVkLiAgQQomIzQzOwkgKiBkZWxheWVkIHJlcGx5IGNhbm5vdCBtYXRjaCBhIGxhdGVyIHJlcXVlc3QgYmVjYXVzZSBtZXNzYWdlIG51bWJlcnMgYXJlCiYjNDM7CSAqIG1vbm90b25pYyBhY3Jvc3MgY2hhbm5lbCByZW9wZW4uCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwomIzQzOwlpZiAoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSkgewomIzQzOwkJZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSA9IDA7CiYjNDM7CQllbmljLSZndDttYm94X2V4cGVjdGVkX21zZ19udW0gPSAwOwomIzQzOwkJZXJyID0gLUVUSU1FRE9VVDsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2VuaWMtJmd0O21ib3hfc3RhdGVfbG9jayk7CiAKLQlyZXR1cm4gbGVmdCA/IDAgOiAtRVRJTUVET1VUOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBpbnQgZW5pY19tYm94X3NlbmRfbGlua19zdGF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZmX2lkLCB1MzIgbGlua19zdGF0ZSkKQEAgLTE3OCw4ICYjNDM7MjQzLDggQEAgc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX2NhcGFiaWxpdHkoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZywKIAlyZXBseS5yZXBseS5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNigwKTsKIAlyZXBseS52ZXJzaW9uID0gY3B1X3RvX2xlMzIoRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpOwogCi0JcmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSwgdmZfaWQsCi0JCQkJICAmYW1wO3JlcGx5LCBzaXplb2YocmVwbHkpKTsKJiM0MzsJcmV0dXJuIGVuaWNfbWJveF9zZW5kX3JlcGx5KGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZLCB2Zl9pZCwKJiM0MzsJCQkJICAgICZhbXA7cmVwbHksIHNpemVvZihyZXBseSksIG1zZ19udW0pOwogfQogCiBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZywKQEAgLTIwOCw4ICYjNDM7MjczLDggQEAgc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csCiAJfQogCiAJcmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7Ci0JZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSwgdmZfaWQsCi0JCQkJICZhbXA7cmVwbHksIHNpemVvZihyZXBseSkpOwomIzQzOwllcnIgPSBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFksIHZmX2lkLAomIzQzOwkJCQkgICAmYW1wO3JlcGx5LCBzaXplb2YocmVwbHkpLCBtc2dfbnVtKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0yNTMsOCAmIzQzOzMxOCw4IEBAIHN0YXRpYyBpbnQgZW5pY19tYm94X3BmX2hhbmRsZV91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csCiAJZW5pYy0mZ3Q7dmZfc3RhdGVbdmZfaWRdLnJlZ2lzdGVyZWQgPSBmYWxzZTsKIAogCXJlcGx5LnJlcGx5LnJldF9tYWpvciA9IGNwdV90b19sZTE2KDApOwotCWVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSwgdmZfaWQsCi0JCQkJICZhbXA7cmVwbHksIHNpemVvZihyZXBseSkpOwomIzQzOwllcnIgPSBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSwgdmZfaWQsCiYjNDM7CQkJCSAgICZhbXA7cmVwbHksIHNpemVvZihyZXBseSksIG1zZ19udW0pOwogCiAJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJbmV0ZGV2X2luZm8oZW5pYy0mZ3Q7bmV0ZGV2LApAQCAtMzI0LDEwNSAmIzQzOzM4OSwxMTYgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3BmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLAogCQkJICAgIGhkci0mZ3Q7bXNnX3R5cGUsIHZmX2lkLCBlcnIpOwogfQogCi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX2NhcGFiaWxpdHlfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsCi0JCQkJCQkgdm9pZCAqcGF5bG9hZCkKJiM0MztzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX3JlcGx5KHN0cnVjdCBlbmljICplbmljLCB1OCByZXBseV90eXBlLAomIzQzOwkJCQkgICAgICB2b2lkICpwYXlsb2FkLCB1NjQgbXNnX251bSkKIHsKLQlzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnICpyZXBseSA9IHBheWxvYWQ7Ci0KLQlpZiAoUkVBRF9PTkNFKGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHkpICE9IEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZKSB7CiYjNDM7CXN0cnVjdCBlbmljX21ib3hfZ2VuZXJpY19yZXBseSAqcmVwbHkgPSBwYXlsb2FkOwomIzQzOwl1MTYgcmV0X21ham9yID0gbGUxNl90b19jcHUocmVwbHktJmd0O3JldF9tYWpvcik7CiYjNDM7CXU2NCBleHBlY3RlZF9tc2dfbnVtOwomIzQzOwl1OCBleHBlY3RlZF90eXBlOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwomIzQzOwlleHBlY3RlZF90eXBlID0gZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseTsKJiM0MzsJZXhwZWN0ZWRfbXNnX251bSA9IGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfbXNnX251bTsKJiM0MzsJaWYgKGV4cGVjdGVkX3R5cGUgIT0gcmVwbHlfdHlwZSB8fCBleHBlY3RlZF9tc2dfbnVtICE9IG1zZ19udW0pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZW5pYy0mZ3Q7bWJveF9zdGF0ZV9sb2NrKTsKIAkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAotCQkJICAgICYjMzQ7TUJPWDogc3RhbGUgY2FwYWJpbGl0eSByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXG4mIzM0OywKLQkJCSAgICBSRUFEX09OQ0UoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSkpOwomIzQzOwkJCSAgICAmIzM0O01CT1g6IHN0YWxlIHJlcGx5ICV1LyVsbHUgKGV4cGVjdGVkICV1LyVsbHUpLCBkcm9wXG4mIzM0OywKJiM0MzsJCQkgICAgcmVwbHlfdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyltc2dfbnVtLAomIzQzOwkJCSAgICBleHBlY3RlZF90eXBlLCAodW5zaWduZWQgbG9uZyBsb25nKWV4cGVjdGVkX21zZ19udW0pOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKGxlMTZfdG9fY3B1KHJlcGx5LSZndDtyZXBseS5yZXRfbWFqb3IpID09IDApCi0JCWVuaWMtJmd0O3BmX2NhcF92ZXJzaW9uID0gbGUzMl90b19jcHUocmVwbHktJmd0O3ZlcnNpb24pOwotCWVsc2UKLQkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAotCQkJICAgICYjMzQ7TUJPWDogUEYgcmVqZWN0ZWQgY2FwYWJpbGl0eSByZXF1ZXN0OiAldS8ldVxuJiMzNDssCi0JCQkgICAgbGUxNl90b19jcHUocmVwbHktJmd0O3JlcGx5LnJldF9tYWpvciksCi0JCQkgICAgbGUxNl90b19jcHUocmVwbHktJmd0O3JlcGx5LnJldF9taW5vcikpOwotCWNvbXBsZXRlKCZhbXA7ZW5pYy0mZ3Q7bWJveF9jb21wKTsKLX0KJiM0MzsJaWYgKCFyZXRfbWFqb3IpIHsKJiM0MzsJCXN3aXRjaCAocmVwbHlfdHlwZSkgewomIzQzOwkJY2FzZSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWTogewomIzQzOwkJCXN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cgKmNhcCA9IHBheWxvYWQ7CiAKLXN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfcmVnaXN0ZXJfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsCi0JCQkJCSAgICAgICB2b2lkICpwYXlsb2FkKQotewotCXN0cnVjdCBlbmljX21ib3hfdmZfcmVnaXN0ZXJfcmVwbHlfbXNnICpyZXBseSA9IHBheWxvYWQ7Ci0KLQlpZiAoUkVBRF9PTkNFKGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHkpICE9IEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSkgewotCQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCi0JCQkgICAgJiMzNDtNQk9YOiBzdGFsZSByZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXG4mIzM0OywKLQkJCSAgICBSRUFEX09OQ0UoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSkpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGxlMTZfdG9fY3B1KHJlcGx5LSZndDtyZXBseS5yZXRfbWFqb3IpKSB7Ci0JCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKLQkJCSAgICAmIzM0O01CT1g6IFZGIHJlZ2lzdGVyIHJlamVjdGVkIGJ5IFBGOiAldS8ldVxuJiMzNDssCi0JCQkgICAgbGUxNl90b19jcHUocmVwbHktJmd0O3JlcGx5LnJldF9tYWpvciksCi0JCQkgICAgbGUxNl90b19jcHUocmVwbHktJmd0O3JlcGx5LnJldF9taW5vcikpOwotCX0gZWxzZSB7Ci0JCWVuaWMtJmd0O3ZmX3JlZ2lzdGVyZWQgPSB0cnVlOwomIzQzOwkJCVdSSVRFX09OQ0UoZW5pYy0mZ3Q7cGZfY2FwX3ZlcnNpb24sCiYjNDM7CQkJCSAgIGxlMzJfdG9fY3B1KGNhcC0mZ3Q7dmVyc2lvbikpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJY2FzZSBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFk6CiYjNDM7CQkJV1JJVEVfT05DRShlbmljLSZndDt2Zl9yZWdpc3RlcmVkLCB0cnVlKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFk6CiYjNDM7CQkJV1JJVEVfT05DRShlbmljLSZndDt2Zl9yZWdpc3RlcmVkLCBmYWxzZSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiAJfQomIzQzOwllbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5ID0gMDsKJiM0MzsJZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9tc2dfbnVtID0gMDsKIAljb21wbGV0ZSgmYW1wO2VuaWMtJmd0O21ib3hfY29tcCk7Ci19CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7ZW5pYy0mZ3Q7bWJveF9zdGF0ZV9sb2NrKTsKIAotc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV91bnJlZ2lzdGVyX3JlcGx5KHN0cnVjdCBlbmljICplbmljLAotCQkJCQkJIHZvaWQgKnBheWxvYWQpCi17Ci0Jc3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDsKLQotCWlmIChSRUFEX09OQ0UoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSkgIT0gRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFkpIHsKJiM0MzsJaWYgKHJldF9tYWpvcikKIAkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAotCQkJICAgICYjMzQ7TUJPWDogc3RhbGUgdW5yZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXG4mIzM0OywKLQkJCSAgICBSRUFEX09OQ0UoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSkpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGxlMTZfdG9fY3B1KHJlcGx5LSZndDtyZXBseS5yZXRfbWFqb3IpKSB7Ci0JCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKLQkJCSAgICAmIzM0O01CT1g6IFZGIHVucmVnaXN0ZXIgcmVqZWN0ZWQgYnkgUEY6ICV1LyV1XG4mIzM0OywKLQkJCSAgICBsZTE2X3RvX2NwdShyZXBseS0mZ3Q7cmVwbHkucmV0X21ham9yKSwKLQkJCSAgICBsZTE2X3RvX2NwdShyZXBseS0mZ3Q7cmVwbHkucmV0X21pbm9yKSk7Ci0JfSBlbHNlIHsKLQkJZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCA9IGZhbHNlOwotCX0KLQljb21wbGV0ZSgmYW1wO2VuaWMtJmd0O21ib3hfY29tcCk7CiYjNDM7CQkJICAgICYjMzQ7TUJPWDogUEYgcmVqZWN0ZWQgcmVwbHkgdHlwZSAldTogJXUvJXVcbiYjMzQ7LAomIzQzOwkJCSAgICByZXBseV90eXBlLCByZXRfbWFqb3IsCiYjNDM7CQkJICAgIGxlMTZfdG9fY3B1KHJlcGx5LSZndDtyZXRfbWlub3IpKTsKIH0KIAotc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpwYXlsb2FkKQomIzQzO3N0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfbGlua19zdGF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqcGF5bG9hZCwKJiM0MzsJCQkJCSAgIHU2NCBtc2dfbnVtKQogewogCXN0cnVjdCBlbmljX21ib3hfcGZfbGlua19zdGF0ZV9ub3RpZl9tc2cgKm5vdGlmID0gcGF5bG9hZDsKIAlzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfYWNrX21zZyBhY2sgPSB7fTsKJiM0MzsJdTMyIGxpbmtfc3RhdGUgPSBsZTMyX3RvX2NwdShub3RpZi0mZ3Q7bGlua19zdGF0ZSk7CiAJaW50IGVycjsKIAotCXN3aXRjaCAobGUzMl90b19jcHUobm90aWYtJmd0O2xpbmtfc3RhdGUpKSB7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2VuaWMtJmd0O3ZmX2xpbmtfc3RhdGVfbG9jayk7CiYjNDM7CXN3aXRjaCAobGlua19zdGF0ZSkgewogCWNhc2UgRU5JQ19NQk9YX0xJTktfU1RBVEVfRU5BQkxFOgotCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCWVuaWMtJmd0O3ZmX2xpbmtfc3RhdGUgPSBFTklDX1ZGX0xJTktfU1RBVEVfVVA7CiYjNDM7CQlpZiAoZW5pYy0mZ3Q7dmZfbGlua19ydW5uaW5nICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhbmV0aWZfY2Fycmllcl9vayhlbmljLSZndDtuZXRkZXYpKQogCQkJbmV0aWZfY2Fycmllcl9vbihlbmljLSZndDtuZXRkZXYpOwogCQluZXRkZXZfZGJnKGVuaWMtJmd0O25ldGRldiwgJiMzNDtNQk9YOiBsaW5rIHN0YXRlIC0mZ3Q7IFVQXG4mIzM0Oyk7CiAJCWJyZWFrOwogCWNhc2UgRU5JQ19NQk9YX0xJTktfU1RBVEVfRElTQUJMRToKLQkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCWVuaWMtJmd0O3ZmX2xpbmtfc3RhdGUgPSBFTklDX1ZGX0xJTktfU1RBVEVfRE9XTjsKJiM0MzsJCWlmIChlbmljLSZndDt2Zl9saW5rX3J1bm5pbmcgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSkKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtJmd0O25ldGRldik7CiAJCW5ldGRldl9kYmcoZW5pYy0mZ3Q7bmV0ZGV2LCAmIzM0O01CT1g6IGxpbmsgc3RhdGUgLSZndDsgRE9XTlxuJiMzNDspOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsICYjMzQ7TUJPWDogdW5rbm93biBsaW5rIHN0YXRlICV1XG4mIzM0OywKLQkJCSAgICBsZTMyX3RvX2NwdShub3RpZi0mZ3Q7bGlua19zdGF0ZSkpOwomIzQzOwkJCSAgICBsaW5rX3N0YXRlKTsKIAkJYWNrLmFjay5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNihFTklDX01CT1hfRVJSX0dFTkVSSUMpOwogCQlicmVhazsKIAl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7ZW5pYy0mZ3Q7dmZfbGlua19zdGF0ZV9sb2NrKTsKIAotCWVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0ssCi0JCQkJIEVOSUNfTUJPWF9EU1RfUEYsICZhbXA7YWNrLCBzaXplb2YoYWNrKSk7CiYjNDM7CWVyciA9IGVuaWNfbWJveF9zZW5kX3JlcGx5KGVuaWMsIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX0FDSywKJiM0MzsJCQkJICAgRU5JQ19NQk9YX0RTVF9QRiwgJmFtcDthY2ssIHNpemVvZihhY2spLCBtc2dfbnVtKTsKIAlpZiAoZXJyICZhbXA7JmFtcDsgbmV0X3JhdGVsaW1pdCgpKQogCQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiAJCQkgICAgJiMzNDtNQk9YOiBmYWlsZWQgdG8gc2VuZCBsaW5rIHN0YXRlIEFDSzogJWRcbiYjMzQ7LCBlcnIpOwogfQogCiYjNDM7dm9pZCBlbmljX21ib3hfdmZfbGlua19zdGF0ZV9yZXNldChzdHJ1Y3QgZW5pYyAqZW5pYykKJiM0Mzt7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2VuaWMtJmd0O3ZmX2xpbmtfc3RhdGVfbG9jayk7CiYjNDM7CWVuaWMtJmd0O3ZmX2xpbmtfc3RhdGUgPSBFTklDX1ZGX0xJTktfU1RBVEVfVU5LTk9XTjsKJiM0MzsJaWYgKGVuaWMtJmd0O3ZmX2xpbmtfcnVubmluZyAmYW1wOyZhbXA7IG5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCW5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtJmd0O25ldGRldik7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7ZW5pYy0mZ3Q7dmZfbGlua19zdGF0ZV9sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBlbmljX21ib3hfdmZfbGlua19zdGF0ZV9zZXRfcnVubmluZyhzdHJ1Y3QgZW5pYyAqZW5pYywgYm9vbCBydW5uaW5nKQomIzQzO3sKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7ZW5pYy0mZ3Q7dmZfbGlua19zdGF0ZV9sb2NrKTsKJiM0MzsJZW5pYy0mZ3Q7dmZfbGlua19ydW5uaW5nID0gcnVubmluZzsKJiM0MzsJaWYgKHJ1bm5pbmcgJmFtcDsmYW1wOyBlbmljLSZndDt2Zl9saW5rX3N0YXRlID09IEVOSUNfVkZfTElOS19TVEFURV9VUCkgewomIzQzOwkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGVuaWMtJmd0O25ldGRldikpCiYjNDM7CQkJbmV0aWZfY2Fycmllcl9vbihlbmljLSZndDtuZXRkZXYpOwomIzQzOwl9IGVsc2UgaWYgKG5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSkgewomIzQzOwkJbmV0aWZfY2Fycmllcl9vZmYoZW5pYy0mZ3Q7bmV0ZGV2KTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2VuaWMtJmd0O3ZmX2xpbmtfc3RhdGVfbG9jayk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgZW5pY19tYm94X3ZmX3BheWxvYWRfb2soc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLAogCQkJCSAgICB1MTYgcGF5bG9hZF9sZW4sIHNpemVfdCBtaW5fbGVuKQogewpAQCAtNDM5LDYgJiM0Mzs1MTUsOCBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsCiAJCQkJICAgICBzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLCB2b2lkICpwYXlsb2FkLAogCQkJCSAgICAgdTE2IHBheWxvYWRfbGVuKQogewomIzQzOwl1NjQgbXNnX251bSA9IGxlNjRfdG9fY3B1KGhkci0mZ3Q7bXNnX251bSk7CiYjNDM7CiAJc3dpdGNoIChoZHItJmd0O21zZ190eXBlKSB7CiAJY2FzZSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWTogewogCQlzaXplX3QgZXhwID0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cpOwpAQCAtNDQ2LDcgJiM0Mzs1MjQsNyBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsCiAJCWlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLSZndDttc2dfdHlwZSwKIAkJCQkJICAgICBwYXlsb2FkX2xlbiwgZXhwKSkKIAkJCXJldHVybjsKLQkJZW5pY19tYm94X3ZmX2hhbmRsZV9jYXBhYmlsaXR5X3JlcGx5KGVuaWMsIHBheWxvYWQpOwomIzQzOwkJZW5pY19tYm94X3ZmX2hhbmRsZV9yZXBseShlbmljLCBoZHItJmd0O21zZ190eXBlLCBwYXlsb2FkLCBtc2dfbnVtKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOiB7CkBAIC00NTUsNyAmIzQzOzUzMyw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywKIAkJaWYgKCFlbmljX21ib3hfdmZfcGF5bG9hZF9vayhlbmljLCBoZHItJmd0O21zZ190eXBlLAogCQkJCQkgICAgIHBheWxvYWRfbGVuLCBleHApKQogCQkJcmV0dXJuOwotCQllbmljX21ib3hfdmZfaGFuZGxlX3JlZ2lzdGVyX3JlcGx5KGVuaWMsIHBheWxvYWQpOwomIzQzOwkJZW5pY19tYm94X3ZmX2hhbmRsZV9yZXBseShlbmljLCBoZHItJmd0O21zZ190eXBlLCBwYXlsb2FkLCBtc2dfbnVtKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFk6IHsKQEAgLTQ2NCw3ICYjNDM7NTQyLDcgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLAogCQlpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci0mZ3Q7bXNnX3R5cGUsCiAJCQkJCSAgICAgcGF5bG9hZF9sZW4sIGV4cCkpCiAJCQlyZXR1cm47Ci0JCWVuaWNfbWJveF92Zl9oYW5kbGVfdW5yZWdpc3Rlcl9yZXBseShlbmljLCBwYXlsb2FkKTsKJiM0MzsJCWVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoZW5pYywgaGRyLSZndDttc2dfdHlwZSwgcGF5bG9hZCwgbXNnX251bSk7CiAJCWJyZWFrOwogCX0KIAljYXNlIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX05PVElGOiB7CkBAIC00NzMsNyAmIzQzOzU1MSw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywKIAkJaWYgKCFlbmljX21ib3hfdmZfcGF5bG9hZF9vayhlbmljLCBoZHItJmd0O21zZ190eXBlLAogCQkJCQkgICAgIHBheWxvYWRfbGVuLCBleHApKQogCQkJcmV0dXJuOwotCQllbmljX21ib3hfdmZfaGFuZGxlX2xpbmtfc3RhdGUoZW5pYywgcGF5bG9hZCk7CiYjNDM7CQllbmljX21ib3hfdmZfaGFuZGxlX2xpbmtfc3RhdGUoZW5pYywgcGF5bG9hZCwgbXNnX251bSk7CiAJCWJyZWFrOwogCX0KIAlkZWZhdWx0OgpAQCAtNTQyLDMyICYjNDM7NjIwLDMxIEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF9yZWN2X2hhbmRsZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZiwKIGludCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYykKIHsKIAlzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfbXNnIHJlcSA9IHt9OwomIzQzOwl1MzIgdmVyc2lvbjsKIAlpbnQgZXJyOwogCi0JZW5pYy0mZ3Q7cGZfY2FwX3ZlcnNpb24gPSAwOwotCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7ZW5pYy0mZ3Q7bWJveF9jb21wKTsKLQlXUklURV9PTkNFKGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHksIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZKTsKJiM0MzsJV1JJVEVfT05DRShlbmljLSZndDtwZl9jYXBfdmVyc2lvbiwgMCk7CiAJcmVxLnZlcnNpb24gPSBjcHVfdG9fbGUzMihFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSk7CiAKLQllcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVRVUVTVCwKLQkJCQkgRU5JQ19NQk9YX0RTVF9QRiwgJmFtcDtyZXEsIHNpemVvZihyZXEpKTsKLQlpZiAoZXJyKSB7Ci0JCVdSSVRFX09OQ0UoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSwgMCk7CiYjNDM7CWVyciA9IGVuaWNfbWJveF92Zl9zZW5kX3JlcXVlc3QoZW5pYywKJiM0MzsJCQkJCUVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QsCiYjNDM7CQkJCQlFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSwKJiM0MzsJCQkJCSZhbXA7cmVxLCBzaXplb2YocmVxKSk7CiYjNDM7CWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JfQogCiAJZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7Ci0JV1JJVEVfT05DRShlbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5LCAwKTsKJiM0MzsJdmVyc2lvbiA9IFJFQURfT05DRShlbmljLSZndDtwZl9jYXBfdmVyc2lvbik7CiAJaWYgKGVycikgewogCQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiAJCQkgICAgJiMzNDtNQk9YOiBubyBjYXBhYmlsaXR5IHJlcGx5IGZyb20gUEZcbiYjMzQ7KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAoZW5pYy0mZ3Q7cGZfY2FwX3ZlcnNpb24gJmx0OyBFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSkgewomIzQzOwlpZiAodmVyc2lvbiAmbHQ7IEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8xKSB7CiAJCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKIAkJCSAgICAmIzM0O01CT1g6IFBGIHJlamVjdGVkIGNhcGFiaWxpdHkgcmVxdWVzdCBvciByZXBvcnRlZCB1bnN1cHBvcnRlZCB2ZXJzaW9uICV1XG4mIzM0OywKLQkJCSAgICBlbmljLSZndDtwZl9jYXBfdmVyc2lvbik7CiYjNDM7CQkJICAgIHZlcnNpb24pOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC01NzYsMjggJiM0Mzs2NTMsMjUgQEAgaW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKQogCiBpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKQogewomIzQzOwlib29sIHJlZ2lzdGVyZWQ7CiAJaW50IGVycjsKIAotCWVuaWMtJmd0O3ZmX3JlZ2lzdGVyZWQgPSBmYWxzZTsKLQlyZWluaXRfY29tcGxldGlvbigmYW1wO2VuaWMtJmd0O21ib3hfY29tcCk7Ci0JV1JJVEVfT05DRShlbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5LCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFkpOwomIzQzOwlXUklURV9PTkNFKGVuaWMtJmd0O3ZmX3JlZ2lzdGVyZWQsIGZhbHNlKTsKIAotCWVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVRVUVTVCwKLQkJCQkgRU5JQ19NQk9YX0RTVF9QRiwgTlVMTCwgMCk7Ci0JaWYgKGVycikgewotCQlXUklURV9PTkNFKGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHksIDApOwomIzQzOwllcnIgPSBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVFVRVNULAomIzQzOwkJCQkJRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZLCBOVUxMLCAwKTsKJiM0MzsJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQl9CiAKIAllcnIgPSBlbmljX21ib3hfd2FpdF9yZXBseShlbmljLCAzMDAwKTsKLQlXUklURV9PTkNFKGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHksIDApOwomIzQzOwlyZWdpc3RlcmVkID0gUkVBRF9PTkNFKGVuaWMtJmd0O3ZmX3JlZ2lzdGVyZWQpOwogCWlmIChlcnIpIHsKIAkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAogCQkJICAgICYjMzQ7TUJPWDogVkYgcmVnaXN0cmF0aW9uIHdpdGggUEYgdGltZWQgb3V0XG4mIzM0Oyk7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKCFlbmljLSZndDt2Zl9yZWdpc3RlcmVkKQomIzQzOwlpZiAoIXJlZ2lzdGVyZWQpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcmV0dXJuIDA7CkBAIC02MDUsNDMgJiM0Mzs2NzksNDggQEAgaW50IGVuaWNfbWJveF92Zl9yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYykKIAogaW50IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKQogewomIzQzOwlib29sIHJlZ2lzdGVyZWQ7CiAJaW50IGVycjsKIAotCWlmICghZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCkKJiM0MzsJaWYgKCFSRUFEX09OQ0UoZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCkpCiAJCXJldHVybiAwOwogCi0JcmVpbml0X2NvbXBsZXRpb24oJmFtcDtlbmljLSZndDttYm94X2NvbXApOwotCVdSSVRFX09OQ0UoZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSwgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFkpOwotCi0JZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUVVFU1QsCi0JCQkJIEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApOwotCWlmIChlcnIpIHsKLQkJV1JJVEVfT05DRShlbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5LCAwKTsKJiM0MzsJZXJyID0gZW5pY19tYm94X3ZmX3NlbmRfcmVxdWVzdChlbmljLAomIzQzOwkJCQkJRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVRVUVTVCwKJiM0MzsJCQkJCUVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUExZLAomIzQzOwkJCQkJTlVMTCwgMCk7CiYjNDM7CWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JfQogCiAJZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7Ci0JV1JJVEVfT05DRShlbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5LCAwKTsKJiM0MzsJcmVnaXN0ZXJlZCA9IFJFQURfT05DRShlbmljLSZndDt2Zl9yZWdpc3RlcmVkKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCWlmIChlbmljLSZndDt2Zl9yZWdpc3RlcmVkKQomIzQzOwlpZiAocmVnaXN0ZXJlZCkKIAkJcmV0dXJuIC1FQUNDRVM7CiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpCiB7Ci0JLyogbWJveF9sb2NrIGFuZCBtYm94X2NvbXAgbXVzdCBiZSBpbml0aWFsaXplZCBleGFjdGx5IG9uY2UgcGVyCiYjNDM7CWJvb2wgcmVpbml0ID0gZW5pYy0mZ3Q7bWJveF9pbml0aWFsaXplZDsKJiM0MzsKJiM0MzsJLyogTUJPWCBsb2NrcyBhbmQgbWJveF9jb21wIG11c3QgYmUgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlIHBlcgogCSAqIGRldmljZSBsaWZldGltZTsgdGhlIFBGIHNyaW92X2NvbmZpZ3VyZSBwYXRoIGNhbiByZS1lbnRlciB0aGlzCiAJICogb24gZWFjaCBlbmFibGUgY3ljbGUgd2hlcmUgdGhlc2UgcHJpbWl0aXZlcyBhcmUgYWxyZWFkeSBzZXQgdXAuCiAJICovCi0JaWYgKCFlbmljLSZndDttYm94X2luaXRpYWxpemVkKSB7CiYjNDM7CWlmICghcmVpbml0KSB7CiAJCW11dGV4X2luaXQoJmFtcDtlbmljLSZndDttYm94X2xvY2spOwogCQlpbml0X2NvbXBsZXRpb24oJmFtcDtlbmljLSZndDttYm94X2NvbXApOwomIzQzOwkJc3Bpbl9sb2NrX2luaXQoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwomIzQzOwkJZW5pYy0mZ3Q7bWJveF9tc2dfbnVtID0gMDsKIAkJZW5pYy0mZ3Q7bWJveF9pbml0aWFsaXplZCA9IHRydWU7CiAJfSBlbHNlIHsKIAkJcmVpbml0X2NvbXBsZXRpb24oJmFtcDtlbmljLSZndDttYm94X2NvbXApOwogCX0KLQllbmljLSZndDttYm94X21zZ19udW0gPSAwOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwomIzQzOwllbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5ID0gMDsKJiM0MzsJZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9tc2dfbnVtID0gMDsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtlbmljLSZndDttYm94X3N0YXRlX2xvY2spOwogCWVuaWMtJmd0O2FkbWluX3JxX2hhbmRsZXIgPSBlbmljX21ib3hfcmVjdl9oYW5kbGVyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmgKaW5kZXggMTVlMzBlZTJiMGVkOS4uNjA0MDliYWQyZjI4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5oCkBAIC04OCw2ICYjNDM7ODgsOCBAQCB2b2lkIGVuaWNfbWJveF9pbml0KHN0cnVjdCBlbmljICplbmljKTsKIGludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsCiAJCSAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pOwogaW50IGVuaWNfbWJveF9zZW5kX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHUxNiB2Zl9pZCwgdTMyIGxpbmtfc3RhdGUpOwomIzQzO3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfcmVzZXQoc3RydWN0IGVuaWMgKmVuaWMpOwomIzQzO3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfc2V0X3J1bm5pbmcoc3RydWN0IGVuaWMgKmVuaWMsIGJvb2wgcnVubmluZyk7CiBpbnQgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpOwogaW50IGVuaWNfbWJveF92Zl9yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYyk7CiBpbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAyMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcwMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBXb3J0aEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCB0byB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljLypgKSBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCBmYWxscyBpbnRvIGNlcnRhaW4gY2F0ZWdvcmllcy4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlcyBhZmZlY3QgY29kZSB0aGF0JiMzOTtzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuCgpUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBleGNsdWRlOgoKKiAgIFVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoqICAgVmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgZm9yIGhhcmR3YXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCiogICBUZWFyZG93biBjYWxsYmFja3MgbGlrZSBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYC4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IElzIHRoZSBDaXNjbyBWSUMgKGVuaWMpIGVtdWxhdGVkIGluIFFFTVU/IEkga25vdyB0aGUgdXN1YWwgc3VzcGVjdHM6IGUxMDAwLCB2aXJ0aW8tbmV0LCB0aG9zZSBhcmUgc3RhbmRhcmQuIEJ1dCBgZW5pY2A/IEkgZG9uJiMzOTt0IHRoaW5rIHNvLiBJIG5lZWQgdG8gYmUgc3VyZS4gQSBxdWljayBzZWFyY2ggb2YgdGhlIFFFTVUgZG9jdW1lbnRhdGlvbiBjb25maXJtcyBteSBzdXNwaWNpb24uIEl0IGRvZXNuJiMzOTt0IGVtdWxhdGUgQ2lzY28gVklDLiBTbywgaXQgYXBwZWFycyB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBhY2N1cmF0ZSBhbmQgc2hvdWxkIGd1aWRlIHVzLCBpZiB3ZSBoYXZlIHRoZSBjb3JyZWN0IGFuYWx5c2lzIG9mIHRoZSBkZXZpY2UuCgpUbyBiZSAxMDAlIHN1cmUsIGFuZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZHJpdmVyIHNpdHMgaW4gdGhlIGtlcm5lbCwgSSYjMzk7bGwgZG8gYSBxdWljayBgS2NvbmZpZ2Agc2VhcmNoIGZvciBgZW5pY2AgdG8gdmVyaWZ5IHRoZSBoYXJkd2FyZSBpdCBkcml2ZXMuIElmIGl0ICppcyogdmVuZG9yIHNwZWNpZmljIGFuZCBkZXBlbmRlbnQgb24gYSBwaHlzaWNhbCBjYXJkLCB0aGVuIGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDIyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFTklDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnOjY6Y29uZmlnIEVOSUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7Q2lzY28gVklDIEV0aGVybmV0IE5JQyBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MjAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgbGluZToKCioqRGl2aW5nIGludG8gdGhlIENpc2NvIEVOSUMgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmVnYXJkaW5nIHRoZSBDaXNjbyBFTklDIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWdgLiBSaWdodCwgdGhpcyBpcyB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgZHJpdmVyJiMzOTtzIGJ1aWxkLXRpbWUgb3B0aW9ucyB3aWxsIGJlIGRlZmluZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYWxsIHRoZSB1c3VhbCBzdXNwZWN0czogbW9kdWxlIGRlcGVuZGVuY2llcywgZmVhdHVyZSBmbGFncyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGNlcnRhaW4gZnVuY3Rpb25hbGl0aWVzIChsaWtlIFNSLUlPViwgcGVyaGFwcywgb3Igc3BlY2lmaWMgb2ZmbG9hZHMpLCBkZWJ1Z2dpbmcgb3B0aW9ucywgYW5kIG1heWJlIGV2ZW4gc29tZSBwZXJmb3JtYW5jZSB0dW5pbmcga25vYnMuIEtub3dpbmcgdGhlIHNwZWNpZmljIEVOSUMgaGFyZHdhcmUgcmV2aXNpb24gaXMga2V5IGhlcmUsIEkgd2lsbCBjaGVjayB0aGUgYXBwcm9wcmlhdGUgS2NvbmZpZyBmaWxlIGZvciBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLCB0b28uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBzZXQuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGZsZXhpYmlsaXR5IHRoZSBkcml2ZXIgb2ZmZXJzIGFuZCB3aGF0IGNvbXBpbGUtdGltZSBkZWNpc2lvbnMgYXJlIGF2YWlsYWJsZSB0byBvcHRpbWl6ZSBpdCBmb3IgYSBwYXJ0aWN1bGFyIGRlcGxveW1lbnQgc2NlbmFyaW8uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbi4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDaXNjbyBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgRU5JQ1xuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q2lzY28gVklDIEV0aGVybmV0IE5JQyBTdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIFBDSVxuICAgOTpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIHRoZSBDaXNjbyBWSUMgRXRoZXJuZXQgY2FyZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAyMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk0NQoJCQkJCQkJb3V0cHV0OiA5NQoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIHJpZ2h0LiBJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGUgY3JpdGVyaWEgZm9yIGZ1enppbmcuIEkgaGF2ZSBhIGZlZWxpbmcgdGhpcyBpcyBhIGNsYXNzaWMgY2FzZSB3aGVyZSB3ZSBjYW4mIzM5O3QgcmVsaWFibHkgZnV6ei4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZXNlIHR3byBydWxlcyBhZ2FpbjogRmlyc3RseSwgY29kZSBwYXRocyB0aGF0IGFyZSBpbmhlcmVudGx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uIG9mIGhhcmR3YXJlLiBTZWNvbmRseSwgY29kZSB0aGF0IGxpdmVzIHdpdGhpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycywgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgb3IgYGFtZGdwdWAsIHNwZWNpZmljYWxseSBjb2RlIHRoYXQgbmVlZHMgcmVhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLgoKVGhlIGRyaXZlciB3ZSBhcmUgbG9va2luZyBhdCBpcyB0aGUgYGVuaWNgIGRyaXZlciwgd2hpY2ggZnJvbSBteSBleHBlcmllbmNlLCBoYW5kbGVzIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgc3VwcG9ydC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGV0aGVybmV0IGRyaXZlciBmb3IgQ2lzY28gVUNTIGFuZCBDaXNjbyBWSUMgaGFyZHdhcmUsIGluY2x1ZGluZyBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMuIEFuZCBjcml0aWNhbGx5LCBpdCAqbmVlZHMqIHBoeXNpY2FsIENpc2NvIFZJQyBoYXJkd2FyZSwgc29tZXRoaW5nIHRoYXQmIzM5O3Mgbm90IGdvaW5nIHRvIGJlIGF2YWlsYWJsZSBpbiBRRU1VIG9yIGFueSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LgoKUmlnaHQsIHNvIHRoYXQmIzM5O3MgcHJldHR5IGNsZWFyLiBUaGlzIHBhdGNoIGZhbGxzIHBlcmZlY3RseSB1bmRlciAqYm90aCogb2YgdGhvc2UgZGlzcXVhbGlmeWluZyBydWxlcywgcmVhbGx5LiBJdCYjMzk7cyB2ZW5kb3Itc3BlY2lmaWMsIGhhcmR3YXJlLWRlcGVuZGVudCBQQ0llIGRyaXZlciBjb2RlLCBhbmQgaW5oZXJlbnRseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbi4gVGhpcyBtYWtlcyB0aGUgYW5zd2VyIHZlcnkgc2ltcGxlLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBoYXMgdG8gYmUgYGZhbHNlYC4KCkxldCBtZSB0cmlwbGUtY2hlY2sgYWxsIHRoZSBwYXJhbWV0ZXJzIGp1c3QgdG8gYmUgY2VydGFpbi4gSSB3YW50IHRvIGJlIDEwMCUgYWNjdXJhdGUuCgoqICAgYFdvcnRoRnV6emluZzogZmFsc2VgIC0gVGhhdCYjMzk7cyBjb3JyZWN0LgoqICAgYEZvY3VzU3ltYm9sczogW11gIC0gTWFrZXMgc2Vuc2UsIG5vIHNwZWNpZmljIHN5bWJvbHMgdG8gdGFyZ2V0LgoqICAgYEVuYWJsZUNvbmZpZ3M6IFtdYCAtIE5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4KKiAgIGBSZWFzb25pbmc6IENvbmNpc2UgZXhwbGFuYXRpb25gIC0gVGhlIHJlYXNvbmluZyBpcyBhY2N1cmF0ZSBhbmQgY29uY2lzZS4KCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSYjMzk7bSBnb2luZyB0byBjb21taXQgdGhpcyBhbmQgY2FsbCBpdCBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDIyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXIgcmVxdWlyaW5nIGRlZGljYXRlZCBDaXNjbyBWSUMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBUaGVyZWZvcmUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljLyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXIgcmVxdWlyaW5nIGRlZGljYXRlZCBDaXNjbyBWSUMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBUaGVyZWZvcmUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAyMjozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzBUMjI6Mzk6MTMuNDMyNjM0Nzg4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MzAyMDI1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciByZXF1aXJpbmcgZGVkaWNhdGVkIENpc2NvIFZJQyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZXJlZm9yZSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQyMjozOToxMy40MzI2Mzk0MjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTEzODM1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZDFmZWI1ZDE4YTU4ZmFhNjVmYWNjMGIzZWY1OTkwMTJkZjhkY2JlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDMwIDIyOjM5OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmhcXG5pbmRleCA0YTY3OTQ3Y2ZiOWYzLi43YTUwOWEwNTY5OTAwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmhcXG5AQCAtMTM3LDYgKzEzNywxMiBAQCBzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUge1xcbiBcXHR1OCBtYWNfYWRkcltFVEhfQUxFTl07XFxuIH07XFxuIFxcbitlbnVtIGVuaWNfdmZfbGlua19zdGF0ZSB7XFxuK1xcdEVOSUNfVkZfTElOS19TVEFURV9VTktOT1dOLFxcbitcXHRFTklDX1ZGX0xJTktfU1RBVEVfRE9XTixcXG4rXFx0RU5JQ19WRl9MSU5LX1NUQVRFX1VQLFxcbit9O1xcbitcXG4gLyogZW5pY19yZnNfZmx0cl9ub2RlIC0gcmZzIGZpbHRlciBub2RlIGluIGhhc2ggdGFibGVcXG4gICpcXHRAQGtleXM6IElQdjQgNSB0dXBsZVxcbiAgKlxcdEBmbG93X2lkOiBmbG93X2lkIG9mIGNsc2YgZmlsdGVyIHByb3ZpZGVkIGJ5IGtlcm5lbFxcbkBAIC0zMTIsMTkgKzMxOCwyNSBAQCBzdHJ1Y3QgZW5pYyB7XFxuIFxcdHVuc2lnbmVkIGludCBhZG1pbl9tc2dfY291bnQ7XFx0LyogY3VycmVudCBkZXB0aCBvZiBhZG1pbl9tc2dfbGlzdCAqL1xcbiBcXHR2b2lkICgqYWRtaW5fcnFfaGFuZGxlcikoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBsZW4pO1xcbitcXHQvKiBUaGUgUEYgaXMgYXV0aG9yaXRhdGl2ZSBmb3IgYSBWMiBWRidzIGNhcnJpZXIuICBLZWVwIHRoZSBsYXN0XFxuK1xcdCAqIG5vdGlmaWNhdGlvbiBhY3Jvc3MgYW4gb3JkaW5hcnkgbmV0ZGV2IGNsb3NlL29wZW4gYW5kIHNlcmlhbGl6ZSBpdFxcbitcXHQgKiBhZ2FpbnN0IHRoZSBvcGVuL3N0b3AgY2FycmllciB0cmFuc2l0aW9uLlxcbitcXHQgKi9cXG4rXFx0c3BpbmxvY2tfdCB2Zl9saW5rX3N0YXRlX2xvY2s7XFxuK1xcdGVudW0gZW5pY192Zl9saW5rX3N0YXRlIHZmX2xpbmtfc3RhdGU7XFxuK1xcdGJvb2wgdmZfbGlua19ydW5uaW5nO1xcbiBcXG4gXFx0LyogTUJPWCBwcm90b2NvbCBzdGF0ZSDigJQgbWJveF9sb2NrIHNlcmlhbGl6ZXMgYWRtaW4gV1Egc2VuZHMgKi9cXG4gXFx0c3RydWN0IG11dGV4IG1ib3hfbG9jaztcXG4gXFx0dTY0IG1ib3hfbXNnX251bTtcXG4tXFx0LyogTUJPWCByZXF1ZXN0LXJlcGx5IHN0YXRlLiAgbWJveF9leHBlY3RlZF9yZXBseSBpcyB3cml0dGVuIGFuZFxcbi1cXHQgKiBjbGVhcmVkIGJ5IHRoZSBwcm9jZXNzLWNvbnRleHQgcmVxdWVzdCBoZWxwZXJzIChjYXBhYmlsaXR5L3JlZ2lzdGVyL1xcbi1cXHQgKiB1bnJlZ2lzdGVyKSBhbmQgb25seSByZWFkIGJ5IHRoZSBhZG1pbl9tc2dfd29yayByZWNlaXZlIGhhbmRsZXJzLCBzb1xcbi1cXHQgKiBpdCBpcyBhbm5vdGF0ZWQgd2l0aCBSRUFEX09OQ0UoKS9XUklURV9PTkNFKCkgcmF0aGVyIHRoYW4gbG9ja2VkOlxcbi1cXHQgKiBvbmx5IG9uZSByZXF1ZXN0IGlzIGluIGZsaWdodCBhdCBhIHRpbWUgKHJlcXVlc3RlcnMgcnVuIHVuZGVyIFJUTkwgb3JcXG4tXFx0ICogc2luZ2xlLXRocmVhZGVkIHByb2JlL3JlbW92ZSksIHNvIGVhY2ggcmVxdWVzdCBpcyBzZXJpYWxpemVkIGFuZCBpdHNcXG4tXFx0ICogcmVwbHkgY29tcGxldGVzIG1ib3hfY29tcCBiZWZvcmUgdGhlIG5leHQgcmVxdWVzdCBpcyBpc3N1ZWQuXFxuK1xcdC8qIE1CT1ggcmVxdWVzdC1yZXBseSBzdGF0ZS4gIEV4aXN0aW5nIHJlcXVlc3QgY2FsbGVycyBhbGxvdyBvbmx5IG9uZVxcbitcXHQgKiByZXF1ZXN0IGluIGZsaWdodC4gIFRoZSBzdGF0ZSBsb2NrIGFyYml0cmF0ZXMgcmVwbHkgYWNjZXB0YW5jZSBhZ2FpbnN0XFxuK1xcdCAqIHRpbWVvdXQgaW52YWxpZGF0aW9uLCB3aGlsZSBtYm94X2NvbXAgcHVibGlzaGVzIHRoZSBhY2NlcHRlZCByZXN1bHQgdG9cXG4rXFx0ICogdGhlIHJlcXVlc3Rlci5cXG4gXFx0ICovXFxuIFxcdHN0cnVjdCBjb21wbGV0aW9uIG1ib3hfY29tcDtcXG4rXFx0c3BpbmxvY2tfdCBtYm94X3N0YXRlX2xvY2s7XFx0LyogcHJvdGVjdHMgZXhwZWN0ZWQgcmVwbHkgc3RhdGUgKi9cXG4rXFx0dTY0IG1ib3hfZXhwZWN0ZWRfbXNnX251bTtcXG4gXFx0dTggbWJveF9leHBlY3RlZF9yZXBseTtcXG4gXFx0Ym9vbCBtYm94X2luaXRpYWxpemVkO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmNcXG5pbmRleCAwYmFlZjdhMTIwZWM2Li4xNGQxNjM3YTQzNDJlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jXFxuQEAgLTE4MDAsNiArMTgwMCw4IEBAIHN0YXRpYyBpbnQgZW5pY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcbiBcXHRlbmljX25vdGlmeV90aW1lcl9zdGFydChlbmljKTtcXG4gXFx0ZW5pY19yZnNfdGltZXJfc3RhcnQoZW5pYyk7XFxuK1xcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKVxcbitcXHRcXHRlbmljX21ib3hfdmZfbGlua19zdGF0ZV9zZXRfcnVubmluZyhlbmljLCB0cnVlKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTg1Myw3ICsxODU1LDEwIEBAIHN0YXRpYyBpbnQgZW5pY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlbmljLVxcdTAwM2VycV9jb3VudDsgaSsrKVxcbiBcXHRcXHRuYXBpX2Rpc2FibGUoXFx1MDAyNmVuaWMtXFx1MDAzZW5hcGlbaV0pO1xcbiBcXG4tXFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcXG4rXFx0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpXFxuK1xcdFxcdGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3NldF9ydW5uaW5nKGVuaWMsIGZhbHNlKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xcbiBcXHRpZiAodm5pY19kZXZfZ2V0X2ludHJfbW9kZShlbmljLVxcdTAwM2V2ZGV2KSA9PSBWTklDX0RFVl9JTlRSX01PREVfTVNJWClcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGVuaWMtXFx1MDAzZXdxX2NvdW50OyBpKyspXFxuIFxcdFxcdFxcdG5hcGlfZGlzYWJsZShcXHUwMDI2ZW5pYy1cXHUwMDNlbmFwaVtlbmljX2NxX3dxKGVuaWMsIGkpXSk7XFxuQEAgLTIyMDEsOSArMjIwNiwxMCBAQCBzdGF0aWMgdm9pZCBlbmljX2FkbWluX2NoYW5fcmVvcGVuKHN0cnVjdCBlbmljICplbmljKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHQvKiBJbnN0YWxsIHRoZSBNQk9YIHJlY2VpdmUgaGFuZGxlciBhbmQgcmVzZXQgdGhlIHNlcXVlbmNlIG51bWJlclxcbi1cXHQgKiBiZWZvcmUgb3BlbmluZyB0aGUgY2hhbm5lbCwgc28gdGhlIGhhbmRsZXIgaXMgaW4gcGxhY2UgYmVmb3JlIHRoZVxcbi1cXHQgKiBhZG1pbiBpbnRlcnJ1cHQgaXMgdW5tYXNrZWQgYW5kIG5vIGVhcmx5IGNvbXBsZXRpb24gaXMgZHJvcHBlZC5cXG4rXFx0LyogSW5zdGFsbCB0aGUgTUJPWCByZWNlaXZlIGhhbmRsZXIgYW5kIGNsZWFyIHBlbmRpbmcgcmVwbHkgc3RhdGUgYmVmb3JlXFxuK1xcdCAqIG9wZW5pbmcgdGhlIGNoYW5uZWwsIHNvIHRoZSBoYW5kbGVyIGlzIGluIHBsYWNlIGJlZm9yZSB0aGUgYWRtaW5cXG4rXFx0ICogaW50ZXJydXB0IGlzIHVubWFza2VkIGFuZCBubyBlYXJseSBjb21wbGV0aW9uIGlzIGRyb3BwZWQuICBLZWVwIHRoZVxcbitcXHQgKiBzZXF1ZW5jZSBudW1iZXIgbW9ub3RvbmljIGFjcm9zcyBjaGFubmVsIGdlbmVyYXRpb25zLlxcbiBcXHQgKi9cXG4gXFx0ZW5pY19tYm94X2luaXQoZW5pYyk7XFxuIFxcbkBAIC0yMjE1LDcgKzIyMjEsNyBAQCBzdGF0aWMgdm9pZCBlbmljX2FkbWluX2NoYW5fcmVvcGVuKHN0cnVjdCBlbmljICplbmljKVxcbiBcXHQgKiByZWdpc3RyYXRpb24gb3ZlciBhIGRlYWQgY2hhbm5lbC5cXG4gXFx0ICovXFxuIFxcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKVxcbi1cXHRcXHRlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkID0gZmFsc2U7XFxuK1xcdFxcdFdSSVRFX09OQ0UoZW5pYy1cXHUwMDNldmZfcmVnaXN0ZXJlZCwgZmFsc2UpO1xcbiBcXG4gXFx0ZXJyID0gZW5pY19hZG1pbl9jaGFubmVsX29wZW4oZW5pYyk7XFxuIFxcdGlmIChlcnIpIHtcXG5AQCAtMjI3MSw2ICsyMjc3LDggQEAgc3RhdGljIHZvaWQgZW5pY19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShlbmljKTtcXG4gXFxuIFxcdGVuaWNfc3RvcChlbmljLVxcdTAwM2VuZXRkZXYpO1xcbitcXHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcXG4rXFx0XFx0ZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfcmVzZXQoZW5pYyk7XFxuIFxcbiBcXHRlbmljX2Rldl9zb2Z0X3Jlc2V0KGVuaWMpO1xcbiBcXHRlbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7XFxuQEAgLTIzMTUsNiArMjMyMyw4IEBAIHN0YXRpYyB2b2lkIGVuaWNfdHhfaGFuZ19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcbiBcXHRlbmljX2Rldl9oYW5nX25vdGlmeShlbmljKTtcXG4gXFx0ZW5pY19zdG9wKGVuaWMtXFx1MDAzZW5ldGRldik7XFxuK1xcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKVxcbitcXHRcXHRlbmljX21ib3hfdmZfbGlua19zdGF0ZV9yZXNldChlbmljKTtcXG4gXFxuIFxcdGVuaWNfZGV2X2hhbmdfcmVzZXQoZW5pYyk7XFxuIFxcdGVuaWNfcmVzZXRfYWRkcl9saXN0cyhlbmljKTtcXG5AQCAtMzAxNSw2ICszMDI1LDcgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHRlbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFx0ZW5pYy1cXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xcbiBcXHRlbmljLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmVuaWMtXFx1MDAzZXZmX2xpbmtfc3RhdGVfbG9jayk7XFxuIFxcbiBcXHQvKiBTZXR1cCBQQ0kgcmVzb3VyY2VzXFxuIFxcdCAqL1xcbkBAIC0zMzM5LDcgKzMzNTAsNyBAQCBzdGF0aWMgaW50IGVuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcbiBlcnJfb3V0X2FkbWluX2Nsb3NlOlxcbiBcXHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkge1xcbi1cXHRcXHRpZiAoZW5pYy1cXHUwMDNldmZfcmVnaXN0ZXJlZCkge1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKGVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQpKSB7XFxuIFxcdFxcdFxcdGludCB1bnJlZ19lcnIgPSBlbmljX21ib3hfdmZfdW5yZWdpc3RlcihlbmljKTtcXG4gXFxuIFxcdFxcdFxcdGlmICh1bnJlZ19lcnIpXFxuQEAgLTMzOTIsNyArMzQwMyw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHQgKiB0b3VjaGluZyBhIG5ldGRldiB0aGF0IGlzIGJlaW5nIHRvcm4gZG93bi5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKSB7XFxuLVxcdFxcdFxcdGlmIChlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKSB7XFxuK1xcdFxcdFxcdGlmIChSRUFEX09OQ0UoZW5pYy1cXHUwMDNldmZfcmVnaXN0ZXJlZCkpIHtcXG4gXFx0XFx0XFx0XFx0aW50IHVucmVnX2VyciA9IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKGVuaWMpO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKHVucmVnX2VycilcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmNcXG5pbmRleCAyZmIwZjFlMmZmNTAxLi41YzkzY2E0OTU1MmFjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jXFxuQEAgLTE4LDIyICsxOCwyNSBAQFxcbiAjZGVmaW5lIEVOSUNfTUJPWF9QT0xMX1RJTUVPVVRfVVNcXHQ1MDAwMDAwXFxuICNkZWZpbmUgRU5JQ19NQk9YX1BPTExfSU5URVJWQUxfVVNcXHQxMDBcXG4gXFxuLXN0YXRpYyB2b2lkIGVuaWNfbWJveF9maWxsX2hkcihzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkcixcXG4tXFx0XFx0XFx0ICAgICAgIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsIHUxNiBtc2dfbGVuKVxcbitzdGF0aWMgdm9pZCBlbmljX21ib3hfZmlsbF9oZHIoc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkciwgdTggbXNnX3R5cGUsXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgZHN0X3ZuaWNfaWQsIHUxNiBtc2dfbGVuLCB1NjQgbXNnX251bSlcXG4ge1xcbiBcXHRtZW1zZXQoaGRyLCAwLCBzaXplb2YoKmhkcikpO1xcbiBcXHRoZHItXFx1MDAzZWRzdF92bmljX2lkID0gY3B1X3RvX2xlMTYoZHN0X3ZuaWNfaWQpO1xcbiBcXHRoZHItXFx1MDAzZW1zZ190eXBlID0gbXNnX3R5cGU7XFxuIFxcdGhkci1cXHUwMDNlbXNnX2xlbiA9IGNwdV90b19sZTE2KG1zZ19sZW4pO1xcbi1cXHRoZHItXFx1MDAzZW1zZ19udW0gPSBjcHVfdG9fbGU2NCgrK2VuaWMtXFx1MDAzZW1ib3hfbXNnX251bSk7XFxuK1xcdGhkci1cXHUwMDNlbXNnX251bSA9IGNwdV90b19sZTY0KG1zZ19udW0pO1xcbiB9XFxuIFxcbi1pbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxcbi1cXHRcXHQgICAgICAgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfbGVuKVxcbitzdGF0aWMgaW50IGVuaWNfbWJveF9zZW5kX21zZ19pZChzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCB1MTYgZHN0X3ZuaWNfaWQsIHZvaWQgKnBheWxvYWQsXFxuK1xcdFxcdFxcdFxcdCB1MTYgcGF5bG9hZF9sZW4sIHU2NCBtc2dfbnVtLCBib29sIHJldXNlX21zZ19udW0sXFxuK1xcdFxcdFxcdFxcdCB1OCBleHBlY3RlZF9yZXBseSlcXG4ge1xcbiBcXHRzaXplX3QgdG90YWxfbGVuID0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKSArIHBheWxvYWRfbGVuO1xcbiBcXHRzdHJ1Y3Qgdm5pY193cSAqd3EgPSBcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fd3E7XFxuIFxcdHN0cnVjdCB3cV9lbmV0X2Rlc2MgKmRlc2M7XFxuK1xcdGJvb2wgcmVwbHlfZXhwZWN0ZWQgPSBmYWxzZTtcXG4gXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0O1xcbiBcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbiBcXHR1MTYgdmxhbl90YWc7XFxuQEAgLTY4LDcgKzcxLDIxIEBAIGludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsXFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHR9XFxuIFxcbi1cXHRlbmljX21ib3hfZmlsbF9oZHIoZW5pYywgYnVmLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHRvdGFsX2xlbik7XFxuK1xcdC8qIFJlcGxpZXMgcmV1c2UgdGhlIGluaXRpYXRpbmcgbWVzc2FnZSBudW1iZXIuICBSZXF1ZXN0cyBhbmRcXG4rXFx0ICogbm90aWZpY2F0aW9ucyBhbGxvY2F0ZSBhIG5ldyBvbmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJldXNlX21zZ19udW0pXFxuK1xcdFxcdG1zZ19udW0gPSArK2VuaWMtXFx1MDAzZW1ib3hfbXNnX251bTtcXG4rXFx0aWYgKGV4cGVjdGVkX3JlcGx5KSB7XFxuK1xcdFxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXApO1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XFxuK1xcdFxcdGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSBleHBlY3RlZF9yZXBseTtcXG4rXFx0XFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID0gbXNnX251bTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XFxuK1xcdFxcdHJlcGx5X2V4cGVjdGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0ZW5pY19tYm94X2ZpbGxfaGRyKGJ1ZiwgbXNnX3R5cGUsIGRzdF92bmljX2lkLCB0b3RhbF9sZW4sIG1zZ19udW0pO1xcbiBcXHRpZiAocGF5bG9hZF9sZW4pIHtcXG4gXFx0XFx0dm9pZCAqZHN0ID0gYnVmICsgc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKTtcXG4gXFxuQEAgLTEzOSwxOCArMTU2LDY2IEBAIGludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsXFxuIFxcdFxcdCAgIFxcXCJNQk9YIHNlbmQgbXNnX3R5cGUgJXUgZHN0ICV1IHZsYW4gJXUgZXJyICVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgICBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHZsYW5fdGFnLCBlcnIpO1xcbiB1bmxvY2s6XFxuK1xcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgcmVwbHlfZXhwZWN0ZWQpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X3N0YXRlX2xvY2spO1xcbitcXHRcXHRpZiAoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9PSBleHBlY3RlZF9yZXBseSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID09IG1zZ19udW0pIHtcXG4rXFx0XFx0XFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XFxuK1xcdFxcdFxcdGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfbXNnX251bSA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XFxuK1xcdH1cXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2xvY2spO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxcbitcXHRcXHQgICAgICAgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfbGVuKVxcbit7XFxuK1xcdHJldHVybiBlbmljX21ib3hfc2VuZF9tc2dfaWQoZW5pYywgbXNnX3R5cGUsIGRzdF92bmljX2lkLCBwYXlsb2FkLFxcbitcXHRcXHRcXHRcXHQgICAgIHBheWxvYWRfbGVuLCAwLCBmYWxzZSwgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW5pY19tYm94X3NlbmRfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxcbitcXHRcXHRcXHRcXHR1MTYgZHN0X3ZuaWNfaWQsIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbixcXG4rXFx0XFx0XFx0XFx0dTY0IG1zZ19udW0pXFxuK3tcXG4rXFx0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZ19pZChlbmljLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHBheWxvYWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGF5bG9hZF9sZW4sIG1zZ19udW0sIHRydWUsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuaWNfbWJveF92Zl9zZW5kX3JlcXVlc3Qoc3RydWN0IGVuaWMgKmVuaWMsIHU4IHJlcXVlc3RfdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgICB1OCBleHBlY3RlZF9yZXBseSwgdm9pZCAqcGF5bG9hZCxcXG4rXFx0XFx0XFx0XFx0ICAgICB1MTYgcGF5bG9hZF9sZW4pXFxuK3tcXG4rXFx0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZ19pZChlbmljLCByZXF1ZXN0X3R5cGUsIEVOSUNfTUJPWF9EU1RfUEYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGF5bG9hZCwgcGF5bG9hZF9sZW4sIDAsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHQgICAgIGV4cGVjdGVkX3JlcGx5KTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBlbmljX21ib3hfd2FpdF9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYywgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbGVmdDtcXG4rXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcykpO1xcbitcXHRpZiAobGVmdClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBJbnZhbGlkYXRlIGEgcmVxdWVzdCB0aGF0IHRoZSBoYW5kbGVyIGhhcyBub3QgYWxyZWFkeSBhY2NlcHRlZC4gIEFcXG4rXFx0ICogZGVsYXllZCByZXBseSBjYW5ub3QgbWF0Y2ggYSBsYXRlciByZXF1ZXN0IGJlY2F1c2UgbWVzc2FnZSBudW1iZXJzIGFyZVxcbitcXHQgKiBtb25vdG9uaWMgYWNyb3NzIGNoYW5uZWwgcmVvcGVuLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X3N0YXRlX2xvY2spO1xcbitcXHRpZiAoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSkge1xcbitcXHRcXHRlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcXG4rXFx0XFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID0gMDtcXG4rXFx0XFx0ZXJyID0gLUVUSU1FRE9VVDtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcXG4gXFxuLVxcdHJldHVybiBsZWZ0ID8gMCA6IC1FVElNRURPVVQ7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIGludCBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmZfaWQsIHUzMiBsaW5rX3N0YXRlKVxcbkBAIC0xNzgsOCArMjQzLDggQEAgc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX2NhcGFiaWxpdHkoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZyxcXG4gXFx0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XFxuIFxcdHJlcGx5LnZlcnNpb24gPSBjcHVfdG9fbGUzMihFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSk7XFxuIFxcbi1cXHRyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZLCB2Zl9pZCxcXG4tXFx0XFx0XFx0XFx0ICBcXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSkpO1xcbitcXHRyZXR1cm4gZW5pY19tYm94X3NlbmRfcmVwbHkoZW5pYywgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFksIHZmX2lkLFxcbitcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpLCBtc2dfbnVtKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXFxuQEAgLTIwOCw4ICsyNzMsOCBAQCBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZyxcXG4gXFx0fVxcbiBcXG4gXFx0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XFxuLVxcdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFksIHZmX2lkLFxcbi1cXHRcXHRcXHRcXHQgXFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcXG4rXFx0ZXJyID0gZW5pY19tYm94X3NlbmRfcmVwbHkoZW5pYywgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZLCB2Zl9pZCxcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpLCBtc2dfbnVtKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTI1Myw4ICszMTgsOCBAQCBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfdW5yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqbXNnLFxcbiBcXHRlbmljLVxcdTAwM2V2Zl9zdGF0ZVt2Zl9pZF0ucmVnaXN0ZXJlZCA9IGZhbHNlO1xcbiBcXG4gXFx0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XFxuLVxcdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXFxuLVxcdFxcdFxcdFxcdCBcXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSkpO1xcbitcXHRlcnIgPSBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXFxuK1xcdFxcdFxcdFxcdCAgIFxcdTAwMjZyZXBseSwgc2l6ZW9mKHJlcGx5KSwgbXNnX251bSk7XFxuIFxcbiBcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbiBcXHRcXHRuZXRkZXZfaW5mbyhlbmljLVxcdTAwM2VuZXRkZXYsXFxuQEAgLTMyNCwxMDUgKzM4OSwxMTYgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3BmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxcbiBcXHRcXHRcXHQgICAgaGRyLVxcdTAwM2Vtc2dfdHlwZSwgdmZfaWQsIGVycik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfY2FwYWJpbGl0eV9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHZvaWQgKnBheWxvYWQpXFxuK3N0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsIHU4IHJlcGx5X3R5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZvaWQgKnBheWxvYWQsIHU2NCBtc2dfbnVtKVxcbiB7XFxuLVxcdHN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDtcXG4tXFxuLVxcdGlmIChSRUFEX09OQ0UoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSkgIT0gRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFkpIHtcXG4rXFx0c3RydWN0IGVuaWNfbWJveF9nZW5lcmljX3JlcGx5ICpyZXBseSA9IHBheWxvYWQ7XFxuK1xcdHUxNiByZXRfbWFqb3IgPSBsZTE2X3RvX2NwdShyZXBseS1cXHUwMDNlcmV0X21ham9yKTtcXG4rXFx0dTY0IGV4cGVjdGVkX21zZ19udW07XFxuK1xcdHU4IGV4cGVjdGVkX3R5cGU7XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XFxuK1xcdGV4cGVjdGVkX3R5cGUgPSBlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5O1xcbitcXHRleHBlY3RlZF9tc2dfbnVtID0gZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtO1xcbitcXHRpZiAoZXhwZWN0ZWRfdHlwZSAhPSByZXBseV90eXBlIHx8IGV4cGVjdGVkX21zZ19udW0gIT0gbXNnX251bSkge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcXG4gXFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbi1cXHRcXHRcXHQgICAgXFxcIk1CT1g6IHN0YWxlIGNhcGFiaWxpdHkgcmVwbHkgKGV4cGVjdGVkICV1KSwgZHJvcFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgIFJFQURfT05DRShlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KSk7XFxuK1xcdFxcdFxcdCAgICBcXFwiTUJPWDogc3RhbGUgcmVwbHkgJXUvJWxsdSAoZXhwZWN0ZWQgJXUvJWxsdSksIGRyb3BcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICByZXBseV90eXBlLCAodW5zaWduZWQgbG9uZyBsb25nKW1zZ19udW0sXFxuK1xcdFxcdFxcdCAgICBleHBlY3RlZF90eXBlLCAodW5zaWduZWQgbG9uZyBsb25nKWV4cGVjdGVkX21zZ19udW0pO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChsZTE2X3RvX2NwdShyZXBseS1cXHUwMDNlcmVwbHkucmV0X21ham9yKSA9PSAwKVxcbi1cXHRcXHRlbmljLVxcdTAwM2VwZl9jYXBfdmVyc2lvbiA9IGxlMzJfdG9fY3B1KHJlcGx5LVxcdTAwM2V2ZXJzaW9uKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuLVxcdFxcdFxcdCAgICBcXFwiTUJPWDogUEYgcmVqZWN0ZWQgY2FwYWJpbGl0eSByZXF1ZXN0OiAldS8ldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVxcdTAwM2VyZXBseS5yZXRfbWFqb3IpLFxcbi1cXHRcXHRcXHQgICAgbGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9taW5vcikpO1xcbi1cXHRjb21wbGV0ZShcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9jb21wKTtcXG4tfVxcbitcXHRpZiAoIXJldF9tYWpvcikge1xcbitcXHRcXHRzd2l0Y2ggKHJlcGx5X3R5cGUpIHtcXG4rXFx0XFx0Y2FzZSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWToge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnICpjYXAgPSBwYXlsb2FkO1xcbiBcXG4tc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9yZWdpc3Rlcl9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKnBheWxvYWQpXFxuLXtcXG4tXFx0c3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDtcXG4tXFxuLVxcdGlmIChSRUFEX09OQ0UoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSkgIT0gRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZKSB7XFxuLVxcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4tXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBzdGFsZSByZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgUkVBRF9PTkNFKGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpKTtcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAobGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9tYWpvcikpIHtcXG4tXFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbi1cXHRcXHRcXHQgICAgXFxcIk1CT1g6IFZGIHJlZ2lzdGVyIHJlamVjdGVkIGJ5IFBGOiAldS8ldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVxcdTAwM2VyZXBseS5yZXRfbWFqb3IpLFxcbi1cXHRcXHRcXHQgICAgbGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9taW5vcikpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2VwZl9jYXBfdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0ICAgbGUzMl90b19jcHUoY2FwLVxcdTAwM2V2ZXJzaW9uKSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOlxcbitcXHRcXHRcXHRXUklURV9PTkNFKGVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQsIHRydWUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWTpcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkLCBmYWxzZSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4rXFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XFxuK1xcdGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfbXNnX251bSA9IDA7XFxuIFxcdGNvbXBsZXRlKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXApO1xcbi19XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X3N0YXRlX2xvY2spO1xcbiBcXG4tc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV91bnJlZ2lzdGVyX3JlcGx5KHN0cnVjdCBlbmljICplbmljLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgdm9pZCAqcGF5bG9hZClcXG4te1xcbi1cXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyAqcmVwbHkgPSBwYXlsb2FkO1xcbi1cXG4tXFx0aWYgKFJFQURfT05DRShlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KSAhPSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSkge1xcbitcXHRpZiAocmV0X21ham9yKVxcbiBcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuLVxcdFxcdFxcdCAgICBcXFwiTUJPWDogc3RhbGUgdW5yZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgUkVBRF9PTkNFKGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpKTtcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAobGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9tYWpvcikpIHtcXG4tXFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbi1cXHRcXHRcXHQgICAgXFxcIk1CT1g6IFZGIHVucmVnaXN0ZXIgcmVqZWN0ZWQgYnkgUEY6ICV1LyV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgbGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9tYWpvciksXFxuLVxcdFxcdFxcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cXHUwMDNlcmVwbHkucmV0X21pbm9yKSk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQgPSBmYWxzZTtcXG4tXFx0fVxcbi1cXHRjb21wbGV0ZShcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9jb21wKTtcXG4rXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBQRiByZWplY3RlZCByZXBseSB0eXBlICV1OiAldS8ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIHJlcGx5X3R5cGUsIHJldF9tYWpvcixcXG4rXFx0XFx0XFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVxcdTAwM2VyZXRfbWlub3IpKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpwYXlsb2FkKVxcbitzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKnBheWxvYWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHU2NCBtc2dfbnVtKVxcbiB7XFxuIFxcdHN0cnVjdCBlbmljX21ib3hfcGZfbGlua19zdGF0ZV9ub3RpZl9tc2cgKm5vdGlmID0gcGF5bG9hZDtcXG4gXFx0c3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX2Fja19tc2cgYWNrID0ge307XFxuK1xcdHUzMiBsaW5rX3N0YXRlID0gbGUzMl90b19jcHUobm90aWYtXFx1MDAzZWxpbmtfc3RhdGUpO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0c3dpdGNoIChsZTMyX3RvX2NwdShub3RpZi1cXHUwMDNlbGlua19zdGF0ZSkpIHtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xcbitcXHRzd2l0Y2ggKGxpbmtfc3RhdGUpIHtcXG4gXFx0Y2FzZSBFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEU6XFxuLVxcdFxcdGlmICghbmV0aWZfY2Fycmllcl9vayhlbmljLVxcdTAwM2VuZXRkZXYpKVxcbitcXHRcXHRlbmljLVxcdTAwM2V2Zl9saW5rX3N0YXRlID0gRU5JQ19WRl9MSU5LX1NUQVRFX1VQO1xcbitcXHRcXHRpZiAoZW5pYy1cXHUwMDNldmZfbGlua19ydW5uaW5nIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhbmV0aWZfY2Fycmllcl9vayhlbmljLVxcdTAwM2VuZXRkZXYpKVxcbiBcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29uKGVuaWMtXFx1MDAzZW5ldGRldik7XFxuIFxcdFxcdG5ldGRldl9kYmcoZW5pYy1cXHUwMDNlbmV0ZGV2LCBcXFwiTUJPWDogbGluayBzdGF0ZSAtXFx1MDAzZSBVUFxcXFxuXFxcIik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEVOSUNfTUJPWF9MSU5LX1NUQVRFX0RJU0FCTEU6XFxuLVxcdFxcdGlmIChuZXRpZl9jYXJyaWVyX29rKGVuaWMtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdGVuaWMtXFx1MDAzZXZmX2xpbmtfc3RhdGUgPSBFTklDX1ZGX0xJTktfU1RBVEVfRE9XTjtcXG4rXFx0XFx0aWYgKGVuaWMtXFx1MDAzZXZmX2xpbmtfcnVubmluZyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgbmV0aWZfY2Fycmllcl9vayhlbmljLVxcdTAwM2VuZXRkZXYpKVxcbiBcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihlbmljLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRcXHRuZXRkZXZfZGJnKGVuaWMtXFx1MDAzZW5ldGRldiwgXFxcIk1CT1g6IGxpbmsgc3RhdGUgLVxcdTAwM2UgRE9XTlxcXFxuXFxcIik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsIFxcXCJNQk9YOiB1bmtub3duIGxpbmsgc3RhdGUgJXVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICBsZTMyX3RvX2NwdShub3RpZi1cXHUwMDNlbGlua19zdGF0ZSkpO1xcbitcXHRcXHRcXHQgICAgbGlua19zdGF0ZSk7XFxuIFxcdFxcdGFjay5hY2sucmV0X21ham9yID0gY3B1X3RvX2xlMTYoRU5JQ19NQk9YX0VSUl9HRU5FUklDKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmVuaWMtXFx1MDAzZXZmX2xpbmtfc3RhdGVfbG9jayk7XFxuIFxcbi1cXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfQUNLLFxcbi1cXHRcXHRcXHRcXHQgRU5JQ19NQk9YX0RTVF9QRiwgXFx1MDAyNmFjaywgc2l6ZW9mKGFjaykpO1xcbitcXHRlcnIgPSBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0ssXFxuK1xcdFxcdFxcdFxcdCAgIEVOSUNfTUJPWF9EU1RfUEYsIFxcdTAwMjZhY2ssIHNpemVvZihhY2spLCBtc2dfbnVtKTtcXG4gXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXFxuIFxcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4gXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBmYWlsZWQgdG8gc2VuZCBsaW5rIHN0YXRlIEFDSzogJWRcXFxcblxcXCIsIGVycik7XFxuIH1cXG4gXFxuK3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfcmVzZXQoc3RydWN0IGVuaWMgKmVuaWMpXFxuK3tcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xcbitcXHRlbmljLVxcdTAwM2V2Zl9saW5rX3N0YXRlID0gRU5JQ19WRl9MSU5LX1NUQVRFX1VOS05PV047XFxuK1xcdGlmIChlbmljLVxcdTAwM2V2Zl9saW5rX3J1bm5pbmcgXFx1MDAyNlxcdTAwMjYgbmV0aWZfY2Fycmllcl9vayhlbmljLVxcdTAwM2VuZXRkZXYpKVxcbitcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihlbmljLVxcdTAwM2VuZXRkZXYpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcXG4rfVxcbitcXG4rdm9pZCBlbmljX21ib3hfdmZfbGlua19zdGF0ZV9zZXRfcnVubmluZyhzdHJ1Y3QgZW5pYyAqZW5pYywgYm9vbCBydW5uaW5nKVxcbit7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcXG4rXFx0ZW5pYy1cXHUwMDNldmZfbGlua19ydW5uaW5nID0gcnVubmluZztcXG4rXFx0aWYgKHJ1bm5pbmcgXFx1MDAyNlxcdTAwMjYgZW5pYy1cXHUwMDNldmZfbGlua19zdGF0ZSA9PSBFTklDX1ZGX0xJTktfU1RBVEVfVVApIHtcXG4rXFx0XFx0aWYgKCFuZXRpZl9jYXJyaWVyX29rKGVuaWMtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdFxcdG5ldGlmX2NhcnJpZXJfb24oZW5pYy1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0fSBlbHNlIGlmIChuZXRpZl9jYXJyaWVyX29rKGVuaWMtXFx1MDAzZW5ldGRldikpIHtcXG4rXFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoZW5pYy1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgZW5pY19tYm94X3ZmX3BheWxvYWRfb2soc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxcbiBcXHRcXHRcXHRcXHQgICAgdTE2IHBheWxvYWRfbGVuLCBzaXplX3QgbWluX2xlbilcXG4ge1xcbkBAIC00MzksNiArNTE1LDggQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIsIHZvaWQgKnBheWxvYWQsXFxuIFxcdFxcdFxcdFxcdCAgICAgdTE2IHBheWxvYWRfbGVuKVxcbiB7XFxuK1xcdHU2NCBtc2dfbnVtID0gbGU2NF90b19jcHUoaGRyLVxcdTAwM2Vtc2dfbnVtKTtcXG4rXFxuIFxcdHN3aXRjaCAoaGRyLVxcdTAwM2Vtc2dfdHlwZSkge1xcbiBcXHRjYXNlIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZOiB7XFxuIFxcdFxcdHNpemVfdCBleHAgPSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyk7XFxuQEAgLTQ0Niw3ICs1MjQsNyBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXFxuIFxcdFxcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVxcdTAwM2Vtc2dfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRlbmljX21ib3hfdmZfaGFuZGxlX2NhcGFiaWxpdHlfcmVwbHkoZW5pYywgcGF5bG9hZCk7XFxuK1xcdFxcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoZW5pYywgaGRyLVxcdTAwM2Vtc2dfdHlwZSwgcGF5bG9hZCwgbXNnX251bSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOiB7XFxuQEAgLTQ1NSw3ICs1MzMsNyBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXFxuIFxcdFxcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVxcdTAwM2Vtc2dfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRlbmljX21ib3hfdmZfaGFuZGxlX3JlZ2lzdGVyX3JlcGx5KGVuaWMsIHBheWxvYWQpO1xcbitcXHRcXHRlbmljX21ib3hfdmZfaGFuZGxlX3JlcGx5KGVuaWMsIGhkci1cXHUwMDNlbXNnX3R5cGUsIHBheWxvYWQsIG1zZ19udW0pO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRjYXNlIEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUExZOiB7XFxuQEAgLTQ2NCw3ICs1NDIsNyBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXFxuIFxcdFxcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVxcdTAwM2Vtc2dfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRlbmljX21ib3hfdmZfaGFuZGxlX3VucmVnaXN0ZXJfcmVwbHkoZW5pYywgcGF5bG9hZCk7XFxuK1xcdFxcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoZW5pYywgaGRyLVxcdTAwM2Vtc2dfdHlwZSwgcGF5bG9hZCwgbXNnX251bSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcdGNhc2UgRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfTk9USUY6IHtcXG5AQCAtNDczLDcgKzU1MSw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYyxcXG4gXFx0XFx0aWYgKCFlbmljX21ib3hfdmZfcGF5bG9hZF9vayhlbmljLCBoZHItXFx1MDAzZW1zZ190eXBlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHBheWxvYWRfbGVuLCBleHApKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdGVuaWNfbWJveF92Zl9oYW5kbGVfbGlua19zdGF0ZShlbmljLCBwYXlsb2FkKTtcXG4rXFx0XFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKGVuaWMsIHBheWxvYWQsIG1zZ19udW0pO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRkZWZhdWx0OlxcbkBAIC01NDIsMzIgKzYyMCwzMSBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfcmVjdl9oYW5kbGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpidWYsXFxuIGludCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYylcXG4ge1xcbiBcXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfbXNnIHJlcSA9IHt9O1xcbitcXHR1MzIgdmVyc2lvbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVuaWMtXFx1MDAzZXBmX2NhcF92ZXJzaW9uID0gMDtcXG4tXFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfY29tcCk7XFxuLVxcdFdSSVRFX09OQ0UoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFkpO1xcbitcXHRXUklURV9PTkNFKGVuaWMtXFx1MDAzZXBmX2NhcF92ZXJzaW9uLCAwKTtcXG4gXFx0cmVxLnZlcnNpb24gPSBjcHVfdG9fbGUzMihFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSk7XFxuIFxcbi1cXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVRVUVTVCxcXG4tXFx0XFx0XFx0XFx0IEVOSUNfTUJPWF9EU1RfUEYsIFxcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRXUklURV9PTkNFKGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xcbitcXHRlcnIgPSBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KGVuaWMsXFxuK1xcdFxcdFxcdFxcdFxcdEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QsXFxuK1xcdFxcdFxcdFxcdFxcdEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSk7XFxuK1xcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4gXFxuIFxcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xcbi1cXHRXUklURV9PTkNFKGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xcbitcXHR2ZXJzaW9uID0gUkVBRF9PTkNFKGVuaWMtXFx1MDAzZXBmX2NhcF92ZXJzaW9uKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuIFxcdFxcdFxcdCAgICBcXFwiTUJPWDogbm8gY2FwYWJpbGl0eSByZXBseSBmcm9tIFBGXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGVuaWMtXFx1MDAzZXBmX2NhcF92ZXJzaW9uIFxcdTAwM2MgRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpIHtcXG4rXFx0aWYgKHZlcnNpb24gXFx1MDAzYyBFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSkge1xcbiBcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuIFxcdFxcdFxcdCAgICBcXFwiTUJPWDogUEYgcmVqZWN0ZWQgY2FwYWJpbGl0eSByZXF1ZXN0IG9yIHJlcG9ydGVkIHVuc3VwcG9ydGVkIHZlcnNpb24gJXVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICBlbmljLVxcdTAwM2VwZl9jYXBfdmVyc2lvbik7XFxuK1xcdFxcdFxcdCAgICB2ZXJzaW9uKTtcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuIFxcbkBAIC01NzYsMjggKzY1MywyNSBAQCBpbnQgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpXFxuIFxcbiBpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKVxcbiB7XFxuK1xcdGJvb2wgcmVnaXN0ZXJlZDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQgPSBmYWxzZTtcXG4tXFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfY29tcCk7XFxuLVxcdFdSSVRFX09OQ0UoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZKTtcXG4rXFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkLCBmYWxzZSk7XFxuIFxcbi1cXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUVVFU1QsXFxuLVxcdFxcdFxcdFxcdCBFTklDX01CT1hfRFNUX1BGLCBOVUxMLCAwKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRXUklURV9PTkNFKGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xcbitcXHRlcnIgPSBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVFVRVNULFxcbitcXHRcXHRcXHRcXHRcXHRFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFksIE5VTEwsIDApO1xcbitcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuIFxcbiBcXHRlcnIgPSBlbmljX21ib3hfd2FpdF9yZXBseShlbmljLCAzMDAwKTtcXG4tXFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCAwKTtcXG4rXFx0cmVnaXN0ZXJlZCA9IFJFQURfT05DRShlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuIFxcdFxcdFxcdCAgICBcXFwiTUJPWDogVkYgcmVnaXN0cmF0aW9uIHdpdGggUEYgdGltZWQgb3V0XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKVxcbitcXHRpZiAoIXJlZ2lzdGVyZWQpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTYwNSw0MyArNjc5LDQ4IEBAIGludCBlbmljX21ib3hfdmZfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpXFxuIFxcbiBpbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpXFxuIHtcXG4rXFx0Ym9vbCByZWdpc3RlcmVkO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCFlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKVxcbitcXHRpZiAoIVJFQURfT05DRShlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9jb21wKTtcXG4tXFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSk7XFxuLVxcbi1cXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVRVUVTVCxcXG4tXFx0XFx0XFx0XFx0IEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFdSSVRFX09OQ0UoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgMCk7XFxuK1xcdGVyciA9IGVuaWNfbWJveF92Zl9zZW5kX3JlcXVlc3QoZW5pYyxcXG4rXFx0XFx0XFx0XFx0XFx0RU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVRVUVTVCxcXG4rXFx0XFx0XFx0XFx0XFx0RU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFksXFxuK1xcdFxcdFxcdFxcdFxcdE5VTEwsIDApO1xcbitcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuIFxcbiBcXHRlcnIgPSBlbmljX21ib3hfd2FpdF9yZXBseShlbmljLCAzMDAwKTtcXG4tXFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCAwKTtcXG4rXFx0cmVnaXN0ZXJlZCA9IFJFQURfT05DRShlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0aWYgKGVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQpXFxuK1xcdGlmIChyZWdpc3RlcmVkKVxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpXFxuIHtcXG4tXFx0LyogbWJveF9sb2NrIGFuZCBtYm94X2NvbXAgbXVzdCBiZSBpbml0aWFsaXplZCBleGFjdGx5IG9uY2UgcGVyXFxuK1xcdGJvb2wgcmVpbml0ID0gZW5pYy1cXHUwMDNlbWJveF9pbml0aWFsaXplZDtcXG4rXFxuK1xcdC8qIE1CT1ggbG9ja3MgYW5kIG1ib3hfY29tcCBtdXN0IGJlIGluaXRpYWxpemVkIGV4YWN0bHkgb25jZSBwZXJcXG4gXFx0ICogZGV2aWNlIGxpZmV0aW1lOyB0aGUgUEYgc3Jpb3ZfY29uZmlndXJlIHBhdGggY2FuIHJlLWVudGVyIHRoaXNcXG4gXFx0ICogb24gZWFjaCBlbmFibGUgY3ljbGUgd2hlcmUgdGhlc2UgcHJpbWl0aXZlcyBhcmUgYWxyZWFkeSBzZXQgdXAuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIWVuaWMtXFx1MDAzZW1ib3hfaW5pdGlhbGl6ZWQpIHtcXG4rXFx0aWYgKCFyZWluaXQpIHtcXG4gXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9sb2NrKTtcXG4gXFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXApO1xcbitcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcXG4rXFx0XFx0ZW5pYy1cXHUwMDNlbWJveF9tc2dfbnVtID0gMDtcXG4gXFx0XFx0ZW5pYy1cXHUwMDNlbWJveF9pbml0aWFsaXplZCA9IHRydWU7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXApO1xcbiBcXHR9XFxuLVxcdGVuaWMtXFx1MDAzZW1ib3hfbXNnX251bSA9IDA7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcXG4rXFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XFxuK1xcdGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfbXNnX251bSA9IDA7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X3N0YXRlX2xvY2spO1xcbiBcXHRlbmljLVxcdTAwM2VhZG1pbl9ycV9oYW5kbGVyID0gZW5pY19tYm94X3JlY3ZfaGFuZGxlcjtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaFxcbmluZGV4IDE1ZTMwZWUyYjBlZDkuLjYwNDA5YmFkMmYyODQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmhcXG5AQCAtODgsNiArODgsOCBAQCB2b2lkIGVuaWNfbWJveF9pbml0KHN0cnVjdCBlbmljICplbmljKTtcXG4gaW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCxcXG4gXFx0XFx0ICAgICAgIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbik7XFxuIGludCBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmZfaWQsIHUzMiBsaW5rX3N0YXRlKTtcXG4rdm9pZCBlbmljX21ib3hfdmZfbGlua19zdGF0ZV9yZXNldChzdHJ1Y3QgZW5pYyAqZW5pYyk7XFxuK3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfc2V0X3J1bm5pbmcoc3RydWN0IGVuaWMgKmVuaWMsIGJvb2wgcnVubmluZyk7XFxuIGludCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYyk7XFxuIGludCBlbmljX21ib3hfdmZfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpO1xcbiBpbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQyMjozOToxNC43MjQ3NjU0NjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyNjM4MDYwMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciByZXF1aXJpbmcgZGVkaWNhdGVkIENpc2NvIFZJQyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZXJlZm9yZSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZDFmZWI1ZDE4YTU4ZmFhNjVmYWNjMGIzZWY1OTkwMTJkZjhkY2JlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMzAgMjI6Mzk6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXG5pbmRleCA0YTY3OTQ3Y2ZiOWYzLi43YTUwOWEwNTY5OTAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXG5AQCAtMTM3LDYgKzEzNywxMiBAQCBzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUge1xuIFx0dTggbWFjX2FkZHJbRVRIX0FMRU5dO1xuIH07XG4gXG4rZW51bSBlbmljX3ZmX2xpbmtfc3RhdGUge1xuK1x0RU5JQ19WRl9MSU5LX1NUQVRFX1VOS05PV04sXG4rXHRFTklDX1ZGX0xJTktfU1RBVEVfRE9XTixcbitcdEVOSUNfVkZfTElOS19TVEFURV9VUCxcbit9O1xuK1xuIC8qIGVuaWNfcmZzX2ZsdHJfbm9kZSAtIHJmcyBmaWx0ZXIgbm9kZSBpbiBoYXNoIHRhYmxlXG4gICpcdEBAa2V5czogSVB2NCA1IHR1cGxlXG4gICpcdEBmbG93X2lkOiBmbG93X2lkIG9mIGNsc2YgZmlsdGVyIHByb3ZpZGVkIGJ5IGtlcm5lbFxuQEAgLTMxMiwxOSArMzE4LDI1IEBAIHN0cnVjdCBlbmljIHtcbiBcdHVuc2lnbmVkIGludCBhZG1pbl9tc2dfY291bnQ7XHQvKiBjdXJyZW50IGRlcHRoIG9mIGFkbWluX21zZ19saXN0ICovXG4gXHR2b2lkICgqYWRtaW5fcnFfaGFuZGxlcikoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcbiBcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbGVuKTtcbitcdC8qIFRoZSBQRiBpcyBhdXRob3JpdGF0aXZlIGZvciBhIFYyIFZGJ3MgY2Fycmllci4gIEtlZXAgdGhlIGxhc3RcbitcdCAqIG5vdGlmaWNhdGlvbiBhY3Jvc3MgYW4gb3JkaW5hcnkgbmV0ZGV2IGNsb3NlL29wZW4gYW5kIHNlcmlhbGl6ZSBpdFxuK1x0ICogYWdhaW5zdCB0aGUgb3Blbi9zdG9wIGNhcnJpZXIgdHJhbnNpdGlvbi5cbitcdCAqL1xuK1x0c3BpbmxvY2tfdCB2Zl9saW5rX3N0YXRlX2xvY2s7XG4rXHRlbnVtIGVuaWNfdmZfbGlua19zdGF0ZSB2Zl9saW5rX3N0YXRlO1xuK1x0Ym9vbCB2Zl9saW5rX3J1bm5pbmc7XG4gXG4gXHQvKiBNQk9YIHByb3RvY29sIHN0YXRlIOKAlCBtYm94X2xvY2sgc2VyaWFsaXplcyBhZG1pbiBXUSBzZW5kcyAqL1xuIFx0c3RydWN0IG11dGV4IG1ib3hfbG9jaztcbiBcdHU2NCBtYm94X21zZ19udW07XG4tXHQvKiBNQk9YIHJlcXVlc3QtcmVwbHkgc3RhdGUuICBtYm94X2V4cGVjdGVkX3JlcGx5IGlzIHdyaXR0ZW4gYW5kXG4tXHQgKiBjbGVhcmVkIGJ5IHRoZSBwcm9jZXNzLWNvbnRleHQgcmVxdWVzdCBoZWxwZXJzIChjYXBhYmlsaXR5L3JlZ2lzdGVyL1xuLVx0ICogdW5yZWdpc3RlcikgYW5kIG9ubHkgcmVhZCBieSB0aGUgYWRtaW5fbXNnX3dvcmsgcmVjZWl2ZSBoYW5kbGVycywgc29cbi1cdCAqIGl0IGlzIGFubm90YXRlZCB3aXRoIFJFQURfT05DRSgpL1dSSVRFX09OQ0UoKSByYXRoZXIgdGhhbiBsb2NrZWQ6XG4tXHQgKiBvbmx5IG9uZSByZXF1ZXN0IGlzIGluIGZsaWdodCBhdCBhIHRpbWUgKHJlcXVlc3RlcnMgcnVuIHVuZGVyIFJUTkwgb3Jcbi1cdCAqIHNpbmdsZS10aHJlYWRlZCBwcm9iZS9yZW1vdmUpLCBzbyBlYWNoIHJlcXVlc3QgaXMgc2VyaWFsaXplZCBhbmQgaXRzXG4tXHQgKiByZXBseSBjb21wbGV0ZXMgbWJveF9jb21wIGJlZm9yZSB0aGUgbmV4dCByZXF1ZXN0IGlzIGlzc3VlZC5cbitcdC8qIE1CT1ggcmVxdWVzdC1yZXBseSBzdGF0ZS4gIEV4aXN0aW5nIHJlcXVlc3QgY2FsbGVycyBhbGxvdyBvbmx5IG9uZVxuK1x0ICogcmVxdWVzdCBpbiBmbGlnaHQuICBUaGUgc3RhdGUgbG9jayBhcmJpdHJhdGVzIHJlcGx5IGFjY2VwdGFuY2UgYWdhaW5zdFxuK1x0ICogdGltZW91dCBpbnZhbGlkYXRpb24sIHdoaWxlIG1ib3hfY29tcCBwdWJsaXNoZXMgdGhlIGFjY2VwdGVkIHJlc3VsdCB0b1xuK1x0ICogdGhlIHJlcXVlc3Rlci5cbiBcdCAqL1xuIFx0c3RydWN0IGNvbXBsZXRpb24gbWJveF9jb21wO1xuK1x0c3BpbmxvY2tfdCBtYm94X3N0YXRlX2xvY2s7XHQvKiBwcm90ZWN0cyBleHBlY3RlZCByZXBseSBzdGF0ZSAqL1xuK1x0dTY0IG1ib3hfZXhwZWN0ZWRfbXNnX251bTtcbiBcdHU4IG1ib3hfZXhwZWN0ZWRfcmVwbHk7XG4gXHRib29sIG1ib3hfaW5pdGlhbGl6ZWQ7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmNcbmluZGV4IDBiYWVmN2ExMjBlYzYuLjE0ZDE2MzdhNDM0MmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jXG5AQCAtMTgwMCw2ICsxODAwLDggQEAgc3RhdGljIGludCBlbmljX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcbiBcdGVuaWNfbm90aWZ5X3RpbWVyX3N0YXJ0KGVuaWMpO1xuIFx0ZW5pY19yZnNfdGltZXJfc3RhcnQoZW5pYyk7XG4rXHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcbitcdFx0ZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfc2V0X3J1bm5pbmcoZW5pYywgdHJ1ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC0xODUzLDcgKzE4NTUsMTAgQEAgc3RhdGljIGludCBlbmljX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVuaWMtXHUwMDNlcnFfY291bnQ7IGkrKylcbiBcdFx0bmFwaV9kaXNhYmxlKFx1MDAyNmVuaWMtXHUwMDNlbmFwaVtpXSk7XG4gXG4tXHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuK1x0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpXG4rXHRcdGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3NldF9ydW5uaW5nKGVuaWMsIGZhbHNlKTtcbitcdGVsc2VcbitcdFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcbiBcdGlmICh2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtXHUwMDNldmRldikgPT0gVk5JQ19ERVZfSU5UUl9NT0RFX01TSVgpXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVuaWMtXHUwMDNld3FfY291bnQ7IGkrKylcbiBcdFx0XHRuYXBpX2Rpc2FibGUoXHUwMDI2ZW5pYy1cdTAwM2VuYXBpW2VuaWNfY3Ffd3EoZW5pYywgaSldKTtcbkBAIC0yMjAxLDkgKzIyMDYsMTAgQEAgc3RhdGljIHZvaWQgZW5pY19hZG1pbl9jaGFuX3Jlb3BlbihzdHJ1Y3QgZW5pYyAqZW5pYylcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogSW5zdGFsbCB0aGUgTUJPWCByZWNlaXZlIGhhbmRsZXIgYW5kIHJlc2V0IHRoZSBzZXF1ZW5jZSBudW1iZXJcbi1cdCAqIGJlZm9yZSBvcGVuaW5nIHRoZSBjaGFubmVsLCBzbyB0aGUgaGFuZGxlciBpcyBpbiBwbGFjZSBiZWZvcmUgdGhlXG4tXHQgKiBhZG1pbiBpbnRlcnJ1cHQgaXMgdW5tYXNrZWQgYW5kIG5vIGVhcmx5IGNvbXBsZXRpb24gaXMgZHJvcHBlZC5cbitcdC8qIEluc3RhbGwgdGhlIE1CT1ggcmVjZWl2ZSBoYW5kbGVyIGFuZCBjbGVhciBwZW5kaW5nIHJlcGx5IHN0YXRlIGJlZm9yZVxuK1x0ICogb3BlbmluZyB0aGUgY2hhbm5lbCwgc28gdGhlIGhhbmRsZXIgaXMgaW4gcGxhY2UgYmVmb3JlIHRoZSBhZG1pblxuK1x0ICogaW50ZXJydXB0IGlzIHVubWFza2VkIGFuZCBubyBlYXJseSBjb21wbGV0aW9uIGlzIGRyb3BwZWQuICBLZWVwIHRoZVxuK1x0ICogc2VxdWVuY2UgbnVtYmVyIG1vbm90b25pYyBhY3Jvc3MgY2hhbm5lbCBnZW5lcmF0aW9ucy5cbiBcdCAqL1xuIFx0ZW5pY19tYm94X2luaXQoZW5pYyk7XG4gXG5AQCAtMjIxNSw3ICsyMjIxLDcgQEAgc3RhdGljIHZvaWQgZW5pY19hZG1pbl9jaGFuX3Jlb3BlbihzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcdCAqIHJlZ2lzdHJhdGlvbiBvdmVyIGEgZGVhZCBjaGFubmVsLlxuIFx0ICovXG4gXHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSlcbi1cdFx0ZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkID0gZmFsc2U7XG4rXHRcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkLCBmYWxzZSk7XG4gXG4gXHRlcnIgPSBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihlbmljKTtcbiBcdGlmIChlcnIpIHtcbkBAIC0yMjcxLDYgKzIyNzcsOCBAQCBzdGF0aWMgdm9pZCBlbmljX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0ZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKGVuaWMpO1xuIFxuIFx0ZW5pY19zdG9wKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbitcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKVxuK1x0XHRlbmljX21ib3hfdmZfbGlua19zdGF0ZV9yZXNldChlbmljKTtcbiBcbiBcdGVuaWNfZGV2X3NvZnRfcmVzZXQoZW5pYyk7XG4gXHRlbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7XG5AQCAtMjMxNSw2ICsyMzIzLDggQEAgc3RhdGljIHZvaWQgZW5pY190eF9oYW5nX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGVuaWNfZGV2X2hhbmdfbm90aWZ5KGVuaWMpO1xuIFx0ZW5pY19zdG9wKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbitcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKVxuK1x0XHRlbmljX21ib3hfdmZfbGlua19zdGF0ZV9yZXNldChlbmljKTtcbiBcbiBcdGVuaWNfZGV2X2hhbmdfcmVzZXQoZW5pYyk7XG4gXHRlbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7XG5AQCAtMzAxNSw2ICszMDI1LDcgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0ZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRlbmljLVx1MDAzZW5ldGRldiA9IG5ldGRldjtcbiBcdGVuaWMtXHUwMDNlcGRldiA9IHBkZXY7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZlbmljLVx1MDAzZXZmX2xpbmtfc3RhdGVfbG9jayk7XG4gXG4gXHQvKiBTZXR1cCBQQ0kgcmVzb3VyY2VzXG4gXHQgKi9cbkBAIC0zMzM5LDcgKzMzNTAsNyBAQCBzdGF0aWMgaW50IGVuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gZXJyX291dF9hZG1pbl9jbG9zZTpcbiBcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKSB7XG4tXHRcdGlmIChlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpIHtcbitcdFx0aWYgKFJFQURfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpKSB7XG4gXHRcdFx0aW50IHVucmVnX2VyciA9IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKGVuaWMpO1xuIFxuIFx0XHRcdGlmICh1bnJlZ19lcnIpXG5AQCAtMzM5Miw3ICszNDAzLDcgQEAgc3RhdGljIHZvaWQgZW5pY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdCAqIHRvdWNoaW5nIGEgbmV0ZGV2IHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpIHtcbi1cdFx0XHRpZiAoZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkKSB7XG4rXHRcdFx0aWYgKFJFQURfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpKSB7XG4gXHRcdFx0XHRpbnQgdW5yZWdfZXJyID0gZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoZW5pYyk7XG4gXG4gXHRcdFx0XHRpZiAodW5yZWdfZXJyKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jXG5pbmRleCAyZmIwZjFlMmZmNTAxLi41YzkzY2E0OTU1MmFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guY1xuQEAgLTE4LDIyICsxOCwyNSBAQFxuICNkZWZpbmUgRU5JQ19NQk9YX1BPTExfVElNRU9VVF9VU1x0NTAwMDAwMFxuICNkZWZpbmUgRU5JQ19NQk9YX1BPTExfSU5URVJWQUxfVVNcdDEwMFxuIFxuLXN0YXRpYyB2b2lkIGVuaWNfbWJveF9maWxsX2hkcihzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkcixcbi1cdFx0XHQgICAgICAgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCwgdTE2IG1zZ19sZW4pXG4rc3RhdGljIHZvaWQgZW5pY19tYm94X2ZpbGxfaGRyKHN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIsIHU4IG1zZ190eXBlLFxuK1x0XHRcdCAgICAgICB1MTYgZHN0X3ZuaWNfaWQsIHUxNiBtc2dfbGVuLCB1NjQgbXNnX251bSlcbiB7XG4gXHRtZW1zZXQoaGRyLCAwLCBzaXplb2YoKmhkcikpO1xuIFx0aGRyLVx1MDAzZWRzdF92bmljX2lkID0gY3B1X3RvX2xlMTYoZHN0X3ZuaWNfaWQpO1xuIFx0aGRyLVx1MDAzZW1zZ190eXBlID0gbXNnX3R5cGU7XG4gXHRoZHItXHUwMDNlbXNnX2xlbiA9IGNwdV90b19sZTE2KG1zZ19sZW4pO1xuLVx0aGRyLVx1MDAzZW1zZ19udW0gPSBjcHVfdG9fbGU2NCgrK2VuaWMtXHUwMDNlbWJveF9tc2dfbnVtKTtcbitcdGhkci1cdTAwM2Vtc2dfbnVtID0gY3B1X3RvX2xlNjQobXNnX251bSk7XG4gfVxuIFxuLWludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsXG4tXHRcdCAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pXG4rc3RhdGljIGludCBlbmljX21ib3hfc2VuZF9tc2dfaWQoc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxuK1x0XHRcdFx0IHUxNiBkc3Rfdm5pY19pZCwgdm9pZCAqcGF5bG9hZCxcbitcdFx0XHRcdCB1MTYgcGF5bG9hZF9sZW4sIHU2NCBtc2dfbnVtLCBib29sIHJldXNlX21zZ19udW0sXG4rXHRcdFx0XHQgdTggZXhwZWN0ZWRfcmVwbHkpXG4ge1xuIFx0c2l6ZV90IHRvdGFsX2xlbiA9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X2hkcikgKyBwYXlsb2FkX2xlbjtcbiBcdHN0cnVjdCB2bmljX3dxICp3cSA9IFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fd3E7XG4gXHRzdHJ1Y3Qgd3FfZW5ldF9kZXNjICpkZXNjO1xuK1x0Ym9vbCByZXBseV9leHBlY3RlZCA9IGZhbHNlO1xuIFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0O1xuIFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiBcdHUxNiB2bGFuX3RhZztcbkBAIC02OCw3ICs3MSwyMSBAQCBpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbi1cdGVuaWNfbWJveF9maWxsX2hkcihlbmljLCBidWYsIG1zZ190eXBlLCBkc3Rfdm5pY19pZCwgdG90YWxfbGVuKTtcbitcdC8qIFJlcGxpZXMgcmV1c2UgdGhlIGluaXRpYXRpbmcgbWVzc2FnZSBudW1iZXIuICBSZXF1ZXN0cyBhbmRcbitcdCAqIG5vdGlmaWNhdGlvbnMgYWxsb2NhdGUgYSBuZXcgb25lLlxuK1x0ICovXG4rXHRpZiAoIXJldXNlX21zZ19udW0pXG4rXHRcdG1zZ19udW0gPSArK2VuaWMtXHUwMDNlbWJveF9tc2dfbnVtO1xuK1x0aWYgKGV4cGVjdGVkX3JlcGx5KSB7XG4rXHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbitcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gZXhwZWN0ZWRfcmVwbHk7XG4rXHRcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID0gbXNnX251bTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuK1x0XHRyZXBseV9leHBlY3RlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRlbmljX21ib3hfZmlsbF9oZHIoYnVmLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHRvdGFsX2xlbiwgbXNnX251bSk7XG4gXHRpZiAocGF5bG9hZF9sZW4pIHtcbiBcdFx0dm9pZCAqZHN0ID0gYnVmICsgc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKTtcbiBcbkBAIC0xMzksMTggKzE1Niw2NiBAQCBpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxuIFx0XHQgICBcIk1CT1ggc2VuZCBtc2dfdHlwZSAldSBkc3QgJXUgdmxhbiAldSBlcnIgJWRcXG5cIixcbiBcdFx0ICAgbXNnX3R5cGUsIGRzdF92bmljX2lkLCB2bGFuX3RhZywgZXJyKTtcbiB1bmxvY2s6XG4rXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiByZXBseV9leHBlY3RlZCkge1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuK1x0XHRpZiAoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID09IGV4cGVjdGVkX3JlcGx5IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPT0gbXNnX251bSkge1xuK1x0XHRcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XG4rXHRcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPSAwO1xuK1x0XHR9XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbitcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZlbmljLVx1MDAzZW1ib3hfbG9jayk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxuK1x0XHQgICAgICAgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfbGVuKVxuK3tcbitcdHJldHVybiBlbmljX21ib3hfc2VuZF9tc2dfaWQoZW5pYywgbXNnX3R5cGUsIGRzdF92bmljX2lkLCBwYXlsb2FkLFxuK1x0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgMCwgZmFsc2UsIDApO1xuK31cbitcbitzdGF0aWMgaW50IGVuaWNfbWJveF9zZW5kX3JlcGx5KHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSxcbitcdFx0XHRcdHUxNiBkc3Rfdm5pY19pZCwgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfbGVuLFxuK1x0XHRcdFx0dTY0IG1zZ19udW0pXG4re1xuK1x0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZ19pZChlbmljLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHBheWxvYWQsXG4rXHRcdFx0XHQgICAgIHBheWxvYWRfbGVuLCBtc2dfbnVtLCB0cnVlLCAwKTtcbit9XG4rXG4rc3RhdGljIGludCBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KHN0cnVjdCBlbmljICplbmljLCB1OCByZXF1ZXN0X3R5cGUsXG4rXHRcdFx0XHQgICAgIHU4IGV4cGVjdGVkX3JlcGx5LCB2b2lkICpwYXlsb2FkLFxuK1x0XHRcdFx0ICAgICB1MTYgcGF5bG9hZF9sZW4pXG4re1xuK1x0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZ19pZChlbmljLCByZXF1ZXN0X3R5cGUsIEVOSUNfTUJPWF9EU1RfUEYsXG4rXHRcdFx0XHQgICAgIHBheWxvYWQsIHBheWxvYWRfbGVuLCAwLCBmYWxzZSxcbitcdFx0XHRcdCAgICAgZXhwZWN0ZWRfcmVwbHkpO1xuK31cbitcbiBzdGF0aWMgaW50IGVuaWNfbWJveF93YWl0X3JlcGx5KHN0cnVjdCBlbmljICplbmljLCB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBsZWZ0O1xuK1x0aW50IGVyciA9IDA7XG4gXG4gXHRsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wLFxuIFx0XHRcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpKTtcbitcdGlmIChsZWZ0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIEludmFsaWRhdGUgYSByZXF1ZXN0IHRoYXQgdGhlIGhhbmRsZXIgaGFzIG5vdCBhbHJlYWR5IGFjY2VwdGVkLiAgQVxuK1x0ICogZGVsYXllZCByZXBseSBjYW5ub3QgbWF0Y2ggYSBsYXRlciByZXF1ZXN0IGJlY2F1c2UgbWVzc2FnZSBudW1iZXJzIGFyZVxuK1x0ICogbW9ub3RvbmljIGFjcm9zcyBjaGFubmVsIHJlb3Blbi5cbitcdCAqL1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbitcdGlmIChlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpIHtcbitcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcbitcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPSAwO1xuK1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuIFxuLVx0cmV0dXJuIGxlZnQgPyAwIDogLUVUSU1FRE9VVDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIGludCBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmZfaWQsIHUzMiBsaW5rX3N0YXRlKVxuQEAgLTE3OCw4ICsyNDMsOCBAQCBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfY2FwYWJpbGl0eShzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqbXNnLFxuIFx0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XG4gXHRyZXBseS52ZXJzaW9uID0gY3B1X3RvX2xlMzIoRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpO1xuIFxuLVx0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSwgdmZfaWQsXG4tXHRcdFx0XHQgIFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcbitcdHJldHVybiBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSwgdmZfaWQsXG4rXHRcdFx0XHQgICAgXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSksIG1zZ19udW0pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZyxcbkBAIC0yMDgsOCArMjczLDggQEAgc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXG4gXHR9XG4gXG4gXHRyZXBseS5yZXBseS5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNigwKTtcbi1cdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFksIHZmX2lkLFxuLVx0XHRcdFx0IFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcbitcdGVyciA9IGVuaWNfbWJveF9zZW5kX3JlcGx5KGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXG4rXHRcdFx0XHQgICBcdTAwMjZyZXBseSwgc2l6ZW9mKHJlcGx5KSwgbXNnX251bSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuQEAgLTI1Myw4ICszMTgsOCBAQCBzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfdW5yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqbXNnLFxuIFx0ZW5pYy1cdTAwM2V2Zl9zdGF0ZVt2Zl9pZF0ucmVnaXN0ZXJlZCA9IGZhbHNlO1xuIFxuIFx0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XG4tXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFksIHZmX2lkLFxuLVx0XHRcdFx0IFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcbitcdGVyciA9IGVuaWNfbWJveF9zZW5kX3JlcGx5KGVuaWMsIEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUExZLCB2Zl9pZCxcbitcdFx0XHRcdCAgIFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpLCBtc2dfbnVtKTtcbiBcbiBcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4gXHRcdG5ldGRldl9pbmZvKGVuaWMtXHUwMDNlbmV0ZGV2LFxuQEAgLTMyNCwxMDUgKzM4OSwxMTYgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3BmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuIFx0XHRcdCAgICBoZHItXHUwMDNlbXNnX3R5cGUsIHZmX2lkLCBlcnIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX2NhcGFiaWxpdHlfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsXG4tXHRcdFx0XHRcdFx0IHZvaWQgKnBheWxvYWQpXG4rc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYywgdTggcmVwbHlfdHlwZSxcbitcdFx0XHRcdCAgICAgIHZvaWQgKnBheWxvYWQsIHU2NCBtc2dfbnVtKVxuIHtcbi1cdHN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDtcbi1cbi1cdGlmIChSRUFEX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KSAhPSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSkge1xuK1x0c3RydWN0IGVuaWNfbWJveF9nZW5lcmljX3JlcGx5ICpyZXBseSA9IHBheWxvYWQ7XG4rXHR1MTYgcmV0X21ham9yID0gbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmV0X21ham9yKTtcbitcdHU2NCBleHBlY3RlZF9tc2dfbnVtO1xuK1x0dTggZXhwZWN0ZWRfdHlwZTtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZlbmljLVx1MDAzZW1ib3hfc3RhdGVfbG9jayk7XG4rXHRleHBlY3RlZF90eXBlID0gZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5O1xuK1x0ZXhwZWN0ZWRfbXNnX251bSA9IGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtO1xuK1x0aWYgKGV4cGVjdGVkX3R5cGUgIT0gcmVwbHlfdHlwZSB8fCBleHBlY3RlZF9tc2dfbnVtICE9IG1zZ19udW0pIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuIFx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbi1cdFx0XHQgICAgXCJNQk9YOiBzdGFsZSBjYXBhYmlsaXR5IHJlcGx5IChleHBlY3RlZCAldSksIGRyb3BcXG5cIixcbi1cdFx0XHQgICAgUkVBRF9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSkpO1xuK1x0XHRcdCAgICBcIk1CT1g6IHN0YWxlIHJlcGx5ICV1LyVsbHUgKGV4cGVjdGVkICV1LyVsbHUpLCBkcm9wXFxuXCIsXG4rXHRcdFx0ICAgIHJlcGx5X3R5cGUsICh1bnNpZ25lZCBsb25nIGxvbmcpbXNnX251bSxcbitcdFx0XHQgICAgZXhwZWN0ZWRfdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylleHBlY3RlZF9tc2dfbnVtKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvcikgPT0gMClcbi1cdFx0ZW5pYy1cdTAwM2VwZl9jYXBfdmVyc2lvbiA9IGxlMzJfdG9fY3B1KHJlcGx5LVx1MDAzZXZlcnNpb24pO1xuLVx0ZWxzZVxuLVx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbi1cdFx0XHQgICAgXCJNQk9YOiBQRiByZWplY3RlZCBjYXBhYmlsaXR5IHJlcXVlc3Q6ICV1LyV1XFxuXCIsXG4tXHRcdFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvciksXG4tXHRcdFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9taW5vcikpO1xuLVx0Y29tcGxldGUoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuLX1cbitcdGlmICghcmV0X21ham9yKSB7XG4rXHRcdHN3aXRjaCAocmVwbHlfdHlwZSkge1xuK1x0XHRjYXNlIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZOiB7XG4rXHRcdFx0c3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyAqY2FwID0gcGF5bG9hZDtcbiBcbi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX3JlZ2lzdGVyX3JlcGx5KHN0cnVjdCBlbmljICplbmljLFxuLVx0XHRcdFx0XHQgICAgICAgdm9pZCAqcGF5bG9hZClcbi17XG4tXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyAqcmVwbHkgPSBwYXlsb2FkO1xuLVxuLVx0aWYgKFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpICE9IEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSkge1xuLVx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbi1cdFx0XHQgICAgXCJNQk9YOiBzdGFsZSByZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxuXCIsXG4tXHRcdFx0ICAgIFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuLVx0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvcikpIHtcbi1cdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4tXHRcdFx0ICAgIFwiTUJPWDogVkYgcmVnaXN0ZXIgcmVqZWN0ZWQgYnkgUEY6ICV1LyV1XFxuXCIsXG4tXHRcdFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvciksXG4tXHRcdFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9taW5vcikpO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkID0gdHJ1ZTtcbitcdFx0XHRXUklURV9PTkNFKGVuaWMtXHUwMDNlcGZfY2FwX3ZlcnNpb24sXG4rXHRcdFx0XHQgICBsZTMyX3RvX2NwdShjYXAtXHUwMDNldmVyc2lvbikpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOlxuK1x0XHRcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkLCB0cnVlKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWTpcbitcdFx0XHRXUklURV9PTkNFKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCwgZmFsc2UpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXHR9XG4rXHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwO1xuK1x0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX21zZ19udW0gPSAwO1xuIFx0Y29tcGxldGUoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuLX1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiBcbi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX3VucmVnaXN0ZXJfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsXG4tXHRcdFx0XHRcdFx0IHZvaWQgKnBheWxvYWQpXG4te1xuLVx0c3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDtcbi1cbi1cdGlmIChSRUFEX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KSAhPSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSkge1xuK1x0aWYgKHJldF9tYWpvcilcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4tXHRcdFx0ICAgIFwiTUJPWDogc3RhbGUgdW5yZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxuXCIsXG4tXHRcdFx0ICAgIFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuLVx0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvcikpIHtcbi1cdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4tXHRcdFx0ICAgIFwiTUJPWDogVkYgdW5yZWdpc3RlciByZWplY3RlZCBieSBQRjogJXUvJXVcXG5cIixcbi1cdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21ham9yKSxcbi1cdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21pbm9yKSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQgPSBmYWxzZTtcbi1cdH1cbi1cdGNvbXBsZXRlKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbitcdFx0XHQgICAgXCJNQk9YOiBQRiByZWplY3RlZCByZXBseSB0eXBlICV1OiAldS8ldVxcblwiLFxuK1x0XHRcdCAgICByZXBseV90eXBlLCByZXRfbWFqb3IsXG4rXHRcdFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJldF9taW5vcikpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKnBheWxvYWQpXG4rc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpwYXlsb2FkLFxuK1x0XHRcdFx0XHQgICB1NjQgbXNnX251bSlcbiB7XG4gXHRzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfbm90aWZfbXNnICpub3RpZiA9IHBheWxvYWQ7XG4gXHRzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfYWNrX21zZyBhY2sgPSB7fTtcbitcdHUzMiBsaW5rX3N0YXRlID0gbGUzMl90b19jcHUobm90aWYtXHUwMDNlbGlua19zdGF0ZSk7XG4gXHRpbnQgZXJyO1xuIFxuLVx0c3dpdGNoIChsZTMyX3RvX2NwdShub3RpZi1cdTAwM2VsaW5rX3N0YXRlKSkge1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbitcdHN3aXRjaCAobGlua19zdGF0ZSkge1xuIFx0Y2FzZSBFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEU6XG4tXHRcdGlmICghbmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikpXG4rXHRcdGVuaWMtXHUwMDNldmZfbGlua19zdGF0ZSA9IEVOSUNfVkZfTElOS19TVEFURV9VUDtcbitcdFx0aWYgKGVuaWMtXHUwMDNldmZfbGlua19ydW5uaW5nIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKVxuIFx0XHRcdG5ldGlmX2NhcnJpZXJfb24oZW5pYy1cdTAwM2VuZXRkZXYpO1xuIFx0XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LCBcIk1CT1g6IGxpbmsgc3RhdGUgLVx1MDAzZSBVUFxcblwiKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEVOSUNfTUJPWF9MSU5LX1NUQVRFX0RJU0FCTEU6XG4tXHRcdGlmIChuZXRpZl9jYXJyaWVyX29rKGVuaWMtXHUwMDNlbmV0ZGV2KSlcbitcdFx0ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlID0gRU5JQ19WRl9MSU5LX1NUQVRFX0RPV047XG4rXHRcdGlmIChlbmljLVx1MDAzZXZmX2xpbmtfcnVubmluZyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKVxuIFx0XHRcdG5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbiBcdFx0bmV0ZGV2X2RiZyhlbmljLVx1MDAzZW5ldGRldiwgXCJNQk9YOiBsaW5rIHN0YXRlIC1cdTAwM2UgRE9XTlxcblwiKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldiwgXCJNQk9YOiB1bmtub3duIGxpbmsgc3RhdGUgJXVcXG5cIixcbi1cdFx0XHQgICAgbGUzMl90b19jcHUobm90aWYtXHUwMDNlbGlua19zdGF0ZSkpO1xuK1x0XHRcdCAgICBsaW5rX3N0YXRlKTtcbiBcdFx0YWNrLmFjay5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNihFTklDX01CT1hfRVJSX0dFTkVSSUMpO1xuIFx0XHRicmVhaztcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbiBcbi1cdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0ssXG4tXHRcdFx0XHQgRU5JQ19NQk9YX0RTVF9QRiwgXHUwMDI2YWNrLCBzaXplb2YoYWNrKSk7XG4rXHRlcnIgPSBlbmljX21ib3hfc2VuZF9yZXBseShlbmljLCBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0ssXG4rXHRcdFx0XHQgICBFTklDX01CT1hfRFNUX1BGLCBcdTAwMjZhY2ssIHNpemVvZihhY2spLCBtc2dfbnVtKTtcbiBcdGlmIChlcnIgXHUwMDI2XHUwMDI2IG5ldF9yYXRlbGltaXQoKSlcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0ICAgIFwiTUJPWDogZmFpbGVkIHRvIHNlbmQgbGluayBzdGF0ZSBBQ0s6ICVkXFxuXCIsIGVycik7XG4gfVxuIFxuK3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfcmVzZXQoc3RydWN0IGVuaWMgKmVuaWMpXG4re1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbitcdGVuaWMtXHUwMDNldmZfbGlua19zdGF0ZSA9IEVOSUNfVkZfTElOS19TVEFURV9VTktOT1dOO1xuK1x0aWYgKGVuaWMtXHUwMDNldmZfbGlua19ydW5uaW5nIFx1MDAyNlx1MDAyNiBuZXRpZl9jYXJyaWVyX29rKGVuaWMtXHUwMDNlbmV0ZGV2KSlcbitcdFx0bmV0aWZfY2Fycmllcl9vZmYoZW5pYy1cdTAwM2VuZXRkZXYpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2V2Zl9saW5rX3N0YXRlX2xvY2spO1xuK31cbitcbit2b2lkIGVuaWNfbWJveF92Zl9saW5rX3N0YXRlX3NldF9ydW5uaW5nKHN0cnVjdCBlbmljICplbmljLCBib29sIHJ1bm5pbmcpXG4re1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbitcdGVuaWMtXHUwMDNldmZfbGlua19ydW5uaW5nID0gcnVubmluZztcbitcdGlmIChydW5uaW5nIFx1MDAyNlx1MDAyNiBlbmljLVx1MDAzZXZmX2xpbmtfc3RhdGUgPT0gRU5JQ19WRl9MSU5LX1NUQVRFX1VQKSB7XG4rXHRcdGlmICghbmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikpXG4rXHRcdFx0bmV0aWZfY2Fycmllcl9vbihlbmljLVx1MDAzZW5ldGRldik7XG4rXHR9IGVsc2UgaWYgKG5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKSB7XG4rXHRcdG5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNldmZfbGlua19zdGF0ZV9sb2NrKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgZW5pY19tYm94X3ZmX3BheWxvYWRfb2soc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxuIFx0XHRcdFx0ICAgIHUxNiBwYXlsb2FkX2xlbiwgc2l6ZV90IG1pbl9sZW4pXG4ge1xuQEAgLTQzOSw2ICs1MTUsOCBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIsIHZvaWQgKnBheWxvYWQsXG4gXHRcdFx0XHQgICAgIHUxNiBwYXlsb2FkX2xlbilcbiB7XG4rXHR1NjQgbXNnX251bSA9IGxlNjRfdG9fY3B1KGhkci1cdTAwM2Vtc2dfbnVtKTtcbitcbiBcdHN3aXRjaCAoaGRyLVx1MDAzZW1zZ190eXBlKSB7XG4gXHRjYXNlIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZOiB7XG4gXHRcdHNpemVfdCBleHAgPSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyk7XG5AQCAtNDQ2LDcgKzUyNCw3IEBAIHN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYyxcbiBcdFx0aWYgKCFlbmljX21ib3hfdmZfcGF5bG9hZF9vayhlbmljLCBoZHItXHUwMDNlbXNnX3R5cGUsXG4gXHRcdFx0XHRcdCAgICAgcGF5bG9hZF9sZW4sIGV4cCkpXG4gXHRcdFx0cmV0dXJuO1xuLVx0XHRlbmljX21ib3hfdmZfaGFuZGxlX2NhcGFiaWxpdHlfcmVwbHkoZW5pYywgcGF5bG9hZCk7XG4rXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVwbHkoZW5pYywgaGRyLVx1MDAzZW1zZ190eXBlLCBwYXlsb2FkLCBtc2dfbnVtKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWToge1xuQEAgLTQ1NSw3ICs1MzMsNyBAQCBzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXG4gXHRcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVx1MDAzZW1zZ190eXBlLFxuIFx0XHRcdFx0XHQgICAgIHBheWxvYWRfbGVuLCBleHApKVxuIFx0XHRcdHJldHVybjtcbi1cdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9yZWdpc3Rlcl9yZXBseShlbmljLCBwYXlsb2FkKTtcbitcdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9yZXBseShlbmljLCBoZHItXHUwMDNlbXNnX3R5cGUsIHBheWxvYWQsIG1zZ19udW0pO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGNhc2UgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFk6IHtcbkBAIC00NjQsNyArNTQyLDcgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuIFx0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbiBcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbiBcdFx0XHRyZXR1cm47XG4tXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfdW5yZWdpc3Rlcl9yZXBseShlbmljLCBwYXlsb2FkKTtcbitcdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9yZXBseShlbmljLCBoZHItXHUwMDNlbXNnX3R5cGUsIHBheWxvYWQsIG1zZ19udW0pO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGNhc2UgRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfTk9USUY6IHtcbkBAIC00NzMsNyArNTUxLDcgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuIFx0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbiBcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbiBcdFx0XHRyZXR1cm47XG4tXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfbGlua19zdGF0ZShlbmljLCBwYXlsb2FkKTtcbitcdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKGVuaWMsIHBheWxvYWQsIG1zZ19udW0pO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGRlZmF1bHQ6XG5AQCAtNTQyLDMyICs2MjAsMzEgQEAgc3RhdGljIHZvaWQgZW5pY19tYm94X3JlY3ZfaGFuZGxlcihzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqYnVmLFxuIGludCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYylcbiB7XG4gXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfbXNnIHJlcSA9IHt9O1xuK1x0dTMyIHZlcnNpb247XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZW5pYy1cdTAwM2VwZl9jYXBfdmVyc2lvbiA9IDA7XG4tXHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4tXHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFkpO1xuK1x0V1JJVEVfT05DRShlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uLCAwKTtcbiBcdHJlcS52ZXJzaW9uID0gY3B1X3RvX2xlMzIoRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpO1xuIFxuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QsXG4tXHRcdFx0XHQgRU5JQ19NQk9YX0RTVF9QRiwgXHUwMDI2cmVxLCBzaXplb2YocmVxKSk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCAwKTtcbitcdGVyciA9IGVuaWNfbWJveF92Zl9zZW5kX3JlcXVlc3QoZW5pYyxcbitcdFx0XHRcdFx0RU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVRVUVTVCxcbitcdFx0XHRcdFx0RU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFksXG4rXHRcdFx0XHRcdFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xuK1x0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdH1cbiBcbiBcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xuLVx0V1JJVEVfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xuK1x0dmVyc2lvbiA9IFJFQURfT05DRShlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0ICAgIFwiTUJPWDogbm8gY2FwYWJpbGl0eSByZXBseSBmcm9tIFBGXFxuXCIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0aWYgKGVuaWMtXHUwMDNlcGZfY2FwX3ZlcnNpb24gXHUwMDNjIEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8xKSB7XG4rXHRpZiAodmVyc2lvbiBcdTAwM2MgRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0ICAgIFwiTUJPWDogUEYgcmVqZWN0ZWQgY2FwYWJpbGl0eSByZXF1ZXN0IG9yIHJlcG9ydGVkIHVuc3VwcG9ydGVkIHZlcnNpb24gJXVcXG5cIixcbi1cdFx0XHQgICAgZW5pYy1cdTAwM2VwZl9jYXBfdmVyc2lvbik7XG4rXHRcdFx0ICAgIHZlcnNpb24pO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG5AQCAtNTc2LDI4ICs2NTMsMjUgQEAgaW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKVxuIFxuIGludCBlbmljX21ib3hfdmZfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpXG4ge1xuK1x0Ym9vbCByZWdpc3RlcmVkO1xuIFx0aW50IGVycjtcbiBcbi1cdGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuLVx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuLVx0V1JJVEVfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSk7XG4rXHRXUklURV9PTkNFKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCwgZmFsc2UpO1xuIFxuLVx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVFVRVNULFxuLVx0XHRcdFx0IEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApO1xuLVx0aWYgKGVycikge1xuLVx0XHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgMCk7XG4rXHRlcnIgPSBlbmljX21ib3hfdmZfc2VuZF9yZXF1ZXN0KGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVFVRVNULFxuK1x0XHRcdFx0XHRFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFksIE5VTEwsIDApO1xuK1x0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdH1cbiBcbiBcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xuLVx0V1JJVEVfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xuK1x0cmVnaXN0ZXJlZCA9IFJFQURfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpO1xuIFx0aWYgKGVycikge1xuIFx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbiBcdFx0XHQgICAgXCJNQk9YOiBWRiByZWdpc3RyYXRpb24gd2l0aCBQRiB0aW1lZCBvdXRcXG5cIik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRpZiAoIWVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZClcbitcdGlmICghcmVnaXN0ZXJlZClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC02MDUsNDMgKzY3OSw0OCBAQCBpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKVxuIFxuIGludCBlbmljX21ib3hfdmZfdW5yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYylcbiB7XG4rXHRib29sIHJlZ2lzdGVyZWQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCFlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpXG4rXHRpZiAoIVJFQURfT05DRShlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbi1cdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5LCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSk7XG4tXG4tXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVRVUVTVCxcbi1cdFx0XHRcdCBFTklDX01CT1hfRFNUX1BGLCBOVUxMLCAwKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0V1JJVEVfT05DRShlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHksIDApO1xuK1x0ZXJyID0gZW5pY19tYm94X3ZmX3NlbmRfcmVxdWVzdChlbmljLFxuK1x0XHRcdFx0XHRFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVFVRVNULFxuK1x0XHRcdFx0XHRFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSxcbitcdFx0XHRcdFx0TlVMTCwgMCk7XG4rXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuIFxuIFx0ZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7XG4tXHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSwgMCk7XG4rXHRyZWdpc3RlcmVkID0gUkVBRF9PTkNFKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuLVx0aWYgKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZClcbitcdGlmIChyZWdpc3RlcmVkKVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdHJldHVybiAwO1xuIH1cbiBcbiB2b2lkIGVuaWNfbWJveF9pbml0KHN0cnVjdCBlbmljICplbmljKVxuIHtcbi1cdC8qIG1ib3hfbG9jayBhbmQgbWJveF9jb21wIG11c3QgYmUgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlIHBlclxuK1x0Ym9vbCByZWluaXQgPSBlbmljLVx1MDAzZW1ib3hfaW5pdGlhbGl6ZWQ7XG4rXG4rXHQvKiBNQk9YIGxvY2tzIGFuZCBtYm94X2NvbXAgbXVzdCBiZSBpbml0aWFsaXplZCBleGFjdGx5IG9uY2UgcGVyXG4gXHQgKiBkZXZpY2UgbGlmZXRpbWU7IHRoZSBQRiBzcmlvdl9jb25maWd1cmUgcGF0aCBjYW4gcmUtZW50ZXIgdGhpc1xuIFx0ICogb24gZWFjaCBlbmFibGUgY3ljbGUgd2hlcmUgdGhlc2UgcHJpbWl0aXZlcyBhcmUgYWxyZWFkeSBzZXQgdXAuXG4gXHQgKi9cbi1cdGlmICghZW5pYy1cdTAwM2VtYm94X2luaXRpYWxpemVkKSB7XG4rXHRpZiAoIXJlaW5pdCkge1xuIFx0XHRtdXRleF9pbml0KFx1MDAyNmVuaWMtXHUwMDNlbWJveF9sb2NrKTtcbiBcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbitcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuK1x0XHRlbmljLVx1MDAzZW1ib3hfbXNnX251bSA9IDA7XG4gXHRcdGVuaWMtXHUwMDNlbWJveF9pbml0aWFsaXplZCA9IHRydWU7XG4gXHR9IGVsc2Uge1xuIFx0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4gXHR9XG4tXHRlbmljLVx1MDAzZW1ib3hfbXNnX251bSA9IDA7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X3N0YXRlX2xvY2spO1xuK1x0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcbitcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9tc2dfbnVtID0gMDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9zdGF0ZV9sb2NrKTtcbiBcdGVuaWMtXHUwMDNlYWRtaW5fcnFfaGFuZGxlciA9IGVuaWNfbWJveF9yZWN2X2hhbmRsZXI7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5oXG5pbmRleCAxNWUzMGVlMmIwZWQ5Li42MDQwOWJhZDJmMjg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaFxuQEAgLTg4LDYgKzg4LDggQEAgdm9pZCBlbmljX21ib3hfaW5pdChzdHJ1Y3QgZW5pYyAqZW5pYyk7XG4gaW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCxcbiBcdFx0ICAgICAgIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbik7XG4gaW50IGVuaWNfbWJveF9zZW5kX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHUxNiB2Zl9pZCwgdTMyIGxpbmtfc3RhdGUpO1xuK3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfcmVzZXQoc3RydWN0IGVuaWMgKmVuaWMpO1xuK3ZvaWQgZW5pY19tYm94X3ZmX2xpbmtfc3RhdGVfc2V0X3J1bm5pbmcoc3RydWN0IGVuaWMgKmVuaWMsIGJvb2wgcnVubmluZyk7XG4gaW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKTtcbiBpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKTtcbiBpbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMjI6Mzk6MTQuNzI0NzcxNDg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg4MjkxNjIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBXb3J0aEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggdG8gdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy8qYCkgaXMgd29ydGggZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyOiByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQgZmFsbHMgaW50byBjZXJ0YWluIGNhdGVnb3JpZXMuIFRoZSBrZXkgcG9pbnQgaGVyZSBpcyB0aGF0IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZXMgYWZmZWN0IGNvZGUgdGhhdCdzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuXG5cblRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGV4Y2x1ZGU6XG5cbiogICBVbnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cbiogICBWZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBmb3IgaGFyZHdhcmUgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbiogICBUZWFyZG93biBjYWxsYmFja3MgbGlrZSBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYC5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhlIENpc2NvIFZJQyAoZW5pYykgZW11bGF0ZWQgaW4gUUVNVT8gSSBrbm93IHRoZSB1c3VhbCBzdXNwZWN0czogZTEwMDAsIHZpcnRpby1uZXQsIHRob3NlIGFyZSBzdGFuZGFyZC4gQnV0IGBlbmljYD8gSSBkb24ndCB0aGluayBzby4gSSBuZWVkIHRvIGJlIHN1cmUuIEEgcXVpY2sgc2VhcmNoIG9mIHRoZSBRRU1VIGRvY3VtZW50YXRpb24gY29uZmlybXMgbXkgc3VzcGljaW9uLiBJdCBkb2Vzbid0IGVtdWxhdGUgQ2lzY28gVklDLiBTbywgaXQgYXBwZWFycyB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBhY2N1cmF0ZSBhbmQgc2hvdWxkIGd1aWRlIHVzLCBpZiB3ZSBoYXZlIHRoZSBjb3JyZWN0IGFuYWx5c2lzIG9mIHRoZSBkZXZpY2UuXG5cblRvIGJlIDEwMCUgc3VyZSwgYW5kIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBkcml2ZXIgc2l0cyBpbiB0aGUga2VybmVsLCBJJ2xsIGRvIGEgcXVpY2sgYEtjb25maWdgIHNlYXJjaCBmb3IgYGVuaWNgIHRvIHZlcmlmeSB0aGUgaGFyZHdhcmUgaXQgZHJpdmVzLiBJZiBpdCAqaXMqIHZlbmRvciBzcGVjaWZpYyBhbmQgZGVwZW5kZW50IG9uIGEgcGh5c2ljYWwgY2FyZCwgdGhlbiBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDIyOjM5OjIxLjYwNzY4OTg0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc1OTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRU5JQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnOjY6Y29uZmlnIEVOSUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQ2lzY28gVklDIEV0aGVybmV0IE5JQyBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQyMjozOToyMS42NTM0NTI2NDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ0Mjg1MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGxpbmU6XG5cbioqRGl2aW5nIGludG8gdGhlIENpc2NvIEVOSUMgS2NvbmZpZyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGggcmVnYXJkaW5nIHRoZSBDaXNjbyBFTklDIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZ2AuIFJpZ2h0LCB0aGlzIGlzIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBkcml2ZXIncyBidWlsZC10aW1lIG9wdGlvbnMgd2lsbCBiZSBkZWZpbmVkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYWxsIHRoZSB1c3VhbCBzdXNwZWN0czogbW9kdWxlIGRlcGVuZGVuY2llcywgZmVhdHVyZSBmbGFncyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGNlcnRhaW4gZnVuY3Rpb25hbGl0aWVzIChsaWtlIFNSLUlPViwgcGVyaGFwcywgb3Igc3BlY2lmaWMgb2ZmbG9hZHMpLCBkZWJ1Z2dpbmcgb3B0aW9ucywgYW5kIG1heWJlIGV2ZW4gc29tZSBwZXJmb3JtYW5jZSB0dW5pbmcga25vYnMuIEtub3dpbmcgdGhlIHNwZWNpZmljIEVOSUMgaGFyZHdhcmUgcmV2aXNpb24gaXMga2V5IGhlcmUsIEkgd2lsbCBjaGVjayB0aGUgYXBwcm9wcmlhdGUgS2NvbmZpZyBmaWxlIGZvciBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLCB0b28uIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgdmFsdWVzIHNldC4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZmxleGliaWxpdHkgdGhlIGRyaXZlciBvZmZlcnMgYW5kIHdoYXQgY29tcGlsZS10aW1lIGRlY2lzaW9ucyBhcmUgYXZhaWxhYmxlIHRvIG9wdGltaXplIGl0IGZvciBhIHBhcnRpY3VsYXIgZGVwbG95bWVudCBzY2VuYXJpby4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUyMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDIyOjM5OjIzLjc5NzczOTI5OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBDaXNjbyBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgRU5JQ1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkNpc2NvIFZJQyBFdGhlcm5ldCBOSUMgU3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICAgOTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBjYXJkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQyMjozOToyMy43OTc3OTg5MzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTY1MDAxMDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIEkndmUgZ290IHRoaXMgcmlnaHQuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoZSBjcml0ZXJpYSBmb3IgZnV6emluZy4gSSBoYXZlIGEgZmVlbGluZyB0aGlzIGlzIGEgY2xhc3NpYyBjYXNlIHdoZXJlIHdlIGNhbid0IHJlbGlhYmx5IGZ1enouIEkgbmVlZCB0byBjb25zaWRlciB0aGVzZSB0d28gcnVsZXMgYWdhaW46IEZpcnN0bHksIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW5oZXJlbnRseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBoYXJkd2FyZS4gU2Vjb25kbHksIGNvZGUgdGhhdCBsaXZlcyB3aXRoaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMsIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIG9yIGBhbWRncHVgLCBzcGVjaWZpY2FsbHkgY29kZSB0aGF0IG5lZWRzIHJlYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVS5cblxuVGhlIGRyaXZlciB3ZSBhcmUgbG9va2luZyBhdCBpcyB0aGUgYGVuaWNgIGRyaXZlciwgd2hpY2ggZnJvbSBteSBleHBlcmllbmNlLCBoYW5kbGVzIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgc3VwcG9ydC4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGV0aGVybmV0IGRyaXZlciBmb3IgQ2lzY28gVUNTIGFuZCBDaXNjbyBWSUMgaGFyZHdhcmUsIGluY2x1ZGluZyBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMuIEFuZCBjcml0aWNhbGx5LCBpdCAqbmVlZHMqIHBoeXNpY2FsIENpc2NvIFZJQyBoYXJkd2FyZSwgc29tZXRoaW5nIHRoYXQncyBub3QgZ29pbmcgdG8gYmUgYXZhaWxhYmxlIGluIFFFTVUgb3IgYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cblJpZ2h0LCBzbyB0aGF0J3MgcHJldHR5IGNsZWFyLiBUaGlzIHBhdGNoIGZhbGxzIHBlcmZlY3RseSB1bmRlciAqYm90aCogb2YgdGhvc2UgZGlzcXVhbGlmeWluZyBydWxlcywgcmVhbGx5LiBJdCdzIHZlbmRvci1zcGVjaWZpYywgaGFyZHdhcmUtZGVwZW5kZW50IFBDSWUgZHJpdmVyIGNvZGUsIGFuZCBpbmhlcmVudGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLiBUaGlzIG1ha2VzIHRoZSBhbnN3ZXIgdmVyeSBzaW1wbGUuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaGFzIHRvIGJlIGBmYWxzZWAuXG5cbkxldCBtZSB0cmlwbGUtY2hlY2sgYWxsIHRoZSBwYXJhbWV0ZXJzIGp1c3QgdG8gYmUgY2VydGFpbi4gSSB3YW50IHRvIGJlIDEwMCUgYWNjdXJhdGUuXG5cbiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWAgLSBUaGF0J3MgY29ycmVjdC5cbiogICBgRm9jdXNTeW1ib2xzOiBbXWAgLSBNYWtlcyBzZW5zZSwgbm8gc3BlY2lmaWMgc3ltYm9scyB0byB0YXJnZXQuXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtdYCAtIE5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC5cbiogICBgUmVhc29uaW5nOiBDb25jaXNlIGV4cGxhbmF0aW9uYCAtIFRoZSByZWFzb25pbmcgaXMgYWNjdXJhdGUgYW5kIGNvbmNpc2UuXG5cbkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSdtIGdvaW5nIHRvIGNvbW1pdCB0aGlzIGFuZCBjYWxsIGl0IGdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTQ1LCJPdXRwdXRUb2tlbnMiOjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMjI6Mzk6MjcuMzYyODAyNDUxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciByZXF1aXJpbmcgZGVkaWNhdGVkIENpc2NvIFZJQyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZXJlZm9yZSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciByZXF1aXJpbmcgZGVkaWNhdGVkIENpc2NvIFZJQyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZXJlZm9yZSwgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQyMjozOToyNy4zNjI4MjcwNTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow68zcd[1] Phase: Running StartedAt: 2026-08-30 22:39:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow68zcd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-30 22:39:38 +0000 UTC FinishedAt: 2026-08-30 22:39:43 +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,}