Name: series-workflow6j67m Phase: Succeeded StartedAt: 2026-08-20 06:08:44 +0000 UTC FinishedAt: 2026-08-20 09:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[0] Phase: Succeeded StartedAt: 2026-08-20 06:08:44 +0000 UTC FinishedAt: 2026-08-20 06:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 06:08:44 +0000 UTC FinishedAt: 2026-08-20 06:11:35 +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": "564973a259ec76f2dad0853420e7034cc43994c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING" ], "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": "564973a259ec76f2dad0853420e7034cc43994c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING" ], "series_id": "370e99e3-ddb5-4043-95f9-4e31ae35f11b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_alb_initialize", "bond_alb_deinitialize", "bond_alb_monitor" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2FsYl9pbml0aWFsaXplJiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX2RlaW5pdGlhbGl6ZSYjMzQ7LAogICAgJiMzNDtib25kX2FsYl9tb25pdG9yJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIEFMQiAoQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcpIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgZGF0YSByYWNlcy4gSXQgY2hhbmdlcyBsb2FkIHRyYWNraW5nIHZhcmlhYmxlcyAoYHR4X2J5dGVzYCwgYGxvYWRfaGlzdG9yeWAsIGBsb2FkYCkgZnJvbSBgdTMyYCB0byBgdTY0YCBhbmQgaW50cm9kdWNlcyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgaXMgYWxsb2NhdGVkIHZpYSBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAsIHdoaWNoIGluaGVyZW50bHkgemVyb2VzIHRoZSBhbGxvY2F0ZWQgcGVyLUNQVSBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgdXNlIHBlcmNwdSBzdGF0cyBmb3IgbG9hZCBiYWxhbmNpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGFmZmVjdCBjb3JlIGJvbmRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmOTIyNWQxMjJmY2YyZWE2YTEyZWExZjU3ODE3ZjM4YTMwYTg1ZjdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDY6MDk6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5pbmRleCA4MzlmNzQ4MmRjMTgyLi4zNzJkYjU0ODAzZDM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbkBAIC03NCw4ICYjNDM7NzUsOCBAQCBzdGF0aWMgaW5saW5lIHU4IF9zaW1wbGVfaGFzaChjb25zdCB1OCAqaGFzaF9zdGFydCwgaW50IGhhc2hfc2l6ZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2luaXRfdGFibGVfZW50cnkoc3RydWN0IHRsYl9jbGllbnRfaW5mbyAqZW50cnksIGludCBzYXZlX2xvYWQpXG4ge1xuIFx0aWYgKHNhdmVfbG9hZCkge1xuLVx0XHRlbnRyeS1cdTAwM2Vsb2FkX2hpc3RvcnkgPSAxICYjNDM7IGVudHJ5LVx1MDAzZXR4X2J5dGVzIC9cbi1cdFx0XHRcdCAgICAgIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTDtcbiYjNDM7XHRcdGVudHJ5LVx1MDAzZWxvYWRfaGlzdG9yeSA9IDEgJiM0MzsgZGl2X3U2NChlbnRyeS1cdTAwM2V0eF9ieXRlcyxcbiYjNDM7XHRcdFx0XHQgICAgICBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUwpO1xuIFx0XHRlbnRyeS1cdTAwM2V0eF9ieXRlcyA9IDA7XG4gXHR9XG4gXG5AQCAtMTMzLDYgJiM0MzsxMzQsMTAgQEAgc3RhdGljIGludCB0bGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdGlmICghbmV3X2hhc2h0YmwpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQgPSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzKTtcbiYjNDM7XHRpZiAoIWJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuIFxuIFx0Ym9uZF9pbmZvLVx1MDAzZXR4X2hhc2h0YmwgPSBuZXdfaGFzaHRibDtcbkBAIC0xNDMsNiAmIzQzOzE0OCwxMCBAQCBzdGF0aWMgaW50IHRsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0a2ZyZWUobmV3X2hhc2h0YmwpO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbiAvKiBNdXN0IGJlIGNhbGxlZCBvbmx5IGFmdGVyIGFsbCBzbGF2ZXMgaGF2ZSBiZWVuIHJlbGVhc2VkICovXG5AQCAtMTU0LDMxICYjNDM7MTYzLDQ0IEBAIHN0YXRpYyB2b2lkIHRsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXG4gXHRrZnJlZShib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCk7XG4gXHRib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCA9IE5VTEw7XG4mIzQzO1x0ZnJlZV9wZXJjcHUoYm9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCk7XG4mIzQzO1x0Ym9uZF9pbmZvLVx1MDAzZXByZXZfdG90YWxfdW5iYWxhbmNlZCA9IDA7XG4gXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gfVxuIFxuLXN0YXRpYyBsb25nIGxvbmcgY29tcHV0ZV9nYXAoc3RydWN0IHNsYXZlICpzbGF2ZSlcbiYjNDM7c3RhdGljIHU2NCBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuIHtcbi1cdHJldHVybiAoczY0KSAoc2xhdmUtXHUwMDNlc3BlZWQgXHUwMDNjXHUwMDNjIDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovXG4tXHQgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkIFx1MDAzY1x1MDAzYyAzKTsgLyogQnl0ZXMgdG8gYml0cyAqL1xuJiM0MztcdHU2NCBzbGF2ZV9sb2FkID0gU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXHUwMDNjXHUwMDNjIDM7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbiYjNDM7XHR1MzIgcmF3X3NwZWVkID0gUkVBRF9PTkNFKHNsYXZlLVx1MDAzZXNwZWVkKTtcbiYjNDM7XHR1NjQgc3BlZWQgPSAodTY0KXJhd19zcGVlZCBcdTAwM2NcdTAwM2MgMjA7IC8qIENvbnZlcnQgdG8gYml0cyBwZXIgc2VjICovXG4mIzQzO1xuJiM0MztcdC8qIEl0JiMzOTtzIG1lYW5pbmdsZXNzIHRvIGNvbXBhcmUgZ2FwIG9uIHVua25vd24gc3BlZWQgTklDICovXG4mIzQzO1x0aWYgKHJhd19zcGVlZCA9PSAodTMyKVNQRUVEX1VOS05PV04pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogU2tpcCBzbGF2ZSB3aGljaCBpcyBvdmVyIGxvYWRlZCAqL1xuJiM0MztcdGlmIChzcGVlZCBcdTAwM2M9IHNsYXZlX2xvYWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNwZWVkIC0gc2xhdmVfbG9hZDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4ge1xuIFx0c3RydWN0IHNsYXZlICpzbGF2ZSwgKmxlYXN0X2xvYWRlZDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4tXHRsb25nIGxvbmcgbWF4X2dhcDtcbiYjNDM7XHR1NjQgbWF4X2dhcCA9IDA7XG4gXG4gXHRsZWFzdF9sb2FkZWQgPSBOVUxMO1xuLVx0bWF4X2dhcCA9IExMT05HX01JTjtcbiBcbiBcdC8qIEZpbmQgdGhlIHNsYXZlIHdpdGggdGhlIGxhcmdlc3QgZ2FwICovXG4gXHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xuIFx0XHRpZiAoYm9uZF9zbGF2ZV9jYW5fdHgoc2xhdmUpKSB7XG4tXHRcdFx0bG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTtcbiYjNDM7XHRcdFx0dTY0IGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTtcbiBcbi1cdFx0XHRpZiAobWF4X2dhcCBcdTAwM2MgZ2FwKSB7XG4mIzQzO1x0XHRcdC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIG9uZSBhdmFpbGFibGUgc2xhdmUgKi9cbiYjNDM7XHRcdFx0aWYgKG1heF9nYXAgXHUwMDNjPSBnYXApIHtcbiBcdFx0XHRcdGxlYXN0X2xvYWRlZCA9IHNsYXZlO1xuIFx0XHRcdFx0bWF4X2dhcCA9IGdhcDtcbiBcdFx0XHR9XG5AQCAtMTM0NCw4ICYjNDM7MTM2NiwxNCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdGlmICghdHhfc2xhdmUpIHtcbiBcdFx0LyogdW5iYWxhbmNlZCBvciB1bmFzc2lnbmVkLCBzZW5kIHRocm91Z2ggcHJpbWFyeSAqL1xuIFx0XHR0eF9zbGF2ZSA9IHJjdV9kZXJlZmVyZW5jZShib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKTtcbi1cdFx0aWYgKGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKVxuLVx0XHRcdGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQgJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyAqcGNwdV9sb2FkO1xuJiM0MztcbiYjNDM7XHRcdFx0cGNwdV9sb2FkID0gdGhpc19jcHVfcHRyKGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQpO1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnBjcHVfbG9hZC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2cGNwdV9sb2FkLVx1MDAzZXR4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cGNwdV9sb2FkLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7XG5AQCAtMTUyOSw2ICYjNDM7MTU1NywyOSBAQCBuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbiBcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHU2NCByZXNldF91bmJhbGFuY2VkX2xvYWQoc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbylcbiYjNDM7e1xuJiM0MztcdHU2NCBkZWx0YSwgdHhfYnl0ZXMsIHRvdGFsX2J5dGVzID0gMDtcbiYjNDM7XHRzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzICpwO1xuJiM0MztcdHVuc2lnbmVkIGludCBzdGFydDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbiYjNDM7XHRcdHAgPSBwZXJfY3B1X3B0cihib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkLCBpKTtcbiYjNDM7XHRcdGRvIHtcbiYjNDM7XHRcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2cC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRcdHR4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2cC1cdTAwM2V0eF9ieXRlcyk7XG4mIzQzO1x0XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2cC1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbiYjNDM7XG4mIzQzO1x0XHR0b3RhbF9ieXRlcyAmIzQzOz0gdHhfYnl0ZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZWx0YSA9IHRvdGFsX2J5dGVzIC0gYm9uZF9pbmZvLVx1MDAzZXByZXZfdG90YWxfdW5iYWxhbmNlZDtcbiYjNDM7XHRib25kX2luZm8tXHUwMDNlcHJldl90b3RhbF91bmJhbGFuY2VkID0gdG90YWxfYnl0ZXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkaXZfdTY0KGRlbHRhLCBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUwpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJvbmRpbmcsXG5AQCAtMTU3MSwxMCAmIzQzOzE2MjIsMTEgQEAgdm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0Ym9uZF9mb3JfZWFjaF9zbGF2ZV9yY3UoYm9uZCwgc2xhdmUsIGl0ZXIpIHtcbiBcdFx0XHR0bGJfY2xlYXJfc2xhdmUoYm9uZCwgc2xhdmUsIDEpO1xuIFx0XHRcdGlmIChzbGF2ZSA9PSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbi1cdFx0XHRcdFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkID1cbi1cdFx0XHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCAvXG4tXHRcdFx0XHRcdFx0Qk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMO1xuLVx0XHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCA9IDA7XG4mIzQzO1x0XHRcdFx0dTY0IG5ld19sb2FkID0gcmVzZXRfdW5iYWxhbmNlZF9sb2FkKGJvbmRfaW5mbyk7XG4mIzQzO1xuJiM0MztcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4mIzQzO1x0XHRcdFx0U0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgPSBuZXdfbG9hZDtcbiYjNDM7XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGF0b21pY19zZXQoXHUwMDI2Ym9uZF9pbmZvLVx1MDAzZXR4X3JlYmFsYW5jZV9jb3VudGVyLCAwKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ib25kX2FsYi5oIGIvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaFxuaW5kZXggZTU5NDU0MjdmMzhkZC4uMzJmMTk4MTAzM2U0YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmhcbkBAIC01NywxMiAmIzQzOzU3LDEyIEBAIHN0cnVjdCB0bGJfY2xpZW50X2luZm8ge1xuIFx0XHRcdFx0ICogcGFja2V0cyB0byBhIENsaWVudCB0aGF0IHRoZSBIYXNoIGZ1bmN0aW9uXG4gXHRcdFx0XHQgKiBnYXZlIHRoaXMgZW50cnkgaW5kZXguXG4gXHRcdFx0XHQgKi9cbi1cdHUzMiB0eF9ieXRlcztcdFx0LyogRWFjaCBDbGllbnQgYWNjdW11bGF0ZXMgdGhlIEJ5dGVzVHggdGhhdFxuJiM0MztcdHU2NCB0eF9ieXRlcztcdFx0LyogRWFjaCBDbGllbnQgYWNjdW11bGF0ZXMgdGhlIEJ5dGVzVHggdGhhdFxuIFx0XHRcdFx0ICogd2VyZSB0cmFuc21pdHRlZCB0byBpdCwgYW5kIGFmdGVyIGVhY2hcbiBcdFx0XHRcdCAqIENhbGxCYWNrIHRoZSBMb2FkSGlzdG9yeSBpcyBkaXZpZGVkXG4gXHRcdFx0XHQgKiBieSB0aGUgYmFsYW5jZSBpbnRlcnZhbFxuIFx0XHRcdFx0ICovXG4tXHR1MzIgbG9hZF9oaXN0b3J5O1x0LyogVGhpcyBmaWVsZCBjb250YWlucyB0aGUgYW1vdW50IG9mIEJ5dGVzXG4mIzQzO1x0dTY0IGxvYWRfaGlzdG9yeTtcdC8qIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIGFtb3VudCBvZiBCeXRlc1xuIFx0XHRcdFx0ICogdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHRvIHRoaXMgY2xpZW50IGJ5XG4gXHRcdFx0XHQgKiB0aGUgc2VydmVyIG9uIHRoZSBwcmV2aW91cyBiYWxhbmNlXG4gXHRcdFx0XHQgKiBpbnRlcnZhbCBpbiBCcHMuXG5AQCAtMTE4LDE0ICYjNDM7MTE4LDIwIEBAIHN0cnVjdCB0bGJfc2xhdmVfaW5mbyB7XG4gXHRcdFx0ICogYXJlIHRoZSBlbnRyaWVzIHRoYXQgd2VyZSBhc3NpZ25lZCB0byB1c2UgdGhpc1xuIFx0XHRcdCAqIHNsYXZlIGZvciB0cmFuc21pdC5cbiBcdFx0XHQgKi9cbi1cdHUzMiBsb2FkO1x0LyogRWFjaCBzbGF2ZSBzdW1zIHRoZSBsb2FkSGlzdG9yeSBvZiBhbGwgY2xpZW50c1xuJiM0MztcdHU2NCBsb2FkO1x0LyogRWFjaCBzbGF2ZSBzdW1zIHRoZSBsb2FkSGlzdG9yeSBvZiBhbGwgY2xpZW50c1xuIFx0XHRcdCAqIGFzc2lnbmVkIHRvIGl0XG4gXHRcdFx0ICovXG4gfTtcbiBcbiYjNDM7c3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyB7XG4mIzQzO1x0dTY0X3N0YXRzX3RcdFx0dHhfYnl0ZXM7XG4mIzQzO1x0c3RydWN0IHU2NF9zdGF0c19zeW5jXHRzeW5jcDtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGFsYl9ib25kX2luZm8ge1xuIFx0c3RydWN0IHRsYl9jbGllbnRfaW5mb1x0KnR4X2hhc2h0Ymw7IC8qIER5bmFtaWNhbGx5IGFsbG9jYXRlZCAqL1xuLVx0dTMyXHRcdFx0dW5iYWxhbmNlZF9sb2FkO1xuJiM0MztcdHN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgX19wZXJjcHVcdCp1bmJhbGFuY2VkX2xvYWQ7XG4mIzQzO1x0dTY0XHRcdFx0cHJldl90b3RhbF91bmJhbGFuY2VkO1xuIFx0YXRvbWljX3RcdFx0dHhfcmViYWxhbmNlX2NvdW50ZXI7XG4gXHRpbnRcdFx0XHRscF9jb3VudGVyO1xuIFx0LyogLS0tLS0tLS0gcmxiIHBhcmFtZXRlcnMgLS0tLS0tLS0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfYWxiX2luaXRpYWxpemUmIzM0OywKICAgICYjMzQ7Ym9uZF9hbGJfZGVpbml0aWFsaXplJiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX21vbml0b3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBBTEIgbW9kZSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGFuZCB1c2UgcGVyY3B1IHN0YXRzIGZvciBsb2FkIGJhbGFuY2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgYWZmZWN0IGNvcmUgYm9uZGluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY5MjI1ZDEyMmZjZjJlYTZhMTJlYTFmNTc4MTdmMzhhMzBhODVmN2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAwNjowOTo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCA4MzlmNzQ4MmRjMTgyLi4zNzJkYjU0ODAzZDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGt0X3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CkBAIC03NCw4ICYjNDM7NzUsOCBAQCBzdGF0aWMgaW5saW5lIHU4IF9zaW1wbGVfaGFzaChjb25zdCB1OCAqaGFzaF9zdGFydCwgaW50IGhhc2hfc2l6ZSkKIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfaW5pdF90YWJsZV9lbnRyeShzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvICplbnRyeSwgaW50IHNhdmVfbG9hZCkKIHsKIAlpZiAoc2F2ZV9sb2FkKSB7Ci0JCWVudHJ5LSZndDtsb2FkX2hpc3RvcnkgPSAxICYjNDM7IGVudHJ5LSZndDt0eF9ieXRlcyAvCi0JCQkJICAgICAgQk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMOwomIzQzOwkJZW50cnktJmd0O2xvYWRfaGlzdG9yeSA9IDEgJiM0MzsgZGl2X3U2NChlbnRyeS0mZ3Q7dHhfYnl0ZXMsCiYjNDM7CQkJCSAgICAgIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTCk7CiAJCWVudHJ5LSZndDt0eF9ieXRlcyA9IDA7CiAJfQogCkBAIC0xMzMsNiAmIzQzOzEzNCwxMCBAQCBzdGF0aWMgaW50IHRsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogCWlmICghbmV3X2hhc2h0YmwpCiAJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CWJvbmRfaW5mby0mZ3Q7dW5iYWxhbmNlZF9sb2FkID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyk7CiYjNDM7CWlmICghYm9uZF9pbmZvLSZndDt1bmJhbGFuY2VkX2xvYWQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAlzcGluX2xvY2tfYmgoJmFtcDtib25kLSZndDttb2RlX2xvY2spOwogCiAJYm9uZF9pbmZvLSZndDt0eF9oYXNodGJsID0gbmV3X2hhc2h0Ymw7CkBAIC0xNDMsNiAmIzQzOzE0OCwxMCBAQCBzdGF0aWMgaW50IHRsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7Ym9uZC0mZ3Q7bW9kZV9sb2NrKTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO291dDoKJiM0MzsJa2ZyZWUobmV3X2hhc2h0YmwpOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgb25seSBhZnRlciBhbGwgc2xhdmVzIGhhdmUgYmVlbiByZWxlYXNlZCAqLwpAQCAtMTU0LDMxICYjNDM7MTYzLDQ0IEBAIHN0YXRpYyB2b2lkIHRsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpCiAKIAlrZnJlZShib25kX2luZm8tJmd0O3R4X2hhc2h0YmwpOwogCWJvbmRfaW5mby0mZ3Q7dHhfaGFzaHRibCA9IE5VTEw7CiYjNDM7CWZyZWVfcGVyY3B1KGJvbmRfaW5mby0mZ3Q7dW5iYWxhbmNlZF9sb2FkKTsKJiM0MzsJYm9uZF9pbmZvLSZndDtwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSAwOwogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtib25kLSZndDttb2RlX2xvY2spOwogfQogCi1zdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpCiYjNDM7c3RhdGljIHU2NCBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQogewotCXJldHVybiAoczY0KSAoc2xhdmUtJmd0O3NwZWVkICZsdDsmbHQ7IDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovCi0JICAgICAgIChzNjQpIChTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCAmbHQ7Jmx0OyAzKTsgLyogQnl0ZXMgdG8gYml0cyAqLwomIzQzOwl1NjQgc2xhdmVfbG9hZCA9IFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDM7IC8qIEJ5dGVzIHRvIGJpdHMgKi8KJiM0MzsJdTMyIHJhd19zcGVlZCA9IFJFQURfT05DRShzbGF2ZS0mZ3Q7c3BlZWQpOwomIzQzOwl1NjQgc3BlZWQgPSAodTY0KXJhd19zcGVlZCAmbHQ7Jmx0OyAyMDsgLyogQ29udmVydCB0byBiaXRzIHBlciBzZWMgKi8KJiM0MzsKJiM0MzsJLyogSXQmIzM5O3MgbWVhbmluZ2xlc3MgdG8gY29tcGFyZSBnYXAgb24gdW5rbm93biBzcGVlZCBOSUMgKi8KJiM0MzsJaWYgKHJhd19zcGVlZCA9PSAodTMyKVNQRUVEX1VOS05PV04pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogU2tpcCBzbGF2ZSB3aGljaCBpcyBvdmVyIGxvYWRlZCAqLwomIzQzOwlpZiAoc3BlZWQgJmx0Oz0gc2xhdmVfbG9hZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gc3BlZWQgLSBzbGF2ZV9sb2FkOwogfQogCiBzdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIHsKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCAqbGVhc3RfbG9hZGVkOwogCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7Ci0JbG9uZyBsb25nIG1heF9nYXA7CiYjNDM7CXU2NCBtYXhfZ2FwID0gMDsKIAogCWxlYXN0X2xvYWRlZCA9IE5VTEw7Ci0JbWF4X2dhcCA9IExMT05HX01JTjsKIAogCS8qIEZpbmQgdGhlIHNsYXZlIHdpdGggdGhlIGxhcmdlc3QgZ2FwICovCiAJYm9uZF9mb3JfZWFjaF9zbGF2ZV9yY3UoYm9uZCwgc2xhdmUsIGl0ZXIpIHsKIAkJaWYgKGJvbmRfc2xhdmVfY2FuX3R4KHNsYXZlKSkgewotCQkJbG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTsKJiM0MzsJCQl1NjQgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpOwogCi0JCQlpZiAobWF4X2dhcCAmbHQ7IGdhcCkgewomIzQzOwkJCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIG9uZSBhdmFpbGFibGUgc2xhdmUgKi8KJiM0MzsJCQlpZiAobWF4X2dhcCAmbHQ7PSBnYXApIHsKIAkJCQlsZWFzdF9sb2FkZWQgPSBzbGF2ZTsKIAkJCQltYXhfZ2FwID0gZ2FwOwogCQkJfQpAQCAtMTM0NCw4ICYjNDM7MTM2NiwxNCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAlpZiAoIXR4X3NsYXZlKSB7CiAJCS8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi8KIAkJdHhfc2xhdmUgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC0mZ3Q7Y3Vycl9hY3RpdmVfc2xhdmUpOwotCQlpZiAoYm9uZC0mZ3Q7cGFyYW1zLnRsYl9keW5hbWljX2xiKQotCQkJYm9uZF9pbmZvLSZndDt1bmJhbGFuY2VkX2xvYWQgJiM0Mzs9IHNrYi0mZ3Q7bGVuOwomIzQzOwkJaWYgKGJvbmQtJmd0O3BhcmFtcy50bGJfZHluYW1pY19sYikgewomIzQzOwkJCXN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgKnBjcHVfbG9hZDsKJiM0MzsKJiM0MzsJCQlwY3B1X2xvYWQgPSB0aGlzX2NwdV9wdHIoYm9uZF9pbmZvLSZndDt1bmJhbGFuY2VkX2xvYWQpOwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtwY3B1X2xvYWQtJmd0O3N5bmNwKTsKJiM0MzsJCQl1NjRfc3RhdHNfYWRkKCZhbXA7cGNwdV9sb2FkLSZndDt0eF9ieXRlcywgc2tiLSZndDtsZW4pOwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cGNwdV9sb2FkLSZndDtzeW5jcCk7CiYjNDM7CQl9CiAJfQogCiAJaWYgKHR4X3NsYXZlICZhbXA7JmFtcDsgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7CkBAIC0xNTI5LDYgJiM0MzsxNTU3LDI5IEBAIG5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KQogCXJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpOwogfQogCiYjNDM7c3RhdGljIHU2NCByZXNldF91bmJhbGFuY2VkX2xvYWQoc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbykKJiM0Mzt7CiYjNDM7CXU2NCBkZWx0YSwgdHhfYnl0ZXMsIHRvdGFsX2J5dGVzID0gMDsKJiM0MzsJc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyAqcDsKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0OwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKJiM0MzsJCXAgPSBwZXJfY3B1X3B0cihib25kX2luZm8tJmd0O3VuYmFsYW5jZWRfbG9hZCwgaSk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDtwLSZndDtzeW5jcCk7CiYjNDM7CQkJdHhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO3AtJmd0O3R4X2J5dGVzKTsKJiM0MzsJCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeSgmYW1wO3AtJmd0O3N5bmNwLCBzdGFydCkpOwomIzQzOwomIzQzOwkJdG90YWxfYnl0ZXMgJiM0Mzs9IHR4X2J5dGVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRlbHRhID0gdG90YWxfYnl0ZXMgLSBib25kX2luZm8tJmd0O3ByZXZfdG90YWxfdW5iYWxhbmNlZDsKJiM0MzsJYm9uZF9pbmZvLSZndDtwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSB0b3RhbF9ieXRlczsKJiM0MzsKJiM0MzsJcmV0dXJuIGRpdl91NjQoZGVsdGEsIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTCk7CiYjNDM7fQomIzQzOwogdm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm9uZGluZywKQEAgLTE1NzEsMTAgJiM0MzsxNjIyLDExIEBAIHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCWJvbmRfZm9yX2VhY2hfc2xhdmVfcmN1KGJvbmQsIHNsYXZlLCBpdGVyKSB7CiAJCQl0bGJfY2xlYXJfc2xhdmUoYm9uZCwgc2xhdmUsIDEpOwogCQkJaWYgKHNsYXZlID09IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLSZndDtjdXJyX2FjdGl2ZV9zbGF2ZSkpIHsKLQkJCQlTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCA9Ci0JCQkJCWJvbmRfaW5mby0mZ3Q7dW5iYWxhbmNlZF9sb2FkIC8KLQkJCQkJCUJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTDsKLQkJCQlib25kX2luZm8tJmd0O3VuYmFsYW5jZWRfbG9hZCA9IDA7CiYjNDM7CQkJCXU2NCBuZXdfbG9hZCA9IHJlc2V0X3VuYmFsYW5jZWRfbG9hZChib25kX2luZm8pOwomIzQzOwomIzQzOwkJCQlzcGluX2xvY2tfYmgoJmFtcDtib25kLSZndDttb2RlX2xvY2spOwomIzQzOwkJCQlTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCA9IG5ld19sb2FkOwomIzQzOwkJCQlzcGluX3VubG9ja19iaCgmYW1wO2JvbmQtJmd0O21vZGVfbG9jayk7CiAJCQl9CiAJCX0KIAkJYXRvbWljX3NldCgmYW1wO2JvbmRfaW5mby0mZ3Q7dHhfcmViYWxhbmNlX2NvdW50ZXIsIDApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaCBiL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmgKaW5kZXggZTU5NDU0MjdmMzhkZC4uMzJmMTk4MTAzM2U0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9ib25kX2FsYi5oCkBAIC01NywxMiAmIzQzOzU3LDEyIEBAIHN0cnVjdCB0bGJfY2xpZW50X2luZm8gewogCQkJCSAqIHBhY2tldHMgdG8gYSBDbGllbnQgdGhhdCB0aGUgSGFzaCBmdW5jdGlvbgogCQkJCSAqIGdhdmUgdGhpcyBlbnRyeSBpbmRleC4KIAkJCQkgKi8KLQl1MzIgdHhfYnl0ZXM7CQkvKiBFYWNoIENsaWVudCBhY2N1bXVsYXRlcyB0aGUgQnl0ZXNUeCB0aGF0CiYjNDM7CXU2NCB0eF9ieXRlczsJCS8qIEVhY2ggQ2xpZW50IGFjY3VtdWxhdGVzIHRoZSBCeXRlc1R4IHRoYXQKIAkJCQkgKiB3ZXJlIHRyYW5zbWl0dGVkIHRvIGl0LCBhbmQgYWZ0ZXIgZWFjaAogCQkJCSAqIENhbGxCYWNrIHRoZSBMb2FkSGlzdG9yeSBpcyBkaXZpZGVkCiAJCQkJICogYnkgdGhlIGJhbGFuY2UgaW50ZXJ2YWwKIAkJCQkgKi8KLQl1MzIgbG9hZF9oaXN0b3J5OwkvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXMKJiM0MzsJdTY0IGxvYWRfaGlzdG9yeTsJLyogVGhpcyBmaWVsZCBjb250YWlucyB0aGUgYW1vdW50IG9mIEJ5dGVzCiAJCQkJICogdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHRvIHRoaXMgY2xpZW50IGJ5CiAJCQkJICogdGhlIHNlcnZlciBvbiB0aGUgcHJldmlvdXMgYmFsYW5jZQogCQkJCSAqIGludGVydmFsIGluIEJwcy4KQEAgLTExOCwxNCAmIzQzOzExOCwyMCBAQCBzdHJ1Y3QgdGxiX3NsYXZlX2luZm8gewogCQkJICogYXJlIHRoZSBlbnRyaWVzIHRoYXQgd2VyZSBhc3NpZ25lZCB0byB1c2UgdGhpcwogCQkJICogc2xhdmUgZm9yIHRyYW5zbWl0LgogCQkJICovCi0JdTMyIGxvYWQ7CS8qIEVhY2ggc2xhdmUgc3VtcyB0aGUgbG9hZEhpc3Rvcnkgb2YgYWxsIGNsaWVudHMKJiM0MzsJdTY0IGxvYWQ7CS8qIEVhY2ggc2xhdmUgc3VtcyB0aGUgbG9hZEhpc3Rvcnkgb2YgYWxsIGNsaWVudHMKIAkJCSAqIGFzc2lnbmVkIHRvIGl0CiAJCQkgKi8KIH07CiAKJiM0MztzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzIHsKJiM0MzsJdTY0X3N0YXRzX3QJCXR4X2J5dGVzOwomIzQzOwlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMJc3luY3A7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBhbGJfYm9uZF9pbmZvIHsKIAlzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvCSp0eF9oYXNodGJsOyAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgKi8KLQl1MzIJCQl1bmJhbGFuY2VkX2xvYWQ7CiYjNDM7CXN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgX19wZXJjcHUJKnVuYmFsYW5jZWRfbG9hZDsKJiM0MzsJdTY0CQkJcHJldl90b3RhbF91bmJhbGFuY2VkOwogCWF0b21pY190CQl0eF9yZWJhbGFuY2VfY291bnRlcjsKIAlpbnQJCQlscF9jb3VudGVyOwogCS8qIC0tLS0tLS0tIHJsYiBwYXJhbWV0ZXJzIC0tLS0tLS0tICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJvbmRpbmcgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBkaWdnaW5nIGludG8gdGhlIGd1dHMgb2YgdGhlIG5ldHdvcmsgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgQUxCIChBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZykgbW9kZS4gTG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIHNvbWUga2V5IGlzc3VlcyByZWxhdGVkIHRvIGludGVnZXIgb3ZlcmZsb3dzLCB3aGljaCBpcyBhbHdheXMgZ29vZCB0byBzZWUsIGVzcGVjaWFsbHkgaW4gc29tZXRoaW5nIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgaGFuZGxpbmcgc2lnbmlmaWNhbnQgbmV0d29yayB0cmFmZmljLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBidW1waW5nIHVwIHRoZSBzaXplIG9mIHZhcmlvdXMgY291bnRlcnMgYW5kIGxvYWQgaW5kaWNhdG9ycyBmcm9tIGB1MzJgIHRvIGB1NjRgLiBJIHNlZSBpdCBpbiBgdHhfYnl0ZXNgLCBgbG9hZF9oaXN0b3J5YCwgYW5kIGBsb2FkYCB3aXRoaW4gdGhlIGB0bGJfY2xpZW50X2luZm9gIGFuZCBgdGxiX3NsYXZlX2luZm9gIHN0cnVjdHMuIE1ha2VzIHNlbnNlIOKAkyBwcmV2ZW50IG92ZXJmbG93cywgZXNwZWNpYWxseSBvbiBoaWdoLWJhbmR3aWR0aCBsaW5rcy4gVGhlIGludHJvZHVjdGlvbiBvZiBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgYW5kIHRoZSBtb3ZlIHRvIHBlcmNwdSBzdGF0cyBmb3IgYHVuYmFsYW5jZWRfbG9hZGAgd2l0aGluIGBzdHJ1Y3QgYWxiX2JvbmRfaW5mb2AgaXMgc21hcnQuIFVzaW5nIGB1NjRfc3RhdHNfdGAgd2l0aCBzeW5jaHJvbml6YXRpb24gZW5zdXJlcyBhdG9taWMgdXBkYXRlcywgYW5kIHRoZSBwZXJjcHUgYXNwZWN0IGlzIGEgY2xldmVyIHdheSB0byBhdm9pZCB0aG9zZSBuYXN0eSBjYWNoZSBsaW5lIGJvdW5jZXMgb3IgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgY29tZSB1cCB3aXRoIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgQ1BVcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBZZWFoLCBJIHRoaW5rIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQuCgpUaGV5JiMzOTt2ZSBjbGVhcmx5IGdvbmUgdGhyb3VnaCB0aGUgY29kZSBhbmQgdXBkYXRlZCBmdW5jdGlvbnMgbGlrZSBgdGxiX2luaXRpYWxpemVgLCBgdGxiX2RlaW5pdGlhbGl6ZWAsIGBjb21wdXRlX2dhcGAsIGB0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZWAsIGBib25kX2RvX2FsYl94bWl0YCwgYHJlc2V0X3VuYmFsYW5jZWRfbG9hZGAsIGFuZCBgYm9uZF9hbGJfbW9uaXRvcmAgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgYHU2NGAgZGF0YSB0eXBlcyBhbmQgdGhlIHBlcmNwdSBzdGF0cy4gVGhhdCYjMzk7cyBhIGdvb2QgdGhvcm91Z2huZXNzLgoKSSBhbHNvIHNlZSB0aGF0IHRoZXkmIzM5O3JlIGNvcnJlY3RseSBoYW5kbGluZyBgU1BFRURfVU5LTk9XTmAgYW5kIG92ZXJsb2FkZWQgc2xhdmVzIGluIHRoZSBgY29tcHV0ZV9nYXBgIGZ1bmN0aW9uLiBFeGNlbGxlbnQ7IGNvcm5lciBjYXNlcyBhcmUgaW1wb3J0YW50LgoKTm93LCBJIHRoaW5rIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIGJvbmRpbmcgdG8gY29uZmlybSB0aGUgZHJpdmVyJiMzOTtzIGF2YWlsYWJpbGl0eSBhbmQgYW55IGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7cyBzb21ldGhpbmcgSSBhbHdheXMgZG8gd2hlbiByZXZpZXdpbmcgdGhpcyBraW5kIG9mIGNoYW5nZS4gT3ZlcmFsbCwgdGhpcyBzZWVtcyBsaWtlIGEgd2VsbC1jb25zaWRlcmVkIGFuZCBuZWNlc3NhcnkgcGF0Y2guIEl0JiMzOTtzIGEgc29saWQgZml4IGZvciBwb3RlbnRpYWwgcHJvYmxlbXMgYW5kIGltcHJvdmVzIHRoZSByb2J1c3RuZXNzIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgQUxCIGJvbmRpbmcgbW9kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQk9ORElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTpjb25maWcgQk9ORElOR1xuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzU2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IEJvbmRpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBJJiMzOTttIHdvcmtpbmcgd2l0aCBpcyBgQk9ORElOR2AuIE15IGdvYWwgbm93IGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIGFuZCBpdCBsb29rcyBsaWtlOiBgdGxiX2luaXRfdGFibGVfZW50cnlgIChzdGF0aWMgaW5saW5lKSwgYHRsYl9pbml0aWFsaXplYCAoc3RhdGljKSwgYHRsYl9kZWluaXRpYWxpemVgIChzdGF0aWMpLCBgY29tcHV0ZV9nYXBgIChzdGF0aWMpLCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgIChzdGF0aWMpLCBgYm9uZF9kb19hbGJfeG1pdGAgKHN0YXRpYyksIGBib25kX2FsYl94bWl0YCAobm9uLXN0YXRpYyksIGByZXNldF91bmJhbGFuY2VkX2xvYWRgIChzdGF0aWMpLCBhbmQgYGJvbmRfYWxiX21vbml0b3JgIChub24tc3RhdGljKS4KClRoaW5raW5nIHN0cmF0ZWdpY2FsbHksIGBib25kX2FsYl94bWl0YCBpcyBjbGVhcmx5IGEgaG90LXBhdGggZnVuY3Rpb24sIHBhcnQgb2YgdGhlIHRyYW5zbWl0IHBhdGgsIHNvIHRoYXQmIzM5O3MgYSBwcmltZSBjYW5kaWRhdGUuIFRoZW4sIGBib25kX2FsYl9tb25pdG9yYCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgbWVhbmluZyBpdCBoYW5kbGVzIGJhY2tncm91bmQgdGFza3Mgb3IgbW9uaXRvcmluZywgYWxzbyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy4gSSBhbHNvIG5vdGUgdGhhdCBgdGxiX2luaXRpYWxpemVgIGdldHMgY2FsbGVkIGR1cmluZyB0aGUgYm9uZGluZyBzZXR1cCBwcm9jZXNzLCB3aGljaCBjb3VsZCByZXZlYWwgaW50ZXJlc3RpbmcgYnVncy4KCkdpdmVuIHRoZXNlIGNvbnNpZGVyYXRpb25zLCBJIHRoaW5rIEkmIzM5O2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBib25kX2FsYl9tb25pdG9yYCBhbmQgYGJvbmRfYWxiX3htaXRgIGZvciBhIGNsb3NlciBsb29rLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgZnJ1aXRmdWwgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF9hbGJfbW9uaXRvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNTYwPXN0YXRpYyB1NjQgcmVzZXRfdW5iYWxhbmNlZF9sb2FkKHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8pXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1ODItXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTU4Mzp2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1ODQte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDMyMD12b2lkIGJvbmRfd29ya19pbml0X2FsbChzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzMjctXHRcdFx0ICBib25kX3Jlc2VuZF9pZ21wX2pvaW5fcmVxdWVzdHNfZGVsYXllZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQzMjg6XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZib25kLVx1MDAzZWFsYl93b3JrLCBib25kX2FsYl9tb25pdG9yKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMyOS1cdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmJvbmQtXHUwMDNlbWlpX3dvcmssIGJvbmRfbWlpX21vbml0b3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBCb25kIEFMQiBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGJvbmRfYWxiX21vbml0b3JgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBhIHByb21pc2luZyB0YXJnZXQgZm9yIGZ1enppbmcsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHBhcnQgb2YgYSB3b3JrcXVldWUuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSB3cmlua2xlLCBidXQgcG90ZW50aWFsbHkgc3RpbGwgZXhwbG9pdGFibGUuIFRoZW4gdGhlcmUmIzM5O3MgYGJvbmRfYWxiX3htaXRgLCB3aGljaCBpcyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24sIHNvIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBhIGxvb2sgdG9vLiBIbW0sIGxldCBtZSBkaWcgYXJvdW5kIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB0aGF0IG1pZ2h0IGJlIGludGVyZXN0aW5nLiBBaCwgaGVyZSYjMzk7cyBgYm9uZF9hbGJfaW5pdGlhbGl6ZWAsIGFuZCBpdCBjYWxscyBgdGxiX2luaXRpYWxpemVgLiBUaGF0IG1pZ2h0IHByb3ZpZGUgc29tZSBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZSBhcyB3ZWxsLiBUaW1lIHRvIHN0YXJ0IG1hcHBpbmcgb3V0IHRoZSBjYWxsaW5nIHJlbGF0aW9uc2hpcHMgYW5kIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF9hbGJfaW5pdGlhbGl6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzA2PXN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMjctXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTMyODppbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMjkte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDM0Nz1zdGF0aWMgaW50IGJvbmRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzczLVx0aWYgKGJvbmRfaXNfbGIoYm9uZCkpIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDM3NDpcdFx0LyogYm9uZF9hbGJfaW5pdGlhbGl6ZSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIHRpbWVyXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzUtXHRcdCAqIGlzIHN0YXJ0ZWQuXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzYtXHRcdCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0Mzc3Olx0XHRpZiAoYm9uZF9hbGJfaW5pdGlhbGl6ZShib25kLCAoQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV9BTEIpKSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDM3OC1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzU0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCb25kaW5nIERyaXZlciBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgYm9uZGluZyBkcml2ZXIuIEZyb20gd2hhdCBJIHNlZSwgYGJvbmRfYWxiX2luaXRpYWxpemVgIGFuZCBgYm9uZF9hbGJfZGVpbml0aWFsaXplYCBhcmUgY3JpdGljYWwsIGFzIHRoZXkmIzM5O3JlIGRpcmVjdGx5IGxpbmtlZCB0byB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyBvZiB0aGUgYm9uZGluZyBpbnRlcmZhY2UuIFRoZSBwYXRjaCBtb2RpZmllcyBhIGZldyBrZXkgZnVuY3Rpb25zOiBgYm9uZF9hbGJfeG1pdGAsIGBib25kX2FsYl9tb25pdG9yYCwgYHRsYl9pbml0aWFsaXplYCwgYW5kIGB0bGJfZGVpbml0aWFsaXplYC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgbWF5YmUgaW5jbHVkaW5nIGBib25kX2FsYl94bWl0YCwgZXZlbiB0aG91Z2ggaXQmIzM5O3MgbGlrZWx5IGEgaG90LXBhdGgsIGJ1dCBhZnRlciBmdXJ0aGVyIGNvbnNpZGVyYXRpb24sIGl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgYmV0dGVyIGFwcHJvYWNoLiBJIGhhdmUgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYGJvbmRfYWxiX3htaXRgIGlzIHdoZXJlIGBib25kX2RvX2FsYl94bWl0YCBpcyBjYWxsZWQsIGFuZCB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHVwZGF0ZXMgcGVyY3B1IHN0YXRzLiBOb3csIGBib25kX2FsYl9tb25pdG9yYCByZWFkcyB0aG9zZSBzYW1lIHBlcmNwdSBzdGF0cywgc28gdGhhdCBsb29rcyBsaWtlIGEgdmVyeSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbi4gYGJvbmRfYWxiX2luaXRpYWxpemVgIGlzIGdvb2QgdG9vLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYm9uZF9hbGJfeG1pdGAgaXNuJiMzOTt0ICp0b28qIGhvdC4gWWVzLCBpdCYjMzk7cyB0aGUgYG5kb19zdGFydF94bWl0YCBmb3IgQUxCIG1vZGUgYW5kLCBpbmRlZWQsIGl0JiMzOTtzIHZlcnkgaG90ISBIb3dldmVyLCBgYm9uZF9hbGJfbW9uaXRvcmAgaXMgYSBkZWxheWVkIHdvcmsgZnVuY3Rpb24uIFRoYXTigJlzIGEgaHVnZSBwbHVzLgoKTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBzaWduYXR1cmUgb2YgYGJvbmRfYWxiX21vbml0b3JgOiBgdm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylgLgoKT2theSwgZG91YmxlLWNoZWNraW5nIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgbW9kaWZpZWQsIEkgc2VlIHRoYXQgaXQmIzM5O3MgYGJvbmRfYWxiX3htaXRgIGFuZCBgYm9uZF9hbGJfbW9uaXRvcmAgb25seS4KClNvLCB0byBzdW1tYXJpemUsIGBib25kX2FsYl9tb25pdG9yYCBhbmQgYGJvbmRfYWxiX2luaXRpYWxpemVgICh3aGljaCBpbmNsdWRlcyBgdGxiX2luaXRpYWxpemVgKSBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIG9uZXMgdG8gZm9jdXMgb24uIEkgd2lsbCBhbHNvIGNoZWNrIGBib25kX2FsYl9kZWluaXRgIGp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF9hbGJfZGVpbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTEzMjg9aW50IGJvbmRfYWxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBybGJfZW5hYmxlZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM0OS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzUwOnZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNTEte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNjg4PWludCBib25kX2FsYl9pbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzE3LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE3MTg6dm9pZCBib25kX2FsYl9kZWluaXRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTcxOS17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0yNDI1PXN0YXRpYyBpbnQgX19ib25kX3JlbGVhc2Vfb25lKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTI1MTYtXHRcdCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNTE3Olx0XHRib25kX2FsYl9kZWluaXRfc2xhdmUoYm9uZCwgc2xhdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTE4LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDQxMD1zdGF0aWMgaW50IGJvbmRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDQyMi1cdGlmIChib25kX2lzX2xiKGJvbmQpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0NDIzOlx0XHRib25kX2FsYl9kZWluaXRpYWxpemUoYm9uZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ0MjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW5pdGlhbCBUaG91Z2h0cyBvbiBCb25kaW5nIE1vZHVsZSBJbml0aWFsaXphdGlvbiBhbmQgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBib25kaW5nIG1vZHVsZSBmdW5jdGlvbnMuIFdlIGhhdmUgYGJvbmRfYWxiX2luaXRpYWxpemVgLCBgYm9uZF9hbGJfZGVpbml0aWFsaXplYCwgYW5kIGBib25kX2FsYl9tb25pdG9yYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgYnJpbmdpbmcgYSBib25kaW5nIGludGVyZmFjZSBvbmxpbmUsIHNodXR0aW5nIGl0IGRvd24gY2xlYW5seSwgYW5kIGtlZXBpbmcgYW4gZXllIG9uIGl0cyBzdGF0dXMsIHJlc3BlY3RpdmVseS4gU2VlbXMgbGlrZSBhIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uLCBkZS1pbml0aWFsaXphdGlvbiwgYW5kIG1vbml0b3Jpbmcgc2V0dXAgZm9yIGFuIGFjdGl2ZS9wYXNzaXZlIGJvbmQsIHBvdGVudGlhbGx5IEFMQiAoYWRhcHRpdmUgbG9hZCBiYWxhbmNpbmcpLCB0aG91Z2ggdGhlIG5hbWluZyBjb252ZW50aW9uIGNvdWxkIGJlIGJldHRlci4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gYW55dGhpbmcgZGVlcGVyLCBsZXQmIzM5O3MganVzdCBxdWlja2x5IHZlcmlmeSB0aG9zZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gV2UgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBgQk9ORElOR2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgcHJvcGVybHkgc2V0IGFuZCBhbGwgdGhlIHByZXJlcXVpc2l0ZSBmbGFncyBhcmUgbWV0LiBObyBwb2ludCBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgdHJvdWJsZXNob290aW5nIGlmIHRoZSBtb2R1bGUgaXNuJiMzOTt0IGV2ZW4gY29tcGlsZWQgaW4hIENoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGJlZm9yZSBnZXR0aW5nIGFueSBkZWVwZXIgaW50byB0aGUgY29kZS4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIHJpZ2h0IHNldHRpbmdzIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJPTkRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zOT1pZiBORVRfQ09SRVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcbmRyaXZlcnMvbmV0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzOTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkNoZWNraW5nIHRoZSBgTkVUX0NPUkVgIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgTkVUX0NPUkVgIGFjdHVhbGx5ICppcyogd2l0aGluIHRoaXMgYnVpbGQgc3lzdGVtLiBJcyBpdCBhIGZ1bGwtYmxvd24gYG1lbnVjb25maWdgIG9wdGlvbiwgb2ZmZXJpbmcgdmFyaW91cyBzdWItc2VsZWN0aW9ucyBhbmQgZGVwZW5kZW5jaWVzPyBPciBpcyBpdCBzaW1wbHkgYSBib29sZWFuLCBhIHllcy9ubyBmbGFnIHRoYXQgYWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIHNvbWUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eT8gVGhlIGFuc3dlciBkaWN0YXRlcyBob3cgSSBuZWVkIHRvIGFwcHJvYWNoIGFueSBmdXJ0aGVyIGFuYWx5c2lzIG9yIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBkZXRlcm1pbmUgaXRzIGV4YWN0IG5hdHVyZS4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTI5PWNvbmZpZyBNSUlcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMxLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjpjb25maWcgTkVUX0NPUkVcbmRyaXZlcnMvbmV0L0tjb25maWctMzMtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBgTkVUX0NPUkVgIGlzIHRoZSBkZWZhdWx0LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhhdCBtZWFucyBJIGp1c3QgbmVlZCB0byBmb2N1cyBvbiB0aGUgYEJPTkRJTkdgIGNvbmZpZy4gTm8gb3RoZXIgY29uZmlncyBzZWVtIHJlbGV2YW50IGF0IGZpcnN0IGdsYW5jZS4KCkxldCYjMzk7cyBkaWcgaW4gYSBiaXQuIFRoZSBwYXRjaCBsZXZlcmFnZXMgc29tZSBzdGFuZGFyZCBrZXJuZWwgQVBJczogYG5ldGRldl9hbGxvY19wY3B1X3N0YXRzYCwgYW5kIGFsbCB0aG9zZSBgdTY0X3N0YXRzXypgIGZ1bmN0aW9ucy4gTm90aGluZyB1bnVzdWFsIHRoZXJlLCBhbmQgdGhhdCYjMzk7cyBnb29kLgoKUmlnaHQsIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzIGFyZSB3aXRoaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBzb21lIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBzd2l0Y2hpbmcgdG8gcGVyY3B1IHN0YXRzIGZvciBgdW5iYWxhbmNlZF9sb2FkYC4gRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBpbXByb3ZlbWVudCBhbmQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gUGVyLUNQVSBzdGF0cyBhcmUgYWx3YXlzIGFuIGludGVyZXN0aW5nIGFyZWEgdG8gdGVzdCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBsb2FkIGJhbGFuY2luZy4KCk15IGtleSBmb2N1cyBzaG91bGQgYmUgdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgYm9uZF9hbGJfaW5pdGlhbGl6ZWAsIGBib25kX2FsYl9kZWluaXRpYWxpemVgLCBhbmQgYGJvbmRfYWxiX21vbml0b3JgLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aXRoaW4gdGhlIGJvbmRpbmcgY29udGV4dC4KCkFuZCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgYGJvbmRfYWxiX21vbml0b3JgIGlzIHN0YXRpYywgd2hpY2ggaXMgbGlrZWx5LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgYm9uZF9hbGJfbW9uaXRvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNTYwPXN0YXRpYyB1NjQgcmVzZXRfdW5iYWxhbmNlZF9sb2FkKHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8pXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1ODItXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTU4Mzp2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1ODQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcuLi4gdGhpcyBpc24mIzM5O3QgYSBmaXhlZCBzdGF0ZS4gVGhlIHNpdHVhdGlvbiBpcyBpbmhlcmVudGx5IGR5bmFtaWMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIHByb2Nlc3MgdGhpcy4gSSBjYW4mIzM5O3QgdHJlYXQgaXQgYXMgYSBjb25zdGFudC4KCkFscmlnaHQsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCByZS1leGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYGJvbmRfYWxiX2luaXRpYWxpemVgIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4gb2YgdGhlIHRoaW5nLCBhbmQgbmVlZHMgdG8gYmUgcm9jayBzb2xpZCB0byBiZSBzdXJlIG5vdGhpbmcgZWxzZSBpcyBnb2luZyBvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb2luZyBleGFjdGx5IHdoYXQgSSBleHBlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBib25kX2FsYl9pbml0aWFsaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTEzMDY9c3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTMyNy1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzI4OmludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTMyOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIER5bmFtaWNzIG9mIHRoZSBTeXN0ZW0qKgoKUmlnaHQsIHRoaXMgaXNuJiMzOTt0IGEgZml4ZWQgc2l0dWF0aW9uOyBpdCYjMzk7cyBkeW5hbWljLiBUaGluZ3MgYXJlIGluIGZsdXguIEJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBvZiBzb21ldGhpbmcgY3JpdGljYWw6IGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgYm9uZF9hbGJfZGVpbml0aWFsaXplYCBmdW5jdGlvbi4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIGx5bmNocGluIGluIHRoZXNlIGtpbmRzIG9mIHN5c3RlbSByZXNldHMsIHNvIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGxvZ2ljIGFuZCBlbnN1cmUgaXQmIzM5O3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIE5vIGFzc3VtcHRpb25zIGhlcmUsIGp1c3Qgc29saWQgdmVyaWZpY2F0aW9uIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBib25kX2FsYl9kZWluaXRpYWxpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTMyOD1pbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzQ5LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzNTA6dm9pZCBib25kX2FsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM1MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDQKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJvbmRpbmcgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGp1c3QgY29zbWV0aWM7IGl0JiMzOTtzIGdvdCBzb21lIHJlYWwgdGVldGggdG8gaXQuIEkgc2VlIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBpbiB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIG1vZGUuIENsZXZlciBtb3ZlLCBjaGFuZ2luZyBgdHhfYnl0ZXNgIGFuZCBgbG9hZF9oaXN0b3J5YCB0byBgdTY0YC4gVGhhdCYjMzk7bGwgZ2l2ZSB0aGVtIGVub3VnaCBoZWFkcm9vbSB0byBwcmV2ZW50IHRob3NlIG5hc3R5IHJvbGxvdmVycywgd2hpY2ggY291bGQgd3JlYWsgaGF2b2Mgb24gbG9hZCBiYWxhbmNpbmcgY2FsY3VsYXRpb25zLiBBbmQgdGhlIHBlcmNwdSBzdGF0cyBmb3IgYHVuYmFsYW5jZWRfbG9hZGA/IEV4Y2VsbGVudC4gVGhhdCBjb21wbGV0ZWx5IHNpZGVzdGVwcyB0aGUgcmFjZSBjb25kaXRpb25zIGFuZCBjYWNoZSBsaW5lIGJvdW5jaW5nIEkgd291bGQgaGF2ZSBleHBlY3RlZCB0byBzZWUuCgpUaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0LCB3aGlsZSBzZWVtaW5nbHkgdGFyZ2V0ZWQsIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgc2lnbmlmaWNhbnQgZ2l2ZW4gdGhlIHByZXZhbGVuY2Ugb2YgdGhvc2Ugc2V0dXBzLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIGJvbmRpbmcgbG9naWMsIHdoaWNoIG1lYW5zIGl0IGNvdWxkIHBvdGVudGlhbGx5IGltcGFjdCBhIHdpZGUgcmFuZ2Ugb2YgbmV0d29yayBjb25maWd1cmF0aW9ucy4gR2l2ZW4gdGhlIGZ1bmN0aW9uYWwgYW5kIGltcGFjdGZ1bCBuYXR1cmUgb2YgdGhlIHBhdGNoIEkgd291bGQgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gQW5kIHRoZSBgRm9jdXNTeW1ib2xzYCB0aGV5JiMzOTt2ZSBpZGVudGlmaWVkIOKAkyBgYm9uZF9hbGJfaW5pdGlhbGl6ZWAsIGBib25kX2FsYl9kZWluaXRpYWxpemVgLCBhbmQgYGJvbmRfYWxiX21vbml0b3JgIOKAkyB0aG9zZSBhcmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyB0byBleGFtaW5lIGNsb3NlbHkuIEdvb2QgY2hvaWNlLiBGaW5hbGx5LCBtYWtpbmcgc3VyZSB0aGUgYEJPTkRJTkdgIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCBpcyBhIGdpdmVuLiBUaGVzZSBjaGFuZ2VzIGFyZSBjcnVjaWFsIGZvciBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2FsYl9pbml0aWFsaXplJiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX2RlaW5pdGlhbGl6ZSYjMzQ7LAogICAgJiMzNDtib25kX2FsYl9tb25pdG9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgdXNlIHBlcmNwdSBzdGF0cyBmb3IgbG9hZCBiYWxhbmNpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGFmZmVjdCBjb3JlIGJvbmRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2FsYl9pbml0aWFsaXplJiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX2RlaW5pdGlhbGl6ZSYjMzQ7LAogICAgJiMzNDtib25kX2FsYl9tb25pdG9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgdXNlIHBlcmNwdSBzdGF0cyBmb3IgbG9hZCBiYWxhbmNpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGFmZmVjdCBjb3JlIGJvbmRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIEFMQiAoQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcpIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgZGF0YSByYWNlcy4gSXQgY2hhbmdlcyBsb2FkIHRyYWNraW5nIHZhcmlhYmxlcyAoYHR4X2J5dGVzYCwgYGxvYWRfaGlzdG9yeWAsIGBsb2FkYCkgZnJvbSBgdTMyYCB0byBgdTY0YCBhbmQgaW50cm9kdWNlcyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgaXMgYWxsb2NhdGVkIHZpYSBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAsIHdoaWNoIGluaGVyZW50bHkgemVyb2VzIHRoZSBhbGxvY2F0ZWQgcGVyLUNQVSBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY5MjI1ZDEyMmZjZjJlYTZhMTJlYTFmNTc4MTdmMzhhMzBhODVmN2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAwNjowOTo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCA4MzlmNzQ4MmRjMTgyLi4zNzJkYjU0ODAzZDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGt0X3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CkBAIC03NCw4ICYjNDM7NzUsOCBAQCBzdGF0aWMgaW5saW5lIHU4IF9zaW1wbGVfaGFzaChjb25zdCB1OCAqaGFzaF9zdGFydCwgaW50IGhhc2hfc2l6ZSkKIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfaW5pdF90YWJsZV9lbnRyeShzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvICplbnRyeSwgaW50IHNhdmVfbG9hZCkKIHsKIAlpZiAoc2F2ZV9sb2FkKSB7Ci0JCWVudHJ5LSZndDtsb2FkX2hpc3RvcnkgPSAxICYjNDM7IGVudHJ5LSZndDt0eF9ieXRlcyAvCi0JCQkJICAgICAgQk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMOwomIzQzOwkJZW50cnktJmd0O2xvYWRfaGlzdG9yeSA9IDEgJiM0MzsgZGl2X3U2NChlbnRyeS0mZ3Q7dHhfYnl0ZXMsCiYjNDM7CQkJCSAgICAgIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTCk7CiAJCWVudHJ5LSZndDt0eF9ieXRlcyA9IDA7CiAJfQogCkBAIC0xMzMsNiAmIzQzOzEzNCwxMCBAQCBzdGF0aWMgaW50IHRsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogCWlmICghbmV3X2hhc2h0YmwpCiAJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CWJvbmRfaW5mby0mZ3Q7dW5iYWxhbmNlZF9sb2FkID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyk7CiYjNDM7CWlmICghYm9uZF9pbmZvLSZndDt1bmJhbGFuY2VkX2xvYWQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAlzcGluX2xvY2tfYmgoJmFtcDtib25kLSZndDttb2RlX2xvY2spOwogCiAJYm9uZF9pbmZvLSZndDt0eF9oYXNodGJsID0gbmV3X2hhc2h0Ymw7CkBAIC0xNDMsNiAmIzQzOzE0OCwxMCBAQCBzdGF0aWMgaW50IHRsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7Ym9uZC0mZ3Q7bW9kZV9sb2NrKTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO291dDoKJiM0MzsJa2ZyZWUobmV3X2hhc2h0YmwpOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgb25seSBhZnRlciBhbGwgc2xhdmVzIGhhdmUgYmVlbiByZWxlYXNlZCAqLwpAQCAtMTU0LDMxICYjNDM7MTYzLDQ0IEBAIHN0YXRpYyB2b2lkIHRsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpCiAKIAlrZnJlZShib25kX2luZm8tJmd0O3R4X2hhc2h0YmwpOwogCWJvbmRfaW5mby0mZ3Q7dHhfaGFzaHRibCA9IE5VTEw7CiYjNDM7CWZyZWVfcGVyY3B1KGJvbmRfaW5mby0mZ3Q7dW5iYWxhbmNlZF9sb2FkKTsKJiM0MzsJYm9uZF9pbmZvLSZndDtwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSAwOwogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtib25kLSZndDttb2RlX2xvY2spOwogfQogCi1zdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpCiYjNDM7c3RhdGljIHU2NCBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQogewotCXJldHVybiAoczY0KSAoc2xhdmUtJmd0O3NwZWVkICZsdDsmbHQ7IDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovCi0JICAgICAgIChzNjQpIChTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCAmbHQ7Jmx0OyAzKTsgLyogQnl0ZXMgdG8gYml0cyAqLwomIzQzOwl1NjQgc2xhdmVfbG9hZCA9IFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDM7IC8qIEJ5dGVzIHRvIGJpdHMgKi8KJiM0MzsJdTMyIHJhd19zcGVlZCA9IFJFQURfT05DRShzbGF2ZS0mZ3Q7c3BlZWQpOwomIzQzOwl1NjQgc3BlZWQgPSAodTY0KXJhd19zcGVlZCAmbHQ7Jmx0OyAyMDsgLyogQ29udmVydCB0byBiaXRzIHBlciBzZWMgKi8KJiM0MzsKJiM0MzsJLyogSXQmIzM5O3MgbWVhbmluZ2xlc3MgdG8gY29tcGFyZSBnYXAgb24gdW5rbm93biBzcGVlZCBOSUMgKi8KJiM0MzsJaWYgKHJhd19zcGVlZCA9PSAodTMyKVNQRUVEX1VOS05PV04pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogU2tpcCBzbGF2ZSB3aGljaCBpcyBvdmVyIGxvYWRlZCAqLwomIzQzOwlpZiAoc3BlZWQgJmx0Oz0gc2xhdmVfbG9hZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gc3BlZWQgLSBzbGF2ZV9sb2FkOwogfQogCiBzdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIHsKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCAqbGVhc3RfbG9hZGVkOwogCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7Ci0JbG9uZyBsb25nIG1heF9nYXA7CiYjNDM7CXU2NCBtYXhfZ2FwID0gMDsKIAogCWxlYXN0X2xvYWRlZCA9IE5VTEw7Ci0JbWF4X2dhcCA9IExMT05HX01JTjsKIAogCS8qIEZpbmQgdGhlIHNsYXZlIHdpdGggdGhlIGxhcmdlc3QgZ2FwICovCiAJYm9uZF9mb3JfZWFjaF9zbGF2ZV9yY3UoYm9uZCwgc2xhdmUsIGl0ZXIpIHsKIAkJaWYgKGJvbmRfc2xhdmVfY2FuX3R4KHNsYXZlKSkgewotCQkJbG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTsKJiM0MzsJCQl1NjQgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpOwogCi0JCQlpZiAobWF4X2dhcCAmbHQ7IGdhcCkgewomIzQzOwkJCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIG9uZSBhdmFpbGFibGUgc2xhdmUgKi8KJiM0MzsJCQlpZiAobWF4X2dhcCAmbHQ7PSBnYXApIHsKIAkJCQlsZWFzdF9sb2FkZWQgPSBzbGF2ZTsKIAkJCQltYXhfZ2FwID0gZ2FwOwogCQkJfQpAQCAtMTM0NCw4ICYjNDM7MTM2NiwxNCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAlpZiAoIXR4X3NsYXZlKSB7CiAJCS8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi8KIAkJdHhfc2xhdmUgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC0mZ3Q7Y3Vycl9hY3RpdmVfc2xhdmUpOwotCQlpZiAoYm9uZC0mZ3Q7cGFyYW1zLnRsYl9keW5hbWljX2xiKQotCQkJYm9uZF9pbmZvLSZndDt1bmJhbGFuY2VkX2xvYWQgJiM0Mzs9IHNrYi0mZ3Q7bGVuOwomIzQzOwkJaWYgKGJvbmQtJmd0O3BhcmFtcy50bGJfZHluYW1pY19sYikgewomIzQzOwkJCXN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgKnBjcHVfbG9hZDsKJiM0MzsKJiM0MzsJCQlwY3B1X2xvYWQgPSB0aGlzX2NwdV9wdHIoYm9uZF9pbmZvLSZndDt1bmJhbGFuY2VkX2xvYWQpOwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtwY3B1X2xvYWQtJmd0O3N5bmNwKTsKJiM0MzsJCQl1NjRfc3RhdHNfYWRkKCZhbXA7cGNwdV9sb2FkLSZndDt0eF9ieXRlcywgc2tiLSZndDtsZW4pOwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cGNwdV9sb2FkLSZndDtzeW5jcCk7CiYjNDM7CQl9CiAJfQogCiAJaWYgKHR4X3NsYXZlICZhbXA7JmFtcDsgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7CkBAIC0xNTI5LDYgJiM0MzsxNTU3LDI5IEBAIG5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KQogCXJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpOwogfQogCiYjNDM7c3RhdGljIHU2NCByZXNldF91bmJhbGFuY2VkX2xvYWQoc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbykKJiM0Mzt7CiYjNDM7CXU2NCBkZWx0YSwgdHhfYnl0ZXMsIHRvdGFsX2J5dGVzID0gMDsKJiM0MzsJc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyAqcDsKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0OwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKJiM0MzsJCXAgPSBwZXJfY3B1X3B0cihib25kX2luZm8tJmd0O3VuYmFsYW5jZWRfbG9hZCwgaSk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDtwLSZndDtzeW5jcCk7CiYjNDM7CQkJdHhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO3AtJmd0O3R4X2J5dGVzKTsKJiM0MzsJCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeSgmYW1wO3AtJmd0O3N5bmNwLCBzdGFydCkpOwomIzQzOwomIzQzOwkJdG90YWxfYnl0ZXMgJiM0Mzs9IHR4X2J5dGVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRlbHRhID0gdG90YWxfYnl0ZXMgLSBib25kX2luZm8tJmd0O3ByZXZfdG90YWxfdW5iYWxhbmNlZDsKJiM0MzsJYm9uZF9pbmZvLSZndDtwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSB0b3RhbF9ieXRlczsKJiM0MzsKJiM0MzsJcmV0dXJuIGRpdl91NjQoZGVsdGEsIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTCk7CiYjNDM7fQomIzQzOwogdm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm9uZGluZywKQEAgLTE1NzEsMTAgJiM0MzsxNjIyLDExIEBAIHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCWJvbmRfZm9yX2VhY2hfc2xhdmVfcmN1KGJvbmQsIHNsYXZlLCBpdGVyKSB7CiAJCQl0bGJfY2xlYXJfc2xhdmUoYm9uZCwgc2xhdmUsIDEpOwogCQkJaWYgKHNsYXZlID09IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLSZndDtjdXJyX2FjdGl2ZV9zbGF2ZSkpIHsKLQkJCQlTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCA9Ci0JCQkJCWJvbmRfaW5mby0mZ3Q7dW5iYWxhbmNlZF9sb2FkIC8KLQkJCQkJCUJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTDsKLQkJCQlib25kX2luZm8tJmd0O3VuYmFsYW5jZWRfbG9hZCA9IDA7CiYjNDM7CQkJCXU2NCBuZXdfbG9hZCA9IHJlc2V0X3VuYmFsYW5jZWRfbG9hZChib25kX2luZm8pOwomIzQzOwomIzQzOwkJCQlzcGluX2xvY2tfYmgoJmFtcDtib25kLSZndDttb2RlX2xvY2spOwomIzQzOwkJCQlTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCA9IG5ld19sb2FkOwomIzQzOwkJCQlzcGluX3VubG9ja19iaCgmYW1wO2JvbmQtJmd0O21vZGVfbG9jayk7CiAJCQl9CiAJCX0KIAkJYXRvbWljX3NldCgmYW1wO2JvbmRfaW5mby0mZ3Q7dHhfcmViYWxhbmNlX2NvdW50ZXIsIDApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaCBiL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmgKaW5kZXggZTU5NDU0MjdmMzhkZC4uMzJmMTk4MTAzM2U0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9ib25kX2FsYi5oCkBAIC01NywxMiAmIzQzOzU3LDEyIEBAIHN0cnVjdCB0bGJfY2xpZW50X2luZm8gewogCQkJCSAqIHBhY2tldHMgdG8gYSBDbGllbnQgdGhhdCB0aGUgSGFzaCBmdW5jdGlvbgogCQkJCSAqIGdhdmUgdGhpcyBlbnRyeSBpbmRleC4KIAkJCQkgKi8KLQl1MzIgdHhfYnl0ZXM7CQkvKiBFYWNoIENsaWVudCBhY2N1bXVsYXRlcyB0aGUgQnl0ZXNUeCB0aGF0CiYjNDM7CXU2NCB0eF9ieXRlczsJCS8qIEVhY2ggQ2xpZW50IGFjY3VtdWxhdGVzIHRoZSBCeXRlc1R4IHRoYXQKIAkJCQkgKiB3ZXJlIHRyYW5zbWl0dGVkIHRvIGl0LCBhbmQgYWZ0ZXIgZWFjaAogCQkJCSAqIENhbGxCYWNrIHRoZSBMb2FkSGlzdG9yeSBpcyBkaXZpZGVkCiAJCQkJICogYnkgdGhlIGJhbGFuY2UgaW50ZXJ2YWwKIAkJCQkgKi8KLQl1MzIgbG9hZF9oaXN0b3J5OwkvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXMKJiM0MzsJdTY0IGxvYWRfaGlzdG9yeTsJLyogVGhpcyBmaWVsZCBjb250YWlucyB0aGUgYW1vdW50IG9mIEJ5dGVzCiAJCQkJICogdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHRvIHRoaXMgY2xpZW50IGJ5CiAJCQkJICogdGhlIHNlcnZlciBvbiB0aGUgcHJldmlvdXMgYmFsYW5jZQogCQkJCSAqIGludGVydmFsIGluIEJwcy4KQEAgLTExOCwxNCAmIzQzOzExOCwyMCBAQCBzdHJ1Y3QgdGxiX3NsYXZlX2luZm8gewogCQkJICogYXJlIHRoZSBlbnRyaWVzIHRoYXQgd2VyZSBhc3NpZ25lZCB0byB1c2UgdGhpcwogCQkJICogc2xhdmUgZm9yIHRyYW5zbWl0LgogCQkJICovCi0JdTMyIGxvYWQ7CS8qIEVhY2ggc2xhdmUgc3VtcyB0aGUgbG9hZEhpc3Rvcnkgb2YgYWxsIGNsaWVudHMKJiM0MzsJdTY0IGxvYWQ7CS8qIEVhY2ggc2xhdmUgc3VtcyB0aGUgbG9hZEhpc3Rvcnkgb2YgYWxsIGNsaWVudHMKIAkJCSAqIGFzc2lnbmVkIHRvIGl0CiAJCQkgKi8KIH07CiAKJiM0MztzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzIHsKJiM0MzsJdTY0X3N0YXRzX3QJCXR4X2J5dGVzOwomIzQzOwlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMJc3luY3A7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBhbGJfYm9uZF9pbmZvIHsKIAlzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvCSp0eF9oYXNodGJsOyAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgKi8KLQl1MzIJCQl1bmJhbGFuY2VkX2xvYWQ7CiYjNDM7CXN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgX19wZXJjcHUJKnVuYmFsYW5jZWRfbG9hZDsKJiM0MzsJdTY0CQkJcHJldl90b3RhbF91bmJhbGFuY2VkOwogCWF0b21pY190CQl0eF9yZWJhbGFuY2VfY291bnRlcjsKIAlpbnQJCQlscF9jb3VudGVyOwogCS8qIC0tLS0tLS0tIHJsYiBwYXJhbWV0ZXJzIC0tLS0tLS0tICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg2CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCb25kaW5nIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgdGhlIGJvbmRpbmcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIEFjdGl2ZSBMb2FkIEJhbGFuY2luZyAoQUxCKSBjb21wb25lbnQsIGZvY3VzZWQgb24gYGJvbmRfYWxiLmNgIGFuZCBgYm9uZF9hbGIuaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBhIHNpZ25pZmljYW50IHNoaWZ0IHRvd2FyZHMgaGFuZGxpbmcgbGFyZ2VyIHZhbHVlcywgYSBjcml0aWNhbCBjaGFuZ2UgZm9yIGhpZ2gtYmFuZHdpZHRoIGVudmlyb25tZW50cy4gVGhleSYjMzk7cmUgYnJvYWRlbmluZyB0aGUgZGF0YSB0eXBlcyB1c2VkIGZvciBsb2FkIG1ldHJpY3Mg4oCTIHNwZWNpZmljYWxseSwgY29udmVydGluZyBgdHhfYnl0ZXNgIGFuZCBgbG9hZF9oaXN0b3J5YCB3aXRoaW4gYHRsYl9jbGllbnRfaW5mb2AsIGFuZCBgbG9hZGAgaW4gYHRsYl9zbGF2ZV9pbmZvYCBmcm9tIGB1MzJgIHRvIGB1NjRgLiBUaGlzIGlzIGdvb2QsIGl0IGFudGljaXBhdGVzIHRoZSBpbmNyZWFzZWQgdGhyb3VnaHB1dCB3ZSYjMzk7cmUgc2VlaW5nIGluIG1vZGVybiBuZXR3b3Jrcy4KClRoZSBtb3N0IGludHJpZ3VpbmcgcGFydCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHBlci1DUFUgc3RhdHMgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGV5JiMzOTt2ZSBtb3ZlZCBmcm9tIGEgc2luZ2xlIGB1MzJgIGZvciBgdW5iYWxhbmNlZF9sb2FkYCBpbiBgYWxiX2JvbmRfaW5mb2AgdG8gYSBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyBfX3BlcmNwdSAqdW5iYWxhbmNlZF9sb2FkYC4gVGhpcyBuZXcgc3RydWN0dXJlLCBgdW5iYWxhbmNlZF9sb2FkX3N0YXRzYCwgY29udGFpbnMgYHU2NF9zdGF0c190IHR4X2J5dGVzYCBhbmQgYSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBgc3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwYC4gVGhpcyBpcyBzbWFydC4gSXQgYWxsb3dzIGZvciBwZXItQ1BVIGFjY291bnRpbmcgb2YgbG9hZCwgYW5kIHRoZSBzeW5jaHJvbml6YXRpb24gaXMgY3J1Y2lhbCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlbiBhZ2dyZWdhdGluZyB0aGVzZSBzdGF0cy4gVGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gYHRsYl9pbml0aWFsaXplKClgIGFuZCBgdGxiX2RlaW5pdGlhbGl6ZSgpYCwgdXNpbmcgYG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKClgIGFuZCBpdHMgY291bnRlcnBhcnQsIHNlZW0gY29ycmVjdGx5IGltcGxlbWVudGVkLiBUaGUgcGF0Y2ggY29ycmVjdGx5IHVwZGF0ZXMgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgc3VjaCBhcyBgYm9uZF9kb19hbGJfeG1pdCgpYCBhbmQgYGJvbmRfYWxiX21vbml0b3IoKWAsIHRvIHVzZSB0aGVzZSBuZXcgcGVyLUNQVSBzdGF0aXN0aWNzLiBBbmQgdGhlIGFkanVzdG1lbnRzIHRvIGBjb21wdXRlX2dhcCgpYCB0byBoYW5kbGUgYHU2NGAgYW5kIHNwZWVkcyB1c2luZyBgUkVBRF9PTkNFKClgIGlzIGdvb2QgdG9vLgoKQnV0LCBob2xkIG9uLiBUaGlzIHBlci1DUFUgYWxsb2NhdGlvbi4uLiBJIHdhbnQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueXRpbWUgd2UmIzM5O3JlIGFsbG9jYXRpbmcgcGVyLUNQVSBtZW1vcnksIHplcm8taW5pdGlhbGl6YXRpb24gaXMgc29tZXRoaW5nIHRvIHZlcmlmeS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0c2AganVzdCB0byBiZSBzdXJlLi4uIExldCYjMzk7cyBzZWUuLi4gQWgsIHllcywgaXQmIzM5O3MgYSBtYWNybyB0aGF0IHdyYXBzIGBhbGxvY19wZXJjcHVfZ2ZwYCB3aXRoIGBfX0dGUF9aRVJPYC4gUGVyZmVjdC4gVGhhdCBjb25maXJtcyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyB6ZXJvZWQsIHdoaWNoIGlzIGVzc2VudGlhbCB0byBwcmV2ZW50IGFueSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIEFscmlnaHQsIGdvb2QuIE5vIGltbWVkaWF0ZSBjb25jZXJucyB0aGVyZS4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgdXBkYXRlIG92ZXJhbGwsIHdpdGggdGhvdWdodGZ1bCBjb25zaWRlcmF0aW9uIGdpdmVuIHRvIGRhdGEgdHlwZSBzaXplcyBhbmQgdGhyZWFkIHNhZmV0eSB3aGVuIGRlYWxpbmcgd2l0aCBwZXItQ1BVIHN0YXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zMTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMxNTUtXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMxNTY6I2RlZmluZSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyh0eXBlKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMTU3LVx0X19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyh0eXBlLCBHRlBfS0VSTkVMKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTAzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgX19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0c2AqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgX19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0c2AuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyBpdHMgcHVycG9zZSAtIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgcGVyLUNQVSBzdGF0aXN0aWNzIGZvciBuZXR3b3JrIGRldmljZXMuIEtub3dpbmcgdGhpcywgbXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgZGV0YWlscyBvZiBpdHMgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgaXQgaGFuZGxlcyBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgaW52b2x2ZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgYXJlYXMgdGhhdCBtaWdodCBiZSBzdXNjZXB0aWJsZSB0byBjb250ZW50aW9uLCBhbmQgYW55IG51YW5jZXMgaW4gdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIHN1Y2ggYXMgd2hldGhlciBpdCB1c2VzIHNsYWIgYWxsb2NhdG9ycywgTlVNQSBhd2FyZW5lc3MsIG9yIHNwZWNpZmljIENQVSBhZmZpbml0eSBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bGwgd2FudCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIHdoZXJlIGFuZCB3aGVuIGl0JiMzOTtzIGludm9rZWQsIGFuZCBob3cgdGhlIGFsbG9jYXRlZCBwZXItQ1BVIHN0YXRzIGFyZSB1dGlsaXplZCB0aHJvdWdob3V0IHRoZSBuZXR3b3JrIHN0YWNrLiBJIGFudGljaXBhdGUgdGhlcmUgbWlnaHQgYmUgY29tcGxleGl0aWVzIHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgaW4gc2NlbmFyaW9zIHdoZXJlIGFsbG9jYXRpb24gZmFpbHMgb3IgcmVzb3VyY2VzIGFyZSBsaW1pdGVkLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGVuc3VyZSBvdmVyYWxsIHN5c3RlbSBpbnRlZ3JpdHkgYW5kIHJlbGlhYmlsaXR5LiBPdmVyYWxsLCBteSBnb2FsIGlzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb27igJlzIGJlaGF2aW9yLCBwZXJmb3JtYW5jZSwgYW5kIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgZWNvc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgX19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTMxMzM9c3RhdGljIGlubGluZSB2b2lkIGRldl9kc3RhdHNfdHhfZHJvcHBlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzE0MS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzE0MjojZGVmaW5lIF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHModHlwZSwgZ2ZwKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzE0My0oe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIG5ldHdvcmtpbmcgY29kZToKCioqRGl2aW5nIGludG8gYF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBzb3VyY2UgZm9yIGBfX25ldGRldl9hbGxvY19wY3B1X3N0YXRzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4gSXQmIzM5O3MgZ290ICYjMzQ7YWxsb2MmIzM0OyBpbiB0aGUgbmFtZSwgc28gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiBvZiBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGEgbmV0d29yayBkZXZpY2UuIFBlci1DUFUgaXMgY3J1Y2lhbCBoZXJlOyBpdCBnaXZlcyBlYWNoIENQVSBpdHMgb3duIGNvdW50ZXJzLCBhdm9pZGluZyBjb250ZW50aW9uIGFuZCBlbnN1cmluZyBnb29kIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IG9uIGhpZ2gtY29yZS1jb3VudCBzeXN0ZW1zLiBTbywgdGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbCBmb3IgYWNjdXJhdGUgYW5kIGVmZmljaWVudCBuZXR3b3JrIG1vbml0b3JpbmcuIExldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHNsYWIgYWxsb2NhdGlvbiwgcHJvYmFibHkgdXNpbmcgYGFsbG9jX3BlcmNwdSgpYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aG9zZSBjb3VudGVycyB0byB6ZXJvLiBJJiMzOTtsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIGFueSBzcGlubG9ja3Mgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGVzZSBwZXItY3B1IHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIGRlYWxsb2NhdGlvbiwgdG8gZW5zdXJlIGF0b21pY2l0eS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlJiMzOTtzIGxpZmVjeWNsZSAtIHdoZW4gaXMgaXQgY2FsbGVkLCB3aGVuIGlzIHRoZSBtZW1vcnkgZnJlZWQsIGFuZCBob3cgaXMgaXQgbGlua2VkIGludG8gdGhlIG92ZXJhbGwgYG5ldF9kZXZpY2VgIHN0cnVjdHVyZS4gSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gYmUgY2FsbGVkIGR1cmluZyBkZXZpY2UgcmVnaXN0cmF0aW9uLCBwcm9iYWJseSB3aXRoaW4gdGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiBwYXRoLCB3aGVuIHRoZSBkZXZpY2UgY29tZXMgb25saW5lLiBJJiMzOTtsbCBhbHNvIGNoZWNrIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmljIG5ldHdvcmsgc3RhdGlzdGljcyBzdHJ1Y3R1cmVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBwZXItY3B1IHZlcnNpb25zLiBUaGlzIGlzIGxpa2VseSBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIHVuZGVyc3RhbmQgaG93IG5ldHdvcmsgc3RhdGlzdGljcyB3b3JrIGluIHRoaXMga2VybmVsIHZlcnNpb24uIExldCYjMzk7cyBnZXQgaW50byB0aGUgZGV0YWlscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTQyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNDI6XHQjZGVmaW5lIF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHModHlwZSwgZ2ZwKVx0XHRcdFx0XFxcbjMxNDM6XHQoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4zMTQ0Olx0XHR0eXBlb2YodHlwZSkgX19wZXJjcHUgKnBjcHVfc3RhdHMgPSBhbGxvY19wZXJjcHVfZ2ZwKHR5cGUsIGdmcCk7XFxcbjMxNDU6XHRcdGlmIChwY3B1X3N0YXRzKVx0e1x0XHRcdFx0XHRcdFxcXG4zMTQ2Olx0XHRcdGludCBfX2NwdTtcdFx0XHRcdFx0XHRcXFxuMzE0NzpcdFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoX19jcHUpIHtcdFx0XHRcdFxcXG4zMTQ4Olx0XHRcdFx0dHlwZW9mKHR5cGUpICpzdGF0O1x0XHRcdFx0XFxcbjMxNDk6XHRcdFx0XHRzdGF0ID0gcGVyX2NwdV9wdHIocGNwdV9zdGF0cywgX19jcHUpO1x0XHRcXFxuMzE1MDpcdFx0XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnN0YXQtXHUwMDNlc3luY3ApO1x0XHRcdFxcXG4zMTUxOlx0XHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4zMTUyOlx0XHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4zMTUzOlx0XHRwY3B1X3N0YXRzO1x0XHRcdFx0XHRcdFx0XFxcbjMxNTQ6XHR9KVxuMzE1NTpcdFxuMzE1NjpcdCNkZWZpbmUgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHModHlwZSlcdFx0XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqTWVtb3J5IEFsbG9jYXRpb24gTnVhbmNlczogQSBRdWljayBSZXZpZXcqKgoKQWxyaWdodCwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IGBhbGxvY19wZXJjcHVfZ2ZwYC4gSSB0aG91Z2h0IEkga25ldyB0aGlzLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRoZXNlIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzLCBnaXZlbiB0aGUga2VybmVsJiMzOTtzIGNyaXRpY2FsIHJvbGUgaW4gZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkuIFNvLCBpcyBpdCB0cnVlIHRoYXQgYGFsbG9jX3BlcmNwdV9nZnBgIHplcm9lcyBtZW1vcnkgYnkgZGVmYXVsdD8gSXQgc2VlbWVkIGxpa2UgaXQgZGlkIHVubGVzcyB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcgd2FzIGV4cGxpY2l0bHkgb21pdHRlZC4gSG93ZXZlciwgSSBzZWVtIHRvIHJlbWVtYmVyIHRoYXQgYGFsbG9jX3BlcmNwdWAgaXRzZWxmIGd1YXJhbnRlZXMgemVyb2VkIG1lbW9yeS4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IGxldCYjMzk7cyBjb25maXJtLiBJIGtub3cgdGhhdCB1c2luZyBgYWxsb2NfcGVyY3B1X2dmcGAgd2l0aCBzb21ldGhpbmcgbGlrZSBgR0ZQX0tFUk5FTGAgd2lsbCBhbHNvIHJlc3VsdCBpbiB6ZXJvZWQgbWVtb3J5LCBiZWNhdXNlIHRoZSBgcGNwdV9hbGxvY2AgZnVuY3Rpb24gdW5kZXJuZWF0aCBoYW5kbGVzIHRoZSBhY3R1YWwgYWxsb2NhdGlvbiBhbmQgemVyb2luZywgcmlnaHQ/IE9rYXksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFuZCBhdm9pZCBhIG5hc3R5IGJ1ZyBsYXRlciwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGUgYmVoYXZpb3Igb2YgYGFsbG9jX3BlcmNwdV9nZnBgIHRvIHJlaW5mb3JjZSBteSB1bmRlcnN0YW5kaW5nLiBObyBoYXJtIGluIGEgcXVpY2sgdmVyaWZpY2F0aW9uOyBhIGZhdWx0eSBhc3N1bXB0aW9uIGhlcmUgY291bGQgY2F1c2Ugc2lnbmlmaWNhbnQgaXNzdWVzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBhbGxvY19wZXJjcHVfZ2ZwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGVyY3B1Lmg9MTM3PWV4dGVybiB2b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LmgtMTQ2LVxuaW5jbHVkZS9saW51eC9wZXJjcHUuaDoxNDc6I2RlZmluZSBhbGxvY19wZXJjcHVfZ2ZwKHR5cGUsIGdmcClcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcGVyY3B1LmgtMTQ4LVx0KHR5cGVvZih0eXBlKSBfX3BlcmNwdSAqKV9fYWxsb2NfcGVyY3B1X2dmcChzaXplb2YodHlwZSksXHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDc5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19hbGxvY19wZXJjcHVfZ2ZwYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYF9fYWxsb2NfcGVyY3B1X2dmcGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24gYmVoYXZlcy4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGVyLUNQVSBkYXRhIHN0cnVjdHVyZXMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBhcyB0aGUgbGluY2hwaW4gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiBwZXItQ1BVIHZhcmlhYmxlIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggR0ZQIGZsYWdzLiBNeSBmb2N1cyByaWdodCBub3cgd2lsbCBiZSBvbiBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBwYWdlIGFsbG9jYXRvci4gSSYjMzk7bSBrZWVuIHRvIGV4YW1pbmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBtZW1vcnkgZnJhZ21lbnRhdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBkdXJpbmcgcGVyLUNQVSBhbGxvY2F0aW9ucyB1bmRlciB2YXJpb3VzIHN5c3RlbSB3b3JrbG9hZHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGl0cyBkZXNpZ24gY29uc2lkZXJhdGlvbnMgYXJlIGNvbnNpc3RlbnQgd2l0aCBteSBleHBlY3RhdGlvbnMgYXJvdW5kIHNjYWxhYmlsaXR5IGFuZCBOVU1BLWF3YXJlbmVzcyBpbiBhIG1vZGVybiBrZXJuZWwuIExldCYjMzk7cyBzZWUgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IG1lbW9yeSB6b25lcyBhbmQgaWYgaXQgY29ycmVjdGx5IGludGVncmF0ZXMgd2l0aCB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSByZWNsYWltIG1lY2hhbmlzbXMuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgX19hbGxvY19wZXJjcHVfZ2ZwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGVyY3B1Lmg9MTM3PWV4dGVybiB2b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LmgtMTM5LVxuaW5jbHVkZS9saW51eC9wZXJjcHUuaDoxNDA6I2RlZmluZSBfX2FsbG9jX3BlcmNwdV9nZnAoX3NpemUsIF9hbGlnbiwgX2dmcClcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS5oLTE0MS1cdGFsbG9jX2hvb2tzKHBjcHVfYWxsb2Nfbm9wcm9mKF9zaXplLCBfYWxpZ24sIGZhbHNlLCBfZ2ZwKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ4NQoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiAzNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FmZXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgcGNwdV9hbGxvY19ub3Byb2ZgIHplcm9pbmcgbWVtb3J5IGlzIGEga2V5IHBvaW50IGhlcmU7IGl0IG1lYW5zIHRoZSBwZXItQ1BVIHN0YXRzIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGlzIGlzIGdvb2QuIFRoZSBwYXRjaCBpcyBhYm91dCBhZGRyZXNzaW5nIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBwb3RlbnRpYWwgZGF0YSByYWNlcywgd2hpY2ggaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBidXQgbGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb25lIHNhZmVseS4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGNoYW5nZXMgc29tZSB2YXJpYWJsZXMsIEkgc2VlIHRoYXQuIEl0JiMzOTtzIG1vdmluZyBmcm9tIGB1MzJgIHRvIGB1NjRgIHRvIHByZXZlbnQgb3ZlcmZsb3csIGFuZCBsZXZlcmFnaW5nIHBlci1DUFUgc3RhdHMgaXMgZGVmaW5pdGVseSB0aGUgY29ycmVjdCB3YXkgdG8gYXZvaWQgbG9jayBjb250ZW50aW9uIGFuZCBkYXRhIHJhY2VzLCBlc3BlY2lhbGx5IG9uIHNvbWV0aGluZyBsaWtlIGB1bmJhbGFuY2VkX2xvYWRgLgoKVGhlcmUmIzM5O3Mgbm8gbmV3IGluZm9ybWF0aW9uIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gdGhhdCYjMzk7cyBhIGNoZWNrLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBJIGNhbiBzZWUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGlzIGxvZ2ljLWJhc2VkIOKAkyBmaXhpbmcgdGhvc2UgaW50ZWdlciBvdmVyZmxvd3MgYW5kIGVuc3VyaW5nIHRocmVhZC1zYWZldHkgYXJvdW5kIHRoYXQgc2hhcmVkIGNvdW50ZXIuIEkgY2FuJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGludHJvZHVjZWQsIHNvIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBjb3JydXB0aW9uLCBpZiB0aGVyZSBpcyBhbnkuIFRoYXQgbWVhbnMgSSBkb24mIzM5O3QgdGhpbmsgaXQgKk5lZWRzS01TQU4qIOKAkyB0aGUgY2hhbmdlIGlzIHByZXR0eSBjb250YWluZWQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgb24gd2hldGhlciBhbnl0aGluZyBpbnNpZGUgYHN0cnVjdCBhbGJfYm9uZF9pbmZvYCBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEl0IGxvb2tzIGludGVybmFsOyBpdCYjMzk7cyBwYXJ0IG9mIGBzdHJ1Y3QgYm9uZGluZ2AsIHdoaWNoIGlzIGFsc28gaW50ZXJuYWwuIEFoLCB5ZXMsIHRoZSBgdHhfYnl0ZXNgLCBgbG9hZF9oaXN0b3J5YCwgYW5kIGBsb2FkYCBmaWVsZHMgYXJlIGFsbCBpbnRlcm5hbCBzdGF0cyBzcGVjaWZpYyB0byBBTEIsIHRoZSBBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZyBtb2RlLiBObyB3b3JyaWVzIGFib3V0IHRoZSBjb2RlIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIHRvIHN1bW1hcml6ZSBteSByZWFzb25pbmc6IHRoaXMgcGF0Y2ggaXMgZml4aW5nIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBwb3RlbnRpYWwgZGF0YSByYWNlcyBpbiB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIG1vZGUuIEl0JiMzOTtzIGRvaW5nIHRoaXMgYnkgdXBncmFkaW5nIGB1MzJgIHZhcmlhYmxlcyB0byBgdTY0YCBhbmQgYnkgdXRpbGl6aW5nIHBlci1DUFUgc3RhdGlzdGljcyBmb3IgYHVuYmFsYW5jZWRfbG9hZGAuIFRoZSBuZXcgcGVyLUNQVSBzdGF0aXN0aWNzIHN0cnVjdHVyZSAoYHN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHNgKSBhcmUgYWxsb2NhdGVkIHdpdGggemVyb2VkIG1lbW9yeSB1c2luZyBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAsIHdoaWNoIGNhbGxzIGBhbGxvY19wZXJjcHVfZ2ZwKClgLiBDcnVjaWFsbHksIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgYW55d2hlcmUuIEtBU0FOIGlzIHRoZXJlIGFzIGEgc2FmZXR5IG5ldC4gVGhlcmVmb3JlLCBhIHNwZWNpYWxpemVkIEtNU0FOIGZ1enplciBzZXNzaW9uIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIEFMQiAoQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcpIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgZGF0YSByYWNlcy4gSXQgY2hhbmdlcyBsb2FkIHRyYWNraW5nIHZhcmlhYmxlcyAoYHR4X2J5dGVzYCwgYGxvYWRfaGlzdG9yeWAsIGBsb2FkYCkgZnJvbSBgdTMyYCB0byBgdTY0YCBhbmQgaW50cm9kdWNlcyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgaXMgYWxsb2NhdGVkIHZpYSBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAsIHdoaWNoIGluaGVyZW50bHkgemVyb2VzIHRoZSBhbGxvY2F0ZWQgcGVyLUNQVSBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIChBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZykgbW9kZSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGFuZCBkYXRhIHJhY2VzLiBJdCBjaGFuZ2VzIGxvYWQgdHJhY2tpbmcgdmFyaWFibGVzIChgdHhfYnl0ZXNgLCBgbG9hZF9oaXN0b3J5YCwgYGxvYWRgKSBmcm9tIGB1MzJgIHRvIGB1NjRgIGFuZCBpbnRyb2R1Y2VzIHBlci1DUFUgc3RhdGlzdGljcyBmb3IgYHVuYmFsYW5jZWRfbG9hZGAuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGBzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzYCBpcyBhbGxvY2F0ZWQgdmlhIGBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cygpYCwgd2hpY2ggaW5oZXJlbnRseSB6ZXJvZXMgdGhlIGFsbG9jYXRlZCBwZXItQ1BVIG1lbW9yeS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6NTcuMDcxMjY3NTE1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4OTQ1Mzc0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvbmRfYWxiX2luaXRpYWxpemVcIixcbiAgICBcImJvbmRfYWxiX2RlaW5pdGlhbGl6ZVwiLFxuICAgIFwiYm9uZF9hbGJfbW9uaXRvclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJvbmRpbmcgZHJpdmVyJ3MgQUxCIChBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZykgbW9kZSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGFuZCBkYXRhIHJhY2VzLiBJdCBjaGFuZ2VzIGxvYWQgdHJhY2tpbmcgdmFyaWFibGVzIChgdHhfYnl0ZXNgLCBgbG9hZF9oaXN0b3J5YCwgYGxvYWRgKSBmcm9tIGB1MzJgIHRvIGB1NjRgIGFuZCBpbnRyb2R1Y2VzIHBlci1DUFUgc3RhdGlzdGljcyBmb3IgYHVuYmFsYW5jZWRfbG9hZGAuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGBzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzYCBpcyBhbGxvY2F0ZWQgdmlhIGBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cygpYCwgd2hpY2ggaW5oZXJlbnRseSB6ZXJvZXMgdGhlIGFsbG9jYXRlZCBwZXItQ1BVIG1lbW9yeS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGJvbmRpbmcgZHJpdmVyJ3MgQUxCIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgdXNlIHBlcmNwdSBzdGF0cyBmb3IgbG9hZCBiYWxhbmNpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGFmZmVjdCBjb3JlIGJvbmRpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjU3LjA3MTI3Mzg5NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyNDYyODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjkyMjVkMTIyZmNmMmVhNmExMmVhMWY1NzgxN2YzOGEzMGE4NWY3YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwNjowOTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcXG5pbmRleCA4MzlmNzQ4MmRjMTgyLi4zNzJkYjU0ODAzZDM3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xcbkBAIC02LDYgKzYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuQEAgLTc0LDggKzc1LDggQEAgc3RhdGljIGlubGluZSB1OCBfc2ltcGxlX2hhc2goY29uc3QgdTggKmhhc2hfc3RhcnQsIGludCBoYXNoX3NpemUpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfaW5pdF90YWJsZV9lbnRyeShzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvICplbnRyeSwgaW50IHNhdmVfbG9hZClcXG4ge1xcbiBcXHRpZiAoc2F2ZV9sb2FkKSB7XFxuLVxcdFxcdGVudHJ5LVxcdTAwM2Vsb2FkX2hpc3RvcnkgPSAxICsgZW50cnktXFx1MDAzZXR4X2J5dGVzIC9cXG4tXFx0XFx0XFx0XFx0ICAgICAgQk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMO1xcbitcXHRcXHRlbnRyeS1cXHUwMDNlbG9hZF9oaXN0b3J5ID0gMSArIGRpdl91NjQoZW50cnktXFx1MDAzZXR4X2J5dGVzLFxcbitcXHRcXHRcXHRcXHQgICAgICBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUwpO1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNldHhfYnl0ZXMgPSAwO1xcbiBcXHR9XFxuIFxcbkBAIC0xMzMsNiArMTM0LDEwIEBAIHN0YXRpYyBpbnQgdGxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuIFxcdGlmICghbmV3X2hhc2h0YmwpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0Ym9uZF9pbmZvLVxcdTAwM2V1bmJhbGFuY2VkX2xvYWQgPSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzKTtcXG4rXFx0aWYgKCFib25kX2luZm8tXFx1MDAzZXVuYmFsYW5jZWRfbG9hZClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuIFxcbiBcXHRib25kX2luZm8tXFx1MDAzZXR4X2hhc2h0YmwgPSBuZXdfaGFzaHRibDtcXG5AQCAtMTQzLDYgKzE0OCwxMCBAQCBzdGF0aWMgaW50IHRsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Ym9uZC1cXHUwMDNlbW9kZV9sb2NrKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rb3V0OlxcbitcXHRrZnJlZShuZXdfaGFzaHRibCk7XFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuIFxcbiAvKiBNdXN0IGJlIGNhbGxlZCBvbmx5IGFmdGVyIGFsbCBzbGF2ZXMgaGF2ZSBiZWVuIHJlbGVhc2VkICovXFxuQEAgLTE1NCwzMSArMTYzLDQ0IEBAIHN0YXRpYyB2b2lkIHRsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuIFxcbiBcXHRrZnJlZShib25kX2luZm8tXFx1MDAzZXR4X2hhc2h0YmwpO1xcbiBcXHRib25kX2luZm8tXFx1MDAzZXR4X2hhc2h0YmwgPSBOVUxMO1xcbitcXHRmcmVlX3BlcmNwdShib25kX2luZm8tXFx1MDAzZXVuYmFsYW5jZWRfbG9hZCk7XFxuK1xcdGJvbmRfaW5mby1cXHUwMDNlcHJldl90b3RhbF91bmJhbGFuY2VkID0gMDtcXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbiB9XFxuIFxcbi1zdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXFxuK3N0YXRpYyB1NjQgY29tcHV0ZV9nYXAoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4ge1xcbi1cXHRyZXR1cm4gKHM2NCkgKHNsYXZlLVxcdTAwM2VzcGVlZCBcXHUwMDNjXFx1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xcbi1cXHQgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkIFxcdTAwM2NcXHUwMDNjIDMpOyAvKiBCeXRlcyB0byBiaXRzICovXFxuK1xcdHU2NCBzbGF2ZV9sb2FkID0gU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXFx1MDAzY1xcdTAwM2MgMzsgLyogQnl0ZXMgdG8gYml0cyAqL1xcbitcXHR1MzIgcmF3X3NwZWVkID0gUkVBRF9PTkNFKHNsYXZlLVxcdTAwM2VzcGVlZCk7XFxuK1xcdHU2NCBzcGVlZCA9ICh1NjQpcmF3X3NwZWVkIFxcdTAwM2NcXHUwMDNjIDIwOyAvKiBDb252ZXJ0IHRvIGJpdHMgcGVyIHNlYyAqL1xcbitcXG4rXFx0LyogSXQncyBtZWFuaW5nbGVzcyB0byBjb21wYXJlIGdhcCBvbiB1bmtub3duIHNwZWVkIE5JQyAqL1xcbitcXHRpZiAocmF3X3NwZWVkID09ICh1MzIpU1BFRURfVU5LTk9XTilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBTa2lwIHNsYXZlIHdoaWNoIGlzIG92ZXIgbG9hZGVkICovXFxuK1xcdGlmIChzcGVlZCBcXHUwMDNjPSBzbGF2ZV9sb2FkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBzcGVlZCAtIHNsYXZlX2xvYWQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxcbiB7XFxuIFxcdHN0cnVjdCBzbGF2ZSAqc2xhdmUsICpsZWFzdF9sb2FkZWQ7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XFxuLVxcdGxvbmcgbG9uZyBtYXhfZ2FwO1xcbitcXHR1NjQgbWF4X2dhcCA9IDA7XFxuIFxcbiBcXHRsZWFzdF9sb2FkZWQgPSBOVUxMO1xcbi1cXHRtYXhfZ2FwID0gTExPTkdfTUlOO1xcbiBcXG4gXFx0LyogRmluZCB0aGUgc2xhdmUgd2l0aCB0aGUgbGFyZ2VzdCBnYXAgKi9cXG4gXFx0Ym9uZF9mb3JfZWFjaF9zbGF2ZV9yY3UoYm9uZCwgc2xhdmUsIGl0ZXIpIHtcXG4gXFx0XFx0aWYgKGJvbmRfc2xhdmVfY2FuX3R4KHNsYXZlKSkge1xcbi1cXHRcXHRcXHRsb25nIGxvbmcgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpO1xcbitcXHRcXHRcXHR1NjQgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpO1xcbiBcXG4tXFx0XFx0XFx0aWYgKG1heF9nYXAgXFx1MDAzYyBnYXApIHtcXG4rXFx0XFx0XFx0LyogTWFrZSBzdXJlIHdlIGhhdmUgb25lIGF2YWlsYWJsZSBzbGF2ZSAqL1xcbitcXHRcXHRcXHRpZiAobWF4X2dhcCBcXHUwMDNjPSBnYXApIHtcXG4gXFx0XFx0XFx0XFx0bGVhc3RfbG9hZGVkID0gc2xhdmU7XFxuIFxcdFxcdFxcdFxcdG1heF9nYXAgPSBnYXA7XFxuIFxcdFxcdFxcdH1cXG5AQCAtMTM0NCw4ICsxMzY2LDE0IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxcbiBcXHRpZiAoIXR4X3NsYXZlKSB7XFxuIFxcdFxcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cXG4gXFx0XFx0dHhfc2xhdmUgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpO1xcbi1cXHRcXHRpZiAoYm9uZC1cXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKVxcbi1cXHRcXHRcXHRib25kX2luZm8tXFx1MDAzZXVuYmFsYW5jZWRfbG9hZCArPSBza2ItXFx1MDAzZWxlbjtcXG4rXFx0XFx0aWYgKGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbitcXHRcXHRcXHRzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzICpwY3B1X2xvYWQ7XFxuK1xcbitcXHRcXHRcXHRwY3B1X2xvYWQgPSB0aGlzX2NwdV9wdHIoYm9uZF9pbmZvLVxcdTAwM2V1bmJhbGFuY2VkX2xvYWQpO1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZwY3B1X2xvYWQtXFx1MDAzZXN5bmNwKTtcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2cGNwdV9sb2FkLVxcdTAwM2V0eF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cGNwdV9sb2FkLVxcdTAwM2VzeW5jcCk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xcbkBAIC0xNTI5LDYgKzE1NTcsMjkgQEAgbmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuIFxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdTY0IHJlc2V0X3VuYmFsYW5jZWRfbG9hZChzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvKVxcbit7XFxuK1xcdHU2NCBkZWx0YSwgdHhfYnl0ZXMsIHRvdGFsX2J5dGVzID0gMDtcXG4rXFx0c3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyAqcDtcXG4rXFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuK1xcdFxcdHAgPSBwZXJfY3B1X3B0cihib25kX2luZm8tXFx1MDAzZXVuYmFsYW5jZWRfbG9hZCwgaSk7XFxuK1xcdFxcdGRvIHtcXG4rXFx0XFx0XFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXFx1MDAyNnAtXFx1MDAzZXN5bmNwKTtcXG4rXFx0XFx0XFx0dHhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2cC1cXHUwMDNldHhfYnl0ZXMpO1xcbitcXHRcXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXFx1MDAyNnAtXFx1MDAzZXN5bmNwLCBzdGFydCkpO1xcbitcXG4rXFx0XFx0dG90YWxfYnl0ZXMgKz0gdHhfYnl0ZXM7XFxuK1xcdH1cXG4rXFxuK1xcdGRlbHRhID0gdG90YWxfYnl0ZXMgLSBib25kX2luZm8tXFx1MDAzZXByZXZfdG90YWxfdW5iYWxhbmNlZDtcXG4rXFx0Ym9uZF9pbmZvLVxcdTAwM2VwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSB0b3RhbF9ieXRlcztcXG4rXFxuK1xcdHJldHVybiBkaXZfdTY0KGRlbHRhLCBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUwpO1xcbit9XFxuK1xcbiB2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBib25kaW5nICpib25kID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBib25kaW5nLFxcbkBAIC0xNTcxLDEwICsxNjIyLDExIEBAIHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdGJvbmRfZm9yX2VhY2hfc2xhdmVfcmN1KGJvbmQsIHNsYXZlLCBpdGVyKSB7XFxuIFxcdFxcdFxcdHRsYl9jbGVhcl9zbGF2ZShib25kLCBzbGF2ZSwgMSk7XFxuIFxcdFxcdFxcdGlmIChzbGF2ZSA9PSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XFxuLVxcdFxcdFxcdFxcdFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkID1cXG4tXFx0XFx0XFx0XFx0XFx0Ym9uZF9pbmZvLVxcdTAwM2V1bmJhbGFuY2VkX2xvYWQgL1xcbi1cXHRcXHRcXHRcXHRcXHRcXHRCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUw7XFxuLVxcdFxcdFxcdFxcdGJvbmRfaW5mby1cXHUwMDNldW5iYWxhbmNlZF9sb2FkID0gMDtcXG4rXFx0XFx0XFx0XFx0dTY0IG5ld19sb2FkID0gcmVzZXRfdW5iYWxhbmNlZF9sb2FkKGJvbmRfaW5mbyk7XFxuK1xcbitcXHRcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuK1xcdFxcdFxcdFxcdFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkID0gbmV3X2xvYWQ7XFxuK1xcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0YXRvbWljX3NldChcXHUwMDI2Ym9uZF9pbmZvLVxcdTAwM2V0eF9yZWJhbGFuY2VfY291bnRlciwgMCk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmggYi9pbmNsdWRlL25ldC9ib25kX2FsYi5oXFxuaW5kZXggZTU5NDU0MjdmMzhkZC4uMzJmMTk4MTAzM2U0YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9ib25kX2FsYi5oXFxuKysrIGIvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaFxcbkBAIC01NywxMiArNTcsMTIgQEAgc3RydWN0IHRsYl9jbGllbnRfaW5mbyB7XFxuIFxcdFxcdFxcdFxcdCAqIHBhY2tldHMgdG8gYSBDbGllbnQgdGhhdCB0aGUgSGFzaCBmdW5jdGlvblxcbiBcXHRcXHRcXHRcXHQgKiBnYXZlIHRoaXMgZW50cnkgaW5kZXguXFxuIFxcdFxcdFxcdFxcdCAqL1xcbi1cXHR1MzIgdHhfYnl0ZXM7XFx0XFx0LyogRWFjaCBDbGllbnQgYWNjdW11bGF0ZXMgdGhlIEJ5dGVzVHggdGhhdFxcbitcXHR1NjQgdHhfYnl0ZXM7XFx0XFx0LyogRWFjaCBDbGllbnQgYWNjdW11bGF0ZXMgdGhlIEJ5dGVzVHggdGhhdFxcbiBcXHRcXHRcXHRcXHQgKiB3ZXJlIHRyYW5zbWl0dGVkIHRvIGl0LCBhbmQgYWZ0ZXIgZWFjaFxcbiBcXHRcXHRcXHRcXHQgKiBDYWxsQmFjayB0aGUgTG9hZEhpc3RvcnkgaXMgZGl2aWRlZFxcbiBcXHRcXHRcXHRcXHQgKiBieSB0aGUgYmFsYW5jZSBpbnRlcnZhbFxcbiBcXHRcXHRcXHRcXHQgKi9cXG4tXFx0dTMyIGxvYWRfaGlzdG9yeTtcXHQvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXNcXG4rXFx0dTY0IGxvYWRfaGlzdG9yeTtcXHQvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXNcXG4gXFx0XFx0XFx0XFx0ICogdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHRvIHRoaXMgY2xpZW50IGJ5XFxuIFxcdFxcdFxcdFxcdCAqIHRoZSBzZXJ2ZXIgb24gdGhlIHByZXZpb3VzIGJhbGFuY2VcXG4gXFx0XFx0XFx0XFx0ICogaW50ZXJ2YWwgaW4gQnBzLlxcbkBAIC0xMTgsMTQgKzExOCwyMCBAQCBzdHJ1Y3QgdGxiX3NsYXZlX2luZm8ge1xcbiBcXHRcXHRcXHQgKiBhcmUgdGhlIGVudHJpZXMgdGhhdCB3ZXJlIGFzc2lnbmVkIHRvIHVzZSB0aGlzXFxuIFxcdFxcdFxcdCAqIHNsYXZlIGZvciB0cmFuc21pdC5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdHUzMiBsb2FkO1xcdC8qIEVhY2ggc2xhdmUgc3VtcyB0aGUgbG9hZEhpc3Rvcnkgb2YgYWxsIGNsaWVudHNcXG4rXFx0dTY0IGxvYWQ7XFx0LyogRWFjaCBzbGF2ZSBzdW1zIHRoZSBsb2FkSGlzdG9yeSBvZiBhbGwgY2xpZW50c1xcbiBcXHRcXHRcXHQgKiBhc3NpZ25lZCB0byBpdFxcbiBcXHRcXHRcXHQgKi9cXG4gfTtcXG4gXFxuK3N0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMge1xcbitcXHR1NjRfc3RhdHNfdFxcdFxcdHR4X2J5dGVzO1xcbitcXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmNcXHRzeW5jcDtcXG4rfTtcXG4rXFxuIHN0cnVjdCBhbGJfYm9uZF9pbmZvIHtcXG4gXFx0c3RydWN0IHRsYl9jbGllbnRfaW5mb1xcdCp0eF9oYXNodGJsOyAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgKi9cXG4tXFx0dTMyXFx0XFx0XFx0dW5iYWxhbmNlZF9sb2FkO1xcbitcXHRzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzIF9fcGVyY3B1XFx0KnVuYmFsYW5jZWRfbG9hZDtcXG4rXFx0dTY0XFx0XFx0XFx0cHJldl90b3RhbF91bmJhbGFuY2VkO1xcbiBcXHRhdG9taWNfdFxcdFxcdHR4X3JlYmFsYW5jZV9jb3VudGVyO1xcbiBcXHRpbnRcXHRcXHRcXHRscF9jb3VudGVyO1xcbiBcXHQvKiAtLS0tLS0tLSBybGIgcGFyYW1ldGVycyAtLS0tLS0tLSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTo1Ny41MDQzOTkxNjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0ODE2NTgyNzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9hbGJfaW5pdGlhbGl6ZVwiLFxuICAgIFwiYm9uZF9hbGJfZGVpbml0aWFsaXplXCIsXG4gICAgXCJib25kX2FsYl9tb25pdG9yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQiBtb2RlIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHVzZSBwZXJjcHUgc3RhdHMgZm9yIGxvYWQgYmFsYW5jaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBhZmZlY3QgY29yZSBib25kaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOTIyNWQxMjJmY2YyZWE2YTEyZWExZjU3ODE3ZjM4YTMwYTg1ZjdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDY6MDk6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDgzOWY3NDgyZGMxODIuLjM3MmRiNTQ4MDNkMzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTYsNiArNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbkBAIC03NCw4ICs3NSw4IEBAIHN0YXRpYyBpbmxpbmUgdTggX3NpbXBsZV9oYXNoKGNvbnN0IHU4ICpoYXNoX3N0YXJ0LCBpbnQgaGFzaF9zaXplKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfaW5pdF90YWJsZV9lbnRyeShzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvICplbnRyeSwgaW50IHNhdmVfbG9hZClcbiB7XG4gXHRpZiAoc2F2ZV9sb2FkKSB7XG4tXHRcdGVudHJ5LVx1MDAzZWxvYWRfaGlzdG9yeSA9IDEgKyBlbnRyeS1cdTAwM2V0eF9ieXRlcyAvXG4tXHRcdFx0XHQgICAgICBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUw7XG4rXHRcdGVudHJ5LVx1MDAzZWxvYWRfaGlzdG9yeSA9IDEgKyBkaXZfdTY0KGVudHJ5LVx1MDAzZXR4X2J5dGVzLFxuK1x0XHRcdFx0ICAgICAgQk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMKTtcbiBcdFx0ZW50cnktXHUwMDNldHhfYnl0ZXMgPSAwO1xuIFx0fVxuIFxuQEAgLTEzMyw2ICsxMzQsMTAgQEAgc3RhdGljIGludCB0bGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdGlmICghbmV3X2hhc2h0YmwpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuK1x0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCA9IG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKHN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMpO1xuK1x0aWYgKCFib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gXG4gXHRib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCA9IG5ld19oYXNodGJsO1xuQEAgLTE0Myw2ICsxNDgsMTAgQEAgc3RhdGljIGludCB0bGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbiBcbiBcdHJldHVybiAwO1xuK1xuK291dDpcbitcdGtmcmVlKG5ld19oYXNodGJsKTtcbitcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbiAvKiBNdXN0IGJlIGNhbGxlZCBvbmx5IGFmdGVyIGFsbCBzbGF2ZXMgaGF2ZSBiZWVuIHJlbGVhc2VkICovXG5AQCAtMTU0LDMxICsxNjMsNDQgQEAgc3RhdGljIHZvaWQgdGxiX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcbiBcdGtmcmVlKGJvbmRfaW5mby1cdTAwM2V0eF9oYXNodGJsKTtcbiBcdGJvbmRfaW5mby1cdTAwM2V0eF9oYXNodGJsID0gTlVMTDtcbitcdGZyZWVfcGVyY3B1KGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQpO1xuK1x0Ym9uZF9pbmZvLVx1MDAzZXByZXZfdG90YWxfdW5iYWxhbmNlZCA9IDA7XG4gXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gfVxuIFxuLXN0YXRpYyBsb25nIGxvbmcgY29tcHV0ZV9nYXAoc3RydWN0IHNsYXZlICpzbGF2ZSlcbitzdGF0aWMgdTY0IGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4ge1xuLVx0cmV0dXJuIChzNjQpIChzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi9cbi1cdCAgICAgICAoczY0KSAoU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXHUwMDNjXHUwMDNjIDMpOyAvKiBCeXRlcyB0byBiaXRzICovXG4rXHR1NjQgc2xhdmVfbG9hZCA9IFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkIFx1MDAzY1x1MDAzYyAzOyAvKiBCeXRlcyB0byBiaXRzICovXG4rXHR1MzIgcmF3X3NwZWVkID0gUkVBRF9PTkNFKHNsYXZlLVx1MDAzZXNwZWVkKTtcbitcdHU2NCBzcGVlZCA9ICh1NjQpcmF3X3NwZWVkIFx1MDAzY1x1MDAzYyAyMDsgLyogQ29udmVydCB0byBiaXRzIHBlciBzZWMgKi9cbitcbitcdC8qIEl0J3MgbWVhbmluZ2xlc3MgdG8gY29tcGFyZSBnYXAgb24gdW5rbm93biBzcGVlZCBOSUMgKi9cbitcdGlmIChyYXdfc3BlZWQgPT0gKHUzMilTUEVFRF9VTktOT1dOKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFNraXAgc2xhdmUgd2hpY2ggaXMgb3ZlciBsb2FkZWQgKi9cbitcdGlmIChzcGVlZCBcdTAwM2M9IHNsYXZlX2xvYWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHNwZWVkIC0gc2xhdmVfbG9hZDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4ge1xuIFx0c3RydWN0IHNsYXZlICpzbGF2ZSwgKmxlYXN0X2xvYWRlZDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4tXHRsb25nIGxvbmcgbWF4X2dhcDtcbitcdHU2NCBtYXhfZ2FwID0gMDtcbiBcbiBcdGxlYXN0X2xvYWRlZCA9IE5VTEw7XG4tXHRtYXhfZ2FwID0gTExPTkdfTUlOO1xuIFxuIFx0LyogRmluZCB0aGUgc2xhdmUgd2l0aCB0aGUgbGFyZ2VzdCBnYXAgKi9cbiBcdGJvbmRfZm9yX2VhY2hfc2xhdmVfcmN1KGJvbmQsIHNsYXZlLCBpdGVyKSB7XG4gXHRcdGlmIChib25kX3NsYXZlX2Nhbl90eChzbGF2ZSkpIHtcbi1cdFx0XHRsb25nIGxvbmcgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpO1xuK1x0XHRcdHU2NCBnYXAgPSBjb21wdXRlX2dhcChzbGF2ZSk7XG4gXG4tXHRcdFx0aWYgKG1heF9nYXAgXHUwMDNjIGdhcCkge1xuK1x0XHRcdC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIG9uZSBhdmFpbGFibGUgc2xhdmUgKi9cbitcdFx0XHRpZiAobWF4X2dhcCBcdTAwM2M9IGdhcCkge1xuIFx0XHRcdFx0bGVhc3RfbG9hZGVkID0gc2xhdmU7XG4gXHRcdFx0XHRtYXhfZ2FwID0gZ2FwO1xuIFx0XHRcdH1cbkBAIC0xMzQ0LDggKzEzNjYsMTQgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHRpZiAoIXR4X3NsYXZlKSB7XG4gXHRcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cbiBcdFx0dHhfc2xhdmUgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSk7XG4tXHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYilcbi1cdFx0XHRib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkICs9IHNrYi1cdTAwM2VsZW47XG4rXHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xuK1x0XHRcdHN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgKnBjcHVfbG9hZDtcbitcbitcdFx0XHRwY3B1X2xvYWQgPSB0aGlzX2NwdV9wdHIoYm9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCk7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZwY3B1X2xvYWQtXHUwMDNlc3luY3ApO1xuK1x0XHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2cGNwdV9sb2FkLVx1MDAzZXR4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZwY3B1X2xvYWQtXHUwMDNlc3luY3ApO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xuQEAgLTE1MjksNiArMTU1NywyOSBAQCBuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbiBcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuIH1cbiBcbitzdGF0aWMgdTY0IHJlc2V0X3VuYmFsYW5jZWRfbG9hZChzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvKVxuK3tcbitcdHU2NCBkZWx0YSwgdHhfYnl0ZXMsIHRvdGFsX2J5dGVzID0gMDtcbitcdHN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgKnA7XG4rXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4rXHRpbnQgaTtcbitcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG4rXHRcdHAgPSBwZXJfY3B1X3B0cihib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkLCBpKTtcbitcdFx0ZG8ge1xuK1x0XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnAtXHUwMDNlc3luY3ApO1xuK1x0XHRcdHR4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2cC1cdTAwM2V0eF9ieXRlcyk7XG4rXHRcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZwLVx1MDAzZXN5bmNwLCBzdGFydCkpO1xuK1xuK1x0XHR0b3RhbF9ieXRlcyArPSB0eF9ieXRlcztcbitcdH1cbitcbitcdGRlbHRhID0gdG90YWxfYnl0ZXMgLSBib25kX2luZm8tXHUwMDNlcHJldl90b3RhbF91bmJhbGFuY2VkO1xuK1x0Ym9uZF9pbmZvLVx1MDAzZXByZXZfdG90YWxfdW5iYWxhbmNlZCA9IHRvdGFsX2J5dGVzO1xuK1xuK1x0cmV0dXJuIGRpdl91NjQoZGVsdGEsIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTCk7XG4rfVxuK1xuIHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJvbmRpbmcsXG5AQCAtMTU3MSwxMCArMTYyMiwxMSBAQCB2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xuIFx0XHRcdHRsYl9jbGVhcl9zbGF2ZShib25kLCBzbGF2ZSwgMSk7XG4gXHRcdFx0aWYgKHNsYXZlID09IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKSkge1xuLVx0XHRcdFx0U0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgPVxuLVx0XHRcdFx0XHRib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkIC9cbi1cdFx0XHRcdFx0XHRCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUw7XG4tXHRcdFx0XHRib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkID0gMDtcbitcdFx0XHRcdHU2NCBuZXdfbG9hZCA9IHJlc2V0X3VuYmFsYW5jZWRfbG9hZChib25kX2luZm8pO1xuK1xuK1x0XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbitcdFx0XHRcdFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkID0gbmV3X2xvYWQ7XG4rXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGF0b21pY19zZXQoXHUwMDI2Ym9uZF9pbmZvLVx1MDAzZXR4X3JlYmFsYW5jZV9jb3VudGVyLCAwKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ib25kX2FsYi5oIGIvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaFxuaW5kZXggZTU5NDU0MjdmMzhkZC4uMzJmMTk4MTAzM2U0YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmhcbisrKyBiL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmhcbkBAIC01NywxMiArNTcsMTIgQEAgc3RydWN0IHRsYl9jbGllbnRfaW5mbyB7XG4gXHRcdFx0XHQgKiBwYWNrZXRzIHRvIGEgQ2xpZW50IHRoYXQgdGhlIEhhc2ggZnVuY3Rpb25cbiBcdFx0XHRcdCAqIGdhdmUgdGhpcyBlbnRyeSBpbmRleC5cbiBcdFx0XHRcdCAqL1xuLVx0dTMyIHR4X2J5dGVzO1x0XHQvKiBFYWNoIENsaWVudCBhY2N1bXVsYXRlcyB0aGUgQnl0ZXNUeCB0aGF0XG4rXHR1NjQgdHhfYnl0ZXM7XHRcdC8qIEVhY2ggQ2xpZW50IGFjY3VtdWxhdGVzIHRoZSBCeXRlc1R4IHRoYXRcbiBcdFx0XHRcdCAqIHdlcmUgdHJhbnNtaXR0ZWQgdG8gaXQsIGFuZCBhZnRlciBlYWNoXG4gXHRcdFx0XHQgKiBDYWxsQmFjayB0aGUgTG9hZEhpc3RvcnkgaXMgZGl2aWRlZFxuIFx0XHRcdFx0ICogYnkgdGhlIGJhbGFuY2UgaW50ZXJ2YWxcbiBcdFx0XHRcdCAqL1xuLVx0dTMyIGxvYWRfaGlzdG9yeTtcdC8qIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIGFtb3VudCBvZiBCeXRlc1xuK1x0dTY0IGxvYWRfaGlzdG9yeTtcdC8qIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIGFtb3VudCBvZiBCeXRlc1xuIFx0XHRcdFx0ICogdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHRvIHRoaXMgY2xpZW50IGJ5XG4gXHRcdFx0XHQgKiB0aGUgc2VydmVyIG9uIHRoZSBwcmV2aW91cyBiYWxhbmNlXG4gXHRcdFx0XHQgKiBpbnRlcnZhbCBpbiBCcHMuXG5AQCAtMTE4LDE0ICsxMTgsMjAgQEAgc3RydWN0IHRsYl9zbGF2ZV9pbmZvIHtcbiBcdFx0XHQgKiBhcmUgdGhlIGVudHJpZXMgdGhhdCB3ZXJlIGFzc2lnbmVkIHRvIHVzZSB0aGlzXG4gXHRcdFx0ICogc2xhdmUgZm9yIHRyYW5zbWl0LlxuIFx0XHRcdCAqL1xuLVx0dTMyIGxvYWQ7XHQvKiBFYWNoIHNsYXZlIHN1bXMgdGhlIGxvYWRIaXN0b3J5IG9mIGFsbCBjbGllbnRzXG4rXHR1NjQgbG9hZDtcdC8qIEVhY2ggc2xhdmUgc3VtcyB0aGUgbG9hZEhpc3Rvcnkgb2YgYWxsIGNsaWVudHNcbiBcdFx0XHQgKiBhc3NpZ25lZCB0byBpdFxuIFx0XHRcdCAqL1xuIH07XG4gXG4rc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyB7XG4rXHR1NjRfc3RhdHNfdFx0XHR0eF9ieXRlcztcbitcdHN0cnVjdCB1NjRfc3RhdHNfc3luY1x0c3luY3A7XG4rfTtcbitcbiBzdHJ1Y3QgYWxiX2JvbmRfaW5mbyB7XG4gXHRzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvXHQqdHhfaGFzaHRibDsgLyogRHluYW1pY2FsbHkgYWxsb2NhdGVkICovXG4tXHR1MzJcdFx0XHR1bmJhbGFuY2VkX2xvYWQ7XG4rXHRzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzIF9fcGVyY3B1XHQqdW5iYWxhbmNlZF9sb2FkO1xuK1x0dTY0XHRcdFx0cHJldl90b3RhbF91bmJhbGFuY2VkO1xuIFx0YXRvbWljX3RcdFx0dHhfcmViYWxhbmNlX2NvdW50ZXI7XG4gXHRpbnRcdFx0XHRscF9jb3VudGVyO1xuIFx0LyogLS0tLS0tLS0gcmxiIHBhcmFtZXRlcnMgLS0tLS0tLS0gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjU3LjUwNDQwMDc3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2OTk0MTQzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJvbmRpbmcgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBkaWdnaW5nIGludG8gdGhlIGd1dHMgb2YgdGhlIG5ldHdvcmsgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgQUxCIChBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZykgbW9kZS4gTG9va3MgbGlrZSB0aGV5J3JlIGFkZHJlc3Npbmcgc29tZSBrZXkgaXNzdWVzIHJlbGF0ZWQgdG8gaW50ZWdlciBvdmVyZmxvd3MsIHdoaWNoIGlzIGFsd2F5cyBnb29kIHRvIHNlZSwgZXNwZWNpYWxseSBpbiBzb21ldGhpbmcgdGhhdCdzIHBvdGVudGlhbGx5IGhhbmRsaW5nIHNpZ25pZmljYW50IG5ldHdvcmsgdHJhZmZpYy5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBidW1waW5nIHVwIHRoZSBzaXplIG9mIHZhcmlvdXMgY291bnRlcnMgYW5kIGxvYWQgaW5kaWNhdG9ycyBmcm9tIGB1MzJgIHRvIGB1NjRgLiBJIHNlZSBpdCBpbiBgdHhfYnl0ZXNgLCBgbG9hZF9oaXN0b3J5YCwgYW5kIGBsb2FkYCB3aXRoaW4gdGhlIGB0bGJfY2xpZW50X2luZm9gIGFuZCBgdGxiX3NsYXZlX2luZm9gIHN0cnVjdHMuIE1ha2VzIHNlbnNlIOKAkyBwcmV2ZW50IG92ZXJmbG93cywgZXNwZWNpYWxseSBvbiBoaWdoLWJhbmR3aWR0aCBsaW5rcy4gVGhlIGludHJvZHVjdGlvbiBvZiBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgYW5kIHRoZSBtb3ZlIHRvIHBlcmNwdSBzdGF0cyBmb3IgYHVuYmFsYW5jZWRfbG9hZGAgd2l0aGluIGBzdHJ1Y3QgYWxiX2JvbmRfaW5mb2AgaXMgc21hcnQuIFVzaW5nIGB1NjRfc3RhdHNfdGAgd2l0aCBzeW5jaHJvbml6YXRpb24gZW5zdXJlcyBhdG9taWMgdXBkYXRlcywgYW5kIHRoZSBwZXJjcHUgYXNwZWN0IGlzIGEgY2xldmVyIHdheSB0byBhdm9pZCB0aG9zZSBuYXN0eSBjYWNoZSBsaW5lIGJvdW5jZXMgb3IgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgY29tZSB1cCB3aXRoIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgQ1BVcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBZZWFoLCBJIHRoaW5rIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQuXG5cblRoZXkndmUgY2xlYXJseSBnb25lIHRocm91Z2ggdGhlIGNvZGUgYW5kIHVwZGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHRsYl9pbml0aWFsaXplYCwgYHRsYl9kZWluaXRpYWxpemVgLCBgY29tcHV0ZV9nYXBgLCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLCBgYm9uZF9kb19hbGJfeG1pdGAsIGByZXNldF91bmJhbGFuY2VkX2xvYWRgLCBhbmQgYGJvbmRfYWxiX21vbml0b3JgIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIGB1NjRgIGRhdGEgdHlwZXMgYW5kIHRoZSBwZXJjcHUgc3RhdHMuIFRoYXQncyBhIGdvb2QgdGhvcm91Z2huZXNzLlxuXG5JIGFsc28gc2VlIHRoYXQgdGhleSdyZSBjb3JyZWN0bHkgaGFuZGxpbmcgYFNQRUVEX1VOS05PV05gIGFuZCBvdmVybG9hZGVkIHNsYXZlcyBpbiB0aGUgYGNvbXB1dGVfZ2FwYCBmdW5jdGlvbi4gRXhjZWxsZW50OyBjb3JuZXIgY2FzZXMgYXJlIGltcG9ydGFudC5cblxuTm93LCBJIHRoaW5rIEknbGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYm9uZGluZyB0byBjb25maXJtIHRoZSBkcml2ZXIncyBhdmFpbGFiaWxpdHkgYW5kIGFueSBkZXBlbmRlbmNpZXMuIFRoYXQncyBzb21ldGhpbmcgSSBhbHdheXMgZG8gd2hlbiByZXZpZXdpbmcgdGhpcyBraW5kIG9mIGNoYW5nZS4gT3ZlcmFsbCwgdGhpcyBzZWVtcyBsaWtlIGEgd2VsbC1jb25zaWRlcmVkIGFuZCBuZWNlc3NhcnkgcGF0Y2guIEl0J3MgYSBzb2xpZCBmaXggZm9yIHBvdGVudGlhbCBwcm9ibGVtcyBhbmQgaW1wcm92ZXMgdGhlIHJvYnVzdG5lc3MgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBBTEIgYm9uZGluZyBtb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzg5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MDQuMjAzODE4MTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTc5OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQxOmNvbmZpZyBCT05ESU5HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiQm9uZGluZyBkcml2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MDQuMzg4NDA4ODg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyNTQ5NTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBCb25kaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBJJ20gd29ya2luZyB3aXRoIGlzIGBCT05ESU5HYC4gTXkgZ29hbCBub3cgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgaXQgbG9va3MgbGlrZTogYHRsYl9pbml0X3RhYmxlX2VudHJ5YCAoc3RhdGljIGlubGluZSksIGB0bGJfaW5pdGlhbGl6ZWAgKHN0YXRpYyksIGB0bGJfZGVpbml0aWFsaXplYCAoc3RhdGljKSwgYGNvbXB1dGVfZ2FwYCAoc3RhdGljKSwgYHRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlYCAoc3RhdGljKSwgYGJvbmRfZG9fYWxiX3htaXRgIChzdGF0aWMpLCBgYm9uZF9hbGJfeG1pdGAgKG5vbi1zdGF0aWMpLCBgcmVzZXRfdW5iYWxhbmNlZF9sb2FkYCAoc3RhdGljKSwgYW5kIGBib25kX2FsYl9tb25pdG9yYCAobm9uLXN0YXRpYykuXG5cblRoaW5raW5nIHN0cmF0ZWdpY2FsbHksIGBib25kX2FsYl94bWl0YCBpcyBjbGVhcmx5IGEgaG90LXBhdGggZnVuY3Rpb24sIHBhcnQgb2YgdGhlIHRyYW5zbWl0IHBhdGgsIHNvIHRoYXQncyBhIHByaW1lIGNhbmRpZGF0ZS4gVGhlbiwgYGJvbmRfYWxiX21vbml0b3JgIGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uLCBtZWFuaW5nIGl0IGhhbmRsZXMgYmFja2dyb3VuZCB0YXNrcyBvciBtb25pdG9yaW5nLCBhbHNvIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLiBJIGFsc28gbm90ZSB0aGF0IGB0bGJfaW5pdGlhbGl6ZWAgZ2V0cyBjYWxsZWQgZHVyaW5nIHRoZSBib25kaW5nIHNldHVwIHByb2Nlc3MsIHdoaWNoIGNvdWxkIHJldmVhbCBpbnRlcmVzdGluZyBidWdzLlxuXG5HaXZlbiB0aGVzZSBjb25zaWRlcmF0aW9ucywgSSB0aGluayBJJ2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBib25kX2FsYl9tb25pdG9yYCBhbmQgYGJvbmRfYWxiX3htaXRgIGZvciBhIGNsb3NlciBsb29rLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgZnJ1aXRmdWwgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MDguOTEzOTA2NjU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzMwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvbmRfYWxiX21vbml0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE1NjA9c3RhdGljIHU2NCByZXNldF91bmJhbGFuY2VkX2xvYWQoc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTgyLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNTgzOnZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1ODQte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzIwPXZvaWQgYm9uZF93b3JrX2luaXRfYWxsKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzI3LVxcdFxcdFxcdCAgYm9uZF9yZXNlbmRfaWdtcF9qb2luX3JlcXVlc3RzX2RlbGF5ZWQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDMyODpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2Ym9uZC1cXHUwMDNlYWxiX3dvcmssIGJvbmRfYWxiX21vbml0b3IpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMyOS1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2Ym9uZC1cXHUwMDNlbWlpX3dvcmssIGJvbmRfbWlpX21vbml0b3IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDowOC45NTg2NDI3ODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ0NzIwNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIEJvbmQgQUxCIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGJvbmRfYWxiX21vbml0b3JgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBhIHByb21pc2luZyB0YXJnZXQgZm9yIGZ1enppbmcsIGV2ZW4gdGhvdWdoIGl0J3MgcGFydCBvZiBhIHdvcmtxdWV1ZS4gVGhhdCdzIGEgYml0IG9mIGEgd3JpbmtsZSwgYnV0IHBvdGVudGlhbGx5IHN0aWxsIGV4cGxvaXRhYmxlLiBUaGVuIHRoZXJlJ3MgYGJvbmRfYWxiX3htaXRgLCB3aGljaCBpcyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24sIHNvIHRoYXQncyBkZWZpbml0ZWx5IHdvcnRoIGEgbG9vayB0b28uIEhtbSwgbGV0IG1lIGRpZyBhcm91bmQgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcuIEFoLCBoZXJlJ3MgYGJvbmRfYWxiX2luaXRpYWxpemVgLCBhbmQgaXQgY2FsbHMgYHRsYl9pbml0aWFsaXplYC4gVGhhdCBtaWdodCBwcm92aWRlIHNvbWUgaW50ZXJlc3RpbmcgYXR0YWNrIHN1cmZhY2UgYXMgd2VsbC4gVGltZSB0byBzdGFydCBtYXBwaW5nIG91dCB0aGUgY2FsbGluZyByZWxhdGlvbnNoaXBzIGFuZCB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3dzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MTIuMjAzMzY3NzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDE2NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvbmRfYWxiX2luaXRpYWxpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTEzMDY9c3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzI3LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzI4OmludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMjkte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzQ3PXN0YXRpYyBpbnQgYm9uZF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDM3My1cXHRpZiAoYm9uZF9pc19sYihib25kKSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDM3NDpcXHRcXHQvKiBib25kX2FsYl9pbml0aWFsaXplIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgdGltZXJcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzUtXFx0XFx0ICogaXMgc3RhcnRlZC5cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzYtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0Mzc3OlxcdFxcdGlmIChib25kX2FsYl9pbml0aWFsaXplKGJvbmQsIChCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0FMQikpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDM3OC1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MTIuMjU2NDEzOTQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc2NDYzNDk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQm9uZGluZyBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBib25kaW5nIGRyaXZlci4gRnJvbSB3aGF0IEkgc2VlLCBgYm9uZF9hbGJfaW5pdGlhbGl6ZWAgYW5kIGBib25kX2FsYl9kZWluaXRpYWxpemVgIGFyZSBjcml0aWNhbCwgYXMgdGhleSdyZSBkaXJlY3RseSBsaW5rZWQgdG8gdGhlIG9wZW5pbmcgYW5kIGNsb3Npbmcgb2YgdGhlIGJvbmRpbmcgaW50ZXJmYWNlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYSBmZXcga2V5IGZ1bmN0aW9uczogYGJvbmRfYWxiX3htaXRgLCBgYm9uZF9hbGJfbW9uaXRvcmAsIGB0bGJfaW5pdGlhbGl6ZWAsIGFuZCBgdGxiX2RlaW5pdGlhbGl6ZWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgbWF5YmUgaW5jbHVkaW5nIGBib25kX2FsYl94bWl0YCwgZXZlbiB0aG91Z2ggaXQncyBsaWtlbHkgYSBob3QtcGF0aCwgYnV0IGFmdGVyIGZ1cnRoZXIgY29uc2lkZXJhdGlvbiwgaXQgc2VlbXMgdGhlcmUncyBhIGJldHRlciBhcHByb2FjaC4gSSBoYXZlIHRvIGtlZXAgaW4gbWluZCB0aGF0IGBib25kX2FsYl94bWl0YCBpcyB3aGVyZSBgYm9uZF9kb19hbGJfeG1pdGAgaXMgY2FsbGVkLCBhbmQgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCB1cGRhdGVzIHBlcmNwdSBzdGF0cy4gTm93LCBgYm9uZF9hbGJfbW9uaXRvcmAgcmVhZHMgdGhvc2Ugc2FtZSBwZXJjcHUgc3RhdHMsIHNvIHRoYXQgbG9va3MgbGlrZSBhIHZlcnkgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIGBib25kX2FsYl9pbml0aWFsaXplYCBpcyBnb29kIHRvby5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYm9uZF9hbGJfeG1pdGAgaXNuJ3QgKnRvbyogaG90LiBZZXMsIGl0J3MgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZm9yIEFMQiBtb2RlIGFuZCwgaW5kZWVkLCBpdCdzIHZlcnkgaG90ISBIb3dldmVyLCBgYm9uZF9hbGJfbW9uaXRvcmAgaXMgYSBkZWxheWVkIHdvcmsgZnVuY3Rpb24uIFRoYXTigJlzIGEgaHVnZSBwbHVzLlxuXG5MZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlIHNpZ25hdHVyZSBvZiBgYm9uZF9hbGJfbW9uaXRvcmA6IGB2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKWAuXG5cbk9rYXksIGRvdWJsZS1jaGVja2luZyBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG1vZGlmaWVkLCBJIHNlZSB0aGF0IGl0J3MgYGJvbmRfYWxiX3htaXRgIGFuZCBgYm9uZF9hbGJfbW9uaXRvcmAgb25seS5cblxuU28sIHRvIHN1bW1hcml6ZSwgYGJvbmRfYWxiX21vbml0b3JgIGFuZCBgYm9uZF9hbGJfaW5pdGlhbGl6ZWAgKHdoaWNoIGluY2x1ZGVzIGB0bGJfaW5pdGlhbGl6ZWApIGFyZSB0aGUgbW9zdCBwcm9taXNpbmcgb25lcyB0byBmb2N1cyBvbi4gSSB3aWxsIGFsc28gY2hlY2sgYGJvbmRfYWxiX2RlaW5pdGAganVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzU0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjE4LjAyMTA1MTYxMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MzU4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9uZF9hbGJfZGVpbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzI4PWludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM0OS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTM1MDp2b2lkIGJvbmRfYWxiX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM1MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTY4OD1pbnQgYm9uZF9hbGJfaW5pdF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzE3LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNzE4OnZvaWQgYm9uZF9hbGJfZGVpbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTI1MTYtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNTE3OlxcdFxcdGJvbmRfYWxiX2RlaW5pdF9zbGF2ZShib25kLCBzbGF2ZSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTE4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDQxMD1zdGF0aWMgaW50IGJvbmRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NDIyLVxcdGlmIChib25kX2lzX2xiKGJvbmQpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDQyMzpcXHRcXHRib25kX2FsYl9kZWluaXRpYWxpemUoYm9uZCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NDI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDoxOC4wNjc0OTIyN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzcxODA5OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW5pdGlhbCBUaG91Z2h0cyBvbiBCb25kaW5nIE1vZHVsZSBJbml0aWFsaXphdGlvbiBhbmQgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGNvcmUgYm9uZGluZyBtb2R1bGUgZnVuY3Rpb25zLiBXZSBoYXZlIGBib25kX2FsYl9pbml0aWFsaXplYCwgYGJvbmRfYWxiX2RlaW5pdGlhbGl6ZWAsIGFuZCBgYm9uZF9hbGJfbW9uaXRvcmAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIGJyaW5naW5nIGEgYm9uZGluZyBpbnRlcmZhY2Ugb25saW5lLCBzaHV0dGluZyBpdCBkb3duIGNsZWFubHksIGFuZCBrZWVwaW5nIGFuIGV5ZSBvbiBpdHMgc3RhdHVzLCByZXNwZWN0aXZlbHkuIFNlZW1zIGxpa2UgYSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiwgZGUtaW5pdGlhbGl6YXRpb24sIGFuZCBtb25pdG9yaW5nIHNldHVwIGZvciBhbiBhY3RpdmUvcGFzc2l2ZSBib25kLCBwb3RlbnRpYWxseSBBTEIgKGFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nKSwgdGhvdWdoIHRoZSBuYW1pbmcgY29udmVudGlvbiBjb3VsZCBiZSBiZXR0ZXIuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gYW55dGhpbmcgZGVlcGVyLCBsZXQncyBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRob3NlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBXZSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgdGhlIGBCT05ESU5HYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBwcm9wZXJseSBzZXQgYW5kIGFsbCB0aGUgcHJlcmVxdWlzaXRlIGZsYWdzIGFyZSBtZXQuIE5vIHBvaW50IGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSB0cm91Ymxlc2hvb3RpbmcgaWYgdGhlIG1vZHVsZSBpc24ndCBldmVuIGNvbXBpbGVkIGluISBDaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBiZWZvcmUgZ2V0dGluZyBhbnkgZGVlcGVyIGludG8gdGhlIGNvZGUuIEdvdHRhIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgdGhlIHJpZ2h0IHNldHRpbmdzIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAyMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjIxLjgzOTMwNTY5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1ODk1Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQxOmNvbmZpZyBCT05ESU5HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiQm9uZGluZyBkcml2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MjEuOTY1MjA3MjE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzA3NDYwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06XG5cbioqQ2hlY2tpbmcgdGhlIGBORVRfQ09SRWAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYE5FVF9DT1JFYCBhY3R1YWxseSAqaXMqIHdpdGhpbiB0aGlzIGJ1aWxkIHN5c3RlbS4gSXMgaXQgYSBmdWxsLWJsb3duIGBtZW51Y29uZmlnYCBvcHRpb24sIG9mZmVyaW5nIHZhcmlvdXMgc3ViLXNlbGVjdGlvbnMgYW5kIGRlcGVuZGVuY2llcz8gT3IgaXMgaXQgc2ltcGx5IGEgYm9vbGVhbiwgYSB5ZXMvbm8gZmxhZyB0aGF0IGFjdGl2YXRlcyBvciBkZWFjdGl2YXRlcyBzb21lIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHk/IFRoZSBhbnN3ZXIgZGljdGF0ZXMgaG93IEkgbmVlZCB0byBhcHByb2FjaCBhbnkgZnVydGhlciBhbmFseXNpcyBvciBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgZGV0ZXJtaW5lIGl0cyBleGFjdCBuYXR1cmUuIExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzOTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDoyNC44OTU5NTYyMTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTM1OTg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mjk9Y29uZmlnIE1JSVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMyOmNvbmZpZyBORVRfQ09SRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjI1LjA0NzMyMTE0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjI3NDE2MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gYE5FVF9DT1JFYCBpcyB0aGUgZGVmYXVsdCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIFRoYXQgbWVhbnMgSSBqdXN0IG5lZWQgdG8gZm9jdXMgb24gdGhlIGBCT05ESU5HYCBjb25maWcuIE5vIG90aGVyIGNvbmZpZ3Mgc2VlbSByZWxldmFudCBhdCBmaXJzdCBnbGFuY2UuXG5cbkxldCdzIGRpZyBpbiBhIGJpdC4gVGhlIHBhdGNoIGxldmVyYWdlcyBzb21lIHN0YW5kYXJkIGtlcm5lbCBBUElzOiBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNgLCBhbmQgYWxsIHRob3NlIGB1NjRfc3RhdHNfKmAgZnVuY3Rpb25zLiBOb3RoaW5nIHVudXN1YWwgdGhlcmUsIGFuZCB0aGF0J3MgZ29vZC5cblxuUmlnaHQsIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzIGFyZSB3aXRoaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIHNvbWUgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHN3aXRjaGluZyB0byBwZXJjcHUgc3RhdHMgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBGdW5jdGlvbmFsbHksIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50IGFuZCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBQZXItQ1BVIHN0YXRzIGFyZSBhbHdheXMgYW4gaW50ZXJlc3RpbmcgYXJlYSB0byB0ZXN0LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGxvYWQgYmFsYW5jaW5nLlxuXG5NeSBrZXkgZm9jdXMgc2hvdWxkIGJlIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGJvbmRfYWxiX2luaXRpYWxpemVgLCBgYm9uZF9hbGJfZGVpbml0aWFsaXplYCwgYW5kIGBib25kX2FsYl9tb25pdG9yYC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aXRoaW4gdGhlIGJvbmRpbmcgY29udGV4dC5cblxuQW5kIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIGBib25kX2FsYl9tb25pdG9yYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGxpa2VseS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGhvdyBpdCdzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY0OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDozMy42NzQ3NDA2NTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzMxNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgYm9uZF9hbGJfbW9uaXRvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTU2MD1zdGF0aWMgdTY0IHJlc2V0X3VuYmFsYW5jZWRfbG9hZChzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1ODItXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1ODM6dm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTU4NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjMzLjcxODA3NTcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Nzk1MTc5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZy4uLiB0aGlzIGlzbid0IGEgZml4ZWQgc3RhdGUuIFRoZSBzaXR1YXRpb24gaXMgaW5oZXJlbnRseSBkeW5hbWljLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBwcm9jZXNzIHRoaXMuIEkgY2FuJ3QgdHJlYXQgaXQgYXMgYSBjb25zdGFudC5cblxuQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgc2hvdWxkIHJlLWV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgYm9uZF9hbGJfaW5pdGlhbGl6ZWAgZnVuY3Rpb24uIEl0J3MgdGhlIGx5bmNocGluIG9mIHRoZSB0aGluZywgYW5kIG5lZWRzIHRvIGJlIHJvY2sgc29saWQgdG8gYmUgc3VyZSBub3RoaW5nIGVsc2UgaXMgZ29pbmcgb24uIExldCdzIG1ha2Ugc3VyZSBpdCdzIGRvaW5nIGV4YWN0bHkgd2hhdCBJIGV4cGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjM2LjY5NzU5NjAxM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MDMxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGJvbmRfYWxiX2luaXRpYWxpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTEzMDY9c3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzI3LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzI4OmludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMjkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDozNi43NDIyMDYwNTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MTM1MTAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBEeW5hbWljcyBvZiB0aGUgU3lzdGVtKipcblxuUmlnaHQsIHRoaXMgaXNuJ3QgYSBmaXhlZCBzaXR1YXRpb247IGl0J3MgZHluYW1pYy4gVGhpbmdzIGFyZSBpbiBmbHV4LiBCZWZvcmUgSSBwcm9jZWVkLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2Ygc29tZXRoaW5nIGNyaXRpY2FsOiBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGJvbmRfYWxiX2RlaW5pdGlhbGl6ZWAgZnVuY3Rpb24uIEl0J3Mgb2Z0ZW4gdGhlIGx5bmNocGluIGluIHRoZXNlIGtpbmRzIG9mIHN5c3RlbSByZXNldHMsIHNvIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGxvZ2ljIGFuZCBlbnN1cmUgaXQncyBiZWhhdmluZyBhcyBleHBlY3RlZC4gTm8gYXNzdW1wdGlvbnMgaGVyZSwganVzdCBzb2xpZCB2ZXJpZmljYXRpb24gYmVmb3JlIG1vdmluZyBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjE1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MzkuODIzNTYwMzQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY0Mjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGJvbmRfYWxiX2RlaW5pdGlhbGl6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTMyOD1pbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNDktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzNTA6dm9pZCBib25kX2FsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDozOS44NjkyMDg3MzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcxOTAwMjA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCb25kaW5nIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJ3QganVzdCBjb3NtZXRpYzsgaXQncyBnb3Qgc29tZSByZWFsIHRlZXRoIHRvIGl0LiBJIHNlZSB0aGV5J3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBpbiB0aGUgYm9uZGluZyBkcml2ZXIncyBBTEIgbW9kZS4gQ2xldmVyIG1vdmUsIGNoYW5naW5nIGB0eF9ieXRlc2AgYW5kIGBsb2FkX2hpc3RvcnlgIHRvIGB1NjRgLiBUaGF0J2xsIGdpdmUgdGhlbSBlbm91Z2ggaGVhZHJvb20gdG8gcHJldmVudCB0aG9zZSBuYXN0eSByb2xsb3ZlcnMsIHdoaWNoIGNvdWxkIHdyZWFrIGhhdm9jIG9uIGxvYWQgYmFsYW5jaW5nIGNhbGN1bGF0aW9ucy4gQW5kIHRoZSBwZXJjcHUgc3RhdHMgZm9yIGB1bmJhbGFuY2VkX2xvYWRgPyBFeGNlbGxlbnQuIFRoYXQgY29tcGxldGVseSBzaWRlc3RlcHMgdGhlIHJhY2UgY29uZGl0aW9ucyBhbmQgY2FjaGUgbGluZSBib3VuY2luZyBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgdG8gc2VlLlxuXG5UaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0LCB3aGlsZSBzZWVtaW5nbHkgdGFyZ2V0ZWQsIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgc2lnbmlmaWNhbnQgZ2l2ZW4gdGhlIHByZXZhbGVuY2Ugb2YgdGhvc2Ugc2V0dXBzLiBJdCdzIHRvdWNoaW5nIGNvcmUgYm9uZGluZyBsb2dpYywgd2hpY2ggbWVhbnMgaXQgY291bGQgcG90ZW50aWFsbHkgaW1wYWN0IGEgd2lkZSByYW5nZSBvZiBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBHaXZlbiB0aGUgZnVuY3Rpb25hbCBhbmQgaW1wYWN0ZnVsIG5hdHVyZSBvZiB0aGUgcGF0Y2ggSSB3b3VsZCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBBbmQgdGhlIGBGb2N1c1N5bWJvbHNgIHRoZXkndmUgaWRlbnRpZmllZCDigJMgYGJvbmRfYWxiX2luaXRpYWxpemVgLCBgYm9uZF9hbGJfZGVpbml0aWFsaXplYCwgYW5kIGBib25kX2FsYl9tb25pdG9yYCDigJMgdGhvc2UgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgdG8gZXhhbWluZSBjbG9zZWx5LiBHb29kIGNob2ljZS4gRmluYWxseSwgbWFraW5nIHN1cmUgdGhlIGBCT05ESU5HYCBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQgaXMgYSBnaXZlbi4gVGhlc2UgY2hhbmdlcyBhcmUgY3J1Y2lhbCBmb3Igc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDQsIk91dHB1dFRva2VucyI6MTAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjQ1LjU4ODIxMzQyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDEwMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9hbGJfaW5pdGlhbGl6ZVwiLFxuICAgIFwiYm9uZF9hbGJfZGVpbml0aWFsaXplXCIsXG4gICAgXCJib25kX2FsYl9tb25pdG9yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQiBtb2RlIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHVzZSBwZXJjcHUgc3RhdHMgZm9yIGxvYWQgYmFsYW5jaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBhZmZlY3QgY29yZSBib25kaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl9pbml0aWFsaXplXCIsXG4gICAgXCJib25kX2FsYl9kZWluaXRpYWxpemVcIixcbiAgICBcImJvbmRfYWxiX21vbml0b3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGJvbmRpbmcgZHJpdmVyJ3MgQUxCIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgdXNlIHBlcmNwdSBzdGF0cyBmb3IgbG9hZCBiYWxhbmNpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGFmZmVjdCBjb3JlIGJvbmRpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjQ1LjY3MDIyOTczNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkyOTU1NTAwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDo0NS42NzA3MzAzMTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzkyOTUwNDQzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQiAoQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcpIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgZGF0YSByYWNlcy4gSXQgY2hhbmdlcyBsb2FkIHRyYWNraW5nIHZhcmlhYmxlcyAoYHR4X2J5dGVzYCwgYGxvYWRfaGlzdG9yeWAsIGBsb2FkYCkgZnJvbSBgdTMyYCB0byBgdTY0YCBhbmQgaW50cm9kdWNlcyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgaXMgYWxsb2NhdGVkIHZpYSBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAsIHdoaWNoIGluaGVyZW50bHkgemVyb2VzIHRoZSBhbGxvY2F0ZWQgcGVyLUNQVSBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjkyMjVkMTIyZmNmMmVhNmExMmVhMWY1NzgxN2YzOGEzMGE4NWY3YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA2OjA5OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5pbmRleCA4MzlmNzQ4MmRjMTgyLi4zNzJkYjU0ODAzZDM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbkBAIC02LDYgKzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGt0X3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtNzQsOCArNzUsOCBAQCBzdGF0aWMgaW5saW5lIHU4IF9zaW1wbGVfaGFzaChjb25zdCB1OCAqaGFzaF9zdGFydCwgaW50IGhhc2hfc2l6ZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2luaXRfdGFibGVfZW50cnkoc3RydWN0IHRsYl9jbGllbnRfaW5mbyAqZW50cnksIGludCBzYXZlX2xvYWQpXG4ge1xuIFx0aWYgKHNhdmVfbG9hZCkge1xuLVx0XHRlbnRyeS1cdTAwM2Vsb2FkX2hpc3RvcnkgPSAxICsgZW50cnktXHUwMDNldHhfYnl0ZXMgL1xuLVx0XHRcdFx0ICAgICAgQk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMO1xuK1x0XHRlbnRyeS1cdTAwM2Vsb2FkX2hpc3RvcnkgPSAxICsgZGl2X3U2NChlbnRyeS1cdTAwM2V0eF9ieXRlcyxcbitcdFx0XHRcdCAgICAgIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTCk7XG4gXHRcdGVudHJ5LVx1MDAzZXR4X2J5dGVzID0gMDtcbiBcdH1cbiBcbkBAIC0xMzMsNiArMTM0LDEwIEBAIHN0YXRpYyBpbnQgdGxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXHRpZiAoIW5ld19oYXNodGJsKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQgPSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzKTtcbitcdGlmICghYm9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZClcbitcdFx0Z290byBvdXQ7XG4rXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuIFxuIFx0Ym9uZF9pbmZvLVx1MDAzZXR4X2hhc2h0YmwgPSBuZXdfaGFzaHRibDtcbkBAIC0xNDMsNiArMTQ4LDEwIEBAIHN0YXRpYyBpbnQgdGxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitvdXQ6XG4rXHRrZnJlZShuZXdfaGFzaHRibCk7XG4rXHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgb25seSBhZnRlciBhbGwgc2xhdmVzIGhhdmUgYmVlbiByZWxlYXNlZCAqL1xuQEAgLTE1NCwzMSArMTYzLDQ0IEBAIHN0YXRpYyB2b2lkIHRsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXG4gXHRrZnJlZShib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCk7XG4gXHRib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCA9IE5VTEw7XG4rXHRmcmVlX3BlcmNwdShib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkKTtcbitcdGJvbmRfaW5mby1cdTAwM2VwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSAwO1xuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuIH1cbiBcbi1zdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4rc3RhdGljIHU2NCBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuIHtcbi1cdHJldHVybiAoczY0KSAoc2xhdmUtXHUwMDNlc3BlZWQgXHUwMDNjXHUwMDNjIDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovXG4tXHQgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkIFx1MDAzY1x1MDAzYyAzKTsgLyogQnl0ZXMgdG8gYml0cyAqL1xuK1x0dTY0IHNsYXZlX2xvYWQgPSBTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMzsgLyogQnl0ZXMgdG8gYml0cyAqL1xuK1x0dTMyIHJhd19zcGVlZCA9IFJFQURfT05DRShzbGF2ZS1cdTAwM2VzcGVlZCk7XG4rXHR1NjQgc3BlZWQgPSAodTY0KXJhd19zcGVlZCBcdTAwM2NcdTAwM2MgMjA7IC8qIENvbnZlcnQgdG8gYml0cyBwZXIgc2VjICovXG4rXG4rXHQvKiBJdCdzIG1lYW5pbmdsZXNzIHRvIGNvbXBhcmUgZ2FwIG9uIHVua25vd24gc3BlZWQgTklDICovXG4rXHRpZiAocmF3X3NwZWVkID09ICh1MzIpU1BFRURfVU5LTk9XTilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBTa2lwIHNsYXZlIHdoaWNoIGlzIG92ZXIgbG9hZGVkICovXG4rXHRpZiAoc3BlZWQgXHUwMDNjPSBzbGF2ZV9sb2FkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBzcGVlZCAtIHNsYXZlX2xvYWQ7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxuIHtcbiBcdHN0cnVjdCBzbGF2ZSAqc2xhdmUsICpsZWFzdF9sb2FkZWQ7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuLVx0bG9uZyBsb25nIG1heF9nYXA7XG4rXHR1NjQgbWF4X2dhcCA9IDA7XG4gXG4gXHRsZWFzdF9sb2FkZWQgPSBOVUxMO1xuLVx0bWF4X2dhcCA9IExMT05HX01JTjtcbiBcbiBcdC8qIEZpbmQgdGhlIHNsYXZlIHdpdGggdGhlIGxhcmdlc3QgZ2FwICovXG4gXHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xuIFx0XHRpZiAoYm9uZF9zbGF2ZV9jYW5fdHgoc2xhdmUpKSB7XG4tXHRcdFx0bG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTtcbitcdFx0XHR1NjQgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpO1xuIFxuLVx0XHRcdGlmIChtYXhfZ2FwIFx1MDAzYyBnYXApIHtcbitcdFx0XHQvKiBNYWtlIHN1cmUgd2UgaGF2ZSBvbmUgYXZhaWxhYmxlIHNsYXZlICovXG4rXHRcdFx0aWYgKG1heF9nYXAgXHUwMDNjPSBnYXApIHtcbiBcdFx0XHRcdGxlYXN0X2xvYWRlZCA9IHNsYXZlO1xuIFx0XHRcdFx0bWF4X2dhcCA9IGdhcDtcbiBcdFx0XHR9XG5AQCAtMTM0NCw4ICsxMzY2LDE0IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0aWYgKCF0eF9zbGF2ZSkge1xuIFx0XHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXG4gXHRcdHR4X3NsYXZlID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpO1xuLVx0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpXG4tXHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCArPSBza2ItXHUwMDNlbGVuO1xuK1x0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcbitcdFx0XHRzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzICpwY3B1X2xvYWQ7XG4rXG4rXHRcdFx0cGNwdV9sb2FkID0gdGhpc19jcHVfcHRyKGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQpO1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cGNwdV9sb2FkLVx1MDAzZXN5bmNwKTtcbitcdFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnBjcHVfbG9hZC1cdTAwM2V0eF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cGNwdV9sb2FkLVx1MDAzZXN5bmNwKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcbkBAIC0xNTI5LDYgKzE1NTcsMjkgQEAgbmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4gXHRyZXR1cm4gYm9uZF9kb19hbGJfeG1pdChza2IsIGJvbmQsIHR4X3NsYXZlKTtcbiB9XG4gXG4rc3RhdGljIHU2NCByZXNldF91bmJhbGFuY2VkX2xvYWQoc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbylcbit7XG4rXHR1NjQgZGVsdGEsIHR4X2J5dGVzLCB0b3RhbF9ieXRlcyA9IDA7XG4rXHRzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzICpwO1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1x0aW50IGk7XG4rXG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xuK1x0XHRwID0gcGVyX2NwdV9wdHIoYm9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCwgaSk7XG4rXHRcdGRvIHtcbitcdFx0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZwLVx1MDAzZXN5bmNwKTtcbitcdFx0XHR0eF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNnAtXHUwMDNldHhfYnl0ZXMpO1xuK1x0XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2cC1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbitcbitcdFx0dG90YWxfYnl0ZXMgKz0gdHhfYnl0ZXM7XG4rXHR9XG4rXG4rXHRkZWx0YSA9IHRvdGFsX2J5dGVzIC0gYm9uZF9pbmZvLVx1MDAzZXByZXZfdG90YWxfdW5iYWxhbmNlZDtcbitcdGJvbmRfaW5mby1cdTAwM2VwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSB0b3RhbF9ieXRlcztcbitcbitcdHJldHVybiBkaXZfdTY0KGRlbHRhLCBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUwpO1xuK31cbitcbiB2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiBcdHN0cnVjdCBib25kaW5nICpib25kID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBib25kaW5nLFxuQEAgLTE1NzEsMTAgKzE2MjIsMTEgQEAgdm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0Ym9uZF9mb3JfZWFjaF9zbGF2ZV9yY3UoYm9uZCwgc2xhdmUsIGl0ZXIpIHtcbiBcdFx0XHR0bGJfY2xlYXJfc2xhdmUoYm9uZCwgc2xhdmUsIDEpO1xuIFx0XHRcdGlmIChzbGF2ZSA9PSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbi1cdFx0XHRcdFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkID1cbi1cdFx0XHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCAvXG4tXHRcdFx0XHRcdFx0Qk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMO1xuLVx0XHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCA9IDA7XG4rXHRcdFx0XHR1NjQgbmV3X2xvYWQgPSByZXNldF91bmJhbGFuY2VkX2xvYWQoYm9uZF9pbmZvKTtcbitcbitcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4rXHRcdFx0XHRTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCA9IG5ld19sb2FkO1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRhdG9taWNfc2V0KFx1MDAyNmJvbmRfaW5mby1cdTAwM2V0eF9yZWJhbGFuY2VfY291bnRlciwgMCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaCBiL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmhcbmluZGV4IGU1OTQ1NDI3ZjM4ZGQuLjMyZjE5ODEwMzNlNGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ib25kX2FsYi5oXG4rKysgYi9pbmNsdWRlL25ldC9ib25kX2FsYi5oXG5AQCAtNTcsMTIgKzU3LDEyIEBAIHN0cnVjdCB0bGJfY2xpZW50X2luZm8ge1xuIFx0XHRcdFx0ICogcGFja2V0cyB0byBhIENsaWVudCB0aGF0IHRoZSBIYXNoIGZ1bmN0aW9uXG4gXHRcdFx0XHQgKiBnYXZlIHRoaXMgZW50cnkgaW5kZXguXG4gXHRcdFx0XHQgKi9cbi1cdHUzMiB0eF9ieXRlcztcdFx0LyogRWFjaCBDbGllbnQgYWNjdW11bGF0ZXMgdGhlIEJ5dGVzVHggdGhhdFxuK1x0dTY0IHR4X2J5dGVzO1x0XHQvKiBFYWNoIENsaWVudCBhY2N1bXVsYXRlcyB0aGUgQnl0ZXNUeCB0aGF0XG4gXHRcdFx0XHQgKiB3ZXJlIHRyYW5zbWl0dGVkIHRvIGl0LCBhbmQgYWZ0ZXIgZWFjaFxuIFx0XHRcdFx0ICogQ2FsbEJhY2sgdGhlIExvYWRIaXN0b3J5IGlzIGRpdmlkZWRcbiBcdFx0XHRcdCAqIGJ5IHRoZSBiYWxhbmNlIGludGVydmFsXG4gXHRcdFx0XHQgKi9cbi1cdHUzMiBsb2FkX2hpc3Rvcnk7XHQvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXNcbitcdHU2NCBsb2FkX2hpc3Rvcnk7XHQvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXNcbiBcdFx0XHRcdCAqIHRoYXQgd2VyZSB0cmFuc21pdHRlZCB0byB0aGlzIGNsaWVudCBieVxuIFx0XHRcdFx0ICogdGhlIHNlcnZlciBvbiB0aGUgcHJldmlvdXMgYmFsYW5jZVxuIFx0XHRcdFx0ICogaW50ZXJ2YWwgaW4gQnBzLlxuQEAgLTExOCwxNCArMTE4LDIwIEBAIHN0cnVjdCB0bGJfc2xhdmVfaW5mbyB7XG4gXHRcdFx0ICogYXJlIHRoZSBlbnRyaWVzIHRoYXQgd2VyZSBhc3NpZ25lZCB0byB1c2UgdGhpc1xuIFx0XHRcdCAqIHNsYXZlIGZvciB0cmFuc21pdC5cbiBcdFx0XHQgKi9cbi1cdHUzMiBsb2FkO1x0LyogRWFjaCBzbGF2ZSBzdW1zIHRoZSBsb2FkSGlzdG9yeSBvZiBhbGwgY2xpZW50c1xuK1x0dTY0IGxvYWQ7XHQvKiBFYWNoIHNsYXZlIHN1bXMgdGhlIGxvYWRIaXN0b3J5IG9mIGFsbCBjbGllbnRzXG4gXHRcdFx0ICogYXNzaWduZWQgdG8gaXRcbiBcdFx0XHQgKi9cbiB9O1xuIFxuK3N0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMge1xuK1x0dTY0X3N0YXRzX3RcdFx0dHhfYnl0ZXM7XG4rXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmNcdHN5bmNwO1xuK307XG4rXG4gc3RydWN0IGFsYl9ib25kX2luZm8ge1xuIFx0c3RydWN0IHRsYl9jbGllbnRfaW5mb1x0KnR4X2hhc2h0Ymw7IC8qIER5bmFtaWNhbGx5IGFsbG9jYXRlZCAqL1xuLVx0dTMyXHRcdFx0dW5iYWxhbmNlZF9sb2FkO1xuK1x0c3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyBfX3BlcmNwdVx0KnVuYmFsYW5jZWRfbG9hZDtcbitcdHU2NFx0XHRcdHByZXZfdG90YWxfdW5iYWxhbmNlZDtcbiBcdGF0b21pY190XHRcdHR4X3JlYmFsYW5jZV9jb3VudGVyO1xuIFx0aW50XHRcdFx0bHBfY291bnRlcjtcbiBcdC8qIC0tLS0tLS0tIHJsYiBwYXJhbWV0ZXJzIC0tLS0tLS0tICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDo0NS42NzA3MzExNDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE2Nzg4OTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQm9uZGluZyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgdGhlIGJvbmRpbmcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIEFjdGl2ZSBMb2FkIEJhbGFuY2luZyAoQUxCKSBjb21wb25lbnQsIGZvY3VzZWQgb24gYGJvbmRfYWxiLmNgIGFuZCBgYm9uZF9hbGIuaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBhIHNpZ25pZmljYW50IHNoaWZ0IHRvd2FyZHMgaGFuZGxpbmcgbGFyZ2VyIHZhbHVlcywgYSBjcml0aWNhbCBjaGFuZ2UgZm9yIGhpZ2gtYmFuZHdpZHRoIGVudmlyb25tZW50cy4gVGhleSdyZSBicm9hZGVuaW5nIHRoZSBkYXRhIHR5cGVzIHVzZWQgZm9yIGxvYWQgbWV0cmljcyDigJMgc3BlY2lmaWNhbGx5LCBjb252ZXJ0aW5nIGB0eF9ieXRlc2AgYW5kIGBsb2FkX2hpc3RvcnlgIHdpdGhpbiBgdGxiX2NsaWVudF9pbmZvYCwgYW5kIGBsb2FkYCBpbiBgdGxiX3NsYXZlX2luZm9gIGZyb20gYHUzMmAgdG8gYHU2NGAuIFRoaXMgaXMgZ29vZCwgaXQgYW50aWNpcGF0ZXMgdGhlIGluY3JlYXNlZCB0aHJvdWdocHV0IHdlJ3JlIHNlZWluZyBpbiBtb2Rlcm4gbmV0d29ya3MuXG5cblRoZSBtb3N0IGludHJpZ3VpbmcgcGFydCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHBlci1DUFUgc3RhdHMgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGV5J3ZlIG1vdmVkIGZyb20gYSBzaW5nbGUgYHUzMmAgZm9yIGB1bmJhbGFuY2VkX2xvYWRgIGluIGBhbGJfYm9uZF9pbmZvYCB0byBhIGBzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzIF9fcGVyY3B1ICp1bmJhbGFuY2VkX2xvYWRgLiBUaGlzIG5ldyBzdHJ1Y3R1cmUsIGB1bmJhbGFuY2VkX2xvYWRfc3RhdHNgLCBjb250YWlucyBgdTY0X3N0YXRzX3QgdHhfYnl0ZXNgIGFuZCBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGBzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3BgLiBUaGlzIGlzIHNtYXJ0LiBJdCBhbGxvd3MgZm9yIHBlci1DUFUgYWNjb3VudGluZyBvZiBsb2FkLCBhbmQgdGhlIHN5bmNocm9uaXphdGlvbiBpcyBjcnVjaWFsIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVuIGFnZ3JlZ2F0aW5nIHRoZXNlIHN0YXRzLiBUaGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHdpdGhpbiBgdGxiX2luaXRpYWxpemUoKWAgYW5kIGB0bGJfZGVpbml0aWFsaXplKClgLCB1c2luZyBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAgYW5kIGl0cyBjb3VudGVycGFydCwgc2VlbSBjb3JyZWN0bHkgaW1wbGVtZW50ZWQuIFRoZSBwYXRjaCBjb3JyZWN0bHkgdXBkYXRlcyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLCBzdWNoIGFzIGBib25kX2RvX2FsYl94bWl0KClgIGFuZCBgYm9uZF9hbGJfbW9uaXRvcigpYCwgdG8gdXNlIHRoZXNlIG5ldyBwZXItQ1BVIHN0YXRpc3RpY3MuIEFuZCB0aGUgYWRqdXN0bWVudHMgdG8gYGNvbXB1dGVfZ2FwKClgIHRvIGhhbmRsZSBgdTY0YCBhbmQgc3BlZWRzIHVzaW5nIGBSRUFEX09OQ0UoKWAgaXMgZ29vZCB0b28uXG5cbkJ1dCwgaG9sZCBvbi4gVGhpcyBwZXItQ1BVIGFsbG9jYXRpb24uLi4gSSB3YW50IHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueXRpbWUgd2UncmUgYWxsb2NhdGluZyBwZXItQ1BVIG1lbW9yeSwgemVyby1pbml0aWFsaXphdGlvbiBpcyBzb21ldGhpbmcgdG8gdmVyaWZ5LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNgIGp1c3QgdG8gYmUgc3VyZS4uLiBMZXQncyBzZWUuLi4gQWgsIHllcywgaXQncyBhIG1hY3JvIHRoYXQgd3JhcHMgYGFsbG9jX3BlcmNwdV9nZnBgIHdpdGggYF9fR0ZQX1pFUk9gLiBQZXJmZWN0LiBUaGF0IGNvbmZpcm1zIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHplcm9lZCwgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHByZXZlbnQgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gQWxyaWdodCwgZ29vZC4gTm8gaW1tZWRpYXRlIGNvbmNlcm5zIHRoZXJlLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCB1cGRhdGUgb3ZlcmFsbCwgd2l0aCB0aG91Z2h0ZnVsIGNvbnNpZGVyYXRpb24gZ2l2ZW4gdG8gZGF0YSB0eXBlIHNpemVzIGFuZCB0aHJlYWQgc2FmZXR5IHdoZW4gZGVhbGluZyB3aXRoIHBlci1DUFUgc3RhdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDo1My44Mzg2MjM4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNTAxOTI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zMTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzE1NS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMxNTY6I2RlZmluZSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyh0eXBlKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMxNTctXFx0X19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyh0eXBlLCBHRlBfS0VSTkVMKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDo1NS41NDM2NDkyOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQzNTMyNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBfX25ldGRldl9hbGxvY19wY3B1X3N0YXRzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyBpdHMgcHVycG9zZSAtIGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgYWxsb2NhdGluZyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIG5ldHdvcmsgZGV2aWNlcy4gS25vd2luZyB0aGlzLCBteSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBkZXRhaWxzIG9mIGl0cyBpbXBsZW1lbnRhdGlvbiwgYW5kIGhvdyBpdCBoYW5kbGVzIG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBpbnZvbHZlZC4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFyZWFzIHRoYXQgbWlnaHQgYmUgc3VzY2VwdGlibGUgdG8gY29udGVudGlvbiwgYW5kIGFueSBudWFuY2VzIGluIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBzdWNoIGFzIHdoZXRoZXIgaXQgdXNlcyBzbGFiIGFsbG9jYXRvcnMsIE5VTUEgYXdhcmVuZXNzLCBvciBzcGVjaWZpYyBDUFUgYWZmaW5pdHkgY29uc2lkZXJhdGlvbnMuIEknbGwgd2FudCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIHdoZXJlIGFuZCB3aGVuIGl0J3MgaW52b2tlZCwgYW5kIGhvdyB0aGUgYWxsb2NhdGVkIHBlci1DUFUgc3RhdHMgYXJlIHV0aWxpemVkIHRocm91Z2hvdXQgdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB0aGVyZSBtaWdodCBiZSBjb21wbGV4aXRpZXMgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSBpbiBzY2VuYXJpb3Mgd2hlcmUgYWxsb2NhdGlvbiBmYWlscyBvciByZXNvdXJjZXMgYXJlIGxpbWl0ZWQuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0aGF0IEkgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgdG8gZW5zdXJlIG92ZXJhbGwgc3lzdGVtIGludGVncml0eSBhbmQgcmVsaWFiaWxpdHkuIE92ZXJhbGwsIG15IGdvYWwgaXMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmdW5jdGlvbuKAmXMgYmVoYXZpb3IsIHBlcmZvcm1hbmNlLCBhbmQgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBlY29zeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDo1OS40ODcxODQyNjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzY4ODUyNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zMTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzE0MS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMxNDI6I2RlZmluZSBfX25ldGRldl9hbGxvY19wY3B1X3N0YXRzKHR5cGUsIGdmcClcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMTQzLSh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMTowMS4xNjQwNzQ1NzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MzA1MzU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBuZXR3b3JraW5nIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNgKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGUgc291cmNlIGZvciBgX19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0c2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24uIEl0J3MgZ290IFwiYWxsb2NcIiBpbiB0aGUgbmFtZSwgc28gSSdtIGd1ZXNzaW5nIGl0J3MgaGFuZGxpbmcgdGhlIGFsbG9jYXRpb24gb2YgcGVyLUNQVSBzdGF0aXN0aWNzIGZvciBhIG5ldHdvcmsgZGV2aWNlLiBQZXItQ1BVIGlzIGNydWNpYWwgaGVyZTsgaXQgZ2l2ZXMgZWFjaCBDUFUgaXRzIG93biBjb3VudGVycywgYXZvaWRpbmcgY29udGVudGlvbiBhbmQgZW5zdXJpbmcgZ29vZCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBvbiBoaWdoLWNvcmUtY291bnQgc3lzdGVtcy4gU28sIHRoaXMgZnVuY3Rpb24gaXMgZnVuZGFtZW50YWwgZm9yIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgbmV0d29yayBtb25pdG9yaW5nLiBMZXQncyBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuIEknbSBleHBlY3Rpbmcgc29tZSBzbGFiIGFsbG9jYXRpb24sIHByb2JhYmx5IHVzaW5nIGBhbGxvY19wZXJjcHUoKWAgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCBhbmQgaW5pdGlhbGl6YXRpb24gb2YgdGhvc2UgY291bnRlcnMgdG8gemVyby4gSSdsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIGFueSBzcGlubG9ja3Mgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGVzZSBwZXItY3B1IHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIGRlYWxsb2NhdGlvbiwgdG8gZW5zdXJlIGF0b21pY2l0eS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlJ3MgbGlmZWN5Y2xlIC0gd2hlbiBpcyBpdCBjYWxsZWQsIHdoZW4gaXMgdGhlIG1lbW9yeSBmcmVlZCwgYW5kIGhvdyBpcyBpdCBsaW5rZWQgaW50byB0aGUgb3ZlcmFsbCBgbmV0X2RldmljZWAgc3RydWN0dXJlLiBJJ20gZXhwZWN0aW5nIGl0IHRvIGJlIGNhbGxlZCBkdXJpbmcgZGV2aWNlIHJlZ2lzdHJhdGlvbiwgcHJvYmFibHkgd2l0aGluIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBwYXRoLCB3aGVuIHRoZSBkZXZpY2UgY29tZXMgb25saW5lLiBJJ2xsIGFsc28gY2hlY2sgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGdlbmVyaWMgbmV0d29yayBzdGF0aXN0aWNzIHN0cnVjdHVyZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHBlci1jcHUgdmVyc2lvbnMuIFRoaXMgaXMgbGlrZWx5IGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgdG8gdW5kZXJzdGFuZCBob3cgbmV0d29yayBzdGF0aXN0aWNzIHdvcmsgaW4gdGhpcyBrZXJuZWwgdmVyc2lvbi4gTGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjExOjA0LjkyNzEzMTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk1NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzE0MixcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE0MjpcXHQjZGVmaW5lIF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHModHlwZSwgZ2ZwKVxcdFxcdFxcdFxcdFxcXFxcXG4zMTQzOlxcdCh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMxNDQ6XFx0XFx0dHlwZW9mKHR5cGUpIF9fcGVyY3B1ICpwY3B1X3N0YXRzID0gYWxsb2NfcGVyY3B1X2dmcCh0eXBlLCBnZnApO1xcXFxcXG4zMTQ1OlxcdFxcdGlmIChwY3B1X3N0YXRzKVxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMzE0NjpcXHRcXHRcXHRpbnQgX19jcHU7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMxNDc6XFx0XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KF9fY3B1KSB7XFx0XFx0XFx0XFx0XFxcXFxcbjMxNDg6XFx0XFx0XFx0XFx0dHlwZW9mKHR5cGUpICpzdGF0O1xcdFxcdFxcdFxcdFxcXFxcXG4zMTQ5OlxcdFxcdFxcdFxcdHN0YXQgPSBwZXJfY3B1X3B0cihwY3B1X3N0YXRzLCBfX2NwdSk7XFx0XFx0XFxcXFxcbjMxNTA6XFx0XFx0XFx0XFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNnN0YXQtXFx1MDAzZXN5bmNwKTtcXHRcXHRcXHRcXFxcXFxuMzE1MTpcXHRcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMxNTI6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4zMTUzOlxcdFxcdHBjcHVfc3RhdHM7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMxNTQ6XFx0fSlcXG4zMTU1OlxcdFxcbjMxNTY6XFx0I2RlZmluZSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyh0eXBlKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTE6MDQuOTI3NTI4NDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNjk2NDEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKk1lbW9yeSBBbGxvY2F0aW9uIE51YW5jZXM6IEEgUXVpY2sgUmV2aWV3KipcblxuQWxyaWdodCwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IGBhbGxvY19wZXJjcHVfZ2ZwYC4gSSB0aG91Z2h0IEkga25ldyB0aGlzLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMsIGdpdmVuIHRoZSBrZXJuZWwncyBjcml0aWNhbCByb2xlIGluIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5LiBTbywgaXMgaXQgdHJ1ZSB0aGF0IGBhbGxvY19wZXJjcHVfZ2ZwYCB6ZXJvZXMgbWVtb3J5IGJ5IGRlZmF1bHQ/IEl0IHNlZW1lZCBsaWtlIGl0IGRpZCB1bmxlc3MgdGhlIGBfX0dGUF9aRVJPYCBmbGFnIHdhcyBleHBsaWNpdGx5IG9taXR0ZWQuIEhvd2V2ZXIsIEkgc2VlbSB0byByZW1lbWJlciB0aGF0IGBhbGxvY19wZXJjcHVgIGl0c2VsZiBndWFyYW50ZWVzIHplcm9lZCBtZW1vcnkuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBsZXQncyBjb25maXJtLiBJIGtub3cgdGhhdCB1c2luZyBgYWxsb2NfcGVyY3B1X2dmcGAgd2l0aCBzb21ldGhpbmcgbGlrZSBgR0ZQX0tFUk5FTGAgd2lsbCBhbHNvIHJlc3VsdCBpbiB6ZXJvZWQgbWVtb3J5LCBiZWNhdXNlIHRoZSBgcGNwdV9hbGxvY2AgZnVuY3Rpb24gdW5kZXJuZWF0aCBoYW5kbGVzIHRoZSBhY3R1YWwgYWxsb2NhdGlvbiBhbmQgemVyb2luZywgcmlnaHQ/IE9rYXksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFuZCBhdm9pZCBhIG5hc3R5IGJ1ZyBsYXRlciwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBiZWhhdmlvciBvZiBgYWxsb2NfcGVyY3B1X2dmcGAgdG8gcmVpbmZvcmNlIG15IHVuZGVyc3RhbmRpbmcuIE5vIGhhcm0gaW4gYSBxdWljayB2ZXJpZmljYXRpb247IGEgZmF1bHR5IGFzc3VtcHRpb24gaGVyZSBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBpc3N1ZXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTE6MDguNTQ0NDk2MDQ2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI3MjgzNjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBhbGxvY19wZXJjcHVfZ2ZwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGVyY3B1Lmg9MTM3PWV4dGVybiB2b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUuaC0xNDYtXFxuaW5jbHVkZS9saW51eC9wZXJjcHUuaDoxNDc6I2RlZmluZSBhbGxvY19wZXJjcHVfZ2ZwKHR5cGUsIGdmcClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wZXJjcHUuaC0xNDgtXFx0KHR5cGVvZih0eXBlKSBfX3BlcmNwdSAqKV9fYWxsb2NfcGVyY3B1X2dmcChzaXplb2YodHlwZSksXFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMToxMC40NzE4NDc5NzFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzODQ4NTI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19hbGxvY19wZXJjcHVfZ2ZwYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgX19hbGxvY19wZXJjcHVfZ2ZwYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgYWxsb2NhdGlvbiBmdW5jdGlvbiBiZWhhdmVzLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwZXItQ1BVIGRhdGEgc3RydWN0dXJlcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwsIEknbSB6ZXJvaW5nIGluIG9uIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gYXMgdGhlIGxpbmNocGluIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtZWNoYW5pY3Mgb2YgcGVyLUNQVSB2YXJpYWJsZSBhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIEdGUCBmbGFncy4gTXkgZm9jdXMgcmlnaHQgbm93IHdpbGwgYmUgb24gaXRzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGFnZSBhbGxvY2F0b3IuIEknbSBrZWVuIHRvIGV4YW1pbmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBtZW1vcnkgZnJhZ21lbnRhdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBkdXJpbmcgcGVyLUNQVSBhbGxvY2F0aW9ucyB1bmRlciB2YXJpb3VzIHN5c3RlbSB3b3JrbG9hZHMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgaXRzIGRlc2lnbiBjb25zaWRlcmF0aW9ucyBhcmUgY29uc2lzdGVudCB3aXRoIG15IGV4cGVjdGF0aW9ucyBhcm91bmQgc2NhbGFiaWxpdHkgYW5kIE5VTUEtYXdhcmVuZXNzIGluIGEgbW9kZXJuIGtlcm5lbC4gTGV0J3Mgc2VlIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBtZW1vcnkgem9uZXMgYW5kIGlmIGl0IGNvcnJlY3RseSBpbnRlZ3JhdGVzIHdpdGggdGhlIHN5c3RlbSdzIG1lbW9yeSByZWNsYWltIG1lY2hhbmlzbXMuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDc5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTE6MTQuNDEwMzM1ODM3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQwODk2NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBfX2FsbG9jX3BlcmNwdV9nZnBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wZXJjcHUuaD0xMzc9ZXh0ZXJuIHZvaWQgX19wZXJjcHUgKnBjcHVfYWxsb2Nfbm9wcm9mKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIGJvb2wgcmVzZXJ2ZWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS5oLTEzOS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS5oOjE0MDojZGVmaW5lIF9fYWxsb2NfcGVyY3B1X2dmcChfc2l6ZSwgX2FsaWduLCBfZ2ZwKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS5oLTE0MS1cXHRhbGxvY19ob29rcyhwY3B1X2FsbG9jX25vcHJvZihfc2l6ZSwgX2FsaWduLCBmYWxzZSwgX2dmcCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjExOjE2LjA1MTIzOTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkxNDUxNDE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNhZmV0eSoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIGF0IHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBwY3B1X2FsbG9jX25vcHJvZmAgemVyb2luZyBtZW1vcnkgaXMgYSBrZXkgcG9pbnQgaGVyZTsgaXQgbWVhbnMgdGhlIHBlci1DUFUgc3RhdHMgYXJlIGluaXRpYWxpemVkIHRvIHplcm8gcmlnaHQgb2ZmIHRoZSBiYXQuIFRoaXMgaXMgZ29vZC4gVGhlIHBhdGNoIGlzIGFib3V0IGFkZHJlc3NpbmcgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHBvdGVudGlhbCBkYXRhIHJhY2VzLCB3aGljaCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCBsZXQncyBtYWtlIHN1cmUgaXQncyBkb25lIHNhZmVseS4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGNoYW5nZXMgc29tZSB2YXJpYWJsZXMsIEkgc2VlIHRoYXQuIEl0J3MgbW92aW5nIGZyb20gYHUzMmAgdG8gYHU2NGAgdG8gcHJldmVudCBvdmVyZmxvdywgYW5kIGxldmVyYWdpbmcgcGVyLUNQVSBzdGF0cyBpcyBkZWZpbml0ZWx5IHRoZSBjb3JyZWN0IHdheSB0byBhdm9pZCBsb2NrIGNvbnRlbnRpb24gYW5kIGRhdGEgcmFjZXMsIGVzcGVjaWFsbHkgb24gc29tZXRoaW5nIGxpa2UgYHVuYmFsYW5jZWRfbG9hZGAuXG5cblRoZXJlJ3Mgbm8gbmV3IGluZm9ybWF0aW9uIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gdGhhdCdzIGEgY2hlY2suIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEkgY2FuIHNlZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgaXMgbG9naWMtYmFzZWQg4oCTIGZpeGluZyB0aG9zZSBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgZW5zdXJpbmcgdGhyZWFkLXNhZmV0eSBhcm91bmQgdGhhdCBzaGFyZWQgY291bnRlci4gSSBjYW4ndCBzZWUgYW55IG9idmlvdXMgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbnRyb2R1Y2VkLCBzbyBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIHRvb2xzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBzdWJ0bGUgY29ycnVwdGlvbiwgaWYgdGhlcmUgaXMgYW55LiBUaGF0IG1lYW5zIEkgZG9uJ3QgdGhpbmsgaXQgKk5lZWRzS01TQU4qIOKAkyB0aGUgY2hhbmdlIGlzIHByZXR0eSBjb250YWluZWQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgdGhvdWdoLCBvbiB3aGV0aGVyIGFueXRoaW5nIGluc2lkZSBgc3RydWN0IGFsYl9ib25kX2luZm9gIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gSXQgbG9va3MgaW50ZXJuYWw7IGl0J3MgcGFydCBvZiBgc3RydWN0IGJvbmRpbmdgLCB3aGljaCBpcyBhbHNvIGludGVybmFsLiBBaCwgeWVzLCB0aGUgYHR4X2J5dGVzYCwgYGxvYWRfaGlzdG9yeWAsIGFuZCBgbG9hZGAgZmllbGRzIGFyZSBhbGwgaW50ZXJuYWwgc3RhdHMgc3BlY2lmaWMgdG8gQUxCLCB0aGUgQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcgbW9kZS4gTm8gd29ycmllcyBhYm91dCB0aGUgY29kZSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU28sIHRvIHN1bW1hcml6ZSBteSByZWFzb25pbmc6IHRoaXMgcGF0Y2ggaXMgZml4aW5nIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBwb3RlbnRpYWwgZGF0YSByYWNlcyBpbiB0aGUgYm9uZGluZyBkcml2ZXIncyBBTEIgbW9kZS4gSXQncyBkb2luZyB0aGlzIGJ5IHVwZ3JhZGluZyBgdTMyYCB2YXJpYWJsZXMgdG8gYHU2NGAgYW5kIGJ5IHV0aWxpemluZyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGUgbmV3IHBlci1DUFUgc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKGBzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzYCkgYXJlIGFsbG9jYXRlZCB3aXRoIHplcm9lZCBtZW1vcnkgdXNpbmcgYG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKClgLCB3aGljaCBjYWxscyBgYWxsb2NfcGVyY3B1X2dmcCgpYC4gQ3J1Y2lhbGx5LCBubyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIGFueXdoZXJlLiBLQVNBTiBpcyB0aGVyZSBhcyBhIHNhZmV0eSBuZXQuIFRoZXJlZm9yZSwgYSBzcGVjaWFsaXplZCBLTVNBTiBmdXp6ZXIgc2Vzc2lvbiBpc24ndCBuZWVkZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ4NSwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTE6MjQuOTY1NzU2MDUzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYm9uZGluZyBkcml2ZXIncyBBTEIgKEFkYXB0aXZlIExvYWQgQmFsYW5jaW5nKSBtb2RlIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgYW5kIGRhdGEgcmFjZXMuIEl0IGNoYW5nZXMgbG9hZCB0cmFja2luZyB2YXJpYWJsZXMgKGB0eF9ieXRlc2AsIGBsb2FkX2hpc3RvcnlgLCBgbG9hZGApIGZyb20gYHUzMmAgdG8gYHU2NGAgYW5kIGludHJvZHVjZXMgcGVyLUNQVSBzdGF0aXN0aWNzIGZvciBgdW5iYWxhbmNlZF9sb2FkYC4gVGhlIG5ld2x5IGludHJvZHVjZWQgYHN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHNgIGlzIGFsbG9jYXRlZCB2aWEgYG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKClgLCB3aGljaCBpbmhlcmVudGx5IHplcm9lcyB0aGUgYWxsb2NhdGVkIHBlci1DUFUgbWVtb3J5LiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggdW5pbml0aWFsaXplZCBidWZmZXJzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQiAoQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcpIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgZGF0YSByYWNlcy4gSXQgY2hhbmdlcyBsb2FkIHRyYWNraW5nIHZhcmlhYmxlcyAoYHR4X2J5dGVzYCwgYGxvYWRfaGlzdG9yeWAsIGBsb2FkYCkgZnJvbSBgdTMyYCB0byBgdTY0YCBhbmQgaW50cm9kdWNlcyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgaXMgYWxsb2NhdGVkIHZpYSBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAsIHdoaWNoIGluaGVyZW50bHkgemVyb2VzIHRoZSBhbGxvY2F0ZWQgcGVyLUNQVSBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j67m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 06:08:44 +0000 UTC FinishedAt: 2026-08-20 06:11:25 +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": "564973a259ec76f2dad0853420e7034cc43994c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING" ], "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": "564973a259ec76f2dad0853420e7034cc43994c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING" ], "series_id": "370e99e3-ddb5-4043-95f9-4e31ae35f11b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_alb_initialize", "bond_alb_deinitialize", "bond_alb_monitor" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2FsYl9pbml0aWFsaXplJiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX2RlaW5pdGlhbGl6ZSYjMzQ7LAogICAgJiMzNDtib25kX2FsYl9tb25pdG9yJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIEFMQiAoQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcpIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgZGF0YSByYWNlcy4gSXQgY2hhbmdlcyBsb2FkIHRyYWNraW5nIHZhcmlhYmxlcyAoYHR4X2J5dGVzYCwgYGxvYWRfaGlzdG9yeWAsIGBsb2FkYCkgZnJvbSBgdTMyYCB0byBgdTY0YCBhbmQgaW50cm9kdWNlcyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgaXMgYWxsb2NhdGVkIHZpYSBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAsIHdoaWNoIGluaGVyZW50bHkgemVyb2VzIHRoZSBhbGxvY2F0ZWQgcGVyLUNQVSBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgdXNlIHBlcmNwdSBzdGF0cyBmb3IgbG9hZCBiYWxhbmNpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGFmZmVjdCBjb3JlIGJvbmRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmOTIyNWQxMjJmY2YyZWE2YTEyZWExZjU3ODE3ZjM4YTMwYTg1ZjdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDY6MDk6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5pbmRleCA4MzlmNzQ4MmRjMTgyLi4zNzJkYjU0ODAzZDM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbkBAIC03NCw4ICYjNDM7NzUsOCBAQCBzdGF0aWMgaW5saW5lIHU4IF9zaW1wbGVfaGFzaChjb25zdCB1OCAqaGFzaF9zdGFydCwgaW50IGhhc2hfc2l6ZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2luaXRfdGFibGVfZW50cnkoc3RydWN0IHRsYl9jbGllbnRfaW5mbyAqZW50cnksIGludCBzYXZlX2xvYWQpXG4ge1xuIFx0aWYgKHNhdmVfbG9hZCkge1xuLVx0XHRlbnRyeS1cdTAwM2Vsb2FkX2hpc3RvcnkgPSAxICYjNDM7IGVudHJ5LVx1MDAzZXR4X2J5dGVzIC9cbi1cdFx0XHRcdCAgICAgIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTDtcbiYjNDM7XHRcdGVudHJ5LVx1MDAzZWxvYWRfaGlzdG9yeSA9IDEgJiM0MzsgZGl2X3U2NChlbnRyeS1cdTAwM2V0eF9ieXRlcyxcbiYjNDM7XHRcdFx0XHQgICAgICBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUwpO1xuIFx0XHRlbnRyeS1cdTAwM2V0eF9ieXRlcyA9IDA7XG4gXHR9XG4gXG5AQCAtMTMzLDYgJiM0MzsxMzQsMTAgQEAgc3RhdGljIGludCB0bGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdGlmICghbmV3X2hhc2h0YmwpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQgPSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzKTtcbiYjNDM7XHRpZiAoIWJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuIFxuIFx0Ym9uZF9pbmZvLVx1MDAzZXR4X2hhc2h0YmwgPSBuZXdfaGFzaHRibDtcbkBAIC0xNDMsNiAmIzQzOzE0OCwxMCBAQCBzdGF0aWMgaW50IHRsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0a2ZyZWUobmV3X2hhc2h0YmwpO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbiAvKiBNdXN0IGJlIGNhbGxlZCBvbmx5IGFmdGVyIGFsbCBzbGF2ZXMgaGF2ZSBiZWVuIHJlbGVhc2VkICovXG5AQCAtMTU0LDMxICYjNDM7MTYzLDQ0IEBAIHN0YXRpYyB2b2lkIHRsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXG4gXHRrZnJlZShib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCk7XG4gXHRib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCA9IE5VTEw7XG4mIzQzO1x0ZnJlZV9wZXJjcHUoYm9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCk7XG4mIzQzO1x0Ym9uZF9pbmZvLVx1MDAzZXByZXZfdG90YWxfdW5iYWxhbmNlZCA9IDA7XG4gXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gfVxuIFxuLXN0YXRpYyBsb25nIGxvbmcgY29tcHV0ZV9nYXAoc3RydWN0IHNsYXZlICpzbGF2ZSlcbiYjNDM7c3RhdGljIHU2NCBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuIHtcbi1cdHJldHVybiAoczY0KSAoc2xhdmUtXHUwMDNlc3BlZWQgXHUwMDNjXHUwMDNjIDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovXG4tXHQgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkIFx1MDAzY1x1MDAzYyAzKTsgLyogQnl0ZXMgdG8gYml0cyAqL1xuJiM0MztcdHU2NCBzbGF2ZV9sb2FkID0gU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXHUwMDNjXHUwMDNjIDM7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbiYjNDM7XHR1MzIgcmF3X3NwZWVkID0gUkVBRF9PTkNFKHNsYXZlLVx1MDAzZXNwZWVkKTtcbiYjNDM7XHR1NjQgc3BlZWQgPSAodTY0KXJhd19zcGVlZCBcdTAwM2NcdTAwM2MgMjA7IC8qIENvbnZlcnQgdG8gYml0cyBwZXIgc2VjICovXG4mIzQzO1xuJiM0MztcdC8qIEl0JiMzOTtzIG1lYW5pbmdsZXNzIHRvIGNvbXBhcmUgZ2FwIG9uIHVua25vd24gc3BlZWQgTklDICovXG4mIzQzO1x0aWYgKHJhd19zcGVlZCA9PSAodTMyKVNQRUVEX1VOS05PV04pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogU2tpcCBzbGF2ZSB3aGljaCBpcyBvdmVyIGxvYWRlZCAqL1xuJiM0MztcdGlmIChzcGVlZCBcdTAwM2M9IHNsYXZlX2xvYWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNwZWVkIC0gc2xhdmVfbG9hZDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4ge1xuIFx0c3RydWN0IHNsYXZlICpzbGF2ZSwgKmxlYXN0X2xvYWRlZDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4tXHRsb25nIGxvbmcgbWF4X2dhcDtcbiYjNDM7XHR1NjQgbWF4X2dhcCA9IDA7XG4gXG4gXHRsZWFzdF9sb2FkZWQgPSBOVUxMO1xuLVx0bWF4X2dhcCA9IExMT05HX01JTjtcbiBcbiBcdC8qIEZpbmQgdGhlIHNsYXZlIHdpdGggdGhlIGxhcmdlc3QgZ2FwICovXG4gXHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xuIFx0XHRpZiAoYm9uZF9zbGF2ZV9jYW5fdHgoc2xhdmUpKSB7XG4tXHRcdFx0bG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTtcbiYjNDM7XHRcdFx0dTY0IGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTtcbiBcbi1cdFx0XHRpZiAobWF4X2dhcCBcdTAwM2MgZ2FwKSB7XG4mIzQzO1x0XHRcdC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIG9uZSBhdmFpbGFibGUgc2xhdmUgKi9cbiYjNDM7XHRcdFx0aWYgKG1heF9nYXAgXHUwMDNjPSBnYXApIHtcbiBcdFx0XHRcdGxlYXN0X2xvYWRlZCA9IHNsYXZlO1xuIFx0XHRcdFx0bWF4X2dhcCA9IGdhcDtcbiBcdFx0XHR9XG5AQCAtMTM0NCw4ICYjNDM7MTM2NiwxNCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdGlmICghdHhfc2xhdmUpIHtcbiBcdFx0LyogdW5iYWxhbmNlZCBvciB1bmFzc2lnbmVkLCBzZW5kIHRocm91Z2ggcHJpbWFyeSAqL1xuIFx0XHR0eF9zbGF2ZSA9IHJjdV9kZXJlZmVyZW5jZShib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKTtcbi1cdFx0aWYgKGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKVxuLVx0XHRcdGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQgJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyAqcGNwdV9sb2FkO1xuJiM0MztcbiYjNDM7XHRcdFx0cGNwdV9sb2FkID0gdGhpc19jcHVfcHRyKGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQpO1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnBjcHVfbG9hZC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2cGNwdV9sb2FkLVx1MDAzZXR4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cGNwdV9sb2FkLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7XG5AQCAtMTUyOSw2ICYjNDM7MTU1NywyOSBAQCBuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbiBcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHU2NCByZXNldF91bmJhbGFuY2VkX2xvYWQoc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbylcbiYjNDM7e1xuJiM0MztcdHU2NCBkZWx0YSwgdHhfYnl0ZXMsIHRvdGFsX2J5dGVzID0gMDtcbiYjNDM7XHRzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzICpwO1xuJiM0MztcdHVuc2lnbmVkIGludCBzdGFydDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbiYjNDM7XHRcdHAgPSBwZXJfY3B1X3B0cihib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkLCBpKTtcbiYjNDM7XHRcdGRvIHtcbiYjNDM7XHRcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2cC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRcdHR4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2cC1cdTAwM2V0eF9ieXRlcyk7XG4mIzQzO1x0XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2cC1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbiYjNDM7XG4mIzQzO1x0XHR0b3RhbF9ieXRlcyAmIzQzOz0gdHhfYnl0ZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZWx0YSA9IHRvdGFsX2J5dGVzIC0gYm9uZF9pbmZvLVx1MDAzZXByZXZfdG90YWxfdW5iYWxhbmNlZDtcbiYjNDM7XHRib25kX2luZm8tXHUwMDNlcHJldl90b3RhbF91bmJhbGFuY2VkID0gdG90YWxfYnl0ZXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkaXZfdTY0KGRlbHRhLCBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUwpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJvbmRpbmcsXG5AQCAtMTU3MSwxMCAmIzQzOzE2MjIsMTEgQEAgdm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0Ym9uZF9mb3JfZWFjaF9zbGF2ZV9yY3UoYm9uZCwgc2xhdmUsIGl0ZXIpIHtcbiBcdFx0XHR0bGJfY2xlYXJfc2xhdmUoYm9uZCwgc2xhdmUsIDEpO1xuIFx0XHRcdGlmIChzbGF2ZSA9PSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbi1cdFx0XHRcdFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkID1cbi1cdFx0XHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCAvXG4tXHRcdFx0XHRcdFx0Qk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMO1xuLVx0XHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCA9IDA7XG4mIzQzO1x0XHRcdFx0dTY0IG5ld19sb2FkID0gcmVzZXRfdW5iYWxhbmNlZF9sb2FkKGJvbmRfaW5mbyk7XG4mIzQzO1xuJiM0MztcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4mIzQzO1x0XHRcdFx0U0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgPSBuZXdfbG9hZDtcbiYjNDM7XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGF0b21pY19zZXQoXHUwMDI2Ym9uZF9pbmZvLVx1MDAzZXR4X3JlYmFsYW5jZV9jb3VudGVyLCAwKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ib25kX2FsYi5oIGIvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaFxuaW5kZXggZTU5NDU0MjdmMzhkZC4uMzJmMTk4MTAzM2U0YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmhcbkBAIC01NywxMiAmIzQzOzU3LDEyIEBAIHN0cnVjdCB0bGJfY2xpZW50X2luZm8ge1xuIFx0XHRcdFx0ICogcGFja2V0cyB0byBhIENsaWVudCB0aGF0IHRoZSBIYXNoIGZ1bmN0aW9uXG4gXHRcdFx0XHQgKiBnYXZlIHRoaXMgZW50cnkgaW5kZXguXG4gXHRcdFx0XHQgKi9cbi1cdHUzMiB0eF9ieXRlcztcdFx0LyogRWFjaCBDbGllbnQgYWNjdW11bGF0ZXMgdGhlIEJ5dGVzVHggdGhhdFxuJiM0MztcdHU2NCB0eF9ieXRlcztcdFx0LyogRWFjaCBDbGllbnQgYWNjdW11bGF0ZXMgdGhlIEJ5dGVzVHggdGhhdFxuIFx0XHRcdFx0ICogd2VyZSB0cmFuc21pdHRlZCB0byBpdCwgYW5kIGFmdGVyIGVhY2hcbiBcdFx0XHRcdCAqIENhbGxCYWNrIHRoZSBMb2FkSGlzdG9yeSBpcyBkaXZpZGVkXG4gXHRcdFx0XHQgKiBieSB0aGUgYmFsYW5jZSBpbnRlcnZhbFxuIFx0XHRcdFx0ICovXG4tXHR1MzIgbG9hZF9oaXN0b3J5O1x0LyogVGhpcyBmaWVsZCBjb250YWlucyB0aGUgYW1vdW50IG9mIEJ5dGVzXG4mIzQzO1x0dTY0IGxvYWRfaGlzdG9yeTtcdC8qIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIGFtb3VudCBvZiBCeXRlc1xuIFx0XHRcdFx0ICogdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHRvIHRoaXMgY2xpZW50IGJ5XG4gXHRcdFx0XHQgKiB0aGUgc2VydmVyIG9uIHRoZSBwcmV2aW91cyBiYWxhbmNlXG4gXHRcdFx0XHQgKiBpbnRlcnZhbCBpbiBCcHMuXG5AQCAtMTE4LDE0ICYjNDM7MTE4LDIwIEBAIHN0cnVjdCB0bGJfc2xhdmVfaW5mbyB7XG4gXHRcdFx0ICogYXJlIHRoZSBlbnRyaWVzIHRoYXQgd2VyZSBhc3NpZ25lZCB0byB1c2UgdGhpc1xuIFx0XHRcdCAqIHNsYXZlIGZvciB0cmFuc21pdC5cbiBcdFx0XHQgKi9cbi1cdHUzMiBsb2FkO1x0LyogRWFjaCBzbGF2ZSBzdW1zIHRoZSBsb2FkSGlzdG9yeSBvZiBhbGwgY2xpZW50c1xuJiM0MztcdHU2NCBsb2FkO1x0LyogRWFjaCBzbGF2ZSBzdW1zIHRoZSBsb2FkSGlzdG9yeSBvZiBhbGwgY2xpZW50c1xuIFx0XHRcdCAqIGFzc2lnbmVkIHRvIGl0XG4gXHRcdFx0ICovXG4gfTtcbiBcbiYjNDM7c3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyB7XG4mIzQzO1x0dTY0X3N0YXRzX3RcdFx0dHhfYnl0ZXM7XG4mIzQzO1x0c3RydWN0IHU2NF9zdGF0c19zeW5jXHRzeW5jcDtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGFsYl9ib25kX2luZm8ge1xuIFx0c3RydWN0IHRsYl9jbGllbnRfaW5mb1x0KnR4X2hhc2h0Ymw7IC8qIER5bmFtaWNhbGx5IGFsbG9jYXRlZCAqL1xuLVx0dTMyXHRcdFx0dW5iYWxhbmNlZF9sb2FkO1xuJiM0MztcdHN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgX19wZXJjcHVcdCp1bmJhbGFuY2VkX2xvYWQ7XG4mIzQzO1x0dTY0XHRcdFx0cHJldl90b3RhbF91bmJhbGFuY2VkO1xuIFx0YXRvbWljX3RcdFx0dHhfcmViYWxhbmNlX2NvdW50ZXI7XG4gXHRpbnRcdFx0XHRscF9jb3VudGVyO1xuIFx0LyogLS0tLS0tLS0gcmxiIHBhcmFtZXRlcnMgLS0tLS0tLS0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfYWxiX2luaXRpYWxpemUmIzM0OywKICAgICYjMzQ7Ym9uZF9hbGJfZGVpbml0aWFsaXplJiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX21vbml0b3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBBTEIgbW9kZSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGFuZCB1c2UgcGVyY3B1IHN0YXRzIGZvciBsb2FkIGJhbGFuY2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgYWZmZWN0IGNvcmUgYm9uZGluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY5MjI1ZDEyMmZjZjJlYTZhMTJlYTFmNTc4MTdmMzhhMzBhODVmN2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAwNjowOTo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCA4MzlmNzQ4MmRjMTgyLi4zNzJkYjU0ODAzZDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGt0X3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CkBAIC03NCw4ICYjNDM7NzUsOCBAQCBzdGF0aWMgaW5saW5lIHU4IF9zaW1wbGVfaGFzaChjb25zdCB1OCAqaGFzaF9zdGFydCwgaW50IGhhc2hfc2l6ZSkKIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfaW5pdF90YWJsZV9lbnRyeShzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvICplbnRyeSwgaW50IHNhdmVfbG9hZCkKIHsKIAlpZiAoc2F2ZV9sb2FkKSB7Ci0JCWVudHJ5LSZndDtsb2FkX2hpc3RvcnkgPSAxICYjNDM7IGVudHJ5LSZndDt0eF9ieXRlcyAvCi0JCQkJICAgICAgQk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMOwomIzQzOwkJZW50cnktJmd0O2xvYWRfaGlzdG9yeSA9IDEgJiM0MzsgZGl2X3U2NChlbnRyeS0mZ3Q7dHhfYnl0ZXMsCiYjNDM7CQkJCSAgICAgIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTCk7CiAJCWVudHJ5LSZndDt0eF9ieXRlcyA9IDA7CiAJfQogCkBAIC0xMzMsNiAmIzQzOzEzNCwxMCBAQCBzdGF0aWMgaW50IHRsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogCWlmICghbmV3X2hhc2h0YmwpCiAJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CWJvbmRfaW5mby0mZ3Q7dW5iYWxhbmNlZF9sb2FkID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyk7CiYjNDM7CWlmICghYm9uZF9pbmZvLSZndDt1bmJhbGFuY2VkX2xvYWQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAlzcGluX2xvY2tfYmgoJmFtcDtib25kLSZndDttb2RlX2xvY2spOwogCiAJYm9uZF9pbmZvLSZndDt0eF9oYXNodGJsID0gbmV3X2hhc2h0Ymw7CkBAIC0xNDMsNiAmIzQzOzE0OCwxMCBAQCBzdGF0aWMgaW50IHRsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7Ym9uZC0mZ3Q7bW9kZV9sb2NrKTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO291dDoKJiM0MzsJa2ZyZWUobmV3X2hhc2h0YmwpOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgb25seSBhZnRlciBhbGwgc2xhdmVzIGhhdmUgYmVlbiByZWxlYXNlZCAqLwpAQCAtMTU0LDMxICYjNDM7MTYzLDQ0IEBAIHN0YXRpYyB2b2lkIHRsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpCiAKIAlrZnJlZShib25kX2luZm8tJmd0O3R4X2hhc2h0YmwpOwogCWJvbmRfaW5mby0mZ3Q7dHhfaGFzaHRibCA9IE5VTEw7CiYjNDM7CWZyZWVfcGVyY3B1KGJvbmRfaW5mby0mZ3Q7dW5iYWxhbmNlZF9sb2FkKTsKJiM0MzsJYm9uZF9pbmZvLSZndDtwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSAwOwogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtib25kLSZndDttb2RlX2xvY2spOwogfQogCi1zdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpCiYjNDM7c3RhdGljIHU2NCBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQogewotCXJldHVybiAoczY0KSAoc2xhdmUtJmd0O3NwZWVkICZsdDsmbHQ7IDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovCi0JICAgICAgIChzNjQpIChTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCAmbHQ7Jmx0OyAzKTsgLyogQnl0ZXMgdG8gYml0cyAqLwomIzQzOwl1NjQgc2xhdmVfbG9hZCA9IFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDM7IC8qIEJ5dGVzIHRvIGJpdHMgKi8KJiM0MzsJdTMyIHJhd19zcGVlZCA9IFJFQURfT05DRShzbGF2ZS0mZ3Q7c3BlZWQpOwomIzQzOwl1NjQgc3BlZWQgPSAodTY0KXJhd19zcGVlZCAmbHQ7Jmx0OyAyMDsgLyogQ29udmVydCB0byBiaXRzIHBlciBzZWMgKi8KJiM0MzsKJiM0MzsJLyogSXQmIzM5O3MgbWVhbmluZ2xlc3MgdG8gY29tcGFyZSBnYXAgb24gdW5rbm93biBzcGVlZCBOSUMgKi8KJiM0MzsJaWYgKHJhd19zcGVlZCA9PSAodTMyKVNQRUVEX1VOS05PV04pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogU2tpcCBzbGF2ZSB3aGljaCBpcyBvdmVyIGxvYWRlZCAqLwomIzQzOwlpZiAoc3BlZWQgJmx0Oz0gc2xhdmVfbG9hZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gc3BlZWQgLSBzbGF2ZV9sb2FkOwogfQogCiBzdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIHsKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCAqbGVhc3RfbG9hZGVkOwogCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7Ci0JbG9uZyBsb25nIG1heF9nYXA7CiYjNDM7CXU2NCBtYXhfZ2FwID0gMDsKIAogCWxlYXN0X2xvYWRlZCA9IE5VTEw7Ci0JbWF4X2dhcCA9IExMT05HX01JTjsKIAogCS8qIEZpbmQgdGhlIHNsYXZlIHdpdGggdGhlIGxhcmdlc3QgZ2FwICovCiAJYm9uZF9mb3JfZWFjaF9zbGF2ZV9yY3UoYm9uZCwgc2xhdmUsIGl0ZXIpIHsKIAkJaWYgKGJvbmRfc2xhdmVfY2FuX3R4KHNsYXZlKSkgewotCQkJbG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTsKJiM0MzsJCQl1NjQgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpOwogCi0JCQlpZiAobWF4X2dhcCAmbHQ7IGdhcCkgewomIzQzOwkJCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIG9uZSBhdmFpbGFibGUgc2xhdmUgKi8KJiM0MzsJCQlpZiAobWF4X2dhcCAmbHQ7PSBnYXApIHsKIAkJCQlsZWFzdF9sb2FkZWQgPSBzbGF2ZTsKIAkJCQltYXhfZ2FwID0gZ2FwOwogCQkJfQpAQCAtMTM0NCw4ICYjNDM7MTM2NiwxNCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAlpZiAoIXR4X3NsYXZlKSB7CiAJCS8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi8KIAkJdHhfc2xhdmUgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC0mZ3Q7Y3Vycl9hY3RpdmVfc2xhdmUpOwotCQlpZiAoYm9uZC0mZ3Q7cGFyYW1zLnRsYl9keW5hbWljX2xiKQotCQkJYm9uZF9pbmZvLSZndDt1bmJhbGFuY2VkX2xvYWQgJiM0Mzs9IHNrYi0mZ3Q7bGVuOwomIzQzOwkJaWYgKGJvbmQtJmd0O3BhcmFtcy50bGJfZHluYW1pY19sYikgewomIzQzOwkJCXN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgKnBjcHVfbG9hZDsKJiM0MzsKJiM0MzsJCQlwY3B1X2xvYWQgPSB0aGlzX2NwdV9wdHIoYm9uZF9pbmZvLSZndDt1bmJhbGFuY2VkX2xvYWQpOwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtwY3B1X2xvYWQtJmd0O3N5bmNwKTsKJiM0MzsJCQl1NjRfc3RhdHNfYWRkKCZhbXA7cGNwdV9sb2FkLSZndDt0eF9ieXRlcywgc2tiLSZndDtsZW4pOwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cGNwdV9sb2FkLSZndDtzeW5jcCk7CiYjNDM7CQl9CiAJfQogCiAJaWYgKHR4X3NsYXZlICZhbXA7JmFtcDsgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7CkBAIC0xNTI5LDYgJiM0MzsxNTU3LDI5IEBAIG5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KQogCXJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpOwogfQogCiYjNDM7c3RhdGljIHU2NCByZXNldF91bmJhbGFuY2VkX2xvYWQoc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbykKJiM0Mzt7CiYjNDM7CXU2NCBkZWx0YSwgdHhfYnl0ZXMsIHRvdGFsX2J5dGVzID0gMDsKJiM0MzsJc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyAqcDsKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0OwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKJiM0MzsJCXAgPSBwZXJfY3B1X3B0cihib25kX2luZm8tJmd0O3VuYmFsYW5jZWRfbG9hZCwgaSk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDtwLSZndDtzeW5jcCk7CiYjNDM7CQkJdHhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO3AtJmd0O3R4X2J5dGVzKTsKJiM0MzsJCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeSgmYW1wO3AtJmd0O3N5bmNwLCBzdGFydCkpOwomIzQzOwomIzQzOwkJdG90YWxfYnl0ZXMgJiM0Mzs9IHR4X2J5dGVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRlbHRhID0gdG90YWxfYnl0ZXMgLSBib25kX2luZm8tJmd0O3ByZXZfdG90YWxfdW5iYWxhbmNlZDsKJiM0MzsJYm9uZF9pbmZvLSZndDtwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSB0b3RhbF9ieXRlczsKJiM0MzsKJiM0MzsJcmV0dXJuIGRpdl91NjQoZGVsdGEsIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTCk7CiYjNDM7fQomIzQzOwogdm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm9uZGluZywKQEAgLTE1NzEsMTAgJiM0MzsxNjIyLDExIEBAIHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCWJvbmRfZm9yX2VhY2hfc2xhdmVfcmN1KGJvbmQsIHNsYXZlLCBpdGVyKSB7CiAJCQl0bGJfY2xlYXJfc2xhdmUoYm9uZCwgc2xhdmUsIDEpOwogCQkJaWYgKHNsYXZlID09IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLSZndDtjdXJyX2FjdGl2ZV9zbGF2ZSkpIHsKLQkJCQlTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCA9Ci0JCQkJCWJvbmRfaW5mby0mZ3Q7dW5iYWxhbmNlZF9sb2FkIC8KLQkJCQkJCUJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTDsKLQkJCQlib25kX2luZm8tJmd0O3VuYmFsYW5jZWRfbG9hZCA9IDA7CiYjNDM7CQkJCXU2NCBuZXdfbG9hZCA9IHJlc2V0X3VuYmFsYW5jZWRfbG9hZChib25kX2luZm8pOwomIzQzOwomIzQzOwkJCQlzcGluX2xvY2tfYmgoJmFtcDtib25kLSZndDttb2RlX2xvY2spOwomIzQzOwkJCQlTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCA9IG5ld19sb2FkOwomIzQzOwkJCQlzcGluX3VubG9ja19iaCgmYW1wO2JvbmQtJmd0O21vZGVfbG9jayk7CiAJCQl9CiAJCX0KIAkJYXRvbWljX3NldCgmYW1wO2JvbmRfaW5mby0mZ3Q7dHhfcmViYWxhbmNlX2NvdW50ZXIsIDApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaCBiL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmgKaW5kZXggZTU5NDU0MjdmMzhkZC4uMzJmMTk4MTAzM2U0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9ib25kX2FsYi5oCkBAIC01NywxMiAmIzQzOzU3LDEyIEBAIHN0cnVjdCB0bGJfY2xpZW50X2luZm8gewogCQkJCSAqIHBhY2tldHMgdG8gYSBDbGllbnQgdGhhdCB0aGUgSGFzaCBmdW5jdGlvbgogCQkJCSAqIGdhdmUgdGhpcyBlbnRyeSBpbmRleC4KIAkJCQkgKi8KLQl1MzIgdHhfYnl0ZXM7CQkvKiBFYWNoIENsaWVudCBhY2N1bXVsYXRlcyB0aGUgQnl0ZXNUeCB0aGF0CiYjNDM7CXU2NCB0eF9ieXRlczsJCS8qIEVhY2ggQ2xpZW50IGFjY3VtdWxhdGVzIHRoZSBCeXRlc1R4IHRoYXQKIAkJCQkgKiB3ZXJlIHRyYW5zbWl0dGVkIHRvIGl0LCBhbmQgYWZ0ZXIgZWFjaAogCQkJCSAqIENhbGxCYWNrIHRoZSBMb2FkSGlzdG9yeSBpcyBkaXZpZGVkCiAJCQkJICogYnkgdGhlIGJhbGFuY2UgaW50ZXJ2YWwKIAkJCQkgKi8KLQl1MzIgbG9hZF9oaXN0b3J5OwkvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXMKJiM0MzsJdTY0IGxvYWRfaGlzdG9yeTsJLyogVGhpcyBmaWVsZCBjb250YWlucyB0aGUgYW1vdW50IG9mIEJ5dGVzCiAJCQkJICogdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHRvIHRoaXMgY2xpZW50IGJ5CiAJCQkJICogdGhlIHNlcnZlciBvbiB0aGUgcHJldmlvdXMgYmFsYW5jZQogCQkJCSAqIGludGVydmFsIGluIEJwcy4KQEAgLTExOCwxNCAmIzQzOzExOCwyMCBAQCBzdHJ1Y3QgdGxiX3NsYXZlX2luZm8gewogCQkJICogYXJlIHRoZSBlbnRyaWVzIHRoYXQgd2VyZSBhc3NpZ25lZCB0byB1c2UgdGhpcwogCQkJICogc2xhdmUgZm9yIHRyYW5zbWl0LgogCQkJICovCi0JdTMyIGxvYWQ7CS8qIEVhY2ggc2xhdmUgc3VtcyB0aGUgbG9hZEhpc3Rvcnkgb2YgYWxsIGNsaWVudHMKJiM0MzsJdTY0IGxvYWQ7CS8qIEVhY2ggc2xhdmUgc3VtcyB0aGUgbG9hZEhpc3Rvcnkgb2YgYWxsIGNsaWVudHMKIAkJCSAqIGFzc2lnbmVkIHRvIGl0CiAJCQkgKi8KIH07CiAKJiM0MztzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzIHsKJiM0MzsJdTY0X3N0YXRzX3QJCXR4X2J5dGVzOwomIzQzOwlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMJc3luY3A7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBhbGJfYm9uZF9pbmZvIHsKIAlzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvCSp0eF9oYXNodGJsOyAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgKi8KLQl1MzIJCQl1bmJhbGFuY2VkX2xvYWQ7CiYjNDM7CXN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgX19wZXJjcHUJKnVuYmFsYW5jZWRfbG9hZDsKJiM0MzsJdTY0CQkJcHJldl90b3RhbF91bmJhbGFuY2VkOwogCWF0b21pY190CQl0eF9yZWJhbGFuY2VfY291bnRlcjsKIAlpbnQJCQlscF9jb3VudGVyOwogCS8qIC0tLS0tLS0tIHJsYiBwYXJhbWV0ZXJzIC0tLS0tLS0tICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJvbmRpbmcgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBkaWdnaW5nIGludG8gdGhlIGd1dHMgb2YgdGhlIG5ldHdvcmsgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgQUxCIChBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZykgbW9kZS4gTG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIHNvbWUga2V5IGlzc3VlcyByZWxhdGVkIHRvIGludGVnZXIgb3ZlcmZsb3dzLCB3aGljaCBpcyBhbHdheXMgZ29vZCB0byBzZWUsIGVzcGVjaWFsbHkgaW4gc29tZXRoaW5nIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgaGFuZGxpbmcgc2lnbmlmaWNhbnQgbmV0d29yayB0cmFmZmljLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBidW1waW5nIHVwIHRoZSBzaXplIG9mIHZhcmlvdXMgY291bnRlcnMgYW5kIGxvYWQgaW5kaWNhdG9ycyBmcm9tIGB1MzJgIHRvIGB1NjRgLiBJIHNlZSBpdCBpbiBgdHhfYnl0ZXNgLCBgbG9hZF9oaXN0b3J5YCwgYW5kIGBsb2FkYCB3aXRoaW4gdGhlIGB0bGJfY2xpZW50X2luZm9gIGFuZCBgdGxiX3NsYXZlX2luZm9gIHN0cnVjdHMuIE1ha2VzIHNlbnNlIOKAkyBwcmV2ZW50IG92ZXJmbG93cywgZXNwZWNpYWxseSBvbiBoaWdoLWJhbmR3aWR0aCBsaW5rcy4gVGhlIGludHJvZHVjdGlvbiBvZiBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgYW5kIHRoZSBtb3ZlIHRvIHBlcmNwdSBzdGF0cyBmb3IgYHVuYmFsYW5jZWRfbG9hZGAgd2l0aGluIGBzdHJ1Y3QgYWxiX2JvbmRfaW5mb2AgaXMgc21hcnQuIFVzaW5nIGB1NjRfc3RhdHNfdGAgd2l0aCBzeW5jaHJvbml6YXRpb24gZW5zdXJlcyBhdG9taWMgdXBkYXRlcywgYW5kIHRoZSBwZXJjcHUgYXNwZWN0IGlzIGEgY2xldmVyIHdheSB0byBhdm9pZCB0aG9zZSBuYXN0eSBjYWNoZSBsaW5lIGJvdW5jZXMgb3IgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgY29tZSB1cCB3aXRoIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgQ1BVcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBZZWFoLCBJIHRoaW5rIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQuCgpUaGV5JiMzOTt2ZSBjbGVhcmx5IGdvbmUgdGhyb3VnaCB0aGUgY29kZSBhbmQgdXBkYXRlZCBmdW5jdGlvbnMgbGlrZSBgdGxiX2luaXRpYWxpemVgLCBgdGxiX2RlaW5pdGlhbGl6ZWAsIGBjb21wdXRlX2dhcGAsIGB0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZWAsIGBib25kX2RvX2FsYl94bWl0YCwgYHJlc2V0X3VuYmFsYW5jZWRfbG9hZGAsIGFuZCBgYm9uZF9hbGJfbW9uaXRvcmAgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgYHU2NGAgZGF0YSB0eXBlcyBhbmQgdGhlIHBlcmNwdSBzdGF0cy4gVGhhdCYjMzk7cyBhIGdvb2QgdGhvcm91Z2huZXNzLgoKSSBhbHNvIHNlZSB0aGF0IHRoZXkmIzM5O3JlIGNvcnJlY3RseSBoYW5kbGluZyBgU1BFRURfVU5LTk9XTmAgYW5kIG92ZXJsb2FkZWQgc2xhdmVzIGluIHRoZSBgY29tcHV0ZV9nYXBgIGZ1bmN0aW9uLiBFeGNlbGxlbnQ7IGNvcm5lciBjYXNlcyBhcmUgaW1wb3J0YW50LgoKTm93LCBJIHRoaW5rIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIGJvbmRpbmcgdG8gY29uZmlybSB0aGUgZHJpdmVyJiMzOTtzIGF2YWlsYWJpbGl0eSBhbmQgYW55IGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7cyBzb21ldGhpbmcgSSBhbHdheXMgZG8gd2hlbiByZXZpZXdpbmcgdGhpcyBraW5kIG9mIGNoYW5nZS4gT3ZlcmFsbCwgdGhpcyBzZWVtcyBsaWtlIGEgd2VsbC1jb25zaWRlcmVkIGFuZCBuZWNlc3NhcnkgcGF0Y2guIEl0JiMzOTtzIGEgc29saWQgZml4IGZvciBwb3RlbnRpYWwgcHJvYmxlbXMgYW5kIGltcHJvdmVzIHRoZSByb2J1c3RuZXNzIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgQUxCIGJvbmRpbmcgbW9kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQk9ORElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTpjb25maWcgQk9ORElOR1xuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzU2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IEJvbmRpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBJJiMzOTttIHdvcmtpbmcgd2l0aCBpcyBgQk9ORElOR2AuIE15IGdvYWwgbm93IGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIGFuZCBpdCBsb29rcyBsaWtlOiBgdGxiX2luaXRfdGFibGVfZW50cnlgIChzdGF0aWMgaW5saW5lKSwgYHRsYl9pbml0aWFsaXplYCAoc3RhdGljKSwgYHRsYl9kZWluaXRpYWxpemVgIChzdGF0aWMpLCBgY29tcHV0ZV9nYXBgIChzdGF0aWMpLCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgIChzdGF0aWMpLCBgYm9uZF9kb19hbGJfeG1pdGAgKHN0YXRpYyksIGBib25kX2FsYl94bWl0YCAobm9uLXN0YXRpYyksIGByZXNldF91bmJhbGFuY2VkX2xvYWRgIChzdGF0aWMpLCBhbmQgYGJvbmRfYWxiX21vbml0b3JgIChub24tc3RhdGljKS4KClRoaW5raW5nIHN0cmF0ZWdpY2FsbHksIGBib25kX2FsYl94bWl0YCBpcyBjbGVhcmx5IGEgaG90LXBhdGggZnVuY3Rpb24sIHBhcnQgb2YgdGhlIHRyYW5zbWl0IHBhdGgsIHNvIHRoYXQmIzM5O3MgYSBwcmltZSBjYW5kaWRhdGUuIFRoZW4sIGBib25kX2FsYl9tb25pdG9yYCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgbWVhbmluZyBpdCBoYW5kbGVzIGJhY2tncm91bmQgdGFza3Mgb3IgbW9uaXRvcmluZywgYWxzbyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy4gSSBhbHNvIG5vdGUgdGhhdCBgdGxiX2luaXRpYWxpemVgIGdldHMgY2FsbGVkIGR1cmluZyB0aGUgYm9uZGluZyBzZXR1cCBwcm9jZXNzLCB3aGljaCBjb3VsZCByZXZlYWwgaW50ZXJlc3RpbmcgYnVncy4KCkdpdmVuIHRoZXNlIGNvbnNpZGVyYXRpb25zLCBJIHRoaW5rIEkmIzM5O2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBib25kX2FsYl9tb25pdG9yYCBhbmQgYGJvbmRfYWxiX3htaXRgIGZvciBhIGNsb3NlciBsb29rLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgZnJ1aXRmdWwgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF9hbGJfbW9uaXRvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNTYwPXN0YXRpYyB1NjQgcmVzZXRfdW5iYWxhbmNlZF9sb2FkKHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8pXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1ODItXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTU4Mzp2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1ODQte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDMyMD12b2lkIGJvbmRfd29ya19pbml0X2FsbChzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzMjctXHRcdFx0ICBib25kX3Jlc2VuZF9pZ21wX2pvaW5fcmVxdWVzdHNfZGVsYXllZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQzMjg6XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZib25kLVx1MDAzZWFsYl93b3JrLCBib25kX2FsYl9tb25pdG9yKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMyOS1cdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmJvbmQtXHUwMDNlbWlpX3dvcmssIGJvbmRfbWlpX21vbml0b3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBCb25kIEFMQiBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGJvbmRfYWxiX21vbml0b3JgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBhIHByb21pc2luZyB0YXJnZXQgZm9yIGZ1enppbmcsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHBhcnQgb2YgYSB3b3JrcXVldWUuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSB3cmlua2xlLCBidXQgcG90ZW50aWFsbHkgc3RpbGwgZXhwbG9pdGFibGUuIFRoZW4gdGhlcmUmIzM5O3MgYGJvbmRfYWxiX3htaXRgLCB3aGljaCBpcyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24sIHNvIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBhIGxvb2sgdG9vLiBIbW0sIGxldCBtZSBkaWcgYXJvdW5kIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB0aGF0IG1pZ2h0IGJlIGludGVyZXN0aW5nLiBBaCwgaGVyZSYjMzk7cyBgYm9uZF9hbGJfaW5pdGlhbGl6ZWAsIGFuZCBpdCBjYWxscyBgdGxiX2luaXRpYWxpemVgLiBUaGF0IG1pZ2h0IHByb3ZpZGUgc29tZSBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZSBhcyB3ZWxsLiBUaW1lIHRvIHN0YXJ0IG1hcHBpbmcgb3V0IHRoZSBjYWxsaW5nIHJlbGF0aW9uc2hpcHMgYW5kIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF9hbGJfaW5pdGlhbGl6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzA2PXN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMjctXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTMyODppbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMjkte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDM0Nz1zdGF0aWMgaW50IGJvbmRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzczLVx0aWYgKGJvbmRfaXNfbGIoYm9uZCkpIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDM3NDpcdFx0LyogYm9uZF9hbGJfaW5pdGlhbGl6ZSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIHRpbWVyXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzUtXHRcdCAqIGlzIHN0YXJ0ZWQuXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzYtXHRcdCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0Mzc3Olx0XHRpZiAoYm9uZF9hbGJfaW5pdGlhbGl6ZShib25kLCAoQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV9BTEIpKSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDM3OC1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzU0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCb25kaW5nIERyaXZlciBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgYm9uZGluZyBkcml2ZXIuIEZyb20gd2hhdCBJIHNlZSwgYGJvbmRfYWxiX2luaXRpYWxpemVgIGFuZCBgYm9uZF9hbGJfZGVpbml0aWFsaXplYCBhcmUgY3JpdGljYWwsIGFzIHRoZXkmIzM5O3JlIGRpcmVjdGx5IGxpbmtlZCB0byB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyBvZiB0aGUgYm9uZGluZyBpbnRlcmZhY2UuIFRoZSBwYXRjaCBtb2RpZmllcyBhIGZldyBrZXkgZnVuY3Rpb25zOiBgYm9uZF9hbGJfeG1pdGAsIGBib25kX2FsYl9tb25pdG9yYCwgYHRsYl9pbml0aWFsaXplYCwgYW5kIGB0bGJfZGVpbml0aWFsaXplYC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgbWF5YmUgaW5jbHVkaW5nIGBib25kX2FsYl94bWl0YCwgZXZlbiB0aG91Z2ggaXQmIzM5O3MgbGlrZWx5IGEgaG90LXBhdGgsIGJ1dCBhZnRlciBmdXJ0aGVyIGNvbnNpZGVyYXRpb24sIGl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgYmV0dGVyIGFwcHJvYWNoLiBJIGhhdmUgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYGJvbmRfYWxiX3htaXRgIGlzIHdoZXJlIGBib25kX2RvX2FsYl94bWl0YCBpcyBjYWxsZWQsIGFuZCB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHVwZGF0ZXMgcGVyY3B1IHN0YXRzLiBOb3csIGBib25kX2FsYl9tb25pdG9yYCByZWFkcyB0aG9zZSBzYW1lIHBlcmNwdSBzdGF0cywgc28gdGhhdCBsb29rcyBsaWtlIGEgdmVyeSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbi4gYGJvbmRfYWxiX2luaXRpYWxpemVgIGlzIGdvb2QgdG9vLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYm9uZF9hbGJfeG1pdGAgaXNuJiMzOTt0ICp0b28qIGhvdC4gWWVzLCBpdCYjMzk7cyB0aGUgYG5kb19zdGFydF94bWl0YCBmb3IgQUxCIG1vZGUgYW5kLCBpbmRlZWQsIGl0JiMzOTtzIHZlcnkgaG90ISBIb3dldmVyLCBgYm9uZF9hbGJfbW9uaXRvcmAgaXMgYSBkZWxheWVkIHdvcmsgZnVuY3Rpb24uIFRoYXTigJlzIGEgaHVnZSBwbHVzLgoKTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBzaWduYXR1cmUgb2YgYGJvbmRfYWxiX21vbml0b3JgOiBgdm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylgLgoKT2theSwgZG91YmxlLWNoZWNraW5nIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgbW9kaWZpZWQsIEkgc2VlIHRoYXQgaXQmIzM5O3MgYGJvbmRfYWxiX3htaXRgIGFuZCBgYm9uZF9hbGJfbW9uaXRvcmAgb25seS4KClNvLCB0byBzdW1tYXJpemUsIGBib25kX2FsYl9tb25pdG9yYCBhbmQgYGJvbmRfYWxiX2luaXRpYWxpemVgICh3aGljaCBpbmNsdWRlcyBgdGxiX2luaXRpYWxpemVgKSBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIG9uZXMgdG8gZm9jdXMgb24uIEkgd2lsbCBhbHNvIGNoZWNrIGBib25kX2FsYl9kZWluaXRgIGp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF9hbGJfZGVpbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTEzMjg9aW50IGJvbmRfYWxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBybGJfZW5hYmxlZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM0OS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzUwOnZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNTEte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNjg4PWludCBib25kX2FsYl9pbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzE3LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE3MTg6dm9pZCBib25kX2FsYl9kZWluaXRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTcxOS17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0yNDI1PXN0YXRpYyBpbnQgX19ib25kX3JlbGVhc2Vfb25lKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTI1MTYtXHRcdCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNTE3Olx0XHRib25kX2FsYl9kZWluaXRfc2xhdmUoYm9uZCwgc2xhdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTE4LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDQxMD1zdGF0aWMgaW50IGJvbmRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDQyMi1cdGlmIChib25kX2lzX2xiKGJvbmQpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0NDIzOlx0XHRib25kX2FsYl9kZWluaXRpYWxpemUoYm9uZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ0MjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW5pdGlhbCBUaG91Z2h0cyBvbiBCb25kaW5nIE1vZHVsZSBJbml0aWFsaXphdGlvbiBhbmQgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBib25kaW5nIG1vZHVsZSBmdW5jdGlvbnMuIFdlIGhhdmUgYGJvbmRfYWxiX2luaXRpYWxpemVgLCBgYm9uZF9hbGJfZGVpbml0aWFsaXplYCwgYW5kIGBib25kX2FsYl9tb25pdG9yYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgYnJpbmdpbmcgYSBib25kaW5nIGludGVyZmFjZSBvbmxpbmUsIHNodXR0aW5nIGl0IGRvd24gY2xlYW5seSwgYW5kIGtlZXBpbmcgYW4gZXllIG9uIGl0cyBzdGF0dXMsIHJlc3BlY3RpdmVseS4gU2VlbXMgbGlrZSBhIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uLCBkZS1pbml0aWFsaXphdGlvbiwgYW5kIG1vbml0b3Jpbmcgc2V0dXAgZm9yIGFuIGFjdGl2ZS9wYXNzaXZlIGJvbmQsIHBvdGVudGlhbGx5IEFMQiAoYWRhcHRpdmUgbG9hZCBiYWxhbmNpbmcpLCB0aG91Z2ggdGhlIG5hbWluZyBjb252ZW50aW9uIGNvdWxkIGJlIGJldHRlci4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gYW55dGhpbmcgZGVlcGVyLCBsZXQmIzM5O3MganVzdCBxdWlja2x5IHZlcmlmeSB0aG9zZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gV2UgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBgQk9ORElOR2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgcHJvcGVybHkgc2V0IGFuZCBhbGwgdGhlIHByZXJlcXVpc2l0ZSBmbGFncyBhcmUgbWV0LiBObyBwb2ludCBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgdHJvdWJsZXNob290aW5nIGlmIHRoZSBtb2R1bGUgaXNuJiMzOTt0IGV2ZW4gY29tcGlsZWQgaW4hIENoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGJlZm9yZSBnZXR0aW5nIGFueSBkZWVwZXIgaW50byB0aGUgY29kZS4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIHJpZ2h0IHNldHRpbmdzIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJPTkRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zOT1pZiBORVRfQ09SRVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcbmRyaXZlcnMvbmV0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzOTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkNoZWNraW5nIHRoZSBgTkVUX0NPUkVgIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgTkVUX0NPUkVgIGFjdHVhbGx5ICppcyogd2l0aGluIHRoaXMgYnVpbGQgc3lzdGVtLiBJcyBpdCBhIGZ1bGwtYmxvd24gYG1lbnVjb25maWdgIG9wdGlvbiwgb2ZmZXJpbmcgdmFyaW91cyBzdWItc2VsZWN0aW9ucyBhbmQgZGVwZW5kZW5jaWVzPyBPciBpcyBpdCBzaW1wbHkgYSBib29sZWFuLCBhIHllcy9ubyBmbGFnIHRoYXQgYWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIHNvbWUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eT8gVGhlIGFuc3dlciBkaWN0YXRlcyBob3cgSSBuZWVkIHRvIGFwcHJvYWNoIGFueSBmdXJ0aGVyIGFuYWx5c2lzIG9yIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBkZXRlcm1pbmUgaXRzIGV4YWN0IG5hdHVyZS4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTI5PWNvbmZpZyBNSUlcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMxLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjpjb25maWcgTkVUX0NPUkVcbmRyaXZlcnMvbmV0L0tjb25maWctMzMtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBgTkVUX0NPUkVgIGlzIHRoZSBkZWZhdWx0LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhhdCBtZWFucyBJIGp1c3QgbmVlZCB0byBmb2N1cyBvbiB0aGUgYEJPTkRJTkdgIGNvbmZpZy4gTm8gb3RoZXIgY29uZmlncyBzZWVtIHJlbGV2YW50IGF0IGZpcnN0IGdsYW5jZS4KCkxldCYjMzk7cyBkaWcgaW4gYSBiaXQuIFRoZSBwYXRjaCBsZXZlcmFnZXMgc29tZSBzdGFuZGFyZCBrZXJuZWwgQVBJczogYG5ldGRldl9hbGxvY19wY3B1X3N0YXRzYCwgYW5kIGFsbCB0aG9zZSBgdTY0X3N0YXRzXypgIGZ1bmN0aW9ucy4gTm90aGluZyB1bnVzdWFsIHRoZXJlLCBhbmQgdGhhdCYjMzk7cyBnb29kLgoKUmlnaHQsIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzIGFyZSB3aXRoaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBzb21lIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBzd2l0Y2hpbmcgdG8gcGVyY3B1IHN0YXRzIGZvciBgdW5iYWxhbmNlZF9sb2FkYC4gRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBpbXByb3ZlbWVudCBhbmQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gUGVyLUNQVSBzdGF0cyBhcmUgYWx3YXlzIGFuIGludGVyZXN0aW5nIGFyZWEgdG8gdGVzdCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBsb2FkIGJhbGFuY2luZy4KCk15IGtleSBmb2N1cyBzaG91bGQgYmUgdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgYm9uZF9hbGJfaW5pdGlhbGl6ZWAsIGBib25kX2FsYl9kZWluaXRpYWxpemVgLCBhbmQgYGJvbmRfYWxiX21vbml0b3JgLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aXRoaW4gdGhlIGJvbmRpbmcgY29udGV4dC4KCkFuZCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgYGJvbmRfYWxiX21vbml0b3JgIGlzIHN0YXRpYywgd2hpY2ggaXMgbGlrZWx5LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgYm9uZF9hbGJfbW9uaXRvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNTYwPXN0YXRpYyB1NjQgcmVzZXRfdW5iYWxhbmNlZF9sb2FkKHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8pXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1ODItXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTU4Mzp2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1ODQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcuLi4gdGhpcyBpc24mIzM5O3QgYSBmaXhlZCBzdGF0ZS4gVGhlIHNpdHVhdGlvbiBpcyBpbmhlcmVudGx5IGR5bmFtaWMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIHByb2Nlc3MgdGhpcy4gSSBjYW4mIzM5O3QgdHJlYXQgaXQgYXMgYSBjb25zdGFudC4KCkFscmlnaHQsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCByZS1leGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYGJvbmRfYWxiX2luaXRpYWxpemVgIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4gb2YgdGhlIHRoaW5nLCBhbmQgbmVlZHMgdG8gYmUgcm9jayBzb2xpZCB0byBiZSBzdXJlIG5vdGhpbmcgZWxzZSBpcyBnb2luZyBvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb2luZyBleGFjdGx5IHdoYXQgSSBleHBlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBib25kX2FsYl9pbml0aWFsaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTEzMDY9c3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTMyNy1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzI4OmludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTMyOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIER5bmFtaWNzIG9mIHRoZSBTeXN0ZW0qKgoKUmlnaHQsIHRoaXMgaXNuJiMzOTt0IGEgZml4ZWQgc2l0dWF0aW9uOyBpdCYjMzk7cyBkeW5hbWljLiBUaGluZ3MgYXJlIGluIGZsdXguIEJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBvZiBzb21ldGhpbmcgY3JpdGljYWw6IGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgYm9uZF9hbGJfZGVpbml0aWFsaXplYCBmdW5jdGlvbi4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIGx5bmNocGluIGluIHRoZXNlIGtpbmRzIG9mIHN5c3RlbSByZXNldHMsIHNvIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGxvZ2ljIGFuZCBlbnN1cmUgaXQmIzM5O3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIE5vIGFzc3VtcHRpb25zIGhlcmUsIGp1c3Qgc29saWQgdmVyaWZpY2F0aW9uIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBib25kX2FsYl9kZWluaXRpYWxpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTMyOD1pbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzQ5LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzNTA6dm9pZCBib25kX2FsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM1MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDQKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJvbmRpbmcgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGp1c3QgY29zbWV0aWM7IGl0JiMzOTtzIGdvdCBzb21lIHJlYWwgdGVldGggdG8gaXQuIEkgc2VlIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBpbiB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIG1vZGUuIENsZXZlciBtb3ZlLCBjaGFuZ2luZyBgdHhfYnl0ZXNgIGFuZCBgbG9hZF9oaXN0b3J5YCB0byBgdTY0YC4gVGhhdCYjMzk7bGwgZ2l2ZSB0aGVtIGVub3VnaCBoZWFkcm9vbSB0byBwcmV2ZW50IHRob3NlIG5hc3R5IHJvbGxvdmVycywgd2hpY2ggY291bGQgd3JlYWsgaGF2b2Mgb24gbG9hZCBiYWxhbmNpbmcgY2FsY3VsYXRpb25zLiBBbmQgdGhlIHBlcmNwdSBzdGF0cyBmb3IgYHVuYmFsYW5jZWRfbG9hZGA/IEV4Y2VsbGVudC4gVGhhdCBjb21wbGV0ZWx5IHNpZGVzdGVwcyB0aGUgcmFjZSBjb25kaXRpb25zIGFuZCBjYWNoZSBsaW5lIGJvdW5jaW5nIEkgd291bGQgaGF2ZSBleHBlY3RlZCB0byBzZWUuCgpUaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0LCB3aGlsZSBzZWVtaW5nbHkgdGFyZ2V0ZWQsIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgc2lnbmlmaWNhbnQgZ2l2ZW4gdGhlIHByZXZhbGVuY2Ugb2YgdGhvc2Ugc2V0dXBzLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIGJvbmRpbmcgbG9naWMsIHdoaWNoIG1lYW5zIGl0IGNvdWxkIHBvdGVudGlhbGx5IGltcGFjdCBhIHdpZGUgcmFuZ2Ugb2YgbmV0d29yayBjb25maWd1cmF0aW9ucy4gR2l2ZW4gdGhlIGZ1bmN0aW9uYWwgYW5kIGltcGFjdGZ1bCBuYXR1cmUgb2YgdGhlIHBhdGNoIEkgd291bGQgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gQW5kIHRoZSBgRm9jdXNTeW1ib2xzYCB0aGV5JiMzOTt2ZSBpZGVudGlmaWVkIOKAkyBgYm9uZF9hbGJfaW5pdGlhbGl6ZWAsIGBib25kX2FsYl9kZWluaXRpYWxpemVgLCBhbmQgYGJvbmRfYWxiX21vbml0b3JgIOKAkyB0aG9zZSBhcmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyB0byBleGFtaW5lIGNsb3NlbHkuIEdvb2QgY2hvaWNlLiBGaW5hbGx5LCBtYWtpbmcgc3VyZSB0aGUgYEJPTkRJTkdgIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCBpcyBhIGdpdmVuLiBUaGVzZSBjaGFuZ2VzIGFyZSBjcnVjaWFsIGZvciBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2FsYl9pbml0aWFsaXplJiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX2RlaW5pdGlhbGl6ZSYjMzQ7LAogICAgJiMzNDtib25kX2FsYl9tb25pdG9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgdXNlIHBlcmNwdSBzdGF0cyBmb3IgbG9hZCBiYWxhbmNpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGFmZmVjdCBjb3JlIGJvbmRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2FsYl9pbml0aWFsaXplJiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX2RlaW5pdGlhbGl6ZSYjMzQ7LAogICAgJiMzNDtib25kX2FsYl9tb25pdG9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgdXNlIHBlcmNwdSBzdGF0cyBmb3IgbG9hZCBiYWxhbmNpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGFmZmVjdCBjb3JlIGJvbmRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIEFMQiAoQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcpIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgZGF0YSByYWNlcy4gSXQgY2hhbmdlcyBsb2FkIHRyYWNraW5nIHZhcmlhYmxlcyAoYHR4X2J5dGVzYCwgYGxvYWRfaGlzdG9yeWAsIGBsb2FkYCkgZnJvbSBgdTMyYCB0byBgdTY0YCBhbmQgaW50cm9kdWNlcyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgaXMgYWxsb2NhdGVkIHZpYSBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAsIHdoaWNoIGluaGVyZW50bHkgemVyb2VzIHRoZSBhbGxvY2F0ZWQgcGVyLUNQVSBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY5MjI1ZDEyMmZjZjJlYTZhMTJlYTFmNTc4MTdmMzhhMzBhODVmN2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAwNjowOTo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCA4MzlmNzQ4MmRjMTgyLi4zNzJkYjU0ODAzZDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGt0X3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CkBAIC03NCw4ICYjNDM7NzUsOCBAQCBzdGF0aWMgaW5saW5lIHU4IF9zaW1wbGVfaGFzaChjb25zdCB1OCAqaGFzaF9zdGFydCwgaW50IGhhc2hfc2l6ZSkKIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfaW5pdF90YWJsZV9lbnRyeShzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvICplbnRyeSwgaW50IHNhdmVfbG9hZCkKIHsKIAlpZiAoc2F2ZV9sb2FkKSB7Ci0JCWVudHJ5LSZndDtsb2FkX2hpc3RvcnkgPSAxICYjNDM7IGVudHJ5LSZndDt0eF9ieXRlcyAvCi0JCQkJICAgICAgQk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMOwomIzQzOwkJZW50cnktJmd0O2xvYWRfaGlzdG9yeSA9IDEgJiM0MzsgZGl2X3U2NChlbnRyeS0mZ3Q7dHhfYnl0ZXMsCiYjNDM7CQkJCSAgICAgIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTCk7CiAJCWVudHJ5LSZndDt0eF9ieXRlcyA9IDA7CiAJfQogCkBAIC0xMzMsNiAmIzQzOzEzNCwxMCBAQCBzdGF0aWMgaW50IHRsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogCWlmICghbmV3X2hhc2h0YmwpCiAJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CWJvbmRfaW5mby0mZ3Q7dW5iYWxhbmNlZF9sb2FkID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyk7CiYjNDM7CWlmICghYm9uZF9pbmZvLSZndDt1bmJhbGFuY2VkX2xvYWQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAlzcGluX2xvY2tfYmgoJmFtcDtib25kLSZndDttb2RlX2xvY2spOwogCiAJYm9uZF9pbmZvLSZndDt0eF9oYXNodGJsID0gbmV3X2hhc2h0Ymw7CkBAIC0xNDMsNiAmIzQzOzE0OCwxMCBAQCBzdGF0aWMgaW50IHRsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7Ym9uZC0mZ3Q7bW9kZV9sb2NrKTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO291dDoKJiM0MzsJa2ZyZWUobmV3X2hhc2h0YmwpOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgb25seSBhZnRlciBhbGwgc2xhdmVzIGhhdmUgYmVlbiByZWxlYXNlZCAqLwpAQCAtMTU0LDMxICYjNDM7MTYzLDQ0IEBAIHN0YXRpYyB2b2lkIHRsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpCiAKIAlrZnJlZShib25kX2luZm8tJmd0O3R4X2hhc2h0YmwpOwogCWJvbmRfaW5mby0mZ3Q7dHhfaGFzaHRibCA9IE5VTEw7CiYjNDM7CWZyZWVfcGVyY3B1KGJvbmRfaW5mby0mZ3Q7dW5iYWxhbmNlZF9sb2FkKTsKJiM0MzsJYm9uZF9pbmZvLSZndDtwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSAwOwogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtib25kLSZndDttb2RlX2xvY2spOwogfQogCi1zdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpCiYjNDM7c3RhdGljIHU2NCBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQogewotCXJldHVybiAoczY0KSAoc2xhdmUtJmd0O3NwZWVkICZsdDsmbHQ7IDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovCi0JICAgICAgIChzNjQpIChTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCAmbHQ7Jmx0OyAzKTsgLyogQnl0ZXMgdG8gYml0cyAqLwomIzQzOwl1NjQgc2xhdmVfbG9hZCA9IFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDM7IC8qIEJ5dGVzIHRvIGJpdHMgKi8KJiM0MzsJdTMyIHJhd19zcGVlZCA9IFJFQURfT05DRShzbGF2ZS0mZ3Q7c3BlZWQpOwomIzQzOwl1NjQgc3BlZWQgPSAodTY0KXJhd19zcGVlZCAmbHQ7Jmx0OyAyMDsgLyogQ29udmVydCB0byBiaXRzIHBlciBzZWMgKi8KJiM0MzsKJiM0MzsJLyogSXQmIzM5O3MgbWVhbmluZ2xlc3MgdG8gY29tcGFyZSBnYXAgb24gdW5rbm93biBzcGVlZCBOSUMgKi8KJiM0MzsJaWYgKHJhd19zcGVlZCA9PSAodTMyKVNQRUVEX1VOS05PV04pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogU2tpcCBzbGF2ZSB3aGljaCBpcyBvdmVyIGxvYWRlZCAqLwomIzQzOwlpZiAoc3BlZWQgJmx0Oz0gc2xhdmVfbG9hZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gc3BlZWQgLSBzbGF2ZV9sb2FkOwogfQogCiBzdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIHsKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCAqbGVhc3RfbG9hZGVkOwogCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7Ci0JbG9uZyBsb25nIG1heF9nYXA7CiYjNDM7CXU2NCBtYXhfZ2FwID0gMDsKIAogCWxlYXN0X2xvYWRlZCA9IE5VTEw7Ci0JbWF4X2dhcCA9IExMT05HX01JTjsKIAogCS8qIEZpbmQgdGhlIHNsYXZlIHdpdGggdGhlIGxhcmdlc3QgZ2FwICovCiAJYm9uZF9mb3JfZWFjaF9zbGF2ZV9yY3UoYm9uZCwgc2xhdmUsIGl0ZXIpIHsKIAkJaWYgKGJvbmRfc2xhdmVfY2FuX3R4KHNsYXZlKSkgewotCQkJbG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTsKJiM0MzsJCQl1NjQgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpOwogCi0JCQlpZiAobWF4X2dhcCAmbHQ7IGdhcCkgewomIzQzOwkJCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIG9uZSBhdmFpbGFibGUgc2xhdmUgKi8KJiM0MzsJCQlpZiAobWF4X2dhcCAmbHQ7PSBnYXApIHsKIAkJCQlsZWFzdF9sb2FkZWQgPSBzbGF2ZTsKIAkJCQltYXhfZ2FwID0gZ2FwOwogCQkJfQpAQCAtMTM0NCw4ICYjNDM7MTM2NiwxNCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAlpZiAoIXR4X3NsYXZlKSB7CiAJCS8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi8KIAkJdHhfc2xhdmUgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC0mZ3Q7Y3Vycl9hY3RpdmVfc2xhdmUpOwotCQlpZiAoYm9uZC0mZ3Q7cGFyYW1zLnRsYl9keW5hbWljX2xiKQotCQkJYm9uZF9pbmZvLSZndDt1bmJhbGFuY2VkX2xvYWQgJiM0Mzs9IHNrYi0mZ3Q7bGVuOwomIzQzOwkJaWYgKGJvbmQtJmd0O3BhcmFtcy50bGJfZHluYW1pY19sYikgewomIzQzOwkJCXN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgKnBjcHVfbG9hZDsKJiM0MzsKJiM0MzsJCQlwY3B1X2xvYWQgPSB0aGlzX2NwdV9wdHIoYm9uZF9pbmZvLSZndDt1bmJhbGFuY2VkX2xvYWQpOwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtwY3B1X2xvYWQtJmd0O3N5bmNwKTsKJiM0MzsJCQl1NjRfc3RhdHNfYWRkKCZhbXA7cGNwdV9sb2FkLSZndDt0eF9ieXRlcywgc2tiLSZndDtsZW4pOwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cGNwdV9sb2FkLSZndDtzeW5jcCk7CiYjNDM7CQl9CiAJfQogCiAJaWYgKHR4X3NsYXZlICZhbXA7JmFtcDsgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7CkBAIC0xNTI5LDYgJiM0MzsxNTU3LDI5IEBAIG5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KQogCXJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpOwogfQogCiYjNDM7c3RhdGljIHU2NCByZXNldF91bmJhbGFuY2VkX2xvYWQoc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbykKJiM0Mzt7CiYjNDM7CXU2NCBkZWx0YSwgdHhfYnl0ZXMsIHRvdGFsX2J5dGVzID0gMDsKJiM0MzsJc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyAqcDsKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0OwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKJiM0MzsJCXAgPSBwZXJfY3B1X3B0cihib25kX2luZm8tJmd0O3VuYmFsYW5jZWRfbG9hZCwgaSk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDtwLSZndDtzeW5jcCk7CiYjNDM7CQkJdHhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO3AtJmd0O3R4X2J5dGVzKTsKJiM0MzsJCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeSgmYW1wO3AtJmd0O3N5bmNwLCBzdGFydCkpOwomIzQzOwomIzQzOwkJdG90YWxfYnl0ZXMgJiM0Mzs9IHR4X2J5dGVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRlbHRhID0gdG90YWxfYnl0ZXMgLSBib25kX2luZm8tJmd0O3ByZXZfdG90YWxfdW5iYWxhbmNlZDsKJiM0MzsJYm9uZF9pbmZvLSZndDtwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSB0b3RhbF9ieXRlczsKJiM0MzsKJiM0MzsJcmV0dXJuIGRpdl91NjQoZGVsdGEsIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTCk7CiYjNDM7fQomIzQzOwogdm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm9uZGluZywKQEAgLTE1NzEsMTAgJiM0MzsxNjIyLDExIEBAIHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCWJvbmRfZm9yX2VhY2hfc2xhdmVfcmN1KGJvbmQsIHNsYXZlLCBpdGVyKSB7CiAJCQl0bGJfY2xlYXJfc2xhdmUoYm9uZCwgc2xhdmUsIDEpOwogCQkJaWYgKHNsYXZlID09IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLSZndDtjdXJyX2FjdGl2ZV9zbGF2ZSkpIHsKLQkJCQlTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCA9Ci0JCQkJCWJvbmRfaW5mby0mZ3Q7dW5iYWxhbmNlZF9sb2FkIC8KLQkJCQkJCUJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTDsKLQkJCQlib25kX2luZm8tJmd0O3VuYmFsYW5jZWRfbG9hZCA9IDA7CiYjNDM7CQkJCXU2NCBuZXdfbG9hZCA9IHJlc2V0X3VuYmFsYW5jZWRfbG9hZChib25kX2luZm8pOwomIzQzOwomIzQzOwkJCQlzcGluX2xvY2tfYmgoJmFtcDtib25kLSZndDttb2RlX2xvY2spOwomIzQzOwkJCQlTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCA9IG5ld19sb2FkOwomIzQzOwkJCQlzcGluX3VubG9ja19iaCgmYW1wO2JvbmQtJmd0O21vZGVfbG9jayk7CiAJCQl9CiAJCX0KIAkJYXRvbWljX3NldCgmYW1wO2JvbmRfaW5mby0mZ3Q7dHhfcmViYWxhbmNlX2NvdW50ZXIsIDApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaCBiL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmgKaW5kZXggZTU5NDU0MjdmMzhkZC4uMzJmMTk4MTAzM2U0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9ib25kX2FsYi5oCkBAIC01NywxMiAmIzQzOzU3LDEyIEBAIHN0cnVjdCB0bGJfY2xpZW50X2luZm8gewogCQkJCSAqIHBhY2tldHMgdG8gYSBDbGllbnQgdGhhdCB0aGUgSGFzaCBmdW5jdGlvbgogCQkJCSAqIGdhdmUgdGhpcyBlbnRyeSBpbmRleC4KIAkJCQkgKi8KLQl1MzIgdHhfYnl0ZXM7CQkvKiBFYWNoIENsaWVudCBhY2N1bXVsYXRlcyB0aGUgQnl0ZXNUeCB0aGF0CiYjNDM7CXU2NCB0eF9ieXRlczsJCS8qIEVhY2ggQ2xpZW50IGFjY3VtdWxhdGVzIHRoZSBCeXRlc1R4IHRoYXQKIAkJCQkgKiB3ZXJlIHRyYW5zbWl0dGVkIHRvIGl0LCBhbmQgYWZ0ZXIgZWFjaAogCQkJCSAqIENhbGxCYWNrIHRoZSBMb2FkSGlzdG9yeSBpcyBkaXZpZGVkCiAJCQkJICogYnkgdGhlIGJhbGFuY2UgaW50ZXJ2YWwKIAkJCQkgKi8KLQl1MzIgbG9hZF9oaXN0b3J5OwkvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXMKJiM0MzsJdTY0IGxvYWRfaGlzdG9yeTsJLyogVGhpcyBmaWVsZCBjb250YWlucyB0aGUgYW1vdW50IG9mIEJ5dGVzCiAJCQkJICogdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHRvIHRoaXMgY2xpZW50IGJ5CiAJCQkJICogdGhlIHNlcnZlciBvbiB0aGUgcHJldmlvdXMgYmFsYW5jZQogCQkJCSAqIGludGVydmFsIGluIEJwcy4KQEAgLTExOCwxNCAmIzQzOzExOCwyMCBAQCBzdHJ1Y3QgdGxiX3NsYXZlX2luZm8gewogCQkJICogYXJlIHRoZSBlbnRyaWVzIHRoYXQgd2VyZSBhc3NpZ25lZCB0byB1c2UgdGhpcwogCQkJICogc2xhdmUgZm9yIHRyYW5zbWl0LgogCQkJICovCi0JdTMyIGxvYWQ7CS8qIEVhY2ggc2xhdmUgc3VtcyB0aGUgbG9hZEhpc3Rvcnkgb2YgYWxsIGNsaWVudHMKJiM0MzsJdTY0IGxvYWQ7CS8qIEVhY2ggc2xhdmUgc3VtcyB0aGUgbG9hZEhpc3Rvcnkgb2YgYWxsIGNsaWVudHMKIAkJCSAqIGFzc2lnbmVkIHRvIGl0CiAJCQkgKi8KIH07CiAKJiM0MztzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzIHsKJiM0MzsJdTY0X3N0YXRzX3QJCXR4X2J5dGVzOwomIzQzOwlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMJc3luY3A7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBhbGJfYm9uZF9pbmZvIHsKIAlzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvCSp0eF9oYXNodGJsOyAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgKi8KLQl1MzIJCQl1bmJhbGFuY2VkX2xvYWQ7CiYjNDM7CXN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgX19wZXJjcHUJKnVuYmFsYW5jZWRfbG9hZDsKJiM0MzsJdTY0CQkJcHJldl90b3RhbF91bmJhbGFuY2VkOwogCWF0b21pY190CQl0eF9yZWJhbGFuY2VfY291bnRlcjsKIAlpbnQJCQlscF9jb3VudGVyOwogCS8qIC0tLS0tLS0tIHJsYiBwYXJhbWV0ZXJzIC0tLS0tLS0tICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg2CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCb25kaW5nIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgdGhlIGJvbmRpbmcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIEFjdGl2ZSBMb2FkIEJhbGFuY2luZyAoQUxCKSBjb21wb25lbnQsIGZvY3VzZWQgb24gYGJvbmRfYWxiLmNgIGFuZCBgYm9uZF9hbGIuaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBhIHNpZ25pZmljYW50IHNoaWZ0IHRvd2FyZHMgaGFuZGxpbmcgbGFyZ2VyIHZhbHVlcywgYSBjcml0aWNhbCBjaGFuZ2UgZm9yIGhpZ2gtYmFuZHdpZHRoIGVudmlyb25tZW50cy4gVGhleSYjMzk7cmUgYnJvYWRlbmluZyB0aGUgZGF0YSB0eXBlcyB1c2VkIGZvciBsb2FkIG1ldHJpY3Mg4oCTIHNwZWNpZmljYWxseSwgY29udmVydGluZyBgdHhfYnl0ZXNgIGFuZCBgbG9hZF9oaXN0b3J5YCB3aXRoaW4gYHRsYl9jbGllbnRfaW5mb2AsIGFuZCBgbG9hZGAgaW4gYHRsYl9zbGF2ZV9pbmZvYCBmcm9tIGB1MzJgIHRvIGB1NjRgLiBUaGlzIGlzIGdvb2QsIGl0IGFudGljaXBhdGVzIHRoZSBpbmNyZWFzZWQgdGhyb3VnaHB1dCB3ZSYjMzk7cmUgc2VlaW5nIGluIG1vZGVybiBuZXR3b3Jrcy4KClRoZSBtb3N0IGludHJpZ3VpbmcgcGFydCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHBlci1DUFUgc3RhdHMgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGV5JiMzOTt2ZSBtb3ZlZCBmcm9tIGEgc2luZ2xlIGB1MzJgIGZvciBgdW5iYWxhbmNlZF9sb2FkYCBpbiBgYWxiX2JvbmRfaW5mb2AgdG8gYSBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyBfX3BlcmNwdSAqdW5iYWxhbmNlZF9sb2FkYC4gVGhpcyBuZXcgc3RydWN0dXJlLCBgdW5iYWxhbmNlZF9sb2FkX3N0YXRzYCwgY29udGFpbnMgYHU2NF9zdGF0c190IHR4X2J5dGVzYCBhbmQgYSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBgc3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwYC4gVGhpcyBpcyBzbWFydC4gSXQgYWxsb3dzIGZvciBwZXItQ1BVIGFjY291bnRpbmcgb2YgbG9hZCwgYW5kIHRoZSBzeW5jaHJvbml6YXRpb24gaXMgY3J1Y2lhbCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlbiBhZ2dyZWdhdGluZyB0aGVzZSBzdGF0cy4gVGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gYHRsYl9pbml0aWFsaXplKClgIGFuZCBgdGxiX2RlaW5pdGlhbGl6ZSgpYCwgdXNpbmcgYG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKClgIGFuZCBpdHMgY291bnRlcnBhcnQsIHNlZW0gY29ycmVjdGx5IGltcGxlbWVudGVkLiBUaGUgcGF0Y2ggY29ycmVjdGx5IHVwZGF0ZXMgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgc3VjaCBhcyBgYm9uZF9kb19hbGJfeG1pdCgpYCBhbmQgYGJvbmRfYWxiX21vbml0b3IoKWAsIHRvIHVzZSB0aGVzZSBuZXcgcGVyLUNQVSBzdGF0aXN0aWNzLiBBbmQgdGhlIGFkanVzdG1lbnRzIHRvIGBjb21wdXRlX2dhcCgpYCB0byBoYW5kbGUgYHU2NGAgYW5kIHNwZWVkcyB1c2luZyBgUkVBRF9PTkNFKClgIGlzIGdvb2QgdG9vLgoKQnV0LCBob2xkIG9uLiBUaGlzIHBlci1DUFUgYWxsb2NhdGlvbi4uLiBJIHdhbnQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueXRpbWUgd2UmIzM5O3JlIGFsbG9jYXRpbmcgcGVyLUNQVSBtZW1vcnksIHplcm8taW5pdGlhbGl6YXRpb24gaXMgc29tZXRoaW5nIHRvIHZlcmlmeS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0c2AganVzdCB0byBiZSBzdXJlLi4uIExldCYjMzk7cyBzZWUuLi4gQWgsIHllcywgaXQmIzM5O3MgYSBtYWNybyB0aGF0IHdyYXBzIGBhbGxvY19wZXJjcHVfZ2ZwYCB3aXRoIGBfX0dGUF9aRVJPYC4gUGVyZmVjdC4gVGhhdCBjb25maXJtcyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyB6ZXJvZWQsIHdoaWNoIGlzIGVzc2VudGlhbCB0byBwcmV2ZW50IGFueSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIEFscmlnaHQsIGdvb2QuIE5vIGltbWVkaWF0ZSBjb25jZXJucyB0aGVyZS4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgdXBkYXRlIG92ZXJhbGwsIHdpdGggdGhvdWdodGZ1bCBjb25zaWRlcmF0aW9uIGdpdmVuIHRvIGRhdGEgdHlwZSBzaXplcyBhbmQgdGhyZWFkIHNhZmV0eSB3aGVuIGRlYWxpbmcgd2l0aCBwZXItQ1BVIHN0YXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zMTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMxNTUtXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMxNTY6I2RlZmluZSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyh0eXBlKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMTU3LVx0X19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyh0eXBlLCBHRlBfS0VSTkVMKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTAzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgX19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0c2AqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgX19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0c2AuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyBpdHMgcHVycG9zZSAtIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgcGVyLUNQVSBzdGF0aXN0aWNzIGZvciBuZXR3b3JrIGRldmljZXMuIEtub3dpbmcgdGhpcywgbXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgZGV0YWlscyBvZiBpdHMgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgaXQgaGFuZGxlcyBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgaW52b2x2ZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgYXJlYXMgdGhhdCBtaWdodCBiZSBzdXNjZXB0aWJsZSB0byBjb250ZW50aW9uLCBhbmQgYW55IG51YW5jZXMgaW4gdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIHN1Y2ggYXMgd2hldGhlciBpdCB1c2VzIHNsYWIgYWxsb2NhdG9ycywgTlVNQSBhd2FyZW5lc3MsIG9yIHNwZWNpZmljIENQVSBhZmZpbml0eSBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bGwgd2FudCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIHdoZXJlIGFuZCB3aGVuIGl0JiMzOTtzIGludm9rZWQsIGFuZCBob3cgdGhlIGFsbG9jYXRlZCBwZXItQ1BVIHN0YXRzIGFyZSB1dGlsaXplZCB0aHJvdWdob3V0IHRoZSBuZXR3b3JrIHN0YWNrLiBJIGFudGljaXBhdGUgdGhlcmUgbWlnaHQgYmUgY29tcGxleGl0aWVzIHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgaW4gc2NlbmFyaW9zIHdoZXJlIGFsbG9jYXRpb24gZmFpbHMgb3IgcmVzb3VyY2VzIGFyZSBsaW1pdGVkLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGVuc3VyZSBvdmVyYWxsIHN5c3RlbSBpbnRlZ3JpdHkgYW5kIHJlbGlhYmlsaXR5LiBPdmVyYWxsLCBteSBnb2FsIGlzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb27igJlzIGJlaGF2aW9yLCBwZXJmb3JtYW5jZSwgYW5kIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgZWNvc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgX19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTMxMzM9c3RhdGljIGlubGluZSB2b2lkIGRldl9kc3RhdHNfdHhfZHJvcHBlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzE0MS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzE0MjojZGVmaW5lIF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHModHlwZSwgZ2ZwKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzE0My0oe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIG5ldHdvcmtpbmcgY29kZToKCioqRGl2aW5nIGludG8gYF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBzb3VyY2UgZm9yIGBfX25ldGRldl9hbGxvY19wY3B1X3N0YXRzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4gSXQmIzM5O3MgZ290ICYjMzQ7YWxsb2MmIzM0OyBpbiB0aGUgbmFtZSwgc28gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiBvZiBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGEgbmV0d29yayBkZXZpY2UuIFBlci1DUFUgaXMgY3J1Y2lhbCBoZXJlOyBpdCBnaXZlcyBlYWNoIENQVSBpdHMgb3duIGNvdW50ZXJzLCBhdm9pZGluZyBjb250ZW50aW9uIGFuZCBlbnN1cmluZyBnb29kIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IG9uIGhpZ2gtY29yZS1jb3VudCBzeXN0ZW1zLiBTbywgdGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbCBmb3IgYWNjdXJhdGUgYW5kIGVmZmljaWVudCBuZXR3b3JrIG1vbml0b3JpbmcuIExldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHNsYWIgYWxsb2NhdGlvbiwgcHJvYmFibHkgdXNpbmcgYGFsbG9jX3BlcmNwdSgpYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aG9zZSBjb3VudGVycyB0byB6ZXJvLiBJJiMzOTtsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIGFueSBzcGlubG9ja3Mgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGVzZSBwZXItY3B1IHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIGRlYWxsb2NhdGlvbiwgdG8gZW5zdXJlIGF0b21pY2l0eS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlJiMzOTtzIGxpZmVjeWNsZSAtIHdoZW4gaXMgaXQgY2FsbGVkLCB3aGVuIGlzIHRoZSBtZW1vcnkgZnJlZWQsIGFuZCBob3cgaXMgaXQgbGlua2VkIGludG8gdGhlIG92ZXJhbGwgYG5ldF9kZXZpY2VgIHN0cnVjdHVyZS4gSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gYmUgY2FsbGVkIGR1cmluZyBkZXZpY2UgcmVnaXN0cmF0aW9uLCBwcm9iYWJseSB3aXRoaW4gdGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiBwYXRoLCB3aGVuIHRoZSBkZXZpY2UgY29tZXMgb25saW5lLiBJJiMzOTtsbCBhbHNvIGNoZWNrIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmljIG5ldHdvcmsgc3RhdGlzdGljcyBzdHJ1Y3R1cmVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBwZXItY3B1IHZlcnNpb25zLiBUaGlzIGlzIGxpa2VseSBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIHVuZGVyc3RhbmQgaG93IG5ldHdvcmsgc3RhdGlzdGljcyB3b3JrIGluIHRoaXMga2VybmVsIHZlcnNpb24uIExldCYjMzk7cyBnZXQgaW50byB0aGUgZGV0YWlscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTQyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNDI6XHQjZGVmaW5lIF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHModHlwZSwgZ2ZwKVx0XHRcdFx0XFxcbjMxNDM6XHQoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4zMTQ0Olx0XHR0eXBlb2YodHlwZSkgX19wZXJjcHUgKnBjcHVfc3RhdHMgPSBhbGxvY19wZXJjcHVfZ2ZwKHR5cGUsIGdmcCk7XFxcbjMxNDU6XHRcdGlmIChwY3B1X3N0YXRzKVx0e1x0XHRcdFx0XHRcdFxcXG4zMTQ2Olx0XHRcdGludCBfX2NwdTtcdFx0XHRcdFx0XHRcXFxuMzE0NzpcdFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoX19jcHUpIHtcdFx0XHRcdFxcXG4zMTQ4Olx0XHRcdFx0dHlwZW9mKHR5cGUpICpzdGF0O1x0XHRcdFx0XFxcbjMxNDk6XHRcdFx0XHRzdGF0ID0gcGVyX2NwdV9wdHIocGNwdV9zdGF0cywgX19jcHUpO1x0XHRcXFxuMzE1MDpcdFx0XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnN0YXQtXHUwMDNlc3luY3ApO1x0XHRcdFxcXG4zMTUxOlx0XHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4zMTUyOlx0XHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4zMTUzOlx0XHRwY3B1X3N0YXRzO1x0XHRcdFx0XHRcdFx0XFxcbjMxNTQ6XHR9KVxuMzE1NTpcdFxuMzE1NjpcdCNkZWZpbmUgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHModHlwZSlcdFx0XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqTWVtb3J5IEFsbG9jYXRpb24gTnVhbmNlczogQSBRdWljayBSZXZpZXcqKgoKQWxyaWdodCwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IGBhbGxvY19wZXJjcHVfZ2ZwYC4gSSB0aG91Z2h0IEkga25ldyB0aGlzLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRoZXNlIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzLCBnaXZlbiB0aGUga2VybmVsJiMzOTtzIGNyaXRpY2FsIHJvbGUgaW4gZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkuIFNvLCBpcyBpdCB0cnVlIHRoYXQgYGFsbG9jX3BlcmNwdV9nZnBgIHplcm9lcyBtZW1vcnkgYnkgZGVmYXVsdD8gSXQgc2VlbWVkIGxpa2UgaXQgZGlkIHVubGVzcyB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcgd2FzIGV4cGxpY2l0bHkgb21pdHRlZC4gSG93ZXZlciwgSSBzZWVtIHRvIHJlbWVtYmVyIHRoYXQgYGFsbG9jX3BlcmNwdWAgaXRzZWxmIGd1YXJhbnRlZXMgemVyb2VkIG1lbW9yeS4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IGxldCYjMzk7cyBjb25maXJtLiBJIGtub3cgdGhhdCB1c2luZyBgYWxsb2NfcGVyY3B1X2dmcGAgd2l0aCBzb21ldGhpbmcgbGlrZSBgR0ZQX0tFUk5FTGAgd2lsbCBhbHNvIHJlc3VsdCBpbiB6ZXJvZWQgbWVtb3J5LCBiZWNhdXNlIHRoZSBgcGNwdV9hbGxvY2AgZnVuY3Rpb24gdW5kZXJuZWF0aCBoYW5kbGVzIHRoZSBhY3R1YWwgYWxsb2NhdGlvbiBhbmQgemVyb2luZywgcmlnaHQ/IE9rYXksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFuZCBhdm9pZCBhIG5hc3R5IGJ1ZyBsYXRlciwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGUgYmVoYXZpb3Igb2YgYGFsbG9jX3BlcmNwdV9nZnBgIHRvIHJlaW5mb3JjZSBteSB1bmRlcnN0YW5kaW5nLiBObyBoYXJtIGluIGEgcXVpY2sgdmVyaWZpY2F0aW9uOyBhIGZhdWx0eSBhc3N1bXB0aW9uIGhlcmUgY291bGQgY2F1c2Ugc2lnbmlmaWNhbnQgaXNzdWVzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBhbGxvY19wZXJjcHVfZ2ZwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGVyY3B1Lmg9MTM3PWV4dGVybiB2b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LmgtMTQ2LVxuaW5jbHVkZS9saW51eC9wZXJjcHUuaDoxNDc6I2RlZmluZSBhbGxvY19wZXJjcHVfZ2ZwKHR5cGUsIGdmcClcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcGVyY3B1LmgtMTQ4LVx0KHR5cGVvZih0eXBlKSBfX3BlcmNwdSAqKV9fYWxsb2NfcGVyY3B1X2dmcChzaXplb2YodHlwZSksXHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDc5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19hbGxvY19wZXJjcHVfZ2ZwYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYF9fYWxsb2NfcGVyY3B1X2dmcGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24gYmVoYXZlcy4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGVyLUNQVSBkYXRhIHN0cnVjdHVyZXMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBhcyB0aGUgbGluY2hwaW4gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiBwZXItQ1BVIHZhcmlhYmxlIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggR0ZQIGZsYWdzLiBNeSBmb2N1cyByaWdodCBub3cgd2lsbCBiZSBvbiBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBwYWdlIGFsbG9jYXRvci4gSSYjMzk7bSBrZWVuIHRvIGV4YW1pbmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBtZW1vcnkgZnJhZ21lbnRhdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBkdXJpbmcgcGVyLUNQVSBhbGxvY2F0aW9ucyB1bmRlciB2YXJpb3VzIHN5c3RlbSB3b3JrbG9hZHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGl0cyBkZXNpZ24gY29uc2lkZXJhdGlvbnMgYXJlIGNvbnNpc3RlbnQgd2l0aCBteSBleHBlY3RhdGlvbnMgYXJvdW5kIHNjYWxhYmlsaXR5IGFuZCBOVU1BLWF3YXJlbmVzcyBpbiBhIG1vZGVybiBrZXJuZWwuIExldCYjMzk7cyBzZWUgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IG1lbW9yeSB6b25lcyBhbmQgaWYgaXQgY29ycmVjdGx5IGludGVncmF0ZXMgd2l0aCB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSByZWNsYWltIG1lY2hhbmlzbXMuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgX19hbGxvY19wZXJjcHVfZ2ZwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGVyY3B1Lmg9MTM3PWV4dGVybiB2b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LmgtMTM5LVxuaW5jbHVkZS9saW51eC9wZXJjcHUuaDoxNDA6I2RlZmluZSBfX2FsbG9jX3BlcmNwdV9nZnAoX3NpemUsIF9hbGlnbiwgX2dmcClcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS5oLTE0MS1cdGFsbG9jX2hvb2tzKHBjcHVfYWxsb2Nfbm9wcm9mKF9zaXplLCBfYWxpZ24sIGZhbHNlLCBfZ2ZwKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ4NQoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiAzNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FmZXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgcGNwdV9hbGxvY19ub3Byb2ZgIHplcm9pbmcgbWVtb3J5IGlzIGEga2V5IHBvaW50IGhlcmU7IGl0IG1lYW5zIHRoZSBwZXItQ1BVIHN0YXRzIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGlzIGlzIGdvb2QuIFRoZSBwYXRjaCBpcyBhYm91dCBhZGRyZXNzaW5nIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBwb3RlbnRpYWwgZGF0YSByYWNlcywgd2hpY2ggaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBidXQgbGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb25lIHNhZmVseS4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGNoYW5nZXMgc29tZSB2YXJpYWJsZXMsIEkgc2VlIHRoYXQuIEl0JiMzOTtzIG1vdmluZyBmcm9tIGB1MzJgIHRvIGB1NjRgIHRvIHByZXZlbnQgb3ZlcmZsb3csIGFuZCBsZXZlcmFnaW5nIHBlci1DUFUgc3RhdHMgaXMgZGVmaW5pdGVseSB0aGUgY29ycmVjdCB3YXkgdG8gYXZvaWQgbG9jayBjb250ZW50aW9uIGFuZCBkYXRhIHJhY2VzLCBlc3BlY2lhbGx5IG9uIHNvbWV0aGluZyBsaWtlIGB1bmJhbGFuY2VkX2xvYWRgLgoKVGhlcmUmIzM5O3Mgbm8gbmV3IGluZm9ybWF0aW9uIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gdGhhdCYjMzk7cyBhIGNoZWNrLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBJIGNhbiBzZWUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGlzIGxvZ2ljLWJhc2VkIOKAkyBmaXhpbmcgdGhvc2UgaW50ZWdlciBvdmVyZmxvd3MgYW5kIGVuc3VyaW5nIHRocmVhZC1zYWZldHkgYXJvdW5kIHRoYXQgc2hhcmVkIGNvdW50ZXIuIEkgY2FuJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGludHJvZHVjZWQsIHNvIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBjb3JydXB0aW9uLCBpZiB0aGVyZSBpcyBhbnkuIFRoYXQgbWVhbnMgSSBkb24mIzM5O3QgdGhpbmsgaXQgKk5lZWRzS01TQU4qIOKAkyB0aGUgY2hhbmdlIGlzIHByZXR0eSBjb250YWluZWQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgb24gd2hldGhlciBhbnl0aGluZyBpbnNpZGUgYHN0cnVjdCBhbGJfYm9uZF9pbmZvYCBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEl0IGxvb2tzIGludGVybmFsOyBpdCYjMzk7cyBwYXJ0IG9mIGBzdHJ1Y3QgYm9uZGluZ2AsIHdoaWNoIGlzIGFsc28gaW50ZXJuYWwuIEFoLCB5ZXMsIHRoZSBgdHhfYnl0ZXNgLCBgbG9hZF9oaXN0b3J5YCwgYW5kIGBsb2FkYCBmaWVsZHMgYXJlIGFsbCBpbnRlcm5hbCBzdGF0cyBzcGVjaWZpYyB0byBBTEIsIHRoZSBBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZyBtb2RlLiBObyB3b3JyaWVzIGFib3V0IHRoZSBjb2RlIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIHRvIHN1bW1hcml6ZSBteSByZWFzb25pbmc6IHRoaXMgcGF0Y2ggaXMgZml4aW5nIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBwb3RlbnRpYWwgZGF0YSByYWNlcyBpbiB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIG1vZGUuIEl0JiMzOTtzIGRvaW5nIHRoaXMgYnkgdXBncmFkaW5nIGB1MzJgIHZhcmlhYmxlcyB0byBgdTY0YCBhbmQgYnkgdXRpbGl6aW5nIHBlci1DUFUgc3RhdGlzdGljcyBmb3IgYHVuYmFsYW5jZWRfbG9hZGAuIFRoZSBuZXcgcGVyLUNQVSBzdGF0aXN0aWNzIHN0cnVjdHVyZSAoYHN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHNgKSBhcmUgYWxsb2NhdGVkIHdpdGggemVyb2VkIG1lbW9yeSB1c2luZyBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAsIHdoaWNoIGNhbGxzIGBhbGxvY19wZXJjcHVfZ2ZwKClgLiBDcnVjaWFsbHksIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgYW55d2hlcmUuIEtBU0FOIGlzIHRoZXJlIGFzIGEgc2FmZXR5IG5ldC4gVGhlcmVmb3JlLCBhIHNwZWNpYWxpemVkIEtNU0FOIGZ1enplciBzZXNzaW9uIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIEFMQiAoQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcpIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgZGF0YSByYWNlcy4gSXQgY2hhbmdlcyBsb2FkIHRyYWNraW5nIHZhcmlhYmxlcyAoYHR4X2J5dGVzYCwgYGxvYWRfaGlzdG9yeWAsIGBsb2FkYCkgZnJvbSBgdTMyYCB0byBgdTY0YCBhbmQgaW50cm9kdWNlcyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgaXMgYWxsb2NhdGVkIHZpYSBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAsIHdoaWNoIGluaGVyZW50bHkgemVyb2VzIHRoZSBhbGxvY2F0ZWQgcGVyLUNQVSBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIChBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZykgbW9kZSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGFuZCBkYXRhIHJhY2VzLiBJdCBjaGFuZ2VzIGxvYWQgdHJhY2tpbmcgdmFyaWFibGVzIChgdHhfYnl0ZXNgLCBgbG9hZF9oaXN0b3J5YCwgYGxvYWRgKSBmcm9tIGB1MzJgIHRvIGB1NjRgIGFuZCBpbnRyb2R1Y2VzIHBlci1DUFUgc3RhdGlzdGljcyBmb3IgYHVuYmFsYW5jZWRfbG9hZGAuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGBzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzYCBpcyBhbGxvY2F0ZWQgdmlhIGBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cygpYCwgd2hpY2ggaW5oZXJlbnRseSB6ZXJvZXMgdGhlIGFsbG9jYXRlZCBwZXItQ1BVIG1lbW9yeS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6NTcuMDcxMjY3NTE1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4OTQ1Mzc0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvbmRfYWxiX2luaXRpYWxpemVcIixcbiAgICBcImJvbmRfYWxiX2RlaW5pdGlhbGl6ZVwiLFxuICAgIFwiYm9uZF9hbGJfbW9uaXRvclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJvbmRpbmcgZHJpdmVyJ3MgQUxCIChBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZykgbW9kZSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGFuZCBkYXRhIHJhY2VzLiBJdCBjaGFuZ2VzIGxvYWQgdHJhY2tpbmcgdmFyaWFibGVzIChgdHhfYnl0ZXNgLCBgbG9hZF9oaXN0b3J5YCwgYGxvYWRgKSBmcm9tIGB1MzJgIHRvIGB1NjRgIGFuZCBpbnRyb2R1Y2VzIHBlci1DUFUgc3RhdGlzdGljcyBmb3IgYHVuYmFsYW5jZWRfbG9hZGAuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGBzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzYCBpcyBhbGxvY2F0ZWQgdmlhIGBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cygpYCwgd2hpY2ggaW5oZXJlbnRseSB6ZXJvZXMgdGhlIGFsbG9jYXRlZCBwZXItQ1BVIG1lbW9yeS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGJvbmRpbmcgZHJpdmVyJ3MgQUxCIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgdXNlIHBlcmNwdSBzdGF0cyBmb3IgbG9hZCBiYWxhbmNpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGFmZmVjdCBjb3JlIGJvbmRpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjU3LjA3MTI3Mzg5NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyNDYyODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjkyMjVkMTIyZmNmMmVhNmExMmVhMWY1NzgxN2YzOGEzMGE4NWY3YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwNjowOTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcXG5pbmRleCA4MzlmNzQ4MmRjMTgyLi4zNzJkYjU0ODAzZDM3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xcbkBAIC02LDYgKzYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuQEAgLTc0LDggKzc1LDggQEAgc3RhdGljIGlubGluZSB1OCBfc2ltcGxlX2hhc2goY29uc3QgdTggKmhhc2hfc3RhcnQsIGludCBoYXNoX3NpemUpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfaW5pdF90YWJsZV9lbnRyeShzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvICplbnRyeSwgaW50IHNhdmVfbG9hZClcXG4ge1xcbiBcXHRpZiAoc2F2ZV9sb2FkKSB7XFxuLVxcdFxcdGVudHJ5LVxcdTAwM2Vsb2FkX2hpc3RvcnkgPSAxICsgZW50cnktXFx1MDAzZXR4X2J5dGVzIC9cXG4tXFx0XFx0XFx0XFx0ICAgICAgQk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMO1xcbitcXHRcXHRlbnRyeS1cXHUwMDNlbG9hZF9oaXN0b3J5ID0gMSArIGRpdl91NjQoZW50cnktXFx1MDAzZXR4X2J5dGVzLFxcbitcXHRcXHRcXHRcXHQgICAgICBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUwpO1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNldHhfYnl0ZXMgPSAwO1xcbiBcXHR9XFxuIFxcbkBAIC0xMzMsNiArMTM0LDEwIEBAIHN0YXRpYyBpbnQgdGxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuIFxcdGlmICghbmV3X2hhc2h0YmwpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0Ym9uZF9pbmZvLVxcdTAwM2V1bmJhbGFuY2VkX2xvYWQgPSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzKTtcXG4rXFx0aWYgKCFib25kX2luZm8tXFx1MDAzZXVuYmFsYW5jZWRfbG9hZClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuIFxcbiBcXHRib25kX2luZm8tXFx1MDAzZXR4X2hhc2h0YmwgPSBuZXdfaGFzaHRibDtcXG5AQCAtMTQzLDYgKzE0OCwxMCBAQCBzdGF0aWMgaW50IHRsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Ym9uZC1cXHUwMDNlbW9kZV9sb2NrKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rb3V0OlxcbitcXHRrZnJlZShuZXdfaGFzaHRibCk7XFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuIFxcbiAvKiBNdXN0IGJlIGNhbGxlZCBvbmx5IGFmdGVyIGFsbCBzbGF2ZXMgaGF2ZSBiZWVuIHJlbGVhc2VkICovXFxuQEAgLTE1NCwzMSArMTYzLDQ0IEBAIHN0YXRpYyB2b2lkIHRsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuIFxcbiBcXHRrZnJlZShib25kX2luZm8tXFx1MDAzZXR4X2hhc2h0YmwpO1xcbiBcXHRib25kX2luZm8tXFx1MDAzZXR4X2hhc2h0YmwgPSBOVUxMO1xcbitcXHRmcmVlX3BlcmNwdShib25kX2luZm8tXFx1MDAzZXVuYmFsYW5jZWRfbG9hZCk7XFxuK1xcdGJvbmRfaW5mby1cXHUwMDNlcHJldl90b3RhbF91bmJhbGFuY2VkID0gMDtcXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbiB9XFxuIFxcbi1zdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXFxuK3N0YXRpYyB1NjQgY29tcHV0ZV9nYXAoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4ge1xcbi1cXHRyZXR1cm4gKHM2NCkgKHNsYXZlLVxcdTAwM2VzcGVlZCBcXHUwMDNjXFx1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xcbi1cXHQgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkIFxcdTAwM2NcXHUwMDNjIDMpOyAvKiBCeXRlcyB0byBiaXRzICovXFxuK1xcdHU2NCBzbGF2ZV9sb2FkID0gU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXFx1MDAzY1xcdTAwM2MgMzsgLyogQnl0ZXMgdG8gYml0cyAqL1xcbitcXHR1MzIgcmF3X3NwZWVkID0gUkVBRF9PTkNFKHNsYXZlLVxcdTAwM2VzcGVlZCk7XFxuK1xcdHU2NCBzcGVlZCA9ICh1NjQpcmF3X3NwZWVkIFxcdTAwM2NcXHUwMDNjIDIwOyAvKiBDb252ZXJ0IHRvIGJpdHMgcGVyIHNlYyAqL1xcbitcXG4rXFx0LyogSXQncyBtZWFuaW5nbGVzcyB0byBjb21wYXJlIGdhcCBvbiB1bmtub3duIHNwZWVkIE5JQyAqL1xcbitcXHRpZiAocmF3X3NwZWVkID09ICh1MzIpU1BFRURfVU5LTk9XTilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBTa2lwIHNsYXZlIHdoaWNoIGlzIG92ZXIgbG9hZGVkICovXFxuK1xcdGlmIChzcGVlZCBcXHUwMDNjPSBzbGF2ZV9sb2FkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBzcGVlZCAtIHNsYXZlX2xvYWQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxcbiB7XFxuIFxcdHN0cnVjdCBzbGF2ZSAqc2xhdmUsICpsZWFzdF9sb2FkZWQ7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XFxuLVxcdGxvbmcgbG9uZyBtYXhfZ2FwO1xcbitcXHR1NjQgbWF4X2dhcCA9IDA7XFxuIFxcbiBcXHRsZWFzdF9sb2FkZWQgPSBOVUxMO1xcbi1cXHRtYXhfZ2FwID0gTExPTkdfTUlOO1xcbiBcXG4gXFx0LyogRmluZCB0aGUgc2xhdmUgd2l0aCB0aGUgbGFyZ2VzdCBnYXAgKi9cXG4gXFx0Ym9uZF9mb3JfZWFjaF9zbGF2ZV9yY3UoYm9uZCwgc2xhdmUsIGl0ZXIpIHtcXG4gXFx0XFx0aWYgKGJvbmRfc2xhdmVfY2FuX3R4KHNsYXZlKSkge1xcbi1cXHRcXHRcXHRsb25nIGxvbmcgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpO1xcbitcXHRcXHRcXHR1NjQgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpO1xcbiBcXG4tXFx0XFx0XFx0aWYgKG1heF9nYXAgXFx1MDAzYyBnYXApIHtcXG4rXFx0XFx0XFx0LyogTWFrZSBzdXJlIHdlIGhhdmUgb25lIGF2YWlsYWJsZSBzbGF2ZSAqL1xcbitcXHRcXHRcXHRpZiAobWF4X2dhcCBcXHUwMDNjPSBnYXApIHtcXG4gXFx0XFx0XFx0XFx0bGVhc3RfbG9hZGVkID0gc2xhdmU7XFxuIFxcdFxcdFxcdFxcdG1heF9nYXAgPSBnYXA7XFxuIFxcdFxcdFxcdH1cXG5AQCAtMTM0NCw4ICsxMzY2LDE0IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxcbiBcXHRpZiAoIXR4X3NsYXZlKSB7XFxuIFxcdFxcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cXG4gXFx0XFx0dHhfc2xhdmUgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpO1xcbi1cXHRcXHRpZiAoYm9uZC1cXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKVxcbi1cXHRcXHRcXHRib25kX2luZm8tXFx1MDAzZXVuYmFsYW5jZWRfbG9hZCArPSBza2ItXFx1MDAzZWxlbjtcXG4rXFx0XFx0aWYgKGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbitcXHRcXHRcXHRzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzICpwY3B1X2xvYWQ7XFxuK1xcbitcXHRcXHRcXHRwY3B1X2xvYWQgPSB0aGlzX2NwdV9wdHIoYm9uZF9pbmZvLVxcdTAwM2V1bmJhbGFuY2VkX2xvYWQpO1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZwY3B1X2xvYWQtXFx1MDAzZXN5bmNwKTtcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2cGNwdV9sb2FkLVxcdTAwM2V0eF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cGNwdV9sb2FkLVxcdTAwM2VzeW5jcCk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xcbkBAIC0xNTI5LDYgKzE1NTcsMjkgQEAgbmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuIFxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdTY0IHJlc2V0X3VuYmFsYW5jZWRfbG9hZChzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvKVxcbit7XFxuK1xcdHU2NCBkZWx0YSwgdHhfYnl0ZXMsIHRvdGFsX2J5dGVzID0gMDtcXG4rXFx0c3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyAqcDtcXG4rXFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuK1xcdFxcdHAgPSBwZXJfY3B1X3B0cihib25kX2luZm8tXFx1MDAzZXVuYmFsYW5jZWRfbG9hZCwgaSk7XFxuK1xcdFxcdGRvIHtcXG4rXFx0XFx0XFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXFx1MDAyNnAtXFx1MDAzZXN5bmNwKTtcXG4rXFx0XFx0XFx0dHhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2cC1cXHUwMDNldHhfYnl0ZXMpO1xcbitcXHRcXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXFx1MDAyNnAtXFx1MDAzZXN5bmNwLCBzdGFydCkpO1xcbitcXG4rXFx0XFx0dG90YWxfYnl0ZXMgKz0gdHhfYnl0ZXM7XFxuK1xcdH1cXG4rXFxuK1xcdGRlbHRhID0gdG90YWxfYnl0ZXMgLSBib25kX2luZm8tXFx1MDAzZXByZXZfdG90YWxfdW5iYWxhbmNlZDtcXG4rXFx0Ym9uZF9pbmZvLVxcdTAwM2VwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSB0b3RhbF9ieXRlcztcXG4rXFxuK1xcdHJldHVybiBkaXZfdTY0KGRlbHRhLCBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUwpO1xcbit9XFxuK1xcbiB2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBib25kaW5nICpib25kID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBib25kaW5nLFxcbkBAIC0xNTcxLDEwICsxNjIyLDExIEBAIHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdGJvbmRfZm9yX2VhY2hfc2xhdmVfcmN1KGJvbmQsIHNsYXZlLCBpdGVyKSB7XFxuIFxcdFxcdFxcdHRsYl9jbGVhcl9zbGF2ZShib25kLCBzbGF2ZSwgMSk7XFxuIFxcdFxcdFxcdGlmIChzbGF2ZSA9PSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XFxuLVxcdFxcdFxcdFxcdFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkID1cXG4tXFx0XFx0XFx0XFx0XFx0Ym9uZF9pbmZvLVxcdTAwM2V1bmJhbGFuY2VkX2xvYWQgL1xcbi1cXHRcXHRcXHRcXHRcXHRcXHRCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUw7XFxuLVxcdFxcdFxcdFxcdGJvbmRfaW5mby1cXHUwMDNldW5iYWxhbmNlZF9sb2FkID0gMDtcXG4rXFx0XFx0XFx0XFx0dTY0IG5ld19sb2FkID0gcmVzZXRfdW5iYWxhbmNlZF9sb2FkKGJvbmRfaW5mbyk7XFxuK1xcbitcXHRcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuK1xcdFxcdFxcdFxcdFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkID0gbmV3X2xvYWQ7XFxuK1xcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0YXRvbWljX3NldChcXHUwMDI2Ym9uZF9pbmZvLVxcdTAwM2V0eF9yZWJhbGFuY2VfY291bnRlciwgMCk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmggYi9pbmNsdWRlL25ldC9ib25kX2FsYi5oXFxuaW5kZXggZTU5NDU0MjdmMzhkZC4uMzJmMTk4MTAzM2U0YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9ib25kX2FsYi5oXFxuKysrIGIvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaFxcbkBAIC01NywxMiArNTcsMTIgQEAgc3RydWN0IHRsYl9jbGllbnRfaW5mbyB7XFxuIFxcdFxcdFxcdFxcdCAqIHBhY2tldHMgdG8gYSBDbGllbnQgdGhhdCB0aGUgSGFzaCBmdW5jdGlvblxcbiBcXHRcXHRcXHRcXHQgKiBnYXZlIHRoaXMgZW50cnkgaW5kZXguXFxuIFxcdFxcdFxcdFxcdCAqL1xcbi1cXHR1MzIgdHhfYnl0ZXM7XFx0XFx0LyogRWFjaCBDbGllbnQgYWNjdW11bGF0ZXMgdGhlIEJ5dGVzVHggdGhhdFxcbitcXHR1NjQgdHhfYnl0ZXM7XFx0XFx0LyogRWFjaCBDbGllbnQgYWNjdW11bGF0ZXMgdGhlIEJ5dGVzVHggdGhhdFxcbiBcXHRcXHRcXHRcXHQgKiB3ZXJlIHRyYW5zbWl0dGVkIHRvIGl0LCBhbmQgYWZ0ZXIgZWFjaFxcbiBcXHRcXHRcXHRcXHQgKiBDYWxsQmFjayB0aGUgTG9hZEhpc3RvcnkgaXMgZGl2aWRlZFxcbiBcXHRcXHRcXHRcXHQgKiBieSB0aGUgYmFsYW5jZSBpbnRlcnZhbFxcbiBcXHRcXHRcXHRcXHQgKi9cXG4tXFx0dTMyIGxvYWRfaGlzdG9yeTtcXHQvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXNcXG4rXFx0dTY0IGxvYWRfaGlzdG9yeTtcXHQvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXNcXG4gXFx0XFx0XFx0XFx0ICogdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHRvIHRoaXMgY2xpZW50IGJ5XFxuIFxcdFxcdFxcdFxcdCAqIHRoZSBzZXJ2ZXIgb24gdGhlIHByZXZpb3VzIGJhbGFuY2VcXG4gXFx0XFx0XFx0XFx0ICogaW50ZXJ2YWwgaW4gQnBzLlxcbkBAIC0xMTgsMTQgKzExOCwyMCBAQCBzdHJ1Y3QgdGxiX3NsYXZlX2luZm8ge1xcbiBcXHRcXHRcXHQgKiBhcmUgdGhlIGVudHJpZXMgdGhhdCB3ZXJlIGFzc2lnbmVkIHRvIHVzZSB0aGlzXFxuIFxcdFxcdFxcdCAqIHNsYXZlIGZvciB0cmFuc21pdC5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdHUzMiBsb2FkO1xcdC8qIEVhY2ggc2xhdmUgc3VtcyB0aGUgbG9hZEhpc3Rvcnkgb2YgYWxsIGNsaWVudHNcXG4rXFx0dTY0IGxvYWQ7XFx0LyogRWFjaCBzbGF2ZSBzdW1zIHRoZSBsb2FkSGlzdG9yeSBvZiBhbGwgY2xpZW50c1xcbiBcXHRcXHRcXHQgKiBhc3NpZ25lZCB0byBpdFxcbiBcXHRcXHRcXHQgKi9cXG4gfTtcXG4gXFxuK3N0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMge1xcbitcXHR1NjRfc3RhdHNfdFxcdFxcdHR4X2J5dGVzO1xcbitcXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmNcXHRzeW5jcDtcXG4rfTtcXG4rXFxuIHN0cnVjdCBhbGJfYm9uZF9pbmZvIHtcXG4gXFx0c3RydWN0IHRsYl9jbGllbnRfaW5mb1xcdCp0eF9oYXNodGJsOyAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgKi9cXG4tXFx0dTMyXFx0XFx0XFx0dW5iYWxhbmNlZF9sb2FkO1xcbitcXHRzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzIF9fcGVyY3B1XFx0KnVuYmFsYW5jZWRfbG9hZDtcXG4rXFx0dTY0XFx0XFx0XFx0cHJldl90b3RhbF91bmJhbGFuY2VkO1xcbiBcXHRhdG9taWNfdFxcdFxcdHR4X3JlYmFsYW5jZV9jb3VudGVyO1xcbiBcXHRpbnRcXHRcXHRcXHRscF9jb3VudGVyO1xcbiBcXHQvKiAtLS0tLS0tLSBybGIgcGFyYW1ldGVycyAtLS0tLS0tLSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTo1Ny41MDQzOTkxNjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0ODE2NTgyNzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9hbGJfaW5pdGlhbGl6ZVwiLFxuICAgIFwiYm9uZF9hbGJfZGVpbml0aWFsaXplXCIsXG4gICAgXCJib25kX2FsYl9tb25pdG9yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQiBtb2RlIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHVzZSBwZXJjcHUgc3RhdHMgZm9yIGxvYWQgYmFsYW5jaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBhZmZlY3QgY29yZSBib25kaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOTIyNWQxMjJmY2YyZWE2YTEyZWExZjU3ODE3ZjM4YTMwYTg1ZjdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDY6MDk6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDgzOWY3NDgyZGMxODIuLjM3MmRiNTQ4MDNkMzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTYsNiArNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbkBAIC03NCw4ICs3NSw4IEBAIHN0YXRpYyBpbmxpbmUgdTggX3NpbXBsZV9oYXNoKGNvbnN0IHU4ICpoYXNoX3N0YXJ0LCBpbnQgaGFzaF9zaXplKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfaW5pdF90YWJsZV9lbnRyeShzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvICplbnRyeSwgaW50IHNhdmVfbG9hZClcbiB7XG4gXHRpZiAoc2F2ZV9sb2FkKSB7XG4tXHRcdGVudHJ5LVx1MDAzZWxvYWRfaGlzdG9yeSA9IDEgKyBlbnRyeS1cdTAwM2V0eF9ieXRlcyAvXG4tXHRcdFx0XHQgICAgICBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUw7XG4rXHRcdGVudHJ5LVx1MDAzZWxvYWRfaGlzdG9yeSA9IDEgKyBkaXZfdTY0KGVudHJ5LVx1MDAzZXR4X2J5dGVzLFxuK1x0XHRcdFx0ICAgICAgQk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMKTtcbiBcdFx0ZW50cnktXHUwMDNldHhfYnl0ZXMgPSAwO1xuIFx0fVxuIFxuQEAgLTEzMyw2ICsxMzQsMTAgQEAgc3RhdGljIGludCB0bGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdGlmICghbmV3X2hhc2h0YmwpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuK1x0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCA9IG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKHN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMpO1xuK1x0aWYgKCFib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gXG4gXHRib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCA9IG5ld19oYXNodGJsO1xuQEAgLTE0Myw2ICsxNDgsMTAgQEAgc3RhdGljIGludCB0bGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbiBcbiBcdHJldHVybiAwO1xuK1xuK291dDpcbitcdGtmcmVlKG5ld19oYXNodGJsKTtcbitcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbiAvKiBNdXN0IGJlIGNhbGxlZCBvbmx5IGFmdGVyIGFsbCBzbGF2ZXMgaGF2ZSBiZWVuIHJlbGVhc2VkICovXG5AQCAtMTU0LDMxICsxNjMsNDQgQEAgc3RhdGljIHZvaWQgdGxiX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcbiBcdGtmcmVlKGJvbmRfaW5mby1cdTAwM2V0eF9oYXNodGJsKTtcbiBcdGJvbmRfaW5mby1cdTAwM2V0eF9oYXNodGJsID0gTlVMTDtcbitcdGZyZWVfcGVyY3B1KGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQpO1xuK1x0Ym9uZF9pbmZvLVx1MDAzZXByZXZfdG90YWxfdW5iYWxhbmNlZCA9IDA7XG4gXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gfVxuIFxuLXN0YXRpYyBsb25nIGxvbmcgY29tcHV0ZV9nYXAoc3RydWN0IHNsYXZlICpzbGF2ZSlcbitzdGF0aWMgdTY0IGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4ge1xuLVx0cmV0dXJuIChzNjQpIChzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi9cbi1cdCAgICAgICAoczY0KSAoU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXHUwMDNjXHUwMDNjIDMpOyAvKiBCeXRlcyB0byBiaXRzICovXG4rXHR1NjQgc2xhdmVfbG9hZCA9IFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkIFx1MDAzY1x1MDAzYyAzOyAvKiBCeXRlcyB0byBiaXRzICovXG4rXHR1MzIgcmF3X3NwZWVkID0gUkVBRF9PTkNFKHNsYXZlLVx1MDAzZXNwZWVkKTtcbitcdHU2NCBzcGVlZCA9ICh1NjQpcmF3X3NwZWVkIFx1MDAzY1x1MDAzYyAyMDsgLyogQ29udmVydCB0byBiaXRzIHBlciBzZWMgKi9cbitcbitcdC8qIEl0J3MgbWVhbmluZ2xlc3MgdG8gY29tcGFyZSBnYXAgb24gdW5rbm93biBzcGVlZCBOSUMgKi9cbitcdGlmIChyYXdfc3BlZWQgPT0gKHUzMilTUEVFRF9VTktOT1dOKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFNraXAgc2xhdmUgd2hpY2ggaXMgb3ZlciBsb2FkZWQgKi9cbitcdGlmIChzcGVlZCBcdTAwM2M9IHNsYXZlX2xvYWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHNwZWVkIC0gc2xhdmVfbG9hZDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4ge1xuIFx0c3RydWN0IHNsYXZlICpzbGF2ZSwgKmxlYXN0X2xvYWRlZDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4tXHRsb25nIGxvbmcgbWF4X2dhcDtcbitcdHU2NCBtYXhfZ2FwID0gMDtcbiBcbiBcdGxlYXN0X2xvYWRlZCA9IE5VTEw7XG4tXHRtYXhfZ2FwID0gTExPTkdfTUlOO1xuIFxuIFx0LyogRmluZCB0aGUgc2xhdmUgd2l0aCB0aGUgbGFyZ2VzdCBnYXAgKi9cbiBcdGJvbmRfZm9yX2VhY2hfc2xhdmVfcmN1KGJvbmQsIHNsYXZlLCBpdGVyKSB7XG4gXHRcdGlmIChib25kX3NsYXZlX2Nhbl90eChzbGF2ZSkpIHtcbi1cdFx0XHRsb25nIGxvbmcgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpO1xuK1x0XHRcdHU2NCBnYXAgPSBjb21wdXRlX2dhcChzbGF2ZSk7XG4gXG4tXHRcdFx0aWYgKG1heF9nYXAgXHUwMDNjIGdhcCkge1xuK1x0XHRcdC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIG9uZSBhdmFpbGFibGUgc2xhdmUgKi9cbitcdFx0XHRpZiAobWF4X2dhcCBcdTAwM2M9IGdhcCkge1xuIFx0XHRcdFx0bGVhc3RfbG9hZGVkID0gc2xhdmU7XG4gXHRcdFx0XHRtYXhfZ2FwID0gZ2FwO1xuIFx0XHRcdH1cbkBAIC0xMzQ0LDggKzEzNjYsMTQgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHRpZiAoIXR4X3NsYXZlKSB7XG4gXHRcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cbiBcdFx0dHhfc2xhdmUgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSk7XG4tXHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYilcbi1cdFx0XHRib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkICs9IHNrYi1cdTAwM2VsZW47XG4rXHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xuK1x0XHRcdHN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgKnBjcHVfbG9hZDtcbitcbitcdFx0XHRwY3B1X2xvYWQgPSB0aGlzX2NwdV9wdHIoYm9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCk7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZwY3B1X2xvYWQtXHUwMDNlc3luY3ApO1xuK1x0XHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2cGNwdV9sb2FkLVx1MDAzZXR4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZwY3B1X2xvYWQtXHUwMDNlc3luY3ApO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xuQEAgLTE1MjksNiArMTU1NywyOSBAQCBuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbiBcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuIH1cbiBcbitzdGF0aWMgdTY0IHJlc2V0X3VuYmFsYW5jZWRfbG9hZChzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvKVxuK3tcbitcdHU2NCBkZWx0YSwgdHhfYnl0ZXMsIHRvdGFsX2J5dGVzID0gMDtcbitcdHN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMgKnA7XG4rXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4rXHRpbnQgaTtcbitcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG4rXHRcdHAgPSBwZXJfY3B1X3B0cihib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkLCBpKTtcbitcdFx0ZG8ge1xuK1x0XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnAtXHUwMDNlc3luY3ApO1xuK1x0XHRcdHR4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2cC1cdTAwM2V0eF9ieXRlcyk7XG4rXHRcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZwLVx1MDAzZXN5bmNwLCBzdGFydCkpO1xuK1xuK1x0XHR0b3RhbF9ieXRlcyArPSB0eF9ieXRlcztcbitcdH1cbitcbitcdGRlbHRhID0gdG90YWxfYnl0ZXMgLSBib25kX2luZm8tXHUwMDNlcHJldl90b3RhbF91bmJhbGFuY2VkO1xuK1x0Ym9uZF9pbmZvLVx1MDAzZXByZXZfdG90YWxfdW5iYWxhbmNlZCA9IHRvdGFsX2J5dGVzO1xuK1xuK1x0cmV0dXJuIGRpdl91NjQoZGVsdGEsIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTCk7XG4rfVxuK1xuIHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJvbmRpbmcsXG5AQCAtMTU3MSwxMCArMTYyMiwxMSBAQCB2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xuIFx0XHRcdHRsYl9jbGVhcl9zbGF2ZShib25kLCBzbGF2ZSwgMSk7XG4gXHRcdFx0aWYgKHNsYXZlID09IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKSkge1xuLVx0XHRcdFx0U0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgPVxuLVx0XHRcdFx0XHRib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkIC9cbi1cdFx0XHRcdFx0XHRCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUw7XG4tXHRcdFx0XHRib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkID0gMDtcbitcdFx0XHRcdHU2NCBuZXdfbG9hZCA9IHJlc2V0X3VuYmFsYW5jZWRfbG9hZChib25kX2luZm8pO1xuK1xuK1x0XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbitcdFx0XHRcdFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkID0gbmV3X2xvYWQ7XG4rXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGF0b21pY19zZXQoXHUwMDI2Ym9uZF9pbmZvLVx1MDAzZXR4X3JlYmFsYW5jZV9jb3VudGVyLCAwKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ib25kX2FsYi5oIGIvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaFxuaW5kZXggZTU5NDU0MjdmMzhkZC4uMzJmMTk4MTAzM2U0YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmhcbisrKyBiL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmhcbkBAIC01NywxMiArNTcsMTIgQEAgc3RydWN0IHRsYl9jbGllbnRfaW5mbyB7XG4gXHRcdFx0XHQgKiBwYWNrZXRzIHRvIGEgQ2xpZW50IHRoYXQgdGhlIEhhc2ggZnVuY3Rpb25cbiBcdFx0XHRcdCAqIGdhdmUgdGhpcyBlbnRyeSBpbmRleC5cbiBcdFx0XHRcdCAqL1xuLVx0dTMyIHR4X2J5dGVzO1x0XHQvKiBFYWNoIENsaWVudCBhY2N1bXVsYXRlcyB0aGUgQnl0ZXNUeCB0aGF0XG4rXHR1NjQgdHhfYnl0ZXM7XHRcdC8qIEVhY2ggQ2xpZW50IGFjY3VtdWxhdGVzIHRoZSBCeXRlc1R4IHRoYXRcbiBcdFx0XHRcdCAqIHdlcmUgdHJhbnNtaXR0ZWQgdG8gaXQsIGFuZCBhZnRlciBlYWNoXG4gXHRcdFx0XHQgKiBDYWxsQmFjayB0aGUgTG9hZEhpc3RvcnkgaXMgZGl2aWRlZFxuIFx0XHRcdFx0ICogYnkgdGhlIGJhbGFuY2UgaW50ZXJ2YWxcbiBcdFx0XHRcdCAqL1xuLVx0dTMyIGxvYWRfaGlzdG9yeTtcdC8qIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIGFtb3VudCBvZiBCeXRlc1xuK1x0dTY0IGxvYWRfaGlzdG9yeTtcdC8qIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIGFtb3VudCBvZiBCeXRlc1xuIFx0XHRcdFx0ICogdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHRvIHRoaXMgY2xpZW50IGJ5XG4gXHRcdFx0XHQgKiB0aGUgc2VydmVyIG9uIHRoZSBwcmV2aW91cyBiYWxhbmNlXG4gXHRcdFx0XHQgKiBpbnRlcnZhbCBpbiBCcHMuXG5AQCAtMTE4LDE0ICsxMTgsMjAgQEAgc3RydWN0IHRsYl9zbGF2ZV9pbmZvIHtcbiBcdFx0XHQgKiBhcmUgdGhlIGVudHJpZXMgdGhhdCB3ZXJlIGFzc2lnbmVkIHRvIHVzZSB0aGlzXG4gXHRcdFx0ICogc2xhdmUgZm9yIHRyYW5zbWl0LlxuIFx0XHRcdCAqL1xuLVx0dTMyIGxvYWQ7XHQvKiBFYWNoIHNsYXZlIHN1bXMgdGhlIGxvYWRIaXN0b3J5IG9mIGFsbCBjbGllbnRzXG4rXHR1NjQgbG9hZDtcdC8qIEVhY2ggc2xhdmUgc3VtcyB0aGUgbG9hZEhpc3Rvcnkgb2YgYWxsIGNsaWVudHNcbiBcdFx0XHQgKiBhc3NpZ25lZCB0byBpdFxuIFx0XHRcdCAqL1xuIH07XG4gXG4rc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyB7XG4rXHR1NjRfc3RhdHNfdFx0XHR0eF9ieXRlcztcbitcdHN0cnVjdCB1NjRfc3RhdHNfc3luY1x0c3luY3A7XG4rfTtcbitcbiBzdHJ1Y3QgYWxiX2JvbmRfaW5mbyB7XG4gXHRzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvXHQqdHhfaGFzaHRibDsgLyogRHluYW1pY2FsbHkgYWxsb2NhdGVkICovXG4tXHR1MzJcdFx0XHR1bmJhbGFuY2VkX2xvYWQ7XG4rXHRzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzIF9fcGVyY3B1XHQqdW5iYWxhbmNlZF9sb2FkO1xuK1x0dTY0XHRcdFx0cHJldl90b3RhbF91bmJhbGFuY2VkO1xuIFx0YXRvbWljX3RcdFx0dHhfcmViYWxhbmNlX2NvdW50ZXI7XG4gXHRpbnRcdFx0XHRscF9jb3VudGVyO1xuIFx0LyogLS0tLS0tLS0gcmxiIHBhcmFtZXRlcnMgLS0tLS0tLS0gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjU3LjUwNDQwMDc3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2OTk0MTQzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJvbmRpbmcgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBkaWdnaW5nIGludG8gdGhlIGd1dHMgb2YgdGhlIG5ldHdvcmsgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgQUxCIChBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZykgbW9kZS4gTG9va3MgbGlrZSB0aGV5J3JlIGFkZHJlc3Npbmcgc29tZSBrZXkgaXNzdWVzIHJlbGF0ZWQgdG8gaW50ZWdlciBvdmVyZmxvd3MsIHdoaWNoIGlzIGFsd2F5cyBnb29kIHRvIHNlZSwgZXNwZWNpYWxseSBpbiBzb21ldGhpbmcgdGhhdCdzIHBvdGVudGlhbGx5IGhhbmRsaW5nIHNpZ25pZmljYW50IG5ldHdvcmsgdHJhZmZpYy5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBidW1waW5nIHVwIHRoZSBzaXplIG9mIHZhcmlvdXMgY291bnRlcnMgYW5kIGxvYWQgaW5kaWNhdG9ycyBmcm9tIGB1MzJgIHRvIGB1NjRgLiBJIHNlZSBpdCBpbiBgdHhfYnl0ZXNgLCBgbG9hZF9oaXN0b3J5YCwgYW5kIGBsb2FkYCB3aXRoaW4gdGhlIGB0bGJfY2xpZW50X2luZm9gIGFuZCBgdGxiX3NsYXZlX2luZm9gIHN0cnVjdHMuIE1ha2VzIHNlbnNlIOKAkyBwcmV2ZW50IG92ZXJmbG93cywgZXNwZWNpYWxseSBvbiBoaWdoLWJhbmR3aWR0aCBsaW5rcy4gVGhlIGludHJvZHVjdGlvbiBvZiBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgYW5kIHRoZSBtb3ZlIHRvIHBlcmNwdSBzdGF0cyBmb3IgYHVuYmFsYW5jZWRfbG9hZGAgd2l0aGluIGBzdHJ1Y3QgYWxiX2JvbmRfaW5mb2AgaXMgc21hcnQuIFVzaW5nIGB1NjRfc3RhdHNfdGAgd2l0aCBzeW5jaHJvbml6YXRpb24gZW5zdXJlcyBhdG9taWMgdXBkYXRlcywgYW5kIHRoZSBwZXJjcHUgYXNwZWN0IGlzIGEgY2xldmVyIHdheSB0byBhdm9pZCB0aG9zZSBuYXN0eSBjYWNoZSBsaW5lIGJvdW5jZXMgb3IgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgY29tZSB1cCB3aXRoIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgQ1BVcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBZZWFoLCBJIHRoaW5rIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQuXG5cblRoZXkndmUgY2xlYXJseSBnb25lIHRocm91Z2ggdGhlIGNvZGUgYW5kIHVwZGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHRsYl9pbml0aWFsaXplYCwgYHRsYl9kZWluaXRpYWxpemVgLCBgY29tcHV0ZV9nYXBgLCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLCBgYm9uZF9kb19hbGJfeG1pdGAsIGByZXNldF91bmJhbGFuY2VkX2xvYWRgLCBhbmQgYGJvbmRfYWxiX21vbml0b3JgIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIGB1NjRgIGRhdGEgdHlwZXMgYW5kIHRoZSBwZXJjcHUgc3RhdHMuIFRoYXQncyBhIGdvb2QgdGhvcm91Z2huZXNzLlxuXG5JIGFsc28gc2VlIHRoYXQgdGhleSdyZSBjb3JyZWN0bHkgaGFuZGxpbmcgYFNQRUVEX1VOS05PV05gIGFuZCBvdmVybG9hZGVkIHNsYXZlcyBpbiB0aGUgYGNvbXB1dGVfZ2FwYCBmdW5jdGlvbi4gRXhjZWxsZW50OyBjb3JuZXIgY2FzZXMgYXJlIGltcG9ydGFudC5cblxuTm93LCBJIHRoaW5rIEknbGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYm9uZGluZyB0byBjb25maXJtIHRoZSBkcml2ZXIncyBhdmFpbGFiaWxpdHkgYW5kIGFueSBkZXBlbmRlbmNpZXMuIFRoYXQncyBzb21ldGhpbmcgSSBhbHdheXMgZG8gd2hlbiByZXZpZXdpbmcgdGhpcyBraW5kIG9mIGNoYW5nZS4gT3ZlcmFsbCwgdGhpcyBzZWVtcyBsaWtlIGEgd2VsbC1jb25zaWRlcmVkIGFuZCBuZWNlc3NhcnkgcGF0Y2guIEl0J3MgYSBzb2xpZCBmaXggZm9yIHBvdGVudGlhbCBwcm9ibGVtcyBhbmQgaW1wcm92ZXMgdGhlIHJvYnVzdG5lc3MgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBBTEIgYm9uZGluZyBtb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzg5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MDQuMjAzODE4MTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTc5OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQxOmNvbmZpZyBCT05ESU5HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiQm9uZGluZyBkcml2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MDQuMzg4NDA4ODg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyNTQ5NTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBCb25kaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBJJ20gd29ya2luZyB3aXRoIGlzIGBCT05ESU5HYC4gTXkgZ29hbCBub3cgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgaXQgbG9va3MgbGlrZTogYHRsYl9pbml0X3RhYmxlX2VudHJ5YCAoc3RhdGljIGlubGluZSksIGB0bGJfaW5pdGlhbGl6ZWAgKHN0YXRpYyksIGB0bGJfZGVpbml0aWFsaXplYCAoc3RhdGljKSwgYGNvbXB1dGVfZ2FwYCAoc3RhdGljKSwgYHRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlYCAoc3RhdGljKSwgYGJvbmRfZG9fYWxiX3htaXRgIChzdGF0aWMpLCBgYm9uZF9hbGJfeG1pdGAgKG5vbi1zdGF0aWMpLCBgcmVzZXRfdW5iYWxhbmNlZF9sb2FkYCAoc3RhdGljKSwgYW5kIGBib25kX2FsYl9tb25pdG9yYCAobm9uLXN0YXRpYykuXG5cblRoaW5raW5nIHN0cmF0ZWdpY2FsbHksIGBib25kX2FsYl94bWl0YCBpcyBjbGVhcmx5IGEgaG90LXBhdGggZnVuY3Rpb24sIHBhcnQgb2YgdGhlIHRyYW5zbWl0IHBhdGgsIHNvIHRoYXQncyBhIHByaW1lIGNhbmRpZGF0ZS4gVGhlbiwgYGJvbmRfYWxiX21vbml0b3JgIGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uLCBtZWFuaW5nIGl0IGhhbmRsZXMgYmFja2dyb3VuZCB0YXNrcyBvciBtb25pdG9yaW5nLCBhbHNvIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLiBJIGFsc28gbm90ZSB0aGF0IGB0bGJfaW5pdGlhbGl6ZWAgZ2V0cyBjYWxsZWQgZHVyaW5nIHRoZSBib25kaW5nIHNldHVwIHByb2Nlc3MsIHdoaWNoIGNvdWxkIHJldmVhbCBpbnRlcmVzdGluZyBidWdzLlxuXG5HaXZlbiB0aGVzZSBjb25zaWRlcmF0aW9ucywgSSB0aGluayBJJ2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBib25kX2FsYl9tb25pdG9yYCBhbmQgYGJvbmRfYWxiX3htaXRgIGZvciBhIGNsb3NlciBsb29rLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgZnJ1aXRmdWwgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MDguOTEzOTA2NjU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzMwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvbmRfYWxiX21vbml0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE1NjA9c3RhdGljIHU2NCByZXNldF91bmJhbGFuY2VkX2xvYWQoc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTgyLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNTgzOnZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1ODQte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzIwPXZvaWQgYm9uZF93b3JrX2luaXRfYWxsKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzI3LVxcdFxcdFxcdCAgYm9uZF9yZXNlbmRfaWdtcF9qb2luX3JlcXVlc3RzX2RlbGF5ZWQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDMyODpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2Ym9uZC1cXHUwMDNlYWxiX3dvcmssIGJvbmRfYWxiX21vbml0b3IpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMyOS1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2Ym9uZC1cXHUwMDNlbWlpX3dvcmssIGJvbmRfbWlpX21vbml0b3IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDowOC45NTg2NDI3ODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ0NzIwNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIEJvbmQgQUxCIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGJvbmRfYWxiX21vbml0b3JgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBhIHByb21pc2luZyB0YXJnZXQgZm9yIGZ1enppbmcsIGV2ZW4gdGhvdWdoIGl0J3MgcGFydCBvZiBhIHdvcmtxdWV1ZS4gVGhhdCdzIGEgYml0IG9mIGEgd3JpbmtsZSwgYnV0IHBvdGVudGlhbGx5IHN0aWxsIGV4cGxvaXRhYmxlLiBUaGVuIHRoZXJlJ3MgYGJvbmRfYWxiX3htaXRgLCB3aGljaCBpcyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24sIHNvIHRoYXQncyBkZWZpbml0ZWx5IHdvcnRoIGEgbG9vayB0b28uIEhtbSwgbGV0IG1lIGRpZyBhcm91bmQgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcuIEFoLCBoZXJlJ3MgYGJvbmRfYWxiX2luaXRpYWxpemVgLCBhbmQgaXQgY2FsbHMgYHRsYl9pbml0aWFsaXplYC4gVGhhdCBtaWdodCBwcm92aWRlIHNvbWUgaW50ZXJlc3RpbmcgYXR0YWNrIHN1cmZhY2UgYXMgd2VsbC4gVGltZSB0byBzdGFydCBtYXBwaW5nIG91dCB0aGUgY2FsbGluZyByZWxhdGlvbnNoaXBzIGFuZCB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3dzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MTIuMjAzMzY3NzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDE2NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvbmRfYWxiX2luaXRpYWxpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTEzMDY9c3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzI3LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzI4OmludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMjkte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzQ3PXN0YXRpYyBpbnQgYm9uZF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDM3My1cXHRpZiAoYm9uZF9pc19sYihib25kKSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDM3NDpcXHRcXHQvKiBib25kX2FsYl9pbml0aWFsaXplIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgdGltZXJcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzUtXFx0XFx0ICogaXMgc3RhcnRlZC5cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzYtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0Mzc3OlxcdFxcdGlmIChib25kX2FsYl9pbml0aWFsaXplKGJvbmQsIChCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0FMQikpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDM3OC1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MTIuMjU2NDEzOTQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc2NDYzNDk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQm9uZGluZyBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBib25kaW5nIGRyaXZlci4gRnJvbSB3aGF0IEkgc2VlLCBgYm9uZF9hbGJfaW5pdGlhbGl6ZWAgYW5kIGBib25kX2FsYl9kZWluaXRpYWxpemVgIGFyZSBjcml0aWNhbCwgYXMgdGhleSdyZSBkaXJlY3RseSBsaW5rZWQgdG8gdGhlIG9wZW5pbmcgYW5kIGNsb3Npbmcgb2YgdGhlIGJvbmRpbmcgaW50ZXJmYWNlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYSBmZXcga2V5IGZ1bmN0aW9uczogYGJvbmRfYWxiX3htaXRgLCBgYm9uZF9hbGJfbW9uaXRvcmAsIGB0bGJfaW5pdGlhbGl6ZWAsIGFuZCBgdGxiX2RlaW5pdGlhbGl6ZWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgbWF5YmUgaW5jbHVkaW5nIGBib25kX2FsYl94bWl0YCwgZXZlbiB0aG91Z2ggaXQncyBsaWtlbHkgYSBob3QtcGF0aCwgYnV0IGFmdGVyIGZ1cnRoZXIgY29uc2lkZXJhdGlvbiwgaXQgc2VlbXMgdGhlcmUncyBhIGJldHRlciBhcHByb2FjaC4gSSBoYXZlIHRvIGtlZXAgaW4gbWluZCB0aGF0IGBib25kX2FsYl94bWl0YCBpcyB3aGVyZSBgYm9uZF9kb19hbGJfeG1pdGAgaXMgY2FsbGVkLCBhbmQgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCB1cGRhdGVzIHBlcmNwdSBzdGF0cy4gTm93LCBgYm9uZF9hbGJfbW9uaXRvcmAgcmVhZHMgdGhvc2Ugc2FtZSBwZXJjcHUgc3RhdHMsIHNvIHRoYXQgbG9va3MgbGlrZSBhIHZlcnkgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIGBib25kX2FsYl9pbml0aWFsaXplYCBpcyBnb29kIHRvby5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYm9uZF9hbGJfeG1pdGAgaXNuJ3QgKnRvbyogaG90LiBZZXMsIGl0J3MgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZm9yIEFMQiBtb2RlIGFuZCwgaW5kZWVkLCBpdCdzIHZlcnkgaG90ISBIb3dldmVyLCBgYm9uZF9hbGJfbW9uaXRvcmAgaXMgYSBkZWxheWVkIHdvcmsgZnVuY3Rpb24uIFRoYXTigJlzIGEgaHVnZSBwbHVzLlxuXG5MZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlIHNpZ25hdHVyZSBvZiBgYm9uZF9hbGJfbW9uaXRvcmA6IGB2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKWAuXG5cbk9rYXksIGRvdWJsZS1jaGVja2luZyBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG1vZGlmaWVkLCBJIHNlZSB0aGF0IGl0J3MgYGJvbmRfYWxiX3htaXRgIGFuZCBgYm9uZF9hbGJfbW9uaXRvcmAgb25seS5cblxuU28sIHRvIHN1bW1hcml6ZSwgYGJvbmRfYWxiX21vbml0b3JgIGFuZCBgYm9uZF9hbGJfaW5pdGlhbGl6ZWAgKHdoaWNoIGluY2x1ZGVzIGB0bGJfaW5pdGlhbGl6ZWApIGFyZSB0aGUgbW9zdCBwcm9taXNpbmcgb25lcyB0byBmb2N1cyBvbi4gSSB3aWxsIGFsc28gY2hlY2sgYGJvbmRfYWxiX2RlaW5pdGAganVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzU0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjE4LjAyMTA1MTYxMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MzU4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9uZF9hbGJfZGVpbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzI4PWludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM0OS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTM1MDp2b2lkIGJvbmRfYWxiX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM1MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTY4OD1pbnQgYm9uZF9hbGJfaW5pdF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzE3LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNzE4OnZvaWQgYm9uZF9hbGJfZGVpbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTI1MTYtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNTE3OlxcdFxcdGJvbmRfYWxiX2RlaW5pdF9zbGF2ZShib25kLCBzbGF2ZSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTE4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDQxMD1zdGF0aWMgaW50IGJvbmRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NDIyLVxcdGlmIChib25kX2lzX2xiKGJvbmQpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDQyMzpcXHRcXHRib25kX2FsYl9kZWluaXRpYWxpemUoYm9uZCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NDI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDoxOC4wNjc0OTIyN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzcxODA5OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW5pdGlhbCBUaG91Z2h0cyBvbiBCb25kaW5nIE1vZHVsZSBJbml0aWFsaXphdGlvbiBhbmQgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGNvcmUgYm9uZGluZyBtb2R1bGUgZnVuY3Rpb25zLiBXZSBoYXZlIGBib25kX2FsYl9pbml0aWFsaXplYCwgYGJvbmRfYWxiX2RlaW5pdGlhbGl6ZWAsIGFuZCBgYm9uZF9hbGJfbW9uaXRvcmAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIGJyaW5naW5nIGEgYm9uZGluZyBpbnRlcmZhY2Ugb25saW5lLCBzaHV0dGluZyBpdCBkb3duIGNsZWFubHksIGFuZCBrZWVwaW5nIGFuIGV5ZSBvbiBpdHMgc3RhdHVzLCByZXNwZWN0aXZlbHkuIFNlZW1zIGxpa2UgYSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiwgZGUtaW5pdGlhbGl6YXRpb24sIGFuZCBtb25pdG9yaW5nIHNldHVwIGZvciBhbiBhY3RpdmUvcGFzc2l2ZSBib25kLCBwb3RlbnRpYWxseSBBTEIgKGFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nKSwgdGhvdWdoIHRoZSBuYW1pbmcgY29udmVudGlvbiBjb3VsZCBiZSBiZXR0ZXIuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gYW55dGhpbmcgZGVlcGVyLCBsZXQncyBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRob3NlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBXZSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgdGhlIGBCT05ESU5HYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBwcm9wZXJseSBzZXQgYW5kIGFsbCB0aGUgcHJlcmVxdWlzaXRlIGZsYWdzIGFyZSBtZXQuIE5vIHBvaW50IGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSB0cm91Ymxlc2hvb3RpbmcgaWYgdGhlIG1vZHVsZSBpc24ndCBldmVuIGNvbXBpbGVkIGluISBDaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBiZWZvcmUgZ2V0dGluZyBhbnkgZGVlcGVyIGludG8gdGhlIGNvZGUuIEdvdHRhIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgdGhlIHJpZ2h0IHNldHRpbmdzIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAyMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjIxLjgzOTMwNTY5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1ODk1Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQxOmNvbmZpZyBCT05ESU5HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiQm9uZGluZyBkcml2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MjEuOTY1MjA3MjE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzA3NDYwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06XG5cbioqQ2hlY2tpbmcgdGhlIGBORVRfQ09SRWAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYE5FVF9DT1JFYCBhY3R1YWxseSAqaXMqIHdpdGhpbiB0aGlzIGJ1aWxkIHN5c3RlbS4gSXMgaXQgYSBmdWxsLWJsb3duIGBtZW51Y29uZmlnYCBvcHRpb24sIG9mZmVyaW5nIHZhcmlvdXMgc3ViLXNlbGVjdGlvbnMgYW5kIGRlcGVuZGVuY2llcz8gT3IgaXMgaXQgc2ltcGx5IGEgYm9vbGVhbiwgYSB5ZXMvbm8gZmxhZyB0aGF0IGFjdGl2YXRlcyBvciBkZWFjdGl2YXRlcyBzb21lIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHk/IFRoZSBhbnN3ZXIgZGljdGF0ZXMgaG93IEkgbmVlZCB0byBhcHByb2FjaCBhbnkgZnVydGhlciBhbmFseXNpcyBvciBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgZGV0ZXJtaW5lIGl0cyBleGFjdCBuYXR1cmUuIExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzOTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDoyNC44OTU5NTYyMTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTM1OTg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mjk9Y29uZmlnIE1JSVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMyOmNvbmZpZyBORVRfQ09SRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjI1LjA0NzMyMTE0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjI3NDE2MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gYE5FVF9DT1JFYCBpcyB0aGUgZGVmYXVsdCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIFRoYXQgbWVhbnMgSSBqdXN0IG5lZWQgdG8gZm9jdXMgb24gdGhlIGBCT05ESU5HYCBjb25maWcuIE5vIG90aGVyIGNvbmZpZ3Mgc2VlbSByZWxldmFudCBhdCBmaXJzdCBnbGFuY2UuXG5cbkxldCdzIGRpZyBpbiBhIGJpdC4gVGhlIHBhdGNoIGxldmVyYWdlcyBzb21lIHN0YW5kYXJkIGtlcm5lbCBBUElzOiBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNgLCBhbmQgYWxsIHRob3NlIGB1NjRfc3RhdHNfKmAgZnVuY3Rpb25zLiBOb3RoaW5nIHVudXN1YWwgdGhlcmUsIGFuZCB0aGF0J3MgZ29vZC5cblxuUmlnaHQsIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzIGFyZSB3aXRoaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIHNvbWUgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHN3aXRjaGluZyB0byBwZXJjcHUgc3RhdHMgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBGdW5jdGlvbmFsbHksIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50IGFuZCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBQZXItQ1BVIHN0YXRzIGFyZSBhbHdheXMgYW4gaW50ZXJlc3RpbmcgYXJlYSB0byB0ZXN0LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGxvYWQgYmFsYW5jaW5nLlxuXG5NeSBrZXkgZm9jdXMgc2hvdWxkIGJlIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGJvbmRfYWxiX2luaXRpYWxpemVgLCBgYm9uZF9hbGJfZGVpbml0aWFsaXplYCwgYW5kIGBib25kX2FsYl9tb25pdG9yYC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aXRoaW4gdGhlIGJvbmRpbmcgY29udGV4dC5cblxuQW5kIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIGBib25kX2FsYl9tb25pdG9yYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGxpa2VseS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGhvdyBpdCdzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY0OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDozMy42NzQ3NDA2NTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzMxNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgYm9uZF9hbGJfbW9uaXRvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTU2MD1zdGF0aWMgdTY0IHJlc2V0X3VuYmFsYW5jZWRfbG9hZChzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1ODItXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1ODM6dm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTU4NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjMzLjcxODA3NTcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Nzk1MTc5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZy4uLiB0aGlzIGlzbid0IGEgZml4ZWQgc3RhdGUuIFRoZSBzaXR1YXRpb24gaXMgaW5oZXJlbnRseSBkeW5hbWljLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBwcm9jZXNzIHRoaXMuIEkgY2FuJ3QgdHJlYXQgaXQgYXMgYSBjb25zdGFudC5cblxuQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgc2hvdWxkIHJlLWV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgYm9uZF9hbGJfaW5pdGlhbGl6ZWAgZnVuY3Rpb24uIEl0J3MgdGhlIGx5bmNocGluIG9mIHRoZSB0aGluZywgYW5kIG5lZWRzIHRvIGJlIHJvY2sgc29saWQgdG8gYmUgc3VyZSBub3RoaW5nIGVsc2UgaXMgZ29pbmcgb24uIExldCdzIG1ha2Ugc3VyZSBpdCdzIGRvaW5nIGV4YWN0bHkgd2hhdCBJIGV4cGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjM2LjY5NzU5NjAxM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MDMxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGJvbmRfYWxiX2luaXRpYWxpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTEzMDY9c3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzI3LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzI4OmludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMjkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDozNi43NDIyMDYwNTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MTM1MTAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBEeW5hbWljcyBvZiB0aGUgU3lzdGVtKipcblxuUmlnaHQsIHRoaXMgaXNuJ3QgYSBmaXhlZCBzaXR1YXRpb247IGl0J3MgZHluYW1pYy4gVGhpbmdzIGFyZSBpbiBmbHV4LiBCZWZvcmUgSSBwcm9jZWVkLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2Ygc29tZXRoaW5nIGNyaXRpY2FsOiBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGJvbmRfYWxiX2RlaW5pdGlhbGl6ZWAgZnVuY3Rpb24uIEl0J3Mgb2Z0ZW4gdGhlIGx5bmNocGluIGluIHRoZXNlIGtpbmRzIG9mIHN5c3RlbSByZXNldHMsIHNvIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGxvZ2ljIGFuZCBlbnN1cmUgaXQncyBiZWhhdmluZyBhcyBleHBlY3RlZC4gTm8gYXNzdW1wdGlvbnMgaGVyZSwganVzdCBzb2xpZCB2ZXJpZmljYXRpb24gYmVmb3JlIG1vdmluZyBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjE1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MzkuODIzNTYwMzQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY0Mjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGJvbmRfYWxiX2RlaW5pdGlhbGl6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTMyOD1pbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNDktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzNTA6dm9pZCBib25kX2FsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDozOS44NjkyMDg3MzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcxOTAwMjA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCb25kaW5nIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJ3QganVzdCBjb3NtZXRpYzsgaXQncyBnb3Qgc29tZSByZWFsIHRlZXRoIHRvIGl0LiBJIHNlZSB0aGV5J3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBpbiB0aGUgYm9uZGluZyBkcml2ZXIncyBBTEIgbW9kZS4gQ2xldmVyIG1vdmUsIGNoYW5naW5nIGB0eF9ieXRlc2AgYW5kIGBsb2FkX2hpc3RvcnlgIHRvIGB1NjRgLiBUaGF0J2xsIGdpdmUgdGhlbSBlbm91Z2ggaGVhZHJvb20gdG8gcHJldmVudCB0aG9zZSBuYXN0eSByb2xsb3ZlcnMsIHdoaWNoIGNvdWxkIHdyZWFrIGhhdm9jIG9uIGxvYWQgYmFsYW5jaW5nIGNhbGN1bGF0aW9ucy4gQW5kIHRoZSBwZXJjcHUgc3RhdHMgZm9yIGB1bmJhbGFuY2VkX2xvYWRgPyBFeGNlbGxlbnQuIFRoYXQgY29tcGxldGVseSBzaWRlc3RlcHMgdGhlIHJhY2UgY29uZGl0aW9ucyBhbmQgY2FjaGUgbGluZSBib3VuY2luZyBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgdG8gc2VlLlxuXG5UaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0LCB3aGlsZSBzZWVtaW5nbHkgdGFyZ2V0ZWQsIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgc2lnbmlmaWNhbnQgZ2l2ZW4gdGhlIHByZXZhbGVuY2Ugb2YgdGhvc2Ugc2V0dXBzLiBJdCdzIHRvdWNoaW5nIGNvcmUgYm9uZGluZyBsb2dpYywgd2hpY2ggbWVhbnMgaXQgY291bGQgcG90ZW50aWFsbHkgaW1wYWN0IGEgd2lkZSByYW5nZSBvZiBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBHaXZlbiB0aGUgZnVuY3Rpb25hbCBhbmQgaW1wYWN0ZnVsIG5hdHVyZSBvZiB0aGUgcGF0Y2ggSSB3b3VsZCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBBbmQgdGhlIGBGb2N1c1N5bWJvbHNgIHRoZXkndmUgaWRlbnRpZmllZCDigJMgYGJvbmRfYWxiX2luaXRpYWxpemVgLCBgYm9uZF9hbGJfZGVpbml0aWFsaXplYCwgYW5kIGBib25kX2FsYl9tb25pdG9yYCDigJMgdGhvc2UgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgdG8gZXhhbWluZSBjbG9zZWx5LiBHb29kIGNob2ljZS4gRmluYWxseSwgbWFraW5nIHN1cmUgdGhlIGBCT05ESU5HYCBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQgaXMgYSBnaXZlbi4gVGhlc2UgY2hhbmdlcyBhcmUgY3J1Y2lhbCBmb3Igc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDQsIk91dHB1dFRva2VucyI6MTAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjQ1LjU4ODIxMzQyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDEwMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9hbGJfaW5pdGlhbGl6ZVwiLFxuICAgIFwiYm9uZF9hbGJfZGVpbml0aWFsaXplXCIsXG4gICAgXCJib25kX2FsYl9tb25pdG9yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQiBtb2RlIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHVzZSBwZXJjcHUgc3RhdHMgZm9yIGxvYWQgYmFsYW5jaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBhZmZlY3QgY29yZSBib25kaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl9pbml0aWFsaXplXCIsXG4gICAgXCJib25kX2FsYl9kZWluaXRpYWxpemVcIixcbiAgICBcImJvbmRfYWxiX21vbml0b3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGJvbmRpbmcgZHJpdmVyJ3MgQUxCIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgdXNlIHBlcmNwdSBzdGF0cyBmb3IgbG9hZCBiYWxhbmNpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGFmZmVjdCBjb3JlIGJvbmRpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjQ1LjY3MDIyOTczNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkyOTU1NTAwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDo0NS42NzA3MzAzMTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzkyOTUwNDQzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQiAoQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcpIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgZGF0YSByYWNlcy4gSXQgY2hhbmdlcyBsb2FkIHRyYWNraW5nIHZhcmlhYmxlcyAoYHR4X2J5dGVzYCwgYGxvYWRfaGlzdG9yeWAsIGBsb2FkYCkgZnJvbSBgdTMyYCB0byBgdTY0YCBhbmQgaW50cm9kdWNlcyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgaXMgYWxsb2NhdGVkIHZpYSBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAsIHdoaWNoIGluaGVyZW50bHkgemVyb2VzIHRoZSBhbGxvY2F0ZWQgcGVyLUNQVSBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjkyMjVkMTIyZmNmMmVhNmExMmVhMWY1NzgxN2YzOGEzMGE4NWY3YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA2OjA5OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5pbmRleCA4MzlmNzQ4MmRjMTgyLi4zNzJkYjU0ODAzZDM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbkBAIC02LDYgKzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGt0X3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtNzQsOCArNzUsOCBAQCBzdGF0aWMgaW5saW5lIHU4IF9zaW1wbGVfaGFzaChjb25zdCB1OCAqaGFzaF9zdGFydCwgaW50IGhhc2hfc2l6ZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2luaXRfdGFibGVfZW50cnkoc3RydWN0IHRsYl9jbGllbnRfaW5mbyAqZW50cnksIGludCBzYXZlX2xvYWQpXG4ge1xuIFx0aWYgKHNhdmVfbG9hZCkge1xuLVx0XHRlbnRyeS1cdTAwM2Vsb2FkX2hpc3RvcnkgPSAxICsgZW50cnktXHUwMDNldHhfYnl0ZXMgL1xuLVx0XHRcdFx0ICAgICAgQk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMO1xuK1x0XHRlbnRyeS1cdTAwM2Vsb2FkX2hpc3RvcnkgPSAxICsgZGl2X3U2NChlbnRyeS1cdTAwM2V0eF9ieXRlcyxcbitcdFx0XHRcdCAgICAgIEJPTkRfVExCX1JFQkFMQU5DRV9JTlRFUlZBTCk7XG4gXHRcdGVudHJ5LVx1MDAzZXR4X2J5dGVzID0gMDtcbiBcdH1cbiBcbkBAIC0xMzMsNiArMTM0LDEwIEBAIHN0YXRpYyBpbnQgdGxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXHRpZiAoIW5ld19oYXNodGJsKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQgPSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzKTtcbitcdGlmICghYm9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZClcbitcdFx0Z290byBvdXQ7XG4rXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuIFxuIFx0Ym9uZF9pbmZvLVx1MDAzZXR4X2hhc2h0YmwgPSBuZXdfaGFzaHRibDtcbkBAIC0xNDMsNiArMTQ4LDEwIEBAIHN0YXRpYyBpbnQgdGxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitvdXQ6XG4rXHRrZnJlZShuZXdfaGFzaHRibCk7XG4rXHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgb25seSBhZnRlciBhbGwgc2xhdmVzIGhhdmUgYmVlbiByZWxlYXNlZCAqL1xuQEAgLTE1NCwzMSArMTYzLDQ0IEBAIHN0YXRpYyB2b2lkIHRsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXG4gXHRrZnJlZShib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCk7XG4gXHRib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCA9IE5VTEw7XG4rXHRmcmVlX3BlcmNwdShib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkKTtcbitcdGJvbmRfaW5mby1cdTAwM2VwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSAwO1xuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuIH1cbiBcbi1zdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4rc3RhdGljIHU2NCBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuIHtcbi1cdHJldHVybiAoczY0KSAoc2xhdmUtXHUwMDNlc3BlZWQgXHUwMDNjXHUwMDNjIDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovXG4tXHQgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkIFx1MDAzY1x1MDAzYyAzKTsgLyogQnl0ZXMgdG8gYml0cyAqL1xuK1x0dTY0IHNsYXZlX2xvYWQgPSBTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMzsgLyogQnl0ZXMgdG8gYml0cyAqL1xuK1x0dTMyIHJhd19zcGVlZCA9IFJFQURfT05DRShzbGF2ZS1cdTAwM2VzcGVlZCk7XG4rXHR1NjQgc3BlZWQgPSAodTY0KXJhd19zcGVlZCBcdTAwM2NcdTAwM2MgMjA7IC8qIENvbnZlcnQgdG8gYml0cyBwZXIgc2VjICovXG4rXG4rXHQvKiBJdCdzIG1lYW5pbmdsZXNzIHRvIGNvbXBhcmUgZ2FwIG9uIHVua25vd24gc3BlZWQgTklDICovXG4rXHRpZiAocmF3X3NwZWVkID09ICh1MzIpU1BFRURfVU5LTk9XTilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBTa2lwIHNsYXZlIHdoaWNoIGlzIG92ZXIgbG9hZGVkICovXG4rXHRpZiAoc3BlZWQgXHUwMDNjPSBzbGF2ZV9sb2FkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBzcGVlZCAtIHNsYXZlX2xvYWQ7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxuIHtcbiBcdHN0cnVjdCBzbGF2ZSAqc2xhdmUsICpsZWFzdF9sb2FkZWQ7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuLVx0bG9uZyBsb25nIG1heF9nYXA7XG4rXHR1NjQgbWF4X2dhcCA9IDA7XG4gXG4gXHRsZWFzdF9sb2FkZWQgPSBOVUxMO1xuLVx0bWF4X2dhcCA9IExMT05HX01JTjtcbiBcbiBcdC8qIEZpbmQgdGhlIHNsYXZlIHdpdGggdGhlIGxhcmdlc3QgZ2FwICovXG4gXHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xuIFx0XHRpZiAoYm9uZF9zbGF2ZV9jYW5fdHgoc2xhdmUpKSB7XG4tXHRcdFx0bG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTtcbitcdFx0XHR1NjQgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpO1xuIFxuLVx0XHRcdGlmIChtYXhfZ2FwIFx1MDAzYyBnYXApIHtcbitcdFx0XHQvKiBNYWtlIHN1cmUgd2UgaGF2ZSBvbmUgYXZhaWxhYmxlIHNsYXZlICovXG4rXHRcdFx0aWYgKG1heF9nYXAgXHUwMDNjPSBnYXApIHtcbiBcdFx0XHRcdGxlYXN0X2xvYWRlZCA9IHNsYXZlO1xuIFx0XHRcdFx0bWF4X2dhcCA9IGdhcDtcbiBcdFx0XHR9XG5AQCAtMTM0NCw4ICsxMzY2LDE0IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0aWYgKCF0eF9zbGF2ZSkge1xuIFx0XHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXG4gXHRcdHR4X3NsYXZlID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpO1xuLVx0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpXG4tXHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCArPSBza2ItXHUwMDNlbGVuO1xuK1x0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcbitcdFx0XHRzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzICpwY3B1X2xvYWQ7XG4rXG4rXHRcdFx0cGNwdV9sb2FkID0gdGhpc19jcHVfcHRyKGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQpO1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cGNwdV9sb2FkLVx1MDAzZXN5bmNwKTtcbitcdFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnBjcHVfbG9hZC1cdTAwM2V0eF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cGNwdV9sb2FkLVx1MDAzZXN5bmNwKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcbkBAIC0xNTI5LDYgKzE1NTcsMjkgQEAgbmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4gXHRyZXR1cm4gYm9uZF9kb19hbGJfeG1pdChza2IsIGJvbmQsIHR4X3NsYXZlKTtcbiB9XG4gXG4rc3RhdGljIHU2NCByZXNldF91bmJhbGFuY2VkX2xvYWQoc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbylcbit7XG4rXHR1NjQgZGVsdGEsIHR4X2J5dGVzLCB0b3RhbF9ieXRlcyA9IDA7XG4rXHRzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzICpwO1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1x0aW50IGk7XG4rXG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xuK1x0XHRwID0gcGVyX2NwdV9wdHIoYm9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCwgaSk7XG4rXHRcdGRvIHtcbitcdFx0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZwLVx1MDAzZXN5bmNwKTtcbitcdFx0XHR0eF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNnAtXHUwMDNldHhfYnl0ZXMpO1xuK1x0XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2cC1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbitcbitcdFx0dG90YWxfYnl0ZXMgKz0gdHhfYnl0ZXM7XG4rXHR9XG4rXG4rXHRkZWx0YSA9IHRvdGFsX2J5dGVzIC0gYm9uZF9pbmZvLVx1MDAzZXByZXZfdG90YWxfdW5iYWxhbmNlZDtcbitcdGJvbmRfaW5mby1cdTAwM2VwcmV2X3RvdGFsX3VuYmFsYW5jZWQgPSB0b3RhbF9ieXRlcztcbitcbitcdHJldHVybiBkaXZfdTY0KGRlbHRhLCBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUwpO1xuK31cbitcbiB2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiBcdHN0cnVjdCBib25kaW5nICpib25kID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBib25kaW5nLFxuQEAgLTE1NzEsMTAgKzE2MjIsMTEgQEAgdm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0Ym9uZF9mb3JfZWFjaF9zbGF2ZV9yY3UoYm9uZCwgc2xhdmUsIGl0ZXIpIHtcbiBcdFx0XHR0bGJfY2xlYXJfc2xhdmUoYm9uZCwgc2xhdmUsIDEpO1xuIFx0XHRcdGlmIChzbGF2ZSA9PSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbi1cdFx0XHRcdFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkID1cbi1cdFx0XHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCAvXG4tXHRcdFx0XHRcdFx0Qk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMO1xuLVx0XHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCA9IDA7XG4rXHRcdFx0XHR1NjQgbmV3X2xvYWQgPSByZXNldF91bmJhbGFuY2VkX2xvYWQoYm9uZF9pbmZvKTtcbitcbitcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4rXHRcdFx0XHRTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCA9IG5ld19sb2FkO1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRhdG9taWNfc2V0KFx1MDAyNmJvbmRfaW5mby1cdTAwM2V0eF9yZWJhbGFuY2VfY291bnRlciwgMCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYm9uZF9hbGIuaCBiL2luY2x1ZGUvbmV0L2JvbmRfYWxiLmhcbmluZGV4IGU1OTQ1NDI3ZjM4ZGQuLjMyZjE5ODEwMzNlNGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ib25kX2FsYi5oXG4rKysgYi9pbmNsdWRlL25ldC9ib25kX2FsYi5oXG5AQCAtNTcsMTIgKzU3LDEyIEBAIHN0cnVjdCB0bGJfY2xpZW50X2luZm8ge1xuIFx0XHRcdFx0ICogcGFja2V0cyB0byBhIENsaWVudCB0aGF0IHRoZSBIYXNoIGZ1bmN0aW9uXG4gXHRcdFx0XHQgKiBnYXZlIHRoaXMgZW50cnkgaW5kZXguXG4gXHRcdFx0XHQgKi9cbi1cdHUzMiB0eF9ieXRlcztcdFx0LyogRWFjaCBDbGllbnQgYWNjdW11bGF0ZXMgdGhlIEJ5dGVzVHggdGhhdFxuK1x0dTY0IHR4X2J5dGVzO1x0XHQvKiBFYWNoIENsaWVudCBhY2N1bXVsYXRlcyB0aGUgQnl0ZXNUeCB0aGF0XG4gXHRcdFx0XHQgKiB3ZXJlIHRyYW5zbWl0dGVkIHRvIGl0LCBhbmQgYWZ0ZXIgZWFjaFxuIFx0XHRcdFx0ICogQ2FsbEJhY2sgdGhlIExvYWRIaXN0b3J5IGlzIGRpdmlkZWRcbiBcdFx0XHRcdCAqIGJ5IHRoZSBiYWxhbmNlIGludGVydmFsXG4gXHRcdFx0XHQgKi9cbi1cdHUzMiBsb2FkX2hpc3Rvcnk7XHQvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXNcbitcdHU2NCBsb2FkX2hpc3Rvcnk7XHQvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXNcbiBcdFx0XHRcdCAqIHRoYXQgd2VyZSB0cmFuc21pdHRlZCB0byB0aGlzIGNsaWVudCBieVxuIFx0XHRcdFx0ICogdGhlIHNlcnZlciBvbiB0aGUgcHJldmlvdXMgYmFsYW5jZVxuIFx0XHRcdFx0ICogaW50ZXJ2YWwgaW4gQnBzLlxuQEAgLTExOCwxNCArMTE4LDIwIEBAIHN0cnVjdCB0bGJfc2xhdmVfaW5mbyB7XG4gXHRcdFx0ICogYXJlIHRoZSBlbnRyaWVzIHRoYXQgd2VyZSBhc3NpZ25lZCB0byB1c2UgdGhpc1xuIFx0XHRcdCAqIHNsYXZlIGZvciB0cmFuc21pdC5cbiBcdFx0XHQgKi9cbi1cdHUzMiBsb2FkO1x0LyogRWFjaCBzbGF2ZSBzdW1zIHRoZSBsb2FkSGlzdG9yeSBvZiBhbGwgY2xpZW50c1xuK1x0dTY0IGxvYWQ7XHQvKiBFYWNoIHNsYXZlIHN1bXMgdGhlIGxvYWRIaXN0b3J5IG9mIGFsbCBjbGllbnRzXG4gXHRcdFx0ICogYXNzaWduZWQgdG8gaXRcbiBcdFx0XHQgKi9cbiB9O1xuIFxuK3N0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHMge1xuK1x0dTY0X3N0YXRzX3RcdFx0dHhfYnl0ZXM7XG4rXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmNcdHN5bmNwO1xuK307XG4rXG4gc3RydWN0IGFsYl9ib25kX2luZm8ge1xuIFx0c3RydWN0IHRsYl9jbGllbnRfaW5mb1x0KnR4X2hhc2h0Ymw7IC8qIER5bmFtaWNhbGx5IGFsbG9jYXRlZCAqL1xuLVx0dTMyXHRcdFx0dW5iYWxhbmNlZF9sb2FkO1xuK1x0c3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0cyBfX3BlcmNwdVx0KnVuYmFsYW5jZWRfbG9hZDtcbitcdHU2NFx0XHRcdHByZXZfdG90YWxfdW5iYWxhbmNlZDtcbiBcdGF0b21pY190XHRcdHR4X3JlYmFsYW5jZV9jb3VudGVyO1xuIFx0aW50XHRcdFx0bHBfY291bnRlcjtcbiBcdC8qIC0tLS0tLS0tIHJsYiBwYXJhbWV0ZXJzIC0tLS0tLS0tICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDo0NS42NzA3MzExNDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE2Nzg4OTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQm9uZGluZyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgdGhlIGJvbmRpbmcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIEFjdGl2ZSBMb2FkIEJhbGFuY2luZyAoQUxCKSBjb21wb25lbnQsIGZvY3VzZWQgb24gYGJvbmRfYWxiLmNgIGFuZCBgYm9uZF9hbGIuaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBhIHNpZ25pZmljYW50IHNoaWZ0IHRvd2FyZHMgaGFuZGxpbmcgbGFyZ2VyIHZhbHVlcywgYSBjcml0aWNhbCBjaGFuZ2UgZm9yIGhpZ2gtYmFuZHdpZHRoIGVudmlyb25tZW50cy4gVGhleSdyZSBicm9hZGVuaW5nIHRoZSBkYXRhIHR5cGVzIHVzZWQgZm9yIGxvYWQgbWV0cmljcyDigJMgc3BlY2lmaWNhbGx5LCBjb252ZXJ0aW5nIGB0eF9ieXRlc2AgYW5kIGBsb2FkX2hpc3RvcnlgIHdpdGhpbiBgdGxiX2NsaWVudF9pbmZvYCwgYW5kIGBsb2FkYCBpbiBgdGxiX3NsYXZlX2luZm9gIGZyb20gYHUzMmAgdG8gYHU2NGAuIFRoaXMgaXMgZ29vZCwgaXQgYW50aWNpcGF0ZXMgdGhlIGluY3JlYXNlZCB0aHJvdWdocHV0IHdlJ3JlIHNlZWluZyBpbiBtb2Rlcm4gbmV0d29ya3MuXG5cblRoZSBtb3N0IGludHJpZ3VpbmcgcGFydCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHBlci1DUFUgc3RhdHMgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGV5J3ZlIG1vdmVkIGZyb20gYSBzaW5nbGUgYHUzMmAgZm9yIGB1bmJhbGFuY2VkX2xvYWRgIGluIGBhbGJfYm9uZF9pbmZvYCB0byBhIGBzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzIF9fcGVyY3B1ICp1bmJhbGFuY2VkX2xvYWRgLiBUaGlzIG5ldyBzdHJ1Y3R1cmUsIGB1bmJhbGFuY2VkX2xvYWRfc3RhdHNgLCBjb250YWlucyBgdTY0X3N0YXRzX3QgdHhfYnl0ZXNgIGFuZCBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIGBzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3BgLiBUaGlzIGlzIHNtYXJ0LiBJdCBhbGxvd3MgZm9yIHBlci1DUFUgYWNjb3VudGluZyBvZiBsb2FkLCBhbmQgdGhlIHN5bmNocm9uaXphdGlvbiBpcyBjcnVjaWFsIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVuIGFnZ3JlZ2F0aW5nIHRoZXNlIHN0YXRzLiBUaGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHdpdGhpbiBgdGxiX2luaXRpYWxpemUoKWAgYW5kIGB0bGJfZGVpbml0aWFsaXplKClgLCB1c2luZyBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAgYW5kIGl0cyBjb3VudGVycGFydCwgc2VlbSBjb3JyZWN0bHkgaW1wbGVtZW50ZWQuIFRoZSBwYXRjaCBjb3JyZWN0bHkgdXBkYXRlcyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLCBzdWNoIGFzIGBib25kX2RvX2FsYl94bWl0KClgIGFuZCBgYm9uZF9hbGJfbW9uaXRvcigpYCwgdG8gdXNlIHRoZXNlIG5ldyBwZXItQ1BVIHN0YXRpc3RpY3MuIEFuZCB0aGUgYWRqdXN0bWVudHMgdG8gYGNvbXB1dGVfZ2FwKClgIHRvIGhhbmRsZSBgdTY0YCBhbmQgc3BlZWRzIHVzaW5nIGBSRUFEX09OQ0UoKWAgaXMgZ29vZCB0b28uXG5cbkJ1dCwgaG9sZCBvbi4gVGhpcyBwZXItQ1BVIGFsbG9jYXRpb24uLi4gSSB3YW50IHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueXRpbWUgd2UncmUgYWxsb2NhdGluZyBwZXItQ1BVIG1lbW9yeSwgemVyby1pbml0aWFsaXphdGlvbiBpcyBzb21ldGhpbmcgdG8gdmVyaWZ5LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNgIGp1c3QgdG8gYmUgc3VyZS4uLiBMZXQncyBzZWUuLi4gQWgsIHllcywgaXQncyBhIG1hY3JvIHRoYXQgd3JhcHMgYGFsbG9jX3BlcmNwdV9nZnBgIHdpdGggYF9fR0ZQX1pFUk9gLiBQZXJmZWN0LiBUaGF0IGNvbmZpcm1zIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHplcm9lZCwgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHByZXZlbnQgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gQWxyaWdodCwgZ29vZC4gTm8gaW1tZWRpYXRlIGNvbmNlcm5zIHRoZXJlLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCB1cGRhdGUgb3ZlcmFsbCwgd2l0aCB0aG91Z2h0ZnVsIGNvbnNpZGVyYXRpb24gZ2l2ZW4gdG8gZGF0YSB0eXBlIHNpemVzIGFuZCB0aHJlYWQgc2FmZXR5IHdoZW4gZGVhbGluZyB3aXRoIHBlci1DUFUgc3RhdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDo1My44Mzg2MjM4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNTAxOTI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zMTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzE1NS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMxNTY6I2RlZmluZSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyh0eXBlKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMxNTctXFx0X19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyh0eXBlLCBHRlBfS0VSTkVMKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDo1NS41NDM2NDkyOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQzNTMyNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBfX25ldGRldl9hbGxvY19wY3B1X3N0YXRzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyBpdHMgcHVycG9zZSAtIGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgYWxsb2NhdGluZyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIG5ldHdvcmsgZGV2aWNlcy4gS25vd2luZyB0aGlzLCBteSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBkZXRhaWxzIG9mIGl0cyBpbXBsZW1lbnRhdGlvbiwgYW5kIGhvdyBpdCBoYW5kbGVzIG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBpbnZvbHZlZC4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFyZWFzIHRoYXQgbWlnaHQgYmUgc3VzY2VwdGlibGUgdG8gY29udGVudGlvbiwgYW5kIGFueSBudWFuY2VzIGluIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBzdWNoIGFzIHdoZXRoZXIgaXQgdXNlcyBzbGFiIGFsbG9jYXRvcnMsIE5VTUEgYXdhcmVuZXNzLCBvciBzcGVjaWZpYyBDUFUgYWZmaW5pdHkgY29uc2lkZXJhdGlvbnMuIEknbGwgd2FudCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIHdoZXJlIGFuZCB3aGVuIGl0J3MgaW52b2tlZCwgYW5kIGhvdyB0aGUgYWxsb2NhdGVkIHBlci1DUFUgc3RhdHMgYXJlIHV0aWxpemVkIHRocm91Z2hvdXQgdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB0aGVyZSBtaWdodCBiZSBjb21wbGV4aXRpZXMgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSBpbiBzY2VuYXJpb3Mgd2hlcmUgYWxsb2NhdGlvbiBmYWlscyBvciByZXNvdXJjZXMgYXJlIGxpbWl0ZWQuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0aGF0IEkgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgdG8gZW5zdXJlIG92ZXJhbGwgc3lzdGVtIGludGVncml0eSBhbmQgcmVsaWFiaWxpdHkuIE92ZXJhbGwsIG15IGdvYWwgaXMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmdW5jdGlvbuKAmXMgYmVoYXZpb3IsIHBlcmZvcm1hbmNlLCBhbmQgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBlY29zeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDo1OS40ODcxODQyNjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzY4ODUyNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zMTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzE0MS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMxNDI6I2RlZmluZSBfX25ldGRldl9hbGxvY19wY3B1X3N0YXRzKHR5cGUsIGdmcClcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMTQzLSh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMTowMS4xNjQwNzQ1NzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MzA1MzU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBuZXR3b3JraW5nIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHNgKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGUgc291cmNlIGZvciBgX19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0c2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24uIEl0J3MgZ290IFwiYWxsb2NcIiBpbiB0aGUgbmFtZSwgc28gSSdtIGd1ZXNzaW5nIGl0J3MgaGFuZGxpbmcgdGhlIGFsbG9jYXRpb24gb2YgcGVyLUNQVSBzdGF0aXN0aWNzIGZvciBhIG5ldHdvcmsgZGV2aWNlLiBQZXItQ1BVIGlzIGNydWNpYWwgaGVyZTsgaXQgZ2l2ZXMgZWFjaCBDUFUgaXRzIG93biBjb3VudGVycywgYXZvaWRpbmcgY29udGVudGlvbiBhbmQgZW5zdXJpbmcgZ29vZCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBvbiBoaWdoLWNvcmUtY291bnQgc3lzdGVtcy4gU28sIHRoaXMgZnVuY3Rpb24gaXMgZnVuZGFtZW50YWwgZm9yIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgbmV0d29yayBtb25pdG9yaW5nLiBMZXQncyBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuIEknbSBleHBlY3Rpbmcgc29tZSBzbGFiIGFsbG9jYXRpb24sIHByb2JhYmx5IHVzaW5nIGBhbGxvY19wZXJjcHUoKWAgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCBhbmQgaW5pdGlhbGl6YXRpb24gb2YgdGhvc2UgY291bnRlcnMgdG8gemVyby4gSSdsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIGFueSBzcGlubG9ja3Mgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGVzZSBwZXItY3B1IHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIGRlYWxsb2NhdGlvbiwgdG8gZW5zdXJlIGF0b21pY2l0eS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlJ3MgbGlmZWN5Y2xlIC0gd2hlbiBpcyBpdCBjYWxsZWQsIHdoZW4gaXMgdGhlIG1lbW9yeSBmcmVlZCwgYW5kIGhvdyBpcyBpdCBsaW5rZWQgaW50byB0aGUgb3ZlcmFsbCBgbmV0X2RldmljZWAgc3RydWN0dXJlLiBJJ20gZXhwZWN0aW5nIGl0IHRvIGJlIGNhbGxlZCBkdXJpbmcgZGV2aWNlIHJlZ2lzdHJhdGlvbiwgcHJvYmFibHkgd2l0aGluIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBwYXRoLCB3aGVuIHRoZSBkZXZpY2UgY29tZXMgb25saW5lLiBJJ2xsIGFsc28gY2hlY2sgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGdlbmVyaWMgbmV0d29yayBzdGF0aXN0aWNzIHN0cnVjdHVyZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHBlci1jcHUgdmVyc2lvbnMuIFRoaXMgaXMgbGlrZWx5IGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgdG8gdW5kZXJzdGFuZCBob3cgbmV0d29yayBzdGF0aXN0aWNzIHdvcmsgaW4gdGhpcyBrZXJuZWwgdmVyc2lvbi4gTGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjExOjA0LjkyNzEzMTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk1NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzE0MixcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE0MjpcXHQjZGVmaW5lIF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHModHlwZSwgZ2ZwKVxcdFxcdFxcdFxcdFxcXFxcXG4zMTQzOlxcdCh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMxNDQ6XFx0XFx0dHlwZW9mKHR5cGUpIF9fcGVyY3B1ICpwY3B1X3N0YXRzID0gYWxsb2NfcGVyY3B1X2dmcCh0eXBlLCBnZnApO1xcXFxcXG4zMTQ1OlxcdFxcdGlmIChwY3B1X3N0YXRzKVxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMzE0NjpcXHRcXHRcXHRpbnQgX19jcHU7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMxNDc6XFx0XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KF9fY3B1KSB7XFx0XFx0XFx0XFx0XFxcXFxcbjMxNDg6XFx0XFx0XFx0XFx0dHlwZW9mKHR5cGUpICpzdGF0O1xcdFxcdFxcdFxcdFxcXFxcXG4zMTQ5OlxcdFxcdFxcdFxcdHN0YXQgPSBwZXJfY3B1X3B0cihwY3B1X3N0YXRzLCBfX2NwdSk7XFx0XFx0XFxcXFxcbjMxNTA6XFx0XFx0XFx0XFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNnN0YXQtXFx1MDAzZXN5bmNwKTtcXHRcXHRcXHRcXFxcXFxuMzE1MTpcXHRcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMxNTI6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4zMTUzOlxcdFxcdHBjcHVfc3RhdHM7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMxNTQ6XFx0fSlcXG4zMTU1OlxcdFxcbjMxNTY6XFx0I2RlZmluZSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyh0eXBlKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTE6MDQuOTI3NTI4NDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNjk2NDEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKk1lbW9yeSBBbGxvY2F0aW9uIE51YW5jZXM6IEEgUXVpY2sgUmV2aWV3KipcblxuQWxyaWdodCwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IGBhbGxvY19wZXJjcHVfZ2ZwYC4gSSB0aG91Z2h0IEkga25ldyB0aGlzLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMsIGdpdmVuIHRoZSBrZXJuZWwncyBjcml0aWNhbCByb2xlIGluIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5LiBTbywgaXMgaXQgdHJ1ZSB0aGF0IGBhbGxvY19wZXJjcHVfZ2ZwYCB6ZXJvZXMgbWVtb3J5IGJ5IGRlZmF1bHQ/IEl0IHNlZW1lZCBsaWtlIGl0IGRpZCB1bmxlc3MgdGhlIGBfX0dGUF9aRVJPYCBmbGFnIHdhcyBleHBsaWNpdGx5IG9taXR0ZWQuIEhvd2V2ZXIsIEkgc2VlbSB0byByZW1lbWJlciB0aGF0IGBhbGxvY19wZXJjcHVgIGl0c2VsZiBndWFyYW50ZWVzIHplcm9lZCBtZW1vcnkuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBsZXQncyBjb25maXJtLiBJIGtub3cgdGhhdCB1c2luZyBgYWxsb2NfcGVyY3B1X2dmcGAgd2l0aCBzb21ldGhpbmcgbGlrZSBgR0ZQX0tFUk5FTGAgd2lsbCBhbHNvIHJlc3VsdCBpbiB6ZXJvZWQgbWVtb3J5LCBiZWNhdXNlIHRoZSBgcGNwdV9hbGxvY2AgZnVuY3Rpb24gdW5kZXJuZWF0aCBoYW5kbGVzIHRoZSBhY3R1YWwgYWxsb2NhdGlvbiBhbmQgemVyb2luZywgcmlnaHQ/IE9rYXksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFuZCBhdm9pZCBhIG5hc3R5IGJ1ZyBsYXRlciwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBiZWhhdmlvciBvZiBgYWxsb2NfcGVyY3B1X2dmcGAgdG8gcmVpbmZvcmNlIG15IHVuZGVyc3RhbmRpbmcuIE5vIGhhcm0gaW4gYSBxdWljayB2ZXJpZmljYXRpb247IGEgZmF1bHR5IGFzc3VtcHRpb24gaGVyZSBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBpc3N1ZXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTE6MDguNTQ0NDk2MDQ2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI3MjgzNjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBhbGxvY19wZXJjcHVfZ2ZwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGVyY3B1Lmg9MTM3PWV4dGVybiB2b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUuaC0xNDYtXFxuaW5jbHVkZS9saW51eC9wZXJjcHUuaDoxNDc6I2RlZmluZSBhbGxvY19wZXJjcHVfZ2ZwKHR5cGUsIGdmcClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wZXJjcHUuaC0xNDgtXFx0KHR5cGVvZih0eXBlKSBfX3BlcmNwdSAqKV9fYWxsb2NfcGVyY3B1X2dmcChzaXplb2YodHlwZSksXFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMToxMC40NzE4NDc5NzFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzODQ4NTI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19hbGxvY19wZXJjcHVfZ2ZwYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgX19hbGxvY19wZXJjcHVfZ2ZwYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgYWxsb2NhdGlvbiBmdW5jdGlvbiBiZWhhdmVzLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwZXItQ1BVIGRhdGEgc3RydWN0dXJlcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwsIEknbSB6ZXJvaW5nIGluIG9uIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gYXMgdGhlIGxpbmNocGluIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtZWNoYW5pY3Mgb2YgcGVyLUNQVSB2YXJpYWJsZSBhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIEdGUCBmbGFncy4gTXkgZm9jdXMgcmlnaHQgbm93IHdpbGwgYmUgb24gaXRzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGFnZSBhbGxvY2F0b3IuIEknbSBrZWVuIHRvIGV4YW1pbmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBtZW1vcnkgZnJhZ21lbnRhdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBkdXJpbmcgcGVyLUNQVSBhbGxvY2F0aW9ucyB1bmRlciB2YXJpb3VzIHN5c3RlbSB3b3JrbG9hZHMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgaXRzIGRlc2lnbiBjb25zaWRlcmF0aW9ucyBhcmUgY29uc2lzdGVudCB3aXRoIG15IGV4cGVjdGF0aW9ucyBhcm91bmQgc2NhbGFiaWxpdHkgYW5kIE5VTUEtYXdhcmVuZXNzIGluIGEgbW9kZXJuIGtlcm5lbC4gTGV0J3Mgc2VlIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBtZW1vcnkgem9uZXMgYW5kIGlmIGl0IGNvcnJlY3RseSBpbnRlZ3JhdGVzIHdpdGggdGhlIHN5c3RlbSdzIG1lbW9yeSByZWNsYWltIG1lY2hhbmlzbXMuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDc5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTE6MTQuNDEwMzM1ODM3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQwODk2NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBfX2FsbG9jX3BlcmNwdV9nZnBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wZXJjcHUuaD0xMzc9ZXh0ZXJuIHZvaWQgX19wZXJjcHUgKnBjcHVfYWxsb2Nfbm9wcm9mKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIGJvb2wgcmVzZXJ2ZWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS5oLTEzOS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS5oOjE0MDojZGVmaW5lIF9fYWxsb2NfcGVyY3B1X2dmcChfc2l6ZSwgX2FsaWduLCBfZ2ZwKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS5oLTE0MS1cXHRhbGxvY19ob29rcyhwY3B1X2FsbG9jX25vcHJvZihfc2l6ZSwgX2FsaWduLCBmYWxzZSwgX2dmcCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjExOjE2LjA1MTIzOTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkxNDUxNDE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNhZmV0eSoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIGF0IHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBwY3B1X2FsbG9jX25vcHJvZmAgemVyb2luZyBtZW1vcnkgaXMgYSBrZXkgcG9pbnQgaGVyZTsgaXQgbWVhbnMgdGhlIHBlci1DUFUgc3RhdHMgYXJlIGluaXRpYWxpemVkIHRvIHplcm8gcmlnaHQgb2ZmIHRoZSBiYXQuIFRoaXMgaXMgZ29vZC4gVGhlIHBhdGNoIGlzIGFib3V0IGFkZHJlc3NpbmcgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHBvdGVudGlhbCBkYXRhIHJhY2VzLCB3aGljaCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCBsZXQncyBtYWtlIHN1cmUgaXQncyBkb25lIHNhZmVseS4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGNoYW5nZXMgc29tZSB2YXJpYWJsZXMsIEkgc2VlIHRoYXQuIEl0J3MgbW92aW5nIGZyb20gYHUzMmAgdG8gYHU2NGAgdG8gcHJldmVudCBvdmVyZmxvdywgYW5kIGxldmVyYWdpbmcgcGVyLUNQVSBzdGF0cyBpcyBkZWZpbml0ZWx5IHRoZSBjb3JyZWN0IHdheSB0byBhdm9pZCBsb2NrIGNvbnRlbnRpb24gYW5kIGRhdGEgcmFjZXMsIGVzcGVjaWFsbHkgb24gc29tZXRoaW5nIGxpa2UgYHVuYmFsYW5jZWRfbG9hZGAuXG5cblRoZXJlJ3Mgbm8gbmV3IGluZm9ybWF0aW9uIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gdGhhdCdzIGEgY2hlY2suIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEkgY2FuIHNlZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgaXMgbG9naWMtYmFzZWQg4oCTIGZpeGluZyB0aG9zZSBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgZW5zdXJpbmcgdGhyZWFkLXNhZmV0eSBhcm91bmQgdGhhdCBzaGFyZWQgY291bnRlci4gSSBjYW4ndCBzZWUgYW55IG9idmlvdXMgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbnRyb2R1Y2VkLCBzbyBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIHRvb2xzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBzdWJ0bGUgY29ycnVwdGlvbiwgaWYgdGhlcmUgaXMgYW55LiBUaGF0IG1lYW5zIEkgZG9uJ3QgdGhpbmsgaXQgKk5lZWRzS01TQU4qIOKAkyB0aGUgY2hhbmdlIGlzIHByZXR0eSBjb250YWluZWQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgdGhvdWdoLCBvbiB3aGV0aGVyIGFueXRoaW5nIGluc2lkZSBgc3RydWN0IGFsYl9ib25kX2luZm9gIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gSXQgbG9va3MgaW50ZXJuYWw7IGl0J3MgcGFydCBvZiBgc3RydWN0IGJvbmRpbmdgLCB3aGljaCBpcyBhbHNvIGludGVybmFsLiBBaCwgeWVzLCB0aGUgYHR4X2J5dGVzYCwgYGxvYWRfaGlzdG9yeWAsIGFuZCBgbG9hZGAgZmllbGRzIGFyZSBhbGwgaW50ZXJuYWwgc3RhdHMgc3BlY2lmaWMgdG8gQUxCLCB0aGUgQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcgbW9kZS4gTm8gd29ycmllcyBhYm91dCB0aGUgY29kZSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU28sIHRvIHN1bW1hcml6ZSBteSByZWFzb25pbmc6IHRoaXMgcGF0Y2ggaXMgZml4aW5nIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBwb3RlbnRpYWwgZGF0YSByYWNlcyBpbiB0aGUgYm9uZGluZyBkcml2ZXIncyBBTEIgbW9kZS4gSXQncyBkb2luZyB0aGlzIGJ5IHVwZ3JhZGluZyBgdTMyYCB2YXJpYWJsZXMgdG8gYHU2NGAgYW5kIGJ5IHV0aWxpemluZyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGUgbmV3IHBlci1DUFUgc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKGBzdHJ1Y3QgdW5iYWxhbmNlZF9sb2FkX3N0YXRzYCkgYXJlIGFsbG9jYXRlZCB3aXRoIHplcm9lZCBtZW1vcnkgdXNpbmcgYG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKClgLCB3aGljaCBjYWxscyBgYWxsb2NfcGVyY3B1X2dmcCgpYC4gQ3J1Y2lhbGx5LCBubyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIGFueXdoZXJlLiBLQVNBTiBpcyB0aGVyZSBhcyBhIHNhZmV0eSBuZXQuIFRoZXJlZm9yZSwgYSBzcGVjaWFsaXplZCBLTVNBTiBmdXp6ZXIgc2Vzc2lvbiBpc24ndCBuZWVkZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ4NSwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTE6MjQuOTY1NzU2MDUzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYm9uZGluZyBkcml2ZXIncyBBTEIgKEFkYXB0aXZlIExvYWQgQmFsYW5jaW5nKSBtb2RlIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgYW5kIGRhdGEgcmFjZXMuIEl0IGNoYW5nZXMgbG9hZCB0cmFja2luZyB2YXJpYWJsZXMgKGB0eF9ieXRlc2AsIGBsb2FkX2hpc3RvcnlgLCBgbG9hZGApIGZyb20gYHUzMmAgdG8gYHU2NGAgYW5kIGludHJvZHVjZXMgcGVyLUNQVSBzdGF0aXN0aWNzIGZvciBgdW5iYWxhbmNlZF9sb2FkYC4gVGhlIG5ld2x5IGludHJvZHVjZWQgYHN0cnVjdCB1bmJhbGFuY2VkX2xvYWRfc3RhdHNgIGlzIGFsbG9jYXRlZCB2aWEgYG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKClgLCB3aGljaCBpbmhlcmVudGx5IHplcm9lcyB0aGUgYWxsb2NhdGVkIHBlci1DUFUgbWVtb3J5LiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggdW5pbml0aWFsaXplZCBidWZmZXJzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQiAoQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcpIG1vZGUgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgZGF0YSByYWNlcy4gSXQgY2hhbmdlcyBsb2FkIHRyYWNraW5nIHZhcmlhYmxlcyAoYHR4X2J5dGVzYCwgYGxvYWRfaGlzdG9yeWAsIGBsb2FkYCkgZnJvbSBgdTMyYCB0byBgdTY0YCBhbmQgaW50cm9kdWNlcyBwZXItQ1BVIHN0YXRpc3RpY3MgZm9yIGB1bmJhbGFuY2VkX2xvYWRgLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBgc3RydWN0IHVuYmFsYW5jZWRfbG9hZF9zdGF0c2AgaXMgYWxsb2NhdGVkIHZpYSBgbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoKWAsIHdoaWNoIGluaGVyZW50bHkgemVyb2VzIHRoZSBhbGxvY2F0ZWQgcGVyLUNQVSBtZW1vcnkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j67m[1] Phase: Succeeded StartedAt: 2026-08-20 06:11:35 +0000 UTC FinishedAt: 2026-08-20 06:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 06:11:35 +0000 UTC FinishedAt: 2026-08-20 06:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2] Phase: Succeeded StartedAt: 2026-08-20 06:11:35 +0000 UTC FinishedAt: 2026-08-20 09:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:11:35 +0000 UTC FinishedAt: 2026-08-20 09:49:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:11:35 +0000 UTC FinishedAt: 2026-08-20 06:11:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:11:35 +0000 UTC FinishedAt: 2026-08-20 06:11:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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-workflow6j67m/series-workflow6j67m-convert-artifact-4256681317/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:11:46 +0000 UTC FinishedAt: 2026-08-20 06:27:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:11:46 +0000 UTC FinishedAt: 2026-08-20 06:27:50 +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:*4d22698b-09ab-4f7d-a44b-27245a91a31a,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-workflow6j67m/series-workflow6j67m-convert-artifact-4256681317/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": "4c83503b-61c5-4942-a292-a40dffaa85f3", "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-workflow6j67m/series-workflow6j67m-build-action-742050187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:11:46 +0000 UTC FinishedAt: 2026-08-20 06:27:40 +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:*4d22698b-09ab-4f7d-a44b-27245a91a31a,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-workflow6j67m/series-workflow6j67m-convert-artifact-4256681317/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": "4c83503b-61c5-4942-a292-a40dffaa85f3", "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-workflow6j67m/series-workflow6j67m-build-action-742050187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:27:50 +0000 UTC FinishedAt: 2026-08-20 06:27:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:27:50 +0000 UTC FinishedAt: 2026-08-20 06:27:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:27:50 +0000 UTC FinishedAt: 2026-08-20 06:28:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:27:50 +0000 UTC FinishedAt: 2026-08-20 06:27:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-workflow6j67m/series-workflow6j67m-convert-artifact-3404727360/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:28:00 +0000 UTC FinishedAt: 2026-08-20 06:29:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:28:00 +0000 UTC FinishedAt: 2026-08-20 06:29:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4c83503b-61c5-4942-a292-a40dffaa85f3,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-workflow6j67m/series-workflow6j67m-build-action-742050187/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-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:29:48 +0000 UTC FinishedAt: 2026-08-20 06:29:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:29:48 +0000 UTC FinishedAt: 2026-08-20 06:29:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:29:48 +0000 UTC FinishedAt: 2026-08-20 06:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:29:48 +0000 UTC FinishedAt: 2026-08-20 06:45:53 +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:*4d22698b-09ab-4f7d-a44b-27245a91a31a,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-workflow6j67m/series-workflow6j67m-convert-artifact-3404727360/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": "5866cba1-c1b0-4e0d-b905-6cb2213b7189", "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-workflow6j67m/series-workflow6j67m-build-action-428569084/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:29:48 +0000 UTC FinishedAt: 2026-08-20 06:45:43 +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:*4d22698b-09ab-4f7d-a44b-27245a91a31a,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-workflow6j67m/series-workflow6j67m-convert-artifact-3404727360/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": "5866cba1-c1b0-4e0d-b905-6cb2213b7189", "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-workflow6j67m/series-workflow6j67m-build-action-428569084/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:45:53 +0000 UTC FinishedAt: 2026-08-20 06:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:45:53 +0000 UTC FinishedAt: 2026-08-20 06:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:45:53 +0000 UTC FinishedAt: 2026-08-20 06:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:45:53 +0000 UTC FinishedAt: 2026-08-20 06:47:37 +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:*5866cba1-c1b0-4e0d-b905-6cb2213b7189,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-workflow6j67m/series-workflow6j67m-build-action-428569084/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-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:47:47 +0000 UTC FinishedAt: 2026-08-20 09:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:47:47 +0000 UTC FinishedAt: 2026-08-20 09:49:48 +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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"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:*4c83503b-61c5-4942-a292-a40dffaa85f3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5866cba1-c1b0-4e0d-b905-6cb2213b7189,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-workflow6j67m/series-workflow6j67m-build-action-742050187/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-workflow6j67m/series-workflow6j67m-build-action-428569084/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:47:47 +0000 UTC FinishedAt: 2026-08-20 06:47:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:47:47 +0000 UTC FinishedAt: 2026-08-20 06:47:52 +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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"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-workflow6j67m/series-workflow6j67m-convert-artifact-613123481/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:47:47 +0000 UTC FinishedAt: 2026-08-20 06:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:47:47 +0000 UTC FinishedAt: 2026-08-20 06:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:47:48 +0000 UTC FinishedAt: 2026-08-20 06:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:47:58 +0000 UTC FinishedAt: 2026-08-20 09:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j67m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"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":["bond_alb_initialize","bond_alb_deinitialize","bond_alb_monitor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"564973a259ec76f2dad0853420e7034cc43994c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING"],"series_id":"370e99e3-ddb5-4043-95f9-4e31ae35f11b","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-08-20 06:47:58 +0000 UTC FinishedAt: 2026-08-20 09:49:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4c83503b-61c5-4942-a292-a40dffaa85f3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5866cba1-c1b0-4e0d-b905-6cb2213b7189,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-workflow6j67m/series-workflow6j67m-build-action-742050187/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-workflow6j67m/series-workflow6j67m-build-action-428569084/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-workflow6j67m/series-workflow6j67m-convert-artifact-613123481/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,}