Name: series-workflowqdc54 Phase: Succeeded StartedAt: 2026-08-11 04:56:13 +0000 UTC FinishedAt: 2026-08-11 08:57:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[0] Phase: Succeeded StartedAt: 2026-08-11 04:56:13 +0000 UTC FinishedAt: 2026-08-11 05:15:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 04:56:13 +0000 UTC FinishedAt: 2026-08-11 05:15:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LWTUNNEL_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LWTUNNEL_BPF" ], "series_id": "7f0ed3b7-2701-448a-b26d-e7611e2c40bc" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "lwtunnel_xmit", "lwtunnel_build_state" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xXVFVOTkVMX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2x3dHVubmVsX3htaXQmIzM0OywKICAgICYjMzQ7bHd0dW5uZWxfYnVpbGRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gY2hlY2sgaW4gYGJwZl94bWl0YCBmb3IgTFdUIEJQRiBwcm9ncmFtcy4gSXQgcmVwbGFjZXMgYHhtaXRfY2hlY2tfaGhsZW5gIHdpdGggYHhtaXRfY2hlY2tfaGVhZHJvb21gLCBlbnN1cmluZyB0aGF0IHRoZSByZXNlcnZlZCBoZWFkcm9vbSBtYXRjaGVzIGBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXHUwMDNlZGV2KWAgcmF0aGVyIHRoYW4ganVzdCB0aGUgZXhhY3QgaGFyZHdhcmUgaGVhZGVyIGxlbmd0aCAoYGhoX2xlbmApLiBUaGlzIHByZXZlbnRzIGEgc2l0dWF0aW9uIHdoZXJlIGBuZWlnaF9oaF9vdXRwdXQoKWAgbWlnaHQgZHJvcCB0aGUgcGFja2V0IGFuZCB0cmlnZ2VyIGEgYFdBUk5fT05fT05DRWAgYmVjYXVzZSBpdCBjb3BpZXMgdGhlIGNhY2hlZCBoYXJkd2FyZSBoZWFkZXIgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcywgd2hpY2ggcmVxdWlyZXMgbW9yZSBoZWFkcm9vbSB0aGFuIGp1c3QgYGhoX2xlbmAuXG5cblRoaXMgaXMgYSBmaXggZm9yIGEgcGFja2V0IGRyb3AgLyB3YXJuaW5nIGlzc3VlIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tIHNpemluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGhhcmR3YXJlLiBUaGUgaGVhZHJvb20gZXhwYW5kZWQgYnkgYHBza2JfZXhwYW5kX2hlYWRgIGlzIHN1YnNlcXVlbnRseSB3cml0dGVuIHRvIGJ5IGBuZWlnaF9oaF9vdXRwdXQoKWAgYmVmb3JlIGBfX3NrYl9wdXNoKClgIGluY2x1ZGVzIHRoZSBleGFjdCBoZWFkZXIgbGVuZ3RoIGluIHRoZSBwYWNrZXQgZGF0YS4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlbGF0ZWQgdG8gaGVhZHJvb20gd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoZWFkcm9vbSBleHBhbnNpb24gbG9naWMgaW4gdGhlIEJQRiBsaWdodHdlaWdodCB0dW5uZWwgKExXVCkgdHJhbnNtaXQgcGF0aCAoYGJwZl94bWl0YCkuIEl0IGNoYW5nZXMgdGhlIHJlcXVpcmVkIGhlYWRyb29tIGNhbGN1bGF0aW9uIHRvIHVzZSBgTExfUkVTRVJWRURfU1BBQ0VgIGluc3RlYWQgb2YgYGhhcmRfaGVhZGVyX2xlbmAgYW5kIHJlbW92ZXMgYEhIX0RBVEFfQUxJR05gIHJvdW5kaW5nIHRvIGNvcnJlY3RseSBtYXRjaCB0aGUgcmVzZXJ2YXRpb24gbWFkZSBiZWZvcmUgTFdUIHhtaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb24gdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGI1M2ZiNGEyY2IwMmQxNTYyZjRkOTY5N2MzMTY3MGY0ZjJhNDYwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA1OjEzOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2x3dF9icGYuYyBiL25ldC9jb3JlL2x3dF9icGYuY1xuaW5kZXggNjUyOTUyZDQxNmYyMy4uZGE0OTM2NGVjNjNkZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2x3dF9icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbHd0X2JwZi5jXG5AQCAtMTY3LDEwICYjNDM7MTY3LDEwIEBAIHN0YXRpYyBpbnQgYnBmX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBkc3QtXHUwMDNlbHd0c3RhdGUtXHUwMDNlb3JpZ19vdXRwdXQobmV0LCBzaywgc2tiKTtcbiB9XG4gXG4tc3RhdGljIGludCB4bWl0X2NoZWNrX2hobGVuKHN0cnVjdCBza19idWZmICpza2IsIGludCBoaF9sZW4pXG4mIzQzO3N0YXRpYyBpbnQgeG1pdF9jaGVja19oZWFkcm9vbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaHJvb20pXG4ge1xuLVx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBoaF9sZW4pIHtcbi1cdFx0aW50IG5oZWFkID0gSEhfREFUQV9BTElHTihoaF9sZW4gLSBza2JfaGVhZHJvb20oc2tiKSk7XG4mIzQzO1x0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBocm9vbSkge1xuJiM0MztcdFx0aW50IG5oZWFkID0gaHJvb20gLSBza2JfaGVhZHJvb20oc2tiKTtcbiBcbiBcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuaGVhZCwgMCwgR0ZQX0FUT01JQykpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjgyLDcgJiM0MzsyODIsNyBAQCBzdGF0aWMgaW50IGJwZl94bWl0KHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRicGYgPSBicGZfbHd0X2x3dHVubmVsKGRzdC1cdTAwM2Vsd3RzdGF0ZSk7XG4gXHRpZiAoYnBmLVx1MDAzZXhtaXQucHJvZykge1xuLVx0XHRpbnQgaGhfbGVuID0gZHN0LVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4mIzQzO1x0XHRpbnQgaHJvb20gPSBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXHUwMDNlZGV2KTtcbiBcdFx0X19iZTE2IHByb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIFx0XHRpbnQgcmV0O1xuIFxuQEAgLTI5OCw5ICYjNDM7Mjk4LDEyIEBAIHN0YXRpYyBpbnQgYnBmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbiBcdFx0XHQvKiBJZiB0aGUgaGVhZGVyIHdhcyBleHBhbmRlZCwgaGVhZHJvb20gbWlnaHQgYmUgdG9vXG4tXHRcdFx0ICogc21hbGwgZm9yIEwyIGhlYWRlciB0byBjb21lLCBleHBhbmQgYXMgbmVlZGVkLlxuJiM0MztcdFx0XHQgKiBzbWFsbCBmb3IgdGhlIEwyIGhlYWRlciB0byBjb21lLCBleHBhbmQgYXMgbmVlZGVkLlxuJiM0MztcdFx0XHQgKiBuZWlnaF9oaF9vdXRwdXQoKSBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgaW5cbiYjNDM7XHRcdFx0ICogSEhfREFUQV9NT0QgYWxpZ25lZCBjaHVua3MsIHNvIG1hdGNoIHRoZSByZXNlcnZhdGlvblxuJiM0MztcdFx0XHQgKiBtYWRlIGJlZm9yZSBMV1QgeG1pdC5cbiBcdFx0XHQgKi9cbi1cdFx0XHRyZXQgPSB4bWl0X2NoZWNrX2hobGVuKHNrYiwgaGhfbGVuKTtcbiYjNDM7XHRcdFx0cmV0ID0geG1pdF9jaGVja19oZWFkcm9vbShza2IsIGhyb29tKTtcbiBcdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xXVFVOTkVMX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2x3dHVubmVsX3htaXQmIzM0OywKICAgICYjMzQ7bHd0dW5uZWxfYnVpbGRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBsb2dpYyBpbiB0aGUgQlBGIGxpZ2h0d2VpZ2h0IHR1bm5lbCAoTFdUKSB0cmFuc21pdCBwYXRoIChgYnBmX3htaXRgKS4gSXQgY2hhbmdlcyB0aGUgcmVxdWlyZWQgaGVhZHJvb20gY2FsY3VsYXRpb24gdG8gdXNlIGBMTF9SRVNFUlZFRF9TUEFDRWAgaW5zdGVhZCBvZiBgaGFyZF9oZWFkZXJfbGVuYCBhbmQgcmVtb3ZlcyBgSEhfREFUQV9BTElHTmAgcm91bmRpbmcgdG8gY29ycmVjdGx5IG1hdGNoIHRoZSByZXNlcnZhdGlvbiBtYWRlIGJlZm9yZSBMV1QgeG1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbiB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YjUzZmI0YTJjYjAyZDE1NjJmNGQ5Njk3YzMxNjcwZjRmMmE0NjAxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDU6MTM6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9sd3RfYnBmLmMgYi9uZXQvY29yZS9sd3RfYnBmLmMKaW5kZXggNjUyOTUyZDQxNmYyMy4uZGE0OTM2NGVjNjNkZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbHd0X2JwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2x3dF9icGYuYwpAQCAtMTY3LDEwICYjNDM7MTY3LDEwIEBAIHN0YXRpYyBpbnQgYnBmX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gZHN0LSZndDtsd3RzdGF0ZS0mZ3Q7b3JpZ19vdXRwdXQobmV0LCBzaywgc2tiKTsKIH0KIAotc3RhdGljIGludCB4bWl0X2NoZWNrX2hobGVuKHN0cnVjdCBza19idWZmICpza2IsIGludCBoaF9sZW4pCiYjNDM7c3RhdGljIGludCB4bWl0X2NoZWNrX2hlYWRyb29tKHN0cnVjdCBza19idWZmICpza2IsIGludCBocm9vbSkKIHsKLQlpZiAoc2tiX2hlYWRyb29tKHNrYikgJmx0OyBoaF9sZW4pIHsKLQkJaW50IG5oZWFkID0gSEhfREFUQV9BTElHTihoaF9sZW4gLSBza2JfaGVhZHJvb20oc2tiKSk7CiYjNDM7CWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IGhyb29tKSB7CiYjNDM7CQlpbnQgbmhlYWQgPSBocm9vbSAtIHNrYl9oZWFkcm9vbShza2IpOwogCiAJCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgbmhlYWQsIDAsIEdGUF9BVE9NSUMpKQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0yODIsNyAmIzQzOzI4Miw3IEBAIHN0YXRpYyBpbnQgYnBmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCWJwZiA9IGJwZl9sd3RfbHd0dW5uZWwoZHN0LSZndDtsd3RzdGF0ZSk7CiAJaWYgKGJwZi0mZ3Q7eG1pdC5wcm9nKSB7Ci0JCWludCBoaF9sZW4gPSBkc3QtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwkJaW50IGhyb29tID0gTExfUkVTRVJWRURfU1BBQ0UoZHN0LSZndDtkZXYpOwogCQlfX2JlMTYgcHJvdG8gPSBza2ItJmd0O3Byb3RvY29sOwogCQlpbnQgcmV0OwogCkBAIC0yOTgsOSAmIzQzOzI5OCwxMiBAQCBzdGF0aWMgaW50IGJwZl94bWl0KHN0cnVjdCBza19idWZmICpza2IpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQkvKiBJZiB0aGUgaGVhZGVyIHdhcyBleHBhbmRlZCwgaGVhZHJvb20gbWlnaHQgYmUgdG9vCi0JCQkgKiBzbWFsbCBmb3IgTDIgaGVhZGVyIHRvIGNvbWUsIGV4cGFuZCBhcyBuZWVkZWQuCiYjNDM7CQkJICogc21hbGwgZm9yIHRoZSBMMiBoZWFkZXIgdG8gY29tZSwgZXhwYW5kIGFzIG5lZWRlZC4KJiM0MzsJCQkgKiBuZWlnaF9oaF9vdXRwdXQoKSBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgaW4KJiM0MzsJCQkgKiBISF9EQVRBX01PRCBhbGlnbmVkIGNodW5rcywgc28gbWF0Y2ggdGhlIHJlc2VydmF0aW9uCiYjNDM7CQkJICogbWFkZSBiZWZvcmUgTFdUIHhtaXQuCiAJCQkgKi8KLQkJCXJldCA9IHhtaXRfY2hlY2tfaGhsZW4oc2tiLCBoaF9sZW4pOwomIzQzOwkJCXJldCA9IHhtaXRfY2hlY2tfaGVhZHJvb20oc2tiLCBocm9vbSk7CiAJCQlpZiAodW5saWtlbHkocmV0KSkKIAkJCQlyZXR1cm4gcmV0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBQYWNrZXQgVHJhbnNtaXNzaW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvbHd0X2JwZi5jYCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHBhY2tldCB0cmFuc21pc3Npb24uIEl0IHNlZW1zIHRoZXkmIzM5O3JlIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IHRoZSBoZWFkcm9vbSBpcyBtYW5hZ2VkLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYHhtaXRfY2hlY2tfaGhsZW5gIHdpdGggYHhtaXRfY2hlY2tfaGVhZHJvb21gLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IHNoaWZ0IGluIHRoZSBsb2dpYy4KClRoZSBjYWxjdWxhdGlvbiBvZiBgbmhlYWRgIGlzIG5vdyB1c2luZyBgaHJvb21gIChsaWtlbHkgdGhlIGhlYWRyb29tIGF2YWlsYWJsZSkgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoLiBGdXJ0aGVybW9yZSwgaW4gYGJwZl94bWl0YCwgaW5zdGVhZCBvZiBmZXRjaGluZyBgaGhfbGVuYCBmcm9tIHRoZSBkZXZpY2UmIzM5O3MgaGFyZCBoZWFkZXIgbGVuZ3RoLCBpdCYjMzk7cyBub3cgcmV0cmlldmluZyBgaHJvb21gIHVzaW5nIGBMTF9SRVNFUlZFRF9TUEFDRWAuIFRoaXMgaXMgZGlyZWN0bHkgcGFzc2VkIGludG8gYHhtaXRfY2hlY2tfaGVhZHJvb21gIGZvciBhbmFseXNpcy4KCk15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZvY3VzZWQgb24gYWRkcmVzc2luZyBhbiBpc3N1ZSBpbiBoZWFkcm9vbSBleHBhbnNpb24gd2l0aGluIGBicGZfeG1pdGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyByZXNvbHZlcyBhIHN1YnRsZSBidWcgcmVsYXRlZCB0byBob3cgdGhlIEJQRiBMV1QgaW50ZXJhY3RzIHdpdGggZGV2aWNlcyBoYXZpbmcgdmFyeWluZyBoZWFkcm9vbSByZXF1aXJlbWVudHMgb3IgcGVyaGFwcyBkZWFsaW5nIHdpdGggYWxpZ25tZW50IGlzc3VlcyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbi4KCkJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciBgbmV0L2NvcmUvbHd0X2JwZi5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGVuYWJsZWQgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyB3aWxsIGdpdmUgbWUgZnVydGhlciBjb250ZXh0IGZvciBhbmFseXppbmcgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsd3RfYnBmXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0zOD1vYmotJChDT05GSUdfTFdUVU5ORUwpICYjNDM7PSBsd3R1bm5lbC5vXG5uZXQvY29yZS9NYWtlZmlsZTozOTpvYmotJChDT05GSUdfTFdUVU5ORUxfQlBGKSAmIzQzOz0gbHd0X2JwZi5vXG5uZXQvY29yZS9NYWtlZmlsZS00MC1vYmotJChDT05GSUdfRFNUX0NBQ0hFKSAmIzQzOz0gZHN0X2NhY2hlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDg5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGhlIHRhc2sgYXQgaGFuZCByZXZvbHZlcyBhcm91bmQgYENPTkZJR19MV1RVTk5FTF9CUEZgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBkaWcgZGVlcGVyIGludG8gaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIHNldHRpbmdzIGFyZSBpbnRlcnR3aW5lZCB3aXRoIHRoaXMgb25lLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbDsgaXQgaGVscHMgbWUgYW50aWNpcGF0ZSBwb3RlbnRpYWwgY29uZmxpY3RzLCB1bmRlcnN0YW5kIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSwgYW5kIHBpbnBvaW50IHRoZSBiZXN0IGFwcHJvYWNoIHRvIGVuc3VyZSBzZWFtbGVzcyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHN0YXJ0IG1hcHBpbmcgdGhlbSBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExXVFVOTkVMX0JQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDQ1PWNvbmZpZyBMV1RVTk5FTFxuLS1cbm5ldC9LY29uZmlnLTQ1Mi1cbm5ldC9LY29uZmlnOjQ1Mzpjb25maWcgTFdUVU5ORUxfQlBGXG5uZXQvS2NvbmZpZy00NTQtXHRib29sIFwmIzM0O0V4ZWN1dGUgQlBGIHByb2dyYW0gYXMgcm91dGUgbmV4dGhvcCBhY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzMzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgYExXVFVOTkVMX0JQRmAgRGV0YWlscyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IGRvd24gdG8gaXQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciwgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIGBMV1RVTk5FTF9CUEZgIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gbm90IGxvb2tpbmcgZm9yIGEgc3VyZmFjZS1sZXZlbCBleHBsYW5hdGlvbjsgSSB3YW50IHRoZSBuaXR0eS1ncml0dHksIHRoZSBmdWxsLWJsb3duIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0IHRoaXMgdGVybSBlbmNvbXBhc3Nlcy4gSSBhbHJlYWR5IGhhdmUgYSBkZWNlbnQgZ3Jhc3AsIGJ1dCBhIGNvbmNpc2UgZGVmaW5pdGlvbiB3aWxsIGhlbHAgbWUgY29uZmlybSBteSBtZW50YWwgbW9kZWwuIFdoYXQgYXJlIHRoZSBrZXkgZWxlbWVudHM/IFdoYXQgYXJlIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcz8gTGV0JiMzOTtzIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0NTpcdGNvbmZpZyBMV1RVTk5FTFxuIDQ0NjpcdFx0Ym9vbCBcJiMzNDtOZXR3b3JrIGxpZ2h0IHdlaWdodCB0dW5uZWxzXCYjMzQ7XG4gNDQ3Olx0XHRoZWxwXG4gNDQ4Olx0XHQgIFRoaXMgZmVhdHVyZSBwcm92aWRlcyBhbiBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IGxpZ2h0IHdlaWdodFxuIDQ0OTpcdFx0ICB0dW5uZWxzIGxpa2UgbXBscy4gVGhlcmUgaXMgbm8gbmV0ZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBhIGxpZ2h0XG4gNDUwOlx0XHQgIHdlaWdodCB0dW5uZWwgZW5kcG9pbnQuIFR1bm5lbCBlbmNhcHN1bGF0aW9uIHBhcmFtZXRlcnMgYXJlIHN0b3JlZFxuIDQ1MTpcdFx0ICB3aXRoIGxpZ2h0IHdlaWdodCB0dW5uZWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGZpYiByb3V0ZXMuXG4gNDUyOlx0XG4gNDUzOlx0Y29uZmlnIExXVFVOTkVMX0JQRlxuIDQ1NDpcdFx0Ym9vbCBcJiMzNDtFeGVjdXRlIEJQRiBwcm9ncmFtIGFzIHJvdXRlIG5leHRob3AgYWN0aW9uXCYjMzQ7XG4gNDU1Olx0XHRkZXBlbmRzIG9uIExXVFVOTkVMIFx1MDAyNlx1MDAyNiBJTkVUXG4gNDU2Olx0XHRkZWZhdWx0IHkgaWYgTFdUVU5ORUw9eVxuIDQ1NzpcdFx0aGVscFxuIDQ1ODpcdFx0ICBBbGxvd3MgdG8gcnVuIEJQRiBwcm9ncmFtcyBhcyBhIG5leHRob3AgYWN0aW9uIGZvbGxvd2luZyBhIHJvdXRlXG4gNDU5Olx0XHQgIGxvb2t1cCBmb3IgaW5jb21pbmcgYW5kIG91dGdvaW5nIHBhY2tldHMuXG4gNDYwOlx0XG4gNDYxOlx0Y29uZmlnIERTVF9DQUNIRVxuIDQ2MjpcdFx0Ym9vbFxuIDQ2MzpcdFx0ZGVmYXVsdCBuXG4gNDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkFuYWx5emluZyB0aGUgTFdUVU5ORUwgYW5kIEJQRiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYExXVFVOTkVMX0JQRmAgdGhpbmcgd29ya3MuIFJpZ2h0IG9mZiB0aGUgYmF0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBidWlsZHMgdXBvbiBib3RoIGBMV1RVTk5FTGAgYW5kIGBJTkVUYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgZXh0ZW5kaW5nIHRoZSBMV1RVTk5FTCBmdW5jdGlvbmFsaXR5IHdpdGggQlBGLCBhbmQgaXQgbmVlZHMgdGhlIHN0YW5kYXJkIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUsIHRvby4gVGhlIHJlYWwga2V5IGhlcmUgc2VlbXMgdG8gYmUgYGJwZl94bWl0YC4KCk5vdywgdGhlIGRvY3VtZW50YXRpb24gc2F5cyBgYnBmX3htaXRgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgQlBGIExXVCB4bWl0LiBUaGF0JiMzOTtzIGdvb2QsIHRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBzdXNwaWNpb25zLiBJdCYjMzk7cyB0aGUgaG9vayB0aGF0IGJyaWRnZXMgdGhlIExXVFVOTkVMIGluZnJhc3RydWN0dXJlIGFuZCB0aGUgQlBGIGxvZ2ljLiBCdXQuLi4gaXMgaXQgc3RhdGljPyBVbmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGF0IGZ1bmN0aW9uIGNhbGwgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIGhlcmUuIElmIGl0JiMzOTtzIHN0YXRpYywgdGhhdCBpbXBsaWVzIGEgdGlnaHRlciBlbmNhcHN1bGF0aW9uIGFuZCBwb3RlbnRpYWxseSBsZXNzIGltcGFjdCBvbiB0aGUgd2lkZXIga2VybmVsLiBJZiBub3QsIHdlIGhhdmUgYSBiaWdnZXIgcGljdHVyZSB0byBjb25zaWRlci4gU28sIGxldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX3htaXRgIHRvIGRldGVybWluZSBpdHMgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbHd0X2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dF9icGYuYz0xODI9c3RhdGljIGludCBicGZfbHd0X3htaXRfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2x3dF9icGYuYy0yNzctXG5uZXQvY29yZS9sd3RfYnBmLmM6Mjc4OnN0YXRpYyBpbnQgYnBmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL2x3dF9icGYuYy0yNzkte1xuLS1cbm5ldC9jb3JlL2x3dF9icGYuYz01MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgYnBmX2VuY2FwX29wcyA9IHtcbi0tXG5uZXQvY29yZS9sd3RfYnBmLmMtNTI5LVx0Lm91dHB1dFx0XHQ9IGJwZl9vdXRwdXQsXG5uZXQvY29yZS9sd3RfYnBmLmM6NTMwOlx0LnhtaXRcdFx0PSBicGZfeG1pdCxcbm5ldC9jb3JlL2x3dF9icGYuYy01MzEtXHQuZmlsbF9lbmNhcFx0PSBicGZfZmlsbF9lbmNhcF9pbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipEaWdnaW5nIGludG8gdGhlIGVCUEYgRW5jYXBzdWxhdGlvbiBUcmFuc21pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJwZl94bWl0YCwgd2hpY2ggaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsIGZvciBhIHRyYW5zbWlzc2lvbiBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgYmVpbmcgYXNzaWduZWQgdG8gYGJwZl9lbmNhcF9vcHMueG1pdGAuIFRoYXQmIzM5O3MgaG93IGl0JiMzOTtzIGdldHRpbmcgaG9va2VkIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gTm93IHRoZSBxdWVzdGlvbiBpcywgKndoZXJlKiBpcyBgYnBmX3htaXRgIGJlaW5nIHVzZWQ/IElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB3aGljaCBjYWxscyBpdD8gSSBuZWVkIHRvIHRyYWNrIHRoaXMgZG93bi4KClJpZ2h0LCBJIHJlbWVtYmVyIG5vdywgYGJwZl9lbmNhcF9vcHNgIGlzIHJlZ2lzdGVyZWQsIHRocm91Z2ggYGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoJmFtcDticGZfZW5jYXBfb3BzLCBMV1RVTk5FTF9FTkNBUF9CUEYpYCB3aXRoaW4gYGJwZl9sd3RfaW5pdGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGhvdyB0aGUgZUJQRiBlbmNhcHN1bGF0aW9uIG9wZXJhdGlvbnMgYXJlIGhvb2tlZCBpbnRvIHRoZSBMaW51eCBMV1RVTk5FTCBzdWJzeXN0ZW0uIE9rYXksIHRoZSBwaWVjZXMgYXJlIGZhbGxpbmcgaW50byBwbGFjZS4gVGhlIHhtaXQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdmlhIHRoZSBgbHd0dW5uZWxfeG1pdGAgZnVuY3Rpb24uIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgZGVjZW50IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYWluIG9mIGNhbGxzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2x3dHVubmVsX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dHVubmVsLmM9MzczPUVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX291dHB1dCk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTM3NC1cbm5ldC9jb3JlL2x3dHVubmVsLmM6Mzc1OmludCBsd3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9sd3R1bm5lbC5jLTM3Ni17XG4tLVxubmV0L2NvcmUvbHd0dW5uZWwuYy00MjgtfVxubmV0L2NvcmUvbHd0dW5uZWwuYzo0Mjk6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfeG1pdCk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTQzMC1cbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xOTk9c3RhdGljIGludCBpcF9maW5pc2hfb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0yMjEtXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoyMjI6XHRpZiAobHd0dW5uZWxfeG1pdF9yZWRpcmVjdChkc3QtXHUwMDNlbHd0c3RhdGUpKSB7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoyMjM6XHRcdGludCByZXMgPSBsd3R1bm5lbF94bWl0KHNrYik7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0yMjQtXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTYwPXN0YXRpYyBpbnQgaXA2X2ZpbmlzaF9vdXRwdXQyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMTMtXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTE0Olx0aWYgKGx3dHVubmVsX3htaXRfcmVkaXJlY3QoZHN0LVx1MDAzZWx3dHN0YXRlKSkge1xubmV0L2lwdjYvaXA2X291dHB1dC5jOjExNTpcdFx0aW50IHJlcyA9IGx3dHVubmVsX3htaXQoc2tiKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDMKCQkJCQkJCW91dHB1dDogNjgKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMV1R1bm5lbCBUcmFuc21pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgTGlnaHR3ZWlnaHQgVHVubmVsIChMV1QpIHRyYW5zbWlzc2lvbiBwYXRoLiBUaGUga2V5IHNlZW1zIHRvIGJlIGBsd3R1bm5lbF94bWl0YCDigJMgdGhhdCYjMzk7cyB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IHVsdGltYXRlbHkgY2FsbHMgdGhlIGB4bWl0YCBvcGVyYXRpb24uIFRoaW5raW5nIGFib3V0IHRoZSBjYWxsIGNoYWluLCBpdCBhcHBlYXJzIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGBpcF9maW5pc2hfb3V0cHV0MmAgYW5kIGBpcDZfZmluaXNoX291dHB1dDJgLiBUaGF0IG1ha2VzIGBsd3R1bm5lbF94bWl0YCBhIHJlYWxseSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgdHJhY2luZyB0aGUgZmxvdy4gTm93LCB3aGVyZSBlbHNlIG1pZ2h0IHRoaW5ncyBjb21lIGludG8gcGxheT8gTXkgZ3V0IHRlbGxzIG1lIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgZnVuY3Rpb25zIGxpa2UgYGJwZl9sd3RfcHVzaF9pcF9lbmNhcGAgb3Igc2ltaWxhciBCUEYtcmVsYXRlZCBlbmNhcCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2x3dF9icGYuY2AuIFRpbWUgdG8gdmVyaWZ5IGJ5IHRha2luZyBhIGxvb2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aXzAtOV0qIFthLXpBLVpfXVthLXpBLVpfMC05XSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9sd3RfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbHd0X2JwZi5jPTU0OT1zdGF0aWMgaW50IGhhbmRsZV9nc29fZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBpcHY0LCBpbnQgZW5jYXBfbGVuKVxuLS1cbm5ldC9jb3JlL2x3dF9icGYuYy02MDQtXG5uZXQvY29yZS9sd3RfYnBmLmM6NjA1OmludCBicGZfbHd0X3B1c2hfaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaGRyLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MpXG5uZXQvY29yZS9sd3RfYnBmLmMtNjA2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBicGZfbHd0X3B1c2hfaXBfZW5jYXBgIEZ1bmN0aW9uIGFuZCBJdHMgQ29udGV4dCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBicGZfbHd0X3B1c2hfaXBfZW5jYXBgIGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gVGhlIG1vZGlmaWNhdGlvbiB0aGF0IHRyaWdnZXJlZCBteSBjdXJpb3NpdHkgaXMgYWN0dWFsbHkgd2l0aGluIGBicGZfeG1pdGAgYW5kIGB4bWl0X2NoZWNrX2hlYWRyb29tYC4gU2luY2UgYGJwZl94bWl0YCBpcyBjYWxsZWQgYnkgYGx3dHVubmVsX3htaXRgLCBmb2N1c2luZyBvbiBgbHd0dW5uZWxfeG1pdGAgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIGFwcHJvYWNoIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZSYjMzk7cyBpbXBsaWNhdGlvbnMuIFRoYXQgZnVuY3Rpb24gd2lsbCBsaWtlbHkgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByaXBwbGUgZWZmZWN0cy4KCk5vdywgbGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gYG5ldC9jb3JlL2x3dF9icGYuY2AuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSByZWxhdGVkIG1vZGlmaWNhdGlvbnMgb3IgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gQSBxdWljayBjaGVjayB3aWxsIGhlbHAga2VlcCBteSBhbmFseXNpcyBjb21wcmVoZW5zaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9sd3RfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk4CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBuZXQvY29yZS9sd3RfYnBmLmNgKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnbG9iYWwgZnVuY3Rpb24gbGFuZHNjYXBlIHdpdGhpbiB0aGUgbGlnaHR3ZWlnaHQgQlBGIChlQlBGKSBmdW5jdGlvbmFsaXR5LiBNeSBndXQgdGVsbHMgbWUgdGhhdCBgbmV0L2NvcmUvbHd0X2JwZi5jYCBpcyB0aGUgcHJpbWUgbG9jYXRpb24gdG8gc3RhcnQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIHNjb3BlIHdpdGhpbiB0aGUgbmV0d29yayBjb3JlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgY29yZSBmdW5jdGlvbnMgaXQgZXhwb3Nlcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZW50cnkgcG9pbnRzLCB0aGUgaG9va3MsIHRoZSBjb250cm9sIHBvaW50cyDigJMgdGhlIHRoaW5ncyB0aGF0ICpvdGhlciogbmV0d29yayBzdWJzeXN0ZW1zIHdvdWxkIGNhbGwgaW50byBvciB0aGF0IG9yY2hlc3RyYXRlIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gbGlnaHR3ZWlnaHQgdHVubmVscyBvciBpbnRlcmZhY2VzLiBUaGlzIGZpbGUgaXMgcHJvYmFibHkgdGhlIGNlbnRyYWwgaHViIGZvciB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgcHVibGljLCBob3cgdGhleSBhcmUgdXNlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBhcmNoaXRlY3R1cmFsIHBhdHRlcm5zIGltcGxlbWVudGVkIGluIHRoaXMgZmlsZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgW2EtekEtWl9dW2EtekEtWl8wLTldKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9sd3RfYnBmLmM9NTQ5PXN0YXRpYyBpbnQgaGFuZGxlX2dzb19lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGlwdjQsIGludCBlbmNhcF9sZW4pXG4tLVxubmV0L2NvcmUvbHd0X2JwZi5jLTYwNC1cbm5ldC9jb3JlL2x3dF9icGYuYzo2MDU6aW50IGJwZl9sd3RfcHVzaF9pcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcylcbm5ldC9jb3JlL2x3dF9icGYuYy02MDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjIwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMaW51eCBMV1QgVHVubmVsaW5nIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgbGlnaHR3ZWlnaHQgdHVubmVscyBhcmUgaGFuZGxlZCBoZXJlLiBJdCBzZWVtcyB0aGF0IGBicGZfbHd0X3B1c2hfaXBfZW5jYXBgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBCUEYtYmFzZWQgZW5jYXBzdWxhdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIHNvbGlkaWZpZXMgd2hhdCBJIGV4cGVjdGVkLiBCdXQgd2FpdCwgYGx3dHVubmVsX3htaXRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGNhbGxzIGBicGZfeG1pdGAsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVtLiBUaGUgcmVhbCB3b3JrIGlzIGxpa2VseSBkb25lIGRvd24gaW4gYGJwZl94bWl0YCwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBzZWUgaG93IGBsd3R1bm5lbF94bWl0YCBzZXRzIHRoZSBzdGFnZS4gTGV0IG1lIHF1aWNrbHkganVtcCBpbnRvIGBuZXQvY29yZS9sd3R1bm5lbC5jYCBhbmQgZGlnIGludG8gaG93IGBsd3R1bm5lbF94bWl0YCB1dGlsaXplcyB0aGUgQlBGIGZ1bmN0aW9uYWxpdHkuIExldOKAmXMgc2VlIHdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIGRvd24sIGhvdyB0aGUgZW5jYXBzdWxhdGlvbiBpcyBkZXRlcm1pbmVkLCBhbmQgd2hhdCBkZWNpc2lvbnMgYXJlIGJlaW5nIG1hZGUuIFRoaXMgbG9va3MgbGlrZSB0aGUgcmlnaHQgcGF0aCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3NTpcdGludCBsd3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IpXG4gMzc2Olx0e1xuIDM3NzpcdFx0Y29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3BzO1xuIDM3ODpcdFx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZTtcbiAzNzk6XHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcbiAzODA6XHRcdGludCByZXQ7XG4gMzgxOlx0XG4gMzgyOlx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gMzgzOlx0XG4gMzg0Olx0XHRpZiAoZGV2X3htaXRfcmVjdXJzaW9uKCkpIHtcbiAzODU6XHRcdFx0bmV0X2NyaXRfcmF0ZWxpbWl0ZWQoXCYjMzQ7JXMoKTogcmVjdXJzaW9uIGxpbWl0IHJlYWNoZWQgb24gZGF0YXBhdGhcXG5cJiMzNDssXG4gMzg2Olx0XHRcdFx0XHQgICAgIF9fZnVuY19fKTtcbiAzODc6XHRcdFx0cmV0ID0gLUVORVRET1dOO1xuIDM4ODpcdFx0XHRnb3RvIGRyb3A7XG4gMzg5Olx0XHR9XG4gMzkwOlx0XG4gMzkxOlx0XHRkc3QgPSBza2JfZHN0KHNrYik7XG4gMzkyOlx0XHRpZiAoIWRzdCkge1xuIDM5MzpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDM5NDpcdFx0XHRnb3RvIGRyb3A7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIExXVHVubmVsIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiBhIGdvb2QgZm9jdXMgZm9yIHRoaXMgcGF0Y2guIEkgdGhpbmsgYGx3dHVubmVsX3htaXRgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCBgYnBmX3htaXRgLCBidXQgYGx3dHVubmVsX3htaXRgIGZlZWxzIG1vcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgYWN0dWFsIExXVCBmdW5jdGlvbmFsaXR5IGJlaW5nIG1vZGlmaWVkLiBJIHNob3VsZCBhbHNvIG5vdGUgdGhhdCBgYnBmX2x3dF9wdXNoX2lwX2VuY2FwYCBzZWVtcyBsaWtlIGl0ICpjb3VsZCogYmUgcmVsZXZhbnQsIGJ1dCB0aGUgcGF0Y2ggaXNuJiMzOTt0IHRvdWNoaW5nIGl0IGRpcmVjdGx5LCBzbyB0aGF0JiMzOTtzIHByb2JhYmx5IGEgZGlzdHJhY3Rpb24uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBrZXJuZWwgY29uZmlncy4gSSBrbm93IHdlIG5lZWQgYExXVFVOTkVMX0JQRmAsIGFuZCBJIHNlZSB0aGF0IGl0IGRlcGVuZHMgb24gYExXVFVOTkVMYCBhbmQgYElORVRgLiBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGVuYWJsaW5nIGBMV1RVTk5FTF9CUEZgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbjsgaXQmIzM5O3MgdGhlIGNvcmUgb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGFib3V0LiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdGhhdCBqdXN0IGVuYWJsaW5nIGBMV1RVTk5FTF9CUEZgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoaXMgcGF0Y2guCgpMb29raW5nIGNsb3NlciwgdGhlIHBhdGNoIGlzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgbHd0X2JwZi5jYC4gSXQmIzM5O3MgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gYHNrYl9oZWFkcm9vbWAgYW5kIHRoZSBMMiBoZWFkZXIgdXNpbmcgYExMX1JFU0VSVkVEX1NQQUNFKGRzdC0mZ3Q7ZGV2KWAuIFRoaXMga2luZCBvZiBidWZmZXIgc2l6ZSBpc3N1ZSBzY3JlYW1zICYjMzQ7ZnV6emluZyB0YXJnZXQuJiMzNDsgV2UgKmRlZmluaXRlbHkqIG5lZWQgdG8gZXhwbG9yZSB0aGlzIGFyZWEgdGhvcm91Z2hseS4KClNvLCB0byBzdW1tYXJpemUsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGlzIGBMV1RVTk5FTF9CUEZgLCBhbmQgbXkgcHJpbWFyeSBmb2N1cyBzeW1ib2wgd2lsbCBiZSBgbHd0dW5uZWxfeG1pdGAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gYGx3dHVubmVsX3htaXRgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBzb21lIG92ZXJseSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlwX2ZpbmlzaF9vdXRwdXQyYCBhbmQgYGlwNl9maW5pc2hfb3V0cHV0MmAgd2hlbiBgbHd0dW5uZWxfeG1pdF9yZWRpcmVjdChkc3QtJmd0O2x3dHN0YXRlKWAgaXMgdHJ1ZS4gVGhhdCBzZWVtcyBzcGVjaWZpYyBlbm91Z2ggdG8gdGhlIExXVCBjb250ZXh0LCBiZWluZyBhIGhvdC1wYXRoIHNwZWNpZmljYWxseSB3aXRoaW4gTFdULiBgYnBmX2x3dF9wdXNoX2lwX2VuY2FwYCBhbmQgYGJwZl94bWl0YCBkb24mIzM5O3Qgc2VlbSBsaWtlIGdvb2QgY2FuZGlkYXRlcy4gQW5kIGBsd3R1bm5lbF9idWlsZF9zdGF0ZWAgYXBwZWFycyB0byBiZSBmb3Igc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2x3dHVubmVsX2J1aWxkX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbHd0dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9sd3R1bm5lbC5jPTExMT1FWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9lbmNhcF9kZWxfb3BzKTtcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTEyLVxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMTM6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXG5uZXQvY29yZS9sd3R1bm5lbC5jLTExNC1cdFx0XHQgc3RydWN0IG5sYXR0ciAqZW5jYXAsIHVuc2lnbmVkIGludCBmYW1pbHksXG4tLVxubmV0L2NvcmUvbHd0dW5uZWwuYy0xNDktfVxubmV0L2NvcmUvbHd0dW5uZWwuYzoxNTA6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfYnVpbGRfc3RhdGUpO1xubmV0L2NvcmUvbHd0dW5uZWwuYy0xNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMzQKCQkJCQkJCW91dHB1dDogMTQ4CgkJCQkJCQl0aG91Z2h0czogNjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBCUEYgTGlnaHR3ZWlnaHQgVHVubmVsIEhlYWRyb29tIE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggbW9kaWZ5aW5nIGBsd3RfYnBmLmNgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgQlBGIGxpZ2h0d2VpZ2h0IHR1bm5lbCAoTFdUKSB0cmFuc21pdCBwYXRoLiBNeSBmb2N1cyBzeW1ib2xzIGhlcmUgYXJlIGBsd3R1bm5lbF94bWl0YCBhbmQgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGxpZXMsIGFuZCB3aGVyZSB0aGlzIGNoYW5nZSBpcyBpbXBhY3RpbmcuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyB3ZSBoYW5kbGUgaGVhZHJvb20gY2FsY3VsYXRpb24gYmVmb3JlIHRyYW5zbWl0dGluZyBwYWNrZXRzLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBkc3QtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuYCB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIGhlYWRyb29tLiAgTm93LCBpdCYjMzk7cyBiZWluZyB1cGRhdGVkIHRvIHVzZSBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LSZndDtkZXYpYCBpbnN0ZWFkLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgZGlmZmVyZW5jZSBpbiBob3cgdGhlIExXVCB0dW5uZWwgaXMgY2FsY3VsYXRpbmcgYXZhaWxhYmxlIHNwYWNlIGZvciBwYWNrZXQgaGVhZGVycywgd2hpY2ggYWZmZWN0cyBhbGwgbmV0d29ya2luZy4KCkkgc2VlIHRoYXQgdGhlIHBhdGNoIGFsc28gZWxpbWluYXRlcyB0aGUgdXNlIG9mIGBISF9EQVRBX0FMSUdOYCB3aGljaCBJIHdhcyBhIGJpdCBjb25jZXJuZWQgYWJvdXQuIFRoZSBjb21tZW50cyBhcmUgZXhwbGFpbmluZyB0aGF0IHRoaXMgYWxpZ25zIHdpdGggaG93IHRoZSBjYWNoZWQgaGVhZGVyIGlzIGhhbmRsZWQgaW4gYG5laWdoX2hoX291dHB1dCgpYCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgaW4gYWxpZ25lZCBjaHVua3MuIFJlbW92aW5nIHRoZSByb3VuZGluZyBtYWtlcyB0aGUgcHJlLXRyYW5zbWlzc2lvbiBoZWFkcm9vbSByZXNlcnZhdGlvbiBtYXRjaCB0aGUgYWN0dWFsIGxheW91dC4gVGhpcyBlbnN1cmVzIGNvbnNpc3RlbmN5IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBhbGlnbm1lbnQgaXNzdWVzIGR1cmluZyBwYWNrZXQgdHJhbnNtaXNzaW9uLgoKRXNzZW50aWFsbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgaGVhZHJvb20gaXMgYWxsb2NhdGVkIGJlZm9yZSBCUEYgTFdUIHBhY2tldCB0cmFuc21pc3Npb24uIEl0JiMzOTtzIGFib3V0IGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24uIEdpdmVuIHRoaXMgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIG5ldHdvcmtpbmcgcGVyZm9ybWFuY2UsIHRoaXMgaXMgc29tZXRoaW5nIEkgd2FudCB0byBmdXp6IHRob3JvdWdobHkgYXMgcGFydCBvZiBteSBuZXR3b3JraW5nIHRlc3RzLiBDb25maWd1cmF0aW9uIGZvciB0aGlzIGNoYW5nZSBpcyBgTFdUVU5ORUxfQlBGYCB3aGljaCBtYWtlcyBzZW5zZSBhbmQgSSYjMzk7bGwgY29uZmlybSB0aGlzIGlzIGFjdGl2ZSBpbiBteSB0ZXN0IGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHNldC1yZXN1bHRzIGFuZCB0aGVuIHJ1biBzb21lIGZ1enogdGVzdHMgYWdhaW5zdCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFdUVU5ORUxfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHd0dW5uZWxfeG1pdCYjMzQ7LAogICAgJiMzNDtsd3R1bm5lbF9idWlsZF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gZXhwYW5zaW9uIGxvZ2ljIGluIHRoZSBCUEYgbGlnaHR3ZWlnaHQgdHVubmVsIChMV1QpIHRyYW5zbWl0IHBhdGggKGBicGZfeG1pdGApLiBJdCBjaGFuZ2VzIHRoZSByZXF1aXJlZCBoZWFkcm9vbSBjYWxjdWxhdGlvbiB0byB1c2UgYExMX1JFU0VSVkVEX1NQQUNFYCBpbnN0ZWFkIG9mIGBoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGBISF9EQVRBX0FMSUdOYCByb3VuZGluZyB0byBjb3JyZWN0bHkgbWF0Y2ggdGhlIHJlc2VydmF0aW9uIG1hZGUgYmVmb3JlIExXVCB4bWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFdUVU5ORUxfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHd0dW5uZWxfeG1pdCYjMzQ7LAogICAgJiMzNDtsd3R1bm5lbF9idWlsZF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gZXhwYW5zaW9uIGxvZ2ljIGluIHRoZSBCUEYgbGlnaHR3ZWlnaHQgdHVubmVsIChMV1QpIHRyYW5zbWl0IHBhdGggKGBicGZfeG1pdGApLiBJdCBjaGFuZ2VzIHRoZSByZXF1aXJlZCBoZWFkcm9vbSBjYWxjdWxhdGlvbiB0byB1c2UgYExMX1JFU0VSVkVEX1NQQUNFYCBpbnN0ZWFkIG9mIGBoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGBISF9EQVRBX0FMSUdOYCByb3VuZGluZyB0byBjb3JyZWN0bHkgbWF0Y2ggdGhlIHJlc2VydmF0aW9uIG1hZGUgYmVmb3JlIExXVCB4bWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gY2hlY2sgaW4gYGJwZl94bWl0YCBmb3IgTFdUIEJQRiBwcm9ncmFtcy4gSXQgcmVwbGFjZXMgYHhtaXRfY2hlY2tfaGhsZW5gIHdpdGggYHhtaXRfY2hlY2tfaGVhZHJvb21gLCBlbnN1cmluZyB0aGF0IHRoZSByZXNlcnZlZCBoZWFkcm9vbSBtYXRjaGVzIGBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXHUwMDNlZGV2KWAgcmF0aGVyIHRoYW4ganVzdCB0aGUgZXhhY3QgaGFyZHdhcmUgaGVhZGVyIGxlbmd0aCAoYGhoX2xlbmApLiBUaGlzIHByZXZlbnRzIGEgc2l0dWF0aW9uIHdoZXJlIGBuZWlnaF9oaF9vdXRwdXQoKWAgbWlnaHQgZHJvcCB0aGUgcGFja2V0IGFuZCB0cmlnZ2VyIGEgYFdBUk5fT05fT05DRWAgYmVjYXVzZSBpdCBjb3BpZXMgdGhlIGNhY2hlZCBoYXJkd2FyZSBoZWFkZXIgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcywgd2hpY2ggcmVxdWlyZXMgbW9yZSBoZWFkcm9vbSB0aGFuIGp1c3QgYGhoX2xlbmAuXG5cblRoaXMgaXMgYSBmaXggZm9yIGEgcGFja2V0IGRyb3AgLyB3YXJuaW5nIGlzc3VlIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tIHNpemluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGhhcmR3YXJlLiBUaGUgaGVhZHJvb20gZXhwYW5kZWQgYnkgYHBza2JfZXhwYW5kX2hlYWRgIGlzIHN1YnNlcXVlbnRseSB3cml0dGVuIHRvIGJ5IGBuZWlnaF9oaF9vdXRwdXQoKWAgYmVmb3JlIGBfX3NrYl9wdXNoKClgIGluY2x1ZGVzIHRoZSBleGFjdCBoZWFkZXIgbGVuZ3RoIGluIHRoZSBwYWNrZXQgZGF0YS4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlbGF0ZWQgdG8gaGVhZHJvb20gd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhiNTNmYjRhMmNiMDJkMTU2MmY0ZDk2OTdjMzE2NzBmNGYyYTQ2MDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwNToxMzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2x3dF9icGYuYyBiL25ldC9jb3JlL2x3dF9icGYuYwppbmRleCA2NTI5NTJkNDE2ZjIzLi5kYTQ5MzY0ZWM2M2RlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9sd3RfYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbHd0X2JwZi5jCkBAIC0xNjcsMTAgJiM0MzsxNjcsMTAgQEAgc3RhdGljIGludCBicGZfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiBkc3QtJmd0O2x3dHN0YXRlLSZndDtvcmlnX291dHB1dChuZXQsIHNrLCBza2IpOwogfQogCi1zdGF0aWMgaW50IHhtaXRfY2hlY2tfaGhsZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhoX2xlbikKJiM0MztzdGF0aWMgaW50IHhtaXRfY2hlY2tfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhyb29tKQogewotCWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IGhoX2xlbikgewotCQlpbnQgbmhlYWQgPSBISF9EQVRBX0FMSUdOKGhoX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKTsKJiM0MzsJaWYgKHNrYl9oZWFkcm9vbShza2IpICZsdDsgaHJvb20pIHsKJiM0MzsJCWludCBuaGVhZCA9IGhyb29tIC0gc2tiX2hlYWRyb29tKHNrYik7CiAKIAkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuaGVhZCwgMCwgR0ZQX0FUT01JQykpCiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI4Miw3ICYjNDM7MjgyLDcgQEAgc3RhdGljIGludCBicGZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJYnBmID0gYnBmX2x3dF9sd3R1bm5lbChkc3QtJmd0O2x3dHN0YXRlKTsKIAlpZiAoYnBmLSZndDt4bWl0LnByb2cpIHsKLQkJaW50IGhoX2xlbiA9IGRzdC0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47CiYjNDM7CQlpbnQgaHJvb20gPSBMTF9SRVNFUlZFRF9TUEFDRShkc3QtJmd0O2Rldik7CiAJCV9fYmUxNiBwcm90byA9IHNrYi0mZ3Q7cHJvdG9jb2w7CiAJCWludCByZXQ7CiAKQEAgLTI5OCw5ICYjNDM7Mjk4LDEyIEBAIHN0YXRpYyBpbnQgYnBmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCS8qIElmIHRoZSBoZWFkZXIgd2FzIGV4cGFuZGVkLCBoZWFkcm9vbSBtaWdodCBiZSB0b28KLQkJCSAqIHNtYWxsIGZvciBMMiBoZWFkZXIgdG8gY29tZSwgZXhwYW5kIGFzIG5lZWRlZC4KJiM0MzsJCQkgKiBzbWFsbCBmb3IgdGhlIEwyIGhlYWRlciB0byBjb21lLCBleHBhbmQgYXMgbmVlZGVkLgomIzQzOwkJCSAqIG5laWdoX2hoX291dHB1dCgpIGNvcGllcyB0aGUgY2FjaGVkIGhlYWRlciBpbgomIzQzOwkJCSAqIEhIX0RBVEFfTU9EIGFsaWduZWQgY2h1bmtzLCBzbyBtYXRjaCB0aGUgcmVzZXJ2YXRpb24KJiM0MzsJCQkgKiBtYWRlIGJlZm9yZSBMV1QgeG1pdC4KIAkJCSAqLwotCQkJcmV0ID0geG1pdF9jaGVja19oaGxlbihza2IsIGhoX2xlbik7CiYjNDM7CQkJcmV0ID0geG1pdF9jaGVja19oZWFkcm9vbShza2IsIGhyb29tKTsKIAkJCWlmICh1bmxpa2VseShyZXQpKQogCQkJCXJldHVybiByZXQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgTFdUIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbmV0L2NvcmUvbHd0X2JwZi5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgdHJhbnNtaXQgcGF0aC4gSXQmIzM5O3MgY2hhbmdpbmcgYHhtaXRfY2hlY2tfaGhsZW5gIHRvIGB4bWl0X2NoZWNrX2hlYWRyb29tYCwgYW5kIHRoZSBhcmd1bWVudCBpcyBzaGlmdGluZyBmcm9tIGBoaF9sZW5gIHRvIGBocm9vbWAuIEltbWVkaWF0ZWx5LCB0aGUgYGhyb29tYCBjYWxjdWxhdGlvbiBsb29rcyBkaWZmZXJlbnQ7IGl0JiMzOTtzIHVzaW5nIGBMTF9SRVNFUlZFRF9TUEFDRShkc3QtJmd0O2RldilgIGluc3RlYWQgb2YgZGlyZWN0bHkgcHVsbGluZyBgZHN0LSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRvIGZvY3VzIG9uLiBXaGF0JiMzOTtzIGBMTF9SRVNFUlZFRF9TUEFDRWAgZG9pbmc/IFRoYXQmIzM5O3Mga2V5LgoKVGhlIGNhbGN1bGF0aW9uIGluc2lkZSBgeG1pdF9jaGVja19oZWFkcm9vbWAgaGFzIGFsc28gc2hpZnRlZC4gSXQmIzM5O3Mgbm93IGBocm9vbSAtIHNrYl9oZWFkcm9vbShza2IpYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYEhIX0RBVEFfQUxJR05gIGRhbmNlLiBUaGF0IHNlZW1zIHNpbXBsZXIsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIGNvcnJlY3QuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgbWVtb3J5IHNhZmV0eS4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZWFkcm9vbS4gV2Uga25vdyB0aGF0IGBwc2tiX2V4cGFuZF9oZWFkYCBjYW4gZXhwYW5kIHRoZSBoZWFkcm9vbSBpZiB0aGUgY3VycmVudCBoZWFkcm9vbSBpcyBpbnN1ZmZpY2llbnQuIElmIGBza2JfaGVhZHJvb20oc2tiKSAmbHQ7IGhyb29tYCwgaXQgZXhwYW5kcyBieSBgbmhlYWRgLiBUaGF0IGV4cGFuc2lvbiBpcyBwcm9iYWJseSBhIGNvcHksIHNvIHdoYXQmIzM5O3Mgd3JpdHRlbiB0aGVyZT8gVGhlIGNvbW1lbnQgbWVudGlvbnMgYG5laWdoX2hoX291dHB1dGAgYW5kIGNhY2hpbmcuIEl0IGNvcGllcyB0aGUgY2FjaGVkIGhlYWRlciwgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcy4gVGhlIGdvYWwgaXMgdG8gbWF0Y2ggcmVzZXJ2YXRpb25zIG1hZGUgYmVmb3JlIExXVCB0cmFuc21pc3Npb24uCgpPa2F5LCBpcyB0aGlzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG1pZ2h0IGNyZWVwIGluPyBJZiBgcHNrYl9leHBhbmRfaGVhZGAgY3JlYXRlcyBuZXcgaGVhZHJvb20sIGlzIGl0IHVuaW5pdGlhbGl6ZWQ/IFllcywgaXQgaXMuIEJ1dCwgaXQmIzM5O3MgKmhlYWRyb29tKjsgdGhhdCBzcGFjZSBpcyBpbnRlbmRlZCBmb3IgaGVhZGVyIHdyaXRlcy4gTm93LCBgbmVpZ2hfaGhfb3V0cHV0YCB3cml0ZXMgdG8gdGhlIGhlYWRyb29tLCB3aGljaCBtZWFucyBpZiB0aGUgaGVhZHJvb20gaXNuJiMzOTt0IGxhcmdlIGVub3VnaCwgaXQgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLiBUaGFua2Z1bGx5LCBLQVNBTiB3b3VsZCBwcm9iYWJseSBjYXRjaCB0aGF0LgoKQnV0LCBpcyB0aGVyZSBhIGNhc2Ugd2hlcmUgaXQgcmVhZHMgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSB0aG91Z2h0IGlzIHRoYXQgYG5laWdoX2hoX291dHB1dGAgY29waWVzIHRoZSBjYWNoZWQgaGVhZGVyIGFuZCB0aGVyZWZvcmUgcmVhZHMgZnJvbSBzb21ld2hlcmUsIGJ1dCBpdCBzaG91bGQgYmUgd3JpdGluZywgbm90IHJlYWRpbmcgZnJvbSwgdGhlIGhlYWRyb29tLgoKU28gdGhlIG1haW4gcG9pbnQgaXMgdGhhdCBgcHNrYl9leHBhbmRfaGVhZGAgKmRvZXMqIGxlYXZlIGhlYWRyb29tIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFdoZW4gaGVhZGVycyBhcmUgbGF0ZXIgcHVzaGVkLCB0aGF0IG1lbW9yeSB3aWxsIGdldCB3cml0dGVuIHRvLCBzbyB0aGUgcHJvYmxlbSBtaWdodCBub3QgYmUgcmVhZGluZywgYnV0IHdyaXRpbmcgYmV5b25kIGhhcmRfaGVhZGVyX2xlbiBpbiB0aGUgd29yc3QgY2FzZSBpZiBgbmVpZ2hfaGhfb3V0cHV0YCB3cml0ZXMgdG8gaGVhZHJvb20uCgpUaGUgb2xkIGNvZGUgdXNlZCBgSEhfREFUQV9BTElHTmAsIGJ1dCBub3cgd2UmIzM5O3JlIHVzaW5nIGBocm9vbWAuIFRoZSBjcml0aWNhbCB0aGluZyB0byB1bmRlcnN0YW5kIGlzIGhvdyBgTExfUkVTRVJWRURfU1BBQ0VgIGlzIGJlaW5nIHVzZWQgYW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMuIFRoZSBvcmlnaW5hbCB0aG91Z2h0IHdhcyB0aGF0IGBISF9EQVRBX0FMSUdOYCB3YXMgdGhlcmUgZm9yIGEgcmVhc29uIGFuZCB3ZSBoYXZlIHRvIHNlZSBpZiB0aGUgbmV3IGxvZ2ljIGlzIG9rYXkuIGBMTF9SRVNFUlZFRF9TUEFDRWAgaXMgdXN1YWxseSBgQUxJR04oZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4sIDE2KSAmIzQzOyAuLi5gLiBUaGlzIGlzIHRoZSBjcnV4LCB3aGF0IGRvZXMgdGhlIGFsaWdubWVudCBtZWFuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBMV1QgcGF0aD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTI4Mj1zdHJ1Y3QgaGhfY2FjaGUge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzAyLSAqL1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozMDM6I2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIGhsZW4pIFxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMwNC1cdCgoKChobGVuKSAmIzQzOyBSRUFEX09OQ0UoKGRldiktXHUwMDNlbmVlZGVkX2hlYWRyb29tKSkgXFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzA1LVx0ICBcdTAwMjYgfihISF9EQVRBX01PRCAtIDEpKSAmIzQzOyBISF9EQVRBX01PRClcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzA2OiNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSBcXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMDctXHRMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIChkZXYpLVx1MDAzZWhhcmRfaGVhZGVyX2xlbilcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzA4OiNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0VfRVhUUkEoZGV2LGV4dHJhKSBcXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMDktXHQoKCgoZGV2KS1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0MzsgUkVBRF9PTkNFKChkZXYpLVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkgJiM0MzsgKGV4dHJhKSkgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAxNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBXcml0ZSBpbiBOZXR3b3JrIFBhY2tldCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgTExfUkVTRVJWRURfU1BBQ0VgIGFsaWducyB3aXRoIGBISF9EQVRBX01PRGAuIFRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBjb2RlIGNhbGN1bGF0ZWQgdGhlIHJlcXVpcmVkIGhlYWRyb29tIHdpdGggdGhpcyBsaW5lOiBgaW50IG5oZWFkID0gSEhfREFUQV9BTElHTihoaF9sZW4gLSBza2JfaGVhZHJvb20oc2tiKSk7YCwgd2hlcmUgYEhIX0RBVEFfQUxJR05gIGFsc28gYWxpZ25zIHRvIGBISF9EQVRBX01PRGAuICBgaGhfbGVuYCB3YXMganVzdCB0aGUgaGFyZCBoZWFkZXIgbGVuZ3RoIGZvciB0aGUgZGV2aWNlLiAgSWYgYHNrYl9oZWFkcm9vbShza2IpYCAodGhlIHNwYWNlIGFscmVhZHkgYXZhaWxhYmxlKSB3YXMgbGVzcyB0aGFuIHRoaXMgYGhoX2xlbmAsIGl0IHdvdWxkICppbmNyZWFzZSogdGhlIGhlYWRyb29tIGJ5IHRoYXQgYWxpZ25lZCBhbW91bnQuICBFZmZlY3RpdmVseSwgdGhlIG5ldyBoZWFkcm9vbSB3b3VsZCBiZSB0aGUgb3JpZ2luYWwgaGVhZHJvb20gcGx1cyB0aGUgYWxpZ25lZCBkaWZmZXJlbmNlLgoKQnV0IG5vdywgYG5laWdoX2hoX291dHB1dGAgKnJlcXVpcmVzKiBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LSZndDtkZXYpYCwgYW5kIHRoaXMgc3BhY2UgaW5jbHVkZXMgdGhlIG5lZWRlZCBoZWFkcm9vbSBhbmQgaXMgYWxpZ25lZCB0byBgSEhfREFUQV9NT0RgLiBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIElmIHRoZSBgc2tiX2hlYWRyb29tKHNrYilgIHdhcyBhbHJlYWR5ICpsYXJnZXIqIHRoYW4gYGhoX2xlbmAgYnV0IHN0aWxsICpzbWFsbGVyKiB0aGFuIHRoZSBgTExfUkVTRVJWRURfU1BBQ0VgLCB0aGUgY29kZSAqd291bGRuJiMzOTt0KiBleHBhbmQgdGhlIGhlYWRyb29tIGF0IGFsbC4gVGhhdCYjMzk7cyBhIHByb2JsZW0sIGJlY2F1c2UgYG5laWdoX2hoX291dHB1dGAgaXMgZ29pbmcgdG8gd3JpdGUgdGhlIGNhY2hlZCBoZWFkZXIgdG8gdGhlIGhlYWRyb29tLCBidXQgaWYgdGhlIGhlYWRyb29tIGlzIGluc3VmZmljaWVudCwgaXQmIzM5O2xsIHdyaXRlICpiZWZvcmUqIHRoZSBgc2tiLSZndDtoZWFkYCBwb2ludGVyLCBzaW5jZSBpdCBjb3BpZXMgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcy4gVGhpcyBtZWFucyBpdCYjMzk7cyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIOKAkyBhbiB1bmRlcmZsb3cg4oCTIGFuZCBLQVNBTiBzaG91bGQgY2F0Y2ggdGhhdC4KCldhaXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmc7IGl0JiMzOTtzIEtBU0FOIHRoYXQgbWF0dGVycywgbm90IG5lY2Vzc2FyaWx5IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHJpZ2h0PyAgT2theSwgSSB0aGluayBJJiMzOTttIHNvbGlkOiAgYG5laWdoX2hoX291dHB1dGAgd3JpdGVzIHRvIHRoZSBoZWFkcm9vbS4gIElmIHRoZSBoZWFkcm9vbSBpcyB0b28gc21hbGwsIGl0IHdyaXRlcyBvdXQgb2YgYm91bmRzIOKAkyBhIHByZS1gc2tiLSZndDtoZWFkYCB1bmRlcmZsb3cuIEtBU0FOIGNhdGNoZXMgYW55IGtpbmQgb2Ygb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJvdGggcmVhZCBhbmQgd3JpdGUuICBObywgdGhpcyBpc24mIzM5O3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpc3N1ZTsgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgb3V0LW9mLWJvdW5kcyB3cml0ZS4KClJpZ2h0LCB0aW1lIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGUgYG5laWdoX2hoX291dHB1dGAgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfb3V0cHV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25laWdoYm91ci5oPTQ5MD1zdGF0aWMgaW5saW5lIGludCBuZWlnaF9oaF9icmlkZ2Uoc3RydWN0IGhoX2NhY2hlICpoaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC01MDYtXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaDo1MDc6c3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfb3V0cHV0KGNvbnN0IHN0cnVjdCBoaF9jYWNoZSAqaGgsIHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC01MDgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTE1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgbmVpZ2hfaGhfb3V0cHV0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYG5laWdoX2hoX291dHB1dGAuIEJhc2VkIG9uIHRoZSBmaWxlIG5hbWUsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIG91dHB1dCByZWxhdGVkIHRvIHRoZSBuZWlnaGJvcmhvb2QgaG91c2Vob2xkIGRhdGEuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgZm9ybWF0PyBJcyBpdCBhIHN0YW5kYXJkIENTViwgYSBKU09OIHN0cnVjdHVyZSwgbWF5YmUgZXZlbiBhIG1vcmUgc3BlY2lhbGl6ZWQgYmluYXJ5IGZvcm1hdD8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdHJ1Y3R1cmUgc28gSSBjYW4gZWZmaWNpZW50bHkgcGFyc2UgaXQgYW5kIGJlZ2luIHRoZSBhbmFseXNpcy4gQXJlIHRoZXJlIGhlYWRlcnM/IFdoYXQgYXJlIHRoZSBrZXkgdmFyaWFibGVzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBkYXRhIHF1YWxpdHkgaXNzdWVzIEkgc2hvdWxkIGFudGljaXBhdGUsIGxpa2UgbWlzc2luZyB2YWx1ZXMgb3Igb3V0bGllcnM/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRob3NlIHBvdGVudGlhbCBhcmVhcyB0byBiZSBjb2duaXphbnQgb2YgYXMgSSBhbSB3b3JraW5nIHdpdGggdGhlIGRhdGEuIERlcGVuZGluZyBvbiBteSB3b3JrLCBJIHdpbGwgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHF1YWxpdHkgb2YgdGhpcyBkYXRhIHRvIG1ha2UgYXBwcm9wcmlhdGUgaW50ZXJwcmV0YXRpb25zLiBJIHdpbGwgbGlrZWx5IG5lZWQgdG8gaW1wb3J0IHRoZSBwYWNrYWdlIHJlbGF0ZWQgdG8gbXkgZmllbGQgYXMgd2VsbC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHdoYXRldmVyIHF1ZXN0aW9ucyBJIGFtIHRyeWluZyB0byBhbnN3ZXIgcmVnYXJkaW5nIG5laWdoYm9yaG9vZCBlZmZlY3RzIG9uIGhvdXNlaG9sZCBiZWhhdmlvciwgZGVtb2dyYXBoaWNzLCBvciB3aGF0ZXZlciBvdGhlciBzcGVjaWZpYyBtZXRyaWMgSSYjMzk7bSBsb29raW5nIGF0LiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoaXMgZGF0YXNldCBob2xkcyB0aGUgYW5zd2VycyBJJiMzOTttIHNlYXJjaGluZyBmb3IuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiBoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25laWdoYm91ci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDc6XHRzdGF0aWMgaW5saW5lIGludCBuZWlnaF9oaF9vdXRwdXQoY29uc3Qgc3RydWN0IGhoX2NhY2hlICpoaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA1MDg6XHR7XG4gNTA5Olx0XHR1bnNpZ25lZCBpbnQgaGhfYWxlbiA9IDA7XG4gNTEwOlx0XHR1bnNpZ25lZCBpbnQgc2VxO1xuIDUxMTpcdFx0dW5zaWduZWQgaW50IGhoX2xlbjtcbiA1MTI6XHRcbiA1MTM6XHRcdGRvIHtcbiA1MTQ6XHRcdFx0c2VxID0gcmVhZF9zZXFiZWdpbihcdTAwMjZoaC1cdTAwM2VoaF9sb2NrKTtcbiA1MTU6XHRcdFx0aGhfbGVuID0gUkVBRF9PTkNFKGhoLVx1MDAzZWhoX2xlbik7XG4gNTE2Olx0XHRcdGlmIChsaWtlbHkoaGhfbGVuIFx1MDAzYz0gSEhfREFUQV9NT0QpKSB7XG4gNTE3Olx0XHRcdFx0aGhfYWxlbiA9IEhIX0RBVEFfTU9EO1xuIDUxODpcdFxuIDUxOTpcdFx0XHRcdC8qIHNrYl9wdXNoKCkgd291bGQgcHJvY2VlZCBzaWxlbnRseSBpZiB3ZSBoYXZlIHJvb20gZm9yXG4gNTIwOlx0XHRcdFx0ICogdGhlIHVuYWxpZ25lZCBzaXplIGJ1dCBub3QgZm9yIHRoZSBhbGlnbmVkIHNpemU6XG4gNTIxOlx0XHRcdFx0ICogY2hlY2sgaGVhZHJvb20gZXhwbGljaXRseS5cbiA1MjI6XHRcdFx0XHQgKi9cbiA1MjM6XHRcdFx0XHRpZiAobGlrZWx5KHNrYl9oZWFkcm9vbShza2IpIFx1MDAzZT0gSEhfREFUQV9NT0QpKSB7XG4gNTI0Olx0XHRcdFx0XHQvKiB0aGlzIGlzIGlubGluZWQgYnkgZ2NjICovXG4gNTI1Olx0XHRcdFx0XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEgLSBISF9EQVRBX01PRCwgaGgtXHUwMDNlaGhfZGF0YSxcbiA1MjY6XHRcdFx0XHRcdCAgICAgICBISF9EQVRBX01PRCk7XG4gNTI3Olx0XHRcdFx0fVxuIDUyODpcdFx0XHR9IGVsc2Uge1xuIDUyOTpcdFx0XHRcdGhoX2FsZW4gPSBISF9EQVRBX0FMSUdOKGhoX2xlbik7XG4gNTMwOlx0XG4gNTMxOlx0XHRcdFx0aWYgKGxpa2VseShza2JfaGVhZHJvb20oc2tiKSBcdTAwM2U9IGhoX2FsZW4pKSB7XG4gNTMyOlx0XHRcdFx0XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEgLSBoaF9hbGVuLCBoaC1cdTAwM2VoaF9kYXRhLFxuIDUzMzpcdFx0XHRcdFx0ICAgICAgIGhoX2FsZW4pO1xuIDUzNDpcdFx0XHRcdH1cbiA1MzU6XHRcdFx0fVxuIDUzNjpcdFx0fSB3aGlsZSAocmVhZF9zZXFyZXRyeShcdTAwMjZoaC1cdTAwM2VoaF9sb2NrLCBzZXEpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkxMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIGBuZWlnaF9oaF9vdXRwdXRgIGFuZCBpdHMgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gYG5laWdoX2hoX291dHB1dGAgaXMgdXNpbmcgYHNrYl9oZWFkcm9vbShza2IpYCB0byBjaGVjayBmb3Igc3VmZmljaWVudCBzcGFjZSBpbiB0aGUgU29ja2V0IEJ1ZmZlciAoYHNrYmApIHVzaW5nIGBISF9EQVRBX01PRGAgb3IgYGhoX2FsZW5gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiB0aGlzIGhlYWRyb29tIGlzbiYjMzk7dCBiaWcgZW5vdWdoLCB0aGVyZSYjMzk7cyBnb2luZyB0byBiZSBhIHNraXAgb2YgdGhlIGBtZW1jcHlgIGNhbGwuIE1ha2VzIHNlbnNlIGZyb20gYSBtZW1vcnkgYWxsb2NhdGlvbiBzdGFuZHBvaW50OyBubyBwb2ludCBjb3B5aW5nIGRhdGEgd2hlcmUgdGhlcmUgaXNuJiMzOTt0IGFjdHVhbGx5IHNwYWNlIQoKQnV0Li4uICp3aGF0IGhhcHBlbnMqIGlmIHRoYXQgYG1lbWNweWAgZ2V0cyBza2lwcGVkPyBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBrbm93IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBnb2luZyB0byBkbyBpbnN0ZWFkISBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8ga2VlcCByZWFkaW5nIGFuZCBzZWUgaG93IGl0IGhhbmRsZXMgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGhlYWRyb29tIGlzIGluc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZWlnaGJvdXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTM3Olx0XG4gNTM4Olx0XHRpZiAoV0FSTl9PTl9PTkNFKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBoaF9hbGVuKSkge1xuIDUzOTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA1NDA6XHRcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4gNTQxOlx0XHR9XG4gNTQyOlx0XG4gNTQzOlx0XHRfX3NrYl9wdXNoKHNrYiwgaGhfbGVuKTtcbiA1NDQ6XHRcdHJldHVybiBkZXZfcXVldWVfeG1pdChza2IpO1xuIDU0NTpcdH1cbiA1NDY6XHRcbiA1NDc6XHRzdGF0aWMgaW5saW5lIGludCBuZWlnaF9vdXRwdXQoc3RydWN0IG5laWdoYm91ciAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA1NDg6XHRcdFx0XHQgICAgICAgYm9vbCBza2lwX2NhY2hlKVxuIDU0OTpcdHtcbiA1NTA6XHRcdGNvbnN0IHN0cnVjdCBoaF9jYWNoZSAqaGggPSBcdTAwMjZuLVx1MDAzZWhoO1xuIDU1MTpcdFxuIDU1MjpcdFx0Lyogbi1cdTAwM2VudWRfc3RhdGUgYW5kIGhoLVx1MDAzZWhoX2xlbiBjb3VsZCBiZSBjaGFuZ2VkIHVuZGVyIHVzLlxuIDU1MzpcdFx0ICogbmVpZ2hfaGhfb3V0cHV0KCkgaXMgdGFraW5nIGNhcmUgb2YgdGhlIHJhY2UgbGF0ZXIuXG4gNTU0Olx0XHQgKi9cbiA1NTU6XHRcdGlmICghc2tpcF9jYWNoZSBcdTAwMjZcdTAwMjZcbiA1NTY6XHRcdCAgICAoUkVBRF9PTkNFKG4tXHUwMDNlbnVkX3N0YXRlKSBcdTAwMjYgTlVEX0NPTk5FQ1RFRCkgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzODgKCQkJCQkJCW91dHB1dDogMjcyCgkJCQkJCQl0aG91Z2h0czogMTgwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgSGVhZHJvb20gTW9kaWZpY2F0aW9uIGluIGBuZXQvY29yZS9sd3RfYnBmLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBoZWFkcm9vbSBjYWxjdWxhdGlvbiBpbiBgbmV0L2NvcmUvbHd0X2JwZi5jYC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgY2hlY2sgZnJvbSBgeG1pdF9jaGVja19oaGxlbmAgdG8gYHhtaXRfY2hlY2tfaGVhZHJvb21gLiAgUHJldmlvdXNseSwgYHhtaXRfY2hlY2tfaGhsZW5gIHdhcyBlbnN1cmluZyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCksIGJ1dCBub3cgdGhlIGNvZGUgaXMgYWxpZ25pbmcgdGhlIGhlYWRyb29tIHJlc2VydmF0aW9uIHdpdGggYExMX1JFU0VSVkVEX1NQQUNFKGRzdC0mZ3Q7ZGV2KWAuIFRoYXQmIzM5O3Mgc21hcnQ7IGBMTF9SRVNFUlZFRF9TUEFDRWAgYWxyZWFkeSBhY2NvdW50cyBmb3IgdGhpbmdzIGxpa2UgZGV2aWNlLXNwZWNpZmljIG92ZXJoZWFkIGFuZCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCByYXRoZXIgdGhhbiBhIHBvdGVudGlhbGx5IHNtYWxsZXIgYGhoX2xlbmAuCgpUaGUgY29tbWVudCBpcyBrZXkgaGVyZS4gSXQgaGlnaGxpZ2h0cyB0aGF0IGBuZWlnaF9oaF9vdXRwdXRgIG1pZ2h0IHJlcXVpcmUgbW9yZSBoZWFkcm9vbSB0aGFuIGp1c3QgYGhoX2xlbmAgYmVjYXVzZSBpdCBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcy4gSSByZW1lbWJlciB0aGF0IGZ1bmN0aW9uOyBpdCB1c2VzIGBISF9EQVRBX01PRGAgKHR5cGljYWxseSAxNiBieXRlcykgYWxpZ25tZW50IHdoZW4gY29weWluZyB0aGUgaGVhZGVyLCBvciBhIGxhcmdlciBgSEhfREFUQV9BTElHTihoaF9sZW4pYCBpZiB0aGUgaGVhZGVyIGlzIGxhcmdlci4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gdGhlIHByZXZpb3VzbHkgcmVzZXJ2ZWQgaGVhZHJvb20gaXMgKmp1c3QqIGVub3VnaCBmb3IgYGhoX2xlbmAsIGJ1dCBub3QgZm9yIHRoZSBhbGlnbmVkIGNvcHkuIGBuZWlnaF9oaF9vdXRwdXRgIHRoZW4gZmFpbHMgdGhlIGNoZWNrIChgc2tiX2hlYWRyb29tKHNrYikgJmd0Oz0gaGhfYWxlbmApIGFuZCBkcm9wcyB0aGUgcGFja2V0IHdpdGggYSB3YXJuaW5nIG9yLCBpbiBzb21lIGNhc2VzLCBtaWdodCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIHRoYXQgY2hlY2sgd2FzbiYjMzk7dCB0aGVyZS4KCk5vdywgd2l0aCB0aGlzIGNoYW5nZSwgYHhtaXRfY2hlY2tfaGVhZHJvb21gIGVuc3VyZXMgdGhlcmUgaXMgc3VmZmljaWVudCBoZWFkcm9vbSB0byBhY2NvdW50IGZvciB0aGlzIGxhcmdlciBjb3B5LiBgTExfUkVTRVJWRURfU1BBQ0VgIGluY2x1ZGVzIGBuZWVkZWRfaGVhZHJvb21gLCBzbyB0aGUgbmV3IGNoZWNrIHNob3VsZCBoYXZlIGVub3VnaCBoZWFkcm9vbSB0byBkZWFsIHdpdGggdGhlIGFsaWdubWVudCBuZWVkcy4KCk15IG1haW4gY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIG1lbW9yeSBzYWZldHkuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHdyaXRlcz8gIExldCYjMzk7cyBzZWU6IGBwc2tiX2V4cGFuZF9oZWFkYCAqYWxsb2NhdGVzKiBtb3JlIG1lbW9yeSwgYnV0IGl0IGRvZXNuJiMzOTt0IGluaXRpYWxpemUgaXQuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgYmVoYXZpb3IuIEhvd2V2ZXIsIGBuZWlnaF9oaF9vdXRwdXRgICp3cml0ZXMqIGludG8gdGhlIGhlYWRyb29tLiBDcnVjaWFsbHksIGl0IGNvcGllcyBkYXRhIGZyb20gYGhoLSZndDtoaF9kYXRhYC4gIFRoYXQmIzM5O3MgKmluaXRpYWxpemVkKiBkYXRhISBUaGUgbGVuZ3RoIGNvcGllZCBpcyBgaGhfYWxlbmAuCgpUaGVuLCBgX19za2JfcHVzaChza2IsIGhoX2xlbilgIGFkanVzdHMgdGhlIHBhY2tldCYjMzk7cyBkYXRhIHBvaW50ZXIgYW5kIGxlbmd0aCwgaW5jbHVkaW5nIG9ubHkgdGhlICphY3R1YWwqIGhlYWRlciBsZW5ndGggKGBoaF9sZW5gKS4gSXQgZG9lcyAqbm90KiBpbmNsdWRlIHRoZSBleHRyYSBieXRlcyBjb3BpZWQgdG8gYWNoaWV2ZSBhbGlnbm1lbnQ7IHRob3NlIHJlbWFpbiBpbiB0aGUgaGVhZHJvb20sIGJlZm9yZSB0aGUgYWN0dWFsIGRhdGEuIFRodXMsIHRoZSBleHRyYSBoZWFkcm9vbSBieXRlcyAodXAgdG8gYGhoX2FsZW5gKSBhcmUgKm5vdCogcGFydCBvZiB0aGUgcGFja2V0IGRhdGEsIGFuZCB0aGUgZGF0YSBiZWluZyBzZW50IHRvIHRoZSBOSUMgKmlzKiBpbml0aWFsaXplZC4KClNvLCB0aGVyZSYjMzk7cyBubyB3YXkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYmVjYXVzZSB0aGUgc291cmNlIGRhdGEgKGBoaC0mZ3Q7aGhfZGF0YWApIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgd2UgcHVzaCB0aGUgdmFsaWQgcGFydCwgYW5kIHRoZSByZXN0IGlzIGhlYWRyb29tLiBJdCYjMzk7cyByZWFsbHkganVzdCBmaXhpbmcgYSBidWcgd2hlcmUgd2UgZGlkbiYjMzk7dCBoYXZlIGVub3VnaCBoZWFkcm9vbSB0byBoYW5kbGUgdGhlIGFsaWdubWVudCBpbiB0aGUgZXhpc3RpbmcgY29kZS4gSWYgdGhlIGV4aXN0aW5nIGNvZGUgZGlkbiYjMzk7dCBoYXZlIHRoZSBjaGVjayBgc2tiX2hlYWRyb29tKHNrYikgJmd0Oz0gaGhfYWxlbmAsIHRoZXJlIGNvdWxkIGhhdmUgYmVlbiBvdXQgb2YgYm91bmRzIHdyaXRlLiBMdWNraWx5LCB0aGF0IGNoZWNrIGlzIGFscmVhZHkgcHJlc2VudCwgc28gdGhlIGJ1ZyBtYW5pZmVzdGVkIGFzIGEgcGFja2V0IGRyb3AsIGFuZCB0aGlzIHBhdGNoIGZpeGVzIHRoYXQuIEtBU0FOIHdvdWxkIGVhc2lseSBjYXRjaCBhbnkgcmVhbCBvdXQtb2YtYm91bmRzIGlzc3VlcywgYnV0IHRoYXQmIzM5O3Mgbm90IHdoYXQgdGhpcyBpcy4KClNvLCB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgaGVhZHJvb20gc2l6aW5nIHByb2JsZW0sIHByZXZlbnRpbmcgcGFja2V0IGRyb3BzIGR1ZSB0byBpbnN1ZmZpY2llbnQgaGVhZHJvb20uIEl0ICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdl4oCZcmUgbm90IGFkZGluZyBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGhlYWRyb29tIGl0c2VsZiBpcyBjb3JyZWN0bHkgd3JpdHRlbiBiZWZvcmUgdGhlIHBhY2tldCBkYXRhIGlzIGRlZmluZWQuIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIHN0YW5kYXJkIEtBU0FOIHRvb2xpbmcgd291bGQgZmxhZyBhbnl0aGluZyBpbiB0aGUgZXhpc3RpbmcgY29kZSBvciBuZXcgY29kZSB0aGF0IGNhdXNlcyBhbiBvdXQgb2YgYm91bmRzIHdyaXRlIHRvIGFuIGFsbG9jYXRlZCBhcmVhLCBidXQgdGhlcmUgaXMgbm90aGluZyBwcmVzZW50IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoZWFkcm9vbSBjaGVjayBpbiBgYnBmX3htaXRgIGZvciBMV1QgQlBGIHByb2dyYW1zLiBJdCByZXBsYWNlcyBgeG1pdF9jaGVja19oaGxlbmAgd2l0aCBgeG1pdF9jaGVja19oZWFkcm9vbWAsIGVuc3VyaW5nIHRoYXQgdGhlIHJlc2VydmVkIGhlYWRyb29tIG1hdGNoZXMgYExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cdTAwM2VkZXYpYCByYXRoZXIgdGhhbiBqdXN0IHRoZSBleGFjdCBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCkuIFRoaXMgcHJldmVudHMgYSBzaXR1YXRpb24gd2hlcmUgYG5laWdoX2hoX291dHB1dCgpYCBtaWdodCBkcm9wIHRoZSBwYWNrZXQgYW5kIHRyaWdnZXIgYSBgV0FSTl9PTl9PTkNFYCBiZWNhdXNlIGl0IGNvcGllcyB0aGUgY2FjaGVkIGhhcmR3YXJlIGhlYWRlciBpbiBgSEhfREFUQV9NT0RgIGFsaWduZWQgY2h1bmtzLCB3aGljaCByZXF1aXJlcyBtb3JlIGhlYWRyb29tIHRoYW4ganVzdCBgaGhfbGVuYC5cblxuVGhpcyBpcyBhIGZpeCBmb3IgYSBwYWNrZXQgZHJvcCAvIHdhcm5pbmcgaXNzdWUgcmVsYXRlZCB0byBidWZmZXIgaGVhZHJvb20gc2l6aW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgaGFyZHdhcmUuIFRoZSBoZWFkcm9vbSBleHBhbmRlZCBieSBgcHNrYl9leHBhbmRfaGVhZGAgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgYG5laWdoX2hoX291dHB1dCgpYCBiZWZvcmUgYF9fc2tiX3B1c2goKWAgaW5jbHVkZXMgdGhlIGV4YWN0IGhlYWRlciBsZW5ndGggaW4gdGhlIHBhY2tldCBkYXRhLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgcmVsYXRlZCB0byBoZWFkcm9vbSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoZWFkcm9vbSBjaGVjayBpbiBgYnBmX3htaXRgIGZvciBMV1QgQlBGIHByb2dyYW1zLiBJdCByZXBsYWNlcyBgeG1pdF9jaGVja19oaGxlbmAgd2l0aCBgeG1pdF9jaGVja19oZWFkcm9vbWAsIGVuc3VyaW5nIHRoYXQgdGhlIHJlc2VydmVkIGhlYWRyb29tIG1hdGNoZXMgYExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cdTAwM2VkZXYpYCByYXRoZXIgdGhhbiBqdXN0IHRoZSBleGFjdCBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCkuIFRoaXMgcHJldmVudHMgYSBzaXR1YXRpb24gd2hlcmUgYG5laWdoX2hoX291dHB1dCgpYCBtaWdodCBkcm9wIHRoZSBwYWNrZXQgYW5kIHRyaWdnZXIgYSBgV0FSTl9PTl9PTkNFYCBiZWNhdXNlIGl0IGNvcGllcyB0aGUgY2FjaGVkIGhhcmR3YXJlIGhlYWRlciBpbiBgSEhfREFUQV9NT0RgIGFsaWduZWQgY2h1bmtzLCB3aGljaCByZXF1aXJlcyBtb3JlIGhlYWRyb29tIHRoYW4ganVzdCBgaGhfbGVuYC5cblxuVGhpcyBpcyBhIGZpeCBmb3IgYSBwYWNrZXQgZHJvcCAvIHdhcm5pbmcgaXNzdWUgcmVsYXRlZCB0byBidWZmZXIgaGVhZHJvb20gc2l6aW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgaGFyZHdhcmUuIFRoZSBoZWFkcm9vbSBleHBhbmRlZCBieSBgcHNrYl9leHBhbmRfaGVhZGAgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgYG5laWdoX2hoX291dHB1dCgpYCBiZWZvcmUgYF9fc2tiX3B1c2goKWAgaW5jbHVkZXMgdGhlIGV4YWN0IGhlYWRlciBsZW5ndGggaW4gdGhlIHBhY2tldCBkYXRhLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgcmVsYXRlZCB0byBoZWFkcm9vbSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6MjMuODg4MTk2OTczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzOTc3NTEwOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxXVFVOTkVMX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImx3dHVubmVsX3htaXRcIixcbiAgICBcImx3dHVubmVsX2J1aWxkX3N0YXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gY2hlY2sgaW4gYGJwZl94bWl0YCBmb3IgTFdUIEJQRiBwcm9ncmFtcy4gSXQgcmVwbGFjZXMgYHhtaXRfY2hlY2tfaGhsZW5gIHdpdGggYHhtaXRfY2hlY2tfaGVhZHJvb21gLCBlbnN1cmluZyB0aGF0IHRoZSByZXNlcnZlZCBoZWFkcm9vbSBtYXRjaGVzIGBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXFx1MDAzZWRldilgIHJhdGhlciB0aGFuIGp1c3QgdGhlIGV4YWN0IGhhcmR3YXJlIGhlYWRlciBsZW5ndGggKGBoaF9sZW5gKS4gVGhpcyBwcmV2ZW50cyBhIHNpdHVhdGlvbiB3aGVyZSBgbmVpZ2hfaGhfb3V0cHV0KClgIG1pZ2h0IGRyb3AgdGhlIHBhY2tldCBhbmQgdHJpZ2dlciBhIGBXQVJOX09OX09OQ0VgIGJlY2F1c2UgaXQgY29waWVzIHRoZSBjYWNoZWQgaGFyZHdhcmUgaGVhZGVyIGluIGBISF9EQVRBX01PRGAgYWxpZ25lZCBjaHVua3MsIHdoaWNoIHJlcXVpcmVzIG1vcmUgaGVhZHJvb20gdGhhbiBqdXN0IGBoaF9sZW5gLlxcblxcblRoaXMgaXMgYSBmaXggZm9yIGEgcGFja2V0IGRyb3AgLyB3YXJuaW5nIGlzc3VlIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tIHNpemluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGhhcmR3YXJlLiBUaGUgaGVhZHJvb20gZXhwYW5kZWQgYnkgYHBza2JfZXhwYW5kX2hlYWRgIGlzIHN1YnNlcXVlbnRseSB3cml0dGVuIHRvIGJ5IGBuZWlnaF9oaF9vdXRwdXQoKWAgYmVmb3JlIGBfX3NrYl9wdXNoKClgIGluY2x1ZGVzIHRoZSBleGFjdCBoZWFkZXIgbGVuZ3RoIGluIHRoZSBwYWNrZXQgZGF0YS4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlbGF0ZWQgdG8gaGVhZHJvb20gd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBsb2dpYyBpbiB0aGUgQlBGIGxpZ2h0d2VpZ2h0IHR1bm5lbCAoTFdUKSB0cmFuc21pdCBwYXRoIChgYnBmX3htaXRgKS4gSXQgY2hhbmdlcyB0aGUgcmVxdWlyZWQgaGVhZHJvb20gY2FsY3VsYXRpb24gdG8gdXNlIGBMTF9SRVNFUlZFRF9TUEFDRWAgaW5zdGVhZCBvZiBgaGFyZF9oZWFkZXJfbGVuYCBhbmQgcmVtb3ZlcyBgSEhfREFUQV9BTElHTmAgcm91bmRpbmcgdG8gY29ycmVjdGx5IG1hdGNoIHRoZSByZXNlcnZhdGlvbiBtYWRlIGJlZm9yZSBMV1QgeG1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbiB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjIzLjg4ODIwMzkyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3OTcyNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGI1M2ZiNGEyY2IwMmQxNTYyZjRkOTY5N2MzMTY3MGY0ZjJhNDYwMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNToxMzoyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9sd3RfYnBmLmMgYi9uZXQvY29yZS9sd3RfYnBmLmNcXG5pbmRleCA2NTI5NTJkNDE2ZjIzLi5kYTQ5MzY0ZWM2M2RlIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2x3dF9icGYuY1xcbisrKyBiL25ldC9jb3JlL2x3dF9icGYuY1xcbkBAIC0xNjcsMTAgKzE2NywxMCBAQCBzdGF0aWMgaW50IGJwZl9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHJldHVybiBkc3QtXFx1MDAzZWx3dHN0YXRlLVxcdTAwM2VvcmlnX291dHB1dChuZXQsIHNrLCBza2IpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHhtaXRfY2hlY2tfaGhsZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhoX2xlbilcXG4rc3RhdGljIGludCB4bWl0X2NoZWNrX2hlYWRyb29tKHN0cnVjdCBza19idWZmICpza2IsIGludCBocm9vbSlcXG4ge1xcbi1cXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzYyBoaF9sZW4pIHtcXG4tXFx0XFx0aW50IG5oZWFkID0gSEhfREFUQV9BTElHTihoaF9sZW4gLSBza2JfaGVhZHJvb20oc2tiKSk7XFxuK1xcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcXHUwMDNjIGhyb29tKSB7XFxuK1xcdFxcdGludCBuaGVhZCA9IGhyb29tIC0gc2tiX2hlYWRyb29tKHNrYik7XFxuIFxcbiBcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIG5oZWFkLCAwLCBHRlBfQVRPTUlDKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTI4Miw3ICsyODIsNyBAQCBzdGF0aWMgaW50IGJwZl94bWl0KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBcXHRicGYgPSBicGZfbHd0X2x3dHVubmVsKGRzdC1cXHUwMDNlbHd0c3RhdGUpO1xcbiBcXHRpZiAoYnBmLVxcdTAwM2V4bWl0LnByb2cpIHtcXG4tXFx0XFx0aW50IGhoX2xlbiA9IGRzdC1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuK1xcdFxcdGludCBocm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cXHUwMDNlZGV2KTtcXG4gXFx0XFx0X19iZTE2IHByb3RvID0gc2tiLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuQEAgLTI5OCw5ICsyOTgsMTIgQEAgc3RhdGljIGludCBicGZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHQvKiBJZiB0aGUgaGVhZGVyIHdhcyBleHBhbmRlZCwgaGVhZHJvb20gbWlnaHQgYmUgdG9vXFxuLVxcdFxcdFxcdCAqIHNtYWxsIGZvciBMMiBoZWFkZXIgdG8gY29tZSwgZXhwYW5kIGFzIG5lZWRlZC5cXG4rXFx0XFx0XFx0ICogc21hbGwgZm9yIHRoZSBMMiBoZWFkZXIgdG8gY29tZSwgZXhwYW5kIGFzIG5lZWRlZC5cXG4rXFx0XFx0XFx0ICogbmVpZ2hfaGhfb3V0cHV0KCkgY29waWVzIHRoZSBjYWNoZWQgaGVhZGVyIGluXFxuK1xcdFxcdFxcdCAqIEhIX0RBVEFfTU9EIGFsaWduZWQgY2h1bmtzLCBzbyBtYXRjaCB0aGUgcmVzZXJ2YXRpb25cXG4rXFx0XFx0XFx0ICogbWFkZSBiZWZvcmUgTFdUIHhtaXQuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRyZXQgPSB4bWl0X2NoZWNrX2hobGVuKHNrYiwgaGhfbGVuKTtcXG4rXFx0XFx0XFx0cmV0ID0geG1pdF9jaGVja19oZWFkcm9vbShza2IsIGhyb29tKTtcXG4gXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMzoyNC4zNjcxNzA5ODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0ODM4ODE2MzAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMV1RVTk5FTF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsd3R1bm5lbF94bWl0XCIsXG4gICAgXCJsd3R1bm5lbF9idWlsZF9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoZWFkcm9vbSBleHBhbnNpb24gbG9naWMgaW4gdGhlIEJQRiBsaWdodHdlaWdodCB0dW5uZWwgKExXVCkgdHJhbnNtaXQgcGF0aCAoYGJwZl94bWl0YCkuIEl0IGNoYW5nZXMgdGhlIHJlcXVpcmVkIGhlYWRyb29tIGNhbGN1bGF0aW9uIHRvIHVzZSBgTExfUkVTRVJWRURfU1BBQ0VgIGluc3RlYWQgb2YgYGhhcmRfaGVhZGVyX2xlbmAgYW5kIHJlbW92ZXMgYEhIX0RBVEFfQUxJR05gIHJvdW5kaW5nIHRvIGNvcnJlY3RseSBtYXRjaCB0aGUgcmVzZXJ2YXRpb24gbWFkZSBiZWZvcmUgTFdUIHhtaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb24gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YjUzZmI0YTJjYjAyZDE1NjJmNGQ5Njk3YzMxNjcwZjRmMmE0NjAxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDU6MTM6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9sd3RfYnBmLmMgYi9uZXQvY29yZS9sd3RfYnBmLmNcbmluZGV4IDY1Mjk1MmQ0MTZmMjMuLmRhNDkzNjRlYzYzZGUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9sd3RfYnBmLmNcbisrKyBiL25ldC9jb3JlL2x3dF9icGYuY1xuQEAgLTE2NywxMCArMTY3LDEwIEBAIHN0YXRpYyBpbnQgYnBmX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBkc3QtXHUwMDNlbHd0c3RhdGUtXHUwMDNlb3JpZ19vdXRwdXQobmV0LCBzaywgc2tiKTtcbiB9XG4gXG4tc3RhdGljIGludCB4bWl0X2NoZWNrX2hobGVuKHN0cnVjdCBza19idWZmICpza2IsIGludCBoaF9sZW4pXG4rc3RhdGljIGludCB4bWl0X2NoZWNrX2hlYWRyb29tKHN0cnVjdCBza19idWZmICpza2IsIGludCBocm9vbSlcbiB7XG4tXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXHUwMDNjIGhoX2xlbikge1xuLVx0XHRpbnQgbmhlYWQgPSBISF9EQVRBX0FMSUdOKGhoX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKTtcbitcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgaHJvb20pIHtcbitcdFx0aW50IG5oZWFkID0gaHJvb20gLSBza2JfaGVhZHJvb20oc2tiKTtcbiBcbiBcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuaGVhZCwgMCwgR0ZQX0FUT01JQykpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjgyLDcgKzI4Miw3IEBAIHN0YXRpYyBpbnQgYnBmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdGJwZiA9IGJwZl9sd3RfbHd0dW5uZWwoZHN0LVx1MDAzZWx3dHN0YXRlKTtcbiBcdGlmIChicGYtXHUwMDNleG1pdC5wcm9nKSB7XG4tXHRcdGludCBoaF9sZW4gPSBkc3QtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcdFx0aW50IGhyb29tID0gTExfUkVTRVJWRURfU1BBQ0UoZHN0LVx1MDAzZWRldik7XG4gXHRcdF9fYmUxNiBwcm90byA9IHNrYi1cdTAwM2Vwcm90b2NvbDtcbiBcdFx0aW50IHJldDtcbiBcbkBAIC0yOTgsOSArMjk4LDEyIEBAIHN0YXRpYyBpbnQgYnBmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbiBcdFx0XHQvKiBJZiB0aGUgaGVhZGVyIHdhcyBleHBhbmRlZCwgaGVhZHJvb20gbWlnaHQgYmUgdG9vXG4tXHRcdFx0ICogc21hbGwgZm9yIEwyIGhlYWRlciB0byBjb21lLCBleHBhbmQgYXMgbmVlZGVkLlxuK1x0XHRcdCAqIHNtYWxsIGZvciB0aGUgTDIgaGVhZGVyIHRvIGNvbWUsIGV4cGFuZCBhcyBuZWVkZWQuXG4rXHRcdFx0ICogbmVpZ2hfaGhfb3V0cHV0KCkgY29waWVzIHRoZSBjYWNoZWQgaGVhZGVyIGluXG4rXHRcdFx0ICogSEhfREFUQV9NT0QgYWxpZ25lZCBjaHVua3MsIHNvIG1hdGNoIHRoZSByZXNlcnZhdGlvblxuK1x0XHRcdCAqIG1hZGUgYmVmb3JlIExXVCB4bWl0LlxuIFx0XHRcdCAqL1xuLVx0XHRcdHJldCA9IHhtaXRfY2hlY2tfaGhsZW4oc2tiLCBoaF9sZW4pO1xuK1x0XHRcdHJldCA9IHhtaXRfY2hlY2tfaGVhZHJvb20oc2tiLCBocm9vbSk7XG4gXHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6MjQuMzY3MTczMDUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4NzU2NzA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFBhY2tldCBUcmFuc21pc3Npb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvbHd0X2JwZi5jYCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHBhY2tldCB0cmFuc21pc3Npb24uIEl0IHNlZW1zIHRoZXkncmUgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgdGhlIGhlYWRyb29tIGlzIG1hbmFnZWQuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSByZXBsYWNlbWVudCBvZiBgeG1pdF9jaGVja19oaGxlbmAgd2l0aCBgeG1pdF9jaGVja19oZWFkcm9vbWAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQgaW4gdGhlIGxvZ2ljLlxuXG5UaGUgY2FsY3VsYXRpb24gb2YgYG5oZWFkYCBpcyBub3cgdXNpbmcgYGhyb29tYCAobGlrZWx5IHRoZSBoZWFkcm9vbSBhdmFpbGFibGUpIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgaGFyZHdhcmUgaGVhZGVyIGxlbmd0aC4gRnVydGhlcm1vcmUsIGluIGBicGZfeG1pdGAsIGluc3RlYWQgb2YgZmV0Y2hpbmcgYGhoX2xlbmAgZnJvbSB0aGUgZGV2aWNlJ3MgaGFyZCBoZWFkZXIgbGVuZ3RoLCBpdCdzIG5vdyByZXRyaWV2aW5nIGBocm9vbWAgdXNpbmcgYExMX1JFU0VSVkVEX1NQQUNFYC4gVGhpcyBpcyBkaXJlY3RseSBwYXNzZWQgaW50byBgeG1pdF9jaGVja19oZWFkcm9vbWAgZm9yIGFuYWx5c2lzLlxuXG5NeSBpbW1lZGlhdGUgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmb2N1c2VkIG9uIGFkZHJlc3NpbmcgYW4gaXNzdWUgaW4gaGVhZHJvb20gZXhwYW5zaW9uIHdpdGhpbiBgYnBmX3htaXRgLiBJJ20gZ3Vlc3NpbmcgdGhpcyByZXNvbHZlcyBhIHN1YnRsZSBidWcgcmVsYXRlZCB0byBob3cgdGhlIEJQRiBMV1QgaW50ZXJhY3RzIHdpdGggZGV2aWNlcyBoYXZpbmcgdmFyeWluZyBoZWFkcm9vbSByZXF1aXJlbWVudHMgb3IgcGVyaGFwcyBkZWFsaW5nIHdpdGggYWxpZ25tZW50IGlzc3VlcyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbi5cblxuQmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGBuZXQvY29yZS9sd3RfYnBmLmNgIHRvIHNlZSBob3cgaXQncyBlbmFibGVkIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgd2lsbCBnaXZlIG1lIGZ1cnRoZXIgY29udGV4dCBmb3IgYW5hbHl6aW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMzoyOS4xNTQ3NDI2NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEwMzQ1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0X2JwZlxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9Mzg9b2JqLSQoQ09ORklHX0xXVFVOTkVMKSArPSBsd3R1bm5lbC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX0xXVFVOTkVMX0JQRikgKz0gbHd0X2JwZi5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDAtb2JqLSQoQ09ORklHX0RTVF9DQUNIRSkgKz0gZHN0X2NhY2hlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6MjkuMjQ1NzgyNzQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ2MDI0NTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aGUgdGFzayBhdCBoYW5kIHJldm9sdmVzIGFyb3VuZCBgQ09ORklHX0xXVFVOTkVMX0JQRmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGRpZyBkZWVwZXIgaW50byBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3Igc2V0dGluZ3MgYXJlIGludGVydHdpbmVkIHdpdGggdGhpcyBvbmUuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsOyBpdCBoZWxwcyBtZSBhbnRpY2lwYXRlIHBvdGVudGlhbCBjb25mbGljdHMsIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLCBhbmQgcGlucG9pbnQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gZW5zdXJlIHNlYW1sZXNzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzdGFydCBtYXBwaW5nIHRoZW0gb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6MzEuNzA2MDMwNTYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzIxMTY3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFdUVU5ORUxfQlBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDQ1PWNvbmZpZyBMV1RVTk5FTFxcbi0tXFxubmV0L0tjb25maWctNDUyLVxcbm5ldC9LY29uZmlnOjQ1Mzpjb25maWcgTFdUVU5ORUxfQlBGXFxubmV0L0tjb25maWctNDU0LVxcdGJvb2wgXFxcIkV4ZWN1dGUgQlBGIHByb2dyYW0gYXMgcm91dGUgbmV4dGhvcCBhY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjMxLjgzMzI0ODc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNjg1MjM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgTFdUVU5ORUxfQlBGYCBEZXRhaWxzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IHJpZ2h0IGRvd24gdG8gaXQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciwgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIGBMV1RVTk5FTF9CUEZgIGZ1bmN0aW9uYWxpdHkuIEknbSBub3QgbG9va2luZyBmb3IgYSBzdXJmYWNlLWxldmVsIGV4cGxhbmF0aW9uOyBJIHdhbnQgdGhlIG5pdHR5LWdyaXR0eSwgdGhlIGZ1bGwtYmxvd24gZGVmaW5pdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQgdGhpcyB0ZXJtIGVuY29tcGFzc2VzLiBJIGFscmVhZHkgaGF2ZSBhIGRlY2VudCBncmFzcCwgYnV0IGEgY29uY2lzZSBkZWZpbml0aW9uIHdpbGwgaGVscCBtZSBjb25maXJtIG15IG1lbnRhbCBtb2RlbC4gV2hhdCBhcmUgdGhlIGtleSBlbGVtZW50cz8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzPyBMZXQncyBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjM0Ljc3MDEwMzcxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDU6XFx0Y29uZmlnIExXVFVOTkVMXFxuIDQ0NjpcXHRcXHRib29sIFxcXCJOZXR3b3JrIGxpZ2h0IHdlaWdodCB0dW5uZWxzXFxcIlxcbiA0NDc6XFx0XFx0aGVscFxcbiA0NDg6XFx0XFx0ICBUaGlzIGZlYXR1cmUgcHJvdmlkZXMgYW4gaW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBsaWdodCB3ZWlnaHRcXG4gNDQ5OlxcdFxcdCAgdHVubmVscyBsaWtlIG1wbHMuIFRoZXJlIGlzIG5vIG5ldGRldmljZSBhc3NvY2lhdGVkIHdpdGggYSBsaWdodFxcbiA0NTA6XFx0XFx0ICB3ZWlnaHQgdHVubmVsIGVuZHBvaW50LiBUdW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGFyZSBzdG9yZWRcXG4gNDUxOlxcdFxcdCAgd2l0aCBsaWdodCB3ZWlnaHQgdHVubmVsIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBmaWIgcm91dGVzLlxcbiA0NTI6XFx0XFxuIDQ1MzpcXHRjb25maWcgTFdUVU5ORUxfQlBGXFxuIDQ1NDpcXHRcXHRib29sIFxcXCJFeGVjdXRlIEJQRiBwcm9ncmFtIGFzIHJvdXRlIG5leHRob3AgYWN0aW9uXFxcIlxcbiA0NTU6XFx0XFx0ZGVwZW5kcyBvbiBMV1RVTk5FTCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuIDQ1NjpcXHRcXHRkZWZhdWx0IHkgaWYgTFdUVU5ORUw9eVxcbiA0NTc6XFx0XFx0aGVscFxcbiA0NTg6XFx0XFx0ICBBbGxvd3MgdG8gcnVuIEJQRiBwcm9ncmFtcyBhcyBhIG5leHRob3AgYWN0aW9uIGZvbGxvd2luZyBhIHJvdXRlXFxuIDQ1OTpcXHRcXHQgIGxvb2t1cCBmb3IgaW5jb21pbmcgYW5kIG91dGdvaW5nIHBhY2tldHMuXFxuIDQ2MDpcXHRcXG4gNDYxOlxcdGNvbmZpZyBEU1RfQ0FDSEVcXG4gNDYyOlxcdFxcdGJvb2xcXG4gNDYzOlxcdFxcdGRlZmF1bHQgblxcbiA0NjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjM0Ljc3MDIxMzI3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjg2MDQwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqQW5hbHl6aW5nIHRoZSBMV1RVTk5FTCBhbmQgQlBGIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYExXVFVOTkVMX0JQRmAgdGhpbmcgd29ya3MuIFJpZ2h0IG9mZiB0aGUgYmF0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0IGJ1aWxkcyB1cG9uIGJvdGggYExXVFVOTkVMYCBhbmQgYElORVRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGV4dGVuZGluZyB0aGUgTFdUVU5ORUwgZnVuY3Rpb25hbGl0eSB3aXRoIEJQRiwgYW5kIGl0IG5lZWRzIHRoZSBzdGFuZGFyZCBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlLCB0b28uIFRoZSByZWFsIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBicGZfeG1pdGAuXG5cbk5vdywgdGhlIGRvY3VtZW50YXRpb24gc2F5cyBgYnBmX3htaXRgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgQlBGIExXVCB4bWl0LiBUaGF0J3MgZ29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIHN1c3BpY2lvbnMuIEl0J3MgdGhlIGhvb2sgdGhhdCBicmlkZ2VzIHRoZSBMV1RVTk5FTCBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIEJQRiBsb2dpYy4gQnV0Li4uIGlzIGl0IHN0YXRpYz8gVW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhhdCBmdW5jdGlvbiBjYWxsIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyByZXF1aXJlZCBoZXJlLiBJZiBpdCdzIHN0YXRpYywgdGhhdCBpbXBsaWVzIGEgdGlnaHRlciBlbmNhcHN1bGF0aW9uIGFuZCBwb3RlbnRpYWxseSBsZXNzIGltcGFjdCBvbiB0aGUgd2lkZXIga2VybmVsLiBJZiBub3QsIHdlIGhhdmUgYSBiaWdnZXIgcGljdHVyZSB0byBjb25zaWRlci4gU28sIGxldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX3htaXRgIHRvIGRldGVybWluZSBpdHMgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjM4LjEzODgxOTc1NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNTQyODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2x3dF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9sd3RfYnBmLmM9MTgyPXN0YXRpYyBpbnQgYnBmX2x3dF94bWl0X3Jlcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2x3dF9icGYuYy0yNzctXFxubmV0L2NvcmUvbHd0X2JwZi5jOjI3ODpzdGF0aWMgaW50IGJwZl94bWl0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvbHd0X2JwZi5jLTI3OS17XFxuLS1cXG5uZXQvY29yZS9sd3RfYnBmLmM9NTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGJwZl9lbmNhcF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9sd3RfYnBmLmMtNTI5LVxcdC5vdXRwdXRcXHRcXHQ9IGJwZl9vdXRwdXQsXFxubmV0L2NvcmUvbHd0X2JwZi5jOjUzMDpcXHQueG1pdFxcdFxcdD0gYnBmX3htaXQsXFxubmV0L2NvcmUvbHd0X2JwZi5jLTUzMS1cXHQuZmlsbF9lbmNhcFxcdD0gYnBmX2ZpbGxfZW5jYXBfaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6MzguMjQxMzY3NDA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzYxNTA3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIGVCUEYgRW5jYXBzdWxhdGlvbiBUcmFuc21pc3Npb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBicGZfeG1pdGAsIHdoaWNoIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBhIGxpdHRsZSB1bnVzdWFsIGZvciBhIHRyYW5zbWlzc2lvbiBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCBpdCdzIGJlaW5nIGFzc2lnbmVkIHRvIGBicGZfZW5jYXBfb3BzLnhtaXRgLiBUaGF0J3MgaG93IGl0J3MgZ2V0dGluZyBob29rZWQgaW50byB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCAqd2hlcmUqIGlzIGBicGZfeG1pdGAgYmVpbmcgdXNlZD8gSXMgdGhlcmUgYSBub24tc3RhdGljIGZ1bmN0aW9uIHdoaWNoIGNhbGxzIGl0PyBJIG5lZWQgdG8gdHJhY2sgdGhpcyBkb3duLlxuXG5SaWdodCwgSSByZW1lbWJlciBub3csIGBicGZfZW5jYXBfb3BzYCBpcyByZWdpc3RlcmVkLCB0aHJvdWdoIGBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNmJwZl9lbmNhcF9vcHMsIExXVFVOTkVMX0VOQ0FQX0JQRilgIHdpdGhpbiBgYnBmX2x3dF9pbml0YC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBob3cgdGhlIGVCUEYgZW5jYXBzdWxhdGlvbiBvcGVyYXRpb25zIGFyZSBob29rZWQgaW50byB0aGUgTGludXggTFdUVU5ORUwgc3Vic3lzdGVtLiBPa2F5LCB0aGUgcGllY2VzIGFyZSBmYWxsaW5nIGludG8gcGxhY2UuIFRoZSB4bWl0IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHZpYSB0aGUgYGx3dHVubmVsX3htaXRgIGZ1bmN0aW9uLiBJIHRoaW5rIEkndmUgZ290IGEgZGVjZW50IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYWluIG9mIGNhbGxzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6NDEuOTc3NTIxMzg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwODc3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0dW5uZWxfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2x3dHVubmVsLmM9MzczPUVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX291dHB1dCk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYy0zNzQtXFxubmV0L2NvcmUvbHd0dW5uZWwuYzozNzU6aW50IGx3dHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9sd3R1bm5lbC5jLTM3Ni17XFxuLS1cXG5uZXQvY29yZS9sd3R1bm5lbC5jLTQyOC19XFxubmV0L2NvcmUvbHd0dW5uZWwuYzo0Mjk6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfeG1pdCk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYy00MzAtXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xOTk9c3RhdGljIGludCBpcF9maW5pc2hfb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTIyMS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoyMjI6XFx0aWYgKGx3dHVubmVsX3htaXRfcmVkaXJlY3QoZHN0LVxcdTAwM2Vsd3RzdGF0ZSkpIHtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoyMjM6XFx0XFx0aW50IHJlcyA9IGx3dHVubmVsX3htaXQoc2tiKTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0yMjQtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NjA9c3RhdGljIGludCBpcDZfZmluaXNoX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTEzLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMTQ6XFx0aWYgKGx3dHVubmVsX3htaXRfcmVkaXJlY3QoZHN0LVxcdTAwM2Vsd3RzdGF0ZSkpIHtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTE1OlxcdFxcdGludCByZXMgPSBsd3R1bm5lbF94bWl0KHNrYik7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTExNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6NDIuMDg1NjE0ODc3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTI5NjY4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMV1R1bm5lbCBUcmFuc21pc3Npb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIExpZ2h0d2VpZ2h0IFR1bm5lbCAoTFdUKSB0cmFuc21pc3Npb24gcGF0aC4gVGhlIGtleSBzZWVtcyB0byBiZSBgbHd0dW5uZWxfeG1pdGAg4oCTIHRoYXQncyB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IHVsdGltYXRlbHkgY2FsbHMgdGhlIGB4bWl0YCBvcGVyYXRpb24uIFRoaW5raW5nIGFib3V0IHRoZSBjYWxsIGNoYWluLCBpdCBhcHBlYXJzIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGBpcF9maW5pc2hfb3V0cHV0MmAgYW5kIGBpcDZfZmluaXNoX291dHB1dDJgLiBUaGF0IG1ha2VzIGBsd3R1bm5lbF94bWl0YCBhIHJlYWxseSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgdHJhY2luZyB0aGUgZmxvdy4gTm93LCB3aGVyZSBlbHNlIG1pZ2h0IHRoaW5ncyBjb21lIGludG8gcGxheT8gTXkgZ3V0IHRlbGxzIG1lIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgZnVuY3Rpb25zIGxpa2UgYGJwZl9sd3RfcHVzaF9pcF9lbmNhcGAgb3Igc2ltaWxhciBCUEYtcmVsYXRlZCBlbmNhcCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2x3dF9icGYuY2AuIFRpbWUgdG8gdmVyaWZ5IGJ5IHRha2luZyBhIGxvb2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDMsIk91dHB1dFRva2VucyI6NjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6NDYuMTc4NTg0OTMyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzQxMDc2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWl8wLTldKiBbYS16QS1aX11bYS16QS1aXzAtOV0qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvbHd0X2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2x3dF9icGYuYz01NDk9c3RhdGljIGludCBoYW5kbGVfZ3NvX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgaXB2NCwgaW50IGVuY2FwX2xlbilcXG4tLVxcbm5ldC9jb3JlL2x3dF9icGYuYy02MDQtXFxubmV0L2NvcmUvbHd0X2JwZi5jOjYwNTppbnQgYnBmX2x3dF9wdXNoX2lwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkciwgdTMyIGxlbiwgYm9vbCBpbmdyZXNzKVxcbm5ldC9jb3JlL2x3dF9icGYuYy02MDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMzo0Ni4yNDYwMDAyNTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMDcxMjQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBicGZfbHd0X3B1c2hfaXBfZW5jYXBgIEZ1bmN0aW9uIGFuZCBJdHMgQ29udGV4dCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGJwZl9sd3RfcHVzaF9pcF9lbmNhcGAgaXNuJ3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSBtb2RpZmljYXRpb24gdGhhdCB0cmlnZ2VyZWQgbXkgY3VyaW9zaXR5IGlzIGFjdHVhbGx5IHdpdGhpbiBgYnBmX3htaXRgIGFuZCBgeG1pdF9jaGVja19oZWFkcm9vbWAuIFNpbmNlIGBicGZfeG1pdGAgaXMgY2FsbGVkIGJ5IGBsd3R1bm5lbF94bWl0YCwgZm9jdXNpbmcgb24gYGx3dHVubmVsX3htaXRgIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBhcHByb2FjaCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2UncyBpbXBsaWNhdGlvbnMuIFRoYXQgZnVuY3Rpb24gd2lsbCBsaWtlbHkgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByaXBwbGUgZWZmZWN0cy5cblxuTm93LCBsZXQncyBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gYG5ldC9jb3JlL2x3dF9icGYuY2AuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSBoYXZlbid0IG92ZXJsb29rZWQgYW55IHJlbGF0ZWQgbW9kaWZpY2F0aW9ucyBvciBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBBIHF1aWNrIGNoZWNrIHdpbGwgaGVscCBrZWVwIG15IGFuYWx5c2lzIGNvbXByZWhlbnNpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6NDkuOTY2NzE2NDQ5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODIzNDA5MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9sd3RfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjUwLjAzNDk1NzY3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgzMzU4NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byBgbmV0L2NvcmUvbHd0X2JwZi5jYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnbG9iYWwgZnVuY3Rpb24gbGFuZHNjYXBlIHdpdGhpbiB0aGUgbGlnaHR3ZWlnaHQgQlBGIChlQlBGKSBmdW5jdGlvbmFsaXR5LiBNeSBndXQgdGVsbHMgbWUgdGhhdCBgbmV0L2NvcmUvbHd0X2JwZi5jYCBpcyB0aGUgcHJpbWUgbG9jYXRpb24gdG8gc3RhcnQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIHNjb3BlIHdpdGhpbiB0aGUgbmV0d29yayBjb3JlLiBMZXQncyBzZWUgd2hhdCBjb3JlIGZ1bmN0aW9ucyBpdCBleHBvc2VzLiBJJ20gbG9va2luZyBmb3IgdGhlIGVudHJ5IHBvaW50cywgdGhlIGhvb2tzLCB0aGUgY29udHJvbCBwb2ludHMg4oCTIHRoZSB0aGluZ3MgdGhhdCAqb3RoZXIqIG5ldHdvcmsgc3Vic3lzdGVtcyB3b3VsZCBjYWxsIGludG8gb3IgdGhhdCBvcmNoZXN0cmF0ZSB0aGUgaW50ZXJhY3Rpb25zIHdpdGggQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGxpZ2h0d2VpZ2h0IHR1bm5lbHMgb3IgaW50ZXJmYWNlcy4gVGhpcyBmaWxlIGlzIHByb2JhYmx5IHRoZSBjZW50cmFsIGh1YiBmb3IgdGhhdC4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgcHVibGljLCBob3cgdGhleSBhcmUgdXNlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBhcmNoaXRlY3R1cmFsIHBhdHRlcm5zIGltcGxlbWVudGVkIGluIHRoaXMgZmlsZS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgZmVlbCBmb3IgdGhlIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5OCwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjUzLjQxODMxOTE4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0ODc2MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgW2EtekEtWl9dW2EtekEtWl8wLTldKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2x3dF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9sd3RfYnBmLmM9NTQ5PXN0YXRpYyBpbnQgaGFuZGxlX2dzb19lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGlwdjQsIGludCBlbmNhcF9sZW4pXFxuLS1cXG5uZXQvY29yZS9sd3RfYnBmLmMtNjA0LVxcbm5ldC9jb3JlL2x3dF9icGYuYzo2MDU6aW50IGJwZl9sd3RfcHVzaF9pcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcylcXG5uZXQvY29yZS9sd3RfYnBmLmMtNjA2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6NTMuNTIzMjAxODJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyOTczNzc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExpbnV4IExXVCBUdW5uZWxpbmcgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBob3cgbGlnaHR3ZWlnaHQgdHVubmVscyBhcmUgaGFuZGxlZCBoZXJlLiBJdCBzZWVtcyB0aGF0IGBicGZfbHd0X3B1c2hfaXBfZW5jYXBgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBCUEYtYmFzZWQgZW5jYXBzdWxhdGlvbi4gVGhhdCdzIGdvb2QgdG8ga25vdywgc29saWRpZmllcyB3aGF0IEkgZXhwZWN0ZWQuIEJ1dCB3YWl0LCBgbHd0dW5uZWxfeG1pdGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY2FsbHMgYGJwZl94bWl0YCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZW0uIFRoZSByZWFsIHdvcmsgaXMgbGlrZWx5IGRvbmUgZG93biBpbiBgYnBmX3htaXRgLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gc2VlIGhvdyBgbHd0dW5uZWxfeG1pdGAgc2V0cyB0aGUgc3RhZ2UuIExldCBtZSBxdWlja2x5IGp1bXAgaW50byBgbmV0L2NvcmUvbHd0dW5uZWwuY2AgYW5kIGRpZyBpbnRvIGhvdyBgbHd0dW5uZWxfeG1pdGAgdXRpbGl6ZXMgdGhlIEJQRiBmdW5jdGlvbmFsaXR5LiBMZXTigJlzIHNlZSB3aGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBkb3duLCBob3cgdGhlIGVuY2Fwc3VsYXRpb24gaXMgZGV0ZXJtaW5lZCwgYW5kIHdoYXQgZGVjaXNpb25zIGFyZSBiZWluZyBtYWRlLiBUaGlzIGxvb2tzIGxpa2UgdGhlIHJpZ2h0IHBhdGggdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYyMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjU2LjU1Mjk0MTkwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9sd3R1bm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3NTpcXHRpbnQgbHd0dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzNzY6XFx0e1xcbiAzNzc6XFx0XFx0Y29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3BzO1xcbiAzNzg6XFx0XFx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZTtcXG4gMzc5OlxcdFxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcXG4gMzgwOlxcdFxcdGludCByZXQ7XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0aWYgKGRldl94bWl0X3JlY3Vyc2lvbigpKSB7XFxuIDM4NTpcXHRcXHRcXHRuZXRfY3JpdF9yYXRlbGltaXRlZChcXFwiJXMoKTogcmVjdXJzaW9uIGxpbWl0IHJlYWNoZWQgb24gZGF0YXBhdGhcXFxcblxcXCIsXFxuIDM4NjpcXHRcXHRcXHRcXHRcXHQgICAgIF9fZnVuY19fKTtcXG4gMzg3OlxcdFxcdFxcdHJldCA9IC1FTkVURE9XTjtcXG4gMzg4OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMzg5OlxcdFxcdH1cXG4gMzkwOlxcdFxcbiAzOTE6XFx0XFx0ZHN0ID0gc2tiX2RzdChza2IpO1xcbiAzOTI6XFx0XFx0aWYgKCFkc3QpIHtcXG4gMzkzOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDM5NDpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjU2LjU1MzAwNzIyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzU2NDE1MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBMV1R1bm5lbCBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIGEgZ29vZCBmb2N1cyBmb3IgdGhpcyBwYXRjaC4gSSB0aGluayBgbHd0dW5uZWxfeG1pdGAgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBkZWFscyB3aXRoIGBicGZfeG1pdGAsIGJ1dCBgbHd0dW5uZWxfeG1pdGAgZmVlbHMgbW9yZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBhY3R1YWwgTFdUIGZ1bmN0aW9uYWxpdHkgYmVpbmcgbW9kaWZpZWQuIEkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IGBicGZfbHd0X3B1c2hfaXBfZW5jYXBgIHNlZW1zIGxpa2UgaXQgKmNvdWxkKiBiZSByZWxldmFudCwgYnV0IHRoZSBwYXRjaCBpc24ndCB0b3VjaGluZyBpdCBkaXJlY3RseSwgc28gdGhhdCdzIHByb2JhYmx5IGEgZGlzdHJhY3Rpb24uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUga2VybmVsIGNvbmZpZ3MuIEkga25vdyB3ZSBuZWVkIGBMV1RVTk5FTF9CUEZgLCBhbmQgSSBzZWUgdGhhdCBpdCBkZXBlbmRzIG9uIGBMV1RVTk5FTGAgYW5kIGBJTkVUYC4gSSdtIGNvbmZpZGVudCB0aGF0IGVuYWJsaW5nIGBMV1RVTk5FTF9CUEZgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbjsgaXQncyB0aGUgY29yZSBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWJvdXQuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRoYXQganVzdCBlbmFibGluZyBgTFdUVU5ORUxfQlBGYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyB0aGlzIHBhdGNoLlxuXG5Mb29raW5nIGNsb3NlciwgdGhlIHBhdGNoIGlzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgbHd0X2JwZi5jYC4gSXQncyBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBgc2tiX2hlYWRyb29tYCBhbmQgdGhlIEwyIGhlYWRlciB1c2luZyBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LVx1MDAzZWRldilgLiBUaGlzIGtpbmQgb2YgYnVmZmVyIHNpemUgaXNzdWUgc2NyZWFtcyBcImZ1enppbmcgdGFyZ2V0LlwiIFdlICpkZWZpbml0ZWx5KiBuZWVkIHRvIGV4cGxvcmUgdGhpcyBhcmVhIHRob3JvdWdobHkuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGlzIGBMV1RVTk5FTF9CUEZgLCBhbmQgbXkgcHJpbWFyeSBmb2N1cyBzeW1ib2wgd2lsbCBiZSBgbHd0dW5uZWxfeG1pdGAuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBsd3R1bm5lbF94bWl0YC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBzb21lIG92ZXJseSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLCBidXQgaXQncyBjYWxsZWQgZnJvbSBgaXBfZmluaXNoX291dHB1dDJgIGFuZCBgaXA2X2ZpbmlzaF9vdXRwdXQyYCB3aGVuIGBsd3R1bm5lbF94bWl0X3JlZGlyZWN0KGRzdC1cdTAwM2Vsd3RzdGF0ZSlgIGlzIHRydWUuIFRoYXQgc2VlbXMgc3BlY2lmaWMgZW5vdWdoIHRvIHRoZSBMV1QgY29udGV4dCwgYmVpbmcgYSBob3QtcGF0aCBzcGVjaWZpY2FsbHkgd2l0aGluIExXVC4gYGJwZl9sd3RfcHVzaF9pcF9lbmNhcGAgYW5kIGBicGZfeG1pdGAgZG9uJ3Qgc2VlbSBsaWtlIGdvb2QgY2FuZGlkYXRlcy4gQW5kIGBsd3R1bm5lbF9idWlsZF9zdGF0ZWAgYXBwZWFycyB0byBiZSBmb3Igc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxNDowMy45MDk0MjUyNTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzA2NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImx3dHVubmVsX2J1aWxkX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2x3dHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbHd0dW5uZWwuYz0xMTE9RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfZW5jYXBfZGVsX29wcyk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTItXFxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMTM6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTQtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVuY2FwLCB1bnNpZ25lZCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xNDktfVxcbm5ldC9jb3JlL2x3dHVubmVsLmM6MTUwOkVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX2J1aWxkX3N0YXRlKTtcXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE1MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTQ6MDMuOTY3MTM3NDI2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1ODg2ODI2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIEJQRiBMaWdodHdlaWdodCBUdW5uZWwgSGVhZHJvb20gTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBtb2RpZnlpbmcgYGx3dF9icGYuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBCUEYgbGlnaHR3ZWlnaHQgdHVubmVsIChMV1QpIHRyYW5zbWl0IHBhdGguIE15IGZvY3VzIHN5bWJvbHMgaGVyZSBhcmUgYGx3dHVubmVsX3htaXRgIGFuZCBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBsaWVzLCBhbmQgd2hlcmUgdGhpcyBjaGFuZ2UgaXMgaW1wYWN0aW5nLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyB3ZSBoYW5kbGUgaGVhZHJvb20gY2FsY3VsYXRpb24gYmVmb3JlIHRyYW5zbWl0dGluZyBwYWNrZXRzLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBkc3QtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgdG8gZGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBoZWFkcm9vbS4gIE5vdywgaXQncyBiZWluZyB1cGRhdGVkIHRvIHVzZSBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LVx1MDAzZWRldilgIGluc3RlYWQuIFRoaXMgaXMgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBkaWZmZXJlbmNlIGluIGhvdyB0aGUgTFdUIHR1bm5lbCBpcyBjYWxjdWxhdGluZyBhdmFpbGFibGUgc3BhY2UgZm9yIHBhY2tldCBoZWFkZXJzLCB3aGljaCBhZmZlY3RzIGFsbCBuZXR3b3JraW5nLlxuXG5JIHNlZSB0aGF0IHRoZSBwYXRjaCBhbHNvIGVsaW1pbmF0ZXMgdGhlIHVzZSBvZiBgSEhfREFUQV9BTElHTmAgd2hpY2ggSSB3YXMgYSBiaXQgY29uY2VybmVkIGFib3V0LiBUaGUgY29tbWVudHMgYXJlIGV4cGxhaW5pbmcgdGhhdCB0aGlzIGFsaWducyB3aXRoIGhvdyB0aGUgY2FjaGVkIGhlYWRlciBpcyBoYW5kbGVkIGluIGBuZWlnaF9oaF9vdXRwdXQoKWAsIHNwZWNpZmljYWxseSBob3cgaXQgY29waWVzIHRoZSBjYWNoZWQgaGVhZGVyIGluIGFsaWduZWQgY2h1bmtzLiBSZW1vdmluZyB0aGUgcm91bmRpbmcgbWFrZXMgdGhlIHByZS10cmFuc21pc3Npb24gaGVhZHJvb20gcmVzZXJ2YXRpb24gbWF0Y2ggdGhlIGFjdHVhbCBsYXlvdXQuIFRoaXMgZW5zdXJlcyBjb25zaXN0ZW5jeSBhbmQgcHJldmVudHMgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgYWxpZ25tZW50IGlzc3VlcyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbi5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgaGVhZHJvb20gaXMgYWxsb2NhdGVkIGJlZm9yZSBCUEYgTFdUIHBhY2tldCB0cmFuc21pc3Npb24uIEl0J3MgYWJvdXQgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnRpbmcgcG90ZW50aWFsIGlzc3VlcyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbi4gR2l2ZW4gdGhpcyBpcyBhIGNyaXRpY2FsIHBhcnQgb2YgbmV0d29ya2luZyBwZXJmb3JtYW5jZSwgdGhpcyBpcyBzb21ldGhpbmcgSSB3YW50IHRvIGZ1enogdGhvcm91Z2hseSBhcyBwYXJ0IG9mIG15IG5ldHdvcmtpbmcgdGVzdHMuIENvbmZpZ3VyYXRpb24gZm9yIHRoaXMgY2hhbmdlIGlzIGBMV1RVTk5FTF9CUEZgIHdoaWNoIG1ha2VzIHNlbnNlIGFuZCBJJ2xsIGNvbmZpcm0gdGhpcyBpcyBhY3RpdmUgaW4gbXkgdGVzdCBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gdXNlIHNldC1yZXN1bHRzIGFuZCB0aGVuIHJ1biBzb21lIGZ1enogdGVzdHMgYWdhaW5zdCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzM0LCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxNDoxMi41NTU4MjIxMzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk1MDkxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxXVFVOTkVMX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImx3dHVubmVsX3htaXRcIixcbiAgICBcImx3dHVubmVsX2J1aWxkX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBsb2dpYyBpbiB0aGUgQlBGIGxpZ2h0d2VpZ2h0IHR1bm5lbCAoTFdUKSB0cmFuc21pdCBwYXRoIChgYnBmX3htaXRgKS4gSXQgY2hhbmdlcyB0aGUgcmVxdWlyZWQgaGVhZHJvb20gY2FsY3VsYXRpb24gdG8gdXNlIGBMTF9SRVNFUlZFRF9TUEFDRWAgaW5zdGVhZCBvZiBgaGFyZF9oZWFkZXJfbGVuYCBhbmQgcmVtb3ZlcyBgSEhfREFUQV9BTElHTmAgcm91bmRpbmcgdG8gY29ycmVjdGx5IG1hdGNoIHRoZSByZXNlcnZhdGlvbiBtYWRlIGJlZm9yZSBMV1QgeG1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbiB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFdUVU5ORUxfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHd0dW5uZWxfeG1pdFwiLFxuICAgIFwibHd0dW5uZWxfYnVpbGRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gZXhwYW5zaW9uIGxvZ2ljIGluIHRoZSBCUEYgbGlnaHR3ZWlnaHQgdHVubmVsIChMV1QpIHRyYW5zbWl0IHBhdGggKGBicGZfeG1pdGApLiBJdCBjaGFuZ2VzIHRoZSByZXF1aXJlZCBoZWFkcm9vbSBjYWxjdWxhdGlvbiB0byB1c2UgYExMX1JFU0VSVkVEX1NQQUNFYCBpbnN0ZWFkIG9mIGBoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGBISF9EQVRBX0FMSUdOYCByb3VuZGluZyB0byBjb3JyZWN0bHkgbWF0Y2ggdGhlIHJlc2VydmF0aW9uIG1hZGUgYmVmb3JlIExXVCB4bWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTQ6MTIuNzU1MzM3MzA0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTExMDM1NzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjE0OjEyLjc1NTg3MzE4NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NTEwOTgxNTQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhlYWRyb29tIGNoZWNrIGluIGBicGZfeG1pdGAgZm9yIExXVCBCUEYgcHJvZ3JhbXMuIEl0IHJlcGxhY2VzIGB4bWl0X2NoZWNrX2hobGVuYCB3aXRoIGB4bWl0X2NoZWNrX2hlYWRyb29tYCwgZW5zdXJpbmcgdGhhdCB0aGUgcmVzZXJ2ZWQgaGVhZHJvb20gbWF0Y2hlcyBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LVxcdTAwM2VkZXYpYCByYXRoZXIgdGhhbiBqdXN0IHRoZSBleGFjdCBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCkuIFRoaXMgcHJldmVudHMgYSBzaXR1YXRpb24gd2hlcmUgYG5laWdoX2hoX291dHB1dCgpYCBtaWdodCBkcm9wIHRoZSBwYWNrZXQgYW5kIHRyaWdnZXIgYSBgV0FSTl9PTl9PTkNFYCBiZWNhdXNlIGl0IGNvcGllcyB0aGUgY2FjaGVkIGhhcmR3YXJlIGhlYWRlciBpbiBgSEhfREFUQV9NT0RgIGFsaWduZWQgY2h1bmtzLCB3aGljaCByZXF1aXJlcyBtb3JlIGhlYWRyb29tIHRoYW4ganVzdCBgaGhfbGVuYC5cXG5cXG5UaGlzIGlzIGEgZml4IGZvciBhIHBhY2tldCBkcm9wIC8gd2FybmluZyBpc3N1ZSByZWxhdGVkIHRvIGJ1ZmZlciBoZWFkcm9vbSBzaXppbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBoYXJkd2FyZS4gVGhlIGhlYWRyb29tIGV4cGFuZGVkIGJ5IGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSBgbmVpZ2hfaGhfb3V0cHV0KClgIGJlZm9yZSBgX19za2JfcHVzaCgpYCBpbmNsdWRlcyB0aGUgZXhhY3QgaGVhZGVyIGxlbmd0aCBpbiB0aGUgcGFja2V0IGRhdGEuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyByZWxhdGVkIHRvIGhlYWRyb29tIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhiNTNmYjRhMmNiMDJkMTU2MmY0ZDk2OTdjMzE2NzBmNGYyYTQ2MDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNToxMzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2x3dF9icGYuYyBiL25ldC9jb3JlL2x3dF9icGYuY1xuaW5kZXggNjUyOTUyZDQxNmYyMy4uZGE0OTM2NGVjNjNkZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2x3dF9icGYuY1xuKysrIGIvbmV0L2NvcmUvbHd0X2JwZi5jXG5AQCAtMTY3LDEwICsxNjcsMTAgQEAgc3RhdGljIGludCBicGZfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIGRzdC1cdTAwM2Vsd3RzdGF0ZS1cdTAwM2VvcmlnX291dHB1dChuZXQsIHNrLCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHhtaXRfY2hlY2tfaGhsZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhoX2xlbilcbitzdGF0aWMgaW50IHhtaXRfY2hlY2tfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhyb29tKVxuIHtcbi1cdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgaGhfbGVuKSB7XG4tXHRcdGludCBuaGVhZCA9IEhIX0RBVEFfQUxJR04oaGhfbGVuIC0gc2tiX2hlYWRyb29tKHNrYikpO1xuK1x0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBocm9vbSkge1xuK1x0XHRpbnQgbmhlYWQgPSBocm9vbSAtIHNrYl9oZWFkcm9vbShza2IpO1xuIFxuIFx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIG5oZWFkLCAwLCBHRlBfQVRPTUlDKSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0yODIsNyArMjgyLDcgQEAgc3RhdGljIGludCBicGZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0YnBmID0gYnBmX2x3dF9sd3R1bm5lbChkc3QtXHUwMDNlbHd0c3RhdGUpO1xuIFx0aWYgKGJwZi1cdTAwM2V4bWl0LnByb2cpIHtcbi1cdFx0aW50IGhoX2xlbiA9IGRzdC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuK1x0XHRpbnQgaHJvb20gPSBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXHUwMDNlZGV2KTtcbiBcdFx0X19iZTE2IHByb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIFx0XHRpbnQgcmV0O1xuIFxuQEAgLTI5OCw5ICsyOTgsMTIgQEAgc3RhdGljIGludCBicGZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuIFx0XHRcdC8qIElmIHRoZSBoZWFkZXIgd2FzIGV4cGFuZGVkLCBoZWFkcm9vbSBtaWdodCBiZSB0b29cbi1cdFx0XHQgKiBzbWFsbCBmb3IgTDIgaGVhZGVyIHRvIGNvbWUsIGV4cGFuZCBhcyBuZWVkZWQuXG4rXHRcdFx0ICogc21hbGwgZm9yIHRoZSBMMiBoZWFkZXIgdG8gY29tZSwgZXhwYW5kIGFzIG5lZWRlZC5cbitcdFx0XHQgKiBuZWlnaF9oaF9vdXRwdXQoKSBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgaW5cbitcdFx0XHQgKiBISF9EQVRBX01PRCBhbGlnbmVkIGNodW5rcywgc28gbWF0Y2ggdGhlIHJlc2VydmF0aW9uXG4rXHRcdFx0ICogbWFkZSBiZWZvcmUgTFdUIHhtaXQuXG4gXHRcdFx0ICovXG4tXHRcdFx0cmV0ID0geG1pdF9jaGVja19oaGxlbihza2IsIGhoX2xlbik7XG4rXHRcdFx0cmV0ID0geG1pdF9jaGVja19oZWFkcm9vbShza2IsIGhyb29tKTtcbiBcdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxNDoxMi43NTU4NzQxMzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk1MDc2MjcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBMV1QgQlBGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5ldC9jb3JlL2x3dF9icGYuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHRyYW5zbWl0IHBhdGguIEl0J3MgY2hhbmdpbmcgYHhtaXRfY2hlY2tfaGhsZW5gIHRvIGB4bWl0X2NoZWNrX2hlYWRyb29tYCwgYW5kIHRoZSBhcmd1bWVudCBpcyBzaGlmdGluZyBmcm9tIGBoaF9sZW5gIHRvIGBocm9vbWAuIEltbWVkaWF0ZWx5LCB0aGUgYGhyb29tYCBjYWxjdWxhdGlvbiBsb29rcyBkaWZmZXJlbnQ7IGl0J3MgdXNpbmcgYExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cdTAwM2VkZXYpYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IHB1bGxpbmcgYGRzdC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYC4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBmb2N1cyBvbi4gV2hhdCdzIGBMTF9SRVNFUlZFRF9TUEFDRWAgZG9pbmc/IFRoYXQncyBrZXkuXG5cblRoZSBjYWxjdWxhdGlvbiBpbnNpZGUgYHhtaXRfY2hlY2tfaGVhZHJvb21gIGhhcyBhbHNvIHNoaWZ0ZWQuIEl0J3Mgbm93IGBocm9vbSAtIHNrYl9oZWFkcm9vbShza2IpYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYEhIX0RBVEFfQUxJR05gIGRhbmNlLiBUaGF0IHNlZW1zIHNpbXBsZXIsIGJ1dCBsZXQncyBtYWtlIHN1cmUgaXQncyBjb3JyZWN0LlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgbWVtb3J5IHNhZmV0eS4gV2UncmUgZGVhbGluZyB3aXRoIGhlYWRyb29tLiBXZSBrbm93IHRoYXQgYHBza2JfZXhwYW5kX2hlYWRgIGNhbiBleHBhbmQgdGhlIGhlYWRyb29tIGlmIHRoZSBjdXJyZW50IGhlYWRyb29tIGlzIGluc3VmZmljaWVudC4gSWYgYHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBocm9vbWAsIGl0IGV4cGFuZHMgYnkgYG5oZWFkYC4gVGhhdCBleHBhbnNpb24gaXMgcHJvYmFibHkgYSBjb3B5LCBzbyB3aGF0J3Mgd3JpdHRlbiB0aGVyZT8gVGhlIGNvbW1lbnQgbWVudGlvbnMgYG5laWdoX2hoX291dHB1dGAgYW5kIGNhY2hpbmcuIEl0IGNvcGllcyB0aGUgY2FjaGVkIGhlYWRlciwgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcy4gVGhlIGdvYWwgaXMgdG8gbWF0Y2ggcmVzZXJ2YXRpb25zIG1hZGUgYmVmb3JlIExXVCB0cmFuc21pc3Npb24uXG5cbk9rYXksIGlzIHRoaXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgbWlnaHQgY3JlZXAgaW4/IElmIGBwc2tiX2V4cGFuZF9oZWFkYCBjcmVhdGVzIG5ldyBoZWFkcm9vbSwgaXMgaXQgdW5pbml0aWFsaXplZD8gWWVzLCBpdCBpcy4gQnV0LCBpdCdzICpoZWFkcm9vbSo7IHRoYXQgc3BhY2UgaXMgaW50ZW5kZWQgZm9yIGhlYWRlciB3cml0ZXMuIE5vdywgYG5laWdoX2hoX291dHB1dGAgd3JpdGVzIHRvIHRoZSBoZWFkcm9vbSwgd2hpY2ggbWVhbnMgaWYgdGhlIGhlYWRyb29tIGlzbid0IGxhcmdlIGVub3VnaCwgaXQgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLiBUaGFua2Z1bGx5LCBLQVNBTiB3b3VsZCBwcm9iYWJseSBjYXRjaCB0aGF0LlxuXG5CdXQsIGlzIHRoZXJlIGEgY2FzZSB3aGVyZSBpdCByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIHRob3VnaHQgaXMgdGhhdCBgbmVpZ2hfaGhfb3V0cHV0YCBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgYW5kIHRoZXJlZm9yZSByZWFkcyBmcm9tIHNvbWV3aGVyZSwgYnV0IGl0IHNob3VsZCBiZSB3cml0aW5nLCBub3QgcmVhZGluZyBmcm9tLCB0aGUgaGVhZHJvb20uXG5cblNvIHRoZSBtYWluIHBvaW50IGlzIHRoYXQgYHBza2JfZXhwYW5kX2hlYWRgICpkb2VzKiBsZWF2ZSBoZWFkcm9vbSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLiBXaGVuIGhlYWRlcnMgYXJlIGxhdGVyIHB1c2hlZCwgdGhhdCBtZW1vcnkgd2lsbCBnZXQgd3JpdHRlbiB0bywgc28gdGhlIHByb2JsZW0gbWlnaHQgbm90IGJlIHJlYWRpbmcsIGJ1dCB3cml0aW5nIGJleW9uZCBoYXJkX2hlYWRlcl9sZW4gaW4gdGhlIHdvcnN0IGNhc2UgaWYgYG5laWdoX2hoX291dHB1dGAgd3JpdGVzIHRvIGhlYWRyb29tLlxuXG5UaGUgb2xkIGNvZGUgdXNlZCBgSEhfREFUQV9BTElHTmAsIGJ1dCBub3cgd2UncmUgdXNpbmcgYGhyb29tYC4gVGhlIGNyaXRpY2FsIHRoaW5nIHRvIHVuZGVyc3RhbmQgaXMgaG93IGBMTF9SRVNFUlZFRF9TUEFDRWAgaXMgYmVpbmcgdXNlZCBhbmQgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlcy4gVGhlIG9yaWdpbmFsIHRob3VnaHQgd2FzIHRoYXQgYEhIX0RBVEFfQUxJR05gIHdhcyB0aGVyZSBmb3IgYSByZWFzb24gYW5kIHdlIGhhdmUgdG8gc2VlIGlmIHRoZSBuZXcgbG9naWMgaXMgb2theS4gYExMX1JFU0VSVkVEX1NQQUNFYCBpcyB1c3VhbGx5IGBBTElHTihkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuLCAxNikgKyAuLi5gLiBUaGlzIGlzIHRoZSBjcnV4LCB3aGF0IGRvZXMgdGhlIGFsaWdubWVudCBtZWFuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBMV1QgcGF0aD9cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjE0OjIxLjcwNjY0MDE1NloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMzQyMjk1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjgyPXN0cnVjdCBoaF9jYWNoZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMwMi0gKi9cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMwMzojZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGxlbikgXFxcXFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzA0LVxcdCgoKChobGVuKSArIFJFQURfT05DRSgoZGV2KS1cXHUwMDNlbmVlZGVkX2hlYWRyb29tKSkgXFxcXFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzA1LVxcdCAgXFx1MDAyNiB+KEhIX0RBVEFfTU9EIC0gMSkpICsgSEhfREFUQV9NT0QpXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozMDY6I2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMwNy1cXHRMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIChkZXYpLVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozMDg6I2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRV9FWFRSQShkZXYsZXh0cmEpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMwOS1cXHQoKCgoZGV2KS1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgUkVBRF9PTkNFKChkZXYpLVxcdTAwM2VuZWVkZWRfaGVhZHJvb20pICsgKGV4dHJhKSkgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxNDoyNC41NDAwNjkyMTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEyMDM3NTI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBXcml0ZSBpbiBOZXR3b3JrIFBhY2tldCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYExMX1JFU0VSVkVEX1NQQUNFYCBhbGlnbnMgd2l0aCBgSEhfREFUQV9NT0RgLiBUaGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgY29kZSBjYWxjdWxhdGVkIHRoZSByZXF1aXJlZCBoZWFkcm9vbSB3aXRoIHRoaXMgbGluZTogYGludCBuaGVhZCA9IEhIX0RBVEFfQUxJR04oaGhfbGVuIC0gc2tiX2hlYWRyb29tKHNrYikpO2AsIHdoZXJlIGBISF9EQVRBX0FMSUdOYCBhbHNvIGFsaWducyB0byBgSEhfREFUQV9NT0RgLiAgYGhoX2xlbmAgd2FzIGp1c3QgdGhlIGhhcmQgaGVhZGVyIGxlbmd0aCBmb3IgdGhlIGRldmljZS4gIElmIGBza2JfaGVhZHJvb20oc2tiKWAgKHRoZSBzcGFjZSBhbHJlYWR5IGF2YWlsYWJsZSkgd2FzIGxlc3MgdGhhbiB0aGlzIGBoaF9sZW5gLCBpdCB3b3VsZCAqaW5jcmVhc2UqIHRoZSBoZWFkcm9vbSBieSB0aGF0IGFsaWduZWQgYW1vdW50LiAgRWZmZWN0aXZlbHksIHRoZSBuZXcgaGVhZHJvb20gd291bGQgYmUgdGhlIG9yaWdpbmFsIGhlYWRyb29tIHBsdXMgdGhlIGFsaWduZWQgZGlmZmVyZW5jZS5cblxuQnV0IG5vdywgYG5laWdoX2hoX291dHB1dGAgKnJlcXVpcmVzKiBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LVx1MDAzZWRldilgLCBhbmQgdGhpcyBzcGFjZSBpbmNsdWRlcyB0aGUgbmVlZGVkIGhlYWRyb29tIGFuZCBpcyBhbGlnbmVkIHRvIGBISF9EQVRBX01PRGAuIEhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJZiB0aGUgYHNrYl9oZWFkcm9vbShza2IpYCB3YXMgYWxyZWFkeSAqbGFyZ2VyKiB0aGFuIGBoaF9sZW5gIGJ1dCBzdGlsbCAqc21hbGxlciogdGhhbiB0aGUgYExMX1JFU0VSVkVEX1NQQUNFYCwgdGhlIGNvZGUgKndvdWxkbid0KiBleHBhbmQgdGhlIGhlYWRyb29tIGF0IGFsbC4gVGhhdCdzIGEgcHJvYmxlbSwgYmVjYXVzZSBgbmVpZ2hfaGhfb3V0cHV0YCBpcyBnb2luZyB0byB3cml0ZSB0aGUgY2FjaGVkIGhlYWRlciB0byB0aGUgaGVhZHJvb20sIGJ1dCBpZiB0aGUgaGVhZHJvb20gaXMgaW5zdWZmaWNpZW50LCBpdCdsbCB3cml0ZSAqYmVmb3JlKiB0aGUgYHNrYi1cdTAwM2VoZWFkYCBwb2ludGVyLCBzaW5jZSBpdCBjb3BpZXMgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcy4gVGhpcyBtZWFucyBpdCdzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUg4oCTIGFuIHVuZGVyZmxvdyDigJMgYW5kIEtBU0FOIHNob3VsZCBjYXRjaCB0aGF0LlxuXG5XYWl0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmc7IGl0J3MgS0FTQU4gdGhhdCBtYXR0ZXJzLCBub3QgbmVjZXNzYXJpbHkgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/ICBPa2F5LCBJIHRoaW5rIEknbSBzb2xpZDogIGBuZWlnaF9oaF9vdXRwdXRgIHdyaXRlcyB0byB0aGUgaGVhZHJvb20uICBJZiB0aGUgaGVhZHJvb20gaXMgdG9vIHNtYWxsLCBpdCB3cml0ZXMgb3V0IG9mIGJvdW5kcyDigJMgYSBwcmUtYHNrYi1cdTAwM2VoZWFkYCB1bmRlcmZsb3cuIEtBU0FOIGNhdGNoZXMgYW55IGtpbmQgb2Ygb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJvdGggcmVhZCBhbmQgd3JpdGUuICBObywgdGhpcyBpc24ndCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGlzc3VlOyBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIG91dC1vZi1ib3VuZHMgd3JpdGUuXG5cblJpZ2h0LCB0aW1lIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGUgYG5laWdoX2hoX291dHB1dGAgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAxNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxNDozMS42NjA0NDgyNjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTQxNzYwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfb3V0cHV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25laWdoYm91ci5oPTQ5MD1zdGF0aWMgaW5saW5lIGludCBuZWlnaF9oaF9icmlkZ2Uoc3RydWN0IGhoX2NhY2hlICpoaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L25laWdoYm91ci5oLTUwNi1cXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaDo1MDc6c3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfb3V0cHV0KGNvbnN0IHN0cnVjdCBoaF9jYWNoZSAqaGgsIHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgtNTA4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTQ6MzQuMDc0NjMzNjUyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTg3OTU2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgbmVpZ2hfaGhfb3V0cHV0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgbmVpZ2hfaGhfb3V0cHV0YC4gQmFzZWQgb24gdGhlIGZpbGUgbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBvdXRwdXQgcmVsYXRlZCB0byB0aGUgbmVpZ2hib3Job29kIGhvdXNlaG9sZCBkYXRhLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgZm9ybWF0PyBJcyBpdCBhIHN0YW5kYXJkIENTViwgYSBKU09OIHN0cnVjdHVyZSwgbWF5YmUgZXZlbiBhIG1vcmUgc3BlY2lhbGl6ZWQgYmluYXJ5IGZvcm1hdD8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdHJ1Y3R1cmUgc28gSSBjYW4gZWZmaWNpZW50bHkgcGFyc2UgaXQgYW5kIGJlZ2luIHRoZSBhbmFseXNpcy4gQXJlIHRoZXJlIGhlYWRlcnM/IFdoYXQgYXJlIHRoZSBrZXkgdmFyaWFibGVzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBkYXRhIHF1YWxpdHkgaXNzdWVzIEkgc2hvdWxkIGFudGljaXBhdGUsIGxpa2UgbWlzc2luZyB2YWx1ZXMgb3Igb3V0bGllcnM/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRob3NlIHBvdGVudGlhbCBhcmVhcyB0byBiZSBjb2duaXphbnQgb2YgYXMgSSBhbSB3b3JraW5nIHdpdGggdGhlIGRhdGEuIERlcGVuZGluZyBvbiBteSB3b3JrLCBJIHdpbGwgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHF1YWxpdHkgb2YgdGhpcyBkYXRhIHRvIG1ha2UgYXBwcm9wcmlhdGUgaW50ZXJwcmV0YXRpb25zLiBJIHdpbGwgbGlrZWx5IG5lZWQgdG8gaW1wb3J0IHRoZSBwYWNrYWdlIHJlbGF0ZWQgdG8gbXkgZmllbGQgYXMgd2VsbC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHdoYXRldmVyIHF1ZXN0aW9ucyBJIGFtIHRyeWluZyB0byBhbnN3ZXIgcmVnYXJkaW5nIG5laWdoYm9yaG9vZCBlZmZlY3RzIG9uIGhvdXNlaG9sZCBiZWhhdmlvciwgZGVtb2dyYXBoaWNzLCBvciB3aGF0ZXZlciBvdGhlciBzcGVjaWZpYyBtZXRyaWMgSSdtIGxvb2tpbmcgYXQuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGlzIGRhdGFzZXQgaG9sZHMgdGhlIGFuc3dlcnMgSSdtIHNlYXJjaGluZyBmb3IuIExldCdzIHNlZSB3aGF0J3MgaW4gaGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NTExNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjE0OjQwLjU5MzQzMjU3N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc3ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25laWdoYm91ci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwNyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwNzpcXHRzdGF0aWMgaW5saW5lIGludCBuZWlnaF9oaF9vdXRwdXQoY29uc3Qgc3RydWN0IGhoX2NhY2hlICpoaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNTA4OlxcdHtcXG4gNTA5OlxcdFxcdHVuc2lnbmVkIGludCBoaF9hbGVuID0gMDtcXG4gNTEwOlxcdFxcdHVuc2lnbmVkIGludCBzZXE7XFxuIDUxMTpcXHRcXHR1bnNpZ25lZCBpbnQgaGhfbGVuO1xcbiA1MTI6XFx0XFxuIDUxMzpcXHRcXHRkbyB7XFxuIDUxNDpcXHRcXHRcXHRzZXEgPSByZWFkX3NlcWJlZ2luKFxcdTAwMjZoaC1cXHUwMDNlaGhfbG9jayk7XFxuIDUxNTpcXHRcXHRcXHRoaF9sZW4gPSBSRUFEX09OQ0UoaGgtXFx1MDAzZWhoX2xlbik7XFxuIDUxNjpcXHRcXHRcXHRpZiAobGlrZWx5KGhoX2xlbiBcXHUwMDNjPSBISF9EQVRBX01PRCkpIHtcXG4gNTE3OlxcdFxcdFxcdFxcdGhoX2FsZW4gPSBISF9EQVRBX01PRDtcXG4gNTE4OlxcdFxcbiA1MTk6XFx0XFx0XFx0XFx0Lyogc2tiX3B1c2goKSB3b3VsZCBwcm9jZWVkIHNpbGVudGx5IGlmIHdlIGhhdmUgcm9vbSBmb3JcXG4gNTIwOlxcdFxcdFxcdFxcdCAqIHRoZSB1bmFsaWduZWQgc2l6ZSBidXQgbm90IGZvciB0aGUgYWxpZ25lZCBzaXplOlxcbiA1MjE6XFx0XFx0XFx0XFx0ICogY2hlY2sgaGVhZHJvb20gZXhwbGljaXRseS5cXG4gNTIyOlxcdFxcdFxcdFxcdCAqL1xcbiA1MjM6XFx0XFx0XFx0XFx0aWYgKGxpa2VseShza2JfaGVhZHJvb20oc2tiKSBcXHUwMDNlPSBISF9EQVRBX01PRCkpIHtcXG4gNTI0OlxcdFxcdFxcdFxcdFxcdC8qIHRoaXMgaXMgaW5saW5lZCBieSBnY2MgKi9cXG4gNTI1OlxcdFxcdFxcdFxcdFxcdG1lbWNweShza2ItXFx1MDAzZWRhdGEgLSBISF9EQVRBX01PRCwgaGgtXFx1MDAzZWhoX2RhdGEsXFxuIDUyNjpcXHRcXHRcXHRcXHRcXHQgICAgICAgSEhfREFUQV9NT0QpO1xcbiA1Mjc6XFx0XFx0XFx0XFx0fVxcbiA1Mjg6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTI5OlxcdFxcdFxcdFxcdGhoX2FsZW4gPSBISF9EQVRBX0FMSUdOKGhoX2xlbik7XFxuIDUzMDpcXHRcXG4gNTMxOlxcdFxcdFxcdFxcdGlmIChsaWtlbHkoc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzZT0gaGhfYWxlbikpIHtcXG4gNTMyOlxcdFxcdFxcdFxcdFxcdG1lbWNweShza2ItXFx1MDAzZWRhdGEgLSBoaF9hbGVuLCBoaC1cXHUwMDNlaGhfZGF0YSxcXG4gNTMzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBoaF9hbGVuKTtcXG4gNTM0OlxcdFxcdFxcdFxcdH1cXG4gNTM1OlxcdFxcdFxcdH1cXG4gNTM2OlxcdFxcdH0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoXFx1MDAyNmhoLVxcdTAwM2VoaF9sb2NrLCBzZXEpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTQ6NDAuNTk1NjEyOTg3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMTAyODUyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIGBuZWlnaF9oaF9vdXRwdXRgIGFuZCBpdHMgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyBgbmVpZ2hfaGhfb3V0cHV0YCBpcyB1c2luZyBgc2tiX2hlYWRyb29tKHNrYilgIHRvIGNoZWNrIGZvciBzdWZmaWNpZW50IHNwYWNlIGluIHRoZSBTb2NrZXQgQnVmZmVyIChgc2tiYCkgdXNpbmcgYEhIX0RBVEFfTU9EYCBvciBgaGhfYWxlbmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIHRoaXMgaGVhZHJvb20gaXNuJ3QgYmlnIGVub3VnaCwgdGhlcmUncyBnb2luZyB0byBiZSBhIHNraXAgb2YgdGhlIGBtZW1jcHlgIGNhbGwuIE1ha2VzIHNlbnNlIGZyb20gYSBtZW1vcnkgYWxsb2NhdGlvbiBzdGFuZHBvaW50OyBubyBwb2ludCBjb3B5aW5nIGRhdGEgd2hlcmUgdGhlcmUgaXNuJ3QgYWN0dWFsbHkgc3BhY2UhXG5cbkJ1dC4uLiAqd2hhdCBoYXBwZW5zKiBpZiB0aGF0IGBtZW1jcHlgIGdldHMgc2tpcHBlZD8gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8ga25vdyB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZG8gaW5zdGVhZCEgSSdtIGdvaW5nIHRvIGhhdmUgdG8ga2VlcCByZWFkaW5nIGFuZCBzZWUgaG93IGl0IGhhbmRsZXMgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGhlYWRyb29tIGlzIGluc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTQ6NDcuNjA1OTAxNzM5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZWlnaGJvdXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MzcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1Mzc6XFx0XFxuIDUzODpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgaGhfYWxlbikpIHtcXG4gNTM5OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA1NDA6XFx0XFx0XFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XFxuIDU0MTpcXHRcXHR9XFxuIDU0MjpcXHRcXG4gNTQzOlxcdFxcdF9fc2tiX3B1c2goc2tiLCBoaF9sZW4pO1xcbiA1NDQ6XFx0XFx0cmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7XFxuIDU0NTpcXHR9XFxuIDU0NjpcXHRcXG4gNTQ3OlxcdHN0YXRpYyBpbmxpbmUgaW50IG5laWdoX291dHB1dChzdHJ1Y3QgbmVpZ2hib3VyICpuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA1NDg6XFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgc2tpcF9jYWNoZSlcXG4gNTQ5OlxcdHtcXG4gNTUwOlxcdFxcdGNvbnN0IHN0cnVjdCBoaF9jYWNoZSAqaGggPSBcXHUwMDI2bi1cXHUwMDNlaGg7XFxuIDU1MTpcXHRcXG4gNTUyOlxcdFxcdC8qIG4tXFx1MDAzZW51ZF9zdGF0ZSBhbmQgaGgtXFx1MDAzZWhoX2xlbiBjb3VsZCBiZSBjaGFuZ2VkIHVuZGVyIHVzLlxcbiA1NTM6XFx0XFx0ICogbmVpZ2hfaGhfb3V0cHV0KCkgaXMgdGFraW5nIGNhcmUgb2YgdGhlIHJhY2UgbGF0ZXIuXFxuIDU1NDpcXHRcXHQgKi9cXG4gNTU1OlxcdFxcdGlmICghc2tpcF9jYWNoZSBcXHUwMDI2XFx1MDAyNlxcbiA1NTY6XFx0XFx0ICAgIChSRUFEX09OQ0Uobi1cXHUwMDNlbnVkX3N0YXRlKSBcXHUwMDI2IE5VRF9DT05ORUNURUQpIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjE0OjQ3LjYwNjA0MjU2OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI1OTYxNTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgSGVhZHJvb20gTW9kaWZpY2F0aW9uIGluIGBuZXQvY29yZS9sd3RfYnBmLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgaGVhZHJvb20gY2FsY3VsYXRpb24gaW4gYG5ldC9jb3JlL2x3dF9icGYuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBjaGFuZ2luZyB0aGUgY2hlY2sgZnJvbSBgeG1pdF9jaGVja19oaGxlbmAgdG8gYHhtaXRfY2hlY2tfaGVhZHJvb21gLiAgUHJldmlvdXNseSwgYHhtaXRfY2hlY2tfaGhsZW5gIHdhcyBlbnN1cmluZyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCksIGJ1dCBub3cgdGhlIGNvZGUgaXMgYWxpZ25pbmcgdGhlIGhlYWRyb29tIHJlc2VydmF0aW9uIHdpdGggYExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cdTAwM2VkZXYpYC4gVGhhdCdzIHNtYXJ0OyBgTExfUkVTRVJWRURfU1BBQ0VgIGFscmVhZHkgYWNjb3VudHMgZm9yIHRoaW5ncyBsaWtlIGRldmljZS1zcGVjaWZpYyBvdmVyaGVhZCBhbmQgYWxpZ25tZW50IHJlcXVpcmVtZW50cywgcmF0aGVyIHRoYW4gYSBwb3RlbnRpYWxseSBzbWFsbGVyIGBoaF9sZW5gLlxuXG5UaGUgY29tbWVudCBpcyBrZXkgaGVyZS4gSXQgaGlnaGxpZ2h0cyB0aGF0IGBuZWlnaF9oaF9vdXRwdXRgIG1pZ2h0IHJlcXVpcmUgbW9yZSBoZWFkcm9vbSB0aGFuIGp1c3QgYGhoX2xlbmAgYmVjYXVzZSBpdCBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcy4gSSByZW1lbWJlciB0aGF0IGZ1bmN0aW9uOyBpdCB1c2VzIGBISF9EQVRBX01PRGAgKHR5cGljYWxseSAxNiBieXRlcykgYWxpZ25tZW50IHdoZW4gY29weWluZyB0aGUgaGVhZGVyLCBvciBhIGxhcmdlciBgSEhfREFUQV9BTElHTihoaF9sZW4pYCBpZiB0aGUgaGVhZGVyIGlzIGxhcmdlci4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gdGhlIHByZXZpb3VzbHkgcmVzZXJ2ZWQgaGVhZHJvb20gaXMgKmp1c3QqIGVub3VnaCBmb3IgYGhoX2xlbmAsIGJ1dCBub3QgZm9yIHRoZSBhbGlnbmVkIGNvcHkuIGBuZWlnaF9oaF9vdXRwdXRgIHRoZW4gZmFpbHMgdGhlIGNoZWNrIChgc2tiX2hlYWRyb29tKHNrYikgXHUwMDNlPSBoaF9hbGVuYCkgYW5kIGRyb3BzIHRoZSBwYWNrZXQgd2l0aCBhIHdhcm5pbmcgb3IsIGluIHNvbWUgY2FzZXMsIG1pZ2h0IGNhdXNlIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgaWYgdGhhdCBjaGVjayB3YXNuJ3QgdGhlcmUuXG5cbk5vdywgd2l0aCB0aGlzIGNoYW5nZSwgYHhtaXRfY2hlY2tfaGVhZHJvb21gIGVuc3VyZXMgdGhlcmUgaXMgc3VmZmljaWVudCBoZWFkcm9vbSB0byBhY2NvdW50IGZvciB0aGlzIGxhcmdlciBjb3B5LiBgTExfUkVTRVJWRURfU1BBQ0VgIGluY2x1ZGVzIGBuZWVkZWRfaGVhZHJvb21gLCBzbyB0aGUgbmV3IGNoZWNrIHNob3VsZCBoYXZlIGVub3VnaCBoZWFkcm9vbSB0byBkZWFsIHdpdGggdGhlIGFsaWdubWVudCBuZWVkcy5cblxuTXkgbWFpbiBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgbWVtb3J5IHNhZmV0eS4gRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igd3JpdGVzPyAgTGV0J3Mgc2VlOiBgcHNrYl9leHBhbmRfaGVhZGAgKmFsbG9jYXRlcyogbW9yZSBtZW1vcnksIGJ1dCBpdCBkb2Vzbid0IGluaXRpYWxpemUgaXQuIFRoYXQncyBzdGFuZGFyZCBiZWhhdmlvci4gSG93ZXZlciwgYG5laWdoX2hoX291dHB1dGAgKndyaXRlcyogaW50byB0aGUgaGVhZHJvb20uIENydWNpYWxseSwgaXQgY29waWVzIGRhdGEgZnJvbSBgaGgtXHUwMDNlaGhfZGF0YWAuICBUaGF0J3MgKmluaXRpYWxpemVkKiBkYXRhISBUaGUgbGVuZ3RoIGNvcGllZCBpcyBgaGhfYWxlbmAuXG5cblRoZW4sIGBfX3NrYl9wdXNoKHNrYiwgaGhfbGVuKWAgYWRqdXN0cyB0aGUgcGFja2V0J3MgZGF0YSBwb2ludGVyIGFuZCBsZW5ndGgsIGluY2x1ZGluZyBvbmx5IHRoZSAqYWN0dWFsKiBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCkuIEl0IGRvZXMgKm5vdCogaW5jbHVkZSB0aGUgZXh0cmEgYnl0ZXMgY29waWVkIHRvIGFjaGlldmUgYWxpZ25tZW50OyB0aG9zZSByZW1haW4gaW4gdGhlIGhlYWRyb29tLCBiZWZvcmUgdGhlIGFjdHVhbCBkYXRhLiBUaHVzLCB0aGUgZXh0cmEgaGVhZHJvb20gYnl0ZXMgKHVwIHRvIGBoaF9hbGVuYCkgYXJlICpub3QqIHBhcnQgb2YgdGhlIHBhY2tldCBkYXRhLCBhbmQgdGhlIGRhdGEgYmVpbmcgc2VudCB0byB0aGUgTklDICppcyogaW5pdGlhbGl6ZWQuXG5cblNvLCB0aGVyZSdzIG5vIHdheSB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBiZWNhdXNlIHRoZSBzb3VyY2UgZGF0YSAoYGhoLVx1MDAzZWhoX2RhdGFgKSBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIHdlIHB1c2ggdGhlIHZhbGlkIHBhcnQsIGFuZCB0aGUgcmVzdCBpcyBoZWFkcm9vbS4gSXQncyByZWFsbHkganVzdCBmaXhpbmcgYSBidWcgd2hlcmUgd2UgZGlkbid0IGhhdmUgZW5vdWdoIGhlYWRyb29tIHRvIGhhbmRsZSB0aGUgYWxpZ25tZW50IGluIHRoZSBleGlzdGluZyBjb2RlLiBJZiB0aGUgZXhpc3RpbmcgY29kZSBkaWRuJ3QgaGF2ZSB0aGUgY2hlY2sgYHNrYl9oZWFkcm9vbShza2IpIFx1MDAzZT0gaGhfYWxlbmAsIHRoZXJlIGNvdWxkIGhhdmUgYmVlbiBvdXQgb2YgYm91bmRzIHdyaXRlLiBMdWNraWx5LCB0aGF0IGNoZWNrIGlzIGFscmVhZHkgcHJlc2VudCwgc28gdGhlIGJ1ZyBtYW5pZmVzdGVkIGFzIGEgcGFja2V0IGRyb3AsIGFuZCB0aGlzIHBhdGNoIGZpeGVzIHRoYXQuIEtBU0FOIHdvdWxkIGVhc2lseSBjYXRjaCBhbnkgcmVhbCBvdXQtb2YtYm91bmRzIGlzc3VlcywgYnV0IHRoYXQncyBub3Qgd2hhdCB0aGlzIGlzLlxuXG5TbywgdGhlIHBhdGNoIGlzIGZpeGluZyBhIGhlYWRyb29tIHNpemluZyBwcm9ibGVtLCBwcmV2ZW50aW5nIHBhY2tldCBkcm9wcyBkdWUgdG8gaW5zdWZmaWNpZW50IGhlYWRyb29tLiBJdCAqZG9lc24ndCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdl4oCZcmUgbm90IGFkZGluZyBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGhlYWRyb29tIGl0c2VsZiBpcyBjb3JyZWN0bHkgd3JpdHRlbiBiZWZvcmUgdGhlIHBhY2tldCBkYXRhIGlzIGRlZmluZWQuIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgS0FTQU4gdG9vbGluZyB3b3VsZCBmbGFnIGFueXRoaW5nIGluIHRoZSBleGlzdGluZyBjb2RlIG9yIG5ldyBjb2RlIHRoYXQgY2F1c2VzIGFuIG91dCBvZiBib3VuZHMgd3JpdGUgdG8gYW4gYWxsb2NhdGVkIGFyZWEsIGJ1dCB0aGVyZSBpcyBub3RoaW5nIHByZXNlbnQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM4OCwiT3V0cHV0VG9rZW5zIjoyNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTU6MTcuODY1NjYxMTE5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gY2hlY2sgaW4gYGJwZl94bWl0YCBmb3IgTFdUIEJQRiBwcm9ncmFtcy4gSXQgcmVwbGFjZXMgYHhtaXRfY2hlY2tfaGhsZW5gIHdpdGggYHhtaXRfY2hlY2tfaGVhZHJvb21gLCBlbnN1cmluZyB0aGF0IHRoZSByZXNlcnZlZCBoZWFkcm9vbSBtYXRjaGVzIGBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXFx1MDAzZWRldilgIHJhdGhlciB0aGFuIGp1c3QgdGhlIGV4YWN0IGhhcmR3YXJlIGhlYWRlciBsZW5ndGggKGBoaF9sZW5gKS4gVGhpcyBwcmV2ZW50cyBhIHNpdHVhdGlvbiB3aGVyZSBgbmVpZ2hfaGhfb3V0cHV0KClgIG1pZ2h0IGRyb3AgdGhlIHBhY2tldCBhbmQgdHJpZ2dlciBhIGBXQVJOX09OX09OQ0VgIGJlY2F1c2UgaXQgY29waWVzIHRoZSBjYWNoZWQgaGFyZHdhcmUgaGVhZGVyIGluIGBISF9EQVRBX01PRGAgYWxpZ25lZCBjaHVua3MsIHdoaWNoIHJlcXVpcmVzIG1vcmUgaGVhZHJvb20gdGhhbiBqdXN0IGBoaF9sZW5gLlxcblxcblRoaXMgaXMgYSBmaXggZm9yIGEgcGFja2V0IGRyb3AgLyB3YXJuaW5nIGlzc3VlIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tIHNpemluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGhhcmR3YXJlLiBUaGUgaGVhZHJvb20gZXhwYW5kZWQgYnkgYHBza2JfZXhwYW5kX2hlYWRgIGlzIHN1YnNlcXVlbnRseSB3cml0dGVuIHRvIGJ5IGBuZWlnaF9oaF9vdXRwdXQoKWAgYmVmb3JlIGBfX3NrYl9wdXNoKClgIGluY2x1ZGVzIHRoZSBleGFjdCBoZWFkZXIgbGVuZ3RoIGluIHRoZSBwYWNrZXQgZGF0YS4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlbGF0ZWQgdG8gaGVhZHJvb20gd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhlYWRyb29tIGNoZWNrIGluIGBicGZfeG1pdGAgZm9yIExXVCBCUEYgcHJvZ3JhbXMuIEl0IHJlcGxhY2VzIGB4bWl0X2NoZWNrX2hobGVuYCB3aXRoIGB4bWl0X2NoZWNrX2hlYWRyb29tYCwgZW5zdXJpbmcgdGhhdCB0aGUgcmVzZXJ2ZWQgaGVhZHJvb20gbWF0Y2hlcyBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LVxcdTAwM2VkZXYpYCByYXRoZXIgdGhhbiBqdXN0IHRoZSBleGFjdCBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCkuIFRoaXMgcHJldmVudHMgYSBzaXR1YXRpb24gd2hlcmUgYG5laWdoX2hoX291dHB1dCgpYCBtaWdodCBkcm9wIHRoZSBwYWNrZXQgYW5kIHRyaWdnZXIgYSBgV0FSTl9PTl9PTkNFYCBiZWNhdXNlIGl0IGNvcGllcyB0aGUgY2FjaGVkIGhhcmR3YXJlIGhlYWRlciBpbiBgSEhfREFUQV9NT0RgIGFsaWduZWQgY2h1bmtzLCB3aGljaCByZXF1aXJlcyBtb3JlIGhlYWRyb29tIHRoYW4ganVzdCBgaGhfbGVuYC5cXG5cXG5UaGlzIGlzIGEgZml4IGZvciBhIHBhY2tldCBkcm9wIC8gd2FybmluZyBpc3N1ZSByZWxhdGVkIHRvIGJ1ZmZlciBoZWFkcm9vbSBzaXppbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBoYXJkd2FyZS4gVGhlIGhlYWRyb29tIGV4cGFuZGVkIGJ5IGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSBgbmVpZ2hfaGhfb3V0cHV0KClgIGJlZm9yZSBgX19za2JfcHVzaCgpYCBpbmNsdWRlcyB0aGUgZXhhY3QgaGVhZGVyIGxlbmd0aCBpbiB0aGUgcGFja2V0IGRhdGEuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyByZWxhdGVkIHRvIGhlYWRyb29tIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowqdc54[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 04:56:13 +0000 UTC FinishedAt: 2026-08-11 05:15:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LWTUNNEL_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LWTUNNEL_BPF" ], "series_id": "7f0ed3b7-2701-448a-b26d-e7611e2c40bc" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "lwtunnel_xmit", "lwtunnel_build_state" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xXVFVOTkVMX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2x3dHVubmVsX3htaXQmIzM0OywKICAgICYjMzQ7bHd0dW5uZWxfYnVpbGRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gY2hlY2sgaW4gYGJwZl94bWl0YCBmb3IgTFdUIEJQRiBwcm9ncmFtcy4gSXQgcmVwbGFjZXMgYHhtaXRfY2hlY2tfaGhsZW5gIHdpdGggYHhtaXRfY2hlY2tfaGVhZHJvb21gLCBlbnN1cmluZyB0aGF0IHRoZSByZXNlcnZlZCBoZWFkcm9vbSBtYXRjaGVzIGBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXHUwMDNlZGV2KWAgcmF0aGVyIHRoYW4ganVzdCB0aGUgZXhhY3QgaGFyZHdhcmUgaGVhZGVyIGxlbmd0aCAoYGhoX2xlbmApLiBUaGlzIHByZXZlbnRzIGEgc2l0dWF0aW9uIHdoZXJlIGBuZWlnaF9oaF9vdXRwdXQoKWAgbWlnaHQgZHJvcCB0aGUgcGFja2V0IGFuZCB0cmlnZ2VyIGEgYFdBUk5fT05fT05DRWAgYmVjYXVzZSBpdCBjb3BpZXMgdGhlIGNhY2hlZCBoYXJkd2FyZSBoZWFkZXIgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcywgd2hpY2ggcmVxdWlyZXMgbW9yZSBoZWFkcm9vbSB0aGFuIGp1c3QgYGhoX2xlbmAuXG5cblRoaXMgaXMgYSBmaXggZm9yIGEgcGFja2V0IGRyb3AgLyB3YXJuaW5nIGlzc3VlIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tIHNpemluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGhhcmR3YXJlLiBUaGUgaGVhZHJvb20gZXhwYW5kZWQgYnkgYHBza2JfZXhwYW5kX2hlYWRgIGlzIHN1YnNlcXVlbnRseSB3cml0dGVuIHRvIGJ5IGBuZWlnaF9oaF9vdXRwdXQoKWAgYmVmb3JlIGBfX3NrYl9wdXNoKClgIGluY2x1ZGVzIHRoZSBleGFjdCBoZWFkZXIgbGVuZ3RoIGluIHRoZSBwYWNrZXQgZGF0YS4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlbGF0ZWQgdG8gaGVhZHJvb20gd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoZWFkcm9vbSBleHBhbnNpb24gbG9naWMgaW4gdGhlIEJQRiBsaWdodHdlaWdodCB0dW5uZWwgKExXVCkgdHJhbnNtaXQgcGF0aCAoYGJwZl94bWl0YCkuIEl0IGNoYW5nZXMgdGhlIHJlcXVpcmVkIGhlYWRyb29tIGNhbGN1bGF0aW9uIHRvIHVzZSBgTExfUkVTRVJWRURfU1BBQ0VgIGluc3RlYWQgb2YgYGhhcmRfaGVhZGVyX2xlbmAgYW5kIHJlbW92ZXMgYEhIX0RBVEFfQUxJR05gIHJvdW5kaW5nIHRvIGNvcnJlY3RseSBtYXRjaCB0aGUgcmVzZXJ2YXRpb24gbWFkZSBiZWZvcmUgTFdUIHhtaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb24gdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGI1M2ZiNGEyY2IwMmQxNTYyZjRkOTY5N2MzMTY3MGY0ZjJhNDYwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA1OjEzOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2x3dF9icGYuYyBiL25ldC9jb3JlL2x3dF9icGYuY1xuaW5kZXggNjUyOTUyZDQxNmYyMy4uZGE0OTM2NGVjNjNkZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2x3dF9icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbHd0X2JwZi5jXG5AQCAtMTY3LDEwICYjNDM7MTY3LDEwIEBAIHN0YXRpYyBpbnQgYnBmX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBkc3QtXHUwMDNlbHd0c3RhdGUtXHUwMDNlb3JpZ19vdXRwdXQobmV0LCBzaywgc2tiKTtcbiB9XG4gXG4tc3RhdGljIGludCB4bWl0X2NoZWNrX2hobGVuKHN0cnVjdCBza19idWZmICpza2IsIGludCBoaF9sZW4pXG4mIzQzO3N0YXRpYyBpbnQgeG1pdF9jaGVja19oZWFkcm9vbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaHJvb20pXG4ge1xuLVx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBoaF9sZW4pIHtcbi1cdFx0aW50IG5oZWFkID0gSEhfREFUQV9BTElHTihoaF9sZW4gLSBza2JfaGVhZHJvb20oc2tiKSk7XG4mIzQzO1x0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBocm9vbSkge1xuJiM0MztcdFx0aW50IG5oZWFkID0gaHJvb20gLSBza2JfaGVhZHJvb20oc2tiKTtcbiBcbiBcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuaGVhZCwgMCwgR0ZQX0FUT01JQykpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjgyLDcgJiM0MzsyODIsNyBAQCBzdGF0aWMgaW50IGJwZl94bWl0KHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRicGYgPSBicGZfbHd0X2x3dHVubmVsKGRzdC1cdTAwM2Vsd3RzdGF0ZSk7XG4gXHRpZiAoYnBmLVx1MDAzZXhtaXQucHJvZykge1xuLVx0XHRpbnQgaGhfbGVuID0gZHN0LVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4mIzQzO1x0XHRpbnQgaHJvb20gPSBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXHUwMDNlZGV2KTtcbiBcdFx0X19iZTE2IHByb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIFx0XHRpbnQgcmV0O1xuIFxuQEAgLTI5OCw5ICYjNDM7Mjk4LDEyIEBAIHN0YXRpYyBpbnQgYnBmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbiBcdFx0XHQvKiBJZiB0aGUgaGVhZGVyIHdhcyBleHBhbmRlZCwgaGVhZHJvb20gbWlnaHQgYmUgdG9vXG4tXHRcdFx0ICogc21hbGwgZm9yIEwyIGhlYWRlciB0byBjb21lLCBleHBhbmQgYXMgbmVlZGVkLlxuJiM0MztcdFx0XHQgKiBzbWFsbCBmb3IgdGhlIEwyIGhlYWRlciB0byBjb21lLCBleHBhbmQgYXMgbmVlZGVkLlxuJiM0MztcdFx0XHQgKiBuZWlnaF9oaF9vdXRwdXQoKSBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgaW5cbiYjNDM7XHRcdFx0ICogSEhfREFUQV9NT0QgYWxpZ25lZCBjaHVua3MsIHNvIG1hdGNoIHRoZSByZXNlcnZhdGlvblxuJiM0MztcdFx0XHQgKiBtYWRlIGJlZm9yZSBMV1QgeG1pdC5cbiBcdFx0XHQgKi9cbi1cdFx0XHRyZXQgPSB4bWl0X2NoZWNrX2hobGVuKHNrYiwgaGhfbGVuKTtcbiYjNDM7XHRcdFx0cmV0ID0geG1pdF9jaGVja19oZWFkcm9vbShza2IsIGhyb29tKTtcbiBcdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xXVFVOTkVMX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2x3dHVubmVsX3htaXQmIzM0OywKICAgICYjMzQ7bHd0dW5uZWxfYnVpbGRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBsb2dpYyBpbiB0aGUgQlBGIGxpZ2h0d2VpZ2h0IHR1bm5lbCAoTFdUKSB0cmFuc21pdCBwYXRoIChgYnBmX3htaXRgKS4gSXQgY2hhbmdlcyB0aGUgcmVxdWlyZWQgaGVhZHJvb20gY2FsY3VsYXRpb24gdG8gdXNlIGBMTF9SRVNFUlZFRF9TUEFDRWAgaW5zdGVhZCBvZiBgaGFyZF9oZWFkZXJfbGVuYCBhbmQgcmVtb3ZlcyBgSEhfREFUQV9BTElHTmAgcm91bmRpbmcgdG8gY29ycmVjdGx5IG1hdGNoIHRoZSByZXNlcnZhdGlvbiBtYWRlIGJlZm9yZSBMV1QgeG1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbiB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YjUzZmI0YTJjYjAyZDE1NjJmNGQ5Njk3YzMxNjcwZjRmMmE0NjAxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDU6MTM6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9sd3RfYnBmLmMgYi9uZXQvY29yZS9sd3RfYnBmLmMKaW5kZXggNjUyOTUyZDQxNmYyMy4uZGE0OTM2NGVjNjNkZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbHd0X2JwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2x3dF9icGYuYwpAQCAtMTY3LDEwICYjNDM7MTY3LDEwIEBAIHN0YXRpYyBpbnQgYnBmX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gZHN0LSZndDtsd3RzdGF0ZS0mZ3Q7b3JpZ19vdXRwdXQobmV0LCBzaywgc2tiKTsKIH0KIAotc3RhdGljIGludCB4bWl0X2NoZWNrX2hobGVuKHN0cnVjdCBza19idWZmICpza2IsIGludCBoaF9sZW4pCiYjNDM7c3RhdGljIGludCB4bWl0X2NoZWNrX2hlYWRyb29tKHN0cnVjdCBza19idWZmICpza2IsIGludCBocm9vbSkKIHsKLQlpZiAoc2tiX2hlYWRyb29tKHNrYikgJmx0OyBoaF9sZW4pIHsKLQkJaW50IG5oZWFkID0gSEhfREFUQV9BTElHTihoaF9sZW4gLSBza2JfaGVhZHJvb20oc2tiKSk7CiYjNDM7CWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IGhyb29tKSB7CiYjNDM7CQlpbnQgbmhlYWQgPSBocm9vbSAtIHNrYl9oZWFkcm9vbShza2IpOwogCiAJCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgbmhlYWQsIDAsIEdGUF9BVE9NSUMpKQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0yODIsNyAmIzQzOzI4Miw3IEBAIHN0YXRpYyBpbnQgYnBmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCWJwZiA9IGJwZl9sd3RfbHd0dW5uZWwoZHN0LSZndDtsd3RzdGF0ZSk7CiAJaWYgKGJwZi0mZ3Q7eG1pdC5wcm9nKSB7Ci0JCWludCBoaF9sZW4gPSBkc3QtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwkJaW50IGhyb29tID0gTExfUkVTRVJWRURfU1BBQ0UoZHN0LSZndDtkZXYpOwogCQlfX2JlMTYgcHJvdG8gPSBza2ItJmd0O3Byb3RvY29sOwogCQlpbnQgcmV0OwogCkBAIC0yOTgsOSAmIzQzOzI5OCwxMiBAQCBzdGF0aWMgaW50IGJwZl94bWl0KHN0cnVjdCBza19idWZmICpza2IpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQkvKiBJZiB0aGUgaGVhZGVyIHdhcyBleHBhbmRlZCwgaGVhZHJvb20gbWlnaHQgYmUgdG9vCi0JCQkgKiBzbWFsbCBmb3IgTDIgaGVhZGVyIHRvIGNvbWUsIGV4cGFuZCBhcyBuZWVkZWQuCiYjNDM7CQkJICogc21hbGwgZm9yIHRoZSBMMiBoZWFkZXIgdG8gY29tZSwgZXhwYW5kIGFzIG5lZWRlZC4KJiM0MzsJCQkgKiBuZWlnaF9oaF9vdXRwdXQoKSBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgaW4KJiM0MzsJCQkgKiBISF9EQVRBX01PRCBhbGlnbmVkIGNodW5rcywgc28gbWF0Y2ggdGhlIHJlc2VydmF0aW9uCiYjNDM7CQkJICogbWFkZSBiZWZvcmUgTFdUIHhtaXQuCiAJCQkgKi8KLQkJCXJldCA9IHhtaXRfY2hlY2tfaGhsZW4oc2tiLCBoaF9sZW4pOwomIzQzOwkJCXJldCA9IHhtaXRfY2hlY2tfaGVhZHJvb20oc2tiLCBocm9vbSk7CiAJCQlpZiAodW5saWtlbHkocmV0KSkKIAkJCQlyZXR1cm4gcmV0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBQYWNrZXQgVHJhbnNtaXNzaW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvbHd0X2JwZi5jYCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHBhY2tldCB0cmFuc21pc3Npb24uIEl0IHNlZW1zIHRoZXkmIzM5O3JlIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IHRoZSBoZWFkcm9vbSBpcyBtYW5hZ2VkLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYHhtaXRfY2hlY2tfaGhsZW5gIHdpdGggYHhtaXRfY2hlY2tfaGVhZHJvb21gLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IHNoaWZ0IGluIHRoZSBsb2dpYy4KClRoZSBjYWxjdWxhdGlvbiBvZiBgbmhlYWRgIGlzIG5vdyB1c2luZyBgaHJvb21gIChsaWtlbHkgdGhlIGhlYWRyb29tIGF2YWlsYWJsZSkgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoLiBGdXJ0aGVybW9yZSwgaW4gYGJwZl94bWl0YCwgaW5zdGVhZCBvZiBmZXRjaGluZyBgaGhfbGVuYCBmcm9tIHRoZSBkZXZpY2UmIzM5O3MgaGFyZCBoZWFkZXIgbGVuZ3RoLCBpdCYjMzk7cyBub3cgcmV0cmlldmluZyBgaHJvb21gIHVzaW5nIGBMTF9SRVNFUlZFRF9TUEFDRWAuIFRoaXMgaXMgZGlyZWN0bHkgcGFzc2VkIGludG8gYHhtaXRfY2hlY2tfaGVhZHJvb21gIGZvciBhbmFseXNpcy4KCk15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZvY3VzZWQgb24gYWRkcmVzc2luZyBhbiBpc3N1ZSBpbiBoZWFkcm9vbSBleHBhbnNpb24gd2l0aGluIGBicGZfeG1pdGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyByZXNvbHZlcyBhIHN1YnRsZSBidWcgcmVsYXRlZCB0byBob3cgdGhlIEJQRiBMV1QgaW50ZXJhY3RzIHdpdGggZGV2aWNlcyBoYXZpbmcgdmFyeWluZyBoZWFkcm9vbSByZXF1aXJlbWVudHMgb3IgcGVyaGFwcyBkZWFsaW5nIHdpdGggYWxpZ25tZW50IGlzc3VlcyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbi4KCkJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciBgbmV0L2NvcmUvbHd0X2JwZi5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGVuYWJsZWQgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyB3aWxsIGdpdmUgbWUgZnVydGhlciBjb250ZXh0IGZvciBhbmFseXppbmcgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsd3RfYnBmXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0zOD1vYmotJChDT05GSUdfTFdUVU5ORUwpICYjNDM7PSBsd3R1bm5lbC5vXG5uZXQvY29yZS9NYWtlZmlsZTozOTpvYmotJChDT05GSUdfTFdUVU5ORUxfQlBGKSAmIzQzOz0gbHd0X2JwZi5vXG5uZXQvY29yZS9NYWtlZmlsZS00MC1vYmotJChDT05GSUdfRFNUX0NBQ0hFKSAmIzQzOz0gZHN0X2NhY2hlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDg5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGhlIHRhc2sgYXQgaGFuZCByZXZvbHZlcyBhcm91bmQgYENPTkZJR19MV1RVTk5FTF9CUEZgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBkaWcgZGVlcGVyIGludG8gaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIHNldHRpbmdzIGFyZSBpbnRlcnR3aW5lZCB3aXRoIHRoaXMgb25lLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbDsgaXQgaGVscHMgbWUgYW50aWNpcGF0ZSBwb3RlbnRpYWwgY29uZmxpY3RzLCB1bmRlcnN0YW5kIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSwgYW5kIHBpbnBvaW50IHRoZSBiZXN0IGFwcHJvYWNoIHRvIGVuc3VyZSBzZWFtbGVzcyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHN0YXJ0IG1hcHBpbmcgdGhlbSBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExXVFVOTkVMX0JQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDQ1PWNvbmZpZyBMV1RVTk5FTFxuLS1cbm5ldC9LY29uZmlnLTQ1Mi1cbm5ldC9LY29uZmlnOjQ1Mzpjb25maWcgTFdUVU5ORUxfQlBGXG5uZXQvS2NvbmZpZy00NTQtXHRib29sIFwmIzM0O0V4ZWN1dGUgQlBGIHByb2dyYW0gYXMgcm91dGUgbmV4dGhvcCBhY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzMzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgYExXVFVOTkVMX0JQRmAgRGV0YWlscyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IGRvd24gdG8gaXQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciwgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIGBMV1RVTk5FTF9CUEZgIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gbm90IGxvb2tpbmcgZm9yIGEgc3VyZmFjZS1sZXZlbCBleHBsYW5hdGlvbjsgSSB3YW50IHRoZSBuaXR0eS1ncml0dHksIHRoZSBmdWxsLWJsb3duIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0IHRoaXMgdGVybSBlbmNvbXBhc3Nlcy4gSSBhbHJlYWR5IGhhdmUgYSBkZWNlbnQgZ3Jhc3AsIGJ1dCBhIGNvbmNpc2UgZGVmaW5pdGlvbiB3aWxsIGhlbHAgbWUgY29uZmlybSBteSBtZW50YWwgbW9kZWwuIFdoYXQgYXJlIHRoZSBrZXkgZWxlbWVudHM/IFdoYXQgYXJlIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcz8gTGV0JiMzOTtzIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0NTpcdGNvbmZpZyBMV1RVTk5FTFxuIDQ0NjpcdFx0Ym9vbCBcJiMzNDtOZXR3b3JrIGxpZ2h0IHdlaWdodCB0dW5uZWxzXCYjMzQ7XG4gNDQ3Olx0XHRoZWxwXG4gNDQ4Olx0XHQgIFRoaXMgZmVhdHVyZSBwcm92aWRlcyBhbiBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IGxpZ2h0IHdlaWdodFxuIDQ0OTpcdFx0ICB0dW5uZWxzIGxpa2UgbXBscy4gVGhlcmUgaXMgbm8gbmV0ZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBhIGxpZ2h0XG4gNDUwOlx0XHQgIHdlaWdodCB0dW5uZWwgZW5kcG9pbnQuIFR1bm5lbCBlbmNhcHN1bGF0aW9uIHBhcmFtZXRlcnMgYXJlIHN0b3JlZFxuIDQ1MTpcdFx0ICB3aXRoIGxpZ2h0IHdlaWdodCB0dW5uZWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGZpYiByb3V0ZXMuXG4gNDUyOlx0XG4gNDUzOlx0Y29uZmlnIExXVFVOTkVMX0JQRlxuIDQ1NDpcdFx0Ym9vbCBcJiMzNDtFeGVjdXRlIEJQRiBwcm9ncmFtIGFzIHJvdXRlIG5leHRob3AgYWN0aW9uXCYjMzQ7XG4gNDU1Olx0XHRkZXBlbmRzIG9uIExXVFVOTkVMIFx1MDAyNlx1MDAyNiBJTkVUXG4gNDU2Olx0XHRkZWZhdWx0IHkgaWYgTFdUVU5ORUw9eVxuIDQ1NzpcdFx0aGVscFxuIDQ1ODpcdFx0ICBBbGxvd3MgdG8gcnVuIEJQRiBwcm9ncmFtcyBhcyBhIG5leHRob3AgYWN0aW9uIGZvbGxvd2luZyBhIHJvdXRlXG4gNDU5Olx0XHQgIGxvb2t1cCBmb3IgaW5jb21pbmcgYW5kIG91dGdvaW5nIHBhY2tldHMuXG4gNDYwOlx0XG4gNDYxOlx0Y29uZmlnIERTVF9DQUNIRVxuIDQ2MjpcdFx0Ym9vbFxuIDQ2MzpcdFx0ZGVmYXVsdCBuXG4gNDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkFuYWx5emluZyB0aGUgTFdUVU5ORUwgYW5kIEJQRiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYExXVFVOTkVMX0JQRmAgdGhpbmcgd29ya3MuIFJpZ2h0IG9mZiB0aGUgYmF0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBidWlsZHMgdXBvbiBib3RoIGBMV1RVTk5FTGAgYW5kIGBJTkVUYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgZXh0ZW5kaW5nIHRoZSBMV1RVTk5FTCBmdW5jdGlvbmFsaXR5IHdpdGggQlBGLCBhbmQgaXQgbmVlZHMgdGhlIHN0YW5kYXJkIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUsIHRvby4gVGhlIHJlYWwga2V5IGhlcmUgc2VlbXMgdG8gYmUgYGJwZl94bWl0YC4KCk5vdywgdGhlIGRvY3VtZW50YXRpb24gc2F5cyBgYnBmX3htaXRgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgQlBGIExXVCB4bWl0LiBUaGF0JiMzOTtzIGdvb2QsIHRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBzdXNwaWNpb25zLiBJdCYjMzk7cyB0aGUgaG9vayB0aGF0IGJyaWRnZXMgdGhlIExXVFVOTkVMIGluZnJhc3RydWN0dXJlIGFuZCB0aGUgQlBGIGxvZ2ljLiBCdXQuLi4gaXMgaXQgc3RhdGljPyBVbmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGF0IGZ1bmN0aW9uIGNhbGwgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIGhlcmUuIElmIGl0JiMzOTtzIHN0YXRpYywgdGhhdCBpbXBsaWVzIGEgdGlnaHRlciBlbmNhcHN1bGF0aW9uIGFuZCBwb3RlbnRpYWxseSBsZXNzIGltcGFjdCBvbiB0aGUgd2lkZXIga2VybmVsLiBJZiBub3QsIHdlIGhhdmUgYSBiaWdnZXIgcGljdHVyZSB0byBjb25zaWRlci4gU28sIGxldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX3htaXRgIHRvIGRldGVybWluZSBpdHMgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbHd0X2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dF9icGYuYz0xODI9c3RhdGljIGludCBicGZfbHd0X3htaXRfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2x3dF9icGYuYy0yNzctXG5uZXQvY29yZS9sd3RfYnBmLmM6Mjc4OnN0YXRpYyBpbnQgYnBmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL2x3dF9icGYuYy0yNzkte1xuLS1cbm5ldC9jb3JlL2x3dF9icGYuYz01MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgYnBmX2VuY2FwX29wcyA9IHtcbi0tXG5uZXQvY29yZS9sd3RfYnBmLmMtNTI5LVx0Lm91dHB1dFx0XHQ9IGJwZl9vdXRwdXQsXG5uZXQvY29yZS9sd3RfYnBmLmM6NTMwOlx0LnhtaXRcdFx0PSBicGZfeG1pdCxcbm5ldC9jb3JlL2x3dF9icGYuYy01MzEtXHQuZmlsbF9lbmNhcFx0PSBicGZfZmlsbF9lbmNhcF9pbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipEaWdnaW5nIGludG8gdGhlIGVCUEYgRW5jYXBzdWxhdGlvbiBUcmFuc21pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJwZl94bWl0YCwgd2hpY2ggaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsIGZvciBhIHRyYW5zbWlzc2lvbiBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgYmVpbmcgYXNzaWduZWQgdG8gYGJwZl9lbmNhcF9vcHMueG1pdGAuIFRoYXQmIzM5O3MgaG93IGl0JiMzOTtzIGdldHRpbmcgaG9va2VkIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gTm93IHRoZSBxdWVzdGlvbiBpcywgKndoZXJlKiBpcyBgYnBmX3htaXRgIGJlaW5nIHVzZWQ/IElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB3aGljaCBjYWxscyBpdD8gSSBuZWVkIHRvIHRyYWNrIHRoaXMgZG93bi4KClJpZ2h0LCBJIHJlbWVtYmVyIG5vdywgYGJwZl9lbmNhcF9vcHNgIGlzIHJlZ2lzdGVyZWQsIHRocm91Z2ggYGx3dHVubmVsX2VuY2FwX2FkZF9vcHMoJmFtcDticGZfZW5jYXBfb3BzLCBMV1RVTk5FTF9FTkNBUF9CUEYpYCB3aXRoaW4gYGJwZl9sd3RfaW5pdGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGhvdyB0aGUgZUJQRiBlbmNhcHN1bGF0aW9uIG9wZXJhdGlvbnMgYXJlIGhvb2tlZCBpbnRvIHRoZSBMaW51eCBMV1RVTk5FTCBzdWJzeXN0ZW0uIE9rYXksIHRoZSBwaWVjZXMgYXJlIGZhbGxpbmcgaW50byBwbGFjZS4gVGhlIHhtaXQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdmlhIHRoZSBgbHd0dW5uZWxfeG1pdGAgZnVuY3Rpb24uIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgZGVjZW50IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYWluIG9mIGNhbGxzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2x3dHVubmVsX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dHVubmVsLmM9MzczPUVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX291dHB1dCk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTM3NC1cbm5ldC9jb3JlL2x3dHVubmVsLmM6Mzc1OmludCBsd3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9sd3R1bm5lbC5jLTM3Ni17XG4tLVxubmV0L2NvcmUvbHd0dW5uZWwuYy00MjgtfVxubmV0L2NvcmUvbHd0dW5uZWwuYzo0Mjk6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfeG1pdCk7XG5uZXQvY29yZS9sd3R1bm5lbC5jLTQzMC1cbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xOTk9c3RhdGljIGludCBpcF9maW5pc2hfb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0yMjEtXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoyMjI6XHRpZiAobHd0dW5uZWxfeG1pdF9yZWRpcmVjdChkc3QtXHUwMDNlbHd0c3RhdGUpKSB7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoyMjM6XHRcdGludCByZXMgPSBsd3R1bm5lbF94bWl0KHNrYik7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0yMjQtXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTYwPXN0YXRpYyBpbnQgaXA2X2ZpbmlzaF9vdXRwdXQyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMTMtXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTE0Olx0aWYgKGx3dHVubmVsX3htaXRfcmVkaXJlY3QoZHN0LVx1MDAzZWx3dHN0YXRlKSkge1xubmV0L2lwdjYvaXA2X291dHB1dC5jOjExNTpcdFx0aW50IHJlcyA9IGx3dHVubmVsX3htaXQoc2tiKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDMKCQkJCQkJCW91dHB1dDogNjgKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMV1R1bm5lbCBUcmFuc21pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgTGlnaHR3ZWlnaHQgVHVubmVsIChMV1QpIHRyYW5zbWlzc2lvbiBwYXRoLiBUaGUga2V5IHNlZW1zIHRvIGJlIGBsd3R1bm5lbF94bWl0YCDigJMgdGhhdCYjMzk7cyB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IHVsdGltYXRlbHkgY2FsbHMgdGhlIGB4bWl0YCBvcGVyYXRpb24uIFRoaW5raW5nIGFib3V0IHRoZSBjYWxsIGNoYWluLCBpdCBhcHBlYXJzIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGBpcF9maW5pc2hfb3V0cHV0MmAgYW5kIGBpcDZfZmluaXNoX291dHB1dDJgLiBUaGF0IG1ha2VzIGBsd3R1bm5lbF94bWl0YCBhIHJlYWxseSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgdHJhY2luZyB0aGUgZmxvdy4gTm93LCB3aGVyZSBlbHNlIG1pZ2h0IHRoaW5ncyBjb21lIGludG8gcGxheT8gTXkgZ3V0IHRlbGxzIG1lIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgZnVuY3Rpb25zIGxpa2UgYGJwZl9sd3RfcHVzaF9pcF9lbmNhcGAgb3Igc2ltaWxhciBCUEYtcmVsYXRlZCBlbmNhcCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2x3dF9icGYuY2AuIFRpbWUgdG8gdmVyaWZ5IGJ5IHRha2luZyBhIGxvb2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aXzAtOV0qIFthLXpBLVpfXVthLXpBLVpfMC05XSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9sd3RfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbHd0X2JwZi5jPTU0OT1zdGF0aWMgaW50IGhhbmRsZV9nc29fZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBpcHY0LCBpbnQgZW5jYXBfbGVuKVxuLS1cbm5ldC9jb3JlL2x3dF9icGYuYy02MDQtXG5uZXQvY29yZS9sd3RfYnBmLmM6NjA1OmludCBicGZfbHd0X3B1c2hfaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaGRyLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MpXG5uZXQvY29yZS9sd3RfYnBmLmMtNjA2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBicGZfbHd0X3B1c2hfaXBfZW5jYXBgIEZ1bmN0aW9uIGFuZCBJdHMgQ29udGV4dCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBicGZfbHd0X3B1c2hfaXBfZW5jYXBgIGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gVGhlIG1vZGlmaWNhdGlvbiB0aGF0IHRyaWdnZXJlZCBteSBjdXJpb3NpdHkgaXMgYWN0dWFsbHkgd2l0aGluIGBicGZfeG1pdGAgYW5kIGB4bWl0X2NoZWNrX2hlYWRyb29tYC4gU2luY2UgYGJwZl94bWl0YCBpcyBjYWxsZWQgYnkgYGx3dHVubmVsX3htaXRgLCBmb2N1c2luZyBvbiBgbHd0dW5uZWxfeG1pdGAgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIGFwcHJvYWNoIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZSYjMzk7cyBpbXBsaWNhdGlvbnMuIFRoYXQgZnVuY3Rpb24gd2lsbCBsaWtlbHkgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByaXBwbGUgZWZmZWN0cy4KCk5vdywgbGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gYG5ldC9jb3JlL2x3dF9icGYuY2AuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSByZWxhdGVkIG1vZGlmaWNhdGlvbnMgb3IgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gQSBxdWljayBjaGVjayB3aWxsIGhlbHAga2VlcCBteSBhbmFseXNpcyBjb21wcmVoZW5zaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9sd3RfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk4CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBuZXQvY29yZS9sd3RfYnBmLmNgKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnbG9iYWwgZnVuY3Rpb24gbGFuZHNjYXBlIHdpdGhpbiB0aGUgbGlnaHR3ZWlnaHQgQlBGIChlQlBGKSBmdW5jdGlvbmFsaXR5LiBNeSBndXQgdGVsbHMgbWUgdGhhdCBgbmV0L2NvcmUvbHd0X2JwZi5jYCBpcyB0aGUgcHJpbWUgbG9jYXRpb24gdG8gc3RhcnQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIHNjb3BlIHdpdGhpbiB0aGUgbmV0d29yayBjb3JlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgY29yZSBmdW5jdGlvbnMgaXQgZXhwb3Nlcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZW50cnkgcG9pbnRzLCB0aGUgaG9va3MsIHRoZSBjb250cm9sIHBvaW50cyDigJMgdGhlIHRoaW5ncyB0aGF0ICpvdGhlciogbmV0d29yayBzdWJzeXN0ZW1zIHdvdWxkIGNhbGwgaW50byBvciB0aGF0IG9yY2hlc3RyYXRlIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gbGlnaHR3ZWlnaHQgdHVubmVscyBvciBpbnRlcmZhY2VzLiBUaGlzIGZpbGUgaXMgcHJvYmFibHkgdGhlIGNlbnRyYWwgaHViIGZvciB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgcHVibGljLCBob3cgdGhleSBhcmUgdXNlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBhcmNoaXRlY3R1cmFsIHBhdHRlcm5zIGltcGxlbWVudGVkIGluIHRoaXMgZmlsZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgW2EtekEtWl9dW2EtekEtWl8wLTldKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9sd3RfYnBmLmM9NTQ5PXN0YXRpYyBpbnQgaGFuZGxlX2dzb19lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGlwdjQsIGludCBlbmNhcF9sZW4pXG4tLVxubmV0L2NvcmUvbHd0X2JwZi5jLTYwNC1cbm5ldC9jb3JlL2x3dF9icGYuYzo2MDU6aW50IGJwZl9sd3RfcHVzaF9pcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcylcbm5ldC9jb3JlL2x3dF9icGYuYy02MDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjIwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMaW51eCBMV1QgVHVubmVsaW5nIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgbGlnaHR3ZWlnaHQgdHVubmVscyBhcmUgaGFuZGxlZCBoZXJlLiBJdCBzZWVtcyB0aGF0IGBicGZfbHd0X3B1c2hfaXBfZW5jYXBgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBCUEYtYmFzZWQgZW5jYXBzdWxhdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIHNvbGlkaWZpZXMgd2hhdCBJIGV4cGVjdGVkLiBCdXQgd2FpdCwgYGx3dHVubmVsX3htaXRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGNhbGxzIGBicGZfeG1pdGAsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVtLiBUaGUgcmVhbCB3b3JrIGlzIGxpa2VseSBkb25lIGRvd24gaW4gYGJwZl94bWl0YCwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBzZWUgaG93IGBsd3R1bm5lbF94bWl0YCBzZXRzIHRoZSBzdGFnZS4gTGV0IG1lIHF1aWNrbHkganVtcCBpbnRvIGBuZXQvY29yZS9sd3R1bm5lbC5jYCBhbmQgZGlnIGludG8gaG93IGBsd3R1bm5lbF94bWl0YCB1dGlsaXplcyB0aGUgQlBGIGZ1bmN0aW9uYWxpdHkuIExldOKAmXMgc2VlIHdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIGRvd24sIGhvdyB0aGUgZW5jYXBzdWxhdGlvbiBpcyBkZXRlcm1pbmVkLCBhbmQgd2hhdCBkZWNpc2lvbnMgYXJlIGJlaW5nIG1hZGUuIFRoaXMgbG9va3MgbGlrZSB0aGUgcmlnaHQgcGF0aCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3NTpcdGludCBsd3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IpXG4gMzc2Olx0e1xuIDM3NzpcdFx0Y29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3BzO1xuIDM3ODpcdFx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZTtcbiAzNzk6XHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcbiAzODA6XHRcdGludCByZXQ7XG4gMzgxOlx0XG4gMzgyOlx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gMzgzOlx0XG4gMzg0Olx0XHRpZiAoZGV2X3htaXRfcmVjdXJzaW9uKCkpIHtcbiAzODU6XHRcdFx0bmV0X2NyaXRfcmF0ZWxpbWl0ZWQoXCYjMzQ7JXMoKTogcmVjdXJzaW9uIGxpbWl0IHJlYWNoZWQgb24gZGF0YXBhdGhcXG5cJiMzNDssXG4gMzg2Olx0XHRcdFx0XHQgICAgIF9fZnVuY19fKTtcbiAzODc6XHRcdFx0cmV0ID0gLUVORVRET1dOO1xuIDM4ODpcdFx0XHRnb3RvIGRyb3A7XG4gMzg5Olx0XHR9XG4gMzkwOlx0XG4gMzkxOlx0XHRkc3QgPSBza2JfZHN0KHNrYik7XG4gMzkyOlx0XHRpZiAoIWRzdCkge1xuIDM5MzpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDM5NDpcdFx0XHRnb3RvIGRyb3A7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIExXVHVubmVsIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiBhIGdvb2QgZm9jdXMgZm9yIHRoaXMgcGF0Y2guIEkgdGhpbmsgYGx3dHVubmVsX3htaXRgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCBgYnBmX3htaXRgLCBidXQgYGx3dHVubmVsX3htaXRgIGZlZWxzIG1vcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgYWN0dWFsIExXVCBmdW5jdGlvbmFsaXR5IGJlaW5nIG1vZGlmaWVkLiBJIHNob3VsZCBhbHNvIG5vdGUgdGhhdCBgYnBmX2x3dF9wdXNoX2lwX2VuY2FwYCBzZWVtcyBsaWtlIGl0ICpjb3VsZCogYmUgcmVsZXZhbnQsIGJ1dCB0aGUgcGF0Y2ggaXNuJiMzOTt0IHRvdWNoaW5nIGl0IGRpcmVjdGx5LCBzbyB0aGF0JiMzOTtzIHByb2JhYmx5IGEgZGlzdHJhY3Rpb24uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBrZXJuZWwgY29uZmlncy4gSSBrbm93IHdlIG5lZWQgYExXVFVOTkVMX0JQRmAsIGFuZCBJIHNlZSB0aGF0IGl0IGRlcGVuZHMgb24gYExXVFVOTkVMYCBhbmQgYElORVRgLiBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGVuYWJsaW5nIGBMV1RVTk5FTF9CUEZgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbjsgaXQmIzM5O3MgdGhlIGNvcmUgb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGFib3V0LiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdGhhdCBqdXN0IGVuYWJsaW5nIGBMV1RVTk5FTF9CUEZgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoaXMgcGF0Y2guCgpMb29raW5nIGNsb3NlciwgdGhlIHBhdGNoIGlzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgbHd0X2JwZi5jYC4gSXQmIzM5O3MgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gYHNrYl9oZWFkcm9vbWAgYW5kIHRoZSBMMiBoZWFkZXIgdXNpbmcgYExMX1JFU0VSVkVEX1NQQUNFKGRzdC0mZ3Q7ZGV2KWAuIFRoaXMga2luZCBvZiBidWZmZXIgc2l6ZSBpc3N1ZSBzY3JlYW1zICYjMzQ7ZnV6emluZyB0YXJnZXQuJiMzNDsgV2UgKmRlZmluaXRlbHkqIG5lZWQgdG8gZXhwbG9yZSB0aGlzIGFyZWEgdGhvcm91Z2hseS4KClNvLCB0byBzdW1tYXJpemUsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGlzIGBMV1RVTk5FTF9CUEZgLCBhbmQgbXkgcHJpbWFyeSBmb2N1cyBzeW1ib2wgd2lsbCBiZSBgbHd0dW5uZWxfeG1pdGAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gYGx3dHVubmVsX3htaXRgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBzb21lIG92ZXJseSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlwX2ZpbmlzaF9vdXRwdXQyYCBhbmQgYGlwNl9maW5pc2hfb3V0cHV0MmAgd2hlbiBgbHd0dW5uZWxfeG1pdF9yZWRpcmVjdChkc3QtJmd0O2x3dHN0YXRlKWAgaXMgdHJ1ZS4gVGhhdCBzZWVtcyBzcGVjaWZpYyBlbm91Z2ggdG8gdGhlIExXVCBjb250ZXh0LCBiZWluZyBhIGhvdC1wYXRoIHNwZWNpZmljYWxseSB3aXRoaW4gTFdULiBgYnBmX2x3dF9wdXNoX2lwX2VuY2FwYCBhbmQgYGJwZl94bWl0YCBkb24mIzM5O3Qgc2VlbSBsaWtlIGdvb2QgY2FuZGlkYXRlcy4gQW5kIGBsd3R1bm5lbF9idWlsZF9zdGF0ZWAgYXBwZWFycyB0byBiZSBmb3Igc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2x3dHVubmVsX2J1aWxkX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbHd0dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9sd3R1bm5lbC5jPTExMT1FWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9lbmNhcF9kZWxfb3BzKTtcbm5ldC9jb3JlL2x3dHVubmVsLmMtMTEyLVxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMTM6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXG5uZXQvY29yZS9sd3R1bm5lbC5jLTExNC1cdFx0XHQgc3RydWN0IG5sYXR0ciAqZW5jYXAsIHVuc2lnbmVkIGludCBmYW1pbHksXG4tLVxubmV0L2NvcmUvbHd0dW5uZWwuYy0xNDktfVxubmV0L2NvcmUvbHd0dW5uZWwuYzoxNTA6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfYnVpbGRfc3RhdGUpO1xubmV0L2NvcmUvbHd0dW5uZWwuYy0xNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMzQKCQkJCQkJCW91dHB1dDogMTQ4CgkJCQkJCQl0aG91Z2h0czogNjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBCUEYgTGlnaHR3ZWlnaHQgVHVubmVsIEhlYWRyb29tIE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggbW9kaWZ5aW5nIGBsd3RfYnBmLmNgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgQlBGIGxpZ2h0d2VpZ2h0IHR1bm5lbCAoTFdUKSB0cmFuc21pdCBwYXRoLiBNeSBmb2N1cyBzeW1ib2xzIGhlcmUgYXJlIGBsd3R1bm5lbF94bWl0YCBhbmQgYGx3dHVubmVsX2J1aWxkX3N0YXRlYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGxpZXMsIGFuZCB3aGVyZSB0aGlzIGNoYW5nZSBpcyBpbXBhY3RpbmcuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyB3ZSBoYW5kbGUgaGVhZHJvb20gY2FsY3VsYXRpb24gYmVmb3JlIHRyYW5zbWl0dGluZyBwYWNrZXRzLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBkc3QtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuYCB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIGhlYWRyb29tLiAgTm93LCBpdCYjMzk7cyBiZWluZyB1cGRhdGVkIHRvIHVzZSBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LSZndDtkZXYpYCBpbnN0ZWFkLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgZGlmZmVyZW5jZSBpbiBob3cgdGhlIExXVCB0dW5uZWwgaXMgY2FsY3VsYXRpbmcgYXZhaWxhYmxlIHNwYWNlIGZvciBwYWNrZXQgaGVhZGVycywgd2hpY2ggYWZmZWN0cyBhbGwgbmV0d29ya2luZy4KCkkgc2VlIHRoYXQgdGhlIHBhdGNoIGFsc28gZWxpbWluYXRlcyB0aGUgdXNlIG9mIGBISF9EQVRBX0FMSUdOYCB3aGljaCBJIHdhcyBhIGJpdCBjb25jZXJuZWQgYWJvdXQuIFRoZSBjb21tZW50cyBhcmUgZXhwbGFpbmluZyB0aGF0IHRoaXMgYWxpZ25zIHdpdGggaG93IHRoZSBjYWNoZWQgaGVhZGVyIGlzIGhhbmRsZWQgaW4gYG5laWdoX2hoX291dHB1dCgpYCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgaW4gYWxpZ25lZCBjaHVua3MuIFJlbW92aW5nIHRoZSByb3VuZGluZyBtYWtlcyB0aGUgcHJlLXRyYW5zbWlzc2lvbiBoZWFkcm9vbSByZXNlcnZhdGlvbiBtYXRjaCB0aGUgYWN0dWFsIGxheW91dC4gVGhpcyBlbnN1cmVzIGNvbnNpc3RlbmN5IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBhbGlnbm1lbnQgaXNzdWVzIGR1cmluZyBwYWNrZXQgdHJhbnNtaXNzaW9uLgoKRXNzZW50aWFsbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgaGVhZHJvb20gaXMgYWxsb2NhdGVkIGJlZm9yZSBCUEYgTFdUIHBhY2tldCB0cmFuc21pc3Npb24uIEl0JiMzOTtzIGFib3V0IGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24uIEdpdmVuIHRoaXMgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIG5ldHdvcmtpbmcgcGVyZm9ybWFuY2UsIHRoaXMgaXMgc29tZXRoaW5nIEkgd2FudCB0byBmdXp6IHRob3JvdWdobHkgYXMgcGFydCBvZiBteSBuZXR3b3JraW5nIHRlc3RzLiBDb25maWd1cmF0aW9uIGZvciB0aGlzIGNoYW5nZSBpcyBgTFdUVU5ORUxfQlBGYCB3aGljaCBtYWtlcyBzZW5zZSBhbmQgSSYjMzk7bGwgY29uZmlybSB0aGlzIGlzIGFjdGl2ZSBpbiBteSB0ZXN0IGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHNldC1yZXN1bHRzIGFuZCB0aGVuIHJ1biBzb21lIGZ1enogdGVzdHMgYWdhaW5zdCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFdUVU5ORUxfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHd0dW5uZWxfeG1pdCYjMzQ7LAogICAgJiMzNDtsd3R1bm5lbF9idWlsZF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gZXhwYW5zaW9uIGxvZ2ljIGluIHRoZSBCUEYgbGlnaHR3ZWlnaHQgdHVubmVsIChMV1QpIHRyYW5zbWl0IHBhdGggKGBicGZfeG1pdGApLiBJdCBjaGFuZ2VzIHRoZSByZXF1aXJlZCBoZWFkcm9vbSBjYWxjdWxhdGlvbiB0byB1c2UgYExMX1JFU0VSVkVEX1NQQUNFYCBpbnN0ZWFkIG9mIGBoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGBISF9EQVRBX0FMSUdOYCByb3VuZGluZyB0byBjb3JyZWN0bHkgbWF0Y2ggdGhlIHJlc2VydmF0aW9uIG1hZGUgYmVmb3JlIExXVCB4bWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFdUVU5ORUxfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHd0dW5uZWxfeG1pdCYjMzQ7LAogICAgJiMzNDtsd3R1bm5lbF9idWlsZF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gZXhwYW5zaW9uIGxvZ2ljIGluIHRoZSBCUEYgbGlnaHR3ZWlnaHQgdHVubmVsIChMV1QpIHRyYW5zbWl0IHBhdGggKGBicGZfeG1pdGApLiBJdCBjaGFuZ2VzIHRoZSByZXF1aXJlZCBoZWFkcm9vbSBjYWxjdWxhdGlvbiB0byB1c2UgYExMX1JFU0VSVkVEX1NQQUNFYCBpbnN0ZWFkIG9mIGBoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGBISF9EQVRBX0FMSUdOYCByb3VuZGluZyB0byBjb3JyZWN0bHkgbWF0Y2ggdGhlIHJlc2VydmF0aW9uIG1hZGUgYmVmb3JlIExXVCB4bWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gY2hlY2sgaW4gYGJwZl94bWl0YCBmb3IgTFdUIEJQRiBwcm9ncmFtcy4gSXQgcmVwbGFjZXMgYHhtaXRfY2hlY2tfaGhsZW5gIHdpdGggYHhtaXRfY2hlY2tfaGVhZHJvb21gLCBlbnN1cmluZyB0aGF0IHRoZSByZXNlcnZlZCBoZWFkcm9vbSBtYXRjaGVzIGBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXHUwMDNlZGV2KWAgcmF0aGVyIHRoYW4ganVzdCB0aGUgZXhhY3QgaGFyZHdhcmUgaGVhZGVyIGxlbmd0aCAoYGhoX2xlbmApLiBUaGlzIHByZXZlbnRzIGEgc2l0dWF0aW9uIHdoZXJlIGBuZWlnaF9oaF9vdXRwdXQoKWAgbWlnaHQgZHJvcCB0aGUgcGFja2V0IGFuZCB0cmlnZ2VyIGEgYFdBUk5fT05fT05DRWAgYmVjYXVzZSBpdCBjb3BpZXMgdGhlIGNhY2hlZCBoYXJkd2FyZSBoZWFkZXIgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcywgd2hpY2ggcmVxdWlyZXMgbW9yZSBoZWFkcm9vbSB0aGFuIGp1c3QgYGhoX2xlbmAuXG5cblRoaXMgaXMgYSBmaXggZm9yIGEgcGFja2V0IGRyb3AgLyB3YXJuaW5nIGlzc3VlIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tIHNpemluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGhhcmR3YXJlLiBUaGUgaGVhZHJvb20gZXhwYW5kZWQgYnkgYHBza2JfZXhwYW5kX2hlYWRgIGlzIHN1YnNlcXVlbnRseSB3cml0dGVuIHRvIGJ5IGBuZWlnaF9oaF9vdXRwdXQoKWAgYmVmb3JlIGBfX3NrYl9wdXNoKClgIGluY2x1ZGVzIHRoZSBleGFjdCBoZWFkZXIgbGVuZ3RoIGluIHRoZSBwYWNrZXQgZGF0YS4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlbGF0ZWQgdG8gaGVhZHJvb20gd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhiNTNmYjRhMmNiMDJkMTU2MmY0ZDk2OTdjMzE2NzBmNGYyYTQ2MDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwNToxMzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2x3dF9icGYuYyBiL25ldC9jb3JlL2x3dF9icGYuYwppbmRleCA2NTI5NTJkNDE2ZjIzLi5kYTQ5MzY0ZWM2M2RlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9sd3RfYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbHd0X2JwZi5jCkBAIC0xNjcsMTAgJiM0MzsxNjcsMTAgQEAgc3RhdGljIGludCBicGZfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiBkc3QtJmd0O2x3dHN0YXRlLSZndDtvcmlnX291dHB1dChuZXQsIHNrLCBza2IpOwogfQogCi1zdGF0aWMgaW50IHhtaXRfY2hlY2tfaGhsZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhoX2xlbikKJiM0MztzdGF0aWMgaW50IHhtaXRfY2hlY2tfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhyb29tKQogewotCWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IGhoX2xlbikgewotCQlpbnQgbmhlYWQgPSBISF9EQVRBX0FMSUdOKGhoX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKTsKJiM0MzsJaWYgKHNrYl9oZWFkcm9vbShza2IpICZsdDsgaHJvb20pIHsKJiM0MzsJCWludCBuaGVhZCA9IGhyb29tIC0gc2tiX2hlYWRyb29tKHNrYik7CiAKIAkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuaGVhZCwgMCwgR0ZQX0FUT01JQykpCiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI4Miw3ICYjNDM7MjgyLDcgQEAgc3RhdGljIGludCBicGZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJYnBmID0gYnBmX2x3dF9sd3R1bm5lbChkc3QtJmd0O2x3dHN0YXRlKTsKIAlpZiAoYnBmLSZndDt4bWl0LnByb2cpIHsKLQkJaW50IGhoX2xlbiA9IGRzdC0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47CiYjNDM7CQlpbnQgaHJvb20gPSBMTF9SRVNFUlZFRF9TUEFDRShkc3QtJmd0O2Rldik7CiAJCV9fYmUxNiBwcm90byA9IHNrYi0mZ3Q7cHJvdG9jb2w7CiAJCWludCByZXQ7CiAKQEAgLTI5OCw5ICYjNDM7Mjk4LDEyIEBAIHN0YXRpYyBpbnQgYnBmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCS8qIElmIHRoZSBoZWFkZXIgd2FzIGV4cGFuZGVkLCBoZWFkcm9vbSBtaWdodCBiZSB0b28KLQkJCSAqIHNtYWxsIGZvciBMMiBoZWFkZXIgdG8gY29tZSwgZXhwYW5kIGFzIG5lZWRlZC4KJiM0MzsJCQkgKiBzbWFsbCBmb3IgdGhlIEwyIGhlYWRlciB0byBjb21lLCBleHBhbmQgYXMgbmVlZGVkLgomIzQzOwkJCSAqIG5laWdoX2hoX291dHB1dCgpIGNvcGllcyB0aGUgY2FjaGVkIGhlYWRlciBpbgomIzQzOwkJCSAqIEhIX0RBVEFfTU9EIGFsaWduZWQgY2h1bmtzLCBzbyBtYXRjaCB0aGUgcmVzZXJ2YXRpb24KJiM0MzsJCQkgKiBtYWRlIGJlZm9yZSBMV1QgeG1pdC4KIAkJCSAqLwotCQkJcmV0ID0geG1pdF9jaGVja19oaGxlbihza2IsIGhoX2xlbik7CiYjNDM7CQkJcmV0ID0geG1pdF9jaGVja19oZWFkcm9vbShza2IsIGhyb29tKTsKIAkJCWlmICh1bmxpa2VseShyZXQpKQogCQkJCXJldHVybiByZXQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgTFdUIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbmV0L2NvcmUvbHd0X2JwZi5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgdHJhbnNtaXQgcGF0aC4gSXQmIzM5O3MgY2hhbmdpbmcgYHhtaXRfY2hlY2tfaGhsZW5gIHRvIGB4bWl0X2NoZWNrX2hlYWRyb29tYCwgYW5kIHRoZSBhcmd1bWVudCBpcyBzaGlmdGluZyBmcm9tIGBoaF9sZW5gIHRvIGBocm9vbWAuIEltbWVkaWF0ZWx5LCB0aGUgYGhyb29tYCBjYWxjdWxhdGlvbiBsb29rcyBkaWZmZXJlbnQ7IGl0JiMzOTtzIHVzaW5nIGBMTF9SRVNFUlZFRF9TUEFDRShkc3QtJmd0O2RldilgIGluc3RlYWQgb2YgZGlyZWN0bHkgcHVsbGluZyBgZHN0LSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRvIGZvY3VzIG9uLiBXaGF0JiMzOTtzIGBMTF9SRVNFUlZFRF9TUEFDRWAgZG9pbmc/IFRoYXQmIzM5O3Mga2V5LgoKVGhlIGNhbGN1bGF0aW9uIGluc2lkZSBgeG1pdF9jaGVja19oZWFkcm9vbWAgaGFzIGFsc28gc2hpZnRlZC4gSXQmIzM5O3Mgbm93IGBocm9vbSAtIHNrYl9oZWFkcm9vbShza2IpYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYEhIX0RBVEFfQUxJR05gIGRhbmNlLiBUaGF0IHNlZW1zIHNpbXBsZXIsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIGNvcnJlY3QuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgbWVtb3J5IHNhZmV0eS4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZWFkcm9vbS4gV2Uga25vdyB0aGF0IGBwc2tiX2V4cGFuZF9oZWFkYCBjYW4gZXhwYW5kIHRoZSBoZWFkcm9vbSBpZiB0aGUgY3VycmVudCBoZWFkcm9vbSBpcyBpbnN1ZmZpY2llbnQuIElmIGBza2JfaGVhZHJvb20oc2tiKSAmbHQ7IGhyb29tYCwgaXQgZXhwYW5kcyBieSBgbmhlYWRgLiBUaGF0IGV4cGFuc2lvbiBpcyBwcm9iYWJseSBhIGNvcHksIHNvIHdoYXQmIzM5O3Mgd3JpdHRlbiB0aGVyZT8gVGhlIGNvbW1lbnQgbWVudGlvbnMgYG5laWdoX2hoX291dHB1dGAgYW5kIGNhY2hpbmcuIEl0IGNvcGllcyB0aGUgY2FjaGVkIGhlYWRlciwgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcy4gVGhlIGdvYWwgaXMgdG8gbWF0Y2ggcmVzZXJ2YXRpb25zIG1hZGUgYmVmb3JlIExXVCB0cmFuc21pc3Npb24uCgpPa2F5LCBpcyB0aGlzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG1pZ2h0IGNyZWVwIGluPyBJZiBgcHNrYl9leHBhbmRfaGVhZGAgY3JlYXRlcyBuZXcgaGVhZHJvb20sIGlzIGl0IHVuaW5pdGlhbGl6ZWQ/IFllcywgaXQgaXMuIEJ1dCwgaXQmIzM5O3MgKmhlYWRyb29tKjsgdGhhdCBzcGFjZSBpcyBpbnRlbmRlZCBmb3IgaGVhZGVyIHdyaXRlcy4gTm93LCBgbmVpZ2hfaGhfb3V0cHV0YCB3cml0ZXMgdG8gdGhlIGhlYWRyb29tLCB3aGljaCBtZWFucyBpZiB0aGUgaGVhZHJvb20gaXNuJiMzOTt0IGxhcmdlIGVub3VnaCwgaXQgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLiBUaGFua2Z1bGx5LCBLQVNBTiB3b3VsZCBwcm9iYWJseSBjYXRjaCB0aGF0LgoKQnV0LCBpcyB0aGVyZSBhIGNhc2Ugd2hlcmUgaXQgcmVhZHMgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSB0aG91Z2h0IGlzIHRoYXQgYG5laWdoX2hoX291dHB1dGAgY29waWVzIHRoZSBjYWNoZWQgaGVhZGVyIGFuZCB0aGVyZWZvcmUgcmVhZHMgZnJvbSBzb21ld2hlcmUsIGJ1dCBpdCBzaG91bGQgYmUgd3JpdGluZywgbm90IHJlYWRpbmcgZnJvbSwgdGhlIGhlYWRyb29tLgoKU28gdGhlIG1haW4gcG9pbnQgaXMgdGhhdCBgcHNrYl9leHBhbmRfaGVhZGAgKmRvZXMqIGxlYXZlIGhlYWRyb29tIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFdoZW4gaGVhZGVycyBhcmUgbGF0ZXIgcHVzaGVkLCB0aGF0IG1lbW9yeSB3aWxsIGdldCB3cml0dGVuIHRvLCBzbyB0aGUgcHJvYmxlbSBtaWdodCBub3QgYmUgcmVhZGluZywgYnV0IHdyaXRpbmcgYmV5b25kIGhhcmRfaGVhZGVyX2xlbiBpbiB0aGUgd29yc3QgY2FzZSBpZiBgbmVpZ2hfaGhfb3V0cHV0YCB3cml0ZXMgdG8gaGVhZHJvb20uCgpUaGUgb2xkIGNvZGUgdXNlZCBgSEhfREFUQV9BTElHTmAsIGJ1dCBub3cgd2UmIzM5O3JlIHVzaW5nIGBocm9vbWAuIFRoZSBjcml0aWNhbCB0aGluZyB0byB1bmRlcnN0YW5kIGlzIGhvdyBgTExfUkVTRVJWRURfU1BBQ0VgIGlzIGJlaW5nIHVzZWQgYW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMuIFRoZSBvcmlnaW5hbCB0aG91Z2h0IHdhcyB0aGF0IGBISF9EQVRBX0FMSUdOYCB3YXMgdGhlcmUgZm9yIGEgcmVhc29uIGFuZCB3ZSBoYXZlIHRvIHNlZSBpZiB0aGUgbmV3IGxvZ2ljIGlzIG9rYXkuIGBMTF9SRVNFUlZFRF9TUEFDRWAgaXMgdXN1YWxseSBgQUxJR04oZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4sIDE2KSAmIzQzOyAuLi5gLiBUaGlzIGlzIHRoZSBjcnV4LCB3aGF0IGRvZXMgdGhlIGFsaWdubWVudCBtZWFuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBMV1QgcGF0aD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTI4Mj1zdHJ1Y3QgaGhfY2FjaGUge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzAyLSAqL1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozMDM6I2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIGhsZW4pIFxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMwNC1cdCgoKChobGVuKSAmIzQzOyBSRUFEX09OQ0UoKGRldiktXHUwMDNlbmVlZGVkX2hlYWRyb29tKSkgXFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzA1LVx0ICBcdTAwMjYgfihISF9EQVRBX01PRCAtIDEpKSAmIzQzOyBISF9EQVRBX01PRClcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzA2OiNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSBcXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMDctXHRMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIChkZXYpLVx1MDAzZWhhcmRfaGVhZGVyX2xlbilcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzA4OiNkZWZpbmUgTExfUkVTRVJWRURfU1BBQ0VfRVhUUkEoZGV2LGV4dHJhKSBcXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMDktXHQoKCgoZGV2KS1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0MzsgUkVBRF9PTkNFKChkZXYpLVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkgJiM0MzsgKGV4dHJhKSkgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAxNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBXcml0ZSBpbiBOZXR3b3JrIFBhY2tldCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgTExfUkVTRVJWRURfU1BBQ0VgIGFsaWducyB3aXRoIGBISF9EQVRBX01PRGAuIFRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBjb2RlIGNhbGN1bGF0ZWQgdGhlIHJlcXVpcmVkIGhlYWRyb29tIHdpdGggdGhpcyBsaW5lOiBgaW50IG5oZWFkID0gSEhfREFUQV9BTElHTihoaF9sZW4gLSBza2JfaGVhZHJvb20oc2tiKSk7YCwgd2hlcmUgYEhIX0RBVEFfQUxJR05gIGFsc28gYWxpZ25zIHRvIGBISF9EQVRBX01PRGAuICBgaGhfbGVuYCB3YXMganVzdCB0aGUgaGFyZCBoZWFkZXIgbGVuZ3RoIGZvciB0aGUgZGV2aWNlLiAgSWYgYHNrYl9oZWFkcm9vbShza2IpYCAodGhlIHNwYWNlIGFscmVhZHkgYXZhaWxhYmxlKSB3YXMgbGVzcyB0aGFuIHRoaXMgYGhoX2xlbmAsIGl0IHdvdWxkICppbmNyZWFzZSogdGhlIGhlYWRyb29tIGJ5IHRoYXQgYWxpZ25lZCBhbW91bnQuICBFZmZlY3RpdmVseSwgdGhlIG5ldyBoZWFkcm9vbSB3b3VsZCBiZSB0aGUgb3JpZ2luYWwgaGVhZHJvb20gcGx1cyB0aGUgYWxpZ25lZCBkaWZmZXJlbmNlLgoKQnV0IG5vdywgYG5laWdoX2hoX291dHB1dGAgKnJlcXVpcmVzKiBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LSZndDtkZXYpYCwgYW5kIHRoaXMgc3BhY2UgaW5jbHVkZXMgdGhlIG5lZWRlZCBoZWFkcm9vbSBhbmQgaXMgYWxpZ25lZCB0byBgSEhfREFUQV9NT0RgLiBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIElmIHRoZSBgc2tiX2hlYWRyb29tKHNrYilgIHdhcyBhbHJlYWR5ICpsYXJnZXIqIHRoYW4gYGhoX2xlbmAgYnV0IHN0aWxsICpzbWFsbGVyKiB0aGFuIHRoZSBgTExfUkVTRVJWRURfU1BBQ0VgLCB0aGUgY29kZSAqd291bGRuJiMzOTt0KiBleHBhbmQgdGhlIGhlYWRyb29tIGF0IGFsbC4gVGhhdCYjMzk7cyBhIHByb2JsZW0sIGJlY2F1c2UgYG5laWdoX2hoX291dHB1dGAgaXMgZ29pbmcgdG8gd3JpdGUgdGhlIGNhY2hlZCBoZWFkZXIgdG8gdGhlIGhlYWRyb29tLCBidXQgaWYgdGhlIGhlYWRyb29tIGlzIGluc3VmZmljaWVudCwgaXQmIzM5O2xsIHdyaXRlICpiZWZvcmUqIHRoZSBgc2tiLSZndDtoZWFkYCBwb2ludGVyLCBzaW5jZSBpdCBjb3BpZXMgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcy4gVGhpcyBtZWFucyBpdCYjMzk7cyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIOKAkyBhbiB1bmRlcmZsb3cg4oCTIGFuZCBLQVNBTiBzaG91bGQgY2F0Y2ggdGhhdC4KCldhaXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmc7IGl0JiMzOTtzIEtBU0FOIHRoYXQgbWF0dGVycywgbm90IG5lY2Vzc2FyaWx5IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHJpZ2h0PyAgT2theSwgSSB0aGluayBJJiMzOTttIHNvbGlkOiAgYG5laWdoX2hoX291dHB1dGAgd3JpdGVzIHRvIHRoZSBoZWFkcm9vbS4gIElmIHRoZSBoZWFkcm9vbSBpcyB0b28gc21hbGwsIGl0IHdyaXRlcyBvdXQgb2YgYm91bmRzIOKAkyBhIHByZS1gc2tiLSZndDtoZWFkYCB1bmRlcmZsb3cuIEtBU0FOIGNhdGNoZXMgYW55IGtpbmQgb2Ygb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJvdGggcmVhZCBhbmQgd3JpdGUuICBObywgdGhpcyBpc24mIzM5O3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpc3N1ZTsgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgb3V0LW9mLWJvdW5kcyB3cml0ZS4KClJpZ2h0LCB0aW1lIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGUgYG5laWdoX2hoX291dHB1dGAgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfb3V0cHV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25laWdoYm91ci5oPTQ5MD1zdGF0aWMgaW5saW5lIGludCBuZWlnaF9oaF9icmlkZ2Uoc3RydWN0IGhoX2NhY2hlICpoaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC01MDYtXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaDo1MDc6c3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfb3V0cHV0KGNvbnN0IHN0cnVjdCBoaF9jYWNoZSAqaGgsIHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC01MDgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTE1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgbmVpZ2hfaGhfb3V0cHV0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYG5laWdoX2hoX291dHB1dGAuIEJhc2VkIG9uIHRoZSBmaWxlIG5hbWUsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIG91dHB1dCByZWxhdGVkIHRvIHRoZSBuZWlnaGJvcmhvb2QgaG91c2Vob2xkIGRhdGEuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgZm9ybWF0PyBJcyBpdCBhIHN0YW5kYXJkIENTViwgYSBKU09OIHN0cnVjdHVyZSwgbWF5YmUgZXZlbiBhIG1vcmUgc3BlY2lhbGl6ZWQgYmluYXJ5IGZvcm1hdD8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdHJ1Y3R1cmUgc28gSSBjYW4gZWZmaWNpZW50bHkgcGFyc2UgaXQgYW5kIGJlZ2luIHRoZSBhbmFseXNpcy4gQXJlIHRoZXJlIGhlYWRlcnM/IFdoYXQgYXJlIHRoZSBrZXkgdmFyaWFibGVzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBkYXRhIHF1YWxpdHkgaXNzdWVzIEkgc2hvdWxkIGFudGljaXBhdGUsIGxpa2UgbWlzc2luZyB2YWx1ZXMgb3Igb3V0bGllcnM/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRob3NlIHBvdGVudGlhbCBhcmVhcyB0byBiZSBjb2duaXphbnQgb2YgYXMgSSBhbSB3b3JraW5nIHdpdGggdGhlIGRhdGEuIERlcGVuZGluZyBvbiBteSB3b3JrLCBJIHdpbGwgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHF1YWxpdHkgb2YgdGhpcyBkYXRhIHRvIG1ha2UgYXBwcm9wcmlhdGUgaW50ZXJwcmV0YXRpb25zLiBJIHdpbGwgbGlrZWx5IG5lZWQgdG8gaW1wb3J0IHRoZSBwYWNrYWdlIHJlbGF0ZWQgdG8gbXkgZmllbGQgYXMgd2VsbC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHdoYXRldmVyIHF1ZXN0aW9ucyBJIGFtIHRyeWluZyB0byBhbnN3ZXIgcmVnYXJkaW5nIG5laWdoYm9yaG9vZCBlZmZlY3RzIG9uIGhvdXNlaG9sZCBiZWhhdmlvciwgZGVtb2dyYXBoaWNzLCBvciB3aGF0ZXZlciBvdGhlciBzcGVjaWZpYyBtZXRyaWMgSSYjMzk7bSBsb29raW5nIGF0LiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoaXMgZGF0YXNldCBob2xkcyB0aGUgYW5zd2VycyBJJiMzOTttIHNlYXJjaGluZyBmb3IuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiBoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25laWdoYm91ci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDc6XHRzdGF0aWMgaW5saW5lIGludCBuZWlnaF9oaF9vdXRwdXQoY29uc3Qgc3RydWN0IGhoX2NhY2hlICpoaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA1MDg6XHR7XG4gNTA5Olx0XHR1bnNpZ25lZCBpbnQgaGhfYWxlbiA9IDA7XG4gNTEwOlx0XHR1bnNpZ25lZCBpbnQgc2VxO1xuIDUxMTpcdFx0dW5zaWduZWQgaW50IGhoX2xlbjtcbiA1MTI6XHRcbiA1MTM6XHRcdGRvIHtcbiA1MTQ6XHRcdFx0c2VxID0gcmVhZF9zZXFiZWdpbihcdTAwMjZoaC1cdTAwM2VoaF9sb2NrKTtcbiA1MTU6XHRcdFx0aGhfbGVuID0gUkVBRF9PTkNFKGhoLVx1MDAzZWhoX2xlbik7XG4gNTE2Olx0XHRcdGlmIChsaWtlbHkoaGhfbGVuIFx1MDAzYz0gSEhfREFUQV9NT0QpKSB7XG4gNTE3Olx0XHRcdFx0aGhfYWxlbiA9IEhIX0RBVEFfTU9EO1xuIDUxODpcdFxuIDUxOTpcdFx0XHRcdC8qIHNrYl9wdXNoKCkgd291bGQgcHJvY2VlZCBzaWxlbnRseSBpZiB3ZSBoYXZlIHJvb20gZm9yXG4gNTIwOlx0XHRcdFx0ICogdGhlIHVuYWxpZ25lZCBzaXplIGJ1dCBub3QgZm9yIHRoZSBhbGlnbmVkIHNpemU6XG4gNTIxOlx0XHRcdFx0ICogY2hlY2sgaGVhZHJvb20gZXhwbGljaXRseS5cbiA1MjI6XHRcdFx0XHQgKi9cbiA1MjM6XHRcdFx0XHRpZiAobGlrZWx5KHNrYl9oZWFkcm9vbShza2IpIFx1MDAzZT0gSEhfREFUQV9NT0QpKSB7XG4gNTI0Olx0XHRcdFx0XHQvKiB0aGlzIGlzIGlubGluZWQgYnkgZ2NjICovXG4gNTI1Olx0XHRcdFx0XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEgLSBISF9EQVRBX01PRCwgaGgtXHUwMDNlaGhfZGF0YSxcbiA1MjY6XHRcdFx0XHRcdCAgICAgICBISF9EQVRBX01PRCk7XG4gNTI3Olx0XHRcdFx0fVxuIDUyODpcdFx0XHR9IGVsc2Uge1xuIDUyOTpcdFx0XHRcdGhoX2FsZW4gPSBISF9EQVRBX0FMSUdOKGhoX2xlbik7XG4gNTMwOlx0XG4gNTMxOlx0XHRcdFx0aWYgKGxpa2VseShza2JfaGVhZHJvb20oc2tiKSBcdTAwM2U9IGhoX2FsZW4pKSB7XG4gNTMyOlx0XHRcdFx0XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEgLSBoaF9hbGVuLCBoaC1cdTAwM2VoaF9kYXRhLFxuIDUzMzpcdFx0XHRcdFx0ICAgICAgIGhoX2FsZW4pO1xuIDUzNDpcdFx0XHRcdH1cbiA1MzU6XHRcdFx0fVxuIDUzNjpcdFx0fSB3aGlsZSAocmVhZF9zZXFyZXRyeShcdTAwMjZoaC1cdTAwM2VoaF9sb2NrLCBzZXEpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkxMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIGBuZWlnaF9oaF9vdXRwdXRgIGFuZCBpdHMgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gYG5laWdoX2hoX291dHB1dGAgaXMgdXNpbmcgYHNrYl9oZWFkcm9vbShza2IpYCB0byBjaGVjayBmb3Igc3VmZmljaWVudCBzcGFjZSBpbiB0aGUgU29ja2V0IEJ1ZmZlciAoYHNrYmApIHVzaW5nIGBISF9EQVRBX01PRGAgb3IgYGhoX2FsZW5gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiB0aGlzIGhlYWRyb29tIGlzbiYjMzk7dCBiaWcgZW5vdWdoLCB0aGVyZSYjMzk7cyBnb2luZyB0byBiZSBhIHNraXAgb2YgdGhlIGBtZW1jcHlgIGNhbGwuIE1ha2VzIHNlbnNlIGZyb20gYSBtZW1vcnkgYWxsb2NhdGlvbiBzdGFuZHBvaW50OyBubyBwb2ludCBjb3B5aW5nIGRhdGEgd2hlcmUgdGhlcmUgaXNuJiMzOTt0IGFjdHVhbGx5IHNwYWNlIQoKQnV0Li4uICp3aGF0IGhhcHBlbnMqIGlmIHRoYXQgYG1lbWNweWAgZ2V0cyBza2lwcGVkPyBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBrbm93IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBnb2luZyB0byBkbyBpbnN0ZWFkISBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8ga2VlcCByZWFkaW5nIGFuZCBzZWUgaG93IGl0IGhhbmRsZXMgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGhlYWRyb29tIGlzIGluc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZWlnaGJvdXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTM3Olx0XG4gNTM4Olx0XHRpZiAoV0FSTl9PTl9PTkNFKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBoaF9hbGVuKSkge1xuIDUzOTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA1NDA6XHRcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4gNTQxOlx0XHR9XG4gNTQyOlx0XG4gNTQzOlx0XHRfX3NrYl9wdXNoKHNrYiwgaGhfbGVuKTtcbiA1NDQ6XHRcdHJldHVybiBkZXZfcXVldWVfeG1pdChza2IpO1xuIDU0NTpcdH1cbiA1NDY6XHRcbiA1NDc6XHRzdGF0aWMgaW5saW5lIGludCBuZWlnaF9vdXRwdXQoc3RydWN0IG5laWdoYm91ciAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA1NDg6XHRcdFx0XHQgICAgICAgYm9vbCBza2lwX2NhY2hlKVxuIDU0OTpcdHtcbiA1NTA6XHRcdGNvbnN0IHN0cnVjdCBoaF9jYWNoZSAqaGggPSBcdTAwMjZuLVx1MDAzZWhoO1xuIDU1MTpcdFxuIDU1MjpcdFx0Lyogbi1cdTAwM2VudWRfc3RhdGUgYW5kIGhoLVx1MDAzZWhoX2xlbiBjb3VsZCBiZSBjaGFuZ2VkIHVuZGVyIHVzLlxuIDU1MzpcdFx0ICogbmVpZ2hfaGhfb3V0cHV0KCkgaXMgdGFraW5nIGNhcmUgb2YgdGhlIHJhY2UgbGF0ZXIuXG4gNTU0Olx0XHQgKi9cbiA1NTU6XHRcdGlmICghc2tpcF9jYWNoZSBcdTAwMjZcdTAwMjZcbiA1NTY6XHRcdCAgICAoUkVBRF9PTkNFKG4tXHUwMDNlbnVkX3N0YXRlKSBcdTAwMjYgTlVEX0NPTk5FQ1RFRCkgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzODgKCQkJCQkJCW91dHB1dDogMjcyCgkJCQkJCQl0aG91Z2h0czogMTgwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgSGVhZHJvb20gTW9kaWZpY2F0aW9uIGluIGBuZXQvY29yZS9sd3RfYnBmLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBoZWFkcm9vbSBjYWxjdWxhdGlvbiBpbiBgbmV0L2NvcmUvbHd0X2JwZi5jYC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgY2hlY2sgZnJvbSBgeG1pdF9jaGVja19oaGxlbmAgdG8gYHhtaXRfY2hlY2tfaGVhZHJvb21gLiAgUHJldmlvdXNseSwgYHhtaXRfY2hlY2tfaGhsZW5gIHdhcyBlbnN1cmluZyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCksIGJ1dCBub3cgdGhlIGNvZGUgaXMgYWxpZ25pbmcgdGhlIGhlYWRyb29tIHJlc2VydmF0aW9uIHdpdGggYExMX1JFU0VSVkVEX1NQQUNFKGRzdC0mZ3Q7ZGV2KWAuIFRoYXQmIzM5O3Mgc21hcnQ7IGBMTF9SRVNFUlZFRF9TUEFDRWAgYWxyZWFkeSBhY2NvdW50cyBmb3IgdGhpbmdzIGxpa2UgZGV2aWNlLXNwZWNpZmljIG92ZXJoZWFkIGFuZCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCByYXRoZXIgdGhhbiBhIHBvdGVudGlhbGx5IHNtYWxsZXIgYGhoX2xlbmAuCgpUaGUgY29tbWVudCBpcyBrZXkgaGVyZS4gSXQgaGlnaGxpZ2h0cyB0aGF0IGBuZWlnaF9oaF9vdXRwdXRgIG1pZ2h0IHJlcXVpcmUgbW9yZSBoZWFkcm9vbSB0aGFuIGp1c3QgYGhoX2xlbmAgYmVjYXVzZSBpdCBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcy4gSSByZW1lbWJlciB0aGF0IGZ1bmN0aW9uOyBpdCB1c2VzIGBISF9EQVRBX01PRGAgKHR5cGljYWxseSAxNiBieXRlcykgYWxpZ25tZW50IHdoZW4gY29weWluZyB0aGUgaGVhZGVyLCBvciBhIGxhcmdlciBgSEhfREFUQV9BTElHTihoaF9sZW4pYCBpZiB0aGUgaGVhZGVyIGlzIGxhcmdlci4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gdGhlIHByZXZpb3VzbHkgcmVzZXJ2ZWQgaGVhZHJvb20gaXMgKmp1c3QqIGVub3VnaCBmb3IgYGhoX2xlbmAsIGJ1dCBub3QgZm9yIHRoZSBhbGlnbmVkIGNvcHkuIGBuZWlnaF9oaF9vdXRwdXRgIHRoZW4gZmFpbHMgdGhlIGNoZWNrIChgc2tiX2hlYWRyb29tKHNrYikgJmd0Oz0gaGhfYWxlbmApIGFuZCBkcm9wcyB0aGUgcGFja2V0IHdpdGggYSB3YXJuaW5nIG9yLCBpbiBzb21lIGNhc2VzLCBtaWdodCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIHRoYXQgY2hlY2sgd2FzbiYjMzk7dCB0aGVyZS4KCk5vdywgd2l0aCB0aGlzIGNoYW5nZSwgYHhtaXRfY2hlY2tfaGVhZHJvb21gIGVuc3VyZXMgdGhlcmUgaXMgc3VmZmljaWVudCBoZWFkcm9vbSB0byBhY2NvdW50IGZvciB0aGlzIGxhcmdlciBjb3B5LiBgTExfUkVTRVJWRURfU1BBQ0VgIGluY2x1ZGVzIGBuZWVkZWRfaGVhZHJvb21gLCBzbyB0aGUgbmV3IGNoZWNrIHNob3VsZCBoYXZlIGVub3VnaCBoZWFkcm9vbSB0byBkZWFsIHdpdGggdGhlIGFsaWdubWVudCBuZWVkcy4KCk15IG1haW4gY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIG1lbW9yeSBzYWZldHkuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHdyaXRlcz8gIExldCYjMzk7cyBzZWU6IGBwc2tiX2V4cGFuZF9oZWFkYCAqYWxsb2NhdGVzKiBtb3JlIG1lbW9yeSwgYnV0IGl0IGRvZXNuJiMzOTt0IGluaXRpYWxpemUgaXQuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgYmVoYXZpb3IuIEhvd2V2ZXIsIGBuZWlnaF9oaF9vdXRwdXRgICp3cml0ZXMqIGludG8gdGhlIGhlYWRyb29tLiBDcnVjaWFsbHksIGl0IGNvcGllcyBkYXRhIGZyb20gYGhoLSZndDtoaF9kYXRhYC4gIFRoYXQmIzM5O3MgKmluaXRpYWxpemVkKiBkYXRhISBUaGUgbGVuZ3RoIGNvcGllZCBpcyBgaGhfYWxlbmAuCgpUaGVuLCBgX19za2JfcHVzaChza2IsIGhoX2xlbilgIGFkanVzdHMgdGhlIHBhY2tldCYjMzk7cyBkYXRhIHBvaW50ZXIgYW5kIGxlbmd0aCwgaW5jbHVkaW5nIG9ubHkgdGhlICphY3R1YWwqIGhlYWRlciBsZW5ndGggKGBoaF9sZW5gKS4gSXQgZG9lcyAqbm90KiBpbmNsdWRlIHRoZSBleHRyYSBieXRlcyBjb3BpZWQgdG8gYWNoaWV2ZSBhbGlnbm1lbnQ7IHRob3NlIHJlbWFpbiBpbiB0aGUgaGVhZHJvb20sIGJlZm9yZSB0aGUgYWN0dWFsIGRhdGEuIFRodXMsIHRoZSBleHRyYSBoZWFkcm9vbSBieXRlcyAodXAgdG8gYGhoX2FsZW5gKSBhcmUgKm5vdCogcGFydCBvZiB0aGUgcGFja2V0IGRhdGEsIGFuZCB0aGUgZGF0YSBiZWluZyBzZW50IHRvIHRoZSBOSUMgKmlzKiBpbml0aWFsaXplZC4KClNvLCB0aGVyZSYjMzk7cyBubyB3YXkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYmVjYXVzZSB0aGUgc291cmNlIGRhdGEgKGBoaC0mZ3Q7aGhfZGF0YWApIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgd2UgcHVzaCB0aGUgdmFsaWQgcGFydCwgYW5kIHRoZSByZXN0IGlzIGhlYWRyb29tLiBJdCYjMzk7cyByZWFsbHkganVzdCBmaXhpbmcgYSBidWcgd2hlcmUgd2UgZGlkbiYjMzk7dCBoYXZlIGVub3VnaCBoZWFkcm9vbSB0byBoYW5kbGUgdGhlIGFsaWdubWVudCBpbiB0aGUgZXhpc3RpbmcgY29kZS4gSWYgdGhlIGV4aXN0aW5nIGNvZGUgZGlkbiYjMzk7dCBoYXZlIHRoZSBjaGVjayBgc2tiX2hlYWRyb29tKHNrYikgJmd0Oz0gaGhfYWxlbmAsIHRoZXJlIGNvdWxkIGhhdmUgYmVlbiBvdXQgb2YgYm91bmRzIHdyaXRlLiBMdWNraWx5LCB0aGF0IGNoZWNrIGlzIGFscmVhZHkgcHJlc2VudCwgc28gdGhlIGJ1ZyBtYW5pZmVzdGVkIGFzIGEgcGFja2V0IGRyb3AsIGFuZCB0aGlzIHBhdGNoIGZpeGVzIHRoYXQuIEtBU0FOIHdvdWxkIGVhc2lseSBjYXRjaCBhbnkgcmVhbCBvdXQtb2YtYm91bmRzIGlzc3VlcywgYnV0IHRoYXQmIzM5O3Mgbm90IHdoYXQgdGhpcyBpcy4KClNvLCB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgaGVhZHJvb20gc2l6aW5nIHByb2JsZW0sIHByZXZlbnRpbmcgcGFja2V0IGRyb3BzIGR1ZSB0byBpbnN1ZmZpY2llbnQgaGVhZHJvb20uIEl0ICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdl4oCZcmUgbm90IGFkZGluZyBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGhlYWRyb29tIGl0c2VsZiBpcyBjb3JyZWN0bHkgd3JpdHRlbiBiZWZvcmUgdGhlIHBhY2tldCBkYXRhIGlzIGRlZmluZWQuIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIHN0YW5kYXJkIEtBU0FOIHRvb2xpbmcgd291bGQgZmxhZyBhbnl0aGluZyBpbiB0aGUgZXhpc3RpbmcgY29kZSBvciBuZXcgY29kZSB0aGF0IGNhdXNlcyBhbiBvdXQgb2YgYm91bmRzIHdyaXRlIHRvIGFuIGFsbG9jYXRlZCBhcmVhLCBidXQgdGhlcmUgaXMgbm90aGluZyBwcmVzZW50IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoZWFkcm9vbSBjaGVjayBpbiBgYnBmX3htaXRgIGZvciBMV1QgQlBGIHByb2dyYW1zLiBJdCByZXBsYWNlcyBgeG1pdF9jaGVja19oaGxlbmAgd2l0aCBgeG1pdF9jaGVja19oZWFkcm9vbWAsIGVuc3VyaW5nIHRoYXQgdGhlIHJlc2VydmVkIGhlYWRyb29tIG1hdGNoZXMgYExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cdTAwM2VkZXYpYCByYXRoZXIgdGhhbiBqdXN0IHRoZSBleGFjdCBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCkuIFRoaXMgcHJldmVudHMgYSBzaXR1YXRpb24gd2hlcmUgYG5laWdoX2hoX291dHB1dCgpYCBtaWdodCBkcm9wIHRoZSBwYWNrZXQgYW5kIHRyaWdnZXIgYSBgV0FSTl9PTl9PTkNFYCBiZWNhdXNlIGl0IGNvcGllcyB0aGUgY2FjaGVkIGhhcmR3YXJlIGhlYWRlciBpbiBgSEhfREFUQV9NT0RgIGFsaWduZWQgY2h1bmtzLCB3aGljaCByZXF1aXJlcyBtb3JlIGhlYWRyb29tIHRoYW4ganVzdCBgaGhfbGVuYC5cblxuVGhpcyBpcyBhIGZpeCBmb3IgYSBwYWNrZXQgZHJvcCAvIHdhcm5pbmcgaXNzdWUgcmVsYXRlZCB0byBidWZmZXIgaGVhZHJvb20gc2l6aW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgaGFyZHdhcmUuIFRoZSBoZWFkcm9vbSBleHBhbmRlZCBieSBgcHNrYl9leHBhbmRfaGVhZGAgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgYG5laWdoX2hoX291dHB1dCgpYCBiZWZvcmUgYF9fc2tiX3B1c2goKWAgaW5jbHVkZXMgdGhlIGV4YWN0IGhlYWRlciBsZW5ndGggaW4gdGhlIHBhY2tldCBkYXRhLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgcmVsYXRlZCB0byBoZWFkcm9vbSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoZWFkcm9vbSBjaGVjayBpbiBgYnBmX3htaXRgIGZvciBMV1QgQlBGIHByb2dyYW1zLiBJdCByZXBsYWNlcyBgeG1pdF9jaGVja19oaGxlbmAgd2l0aCBgeG1pdF9jaGVja19oZWFkcm9vbWAsIGVuc3VyaW5nIHRoYXQgdGhlIHJlc2VydmVkIGhlYWRyb29tIG1hdGNoZXMgYExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cdTAwM2VkZXYpYCByYXRoZXIgdGhhbiBqdXN0IHRoZSBleGFjdCBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCkuIFRoaXMgcHJldmVudHMgYSBzaXR1YXRpb24gd2hlcmUgYG5laWdoX2hoX291dHB1dCgpYCBtaWdodCBkcm9wIHRoZSBwYWNrZXQgYW5kIHRyaWdnZXIgYSBgV0FSTl9PTl9PTkNFYCBiZWNhdXNlIGl0IGNvcGllcyB0aGUgY2FjaGVkIGhhcmR3YXJlIGhlYWRlciBpbiBgSEhfREFUQV9NT0RgIGFsaWduZWQgY2h1bmtzLCB3aGljaCByZXF1aXJlcyBtb3JlIGhlYWRyb29tIHRoYW4ganVzdCBgaGhfbGVuYC5cblxuVGhpcyBpcyBhIGZpeCBmb3IgYSBwYWNrZXQgZHJvcCAvIHdhcm5pbmcgaXNzdWUgcmVsYXRlZCB0byBidWZmZXIgaGVhZHJvb20gc2l6aW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggc3RydWN0dXJlcywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgaGFyZHdhcmUuIFRoZSBoZWFkcm9vbSBleHBhbmRlZCBieSBgcHNrYl9leHBhbmRfaGVhZGAgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgYG5laWdoX2hoX291dHB1dCgpYCBiZWZvcmUgYF9fc2tiX3B1c2goKWAgaW5jbHVkZXMgdGhlIGV4YWN0IGhlYWRlciBsZW5ndGggaW4gdGhlIHBhY2tldCBkYXRhLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgcmVsYXRlZCB0byBoZWFkcm9vbSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6MjMuODg4MTk2OTczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzOTc3NTEwOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxXVFVOTkVMX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImx3dHVubmVsX3htaXRcIixcbiAgICBcImx3dHVubmVsX2J1aWxkX3N0YXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gY2hlY2sgaW4gYGJwZl94bWl0YCBmb3IgTFdUIEJQRiBwcm9ncmFtcy4gSXQgcmVwbGFjZXMgYHhtaXRfY2hlY2tfaGhsZW5gIHdpdGggYHhtaXRfY2hlY2tfaGVhZHJvb21gLCBlbnN1cmluZyB0aGF0IHRoZSByZXNlcnZlZCBoZWFkcm9vbSBtYXRjaGVzIGBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXFx1MDAzZWRldilgIHJhdGhlciB0aGFuIGp1c3QgdGhlIGV4YWN0IGhhcmR3YXJlIGhlYWRlciBsZW5ndGggKGBoaF9sZW5gKS4gVGhpcyBwcmV2ZW50cyBhIHNpdHVhdGlvbiB3aGVyZSBgbmVpZ2hfaGhfb3V0cHV0KClgIG1pZ2h0IGRyb3AgdGhlIHBhY2tldCBhbmQgdHJpZ2dlciBhIGBXQVJOX09OX09OQ0VgIGJlY2F1c2UgaXQgY29waWVzIHRoZSBjYWNoZWQgaGFyZHdhcmUgaGVhZGVyIGluIGBISF9EQVRBX01PRGAgYWxpZ25lZCBjaHVua3MsIHdoaWNoIHJlcXVpcmVzIG1vcmUgaGVhZHJvb20gdGhhbiBqdXN0IGBoaF9sZW5gLlxcblxcblRoaXMgaXMgYSBmaXggZm9yIGEgcGFja2V0IGRyb3AgLyB3YXJuaW5nIGlzc3VlIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tIHNpemluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGhhcmR3YXJlLiBUaGUgaGVhZHJvb20gZXhwYW5kZWQgYnkgYHBza2JfZXhwYW5kX2hlYWRgIGlzIHN1YnNlcXVlbnRseSB3cml0dGVuIHRvIGJ5IGBuZWlnaF9oaF9vdXRwdXQoKWAgYmVmb3JlIGBfX3NrYl9wdXNoKClgIGluY2x1ZGVzIHRoZSBleGFjdCBoZWFkZXIgbGVuZ3RoIGluIHRoZSBwYWNrZXQgZGF0YS4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlbGF0ZWQgdG8gaGVhZHJvb20gd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBsb2dpYyBpbiB0aGUgQlBGIGxpZ2h0d2VpZ2h0IHR1bm5lbCAoTFdUKSB0cmFuc21pdCBwYXRoIChgYnBmX3htaXRgKS4gSXQgY2hhbmdlcyB0aGUgcmVxdWlyZWQgaGVhZHJvb20gY2FsY3VsYXRpb24gdG8gdXNlIGBMTF9SRVNFUlZFRF9TUEFDRWAgaW5zdGVhZCBvZiBgaGFyZF9oZWFkZXJfbGVuYCBhbmQgcmVtb3ZlcyBgSEhfREFUQV9BTElHTmAgcm91bmRpbmcgdG8gY29ycmVjdGx5IG1hdGNoIHRoZSByZXNlcnZhdGlvbiBtYWRlIGJlZm9yZSBMV1QgeG1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbiB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjIzLjg4ODIwMzkyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3OTcyNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGI1M2ZiNGEyY2IwMmQxNTYyZjRkOTY5N2MzMTY3MGY0ZjJhNDYwMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNToxMzoyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9sd3RfYnBmLmMgYi9uZXQvY29yZS9sd3RfYnBmLmNcXG5pbmRleCA2NTI5NTJkNDE2ZjIzLi5kYTQ5MzY0ZWM2M2RlIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2x3dF9icGYuY1xcbisrKyBiL25ldC9jb3JlL2x3dF9icGYuY1xcbkBAIC0xNjcsMTAgKzE2NywxMCBAQCBzdGF0aWMgaW50IGJwZl9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHJldHVybiBkc3QtXFx1MDAzZWx3dHN0YXRlLVxcdTAwM2VvcmlnX291dHB1dChuZXQsIHNrLCBza2IpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHhtaXRfY2hlY2tfaGhsZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhoX2xlbilcXG4rc3RhdGljIGludCB4bWl0X2NoZWNrX2hlYWRyb29tKHN0cnVjdCBza19idWZmICpza2IsIGludCBocm9vbSlcXG4ge1xcbi1cXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzYyBoaF9sZW4pIHtcXG4tXFx0XFx0aW50IG5oZWFkID0gSEhfREFUQV9BTElHTihoaF9sZW4gLSBza2JfaGVhZHJvb20oc2tiKSk7XFxuK1xcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcXHUwMDNjIGhyb29tKSB7XFxuK1xcdFxcdGludCBuaGVhZCA9IGhyb29tIC0gc2tiX2hlYWRyb29tKHNrYik7XFxuIFxcbiBcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIG5oZWFkLCAwLCBHRlBfQVRPTUlDKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTI4Miw3ICsyODIsNyBAQCBzdGF0aWMgaW50IGJwZl94bWl0KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBcXHRicGYgPSBicGZfbHd0X2x3dHVubmVsKGRzdC1cXHUwMDNlbHd0c3RhdGUpO1xcbiBcXHRpZiAoYnBmLVxcdTAwM2V4bWl0LnByb2cpIHtcXG4tXFx0XFx0aW50IGhoX2xlbiA9IGRzdC1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuK1xcdFxcdGludCBocm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cXHUwMDNlZGV2KTtcXG4gXFx0XFx0X19iZTE2IHByb3RvID0gc2tiLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuQEAgLTI5OCw5ICsyOTgsMTIgQEAgc3RhdGljIGludCBicGZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHQvKiBJZiB0aGUgaGVhZGVyIHdhcyBleHBhbmRlZCwgaGVhZHJvb20gbWlnaHQgYmUgdG9vXFxuLVxcdFxcdFxcdCAqIHNtYWxsIGZvciBMMiBoZWFkZXIgdG8gY29tZSwgZXhwYW5kIGFzIG5lZWRlZC5cXG4rXFx0XFx0XFx0ICogc21hbGwgZm9yIHRoZSBMMiBoZWFkZXIgdG8gY29tZSwgZXhwYW5kIGFzIG5lZWRlZC5cXG4rXFx0XFx0XFx0ICogbmVpZ2hfaGhfb3V0cHV0KCkgY29waWVzIHRoZSBjYWNoZWQgaGVhZGVyIGluXFxuK1xcdFxcdFxcdCAqIEhIX0RBVEFfTU9EIGFsaWduZWQgY2h1bmtzLCBzbyBtYXRjaCB0aGUgcmVzZXJ2YXRpb25cXG4rXFx0XFx0XFx0ICogbWFkZSBiZWZvcmUgTFdUIHhtaXQuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRyZXQgPSB4bWl0X2NoZWNrX2hobGVuKHNrYiwgaGhfbGVuKTtcXG4rXFx0XFx0XFx0cmV0ID0geG1pdF9jaGVja19oZWFkcm9vbShza2IsIGhyb29tKTtcXG4gXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMzoyNC4zNjcxNzA5ODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0ODM4ODE2MzAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMV1RVTk5FTF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsd3R1bm5lbF94bWl0XCIsXG4gICAgXCJsd3R1bm5lbF9idWlsZF9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoZWFkcm9vbSBleHBhbnNpb24gbG9naWMgaW4gdGhlIEJQRiBsaWdodHdlaWdodCB0dW5uZWwgKExXVCkgdHJhbnNtaXQgcGF0aCAoYGJwZl94bWl0YCkuIEl0IGNoYW5nZXMgdGhlIHJlcXVpcmVkIGhlYWRyb29tIGNhbGN1bGF0aW9uIHRvIHVzZSBgTExfUkVTRVJWRURfU1BBQ0VgIGluc3RlYWQgb2YgYGhhcmRfaGVhZGVyX2xlbmAgYW5kIHJlbW92ZXMgYEhIX0RBVEFfQUxJR05gIHJvdW5kaW5nIHRvIGNvcnJlY3RseSBtYXRjaCB0aGUgcmVzZXJ2YXRpb24gbWFkZSBiZWZvcmUgTFdUIHhtaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb24gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YjUzZmI0YTJjYjAyZDE1NjJmNGQ5Njk3YzMxNjcwZjRmMmE0NjAxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDU6MTM6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9sd3RfYnBmLmMgYi9uZXQvY29yZS9sd3RfYnBmLmNcbmluZGV4IDY1Mjk1MmQ0MTZmMjMuLmRhNDkzNjRlYzYzZGUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9sd3RfYnBmLmNcbisrKyBiL25ldC9jb3JlL2x3dF9icGYuY1xuQEAgLTE2NywxMCArMTY3LDEwIEBAIHN0YXRpYyBpbnQgYnBmX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBkc3QtXHUwMDNlbHd0c3RhdGUtXHUwMDNlb3JpZ19vdXRwdXQobmV0LCBzaywgc2tiKTtcbiB9XG4gXG4tc3RhdGljIGludCB4bWl0X2NoZWNrX2hobGVuKHN0cnVjdCBza19idWZmICpza2IsIGludCBoaF9sZW4pXG4rc3RhdGljIGludCB4bWl0X2NoZWNrX2hlYWRyb29tKHN0cnVjdCBza19idWZmICpza2IsIGludCBocm9vbSlcbiB7XG4tXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXHUwMDNjIGhoX2xlbikge1xuLVx0XHRpbnQgbmhlYWQgPSBISF9EQVRBX0FMSUdOKGhoX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKTtcbitcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgaHJvb20pIHtcbitcdFx0aW50IG5oZWFkID0gaHJvb20gLSBza2JfaGVhZHJvb20oc2tiKTtcbiBcbiBcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuaGVhZCwgMCwgR0ZQX0FUT01JQykpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjgyLDcgKzI4Miw3IEBAIHN0YXRpYyBpbnQgYnBmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdGJwZiA9IGJwZl9sd3RfbHd0dW5uZWwoZHN0LVx1MDAzZWx3dHN0YXRlKTtcbiBcdGlmIChicGYtXHUwMDNleG1pdC5wcm9nKSB7XG4tXHRcdGludCBoaF9sZW4gPSBkc3QtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcdFx0aW50IGhyb29tID0gTExfUkVTRVJWRURfU1BBQ0UoZHN0LVx1MDAzZWRldik7XG4gXHRcdF9fYmUxNiBwcm90byA9IHNrYi1cdTAwM2Vwcm90b2NvbDtcbiBcdFx0aW50IHJldDtcbiBcbkBAIC0yOTgsOSArMjk4LDEyIEBAIHN0YXRpYyBpbnQgYnBmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbiBcdFx0XHQvKiBJZiB0aGUgaGVhZGVyIHdhcyBleHBhbmRlZCwgaGVhZHJvb20gbWlnaHQgYmUgdG9vXG4tXHRcdFx0ICogc21hbGwgZm9yIEwyIGhlYWRlciB0byBjb21lLCBleHBhbmQgYXMgbmVlZGVkLlxuK1x0XHRcdCAqIHNtYWxsIGZvciB0aGUgTDIgaGVhZGVyIHRvIGNvbWUsIGV4cGFuZCBhcyBuZWVkZWQuXG4rXHRcdFx0ICogbmVpZ2hfaGhfb3V0cHV0KCkgY29waWVzIHRoZSBjYWNoZWQgaGVhZGVyIGluXG4rXHRcdFx0ICogSEhfREFUQV9NT0QgYWxpZ25lZCBjaHVua3MsIHNvIG1hdGNoIHRoZSByZXNlcnZhdGlvblxuK1x0XHRcdCAqIG1hZGUgYmVmb3JlIExXVCB4bWl0LlxuIFx0XHRcdCAqL1xuLVx0XHRcdHJldCA9IHhtaXRfY2hlY2tfaGhsZW4oc2tiLCBoaF9sZW4pO1xuK1x0XHRcdHJldCA9IHhtaXRfY2hlY2tfaGVhZHJvb20oc2tiLCBocm9vbSk7XG4gXHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6MjQuMzY3MTczMDUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4NzU2NzA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFBhY2tldCBUcmFuc21pc3Npb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvbHd0X2JwZi5jYCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHBhY2tldCB0cmFuc21pc3Npb24uIEl0IHNlZW1zIHRoZXkncmUgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgdGhlIGhlYWRyb29tIGlzIG1hbmFnZWQuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSByZXBsYWNlbWVudCBvZiBgeG1pdF9jaGVja19oaGxlbmAgd2l0aCBgeG1pdF9jaGVja19oZWFkcm9vbWAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQgaW4gdGhlIGxvZ2ljLlxuXG5UaGUgY2FsY3VsYXRpb24gb2YgYG5oZWFkYCBpcyBub3cgdXNpbmcgYGhyb29tYCAobGlrZWx5IHRoZSBoZWFkcm9vbSBhdmFpbGFibGUpIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgaGFyZHdhcmUgaGVhZGVyIGxlbmd0aC4gRnVydGhlcm1vcmUsIGluIGBicGZfeG1pdGAsIGluc3RlYWQgb2YgZmV0Y2hpbmcgYGhoX2xlbmAgZnJvbSB0aGUgZGV2aWNlJ3MgaGFyZCBoZWFkZXIgbGVuZ3RoLCBpdCdzIG5vdyByZXRyaWV2aW5nIGBocm9vbWAgdXNpbmcgYExMX1JFU0VSVkVEX1NQQUNFYC4gVGhpcyBpcyBkaXJlY3RseSBwYXNzZWQgaW50byBgeG1pdF9jaGVja19oZWFkcm9vbWAgZm9yIGFuYWx5c2lzLlxuXG5NeSBpbW1lZGlhdGUgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmb2N1c2VkIG9uIGFkZHJlc3NpbmcgYW4gaXNzdWUgaW4gaGVhZHJvb20gZXhwYW5zaW9uIHdpdGhpbiBgYnBmX3htaXRgLiBJJ20gZ3Vlc3NpbmcgdGhpcyByZXNvbHZlcyBhIHN1YnRsZSBidWcgcmVsYXRlZCB0byBob3cgdGhlIEJQRiBMV1QgaW50ZXJhY3RzIHdpdGggZGV2aWNlcyBoYXZpbmcgdmFyeWluZyBoZWFkcm9vbSByZXF1aXJlbWVudHMgb3IgcGVyaGFwcyBkZWFsaW5nIHdpdGggYWxpZ25tZW50IGlzc3VlcyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbi5cblxuQmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGBuZXQvY29yZS9sd3RfYnBmLmNgIHRvIHNlZSBob3cgaXQncyBlbmFibGVkIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgd2lsbCBnaXZlIG1lIGZ1cnRoZXIgY29udGV4dCBmb3IgYW5hbHl6aW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMzoyOS4xNTQ3NDI2NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEwMzQ1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0X2JwZlxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9Mzg9b2JqLSQoQ09ORklHX0xXVFVOTkVMKSArPSBsd3R1bm5lbC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX0xXVFVOTkVMX0JQRikgKz0gbHd0X2JwZi5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDAtb2JqLSQoQ09ORklHX0RTVF9DQUNIRSkgKz0gZHN0X2NhY2hlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6MjkuMjQ1NzgyNzQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ2MDI0NTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aGUgdGFzayBhdCBoYW5kIHJldm9sdmVzIGFyb3VuZCBgQ09ORklHX0xXVFVOTkVMX0JQRmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGRpZyBkZWVwZXIgaW50byBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3Igc2V0dGluZ3MgYXJlIGludGVydHdpbmVkIHdpdGggdGhpcyBvbmUuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsOyBpdCBoZWxwcyBtZSBhbnRpY2lwYXRlIHBvdGVudGlhbCBjb25mbGljdHMsIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLCBhbmQgcGlucG9pbnQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gZW5zdXJlIHNlYW1sZXNzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzdGFydCBtYXBwaW5nIHRoZW0gb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6MzEuNzA2MDMwNTYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzIxMTY3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFdUVU5ORUxfQlBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDQ1PWNvbmZpZyBMV1RVTk5FTFxcbi0tXFxubmV0L0tjb25maWctNDUyLVxcbm5ldC9LY29uZmlnOjQ1Mzpjb25maWcgTFdUVU5ORUxfQlBGXFxubmV0L0tjb25maWctNDU0LVxcdGJvb2wgXFxcIkV4ZWN1dGUgQlBGIHByb2dyYW0gYXMgcm91dGUgbmV4dGhvcCBhY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjMxLjgzMzI0ODc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNjg1MjM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgTFdUVU5ORUxfQlBGYCBEZXRhaWxzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IHJpZ2h0IGRvd24gdG8gaXQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciwgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIGBMV1RVTk5FTF9CUEZgIGZ1bmN0aW9uYWxpdHkuIEknbSBub3QgbG9va2luZyBmb3IgYSBzdXJmYWNlLWxldmVsIGV4cGxhbmF0aW9uOyBJIHdhbnQgdGhlIG5pdHR5LWdyaXR0eSwgdGhlIGZ1bGwtYmxvd24gZGVmaW5pdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQgdGhpcyB0ZXJtIGVuY29tcGFzc2VzLiBJIGFscmVhZHkgaGF2ZSBhIGRlY2VudCBncmFzcCwgYnV0IGEgY29uY2lzZSBkZWZpbml0aW9uIHdpbGwgaGVscCBtZSBjb25maXJtIG15IG1lbnRhbCBtb2RlbC4gV2hhdCBhcmUgdGhlIGtleSBlbGVtZW50cz8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzPyBMZXQncyBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjM0Ljc3MDEwMzcxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDU6XFx0Y29uZmlnIExXVFVOTkVMXFxuIDQ0NjpcXHRcXHRib29sIFxcXCJOZXR3b3JrIGxpZ2h0IHdlaWdodCB0dW5uZWxzXFxcIlxcbiA0NDc6XFx0XFx0aGVscFxcbiA0NDg6XFx0XFx0ICBUaGlzIGZlYXR1cmUgcHJvdmlkZXMgYW4gaW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBsaWdodCB3ZWlnaHRcXG4gNDQ5OlxcdFxcdCAgdHVubmVscyBsaWtlIG1wbHMuIFRoZXJlIGlzIG5vIG5ldGRldmljZSBhc3NvY2lhdGVkIHdpdGggYSBsaWdodFxcbiA0NTA6XFx0XFx0ICB3ZWlnaHQgdHVubmVsIGVuZHBvaW50LiBUdW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGFyZSBzdG9yZWRcXG4gNDUxOlxcdFxcdCAgd2l0aCBsaWdodCB3ZWlnaHQgdHVubmVsIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBmaWIgcm91dGVzLlxcbiA0NTI6XFx0XFxuIDQ1MzpcXHRjb25maWcgTFdUVU5ORUxfQlBGXFxuIDQ1NDpcXHRcXHRib29sIFxcXCJFeGVjdXRlIEJQRiBwcm9ncmFtIGFzIHJvdXRlIG5leHRob3AgYWN0aW9uXFxcIlxcbiA0NTU6XFx0XFx0ZGVwZW5kcyBvbiBMV1RVTk5FTCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuIDQ1NjpcXHRcXHRkZWZhdWx0IHkgaWYgTFdUVU5ORUw9eVxcbiA0NTc6XFx0XFx0aGVscFxcbiA0NTg6XFx0XFx0ICBBbGxvd3MgdG8gcnVuIEJQRiBwcm9ncmFtcyBhcyBhIG5leHRob3AgYWN0aW9uIGZvbGxvd2luZyBhIHJvdXRlXFxuIDQ1OTpcXHRcXHQgIGxvb2t1cCBmb3IgaW5jb21pbmcgYW5kIG91dGdvaW5nIHBhY2tldHMuXFxuIDQ2MDpcXHRcXG4gNDYxOlxcdGNvbmZpZyBEU1RfQ0FDSEVcXG4gNDYyOlxcdFxcdGJvb2xcXG4gNDYzOlxcdFxcdGRlZmF1bHQgblxcbiA0NjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjM0Ljc3MDIxMzI3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjg2MDQwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqQW5hbHl6aW5nIHRoZSBMV1RVTk5FTCBhbmQgQlBGIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYExXVFVOTkVMX0JQRmAgdGhpbmcgd29ya3MuIFJpZ2h0IG9mZiB0aGUgYmF0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0IGJ1aWxkcyB1cG9uIGJvdGggYExXVFVOTkVMYCBhbmQgYElORVRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGV4dGVuZGluZyB0aGUgTFdUVU5ORUwgZnVuY3Rpb25hbGl0eSB3aXRoIEJQRiwgYW5kIGl0IG5lZWRzIHRoZSBzdGFuZGFyZCBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlLCB0b28uIFRoZSByZWFsIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBicGZfeG1pdGAuXG5cbk5vdywgdGhlIGRvY3VtZW50YXRpb24gc2F5cyBgYnBmX3htaXRgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgQlBGIExXVCB4bWl0LiBUaGF0J3MgZ29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIHN1c3BpY2lvbnMuIEl0J3MgdGhlIGhvb2sgdGhhdCBicmlkZ2VzIHRoZSBMV1RVTk5FTCBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIEJQRiBsb2dpYy4gQnV0Li4uIGlzIGl0IHN0YXRpYz8gVW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhhdCBmdW5jdGlvbiBjYWxsIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyByZXF1aXJlZCBoZXJlLiBJZiBpdCdzIHN0YXRpYywgdGhhdCBpbXBsaWVzIGEgdGlnaHRlciBlbmNhcHN1bGF0aW9uIGFuZCBwb3RlbnRpYWxseSBsZXNzIGltcGFjdCBvbiB0aGUgd2lkZXIga2VybmVsLiBJZiBub3QsIHdlIGhhdmUgYSBiaWdnZXIgcGljdHVyZSB0byBjb25zaWRlci4gU28sIGxldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX3htaXRgIHRvIGRldGVybWluZSBpdHMgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjM4LjEzODgxOTc1NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNTQyODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2x3dF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9sd3RfYnBmLmM9MTgyPXN0YXRpYyBpbnQgYnBmX2x3dF94bWl0X3Jlcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2x3dF9icGYuYy0yNzctXFxubmV0L2NvcmUvbHd0X2JwZi5jOjI3ODpzdGF0aWMgaW50IGJwZl94bWl0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvbHd0X2JwZi5jLTI3OS17XFxuLS1cXG5uZXQvY29yZS9sd3RfYnBmLmM9NTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGJwZl9lbmNhcF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9sd3RfYnBmLmMtNTI5LVxcdC5vdXRwdXRcXHRcXHQ9IGJwZl9vdXRwdXQsXFxubmV0L2NvcmUvbHd0X2JwZi5jOjUzMDpcXHQueG1pdFxcdFxcdD0gYnBmX3htaXQsXFxubmV0L2NvcmUvbHd0X2JwZi5jLTUzMS1cXHQuZmlsbF9lbmNhcFxcdD0gYnBmX2ZpbGxfZW5jYXBfaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6MzguMjQxMzY3NDA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzYxNTA3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIGVCUEYgRW5jYXBzdWxhdGlvbiBUcmFuc21pc3Npb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBicGZfeG1pdGAsIHdoaWNoIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBhIGxpdHRsZSB1bnVzdWFsIGZvciBhIHRyYW5zbWlzc2lvbiBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCBpdCdzIGJlaW5nIGFzc2lnbmVkIHRvIGBicGZfZW5jYXBfb3BzLnhtaXRgLiBUaGF0J3MgaG93IGl0J3MgZ2V0dGluZyBob29rZWQgaW50byB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCAqd2hlcmUqIGlzIGBicGZfeG1pdGAgYmVpbmcgdXNlZD8gSXMgdGhlcmUgYSBub24tc3RhdGljIGZ1bmN0aW9uIHdoaWNoIGNhbGxzIGl0PyBJIG5lZWQgdG8gdHJhY2sgdGhpcyBkb3duLlxuXG5SaWdodCwgSSByZW1lbWJlciBub3csIGBicGZfZW5jYXBfb3BzYCBpcyByZWdpc3RlcmVkLCB0aHJvdWdoIGBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNmJwZl9lbmNhcF9vcHMsIExXVFVOTkVMX0VOQ0FQX0JQRilgIHdpdGhpbiBgYnBmX2x3dF9pbml0YC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBob3cgdGhlIGVCUEYgZW5jYXBzdWxhdGlvbiBvcGVyYXRpb25zIGFyZSBob29rZWQgaW50byB0aGUgTGludXggTFdUVU5ORUwgc3Vic3lzdGVtLiBPa2F5LCB0aGUgcGllY2VzIGFyZSBmYWxsaW5nIGludG8gcGxhY2UuIFRoZSB4bWl0IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHZpYSB0aGUgYGx3dHVubmVsX3htaXRgIGZ1bmN0aW9uLiBJIHRoaW5rIEkndmUgZ290IGEgZGVjZW50IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYWluIG9mIGNhbGxzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6NDEuOTc3NTIxMzg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwODc3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHd0dW5uZWxfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2x3dHVubmVsLmM9MzczPUVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX291dHB1dCk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYy0zNzQtXFxubmV0L2NvcmUvbHd0dW5uZWwuYzozNzU6aW50IGx3dHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9sd3R1bm5lbC5jLTM3Ni17XFxuLS1cXG5uZXQvY29yZS9sd3R1bm5lbC5jLTQyOC19XFxubmV0L2NvcmUvbHd0dW5uZWwuYzo0Mjk6RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfeG1pdCk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYy00MzAtXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xOTk9c3RhdGljIGludCBpcF9maW5pc2hfb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTIyMS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoyMjI6XFx0aWYgKGx3dHVubmVsX3htaXRfcmVkaXJlY3QoZHN0LVxcdTAwM2Vsd3RzdGF0ZSkpIHtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoyMjM6XFx0XFx0aW50IHJlcyA9IGx3dHVubmVsX3htaXQoc2tiKTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0yMjQtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NjA9c3RhdGljIGludCBpcDZfZmluaXNoX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTEzLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMTQ6XFx0aWYgKGx3dHVubmVsX3htaXRfcmVkaXJlY3QoZHN0LVxcdTAwM2Vsd3RzdGF0ZSkpIHtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTE1OlxcdFxcdGludCByZXMgPSBsd3R1bm5lbF94bWl0KHNrYik7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTExNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6NDIuMDg1NjE0ODc3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTI5NjY4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMV1R1bm5lbCBUcmFuc21pc3Npb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIExpZ2h0d2VpZ2h0IFR1bm5lbCAoTFdUKSB0cmFuc21pc3Npb24gcGF0aC4gVGhlIGtleSBzZWVtcyB0byBiZSBgbHd0dW5uZWxfeG1pdGAg4oCTIHRoYXQncyB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IHVsdGltYXRlbHkgY2FsbHMgdGhlIGB4bWl0YCBvcGVyYXRpb24uIFRoaW5raW5nIGFib3V0IHRoZSBjYWxsIGNoYWluLCBpdCBhcHBlYXJzIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGBpcF9maW5pc2hfb3V0cHV0MmAgYW5kIGBpcDZfZmluaXNoX291dHB1dDJgLiBUaGF0IG1ha2VzIGBsd3R1bm5lbF94bWl0YCBhIHJlYWxseSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgdHJhY2luZyB0aGUgZmxvdy4gTm93LCB3aGVyZSBlbHNlIG1pZ2h0IHRoaW5ncyBjb21lIGludG8gcGxheT8gTXkgZ3V0IHRlbGxzIG1lIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgZnVuY3Rpb25zIGxpa2UgYGJwZl9sd3RfcHVzaF9pcF9lbmNhcGAgb3Igc2ltaWxhciBCUEYtcmVsYXRlZCBlbmNhcCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2x3dF9icGYuY2AuIFRpbWUgdG8gdmVyaWZ5IGJ5IHRha2luZyBhIGxvb2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDMsIk91dHB1dFRva2VucyI6NjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6NDYuMTc4NTg0OTMyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzQxMDc2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWl8wLTldKiBbYS16QS1aX11bYS16QS1aXzAtOV0qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvbHd0X2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2x3dF9icGYuYz01NDk9c3RhdGljIGludCBoYW5kbGVfZ3NvX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgaXB2NCwgaW50IGVuY2FwX2xlbilcXG4tLVxcbm5ldC9jb3JlL2x3dF9icGYuYy02MDQtXFxubmV0L2NvcmUvbHd0X2JwZi5jOjYwNTppbnQgYnBmX2x3dF9wdXNoX2lwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkciwgdTMyIGxlbiwgYm9vbCBpbmdyZXNzKVxcbm5ldC9jb3JlL2x3dF9icGYuYy02MDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxMzo0Ni4yNDYwMDAyNTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMDcxMjQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBicGZfbHd0X3B1c2hfaXBfZW5jYXBgIEZ1bmN0aW9uIGFuZCBJdHMgQ29udGV4dCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGJwZl9sd3RfcHVzaF9pcF9lbmNhcGAgaXNuJ3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSBtb2RpZmljYXRpb24gdGhhdCB0cmlnZ2VyZWQgbXkgY3VyaW9zaXR5IGlzIGFjdHVhbGx5IHdpdGhpbiBgYnBmX3htaXRgIGFuZCBgeG1pdF9jaGVja19oZWFkcm9vbWAuIFNpbmNlIGBicGZfeG1pdGAgaXMgY2FsbGVkIGJ5IGBsd3R1bm5lbF94bWl0YCwgZm9jdXNpbmcgb24gYGx3dHVubmVsX3htaXRgIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBhcHByb2FjaCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2UncyBpbXBsaWNhdGlvbnMuIFRoYXQgZnVuY3Rpb24gd2lsbCBsaWtlbHkgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByaXBwbGUgZWZmZWN0cy5cblxuTm93LCBsZXQncyBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gYG5ldC9jb3JlL2x3dF9icGYuY2AuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSBoYXZlbid0IG92ZXJsb29rZWQgYW55IHJlbGF0ZWQgbW9kaWZpY2F0aW9ucyBvciBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBBIHF1aWNrIGNoZWNrIHdpbGwgaGVscCBrZWVwIG15IGFuYWx5c2lzIGNvbXByZWhlbnNpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6NDkuOTY2NzE2NDQ5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODIzNDA5MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9sd3RfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjUwLjAzNDk1NzY3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgzMzU4NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byBgbmV0L2NvcmUvbHd0X2JwZi5jYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnbG9iYWwgZnVuY3Rpb24gbGFuZHNjYXBlIHdpdGhpbiB0aGUgbGlnaHR3ZWlnaHQgQlBGIChlQlBGKSBmdW5jdGlvbmFsaXR5LiBNeSBndXQgdGVsbHMgbWUgdGhhdCBgbmV0L2NvcmUvbHd0X2JwZi5jYCBpcyB0aGUgcHJpbWUgbG9jYXRpb24gdG8gc3RhcnQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIHNjb3BlIHdpdGhpbiB0aGUgbmV0d29yayBjb3JlLiBMZXQncyBzZWUgd2hhdCBjb3JlIGZ1bmN0aW9ucyBpdCBleHBvc2VzLiBJJ20gbG9va2luZyBmb3IgdGhlIGVudHJ5IHBvaW50cywgdGhlIGhvb2tzLCB0aGUgY29udHJvbCBwb2ludHMg4oCTIHRoZSB0aGluZ3MgdGhhdCAqb3RoZXIqIG5ldHdvcmsgc3Vic3lzdGVtcyB3b3VsZCBjYWxsIGludG8gb3IgdGhhdCBvcmNoZXN0cmF0ZSB0aGUgaW50ZXJhY3Rpb25zIHdpdGggQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGxpZ2h0d2VpZ2h0IHR1bm5lbHMgb3IgaW50ZXJmYWNlcy4gVGhpcyBmaWxlIGlzIHByb2JhYmx5IHRoZSBjZW50cmFsIGh1YiBmb3IgdGhhdC4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgcHVibGljLCBob3cgdGhleSBhcmUgdXNlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBhcmNoaXRlY3R1cmFsIHBhdHRlcm5zIGltcGxlbWVudGVkIGluIHRoaXMgZmlsZS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgZmVlbCBmb3IgdGhlIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5OCwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjUzLjQxODMxOTE4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0ODc2MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgW2EtekEtWl9dW2EtekEtWl8wLTldKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2x3dF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9sd3RfYnBmLmM9NTQ5PXN0YXRpYyBpbnQgaGFuZGxlX2dzb19lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGlwdjQsIGludCBlbmNhcF9sZW4pXFxuLS1cXG5uZXQvY29yZS9sd3RfYnBmLmMtNjA0LVxcbm5ldC9jb3JlL2x3dF9icGYuYzo2MDU6aW50IGJwZl9sd3RfcHVzaF9pcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcylcXG5uZXQvY29yZS9sd3RfYnBmLmMtNjA2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTM6NTMuNTIzMjAxODJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyOTczNzc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExpbnV4IExXVCBUdW5uZWxpbmcgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBob3cgbGlnaHR3ZWlnaHQgdHVubmVscyBhcmUgaGFuZGxlZCBoZXJlLiBJdCBzZWVtcyB0aGF0IGBicGZfbHd0X3B1c2hfaXBfZW5jYXBgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBCUEYtYmFzZWQgZW5jYXBzdWxhdGlvbi4gVGhhdCdzIGdvb2QgdG8ga25vdywgc29saWRpZmllcyB3aGF0IEkgZXhwZWN0ZWQuIEJ1dCB3YWl0LCBgbHd0dW5uZWxfeG1pdGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY2FsbHMgYGJwZl94bWl0YCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZW0uIFRoZSByZWFsIHdvcmsgaXMgbGlrZWx5IGRvbmUgZG93biBpbiBgYnBmX3htaXRgLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gc2VlIGhvdyBgbHd0dW5uZWxfeG1pdGAgc2V0cyB0aGUgc3RhZ2UuIExldCBtZSBxdWlja2x5IGp1bXAgaW50byBgbmV0L2NvcmUvbHd0dW5uZWwuY2AgYW5kIGRpZyBpbnRvIGhvdyBgbHd0dW5uZWxfeG1pdGAgdXRpbGl6ZXMgdGhlIEJQRiBmdW5jdGlvbmFsaXR5LiBMZXTigJlzIHNlZSB3aGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBkb3duLCBob3cgdGhlIGVuY2Fwc3VsYXRpb24gaXMgZGV0ZXJtaW5lZCwgYW5kIHdoYXQgZGVjaXNpb25zIGFyZSBiZWluZyBtYWRlLiBUaGlzIGxvb2tzIGxpa2UgdGhlIHJpZ2h0IHBhdGggdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYyMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjU2LjU1Mjk0MTkwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9sd3R1bm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3NTpcXHRpbnQgbHd0dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzNzY6XFx0e1xcbiAzNzc6XFx0XFx0Y29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyAqb3BzO1xcbiAzNzg6XFx0XFx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3RzdGF0ZTtcXG4gMzc5OlxcdFxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdDtcXG4gMzgwOlxcdFxcdGludCByZXQ7XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0aWYgKGRldl94bWl0X3JlY3Vyc2lvbigpKSB7XFxuIDM4NTpcXHRcXHRcXHRuZXRfY3JpdF9yYXRlbGltaXRlZChcXFwiJXMoKTogcmVjdXJzaW9uIGxpbWl0IHJlYWNoZWQgb24gZGF0YXBhdGhcXFxcblxcXCIsXFxuIDM4NjpcXHRcXHRcXHRcXHRcXHQgICAgIF9fZnVuY19fKTtcXG4gMzg3OlxcdFxcdFxcdHJldCA9IC1FTkVURE9XTjtcXG4gMzg4OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMzg5OlxcdFxcdH1cXG4gMzkwOlxcdFxcbiAzOTE6XFx0XFx0ZHN0ID0gc2tiX2RzdChza2IpO1xcbiAzOTI6XFx0XFx0aWYgKCFkc3QpIHtcXG4gMzkzOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDM5NDpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjEzOjU2LjU1MzAwNzIyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzU2NDE1MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBMV1R1bm5lbCBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIGEgZ29vZCBmb2N1cyBmb3IgdGhpcyBwYXRjaC4gSSB0aGluayBgbHd0dW5uZWxfeG1pdGAgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBkZWFscyB3aXRoIGBicGZfeG1pdGAsIGJ1dCBgbHd0dW5uZWxfeG1pdGAgZmVlbHMgbW9yZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBhY3R1YWwgTFdUIGZ1bmN0aW9uYWxpdHkgYmVpbmcgbW9kaWZpZWQuIEkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IGBicGZfbHd0X3B1c2hfaXBfZW5jYXBgIHNlZW1zIGxpa2UgaXQgKmNvdWxkKiBiZSByZWxldmFudCwgYnV0IHRoZSBwYXRjaCBpc24ndCB0b3VjaGluZyBpdCBkaXJlY3RseSwgc28gdGhhdCdzIHByb2JhYmx5IGEgZGlzdHJhY3Rpb24uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUga2VybmVsIGNvbmZpZ3MuIEkga25vdyB3ZSBuZWVkIGBMV1RVTk5FTF9CUEZgLCBhbmQgSSBzZWUgdGhhdCBpdCBkZXBlbmRzIG9uIGBMV1RVTk5FTGAgYW5kIGBJTkVUYC4gSSdtIGNvbmZpZGVudCB0aGF0IGVuYWJsaW5nIGBMV1RVTk5FTF9CUEZgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbjsgaXQncyB0aGUgY29yZSBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWJvdXQuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRoYXQganVzdCBlbmFibGluZyBgTFdUVU5ORUxfQlBGYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyB0aGlzIHBhdGNoLlxuXG5Mb29raW5nIGNsb3NlciwgdGhlIHBhdGNoIGlzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgbHd0X2JwZi5jYC4gSXQncyBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBgc2tiX2hlYWRyb29tYCBhbmQgdGhlIEwyIGhlYWRlciB1c2luZyBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LVx1MDAzZWRldilgLiBUaGlzIGtpbmQgb2YgYnVmZmVyIHNpemUgaXNzdWUgc2NyZWFtcyBcImZ1enppbmcgdGFyZ2V0LlwiIFdlICpkZWZpbml0ZWx5KiBuZWVkIHRvIGV4cGxvcmUgdGhpcyBhcmVhIHRob3JvdWdobHkuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGlzIGBMV1RVTk5FTF9CUEZgLCBhbmQgbXkgcHJpbWFyeSBmb2N1cyBzeW1ib2wgd2lsbCBiZSBgbHd0dW5uZWxfeG1pdGAuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBsd3R1bm5lbF94bWl0YC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBzb21lIG92ZXJseSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLCBidXQgaXQncyBjYWxsZWQgZnJvbSBgaXBfZmluaXNoX291dHB1dDJgIGFuZCBgaXA2X2ZpbmlzaF9vdXRwdXQyYCB3aGVuIGBsd3R1bm5lbF94bWl0X3JlZGlyZWN0KGRzdC1cdTAwM2Vsd3RzdGF0ZSlgIGlzIHRydWUuIFRoYXQgc2VlbXMgc3BlY2lmaWMgZW5vdWdoIHRvIHRoZSBMV1QgY29udGV4dCwgYmVpbmcgYSBob3QtcGF0aCBzcGVjaWZpY2FsbHkgd2l0aGluIExXVC4gYGJwZl9sd3RfcHVzaF9pcF9lbmNhcGAgYW5kIGBicGZfeG1pdGAgZG9uJ3Qgc2VlbSBsaWtlIGdvb2QgY2FuZGlkYXRlcy4gQW5kIGBsd3R1bm5lbF9idWlsZF9zdGF0ZWAgYXBwZWFycyB0byBiZSBmb3Igc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxNDowMy45MDk0MjUyNTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzA2NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImx3dHVubmVsX2J1aWxkX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2x3dHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbHd0dW5uZWwuYz0xMTE9RVhQT1JUX1NZTUJPTF9HUEwobHd0dW5uZWxfZW5jYXBfZGVsX29wcyk7XFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTItXFxubmV0L2NvcmUvbHd0dW5uZWwuYzoxMTM6aW50IGx3dHVubmVsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGVuY2FwX3R5cGUsXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xMTQtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVuY2FwLCB1bnNpZ25lZCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2NvcmUvbHd0dW5uZWwuYy0xNDktfVxcbm5ldC9jb3JlL2x3dHVubmVsLmM6MTUwOkVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX2J1aWxkX3N0YXRlKTtcXG5uZXQvY29yZS9sd3R1bm5lbC5jLTE1MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTQ6MDMuOTY3MTM3NDI2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1ODg2ODI2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIEJQRiBMaWdodHdlaWdodCBUdW5uZWwgSGVhZHJvb20gTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBtb2RpZnlpbmcgYGx3dF9icGYuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBCUEYgbGlnaHR3ZWlnaHQgdHVubmVsIChMV1QpIHRyYW5zbWl0IHBhdGguIE15IGZvY3VzIHN5bWJvbHMgaGVyZSBhcmUgYGx3dHVubmVsX3htaXRgIGFuZCBgbHd0dW5uZWxfYnVpbGRfc3RhdGVgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBsaWVzLCBhbmQgd2hlcmUgdGhpcyBjaGFuZ2UgaXMgaW1wYWN0aW5nLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyB3ZSBoYW5kbGUgaGVhZHJvb20gY2FsY3VsYXRpb24gYmVmb3JlIHRyYW5zbWl0dGluZyBwYWNrZXRzLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBkc3QtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgdG8gZGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBoZWFkcm9vbS4gIE5vdywgaXQncyBiZWluZyB1cGRhdGVkIHRvIHVzZSBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LVx1MDAzZWRldilgIGluc3RlYWQuIFRoaXMgaXMgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBkaWZmZXJlbmNlIGluIGhvdyB0aGUgTFdUIHR1bm5lbCBpcyBjYWxjdWxhdGluZyBhdmFpbGFibGUgc3BhY2UgZm9yIHBhY2tldCBoZWFkZXJzLCB3aGljaCBhZmZlY3RzIGFsbCBuZXR3b3JraW5nLlxuXG5JIHNlZSB0aGF0IHRoZSBwYXRjaCBhbHNvIGVsaW1pbmF0ZXMgdGhlIHVzZSBvZiBgSEhfREFUQV9BTElHTmAgd2hpY2ggSSB3YXMgYSBiaXQgY29uY2VybmVkIGFib3V0LiBUaGUgY29tbWVudHMgYXJlIGV4cGxhaW5pbmcgdGhhdCB0aGlzIGFsaWducyB3aXRoIGhvdyB0aGUgY2FjaGVkIGhlYWRlciBpcyBoYW5kbGVkIGluIGBuZWlnaF9oaF9vdXRwdXQoKWAsIHNwZWNpZmljYWxseSBob3cgaXQgY29waWVzIHRoZSBjYWNoZWQgaGVhZGVyIGluIGFsaWduZWQgY2h1bmtzLiBSZW1vdmluZyB0aGUgcm91bmRpbmcgbWFrZXMgdGhlIHByZS10cmFuc21pc3Npb24gaGVhZHJvb20gcmVzZXJ2YXRpb24gbWF0Y2ggdGhlIGFjdHVhbCBsYXlvdXQuIFRoaXMgZW5zdXJlcyBjb25zaXN0ZW5jeSBhbmQgcHJldmVudHMgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgYWxpZ25tZW50IGlzc3VlcyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbi5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgaGVhZHJvb20gaXMgYWxsb2NhdGVkIGJlZm9yZSBCUEYgTFdUIHBhY2tldCB0cmFuc21pc3Npb24uIEl0J3MgYWJvdXQgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnRpbmcgcG90ZW50aWFsIGlzc3VlcyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbi4gR2l2ZW4gdGhpcyBpcyBhIGNyaXRpY2FsIHBhcnQgb2YgbmV0d29ya2luZyBwZXJmb3JtYW5jZSwgdGhpcyBpcyBzb21ldGhpbmcgSSB3YW50IHRvIGZ1enogdGhvcm91Z2hseSBhcyBwYXJ0IG9mIG15IG5ldHdvcmtpbmcgdGVzdHMuIENvbmZpZ3VyYXRpb24gZm9yIHRoaXMgY2hhbmdlIGlzIGBMV1RVTk5FTF9CUEZgIHdoaWNoIG1ha2VzIHNlbnNlIGFuZCBJJ2xsIGNvbmZpcm0gdGhpcyBpcyBhY3RpdmUgaW4gbXkgdGVzdCBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gdXNlIHNldC1yZXN1bHRzIGFuZCB0aGVuIHJ1biBzb21lIGZ1enogdGVzdHMgYWdhaW5zdCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzM0LCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxNDoxMi41NTU4MjIxMzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk1MDkxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxXVFVOTkVMX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImx3dHVubmVsX3htaXRcIixcbiAgICBcImx3dHVubmVsX2J1aWxkX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBsb2dpYyBpbiB0aGUgQlBGIGxpZ2h0d2VpZ2h0IHR1bm5lbCAoTFdUKSB0cmFuc21pdCBwYXRoIChgYnBmX3htaXRgKS4gSXQgY2hhbmdlcyB0aGUgcmVxdWlyZWQgaGVhZHJvb20gY2FsY3VsYXRpb24gdG8gdXNlIGBMTF9SRVNFUlZFRF9TUEFDRWAgaW5zdGVhZCBvZiBgaGFyZF9oZWFkZXJfbGVuYCBhbmQgcmVtb3ZlcyBgSEhfREFUQV9BTElHTmAgcm91bmRpbmcgdG8gY29ycmVjdGx5IG1hdGNoIHRoZSByZXNlcnZhdGlvbiBtYWRlIGJlZm9yZSBMV1QgeG1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbiB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFdUVU5ORUxfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHd0dW5uZWxfeG1pdFwiLFxuICAgIFwibHd0dW5uZWxfYnVpbGRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gZXhwYW5zaW9uIGxvZ2ljIGluIHRoZSBCUEYgbGlnaHR3ZWlnaHQgdHVubmVsIChMV1QpIHRyYW5zbWl0IHBhdGggKGBicGZfeG1pdGApLiBJdCBjaGFuZ2VzIHRoZSByZXF1aXJlZCBoZWFkcm9vbSBjYWxjdWxhdGlvbiB0byB1c2UgYExMX1JFU0VSVkVEX1NQQUNFYCBpbnN0ZWFkIG9mIGBoYXJkX2hlYWRlcl9sZW5gIGFuZCByZW1vdmVzIGBISF9EQVRBX0FMSUdOYCByb3VuZGluZyB0byBjb3JyZWN0bHkgbWF0Y2ggdGhlIHJlc2VydmF0aW9uIG1hZGUgYmVmb3JlIExXVCB4bWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTQ6MTIuNzU1MzM3MzA0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTExMDM1NzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjE0OjEyLjc1NTg3MzE4NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NTEwOTgxNTQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhlYWRyb29tIGNoZWNrIGluIGBicGZfeG1pdGAgZm9yIExXVCBCUEYgcHJvZ3JhbXMuIEl0IHJlcGxhY2VzIGB4bWl0X2NoZWNrX2hobGVuYCB3aXRoIGB4bWl0X2NoZWNrX2hlYWRyb29tYCwgZW5zdXJpbmcgdGhhdCB0aGUgcmVzZXJ2ZWQgaGVhZHJvb20gbWF0Y2hlcyBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LVxcdTAwM2VkZXYpYCByYXRoZXIgdGhhbiBqdXN0IHRoZSBleGFjdCBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCkuIFRoaXMgcHJldmVudHMgYSBzaXR1YXRpb24gd2hlcmUgYG5laWdoX2hoX291dHB1dCgpYCBtaWdodCBkcm9wIHRoZSBwYWNrZXQgYW5kIHRyaWdnZXIgYSBgV0FSTl9PTl9PTkNFYCBiZWNhdXNlIGl0IGNvcGllcyB0aGUgY2FjaGVkIGhhcmR3YXJlIGhlYWRlciBpbiBgSEhfREFUQV9NT0RgIGFsaWduZWQgY2h1bmtzLCB3aGljaCByZXF1aXJlcyBtb3JlIGhlYWRyb29tIHRoYW4ganVzdCBgaGhfbGVuYC5cXG5cXG5UaGlzIGlzIGEgZml4IGZvciBhIHBhY2tldCBkcm9wIC8gd2FybmluZyBpc3N1ZSByZWxhdGVkIHRvIGJ1ZmZlciBoZWFkcm9vbSBzaXppbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBoYXJkd2FyZS4gVGhlIGhlYWRyb29tIGV4cGFuZGVkIGJ5IGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSBgbmVpZ2hfaGhfb3V0cHV0KClgIGJlZm9yZSBgX19za2JfcHVzaCgpYCBpbmNsdWRlcyB0aGUgZXhhY3QgaGVhZGVyIGxlbmd0aCBpbiB0aGUgcGFja2V0IGRhdGEuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyByZWxhdGVkIHRvIGhlYWRyb29tIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhiNTNmYjRhMmNiMDJkMTU2MmY0ZDk2OTdjMzE2NzBmNGYyYTQ2MDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNToxMzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2x3dF9icGYuYyBiL25ldC9jb3JlL2x3dF9icGYuY1xuaW5kZXggNjUyOTUyZDQxNmYyMy4uZGE0OTM2NGVjNjNkZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2x3dF9icGYuY1xuKysrIGIvbmV0L2NvcmUvbHd0X2JwZi5jXG5AQCAtMTY3LDEwICsxNjcsMTAgQEAgc3RhdGljIGludCBicGZfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIGRzdC1cdTAwM2Vsd3RzdGF0ZS1cdTAwM2VvcmlnX291dHB1dChuZXQsIHNrLCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHhtaXRfY2hlY2tfaGhsZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhoX2xlbilcbitzdGF0aWMgaW50IHhtaXRfY2hlY2tfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhyb29tKVxuIHtcbi1cdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgaGhfbGVuKSB7XG4tXHRcdGludCBuaGVhZCA9IEhIX0RBVEFfQUxJR04oaGhfbGVuIC0gc2tiX2hlYWRyb29tKHNrYikpO1xuK1x0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBocm9vbSkge1xuK1x0XHRpbnQgbmhlYWQgPSBocm9vbSAtIHNrYl9oZWFkcm9vbShza2IpO1xuIFxuIFx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIG5oZWFkLCAwLCBHRlBfQVRPTUlDKSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0yODIsNyArMjgyLDcgQEAgc3RhdGljIGludCBicGZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0YnBmID0gYnBmX2x3dF9sd3R1bm5lbChkc3QtXHUwMDNlbHd0c3RhdGUpO1xuIFx0aWYgKGJwZi1cdTAwM2V4bWl0LnByb2cpIHtcbi1cdFx0aW50IGhoX2xlbiA9IGRzdC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuK1x0XHRpbnQgaHJvb20gPSBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXHUwMDNlZGV2KTtcbiBcdFx0X19iZTE2IHByb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIFx0XHRpbnQgcmV0O1xuIFxuQEAgLTI5OCw5ICsyOTgsMTIgQEAgc3RhdGljIGludCBicGZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuIFx0XHRcdC8qIElmIHRoZSBoZWFkZXIgd2FzIGV4cGFuZGVkLCBoZWFkcm9vbSBtaWdodCBiZSB0b29cbi1cdFx0XHQgKiBzbWFsbCBmb3IgTDIgaGVhZGVyIHRvIGNvbWUsIGV4cGFuZCBhcyBuZWVkZWQuXG4rXHRcdFx0ICogc21hbGwgZm9yIHRoZSBMMiBoZWFkZXIgdG8gY29tZSwgZXhwYW5kIGFzIG5lZWRlZC5cbitcdFx0XHQgKiBuZWlnaF9oaF9vdXRwdXQoKSBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgaW5cbitcdFx0XHQgKiBISF9EQVRBX01PRCBhbGlnbmVkIGNodW5rcywgc28gbWF0Y2ggdGhlIHJlc2VydmF0aW9uXG4rXHRcdFx0ICogbWFkZSBiZWZvcmUgTFdUIHhtaXQuXG4gXHRcdFx0ICovXG4tXHRcdFx0cmV0ID0geG1pdF9jaGVja19oaGxlbihza2IsIGhoX2xlbik7XG4rXHRcdFx0cmV0ID0geG1pdF9jaGVja19oZWFkcm9vbShza2IsIGhyb29tKTtcbiBcdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxNDoxMi43NTU4NzQxMzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk1MDc2MjcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBMV1QgQlBGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5ldC9jb3JlL2x3dF9icGYuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHRyYW5zbWl0IHBhdGguIEl0J3MgY2hhbmdpbmcgYHhtaXRfY2hlY2tfaGhsZW5gIHRvIGB4bWl0X2NoZWNrX2hlYWRyb29tYCwgYW5kIHRoZSBhcmd1bWVudCBpcyBzaGlmdGluZyBmcm9tIGBoaF9sZW5gIHRvIGBocm9vbWAuIEltbWVkaWF0ZWx5LCB0aGUgYGhyb29tYCBjYWxjdWxhdGlvbiBsb29rcyBkaWZmZXJlbnQ7IGl0J3MgdXNpbmcgYExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cdTAwM2VkZXYpYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IHB1bGxpbmcgYGRzdC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYC4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBmb2N1cyBvbi4gV2hhdCdzIGBMTF9SRVNFUlZFRF9TUEFDRWAgZG9pbmc/IFRoYXQncyBrZXkuXG5cblRoZSBjYWxjdWxhdGlvbiBpbnNpZGUgYHhtaXRfY2hlY2tfaGVhZHJvb21gIGhhcyBhbHNvIHNoaWZ0ZWQuIEl0J3Mgbm93IGBocm9vbSAtIHNrYl9oZWFkcm9vbShza2IpYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYEhIX0RBVEFfQUxJR05gIGRhbmNlLiBUaGF0IHNlZW1zIHNpbXBsZXIsIGJ1dCBsZXQncyBtYWtlIHN1cmUgaXQncyBjb3JyZWN0LlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgbWVtb3J5IHNhZmV0eS4gV2UncmUgZGVhbGluZyB3aXRoIGhlYWRyb29tLiBXZSBrbm93IHRoYXQgYHBza2JfZXhwYW5kX2hlYWRgIGNhbiBleHBhbmQgdGhlIGhlYWRyb29tIGlmIHRoZSBjdXJyZW50IGhlYWRyb29tIGlzIGluc3VmZmljaWVudC4gSWYgYHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBocm9vbWAsIGl0IGV4cGFuZHMgYnkgYG5oZWFkYC4gVGhhdCBleHBhbnNpb24gaXMgcHJvYmFibHkgYSBjb3B5LCBzbyB3aGF0J3Mgd3JpdHRlbiB0aGVyZT8gVGhlIGNvbW1lbnQgbWVudGlvbnMgYG5laWdoX2hoX291dHB1dGAgYW5kIGNhY2hpbmcuIEl0IGNvcGllcyB0aGUgY2FjaGVkIGhlYWRlciwgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcy4gVGhlIGdvYWwgaXMgdG8gbWF0Y2ggcmVzZXJ2YXRpb25zIG1hZGUgYmVmb3JlIExXVCB0cmFuc21pc3Npb24uXG5cbk9rYXksIGlzIHRoaXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgbWlnaHQgY3JlZXAgaW4/IElmIGBwc2tiX2V4cGFuZF9oZWFkYCBjcmVhdGVzIG5ldyBoZWFkcm9vbSwgaXMgaXQgdW5pbml0aWFsaXplZD8gWWVzLCBpdCBpcy4gQnV0LCBpdCdzICpoZWFkcm9vbSo7IHRoYXQgc3BhY2UgaXMgaW50ZW5kZWQgZm9yIGhlYWRlciB3cml0ZXMuIE5vdywgYG5laWdoX2hoX291dHB1dGAgd3JpdGVzIHRvIHRoZSBoZWFkcm9vbSwgd2hpY2ggbWVhbnMgaWYgdGhlIGhlYWRyb29tIGlzbid0IGxhcmdlIGVub3VnaCwgaXQgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLiBUaGFua2Z1bGx5LCBLQVNBTiB3b3VsZCBwcm9iYWJseSBjYXRjaCB0aGF0LlxuXG5CdXQsIGlzIHRoZXJlIGEgY2FzZSB3aGVyZSBpdCByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIHRob3VnaHQgaXMgdGhhdCBgbmVpZ2hfaGhfb3V0cHV0YCBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgYW5kIHRoZXJlZm9yZSByZWFkcyBmcm9tIHNvbWV3aGVyZSwgYnV0IGl0IHNob3VsZCBiZSB3cml0aW5nLCBub3QgcmVhZGluZyBmcm9tLCB0aGUgaGVhZHJvb20uXG5cblNvIHRoZSBtYWluIHBvaW50IGlzIHRoYXQgYHBza2JfZXhwYW5kX2hlYWRgICpkb2VzKiBsZWF2ZSBoZWFkcm9vbSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLiBXaGVuIGhlYWRlcnMgYXJlIGxhdGVyIHB1c2hlZCwgdGhhdCBtZW1vcnkgd2lsbCBnZXQgd3JpdHRlbiB0bywgc28gdGhlIHByb2JsZW0gbWlnaHQgbm90IGJlIHJlYWRpbmcsIGJ1dCB3cml0aW5nIGJleW9uZCBoYXJkX2hlYWRlcl9sZW4gaW4gdGhlIHdvcnN0IGNhc2UgaWYgYG5laWdoX2hoX291dHB1dGAgd3JpdGVzIHRvIGhlYWRyb29tLlxuXG5UaGUgb2xkIGNvZGUgdXNlZCBgSEhfREFUQV9BTElHTmAsIGJ1dCBub3cgd2UncmUgdXNpbmcgYGhyb29tYC4gVGhlIGNyaXRpY2FsIHRoaW5nIHRvIHVuZGVyc3RhbmQgaXMgaG93IGBMTF9SRVNFUlZFRF9TUEFDRWAgaXMgYmVpbmcgdXNlZCBhbmQgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlcy4gVGhlIG9yaWdpbmFsIHRob3VnaHQgd2FzIHRoYXQgYEhIX0RBVEFfQUxJR05gIHdhcyB0aGVyZSBmb3IgYSByZWFzb24gYW5kIHdlIGhhdmUgdG8gc2VlIGlmIHRoZSBuZXcgbG9naWMgaXMgb2theS4gYExMX1JFU0VSVkVEX1NQQUNFYCBpcyB1c3VhbGx5IGBBTElHTihkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuLCAxNikgKyAuLi5gLiBUaGlzIGlzIHRoZSBjcnV4LCB3aGF0IGRvZXMgdGhlIGFsaWdubWVudCBtZWFuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBMV1QgcGF0aD9cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjE0OjIxLjcwNjY0MDE1NloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMzQyMjk1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjgyPXN0cnVjdCBoaF9jYWNoZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMwMi0gKi9cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMwMzojZGVmaW5lIExMX1JFU0VSVkVEX1NQQUNFX0VYKGRldiwgaGxlbikgXFxcXFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzA0LVxcdCgoKChobGVuKSArIFJFQURfT05DRSgoZGV2KS1cXHUwMDNlbmVlZGVkX2hlYWRyb29tKSkgXFxcXFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzA1LVxcdCAgXFx1MDAyNiB+KEhIX0RBVEFfTU9EIC0gMSkpICsgSEhfREFUQV9NT0QpXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozMDY6I2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMwNy1cXHRMTF9SRVNFUlZFRF9TUEFDRV9FWChkZXYsIChkZXYpLVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozMDg6I2RlZmluZSBMTF9SRVNFUlZFRF9TUEFDRV9FWFRSQShkZXYsZXh0cmEpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMwOS1cXHQoKCgoZGV2KS1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgUkVBRF9PTkNFKChkZXYpLVxcdTAwM2VuZWVkZWRfaGVhZHJvb20pICsgKGV4dHJhKSkgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxNDoyNC41NDAwNjkyMTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEyMDM3NTI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBXcml0ZSBpbiBOZXR3b3JrIFBhY2tldCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYExMX1JFU0VSVkVEX1NQQUNFYCBhbGlnbnMgd2l0aCBgSEhfREFUQV9NT0RgLiBUaGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgY29kZSBjYWxjdWxhdGVkIHRoZSByZXF1aXJlZCBoZWFkcm9vbSB3aXRoIHRoaXMgbGluZTogYGludCBuaGVhZCA9IEhIX0RBVEFfQUxJR04oaGhfbGVuIC0gc2tiX2hlYWRyb29tKHNrYikpO2AsIHdoZXJlIGBISF9EQVRBX0FMSUdOYCBhbHNvIGFsaWducyB0byBgSEhfREFUQV9NT0RgLiAgYGhoX2xlbmAgd2FzIGp1c3QgdGhlIGhhcmQgaGVhZGVyIGxlbmd0aCBmb3IgdGhlIGRldmljZS4gIElmIGBza2JfaGVhZHJvb20oc2tiKWAgKHRoZSBzcGFjZSBhbHJlYWR5IGF2YWlsYWJsZSkgd2FzIGxlc3MgdGhhbiB0aGlzIGBoaF9sZW5gLCBpdCB3b3VsZCAqaW5jcmVhc2UqIHRoZSBoZWFkcm9vbSBieSB0aGF0IGFsaWduZWQgYW1vdW50LiAgRWZmZWN0aXZlbHksIHRoZSBuZXcgaGVhZHJvb20gd291bGQgYmUgdGhlIG9yaWdpbmFsIGhlYWRyb29tIHBsdXMgdGhlIGFsaWduZWQgZGlmZmVyZW5jZS5cblxuQnV0IG5vdywgYG5laWdoX2hoX291dHB1dGAgKnJlcXVpcmVzKiBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LVx1MDAzZWRldilgLCBhbmQgdGhpcyBzcGFjZSBpbmNsdWRlcyB0aGUgbmVlZGVkIGhlYWRyb29tIGFuZCBpcyBhbGlnbmVkIHRvIGBISF9EQVRBX01PRGAuIEhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJZiB0aGUgYHNrYl9oZWFkcm9vbShza2IpYCB3YXMgYWxyZWFkeSAqbGFyZ2VyKiB0aGFuIGBoaF9sZW5gIGJ1dCBzdGlsbCAqc21hbGxlciogdGhhbiB0aGUgYExMX1JFU0VSVkVEX1NQQUNFYCwgdGhlIGNvZGUgKndvdWxkbid0KiBleHBhbmQgdGhlIGhlYWRyb29tIGF0IGFsbC4gVGhhdCdzIGEgcHJvYmxlbSwgYmVjYXVzZSBgbmVpZ2hfaGhfb3V0cHV0YCBpcyBnb2luZyB0byB3cml0ZSB0aGUgY2FjaGVkIGhlYWRlciB0byB0aGUgaGVhZHJvb20sIGJ1dCBpZiB0aGUgaGVhZHJvb20gaXMgaW5zdWZmaWNpZW50LCBpdCdsbCB3cml0ZSAqYmVmb3JlKiB0aGUgYHNrYi1cdTAwM2VoZWFkYCBwb2ludGVyLCBzaW5jZSBpdCBjb3BpZXMgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcy4gVGhpcyBtZWFucyBpdCdzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUg4oCTIGFuIHVuZGVyZmxvdyDigJMgYW5kIEtBU0FOIHNob3VsZCBjYXRjaCB0aGF0LlxuXG5XYWl0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmc7IGl0J3MgS0FTQU4gdGhhdCBtYXR0ZXJzLCBub3QgbmVjZXNzYXJpbHkgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/ICBPa2F5LCBJIHRoaW5rIEknbSBzb2xpZDogIGBuZWlnaF9oaF9vdXRwdXRgIHdyaXRlcyB0byB0aGUgaGVhZHJvb20uICBJZiB0aGUgaGVhZHJvb20gaXMgdG9vIHNtYWxsLCBpdCB3cml0ZXMgb3V0IG9mIGJvdW5kcyDigJMgYSBwcmUtYHNrYi1cdTAwM2VoZWFkYCB1bmRlcmZsb3cuIEtBU0FOIGNhdGNoZXMgYW55IGtpbmQgb2Ygb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJvdGggcmVhZCBhbmQgd3JpdGUuICBObywgdGhpcyBpc24ndCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGlzc3VlOyBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIG91dC1vZi1ib3VuZHMgd3JpdGUuXG5cblJpZ2h0LCB0aW1lIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGUgYG5laWdoX2hoX291dHB1dGAgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAxNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNToxNDozMS42NjA0NDgyNjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTQxNzYwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfb3V0cHV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25laWdoYm91ci5oPTQ5MD1zdGF0aWMgaW5saW5lIGludCBuZWlnaF9oaF9icmlkZ2Uoc3RydWN0IGhoX2NhY2hlICpoaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L25laWdoYm91ci5oLTUwNi1cXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaDo1MDc6c3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfb3V0cHV0KGNvbnN0IHN0cnVjdCBoaF9jYWNoZSAqaGgsIHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgtNTA4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTQ6MzQuMDc0NjMzNjUyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTg3OTU2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgbmVpZ2hfaGhfb3V0cHV0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgbmVpZ2hfaGhfb3V0cHV0YC4gQmFzZWQgb24gdGhlIGZpbGUgbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBvdXRwdXQgcmVsYXRlZCB0byB0aGUgbmVpZ2hib3Job29kIGhvdXNlaG9sZCBkYXRhLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgZm9ybWF0PyBJcyBpdCBhIHN0YW5kYXJkIENTViwgYSBKU09OIHN0cnVjdHVyZSwgbWF5YmUgZXZlbiBhIG1vcmUgc3BlY2lhbGl6ZWQgYmluYXJ5IGZvcm1hdD8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdHJ1Y3R1cmUgc28gSSBjYW4gZWZmaWNpZW50bHkgcGFyc2UgaXQgYW5kIGJlZ2luIHRoZSBhbmFseXNpcy4gQXJlIHRoZXJlIGhlYWRlcnM/IFdoYXQgYXJlIHRoZSBrZXkgdmFyaWFibGVzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBkYXRhIHF1YWxpdHkgaXNzdWVzIEkgc2hvdWxkIGFudGljaXBhdGUsIGxpa2UgbWlzc2luZyB2YWx1ZXMgb3Igb3V0bGllcnM/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRob3NlIHBvdGVudGlhbCBhcmVhcyB0byBiZSBjb2duaXphbnQgb2YgYXMgSSBhbSB3b3JraW5nIHdpdGggdGhlIGRhdGEuIERlcGVuZGluZyBvbiBteSB3b3JrLCBJIHdpbGwgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHF1YWxpdHkgb2YgdGhpcyBkYXRhIHRvIG1ha2UgYXBwcm9wcmlhdGUgaW50ZXJwcmV0YXRpb25zLiBJIHdpbGwgbGlrZWx5IG5lZWQgdG8gaW1wb3J0IHRoZSBwYWNrYWdlIHJlbGF0ZWQgdG8gbXkgZmllbGQgYXMgd2VsbC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHdoYXRldmVyIHF1ZXN0aW9ucyBJIGFtIHRyeWluZyB0byBhbnN3ZXIgcmVnYXJkaW5nIG5laWdoYm9yaG9vZCBlZmZlY3RzIG9uIGhvdXNlaG9sZCBiZWhhdmlvciwgZGVtb2dyYXBoaWNzLCBvciB3aGF0ZXZlciBvdGhlciBzcGVjaWZpYyBtZXRyaWMgSSdtIGxvb2tpbmcgYXQuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGlzIGRhdGFzZXQgaG9sZHMgdGhlIGFuc3dlcnMgSSdtIHNlYXJjaGluZyBmb3IuIExldCdzIHNlZSB3aGF0J3MgaW4gaGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NTExNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjE0OjQwLjU5MzQzMjU3N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc3ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25laWdoYm91ci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwNyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwNzpcXHRzdGF0aWMgaW5saW5lIGludCBuZWlnaF9oaF9vdXRwdXQoY29uc3Qgc3RydWN0IGhoX2NhY2hlICpoaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNTA4OlxcdHtcXG4gNTA5OlxcdFxcdHVuc2lnbmVkIGludCBoaF9hbGVuID0gMDtcXG4gNTEwOlxcdFxcdHVuc2lnbmVkIGludCBzZXE7XFxuIDUxMTpcXHRcXHR1bnNpZ25lZCBpbnQgaGhfbGVuO1xcbiA1MTI6XFx0XFxuIDUxMzpcXHRcXHRkbyB7XFxuIDUxNDpcXHRcXHRcXHRzZXEgPSByZWFkX3NlcWJlZ2luKFxcdTAwMjZoaC1cXHUwMDNlaGhfbG9jayk7XFxuIDUxNTpcXHRcXHRcXHRoaF9sZW4gPSBSRUFEX09OQ0UoaGgtXFx1MDAzZWhoX2xlbik7XFxuIDUxNjpcXHRcXHRcXHRpZiAobGlrZWx5KGhoX2xlbiBcXHUwMDNjPSBISF9EQVRBX01PRCkpIHtcXG4gNTE3OlxcdFxcdFxcdFxcdGhoX2FsZW4gPSBISF9EQVRBX01PRDtcXG4gNTE4OlxcdFxcbiA1MTk6XFx0XFx0XFx0XFx0Lyogc2tiX3B1c2goKSB3b3VsZCBwcm9jZWVkIHNpbGVudGx5IGlmIHdlIGhhdmUgcm9vbSBmb3JcXG4gNTIwOlxcdFxcdFxcdFxcdCAqIHRoZSB1bmFsaWduZWQgc2l6ZSBidXQgbm90IGZvciB0aGUgYWxpZ25lZCBzaXplOlxcbiA1MjE6XFx0XFx0XFx0XFx0ICogY2hlY2sgaGVhZHJvb20gZXhwbGljaXRseS5cXG4gNTIyOlxcdFxcdFxcdFxcdCAqL1xcbiA1MjM6XFx0XFx0XFx0XFx0aWYgKGxpa2VseShza2JfaGVhZHJvb20oc2tiKSBcXHUwMDNlPSBISF9EQVRBX01PRCkpIHtcXG4gNTI0OlxcdFxcdFxcdFxcdFxcdC8qIHRoaXMgaXMgaW5saW5lZCBieSBnY2MgKi9cXG4gNTI1OlxcdFxcdFxcdFxcdFxcdG1lbWNweShza2ItXFx1MDAzZWRhdGEgLSBISF9EQVRBX01PRCwgaGgtXFx1MDAzZWhoX2RhdGEsXFxuIDUyNjpcXHRcXHRcXHRcXHRcXHQgICAgICAgSEhfREFUQV9NT0QpO1xcbiA1Mjc6XFx0XFx0XFx0XFx0fVxcbiA1Mjg6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTI5OlxcdFxcdFxcdFxcdGhoX2FsZW4gPSBISF9EQVRBX0FMSUdOKGhoX2xlbik7XFxuIDUzMDpcXHRcXG4gNTMxOlxcdFxcdFxcdFxcdGlmIChsaWtlbHkoc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzZT0gaGhfYWxlbikpIHtcXG4gNTMyOlxcdFxcdFxcdFxcdFxcdG1lbWNweShza2ItXFx1MDAzZWRhdGEgLSBoaF9hbGVuLCBoaC1cXHUwMDNlaGhfZGF0YSxcXG4gNTMzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBoaF9hbGVuKTtcXG4gNTM0OlxcdFxcdFxcdFxcdH1cXG4gNTM1OlxcdFxcdFxcdH1cXG4gNTM2OlxcdFxcdH0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoXFx1MDAyNmhoLVxcdTAwM2VoaF9sb2NrLCBzZXEpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTQ6NDAuNTk1NjEyOTg3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMTAyODUyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIGBuZWlnaF9oaF9vdXRwdXRgIGFuZCBpdHMgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyBgbmVpZ2hfaGhfb3V0cHV0YCBpcyB1c2luZyBgc2tiX2hlYWRyb29tKHNrYilgIHRvIGNoZWNrIGZvciBzdWZmaWNpZW50IHNwYWNlIGluIHRoZSBTb2NrZXQgQnVmZmVyIChgc2tiYCkgdXNpbmcgYEhIX0RBVEFfTU9EYCBvciBgaGhfYWxlbmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIHRoaXMgaGVhZHJvb20gaXNuJ3QgYmlnIGVub3VnaCwgdGhlcmUncyBnb2luZyB0byBiZSBhIHNraXAgb2YgdGhlIGBtZW1jcHlgIGNhbGwuIE1ha2VzIHNlbnNlIGZyb20gYSBtZW1vcnkgYWxsb2NhdGlvbiBzdGFuZHBvaW50OyBubyBwb2ludCBjb3B5aW5nIGRhdGEgd2hlcmUgdGhlcmUgaXNuJ3QgYWN0dWFsbHkgc3BhY2UhXG5cbkJ1dC4uLiAqd2hhdCBoYXBwZW5zKiBpZiB0aGF0IGBtZW1jcHlgIGdldHMgc2tpcHBlZD8gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8ga25vdyB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZG8gaW5zdGVhZCEgSSdtIGdvaW5nIHRvIGhhdmUgdG8ga2VlcCByZWFkaW5nIGFuZCBzZWUgaG93IGl0IGhhbmRsZXMgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGhlYWRyb29tIGlzIGluc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTQ6NDcuNjA1OTAxNzM5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZWlnaGJvdXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MzcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1Mzc6XFx0XFxuIDUzODpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgaGhfYWxlbikpIHtcXG4gNTM5OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA1NDA6XFx0XFx0XFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XFxuIDU0MTpcXHRcXHR9XFxuIDU0MjpcXHRcXG4gNTQzOlxcdFxcdF9fc2tiX3B1c2goc2tiLCBoaF9sZW4pO1xcbiA1NDQ6XFx0XFx0cmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7XFxuIDU0NTpcXHR9XFxuIDU0NjpcXHRcXG4gNTQ3OlxcdHN0YXRpYyBpbmxpbmUgaW50IG5laWdoX291dHB1dChzdHJ1Y3QgbmVpZ2hib3VyICpuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA1NDg6XFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgc2tpcF9jYWNoZSlcXG4gNTQ5OlxcdHtcXG4gNTUwOlxcdFxcdGNvbnN0IHN0cnVjdCBoaF9jYWNoZSAqaGggPSBcXHUwMDI2bi1cXHUwMDNlaGg7XFxuIDU1MTpcXHRcXG4gNTUyOlxcdFxcdC8qIG4tXFx1MDAzZW51ZF9zdGF0ZSBhbmQgaGgtXFx1MDAzZWhoX2xlbiBjb3VsZCBiZSBjaGFuZ2VkIHVuZGVyIHVzLlxcbiA1NTM6XFx0XFx0ICogbmVpZ2hfaGhfb3V0cHV0KCkgaXMgdGFraW5nIGNhcmUgb2YgdGhlIHJhY2UgbGF0ZXIuXFxuIDU1NDpcXHRcXHQgKi9cXG4gNTU1OlxcdFxcdGlmICghc2tpcF9jYWNoZSBcXHUwMDI2XFx1MDAyNlxcbiA1NTY6XFx0XFx0ICAgIChSRUFEX09OQ0Uobi1cXHUwMDNlbnVkX3N0YXRlKSBcXHUwMDI2IE5VRF9DT05ORUNURUQpIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjE0OjQ3LjYwNjA0MjU2OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI1OTYxNTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgSGVhZHJvb20gTW9kaWZpY2F0aW9uIGluIGBuZXQvY29yZS9sd3RfYnBmLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgaGVhZHJvb20gY2FsY3VsYXRpb24gaW4gYG5ldC9jb3JlL2x3dF9icGYuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBjaGFuZ2luZyB0aGUgY2hlY2sgZnJvbSBgeG1pdF9jaGVja19oaGxlbmAgdG8gYHhtaXRfY2hlY2tfaGVhZHJvb21gLiAgUHJldmlvdXNseSwgYHhtaXRfY2hlY2tfaGhsZW5gIHdhcyBlbnN1cmluZyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCksIGJ1dCBub3cgdGhlIGNvZGUgaXMgYWxpZ25pbmcgdGhlIGhlYWRyb29tIHJlc2VydmF0aW9uIHdpdGggYExMX1JFU0VSVkVEX1NQQUNFKGRzdC1cdTAwM2VkZXYpYC4gVGhhdCdzIHNtYXJ0OyBgTExfUkVTRVJWRURfU1BBQ0VgIGFscmVhZHkgYWNjb3VudHMgZm9yIHRoaW5ncyBsaWtlIGRldmljZS1zcGVjaWZpYyBvdmVyaGVhZCBhbmQgYWxpZ25tZW50IHJlcXVpcmVtZW50cywgcmF0aGVyIHRoYW4gYSBwb3RlbnRpYWxseSBzbWFsbGVyIGBoaF9sZW5gLlxuXG5UaGUgY29tbWVudCBpcyBrZXkgaGVyZS4gSXQgaGlnaGxpZ2h0cyB0aGF0IGBuZWlnaF9oaF9vdXRwdXRgIG1pZ2h0IHJlcXVpcmUgbW9yZSBoZWFkcm9vbSB0aGFuIGp1c3QgYGhoX2xlbmAgYmVjYXVzZSBpdCBjb3BpZXMgdGhlIGNhY2hlZCBoZWFkZXIgaW4gYEhIX0RBVEFfTU9EYCBhbGlnbmVkIGNodW5rcy4gSSByZW1lbWJlciB0aGF0IGZ1bmN0aW9uOyBpdCB1c2VzIGBISF9EQVRBX01PRGAgKHR5cGljYWxseSAxNiBieXRlcykgYWxpZ25tZW50IHdoZW4gY29weWluZyB0aGUgaGVhZGVyLCBvciBhIGxhcmdlciBgSEhfREFUQV9BTElHTihoaF9sZW4pYCBpZiB0aGUgaGVhZGVyIGlzIGxhcmdlci4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gdGhlIHByZXZpb3VzbHkgcmVzZXJ2ZWQgaGVhZHJvb20gaXMgKmp1c3QqIGVub3VnaCBmb3IgYGhoX2xlbmAsIGJ1dCBub3QgZm9yIHRoZSBhbGlnbmVkIGNvcHkuIGBuZWlnaF9oaF9vdXRwdXRgIHRoZW4gZmFpbHMgdGhlIGNoZWNrIChgc2tiX2hlYWRyb29tKHNrYikgXHUwMDNlPSBoaF9hbGVuYCkgYW5kIGRyb3BzIHRoZSBwYWNrZXQgd2l0aCBhIHdhcm5pbmcgb3IsIGluIHNvbWUgY2FzZXMsIG1pZ2h0IGNhdXNlIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgaWYgdGhhdCBjaGVjayB3YXNuJ3QgdGhlcmUuXG5cbk5vdywgd2l0aCB0aGlzIGNoYW5nZSwgYHhtaXRfY2hlY2tfaGVhZHJvb21gIGVuc3VyZXMgdGhlcmUgaXMgc3VmZmljaWVudCBoZWFkcm9vbSB0byBhY2NvdW50IGZvciB0aGlzIGxhcmdlciBjb3B5LiBgTExfUkVTRVJWRURfU1BBQ0VgIGluY2x1ZGVzIGBuZWVkZWRfaGVhZHJvb21gLCBzbyB0aGUgbmV3IGNoZWNrIHNob3VsZCBoYXZlIGVub3VnaCBoZWFkcm9vbSB0byBkZWFsIHdpdGggdGhlIGFsaWdubWVudCBuZWVkcy5cblxuTXkgbWFpbiBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgbWVtb3J5IHNhZmV0eS4gRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igd3JpdGVzPyAgTGV0J3Mgc2VlOiBgcHNrYl9leHBhbmRfaGVhZGAgKmFsbG9jYXRlcyogbW9yZSBtZW1vcnksIGJ1dCBpdCBkb2Vzbid0IGluaXRpYWxpemUgaXQuIFRoYXQncyBzdGFuZGFyZCBiZWhhdmlvci4gSG93ZXZlciwgYG5laWdoX2hoX291dHB1dGAgKndyaXRlcyogaW50byB0aGUgaGVhZHJvb20uIENydWNpYWxseSwgaXQgY29waWVzIGRhdGEgZnJvbSBgaGgtXHUwMDNlaGhfZGF0YWAuICBUaGF0J3MgKmluaXRpYWxpemVkKiBkYXRhISBUaGUgbGVuZ3RoIGNvcGllZCBpcyBgaGhfYWxlbmAuXG5cblRoZW4sIGBfX3NrYl9wdXNoKHNrYiwgaGhfbGVuKWAgYWRqdXN0cyB0aGUgcGFja2V0J3MgZGF0YSBwb2ludGVyIGFuZCBsZW5ndGgsIGluY2x1ZGluZyBvbmx5IHRoZSAqYWN0dWFsKiBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCkuIEl0IGRvZXMgKm5vdCogaW5jbHVkZSB0aGUgZXh0cmEgYnl0ZXMgY29waWVkIHRvIGFjaGlldmUgYWxpZ25tZW50OyB0aG9zZSByZW1haW4gaW4gdGhlIGhlYWRyb29tLCBiZWZvcmUgdGhlIGFjdHVhbCBkYXRhLiBUaHVzLCB0aGUgZXh0cmEgaGVhZHJvb20gYnl0ZXMgKHVwIHRvIGBoaF9hbGVuYCkgYXJlICpub3QqIHBhcnQgb2YgdGhlIHBhY2tldCBkYXRhLCBhbmQgdGhlIGRhdGEgYmVpbmcgc2VudCB0byB0aGUgTklDICppcyogaW5pdGlhbGl6ZWQuXG5cblNvLCB0aGVyZSdzIG5vIHdheSB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBiZWNhdXNlIHRoZSBzb3VyY2UgZGF0YSAoYGhoLVx1MDAzZWhoX2RhdGFgKSBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIHdlIHB1c2ggdGhlIHZhbGlkIHBhcnQsIGFuZCB0aGUgcmVzdCBpcyBoZWFkcm9vbS4gSXQncyByZWFsbHkganVzdCBmaXhpbmcgYSBidWcgd2hlcmUgd2UgZGlkbid0IGhhdmUgZW5vdWdoIGhlYWRyb29tIHRvIGhhbmRsZSB0aGUgYWxpZ25tZW50IGluIHRoZSBleGlzdGluZyBjb2RlLiBJZiB0aGUgZXhpc3RpbmcgY29kZSBkaWRuJ3QgaGF2ZSB0aGUgY2hlY2sgYHNrYl9oZWFkcm9vbShza2IpIFx1MDAzZT0gaGhfYWxlbmAsIHRoZXJlIGNvdWxkIGhhdmUgYmVlbiBvdXQgb2YgYm91bmRzIHdyaXRlLiBMdWNraWx5LCB0aGF0IGNoZWNrIGlzIGFscmVhZHkgcHJlc2VudCwgc28gdGhlIGJ1ZyBtYW5pZmVzdGVkIGFzIGEgcGFja2V0IGRyb3AsIGFuZCB0aGlzIHBhdGNoIGZpeGVzIHRoYXQuIEtBU0FOIHdvdWxkIGVhc2lseSBjYXRjaCBhbnkgcmVhbCBvdXQtb2YtYm91bmRzIGlzc3VlcywgYnV0IHRoYXQncyBub3Qgd2hhdCB0aGlzIGlzLlxuXG5TbywgdGhlIHBhdGNoIGlzIGZpeGluZyBhIGhlYWRyb29tIHNpemluZyBwcm9ibGVtLCBwcmV2ZW50aW5nIHBhY2tldCBkcm9wcyBkdWUgdG8gaW5zdWZmaWNpZW50IGhlYWRyb29tLiBJdCAqZG9lc24ndCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdl4oCZcmUgbm90IGFkZGluZyBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGhlYWRyb29tIGl0c2VsZiBpcyBjb3JyZWN0bHkgd3JpdHRlbiBiZWZvcmUgdGhlIHBhY2tldCBkYXRhIGlzIGRlZmluZWQuIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgS0FTQU4gdG9vbGluZyB3b3VsZCBmbGFnIGFueXRoaW5nIGluIHRoZSBleGlzdGluZyBjb2RlIG9yIG5ldyBjb2RlIHRoYXQgY2F1c2VzIGFuIG91dCBvZiBib3VuZHMgd3JpdGUgdG8gYW4gYWxsb2NhdGVkIGFyZWEsIGJ1dCB0aGVyZSBpcyBub3RoaW5nIHByZXNlbnQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM4OCwiT3V0cHV0VG9rZW5zIjoyNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6MTU6MTcuODY1NjYxMTE5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGVhZHJvb20gY2hlY2sgaW4gYGJwZl94bWl0YCBmb3IgTFdUIEJQRiBwcm9ncmFtcy4gSXQgcmVwbGFjZXMgYHhtaXRfY2hlY2tfaGhsZW5gIHdpdGggYHhtaXRfY2hlY2tfaGVhZHJvb21gLCBlbnN1cmluZyB0aGF0IHRoZSByZXNlcnZlZCBoZWFkcm9vbSBtYXRjaGVzIGBMTF9SRVNFUlZFRF9TUEFDRShkc3QtXFx1MDAzZWRldilgIHJhdGhlciB0aGFuIGp1c3QgdGhlIGV4YWN0IGhhcmR3YXJlIGhlYWRlciBsZW5ndGggKGBoaF9sZW5gKS4gVGhpcyBwcmV2ZW50cyBhIHNpdHVhdGlvbiB3aGVyZSBgbmVpZ2hfaGhfb3V0cHV0KClgIG1pZ2h0IGRyb3AgdGhlIHBhY2tldCBhbmQgdHJpZ2dlciBhIGBXQVJOX09OX09OQ0VgIGJlY2F1c2UgaXQgY29waWVzIHRoZSBjYWNoZWQgaGFyZHdhcmUgaGVhZGVyIGluIGBISF9EQVRBX01PRGAgYWxpZ25lZCBjaHVua3MsIHdoaWNoIHJlcXVpcmVzIG1vcmUgaGVhZHJvb20gdGhhbiBqdXN0IGBoaF9sZW5gLlxcblxcblRoaXMgaXMgYSBmaXggZm9yIGEgcGFja2V0IGRyb3AgLyB3YXJuaW5nIGlzc3VlIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tIHNpemluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IHN0cnVjdHVyZXMsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGhhcmR3YXJlLiBUaGUgaGVhZHJvb20gZXhwYW5kZWQgYnkgYHBza2JfZXhwYW5kX2hlYWRgIGlzIHN1YnNlcXVlbnRseSB3cml0dGVuIHRvIGJ5IGBuZWlnaF9oaF9vdXRwdXQoKWAgYmVmb3JlIGBfX3NrYl9wdXNoKClgIGluY2x1ZGVzIHRoZSBleGFjdCBoZWFkZXIgbGVuZ3RoIGluIHRoZSBwYWNrZXQgZGF0YS4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlbGF0ZWQgdG8gaGVhZHJvb20gd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhlYWRyb29tIGNoZWNrIGluIGBicGZfeG1pdGAgZm9yIExXVCBCUEYgcHJvZ3JhbXMuIEl0IHJlcGxhY2VzIGB4bWl0X2NoZWNrX2hobGVuYCB3aXRoIGB4bWl0X2NoZWNrX2hlYWRyb29tYCwgZW5zdXJpbmcgdGhhdCB0aGUgcmVzZXJ2ZWQgaGVhZHJvb20gbWF0Y2hlcyBgTExfUkVTRVJWRURfU1BBQ0UoZHN0LVxcdTAwM2VkZXYpYCByYXRoZXIgdGhhbiBqdXN0IHRoZSBleGFjdCBoYXJkd2FyZSBoZWFkZXIgbGVuZ3RoIChgaGhfbGVuYCkuIFRoaXMgcHJldmVudHMgYSBzaXR1YXRpb24gd2hlcmUgYG5laWdoX2hoX291dHB1dCgpYCBtaWdodCBkcm9wIHRoZSBwYWNrZXQgYW5kIHRyaWdnZXIgYSBgV0FSTl9PTl9PTkNFYCBiZWNhdXNlIGl0IGNvcGllcyB0aGUgY2FjaGVkIGhhcmR3YXJlIGhlYWRlciBpbiBgSEhfREFUQV9NT0RgIGFsaWduZWQgY2h1bmtzLCB3aGljaCByZXF1aXJlcyBtb3JlIGhlYWRyb29tIHRoYW4ganVzdCBgaGhfbGVuYC5cXG5cXG5UaGlzIGlzIGEgZml4IGZvciBhIHBhY2tldCBkcm9wIC8gd2FybmluZyBpc3N1ZSByZWxhdGVkIHRvIGJ1ZmZlciBoZWFkcm9vbSBzaXppbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBzdHJ1Y3R1cmVzLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBoYXJkd2FyZS4gVGhlIGhlYWRyb29tIGV4cGFuZGVkIGJ5IGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSBgbmVpZ2hfaGhfb3V0cHV0KClgIGJlZm9yZSBgX19za2JfcHVzaCgpYCBpbmNsdWRlcyB0aGUgZXhhY3QgaGVhZGVyIGxlbmd0aCBpbiB0aGUgcGFja2V0IGRhdGEuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyByZWxhdGVkIHRvIGhlYWRyb29tIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowqdc54[1] Phase: Succeeded StartedAt: 2026-08-11 05:15:29 +0000 UTC FinishedAt: 2026-08-11 05:15:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 05:15:29 +0000 UTC FinishedAt: 2026-08-11 05:15:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2] Phase: Succeeded StartedAt: 2026-08-11 05:15:29 +0000 UTC FinishedAt: 2026-08-11 08:57:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 05:15:29 +0000 UTC FinishedAt: 2026-08-11 08:57:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 05:15:29 +0000 UTC FinishedAt: 2026-08-11 05:15:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 05:15:29 +0000 UTC FinishedAt: 2026-08-11 05:15:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowqdc54/series-workflowqdc54-convert-artifact-2279939040/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 05:15:40 +0000 UTC FinishedAt: 2026-08-11 05:33:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 05:15:40 +0000 UTC FinishedAt: 2026-08-11 05:33:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*be6c86c8-8d8b-4c16-8067-1f8cabc6551e,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-workflowqdc54/series-workflowqdc54-convert-artifact-2279939040/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": "22abcbcc-dc09-49aa-8271-ee2b88be2387", "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-workflowqdc54/series-workflowqdc54-build-action-2345503398/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 05:15:40 +0000 UTC FinishedAt: 2026-08-11 05:33:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*be6c86c8-8d8b-4c16-8067-1f8cabc6551e,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-workflowqdc54/series-workflowqdc54-convert-artifact-2279939040/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": "22abcbcc-dc09-49aa-8271-ee2b88be2387", "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-workflowqdc54/series-workflowqdc54-build-action-2345503398/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 05:33:50 +0000 UTC FinishedAt: 2026-08-11 05:33:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 05:33:50 +0000 UTC FinishedAt: 2026-08-11 05:33:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 05:33:50 +0000 UTC FinishedAt: 2026-08-11 05:34:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 05:33:50 +0000 UTC FinishedAt: 2026-08-11 05:33:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowqdc54/series-workflowqdc54-convert-artifact-1117654791/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 05:34:00 +0000 UTC FinishedAt: 2026-08-11 05:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 05:34:00 +0000 UTC FinishedAt: 2026-08-11 05:35:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*22abcbcc-dc09-49aa-8271-ee2b88be2387,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-workflowqdc54/series-workflowqdc54-build-action-2345503398/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-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 05:36:00 +0000 UTC FinishedAt: 2026-08-11 05:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 05:36:00 +0000 UTC FinishedAt: 2026-08-11 05:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 05:36:00 +0000 UTC FinishedAt: 2026-08-11 05:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 05:36:00 +0000 UTC FinishedAt: 2026-08-11 05:52:06 +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:*be6c86c8-8d8b-4c16-8067-1f8cabc6551e,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-workflowqdc54/series-workflowqdc54-convert-artifact-1117654791/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": "08e2f30d-0a4b-434f-b445-7af8945d5f18", "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-workflowqdc54/series-workflowqdc54-build-action-3510108299/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 05:36:00 +0000 UTC FinishedAt: 2026-08-11 05:51:56 +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:*be6c86c8-8d8b-4c16-8067-1f8cabc6551e,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-workflowqdc54/series-workflowqdc54-convert-artifact-1117654791/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": "08e2f30d-0a4b-434f-b445-7af8945d5f18", "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-workflowqdc54/series-workflowqdc54-build-action-3510108299/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 05:52:06 +0000 UTC FinishedAt: 2026-08-11 05:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 05:52:06 +0000 UTC FinishedAt: 2026-08-11 05:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 05:52:06 +0000 UTC FinishedAt: 2026-08-11 05:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 05:52:06 +0000 UTC FinishedAt: 2026-08-11 05:53:58 +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:*08e2f30d-0a4b-434f-b445-7af8945d5f18,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-workflowqdc54/series-workflowqdc54-build-action-3510108299/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-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 05:54:08 +0000 UTC FinishedAt: 2026-08-11 08:57:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 05:54:08 +0000 UTC FinishedAt: 2026-08-11 08:57:22 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"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:*22abcbcc-dc09-49aa-8271-ee2b88be2387,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*08e2f30d-0a4b-434f-b445-7af8945d5f18,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-workflowqdc54/series-workflowqdc54-build-action-2345503398/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-workflowqdc54/series-workflowqdc54-build-action-3510108299/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 05:54:08 +0000 UTC FinishedAt: 2026-08-11 05:54:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 05:54:08 +0000 UTC FinishedAt: 2026-08-11 05:54:18 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"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-workflowqdc54/series-workflowqdc54-convert-artifact-2721657568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 05:54:08 +0000 UTC FinishedAt: 2026-08-11 05:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 05:54:08 +0000 UTC FinishedAt: 2026-08-11 05:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 05:54:08 +0000 UTC FinishedAt: 2026-08-11 05:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 05:54:28 +0000 UTC FinishedAt: 2026-08-11 08:57:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdc54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["lwtunnel_xmit","lwtunnel_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LWTUNNEL_BPF"],"series_id":"7f0ed3b7-2701-448a-b26d-e7611e2c40bc","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 05:54:28 +0000 UTC FinishedAt: 2026-08-11 08:57:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*22abcbcc-dc09-49aa-8271-ee2b88be2387,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*08e2f30d-0a4b-434f-b445-7af8945d5f18,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-workflowqdc54/series-workflowqdc54-build-action-2345503398/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-workflowqdc54/series-workflowqdc54-build-action-3510108299/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-workflowqdc54/series-workflowqdc54-convert-artifact-2721657568/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,}