Name: series-workflowcjc5j Phase: Succeeded StartedAt: 2026-08-07 20:45:44 +0000 UTC FinishedAt: 2026-08-08 00:50:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[0] Phase: Succeeded StartedAt: 2026-08-07 20:45:44 +0000 UTC FinishedAt: 2026-08-07 21:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 20:45:44 +0000 UTC FinishedAt: 2026-08-07 21:06:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT" ], "series_id": "116fdfa1-804e-4867-8e32-00053ff6dd26" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "start_service_discovery", "mgmt_device_found", "hci_update_passive_scan_sync" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfc2VydmljZV9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7bWdtdF9kZXZpY2VfZm91bmQmIzM0OywKICAgICYjMzQ7aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3BpbmxvY2sgcHJvdGVjdGlvbiBhcm91bmQgdGhlIGFjY2Vzc2VzIHRvIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGlzc3VlcyAoc3VjaCBhcyBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtDU0FOIG9yIEtBU0FOLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIChsaWtlbHkgVUFGIG9yIGRhdGEgcmFjZSkgaW4gQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29kZSBieSBhZGRpbmcgc3BpbmxvY2tzIGFyb3VuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkc2AgYWNjZXNzZXMuIFRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvbW1hbmRzIChgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgKSBhbmQgZGV2aWNlIHNjYW5uaW5nIChgbWdtdF9kZXZpY2VfZm91bmRgKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY4MTRmYzUwOGVkZDc0MTZjYTE4YjMzMTZjOTE3ODRmNDYzZWE2MGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDIxOjA1OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbmluZGV4IDNkZjU5ODQ5ZGNiZWEuLjgxMTU0MzViNWQyYWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbkBAIC05MTksOSAmIzQzOzkxOSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSBmYWxzZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlcG9ydF9pbnZhbGlkX3Jzc2kgPSB0cnVlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiYjNDM7XHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcdGtmcmVlKGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0gTlVMTDtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbWdtdC5jIGIvbmV0L2JsdWV0b290aC9tZ210LmNcbmluZGV4IDE2N2Q3NWUzNDUyNjYuLjA5MGQwZjAwODc0YTEgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JsdWV0b290aC9tZ210LmNcbkBAIC02MjIzLDEyICYjNDM7NjIyMywxNCBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS5yZXN1bHRfZmlsdGVyaW5nID0gdHJ1ZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnR5cGUgPSBjcC1cdTAwM2V0eXBlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IGNwLVx1MDAzZXJzc2k7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gdXVpZF9jb3VudDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFxuIFx0aWYgKHV1aWRfY291bnQgXHUwMDNlIDApIHtcbiBcdFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBrbWVtZHVwKGNwLVx1MDAzZXV1aWRzLCB1dWlkX2NvdW50ICogMTYsXG4gXHRcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXHRcdFx0ZXJyID0gbWdtdF9jbWRfY29tcGxldGUoc2ssIGhkZXYtXHUwMDNlaWQsXG4gXHRcdFx0XHRcdFx0TUdNVF9PUF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWSxcbiBcdFx0XHRcdFx0XHRNR01UX1NUQVRVU19GQUlMRUQsXG5AQCAtNjIzOCw2ICYjNDM7NjI0MCw5IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50O1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuJiM0MztcbiBcdGVyciA9IGhjaV9jbWRfc3luY19xdWV1ZShoZGV2LCBzdGFydF9kaXNjb3Zlcnlfc3luYywgY21kLFxuIFx0XHRcdFx0IHN0YXJ0X2Rpc2NvdmVyeV9jb21wbGV0ZSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG5AQCAtMTAzNjcsNiAmIzQzOzEwMzcyLDcgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxuIFx0ICAgICAhaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSKSkpKVxuIFx0XHRyZXR1cm4gIGZhbHNlO1xuIFxuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcdGlmIChoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ICE9IDApIHtcbiBcdFx0LyogSWYgYSBsaXN0IG9mIFVVSURzIGlzIHByb3ZpZGVkIGluIGZpbHRlciwgcmVzdWx0cyB3aXRoIG5vXG4gXHRcdCAqIG1hdGNoaW5nIFVVSUQgc2hvdWxkIGJlIGRyb3BwZWQuXG5AQCAtMTAzNzUsOSAmIzQzOzEwMzgxLDEyIEBAIHN0YXRpYyBib29sIGlzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgczggcnNzaSwgdTggKmVpcixcbiBcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFlaXJfaGFzX3V1aWRzKHNjYW5fcnNwLCBzY2FuX3JzcF9sZW4sXG4gXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50LFxuLVx0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpKVxuJiM0MztcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSkge1xuJiM0MztcdFx0XHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR9XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXG4gXHQvKiBJZiBkdXBsaWNhdGUgZmlsdGVyaW5nIGRvZXMgbm90IHJlcG9ydCBSU1NJIGNoYW5nZXMsIHRoZW4gcmVzdGFydFxuIFx0ICogc2Nhbm5pbmcgdG8gZW5zdXJlIHVwZGF0ZWQgcmVzdWx0IHdpdGggdXBkYXRlZCBSU1NJIHZhbHVlcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeSYjMzQ7LAogICAgJiMzNDttZ210X2RldmljZV9mb3VuZCYjMzQ7LAogICAgJiMzNDtoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gKGxpa2VseSBVQUYgb3IgZGF0YSByYWNlKSBpbiBCbHVldG9vdGggbWFuYWdlbWVudCBjb2RlIGJ5IGFkZGluZyBzcGlubG9ja3MgYXJvdW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYCBhY2Nlc3Nlcy4gVGhlIGFmZmVjdGVkIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29tbWFuZHMgKGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWApIGFuZCBkZXZpY2Ugc2Nhbm5pbmcgKGBtZ210X2RldmljZV9mb3VuZGApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjgxNGZjNTA4ZWRkNzQxNmNhMThiMzMxNmM5MTc4NGY0NjNlYTYwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMjE6MDU6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IDNkZjU5ODQ5ZGNiZWEuLjgxMTU0MzViNWQyYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC05MTksOSAmIzQzOzkxOSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIAloZGV2LSZndDtkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yZXBvcnRfaW52YWxpZF9yc3NpID0gdHJ1ZTsKIAloZGV2LSZndDtkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7Ci0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwOwogCiAJc3Bpbl9sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IDA7CiAJa2ZyZWUoaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzKTsKIAloZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwppbmRleCAxNjdkNzVlMzQ1MjY2Li4wOTBkMGYwMDg3NGExIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwpAQCAtNjIyMywxMiAmIzQzOzYyMjMsMTQgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LAogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yZXN1bHRfZmlsdGVyaW5nID0gdHJ1ZTsKIAloZGV2LSZndDtkaXNjb3ZlcnkudHlwZSA9IGNwLSZndDt0eXBlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yc3NpID0gY3AtJmd0O3Jzc2k7Ci0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50OwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAKIAlpZiAodXVpZF9jb3VudCAmZ3Q7IDApIHsKIAkJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzID0ga21lbWR1cChjcC0mZ3Q7dXVpZHMsIHV1aWRfY291bnQgKiAxNiwKIAkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgewomIzQzOwkJCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwogCQkJZXJyID0gbWdtdF9jbWRfY29tcGxldGUoc2ssIGhkZXYtJmd0O2lkLAogCQkJCQkJTUdNVF9PUF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWSwKIAkJCQkJCU1HTVRfU1RBVFVTX0ZBSUxFRCwKQEAgLTYyMzgsNiAmIzQzOzYyNDAsOSBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsCiAJCX0KIAl9CiAKJiM0MzsJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50OwomIzQzOwlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKJiM0MzsKIAllcnIgPSBoY2lfY21kX3N5bmNfcXVldWUoaGRldiwgc3RhcnRfZGlzY292ZXJ5X3N5bmMsIGNtZCwKIAkJCQkgc3RhcnRfZGlzY292ZXJ5X2NvbXBsZXRlKTsKIAlpZiAoZXJyICZsdDsgMCkgewpAQCAtMTAzNjcsNiAmIzQzOzEwMzcyLDcgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLAogCSAgICAgIWhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19TVFJJQ1RfRFVQTElDQVRFX0ZJTFRFUikpKSkKIAkJcmV0dXJuICBmYWxzZTsKIAomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAJaWYgKGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50ICE9IDApIHsKIAkJLyogSWYgYSBsaXN0IG9mIFVVSURzIGlzIHByb3ZpZGVkIGluIGZpbHRlciwgcmVzdWx0cyB3aXRoIG5vCiAJCSAqIG1hdGNoaW5nIFVVSUQgc2hvdWxkIGJlIGRyb3BwZWQuCkBAIC0xMDM3NSw5ICYjNDM7MTAzODEsMTIgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLAogCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgJmFtcDsmYW1wOwogCQkgICAgIWVpcl9oYXNfdXVpZHMoc2Nhbl9yc3AsIHNjYW5fcnNwX2xlbiwKIAkJCQkgICBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCwKLQkJCQkgICBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMpKQomIzQzOwkJCQkgICBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9CiAJfQomIzQzOwlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAogCS8qIElmIGR1cGxpY2F0ZSBmaWx0ZXJpbmcgZG9lcyBub3QgcmVwb3J0IFJTU0kgY2hhbmdlcywgdGhlbiByZXN0YXJ0CiAJICogc2Nhbm5pbmcgdG8gZW5zdXJlIHVwZGF0ZWQgcmVzdWx0IHdpdGggdXBkYXRlZCBSU1NJIHZhbHVlcy4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbHVldG9vdGggTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBCbHVldG9vdGggbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvYmx1ZXRvb3RoL21nbXQuY2AgYW5kIGBpbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhleSYjMzk7cmUgZml4aW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24g4oCTIGEgVUFGIG9yIGRhdGEgcmFjZSwgcHJvYmFibHkg4oCTIGJ5IGFkZGluZyBhIHNwaW5sb2NrIGFyb3VuZCBhY2Nlc3MgdG8gYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkc2AuIFNtYXJ0IG1vdmUsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gcmVzb2x2ZSB0aGF0IGtpbmQgb2YgaXNzdWUuCgpOb3csIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgYXJlIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAsIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGFuZCBgaXNfZmlsdGVyX21hdGNoYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgYXJlIGV2ZW4gKnJlYWNoYWJsZSogY29kZSBwYXRocyBhbmQgd2hhdCBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhleSBkZXBlbmQgb24uIExldCYjMzk7cyBzZWUuLi4gYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBhbmQgYGlzX2ZpbHRlcl9tYXRjaGAgYXJlIGJvdGggc3RhdGljIHdpdGhpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gYGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyYCBpcyBpbmxpbmUgaW4gdGhlIGhlYWRlciwgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSBjb21waWxlZCB3aGVuZXZlciBpdCBpcyB1c2VkLgoKQWxyaWdodCwgc28gdG8gdW5kZXJzdGFuZCB0aGUgcmVhY2ggb2YgdGhpcyBjb2RlLCBJIG5lZWQgdG8ga25vdyBob3cgQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaXRzZWxmIGlzIGVuYWJsZWQuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIHNvdXJjZSB0cmVlIHRlbGxzIG1lIHRoYXQgYG5ldC9ibHVldG9vdGgvbWdtdC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlRgIGlzIGVuYWJsZWQuIFRoYXQgZ2l2ZXMgbWUgYSBiYXNpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIHRvIGZpZ3VyZSBvdXQgaG93IGNyaXRpY2FsIHRoaXMgZml4IGlzLiBNb3JlIGludmVzdGlnYXRpb24gaXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhcnRfc2VydmljZV9kaXNjb3ZlcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL21nbXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL21nbXQuYz02MTM1PXN0YXRpYyBpbnQgc3RhcnRfbGltaXRlZF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQyLVxubmV0L2JsdWV0b290aC9tZ210LmM6NjE0MzpzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQ0LVx0XHRcdFx0ICAgdm9pZCAqZGF0YSwgdTE2IGxlbilcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNDUte1xubmV0L2JsdWV0b290aC9tZ210LmM6NjE0NjpcdHN0cnVjdCBtZ210X2NwX3N0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5ICpjcCA9IGRhdGE7XG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQ3LVx0c3RydWN0IG1nbXRfcGVuZGluZ19jbWQgKmNtZDtcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz05NDYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNpX21nbXRfaGFuZGxlciBtZ210X2hhbmRsZXJzW10gPSB7XG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtOTUzOC1cdFx0XHRcdFx0XHRIQ0lfTUdNVF9VTkNPTkZJR1VSRUQgfSxcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjk1Mzk6XHR7IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5LCBNR01UX1NUQVJUX1NFUlZJQ0VfRElTQ09WRVJZX1NJWkUsXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy05NTQwLVx0XHRcdFx0XHRcdEhDSV9NR01UX1ZBUl9MRU4gfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgbWVudGFsIHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWVwIERpdmUgaW50byBTZXJ2aWNlIERpc2NvdmVyeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgIOKAkyB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgdGhlIHRyaWdnZXIsIHRoZSB0aGluZyB0aGF0IHJlc3BvbmRzIHRvIHRoZSBgTUdNVF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWWAgY29tbWFuZC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbml0aWF0aW5nIHRoZSB3aG9sZSBzZXJ2aWNlIGRpc2NvdmVyeSBwcm9jZXNzLiBJdCYjMzk7cyB0aGUgJiMzNDtnbyYjMzQ7IGJ1dHRvbiwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzIGF0IGEgaGlnaCBsZXZlbCwgYW5kIHRoZW4gZGlnIGludG8gdGhlIGRldGFpbHMgbGF0ZXIuCgpOb3csIGdsYW5jaW5nIGF0IGBpc19maWx0ZXJfbWF0Y2hgLi4uIGFoLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiBgbWdtdF9kZXZpY2VfZm91bmRgLiBTbywgSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGEgaHlwb3RoZXNpcy4gYG1nbXRfZGV2aWNlX2ZvdW5kYCBwcm9iYWJseSBpdGVyYXRlcyB0aHJvdWdoIGZvdW5kIGRldmljZXMsIGFuZCBgaXNfZmlsdGVyX21hdGNoYCBpcyB0aGUgZ2F0ZWtlZXBlci4gSXQmIzM5O3MgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIGRlY2lkZSBpZiBhIGRpc2NvdmVyZWQgZGV2aWNlIG1lZXRzIHNvbWUgY3JpdGVyaWEgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkLiBQcm9iYWJseSBiYXNlZCBvbiBmaWx0ZXJzIHNldCB1cCBwcmV2aW91c2x5IGluIHRoZSBjb250ZXh0IG9mIHN0YXJ0aW5nIHNlcnZpY2UgZGlzY292ZXJ5LiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgaW5pdGlhbCBzZXJ2aWNlIGRpc2NvdmVyeSBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGlzaW5nIHRoZSBzZWFyY2gsIGFuZCB0aGUgYGlzX2ZpbHRlcl9tYXRjaGAgZnVuY3Rpb24gZGVmaW5lcyB0aGUgdHlwZSBvZiBkZXZpY2Ugd2Ugc2hvdWxkIGxvb2sgZm9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZmlsdGVyIGFjdHVhbGx5IGNvbnRhaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvbWdtdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvbWdtdC5jPTEwMzAyPXN0YXRpYyBib29sIGVpcl9oYXNfdXVpZHModTggKmVpciwgdTE2IGVpcl9sZW4sIHUxNiB1dWlkX2NvdW50LCB1OCAoKnV1aWRzKVsxNl0pXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtMTAzNTYtXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzoxMDM1NzpzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDM1OC1cdFx0XHQgICAgdTE2IGVpcl9sZW4sIHU4ICpzY2FuX3JzcCwgdTggc2Nhbl9yc3BfbGVuKVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTEwNTc3PXZvaWQgbWdtdF9kZXZpY2VfZm91bmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsIHU4IGxpbmtfdHlwZSxcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDYwNS1cdFx0LyogV2UgYXJlIHVzaW5nIHNlcnZpY2UgZGlzY292ZXJ5ICovXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzoxMDYwNjpcdFx0aWYgKCFpc19maWx0ZXJfbWF0Y2goaGRldiwgcnNzaSwgZWlyLCBlaXJfbGVuLCBzY2FuX3JzcCxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwNjA3LVx0XHRcdFx0ICAgICBzY2FuX3JzcF9sZW4pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MjMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZXZpY2UgRGlzY292ZXJ5IGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIGBtZ210X2RldmljZV9mb3VuZGAgaGFzIHRyaWdnZXJlZCwgbWVhbmluZyB3ZSYjMzk7dmUgZ290IGEgbGl2ZSBvbmUhIFRoaXMgZGV2aWNlIGlzIG5vdyBkZWZpbml0ZWx5IHdpdGhpbiBvdXIgZnV6emluZyBzY29wZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIHNlZSB0aGUgY2hhbmdlcyBhcmUgc29saWQgYW5kIGZ1bmN0aW9uYWwsIGFkZGluZyBsb2NraW5nIG1lY2hhbmlzbXMgdG8gaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMg4oCTIGEga2V5IGNvbnNpZGVyYXRpb24uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHRvIGVuc3VyZSB3ZSYjMzk7cmUgdGFyZ2V0aW5nIHRoZSByaWdodCBzZXR1cC4gSSBrbm93IGBDT05GSUdfQlRgIGlzIHRoZSBiaWcgb25lLCB0aGUgcHJpbWFyeSBCbHVldG9vdGggY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O2xsIG5lZWQuIEJ1dCBJJiMzOTttIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIsIGp1c3QgaW4gY2FzZSB0aGVyZSBhcmUgYW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgbHVya2luZyBhYm91dCB0aGF0IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IuIFdlIG5lZWQgdG8gYmUgZXhoYXVzdGl2ZSB0byBtYXhpbWl6ZSBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZ210X2RldmljZV9mb3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9MTczND1zdGF0aWMgdm9pZCBsZV9zZXRfc2Nhbl9lbmFibGVfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IGVuYWJsZSlcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTE3NTQtXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjE3NTU6XHRcdFx0bWdtdF9kZXZpY2VfZm91bmQoaGRldiwgXHUwMDI2ZC1cdTAwM2VsYXN0X2Fkdl9hZGRyLCBMRV9MSU5LLFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy0xNzU2LVx0XHRcdFx0XHQgIGQtXHUwMDNlbGFzdF9hZHZfYWRkcl90eXBlLCBOVUxMLFxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9MzA0MD1zdGF0aWMgdm9pZCBoY2lfaW5xdWlyeV9yZXN1bHRfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICplZGF0YSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTMwNzUtXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjMwNzY6XHRcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFx1MDAyNmluZm8tXHUwMDNlYmRhZGRyLCBBQ0xfTElOSywgMHgwMCxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtMzA3Ny1cdFx0XHRcdCAgaW5mby1cdTAwM2VkZXZfY2xhc3MsIEhDSV9SU1NJX0lOVkFMSUQsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz00ODQzPXN0YXRpYyB2b2lkIGhjaV9pbnF1aXJ5X3Jlc3VsdF93aXRoX3Jzc2lfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICplZGF0YSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTQ4ODYtXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjQ4ODc6XHRcdFx0bWdtdF9kZXZpY2VfZm91bmQoaGRldiwgXHUwMDI2aW5mby1cdTAwM2ViZGFkZHIsIEFDTF9MSU5LLCAweDAwLFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy00ODg4LVx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZGV2X2NsYXNzLCBpbmZvLVx1MDAzZXJzc2ksXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy00OTE3LVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo0OTE4Olx0XHRcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFx1MDAyNmluZm8tXHUwMDNlYmRhZGRyLCBBQ0xfTElOSywgMHgwMCxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNDkxOS1cdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWRldl9jbGFzcywgaW5mby1cdTAwM2Vyc3NpLFxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9NTEyNj1zdGF0aWMgdm9pZCBoY2lfZXh0ZW5kZWRfaW5xdWlyeV9yZXN1bHRfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICplZGF0YSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTUxNzItXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjUxNzM6XHRcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFx1MDAyNmluZm8tXHUwMDNlYmRhZGRyLCBBQ0xfTElOSywgMHgwMCxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNTE3NC1cdFx0XHRcdCAgaW5mby1cdTAwM2VkZXZfY2xhc3MsIGluZm8tXHUwMDNlcnNzaSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jPTYxNzQ9c3RhdGljIHZvaWQgcHJvY2Vzc19hZHZfcmVwb3J0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCB0eXBlLCBiZGFkZHJfdCAqYmRhZGRyLFxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjI4NS1cdGlmIChoY2lfZGV2X3Rlc3RfZmxhZyhoZGV2LCBIQ0lfTUVTSCkpIHtcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NjI4NjpcdFx0bWdtdF9kZXZpY2VfZm91bmQoaGRldiwgYmRhZGRyLCBMRV9MSU5LLCBiZGFkZHJfdHlwZSwgTlVMTCxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjI4Ny1cdFx0XHRcdCAgcnNzaSwgZmxhZ3MsIGRhdGEsIGxlbiwgTlVMTCwgMCwgaW5zdGFudCk7XG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzAzLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo2MzA0Olx0XHRtZ210X2RldmljZV9mb3VuZChoZGV2LCBiZGFkZHIsIExFX0xJTkssIGJkYWRkcl90eXBlLCBOVUxMLFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzA1LVx0XHRcdFx0ICByc3NpLCBmbGFncywgZGF0YSwgbGVuLCBOVUxMLCAwLCAwKTtcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTYzMzYtXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjYzMzc6XHRcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIGJkYWRkciwgTEVfTElOSywgYmRhZGRyX3R5cGUsIE5VTEwsXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTYzMzgtXHRcdFx0XHQgIHJzc2ksIGZsYWdzLCBkYXRhLCBsZW4sIE5VTEwsIDAsIDApO1xuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjM1Mi1cdFx0aWYgKCFtYXRjaClcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NjM1MzpcdFx0XHRtZ210X2RldmljZV9mb3VuZChoZGV2LCBcdTAwMjZkLVx1MDAzZWxhc3RfYWR2X2FkZHIsIExFX0xJTkssXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTYzNTQtXHRcdFx0XHRcdCAgZC1cdTAwM2VsYXN0X2Fkdl9hZGRyX3R5cGUsIE5VTEwsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzcyLVx0XHRjbGVhcl9wZW5kaW5nX2Fkdl9yZXBvcnQoaGRldik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjYzNzM6XHRcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIGJkYWRkciwgTEVfTElOSywgYmRhZGRyX3R5cGUsIE5VTEwsXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTYzNzQtXHRcdFx0XHQgIHJzc2ksIGZsYWdzLCBkYXRhLCBsZW4sIE5VTEwsIDAsIDApO1xuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjM4MS1cdCAqL1xubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo2MzgyOlx0bWdtdF9kZXZpY2VfZm91bmQoaGRldiwgXHUwMDI2ZC1cdTAwM2VsYXN0X2Fkdl9hZGRyLCBMRV9MSU5LLFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzgzLVx0XHRcdCAgZC1cdTAwM2VsYXN0X2Fkdl9hZGRyX3R5cGUsIE5VTEwsIHJzc2ksIGQtXHUwMDNlbGFzdF9hZHZfZmxhZ3MsXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmM9MTA1MTE9c3RhdGljIHZvaWQgbWVzaF9kZXZpY2VfZm91bmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtMTA1NzYtXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzoxMDU3Nzp2b2lkIG1nbXRfZGV2aWNlX2ZvdW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCBsaW5rX3R5cGUsXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDU3OC1cdFx0ICAgICAgIHU4IGFkZHJfdHlwZSwgdTggKmRldl9jbGFzcywgczggcnNzaSwgdTMyIGZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwOTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipEZWNvZGluZyBUaGlzIFNlcnZpY2UgRGlzY292ZXJ5IEZsb3cqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhpcyBzeXN0ZW0gc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYSBzZXJ2aWNlIGRpc2NvdmVyeSBwcm9jZXNzLCB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudDogYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IGdldHMgb3VyIGF0dGVudGlvbi4KClRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIGlzIHRoZSBgbWdtdF9kZXZpY2VfZm91bmRgIGV2ZW50LiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEEgbWFuYWdlbWVudCBkZXZpY2UgaGFzIGJlZW4gaWRlbnRpZmllZC4gVGhpcyBldmVudCAqaW1tZWRpYXRlbHkqIGNhbGxzIGBpc19maWx0ZXJfbWF0Y2hgLiBTbywgd2UmIzM5O3JlIGV2YWx1YXRpbmcgc29tZSBzb3J0IG9mIGZpbHRlciBjcml0ZXJpYSAqZXZlcnkgdGltZSogYSBwb3RlbnRpYWwgbWFuYWdlbWVudCBkZXZpY2UgaXMgZm91bmQuIFRoaXMgaXMgbGlrZWx5IGEga2V5IG9wdGltaXphdGlvbiBwb2ludCwgb3IgbWF5YmUgaXTigJlzIGEgZmlsdGVyaW5nIG1lY2hhbmlzbSB0aGF04oCZcyB1c2VkIHRvIGRlY2lkZSBpZiB0aGUgZGV2aWNlIGlzIHNvbWV0aGluZyB3ZSB3YW50IHRvIG1hbmFnZS4KCk5vdywgdGhhdCBgaXNfZmlsdGVyX21hdGNoYCBjYWxsIGlzIGNydWNpYWwuIFdoYXQgYXJlIHRoZSBmaWx0ZXIgcGFyYW1ldGVycz8gSXMgdGhlIGZ1bmN0aW9uIGNvbXBsZXg/IEFyZSB3ZSBjb21wYXJpbmcgYWdhaW5zdCBtdWx0aXBsZSBmaWx0ZXIgcHJvZmlsZXM/IFNwZWVkIGlzIHBhcmFtb3VudCwgd2UgbmVlZCB0byBrbm93IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy4gQW55IGJvdHRsZW5lY2tzIHRoZXJlIGFyZSBjcml0aWNhbCB0byBhZGRyZXNzLgoKRmluYWxseSwgd2UmIzM5O3ZlIGdvdCBgaGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXJgLiBUaGlzIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgc2hvcnQgYW5kIHN3ZWV0LiBUaGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZ2V0dGluZyAqY2FsbGVkKj8gVGhpcyBjbGVhcmluZyBzdGVwIGxpa2VseSBoYXMgYSBjb3JyZXNwb25kaW5nIHNldHVwIHN0ZXAuIFRoZSBgY2xlYXJgIGluZGljYXRlcyB3ZSYjMzk7cmUgc2V0dGluZyB1cCBhIG5ldyBmaWx0ZXIsIG9yIGNsZWFyaW5nIGFuIG9sZCBvbmUuIEZpbmRpbmcgd2hlcmUgdGhlIGZpbHRlciBpcyAqc2V0KiBhbmQgaG93IGl04oCZcyAqcG9wdWxhdGVkKiB3aWxsIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhpcyBkaXNjb3ZlcnkgZmlsdGVyaW5nIHN0cmF0ZWd5LiBUaGlzIGNsZWFudXAgaW5kaWNhdGVzIGEgbmV3IGRpc2NvdmVyeSBwcm9jZXNzIGlzIGJlaW5nIGtpY2tlZCBvZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9oY2lfY29yZS5jPTI3MDY9dm9pZCBoY2lfcmVsZWFzZV9kZXYoc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4tLVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTI3MjctXHRoY2lfY29ubl9wYXJhbXNfY2xlYXJfYWxsKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjI3Mjg6XHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0yNzI5LVx0aGNpX2Jsb2NrZWRfa2V5c19jbGVhcihoZGV2KTtcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9MzI4MT1pbnQgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtMzMwNy1cdCAqL1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjMzMDg6XHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMzA5LVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYwNTc9c3RhdGljIGludCBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MDk4LVx0ICovXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MDk5Olx0aGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXIoaGRldik7XG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTAwLVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYxNDM9c3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYyMjAtXHQgKi9cbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYyMjE6XHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYyMjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZ1bmN0aW9uIENhbGxzIGFuZCBQcmlvcml0aXppbmcgRm9jdXMgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGVzZSBmdW5jdGlvbiBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUuIEkgc2VlIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgZ2V0cyBjYWxsZWQgZnJvbSBxdWl0ZSBhIGZldyBwbGFjZXM6IGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWxgLCBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2AsIGFuZCBgaGNpX3JlbGVhc2VfZGV2YC4gSSB0aGluayB0aGUgbW9zdCByZWxldmFudCBvbmVzIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdyBhcmUgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbGAsIGFuZCBgbWdtdF9kZXZpY2VfZm91bmRgLgoKVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzaWduYXR1cmVzIG9mIGBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWxgIGFuZCBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgIHRvIHNlZSBpZiB0aGV5JiMzOTtyZSBzdGF0aWMuIEFoLCB5ZXMsIHRoZXkgKmFyZSogc3RhdGljLiBXaGlsZSBJICpjb3VsZCogbGlzdCB0aGVtIGluIEZvY3VzU3ltYm9scywgdGhlIHByZWZlcmVuY2UgaXMgYWx3YXlzIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpZiB3ZSBjYW4gZmluZCB0aGVtLiBXZSB3YW50IHRoZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQgd2FpdCBhIG1vbWVudC4uLiB0aGF0IHByb21wdCBkb2VzIHNheSB3ZSBzaG91bGQgcHJlZmVyIG5vbi1zdGF0aWMgYW5kIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyEKClRoaW5raW5nIHRocm91Z2ggdGhpcy4uLiBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzIHBhcnQgb2YgYW4gYXJyYXkgb2YgaGFuZGxlcnMsIHNvIGl0JiMzOTtzIHByb2JhYmx5ICpub3QqIGlubGluZWQuIE9uIHRoZSBvdGhlciBoYW5kLCBgc3RhcnRfZGlzY292ZXJ5X2ludGVybmFsYD8gVGhhdCBvbmUgbWlnaHQgYWN0dWFsbHkgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIEdvb2QgdG8ga2VlcCBpbiBtaW5kLgoKRmluYWxseSwgYG1nbXRfZGV2aWNlX2ZvdW5kYCBpcyB0aGFua2Z1bGx5IGEgbm9uLXN0YXRpYyBmdW5jdGlvbi4gV2UgaGF2ZSBhIGNsZWFyIHdpbm5lciB0aGVyZSEgSSBzaG91bGQgY2hlY2sgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9tZ210LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9tZ210LmM9NjEzNT1zdGF0aWMgaW50IHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtNjE0Mi1cbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNDM6c3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxubmV0L2JsdWV0b290aC9tZ210LmMtNjE0NC1cdFx0XHRcdCAgIHZvaWQgKmRhdGEsIHUxNiBsZW4pXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQ1LXtcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNDY6XHRzdHJ1Y3QgbWdtdF9jcF9zdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeSAqY3AgPSBkYXRhO1xubmV0L2JsdWV0b290aC9tZ210LmMtNjE0Ny1cdHN0cnVjdCBtZ210X3BlbmRpbmdfY21kICpjbWQ7XG4tLVxubmV0L2JsdWV0b290aC9tZ210LmM9OTQ2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGhjaV9tZ210X2hhbmRsZXIgbWdtdF9oYW5kbGVyc1tdID0ge1xuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jLTk1MzgtXHRcdFx0XHRcdFx0SENJX01HTVRfVU5DT05GSUdVUkVEIH0sXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo5NTM5Olx0eyBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeSwgTUdNVF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWV9TSVpFLFxubmV0L2JsdWV0b290aC9tZ210LmMtOTU0MC1cdFx0XHRcdFx0XHRIQ0lfTUdNVF9WQVJfTEVOIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJsdWV0b290aCBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0LiBUaGUgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBoYW5kbGVyJiMzOTtzIGFkZHJlc3MgaXMgZGVmaW5pdGVseSBiZWluZyB0YWtlbiwgc28gaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiBUaGVuLCBgbWdtdF9kZXZpY2VfZm91bmRgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSBpdHMgbW9kdWxlLiBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2AgaXMgYWxzbyBub24tc3RhdGljLCBzbyBpdCYjMzk7cyBub3QgaGlkZGVuIHdpdGhpbiBhIHNpbmdsZSBjb21waWxhdGlvbiB1bml0IGVpdGhlci4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgY29uc2lkZXIgdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEJsdWV0b290aCB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBPYnZpb3VzbHksIGBDT05GSUdfQlRgIGlzIHRoZSBmdW5kYW1lbnRhbCBvbmUsIGJ1dCBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgbW9yZSBncmFudWxhciBzZXR0aW5ncyBmb3IgQmx1ZXRvb3RoIG1hbmFnZW1lbnQgc3BlY2lmaWNhbGx5LiBUbyBiZSB0aG9yb3VnaCwgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aG9zZSBpcyBwcm9iYWJseSBpbiB0aGUgYG5ldC9ibHVldG9vdGgvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEJsdWV0b290aCBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIEJUXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtCbHVldG9vdGggc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gIVMzOTBcbiAgIDk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMTA6XHRcdHNlbGVjdCBDUkMxNlxuICAxMTpcdFx0c2VsZWN0IENSWVBUT1xuICAxMjpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTXG4gIDEzOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiAgMTQ6XHRcdHNlbGVjdCBDUllQVE9fRUNESFxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBCbHVldG9vdGggaXMgbG93LWNvc3QsIGxvdy1wb3dlciwgc2hvcnQtcmFuZ2Ugd2lyZWxlc3MgdGVjaG5vbG9neS5cbiAgMTc6XHRcdCAgSXQgd2FzIGRlc2lnbmVkIGFzIGEgcmVwbGFjZW1lbnQgZm9yIGNhYmxlcyBhbmQgb3RoZXIgc2hvcnQtcmFuZ2VcbiAgMTg6XHRcdCAgdGVjaG5vbG9naWVzIGxpa2UgSXJEQS4gIEJsdWV0b290aCBvcGVyYXRlcyBpbiBwZXJzb25hbCBhcmVhIHJhbmdlXG4gIDE5Olx0XHQgIHRoYXQgdHlwaWNhbGx5IGV4dGVuZHMgdXAgdG8gMTAgbWV0ZXJzLiAgTW9yZSBpbmZvcm1hdGlvbiBhYm91dFxuICAyMDpcdFx0ICBCbHVldG9vdGggY2FuIGJlIGZvdW5kIGF0IFx1MDAzY2h0dHBzOi8vd3d3LmJsdWV0b290aC5jb20vXHUwMDNlLlxuICAyMTpcdFxuICAyMjpcdFx0ICBMaW51eCBCbHVldG9vdGggc3Vic3lzdGVtIGNvbnNpc3Qgb2Ygc2V2ZXJhbCBsYXllcnM6XG4gIDIzOlx0XHQgICAgIEJsdWV0b290aCBDb3JlXG4gIDI0Olx0XHRcdEhDSSBkZXZpY2UgYW5kIGNvbm5lY3Rpb24gbWFuYWdlciwgc2NoZWR1bGVyXG4gIDI1Olx0XHRcdFNDTyBhdWRpbyBsaW5rc1xuICAyNjpcdFx0XHRMMkNBUCAoTG9naWNhbCBMaW5rIENvbnRyb2wgYW5kIEFkYXB0YXRpb24gUHJvdG9jb2wpXG4gIDI3Olx0XHRcdFNNUCAoU2VjdXJpdHkgTWFuYWdlciBQcm90b2NvbCkgb24gTEUgKExvdyBFbmVyZ3kpIGxpbmtzXG4gIDI4Olx0XHRcdElTTyBpc29jaHJvbm91cyBsaW5rc1xuICAyOTpcdFx0ICAgICBIQ0kgRGV2aWNlIGRyaXZlcnMgKEludGVyZmFjZSB0byB0aGUgaGFyZHdhcmUpXG4gIDMwOlx0XHQgICAgIFJGQ09NTSBNb2R1bGUgKFJGQ09NTSBQcm90b2NvbCkgIFxuICAzMTpcdFx0ICAgICBCTkVQIE1vZHVsZSAoQmx1ZXRvb3RoIE5ldHdvcmsgRW5jYXBzdWxhdGlvbiBQcm90b2NvbClcbiAgMzI6XHRcdCAgICAgSElEUCBNb2R1bGUgKEh1bWFuIEludGVyZmFjZSBEZXZpY2UgUHJvdG9jb2wpXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBCbHVldG9vdGggc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cbiAgMzU6XHRcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGUgKGJsdWV0b290aCkuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIFRvIHVzZSBMaW51eCBCbHVldG9vdGggc3Vic3lzdGVtLCB5b3Ugd2lsbCBuZWVkIHNldmVyYWwgdXNlci1zcGFjZVxuICAzODpcdFx0ICB1dGlsaXRpZXMgbGlrZSBoY2ljb25maWcgYW5kIGJsdWV0b290aGQuICBUaGVzZSB1dGlsaXRpZXMgYW5kIHVwZGF0ZXNcbiAgMzk6XHRcdCAgdG8gQmx1ZXRvb3RoIGtlcm5lbCBtb2R1bGVzIGFyZSBwcm92aWRlZCBpbiB0aGUgQmx1ZVogcGFja2FnZXMuICBGb3JcbiAgNDA6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFx1MDAzY2h0dHA6Ly93d3cuYmx1ZXoub3JnL1x1MDAzZS5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlRfQlJFRFJcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7Qmx1ZXRvb3RoIENsYXNzaWMgKEJSL0VEUikgZmVhdHVyZXNcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlRcbiAgNDU6XHRcdGRlZmF1bHQgeVxuICA0NjpcdFx0aGVscFxuICA0NzpcdFx0ICBCbHVldG9vdGggQ2xhc3NpYyBpbmNsdWRlcyBzdXBwb3J0IGZvciBCYXNpYyBSYXRlIChCUilcbiAgNDg6XHRcdCAgYXZhaWxhYmxlIHdpdGggQmx1ZXRvb3RoIHZlcnNpb24gMS4wYiBvciBsYXRlciBhbmQgc3VwcG9ydFxuICA0OTpcdFx0ICBmb3IgRW5oYW5jZWQgRGF0YSBSYXRlIChFRFIpIGF2YWlsYWJsZSB3aXRoIEJsdWV0b290aFxuICA1MDpcdFx0ICB2ZXJzaW9uIDIuMCBvciBsYXRlci5cbiAgNTE6XHRcbiAgNTI6XHRzb3VyY2UgXCYjMzQ7bmV0L2JsdWV0b290aC9yZmNvbW0vS2NvbmZpZ1wmIzM0O1xuICA1MzpcdFxuICA1NDpcdHNvdXJjZSBcJiMzNDtuZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZ1wmIzM0O1xuICA1NTpcdFxuICA1NjpcdHNvdXJjZSBcJiMzNDtuZXQvYmx1ZXRvb3RoL2hpZHAvS2NvbmZpZ1wmIzM0O1xuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBCVF9MRVxuICA1OTpcdFx0Ym9vbCBcJiMzNDtCbHVldG9vdGggTG93IEVuZXJneSAoTEUpIGZlYXR1cmVzXCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIEJUXG4gIDYxOlx0XHRkZWZhdWx0IHlcbiAgNjI6XHRcdGhlbHBcbiAgNjM6XHRcdCAgQmx1ZXRvb3RoIExvdyBFbmVyZ3kgaW5jbHVkZXMgc3VwcG9ydCBsb3ctZW5lcmd5IHBoeXNpY2FsXG4gIDY0Olx0XHQgIGxheWVyIGF2YWlsYWJsZSB3aXRoIEJsdWV0b290aCB2ZXJzaW9uIDQuMCBvciBsYXRlci5cbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgQlRfTEVfTDJDQVBfRUNSRURcbiAgNjc6XHRcdGJvb2wgXCYjMzQ7Qmx1ZXRvb3RoIEwyQ0FQIEVuaGFuY2VkIENyZWRpdCBGbG93IENvbnRyb2xcJiMzNDtcbiAgNjg6XHRcdGRlcGVuZHMgb24gQlRfTEVcbiAgNjk6XHRcdGRlZmF1bHQgeVxuICA3MDpcdFx0aGVscFxuICA3MTpcdFx0ICBCbHVldG9vdGggTG93IEVuZXJneSBMMkNBUCBFbmhhbmNlZCBDcmVkaXQgRmxvdyBDb250cm9sIGF2YWlsYWJsZSB3aXRoXG4gIDcyOlx0XHQgIEJsdWV0b290aCB2ZXJzaW9uIDUuMiBvciBsYXRlci5cbiAgNzM6XHRcbiAgNzQ6XHRcdCAgVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGJsdWV0b290aC5lbmFibGVfZWNyZWQ9WzF8MF1cbiAgNzU6XHRcdCAgb24gdGhlIGtlcm5lbCBjb21tYW5kbGluZS5cbiAgNzY6XHRcbiAgNzc6XHRjb25maWcgQlRfNkxPV1BBTlxuICA3ODpcdFx0dHJpc3RhdGUgXCYjMzQ7Qmx1ZXRvb3RoIDZMb1dQQU4gc3VwcG9ydFwmIzM0O1xuICA3OTpcdFx0ZGVwZW5kcyBvbiBCVF9MRSBcdTAwMjZcdTAwMjYgNkxPV1BBTlxuICA4MDpcdFx0aGVscFxuICA4MTpcdFx0ICBJUHY2IGNvbXByZXNzaW9uIG92ZXIgQmx1ZXRvb3RoIExvdyBFbmVyZ3kuXG4gIDgyOlx0XG4gIDgzOlx0Y29uZmlnIEJUX0xFRFNcbiAgODQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xuICA4NTpcdFx0ZGVwZW5kcyBvbiBCVFxuICA4NjpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTXG4gIDg3Olx0XHRzZWxlY3QgTEVEU19UUklHR0VSU1xuICA4ODpcdFx0aGVscFxuICA4OTpcdFx0ICBUaGlzIG9wdGlvbiBzZWxlY3RzIGEgZmV3IExFRCB0cmlnZ2VycyBmb3IgZGlmZmVyZW50XG4gIDkwOlx0XHQgIEJsdWV0b290aCBldmVudHMuXG4gIDkxOlx0XG4gIDkyOlx0Y29uZmlnIEJUX01TRlRFWFRcbiAgOTM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIE1pY3Jvc29mdCBleHRlbnNpb25zXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIEJUXG4gIDk1Olx0XHRoZWxwXG4gIDk2Olx0XHQgIFRoaXMgb3B0aW9ucyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNaWNyb3NvZnQgZGVmaW5lZCBIQ0lcbiAgOTc6XHRcdCAgdmVuZG9yIGV4dGVuc2lvbnMuXG4gIDk4Olx0XG4gIDk5Olx0Y29uZmlnIEJUX0FPU1BFWFRcbiAxMDA6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBleHRlbnNpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIEJsdWV0b290aCBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYXNzZXNzZWQgdGhlIHBhdGNoLiBCYXNlZCBvbiB3aGF0IEkgc2VlLCBgQ09ORklHX0JUYCBhbG9uZSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgZnV6emluZy4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSByZWFzb25pbmc6IHRoZSBmaXggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHByb2JhYmx5IGEgVXNlLUFmdGVyLUZyZWUgb3IgZGF0YSByYWNlLCB3aXRoaW4gdGhlIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvZGUuIEl0IGludHJvZHVjZXMgc3BpbmxvY2tzIHRvIHByb3RlY3QgYWNjZXNzZXMgdG8gYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkc2AuIFRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSB0cmlnZ2VyZWQgYnkgQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29tbWFuZHMsIHNwZWNpZmljYWxseSBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLCBhbmQgZHVyaW5nIGRldmljZSBzY2FubmluZywgdGhyb3VnaCBgbWdtdF9kZXZpY2VfZm91bmRgLgoKSW5pdGlhbGx5LCBJIGhhZCBhIGxpc3Qgb2YgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYG1nbXRfZGV2aWNlX2ZvdW5kYCwgYW5kIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYCBhcyBrZXkgc3ltYm9scyB0byB0YXJnZXQuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IHRoZXNlIHN5bWJvbCBzZWxlY3Rpb25zLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBmdXp6aW5nIHByb21wdCBndWlkZWxpbmVzLiBJdCBwb2ludGVkIG91dCB0aGF0IEkgc2hvdWxkIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuCgpJIHBhdXNlZCB0byBjaGVjayBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLiBUaG91Z2ggaXQmIzM5O3MgKmRlY2xhcmVkKiBhcyBzdGF0aWMsIGl04oCZcyBhY3R1YWxseSBhIGhhbmRsZXIgd2l0aGluIHRoZSBgbWdtdF9oYW5kbGVyc2AgYXJyYXkuIEJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4sIGl0IGRvZXNuJiMzOTt0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoaXMgbWFrZXMgaXQgYW4gQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb24gZm9yIHRoZSBtYW5hZ2VtZW50IEFQSSDigJMgc28gaXQgYWJzb2x1dGVseSBmaXRzIHRoZSBjcml0ZXJpYS4gSSBjYW4gaW5jbHVkZSBpdCBpbiB0aGUgbGlzdC4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgYGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmNgLCBidXQgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIG92ZXJhbGwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjE6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz0zMTUxPXN0YXRpYyBpbnQgaGNpX3Bhc3NpdmVfc2Nhbl9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMjgwLSAqL1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjMyODE6aW50IGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtMzI4Mi17XG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jPTMzNjY9c3RhdGljIGludCB1cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtMzM2Ny17XG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM6MzM2ODpcdHJldHVybiBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTMzNjktfVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz02MDg2PWludCBoY2lfdXBkYXRlX2Nvbm5lY3RhYmxlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTYxMTMtXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM6NjExNDpcdHJldHVybiBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTYxMTUtfVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz02MTQ2PXN0YXRpYyBpbnQgaGNpX2FjdGl2ZV9zY2FuX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQxNl90IGludGVydmFsKVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy02MjEyLVx0LyogUmVzdW1lIHBhc3NpdmUgc2Nhbm5pbmcgKi9cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzo2MjEzOlx0aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy02MjE0LVx0cmV0dXJuIGVycjtcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9NjM4Nz1pbnQgaGNpX3N1c3BlbmRfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNjQ0MC1cdC8qIFVwZGF0ZSBMRSBwYXNzaXZlIHNjYW4gaWYgZW5hYmxlZCAqL1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjY0NDE6XHRoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTY0NDItXG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jPTY0ODQ9c3RhdGljIGludCBoY2lfcmVzdW1lX3NjYW5fc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNjQ5My1cdC8qIFJlc2V0IHBhc3NpdmUgc2Nhbm5pbmcgdG8gbm9ybWFsICovXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM6NjQ5NDpcdGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoaGRldik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNjQ5NS1cbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9NzM4Nz1zdGF0aWMgaW50IGhjaV9sZV9wYV9jcmVhdGVfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSlcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNzQxMy1cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzo3NDE0Olx0LyogTWFyayBIQ0lfQ09OTl9DUkVBVEVfUEFfU1lOQyBzbyBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jIGNhblxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTc0MTUtXHQgKiBwcm9ncmFtIHRoZSBhZGRyZXNzIGluIHRoZSBhbGxvdyBsaXN0IHNvIFBBIGFkdmVydGlzZW1lbnRzIGNhbiBiZVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy03NDE5LVxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjc0MjA6XHRoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTc0MjEtXG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTc0OTQtXHQvKiBVcGRhdGUgcGFzc2l2ZSBzY2FuIHNpbmNlIEhDSV9QQV9TWU5DIGZsYWcgaGFzIGJlZW4gY2xlYXJlZCAqL1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjc0OTU6XHRoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTc0OTYtXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmM9MjIwNT1zdGF0aWMgaW50IHNldF9tZXNoX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtMjIzOS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jOjIyNDA6XHRoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKGhkZXYpO1xubmV0L2JsdWV0b290aC9tZ210LmMtMjI0MS1cdHJldHVybiAwO1xuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTc3NjQ9c3RhdGljIGludCBhZGRfZGV2aWNlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy03NzY1LXtcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjc3NjY6XHRyZXR1cm4gaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTc3NjctfVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTc4OTI9c3RhdGljIGludCByZW1vdmVfZGV2aWNlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy03ODkzLXtcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjc4OTQ6XHRyZXR1cm4gaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTc4OTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM4MQoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjYW4gU3luY2hyb25pemF0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGhlcmUuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgZ29pbmcgdG8gZHJpdmUgdGhlIGxvZ2ljIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLgoKTm93LCBsZXQmIzM5O3Mgc2VlLCB3ZSYjMzk7dmUgZ290IGEgc2V0IG9mIGZvY3VzIHN5bWJvbHMgdGhhdCByZWxhdGUgdG8gdGhlIHNlcnZpY2UgZGlzY292ZXJ5IGFuZCBkZXZpY2UgbWFuYWdlbWVudCB3aGljaCBpbmNsdWRlcyBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLCBgbWdtdF9kZXZpY2VfZm91bmRgLCBhbmQgb3VyIG1haW4gZnVuY3Rpb24gb2YgY29uY2VybiwgYGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmNgLiBTZWVtcyByZWFzb25hYmxlLiBBbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHdlIG5lZWQgdG8gZW5zdXJlIGFyZSBlbmFibGVkIGFyZSBhbGwgdW5kZXIgYEJUYC4KCk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IHJlc3VsdHMgYXJlIGJlaW5nIGNvbmZpZ3VyZWQgd2l0aCBhIGNhbGwgdG8gc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O21nbXRfZGV2aWNlX2ZvdW5kJiMzNDssCiAgICAmIzM0O2hjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiAobGlrZWx5IFVBRiBvciBkYXRhIHJhY2UpIGluIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvZGUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHNgIGFjY2Vzc2VzLiBUaGUgYWZmZWN0ZWQgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBCbHVldG9vdGggbWFuYWdlbWVudCBjb21tYW5kcyAoYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCkgYW5kIGRldmljZSBzY2FubmluZyAoYG1nbXRfZGV2aWNlX2ZvdW5kYCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfc2VydmljZV9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7bWdtdF9kZXZpY2VfZm91bmQmIzM0OywKICAgICYjMzQ7aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIChsaWtlbHkgVUFGIG9yIGRhdGEgcmFjZSkgaW4gQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29kZSBieSBhZGRpbmcgc3BpbmxvY2tzIGFyb3VuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkc2AgYWNjZXNzZXMuIFRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvbW1hbmRzIChgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgKSBhbmQgZGV2aWNlIHNjYW5uaW5nIChgbWdtdF9kZXZpY2VfZm91bmRgKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjE6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNwaW5sb2NrIHByb3RlY3Rpb24gYXJvdW5kIHRoZSBhY2Nlc3NlcyB0byBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkc2AgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMgKHN1Y2ggYXMgZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBvciBLQVNBTi4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjgxNGZjNTA4ZWRkNzQxNmNhMThiMzMxNmM5MTc4NGY0NjNlYTYwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMjE6MDU6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IDNkZjU5ODQ5ZGNiZWEuLjgxMTU0MzViNWQyYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC05MTksOSAmIzQzOzkxOSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIAloZGV2LSZndDtkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yZXBvcnRfaW52YWxpZF9yc3NpID0gdHJ1ZTsKIAloZGV2LSZndDtkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7Ci0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwOwogCiAJc3Bpbl9sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IDA7CiAJa2ZyZWUoaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzKTsKIAloZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwppbmRleCAxNjdkNzVlMzQ1MjY2Li4wOTBkMGYwMDg3NGExIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwpAQCAtNjIyMywxMiAmIzQzOzYyMjMsMTQgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LAogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yZXN1bHRfZmlsdGVyaW5nID0gdHJ1ZTsKIAloZGV2LSZndDtkaXNjb3ZlcnkudHlwZSA9IGNwLSZndDt0eXBlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yc3NpID0gY3AtJmd0O3Jzc2k7Ci0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50OwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAKIAlpZiAodXVpZF9jb3VudCAmZ3Q7IDApIHsKIAkJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzID0ga21lbWR1cChjcC0mZ3Q7dXVpZHMsIHV1aWRfY291bnQgKiAxNiwKIAkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgewomIzQzOwkJCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwogCQkJZXJyID0gbWdtdF9jbWRfY29tcGxldGUoc2ssIGhkZXYtJmd0O2lkLAogCQkJCQkJTUdNVF9PUF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWSwKIAkJCQkJCU1HTVRfU1RBVFVTX0ZBSUxFRCwKQEAgLTYyMzgsNiAmIzQzOzYyNDAsOSBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsCiAJCX0KIAl9CiAKJiM0MzsJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50OwomIzQzOwlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKJiM0MzsKIAllcnIgPSBoY2lfY21kX3N5bmNfcXVldWUoaGRldiwgc3RhcnRfZGlzY292ZXJ5X3N5bmMsIGNtZCwKIAkJCQkgc3RhcnRfZGlzY292ZXJ5X2NvbXBsZXRlKTsKIAlpZiAoZXJyICZsdDsgMCkgewpAQCAtMTAzNjcsNiAmIzQzOzEwMzcyLDcgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLAogCSAgICAgIWhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19TVFJJQ1RfRFVQTElDQVRFX0ZJTFRFUikpKSkKIAkJcmV0dXJuICBmYWxzZTsKIAomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAJaWYgKGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50ICE9IDApIHsKIAkJLyogSWYgYSBsaXN0IG9mIFVVSURzIGlzIHByb3ZpZGVkIGluIGZpbHRlciwgcmVzdWx0cyB3aXRoIG5vCiAJCSAqIG1hdGNoaW5nIFVVSUQgc2hvdWxkIGJlIGRyb3BwZWQuCkBAIC0xMDM3NSw5ICYjNDM7MTAzODEsMTIgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLAogCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgJmFtcDsmYW1wOwogCQkgICAgIWVpcl9oYXNfdXVpZHMoc2Nhbl9yc3AsIHNjYW5fcnNwX2xlbiwKIAkJCQkgICBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCwKLQkJCQkgICBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMpKQomIzQzOwkJCQkgICBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9CiAJfQomIzQzOwlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAogCS8qIElmIGR1cGxpY2F0ZSBmaWx0ZXJpbmcgZG9lcyBub3QgcmVwb3J0IFJTU0kgY2hhbmdlcywgdGhlbiByZXN0YXJ0CiAJICogc2Nhbm5pbmcgdG8gZW5zdXJlIHVwZGF0ZWQgcmVzdWx0IHdpdGggdXBkYXRlZCBSU1NJIHZhbHVlcy4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTcKCQkJCQkJCW91dHB1dDogMTE2CgkJCQkJCQl0aG91Z2h0czogNTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmx1ZXRvb3RoIERpc2NvdmVyeSBGaWx0ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGZhaXJseSBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIHRvdWNoaW5nIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAsIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGFuZCBgaXNfZmlsdGVyX21hdGNoYCBpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgIGFuZCBhbHNvIHRoZSByZWxldmFudCBoZWFkZXIsIGBoY2lfY29yZS5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgYWRkaW5nIGBzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jaylgIGFyb3VuZCBhY2Nlc3NlcyB0byBgaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzYC4KCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIGlzIGEgY2xhc3NpY2FsIHJhY2UgY29uZGl0aW9uIGZpeC4gSXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgdG8gYHV1aWRfY291bnRgIGFuZCBgdXVpZHNgLiBUaGlzIGNvdWxkIG1hbmlmZXN0IGFzIGEgZGF0YSByYWNlLCBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBldmVuIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlmIHRoaW5ncyBnZXQgdHJ1bHkgb3V0IG9mIHN5bmMuIEdvb2QgY2F0Y2guCgpJJiMzOTt2ZSB0YWtlbiBhIHF1aWNrIGxvb2sgYXQgdGhlIGNvZGUgc25pcHBldHMuIFRoZSBwYXRjaCBpcyB3cmFwcGluZyB0aGUgYWNjZXNzZXMgdG8gdGhlIHNoYXJlZCB2YXJpYWJsZXMgd2l0aCBhIGxvY2suIFRoZSBmaXJzdCBjb2RlIGJsb2NrIGxvb2tzIGNsZWFuLiBUaGUgc2Vjb25kIGxvb2tzIGxpa2UgaXQgaXMgZml4aW5nIGEgZG91YmxlIGZyZWUgYnkgcHJvdGVjdGluZyB0aGUgbWVtb3J5IGNvcHkgYW5kIHRoZSB0aGlyZCBsb29rcyBsaWtlIGl0JiMzOTtzIHByb3RlY3RpbmcgYWNjZXNzIHRvIGB1dWlkX2NvdW50YCB3aGVuIGRldGVybWluaW5nIGlmIGEgVVVJRCBtYXRjaGVzLiBJdCBjb25maXJtcyBteSBhc3N1bXB0aW9uLgoKYGBgYwogCXNwaW5fbG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKJiM0MzsJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwOwogCWtmcmVlKGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcyk7CiAJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzID0gTlVMTDsKIAlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKYGBgCgpgYGBjCi0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50OwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAKIAlpZiAodXVpZF9jb3VudCAmZ3Q7IDApIHsKIAkJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzID0ga21lbWR1cChjcC0mZ3Q7dXVpZHMsIHV1aWRfY291bnQgKiAxNiwKIAkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgewomIzQzOwkJCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwouLi4KIAkJfQogCX0KIAomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwpgYGAKCmBgYGMKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwogCWlmIChoZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCAhPSAwKSB7Ci4uLgotCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykpCiYjNDM7CQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykpIHsKJiM0MzsJCQlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KIAl9CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwpgYGAKClRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0JiMzOTtzIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gd291bGRuJiMzOTt0IGJlIHJlbGV2YW50LiBUaGUgYnVnIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIHdvdWxkIHByb2JhYmx5IGJlIGZsYWdnZWQgYnkgS0NTQU4gb3IgS0FTQU4sIGFzc3VtaW5nIHRoZSByYWNlIHJlc3VsdHMgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0JiMzOTtzIGEgY29uY3VycmVuY3kgZml4LCBwbGFpbiBhbmQgc2ltcGxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNwaW5sb2NrIHByb3RlY3Rpb24gYXJvdW5kIHRoZSBhY2Nlc3NlcyB0byBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkc2AgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMgKHN1Y2ggYXMgZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBvciBLQVNBTi4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3BpbmxvY2sgcHJvdGVjdGlvbiBhcm91bmQgdGhlIGFjY2Vzc2VzIHRvIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGlzc3VlcyAoc3VjaCBhcyBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtDU0FOIG9yIEtBU0FOLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMTowNTo0NC45NjI3NDk4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzA5OTg4MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfc2VydmljZV9kaXNjb3ZlcnlcIixcbiAgICBcIm1nbXRfZGV2aWNlX2ZvdW5kXCIsXG4gICAgXCJoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHNwaW5sb2NrIHByb3RlY3Rpb24gYXJvdW5kIHRoZSBhY2Nlc3NlcyB0byBgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzYCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGlzc3VlcyAoc3VjaCBhcyBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtDU0FOIG9yIEtBU0FOLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gKGxpa2VseSBVQUYgb3IgZGF0YSByYWNlKSBpbiBCbHVldG9vdGggbWFuYWdlbWVudCBjb2RlIGJ5IGFkZGluZyBzcGlubG9ja3MgYXJvdW5kIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHNgIGFjY2Vzc2VzLiBUaGUgYWZmZWN0ZWQgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBCbHVldG9vdGggbWFuYWdlbWVudCBjb21tYW5kcyAoYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCkgYW5kIGRldmljZSBzY2FubmluZyAoYG1nbXRfZGV2aWNlX2ZvdW5kYCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA1OjQ0Ljk2Mjc1NTkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ5MTI3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmODE0ZmM1MDhlZGQ3NDE2Y2ExOGIzMzE2YzkxNzg0ZjQ2M2VhNjBkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMjE6MDU6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxcbmluZGV4IDNkZjU5ODQ5ZGNiZWEuLjgxMTU0MzViNWQyYWYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxcbkBAIC05MTksOSArOTE5LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbiBcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlO1xcbiBcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkucmVwb3J0X2ludmFsaWRfcnNzaSA9IHRydWU7XFxuIFxcdGhkZXYtXFx1MDAzZWRpc2NvdmVyeS5yc3NpID0gSENJX1JTU0lfSU5WQUxJRDtcXG4tXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZoZGV2LVxcdTAwM2VkaXNjb3ZlcnkubG9jayk7XFxuK1xcdGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcXG4gXFx0a2ZyZWUoaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzKTtcXG4gXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0gTlVMTDtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xcbmluZGV4IDE2N2Q3NWUzNDUyNjYuLjA5MGQwZjAwODc0YTEgMTAwNjQ0XFxuLS0tIGEvbmV0L2JsdWV0b290aC9tZ210LmNcXG4rKysgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xcbkBAIC02MjIzLDEyICs2MjIzLDE0IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcXG4gXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSB0cnVlO1xcbiBcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudHlwZSA9IGNwLVxcdTAwM2V0eXBlO1xcbiBcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkucnNzaSA9IGNwLVxcdTAwM2Vyc3NpO1xcbi1cXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG4gXFxuIFxcdGlmICh1dWlkX2NvdW50IFxcdTAwM2UgMCkge1xcbiBcXHRcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBrbWVtZHVwKGNwLVxcdTAwM2V1dWlkcywgdXVpZF9jb3VudCAqIDE2LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG4gXFx0XFx0aWYgKCFoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHMpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG4gXFx0XFx0XFx0ZXJyID0gbWdtdF9jbWRfY29tcGxldGUoc2ssIGhkZXYtXFx1MDAzZWlkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRNR01UX09QX1NUQVJUX1NFUlZJQ0VfRElTQ09WRVJZLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRNR01UX1NUQVRVU19GQUlMRUQsXFxuQEAgLTYyMzgsNiArNjI0MCw5IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZoZGV2LVxcdTAwM2VkaXNjb3ZlcnkubG9jayk7XFxuK1xcbiBcXHRlcnIgPSBoY2lfY21kX3N5bmNfcXVldWUoaGRldiwgc3RhcnRfZGlzY292ZXJ5X3N5bmMsIGNtZCxcXG4gXFx0XFx0XFx0XFx0IHN0YXJ0X2Rpc2NvdmVyeV9jb21wbGV0ZSk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuQEAgLTEwMzY3LDYgKzEwMzcyLDcgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxcbiBcXHQgICAgICFoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU1RSSUNUX0RVUExJQ0FURV9GSUxURVIpKSkpXFxuIFxcdFxcdHJldHVybiAgZmFsc2U7XFxuIFxcbitcXHRzcGluX2xvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG4gXFx0aWYgKGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ICE9IDApIHtcXG4gXFx0XFx0LyogSWYgYSBsaXN0IG9mIFVVSURzIGlzIHByb3ZpZGVkIGluIGZpbHRlciwgcmVzdWx0cyB3aXRoIG5vXFxuIFxcdFxcdCAqIG1hdGNoaW5nIFVVSUQgc2hvdWxkIGJlIGRyb3BwZWQuXFxuQEAgLTEwMzc1LDkgKzEwMzgxLDEyIEBAIHN0YXRpYyBib29sIGlzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgczggcnNzaSwgdTggKmVpcixcXG4gXFx0XFx0XFx0XFx0ICAgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIWVpcl9oYXNfdXVpZHMoc2Nhbl9yc3AsIHNjYW5fcnNwX2xlbixcXG4gXFx0XFx0XFx0XFx0ICAgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQsXFxuLVxcdFxcdFxcdFxcdCAgIGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkcykpXFxuK1xcdFxcdFxcdFxcdCAgIGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkcykpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG4gXFxuIFxcdC8qIElmIGR1cGxpY2F0ZSBmaWx0ZXJpbmcgZG9lcyBub3QgcmVwb3J0IFJTU0kgY2hhbmdlcywgdGhlbiByZXN0YXJ0XFxuIFxcdCAqIHNjYW5uaW5nIHRvIGVuc3VyZSB1cGRhdGVkIHJlc3VsdCB3aXRoIHVwZGF0ZWQgUlNTSSB2YWx1ZXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA1OjQ1LjQ3ODQyNDUyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM0ODgzNzk4Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfc2VydmljZV9kaXNjb3ZlcnlcIixcbiAgICBcIm1nbXRfZGV2aWNlX2ZvdW5kXCIsXG4gICAgXCJoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiAobGlrZWx5IFVBRiBvciBkYXRhIHJhY2UpIGluIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvZGUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkc2AgYWNjZXNzZXMuIFRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvbW1hbmRzIChgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgKSBhbmQgZGV2aWNlIHNjYW5uaW5nIChgbWdtdF9kZXZpY2VfZm91bmRgKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjgxNGZjNTA4ZWRkNzQxNmNhMThiMzMxNmM5MTc4NGY0NjNlYTYwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMjE6MDU6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXG5pbmRleCAzZGY1OTg0OWRjYmVhLi44MTE1NDM1YjVkMmFmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXG5AQCAtOTE5LDkgKzkxOSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSBmYWxzZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlcG9ydF9pbnZhbGlkX3Jzc2kgPSB0cnVlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xuIFx0a2ZyZWUoaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBOVUxMO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuaW5kZXggMTY3ZDc1ZTM0NTI2Ni4uMDkwZDBmMDA4NzRhMSAxMDA2NDRcbi0tLSBhL25ldC9ibHVldG9vdGgvbWdtdC5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuQEAgLTYyMjMsMTIgKzYyMjMsMTQgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IHRydWU7XG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS50eXBlID0gY3AtXHUwMDNldHlwZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJzc2kgPSBjcC1cdTAwM2Vyc3NpO1xuLVx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXG4gXHRpZiAodXVpZF9jb3VudCBcdTAwM2UgMCkge1xuIFx0XHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcyA9IGttZW1kdXAoY3AtXHUwMDNldXVpZHMsIHV1aWRfY291bnQgKiAxNixcbiBcdFx0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykge1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0XHRcdGVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LVx1MDAzZWlkLFxuIFx0XHRcdFx0XHRcdE1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUlksXG4gXHRcdFx0XHRcdFx0TUdNVF9TVEFUVVNfRkFJTEVELFxuQEAgLTYyMzgsNiArNjI0MCw5IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4rXHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcbiBcdGVyciA9IGhjaV9jbWRfc3luY19xdWV1ZShoZGV2LCBzdGFydF9kaXNjb3Zlcnlfc3luYywgY21kLFxuIFx0XHRcdFx0IHN0YXJ0X2Rpc2NvdmVyeV9jb21wbGV0ZSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG5AQCAtMTAzNjcsNiArMTAzNzIsNyBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsXG4gXHQgICAgICFoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU1RSSUNUX0RVUExJQ0FURV9GSUxURVIpKSkpXG4gXHRcdHJldHVybiAgZmFsc2U7XG4gXG4rXHRzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXHRpZiAoaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCAhPSAwKSB7XG4gXHRcdC8qIElmIGEgbGlzdCBvZiBVVUlEcyBpcyBwcm92aWRlZCBpbiBmaWx0ZXIsIHJlc3VsdHMgd2l0aCBub1xuIFx0XHQgKiBtYXRjaGluZyBVVUlEIHNob3VsZCBiZSBkcm9wcGVkLlxuQEAgLTEwMzc1LDkgKzEwMzgxLDEyIEBAIHN0YXRpYyBib29sIGlzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgczggcnNzaSwgdTggKmVpcixcbiBcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFlaXJfaGFzX3V1aWRzKHNjYW5fcnNwLCBzY2FuX3JzcF9sZW4sXG4gXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50LFxuLVx0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpKVxuK1x0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4gXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcbiBcdC8qIElmIGR1cGxpY2F0ZSBmaWx0ZXJpbmcgZG9lcyBub3QgcmVwb3J0IFJTU0kgY2hhbmdlcywgdGhlbiByZXN0YXJ0XG4gXHQgKiBzY2FubmluZyB0byBlbnN1cmUgdXBkYXRlZCByZXN1bHQgd2l0aCB1cGRhdGVkIFJTU0kgdmFsdWVzLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDU6NDUuNDc4NDI2MDg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3NTAxODMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbHVldG9vdGggTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgIGFuZCBgaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3Mgc2VlIHdoYXQgdGhleSdyZSBmaXhpbmcuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIOKAkyBhIFVBRiBvciBkYXRhIHJhY2UsIHByb2JhYmx5IOKAkyBieSBhZGRpbmcgYSBzcGlubG9jayBhcm91bmQgYWNjZXNzIHRvIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYC4gU21hcnQgbW92ZSwgdGhhdCdzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIHJlc29sdmUgdGhhdCBraW5kIG9mIGlzc3VlLlxuXG5Ob3csIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgYXJlIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAsIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGFuZCBgaXNfZmlsdGVyX21hdGNoYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgYXJlIGV2ZW4gKnJlYWNoYWJsZSogY29kZSBwYXRocyBhbmQgd2hhdCBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhleSBkZXBlbmQgb24uIExldCdzIHNlZS4uLiBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgIGFuZCBgaXNfZmlsdGVyX21hdGNoYCBhcmUgYm90aCBzdGF0aWMgd2l0aGluIGBuZXQvYmx1ZXRvb3RoL21nbXQuY2AsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgaXMgaW5saW5lIGluIHRoZSBoZWFkZXIsIHdoaWNoIG1lYW5zIGl0IHdpbGwgYmUgY29tcGlsZWQgd2hlbmV2ZXIgaXQgaXMgdXNlZC5cblxuQWxyaWdodCwgc28gdG8gdW5kZXJzdGFuZCB0aGUgcmVhY2ggb2YgdGhpcyBjb2RlLCBJIG5lZWQgdG8ga25vdyBob3cgQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaXRzZWxmIGlzIGVuYWJsZWQuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIHNvdXJjZSB0cmVlIHRlbGxzIG1lIHRoYXQgYG5ldC9ibHVldG9vdGgvbWdtdC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlRgIGlzIGVuYWJsZWQuIFRoYXQgZ2l2ZXMgbWUgYSBiYXNpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIHRvIGZpZ3VyZSBvdXQgaG93IGNyaXRpY2FsIHRoaXMgZml4IGlzLiBNb3JlIGludmVzdGlnYXRpb24gaXMgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMTowNTo1MC40NTM0NDYyOTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYwNDI0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhcnRfc2VydmljZV9kaXNjb3ZlcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aC9tZ210LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JsdWV0b290aC9tZ210LmM9NjEzNT1zdGF0aWMgaW50IHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQyLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNDM6c3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNDQtXFx0XFx0XFx0XFx0ICAgdm9pZCAqZGF0YSwgdTE2IGxlbilcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQ1LXtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MTQ2OlxcdHN0cnVjdCBtZ210X2NwX3N0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5ICpjcCA9IGRhdGE7XFxubmV0L2JsdWV0b290aC9tZ210LmMtNjE0Ny1cXHRzdHJ1Y3QgbWdtdF9wZW5kaW5nX2NtZCAqY21kO1xcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmM9OTQ2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGhjaV9tZ210X2hhbmRsZXIgbWdtdF9oYW5kbGVyc1tdID0ge1xcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmMtOTUzOC1cXHRcXHRcXHRcXHRcXHRcXHRIQ0lfTUdNVF9VTkNPTkZJR1VSRUQgfSxcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo5NTM5OlxcdHsgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnksIE1HTVRfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUllfU0laRSxcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy05NTQwLVxcdFxcdFxcdFxcdFxcdFxcdEhDSV9NR01UX1ZBUl9MRU4gfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDU6NTAuNTA5NDk0MTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg4NDgzNzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgbWVudGFsIHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVlcCBEaXZlIGludG8gU2VydmljZSBEaXNjb3ZlcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkga2V5aW5nIGluIG9uIHRoZSBhcmNoaXRlY3R1cmUuIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAg4oCTIHRoYXQncyB0aGUgZW50cnkgcG9pbnQsIHRoZSB0cmlnZ2VyLCB0aGUgdGhpbmcgdGhhdCByZXNwb25kcyB0byB0aGUgYE1HTVRfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUllgIGNvbW1hbmQuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBJdCdzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbml0aWF0aW5nIHRoZSB3aG9sZSBzZXJ2aWNlIGRpc2NvdmVyeSBwcm9jZXNzLiBJdCdzIHRoZSBcImdvXCIgYnV0dG9uLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGRvZXMgYXQgYSBoaWdoIGxldmVsLCBhbmQgdGhlbiBkaWcgaW50byB0aGUgZGV0YWlscyBsYXRlci5cblxuTm93LCBnbGFuY2luZyBhdCBgaXNfZmlsdGVyX21hdGNoYC4uLiBhaCwgdGhhdCdzIGludGVyZXN0aW5nLiBJdCdzIGJlaW5nIHVzZWQgd2l0aGluIGBtZ210X2RldmljZV9mb3VuZGAuIFNvLCBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBhIGh5cG90aGVzaXMuIGBtZ210X2RldmljZV9mb3VuZGAgcHJvYmFibHkgaXRlcmF0ZXMgdGhyb3VnaCBmb3VuZCBkZXZpY2VzLCBhbmQgYGlzX2ZpbHRlcl9tYXRjaGAgaXMgdGhlIGdhdGVrZWVwZXIuIEl0J3MgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIGRlY2lkZSBpZiBhIGRpc2NvdmVyZWQgZGV2aWNlIG1lZXRzIHNvbWUgY3JpdGVyaWEgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkLiBQcm9iYWJseSBiYXNlZCBvbiBmaWx0ZXJzIHNldCB1cCBwcmV2aW91c2x5IGluIHRoZSBjb250ZXh0IG9mIHN0YXJ0aW5nIHNlcnZpY2UgZGlzY292ZXJ5LiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgaW5pdGlhbCBzZXJ2aWNlIGRpc2NvdmVyeSBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGlzaW5nIHRoZSBzZWFyY2gsIGFuZCB0aGUgYGlzX2ZpbHRlcl9tYXRjaGAgZnVuY3Rpb24gZGVmaW5lcyB0aGUgdHlwZSBvZiBkZXZpY2Ugd2Ugc2hvdWxkIGxvb2sgZm9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZmlsdGVyIGFjdHVhbGx5IGNvbnRhaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDU6NTMuNzk3OTgwNjczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODU1MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2ZpbHRlcl9tYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL21nbXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDMwMj1zdGF0aWMgYm9vbCBlaXJfaGFzX3V1aWRzKHU4ICplaXIsIHUxNiBlaXJfbGVuLCB1MTYgdXVpZF9jb3VudCwgdTggKCp1dWlkcylbMTZdKVxcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmMtMTAzNTYtXFxubmV0L2JsdWV0b290aC9tZ210LmM6MTAzNTc6c3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwMzU4LVxcdFxcdFxcdCAgICB1MTYgZWlyX2xlbiwgdTggKnNjYW5fcnNwLCB1OCBzY2FuX3JzcF9sZW4pXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDU3Nz12b2lkIG1nbXRfZGV2aWNlX2ZvdW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCBsaW5rX3R5cGUsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDYwNS1cXHRcXHQvKiBXZSBhcmUgdXNpbmcgc2VydmljZSBkaXNjb3ZlcnkgKi9cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzoxMDYwNjpcXHRcXHRpZiAoIWlzX2ZpbHRlcl9tYXRjaChoZGV2LCByc3NpLCBlaXIsIGVpcl9sZW4sIHNjYW5fcnNwLFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwNjA3LVxcdFxcdFxcdFxcdCAgICAgc2Nhbl9yc3BfbGVuKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDU6NTMuODc0ODQxNjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI1MTI2NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRldmljZSBEaXNjb3ZlcnkgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBgbWdtdF9kZXZpY2VfZm91bmRgIGhhcyB0cmlnZ2VyZWQsIG1lYW5pbmcgd2UndmUgZ290IGEgbGl2ZSBvbmUhIFRoaXMgZGV2aWNlIGlzIG5vdyBkZWZpbml0ZWx5IHdpdGhpbiBvdXIgZnV6emluZyBzY29wZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjYW4gc2VlIHRoZSBjaGFuZ2VzIGFyZSBzb2xpZCBhbmQgZnVuY3Rpb25hbCwgYWRkaW5nIGxvY2tpbmcgbWVjaGFuaXNtcyB0byBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyDigJMgYSBrZXkgY29uc2lkZXJhdGlvbi5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHRvIGVuc3VyZSB3ZSdyZSB0YXJnZXRpbmcgdGhlIHJpZ2h0IHNldHVwLiBJIGtub3cgYENPTkZJR19CVGAgaXMgdGhlIGJpZyBvbmUsIHRoZSBwcmltYXJ5IEJsdWV0b290aCBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdsbCBuZWVkLiBCdXQgSSdtIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIsIGp1c3QgaW4gY2FzZSB0aGVyZSBhcmUgYW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgbHVya2luZyBhYm91dCB0aGF0IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IuIFdlIG5lZWQgdG8gYmUgZXhoYXVzdGl2ZSB0byBtYXhpbWl6ZSBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQyMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA1OjU3LjU5OTk3MDUxOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc4ODU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZ210X2RldmljZV9mb3VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jPTE3MzQ9c3RhdGljIHZvaWQgbGVfc2V0X3NjYW5fZW5hYmxlX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBlbmFibGUpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTE3NTQtXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzoxNzU1OlxcdFxcdFxcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFxcdTAwMjZkLVxcdTAwM2VsYXN0X2Fkdl9hZGRyLCBMRV9MSU5LLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtMTc1Ni1cXHRcXHRcXHRcXHRcXHQgIGQtXFx1MDAzZWxhc3RfYWR2X2FkZHJfdHlwZSwgTlVMTCxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9MzA0MD1zdGF0aWMgdm9pZCBoY2lfaW5xdWlyeV9yZXN1bHRfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICplZGF0YSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtMzA3NS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjMwNzY6XFx0XFx0bWdtdF9kZXZpY2VfZm91bmQoaGRldiwgXFx1MDAyNmluZm8tXFx1MDAzZWJkYWRkciwgQUNMX0xJTkssIDB4MDAsXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy0zMDc3LVxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlZGV2X2NsYXNzLCBIQ0lfUlNTSV9JTlZBTElELFxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz00ODQzPXN0YXRpYyB2b2lkIGhjaV9pbnF1aXJ5X3Jlc3VsdF93aXRoX3Jzc2lfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICplZGF0YSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNDg4Ni1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjQ4ODc6XFx0XFx0XFx0bWdtdF9kZXZpY2VfZm91bmQoaGRldiwgXFx1MDAyNmluZm8tXFx1MDAzZWJkYWRkciwgQUNMX0xJTkssIDB4MDAsXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy00ODg4LVxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlZGV2X2NsYXNzLCBpbmZvLVxcdTAwM2Vyc3NpLFxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy00OTE3LVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NDkxODpcXHRcXHRcXHRtZ210X2RldmljZV9mb3VuZChoZGV2LCBcXHUwMDI2aW5mby1cXHUwMDNlYmRhZGRyLCBBQ0xfTElOSywgMHgwMCxcXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTQ5MTktXFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VkZXZfY2xhc3MsIGluZm8tXFx1MDAzZXJzc2ksXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jPTUxMjY9c3RhdGljIHZvaWQgaGNpX2V4dGVuZGVkX2lucXVpcnlfcmVzdWx0X2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZWRhdGEsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTUxNzItXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo1MTczOlxcdFxcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFxcdTAwMjZpbmZvLVxcdTAwM2ViZGFkZHIsIEFDTF9MSU5LLCAweDAwLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNTE3NC1cXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWRldl9jbGFzcywgaW5mby1cXHUwMDNlcnNzaSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9NjE3ND1zdGF0aWMgdm9pZCBwcm9jZXNzX2Fkdl9yZXBvcnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHR5cGUsIGJkYWRkcl90ICpiZGFkZHIsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTYyODUtXFx0aWYgKGhjaV9kZXZfdGVzdF9mbGFnKGhkZXYsIEhDSV9NRVNIKSkge1xcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NjI4NjpcXHRcXHRtZ210X2RldmljZV9mb3VuZChoZGV2LCBiZGFkZHIsIExFX0xJTkssIGJkYWRkcl90eXBlLCBOVUxMLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjI4Ny1cXHRcXHRcXHRcXHQgIHJzc2ksIGZsYWdzLCBkYXRhLCBsZW4sIE5VTEwsIDAsIGluc3RhbnQpO1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzAzLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NjMwNDpcXHRcXHRtZ210X2RldmljZV9mb3VuZChoZGV2LCBiZGFkZHIsIExFX0xJTkssIGJkYWRkcl90eXBlLCBOVUxMLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjMwNS1cXHRcXHRcXHRcXHQgIHJzc2ksIGZsYWdzLCBkYXRhLCBsZW4sIE5VTEwsIDAsIDApO1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzM2LVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NjMzNzpcXHRcXHRtZ210X2RldmljZV9mb3VuZChoZGV2LCBiZGFkZHIsIExFX0xJTkssIGJkYWRkcl90eXBlLCBOVUxMLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjMzOC1cXHRcXHRcXHRcXHQgIHJzc2ksIGZsYWdzLCBkYXRhLCBsZW4sIE5VTEwsIDAsIDApO1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzUyLVxcdFxcdGlmICghbWF0Y2gpXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo2MzUzOlxcdFxcdFxcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFxcdTAwMjZkLVxcdTAwM2VsYXN0X2Fkdl9hZGRyLCBMRV9MSU5LLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjM1NC1cXHRcXHRcXHRcXHRcXHQgIGQtXFx1MDAzZWxhc3RfYWR2X2FkZHJfdHlwZSwgTlVMTCxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjM3Mi1cXHRcXHRjbGVhcl9wZW5kaW5nX2Fkdl9yZXBvcnQoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo2MzczOlxcdFxcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIGJkYWRkciwgTEVfTElOSywgYmRhZGRyX3R5cGUsIE5VTEwsXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02Mzc0LVxcdFxcdFxcdFxcdCAgcnNzaSwgZmxhZ3MsIGRhdGEsIGxlbiwgTlVMTCwgMCwgMCk7XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTYzODEtXFx0ICovXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo2MzgyOlxcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFxcdTAwMjZkLVxcdTAwM2VsYXN0X2Fkdl9hZGRyLCBMRV9MSU5LLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjM4My1cXHRcXHRcXHQgIGQtXFx1MDAzZWxhc3RfYWR2X2FkZHJfdHlwZSwgTlVMTCwgcnNzaSwgZC1cXHUwMDNlbGFzdF9hZHZfZmxhZ3MsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDUxMT1zdGF0aWMgdm9pZCBtZXNoX2RldmljZV9mb3VuZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkcixcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwNTc2LVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjEwNTc3OnZvaWQgbWdtdF9kZXZpY2VfZm91bmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsIHU4IGxpbmtfdHlwZSxcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDU3OC1cXHRcXHQgICAgICAgdTggYWRkcl90eXBlLCB1OCAqZGV2X2NsYXNzLCBzOCByc3NpLCB1MzIgZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA1OjU3LjY2Mjc2Mzg1N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTAxMzI0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKkRlY29kaW5nIFRoaXMgU2VydmljZSBEaXNjb3ZlcnkgRmxvdyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhpcyBzeXN0ZW0gc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYSBzZXJ2aWNlIGRpc2NvdmVyeSBwcm9jZXNzLCB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudDogYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQgZ2V0cyBvdXIgYXR0ZW50aW9uLlxuXG5UaGUgbmV4dCBjcml0aWNhbCBwaWVjZSBpcyB0aGUgYG1nbXRfZGV2aWNlX2ZvdW5kYCBldmVudC4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBBIG1hbmFnZW1lbnQgZGV2aWNlIGhhcyBiZWVuIGlkZW50aWZpZWQuIFRoaXMgZXZlbnQgKmltbWVkaWF0ZWx5KiBjYWxscyBgaXNfZmlsdGVyX21hdGNoYC4gU28sIHdlJ3JlIGV2YWx1YXRpbmcgc29tZSBzb3J0IG9mIGZpbHRlciBjcml0ZXJpYSAqZXZlcnkgdGltZSogYSBwb3RlbnRpYWwgbWFuYWdlbWVudCBkZXZpY2UgaXMgZm91bmQuIFRoaXMgaXMgbGlrZWx5IGEga2V5IG9wdGltaXphdGlvbiBwb2ludCwgb3IgbWF5YmUgaXTigJlzIGEgZmlsdGVyaW5nIG1lY2hhbmlzbSB0aGF04oCZcyB1c2VkIHRvIGRlY2lkZSBpZiB0aGUgZGV2aWNlIGlzIHNvbWV0aGluZyB3ZSB3YW50IHRvIG1hbmFnZS5cblxuTm93LCB0aGF0IGBpc19maWx0ZXJfbWF0Y2hgIGNhbGwgaXMgY3J1Y2lhbC4gV2hhdCBhcmUgdGhlIGZpbHRlciBwYXJhbWV0ZXJzPyBJcyB0aGUgZnVuY3Rpb24gY29tcGxleD8gQXJlIHdlIGNvbXBhcmluZyBhZ2FpbnN0IG11bHRpcGxlIGZpbHRlciBwcm9maWxlcz8gU3BlZWQgaXMgcGFyYW1vdW50LCB3ZSBuZWVkIHRvIGtub3cgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLiBBbnkgYm90dGxlbmVja3MgdGhlcmUgYXJlIGNyaXRpY2FsIHRvIGFkZHJlc3MuXG5cbkZpbmFsbHksIHdlJ3ZlIGdvdCBgaGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXJgLiBUaGlzIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQncyBwcm9iYWJseSBzaG9ydCBhbmQgc3dlZXQuIFRoZSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBnZXR0aW5nICpjYWxsZWQqPyBUaGlzIGNsZWFyaW5nIHN0ZXAgbGlrZWx5IGhhcyBhIGNvcnJlc3BvbmRpbmcgc2V0dXAgc3RlcC4gVGhlIGBjbGVhcmAgaW5kaWNhdGVzIHdlJ3JlIHNldHRpbmcgdXAgYSBuZXcgZmlsdGVyLCBvciBjbGVhcmluZyBhbiBvbGQgb25lLiBGaW5kaW5nIHdoZXJlIHRoZSBmaWx0ZXIgaXMgKnNldCogYW5kIGhvdyBpdOKAmXMgKnBvcHVsYXRlZCogd2lsbCBnaXZlIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgZGlzY292ZXJ5IGZpbHRlcmluZyBzdHJhdGVneS4gVGhpcyBjbGVhbnVwIGluZGljYXRlcyBhIG5ldyBkaXNjb3ZlcnkgcHJvY2VzcyBpcyBiZWluZyBraWNrZWQgb2ZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDk0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDY6MDEuNjUyODk5MjE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYxNDQ5OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JsdWV0b290aC9oY2lfY29yZS5jPTI3MDY9dm9pZCBoY2lfcmVsZWFzZV9kZXYoc3RydWN0IGhjaV9kZXYgKmhkZXYpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMjcyNy1cXHRoY2lfY29ubl9wYXJhbXNfY2xlYXJfYWxsKGhkZXYpO1xcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYzoyNzI4OlxcdGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKGhkZXYpO1xcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0yNzI5LVxcdGhjaV9ibG9ja2VkX2tleXNfY2xlYXIoaGRldik7XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9MzI4MT1pbnQgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMzA3LVxcdCAqL1xcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzozMzA4OlxcdGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKGhkZXYpO1xcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMzA5LVxcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmM9NjA1Nz1zdGF0aWMgaW50IHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmMtNjA5OC1cXHQgKi9cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MDk5OlxcdGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKGhkZXYpO1xcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxMDAtXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz02MTQzPXN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYyMjAtXFx0ICovXFxubmV0L2JsdWV0b290aC9tZ210LmM6NjIyMTpcXHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MjIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMTowNjowMS43NjkwNjk2NjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0NTg2MDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRnVuY3Rpb24gQ2FsbHMgYW5kIFByaW9yaXRpemluZyBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBmdW5jdGlvbiBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUuIEkgc2VlIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgZ2V0cyBjYWxsZWQgZnJvbSBxdWl0ZSBhIGZldyBwbGFjZXM6IGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWxgLCBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2AsIGFuZCBgaGNpX3JlbGVhc2VfZGV2YC4gSSB0aGluayB0aGUgbW9zdCByZWxldmFudCBvbmVzIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdyBhcmUgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbGAsIGFuZCBgbWdtdF9kZXZpY2VfZm91bmRgLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHNpZ25hdHVyZXMgb2YgYHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbGAgYW5kIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAgdG8gc2VlIGlmIHRoZXkncmUgc3RhdGljLiBBaCwgeWVzLCB0aGV5ICphcmUqIHN0YXRpYy4gV2hpbGUgSSAqY291bGQqIGxpc3QgdGhlbSBpbiBGb2N1c1N5bWJvbHMsIHRoZSBwcmVmZXJlbmNlIGlzIGFsd2F5cyBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgaWYgd2UgY2FuIGZpbmQgdGhlbS4gV2Ugd2FudCB0aGUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gQnV0IHdhaXQgYSBtb21lbnQuLi4gdGhhdCBwcm9tcHQgZG9lcyBzYXkgd2Ugc2hvdWxkIHByZWZlciBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMhXG5cblRoaW5raW5nIHRocm91Z2ggdGhpcy4uLiBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgIGlzIHN0YXRpYywgYnV0IGl0J3MgcGFydCBvZiBhbiBhcnJheSBvZiBoYW5kbGVycywgc28gaXQncyBwcm9iYWJseSAqbm90KiBpbmxpbmVkLiBPbiB0aGUgb3RoZXIgaGFuZCwgYHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbGA/IFRoYXQgb25lIG1pZ2h0IGFjdHVhbGx5IGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBHb29kIHRvIGtlZXAgaW4gbWluZC5cblxuRmluYWxseSwgYG1nbXRfZGV2aWNlX2ZvdW5kYCBpcyB0aGFua2Z1bGx5IGEgbm9uLXN0YXRpYyBmdW5jdGlvbi4gV2UgaGF2ZSBhIGNsZWFyIHdpbm5lciB0aGVyZSEgSSBzaG91bGQgY2hlY2sgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDY6MDYuNzE0OTMzNzMzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzgwNzQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL21nbXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL21nbXQuYz02MTM1PXN0YXRpYyBpbnQgc3RhcnRfbGltaXRlZF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNDItXFxubmV0L2JsdWV0b290aC9tZ210LmM6NjE0MzpzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxubmV0L2JsdWV0b290aC9tZ210LmMtNjE0NC1cXHRcXHRcXHRcXHQgICB2b2lkICpkYXRhLCB1MTYgbGVuKVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNDUte1xcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNDY6XFx0c3RydWN0IG1nbXRfY3Bfc3RhcnRfc2VydmljZV9kaXNjb3ZlcnkgKmNwID0gZGF0YTtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQ3LVxcdHN0cnVjdCBtZ210X3BlbmRpbmdfY21kICpjbWQ7XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz05NDYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNpX21nbXRfaGFuZGxlciBtZ210X2hhbmRsZXJzW10gPSB7XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy05NTM4LVxcdFxcdFxcdFxcdFxcdFxcdEhDSV9NR01UX1VOQ09ORklHVVJFRCB9LFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjk1Mzk6XFx0eyBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeSwgTUdNVF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWV9TSVpFLFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTk1NDAtXFx0XFx0XFx0XFx0XFx0XFx0SENJX01HTVRfVkFSX0xFTiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMTowNjowNi43Nzg3NDUxMjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MjM0MDE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0LiBUaGUgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBoYW5kbGVyJ3MgYWRkcmVzcyBpcyBkZWZpbml0ZWx5IGJlaW5nIHRha2VuLCBzbyBpdCB3b24ndCBiZSBpbmxpbmVkLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiBUaGVuLCBgbWdtdF9kZXZpY2VfZm91bmRgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgdmlzaWJsZSBvdXRzaWRlIGl0cyBtb2R1bGUuIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHNvIGl0J3Mgbm90IGhpZGRlbiB3aXRoaW4gYSBzaW5nbGUgY29tcGlsYXRpb24gdW5pdCBlaXRoZXIuXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBjb25zaWRlciB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQmx1ZXRvb3RoIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuIE9idmlvdXNseSwgYENPTkZJR19CVGAgaXMgdGhlIGZ1bmRhbWVudGFsIG9uZSwgYnV0IEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBtb3JlIGdyYW51bGFyIHNldHRpbmdzIGZvciBCbHVldG9vdGggbWFuYWdlbWVudCBzcGVjaWZpY2FsbHkuIFRvIGJlIHRob3JvdWdoLCB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRob3NlIGlzIHByb2JhYmx5IGluIHRoZSBgbmV0L2JsdWV0b290aC9LY29uZmlnYCBmaWxlLiBJJ2xsIHRha2UgYSBsb29rIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA2OjEwLjY2MTA4NzUwNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmx1ZXRvb3RoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEJsdWV0b290aCBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIEJUXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQmx1ZXRvb3RoIHN1YnN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiAhUzM5MFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMTA6XFx0XFx0c2VsZWN0IENSQzE2XFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAxMjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNcXG4gIDEzOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IENSWVBUT19FQ0RIXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIEJsdWV0b290aCBpcyBsb3ctY29zdCwgbG93LXBvd2VyLCBzaG9ydC1yYW5nZSB3aXJlbGVzcyB0ZWNobm9sb2d5LlxcbiAgMTc6XFx0XFx0ICBJdCB3YXMgZGVzaWduZWQgYXMgYSByZXBsYWNlbWVudCBmb3IgY2FibGVzIGFuZCBvdGhlciBzaG9ydC1yYW5nZVxcbiAgMTg6XFx0XFx0ICB0ZWNobm9sb2dpZXMgbGlrZSBJckRBLiAgQmx1ZXRvb3RoIG9wZXJhdGVzIGluIHBlcnNvbmFsIGFyZWEgcmFuZ2VcXG4gIDE5OlxcdFxcdCAgdGhhdCB0eXBpY2FsbHkgZXh0ZW5kcyB1cCB0byAxMCBtZXRlcnMuICBNb3JlIGluZm9ybWF0aW9uIGFib3V0XFxuICAyMDpcXHRcXHQgIEJsdWV0b290aCBjYW4gYmUgZm91bmQgYXQgXFx1MDAzY2h0dHBzOi8vd3d3LmJsdWV0b290aC5jb20vXFx1MDAzZS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBMaW51eCBCbHVldG9vdGggc3Vic3lzdGVtIGNvbnNpc3Qgb2Ygc2V2ZXJhbCBsYXllcnM6XFxuICAyMzpcXHRcXHQgICAgIEJsdWV0b290aCBDb3JlXFxuICAyNDpcXHRcXHRcXHRIQ0kgZGV2aWNlIGFuZCBjb25uZWN0aW9uIG1hbmFnZXIsIHNjaGVkdWxlclxcbiAgMjU6XFx0XFx0XFx0U0NPIGF1ZGlvIGxpbmtzXFxuICAyNjpcXHRcXHRcXHRMMkNBUCAoTG9naWNhbCBMaW5rIENvbnRyb2wgYW5kIEFkYXB0YXRpb24gUHJvdG9jb2wpXFxuICAyNzpcXHRcXHRcXHRTTVAgKFNlY3VyaXR5IE1hbmFnZXIgUHJvdG9jb2wpIG9uIExFIChMb3cgRW5lcmd5KSBsaW5rc1xcbiAgMjg6XFx0XFx0XFx0SVNPIGlzb2Nocm9ub3VzIGxpbmtzXFxuICAyOTpcXHRcXHQgICAgIEhDSSBEZXZpY2UgZHJpdmVycyAoSW50ZXJmYWNlIHRvIHRoZSBoYXJkd2FyZSlcXG4gIDMwOlxcdFxcdCAgICAgUkZDT01NIE1vZHVsZSAoUkZDT01NIFByb3RvY29sKSAgXFxuICAzMTpcXHRcXHQgICAgIEJORVAgTW9kdWxlIChCbHVldG9vdGggTmV0d29yayBFbmNhcHN1bGF0aW9uIFByb3RvY29sKVxcbiAgMzI6XFx0XFx0ICAgICBISURQIE1vZHVsZSAoSHVtYW4gSW50ZXJmYWNlIERldmljZSBQcm90b2NvbClcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgQmx1ZXRvb3RoIHN1cHBvcnQgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvXFxuICAzNTpcXHRcXHQgIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChibHVldG9vdGgpLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIFRvIHVzZSBMaW51eCBCbHVldG9vdGggc3Vic3lzdGVtLCB5b3Ugd2lsbCBuZWVkIHNldmVyYWwgdXNlci1zcGFjZVxcbiAgMzg6XFx0XFx0ICB1dGlsaXRpZXMgbGlrZSBoY2ljb25maWcgYW5kIGJsdWV0b290aGQuICBUaGVzZSB1dGlsaXRpZXMgYW5kIHVwZGF0ZXNcXG4gIDM5OlxcdFxcdCAgdG8gQmx1ZXRvb3RoIGtlcm5lbCBtb2R1bGVzIGFyZSBwcm92aWRlZCBpbiB0aGUgQmx1ZVogcGFja2FnZXMuICBGb3JcXG4gIDQwOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFxcdTAwM2NodHRwOi8vd3d3LmJsdWV6Lm9yZy9cXHUwMDNlLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlRfQlJFRFJcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkJsdWV0b290aCBDbGFzc2ljIChCUi9FRFIpIGZlYXR1cmVzXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCVFxcbiAgNDU6XFx0XFx0ZGVmYXVsdCB5XFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIEJsdWV0b290aCBDbGFzc2ljIGluY2x1ZGVzIHN1cHBvcnQgZm9yIEJhc2ljIFJhdGUgKEJSKVxcbiAgNDg6XFx0XFx0ICBhdmFpbGFibGUgd2l0aCBCbHVldG9vdGggdmVyc2lvbiAxLjBiIG9yIGxhdGVyIGFuZCBzdXBwb3J0XFxuICA0OTpcXHRcXHQgIGZvciBFbmhhbmNlZCBEYXRhIFJhdGUgKEVEUikgYXZhaWxhYmxlIHdpdGggQmx1ZXRvb3RoXFxuICA1MDpcXHRcXHQgIHZlcnNpb24gMi4wIG9yIGxhdGVyLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRzb3VyY2UgXFxcIm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWdcXFwiXFxuICA1MzpcXHRcXG4gIDU0OlxcdHNvdXJjZSBcXFwibmV0L2JsdWV0b290aC9ibmVwL0tjb25maWdcXFwiXFxuICA1NTpcXHRcXG4gIDU2OlxcdHNvdXJjZSBcXFwibmV0L2JsdWV0b290aC9oaWRwL0tjb25maWdcXFwiXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCVF9MRVxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIExvdyBFbmVyZ3kgKExFKSBmZWF0dXJlc1xcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gQlRcXG4gIDYxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNjI6XFx0XFx0aGVscFxcbiAgNjM6XFx0XFx0ICBCbHVldG9vdGggTG93IEVuZXJneSBpbmNsdWRlcyBzdXBwb3J0IGxvdy1lbmVyZ3kgcGh5c2ljYWxcXG4gIDY0OlxcdFxcdCAgbGF5ZXIgYXZhaWxhYmxlIHdpdGggQmx1ZXRvb3RoIHZlcnNpb24gNC4wIG9yIGxhdGVyLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRjb25maWcgQlRfTEVfTDJDQVBfRUNSRURcXG4gIDY3OlxcdFxcdGJvb2wgXFxcIkJsdWV0b290aCBMMkNBUCBFbmhhbmNlZCBDcmVkaXQgRmxvdyBDb250cm9sXFxcIlxcbiAgNjg6XFx0XFx0ZGVwZW5kcyBvbiBCVF9MRVxcbiAgNjk6XFx0XFx0ZGVmYXVsdCB5XFxuICA3MDpcXHRcXHRoZWxwXFxuICA3MTpcXHRcXHQgIEJsdWV0b290aCBMb3cgRW5lcmd5IEwyQ0FQIEVuaGFuY2VkIENyZWRpdCBGbG93IENvbnRyb2wgYXZhaWxhYmxlIHdpdGhcXG4gIDcyOlxcdFxcdCAgQmx1ZXRvb3RoIHZlcnNpb24gNS4yIG9yIGxhdGVyLlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHQgIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBibHVldG9vdGguZW5hYmxlX2VjcmVkPVsxfDBdXFxuICA3NTpcXHRcXHQgIG9uIHRoZSBrZXJuZWwgY29tbWFuZGxpbmUuXFxuICA3NjpcXHRcXG4gIDc3OlxcdGNvbmZpZyBCVF82TE9XUEFOXFxuICA3ODpcXHRcXHR0cmlzdGF0ZSBcXFwiQmx1ZXRvb3RoIDZMb1dQQU4gc3VwcG9ydFxcXCJcXG4gIDc5OlxcdFxcdGRlcGVuZHMgb24gQlRfTEUgXFx1MDAyNlxcdTAwMjYgNkxPV1BBTlxcbiAgODA6XFx0XFx0aGVscFxcbiAgODE6XFx0XFx0ICBJUHY2IGNvbXByZXNzaW9uIG92ZXIgQmx1ZXRvb3RoIExvdyBFbmVyZ3kuXFxuICA4MjpcXHRcXG4gIDgzOlxcdGNvbmZpZyBCVF9MRURTXFxuICA4NDpcXHRcXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbiAgODU6XFx0XFx0ZGVwZW5kcyBvbiBCVFxcbiAgODY6XFx0XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTXFxuICA4NzpcXHRcXHRzZWxlY3QgTEVEU19UUklHR0VSU1xcbiAgODg6XFx0XFx0aGVscFxcbiAgODk6XFx0XFx0ICBUaGlzIG9wdGlvbiBzZWxlY3RzIGEgZmV3IExFRCB0cmlnZ2VycyBmb3IgZGlmZmVyZW50XFxuICA5MDpcXHRcXHQgIEJsdWV0b290aCBldmVudHMuXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBCVF9NU0ZURVhUXFxuICA5MzpcXHRcXHRib29sIFxcXCJFbmFibGUgTWljcm9zb2Z0IGV4dGVuc2lvbnNcXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIEJUXFxuICA5NTpcXHRcXHRoZWxwXFxuICA5NjpcXHRcXHQgIFRoaXMgb3B0aW9ucyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNaWNyb3NvZnQgZGVmaW5lZCBIQ0lcXG4gIDk3OlxcdFxcdCAgdmVuZG9yIGV4dGVuc2lvbnMuXFxuICA5ODpcXHRcXG4gIDk5OlxcdGNvbmZpZyBCVF9BT1NQRVhUXFxuIDEwMDpcXHRcXHRib29sIFxcXCJFbmFibGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IGV4dGVuc2lvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA2OjEwLjY2MTE2NTEzNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDE1ODUzNzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBCbHVldG9vdGggRnV6emluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBhc3Nlc3NlZCB0aGUgcGF0Y2guIEJhc2VkIG9uIHdoYXQgSSBzZWUsIGBDT05GSUdfQlRgIGFsb25lIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBmdXp6aW5nLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSByZWFzb25pbmc6IHRoZSBmaXggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHByb2JhYmx5IGEgVXNlLUFmdGVyLUZyZWUgb3IgZGF0YSByYWNlLCB3aXRoaW4gdGhlIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvZGUuIEl0IGludHJvZHVjZXMgc3BpbmxvY2tzIHRvIHByb3RlY3QgYWNjZXNzZXMgdG8gYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHNgLiBUaGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgdHJpZ2dlcmVkIGJ5IEJsdWV0b290aCBtYW5hZ2VtZW50IGNvbW1hbmRzLCBzcGVjaWZpY2FsbHkgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYW5kIGR1cmluZyBkZXZpY2Ugc2Nhbm5pbmcsIHRocm91Z2ggYG1nbXRfZGV2aWNlX2ZvdW5kYC5cblxuSW5pdGlhbGx5LCBJIGhhZCBhIGxpc3Qgb2YgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYG1nbXRfZGV2aWNlX2ZvdW5kYCwgYW5kIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYCBhcyBrZXkgc3ltYm9scyB0byB0YXJnZXQuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IHRoZXNlIHN5bWJvbCBzZWxlY3Rpb25zLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBmdXp6aW5nIHByb21wdCBndWlkZWxpbmVzLiBJdCBwb2ludGVkIG91dCB0aGF0IEkgc2hvdWxkIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuXG5cbkkgcGF1c2VkIHRvIGNoZWNrIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAuIFRob3VnaCBpdCdzICpkZWNsYXJlZCogYXMgc3RhdGljLCBpdOKAmXMgYWN0dWFsbHkgYSBoYW5kbGVyIHdpdGhpbiB0aGUgYG1nbXRfaGFuZGxlcnNgIGFycmF5LiBCZWNhdXNlIGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuLCBpdCBkb2Vzbid0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoaXMgbWFrZXMgaXQgYW4gQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb24gZm9yIHRoZSBtYW5hZ2VtZW50IEFQSSDigJMgc28gaXQgYWJzb2x1dGVseSBmaXRzIHRoZSBjcml0ZXJpYS4gSSBjYW4gaW5jbHVkZSBpdCBpbiB0aGUgbGlzdC5cblxuTm93LCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYCwgYnV0IEknbSBjb25maWRlbnQgaW4gdGhlIG92ZXJhbGwgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUxMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA2OjE2LjA3NzAyMTc2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUyODc5MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9MzE1MT1zdGF0aWMgaW50IGhjaV9wYXNzaXZlX3NjYW5fc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMjgwLSAqL1xcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzozMjgxOmludCBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMjgyLXtcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz0zMzY2PXN0YXRpYyBpbnQgdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICpkYXRhKVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMzY3LXtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM6MzM2ODpcXHRyZXR1cm4gaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtMzM2OS19XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9NjA4Nj1pbnQgaGNpX3VwZGF0ZV9jb25uZWN0YWJsZV9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTYxMTMtXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjYxMTQ6XFx0cmV0dXJuIGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTYxMTUtfVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jPTYxNDY9c3RhdGljIGludCBoY2lfYWN0aXZlX3NjYW5fc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDE2X3QgaW50ZXJ2YWwpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNjIxMi1cXHQvKiBSZXN1bWUgcGFzc2l2ZSBzY2FubmluZyAqL1xcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzo2MjEzOlxcdGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTYyMTQtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz02Mzg3PWludCBoY2lfc3VzcGVuZF9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTY0NDAtXFx0LyogVXBkYXRlIExFIHBhc3NpdmUgc2NhbiBpZiBlbmFibGVkICovXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjY0NDE6XFx0aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNjQ0Mi1cXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz02NDg0PXN0YXRpYyBpbnQgaGNpX3Jlc3VtZV9zY2FuX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNjQ5My1cXHQvKiBSZXNldCBwYXNzaXZlIHNjYW5uaW5nIHRvIG5vcm1hbCAqL1xcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzo2NDk0OlxcdGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTY0OTUtXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9NzM4Nz1zdGF0aWMgaW50IGhjaV9sZV9wYV9jcmVhdGVfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy03NDEzLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzo3NDE0OlxcdC8qIE1hcmsgSENJX0NPTk5fQ1JFQVRFX1BBX1NZTkMgc28gaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyBjYW5cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNzQxNS1cXHQgKiBwcm9ncmFtIHRoZSBhZGRyZXNzIGluIHRoZSBhbGxvdyBsaXN0IHNvIFBBIGFkdmVydGlzZW1lbnRzIGNhbiBiZVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTc0MTktXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjc0MjA6XFx0aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNzQyMS1cXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy03NDk0LVxcdC8qIFVwZGF0ZSBwYXNzaXZlIHNjYW4gc2luY2UgSENJX1BBX1NZTkMgZmxhZyBoYXMgYmVlbiBjbGVhcmVkICovXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjc0OTU6XFx0aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNzQ5Ni1cXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jPTIyMDU9c3RhdGljIGludCBzZXRfbWVzaF9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmMtMjIzOS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzoyMjQwOlxcdGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoaGRldik7XFxubmV0L2JsdWV0b290aC9tZ210LmMtMjI0MS1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jPTc3NjQ9c3RhdGljIGludCBhZGRfZGV2aWNlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXFxubmV0L2JsdWV0b290aC9tZ210LmMtNzc2NS17XFxubmV0L2JsdWV0b290aC9tZ210LmM6Nzc2NjpcXHRyZXR1cm4gaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy03NzY3LX1cXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jPTc4OTI9c3RhdGljIGludCByZW1vdmVfZGV2aWNlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXFxubmV0L2JsdWV0b290aC9tZ210LmMtNzg5My17XFxubmV0L2JsdWV0b290aC9tZ210LmM6Nzg5NDpcXHRyZXR1cm4gaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy03ODk1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDY6MTYuMTcyMzE5NDA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzU1NzMzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY2FuIFN5bmNocm9uaXphdGlvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2AgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBoZXJlLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQncyBnb2luZyB0byBkcml2ZSB0aGUgbG9naWMgd2UncmUgaW50ZXJlc3RlZCBpbi5cblxuTm93LCBsZXQncyBzZWUsIHdlJ3ZlIGdvdCBhIHNldCBvZiBmb2N1cyBzeW1ib2xzIHRoYXQgcmVsYXRlIHRvIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSBhbmQgZGV2aWNlIG1hbmFnZW1lbnQgd2hpY2ggaW5jbHVkZXMgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYG1nbXRfZGV2aWNlX2ZvdW5kYCwgYW5kIG91ciBtYWluIGZ1bmN0aW9uIG9mIGNvbmNlcm4sIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYC4gU2VlbXMgcmVhc29uYWJsZS4gQW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCBhcmUgYWxsIHVuZGVyIGBCVGAuXG5cbk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IHJlc3VsdHMgYXJlIGJlaW5nIGNvbmZpZ3VyZWQgd2l0aCBhIGNhbGwgdG8gc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzgxLCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA2OjIwLjIwNzg5NTUxNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDMyNDA0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeVwiLFxuICAgIFwibWdtdF9kZXZpY2VfZm91bmRcIixcbiAgICBcImhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIChsaWtlbHkgVUFGIG9yIGRhdGEgcmFjZSkgaW4gQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29kZSBieSBhZGRpbmcgc3BpbmxvY2tzIGFyb3VuZCBgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzYCBhY2Nlc3Nlcy4gVGhlIGFmZmVjdGVkIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29tbWFuZHMgKGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWApIGFuZCBkZXZpY2Ugc2Nhbm5pbmcgKGBtZ210X2RldmljZV9mb3VuZGApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfc2VydmljZV9kaXNjb3ZlcnlcIixcbiAgICBcIm1nbXRfZGV2aWNlX2ZvdW5kXCIsXG4gICAgXCJoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiAobGlrZWx5IFVBRiBvciBkYXRhIHJhY2UpIGluIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvZGUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkc2AgYWNjZXNzZXMuIFRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvbW1hbmRzIChgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgKSBhbmQgZGV2aWNlIHNjYW5uaW5nIChgbWdtdF9kZXZpY2VfZm91bmRgKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDY6MjAuMzYyMjI3N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxMDQ5OTk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA2OjIwLjM2Mjc4MTY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkzMDk5NDE2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3BpbmxvY2sgcHJvdGVjdGlvbiBhcm91bmQgdGhlIGFjY2Vzc2VzIHRvIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHNgIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgaXNzdWVzIChzdWNoIGFzIGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0NTQU4gb3IgS0FTQU4uIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjgxNGZjNTA4ZWRkNzQxNmNhMThiMzMxNmM5MTc4NGY0NjNlYTYwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMjE6MDU6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXG5pbmRleCAzZGY1OTg0OWRjYmVhLi44MTE1NDM1YjVkMmFmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXG5AQCAtOTE5LDkgKzkxOSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSBmYWxzZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlcG9ydF9pbnZhbGlkX3Jzc2kgPSB0cnVlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xuIFx0a2ZyZWUoaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBOVUxMO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuaW5kZXggMTY3ZDc1ZTM0NTI2Ni4uMDkwZDBmMDA4NzRhMSAxMDA2NDRcbi0tLSBhL25ldC9ibHVldG9vdGgvbWdtdC5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuQEAgLTYyMjMsMTIgKzYyMjMsMTQgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IHRydWU7XG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS50eXBlID0gY3AtXHUwMDNldHlwZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJzc2kgPSBjcC1cdTAwM2Vyc3NpO1xuLVx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXG4gXHRpZiAodXVpZF9jb3VudCBcdTAwM2UgMCkge1xuIFx0XHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcyA9IGttZW1kdXAoY3AtXHUwMDNldXVpZHMsIHV1aWRfY291bnQgKiAxNixcbiBcdFx0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykge1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0XHRcdGVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LVx1MDAzZWlkLFxuIFx0XHRcdFx0XHRcdE1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUlksXG4gXHRcdFx0XHRcdFx0TUdNVF9TVEFUVVNfRkFJTEVELFxuQEAgLTYyMzgsNiArNjI0MCw5IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4rXHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcbiBcdGVyciA9IGhjaV9jbWRfc3luY19xdWV1ZShoZGV2LCBzdGFydF9kaXNjb3Zlcnlfc3luYywgY21kLFxuIFx0XHRcdFx0IHN0YXJ0X2Rpc2NvdmVyeV9jb21wbGV0ZSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG5AQCAtMTAzNjcsNiArMTAzNzIsNyBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsXG4gXHQgICAgICFoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU1RSSUNUX0RVUExJQ0FURV9GSUxURVIpKSkpXG4gXHRcdHJldHVybiAgZmFsc2U7XG4gXG4rXHRzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXHRpZiAoaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCAhPSAwKSB7XG4gXHRcdC8qIElmIGEgbGlzdCBvZiBVVUlEcyBpcyBwcm92aWRlZCBpbiBmaWx0ZXIsIHJlc3VsdHMgd2l0aCBub1xuIFx0XHQgKiBtYXRjaGluZyBVVUlEIHNob3VsZCBiZSBkcm9wcGVkLlxuQEAgLTEwMzc1LDkgKzEwMzgxLDEyIEBAIHN0YXRpYyBib29sIGlzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgczggcnNzaSwgdTggKmVpcixcbiBcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFlaXJfaGFzX3V1aWRzKHNjYW5fcnNwLCBzY2FuX3JzcF9sZW4sXG4gXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50LFxuLVx0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpKVxuK1x0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4gXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcbiBcdC8qIElmIGR1cGxpY2F0ZSBmaWx0ZXJpbmcgZG9lcyBub3QgcmVwb3J0IFJTU0kgY2hhbmdlcywgdGhlbiByZXN0YXJ0XG4gXHQgKiBzY2FubmluZyB0byBlbnN1cmUgdXBkYXRlZCByZXN1bHQgd2l0aCB1cGRhdGVkIFJTU0kgdmFsdWVzLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDY6MjAuMzYyNzgyNTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMwOTkxOTAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJsdWV0b290aCBEaXNjb3ZlcnkgRmlsdGVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIHRvdWNoaW5nIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAsIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGFuZCBgaXNfZmlsdGVyX21hdGNoYCBpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgIGFuZCBhbHNvIHRoZSByZWxldmFudCBoZWFkZXIsIGBoY2lfY29yZS5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgYWRkaW5nIGBzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jaylgIGFyb3VuZCBhY2Nlc3NlcyB0byBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkc2AuXG5cbkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIGlzIGEgY2xhc3NpY2FsIHJhY2UgY29uZGl0aW9uIGZpeC4gSXQncyBndWFyZGluZyBhZ2FpbnN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyB0byBgdXVpZF9jb3VudGAgYW5kIGB1dWlkc2AuIFRoaXMgY291bGQgbWFuaWZlc3QgYXMgYSBkYXRhIHJhY2UsIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIG9yIGV2ZW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgdGhpbmdzIGdldCB0cnVseSBvdXQgb2Ygc3luYy4gR29vZCBjYXRjaC5cblxuSSd2ZSB0YWtlbiBhIHF1aWNrIGxvb2sgYXQgdGhlIGNvZGUgc25pcHBldHMuIFRoZSBwYXRjaCBpcyB3cmFwcGluZyB0aGUgYWNjZXNzZXMgdG8gdGhlIHNoYXJlZCB2YXJpYWJsZXMgd2l0aCBhIGxvY2suIFRoZSBmaXJzdCBjb2RlIGJsb2NrIGxvb2tzIGNsZWFuLiBUaGUgc2Vjb25kIGxvb2tzIGxpa2UgaXQgaXMgZml4aW5nIGEgZG91YmxlIGZyZWUgYnkgcHJvdGVjdGluZyB0aGUgbWVtb3J5IGNvcHkgYW5kIHRoZSB0aGlyZCBsb29rcyBsaWtlIGl0J3MgcHJvdGVjdGluZyBhY2Nlc3MgdG8gYHV1aWRfY291bnRgIHdoZW4gZGV0ZXJtaW5pbmcgaWYgYSBVVUlEIG1hdGNoZXMuIEl0IGNvbmZpcm1zIG15IGFzc3VtcHRpb24uXG5cbmBgYGNcbiBcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xuIFx0a2ZyZWUoaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBOVUxMO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG5gYGBcblxuYGBgY1xuLVx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXG4gXHRpZiAodXVpZF9jb3VudCBcdTAwM2UgMCkge1xuIFx0XHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcyA9IGttZW1kdXAoY3AtXHUwMDNldXVpZHMsIHV1aWRfY291bnQgKiAxNixcbiBcdFx0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykge1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuLi4uXG4gXHRcdH1cbiBcdH1cbiBcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50O1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG5gYGBcblxuYGBgY1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0aWYgKGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgIT0gMCkge1xuLi4uXG4tXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykpXG4rXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykpIHtcbitcdFx0XHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbiBcdH1cbitcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuYGBgXG5cblRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQncyBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIHdvdWxkbid0IGJlIHJlbGV2YW50LiBUaGUgYnVnIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIHdvdWxkIHByb2JhYmx5IGJlIGZsYWdnZWQgYnkgS0NTQU4gb3IgS0FTQU4sIGFzc3VtaW5nIHRoZSByYWNlIHJlc3VsdHMgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBhIGNvbmN1cnJlbmN5IGZpeCwgcGxhaW4gYW5kIHNpbXBsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNywiT3V0cHV0VG9rZW5zIjoxMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMTowNjoyOS42NzI3MDQ0NDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3BpbmxvY2sgcHJvdGVjdGlvbiBhcm91bmQgdGhlIGFjY2Vzc2VzIHRvIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHNgIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgaXNzdWVzIChzdWNoIGFzIGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0NTQU4gb3IgS0FTQU4uIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzcGlubG9jayBwcm90ZWN0aW9uIGFyb3VuZCB0aGUgYWNjZXNzZXMgdG8gYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkc2AgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMgKHN1Y2ggYXMgZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBvciBLQVNBTi4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjc5j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 20:45:44 +0000 UTC FinishedAt: 2026-08-07 21:06:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT" ], "series_id": "116fdfa1-804e-4867-8e32-00053ff6dd26" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "start_service_discovery", "mgmt_device_found", "hci_update_passive_scan_sync" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfc2VydmljZV9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7bWdtdF9kZXZpY2VfZm91bmQmIzM0OywKICAgICYjMzQ7aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3BpbmxvY2sgcHJvdGVjdGlvbiBhcm91bmQgdGhlIGFjY2Vzc2VzIHRvIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGlzc3VlcyAoc3VjaCBhcyBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtDU0FOIG9yIEtBU0FOLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIChsaWtlbHkgVUFGIG9yIGRhdGEgcmFjZSkgaW4gQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29kZSBieSBhZGRpbmcgc3BpbmxvY2tzIGFyb3VuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkc2AgYWNjZXNzZXMuIFRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvbW1hbmRzIChgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgKSBhbmQgZGV2aWNlIHNjYW5uaW5nIChgbWdtdF9kZXZpY2VfZm91bmRgKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY4MTRmYzUwOGVkZDc0MTZjYTE4YjMzMTZjOTE3ODRmNDYzZWE2MGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDIxOjA1OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbmluZGV4IDNkZjU5ODQ5ZGNiZWEuLjgxMTU0MzViNWQyYWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbkBAIC05MTksOSAmIzQzOzkxOSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSBmYWxzZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlcG9ydF9pbnZhbGlkX3Jzc2kgPSB0cnVlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiYjNDM7XHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcdGtmcmVlKGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0gTlVMTDtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbWdtdC5jIGIvbmV0L2JsdWV0b290aC9tZ210LmNcbmluZGV4IDE2N2Q3NWUzNDUyNjYuLjA5MGQwZjAwODc0YTEgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JsdWV0b290aC9tZ210LmNcbkBAIC02MjIzLDEyICYjNDM7NjIyMywxNCBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS5yZXN1bHRfZmlsdGVyaW5nID0gdHJ1ZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnR5cGUgPSBjcC1cdTAwM2V0eXBlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IGNwLVx1MDAzZXJzc2k7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gdXVpZF9jb3VudDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFxuIFx0aWYgKHV1aWRfY291bnQgXHUwMDNlIDApIHtcbiBcdFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBrbWVtZHVwKGNwLVx1MDAzZXV1aWRzLCB1dWlkX2NvdW50ICogMTYsXG4gXHRcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXHRcdFx0ZXJyID0gbWdtdF9jbWRfY29tcGxldGUoc2ssIGhkZXYtXHUwMDNlaWQsXG4gXHRcdFx0XHRcdFx0TUdNVF9PUF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWSxcbiBcdFx0XHRcdFx0XHRNR01UX1NUQVRVU19GQUlMRUQsXG5AQCAtNjIzOCw2ICYjNDM7NjI0MCw5IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50O1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuJiM0MztcbiBcdGVyciA9IGhjaV9jbWRfc3luY19xdWV1ZShoZGV2LCBzdGFydF9kaXNjb3Zlcnlfc3luYywgY21kLFxuIFx0XHRcdFx0IHN0YXJ0X2Rpc2NvdmVyeV9jb21wbGV0ZSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG5AQCAtMTAzNjcsNiAmIzQzOzEwMzcyLDcgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxuIFx0ICAgICAhaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSKSkpKVxuIFx0XHRyZXR1cm4gIGZhbHNlO1xuIFxuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcdGlmIChoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ICE9IDApIHtcbiBcdFx0LyogSWYgYSBsaXN0IG9mIFVVSURzIGlzIHByb3ZpZGVkIGluIGZpbHRlciwgcmVzdWx0cyB3aXRoIG5vXG4gXHRcdCAqIG1hdGNoaW5nIFVVSUQgc2hvdWxkIGJlIGRyb3BwZWQuXG5AQCAtMTAzNzUsOSAmIzQzOzEwMzgxLDEyIEBAIHN0YXRpYyBib29sIGlzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgczggcnNzaSwgdTggKmVpcixcbiBcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFlaXJfaGFzX3V1aWRzKHNjYW5fcnNwLCBzY2FuX3JzcF9sZW4sXG4gXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50LFxuLVx0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpKVxuJiM0MztcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSkge1xuJiM0MztcdFx0XHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR9XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXG4gXHQvKiBJZiBkdXBsaWNhdGUgZmlsdGVyaW5nIGRvZXMgbm90IHJlcG9ydCBSU1NJIGNoYW5nZXMsIHRoZW4gcmVzdGFydFxuIFx0ICogc2Nhbm5pbmcgdG8gZW5zdXJlIHVwZGF0ZWQgcmVzdWx0IHdpdGggdXBkYXRlZCBSU1NJIHZhbHVlcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeSYjMzQ7LAogICAgJiMzNDttZ210X2RldmljZV9mb3VuZCYjMzQ7LAogICAgJiMzNDtoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gKGxpa2VseSBVQUYgb3IgZGF0YSByYWNlKSBpbiBCbHVldG9vdGggbWFuYWdlbWVudCBjb2RlIGJ5IGFkZGluZyBzcGlubG9ja3MgYXJvdW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYCBhY2Nlc3Nlcy4gVGhlIGFmZmVjdGVkIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29tbWFuZHMgKGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWApIGFuZCBkZXZpY2Ugc2Nhbm5pbmcgKGBtZ210X2RldmljZV9mb3VuZGApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjgxNGZjNTA4ZWRkNzQxNmNhMThiMzMxNmM5MTc4NGY0NjNlYTYwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMjE6MDU6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IDNkZjU5ODQ5ZGNiZWEuLjgxMTU0MzViNWQyYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC05MTksOSAmIzQzOzkxOSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIAloZGV2LSZndDtkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yZXBvcnRfaW52YWxpZF9yc3NpID0gdHJ1ZTsKIAloZGV2LSZndDtkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7Ci0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwOwogCiAJc3Bpbl9sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IDA7CiAJa2ZyZWUoaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzKTsKIAloZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwppbmRleCAxNjdkNzVlMzQ1MjY2Li4wOTBkMGYwMDg3NGExIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwpAQCAtNjIyMywxMiAmIzQzOzYyMjMsMTQgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LAogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yZXN1bHRfZmlsdGVyaW5nID0gdHJ1ZTsKIAloZGV2LSZndDtkaXNjb3ZlcnkudHlwZSA9IGNwLSZndDt0eXBlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yc3NpID0gY3AtJmd0O3Jzc2k7Ci0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50OwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAKIAlpZiAodXVpZF9jb3VudCAmZ3Q7IDApIHsKIAkJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzID0ga21lbWR1cChjcC0mZ3Q7dXVpZHMsIHV1aWRfY291bnQgKiAxNiwKIAkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgewomIzQzOwkJCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwogCQkJZXJyID0gbWdtdF9jbWRfY29tcGxldGUoc2ssIGhkZXYtJmd0O2lkLAogCQkJCQkJTUdNVF9PUF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWSwKIAkJCQkJCU1HTVRfU1RBVFVTX0ZBSUxFRCwKQEAgLTYyMzgsNiAmIzQzOzYyNDAsOSBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsCiAJCX0KIAl9CiAKJiM0MzsJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50OwomIzQzOwlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKJiM0MzsKIAllcnIgPSBoY2lfY21kX3N5bmNfcXVldWUoaGRldiwgc3RhcnRfZGlzY292ZXJ5X3N5bmMsIGNtZCwKIAkJCQkgc3RhcnRfZGlzY292ZXJ5X2NvbXBsZXRlKTsKIAlpZiAoZXJyICZsdDsgMCkgewpAQCAtMTAzNjcsNiAmIzQzOzEwMzcyLDcgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLAogCSAgICAgIWhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19TVFJJQ1RfRFVQTElDQVRFX0ZJTFRFUikpKSkKIAkJcmV0dXJuICBmYWxzZTsKIAomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAJaWYgKGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50ICE9IDApIHsKIAkJLyogSWYgYSBsaXN0IG9mIFVVSURzIGlzIHByb3ZpZGVkIGluIGZpbHRlciwgcmVzdWx0cyB3aXRoIG5vCiAJCSAqIG1hdGNoaW5nIFVVSUQgc2hvdWxkIGJlIGRyb3BwZWQuCkBAIC0xMDM3NSw5ICYjNDM7MTAzODEsMTIgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLAogCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgJmFtcDsmYW1wOwogCQkgICAgIWVpcl9oYXNfdXVpZHMoc2Nhbl9yc3AsIHNjYW5fcnNwX2xlbiwKIAkJCQkgICBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCwKLQkJCQkgICBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMpKQomIzQzOwkJCQkgICBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9CiAJfQomIzQzOwlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAogCS8qIElmIGR1cGxpY2F0ZSBmaWx0ZXJpbmcgZG9lcyBub3QgcmVwb3J0IFJTU0kgY2hhbmdlcywgdGhlbiByZXN0YXJ0CiAJICogc2Nhbm5pbmcgdG8gZW5zdXJlIHVwZGF0ZWQgcmVzdWx0IHdpdGggdXBkYXRlZCBSU1NJIHZhbHVlcy4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbHVldG9vdGggTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBCbHVldG9vdGggbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvYmx1ZXRvb3RoL21nbXQuY2AgYW5kIGBpbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhleSYjMzk7cmUgZml4aW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24g4oCTIGEgVUFGIG9yIGRhdGEgcmFjZSwgcHJvYmFibHkg4oCTIGJ5IGFkZGluZyBhIHNwaW5sb2NrIGFyb3VuZCBhY2Nlc3MgdG8gYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkc2AuIFNtYXJ0IG1vdmUsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gcmVzb2x2ZSB0aGF0IGtpbmQgb2YgaXNzdWUuCgpOb3csIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgYXJlIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAsIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGFuZCBgaXNfZmlsdGVyX21hdGNoYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgYXJlIGV2ZW4gKnJlYWNoYWJsZSogY29kZSBwYXRocyBhbmQgd2hhdCBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhleSBkZXBlbmQgb24uIExldCYjMzk7cyBzZWUuLi4gYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBhbmQgYGlzX2ZpbHRlcl9tYXRjaGAgYXJlIGJvdGggc3RhdGljIHdpdGhpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gYGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyYCBpcyBpbmxpbmUgaW4gdGhlIGhlYWRlciwgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSBjb21waWxlZCB3aGVuZXZlciBpdCBpcyB1c2VkLgoKQWxyaWdodCwgc28gdG8gdW5kZXJzdGFuZCB0aGUgcmVhY2ggb2YgdGhpcyBjb2RlLCBJIG5lZWQgdG8ga25vdyBob3cgQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaXRzZWxmIGlzIGVuYWJsZWQuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIHNvdXJjZSB0cmVlIHRlbGxzIG1lIHRoYXQgYG5ldC9ibHVldG9vdGgvbWdtdC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlRgIGlzIGVuYWJsZWQuIFRoYXQgZ2l2ZXMgbWUgYSBiYXNpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIHRvIGZpZ3VyZSBvdXQgaG93IGNyaXRpY2FsIHRoaXMgZml4IGlzLiBNb3JlIGludmVzdGlnYXRpb24gaXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhcnRfc2VydmljZV9kaXNjb3ZlcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL21nbXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL21nbXQuYz02MTM1PXN0YXRpYyBpbnQgc3RhcnRfbGltaXRlZF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQyLVxubmV0L2JsdWV0b290aC9tZ210LmM6NjE0MzpzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQ0LVx0XHRcdFx0ICAgdm9pZCAqZGF0YSwgdTE2IGxlbilcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNDUte1xubmV0L2JsdWV0b290aC9tZ210LmM6NjE0NjpcdHN0cnVjdCBtZ210X2NwX3N0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5ICpjcCA9IGRhdGE7XG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQ3LVx0c3RydWN0IG1nbXRfcGVuZGluZ19jbWQgKmNtZDtcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz05NDYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNpX21nbXRfaGFuZGxlciBtZ210X2hhbmRsZXJzW10gPSB7XG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtOTUzOC1cdFx0XHRcdFx0XHRIQ0lfTUdNVF9VTkNPTkZJR1VSRUQgfSxcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjk1Mzk6XHR7IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5LCBNR01UX1NUQVJUX1NFUlZJQ0VfRElTQ09WRVJZX1NJWkUsXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy05NTQwLVx0XHRcdFx0XHRcdEhDSV9NR01UX1ZBUl9MRU4gfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgbWVudGFsIHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWVwIERpdmUgaW50byBTZXJ2aWNlIERpc2NvdmVyeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgIOKAkyB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgdGhlIHRyaWdnZXIsIHRoZSB0aGluZyB0aGF0IHJlc3BvbmRzIHRvIHRoZSBgTUdNVF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWWAgY29tbWFuZC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbml0aWF0aW5nIHRoZSB3aG9sZSBzZXJ2aWNlIGRpc2NvdmVyeSBwcm9jZXNzLiBJdCYjMzk7cyB0aGUgJiMzNDtnbyYjMzQ7IGJ1dHRvbiwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzIGF0IGEgaGlnaCBsZXZlbCwgYW5kIHRoZW4gZGlnIGludG8gdGhlIGRldGFpbHMgbGF0ZXIuCgpOb3csIGdsYW5jaW5nIGF0IGBpc19maWx0ZXJfbWF0Y2hgLi4uIGFoLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiBgbWdtdF9kZXZpY2VfZm91bmRgLiBTbywgSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGEgaHlwb3RoZXNpcy4gYG1nbXRfZGV2aWNlX2ZvdW5kYCBwcm9iYWJseSBpdGVyYXRlcyB0aHJvdWdoIGZvdW5kIGRldmljZXMsIGFuZCBgaXNfZmlsdGVyX21hdGNoYCBpcyB0aGUgZ2F0ZWtlZXBlci4gSXQmIzM5O3MgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIGRlY2lkZSBpZiBhIGRpc2NvdmVyZWQgZGV2aWNlIG1lZXRzIHNvbWUgY3JpdGVyaWEgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkLiBQcm9iYWJseSBiYXNlZCBvbiBmaWx0ZXJzIHNldCB1cCBwcmV2aW91c2x5IGluIHRoZSBjb250ZXh0IG9mIHN0YXJ0aW5nIHNlcnZpY2UgZGlzY292ZXJ5LiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgaW5pdGlhbCBzZXJ2aWNlIGRpc2NvdmVyeSBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGlzaW5nIHRoZSBzZWFyY2gsIGFuZCB0aGUgYGlzX2ZpbHRlcl9tYXRjaGAgZnVuY3Rpb24gZGVmaW5lcyB0aGUgdHlwZSBvZiBkZXZpY2Ugd2Ugc2hvdWxkIGxvb2sgZm9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZmlsdGVyIGFjdHVhbGx5IGNvbnRhaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvbWdtdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvbWdtdC5jPTEwMzAyPXN0YXRpYyBib29sIGVpcl9oYXNfdXVpZHModTggKmVpciwgdTE2IGVpcl9sZW4sIHUxNiB1dWlkX2NvdW50LCB1OCAoKnV1aWRzKVsxNl0pXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtMTAzNTYtXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzoxMDM1NzpzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDM1OC1cdFx0XHQgICAgdTE2IGVpcl9sZW4sIHU4ICpzY2FuX3JzcCwgdTggc2Nhbl9yc3BfbGVuKVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTEwNTc3PXZvaWQgbWdtdF9kZXZpY2VfZm91bmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsIHU4IGxpbmtfdHlwZSxcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDYwNS1cdFx0LyogV2UgYXJlIHVzaW5nIHNlcnZpY2UgZGlzY292ZXJ5ICovXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzoxMDYwNjpcdFx0aWYgKCFpc19maWx0ZXJfbWF0Y2goaGRldiwgcnNzaSwgZWlyLCBlaXJfbGVuLCBzY2FuX3JzcCxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwNjA3LVx0XHRcdFx0ICAgICBzY2FuX3JzcF9sZW4pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MjMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZXZpY2UgRGlzY292ZXJ5IGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIGBtZ210X2RldmljZV9mb3VuZGAgaGFzIHRyaWdnZXJlZCwgbWVhbmluZyB3ZSYjMzk7dmUgZ290IGEgbGl2ZSBvbmUhIFRoaXMgZGV2aWNlIGlzIG5vdyBkZWZpbml0ZWx5IHdpdGhpbiBvdXIgZnV6emluZyBzY29wZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIHNlZSB0aGUgY2hhbmdlcyBhcmUgc29saWQgYW5kIGZ1bmN0aW9uYWwsIGFkZGluZyBsb2NraW5nIG1lY2hhbmlzbXMgdG8gaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMg4oCTIGEga2V5IGNvbnNpZGVyYXRpb24uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHRvIGVuc3VyZSB3ZSYjMzk7cmUgdGFyZ2V0aW5nIHRoZSByaWdodCBzZXR1cC4gSSBrbm93IGBDT05GSUdfQlRgIGlzIHRoZSBiaWcgb25lLCB0aGUgcHJpbWFyeSBCbHVldG9vdGggY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O2xsIG5lZWQuIEJ1dCBJJiMzOTttIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIsIGp1c3QgaW4gY2FzZSB0aGVyZSBhcmUgYW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgbHVya2luZyBhYm91dCB0aGF0IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IuIFdlIG5lZWQgdG8gYmUgZXhoYXVzdGl2ZSB0byBtYXhpbWl6ZSBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZ210X2RldmljZV9mb3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9MTczND1zdGF0aWMgdm9pZCBsZV9zZXRfc2Nhbl9lbmFibGVfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IGVuYWJsZSlcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTE3NTQtXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjE3NTU6XHRcdFx0bWdtdF9kZXZpY2VfZm91bmQoaGRldiwgXHUwMDI2ZC1cdTAwM2VsYXN0X2Fkdl9hZGRyLCBMRV9MSU5LLFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy0xNzU2LVx0XHRcdFx0XHQgIGQtXHUwMDNlbGFzdF9hZHZfYWRkcl90eXBlLCBOVUxMLFxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9MzA0MD1zdGF0aWMgdm9pZCBoY2lfaW5xdWlyeV9yZXN1bHRfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICplZGF0YSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTMwNzUtXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjMwNzY6XHRcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFx1MDAyNmluZm8tXHUwMDNlYmRhZGRyLCBBQ0xfTElOSywgMHgwMCxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtMzA3Ny1cdFx0XHRcdCAgaW5mby1cdTAwM2VkZXZfY2xhc3MsIEhDSV9SU1NJX0lOVkFMSUQsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz00ODQzPXN0YXRpYyB2b2lkIGhjaV9pbnF1aXJ5X3Jlc3VsdF93aXRoX3Jzc2lfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICplZGF0YSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTQ4ODYtXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjQ4ODc6XHRcdFx0bWdtdF9kZXZpY2VfZm91bmQoaGRldiwgXHUwMDI2aW5mby1cdTAwM2ViZGFkZHIsIEFDTF9MSU5LLCAweDAwLFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy00ODg4LVx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZGV2X2NsYXNzLCBpbmZvLVx1MDAzZXJzc2ksXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy00OTE3LVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo0OTE4Olx0XHRcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFx1MDAyNmluZm8tXHUwMDNlYmRhZGRyLCBBQ0xfTElOSywgMHgwMCxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNDkxOS1cdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWRldl9jbGFzcywgaW5mby1cdTAwM2Vyc3NpLFxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9NTEyNj1zdGF0aWMgdm9pZCBoY2lfZXh0ZW5kZWRfaW5xdWlyeV9yZXN1bHRfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICplZGF0YSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTUxNzItXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjUxNzM6XHRcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFx1MDAyNmluZm8tXHUwMDNlYmRhZGRyLCBBQ0xfTElOSywgMHgwMCxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNTE3NC1cdFx0XHRcdCAgaW5mby1cdTAwM2VkZXZfY2xhc3MsIGluZm8tXHUwMDNlcnNzaSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jPTYxNzQ9c3RhdGljIHZvaWQgcHJvY2Vzc19hZHZfcmVwb3J0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCB0eXBlLCBiZGFkZHJfdCAqYmRhZGRyLFxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjI4NS1cdGlmIChoY2lfZGV2X3Rlc3RfZmxhZyhoZGV2LCBIQ0lfTUVTSCkpIHtcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NjI4NjpcdFx0bWdtdF9kZXZpY2VfZm91bmQoaGRldiwgYmRhZGRyLCBMRV9MSU5LLCBiZGFkZHJfdHlwZSwgTlVMTCxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjI4Ny1cdFx0XHRcdCAgcnNzaSwgZmxhZ3MsIGRhdGEsIGxlbiwgTlVMTCwgMCwgaW5zdGFudCk7XG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzAzLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo2MzA0Olx0XHRtZ210X2RldmljZV9mb3VuZChoZGV2LCBiZGFkZHIsIExFX0xJTkssIGJkYWRkcl90eXBlLCBOVUxMLFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzA1LVx0XHRcdFx0ICByc3NpLCBmbGFncywgZGF0YSwgbGVuLCBOVUxMLCAwLCAwKTtcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTYzMzYtXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjYzMzc6XHRcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIGJkYWRkciwgTEVfTElOSywgYmRhZGRyX3R5cGUsIE5VTEwsXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTYzMzgtXHRcdFx0XHQgIHJzc2ksIGZsYWdzLCBkYXRhLCBsZW4sIE5VTEwsIDAsIDApO1xuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjM1Mi1cdFx0aWYgKCFtYXRjaClcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NjM1MzpcdFx0XHRtZ210X2RldmljZV9mb3VuZChoZGV2LCBcdTAwMjZkLVx1MDAzZWxhc3RfYWR2X2FkZHIsIExFX0xJTkssXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTYzNTQtXHRcdFx0XHRcdCAgZC1cdTAwM2VsYXN0X2Fkdl9hZGRyX3R5cGUsIE5VTEwsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzcyLVx0XHRjbGVhcl9wZW5kaW5nX2Fkdl9yZXBvcnQoaGRldik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjYzNzM6XHRcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIGJkYWRkciwgTEVfTElOSywgYmRhZGRyX3R5cGUsIE5VTEwsXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTYzNzQtXHRcdFx0XHQgIHJzc2ksIGZsYWdzLCBkYXRhLCBsZW4sIE5VTEwsIDAsIDApO1xuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjM4MS1cdCAqL1xubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo2MzgyOlx0bWdtdF9kZXZpY2VfZm91bmQoaGRldiwgXHUwMDI2ZC1cdTAwM2VsYXN0X2Fkdl9hZGRyLCBMRV9MSU5LLFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzgzLVx0XHRcdCAgZC1cdTAwM2VsYXN0X2Fkdl9hZGRyX3R5cGUsIE5VTEwsIHJzc2ksIGQtXHUwMDNlbGFzdF9hZHZfZmxhZ3MsXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmM9MTA1MTE9c3RhdGljIHZvaWQgbWVzaF9kZXZpY2VfZm91bmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtMTA1NzYtXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzoxMDU3Nzp2b2lkIG1nbXRfZGV2aWNlX2ZvdW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCBsaW5rX3R5cGUsXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDU3OC1cdFx0ICAgICAgIHU4IGFkZHJfdHlwZSwgdTggKmRldl9jbGFzcywgczggcnNzaSwgdTMyIGZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwOTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipEZWNvZGluZyBUaGlzIFNlcnZpY2UgRGlzY292ZXJ5IEZsb3cqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhpcyBzeXN0ZW0gc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYSBzZXJ2aWNlIGRpc2NvdmVyeSBwcm9jZXNzLCB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudDogYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IGdldHMgb3VyIGF0dGVudGlvbi4KClRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIGlzIHRoZSBgbWdtdF9kZXZpY2VfZm91bmRgIGV2ZW50LiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEEgbWFuYWdlbWVudCBkZXZpY2UgaGFzIGJlZW4gaWRlbnRpZmllZC4gVGhpcyBldmVudCAqaW1tZWRpYXRlbHkqIGNhbGxzIGBpc19maWx0ZXJfbWF0Y2hgLiBTbywgd2UmIzM5O3JlIGV2YWx1YXRpbmcgc29tZSBzb3J0IG9mIGZpbHRlciBjcml0ZXJpYSAqZXZlcnkgdGltZSogYSBwb3RlbnRpYWwgbWFuYWdlbWVudCBkZXZpY2UgaXMgZm91bmQuIFRoaXMgaXMgbGlrZWx5IGEga2V5IG9wdGltaXphdGlvbiBwb2ludCwgb3IgbWF5YmUgaXTigJlzIGEgZmlsdGVyaW5nIG1lY2hhbmlzbSB0aGF04oCZcyB1c2VkIHRvIGRlY2lkZSBpZiB0aGUgZGV2aWNlIGlzIHNvbWV0aGluZyB3ZSB3YW50IHRvIG1hbmFnZS4KCk5vdywgdGhhdCBgaXNfZmlsdGVyX21hdGNoYCBjYWxsIGlzIGNydWNpYWwuIFdoYXQgYXJlIHRoZSBmaWx0ZXIgcGFyYW1ldGVycz8gSXMgdGhlIGZ1bmN0aW9uIGNvbXBsZXg/IEFyZSB3ZSBjb21wYXJpbmcgYWdhaW5zdCBtdWx0aXBsZSBmaWx0ZXIgcHJvZmlsZXM/IFNwZWVkIGlzIHBhcmFtb3VudCwgd2UgbmVlZCB0byBrbm93IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy4gQW55IGJvdHRsZW5lY2tzIHRoZXJlIGFyZSBjcml0aWNhbCB0byBhZGRyZXNzLgoKRmluYWxseSwgd2UmIzM5O3ZlIGdvdCBgaGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXJgLiBUaGlzIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgc2hvcnQgYW5kIHN3ZWV0LiBUaGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZ2V0dGluZyAqY2FsbGVkKj8gVGhpcyBjbGVhcmluZyBzdGVwIGxpa2VseSBoYXMgYSBjb3JyZXNwb25kaW5nIHNldHVwIHN0ZXAuIFRoZSBgY2xlYXJgIGluZGljYXRlcyB3ZSYjMzk7cmUgc2V0dGluZyB1cCBhIG5ldyBmaWx0ZXIsIG9yIGNsZWFyaW5nIGFuIG9sZCBvbmUuIEZpbmRpbmcgd2hlcmUgdGhlIGZpbHRlciBpcyAqc2V0KiBhbmQgaG93IGl04oCZcyAqcG9wdWxhdGVkKiB3aWxsIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhpcyBkaXNjb3ZlcnkgZmlsdGVyaW5nIHN0cmF0ZWd5LiBUaGlzIGNsZWFudXAgaW5kaWNhdGVzIGEgbmV3IGRpc2NvdmVyeSBwcm9jZXNzIGlzIGJlaW5nIGtpY2tlZCBvZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9oY2lfY29yZS5jPTI3MDY9dm9pZCBoY2lfcmVsZWFzZV9kZXYoc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4tLVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTI3MjctXHRoY2lfY29ubl9wYXJhbXNfY2xlYXJfYWxsKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjI3Mjg6XHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0yNzI5LVx0aGNpX2Jsb2NrZWRfa2V5c19jbGVhcihoZGV2KTtcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9MzI4MT1pbnQgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtMzMwNy1cdCAqL1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjMzMDg6XHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMzA5LVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYwNTc9c3RhdGljIGludCBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MDk4LVx0ICovXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MDk5Olx0aGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXIoaGRldik7XG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTAwLVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYxNDM9c3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYyMjAtXHQgKi9cbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYyMjE6XHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYyMjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZ1bmN0aW9uIENhbGxzIGFuZCBQcmlvcml0aXppbmcgRm9jdXMgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGVzZSBmdW5jdGlvbiBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUuIEkgc2VlIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgZ2V0cyBjYWxsZWQgZnJvbSBxdWl0ZSBhIGZldyBwbGFjZXM6IGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWxgLCBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2AsIGFuZCBgaGNpX3JlbGVhc2VfZGV2YC4gSSB0aGluayB0aGUgbW9zdCByZWxldmFudCBvbmVzIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdyBhcmUgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbGAsIGFuZCBgbWdtdF9kZXZpY2VfZm91bmRgLgoKVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzaWduYXR1cmVzIG9mIGBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWxgIGFuZCBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgIHRvIHNlZSBpZiB0aGV5JiMzOTtyZSBzdGF0aWMuIEFoLCB5ZXMsIHRoZXkgKmFyZSogc3RhdGljLiBXaGlsZSBJICpjb3VsZCogbGlzdCB0aGVtIGluIEZvY3VzU3ltYm9scywgdGhlIHByZWZlcmVuY2UgaXMgYWx3YXlzIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpZiB3ZSBjYW4gZmluZCB0aGVtLiBXZSB3YW50IHRoZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQgd2FpdCBhIG1vbWVudC4uLiB0aGF0IHByb21wdCBkb2VzIHNheSB3ZSBzaG91bGQgcHJlZmVyIG5vbi1zdGF0aWMgYW5kIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyEKClRoaW5raW5nIHRocm91Z2ggdGhpcy4uLiBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzIHBhcnQgb2YgYW4gYXJyYXkgb2YgaGFuZGxlcnMsIHNvIGl0JiMzOTtzIHByb2JhYmx5ICpub3QqIGlubGluZWQuIE9uIHRoZSBvdGhlciBoYW5kLCBgc3RhcnRfZGlzY292ZXJ5X2ludGVybmFsYD8gVGhhdCBvbmUgbWlnaHQgYWN0dWFsbHkgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIEdvb2QgdG8ga2VlcCBpbiBtaW5kLgoKRmluYWxseSwgYG1nbXRfZGV2aWNlX2ZvdW5kYCBpcyB0aGFua2Z1bGx5IGEgbm9uLXN0YXRpYyBmdW5jdGlvbi4gV2UgaGF2ZSBhIGNsZWFyIHdpbm5lciB0aGVyZSEgSSBzaG91bGQgY2hlY2sgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9tZ210LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9tZ210LmM9NjEzNT1zdGF0aWMgaW50IHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtNjE0Mi1cbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNDM6c3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxubmV0L2JsdWV0b290aC9tZ210LmMtNjE0NC1cdFx0XHRcdCAgIHZvaWQgKmRhdGEsIHUxNiBsZW4pXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQ1LXtcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNDY6XHRzdHJ1Y3QgbWdtdF9jcF9zdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeSAqY3AgPSBkYXRhO1xubmV0L2JsdWV0b290aC9tZ210LmMtNjE0Ny1cdHN0cnVjdCBtZ210X3BlbmRpbmdfY21kICpjbWQ7XG4tLVxubmV0L2JsdWV0b290aC9tZ210LmM9OTQ2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGhjaV9tZ210X2hhbmRsZXIgbWdtdF9oYW5kbGVyc1tdID0ge1xuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jLTk1MzgtXHRcdFx0XHRcdFx0SENJX01HTVRfVU5DT05GSUdVUkVEIH0sXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo5NTM5Olx0eyBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeSwgTUdNVF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWV9TSVpFLFxubmV0L2JsdWV0b290aC9tZ210LmMtOTU0MC1cdFx0XHRcdFx0XHRIQ0lfTUdNVF9WQVJfTEVOIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJsdWV0b290aCBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0LiBUaGUgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBoYW5kbGVyJiMzOTtzIGFkZHJlc3MgaXMgZGVmaW5pdGVseSBiZWluZyB0YWtlbiwgc28gaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiBUaGVuLCBgbWdtdF9kZXZpY2VfZm91bmRgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSBpdHMgbW9kdWxlLiBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2AgaXMgYWxzbyBub24tc3RhdGljLCBzbyBpdCYjMzk7cyBub3QgaGlkZGVuIHdpdGhpbiBhIHNpbmdsZSBjb21waWxhdGlvbiB1bml0IGVpdGhlci4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgY29uc2lkZXIgdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEJsdWV0b290aCB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBPYnZpb3VzbHksIGBDT05GSUdfQlRgIGlzIHRoZSBmdW5kYW1lbnRhbCBvbmUsIGJ1dCBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgbW9yZSBncmFudWxhciBzZXR0aW5ncyBmb3IgQmx1ZXRvb3RoIG1hbmFnZW1lbnQgc3BlY2lmaWNhbGx5LiBUbyBiZSB0aG9yb3VnaCwgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aG9zZSBpcyBwcm9iYWJseSBpbiB0aGUgYG5ldC9ibHVldG9vdGgvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEJsdWV0b290aCBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIEJUXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtCbHVldG9vdGggc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gIVMzOTBcbiAgIDk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMTA6XHRcdHNlbGVjdCBDUkMxNlxuICAxMTpcdFx0c2VsZWN0IENSWVBUT1xuICAxMjpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTXG4gIDEzOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiAgMTQ6XHRcdHNlbGVjdCBDUllQVE9fRUNESFxuICAxNTpcdFx0aGVscFxuICAxNjpcdFx0ICBCbHVldG9vdGggaXMgbG93LWNvc3QsIGxvdy1wb3dlciwgc2hvcnQtcmFuZ2Ugd2lyZWxlc3MgdGVjaG5vbG9neS5cbiAgMTc6XHRcdCAgSXQgd2FzIGRlc2lnbmVkIGFzIGEgcmVwbGFjZW1lbnQgZm9yIGNhYmxlcyBhbmQgb3RoZXIgc2hvcnQtcmFuZ2VcbiAgMTg6XHRcdCAgdGVjaG5vbG9naWVzIGxpa2UgSXJEQS4gIEJsdWV0b290aCBvcGVyYXRlcyBpbiBwZXJzb25hbCBhcmVhIHJhbmdlXG4gIDE5Olx0XHQgIHRoYXQgdHlwaWNhbGx5IGV4dGVuZHMgdXAgdG8gMTAgbWV0ZXJzLiAgTW9yZSBpbmZvcm1hdGlvbiBhYm91dFxuICAyMDpcdFx0ICBCbHVldG9vdGggY2FuIGJlIGZvdW5kIGF0IFx1MDAzY2h0dHBzOi8vd3d3LmJsdWV0b290aC5jb20vXHUwMDNlLlxuICAyMTpcdFxuICAyMjpcdFx0ICBMaW51eCBCbHVldG9vdGggc3Vic3lzdGVtIGNvbnNpc3Qgb2Ygc2V2ZXJhbCBsYXllcnM6XG4gIDIzOlx0XHQgICAgIEJsdWV0b290aCBDb3JlXG4gIDI0Olx0XHRcdEhDSSBkZXZpY2UgYW5kIGNvbm5lY3Rpb24gbWFuYWdlciwgc2NoZWR1bGVyXG4gIDI1Olx0XHRcdFNDTyBhdWRpbyBsaW5rc1xuICAyNjpcdFx0XHRMMkNBUCAoTG9naWNhbCBMaW5rIENvbnRyb2wgYW5kIEFkYXB0YXRpb24gUHJvdG9jb2wpXG4gIDI3Olx0XHRcdFNNUCAoU2VjdXJpdHkgTWFuYWdlciBQcm90b2NvbCkgb24gTEUgKExvdyBFbmVyZ3kpIGxpbmtzXG4gIDI4Olx0XHRcdElTTyBpc29jaHJvbm91cyBsaW5rc1xuICAyOTpcdFx0ICAgICBIQ0kgRGV2aWNlIGRyaXZlcnMgKEludGVyZmFjZSB0byB0aGUgaGFyZHdhcmUpXG4gIDMwOlx0XHQgICAgIFJGQ09NTSBNb2R1bGUgKFJGQ09NTSBQcm90b2NvbCkgIFxuICAzMTpcdFx0ICAgICBCTkVQIE1vZHVsZSAoQmx1ZXRvb3RoIE5ldHdvcmsgRW5jYXBzdWxhdGlvbiBQcm90b2NvbClcbiAgMzI6XHRcdCAgICAgSElEUCBNb2R1bGUgKEh1bWFuIEludGVyZmFjZSBEZXZpY2UgUHJvdG9jb2wpXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBCbHVldG9vdGggc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cbiAgMzU6XHRcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGUgKGJsdWV0b290aCkuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIFRvIHVzZSBMaW51eCBCbHVldG9vdGggc3Vic3lzdGVtLCB5b3Ugd2lsbCBuZWVkIHNldmVyYWwgdXNlci1zcGFjZVxuICAzODpcdFx0ICB1dGlsaXRpZXMgbGlrZSBoY2ljb25maWcgYW5kIGJsdWV0b290aGQuICBUaGVzZSB1dGlsaXRpZXMgYW5kIHVwZGF0ZXNcbiAgMzk6XHRcdCAgdG8gQmx1ZXRvb3RoIGtlcm5lbCBtb2R1bGVzIGFyZSBwcm92aWRlZCBpbiB0aGUgQmx1ZVogcGFja2FnZXMuICBGb3JcbiAgNDA6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFx1MDAzY2h0dHA6Ly93d3cuYmx1ZXoub3JnL1x1MDAzZS5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlRfQlJFRFJcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7Qmx1ZXRvb3RoIENsYXNzaWMgKEJSL0VEUikgZmVhdHVyZXNcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlRcbiAgNDU6XHRcdGRlZmF1bHQgeVxuICA0NjpcdFx0aGVscFxuICA0NzpcdFx0ICBCbHVldG9vdGggQ2xhc3NpYyBpbmNsdWRlcyBzdXBwb3J0IGZvciBCYXNpYyBSYXRlIChCUilcbiAgNDg6XHRcdCAgYXZhaWxhYmxlIHdpdGggQmx1ZXRvb3RoIHZlcnNpb24gMS4wYiBvciBsYXRlciBhbmQgc3VwcG9ydFxuICA0OTpcdFx0ICBmb3IgRW5oYW5jZWQgRGF0YSBSYXRlIChFRFIpIGF2YWlsYWJsZSB3aXRoIEJsdWV0b290aFxuICA1MDpcdFx0ICB2ZXJzaW9uIDIuMCBvciBsYXRlci5cbiAgNTE6XHRcbiAgNTI6XHRzb3VyY2UgXCYjMzQ7bmV0L2JsdWV0b290aC9yZmNvbW0vS2NvbmZpZ1wmIzM0O1xuICA1MzpcdFxuICA1NDpcdHNvdXJjZSBcJiMzNDtuZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZ1wmIzM0O1xuICA1NTpcdFxuICA1NjpcdHNvdXJjZSBcJiMzNDtuZXQvYmx1ZXRvb3RoL2hpZHAvS2NvbmZpZ1wmIzM0O1xuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBCVF9MRVxuICA1OTpcdFx0Ym9vbCBcJiMzNDtCbHVldG9vdGggTG93IEVuZXJneSAoTEUpIGZlYXR1cmVzXCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIEJUXG4gIDYxOlx0XHRkZWZhdWx0IHlcbiAgNjI6XHRcdGhlbHBcbiAgNjM6XHRcdCAgQmx1ZXRvb3RoIExvdyBFbmVyZ3kgaW5jbHVkZXMgc3VwcG9ydCBsb3ctZW5lcmd5IHBoeXNpY2FsXG4gIDY0Olx0XHQgIGxheWVyIGF2YWlsYWJsZSB3aXRoIEJsdWV0b290aCB2ZXJzaW9uIDQuMCBvciBsYXRlci5cbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgQlRfTEVfTDJDQVBfRUNSRURcbiAgNjc6XHRcdGJvb2wgXCYjMzQ7Qmx1ZXRvb3RoIEwyQ0FQIEVuaGFuY2VkIENyZWRpdCBGbG93IENvbnRyb2xcJiMzNDtcbiAgNjg6XHRcdGRlcGVuZHMgb24gQlRfTEVcbiAgNjk6XHRcdGRlZmF1bHQgeVxuICA3MDpcdFx0aGVscFxuICA3MTpcdFx0ICBCbHVldG9vdGggTG93IEVuZXJneSBMMkNBUCBFbmhhbmNlZCBDcmVkaXQgRmxvdyBDb250cm9sIGF2YWlsYWJsZSB3aXRoXG4gIDcyOlx0XHQgIEJsdWV0b290aCB2ZXJzaW9uIDUuMiBvciBsYXRlci5cbiAgNzM6XHRcbiAgNzQ6XHRcdCAgVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGJsdWV0b290aC5lbmFibGVfZWNyZWQ9WzF8MF1cbiAgNzU6XHRcdCAgb24gdGhlIGtlcm5lbCBjb21tYW5kbGluZS5cbiAgNzY6XHRcbiAgNzc6XHRjb25maWcgQlRfNkxPV1BBTlxuICA3ODpcdFx0dHJpc3RhdGUgXCYjMzQ7Qmx1ZXRvb3RoIDZMb1dQQU4gc3VwcG9ydFwmIzM0O1xuICA3OTpcdFx0ZGVwZW5kcyBvbiBCVF9MRSBcdTAwMjZcdTAwMjYgNkxPV1BBTlxuICA4MDpcdFx0aGVscFxuICA4MTpcdFx0ICBJUHY2IGNvbXByZXNzaW9uIG92ZXIgQmx1ZXRvb3RoIExvdyBFbmVyZ3kuXG4gIDgyOlx0XG4gIDgzOlx0Y29uZmlnIEJUX0xFRFNcbiAgODQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xuICA4NTpcdFx0ZGVwZW5kcyBvbiBCVFxuICA4NjpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTXG4gIDg3Olx0XHRzZWxlY3QgTEVEU19UUklHR0VSU1xuICA4ODpcdFx0aGVscFxuICA4OTpcdFx0ICBUaGlzIG9wdGlvbiBzZWxlY3RzIGEgZmV3IExFRCB0cmlnZ2VycyBmb3IgZGlmZmVyZW50XG4gIDkwOlx0XHQgIEJsdWV0b290aCBldmVudHMuXG4gIDkxOlx0XG4gIDkyOlx0Y29uZmlnIEJUX01TRlRFWFRcbiAgOTM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIE1pY3Jvc29mdCBleHRlbnNpb25zXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIEJUXG4gIDk1Olx0XHRoZWxwXG4gIDk2Olx0XHQgIFRoaXMgb3B0aW9ucyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNaWNyb3NvZnQgZGVmaW5lZCBIQ0lcbiAgOTc6XHRcdCAgdmVuZG9yIGV4dGVuc2lvbnMuXG4gIDk4Olx0XG4gIDk5Olx0Y29uZmlnIEJUX0FPU1BFWFRcbiAxMDA6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBleHRlbnNpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIEJsdWV0b290aCBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYXNzZXNzZWQgdGhlIHBhdGNoLiBCYXNlZCBvbiB3aGF0IEkgc2VlLCBgQ09ORklHX0JUYCBhbG9uZSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgZnV6emluZy4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSByZWFzb25pbmc6IHRoZSBmaXggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHByb2JhYmx5IGEgVXNlLUFmdGVyLUZyZWUgb3IgZGF0YSByYWNlLCB3aXRoaW4gdGhlIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvZGUuIEl0IGludHJvZHVjZXMgc3BpbmxvY2tzIHRvIHByb3RlY3QgYWNjZXNzZXMgdG8gYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkc2AuIFRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSB0cmlnZ2VyZWQgYnkgQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29tbWFuZHMsIHNwZWNpZmljYWxseSBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLCBhbmQgZHVyaW5nIGRldmljZSBzY2FubmluZywgdGhyb3VnaCBgbWdtdF9kZXZpY2VfZm91bmRgLgoKSW5pdGlhbGx5LCBJIGhhZCBhIGxpc3Qgb2YgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYG1nbXRfZGV2aWNlX2ZvdW5kYCwgYW5kIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYCBhcyBrZXkgc3ltYm9scyB0byB0YXJnZXQuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IHRoZXNlIHN5bWJvbCBzZWxlY3Rpb25zLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBmdXp6aW5nIHByb21wdCBndWlkZWxpbmVzLiBJdCBwb2ludGVkIG91dCB0aGF0IEkgc2hvdWxkIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuCgpJIHBhdXNlZCB0byBjaGVjayBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLiBUaG91Z2ggaXQmIzM5O3MgKmRlY2xhcmVkKiBhcyBzdGF0aWMsIGl04oCZcyBhY3R1YWxseSBhIGhhbmRsZXIgd2l0aGluIHRoZSBgbWdtdF9oYW5kbGVyc2AgYXJyYXkuIEJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4sIGl0IGRvZXNuJiMzOTt0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoaXMgbWFrZXMgaXQgYW4gQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb24gZm9yIHRoZSBtYW5hZ2VtZW50IEFQSSDigJMgc28gaXQgYWJzb2x1dGVseSBmaXRzIHRoZSBjcml0ZXJpYS4gSSBjYW4gaW5jbHVkZSBpdCBpbiB0aGUgbGlzdC4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgYGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmNgLCBidXQgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIG92ZXJhbGwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjE6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz0zMTUxPXN0YXRpYyBpbnQgaGNpX3Bhc3NpdmVfc2Nhbl9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMjgwLSAqL1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjMyODE6aW50IGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtMzI4Mi17XG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jPTMzNjY9c3RhdGljIGludCB1cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtMzM2Ny17XG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM6MzM2ODpcdHJldHVybiBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTMzNjktfVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz02MDg2PWludCBoY2lfdXBkYXRlX2Nvbm5lY3RhYmxlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTYxMTMtXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM6NjExNDpcdHJldHVybiBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTYxMTUtfVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz02MTQ2PXN0YXRpYyBpbnQgaGNpX2FjdGl2ZV9zY2FuX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVpbnQxNl90IGludGVydmFsKVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy02MjEyLVx0LyogUmVzdW1lIHBhc3NpdmUgc2Nhbm5pbmcgKi9cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzo2MjEzOlx0aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy02MjE0LVx0cmV0dXJuIGVycjtcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9NjM4Nz1pbnQgaGNpX3N1c3BlbmRfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNjQ0MC1cdC8qIFVwZGF0ZSBMRSBwYXNzaXZlIHNjYW4gaWYgZW5hYmxlZCAqL1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjY0NDE6XHRoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTY0NDItXG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jPTY0ODQ9c3RhdGljIGludCBoY2lfcmVzdW1lX3NjYW5fc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNjQ5My1cdC8qIFJlc2V0IHBhc3NpdmUgc2Nhbm5pbmcgdG8gbm9ybWFsICovXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM6NjQ5NDpcdGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoaGRldik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNjQ5NS1cbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9NzM4Nz1zdGF0aWMgaW50IGhjaV9sZV9wYV9jcmVhdGVfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSlcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNzQxMy1cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzo3NDE0Olx0LyogTWFyayBIQ0lfQ09OTl9DUkVBVEVfUEFfU1lOQyBzbyBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jIGNhblxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTc0MTUtXHQgKiBwcm9ncmFtIHRoZSBhZGRyZXNzIGluIHRoZSBhbGxvdyBsaXN0IHNvIFBBIGFkdmVydGlzZW1lbnRzIGNhbiBiZVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy03NDE5LVxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjc0MjA6XHRoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTc0MjEtXG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTc0OTQtXHQvKiBVcGRhdGUgcGFzc2l2ZSBzY2FuIHNpbmNlIEhDSV9QQV9TWU5DIGZsYWcgaGFzIGJlZW4gY2xlYXJlZCAqL1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjc0OTU6XHRoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTc0OTYtXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmM9MjIwNT1zdGF0aWMgaW50IHNldF9tZXNoX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtMjIzOS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jOjIyNDA6XHRoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKGhkZXYpO1xubmV0L2JsdWV0b290aC9tZ210LmMtMjI0MS1cdHJldHVybiAwO1xuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTc3NjQ9c3RhdGljIGludCBhZGRfZGV2aWNlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy03NzY1LXtcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjc3NjY6XHRyZXR1cm4gaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTc3NjctfVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTc4OTI9c3RhdGljIGludCByZW1vdmVfZGV2aWNlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy03ODkzLXtcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjc4OTQ6XHRyZXR1cm4gaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTc4OTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM4MQoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjYW4gU3luY2hyb25pemF0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGhlcmUuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgZ29pbmcgdG8gZHJpdmUgdGhlIGxvZ2ljIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLgoKTm93LCBsZXQmIzM5O3Mgc2VlLCB3ZSYjMzk7dmUgZ290IGEgc2V0IG9mIGZvY3VzIHN5bWJvbHMgdGhhdCByZWxhdGUgdG8gdGhlIHNlcnZpY2UgZGlzY292ZXJ5IGFuZCBkZXZpY2UgbWFuYWdlbWVudCB3aGljaCBpbmNsdWRlcyBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLCBgbWdtdF9kZXZpY2VfZm91bmRgLCBhbmQgb3VyIG1haW4gZnVuY3Rpb24gb2YgY29uY2VybiwgYGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmNgLiBTZWVtcyByZWFzb25hYmxlLiBBbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHdlIG5lZWQgdG8gZW5zdXJlIGFyZSBlbmFibGVkIGFyZSBhbGwgdW5kZXIgYEJUYC4KCk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IHJlc3VsdHMgYXJlIGJlaW5nIGNvbmZpZ3VyZWQgd2l0aCBhIGNhbGwgdG8gc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O21nbXRfZGV2aWNlX2ZvdW5kJiMzNDssCiAgICAmIzM0O2hjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiAobGlrZWx5IFVBRiBvciBkYXRhIHJhY2UpIGluIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvZGUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHNgIGFjY2Vzc2VzLiBUaGUgYWZmZWN0ZWQgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBCbHVldG9vdGggbWFuYWdlbWVudCBjb21tYW5kcyAoYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCkgYW5kIGRldmljZSBzY2FubmluZyAoYG1nbXRfZGV2aWNlX2ZvdW5kYCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfc2VydmljZV9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7bWdtdF9kZXZpY2VfZm91bmQmIzM0OywKICAgICYjMzQ7aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIChsaWtlbHkgVUFGIG9yIGRhdGEgcmFjZSkgaW4gQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29kZSBieSBhZGRpbmcgc3BpbmxvY2tzIGFyb3VuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkc2AgYWNjZXNzZXMuIFRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvbW1hbmRzIChgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgKSBhbmQgZGV2aWNlIHNjYW5uaW5nIChgbWdtdF9kZXZpY2VfZm91bmRgKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjE6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNwaW5sb2NrIHByb3RlY3Rpb24gYXJvdW5kIHRoZSBhY2Nlc3NlcyB0byBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkc2AgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMgKHN1Y2ggYXMgZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBvciBLQVNBTi4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjgxNGZjNTA4ZWRkNzQxNmNhMThiMzMxNmM5MTc4NGY0NjNlYTYwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMjE6MDU6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IDNkZjU5ODQ5ZGNiZWEuLjgxMTU0MzViNWQyYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC05MTksOSAmIzQzOzkxOSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIAloZGV2LSZndDtkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yZXBvcnRfaW52YWxpZF9yc3NpID0gdHJ1ZTsKIAloZGV2LSZndDtkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7Ci0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwOwogCiAJc3Bpbl9sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IDA7CiAJa2ZyZWUoaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzKTsKIAloZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwppbmRleCAxNjdkNzVlMzQ1MjY2Li4wOTBkMGYwMDg3NGExIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwpAQCAtNjIyMywxMiAmIzQzOzYyMjMsMTQgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LAogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yZXN1bHRfZmlsdGVyaW5nID0gdHJ1ZTsKIAloZGV2LSZndDtkaXNjb3ZlcnkudHlwZSA9IGNwLSZndDt0eXBlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yc3NpID0gY3AtJmd0O3Jzc2k7Ci0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50OwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAKIAlpZiAodXVpZF9jb3VudCAmZ3Q7IDApIHsKIAkJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzID0ga21lbWR1cChjcC0mZ3Q7dXVpZHMsIHV1aWRfY291bnQgKiAxNiwKIAkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgewomIzQzOwkJCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwogCQkJZXJyID0gbWdtdF9jbWRfY29tcGxldGUoc2ssIGhkZXYtJmd0O2lkLAogCQkJCQkJTUdNVF9PUF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWSwKIAkJCQkJCU1HTVRfU1RBVFVTX0ZBSUxFRCwKQEAgLTYyMzgsNiAmIzQzOzYyNDAsOSBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsCiAJCX0KIAl9CiAKJiM0MzsJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50OwomIzQzOwlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKJiM0MzsKIAllcnIgPSBoY2lfY21kX3N5bmNfcXVldWUoaGRldiwgc3RhcnRfZGlzY292ZXJ5X3N5bmMsIGNtZCwKIAkJCQkgc3RhcnRfZGlzY292ZXJ5X2NvbXBsZXRlKTsKIAlpZiAoZXJyICZsdDsgMCkgewpAQCAtMTAzNjcsNiAmIzQzOzEwMzcyLDcgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLAogCSAgICAgIWhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19TVFJJQ1RfRFVQTElDQVRFX0ZJTFRFUikpKSkKIAkJcmV0dXJuICBmYWxzZTsKIAomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAJaWYgKGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50ICE9IDApIHsKIAkJLyogSWYgYSBsaXN0IG9mIFVVSURzIGlzIHByb3ZpZGVkIGluIGZpbHRlciwgcmVzdWx0cyB3aXRoIG5vCiAJCSAqIG1hdGNoaW5nIFVVSUQgc2hvdWxkIGJlIGRyb3BwZWQuCkBAIC0xMDM3NSw5ICYjNDM7MTAzODEsMTIgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLAogCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgJmFtcDsmYW1wOwogCQkgICAgIWVpcl9oYXNfdXVpZHMoc2Nhbl9yc3AsIHNjYW5fcnNwX2xlbiwKIAkJCQkgICBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCwKLQkJCQkgICBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMpKQomIzQzOwkJCQkgICBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9CiAJfQomIzQzOwlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAogCS8qIElmIGR1cGxpY2F0ZSBmaWx0ZXJpbmcgZG9lcyBub3QgcmVwb3J0IFJTU0kgY2hhbmdlcywgdGhlbiByZXN0YXJ0CiAJICogc2Nhbm5pbmcgdG8gZW5zdXJlIHVwZGF0ZWQgcmVzdWx0IHdpdGggdXBkYXRlZCBSU1NJIHZhbHVlcy4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIxOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTcKCQkJCQkJCW91dHB1dDogMTE2CgkJCQkJCQl0aG91Z2h0czogNTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmx1ZXRvb3RoIERpc2NvdmVyeSBGaWx0ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGZhaXJseSBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIHRvdWNoaW5nIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAsIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGFuZCBgaXNfZmlsdGVyX21hdGNoYCBpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgIGFuZCBhbHNvIHRoZSByZWxldmFudCBoZWFkZXIsIGBoY2lfY29yZS5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgYWRkaW5nIGBzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jaylgIGFyb3VuZCBhY2Nlc3NlcyB0byBgaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzYC4KCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIGlzIGEgY2xhc3NpY2FsIHJhY2UgY29uZGl0aW9uIGZpeC4gSXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgdG8gYHV1aWRfY291bnRgIGFuZCBgdXVpZHNgLiBUaGlzIGNvdWxkIG1hbmlmZXN0IGFzIGEgZGF0YSByYWNlLCBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBldmVuIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlmIHRoaW5ncyBnZXQgdHJ1bHkgb3V0IG9mIHN5bmMuIEdvb2QgY2F0Y2guCgpJJiMzOTt2ZSB0YWtlbiBhIHF1aWNrIGxvb2sgYXQgdGhlIGNvZGUgc25pcHBldHMuIFRoZSBwYXRjaCBpcyB3cmFwcGluZyB0aGUgYWNjZXNzZXMgdG8gdGhlIHNoYXJlZCB2YXJpYWJsZXMgd2l0aCBhIGxvY2suIFRoZSBmaXJzdCBjb2RlIGJsb2NrIGxvb2tzIGNsZWFuLiBUaGUgc2Vjb25kIGxvb2tzIGxpa2UgaXQgaXMgZml4aW5nIGEgZG91YmxlIGZyZWUgYnkgcHJvdGVjdGluZyB0aGUgbWVtb3J5IGNvcHkgYW5kIHRoZSB0aGlyZCBsb29rcyBsaWtlIGl0JiMzOTtzIHByb3RlY3RpbmcgYWNjZXNzIHRvIGB1dWlkX2NvdW50YCB3aGVuIGRldGVybWluaW5nIGlmIGEgVVVJRCBtYXRjaGVzLiBJdCBjb25maXJtcyBteSBhc3N1bXB0aW9uLgoKYGBgYwogCXNwaW5fbG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKJiM0MzsJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwOwogCWtmcmVlKGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcyk7CiAJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzID0gTlVMTDsKIAlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKYGBgCgpgYGBjCi0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50OwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiAKIAlpZiAodXVpZF9jb3VudCAmZ3Q7IDApIHsKIAkJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzID0ga21lbWR1cChjcC0mZ3Q7dXVpZHMsIHV1aWRfY291bnQgKiAxNiwKIAkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgewomIzQzOwkJCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwouLi4KIAkJfQogCX0KIAomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwpgYGAKCmBgYGMKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwogCWlmIChoZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCAhPSAwKSB7Ci4uLgotCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykpCiYjNDM7CQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykpIHsKJiM0MzsJCQlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KIAl9CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwpgYGAKClRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0JiMzOTtzIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gd291bGRuJiMzOTt0IGJlIHJlbGV2YW50LiBUaGUgYnVnIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIHdvdWxkIHByb2JhYmx5IGJlIGZsYWdnZWQgYnkgS0NTQU4gb3IgS0FTQU4sIGFzc3VtaW5nIHRoZSByYWNlIHJlc3VsdHMgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0JiMzOTtzIGEgY29uY3VycmVuY3kgZml4LCBwbGFpbiBhbmQgc2ltcGxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNwaW5sb2NrIHByb3RlY3Rpb24gYXJvdW5kIHRoZSBhY2Nlc3NlcyB0byBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkc2AgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMgKHN1Y2ggYXMgZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBvciBLQVNBTi4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3BpbmxvY2sgcHJvdGVjdGlvbiBhcm91bmQgdGhlIGFjY2Vzc2VzIHRvIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGlzc3VlcyAoc3VjaCBhcyBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtDU0FOIG9yIEtBU0FOLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMTowNTo0NC45NjI3NDk4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzA5OTg4MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfc2VydmljZV9kaXNjb3ZlcnlcIixcbiAgICBcIm1nbXRfZGV2aWNlX2ZvdW5kXCIsXG4gICAgXCJoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHNwaW5sb2NrIHByb3RlY3Rpb24gYXJvdW5kIHRoZSBhY2Nlc3NlcyB0byBgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzYCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGlzc3VlcyAoc3VjaCBhcyBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtDU0FOIG9yIEtBU0FOLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gKGxpa2VseSBVQUYgb3IgZGF0YSByYWNlKSBpbiBCbHVldG9vdGggbWFuYWdlbWVudCBjb2RlIGJ5IGFkZGluZyBzcGlubG9ja3MgYXJvdW5kIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHNgIGFjY2Vzc2VzLiBUaGUgYWZmZWN0ZWQgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBCbHVldG9vdGggbWFuYWdlbWVudCBjb21tYW5kcyAoYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCkgYW5kIGRldmljZSBzY2FubmluZyAoYG1nbXRfZGV2aWNlX2ZvdW5kYCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA1OjQ0Ljk2Mjc1NTkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ5MTI3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmODE0ZmM1MDhlZGQ3NDE2Y2ExOGIzMzE2YzkxNzg0ZjQ2M2VhNjBkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMjE6MDU6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxcbmluZGV4IDNkZjU5ODQ5ZGNiZWEuLjgxMTU0MzViNWQyYWYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxcbkBAIC05MTksOSArOTE5LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbiBcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlO1xcbiBcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkucmVwb3J0X2ludmFsaWRfcnNzaSA9IHRydWU7XFxuIFxcdGhkZXYtXFx1MDAzZWRpc2NvdmVyeS5yc3NpID0gSENJX1JTU0lfSU5WQUxJRDtcXG4tXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZoZGV2LVxcdTAwM2VkaXNjb3ZlcnkubG9jayk7XFxuK1xcdGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcXG4gXFx0a2ZyZWUoaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzKTtcXG4gXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0gTlVMTDtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xcbmluZGV4IDE2N2Q3NWUzNDUyNjYuLjA5MGQwZjAwODc0YTEgMTAwNjQ0XFxuLS0tIGEvbmV0L2JsdWV0b290aC9tZ210LmNcXG4rKysgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xcbkBAIC02MjIzLDEyICs2MjIzLDE0IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcXG4gXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSB0cnVlO1xcbiBcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudHlwZSA9IGNwLVxcdTAwM2V0eXBlO1xcbiBcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkucnNzaSA9IGNwLVxcdTAwM2Vyc3NpO1xcbi1cXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG4gXFxuIFxcdGlmICh1dWlkX2NvdW50IFxcdTAwM2UgMCkge1xcbiBcXHRcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBrbWVtZHVwKGNwLVxcdTAwM2V1dWlkcywgdXVpZF9jb3VudCAqIDE2LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG4gXFx0XFx0aWYgKCFoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHMpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG4gXFx0XFx0XFx0ZXJyID0gbWdtdF9jbWRfY29tcGxldGUoc2ssIGhkZXYtXFx1MDAzZWlkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRNR01UX09QX1NUQVJUX1NFUlZJQ0VfRElTQ09WRVJZLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRNR01UX1NUQVRVU19GQUlMRUQsXFxuQEAgLTYyMzgsNiArNjI0MCw5IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZoZGV2LVxcdTAwM2VkaXNjb3ZlcnkubG9jayk7XFxuK1xcbiBcXHRlcnIgPSBoY2lfY21kX3N5bmNfcXVldWUoaGRldiwgc3RhcnRfZGlzY292ZXJ5X3N5bmMsIGNtZCxcXG4gXFx0XFx0XFx0XFx0IHN0YXJ0X2Rpc2NvdmVyeV9jb21wbGV0ZSk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuQEAgLTEwMzY3LDYgKzEwMzcyLDcgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxcbiBcXHQgICAgICFoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU1RSSUNUX0RVUExJQ0FURV9GSUxURVIpKSkpXFxuIFxcdFxcdHJldHVybiAgZmFsc2U7XFxuIFxcbitcXHRzcGluX2xvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG4gXFx0aWYgKGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ICE9IDApIHtcXG4gXFx0XFx0LyogSWYgYSBsaXN0IG9mIFVVSURzIGlzIHByb3ZpZGVkIGluIGZpbHRlciwgcmVzdWx0cyB3aXRoIG5vXFxuIFxcdFxcdCAqIG1hdGNoaW5nIFVVSUQgc2hvdWxkIGJlIGRyb3BwZWQuXFxuQEAgLTEwMzc1LDkgKzEwMzgxLDEyIEBAIHN0YXRpYyBib29sIGlzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgczggcnNzaSwgdTggKmVpcixcXG4gXFx0XFx0XFx0XFx0ICAgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIWVpcl9oYXNfdXVpZHMoc2Nhbl9yc3AsIHNjYW5fcnNwX2xlbixcXG4gXFx0XFx0XFx0XFx0ICAgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQsXFxuLVxcdFxcdFxcdFxcdCAgIGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkcykpXFxuK1xcdFxcdFxcdFxcdCAgIGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkcykpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG4gXFxuIFxcdC8qIElmIGR1cGxpY2F0ZSBmaWx0ZXJpbmcgZG9lcyBub3QgcmVwb3J0IFJTU0kgY2hhbmdlcywgdGhlbiByZXN0YXJ0XFxuIFxcdCAqIHNjYW5uaW5nIHRvIGVuc3VyZSB1cGRhdGVkIHJlc3VsdCB3aXRoIHVwZGF0ZWQgUlNTSSB2YWx1ZXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA1OjQ1LjQ3ODQyNDUyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM0ODgzNzk4Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfc2VydmljZV9kaXNjb3ZlcnlcIixcbiAgICBcIm1nbXRfZGV2aWNlX2ZvdW5kXCIsXG4gICAgXCJoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiAobGlrZWx5IFVBRiBvciBkYXRhIHJhY2UpIGluIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvZGUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkc2AgYWNjZXNzZXMuIFRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvbW1hbmRzIChgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgKSBhbmQgZGV2aWNlIHNjYW5uaW5nIChgbWdtdF9kZXZpY2VfZm91bmRgKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjgxNGZjNTA4ZWRkNzQxNmNhMThiMzMxNmM5MTc4NGY0NjNlYTYwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMjE6MDU6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXG5pbmRleCAzZGY1OTg0OWRjYmVhLi44MTE1NDM1YjVkMmFmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXG5AQCAtOTE5LDkgKzkxOSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSBmYWxzZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlcG9ydF9pbnZhbGlkX3Jzc2kgPSB0cnVlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xuIFx0a2ZyZWUoaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBOVUxMO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuaW5kZXggMTY3ZDc1ZTM0NTI2Ni4uMDkwZDBmMDA4NzRhMSAxMDA2NDRcbi0tLSBhL25ldC9ibHVldG9vdGgvbWdtdC5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuQEAgLTYyMjMsMTIgKzYyMjMsMTQgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IHRydWU7XG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS50eXBlID0gY3AtXHUwMDNldHlwZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJzc2kgPSBjcC1cdTAwM2Vyc3NpO1xuLVx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXG4gXHRpZiAodXVpZF9jb3VudCBcdTAwM2UgMCkge1xuIFx0XHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcyA9IGttZW1kdXAoY3AtXHUwMDNldXVpZHMsIHV1aWRfY291bnQgKiAxNixcbiBcdFx0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykge1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0XHRcdGVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LVx1MDAzZWlkLFxuIFx0XHRcdFx0XHRcdE1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUlksXG4gXHRcdFx0XHRcdFx0TUdNVF9TVEFUVVNfRkFJTEVELFxuQEAgLTYyMzgsNiArNjI0MCw5IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4rXHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcbiBcdGVyciA9IGhjaV9jbWRfc3luY19xdWV1ZShoZGV2LCBzdGFydF9kaXNjb3Zlcnlfc3luYywgY21kLFxuIFx0XHRcdFx0IHN0YXJ0X2Rpc2NvdmVyeV9jb21wbGV0ZSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG5AQCAtMTAzNjcsNiArMTAzNzIsNyBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsXG4gXHQgICAgICFoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU1RSSUNUX0RVUExJQ0FURV9GSUxURVIpKSkpXG4gXHRcdHJldHVybiAgZmFsc2U7XG4gXG4rXHRzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXHRpZiAoaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCAhPSAwKSB7XG4gXHRcdC8qIElmIGEgbGlzdCBvZiBVVUlEcyBpcyBwcm92aWRlZCBpbiBmaWx0ZXIsIHJlc3VsdHMgd2l0aCBub1xuIFx0XHQgKiBtYXRjaGluZyBVVUlEIHNob3VsZCBiZSBkcm9wcGVkLlxuQEAgLTEwMzc1LDkgKzEwMzgxLDEyIEBAIHN0YXRpYyBib29sIGlzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgczggcnNzaSwgdTggKmVpcixcbiBcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFlaXJfaGFzX3V1aWRzKHNjYW5fcnNwLCBzY2FuX3JzcF9sZW4sXG4gXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50LFxuLVx0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpKVxuK1x0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4gXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcbiBcdC8qIElmIGR1cGxpY2F0ZSBmaWx0ZXJpbmcgZG9lcyBub3QgcmVwb3J0IFJTU0kgY2hhbmdlcywgdGhlbiByZXN0YXJ0XG4gXHQgKiBzY2FubmluZyB0byBlbnN1cmUgdXBkYXRlZCByZXN1bHQgd2l0aCB1cGRhdGVkIFJTU0kgdmFsdWVzLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDU6NDUuNDc4NDI2MDg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3NTAxODMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbHVldG9vdGggTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgIGFuZCBgaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3Mgc2VlIHdoYXQgdGhleSdyZSBmaXhpbmcuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIOKAkyBhIFVBRiBvciBkYXRhIHJhY2UsIHByb2JhYmx5IOKAkyBieSBhZGRpbmcgYSBzcGlubG9jayBhcm91bmQgYWNjZXNzIHRvIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYC4gU21hcnQgbW92ZSwgdGhhdCdzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIHJlc29sdmUgdGhhdCBraW5kIG9mIGlzc3VlLlxuXG5Ob3csIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgYXJlIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAsIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGFuZCBgaXNfZmlsdGVyX21hdGNoYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgYXJlIGV2ZW4gKnJlYWNoYWJsZSogY29kZSBwYXRocyBhbmQgd2hhdCBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhleSBkZXBlbmQgb24uIExldCdzIHNlZS4uLiBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgIGFuZCBgaXNfZmlsdGVyX21hdGNoYCBhcmUgYm90aCBzdGF0aWMgd2l0aGluIGBuZXQvYmx1ZXRvb3RoL21nbXQuY2AsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgaXMgaW5saW5lIGluIHRoZSBoZWFkZXIsIHdoaWNoIG1lYW5zIGl0IHdpbGwgYmUgY29tcGlsZWQgd2hlbmV2ZXIgaXQgaXMgdXNlZC5cblxuQWxyaWdodCwgc28gdG8gdW5kZXJzdGFuZCB0aGUgcmVhY2ggb2YgdGhpcyBjb2RlLCBJIG5lZWQgdG8ga25vdyBob3cgQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaXRzZWxmIGlzIGVuYWJsZWQuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIHNvdXJjZSB0cmVlIHRlbGxzIG1lIHRoYXQgYG5ldC9ibHVldG9vdGgvbWdtdC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlRgIGlzIGVuYWJsZWQuIFRoYXQgZ2l2ZXMgbWUgYSBiYXNpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIHRvIGZpZ3VyZSBvdXQgaG93IGNyaXRpY2FsIHRoaXMgZml4IGlzLiBNb3JlIGludmVzdGlnYXRpb24gaXMgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMTowNTo1MC40NTM0NDYyOTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYwNDI0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhcnRfc2VydmljZV9kaXNjb3ZlcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aC9tZ210LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JsdWV0b290aC9tZ210LmM9NjEzNT1zdGF0aWMgaW50IHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQyLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNDM6c3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNDQtXFx0XFx0XFx0XFx0ICAgdm9pZCAqZGF0YSwgdTE2IGxlbilcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQ1LXtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MTQ2OlxcdHN0cnVjdCBtZ210X2NwX3N0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5ICpjcCA9IGRhdGE7XFxubmV0L2JsdWV0b290aC9tZ210LmMtNjE0Ny1cXHRzdHJ1Y3QgbWdtdF9wZW5kaW5nX2NtZCAqY21kO1xcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmM9OTQ2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGhjaV9tZ210X2hhbmRsZXIgbWdtdF9oYW5kbGVyc1tdID0ge1xcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmMtOTUzOC1cXHRcXHRcXHRcXHRcXHRcXHRIQ0lfTUdNVF9VTkNPTkZJR1VSRUQgfSxcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo5NTM5OlxcdHsgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnksIE1HTVRfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUllfU0laRSxcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy05NTQwLVxcdFxcdFxcdFxcdFxcdFxcdEhDSV9NR01UX1ZBUl9MRU4gfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDU6NTAuNTA5NDk0MTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg4NDgzNzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgbWVudGFsIHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVlcCBEaXZlIGludG8gU2VydmljZSBEaXNjb3ZlcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkga2V5aW5nIGluIG9uIHRoZSBhcmNoaXRlY3R1cmUuIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAg4oCTIHRoYXQncyB0aGUgZW50cnkgcG9pbnQsIHRoZSB0cmlnZ2VyLCB0aGUgdGhpbmcgdGhhdCByZXNwb25kcyB0byB0aGUgYE1HTVRfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUllgIGNvbW1hbmQuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBJdCdzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbml0aWF0aW5nIHRoZSB3aG9sZSBzZXJ2aWNlIGRpc2NvdmVyeSBwcm9jZXNzLiBJdCdzIHRoZSBcImdvXCIgYnV0dG9uLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGRvZXMgYXQgYSBoaWdoIGxldmVsLCBhbmQgdGhlbiBkaWcgaW50byB0aGUgZGV0YWlscyBsYXRlci5cblxuTm93LCBnbGFuY2luZyBhdCBgaXNfZmlsdGVyX21hdGNoYC4uLiBhaCwgdGhhdCdzIGludGVyZXN0aW5nLiBJdCdzIGJlaW5nIHVzZWQgd2l0aGluIGBtZ210X2RldmljZV9mb3VuZGAuIFNvLCBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBhIGh5cG90aGVzaXMuIGBtZ210X2RldmljZV9mb3VuZGAgcHJvYmFibHkgaXRlcmF0ZXMgdGhyb3VnaCBmb3VuZCBkZXZpY2VzLCBhbmQgYGlzX2ZpbHRlcl9tYXRjaGAgaXMgdGhlIGdhdGVrZWVwZXIuIEl0J3MgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIGRlY2lkZSBpZiBhIGRpc2NvdmVyZWQgZGV2aWNlIG1lZXRzIHNvbWUgY3JpdGVyaWEgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkLiBQcm9iYWJseSBiYXNlZCBvbiBmaWx0ZXJzIHNldCB1cCBwcmV2aW91c2x5IGluIHRoZSBjb250ZXh0IG9mIHN0YXJ0aW5nIHNlcnZpY2UgZGlzY292ZXJ5LiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgaW5pdGlhbCBzZXJ2aWNlIGRpc2NvdmVyeSBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGlzaW5nIHRoZSBzZWFyY2gsIGFuZCB0aGUgYGlzX2ZpbHRlcl9tYXRjaGAgZnVuY3Rpb24gZGVmaW5lcyB0aGUgdHlwZSBvZiBkZXZpY2Ugd2Ugc2hvdWxkIGxvb2sgZm9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZmlsdGVyIGFjdHVhbGx5IGNvbnRhaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDU6NTMuNzk3OTgwNjczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODU1MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2ZpbHRlcl9tYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL21nbXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDMwMj1zdGF0aWMgYm9vbCBlaXJfaGFzX3V1aWRzKHU4ICplaXIsIHUxNiBlaXJfbGVuLCB1MTYgdXVpZF9jb3VudCwgdTggKCp1dWlkcylbMTZdKVxcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmMtMTAzNTYtXFxubmV0L2JsdWV0b290aC9tZ210LmM6MTAzNTc6c3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwMzU4LVxcdFxcdFxcdCAgICB1MTYgZWlyX2xlbiwgdTggKnNjYW5fcnNwLCB1OCBzY2FuX3JzcF9sZW4pXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDU3Nz12b2lkIG1nbXRfZGV2aWNlX2ZvdW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCBsaW5rX3R5cGUsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDYwNS1cXHRcXHQvKiBXZSBhcmUgdXNpbmcgc2VydmljZSBkaXNjb3ZlcnkgKi9cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzoxMDYwNjpcXHRcXHRpZiAoIWlzX2ZpbHRlcl9tYXRjaChoZGV2LCByc3NpLCBlaXIsIGVpcl9sZW4sIHNjYW5fcnNwLFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwNjA3LVxcdFxcdFxcdFxcdCAgICAgc2Nhbl9yc3BfbGVuKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDU6NTMuODc0ODQxNjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI1MTI2NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRldmljZSBEaXNjb3ZlcnkgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBgbWdtdF9kZXZpY2VfZm91bmRgIGhhcyB0cmlnZ2VyZWQsIG1lYW5pbmcgd2UndmUgZ290IGEgbGl2ZSBvbmUhIFRoaXMgZGV2aWNlIGlzIG5vdyBkZWZpbml0ZWx5IHdpdGhpbiBvdXIgZnV6emluZyBzY29wZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjYW4gc2VlIHRoZSBjaGFuZ2VzIGFyZSBzb2xpZCBhbmQgZnVuY3Rpb25hbCwgYWRkaW5nIGxvY2tpbmcgbWVjaGFuaXNtcyB0byBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyDigJMgYSBrZXkgY29uc2lkZXJhdGlvbi5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHRvIGVuc3VyZSB3ZSdyZSB0YXJnZXRpbmcgdGhlIHJpZ2h0IHNldHVwLiBJIGtub3cgYENPTkZJR19CVGAgaXMgdGhlIGJpZyBvbmUsIHRoZSBwcmltYXJ5IEJsdWV0b290aCBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdsbCBuZWVkLiBCdXQgSSdtIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIsIGp1c3QgaW4gY2FzZSB0aGVyZSBhcmUgYW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgbHVya2luZyBhYm91dCB0aGF0IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IuIFdlIG5lZWQgdG8gYmUgZXhoYXVzdGl2ZSB0byBtYXhpbWl6ZSBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQyMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA1OjU3LjU5OTk3MDUxOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc4ODU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZ210X2RldmljZV9mb3VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jPTE3MzQ9c3RhdGljIHZvaWQgbGVfc2V0X3NjYW5fZW5hYmxlX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBlbmFibGUpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTE3NTQtXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzoxNzU1OlxcdFxcdFxcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFxcdTAwMjZkLVxcdTAwM2VsYXN0X2Fkdl9hZGRyLCBMRV9MSU5LLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtMTc1Ni1cXHRcXHRcXHRcXHRcXHQgIGQtXFx1MDAzZWxhc3RfYWR2X2FkZHJfdHlwZSwgTlVMTCxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9MzA0MD1zdGF0aWMgdm9pZCBoY2lfaW5xdWlyeV9yZXN1bHRfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICplZGF0YSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtMzA3NS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjMwNzY6XFx0XFx0bWdtdF9kZXZpY2VfZm91bmQoaGRldiwgXFx1MDAyNmluZm8tXFx1MDAzZWJkYWRkciwgQUNMX0xJTkssIDB4MDAsXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy0zMDc3LVxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlZGV2X2NsYXNzLCBIQ0lfUlNTSV9JTlZBTElELFxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz00ODQzPXN0YXRpYyB2b2lkIGhjaV9pbnF1aXJ5X3Jlc3VsdF93aXRoX3Jzc2lfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICplZGF0YSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNDg4Ni1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjQ4ODc6XFx0XFx0XFx0bWdtdF9kZXZpY2VfZm91bmQoaGRldiwgXFx1MDAyNmluZm8tXFx1MDAzZWJkYWRkciwgQUNMX0xJTkssIDB4MDAsXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy00ODg4LVxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlZGV2X2NsYXNzLCBpbmZvLVxcdTAwM2Vyc3NpLFxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy00OTE3LVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NDkxODpcXHRcXHRcXHRtZ210X2RldmljZV9mb3VuZChoZGV2LCBcXHUwMDI2aW5mby1cXHUwMDNlYmRhZGRyLCBBQ0xfTElOSywgMHgwMCxcXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTQ5MTktXFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VkZXZfY2xhc3MsIGluZm8tXFx1MDAzZXJzc2ksXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jPTUxMjY9c3RhdGljIHZvaWQgaGNpX2V4dGVuZGVkX2lucXVpcnlfcmVzdWx0X2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZWRhdGEsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTUxNzItXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo1MTczOlxcdFxcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFxcdTAwMjZpbmZvLVxcdTAwM2ViZGFkZHIsIEFDTF9MSU5LLCAweDAwLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNTE3NC1cXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWRldl9jbGFzcywgaW5mby1cXHUwMDNlcnNzaSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9NjE3ND1zdGF0aWMgdm9pZCBwcm9jZXNzX2Fkdl9yZXBvcnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHR5cGUsIGJkYWRkcl90ICpiZGFkZHIsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTYyODUtXFx0aWYgKGhjaV9kZXZfdGVzdF9mbGFnKGhkZXYsIEhDSV9NRVNIKSkge1xcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NjI4NjpcXHRcXHRtZ210X2RldmljZV9mb3VuZChoZGV2LCBiZGFkZHIsIExFX0xJTkssIGJkYWRkcl90eXBlLCBOVUxMLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjI4Ny1cXHRcXHRcXHRcXHQgIHJzc2ksIGZsYWdzLCBkYXRhLCBsZW4sIE5VTEwsIDAsIGluc3RhbnQpO1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzAzLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NjMwNDpcXHRcXHRtZ210X2RldmljZV9mb3VuZChoZGV2LCBiZGFkZHIsIExFX0xJTkssIGJkYWRkcl90eXBlLCBOVUxMLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjMwNS1cXHRcXHRcXHRcXHQgIHJzc2ksIGZsYWdzLCBkYXRhLCBsZW4sIE5VTEwsIDAsIDApO1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzM2LVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NjMzNzpcXHRcXHRtZ210X2RldmljZV9mb3VuZChoZGV2LCBiZGFkZHIsIExFX0xJTkssIGJkYWRkcl90eXBlLCBOVUxMLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjMzOC1cXHRcXHRcXHRcXHQgIHJzc2ksIGZsYWdzLCBkYXRhLCBsZW4sIE5VTEwsIDAsIDApO1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02MzUyLVxcdFxcdGlmICghbWF0Y2gpXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo2MzUzOlxcdFxcdFxcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFxcdTAwMjZkLVxcdTAwM2VsYXN0X2Fkdl9hZGRyLCBMRV9MSU5LLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjM1NC1cXHRcXHRcXHRcXHRcXHQgIGQtXFx1MDAzZWxhc3RfYWR2X2FkZHJfdHlwZSwgTlVMTCxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjM3Mi1cXHRcXHRjbGVhcl9wZW5kaW5nX2Fkdl9yZXBvcnQoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo2MzczOlxcdFxcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIGJkYWRkciwgTEVfTElOSywgYmRhZGRyX3R5cGUsIE5VTEwsXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy02Mzc0LVxcdFxcdFxcdFxcdCAgcnNzaSwgZmxhZ3MsIGRhdGEsIGxlbiwgTlVMTCwgMCwgMCk7XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTYzODEtXFx0ICovXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo2MzgyOlxcdG1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYsIFxcdTAwMjZkLVxcdTAwM2VsYXN0X2Fkdl9hZGRyLCBMRV9MSU5LLFxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNjM4My1cXHRcXHRcXHQgIGQtXFx1MDAzZWxhc3RfYWR2X2FkZHJfdHlwZSwgTlVMTCwgcnNzaSwgZC1cXHUwMDNlbGFzdF9hZHZfZmxhZ3MsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDUxMT1zdGF0aWMgdm9pZCBtZXNoX2RldmljZV9mb3VuZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkcixcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwNTc2LVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjEwNTc3OnZvaWQgbWdtdF9kZXZpY2VfZm91bmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsIHU4IGxpbmtfdHlwZSxcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDU3OC1cXHRcXHQgICAgICAgdTggYWRkcl90eXBlLCB1OCAqZGV2X2NsYXNzLCBzOCByc3NpLCB1MzIgZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA1OjU3LjY2Mjc2Mzg1N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTAxMzI0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKkRlY29kaW5nIFRoaXMgU2VydmljZSBEaXNjb3ZlcnkgRmxvdyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhpcyBzeXN0ZW0gc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYSBzZXJ2aWNlIGRpc2NvdmVyeSBwcm9jZXNzLCB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudDogYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQgZ2V0cyBvdXIgYXR0ZW50aW9uLlxuXG5UaGUgbmV4dCBjcml0aWNhbCBwaWVjZSBpcyB0aGUgYG1nbXRfZGV2aWNlX2ZvdW5kYCBldmVudC4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBBIG1hbmFnZW1lbnQgZGV2aWNlIGhhcyBiZWVuIGlkZW50aWZpZWQuIFRoaXMgZXZlbnQgKmltbWVkaWF0ZWx5KiBjYWxscyBgaXNfZmlsdGVyX21hdGNoYC4gU28sIHdlJ3JlIGV2YWx1YXRpbmcgc29tZSBzb3J0IG9mIGZpbHRlciBjcml0ZXJpYSAqZXZlcnkgdGltZSogYSBwb3RlbnRpYWwgbWFuYWdlbWVudCBkZXZpY2UgaXMgZm91bmQuIFRoaXMgaXMgbGlrZWx5IGEga2V5IG9wdGltaXphdGlvbiBwb2ludCwgb3IgbWF5YmUgaXTigJlzIGEgZmlsdGVyaW5nIG1lY2hhbmlzbSB0aGF04oCZcyB1c2VkIHRvIGRlY2lkZSBpZiB0aGUgZGV2aWNlIGlzIHNvbWV0aGluZyB3ZSB3YW50IHRvIG1hbmFnZS5cblxuTm93LCB0aGF0IGBpc19maWx0ZXJfbWF0Y2hgIGNhbGwgaXMgY3J1Y2lhbC4gV2hhdCBhcmUgdGhlIGZpbHRlciBwYXJhbWV0ZXJzPyBJcyB0aGUgZnVuY3Rpb24gY29tcGxleD8gQXJlIHdlIGNvbXBhcmluZyBhZ2FpbnN0IG11bHRpcGxlIGZpbHRlciBwcm9maWxlcz8gU3BlZWQgaXMgcGFyYW1vdW50LCB3ZSBuZWVkIHRvIGtub3cgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLiBBbnkgYm90dGxlbmVja3MgdGhlcmUgYXJlIGNyaXRpY2FsIHRvIGFkZHJlc3MuXG5cbkZpbmFsbHksIHdlJ3ZlIGdvdCBgaGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXJgLiBUaGlzIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQncyBwcm9iYWJseSBzaG9ydCBhbmQgc3dlZXQuIFRoZSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBnZXR0aW5nICpjYWxsZWQqPyBUaGlzIGNsZWFyaW5nIHN0ZXAgbGlrZWx5IGhhcyBhIGNvcnJlc3BvbmRpbmcgc2V0dXAgc3RlcC4gVGhlIGBjbGVhcmAgaW5kaWNhdGVzIHdlJ3JlIHNldHRpbmcgdXAgYSBuZXcgZmlsdGVyLCBvciBjbGVhcmluZyBhbiBvbGQgb25lLiBGaW5kaW5nIHdoZXJlIHRoZSBmaWx0ZXIgaXMgKnNldCogYW5kIGhvdyBpdOKAmXMgKnBvcHVsYXRlZCogd2lsbCBnaXZlIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgZGlzY292ZXJ5IGZpbHRlcmluZyBzdHJhdGVneS4gVGhpcyBjbGVhbnVwIGluZGljYXRlcyBhIG5ldyBkaXNjb3ZlcnkgcHJvY2VzcyBpcyBiZWluZyBraWNrZWQgb2ZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDk0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDY6MDEuNjUyODk5MjE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYxNDQ5OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JsdWV0b290aC9oY2lfY29yZS5jPTI3MDY9dm9pZCBoY2lfcmVsZWFzZV9kZXYoc3RydWN0IGhjaV9kZXYgKmhkZXYpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtMjcyNy1cXHRoY2lfY29ubl9wYXJhbXNfY2xlYXJfYWxsKGhkZXYpO1xcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYzoyNzI4OlxcdGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKGhkZXYpO1xcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0yNzI5LVxcdGhjaV9ibG9ja2VkX2tleXNfY2xlYXIoaGRldik7XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9MzI4MT1pbnQgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMzA3LVxcdCAqL1xcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzozMzA4OlxcdGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKGhkZXYpO1xcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMzA5LVxcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmM9NjA1Nz1zdGF0aWMgaW50IHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmMtNjA5OC1cXHQgKi9cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MDk5OlxcdGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKGhkZXYpO1xcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxMDAtXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz02MTQzPXN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYyMjAtXFx0ICovXFxubmV0L2JsdWV0b290aC9tZ210LmM6NjIyMTpcXHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MjIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMTowNjowMS43NjkwNjk2NjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0NTg2MDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRnVuY3Rpb24gQ2FsbHMgYW5kIFByaW9yaXRpemluZyBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBmdW5jdGlvbiBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUuIEkgc2VlIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgZ2V0cyBjYWxsZWQgZnJvbSBxdWl0ZSBhIGZldyBwbGFjZXM6IGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWxgLCBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2AsIGFuZCBgaGNpX3JlbGVhc2VfZGV2YC4gSSB0aGluayB0aGUgbW9zdCByZWxldmFudCBvbmVzIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdyBhcmUgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbGAsIGFuZCBgbWdtdF9kZXZpY2VfZm91bmRgLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHNpZ25hdHVyZXMgb2YgYHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbGAgYW5kIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAgdG8gc2VlIGlmIHRoZXkncmUgc3RhdGljLiBBaCwgeWVzLCB0aGV5ICphcmUqIHN0YXRpYy4gV2hpbGUgSSAqY291bGQqIGxpc3QgdGhlbSBpbiBGb2N1c1N5bWJvbHMsIHRoZSBwcmVmZXJlbmNlIGlzIGFsd2F5cyBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgaWYgd2UgY2FuIGZpbmQgdGhlbS4gV2Ugd2FudCB0aGUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gQnV0IHdhaXQgYSBtb21lbnQuLi4gdGhhdCBwcm9tcHQgZG9lcyBzYXkgd2Ugc2hvdWxkIHByZWZlciBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMhXG5cblRoaW5raW5nIHRocm91Z2ggdGhpcy4uLiBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgIGlzIHN0YXRpYywgYnV0IGl0J3MgcGFydCBvZiBhbiBhcnJheSBvZiBoYW5kbGVycywgc28gaXQncyBwcm9iYWJseSAqbm90KiBpbmxpbmVkLiBPbiB0aGUgb3RoZXIgaGFuZCwgYHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbGA/IFRoYXQgb25lIG1pZ2h0IGFjdHVhbGx5IGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBHb29kIHRvIGtlZXAgaW4gbWluZC5cblxuRmluYWxseSwgYG1nbXRfZGV2aWNlX2ZvdW5kYCBpcyB0aGFua2Z1bGx5IGEgbm9uLXN0YXRpYyBmdW5jdGlvbi4gV2UgaGF2ZSBhIGNsZWFyIHdpbm5lciB0aGVyZSEgSSBzaG91bGQgY2hlY2sgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDY6MDYuNzE0OTMzNzMzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzgwNzQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL21nbXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL21nbXQuYz02MTM1PXN0YXRpYyBpbnQgc3RhcnRfbGltaXRlZF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNDItXFxubmV0L2JsdWV0b290aC9tZ210LmM6NjE0MzpzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxubmV0L2JsdWV0b290aC9tZ210LmMtNjE0NC1cXHRcXHRcXHRcXHQgICB2b2lkICpkYXRhLCB1MTYgbGVuKVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNDUte1xcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNDY6XFx0c3RydWN0IG1nbXRfY3Bfc3RhcnRfc2VydmljZV9kaXNjb3ZlcnkgKmNwID0gZGF0YTtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTQ3LVxcdHN0cnVjdCBtZ210X3BlbmRpbmdfY21kICpjbWQ7XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz05NDYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNpX21nbXRfaGFuZGxlciBtZ210X2hhbmRsZXJzW10gPSB7XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy05NTM4LVxcdFxcdFxcdFxcdFxcdFxcdEhDSV9NR01UX1VOQ09ORklHVVJFRCB9LFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjk1Mzk6XFx0eyBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeSwgTUdNVF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWV9TSVpFLFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTk1NDAtXFx0XFx0XFx0XFx0XFx0XFx0SENJX01HTVRfVkFSX0xFTiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMTowNjowNi43Nzg3NDUxMjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MjM0MDE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0LiBUaGUgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBoYW5kbGVyJ3MgYWRkcmVzcyBpcyBkZWZpbml0ZWx5IGJlaW5nIHRha2VuLCBzbyBpdCB3b24ndCBiZSBpbmxpbmVkLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiBUaGVuLCBgbWdtdF9kZXZpY2VfZm91bmRgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgdmlzaWJsZSBvdXRzaWRlIGl0cyBtb2R1bGUuIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHNvIGl0J3Mgbm90IGhpZGRlbiB3aXRoaW4gYSBzaW5nbGUgY29tcGlsYXRpb24gdW5pdCBlaXRoZXIuXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBjb25zaWRlciB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQmx1ZXRvb3RoIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuIE9idmlvdXNseSwgYENPTkZJR19CVGAgaXMgdGhlIGZ1bmRhbWVudGFsIG9uZSwgYnV0IEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBtb3JlIGdyYW51bGFyIHNldHRpbmdzIGZvciBCbHVldG9vdGggbWFuYWdlbWVudCBzcGVjaWZpY2FsbHkuIFRvIGJlIHRob3JvdWdoLCB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRob3NlIGlzIHByb2JhYmx5IGluIHRoZSBgbmV0L2JsdWV0b290aC9LY29uZmlnYCBmaWxlLiBJJ2xsIHRha2UgYSBsb29rIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA2OjEwLjY2MTA4NzUwNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmx1ZXRvb3RoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEJsdWV0b290aCBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIEJUXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQmx1ZXRvb3RoIHN1YnN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiAhUzM5MFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMTA6XFx0XFx0c2VsZWN0IENSQzE2XFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAxMjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNcXG4gIDEzOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IENSWVBUT19FQ0RIXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIEJsdWV0b290aCBpcyBsb3ctY29zdCwgbG93LXBvd2VyLCBzaG9ydC1yYW5nZSB3aXJlbGVzcyB0ZWNobm9sb2d5LlxcbiAgMTc6XFx0XFx0ICBJdCB3YXMgZGVzaWduZWQgYXMgYSByZXBsYWNlbWVudCBmb3IgY2FibGVzIGFuZCBvdGhlciBzaG9ydC1yYW5nZVxcbiAgMTg6XFx0XFx0ICB0ZWNobm9sb2dpZXMgbGlrZSBJckRBLiAgQmx1ZXRvb3RoIG9wZXJhdGVzIGluIHBlcnNvbmFsIGFyZWEgcmFuZ2VcXG4gIDE5OlxcdFxcdCAgdGhhdCB0eXBpY2FsbHkgZXh0ZW5kcyB1cCB0byAxMCBtZXRlcnMuICBNb3JlIGluZm9ybWF0aW9uIGFib3V0XFxuICAyMDpcXHRcXHQgIEJsdWV0b290aCBjYW4gYmUgZm91bmQgYXQgXFx1MDAzY2h0dHBzOi8vd3d3LmJsdWV0b290aC5jb20vXFx1MDAzZS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBMaW51eCBCbHVldG9vdGggc3Vic3lzdGVtIGNvbnNpc3Qgb2Ygc2V2ZXJhbCBsYXllcnM6XFxuICAyMzpcXHRcXHQgICAgIEJsdWV0b290aCBDb3JlXFxuICAyNDpcXHRcXHRcXHRIQ0kgZGV2aWNlIGFuZCBjb25uZWN0aW9uIG1hbmFnZXIsIHNjaGVkdWxlclxcbiAgMjU6XFx0XFx0XFx0U0NPIGF1ZGlvIGxpbmtzXFxuICAyNjpcXHRcXHRcXHRMMkNBUCAoTG9naWNhbCBMaW5rIENvbnRyb2wgYW5kIEFkYXB0YXRpb24gUHJvdG9jb2wpXFxuICAyNzpcXHRcXHRcXHRTTVAgKFNlY3VyaXR5IE1hbmFnZXIgUHJvdG9jb2wpIG9uIExFIChMb3cgRW5lcmd5KSBsaW5rc1xcbiAgMjg6XFx0XFx0XFx0SVNPIGlzb2Nocm9ub3VzIGxpbmtzXFxuICAyOTpcXHRcXHQgICAgIEhDSSBEZXZpY2UgZHJpdmVycyAoSW50ZXJmYWNlIHRvIHRoZSBoYXJkd2FyZSlcXG4gIDMwOlxcdFxcdCAgICAgUkZDT01NIE1vZHVsZSAoUkZDT01NIFByb3RvY29sKSAgXFxuICAzMTpcXHRcXHQgICAgIEJORVAgTW9kdWxlIChCbHVldG9vdGggTmV0d29yayBFbmNhcHN1bGF0aW9uIFByb3RvY29sKVxcbiAgMzI6XFx0XFx0ICAgICBISURQIE1vZHVsZSAoSHVtYW4gSW50ZXJmYWNlIERldmljZSBQcm90b2NvbClcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgQmx1ZXRvb3RoIHN1cHBvcnQgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvXFxuICAzNTpcXHRcXHQgIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChibHVldG9vdGgpLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIFRvIHVzZSBMaW51eCBCbHVldG9vdGggc3Vic3lzdGVtLCB5b3Ugd2lsbCBuZWVkIHNldmVyYWwgdXNlci1zcGFjZVxcbiAgMzg6XFx0XFx0ICB1dGlsaXRpZXMgbGlrZSBoY2ljb25maWcgYW5kIGJsdWV0b290aGQuICBUaGVzZSB1dGlsaXRpZXMgYW5kIHVwZGF0ZXNcXG4gIDM5OlxcdFxcdCAgdG8gQmx1ZXRvb3RoIGtlcm5lbCBtb2R1bGVzIGFyZSBwcm92aWRlZCBpbiB0aGUgQmx1ZVogcGFja2FnZXMuICBGb3JcXG4gIDQwOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFxcdTAwM2NodHRwOi8vd3d3LmJsdWV6Lm9yZy9cXHUwMDNlLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlRfQlJFRFJcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkJsdWV0b290aCBDbGFzc2ljIChCUi9FRFIpIGZlYXR1cmVzXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCVFxcbiAgNDU6XFx0XFx0ZGVmYXVsdCB5XFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIEJsdWV0b290aCBDbGFzc2ljIGluY2x1ZGVzIHN1cHBvcnQgZm9yIEJhc2ljIFJhdGUgKEJSKVxcbiAgNDg6XFx0XFx0ICBhdmFpbGFibGUgd2l0aCBCbHVldG9vdGggdmVyc2lvbiAxLjBiIG9yIGxhdGVyIGFuZCBzdXBwb3J0XFxuICA0OTpcXHRcXHQgIGZvciBFbmhhbmNlZCBEYXRhIFJhdGUgKEVEUikgYXZhaWxhYmxlIHdpdGggQmx1ZXRvb3RoXFxuICA1MDpcXHRcXHQgIHZlcnNpb24gMi4wIG9yIGxhdGVyLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRzb3VyY2UgXFxcIm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWdcXFwiXFxuICA1MzpcXHRcXG4gIDU0OlxcdHNvdXJjZSBcXFwibmV0L2JsdWV0b290aC9ibmVwL0tjb25maWdcXFwiXFxuICA1NTpcXHRcXG4gIDU2OlxcdHNvdXJjZSBcXFwibmV0L2JsdWV0b290aC9oaWRwL0tjb25maWdcXFwiXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCVF9MRVxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIExvdyBFbmVyZ3kgKExFKSBmZWF0dXJlc1xcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gQlRcXG4gIDYxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNjI6XFx0XFx0aGVscFxcbiAgNjM6XFx0XFx0ICBCbHVldG9vdGggTG93IEVuZXJneSBpbmNsdWRlcyBzdXBwb3J0IGxvdy1lbmVyZ3kgcGh5c2ljYWxcXG4gIDY0OlxcdFxcdCAgbGF5ZXIgYXZhaWxhYmxlIHdpdGggQmx1ZXRvb3RoIHZlcnNpb24gNC4wIG9yIGxhdGVyLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRjb25maWcgQlRfTEVfTDJDQVBfRUNSRURcXG4gIDY3OlxcdFxcdGJvb2wgXFxcIkJsdWV0b290aCBMMkNBUCBFbmhhbmNlZCBDcmVkaXQgRmxvdyBDb250cm9sXFxcIlxcbiAgNjg6XFx0XFx0ZGVwZW5kcyBvbiBCVF9MRVxcbiAgNjk6XFx0XFx0ZGVmYXVsdCB5XFxuICA3MDpcXHRcXHRoZWxwXFxuICA3MTpcXHRcXHQgIEJsdWV0b290aCBMb3cgRW5lcmd5IEwyQ0FQIEVuaGFuY2VkIENyZWRpdCBGbG93IENvbnRyb2wgYXZhaWxhYmxlIHdpdGhcXG4gIDcyOlxcdFxcdCAgQmx1ZXRvb3RoIHZlcnNpb24gNS4yIG9yIGxhdGVyLlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHQgIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBibHVldG9vdGguZW5hYmxlX2VjcmVkPVsxfDBdXFxuICA3NTpcXHRcXHQgIG9uIHRoZSBrZXJuZWwgY29tbWFuZGxpbmUuXFxuICA3NjpcXHRcXG4gIDc3OlxcdGNvbmZpZyBCVF82TE9XUEFOXFxuICA3ODpcXHRcXHR0cmlzdGF0ZSBcXFwiQmx1ZXRvb3RoIDZMb1dQQU4gc3VwcG9ydFxcXCJcXG4gIDc5OlxcdFxcdGRlcGVuZHMgb24gQlRfTEUgXFx1MDAyNlxcdTAwMjYgNkxPV1BBTlxcbiAgODA6XFx0XFx0aGVscFxcbiAgODE6XFx0XFx0ICBJUHY2IGNvbXByZXNzaW9uIG92ZXIgQmx1ZXRvb3RoIExvdyBFbmVyZ3kuXFxuICA4MjpcXHRcXG4gIDgzOlxcdGNvbmZpZyBCVF9MRURTXFxuICA4NDpcXHRcXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbiAgODU6XFx0XFx0ZGVwZW5kcyBvbiBCVFxcbiAgODY6XFx0XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTXFxuICA4NzpcXHRcXHRzZWxlY3QgTEVEU19UUklHR0VSU1xcbiAgODg6XFx0XFx0aGVscFxcbiAgODk6XFx0XFx0ICBUaGlzIG9wdGlvbiBzZWxlY3RzIGEgZmV3IExFRCB0cmlnZ2VycyBmb3IgZGlmZmVyZW50XFxuICA5MDpcXHRcXHQgIEJsdWV0b290aCBldmVudHMuXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBCVF9NU0ZURVhUXFxuICA5MzpcXHRcXHRib29sIFxcXCJFbmFibGUgTWljcm9zb2Z0IGV4dGVuc2lvbnNcXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIEJUXFxuICA5NTpcXHRcXHRoZWxwXFxuICA5NjpcXHRcXHQgIFRoaXMgb3B0aW9ucyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNaWNyb3NvZnQgZGVmaW5lZCBIQ0lcXG4gIDk3OlxcdFxcdCAgdmVuZG9yIGV4dGVuc2lvbnMuXFxuICA5ODpcXHRcXG4gIDk5OlxcdGNvbmZpZyBCVF9BT1NQRVhUXFxuIDEwMDpcXHRcXHRib29sIFxcXCJFbmFibGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IGV4dGVuc2lvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA2OjEwLjY2MTE2NTEzNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDE1ODUzNzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBCbHVldG9vdGggRnV6emluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBhc3Nlc3NlZCB0aGUgcGF0Y2guIEJhc2VkIG9uIHdoYXQgSSBzZWUsIGBDT05GSUdfQlRgIGFsb25lIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBmdXp6aW5nLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSByZWFzb25pbmc6IHRoZSBmaXggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHByb2JhYmx5IGEgVXNlLUFmdGVyLUZyZWUgb3IgZGF0YSByYWNlLCB3aXRoaW4gdGhlIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvZGUuIEl0IGludHJvZHVjZXMgc3BpbmxvY2tzIHRvIHByb3RlY3QgYWNjZXNzZXMgdG8gYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHNgLiBUaGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgdHJpZ2dlcmVkIGJ5IEJsdWV0b290aCBtYW5hZ2VtZW50IGNvbW1hbmRzLCBzcGVjaWZpY2FsbHkgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYW5kIGR1cmluZyBkZXZpY2Ugc2Nhbm5pbmcsIHRocm91Z2ggYG1nbXRfZGV2aWNlX2ZvdW5kYC5cblxuSW5pdGlhbGx5LCBJIGhhZCBhIGxpc3Qgb2YgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYG1nbXRfZGV2aWNlX2ZvdW5kYCwgYW5kIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYCBhcyBrZXkgc3ltYm9scyB0byB0YXJnZXQuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IHRoZXNlIHN5bWJvbCBzZWxlY3Rpb25zLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBmdXp6aW5nIHByb21wdCBndWlkZWxpbmVzLiBJdCBwb2ludGVkIG91dCB0aGF0IEkgc2hvdWxkIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuXG5cbkkgcGF1c2VkIHRvIGNoZWNrIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAuIFRob3VnaCBpdCdzICpkZWNsYXJlZCogYXMgc3RhdGljLCBpdOKAmXMgYWN0dWFsbHkgYSBoYW5kbGVyIHdpdGhpbiB0aGUgYG1nbXRfaGFuZGxlcnNgIGFycmF5LiBCZWNhdXNlIGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuLCBpdCBkb2Vzbid0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoaXMgbWFrZXMgaXQgYW4gQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb24gZm9yIHRoZSBtYW5hZ2VtZW50IEFQSSDigJMgc28gaXQgYWJzb2x1dGVseSBmaXRzIHRoZSBjcml0ZXJpYS4gSSBjYW4gaW5jbHVkZSBpdCBpbiB0aGUgbGlzdC5cblxuTm93LCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYCwgYnV0IEknbSBjb25maWRlbnQgaW4gdGhlIG92ZXJhbGwgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUxMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA2OjE2LjA3NzAyMTc2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUyODc5MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9MzE1MT1zdGF0aWMgaW50IGhjaV9wYXNzaXZlX3NjYW5fc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMjgwLSAqL1xcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzozMjgxOmludCBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMjgyLXtcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz0zMzY2PXN0YXRpYyBpbnQgdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICpkYXRhKVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMzY3LXtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM6MzM2ODpcXHRyZXR1cm4gaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtMzM2OS19XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9NjA4Nj1pbnQgaGNpX3VwZGF0ZV9jb25uZWN0YWJsZV9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTYxMTMtXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjYxMTQ6XFx0cmV0dXJuIGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTYxMTUtfVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jPTYxNDY9c3RhdGljIGludCBoY2lfYWN0aXZlX3NjYW5fc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdWludDE2X3QgaW50ZXJ2YWwpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNjIxMi1cXHQvKiBSZXN1bWUgcGFzc2l2ZSBzY2FubmluZyAqL1xcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzo2MjEzOlxcdGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTYyMTQtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz02Mzg3PWludCBoY2lfc3VzcGVuZF9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTY0NDAtXFx0LyogVXBkYXRlIExFIHBhc3NpdmUgc2NhbiBpZiBlbmFibGVkICovXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjY0NDE6XFx0aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNjQ0Mi1cXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz02NDg0PXN0YXRpYyBpbnQgaGNpX3Jlc3VtZV9zY2FuX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNjQ5My1cXHQvKiBSZXNldCBwYXNzaXZlIHNjYW5uaW5nIHRvIG5vcm1hbCAqL1xcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzo2NDk0OlxcdGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTY0OTUtXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9NzM4Nz1zdGF0aWMgaW50IGhjaV9sZV9wYV9jcmVhdGVfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy03NDEzLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYzo3NDE0OlxcdC8qIE1hcmsgSENJX0NPTk5fQ1JFQVRFX1BBX1NZTkMgc28gaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyBjYW5cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNzQxNS1cXHQgKiBwcm9ncmFtIHRoZSBhZGRyZXNzIGluIHRoZSBhbGxvdyBsaXN0IHNvIFBBIGFkdmVydGlzZW1lbnRzIGNhbiBiZVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTc0MTktXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjc0MjA6XFx0aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNzQyMS1cXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy03NDk0LVxcdC8qIFVwZGF0ZSBwYXNzaXZlIHNjYW4gc2luY2UgSENJX1BBX1NZTkMgZmxhZyBoYXMgYmVlbiBjbGVhcmVkICovXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjc0OTU6XFx0aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtNzQ5Ni1cXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jPTIyMDU9c3RhdGljIGludCBzZXRfbWVzaF9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmMtMjIzOS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzoyMjQwOlxcdGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmMoaGRldik7XFxubmV0L2JsdWV0b290aC9tZ210LmMtMjI0MS1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jPTc3NjQ9c3RhdGljIGludCBhZGRfZGV2aWNlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXFxubmV0L2JsdWV0b290aC9tZ210LmMtNzc2NS17XFxubmV0L2JsdWV0b290aC9tZ210LmM6Nzc2NjpcXHRyZXR1cm4gaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy03NzY3LX1cXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jPTc4OTI9c3RhdGljIGludCByZW1vdmVfZGV2aWNlX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXFxubmV0L2JsdWV0b290aC9tZ210LmMtNzg5My17XFxubmV0L2JsdWV0b290aC9tZ210LmM6Nzg5NDpcXHRyZXR1cm4gaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhoZGV2KTtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy03ODk1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDY6MTYuMTcyMzE5NDA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzU1NzMzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY2FuIFN5bmNocm9uaXphdGlvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2AgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBoZXJlLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQncyBnb2luZyB0byBkcml2ZSB0aGUgbG9naWMgd2UncmUgaW50ZXJlc3RlZCBpbi5cblxuTm93LCBsZXQncyBzZWUsIHdlJ3ZlIGdvdCBhIHNldCBvZiBmb2N1cyBzeW1ib2xzIHRoYXQgcmVsYXRlIHRvIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSBhbmQgZGV2aWNlIG1hbmFnZW1lbnQgd2hpY2ggaW5jbHVkZXMgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYG1nbXRfZGV2aWNlX2ZvdW5kYCwgYW5kIG91ciBtYWluIGZ1bmN0aW9uIG9mIGNvbmNlcm4sIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYC4gU2VlbXMgcmVhc29uYWJsZS4gQW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCBhcmUgYWxsIHVuZGVyIGBCVGAuXG5cbk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IHJlc3VsdHMgYXJlIGJlaW5nIGNvbmZpZ3VyZWQgd2l0aCBhIGNhbGwgdG8gc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzgxLCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA2OjIwLjIwNzg5NTUxNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDMyNDA0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeVwiLFxuICAgIFwibWdtdF9kZXZpY2VfZm91bmRcIixcbiAgICBcImhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIChsaWtlbHkgVUFGIG9yIGRhdGEgcmFjZSkgaW4gQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29kZSBieSBhZGRpbmcgc3BpbmxvY2tzIGFyb3VuZCBgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzYCBhY2Nlc3Nlcy4gVGhlIGFmZmVjdGVkIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggQmx1ZXRvb3RoIG1hbmFnZW1lbnQgY29tbWFuZHMgKGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWApIGFuZCBkZXZpY2Ugc2Nhbm5pbmcgKGBtZ210X2RldmljZV9mb3VuZGApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfc2VydmljZV9kaXNjb3ZlcnlcIixcbiAgICBcIm1nbXRfZGV2aWNlX2ZvdW5kXCIsXG4gICAgXCJoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiAobGlrZWx5IFVBRiBvciBkYXRhIHJhY2UpIGluIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvZGUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkc2AgYWNjZXNzZXMuIFRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIEJsdWV0b290aCBtYW5hZ2VtZW50IGNvbW1hbmRzIChgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgKSBhbmQgZGV2aWNlIHNjYW5uaW5nIChgbWdtdF9kZXZpY2VfZm91bmRgKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDY6MjAuMzYyMjI3N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxMDQ5OTk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIxOjA2OjIwLjM2Mjc4MTY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkzMDk5NDE2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3BpbmxvY2sgcHJvdGVjdGlvbiBhcm91bmQgdGhlIGFjY2Vzc2VzIHRvIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHNgIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgaXNzdWVzIChzdWNoIGFzIGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0NTQU4gb3IgS0FTQU4uIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjgxNGZjNTA4ZWRkNzQxNmNhMThiMzMxNmM5MTc4NGY0NjNlYTYwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMjE6MDU6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXG5pbmRleCAzZGY1OTg0OWRjYmVhLi44MTE1NDM1YjVkMmFmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXG5AQCAtOTE5LDkgKzkxOSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSBmYWxzZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlcG9ydF9pbnZhbGlkX3Jzc2kgPSB0cnVlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xuIFx0a2ZyZWUoaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBOVUxMO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuaW5kZXggMTY3ZDc1ZTM0NTI2Ni4uMDkwZDBmMDA4NzRhMSAxMDA2NDRcbi0tLSBhL25ldC9ibHVldG9vdGgvbWdtdC5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuQEAgLTYyMjMsMTIgKzYyMjMsMTQgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IHRydWU7XG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS50eXBlID0gY3AtXHUwMDNldHlwZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJzc2kgPSBjcC1cdTAwM2Vyc3NpO1xuLVx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXG4gXHRpZiAodXVpZF9jb3VudCBcdTAwM2UgMCkge1xuIFx0XHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcyA9IGttZW1kdXAoY3AtXHUwMDNldXVpZHMsIHV1aWRfY291bnQgKiAxNixcbiBcdFx0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykge1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0XHRcdGVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LVx1MDAzZWlkLFxuIFx0XHRcdFx0XHRcdE1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUlksXG4gXHRcdFx0XHRcdFx0TUdNVF9TVEFUVVNfRkFJTEVELFxuQEAgLTYyMzgsNiArNjI0MCw5IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4rXHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcbiBcdGVyciA9IGhjaV9jbWRfc3luY19xdWV1ZShoZGV2LCBzdGFydF9kaXNjb3Zlcnlfc3luYywgY21kLFxuIFx0XHRcdFx0IHN0YXJ0X2Rpc2NvdmVyeV9jb21wbGV0ZSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG5AQCAtMTAzNjcsNiArMTAzNzIsNyBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsXG4gXHQgICAgICFoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU1RSSUNUX0RVUExJQ0FURV9GSUxURVIpKSkpXG4gXHRcdHJldHVybiAgZmFsc2U7XG4gXG4rXHRzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXHRpZiAoaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCAhPSAwKSB7XG4gXHRcdC8qIElmIGEgbGlzdCBvZiBVVUlEcyBpcyBwcm92aWRlZCBpbiBmaWx0ZXIsIHJlc3VsdHMgd2l0aCBub1xuIFx0XHQgKiBtYXRjaGluZyBVVUlEIHNob3VsZCBiZSBkcm9wcGVkLlxuQEAgLTEwMzc1LDkgKzEwMzgxLDEyIEBAIHN0YXRpYyBib29sIGlzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgczggcnNzaSwgdTggKmVpcixcbiBcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFlaXJfaGFzX3V1aWRzKHNjYW5fcnNwLCBzY2FuX3JzcF9sZW4sXG4gXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50LFxuLVx0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpKVxuK1x0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4gXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcbiBcdC8qIElmIGR1cGxpY2F0ZSBmaWx0ZXJpbmcgZG9lcyBub3QgcmVwb3J0IFJTU0kgY2hhbmdlcywgdGhlbiByZXN0YXJ0XG4gXHQgKiBzY2FubmluZyB0byBlbnN1cmUgdXBkYXRlZCByZXN1bHQgd2l0aCB1cGRhdGVkIFJTU0kgdmFsdWVzLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjE6MDY6MjAuMzYyNzgyNTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMwOTkxOTAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJsdWV0b290aCBEaXNjb3ZlcnkgRmlsdGVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIHRvdWNoaW5nIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAsIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGFuZCBgaXNfZmlsdGVyX21hdGNoYCBpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgIGFuZCBhbHNvIHRoZSByZWxldmFudCBoZWFkZXIsIGBoY2lfY29yZS5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgYWRkaW5nIGBzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jaylgIGFyb3VuZCBhY2Nlc3NlcyB0byBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkc2AuXG5cbkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIGlzIGEgY2xhc3NpY2FsIHJhY2UgY29uZGl0aW9uIGZpeC4gSXQncyBndWFyZGluZyBhZ2FpbnN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyB0byBgdXVpZF9jb3VudGAgYW5kIGB1dWlkc2AuIFRoaXMgY291bGQgbWFuaWZlc3QgYXMgYSBkYXRhIHJhY2UsIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIG9yIGV2ZW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgdGhpbmdzIGdldCB0cnVseSBvdXQgb2Ygc3luYy4gR29vZCBjYXRjaC5cblxuSSd2ZSB0YWtlbiBhIHF1aWNrIGxvb2sgYXQgdGhlIGNvZGUgc25pcHBldHMuIFRoZSBwYXRjaCBpcyB3cmFwcGluZyB0aGUgYWNjZXNzZXMgdG8gdGhlIHNoYXJlZCB2YXJpYWJsZXMgd2l0aCBhIGxvY2suIFRoZSBmaXJzdCBjb2RlIGJsb2NrIGxvb2tzIGNsZWFuLiBUaGUgc2Vjb25kIGxvb2tzIGxpa2UgaXQgaXMgZml4aW5nIGEgZG91YmxlIGZyZWUgYnkgcHJvdGVjdGluZyB0aGUgbWVtb3J5IGNvcHkgYW5kIHRoZSB0aGlyZCBsb29rcyBsaWtlIGl0J3MgcHJvdGVjdGluZyBhY2Nlc3MgdG8gYHV1aWRfY291bnRgIHdoZW4gZGV0ZXJtaW5pbmcgaWYgYSBVVUlEIG1hdGNoZXMuIEl0IGNvbmZpcm1zIG15IGFzc3VtcHRpb24uXG5cbmBgYGNcbiBcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xuIFx0a2ZyZWUoaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBOVUxMO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG5gYGBcblxuYGBgY1xuLVx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXG4gXHRpZiAodXVpZF9jb3VudCBcdTAwM2UgMCkge1xuIFx0XHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcyA9IGttZW1kdXAoY3AtXHUwMDNldXVpZHMsIHV1aWRfY291bnQgKiAxNixcbiBcdFx0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykge1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuLi4uXG4gXHRcdH1cbiBcdH1cbiBcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50O1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG5gYGBcblxuYGBgY1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0aWYgKGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgIT0gMCkge1xuLi4uXG4tXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykpXG4rXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykpIHtcbitcdFx0XHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbiBcdH1cbitcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuYGBgXG5cblRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQncyBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIHdvdWxkbid0IGJlIHJlbGV2YW50LiBUaGUgYnVnIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIHdvdWxkIHByb2JhYmx5IGJlIGZsYWdnZWQgYnkgS0NTQU4gb3IgS0FTQU4sIGFzc3VtaW5nIHRoZSByYWNlIHJlc3VsdHMgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBhIGNvbmN1cnJlbmN5IGZpeCwgcGxhaW4gYW5kIHNpbXBsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNywiT3V0cHV0VG9rZW5zIjoxMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMTowNjoyOS42NzI3MDQ0NDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3BpbmxvY2sgcHJvdGVjdGlvbiBhcm91bmQgdGhlIGFjY2Vzc2VzIHRvIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHNgIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgaXNzdWVzIChzdWNoIGFzIGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0NTQU4gb3IgS0FTQU4uIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzcGlubG9jayBwcm90ZWN0aW9uIGFyb3VuZCB0aGUgYWNjZXNzZXMgdG8gYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkc2AgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMgKHN1Y2ggYXMgZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBvciBLQVNBTi4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjc5j[1] Phase: Succeeded StartedAt: 2026-08-07 21:06:41 +0000 UTC FinishedAt: 2026-08-07 21:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 21:06:41 +0000 UTC FinishedAt: 2026-08-07 21:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2] Phase: Succeeded StartedAt: 2026-08-07 21:06:41 +0000 UTC FinishedAt: 2026-08-08 00:50:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 21:06:41 +0000 UTC FinishedAt: 2026-08-08 00:50:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 21:06:41 +0000 UTC FinishedAt: 2026-08-07 21:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 21:06:41 +0000 UTC FinishedAt: 2026-08-07 21:06:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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-workflowcjc5j/series-workflowcjc5j-convert-artifact-4219456044/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 21:06:51 +0000 UTC FinishedAt: 2026-08-07 21:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 21:06:51 +0000 UTC FinishedAt: 2026-08-07 21:24:20 +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:*9cf4b7a6-83db-4be4-b0f2-885a01397f82,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-workflowcjc5j/series-workflowcjc5j-convert-artifact-4219456044/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": "d5945383-d304-4d75-9061-64b03ba660ba", "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-workflowcjc5j/series-workflowcjc5j-build-action-3309490266/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 21:06:51 +0000 UTC FinishedAt: 2026-08-07 21:24:10 +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:*9cf4b7a6-83db-4be4-b0f2-885a01397f82,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-workflowcjc5j/series-workflowcjc5j-convert-artifact-4219456044/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": "d5945383-d304-4d75-9061-64b03ba660ba", "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-workflowcjc5j/series-workflowcjc5j-build-action-3309490266/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 21:24:20 +0000 UTC FinishedAt: 2026-08-07 21:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 21:24:20 +0000 UTC FinishedAt: 2026-08-07 21:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 21:24:20 +0000 UTC FinishedAt: 2026-08-07 21:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 21:24:20 +0000 UTC FinishedAt: 2026-08-07 21:24:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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-workflowcjc5j/series-workflowcjc5j-convert-artifact-1935887083/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 21:24:30 +0000 UTC FinishedAt: 2026-08-07 21:26:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 21:24:30 +0000 UTC FinishedAt: 2026-08-07 21:26:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d5945383-d304-4d75-9061-64b03ba660ba,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-workflowcjc5j/series-workflowcjc5j-build-action-3309490266/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-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 21:26:24 +0000 UTC FinishedAt: 2026-08-07 21:26:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 21:26:24 +0000 UTC FinishedAt: 2026-08-07 21:26:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 21:26:24 +0000 UTC FinishedAt: 2026-08-07 21:45:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 21:26:24 +0000 UTC FinishedAt: 2026-08-07 21:45:42 +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:*9cf4b7a6-83db-4be4-b0f2-885a01397f82,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-workflowcjc5j/series-workflowcjc5j-convert-artifact-1935887083/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": "89182f67-1a52-4461-a67e-4452b523729c", "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-workflowcjc5j/series-workflowcjc5j-build-action-3516434447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 21:26:24 +0000 UTC FinishedAt: 2026-08-07 21:45:32 +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:*9cf4b7a6-83db-4be4-b0f2-885a01397f82,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-workflowcjc5j/series-workflowcjc5j-convert-artifact-1935887083/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": "89182f67-1a52-4461-a67e-4452b523729c", "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-workflowcjc5j/series-workflowcjc5j-build-action-3516434447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 21:45:42 +0000 UTC FinishedAt: 2026-08-07 21:45:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 21:45:42 +0000 UTC FinishedAt: 2026-08-07 21:45:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 21:45:42 +0000 UTC FinishedAt: 2026-08-07 21:47:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 21:45:42 +0000 UTC FinishedAt: 2026-08-07 21:47:32 +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:*89182f67-1a52-4461-a67e-4452b523729c,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-workflowcjc5j/series-workflowcjc5j-build-action-3516434447/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-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 21:47:42 +0000 UTC FinishedAt: 2026-08-08 00:50:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 21:47:42 +0000 UTC FinishedAt: 2026-08-08 00:50:16 +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":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"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:*d5945383-d304-4d75-9061-64b03ba660ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*89182f67-1a52-4461-a67e-4452b523729c,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-workflowcjc5j/series-workflowcjc5j-build-action-3309490266/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-workflowcjc5j/series-workflowcjc5j-build-action-3516434447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 21:47:42 +0000 UTC FinishedAt: 2026-08-07 21:47:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 21:47:42 +0000 UTC FinishedAt: 2026-08-07 21:47:47 +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":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"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-workflowcjc5j/series-workflowcjc5j-convert-artifact-1821044996/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 21:47:42 +0000 UTC FinishedAt: 2026-08-07 21:47:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 21:47:42 +0000 UTC FinishedAt: 2026-08-07 21:47:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 21:47:42 +0000 UTC FinishedAt: 2026-08-07 21:47:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 21:47:52 +0000 UTC FinishedAt: 2026-08-08 00:50:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjc5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"116fdfa1-804e-4867-8e32-00053ff6dd26","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 21:47:52 +0000 UTC FinishedAt: 2026-08-08 00:50:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d5945383-d304-4d75-9061-64b03ba660ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*89182f67-1a52-4461-a67e-4452b523729c,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-workflowcjc5j/series-workflowcjc5j-build-action-3309490266/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-workflowcjc5j/series-workflowcjc5j-build-action-3516434447/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-workflowcjc5j/series-workflowcjc5j-convert-artifact-1821044996/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,}