Name: series-workflowsm4km Phase: Succeeded StartedAt: 2026-07-07 17:33:23 +0000 UTC FinishedAt: 2026-07-07 19:07:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[0] Phase: Succeeded StartedAt: 2026-07-07 17:33:23 +0000 UTC FinishedAt: 2026-07-07 17:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 17:33:23 +0000 UTC FinishedAt: 2026-07-07 17:56:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c73cd9f0819c1c44e373e3dabb68318b1de1a12", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ANDROID_BINDER_IPC_RUST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c73cd9f0819c1c44e373e3dabb68318b1de1a12", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ANDROID_BINDER_IPC_RUST" ], "series_id": "8ef05d45-b447-4cc7-b29d-275b27bada18" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "report_netlink_inner", "report_netlink", "genlmsg_put" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FORFJPSURfQklOREVSX0lQQ19SVVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwb3J0X25ldGxpbmtfaW5uZXImIzM0OywKICAgICYjMzQ7cmVwb3J0X25ldGxpbmsmIzM0OywKICAgICYjMzQ7Z2VubG1zZ19wdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBuZXRsaW5rIG11bHRpY2FzdCByZXBvcnRpbmcgZm9yIEFuZHJvaWQgQmluZGVyIHRyYW5zYWN0aW9uIGZhaWx1cmVzIGluIFJ1c3QuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBmb3IgY29uc3RydWN0aW5nIGFuZCBicm9hZGNhc3RpbmcgbmV0bGluayBtZXNzYWdlcyB3aGVuIGJpbmRlciB0cmFuc2FjdGlvbnMgZmFpbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc1ZTI4MDQwOTYyYTVmMWQ3MTk5NTZmMjc4MGI3ZTdlNjM1ZDVjMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDE3OjU1OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGMzZjcyMDU4YTJmMjZlLi5iZTVhMTk2ZjEyYzZhZiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE4ODc1LDYgJiM0MzsxODg3NSw4IEBAIEY6XHRpbmNsdWRlL3VhcGkvbGludXgvc2N0cC5oXG4gRjpcdGxpYi9uZXRfdXRpbHMuY1xuIEY6XHRsaWIvcmFuZG9tMzIuY1xuIEY6XHRuZXQvXG4mIzQzO0Y6XHRydXN0L2hlbHBlcnMvbmV0L1xuJiM0MztGOlx0cnVzdC9rZXJuZWwvbmV0L1xuIEY6XHRzYW1wbGVzL3BrdGdlbi9cbiBGOlx0dG9vbHMvbmV0L1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWcgYi9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZ1xuaW5kZXggZTJlNDAyYzlkMTc1OWMuLjYwNmE5ZDA3Zjc3NDcxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnXG5AQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIEFORFJPSURfQklOREVSX0lQQ1xuIFxuIGNvbmZpZyBBTkRST0lEX0JJTkRFUl9JUENfUlVTVFxuIFx0Ym9vbCBcJiMzNDtSdXN0IHZlcnNpb24gb2YgQW5kcm9pZCBCaW5kZXIgSVBDIERyaXZlclwmIzM0O1xuLVx0ZGVwZW5kcyBvbiBSVVNUIFx1MDAyNlx1MDAyNiBNTVUgXHUwMDI2XHUwMDI2ICFBTkRST0lEX0JJTkRFUl9JUENcbiYjNDM7XHRkZXBlbmRzIG9uIFJVU1QgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiAhQU5EUk9JRF9CSU5ERVJfSVBDXG4gXHRoZWxwXG4gXHQgIFRoaXMgZW5hYmxlcyB0aGUgUnVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQmluZGVyIGRyaXZlci5cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL25ldGxpbmsucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL25ldGxpbmsucnNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmViN2VhMmVkYWZmNzJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5yc1xuQEAgLTAsMCAmIzQzOzEsMTE3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoKEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUpIE9SIEJTRC0zLUNsYXVzZSlcbiYjNDM7LyogQmFzZWQgb246IERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9iaW5kZXIueWFtbCAqL1xuJiM0MztcbiYjNDM7IyFbYWxsb3codW5yZWFjaGFibGVfcHViLCBjbGlwcHk6Ondyb25nX3NlbGZfY29udmVudGlvbildXG4mIzQzO3VzZSBrZXJuZWw6OntcbiYjNDM7ICAgIG5ldDo6bmV0bGluazo6e1xuJiM0MzsgICAgICAgIEZhbWlseSxcbiYjNDM7ICAgICAgICBHZW5sTXNnLFxuJiM0MzsgICAgICAgIE11bHRpY2FzdEdyb3VwLFxuJiM0MzsgICAgICAgIE5ldGxpbmtTa0J1ZmYsIC8vXG4mIzQzOyAgICB9LFxuJiM0MzsgICAgcHJlbHVkZTo6KiwgLy9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3B1YiBzdGF0aWMgQklOREVSX05MX0ZBTUlMWTogRmFtaWx5ID0gRmFtaWx5Ojpjb25zdF9uZXcoXG4mIzQzOyAgICBcdTAwMjZjcmF0ZTo6VEhJU19NT0RVTEUsXG4mIzQzOyAgICBrZXJuZWw6OnVhcGk6OkJJTkRFUl9GQU1JTFlfTkFNRSxcbiYjNDM7ICAgIGtlcm5lbDo6dWFwaTo6QklOREVSX0ZBTUlMWV9WRVJTSU9OLFxuJiM0MzsgICAgXHUwMDI2QklOREVSX05MX0ZBTUlMWV9NQ0dSUFMsXG4mIzQzOyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgQklOREVSX05MX0ZBTUlMWV9NQ0dSUFM6IFtNdWx0aWNhc3RHcm91cDsgMV0gPSBbTXVsdGljYXN0R3JvdXA6OmNvbnN0X25ldyhjXCYjMzQ7cmVwb3J0XCYjMzQ7KV07XG4mIzQzO1xuJiM0MzsvLy8gQSBtdWx0aWNhc3QgZXZlbnQgc2VudCB0byB1c2Vyc3BhY2Ugc3Vic2NyaWJlcnMgdG8gbm90aWZ5IHRoZW0gYWJvdXRcbiYjNDM7Ly8vIGJpbmRlciB0cmFuc2FjdGlvbiBmYWlsdXJlcy4gVGhlIGdlbmVyYXRlZCByZXBvcnQgcHJvdmlkZXMgdGhlIGZ1bGxcbiYjNDM7Ly8vIGRldGFpbHMgb2YgdGhlIHNwZWNpZmljIHRyYW5zYWN0aW9uIHRoYXQgZmFpbGVkLiBUaGUgaW50ZW50aW9uIGlzIGZvclxuJiM0MzsvLy8gcHJvZ3JhbXMgdG8gbW9uaXRvciB0aGVzZSBldmVudHMgYW5kIHJlYWN0IHRvIHRoZSBmYWlsdXJlcyBhcyBuZWVkZWQuXG4mIzQzO3B1YiBzdHJ1Y3QgUmVwb3J0IHtcbiYjNDM7ICAgIHNrYjogR2VubE1zZyxcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW1wbCBSZXBvcnQge1xuJiM0MzsgICAgLy8vIENyZWF0ZSBhIG5ldyBtdWx0aWNhc3QgbWVzc2FnZS5cbiYjNDM7ICAgIHB1YiBmbiBuZXcoXG4mIzQzOyAgICAgICAgc2l6ZTogdXNpemUsXG4mIzQzOyAgICAgICAgcG9ydGlkOiB1MzIsXG4mIzQzOyAgICAgICAgc2VxOiB1MzIsXG4mIzQzOyAgICAgICAgZmxhZ3M6IGtlcm5lbDo6YWxsb2M6OkZsYWdzLFxuJiM0MzsgICAgKSAtXHUwMDNlIFJlc3VsdFx1MDAzY1NlbGYsIGtlcm5lbDo6YWxsb2M6OkFsbG9jRXJyb3JcdTAwM2Uge1xuJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9DTURfUkVQT1JUOiB1OCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0NNRF9SRVBPUlQgYXMgdTg7XG4mIzQzOyAgICAgICAgbGV0IHNrYiA9IE5ldGxpbmtTa0J1ZmY6Om5ldyhzaXplLCBmbGFncyk/O1xuJiM0MzsgICAgICAgIGxldCBza2IgPSBza2IuZ2VubG1zZ19wdXQocG9ydGlkLCBzZXEsIFx1MDAyNkJJTkRFUl9OTF9GQU1JTFksIEJJTkRFUl9DTURfUkVQT1JUKT87XG4mIzQzOyAgICAgICAgT2soU2VsZiB7IHNrYiB9KVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBCcm9hZGNhc3QgdGhpcyBtZXNzYWdlLlxuJiM0MzsgICAgcHViIGZuIG11bHRpY2FzdChzZWxmLCBwb3J0aWQ6IHUzMiwgZmxhZ3M6IGtlcm5lbDo6YWxsb2M6OkZsYWdzKSAtXHUwMDNlIFJlc3VsdCB7XG4mIzQzOyAgICAgICAgc2VsZi5za2IubXVsdGljYXN0KFx1MDAyNkJJTkRFUl9OTF9GQU1JTFksIHBvcnRpZCwgMCwgZmxhZ3MpXG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgLy8vIENoZWNrIGlmIHRoaXMgbWVzc2FnZSB0eXBlIGhhcyBsaXN0ZW5lcnMuXG4mIzQzOyAgICBwdWIgZm4gaGFzX2xpc3RlbmVycygpIC1cdTAwM2UgYm9vbCB7XG4mIzQzOyAgICAgICAgQklOREVSX05MX0ZBTUlMWS5oYXNfbGlzdGVuZXJzKDApXG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgLy8vIFRoZSBlbnVtIGJpbmRlcl9kcml2ZXJfcmV0dXJuX3Byb3RvY29sIHJldHVybmVkIHRvIHRoZSBzZW5kZXIuXG4mIzQzOyAgICBwdWIgZm4gZXJyb3IoXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4mIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0VSUk9SOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0VSUk9SIGFzIGNfaW50O1xuJiM0MzsgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0VSUk9SLCB2YWwpXG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgLy8vIFRoZSBiaW5kZXIgY29udGV4dCB3aGVyZSB0aGUgdHJhbnNhY3Rpb24gb2NjdXJyZWQuXG4mIzQzOyAgICBwdWIgZm4gY29udGV4dChcdTAwMjZtdXQgc2VsZiwgdmFsOiBcdTAwMjZDU3RyKSAtXHUwMDNlIFJlc3VsdCB7XG4mIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0NPTlRFWFQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfQ09OVEVYVCBhcyBjX2ludDtcbiYjNDM7ICAgICAgICBzZWxmLnNrYi5wdXRfc3RyaW5nKEJJTkRFUl9BX1JFUE9SVF9DT05URVhULCB2YWwpXG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgLy8vIFRoZSBQSUQgb2YgdGhlIHNlbmRlciBwcm9jZXNzLlxuJiM0MzsgICAgcHViIGZuIGZyb21fcGlkKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9GUk9NX1BJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9GUk9NX1BJRCBhcyBjX2ludDtcbiYjNDM7ICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9GUk9NX1BJRCwgdmFsKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBUaGUgVElEIG9mIHRoZSBzZW5kZXIgdGhyZWFkLlxuJiM0MzsgICAgcHViIGZuIGZyb21fdGlkKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9GUk9NX1RJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9GUk9NX1RJRCBhcyBjX2ludDtcbiYjNDM7ICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9GUk9NX1RJRCwgdmFsKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBUaGUgUElEIG9mIHRoZSByZWNpcGllbnQgcHJvY2Vzcy4gVGhpcyBhdHRyaWJ1dGUgbWF5IG5vdCBiZSBwcmVzZW50XG4mIzQzOyAgICAvLy8gaWYgdGhlIHRhcmdldCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC5cbiYjNDM7ICAgIHB1YiBmbiB0b19waWQoXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4mIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX1RPX1BJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9UT19QSUQgYXMgY19pbnQ7XG4mIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfVE9fUElELCB2YWwpXG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgLy8vIFRoZSBUSUQgb2YgdGhlIHJlY2lwaWVudCB0aHJlYWQuIFRoaXMgYXR0cmlidXRlIG1heSBub3QgYmUgcHJlc2VudFxuJiM0MzsgICAgLy8vIGlmIHRoZSB0YXJnZXQgY291bGQgbm90IGJlIGRldGVybWluZWQuXG4mIzQzOyAgICBwdWIgZm4gdG9fdGlkKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9UT19USUQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfVE9fVElEIGFzIGNfaW50O1xuJiM0MzsgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX1RPX1RJRCwgdmFsKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBXaGVuIHByZXNlbnQsIGluZGljYXRlcyB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIGlzIGEgcmVwbHkuXG4mIzQzOyAgICBwdWIgZm4gaXNfcmVwbHkoXHUwMDI2bXV0IHNlbGYpIC1cdTAwM2UgUmVzdWx0IHtcbiYjNDM7ICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfSVNfUkVQTFk6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfSVNfUkVQTFkgYXMgY19pbnQ7XG4mIzQzOyAgICAgICAgc2VsZi5za2IucHV0X2ZsYWcoQklOREVSX0FfUkVQT1JUX0lTX1JFUExZKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBUaGUgYml0bWFzayBvZiBlbnVtIHRyYW5zYWN0aW9uX2ZsYWdzIGZyb20gdGhlIHRyYW5zYWN0aW9uLlxuJiM0MzsgICAgcHViIGZuIGZsYWdzKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9GTEFHUzogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9GTEFHUyBhcyBjX2ludDtcbiYjNDM7ICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9GTEFHUywgdmFsKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBUaGUgYXBwbGljYXRpb24tZGVmaW5lZCBjb2RlIGZyb20gdGhlIHRyYW5zYWN0aW9uLlxuJiM0MzsgICAgcHViIGZuIGNvZGUoXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4mIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0NPREU6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfQ09ERSBhcyBjX2ludDtcbiYjNDM7ICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9DT0RFLCB2YWwpXG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgLy8vIFRoZSB0cmFuc2FjdGlvbiBwYXlsb2FkIHNpemUgaW4gYnl0ZXMuXG4mIzQzOyAgICBwdWIgZm4gZGF0YV9zaXplKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9EQVRBX1NJWkU6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfREFUQV9TSVpFIGFzIGNfaW50O1xuJiM0MzsgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0RBVEFfU0laRSwgdmFsKVxuJiM0MzsgICAgfVxuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9ydXN0X2JpbmRlcl9tYWluLnJzIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9ydXN0X2JpbmRlcl9tYWluLnJzXG5pbmRleCA0MzIzOTBhYWIyNWJiOC4uZGY0N2FiYTA1MTMzODUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcnVzdF9iaW5kZXJfbWFpbi5yc1xuQEAgLTMyLDYgJiM0MzszMiw3IEBAXG4gbW9kIGRlZmVycmVkX2Nsb3NlO1xuIG1vZCBkZWZzO1xuIG1vZCBlcnJvcjtcbiYjNDM7bW9kIG5ldGxpbms7XG4gbW9kIG5vZGU7XG4gbW9kIHBhZ2VfcmFuZ2U7XG4gbW9kIHByb2Nlc3M7XG5AQCAtMjgyLDE5ICYjNDM7MjgzLDIyIEBAIGZuIHB0cl9hbGlnbih2YWx1ZTogdXNpemUpIC1cdTAwM2UgT3B0aW9uXHUwMDNjdXNpemVcdTAwM2Uge1xuIC8vIFNBRkVUWTogV2UgY2FsbCByZWdpc3RlciBpbiBgaW5pdGAuXG4gc3RhdGljIEJJTkRFUl9TSFJJTktFUjogU2hyaW5rZXIgPSB1bnNhZmUgeyBTaHJpbmtlcjo6bmV3KCkgfTtcbiBcbi1zdHJ1Y3QgQmluZGVyTW9kdWxlIHt9XG4mIzQzO3N0cnVjdCBCaW5kZXJNb2R1bGUge1xuJiM0MzsgICAgX25ldGxpbms6IGtlcm5lbDo6bmV0OjpuZXRsaW5rOjpSZWdpc3RyYXRpb24sXG4mIzQzO31cbiBcbiBpbXBsIGtlcm5lbDo6TW9kdWxlIGZvciBCaW5kZXJNb2R1bGUge1xuICAgICBmbiBpbml0KF9tb2R1bGU6IFx1MDAyNiYjMzk7c3RhdGljIGtlcm5lbDo6VGhpc01vZHVsZSkgLVx1MDAzZSBSZXN1bHRcdTAwM2NTZWxmXHUwMDNlIHtcbiAgICAgICAgIC8vIFNBRkVUWTogVGhlIG1vZHVsZSBpbml0aWFsaXplciBuZXZlciBydW5zIHR3aWNlLCBzbyB3ZSBvbmx5IGNhbGwgdGhpcyBvbmNlLlxuICAgICAgICAgdW5zYWZlIHsgY3JhdGU6OmNvbnRleHQ6OkNPTlRFWFRTLmluaXQoKSB9O1xuIFxuJiM0MzsgICAgICAgIGxldCBuZXRsaW5rID0gY3JhdGU6Om5ldGxpbms6OkJJTkRFUl9OTF9GQU1JTFkucmVnaXN0ZXIoKT87XG4gICAgICAgICBCSU5ERVJfU0hSSU5LRVIucmVnaXN0ZXIoY1wmIzM0O2FuZHJvaWQtYmluZGVyXCYjMzQ7KT87XG4gXG4gICAgICAgICAvLyBTQUZFVFk6IFRoZSBtb2R1bGUgaXMgYmVpbmcgbG9hZGVkLCBzbyB3ZSBjYW4gaW5pdGlhbGl6ZSBiaW5kZXJmcy5cbiAgICAgICAgIHVuc2FmZSB7IGtlcm5lbDo6ZXJyb3I6OnRvX3Jlc3VsdChiaW5kZXJmczo6aW5pdF9ydXN0X2JpbmRlcmZzKCkpPyB9O1xuIFxuLSAgICAgICAgT2soU2VsZiB7fSlcbiYjNDM7ICAgICAgICBPayhTZWxmIHsgX25ldGxpbms6IG5ldGxpbmsgfSlcbiAgICAgfVxuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzXG5pbmRleCAxOWY4ODE5NDhhODRiYS4uMzMzNjhmN2ZkNTUxNDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yc1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnNcbkBAIC0xMjg0LDYgJiM0MzsxMjg0LDE1IEBAIGZuIHRyYW5zYWN0aW9uKHNlbGY6IFx1MDAyNkFyY1x1MDAzY1NlbGZcdTAwM2UsIGNtZDogdTMyLCByZWFkZXI6IFx1MDAyNm11dCBVc2VyU2xpY2VSZWFkZXIpIC1cdTAwM2UgUmVzdVxuICAgICAgICAgICAgIH1cbiAgICAgICAgIH1cbiBcbiYjNDM7ICAgICAgICBpZiBpbmZvLm9uZXdheV9zcGFtX3N1c3BlY3Qge1xuJiM0MzsgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGJvdGggYSBvbmV3YXkgc3BhbSBzdXNwZWN0IGFuZCBhIGZhaWx1cmUsIHdlIHJlcG9ydCBpdCB0d2ljZS4gVGhpcyBpc1xuJiM0MzsgICAgICAgICAgICAvLyB1c2VmdWwgaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gZmFpbGVkIHdpdGggQlJfVFJBTlNBQ1RJT05fUEVORElOR19GUk9aRU4uXG4mIzQzOyAgICAgICAgICAgIGluZm8ucmVwb3J0X25ldGxpbmsoQlJfT05FV0FZX1NQQU1fU1VTUEVDVCwgXHUwMDI2c2VsZi5wcm9jZXNzLmN0eCk7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIGlmIGluZm8ucmVwbHkgIT0gMCB7XG4mIzQzOyAgICAgICAgICAgIGluZm8ucmVwb3J0X25ldGxpbmsoaW5mby5yZXBseSwgXHUwMDI2c2VsZi5wcm9jZXNzLmN0eCk7XG4mIzQzOyAgICAgICAgfVxuJiM0MztcbiAgICAgICAgIE9rKCgpKVxuICAgICB9XG4gXG5AQCAtMTM1NCwxMSAmIzQzOzEzNjMsMTEgQEAgZm4gcmVwbHlfaW5uZXIoc2VsZjogXHUwMDI2QXJjXHUwMDNjU2VsZlx1MDAzZSwgaW5mbzogXHUwMDI2bXV0IFRyYW5zYWN0aW9uSW5mbykgLVx1MDAzZSBCaW5kZXJSZXN1bHQge1xuICAgICAgICAgICAgICAgICBpbmZvLmZyb21fdGlkLFxuICAgICAgICAgICAgICAgICBpbmZvLnRvX3BpZFxuICAgICAgICAgICAgICk7XG4tXG4gICAgICAgICAgICAgbGV0IHBhcmFtID0gZXJyLnNvdXJjZS5hc19yZWYoKS5tYXBfb3IoMCwgfGV8IGUudG9fZXJybm8oKSk7XG4gICAgICAgICAgICAgbGV0IGVlID0gRXh0ZW5kZWRFcnJvcjo6bmV3KGluZm8uZGVidWdfaWQgYXMgdTMyLCBlcnIucmVwbHksIHBhcmFtKTtcbiAgICAgICAgICAgICBvcmlnLmZyb21cbiAgICAgICAgICAgICAgICAgLmRlbGl2ZXJfcmVwbHkoRXJyKEJSX0ZBSUxFRF9SRVBMWSksIFx1MDAyNm9yaWcsIFNvbWUoZWUpKTtcbiYjNDM7ICAgICAgICAgICAgaW5mby5yZXBseSA9IEJSX0ZBSUxFRF9SRVBMWTtcbiAgICAgICAgICAgICBlcnIucmVwbHkgPSBCUl9UUkFOU0FDVElPTl9DT01QTEVURTtcbiAgICAgICAgICAgICBlcnJcbiAgICAgICAgIH0pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXG5pbmRleCBhZmVmNWI0NmVhYzI2Ny4uNmNiN2I3NDVjNTJlNDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gLy8gQ29weXJpZ2h0IChDKSAyMDI1IEdvb2dsZSBMTEMuXG4gXG4gdXNlIGtlcm5lbDo6e1xuJiM0MzsgICAgbmV0OjpuZXRsaW5rOjpHRU5MTVNHX0RFRkFVTFRfU0laRSxcbiAgICAgcHJlbHVkZTo6KixcbiAgICAgc2VxX2ZpbGU6OlNlcUZpbGUsXG4gICAgIHNlcV9wcmludCxcbkBAIC0xOCw2ICYjNDM7MTksNyBAQFxuICAgICBhbGxvY2F0aW9uOjp7QWxsb2NhdGlvbiwgVHJhbnNsYXRlZEZkc30sXG4gICAgIGRlZnM6OiosXG4gICAgIGVycm9yOjp7QmluZGVyRXJyb3IsIEJpbmRlclJlc3VsdH0sXG4mIzQzOyAgICBuZXRsaW5rOjpSZXBvcnQsXG4gICAgIG5vZGU6OntOb2RlLCBOb2RlUmVmfSxcbiAgICAgcHJvY2Vzczo6e1Byb2Nlc3MsIFByb2Nlc3NJbm5lcn0sXG4gICAgIHB0cl9hbGlnbixcbkBAIC01MSw2ICYjNDM7NTMsNDQgQEAgaW1wbCBUcmFuc2FjdGlvbkluZm8ge1xuICAgICBwdWIoY3JhdGUpIGZuIGlzX29uZXdheShcdTAwMjZzZWxmKSAtXHUwMDNlIGJvb2wge1xuICAgICAgICAgc2VsZi5mbGFncyBcdTAwMjYgVEZfT05FX1dBWSAhPSAwXG4gICAgIH1cbiYjNDM7XG4mIzQzOyAgICBwdWIoY3JhdGUpIGZuIHJlcG9ydF9uZXRsaW5rKFx1MDAyNnNlbGYsIHJlcGx5OiB1MzIsIGN0eDogXHUwMDI2Y3JhdGU6OkNvbnRleHQpIHtcbiYjNDM7ICAgICAgICBpZiBsZXQgRXJyKGVycikgPSBzZWxmLnJlcG9ydF9uZXRsaW5rX2lubmVyKHJlcGx5LCBjdHgpIHtcbiYjNDM7ICAgICAgICAgICAgcHJfd2FybiEoXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDt7fTp7fSBuZXRsaW5rIHJlcG9ydCBmYWlsZWQ6IHtlcnI6P31cXG5cJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBzZWxmLmZyb21fcGlkLFxuJiM0MzsgICAgICAgICAgICAgICAgc2VsZi5mcm9tX3RpZFxuJiM0MzsgICAgICAgICAgICApO1xuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICBmbiByZXBvcnRfbmV0bGlua19pbm5lcihcdTAwMjZzZWxmLCByZXBseTogdTMyLCBjdHg6IFx1MDAyNmNyYXRlOjpDb250ZXh0KSAtXHUwMDNlIGtlcm5lbDo6ZXJyb3I6OlJlc3VsdCB7XG4mIzQzOyAgICAgICAgaWYgIVJlcG9ydDo6aGFzX2xpc3RlbmVycygpIHtcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIE9rKCgpKTtcbiYjNDM7ICAgICAgICB9XG4mIzQzOyAgICAgICAgbGV0IG11dCByZXBvcnQgPSBSZXBvcnQ6Om5ldyhHRU5MTVNHX0RFRkFVTFRfU0laRSwgMCwgMCwgR0ZQX0tFUk5FTCk/O1xuJiM0MztcbiYjNDM7ICAgICAgICByZXBvcnQuZXJyb3IocmVwbHkpPztcbiYjNDM7ICAgICAgICByZXBvcnQuY29udGV4dChcdTAwMjZjdHgubmFtZSk/O1xuJiM0MzsgICAgICAgIHJlcG9ydC5mcm9tX3BpZChzZWxmLmZyb21fcGlkIGFzIHUzMik/O1xuJiM0MzsgICAgICAgIHJlcG9ydC5mcm9tX3RpZChzZWxmLmZyb21fdGlkIGFzIHUzMik/O1xuJiM0MzsgICAgICAgIGlmIHNlbGYudG9fcGlkICE9IDAge1xuJiM0MzsgICAgICAgICAgICByZXBvcnQudG9fcGlkKHNlbGYudG9fcGlkIGFzIHUzMik/O1xuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgICAgICBpZiBzZWxmLnRvX3RpZCAhPSAwIHtcbiYjNDM7ICAgICAgICAgICAgcmVwb3J0LnRvX3RpZChzZWxmLnRvX3RpZCBhcyB1MzIpPztcbiYjNDM7ICAgICAgICB9XG4mIzQzO1xuJiM0MzsgICAgICAgIGlmIHNlbGYuaXNfcmVwbHkge1xuJiM0MzsgICAgICAgICAgICByZXBvcnQuaXNfcmVwbHkoKT87XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIHJlcG9ydC5mbGFncyhzZWxmLmZsYWdzKT87XG4mIzQzOyAgICAgICAgcmVwb3J0LmNvZGUoc2VsZi5jb2RlKT87XG4mIzQzOyAgICAgICAgcmVwb3J0LmRhdGFfc2l6ZShzZWxmLmRhdGFfc2l6ZSBhcyB1MzIpPztcbiYjNDM7XG4mIzQzOyAgICAgICAgcmVwb3J0Lm11bHRpY2FzdCgwLCBHRlBfS0VSTkVMKT87XG4mIzQzOyAgICAgICAgT2soKCkpXG4mIzQzOyAgICB9XG4gfVxuIFxuIHVzZSBjb3JlOjptZW06Om9mZnNldF9vZjtcbmRpZmYgLS1naXQgYS9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oIGIvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxuaW5kZXggMTEyNDc4NWUyMTBiMzAuLmVjOTZlODExNjEwZDcyIDEwMDY0NFxuLS0tIGEvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxuQEAgLTkzLDYgJiM0Mzs5Myw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9ydXN0X3NhbXBsZS5oXHUwMDNlXG4gXG4gLypcbkBAIC0xMTAsNiAmIzQzOzExMiw3IEBAXG4gY29uc3Qgc2l6ZV90IFJVU1RfQ09OU1RfSEVMUEVSX0FSQ0hfU0xBQl9NSU5BTElHTiA9IEFSQ0hfU0xBQl9NSU5BTElHTjtcbiBjb25zdCBzaXplX3QgUlVTVF9DT05TVF9IRUxQRVJfQVJDSF9LTUFMTE9DX01JTkFMSUdOID0gQVJDSF9LTUFMTE9DX01JTkFMSUdOO1xuIGNvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9QQUdFX1NJWkUgPSBQQUdFX1NJWkU7XG4mIzQzO2NvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRU5MTVNHX0RFRkFVTFRfU0laRSA9IEdFTkxNU0dfREVGQVVMVF9TSVpFO1xuIGNvbnN0IGdmcF90IFJVU1RfQ09OU1RfSEVMUEVSX0dGUF9BVE9NSUMgPSBHRlBfQVRPTUlDO1xuIGNvbnN0IGdmcF90IFJVU1RfQ09OU1RfSEVMUEVSX0dGUF9LRVJORUwgPSBHRlBfS0VSTkVMO1xuIGNvbnN0IGdmcF90IFJVU1RfQ09OU1RfSEVMUEVSX0dGUF9LRVJORUxfQUNDT1VOVCA9IEdGUF9LRVJORUxfQUNDT1VOVDtcbmRpZmYgLS1naXQgYS9ydXN0L2hlbHBlcnMvaGVscGVycy5jIGIvcnVzdC9oZWxwZXJzL2hlbHBlcnMuY1xuaW5kZXggOTk4ZTMxMDUyZTY2MDEuLjFkNGVlNTFmNTc2YmViIDEwMDY0NFxuLS0tIGEvcnVzdC9oZWxwZXJzL2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC9oZWxwZXJzL2hlbHBlcnMuY1xuQEAgLTcyLDYgJiM0Mzs3Miw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7bWFwbGVfdHJlZS5jXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bW0uY1wmIzM0O1xuICNpbmNsdWRlIFwmIzM0O211dGV4LmNcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0L2dlbmV0bGluay5jXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7b2YuY1wmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3BhZ2UuY1wmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3BjaS5jXCYjMzQ7XG5kaWZmIC0tZ2l0IGEvcnVzdC9oZWxwZXJzL25ldC9nZW5ldGxpbmsuYyBiL3J1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzUzMGI2OWY2Y2Y3MDdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3J1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmNcbkBAIC0wLDAgJiM0MzsxLDQ2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlIExMQy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfTkVUXG4mIzQzO1xuJiM0MztfX3J1c3RfaGVscGVyIHN0cnVjdCBza19idWZmICpydXN0X2hlbHBlcl9nZW5sbXNnX25ldyhzaXplX3QgcGF5bG9hZCwgZ2ZwX3QgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZ2VubG1zZ19uZXcocGF5bG9hZCwgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3J1c3RfaGVscGVyXG4mIzQzO2ludCBydXN0X2hlbHBlcl9nZW5sbXNnX211bHRpY2FzdChjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZ3JvdXAsIGdmcF90IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGdlbmxtc2dfbXVsdGljYXN0KGZhbWlseSwgc2tiLCBwb3J0aWQsIGdyb3VwLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fcnVzdF9oZWxwZXIgdm9pZCBydXN0X2hlbHBlcl9nZW5sbXNnX2NhbmNlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIpXG4mIzQzO3tcbiYjNDM7XHRnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fcnVzdF9oZWxwZXIgdm9pZCBydXN0X2hlbHBlcl9nZW5sbXNnX2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIpXG4mIzQzO3tcbiYjNDM7XHRnZW5sbXNnX2VuZChza2IsIGhkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fcnVzdF9oZWxwZXIgdm9pZCBydXN0X2hlbHBlcl9ubG1zZ19mcmVlKHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRubG1zZ19mcmVlKHNrYik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fcnVzdF9oZWxwZXJcbiYjNDM7aW50IHJ1c3RfaGVscGVyX2dlbmxfaGFzX2xpc3RlbmVycyhjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBncm91cClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBnZW5sX2hhc19saXN0ZW5lcnMoZmFtaWx5LCBuZXQsIGdyb3VwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvbmV0LnJzIGIvcnVzdC9rZXJuZWwvbmV0L21vZC5yc1xuc2ltaWxhcml0eSBpbmRleCA4NSVcbnJlbmFtZSBmcm9tIHJ1c3Qva2VybmVsL25ldC5yc1xucmVuYW1lIHRvIHJ1c3Qva2VybmVsL25ldC9tb2QucnNcbmluZGV4IGZlNDE1Y2IzNjlkM2FjLi44ZWNhZTc1NzdlZDI5NSAxMDA2NDRcbi0tLSBhL3J1c3Qva2VybmVsL25ldC5yc1xuJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC9rZXJuZWwvbmV0L21vZC5yc1xuQEAgLTQsMyAmIzQzOzQsNSBAQFxuIFxuICNbY2ZnKENPTkZJR19SVVNUX1BIWUxJQl9BQlNUUkFDVElPTlMpXVxuIHB1YiBtb2QgcGh5O1xuJiM0MztcbiYjNDM7cHViIG1vZCBuZXRsaW5rO1xuZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzIGIvcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjJlZjNkZGUzNmZhMWFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3J1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzXG5AQCAtMCwwICYjNDM7MSwzMzcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOy8vIENvcHlyaWdodCAoQykgMjAyNiBHb29nbGUgTExDLlxuJiM0MztcbiYjNDM7Ly8hIFJ1c3Qgc3VwcG9ydCBmb3IgZ2VuZXJpYyBuZXRsaW5rLlxuJiM0MzsvLyFcbiYjNDM7Ly8hIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGV4cG9zaW5nIG11bHRpY2FzdCBncm91cHMuXG4mIzQzOy8vIVxuJiM0MzsvLyEgQyBoZWFkZXI6IFtgaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmhgXShzcmN0cmVlL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oKVxuJiM0MztcbiYjNDM7dXNlIGtlcm5lbDo6e1xuJiM0MzsgICAgYWxsb2M6OntzZWxmLCBBbGxvY0Vycm9yfSxcbiYjNDM7ICAgIGVycm9yOjp0b19yZXN1bHQsXG4mIzQzOyAgICBwcmVsdWRlOjoqLFxuJiM0MzsgICAgdHJhbnNtdXRlOjpBc0J5dGVzLFxuJiM0MzsgICAgdHlwZXM6Ok9wYXF1ZSxcbiYjNDM7ICAgIFRoaXNNb2R1bGUsXG4mIzQzO307XG4mIzQzO1xuJiM0Mzt1c2UgY29yZTo6e1xuJiM0MzsgICAgbWVtOjpNYW51YWxseURyb3AsXG4mIzQzOyAgICBwdHI6Ok5vbk51bGwsIC8vXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvLy8gVGhlIGRlZmF1bHQgbmV0bGluayBtZXNzYWdlIHNpemUuXG4mIzQzO3B1YiBjb25zdCBHRU5MTVNHX0RFRkFVTFRfU0laRTogdXNpemUgPSBiaW5kaW5nczo6R0VOTE1TR19ERUZBVUxUX1NJWkU7XG4mIzQzO1xuJiM0MzsvLy8gQSB3cmFwcGVyIGFyb3VuZCBgc3RydWN0IHNrX2J1ZmZgIGZvciBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZXMuXG4mIzQzOy8vL1xuJiM0MzsvLy8gVGhpcyB0eXBlIGlzIGludGVuZGVkIHRvIGJlIHNwZWNpZmljIGZvciBidWZmZXJzIHVzZWQgd2l0aCBuZXRsaW5rIG9ubHksIGFuZCBvdGhlciB1c2VjYXNlcyBmb3JcbiYjNDM7Ly8vIGBzdHJ1Y3Qgc2tfYnVmZmAgYXJlIG91dC1vZi1zY29wZSBmb3IgdGhpcyBhYnN0cmFjdGlvbi5cbiYjNDM7Ly8vXG4mIzQzOy8vLyAjIEludmFyaWFudHNcbiYjNDM7Ly8vXG4mIzQzOy8vLyBUaGUgcG9pbnRlciBoYXMgb3duZXJzaGlwIG92ZXIgYSB2YWxpZCBgc2tfYnVmZmAuXG4mIzQzO3B1YiBzdHJ1Y3QgTmV0bGlua1NrQnVmZiB7XG4mIzQzOyAgICBza2I6IE5vbk51bGxcdTAwM2NrZXJuZWw6OmJpbmRpbmdzOjpza19idWZmXHUwMDNlLFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbXBsIE5ldGxpbmtTa0J1ZmYge1xuJiM0MzsgICAgLy8vIENyZWF0ZXMgYSBuZXcgYE5ldGxpbmtTa0J1ZmZgIHdpdGggdGhlIGdpdmVuIHNpemUuXG4mIzQzOyAgICBwdWIgZm4gbmV3KHNpemU6IHVzaXplLCBmbGFnczogYWxsb2M6OkZsYWdzKSAtXHUwMDNlIFJlc3VsdFx1MDAzY05ldGxpbmtTa0J1ZmYsIEFsbG9jRXJyb3JcdTAwM2Uge1xuJiM0MzsgICAgICAgIC8vIFNBRkVUWTogYGdlbmxtc2dfbmV3YCBvbmx5IHJlcXVpcmVzIGl0cyBhcmd1bWVudHMgdG8gYmUgdmFsaWQgaW50ZWdlcnMuXG4mIzQzOyAgICAgICAgbGV0IHNrYiA9IHVuc2FmZSB7IGJpbmRpbmdzOjpnZW5sbXNnX25ldyhzaXplLCBmbGFncy5hc19yYXcoKSkgfTtcbiYjNDM7ICAgICAgICBsZXQgc2tiID0gTm9uTnVsbDo6bmV3KHNrYikub2tfb3IoQWxsb2NFcnJvcik/O1xuJiM0MzsgICAgICAgIE9rKE5ldGxpbmtTa0J1ZmYgeyBza2IgfSlcbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLy8gUHV0cyBhIGdlbmVyaWMgbmV0bGluayBoZWFkZXIgaW50byB0aGUgYE5ldGxpbmtTa0J1ZmZgLlxuJiM0MzsgICAgcHViIGZuIGdlbmxtc2dfcHV0KFxuJiM0MzsgICAgICAgIHNlbGYsXG4mIzQzOyAgICAgICAgcG9ydGlkOiB1MzIsXG4mIzQzOyAgICAgICAgc2VxOiB1MzIsXG4mIzQzOyAgICAgICAgZmFtaWx5OiBcdTAwMjYmIzM5O3N0YXRpYyBGYW1pbHksXG4mIzQzOyAgICAgICAgY21kOiB1OCxcbiYjNDM7ICAgICkgLVx1MDAzZSBSZXN1bHRcdTAwM2NHZW5sTXNnLCBBbGxvY0Vycm9yXHUwMDNlIHtcbiYjNDM7ICAgICAgICBsZXQgc2tiID0gc2VsZi5za2IuYXNfcHRyKCk7XG4mIzQzOyAgICAgICAgLy8gU0FGRVRZOiBUaGUgc2tiIGFuZCBmYW1pbHkgcG9pbnRlcnMgYXJlIHZhbGlkLlxuJiM0MzsgICAgICAgIGxldCBoZHIgPSB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgZmFtaWx5LmFzX3JhdygpLCAwLCBjbWQpIH07XG4mIzQzOyAgICAgICAgbGV0IGhkciA9IE5vbk51bGw6Om5ldyhoZHIpLm9rX29yKEFsbG9jRXJyb3IpPztcbiYjNDM7ICAgICAgICBPayhHZW5sTXNnIHsgc2tiOiBzZWxmLCBoZHIgfSlcbiYjNDM7ICAgIH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7aW1wbCBEcm9wIGZvciBOZXRsaW5rU2tCdWZmIHtcbiYjNDM7ICAgIGZuIGRyb3AoXHUwMDI2bXV0IHNlbGYpIHtcbiYjNDM7ICAgICAgICAvLyBTQUZFVFk6IFdlIGhhdmUgb3duZXJzaGlwIG92ZXIgdGhlIGBza19idWZmYCwgc28gd2UgbWF5IGZyZWUgaXQuXG4mIzQzOyAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6Om5sbXNnX2ZyZWUoc2VsZi5za2IuYXNfcHRyKCkpIH1cbiYjNDM7ICAgIH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7Ly8vIEEgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgYmVpbmcgY29uc3RydWN0ZWQuXG4mIzQzOy8vL1xuJiM0MzsvLy8gIyBJbnZhcmlhbnRzXG4mIzQzOy8vL1xuJiM0MzsvLy8gYGhkcmAgcmVmZXJlbmNlcyB0aGUgaGVhZGVyIGluIHRoaXMgbmV0bGluayBtZXNzYWdlLlxuJiM0MztwdWIgc3RydWN0IEdlbmxNc2cge1xuJiM0MzsgICAgc2tiOiBOZXRsaW5rU2tCdWZmLFxuJiM0MzsgICAgaGRyOiBOb25OdWxsXHUwMDNjY192b2lkXHUwMDNlLFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbXBsIEdlbmxNc2cge1xuJiM0MzsgICAgLy8vIFB1dHMgYW4gYXR0cmlidXRlIGludG8gdGhlIG1lc3NhZ2UuXG4mIzQzOyAgICAjW2lubGluZV1cbiYjNDM7ICAgIGZuIHB1dFx1MDAzY1RcdTAwM2UoXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6IFx1MDAyNlQpIC1cdTAwM2UgUmVzdWx0XG4mIzQzOyAgICB3aGVyZVxuJiM0MzsgICAgICAgIFQ6ID9TaXplZCAmIzQzOyBBc0J5dGVzLFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIGxldCBza2IgPSBzZWxmLnNrYi5za2IuYXNfcHRyKCk7XG4mIzQzOyAgICAgICAgbGV0IGxlbiA9IHNpemVfb2ZfdmFsKHZhbHVlKTtcbiYjNDM7ICAgICAgICBsZXQgcHRyID0gY29yZTo6cHRyOjpmcm9tX3JlZih2YWx1ZSkuY2FzdDo6XHUwMDNjY192b2lkXHUwMDNlKCk7XG4mIzQzOyAgICAgICAgLy8gU0FGRVRZOiBgc2tiYCBpcyB2YWxpZCBieSBgTmV0bGlua1NrQnVmZmAgdHlwZSBpbnZhcmlhbnRzLCBhbmQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzXG4mIzQzOyAgICAgICAgLy8gcmVhZGFibGUgYW5kIGluaXRpYWxpemVkIGZvciBpdHMgYHNpemVfb2ZgIGJ5dGVzLlxuJiM0MzsgICAgICAgIHRvX3Jlc3VsdCh1bnNhZmUgeyBiaW5kaW5nczo6bmxhX3B1dChza2IsIGF0dHJ0eXBlLCBsZW4gYXMgY19pbnQsIHB0cikgfSlcbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLy8gUHV0cyBhIGB1MzJgIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLlxuJiM0MzsgICAgI1tpbmxpbmVdXG4mIzQzOyAgICBwdWIgZm4gcHV0X3UzMihcdTAwMjZtdXQgc2VsZiwgYXR0cnR5cGU6IGNfaW50LCB2YWx1ZTogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4mIzQzOyAgICAgICAgc2VsZi5wdXQoYXR0cnR5cGUsIFx1MDAyNnZhbHVlKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBQdXRzIGEgc3RyaW5nIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLlxuJiM0MzsgICAgI1tpbmxpbmVdXG4mIzQzOyAgICBwdWIgZm4gcHV0X3N0cmluZyhcdTAwMjZtdXQgc2VsZiwgYXR0cnR5cGU6IGNfaW50LCB2YWx1ZTogXHUwMDI2Q1N0cikgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIHNlbGYucHV0KGF0dHJ0eXBlLCB2YWx1ZS50b19ieXRlc193aXRoX251bCgpKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBQdXRzIGEgZmxhZyBhdHRyaWJ1dGUgaW50byB0aGUgbWVzc2FnZS5cbiYjNDM7ICAgICNbaW5saW5lXVxuJiM0MzsgICAgcHViIGZuIHB1dF9mbGFnKFx1MDAyNm11dCBzZWxmLCBhdHRydHlwZTogY19pbnQpIC1cdTAwM2UgUmVzdWx0IHtcbiYjNDM7ICAgICAgICBsZXQgc2tiID0gc2VsZi5za2Iuc2tiLmFzX3B0cigpO1xuJiM0MzsgICAgICAgIC8vIFNBRkVUWTogYHNrYmAgaXMgdmFsaWQgYnkgYE5ldGxpbmtTa0J1ZmZgIHR5cGUgaW52YXJpYW50cywgYW5kIGEgbnVsbCBwb2ludGVyIGlzIHZhbGlkXG4mIzQzOyAgICAgICAgLy8gd2hlbiB0aGUgbGVuZ3RoIGlzIHplcm8uXG4mIzQzOyAgICAgICAgdG9fcmVzdWx0KHVuc2FmZSB7IGJpbmRpbmdzOjpubGFfcHV0KHNrYiwgYXR0cnR5cGUsIDAsIGNvcmU6OnB0cjo6bnVsbCgpKSB9KVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBTZW5kcyB0aGUgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgYXMgYSBtdWx0aWNhc3QgbWVzc2FnZS5cbiYjNDM7ICAgICNbaW5saW5lXVxuJiM0MzsgICAgcHViIGZuIG11bHRpY2FzdChcbiYjNDM7ICAgICAgICBzZWxmLFxuJiM0MzsgICAgICAgIGZhbWlseTogXHUwMDI2JiMzOTtzdGF0aWMgRmFtaWx5LFxuJiM0MzsgICAgICAgIHBvcnRpZDogdTMyLFxuJiM0MzsgICAgICAgIGdyb3VwOiB1MzIsXG4mIzQzOyAgICAgICAgZmxhZ3M6IGFsbG9jOjpGbGFncyxcbiYjNDM7ICAgICkgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIGxldCBtZSA9IE1hbnVhbGx5RHJvcDo6bmV3KHNlbGYpO1xuJiM0MzsgICAgICAgIC8vIFNBRkVUWTogVGhlIGBza2JgIGFuZCBgZmFtaWx5YCBwb2ludGVycyBhcmUgdmFsaWQuIFdlIHBhc3Mgb3duZXJzaGlwIG9mIHRoZSBgc2tiYCB0b1xuJiM0MzsgICAgICAgIC8vIGBnZW5sbXNnX211bHRpY2FzdGAgYnkgbm90IGRyb3BwaW5nIGBzZWxmYC5cbiYjNDM7ICAgICAgICB1bnNhZmUge1xuJiM0MzsgICAgICAgICAgICBiaW5kaW5nczo6Z2VubG1zZ19lbmQobWUuc2tiLnNrYi5hc19wdHIoKSwgbWUuaGRyLmFzX3B0cigpKTtcbiYjNDM7ICAgICAgICAgICAgdG9fcmVzdWx0KGJpbmRpbmdzOjpnZW5sbXNnX211bHRpY2FzdChcbiYjNDM7ICAgICAgICAgICAgICAgIGZhbWlseS5hc19yYXcoKSxcbiYjNDM7ICAgICAgICAgICAgICAgIG1lLnNrYi5za2IuYXNfcHRyKCksXG4mIzQzOyAgICAgICAgICAgICAgICBwb3J0aWQsXG4mIzQzOyAgICAgICAgICAgICAgICBncm91cCxcbiYjNDM7ICAgICAgICAgICAgICAgIGZsYWdzLmFzX3JhdygpLFxuJiM0MzsgICAgICAgICAgICApKVxuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbiYjNDM7fVxuJiM0MztpbXBsIERyb3AgZm9yIEdlbmxNc2cge1xuJiM0MzsgICAgZm4gZHJvcChcdTAwMjZtdXQgc2VsZikge1xuJiM0MzsgICAgICAgIC8vIFNBRkVUWTogVGhlIGBoZHJgIHBvaW50ZXIgcmVmZXJlbmNlcyB0aGUgaGVhZGVyIG9mIHRoaXMgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UuXG4mIzQzOyAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6Omdlbmxtc2dfY2FuY2VsKHNlbGYuc2tiLnNrYi5hc19wdHIoKSwgc2VsZi5oZHIuYXNfcHRyKCkpIH07XG4mIzQzOyAgICB9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8vLyBGbGFncyBmb3IgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LlxuJiM0MztzdHJ1Y3QgRmFtaWx5RmxhZ3Mge1xuJiM0MzsgICAgLy8vIFdoZXRoZXIgdGhlIGZhbWlseSBzdXBwb3J0cyBuZXR3b3JrIG5hbWVzcGFjZXMuXG4mIzQzOyAgICBuZXRuc29rOiBib29sLFxuJiM0MzsgICAgLy8vIFdoZXRoZXIgdGhlIGZhbWlseSBzdXBwb3J0cyBwYXJhbGxlbCBvcGVyYXRpb25zLlxuJiM0MzsgICAgcGFyYWxsZWxfb3BzOiBib29sLFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbXBsIEZhbWlseUZsYWdzIHtcbiYjNDM7ICAgIC8vLyBDb252ZXJ0cyB0aGUgZmxhZ3MgdG8gdGhlIGJpdGZpZWxkIHJlcHJlc2VudGF0aW9uIHVzZWQgYnkgYGdlbmxfZmFtaWx5YC5cbiYjNDM7ICAgIGNvbnN0IGZuIGludG9fYml0ZmllbGQoc2VsZikgLVx1MDAzZSBiaW5kaW5nczo6X19CaW5kZ2VuQml0ZmllbGRVbml0XHUwMDNjW3U4OyAxXVx1MDAzZSB7XG4mIzQzOyAgICAgICAgLy8gVGhlIGJlbG93IHNoaWZ0cyBhcmUgdmVyaWZpZWQgY29ycmVjdCBieSB0ZXN0X2ZhbWlseV9mbGFnc19iaXRmaWVsZCgpIGJlbG93LlxuJiM0MzsgICAgICAgIC8vXG4mIzQzOyAgICAgICAgLy8gQWx0aG91Z2ggYmluZGdlbiBnZW5lcmF0ZXMgaGVscGVycyB0byBjaGFuZ2UgYml0ZmllbGRzIGJhc2VkIG9uIHRoZSBDIGhlYWRlcnMsIHRoZXNlXG4mIzQzOyAgICAgICAgLy8gaGVscGVycyB1bmZvcnR1bmF0ZWx5IGNhbiYjMzk7dCBiZSB1c2VkIGluIGNvbnN0IGNvbnRleHQuIFNpbmNlIGBGYW1pbHlgIG5lZWRzIHRvIGJlIGZpbGxlZFxuJiM0MzsgICAgICAgIC8vIG91dCBhdCBidWlsZC10aW1lLCB3ZSB1c2UgdGhpcyBoZWxwZXIgaW5zdGVhZC5cbiYjNDM7ICAgICAgICBsZXQgbXV0IGJpdHMgPSAwO1xuJiM0MzsgICAgICAgIGlmIHNlbGYubmV0bnNvayB7XG4mIzQzOyAgICAgICAgICAgIGJpdHMgfD0gMSBcdTAwM2NcdTAwM2MgMDtcbiYjNDM7ICAgICAgICB9XG4mIzQzOyAgICAgICAgaWYgc2VsZi5wYXJhbGxlbF9vcHMge1xuJiM0MzsgICAgICAgICAgICBiaXRzIHw9IDEgXHUwMDNjXHUwMDNjIDE7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIC8vIENvbnZlcnQgZnJvbSBsaXR0bGUgZW5kaWFuIHRvIHRoZSB0YXJnZXQmIzM5O3MgZW5kaWFubmVzcy5cbiYjNDM7ICAgICAgICBiaXRzID0gdTg6OmZyb21fbGUoYml0cyk7XG4mIzQzOyAgICAgICAgLy8gU0FGRVRZOiBUaGlzIGJpdGZpZWxkIGlzIHJlcHJlc2VudGVkIGFzIGFuIHU4LlxuJiM0MzsgICAgICAgIHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlOjpcdTAwM2N1OCwgYmluZGluZ3M6Ol9fQmluZGdlbkJpdGZpZWxkVW5pdFx1MDAzY1t1ODsgMV1cdTAwM2VcdTAwM2UoYml0cykgfVxuJiM0MzsgICAgfVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvLy8gQSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LlxuJiM0MzsjW3JlcHIodHJhbnNwYXJlbnQpXVxuJiM0MztwdWIgc3RydWN0IEZhbWlseSB7XG4mIzQzOyAgICBpbm5lcjogT3BhcXVlXHUwMDNjYmluZGluZ3M6OmdlbmxfZmFtaWx5XHUwMDNlLFxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvLyBTQUZFVFk6IFRoZSBgRmFtaWx5YCB0eXBlIGlzIHRocmVhZCBzYWZlLlxuJiM0Mzt1bnNhZmUgaW1wbCBTeW5jIGZvciBGYW1pbHkge31cbiYjNDM7XG4mIzQzO2ltcGwgRmFtaWx5IHtcbiYjNDM7ICAgIC8vLyBDcmVhdGVzIGEgbmV3IGBGYW1pbHlgIGluc3RhbmNlLlxuJiM0MzsgICAgLy8vXG4mIzQzOyAgICAvLy8gSW50ZW5kZWQgdG8gYmUgdXNlZCBmcm9tIGNvbnN0IGNvbnRleHQgb25seS4gV2lsbCBwYW5pYyBpZiBwcm92aWRlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzLlxuJiM0MzsgICAgLy8vXG4mIzQzOyAgICAvLy8gVGhlIG5hbWUgbXVzdCBiZSBhIG51bC10ZXJtaW5hdGVkIHN0cmluZywgYnV0IGl0IGlzIHRha2VuIGFzIGBcdTAwMjZbdThdYCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkXG4mIzQzOyAgICAvLy8gbW9yZSBjb252ZW5pZW50bHkgd2l0aCB0aGUgc3RyaW5ncyBnZW5lcmF0ZWQgYnkgYmluZGdlbi5cbiYjNDM7ICAgIHB1YiBjb25zdCBmbiBjb25zdF9uZXcoXG4mIzQzOyAgICAgICAgbW9kdWxlOiBcdTAwMjZUaGlzTW9kdWxlLFxuJiM0MzsgICAgICAgIG5hbWU6IFx1MDAyNlt1OF0sXG4mIzQzOyAgICAgICAgdmVyc2lvbjogdTMyLFxuJiM0MzsgICAgICAgIG1jZ3JwczogXHUwMDI2JiMzOTtzdGF0aWMgW011bHRpY2FzdEdyb3VwXSxcbiYjNDM7ICAgICkgLVx1MDAzZSBGYW1pbHkge1xuJiM0MzsgICAgICAgIGxldCBuX21jZ3JwcyA9IG1jZ3Jwcy5sZW4oKSBhcyB1ODtcbiYjNDM7ICAgICAgICBpZiBuX21jZ3JwcyBhcyB1c2l6ZSAhPSBtY2dycHMubGVuKCkge1xuJiM0MzsgICAgICAgICAgICBwYW5pYyEoXCYjMzQ7dG9vIG1hbnkgbWNncnBzXCYjMzQ7KTtcbiYjNDM7ICAgICAgICB9XG4mIzQzOyAgICAgICAgbGV0IG11dCBnZW5sX2ZhbWlseSA9IGJpbmRpbmdzOjpnZW5sX2ZhbWlseSB7XG4mIzQzOyAgICAgICAgICAgIHZlcnNpb24sXG4mIzQzOyAgICAgICAgICAgIF9iaXRmaWVsZF8xOiBGYW1pbHlGbGFncyB7XG4mIzQzOyAgICAgICAgICAgICAgICBuZXRuc29rOiB0cnVlLFxuJiM0MzsgICAgICAgICAgICAgICAgcGFyYWxsZWxfb3BzOiB0cnVlLFxuJiM0MzsgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgIC5pbnRvX2JpdGZpZWxkKCksXG4mIzQzOyAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlLmFzX3B0cigpLFxuJiM0MzsgICAgICAgICAgICBtY2dycHM6IG1jZ3Jwcy5hc19wdHIoKS5jYXN0KCksXG4mIzQzOyAgICAgICAgICAgIG5fbWNncnBzLFxuJiM0MzsgICAgICAgICAgICAuLnBpbl9pbml0Ojp6ZXJvZWQoKVxuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICAgICAgaWYgQ1N0cjo6ZnJvbV9ieXRlc193aXRoX251bChuYW1lKS5pc19lcnIoKSB7XG4mIzQzOyAgICAgICAgICAgIHBhbmljIShcJiMzNDtnZW5sX2ZhbWlseSBuYW1lIG5vdCBudWwtdGVybWluYXRlZFwmIzM0Oyk7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIGlmIGdlbmxfZmFtaWx5Lm5hbWUubGVuKCkgXHUwMDNjIG5hbWUubGVuKCkge1xuJiM0MzsgICAgICAgICAgICBwYW5pYyEoXCYjMzQ7Z2VubF9mYW1pbHkgbmFtZSB0b28gbG9uZ1wmIzM0Oyk7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIGxldCBtdXQgaSA9IDA7XG4mIzQzOyAgICAgICAgd2hpbGUgaSBcdTAwM2MgbmFtZS5sZW4oKSB7XG4mIzQzOyAgICAgICAgICAgIGdlbmxfZmFtaWx5Lm5hbWVbaV0gPSBuYW1lW2ldO1xuJiM0MzsgICAgICAgICAgICBpICYjNDM7PSAxO1xuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgICAgICBGYW1pbHkge1xuJiM0MzsgICAgICAgICAgICBpbm5lcjogT3BhcXVlOjpuZXcoZ2VubF9mYW1pbHkpLFxuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLy8gQ2hlY2tzIGlmIHRoZXJlIGFyZSBhbnkgbGlzdGVuZXJzIGZvciB0aGUgZ2l2ZW4gbXVsdGljYXN0IGdyb3VwLlxuJiM0MzsgICAgcHViIGZuIGhhc19saXN0ZW5lcnMoXHUwMDI2c2VsZiwgZ3JvdXA6IHUzMikgLVx1MDAzZSBib29sIHtcbiYjNDM7ICAgICAgICAvLyBTQUZFVFk6IFRoZSBmYW1pbHkgYW5kIGluaXRfbmV0IHBvaW50ZXJzIGFyZSB2YWxpZC5cbiYjNDM7ICAgICAgICB1bnNhZmUge1xuJiM0MzsgICAgICAgICAgICBiaW5kaW5nczo6Z2VubF9oYXNfbGlzdGVuZXJzKHNlbGYuYXNfcmF3KCksIFx1MDAyNnJhdyBtdXQgYmluZGluZ3M6OmluaXRfbmV0LCBncm91cCkgIT0gMFxuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLy8gUmV0dXJucyBhIHJhdyBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIGBnZW5sX2ZhbWlseWAgc3RydWN0dXJlLlxuJiM0MzsgICAgcHViIGZuIGFzX3JhdyhcdTAwMjZzZWxmKSAtXHUwMDNlICptdXQgYmluZGluZ3M6OmdlbmxfZmFtaWx5IHtcbiYjNDM7ICAgICAgICBzZWxmLmlubmVyLmdldCgpXG4mIzQzOyAgICB9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8vLyBBIGdlbmVyaWMgbmV0bGluayBtdWx0aWNhc3QgZ3JvdXAuXG4mIzQzOyNbcmVwcih0cmFuc3BhcmVudCldXG4mIzQzO3B1YiBzdHJ1Y3QgTXVsdGljYXN0R3JvdXAge1xuJiM0MzsgICAgLy8gTm8gT3BhcXVlIGJlY2F1c2UgZnVsbHkgaW1tdXRhYmxlXG4mIzQzOyAgICBncm91cDogYmluZGluZ3M6OmdlbmxfbXVsdGljYXN0X2dyb3VwLFxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvLyBTQUZFVFk6IFB1cmUgZGF0YSBzbyB0aHJlYWQgc2FmZS5cbiYjNDM7dW5zYWZlIGltcGwgU3luYyBmb3IgTXVsdGljYXN0R3JvdXAge31cbiYjNDM7XG4mIzQzO2ltcGwgTXVsdGljYXN0R3JvdXAge1xuJiM0MzsgICAgLy8vIENyZWF0ZXMgYSBuZXcgYE11bHRpY2FzdEdyb3VwYCBpbnN0YW5jZS5cbiYjNDM7ICAgIC8vL1xuJiM0MzsgICAgLy8vIEludGVuZGVkIHRvIGJlIHVzZWQgZnJvbSBjb25zdCBjb250ZXh0IG9ubHkuIFdpbGwgcGFuaWMgaWYgcHJvdmlkZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50cy5cbiYjNDM7ICAgIHB1YiBjb25zdCBmbiBjb25zdF9uZXcobmFtZTogXHUwMDI2Q1N0cikgLVx1MDAzZSBNdWx0aWNhc3RHcm91cCB7XG4mIzQzOyAgICAgICAgbGV0IG11dCBncm91cDogYmluZGluZ3M6OmdlbmxfbXVsdGljYXN0X2dyb3VwID0gcGluX2luaXQ6Onplcm9lZCgpO1xuJiM0MztcbiYjNDM7ICAgICAgICBsZXQgbmFtZSA9IG5hbWUudG9fYnl0ZXNfd2l0aF9udWwoKTtcbiYjNDM7ICAgICAgICBpZiBncm91cC5uYW1lLmxlbigpIFx1MDAzYyBuYW1lLmxlbigpIHtcbiYjNDM7ICAgICAgICAgICAgcGFuaWMhKFwmIzM0O2dlbmxfbXVsdGljYXN0X2dyb3VwIG5hbWUgdG9vIGxvbmdcJiMzNDspO1xuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgICAgICBsZXQgbXV0IGkgPSAwO1xuJiM0MzsgICAgICAgIHdoaWxlIGkgXHUwMDNjIG5hbWUubGVuKCkge1xuJiM0MzsgICAgICAgICAgICBncm91cC5uYW1lW2ldID0gbmFtZVtpXTtcbiYjNDM7ICAgICAgICAgICAgaSAmIzQzOz0gMTtcbiYjNDM7ICAgICAgICB9XG4mIzQzO1xuJiM0MzsgICAgICAgIE11bHRpY2FzdEdyb3VwIHsgZ3JvdXAgfVxuJiM0MzsgICAgfVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvLy8gQSByZWdpc3RyYXRpb24gb2YgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LlxuJiM0MzsvLy9cbiYjNDM7Ly8vIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSByZWdpc3RyYXRpb24gb2YgYSBbYEZhbWlseWBdLiBXaGVuIGFuIGluc3RhbmNlIG9mIHRoaXMgdHlwZSBpc1xuJiM0MzsvLy8gZHJvcHBlZCwgaXRzIHJlc3BlY3RpdmUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSB3aWxsIGJlIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBzeXN0ZW0uXG4mIzQzOy8vL1xuJiM0MzsvLy8gIyBJbnZhcmlhbnRzXG4mIzQzOy8vL1xuJiM0MzsvLy8gYHNlbGYuZmFtaWx5YCBhbHdheXMgaG9sZHMgYSB2YWxpZCByZWZlcmVuY2UgdG8gYW4gaW5pdGlhbGl6ZWQgYW5kIHJlZ2lzdGVyZWQgW2BGYW1pbHlgXS5cbiYjNDM7cHViIHN0cnVjdCBSZWdpc3RyYXRpb24ge1xuJiM0MzsgICAgZmFtaWx5OiBcdTAwMjYmIzM5O3N0YXRpYyBGYW1pbHksXG4mIzQzO31cbiYjNDM7XG4mIzQzO2ltcGwgRmFtaWx5IHtcbiYjNDM7ICAgIC8vLyBSZWdpc3RlcnMgdGhlIGdlbmVyaWMgbmV0bGluayBmYW1pbHkgd2l0aCB0aGUga2VybmVsLlxuJiM0MzsgICAgcHViIGZuIHJlZ2lzdGVyKFx1MDAyNiYjMzk7c3RhdGljIHNlbGYpIC1cdTAwM2UgUmVzdWx0XHUwMDNjUmVnaXN0cmF0aW9uXHUwMDNlIHtcbiYjNDM7ICAgICAgICAvLyBTQUZFVFk6IGBzZWxmLmFzX3JhdygpYCBpcyBhIHZhbGlkIHBvaW50ZXIgdG8gYSBgZ2VubF9mYW1pbHlgIHN0cnVjdC5cbiYjNDM7ICAgICAgICAvLyBUaGUgYGdlbmxfZmFtaWx5YCBzdHJ1Y3QgaXMgc3RhdGljLCBzbyBpdCB3aWxsIG91dGxpdmUgdGhlIHJlZ2lzdHJhdGlvbi5cbiYjNDM7ICAgICAgICB0b19yZXN1bHQodW5zYWZlIHsgYmluZGluZ3M6OmdlbmxfcmVnaXN0ZXJfZmFtaWx5KHNlbGYuYXNfcmF3KCkpIH0pPztcbiYjNDM7ICAgICAgICBPayhSZWdpc3RyYXRpb24geyBmYW1pbHk6IHNlbGYgfSlcbiYjNDM7ICAgIH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7aW1wbCBEcm9wIGZvciBSZWdpc3RyYXRpb24ge1xuJiM0MzsgICAgZm4gZHJvcChcdTAwMjZtdXQgc2VsZikge1xuJiM0MzsgICAgICAgIC8vIFNBRkVUWTogYHNlbGYuZmFtaWx5LmFzX3JhdygpYCBpcyBhIHZhbGlkIHBvaW50ZXIgdG8gYSByZWdpc3RlcmVkIGBnZW5sX2ZhbWlseWAgc3RydWN0LlxuJiM0MzsgICAgICAgIC8vIFRoZSBgUmVnaXN0cmF0aW9uYCBzdHJ1Y3QgZW5zdXJlcyB0aGF0IGBnZW5sX3VucmVnaXN0ZXJfZmFtaWx5YCBpcyBjYWxsZWQgZXhhY3RseSBvbmNlXG4mIzQzOyAgICAgICAgLy8gZm9yIHRoaXMgZmFtaWx5IHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUuXG4mIzQzOyAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6OmdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoc2VsZi5mYW1pbHkuYXNfcmF3KCkpIH07XG4mIzQzOyAgICB9XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNbbWFjcm9zOjprdW5pdF90ZXN0cyhydXN0X25ldGxpbmspXVxuJiM0Mzttb2QgdGVzdHMge1xuJiM0MzsgICAgdXNlIHN1cGVyOjoqO1xuJiM0MztcbiYjNDM7ICAgICNbdGVzdF1cbiYjNDM7ICAgIGZuIHRlc3RfZmFtaWx5X2ZsYWdzX2JpdGZpZWxkKCkge1xuJiM0MzsgICAgICAgIGZvciBuZXRuc29rIGluIFtmYWxzZSwgdHJ1ZV0ge1xuJiM0MzsgICAgICAgICAgICBmb3IgcGFyYWxsZWxfb3BzIGluIFtmYWxzZSwgdHJ1ZV0ge1xuJiM0MzsgICAgICAgICAgICAgICAgbGV0IG11dCBiX2ZhbSA9IGJpbmRpbmdzOjpnZW5sX2ZhbWlseSB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgLi5EZWZhdWx0OjpkZWZhdWx0KClcbiYjNDM7ICAgICAgICAgICAgICAgIH07XG4mIzQzOyAgICAgICAgICAgICAgICBiX2ZhbS5zZXRfbmV0bnNvayhpZiBuZXRuc29rIHsgMSB9IGVsc2UgeyAwIH0pO1xuJiM0MzsgICAgICAgICAgICAgICAgYl9mYW0uc2V0X3BhcmFsbGVsX29wcyhpZiBwYXJhbGxlbF9vcHMgeyAxIH0gZWxzZSB7IDAgfSk7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgbGV0IGNfYml0ZmllbGQgPSBGYW1pbHlGbGFncyB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgbmV0bnNvayxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBwYXJhbGxlbF9vcHMsXG4mIzQzOyAgICAgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgICAgICAuaW50b19iaXRmaWVsZCgpO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIC8vIFNBRkVUWTogVGhlIGJpdCBmaWVsZCBpcyBzdG9yZWQgYXMgdTguXG4mIzQzOyAgICAgICAgICAgICAgICBsZXQgYl92YWw6IHU4ID0gdW5zYWZlIHsgY29yZTo6bWVtOjp0cmFuc211dGUoYl9mYW0uX2JpdGZpZWxkXzEpIH07XG4mIzQzOyAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IFRoZSBiaXQgZmllbGQgaXMgc3RvcmVkIGFzIHU4LlxuJiM0MzsgICAgICAgICAgICAgICAgbGV0IGNfdmFsOiB1OCA9IHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlKGNfYml0ZmllbGQpIH07XG4mIzQzOyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKGJfdmFsLCBjX3ZhbCk7XG4mIzQzOyAgICAgICAgICAgIH1cbiYjNDM7ICAgICAgICB9XG4mIzQzOyAgICB9XG4mIzQzO31cbmRpZmYgLS1naXQgYS9ydXN0L3VhcGkvdWFwaV9oZWxwZXIuaCBiL3J1c3QvdWFwaS91YXBpX2hlbHBlci5oXG5pbmRleCAwNmQ3ZDFhMmU4ZGFiYS4uODZjN2I2YjI4NGIwNWEgMTAwNjQ0XG4tLS0gYS9ydXN0L3VhcGkvdWFwaV9oZWxwZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC91YXBpL3VhcGlfaGVscGVyLmhcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvZHJtL25vdmFfZHJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2RybS9wYW50aG9yX2RybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9hbmRyb2lkL2JpbmRlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYW5kcm9pZC9iaW5kZXJfbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21paS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9ldGh0b29sLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBTkRST0lEX0JJTkRFUl9JUENfUlVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlcG9ydF9uZXRsaW5rX2lubmVyJiMzNDssCiAgICAmIzM0O3JlcG9ydF9uZXRsaW5rJiMzNDssCiAgICAmIzM0O2dlbmxtc2dfcHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbmV0bGluayBtdWx0aWNhc3QgcmVwb3J0aW5nIGZvciBBbmRyb2lkIEJpbmRlciB0cmFuc2FjdGlvbiBmYWlsdXJlcyBpbiBSdXN0LiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgZm9yIGNvbnN0cnVjdGluZyBhbmQgYnJvYWRjYXN0aW5nIG5ldGxpbmsgbWVzc2FnZXMgd2hlbiBiaW5kZXIgdHJhbnNhY3Rpb25zIGZhaWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc1ZTI4MDQwOTYyYTVmMWQ3MTk5NTZmMjc4MGI3ZTdlNjM1ZDVjMjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDE3OjU1OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBjM2Y3MjA1OGEyZjI2ZS4uYmU1YTE5NmYxMmM2YWYgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xODg3NSw2ICYjNDM7MTg4NzUsOCBAQCBGOglpbmNsdWRlL3VhcGkvbGludXgvc2N0cC5oCiBGOglsaWIvbmV0X3V0aWxzLmMKIEY6CWxpYi9yYW5kb20zMi5jCiBGOgluZXQvCiYjNDM7RjoJcnVzdC9oZWxwZXJzL25ldC8KJiM0MztGOglydXN0L2tlcm5lbC9uZXQvCiBGOglzYW1wbGVzL3BrdGdlbi8KIEY6CXRvb2xzL25ldC8KIEY6CXRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnIGIvZHJpdmVycy9hbmRyb2lkL0tjb25maWcKaW5kZXggZTJlNDAyYzlkMTc1OWMuLjYwNmE5ZDA3Zjc3NDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZwpAQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIEFORFJPSURfQklOREVSX0lQQwogCiBjb25maWcgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1QKIAlib29sICYjMzQ7UnVzdCB2ZXJzaW9uIG9mIEFuZHJvaWQgQmluZGVyIElQQyBEcml2ZXImIzM0OwotCWRlcGVuZHMgb24gUlVTVCAmYW1wOyZhbXA7IE1NVSAmYW1wOyZhbXA7ICFBTkRST0lEX0JJTkRFUl9JUEMKJiM0MzsJZGVwZW5kcyBvbiBSVVNUICZhbXA7JmFtcDsgTU1VICZhbXA7JmFtcDsgTkVUICZhbXA7JmFtcDsgIUFORFJPSURfQklOREVSX0lQQwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgUnVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQmluZGVyIGRyaXZlci4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZWI3ZWEyZWRhZmY3MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5ycwpAQCAtMCwwICYjNDM7MSwxMTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKChHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlKSBPUiBCU0QtMy1DbGF1c2UpCiYjNDM7LyogQmFzZWQgb246IERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9iaW5kZXIueWFtbCAqLwomIzQzOwomIzQzOyMhW2FsbG93KHVucmVhY2hhYmxlX3B1YiwgY2xpcHB5Ojp3cm9uZ19zZWxmX2NvbnZlbnRpb24pXQomIzQzO3VzZSBrZXJuZWw6OnsKJiM0MzsgICAgbmV0OjpuZXRsaW5rOjp7CiYjNDM7ICAgICAgICBGYW1pbHksCiYjNDM7ICAgICAgICBHZW5sTXNnLAomIzQzOyAgICAgICAgTXVsdGljYXN0R3JvdXAsCiYjNDM7ICAgICAgICBOZXRsaW5rU2tCdWZmLCAvLwomIzQzOyAgICB9LAomIzQzOyAgICBwcmVsdWRlOjoqLCAvLwomIzQzO307CiYjNDM7CiYjNDM7cHViIHN0YXRpYyBCSU5ERVJfTkxfRkFNSUxZOiBGYW1pbHkgPSBGYW1pbHk6OmNvbnN0X25ldygKJiM0MzsgICAgJmFtcDtjcmF0ZTo6VEhJU19NT0RVTEUsCiYjNDM7ICAgIGtlcm5lbDo6dWFwaTo6QklOREVSX0ZBTUlMWV9OQU1FLAomIzQzOyAgICBrZXJuZWw6OnVhcGk6OkJJTkRFUl9GQU1JTFlfVkVSU0lPTiwKJiM0MzsgICAgJmFtcDtCSU5ERVJfTkxfRkFNSUxZX01DR1JQUywKJiM0MzspOwomIzQzOwomIzQzO3N0YXRpYyBCSU5ERVJfTkxfRkFNSUxZX01DR1JQUzogW011bHRpY2FzdEdyb3VwOyAxXSA9IFtNdWx0aWNhc3RHcm91cDo6Y29uc3RfbmV3KGMmIzM0O3JlcG9ydCYjMzQ7KV07CiYjNDM7CiYjNDM7Ly8vIEEgbXVsdGljYXN0IGV2ZW50IHNlbnQgdG8gdXNlcnNwYWNlIHN1YnNjcmliZXJzIHRvIG5vdGlmeSB0aGVtIGFib3V0CiYjNDM7Ly8vIGJpbmRlciB0cmFuc2FjdGlvbiBmYWlsdXJlcy4gVGhlIGdlbmVyYXRlZCByZXBvcnQgcHJvdmlkZXMgdGhlIGZ1bGwKJiM0MzsvLy8gZGV0YWlscyBvZiB0aGUgc3BlY2lmaWMgdHJhbnNhY3Rpb24gdGhhdCBmYWlsZWQuIFRoZSBpbnRlbnRpb24gaXMgZm9yCiYjNDM7Ly8vIHByb2dyYW1zIHRvIG1vbml0b3IgdGhlc2UgZXZlbnRzIGFuZCByZWFjdCB0byB0aGUgZmFpbHVyZXMgYXMgbmVlZGVkLgomIzQzO3B1YiBzdHJ1Y3QgUmVwb3J0IHsKJiM0MzsgICAgc2tiOiBHZW5sTXNnLAomIzQzO30KJiM0MzsKJiM0MztpbXBsIFJlcG9ydCB7CiYjNDM7ICAgIC8vLyBDcmVhdGUgYSBuZXcgbXVsdGljYXN0IG1lc3NhZ2UuCiYjNDM7ICAgIHB1YiBmbiBuZXcoCiYjNDM7ICAgICAgICBzaXplOiB1c2l6ZSwKJiM0MzsgICAgICAgIHBvcnRpZDogdTMyLAomIzQzOyAgICAgICAgc2VxOiB1MzIsCiYjNDM7ICAgICAgICBmbGFnczoga2VybmVsOjphbGxvYzo6RmxhZ3MsCiYjNDM7ICAgICkgLSZndDsgUmVzdWx0Jmx0O1NlbGYsIGtlcm5lbDo6YWxsb2M6OkFsbG9jRXJyb3ImZ3Q7IHsKJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9DTURfUkVQT1JUOiB1OCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0NNRF9SRVBPUlQgYXMgdTg7CiYjNDM7ICAgICAgICBsZXQgc2tiID0gTmV0bGlua1NrQnVmZjo6bmV3KHNpemUsIGZsYWdzKT87CiYjNDM7ICAgICAgICBsZXQgc2tiID0gc2tiLmdlbmxtc2dfcHV0KHBvcnRpZCwgc2VxLCAmYW1wO0JJTkRFUl9OTF9GQU1JTFksIEJJTkRFUl9DTURfUkVQT1JUKT87CiYjNDM7ICAgICAgICBPayhTZWxmIHsgc2tiIH0pCiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIEJyb2FkY2FzdCB0aGlzIG1lc3NhZ2UuCiYjNDM7ICAgIHB1YiBmbiBtdWx0aWNhc3Qoc2VsZiwgcG9ydGlkOiB1MzIsIGZsYWdzOiBrZXJuZWw6OmFsbG9jOjpGbGFncykgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIHNlbGYuc2tiLm11bHRpY2FzdCgmYW1wO0JJTkRFUl9OTF9GQU1JTFksIHBvcnRpZCwgMCwgZmxhZ3MpCiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIENoZWNrIGlmIHRoaXMgbWVzc2FnZSB0eXBlIGhhcyBsaXN0ZW5lcnMuCiYjNDM7ICAgIHB1YiBmbiBoYXNfbGlzdGVuZXJzKCkgLSZndDsgYm9vbCB7CiYjNDM7ICAgICAgICBCSU5ERVJfTkxfRkFNSUxZLmhhc19saXN0ZW5lcnMoMCkKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLy8gVGhlIGVudW0gYmluZGVyX2RyaXZlcl9yZXR1cm5fcHJvdG9jb2wgcmV0dXJuZWQgdG8gdGhlIHNlbmRlci4KJiM0MzsgICAgcHViIGZuIGVycm9yKCZhbXA7bXV0IHNlbGYsIHZhbDogdTMyKSAtJmd0OyBSZXN1bHQgewomIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0VSUk9SOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0VSUk9SIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfRVJST1IsIHZhbCkKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLy8gVGhlIGJpbmRlciBjb250ZXh0IHdoZXJlIHRoZSB0cmFuc2FjdGlvbiBvY2N1cnJlZC4KJiM0MzsgICAgcHViIGZuIGNvbnRleHQoJmFtcDttdXQgc2VsZiwgdmFsOiAmYW1wO0NTdHIpIC0mZ3Q7IFJlc3VsdCB7CiYjNDM7ICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfQ09OVEVYVDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9DT05URVhUIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3N0cmluZyhCSU5ERVJfQV9SRVBPUlRfQ09OVEVYVCwgdmFsKQomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIC8vLyBUaGUgUElEIG9mIHRoZSBzZW5kZXIgcHJvY2Vzcy4KJiM0MzsgICAgcHViIGZuIGZyb21fcGlkKCZhbXA7bXV0IHNlbGYsIHZhbDogdTMyKSAtJmd0OyBSZXN1bHQgewomIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0ZST01fUElEOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0ZST01fUElEIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfRlJPTV9QSUQsIHZhbCkKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLy8gVGhlIFRJRCBvZiB0aGUgc2VuZGVyIHRocmVhZC4KJiM0MzsgICAgcHViIGZuIGZyb21fdGlkKCZhbXA7bXV0IHNlbGYsIHZhbDogdTMyKSAtJmd0OyBSZXN1bHQgewomIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0ZST01fVElEOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0ZST01fVElEIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfRlJPTV9USUQsIHZhbCkKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLy8gVGhlIFBJRCBvZiB0aGUgcmVjaXBpZW50IHByb2Nlc3MuIFRoaXMgYXR0cmlidXRlIG1heSBub3QgYmUgcHJlc2VudAomIzQzOyAgICAvLy8gaWYgdGhlIHRhcmdldCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4KJiM0MzsgICAgcHViIGZuIHRvX3BpZCgmYW1wO211dCBzZWxmLCB2YWw6IHUzMikgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9UT19QSUQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfVE9fUElEIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfVE9fUElELCB2YWwpCiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIFRoZSBUSUQgb2YgdGhlIHJlY2lwaWVudCB0aHJlYWQuIFRoaXMgYXR0cmlidXRlIG1heSBub3QgYmUgcHJlc2VudAomIzQzOyAgICAvLy8gaWYgdGhlIHRhcmdldCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4KJiM0MzsgICAgcHViIGZuIHRvX3RpZCgmYW1wO211dCBzZWxmLCB2YWw6IHUzMikgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9UT19USUQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfVE9fVElEIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfVE9fVElELCB2YWwpCiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIFdoZW4gcHJlc2VudCwgaW5kaWNhdGVzIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gaXMgYSByZXBseS4KJiM0MzsgICAgcHViIGZuIGlzX3JlcGx5KCZhbXA7bXV0IHNlbGYpIC0mZ3Q7IFJlc3VsdCB7CiYjNDM7ICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfSVNfUkVQTFk6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfSVNfUkVQTFkgYXMgY19pbnQ7CiYjNDM7ICAgICAgICBzZWxmLnNrYi5wdXRfZmxhZyhCSU5ERVJfQV9SRVBPUlRfSVNfUkVQTFkpCiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIFRoZSBiaXRtYXNrIG9mIGVudW0gdHJhbnNhY3Rpb25fZmxhZ3MgZnJvbSB0aGUgdHJhbnNhY3Rpb24uCiYjNDM7ICAgIHB1YiBmbiBmbGFncygmYW1wO211dCBzZWxmLCB2YWw6IHUzMikgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9GTEFHUzogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9GTEFHUyBhcyBjX2ludDsKJiM0MzsgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0ZMQUdTLCB2YWwpCiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIFRoZSBhcHBsaWNhdGlvbi1kZWZpbmVkIGNvZGUgZnJvbSB0aGUgdHJhbnNhY3Rpb24uCiYjNDM7ICAgIHB1YiBmbiBjb2RlKCZhbXA7bXV0IHNlbGYsIHZhbDogdTMyKSAtJmd0OyBSZXN1bHQgewomIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0NPREU6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfQ09ERSBhcyBjX2ludDsKJiM0MzsgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0NPREUsIHZhbCkKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLy8gVGhlIHRyYW5zYWN0aW9uIHBheWxvYWQgc2l6ZSBpbiBieXRlcy4KJiM0MzsgICAgcHViIGZuIGRhdGFfc2l6ZSgmYW1wO211dCBzZWxmLCB2YWw6IHUzMikgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9EQVRBX1NJWkU6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfREFUQV9TSVpFIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfREFUQV9TSVpFLCB2YWwpCiYjNDM7ICAgIH0KJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnMKaW5kZXggNDMyMzkwYWFiMjViYjguLmRmNDdhYmEwNTEzMzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9ydXN0X2JpbmRlcl9tYWluLnJzCkBAIC0zMiw2ICYjNDM7MzIsNyBAQAogbW9kIGRlZmVycmVkX2Nsb3NlOwogbW9kIGRlZnM7CiBtb2QgZXJyb3I7CiYjNDM7bW9kIG5ldGxpbms7CiBtb2Qgbm9kZTsKIG1vZCBwYWdlX3JhbmdlOwogbW9kIHByb2Nlc3M7CkBAIC0yODIsMTkgJiM0MzsyODMsMjIgQEAgZm4gcHRyX2FsaWduKHZhbHVlOiB1c2l6ZSkgLSZndDsgT3B0aW9uJmx0O3VzaXplJmd0OyB7CiAvLyBTQUZFVFk6IFdlIGNhbGwgcmVnaXN0ZXIgaW4gYGluaXRgLgogc3RhdGljIEJJTkRFUl9TSFJJTktFUjogU2hyaW5rZXIgPSB1bnNhZmUgeyBTaHJpbmtlcjo6bmV3KCkgfTsKIAotc3RydWN0IEJpbmRlck1vZHVsZSB7fQomIzQzO3N0cnVjdCBCaW5kZXJNb2R1bGUgewomIzQzOyAgICBfbmV0bGluazoga2VybmVsOjpuZXQ6Om5ldGxpbms6OlJlZ2lzdHJhdGlvbiwKJiM0Mzt9CiAKIGltcGwga2VybmVsOjpNb2R1bGUgZm9yIEJpbmRlck1vZHVsZSB7CiAgICAgZm4gaW5pdChfbW9kdWxlOiAmYW1wOyYjMzk7c3RhdGljIGtlcm5lbDo6VGhpc01vZHVsZSkgLSZndDsgUmVzdWx0Jmx0O1NlbGYmZ3Q7IHsKICAgICAgICAgLy8gU0FGRVRZOiBUaGUgbW9kdWxlIGluaXRpYWxpemVyIG5ldmVyIHJ1bnMgdHdpY2UsIHNvIHdlIG9ubHkgY2FsbCB0aGlzIG9uY2UuCiAgICAgICAgIHVuc2FmZSB7IGNyYXRlOjpjb250ZXh0OjpDT05URVhUUy5pbml0KCkgfTsKIAomIzQzOyAgICAgICAgbGV0IG5ldGxpbmsgPSBjcmF0ZTo6bmV0bGluazo6QklOREVSX05MX0ZBTUlMWS5yZWdpc3RlcigpPzsKICAgICAgICAgQklOREVSX1NIUklOS0VSLnJlZ2lzdGVyKGMmIzM0O2FuZHJvaWQtYmluZGVyJiMzNDspPzsKIAogICAgICAgICAvLyBTQUZFVFk6IFRoZSBtb2R1bGUgaXMgYmVpbmcgbG9hZGVkLCBzbyB3ZSBjYW4gaW5pdGlhbGl6ZSBiaW5kZXJmcy4KICAgICAgICAgdW5zYWZlIHsga2VybmVsOjplcnJvcjo6dG9fcmVzdWx0KGJpbmRlcmZzOjppbml0X3J1c3RfYmluZGVyZnMoKSk/IH07CiAKLSAgICAgICAgT2soU2VsZiB7fSkKJiM0MzsgICAgICAgIE9rKFNlbGYgeyBfbmV0bGluazogbmV0bGluayB9KQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycwppbmRleCAxOWY4ODE5NDhhODRiYS4uMzMzNjhmN2ZkNTUxNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzCkBAIC0xMjg0LDYgJiM0MzsxMjg0LDE1IEBAIGZuIHRyYW5zYWN0aW9uKHNlbGY6ICZhbXA7QXJjJmx0O1NlbGYmZ3Q7LCBjbWQ6IHUzMiwgcmVhZGVyOiAmYW1wO211dCBVc2VyU2xpY2VSZWFkZXIpIC0mZ3Q7IFJlc3UKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiYjNDM7ICAgICAgICBpZiBpbmZvLm9uZXdheV9zcGFtX3N1c3BlY3QgewomIzQzOyAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYm90aCBhIG9uZXdheSBzcGFtIHN1c3BlY3QgYW5kIGEgZmFpbHVyZSwgd2UgcmVwb3J0IGl0IHR3aWNlLiBUaGlzIGlzCiYjNDM7ICAgICAgICAgICAgLy8gdXNlZnVsIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGZhaWxlZCB3aXRoIEJSX1RSQU5TQUNUSU9OX1BFTkRJTkdfRlJPWkVOLgomIzQzOyAgICAgICAgICAgIGluZm8ucmVwb3J0X25ldGxpbmsoQlJfT05FV0FZX1NQQU1fU1VTUEVDVCwgJmFtcDtzZWxmLnByb2Nlc3MuY3R4KTsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIGlmIGluZm8ucmVwbHkgIT0gMCB7CiYjNDM7ICAgICAgICAgICAgaW5mby5yZXBvcnRfbmV0bGluayhpbmZvLnJlcGx5LCAmYW1wO3NlbGYucHJvY2Vzcy5jdHgpOwomIzQzOyAgICAgICAgfQomIzQzOwogICAgICAgICBPaygoKSkKICAgICB9CiAKQEAgLTEzNTQsMTEgJiM0MzsxMzYzLDExIEBAIGZuIHJlcGx5X2lubmVyKHNlbGY6ICZhbXA7QXJjJmx0O1NlbGYmZ3Q7LCBpbmZvOiAmYW1wO211dCBUcmFuc2FjdGlvbkluZm8pIC0mZ3Q7IEJpbmRlclJlc3VsdCB7CiAgICAgICAgICAgICAgICAgaW5mby5mcm9tX3RpZCwKICAgICAgICAgICAgICAgICBpbmZvLnRvX3BpZAogICAgICAgICAgICAgKTsKLQogICAgICAgICAgICAgbGV0IHBhcmFtID0gZXJyLnNvdXJjZS5hc19yZWYoKS5tYXBfb3IoMCwgfGV8IGUudG9fZXJybm8oKSk7CiAgICAgICAgICAgICBsZXQgZWUgPSBFeHRlbmRlZEVycm9yOjpuZXcoaW5mby5kZWJ1Z19pZCBhcyB1MzIsIGVyci5yZXBseSwgcGFyYW0pOwogICAgICAgICAgICAgb3JpZy5mcm9tCiAgICAgICAgICAgICAgICAgLmRlbGl2ZXJfcmVwbHkoRXJyKEJSX0ZBSUxFRF9SRVBMWSksICZhbXA7b3JpZywgU29tZShlZSkpOwomIzQzOyAgICAgICAgICAgIGluZm8ucmVwbHkgPSBCUl9GQUlMRURfUkVQTFk7CiAgICAgICAgICAgICBlcnIucmVwbHkgPSBCUl9UUkFOU0FDVElPTl9DT01QTEVURTsKICAgICAgICAgICAgIGVycgogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzCmluZGV4IGFmZWY1YjQ2ZWFjMjY3Li42Y2I3Yjc0NWM1MmU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5ycwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzCkBAIC0zLDYgJiM0MzszLDcgQEAKIC8vIENvcHlyaWdodCAoQykgMjAyNSBHb29nbGUgTExDLgogCiB1c2Uga2VybmVsOjp7CiYjNDM7ICAgIG5ldDo6bmV0bGluazo6R0VOTE1TR19ERUZBVUxUX1NJWkUsCiAgICAgcHJlbHVkZTo6KiwKICAgICBzZXFfZmlsZTo6U2VxRmlsZSwKICAgICBzZXFfcHJpbnQsCkBAIC0xOCw2ICYjNDM7MTksNyBAQAogICAgIGFsbG9jYXRpb246OntBbGxvY2F0aW9uLCBUcmFuc2xhdGVkRmRzfSwKICAgICBkZWZzOjoqLAogICAgIGVycm9yOjp7QmluZGVyRXJyb3IsIEJpbmRlclJlc3VsdH0sCiYjNDM7ICAgIG5ldGxpbms6OlJlcG9ydCwKICAgICBub2RlOjp7Tm9kZSwgTm9kZVJlZn0sCiAgICAgcHJvY2Vzczo6e1Byb2Nlc3MsIFByb2Nlc3NJbm5lcn0sCiAgICAgcHRyX2FsaWduLApAQCAtNTEsNiAmIzQzOzUzLDQ0IEBAIGltcGwgVHJhbnNhY3Rpb25JbmZvIHsKICAgICBwdWIoY3JhdGUpIGZuIGlzX29uZXdheSgmYW1wO3NlbGYpIC0mZ3Q7IGJvb2wgewogICAgICAgICBzZWxmLmZsYWdzICZhbXA7IFRGX09ORV9XQVkgIT0gMAogICAgIH0KJiM0MzsKJiM0MzsgICAgcHViKGNyYXRlKSBmbiByZXBvcnRfbmV0bGluaygmYW1wO3NlbGYsIHJlcGx5OiB1MzIsIGN0eDogJmFtcDtjcmF0ZTo6Q29udGV4dCkgewomIzQzOyAgICAgICAgaWYgbGV0IEVycihlcnIpID0gc2VsZi5yZXBvcnRfbmV0bGlua19pbm5lcihyZXBseSwgY3R4KSB7CiYjNDM7ICAgICAgICAgICAgcHJfd2FybiEoCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7e306e30gbmV0bGluayByZXBvcnQgZmFpbGVkOiB7ZXJyOj99XG4mIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgc2VsZi5mcm9tX3BpZCwKJiM0MzsgICAgICAgICAgICAgICAgc2VsZi5mcm9tX3RpZAomIzQzOyAgICAgICAgICAgICk7CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgZm4gcmVwb3J0X25ldGxpbmtfaW5uZXIoJmFtcDtzZWxmLCByZXBseTogdTMyLCBjdHg6ICZhbXA7Y3JhdGU6OkNvbnRleHQpIC0mZ3Q7IGtlcm5lbDo6ZXJyb3I6OlJlc3VsdCB7CiYjNDM7ICAgICAgICBpZiAhUmVwb3J0OjpoYXNfbGlzdGVuZXJzKCkgewomIzQzOyAgICAgICAgICAgIHJldHVybiBPaygoKSk7CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgICAgICBsZXQgbXV0IHJlcG9ydCA9IFJlcG9ydDo6bmV3KEdFTkxNU0dfREVGQVVMVF9TSVpFLCAwLCAwLCBHRlBfS0VSTkVMKT87CiYjNDM7CiYjNDM7ICAgICAgICByZXBvcnQuZXJyb3IocmVwbHkpPzsKJiM0MzsgICAgICAgIHJlcG9ydC5jb250ZXh0KCZhbXA7Y3R4Lm5hbWUpPzsKJiM0MzsgICAgICAgIHJlcG9ydC5mcm9tX3BpZChzZWxmLmZyb21fcGlkIGFzIHUzMik/OwomIzQzOyAgICAgICAgcmVwb3J0LmZyb21fdGlkKHNlbGYuZnJvbV90aWQgYXMgdTMyKT87CiYjNDM7ICAgICAgICBpZiBzZWxmLnRvX3BpZCAhPSAwIHsKJiM0MzsgICAgICAgICAgICByZXBvcnQudG9fcGlkKHNlbGYudG9fcGlkIGFzIHUzMik/OwomIzQzOyAgICAgICAgfQomIzQzOyAgICAgICAgaWYgc2VsZi50b190aWQgIT0gMCB7CiYjNDM7ICAgICAgICAgICAgcmVwb3J0LnRvX3RpZChzZWxmLnRvX3RpZCBhcyB1MzIpPzsKJiM0MzsgICAgICAgIH0KJiM0MzsKJiM0MzsgICAgICAgIGlmIHNlbGYuaXNfcmVwbHkgewomIzQzOyAgICAgICAgICAgIHJlcG9ydC5pc19yZXBseSgpPzsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIHJlcG9ydC5mbGFncyhzZWxmLmZsYWdzKT87CiYjNDM7ICAgICAgICByZXBvcnQuY29kZShzZWxmLmNvZGUpPzsKJiM0MzsgICAgICAgIHJlcG9ydC5kYXRhX3NpemUoc2VsZi5kYXRhX3NpemUgYXMgdTMyKT87CiYjNDM7CiYjNDM7ICAgICAgICByZXBvcnQubXVsdGljYXN0KDAsIEdGUF9LRVJORUwpPzsKJiM0MzsgICAgICAgIE9rKCgpKQomIzQzOyAgICB9CiB9CiAKIHVzZSBjb3JlOjptZW06Om9mZnNldF9vZjsKZGlmZiAtLWdpdCBhL3J1c3QvYmluZGluZ3MvYmluZGluZ3NfaGVscGVyLmggYi9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oCmluZGV4IDExMjQ3ODVlMjEwYjMwLi5lYzk2ZTgxMTYxMGQ3MiAxMDA2NDQKLS0tIGEvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oCkBAIC05Myw2ICYjNDM7OTMsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2dlbmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9ydXN0X3NhbXBsZS5oJmd0OwogCiAvKgpAQCAtMTEwLDYgJiM0MzsxMTIsNyBAQAogY29uc3Qgc2l6ZV90IFJVU1RfQ09OU1RfSEVMUEVSX0FSQ0hfU0xBQl9NSU5BTElHTiA9IEFSQ0hfU0xBQl9NSU5BTElHTjsKIGNvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9BUkNIX0tNQUxMT0NfTUlOQUxJR04gPSBBUkNIX0tNQUxMT0NfTUlOQUxJR047CiBjb25zdCBzaXplX3QgUlVTVF9DT05TVF9IRUxQRVJfUEFHRV9TSVpFID0gUEFHRV9TSVpFOwomIzQzO2NvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRU5MTVNHX0RFRkFVTFRfU0laRSA9IEdFTkxNU0dfREVGQVVMVF9TSVpFOwogY29uc3QgZ2ZwX3QgUlVTVF9DT05TVF9IRUxQRVJfR0ZQX0FUT01JQyA9IEdGUF9BVE9NSUM7CiBjb25zdCBnZnBfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRlBfS0VSTkVMID0gR0ZQX0tFUk5FTDsKIGNvbnN0IGdmcF90IFJVU1RfQ09OU1RfSEVMUEVSX0dGUF9LRVJORUxfQUNDT1VOVCA9IEdGUF9LRVJORUxfQUNDT1VOVDsKZGlmZiAtLWdpdCBhL3J1c3QvaGVscGVycy9oZWxwZXJzLmMgYi9ydXN0L2hlbHBlcnMvaGVscGVycy5jCmluZGV4IDk5OGUzMTA1MmU2NjAxLi4xZDRlZTUxZjU3NmJlYiAxMDA2NDQKLS0tIGEvcnVzdC9oZWxwZXJzL2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9ydXN0L2hlbHBlcnMvaGVscGVycy5jCkBAIC03Miw2ICYjNDM7NzIsNyBAQAogI2luY2x1ZGUgJiMzNDttYXBsZV90cmVlLmMmIzM0OwogI2luY2x1ZGUgJiMzNDttbS5jJiMzNDsKICNpbmNsdWRlICYjMzQ7bXV0ZXguYyYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtuZXQvZ2VuZXRsaW5rLmMmIzM0OwogI2luY2x1ZGUgJiMzNDtvZi5jJiMzNDsKICNpbmNsdWRlICYjMzQ7cGFnZS5jJiMzNDsKICNpbmNsdWRlICYjMzQ7cGNpLmMmIzM0OwpkaWZmIC0tZ2l0IGEvcnVzdC9oZWxwZXJzL25ldC9nZW5ldGxpbmsuYyBiL3J1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM1MzBiNjlmNmNmNzA3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC9oZWxwZXJzL25ldC9nZW5ldGxpbmsuYwpAQCAtMCwwICYjNDM7MSw0NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlIExMQy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2dlbmV0bGluay5oJmd0OwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTkVUCiYjNDM7CiYjNDM7X19ydXN0X2hlbHBlciBzdHJ1Y3Qgc2tfYnVmZiAqcnVzdF9oZWxwZXJfZ2VubG1zZ19uZXcoc2l6ZV90IHBheWxvYWQsIGdmcF90IGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIGdlbmxtc2dfbmV3KHBheWxvYWQsIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19ydXN0X2hlbHBlcgomIzQzO2ludCBydXN0X2hlbHBlcl9nZW5sbXNnX211bHRpY2FzdChjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSwKJiM0MzsJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLAomIzQzOwkJCQkgIHVuc2lnbmVkIGludCBncm91cCwgZ2ZwX3QgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gZ2VubG1zZ19tdWx0aWNhc3QoZmFtaWx5LCBza2IsIHBvcnRpZCwgZ3JvdXAsIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19ydXN0X2hlbHBlciB2b2lkIHJ1c3RfaGVscGVyX2dlbmxtc2dfY2FuY2VsKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcikKJiM0Mzt7CiYjNDM7CWdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19ydXN0X2hlbHBlciB2b2lkIHJ1c3RfaGVscGVyX2dlbmxtc2dfZW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcikKJiM0Mzt7CiYjNDM7CWdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19ydXN0X2hlbHBlciB2b2lkIHJ1c3RfaGVscGVyX25sbXNnX2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CW5sbXNnX2ZyZWUoc2tiKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19ydXN0X2hlbHBlcgomIzQzO2ludCBydXN0X2hlbHBlcl9nZW5sX2hhc19saXN0ZW5lcnMoY29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksCiYjNDM7CQkJCSAgIHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGdyb3VwKQomIzQzO3sKJiM0MzsJcmV0dXJuIGdlbmxfaGFzX2xpc3RlbmVycyhmYW1pbHksIG5ldCwgZ3JvdXApOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL25ldC5ycyBiL3J1c3Qva2VybmVsL25ldC9tb2QucnMKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gcnVzdC9rZXJuZWwvbmV0LnJzCnJlbmFtZSB0byBydXN0L2tlcm5lbC9uZXQvbW9kLnJzCmluZGV4IGZlNDE1Y2IzNjlkM2FjLi44ZWNhZTc1NzdlZDI5NSAxMDA2NDQKLS0tIGEvcnVzdC9rZXJuZWwvbmV0LnJzCiYjNDM7JiM0MzsmIzQzOyBiL3J1c3Qva2VybmVsL25ldC9tb2QucnMKQEAgLTQsMyAmIzQzOzQsNSBAQAogCiAjW2NmZyhDT05GSUdfUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TKV0KIHB1YiBtb2QgcGh5OwomIzQzOwomIzQzO3B1YiBtb2QgbmV0bGluazsKZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzIGIvcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIyZWYzZGRlMzZmYTFhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMKQEAgLTAsMCAmIzQzOzEsMzM3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlIExMQy4KJiM0MzsKJiM0MzsvLyEgUnVzdCBzdXBwb3J0IGZvciBnZW5lcmljIG5ldGxpbmsuCiYjNDM7Ly8hCiYjNDM7Ly8hIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGV4cG9zaW5nIG11bHRpY2FzdCBncm91cHMuCiYjNDM7Ly8hCiYjNDM7Ly8hIEMgaGVhZGVyOiBbYGluY2x1ZGUvbmV0L2dlbmV0bGluay5oYF0oc3JjdHJlZS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaCkKJiM0MzsKJiM0Mzt1c2Uga2VybmVsOjp7CiYjNDM7ICAgIGFsbG9jOjp7c2VsZiwgQWxsb2NFcnJvcn0sCiYjNDM7ICAgIGVycm9yOjp0b19yZXN1bHQsCiYjNDM7ICAgIHByZWx1ZGU6OiosCiYjNDM7ICAgIHRyYW5zbXV0ZTo6QXNCeXRlcywKJiM0MzsgICAgdHlwZXM6Ok9wYXF1ZSwKJiM0MzsgICAgVGhpc01vZHVsZSwKJiM0Mzt9OwomIzQzOwomIzQzO3VzZSBjb3JlOjp7CiYjNDM7ICAgIG1lbTo6TWFudWFsbHlEcm9wLAomIzQzOyAgICBwdHI6Ok5vbk51bGwsIC8vCiYjNDM7fTsKJiM0MzsKJiM0MzsvLy8gVGhlIGRlZmF1bHQgbmV0bGluayBtZXNzYWdlIHNpemUuCiYjNDM7cHViIGNvbnN0IEdFTkxNU0dfREVGQVVMVF9TSVpFOiB1c2l6ZSA9IGJpbmRpbmdzOjpHRU5MTVNHX0RFRkFVTFRfU0laRTsKJiM0MzsKJiM0MzsvLy8gQSB3cmFwcGVyIGFyb3VuZCBgc3RydWN0IHNrX2J1ZmZgIGZvciBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZXMuCiYjNDM7Ly8vCiYjNDM7Ly8vIFRoaXMgdHlwZSBpcyBpbnRlbmRlZCB0byBiZSBzcGVjaWZpYyBmb3IgYnVmZmVycyB1c2VkIHdpdGggbmV0bGluayBvbmx5LCBhbmQgb3RoZXIgdXNlY2FzZXMgZm9yCiYjNDM7Ly8vIGBzdHJ1Y3Qgc2tfYnVmZmAgYXJlIG91dC1vZi1zY29wZSBmb3IgdGhpcyBhYnN0cmFjdGlvbi4KJiM0MzsvLy8KJiM0MzsvLy8gIyBJbnZhcmlhbnRzCiYjNDM7Ly8vCiYjNDM7Ly8vIFRoZSBwb2ludGVyIGhhcyBvd25lcnNoaXAgb3ZlciBhIHZhbGlkIGBza19idWZmYC4KJiM0MztwdWIgc3RydWN0IE5ldGxpbmtTa0J1ZmYgewomIzQzOyAgICBza2I6IE5vbk51bGwmbHQ7a2VybmVsOjpiaW5kaW5nczo6c2tfYnVmZiZndDssCiYjNDM7fQomIzQzOwomIzQzO2ltcGwgTmV0bGlua1NrQnVmZiB7CiYjNDM7ICAgIC8vLyBDcmVhdGVzIGEgbmV3IGBOZXRsaW5rU2tCdWZmYCB3aXRoIHRoZSBnaXZlbiBzaXplLgomIzQzOyAgICBwdWIgZm4gbmV3KHNpemU6IHVzaXplLCBmbGFnczogYWxsb2M6OkZsYWdzKSAtJmd0OyBSZXN1bHQmbHQ7TmV0bGlua1NrQnVmZiwgQWxsb2NFcnJvciZndDsgewomIzQzOyAgICAgICAgLy8gU0FGRVRZOiBgZ2VubG1zZ19uZXdgIG9ubHkgcmVxdWlyZXMgaXRzIGFyZ3VtZW50cyB0byBiZSB2YWxpZCBpbnRlZ2Vycy4KJiM0MzsgICAgICAgIGxldCBza2IgPSB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19uZXcoc2l6ZSwgZmxhZ3MuYXNfcmF3KCkpIH07CiYjNDM7ICAgICAgICBsZXQgc2tiID0gTm9uTnVsbDo6bmV3KHNrYikub2tfb3IoQWxsb2NFcnJvcik/OwomIzQzOyAgICAgICAgT2soTmV0bGlua1NrQnVmZiB7IHNrYiB9KQomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIC8vLyBQdXRzIGEgZ2VuZXJpYyBuZXRsaW5rIGhlYWRlciBpbnRvIHRoZSBgTmV0bGlua1NrQnVmZmAuCiYjNDM7ICAgIHB1YiBmbiBnZW5sbXNnX3B1dCgKJiM0MzsgICAgICAgIHNlbGYsCiYjNDM7ICAgICAgICBwb3J0aWQ6IHUzMiwKJiM0MzsgICAgICAgIHNlcTogdTMyLAomIzQzOyAgICAgICAgZmFtaWx5OiAmYW1wOyYjMzk7c3RhdGljIEZhbWlseSwKJiM0MzsgICAgICAgIGNtZDogdTgsCiYjNDM7ICAgICkgLSZndDsgUmVzdWx0Jmx0O0dlbmxNc2csIEFsbG9jRXJyb3ImZ3Q7IHsKJiM0MzsgICAgICAgIGxldCBza2IgPSBzZWxmLnNrYi5hc19wdHIoKTsKJiM0MzsgICAgICAgIC8vIFNBRkVUWTogVGhlIHNrYiBhbmQgZmFtaWx5IHBvaW50ZXJzIGFyZSB2YWxpZC4KJiM0MzsgICAgICAgIGxldCBoZHIgPSB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgZmFtaWx5LmFzX3JhdygpLCAwLCBjbWQpIH07CiYjNDM7ICAgICAgICBsZXQgaGRyID0gTm9uTnVsbDo6bmV3KGhkcikub2tfb3IoQWxsb2NFcnJvcik/OwomIzQzOyAgICAgICAgT2soR2VubE1zZyB7IHNrYjogc2VsZiwgaGRyIH0pCiYjNDM7ICAgIH0KJiM0Mzt9CiYjNDM7CiYjNDM7aW1wbCBEcm9wIGZvciBOZXRsaW5rU2tCdWZmIHsKJiM0MzsgICAgZm4gZHJvcCgmYW1wO211dCBzZWxmKSB7CiYjNDM7ICAgICAgICAvLyBTQUZFVFk6IFdlIGhhdmUgb3duZXJzaGlwIG92ZXIgdGhlIGBza19idWZmYCwgc28gd2UgbWF5IGZyZWUgaXQuCiYjNDM7ICAgICAgICB1bnNhZmUgeyBiaW5kaW5nczo6bmxtc2dfZnJlZShzZWxmLnNrYi5hc19wdHIoKSkgfQomIzQzOyAgICB9CiYjNDM7fQomIzQzOwomIzQzOy8vLyBBIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlIGJlaW5nIGNvbnN0cnVjdGVkLgomIzQzOy8vLwomIzQzOy8vLyAjIEludmFyaWFudHMKJiM0MzsvLy8KJiM0MzsvLy8gYGhkcmAgcmVmZXJlbmNlcyB0aGUgaGVhZGVyIGluIHRoaXMgbmV0bGluayBtZXNzYWdlLgomIzQzO3B1YiBzdHJ1Y3QgR2VubE1zZyB7CiYjNDM7ICAgIHNrYjogTmV0bGlua1NrQnVmZiwKJiM0MzsgICAgaGRyOiBOb25OdWxsJmx0O2Nfdm9pZCZndDssCiYjNDM7fQomIzQzOwomIzQzO2ltcGwgR2VubE1zZyB7CiYjNDM7ICAgIC8vLyBQdXRzIGFuIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLgomIzQzOyAgICAjW2lubGluZV0KJiM0MzsgICAgZm4gcHV0Jmx0O1QmZ3Q7KCZhbXA7bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6ICZhbXA7VCkgLSZndDsgUmVzdWx0CiYjNDM7ICAgIHdoZXJlCiYjNDM7ICAgICAgICBUOiA/U2l6ZWQgJiM0MzsgQXNCeXRlcywKJiM0MzsgICAgewomIzQzOyAgICAgICAgbGV0IHNrYiA9IHNlbGYuc2tiLnNrYi5hc19wdHIoKTsKJiM0MzsgICAgICAgIGxldCBsZW4gPSBzaXplX29mX3ZhbCh2YWx1ZSk7CiYjNDM7ICAgICAgICBsZXQgcHRyID0gY29yZTo6cHRyOjpmcm9tX3JlZih2YWx1ZSkuY2FzdDo6Jmx0O2Nfdm9pZCZndDsoKTsKJiM0MzsgICAgICAgIC8vIFNBRkVUWTogYHNrYmAgaXMgdmFsaWQgYnkgYE5ldGxpbmtTa0J1ZmZgIHR5cGUgaW52YXJpYW50cywgYW5kIHRoZSBwcm92aWRlZCB2YWx1ZSBpcwomIzQzOyAgICAgICAgLy8gcmVhZGFibGUgYW5kIGluaXRpYWxpemVkIGZvciBpdHMgYHNpemVfb2ZgIGJ5dGVzLgomIzQzOyAgICAgICAgdG9fcmVzdWx0KHVuc2FmZSB7IGJpbmRpbmdzOjpubGFfcHV0KHNrYiwgYXR0cnR5cGUsIGxlbiBhcyBjX2ludCwgcHRyKSB9KQomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIC8vLyBQdXRzIGEgYHUzMmAgYXR0cmlidXRlIGludG8gdGhlIG1lc3NhZ2UuCiYjNDM7ICAgICNbaW5saW5lXQomIzQzOyAgICBwdWIgZm4gcHV0X3UzMigmYW1wO211dCBzZWxmLCBhdHRydHlwZTogY19pbnQsIHZhbHVlOiB1MzIpIC0mZ3Q7IFJlc3VsdCB7CiYjNDM7ICAgICAgICBzZWxmLnB1dChhdHRydHlwZSwgJmFtcDt2YWx1ZSkKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLy8gUHV0cyBhIHN0cmluZyBhdHRyaWJ1dGUgaW50byB0aGUgbWVzc2FnZS4KJiM0MzsgICAgI1tpbmxpbmVdCiYjNDM7ICAgIHB1YiBmbiBwdXRfc3RyaW5nKCZhbXA7bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6ICZhbXA7Q1N0cikgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIHNlbGYucHV0KGF0dHJ0eXBlLCB2YWx1ZS50b19ieXRlc193aXRoX251bCgpKQomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIC8vLyBQdXRzIGEgZmxhZyBhdHRyaWJ1dGUgaW50byB0aGUgbWVzc2FnZS4KJiM0MzsgICAgI1tpbmxpbmVdCiYjNDM7ICAgIHB1YiBmbiBwdXRfZmxhZygmYW1wO211dCBzZWxmLCBhdHRydHlwZTogY19pbnQpIC0mZ3Q7IFJlc3VsdCB7CiYjNDM7ICAgICAgICBsZXQgc2tiID0gc2VsZi5za2Iuc2tiLmFzX3B0cigpOwomIzQzOyAgICAgICAgLy8gU0FGRVRZOiBgc2tiYCBpcyB2YWxpZCBieSBgTmV0bGlua1NrQnVmZmAgdHlwZSBpbnZhcmlhbnRzLCBhbmQgYSBudWxsIHBvaW50ZXIgaXMgdmFsaWQKJiM0MzsgICAgICAgIC8vIHdoZW4gdGhlIGxlbmd0aCBpcyB6ZXJvLgomIzQzOyAgICAgICAgdG9fcmVzdWx0KHVuc2FmZSB7IGJpbmRpbmdzOjpubGFfcHV0KHNrYiwgYXR0cnR5cGUsIDAsIGNvcmU6OnB0cjo6bnVsbCgpKSB9KQomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIC8vLyBTZW5kcyB0aGUgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgYXMgYSBtdWx0aWNhc3QgbWVzc2FnZS4KJiM0MzsgICAgI1tpbmxpbmVdCiYjNDM7ICAgIHB1YiBmbiBtdWx0aWNhc3QoCiYjNDM7ICAgICAgICBzZWxmLAomIzQzOyAgICAgICAgZmFtaWx5OiAmYW1wOyYjMzk7c3RhdGljIEZhbWlseSwKJiM0MzsgICAgICAgIHBvcnRpZDogdTMyLAomIzQzOyAgICAgICAgZ3JvdXA6IHUzMiwKJiM0MzsgICAgICAgIGZsYWdzOiBhbGxvYzo6RmxhZ3MsCiYjNDM7ICAgICkgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIGxldCBtZSA9IE1hbnVhbGx5RHJvcDo6bmV3KHNlbGYpOwomIzQzOyAgICAgICAgLy8gU0FGRVRZOiBUaGUgYHNrYmAgYW5kIGBmYW1pbHlgIHBvaW50ZXJzIGFyZSB2YWxpZC4gV2UgcGFzcyBvd25lcnNoaXAgb2YgdGhlIGBza2JgIHRvCiYjNDM7ICAgICAgICAvLyBgZ2VubG1zZ19tdWx0aWNhc3RgIGJ5IG5vdCBkcm9wcGluZyBgc2VsZmAuCiYjNDM7ICAgICAgICB1bnNhZmUgewomIzQzOyAgICAgICAgICAgIGJpbmRpbmdzOjpnZW5sbXNnX2VuZChtZS5za2Iuc2tiLmFzX3B0cigpLCBtZS5oZHIuYXNfcHRyKCkpOwomIzQzOyAgICAgICAgICAgIHRvX3Jlc3VsdChiaW5kaW5nczo6Z2VubG1zZ19tdWx0aWNhc3QoCiYjNDM7ICAgICAgICAgICAgICAgIGZhbWlseS5hc19yYXcoKSwKJiM0MzsgICAgICAgICAgICAgICAgbWUuc2tiLnNrYi5hc19wdHIoKSwKJiM0MzsgICAgICAgICAgICAgICAgcG9ydGlkLAomIzQzOyAgICAgICAgICAgICAgICBncm91cCwKJiM0MzsgICAgICAgICAgICAgICAgZmxhZ3MuYXNfcmF3KCksCiYjNDM7ICAgICAgICAgICAgKSkKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgfQomIzQzO30KJiM0MztpbXBsIERyb3AgZm9yIEdlbmxNc2cgewomIzQzOyAgICBmbiBkcm9wKCZhbXA7bXV0IHNlbGYpIHsKJiM0MzsgICAgICAgIC8vIFNBRkVUWTogVGhlIGBoZHJgIHBvaW50ZXIgcmVmZXJlbmNlcyB0aGUgaGVhZGVyIG9mIHRoaXMgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UuCiYjNDM7ICAgICAgICB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19jYW5jZWwoc2VsZi5za2Iuc2tiLmFzX3B0cigpLCBzZWxmLmhkci5hc19wdHIoKSkgfTsKJiM0MzsgICAgfQomIzQzO30KJiM0MzsKJiM0MzsvLy8gRmxhZ3MgZm9yIGEgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseS4KJiM0MztzdHJ1Y3QgRmFtaWx5RmxhZ3MgewomIzQzOyAgICAvLy8gV2hldGhlciB0aGUgZmFtaWx5IHN1cHBvcnRzIG5ldHdvcmsgbmFtZXNwYWNlcy4KJiM0MzsgICAgbmV0bnNvazogYm9vbCwKJiM0MzsgICAgLy8vIFdoZXRoZXIgdGhlIGZhbWlseSBzdXBwb3J0cyBwYXJhbGxlbCBvcGVyYXRpb25zLgomIzQzOyAgICBwYXJhbGxlbF9vcHM6IGJvb2wsCiYjNDM7fQomIzQzOwomIzQzO2ltcGwgRmFtaWx5RmxhZ3MgewomIzQzOyAgICAvLy8gQ29udmVydHMgdGhlIGZsYWdzIHRvIHRoZSBiaXRmaWVsZCByZXByZXNlbnRhdGlvbiB1c2VkIGJ5IGBnZW5sX2ZhbWlseWAuCiYjNDM7ICAgIGNvbnN0IGZuIGludG9fYml0ZmllbGQoc2VsZikgLSZndDsgYmluZGluZ3M6Ol9fQmluZGdlbkJpdGZpZWxkVW5pdCZsdDtbdTg7IDFdJmd0OyB7CiYjNDM7ICAgICAgICAvLyBUaGUgYmVsb3cgc2hpZnRzIGFyZSB2ZXJpZmllZCBjb3JyZWN0IGJ5IHRlc3RfZmFtaWx5X2ZsYWdzX2JpdGZpZWxkKCkgYmVsb3cuCiYjNDM7ICAgICAgICAvLwomIzQzOyAgICAgICAgLy8gQWx0aG91Z2ggYmluZGdlbiBnZW5lcmF0ZXMgaGVscGVycyB0byBjaGFuZ2UgYml0ZmllbGRzIGJhc2VkIG9uIHRoZSBDIGhlYWRlcnMsIHRoZXNlCiYjNDM7ICAgICAgICAvLyBoZWxwZXJzIHVuZm9ydHVuYXRlbHkgY2FuJiMzOTt0IGJlIHVzZWQgaW4gY29uc3QgY29udGV4dC4gU2luY2UgYEZhbWlseWAgbmVlZHMgdG8gYmUgZmlsbGVkCiYjNDM7ICAgICAgICAvLyBvdXQgYXQgYnVpbGQtdGltZSwgd2UgdXNlIHRoaXMgaGVscGVyIGluc3RlYWQuCiYjNDM7ICAgICAgICBsZXQgbXV0IGJpdHMgPSAwOwomIzQzOyAgICAgICAgaWYgc2VsZi5uZXRuc29rIHsKJiM0MzsgICAgICAgICAgICBiaXRzIHw9IDEgJmx0OyZsdDsgMDsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIGlmIHNlbGYucGFyYWxsZWxfb3BzIHsKJiM0MzsgICAgICAgICAgICBiaXRzIHw9IDEgJmx0OyZsdDsgMTsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIC8vIENvbnZlcnQgZnJvbSBsaXR0bGUgZW5kaWFuIHRvIHRoZSB0YXJnZXQmIzM5O3MgZW5kaWFubmVzcy4KJiM0MzsgICAgICAgIGJpdHMgPSB1ODo6ZnJvbV9sZShiaXRzKTsKJiM0MzsgICAgICAgIC8vIFNBRkVUWTogVGhpcyBiaXRmaWVsZCBpcyByZXByZXNlbnRlZCBhcyBhbiB1OC4KJiM0MzsgICAgICAgIHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlOjombHQ7dTgsIGJpbmRpbmdzOjpfX0JpbmRnZW5CaXRmaWVsZFVuaXQmbHQ7W3U4OyAxXSZndDsmZ3Q7KGJpdHMpIH0KJiM0MzsgICAgfQomIzQzO30KJiM0MzsKJiM0MzsvLy8gQSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LgomIzQzOyNbcmVwcih0cmFuc3BhcmVudCldCiYjNDM7cHViIHN0cnVjdCBGYW1pbHkgewomIzQzOyAgICBpbm5lcjogT3BhcXVlJmx0O2JpbmRpbmdzOjpnZW5sX2ZhbWlseSZndDssCiYjNDM7fQomIzQzOwomIzQzOy8vIFNBRkVUWTogVGhlIGBGYW1pbHlgIHR5cGUgaXMgdGhyZWFkIHNhZmUuCiYjNDM7dW5zYWZlIGltcGwgU3luYyBmb3IgRmFtaWx5IHt9CiYjNDM7CiYjNDM7aW1wbCBGYW1pbHkgewomIzQzOyAgICAvLy8gQ3JlYXRlcyBhIG5ldyBgRmFtaWx5YCBpbnN0YW5jZS4KJiM0MzsgICAgLy8vCiYjNDM7ICAgIC8vLyBJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20gY29uc3QgY29udGV4dCBvbmx5LiBXaWxsIHBhbmljIGlmIHByb3ZpZGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHMuCiYjNDM7ICAgIC8vLwomIzQzOyAgICAvLy8gVGhlIG5hbWUgbXVzdCBiZSBhIG51bC10ZXJtaW5hdGVkIHN0cmluZywgYnV0IGl0IGlzIHRha2VuIGFzIGAmYW1wO1t1OF1gIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQKJiM0MzsgICAgLy8vIG1vcmUgY29udmVuaWVudGx5IHdpdGggdGhlIHN0cmluZ3MgZ2VuZXJhdGVkIGJ5IGJpbmRnZW4uCiYjNDM7ICAgIHB1YiBjb25zdCBmbiBjb25zdF9uZXcoCiYjNDM7ICAgICAgICBtb2R1bGU6ICZhbXA7VGhpc01vZHVsZSwKJiM0MzsgICAgICAgIG5hbWU6ICZhbXA7W3U4XSwKJiM0MzsgICAgICAgIHZlcnNpb246IHUzMiwKJiM0MzsgICAgICAgIG1jZ3JwczogJmFtcDsmIzM5O3N0YXRpYyBbTXVsdGljYXN0R3JvdXBdLAomIzQzOyAgICApIC0mZ3Q7IEZhbWlseSB7CiYjNDM7ICAgICAgICBsZXQgbl9tY2dycHMgPSBtY2dycHMubGVuKCkgYXMgdTg7CiYjNDM7ICAgICAgICBpZiBuX21jZ3JwcyBhcyB1c2l6ZSAhPSBtY2dycHMubGVuKCkgewomIzQzOyAgICAgICAgICAgIHBhbmljISgmIzM0O3RvbyBtYW55IG1jZ3JwcyYjMzQ7KTsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIGxldCBtdXQgZ2VubF9mYW1pbHkgPSBiaW5kaW5nczo6Z2VubF9mYW1pbHkgewomIzQzOyAgICAgICAgICAgIHZlcnNpb24sCiYjNDM7ICAgICAgICAgICAgX2JpdGZpZWxkXzE6IEZhbWlseUZsYWdzIHsKJiM0MzsgICAgICAgICAgICAgICAgbmV0bnNvazogdHJ1ZSwKJiM0MzsgICAgICAgICAgICAgICAgcGFyYWxsZWxfb3BzOiB0cnVlLAomIzQzOyAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICAuaW50b19iaXRmaWVsZCgpLAomIzQzOyAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlLmFzX3B0cigpLAomIzQzOyAgICAgICAgICAgIG1jZ3JwczogbWNncnBzLmFzX3B0cigpLmNhc3QoKSwKJiM0MzsgICAgICAgICAgICBuX21jZ3JwcywKJiM0MzsgICAgICAgICAgICAuLnBpbl9pbml0Ojp6ZXJvZWQoKQomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgICAgIGlmIENTdHI6OmZyb21fYnl0ZXNfd2l0aF9udWwobmFtZSkuaXNfZXJyKCkgewomIzQzOyAgICAgICAgICAgIHBhbmljISgmIzM0O2dlbmxfZmFtaWx5IG5hbWUgbm90IG51bC10ZXJtaW5hdGVkJiMzNDspOwomIzQzOyAgICAgICAgfQomIzQzOyAgICAgICAgaWYgZ2VubF9mYW1pbHkubmFtZS5sZW4oKSAmbHQ7IG5hbWUubGVuKCkgewomIzQzOyAgICAgICAgICAgIHBhbmljISgmIzM0O2dlbmxfZmFtaWx5IG5hbWUgdG9vIGxvbmcmIzM0Oyk7CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgICAgICBsZXQgbXV0IGkgPSAwOwomIzQzOyAgICAgICAgd2hpbGUgaSAmbHQ7IG5hbWUubGVuKCkgewomIzQzOyAgICAgICAgICAgIGdlbmxfZmFtaWx5Lm5hbWVbaV0gPSBuYW1lW2ldOwomIzQzOyAgICAgICAgICAgIGkgJiM0Mzs9IDE7CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgICAgICBGYW1pbHkgewomIzQzOyAgICAgICAgICAgIGlubmVyOiBPcGFxdWU6Om5ldyhnZW5sX2ZhbWlseSksCiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIENoZWNrcyBpZiB0aGVyZSBhcmUgYW55IGxpc3RlbmVycyBmb3IgdGhlIGdpdmVuIG11bHRpY2FzdCBncm91cC4KJiM0MzsgICAgcHViIGZuIGhhc19saXN0ZW5lcnMoJmFtcDtzZWxmLCBncm91cDogdTMyKSAtJmd0OyBib29sIHsKJiM0MzsgICAgICAgIC8vIFNBRkVUWTogVGhlIGZhbWlseSBhbmQgaW5pdF9uZXQgcG9pbnRlcnMgYXJlIHZhbGlkLgomIzQzOyAgICAgICAgdW5zYWZlIHsKJiM0MzsgICAgICAgICAgICBiaW5kaW5nczo6Z2VubF9oYXNfbGlzdGVuZXJzKHNlbGYuYXNfcmF3KCksICZhbXA7cmF3IG11dCBiaW5kaW5nczo6aW5pdF9uZXQsIGdyb3VwKSAhPSAwCiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIFJldHVybnMgYSByYXcgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBgZ2VubF9mYW1pbHlgIHN0cnVjdHVyZS4KJiM0MzsgICAgcHViIGZuIGFzX3JhdygmYW1wO3NlbGYpIC0mZ3Q7ICptdXQgYmluZGluZ3M6OmdlbmxfZmFtaWx5IHsKJiM0MzsgICAgICAgIHNlbGYuaW5uZXIuZ2V0KCkKJiM0MzsgICAgfQomIzQzO30KJiM0MzsKJiM0MzsvLy8gQSBnZW5lcmljIG5ldGxpbmsgbXVsdGljYXN0IGdyb3VwLgomIzQzOyNbcmVwcih0cmFuc3BhcmVudCldCiYjNDM7cHViIHN0cnVjdCBNdWx0aWNhc3RHcm91cCB7CiYjNDM7ICAgIC8vIE5vIE9wYXF1ZSBiZWNhdXNlIGZ1bGx5IGltbXV0YWJsZQomIzQzOyAgICBncm91cDogYmluZGluZ3M6OmdlbmxfbXVsdGljYXN0X2dyb3VwLAomIzQzO30KJiM0MzsKJiM0MzsvLyBTQUZFVFk6IFB1cmUgZGF0YSBzbyB0aHJlYWQgc2FmZS4KJiM0Mzt1bnNhZmUgaW1wbCBTeW5jIGZvciBNdWx0aWNhc3RHcm91cCB7fQomIzQzOwomIzQzO2ltcGwgTXVsdGljYXN0R3JvdXAgewomIzQzOyAgICAvLy8gQ3JlYXRlcyBhIG5ldyBgTXVsdGljYXN0R3JvdXBgIGluc3RhbmNlLgomIzQzOyAgICAvLy8KJiM0MzsgICAgLy8vIEludGVuZGVkIHRvIGJlIHVzZWQgZnJvbSBjb25zdCBjb250ZXh0IG9ubHkuIFdpbGwgcGFuaWMgaWYgcHJvdmlkZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50cy4KJiM0MzsgICAgcHViIGNvbnN0IGZuIGNvbnN0X25ldyhuYW1lOiAmYW1wO0NTdHIpIC0mZ3Q7IE11bHRpY2FzdEdyb3VwIHsKJiM0MzsgICAgICAgIGxldCBtdXQgZ3JvdXA6IGJpbmRpbmdzOjpnZW5sX211bHRpY2FzdF9ncm91cCA9IHBpbl9pbml0Ojp6ZXJvZWQoKTsKJiM0MzsKJiM0MzsgICAgICAgIGxldCBuYW1lID0gbmFtZS50b19ieXRlc193aXRoX251bCgpOwomIzQzOyAgICAgICAgaWYgZ3JvdXAubmFtZS5sZW4oKSAmbHQ7IG5hbWUubGVuKCkgewomIzQzOyAgICAgICAgICAgIHBhbmljISgmIzM0O2dlbmxfbXVsdGljYXN0X2dyb3VwIG5hbWUgdG9vIGxvbmcmIzM0Oyk7CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgICAgICBsZXQgbXV0IGkgPSAwOwomIzQzOyAgICAgICAgd2hpbGUgaSAmbHQ7IG5hbWUubGVuKCkgewomIzQzOyAgICAgICAgICAgIGdyb3VwLm5hbWVbaV0gPSBuYW1lW2ldOwomIzQzOyAgICAgICAgICAgIGkgJiM0Mzs9IDE7CiYjNDM7ICAgICAgICB9CiYjNDM7CiYjNDM7ICAgICAgICBNdWx0aWNhc3RHcm91cCB7IGdyb3VwIH0KJiM0MzsgICAgfQomIzQzO30KJiM0MzsKJiM0MzsvLy8gQSByZWdpc3RyYXRpb24gb2YgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LgomIzQzOy8vLwomIzQzOy8vLyBUaGlzIHR5cGUgcmVwcmVzZW50cyB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgW2BGYW1pbHlgXS4gV2hlbiBhbiBpbnN0YW5jZSBvZiB0aGlzIHR5cGUgaXMKJiM0MzsvLy8gZHJvcHBlZCwgaXRzIHJlc3BlY3RpdmUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSB3aWxsIGJlIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBzeXN0ZW0uCiYjNDM7Ly8vCiYjNDM7Ly8vICMgSW52YXJpYW50cwomIzQzOy8vLwomIzQzOy8vLyBgc2VsZi5mYW1pbHlgIGFsd2F5cyBob2xkcyBhIHZhbGlkIHJlZmVyZW5jZSB0byBhbiBpbml0aWFsaXplZCBhbmQgcmVnaXN0ZXJlZCBbYEZhbWlseWBdLgomIzQzO3B1YiBzdHJ1Y3QgUmVnaXN0cmF0aW9uIHsKJiM0MzsgICAgZmFtaWx5OiAmYW1wOyYjMzk7c3RhdGljIEZhbWlseSwKJiM0Mzt9CiYjNDM7CiYjNDM7aW1wbCBGYW1pbHkgewomIzQzOyAgICAvLy8gUmVnaXN0ZXJzIHRoZSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IHdpdGggdGhlIGtlcm5lbC4KJiM0MzsgICAgcHViIGZuIHJlZ2lzdGVyKCZhbXA7JiMzOTtzdGF0aWMgc2VsZikgLSZndDsgUmVzdWx0Jmx0O1JlZ2lzdHJhdGlvbiZndDsgewomIzQzOyAgICAgICAgLy8gU0FGRVRZOiBgc2VsZi5hc19yYXcoKWAgaXMgYSB2YWxpZCBwb2ludGVyIHRvIGEgYGdlbmxfZmFtaWx5YCBzdHJ1Y3QuCiYjNDM7ICAgICAgICAvLyBUaGUgYGdlbmxfZmFtaWx5YCBzdHJ1Y3QgaXMgc3RhdGljLCBzbyBpdCB3aWxsIG91dGxpdmUgdGhlIHJlZ2lzdHJhdGlvbi4KJiM0MzsgICAgICAgIHRvX3Jlc3VsdCh1bnNhZmUgeyBiaW5kaW5nczo6Z2VubF9yZWdpc3Rlcl9mYW1pbHkoc2VsZi5hc19yYXcoKSkgfSk/OwomIzQzOyAgICAgICAgT2soUmVnaXN0cmF0aW9uIHsgZmFtaWx5OiBzZWxmIH0pCiYjNDM7ICAgIH0KJiM0Mzt9CiYjNDM7CiYjNDM7aW1wbCBEcm9wIGZvciBSZWdpc3RyYXRpb24gewomIzQzOyAgICBmbiBkcm9wKCZhbXA7bXV0IHNlbGYpIHsKJiM0MzsgICAgICAgIC8vIFNBRkVUWTogYHNlbGYuZmFtaWx5LmFzX3JhdygpYCBpcyBhIHZhbGlkIHBvaW50ZXIgdG8gYSByZWdpc3RlcmVkIGBnZW5sX2ZhbWlseWAgc3RydWN0LgomIzQzOyAgICAgICAgLy8gVGhlIGBSZWdpc3RyYXRpb25gIHN0cnVjdCBlbnN1cmVzIHRoYXQgYGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHlgIGlzIGNhbGxlZCBleGFjdGx5IG9uY2UKJiM0MzsgICAgICAgIC8vIGZvciB0aGlzIGZhbWlseSB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLgomIzQzOyAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6OmdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoc2VsZi5mYW1pbHkuYXNfcmF3KCkpIH07CiYjNDM7ICAgIH0KJiM0Mzt9CiYjNDM7CiYjNDM7I1ttYWNyb3M6Omt1bml0X3Rlc3RzKHJ1c3RfbmV0bGluayldCiYjNDM7bW9kIHRlc3RzIHsKJiM0MzsgICAgdXNlIHN1cGVyOjoqOwomIzQzOwomIzQzOyAgICAjW3Rlc3RdCiYjNDM7ICAgIGZuIHRlc3RfZmFtaWx5X2ZsYWdzX2JpdGZpZWxkKCkgewomIzQzOyAgICAgICAgZm9yIG5ldG5zb2sgaW4gW2ZhbHNlLCB0cnVlXSB7CiYjNDM7ICAgICAgICAgICAgZm9yIHBhcmFsbGVsX29wcyBpbiBbZmFsc2UsIHRydWVdIHsKJiM0MzsgICAgICAgICAgICAgICAgbGV0IG11dCBiX2ZhbSA9IGJpbmRpbmdzOjpnZW5sX2ZhbWlseSB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAuLkRlZmF1bHQ6OmRlZmF1bHQoKQomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgICAgICBiX2ZhbS5zZXRfbmV0bnNvayhpZiBuZXRuc29rIHsgMSB9IGVsc2UgeyAwIH0pOwomIzQzOyAgICAgICAgICAgICAgICBiX2ZhbS5zZXRfcGFyYWxsZWxfb3BzKGlmIHBhcmFsbGVsX29wcyB7IDEgfSBlbHNlIHsgMCB9KTsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgbGV0IGNfYml0ZmllbGQgPSBGYW1pbHlGbGFncyB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICBuZXRuc29rLAomIzQzOyAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWxfb3BzLAomIzQzOyAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgICAgIC5pbnRvX2JpdGZpZWxkKCk7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgIC8vIFNBRkVUWTogVGhlIGJpdCBmaWVsZCBpcyBzdG9yZWQgYXMgdTguCiYjNDM7ICAgICAgICAgICAgICAgIGxldCBiX3ZhbDogdTggPSB1bnNhZmUgeyBjb3JlOjptZW06OnRyYW5zbXV0ZShiX2ZhbS5fYml0ZmllbGRfMSkgfTsKJiM0MzsgICAgICAgICAgICAgICAgLy8gU0FGRVRZOiBUaGUgYml0IGZpZWxkIGlzIHN0b3JlZCBhcyB1OC4KJiM0MzsgICAgICAgICAgICAgICAgbGV0IGNfdmFsOiB1OCA9IHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlKGNfYml0ZmllbGQpIH07CiYjNDM7ICAgICAgICAgICAgICAgIGFzc2VydF9lcSEoYl92YWwsIGNfdmFsKTsKJiM0MzsgICAgICAgICAgICB9CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0KJiM0Mzt9CmRpZmYgLS1naXQgYS9ydXN0L3VhcGkvdWFwaV9oZWxwZXIuaCBiL3J1c3QvdWFwaS91YXBpX2hlbHBlci5oCmluZGV4IDA2ZDdkMWEyZThkYWJhLi44NmM3YjZiMjg0YjA1YSAxMDA2NDQKLS0tIGEvcnVzdC91YXBpL3VhcGlfaGVscGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC91YXBpL3VhcGlfaGVscGVyLmgKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7dWFwaS9kcm0vbm92YV9kcm0uaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2RybS9wYW50aG9yX2RybS5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvYW5kcm9pZC9iaW5kZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9hbmRyb2lkL2JpbmRlcl9uZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9taWkuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L2V0aHRvb2wuaCZndDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCaW5kZXIgTmV0bGluayBSZXBvcnRpbmcgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGludHJvZHVjZXMgbmV0bGluayByZXBvcnRpbmcgZm9yIEFuZHJvaWQgQmluZGVyLCBzcGVjaWZpY2FsbHkgdXNpbmcgUnVzdC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgbG9va3Mgc29saWQ7IGl0IHNlZW1zIHRvIGJlIGEgZnVuY3Rpb25hbCBhZGRpdGlvbiwgYWRkaW5nIG11bHRpY2FzdCByZXBvcnRpbmcgZm9yIHRyYW5zYWN0aW9uIGZhaWx1cmVzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgdGllZCB0byB0aGUgUnVzdCBiaW5kZXIgaW1wbGVtZW50YXRpb24sIHNvIHRoYXQmIzM5O3MgdGhlIGFuZ2xlLgoKVGhlIG9idmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYEFORFJPSURfQklOREVSX0lQQ19SVVNUYCwgd2hpY2ggaGluZ2VzIG9uIGBSVVNUICZhbXA7JmFtcDsgTU1VICZhbXA7JmFtcDsgTkVUICZhbXA7JmFtcDsgIUFORFJPSURfQklOREVSX0lQQ2AuIFNvLCB0byBnZXQgdGhpcyB3b3JraW5nLCB0aGF0JiMzOTtzIHdoYXQgd2UgbmVlZCBlbmFibGVkLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEZyb20gdGhlIHBhdGNoLCBJIHNlZSBzZXZlcmFsIGtleSBhZGRpdGlvbnMuIFRoZXJlJiMzOTtzIGBSZXBvcnQ6Om5ld2AsIGBSZXBvcnQ6Om11bHRpY2FzdGAsIGBSZXBvcnQ6OmVycm9yYCwgZXRjLiwgb3ZlciBpbiBgZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzYC4gSW4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnNgLCB3ZSYjMzk7dmUgZ290IGBUcmFuc2FjdGlvbkluZm86OnJlcG9ydF9uZXRsaW5rYCBhbmQgYFRyYW5zYWN0aW9uSW5mbzo6cmVwb3J0X25ldGxpbmtfaW5uZXJgLiBBbmQsIGZpbmFsbHksIGluIGBydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yc2AsIHdlIGhhdmUgYE5ldGxpbmtTa0J1ZmY6Om5ld2AsIGBOZXRsaW5rU2tCdWZmOjpnZW5sbXNnX3B1dGAsIGFuZCBgR2VubE1zZzo6cHV0X3UzMmAsIGFtb25nIG90aGVycy4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBzeW1ib2wgbmFtZXMgZm9yIHN5emthbGxlci4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gSSBuZWVkIHRvIHVzZSBgY29kZXNlYXJjaC1kaXItaW5kZXhgIG9yIGBncmVwcGVyYCB0byBmaW5kIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lcyBpbiB0aGUgY29tcGlsZWQgUnVzdCBjb2RlLiBJJiMzOTttIHdvbmRlcmluZyBpZiBzeXprYWxsZXIgdXNlcyB0aGUgbWFuZ2xlZCBvciBkZW1hbmdsZWQgbmFtZXMuIFVzdWFsbHksIHRoZSBkZW1hbmdsZWQgbmFtZXMgb3IgdGhlIEMgZnVuY3Rpb25zIHdvdWxkIHdvcmsuIEhvd2V2ZXIsIGJlY2F1c2UgdGhpcyBpcyBSdXN0LCB0aGUgc3ltYm9scyBtaWdodCBiZSBtYW5nbGVkLiBJdCBsb29rcyBsaWtlIHN5emthbGxlciBjYW4gbWF0Y2ggZGVtYW5nbGVkIG5hbWVzIG9yIHdlIGNhbiBwcm92aWRlIHRoZSBzb3VyY2UgZmlsZSBuYW1lcyBvciBSdXN0IGZ1bmN0aW9uIG5hbWVzIGxpa2UgYHJlcG9ydF9uZXRsaW5rX2lubmVyYCwgYHJlcG9ydF9uZXRsaW5rYCwgYG11bHRpY2FzdGAsIGBnZW5sbXNnX3B1dGAuCgpMZXQmIzM5O3MgY2hlY2sgdGhlIGV4YWN0IHN5bWJvbCBuYW1lcyBpbiBSdXN0LiBBY3R1YWxseSwgYEZvY3VzU3ltYm9sc2AgY2FuIGJlIGp1c3QgdGhlIGZ1bmN0aW9uIG5hbWVzIGxpa2UgYHJlcG9ydF9uZXRsaW5rX2lubmVyYCwgYHJlcG9ydF9uZXRsaW5rYCwgYHRyYW5zYWN0aW9uYCwgYHJlcGx5X2lubmVyYC4KV2FpdCwgYHRyYW5zYWN0aW9uYCBhbmQgYHJlcGx5X2lubmVyYCBhcmUgaW4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzYC4KSGVyZSYjMzk7cyB3aGF0IEkgY2FuIHNlZToKYGBgcnVzdAogICAgZm4gdHJhbnNhY3Rpb24oc2VsZjogJmFtcDtBcmMmbHQ7U2VsZiZndDssIGNtZDogdTMyLCByZWFkZXI6ICZhbXA7bXV0IFVzZXJTbGljZVJlYWRlcikgLSZndDsgUmVzdQouLi4KICAgIGZuIHJlcGx5X2lubmVyKHNlbGY6ICZhbXA7QXJjJmx0O1NlbGYmZ3Q7LCBpbmZvOiAmYW1wO211dCBUcmFuc2FjdGlvbkluZm8pIC0mZ3Q7IEJpbmRlclJlc3VsdCB7CmBgYApMb29rcyBsaWtlIHRoZXNlIGFyZSBtZXRob2RzIG9mIGBUaHJlYWRgIG9yIHNpbWlsYXIuIExldCYjMzk7cyBjaGVjayBgZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5yc2A6CmBgYHJ1c3QKICAgIHB1YihjcmF0ZSkgZm4gcmVwb3J0X25ldGxpbmsoJmFtcDtzZWxmLCByZXBseTogdTMyLCBjdHg6ICZhbXA7Y3JhdGU6OkNvbnRleHQpIHsKLi4uCiAgICBmbiByZXBvcnRfbmV0bGlua19pbm5lcigmYW1wO3NlbGYsIHJlcGx5OiB1MzIsIGN0eDogJmFtcDtjcmF0ZTo6Q29udGV4dCkgLSZndDsga2VybmVsOjplcnJvcjo6UmVzdWx0IHsKYGBgClRoZW4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5yc2A6CmBgYHJ1c3QKICAgIHB1YiBmbiBuZXcoCi4uLgogICAgcHViIGZuIG11bHRpY2FzdChzZWxmLCBwb3J0aWQ6IHUzMiwgZmxhZ3M6IGtlcm5lbDo6YWxsb2M6OkZsYWdzKSAtJmd0OyBSZXN1bHQgewpgYGAKQW5kIGZpbmFsbHkgYHJ1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzYDoKYGBgcnVzdAogICAgcHViIGZuIG5ldyhzaXplOiB1c2l6ZSwgZmxhZ3M6IGFsbG9jOjpGbGFncykgLSZndDsgUmVzdWx0Jmx0O05ldGxpbmtTa0J1ZmYsIEFsbG9jRXJyb3ImZ3Q7IHsKLi4uCiAgICBwdWIgZm4gZ2VubG1zZ19wdXQoCi4uLgogICAgcHViIGZuIHB1dF91MzIoJmFtcDttdXQgc2VsZiwgYXR0cnR5cGU6IGNfaW50LCB2YWx1ZTogdTMyKSAtJmd0OyBSZXN1bHQgewouLi4KICAgIHB1YiBmbiBtdWx0aWNhc3QoCmBgYApJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmUgdGhlIHJpZ2h0IHN5bWJvbCBuYW1lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbiByZXBvcnRfbmV0bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5ycz01Mz0gICAgcHViKGNyYXRlKSBmbiBpc19vbmV3YXkoXHUwMDI2c2VsZikgLVx1MDAzZSBib29sIHtcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzLTU2LVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5yczo1NzogICAgcHViKGNyYXRlKSBmbiByZXBvcnRfbmV0bGluayhcdTAwMjZzZWxmLCByZXBseTogdTMyLCBjdHg6IFx1MDAyNmNyYXRlOjpDb250ZXh0KSB7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzLTU4LSAgICAgICAgaWYgbGV0IEVycihlcnIpID0gc2VsZi5yZXBvcnRfbmV0bGlua19pbm5lcihyZXBseSwgY3R4KSB7XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5ycy02Ni1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnM6Njc6ICAgIGZuIHJlcG9ydF9uZXRsaW5rX2lubmVyKFx1MDAyNnNlbGYsIHJlcGx5OiB1MzIsIGN0eDogXHUwMDI2Y3JhdGU6OkNvbnRleHQpIC1cdTAwM2Uga2VybmVsOjplcnJvcjo6UmVzdWx0IHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnMtNjgtICAgICAgICBpZiAhUmVwb3J0OjpoYXNfbGlzdGVuZXJzKCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTA0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIE5ldGxpbmstcmVsYXRlZCBmdW5jdGlvbnM6IGByZXBvcnRfbmV0bGlua2AsIGByZXBvcnRfbmV0bGlua19pbm5lcmAsIGB0cmFuc2FjdGlvbmAsIGFuZCBgcmVwbHlfaW5uZXJgLiBTZWVtcyBsaWtlIGEgZmFpcmx5IHN0YW5kYXJkIE5ldGxpbmsgc2V0dXAsIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBtZXNzYWdlIGhhbmRsaW5nIGFuZCBwZXJoYXBzIHNvbWUga2luZCBvZiB0cmFuc2FjdGlvbmFsIGFwcHJvYWNoLiBMZXQgbWUgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgR2VuZXJpYyBOZXRsaW5rIG1lc3NhZ2luZy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGhvdyB0aGV5IHB1dCB0b2dldGhlciB0aGUgbWVzc2FnZXMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayB1cCB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBgZ2VubG1zZ19wdXRgIGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhhbmRsaW5nIG11bHRpY2FzdCBjb21tdW5pY2F0aW9uIHdpdGhpbiB0aGUgTmV0bGluayBmcmFtZXdvcmsuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnNgIGZpbGU7IHRoaXMgd2lsbCBsaWtlbHkgY29udGFpbiB0aGUgbG93ZXItbGV2ZWwgTmV0bGluayBiaW5kaW5ncyBhbmQgdXRpbGl0eSBmdW5jdGlvbnMuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGhvdyB0aGUgZnVuY3Rpb25zIHRpZSBpbnRvIE5ldGxpbmsmIzM5O3MgbWVzc2FnZSBmcmFtaW5nIGFuZCBkZWxpdmVyeSBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZuIGdlbmxtc2dfcHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7cnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7cnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnM9NDI9ICAgIHB1YiBmbiBuZXcoc2l6ZTogdXNpemUsIGZsYWdzOiBhbGxvYzo6RmxhZ3MpIC1cdTAwM2UgUmVzdWx0XHUwMDNjTmV0bGlua1NrQnVmZiwgQWxsb2NFcnJvclx1MDAzZSB7XG4tLVxucnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMtNDktICAgIC8vLyBQdXRzIGEgZ2VuZXJpYyBuZXRsaW5rIGhlYWRlciBpbnRvIHRoZSBgTmV0bGlua1NrQnVmZmAuXG5ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yczo1MDogICAgcHViIGZuIGdlbmxtc2dfcHV0KFxucnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMtNTEtICAgICAgICBzZWxmLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTQwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTmV0bGluayBNdWx0aWNhc3QgaW4gdGhlIFJ1c3QgS2VybmVsKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgbXVsdGljYXN0IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBSdXN0IGtlcm5lbCYjMzk7cyBOZXRsaW5rIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnNgIGZpbGUuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIHRoZSBjb3JlIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IGFuZCByZWxhdGVkIGRhdGEgc3RydWN0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGlzIGZpbGUsIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBhbnkgbWVudGlvbnMgb3IgaW1wbGVtZW50YXRpb25zIHJlbGF0ZWQgdG8gJiMzNDttdWx0aWNhc3QuJiMzNDsgSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgaG93IG11bHRpY2FzdCBncm91cCBtYW5hZ2VtZW50LCBtZXNzYWdlIHJvdXRpbmcsIGFuZCBzb2NrZXQgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3ZWxsLWRlZmluZWQgcGF0dGVybnMgYW5kIGlkaW9tYXRpYyBSdXN0IGNvZGUgdXNhZ2UsIGhvcGluZyBmb3IgY2xhcml0eSBhbmQgZWZmaWNpZW5jeS4gSSYjMzk7bSByZWFkeSB0byBwYXJzZSB0aGUgY29kZSBhbmQgcmVidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm4gbXVsdGljYXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7cnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7cnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnM9MTExPSAgICBwdWIgZm4gcHV0X2ZsYWcoXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCkgLVx1MDAzZSBSZXN1bHQge1xuLS1cbnJ1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzLTExOS0gICAgI1tpbmxpbmVdXG5ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yczoxMjA6ICAgIHB1YiBmbiBtdWx0aWNhc3QoXG5ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5ycy0xMjEtICAgICAgICBzZWxmLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjg4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIE15IE5ldGxpbmsgUmVwb3J0aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gcHV0dGluZyB0b2dldGhlciB0aGUgYEZvY3VzU3ltYm9sc2Agc3RydWN0dXJlIGFuZCBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYWxsIHRoZSBlc3NlbnRpYWwgbmV0bGluayByZXBvcnRpbmcgZnVuY3Rpb25zLiBJJiMzOTt2ZSBkZWNpZGVkIG9uIGluY2x1ZGluZyBgcmVwb3J0X25ldGxpbmtgLCBgcmVwb3J0X25ldGxpbmtfaW5uZXJgLCBgZ2VubG1zZ19wdXRgLCBhbmQgYG11bHRpY2FzdGAuIFdhaXQgYSBtaW51dGUsICptdWx0aWNhc3QqIGlzIGEgcHJldHR5IGdlbmVyaWMgdGVybTsgaXQgY291bGQgbGVhZCB0byBhbWJpZ3VpdHkuIFRoaW5raW5nIHN0cmF0ZWdpY2FsbHksIGl0IG1ha2VzIG1vcmUgc2Vuc2UgdG8gc3RpY2sgd2l0aCB0aGUgbW9yZSBkZXNjcmlwdGl2ZSBhbmQgcHJvamVjdC1zcGVjaWZpYyBuYW1lcy4gSeKAmWxsIGdvIHdpdGggdGhlIG1vcmUgZXhwbGljaXQgYHJlcG9ydF9uZXRsaW5rX2lubmVyYCBhbmQgYHJlcG9ydF9uZXRsaW5rYCBhZnRlciBhbGwuIFRoYXQgZmVlbHMgY2xlYW5lciBhbmQgbGVzcyBwcm9uZSB0byBjb25mdXNpb24gZG93biB0aGUgbGluZS4KCkNvbnNlcXVlbnRseSwgSSBuZWVkIHRvIG1ha2Ugc29tZSBhZGp1c3RtZW50cy4gSSYjMzk7bGwgbmVlZCB0byBtb2RpZnkgdGhlIGB0cmFuc2FjdGlvbmAgYW5kIGByZXBseV9pbm5lcmAgZnVuY3Rpb25zIHRvIGNhbGwgdGhlIGByZXBvcnRfbmV0bGlua2AgZnVuY3Rpb24uIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGVpciBpbXBsZW1lbnRhdGlvbnMuIFRvIGRvIHRoYXQsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBpbiBgZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnNgIGFzIHRoYXQmIzM5O3Mgd2hlcmUgdGhleSBzaG91bGQgYmUgZGVmaW5lZC4gTGV0JiMzOTtzIHNlZSBpZiB0aG9zZSBhZGp1c3RtZW50cyBhcmUgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbiB0cmFuc2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzPTEyMTQ9ICAgIGZuIHJlYWRfdHJhbnNhY3Rpb25faW5mbyhcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycy0xMjQ5LSAgICAjW2lubGluZShuZXZlcildXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yczoxMjUwOiAgICBmbiB0cmFuc2FjdGlvbihzZWxmOiBcdTAwMjZBcmNcdTAwM2NTZWxmXHUwMDNlLCBjbWQ6IHUzMiwgcmVhZGVyOiBcdTAwMjZtdXQgVXNlclNsaWNlUmVhZGVyKSAtXHUwMDNlIFJlc3VsdFx1MDAzYygpXHUwMDNlIHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzLTEyNTEtICAgICAgICBsZXQgbXV0IGluZm8gPSBUcmFuc2FjdGlvbkluZm86Onplcm9lZCgpO1xuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzLTEyOTgtXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yczoxMjk5OiAgICBmbiB0cmFuc2FjdGlvbl9pbm5lcihzZWxmOiBcdTAwMjZBcmNcdTAwM2NTZWxmXHUwMDNlLCBpbmZvOiBcdTAwMjZtdXQgVHJhbnNhY3Rpb25JbmZvKSAtXHUwMDNlIEJpbmRlclJlc3VsdCB7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycy0xMzAwLSAgICAgICAgbGV0IG5vZGVfcmVmID0gc2VsZi5wcm9jZXNzLmdldF90cmFuc2FjdGlvbl9ub2RlKGluZm8udGFyZ2V0X2hhbmRsZSk/O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkxMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBCaW5kZXIgTmV0bGluayBDb2RlKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV0bGluayBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgQW5kcm9pZCBiaW5kZXIgZHJpdmVyLiBNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gYW5kIG11bHRpY2FzdCBoYW5kbGluZy4gVGhlcmVmb3JlLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzYC4gSSYjMzk7bGwgYmUgaG9taW5nIGluIG9uIHRoZSBgbmV3YCBmdW5jdGlvbiwgYXMgdGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIG5ldGxpbmsgc29ja2V0IG9yIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjcmVhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhlbiwgSSYjMzk7bGwgbW92ZSBvbiB0byBgbXVsdGljYXN0YCwgc2luY2UgdGhhdCBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGdyb3VwIGNvbW11bmljYXRpb25zLiBUaGF0IHNob3VsZCBwcm92aWRlIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG5ldGxpbmsgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm4gbXVsdGljYXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5ycz0zND0gICAgcHViIGZuIG5ldyhcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL25ldGxpbmsucnMtNDYtICAgIC8vLyBCcm9hZGNhc3QgdGhpcyBtZXNzYWdlLlxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzOjQ3OiAgICBwdWIgZm4gbXVsdGljYXN0KHNlbGYsIHBvcnRpZDogdTMyLCBmbGFnczoga2VybmVsOjphbGxvYzo6RmxhZ3MpIC1cdTAwM2UgUmVzdWx0IHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5ycy00OC0gICAgICAgIHNlbGYuc2tiLm11bHRpY2FzdChcdTAwMjZCSU5ERVJfTkxfRkFNSUxZLCBwb3J0aWQsIDAsIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBCaW5kZXIgSVBDIGluIFJ1c3QqKgoKT2theSwgc28gSSYjMzk7bSB1cGRhdGluZyBteSBgRm9jdXNTeW1ib2xzYCBsaXN0IGZvciB0aGUgQmluZGVyIElQQyBSdXN0IGV4cGxvcmF0aW9uLiBJIG5lZWQgdG8gZ2V0IHRoZSBrZXkgZnVuY3Rpb25zIGlkZW50aWZpZWQgZm9yIHRoZSBmdXp6ZXIuIEkmIzM5O20gYWRkaW5nIGByZXBvcnRfbmV0bGlua19pbm5lcmAsIGByZXBvcnRfbmV0bGlua2AsIGB0cmFuc2FjdGlvbmAsIGFuZCBgcmVwbHlfaW5uZXJgLiBIbW0sIGhvbGQgb24uIGB0cmFuc2FjdGlvbmAgYW5kIGByZXBseV9pbm5lcmAgYXJlIGEgYml0IHRvbyBnZW5lcmljLiBXaGlsZSB0aGV5ICphcmUqIGp1c3QgYHRyYW5zYWN0aW9uYCBpbiB0aGUgUnVzdCBjb2RlLCBjb3VsZCBJIG1ha2UgdGhlbSBtb3JlIHNwZWNpZmljLCBsaWtlIGBiaW5kZXJfdHJhbnNhY3Rpb25gIG9yIHNvbWV0aGluZz8gIFVsdGltYXRlbHksIGBUcmFuc2FjdGlvbkluZm86OnJlcG9ydF9uZXRsaW5rX2lubmVyYCBtYXkgYmUgdGhlIHRpY2tldC4gU3l6a2FsbGVyIGxldmVyYWdlcyBzdWJzdHJpbmcgbWF0Y2hpbmcsIHNvIGByZXBvcnRfbmV0bGlua19pbm5lcmAgc2hvdWxkIGJlIGRpc3RpbmN0aXZlIGVub3VnaC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGByZXBvcnRfbmV0bGlua19pbm5lcmAgaXMsIGluIGZhY3QsIHVuaXF1ZS4gWWVwLCBnb29kIHRvIGdvLgoKTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucywgc3BlY2lmaWNhbGx5IHRvIGVuc3VyZSBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgIGlzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTkRST0lEX0JJTkRFUl9JUENfUlVTVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnPTQ9Y29uZmlnIEFORFJPSURfQklOREVSX0lQQ1xuLS1cbmRyaXZlcnMvYW5kcm9pZC9LY29uZmlnLTE2LVxuZHJpdmVycy9hbmRyb2lkL0tjb25maWc6MTc6Y29uZmlnIEFORFJPSURfQklOREVSX0lQQ19SVVNUXG5kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7UnVzdCB2ZXJzaW9uIG9mIEFuZHJvaWQgQmluZGVyIElQQyBEcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NDMKCQkJCQkJCW91dHB1dDogOTgKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSdXN0LUJhc2VkIEJpbmRlciBJUEMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgLiBUaGUgZGVwZW5kZW5jaWVzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgUlVTVCAmYW1wOyZhbXA7IE1NVSAmYW1wOyZhbXA7IE5FVCAmYW1wOyZhbXA7ICFBTkRST0lEX0JJTkRFUl9JUENgLiBTZWVtcyBsb2dpY2FsLiBFc3NlbnRpYWxseSwgd2UgbmVlZCBSdXN0IHN1cHBvcnQsIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQsIE5ldHdvcmsgZnVuY3Rpb25hbGl0eSwgYW5kIGltcG9ydGFudGx5LCB3ZSYjMzk7cmUgKm5vdCogdXNpbmcgdGhlIGxlZ2FjeSBBbmRyb2lkIEJpbmRlciBJUEMuIEdpdmVuIHRoYXQgdGhlIGBORVRgIGRlcGVuZGVuY3kgaXMgdXN1YWxseSBhbHJlYWR5IGhhbmRsZWQgaW4gbW9zdCBzZXR1cHMsIGFuZCBSdXN0IGlzLCBvZiBjb3Vyc2UsIGVzc2VudGlhbCwgYEFORFJPSURfQklOREVSX0lQQ19SVVNUYCByZWFsbHkgaXMgdGhlIGtleSBwaWVjZSBoZXJlLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWcgZm9yIHRoZSBSdXN0LWJhc2VkIGltcGxlbWVudGF0aW9uLiBIbW0sIGFuZCB5ZXMsIEkgc2VlIHRoYXQgdGhlIGBydXN0X2hlbHBlcl9nZW5sbXNnX25ld2AgZnVuY3Rpb24gaW4gYHJ1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmNgIG5lZWRzIGBDT05GSUdfTkVUYCwgYnV0IHRoYXQgcmVxdWlyZW1lbnQgaXMgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBgTkVUYCBkZXBlbmRlbmN5IG9mIGBBTkRST0lEX0JJTkRFUl9JUENfUlVTVGAsIHNvIGFsbCBnb29kIHRoZXJlLgoKQWxyaWdodCwgc28gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGlzIGdvaW5nIHRvIGJlIGEgc2ltcGxlIG9uZTogYFsmIzM0O0FORFJPSURfQklOREVSX0lQQ19SVVNUJiMzNDtdYC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgd2Ugc2hvdWxkIGJlIGZ1enppbmcuIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgaXQgYWRkcyBhIG5ldyBuZXRsaW5rIGZhbWlseSBzcGVjaWZpY2FsbHkgZm9yIEJpbmRlciwgYW5kIHJlcG9ydHMgdHJhbnNhY3Rpb24gZmFpbHVyZXMuIFRoYXQgZGVmaW5pdGVseSBpbmRpY2F0ZXMgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpbnRlcmFjdGlvbiB3aXRoIGJvdGggYmluZGVyIGFuZCBuZXRsaW5rIGlzIHJlcXVpcmVkIHRvIHJlYWNoIGl0LgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgcmVzdWx0cy4gVGltZSB0byBmaW5hbGl6ZSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QU5EUk9JRF9CSU5ERVJfSVBDX1JVU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXBvcnRfbmV0bGlua19pbm5lciYjMzQ7LAogICAgJiMzNDtyZXBvcnRfbmV0bGluayYjMzQ7LAogICAgJiMzNDtnZW5sbXNnX3B1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIG5ldGxpbmsgbXVsdGljYXN0IHJlcG9ydGluZyBmb3IgQW5kcm9pZCBCaW5kZXIgdHJhbnNhY3Rpb24gZmFpbHVyZXMgaW4gUnVzdC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGZvciBjb25zdHJ1Y3RpbmcgYW5kIGJyb2FkY2FzdGluZyBuZXRsaW5rIG1lc3NhZ2VzIHdoZW4gYmluZGVyIHRyYW5zYWN0aW9ucyBmYWlsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBTkRST0lEX0JJTkRFUl9JUENfUlVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlcG9ydF9uZXRsaW5rX2lubmVyJiMzNDssCiAgICAmIzM0O3JlcG9ydF9uZXRsaW5rJiMzNDssCiAgICAmIzM0O2dlbmxtc2dfcHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbmV0bGluayBtdWx0aWNhc3QgcmVwb3J0aW5nIGZvciBBbmRyb2lkIEJpbmRlciB0cmFuc2FjdGlvbiBmYWlsdXJlcyBpbiBSdXN0LiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgZm9yIGNvbnN0cnVjdGluZyBhbmQgYnJvYWRjYXN0aW5nIG5ldGxpbmsgbWVzc2FnZXMgd2hlbiBiaW5kZXIgdHJhbnNhY3Rpb25zIGZhaWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NTo1NC42MzQwMjc2MTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc5NTQzNTk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBTkRST0lEX0JJTkRFUl9JUENfUlVTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcG9ydF9uZXRsaW5rX2lubmVyXCIsXG4gICAgXCJyZXBvcnRfbmV0bGlua1wiLFxuICAgIFwiZ2VubG1zZ19wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIG5ldGxpbmsgbXVsdGljYXN0IHJlcG9ydGluZyBmb3IgQW5kcm9pZCBCaW5kZXIgdHJhbnNhY3Rpb24gZmFpbHVyZXMgaW4gUnVzdC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGZvciBjb25zdHJ1Y3RpbmcgYW5kIGJyb2FkY2FzdGluZyBuZXRsaW5rIG1lc3NhZ2VzIHdoZW4gYmluZGVyIHRyYW5zYWN0aW9ucyBmYWlsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NTo1NC42MzQwMzMzNzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDI4OTAwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NWUyODA0MDk2MmE1ZjFkNzE5OTU2ZjI3ODBiN2U3ZTYzNWQ1YzI2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMTc6NTU6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IGMzZjcyMDU4YTJmMjZlLi5iZTVhMTk2ZjEyYzZhZiAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE4ODc1LDYgKzE4ODc1LDggQEAgRjpcXHRpbmNsdWRlL3VhcGkvbGludXgvc2N0cC5oXFxuIEY6XFx0bGliL25ldF91dGlscy5jXFxuIEY6XFx0bGliL3JhbmRvbTMyLmNcXG4gRjpcXHRuZXQvXFxuK0Y6XFx0cnVzdC9oZWxwZXJzL25ldC9cXG4rRjpcXHRydXN0L2tlcm5lbC9uZXQvXFxuIEY6XFx0c2FtcGxlcy9wa3RnZW4vXFxuIEY6XFx0dG9vbHMvbmV0L1xcbiBGOlxcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWcgYi9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZ1xcbmluZGV4IGUyZTQwMmM5ZDE3NTljLi42MDZhOWQwN2Y3NzQ3MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnXFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIEFORFJPSURfQklOREVSX0lQQ1xcbiBcXG4gY29uZmlnIEFORFJPSURfQklOREVSX0lQQ19SVVNUXFxuIFxcdGJvb2wgXFxcIlJ1c3QgdmVyc2lvbiBvZiBBbmRyb2lkIEJpbmRlciBJUEMgRHJpdmVyXFxcIlxcbi1cXHRkZXBlbmRzIG9uIFJVU1QgXFx1MDAyNlxcdTAwMjYgTU1VIFxcdTAwMjZcXHUwMDI2ICFBTkRST0lEX0JJTkRFUl9JUENcXG4rXFx0ZGVwZW5kcyBvbiBSVVNUIFxcdTAwMjZcXHUwMDI2IE1NVSBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgIUFORFJPSURfQklOREVSX0lQQ1xcbiBcXHRoZWxwXFxuIFxcdCAgVGhpcyBlbmFibGVzIHRoZSBSdXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBCaW5kZXIgZHJpdmVyLlxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmViN2VhMmVkYWZmNzJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzXFxuQEAgLTAsMCArMSwxMTcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICgoR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSkgT1IgQlNELTMtQ2xhdXNlKVxcbisvKiBCYXNlZCBvbjogRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2JpbmRlci55YW1sICovXFxuK1xcbisjIVthbGxvdyh1bnJlYWNoYWJsZV9wdWIsIGNsaXBweTo6d3Jvbmdfc2VsZl9jb252ZW50aW9uKV1cXG4rdXNlIGtlcm5lbDo6e1xcbisgICAgbmV0OjpuZXRsaW5rOjp7XFxuKyAgICAgICAgRmFtaWx5LFxcbisgICAgICAgIEdlbmxNc2csXFxuKyAgICAgICAgTXVsdGljYXN0R3JvdXAsXFxuKyAgICAgICAgTmV0bGlua1NrQnVmZiwgLy9cXG4rICAgIH0sXFxuKyAgICBwcmVsdWRlOjoqLCAvL1xcbit9O1xcbitcXG4rcHViIHN0YXRpYyBCSU5ERVJfTkxfRkFNSUxZOiBGYW1pbHkgPSBGYW1pbHk6OmNvbnN0X25ldyhcXG4rICAgIFxcdTAwMjZjcmF0ZTo6VEhJU19NT0RVTEUsXFxuKyAgICBrZXJuZWw6OnVhcGk6OkJJTkRFUl9GQU1JTFlfTkFNRSxcXG4rICAgIGtlcm5lbDo6dWFwaTo6QklOREVSX0ZBTUlMWV9WRVJTSU9OLFxcbisgICAgXFx1MDAyNkJJTkRFUl9OTF9GQU1JTFlfTUNHUlBTLFxcbispO1xcbitcXG4rc3RhdGljIEJJTkRFUl9OTF9GQU1JTFlfTUNHUlBTOiBbTXVsdGljYXN0R3JvdXA7IDFdID0gW011bHRpY2FzdEdyb3VwOjpjb25zdF9uZXcoY1xcXCJyZXBvcnRcXFwiKV07XFxuK1xcbisvLy8gQSBtdWx0aWNhc3QgZXZlbnQgc2VudCB0byB1c2Vyc3BhY2Ugc3Vic2NyaWJlcnMgdG8gbm90aWZ5IHRoZW0gYWJvdXRcXG4rLy8vIGJpbmRlciB0cmFuc2FjdGlvbiBmYWlsdXJlcy4gVGhlIGdlbmVyYXRlZCByZXBvcnQgcHJvdmlkZXMgdGhlIGZ1bGxcXG4rLy8vIGRldGFpbHMgb2YgdGhlIHNwZWNpZmljIHRyYW5zYWN0aW9uIHRoYXQgZmFpbGVkLiBUaGUgaW50ZW50aW9uIGlzIGZvclxcbisvLy8gcHJvZ3JhbXMgdG8gbW9uaXRvciB0aGVzZSBldmVudHMgYW5kIHJlYWN0IHRvIHRoZSBmYWlsdXJlcyBhcyBuZWVkZWQuXFxuK3B1YiBzdHJ1Y3QgUmVwb3J0IHtcXG4rICAgIHNrYjogR2VubE1zZyxcXG4rfVxcbitcXG4raW1wbCBSZXBvcnQge1xcbisgICAgLy8vIENyZWF0ZSBhIG5ldyBtdWx0aWNhc3QgbWVzc2FnZS5cXG4rICAgIHB1YiBmbiBuZXcoXFxuKyAgICAgICAgc2l6ZTogdXNpemUsXFxuKyAgICAgICAgcG9ydGlkOiB1MzIsXFxuKyAgICAgICAgc2VxOiB1MzIsXFxuKyAgICAgICAgZmxhZ3M6IGtlcm5lbDo6YWxsb2M6OkZsYWdzLFxcbisgICAgKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjU2VsZiwga2VybmVsOjphbGxvYzo6QWxsb2NFcnJvclxcdTAwM2Uge1xcbisgICAgICAgIGNvbnN0IEJJTkRFUl9DTURfUkVQT1JUOiB1OCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0NNRF9SRVBPUlQgYXMgdTg7XFxuKyAgICAgICAgbGV0IHNrYiA9IE5ldGxpbmtTa0J1ZmY6Om5ldyhzaXplLCBmbGFncyk/O1xcbisgICAgICAgIGxldCBza2IgPSBza2IuZ2VubG1zZ19wdXQocG9ydGlkLCBzZXEsIFxcdTAwMjZCSU5ERVJfTkxfRkFNSUxZLCBCSU5ERVJfQ01EX1JFUE9SVCk/O1xcbisgICAgICAgIE9rKFNlbGYgeyBza2IgfSlcXG4rICAgIH1cXG4rXFxuKyAgICAvLy8gQnJvYWRjYXN0IHRoaXMgbWVzc2FnZS5cXG4rICAgIHB1YiBmbiBtdWx0aWNhc3Qoc2VsZiwgcG9ydGlkOiB1MzIsIGZsYWdzOiBrZXJuZWw6OmFsbG9jOjpGbGFncykgLVxcdTAwM2UgUmVzdWx0IHtcXG4rICAgICAgICBzZWxmLnNrYi5tdWx0aWNhc3QoXFx1MDAyNkJJTkRFUl9OTF9GQU1JTFksIHBvcnRpZCwgMCwgZmxhZ3MpXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIENoZWNrIGlmIHRoaXMgbWVzc2FnZSB0eXBlIGhhcyBsaXN0ZW5lcnMuXFxuKyAgICBwdWIgZm4gaGFzX2xpc3RlbmVycygpIC1cXHUwMDNlIGJvb2wge1xcbisgICAgICAgIEJJTkRFUl9OTF9GQU1JTFkuaGFzX2xpc3RlbmVycygwKVxcbisgICAgfVxcbitcXG4rICAgIC8vLyBUaGUgZW51bSBiaW5kZXJfZHJpdmVyX3JldHVybl9wcm90b2NvbCByZXR1cm5lZCB0byB0aGUgc2VuZGVyLlxcbisgICAgcHViIGZuIGVycm9yKFxcdTAwMjZtdXQgc2VsZiwgdmFsOiB1MzIpIC1cXHUwMDNlIFJlc3VsdCB7XFxuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0VSUk9SOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0VSUk9SIGFzIGNfaW50O1xcbisgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0VSUk9SLCB2YWwpXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIFRoZSBiaW5kZXIgY29udGV4dCB3aGVyZSB0aGUgdHJhbnNhY3Rpb24gb2NjdXJyZWQuXFxuKyAgICBwdWIgZm4gY29udGV4dChcXHUwMDI2bXV0IHNlbGYsIHZhbDogXFx1MDAyNkNTdHIpIC1cXHUwMDNlIFJlc3VsdCB7XFxuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0NPTlRFWFQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfQ09OVEVYVCBhcyBjX2ludDtcXG4rICAgICAgICBzZWxmLnNrYi5wdXRfc3RyaW5nKEJJTkRFUl9BX1JFUE9SVF9DT05URVhULCB2YWwpXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIFRoZSBQSUQgb2YgdGhlIHNlbmRlciBwcm9jZXNzLlxcbisgICAgcHViIGZuIGZyb21fcGlkKFxcdTAwMjZtdXQgc2VsZiwgdmFsOiB1MzIpIC1cXHUwMDNlIFJlc3VsdCB7XFxuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0ZST01fUElEOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0ZST01fUElEIGFzIGNfaW50O1xcbisgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0ZST01fUElELCB2YWwpXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIFRoZSBUSUQgb2YgdGhlIHNlbmRlciB0aHJlYWQuXFxuKyAgICBwdWIgZm4gZnJvbV90aWQoXFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVxcdTAwM2UgUmVzdWx0IHtcXG4rICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfRlJPTV9USUQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfRlJPTV9USUQgYXMgY19pbnQ7XFxuKyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfRlJPTV9USUQsIHZhbClcXG4rICAgIH1cXG4rXFxuKyAgICAvLy8gVGhlIFBJRCBvZiB0aGUgcmVjaXBpZW50IHByb2Nlc3MuIFRoaXMgYXR0cmlidXRlIG1heSBub3QgYmUgcHJlc2VudFxcbisgICAgLy8vIGlmIHRoZSB0YXJnZXQgY291bGQgbm90IGJlIGRldGVybWluZWQuXFxuKyAgICBwdWIgZm4gdG9fcGlkKFxcdTAwMjZtdXQgc2VsZiwgdmFsOiB1MzIpIC1cXHUwMDNlIFJlc3VsdCB7XFxuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX1RPX1BJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9UT19QSUQgYXMgY19pbnQ7XFxuKyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfVE9fUElELCB2YWwpXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIFRoZSBUSUQgb2YgdGhlIHJlY2lwaWVudCB0aHJlYWQuIFRoaXMgYXR0cmlidXRlIG1heSBub3QgYmUgcHJlc2VudFxcbisgICAgLy8vIGlmIHRoZSB0YXJnZXQgY291bGQgbm90IGJlIGRldGVybWluZWQuXFxuKyAgICBwdWIgZm4gdG9fdGlkKFxcdTAwMjZtdXQgc2VsZiwgdmFsOiB1MzIpIC1cXHUwMDNlIFJlc3VsdCB7XFxuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX1RPX1RJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9UT19USUQgYXMgY19pbnQ7XFxuKyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfVE9fVElELCB2YWwpXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIFdoZW4gcHJlc2VudCwgaW5kaWNhdGVzIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gaXMgYSByZXBseS5cXG4rICAgIHB1YiBmbiBpc19yZXBseShcXHUwMDI2bXV0IHNlbGYpIC1cXHUwMDNlIFJlc3VsdCB7XFxuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0lTX1JFUExZOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0lTX1JFUExZIGFzIGNfaW50O1xcbisgICAgICAgIHNlbGYuc2tiLnB1dF9mbGFnKEJJTkRFUl9BX1JFUE9SVF9JU19SRVBMWSlcXG4rICAgIH1cXG4rXFxuKyAgICAvLy8gVGhlIGJpdG1hc2sgb2YgZW51bSB0cmFuc2FjdGlvbl9mbGFncyBmcm9tIHRoZSB0cmFuc2FjdGlvbi5cXG4rICAgIHB1YiBmbiBmbGFncyhcXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXFx1MDAzZSBSZXN1bHQge1xcbisgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9GTEFHUzogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9GTEFHUyBhcyBjX2ludDtcXG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9GTEFHUywgdmFsKVxcbisgICAgfVxcbitcXG4rICAgIC8vLyBUaGUgYXBwbGljYXRpb24tZGVmaW5lZCBjb2RlIGZyb20gdGhlIHRyYW5zYWN0aW9uLlxcbisgICAgcHViIGZuIGNvZGUoXFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVxcdTAwM2UgUmVzdWx0IHtcXG4rICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfQ09ERTogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9DT0RFIGFzIGNfaW50O1xcbisgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0NPREUsIHZhbClcXG4rICAgIH1cXG4rXFxuKyAgICAvLy8gVGhlIHRyYW5zYWN0aW9uIHBheWxvYWQgc2l6ZSBpbiBieXRlcy5cXG4rICAgIHB1YiBmbiBkYXRhX3NpemUoXFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVxcdTAwM2UgUmVzdWx0IHtcXG4rICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfREFUQV9TSVpFOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0RBVEFfU0laRSBhcyBjX2ludDtcXG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9EQVRBX1NJWkUsIHZhbClcXG4rICAgIH1cXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnNcXG5pbmRleCA0MzIzOTBhYWIyNWJiOC4uZGY0N2FiYTA1MTMzODUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9ydXN0X2JpbmRlcl9tYWluLnJzXFxuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9ydXN0X2JpbmRlcl9tYWluLnJzXFxuQEAgLTMyLDYgKzMyLDcgQEBcXG4gbW9kIGRlZmVycmVkX2Nsb3NlO1xcbiBtb2QgZGVmcztcXG4gbW9kIGVycm9yO1xcbittb2QgbmV0bGluaztcXG4gbW9kIG5vZGU7XFxuIG1vZCBwYWdlX3JhbmdlO1xcbiBtb2QgcHJvY2VzcztcXG5AQCAtMjgyLDE5ICsyODMsMjIgQEAgZm4gcHRyX2FsaWduKHZhbHVlOiB1c2l6ZSkgLVxcdTAwM2UgT3B0aW9uXFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIC8vIFNBRkVUWTogV2UgY2FsbCByZWdpc3RlciBpbiBgaW5pdGAuXFxuIHN0YXRpYyBCSU5ERVJfU0hSSU5LRVI6IFNocmlua2VyID0gdW5zYWZlIHsgU2hyaW5rZXI6Om5ldygpIH07XFxuIFxcbi1zdHJ1Y3QgQmluZGVyTW9kdWxlIHt9XFxuK3N0cnVjdCBCaW5kZXJNb2R1bGUge1xcbisgICAgX25ldGxpbms6IGtlcm5lbDo6bmV0OjpuZXRsaW5rOjpSZWdpc3RyYXRpb24sXFxuK31cXG4gXFxuIGltcGwga2VybmVsOjpNb2R1bGUgZm9yIEJpbmRlck1vZHVsZSB7XFxuICAgICBmbiBpbml0KF9tb2R1bGU6IFxcdTAwMjYnc3RhdGljIGtlcm5lbDo6VGhpc01vZHVsZSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY1NlbGZcXHUwMDNlIHtcXG4gICAgICAgICAvLyBTQUZFVFk6IFRoZSBtb2R1bGUgaW5pdGlhbGl6ZXIgbmV2ZXIgcnVucyB0d2ljZSwgc28gd2Ugb25seSBjYWxsIHRoaXMgb25jZS5cXG4gICAgICAgICB1bnNhZmUgeyBjcmF0ZTo6Y29udGV4dDo6Q09OVEVYVFMuaW5pdCgpIH07XFxuIFxcbisgICAgICAgIGxldCBuZXRsaW5rID0gY3JhdGU6Om5ldGxpbms6OkJJTkRFUl9OTF9GQU1JTFkucmVnaXN0ZXIoKT87XFxuICAgICAgICAgQklOREVSX1NIUklOS0VSLnJlZ2lzdGVyKGNcXFwiYW5kcm9pZC1iaW5kZXJcXFwiKT87XFxuIFxcbiAgICAgICAgIC8vIFNBRkVUWTogVGhlIG1vZHVsZSBpcyBiZWluZyBsb2FkZWQsIHNvIHdlIGNhbiBpbml0aWFsaXplIGJpbmRlcmZzLlxcbiAgICAgICAgIHVuc2FmZSB7IGtlcm5lbDo6ZXJyb3I6OnRvX3Jlc3VsdChiaW5kZXJmczo6aW5pdF9ydXN0X2JpbmRlcmZzKCkpPyB9O1xcbiBcXG4tICAgICAgICBPayhTZWxmIHt9KVxcbisgICAgICAgIE9rKFNlbGYgeyBfbmV0bGluazogbmV0bGluayB9KVxcbiAgICAgfVxcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzXFxuaW5kZXggMTlmODgxOTQ4YTg0YmEuLjMzMzY4ZjdmZDU1MTQyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzXFxuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnNcXG5AQCAtMTI4NCw2ICsxMjg0LDE1IEBAIGZuIHRyYW5zYWN0aW9uKHNlbGY6IFxcdTAwMjZBcmNcXHUwMDNjU2VsZlxcdTAwM2UsIGNtZDogdTMyLCByZWFkZXI6IFxcdTAwMjZtdXQgVXNlclNsaWNlUmVhZGVyKSAtXFx1MDAzZSBSZXN1XFxuICAgICAgICAgICAgIH1cXG4gICAgICAgICB9XFxuIFxcbisgICAgICAgIGlmIGluZm8ub25ld2F5X3NwYW1fc3VzcGVjdCB7XFxuKyAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYm90aCBhIG9uZXdheSBzcGFtIHN1c3BlY3QgYW5kIGEgZmFpbHVyZSwgd2UgcmVwb3J0IGl0IHR3aWNlLiBUaGlzIGlzXFxuKyAgICAgICAgICAgIC8vIHVzZWZ1bCBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBmYWlsZWQgd2l0aCBCUl9UUkFOU0FDVElPTl9QRU5ESU5HX0ZST1pFTi5cXG4rICAgICAgICAgICAgaW5mby5yZXBvcnRfbmV0bGluayhCUl9PTkVXQVlfU1BBTV9TVVNQRUNULCBcXHUwMDI2c2VsZi5wcm9jZXNzLmN0eCk7XFxuKyAgICAgICAgfVxcbisgICAgICAgIGlmIGluZm8ucmVwbHkgIT0gMCB7XFxuKyAgICAgICAgICAgIGluZm8ucmVwb3J0X25ldGxpbmsoaW5mby5yZXBseSwgXFx1MDAyNnNlbGYucHJvY2Vzcy5jdHgpO1xcbisgICAgICAgIH1cXG4rXFxuICAgICAgICAgT2soKCkpXFxuICAgICB9XFxuIFxcbkBAIC0xMzU0LDExICsxMzYzLDExIEBAIGZuIHJlcGx5X2lubmVyKHNlbGY6IFxcdTAwMjZBcmNcXHUwMDNjU2VsZlxcdTAwM2UsIGluZm86IFxcdTAwMjZtdXQgVHJhbnNhY3Rpb25JbmZvKSAtXFx1MDAzZSBCaW5kZXJSZXN1bHQge1xcbiAgICAgICAgICAgICAgICAgaW5mby5mcm9tX3RpZCxcXG4gICAgICAgICAgICAgICAgIGluZm8udG9fcGlkXFxuICAgICAgICAgICAgICk7XFxuLVxcbiAgICAgICAgICAgICBsZXQgcGFyYW0gPSBlcnIuc291cmNlLmFzX3JlZigpLm1hcF9vcigwLCB8ZXwgZS50b19lcnJubygpKTtcXG4gICAgICAgICAgICAgbGV0IGVlID0gRXh0ZW5kZWRFcnJvcjo6bmV3KGluZm8uZGVidWdfaWQgYXMgdTMyLCBlcnIucmVwbHksIHBhcmFtKTtcXG4gICAgICAgICAgICAgb3JpZy5mcm9tXFxuICAgICAgICAgICAgICAgICAuZGVsaXZlcl9yZXBseShFcnIoQlJfRkFJTEVEX1JFUExZKSwgXFx1MDAyNm9yaWcsIFNvbWUoZWUpKTtcXG4rICAgICAgICAgICAgaW5mby5yZXBseSA9IEJSX0ZBSUxFRF9SRVBMWTtcXG4gICAgICAgICAgICAgZXJyLnJlcGx5ID0gQlJfVFJBTlNBQ1RJT05fQ09NUExFVEU7XFxuICAgICAgICAgICAgIGVyclxcbiAgICAgICAgIH0pO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5yc1xcbmluZGV4IGFmZWY1YjQ2ZWFjMjY3Li42Y2I3Yjc0NWM1MmU0NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXFxuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5yc1xcbkBAIC0zLDYgKzMsNyBAQFxcbiAvLyBDb3B5cmlnaHQgKEMpIDIwMjUgR29vZ2xlIExMQy5cXG4gXFxuIHVzZSBrZXJuZWw6OntcXG4rICAgIG5ldDo6bmV0bGluazo6R0VOTE1TR19ERUZBVUxUX1NJWkUsXFxuICAgICBwcmVsdWRlOjoqLFxcbiAgICAgc2VxX2ZpbGU6OlNlcUZpbGUsXFxuICAgICBzZXFfcHJpbnQsXFxuQEAgLTE4LDYgKzE5LDcgQEBcXG4gICAgIGFsbG9jYXRpb246OntBbGxvY2F0aW9uLCBUcmFuc2xhdGVkRmRzfSxcXG4gICAgIGRlZnM6OiosXFxuICAgICBlcnJvcjo6e0JpbmRlckVycm9yLCBCaW5kZXJSZXN1bHR9LFxcbisgICAgbmV0bGluazo6UmVwb3J0LFxcbiAgICAgbm9kZTo6e05vZGUsIE5vZGVSZWZ9LFxcbiAgICAgcHJvY2Vzczo6e1Byb2Nlc3MsIFByb2Nlc3NJbm5lcn0sXFxuICAgICBwdHJfYWxpZ24sXFxuQEAgLTUxLDYgKzUzLDQ0IEBAIGltcGwgVHJhbnNhY3Rpb25JbmZvIHtcXG4gICAgIHB1YihjcmF0ZSkgZm4gaXNfb25ld2F5KFxcdTAwMjZzZWxmKSAtXFx1MDAzZSBib29sIHtcXG4gICAgICAgICBzZWxmLmZsYWdzIFxcdTAwMjYgVEZfT05FX1dBWSAhPSAwXFxuICAgICB9XFxuK1xcbisgICAgcHViKGNyYXRlKSBmbiByZXBvcnRfbmV0bGluayhcXHUwMDI2c2VsZiwgcmVwbHk6IHUzMiwgY3R4OiBcXHUwMDI2Y3JhdGU6OkNvbnRleHQpIHtcXG4rICAgICAgICBpZiBsZXQgRXJyKGVycikgPSBzZWxmLnJlcG9ydF9uZXRsaW5rX2lubmVyKHJlcGx5LCBjdHgpIHtcXG4rICAgICAgICAgICAgcHJfd2FybiEoXFxuKyAgICAgICAgICAgICAgICBcXFwie306e30gbmV0bGluayByZXBvcnQgZmFpbGVkOiB7ZXJyOj99XFxcXG5cXFwiLFxcbisgICAgICAgICAgICAgICAgc2VsZi5mcm9tX3BpZCxcXG4rICAgICAgICAgICAgICAgIHNlbGYuZnJvbV90aWRcXG4rICAgICAgICAgICAgKTtcXG4rICAgICAgICB9XFxuKyAgICB9XFxuK1xcbisgICAgZm4gcmVwb3J0X25ldGxpbmtfaW5uZXIoXFx1MDAyNnNlbGYsIHJlcGx5OiB1MzIsIGN0eDogXFx1MDAyNmNyYXRlOjpDb250ZXh0KSAtXFx1MDAzZSBrZXJuZWw6OmVycm9yOjpSZXN1bHQge1xcbisgICAgICAgIGlmICFSZXBvcnQ6Omhhc19saXN0ZW5lcnMoKSB7XFxuKyAgICAgICAgICAgIHJldHVybiBPaygoKSk7XFxuKyAgICAgICAgfVxcbisgICAgICAgIGxldCBtdXQgcmVwb3J0ID0gUmVwb3J0OjpuZXcoR0VOTE1TR19ERUZBVUxUX1NJWkUsIDAsIDAsIEdGUF9LRVJORUwpPztcXG4rXFxuKyAgICAgICAgcmVwb3J0LmVycm9yKHJlcGx5KT87XFxuKyAgICAgICAgcmVwb3J0LmNvbnRleHQoXFx1MDAyNmN0eC5uYW1lKT87XFxuKyAgICAgICAgcmVwb3J0LmZyb21fcGlkKHNlbGYuZnJvbV9waWQgYXMgdTMyKT87XFxuKyAgICAgICAgcmVwb3J0LmZyb21fdGlkKHNlbGYuZnJvbV90aWQgYXMgdTMyKT87XFxuKyAgICAgICAgaWYgc2VsZi50b19waWQgIT0gMCB7XFxuKyAgICAgICAgICAgIHJlcG9ydC50b19waWQoc2VsZi50b19waWQgYXMgdTMyKT87XFxuKyAgICAgICAgfVxcbisgICAgICAgIGlmIHNlbGYudG9fdGlkICE9IDAge1xcbisgICAgICAgICAgICByZXBvcnQudG9fdGlkKHNlbGYudG9fdGlkIGFzIHUzMik/O1xcbisgICAgICAgIH1cXG4rXFxuKyAgICAgICAgaWYgc2VsZi5pc19yZXBseSB7XFxuKyAgICAgICAgICAgIHJlcG9ydC5pc19yZXBseSgpPztcXG4rICAgICAgICB9XFxuKyAgICAgICAgcmVwb3J0LmZsYWdzKHNlbGYuZmxhZ3MpPztcXG4rICAgICAgICByZXBvcnQuY29kZShzZWxmLmNvZGUpPztcXG4rICAgICAgICByZXBvcnQuZGF0YV9zaXplKHNlbGYuZGF0YV9zaXplIGFzIHUzMik/O1xcbitcXG4rICAgICAgICByZXBvcnQubXVsdGljYXN0KDAsIEdGUF9LRVJORUwpPztcXG4rICAgICAgICBPaygoKSlcXG4rICAgIH1cXG4gfVxcbiBcXG4gdXNlIGNvcmU6Om1lbTo6b2Zmc2V0X29mO1xcbmRpZmYgLS1naXQgYS9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oIGIvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxcbmluZGV4IDExMjQ3ODVlMjEwYjMwLi5lYzk2ZTgxMTYxMGQ3MiAxMDA2NDRcXG4tLS0gYS9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oXFxuKysrIGIvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxcbkBAIC05Myw2ICs5Myw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhcnJheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9ydXN0X3NhbXBsZS5oXFx1MDAzZVxcbiBcXG4gLypcXG5AQCAtMTEwLDYgKzExMiw3IEBAXFxuIGNvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9BUkNIX1NMQUJfTUlOQUxJR04gPSBBUkNIX1NMQUJfTUlOQUxJR047XFxuIGNvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9BUkNIX0tNQUxMT0NfTUlOQUxJR04gPSBBUkNIX0tNQUxMT0NfTUlOQUxJR047XFxuIGNvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9QQUdFX1NJWkUgPSBQQUdFX1NJWkU7XFxuK2NvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRU5MTVNHX0RFRkFVTFRfU0laRSA9IEdFTkxNU0dfREVGQVVMVF9TSVpFO1xcbiBjb25zdCBnZnBfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRlBfQVRPTUlDID0gR0ZQX0FUT01JQztcXG4gY29uc3QgZ2ZwX3QgUlVTVF9DT05TVF9IRUxQRVJfR0ZQX0tFUk5FTCA9IEdGUF9LRVJORUw7XFxuIGNvbnN0IGdmcF90IFJVU1RfQ09OU1RfSEVMUEVSX0dGUF9LRVJORUxfQUNDT1VOVCA9IEdGUF9LRVJORUxfQUNDT1VOVDtcXG5kaWZmIC0tZ2l0IGEvcnVzdC9oZWxwZXJzL2hlbHBlcnMuYyBiL3J1c3QvaGVscGVycy9oZWxwZXJzLmNcXG5pbmRleCA5OThlMzEwNTJlNjYwMS4uMWQ0ZWU1MWY1NzZiZWIgMTAwNjQ0XFxuLS0tIGEvcnVzdC9oZWxwZXJzL2hlbHBlcnMuY1xcbisrKyBiL3J1c3QvaGVscGVycy9oZWxwZXJzLmNcXG5AQCAtNzIsNiArNzIsNyBAQFxcbiAjaW5jbHVkZSBcXFwibWFwbGVfdHJlZS5jXFxcIlxcbiAjaW5jbHVkZSBcXFwibW0uY1xcXCJcXG4gI2luY2x1ZGUgXFxcIm11dGV4LmNcXFwiXFxuKyNpbmNsdWRlIFxcXCJuZXQvZ2VuZXRsaW5rLmNcXFwiXFxuICNpbmNsdWRlIFxcXCJvZi5jXFxcIlxcbiAjaW5jbHVkZSBcXFwicGFnZS5jXFxcIlxcbiAjaW5jbHVkZSBcXFwicGNpLmNcXFwiXFxuZGlmZiAtLWdpdCBhL3J1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmMgYi9ydXN0L2hlbHBlcnMvbmV0L2dlbmV0bGluay5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzUzMGI2OWY2Y2Y3MDdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvcnVzdC9oZWxwZXJzL25ldC9nZW5ldGxpbmsuY1xcbkBAIC0wLDAgKzEsNDYgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBHb29nbGUgTExDLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxuK1xcbisjaWZkZWYgQ09ORklHX05FVFxcbitcXG4rX19ydXN0X2hlbHBlciBzdHJ1Y3Qgc2tfYnVmZiAqcnVzdF9oZWxwZXJfZ2VubG1zZ19uZXcoc2l6ZV90IHBheWxvYWQsIGdmcF90IGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBnZW5sbXNnX25ldyhwYXlsb2FkLCBmbGFncyk7XFxuK31cXG4rXFxuK19fcnVzdF9oZWxwZXJcXG4raW50IHJ1c3RfaGVscGVyX2dlbmxtc2dfbXVsdGljYXN0KGNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGdyb3VwLCBnZnBfdCBmbGFncylcXG4re1xcbitcXHRyZXR1cm4gZ2VubG1zZ19tdWx0aWNhc3QoZmFtaWx5LCBza2IsIHBvcnRpZCwgZ3JvdXAsIGZsYWdzKTtcXG4rfVxcbitcXG4rX19ydXN0X2hlbHBlciB2b2lkIHJ1c3RfaGVscGVyX2dlbmxtc2dfY2FuY2VsKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcilcXG4re1xcbitcXHRnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7XFxuK31cXG4rXFxuK19fcnVzdF9oZWxwZXIgdm9pZCBydXN0X2hlbHBlcl9nZW5sbXNnX2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIpXFxuK3tcXG4rXFx0Z2VubG1zZ19lbmQoc2tiLCBoZHIpO1xcbit9XFxuK1xcbitfX3J1c3RfaGVscGVyIHZvaWQgcnVzdF9oZWxwZXJfbmxtc2dfZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdG5sbXNnX2ZyZWUoc2tiKTtcXG4rfVxcbitcXG4rX19ydXN0X2hlbHBlclxcbitpbnQgcnVzdF9oZWxwZXJfZ2VubF9oYXNfbGlzdGVuZXJzKGNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBncm91cClcXG4re1xcbitcXHRyZXR1cm4gZ2VubF9oYXNfbGlzdGVuZXJzKGZhbWlseSwgbmV0LCBncm91cCk7XFxuK31cXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9uZXQucnMgYi9ydXN0L2tlcm5lbC9uZXQvbW9kLnJzXFxuc2ltaWxhcml0eSBpbmRleCA4NSVcXG5yZW5hbWUgZnJvbSBydXN0L2tlcm5lbC9uZXQucnNcXG5yZW5hbWUgdG8gcnVzdC9rZXJuZWwvbmV0L21vZC5yc1xcbmluZGV4IGZlNDE1Y2IzNjlkM2FjLi44ZWNhZTc1NzdlZDI5NSAxMDA2NDRcXG4tLS0gYS9ydXN0L2tlcm5lbC9uZXQucnNcXG4rKysgYi9ydXN0L2tlcm5lbC9uZXQvbW9kLnJzXFxuQEAgLTQsMyArNCw1IEBAXFxuIFxcbiAjW2NmZyhDT05GSUdfUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TKV1cXG4gcHViIG1vZCBwaHk7XFxuK1xcbitwdWIgbW9kIG5ldGxpbms7XFxuZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzIGIvcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yMmVmM2RkZTM2ZmExYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yc1xcbkBAIC0wLDAgKzEsMzM3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlIExMQy5cXG4rXFxuKy8vISBSdXN0IHN1cHBvcnQgZm9yIGdlbmVyaWMgbmV0bGluay5cXG4rLy8hXFxuKy8vISBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBleHBvc2luZyBtdWx0aWNhc3QgZ3JvdXBzLlxcbisvLyFcXG4rLy8hIEMgaGVhZGVyOiBbYGluY2x1ZGUvbmV0L2dlbmV0bGluay5oYF0oc3JjdHJlZS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaClcXG4rXFxuK3VzZSBrZXJuZWw6OntcXG4rICAgIGFsbG9jOjp7c2VsZiwgQWxsb2NFcnJvcn0sXFxuKyAgICBlcnJvcjo6dG9fcmVzdWx0LFxcbisgICAgcHJlbHVkZTo6KixcXG4rICAgIHRyYW5zbXV0ZTo6QXNCeXRlcyxcXG4rICAgIHR5cGVzOjpPcGFxdWUsXFxuKyAgICBUaGlzTW9kdWxlLFxcbit9O1xcbitcXG4rdXNlIGNvcmU6OntcXG4rICAgIG1lbTo6TWFudWFsbHlEcm9wLFxcbisgICAgcHRyOjpOb25OdWxsLCAvL1xcbit9O1xcbitcXG4rLy8vIFRoZSBkZWZhdWx0IG5ldGxpbmsgbWVzc2FnZSBzaXplLlxcbitwdWIgY29uc3QgR0VOTE1TR19ERUZBVUxUX1NJWkU6IHVzaXplID0gYmluZGluZ3M6OkdFTkxNU0dfREVGQVVMVF9TSVpFO1xcbitcXG4rLy8vIEEgd3JhcHBlciBhcm91bmQgYHN0cnVjdCBza19idWZmYCBmb3IgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2VzLlxcbisvLy9cXG4rLy8vIFRoaXMgdHlwZSBpcyBpbnRlbmRlZCB0byBiZSBzcGVjaWZpYyBmb3IgYnVmZmVycyB1c2VkIHdpdGggbmV0bGluayBvbmx5LCBhbmQgb3RoZXIgdXNlY2FzZXMgZm9yXFxuKy8vLyBgc3RydWN0IHNrX2J1ZmZgIGFyZSBvdXQtb2Ytc2NvcGUgZm9yIHRoaXMgYWJzdHJhY3Rpb24uXFxuKy8vL1xcbisvLy8gIyBJbnZhcmlhbnRzXFxuKy8vL1xcbisvLy8gVGhlIHBvaW50ZXIgaGFzIG93bmVyc2hpcCBvdmVyIGEgdmFsaWQgYHNrX2J1ZmZgLlxcbitwdWIgc3RydWN0IE5ldGxpbmtTa0J1ZmYge1xcbisgICAgc2tiOiBOb25OdWxsXFx1MDAzY2tlcm5lbDo6YmluZGluZ3M6OnNrX2J1ZmZcXHUwMDNlLFxcbit9XFxuK1xcbitpbXBsIE5ldGxpbmtTa0J1ZmYge1xcbisgICAgLy8vIENyZWF0ZXMgYSBuZXcgYE5ldGxpbmtTa0J1ZmZgIHdpdGggdGhlIGdpdmVuIHNpemUuXFxuKyAgICBwdWIgZm4gbmV3KHNpemU6IHVzaXplLCBmbGFnczogYWxsb2M6OkZsYWdzKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjTmV0bGlua1NrQnVmZiwgQWxsb2NFcnJvclxcdTAwM2Uge1xcbisgICAgICAgIC8vIFNBRkVUWTogYGdlbmxtc2dfbmV3YCBvbmx5IHJlcXVpcmVzIGl0cyBhcmd1bWVudHMgdG8gYmUgdmFsaWQgaW50ZWdlcnMuXFxuKyAgICAgICAgbGV0IHNrYiA9IHVuc2FmZSB7IGJpbmRpbmdzOjpnZW5sbXNnX25ldyhzaXplLCBmbGFncy5hc19yYXcoKSkgfTtcXG4rICAgICAgICBsZXQgc2tiID0gTm9uTnVsbDo6bmV3KHNrYikub2tfb3IoQWxsb2NFcnJvcik/O1xcbisgICAgICAgIE9rKE5ldGxpbmtTa0J1ZmYgeyBza2IgfSlcXG4rICAgIH1cXG4rXFxuKyAgICAvLy8gUHV0cyBhIGdlbmVyaWMgbmV0bGluayBoZWFkZXIgaW50byB0aGUgYE5ldGxpbmtTa0J1ZmZgLlxcbisgICAgcHViIGZuIGdlbmxtc2dfcHV0KFxcbisgICAgICAgIHNlbGYsXFxuKyAgICAgICAgcG9ydGlkOiB1MzIsXFxuKyAgICAgICAgc2VxOiB1MzIsXFxuKyAgICAgICAgZmFtaWx5OiBcXHUwMDI2J3N0YXRpYyBGYW1pbHksXFxuKyAgICAgICAgY21kOiB1OCxcXG4rICAgICkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY0dlbmxNc2csIEFsbG9jRXJyb3JcXHUwMDNlIHtcXG4rICAgICAgICBsZXQgc2tiID0gc2VsZi5za2IuYXNfcHRyKCk7XFxuKyAgICAgICAgLy8gU0FGRVRZOiBUaGUgc2tiIGFuZCBmYW1pbHkgcG9pbnRlcnMgYXJlIHZhbGlkLlxcbisgICAgICAgIGxldCBoZHIgPSB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgZmFtaWx5LmFzX3JhdygpLCAwLCBjbWQpIH07XFxuKyAgICAgICAgbGV0IGhkciA9IE5vbk51bGw6Om5ldyhoZHIpLm9rX29yKEFsbG9jRXJyb3IpPztcXG4rICAgICAgICBPayhHZW5sTXNnIHsgc2tiOiBzZWxmLCBoZHIgfSlcXG4rICAgIH1cXG4rfVxcbitcXG4raW1wbCBEcm9wIGZvciBOZXRsaW5rU2tCdWZmIHtcXG4rICAgIGZuIGRyb3AoXFx1MDAyNm11dCBzZWxmKSB7XFxuKyAgICAgICAgLy8gU0FGRVRZOiBXZSBoYXZlIG93bmVyc2hpcCBvdmVyIHRoZSBgc2tfYnVmZmAsIHNvIHdlIG1heSBmcmVlIGl0LlxcbisgICAgICAgIHVuc2FmZSB7IGJpbmRpbmdzOjpubG1zZ19mcmVlKHNlbGYuc2tiLmFzX3B0cigpKSB9XFxuKyAgICB9XFxuK31cXG4rXFxuKy8vLyBBIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlIGJlaW5nIGNvbnN0cnVjdGVkLlxcbisvLy9cXG4rLy8vICMgSW52YXJpYW50c1xcbisvLy9cXG4rLy8vIGBoZHJgIHJlZmVyZW5jZXMgdGhlIGhlYWRlciBpbiB0aGlzIG5ldGxpbmsgbWVzc2FnZS5cXG4rcHViIHN0cnVjdCBHZW5sTXNnIHtcXG4rICAgIHNrYjogTmV0bGlua1NrQnVmZixcXG4rICAgIGhkcjogTm9uTnVsbFxcdTAwM2NjX3ZvaWRcXHUwMDNlLFxcbit9XFxuK1xcbitpbXBsIEdlbmxNc2cge1xcbisgICAgLy8vIFB1dHMgYW4gYXR0cmlidXRlIGludG8gdGhlIG1lc3NhZ2UuXFxuKyAgICAjW2lubGluZV1cXG4rICAgIGZuIHB1dFxcdTAwM2NUXFx1MDAzZShcXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6IFxcdTAwMjZUKSAtXFx1MDAzZSBSZXN1bHRcXG4rICAgIHdoZXJlXFxuKyAgICAgICAgVDogP1NpemVkICsgQXNCeXRlcyxcXG4rICAgIHtcXG4rICAgICAgICBsZXQgc2tiID0gc2VsZi5za2Iuc2tiLmFzX3B0cigpO1xcbisgICAgICAgIGxldCBsZW4gPSBzaXplX29mX3ZhbCh2YWx1ZSk7XFxuKyAgICAgICAgbGV0IHB0ciA9IGNvcmU6OnB0cjo6ZnJvbV9yZWYodmFsdWUpLmNhc3Q6OlxcdTAwM2NjX3ZvaWRcXHUwMDNlKCk7XFxuKyAgICAgICAgLy8gU0FGRVRZOiBgc2tiYCBpcyB2YWxpZCBieSBgTmV0bGlua1NrQnVmZmAgdHlwZSBpbnZhcmlhbnRzLCBhbmQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzXFxuKyAgICAgICAgLy8gcmVhZGFibGUgYW5kIGluaXRpYWxpemVkIGZvciBpdHMgYHNpemVfb2ZgIGJ5dGVzLlxcbisgICAgICAgIHRvX3Jlc3VsdCh1bnNhZmUgeyBiaW5kaW5nczo6bmxhX3B1dChza2IsIGF0dHJ0eXBlLCBsZW4gYXMgY19pbnQsIHB0cikgfSlcXG4rICAgIH1cXG4rXFxuKyAgICAvLy8gUHV0cyBhIGB1MzJgIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLlxcbisgICAgI1tpbmxpbmVdXFxuKyAgICBwdWIgZm4gcHV0X3UzMihcXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6IHUzMikgLVxcdTAwM2UgUmVzdWx0IHtcXG4rICAgICAgICBzZWxmLnB1dChhdHRydHlwZSwgXFx1MDAyNnZhbHVlKVxcbisgICAgfVxcbitcXG4rICAgIC8vLyBQdXRzIGEgc3RyaW5nIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLlxcbisgICAgI1tpbmxpbmVdXFxuKyAgICBwdWIgZm4gcHV0X3N0cmluZyhcXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6IFxcdTAwMjZDU3RyKSAtXFx1MDAzZSBSZXN1bHQge1xcbisgICAgICAgIHNlbGYucHV0KGF0dHJ0eXBlLCB2YWx1ZS50b19ieXRlc193aXRoX251bCgpKVxcbisgICAgfVxcbitcXG4rICAgIC8vLyBQdXRzIGEgZmxhZyBhdHRyaWJ1dGUgaW50byB0aGUgbWVzc2FnZS5cXG4rICAgICNbaW5saW5lXVxcbisgICAgcHViIGZuIHB1dF9mbGFnKFxcdTAwMjZtdXQgc2VsZiwgYXR0cnR5cGU6IGNfaW50KSAtXFx1MDAzZSBSZXN1bHQge1xcbisgICAgICAgIGxldCBza2IgPSBzZWxmLnNrYi5za2IuYXNfcHRyKCk7XFxuKyAgICAgICAgLy8gU0FGRVRZOiBgc2tiYCBpcyB2YWxpZCBieSBgTmV0bGlua1NrQnVmZmAgdHlwZSBpbnZhcmlhbnRzLCBhbmQgYSBudWxsIHBvaW50ZXIgaXMgdmFsaWRcXG4rICAgICAgICAvLyB3aGVuIHRoZSBsZW5ndGggaXMgemVyby5cXG4rICAgICAgICB0b19yZXN1bHQodW5zYWZlIHsgYmluZGluZ3M6Om5sYV9wdXQoc2tiLCBhdHRydHlwZSwgMCwgY29yZTo6cHRyOjpudWxsKCkpIH0pXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIFNlbmRzIHRoZSBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZSBhcyBhIG11bHRpY2FzdCBtZXNzYWdlLlxcbisgICAgI1tpbmxpbmVdXFxuKyAgICBwdWIgZm4gbXVsdGljYXN0KFxcbisgICAgICAgIHNlbGYsXFxuKyAgICAgICAgZmFtaWx5OiBcXHUwMDI2J3N0YXRpYyBGYW1pbHksXFxuKyAgICAgICAgcG9ydGlkOiB1MzIsXFxuKyAgICAgICAgZ3JvdXA6IHUzMixcXG4rICAgICAgICBmbGFnczogYWxsb2M6OkZsYWdzLFxcbisgICAgKSAtXFx1MDAzZSBSZXN1bHQge1xcbisgICAgICAgIGxldCBtZSA9IE1hbnVhbGx5RHJvcDo6bmV3KHNlbGYpO1xcbisgICAgICAgIC8vIFNBRkVUWTogVGhlIGBza2JgIGFuZCBgZmFtaWx5YCBwb2ludGVycyBhcmUgdmFsaWQuIFdlIHBhc3Mgb3duZXJzaGlwIG9mIHRoZSBgc2tiYCB0b1xcbisgICAgICAgIC8vIGBnZW5sbXNnX211bHRpY2FzdGAgYnkgbm90IGRyb3BwaW5nIGBzZWxmYC5cXG4rICAgICAgICB1bnNhZmUge1xcbisgICAgICAgICAgICBiaW5kaW5nczo6Z2VubG1zZ19lbmQobWUuc2tiLnNrYi5hc19wdHIoKSwgbWUuaGRyLmFzX3B0cigpKTtcXG4rICAgICAgICAgICAgdG9fcmVzdWx0KGJpbmRpbmdzOjpnZW5sbXNnX211bHRpY2FzdChcXG4rICAgICAgICAgICAgICAgIGZhbWlseS5hc19yYXcoKSxcXG4rICAgICAgICAgICAgICAgIG1lLnNrYi5za2IuYXNfcHRyKCksXFxuKyAgICAgICAgICAgICAgICBwb3J0aWQsXFxuKyAgICAgICAgICAgICAgICBncm91cCxcXG4rICAgICAgICAgICAgICAgIGZsYWdzLmFzX3JhdygpLFxcbisgICAgICAgICAgICApKVxcbisgICAgICAgIH1cXG4rICAgIH1cXG4rfVxcbitpbXBsIERyb3AgZm9yIEdlbmxNc2cge1xcbisgICAgZm4gZHJvcChcXHUwMDI2bXV0IHNlbGYpIHtcXG4rICAgICAgICAvLyBTQUZFVFk6IFRoZSBgaGRyYCBwb2ludGVyIHJlZmVyZW5jZXMgdGhlIGhlYWRlciBvZiB0aGlzIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlLlxcbisgICAgICAgIHVuc2FmZSB7IGJpbmRpbmdzOjpnZW5sbXNnX2NhbmNlbChzZWxmLnNrYi5za2IuYXNfcHRyKCksIHNlbGYuaGRyLmFzX3B0cigpKSB9O1xcbisgICAgfVxcbit9XFxuK1xcbisvLy8gRmxhZ3MgZm9yIGEgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseS5cXG4rc3RydWN0IEZhbWlseUZsYWdzIHtcXG4rICAgIC8vLyBXaGV0aGVyIHRoZSBmYW1pbHkgc3VwcG9ydHMgbmV0d29yayBuYW1lc3BhY2VzLlxcbisgICAgbmV0bnNvazogYm9vbCxcXG4rICAgIC8vLyBXaGV0aGVyIHRoZSBmYW1pbHkgc3VwcG9ydHMgcGFyYWxsZWwgb3BlcmF0aW9ucy5cXG4rICAgIHBhcmFsbGVsX29wczogYm9vbCxcXG4rfVxcbitcXG4raW1wbCBGYW1pbHlGbGFncyB7XFxuKyAgICAvLy8gQ29udmVydHMgdGhlIGZsYWdzIHRvIHRoZSBiaXRmaWVsZCByZXByZXNlbnRhdGlvbiB1c2VkIGJ5IGBnZW5sX2ZhbWlseWAuXFxuKyAgICBjb25zdCBmbiBpbnRvX2JpdGZpZWxkKHNlbGYpIC1cXHUwMDNlIGJpbmRpbmdzOjpfX0JpbmRnZW5CaXRmaWVsZFVuaXRcXHUwMDNjW3U4OyAxXVxcdTAwM2Uge1xcbisgICAgICAgIC8vIFRoZSBiZWxvdyBzaGlmdHMgYXJlIHZlcmlmaWVkIGNvcnJlY3QgYnkgdGVzdF9mYW1pbHlfZmxhZ3NfYml0ZmllbGQoKSBiZWxvdy5cXG4rICAgICAgICAvL1xcbisgICAgICAgIC8vIEFsdGhvdWdoIGJpbmRnZW4gZ2VuZXJhdGVzIGhlbHBlcnMgdG8gY2hhbmdlIGJpdGZpZWxkcyBiYXNlZCBvbiB0aGUgQyBoZWFkZXJzLCB0aGVzZVxcbisgICAgICAgIC8vIGhlbHBlcnMgdW5mb3J0dW5hdGVseSBjYW4ndCBiZSB1c2VkIGluIGNvbnN0IGNvbnRleHQuIFNpbmNlIGBGYW1pbHlgIG5lZWRzIHRvIGJlIGZpbGxlZFxcbisgICAgICAgIC8vIG91dCBhdCBidWlsZC10aW1lLCB3ZSB1c2UgdGhpcyBoZWxwZXIgaW5zdGVhZC5cXG4rICAgICAgICBsZXQgbXV0IGJpdHMgPSAwO1xcbisgICAgICAgIGlmIHNlbGYubmV0bnNvayB7XFxuKyAgICAgICAgICAgIGJpdHMgfD0gMSBcXHUwMDNjXFx1MDAzYyAwO1xcbisgICAgICAgIH1cXG4rICAgICAgICBpZiBzZWxmLnBhcmFsbGVsX29wcyB7XFxuKyAgICAgICAgICAgIGJpdHMgfD0gMSBcXHUwMDNjXFx1MDAzYyAxO1xcbisgICAgICAgIH1cXG4rICAgICAgICAvLyBDb252ZXJ0IGZyb20gbGl0dGxlIGVuZGlhbiB0byB0aGUgdGFyZ2V0J3MgZW5kaWFubmVzcy5cXG4rICAgICAgICBiaXRzID0gdTg6OmZyb21fbGUoYml0cyk7XFxuKyAgICAgICAgLy8gU0FGRVRZOiBUaGlzIGJpdGZpZWxkIGlzIHJlcHJlc2VudGVkIGFzIGFuIHU4LlxcbisgICAgICAgIHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlOjpcXHUwMDNjdTgsIGJpbmRpbmdzOjpfX0JpbmRnZW5CaXRmaWVsZFVuaXRcXHUwMDNjW3U4OyAxXVxcdTAwM2VcXHUwMDNlKGJpdHMpIH1cXG4rICAgIH1cXG4rfVxcbitcXG4rLy8vIEEgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseS5cXG4rI1tyZXByKHRyYW5zcGFyZW50KV1cXG4rcHViIHN0cnVjdCBGYW1pbHkge1xcbisgICAgaW5uZXI6IE9wYXF1ZVxcdTAwM2NiaW5kaW5nczo6Z2VubF9mYW1pbHlcXHUwMDNlLFxcbit9XFxuK1xcbisvLyBTQUZFVFk6IFRoZSBgRmFtaWx5YCB0eXBlIGlzIHRocmVhZCBzYWZlLlxcbit1bnNhZmUgaW1wbCBTeW5jIGZvciBGYW1pbHkge31cXG4rXFxuK2ltcGwgRmFtaWx5IHtcXG4rICAgIC8vLyBDcmVhdGVzIGEgbmV3IGBGYW1pbHlgIGluc3RhbmNlLlxcbisgICAgLy8vXFxuKyAgICAvLy8gSW50ZW5kZWQgdG8gYmUgdXNlZCBmcm9tIGNvbnN0IGNvbnRleHQgb25seS4gV2lsbCBwYW5pYyBpZiBwcm92aWRlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzLlxcbisgICAgLy8vXFxuKyAgICAvLy8gVGhlIG5hbWUgbXVzdCBiZSBhIG51bC10ZXJtaW5hdGVkIHN0cmluZywgYnV0IGl0IGlzIHRha2VuIGFzIGBcXHUwMDI2W3U4XWAgc28gdGhhdCBpdCBjYW4gYmUgdXNlZFxcbisgICAgLy8vIG1vcmUgY29udmVuaWVudGx5IHdpdGggdGhlIHN0cmluZ3MgZ2VuZXJhdGVkIGJ5IGJpbmRnZW4uXFxuKyAgICBwdWIgY29uc3QgZm4gY29uc3RfbmV3KFxcbisgICAgICAgIG1vZHVsZTogXFx1MDAyNlRoaXNNb2R1bGUsXFxuKyAgICAgICAgbmFtZTogXFx1MDAyNlt1OF0sXFxuKyAgICAgICAgdmVyc2lvbjogdTMyLFxcbisgICAgICAgIG1jZ3JwczogXFx1MDAyNidzdGF0aWMgW011bHRpY2FzdEdyb3VwXSxcXG4rICAgICkgLVxcdTAwM2UgRmFtaWx5IHtcXG4rICAgICAgICBsZXQgbl9tY2dycHMgPSBtY2dycHMubGVuKCkgYXMgdTg7XFxuKyAgICAgICAgaWYgbl9tY2dycHMgYXMgdXNpemUgIT0gbWNncnBzLmxlbigpIHtcXG4rICAgICAgICAgICAgcGFuaWMhKFxcXCJ0b28gbWFueSBtY2dycHNcXFwiKTtcXG4rICAgICAgICB9XFxuKyAgICAgICAgbGV0IG11dCBnZW5sX2ZhbWlseSA9IGJpbmRpbmdzOjpnZW5sX2ZhbWlseSB7XFxuKyAgICAgICAgICAgIHZlcnNpb24sXFxuKyAgICAgICAgICAgIF9iaXRmaWVsZF8xOiBGYW1pbHlGbGFncyB7XFxuKyAgICAgICAgICAgICAgICBuZXRuc29rOiB0cnVlLFxcbisgICAgICAgICAgICAgICAgcGFyYWxsZWxfb3BzOiB0cnVlLFxcbisgICAgICAgICAgICB9XFxuKyAgICAgICAgICAgIC5pbnRvX2JpdGZpZWxkKCksXFxuKyAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlLmFzX3B0cigpLFxcbisgICAgICAgICAgICBtY2dycHM6IG1jZ3Jwcy5hc19wdHIoKS5jYXN0KCksXFxuKyAgICAgICAgICAgIG5fbWNncnBzLFxcbisgICAgICAgICAgICAuLnBpbl9pbml0Ojp6ZXJvZWQoKVxcbisgICAgICAgIH07XFxuKyAgICAgICAgaWYgQ1N0cjo6ZnJvbV9ieXRlc193aXRoX251bChuYW1lKS5pc19lcnIoKSB7XFxuKyAgICAgICAgICAgIHBhbmljIShcXFwiZ2VubF9mYW1pbHkgbmFtZSBub3QgbnVsLXRlcm1pbmF0ZWRcXFwiKTtcXG4rICAgICAgICB9XFxuKyAgICAgICAgaWYgZ2VubF9mYW1pbHkubmFtZS5sZW4oKSBcXHUwMDNjIG5hbWUubGVuKCkge1xcbisgICAgICAgICAgICBwYW5pYyEoXFxcImdlbmxfZmFtaWx5IG5hbWUgdG9vIGxvbmdcXFwiKTtcXG4rICAgICAgICB9XFxuKyAgICAgICAgbGV0IG11dCBpID0gMDtcXG4rICAgICAgICB3aGlsZSBpIFxcdTAwM2MgbmFtZS5sZW4oKSB7XFxuKyAgICAgICAgICAgIGdlbmxfZmFtaWx5Lm5hbWVbaV0gPSBuYW1lW2ldO1xcbisgICAgICAgICAgICBpICs9IDE7XFxuKyAgICAgICAgfVxcbisgICAgICAgIEZhbWlseSB7XFxuKyAgICAgICAgICAgIGlubmVyOiBPcGFxdWU6Om5ldyhnZW5sX2ZhbWlseSksXFxuKyAgICAgICAgfVxcbisgICAgfVxcbitcXG4rICAgIC8vLyBDaGVja3MgaWYgdGhlcmUgYXJlIGFueSBsaXN0ZW5lcnMgZm9yIHRoZSBnaXZlbiBtdWx0aWNhc3QgZ3JvdXAuXFxuKyAgICBwdWIgZm4gaGFzX2xpc3RlbmVycyhcXHUwMDI2c2VsZiwgZ3JvdXA6IHUzMikgLVxcdTAwM2UgYm9vbCB7XFxuKyAgICAgICAgLy8gU0FGRVRZOiBUaGUgZmFtaWx5IGFuZCBpbml0X25ldCBwb2ludGVycyBhcmUgdmFsaWQuXFxuKyAgICAgICAgdW5zYWZlIHtcXG4rICAgICAgICAgICAgYmluZGluZ3M6OmdlbmxfaGFzX2xpc3RlbmVycyhzZWxmLmFzX3JhdygpLCBcXHUwMDI2cmF3IG11dCBiaW5kaW5nczo6aW5pdF9uZXQsIGdyb3VwKSAhPSAwXFxuKyAgICAgICAgfVxcbisgICAgfVxcbitcXG4rICAgIC8vLyBSZXR1cm5zIGEgcmF3IHBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgYGdlbmxfZmFtaWx5YCBzdHJ1Y3R1cmUuXFxuKyAgICBwdWIgZm4gYXNfcmF3KFxcdTAwMjZzZWxmKSAtXFx1MDAzZSAqbXV0IGJpbmRpbmdzOjpnZW5sX2ZhbWlseSB7XFxuKyAgICAgICAgc2VsZi5pbm5lci5nZXQoKVxcbisgICAgfVxcbit9XFxuK1xcbisvLy8gQSBnZW5lcmljIG5ldGxpbmsgbXVsdGljYXN0IGdyb3VwLlxcbisjW3JlcHIodHJhbnNwYXJlbnQpXVxcbitwdWIgc3RydWN0IE11bHRpY2FzdEdyb3VwIHtcXG4rICAgIC8vIE5vIE9wYXF1ZSBiZWNhdXNlIGZ1bGx5IGltbXV0YWJsZVxcbisgICAgZ3JvdXA6IGJpbmRpbmdzOjpnZW5sX211bHRpY2FzdF9ncm91cCxcXG4rfVxcbitcXG4rLy8gU0FGRVRZOiBQdXJlIGRhdGEgc28gdGhyZWFkIHNhZmUuXFxuK3Vuc2FmZSBpbXBsIFN5bmMgZm9yIE11bHRpY2FzdEdyb3VwIHt9XFxuK1xcbitpbXBsIE11bHRpY2FzdEdyb3VwIHtcXG4rICAgIC8vLyBDcmVhdGVzIGEgbmV3IGBNdWx0aWNhc3RHcm91cGAgaW5zdGFuY2UuXFxuKyAgICAvLy9cXG4rICAgIC8vLyBJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20gY29uc3QgY29udGV4dCBvbmx5LiBXaWxsIHBhbmljIGlmIHByb3ZpZGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHMuXFxuKyAgICBwdWIgY29uc3QgZm4gY29uc3RfbmV3KG5hbWU6IFxcdTAwMjZDU3RyKSAtXFx1MDAzZSBNdWx0aWNhc3RHcm91cCB7XFxuKyAgICAgICAgbGV0IG11dCBncm91cDogYmluZGluZ3M6OmdlbmxfbXVsdGljYXN0X2dyb3VwID0gcGluX2luaXQ6Onplcm9lZCgpO1xcbitcXG4rICAgICAgICBsZXQgbmFtZSA9IG5hbWUudG9fYnl0ZXNfd2l0aF9udWwoKTtcXG4rICAgICAgICBpZiBncm91cC5uYW1lLmxlbigpIFxcdTAwM2MgbmFtZS5sZW4oKSB7XFxuKyAgICAgICAgICAgIHBhbmljIShcXFwiZ2VubF9tdWx0aWNhc3RfZ3JvdXAgbmFtZSB0b28gbG9uZ1xcXCIpO1xcbisgICAgICAgIH1cXG4rICAgICAgICBsZXQgbXV0IGkgPSAwO1xcbisgICAgICAgIHdoaWxlIGkgXFx1MDAzYyBuYW1lLmxlbigpIHtcXG4rICAgICAgICAgICAgZ3JvdXAubmFtZVtpXSA9IG5hbWVbaV07XFxuKyAgICAgICAgICAgIGkgKz0gMTtcXG4rICAgICAgICB9XFxuK1xcbisgICAgICAgIE11bHRpY2FzdEdyb3VwIHsgZ3JvdXAgfVxcbisgICAgfVxcbit9XFxuK1xcbisvLy8gQSByZWdpc3RyYXRpb24gb2YgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LlxcbisvLy9cXG4rLy8vIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSByZWdpc3RyYXRpb24gb2YgYSBbYEZhbWlseWBdLiBXaGVuIGFuIGluc3RhbmNlIG9mIHRoaXMgdHlwZSBpc1xcbisvLy8gZHJvcHBlZCwgaXRzIHJlc3BlY3RpdmUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSB3aWxsIGJlIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBzeXN0ZW0uXFxuKy8vL1xcbisvLy8gIyBJbnZhcmlhbnRzXFxuKy8vL1xcbisvLy8gYHNlbGYuZmFtaWx5YCBhbHdheXMgaG9sZHMgYSB2YWxpZCByZWZlcmVuY2UgdG8gYW4gaW5pdGlhbGl6ZWQgYW5kIHJlZ2lzdGVyZWQgW2BGYW1pbHlgXS5cXG4rcHViIHN0cnVjdCBSZWdpc3RyYXRpb24ge1xcbisgICAgZmFtaWx5OiBcXHUwMDI2J3N0YXRpYyBGYW1pbHksXFxuK31cXG4rXFxuK2ltcGwgRmFtaWx5IHtcXG4rICAgIC8vLyBSZWdpc3RlcnMgdGhlIGdlbmVyaWMgbmV0bGluayBmYW1pbHkgd2l0aCB0aGUga2VybmVsLlxcbisgICAgcHViIGZuIHJlZ2lzdGVyKFxcdTAwMjYnc3RhdGljIHNlbGYpIC1cXHUwMDNlIFJlc3VsdFxcdTAwM2NSZWdpc3RyYXRpb25cXHUwMDNlIHtcXG4rICAgICAgICAvLyBTQUZFVFk6IGBzZWxmLmFzX3JhdygpYCBpcyBhIHZhbGlkIHBvaW50ZXIgdG8gYSBgZ2VubF9mYW1pbHlgIHN0cnVjdC5cXG4rICAgICAgICAvLyBUaGUgYGdlbmxfZmFtaWx5YCBzdHJ1Y3QgaXMgc3RhdGljLCBzbyBpdCB3aWxsIG91dGxpdmUgdGhlIHJlZ2lzdHJhdGlvbi5cXG4rICAgICAgICB0b19yZXN1bHQodW5zYWZlIHsgYmluZGluZ3M6OmdlbmxfcmVnaXN0ZXJfZmFtaWx5KHNlbGYuYXNfcmF3KCkpIH0pPztcXG4rICAgICAgICBPayhSZWdpc3RyYXRpb24geyBmYW1pbHk6IHNlbGYgfSlcXG4rICAgIH1cXG4rfVxcbitcXG4raW1wbCBEcm9wIGZvciBSZWdpc3RyYXRpb24ge1xcbisgICAgZm4gZHJvcChcXHUwMDI2bXV0IHNlbGYpIHtcXG4rICAgICAgICAvLyBTQUZFVFk6IGBzZWxmLmZhbWlseS5hc19yYXcoKWAgaXMgYSB2YWxpZCBwb2ludGVyIHRvIGEgcmVnaXN0ZXJlZCBgZ2VubF9mYW1pbHlgIHN0cnVjdC5cXG4rICAgICAgICAvLyBUaGUgYFJlZ2lzdHJhdGlvbmAgc3RydWN0IGVuc3VyZXMgdGhhdCBgZ2VubF91bnJlZ2lzdGVyX2ZhbWlseWAgaXMgY2FsbGVkIGV4YWN0bHkgb25jZVxcbisgICAgICAgIC8vIGZvciB0aGlzIGZhbWlseSB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLlxcbisgICAgICAgIHVuc2FmZSB7IGJpbmRpbmdzOjpnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KHNlbGYuZmFtaWx5LmFzX3JhdygpKSB9O1xcbisgICAgfVxcbit9XFxuK1xcbisjW21hY3Jvczo6a3VuaXRfdGVzdHMocnVzdF9uZXRsaW5rKV1cXG4rbW9kIHRlc3RzIHtcXG4rICAgIHVzZSBzdXBlcjo6KjtcXG4rXFxuKyAgICAjW3Rlc3RdXFxuKyAgICBmbiB0ZXN0X2ZhbWlseV9mbGFnc19iaXRmaWVsZCgpIHtcXG4rICAgICAgICBmb3IgbmV0bnNvayBpbiBbZmFsc2UsIHRydWVdIHtcXG4rICAgICAgICAgICAgZm9yIHBhcmFsbGVsX29wcyBpbiBbZmFsc2UsIHRydWVdIHtcXG4rICAgICAgICAgICAgICAgIGxldCBtdXQgYl9mYW0gPSBiaW5kaW5nczo6Z2VubF9mYW1pbHkge1xcbisgICAgICAgICAgICAgICAgICAgIC4uRGVmYXVsdDo6ZGVmYXVsdCgpXFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICAgICAgYl9mYW0uc2V0X25ldG5zb2soaWYgbmV0bnNvayB7IDEgfSBlbHNlIHsgMCB9KTtcXG4rICAgICAgICAgICAgICAgIGJfZmFtLnNldF9wYXJhbGxlbF9vcHMoaWYgcGFyYWxsZWxfb3BzIHsgMSB9IGVsc2UgeyAwIH0pO1xcbitcXG4rICAgICAgICAgICAgICAgIGxldCBjX2JpdGZpZWxkID0gRmFtaWx5RmxhZ3Mge1xcbisgICAgICAgICAgICAgICAgICAgIG5ldG5zb2ssXFxuKyAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWxfb3BzLFxcbisgICAgICAgICAgICAgICAgfVxcbisgICAgICAgICAgICAgICAgLmludG9fYml0ZmllbGQoKTtcXG4rXFxuKyAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IFRoZSBiaXQgZmllbGQgaXMgc3RvcmVkIGFzIHU4LlxcbisgICAgICAgICAgICAgICAgbGV0IGJfdmFsOiB1OCA9IHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlKGJfZmFtLl9iaXRmaWVsZF8xKSB9O1xcbisgICAgICAgICAgICAgICAgLy8gU0FGRVRZOiBUaGUgYml0IGZpZWxkIGlzIHN0b3JlZCBhcyB1OC5cXG4rICAgICAgICAgICAgICAgIGxldCBjX3ZhbDogdTggPSB1bnNhZmUgeyBjb3JlOjptZW06OnRyYW5zbXV0ZShjX2JpdGZpZWxkKSB9O1xcbisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxIShiX3ZhbCwgY192YWwpO1xcbisgICAgICAgICAgICB9XFxuKyAgICAgICAgfVxcbisgICAgfVxcbit9XFxuZGlmZiAtLWdpdCBhL3J1c3QvdWFwaS91YXBpX2hlbHBlci5oIGIvcnVzdC91YXBpL3VhcGlfaGVscGVyLmhcXG5pbmRleCAwNmQ3ZDFhMmU4ZGFiYS4uODZjN2I2YjI4NGIwNWEgMTAwNjQ0XFxuLS0tIGEvcnVzdC91YXBpL3VhcGlfaGVscGVyLmhcXG4rKysgYi9ydXN0L3VhcGkvdWFwaV9oZWxwZXIuaFxcbkBAIC0xMSw2ICsxMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1YXBpL2RybS9ub3ZhX2RybS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9kcm0vcGFudGhvcl9kcm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvYW5kcm9pZC9iaW5kZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvYW5kcm9pZC9iaW5kZXJfbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L21paS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9ldGh0b29sLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU1OjU1LjYzNzg4MjA5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3OTE1NzAzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZXBvcnRfbmV0bGlua19pbm5lclwiLFxuICAgIFwicmVwb3J0X25ldGxpbmtcIixcbiAgICBcImdlbmxtc2dfcHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBuZXRsaW5rIG11bHRpY2FzdCByZXBvcnRpbmcgZm9yIEFuZHJvaWQgQmluZGVyIHRyYW5zYWN0aW9uIGZhaWx1cmVzIGluIFJ1c3QuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBmb3IgY29uc3RydWN0aW5nIGFuZCBicm9hZGNhc3RpbmcgbmV0bGluayBtZXNzYWdlcyB3aGVuIGJpbmRlciB0cmFuc2FjdGlvbnMgZmFpbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NWUyODA0MDk2MmE1ZjFkNzE5OTU2ZjI3ODBiN2U3ZTYzNWQ1YzI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxNzo1NTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGMzZjcyMDU4YTJmMjZlLi5iZTVhMTk2ZjEyYzZhZiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTE4ODc1LDYgKzE4ODc1LDggQEAgRjpcdGluY2x1ZGUvdWFwaS9saW51eC9zY3RwLmhcbiBGOlx0bGliL25ldF91dGlscy5jXG4gRjpcdGxpYi9yYW5kb20zMi5jXG4gRjpcdG5ldC9cbitGOlx0cnVzdC9oZWxwZXJzL25ldC9cbitGOlx0cnVzdC9rZXJuZWwvbmV0L1xuIEY6XHRzYW1wbGVzL3BrdGdlbi9cbiBGOlx0dG9vbHMvbmV0L1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWcgYi9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZ1xuaW5kZXggZTJlNDAyYzlkMTc1OWMuLjYwNmE5ZDA3Zjc3NDcxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWdcbisrKyBiL2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnXG5AQCAtMTYsNyArMTYsNyBAQCBjb25maWcgQU5EUk9JRF9CSU5ERVJfSVBDXG4gXG4gY29uZmlnIEFORFJPSURfQklOREVSX0lQQ19SVVNUXG4gXHRib29sIFwiUnVzdCB2ZXJzaW9uIG9mIEFuZHJvaWQgQmluZGVyIElQQyBEcml2ZXJcIlxuLVx0ZGVwZW5kcyBvbiBSVVNUIFx1MDAyNlx1MDAyNiBNTVUgXHUwMDI2XHUwMDI2ICFBTkRST0lEX0JJTkRFUl9JUENcbitcdGRlcGVuZHMgb24gUlVTVCBcdTAwMjZcdTAwMjYgTU1VIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2ICFBTkRST0lEX0JJTkRFUl9JUENcbiBcdGhlbHBcbiBcdCAgVGhpcyBlbmFibGVzIHRoZSBSdXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBCaW5kZXIgZHJpdmVyLlxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5ycyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5yc1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZWI3ZWEyZWRhZmY3MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzXG5AQCAtMCwwICsxLDExNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoKEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUpIE9SIEJTRC0zLUNsYXVzZSlcbisvKiBCYXNlZCBvbjogRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2JpbmRlci55YW1sICovXG4rXG4rIyFbYWxsb3codW5yZWFjaGFibGVfcHViLCBjbGlwcHk6Ondyb25nX3NlbGZfY29udmVudGlvbildXG4rdXNlIGtlcm5lbDo6e1xuKyAgICBuZXQ6Om5ldGxpbms6OntcbisgICAgICAgIEZhbWlseSxcbisgICAgICAgIEdlbmxNc2csXG4rICAgICAgICBNdWx0aWNhc3RHcm91cCxcbisgICAgICAgIE5ldGxpbmtTa0J1ZmYsIC8vXG4rICAgIH0sXG4rICAgIHByZWx1ZGU6OiosIC8vXG4rfTtcbitcbitwdWIgc3RhdGljIEJJTkRFUl9OTF9GQU1JTFk6IEZhbWlseSA9IEZhbWlseTo6Y29uc3RfbmV3KFxuKyAgICBcdTAwMjZjcmF0ZTo6VEhJU19NT0RVTEUsXG4rICAgIGtlcm5lbDo6dWFwaTo6QklOREVSX0ZBTUlMWV9OQU1FLFxuKyAgICBrZXJuZWw6OnVhcGk6OkJJTkRFUl9GQU1JTFlfVkVSU0lPTixcbisgICAgXHUwMDI2QklOREVSX05MX0ZBTUlMWV9NQ0dSUFMsXG4rKTtcbitcbitzdGF0aWMgQklOREVSX05MX0ZBTUlMWV9NQ0dSUFM6IFtNdWx0aWNhc3RHcm91cDsgMV0gPSBbTXVsdGljYXN0R3JvdXA6OmNvbnN0X25ldyhjXCJyZXBvcnRcIildO1xuK1xuKy8vLyBBIG11bHRpY2FzdCBldmVudCBzZW50IHRvIHVzZXJzcGFjZSBzdWJzY3JpYmVycyB0byBub3RpZnkgdGhlbSBhYm91dFxuKy8vLyBiaW5kZXIgdHJhbnNhY3Rpb24gZmFpbHVyZXMuIFRoZSBnZW5lcmF0ZWQgcmVwb3J0IHByb3ZpZGVzIHRoZSBmdWxsXG4rLy8vIGRldGFpbHMgb2YgdGhlIHNwZWNpZmljIHRyYW5zYWN0aW9uIHRoYXQgZmFpbGVkLiBUaGUgaW50ZW50aW9uIGlzIGZvclxuKy8vLyBwcm9ncmFtcyB0byBtb25pdG9yIHRoZXNlIGV2ZW50cyBhbmQgcmVhY3QgdG8gdGhlIGZhaWx1cmVzIGFzIG5lZWRlZC5cbitwdWIgc3RydWN0IFJlcG9ydCB7XG4rICAgIHNrYjogR2VubE1zZyxcbit9XG4rXG4raW1wbCBSZXBvcnQge1xuKyAgICAvLy8gQ3JlYXRlIGEgbmV3IG11bHRpY2FzdCBtZXNzYWdlLlxuKyAgICBwdWIgZm4gbmV3KFxuKyAgICAgICAgc2l6ZTogdXNpemUsXG4rICAgICAgICBwb3J0aWQ6IHUzMixcbisgICAgICAgIHNlcTogdTMyLFxuKyAgICAgICAgZmxhZ3M6IGtlcm5lbDo6YWxsb2M6OkZsYWdzLFxuKyAgICApIC1cdTAwM2UgUmVzdWx0XHUwMDNjU2VsZiwga2VybmVsOjphbGxvYzo6QWxsb2NFcnJvclx1MDAzZSB7XG4rICAgICAgICBjb25zdCBCSU5ERVJfQ01EX1JFUE9SVDogdTggPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9DTURfUkVQT1JUIGFzIHU4O1xuKyAgICAgICAgbGV0IHNrYiA9IE5ldGxpbmtTa0J1ZmY6Om5ldyhzaXplLCBmbGFncyk/O1xuKyAgICAgICAgbGV0IHNrYiA9IHNrYi5nZW5sbXNnX3B1dChwb3J0aWQsIHNlcSwgXHUwMDI2QklOREVSX05MX0ZBTUlMWSwgQklOREVSX0NNRF9SRVBPUlQpPztcbisgICAgICAgIE9rKFNlbGYgeyBza2IgfSlcbisgICAgfVxuK1xuKyAgICAvLy8gQnJvYWRjYXN0IHRoaXMgbWVzc2FnZS5cbisgICAgcHViIGZuIG11bHRpY2FzdChzZWxmLCBwb3J0aWQ6IHUzMiwgZmxhZ3M6IGtlcm5lbDo6YWxsb2M6OkZsYWdzKSAtXHUwMDNlIFJlc3VsdCB7XG4rICAgICAgICBzZWxmLnNrYi5tdWx0aWNhc3QoXHUwMDI2QklOREVSX05MX0ZBTUlMWSwgcG9ydGlkLCAwLCBmbGFncylcbisgICAgfVxuK1xuKyAgICAvLy8gQ2hlY2sgaWYgdGhpcyBtZXNzYWdlIHR5cGUgaGFzIGxpc3RlbmVycy5cbisgICAgcHViIGZuIGhhc19saXN0ZW5lcnMoKSAtXHUwMDNlIGJvb2wge1xuKyAgICAgICAgQklOREVSX05MX0ZBTUlMWS5oYXNfbGlzdGVuZXJzKDApXG4rICAgIH1cbitcbisgICAgLy8vIFRoZSBlbnVtIGJpbmRlcl9kcml2ZXJfcmV0dXJuX3Byb3RvY29sIHJldHVybmVkIHRvIHRoZSBzZW5kZXIuXG4rICAgIHB1YiBmbiBlcnJvcihcdTAwMjZtdXQgc2VsZiwgdmFsOiB1MzIpIC1cdTAwM2UgUmVzdWx0IHtcbisgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9FUlJPUjogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9FUlJPUiBhcyBjX2ludDtcbisgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0VSUk9SLCB2YWwpXG4rICAgIH1cbitcbisgICAgLy8vIFRoZSBiaW5kZXIgY29udGV4dCB3aGVyZSB0aGUgdHJhbnNhY3Rpb24gb2NjdXJyZWQuXG4rICAgIHB1YiBmbiBjb250ZXh0KFx1MDAyNm11dCBzZWxmLCB2YWw6IFx1MDAyNkNTdHIpIC1cdTAwM2UgUmVzdWx0IHtcbisgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9DT05URVhUOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0NPTlRFWFQgYXMgY19pbnQ7XG4rICAgICAgICBzZWxmLnNrYi5wdXRfc3RyaW5nKEJJTkRFUl9BX1JFUE9SVF9DT05URVhULCB2YWwpXG4rICAgIH1cbitcbisgICAgLy8vIFRoZSBQSUQgb2YgdGhlIHNlbmRlciBwcm9jZXNzLlxuKyAgICBwdWIgZm4gZnJvbV9waWQoXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4rICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfRlJPTV9QSUQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfRlJPTV9QSUQgYXMgY19pbnQ7XG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9GUk9NX1BJRCwgdmFsKVxuKyAgICB9XG4rXG4rICAgIC8vLyBUaGUgVElEIG9mIHRoZSBzZW5kZXIgdGhyZWFkLlxuKyAgICBwdWIgZm4gZnJvbV90aWQoXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4rICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfRlJPTV9USUQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfRlJPTV9USUQgYXMgY19pbnQ7XG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9GUk9NX1RJRCwgdmFsKVxuKyAgICB9XG4rXG4rICAgIC8vLyBUaGUgUElEIG9mIHRoZSByZWNpcGllbnQgcHJvY2Vzcy4gVGhpcyBhdHRyaWJ1dGUgbWF5IG5vdCBiZSBwcmVzZW50XG4rICAgIC8vLyBpZiB0aGUgdGFyZ2V0IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLlxuKyAgICBwdWIgZm4gdG9fcGlkKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX1RPX1BJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9UT19QSUQgYXMgY19pbnQ7XG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9UT19QSUQsIHZhbClcbisgICAgfVxuK1xuKyAgICAvLy8gVGhlIFRJRCBvZiB0aGUgcmVjaXBpZW50IHRocmVhZC4gVGhpcyBhdHRyaWJ1dGUgbWF5IG5vdCBiZSBwcmVzZW50XG4rICAgIC8vLyBpZiB0aGUgdGFyZ2V0IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLlxuKyAgICBwdWIgZm4gdG9fdGlkKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX1RPX1RJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9UT19USUQgYXMgY19pbnQ7XG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9UT19USUQsIHZhbClcbisgICAgfVxuK1xuKyAgICAvLy8gV2hlbiBwcmVzZW50LCBpbmRpY2F0ZXMgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiBpcyBhIHJlcGx5LlxuKyAgICBwdWIgZm4gaXNfcmVwbHkoXHUwMDI2bXV0IHNlbGYpIC1cdTAwM2UgUmVzdWx0IHtcbisgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9JU19SRVBMWTogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9JU19SRVBMWSBhcyBjX2ludDtcbisgICAgICAgIHNlbGYuc2tiLnB1dF9mbGFnKEJJTkRFUl9BX1JFUE9SVF9JU19SRVBMWSlcbisgICAgfVxuK1xuKyAgICAvLy8gVGhlIGJpdG1hc2sgb2YgZW51bSB0cmFuc2FjdGlvbl9mbGFncyBmcm9tIHRoZSB0cmFuc2FjdGlvbi5cbisgICAgcHViIGZuIGZsYWdzKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0ZMQUdTOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0ZMQUdTIGFzIGNfaW50O1xuKyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfRkxBR1MsIHZhbClcbisgICAgfVxuK1xuKyAgICAvLy8gVGhlIGFwcGxpY2F0aW9uLWRlZmluZWQgY29kZSBmcm9tIHRoZSB0cmFuc2FjdGlvbi5cbisgICAgcHViIGZuIGNvZGUoXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4rICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfQ09ERTogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9DT0RFIGFzIGNfaW50O1xuKyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfQ09ERSwgdmFsKVxuKyAgICB9XG4rXG4rICAgIC8vLyBUaGUgdHJhbnNhY3Rpb24gcGF5bG9hZCBzaXplIGluIGJ5dGVzLlxuKyAgICBwdWIgZm4gZGF0YV9zaXplKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0RBVEFfU0laRTogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9EQVRBX1NJWkUgYXMgY19pbnQ7XG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9EQVRBX1NJWkUsIHZhbClcbisgICAgfVxuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnNcbmluZGV4IDQzMjM5MGFhYjI1YmI4Li5kZjQ3YWJhMDUxMzM4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcnVzdF9iaW5kZXJfbWFpbi5yc1xuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9ydXN0X2JpbmRlcl9tYWluLnJzXG5AQCAtMzIsNiArMzIsNyBAQFxuIG1vZCBkZWZlcnJlZF9jbG9zZTtcbiBtb2QgZGVmcztcbiBtb2QgZXJyb3I7XG4rbW9kIG5ldGxpbms7XG4gbW9kIG5vZGU7XG4gbW9kIHBhZ2VfcmFuZ2U7XG4gbW9kIHByb2Nlc3M7XG5AQCAtMjgyLDE5ICsyODMsMjIgQEAgZm4gcHRyX2FsaWduKHZhbHVlOiB1c2l6ZSkgLVx1MDAzZSBPcHRpb25cdTAwM2N1c2l6ZVx1MDAzZSB7XG4gLy8gU0FGRVRZOiBXZSBjYWxsIHJlZ2lzdGVyIGluIGBpbml0YC5cbiBzdGF0aWMgQklOREVSX1NIUklOS0VSOiBTaHJpbmtlciA9IHVuc2FmZSB7IFNocmlua2VyOjpuZXcoKSB9O1xuIFxuLXN0cnVjdCBCaW5kZXJNb2R1bGUge31cbitzdHJ1Y3QgQmluZGVyTW9kdWxlIHtcbisgICAgX25ldGxpbms6IGtlcm5lbDo6bmV0OjpuZXRsaW5rOjpSZWdpc3RyYXRpb24sXG4rfVxuIFxuIGltcGwga2VybmVsOjpNb2R1bGUgZm9yIEJpbmRlck1vZHVsZSB7XG4gICAgIGZuIGluaXQoX21vZHVsZTogXHUwMDI2J3N0YXRpYyBrZXJuZWw6OlRoaXNNb2R1bGUpIC1cdTAwM2UgUmVzdWx0XHUwMDNjU2VsZlx1MDAzZSB7XG4gICAgICAgICAvLyBTQUZFVFk6IFRoZSBtb2R1bGUgaW5pdGlhbGl6ZXIgbmV2ZXIgcnVucyB0d2ljZSwgc28gd2Ugb25seSBjYWxsIHRoaXMgb25jZS5cbiAgICAgICAgIHVuc2FmZSB7IGNyYXRlOjpjb250ZXh0OjpDT05URVhUUy5pbml0KCkgfTtcbiBcbisgICAgICAgIGxldCBuZXRsaW5rID0gY3JhdGU6Om5ldGxpbms6OkJJTkRFUl9OTF9GQU1JTFkucmVnaXN0ZXIoKT87XG4gICAgICAgICBCSU5ERVJfU0hSSU5LRVIucmVnaXN0ZXIoY1wiYW5kcm9pZC1iaW5kZXJcIik/O1xuIFxuICAgICAgICAgLy8gU0FGRVRZOiBUaGUgbW9kdWxlIGlzIGJlaW5nIGxvYWRlZCwgc28gd2UgY2FuIGluaXRpYWxpemUgYmluZGVyZnMuXG4gICAgICAgICB1bnNhZmUgeyBrZXJuZWw6OmVycm9yOjp0b19yZXN1bHQoYmluZGVyZnM6OmluaXRfcnVzdF9iaW5kZXJmcygpKT8gfTtcbiBcbi0gICAgICAgIE9rKFNlbGYge30pXG4rICAgICAgICBPayhTZWxmIHsgX25ldGxpbms6IG5ldGxpbmsgfSlcbiAgICAgfVxuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzXG5pbmRleCAxOWY4ODE5NDhhODRiYS4uMzMzNjhmN2ZkNTUxNDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yc1xuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnNcbkBAIC0xMjg0LDYgKzEyODQsMTUgQEAgZm4gdHJhbnNhY3Rpb24oc2VsZjogXHUwMDI2QXJjXHUwMDNjU2VsZlx1MDAzZSwgY21kOiB1MzIsIHJlYWRlcjogXHUwMDI2bXV0IFVzZXJTbGljZVJlYWRlcikgLVx1MDAzZSBSZXN1XG4gICAgICAgICAgICAgfVxuICAgICAgICAgfVxuIFxuKyAgICAgICAgaWYgaW5mby5vbmV3YXlfc3BhbV9zdXNwZWN0IHtcbisgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGJvdGggYSBvbmV3YXkgc3BhbSBzdXNwZWN0IGFuZCBhIGZhaWx1cmUsIHdlIHJlcG9ydCBpdCB0d2ljZS4gVGhpcyBpc1xuKyAgICAgICAgICAgIC8vIHVzZWZ1bCBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBmYWlsZWQgd2l0aCBCUl9UUkFOU0FDVElPTl9QRU5ESU5HX0ZST1pFTi5cbisgICAgICAgICAgICBpbmZvLnJlcG9ydF9uZXRsaW5rKEJSX09ORVdBWV9TUEFNX1NVU1BFQ1QsIFx1MDAyNnNlbGYucHJvY2Vzcy5jdHgpO1xuKyAgICAgICAgfVxuKyAgICAgICAgaWYgaW5mby5yZXBseSAhPSAwIHtcbisgICAgICAgICAgICBpbmZvLnJlcG9ydF9uZXRsaW5rKGluZm8ucmVwbHksIFx1MDAyNnNlbGYucHJvY2Vzcy5jdHgpO1xuKyAgICAgICAgfVxuK1xuICAgICAgICAgT2soKCkpXG4gICAgIH1cbiBcbkBAIC0xMzU0LDExICsxMzYzLDExIEBAIGZuIHJlcGx5X2lubmVyKHNlbGY6IFx1MDAyNkFyY1x1MDAzY1NlbGZcdTAwM2UsIGluZm86IFx1MDAyNm11dCBUcmFuc2FjdGlvbkluZm8pIC1cdTAwM2UgQmluZGVyUmVzdWx0IHtcbiAgICAgICAgICAgICAgICAgaW5mby5mcm9tX3RpZCxcbiAgICAgICAgICAgICAgICAgaW5mby50b19waWRcbiAgICAgICAgICAgICApO1xuLVxuICAgICAgICAgICAgIGxldCBwYXJhbSA9IGVyci5zb3VyY2UuYXNfcmVmKCkubWFwX29yKDAsIHxlfCBlLnRvX2Vycm5vKCkpO1xuICAgICAgICAgICAgIGxldCBlZSA9IEV4dGVuZGVkRXJyb3I6Om5ldyhpbmZvLmRlYnVnX2lkIGFzIHUzMiwgZXJyLnJlcGx5LCBwYXJhbSk7XG4gICAgICAgICAgICAgb3JpZy5mcm9tXG4gICAgICAgICAgICAgICAgIC5kZWxpdmVyX3JlcGx5KEVycihCUl9GQUlMRURfUkVQTFkpLCBcdTAwMjZvcmlnLCBTb21lKGVlKSk7XG4rICAgICAgICAgICAgaW5mby5yZXBseSA9IEJSX0ZBSUxFRF9SRVBMWTtcbiAgICAgICAgICAgICBlcnIucmVwbHkgPSBCUl9UUkFOU0FDVElPTl9DT01QTEVURTtcbiAgICAgICAgICAgICBlcnJcbiAgICAgICAgIH0pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXG5pbmRleCBhZmVmNWI0NmVhYzI2Ny4uNmNiN2I3NDVjNTJlNDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXG4rKysgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXG5AQCAtMyw2ICszLDcgQEBcbiAvLyBDb3B5cmlnaHQgKEMpIDIwMjUgR29vZ2xlIExMQy5cbiBcbiB1c2Uga2VybmVsOjp7XG4rICAgIG5ldDo6bmV0bGluazo6R0VOTE1TR19ERUZBVUxUX1NJWkUsXG4gICAgIHByZWx1ZGU6OiosXG4gICAgIHNlcV9maWxlOjpTZXFGaWxlLFxuICAgICBzZXFfcHJpbnQsXG5AQCAtMTgsNiArMTksNyBAQFxuICAgICBhbGxvY2F0aW9uOjp7QWxsb2NhdGlvbiwgVHJhbnNsYXRlZEZkc30sXG4gICAgIGRlZnM6OiosXG4gICAgIGVycm9yOjp7QmluZGVyRXJyb3IsIEJpbmRlclJlc3VsdH0sXG4rICAgIG5ldGxpbms6OlJlcG9ydCxcbiAgICAgbm9kZTo6e05vZGUsIE5vZGVSZWZ9LFxuICAgICBwcm9jZXNzOjp7UHJvY2VzcywgUHJvY2Vzc0lubmVyfSxcbiAgICAgcHRyX2FsaWduLFxuQEAgLTUxLDYgKzUzLDQ0IEBAIGltcGwgVHJhbnNhY3Rpb25JbmZvIHtcbiAgICAgcHViKGNyYXRlKSBmbiBpc19vbmV3YXkoXHUwMDI2c2VsZikgLVx1MDAzZSBib29sIHtcbiAgICAgICAgIHNlbGYuZmxhZ3MgXHUwMDI2IFRGX09ORV9XQVkgIT0gMFxuICAgICB9XG4rXG4rICAgIHB1YihjcmF0ZSkgZm4gcmVwb3J0X25ldGxpbmsoXHUwMDI2c2VsZiwgcmVwbHk6IHUzMiwgY3R4OiBcdTAwMjZjcmF0ZTo6Q29udGV4dCkge1xuKyAgICAgICAgaWYgbGV0IEVycihlcnIpID0gc2VsZi5yZXBvcnRfbmV0bGlua19pbm5lcihyZXBseSwgY3R4KSB7XG4rICAgICAgICAgICAgcHJfd2FybiEoXG4rICAgICAgICAgICAgICAgIFwie306e30gbmV0bGluayByZXBvcnQgZmFpbGVkOiB7ZXJyOj99XFxuXCIsXG4rICAgICAgICAgICAgICAgIHNlbGYuZnJvbV9waWQsXG4rICAgICAgICAgICAgICAgIHNlbGYuZnJvbV90aWRcbisgICAgICAgICAgICApO1xuKyAgICAgICAgfVxuKyAgICB9XG4rXG4rICAgIGZuIHJlcG9ydF9uZXRsaW5rX2lubmVyKFx1MDAyNnNlbGYsIHJlcGx5OiB1MzIsIGN0eDogXHUwMDI2Y3JhdGU6OkNvbnRleHQpIC1cdTAwM2Uga2VybmVsOjplcnJvcjo6UmVzdWx0IHtcbisgICAgICAgIGlmICFSZXBvcnQ6Omhhc19saXN0ZW5lcnMoKSB7XG4rICAgICAgICAgICAgcmV0dXJuIE9rKCgpKTtcbisgICAgICAgIH1cbisgICAgICAgIGxldCBtdXQgcmVwb3J0ID0gUmVwb3J0OjpuZXcoR0VOTE1TR19ERUZBVUxUX1NJWkUsIDAsIDAsIEdGUF9LRVJORUwpPztcbitcbisgICAgICAgIHJlcG9ydC5lcnJvcihyZXBseSk/O1xuKyAgICAgICAgcmVwb3J0LmNvbnRleHQoXHUwMDI2Y3R4Lm5hbWUpPztcbisgICAgICAgIHJlcG9ydC5mcm9tX3BpZChzZWxmLmZyb21fcGlkIGFzIHUzMik/O1xuKyAgICAgICAgcmVwb3J0LmZyb21fdGlkKHNlbGYuZnJvbV90aWQgYXMgdTMyKT87XG4rICAgICAgICBpZiBzZWxmLnRvX3BpZCAhPSAwIHtcbisgICAgICAgICAgICByZXBvcnQudG9fcGlkKHNlbGYudG9fcGlkIGFzIHUzMik/O1xuKyAgICAgICAgfVxuKyAgICAgICAgaWYgc2VsZi50b190aWQgIT0gMCB7XG4rICAgICAgICAgICAgcmVwb3J0LnRvX3RpZChzZWxmLnRvX3RpZCBhcyB1MzIpPztcbisgICAgICAgIH1cbitcbisgICAgICAgIGlmIHNlbGYuaXNfcmVwbHkge1xuKyAgICAgICAgICAgIHJlcG9ydC5pc19yZXBseSgpPztcbisgICAgICAgIH1cbisgICAgICAgIHJlcG9ydC5mbGFncyhzZWxmLmZsYWdzKT87XG4rICAgICAgICByZXBvcnQuY29kZShzZWxmLmNvZGUpPztcbisgICAgICAgIHJlcG9ydC5kYXRhX3NpemUoc2VsZi5kYXRhX3NpemUgYXMgdTMyKT87XG4rXG4rICAgICAgICByZXBvcnQubXVsdGljYXN0KDAsIEdGUF9LRVJORUwpPztcbisgICAgICAgIE9rKCgpKVxuKyAgICB9XG4gfVxuIFxuIHVzZSBjb3JlOjptZW06Om9mZnNldF9vZjtcbmRpZmYgLS1naXQgYS9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oIGIvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxuaW5kZXggMTEyNDc4NWUyMTBiMzAuLmVjOTZlODExNjEwZDcyIDEwMDY0NFxuLS0tIGEvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxuKysrIGIvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxuQEAgLTkzLDYgKzkzLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9ydXN0X3NhbXBsZS5oXHUwMDNlXG4gXG4gLypcbkBAIC0xMTAsNiArMTEyLDcgQEBcbiBjb25zdCBzaXplX3QgUlVTVF9DT05TVF9IRUxQRVJfQVJDSF9TTEFCX01JTkFMSUdOID0gQVJDSF9TTEFCX01JTkFMSUdOO1xuIGNvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9BUkNIX0tNQUxMT0NfTUlOQUxJR04gPSBBUkNIX0tNQUxMT0NfTUlOQUxJR047XG4gY29uc3Qgc2l6ZV90IFJVU1RfQ09OU1RfSEVMUEVSX1BBR0VfU0laRSA9IFBBR0VfU0laRTtcbitjb25zdCBzaXplX3QgUlVTVF9DT05TVF9IRUxQRVJfR0VOTE1TR19ERUZBVUxUX1NJWkUgPSBHRU5MTVNHX0RFRkFVTFRfU0laRTtcbiBjb25zdCBnZnBfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRlBfQVRPTUlDID0gR0ZQX0FUT01JQztcbiBjb25zdCBnZnBfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRlBfS0VSTkVMID0gR0ZQX0tFUk5FTDtcbiBjb25zdCBnZnBfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRlBfS0VSTkVMX0FDQ09VTlQgPSBHRlBfS0VSTkVMX0FDQ09VTlQ7XG5kaWZmIC0tZ2l0IGEvcnVzdC9oZWxwZXJzL2hlbHBlcnMuYyBiL3J1c3QvaGVscGVycy9oZWxwZXJzLmNcbmluZGV4IDk5OGUzMTA1MmU2NjAxLi4xZDRlZTUxZjU3NmJlYiAxMDA2NDRcbi0tLSBhL3J1c3QvaGVscGVycy9oZWxwZXJzLmNcbisrKyBiL3J1c3QvaGVscGVycy9oZWxwZXJzLmNcbkBAIC03Miw2ICs3Miw3IEBAXG4gI2luY2x1ZGUgXCJtYXBsZV90cmVlLmNcIlxuICNpbmNsdWRlIFwibW0uY1wiXG4gI2luY2x1ZGUgXCJtdXRleC5jXCJcbisjaW5jbHVkZSBcIm5ldC9nZW5ldGxpbmsuY1wiXG4gI2luY2x1ZGUgXCJvZi5jXCJcbiAjaW5jbHVkZSBcInBhZ2UuY1wiXG4gI2luY2x1ZGUgXCJwY2kuY1wiXG5kaWZmIC0tZ2l0IGEvcnVzdC9oZWxwZXJzL25ldC9nZW5ldGxpbmsuYyBiL3J1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzUzMGI2OWY2Y2Y3MDdcbi0tLSAvZGV2L251bGxcbisrKyBiL3J1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmNcbkBAIC0wLDAgKzEsNDYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEdvb2dsZSBMTEMuXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG4rXG4rI2lmZGVmIENPTkZJR19ORVRcbitcbitfX3J1c3RfaGVscGVyIHN0cnVjdCBza19idWZmICpydXN0X2hlbHBlcl9nZW5sbXNnX25ldyhzaXplX3QgcGF5bG9hZCwgZ2ZwX3QgZmxhZ3MpXG4re1xuK1x0cmV0dXJuIGdlbmxtc2dfbmV3KHBheWxvYWQsIGZsYWdzKTtcbit9XG4rXG4rX19ydXN0X2hlbHBlclxuK2ludCBydXN0X2hlbHBlcl9nZW5sbXNnX211bHRpY2FzdChjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSxcbitcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBvcnRpZCxcbitcdFx0XHRcdCAgdW5zaWduZWQgaW50IGdyb3VwLCBnZnBfdCBmbGFncylcbit7XG4rXHRyZXR1cm4gZ2VubG1zZ19tdWx0aWNhc3QoZmFtaWx5LCBza2IsIHBvcnRpZCwgZ3JvdXAsIGZsYWdzKTtcbit9XG4rXG4rX19ydXN0X2hlbHBlciB2b2lkIHJ1c3RfaGVscGVyX2dlbmxtc2dfY2FuY2VsKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcilcbit7XG4rXHRnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7XG4rfVxuK1xuK19fcnVzdF9oZWxwZXIgdm9pZCBydXN0X2hlbHBlcl9nZW5sbXNnX2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIpXG4re1xuK1x0Z2VubG1zZ19lbmQoc2tiLCBoZHIpO1xuK31cbitcbitfX3J1c3RfaGVscGVyIHZvaWQgcnVzdF9oZWxwZXJfbmxtc2dfZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdG5sbXNnX2ZyZWUoc2tiKTtcbit9XG4rXG4rX19ydXN0X2hlbHBlclxuK2ludCBydXN0X2hlbHBlcl9nZW5sX2hhc19saXN0ZW5lcnMoY29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBncm91cClcbit7XG4rXHRyZXR1cm4gZ2VubF9oYXNfbGlzdGVuZXJzKGZhbWlseSwgbmV0LCBncm91cCk7XG4rfVxuK1xuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL25ldC5ycyBiL3J1c3Qva2VybmVsL25ldC9tb2QucnNcbnNpbWlsYXJpdHkgaW5kZXggODUlXG5yZW5hbWUgZnJvbSBydXN0L2tlcm5lbC9uZXQucnNcbnJlbmFtZSB0byBydXN0L2tlcm5lbC9uZXQvbW9kLnJzXG5pbmRleCBmZTQxNWNiMzY5ZDNhYy4uOGVjYWU3NTc3ZWQyOTUgMTAwNjQ0XG4tLS0gYS9ydXN0L2tlcm5lbC9uZXQucnNcbisrKyBiL3J1c3Qva2VybmVsL25ldC9tb2QucnNcbkBAIC00LDMgKzQsNSBAQFxuIFxuICNbY2ZnKENPTkZJR19SVVNUX1BIWUxJQl9BQlNUUkFDVElPTlMpXVxuIHB1YiBtb2QgcGh5O1xuK1xuK3B1YiBtb2QgbmV0bGluaztcbmRpZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5ycyBiL3J1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIyZWYzZGRlMzZmYTFhXG4tLS0gL2Rldi9udWxsXG4rKysgYi9ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yc1xuQEAgLTAsMCArMSwzMzcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKy8vIENvcHlyaWdodCAoQykgMjAyNiBHb29nbGUgTExDLlxuK1xuKy8vISBSdXN0IHN1cHBvcnQgZm9yIGdlbmVyaWMgbmV0bGluay5cbisvLyFcbisvLyEgQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgZXhwb3NpbmcgbXVsdGljYXN0IGdyb3Vwcy5cbisvLyFcbisvLyEgQyBoZWFkZXI6IFtgaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmhgXShzcmN0cmVlL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oKVxuK1xuK3VzZSBrZXJuZWw6OntcbisgICAgYWxsb2M6OntzZWxmLCBBbGxvY0Vycm9yfSxcbisgICAgZXJyb3I6OnRvX3Jlc3VsdCxcbisgICAgcHJlbHVkZTo6KixcbisgICAgdHJhbnNtdXRlOjpBc0J5dGVzLFxuKyAgICB0eXBlczo6T3BhcXVlLFxuKyAgICBUaGlzTW9kdWxlLFxuK307XG4rXG4rdXNlIGNvcmU6OntcbisgICAgbWVtOjpNYW51YWxseURyb3AsXG4rICAgIHB0cjo6Tm9uTnVsbCwgLy9cbit9O1xuK1xuKy8vLyBUaGUgZGVmYXVsdCBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZS5cbitwdWIgY29uc3QgR0VOTE1TR19ERUZBVUxUX1NJWkU6IHVzaXplID0gYmluZGluZ3M6OkdFTkxNU0dfREVGQVVMVF9TSVpFO1xuK1xuKy8vLyBBIHdyYXBwZXIgYXJvdW5kIGBzdHJ1Y3Qgc2tfYnVmZmAgZm9yIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlcy5cbisvLy9cbisvLy8gVGhpcyB0eXBlIGlzIGludGVuZGVkIHRvIGJlIHNwZWNpZmljIGZvciBidWZmZXJzIHVzZWQgd2l0aCBuZXRsaW5rIG9ubHksIGFuZCBvdGhlciB1c2VjYXNlcyBmb3JcbisvLy8gYHN0cnVjdCBza19idWZmYCBhcmUgb3V0LW9mLXNjb3BlIGZvciB0aGlzIGFic3RyYWN0aW9uLlxuKy8vL1xuKy8vLyAjIEludmFyaWFudHNcbisvLy9cbisvLy8gVGhlIHBvaW50ZXIgaGFzIG93bmVyc2hpcCBvdmVyIGEgdmFsaWQgYHNrX2J1ZmZgLlxuK3B1YiBzdHJ1Y3QgTmV0bGlua1NrQnVmZiB7XG4rICAgIHNrYjogTm9uTnVsbFx1MDAzY2tlcm5lbDo6YmluZGluZ3M6OnNrX2J1ZmZcdTAwM2UsXG4rfVxuK1xuK2ltcGwgTmV0bGlua1NrQnVmZiB7XG4rICAgIC8vLyBDcmVhdGVzIGEgbmV3IGBOZXRsaW5rU2tCdWZmYCB3aXRoIHRoZSBnaXZlbiBzaXplLlxuKyAgICBwdWIgZm4gbmV3KHNpemU6IHVzaXplLCBmbGFnczogYWxsb2M6OkZsYWdzKSAtXHUwMDNlIFJlc3VsdFx1MDAzY05ldGxpbmtTa0J1ZmYsIEFsbG9jRXJyb3JcdTAwM2Uge1xuKyAgICAgICAgLy8gU0FGRVRZOiBgZ2VubG1zZ19uZXdgIG9ubHkgcmVxdWlyZXMgaXRzIGFyZ3VtZW50cyB0byBiZSB2YWxpZCBpbnRlZ2Vycy5cbisgICAgICAgIGxldCBza2IgPSB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19uZXcoc2l6ZSwgZmxhZ3MuYXNfcmF3KCkpIH07XG4rICAgICAgICBsZXQgc2tiID0gTm9uTnVsbDo6bmV3KHNrYikub2tfb3IoQWxsb2NFcnJvcik/O1xuKyAgICAgICAgT2soTmV0bGlua1NrQnVmZiB7IHNrYiB9KVxuKyAgICB9XG4rXG4rICAgIC8vLyBQdXRzIGEgZ2VuZXJpYyBuZXRsaW5rIGhlYWRlciBpbnRvIHRoZSBgTmV0bGlua1NrQnVmZmAuXG4rICAgIHB1YiBmbiBnZW5sbXNnX3B1dChcbisgICAgICAgIHNlbGYsXG4rICAgICAgICBwb3J0aWQ6IHUzMixcbisgICAgICAgIHNlcTogdTMyLFxuKyAgICAgICAgZmFtaWx5OiBcdTAwMjYnc3RhdGljIEZhbWlseSxcbisgICAgICAgIGNtZDogdTgsXG4rICAgICkgLVx1MDAzZSBSZXN1bHRcdTAwM2NHZW5sTXNnLCBBbGxvY0Vycm9yXHUwMDNlIHtcbisgICAgICAgIGxldCBza2IgPSBzZWxmLnNrYi5hc19wdHIoKTtcbisgICAgICAgIC8vIFNBRkVUWTogVGhlIHNrYiBhbmQgZmFtaWx5IHBvaW50ZXJzIGFyZSB2YWxpZC5cbisgICAgICAgIGxldCBoZHIgPSB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgZmFtaWx5LmFzX3JhdygpLCAwLCBjbWQpIH07XG4rICAgICAgICBsZXQgaGRyID0gTm9uTnVsbDo6bmV3KGhkcikub2tfb3IoQWxsb2NFcnJvcik/O1xuKyAgICAgICAgT2soR2VubE1zZyB7IHNrYjogc2VsZiwgaGRyIH0pXG4rICAgIH1cbit9XG4rXG4raW1wbCBEcm9wIGZvciBOZXRsaW5rU2tCdWZmIHtcbisgICAgZm4gZHJvcChcdTAwMjZtdXQgc2VsZikge1xuKyAgICAgICAgLy8gU0FGRVRZOiBXZSBoYXZlIG93bmVyc2hpcCBvdmVyIHRoZSBgc2tfYnVmZmAsIHNvIHdlIG1heSBmcmVlIGl0LlxuKyAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6Om5sbXNnX2ZyZWUoc2VsZi5za2IuYXNfcHRyKCkpIH1cbisgICAgfVxuK31cbitcbisvLy8gQSBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZSBiZWluZyBjb25zdHJ1Y3RlZC5cbisvLy9cbisvLy8gIyBJbnZhcmlhbnRzXG4rLy8vXG4rLy8vIGBoZHJgIHJlZmVyZW5jZXMgdGhlIGhlYWRlciBpbiB0aGlzIG5ldGxpbmsgbWVzc2FnZS5cbitwdWIgc3RydWN0IEdlbmxNc2cge1xuKyAgICBza2I6IE5ldGxpbmtTa0J1ZmYsXG4rICAgIGhkcjogTm9uTnVsbFx1MDAzY2Nfdm9pZFx1MDAzZSxcbit9XG4rXG4raW1wbCBHZW5sTXNnIHtcbisgICAgLy8vIFB1dHMgYW4gYXR0cmlidXRlIGludG8gdGhlIG1lc3NhZ2UuXG4rICAgICNbaW5saW5lXVxuKyAgICBmbiBwdXRcdTAwM2NUXHUwMDNlKFx1MDAyNm11dCBzZWxmLCBhdHRydHlwZTogY19pbnQsIHZhbHVlOiBcdTAwMjZUKSAtXHUwMDNlIFJlc3VsdFxuKyAgICB3aGVyZVxuKyAgICAgICAgVDogP1NpemVkICsgQXNCeXRlcyxcbisgICAge1xuKyAgICAgICAgbGV0IHNrYiA9IHNlbGYuc2tiLnNrYi5hc19wdHIoKTtcbisgICAgICAgIGxldCBsZW4gPSBzaXplX29mX3ZhbCh2YWx1ZSk7XG4rICAgICAgICBsZXQgcHRyID0gY29yZTo6cHRyOjpmcm9tX3JlZih2YWx1ZSkuY2FzdDo6XHUwMDNjY192b2lkXHUwMDNlKCk7XG4rICAgICAgICAvLyBTQUZFVFk6IGBza2JgIGlzIHZhbGlkIGJ5IGBOZXRsaW5rU2tCdWZmYCB0eXBlIGludmFyaWFudHMsIGFuZCB0aGUgcHJvdmlkZWQgdmFsdWUgaXNcbisgICAgICAgIC8vIHJlYWRhYmxlIGFuZCBpbml0aWFsaXplZCBmb3IgaXRzIGBzaXplX29mYCBieXRlcy5cbisgICAgICAgIHRvX3Jlc3VsdCh1bnNhZmUgeyBiaW5kaW5nczo6bmxhX3B1dChza2IsIGF0dHJ0eXBlLCBsZW4gYXMgY19pbnQsIHB0cikgfSlcbisgICAgfVxuK1xuKyAgICAvLy8gUHV0cyBhIGB1MzJgIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLlxuKyAgICAjW2lubGluZV1cbisgICAgcHViIGZuIHB1dF91MzIoXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuKyAgICAgICAgc2VsZi5wdXQoYXR0cnR5cGUsIFx1MDAyNnZhbHVlKVxuKyAgICB9XG4rXG4rICAgIC8vLyBQdXRzIGEgc3RyaW5nIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLlxuKyAgICAjW2lubGluZV1cbisgICAgcHViIGZuIHB1dF9zdHJpbmcoXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6IFx1MDAyNkNTdHIpIC1cdTAwM2UgUmVzdWx0IHtcbisgICAgICAgIHNlbGYucHV0KGF0dHJ0eXBlLCB2YWx1ZS50b19ieXRlc193aXRoX251bCgpKVxuKyAgICB9XG4rXG4rICAgIC8vLyBQdXRzIGEgZmxhZyBhdHRyaWJ1dGUgaW50byB0aGUgbWVzc2FnZS5cbisgICAgI1tpbmxpbmVdXG4rICAgIHB1YiBmbiBwdXRfZmxhZyhcdTAwMjZtdXQgc2VsZiwgYXR0cnR5cGU6IGNfaW50KSAtXHUwMDNlIFJlc3VsdCB7XG4rICAgICAgICBsZXQgc2tiID0gc2VsZi5za2Iuc2tiLmFzX3B0cigpO1xuKyAgICAgICAgLy8gU0FGRVRZOiBgc2tiYCBpcyB2YWxpZCBieSBgTmV0bGlua1NrQnVmZmAgdHlwZSBpbnZhcmlhbnRzLCBhbmQgYSBudWxsIHBvaW50ZXIgaXMgdmFsaWRcbisgICAgICAgIC8vIHdoZW4gdGhlIGxlbmd0aCBpcyB6ZXJvLlxuKyAgICAgICAgdG9fcmVzdWx0KHVuc2FmZSB7IGJpbmRpbmdzOjpubGFfcHV0KHNrYiwgYXR0cnR5cGUsIDAsIGNvcmU6OnB0cjo6bnVsbCgpKSB9KVxuKyAgICB9XG4rXG4rICAgIC8vLyBTZW5kcyB0aGUgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgYXMgYSBtdWx0aWNhc3QgbWVzc2FnZS5cbisgICAgI1tpbmxpbmVdXG4rICAgIHB1YiBmbiBtdWx0aWNhc3QoXG4rICAgICAgICBzZWxmLFxuKyAgICAgICAgZmFtaWx5OiBcdTAwMjYnc3RhdGljIEZhbWlseSxcbisgICAgICAgIHBvcnRpZDogdTMyLFxuKyAgICAgICAgZ3JvdXA6IHUzMixcbisgICAgICAgIGZsYWdzOiBhbGxvYzo6RmxhZ3MsXG4rICAgICkgLVx1MDAzZSBSZXN1bHQge1xuKyAgICAgICAgbGV0IG1lID0gTWFudWFsbHlEcm9wOjpuZXcoc2VsZik7XG4rICAgICAgICAvLyBTQUZFVFk6IFRoZSBgc2tiYCBhbmQgYGZhbWlseWAgcG9pbnRlcnMgYXJlIHZhbGlkLiBXZSBwYXNzIG93bmVyc2hpcCBvZiB0aGUgYHNrYmAgdG9cbisgICAgICAgIC8vIGBnZW5sbXNnX211bHRpY2FzdGAgYnkgbm90IGRyb3BwaW5nIGBzZWxmYC5cbisgICAgICAgIHVuc2FmZSB7XG4rICAgICAgICAgICAgYmluZGluZ3M6Omdlbmxtc2dfZW5kKG1lLnNrYi5za2IuYXNfcHRyKCksIG1lLmhkci5hc19wdHIoKSk7XG4rICAgICAgICAgICAgdG9fcmVzdWx0KGJpbmRpbmdzOjpnZW5sbXNnX211bHRpY2FzdChcbisgICAgICAgICAgICAgICAgZmFtaWx5LmFzX3JhdygpLFxuKyAgICAgICAgICAgICAgICBtZS5za2Iuc2tiLmFzX3B0cigpLFxuKyAgICAgICAgICAgICAgICBwb3J0aWQsXG4rICAgICAgICAgICAgICAgIGdyb3VwLFxuKyAgICAgICAgICAgICAgICBmbGFncy5hc19yYXcoKSxcbisgICAgICAgICAgICApKVxuKyAgICAgICAgfVxuKyAgICB9XG4rfVxuK2ltcGwgRHJvcCBmb3IgR2VubE1zZyB7XG4rICAgIGZuIGRyb3AoXHUwMDI2bXV0IHNlbGYpIHtcbisgICAgICAgIC8vIFNBRkVUWTogVGhlIGBoZHJgIHBvaW50ZXIgcmVmZXJlbmNlcyB0aGUgaGVhZGVyIG9mIHRoaXMgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UuXG4rICAgICAgICB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19jYW5jZWwoc2VsZi5za2Iuc2tiLmFzX3B0cigpLCBzZWxmLmhkci5hc19wdHIoKSkgfTtcbisgICAgfVxuK31cbitcbisvLy8gRmxhZ3MgZm9yIGEgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseS5cbitzdHJ1Y3QgRmFtaWx5RmxhZ3Mge1xuKyAgICAvLy8gV2hldGhlciB0aGUgZmFtaWx5IHN1cHBvcnRzIG5ldHdvcmsgbmFtZXNwYWNlcy5cbisgICAgbmV0bnNvazogYm9vbCxcbisgICAgLy8vIFdoZXRoZXIgdGhlIGZhbWlseSBzdXBwb3J0cyBwYXJhbGxlbCBvcGVyYXRpb25zLlxuKyAgICBwYXJhbGxlbF9vcHM6IGJvb2wsXG4rfVxuK1xuK2ltcGwgRmFtaWx5RmxhZ3Mge1xuKyAgICAvLy8gQ29udmVydHMgdGhlIGZsYWdzIHRvIHRoZSBiaXRmaWVsZCByZXByZXNlbnRhdGlvbiB1c2VkIGJ5IGBnZW5sX2ZhbWlseWAuXG4rICAgIGNvbnN0IGZuIGludG9fYml0ZmllbGQoc2VsZikgLVx1MDAzZSBiaW5kaW5nczo6X19CaW5kZ2VuQml0ZmllbGRVbml0XHUwMDNjW3U4OyAxXVx1MDAzZSB7XG4rICAgICAgICAvLyBUaGUgYmVsb3cgc2hpZnRzIGFyZSB2ZXJpZmllZCBjb3JyZWN0IGJ5IHRlc3RfZmFtaWx5X2ZsYWdzX2JpdGZpZWxkKCkgYmVsb3cuXG4rICAgICAgICAvL1xuKyAgICAgICAgLy8gQWx0aG91Z2ggYmluZGdlbiBnZW5lcmF0ZXMgaGVscGVycyB0byBjaGFuZ2UgYml0ZmllbGRzIGJhc2VkIG9uIHRoZSBDIGhlYWRlcnMsIHRoZXNlXG4rICAgICAgICAvLyBoZWxwZXJzIHVuZm9ydHVuYXRlbHkgY2FuJ3QgYmUgdXNlZCBpbiBjb25zdCBjb250ZXh0LiBTaW5jZSBgRmFtaWx5YCBuZWVkcyB0byBiZSBmaWxsZWRcbisgICAgICAgIC8vIG91dCBhdCBidWlsZC10aW1lLCB3ZSB1c2UgdGhpcyBoZWxwZXIgaW5zdGVhZC5cbisgICAgICAgIGxldCBtdXQgYml0cyA9IDA7XG4rICAgICAgICBpZiBzZWxmLm5ldG5zb2sge1xuKyAgICAgICAgICAgIGJpdHMgfD0gMSBcdTAwM2NcdTAwM2MgMDtcbisgICAgICAgIH1cbisgICAgICAgIGlmIHNlbGYucGFyYWxsZWxfb3BzIHtcbisgICAgICAgICAgICBiaXRzIHw9IDEgXHUwMDNjXHUwMDNjIDE7XG4rICAgICAgICB9XG4rICAgICAgICAvLyBDb252ZXJ0IGZyb20gbGl0dGxlIGVuZGlhbiB0byB0aGUgdGFyZ2V0J3MgZW5kaWFubmVzcy5cbisgICAgICAgIGJpdHMgPSB1ODo6ZnJvbV9sZShiaXRzKTtcbisgICAgICAgIC8vIFNBRkVUWTogVGhpcyBiaXRmaWVsZCBpcyByZXByZXNlbnRlZCBhcyBhbiB1OC5cbisgICAgICAgIHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlOjpcdTAwM2N1OCwgYmluZGluZ3M6Ol9fQmluZGdlbkJpdGZpZWxkVW5pdFx1MDAzY1t1ODsgMV1cdTAwM2VcdTAwM2UoYml0cykgfVxuKyAgICB9XG4rfVxuK1xuKy8vLyBBIGdlbmVyaWMgbmV0bGluayBmYW1pbHkuXG4rI1tyZXByKHRyYW5zcGFyZW50KV1cbitwdWIgc3RydWN0IEZhbWlseSB7XG4rICAgIGlubmVyOiBPcGFxdWVcdTAwM2NiaW5kaW5nczo6Z2VubF9mYW1pbHlcdTAwM2UsXG4rfVxuK1xuKy8vIFNBRkVUWTogVGhlIGBGYW1pbHlgIHR5cGUgaXMgdGhyZWFkIHNhZmUuXG4rdW5zYWZlIGltcGwgU3luYyBmb3IgRmFtaWx5IHt9XG4rXG4raW1wbCBGYW1pbHkge1xuKyAgICAvLy8gQ3JlYXRlcyBhIG5ldyBgRmFtaWx5YCBpbnN0YW5jZS5cbisgICAgLy8vXG4rICAgIC8vLyBJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20gY29uc3QgY29udGV4dCBvbmx5LiBXaWxsIHBhbmljIGlmIHByb3ZpZGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHMuXG4rICAgIC8vL1xuKyAgICAvLy8gVGhlIG5hbWUgbXVzdCBiZSBhIG51bC10ZXJtaW5hdGVkIHN0cmluZywgYnV0IGl0IGlzIHRha2VuIGFzIGBcdTAwMjZbdThdYCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkXG4rICAgIC8vLyBtb3JlIGNvbnZlbmllbnRseSB3aXRoIHRoZSBzdHJpbmdzIGdlbmVyYXRlZCBieSBiaW5kZ2VuLlxuKyAgICBwdWIgY29uc3QgZm4gY29uc3RfbmV3KFxuKyAgICAgICAgbW9kdWxlOiBcdTAwMjZUaGlzTW9kdWxlLFxuKyAgICAgICAgbmFtZTogXHUwMDI2W3U4XSxcbisgICAgICAgIHZlcnNpb246IHUzMixcbisgICAgICAgIG1jZ3JwczogXHUwMDI2J3N0YXRpYyBbTXVsdGljYXN0R3JvdXBdLFxuKyAgICApIC1cdTAwM2UgRmFtaWx5IHtcbisgICAgICAgIGxldCBuX21jZ3JwcyA9IG1jZ3Jwcy5sZW4oKSBhcyB1ODtcbisgICAgICAgIGlmIG5fbWNncnBzIGFzIHVzaXplICE9IG1jZ3Jwcy5sZW4oKSB7XG4rICAgICAgICAgICAgcGFuaWMhKFwidG9vIG1hbnkgbWNncnBzXCIpO1xuKyAgICAgICAgfVxuKyAgICAgICAgbGV0IG11dCBnZW5sX2ZhbWlseSA9IGJpbmRpbmdzOjpnZW5sX2ZhbWlseSB7XG4rICAgICAgICAgICAgdmVyc2lvbixcbisgICAgICAgICAgICBfYml0ZmllbGRfMTogRmFtaWx5RmxhZ3Mge1xuKyAgICAgICAgICAgICAgICBuZXRuc29rOiB0cnVlLFxuKyAgICAgICAgICAgICAgICBwYXJhbGxlbF9vcHM6IHRydWUsXG4rICAgICAgICAgICAgfVxuKyAgICAgICAgICAgIC5pbnRvX2JpdGZpZWxkKCksXG4rICAgICAgICAgICAgbW9kdWxlOiBtb2R1bGUuYXNfcHRyKCksXG4rICAgICAgICAgICAgbWNncnBzOiBtY2dycHMuYXNfcHRyKCkuY2FzdCgpLFxuKyAgICAgICAgICAgIG5fbWNncnBzLFxuKyAgICAgICAgICAgIC4ucGluX2luaXQ6Onplcm9lZCgpXG4rICAgICAgICB9O1xuKyAgICAgICAgaWYgQ1N0cjo6ZnJvbV9ieXRlc193aXRoX251bChuYW1lKS5pc19lcnIoKSB7XG4rICAgICAgICAgICAgcGFuaWMhKFwiZ2VubF9mYW1pbHkgbmFtZSBub3QgbnVsLXRlcm1pbmF0ZWRcIik7XG4rICAgICAgICB9XG4rICAgICAgICBpZiBnZW5sX2ZhbWlseS5uYW1lLmxlbigpIFx1MDAzYyBuYW1lLmxlbigpIHtcbisgICAgICAgICAgICBwYW5pYyEoXCJnZW5sX2ZhbWlseSBuYW1lIHRvbyBsb25nXCIpO1xuKyAgICAgICAgfVxuKyAgICAgICAgbGV0IG11dCBpID0gMDtcbisgICAgICAgIHdoaWxlIGkgXHUwMDNjIG5hbWUubGVuKCkge1xuKyAgICAgICAgICAgIGdlbmxfZmFtaWx5Lm5hbWVbaV0gPSBuYW1lW2ldO1xuKyAgICAgICAgICAgIGkgKz0gMTtcbisgICAgICAgIH1cbisgICAgICAgIEZhbWlseSB7XG4rICAgICAgICAgICAgaW5uZXI6IE9wYXF1ZTo6bmV3KGdlbmxfZmFtaWx5KSxcbisgICAgICAgIH1cbisgICAgfVxuK1xuKyAgICAvLy8gQ2hlY2tzIGlmIHRoZXJlIGFyZSBhbnkgbGlzdGVuZXJzIGZvciB0aGUgZ2l2ZW4gbXVsdGljYXN0IGdyb3VwLlxuKyAgICBwdWIgZm4gaGFzX2xpc3RlbmVycyhcdTAwMjZzZWxmLCBncm91cDogdTMyKSAtXHUwMDNlIGJvb2wge1xuKyAgICAgICAgLy8gU0FGRVRZOiBUaGUgZmFtaWx5IGFuZCBpbml0X25ldCBwb2ludGVycyBhcmUgdmFsaWQuXG4rICAgICAgICB1bnNhZmUge1xuKyAgICAgICAgICAgIGJpbmRpbmdzOjpnZW5sX2hhc19saXN0ZW5lcnMoc2VsZi5hc19yYXcoKSwgXHUwMDI2cmF3IG11dCBiaW5kaW5nczo6aW5pdF9uZXQsIGdyb3VwKSAhPSAwXG4rICAgICAgICB9XG4rICAgIH1cbitcbisgICAgLy8vIFJldHVybnMgYSByYXcgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBgZ2VubF9mYW1pbHlgIHN0cnVjdHVyZS5cbisgICAgcHViIGZuIGFzX3JhdyhcdTAwMjZzZWxmKSAtXHUwMDNlICptdXQgYmluZGluZ3M6OmdlbmxfZmFtaWx5IHtcbisgICAgICAgIHNlbGYuaW5uZXIuZ2V0KClcbisgICAgfVxuK31cbitcbisvLy8gQSBnZW5lcmljIG5ldGxpbmsgbXVsdGljYXN0IGdyb3VwLlxuKyNbcmVwcih0cmFuc3BhcmVudCldXG4rcHViIHN0cnVjdCBNdWx0aWNhc3RHcm91cCB7XG4rICAgIC8vIE5vIE9wYXF1ZSBiZWNhdXNlIGZ1bGx5IGltbXV0YWJsZVxuKyAgICBncm91cDogYmluZGluZ3M6OmdlbmxfbXVsdGljYXN0X2dyb3VwLFxuK31cbitcbisvLyBTQUZFVFk6IFB1cmUgZGF0YSBzbyB0aHJlYWQgc2FmZS5cbit1bnNhZmUgaW1wbCBTeW5jIGZvciBNdWx0aWNhc3RHcm91cCB7fVxuK1xuK2ltcGwgTXVsdGljYXN0R3JvdXAge1xuKyAgICAvLy8gQ3JlYXRlcyBhIG5ldyBgTXVsdGljYXN0R3JvdXBgIGluc3RhbmNlLlxuKyAgICAvLy9cbisgICAgLy8vIEludGVuZGVkIHRvIGJlIHVzZWQgZnJvbSBjb25zdCBjb250ZXh0IG9ubHkuIFdpbGwgcGFuaWMgaWYgcHJvdmlkZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50cy5cbisgICAgcHViIGNvbnN0IGZuIGNvbnN0X25ldyhuYW1lOiBcdTAwMjZDU3RyKSAtXHUwMDNlIE11bHRpY2FzdEdyb3VwIHtcbisgICAgICAgIGxldCBtdXQgZ3JvdXA6IGJpbmRpbmdzOjpnZW5sX211bHRpY2FzdF9ncm91cCA9IHBpbl9pbml0Ojp6ZXJvZWQoKTtcbitcbisgICAgICAgIGxldCBuYW1lID0gbmFtZS50b19ieXRlc193aXRoX251bCgpO1xuKyAgICAgICAgaWYgZ3JvdXAubmFtZS5sZW4oKSBcdTAwM2MgbmFtZS5sZW4oKSB7XG4rICAgICAgICAgICAgcGFuaWMhKFwiZ2VubF9tdWx0aWNhc3RfZ3JvdXAgbmFtZSB0b28gbG9uZ1wiKTtcbisgICAgICAgIH1cbisgICAgICAgIGxldCBtdXQgaSA9IDA7XG4rICAgICAgICB3aGlsZSBpIFx1MDAzYyBuYW1lLmxlbigpIHtcbisgICAgICAgICAgICBncm91cC5uYW1lW2ldID0gbmFtZVtpXTtcbisgICAgICAgICAgICBpICs9IDE7XG4rICAgICAgICB9XG4rXG4rICAgICAgICBNdWx0aWNhc3RHcm91cCB7IGdyb3VwIH1cbisgICAgfVxuK31cbitcbisvLy8gQSByZWdpc3RyYXRpb24gb2YgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LlxuKy8vL1xuKy8vLyBUaGlzIHR5cGUgcmVwcmVzZW50cyB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgW2BGYW1pbHlgXS4gV2hlbiBhbiBpbnN0YW5jZSBvZiB0aGlzIHR5cGUgaXNcbisvLy8gZHJvcHBlZCwgaXRzIHJlc3BlY3RpdmUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSB3aWxsIGJlIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBzeXN0ZW0uXG4rLy8vXG4rLy8vICMgSW52YXJpYW50c1xuKy8vL1xuKy8vLyBgc2VsZi5mYW1pbHlgIGFsd2F5cyBob2xkcyBhIHZhbGlkIHJlZmVyZW5jZSB0byBhbiBpbml0aWFsaXplZCBhbmQgcmVnaXN0ZXJlZCBbYEZhbWlseWBdLlxuK3B1YiBzdHJ1Y3QgUmVnaXN0cmF0aW9uIHtcbisgICAgZmFtaWx5OiBcdTAwMjYnc3RhdGljIEZhbWlseSxcbit9XG4rXG4raW1wbCBGYW1pbHkge1xuKyAgICAvLy8gUmVnaXN0ZXJzIHRoZSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IHdpdGggdGhlIGtlcm5lbC5cbisgICAgcHViIGZuIHJlZ2lzdGVyKFx1MDAyNidzdGF0aWMgc2VsZikgLVx1MDAzZSBSZXN1bHRcdTAwM2NSZWdpc3RyYXRpb25cdTAwM2Uge1xuKyAgICAgICAgLy8gU0FGRVRZOiBgc2VsZi5hc19yYXcoKWAgaXMgYSB2YWxpZCBwb2ludGVyIHRvIGEgYGdlbmxfZmFtaWx5YCBzdHJ1Y3QuXG4rICAgICAgICAvLyBUaGUgYGdlbmxfZmFtaWx5YCBzdHJ1Y3QgaXMgc3RhdGljLCBzbyBpdCB3aWxsIG91dGxpdmUgdGhlIHJlZ2lzdHJhdGlvbi5cbisgICAgICAgIHRvX3Jlc3VsdCh1bnNhZmUgeyBiaW5kaW5nczo6Z2VubF9yZWdpc3Rlcl9mYW1pbHkoc2VsZi5hc19yYXcoKSkgfSk/O1xuKyAgICAgICAgT2soUmVnaXN0cmF0aW9uIHsgZmFtaWx5OiBzZWxmIH0pXG4rICAgIH1cbit9XG4rXG4raW1wbCBEcm9wIGZvciBSZWdpc3RyYXRpb24ge1xuKyAgICBmbiBkcm9wKFx1MDAyNm11dCBzZWxmKSB7XG4rICAgICAgICAvLyBTQUZFVFk6IGBzZWxmLmZhbWlseS5hc19yYXcoKWAgaXMgYSB2YWxpZCBwb2ludGVyIHRvIGEgcmVnaXN0ZXJlZCBgZ2VubF9mYW1pbHlgIHN0cnVjdC5cbisgICAgICAgIC8vIFRoZSBgUmVnaXN0cmF0aW9uYCBzdHJ1Y3QgZW5zdXJlcyB0aGF0IGBnZW5sX3VucmVnaXN0ZXJfZmFtaWx5YCBpcyBjYWxsZWQgZXhhY3RseSBvbmNlXG4rICAgICAgICAvLyBmb3IgdGhpcyBmYW1pbHkgd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZS5cbisgICAgICAgIHVuc2FmZSB7IGJpbmRpbmdzOjpnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KHNlbGYuZmFtaWx5LmFzX3JhdygpKSB9O1xuKyAgICB9XG4rfVxuK1xuKyNbbWFjcm9zOjprdW5pdF90ZXN0cyhydXN0X25ldGxpbmspXVxuK21vZCB0ZXN0cyB7XG4rICAgIHVzZSBzdXBlcjo6KjtcbitcbisgICAgI1t0ZXN0XVxuKyAgICBmbiB0ZXN0X2ZhbWlseV9mbGFnc19iaXRmaWVsZCgpIHtcbisgICAgICAgIGZvciBuZXRuc29rIGluIFtmYWxzZSwgdHJ1ZV0ge1xuKyAgICAgICAgICAgIGZvciBwYXJhbGxlbF9vcHMgaW4gW2ZhbHNlLCB0cnVlXSB7XG4rICAgICAgICAgICAgICAgIGxldCBtdXQgYl9mYW0gPSBiaW5kaW5nczo6Z2VubF9mYW1pbHkge1xuKyAgICAgICAgICAgICAgICAgICAgLi5EZWZhdWx0OjpkZWZhdWx0KClcbisgICAgICAgICAgICAgICAgfTtcbisgICAgICAgICAgICAgICAgYl9mYW0uc2V0X25ldG5zb2soaWYgbmV0bnNvayB7IDEgfSBlbHNlIHsgMCB9KTtcbisgICAgICAgICAgICAgICAgYl9mYW0uc2V0X3BhcmFsbGVsX29wcyhpZiBwYXJhbGxlbF9vcHMgeyAxIH0gZWxzZSB7IDAgfSk7XG4rXG4rICAgICAgICAgICAgICAgIGxldCBjX2JpdGZpZWxkID0gRmFtaWx5RmxhZ3Mge1xuKyAgICAgICAgICAgICAgICAgICAgbmV0bnNvayxcbisgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsX29wcyxcbisgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgICAgICAuaW50b19iaXRmaWVsZCgpO1xuK1xuKyAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IFRoZSBiaXQgZmllbGQgaXMgc3RvcmVkIGFzIHU4LlxuKyAgICAgICAgICAgICAgICBsZXQgYl92YWw6IHU4ID0gdW5zYWZlIHsgY29yZTo6bWVtOjp0cmFuc211dGUoYl9mYW0uX2JpdGZpZWxkXzEpIH07XG4rICAgICAgICAgICAgICAgIC8vIFNBRkVUWTogVGhlIGJpdCBmaWVsZCBpcyBzdG9yZWQgYXMgdTguXG4rICAgICAgICAgICAgICAgIGxldCBjX3ZhbDogdTggPSB1bnNhZmUgeyBjb3JlOjptZW06OnRyYW5zbXV0ZShjX2JpdGZpZWxkKSB9O1xuKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKGJfdmFsLCBjX3ZhbCk7XG4rICAgICAgICAgICAgfVxuKyAgICAgICAgfVxuKyAgICB9XG4rfVxuZGlmZiAtLWdpdCBhL3J1c3QvdWFwaS91YXBpX2hlbHBlci5oIGIvcnVzdC91YXBpL3VhcGlfaGVscGVyLmhcbmluZGV4IDA2ZDdkMWEyZThkYWJhLi44NmM3YjZiMjg0YjA1YSAxMDA2NDRcbi0tLSBhL3J1c3QvdWFwaS91YXBpX2hlbHBlci5oXG4rKysgYi9ydXN0L3VhcGkvdWFwaV9oZWxwZXIuaFxuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2RybS9ub3ZhX2RybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9kcm0vcGFudGhvcl9kcm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYW5kcm9pZC9iaW5kZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYW5kcm9pZC9iaW5kZXJfbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21paS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9ldGh0b29sLmhcdTAwM2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU1OjU1LjYzNzg4MzgxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODcxMDU0MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmluZGVyIE5ldGxpbmsgUmVwb3J0aW5nIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgaW50cm9kdWNlcyBuZXRsaW5rIHJlcG9ydGluZyBmb3IgQW5kcm9pZCBCaW5kZXIsIHNwZWNpZmljYWxseSB1c2luZyBSdXN0LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBsb29rcyBzb2xpZDsgaXQgc2VlbXMgdG8gYmUgYSBmdW5jdGlvbmFsIGFkZGl0aW9uLCBhZGRpbmcgbXVsdGljYXN0IHJlcG9ydGluZyBmb3IgdHJhbnNhY3Rpb24gZmFpbHVyZXMsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCdzIHRpZWQgdG8gdGhlIFJ1c3QgYmluZGVyIGltcGxlbWVudGF0aW9uLCBzbyB0aGF0J3MgdGhlIGFuZ2xlLlxuXG5UaGUgb2J2aW91cyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgLCB3aGljaCBoaW5nZXMgb24gYFJVU1QgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiAhQU5EUk9JRF9CSU5ERVJfSVBDYC4gU28sIHRvIGdldCB0aGlzIHdvcmtpbmcsIHRoYXQncyB3aGF0IHdlIG5lZWQgZW5hYmxlZC5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gRnJvbSB0aGUgcGF0Y2gsIEkgc2VlIHNldmVyYWwga2V5IGFkZGl0aW9ucy4gVGhlcmUncyBgUmVwb3J0OjpuZXdgLCBgUmVwb3J0OjptdWx0aWNhc3RgLCBgUmVwb3J0OjplcnJvcmAsIGV0Yy4sIG92ZXIgaW4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5yc2AuIEluIGBkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzYCwgd2UndmUgZ290IGBUcmFuc2FjdGlvbkluZm86OnJlcG9ydF9uZXRsaW5rYCBhbmQgYFRyYW5zYWN0aW9uSW5mbzo6cmVwb3J0X25ldGxpbmtfaW5uZXJgLiBBbmQsIGZpbmFsbHksIGluIGBydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yc2AsIHdlIGhhdmUgYE5ldGxpbmtTa0J1ZmY6Om5ld2AsIGBOZXRsaW5rU2tCdWZmOjpnZW5sbXNnX3B1dGAsIGFuZCBgR2VubE1zZzo6cHV0X3UzMmAsIGFtb25nIG90aGVycy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHN5bWJvbCBuYW1lcyBmb3Igc3l6a2FsbGVyLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLiBJIG5lZWQgdG8gdXNlIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgb3IgYGdyZXBwZXJgIHRvIGZpbmQgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWVzIGluIHRoZSBjb21waWxlZCBSdXN0IGNvZGUuIEknbSB3b25kZXJpbmcgaWYgc3l6a2FsbGVyIHVzZXMgdGhlIG1hbmdsZWQgb3IgZGVtYW5nbGVkIG5hbWVzLiBVc3VhbGx5LCB0aGUgZGVtYW5nbGVkIG5hbWVzIG9yIHRoZSBDIGZ1bmN0aW9ucyB3b3VsZCB3b3JrLiBIb3dldmVyLCBiZWNhdXNlIHRoaXMgaXMgUnVzdCwgdGhlIHN5bWJvbHMgbWlnaHQgYmUgbWFuZ2xlZC4gSXQgbG9va3MgbGlrZSBzeXprYWxsZXIgY2FuIG1hdGNoIGRlbWFuZ2xlZCBuYW1lcyBvciB3ZSBjYW4gcHJvdmlkZSB0aGUgc291cmNlIGZpbGUgbmFtZXMgb3IgUnVzdCBmdW5jdGlvbiBuYW1lcyBsaWtlIGByZXBvcnRfbmV0bGlua19pbm5lcmAsIGByZXBvcnRfbmV0bGlua2AsIGBtdWx0aWNhc3RgLCBgZ2VubG1zZ19wdXRgLlxuXG5MZXQncyBjaGVjayB0aGUgZXhhY3Qgc3ltYm9sIG5hbWVzIGluIFJ1c3QuIEFjdHVhbGx5LCBgRm9jdXNTeW1ib2xzYCBjYW4gYmUganVzdCB0aGUgZnVuY3Rpb24gbmFtZXMgbGlrZSBgcmVwb3J0X25ldGxpbmtfaW5uZXJgLCBgcmVwb3J0X25ldGxpbmtgLCBgdHJhbnNhY3Rpb25gLCBgcmVwbHlfaW5uZXJgLlxuV2FpdCwgYHRyYW5zYWN0aW9uYCBhbmQgYHJlcGx5X2lubmVyYCBhcmUgaW4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzYC5cbkhlcmUncyB3aGF0IEkgY2FuIHNlZTpcbmBgYHJ1c3RcbiAgICBmbiB0cmFuc2FjdGlvbihzZWxmOiBcdTAwMjZBcmNcdTAwM2NTZWxmXHUwMDNlLCBjbWQ6IHUzMiwgcmVhZGVyOiBcdTAwMjZtdXQgVXNlclNsaWNlUmVhZGVyKSAtXHUwMDNlIFJlc3Vcbi4uLlxuICAgIGZuIHJlcGx5X2lubmVyKHNlbGY6IFx1MDAyNkFyY1x1MDAzY1NlbGZcdTAwM2UsIGluZm86IFx1MDAyNm11dCBUcmFuc2FjdGlvbkluZm8pIC1cdTAwM2UgQmluZGVyUmVzdWx0IHtcbmBgYFxuTG9va3MgbGlrZSB0aGVzZSBhcmUgbWV0aG9kcyBvZiBgVGhyZWFkYCBvciBzaW1pbGFyLiBMZXQncyBjaGVjayBgZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5yc2A6XG5gYGBydXN0XG4gICAgcHViKGNyYXRlKSBmbiByZXBvcnRfbmV0bGluayhcdTAwMjZzZWxmLCByZXBseTogdTMyLCBjdHg6IFx1MDAyNmNyYXRlOjpDb250ZXh0KSB7XG4uLi5cbiAgICBmbiByZXBvcnRfbmV0bGlua19pbm5lcihcdTAwMjZzZWxmLCByZXBseTogdTMyLCBjdHg6IFx1MDAyNmNyYXRlOjpDb250ZXh0KSAtXHUwMDNlIGtlcm5lbDo6ZXJyb3I6OlJlc3VsdCB7XG5gYGBcblRoZW4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5yc2A6XG5gYGBydXN0XG4gICAgcHViIGZuIG5ldyhcbi4uLlxuICAgIHB1YiBmbiBtdWx0aWNhc3Qoc2VsZiwgcG9ydGlkOiB1MzIsIGZsYWdzOiBrZXJuZWw6OmFsbG9jOjpGbGFncykgLVx1MDAzZSBSZXN1bHQge1xuYGBgXG5BbmQgZmluYWxseSBgcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnNgOlxuYGBgcnVzdFxuICAgIHB1YiBmbiBuZXcoc2l6ZTogdXNpemUsIGZsYWdzOiBhbGxvYzo6RmxhZ3MpIC1cdTAwM2UgUmVzdWx0XHUwMDNjTmV0bGlua1NrQnVmZiwgQWxsb2NFcnJvclx1MDAzZSB7XG4uLi5cbiAgICBwdWIgZm4gZ2VubG1zZ19wdXQoXG4uLi5cbiAgICBwdWIgZm4gcHV0X3UzMihcdTAwMjZtdXQgc2VsZiwgYXR0cnR5cGU6IGNfaW50LCB2YWx1ZTogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4uLi5cbiAgICBwdWIgZm4gbXVsdGljYXN0KFxuYGBgXG5JJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZSB0aGUgcmlnaHQgc3ltYm9sIG5hbWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUwMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU2OjA3LjUwODk0MTYxMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAxNjI3NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm4gcmVwb3J0X25ldGxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5yc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzPTUzPSAgICBwdWIoY3JhdGUpIGZuIGlzX29uZXdheShcXHUwMDI2c2VsZikgLVxcdTAwM2UgYm9vbCB7XFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzLTU2LVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnM6NTc6ICAgIHB1YihjcmF0ZSkgZm4gcmVwb3J0X25ldGxpbmsoXFx1MDAyNnNlbGYsIHJlcGx5OiB1MzIsIGN0eDogXFx1MDAyNmNyYXRlOjpDb250ZXh0KSB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5ycy01OC0gICAgICAgIGlmIGxldCBFcnIoZXJyKSA9IHNlbGYucmVwb3J0X25ldGxpbmtfaW5uZXIocmVwbHksIGN0eCkge1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5ycy02Ni1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzOjY3OiAgICBmbiByZXBvcnRfbmV0bGlua19pbm5lcihcXHUwMDI2c2VsZiwgcmVwbHk6IHUzMiwgY3R4OiBcXHUwMDI2Y3JhdGU6OkNvbnRleHQpIC1cXHUwMDNlIGtlcm5lbDo6ZXJyb3I6OlJlc3VsdCB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5ycy02OC0gICAgICAgIGlmICFSZXBvcnQ6Omhhc19saXN0ZW5lcnMoKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU2OjA3LjYzOTExOTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzEzNzY1Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIE5ldGxpbmsgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIE5ldGxpbmstcmVsYXRlZCBmdW5jdGlvbnM6IGByZXBvcnRfbmV0bGlua2AsIGByZXBvcnRfbmV0bGlua19pbm5lcmAsIGB0cmFuc2FjdGlvbmAsIGFuZCBgcmVwbHlfaW5uZXJgLiBTZWVtcyBsaWtlIGEgZmFpcmx5IHN0YW5kYXJkIE5ldGxpbmsgc2V0dXAsIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBtZXNzYWdlIGhhbmRsaW5nIGFuZCBwZXJoYXBzIHNvbWUga2luZCBvZiB0cmFuc2FjdGlvbmFsIGFwcHJvYWNoLiBMZXQgbWUgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBob3cgdGhleSdyZSBoYW5kbGluZyBHZW5lcmljIE5ldGxpbmsgbWVzc2FnaW5nLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBob3cgdGhleSBwdXQgdG9nZXRoZXIgdGhlIG1lc3NhZ2VzLiBJJ20gZ29pbmcgdG8gbG9vayB1cCB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBgZ2VubG1zZ19wdXRgIGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhhbmRsaW5nIG11bHRpY2FzdCBjb21tdW5pY2F0aW9uIHdpdGhpbiB0aGUgTmV0bGluayBmcmFtZXdvcmsuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yc2AgZmlsZTsgdGhpcyB3aWxsIGxpa2VseSBjb250YWluIHRoZSBsb3dlci1sZXZlbCBOZXRsaW5rIGJpbmRpbmdzIGFuZCB1dGlsaXR5IGZ1bmN0aW9ucy4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaG93IHRoZSBmdW5jdGlvbnMgdGllIGludG8gTmV0bGluaydzIG1lc3NhZ2UgZnJhbWluZyBhbmQgZGVsaXZlcnkgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoxMC45NTI4ODczNzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NjYwNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZuIGdlbmxtc2dfcHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInJ1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInJ1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzPTQyPSAgICBwdWIgZm4gbmV3KHNpemU6IHVzaXplLCBmbGFnczogYWxsb2M6OkZsYWdzKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjTmV0bGlua1NrQnVmZiwgQWxsb2NFcnJvclxcdTAwM2Uge1xcbi0tXFxucnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMtNDktICAgIC8vLyBQdXRzIGEgZ2VuZXJpYyBuZXRsaW5rIGhlYWRlciBpbnRvIHRoZSBgTmV0bGlua1NrQnVmZmAuXFxucnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnM6NTA6ICAgIHB1YiBmbiBnZW5sbXNnX3B1dChcXG5ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5ycy01MS0gICAgICAgIHNlbGYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU2OjExLjA2MjU1NTQ2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzg4NzgyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE5ldGxpbmsgTXVsdGljYXN0IGluIHRoZSBSdXN0IEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgbXVsdGljYXN0IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBSdXN0IGtlcm5lbCdzIE5ldGxpbmsgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yc2AgZmlsZS4gSXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGZvciB0aGUgY29yZSBtdWx0aWNhc3QgZnVuY3Rpb25hbGl0eSBhbmQgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGlzIGZpbGUsIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBhbnkgbWVudGlvbnMgb3IgaW1wbGVtZW50YXRpb25zIHJlbGF0ZWQgdG8gXCJtdWx0aWNhc3QuXCIgSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBob3cgbXVsdGljYXN0IGdyb3VwIG1hbmFnZW1lbnQsIG1lc3NhZ2Ugcm91dGluZywgYW5kIHNvY2tldCBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbGwgYmUgbG9va2luZyBmb3Igd2VsbC1kZWZpbmVkIHBhdHRlcm5zIGFuZCBpZGlvbWF0aWMgUnVzdCBjb2RlIHVzYWdlLCBob3BpbmcgZm9yIGNsYXJpdHkgYW5kIGVmZmljaWVuY3kuIEknbSByZWFkeSB0byBwYXJzZSB0aGUgY29kZSBhbmQgcmVidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTQwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTc6NTY6MTUuNDAxNDQwNTM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjQzNTg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbiBtdWx0aWNhc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwicnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwicnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnM9MTExPSAgICBwdWIgZm4gcHV0X2ZsYWcoXFx1MDAyNm11dCBzZWxmLCBhdHRydHlwZTogY19pbnQpIC1cXHUwMDNlIFJlc3VsdCB7XFxuLS1cXG5ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5ycy0xMTktICAgICNbaW5saW5lXVxcbnJ1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzOjEyMDogICAgcHViIGZuIG11bHRpY2FzdChcXG5ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5ycy0xMjEtICAgICAgICBzZWxmLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoxNS41NTM4ODYyODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQyNTAzODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIE15IE5ldGxpbmsgUmVwb3J0aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIHB1dHRpbmcgdG9nZXRoZXIgdGhlIGBGb2N1c1N5bWJvbHNgIHN0cnVjdHVyZSBhbmQgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYWxsIHRoZSBlc3NlbnRpYWwgbmV0bGluayByZXBvcnRpbmcgZnVuY3Rpb25zLiBJJ3ZlIGRlY2lkZWQgb24gaW5jbHVkaW5nIGByZXBvcnRfbmV0bGlua2AsIGByZXBvcnRfbmV0bGlua19pbm5lcmAsIGBnZW5sbXNnX3B1dGAsIGFuZCBgbXVsdGljYXN0YC4gV2FpdCBhIG1pbnV0ZSwgKm11bHRpY2FzdCogaXMgYSBwcmV0dHkgZ2VuZXJpYyB0ZXJtOyBpdCBjb3VsZCBsZWFkIHRvIGFtYmlndWl0eS4gVGhpbmtpbmcgc3RyYXRlZ2ljYWxseSwgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBzdGljayB3aXRoIHRoZSBtb3JlIGRlc2NyaXB0aXZlIGFuZCBwcm9qZWN0LXNwZWNpZmljIG5hbWVzLiBJ4oCZbGwgZ28gd2l0aCB0aGUgbW9yZSBleHBsaWNpdCBgcmVwb3J0X25ldGxpbmtfaW5uZXJgIGFuZCBgcmVwb3J0X25ldGxpbmtgIGFmdGVyIGFsbC4gVGhhdCBmZWVscyBjbGVhbmVyIGFuZCBsZXNzIHByb25lIHRvIGNvbmZ1c2lvbiBkb3duIHRoZSBsaW5lLlxuXG5Db25zZXF1ZW50bHksIEkgbmVlZCB0byBtYWtlIHNvbWUgYWRqdXN0bWVudHMuIEknbGwgbmVlZCB0byBtb2RpZnkgdGhlIGB0cmFuc2FjdGlvbmAgYW5kIGByZXBseV9pbm5lcmAgZnVuY3Rpb25zIHRvIGNhbGwgdGhlIGByZXBvcnRfbmV0bGlua2AgZnVuY3Rpb24uIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGVpciBpbXBsZW1lbnRhdGlvbnMuIFRvIGRvIHRoYXQsIEknbGwgbmVlZCB0byBsb29rIGluIGBkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yc2AgYXMgdGhhdCdzIHdoZXJlIHRoZXkgc2hvdWxkIGJlIGRlZmluZWQuIExldCdzIHNlZSBpZiB0aG9zZSBhZGp1c3RtZW50cyBhcmUgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI4OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoxOS40OTYzOTMxMzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODQ4MzE2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbiB0cmFuc2FjdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycz0xMjE0PSAgICBmbiByZWFkX3RyYW5zYWN0aW9uX2luZm8oXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycy0xMjQ5LSAgICAjW2lubGluZShuZXZlcildXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnM6MTI1MDogICAgZm4gdHJhbnNhY3Rpb24oc2VsZjogXFx1MDAyNkFyY1xcdTAwM2NTZWxmXFx1MDAzZSwgY21kOiB1MzIsIHJlYWRlcjogXFx1MDAyNm11dCBVc2VyU2xpY2VSZWFkZXIpIC1cXHUwMDNlIFJlc3VsdFxcdTAwM2MoKVxcdTAwM2Uge1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzLTEyNTEtICAgICAgICBsZXQgbXV0IGluZm8gPSBUcmFuc2FjdGlvbkluZm86Onplcm9lZCgpO1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnMtMTI5OC1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yczoxMjk5OiAgICBmbiB0cmFuc2FjdGlvbl9pbm5lcihzZWxmOiBcXHUwMDI2QXJjXFx1MDAzY1NlbGZcXHUwMDNlLCBpbmZvOiBcXHUwMDI2bXV0IFRyYW5zYWN0aW9uSW5mbykgLVxcdTAwM2UgQmluZGVyUmVzdWx0IHtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycy0xMzAwLSAgICAgICAgbGV0IG5vZGVfcmVmID0gc2VsZi5wcm9jZXNzLmdldF90cmFuc2FjdGlvbl9ub2RlKGluZm8udGFyZ2V0X2hhbmRsZSk/O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoxOS42NTQ4ODQ2OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5MjA1Mjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEJpbmRlciBOZXRsaW5rIENvZGUqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldGxpbmsgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIEFuZHJvaWQgYmluZGVyIGRyaXZlci4gTXkgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIGFuZCBtdWx0aWNhc3QgaGFuZGxpbmcuIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzYC4gSSdsbCBiZSBob21pbmcgaW4gb24gdGhlIGBuZXdgIGZ1bmN0aW9uLCBhcyB0aGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBuZXRsaW5rIHNvY2tldCBvciByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBhcmUgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoZW4sIEknbGwgbW92ZSBvbiB0byBgbXVsdGljYXN0YCwgc2luY2UgdGhhdCBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGdyb3VwIGNvbW11bmljYXRpb25zLiBUaGF0IHNob3VsZCBwcm92aWRlIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG5ldGxpbmsgY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoyMy4xNDY5NDE4MTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjgzMTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbiBtdWx0aWNhc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5ycz0zND0gICAgcHViIGZuIG5ldyhcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5ycy00Ni0gICAgLy8vIEJyb2FkY2FzdCB0aGlzIG1lc3NhZ2UuXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzOjQ3OiAgICBwdWIgZm4gbXVsdGljYXN0KHNlbGYsIHBvcnRpZDogdTMyLCBmbGFnczoga2VybmVsOjphbGxvYzo6RmxhZ3MpIC1cXHUwMDNlIFJlc3VsdCB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzLTQ4LSAgICAgICAgc2VsZi5za2IubXVsdGljYXN0KFxcdTAwMjZCSU5ERVJfTkxfRkFNSUxZLCBwb3J0aWQsIDAsIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoyMy4yNjk3Nzk3MzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4NTc3MDI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBCaW5kZXIgSVBDIGluIFJ1c3QqKlxuXG5Pa2F5LCBzbyBJJ20gdXBkYXRpbmcgbXkgYEZvY3VzU3ltYm9sc2AgbGlzdCBmb3IgdGhlIEJpbmRlciBJUEMgUnVzdCBleHBsb3JhdGlvbi4gSSBuZWVkIHRvIGdldCB0aGUga2V5IGZ1bmN0aW9ucyBpZGVudGlmaWVkIGZvciB0aGUgZnV6emVyLiBJJ20gYWRkaW5nIGByZXBvcnRfbmV0bGlua19pbm5lcmAsIGByZXBvcnRfbmV0bGlua2AsIGB0cmFuc2FjdGlvbmAsIGFuZCBgcmVwbHlfaW5uZXJgLiBIbW0sIGhvbGQgb24uIGB0cmFuc2FjdGlvbmAgYW5kIGByZXBseV9pbm5lcmAgYXJlIGEgYml0IHRvbyBnZW5lcmljLiBXaGlsZSB0aGV5ICphcmUqIGp1c3QgYHRyYW5zYWN0aW9uYCBpbiB0aGUgUnVzdCBjb2RlLCBjb3VsZCBJIG1ha2UgdGhlbSBtb3JlIHNwZWNpZmljLCBsaWtlIGBiaW5kZXJfdHJhbnNhY3Rpb25gIG9yIHNvbWV0aGluZz8gIFVsdGltYXRlbHksIGBUcmFuc2FjdGlvbkluZm86OnJlcG9ydF9uZXRsaW5rX2lubmVyYCBtYXkgYmUgdGhlIHRpY2tldC4gU3l6a2FsbGVyIGxldmVyYWdlcyBzdWJzdHJpbmcgbWF0Y2hpbmcsIHNvIGByZXBvcnRfbmV0bGlua19pbm5lcmAgc2hvdWxkIGJlIGRpc3RpbmN0aXZlIGVub3VnaC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBgcmVwb3J0X25ldGxpbmtfaW5uZXJgIGlzLCBpbiBmYWN0LCB1bmlxdWUuIFllcCwgZ29vZCB0byBnby5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucywgc3BlY2lmaWNhbGx5IHRvIGVuc3VyZSBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgIGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQ2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU2OjI3LjQ1NTU1MzUxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MzQ5MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBTkRST0lEX0JJTkRFUl9JUENfUlVTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2FuZHJvaWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FuZHJvaWQvS2NvbmZpZz00PWNvbmZpZyBBTkRST0lEX0JJTkRFUl9JUENcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvYW5kcm9pZC9LY29uZmlnOjE3OmNvbmZpZyBBTkRST0lEX0JJTkRFUl9JUENfUlVTVFxcbmRyaXZlcnMvYW5kcm9pZC9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIlJ1c3QgdmVyc2lvbiBvZiBBbmRyb2lkIEJpbmRlciBJUEMgRHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoyNy41NjI5MTQ3MjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2ODYwNzYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJ1c3QtQmFzZWQgQmluZGVyIElQQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgLiBUaGUgZGVwZW5kZW5jaWVzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgUlVTVCBcdTAwMjZcdTAwMjYgTU1VIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2ICFBTkRST0lEX0JJTkRFUl9JUENgLiBTZWVtcyBsb2dpY2FsLiBFc3NlbnRpYWxseSwgd2UgbmVlZCBSdXN0IHN1cHBvcnQsIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQsIE5ldHdvcmsgZnVuY3Rpb25hbGl0eSwgYW5kIGltcG9ydGFudGx5LCB3ZSdyZSAqbm90KiB1c2luZyB0aGUgbGVnYWN5IEFuZHJvaWQgQmluZGVyIElQQy4gR2l2ZW4gdGhhdCB0aGUgYE5FVGAgZGVwZW5kZW5jeSBpcyB1c3VhbGx5IGFscmVhZHkgaGFuZGxlZCBpbiBtb3N0IHNldHVwcywgYW5kIFJ1c3QgaXMsIG9mIGNvdXJzZSwgZXNzZW50aWFsLCBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgIHJlYWxseSBpcyB0aGUga2V5IHBpZWNlIGhlcmUuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlICpvbmx5KiBuZWNlc3NhcnkgY29uZmlnIGZvciB0aGUgUnVzdC1iYXNlZCBpbXBsZW1lbnRhdGlvbi4gSG1tLCBhbmQgeWVzLCBJIHNlZSB0aGF0IHRoZSBgcnVzdF9oZWxwZXJfZ2VubG1zZ19uZXdgIGZ1bmN0aW9uIGluIGBydXN0L2hlbHBlcnMvbmV0L2dlbmV0bGluay5jYCBuZWVkcyBgQ09ORklHX05FVGAsIGJ1dCB0aGF0IHJlcXVpcmVtZW50IGlzIGFscmVhZHkgY292ZXJlZCBieSB0aGUgYE5FVGAgZGVwZW5kZW5jeSBvZiBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgLCBzbyBhbGwgZ29vZCB0aGVyZS5cblxuQWxyaWdodCwgc28gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGlzIGdvaW5nIHRvIGJlIGEgc2ltcGxlIG9uZTogYFtcIkFORFJPSURfQklOREVSX0lQQ19SVVNUXCJdYC5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IHdlIHNob3VsZCBiZSBmdXp6aW5nLiBPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGl0IGFkZHMgYSBuZXcgbmV0bGluayBmYW1pbHkgc3BlY2lmaWNhbGx5IGZvciBCaW5kZXIsIGFuZCByZXBvcnRzIHRyYW5zYWN0aW9uIGZhaWx1cmVzLiBUaGF0IGRlZmluaXRlbHkgaW5kaWNhdGVzIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaW50ZXJhY3Rpb24gd2l0aCBib3RoIGJpbmRlciBhbmQgbmV0bGluayBpcyByZXF1aXJlZCB0byByZWFjaCBpdC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiB0aGVzZSByZXN1bHRzLiBUaW1lIHRvIGZpbmFsaXplIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzQzLCJPdXRwdXRUb2tlbnMiOjk4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU2OjM0LjIzMTUyNTAzNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzkxOTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZXBvcnRfbmV0bGlua19pbm5lclwiLFxuICAgIFwicmVwb3J0X25ldGxpbmtcIixcbiAgICBcImdlbmxtc2dfcHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBuZXRsaW5rIG11bHRpY2FzdCByZXBvcnRpbmcgZm9yIEFuZHJvaWQgQmluZGVyIHRyYW5zYWN0aW9uIGZhaWx1cmVzIGluIFJ1c3QuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBmb3IgY29uc3RydWN0aW5nIGFuZCBicm9hZGNhc3RpbmcgbmV0bGluayBtZXNzYWdlcyB3aGVuIGJpbmRlciB0cmFuc2FjdGlvbnMgZmFpbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBTkRST0lEX0JJTkRFUl9JUENfUlVTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcG9ydF9uZXRsaW5rX2lubmVyXCIsXG4gICAgXCJyZXBvcnRfbmV0bGlua1wiLFxuICAgIFwiZ2VubG1zZ19wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIG5ldGxpbmsgbXVsdGljYXN0IHJlcG9ydGluZyBmb3IgQW5kcm9pZCBCaW5kZXIgdHJhbnNhY3Rpb24gZmFpbHVyZXMgaW4gUnVzdC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGZvciBjb25zdHJ1Y3RpbmcgYW5kIGJyb2FkY2FzdGluZyBuZXRsaW5rIG1lc3NhZ2VzIHdoZW4gYmluZGVyIHRyYW5zYWN0aW9ucyBmYWlsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowsm4km[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 17:33:23 +0000 UTC FinishedAt: 2026-07-07 17:56:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c73cd9f0819c1c44e373e3dabb68318b1de1a12", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ANDROID_BINDER_IPC_RUST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c73cd9f0819c1c44e373e3dabb68318b1de1a12", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ANDROID_BINDER_IPC_RUST" ], "series_id": "8ef05d45-b447-4cc7-b29d-275b27bada18" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "report_netlink_inner", "report_netlink", "genlmsg_put" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FORFJPSURfQklOREVSX0lQQ19SVVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwb3J0X25ldGxpbmtfaW5uZXImIzM0OywKICAgICYjMzQ7cmVwb3J0X25ldGxpbmsmIzM0OywKICAgICYjMzQ7Z2VubG1zZ19wdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBuZXRsaW5rIG11bHRpY2FzdCByZXBvcnRpbmcgZm9yIEFuZHJvaWQgQmluZGVyIHRyYW5zYWN0aW9uIGZhaWx1cmVzIGluIFJ1c3QuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBmb3IgY29uc3RydWN0aW5nIGFuZCBicm9hZGNhc3RpbmcgbmV0bGluayBtZXNzYWdlcyB3aGVuIGJpbmRlciB0cmFuc2FjdGlvbnMgZmFpbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc1ZTI4MDQwOTYyYTVmMWQ3MTk5NTZmMjc4MGI3ZTdlNjM1ZDVjMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDE3OjU1OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGMzZjcyMDU4YTJmMjZlLi5iZTVhMTk2ZjEyYzZhZiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE4ODc1LDYgJiM0MzsxODg3NSw4IEBAIEY6XHRpbmNsdWRlL3VhcGkvbGludXgvc2N0cC5oXG4gRjpcdGxpYi9uZXRfdXRpbHMuY1xuIEY6XHRsaWIvcmFuZG9tMzIuY1xuIEY6XHRuZXQvXG4mIzQzO0Y6XHRydXN0L2hlbHBlcnMvbmV0L1xuJiM0MztGOlx0cnVzdC9rZXJuZWwvbmV0L1xuIEY6XHRzYW1wbGVzL3BrdGdlbi9cbiBGOlx0dG9vbHMvbmV0L1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWcgYi9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZ1xuaW5kZXggZTJlNDAyYzlkMTc1OWMuLjYwNmE5ZDA3Zjc3NDcxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnXG5AQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIEFORFJPSURfQklOREVSX0lQQ1xuIFxuIGNvbmZpZyBBTkRST0lEX0JJTkRFUl9JUENfUlVTVFxuIFx0Ym9vbCBcJiMzNDtSdXN0IHZlcnNpb24gb2YgQW5kcm9pZCBCaW5kZXIgSVBDIERyaXZlclwmIzM0O1xuLVx0ZGVwZW5kcyBvbiBSVVNUIFx1MDAyNlx1MDAyNiBNTVUgXHUwMDI2XHUwMDI2ICFBTkRST0lEX0JJTkRFUl9JUENcbiYjNDM7XHRkZXBlbmRzIG9uIFJVU1QgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiAhQU5EUk9JRF9CSU5ERVJfSVBDXG4gXHRoZWxwXG4gXHQgIFRoaXMgZW5hYmxlcyB0aGUgUnVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQmluZGVyIGRyaXZlci5cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL25ldGxpbmsucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL25ldGxpbmsucnNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmViN2VhMmVkYWZmNzJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5yc1xuQEAgLTAsMCAmIzQzOzEsMTE3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoKEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUpIE9SIEJTRC0zLUNsYXVzZSlcbiYjNDM7LyogQmFzZWQgb246IERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9iaW5kZXIueWFtbCAqL1xuJiM0MztcbiYjNDM7IyFbYWxsb3codW5yZWFjaGFibGVfcHViLCBjbGlwcHk6Ondyb25nX3NlbGZfY29udmVudGlvbildXG4mIzQzO3VzZSBrZXJuZWw6OntcbiYjNDM7ICAgIG5ldDo6bmV0bGluazo6e1xuJiM0MzsgICAgICAgIEZhbWlseSxcbiYjNDM7ICAgICAgICBHZW5sTXNnLFxuJiM0MzsgICAgICAgIE11bHRpY2FzdEdyb3VwLFxuJiM0MzsgICAgICAgIE5ldGxpbmtTa0J1ZmYsIC8vXG4mIzQzOyAgICB9LFxuJiM0MzsgICAgcHJlbHVkZTo6KiwgLy9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3B1YiBzdGF0aWMgQklOREVSX05MX0ZBTUlMWTogRmFtaWx5ID0gRmFtaWx5Ojpjb25zdF9uZXcoXG4mIzQzOyAgICBcdTAwMjZjcmF0ZTo6VEhJU19NT0RVTEUsXG4mIzQzOyAgICBrZXJuZWw6OnVhcGk6OkJJTkRFUl9GQU1JTFlfTkFNRSxcbiYjNDM7ICAgIGtlcm5lbDo6dWFwaTo6QklOREVSX0ZBTUlMWV9WRVJTSU9OLFxuJiM0MzsgICAgXHUwMDI2QklOREVSX05MX0ZBTUlMWV9NQ0dSUFMsXG4mIzQzOyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgQklOREVSX05MX0ZBTUlMWV9NQ0dSUFM6IFtNdWx0aWNhc3RHcm91cDsgMV0gPSBbTXVsdGljYXN0R3JvdXA6OmNvbnN0X25ldyhjXCYjMzQ7cmVwb3J0XCYjMzQ7KV07XG4mIzQzO1xuJiM0MzsvLy8gQSBtdWx0aWNhc3QgZXZlbnQgc2VudCB0byB1c2Vyc3BhY2Ugc3Vic2NyaWJlcnMgdG8gbm90aWZ5IHRoZW0gYWJvdXRcbiYjNDM7Ly8vIGJpbmRlciB0cmFuc2FjdGlvbiBmYWlsdXJlcy4gVGhlIGdlbmVyYXRlZCByZXBvcnQgcHJvdmlkZXMgdGhlIGZ1bGxcbiYjNDM7Ly8vIGRldGFpbHMgb2YgdGhlIHNwZWNpZmljIHRyYW5zYWN0aW9uIHRoYXQgZmFpbGVkLiBUaGUgaW50ZW50aW9uIGlzIGZvclxuJiM0MzsvLy8gcHJvZ3JhbXMgdG8gbW9uaXRvciB0aGVzZSBldmVudHMgYW5kIHJlYWN0IHRvIHRoZSBmYWlsdXJlcyBhcyBuZWVkZWQuXG4mIzQzO3B1YiBzdHJ1Y3QgUmVwb3J0IHtcbiYjNDM7ICAgIHNrYjogR2VubE1zZyxcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW1wbCBSZXBvcnQge1xuJiM0MzsgICAgLy8vIENyZWF0ZSBhIG5ldyBtdWx0aWNhc3QgbWVzc2FnZS5cbiYjNDM7ICAgIHB1YiBmbiBuZXcoXG4mIzQzOyAgICAgICAgc2l6ZTogdXNpemUsXG4mIzQzOyAgICAgICAgcG9ydGlkOiB1MzIsXG4mIzQzOyAgICAgICAgc2VxOiB1MzIsXG4mIzQzOyAgICAgICAgZmxhZ3M6IGtlcm5lbDo6YWxsb2M6OkZsYWdzLFxuJiM0MzsgICAgKSAtXHUwMDNlIFJlc3VsdFx1MDAzY1NlbGYsIGtlcm5lbDo6YWxsb2M6OkFsbG9jRXJyb3JcdTAwM2Uge1xuJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9DTURfUkVQT1JUOiB1OCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0NNRF9SRVBPUlQgYXMgdTg7XG4mIzQzOyAgICAgICAgbGV0IHNrYiA9IE5ldGxpbmtTa0J1ZmY6Om5ldyhzaXplLCBmbGFncyk/O1xuJiM0MzsgICAgICAgIGxldCBza2IgPSBza2IuZ2VubG1zZ19wdXQocG9ydGlkLCBzZXEsIFx1MDAyNkJJTkRFUl9OTF9GQU1JTFksIEJJTkRFUl9DTURfUkVQT1JUKT87XG4mIzQzOyAgICAgICAgT2soU2VsZiB7IHNrYiB9KVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBCcm9hZGNhc3QgdGhpcyBtZXNzYWdlLlxuJiM0MzsgICAgcHViIGZuIG11bHRpY2FzdChzZWxmLCBwb3J0aWQ6IHUzMiwgZmxhZ3M6IGtlcm5lbDo6YWxsb2M6OkZsYWdzKSAtXHUwMDNlIFJlc3VsdCB7XG4mIzQzOyAgICAgICAgc2VsZi5za2IubXVsdGljYXN0KFx1MDAyNkJJTkRFUl9OTF9GQU1JTFksIHBvcnRpZCwgMCwgZmxhZ3MpXG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgLy8vIENoZWNrIGlmIHRoaXMgbWVzc2FnZSB0eXBlIGhhcyBsaXN0ZW5lcnMuXG4mIzQzOyAgICBwdWIgZm4gaGFzX2xpc3RlbmVycygpIC1cdTAwM2UgYm9vbCB7XG4mIzQzOyAgICAgICAgQklOREVSX05MX0ZBTUlMWS5oYXNfbGlzdGVuZXJzKDApXG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgLy8vIFRoZSBlbnVtIGJpbmRlcl9kcml2ZXJfcmV0dXJuX3Byb3RvY29sIHJldHVybmVkIHRvIHRoZSBzZW5kZXIuXG4mIzQzOyAgICBwdWIgZm4gZXJyb3IoXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4mIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0VSUk9SOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0VSUk9SIGFzIGNfaW50O1xuJiM0MzsgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0VSUk9SLCB2YWwpXG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgLy8vIFRoZSBiaW5kZXIgY29udGV4dCB3aGVyZSB0aGUgdHJhbnNhY3Rpb24gb2NjdXJyZWQuXG4mIzQzOyAgICBwdWIgZm4gY29udGV4dChcdTAwMjZtdXQgc2VsZiwgdmFsOiBcdTAwMjZDU3RyKSAtXHUwMDNlIFJlc3VsdCB7XG4mIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0NPTlRFWFQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfQ09OVEVYVCBhcyBjX2ludDtcbiYjNDM7ICAgICAgICBzZWxmLnNrYi5wdXRfc3RyaW5nKEJJTkRFUl9BX1JFUE9SVF9DT05URVhULCB2YWwpXG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgLy8vIFRoZSBQSUQgb2YgdGhlIHNlbmRlciBwcm9jZXNzLlxuJiM0MzsgICAgcHViIGZuIGZyb21fcGlkKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9GUk9NX1BJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9GUk9NX1BJRCBhcyBjX2ludDtcbiYjNDM7ICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9GUk9NX1BJRCwgdmFsKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBUaGUgVElEIG9mIHRoZSBzZW5kZXIgdGhyZWFkLlxuJiM0MzsgICAgcHViIGZuIGZyb21fdGlkKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9GUk9NX1RJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9GUk9NX1RJRCBhcyBjX2ludDtcbiYjNDM7ICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9GUk9NX1RJRCwgdmFsKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBUaGUgUElEIG9mIHRoZSByZWNpcGllbnQgcHJvY2Vzcy4gVGhpcyBhdHRyaWJ1dGUgbWF5IG5vdCBiZSBwcmVzZW50XG4mIzQzOyAgICAvLy8gaWYgdGhlIHRhcmdldCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC5cbiYjNDM7ICAgIHB1YiBmbiB0b19waWQoXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4mIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX1RPX1BJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9UT19QSUQgYXMgY19pbnQ7XG4mIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfVE9fUElELCB2YWwpXG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgLy8vIFRoZSBUSUQgb2YgdGhlIHJlY2lwaWVudCB0aHJlYWQuIFRoaXMgYXR0cmlidXRlIG1heSBub3QgYmUgcHJlc2VudFxuJiM0MzsgICAgLy8vIGlmIHRoZSB0YXJnZXQgY291bGQgbm90IGJlIGRldGVybWluZWQuXG4mIzQzOyAgICBwdWIgZm4gdG9fdGlkKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9UT19USUQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfVE9fVElEIGFzIGNfaW50O1xuJiM0MzsgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX1RPX1RJRCwgdmFsKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBXaGVuIHByZXNlbnQsIGluZGljYXRlcyB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIGlzIGEgcmVwbHkuXG4mIzQzOyAgICBwdWIgZm4gaXNfcmVwbHkoXHUwMDI2bXV0IHNlbGYpIC1cdTAwM2UgUmVzdWx0IHtcbiYjNDM7ICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfSVNfUkVQTFk6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfSVNfUkVQTFkgYXMgY19pbnQ7XG4mIzQzOyAgICAgICAgc2VsZi5za2IucHV0X2ZsYWcoQklOREVSX0FfUkVQT1JUX0lTX1JFUExZKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBUaGUgYml0bWFzayBvZiBlbnVtIHRyYW5zYWN0aW9uX2ZsYWdzIGZyb20gdGhlIHRyYW5zYWN0aW9uLlxuJiM0MzsgICAgcHViIGZuIGZsYWdzKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9GTEFHUzogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9GTEFHUyBhcyBjX2ludDtcbiYjNDM7ICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9GTEFHUywgdmFsKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBUaGUgYXBwbGljYXRpb24tZGVmaW5lZCBjb2RlIGZyb20gdGhlIHRyYW5zYWN0aW9uLlxuJiM0MzsgICAgcHViIGZuIGNvZGUoXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4mIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0NPREU6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfQ09ERSBhcyBjX2ludDtcbiYjNDM7ICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9DT0RFLCB2YWwpXG4mIzQzOyAgICB9XG4mIzQzO1xuJiM0MzsgICAgLy8vIFRoZSB0cmFuc2FjdGlvbiBwYXlsb2FkIHNpemUgaW4gYnl0ZXMuXG4mIzQzOyAgICBwdWIgZm4gZGF0YV9zaXplKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9EQVRBX1NJWkU6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfREFUQV9TSVpFIGFzIGNfaW50O1xuJiM0MzsgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0RBVEFfU0laRSwgdmFsKVxuJiM0MzsgICAgfVxuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9ydXN0X2JpbmRlcl9tYWluLnJzIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9ydXN0X2JpbmRlcl9tYWluLnJzXG5pbmRleCA0MzIzOTBhYWIyNWJiOC4uZGY0N2FiYTA1MTMzODUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcnVzdF9iaW5kZXJfbWFpbi5yc1xuQEAgLTMyLDYgJiM0MzszMiw3IEBAXG4gbW9kIGRlZmVycmVkX2Nsb3NlO1xuIG1vZCBkZWZzO1xuIG1vZCBlcnJvcjtcbiYjNDM7bW9kIG5ldGxpbms7XG4gbW9kIG5vZGU7XG4gbW9kIHBhZ2VfcmFuZ2U7XG4gbW9kIHByb2Nlc3M7XG5AQCAtMjgyLDE5ICYjNDM7MjgzLDIyIEBAIGZuIHB0cl9hbGlnbih2YWx1ZTogdXNpemUpIC1cdTAwM2UgT3B0aW9uXHUwMDNjdXNpemVcdTAwM2Uge1xuIC8vIFNBRkVUWTogV2UgY2FsbCByZWdpc3RlciBpbiBgaW5pdGAuXG4gc3RhdGljIEJJTkRFUl9TSFJJTktFUjogU2hyaW5rZXIgPSB1bnNhZmUgeyBTaHJpbmtlcjo6bmV3KCkgfTtcbiBcbi1zdHJ1Y3QgQmluZGVyTW9kdWxlIHt9XG4mIzQzO3N0cnVjdCBCaW5kZXJNb2R1bGUge1xuJiM0MzsgICAgX25ldGxpbms6IGtlcm5lbDo6bmV0OjpuZXRsaW5rOjpSZWdpc3RyYXRpb24sXG4mIzQzO31cbiBcbiBpbXBsIGtlcm5lbDo6TW9kdWxlIGZvciBCaW5kZXJNb2R1bGUge1xuICAgICBmbiBpbml0KF9tb2R1bGU6IFx1MDAyNiYjMzk7c3RhdGljIGtlcm5lbDo6VGhpc01vZHVsZSkgLVx1MDAzZSBSZXN1bHRcdTAwM2NTZWxmXHUwMDNlIHtcbiAgICAgICAgIC8vIFNBRkVUWTogVGhlIG1vZHVsZSBpbml0aWFsaXplciBuZXZlciBydW5zIHR3aWNlLCBzbyB3ZSBvbmx5IGNhbGwgdGhpcyBvbmNlLlxuICAgICAgICAgdW5zYWZlIHsgY3JhdGU6OmNvbnRleHQ6OkNPTlRFWFRTLmluaXQoKSB9O1xuIFxuJiM0MzsgICAgICAgIGxldCBuZXRsaW5rID0gY3JhdGU6Om5ldGxpbms6OkJJTkRFUl9OTF9GQU1JTFkucmVnaXN0ZXIoKT87XG4gICAgICAgICBCSU5ERVJfU0hSSU5LRVIucmVnaXN0ZXIoY1wmIzM0O2FuZHJvaWQtYmluZGVyXCYjMzQ7KT87XG4gXG4gICAgICAgICAvLyBTQUZFVFk6IFRoZSBtb2R1bGUgaXMgYmVpbmcgbG9hZGVkLCBzbyB3ZSBjYW4gaW5pdGlhbGl6ZSBiaW5kZXJmcy5cbiAgICAgICAgIHVuc2FmZSB7IGtlcm5lbDo6ZXJyb3I6OnRvX3Jlc3VsdChiaW5kZXJmczo6aW5pdF9ydXN0X2JpbmRlcmZzKCkpPyB9O1xuIFxuLSAgICAgICAgT2soU2VsZiB7fSlcbiYjNDM7ICAgICAgICBPayhTZWxmIHsgX25ldGxpbms6IG5ldGxpbmsgfSlcbiAgICAgfVxuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzXG5pbmRleCAxOWY4ODE5NDhhODRiYS4uMzMzNjhmN2ZkNTUxNDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yc1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnNcbkBAIC0xMjg0LDYgJiM0MzsxMjg0LDE1IEBAIGZuIHRyYW5zYWN0aW9uKHNlbGY6IFx1MDAyNkFyY1x1MDAzY1NlbGZcdTAwM2UsIGNtZDogdTMyLCByZWFkZXI6IFx1MDAyNm11dCBVc2VyU2xpY2VSZWFkZXIpIC1cdTAwM2UgUmVzdVxuICAgICAgICAgICAgIH1cbiAgICAgICAgIH1cbiBcbiYjNDM7ICAgICAgICBpZiBpbmZvLm9uZXdheV9zcGFtX3N1c3BlY3Qge1xuJiM0MzsgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGJvdGggYSBvbmV3YXkgc3BhbSBzdXNwZWN0IGFuZCBhIGZhaWx1cmUsIHdlIHJlcG9ydCBpdCB0d2ljZS4gVGhpcyBpc1xuJiM0MzsgICAgICAgICAgICAvLyB1c2VmdWwgaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gZmFpbGVkIHdpdGggQlJfVFJBTlNBQ1RJT05fUEVORElOR19GUk9aRU4uXG4mIzQzOyAgICAgICAgICAgIGluZm8ucmVwb3J0X25ldGxpbmsoQlJfT05FV0FZX1NQQU1fU1VTUEVDVCwgXHUwMDI2c2VsZi5wcm9jZXNzLmN0eCk7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIGlmIGluZm8ucmVwbHkgIT0gMCB7XG4mIzQzOyAgICAgICAgICAgIGluZm8ucmVwb3J0X25ldGxpbmsoaW5mby5yZXBseSwgXHUwMDI2c2VsZi5wcm9jZXNzLmN0eCk7XG4mIzQzOyAgICAgICAgfVxuJiM0MztcbiAgICAgICAgIE9rKCgpKVxuICAgICB9XG4gXG5AQCAtMTM1NCwxMSAmIzQzOzEzNjMsMTEgQEAgZm4gcmVwbHlfaW5uZXIoc2VsZjogXHUwMDI2QXJjXHUwMDNjU2VsZlx1MDAzZSwgaW5mbzogXHUwMDI2bXV0IFRyYW5zYWN0aW9uSW5mbykgLVx1MDAzZSBCaW5kZXJSZXN1bHQge1xuICAgICAgICAgICAgICAgICBpbmZvLmZyb21fdGlkLFxuICAgICAgICAgICAgICAgICBpbmZvLnRvX3BpZFxuICAgICAgICAgICAgICk7XG4tXG4gICAgICAgICAgICAgbGV0IHBhcmFtID0gZXJyLnNvdXJjZS5hc19yZWYoKS5tYXBfb3IoMCwgfGV8IGUudG9fZXJybm8oKSk7XG4gICAgICAgICAgICAgbGV0IGVlID0gRXh0ZW5kZWRFcnJvcjo6bmV3KGluZm8uZGVidWdfaWQgYXMgdTMyLCBlcnIucmVwbHksIHBhcmFtKTtcbiAgICAgICAgICAgICBvcmlnLmZyb21cbiAgICAgICAgICAgICAgICAgLmRlbGl2ZXJfcmVwbHkoRXJyKEJSX0ZBSUxFRF9SRVBMWSksIFx1MDAyNm9yaWcsIFNvbWUoZWUpKTtcbiYjNDM7ICAgICAgICAgICAgaW5mby5yZXBseSA9IEJSX0ZBSUxFRF9SRVBMWTtcbiAgICAgICAgICAgICBlcnIucmVwbHkgPSBCUl9UUkFOU0FDVElPTl9DT01QTEVURTtcbiAgICAgICAgICAgICBlcnJcbiAgICAgICAgIH0pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXG5pbmRleCBhZmVmNWI0NmVhYzI2Ny4uNmNiN2I3NDVjNTJlNDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gLy8gQ29weXJpZ2h0IChDKSAyMDI1IEdvb2dsZSBMTEMuXG4gXG4gdXNlIGtlcm5lbDo6e1xuJiM0MzsgICAgbmV0OjpuZXRsaW5rOjpHRU5MTVNHX0RFRkFVTFRfU0laRSxcbiAgICAgcHJlbHVkZTo6KixcbiAgICAgc2VxX2ZpbGU6OlNlcUZpbGUsXG4gICAgIHNlcV9wcmludCxcbkBAIC0xOCw2ICYjNDM7MTksNyBAQFxuICAgICBhbGxvY2F0aW9uOjp7QWxsb2NhdGlvbiwgVHJhbnNsYXRlZEZkc30sXG4gICAgIGRlZnM6OiosXG4gICAgIGVycm9yOjp7QmluZGVyRXJyb3IsIEJpbmRlclJlc3VsdH0sXG4mIzQzOyAgICBuZXRsaW5rOjpSZXBvcnQsXG4gICAgIG5vZGU6OntOb2RlLCBOb2RlUmVmfSxcbiAgICAgcHJvY2Vzczo6e1Byb2Nlc3MsIFByb2Nlc3NJbm5lcn0sXG4gICAgIHB0cl9hbGlnbixcbkBAIC01MSw2ICYjNDM7NTMsNDQgQEAgaW1wbCBUcmFuc2FjdGlvbkluZm8ge1xuICAgICBwdWIoY3JhdGUpIGZuIGlzX29uZXdheShcdTAwMjZzZWxmKSAtXHUwMDNlIGJvb2wge1xuICAgICAgICAgc2VsZi5mbGFncyBcdTAwMjYgVEZfT05FX1dBWSAhPSAwXG4gICAgIH1cbiYjNDM7XG4mIzQzOyAgICBwdWIoY3JhdGUpIGZuIHJlcG9ydF9uZXRsaW5rKFx1MDAyNnNlbGYsIHJlcGx5OiB1MzIsIGN0eDogXHUwMDI2Y3JhdGU6OkNvbnRleHQpIHtcbiYjNDM7ICAgICAgICBpZiBsZXQgRXJyKGVycikgPSBzZWxmLnJlcG9ydF9uZXRsaW5rX2lubmVyKHJlcGx5LCBjdHgpIHtcbiYjNDM7ICAgICAgICAgICAgcHJfd2FybiEoXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDt7fTp7fSBuZXRsaW5rIHJlcG9ydCBmYWlsZWQ6IHtlcnI6P31cXG5cJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBzZWxmLmZyb21fcGlkLFxuJiM0MzsgICAgICAgICAgICAgICAgc2VsZi5mcm9tX3RpZFxuJiM0MzsgICAgICAgICAgICApO1xuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICBmbiByZXBvcnRfbmV0bGlua19pbm5lcihcdTAwMjZzZWxmLCByZXBseTogdTMyLCBjdHg6IFx1MDAyNmNyYXRlOjpDb250ZXh0KSAtXHUwMDNlIGtlcm5lbDo6ZXJyb3I6OlJlc3VsdCB7XG4mIzQzOyAgICAgICAgaWYgIVJlcG9ydDo6aGFzX2xpc3RlbmVycygpIHtcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIE9rKCgpKTtcbiYjNDM7ICAgICAgICB9XG4mIzQzOyAgICAgICAgbGV0IG11dCByZXBvcnQgPSBSZXBvcnQ6Om5ldyhHRU5MTVNHX0RFRkFVTFRfU0laRSwgMCwgMCwgR0ZQX0tFUk5FTCk/O1xuJiM0MztcbiYjNDM7ICAgICAgICByZXBvcnQuZXJyb3IocmVwbHkpPztcbiYjNDM7ICAgICAgICByZXBvcnQuY29udGV4dChcdTAwMjZjdHgubmFtZSk/O1xuJiM0MzsgICAgICAgIHJlcG9ydC5mcm9tX3BpZChzZWxmLmZyb21fcGlkIGFzIHUzMik/O1xuJiM0MzsgICAgICAgIHJlcG9ydC5mcm9tX3RpZChzZWxmLmZyb21fdGlkIGFzIHUzMik/O1xuJiM0MzsgICAgICAgIGlmIHNlbGYudG9fcGlkICE9IDAge1xuJiM0MzsgICAgICAgICAgICByZXBvcnQudG9fcGlkKHNlbGYudG9fcGlkIGFzIHUzMik/O1xuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgICAgICBpZiBzZWxmLnRvX3RpZCAhPSAwIHtcbiYjNDM7ICAgICAgICAgICAgcmVwb3J0LnRvX3RpZChzZWxmLnRvX3RpZCBhcyB1MzIpPztcbiYjNDM7ICAgICAgICB9XG4mIzQzO1xuJiM0MzsgICAgICAgIGlmIHNlbGYuaXNfcmVwbHkge1xuJiM0MzsgICAgICAgICAgICByZXBvcnQuaXNfcmVwbHkoKT87XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIHJlcG9ydC5mbGFncyhzZWxmLmZsYWdzKT87XG4mIzQzOyAgICAgICAgcmVwb3J0LmNvZGUoc2VsZi5jb2RlKT87XG4mIzQzOyAgICAgICAgcmVwb3J0LmRhdGFfc2l6ZShzZWxmLmRhdGFfc2l6ZSBhcyB1MzIpPztcbiYjNDM7XG4mIzQzOyAgICAgICAgcmVwb3J0Lm11bHRpY2FzdCgwLCBHRlBfS0VSTkVMKT87XG4mIzQzOyAgICAgICAgT2soKCkpXG4mIzQzOyAgICB9XG4gfVxuIFxuIHVzZSBjb3JlOjptZW06Om9mZnNldF9vZjtcbmRpZmYgLS1naXQgYS9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oIGIvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxuaW5kZXggMTEyNDc4NWUyMTBiMzAuLmVjOTZlODExNjEwZDcyIDEwMDY0NFxuLS0tIGEvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxuQEAgLTkzLDYgJiM0Mzs5Myw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9ydXN0X3NhbXBsZS5oXHUwMDNlXG4gXG4gLypcbkBAIC0xMTAsNiAmIzQzOzExMiw3IEBAXG4gY29uc3Qgc2l6ZV90IFJVU1RfQ09OU1RfSEVMUEVSX0FSQ0hfU0xBQl9NSU5BTElHTiA9IEFSQ0hfU0xBQl9NSU5BTElHTjtcbiBjb25zdCBzaXplX3QgUlVTVF9DT05TVF9IRUxQRVJfQVJDSF9LTUFMTE9DX01JTkFMSUdOID0gQVJDSF9LTUFMTE9DX01JTkFMSUdOO1xuIGNvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9QQUdFX1NJWkUgPSBQQUdFX1NJWkU7XG4mIzQzO2NvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRU5MTVNHX0RFRkFVTFRfU0laRSA9IEdFTkxNU0dfREVGQVVMVF9TSVpFO1xuIGNvbnN0IGdmcF90IFJVU1RfQ09OU1RfSEVMUEVSX0dGUF9BVE9NSUMgPSBHRlBfQVRPTUlDO1xuIGNvbnN0IGdmcF90IFJVU1RfQ09OU1RfSEVMUEVSX0dGUF9LRVJORUwgPSBHRlBfS0VSTkVMO1xuIGNvbnN0IGdmcF90IFJVU1RfQ09OU1RfSEVMUEVSX0dGUF9LRVJORUxfQUNDT1VOVCA9IEdGUF9LRVJORUxfQUNDT1VOVDtcbmRpZmYgLS1naXQgYS9ydXN0L2hlbHBlcnMvaGVscGVycy5jIGIvcnVzdC9oZWxwZXJzL2hlbHBlcnMuY1xuaW5kZXggOTk4ZTMxMDUyZTY2MDEuLjFkNGVlNTFmNTc2YmViIDEwMDY0NFxuLS0tIGEvcnVzdC9oZWxwZXJzL2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC9oZWxwZXJzL2hlbHBlcnMuY1xuQEAgLTcyLDYgJiM0Mzs3Miw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7bWFwbGVfdHJlZS5jXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bW0uY1wmIzM0O1xuICNpbmNsdWRlIFwmIzM0O211dGV4LmNcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0L2dlbmV0bGluay5jXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7b2YuY1wmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3BhZ2UuY1wmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3BjaS5jXCYjMzQ7XG5kaWZmIC0tZ2l0IGEvcnVzdC9oZWxwZXJzL25ldC9nZW5ldGxpbmsuYyBiL3J1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzUzMGI2OWY2Y2Y3MDdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3J1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmNcbkBAIC0wLDAgJiM0MzsxLDQ2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlIExMQy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfTkVUXG4mIzQzO1xuJiM0MztfX3J1c3RfaGVscGVyIHN0cnVjdCBza19idWZmICpydXN0X2hlbHBlcl9nZW5sbXNnX25ldyhzaXplX3QgcGF5bG9hZCwgZ2ZwX3QgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZ2VubG1zZ19uZXcocGF5bG9hZCwgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3J1c3RfaGVscGVyXG4mIzQzO2ludCBydXN0X2hlbHBlcl9nZW5sbXNnX211bHRpY2FzdChjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZ3JvdXAsIGdmcF90IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGdlbmxtc2dfbXVsdGljYXN0KGZhbWlseSwgc2tiLCBwb3J0aWQsIGdyb3VwLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fcnVzdF9oZWxwZXIgdm9pZCBydXN0X2hlbHBlcl9nZW5sbXNnX2NhbmNlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIpXG4mIzQzO3tcbiYjNDM7XHRnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fcnVzdF9oZWxwZXIgdm9pZCBydXN0X2hlbHBlcl9nZW5sbXNnX2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIpXG4mIzQzO3tcbiYjNDM7XHRnZW5sbXNnX2VuZChza2IsIGhkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fcnVzdF9oZWxwZXIgdm9pZCBydXN0X2hlbHBlcl9ubG1zZ19mcmVlKHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRubG1zZ19mcmVlKHNrYik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fcnVzdF9oZWxwZXJcbiYjNDM7aW50IHJ1c3RfaGVscGVyX2dlbmxfaGFzX2xpc3RlbmVycyhjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBncm91cClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBnZW5sX2hhc19saXN0ZW5lcnMoZmFtaWx5LCBuZXQsIGdyb3VwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvbmV0LnJzIGIvcnVzdC9rZXJuZWwvbmV0L21vZC5yc1xuc2ltaWxhcml0eSBpbmRleCA4NSVcbnJlbmFtZSBmcm9tIHJ1c3Qva2VybmVsL25ldC5yc1xucmVuYW1lIHRvIHJ1c3Qva2VybmVsL25ldC9tb2QucnNcbmluZGV4IGZlNDE1Y2IzNjlkM2FjLi44ZWNhZTc1NzdlZDI5NSAxMDA2NDRcbi0tLSBhL3J1c3Qva2VybmVsL25ldC5yc1xuJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC9rZXJuZWwvbmV0L21vZC5yc1xuQEAgLTQsMyAmIzQzOzQsNSBAQFxuIFxuICNbY2ZnKENPTkZJR19SVVNUX1BIWUxJQl9BQlNUUkFDVElPTlMpXVxuIHB1YiBtb2QgcGh5O1xuJiM0MztcbiYjNDM7cHViIG1vZCBuZXRsaW5rO1xuZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzIGIvcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjJlZjNkZGUzNmZhMWFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3J1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzXG5AQCAtMCwwICYjNDM7MSwzMzcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOy8vIENvcHlyaWdodCAoQykgMjAyNiBHb29nbGUgTExDLlxuJiM0MztcbiYjNDM7Ly8hIFJ1c3Qgc3VwcG9ydCBmb3IgZ2VuZXJpYyBuZXRsaW5rLlxuJiM0MzsvLyFcbiYjNDM7Ly8hIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGV4cG9zaW5nIG11bHRpY2FzdCBncm91cHMuXG4mIzQzOy8vIVxuJiM0MzsvLyEgQyBoZWFkZXI6IFtgaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmhgXShzcmN0cmVlL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oKVxuJiM0MztcbiYjNDM7dXNlIGtlcm5lbDo6e1xuJiM0MzsgICAgYWxsb2M6OntzZWxmLCBBbGxvY0Vycm9yfSxcbiYjNDM7ICAgIGVycm9yOjp0b19yZXN1bHQsXG4mIzQzOyAgICBwcmVsdWRlOjoqLFxuJiM0MzsgICAgdHJhbnNtdXRlOjpBc0J5dGVzLFxuJiM0MzsgICAgdHlwZXM6Ok9wYXF1ZSxcbiYjNDM7ICAgIFRoaXNNb2R1bGUsXG4mIzQzO307XG4mIzQzO1xuJiM0Mzt1c2UgY29yZTo6e1xuJiM0MzsgICAgbWVtOjpNYW51YWxseURyb3AsXG4mIzQzOyAgICBwdHI6Ok5vbk51bGwsIC8vXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvLy8gVGhlIGRlZmF1bHQgbmV0bGluayBtZXNzYWdlIHNpemUuXG4mIzQzO3B1YiBjb25zdCBHRU5MTVNHX0RFRkFVTFRfU0laRTogdXNpemUgPSBiaW5kaW5nczo6R0VOTE1TR19ERUZBVUxUX1NJWkU7XG4mIzQzO1xuJiM0MzsvLy8gQSB3cmFwcGVyIGFyb3VuZCBgc3RydWN0IHNrX2J1ZmZgIGZvciBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZXMuXG4mIzQzOy8vL1xuJiM0MzsvLy8gVGhpcyB0eXBlIGlzIGludGVuZGVkIHRvIGJlIHNwZWNpZmljIGZvciBidWZmZXJzIHVzZWQgd2l0aCBuZXRsaW5rIG9ubHksIGFuZCBvdGhlciB1c2VjYXNlcyBmb3JcbiYjNDM7Ly8vIGBzdHJ1Y3Qgc2tfYnVmZmAgYXJlIG91dC1vZi1zY29wZSBmb3IgdGhpcyBhYnN0cmFjdGlvbi5cbiYjNDM7Ly8vXG4mIzQzOy8vLyAjIEludmFyaWFudHNcbiYjNDM7Ly8vXG4mIzQzOy8vLyBUaGUgcG9pbnRlciBoYXMgb3duZXJzaGlwIG92ZXIgYSB2YWxpZCBgc2tfYnVmZmAuXG4mIzQzO3B1YiBzdHJ1Y3QgTmV0bGlua1NrQnVmZiB7XG4mIzQzOyAgICBza2I6IE5vbk51bGxcdTAwM2NrZXJuZWw6OmJpbmRpbmdzOjpza19idWZmXHUwMDNlLFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbXBsIE5ldGxpbmtTa0J1ZmYge1xuJiM0MzsgICAgLy8vIENyZWF0ZXMgYSBuZXcgYE5ldGxpbmtTa0J1ZmZgIHdpdGggdGhlIGdpdmVuIHNpemUuXG4mIzQzOyAgICBwdWIgZm4gbmV3KHNpemU6IHVzaXplLCBmbGFnczogYWxsb2M6OkZsYWdzKSAtXHUwMDNlIFJlc3VsdFx1MDAzY05ldGxpbmtTa0J1ZmYsIEFsbG9jRXJyb3JcdTAwM2Uge1xuJiM0MzsgICAgICAgIC8vIFNBRkVUWTogYGdlbmxtc2dfbmV3YCBvbmx5IHJlcXVpcmVzIGl0cyBhcmd1bWVudHMgdG8gYmUgdmFsaWQgaW50ZWdlcnMuXG4mIzQzOyAgICAgICAgbGV0IHNrYiA9IHVuc2FmZSB7IGJpbmRpbmdzOjpnZW5sbXNnX25ldyhzaXplLCBmbGFncy5hc19yYXcoKSkgfTtcbiYjNDM7ICAgICAgICBsZXQgc2tiID0gTm9uTnVsbDo6bmV3KHNrYikub2tfb3IoQWxsb2NFcnJvcik/O1xuJiM0MzsgICAgICAgIE9rKE5ldGxpbmtTa0J1ZmYgeyBza2IgfSlcbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLy8gUHV0cyBhIGdlbmVyaWMgbmV0bGluayBoZWFkZXIgaW50byB0aGUgYE5ldGxpbmtTa0J1ZmZgLlxuJiM0MzsgICAgcHViIGZuIGdlbmxtc2dfcHV0KFxuJiM0MzsgICAgICAgIHNlbGYsXG4mIzQzOyAgICAgICAgcG9ydGlkOiB1MzIsXG4mIzQzOyAgICAgICAgc2VxOiB1MzIsXG4mIzQzOyAgICAgICAgZmFtaWx5OiBcdTAwMjYmIzM5O3N0YXRpYyBGYW1pbHksXG4mIzQzOyAgICAgICAgY21kOiB1OCxcbiYjNDM7ICAgICkgLVx1MDAzZSBSZXN1bHRcdTAwM2NHZW5sTXNnLCBBbGxvY0Vycm9yXHUwMDNlIHtcbiYjNDM7ICAgICAgICBsZXQgc2tiID0gc2VsZi5za2IuYXNfcHRyKCk7XG4mIzQzOyAgICAgICAgLy8gU0FGRVRZOiBUaGUgc2tiIGFuZCBmYW1pbHkgcG9pbnRlcnMgYXJlIHZhbGlkLlxuJiM0MzsgICAgICAgIGxldCBoZHIgPSB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgZmFtaWx5LmFzX3JhdygpLCAwLCBjbWQpIH07XG4mIzQzOyAgICAgICAgbGV0IGhkciA9IE5vbk51bGw6Om5ldyhoZHIpLm9rX29yKEFsbG9jRXJyb3IpPztcbiYjNDM7ICAgICAgICBPayhHZW5sTXNnIHsgc2tiOiBzZWxmLCBoZHIgfSlcbiYjNDM7ICAgIH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7aW1wbCBEcm9wIGZvciBOZXRsaW5rU2tCdWZmIHtcbiYjNDM7ICAgIGZuIGRyb3AoXHUwMDI2bXV0IHNlbGYpIHtcbiYjNDM7ICAgICAgICAvLyBTQUZFVFk6IFdlIGhhdmUgb3duZXJzaGlwIG92ZXIgdGhlIGBza19idWZmYCwgc28gd2UgbWF5IGZyZWUgaXQuXG4mIzQzOyAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6Om5sbXNnX2ZyZWUoc2VsZi5za2IuYXNfcHRyKCkpIH1cbiYjNDM7ICAgIH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7Ly8vIEEgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgYmVpbmcgY29uc3RydWN0ZWQuXG4mIzQzOy8vL1xuJiM0MzsvLy8gIyBJbnZhcmlhbnRzXG4mIzQzOy8vL1xuJiM0MzsvLy8gYGhkcmAgcmVmZXJlbmNlcyB0aGUgaGVhZGVyIGluIHRoaXMgbmV0bGluayBtZXNzYWdlLlxuJiM0MztwdWIgc3RydWN0IEdlbmxNc2cge1xuJiM0MzsgICAgc2tiOiBOZXRsaW5rU2tCdWZmLFxuJiM0MzsgICAgaGRyOiBOb25OdWxsXHUwMDNjY192b2lkXHUwMDNlLFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbXBsIEdlbmxNc2cge1xuJiM0MzsgICAgLy8vIFB1dHMgYW4gYXR0cmlidXRlIGludG8gdGhlIG1lc3NhZ2UuXG4mIzQzOyAgICAjW2lubGluZV1cbiYjNDM7ICAgIGZuIHB1dFx1MDAzY1RcdTAwM2UoXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6IFx1MDAyNlQpIC1cdTAwM2UgUmVzdWx0XG4mIzQzOyAgICB3aGVyZVxuJiM0MzsgICAgICAgIFQ6ID9TaXplZCAmIzQzOyBBc0J5dGVzLFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIGxldCBza2IgPSBzZWxmLnNrYi5za2IuYXNfcHRyKCk7XG4mIzQzOyAgICAgICAgbGV0IGxlbiA9IHNpemVfb2ZfdmFsKHZhbHVlKTtcbiYjNDM7ICAgICAgICBsZXQgcHRyID0gY29yZTo6cHRyOjpmcm9tX3JlZih2YWx1ZSkuY2FzdDo6XHUwMDNjY192b2lkXHUwMDNlKCk7XG4mIzQzOyAgICAgICAgLy8gU0FGRVRZOiBgc2tiYCBpcyB2YWxpZCBieSBgTmV0bGlua1NrQnVmZmAgdHlwZSBpbnZhcmlhbnRzLCBhbmQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzXG4mIzQzOyAgICAgICAgLy8gcmVhZGFibGUgYW5kIGluaXRpYWxpemVkIGZvciBpdHMgYHNpemVfb2ZgIGJ5dGVzLlxuJiM0MzsgICAgICAgIHRvX3Jlc3VsdCh1bnNhZmUgeyBiaW5kaW5nczo6bmxhX3B1dChza2IsIGF0dHJ0eXBlLCBsZW4gYXMgY19pbnQsIHB0cikgfSlcbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLy8gUHV0cyBhIGB1MzJgIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLlxuJiM0MzsgICAgI1tpbmxpbmVdXG4mIzQzOyAgICBwdWIgZm4gcHV0X3UzMihcdTAwMjZtdXQgc2VsZiwgYXR0cnR5cGU6IGNfaW50LCB2YWx1ZTogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4mIzQzOyAgICAgICAgc2VsZi5wdXQoYXR0cnR5cGUsIFx1MDAyNnZhbHVlKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBQdXRzIGEgc3RyaW5nIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLlxuJiM0MzsgICAgI1tpbmxpbmVdXG4mIzQzOyAgICBwdWIgZm4gcHV0X3N0cmluZyhcdTAwMjZtdXQgc2VsZiwgYXR0cnR5cGU6IGNfaW50LCB2YWx1ZTogXHUwMDI2Q1N0cikgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIHNlbGYucHV0KGF0dHJ0eXBlLCB2YWx1ZS50b19ieXRlc193aXRoX251bCgpKVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBQdXRzIGEgZmxhZyBhdHRyaWJ1dGUgaW50byB0aGUgbWVzc2FnZS5cbiYjNDM7ICAgICNbaW5saW5lXVxuJiM0MzsgICAgcHViIGZuIHB1dF9mbGFnKFx1MDAyNm11dCBzZWxmLCBhdHRydHlwZTogY19pbnQpIC1cdTAwM2UgUmVzdWx0IHtcbiYjNDM7ICAgICAgICBsZXQgc2tiID0gc2VsZi5za2Iuc2tiLmFzX3B0cigpO1xuJiM0MzsgICAgICAgIC8vIFNBRkVUWTogYHNrYmAgaXMgdmFsaWQgYnkgYE5ldGxpbmtTa0J1ZmZgIHR5cGUgaW52YXJpYW50cywgYW5kIGEgbnVsbCBwb2ludGVyIGlzIHZhbGlkXG4mIzQzOyAgICAgICAgLy8gd2hlbiB0aGUgbGVuZ3RoIGlzIHplcm8uXG4mIzQzOyAgICAgICAgdG9fcmVzdWx0KHVuc2FmZSB7IGJpbmRpbmdzOjpubGFfcHV0KHNrYiwgYXR0cnR5cGUsIDAsIGNvcmU6OnB0cjo6bnVsbCgpKSB9KVxuJiM0MzsgICAgfVxuJiM0MztcbiYjNDM7ICAgIC8vLyBTZW5kcyB0aGUgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgYXMgYSBtdWx0aWNhc3QgbWVzc2FnZS5cbiYjNDM7ICAgICNbaW5saW5lXVxuJiM0MzsgICAgcHViIGZuIG11bHRpY2FzdChcbiYjNDM7ICAgICAgICBzZWxmLFxuJiM0MzsgICAgICAgIGZhbWlseTogXHUwMDI2JiMzOTtzdGF0aWMgRmFtaWx5LFxuJiM0MzsgICAgICAgIHBvcnRpZDogdTMyLFxuJiM0MzsgICAgICAgIGdyb3VwOiB1MzIsXG4mIzQzOyAgICAgICAgZmxhZ3M6IGFsbG9jOjpGbGFncyxcbiYjNDM7ICAgICkgLVx1MDAzZSBSZXN1bHQge1xuJiM0MzsgICAgICAgIGxldCBtZSA9IE1hbnVhbGx5RHJvcDo6bmV3KHNlbGYpO1xuJiM0MzsgICAgICAgIC8vIFNBRkVUWTogVGhlIGBza2JgIGFuZCBgZmFtaWx5YCBwb2ludGVycyBhcmUgdmFsaWQuIFdlIHBhc3Mgb3duZXJzaGlwIG9mIHRoZSBgc2tiYCB0b1xuJiM0MzsgICAgICAgIC8vIGBnZW5sbXNnX211bHRpY2FzdGAgYnkgbm90IGRyb3BwaW5nIGBzZWxmYC5cbiYjNDM7ICAgICAgICB1bnNhZmUge1xuJiM0MzsgICAgICAgICAgICBiaW5kaW5nczo6Z2VubG1zZ19lbmQobWUuc2tiLnNrYi5hc19wdHIoKSwgbWUuaGRyLmFzX3B0cigpKTtcbiYjNDM7ICAgICAgICAgICAgdG9fcmVzdWx0KGJpbmRpbmdzOjpnZW5sbXNnX211bHRpY2FzdChcbiYjNDM7ICAgICAgICAgICAgICAgIGZhbWlseS5hc19yYXcoKSxcbiYjNDM7ICAgICAgICAgICAgICAgIG1lLnNrYi5za2IuYXNfcHRyKCksXG4mIzQzOyAgICAgICAgICAgICAgICBwb3J0aWQsXG4mIzQzOyAgICAgICAgICAgICAgICBncm91cCxcbiYjNDM7ICAgICAgICAgICAgICAgIGZsYWdzLmFzX3JhdygpLFxuJiM0MzsgICAgICAgICAgICApKVxuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbiYjNDM7fVxuJiM0MztpbXBsIERyb3AgZm9yIEdlbmxNc2cge1xuJiM0MzsgICAgZm4gZHJvcChcdTAwMjZtdXQgc2VsZikge1xuJiM0MzsgICAgICAgIC8vIFNBRkVUWTogVGhlIGBoZHJgIHBvaW50ZXIgcmVmZXJlbmNlcyB0aGUgaGVhZGVyIG9mIHRoaXMgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UuXG4mIzQzOyAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6Omdlbmxtc2dfY2FuY2VsKHNlbGYuc2tiLnNrYi5hc19wdHIoKSwgc2VsZi5oZHIuYXNfcHRyKCkpIH07XG4mIzQzOyAgICB9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8vLyBGbGFncyBmb3IgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LlxuJiM0MztzdHJ1Y3QgRmFtaWx5RmxhZ3Mge1xuJiM0MzsgICAgLy8vIFdoZXRoZXIgdGhlIGZhbWlseSBzdXBwb3J0cyBuZXR3b3JrIG5hbWVzcGFjZXMuXG4mIzQzOyAgICBuZXRuc29rOiBib29sLFxuJiM0MzsgICAgLy8vIFdoZXRoZXIgdGhlIGZhbWlseSBzdXBwb3J0cyBwYXJhbGxlbCBvcGVyYXRpb25zLlxuJiM0MzsgICAgcGFyYWxsZWxfb3BzOiBib29sLFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbXBsIEZhbWlseUZsYWdzIHtcbiYjNDM7ICAgIC8vLyBDb252ZXJ0cyB0aGUgZmxhZ3MgdG8gdGhlIGJpdGZpZWxkIHJlcHJlc2VudGF0aW9uIHVzZWQgYnkgYGdlbmxfZmFtaWx5YC5cbiYjNDM7ICAgIGNvbnN0IGZuIGludG9fYml0ZmllbGQoc2VsZikgLVx1MDAzZSBiaW5kaW5nczo6X19CaW5kZ2VuQml0ZmllbGRVbml0XHUwMDNjW3U4OyAxXVx1MDAzZSB7XG4mIzQzOyAgICAgICAgLy8gVGhlIGJlbG93IHNoaWZ0cyBhcmUgdmVyaWZpZWQgY29ycmVjdCBieSB0ZXN0X2ZhbWlseV9mbGFnc19iaXRmaWVsZCgpIGJlbG93LlxuJiM0MzsgICAgICAgIC8vXG4mIzQzOyAgICAgICAgLy8gQWx0aG91Z2ggYmluZGdlbiBnZW5lcmF0ZXMgaGVscGVycyB0byBjaGFuZ2UgYml0ZmllbGRzIGJhc2VkIG9uIHRoZSBDIGhlYWRlcnMsIHRoZXNlXG4mIzQzOyAgICAgICAgLy8gaGVscGVycyB1bmZvcnR1bmF0ZWx5IGNhbiYjMzk7dCBiZSB1c2VkIGluIGNvbnN0IGNvbnRleHQuIFNpbmNlIGBGYW1pbHlgIG5lZWRzIHRvIGJlIGZpbGxlZFxuJiM0MzsgICAgICAgIC8vIG91dCBhdCBidWlsZC10aW1lLCB3ZSB1c2UgdGhpcyBoZWxwZXIgaW5zdGVhZC5cbiYjNDM7ICAgICAgICBsZXQgbXV0IGJpdHMgPSAwO1xuJiM0MzsgICAgICAgIGlmIHNlbGYubmV0bnNvayB7XG4mIzQzOyAgICAgICAgICAgIGJpdHMgfD0gMSBcdTAwM2NcdTAwM2MgMDtcbiYjNDM7ICAgICAgICB9XG4mIzQzOyAgICAgICAgaWYgc2VsZi5wYXJhbGxlbF9vcHMge1xuJiM0MzsgICAgICAgICAgICBiaXRzIHw9IDEgXHUwMDNjXHUwMDNjIDE7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIC8vIENvbnZlcnQgZnJvbSBsaXR0bGUgZW5kaWFuIHRvIHRoZSB0YXJnZXQmIzM5O3MgZW5kaWFubmVzcy5cbiYjNDM7ICAgICAgICBiaXRzID0gdTg6OmZyb21fbGUoYml0cyk7XG4mIzQzOyAgICAgICAgLy8gU0FGRVRZOiBUaGlzIGJpdGZpZWxkIGlzIHJlcHJlc2VudGVkIGFzIGFuIHU4LlxuJiM0MzsgICAgICAgIHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlOjpcdTAwM2N1OCwgYmluZGluZ3M6Ol9fQmluZGdlbkJpdGZpZWxkVW5pdFx1MDAzY1t1ODsgMV1cdTAwM2VcdTAwM2UoYml0cykgfVxuJiM0MzsgICAgfVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvLy8gQSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LlxuJiM0MzsjW3JlcHIodHJhbnNwYXJlbnQpXVxuJiM0MztwdWIgc3RydWN0IEZhbWlseSB7XG4mIzQzOyAgICBpbm5lcjogT3BhcXVlXHUwMDNjYmluZGluZ3M6OmdlbmxfZmFtaWx5XHUwMDNlLFxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvLyBTQUZFVFk6IFRoZSBgRmFtaWx5YCB0eXBlIGlzIHRocmVhZCBzYWZlLlxuJiM0Mzt1bnNhZmUgaW1wbCBTeW5jIGZvciBGYW1pbHkge31cbiYjNDM7XG4mIzQzO2ltcGwgRmFtaWx5IHtcbiYjNDM7ICAgIC8vLyBDcmVhdGVzIGEgbmV3IGBGYW1pbHlgIGluc3RhbmNlLlxuJiM0MzsgICAgLy8vXG4mIzQzOyAgICAvLy8gSW50ZW5kZWQgdG8gYmUgdXNlZCBmcm9tIGNvbnN0IGNvbnRleHQgb25seS4gV2lsbCBwYW5pYyBpZiBwcm92aWRlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzLlxuJiM0MzsgICAgLy8vXG4mIzQzOyAgICAvLy8gVGhlIG5hbWUgbXVzdCBiZSBhIG51bC10ZXJtaW5hdGVkIHN0cmluZywgYnV0IGl0IGlzIHRha2VuIGFzIGBcdTAwMjZbdThdYCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkXG4mIzQzOyAgICAvLy8gbW9yZSBjb252ZW5pZW50bHkgd2l0aCB0aGUgc3RyaW5ncyBnZW5lcmF0ZWQgYnkgYmluZGdlbi5cbiYjNDM7ICAgIHB1YiBjb25zdCBmbiBjb25zdF9uZXcoXG4mIzQzOyAgICAgICAgbW9kdWxlOiBcdTAwMjZUaGlzTW9kdWxlLFxuJiM0MzsgICAgICAgIG5hbWU6IFx1MDAyNlt1OF0sXG4mIzQzOyAgICAgICAgdmVyc2lvbjogdTMyLFxuJiM0MzsgICAgICAgIG1jZ3JwczogXHUwMDI2JiMzOTtzdGF0aWMgW011bHRpY2FzdEdyb3VwXSxcbiYjNDM7ICAgICkgLVx1MDAzZSBGYW1pbHkge1xuJiM0MzsgICAgICAgIGxldCBuX21jZ3JwcyA9IG1jZ3Jwcy5sZW4oKSBhcyB1ODtcbiYjNDM7ICAgICAgICBpZiBuX21jZ3JwcyBhcyB1c2l6ZSAhPSBtY2dycHMubGVuKCkge1xuJiM0MzsgICAgICAgICAgICBwYW5pYyEoXCYjMzQ7dG9vIG1hbnkgbWNncnBzXCYjMzQ7KTtcbiYjNDM7ICAgICAgICB9XG4mIzQzOyAgICAgICAgbGV0IG11dCBnZW5sX2ZhbWlseSA9IGJpbmRpbmdzOjpnZW5sX2ZhbWlseSB7XG4mIzQzOyAgICAgICAgICAgIHZlcnNpb24sXG4mIzQzOyAgICAgICAgICAgIF9iaXRmaWVsZF8xOiBGYW1pbHlGbGFncyB7XG4mIzQzOyAgICAgICAgICAgICAgICBuZXRuc29rOiB0cnVlLFxuJiM0MzsgICAgICAgICAgICAgICAgcGFyYWxsZWxfb3BzOiB0cnVlLFxuJiM0MzsgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgIC5pbnRvX2JpdGZpZWxkKCksXG4mIzQzOyAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlLmFzX3B0cigpLFxuJiM0MzsgICAgICAgICAgICBtY2dycHM6IG1jZ3Jwcy5hc19wdHIoKS5jYXN0KCksXG4mIzQzOyAgICAgICAgICAgIG5fbWNncnBzLFxuJiM0MzsgICAgICAgICAgICAuLnBpbl9pbml0Ojp6ZXJvZWQoKVxuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICAgICAgaWYgQ1N0cjo6ZnJvbV9ieXRlc193aXRoX251bChuYW1lKS5pc19lcnIoKSB7XG4mIzQzOyAgICAgICAgICAgIHBhbmljIShcJiMzNDtnZW5sX2ZhbWlseSBuYW1lIG5vdCBudWwtdGVybWluYXRlZFwmIzM0Oyk7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIGlmIGdlbmxfZmFtaWx5Lm5hbWUubGVuKCkgXHUwMDNjIG5hbWUubGVuKCkge1xuJiM0MzsgICAgICAgICAgICBwYW5pYyEoXCYjMzQ7Z2VubF9mYW1pbHkgbmFtZSB0b28gbG9uZ1wmIzM0Oyk7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIGxldCBtdXQgaSA9IDA7XG4mIzQzOyAgICAgICAgd2hpbGUgaSBcdTAwM2MgbmFtZS5sZW4oKSB7XG4mIzQzOyAgICAgICAgICAgIGdlbmxfZmFtaWx5Lm5hbWVbaV0gPSBuYW1lW2ldO1xuJiM0MzsgICAgICAgICAgICBpICYjNDM7PSAxO1xuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgICAgICBGYW1pbHkge1xuJiM0MzsgICAgICAgICAgICBpbm5lcjogT3BhcXVlOjpuZXcoZ2VubF9mYW1pbHkpLFxuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLy8gQ2hlY2tzIGlmIHRoZXJlIGFyZSBhbnkgbGlzdGVuZXJzIGZvciB0aGUgZ2l2ZW4gbXVsdGljYXN0IGdyb3VwLlxuJiM0MzsgICAgcHViIGZuIGhhc19saXN0ZW5lcnMoXHUwMDI2c2VsZiwgZ3JvdXA6IHUzMikgLVx1MDAzZSBib29sIHtcbiYjNDM7ICAgICAgICAvLyBTQUZFVFk6IFRoZSBmYW1pbHkgYW5kIGluaXRfbmV0IHBvaW50ZXJzIGFyZSB2YWxpZC5cbiYjNDM7ICAgICAgICB1bnNhZmUge1xuJiM0MzsgICAgICAgICAgICBiaW5kaW5nczo6Z2VubF9oYXNfbGlzdGVuZXJzKHNlbGYuYXNfcmF3KCksIFx1MDAyNnJhdyBtdXQgYmluZGluZ3M6OmluaXRfbmV0LCBncm91cCkgIT0gMFxuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbiYjNDM7XG4mIzQzOyAgICAvLy8gUmV0dXJucyBhIHJhdyBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIGBnZW5sX2ZhbWlseWAgc3RydWN0dXJlLlxuJiM0MzsgICAgcHViIGZuIGFzX3JhdyhcdTAwMjZzZWxmKSAtXHUwMDNlICptdXQgYmluZGluZ3M6OmdlbmxfZmFtaWx5IHtcbiYjNDM7ICAgICAgICBzZWxmLmlubmVyLmdldCgpXG4mIzQzOyAgICB9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8vLyBBIGdlbmVyaWMgbmV0bGluayBtdWx0aWNhc3QgZ3JvdXAuXG4mIzQzOyNbcmVwcih0cmFuc3BhcmVudCldXG4mIzQzO3B1YiBzdHJ1Y3QgTXVsdGljYXN0R3JvdXAge1xuJiM0MzsgICAgLy8gTm8gT3BhcXVlIGJlY2F1c2UgZnVsbHkgaW1tdXRhYmxlXG4mIzQzOyAgICBncm91cDogYmluZGluZ3M6OmdlbmxfbXVsdGljYXN0X2dyb3VwLFxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvLyBTQUZFVFk6IFB1cmUgZGF0YSBzbyB0aHJlYWQgc2FmZS5cbiYjNDM7dW5zYWZlIGltcGwgU3luYyBmb3IgTXVsdGljYXN0R3JvdXAge31cbiYjNDM7XG4mIzQzO2ltcGwgTXVsdGljYXN0R3JvdXAge1xuJiM0MzsgICAgLy8vIENyZWF0ZXMgYSBuZXcgYE11bHRpY2FzdEdyb3VwYCBpbnN0YW5jZS5cbiYjNDM7ICAgIC8vL1xuJiM0MzsgICAgLy8vIEludGVuZGVkIHRvIGJlIHVzZWQgZnJvbSBjb25zdCBjb250ZXh0IG9ubHkuIFdpbGwgcGFuaWMgaWYgcHJvdmlkZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50cy5cbiYjNDM7ICAgIHB1YiBjb25zdCBmbiBjb25zdF9uZXcobmFtZTogXHUwMDI2Q1N0cikgLVx1MDAzZSBNdWx0aWNhc3RHcm91cCB7XG4mIzQzOyAgICAgICAgbGV0IG11dCBncm91cDogYmluZGluZ3M6OmdlbmxfbXVsdGljYXN0X2dyb3VwID0gcGluX2luaXQ6Onplcm9lZCgpO1xuJiM0MztcbiYjNDM7ICAgICAgICBsZXQgbmFtZSA9IG5hbWUudG9fYnl0ZXNfd2l0aF9udWwoKTtcbiYjNDM7ICAgICAgICBpZiBncm91cC5uYW1lLmxlbigpIFx1MDAzYyBuYW1lLmxlbigpIHtcbiYjNDM7ICAgICAgICAgICAgcGFuaWMhKFwmIzM0O2dlbmxfbXVsdGljYXN0X2dyb3VwIG5hbWUgdG9vIGxvbmdcJiMzNDspO1xuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgICAgICBsZXQgbXV0IGkgPSAwO1xuJiM0MzsgICAgICAgIHdoaWxlIGkgXHUwMDNjIG5hbWUubGVuKCkge1xuJiM0MzsgICAgICAgICAgICBncm91cC5uYW1lW2ldID0gbmFtZVtpXTtcbiYjNDM7ICAgICAgICAgICAgaSAmIzQzOz0gMTtcbiYjNDM7ICAgICAgICB9XG4mIzQzO1xuJiM0MzsgICAgICAgIE11bHRpY2FzdEdyb3VwIHsgZ3JvdXAgfVxuJiM0MzsgICAgfVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvLy8gQSByZWdpc3RyYXRpb24gb2YgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LlxuJiM0MzsvLy9cbiYjNDM7Ly8vIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSByZWdpc3RyYXRpb24gb2YgYSBbYEZhbWlseWBdLiBXaGVuIGFuIGluc3RhbmNlIG9mIHRoaXMgdHlwZSBpc1xuJiM0MzsvLy8gZHJvcHBlZCwgaXRzIHJlc3BlY3RpdmUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSB3aWxsIGJlIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBzeXN0ZW0uXG4mIzQzOy8vL1xuJiM0MzsvLy8gIyBJbnZhcmlhbnRzXG4mIzQzOy8vL1xuJiM0MzsvLy8gYHNlbGYuZmFtaWx5YCBhbHdheXMgaG9sZHMgYSB2YWxpZCByZWZlcmVuY2UgdG8gYW4gaW5pdGlhbGl6ZWQgYW5kIHJlZ2lzdGVyZWQgW2BGYW1pbHlgXS5cbiYjNDM7cHViIHN0cnVjdCBSZWdpc3RyYXRpb24ge1xuJiM0MzsgICAgZmFtaWx5OiBcdTAwMjYmIzM5O3N0YXRpYyBGYW1pbHksXG4mIzQzO31cbiYjNDM7XG4mIzQzO2ltcGwgRmFtaWx5IHtcbiYjNDM7ICAgIC8vLyBSZWdpc3RlcnMgdGhlIGdlbmVyaWMgbmV0bGluayBmYW1pbHkgd2l0aCB0aGUga2VybmVsLlxuJiM0MzsgICAgcHViIGZuIHJlZ2lzdGVyKFx1MDAyNiYjMzk7c3RhdGljIHNlbGYpIC1cdTAwM2UgUmVzdWx0XHUwMDNjUmVnaXN0cmF0aW9uXHUwMDNlIHtcbiYjNDM7ICAgICAgICAvLyBTQUZFVFk6IGBzZWxmLmFzX3JhdygpYCBpcyBhIHZhbGlkIHBvaW50ZXIgdG8gYSBgZ2VubF9mYW1pbHlgIHN0cnVjdC5cbiYjNDM7ICAgICAgICAvLyBUaGUgYGdlbmxfZmFtaWx5YCBzdHJ1Y3QgaXMgc3RhdGljLCBzbyBpdCB3aWxsIG91dGxpdmUgdGhlIHJlZ2lzdHJhdGlvbi5cbiYjNDM7ICAgICAgICB0b19yZXN1bHQodW5zYWZlIHsgYmluZGluZ3M6OmdlbmxfcmVnaXN0ZXJfZmFtaWx5KHNlbGYuYXNfcmF3KCkpIH0pPztcbiYjNDM7ICAgICAgICBPayhSZWdpc3RyYXRpb24geyBmYW1pbHk6IHNlbGYgfSlcbiYjNDM7ICAgIH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7aW1wbCBEcm9wIGZvciBSZWdpc3RyYXRpb24ge1xuJiM0MzsgICAgZm4gZHJvcChcdTAwMjZtdXQgc2VsZikge1xuJiM0MzsgICAgICAgIC8vIFNBRkVUWTogYHNlbGYuZmFtaWx5LmFzX3JhdygpYCBpcyBhIHZhbGlkIHBvaW50ZXIgdG8gYSByZWdpc3RlcmVkIGBnZW5sX2ZhbWlseWAgc3RydWN0LlxuJiM0MzsgICAgICAgIC8vIFRoZSBgUmVnaXN0cmF0aW9uYCBzdHJ1Y3QgZW5zdXJlcyB0aGF0IGBnZW5sX3VucmVnaXN0ZXJfZmFtaWx5YCBpcyBjYWxsZWQgZXhhY3RseSBvbmNlXG4mIzQzOyAgICAgICAgLy8gZm9yIHRoaXMgZmFtaWx5IHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUuXG4mIzQzOyAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6OmdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoc2VsZi5mYW1pbHkuYXNfcmF3KCkpIH07XG4mIzQzOyAgICB9XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNbbWFjcm9zOjprdW5pdF90ZXN0cyhydXN0X25ldGxpbmspXVxuJiM0Mzttb2QgdGVzdHMge1xuJiM0MzsgICAgdXNlIHN1cGVyOjoqO1xuJiM0MztcbiYjNDM7ICAgICNbdGVzdF1cbiYjNDM7ICAgIGZuIHRlc3RfZmFtaWx5X2ZsYWdzX2JpdGZpZWxkKCkge1xuJiM0MzsgICAgICAgIGZvciBuZXRuc29rIGluIFtmYWxzZSwgdHJ1ZV0ge1xuJiM0MzsgICAgICAgICAgICBmb3IgcGFyYWxsZWxfb3BzIGluIFtmYWxzZSwgdHJ1ZV0ge1xuJiM0MzsgICAgICAgICAgICAgICAgbGV0IG11dCBiX2ZhbSA9IGJpbmRpbmdzOjpnZW5sX2ZhbWlseSB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgLi5EZWZhdWx0OjpkZWZhdWx0KClcbiYjNDM7ICAgICAgICAgICAgICAgIH07XG4mIzQzOyAgICAgICAgICAgICAgICBiX2ZhbS5zZXRfbmV0bnNvayhpZiBuZXRuc29rIHsgMSB9IGVsc2UgeyAwIH0pO1xuJiM0MzsgICAgICAgICAgICAgICAgYl9mYW0uc2V0X3BhcmFsbGVsX29wcyhpZiBwYXJhbGxlbF9vcHMgeyAxIH0gZWxzZSB7IDAgfSk7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgbGV0IGNfYml0ZmllbGQgPSBGYW1pbHlGbGFncyB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgbmV0bnNvayxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBwYXJhbGxlbF9vcHMsXG4mIzQzOyAgICAgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgICAgICAuaW50b19iaXRmaWVsZCgpO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIC8vIFNBRkVUWTogVGhlIGJpdCBmaWVsZCBpcyBzdG9yZWQgYXMgdTguXG4mIzQzOyAgICAgICAgICAgICAgICBsZXQgYl92YWw6IHU4ID0gdW5zYWZlIHsgY29yZTo6bWVtOjp0cmFuc211dGUoYl9mYW0uX2JpdGZpZWxkXzEpIH07XG4mIzQzOyAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IFRoZSBiaXQgZmllbGQgaXMgc3RvcmVkIGFzIHU4LlxuJiM0MzsgICAgICAgICAgICAgICAgbGV0IGNfdmFsOiB1OCA9IHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlKGNfYml0ZmllbGQpIH07XG4mIzQzOyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKGJfdmFsLCBjX3ZhbCk7XG4mIzQzOyAgICAgICAgICAgIH1cbiYjNDM7ICAgICAgICB9XG4mIzQzOyAgICB9XG4mIzQzO31cbmRpZmYgLS1naXQgYS9ydXN0L3VhcGkvdWFwaV9oZWxwZXIuaCBiL3J1c3QvdWFwaS91YXBpX2hlbHBlci5oXG5pbmRleCAwNmQ3ZDFhMmU4ZGFiYS4uODZjN2I2YjI4NGIwNWEgMTAwNjQ0XG4tLS0gYS9ydXN0L3VhcGkvdWFwaV9oZWxwZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC91YXBpL3VhcGlfaGVscGVyLmhcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvZHJtL25vdmFfZHJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2RybS9wYW50aG9yX2RybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9hbmRyb2lkL2JpbmRlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYW5kcm9pZC9iaW5kZXJfbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21paS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9ldGh0b29sLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBTkRST0lEX0JJTkRFUl9JUENfUlVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlcG9ydF9uZXRsaW5rX2lubmVyJiMzNDssCiAgICAmIzM0O3JlcG9ydF9uZXRsaW5rJiMzNDssCiAgICAmIzM0O2dlbmxtc2dfcHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbmV0bGluayBtdWx0aWNhc3QgcmVwb3J0aW5nIGZvciBBbmRyb2lkIEJpbmRlciB0cmFuc2FjdGlvbiBmYWlsdXJlcyBpbiBSdXN0LiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgZm9yIGNvbnN0cnVjdGluZyBhbmQgYnJvYWRjYXN0aW5nIG5ldGxpbmsgbWVzc2FnZXMgd2hlbiBiaW5kZXIgdHJhbnNhY3Rpb25zIGZhaWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc1ZTI4MDQwOTYyYTVmMWQ3MTk5NTZmMjc4MGI3ZTdlNjM1ZDVjMjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDE3OjU1OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBjM2Y3MjA1OGEyZjI2ZS4uYmU1YTE5NmYxMmM2YWYgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xODg3NSw2ICYjNDM7MTg4NzUsOCBAQCBGOglpbmNsdWRlL3VhcGkvbGludXgvc2N0cC5oCiBGOglsaWIvbmV0X3V0aWxzLmMKIEY6CWxpYi9yYW5kb20zMi5jCiBGOgluZXQvCiYjNDM7RjoJcnVzdC9oZWxwZXJzL25ldC8KJiM0MztGOglydXN0L2tlcm5lbC9uZXQvCiBGOglzYW1wbGVzL3BrdGdlbi8KIEY6CXRvb2xzL25ldC8KIEY6CXRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnIGIvZHJpdmVycy9hbmRyb2lkL0tjb25maWcKaW5kZXggZTJlNDAyYzlkMTc1OWMuLjYwNmE5ZDA3Zjc3NDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZwpAQCAtMTYsNyAmIzQzOzE2LDcgQEAgY29uZmlnIEFORFJPSURfQklOREVSX0lQQwogCiBjb25maWcgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1QKIAlib29sICYjMzQ7UnVzdCB2ZXJzaW9uIG9mIEFuZHJvaWQgQmluZGVyIElQQyBEcml2ZXImIzM0OwotCWRlcGVuZHMgb24gUlVTVCAmYW1wOyZhbXA7IE1NVSAmYW1wOyZhbXA7ICFBTkRST0lEX0JJTkRFUl9JUEMKJiM0MzsJZGVwZW5kcyBvbiBSVVNUICZhbXA7JmFtcDsgTU1VICZhbXA7JmFtcDsgTkVUICZhbXA7JmFtcDsgIUFORFJPSURfQklOREVSX0lQQwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgUnVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQmluZGVyIGRyaXZlci4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZWI3ZWEyZWRhZmY3MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5ycwpAQCAtMCwwICYjNDM7MSwxMTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKChHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlKSBPUiBCU0QtMy1DbGF1c2UpCiYjNDM7LyogQmFzZWQgb246IERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9iaW5kZXIueWFtbCAqLwomIzQzOwomIzQzOyMhW2FsbG93KHVucmVhY2hhYmxlX3B1YiwgY2xpcHB5Ojp3cm9uZ19zZWxmX2NvbnZlbnRpb24pXQomIzQzO3VzZSBrZXJuZWw6OnsKJiM0MzsgICAgbmV0OjpuZXRsaW5rOjp7CiYjNDM7ICAgICAgICBGYW1pbHksCiYjNDM7ICAgICAgICBHZW5sTXNnLAomIzQzOyAgICAgICAgTXVsdGljYXN0R3JvdXAsCiYjNDM7ICAgICAgICBOZXRsaW5rU2tCdWZmLCAvLwomIzQzOyAgICB9LAomIzQzOyAgICBwcmVsdWRlOjoqLCAvLwomIzQzO307CiYjNDM7CiYjNDM7cHViIHN0YXRpYyBCSU5ERVJfTkxfRkFNSUxZOiBGYW1pbHkgPSBGYW1pbHk6OmNvbnN0X25ldygKJiM0MzsgICAgJmFtcDtjcmF0ZTo6VEhJU19NT0RVTEUsCiYjNDM7ICAgIGtlcm5lbDo6dWFwaTo6QklOREVSX0ZBTUlMWV9OQU1FLAomIzQzOyAgICBrZXJuZWw6OnVhcGk6OkJJTkRFUl9GQU1JTFlfVkVSU0lPTiwKJiM0MzsgICAgJmFtcDtCSU5ERVJfTkxfRkFNSUxZX01DR1JQUywKJiM0MzspOwomIzQzOwomIzQzO3N0YXRpYyBCSU5ERVJfTkxfRkFNSUxZX01DR1JQUzogW011bHRpY2FzdEdyb3VwOyAxXSA9IFtNdWx0aWNhc3RHcm91cDo6Y29uc3RfbmV3KGMmIzM0O3JlcG9ydCYjMzQ7KV07CiYjNDM7CiYjNDM7Ly8vIEEgbXVsdGljYXN0IGV2ZW50IHNlbnQgdG8gdXNlcnNwYWNlIHN1YnNjcmliZXJzIHRvIG5vdGlmeSB0aGVtIGFib3V0CiYjNDM7Ly8vIGJpbmRlciB0cmFuc2FjdGlvbiBmYWlsdXJlcy4gVGhlIGdlbmVyYXRlZCByZXBvcnQgcHJvdmlkZXMgdGhlIGZ1bGwKJiM0MzsvLy8gZGV0YWlscyBvZiB0aGUgc3BlY2lmaWMgdHJhbnNhY3Rpb24gdGhhdCBmYWlsZWQuIFRoZSBpbnRlbnRpb24gaXMgZm9yCiYjNDM7Ly8vIHByb2dyYW1zIHRvIG1vbml0b3IgdGhlc2UgZXZlbnRzIGFuZCByZWFjdCB0byB0aGUgZmFpbHVyZXMgYXMgbmVlZGVkLgomIzQzO3B1YiBzdHJ1Y3QgUmVwb3J0IHsKJiM0MzsgICAgc2tiOiBHZW5sTXNnLAomIzQzO30KJiM0MzsKJiM0MztpbXBsIFJlcG9ydCB7CiYjNDM7ICAgIC8vLyBDcmVhdGUgYSBuZXcgbXVsdGljYXN0IG1lc3NhZ2UuCiYjNDM7ICAgIHB1YiBmbiBuZXcoCiYjNDM7ICAgICAgICBzaXplOiB1c2l6ZSwKJiM0MzsgICAgICAgIHBvcnRpZDogdTMyLAomIzQzOyAgICAgICAgc2VxOiB1MzIsCiYjNDM7ICAgICAgICBmbGFnczoga2VybmVsOjphbGxvYzo6RmxhZ3MsCiYjNDM7ICAgICkgLSZndDsgUmVzdWx0Jmx0O1NlbGYsIGtlcm5lbDo6YWxsb2M6OkFsbG9jRXJyb3ImZ3Q7IHsKJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9DTURfUkVQT1JUOiB1OCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0NNRF9SRVBPUlQgYXMgdTg7CiYjNDM7ICAgICAgICBsZXQgc2tiID0gTmV0bGlua1NrQnVmZjo6bmV3KHNpemUsIGZsYWdzKT87CiYjNDM7ICAgICAgICBsZXQgc2tiID0gc2tiLmdlbmxtc2dfcHV0KHBvcnRpZCwgc2VxLCAmYW1wO0JJTkRFUl9OTF9GQU1JTFksIEJJTkRFUl9DTURfUkVQT1JUKT87CiYjNDM7ICAgICAgICBPayhTZWxmIHsgc2tiIH0pCiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIEJyb2FkY2FzdCB0aGlzIG1lc3NhZ2UuCiYjNDM7ICAgIHB1YiBmbiBtdWx0aWNhc3Qoc2VsZiwgcG9ydGlkOiB1MzIsIGZsYWdzOiBrZXJuZWw6OmFsbG9jOjpGbGFncykgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIHNlbGYuc2tiLm11bHRpY2FzdCgmYW1wO0JJTkRFUl9OTF9GQU1JTFksIHBvcnRpZCwgMCwgZmxhZ3MpCiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIENoZWNrIGlmIHRoaXMgbWVzc2FnZSB0eXBlIGhhcyBsaXN0ZW5lcnMuCiYjNDM7ICAgIHB1YiBmbiBoYXNfbGlzdGVuZXJzKCkgLSZndDsgYm9vbCB7CiYjNDM7ICAgICAgICBCSU5ERVJfTkxfRkFNSUxZLmhhc19saXN0ZW5lcnMoMCkKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLy8gVGhlIGVudW0gYmluZGVyX2RyaXZlcl9yZXR1cm5fcHJvdG9jb2wgcmV0dXJuZWQgdG8gdGhlIHNlbmRlci4KJiM0MzsgICAgcHViIGZuIGVycm9yKCZhbXA7bXV0IHNlbGYsIHZhbDogdTMyKSAtJmd0OyBSZXN1bHQgewomIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0VSUk9SOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0VSUk9SIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfRVJST1IsIHZhbCkKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLy8gVGhlIGJpbmRlciBjb250ZXh0IHdoZXJlIHRoZSB0cmFuc2FjdGlvbiBvY2N1cnJlZC4KJiM0MzsgICAgcHViIGZuIGNvbnRleHQoJmFtcDttdXQgc2VsZiwgdmFsOiAmYW1wO0NTdHIpIC0mZ3Q7IFJlc3VsdCB7CiYjNDM7ICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfQ09OVEVYVDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9DT05URVhUIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3N0cmluZyhCSU5ERVJfQV9SRVBPUlRfQ09OVEVYVCwgdmFsKQomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIC8vLyBUaGUgUElEIG9mIHRoZSBzZW5kZXIgcHJvY2Vzcy4KJiM0MzsgICAgcHViIGZuIGZyb21fcGlkKCZhbXA7bXV0IHNlbGYsIHZhbDogdTMyKSAtJmd0OyBSZXN1bHQgewomIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0ZST01fUElEOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0ZST01fUElEIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfRlJPTV9QSUQsIHZhbCkKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLy8gVGhlIFRJRCBvZiB0aGUgc2VuZGVyIHRocmVhZC4KJiM0MzsgICAgcHViIGZuIGZyb21fdGlkKCZhbXA7bXV0IHNlbGYsIHZhbDogdTMyKSAtJmd0OyBSZXN1bHQgewomIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0ZST01fVElEOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0ZST01fVElEIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfRlJPTV9USUQsIHZhbCkKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLy8gVGhlIFBJRCBvZiB0aGUgcmVjaXBpZW50IHByb2Nlc3MuIFRoaXMgYXR0cmlidXRlIG1heSBub3QgYmUgcHJlc2VudAomIzQzOyAgICAvLy8gaWYgdGhlIHRhcmdldCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4KJiM0MzsgICAgcHViIGZuIHRvX3BpZCgmYW1wO211dCBzZWxmLCB2YWw6IHUzMikgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9UT19QSUQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfVE9fUElEIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfVE9fUElELCB2YWwpCiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIFRoZSBUSUQgb2YgdGhlIHJlY2lwaWVudCB0aHJlYWQuIFRoaXMgYXR0cmlidXRlIG1heSBub3QgYmUgcHJlc2VudAomIzQzOyAgICAvLy8gaWYgdGhlIHRhcmdldCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4KJiM0MzsgICAgcHViIGZuIHRvX3RpZCgmYW1wO211dCBzZWxmLCB2YWw6IHUzMikgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9UT19USUQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfVE9fVElEIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfVE9fVElELCB2YWwpCiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIFdoZW4gcHJlc2VudCwgaW5kaWNhdGVzIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gaXMgYSByZXBseS4KJiM0MzsgICAgcHViIGZuIGlzX3JlcGx5KCZhbXA7bXV0IHNlbGYpIC0mZ3Q7IFJlc3VsdCB7CiYjNDM7ICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfSVNfUkVQTFk6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfSVNfUkVQTFkgYXMgY19pbnQ7CiYjNDM7ICAgICAgICBzZWxmLnNrYi5wdXRfZmxhZyhCSU5ERVJfQV9SRVBPUlRfSVNfUkVQTFkpCiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIFRoZSBiaXRtYXNrIG9mIGVudW0gdHJhbnNhY3Rpb25fZmxhZ3MgZnJvbSB0aGUgdHJhbnNhY3Rpb24uCiYjNDM7ICAgIHB1YiBmbiBmbGFncygmYW1wO211dCBzZWxmLCB2YWw6IHUzMikgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9GTEFHUzogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9GTEFHUyBhcyBjX2ludDsKJiM0MzsgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0ZMQUdTLCB2YWwpCiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIFRoZSBhcHBsaWNhdGlvbi1kZWZpbmVkIGNvZGUgZnJvbSB0aGUgdHJhbnNhY3Rpb24uCiYjNDM7ICAgIHB1YiBmbiBjb2RlKCZhbXA7bXV0IHNlbGYsIHZhbDogdTMyKSAtJmd0OyBSZXN1bHQgewomIzQzOyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0NPREU6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfQ09ERSBhcyBjX2ludDsKJiM0MzsgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0NPREUsIHZhbCkKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLy8gVGhlIHRyYW5zYWN0aW9uIHBheWxvYWQgc2l6ZSBpbiBieXRlcy4KJiM0MzsgICAgcHViIGZuIGRhdGFfc2l6ZSgmYW1wO211dCBzZWxmLCB2YWw6IHUzMikgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9EQVRBX1NJWkU6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfREFUQV9TSVpFIGFzIGNfaW50OwomIzQzOyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfREFUQV9TSVpFLCB2YWwpCiYjNDM7ICAgIH0KJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnMKaW5kZXggNDMyMzkwYWFiMjViYjguLmRmNDdhYmEwNTEzMzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9ydXN0X2JpbmRlcl9tYWluLnJzCkBAIC0zMiw2ICYjNDM7MzIsNyBAQAogbW9kIGRlZmVycmVkX2Nsb3NlOwogbW9kIGRlZnM7CiBtb2QgZXJyb3I7CiYjNDM7bW9kIG5ldGxpbms7CiBtb2Qgbm9kZTsKIG1vZCBwYWdlX3JhbmdlOwogbW9kIHByb2Nlc3M7CkBAIC0yODIsMTkgJiM0MzsyODMsMjIgQEAgZm4gcHRyX2FsaWduKHZhbHVlOiB1c2l6ZSkgLSZndDsgT3B0aW9uJmx0O3VzaXplJmd0OyB7CiAvLyBTQUZFVFk6IFdlIGNhbGwgcmVnaXN0ZXIgaW4gYGluaXRgLgogc3RhdGljIEJJTkRFUl9TSFJJTktFUjogU2hyaW5rZXIgPSB1bnNhZmUgeyBTaHJpbmtlcjo6bmV3KCkgfTsKIAotc3RydWN0IEJpbmRlck1vZHVsZSB7fQomIzQzO3N0cnVjdCBCaW5kZXJNb2R1bGUgewomIzQzOyAgICBfbmV0bGluazoga2VybmVsOjpuZXQ6Om5ldGxpbms6OlJlZ2lzdHJhdGlvbiwKJiM0Mzt9CiAKIGltcGwga2VybmVsOjpNb2R1bGUgZm9yIEJpbmRlck1vZHVsZSB7CiAgICAgZm4gaW5pdChfbW9kdWxlOiAmYW1wOyYjMzk7c3RhdGljIGtlcm5lbDo6VGhpc01vZHVsZSkgLSZndDsgUmVzdWx0Jmx0O1NlbGYmZ3Q7IHsKICAgICAgICAgLy8gU0FGRVRZOiBUaGUgbW9kdWxlIGluaXRpYWxpemVyIG5ldmVyIHJ1bnMgdHdpY2UsIHNvIHdlIG9ubHkgY2FsbCB0aGlzIG9uY2UuCiAgICAgICAgIHVuc2FmZSB7IGNyYXRlOjpjb250ZXh0OjpDT05URVhUUy5pbml0KCkgfTsKIAomIzQzOyAgICAgICAgbGV0IG5ldGxpbmsgPSBjcmF0ZTo6bmV0bGluazo6QklOREVSX05MX0ZBTUlMWS5yZWdpc3RlcigpPzsKICAgICAgICAgQklOREVSX1NIUklOS0VSLnJlZ2lzdGVyKGMmIzM0O2FuZHJvaWQtYmluZGVyJiMzNDspPzsKIAogICAgICAgICAvLyBTQUZFVFk6IFRoZSBtb2R1bGUgaXMgYmVpbmcgbG9hZGVkLCBzbyB3ZSBjYW4gaW5pdGlhbGl6ZSBiaW5kZXJmcy4KICAgICAgICAgdW5zYWZlIHsga2VybmVsOjplcnJvcjo6dG9fcmVzdWx0KGJpbmRlcmZzOjppbml0X3J1c3RfYmluZGVyZnMoKSk/IH07CiAKLSAgICAgICAgT2soU2VsZiB7fSkKJiM0MzsgICAgICAgIE9rKFNlbGYgeyBfbmV0bGluazogbmV0bGluayB9KQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycwppbmRleCAxOWY4ODE5NDhhODRiYS4uMzMzNjhmN2ZkNTUxNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzCkBAIC0xMjg0LDYgJiM0MzsxMjg0LDE1IEBAIGZuIHRyYW5zYWN0aW9uKHNlbGY6ICZhbXA7QXJjJmx0O1NlbGYmZ3Q7LCBjbWQ6IHUzMiwgcmVhZGVyOiAmYW1wO211dCBVc2VyU2xpY2VSZWFkZXIpIC0mZ3Q7IFJlc3UKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiYjNDM7ICAgICAgICBpZiBpbmZvLm9uZXdheV9zcGFtX3N1c3BlY3QgewomIzQzOyAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYm90aCBhIG9uZXdheSBzcGFtIHN1c3BlY3QgYW5kIGEgZmFpbHVyZSwgd2UgcmVwb3J0IGl0IHR3aWNlLiBUaGlzIGlzCiYjNDM7ICAgICAgICAgICAgLy8gdXNlZnVsIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGZhaWxlZCB3aXRoIEJSX1RSQU5TQUNUSU9OX1BFTkRJTkdfRlJPWkVOLgomIzQzOyAgICAgICAgICAgIGluZm8ucmVwb3J0X25ldGxpbmsoQlJfT05FV0FZX1NQQU1fU1VTUEVDVCwgJmFtcDtzZWxmLnByb2Nlc3MuY3R4KTsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIGlmIGluZm8ucmVwbHkgIT0gMCB7CiYjNDM7ICAgICAgICAgICAgaW5mby5yZXBvcnRfbmV0bGluayhpbmZvLnJlcGx5LCAmYW1wO3NlbGYucHJvY2Vzcy5jdHgpOwomIzQzOyAgICAgICAgfQomIzQzOwogICAgICAgICBPaygoKSkKICAgICB9CiAKQEAgLTEzNTQsMTEgJiM0MzsxMzYzLDExIEBAIGZuIHJlcGx5X2lubmVyKHNlbGY6ICZhbXA7QXJjJmx0O1NlbGYmZ3Q7LCBpbmZvOiAmYW1wO211dCBUcmFuc2FjdGlvbkluZm8pIC0mZ3Q7IEJpbmRlclJlc3VsdCB7CiAgICAgICAgICAgICAgICAgaW5mby5mcm9tX3RpZCwKICAgICAgICAgICAgICAgICBpbmZvLnRvX3BpZAogICAgICAgICAgICAgKTsKLQogICAgICAgICAgICAgbGV0IHBhcmFtID0gZXJyLnNvdXJjZS5hc19yZWYoKS5tYXBfb3IoMCwgfGV8IGUudG9fZXJybm8oKSk7CiAgICAgICAgICAgICBsZXQgZWUgPSBFeHRlbmRlZEVycm9yOjpuZXcoaW5mby5kZWJ1Z19pZCBhcyB1MzIsIGVyci5yZXBseSwgcGFyYW0pOwogICAgICAgICAgICAgb3JpZy5mcm9tCiAgICAgICAgICAgICAgICAgLmRlbGl2ZXJfcmVwbHkoRXJyKEJSX0ZBSUxFRF9SRVBMWSksICZhbXA7b3JpZywgU29tZShlZSkpOwomIzQzOyAgICAgICAgICAgIGluZm8ucmVwbHkgPSBCUl9GQUlMRURfUkVQTFk7CiAgICAgICAgICAgICBlcnIucmVwbHkgPSBCUl9UUkFOU0FDVElPTl9DT01QTEVURTsKICAgICAgICAgICAgIGVycgogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzCmluZGV4IGFmZWY1YjQ2ZWFjMjY3Li42Y2I3Yjc0NWM1MmU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5ycwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzCkBAIC0zLDYgJiM0MzszLDcgQEAKIC8vIENvcHlyaWdodCAoQykgMjAyNSBHb29nbGUgTExDLgogCiB1c2Uga2VybmVsOjp7CiYjNDM7ICAgIG5ldDo6bmV0bGluazo6R0VOTE1TR19ERUZBVUxUX1NJWkUsCiAgICAgcHJlbHVkZTo6KiwKICAgICBzZXFfZmlsZTo6U2VxRmlsZSwKICAgICBzZXFfcHJpbnQsCkBAIC0xOCw2ICYjNDM7MTksNyBAQAogICAgIGFsbG9jYXRpb246OntBbGxvY2F0aW9uLCBUcmFuc2xhdGVkRmRzfSwKICAgICBkZWZzOjoqLAogICAgIGVycm9yOjp7QmluZGVyRXJyb3IsIEJpbmRlclJlc3VsdH0sCiYjNDM7ICAgIG5ldGxpbms6OlJlcG9ydCwKICAgICBub2RlOjp7Tm9kZSwgTm9kZVJlZn0sCiAgICAgcHJvY2Vzczo6e1Byb2Nlc3MsIFByb2Nlc3NJbm5lcn0sCiAgICAgcHRyX2FsaWduLApAQCAtNTEsNiAmIzQzOzUzLDQ0IEBAIGltcGwgVHJhbnNhY3Rpb25JbmZvIHsKICAgICBwdWIoY3JhdGUpIGZuIGlzX29uZXdheSgmYW1wO3NlbGYpIC0mZ3Q7IGJvb2wgewogICAgICAgICBzZWxmLmZsYWdzICZhbXA7IFRGX09ORV9XQVkgIT0gMAogICAgIH0KJiM0MzsKJiM0MzsgICAgcHViKGNyYXRlKSBmbiByZXBvcnRfbmV0bGluaygmYW1wO3NlbGYsIHJlcGx5OiB1MzIsIGN0eDogJmFtcDtjcmF0ZTo6Q29udGV4dCkgewomIzQzOyAgICAgICAgaWYgbGV0IEVycihlcnIpID0gc2VsZi5yZXBvcnRfbmV0bGlua19pbm5lcihyZXBseSwgY3R4KSB7CiYjNDM7ICAgICAgICAgICAgcHJfd2FybiEoCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7e306e30gbmV0bGluayByZXBvcnQgZmFpbGVkOiB7ZXJyOj99XG4mIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgc2VsZi5mcm9tX3BpZCwKJiM0MzsgICAgICAgICAgICAgICAgc2VsZi5mcm9tX3RpZAomIzQzOyAgICAgICAgICAgICk7CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgZm4gcmVwb3J0X25ldGxpbmtfaW5uZXIoJmFtcDtzZWxmLCByZXBseTogdTMyLCBjdHg6ICZhbXA7Y3JhdGU6OkNvbnRleHQpIC0mZ3Q7IGtlcm5lbDo6ZXJyb3I6OlJlc3VsdCB7CiYjNDM7ICAgICAgICBpZiAhUmVwb3J0OjpoYXNfbGlzdGVuZXJzKCkgewomIzQzOyAgICAgICAgICAgIHJldHVybiBPaygoKSk7CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgICAgICBsZXQgbXV0IHJlcG9ydCA9IFJlcG9ydDo6bmV3KEdFTkxNU0dfREVGQVVMVF9TSVpFLCAwLCAwLCBHRlBfS0VSTkVMKT87CiYjNDM7CiYjNDM7ICAgICAgICByZXBvcnQuZXJyb3IocmVwbHkpPzsKJiM0MzsgICAgICAgIHJlcG9ydC5jb250ZXh0KCZhbXA7Y3R4Lm5hbWUpPzsKJiM0MzsgICAgICAgIHJlcG9ydC5mcm9tX3BpZChzZWxmLmZyb21fcGlkIGFzIHUzMik/OwomIzQzOyAgICAgICAgcmVwb3J0LmZyb21fdGlkKHNlbGYuZnJvbV90aWQgYXMgdTMyKT87CiYjNDM7ICAgICAgICBpZiBzZWxmLnRvX3BpZCAhPSAwIHsKJiM0MzsgICAgICAgICAgICByZXBvcnQudG9fcGlkKHNlbGYudG9fcGlkIGFzIHUzMik/OwomIzQzOyAgICAgICAgfQomIzQzOyAgICAgICAgaWYgc2VsZi50b190aWQgIT0gMCB7CiYjNDM7ICAgICAgICAgICAgcmVwb3J0LnRvX3RpZChzZWxmLnRvX3RpZCBhcyB1MzIpPzsKJiM0MzsgICAgICAgIH0KJiM0MzsKJiM0MzsgICAgICAgIGlmIHNlbGYuaXNfcmVwbHkgewomIzQzOyAgICAgICAgICAgIHJlcG9ydC5pc19yZXBseSgpPzsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIHJlcG9ydC5mbGFncyhzZWxmLmZsYWdzKT87CiYjNDM7ICAgICAgICByZXBvcnQuY29kZShzZWxmLmNvZGUpPzsKJiM0MzsgICAgICAgIHJlcG9ydC5kYXRhX3NpemUoc2VsZi5kYXRhX3NpemUgYXMgdTMyKT87CiYjNDM7CiYjNDM7ICAgICAgICByZXBvcnQubXVsdGljYXN0KDAsIEdGUF9LRVJORUwpPzsKJiM0MzsgICAgICAgIE9rKCgpKQomIzQzOyAgICB9CiB9CiAKIHVzZSBjb3JlOjptZW06Om9mZnNldF9vZjsKZGlmZiAtLWdpdCBhL3J1c3QvYmluZGluZ3MvYmluZGluZ3NfaGVscGVyLmggYi9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oCmluZGV4IDExMjQ3ODVlMjEwYjMwLi5lYzk2ZTgxMTYxMGQ3MiAxMDA2NDQKLS0tIGEvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oCkBAIC05Myw2ICYjNDM7OTMsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2dlbmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9ydXN0X3NhbXBsZS5oJmd0OwogCiAvKgpAQCAtMTEwLDYgJiM0MzsxMTIsNyBAQAogY29uc3Qgc2l6ZV90IFJVU1RfQ09OU1RfSEVMUEVSX0FSQ0hfU0xBQl9NSU5BTElHTiA9IEFSQ0hfU0xBQl9NSU5BTElHTjsKIGNvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9BUkNIX0tNQUxMT0NfTUlOQUxJR04gPSBBUkNIX0tNQUxMT0NfTUlOQUxJR047CiBjb25zdCBzaXplX3QgUlVTVF9DT05TVF9IRUxQRVJfUEFHRV9TSVpFID0gUEFHRV9TSVpFOwomIzQzO2NvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRU5MTVNHX0RFRkFVTFRfU0laRSA9IEdFTkxNU0dfREVGQVVMVF9TSVpFOwogY29uc3QgZ2ZwX3QgUlVTVF9DT05TVF9IRUxQRVJfR0ZQX0FUT01JQyA9IEdGUF9BVE9NSUM7CiBjb25zdCBnZnBfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRlBfS0VSTkVMID0gR0ZQX0tFUk5FTDsKIGNvbnN0IGdmcF90IFJVU1RfQ09OU1RfSEVMUEVSX0dGUF9LRVJORUxfQUNDT1VOVCA9IEdGUF9LRVJORUxfQUNDT1VOVDsKZGlmZiAtLWdpdCBhL3J1c3QvaGVscGVycy9oZWxwZXJzLmMgYi9ydXN0L2hlbHBlcnMvaGVscGVycy5jCmluZGV4IDk5OGUzMTA1MmU2NjAxLi4xZDRlZTUxZjU3NmJlYiAxMDA2NDQKLS0tIGEvcnVzdC9oZWxwZXJzL2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9ydXN0L2hlbHBlcnMvaGVscGVycy5jCkBAIC03Miw2ICYjNDM7NzIsNyBAQAogI2luY2x1ZGUgJiMzNDttYXBsZV90cmVlLmMmIzM0OwogI2luY2x1ZGUgJiMzNDttbS5jJiMzNDsKICNpbmNsdWRlICYjMzQ7bXV0ZXguYyYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtuZXQvZ2VuZXRsaW5rLmMmIzM0OwogI2luY2x1ZGUgJiMzNDtvZi5jJiMzNDsKICNpbmNsdWRlICYjMzQ7cGFnZS5jJiMzNDsKICNpbmNsdWRlICYjMzQ7cGNpLmMmIzM0OwpkaWZmIC0tZ2l0IGEvcnVzdC9oZWxwZXJzL25ldC9nZW5ldGxpbmsuYyBiL3J1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM1MzBiNjlmNmNmNzA3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC9oZWxwZXJzL25ldC9nZW5ldGxpbmsuYwpAQCAtMCwwICYjNDM7MSw0NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlIExMQy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2dlbmV0bGluay5oJmd0OwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTkVUCiYjNDM7CiYjNDM7X19ydXN0X2hlbHBlciBzdHJ1Y3Qgc2tfYnVmZiAqcnVzdF9oZWxwZXJfZ2VubG1zZ19uZXcoc2l6ZV90IHBheWxvYWQsIGdmcF90IGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIGdlbmxtc2dfbmV3KHBheWxvYWQsIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19ydXN0X2hlbHBlcgomIzQzO2ludCBydXN0X2hlbHBlcl9nZW5sbXNnX211bHRpY2FzdChjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSwKJiM0MzsJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLAomIzQzOwkJCQkgIHVuc2lnbmVkIGludCBncm91cCwgZ2ZwX3QgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gZ2VubG1zZ19tdWx0aWNhc3QoZmFtaWx5LCBza2IsIHBvcnRpZCwgZ3JvdXAsIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19ydXN0X2hlbHBlciB2b2lkIHJ1c3RfaGVscGVyX2dlbmxtc2dfY2FuY2VsKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcikKJiM0Mzt7CiYjNDM7CWdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19ydXN0X2hlbHBlciB2b2lkIHJ1c3RfaGVscGVyX2dlbmxtc2dfZW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcikKJiM0Mzt7CiYjNDM7CWdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19ydXN0X2hlbHBlciB2b2lkIHJ1c3RfaGVscGVyX25sbXNnX2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CW5sbXNnX2ZyZWUoc2tiKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19ydXN0X2hlbHBlcgomIzQzO2ludCBydXN0X2hlbHBlcl9nZW5sX2hhc19saXN0ZW5lcnMoY29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksCiYjNDM7CQkJCSAgIHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGdyb3VwKQomIzQzO3sKJiM0MzsJcmV0dXJuIGdlbmxfaGFzX2xpc3RlbmVycyhmYW1pbHksIG5ldCwgZ3JvdXApOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL25ldC5ycyBiL3J1c3Qva2VybmVsL25ldC9tb2QucnMKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gcnVzdC9rZXJuZWwvbmV0LnJzCnJlbmFtZSB0byBydXN0L2tlcm5lbC9uZXQvbW9kLnJzCmluZGV4IGZlNDE1Y2IzNjlkM2FjLi44ZWNhZTc1NzdlZDI5NSAxMDA2NDQKLS0tIGEvcnVzdC9rZXJuZWwvbmV0LnJzCiYjNDM7JiM0MzsmIzQzOyBiL3J1c3Qva2VybmVsL25ldC9tb2QucnMKQEAgLTQsMyAmIzQzOzQsNSBAQAogCiAjW2NmZyhDT05GSUdfUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TKV0KIHB1YiBtb2QgcGh5OwomIzQzOwomIzQzO3B1YiBtb2QgbmV0bGluazsKZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzIGIvcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIyZWYzZGRlMzZmYTFhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMKQEAgLTAsMCAmIzQzOzEsMzM3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlIExMQy4KJiM0MzsKJiM0MzsvLyEgUnVzdCBzdXBwb3J0IGZvciBnZW5lcmljIG5ldGxpbmsuCiYjNDM7Ly8hCiYjNDM7Ly8hIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGV4cG9zaW5nIG11bHRpY2FzdCBncm91cHMuCiYjNDM7Ly8hCiYjNDM7Ly8hIEMgaGVhZGVyOiBbYGluY2x1ZGUvbmV0L2dlbmV0bGluay5oYF0oc3JjdHJlZS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaCkKJiM0MzsKJiM0Mzt1c2Uga2VybmVsOjp7CiYjNDM7ICAgIGFsbG9jOjp7c2VsZiwgQWxsb2NFcnJvcn0sCiYjNDM7ICAgIGVycm9yOjp0b19yZXN1bHQsCiYjNDM7ICAgIHByZWx1ZGU6OiosCiYjNDM7ICAgIHRyYW5zbXV0ZTo6QXNCeXRlcywKJiM0MzsgICAgdHlwZXM6Ok9wYXF1ZSwKJiM0MzsgICAgVGhpc01vZHVsZSwKJiM0Mzt9OwomIzQzOwomIzQzO3VzZSBjb3JlOjp7CiYjNDM7ICAgIG1lbTo6TWFudWFsbHlEcm9wLAomIzQzOyAgICBwdHI6Ok5vbk51bGwsIC8vCiYjNDM7fTsKJiM0MzsKJiM0MzsvLy8gVGhlIGRlZmF1bHQgbmV0bGluayBtZXNzYWdlIHNpemUuCiYjNDM7cHViIGNvbnN0IEdFTkxNU0dfREVGQVVMVF9TSVpFOiB1c2l6ZSA9IGJpbmRpbmdzOjpHRU5MTVNHX0RFRkFVTFRfU0laRTsKJiM0MzsKJiM0MzsvLy8gQSB3cmFwcGVyIGFyb3VuZCBgc3RydWN0IHNrX2J1ZmZgIGZvciBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZXMuCiYjNDM7Ly8vCiYjNDM7Ly8vIFRoaXMgdHlwZSBpcyBpbnRlbmRlZCB0byBiZSBzcGVjaWZpYyBmb3IgYnVmZmVycyB1c2VkIHdpdGggbmV0bGluayBvbmx5LCBhbmQgb3RoZXIgdXNlY2FzZXMgZm9yCiYjNDM7Ly8vIGBzdHJ1Y3Qgc2tfYnVmZmAgYXJlIG91dC1vZi1zY29wZSBmb3IgdGhpcyBhYnN0cmFjdGlvbi4KJiM0MzsvLy8KJiM0MzsvLy8gIyBJbnZhcmlhbnRzCiYjNDM7Ly8vCiYjNDM7Ly8vIFRoZSBwb2ludGVyIGhhcyBvd25lcnNoaXAgb3ZlciBhIHZhbGlkIGBza19idWZmYC4KJiM0MztwdWIgc3RydWN0IE5ldGxpbmtTa0J1ZmYgewomIzQzOyAgICBza2I6IE5vbk51bGwmbHQ7a2VybmVsOjpiaW5kaW5nczo6c2tfYnVmZiZndDssCiYjNDM7fQomIzQzOwomIzQzO2ltcGwgTmV0bGlua1NrQnVmZiB7CiYjNDM7ICAgIC8vLyBDcmVhdGVzIGEgbmV3IGBOZXRsaW5rU2tCdWZmYCB3aXRoIHRoZSBnaXZlbiBzaXplLgomIzQzOyAgICBwdWIgZm4gbmV3KHNpemU6IHVzaXplLCBmbGFnczogYWxsb2M6OkZsYWdzKSAtJmd0OyBSZXN1bHQmbHQ7TmV0bGlua1NrQnVmZiwgQWxsb2NFcnJvciZndDsgewomIzQzOyAgICAgICAgLy8gU0FGRVRZOiBgZ2VubG1zZ19uZXdgIG9ubHkgcmVxdWlyZXMgaXRzIGFyZ3VtZW50cyB0byBiZSB2YWxpZCBpbnRlZ2Vycy4KJiM0MzsgICAgICAgIGxldCBza2IgPSB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19uZXcoc2l6ZSwgZmxhZ3MuYXNfcmF3KCkpIH07CiYjNDM7ICAgICAgICBsZXQgc2tiID0gTm9uTnVsbDo6bmV3KHNrYikub2tfb3IoQWxsb2NFcnJvcik/OwomIzQzOyAgICAgICAgT2soTmV0bGlua1NrQnVmZiB7IHNrYiB9KQomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIC8vLyBQdXRzIGEgZ2VuZXJpYyBuZXRsaW5rIGhlYWRlciBpbnRvIHRoZSBgTmV0bGlua1NrQnVmZmAuCiYjNDM7ICAgIHB1YiBmbiBnZW5sbXNnX3B1dCgKJiM0MzsgICAgICAgIHNlbGYsCiYjNDM7ICAgICAgICBwb3J0aWQ6IHUzMiwKJiM0MzsgICAgICAgIHNlcTogdTMyLAomIzQzOyAgICAgICAgZmFtaWx5OiAmYW1wOyYjMzk7c3RhdGljIEZhbWlseSwKJiM0MzsgICAgICAgIGNtZDogdTgsCiYjNDM7ICAgICkgLSZndDsgUmVzdWx0Jmx0O0dlbmxNc2csIEFsbG9jRXJyb3ImZ3Q7IHsKJiM0MzsgICAgICAgIGxldCBza2IgPSBzZWxmLnNrYi5hc19wdHIoKTsKJiM0MzsgICAgICAgIC8vIFNBRkVUWTogVGhlIHNrYiBhbmQgZmFtaWx5IHBvaW50ZXJzIGFyZSB2YWxpZC4KJiM0MzsgICAgICAgIGxldCBoZHIgPSB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgZmFtaWx5LmFzX3JhdygpLCAwLCBjbWQpIH07CiYjNDM7ICAgICAgICBsZXQgaGRyID0gTm9uTnVsbDo6bmV3KGhkcikub2tfb3IoQWxsb2NFcnJvcik/OwomIzQzOyAgICAgICAgT2soR2VubE1zZyB7IHNrYjogc2VsZiwgaGRyIH0pCiYjNDM7ICAgIH0KJiM0Mzt9CiYjNDM7CiYjNDM7aW1wbCBEcm9wIGZvciBOZXRsaW5rU2tCdWZmIHsKJiM0MzsgICAgZm4gZHJvcCgmYW1wO211dCBzZWxmKSB7CiYjNDM7ICAgICAgICAvLyBTQUZFVFk6IFdlIGhhdmUgb3duZXJzaGlwIG92ZXIgdGhlIGBza19idWZmYCwgc28gd2UgbWF5IGZyZWUgaXQuCiYjNDM7ICAgICAgICB1bnNhZmUgeyBiaW5kaW5nczo6bmxtc2dfZnJlZShzZWxmLnNrYi5hc19wdHIoKSkgfQomIzQzOyAgICB9CiYjNDM7fQomIzQzOwomIzQzOy8vLyBBIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlIGJlaW5nIGNvbnN0cnVjdGVkLgomIzQzOy8vLwomIzQzOy8vLyAjIEludmFyaWFudHMKJiM0MzsvLy8KJiM0MzsvLy8gYGhkcmAgcmVmZXJlbmNlcyB0aGUgaGVhZGVyIGluIHRoaXMgbmV0bGluayBtZXNzYWdlLgomIzQzO3B1YiBzdHJ1Y3QgR2VubE1zZyB7CiYjNDM7ICAgIHNrYjogTmV0bGlua1NrQnVmZiwKJiM0MzsgICAgaGRyOiBOb25OdWxsJmx0O2Nfdm9pZCZndDssCiYjNDM7fQomIzQzOwomIzQzO2ltcGwgR2VubE1zZyB7CiYjNDM7ICAgIC8vLyBQdXRzIGFuIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLgomIzQzOyAgICAjW2lubGluZV0KJiM0MzsgICAgZm4gcHV0Jmx0O1QmZ3Q7KCZhbXA7bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6ICZhbXA7VCkgLSZndDsgUmVzdWx0CiYjNDM7ICAgIHdoZXJlCiYjNDM7ICAgICAgICBUOiA/U2l6ZWQgJiM0MzsgQXNCeXRlcywKJiM0MzsgICAgewomIzQzOyAgICAgICAgbGV0IHNrYiA9IHNlbGYuc2tiLnNrYi5hc19wdHIoKTsKJiM0MzsgICAgICAgIGxldCBsZW4gPSBzaXplX29mX3ZhbCh2YWx1ZSk7CiYjNDM7ICAgICAgICBsZXQgcHRyID0gY29yZTo6cHRyOjpmcm9tX3JlZih2YWx1ZSkuY2FzdDo6Jmx0O2Nfdm9pZCZndDsoKTsKJiM0MzsgICAgICAgIC8vIFNBRkVUWTogYHNrYmAgaXMgdmFsaWQgYnkgYE5ldGxpbmtTa0J1ZmZgIHR5cGUgaW52YXJpYW50cywgYW5kIHRoZSBwcm92aWRlZCB2YWx1ZSBpcwomIzQzOyAgICAgICAgLy8gcmVhZGFibGUgYW5kIGluaXRpYWxpemVkIGZvciBpdHMgYHNpemVfb2ZgIGJ5dGVzLgomIzQzOyAgICAgICAgdG9fcmVzdWx0KHVuc2FmZSB7IGJpbmRpbmdzOjpubGFfcHV0KHNrYiwgYXR0cnR5cGUsIGxlbiBhcyBjX2ludCwgcHRyKSB9KQomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIC8vLyBQdXRzIGEgYHUzMmAgYXR0cmlidXRlIGludG8gdGhlIG1lc3NhZ2UuCiYjNDM7ICAgICNbaW5saW5lXQomIzQzOyAgICBwdWIgZm4gcHV0X3UzMigmYW1wO211dCBzZWxmLCBhdHRydHlwZTogY19pbnQsIHZhbHVlOiB1MzIpIC0mZ3Q7IFJlc3VsdCB7CiYjNDM7ICAgICAgICBzZWxmLnB1dChhdHRydHlwZSwgJmFtcDt2YWx1ZSkKJiM0MzsgICAgfQomIzQzOwomIzQzOyAgICAvLy8gUHV0cyBhIHN0cmluZyBhdHRyaWJ1dGUgaW50byB0aGUgbWVzc2FnZS4KJiM0MzsgICAgI1tpbmxpbmVdCiYjNDM7ICAgIHB1YiBmbiBwdXRfc3RyaW5nKCZhbXA7bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6ICZhbXA7Q1N0cikgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIHNlbGYucHV0KGF0dHJ0eXBlLCB2YWx1ZS50b19ieXRlc193aXRoX251bCgpKQomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIC8vLyBQdXRzIGEgZmxhZyBhdHRyaWJ1dGUgaW50byB0aGUgbWVzc2FnZS4KJiM0MzsgICAgI1tpbmxpbmVdCiYjNDM7ICAgIHB1YiBmbiBwdXRfZmxhZygmYW1wO211dCBzZWxmLCBhdHRydHlwZTogY19pbnQpIC0mZ3Q7IFJlc3VsdCB7CiYjNDM7ICAgICAgICBsZXQgc2tiID0gc2VsZi5za2Iuc2tiLmFzX3B0cigpOwomIzQzOyAgICAgICAgLy8gU0FGRVRZOiBgc2tiYCBpcyB2YWxpZCBieSBgTmV0bGlua1NrQnVmZmAgdHlwZSBpbnZhcmlhbnRzLCBhbmQgYSBudWxsIHBvaW50ZXIgaXMgdmFsaWQKJiM0MzsgICAgICAgIC8vIHdoZW4gdGhlIGxlbmd0aCBpcyB6ZXJvLgomIzQzOyAgICAgICAgdG9fcmVzdWx0KHVuc2FmZSB7IGJpbmRpbmdzOjpubGFfcHV0KHNrYiwgYXR0cnR5cGUsIDAsIGNvcmU6OnB0cjo6bnVsbCgpKSB9KQomIzQzOyAgICB9CiYjNDM7CiYjNDM7ICAgIC8vLyBTZW5kcyB0aGUgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgYXMgYSBtdWx0aWNhc3QgbWVzc2FnZS4KJiM0MzsgICAgI1tpbmxpbmVdCiYjNDM7ICAgIHB1YiBmbiBtdWx0aWNhc3QoCiYjNDM7ICAgICAgICBzZWxmLAomIzQzOyAgICAgICAgZmFtaWx5OiAmYW1wOyYjMzk7c3RhdGljIEZhbWlseSwKJiM0MzsgICAgICAgIHBvcnRpZDogdTMyLAomIzQzOyAgICAgICAgZ3JvdXA6IHUzMiwKJiM0MzsgICAgICAgIGZsYWdzOiBhbGxvYzo6RmxhZ3MsCiYjNDM7ICAgICkgLSZndDsgUmVzdWx0IHsKJiM0MzsgICAgICAgIGxldCBtZSA9IE1hbnVhbGx5RHJvcDo6bmV3KHNlbGYpOwomIzQzOyAgICAgICAgLy8gU0FGRVRZOiBUaGUgYHNrYmAgYW5kIGBmYW1pbHlgIHBvaW50ZXJzIGFyZSB2YWxpZC4gV2UgcGFzcyBvd25lcnNoaXAgb2YgdGhlIGBza2JgIHRvCiYjNDM7ICAgICAgICAvLyBgZ2VubG1zZ19tdWx0aWNhc3RgIGJ5IG5vdCBkcm9wcGluZyBgc2VsZmAuCiYjNDM7ICAgICAgICB1bnNhZmUgewomIzQzOyAgICAgICAgICAgIGJpbmRpbmdzOjpnZW5sbXNnX2VuZChtZS5za2Iuc2tiLmFzX3B0cigpLCBtZS5oZHIuYXNfcHRyKCkpOwomIzQzOyAgICAgICAgICAgIHRvX3Jlc3VsdChiaW5kaW5nczo6Z2VubG1zZ19tdWx0aWNhc3QoCiYjNDM7ICAgICAgICAgICAgICAgIGZhbWlseS5hc19yYXcoKSwKJiM0MzsgICAgICAgICAgICAgICAgbWUuc2tiLnNrYi5hc19wdHIoKSwKJiM0MzsgICAgICAgICAgICAgICAgcG9ydGlkLAomIzQzOyAgICAgICAgICAgICAgICBncm91cCwKJiM0MzsgICAgICAgICAgICAgICAgZmxhZ3MuYXNfcmF3KCksCiYjNDM7ICAgICAgICAgICAgKSkKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgfQomIzQzO30KJiM0MztpbXBsIERyb3AgZm9yIEdlbmxNc2cgewomIzQzOyAgICBmbiBkcm9wKCZhbXA7bXV0IHNlbGYpIHsKJiM0MzsgICAgICAgIC8vIFNBRkVUWTogVGhlIGBoZHJgIHBvaW50ZXIgcmVmZXJlbmNlcyB0aGUgaGVhZGVyIG9mIHRoaXMgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UuCiYjNDM7ICAgICAgICB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19jYW5jZWwoc2VsZi5za2Iuc2tiLmFzX3B0cigpLCBzZWxmLmhkci5hc19wdHIoKSkgfTsKJiM0MzsgICAgfQomIzQzO30KJiM0MzsKJiM0MzsvLy8gRmxhZ3MgZm9yIGEgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseS4KJiM0MztzdHJ1Y3QgRmFtaWx5RmxhZ3MgewomIzQzOyAgICAvLy8gV2hldGhlciB0aGUgZmFtaWx5IHN1cHBvcnRzIG5ldHdvcmsgbmFtZXNwYWNlcy4KJiM0MzsgICAgbmV0bnNvazogYm9vbCwKJiM0MzsgICAgLy8vIFdoZXRoZXIgdGhlIGZhbWlseSBzdXBwb3J0cyBwYXJhbGxlbCBvcGVyYXRpb25zLgomIzQzOyAgICBwYXJhbGxlbF9vcHM6IGJvb2wsCiYjNDM7fQomIzQzOwomIzQzO2ltcGwgRmFtaWx5RmxhZ3MgewomIzQzOyAgICAvLy8gQ29udmVydHMgdGhlIGZsYWdzIHRvIHRoZSBiaXRmaWVsZCByZXByZXNlbnRhdGlvbiB1c2VkIGJ5IGBnZW5sX2ZhbWlseWAuCiYjNDM7ICAgIGNvbnN0IGZuIGludG9fYml0ZmllbGQoc2VsZikgLSZndDsgYmluZGluZ3M6Ol9fQmluZGdlbkJpdGZpZWxkVW5pdCZsdDtbdTg7IDFdJmd0OyB7CiYjNDM7ICAgICAgICAvLyBUaGUgYmVsb3cgc2hpZnRzIGFyZSB2ZXJpZmllZCBjb3JyZWN0IGJ5IHRlc3RfZmFtaWx5X2ZsYWdzX2JpdGZpZWxkKCkgYmVsb3cuCiYjNDM7ICAgICAgICAvLwomIzQzOyAgICAgICAgLy8gQWx0aG91Z2ggYmluZGdlbiBnZW5lcmF0ZXMgaGVscGVycyB0byBjaGFuZ2UgYml0ZmllbGRzIGJhc2VkIG9uIHRoZSBDIGhlYWRlcnMsIHRoZXNlCiYjNDM7ICAgICAgICAvLyBoZWxwZXJzIHVuZm9ydHVuYXRlbHkgY2FuJiMzOTt0IGJlIHVzZWQgaW4gY29uc3QgY29udGV4dC4gU2luY2UgYEZhbWlseWAgbmVlZHMgdG8gYmUgZmlsbGVkCiYjNDM7ICAgICAgICAvLyBvdXQgYXQgYnVpbGQtdGltZSwgd2UgdXNlIHRoaXMgaGVscGVyIGluc3RlYWQuCiYjNDM7ICAgICAgICBsZXQgbXV0IGJpdHMgPSAwOwomIzQzOyAgICAgICAgaWYgc2VsZi5uZXRuc29rIHsKJiM0MzsgICAgICAgICAgICBiaXRzIHw9IDEgJmx0OyZsdDsgMDsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIGlmIHNlbGYucGFyYWxsZWxfb3BzIHsKJiM0MzsgICAgICAgICAgICBiaXRzIHw9IDEgJmx0OyZsdDsgMTsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIC8vIENvbnZlcnQgZnJvbSBsaXR0bGUgZW5kaWFuIHRvIHRoZSB0YXJnZXQmIzM5O3MgZW5kaWFubmVzcy4KJiM0MzsgICAgICAgIGJpdHMgPSB1ODo6ZnJvbV9sZShiaXRzKTsKJiM0MzsgICAgICAgIC8vIFNBRkVUWTogVGhpcyBiaXRmaWVsZCBpcyByZXByZXNlbnRlZCBhcyBhbiB1OC4KJiM0MzsgICAgICAgIHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlOjombHQ7dTgsIGJpbmRpbmdzOjpfX0JpbmRnZW5CaXRmaWVsZFVuaXQmbHQ7W3U4OyAxXSZndDsmZ3Q7KGJpdHMpIH0KJiM0MzsgICAgfQomIzQzO30KJiM0MzsKJiM0MzsvLy8gQSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LgomIzQzOyNbcmVwcih0cmFuc3BhcmVudCldCiYjNDM7cHViIHN0cnVjdCBGYW1pbHkgewomIzQzOyAgICBpbm5lcjogT3BhcXVlJmx0O2JpbmRpbmdzOjpnZW5sX2ZhbWlseSZndDssCiYjNDM7fQomIzQzOwomIzQzOy8vIFNBRkVUWTogVGhlIGBGYW1pbHlgIHR5cGUgaXMgdGhyZWFkIHNhZmUuCiYjNDM7dW5zYWZlIGltcGwgU3luYyBmb3IgRmFtaWx5IHt9CiYjNDM7CiYjNDM7aW1wbCBGYW1pbHkgewomIzQzOyAgICAvLy8gQ3JlYXRlcyBhIG5ldyBgRmFtaWx5YCBpbnN0YW5jZS4KJiM0MzsgICAgLy8vCiYjNDM7ICAgIC8vLyBJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20gY29uc3QgY29udGV4dCBvbmx5LiBXaWxsIHBhbmljIGlmIHByb3ZpZGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHMuCiYjNDM7ICAgIC8vLwomIzQzOyAgICAvLy8gVGhlIG5hbWUgbXVzdCBiZSBhIG51bC10ZXJtaW5hdGVkIHN0cmluZywgYnV0IGl0IGlzIHRha2VuIGFzIGAmYW1wO1t1OF1gIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQKJiM0MzsgICAgLy8vIG1vcmUgY29udmVuaWVudGx5IHdpdGggdGhlIHN0cmluZ3MgZ2VuZXJhdGVkIGJ5IGJpbmRnZW4uCiYjNDM7ICAgIHB1YiBjb25zdCBmbiBjb25zdF9uZXcoCiYjNDM7ICAgICAgICBtb2R1bGU6ICZhbXA7VGhpc01vZHVsZSwKJiM0MzsgICAgICAgIG5hbWU6ICZhbXA7W3U4XSwKJiM0MzsgICAgICAgIHZlcnNpb246IHUzMiwKJiM0MzsgICAgICAgIG1jZ3JwczogJmFtcDsmIzM5O3N0YXRpYyBbTXVsdGljYXN0R3JvdXBdLAomIzQzOyAgICApIC0mZ3Q7IEZhbWlseSB7CiYjNDM7ICAgICAgICBsZXQgbl9tY2dycHMgPSBtY2dycHMubGVuKCkgYXMgdTg7CiYjNDM7ICAgICAgICBpZiBuX21jZ3JwcyBhcyB1c2l6ZSAhPSBtY2dycHMubGVuKCkgewomIzQzOyAgICAgICAgICAgIHBhbmljISgmIzM0O3RvbyBtYW55IG1jZ3JwcyYjMzQ7KTsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIGxldCBtdXQgZ2VubF9mYW1pbHkgPSBiaW5kaW5nczo6Z2VubF9mYW1pbHkgewomIzQzOyAgICAgICAgICAgIHZlcnNpb24sCiYjNDM7ICAgICAgICAgICAgX2JpdGZpZWxkXzE6IEZhbWlseUZsYWdzIHsKJiM0MzsgICAgICAgICAgICAgICAgbmV0bnNvazogdHJ1ZSwKJiM0MzsgICAgICAgICAgICAgICAgcGFyYWxsZWxfb3BzOiB0cnVlLAomIzQzOyAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICAuaW50b19iaXRmaWVsZCgpLAomIzQzOyAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlLmFzX3B0cigpLAomIzQzOyAgICAgICAgICAgIG1jZ3JwczogbWNncnBzLmFzX3B0cigpLmNhc3QoKSwKJiM0MzsgICAgICAgICAgICBuX21jZ3JwcywKJiM0MzsgICAgICAgICAgICAuLnBpbl9pbml0Ojp6ZXJvZWQoKQomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgICAgIGlmIENTdHI6OmZyb21fYnl0ZXNfd2l0aF9udWwobmFtZSkuaXNfZXJyKCkgewomIzQzOyAgICAgICAgICAgIHBhbmljISgmIzM0O2dlbmxfZmFtaWx5IG5hbWUgbm90IG51bC10ZXJtaW5hdGVkJiMzNDspOwomIzQzOyAgICAgICAgfQomIzQzOyAgICAgICAgaWYgZ2VubF9mYW1pbHkubmFtZS5sZW4oKSAmbHQ7IG5hbWUubGVuKCkgewomIzQzOyAgICAgICAgICAgIHBhbmljISgmIzM0O2dlbmxfZmFtaWx5IG5hbWUgdG9vIGxvbmcmIzM0Oyk7CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgICAgICBsZXQgbXV0IGkgPSAwOwomIzQzOyAgICAgICAgd2hpbGUgaSAmbHQ7IG5hbWUubGVuKCkgewomIzQzOyAgICAgICAgICAgIGdlbmxfZmFtaWx5Lm5hbWVbaV0gPSBuYW1lW2ldOwomIzQzOyAgICAgICAgICAgIGkgJiM0Mzs9IDE7CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgICAgICBGYW1pbHkgewomIzQzOyAgICAgICAgICAgIGlubmVyOiBPcGFxdWU6Om5ldyhnZW5sX2ZhbWlseSksCiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIENoZWNrcyBpZiB0aGVyZSBhcmUgYW55IGxpc3RlbmVycyBmb3IgdGhlIGdpdmVuIG11bHRpY2FzdCBncm91cC4KJiM0MzsgICAgcHViIGZuIGhhc19saXN0ZW5lcnMoJmFtcDtzZWxmLCBncm91cDogdTMyKSAtJmd0OyBib29sIHsKJiM0MzsgICAgICAgIC8vIFNBRkVUWTogVGhlIGZhbWlseSBhbmQgaW5pdF9uZXQgcG9pbnRlcnMgYXJlIHZhbGlkLgomIzQzOyAgICAgICAgdW5zYWZlIHsKJiM0MzsgICAgICAgICAgICBiaW5kaW5nczo6Z2VubF9oYXNfbGlzdGVuZXJzKHNlbGYuYXNfcmF3KCksICZhbXA7cmF3IG11dCBiaW5kaW5nczo6aW5pdF9uZXQsIGdyb3VwKSAhPSAwCiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0KJiM0MzsKJiM0MzsgICAgLy8vIFJldHVybnMgYSByYXcgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBgZ2VubF9mYW1pbHlgIHN0cnVjdHVyZS4KJiM0MzsgICAgcHViIGZuIGFzX3JhdygmYW1wO3NlbGYpIC0mZ3Q7ICptdXQgYmluZGluZ3M6OmdlbmxfZmFtaWx5IHsKJiM0MzsgICAgICAgIHNlbGYuaW5uZXIuZ2V0KCkKJiM0MzsgICAgfQomIzQzO30KJiM0MzsKJiM0MzsvLy8gQSBnZW5lcmljIG5ldGxpbmsgbXVsdGljYXN0IGdyb3VwLgomIzQzOyNbcmVwcih0cmFuc3BhcmVudCldCiYjNDM7cHViIHN0cnVjdCBNdWx0aWNhc3RHcm91cCB7CiYjNDM7ICAgIC8vIE5vIE9wYXF1ZSBiZWNhdXNlIGZ1bGx5IGltbXV0YWJsZQomIzQzOyAgICBncm91cDogYmluZGluZ3M6OmdlbmxfbXVsdGljYXN0X2dyb3VwLAomIzQzO30KJiM0MzsKJiM0MzsvLyBTQUZFVFk6IFB1cmUgZGF0YSBzbyB0aHJlYWQgc2FmZS4KJiM0Mzt1bnNhZmUgaW1wbCBTeW5jIGZvciBNdWx0aWNhc3RHcm91cCB7fQomIzQzOwomIzQzO2ltcGwgTXVsdGljYXN0R3JvdXAgewomIzQzOyAgICAvLy8gQ3JlYXRlcyBhIG5ldyBgTXVsdGljYXN0R3JvdXBgIGluc3RhbmNlLgomIzQzOyAgICAvLy8KJiM0MzsgICAgLy8vIEludGVuZGVkIHRvIGJlIHVzZWQgZnJvbSBjb25zdCBjb250ZXh0IG9ubHkuIFdpbGwgcGFuaWMgaWYgcHJvdmlkZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50cy4KJiM0MzsgICAgcHViIGNvbnN0IGZuIGNvbnN0X25ldyhuYW1lOiAmYW1wO0NTdHIpIC0mZ3Q7IE11bHRpY2FzdEdyb3VwIHsKJiM0MzsgICAgICAgIGxldCBtdXQgZ3JvdXA6IGJpbmRpbmdzOjpnZW5sX211bHRpY2FzdF9ncm91cCA9IHBpbl9pbml0Ojp6ZXJvZWQoKTsKJiM0MzsKJiM0MzsgICAgICAgIGxldCBuYW1lID0gbmFtZS50b19ieXRlc193aXRoX251bCgpOwomIzQzOyAgICAgICAgaWYgZ3JvdXAubmFtZS5sZW4oKSAmbHQ7IG5hbWUubGVuKCkgewomIzQzOyAgICAgICAgICAgIHBhbmljISgmIzM0O2dlbmxfbXVsdGljYXN0X2dyb3VwIG5hbWUgdG9vIGxvbmcmIzM0Oyk7CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgICAgICBsZXQgbXV0IGkgPSAwOwomIzQzOyAgICAgICAgd2hpbGUgaSAmbHQ7IG5hbWUubGVuKCkgewomIzQzOyAgICAgICAgICAgIGdyb3VwLm5hbWVbaV0gPSBuYW1lW2ldOwomIzQzOyAgICAgICAgICAgIGkgJiM0Mzs9IDE7CiYjNDM7ICAgICAgICB9CiYjNDM7CiYjNDM7ICAgICAgICBNdWx0aWNhc3RHcm91cCB7IGdyb3VwIH0KJiM0MzsgICAgfQomIzQzO30KJiM0MzsKJiM0MzsvLy8gQSByZWdpc3RyYXRpb24gb2YgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LgomIzQzOy8vLwomIzQzOy8vLyBUaGlzIHR5cGUgcmVwcmVzZW50cyB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgW2BGYW1pbHlgXS4gV2hlbiBhbiBpbnN0YW5jZSBvZiB0aGlzIHR5cGUgaXMKJiM0MzsvLy8gZHJvcHBlZCwgaXRzIHJlc3BlY3RpdmUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSB3aWxsIGJlIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBzeXN0ZW0uCiYjNDM7Ly8vCiYjNDM7Ly8vICMgSW52YXJpYW50cwomIzQzOy8vLwomIzQzOy8vLyBgc2VsZi5mYW1pbHlgIGFsd2F5cyBob2xkcyBhIHZhbGlkIHJlZmVyZW5jZSB0byBhbiBpbml0aWFsaXplZCBhbmQgcmVnaXN0ZXJlZCBbYEZhbWlseWBdLgomIzQzO3B1YiBzdHJ1Y3QgUmVnaXN0cmF0aW9uIHsKJiM0MzsgICAgZmFtaWx5OiAmYW1wOyYjMzk7c3RhdGljIEZhbWlseSwKJiM0Mzt9CiYjNDM7CiYjNDM7aW1wbCBGYW1pbHkgewomIzQzOyAgICAvLy8gUmVnaXN0ZXJzIHRoZSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IHdpdGggdGhlIGtlcm5lbC4KJiM0MzsgICAgcHViIGZuIHJlZ2lzdGVyKCZhbXA7JiMzOTtzdGF0aWMgc2VsZikgLSZndDsgUmVzdWx0Jmx0O1JlZ2lzdHJhdGlvbiZndDsgewomIzQzOyAgICAgICAgLy8gU0FGRVRZOiBgc2VsZi5hc19yYXcoKWAgaXMgYSB2YWxpZCBwb2ludGVyIHRvIGEgYGdlbmxfZmFtaWx5YCBzdHJ1Y3QuCiYjNDM7ICAgICAgICAvLyBUaGUgYGdlbmxfZmFtaWx5YCBzdHJ1Y3QgaXMgc3RhdGljLCBzbyBpdCB3aWxsIG91dGxpdmUgdGhlIHJlZ2lzdHJhdGlvbi4KJiM0MzsgICAgICAgIHRvX3Jlc3VsdCh1bnNhZmUgeyBiaW5kaW5nczo6Z2VubF9yZWdpc3Rlcl9mYW1pbHkoc2VsZi5hc19yYXcoKSkgfSk/OwomIzQzOyAgICAgICAgT2soUmVnaXN0cmF0aW9uIHsgZmFtaWx5OiBzZWxmIH0pCiYjNDM7ICAgIH0KJiM0Mzt9CiYjNDM7CiYjNDM7aW1wbCBEcm9wIGZvciBSZWdpc3RyYXRpb24gewomIzQzOyAgICBmbiBkcm9wKCZhbXA7bXV0IHNlbGYpIHsKJiM0MzsgICAgICAgIC8vIFNBRkVUWTogYHNlbGYuZmFtaWx5LmFzX3JhdygpYCBpcyBhIHZhbGlkIHBvaW50ZXIgdG8gYSByZWdpc3RlcmVkIGBnZW5sX2ZhbWlseWAgc3RydWN0LgomIzQzOyAgICAgICAgLy8gVGhlIGBSZWdpc3RyYXRpb25gIHN0cnVjdCBlbnN1cmVzIHRoYXQgYGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHlgIGlzIGNhbGxlZCBleGFjdGx5IG9uY2UKJiM0MzsgICAgICAgIC8vIGZvciB0aGlzIGZhbWlseSB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLgomIzQzOyAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6OmdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoc2VsZi5mYW1pbHkuYXNfcmF3KCkpIH07CiYjNDM7ICAgIH0KJiM0Mzt9CiYjNDM7CiYjNDM7I1ttYWNyb3M6Omt1bml0X3Rlc3RzKHJ1c3RfbmV0bGluayldCiYjNDM7bW9kIHRlc3RzIHsKJiM0MzsgICAgdXNlIHN1cGVyOjoqOwomIzQzOwomIzQzOyAgICAjW3Rlc3RdCiYjNDM7ICAgIGZuIHRlc3RfZmFtaWx5X2ZsYWdzX2JpdGZpZWxkKCkgewomIzQzOyAgICAgICAgZm9yIG5ldG5zb2sgaW4gW2ZhbHNlLCB0cnVlXSB7CiYjNDM7ICAgICAgICAgICAgZm9yIHBhcmFsbGVsX29wcyBpbiBbZmFsc2UsIHRydWVdIHsKJiM0MzsgICAgICAgICAgICAgICAgbGV0IG11dCBiX2ZhbSA9IGJpbmRpbmdzOjpnZW5sX2ZhbWlseSB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAuLkRlZmF1bHQ6OmRlZmF1bHQoKQomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgICAgICBiX2ZhbS5zZXRfbmV0bnNvayhpZiBuZXRuc29rIHsgMSB9IGVsc2UgeyAwIH0pOwomIzQzOyAgICAgICAgICAgICAgICBiX2ZhbS5zZXRfcGFyYWxsZWxfb3BzKGlmIHBhcmFsbGVsX29wcyB7IDEgfSBlbHNlIHsgMCB9KTsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgbGV0IGNfYml0ZmllbGQgPSBGYW1pbHlGbGFncyB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICBuZXRuc29rLAomIzQzOyAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWxfb3BzLAomIzQzOyAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgICAgIC5pbnRvX2JpdGZpZWxkKCk7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgIC8vIFNBRkVUWTogVGhlIGJpdCBmaWVsZCBpcyBzdG9yZWQgYXMgdTguCiYjNDM7ICAgICAgICAgICAgICAgIGxldCBiX3ZhbDogdTggPSB1bnNhZmUgeyBjb3JlOjptZW06OnRyYW5zbXV0ZShiX2ZhbS5fYml0ZmllbGRfMSkgfTsKJiM0MzsgICAgICAgICAgICAgICAgLy8gU0FGRVRZOiBUaGUgYml0IGZpZWxkIGlzIHN0b3JlZCBhcyB1OC4KJiM0MzsgICAgICAgICAgICAgICAgbGV0IGNfdmFsOiB1OCA9IHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlKGNfYml0ZmllbGQpIH07CiYjNDM7ICAgICAgICAgICAgICAgIGFzc2VydF9lcSEoYl92YWwsIGNfdmFsKTsKJiM0MzsgICAgICAgICAgICB9CiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0KJiM0Mzt9CmRpZmYgLS1naXQgYS9ydXN0L3VhcGkvdWFwaV9oZWxwZXIuaCBiL3J1c3QvdWFwaS91YXBpX2hlbHBlci5oCmluZGV4IDA2ZDdkMWEyZThkYWJhLi44NmM3YjZiMjg0YjA1YSAxMDA2NDQKLS0tIGEvcnVzdC91YXBpL3VhcGlfaGVscGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvcnVzdC91YXBpL3VhcGlfaGVscGVyLmgKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7dWFwaS9kcm0vbm92YV9kcm0uaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2RybS9wYW50aG9yX2RybS5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvYW5kcm9pZC9iaW5kZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9hbmRyb2lkL2JpbmRlcl9uZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9taWkuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L2V0aHRvb2wuaCZndDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCaW5kZXIgTmV0bGluayBSZXBvcnRpbmcgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGludHJvZHVjZXMgbmV0bGluayByZXBvcnRpbmcgZm9yIEFuZHJvaWQgQmluZGVyLCBzcGVjaWZpY2FsbHkgdXNpbmcgUnVzdC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgbG9va3Mgc29saWQ7IGl0IHNlZW1zIHRvIGJlIGEgZnVuY3Rpb25hbCBhZGRpdGlvbiwgYWRkaW5nIG11bHRpY2FzdCByZXBvcnRpbmcgZm9yIHRyYW5zYWN0aW9uIGZhaWx1cmVzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgdGllZCB0byB0aGUgUnVzdCBiaW5kZXIgaW1wbGVtZW50YXRpb24sIHNvIHRoYXQmIzM5O3MgdGhlIGFuZ2xlLgoKVGhlIG9idmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYEFORFJPSURfQklOREVSX0lQQ19SVVNUYCwgd2hpY2ggaGluZ2VzIG9uIGBSVVNUICZhbXA7JmFtcDsgTU1VICZhbXA7JmFtcDsgTkVUICZhbXA7JmFtcDsgIUFORFJPSURfQklOREVSX0lQQ2AuIFNvLCB0byBnZXQgdGhpcyB3b3JraW5nLCB0aGF0JiMzOTtzIHdoYXQgd2UgbmVlZCBlbmFibGVkLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEZyb20gdGhlIHBhdGNoLCBJIHNlZSBzZXZlcmFsIGtleSBhZGRpdGlvbnMuIFRoZXJlJiMzOTtzIGBSZXBvcnQ6Om5ld2AsIGBSZXBvcnQ6Om11bHRpY2FzdGAsIGBSZXBvcnQ6OmVycm9yYCwgZXRjLiwgb3ZlciBpbiBgZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzYC4gSW4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnNgLCB3ZSYjMzk7dmUgZ290IGBUcmFuc2FjdGlvbkluZm86OnJlcG9ydF9uZXRsaW5rYCBhbmQgYFRyYW5zYWN0aW9uSW5mbzo6cmVwb3J0X25ldGxpbmtfaW5uZXJgLiBBbmQsIGZpbmFsbHksIGluIGBydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yc2AsIHdlIGhhdmUgYE5ldGxpbmtTa0J1ZmY6Om5ld2AsIGBOZXRsaW5rU2tCdWZmOjpnZW5sbXNnX3B1dGAsIGFuZCBgR2VubE1zZzo6cHV0X3UzMmAsIGFtb25nIG90aGVycy4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBzeW1ib2wgbmFtZXMgZm9yIHN5emthbGxlci4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gSSBuZWVkIHRvIHVzZSBgY29kZXNlYXJjaC1kaXItaW5kZXhgIG9yIGBncmVwcGVyYCB0byBmaW5kIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lcyBpbiB0aGUgY29tcGlsZWQgUnVzdCBjb2RlLiBJJiMzOTttIHdvbmRlcmluZyBpZiBzeXprYWxsZXIgdXNlcyB0aGUgbWFuZ2xlZCBvciBkZW1hbmdsZWQgbmFtZXMuIFVzdWFsbHksIHRoZSBkZW1hbmdsZWQgbmFtZXMgb3IgdGhlIEMgZnVuY3Rpb25zIHdvdWxkIHdvcmsuIEhvd2V2ZXIsIGJlY2F1c2UgdGhpcyBpcyBSdXN0LCB0aGUgc3ltYm9scyBtaWdodCBiZSBtYW5nbGVkLiBJdCBsb29rcyBsaWtlIHN5emthbGxlciBjYW4gbWF0Y2ggZGVtYW5nbGVkIG5hbWVzIG9yIHdlIGNhbiBwcm92aWRlIHRoZSBzb3VyY2UgZmlsZSBuYW1lcyBvciBSdXN0IGZ1bmN0aW9uIG5hbWVzIGxpa2UgYHJlcG9ydF9uZXRsaW5rX2lubmVyYCwgYHJlcG9ydF9uZXRsaW5rYCwgYG11bHRpY2FzdGAsIGBnZW5sbXNnX3B1dGAuCgpMZXQmIzM5O3MgY2hlY2sgdGhlIGV4YWN0IHN5bWJvbCBuYW1lcyBpbiBSdXN0LiBBY3R1YWxseSwgYEZvY3VzU3ltYm9sc2AgY2FuIGJlIGp1c3QgdGhlIGZ1bmN0aW9uIG5hbWVzIGxpa2UgYHJlcG9ydF9uZXRsaW5rX2lubmVyYCwgYHJlcG9ydF9uZXRsaW5rYCwgYHRyYW5zYWN0aW9uYCwgYHJlcGx5X2lubmVyYC4KV2FpdCwgYHRyYW5zYWN0aW9uYCBhbmQgYHJlcGx5X2lubmVyYCBhcmUgaW4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzYC4KSGVyZSYjMzk7cyB3aGF0IEkgY2FuIHNlZToKYGBgcnVzdAogICAgZm4gdHJhbnNhY3Rpb24oc2VsZjogJmFtcDtBcmMmbHQ7U2VsZiZndDssIGNtZDogdTMyLCByZWFkZXI6ICZhbXA7bXV0IFVzZXJTbGljZVJlYWRlcikgLSZndDsgUmVzdQouLi4KICAgIGZuIHJlcGx5X2lubmVyKHNlbGY6ICZhbXA7QXJjJmx0O1NlbGYmZ3Q7LCBpbmZvOiAmYW1wO211dCBUcmFuc2FjdGlvbkluZm8pIC0mZ3Q7IEJpbmRlclJlc3VsdCB7CmBgYApMb29rcyBsaWtlIHRoZXNlIGFyZSBtZXRob2RzIG9mIGBUaHJlYWRgIG9yIHNpbWlsYXIuIExldCYjMzk7cyBjaGVjayBgZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5yc2A6CmBgYHJ1c3QKICAgIHB1YihjcmF0ZSkgZm4gcmVwb3J0X25ldGxpbmsoJmFtcDtzZWxmLCByZXBseTogdTMyLCBjdHg6ICZhbXA7Y3JhdGU6OkNvbnRleHQpIHsKLi4uCiAgICBmbiByZXBvcnRfbmV0bGlua19pbm5lcigmYW1wO3NlbGYsIHJlcGx5OiB1MzIsIGN0eDogJmFtcDtjcmF0ZTo6Q29udGV4dCkgLSZndDsga2VybmVsOjplcnJvcjo6UmVzdWx0IHsKYGBgClRoZW4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5yc2A6CmBgYHJ1c3QKICAgIHB1YiBmbiBuZXcoCi4uLgogICAgcHViIGZuIG11bHRpY2FzdChzZWxmLCBwb3J0aWQ6IHUzMiwgZmxhZ3M6IGtlcm5lbDo6YWxsb2M6OkZsYWdzKSAtJmd0OyBSZXN1bHQgewpgYGAKQW5kIGZpbmFsbHkgYHJ1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzYDoKYGBgcnVzdAogICAgcHViIGZuIG5ldyhzaXplOiB1c2l6ZSwgZmxhZ3M6IGFsbG9jOjpGbGFncykgLSZndDsgUmVzdWx0Jmx0O05ldGxpbmtTa0J1ZmYsIEFsbG9jRXJyb3ImZ3Q7IHsKLi4uCiAgICBwdWIgZm4gZ2VubG1zZ19wdXQoCi4uLgogICAgcHViIGZuIHB1dF91MzIoJmFtcDttdXQgc2VsZiwgYXR0cnR5cGU6IGNfaW50LCB2YWx1ZTogdTMyKSAtJmd0OyBSZXN1bHQgewouLi4KICAgIHB1YiBmbiBtdWx0aWNhc3QoCmBgYApJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmUgdGhlIHJpZ2h0IHN5bWJvbCBuYW1lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbiByZXBvcnRfbmV0bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5ycz01Mz0gICAgcHViKGNyYXRlKSBmbiBpc19vbmV3YXkoXHUwMDI2c2VsZikgLVx1MDAzZSBib29sIHtcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzLTU2LVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5yczo1NzogICAgcHViKGNyYXRlKSBmbiByZXBvcnRfbmV0bGluayhcdTAwMjZzZWxmLCByZXBseTogdTMyLCBjdHg6IFx1MDAyNmNyYXRlOjpDb250ZXh0KSB7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzLTU4LSAgICAgICAgaWYgbGV0IEVycihlcnIpID0gc2VsZi5yZXBvcnRfbmV0bGlua19pbm5lcihyZXBseSwgY3R4KSB7XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5ycy02Ni1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnM6Njc6ICAgIGZuIHJlcG9ydF9uZXRsaW5rX2lubmVyKFx1MDAyNnNlbGYsIHJlcGx5OiB1MzIsIGN0eDogXHUwMDI2Y3JhdGU6OkNvbnRleHQpIC1cdTAwM2Uga2VybmVsOjplcnJvcjo6UmVzdWx0IHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnMtNjgtICAgICAgICBpZiAhUmVwb3J0OjpoYXNfbGlzdGVuZXJzKCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTA0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIE5ldGxpbmstcmVsYXRlZCBmdW5jdGlvbnM6IGByZXBvcnRfbmV0bGlua2AsIGByZXBvcnRfbmV0bGlua19pbm5lcmAsIGB0cmFuc2FjdGlvbmAsIGFuZCBgcmVwbHlfaW5uZXJgLiBTZWVtcyBsaWtlIGEgZmFpcmx5IHN0YW5kYXJkIE5ldGxpbmsgc2V0dXAsIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBtZXNzYWdlIGhhbmRsaW5nIGFuZCBwZXJoYXBzIHNvbWUga2luZCBvZiB0cmFuc2FjdGlvbmFsIGFwcHJvYWNoLiBMZXQgbWUgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgR2VuZXJpYyBOZXRsaW5rIG1lc3NhZ2luZy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGhvdyB0aGV5IHB1dCB0b2dldGhlciB0aGUgbWVzc2FnZXMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayB1cCB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBgZ2VubG1zZ19wdXRgIGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhhbmRsaW5nIG11bHRpY2FzdCBjb21tdW5pY2F0aW9uIHdpdGhpbiB0aGUgTmV0bGluayBmcmFtZXdvcmsuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnNgIGZpbGU7IHRoaXMgd2lsbCBsaWtlbHkgY29udGFpbiB0aGUgbG93ZXItbGV2ZWwgTmV0bGluayBiaW5kaW5ncyBhbmQgdXRpbGl0eSBmdW5jdGlvbnMuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGhvdyB0aGUgZnVuY3Rpb25zIHRpZSBpbnRvIE5ldGxpbmsmIzM5O3MgbWVzc2FnZSBmcmFtaW5nIGFuZCBkZWxpdmVyeSBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZuIGdlbmxtc2dfcHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7cnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7cnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnM9NDI9ICAgIHB1YiBmbiBuZXcoc2l6ZTogdXNpemUsIGZsYWdzOiBhbGxvYzo6RmxhZ3MpIC1cdTAwM2UgUmVzdWx0XHUwMDNjTmV0bGlua1NrQnVmZiwgQWxsb2NFcnJvclx1MDAzZSB7XG4tLVxucnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMtNDktICAgIC8vLyBQdXRzIGEgZ2VuZXJpYyBuZXRsaW5rIGhlYWRlciBpbnRvIHRoZSBgTmV0bGlua1NrQnVmZmAuXG5ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yczo1MDogICAgcHViIGZuIGdlbmxtc2dfcHV0KFxucnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMtNTEtICAgICAgICBzZWxmLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTQwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTmV0bGluayBNdWx0aWNhc3QgaW4gdGhlIFJ1c3QgS2VybmVsKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgbXVsdGljYXN0IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBSdXN0IGtlcm5lbCYjMzk7cyBOZXRsaW5rIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnNgIGZpbGUuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIHRoZSBjb3JlIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IGFuZCByZWxhdGVkIGRhdGEgc3RydWN0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGlzIGZpbGUsIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBhbnkgbWVudGlvbnMgb3IgaW1wbGVtZW50YXRpb25zIHJlbGF0ZWQgdG8gJiMzNDttdWx0aWNhc3QuJiMzNDsgSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgaG93IG11bHRpY2FzdCBncm91cCBtYW5hZ2VtZW50LCBtZXNzYWdlIHJvdXRpbmcsIGFuZCBzb2NrZXQgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3ZWxsLWRlZmluZWQgcGF0dGVybnMgYW5kIGlkaW9tYXRpYyBSdXN0IGNvZGUgdXNhZ2UsIGhvcGluZyBmb3IgY2xhcml0eSBhbmQgZWZmaWNpZW5jeS4gSSYjMzk7bSByZWFkeSB0byBwYXJzZSB0aGUgY29kZSBhbmQgcmVidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm4gbXVsdGljYXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7cnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7cnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnM9MTExPSAgICBwdWIgZm4gcHV0X2ZsYWcoXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCkgLVx1MDAzZSBSZXN1bHQge1xuLS1cbnJ1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzLTExOS0gICAgI1tpbmxpbmVdXG5ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yczoxMjA6ICAgIHB1YiBmbiBtdWx0aWNhc3QoXG5ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5ycy0xMjEtICAgICAgICBzZWxmLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjg4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIE15IE5ldGxpbmsgUmVwb3J0aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gcHV0dGluZyB0b2dldGhlciB0aGUgYEZvY3VzU3ltYm9sc2Agc3RydWN0dXJlIGFuZCBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYWxsIHRoZSBlc3NlbnRpYWwgbmV0bGluayByZXBvcnRpbmcgZnVuY3Rpb25zLiBJJiMzOTt2ZSBkZWNpZGVkIG9uIGluY2x1ZGluZyBgcmVwb3J0X25ldGxpbmtgLCBgcmVwb3J0X25ldGxpbmtfaW5uZXJgLCBgZ2VubG1zZ19wdXRgLCBhbmQgYG11bHRpY2FzdGAuIFdhaXQgYSBtaW51dGUsICptdWx0aWNhc3QqIGlzIGEgcHJldHR5IGdlbmVyaWMgdGVybTsgaXQgY291bGQgbGVhZCB0byBhbWJpZ3VpdHkuIFRoaW5raW5nIHN0cmF0ZWdpY2FsbHksIGl0IG1ha2VzIG1vcmUgc2Vuc2UgdG8gc3RpY2sgd2l0aCB0aGUgbW9yZSBkZXNjcmlwdGl2ZSBhbmQgcHJvamVjdC1zcGVjaWZpYyBuYW1lcy4gSeKAmWxsIGdvIHdpdGggdGhlIG1vcmUgZXhwbGljaXQgYHJlcG9ydF9uZXRsaW5rX2lubmVyYCBhbmQgYHJlcG9ydF9uZXRsaW5rYCBhZnRlciBhbGwuIFRoYXQgZmVlbHMgY2xlYW5lciBhbmQgbGVzcyBwcm9uZSB0byBjb25mdXNpb24gZG93biB0aGUgbGluZS4KCkNvbnNlcXVlbnRseSwgSSBuZWVkIHRvIG1ha2Ugc29tZSBhZGp1c3RtZW50cy4gSSYjMzk7bGwgbmVlZCB0byBtb2RpZnkgdGhlIGB0cmFuc2FjdGlvbmAgYW5kIGByZXBseV9pbm5lcmAgZnVuY3Rpb25zIHRvIGNhbGwgdGhlIGByZXBvcnRfbmV0bGlua2AgZnVuY3Rpb24uIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGVpciBpbXBsZW1lbnRhdGlvbnMuIFRvIGRvIHRoYXQsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBpbiBgZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnNgIGFzIHRoYXQmIzM5O3Mgd2hlcmUgdGhleSBzaG91bGQgYmUgZGVmaW5lZC4gTGV0JiMzOTtzIHNlZSBpZiB0aG9zZSBhZGp1c3RtZW50cyBhcmUgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbiB0cmFuc2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzPTEyMTQ9ICAgIGZuIHJlYWRfdHJhbnNhY3Rpb25faW5mbyhcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycy0xMjQ5LSAgICAjW2lubGluZShuZXZlcildXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yczoxMjUwOiAgICBmbiB0cmFuc2FjdGlvbihzZWxmOiBcdTAwMjZBcmNcdTAwM2NTZWxmXHUwMDNlLCBjbWQ6IHUzMiwgcmVhZGVyOiBcdTAwMjZtdXQgVXNlclNsaWNlUmVhZGVyKSAtXHUwMDNlIFJlc3VsdFx1MDAzYygpXHUwMDNlIHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzLTEyNTEtICAgICAgICBsZXQgbXV0IGluZm8gPSBUcmFuc2FjdGlvbkluZm86Onplcm9lZCgpO1xuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzLTEyOTgtXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yczoxMjk5OiAgICBmbiB0cmFuc2FjdGlvbl9pbm5lcihzZWxmOiBcdTAwMjZBcmNcdTAwM2NTZWxmXHUwMDNlLCBpbmZvOiBcdTAwMjZtdXQgVHJhbnNhY3Rpb25JbmZvKSAtXHUwMDNlIEJpbmRlclJlc3VsdCB7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycy0xMzAwLSAgICAgICAgbGV0IG5vZGVfcmVmID0gc2VsZi5wcm9jZXNzLmdldF90cmFuc2FjdGlvbl9ub2RlKGluZm8udGFyZ2V0X2hhbmRsZSk/O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkxMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBCaW5kZXIgTmV0bGluayBDb2RlKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV0bGluayBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgQW5kcm9pZCBiaW5kZXIgZHJpdmVyLiBNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gYW5kIG11bHRpY2FzdCBoYW5kbGluZy4gVGhlcmVmb3JlLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzYC4gSSYjMzk7bGwgYmUgaG9taW5nIGluIG9uIHRoZSBgbmV3YCBmdW5jdGlvbiwgYXMgdGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIG5ldGxpbmsgc29ja2V0IG9yIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjcmVhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhlbiwgSSYjMzk7bGwgbW92ZSBvbiB0byBgbXVsdGljYXN0YCwgc2luY2UgdGhhdCBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGdyb3VwIGNvbW11bmljYXRpb25zLiBUaGF0IHNob3VsZCBwcm92aWRlIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG5ldGxpbmsgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm4gbXVsdGljYXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5ycz0zND0gICAgcHViIGZuIG5ldyhcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL25ldGxpbmsucnMtNDYtICAgIC8vLyBCcm9hZGNhc3QgdGhpcyBtZXNzYWdlLlxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzOjQ3OiAgICBwdWIgZm4gbXVsdGljYXN0KHNlbGYsIHBvcnRpZDogdTMyLCBmbGFnczoga2VybmVsOjphbGxvYzo6RmxhZ3MpIC1cdTAwM2UgUmVzdWx0IHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5ycy00OC0gICAgICAgIHNlbGYuc2tiLm11bHRpY2FzdChcdTAwMjZCSU5ERVJfTkxfRkFNSUxZLCBwb3J0aWQsIDAsIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBCaW5kZXIgSVBDIGluIFJ1c3QqKgoKT2theSwgc28gSSYjMzk7bSB1cGRhdGluZyBteSBgRm9jdXNTeW1ib2xzYCBsaXN0IGZvciB0aGUgQmluZGVyIElQQyBSdXN0IGV4cGxvcmF0aW9uLiBJIG5lZWQgdG8gZ2V0IHRoZSBrZXkgZnVuY3Rpb25zIGlkZW50aWZpZWQgZm9yIHRoZSBmdXp6ZXIuIEkmIzM5O20gYWRkaW5nIGByZXBvcnRfbmV0bGlua19pbm5lcmAsIGByZXBvcnRfbmV0bGlua2AsIGB0cmFuc2FjdGlvbmAsIGFuZCBgcmVwbHlfaW5uZXJgLiBIbW0sIGhvbGQgb24uIGB0cmFuc2FjdGlvbmAgYW5kIGByZXBseV9pbm5lcmAgYXJlIGEgYml0IHRvbyBnZW5lcmljLiBXaGlsZSB0aGV5ICphcmUqIGp1c3QgYHRyYW5zYWN0aW9uYCBpbiB0aGUgUnVzdCBjb2RlLCBjb3VsZCBJIG1ha2UgdGhlbSBtb3JlIHNwZWNpZmljLCBsaWtlIGBiaW5kZXJfdHJhbnNhY3Rpb25gIG9yIHNvbWV0aGluZz8gIFVsdGltYXRlbHksIGBUcmFuc2FjdGlvbkluZm86OnJlcG9ydF9uZXRsaW5rX2lubmVyYCBtYXkgYmUgdGhlIHRpY2tldC4gU3l6a2FsbGVyIGxldmVyYWdlcyBzdWJzdHJpbmcgbWF0Y2hpbmcsIHNvIGByZXBvcnRfbmV0bGlua19pbm5lcmAgc2hvdWxkIGJlIGRpc3RpbmN0aXZlIGVub3VnaC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGByZXBvcnRfbmV0bGlua19pbm5lcmAgaXMsIGluIGZhY3QsIHVuaXF1ZS4gWWVwLCBnb29kIHRvIGdvLgoKTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucywgc3BlY2lmaWNhbGx5IHRvIGVuc3VyZSBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgIGlzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTkRST0lEX0JJTkRFUl9JUENfUlVTVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnPTQ9Y29uZmlnIEFORFJPSURfQklOREVSX0lQQ1xuLS1cbmRyaXZlcnMvYW5kcm9pZC9LY29uZmlnLTE2LVxuZHJpdmVycy9hbmRyb2lkL0tjb25maWc6MTc6Y29uZmlnIEFORFJPSURfQklOREVSX0lQQ19SVVNUXG5kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7UnVzdCB2ZXJzaW9uIG9mIEFuZHJvaWQgQmluZGVyIElQQyBEcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NDMKCQkJCQkJCW91dHB1dDogOTgKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSdXN0LUJhc2VkIEJpbmRlciBJUEMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgLiBUaGUgZGVwZW5kZW5jaWVzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgUlVTVCAmYW1wOyZhbXA7IE1NVSAmYW1wOyZhbXA7IE5FVCAmYW1wOyZhbXA7ICFBTkRST0lEX0JJTkRFUl9JUENgLiBTZWVtcyBsb2dpY2FsLiBFc3NlbnRpYWxseSwgd2UgbmVlZCBSdXN0IHN1cHBvcnQsIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQsIE5ldHdvcmsgZnVuY3Rpb25hbGl0eSwgYW5kIGltcG9ydGFudGx5LCB3ZSYjMzk7cmUgKm5vdCogdXNpbmcgdGhlIGxlZ2FjeSBBbmRyb2lkIEJpbmRlciBJUEMuIEdpdmVuIHRoYXQgdGhlIGBORVRgIGRlcGVuZGVuY3kgaXMgdXN1YWxseSBhbHJlYWR5IGhhbmRsZWQgaW4gbW9zdCBzZXR1cHMsIGFuZCBSdXN0IGlzLCBvZiBjb3Vyc2UsIGVzc2VudGlhbCwgYEFORFJPSURfQklOREVSX0lQQ19SVVNUYCByZWFsbHkgaXMgdGhlIGtleSBwaWVjZSBoZXJlLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWcgZm9yIHRoZSBSdXN0LWJhc2VkIGltcGxlbWVudGF0aW9uLiBIbW0sIGFuZCB5ZXMsIEkgc2VlIHRoYXQgdGhlIGBydXN0X2hlbHBlcl9nZW5sbXNnX25ld2AgZnVuY3Rpb24gaW4gYHJ1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmNgIG5lZWRzIGBDT05GSUdfTkVUYCwgYnV0IHRoYXQgcmVxdWlyZW1lbnQgaXMgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBgTkVUYCBkZXBlbmRlbmN5IG9mIGBBTkRST0lEX0JJTkRFUl9JUENfUlVTVGAsIHNvIGFsbCBnb29kIHRoZXJlLgoKQWxyaWdodCwgc28gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGlzIGdvaW5nIHRvIGJlIGEgc2ltcGxlIG9uZTogYFsmIzM0O0FORFJPSURfQklOREVSX0lQQ19SVVNUJiMzNDtdYC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgd2Ugc2hvdWxkIGJlIGZ1enppbmcuIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgaXQgYWRkcyBhIG5ldyBuZXRsaW5rIGZhbWlseSBzcGVjaWZpY2FsbHkgZm9yIEJpbmRlciwgYW5kIHJlcG9ydHMgdHJhbnNhY3Rpb24gZmFpbHVyZXMuIFRoYXQgZGVmaW5pdGVseSBpbmRpY2F0ZXMgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpbnRlcmFjdGlvbiB3aXRoIGJvdGggYmluZGVyIGFuZCBuZXRsaW5rIGlzIHJlcXVpcmVkIHRvIHJlYWNoIGl0LgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgcmVzdWx0cy4gVGltZSB0byBmaW5hbGl6ZSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QU5EUk9JRF9CSU5ERVJfSVBDX1JVU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXBvcnRfbmV0bGlua19pbm5lciYjMzQ7LAogICAgJiMzNDtyZXBvcnRfbmV0bGluayYjMzQ7LAogICAgJiMzNDtnZW5sbXNnX3B1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIG5ldGxpbmsgbXVsdGljYXN0IHJlcG9ydGluZyBmb3IgQW5kcm9pZCBCaW5kZXIgdHJhbnNhY3Rpb24gZmFpbHVyZXMgaW4gUnVzdC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGZvciBjb25zdHJ1Y3RpbmcgYW5kIGJyb2FkY2FzdGluZyBuZXRsaW5rIG1lc3NhZ2VzIHdoZW4gYmluZGVyIHRyYW5zYWN0aW9ucyBmYWlsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBTkRST0lEX0JJTkRFUl9JUENfUlVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlcG9ydF9uZXRsaW5rX2lubmVyJiMzNDssCiAgICAmIzM0O3JlcG9ydF9uZXRsaW5rJiMzNDssCiAgICAmIzM0O2dlbmxtc2dfcHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbmV0bGluayBtdWx0aWNhc3QgcmVwb3J0aW5nIGZvciBBbmRyb2lkIEJpbmRlciB0cmFuc2FjdGlvbiBmYWlsdXJlcyBpbiBSdXN0LiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgZm9yIGNvbnN0cnVjdGluZyBhbmQgYnJvYWRjYXN0aW5nIG5ldGxpbmsgbWVzc2FnZXMgd2hlbiBiaW5kZXIgdHJhbnNhY3Rpb25zIGZhaWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NTo1NC42MzQwMjc2MTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc5NTQzNTk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBTkRST0lEX0JJTkRFUl9JUENfUlVTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcG9ydF9uZXRsaW5rX2lubmVyXCIsXG4gICAgXCJyZXBvcnRfbmV0bGlua1wiLFxuICAgIFwiZ2VubG1zZ19wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIG5ldGxpbmsgbXVsdGljYXN0IHJlcG9ydGluZyBmb3IgQW5kcm9pZCBCaW5kZXIgdHJhbnNhY3Rpb24gZmFpbHVyZXMgaW4gUnVzdC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGZvciBjb25zdHJ1Y3RpbmcgYW5kIGJyb2FkY2FzdGluZyBuZXRsaW5rIG1lc3NhZ2VzIHdoZW4gYmluZGVyIHRyYW5zYWN0aW9ucyBmYWlsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NTo1NC42MzQwMzMzNzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDI4OTAwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NWUyODA0MDk2MmE1ZjFkNzE5OTU2ZjI3ODBiN2U3ZTYzNWQ1YzI2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMTc6NTU6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IGMzZjcyMDU4YTJmMjZlLi5iZTVhMTk2ZjEyYzZhZiAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE4ODc1LDYgKzE4ODc1LDggQEAgRjpcXHRpbmNsdWRlL3VhcGkvbGludXgvc2N0cC5oXFxuIEY6XFx0bGliL25ldF91dGlscy5jXFxuIEY6XFx0bGliL3JhbmRvbTMyLmNcXG4gRjpcXHRuZXQvXFxuK0Y6XFx0cnVzdC9oZWxwZXJzL25ldC9cXG4rRjpcXHRydXN0L2tlcm5lbC9uZXQvXFxuIEY6XFx0c2FtcGxlcy9wa3RnZW4vXFxuIEY6XFx0dG9vbHMvbmV0L1xcbiBGOlxcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWcgYi9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZ1xcbmluZGV4IGUyZTQwMmM5ZDE3NTljLi42MDZhOWQwN2Y3NzQ3MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnXFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIEFORFJPSURfQklOREVSX0lQQ1xcbiBcXG4gY29uZmlnIEFORFJPSURfQklOREVSX0lQQ19SVVNUXFxuIFxcdGJvb2wgXFxcIlJ1c3QgdmVyc2lvbiBvZiBBbmRyb2lkIEJpbmRlciBJUEMgRHJpdmVyXFxcIlxcbi1cXHRkZXBlbmRzIG9uIFJVU1QgXFx1MDAyNlxcdTAwMjYgTU1VIFxcdTAwMjZcXHUwMDI2ICFBTkRST0lEX0JJTkRFUl9JUENcXG4rXFx0ZGVwZW5kcyBvbiBSVVNUIFxcdTAwMjZcXHUwMDI2IE1NVSBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgIUFORFJPSURfQklOREVSX0lQQ1xcbiBcXHRoZWxwXFxuIFxcdCAgVGhpcyBlbmFibGVzIHRoZSBSdXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBCaW5kZXIgZHJpdmVyLlxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmViN2VhMmVkYWZmNzJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzXFxuQEAgLTAsMCArMSwxMTcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICgoR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSkgT1IgQlNELTMtQ2xhdXNlKVxcbisvKiBCYXNlZCBvbjogRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2JpbmRlci55YW1sICovXFxuK1xcbisjIVthbGxvdyh1bnJlYWNoYWJsZV9wdWIsIGNsaXBweTo6d3Jvbmdfc2VsZl9jb252ZW50aW9uKV1cXG4rdXNlIGtlcm5lbDo6e1xcbisgICAgbmV0OjpuZXRsaW5rOjp7XFxuKyAgICAgICAgRmFtaWx5LFxcbisgICAgICAgIEdlbmxNc2csXFxuKyAgICAgICAgTXVsdGljYXN0R3JvdXAsXFxuKyAgICAgICAgTmV0bGlua1NrQnVmZiwgLy9cXG4rICAgIH0sXFxuKyAgICBwcmVsdWRlOjoqLCAvL1xcbit9O1xcbitcXG4rcHViIHN0YXRpYyBCSU5ERVJfTkxfRkFNSUxZOiBGYW1pbHkgPSBGYW1pbHk6OmNvbnN0X25ldyhcXG4rICAgIFxcdTAwMjZjcmF0ZTo6VEhJU19NT0RVTEUsXFxuKyAgICBrZXJuZWw6OnVhcGk6OkJJTkRFUl9GQU1JTFlfTkFNRSxcXG4rICAgIGtlcm5lbDo6dWFwaTo6QklOREVSX0ZBTUlMWV9WRVJTSU9OLFxcbisgICAgXFx1MDAyNkJJTkRFUl9OTF9GQU1JTFlfTUNHUlBTLFxcbispO1xcbitcXG4rc3RhdGljIEJJTkRFUl9OTF9GQU1JTFlfTUNHUlBTOiBbTXVsdGljYXN0R3JvdXA7IDFdID0gW011bHRpY2FzdEdyb3VwOjpjb25zdF9uZXcoY1xcXCJyZXBvcnRcXFwiKV07XFxuK1xcbisvLy8gQSBtdWx0aWNhc3QgZXZlbnQgc2VudCB0byB1c2Vyc3BhY2Ugc3Vic2NyaWJlcnMgdG8gbm90aWZ5IHRoZW0gYWJvdXRcXG4rLy8vIGJpbmRlciB0cmFuc2FjdGlvbiBmYWlsdXJlcy4gVGhlIGdlbmVyYXRlZCByZXBvcnQgcHJvdmlkZXMgdGhlIGZ1bGxcXG4rLy8vIGRldGFpbHMgb2YgdGhlIHNwZWNpZmljIHRyYW5zYWN0aW9uIHRoYXQgZmFpbGVkLiBUaGUgaW50ZW50aW9uIGlzIGZvclxcbisvLy8gcHJvZ3JhbXMgdG8gbW9uaXRvciB0aGVzZSBldmVudHMgYW5kIHJlYWN0IHRvIHRoZSBmYWlsdXJlcyBhcyBuZWVkZWQuXFxuK3B1YiBzdHJ1Y3QgUmVwb3J0IHtcXG4rICAgIHNrYjogR2VubE1zZyxcXG4rfVxcbitcXG4raW1wbCBSZXBvcnQge1xcbisgICAgLy8vIENyZWF0ZSBhIG5ldyBtdWx0aWNhc3QgbWVzc2FnZS5cXG4rICAgIHB1YiBmbiBuZXcoXFxuKyAgICAgICAgc2l6ZTogdXNpemUsXFxuKyAgICAgICAgcG9ydGlkOiB1MzIsXFxuKyAgICAgICAgc2VxOiB1MzIsXFxuKyAgICAgICAgZmxhZ3M6IGtlcm5lbDo6YWxsb2M6OkZsYWdzLFxcbisgICAgKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjU2VsZiwga2VybmVsOjphbGxvYzo6QWxsb2NFcnJvclxcdTAwM2Uge1xcbisgICAgICAgIGNvbnN0IEJJTkRFUl9DTURfUkVQT1JUOiB1OCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0NNRF9SRVBPUlQgYXMgdTg7XFxuKyAgICAgICAgbGV0IHNrYiA9IE5ldGxpbmtTa0J1ZmY6Om5ldyhzaXplLCBmbGFncyk/O1xcbisgICAgICAgIGxldCBza2IgPSBza2IuZ2VubG1zZ19wdXQocG9ydGlkLCBzZXEsIFxcdTAwMjZCSU5ERVJfTkxfRkFNSUxZLCBCSU5ERVJfQ01EX1JFUE9SVCk/O1xcbisgICAgICAgIE9rKFNlbGYgeyBza2IgfSlcXG4rICAgIH1cXG4rXFxuKyAgICAvLy8gQnJvYWRjYXN0IHRoaXMgbWVzc2FnZS5cXG4rICAgIHB1YiBmbiBtdWx0aWNhc3Qoc2VsZiwgcG9ydGlkOiB1MzIsIGZsYWdzOiBrZXJuZWw6OmFsbG9jOjpGbGFncykgLVxcdTAwM2UgUmVzdWx0IHtcXG4rICAgICAgICBzZWxmLnNrYi5tdWx0aWNhc3QoXFx1MDAyNkJJTkRFUl9OTF9GQU1JTFksIHBvcnRpZCwgMCwgZmxhZ3MpXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIENoZWNrIGlmIHRoaXMgbWVzc2FnZSB0eXBlIGhhcyBsaXN0ZW5lcnMuXFxuKyAgICBwdWIgZm4gaGFzX2xpc3RlbmVycygpIC1cXHUwMDNlIGJvb2wge1xcbisgICAgICAgIEJJTkRFUl9OTF9GQU1JTFkuaGFzX2xpc3RlbmVycygwKVxcbisgICAgfVxcbitcXG4rICAgIC8vLyBUaGUgZW51bSBiaW5kZXJfZHJpdmVyX3JldHVybl9wcm90b2NvbCByZXR1cm5lZCB0byB0aGUgc2VuZGVyLlxcbisgICAgcHViIGZuIGVycm9yKFxcdTAwMjZtdXQgc2VsZiwgdmFsOiB1MzIpIC1cXHUwMDNlIFJlc3VsdCB7XFxuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0VSUk9SOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0VSUk9SIGFzIGNfaW50O1xcbisgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0VSUk9SLCB2YWwpXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIFRoZSBiaW5kZXIgY29udGV4dCB3aGVyZSB0aGUgdHJhbnNhY3Rpb24gb2NjdXJyZWQuXFxuKyAgICBwdWIgZm4gY29udGV4dChcXHUwMDI2bXV0IHNlbGYsIHZhbDogXFx1MDAyNkNTdHIpIC1cXHUwMDNlIFJlc3VsdCB7XFxuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0NPTlRFWFQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfQ09OVEVYVCBhcyBjX2ludDtcXG4rICAgICAgICBzZWxmLnNrYi5wdXRfc3RyaW5nKEJJTkRFUl9BX1JFUE9SVF9DT05URVhULCB2YWwpXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIFRoZSBQSUQgb2YgdGhlIHNlbmRlciBwcm9jZXNzLlxcbisgICAgcHViIGZuIGZyb21fcGlkKFxcdTAwMjZtdXQgc2VsZiwgdmFsOiB1MzIpIC1cXHUwMDNlIFJlc3VsdCB7XFxuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0ZST01fUElEOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0ZST01fUElEIGFzIGNfaW50O1xcbisgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0ZST01fUElELCB2YWwpXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIFRoZSBUSUQgb2YgdGhlIHNlbmRlciB0aHJlYWQuXFxuKyAgICBwdWIgZm4gZnJvbV90aWQoXFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVxcdTAwM2UgUmVzdWx0IHtcXG4rICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfRlJPTV9USUQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfRlJPTV9USUQgYXMgY19pbnQ7XFxuKyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfRlJPTV9USUQsIHZhbClcXG4rICAgIH1cXG4rXFxuKyAgICAvLy8gVGhlIFBJRCBvZiB0aGUgcmVjaXBpZW50IHByb2Nlc3MuIFRoaXMgYXR0cmlidXRlIG1heSBub3QgYmUgcHJlc2VudFxcbisgICAgLy8vIGlmIHRoZSB0YXJnZXQgY291bGQgbm90IGJlIGRldGVybWluZWQuXFxuKyAgICBwdWIgZm4gdG9fcGlkKFxcdTAwMjZtdXQgc2VsZiwgdmFsOiB1MzIpIC1cXHUwMDNlIFJlc3VsdCB7XFxuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX1RPX1BJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9UT19QSUQgYXMgY19pbnQ7XFxuKyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfVE9fUElELCB2YWwpXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIFRoZSBUSUQgb2YgdGhlIHJlY2lwaWVudCB0aHJlYWQuIFRoaXMgYXR0cmlidXRlIG1heSBub3QgYmUgcHJlc2VudFxcbisgICAgLy8vIGlmIHRoZSB0YXJnZXQgY291bGQgbm90IGJlIGRldGVybWluZWQuXFxuKyAgICBwdWIgZm4gdG9fdGlkKFxcdTAwMjZtdXQgc2VsZiwgdmFsOiB1MzIpIC1cXHUwMDNlIFJlc3VsdCB7XFxuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX1RPX1RJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9UT19USUQgYXMgY19pbnQ7XFxuKyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfVE9fVElELCB2YWwpXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIFdoZW4gcHJlc2VudCwgaW5kaWNhdGVzIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gaXMgYSByZXBseS5cXG4rICAgIHB1YiBmbiBpc19yZXBseShcXHUwMDI2bXV0IHNlbGYpIC1cXHUwMDNlIFJlc3VsdCB7XFxuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0lTX1JFUExZOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0lTX1JFUExZIGFzIGNfaW50O1xcbisgICAgICAgIHNlbGYuc2tiLnB1dF9mbGFnKEJJTkRFUl9BX1JFUE9SVF9JU19SRVBMWSlcXG4rICAgIH1cXG4rXFxuKyAgICAvLy8gVGhlIGJpdG1hc2sgb2YgZW51bSB0cmFuc2FjdGlvbl9mbGFncyBmcm9tIHRoZSB0cmFuc2FjdGlvbi5cXG4rICAgIHB1YiBmbiBmbGFncyhcXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXFx1MDAzZSBSZXN1bHQge1xcbisgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9GTEFHUzogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9GTEFHUyBhcyBjX2ludDtcXG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9GTEFHUywgdmFsKVxcbisgICAgfVxcbitcXG4rICAgIC8vLyBUaGUgYXBwbGljYXRpb24tZGVmaW5lZCBjb2RlIGZyb20gdGhlIHRyYW5zYWN0aW9uLlxcbisgICAgcHViIGZuIGNvZGUoXFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVxcdTAwM2UgUmVzdWx0IHtcXG4rICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfQ09ERTogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9DT0RFIGFzIGNfaW50O1xcbisgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0NPREUsIHZhbClcXG4rICAgIH1cXG4rXFxuKyAgICAvLy8gVGhlIHRyYW5zYWN0aW9uIHBheWxvYWQgc2l6ZSBpbiBieXRlcy5cXG4rICAgIHB1YiBmbiBkYXRhX3NpemUoXFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVxcdTAwM2UgUmVzdWx0IHtcXG4rICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfREFUQV9TSVpFOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0RBVEFfU0laRSBhcyBjX2ludDtcXG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9EQVRBX1NJWkUsIHZhbClcXG4rICAgIH1cXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnNcXG5pbmRleCA0MzIzOTBhYWIyNWJiOC4uZGY0N2FiYTA1MTMzODUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9ydXN0X2JpbmRlcl9tYWluLnJzXFxuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9ydXN0X2JpbmRlcl9tYWluLnJzXFxuQEAgLTMyLDYgKzMyLDcgQEBcXG4gbW9kIGRlZmVycmVkX2Nsb3NlO1xcbiBtb2QgZGVmcztcXG4gbW9kIGVycm9yO1xcbittb2QgbmV0bGluaztcXG4gbW9kIG5vZGU7XFxuIG1vZCBwYWdlX3JhbmdlO1xcbiBtb2QgcHJvY2VzcztcXG5AQCAtMjgyLDE5ICsyODMsMjIgQEAgZm4gcHRyX2FsaWduKHZhbHVlOiB1c2l6ZSkgLVxcdTAwM2UgT3B0aW9uXFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIC8vIFNBRkVUWTogV2UgY2FsbCByZWdpc3RlciBpbiBgaW5pdGAuXFxuIHN0YXRpYyBCSU5ERVJfU0hSSU5LRVI6IFNocmlua2VyID0gdW5zYWZlIHsgU2hyaW5rZXI6Om5ldygpIH07XFxuIFxcbi1zdHJ1Y3QgQmluZGVyTW9kdWxlIHt9XFxuK3N0cnVjdCBCaW5kZXJNb2R1bGUge1xcbisgICAgX25ldGxpbms6IGtlcm5lbDo6bmV0OjpuZXRsaW5rOjpSZWdpc3RyYXRpb24sXFxuK31cXG4gXFxuIGltcGwga2VybmVsOjpNb2R1bGUgZm9yIEJpbmRlck1vZHVsZSB7XFxuICAgICBmbiBpbml0KF9tb2R1bGU6IFxcdTAwMjYnc3RhdGljIGtlcm5lbDo6VGhpc01vZHVsZSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY1NlbGZcXHUwMDNlIHtcXG4gICAgICAgICAvLyBTQUZFVFk6IFRoZSBtb2R1bGUgaW5pdGlhbGl6ZXIgbmV2ZXIgcnVucyB0d2ljZSwgc28gd2Ugb25seSBjYWxsIHRoaXMgb25jZS5cXG4gICAgICAgICB1bnNhZmUgeyBjcmF0ZTo6Y29udGV4dDo6Q09OVEVYVFMuaW5pdCgpIH07XFxuIFxcbisgICAgICAgIGxldCBuZXRsaW5rID0gY3JhdGU6Om5ldGxpbms6OkJJTkRFUl9OTF9GQU1JTFkucmVnaXN0ZXIoKT87XFxuICAgICAgICAgQklOREVSX1NIUklOS0VSLnJlZ2lzdGVyKGNcXFwiYW5kcm9pZC1iaW5kZXJcXFwiKT87XFxuIFxcbiAgICAgICAgIC8vIFNBRkVUWTogVGhlIG1vZHVsZSBpcyBiZWluZyBsb2FkZWQsIHNvIHdlIGNhbiBpbml0aWFsaXplIGJpbmRlcmZzLlxcbiAgICAgICAgIHVuc2FmZSB7IGtlcm5lbDo6ZXJyb3I6OnRvX3Jlc3VsdChiaW5kZXJmczo6aW5pdF9ydXN0X2JpbmRlcmZzKCkpPyB9O1xcbiBcXG4tICAgICAgICBPayhTZWxmIHt9KVxcbisgICAgICAgIE9rKFNlbGYgeyBfbmV0bGluazogbmV0bGluayB9KVxcbiAgICAgfVxcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzXFxuaW5kZXggMTlmODgxOTQ4YTg0YmEuLjMzMzY4ZjdmZDU1MTQyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzXFxuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnNcXG5AQCAtMTI4NCw2ICsxMjg0LDE1IEBAIGZuIHRyYW5zYWN0aW9uKHNlbGY6IFxcdTAwMjZBcmNcXHUwMDNjU2VsZlxcdTAwM2UsIGNtZDogdTMyLCByZWFkZXI6IFxcdTAwMjZtdXQgVXNlclNsaWNlUmVhZGVyKSAtXFx1MDAzZSBSZXN1XFxuICAgICAgICAgICAgIH1cXG4gICAgICAgICB9XFxuIFxcbisgICAgICAgIGlmIGluZm8ub25ld2F5X3NwYW1fc3VzcGVjdCB7XFxuKyAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYm90aCBhIG9uZXdheSBzcGFtIHN1c3BlY3QgYW5kIGEgZmFpbHVyZSwgd2UgcmVwb3J0IGl0IHR3aWNlLiBUaGlzIGlzXFxuKyAgICAgICAgICAgIC8vIHVzZWZ1bCBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBmYWlsZWQgd2l0aCBCUl9UUkFOU0FDVElPTl9QRU5ESU5HX0ZST1pFTi5cXG4rICAgICAgICAgICAgaW5mby5yZXBvcnRfbmV0bGluayhCUl9PTkVXQVlfU1BBTV9TVVNQRUNULCBcXHUwMDI2c2VsZi5wcm9jZXNzLmN0eCk7XFxuKyAgICAgICAgfVxcbisgICAgICAgIGlmIGluZm8ucmVwbHkgIT0gMCB7XFxuKyAgICAgICAgICAgIGluZm8ucmVwb3J0X25ldGxpbmsoaW5mby5yZXBseSwgXFx1MDAyNnNlbGYucHJvY2Vzcy5jdHgpO1xcbisgICAgICAgIH1cXG4rXFxuICAgICAgICAgT2soKCkpXFxuICAgICB9XFxuIFxcbkBAIC0xMzU0LDExICsxMzYzLDExIEBAIGZuIHJlcGx5X2lubmVyKHNlbGY6IFxcdTAwMjZBcmNcXHUwMDNjU2VsZlxcdTAwM2UsIGluZm86IFxcdTAwMjZtdXQgVHJhbnNhY3Rpb25JbmZvKSAtXFx1MDAzZSBCaW5kZXJSZXN1bHQge1xcbiAgICAgICAgICAgICAgICAgaW5mby5mcm9tX3RpZCxcXG4gICAgICAgICAgICAgICAgIGluZm8udG9fcGlkXFxuICAgICAgICAgICAgICk7XFxuLVxcbiAgICAgICAgICAgICBsZXQgcGFyYW0gPSBlcnIuc291cmNlLmFzX3JlZigpLm1hcF9vcigwLCB8ZXwgZS50b19lcnJubygpKTtcXG4gICAgICAgICAgICAgbGV0IGVlID0gRXh0ZW5kZWRFcnJvcjo6bmV3KGluZm8uZGVidWdfaWQgYXMgdTMyLCBlcnIucmVwbHksIHBhcmFtKTtcXG4gICAgICAgICAgICAgb3JpZy5mcm9tXFxuICAgICAgICAgICAgICAgICAuZGVsaXZlcl9yZXBseShFcnIoQlJfRkFJTEVEX1JFUExZKSwgXFx1MDAyNm9yaWcsIFNvbWUoZWUpKTtcXG4rICAgICAgICAgICAgaW5mby5yZXBseSA9IEJSX0ZBSUxFRF9SRVBMWTtcXG4gICAgICAgICAgICAgZXJyLnJlcGx5ID0gQlJfVFJBTlNBQ1RJT05fQ09NUExFVEU7XFxuICAgICAgICAgICAgIGVyclxcbiAgICAgICAgIH0pO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5yc1xcbmluZGV4IGFmZWY1YjQ2ZWFjMjY3Li42Y2I3Yjc0NWM1MmU0NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXFxuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5yc1xcbkBAIC0zLDYgKzMsNyBAQFxcbiAvLyBDb3B5cmlnaHQgKEMpIDIwMjUgR29vZ2xlIExMQy5cXG4gXFxuIHVzZSBrZXJuZWw6OntcXG4rICAgIG5ldDo6bmV0bGluazo6R0VOTE1TR19ERUZBVUxUX1NJWkUsXFxuICAgICBwcmVsdWRlOjoqLFxcbiAgICAgc2VxX2ZpbGU6OlNlcUZpbGUsXFxuICAgICBzZXFfcHJpbnQsXFxuQEAgLTE4LDYgKzE5LDcgQEBcXG4gICAgIGFsbG9jYXRpb246OntBbGxvY2F0aW9uLCBUcmFuc2xhdGVkRmRzfSxcXG4gICAgIGRlZnM6OiosXFxuICAgICBlcnJvcjo6e0JpbmRlckVycm9yLCBCaW5kZXJSZXN1bHR9LFxcbisgICAgbmV0bGluazo6UmVwb3J0LFxcbiAgICAgbm9kZTo6e05vZGUsIE5vZGVSZWZ9LFxcbiAgICAgcHJvY2Vzczo6e1Byb2Nlc3MsIFByb2Nlc3NJbm5lcn0sXFxuICAgICBwdHJfYWxpZ24sXFxuQEAgLTUxLDYgKzUzLDQ0IEBAIGltcGwgVHJhbnNhY3Rpb25JbmZvIHtcXG4gICAgIHB1YihjcmF0ZSkgZm4gaXNfb25ld2F5KFxcdTAwMjZzZWxmKSAtXFx1MDAzZSBib29sIHtcXG4gICAgICAgICBzZWxmLmZsYWdzIFxcdTAwMjYgVEZfT05FX1dBWSAhPSAwXFxuICAgICB9XFxuK1xcbisgICAgcHViKGNyYXRlKSBmbiByZXBvcnRfbmV0bGluayhcXHUwMDI2c2VsZiwgcmVwbHk6IHUzMiwgY3R4OiBcXHUwMDI2Y3JhdGU6OkNvbnRleHQpIHtcXG4rICAgICAgICBpZiBsZXQgRXJyKGVycikgPSBzZWxmLnJlcG9ydF9uZXRsaW5rX2lubmVyKHJlcGx5LCBjdHgpIHtcXG4rICAgICAgICAgICAgcHJfd2FybiEoXFxuKyAgICAgICAgICAgICAgICBcXFwie306e30gbmV0bGluayByZXBvcnQgZmFpbGVkOiB7ZXJyOj99XFxcXG5cXFwiLFxcbisgICAgICAgICAgICAgICAgc2VsZi5mcm9tX3BpZCxcXG4rICAgICAgICAgICAgICAgIHNlbGYuZnJvbV90aWRcXG4rICAgICAgICAgICAgKTtcXG4rICAgICAgICB9XFxuKyAgICB9XFxuK1xcbisgICAgZm4gcmVwb3J0X25ldGxpbmtfaW5uZXIoXFx1MDAyNnNlbGYsIHJlcGx5OiB1MzIsIGN0eDogXFx1MDAyNmNyYXRlOjpDb250ZXh0KSAtXFx1MDAzZSBrZXJuZWw6OmVycm9yOjpSZXN1bHQge1xcbisgICAgICAgIGlmICFSZXBvcnQ6Omhhc19saXN0ZW5lcnMoKSB7XFxuKyAgICAgICAgICAgIHJldHVybiBPaygoKSk7XFxuKyAgICAgICAgfVxcbisgICAgICAgIGxldCBtdXQgcmVwb3J0ID0gUmVwb3J0OjpuZXcoR0VOTE1TR19ERUZBVUxUX1NJWkUsIDAsIDAsIEdGUF9LRVJORUwpPztcXG4rXFxuKyAgICAgICAgcmVwb3J0LmVycm9yKHJlcGx5KT87XFxuKyAgICAgICAgcmVwb3J0LmNvbnRleHQoXFx1MDAyNmN0eC5uYW1lKT87XFxuKyAgICAgICAgcmVwb3J0LmZyb21fcGlkKHNlbGYuZnJvbV9waWQgYXMgdTMyKT87XFxuKyAgICAgICAgcmVwb3J0LmZyb21fdGlkKHNlbGYuZnJvbV90aWQgYXMgdTMyKT87XFxuKyAgICAgICAgaWYgc2VsZi50b19waWQgIT0gMCB7XFxuKyAgICAgICAgICAgIHJlcG9ydC50b19waWQoc2VsZi50b19waWQgYXMgdTMyKT87XFxuKyAgICAgICAgfVxcbisgICAgICAgIGlmIHNlbGYudG9fdGlkICE9IDAge1xcbisgICAgICAgICAgICByZXBvcnQudG9fdGlkKHNlbGYudG9fdGlkIGFzIHUzMik/O1xcbisgICAgICAgIH1cXG4rXFxuKyAgICAgICAgaWYgc2VsZi5pc19yZXBseSB7XFxuKyAgICAgICAgICAgIHJlcG9ydC5pc19yZXBseSgpPztcXG4rICAgICAgICB9XFxuKyAgICAgICAgcmVwb3J0LmZsYWdzKHNlbGYuZmxhZ3MpPztcXG4rICAgICAgICByZXBvcnQuY29kZShzZWxmLmNvZGUpPztcXG4rICAgICAgICByZXBvcnQuZGF0YV9zaXplKHNlbGYuZGF0YV9zaXplIGFzIHUzMik/O1xcbitcXG4rICAgICAgICByZXBvcnQubXVsdGljYXN0KDAsIEdGUF9LRVJORUwpPztcXG4rICAgICAgICBPaygoKSlcXG4rICAgIH1cXG4gfVxcbiBcXG4gdXNlIGNvcmU6Om1lbTo6b2Zmc2V0X29mO1xcbmRpZmYgLS1naXQgYS9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oIGIvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxcbmluZGV4IDExMjQ3ODVlMjEwYjMwLi5lYzk2ZTgxMTYxMGQ3MiAxMDA2NDRcXG4tLS0gYS9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oXFxuKysrIGIvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxcbkBAIC05Myw2ICs5Myw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhcnJheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9ydXN0X3NhbXBsZS5oXFx1MDAzZVxcbiBcXG4gLypcXG5AQCAtMTEwLDYgKzExMiw3IEBAXFxuIGNvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9BUkNIX1NMQUJfTUlOQUxJR04gPSBBUkNIX1NMQUJfTUlOQUxJR047XFxuIGNvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9BUkNIX0tNQUxMT0NfTUlOQUxJR04gPSBBUkNIX0tNQUxMT0NfTUlOQUxJR047XFxuIGNvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9QQUdFX1NJWkUgPSBQQUdFX1NJWkU7XFxuK2NvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRU5MTVNHX0RFRkFVTFRfU0laRSA9IEdFTkxNU0dfREVGQVVMVF9TSVpFO1xcbiBjb25zdCBnZnBfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRlBfQVRPTUlDID0gR0ZQX0FUT01JQztcXG4gY29uc3QgZ2ZwX3QgUlVTVF9DT05TVF9IRUxQRVJfR0ZQX0tFUk5FTCA9IEdGUF9LRVJORUw7XFxuIGNvbnN0IGdmcF90IFJVU1RfQ09OU1RfSEVMUEVSX0dGUF9LRVJORUxfQUNDT1VOVCA9IEdGUF9LRVJORUxfQUNDT1VOVDtcXG5kaWZmIC0tZ2l0IGEvcnVzdC9oZWxwZXJzL2hlbHBlcnMuYyBiL3J1c3QvaGVscGVycy9oZWxwZXJzLmNcXG5pbmRleCA5OThlMzEwNTJlNjYwMS4uMWQ0ZWU1MWY1NzZiZWIgMTAwNjQ0XFxuLS0tIGEvcnVzdC9oZWxwZXJzL2hlbHBlcnMuY1xcbisrKyBiL3J1c3QvaGVscGVycy9oZWxwZXJzLmNcXG5AQCAtNzIsNiArNzIsNyBAQFxcbiAjaW5jbHVkZSBcXFwibWFwbGVfdHJlZS5jXFxcIlxcbiAjaW5jbHVkZSBcXFwibW0uY1xcXCJcXG4gI2luY2x1ZGUgXFxcIm11dGV4LmNcXFwiXFxuKyNpbmNsdWRlIFxcXCJuZXQvZ2VuZXRsaW5rLmNcXFwiXFxuICNpbmNsdWRlIFxcXCJvZi5jXFxcIlxcbiAjaW5jbHVkZSBcXFwicGFnZS5jXFxcIlxcbiAjaW5jbHVkZSBcXFwicGNpLmNcXFwiXFxuZGlmZiAtLWdpdCBhL3J1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmMgYi9ydXN0L2hlbHBlcnMvbmV0L2dlbmV0bGluay5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzUzMGI2OWY2Y2Y3MDdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvcnVzdC9oZWxwZXJzL25ldC9nZW5ldGxpbmsuY1xcbkBAIC0wLDAgKzEsNDYgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBHb29nbGUgTExDLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZ2VuZXRsaW5rLmhcXHUwMDNlXFxuK1xcbisjaWZkZWYgQ09ORklHX05FVFxcbitcXG4rX19ydXN0X2hlbHBlciBzdHJ1Y3Qgc2tfYnVmZiAqcnVzdF9oZWxwZXJfZ2VubG1zZ19uZXcoc2l6ZV90IHBheWxvYWQsIGdmcF90IGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBnZW5sbXNnX25ldyhwYXlsb2FkLCBmbGFncyk7XFxuK31cXG4rXFxuK19fcnVzdF9oZWxwZXJcXG4raW50IHJ1c3RfaGVscGVyX2dlbmxtc2dfbXVsdGljYXN0KGNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGdyb3VwLCBnZnBfdCBmbGFncylcXG4re1xcbitcXHRyZXR1cm4gZ2VubG1zZ19tdWx0aWNhc3QoZmFtaWx5LCBza2IsIHBvcnRpZCwgZ3JvdXAsIGZsYWdzKTtcXG4rfVxcbitcXG4rX19ydXN0X2hlbHBlciB2b2lkIHJ1c3RfaGVscGVyX2dlbmxtc2dfY2FuY2VsKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcilcXG4re1xcbitcXHRnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7XFxuK31cXG4rXFxuK19fcnVzdF9oZWxwZXIgdm9pZCBydXN0X2hlbHBlcl9nZW5sbXNnX2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIpXFxuK3tcXG4rXFx0Z2VubG1zZ19lbmQoc2tiLCBoZHIpO1xcbit9XFxuK1xcbitfX3J1c3RfaGVscGVyIHZvaWQgcnVzdF9oZWxwZXJfbmxtc2dfZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdG5sbXNnX2ZyZWUoc2tiKTtcXG4rfVxcbitcXG4rX19ydXN0X2hlbHBlclxcbitpbnQgcnVzdF9oZWxwZXJfZ2VubF9oYXNfbGlzdGVuZXJzKGNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBncm91cClcXG4re1xcbitcXHRyZXR1cm4gZ2VubF9oYXNfbGlzdGVuZXJzKGZhbWlseSwgbmV0LCBncm91cCk7XFxuK31cXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9uZXQucnMgYi9ydXN0L2tlcm5lbC9uZXQvbW9kLnJzXFxuc2ltaWxhcml0eSBpbmRleCA4NSVcXG5yZW5hbWUgZnJvbSBydXN0L2tlcm5lbC9uZXQucnNcXG5yZW5hbWUgdG8gcnVzdC9rZXJuZWwvbmV0L21vZC5yc1xcbmluZGV4IGZlNDE1Y2IzNjlkM2FjLi44ZWNhZTc1NzdlZDI5NSAxMDA2NDRcXG4tLS0gYS9ydXN0L2tlcm5lbC9uZXQucnNcXG4rKysgYi9ydXN0L2tlcm5lbC9uZXQvbW9kLnJzXFxuQEAgLTQsMyArNCw1IEBAXFxuIFxcbiAjW2NmZyhDT05GSUdfUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TKV1cXG4gcHViIG1vZCBwaHk7XFxuK1xcbitwdWIgbW9kIG5ldGxpbms7XFxuZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzIGIvcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yMmVmM2RkZTM2ZmExYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yc1xcbkBAIC0wLDAgKzEsMzM3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlIExMQy5cXG4rXFxuKy8vISBSdXN0IHN1cHBvcnQgZm9yIGdlbmVyaWMgbmV0bGluay5cXG4rLy8hXFxuKy8vISBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBleHBvc2luZyBtdWx0aWNhc3QgZ3JvdXBzLlxcbisvLyFcXG4rLy8hIEMgaGVhZGVyOiBbYGluY2x1ZGUvbmV0L2dlbmV0bGluay5oYF0oc3JjdHJlZS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaClcXG4rXFxuK3VzZSBrZXJuZWw6OntcXG4rICAgIGFsbG9jOjp7c2VsZiwgQWxsb2NFcnJvcn0sXFxuKyAgICBlcnJvcjo6dG9fcmVzdWx0LFxcbisgICAgcHJlbHVkZTo6KixcXG4rICAgIHRyYW5zbXV0ZTo6QXNCeXRlcyxcXG4rICAgIHR5cGVzOjpPcGFxdWUsXFxuKyAgICBUaGlzTW9kdWxlLFxcbit9O1xcbitcXG4rdXNlIGNvcmU6OntcXG4rICAgIG1lbTo6TWFudWFsbHlEcm9wLFxcbisgICAgcHRyOjpOb25OdWxsLCAvL1xcbit9O1xcbitcXG4rLy8vIFRoZSBkZWZhdWx0IG5ldGxpbmsgbWVzc2FnZSBzaXplLlxcbitwdWIgY29uc3QgR0VOTE1TR19ERUZBVUxUX1NJWkU6IHVzaXplID0gYmluZGluZ3M6OkdFTkxNU0dfREVGQVVMVF9TSVpFO1xcbitcXG4rLy8vIEEgd3JhcHBlciBhcm91bmQgYHN0cnVjdCBza19idWZmYCBmb3IgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2VzLlxcbisvLy9cXG4rLy8vIFRoaXMgdHlwZSBpcyBpbnRlbmRlZCB0byBiZSBzcGVjaWZpYyBmb3IgYnVmZmVycyB1c2VkIHdpdGggbmV0bGluayBvbmx5LCBhbmQgb3RoZXIgdXNlY2FzZXMgZm9yXFxuKy8vLyBgc3RydWN0IHNrX2J1ZmZgIGFyZSBvdXQtb2Ytc2NvcGUgZm9yIHRoaXMgYWJzdHJhY3Rpb24uXFxuKy8vL1xcbisvLy8gIyBJbnZhcmlhbnRzXFxuKy8vL1xcbisvLy8gVGhlIHBvaW50ZXIgaGFzIG93bmVyc2hpcCBvdmVyIGEgdmFsaWQgYHNrX2J1ZmZgLlxcbitwdWIgc3RydWN0IE5ldGxpbmtTa0J1ZmYge1xcbisgICAgc2tiOiBOb25OdWxsXFx1MDAzY2tlcm5lbDo6YmluZGluZ3M6OnNrX2J1ZmZcXHUwMDNlLFxcbit9XFxuK1xcbitpbXBsIE5ldGxpbmtTa0J1ZmYge1xcbisgICAgLy8vIENyZWF0ZXMgYSBuZXcgYE5ldGxpbmtTa0J1ZmZgIHdpdGggdGhlIGdpdmVuIHNpemUuXFxuKyAgICBwdWIgZm4gbmV3KHNpemU6IHVzaXplLCBmbGFnczogYWxsb2M6OkZsYWdzKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjTmV0bGlua1NrQnVmZiwgQWxsb2NFcnJvclxcdTAwM2Uge1xcbisgICAgICAgIC8vIFNBRkVUWTogYGdlbmxtc2dfbmV3YCBvbmx5IHJlcXVpcmVzIGl0cyBhcmd1bWVudHMgdG8gYmUgdmFsaWQgaW50ZWdlcnMuXFxuKyAgICAgICAgbGV0IHNrYiA9IHVuc2FmZSB7IGJpbmRpbmdzOjpnZW5sbXNnX25ldyhzaXplLCBmbGFncy5hc19yYXcoKSkgfTtcXG4rICAgICAgICBsZXQgc2tiID0gTm9uTnVsbDo6bmV3KHNrYikub2tfb3IoQWxsb2NFcnJvcik/O1xcbisgICAgICAgIE9rKE5ldGxpbmtTa0J1ZmYgeyBza2IgfSlcXG4rICAgIH1cXG4rXFxuKyAgICAvLy8gUHV0cyBhIGdlbmVyaWMgbmV0bGluayBoZWFkZXIgaW50byB0aGUgYE5ldGxpbmtTa0J1ZmZgLlxcbisgICAgcHViIGZuIGdlbmxtc2dfcHV0KFxcbisgICAgICAgIHNlbGYsXFxuKyAgICAgICAgcG9ydGlkOiB1MzIsXFxuKyAgICAgICAgc2VxOiB1MzIsXFxuKyAgICAgICAgZmFtaWx5OiBcXHUwMDI2J3N0YXRpYyBGYW1pbHksXFxuKyAgICAgICAgY21kOiB1OCxcXG4rICAgICkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY0dlbmxNc2csIEFsbG9jRXJyb3JcXHUwMDNlIHtcXG4rICAgICAgICBsZXQgc2tiID0gc2VsZi5za2IuYXNfcHRyKCk7XFxuKyAgICAgICAgLy8gU0FGRVRZOiBUaGUgc2tiIGFuZCBmYW1pbHkgcG9pbnRlcnMgYXJlIHZhbGlkLlxcbisgICAgICAgIGxldCBoZHIgPSB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgZmFtaWx5LmFzX3JhdygpLCAwLCBjbWQpIH07XFxuKyAgICAgICAgbGV0IGhkciA9IE5vbk51bGw6Om5ldyhoZHIpLm9rX29yKEFsbG9jRXJyb3IpPztcXG4rICAgICAgICBPayhHZW5sTXNnIHsgc2tiOiBzZWxmLCBoZHIgfSlcXG4rICAgIH1cXG4rfVxcbitcXG4raW1wbCBEcm9wIGZvciBOZXRsaW5rU2tCdWZmIHtcXG4rICAgIGZuIGRyb3AoXFx1MDAyNm11dCBzZWxmKSB7XFxuKyAgICAgICAgLy8gU0FGRVRZOiBXZSBoYXZlIG93bmVyc2hpcCBvdmVyIHRoZSBgc2tfYnVmZmAsIHNvIHdlIG1heSBmcmVlIGl0LlxcbisgICAgICAgIHVuc2FmZSB7IGJpbmRpbmdzOjpubG1zZ19mcmVlKHNlbGYuc2tiLmFzX3B0cigpKSB9XFxuKyAgICB9XFxuK31cXG4rXFxuKy8vLyBBIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlIGJlaW5nIGNvbnN0cnVjdGVkLlxcbisvLy9cXG4rLy8vICMgSW52YXJpYW50c1xcbisvLy9cXG4rLy8vIGBoZHJgIHJlZmVyZW5jZXMgdGhlIGhlYWRlciBpbiB0aGlzIG5ldGxpbmsgbWVzc2FnZS5cXG4rcHViIHN0cnVjdCBHZW5sTXNnIHtcXG4rICAgIHNrYjogTmV0bGlua1NrQnVmZixcXG4rICAgIGhkcjogTm9uTnVsbFxcdTAwM2NjX3ZvaWRcXHUwMDNlLFxcbit9XFxuK1xcbitpbXBsIEdlbmxNc2cge1xcbisgICAgLy8vIFB1dHMgYW4gYXR0cmlidXRlIGludG8gdGhlIG1lc3NhZ2UuXFxuKyAgICAjW2lubGluZV1cXG4rICAgIGZuIHB1dFxcdTAwM2NUXFx1MDAzZShcXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6IFxcdTAwMjZUKSAtXFx1MDAzZSBSZXN1bHRcXG4rICAgIHdoZXJlXFxuKyAgICAgICAgVDogP1NpemVkICsgQXNCeXRlcyxcXG4rICAgIHtcXG4rICAgICAgICBsZXQgc2tiID0gc2VsZi5za2Iuc2tiLmFzX3B0cigpO1xcbisgICAgICAgIGxldCBsZW4gPSBzaXplX29mX3ZhbCh2YWx1ZSk7XFxuKyAgICAgICAgbGV0IHB0ciA9IGNvcmU6OnB0cjo6ZnJvbV9yZWYodmFsdWUpLmNhc3Q6OlxcdTAwM2NjX3ZvaWRcXHUwMDNlKCk7XFxuKyAgICAgICAgLy8gU0FGRVRZOiBgc2tiYCBpcyB2YWxpZCBieSBgTmV0bGlua1NrQnVmZmAgdHlwZSBpbnZhcmlhbnRzLCBhbmQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzXFxuKyAgICAgICAgLy8gcmVhZGFibGUgYW5kIGluaXRpYWxpemVkIGZvciBpdHMgYHNpemVfb2ZgIGJ5dGVzLlxcbisgICAgICAgIHRvX3Jlc3VsdCh1bnNhZmUgeyBiaW5kaW5nczo6bmxhX3B1dChza2IsIGF0dHJ0eXBlLCBsZW4gYXMgY19pbnQsIHB0cikgfSlcXG4rICAgIH1cXG4rXFxuKyAgICAvLy8gUHV0cyBhIGB1MzJgIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLlxcbisgICAgI1tpbmxpbmVdXFxuKyAgICBwdWIgZm4gcHV0X3UzMihcXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6IHUzMikgLVxcdTAwM2UgUmVzdWx0IHtcXG4rICAgICAgICBzZWxmLnB1dChhdHRydHlwZSwgXFx1MDAyNnZhbHVlKVxcbisgICAgfVxcbitcXG4rICAgIC8vLyBQdXRzIGEgc3RyaW5nIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLlxcbisgICAgI1tpbmxpbmVdXFxuKyAgICBwdWIgZm4gcHV0X3N0cmluZyhcXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6IFxcdTAwMjZDU3RyKSAtXFx1MDAzZSBSZXN1bHQge1xcbisgICAgICAgIHNlbGYucHV0KGF0dHJ0eXBlLCB2YWx1ZS50b19ieXRlc193aXRoX251bCgpKVxcbisgICAgfVxcbitcXG4rICAgIC8vLyBQdXRzIGEgZmxhZyBhdHRyaWJ1dGUgaW50byB0aGUgbWVzc2FnZS5cXG4rICAgICNbaW5saW5lXVxcbisgICAgcHViIGZuIHB1dF9mbGFnKFxcdTAwMjZtdXQgc2VsZiwgYXR0cnR5cGU6IGNfaW50KSAtXFx1MDAzZSBSZXN1bHQge1xcbisgICAgICAgIGxldCBza2IgPSBzZWxmLnNrYi5za2IuYXNfcHRyKCk7XFxuKyAgICAgICAgLy8gU0FGRVRZOiBgc2tiYCBpcyB2YWxpZCBieSBgTmV0bGlua1NrQnVmZmAgdHlwZSBpbnZhcmlhbnRzLCBhbmQgYSBudWxsIHBvaW50ZXIgaXMgdmFsaWRcXG4rICAgICAgICAvLyB3aGVuIHRoZSBsZW5ndGggaXMgemVyby5cXG4rICAgICAgICB0b19yZXN1bHQodW5zYWZlIHsgYmluZGluZ3M6Om5sYV9wdXQoc2tiLCBhdHRydHlwZSwgMCwgY29yZTo6cHRyOjpudWxsKCkpIH0pXFxuKyAgICB9XFxuK1xcbisgICAgLy8vIFNlbmRzIHRoZSBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZSBhcyBhIG11bHRpY2FzdCBtZXNzYWdlLlxcbisgICAgI1tpbmxpbmVdXFxuKyAgICBwdWIgZm4gbXVsdGljYXN0KFxcbisgICAgICAgIHNlbGYsXFxuKyAgICAgICAgZmFtaWx5OiBcXHUwMDI2J3N0YXRpYyBGYW1pbHksXFxuKyAgICAgICAgcG9ydGlkOiB1MzIsXFxuKyAgICAgICAgZ3JvdXA6IHUzMixcXG4rICAgICAgICBmbGFnczogYWxsb2M6OkZsYWdzLFxcbisgICAgKSAtXFx1MDAzZSBSZXN1bHQge1xcbisgICAgICAgIGxldCBtZSA9IE1hbnVhbGx5RHJvcDo6bmV3KHNlbGYpO1xcbisgICAgICAgIC8vIFNBRkVUWTogVGhlIGBza2JgIGFuZCBgZmFtaWx5YCBwb2ludGVycyBhcmUgdmFsaWQuIFdlIHBhc3Mgb3duZXJzaGlwIG9mIHRoZSBgc2tiYCB0b1xcbisgICAgICAgIC8vIGBnZW5sbXNnX211bHRpY2FzdGAgYnkgbm90IGRyb3BwaW5nIGBzZWxmYC5cXG4rICAgICAgICB1bnNhZmUge1xcbisgICAgICAgICAgICBiaW5kaW5nczo6Z2VubG1zZ19lbmQobWUuc2tiLnNrYi5hc19wdHIoKSwgbWUuaGRyLmFzX3B0cigpKTtcXG4rICAgICAgICAgICAgdG9fcmVzdWx0KGJpbmRpbmdzOjpnZW5sbXNnX211bHRpY2FzdChcXG4rICAgICAgICAgICAgICAgIGZhbWlseS5hc19yYXcoKSxcXG4rICAgICAgICAgICAgICAgIG1lLnNrYi5za2IuYXNfcHRyKCksXFxuKyAgICAgICAgICAgICAgICBwb3J0aWQsXFxuKyAgICAgICAgICAgICAgICBncm91cCxcXG4rICAgICAgICAgICAgICAgIGZsYWdzLmFzX3JhdygpLFxcbisgICAgICAgICAgICApKVxcbisgICAgICAgIH1cXG4rICAgIH1cXG4rfVxcbitpbXBsIERyb3AgZm9yIEdlbmxNc2cge1xcbisgICAgZm4gZHJvcChcXHUwMDI2bXV0IHNlbGYpIHtcXG4rICAgICAgICAvLyBTQUZFVFk6IFRoZSBgaGRyYCBwb2ludGVyIHJlZmVyZW5jZXMgdGhlIGhlYWRlciBvZiB0aGlzIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlLlxcbisgICAgICAgIHVuc2FmZSB7IGJpbmRpbmdzOjpnZW5sbXNnX2NhbmNlbChzZWxmLnNrYi5za2IuYXNfcHRyKCksIHNlbGYuaGRyLmFzX3B0cigpKSB9O1xcbisgICAgfVxcbit9XFxuK1xcbisvLy8gRmxhZ3MgZm9yIGEgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseS5cXG4rc3RydWN0IEZhbWlseUZsYWdzIHtcXG4rICAgIC8vLyBXaGV0aGVyIHRoZSBmYW1pbHkgc3VwcG9ydHMgbmV0d29yayBuYW1lc3BhY2VzLlxcbisgICAgbmV0bnNvazogYm9vbCxcXG4rICAgIC8vLyBXaGV0aGVyIHRoZSBmYW1pbHkgc3VwcG9ydHMgcGFyYWxsZWwgb3BlcmF0aW9ucy5cXG4rICAgIHBhcmFsbGVsX29wczogYm9vbCxcXG4rfVxcbitcXG4raW1wbCBGYW1pbHlGbGFncyB7XFxuKyAgICAvLy8gQ29udmVydHMgdGhlIGZsYWdzIHRvIHRoZSBiaXRmaWVsZCByZXByZXNlbnRhdGlvbiB1c2VkIGJ5IGBnZW5sX2ZhbWlseWAuXFxuKyAgICBjb25zdCBmbiBpbnRvX2JpdGZpZWxkKHNlbGYpIC1cXHUwMDNlIGJpbmRpbmdzOjpfX0JpbmRnZW5CaXRmaWVsZFVuaXRcXHUwMDNjW3U4OyAxXVxcdTAwM2Uge1xcbisgICAgICAgIC8vIFRoZSBiZWxvdyBzaGlmdHMgYXJlIHZlcmlmaWVkIGNvcnJlY3QgYnkgdGVzdF9mYW1pbHlfZmxhZ3NfYml0ZmllbGQoKSBiZWxvdy5cXG4rICAgICAgICAvL1xcbisgICAgICAgIC8vIEFsdGhvdWdoIGJpbmRnZW4gZ2VuZXJhdGVzIGhlbHBlcnMgdG8gY2hhbmdlIGJpdGZpZWxkcyBiYXNlZCBvbiB0aGUgQyBoZWFkZXJzLCB0aGVzZVxcbisgICAgICAgIC8vIGhlbHBlcnMgdW5mb3J0dW5hdGVseSBjYW4ndCBiZSB1c2VkIGluIGNvbnN0IGNvbnRleHQuIFNpbmNlIGBGYW1pbHlgIG5lZWRzIHRvIGJlIGZpbGxlZFxcbisgICAgICAgIC8vIG91dCBhdCBidWlsZC10aW1lLCB3ZSB1c2UgdGhpcyBoZWxwZXIgaW5zdGVhZC5cXG4rICAgICAgICBsZXQgbXV0IGJpdHMgPSAwO1xcbisgICAgICAgIGlmIHNlbGYubmV0bnNvayB7XFxuKyAgICAgICAgICAgIGJpdHMgfD0gMSBcXHUwMDNjXFx1MDAzYyAwO1xcbisgICAgICAgIH1cXG4rICAgICAgICBpZiBzZWxmLnBhcmFsbGVsX29wcyB7XFxuKyAgICAgICAgICAgIGJpdHMgfD0gMSBcXHUwMDNjXFx1MDAzYyAxO1xcbisgICAgICAgIH1cXG4rICAgICAgICAvLyBDb252ZXJ0IGZyb20gbGl0dGxlIGVuZGlhbiB0byB0aGUgdGFyZ2V0J3MgZW5kaWFubmVzcy5cXG4rICAgICAgICBiaXRzID0gdTg6OmZyb21fbGUoYml0cyk7XFxuKyAgICAgICAgLy8gU0FGRVRZOiBUaGlzIGJpdGZpZWxkIGlzIHJlcHJlc2VudGVkIGFzIGFuIHU4LlxcbisgICAgICAgIHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlOjpcXHUwMDNjdTgsIGJpbmRpbmdzOjpfX0JpbmRnZW5CaXRmaWVsZFVuaXRcXHUwMDNjW3U4OyAxXVxcdTAwM2VcXHUwMDNlKGJpdHMpIH1cXG4rICAgIH1cXG4rfVxcbitcXG4rLy8vIEEgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseS5cXG4rI1tyZXByKHRyYW5zcGFyZW50KV1cXG4rcHViIHN0cnVjdCBGYW1pbHkge1xcbisgICAgaW5uZXI6IE9wYXF1ZVxcdTAwM2NiaW5kaW5nczo6Z2VubF9mYW1pbHlcXHUwMDNlLFxcbit9XFxuK1xcbisvLyBTQUZFVFk6IFRoZSBgRmFtaWx5YCB0eXBlIGlzIHRocmVhZCBzYWZlLlxcbit1bnNhZmUgaW1wbCBTeW5jIGZvciBGYW1pbHkge31cXG4rXFxuK2ltcGwgRmFtaWx5IHtcXG4rICAgIC8vLyBDcmVhdGVzIGEgbmV3IGBGYW1pbHlgIGluc3RhbmNlLlxcbisgICAgLy8vXFxuKyAgICAvLy8gSW50ZW5kZWQgdG8gYmUgdXNlZCBmcm9tIGNvbnN0IGNvbnRleHQgb25seS4gV2lsbCBwYW5pYyBpZiBwcm92aWRlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzLlxcbisgICAgLy8vXFxuKyAgICAvLy8gVGhlIG5hbWUgbXVzdCBiZSBhIG51bC10ZXJtaW5hdGVkIHN0cmluZywgYnV0IGl0IGlzIHRha2VuIGFzIGBcXHUwMDI2W3U4XWAgc28gdGhhdCBpdCBjYW4gYmUgdXNlZFxcbisgICAgLy8vIG1vcmUgY29udmVuaWVudGx5IHdpdGggdGhlIHN0cmluZ3MgZ2VuZXJhdGVkIGJ5IGJpbmRnZW4uXFxuKyAgICBwdWIgY29uc3QgZm4gY29uc3RfbmV3KFxcbisgICAgICAgIG1vZHVsZTogXFx1MDAyNlRoaXNNb2R1bGUsXFxuKyAgICAgICAgbmFtZTogXFx1MDAyNlt1OF0sXFxuKyAgICAgICAgdmVyc2lvbjogdTMyLFxcbisgICAgICAgIG1jZ3JwczogXFx1MDAyNidzdGF0aWMgW011bHRpY2FzdEdyb3VwXSxcXG4rICAgICkgLVxcdTAwM2UgRmFtaWx5IHtcXG4rICAgICAgICBsZXQgbl9tY2dycHMgPSBtY2dycHMubGVuKCkgYXMgdTg7XFxuKyAgICAgICAgaWYgbl9tY2dycHMgYXMgdXNpemUgIT0gbWNncnBzLmxlbigpIHtcXG4rICAgICAgICAgICAgcGFuaWMhKFxcXCJ0b28gbWFueSBtY2dycHNcXFwiKTtcXG4rICAgICAgICB9XFxuKyAgICAgICAgbGV0IG11dCBnZW5sX2ZhbWlseSA9IGJpbmRpbmdzOjpnZW5sX2ZhbWlseSB7XFxuKyAgICAgICAgICAgIHZlcnNpb24sXFxuKyAgICAgICAgICAgIF9iaXRmaWVsZF8xOiBGYW1pbHlGbGFncyB7XFxuKyAgICAgICAgICAgICAgICBuZXRuc29rOiB0cnVlLFxcbisgICAgICAgICAgICAgICAgcGFyYWxsZWxfb3BzOiB0cnVlLFxcbisgICAgICAgICAgICB9XFxuKyAgICAgICAgICAgIC5pbnRvX2JpdGZpZWxkKCksXFxuKyAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlLmFzX3B0cigpLFxcbisgICAgICAgICAgICBtY2dycHM6IG1jZ3Jwcy5hc19wdHIoKS5jYXN0KCksXFxuKyAgICAgICAgICAgIG5fbWNncnBzLFxcbisgICAgICAgICAgICAuLnBpbl9pbml0Ojp6ZXJvZWQoKVxcbisgICAgICAgIH07XFxuKyAgICAgICAgaWYgQ1N0cjo6ZnJvbV9ieXRlc193aXRoX251bChuYW1lKS5pc19lcnIoKSB7XFxuKyAgICAgICAgICAgIHBhbmljIShcXFwiZ2VubF9mYW1pbHkgbmFtZSBub3QgbnVsLXRlcm1pbmF0ZWRcXFwiKTtcXG4rICAgICAgICB9XFxuKyAgICAgICAgaWYgZ2VubF9mYW1pbHkubmFtZS5sZW4oKSBcXHUwMDNjIG5hbWUubGVuKCkge1xcbisgICAgICAgICAgICBwYW5pYyEoXFxcImdlbmxfZmFtaWx5IG5hbWUgdG9vIGxvbmdcXFwiKTtcXG4rICAgICAgICB9XFxuKyAgICAgICAgbGV0IG11dCBpID0gMDtcXG4rICAgICAgICB3aGlsZSBpIFxcdTAwM2MgbmFtZS5sZW4oKSB7XFxuKyAgICAgICAgICAgIGdlbmxfZmFtaWx5Lm5hbWVbaV0gPSBuYW1lW2ldO1xcbisgICAgICAgICAgICBpICs9IDE7XFxuKyAgICAgICAgfVxcbisgICAgICAgIEZhbWlseSB7XFxuKyAgICAgICAgICAgIGlubmVyOiBPcGFxdWU6Om5ldyhnZW5sX2ZhbWlseSksXFxuKyAgICAgICAgfVxcbisgICAgfVxcbitcXG4rICAgIC8vLyBDaGVja3MgaWYgdGhlcmUgYXJlIGFueSBsaXN0ZW5lcnMgZm9yIHRoZSBnaXZlbiBtdWx0aWNhc3QgZ3JvdXAuXFxuKyAgICBwdWIgZm4gaGFzX2xpc3RlbmVycyhcXHUwMDI2c2VsZiwgZ3JvdXA6IHUzMikgLVxcdTAwM2UgYm9vbCB7XFxuKyAgICAgICAgLy8gU0FGRVRZOiBUaGUgZmFtaWx5IGFuZCBpbml0X25ldCBwb2ludGVycyBhcmUgdmFsaWQuXFxuKyAgICAgICAgdW5zYWZlIHtcXG4rICAgICAgICAgICAgYmluZGluZ3M6OmdlbmxfaGFzX2xpc3RlbmVycyhzZWxmLmFzX3JhdygpLCBcXHUwMDI2cmF3IG11dCBiaW5kaW5nczo6aW5pdF9uZXQsIGdyb3VwKSAhPSAwXFxuKyAgICAgICAgfVxcbisgICAgfVxcbitcXG4rICAgIC8vLyBSZXR1cm5zIGEgcmF3IHBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgYGdlbmxfZmFtaWx5YCBzdHJ1Y3R1cmUuXFxuKyAgICBwdWIgZm4gYXNfcmF3KFxcdTAwMjZzZWxmKSAtXFx1MDAzZSAqbXV0IGJpbmRpbmdzOjpnZW5sX2ZhbWlseSB7XFxuKyAgICAgICAgc2VsZi5pbm5lci5nZXQoKVxcbisgICAgfVxcbit9XFxuK1xcbisvLy8gQSBnZW5lcmljIG5ldGxpbmsgbXVsdGljYXN0IGdyb3VwLlxcbisjW3JlcHIodHJhbnNwYXJlbnQpXVxcbitwdWIgc3RydWN0IE11bHRpY2FzdEdyb3VwIHtcXG4rICAgIC8vIE5vIE9wYXF1ZSBiZWNhdXNlIGZ1bGx5IGltbXV0YWJsZVxcbisgICAgZ3JvdXA6IGJpbmRpbmdzOjpnZW5sX211bHRpY2FzdF9ncm91cCxcXG4rfVxcbitcXG4rLy8gU0FGRVRZOiBQdXJlIGRhdGEgc28gdGhyZWFkIHNhZmUuXFxuK3Vuc2FmZSBpbXBsIFN5bmMgZm9yIE11bHRpY2FzdEdyb3VwIHt9XFxuK1xcbitpbXBsIE11bHRpY2FzdEdyb3VwIHtcXG4rICAgIC8vLyBDcmVhdGVzIGEgbmV3IGBNdWx0aWNhc3RHcm91cGAgaW5zdGFuY2UuXFxuKyAgICAvLy9cXG4rICAgIC8vLyBJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20gY29uc3QgY29udGV4dCBvbmx5LiBXaWxsIHBhbmljIGlmIHByb3ZpZGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHMuXFxuKyAgICBwdWIgY29uc3QgZm4gY29uc3RfbmV3KG5hbWU6IFxcdTAwMjZDU3RyKSAtXFx1MDAzZSBNdWx0aWNhc3RHcm91cCB7XFxuKyAgICAgICAgbGV0IG11dCBncm91cDogYmluZGluZ3M6OmdlbmxfbXVsdGljYXN0X2dyb3VwID0gcGluX2luaXQ6Onplcm9lZCgpO1xcbitcXG4rICAgICAgICBsZXQgbmFtZSA9IG5hbWUudG9fYnl0ZXNfd2l0aF9udWwoKTtcXG4rICAgICAgICBpZiBncm91cC5uYW1lLmxlbigpIFxcdTAwM2MgbmFtZS5sZW4oKSB7XFxuKyAgICAgICAgICAgIHBhbmljIShcXFwiZ2VubF9tdWx0aWNhc3RfZ3JvdXAgbmFtZSB0b28gbG9uZ1xcXCIpO1xcbisgICAgICAgIH1cXG4rICAgICAgICBsZXQgbXV0IGkgPSAwO1xcbisgICAgICAgIHdoaWxlIGkgXFx1MDAzYyBuYW1lLmxlbigpIHtcXG4rICAgICAgICAgICAgZ3JvdXAubmFtZVtpXSA9IG5hbWVbaV07XFxuKyAgICAgICAgICAgIGkgKz0gMTtcXG4rICAgICAgICB9XFxuK1xcbisgICAgICAgIE11bHRpY2FzdEdyb3VwIHsgZ3JvdXAgfVxcbisgICAgfVxcbit9XFxuK1xcbisvLy8gQSByZWdpc3RyYXRpb24gb2YgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LlxcbisvLy9cXG4rLy8vIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSByZWdpc3RyYXRpb24gb2YgYSBbYEZhbWlseWBdLiBXaGVuIGFuIGluc3RhbmNlIG9mIHRoaXMgdHlwZSBpc1xcbisvLy8gZHJvcHBlZCwgaXRzIHJlc3BlY3RpdmUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSB3aWxsIGJlIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBzeXN0ZW0uXFxuKy8vL1xcbisvLy8gIyBJbnZhcmlhbnRzXFxuKy8vL1xcbisvLy8gYHNlbGYuZmFtaWx5YCBhbHdheXMgaG9sZHMgYSB2YWxpZCByZWZlcmVuY2UgdG8gYW4gaW5pdGlhbGl6ZWQgYW5kIHJlZ2lzdGVyZWQgW2BGYW1pbHlgXS5cXG4rcHViIHN0cnVjdCBSZWdpc3RyYXRpb24ge1xcbisgICAgZmFtaWx5OiBcXHUwMDI2J3N0YXRpYyBGYW1pbHksXFxuK31cXG4rXFxuK2ltcGwgRmFtaWx5IHtcXG4rICAgIC8vLyBSZWdpc3RlcnMgdGhlIGdlbmVyaWMgbmV0bGluayBmYW1pbHkgd2l0aCB0aGUga2VybmVsLlxcbisgICAgcHViIGZuIHJlZ2lzdGVyKFxcdTAwMjYnc3RhdGljIHNlbGYpIC1cXHUwMDNlIFJlc3VsdFxcdTAwM2NSZWdpc3RyYXRpb25cXHUwMDNlIHtcXG4rICAgICAgICAvLyBTQUZFVFk6IGBzZWxmLmFzX3JhdygpYCBpcyBhIHZhbGlkIHBvaW50ZXIgdG8gYSBgZ2VubF9mYW1pbHlgIHN0cnVjdC5cXG4rICAgICAgICAvLyBUaGUgYGdlbmxfZmFtaWx5YCBzdHJ1Y3QgaXMgc3RhdGljLCBzbyBpdCB3aWxsIG91dGxpdmUgdGhlIHJlZ2lzdHJhdGlvbi5cXG4rICAgICAgICB0b19yZXN1bHQodW5zYWZlIHsgYmluZGluZ3M6OmdlbmxfcmVnaXN0ZXJfZmFtaWx5KHNlbGYuYXNfcmF3KCkpIH0pPztcXG4rICAgICAgICBPayhSZWdpc3RyYXRpb24geyBmYW1pbHk6IHNlbGYgfSlcXG4rICAgIH1cXG4rfVxcbitcXG4raW1wbCBEcm9wIGZvciBSZWdpc3RyYXRpb24ge1xcbisgICAgZm4gZHJvcChcXHUwMDI2bXV0IHNlbGYpIHtcXG4rICAgICAgICAvLyBTQUZFVFk6IGBzZWxmLmZhbWlseS5hc19yYXcoKWAgaXMgYSB2YWxpZCBwb2ludGVyIHRvIGEgcmVnaXN0ZXJlZCBgZ2VubF9mYW1pbHlgIHN0cnVjdC5cXG4rICAgICAgICAvLyBUaGUgYFJlZ2lzdHJhdGlvbmAgc3RydWN0IGVuc3VyZXMgdGhhdCBgZ2VubF91bnJlZ2lzdGVyX2ZhbWlseWAgaXMgY2FsbGVkIGV4YWN0bHkgb25jZVxcbisgICAgICAgIC8vIGZvciB0aGlzIGZhbWlseSB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLlxcbisgICAgICAgIHVuc2FmZSB7IGJpbmRpbmdzOjpnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KHNlbGYuZmFtaWx5LmFzX3JhdygpKSB9O1xcbisgICAgfVxcbit9XFxuK1xcbisjW21hY3Jvczo6a3VuaXRfdGVzdHMocnVzdF9uZXRsaW5rKV1cXG4rbW9kIHRlc3RzIHtcXG4rICAgIHVzZSBzdXBlcjo6KjtcXG4rXFxuKyAgICAjW3Rlc3RdXFxuKyAgICBmbiB0ZXN0X2ZhbWlseV9mbGFnc19iaXRmaWVsZCgpIHtcXG4rICAgICAgICBmb3IgbmV0bnNvayBpbiBbZmFsc2UsIHRydWVdIHtcXG4rICAgICAgICAgICAgZm9yIHBhcmFsbGVsX29wcyBpbiBbZmFsc2UsIHRydWVdIHtcXG4rICAgICAgICAgICAgICAgIGxldCBtdXQgYl9mYW0gPSBiaW5kaW5nczo6Z2VubF9mYW1pbHkge1xcbisgICAgICAgICAgICAgICAgICAgIC4uRGVmYXVsdDo6ZGVmYXVsdCgpXFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICAgICAgYl9mYW0uc2V0X25ldG5zb2soaWYgbmV0bnNvayB7IDEgfSBlbHNlIHsgMCB9KTtcXG4rICAgICAgICAgICAgICAgIGJfZmFtLnNldF9wYXJhbGxlbF9vcHMoaWYgcGFyYWxsZWxfb3BzIHsgMSB9IGVsc2UgeyAwIH0pO1xcbitcXG4rICAgICAgICAgICAgICAgIGxldCBjX2JpdGZpZWxkID0gRmFtaWx5RmxhZ3Mge1xcbisgICAgICAgICAgICAgICAgICAgIG5ldG5zb2ssXFxuKyAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWxfb3BzLFxcbisgICAgICAgICAgICAgICAgfVxcbisgICAgICAgICAgICAgICAgLmludG9fYml0ZmllbGQoKTtcXG4rXFxuKyAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IFRoZSBiaXQgZmllbGQgaXMgc3RvcmVkIGFzIHU4LlxcbisgICAgICAgICAgICAgICAgbGV0IGJfdmFsOiB1OCA9IHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlKGJfZmFtLl9iaXRmaWVsZF8xKSB9O1xcbisgICAgICAgICAgICAgICAgLy8gU0FGRVRZOiBUaGUgYml0IGZpZWxkIGlzIHN0b3JlZCBhcyB1OC5cXG4rICAgICAgICAgICAgICAgIGxldCBjX3ZhbDogdTggPSB1bnNhZmUgeyBjb3JlOjptZW06OnRyYW5zbXV0ZShjX2JpdGZpZWxkKSB9O1xcbisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxIShiX3ZhbCwgY192YWwpO1xcbisgICAgICAgICAgICB9XFxuKyAgICAgICAgfVxcbisgICAgfVxcbit9XFxuZGlmZiAtLWdpdCBhL3J1c3QvdWFwaS91YXBpX2hlbHBlci5oIGIvcnVzdC91YXBpL3VhcGlfaGVscGVyLmhcXG5pbmRleCAwNmQ3ZDFhMmU4ZGFiYS4uODZjN2I2YjI4NGIwNWEgMTAwNjQ0XFxuLS0tIGEvcnVzdC91YXBpL3VhcGlfaGVscGVyLmhcXG4rKysgYi9ydXN0L3VhcGkvdWFwaV9oZWxwZXIuaFxcbkBAIC0xMSw2ICsxMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1YXBpL2RybS9ub3ZhX2RybS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9kcm0vcGFudGhvcl9kcm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvYW5kcm9pZC9iaW5kZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvYW5kcm9pZC9iaW5kZXJfbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L21paS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9ldGh0b29sLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU1OjU1LjYzNzg4MjA5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3OTE1NzAzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZXBvcnRfbmV0bGlua19pbm5lclwiLFxuICAgIFwicmVwb3J0X25ldGxpbmtcIixcbiAgICBcImdlbmxtc2dfcHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBuZXRsaW5rIG11bHRpY2FzdCByZXBvcnRpbmcgZm9yIEFuZHJvaWQgQmluZGVyIHRyYW5zYWN0aW9uIGZhaWx1cmVzIGluIFJ1c3QuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBmb3IgY29uc3RydWN0aW5nIGFuZCBicm9hZGNhc3RpbmcgbmV0bGluayBtZXNzYWdlcyB3aGVuIGJpbmRlciB0cmFuc2FjdGlvbnMgZmFpbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NWUyODA0MDk2MmE1ZjFkNzE5OTU2ZjI3ODBiN2U3ZTYzNWQ1YzI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxNzo1NTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGMzZjcyMDU4YTJmMjZlLi5iZTVhMTk2ZjEyYzZhZiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTE4ODc1LDYgKzE4ODc1LDggQEAgRjpcdGluY2x1ZGUvdWFwaS9saW51eC9zY3RwLmhcbiBGOlx0bGliL25ldF91dGlscy5jXG4gRjpcdGxpYi9yYW5kb20zMi5jXG4gRjpcdG5ldC9cbitGOlx0cnVzdC9oZWxwZXJzL25ldC9cbitGOlx0cnVzdC9rZXJuZWwvbmV0L1xuIEY6XHRzYW1wbGVzL3BrdGdlbi9cbiBGOlx0dG9vbHMvbmV0L1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWcgYi9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZ1xuaW5kZXggZTJlNDAyYzlkMTc1OWMuLjYwNmE5ZDA3Zjc3NDcxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWdcbisrKyBiL2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnXG5AQCAtMTYsNyArMTYsNyBAQCBjb25maWcgQU5EUk9JRF9CSU5ERVJfSVBDXG4gXG4gY29uZmlnIEFORFJPSURfQklOREVSX0lQQ19SVVNUXG4gXHRib29sIFwiUnVzdCB2ZXJzaW9uIG9mIEFuZHJvaWQgQmluZGVyIElQQyBEcml2ZXJcIlxuLVx0ZGVwZW5kcyBvbiBSVVNUIFx1MDAyNlx1MDAyNiBNTVUgXHUwMDI2XHUwMDI2ICFBTkRST0lEX0JJTkRFUl9JUENcbitcdGRlcGVuZHMgb24gUlVTVCBcdTAwMjZcdTAwMjYgTU1VIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2ICFBTkRST0lEX0JJTkRFUl9JUENcbiBcdGhlbHBcbiBcdCAgVGhpcyBlbmFibGVzIHRoZSBSdXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBCaW5kZXIgZHJpdmVyLlxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5ycyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5yc1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZWI3ZWEyZWRhZmY3MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzXG5AQCAtMCwwICsxLDExNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoKEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUpIE9SIEJTRC0zLUNsYXVzZSlcbisvKiBCYXNlZCBvbjogRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2JpbmRlci55YW1sICovXG4rXG4rIyFbYWxsb3codW5yZWFjaGFibGVfcHViLCBjbGlwcHk6Ondyb25nX3NlbGZfY29udmVudGlvbildXG4rdXNlIGtlcm5lbDo6e1xuKyAgICBuZXQ6Om5ldGxpbms6OntcbisgICAgICAgIEZhbWlseSxcbisgICAgICAgIEdlbmxNc2csXG4rICAgICAgICBNdWx0aWNhc3RHcm91cCxcbisgICAgICAgIE5ldGxpbmtTa0J1ZmYsIC8vXG4rICAgIH0sXG4rICAgIHByZWx1ZGU6OiosIC8vXG4rfTtcbitcbitwdWIgc3RhdGljIEJJTkRFUl9OTF9GQU1JTFk6IEZhbWlseSA9IEZhbWlseTo6Y29uc3RfbmV3KFxuKyAgICBcdTAwMjZjcmF0ZTo6VEhJU19NT0RVTEUsXG4rICAgIGtlcm5lbDo6dWFwaTo6QklOREVSX0ZBTUlMWV9OQU1FLFxuKyAgICBrZXJuZWw6OnVhcGk6OkJJTkRFUl9GQU1JTFlfVkVSU0lPTixcbisgICAgXHUwMDI2QklOREVSX05MX0ZBTUlMWV9NQ0dSUFMsXG4rKTtcbitcbitzdGF0aWMgQklOREVSX05MX0ZBTUlMWV9NQ0dSUFM6IFtNdWx0aWNhc3RHcm91cDsgMV0gPSBbTXVsdGljYXN0R3JvdXA6OmNvbnN0X25ldyhjXCJyZXBvcnRcIildO1xuK1xuKy8vLyBBIG11bHRpY2FzdCBldmVudCBzZW50IHRvIHVzZXJzcGFjZSBzdWJzY3JpYmVycyB0byBub3RpZnkgdGhlbSBhYm91dFxuKy8vLyBiaW5kZXIgdHJhbnNhY3Rpb24gZmFpbHVyZXMuIFRoZSBnZW5lcmF0ZWQgcmVwb3J0IHByb3ZpZGVzIHRoZSBmdWxsXG4rLy8vIGRldGFpbHMgb2YgdGhlIHNwZWNpZmljIHRyYW5zYWN0aW9uIHRoYXQgZmFpbGVkLiBUaGUgaW50ZW50aW9uIGlzIGZvclxuKy8vLyBwcm9ncmFtcyB0byBtb25pdG9yIHRoZXNlIGV2ZW50cyBhbmQgcmVhY3QgdG8gdGhlIGZhaWx1cmVzIGFzIG5lZWRlZC5cbitwdWIgc3RydWN0IFJlcG9ydCB7XG4rICAgIHNrYjogR2VubE1zZyxcbit9XG4rXG4raW1wbCBSZXBvcnQge1xuKyAgICAvLy8gQ3JlYXRlIGEgbmV3IG11bHRpY2FzdCBtZXNzYWdlLlxuKyAgICBwdWIgZm4gbmV3KFxuKyAgICAgICAgc2l6ZTogdXNpemUsXG4rICAgICAgICBwb3J0aWQ6IHUzMixcbisgICAgICAgIHNlcTogdTMyLFxuKyAgICAgICAgZmxhZ3M6IGtlcm5lbDo6YWxsb2M6OkZsYWdzLFxuKyAgICApIC1cdTAwM2UgUmVzdWx0XHUwMDNjU2VsZiwga2VybmVsOjphbGxvYzo6QWxsb2NFcnJvclx1MDAzZSB7XG4rICAgICAgICBjb25zdCBCSU5ERVJfQ01EX1JFUE9SVDogdTggPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9DTURfUkVQT1JUIGFzIHU4O1xuKyAgICAgICAgbGV0IHNrYiA9IE5ldGxpbmtTa0J1ZmY6Om5ldyhzaXplLCBmbGFncyk/O1xuKyAgICAgICAgbGV0IHNrYiA9IHNrYi5nZW5sbXNnX3B1dChwb3J0aWQsIHNlcSwgXHUwMDI2QklOREVSX05MX0ZBTUlMWSwgQklOREVSX0NNRF9SRVBPUlQpPztcbisgICAgICAgIE9rKFNlbGYgeyBza2IgfSlcbisgICAgfVxuK1xuKyAgICAvLy8gQnJvYWRjYXN0IHRoaXMgbWVzc2FnZS5cbisgICAgcHViIGZuIG11bHRpY2FzdChzZWxmLCBwb3J0aWQ6IHUzMiwgZmxhZ3M6IGtlcm5lbDo6YWxsb2M6OkZsYWdzKSAtXHUwMDNlIFJlc3VsdCB7XG4rICAgICAgICBzZWxmLnNrYi5tdWx0aWNhc3QoXHUwMDI2QklOREVSX05MX0ZBTUlMWSwgcG9ydGlkLCAwLCBmbGFncylcbisgICAgfVxuK1xuKyAgICAvLy8gQ2hlY2sgaWYgdGhpcyBtZXNzYWdlIHR5cGUgaGFzIGxpc3RlbmVycy5cbisgICAgcHViIGZuIGhhc19saXN0ZW5lcnMoKSAtXHUwMDNlIGJvb2wge1xuKyAgICAgICAgQklOREVSX05MX0ZBTUlMWS5oYXNfbGlzdGVuZXJzKDApXG4rICAgIH1cbitcbisgICAgLy8vIFRoZSBlbnVtIGJpbmRlcl9kcml2ZXJfcmV0dXJuX3Byb3RvY29sIHJldHVybmVkIHRvIHRoZSBzZW5kZXIuXG4rICAgIHB1YiBmbiBlcnJvcihcdTAwMjZtdXQgc2VsZiwgdmFsOiB1MzIpIC1cdTAwM2UgUmVzdWx0IHtcbisgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9FUlJPUjogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9FUlJPUiBhcyBjX2ludDtcbisgICAgICAgIHNlbGYuc2tiLnB1dF91MzIoQklOREVSX0FfUkVQT1JUX0VSUk9SLCB2YWwpXG4rICAgIH1cbitcbisgICAgLy8vIFRoZSBiaW5kZXIgY29udGV4dCB3aGVyZSB0aGUgdHJhbnNhY3Rpb24gb2NjdXJyZWQuXG4rICAgIHB1YiBmbiBjb250ZXh0KFx1MDAyNm11dCBzZWxmLCB2YWw6IFx1MDAyNkNTdHIpIC1cdTAwM2UgUmVzdWx0IHtcbisgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9DT05URVhUOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0NPTlRFWFQgYXMgY19pbnQ7XG4rICAgICAgICBzZWxmLnNrYi5wdXRfc3RyaW5nKEJJTkRFUl9BX1JFUE9SVF9DT05URVhULCB2YWwpXG4rICAgIH1cbitcbisgICAgLy8vIFRoZSBQSUQgb2YgdGhlIHNlbmRlciBwcm9jZXNzLlxuKyAgICBwdWIgZm4gZnJvbV9waWQoXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4rICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfRlJPTV9QSUQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfRlJPTV9QSUQgYXMgY19pbnQ7XG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9GUk9NX1BJRCwgdmFsKVxuKyAgICB9XG4rXG4rICAgIC8vLyBUaGUgVElEIG9mIHRoZSBzZW5kZXIgdGhyZWFkLlxuKyAgICBwdWIgZm4gZnJvbV90aWQoXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4rICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfRlJPTV9USUQ6IGNfaW50ID0ga2VybmVsOjp1YXBpOjpCSU5ERVJfQV9SRVBPUlRfRlJPTV9USUQgYXMgY19pbnQ7XG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9GUk9NX1RJRCwgdmFsKVxuKyAgICB9XG4rXG4rICAgIC8vLyBUaGUgUElEIG9mIHRoZSByZWNpcGllbnQgcHJvY2Vzcy4gVGhpcyBhdHRyaWJ1dGUgbWF5IG5vdCBiZSBwcmVzZW50XG4rICAgIC8vLyBpZiB0aGUgdGFyZ2V0IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLlxuKyAgICBwdWIgZm4gdG9fcGlkKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX1RPX1BJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9UT19QSUQgYXMgY19pbnQ7XG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9UT19QSUQsIHZhbClcbisgICAgfVxuK1xuKyAgICAvLy8gVGhlIFRJRCBvZiB0aGUgcmVjaXBpZW50IHRocmVhZC4gVGhpcyBhdHRyaWJ1dGUgbWF5IG5vdCBiZSBwcmVzZW50XG4rICAgIC8vLyBpZiB0aGUgdGFyZ2V0IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLlxuKyAgICBwdWIgZm4gdG9fdGlkKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX1RPX1RJRDogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9UT19USUQgYXMgY19pbnQ7XG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9UT19USUQsIHZhbClcbisgICAgfVxuK1xuKyAgICAvLy8gV2hlbiBwcmVzZW50LCBpbmRpY2F0ZXMgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiBpcyBhIHJlcGx5LlxuKyAgICBwdWIgZm4gaXNfcmVwbHkoXHUwMDI2bXV0IHNlbGYpIC1cdTAwM2UgUmVzdWx0IHtcbisgICAgICAgIGNvbnN0IEJJTkRFUl9BX1JFUE9SVF9JU19SRVBMWTogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9JU19SRVBMWSBhcyBjX2ludDtcbisgICAgICAgIHNlbGYuc2tiLnB1dF9mbGFnKEJJTkRFUl9BX1JFUE9SVF9JU19SRVBMWSlcbisgICAgfVxuK1xuKyAgICAvLy8gVGhlIGJpdG1hc2sgb2YgZW51bSB0cmFuc2FjdGlvbl9mbGFncyBmcm9tIHRoZSB0cmFuc2FjdGlvbi5cbisgICAgcHViIGZuIGZsYWdzKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0ZMQUdTOiBjX2ludCA9IGtlcm5lbDo6dWFwaTo6QklOREVSX0FfUkVQT1JUX0ZMQUdTIGFzIGNfaW50O1xuKyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfRkxBR1MsIHZhbClcbisgICAgfVxuK1xuKyAgICAvLy8gVGhlIGFwcGxpY2F0aW9uLWRlZmluZWQgY29kZSBmcm9tIHRoZSB0cmFuc2FjdGlvbi5cbisgICAgcHViIGZuIGNvZGUoXHUwMDI2bXV0IHNlbGYsIHZhbDogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4rICAgICAgICBjb25zdCBCSU5ERVJfQV9SRVBPUlRfQ09ERTogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9DT0RFIGFzIGNfaW50O1xuKyAgICAgICAgc2VsZi5za2IucHV0X3UzMihCSU5ERVJfQV9SRVBPUlRfQ09ERSwgdmFsKVxuKyAgICB9XG4rXG4rICAgIC8vLyBUaGUgdHJhbnNhY3Rpb24gcGF5bG9hZCBzaXplIGluIGJ5dGVzLlxuKyAgICBwdWIgZm4gZGF0YV9zaXplKFx1MDAyNm11dCBzZWxmLCB2YWw6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuKyAgICAgICAgY29uc3QgQklOREVSX0FfUkVQT1JUX0RBVEFfU0laRTogY19pbnQgPSBrZXJuZWw6OnVhcGk6OkJJTkRFUl9BX1JFUE9SVF9EQVRBX1NJWkUgYXMgY19pbnQ7XG4rICAgICAgICBzZWxmLnNrYi5wdXRfdTMyKEJJTkRFUl9BX1JFUE9SVF9EQVRBX1NJWkUsIHZhbClcbisgICAgfVxuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyX21haW4ucnNcbmluZGV4IDQzMjM5MGFhYjI1YmI4Li5kZjQ3YWJhMDUxMzM4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcnVzdF9iaW5kZXJfbWFpbi5yc1xuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9ydXN0X2JpbmRlcl9tYWluLnJzXG5AQCAtMzIsNiArMzIsNyBAQFxuIG1vZCBkZWZlcnJlZF9jbG9zZTtcbiBtb2QgZGVmcztcbiBtb2QgZXJyb3I7XG4rbW9kIG5ldGxpbms7XG4gbW9kIG5vZGU7XG4gbW9kIHBhZ2VfcmFuZ2U7XG4gbW9kIHByb2Nlc3M7XG5AQCAtMjgyLDE5ICsyODMsMjIgQEAgZm4gcHRyX2FsaWduKHZhbHVlOiB1c2l6ZSkgLVx1MDAzZSBPcHRpb25cdTAwM2N1c2l6ZVx1MDAzZSB7XG4gLy8gU0FGRVRZOiBXZSBjYWxsIHJlZ2lzdGVyIGluIGBpbml0YC5cbiBzdGF0aWMgQklOREVSX1NIUklOS0VSOiBTaHJpbmtlciA9IHVuc2FmZSB7IFNocmlua2VyOjpuZXcoKSB9O1xuIFxuLXN0cnVjdCBCaW5kZXJNb2R1bGUge31cbitzdHJ1Y3QgQmluZGVyTW9kdWxlIHtcbisgICAgX25ldGxpbms6IGtlcm5lbDo6bmV0OjpuZXRsaW5rOjpSZWdpc3RyYXRpb24sXG4rfVxuIFxuIGltcGwga2VybmVsOjpNb2R1bGUgZm9yIEJpbmRlck1vZHVsZSB7XG4gICAgIGZuIGluaXQoX21vZHVsZTogXHUwMDI2J3N0YXRpYyBrZXJuZWw6OlRoaXNNb2R1bGUpIC1cdTAwM2UgUmVzdWx0XHUwMDNjU2VsZlx1MDAzZSB7XG4gICAgICAgICAvLyBTQUZFVFk6IFRoZSBtb2R1bGUgaW5pdGlhbGl6ZXIgbmV2ZXIgcnVucyB0d2ljZSwgc28gd2Ugb25seSBjYWxsIHRoaXMgb25jZS5cbiAgICAgICAgIHVuc2FmZSB7IGNyYXRlOjpjb250ZXh0OjpDT05URVhUUy5pbml0KCkgfTtcbiBcbisgICAgICAgIGxldCBuZXRsaW5rID0gY3JhdGU6Om5ldGxpbms6OkJJTkRFUl9OTF9GQU1JTFkucmVnaXN0ZXIoKT87XG4gICAgICAgICBCSU5ERVJfU0hSSU5LRVIucmVnaXN0ZXIoY1wiYW5kcm9pZC1iaW5kZXJcIik/O1xuIFxuICAgICAgICAgLy8gU0FGRVRZOiBUaGUgbW9kdWxlIGlzIGJlaW5nIGxvYWRlZCwgc28gd2UgY2FuIGluaXRpYWxpemUgYmluZGVyZnMuXG4gICAgICAgICB1bnNhZmUgeyBrZXJuZWw6OmVycm9yOjp0b19yZXN1bHQoYmluZGVyZnM6OmluaXRfcnVzdF9iaW5kZXJmcygpKT8gfTtcbiBcbi0gICAgICAgIE9rKFNlbGYge30pXG4rICAgICAgICBPayhTZWxmIHsgX25ldGxpbms6IG5ldGxpbmsgfSlcbiAgICAgfVxuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzXG5pbmRleCAxOWY4ODE5NDhhODRiYS4uMzMzNjhmN2ZkNTUxNDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yc1xuKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnNcbkBAIC0xMjg0LDYgKzEyODQsMTUgQEAgZm4gdHJhbnNhY3Rpb24oc2VsZjogXHUwMDI2QXJjXHUwMDNjU2VsZlx1MDAzZSwgY21kOiB1MzIsIHJlYWRlcjogXHUwMDI2bXV0IFVzZXJTbGljZVJlYWRlcikgLVx1MDAzZSBSZXN1XG4gICAgICAgICAgICAgfVxuICAgICAgICAgfVxuIFxuKyAgICAgICAgaWYgaW5mby5vbmV3YXlfc3BhbV9zdXNwZWN0IHtcbisgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGJvdGggYSBvbmV3YXkgc3BhbSBzdXNwZWN0IGFuZCBhIGZhaWx1cmUsIHdlIHJlcG9ydCBpdCB0d2ljZS4gVGhpcyBpc1xuKyAgICAgICAgICAgIC8vIHVzZWZ1bCBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBmYWlsZWQgd2l0aCBCUl9UUkFOU0FDVElPTl9QRU5ESU5HX0ZST1pFTi5cbisgICAgICAgICAgICBpbmZvLnJlcG9ydF9uZXRsaW5rKEJSX09ORVdBWV9TUEFNX1NVU1BFQ1QsIFx1MDAyNnNlbGYucHJvY2Vzcy5jdHgpO1xuKyAgICAgICAgfVxuKyAgICAgICAgaWYgaW5mby5yZXBseSAhPSAwIHtcbisgICAgICAgICAgICBpbmZvLnJlcG9ydF9uZXRsaW5rKGluZm8ucmVwbHksIFx1MDAyNnNlbGYucHJvY2Vzcy5jdHgpO1xuKyAgICAgICAgfVxuK1xuICAgICAgICAgT2soKCkpXG4gICAgIH1cbiBcbkBAIC0xMzU0LDExICsxMzYzLDExIEBAIGZuIHJlcGx5X2lubmVyKHNlbGY6IFx1MDAyNkFyY1x1MDAzY1NlbGZcdTAwM2UsIGluZm86IFx1MDAyNm11dCBUcmFuc2FjdGlvbkluZm8pIC1cdTAwM2UgQmluZGVyUmVzdWx0IHtcbiAgICAgICAgICAgICAgICAgaW5mby5mcm9tX3RpZCxcbiAgICAgICAgICAgICAgICAgaW5mby50b19waWRcbiAgICAgICAgICAgICApO1xuLVxuICAgICAgICAgICAgIGxldCBwYXJhbSA9IGVyci5zb3VyY2UuYXNfcmVmKCkubWFwX29yKDAsIHxlfCBlLnRvX2Vycm5vKCkpO1xuICAgICAgICAgICAgIGxldCBlZSA9IEV4dGVuZGVkRXJyb3I6Om5ldyhpbmZvLmRlYnVnX2lkIGFzIHUzMiwgZXJyLnJlcGx5LCBwYXJhbSk7XG4gICAgICAgICAgICAgb3JpZy5mcm9tXG4gICAgICAgICAgICAgICAgIC5kZWxpdmVyX3JlcGx5KEVycihCUl9GQUlMRURfUkVQTFkpLCBcdTAwMjZvcmlnLCBTb21lKGVlKSk7XG4rICAgICAgICAgICAgaW5mby5yZXBseSA9IEJSX0ZBSUxFRF9SRVBMWTtcbiAgICAgICAgICAgICBlcnIucmVwbHkgPSBCUl9UUkFOU0FDVElPTl9DT01QTEVURTtcbiAgICAgICAgICAgICBlcnJcbiAgICAgICAgIH0pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXG5pbmRleCBhZmVmNWI0NmVhYzI2Ny4uNmNiN2I3NDVjNTJlNDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXG4rKysgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzXG5AQCAtMyw2ICszLDcgQEBcbiAvLyBDb3B5cmlnaHQgKEMpIDIwMjUgR29vZ2xlIExMQy5cbiBcbiB1c2Uga2VybmVsOjp7XG4rICAgIG5ldDo6bmV0bGluazo6R0VOTE1TR19ERUZBVUxUX1NJWkUsXG4gICAgIHByZWx1ZGU6OiosXG4gICAgIHNlcV9maWxlOjpTZXFGaWxlLFxuICAgICBzZXFfcHJpbnQsXG5AQCAtMTgsNiArMTksNyBAQFxuICAgICBhbGxvY2F0aW9uOjp7QWxsb2NhdGlvbiwgVHJhbnNsYXRlZEZkc30sXG4gICAgIGRlZnM6OiosXG4gICAgIGVycm9yOjp7QmluZGVyRXJyb3IsIEJpbmRlclJlc3VsdH0sXG4rICAgIG5ldGxpbms6OlJlcG9ydCxcbiAgICAgbm9kZTo6e05vZGUsIE5vZGVSZWZ9LFxuICAgICBwcm9jZXNzOjp7UHJvY2VzcywgUHJvY2Vzc0lubmVyfSxcbiAgICAgcHRyX2FsaWduLFxuQEAgLTUxLDYgKzUzLDQ0IEBAIGltcGwgVHJhbnNhY3Rpb25JbmZvIHtcbiAgICAgcHViKGNyYXRlKSBmbiBpc19vbmV3YXkoXHUwMDI2c2VsZikgLVx1MDAzZSBib29sIHtcbiAgICAgICAgIHNlbGYuZmxhZ3MgXHUwMDI2IFRGX09ORV9XQVkgIT0gMFxuICAgICB9XG4rXG4rICAgIHB1YihjcmF0ZSkgZm4gcmVwb3J0X25ldGxpbmsoXHUwMDI2c2VsZiwgcmVwbHk6IHUzMiwgY3R4OiBcdTAwMjZjcmF0ZTo6Q29udGV4dCkge1xuKyAgICAgICAgaWYgbGV0IEVycihlcnIpID0gc2VsZi5yZXBvcnRfbmV0bGlua19pbm5lcihyZXBseSwgY3R4KSB7XG4rICAgICAgICAgICAgcHJfd2FybiEoXG4rICAgICAgICAgICAgICAgIFwie306e30gbmV0bGluayByZXBvcnQgZmFpbGVkOiB7ZXJyOj99XFxuXCIsXG4rICAgICAgICAgICAgICAgIHNlbGYuZnJvbV9waWQsXG4rICAgICAgICAgICAgICAgIHNlbGYuZnJvbV90aWRcbisgICAgICAgICAgICApO1xuKyAgICAgICAgfVxuKyAgICB9XG4rXG4rICAgIGZuIHJlcG9ydF9uZXRsaW5rX2lubmVyKFx1MDAyNnNlbGYsIHJlcGx5OiB1MzIsIGN0eDogXHUwMDI2Y3JhdGU6OkNvbnRleHQpIC1cdTAwM2Uga2VybmVsOjplcnJvcjo6UmVzdWx0IHtcbisgICAgICAgIGlmICFSZXBvcnQ6Omhhc19saXN0ZW5lcnMoKSB7XG4rICAgICAgICAgICAgcmV0dXJuIE9rKCgpKTtcbisgICAgICAgIH1cbisgICAgICAgIGxldCBtdXQgcmVwb3J0ID0gUmVwb3J0OjpuZXcoR0VOTE1TR19ERUZBVUxUX1NJWkUsIDAsIDAsIEdGUF9LRVJORUwpPztcbitcbisgICAgICAgIHJlcG9ydC5lcnJvcihyZXBseSk/O1xuKyAgICAgICAgcmVwb3J0LmNvbnRleHQoXHUwMDI2Y3R4Lm5hbWUpPztcbisgICAgICAgIHJlcG9ydC5mcm9tX3BpZChzZWxmLmZyb21fcGlkIGFzIHUzMik/O1xuKyAgICAgICAgcmVwb3J0LmZyb21fdGlkKHNlbGYuZnJvbV90aWQgYXMgdTMyKT87XG4rICAgICAgICBpZiBzZWxmLnRvX3BpZCAhPSAwIHtcbisgICAgICAgICAgICByZXBvcnQudG9fcGlkKHNlbGYudG9fcGlkIGFzIHUzMik/O1xuKyAgICAgICAgfVxuKyAgICAgICAgaWYgc2VsZi50b190aWQgIT0gMCB7XG4rICAgICAgICAgICAgcmVwb3J0LnRvX3RpZChzZWxmLnRvX3RpZCBhcyB1MzIpPztcbisgICAgICAgIH1cbitcbisgICAgICAgIGlmIHNlbGYuaXNfcmVwbHkge1xuKyAgICAgICAgICAgIHJlcG9ydC5pc19yZXBseSgpPztcbisgICAgICAgIH1cbisgICAgICAgIHJlcG9ydC5mbGFncyhzZWxmLmZsYWdzKT87XG4rICAgICAgICByZXBvcnQuY29kZShzZWxmLmNvZGUpPztcbisgICAgICAgIHJlcG9ydC5kYXRhX3NpemUoc2VsZi5kYXRhX3NpemUgYXMgdTMyKT87XG4rXG4rICAgICAgICByZXBvcnQubXVsdGljYXN0KDAsIEdGUF9LRVJORUwpPztcbisgICAgICAgIE9rKCgpKVxuKyAgICB9XG4gfVxuIFxuIHVzZSBjb3JlOjptZW06Om9mZnNldF9vZjtcbmRpZmYgLS1naXQgYS9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oIGIvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxuaW5kZXggMTEyNDc4NWUyMTBiMzAuLmVjOTZlODExNjEwZDcyIDEwMDY0NFxuLS0tIGEvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxuKysrIGIvcnVzdC9iaW5kaW5ncy9iaW5kaW5nc19oZWxwZXIuaFxuQEAgLTkzLDYgKzkzLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9ydXN0X3NhbXBsZS5oXHUwMDNlXG4gXG4gLypcbkBAIC0xMTAsNiArMTEyLDcgQEBcbiBjb25zdCBzaXplX3QgUlVTVF9DT05TVF9IRUxQRVJfQVJDSF9TTEFCX01JTkFMSUdOID0gQVJDSF9TTEFCX01JTkFMSUdOO1xuIGNvbnN0IHNpemVfdCBSVVNUX0NPTlNUX0hFTFBFUl9BUkNIX0tNQUxMT0NfTUlOQUxJR04gPSBBUkNIX0tNQUxMT0NfTUlOQUxJR047XG4gY29uc3Qgc2l6ZV90IFJVU1RfQ09OU1RfSEVMUEVSX1BBR0VfU0laRSA9IFBBR0VfU0laRTtcbitjb25zdCBzaXplX3QgUlVTVF9DT05TVF9IRUxQRVJfR0VOTE1TR19ERUZBVUxUX1NJWkUgPSBHRU5MTVNHX0RFRkFVTFRfU0laRTtcbiBjb25zdCBnZnBfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRlBfQVRPTUlDID0gR0ZQX0FUT01JQztcbiBjb25zdCBnZnBfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRlBfS0VSTkVMID0gR0ZQX0tFUk5FTDtcbiBjb25zdCBnZnBfdCBSVVNUX0NPTlNUX0hFTFBFUl9HRlBfS0VSTkVMX0FDQ09VTlQgPSBHRlBfS0VSTkVMX0FDQ09VTlQ7XG5kaWZmIC0tZ2l0IGEvcnVzdC9oZWxwZXJzL2hlbHBlcnMuYyBiL3J1c3QvaGVscGVycy9oZWxwZXJzLmNcbmluZGV4IDk5OGUzMTA1MmU2NjAxLi4xZDRlZTUxZjU3NmJlYiAxMDA2NDRcbi0tLSBhL3J1c3QvaGVscGVycy9oZWxwZXJzLmNcbisrKyBiL3J1c3QvaGVscGVycy9oZWxwZXJzLmNcbkBAIC03Miw2ICs3Miw3IEBAXG4gI2luY2x1ZGUgXCJtYXBsZV90cmVlLmNcIlxuICNpbmNsdWRlIFwibW0uY1wiXG4gI2luY2x1ZGUgXCJtdXRleC5jXCJcbisjaW5jbHVkZSBcIm5ldC9nZW5ldGxpbmsuY1wiXG4gI2luY2x1ZGUgXCJvZi5jXCJcbiAjaW5jbHVkZSBcInBhZ2UuY1wiXG4gI2luY2x1ZGUgXCJwY2kuY1wiXG5kaWZmIC0tZ2l0IGEvcnVzdC9oZWxwZXJzL25ldC9nZW5ldGxpbmsuYyBiL3J1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzUzMGI2OWY2Y2Y3MDdcbi0tLSAvZGV2L251bGxcbisrKyBiL3J1c3QvaGVscGVycy9uZXQvZ2VuZXRsaW5rLmNcbkBAIC0wLDAgKzEsNDYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEdvb2dsZSBMTEMuXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG4rXG4rI2lmZGVmIENPTkZJR19ORVRcbitcbitfX3J1c3RfaGVscGVyIHN0cnVjdCBza19idWZmICpydXN0X2hlbHBlcl9nZW5sbXNnX25ldyhzaXplX3QgcGF5bG9hZCwgZ2ZwX3QgZmxhZ3MpXG4re1xuK1x0cmV0dXJuIGdlbmxtc2dfbmV3KHBheWxvYWQsIGZsYWdzKTtcbit9XG4rXG4rX19ydXN0X2hlbHBlclxuK2ludCBydXN0X2hlbHBlcl9nZW5sbXNnX211bHRpY2FzdChjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSxcbitcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBvcnRpZCxcbitcdFx0XHRcdCAgdW5zaWduZWQgaW50IGdyb3VwLCBnZnBfdCBmbGFncylcbit7XG4rXHRyZXR1cm4gZ2VubG1zZ19tdWx0aWNhc3QoZmFtaWx5LCBza2IsIHBvcnRpZCwgZ3JvdXAsIGZsYWdzKTtcbit9XG4rXG4rX19ydXN0X2hlbHBlciB2b2lkIHJ1c3RfaGVscGVyX2dlbmxtc2dfY2FuY2VsKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcilcbit7XG4rXHRnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7XG4rfVxuK1xuK19fcnVzdF9oZWxwZXIgdm9pZCBydXN0X2hlbHBlcl9nZW5sbXNnX2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIpXG4re1xuK1x0Z2VubG1zZ19lbmQoc2tiLCBoZHIpO1xuK31cbitcbitfX3J1c3RfaGVscGVyIHZvaWQgcnVzdF9oZWxwZXJfbmxtc2dfZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdG5sbXNnX2ZyZWUoc2tiKTtcbit9XG4rXG4rX19ydXN0X2hlbHBlclxuK2ludCBydXN0X2hlbHBlcl9nZW5sX2hhc19saXN0ZW5lcnMoY29uc3Qgc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBncm91cClcbit7XG4rXHRyZXR1cm4gZ2VubF9oYXNfbGlzdGVuZXJzKGZhbWlseSwgbmV0LCBncm91cCk7XG4rfVxuK1xuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL25ldC5ycyBiL3J1c3Qva2VybmVsL25ldC9tb2QucnNcbnNpbWlsYXJpdHkgaW5kZXggODUlXG5yZW5hbWUgZnJvbSBydXN0L2tlcm5lbC9uZXQucnNcbnJlbmFtZSB0byBydXN0L2tlcm5lbC9uZXQvbW9kLnJzXG5pbmRleCBmZTQxNWNiMzY5ZDNhYy4uOGVjYWU3NTc3ZWQyOTUgMTAwNjQ0XG4tLS0gYS9ydXN0L2tlcm5lbC9uZXQucnNcbisrKyBiL3J1c3Qva2VybmVsL25ldC9tb2QucnNcbkBAIC00LDMgKzQsNSBAQFxuIFxuICNbY2ZnKENPTkZJR19SVVNUX1BIWUxJQl9BQlNUUkFDVElPTlMpXVxuIHB1YiBtb2QgcGh5O1xuK1xuK3B1YiBtb2QgbmV0bGluaztcbmRpZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5ycyBiL3J1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjIyZWYzZGRlMzZmYTFhXG4tLS0gL2Rldi9udWxsXG4rKysgYi9ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yc1xuQEAgLTAsMCArMSwzMzcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKy8vIENvcHlyaWdodCAoQykgMjAyNiBHb29nbGUgTExDLlxuK1xuKy8vISBSdXN0IHN1cHBvcnQgZm9yIGdlbmVyaWMgbmV0bGluay5cbisvLyFcbisvLyEgQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgZXhwb3NpbmcgbXVsdGljYXN0IGdyb3Vwcy5cbisvLyFcbisvLyEgQyBoZWFkZXI6IFtgaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmhgXShzcmN0cmVlL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oKVxuK1xuK3VzZSBrZXJuZWw6OntcbisgICAgYWxsb2M6OntzZWxmLCBBbGxvY0Vycm9yfSxcbisgICAgZXJyb3I6OnRvX3Jlc3VsdCxcbisgICAgcHJlbHVkZTo6KixcbisgICAgdHJhbnNtdXRlOjpBc0J5dGVzLFxuKyAgICB0eXBlczo6T3BhcXVlLFxuKyAgICBUaGlzTW9kdWxlLFxuK307XG4rXG4rdXNlIGNvcmU6OntcbisgICAgbWVtOjpNYW51YWxseURyb3AsXG4rICAgIHB0cjo6Tm9uTnVsbCwgLy9cbit9O1xuK1xuKy8vLyBUaGUgZGVmYXVsdCBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZS5cbitwdWIgY29uc3QgR0VOTE1TR19ERUZBVUxUX1NJWkU6IHVzaXplID0gYmluZGluZ3M6OkdFTkxNU0dfREVGQVVMVF9TSVpFO1xuK1xuKy8vLyBBIHdyYXBwZXIgYXJvdW5kIGBzdHJ1Y3Qgc2tfYnVmZmAgZm9yIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlcy5cbisvLy9cbisvLy8gVGhpcyB0eXBlIGlzIGludGVuZGVkIHRvIGJlIHNwZWNpZmljIGZvciBidWZmZXJzIHVzZWQgd2l0aCBuZXRsaW5rIG9ubHksIGFuZCBvdGhlciB1c2VjYXNlcyBmb3JcbisvLy8gYHN0cnVjdCBza19idWZmYCBhcmUgb3V0LW9mLXNjb3BlIGZvciB0aGlzIGFic3RyYWN0aW9uLlxuKy8vL1xuKy8vLyAjIEludmFyaWFudHNcbisvLy9cbisvLy8gVGhlIHBvaW50ZXIgaGFzIG93bmVyc2hpcCBvdmVyIGEgdmFsaWQgYHNrX2J1ZmZgLlxuK3B1YiBzdHJ1Y3QgTmV0bGlua1NrQnVmZiB7XG4rICAgIHNrYjogTm9uTnVsbFx1MDAzY2tlcm5lbDo6YmluZGluZ3M6OnNrX2J1ZmZcdTAwM2UsXG4rfVxuK1xuK2ltcGwgTmV0bGlua1NrQnVmZiB7XG4rICAgIC8vLyBDcmVhdGVzIGEgbmV3IGBOZXRsaW5rU2tCdWZmYCB3aXRoIHRoZSBnaXZlbiBzaXplLlxuKyAgICBwdWIgZm4gbmV3KHNpemU6IHVzaXplLCBmbGFnczogYWxsb2M6OkZsYWdzKSAtXHUwMDNlIFJlc3VsdFx1MDAzY05ldGxpbmtTa0J1ZmYsIEFsbG9jRXJyb3JcdTAwM2Uge1xuKyAgICAgICAgLy8gU0FGRVRZOiBgZ2VubG1zZ19uZXdgIG9ubHkgcmVxdWlyZXMgaXRzIGFyZ3VtZW50cyB0byBiZSB2YWxpZCBpbnRlZ2Vycy5cbisgICAgICAgIGxldCBza2IgPSB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19uZXcoc2l6ZSwgZmxhZ3MuYXNfcmF3KCkpIH07XG4rICAgICAgICBsZXQgc2tiID0gTm9uTnVsbDo6bmV3KHNrYikub2tfb3IoQWxsb2NFcnJvcik/O1xuKyAgICAgICAgT2soTmV0bGlua1NrQnVmZiB7IHNrYiB9KVxuKyAgICB9XG4rXG4rICAgIC8vLyBQdXRzIGEgZ2VuZXJpYyBuZXRsaW5rIGhlYWRlciBpbnRvIHRoZSBgTmV0bGlua1NrQnVmZmAuXG4rICAgIHB1YiBmbiBnZW5sbXNnX3B1dChcbisgICAgICAgIHNlbGYsXG4rICAgICAgICBwb3J0aWQ6IHUzMixcbisgICAgICAgIHNlcTogdTMyLFxuKyAgICAgICAgZmFtaWx5OiBcdTAwMjYnc3RhdGljIEZhbWlseSxcbisgICAgICAgIGNtZDogdTgsXG4rICAgICkgLVx1MDAzZSBSZXN1bHRcdTAwM2NHZW5sTXNnLCBBbGxvY0Vycm9yXHUwMDNlIHtcbisgICAgICAgIGxldCBza2IgPSBzZWxmLnNrYi5hc19wdHIoKTtcbisgICAgICAgIC8vIFNBRkVUWTogVGhlIHNrYiBhbmQgZmFtaWx5IHBvaW50ZXJzIGFyZSB2YWxpZC5cbisgICAgICAgIGxldCBoZHIgPSB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgZmFtaWx5LmFzX3JhdygpLCAwLCBjbWQpIH07XG4rICAgICAgICBsZXQgaGRyID0gTm9uTnVsbDo6bmV3KGhkcikub2tfb3IoQWxsb2NFcnJvcik/O1xuKyAgICAgICAgT2soR2VubE1zZyB7IHNrYjogc2VsZiwgaGRyIH0pXG4rICAgIH1cbit9XG4rXG4raW1wbCBEcm9wIGZvciBOZXRsaW5rU2tCdWZmIHtcbisgICAgZm4gZHJvcChcdTAwMjZtdXQgc2VsZikge1xuKyAgICAgICAgLy8gU0FGRVRZOiBXZSBoYXZlIG93bmVyc2hpcCBvdmVyIHRoZSBgc2tfYnVmZmAsIHNvIHdlIG1heSBmcmVlIGl0LlxuKyAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6Om5sbXNnX2ZyZWUoc2VsZi5za2IuYXNfcHRyKCkpIH1cbisgICAgfVxuK31cbitcbisvLy8gQSBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZSBiZWluZyBjb25zdHJ1Y3RlZC5cbisvLy9cbisvLy8gIyBJbnZhcmlhbnRzXG4rLy8vXG4rLy8vIGBoZHJgIHJlZmVyZW5jZXMgdGhlIGhlYWRlciBpbiB0aGlzIG5ldGxpbmsgbWVzc2FnZS5cbitwdWIgc3RydWN0IEdlbmxNc2cge1xuKyAgICBza2I6IE5ldGxpbmtTa0J1ZmYsXG4rICAgIGhkcjogTm9uTnVsbFx1MDAzY2Nfdm9pZFx1MDAzZSxcbit9XG4rXG4raW1wbCBHZW5sTXNnIHtcbisgICAgLy8vIFB1dHMgYW4gYXR0cmlidXRlIGludG8gdGhlIG1lc3NhZ2UuXG4rICAgICNbaW5saW5lXVxuKyAgICBmbiBwdXRcdTAwM2NUXHUwMDNlKFx1MDAyNm11dCBzZWxmLCBhdHRydHlwZTogY19pbnQsIHZhbHVlOiBcdTAwMjZUKSAtXHUwMDNlIFJlc3VsdFxuKyAgICB3aGVyZVxuKyAgICAgICAgVDogP1NpemVkICsgQXNCeXRlcyxcbisgICAge1xuKyAgICAgICAgbGV0IHNrYiA9IHNlbGYuc2tiLnNrYi5hc19wdHIoKTtcbisgICAgICAgIGxldCBsZW4gPSBzaXplX29mX3ZhbCh2YWx1ZSk7XG4rICAgICAgICBsZXQgcHRyID0gY29yZTo6cHRyOjpmcm9tX3JlZih2YWx1ZSkuY2FzdDo6XHUwMDNjY192b2lkXHUwMDNlKCk7XG4rICAgICAgICAvLyBTQUZFVFk6IGBza2JgIGlzIHZhbGlkIGJ5IGBOZXRsaW5rU2tCdWZmYCB0eXBlIGludmFyaWFudHMsIGFuZCB0aGUgcHJvdmlkZWQgdmFsdWUgaXNcbisgICAgICAgIC8vIHJlYWRhYmxlIGFuZCBpbml0aWFsaXplZCBmb3IgaXRzIGBzaXplX29mYCBieXRlcy5cbisgICAgICAgIHRvX3Jlc3VsdCh1bnNhZmUgeyBiaW5kaW5nczo6bmxhX3B1dChza2IsIGF0dHJ0eXBlLCBsZW4gYXMgY19pbnQsIHB0cikgfSlcbisgICAgfVxuK1xuKyAgICAvLy8gUHV0cyBhIGB1MzJgIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLlxuKyAgICAjW2lubGluZV1cbisgICAgcHViIGZuIHB1dF91MzIoXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6IHUzMikgLVx1MDAzZSBSZXN1bHQge1xuKyAgICAgICAgc2VsZi5wdXQoYXR0cnR5cGUsIFx1MDAyNnZhbHVlKVxuKyAgICB9XG4rXG4rICAgIC8vLyBQdXRzIGEgc3RyaW5nIGF0dHJpYnV0ZSBpbnRvIHRoZSBtZXNzYWdlLlxuKyAgICAjW2lubGluZV1cbisgICAgcHViIGZuIHB1dF9zdHJpbmcoXHUwMDI2bXV0IHNlbGYsIGF0dHJ0eXBlOiBjX2ludCwgdmFsdWU6IFx1MDAyNkNTdHIpIC1cdTAwM2UgUmVzdWx0IHtcbisgICAgICAgIHNlbGYucHV0KGF0dHJ0eXBlLCB2YWx1ZS50b19ieXRlc193aXRoX251bCgpKVxuKyAgICB9XG4rXG4rICAgIC8vLyBQdXRzIGEgZmxhZyBhdHRyaWJ1dGUgaW50byB0aGUgbWVzc2FnZS5cbisgICAgI1tpbmxpbmVdXG4rICAgIHB1YiBmbiBwdXRfZmxhZyhcdTAwMjZtdXQgc2VsZiwgYXR0cnR5cGU6IGNfaW50KSAtXHUwMDNlIFJlc3VsdCB7XG4rICAgICAgICBsZXQgc2tiID0gc2VsZi5za2Iuc2tiLmFzX3B0cigpO1xuKyAgICAgICAgLy8gU0FGRVRZOiBgc2tiYCBpcyB2YWxpZCBieSBgTmV0bGlua1NrQnVmZmAgdHlwZSBpbnZhcmlhbnRzLCBhbmQgYSBudWxsIHBvaW50ZXIgaXMgdmFsaWRcbisgICAgICAgIC8vIHdoZW4gdGhlIGxlbmd0aCBpcyB6ZXJvLlxuKyAgICAgICAgdG9fcmVzdWx0KHVuc2FmZSB7IGJpbmRpbmdzOjpubGFfcHV0KHNrYiwgYXR0cnR5cGUsIDAsIGNvcmU6OnB0cjo6bnVsbCgpKSB9KVxuKyAgICB9XG4rXG4rICAgIC8vLyBTZW5kcyB0aGUgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgYXMgYSBtdWx0aWNhc3QgbWVzc2FnZS5cbisgICAgI1tpbmxpbmVdXG4rICAgIHB1YiBmbiBtdWx0aWNhc3QoXG4rICAgICAgICBzZWxmLFxuKyAgICAgICAgZmFtaWx5OiBcdTAwMjYnc3RhdGljIEZhbWlseSxcbisgICAgICAgIHBvcnRpZDogdTMyLFxuKyAgICAgICAgZ3JvdXA6IHUzMixcbisgICAgICAgIGZsYWdzOiBhbGxvYzo6RmxhZ3MsXG4rICAgICkgLVx1MDAzZSBSZXN1bHQge1xuKyAgICAgICAgbGV0IG1lID0gTWFudWFsbHlEcm9wOjpuZXcoc2VsZik7XG4rICAgICAgICAvLyBTQUZFVFk6IFRoZSBgc2tiYCBhbmQgYGZhbWlseWAgcG9pbnRlcnMgYXJlIHZhbGlkLiBXZSBwYXNzIG93bmVyc2hpcCBvZiB0aGUgYHNrYmAgdG9cbisgICAgICAgIC8vIGBnZW5sbXNnX211bHRpY2FzdGAgYnkgbm90IGRyb3BwaW5nIGBzZWxmYC5cbisgICAgICAgIHVuc2FmZSB7XG4rICAgICAgICAgICAgYmluZGluZ3M6Omdlbmxtc2dfZW5kKG1lLnNrYi5za2IuYXNfcHRyKCksIG1lLmhkci5hc19wdHIoKSk7XG4rICAgICAgICAgICAgdG9fcmVzdWx0KGJpbmRpbmdzOjpnZW5sbXNnX211bHRpY2FzdChcbisgICAgICAgICAgICAgICAgZmFtaWx5LmFzX3JhdygpLFxuKyAgICAgICAgICAgICAgICBtZS5za2Iuc2tiLmFzX3B0cigpLFxuKyAgICAgICAgICAgICAgICBwb3J0aWQsXG4rICAgICAgICAgICAgICAgIGdyb3VwLFxuKyAgICAgICAgICAgICAgICBmbGFncy5hc19yYXcoKSxcbisgICAgICAgICAgICApKVxuKyAgICAgICAgfVxuKyAgICB9XG4rfVxuK2ltcGwgRHJvcCBmb3IgR2VubE1zZyB7XG4rICAgIGZuIGRyb3AoXHUwMDI2bXV0IHNlbGYpIHtcbisgICAgICAgIC8vIFNBRkVUWTogVGhlIGBoZHJgIHBvaW50ZXIgcmVmZXJlbmNlcyB0aGUgaGVhZGVyIG9mIHRoaXMgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UuXG4rICAgICAgICB1bnNhZmUgeyBiaW5kaW5nczo6Z2VubG1zZ19jYW5jZWwoc2VsZi5za2Iuc2tiLmFzX3B0cigpLCBzZWxmLmhkci5hc19wdHIoKSkgfTtcbisgICAgfVxuK31cbitcbisvLy8gRmxhZ3MgZm9yIGEgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseS5cbitzdHJ1Y3QgRmFtaWx5RmxhZ3Mge1xuKyAgICAvLy8gV2hldGhlciB0aGUgZmFtaWx5IHN1cHBvcnRzIG5ldHdvcmsgbmFtZXNwYWNlcy5cbisgICAgbmV0bnNvazogYm9vbCxcbisgICAgLy8vIFdoZXRoZXIgdGhlIGZhbWlseSBzdXBwb3J0cyBwYXJhbGxlbCBvcGVyYXRpb25zLlxuKyAgICBwYXJhbGxlbF9vcHM6IGJvb2wsXG4rfVxuK1xuK2ltcGwgRmFtaWx5RmxhZ3Mge1xuKyAgICAvLy8gQ29udmVydHMgdGhlIGZsYWdzIHRvIHRoZSBiaXRmaWVsZCByZXByZXNlbnRhdGlvbiB1c2VkIGJ5IGBnZW5sX2ZhbWlseWAuXG4rICAgIGNvbnN0IGZuIGludG9fYml0ZmllbGQoc2VsZikgLVx1MDAzZSBiaW5kaW5nczo6X19CaW5kZ2VuQml0ZmllbGRVbml0XHUwMDNjW3U4OyAxXVx1MDAzZSB7XG4rICAgICAgICAvLyBUaGUgYmVsb3cgc2hpZnRzIGFyZSB2ZXJpZmllZCBjb3JyZWN0IGJ5IHRlc3RfZmFtaWx5X2ZsYWdzX2JpdGZpZWxkKCkgYmVsb3cuXG4rICAgICAgICAvL1xuKyAgICAgICAgLy8gQWx0aG91Z2ggYmluZGdlbiBnZW5lcmF0ZXMgaGVscGVycyB0byBjaGFuZ2UgYml0ZmllbGRzIGJhc2VkIG9uIHRoZSBDIGhlYWRlcnMsIHRoZXNlXG4rICAgICAgICAvLyBoZWxwZXJzIHVuZm9ydHVuYXRlbHkgY2FuJ3QgYmUgdXNlZCBpbiBjb25zdCBjb250ZXh0LiBTaW5jZSBgRmFtaWx5YCBuZWVkcyB0byBiZSBmaWxsZWRcbisgICAgICAgIC8vIG91dCBhdCBidWlsZC10aW1lLCB3ZSB1c2UgdGhpcyBoZWxwZXIgaW5zdGVhZC5cbisgICAgICAgIGxldCBtdXQgYml0cyA9IDA7XG4rICAgICAgICBpZiBzZWxmLm5ldG5zb2sge1xuKyAgICAgICAgICAgIGJpdHMgfD0gMSBcdTAwM2NcdTAwM2MgMDtcbisgICAgICAgIH1cbisgICAgICAgIGlmIHNlbGYucGFyYWxsZWxfb3BzIHtcbisgICAgICAgICAgICBiaXRzIHw9IDEgXHUwMDNjXHUwMDNjIDE7XG4rICAgICAgICB9XG4rICAgICAgICAvLyBDb252ZXJ0IGZyb20gbGl0dGxlIGVuZGlhbiB0byB0aGUgdGFyZ2V0J3MgZW5kaWFubmVzcy5cbisgICAgICAgIGJpdHMgPSB1ODo6ZnJvbV9sZShiaXRzKTtcbisgICAgICAgIC8vIFNBRkVUWTogVGhpcyBiaXRmaWVsZCBpcyByZXByZXNlbnRlZCBhcyBhbiB1OC5cbisgICAgICAgIHVuc2FmZSB7IGNvcmU6Om1lbTo6dHJhbnNtdXRlOjpcdTAwM2N1OCwgYmluZGluZ3M6Ol9fQmluZGdlbkJpdGZpZWxkVW5pdFx1MDAzY1t1ODsgMV1cdTAwM2VcdTAwM2UoYml0cykgfVxuKyAgICB9XG4rfVxuK1xuKy8vLyBBIGdlbmVyaWMgbmV0bGluayBmYW1pbHkuXG4rI1tyZXByKHRyYW5zcGFyZW50KV1cbitwdWIgc3RydWN0IEZhbWlseSB7XG4rICAgIGlubmVyOiBPcGFxdWVcdTAwM2NiaW5kaW5nczo6Z2VubF9mYW1pbHlcdTAwM2UsXG4rfVxuK1xuKy8vIFNBRkVUWTogVGhlIGBGYW1pbHlgIHR5cGUgaXMgdGhyZWFkIHNhZmUuXG4rdW5zYWZlIGltcGwgU3luYyBmb3IgRmFtaWx5IHt9XG4rXG4raW1wbCBGYW1pbHkge1xuKyAgICAvLy8gQ3JlYXRlcyBhIG5ldyBgRmFtaWx5YCBpbnN0YW5jZS5cbisgICAgLy8vXG4rICAgIC8vLyBJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20gY29uc3QgY29udGV4dCBvbmx5LiBXaWxsIHBhbmljIGlmIHByb3ZpZGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHMuXG4rICAgIC8vL1xuKyAgICAvLy8gVGhlIG5hbWUgbXVzdCBiZSBhIG51bC10ZXJtaW5hdGVkIHN0cmluZywgYnV0IGl0IGlzIHRha2VuIGFzIGBcdTAwMjZbdThdYCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkXG4rICAgIC8vLyBtb3JlIGNvbnZlbmllbnRseSB3aXRoIHRoZSBzdHJpbmdzIGdlbmVyYXRlZCBieSBiaW5kZ2VuLlxuKyAgICBwdWIgY29uc3QgZm4gY29uc3RfbmV3KFxuKyAgICAgICAgbW9kdWxlOiBcdTAwMjZUaGlzTW9kdWxlLFxuKyAgICAgICAgbmFtZTogXHUwMDI2W3U4XSxcbisgICAgICAgIHZlcnNpb246IHUzMixcbisgICAgICAgIG1jZ3JwczogXHUwMDI2J3N0YXRpYyBbTXVsdGljYXN0R3JvdXBdLFxuKyAgICApIC1cdTAwM2UgRmFtaWx5IHtcbisgICAgICAgIGxldCBuX21jZ3JwcyA9IG1jZ3Jwcy5sZW4oKSBhcyB1ODtcbisgICAgICAgIGlmIG5fbWNncnBzIGFzIHVzaXplICE9IG1jZ3Jwcy5sZW4oKSB7XG4rICAgICAgICAgICAgcGFuaWMhKFwidG9vIG1hbnkgbWNncnBzXCIpO1xuKyAgICAgICAgfVxuKyAgICAgICAgbGV0IG11dCBnZW5sX2ZhbWlseSA9IGJpbmRpbmdzOjpnZW5sX2ZhbWlseSB7XG4rICAgICAgICAgICAgdmVyc2lvbixcbisgICAgICAgICAgICBfYml0ZmllbGRfMTogRmFtaWx5RmxhZ3Mge1xuKyAgICAgICAgICAgICAgICBuZXRuc29rOiB0cnVlLFxuKyAgICAgICAgICAgICAgICBwYXJhbGxlbF9vcHM6IHRydWUsXG4rICAgICAgICAgICAgfVxuKyAgICAgICAgICAgIC5pbnRvX2JpdGZpZWxkKCksXG4rICAgICAgICAgICAgbW9kdWxlOiBtb2R1bGUuYXNfcHRyKCksXG4rICAgICAgICAgICAgbWNncnBzOiBtY2dycHMuYXNfcHRyKCkuY2FzdCgpLFxuKyAgICAgICAgICAgIG5fbWNncnBzLFxuKyAgICAgICAgICAgIC4ucGluX2luaXQ6Onplcm9lZCgpXG4rICAgICAgICB9O1xuKyAgICAgICAgaWYgQ1N0cjo6ZnJvbV9ieXRlc193aXRoX251bChuYW1lKS5pc19lcnIoKSB7XG4rICAgICAgICAgICAgcGFuaWMhKFwiZ2VubF9mYW1pbHkgbmFtZSBub3QgbnVsLXRlcm1pbmF0ZWRcIik7XG4rICAgICAgICB9XG4rICAgICAgICBpZiBnZW5sX2ZhbWlseS5uYW1lLmxlbigpIFx1MDAzYyBuYW1lLmxlbigpIHtcbisgICAgICAgICAgICBwYW5pYyEoXCJnZW5sX2ZhbWlseSBuYW1lIHRvbyBsb25nXCIpO1xuKyAgICAgICAgfVxuKyAgICAgICAgbGV0IG11dCBpID0gMDtcbisgICAgICAgIHdoaWxlIGkgXHUwMDNjIG5hbWUubGVuKCkge1xuKyAgICAgICAgICAgIGdlbmxfZmFtaWx5Lm5hbWVbaV0gPSBuYW1lW2ldO1xuKyAgICAgICAgICAgIGkgKz0gMTtcbisgICAgICAgIH1cbisgICAgICAgIEZhbWlseSB7XG4rICAgICAgICAgICAgaW5uZXI6IE9wYXF1ZTo6bmV3KGdlbmxfZmFtaWx5KSxcbisgICAgICAgIH1cbisgICAgfVxuK1xuKyAgICAvLy8gQ2hlY2tzIGlmIHRoZXJlIGFyZSBhbnkgbGlzdGVuZXJzIGZvciB0aGUgZ2l2ZW4gbXVsdGljYXN0IGdyb3VwLlxuKyAgICBwdWIgZm4gaGFzX2xpc3RlbmVycyhcdTAwMjZzZWxmLCBncm91cDogdTMyKSAtXHUwMDNlIGJvb2wge1xuKyAgICAgICAgLy8gU0FGRVRZOiBUaGUgZmFtaWx5IGFuZCBpbml0X25ldCBwb2ludGVycyBhcmUgdmFsaWQuXG4rICAgICAgICB1bnNhZmUge1xuKyAgICAgICAgICAgIGJpbmRpbmdzOjpnZW5sX2hhc19saXN0ZW5lcnMoc2VsZi5hc19yYXcoKSwgXHUwMDI2cmF3IG11dCBiaW5kaW5nczo6aW5pdF9uZXQsIGdyb3VwKSAhPSAwXG4rICAgICAgICB9XG4rICAgIH1cbitcbisgICAgLy8vIFJldHVybnMgYSByYXcgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBgZ2VubF9mYW1pbHlgIHN0cnVjdHVyZS5cbisgICAgcHViIGZuIGFzX3JhdyhcdTAwMjZzZWxmKSAtXHUwMDNlICptdXQgYmluZGluZ3M6OmdlbmxfZmFtaWx5IHtcbisgICAgICAgIHNlbGYuaW5uZXIuZ2V0KClcbisgICAgfVxuK31cbitcbisvLy8gQSBnZW5lcmljIG5ldGxpbmsgbXVsdGljYXN0IGdyb3VwLlxuKyNbcmVwcih0cmFuc3BhcmVudCldXG4rcHViIHN0cnVjdCBNdWx0aWNhc3RHcm91cCB7XG4rICAgIC8vIE5vIE9wYXF1ZSBiZWNhdXNlIGZ1bGx5IGltbXV0YWJsZVxuKyAgICBncm91cDogYmluZGluZ3M6OmdlbmxfbXVsdGljYXN0X2dyb3VwLFxuK31cbitcbisvLyBTQUZFVFk6IFB1cmUgZGF0YSBzbyB0aHJlYWQgc2FmZS5cbit1bnNhZmUgaW1wbCBTeW5jIGZvciBNdWx0aWNhc3RHcm91cCB7fVxuK1xuK2ltcGwgTXVsdGljYXN0R3JvdXAge1xuKyAgICAvLy8gQ3JlYXRlcyBhIG5ldyBgTXVsdGljYXN0R3JvdXBgIGluc3RhbmNlLlxuKyAgICAvLy9cbisgICAgLy8vIEludGVuZGVkIHRvIGJlIHVzZWQgZnJvbSBjb25zdCBjb250ZXh0IG9ubHkuIFdpbGwgcGFuaWMgaWYgcHJvdmlkZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50cy5cbisgICAgcHViIGNvbnN0IGZuIGNvbnN0X25ldyhuYW1lOiBcdTAwMjZDU3RyKSAtXHUwMDNlIE11bHRpY2FzdEdyb3VwIHtcbisgICAgICAgIGxldCBtdXQgZ3JvdXA6IGJpbmRpbmdzOjpnZW5sX211bHRpY2FzdF9ncm91cCA9IHBpbl9pbml0Ojp6ZXJvZWQoKTtcbitcbisgICAgICAgIGxldCBuYW1lID0gbmFtZS50b19ieXRlc193aXRoX251bCgpO1xuKyAgICAgICAgaWYgZ3JvdXAubmFtZS5sZW4oKSBcdTAwM2MgbmFtZS5sZW4oKSB7XG4rICAgICAgICAgICAgcGFuaWMhKFwiZ2VubF9tdWx0aWNhc3RfZ3JvdXAgbmFtZSB0b28gbG9uZ1wiKTtcbisgICAgICAgIH1cbisgICAgICAgIGxldCBtdXQgaSA9IDA7XG4rICAgICAgICB3aGlsZSBpIFx1MDAzYyBuYW1lLmxlbigpIHtcbisgICAgICAgICAgICBncm91cC5uYW1lW2ldID0gbmFtZVtpXTtcbisgICAgICAgICAgICBpICs9IDE7XG4rICAgICAgICB9XG4rXG4rICAgICAgICBNdWx0aWNhc3RHcm91cCB7IGdyb3VwIH1cbisgICAgfVxuK31cbitcbisvLy8gQSByZWdpc3RyYXRpb24gb2YgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LlxuKy8vL1xuKy8vLyBUaGlzIHR5cGUgcmVwcmVzZW50cyB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgW2BGYW1pbHlgXS4gV2hlbiBhbiBpbnN0YW5jZSBvZiB0aGlzIHR5cGUgaXNcbisvLy8gZHJvcHBlZCwgaXRzIHJlc3BlY3RpdmUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSB3aWxsIGJlIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBzeXN0ZW0uXG4rLy8vXG4rLy8vICMgSW52YXJpYW50c1xuKy8vL1xuKy8vLyBgc2VsZi5mYW1pbHlgIGFsd2F5cyBob2xkcyBhIHZhbGlkIHJlZmVyZW5jZSB0byBhbiBpbml0aWFsaXplZCBhbmQgcmVnaXN0ZXJlZCBbYEZhbWlseWBdLlxuK3B1YiBzdHJ1Y3QgUmVnaXN0cmF0aW9uIHtcbisgICAgZmFtaWx5OiBcdTAwMjYnc3RhdGljIEZhbWlseSxcbit9XG4rXG4raW1wbCBGYW1pbHkge1xuKyAgICAvLy8gUmVnaXN0ZXJzIHRoZSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5IHdpdGggdGhlIGtlcm5lbC5cbisgICAgcHViIGZuIHJlZ2lzdGVyKFx1MDAyNidzdGF0aWMgc2VsZikgLVx1MDAzZSBSZXN1bHRcdTAwM2NSZWdpc3RyYXRpb25cdTAwM2Uge1xuKyAgICAgICAgLy8gU0FGRVRZOiBgc2VsZi5hc19yYXcoKWAgaXMgYSB2YWxpZCBwb2ludGVyIHRvIGEgYGdlbmxfZmFtaWx5YCBzdHJ1Y3QuXG4rICAgICAgICAvLyBUaGUgYGdlbmxfZmFtaWx5YCBzdHJ1Y3QgaXMgc3RhdGljLCBzbyBpdCB3aWxsIG91dGxpdmUgdGhlIHJlZ2lzdHJhdGlvbi5cbisgICAgICAgIHRvX3Jlc3VsdCh1bnNhZmUgeyBiaW5kaW5nczo6Z2VubF9yZWdpc3Rlcl9mYW1pbHkoc2VsZi5hc19yYXcoKSkgfSk/O1xuKyAgICAgICAgT2soUmVnaXN0cmF0aW9uIHsgZmFtaWx5OiBzZWxmIH0pXG4rICAgIH1cbit9XG4rXG4raW1wbCBEcm9wIGZvciBSZWdpc3RyYXRpb24ge1xuKyAgICBmbiBkcm9wKFx1MDAyNm11dCBzZWxmKSB7XG4rICAgICAgICAvLyBTQUZFVFk6IGBzZWxmLmZhbWlseS5hc19yYXcoKWAgaXMgYSB2YWxpZCBwb2ludGVyIHRvIGEgcmVnaXN0ZXJlZCBgZ2VubF9mYW1pbHlgIHN0cnVjdC5cbisgICAgICAgIC8vIFRoZSBgUmVnaXN0cmF0aW9uYCBzdHJ1Y3QgZW5zdXJlcyB0aGF0IGBnZW5sX3VucmVnaXN0ZXJfZmFtaWx5YCBpcyBjYWxsZWQgZXhhY3RseSBvbmNlXG4rICAgICAgICAvLyBmb3IgdGhpcyBmYW1pbHkgd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZS5cbisgICAgICAgIHVuc2FmZSB7IGJpbmRpbmdzOjpnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KHNlbGYuZmFtaWx5LmFzX3JhdygpKSB9O1xuKyAgICB9XG4rfVxuK1xuKyNbbWFjcm9zOjprdW5pdF90ZXN0cyhydXN0X25ldGxpbmspXVxuK21vZCB0ZXN0cyB7XG4rICAgIHVzZSBzdXBlcjo6KjtcbitcbisgICAgI1t0ZXN0XVxuKyAgICBmbiB0ZXN0X2ZhbWlseV9mbGFnc19iaXRmaWVsZCgpIHtcbisgICAgICAgIGZvciBuZXRuc29rIGluIFtmYWxzZSwgdHJ1ZV0ge1xuKyAgICAgICAgICAgIGZvciBwYXJhbGxlbF9vcHMgaW4gW2ZhbHNlLCB0cnVlXSB7XG4rICAgICAgICAgICAgICAgIGxldCBtdXQgYl9mYW0gPSBiaW5kaW5nczo6Z2VubF9mYW1pbHkge1xuKyAgICAgICAgICAgICAgICAgICAgLi5EZWZhdWx0OjpkZWZhdWx0KClcbisgICAgICAgICAgICAgICAgfTtcbisgICAgICAgICAgICAgICAgYl9mYW0uc2V0X25ldG5zb2soaWYgbmV0bnNvayB7IDEgfSBlbHNlIHsgMCB9KTtcbisgICAgICAgICAgICAgICAgYl9mYW0uc2V0X3BhcmFsbGVsX29wcyhpZiBwYXJhbGxlbF9vcHMgeyAxIH0gZWxzZSB7IDAgfSk7XG4rXG4rICAgICAgICAgICAgICAgIGxldCBjX2JpdGZpZWxkID0gRmFtaWx5RmxhZ3Mge1xuKyAgICAgICAgICAgICAgICAgICAgbmV0bnNvayxcbisgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsX29wcyxcbisgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgICAgICAuaW50b19iaXRmaWVsZCgpO1xuK1xuKyAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IFRoZSBiaXQgZmllbGQgaXMgc3RvcmVkIGFzIHU4LlxuKyAgICAgICAgICAgICAgICBsZXQgYl92YWw6IHU4ID0gdW5zYWZlIHsgY29yZTo6bWVtOjp0cmFuc211dGUoYl9mYW0uX2JpdGZpZWxkXzEpIH07XG4rICAgICAgICAgICAgICAgIC8vIFNBRkVUWTogVGhlIGJpdCBmaWVsZCBpcyBzdG9yZWQgYXMgdTguXG4rICAgICAgICAgICAgICAgIGxldCBjX3ZhbDogdTggPSB1bnNhZmUgeyBjb3JlOjptZW06OnRyYW5zbXV0ZShjX2JpdGZpZWxkKSB9O1xuKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKGJfdmFsLCBjX3ZhbCk7XG4rICAgICAgICAgICAgfVxuKyAgICAgICAgfVxuKyAgICB9XG4rfVxuZGlmZiAtLWdpdCBhL3J1c3QvdWFwaS91YXBpX2hlbHBlci5oIGIvcnVzdC91YXBpL3VhcGlfaGVscGVyLmhcbmluZGV4IDA2ZDdkMWEyZThkYWJhLi44NmM3YjZiMjg0YjA1YSAxMDA2NDRcbi0tLSBhL3J1c3QvdWFwaS91YXBpX2hlbHBlci5oXG4rKysgYi9ydXN0L3VhcGkvdWFwaV9oZWxwZXIuaFxuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2RybS9ub3ZhX2RybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9kcm0vcGFudGhvcl9kcm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYW5kcm9pZC9iaW5kZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYW5kcm9pZC9iaW5kZXJfbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21paS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9ldGh0b29sLmhcdTAwM2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU1OjU1LjYzNzg4MzgxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODcxMDU0MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmluZGVyIE5ldGxpbmsgUmVwb3J0aW5nIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgaW50cm9kdWNlcyBuZXRsaW5rIHJlcG9ydGluZyBmb3IgQW5kcm9pZCBCaW5kZXIsIHNwZWNpZmljYWxseSB1c2luZyBSdXN0LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBsb29rcyBzb2xpZDsgaXQgc2VlbXMgdG8gYmUgYSBmdW5jdGlvbmFsIGFkZGl0aW9uLCBhZGRpbmcgbXVsdGljYXN0IHJlcG9ydGluZyBmb3IgdHJhbnNhY3Rpb24gZmFpbHVyZXMsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCdzIHRpZWQgdG8gdGhlIFJ1c3QgYmluZGVyIGltcGxlbWVudGF0aW9uLCBzbyB0aGF0J3MgdGhlIGFuZ2xlLlxuXG5UaGUgb2J2aW91cyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgLCB3aGljaCBoaW5nZXMgb24gYFJVU1QgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgTkVUIFx1MDAyNlx1MDAyNiAhQU5EUk9JRF9CSU5ERVJfSVBDYC4gU28sIHRvIGdldCB0aGlzIHdvcmtpbmcsIHRoYXQncyB3aGF0IHdlIG5lZWQgZW5hYmxlZC5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gRnJvbSB0aGUgcGF0Y2gsIEkgc2VlIHNldmVyYWwga2V5IGFkZGl0aW9ucy4gVGhlcmUncyBgUmVwb3J0OjpuZXdgLCBgUmVwb3J0OjptdWx0aWNhc3RgLCBgUmVwb3J0OjplcnJvcmAsIGV0Yy4sIG92ZXIgaW4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5yc2AuIEluIGBkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzYCwgd2UndmUgZ290IGBUcmFuc2FjdGlvbkluZm86OnJlcG9ydF9uZXRsaW5rYCBhbmQgYFRyYW5zYWN0aW9uSW5mbzo6cmVwb3J0X25ldGxpbmtfaW5uZXJgLiBBbmQsIGZpbmFsbHksIGluIGBydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yc2AsIHdlIGhhdmUgYE5ldGxpbmtTa0J1ZmY6Om5ld2AsIGBOZXRsaW5rU2tCdWZmOjpnZW5sbXNnX3B1dGAsIGFuZCBgR2VubE1zZzo6cHV0X3UzMmAsIGFtb25nIG90aGVycy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHN5bWJvbCBuYW1lcyBmb3Igc3l6a2FsbGVyLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLiBJIG5lZWQgdG8gdXNlIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgb3IgYGdyZXBwZXJgIHRvIGZpbmQgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWVzIGluIHRoZSBjb21waWxlZCBSdXN0IGNvZGUuIEknbSB3b25kZXJpbmcgaWYgc3l6a2FsbGVyIHVzZXMgdGhlIG1hbmdsZWQgb3IgZGVtYW5nbGVkIG5hbWVzLiBVc3VhbGx5LCB0aGUgZGVtYW5nbGVkIG5hbWVzIG9yIHRoZSBDIGZ1bmN0aW9ucyB3b3VsZCB3b3JrLiBIb3dldmVyLCBiZWNhdXNlIHRoaXMgaXMgUnVzdCwgdGhlIHN5bWJvbHMgbWlnaHQgYmUgbWFuZ2xlZC4gSXQgbG9va3MgbGlrZSBzeXprYWxsZXIgY2FuIG1hdGNoIGRlbWFuZ2xlZCBuYW1lcyBvciB3ZSBjYW4gcHJvdmlkZSB0aGUgc291cmNlIGZpbGUgbmFtZXMgb3IgUnVzdCBmdW5jdGlvbiBuYW1lcyBsaWtlIGByZXBvcnRfbmV0bGlua19pbm5lcmAsIGByZXBvcnRfbmV0bGlua2AsIGBtdWx0aWNhc3RgLCBgZ2VubG1zZ19wdXRgLlxuXG5MZXQncyBjaGVjayB0aGUgZXhhY3Qgc3ltYm9sIG5hbWVzIGluIFJ1c3QuIEFjdHVhbGx5LCBgRm9jdXNTeW1ib2xzYCBjYW4gYmUganVzdCB0aGUgZnVuY3Rpb24gbmFtZXMgbGlrZSBgcmVwb3J0X25ldGxpbmtfaW5uZXJgLCBgcmVwb3J0X25ldGxpbmtgLCBgdHJhbnNhY3Rpb25gLCBgcmVwbHlfaW5uZXJgLlxuV2FpdCwgYHRyYW5zYWN0aW9uYCBhbmQgYHJlcGx5X2lubmVyYCBhcmUgaW4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzYC5cbkhlcmUncyB3aGF0IEkgY2FuIHNlZTpcbmBgYHJ1c3RcbiAgICBmbiB0cmFuc2FjdGlvbihzZWxmOiBcdTAwMjZBcmNcdTAwM2NTZWxmXHUwMDNlLCBjbWQ6IHUzMiwgcmVhZGVyOiBcdTAwMjZtdXQgVXNlclNsaWNlUmVhZGVyKSAtXHUwMDNlIFJlc3Vcbi4uLlxuICAgIGZuIHJlcGx5X2lubmVyKHNlbGY6IFx1MDAyNkFyY1x1MDAzY1NlbGZcdTAwM2UsIGluZm86IFx1MDAyNm11dCBUcmFuc2FjdGlvbkluZm8pIC1cdTAwM2UgQmluZGVyUmVzdWx0IHtcbmBgYFxuTG9va3MgbGlrZSB0aGVzZSBhcmUgbWV0aG9kcyBvZiBgVGhyZWFkYCBvciBzaW1pbGFyLiBMZXQncyBjaGVjayBgZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5yc2A6XG5gYGBydXN0XG4gICAgcHViKGNyYXRlKSBmbiByZXBvcnRfbmV0bGluayhcdTAwMjZzZWxmLCByZXBseTogdTMyLCBjdHg6IFx1MDAyNmNyYXRlOjpDb250ZXh0KSB7XG4uLi5cbiAgICBmbiByZXBvcnRfbmV0bGlua19pbm5lcihcdTAwMjZzZWxmLCByZXBseTogdTMyLCBjdHg6IFx1MDAyNmNyYXRlOjpDb250ZXh0KSAtXHUwMDNlIGtlcm5lbDo6ZXJyb3I6OlJlc3VsdCB7XG5gYGBcblRoZW4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5yc2A6XG5gYGBydXN0XG4gICAgcHViIGZuIG5ldyhcbi4uLlxuICAgIHB1YiBmbiBtdWx0aWNhc3Qoc2VsZiwgcG9ydGlkOiB1MzIsIGZsYWdzOiBrZXJuZWw6OmFsbG9jOjpGbGFncykgLVx1MDAzZSBSZXN1bHQge1xuYGBgXG5BbmQgZmluYWxseSBgcnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnNgOlxuYGBgcnVzdFxuICAgIHB1YiBmbiBuZXcoc2l6ZTogdXNpemUsIGZsYWdzOiBhbGxvYzo6RmxhZ3MpIC1cdTAwM2UgUmVzdWx0XHUwMDNjTmV0bGlua1NrQnVmZiwgQWxsb2NFcnJvclx1MDAzZSB7XG4uLi5cbiAgICBwdWIgZm4gZ2VubG1zZ19wdXQoXG4uLi5cbiAgICBwdWIgZm4gcHV0X3UzMihcdTAwMjZtdXQgc2VsZiwgYXR0cnR5cGU6IGNfaW50LCB2YWx1ZTogdTMyKSAtXHUwMDNlIFJlc3VsdCB7XG4uLi5cbiAgICBwdWIgZm4gbXVsdGljYXN0KFxuYGBgXG5JJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZSB0aGUgcmlnaHQgc3ltYm9sIG5hbWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUwMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU2OjA3LjUwODk0MTYxMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAxNjI3NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm4gcmVwb3J0X25ldGxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5yc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzPTUzPSAgICBwdWIoY3JhdGUpIGZuIGlzX29uZXdheShcXHUwMDI2c2VsZikgLVxcdTAwM2UgYm9vbCB7XFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzLTU2LVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdHJhbnNhY3Rpb24ucnM6NTc6ICAgIHB1YihjcmF0ZSkgZm4gcmVwb3J0X25ldGxpbmsoXFx1MDAyNnNlbGYsIHJlcGx5OiB1MzIsIGN0eDogXFx1MDAyNmNyYXRlOjpDb250ZXh0KSB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5ycy01OC0gICAgICAgIGlmIGxldCBFcnIoZXJyKSA9IHNlbGYucmVwb3J0X25ldGxpbmtfaW5uZXIocmVwbHksIGN0eCkge1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5ycy02Ni1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RyYW5zYWN0aW9uLnJzOjY3OiAgICBmbiByZXBvcnRfbmV0bGlua19pbm5lcihcXHUwMDI2c2VsZiwgcmVwbHk6IHUzMiwgY3R4OiBcXHUwMDI2Y3JhdGU6OkNvbnRleHQpIC1cXHUwMDNlIGtlcm5lbDo6ZXJyb3I6OlJlc3VsdCB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90cmFuc2FjdGlvbi5ycy02OC0gICAgICAgIGlmICFSZXBvcnQ6Omhhc19saXN0ZW5lcnMoKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU2OjA3LjYzOTExOTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzEzNzY1Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIE5ldGxpbmsgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIE5ldGxpbmstcmVsYXRlZCBmdW5jdGlvbnM6IGByZXBvcnRfbmV0bGlua2AsIGByZXBvcnRfbmV0bGlua19pbm5lcmAsIGB0cmFuc2FjdGlvbmAsIGFuZCBgcmVwbHlfaW5uZXJgLiBTZWVtcyBsaWtlIGEgZmFpcmx5IHN0YW5kYXJkIE5ldGxpbmsgc2V0dXAsIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBtZXNzYWdlIGhhbmRsaW5nIGFuZCBwZXJoYXBzIHNvbWUga2luZCBvZiB0cmFuc2FjdGlvbmFsIGFwcHJvYWNoLiBMZXQgbWUgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBob3cgdGhleSdyZSBoYW5kbGluZyBHZW5lcmljIE5ldGxpbmsgbWVzc2FnaW5nLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBob3cgdGhleSBwdXQgdG9nZXRoZXIgdGhlIG1lc3NhZ2VzLiBJJ20gZ29pbmcgdG8gbG9vayB1cCB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBgZ2VubG1zZ19wdXRgIGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhhbmRsaW5nIG11bHRpY2FzdCBjb21tdW5pY2F0aW9uIHdpdGhpbiB0aGUgTmV0bGluayBmcmFtZXdvcmsuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yc2AgZmlsZTsgdGhpcyB3aWxsIGxpa2VseSBjb250YWluIHRoZSBsb3dlci1sZXZlbCBOZXRsaW5rIGJpbmRpbmdzIGFuZCB1dGlsaXR5IGZ1bmN0aW9ucy4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaG93IHRoZSBmdW5jdGlvbnMgdGllIGludG8gTmV0bGluaydzIG1lc3NhZ2UgZnJhbWluZyBhbmQgZGVsaXZlcnkgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoxMC45NTI4ODczNzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NjYwNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZuIGdlbmxtc2dfcHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInJ1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInJ1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzPTQyPSAgICBwdWIgZm4gbmV3KHNpemU6IHVzaXplLCBmbGFnczogYWxsb2M6OkZsYWdzKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjTmV0bGlua1NrQnVmZiwgQWxsb2NFcnJvclxcdTAwM2Uge1xcbi0tXFxucnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnMtNDktICAgIC8vLyBQdXRzIGEgZ2VuZXJpYyBuZXRsaW5rIGhlYWRlciBpbnRvIHRoZSBgTmV0bGlua1NrQnVmZmAuXFxucnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnM6NTA6ICAgIHB1YiBmbiBnZW5sbXNnX3B1dChcXG5ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5ycy01MS0gICAgICAgIHNlbGYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU2OjExLjA2MjU1NTQ2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzg4NzgyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE5ldGxpbmsgTXVsdGljYXN0IGluIHRoZSBSdXN0IEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgbXVsdGljYXN0IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBSdXN0IGtlcm5lbCdzIE5ldGxpbmsgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBydXN0L2tlcm5lbC9uZXQvbmV0bGluay5yc2AgZmlsZS4gSXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGZvciB0aGUgY29yZSBtdWx0aWNhc3QgZnVuY3Rpb25hbGl0eSBhbmQgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGlzIGZpbGUsIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBhbnkgbWVudGlvbnMgb3IgaW1wbGVtZW50YXRpb25zIHJlbGF0ZWQgdG8gXCJtdWx0aWNhc3QuXCIgSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBob3cgbXVsdGljYXN0IGdyb3VwIG1hbmFnZW1lbnQsIG1lc3NhZ2Ugcm91dGluZywgYW5kIHNvY2tldCBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbGwgYmUgbG9va2luZyBmb3Igd2VsbC1kZWZpbmVkIHBhdHRlcm5zIGFuZCBpZGlvbWF0aWMgUnVzdCBjb2RlIHVzYWdlLCBob3BpbmcgZm9yIGNsYXJpdHkgYW5kIGVmZmljaWVuY3kuIEknbSByZWFkeSB0byBwYXJzZSB0aGUgY29kZSBhbmQgcmVidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTQwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTc6NTY6MTUuNDAxNDQwNTM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjQzNTg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbiBtdWx0aWNhc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwicnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwicnVzdC9rZXJuZWwvbmV0L25ldGxpbmsucnM9MTExPSAgICBwdWIgZm4gcHV0X2ZsYWcoXFx1MDAyNm11dCBzZWxmLCBhdHRydHlwZTogY19pbnQpIC1cXHUwMDNlIFJlc3VsdCB7XFxuLS1cXG5ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5ycy0xMTktICAgICNbaW5saW5lXVxcbnJ1c3Qva2VybmVsL25ldC9uZXRsaW5rLnJzOjEyMDogICAgcHViIGZuIG11bHRpY2FzdChcXG5ydXN0L2tlcm5lbC9uZXQvbmV0bGluay5ycy0xMjEtICAgICAgICBzZWxmLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoxNS41NTM4ODYyODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQyNTAzODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIE15IE5ldGxpbmsgUmVwb3J0aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIHB1dHRpbmcgdG9nZXRoZXIgdGhlIGBGb2N1c1N5bWJvbHNgIHN0cnVjdHVyZSBhbmQgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYWxsIHRoZSBlc3NlbnRpYWwgbmV0bGluayByZXBvcnRpbmcgZnVuY3Rpb25zLiBJJ3ZlIGRlY2lkZWQgb24gaW5jbHVkaW5nIGByZXBvcnRfbmV0bGlua2AsIGByZXBvcnRfbmV0bGlua19pbm5lcmAsIGBnZW5sbXNnX3B1dGAsIGFuZCBgbXVsdGljYXN0YC4gV2FpdCBhIG1pbnV0ZSwgKm11bHRpY2FzdCogaXMgYSBwcmV0dHkgZ2VuZXJpYyB0ZXJtOyBpdCBjb3VsZCBsZWFkIHRvIGFtYmlndWl0eS4gVGhpbmtpbmcgc3RyYXRlZ2ljYWxseSwgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBzdGljayB3aXRoIHRoZSBtb3JlIGRlc2NyaXB0aXZlIGFuZCBwcm9qZWN0LXNwZWNpZmljIG5hbWVzLiBJ4oCZbGwgZ28gd2l0aCB0aGUgbW9yZSBleHBsaWNpdCBgcmVwb3J0X25ldGxpbmtfaW5uZXJgIGFuZCBgcmVwb3J0X25ldGxpbmtgIGFmdGVyIGFsbC4gVGhhdCBmZWVscyBjbGVhbmVyIGFuZCBsZXNzIHByb25lIHRvIGNvbmZ1c2lvbiBkb3duIHRoZSBsaW5lLlxuXG5Db25zZXF1ZW50bHksIEkgbmVlZCB0byBtYWtlIHNvbWUgYWRqdXN0bWVudHMuIEknbGwgbmVlZCB0byBtb2RpZnkgdGhlIGB0cmFuc2FjdGlvbmAgYW5kIGByZXBseV9pbm5lcmAgZnVuY3Rpb25zIHRvIGNhbGwgdGhlIGByZXBvcnRfbmV0bGlua2AgZnVuY3Rpb24uIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGVpciBpbXBsZW1lbnRhdGlvbnMuIFRvIGRvIHRoYXQsIEknbGwgbmVlZCB0byBsb29rIGluIGBkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yc2AgYXMgdGhhdCdzIHdoZXJlIHRoZXkgc2hvdWxkIGJlIGRlZmluZWQuIExldCdzIHNlZSBpZiB0aG9zZSBhZGp1c3RtZW50cyBhcmUgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI4OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoxOS40OTYzOTMxMzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODQ4MzE2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbiB0cmFuc2FjdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycz0xMjE0PSAgICBmbiByZWFkX3RyYW5zYWN0aW9uX2luZm8oXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycy0xMjQ5LSAgICAjW2lubGluZShuZXZlcildXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnM6MTI1MDogICAgZm4gdHJhbnNhY3Rpb24oc2VsZjogXFx1MDAyNkFyY1xcdTAwM2NTZWxmXFx1MDAzZSwgY21kOiB1MzIsIHJlYWRlcjogXFx1MDAyNm11dCBVc2VyU2xpY2VSZWFkZXIpIC1cXHUwMDNlIFJlc3VsdFxcdTAwM2MoKVxcdTAwM2Uge1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvdGhyZWFkLnJzLTEyNTEtICAgICAgICBsZXQgbXV0IGluZm8gPSBUcmFuc2FjdGlvbkluZm86Onplcm9lZCgpO1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci90aHJlYWQucnMtMTI5OC1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5yczoxMjk5OiAgICBmbiB0cmFuc2FjdGlvbl9pbm5lcihzZWxmOiBcXHUwMDI2QXJjXFx1MDAzY1NlbGZcXHUwMDNlLCBpbmZvOiBcXHUwMDI2bXV0IFRyYW5zYWN0aW9uSW5mbykgLVxcdTAwM2UgQmluZGVyUmVzdWx0IHtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3RocmVhZC5ycy0xMzAwLSAgICAgICAgbGV0IG5vZGVfcmVmID0gc2VsZi5wcm9jZXNzLmdldF90cmFuc2FjdGlvbl9ub2RlKGluZm8udGFyZ2V0X2hhbmRsZSk/O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoxOS42NTQ4ODQ2OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5MjA1Mjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEJpbmRlciBOZXRsaW5rIENvZGUqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldGxpbmsgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIEFuZHJvaWQgYmluZGVyIGRyaXZlci4gTXkgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIGFuZCBtdWx0aWNhc3QgaGFuZGxpbmcuIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzYC4gSSdsbCBiZSBob21pbmcgaW4gb24gdGhlIGBuZXdgIGZ1bmN0aW9uLCBhcyB0aGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBuZXRsaW5rIHNvY2tldCBvciByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBhcmUgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoZW4sIEknbGwgbW92ZSBvbiB0byBgbXVsdGljYXN0YCwgc2luY2UgdGhhdCBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGdyb3VwIGNvbW11bmljYXRpb25zLiBUaGF0IHNob3VsZCBwcm92aWRlIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG5ldGxpbmsgY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoyMy4xNDY5NDE4MTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjgzMTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbiBtdWx0aWNhc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5ycz0zND0gICAgcHViIGZuIG5ldyhcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvbmV0bGluay5ycy00Ni0gICAgLy8vIEJyb2FkY2FzdCB0aGlzIG1lc3NhZ2UuXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzOjQ3OiAgICBwdWIgZm4gbXVsdGljYXN0KHNlbGYsIHBvcnRpZDogdTMyLCBmbGFnczoga2VybmVsOjphbGxvYzo6RmxhZ3MpIC1cXHUwMDNlIFJlc3VsdCB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9uZXRsaW5rLnJzLTQ4LSAgICAgICAgc2VsZi5za2IubXVsdGljYXN0KFxcdTAwMjZCSU5ERVJfTkxfRkFNSUxZLCBwb3J0aWQsIDAsIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoyMy4yNjk3Nzk3MzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4NTc3MDI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBCaW5kZXIgSVBDIGluIFJ1c3QqKlxuXG5Pa2F5LCBzbyBJJ20gdXBkYXRpbmcgbXkgYEZvY3VzU3ltYm9sc2AgbGlzdCBmb3IgdGhlIEJpbmRlciBJUEMgUnVzdCBleHBsb3JhdGlvbi4gSSBuZWVkIHRvIGdldCB0aGUga2V5IGZ1bmN0aW9ucyBpZGVudGlmaWVkIGZvciB0aGUgZnV6emVyLiBJJ20gYWRkaW5nIGByZXBvcnRfbmV0bGlua19pbm5lcmAsIGByZXBvcnRfbmV0bGlua2AsIGB0cmFuc2FjdGlvbmAsIGFuZCBgcmVwbHlfaW5uZXJgLiBIbW0sIGhvbGQgb24uIGB0cmFuc2FjdGlvbmAgYW5kIGByZXBseV9pbm5lcmAgYXJlIGEgYml0IHRvbyBnZW5lcmljLiBXaGlsZSB0aGV5ICphcmUqIGp1c3QgYHRyYW5zYWN0aW9uYCBpbiB0aGUgUnVzdCBjb2RlLCBjb3VsZCBJIG1ha2UgdGhlbSBtb3JlIHNwZWNpZmljLCBsaWtlIGBiaW5kZXJfdHJhbnNhY3Rpb25gIG9yIHNvbWV0aGluZz8gIFVsdGltYXRlbHksIGBUcmFuc2FjdGlvbkluZm86OnJlcG9ydF9uZXRsaW5rX2lubmVyYCBtYXkgYmUgdGhlIHRpY2tldC4gU3l6a2FsbGVyIGxldmVyYWdlcyBzdWJzdHJpbmcgbWF0Y2hpbmcsIHNvIGByZXBvcnRfbmV0bGlua19pbm5lcmAgc2hvdWxkIGJlIGRpc3RpbmN0aXZlIGVub3VnaC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBgcmVwb3J0X25ldGxpbmtfaW5uZXJgIGlzLCBpbiBmYWN0LCB1bmlxdWUuIFllcCwgZ29vZCB0byBnby5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucywgc3BlY2lmaWNhbGx5IHRvIGVuc3VyZSBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgIGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQ2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU2OjI3LjQ1NTU1MzUxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MzQ5MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBTkRST0lEX0JJTkRFUl9JUENfUlVTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2FuZHJvaWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FuZHJvaWQvS2NvbmZpZz00PWNvbmZpZyBBTkRST0lEX0JJTkRFUl9JUENcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvYW5kcm9pZC9LY29uZmlnOjE3OmNvbmZpZyBBTkRST0lEX0JJTkRFUl9JUENfUlVTVFxcbmRyaXZlcnMvYW5kcm9pZC9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIlJ1c3QgdmVyc2lvbiBvZiBBbmRyb2lkIEJpbmRlciBJUEMgRHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNzo1NjoyNy41NjI5MTQ3MjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2ODYwNzYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJ1c3QtQmFzZWQgQmluZGVyIElQQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgLiBUaGUgZGVwZW5kZW5jaWVzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgUlVTVCBcdTAwMjZcdTAwMjYgTU1VIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2ICFBTkRST0lEX0JJTkRFUl9JUENgLiBTZWVtcyBsb2dpY2FsLiBFc3NlbnRpYWxseSwgd2UgbmVlZCBSdXN0IHN1cHBvcnQsIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQsIE5ldHdvcmsgZnVuY3Rpb25hbGl0eSwgYW5kIGltcG9ydGFudGx5LCB3ZSdyZSAqbm90KiB1c2luZyB0aGUgbGVnYWN5IEFuZHJvaWQgQmluZGVyIElQQy4gR2l2ZW4gdGhhdCB0aGUgYE5FVGAgZGVwZW5kZW5jeSBpcyB1c3VhbGx5IGFscmVhZHkgaGFuZGxlZCBpbiBtb3N0IHNldHVwcywgYW5kIFJ1c3QgaXMsIG9mIGNvdXJzZSwgZXNzZW50aWFsLCBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgIHJlYWxseSBpcyB0aGUga2V5IHBpZWNlIGhlcmUuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlICpvbmx5KiBuZWNlc3NhcnkgY29uZmlnIGZvciB0aGUgUnVzdC1iYXNlZCBpbXBsZW1lbnRhdGlvbi4gSG1tLCBhbmQgeWVzLCBJIHNlZSB0aGF0IHRoZSBgcnVzdF9oZWxwZXJfZ2VubG1zZ19uZXdgIGZ1bmN0aW9uIGluIGBydXN0L2hlbHBlcnMvbmV0L2dlbmV0bGluay5jYCBuZWVkcyBgQ09ORklHX05FVGAsIGJ1dCB0aGF0IHJlcXVpcmVtZW50IGlzIGFscmVhZHkgY292ZXJlZCBieSB0aGUgYE5FVGAgZGVwZW5kZW5jeSBvZiBgQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RgLCBzbyBhbGwgZ29vZCB0aGVyZS5cblxuQWxyaWdodCwgc28gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGlzIGdvaW5nIHRvIGJlIGEgc2ltcGxlIG9uZTogYFtcIkFORFJPSURfQklOREVSX0lQQ19SVVNUXCJdYC5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IHdlIHNob3VsZCBiZSBmdXp6aW5nLiBPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGl0IGFkZHMgYSBuZXcgbmV0bGluayBmYW1pbHkgc3BlY2lmaWNhbGx5IGZvciBCaW5kZXIsIGFuZCByZXBvcnRzIHRyYW5zYWN0aW9uIGZhaWx1cmVzLiBUaGF0IGRlZmluaXRlbHkgaW5kaWNhdGVzIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaW50ZXJhY3Rpb24gd2l0aCBib3RoIGJpbmRlciBhbmQgbmV0bGluayBpcyByZXF1aXJlZCB0byByZWFjaCBpdC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiB0aGVzZSByZXN1bHRzLiBUaW1lIHRvIGZpbmFsaXplIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzQzLCJPdXRwdXRUb2tlbnMiOjk4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE3OjU2OjM0LjIzMTUyNTAzNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzkxOTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQU5EUk9JRF9CSU5ERVJfSVBDX1JVU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZXBvcnRfbmV0bGlua19pbm5lclwiLFxuICAgIFwicmVwb3J0X25ldGxpbmtcIixcbiAgICBcImdlbmxtc2dfcHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBuZXRsaW5rIG11bHRpY2FzdCByZXBvcnRpbmcgZm9yIEFuZHJvaWQgQmluZGVyIHRyYW5zYWN0aW9uIGZhaWx1cmVzIGluIFJ1c3QuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBmb3IgY29uc3RydWN0aW5nIGFuZCBicm9hZGNhc3RpbmcgbmV0bGluayBtZXNzYWdlcyB3aGVuIGJpbmRlciB0cmFuc2FjdGlvbnMgZmFpbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBTkRST0lEX0JJTkRFUl9JUENfUlVTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcG9ydF9uZXRsaW5rX2lubmVyXCIsXG4gICAgXCJyZXBvcnRfbmV0bGlua1wiLFxuICAgIFwiZ2VubG1zZ19wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIG5ldGxpbmsgbXVsdGljYXN0IHJlcG9ydGluZyBmb3IgQW5kcm9pZCBCaW5kZXIgdHJhbnNhY3Rpb24gZmFpbHVyZXMgaW4gUnVzdC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGZvciBjb25zdHJ1Y3RpbmcgYW5kIGJyb2FkY2FzdGluZyBuZXRsaW5rIG1lc3NhZ2VzIHdoZW4gYmluZGVyIHRyYW5zYWN0aW9ucyBmYWlsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowsm4km[1] Phase: Succeeded StartedAt: 2026-07-07 17:56:46 +0000 UTC FinishedAt: 2026-07-07 17:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 17:56:46 +0000 UTC FinishedAt: 2026-07-07 17:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2] Phase: Succeeded StartedAt: 2026-07-07 17:56:46 +0000 UTC FinishedAt: 2026-07-07 19:07:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 17:56:46 +0000 UTC FinishedAt: 2026-07-07 19:07:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 17:56:46 +0000 UTC FinishedAt: 2026-07-07 17:56:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 17:56:46 +0000 UTC FinishedAt: 2026-07-07 17:56:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-convert-artifact-1868498801/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 17:56:56 +0000 UTC FinishedAt: 2026-07-07 18:37:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 17:56:56 +0000 UTC FinishedAt: 2026-07-07 18:37:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f13d34fa-8c72-4194-adce-2fc22405948e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-convert-artifact-1868498801/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "bfce0d70-2a72-4621-99be-5a98e9492d24", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-build-action-2613690783/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 17:56:56 +0000 UTC FinishedAt: 2026-07-07 18:37:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f13d34fa-8c72-4194-adce-2fc22405948e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-convert-artifact-1868498801/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "bfce0d70-2a72-4621-99be-5a98e9492d24", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-build-action-2613690783/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 18:37:31 +0000 UTC FinishedAt: 2026-07-07 18:37:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 18:37:31 +0000 UTC FinishedAt: 2026-07-07 18:37:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 18:37:31 +0000 UTC FinishedAt: 2026-07-07 18:37:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 18:37:31 +0000 UTC FinishedAt: 2026-07-07 18:37:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-convert-artifact-547937988/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 18:37:42 +0000 UTC FinishedAt: 2026-07-07 18:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 18:37:42 +0000 UTC FinishedAt: 2026-07-07 18:39:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bfce0d70-2a72-4621-99be-5a98e9492d24,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-build-action-2613690783/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 18:39:49 +0000 UTC FinishedAt: 2026-07-07 18:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 18:39:49 +0000 UTC FinishedAt: 2026-07-07 18:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 18:39:49 +0000 UTC FinishedAt: 2026-07-07 19:02:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 18:39:49 +0000 UTC FinishedAt: 2026-07-07 19:02:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f13d34fa-8c72-4194-adce-2fc22405948e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-convert-artifact-547937988/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e94f0068-38ae-4ab7-9cb6-c2467a28f344", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-build-action-2417952464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 18:39:49 +0000 UTC FinishedAt: 2026-07-07 19:02:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f13d34fa-8c72-4194-adce-2fc22405948e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-convert-artifact-547937988/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e94f0068-38ae-4ab7-9cb6-c2467a28f344", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-build-action-2417952464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-07 19:02:12 +0000 UTC FinishedAt: 2026-07-07 19:02:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-07 19:02:12 +0000 UTC FinishedAt: 2026-07-07 19:02:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-07 19:02:12 +0000 UTC FinishedAt: 2026-07-07 19:04:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-07 19:02:12 +0000 UTC FinishedAt: 2026-07-07 19:04:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e94f0068-38ae-4ab7-9cb6-c2467a28f344,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-build-action-2417952464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-07 19:04:19 +0000 UTC FinishedAt: 2026-07-07 19:07:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-07 19:04:19 +0000 UTC FinishedAt: 2026-07-07 19:07:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*bfce0d70-2a72-4621-99be-5a98e9492d24,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e94f0068-38ae-4ab7-9cb6-c2467a28f344,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-build-action-2613690783/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-build-action-2417952464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-07 19:04:19 +0000 UTC FinishedAt: 2026-07-07 19:04:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-07 19:04:19 +0000 UTC FinishedAt: 2026-07-07 19:04:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-convert-artifact-2217400013/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-07 19:04:19 +0000 UTC FinishedAt: 2026-07-07 19:04:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-07 19:04:19 +0000 UTC FinishedAt: 2026-07-07 19:04:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-07 19:04:19 +0000 UTC FinishedAt: 2026-07-07 19:04:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-07 19:04:29 +0000 UTC FinishedAt: 2026-07-07 19:07:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm4km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["report_netlink_inner","report_netlink","genlmsg_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["ANDROID_BINDER_IPC_RUST"],"series_id":"8ef05d45-b447-4cc7-b29d-275b27bada18","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-07 19:04:29 +0000 UTC FinishedAt: 2026-07-07 19:07:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bfce0d70-2a72-4621-99be-5a98e9492d24,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e94f0068-38ae-4ab7-9cb6-c2467a28f344,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-build-action-2613690783/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-build-action-2417952464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsm4km/series-workflowsm4km-convert-artifact-2217400013/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}