Name: series-workflowrqwns Phase: Succeeded StartedAt: 2026-09-09 04:35:47 +0000 UTC FinishedAt: 2026-09-09 08:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[0] Phase: Succeeded StartedAt: 2026-09-09 04:35:47 +0000 UTC FinishedAt: 2026-09-09 04:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 04:35:47 +0000 UTC FinishedAt: 2026-09-09 04:37:52 +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": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "77b9809d-3eff-4296-ab62-69a862f0a9a9" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "reparent_dynptr_slices_on_func_exit", "prepare_func_exit", "process_bpf_exit_full" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19icGZfZXhpdF9mdWxsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBkeW5wdHIgdHJhY2tpbmcgbG9naWMgZHVyaW5nIHN1YnByb2dyYW0gZXhpdHMgKGBwcmVwYXJlX2Z1bmNfZXhpdGApLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgIHRvIHVwZGF0ZSBgcGFyZW50X2lkYCByZWZlcmVuY2VzIG9mIGVzY2FwZWQgUFRSX1RPX01FTSBkYXRhIHNsaWNlcyBmcm9tIGEgY2FsbGVlIGZyYW1lJiMzOTtzIGR5bnB0ciB0byB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCBJRCBiZWZvcmUgdGhlIGNhbGxlZSBmcmFtZSBzdGF0ZSBpcyBmcmVlZC5cblxuVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBhIGR5bnB0ciBpcyByZWxlYXNlZC9zdWJtaXR0ZWQgaW4gY2FsbGVyIGZyYW1lcywgYW55IGVzY2FwZWQgc2xpY2VzIGRlcml2ZWQgZnJvbSBjbG9uZWQgZHlucHRycyBpbiBzdWJwcm9ncmFtcyBhcmUgcHJvcGVybHkgaW52YWxpZGF0ZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIHByb2dyYW1zLlxuXG5BbmFseXNpcyBmb3Igc2FuaXRpemVyIHJlcXVpcmVtZW50czpcbi0gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIChzdWNoIGFzIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBUaGUgdmVyaWZpZXIgaW50ZXJuYWwgc3RydWN0dXJlcyAoYGJwZl92ZXJpZmllcl9zdGF0ZWAsIGBicGZfZnVuY19zdGF0ZWAsIGBicGZfcmVnX3N0YXRlYCkgYWNjZXNzZWQgaW4gYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgIGFyZSBhbHJlYWR5IG1hbmFnZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSB2ZXJpZmllciBmcmFtZXdvcmsuXG4tIEFueSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaW1wcm9wZXIgZHlucHRyIGxpZmV0aW1lIHRyYWNraW5nIHdvdWxkIG1hbmlmZXN0IGFzIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyB3aGVuIHVud2luZGluZyBjYWxsIGZyYW1lcyBvbiBmdW5jdGlvbiBleGl0LCBhZGRpbmcgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQgdG8gcHJlc2VydmUgcGFyZW50LWNoaWxkIHRyYWNraW5nIG9mIGR5bnB0ciBzbGljZXMgdGhhdCBlc2NhcGUgdG8gY2FsbGVyIGZyYW1lcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIHN1YnN5c3RlbSBjb2RlIHJlYWNoYWJsZSB2aWEgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZiNjkyOTZkOTYwYzIzMDEzMTAzNmVjMzcyYWU2MWQ1ZDIxNTBiNzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM2OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZDFlMGIxYTdkMGEzZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtODAwLDYgJiM0Mzs4MDAsMzkgQEAgc3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXG4gXHRyZXR1cm4gcmVmX2NudDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuJiM0MztcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhbGxlZS1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXHUwMDI2Y2FsbGVlLVx1MDAzZXN0YWNrW2ldO1xuJiM0MztcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKmR5bnB0ciA9IFx1MDAyNnNsb3QtXHUwMDNlc3BpbGxlZF9wdHI7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxuJiM0MztcdFx0ICAgICFkeW5wdHItXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcbiYjNDM7XHRcdCAgICAhZHlucHRyX3R5cGVfcmVmZXJlbmNlZChkeW5wdHItXHUwMDNlZHlucHRyLnR5cGUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQSBjYWxsZWUgY2FuIHNwaWxsIGEgc2xpY2UgZGVyaXZlZCBmcm9tIGl0cyBsb2NhbCBkeW5wdHIgaW50b1xuJiM0MztcdFx0ICogdGhlIGNhbGxlciYjMzk7cyBzdGFjay4gVGhlIHNsaWNlIHRoZW4gb3V0bGl2ZXMgdGhlIGR5bnB0ciBpZCB0aGF0XG4mIzQzO1x0XHQgKiBsaW5rcyBpdCB0byB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IHRyZWUuIFByZXNlcnZlIHRoYXQgbGluayBieVxuJiM0MztcdFx0ICogbWFraW5nIGVzY2FwZWQgc2xpY2VzIGNoaWxkcmVuIG9mIHRoZSBkeW5wdHImIzM5O3MgcGFyZW50IGJlZm9yZVxuJiM0MztcdFx0ICogdGhlIGNhbGxlZSBmcmFtZSBpcyBmcmVlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUodnN0YXRlLCBzdGF0ZSwgcmVnLCAoe1xuJiM0MztcdFx0XHRpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy1cdTAwM2VwYXJlbnRfaWQgIT0gZHlucHRyLVx1MDAzZWlkIHx8XG4mIzQzO1x0XHRcdCAgICBiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSBkeW5wdHItXHUwMDNlcGFyZW50X2lkO1xuJiM0MztcdFx0fSkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiB7XG5AQCAtMTAzOTksNiAmIzQzOzEwNDMyLDcgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuIFx0XHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZXItXHUwMDNlZnJhbWVubywgdHJ1ZSk7XG4gXHR9XG4gXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcbiYjNDM7XHRyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4gXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcbiBcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xuIFx0ZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuaW5kZXggMWNkNjFkNzJjMTY2Zi4uMDcwNDY2MmNkMzJmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuQEAgLTE4OTIsNiAmIzQzOzE4OTIsNTIgQEAgaW50IGNsb25lX2ludmFsaWRhdGU0KHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTtcbiYjNDM7XG4mIzQzO1x0YnBmX2R5bnB0cl9jbG9uZShwdHIsIFx1MDAyNmNsb25lKTtcbiYjNDM7XHQqZGF0YSA9IGJwZl9keW5wdHJfZGF0YShcdTAwMjZjbG9uZSwgMCwgc2l6ZW9mKHZhbCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBIHNsaWNlIHRoYXQgZXNjYXBlcyB0aGUgY2xvbmUmIzM5O3MgY2FsbCBmcmFtZSByZW1haW5zIHZhbGlkIHdoaWxlIHRoZVxuJiM0MzsgKiBzaGFyZWQgcmluZ2J1ZiByZXNlcnZhdGlvbiBpcyBsaXZlLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0Oz9yYXdfdHBcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfdmFsaWQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuJiM0MztcdGludCAqZGF0YSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbiYjNDM7XHRjbG9uZV9zbGljZV9pbl9zdWJwcm9nKFx1MDAyNnB0ciwgXHUwMDI2ZGF0YSk7XG4mIzQzO1x0aWYgKGRhdGEpXG4mIzQzO1x0XHQqZGF0YSA9IDEyMztcbiYjNDM7XHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFx1MDAyNnB0ciwgMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZWxlYXNpbmcgdGhlIHNoYXJlZCByZXNlcnZhdGlvbiBtdXN0IGludmFsaWRhdGUgYSBzbGljZSB0aGF0IGVzY2FwZWRcbiYjNDM7ICogZnJvbSBhIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4mIzQzO1x0aW50ICpkYXRhID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuJiM0MztcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFx1MDAyNnB0ciwgMCk7XG4mIzQzO1x0aWYgKGRhdGEpXG4mIzQzO1x0XHQqZGF0YSA9IDEyMztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlc1xuICAqIG9mIGl0cyBwYXJlbnRcbiAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0JiMzNDssCiAgICAmIzM0O3ByZXBhcmVfZnVuY19leGl0JiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfYnBmX2V4aXRfZnVsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgd2hlbiB1bndpbmRpbmcgY2FsbCBmcmFtZXMgb24gZnVuY3Rpb24gZXhpdCwgYWRkaW5nIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0IHRvIHByZXNlcnZlIHBhcmVudC1jaGlsZCB0cmFja2luZyBvZiBkeW5wdHIgc2xpY2VzIHRoYXQgZXNjYXBlIHRvIGNhbGxlciBmcmFtZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gY29kZSByZWFjaGFibGUgdmlhIGJwZihCUEZfUFJPR19MT0FELCAuLi4pIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYjY5Mjk2ZDk2MGMyMzAxMzEwMzZlYzM3MmFlNjFkNWQyMTUwYjcxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAwNDozNjo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA3MmEzZjU5OThkZDI3Li5kMWUwYjFhN2QwYTNlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC04MDAsNiAmIzQzOzgwMCwzOSBAQCBzdGF0aWMgaW50IGR5bnB0cl9yZWZfY250KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB2X3BhcmVudF9pZCkKIAlyZXR1cm4gcmVmX2NudDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJCQkJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtJmd0O2N1cl9zdGF0ZTsKJiM0MzsJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTsKJiM0MzsJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjYWxsZWUtJmd0O2FsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSAmYW1wO2NhbGxlZS0mZ3Q7c3RhY2tbaV07CiYjNDM7CQlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHlucHRyID0gJmFtcDtzbG90LSZndDtzcGlsbGVkX3B0cjsKJiM0MzsKJiM0MzsJCWlmIChzbG90LSZndDtzbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSIHx8CiYjNDM7CQkgICAgIWR5bnB0ci0mZ3Q7ZHlucHRyLmZpcnN0X3Nsb3QgfHwKJiM0MzsJCSAgICAhZHlucHRyX3R5cGVfcmVmZXJlbmNlZChkeW5wdHItJmd0O2R5bnB0ci50eXBlKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvCiYjNDM7CQkgKiB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrLiBUaGUgc2xpY2UgdGhlbiBvdXRsaXZlcyB0aGUgZHlucHRyIGlkIHRoYXQKJiM0MzsJCSAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5CiYjNDM7CQkgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0ciYjMzk7cyBwYXJlbnQgYmVmb3JlCiYjNDM7CQkgKiB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLgomIzQzOwkJICovCiYjNDM7CQlicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZSh2c3RhdGUsIHN0YXRlLCByZWcsICh7CiYjNDM7CQkJaWYgKHN0YXRlID09IGNhbGxlZSB8fCByZWctJmd0O3BhcmVudF9pZCAhPSBkeW5wdHItJmd0O2lkIHx8CiYjNDM7CQkJICAgIGJhc2VfdHlwZShyZWctJmd0O3R5cGUpICE9IFBUUl9UT19NRU0pCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJlZy0mZ3Q7cGFyZW50X2lkID0gZHlucHRyLSZndDtwYXJlbnRfaWQ7CiYjNDM7CQl9KSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQkgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpCiB7CkBAIC0xMDM5OSw2ICYjNDM7MTA0MzIsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpCiAJCXByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci0mZ3Q7ZnJhbWVubywgdHJ1ZSk7CiAJfQogCWFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpOwomIzQzOwlyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7CiAJLyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nCiAJICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovCiAJZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jCmluZGV4IDFjZDYxZDcyYzE2NmYuLjA3MDQ2NjJjZDMyZjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jCkBAIC0xODkyLDYgJiM0MzsxODkyLDUyIEBAIGludCBjbG9uZV9pbnZhbGlkYXRlNCh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIGNsb25lX3NsaWNlX2luX3N1YnByb2coc3RydWN0IGJwZl9keW5wdHIgKnB0ciwgaW50ICoqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIGNsb25lOwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Nsb25lKHB0ciwgJmFtcDtjbG9uZSk7CiYjNDM7CSpkYXRhID0gYnBmX2R5bnB0cl9kYXRhKCZhbXA7Y2xvbmUsIDAsIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBzbGljZSB0aGF0IGVzY2FwZXMgdGhlIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUgcmVtYWlucyB2YWxpZCB3aGlsZSB0aGUKJiM0MzsgKiBzaGFyZWQgcmluZ2J1ZiByZXNlcnZhdGlvbiBpcyBsaXZlLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfdmFsaWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwlpbnQgKmRhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cigmYW1wO3JpbmdidWYsIHZhbCwgMCwgJmFtcDtwdHIpOwomIzQzOwljbG9uZV9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAoZGF0YSkKJiM0MzsJCSpkYXRhID0gMTIzOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZAomIzQzOyAqIGZyb20gYSBjbG9uZSYjMzk7cyBjYWxsIGZyYW1lLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9pbnZhbGlkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHB0cjsKJiM0MzsJaW50ICpkYXRhID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoJmFtcDtyaW5nYnVmLCB2YWwsIDAsICZhbXA7cHRyKTsKJiM0MzsJY2xvbmVfc2xpY2VfaW5fc3VicHJvZygmYW1wO3B0ciwgJmFtcDtkYXRhKTsKJiM0MzsJYnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cigmYW1wO3B0ciwgMCk7CiYjNDM7CWlmIChkYXRhKQomIzQzOwkJKmRhdGEgPSAxMjM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIEludmFsaWRhdGluZyBhIGR5bnB0ciBzaG91bGQgaW52YWxpZGF0ZSBhbnkgZGF0YSBzbGljZXMKICAqIG9mIGl0cyBwYXJlbnQKICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDYzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoIGZvciBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHJldmlldyByZXF1ZXN0LiBJdCBsb29rcyBsaWtlIHRoZSB1c2VyIHdhbnRzIGFuIGV4cGVydCBhc3Nlc3NtZW50IG9mIGEgTGludXgga2VybmVsIHBhdGNoIHNlcmllcy4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTtyZSBpbnRlcmVzdGVkIGluIGl0cyBzdWl0YWJpbGl0eSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gRnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdGFzayDigJMgcHJpbWFyaWx5IGRlZmVuc2l2ZSBhbmQgUUEgZm9jdXNlZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBObyByZWQgZmxhZ3MgZm9yIG9mZmVuc2l2ZSBleHBsb2l0cyBvciBtYWx3YXJlIGdlbmVyYXRpb24gYXJlIGltbWVkaWF0ZWx5IGFwcGFyZW50LCB3aGljaCBpcyBhbHdheXMgYSByZWxpZWYuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgdGhlc2UgY2hhbmdlczoKCiogICBUaGUga2VybmVsIHNpZGUgYWRkZWQgdGhlIGZ1bmN0aW9uIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuCiogICBUaGlzIG5ldyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYHByZXBhcmVfZnVuY19leGl0YCBmdW5jdGlvbi4KKiAgIFRoZSBzZWNvbmQgZmlsZSBhZGRlZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNgIHdoaWNoIGFwcGVhcnMgdG8gY29udGFpbiB0ZXN0cyByZWxhdGVkIHRvIGhhbmRsaW5nIEJQRiBkeW5wdHIgc2xpY2VzIHdoZW4gZXhpdGluZyBhIGZ1bmN0aW9uIGNhbGwgZnJhbWUgYW5kIHRoZSByZXBhcmVudGluZyBsb2dpYy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzIGFyZSBwcmV0dHkgY2xlYXIuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgdXN1YWwgdG9vbHMsIGxpa2VseSBhIGNvbWJpbmF0aW9uIG9mIGBncmVwcGVyYCBhbmQgc29tZSBmaWxlIHJlYWRpbmcsIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZmlsZS4gSSYjMzk7bGwgZm9jdXMgcGFydGljdWxhcmx5IG9uIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGZ1bmN0aW9uIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAgYW5kIHdoZXJlIGBwcmVwYXJlX2Z1bmNfZXhpdGAgaXMgY2FsbGVkLiBUaGlzIGluaXRpYWwgaW5zcGVjdGlvbiBzaG91bGQgcmV2ZWFsIGFueSBpbW1lZGlhdGUgY29uY2VybnMgb3IgcG90ZW50aWFsIHBpdGZhbGxzIHRoYXQgc3l6a2FsbGVyIG1pZ2h0IGVuY291bnRlciBkdXJpbmcgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjaGFuZ2VzIG1pZ2h0IGltcGFjdCBjb2RlIGNvdmVyYWdlLCBpbnB1dCBoYW5kbGluZywgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGludHJvZHVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz03ODQ9c3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwMi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MDM6c3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDQtXHRcdFx0XHRcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzY3PXN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MzQtXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQzNTpcdHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQzNi1cdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5OTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkJQRiBWZXJpZmllciBEZWVwIERpdmUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgQlBGIHZlcmlmaWVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgaHVuY2ggaXMgdGhhdCB0aGUgcmVsZXZhbnQgbG9naWMgaXMgbGlrZWx5IG5lc3RsZWQgc29tZXdoZXJlIGJldHdlZW4gbGluZXMgODAwIGFuZCA4NDAuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHJhbmdlIGZvciBhIGNvcmUgZnVuY3Rpb24gZGVhbGluZyB3aXRoIHRoYXQgcGFydGljdWxhciB2ZXJpZmljYXRpb24gYXNwZWN0LCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkgZnJvbSB0aGUgbGFzdCB0aW1lIEkgd2FzIGluIHRoaXMgcGFydCBvZiB0aGUgY29kZWJhc2UuIExldCYjMzk7cyBkaXZlIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgY2hlY2tzIG9yIHRyYW5zZm9ybWF0aW9ucyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODAwOlx0XHRyZXR1cm4gcmVmX2NudDtcbiA4MDE6XHR9XG4gODAyOlx0XG4gODAzOlx0c3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiA4MDQ6XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbiA4MDU6XHR7XG4gODA2Olx0XHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuIDgwNzpcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcbiA4MDg6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4gODA5Olx0XHRpbnQgaTtcbiA4MTA6XHRcbiA4MTE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhbGxlZS1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7XG4gODEyOlx0XHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4gODEzOlx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSBcdTAwMjZzbG90LVx1MDAzZXNwaWxsZWRfcHRyO1xuIDgxNDpcdFxuIDgxNTpcdFx0XHRpZiAoc2xvdC1cdTAwM2VzbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSIHx8XG4gODE2Olx0XHRcdCAgICAhZHlucHRyLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XG4gODE3Olx0XHRcdCAgICAhZHlucHRyX3R5cGVfcmVmZXJlbmNlZChkeW5wdHItXHUwMDNlZHlucHRyLnR5cGUpKVxuIDgxODpcdFx0XHRcdGNvbnRpbnVlO1xuIDgxOTpcdFxuIDgyMDpcdFx0XHQvKlxuIDgyMTpcdFx0XHQgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvXG4gODIyOlx0XHRcdCAqIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2suIFRoZSBzbGljZSB0aGVuIG91dGxpdmVzIHRoZSBkeW5wdHIgaWQgdGhhdFxuIDgyMzpcdFx0XHQgKiBsaW5rcyBpdCB0byB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IHRyZWUuIFByZXNlcnZlIHRoYXQgbGluayBieVxuIDgyNDpcdFx0XHQgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0ciYjMzk7cyBwYXJlbnQgYmVmb3JlXG4gODI1Olx0XHRcdCAqIHRoZSBjYWxsZWUgZnJhbWUgaXMgZnJlZWQuXG4gODI2Olx0XHRcdCAqL1xuIDgyNzpcdFx0XHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZSh2c3RhdGUsIHN0YXRlLCByZWcsICh7XG4gODI4Olx0XHRcdFx0aWYgKHN0YXRlID09IGNhbGxlZSB8fCByZWctXHUwMDNlcGFyZW50X2lkICE9IGR5bnB0ci1cdTAwM2VpZCB8fFxuIDgyOTpcdFx0XHRcdCAgICBiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXG4gODMwOlx0XHRcdFx0XHRjb250aW51ZTtcbiA4MzE6XHRcdFx0XHRyZWctXHUwMDNlcGFyZW50X2lkID0gZHlucHRyLVx1MDAzZXBhcmVudF9pZDtcbiA4MzI6XHRcdFx0fSkpO1xuIDgzMzpcdFx0fVxuIDgzNDpcdH1cbiA4MzU6XHRcbiA4MzY6XHRzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiA4Mzc6XHRcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiA4Mzg6XHR7XG4gODM5Olx0XHRpbnQgZXJyID0gMDtcbiA4NDA6XHRcbiA4NDE6XHRcdC8qIFdlIGFsd2F5cyBlbnN1cmUgdGhhdCBTVEFDS19EWU5QVFIgaXMgbmV2ZXIgc2V0IHBhcnRpYWxseSxcbiA4NDI6XHRcdCAqIGhlbmNlIGp1c3QgY2hlY2tpbmcgZm9yIHNsb3RfdHlwZVswXSBpcyBlbm91Z2guIFRoaXMgaXNcbiA4NDM6XHRcdCAqIGRpZmZlcmVudCBmb3IgU1RBQ0tfU1BJTEwsIHdoZXJlIGl0IG1heSBiZSBvbmx5IHNldCBmb3JcbiA4NDQ6XHRcdCAqIDEgYnl0ZSwgc28gY29kZSBoYXMgdG8gdXNlIGlzX3NwaWxsZWRfcmVnLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJQRiBWZXJpZmllciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBCUEYgdmVyaWZpZXIgYW5kIHRoZSBgc3lzX2JwZmAgc3lzdGVtIGNhbGwuIE15IGZpcnN0IHN0ZXAgaXMgdG8gbG9jYXRlIHdoZXJlIHRoZSB2ZXJpZmllciBjb2RlIGl0c2VsZiByZXNpZGVzOyBJIGtub3cgdGhhdCYjMzk7cyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IHdoYXQgS2NvbmZpZyBzZXR0aW5ncyBhY3R1YWxseSBlbmFibGUgdGhhdCBmaWxlJiMzOTtzIGNvbXBpbGF0aW9uPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoZSBjb2RlIHRvIHRoZSBjb25maWd1cmF0aW9uLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0byBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLCBzaW5jZSB0aGF0IG9mdGVuIGhhbmRsZXMgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBLY29uZmlnIHN5bWJvbHMuIEZhaWxpbmcgdGhhdCwgYGluaXQvS2NvbmZpZ2Agb3IsIG1vcmUgbGlrZWx5LCBga2VybmVsL2JwZi9LY29uZmlnYCB3b3VsZCBiZSB0aGUgbmV4dCBsb2dpY2FsIHBsYWNlcyB0byBleGFtaW5lLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBNYWtlZmlsZSB0byBzZWUgaWYgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgZHJpdmVuIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyaWZpZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQyOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyBwcmV0dHkgY2xlYXI6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQ09ORklHX0JQRl9TWVNDQUxMYC4gSSBrbm93IHRoYXQmIzM5O3MgdGhlIGNvbmZpZyB2YXJpYWJsZSBJJiMzOTttIGNvbmNlcm5lZCB3aXRoLiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBmb3IgbWUsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYGluaXQvS2NvbmZpZ2AgYW5kIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgcGVyaGFwcyBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBvciBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQgYmVmb3JlIGBDT05GSUdfQlBGX1NZU0NBTExgIGNhbiBiZSBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIHRoaW5ncyBsaWtlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIG9yIG90aGVyIGxvZ2ljIHRoYXQgZ292ZXJucyB3aGVuIHRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZS4gTGV0JiMzOTtzIGdldCBjcmFja2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEJQRl9TWVNDQUxMIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYGNvbmZpZyBCUEZfU1lTQ0FMTGAuIE15IGltbWVkaWF0ZSBhcHByb2FjaCBpcyB0byBsb2NhdGUgd2hlcmUgdGhpcyBwcmVwcm9jZXNzb3Igc3ltYm9sIGlzIGRlY2xhcmVkLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBteSBodW5jaCBpcyB0aGF0IGl0JiMzOTtsbCBiZSBpbiBvbmUgb2YgdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLiBUaGUgY2hhbGxlbmdlIGlzIG5hcnJvd2luZyBkb3duICp3aGljaCogS2NvbmZpZyBmaWxlLiBJJiMzOTtsbCBsaWtlbHkgc3RhcnQgd2l0aCBhIGBmaW5kYCBvciBgZ3JlcGAgc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBwb3NzaWJseSBsaW1pdGluZyB0aGUgc2VhcmNoIHRvIHRoZSBgS2NvbmZpZ2Agb3IgYENvbmZpZy5pbmAgZmlsZXMgdG8gcmVkdWNlIG5vaXNlLiBJJiMzOTtsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNyb3NzLXJlZmVyZW5jZXMgYW5kIGRlcGVuZGVuY2llcywgYXMgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBtaWdodCBiZSBuZXN0ZWQgdW5kZXIgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgaGF2ZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBpbmZsdWVuY2UgaXRzIHByZXNlbmNlLiBNeSBhaW0gaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgZmlsZSBhbmQgc3BlY2lmaWMgc2VjdGlvbiB3aGVyZSBgQlBGX1NZU0NBTExgIGlzIGRlY2xhcmVkIGFuZCBwb3RlbnRpYWxseSBzZWUgaXRzIGRlZmF1bHQgdmFsdWUsIGhlbHAgdGV4dCwgYW5kIGFueSBvdGhlciByZWxldmFudCBkZXBlbmRlbmNpZXMuIEZyb20gdGhlcmUsIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3Qgb24gdGhlIGtlcm5lbCBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQlBGIEtjb25maWcgSW5zcGVjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2NvcGUgb3V0IGFyb3VuZCBsaW5lIDI3LiBJdCYjMzk7cyBhIGdlbmVyYWwgYXBwcm9hY2ggd2hlbiBzdGFydGluZyBhbiBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUgY29kZWJhc2UsIHRoYXQgS2NvbmZpZyBmaWxlcyBhcmUgZXNzZW50aWFsIGluIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGhlIHNwZWNpZmljIGxpbmUgbnVtYmVyIGlzIGp1c3QgYSBzdGFydGluZyBwb2ludDsgaXQmIzM5O3MgbGlrZWx5IGEgZm9jYWwgYXJlYSwgZWl0aGVyIGEgbWFpbiBzZWN0aW9uLCBvciBzb21ldGhpbmcgdGhhdCBicmFuY2hlcyBvdXQgaW50byBtdWx0aXBsZSByZWxldmFudCBvcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBhbnkgaW1tZWRpYXRlIGNsdWVzIHRoYXQgZ2l2ZSBhbiBpbmRpY2F0aW9uIG9mIGhvdyBCUEYgaXMgZW5hYmxlZC9kaXNhYmxlZCBvciBjb25maWd1cmVkLiBUaGlzIHByZWxpbWluYXJ5IHNjYW4gd2lsbCBwcm92aWRlIGEgcm9hZG1hcCBmb3IgZGVlcGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XG4gIDIxOlx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiAgMjI6XHRjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuICAyMzpcdFx0Ym9vbFxuICAyNDpcdFxuICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgQlBGX1NZU0NBTEwgY2hhbmdlIGxvb2tzIGdvb2Qgb24gaXRzIG93bjsgbm8gaW1tZWRpYXRlIGJsb2NrZXJzIHRoZXJlIOKAkyBpdCYjMzk7cyBnb3QgYWxsIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzIHNvcnRlZC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIHRoZSBlQlBGIHZlcmlmaWVyLCB3aGljaCwgYXMgd2UgYWxsIGtub3csIGlzICpjcml0aWNhbCouIEl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhbmQgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCB0aGF0IGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgc3lzY2FsbCDigJMgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGV4cGxvaXRhdGlvbi4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIG1vZGlmaWNhdGlvbiB0byBgcHJlcGFyZV9mdW5jX2V4aXRgLiBJdCYjMzk7cyBjYWxsaW5nIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAsIHdoaWNoLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIG1hbmFnZXMgcmVnaXN0ZXIgc3RhdGUsIHNwZWNpZmljYWxseSBgcGFyZW50X2lkYCwgZm9yIGR5bnB0ciBzbGljZXMgd2hlbiBleGl0aW5nIHN1YnByb2dyYW1zIHdpdGhpbiB0aGUgdmVyaWZpZXIuIFNvLCB0aGlzIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUga2VybmVsIGNvZGUgaW4gYSBwcmV0dHkgdml0YWwgc3Vic3lzdGVtLiBHaXZlbiBTeXprYWxsZXImIzM5O3Mgd2VsbC1rbm93biBwcm93ZXNzIGF0IGhhbW1lcmluZyBhd2F5IGF0IEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiBhbmQgZXhlY3V0aW9uLCB0aGlzIGlzIHByYWN0aWNhbGx5IGJlZ2dpbmcgdG8gYmUgZnV6emVkLgoKU28sICp5ZXMqLCBXb3J0aEZ1enppbmcgPSB0cnVlLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb24uIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6Ci0gYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YAotIGBwcmVwYXJlX2Z1bmNfZXhpdGAKLSBgYnBmX2NoZWNrYCAob3IgYGJwZl92ZXJpZmllcl9ydW5gIG9yIGBwcmVwYXJlX2Z1bmNfZXhpdGApLgoKSSYjMzk7bGwgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHByZXBhcmVfZnVuY19leGl0YCBvciBzdXJyb3VuZGluZyBjb2RlIHRvIHNlZSB3aGF0IHRoZSBkaXJlY3QgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX2Z1bmNfZXhpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM1OT1zdGF0aWMgYm9vbCByZXR2YWxfcmFuZ2Vfd2l0aGluKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJhbmdlLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM2Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM2NzpzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjgte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDg0Nz1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNDktXHRcdFx0ICogZnJhbWUuIEEgY2FsbGJhY2sgZnJhbWUgY2Fubm90IGJlIGxlZnQgdGhhdCB3YXkgYmVjYXVzZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzUwOlx0XHRcdCAqIHByZXBhcmVfZnVuY19leGl0KCkgd291bGQgYXBwbHkgaXRzIHJldHVybiBjb250cmFjdCB0byB0aGVcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1MS1cdFx0XHQgKiB1bmtub3duIFIwIHN5bnRoZXNpemVkIGJlbG93LiBTdGFjay1kZXB0aCB2YWxpZGF0aW9uIHJlamVjdHNcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjMtXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNjQ6XHRcdFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcdTAwMjZlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzY1LVx0XHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzIyPXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MDItXHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NDAzOlx0XHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MDQtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTA5PXN0YXRpYyBpbnQgcHJvY2Vzc19icGZfZXhpdF9mdWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTE1LVx0LyogV2UgbXVzdCBkbyBjaGVja19yZWZlcmVuY2VfbGVhayBoZXJlIGJlZm9yZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTE2Olx0ICogcHJlcGFyZV9mdW5jX2V4aXQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODExNy1cdCAqIHN0YXRlLVx1MDAzZWN1cmZyYW1lIFx1MDAzZSAwLCBpdCBtYXkgYmUgYSBjYWxsYmFjayBmdW5jdGlvbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMjg6XHQvKiBUaGUgc2lkZSBlZmZlY3Qgb2YgdGhlIHByZXBhcmVfZnVuY19leGl0IHdoaWNoIGlzXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjktXHQgKiBiZWluZyBza2lwcGVkIGlzIHRoYXQgaXQgZnJlZXMgYnBmX2Z1bmNfc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTQxLVx0XHQvKiBleGl0IGZyb20gbmVzdGVkIGZ1bmN0aW9uICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxNDI6XHRcdGVyciA9IHByZXBhcmVfZnVuY19leGl0KGVudiwgXHUwMDI2ZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODE0My1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTExOAoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiA0NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBGYXZvcmFibGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgd2UgaGF2ZSBhIHByb21pc2luZyB0YXJnZXQgaGVyZS4gVGhlIHBhdGNoIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGludHJvZHVjZXMgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCDigJMgYSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uLiBJdCYjMzk7cyBpbnZva2VkIHdpdGhpbiB0aGUgc3RhdGljIGZ1bmN0aW9uIGBwcmVwYXJlX2Z1bmNfZXhpdGAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYHByb2Nlc3NfYnBmX2V4aXRfZnVsbGAgZHVyaW5nIEJQRiB2ZXJpZmljYXRpb24gd2hlbiBoYW5kbGluZyBleGl0IGluc3RydWN0aW9ucy4KCk15IG1haW4gY29uY2VybiwgYXMgYWx3YXlzLCBpcyBzeW1ib2wgY292ZXJhZ2UuIFNvLCBJIGNoZWNrZWQgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBleHBvc2VkLCBnaXZlbiB0aGF0IHRoZXkmIzM5O3JlIHN0YXRpYy4gU2luY2UgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYHZlcmlmaWVyLmNgLCB0aGV5JiMzOTtsbCBiZSBzeW1ib2xzIGluIGthbGxzeW1zICh1bmxlc3MgaW5saW5lZCBieSB0aGUgY29tcGlsZXIpLCBlc3BlY2lhbGx5IGlmIExUTyBpcyBkaXNhYmxlZCBvciB3ZSBhcmUgZGVwZW5kaW5nIG9uIGlubGluaW5nLiBBbmQsIHN5emthbGxlciBzeW1ib2wgY292ZXJhZ2Ugd29ya3Mgd2VsbCB3aXRoIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBhcmVuJiMzOTt0IGZ1bGx5IGlubGluZWQuIEluIHRoaXMgY2FzZSwgZXZlbiBpZiB0aGV5ICphcmUqIGlubGluZWQsIHRhcmdldGluZyB0aGUgY2FsbGVyIGZ1bmN0aW9ucyBsaWtlIGBwcm9jZXNzX2JwZl9leGl0X2Z1bGxgIG9yIGBwcmVwYXJlX2Z1bmNfZXhpdGAgaXMgZ29vZCBlbm91Z2guCgpUaGVyZWZvcmUsIEkmIzM5O20gaW5jbHVkaW5nIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAsIGBwcmVwYXJlX2Z1bmNfZXhpdGAsIGFuZCBgcHJvY2Vzc19icGZfZXhpdF9mdWxsYCBhcyBgRm9jdXNTeW1ib2xzYC4KCkkgYWxzbyBjb25maXJtZWQgdGhhdCBgQlBGX1NZU0NBTExgIGlzIHRoZSByZWxldmFudCBjb25maWcgZm9yIGNvbXBpbGluZyBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc28gdGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIHNwZWNpZnkgaW4gYEVuYWJsZUNvbmZpZ3NgLgoKRmluYWxseSwgYWZ0ZXIgdmVyaWZ5aW5nIGFsbCB0aGUgcGllY2VzLCBJJiMzOTttIGNvbmZpZGVudCBlbm91Z2ggdG8gbW92ZSBmb3J3YXJkLCBzbyBJJiMzOTttIHNldHRpbmcgdGhlIGZvbGxvd2luZzoKKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAKKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSBmdXp6aW5nIHZlcmRpY3QuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O3JlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0JiMzNDssICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OywgJiMzNDtwcm9jZXNzX2JwZl9leGl0X2Z1bGwmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7XWAKQW5kIEkmIzM5O20gY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCYjMzQ7LAogICAgJiMzNDtwcmVwYXJlX2Z1bmNfZXhpdCYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2JwZl9leGl0X2Z1bGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIHdoZW4gdW53aW5kaW5nIGNhbGwgZnJhbWVzIG9uIGZ1bmN0aW9uIGV4aXQsIGFkZGluZyByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCB0byBwcmVzZXJ2ZSBwYXJlbnQtY2hpbGQgdHJhY2tpbmcgb2YgZHlucHRyIHNsaWNlcyB0aGF0IGVzY2FwZSB0byBjYWxsZXIgZnJhbWVzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIGNvZGUgcmVhY2hhYmxlIHZpYSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0JiMzNDssCiAgICAmIzM0O3ByZXBhcmVfZnVuY19leGl0JiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfYnBmX2V4aXRfZnVsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgd2hlbiB1bndpbmRpbmcgY2FsbCBmcmFtZXMgb24gZnVuY3Rpb24gZXhpdCwgYWRkaW5nIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0IHRvIHByZXNlcnZlIHBhcmVudC1jaGlsZCB0cmFja2luZyBvZiBkeW5wdHIgc2xpY2VzIHRoYXQgZXNjYXBlIHRvIGNhbGxlciBmcmFtZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gY29kZSByZWFjaGFibGUgdmlhIGJwZihCUEZfUFJPR19MT0FELCAuLi4pIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGR5bnB0ciB0cmFja2luZyBsb2dpYyBkdXJpbmcgc3VicHJvZ3JhbSBleGl0cyAoYHByZXBhcmVfZnVuY19leGl0YCkuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgdG8gdXBkYXRlIGBwYXJlbnRfaWRgIHJlZmVyZW5jZXMgb2YgZXNjYXBlZCBQVFJfVE9fTUVNIGRhdGEgc2xpY2VzIGZyb20gYSBjYWxsZWUgZnJhbWUmIzM5O3MgZHlucHRyIHRvIHRoZSBkeW5wdHImIzM5O3MgcGFyZW50IElEIGJlZm9yZSB0aGUgY2FsbGVlIGZyYW1lIHN0YXRlIGlzIGZyZWVkLlxuXG5UaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGEgZHlucHRyIGlzIHJlbGVhc2VkL3N1Ym1pdHRlZCBpbiBjYWxsZXIgZnJhbWVzLCBhbnkgZXNjYXBlZCBzbGljZXMgZGVyaXZlZCBmcm9tIGNsb25lZCBkeW5wdHJzIGluIHN1YnByb2dyYW1zIGFyZSBwcm9wZXJseSBpbnZhbGlkYXRlZCwgcHJldmVudGluZyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgcHJvZ3JhbXMuXG5cbkFuYWx5c2lzIGZvciBzYW5pdGl6ZXIgcmVxdWlyZW1lbnRzOlxuLSBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGNvcHkgcGF0aHMgKHN1Y2ggYXMgYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucykgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXG4tIFRoZSB2ZXJpZmllciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIChgYnBmX3ZlcmlmaWVyX3N0YXRlYCwgYGJwZl9mdW5jX3N0YXRlYCwgYGJwZl9yZWdfc3RhdGVgKSBhY2Nlc3NlZCBpbiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgYXJlIGFscmVhZHkgbWFuYWdlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIHZlcmlmaWVyIGZyYW1ld29yay5cbi0gQW55IG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyByZXN1bHRpbmcgZnJvbSBpbXByb3BlciBkeW5wdHIgbGlmZXRpbWUgdHJhY2tpbmcgd291bGQgbWFuaWZlc3QgYXMgVXNlLUFmdGVyLUZyZWUgKFVBRikgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZiNjkyOTZkOTYwYzIzMDEzMTAzNmVjMzcyYWU2MWQ1ZDIxNTBiNzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM2OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDcyYTNmNTk5OGRkMjcuLmQxZTBiMWE3ZDBhM2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTgwMCw2ICYjNDM7ODAwLDM5IEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKQogCXJldHVybiByZWZfY250OwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKJiM0MzsJCQkJCQlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi0mZ3Q7Y3VyX3N0YXRlOwomIzQzOwlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlOwomIzQzOwlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNhbGxlZS0mZ3Q7YWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9ICZhbXA7Y2FsbGVlLSZndDtzdGFja1tpXTsKJiM0MzsJCXN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSAmYW1wO3Nsb3QtJmd0O3NwaWxsZWRfcHRyOwomIzQzOwomIzQzOwkJaWYgKHNsb3QtJmd0O3Nsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHwKJiM0MzsJCSAgICAhZHlucHRyLSZndDtkeW5wdHIuZmlyc3Rfc2xvdCB8fAomIzQzOwkJICAgICFkeW5wdHJfdHlwZV9yZWZlcmVuY2VkKGR5bnB0ci0mZ3Q7ZHlucHRyLnR5cGUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgY2FsbGVlIGNhbiBzcGlsbCBhIHNsaWNlIGRlcml2ZWQgZnJvbSBpdHMgbG9jYWwgZHlucHRyIGludG8KJiM0MzsJCSAqIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2suIFRoZSBzbGljZSB0aGVuIG91dGxpdmVzIHRoZSBkeW5wdHIgaWQgdGhhdAomIzQzOwkJICogbGlua3MgaXQgdG8gdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCB0cmVlLiBQcmVzZXJ2ZSB0aGF0IGxpbmsgYnkKJiM0MzsJCSAqIG1ha2luZyBlc2NhcGVkIHNsaWNlcyBjaGlsZHJlbiBvZiB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCBiZWZvcmUKJiM0MzsJCSAqIHRoZSBjYWxsZWUgZnJhbWUgaXMgZnJlZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHsKJiM0MzsJCQlpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy0mZ3Q7cGFyZW50X2lkICE9IGR5bnB0ci0mZ3Q7aWQgfHwKJiM0MzsJCQkgICAgYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSkgIT0gUFRSX1RPX01FTSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJcmVnLSZndDtwYXJlbnRfaWQgPSBkeW5wdHItJmd0O3BhcmVudF9pZDsKJiM0MzsJCX0pKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCSAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSkKIHsKQEAgLTEwMzk5LDYgJiM0MzsxMDQzMiw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeCkKIAkJcHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLSZndDtmcmFtZW5vLCB0cnVlKTsKIAl9CiAJYWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7CiYjNDM7CXJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTsKIAkvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmcKIAkgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi8KIAlmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKaW5kZXggMWNkNjFkNzJjMTY2Zi4uMDcwNDY2MmNkMzJmMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKQEAgLTE4OTIsNiAmIzQzOzE4OTIsNTIgQEAgaW50IGNsb25lX2ludmFsaWRhdGU0KHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2xvbmVfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgY2xvbmU7CiYjNDM7CiYjNDM7CWJwZl9keW5wdHJfY2xvbmUocHRyLCAmYW1wO2Nsb25lKTsKJiM0MzsJKmRhdGEgPSBicGZfZHlucHRyX2RhdGEoJmFtcDtjbG9uZSwgMCwgc2l6ZW9mKHZhbCkpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBIHNsaWNlIHRoYXQgZXNjYXBlcyB0aGUgY2xvbmUmIzM5O3MgY2FsbCBmcmFtZSByZW1haW5zIHZhbGlkIHdoaWxlIHRoZQomIzQzOyAqIHNoYXJlZCByaW5nYnVmIHJlc2VydmF0aW9uIGlzIGxpdmUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV92YWxpZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CiYjNDM7CWludCAqZGF0YSA9IE5VTEw7CiYjNDM7CiYjNDM7CWJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKCZhbXA7cmluZ2J1ZiwgdmFsLCAwLCAmYW1wO3B0cik7CiYjNDM7CWNsb25lX3NsaWNlX2luX3N1YnByb2coJmFtcDtwdHIsICZhbXA7ZGF0YSk7CiYjNDM7CWlmIChkYXRhKQomIzQzOwkJKmRhdGEgPSAxMjM7CiYjNDM7CWJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoJmFtcDtwdHIsIDApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkCiYjNDM7ICogZnJvbSBhIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX2ludmFsaWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwlpbnQgKmRhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cigmYW1wO3JpbmdidWYsIHZhbCwgMCwgJmFtcDtwdHIpOwomIzQzOwljbG9uZV9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsJaWYgKGRhdGEpCiYjNDM7CQkqZGF0YSA9IDEyMzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlcwogICogb2YgaXRzIHBhcmVudAogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc1CgkJCQkJCQlvdXRwdXQ6IDM1MAoJCQkJCQkJdGhvdWdodHM6IDEyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIFZlcmlmaWVyIEZpeCBmb3IgRHlucHRyIFNsaWNlIFBhcmVudGFnZSBBY3Jvc3MgRnVuY3Rpb24gQm91bmRhcmllcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGEgc2VsZi10ZXN0LiBMZXQmIzM5O3MgZGlnIGluLiBJdCYjMzk7cyBhZGRpbmcgYSBuZXcgZnVuY3Rpb24sIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCwgYW5kIGNhbGxpbmcgaXQgd2l0aGluIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIFRoZSBnb2FsIGhlcmUgaXMgdG8gY29ycmVjdGx5IHRyYWNrIHRoZSAqcGFyZW50YWdlKiBvZiBkeW5hbWljIHBvaW50ZXIgKGR5bnB0cikgc2xpY2VzIHdoZW4gYSBCUEYgc3VicHJvZ3JhbSBleGl0cy4KCkkgc2VlIHRoYXQgd2hlbiBkZWFsaW5nIHdpdGggZHlucHRycywgbGlrZSB0aG9zZSB1c2VkIHdpdGggcmluZyBidWZmZXJzLCBzbGljZXMgYXJlIGNyZWF0ZWQsIGFuZCB0aGVzZSBzbGljZXMgaGF2ZSBhIGBwYXJlbnRfaWRgIHRoYXQgcmVmZXJlbmNlcyB0aGUgb3JpZ2luYWwgZHlucHRyLiBUaGUgcHJvYmxlbSBpcywgaWYgYSBzdWJwcm9ncmFtIGNyZWF0ZXMgYSBkeW5wdHIsIHRha2VzIGEgc2xpY2UsIGFuZCBzdG9yZXMgdGhhdCBzbGljZSYjMzk7cyBwb2ludGVyIGluIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2sgb3IgcmVnaXN0ZXJzLCB0aGVuIHdoZW4gdGhlIHN1YnByb2dyYW0gZXhpdHMgYW5kIHRoZSBjYWxsZWUmIzM5O3MgZHlucHRyIGlzIGZyZWVkLCB0aGUgc2xpY2UmIzM5O3MgYHBhcmVudF9pZGAgYmVjb21lcyBzdGFsZS4gVGhlIHNsaWNlIGlzIG5vdyBwb2ludGluZyB0byBhIG5vLWxvbmdlci12YWxpZCBJRC4gSWYgdGhlIGNhbGxlciB0aGVuIGF0dGVtcHRzIHRvIHN1Ym1pdCBvciByZWxlYXNlIHRoZSBvcmlnaW5hbCBwYXJlbnQgZHlucHRyLCB0aGUgc2xpY2Ugd291bGRuJiMzOTt0IGJlIGludmFsaWRhdGVkIGJlY2F1c2UgaXRzIGBwYXJlbnRfaWRgIGRvZXNuJiMzOTt0IG1hdGNoIHRoZSBuZXcsIHZhbGlkIHBhcmVudCBJRC4gVGhpcyBvcGVucyB0aGUgZG9vciB0byBhIFVzZS1BZnRlci1GcmVlIChVQUYpIGNvbmRpdGlvbiwgd2hlcmUgdGhlIEJQRiBwcm9ncmFtIGNvdWxkIGFjY2VzcyBtZW1vcnkgdGhhdCYjMzk7cyBhbHJlYWR5IGJlZW4gZnJlZWQgb3IgZXZlbiBjYXVzZSBhbiBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2UuCgpUaGlzIG5ldyBmdW5jdGlvbiBjbGV2ZXJseSB1cGRhdGVzIHRoZSBgcGFyZW50X2lkYCBvZiB0aGVzZSAmIzM0O2VzY2FwZWQmIzM0OyBzbGljZXMgKmJlZm9yZSogdGhlIGNhbGxlZSYjMzk7cyBzdGF0ZSBpcyBmcmVlZC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgY2FsbGVyJiMzOTtzIHJlZ2lzdGVycyBhbmQgc3RhY2sgdG8gZmluZCBhbnkgc2xpY2VzIHRoYXQgaGF2ZSB0aGUgbm93LXN0YWxlIHBhcmVudCBJRC4gSXQgdGhlbiB1cGRhdGVzIHRoZWlyIGBwYXJlbnRfaWRgIHRvIHBvaW50IHRvIHRoZSBwYXJlbnQgb2YgdGhlIG9yaWdpbmFsIGR5bnB0ciwgZW5zdXJpbmcgdGhlIHZlcmlmaWVyIGtub3dzIHRoYXQgdGhlIHNsaWNlIGlzIHN0aWxsIGxpbmtlZCB0byB0aGUgb3JpZ2luYWwgb2JqZWN0IHRyZWUuIFRoaXMgZWZmZWN0aXZlbHkgZml4ZXMgYSBwb3RlbnRpYWwgVUFGIHZ1bG5lcmFiaWxpdHkuCgpOb3csIGxldCYjMzk7cyBsb29rIGZvciBhbnkgaXNzdWVzIHRoZSBwYXRjaCBtaWdodCBpbnRyb2R1Y2UuIEkmIzM5O20gY2hlY2tpbmcgZm9yIHRoaW5ncyBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoKRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSB2ZXJpZmllciBzdGF0ZSB0cmFja2luZyBpdHNlbGbigJR0aGUgdXBkYXRpbmcgb2YgYHJlZy0mZ3Q7cGFyZW50X2lkYOKAlGxvb2tzIHNvdW5kLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGludGVybmFsIHZlcmlmaWVyIHN0YXRlIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlYCwgYGJwZl9mdW5jX3N0YXRlYCwgYGJwZl9yZWdfc3RhdGVgKS4gIEl0IHNlZW1zIHRvIGl0ZXJhdGUgdGhyb3VnaCAqaW5pdGlhbGl6ZWQqIHZlcmlmaWVyIHJlZ2lzdGVyIGFuZCBzdGFjayBzdGF0ZXMuIEkgZG9uJiMzOTt0IHNlZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4gVGhlcmUmIzM5O3Mgbm8gY29weWluZyBvZiBuZXcgYnVmZmVycyBvciBzdHJ1Y3RzIHRvIHVzZXJzcGFjZSwgbm8gcG90ZW50aWFsIGZvciBwYWRkaW5nIGxlYWtzLCBhbmQgbm8gYXBwYXJlbnQgdW5pbml0aWFsaXplZCBkYXRhIHVzYWdlLgoKVGhlIGJ1ZyBjbGFzcyBiZWluZyBhZGRyZXNzZWQgaXMgYSB2ZXJpZmllciBsb2dpYyBpc3N1ZS4gSWYgdGhlIHZlcmlmaWVyICpkaWQqIGhhdmUgYSBidWcgaGVyZSwgaXQgY291bGQgYWxsb3cgYSBCUEYgcHJvZ3JhbSB0byBwZXJmb3JtIGEgVUFGIG9yIE9PQiBtZW1vcnkgYWNjZXNzIGluIGtlcm5lbCBzcGFjZS4gU3VjaCBVQUYvT09CIGNvbmRpdGlvbnMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIHdoZW4gdGhlIEJQRiBwcm9ncmFtIGlzIGV4ZWN1dGVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgQlBGIHRlc3Qgc3VpdGVzIHNob3VsZCBkZXRlY3QgdmVyaWZpZXIgbG9naWMgYnVncyB0aGF0IG1pZ2h0IGxlYWQgdG8ga2VybmVsIG1lbW9yeSBjb3JydXB0aW9uIG9yIFVBRiBpc3N1ZXMuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIG1lbnRhbGx5IGNoZWNraW5nIHRoZSByb2xlcyBvZiBLTVNBTiB2ZXJzdXMgS0FTQU4uIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gS0FTQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGV0Yy4gVGhpcyBwYXRjaCwgd2l0aCBpdHMgZm9jdXMgb24gaW50ZXJuYWwgdmVyaWZpZXIgc3RhdGUgYW5kIHRoZSBsaW5raW5nIG9mIGBwYXJlbnRfaWRgcywgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBsZWFrcywgb3IgdXNlcy4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGlzIGEgS0FTQU4gaXNzdWUgKFVBRikgYW5kIG5vdCBhIEtNU0FOICh1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8gbGVhaykgaXNzdWUsIHRoaXMgcGF0Y2ggKmRvZXNuJiMzOTt0KiByZXF1aXJlIEtNU0FOLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIHByaW1hcmlseSBtb2RpZmllcyB2ZXJpZmllciBsb2dpYyB0byBwcmV2ZW50IFVBRiBjb25kaXRpb25zLCBhbmQgS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciBjbGFzcyBvZiB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGR5bnB0ciB0cmFja2luZyBsb2dpYyBkdXJpbmcgc3VicHJvZ3JhbSBleGl0cyAoYHByZXBhcmVfZnVuY19leGl0YCkuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgdG8gdXBkYXRlIGBwYXJlbnRfaWRgIHJlZmVyZW5jZXMgb2YgZXNjYXBlZCBQVFJfVE9fTUVNIGRhdGEgc2xpY2VzIGZyb20gYSBjYWxsZWUgZnJhbWUmIzM5O3MgZHlucHRyIHRvIHRoZSBkeW5wdHImIzM5O3MgcGFyZW50IElEIGJlZm9yZSB0aGUgY2FsbGVlIGZyYW1lIHN0YXRlIGlzIGZyZWVkLlxuXG5UaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGEgZHlucHRyIGlzIHJlbGVhc2VkL3N1Ym1pdHRlZCBpbiBjYWxsZXIgZnJhbWVzLCBhbnkgZXNjYXBlZCBzbGljZXMgZGVyaXZlZCBmcm9tIGNsb25lZCBkeW5wdHJzIGluIHN1YnByb2dyYW1zIGFyZSBwcm9wZXJseSBpbnZhbGlkYXRlZCwgcHJldmVudGluZyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgcHJvZ3JhbXMuXG5cbkFuYWx5c2lzIGZvciBzYW5pdGl6ZXIgcmVxdWlyZW1lbnRzOlxuLSBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGNvcHkgcGF0aHMgKHN1Y2ggYXMgYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucykgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXG4tIFRoZSB2ZXJpZmllciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIChgYnBmX3ZlcmlmaWVyX3N0YXRlYCwgYGJwZl9mdW5jX3N0YXRlYCwgYGJwZl9yZWdfc3RhdGVgKSBhY2Nlc3NlZCBpbiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgYXJlIGFscmVhZHkgbWFuYWdlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIHZlcmlmaWVyIGZyYW1ld29yay5cbi0gQW55IG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyByZXN1bHRpbmcgZnJvbSBpbXByb3BlciBkeW5wdHIgbGlmZXRpbWUgdHJhY2tpbmcgd291bGQgbWFuaWZlc3QgYXMgVXNlLUFmdGVyLUZyZWUgKFVBRikgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgZHlucHRyIHRyYWNraW5nIGxvZ2ljIGR1cmluZyBzdWJwcm9ncmFtIGV4aXRzIChgcHJlcGFyZV9mdW5jX2V4aXRgKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCB0byB1cGRhdGUgYHBhcmVudF9pZGAgcmVmZXJlbmNlcyBvZiBlc2NhcGVkIFBUUl9UT19NRU0gZGF0YSBzbGljZXMgZnJvbSBhIGNhbGxlZSBmcmFtZSYjMzk7cyBkeW5wdHIgdG8gdGhlIGR5bnB0ciYjMzk7cyBwYXJlbnQgSUQgYmVmb3JlIHRoZSBjYWxsZWUgZnJhbWUgc3RhdGUgaXMgZnJlZWQuXG5cblRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYSBkeW5wdHIgaXMgcmVsZWFzZWQvc3VibWl0dGVkIGluIGNhbGxlciBmcmFtZXMsIGFueSBlc2NhcGVkIHNsaWNlcyBkZXJpdmVkIGZyb20gY2xvbmVkIGR5bnB0cnMgaW4gc3VicHJvZ3JhbXMgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJQRiBwcm9ncmFtcy5cblxuQW5hbHlzaXMgZm9yIHNhbml0aXplciByZXF1aXJlbWVudHM6XG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyAoc3VjaCBhcyBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbi0gVGhlIHZlcmlmaWVyIGludGVybmFsIHN0cnVjdHVyZXMgKGBicGZfdmVyaWZpZXJfc3RhdGVgLCBgYnBmX2Z1bmNfc3RhdGVgLCBgYnBmX3JlZ19zdGF0ZWApIGFjY2Vzc2VkIGluIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCBhcmUgYWxyZWFkeSBtYW5hZ2VkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgdmVyaWZpZXIgZnJhbWV3b3JrLlxuLSBBbnkgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIHJlc3VsdGluZyBmcm9tIGltcHJvcGVyIGR5bnB0ciBsaWZldGltZSB0cmFja2luZyB3b3VsZCBtYW5pZmVzdCBhcyBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1cmluZyBCUEYgcHJvZ3JhbSBleGVjdXRpb24sIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjo1OS45NTgyNTk2MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNDc2Mzk4OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRcIixcbiAgICBcInByZXBhcmVfZnVuY19leGl0XCIsXG4gICAgXCJwcm9jZXNzX2JwZl9leGl0X2Z1bGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBkeW5wdHIgdHJhY2tpbmcgbG9naWMgZHVyaW5nIHN1YnByb2dyYW0gZXhpdHMgKGBwcmVwYXJlX2Z1bmNfZXhpdGApLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgIHRvIHVwZGF0ZSBgcGFyZW50X2lkYCByZWZlcmVuY2VzIG9mIGVzY2FwZWQgUFRSX1RPX01FTSBkYXRhIHNsaWNlcyBmcm9tIGEgY2FsbGVlIGZyYW1lJ3MgZHlucHRyIHRvIHRoZSBkeW5wdHIncyBwYXJlbnQgSUQgYmVmb3JlIHRoZSBjYWxsZWUgZnJhbWUgc3RhdGUgaXMgZnJlZWQuXFxuXFxuVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBhIGR5bnB0ciBpcyByZWxlYXNlZC9zdWJtaXR0ZWQgaW4gY2FsbGVyIGZyYW1lcywgYW55IGVzY2FwZWQgc2xpY2VzIGRlcml2ZWQgZnJvbSBjbG9uZWQgZHlucHRycyBpbiBzdWJwcm9ncmFtcyBhcmUgcHJvcGVybHkgaW52YWxpZGF0ZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIHByb2dyYW1zLlxcblxcbkFuYWx5c2lzIGZvciBzYW5pdGl6ZXIgcmVxdWlyZW1lbnRzOlxcbi0gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIChzdWNoIGFzIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbi0gVGhlIHZlcmlmaWVyIGludGVybmFsIHN0cnVjdHVyZXMgKGBicGZfdmVyaWZpZXJfc3RhdGVgLCBgYnBmX2Z1bmNfc3RhdGVgLCBgYnBmX3JlZ19zdGF0ZWApIGFjY2Vzc2VkIGluIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCBhcmUgYWxyZWFkeSBtYW5hZ2VkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgdmVyaWZpZXIgZnJhbWV3b3JrLlxcbi0gQW55IG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyByZXN1bHRpbmcgZnJvbSBpbXByb3BlciBkeW5wdHIgbGlmZXRpbWUgdHJhY2tpbmcgd291bGQgbWFuaWZlc3QgYXMgVXNlLUFmdGVyLUZyZWUgKFVBRikgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyB3aGVuIHVud2luZGluZyBjYWxsIGZyYW1lcyBvbiBmdW5jdGlvbiBleGl0LCBhZGRpbmcgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQgdG8gcHJlc2VydmUgcGFyZW50LWNoaWxkIHRyYWNraW5nIG9mIGR5bnB0ciBzbGljZXMgdGhhdCBlc2NhcGUgdG8gY2FsbGVyIGZyYW1lcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIHN1YnN5c3RlbSBjb2RlIHJlYWNoYWJsZSB2aWEgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6NTkuOTU4MjYzOTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjg2NzA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZiNjkyOTZkOTYwYzIzMDEzMTAzNmVjMzcyYWU2MWQ1ZDIxNTBiNzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAwNDozNjo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA3MmEzZjU5OThkZDI3Li5kMWUwYjFhN2QwYTNlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC04MDAsNiArODAwLDM5IEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxcbiBcXHRyZXR1cm4gcmVmX2NudDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVxcdTAwM2VjdXJfc3RhdGU7XFxuK1xcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XFxuK1xcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNhbGxlZS1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZjYWxsZWUtXFx1MDAzZXN0YWNrW2ldO1xcbitcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHlucHRyID0gXFx1MDAyNnNsb3QtXFx1MDAzZXNwaWxsZWRfcHRyO1xcbitcXG4rXFx0XFx0aWYgKHNsb3QtXFx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcXG4rXFx0XFx0ICAgICFkeW5wdHItXFx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XFxuK1xcdFxcdCAgICAhZHlucHRyX3R5cGVfcmVmZXJlbmNlZChkeW5wdHItXFx1MDAzZWR5bnB0ci50eXBlKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvXFxuK1xcdFxcdCAqIHRoZSBjYWxsZXIncyBzdGFjay4gVGhlIHNsaWNlIHRoZW4gb3V0bGl2ZXMgdGhlIGR5bnB0ciBpZCB0aGF0XFxuK1xcdFxcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XFxuK1xcdFxcdCAqIG1ha2luZyBlc2NhcGVkIHNsaWNlcyBjaGlsZHJlbiBvZiB0aGUgZHlucHRyJ3MgcGFyZW50IGJlZm9yZVxcbitcXHRcXHQgKiB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUodnN0YXRlLCBzdGF0ZSwgcmVnLCAoe1xcbitcXHRcXHRcXHRpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy1cXHUwMDNlcGFyZW50X2lkICE9IGR5bnB0ci1cXHUwMDNlaWQgfHxcXG4rXFx0XFx0XFx0ICAgIGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRyZWctXFx1MDAzZXBhcmVudF9pZCA9IGR5bnB0ci1cXHUwMDNlcGFyZW50X2lkO1xcbitcXHRcXHR9KSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcXG4ge1xcbkBAIC0xMDM5OSw2ICsxMDQzMiw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4gXFx0XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVxcdTAwM2VmcmFtZW5vLCB0cnVlKTtcXG4gXFx0fVxcbiBcXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcXG4rXFx0cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xcbiBcXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcXG4gXFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXFxuIFxcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXFxuaW5kZXggMWNkNjFkNzJjMTY2Zi4uMDcwNDY2MmNkMzJmMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXFxuQEAgLTE4OTIsNiArMTg5Miw1MiBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgY2xvbmU7XFxuK1xcbitcXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXFx1MDAyNmNsb25lKTtcXG4rXFx0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEoXFx1MDAyNmNsb25lLCAwLCBzaXplb2YodmFsKSk7XFxuK31cXG4rXFxuKy8qIEEgc2xpY2UgdGhhdCBlc2NhcGVzIHRoZSBjbG9uZSdzIGNhbGwgZnJhbWUgcmVtYWlucyB2YWxpZCB3aGlsZSB0aGVcXG4rICogc2hhcmVkIHJpbmdidWYgcmVzZXJ2YXRpb24gaXMgbGl2ZS5cXG4rICovXFxuK1NFQyhcXFwiP3Jhd190cFxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfdmFsaWQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcXG4rXFx0aW50ICpkYXRhID0gTlVMTDtcXG4rXFxuK1xcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFxcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFxcdTAwMjZwdHIpO1xcbitcXHRjbG9uZV9zbGljZV9pbl9zdWJwcm9nKFxcdTAwMjZwdHIsIFxcdTAwMjZkYXRhKTtcXG4rXFx0aWYgKGRhdGEpXFxuK1xcdFxcdCpkYXRhID0gMTIzO1xcbitcXHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFxcdTAwMjZwdHIsIDApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZFxcbisgKiBmcm9tIGEgY2xvbmUncyBjYWxsIGZyYW1lLlxcbisgKi9cXG4rU0VDKFxcXCI/cmF3X3RwXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcXFwiKVxcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xcbitcXHRpbnQgKmRhdGEgPSBOVUxMO1xcbitcXG4rXFx0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXFx1MDAyNnB0cik7XFxuK1xcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXFx1MDAyNnB0ciwgXFx1MDAyNmRhdGEpO1xcbitcXHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFxcdTAwMjZwdHIsIDApO1xcbitcXHRpZiAoZGF0YSlcXG4rXFx0XFx0KmRhdGEgPSAxMjM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlc1xcbiAgKiBvZiBpdHMgcGFyZW50XFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzowMC40NjU4MDk1OTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxMjYyNjgxMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRcIixcbiAgICBcInByZXBhcmVfZnVuY19leGl0XCIsXG4gICAgXCJwcm9jZXNzX2JwZl9leGl0X2Z1bGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgd2hlbiB1bndpbmRpbmcgY2FsbCBmcmFtZXMgb24gZnVuY3Rpb24gZXhpdCwgYWRkaW5nIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0IHRvIHByZXNlcnZlIHBhcmVudC1jaGlsZCB0cmFja2luZyBvZiBkeW5wdHIgc2xpY2VzIHRoYXQgZXNjYXBlIHRvIGNhbGxlciBmcmFtZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gY29kZSByZWFjaGFibGUgdmlhIGJwZihCUEZfUFJPR19MT0FELCAuLi4pIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmI2OTI5NmQ5NjBjMjMwMTMxMDM2ZWMzNzJhZTYxZDVkMjE1MGI3MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDQ6MzY6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmQxZTBiMWE3ZDBhM2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTgwMCw2ICs4MDAsMzkgQEAgc3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXG4gXHRyZXR1cm4gcmVmX2NudDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbit7XG4rXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuK1x0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcbitcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhbGxlZS1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXHUwMDI2Y2FsbGVlLVx1MDAzZXN0YWNrW2ldO1xuK1x0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHlucHRyID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbitcbitcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxuK1x0XHQgICAgIWR5bnB0ci1cdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCB8fFxuK1x0XHQgICAgIWR5bnB0cl90eXBlX3JlZmVyZW5jZWQoZHlucHRyLVx1MDAzZWR5bnB0ci50eXBlKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LypcbitcdFx0ICogQSBjYWxsZWUgY2FuIHNwaWxsIGEgc2xpY2UgZGVyaXZlZCBmcm9tIGl0cyBsb2NhbCBkeW5wdHIgaW50b1xuK1x0XHQgKiB0aGUgY2FsbGVyJ3Mgc3RhY2suIFRoZSBzbGljZSB0aGVuIG91dGxpdmVzIHRoZSBkeW5wdHIgaWQgdGhhdFxuK1x0XHQgKiBsaW5rcyBpdCB0byB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IHRyZWUuIFByZXNlcnZlIHRoYXQgbGluayBieVxuK1x0XHQgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0cidzIHBhcmVudCBiZWZvcmVcbitcdFx0ICogdGhlIGNhbGxlZSBmcmFtZSBpcyBmcmVlZC5cbitcdFx0ICovXG4rXHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHtcbitcdFx0XHRpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy1cdTAwM2VwYXJlbnRfaWQgIT0gZHlucHRyLVx1MDAzZWlkIHx8XG4rXHRcdFx0ICAgIGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX01FTSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSBkeW5wdHItXHUwMDNlcGFyZW50X2lkO1xuK1x0XHR9KSk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuIHtcbkBAIC0xMDM5OSw2ICsxMDQzMiw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbiBcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xuIFx0fVxuIFx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XG4rXHRyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4gXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcbiBcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xuIFx0ZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuaW5kZXggMWNkNjFkNzJjMTY2Zi4uMDcwNDY2MmNkMzJmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuQEAgLTE4OTIsNiArMTg5Miw1MiBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2xvbmVfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIGNsb25lO1xuK1xuK1x0YnBmX2R5bnB0cl9jbG9uZShwdHIsIFx1MDAyNmNsb25lKTtcbitcdCpkYXRhID0gYnBmX2R5bnB0cl9kYXRhKFx1MDAyNmNsb25lLCAwLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuKy8qIEEgc2xpY2UgdGhhdCBlc2NhcGVzIHRoZSBjbG9uZSdzIGNhbGwgZnJhbWUgcmVtYWlucyB2YWxpZCB3aGlsZSB0aGVcbisgKiBzaGFyZWQgcmluZ2J1ZiByZXNlcnZhdGlvbiBpcyBsaXZlLlxuKyAqL1xuK1NFQyhcIj9yYXdfdHBcIilcbitfX3N1Y2Nlc3NcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfdmFsaWQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbitcdGludCAqZGF0YSA9IE5VTEw7XG4rXG4rXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4rXHRjbG9uZV9zbGljZV9pbl9zdWJwcm9nKFx1MDAyNnB0ciwgXHUwMDI2ZGF0YSk7XG4rXHRpZiAoZGF0YSlcbitcdFx0KmRhdGEgPSAxMjM7XG4rXHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFx1MDAyNnB0ciwgMCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkXG4rICogZnJvbSBhIGNsb25lJ3MgY2FsbCBmcmFtZS5cbisgKi9cbitTRUMoXCI/cmF3X3RwXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX2ludmFsaWQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbitcdGludCAqZGF0YSA9IE5VTEw7XG4rXG4rXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4rXHRjbG9uZV9zbGljZV9pbl9zdWJwcm9nKFx1MDAyNnB0ciwgXHUwMDI2ZGF0YSk7XG4rXHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFx1MDAyNnB0ciwgMCk7XG4rXHRpZiAoZGF0YSlcbitcdFx0KmRhdGEgPSAxMjM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlc1xuICAqIG9mIGl0cyBwYXJlbnRcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM3OjAwLjQ2NTgxMTkyMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTY2MTgwOTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoIGZvciBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB0aGUgYXNzb2NpYXRlZCByZXZpZXcgcmVxdWVzdC4gSXQgbG9va3MgbGlrZSB0aGUgdXNlciB3YW50cyBhbiBleHBlcnQgYXNzZXNzbWVudCBvZiBhIExpbnV4IGtlcm5lbCBwYXRjaCBzZXJpZXMuIFNwZWNpZmljYWxseSwgdGhleSdyZSBpbnRlcmVzdGVkIGluIGl0cyBzdWl0YWJpbGl0eSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gRnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdGFzayDigJMgcHJpbWFyaWx5IGRlZmVuc2l2ZSBhbmQgUUEgZm9jdXNlZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBObyByZWQgZmxhZ3MgZm9yIG9mZmVuc2l2ZSBleHBsb2l0cyBvciBtYWx3YXJlIGdlbmVyYXRpb24gYXJlIGltbWVkaWF0ZWx5IGFwcGFyZW50LCB3aGljaCBpcyBhbHdheXMgYSByZWxpZWYuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyB0aGVzZSBjaGFuZ2VzOlxuXG4qICAgVGhlIGtlcm5lbCBzaWRlIGFkZGVkIHRoZSBmdW5jdGlvbiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxuKiAgIFRoaXMgbmV3IGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgcHJlcGFyZV9mdW5jX2V4aXRgIGZ1bmN0aW9uLlxuKiAgIFRoZSBzZWNvbmQgZmlsZSBhZGRlZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNgIHdoaWNoIGFwcGVhcnMgdG8gY29udGFpbiB0ZXN0cyByZWxhdGVkIHRvIGhhbmRsaW5nIEJQRiBkeW5wdHIgc2xpY2VzIHdoZW4gZXhpdGluZyBhIGZ1bmN0aW9uIGNhbGwgZnJhbWUgYW5kIHRoZSByZXBhcmVudGluZyBsb2dpYy5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgYXJlIHByZXR0eSBjbGVhci4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IHVzdWFsIHRvb2xzLCBsaWtlbHkgYSBjb21iaW5hdGlvbiBvZiBgZ3JlcHBlcmAgYW5kIHNvbWUgZmlsZSByZWFkaW5nLCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGZpbGUuIEknbGwgZm9jdXMgcGFydGljdWxhcmx5IG9uIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGZ1bmN0aW9uIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAgYW5kIHdoZXJlIGBwcmVwYXJlX2Z1bmNfZXhpdGAgaXMgY2FsbGVkLiBUaGlzIGluaXRpYWwgaW5zcGVjdGlvbiBzaG91bGQgcmV2ZWFsIGFueSBpbW1lZGlhdGUgY29uY2VybnMgb3IgcG90ZW50aWFsIHBpdGZhbGxzIHRoYXQgc3l6a2FsbGVyIG1pZ2h0IGVuY291bnRlciBkdXJpbmcgZnV6emluZy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgaW1wYWN0IGNvZGUgY292ZXJhZ2UsIGlucHV0IGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW50cm9kdWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6MTIuMDMxOTk1NDE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDU3MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz03ODQ9c3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODAyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MDM6c3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODA0LVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzY3PXN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQzNC1cXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0MzU6XFx0cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQzNi1cXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6MTIuMDc5NDU2ODAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0MjY3MTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipCUEYgVmVyaWZpZXIgRGVlcCBEaXZlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgQlBGIHZlcmlmaWVyLiBMZXQncyBzdGFydCB3aXRoIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBNeSBodW5jaCBpcyB0aGF0IHRoZSByZWxldmFudCBsb2dpYyBpcyBsaWtlbHkgbmVzdGxlZCBzb21ld2hlcmUgYmV0d2VlbiBsaW5lcyA4MDAgYW5kIDg0MC4gVGhhdCdzIGEgcmVhc29uYWJsZSByYW5nZSBmb3IgYSBjb3JlIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCB0aGF0IHBhcnRpY3VsYXIgdmVyaWZpY2F0aW9uIGFzcGVjdCwgaWYgSSByZWNhbGwgY29ycmVjdGx5IGZyb20gdGhlIGxhc3QgdGltZSBJIHdhcyBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLiBMZXQncyBkaXZlIGluIGFuZCBzZWUgd2hhdCdzIHRoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGNoZWNrcyBvciB0cmFuc2Zvcm1hdGlvbnMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzoxNC42MjIxMzA2NjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0cmV0dXJuIHJlZl9jbnQ7XFxuIDgwMTpcXHR9XFxuIDgwMjpcXHRcXG4gODAzOlxcdHN0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIDgwNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcXG4gODA1OlxcdHtcXG4gODA2OlxcdFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cXHUwMDNlY3VyX3N0YXRlO1xcbiA4MDc6XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcXG4gODA4OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxuIDgwOTpcXHRcXHRpbnQgaTtcXG4gODEwOlxcdFxcbiA4MTE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNhbGxlZS1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpKyspIHtcXG4gODEyOlxcdFxcdFxcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcXHUwMDI2Y2FsbGVlLVxcdTAwM2VzdGFja1tpXTtcXG4gODEzOlxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSBcXHUwMDI2c2xvdC1cXHUwMDNlc3BpbGxlZF9wdHI7XFxuIDgxNDpcXHRcXG4gODE1OlxcdFxcdFxcdGlmIChzbG90LVxcdTAwM2VzbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSIHx8XFxuIDgxNjpcXHRcXHRcXHQgICAgIWR5bnB0ci1cXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcXG4gODE3OlxcdFxcdFxcdCAgICAhZHlucHRyX3R5cGVfcmVmZXJlbmNlZChkeW5wdHItXFx1MDAzZWR5bnB0ci50eXBlKSlcXG4gODE4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MTk6XFx0XFxuIDgyMDpcXHRcXHRcXHQvKlxcbiA4MjE6XFx0XFx0XFx0ICogQSBjYWxsZWUgY2FuIHNwaWxsIGEgc2xpY2UgZGVyaXZlZCBmcm9tIGl0cyBsb2NhbCBkeW5wdHIgaW50b1xcbiA4MjI6XFx0XFx0XFx0ICogdGhlIGNhbGxlcidzIHN0YWNrLiBUaGUgc2xpY2UgdGhlbiBvdXRsaXZlcyB0aGUgZHlucHRyIGlkIHRoYXRcXG4gODIzOlxcdFxcdFxcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XFxuIDgyNDpcXHRcXHRcXHQgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0cidzIHBhcmVudCBiZWZvcmVcXG4gODI1OlxcdFxcdFxcdCAqIHRoZSBjYWxsZWUgZnJhbWUgaXMgZnJlZWQuXFxuIDgyNjpcXHRcXHRcXHQgKi9cXG4gODI3OlxcdFxcdFxcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHtcXG4gODI4OlxcdFxcdFxcdFxcdGlmIChzdGF0ZSA9PSBjYWxsZWUgfHwgcmVnLVxcdTAwM2VwYXJlbnRfaWQgIT0gZHlucHRyLVxcdTAwM2VpZCB8fFxcbiA4Mjk6XFx0XFx0XFx0XFx0ICAgIGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXFxuIDgzMDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODMxOlxcdFxcdFxcdFxcdHJlZy1cXHUwMDNlcGFyZW50X2lkID0gZHlucHRyLVxcdTAwM2VwYXJlbnRfaWQ7XFxuIDgzMjpcXHRcXHRcXHR9KSk7XFxuIDgzMzpcXHRcXHR9XFxuIDgzNDpcXHR9XFxuIDgzNTpcXHRcXG4gODM2OlxcdHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA4Mzc6XFx0XFx0XFx0XFx0XFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxcbiA4Mzg6XFx0e1xcbiA4Mzk6XFx0XFx0aW50IGVyciA9IDA7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdC8qIFdlIGFsd2F5cyBlbnN1cmUgdGhhdCBTVEFDS19EWU5QVFIgaXMgbmV2ZXIgc2V0IHBhcnRpYWxseSxcXG4gODQyOlxcdFxcdCAqIGhlbmNlIGp1c3QgY2hlY2tpbmcgZm9yIHNsb3RfdHlwZVswXSBpcyBlbm91Z2guIFRoaXMgaXNcXG4gODQzOlxcdFxcdCAqIGRpZmZlcmVudCBmb3IgU1RBQ0tfU1BJTEwsIHdoZXJlIGl0IG1heSBiZSBvbmx5IHNldCBmb3JcXG4gODQ0OlxcdFxcdCAqIDEgYnl0ZSwgc28gY29kZSBoYXMgdG8gdXNlIGlzX3NwaWxsZWRfcmVnLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzoxNC42MjMxNDQ4NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE2MTAwOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQlBGIFZlcmlmaWVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBCUEYgdmVyaWZpZXIgYW5kIHRoZSBgc3lzX2JwZmAgc3lzdGVtIGNhbGwuIE15IGZpcnN0IHN0ZXAgaXMgdG8gbG9jYXRlIHdoZXJlIHRoZSB2ZXJpZmllciBjb2RlIGl0c2VsZiByZXNpZGVzOyBJIGtub3cgdGhhdCdzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogd2hhdCBLY29uZmlnIHNldHRpbmdzIGFjdHVhbGx5IGVuYWJsZSB0aGF0IGZpbGUncyBjb21waWxhdGlvbj8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGUgY29kZSB0byB0aGUgY29uZmlndXJhdGlvbi4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgc2luY2UgdGhhdCBvZnRlbiBoYW5kbGVzIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gS2NvbmZpZyBzeW1ib2xzLiBGYWlsaW5nIHRoYXQsIGBpbml0L0tjb25maWdgIG9yLCBtb3JlIGxpa2VseSwgYGtlcm5lbC9icGYvS2NvbmZpZ2Agd291bGQgYmUgdGhlIG5leHQgbG9naWNhbCBwbGFjZXMgdG8gZXhhbWluZS4gSSdsbCBzdGFydCB3aXRoIHRoZSBNYWtlZmlsZSB0byBzZWUgaWYgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgZHJpdmVuIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM3OjE2LjczOTI0OTA2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgzMDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpZmllclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6MTYuNzg3MDg3MTQxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzNjg3NjkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgcHJldHR5IGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENPTkZJR19CUEZfU1lTQ0FMTGAuIEkga25vdyB0aGF0J3MgdGhlIGNvbmZpZyB2YXJpYWJsZSBJJ20gY29uY2VybmVkIHdpdGguIE5vdywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGZvciBtZSwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGBpbml0L0tjb25maWdgIGFuZCBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgcGVyaGFwcyBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBvciBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQgYmVmb3JlIGBDT05GSUdfQlBGX1NZU0NBTExgIGNhbiBiZSBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgdGhpbmdzIGxpa2UgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgb3Igb3RoZXIgbG9naWMgdGhhdCBnb3Zlcm5zIHdoZW4gdGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlLiBMZXQncyBnZXQgY3JhY2tpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MjgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzoxOC42MjM5NjY2ODNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzEwMTg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM3OjE4LjY2OTI4MzYxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTM5MDIyMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIEJQRl9TWVNDQUxMIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJQRl9TWVNDQUxMYC4gTXkgaW1tZWRpYXRlIGFwcHJvYWNoIGlzIHRvIGxvY2F0ZSB3aGVyZSB0aGlzIHByZXByb2Nlc3NvciBzeW1ib2wgaXMgZGVjbGFyZWQuIEdpdmVuIHRoYXQgaXQncyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgbXkgaHVuY2ggaXMgdGhhdCBpdCdsbCBiZSBpbiBvbmUgb2YgdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIFRoZSBjaGFsbGVuZ2UgaXMgbmFycm93aW5nIGRvd24gKndoaWNoKiBLY29uZmlnIGZpbGUuIEknbGwgbGlrZWx5IHN0YXJ0IHdpdGggYSBgZmluZGAgb3IgYGdyZXBgIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgcG9zc2libHkgbGltaXRpbmcgdGhlIHNlYXJjaCB0byB0aGUgYEtjb25maWdgIG9yIGBDb25maWcuaW5gIGZpbGVzIHRvIHJlZHVjZSBub2lzZS4gSSdsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNyb3NzLXJlZmVyZW5jZXMgYW5kIGRlcGVuZGVuY2llcywgYXMgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBtaWdodCBiZSBuZXN0ZWQgdW5kZXIgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgaGF2ZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBpbmZsdWVuY2UgaXRzIHByZXNlbmNlLiBNeSBhaW0gaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgZmlsZSBhbmQgc3BlY2lmaWMgc2VjdGlvbiB3aGVyZSBgQlBGX1NZU0NBTExgIGlzIGRlY2xhcmVkIGFuZCBwb3RlbnRpYWxseSBzZWUgaXRzIGRlZmF1bHQgdmFsdWUsIGhlbHAgdGV4dCwgYW5kIGFueSBvdGhlciByZWxldmFudCBkZXBlbmRlbmNpZXMuIEZyb20gdGhlcmUsIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3Qgb24gdGhlIGtlcm5lbCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY5NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM3OjIwLjYwODMwODM5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NTA5NDM5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzoyMi4yNzM0MDc2OTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY0NjM0MDczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEJQRiBLY29uZmlnIEluc3BlY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzY29wZSBvdXQgYXJvdW5kIGxpbmUgMjcuIEl0J3MgYSBnZW5lcmFsIGFwcHJvYWNoIHdoZW4gc3RhcnRpbmcgYW4gaW52ZXN0aWdhdGlvbiwgZXNwZWNpYWxseSBnaXZlbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlLCB0aGF0IEtjb25maWcgZmlsZXMgYXJlIGVzc2VudGlhbCBpbiB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFRoZSBzcGVjaWZpYyBsaW5lIG51bWJlciBpcyBqdXN0IGEgc3RhcnRpbmcgcG9pbnQ7IGl0J3MgbGlrZWx5IGEgZm9jYWwgYXJlYSwgZWl0aGVyIGEgbWFpbiBzZWN0aW9uLCBvciBzb21ldGhpbmcgdGhhdCBicmFuY2hlcyBvdXQgaW50byBtdWx0aXBsZSByZWxldmFudCBvcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBhbnkgaW1tZWRpYXRlIGNsdWVzIHRoYXQgZ2l2ZSBhbiBpbmRpY2F0aW9uIG9mIGhvdyBCUEYgaXMgZW5hYmxlZC9kaXNhYmxlZCBvciBjb25maWd1cmVkLiBUaGlzIHByZWxpbWluYXJ5IHNjYW4gd2lsbCBwcm92aWRlIGEgcm9hZG1hcCBmb3IgZGVlcGVyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6MjMuOTE5NzUwODcyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XFxuICAyMTpcXHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxcbiAgMjI6XFx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcXG4gIDIzOlxcdFxcdGJvb2xcXG4gIDI0OlxcdFxcbiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzoyMy45MTk4MzQxMDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMyNzk5MDM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXb3J0aEZ1enppbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIEJQRl9TWVNDQUxMIGNoYW5nZSBsb29rcyBnb29kIG9uIGl0cyBvd247IG5vIGltbWVkaWF0ZSBibG9ja2VycyB0aGVyZSDigJMgaXQncyBnb3QgYWxsIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzIHNvcnRlZC4gTm93LCBsZXQncyBkaXZlIGludG8gd2hldGhlciB0aGlzIGlzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydC5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyB0b3VjaGluZyB0aGUgZUJQRiB2ZXJpZmllciwgd2hpY2gsIGFzIHdlIGFsbCBrbm93LCBpcyAqY3JpdGljYWwqLiBJdCdzIHJpZ2h0IHRoZXJlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhbmQgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCB0aGF0IGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgc3lzY2FsbCDigJMgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGV4cGxvaXRhdGlvbi4gU3BlY2lmaWNhbGx5LCB3ZSdyZSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIHRvIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIEl0J3MgY2FsbGluZyBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgLCB3aGljaCwgYWNjb3JkaW5nIHRvIHRoZSBjb2RlLCBtYW5hZ2VzIHJlZ2lzdGVyIHN0YXRlLCBzcGVjaWZpY2FsbHkgYHBhcmVudF9pZGAsIGZvciBkeW5wdHIgc2xpY2VzIHdoZW4gZXhpdGluZyBzdWJwcm9ncmFtcyB3aXRoaW4gdGhlIHZlcmlmaWVyLiBTbywgdGhpcyBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGluIGEgcHJldHR5IHZpdGFsIHN1YnN5c3RlbS4gR2l2ZW4gU3l6a2FsbGVyJ3Mgd2VsbC1rbm93biBwcm93ZXNzIGF0IGhhbW1lcmluZyBhd2F5IGF0IEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiBhbmQgZXhlY3V0aW9uLCB0aGlzIGlzIHByYWN0aWNhbGx5IGJlZ2dpbmcgdG8gYmUgZnV6emVkLlxuXG5TbywgKnllcyosIFdvcnRoRnV6emluZyA9IHRydWUuXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCB3aGF0IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb24uIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6XG4tIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGBcbi0gYHByZXBhcmVfZnVuY19leGl0YFxuLSBgYnBmX2NoZWNrYCAob3IgYGJwZl92ZXJpZmllcl9ydW5gIG9yIGBwcmVwYXJlX2Z1bmNfZXhpdGApLlxuXG5JJ2xsIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBwcmVwYXJlX2Z1bmNfZXhpdGAgb3Igc3Vycm91bmRpbmcgY29kZSB0byBzZWUgd2hhdCB0aGUgZGlyZWN0IGltcGFjdCBvZiB0aGlzIGNoYW5nZSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM3OjI3LjI0NzgyNzA3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI5MzMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmVwYXJlX2Z1bmNfZXhpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAzNTk9c3RhdGljIGJvb2wgcmV0dmFsX3JhbmdlX3dpdGhpbihzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSByYW5nZSwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM2Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzNjc6c3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM2OC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4NDc9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNDktXFx0XFx0XFx0ICogZnJhbWUuIEEgY2FsbGJhY2sgZnJhbWUgY2Fubm90IGJlIGxlZnQgdGhhdCB3YXkgYmVjYXVzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTM1MDpcXHRcXHRcXHQgKiBwcmVwYXJlX2Z1bmNfZXhpdCgpIHdvdWxkIGFwcGx5IGl0cyByZXR1cm4gY29udHJhY3QgdG8gdGhlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzUxLVxcdFxcdFxcdCAqIHVua25vd24gUjAgc3ludGhlc2l6ZWQgYmVsb3cuIFN0YWNrLWRlcHRoIHZhbGlkYXRpb24gcmVqZWN0c1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzYzLVxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTM2NDpcXHRcXHRcXHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjUtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzMyMj1zdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MDItXFx0XFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NDAzOlxcdFxcdGVyciA9IHByZXBhcmVfZnVuY19leGl0KGVudiwgXFx1MDAyNmVudi1cXHUwMDNlaW5zbl9pZHgpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzQwNC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTA5PXN0YXRpYyBpbnQgcHJvY2Vzc19icGZfZXhpdF9mdWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTUtXFx0LyogV2UgbXVzdCBkbyBjaGVja19yZWZlcmVuY2VfbGVhayBoZXJlIGJlZm9yZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODExNjpcXHQgKiBwcmVwYXJlX2Z1bmNfZXhpdCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlblxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODExNy1cXHQgKiBzdGF0ZS1cXHUwMDNlY3VyZnJhbWUgXFx1MDAzZSAwLCBpdCBtYXkgYmUgYSBjYWxsYmFjayBmdW5jdGlvbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEyNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMjg6XFx0LyogVGhlIHNpZGUgZWZmZWN0IG9mIHRoZSBwcmVwYXJlX2Z1bmNfZXhpdCB3aGljaCBpc1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEyOS1cXHQgKiBiZWluZyBza2lwcGVkIGlzIHRoYXQgaXQgZnJlZXMgYnBmX2Z1bmNfc3RhdGUuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxNDEtXFx0XFx0LyogZXhpdCBmcm9tIG5lc3RlZCBmdW5jdGlvbiAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODE0MjpcXHRcXHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxNDMtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6MjcuMjk0MTI1MjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM1NDIyNjM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFZlcmRpY3Q6IEZhdm9yYWJsZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgd2UgaGF2ZSBhIHByb21pc2luZyB0YXJnZXQgaGVyZS4gVGhlIHBhdGNoIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGludHJvZHVjZXMgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCDigJMgYSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uLiBJdCdzIGludm9rZWQgd2l0aGluIHRoZSBzdGF0aWMgZnVuY3Rpb24gYHByZXBhcmVfZnVuY19leGl0YCwgd2hpY2gsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgcHJvY2Vzc19icGZfZXhpdF9mdWxsYCBkdXJpbmcgQlBGIHZlcmlmaWNhdGlvbiB3aGVuIGhhbmRsaW5nIGV4aXQgaW5zdHJ1Y3Rpb25zLlxuXG5NeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgc3ltYm9sIGNvdmVyYWdlLiBTbywgSSBjaGVja2VkIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgZXhwb3NlZCwgZ2l2ZW4gdGhhdCB0aGV5J3JlIHN0YXRpYy4gU2luY2UgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYHZlcmlmaWVyLmNgLCB0aGV5J2xsIGJlIHN5bWJvbHMgaW4ga2FsbHN5bXMgKHVubGVzcyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciksIGVzcGVjaWFsbHkgaWYgTFRPIGlzIGRpc2FibGVkIG9yIHdlIGFyZSBkZXBlbmRpbmcgb24gaW5saW5pbmcuIEFuZCwgc3l6a2FsbGVyIHN5bWJvbCBjb3ZlcmFnZSB3b3JrcyB3ZWxsIHdpdGggc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGFyZW4ndCBmdWxseSBpbmxpbmVkLiBJbiB0aGlzIGNhc2UsIGV2ZW4gaWYgdGhleSAqYXJlKiBpbmxpbmVkLCB0YXJnZXRpbmcgdGhlIGNhbGxlciBmdW5jdGlvbnMgbGlrZSBgcHJvY2Vzc19icGZfZXhpdF9mdWxsYCBvciBgcHJlcGFyZV9mdW5jX2V4aXRgIGlzIGdvb2QgZW5vdWdoLlxuXG5UaGVyZWZvcmUsIEknbSBpbmNsdWRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCwgYHByZXBhcmVfZnVuY19leGl0YCwgYW5kIGBwcm9jZXNzX2JwZl9leGl0X2Z1bGxgIGFzIGBGb2N1c1N5bWJvbHNgLlxuXG5JIGFsc28gY29uZmlybWVkIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnIGZvciBjb21waWxpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNvIHRoYXQncyB3aGF0IEknbGwgc3BlY2lmeSBpbiBgRW5hYmxlQ29uZmlnc2AuXG5cbkZpbmFsbHksIGFmdGVyIHZlcmlmeWluZyBhbGwgdGhlIHBpZWNlcywgSSdtIGNvbmZpZGVudCBlbm91Z2ggdG8gbW92ZSBmb3J3YXJkLCBzbyBJJ20gc2V0dGluZyB0aGUgZm9sbG93aW5nOlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgZnV6emluZyB2ZXJkaWN0LlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wicmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRcIiwgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiLCBcInByb2Nlc3NfYnBmX2V4aXRfZnVsbFwiXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJCUEZfU1lTQ0FMTFwiXWBcbkFuZCBJJ20gY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTE4LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzozMS42NDgzNTQxOTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDEzMTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdFwiLFxuICAgIFwicHJlcGFyZV9mdW5jX2V4aXRcIixcbiAgICBcInByb2Nlc3NfYnBmX2V4aXRfZnVsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyB3aGVuIHVud2luZGluZyBjYWxsIGZyYW1lcyBvbiBmdW5jdGlvbiBleGl0LCBhZGRpbmcgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQgdG8gcHJlc2VydmUgcGFyZW50LWNoaWxkIHRyYWNraW5nIG9mIGR5bnB0ciBzbGljZXMgdGhhdCBlc2NhcGUgdG8gY2FsbGVyIGZyYW1lcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIHN1YnN5c3RlbSBjb2RlIHJlYWNoYWJsZSB2aWEgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0XCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiLFxuICAgIFwicHJvY2Vzc19icGZfZXhpdF9mdWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIHdoZW4gdW53aW5kaW5nIGNhbGwgZnJhbWVzIG9uIGZ1bmN0aW9uIGV4aXQsIGFkZGluZyByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCB0byBwcmVzZXJ2ZSBwYXJlbnQtY2hpbGQgdHJhY2tpbmcgb2YgZHlucHRyIHNsaWNlcyB0aGF0IGVzY2FwZSB0byBjYWxsZXIgZnJhbWVzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIGNvZGUgcmVhY2hhYmxlIHZpYSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzozMS43Mjg0OTQ1NjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MDYxNTI3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzozMS43MjkwMTgwMTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4NzA1NjI2MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgZHlucHRyIHRyYWNraW5nIGxvZ2ljIGR1cmluZyBzdWJwcm9ncmFtIGV4aXRzIChgcHJlcGFyZV9mdW5jX2V4aXRgKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCB0byB1cGRhdGUgYHBhcmVudF9pZGAgcmVmZXJlbmNlcyBvZiBlc2NhcGVkIFBUUl9UT19NRU0gZGF0YSBzbGljZXMgZnJvbSBhIGNhbGxlZSBmcmFtZSdzIGR5bnB0ciB0byB0aGUgZHlucHRyJ3MgcGFyZW50IElEIGJlZm9yZSB0aGUgY2FsbGVlIGZyYW1lIHN0YXRlIGlzIGZyZWVkLlxcblxcblRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYSBkeW5wdHIgaXMgcmVsZWFzZWQvc3VibWl0dGVkIGluIGNhbGxlciBmcmFtZXMsIGFueSBlc2NhcGVkIHNsaWNlcyBkZXJpdmVkIGZyb20gY2xvbmVkIGR5bnB0cnMgaW4gc3VicHJvZ3JhbXMgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJQRiBwcm9ncmFtcy5cXG5cXG5BbmFseXNpcyBmb3Igc2FuaXRpemVyIHJlcXVpcmVtZW50czpcXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyAoc3VjaCBhcyBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIFRoZSB2ZXJpZmllciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIChgYnBmX3ZlcmlmaWVyX3N0YXRlYCwgYGJwZl9mdW5jX3N0YXRlYCwgYGJwZl9yZWdfc3RhdGVgKSBhY2Nlc3NlZCBpbiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgYXJlIGFscmVhZHkgbWFuYWdlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIHZlcmlmaWVyIGZyYW1ld29yay5cXG4tIEFueSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaW1wcm9wZXIgZHlucHRyIGxpZmV0aW1lIHRyYWNraW5nIHdvdWxkIG1hbmlmZXN0IGFzIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYjY5Mjk2ZDk2MGMyMzAxMzEwMzZlYzM3MmFlNjFkNWQyMTUwYjcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwNDozNjo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZDFlMGIxYTdkMGEzZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtODAwLDYgKzgwMCwzOSBAQCBzdGF0aWMgaW50IGR5bnB0cl9yZWZfY250KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB2X3BhcmVudF9pZClcbiBcdHJldHVybiByZWZfY250O1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxuK3tcbitcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cdTAwM2VjdXJfc3RhdGU7XG4rXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuK1x0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4rXHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSBcdTAwMjZzbG90LVx1MDAzZXNwaWxsZWRfcHRyO1xuK1xuK1x0XHRpZiAoc2xvdC1cdTAwM2VzbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSIHx8XG4rXHRcdCAgICAhZHlucHRyLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XG4rXHRcdCAgICAhZHlucHRyX3R5cGVfcmVmZXJlbmNlZChkeW5wdHItXHUwMDNlZHlucHRyLnR5cGUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvXG4rXHRcdCAqIHRoZSBjYWxsZXIncyBzdGFjay4gVGhlIHNsaWNlIHRoZW4gb3V0bGl2ZXMgdGhlIGR5bnB0ciBpZCB0aGF0XG4rXHRcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XG4rXHRcdCAqIG1ha2luZyBlc2NhcGVkIHNsaWNlcyBjaGlsZHJlbiBvZiB0aGUgZHlucHRyJ3MgcGFyZW50IGJlZm9yZVxuK1x0XHQgKiB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLlxuK1x0XHQgKi9cbitcdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUodnN0YXRlLCBzdGF0ZSwgcmVnLCAoe1xuK1x0XHRcdGlmIChzdGF0ZSA9PSBjYWxsZWUgfHwgcmVnLVx1MDAzZXBhcmVudF9pZCAhPSBkeW5wdHItXHUwMDNlaWQgfHxcbitcdFx0XHQgICAgYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSAhPSBQVFJfVE9fTUVNKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0cmVnLVx1MDAzZXBhcmVudF9pZCA9IGR5bnB0ci1cdTAwM2VwYXJlbnRfaWQ7XG4rXHRcdH0pKTtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXG4ge1xuQEAgLTEwMzk5LDYgKzEwNDMyLDcgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuIFx0XHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZXItXHUwMDNlZnJhbWVubywgdHJ1ZSk7XG4gXHR9XG4gXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcbitcdHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcbiBcdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xuIFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXG4gXHRmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5pbmRleCAxY2Q2MWQ3MmMxNjZmLi4wNzA0NjYyY2QzMmYzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5AQCAtMTg5Miw2ICsxODkyLDUyIEBAIGludCBjbG9uZV9pbnZhbGlkYXRlNCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgY2xvbmU7XG4rXG4rXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuK1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEoXHUwMDI2Y2xvbmUsIDAsIHNpemVvZih2YWwpKTtcbit9XG4rXG4rLyogQSBzbGljZSB0aGF0IGVzY2FwZXMgdGhlIGNsb25lJ3MgY2FsbCBmcmFtZSByZW1haW5zIHZhbGlkIHdoaWxlIHRoZVxuKyAqIHNoYXJlZCByaW5nYnVmIHJlc2VydmF0aW9uIGlzIGxpdmUuXG4rICovXG4rU0VDKFwiP3Jhd190cFwiKVxuK19fc3VjY2Vzc1xuK2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV92YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGlmIChkYXRhKVxuK1x0XHQqZGF0YSA9IDEyMztcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBSZWxlYXNpbmcgdGhlIHNoYXJlZCByZXNlcnZhdGlvbiBtdXN0IGludmFsaWRhdGUgYSBzbGljZSB0aGF0IGVzY2FwZWRcbisgKiBmcm9tIGEgY2xvbmUncyBjYWxsIGZyYW1lLlxuKyAqL1xuK1NFQyhcIj9yYXdfdHBcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcdGlmIChkYXRhKVxuK1x0XHQqZGF0YSA9IDEyMztcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBJbnZhbGlkYXRpbmcgYSBkeW5wdHIgc2hvdWxkIGludmFsaWRhdGUgYW55IGRhdGEgc2xpY2VzXG4gICogb2YgaXRzIHBhcmVudFxuICAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6MzEuNzI5MDE5MTMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3MDU2MDc2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIFZlcmlmaWVyIEZpeCBmb3IgRHlucHRyIFNsaWNlIFBhcmVudGFnZSBBY3Jvc3MgRnVuY3Rpb24gQm91bmRhcmllcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgYSBzZWxmLXRlc3QuIExldCdzIGRpZyBpbi4gSXQncyBhZGRpbmcgYSBuZXcgZnVuY3Rpb24sIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCwgYW5kIGNhbGxpbmcgaXQgd2l0aGluIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIFRoZSBnb2FsIGhlcmUgaXMgdG8gY29ycmVjdGx5IHRyYWNrIHRoZSAqcGFyZW50YWdlKiBvZiBkeW5hbWljIHBvaW50ZXIgKGR5bnB0cikgc2xpY2VzIHdoZW4gYSBCUEYgc3VicHJvZ3JhbSBleGl0cy5cblxuSSBzZWUgdGhhdCB3aGVuIGRlYWxpbmcgd2l0aCBkeW5wdHJzLCBsaWtlIHRob3NlIHVzZWQgd2l0aCByaW5nIGJ1ZmZlcnMsIHNsaWNlcyBhcmUgY3JlYXRlZCwgYW5kIHRoZXNlIHNsaWNlcyBoYXZlIGEgYHBhcmVudF9pZGAgdGhhdCByZWZlcmVuY2VzIHRoZSBvcmlnaW5hbCBkeW5wdHIuIFRoZSBwcm9ibGVtIGlzLCBpZiBhIHN1YnByb2dyYW0gY3JlYXRlcyBhIGR5bnB0ciwgdGFrZXMgYSBzbGljZSwgYW5kIHN0b3JlcyB0aGF0IHNsaWNlJ3MgcG9pbnRlciBpbiB0aGUgY2FsbGVyJ3Mgc3RhY2sgb3IgcmVnaXN0ZXJzLCB0aGVuIHdoZW4gdGhlIHN1YnByb2dyYW0gZXhpdHMgYW5kIHRoZSBjYWxsZWUncyBkeW5wdHIgaXMgZnJlZWQsIHRoZSBzbGljZSdzIGBwYXJlbnRfaWRgIGJlY29tZXMgc3RhbGUuIFRoZSBzbGljZSBpcyBub3cgcG9pbnRpbmcgdG8gYSBuby1sb25nZXItdmFsaWQgSUQuIElmIHRoZSBjYWxsZXIgdGhlbiBhdHRlbXB0cyB0byBzdWJtaXQgb3IgcmVsZWFzZSB0aGUgb3JpZ2luYWwgcGFyZW50IGR5bnB0ciwgdGhlIHNsaWNlIHdvdWxkbid0IGJlIGludmFsaWRhdGVkIGJlY2F1c2UgaXRzIGBwYXJlbnRfaWRgIGRvZXNuJ3QgbWF0Y2ggdGhlIG5ldywgdmFsaWQgcGFyZW50IElELiBUaGlzIG9wZW5zIHRoZSBkb29yIHRvIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgY29uZGl0aW9uLCB3aGVyZSB0aGUgQlBGIHByb2dyYW0gY291bGQgYWNjZXNzIG1lbW9yeSB0aGF0J3MgYWxyZWFkeSBiZWVuIGZyZWVkIG9yIGV2ZW4gY2F1c2UgYW4gaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuXG5UaGlzIG5ldyBmdW5jdGlvbiBjbGV2ZXJseSB1cGRhdGVzIHRoZSBgcGFyZW50X2lkYCBvZiB0aGVzZSBcImVzY2FwZWRcIiBzbGljZXMgKmJlZm9yZSogdGhlIGNhbGxlZSdzIHN0YXRlIGlzIGZyZWVkLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBjYWxsZXIncyByZWdpc3RlcnMgYW5kIHN0YWNrIHRvIGZpbmQgYW55IHNsaWNlcyB0aGF0IGhhdmUgdGhlIG5vdy1zdGFsZSBwYXJlbnQgSUQuIEl0IHRoZW4gdXBkYXRlcyB0aGVpciBgcGFyZW50X2lkYCB0byBwb2ludCB0byB0aGUgcGFyZW50IG9mIHRoZSBvcmlnaW5hbCBkeW5wdHIsIGVuc3VyaW5nIHRoZSB2ZXJpZmllciBrbm93cyB0aGF0IHRoZSBzbGljZSBpcyBzdGlsbCBsaW5rZWQgdG8gdGhlIG9yaWdpbmFsIG9iamVjdCB0cmVlLiBUaGlzIGVmZmVjdGl2ZWx5IGZpeGVzIGEgcG90ZW50aWFsIFVBRiB2dWxuZXJhYmlsaXR5LlxuXG5Ob3csIGxldCdzIGxvb2sgZm9yIGFueSBpc3N1ZXMgdGhlIHBhdGNoIG1pZ2h0IGludHJvZHVjZS4gSSdtIGNoZWNraW5nIGZvciB0aGluZ3MgbGlrZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSB2ZXJpZmllciBzdGF0ZSB0cmFja2luZyBpdHNlbGbigJR0aGUgdXBkYXRpbmcgb2YgYHJlZy1cdTAwM2VwYXJlbnRfaWRg4oCUbG9va3Mgc291bmQuIFdlJ3JlIGRlYWxpbmcgd2l0aCBpbnRlcm5hbCB2ZXJpZmllciBzdGF0ZSBzdHJ1Y3R1cmVzIChgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZWAsIGBicGZfZnVuY19zdGF0ZWAsIGBicGZfcmVnX3N0YXRlYCkuICBJdCBzZWVtcyB0byBpdGVyYXRlIHRocm91Z2ggKmluaXRpYWxpemVkKiB2ZXJpZmllciByZWdpc3RlciBhbmQgc3RhY2sgc3RhdGVzLiBJIGRvbid0IHNlZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4gVGhlcmUncyBubyBjb3B5aW5nIG9mIG5ldyBidWZmZXJzIG9yIHN0cnVjdHMgdG8gdXNlcnNwYWNlLCBubyBwb3RlbnRpYWwgZm9yIHBhZGRpbmcgbGVha3MsIGFuZCBubyBhcHBhcmVudCB1bmluaXRpYWxpemVkIGRhdGEgdXNhZ2UuXG5cblRoZSBidWcgY2xhc3MgYmVpbmcgYWRkcmVzc2VkIGlzIGEgdmVyaWZpZXIgbG9naWMgaXNzdWUuIElmIHRoZSB2ZXJpZmllciAqZGlkKiBoYXZlIGEgYnVnIGhlcmUsIGl0IGNvdWxkIGFsbG93IGEgQlBGIHByb2dyYW0gdG8gcGVyZm9ybSBhIFVBRiBvciBPT0IgbWVtb3J5IGFjY2VzcyBpbiBrZXJuZWwgc3BhY2UuIFN1Y2ggVUFGL09PQiBjb25kaXRpb25zIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiB3aGVuIHRoZSBCUEYgcHJvZ3JhbSBpcyBleGVjdXRlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIEJQRiB0ZXN0IHN1aXRlcyBzaG91bGQgZGV0ZWN0IHZlcmlmaWVyIGxvZ2ljIGJ1Z3MgdGhhdCBtaWdodCBsZWFkIHRvIGtlcm5lbCBtZW1vcnkgY29ycnVwdGlvbiBvciBVQUYgaXNzdWVzLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gbWVudGFsbHkgY2hlY2tpbmcgdGhlIHJvbGVzIG9mIEtNU0FOIHZlcnN1cyBLQVNBTi4gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBLQVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgZXRjLiBUaGlzIHBhdGNoLCB3aXRoIGl0cyBmb2N1cyBvbiBpbnRlcm5hbCB2ZXJpZmllciBzdGF0ZSBhbmQgdGhlIGxpbmtpbmcgb2YgYHBhcmVudF9pZGBzLCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGJ1ZmZlcnMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgbGVha3MsIG9yIHVzZXMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGlzIGEgS0FTQU4gaXNzdWUgKFVBRikgYW5kIG5vdCBhIEtNU0FOICh1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8gbGVhaykgaXNzdWUsIHRoaXMgcGF0Y2ggKmRvZXNuJ3QqIHJlcXVpcmUgS01TQU4uIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggcHJpbWFyaWx5IG1vZGlmaWVzIHZlcmlmaWVyIGxvZ2ljIHRvIHByZXZlbnQgVUFGIGNvbmRpdGlvbnMsIGFuZCBLTVNBTiBpc24ndCByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgY2xhc3Mgb2YgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3NSwiT3V0cHV0VG9rZW5zIjozNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6NDAuNDM0NjI5MzY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgZHlucHRyIHRyYWNraW5nIGxvZ2ljIGR1cmluZyBzdWJwcm9ncmFtIGV4aXRzIChgcHJlcGFyZV9mdW5jX2V4aXRgKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCB0byB1cGRhdGUgYHBhcmVudF9pZGAgcmVmZXJlbmNlcyBvZiBlc2NhcGVkIFBUUl9UT19NRU0gZGF0YSBzbGljZXMgZnJvbSBhIGNhbGxlZSBmcmFtZSdzIGR5bnB0ciB0byB0aGUgZHlucHRyJ3MgcGFyZW50IElEIGJlZm9yZSB0aGUgY2FsbGVlIGZyYW1lIHN0YXRlIGlzIGZyZWVkLlxcblxcblRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYSBkeW5wdHIgaXMgcmVsZWFzZWQvc3VibWl0dGVkIGluIGNhbGxlciBmcmFtZXMsIGFueSBlc2NhcGVkIHNsaWNlcyBkZXJpdmVkIGZyb20gY2xvbmVkIGR5bnB0cnMgaW4gc3VicHJvZ3JhbXMgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJQRiBwcm9ncmFtcy5cXG5cXG5BbmFseXNpcyBmb3Igc2FuaXRpemVyIHJlcXVpcmVtZW50czpcXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyAoc3VjaCBhcyBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIFRoZSB2ZXJpZmllciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIChgYnBmX3ZlcmlmaWVyX3N0YXRlYCwgYGJwZl9mdW5jX3N0YXRlYCwgYGJwZl9yZWdfc3RhdGVgKSBhY2Nlc3NlZCBpbiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgYXJlIGFscmVhZHkgbWFuYWdlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIHZlcmlmaWVyIGZyYW1ld29yay5cXG4tIEFueSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaW1wcm9wZXIgZHlucHRyIGxpZmV0aW1lIHRyYWNraW5nIHdvdWxkIG1hbmlmZXN0IGFzIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgZHlucHRyIHRyYWNraW5nIGxvZ2ljIGR1cmluZyBzdWJwcm9ncmFtIGV4aXRzIChgcHJlcGFyZV9mdW5jX2V4aXRgKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCB0byB1cGRhdGUgYHBhcmVudF9pZGAgcmVmZXJlbmNlcyBvZiBlc2NhcGVkIFBUUl9UT19NRU0gZGF0YSBzbGljZXMgZnJvbSBhIGNhbGxlZSBmcmFtZSdzIGR5bnB0ciB0byB0aGUgZHlucHRyJ3MgcGFyZW50IElEIGJlZm9yZSB0aGUgY2FsbGVlIGZyYW1lIHN0YXRlIGlzIGZyZWVkLlxcblxcblRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYSBkeW5wdHIgaXMgcmVsZWFzZWQvc3VibWl0dGVkIGluIGNhbGxlciBmcmFtZXMsIGFueSBlc2NhcGVkIHNsaWNlcyBkZXJpdmVkIGZyb20gY2xvbmVkIGR5bnB0cnMgaW4gc3VicHJvZ3JhbXMgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJQRiBwcm9ncmFtcy5cXG5cXG5BbmFseXNpcyBmb3Igc2FuaXRpemVyIHJlcXVpcmVtZW50czpcXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyAoc3VjaCBhcyBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIFRoZSB2ZXJpZmllciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIChgYnBmX3ZlcmlmaWVyX3N0YXRlYCwgYGJwZl9mdW5jX3N0YXRlYCwgYGJwZl9yZWdfc3RhdGVgKSBhY2Nlc3NlZCBpbiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgYXJlIGFscmVhZHkgbWFuYWdlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIHZlcmlmaWVyIGZyYW1ld29yay5cXG4tIEFueSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaW1wcm9wZXIgZHlucHRyIGxpZmV0aW1lIHRyYWNraW5nIHdvdWxkIG1hbmlmZXN0IGFzIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqwns[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 04:35:47 +0000 UTC FinishedAt: 2026-09-09 04:37:42 +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": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "77b9809d-3eff-4296-ab62-69a862f0a9a9" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "reparent_dynptr_slices_on_func_exit", "prepare_func_exit", "process_bpf_exit_full" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19icGZfZXhpdF9mdWxsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBkeW5wdHIgdHJhY2tpbmcgbG9naWMgZHVyaW5nIHN1YnByb2dyYW0gZXhpdHMgKGBwcmVwYXJlX2Z1bmNfZXhpdGApLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgIHRvIHVwZGF0ZSBgcGFyZW50X2lkYCByZWZlcmVuY2VzIG9mIGVzY2FwZWQgUFRSX1RPX01FTSBkYXRhIHNsaWNlcyBmcm9tIGEgY2FsbGVlIGZyYW1lJiMzOTtzIGR5bnB0ciB0byB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCBJRCBiZWZvcmUgdGhlIGNhbGxlZSBmcmFtZSBzdGF0ZSBpcyBmcmVlZC5cblxuVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBhIGR5bnB0ciBpcyByZWxlYXNlZC9zdWJtaXR0ZWQgaW4gY2FsbGVyIGZyYW1lcywgYW55IGVzY2FwZWQgc2xpY2VzIGRlcml2ZWQgZnJvbSBjbG9uZWQgZHlucHRycyBpbiBzdWJwcm9ncmFtcyBhcmUgcHJvcGVybHkgaW52YWxpZGF0ZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIHByb2dyYW1zLlxuXG5BbmFseXNpcyBmb3Igc2FuaXRpemVyIHJlcXVpcmVtZW50czpcbi0gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIChzdWNoIGFzIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBUaGUgdmVyaWZpZXIgaW50ZXJuYWwgc3RydWN0dXJlcyAoYGJwZl92ZXJpZmllcl9zdGF0ZWAsIGBicGZfZnVuY19zdGF0ZWAsIGBicGZfcmVnX3N0YXRlYCkgYWNjZXNzZWQgaW4gYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgIGFyZSBhbHJlYWR5IG1hbmFnZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSB2ZXJpZmllciBmcmFtZXdvcmsuXG4tIEFueSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaW1wcm9wZXIgZHlucHRyIGxpZmV0aW1lIHRyYWNraW5nIHdvdWxkIG1hbmlmZXN0IGFzIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyB3aGVuIHVud2luZGluZyBjYWxsIGZyYW1lcyBvbiBmdW5jdGlvbiBleGl0LCBhZGRpbmcgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQgdG8gcHJlc2VydmUgcGFyZW50LWNoaWxkIHRyYWNraW5nIG9mIGR5bnB0ciBzbGljZXMgdGhhdCBlc2NhcGUgdG8gY2FsbGVyIGZyYW1lcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIHN1YnN5c3RlbSBjb2RlIHJlYWNoYWJsZSB2aWEgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZiNjkyOTZkOTYwYzIzMDEzMTAzNmVjMzcyYWU2MWQ1ZDIxNTBiNzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM2OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZDFlMGIxYTdkMGEzZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtODAwLDYgJiM0Mzs4MDAsMzkgQEAgc3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXG4gXHRyZXR1cm4gcmVmX2NudDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuJiM0MztcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhbGxlZS1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXHUwMDI2Y2FsbGVlLVx1MDAzZXN0YWNrW2ldO1xuJiM0MztcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKmR5bnB0ciA9IFx1MDAyNnNsb3QtXHUwMDNlc3BpbGxlZF9wdHI7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxuJiM0MztcdFx0ICAgICFkeW5wdHItXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcbiYjNDM7XHRcdCAgICAhZHlucHRyX3R5cGVfcmVmZXJlbmNlZChkeW5wdHItXHUwMDNlZHlucHRyLnR5cGUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQSBjYWxsZWUgY2FuIHNwaWxsIGEgc2xpY2UgZGVyaXZlZCBmcm9tIGl0cyBsb2NhbCBkeW5wdHIgaW50b1xuJiM0MztcdFx0ICogdGhlIGNhbGxlciYjMzk7cyBzdGFjay4gVGhlIHNsaWNlIHRoZW4gb3V0bGl2ZXMgdGhlIGR5bnB0ciBpZCB0aGF0XG4mIzQzO1x0XHQgKiBsaW5rcyBpdCB0byB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IHRyZWUuIFByZXNlcnZlIHRoYXQgbGluayBieVxuJiM0MztcdFx0ICogbWFraW5nIGVzY2FwZWQgc2xpY2VzIGNoaWxkcmVuIG9mIHRoZSBkeW5wdHImIzM5O3MgcGFyZW50IGJlZm9yZVxuJiM0MztcdFx0ICogdGhlIGNhbGxlZSBmcmFtZSBpcyBmcmVlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUodnN0YXRlLCBzdGF0ZSwgcmVnLCAoe1xuJiM0MztcdFx0XHRpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy1cdTAwM2VwYXJlbnRfaWQgIT0gZHlucHRyLVx1MDAzZWlkIHx8XG4mIzQzO1x0XHRcdCAgICBiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSBkeW5wdHItXHUwMDNlcGFyZW50X2lkO1xuJiM0MztcdFx0fSkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiB7XG5AQCAtMTAzOTksNiAmIzQzOzEwNDMyLDcgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuIFx0XHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZXItXHUwMDNlZnJhbWVubywgdHJ1ZSk7XG4gXHR9XG4gXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcbiYjNDM7XHRyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4gXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcbiBcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xuIFx0ZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuaW5kZXggMWNkNjFkNzJjMTY2Zi4uMDcwNDY2MmNkMzJmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuQEAgLTE4OTIsNiAmIzQzOzE4OTIsNTIgQEAgaW50IGNsb25lX2ludmFsaWRhdGU0KHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTtcbiYjNDM7XG4mIzQzO1x0YnBmX2R5bnB0cl9jbG9uZShwdHIsIFx1MDAyNmNsb25lKTtcbiYjNDM7XHQqZGF0YSA9IGJwZl9keW5wdHJfZGF0YShcdTAwMjZjbG9uZSwgMCwgc2l6ZW9mKHZhbCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBIHNsaWNlIHRoYXQgZXNjYXBlcyB0aGUgY2xvbmUmIzM5O3MgY2FsbCBmcmFtZSByZW1haW5zIHZhbGlkIHdoaWxlIHRoZVxuJiM0MzsgKiBzaGFyZWQgcmluZ2J1ZiByZXNlcnZhdGlvbiBpcyBsaXZlLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0Oz9yYXdfdHBcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfdmFsaWQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuJiM0MztcdGludCAqZGF0YSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbiYjNDM7XHRjbG9uZV9zbGljZV9pbl9zdWJwcm9nKFx1MDAyNnB0ciwgXHUwMDI2ZGF0YSk7XG4mIzQzO1x0aWYgKGRhdGEpXG4mIzQzO1x0XHQqZGF0YSA9IDEyMztcbiYjNDM7XHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFx1MDAyNnB0ciwgMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZWxlYXNpbmcgdGhlIHNoYXJlZCByZXNlcnZhdGlvbiBtdXN0IGludmFsaWRhdGUgYSBzbGljZSB0aGF0IGVzY2FwZWRcbiYjNDM7ICogZnJvbSBhIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4mIzQzO1x0aW50ICpkYXRhID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuJiM0MztcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFx1MDAyNnB0ciwgMCk7XG4mIzQzO1x0aWYgKGRhdGEpXG4mIzQzO1x0XHQqZGF0YSA9IDEyMztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlc1xuICAqIG9mIGl0cyBwYXJlbnRcbiAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0JiMzNDssCiAgICAmIzM0O3ByZXBhcmVfZnVuY19leGl0JiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfYnBmX2V4aXRfZnVsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgd2hlbiB1bndpbmRpbmcgY2FsbCBmcmFtZXMgb24gZnVuY3Rpb24gZXhpdCwgYWRkaW5nIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0IHRvIHByZXNlcnZlIHBhcmVudC1jaGlsZCB0cmFja2luZyBvZiBkeW5wdHIgc2xpY2VzIHRoYXQgZXNjYXBlIHRvIGNhbGxlciBmcmFtZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gY29kZSByZWFjaGFibGUgdmlhIGJwZihCUEZfUFJPR19MT0FELCAuLi4pIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYjY5Mjk2ZDk2MGMyMzAxMzEwMzZlYzM3MmFlNjFkNWQyMTUwYjcxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAwNDozNjo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA3MmEzZjU5OThkZDI3Li5kMWUwYjFhN2QwYTNlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC04MDAsNiAmIzQzOzgwMCwzOSBAQCBzdGF0aWMgaW50IGR5bnB0cl9yZWZfY250KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB2X3BhcmVudF9pZCkKIAlyZXR1cm4gcmVmX2NudDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJCQkJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtJmd0O2N1cl9zdGF0ZTsKJiM0MzsJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTsKJiM0MzsJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjYWxsZWUtJmd0O2FsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSAmYW1wO2NhbGxlZS0mZ3Q7c3RhY2tbaV07CiYjNDM7CQlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHlucHRyID0gJmFtcDtzbG90LSZndDtzcGlsbGVkX3B0cjsKJiM0MzsKJiM0MzsJCWlmIChzbG90LSZndDtzbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSIHx8CiYjNDM7CQkgICAgIWR5bnB0ci0mZ3Q7ZHlucHRyLmZpcnN0X3Nsb3QgfHwKJiM0MzsJCSAgICAhZHlucHRyX3R5cGVfcmVmZXJlbmNlZChkeW5wdHItJmd0O2R5bnB0ci50eXBlKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvCiYjNDM7CQkgKiB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrLiBUaGUgc2xpY2UgdGhlbiBvdXRsaXZlcyB0aGUgZHlucHRyIGlkIHRoYXQKJiM0MzsJCSAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5CiYjNDM7CQkgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0ciYjMzk7cyBwYXJlbnQgYmVmb3JlCiYjNDM7CQkgKiB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLgomIzQzOwkJICovCiYjNDM7CQlicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZSh2c3RhdGUsIHN0YXRlLCByZWcsICh7CiYjNDM7CQkJaWYgKHN0YXRlID09IGNhbGxlZSB8fCByZWctJmd0O3BhcmVudF9pZCAhPSBkeW5wdHItJmd0O2lkIHx8CiYjNDM7CQkJICAgIGJhc2VfdHlwZShyZWctJmd0O3R5cGUpICE9IFBUUl9UT19NRU0pCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJlZy0mZ3Q7cGFyZW50X2lkID0gZHlucHRyLSZndDtwYXJlbnRfaWQ7CiYjNDM7CQl9KSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQkgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpCiB7CkBAIC0xMDM5OSw2ICYjNDM7MTA0MzIsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpCiAJCXByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci0mZ3Q7ZnJhbWVubywgdHJ1ZSk7CiAJfQogCWFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpOwomIzQzOwlyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7CiAJLyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nCiAJICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovCiAJZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jCmluZGV4IDFjZDYxZDcyYzE2NmYuLjA3MDQ2NjJjZDMyZjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jCkBAIC0xODkyLDYgJiM0MzsxODkyLDUyIEBAIGludCBjbG9uZV9pbnZhbGlkYXRlNCh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIGNsb25lX3NsaWNlX2luX3N1YnByb2coc3RydWN0IGJwZl9keW5wdHIgKnB0ciwgaW50ICoqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIGNsb25lOwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Nsb25lKHB0ciwgJmFtcDtjbG9uZSk7CiYjNDM7CSpkYXRhID0gYnBmX2R5bnB0cl9kYXRhKCZhbXA7Y2xvbmUsIDAsIHNpemVvZih2YWwpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBzbGljZSB0aGF0IGVzY2FwZXMgdGhlIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUgcmVtYWlucyB2YWxpZCB3aGlsZSB0aGUKJiM0MzsgKiBzaGFyZWQgcmluZ2J1ZiByZXNlcnZhdGlvbiBpcyBsaXZlLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfdmFsaWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwlpbnQgKmRhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cigmYW1wO3JpbmdidWYsIHZhbCwgMCwgJmFtcDtwdHIpOwomIzQzOwljbG9uZV9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAoZGF0YSkKJiM0MzsJCSpkYXRhID0gMTIzOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZAomIzQzOyAqIGZyb20gYSBjbG9uZSYjMzk7cyBjYWxsIGZyYW1lLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9pbnZhbGlkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHB0cjsKJiM0MzsJaW50ICpkYXRhID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoJmFtcDtyaW5nYnVmLCB2YWwsIDAsICZhbXA7cHRyKTsKJiM0MzsJY2xvbmVfc2xpY2VfaW5fc3VicHJvZygmYW1wO3B0ciwgJmFtcDtkYXRhKTsKJiM0MzsJYnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cigmYW1wO3B0ciwgMCk7CiYjNDM7CWlmIChkYXRhKQomIzQzOwkJKmRhdGEgPSAxMjM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIEludmFsaWRhdGluZyBhIGR5bnB0ciBzaG91bGQgaW52YWxpZGF0ZSBhbnkgZGF0YSBzbGljZXMKICAqIG9mIGl0cyBwYXJlbnQKICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDYzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoIGZvciBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHJldmlldyByZXF1ZXN0LiBJdCBsb29rcyBsaWtlIHRoZSB1c2VyIHdhbnRzIGFuIGV4cGVydCBhc3Nlc3NtZW50IG9mIGEgTGludXgga2VybmVsIHBhdGNoIHNlcmllcy4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTtyZSBpbnRlcmVzdGVkIGluIGl0cyBzdWl0YWJpbGl0eSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gRnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdGFzayDigJMgcHJpbWFyaWx5IGRlZmVuc2l2ZSBhbmQgUUEgZm9jdXNlZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBObyByZWQgZmxhZ3MgZm9yIG9mZmVuc2l2ZSBleHBsb2l0cyBvciBtYWx3YXJlIGdlbmVyYXRpb24gYXJlIGltbWVkaWF0ZWx5IGFwcGFyZW50LCB3aGljaCBpcyBhbHdheXMgYSByZWxpZWYuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgdGhlc2UgY2hhbmdlczoKCiogICBUaGUga2VybmVsIHNpZGUgYWRkZWQgdGhlIGZ1bmN0aW9uIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuCiogICBUaGlzIG5ldyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYHByZXBhcmVfZnVuY19leGl0YCBmdW5jdGlvbi4KKiAgIFRoZSBzZWNvbmQgZmlsZSBhZGRlZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNgIHdoaWNoIGFwcGVhcnMgdG8gY29udGFpbiB0ZXN0cyByZWxhdGVkIHRvIGhhbmRsaW5nIEJQRiBkeW5wdHIgc2xpY2VzIHdoZW4gZXhpdGluZyBhIGZ1bmN0aW9uIGNhbGwgZnJhbWUgYW5kIHRoZSByZXBhcmVudGluZyBsb2dpYy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzIGFyZSBwcmV0dHkgY2xlYXIuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgdXN1YWwgdG9vbHMsIGxpa2VseSBhIGNvbWJpbmF0aW9uIG9mIGBncmVwcGVyYCBhbmQgc29tZSBmaWxlIHJlYWRpbmcsIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZmlsZS4gSSYjMzk7bGwgZm9jdXMgcGFydGljdWxhcmx5IG9uIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGZ1bmN0aW9uIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAgYW5kIHdoZXJlIGBwcmVwYXJlX2Z1bmNfZXhpdGAgaXMgY2FsbGVkLiBUaGlzIGluaXRpYWwgaW5zcGVjdGlvbiBzaG91bGQgcmV2ZWFsIGFueSBpbW1lZGlhdGUgY29uY2VybnMgb3IgcG90ZW50aWFsIHBpdGZhbGxzIHRoYXQgc3l6a2FsbGVyIG1pZ2h0IGVuY291bnRlciBkdXJpbmcgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjaGFuZ2VzIG1pZ2h0IGltcGFjdCBjb2RlIGNvdmVyYWdlLCBpbnB1dCBoYW5kbGluZywgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGludHJvZHVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz03ODQ9c3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwMi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MDM6c3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDQtXHRcdFx0XHRcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzY3PXN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MzQtXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQzNTpcdHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQzNi1cdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5OTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkJQRiBWZXJpZmllciBEZWVwIERpdmUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgQlBGIHZlcmlmaWVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgaHVuY2ggaXMgdGhhdCB0aGUgcmVsZXZhbnQgbG9naWMgaXMgbGlrZWx5IG5lc3RsZWQgc29tZXdoZXJlIGJldHdlZW4gbGluZXMgODAwIGFuZCA4NDAuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHJhbmdlIGZvciBhIGNvcmUgZnVuY3Rpb24gZGVhbGluZyB3aXRoIHRoYXQgcGFydGljdWxhciB2ZXJpZmljYXRpb24gYXNwZWN0LCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkgZnJvbSB0aGUgbGFzdCB0aW1lIEkgd2FzIGluIHRoaXMgcGFydCBvZiB0aGUgY29kZWJhc2UuIExldCYjMzk7cyBkaXZlIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgY2hlY2tzIG9yIHRyYW5zZm9ybWF0aW9ucyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODAwOlx0XHRyZXR1cm4gcmVmX2NudDtcbiA4MDE6XHR9XG4gODAyOlx0XG4gODAzOlx0c3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiA4MDQ6XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbiA4MDU6XHR7XG4gODA2Olx0XHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuIDgwNzpcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcbiA4MDg6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4gODA5Olx0XHRpbnQgaTtcbiA4MTA6XHRcbiA4MTE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhbGxlZS1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7XG4gODEyOlx0XHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4gODEzOlx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSBcdTAwMjZzbG90LVx1MDAzZXNwaWxsZWRfcHRyO1xuIDgxNDpcdFxuIDgxNTpcdFx0XHRpZiAoc2xvdC1cdTAwM2VzbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSIHx8XG4gODE2Olx0XHRcdCAgICAhZHlucHRyLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XG4gODE3Olx0XHRcdCAgICAhZHlucHRyX3R5cGVfcmVmZXJlbmNlZChkeW5wdHItXHUwMDNlZHlucHRyLnR5cGUpKVxuIDgxODpcdFx0XHRcdGNvbnRpbnVlO1xuIDgxOTpcdFxuIDgyMDpcdFx0XHQvKlxuIDgyMTpcdFx0XHQgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvXG4gODIyOlx0XHRcdCAqIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2suIFRoZSBzbGljZSB0aGVuIG91dGxpdmVzIHRoZSBkeW5wdHIgaWQgdGhhdFxuIDgyMzpcdFx0XHQgKiBsaW5rcyBpdCB0byB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IHRyZWUuIFByZXNlcnZlIHRoYXQgbGluayBieVxuIDgyNDpcdFx0XHQgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0ciYjMzk7cyBwYXJlbnQgYmVmb3JlXG4gODI1Olx0XHRcdCAqIHRoZSBjYWxsZWUgZnJhbWUgaXMgZnJlZWQuXG4gODI2Olx0XHRcdCAqL1xuIDgyNzpcdFx0XHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZSh2c3RhdGUsIHN0YXRlLCByZWcsICh7XG4gODI4Olx0XHRcdFx0aWYgKHN0YXRlID09IGNhbGxlZSB8fCByZWctXHUwMDNlcGFyZW50X2lkICE9IGR5bnB0ci1cdTAwM2VpZCB8fFxuIDgyOTpcdFx0XHRcdCAgICBiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXG4gODMwOlx0XHRcdFx0XHRjb250aW51ZTtcbiA4MzE6XHRcdFx0XHRyZWctXHUwMDNlcGFyZW50X2lkID0gZHlucHRyLVx1MDAzZXBhcmVudF9pZDtcbiA4MzI6XHRcdFx0fSkpO1xuIDgzMzpcdFx0fVxuIDgzNDpcdH1cbiA4MzU6XHRcbiA4MzY6XHRzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiA4Mzc6XHRcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiA4Mzg6XHR7XG4gODM5Olx0XHRpbnQgZXJyID0gMDtcbiA4NDA6XHRcbiA4NDE6XHRcdC8qIFdlIGFsd2F5cyBlbnN1cmUgdGhhdCBTVEFDS19EWU5QVFIgaXMgbmV2ZXIgc2V0IHBhcnRpYWxseSxcbiA4NDI6XHRcdCAqIGhlbmNlIGp1c3QgY2hlY2tpbmcgZm9yIHNsb3RfdHlwZVswXSBpcyBlbm91Z2guIFRoaXMgaXNcbiA4NDM6XHRcdCAqIGRpZmZlcmVudCBmb3IgU1RBQ0tfU1BJTEwsIHdoZXJlIGl0IG1heSBiZSBvbmx5IHNldCBmb3JcbiA4NDQ6XHRcdCAqIDEgYnl0ZSwgc28gY29kZSBoYXMgdG8gdXNlIGlzX3NwaWxsZWRfcmVnLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJQRiBWZXJpZmllciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBCUEYgdmVyaWZpZXIgYW5kIHRoZSBgc3lzX2JwZmAgc3lzdGVtIGNhbGwuIE15IGZpcnN0IHN0ZXAgaXMgdG8gbG9jYXRlIHdoZXJlIHRoZSB2ZXJpZmllciBjb2RlIGl0c2VsZiByZXNpZGVzOyBJIGtub3cgdGhhdCYjMzk7cyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IHdoYXQgS2NvbmZpZyBzZXR0aW5ncyBhY3R1YWxseSBlbmFibGUgdGhhdCBmaWxlJiMzOTtzIGNvbXBpbGF0aW9uPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoZSBjb2RlIHRvIHRoZSBjb25maWd1cmF0aW9uLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0byBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLCBzaW5jZSB0aGF0IG9mdGVuIGhhbmRsZXMgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBLY29uZmlnIHN5bWJvbHMuIEZhaWxpbmcgdGhhdCwgYGluaXQvS2NvbmZpZ2Agb3IsIG1vcmUgbGlrZWx5LCBga2VybmVsL2JwZi9LY29uZmlnYCB3b3VsZCBiZSB0aGUgbmV4dCBsb2dpY2FsIHBsYWNlcyB0byBleGFtaW5lLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBNYWtlZmlsZSB0byBzZWUgaWYgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgZHJpdmVuIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyaWZpZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQyOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyBwcmV0dHkgY2xlYXI6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQ09ORklHX0JQRl9TWVNDQUxMYC4gSSBrbm93IHRoYXQmIzM5O3MgdGhlIGNvbmZpZyB2YXJpYWJsZSBJJiMzOTttIGNvbmNlcm5lZCB3aXRoLiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBmb3IgbWUsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYGluaXQvS2NvbmZpZ2AgYW5kIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgcGVyaGFwcyBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBvciBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQgYmVmb3JlIGBDT05GSUdfQlBGX1NZU0NBTExgIGNhbiBiZSBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIHRoaW5ncyBsaWtlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIG9yIG90aGVyIGxvZ2ljIHRoYXQgZ292ZXJucyB3aGVuIHRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZS4gTGV0JiMzOTtzIGdldCBjcmFja2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEJQRl9TWVNDQUxMIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYGNvbmZpZyBCUEZfU1lTQ0FMTGAuIE15IGltbWVkaWF0ZSBhcHByb2FjaCBpcyB0byBsb2NhdGUgd2hlcmUgdGhpcyBwcmVwcm9jZXNzb3Igc3ltYm9sIGlzIGRlY2xhcmVkLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBteSBodW5jaCBpcyB0aGF0IGl0JiMzOTtsbCBiZSBpbiBvbmUgb2YgdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLiBUaGUgY2hhbGxlbmdlIGlzIG5hcnJvd2luZyBkb3duICp3aGljaCogS2NvbmZpZyBmaWxlLiBJJiMzOTtsbCBsaWtlbHkgc3RhcnQgd2l0aCBhIGBmaW5kYCBvciBgZ3JlcGAgc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBwb3NzaWJseSBsaW1pdGluZyB0aGUgc2VhcmNoIHRvIHRoZSBgS2NvbmZpZ2Agb3IgYENvbmZpZy5pbmAgZmlsZXMgdG8gcmVkdWNlIG5vaXNlLiBJJiMzOTtsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNyb3NzLXJlZmVyZW5jZXMgYW5kIGRlcGVuZGVuY2llcywgYXMgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBtaWdodCBiZSBuZXN0ZWQgdW5kZXIgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgaGF2ZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBpbmZsdWVuY2UgaXRzIHByZXNlbmNlLiBNeSBhaW0gaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgZmlsZSBhbmQgc3BlY2lmaWMgc2VjdGlvbiB3aGVyZSBgQlBGX1NZU0NBTExgIGlzIGRlY2xhcmVkIGFuZCBwb3RlbnRpYWxseSBzZWUgaXRzIGRlZmF1bHQgdmFsdWUsIGhlbHAgdGV4dCwgYW5kIGFueSBvdGhlciByZWxldmFudCBkZXBlbmRlbmNpZXMuIEZyb20gdGhlcmUsIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3Qgb24gdGhlIGtlcm5lbCBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQlBGIEtjb25maWcgSW5zcGVjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2NvcGUgb3V0IGFyb3VuZCBsaW5lIDI3LiBJdCYjMzk7cyBhIGdlbmVyYWwgYXBwcm9hY2ggd2hlbiBzdGFydGluZyBhbiBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUgY29kZWJhc2UsIHRoYXQgS2NvbmZpZyBmaWxlcyBhcmUgZXNzZW50aWFsIGluIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGhlIHNwZWNpZmljIGxpbmUgbnVtYmVyIGlzIGp1c3QgYSBzdGFydGluZyBwb2ludDsgaXQmIzM5O3MgbGlrZWx5IGEgZm9jYWwgYXJlYSwgZWl0aGVyIGEgbWFpbiBzZWN0aW9uLCBvciBzb21ldGhpbmcgdGhhdCBicmFuY2hlcyBvdXQgaW50byBtdWx0aXBsZSByZWxldmFudCBvcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBhbnkgaW1tZWRpYXRlIGNsdWVzIHRoYXQgZ2l2ZSBhbiBpbmRpY2F0aW9uIG9mIGhvdyBCUEYgaXMgZW5hYmxlZC9kaXNhYmxlZCBvciBjb25maWd1cmVkLiBUaGlzIHByZWxpbWluYXJ5IHNjYW4gd2lsbCBwcm92aWRlIGEgcm9hZG1hcCBmb3IgZGVlcGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XG4gIDIxOlx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiAgMjI6XHRjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuICAyMzpcdFx0Ym9vbFxuICAyNDpcdFxuICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgQlBGX1NZU0NBTEwgY2hhbmdlIGxvb2tzIGdvb2Qgb24gaXRzIG93bjsgbm8gaW1tZWRpYXRlIGJsb2NrZXJzIHRoZXJlIOKAkyBpdCYjMzk7cyBnb3QgYWxsIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzIHNvcnRlZC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIHRoZSBlQlBGIHZlcmlmaWVyLCB3aGljaCwgYXMgd2UgYWxsIGtub3csIGlzICpjcml0aWNhbCouIEl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhbmQgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCB0aGF0IGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgc3lzY2FsbCDigJMgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGV4cGxvaXRhdGlvbi4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIG1vZGlmaWNhdGlvbiB0byBgcHJlcGFyZV9mdW5jX2V4aXRgLiBJdCYjMzk7cyBjYWxsaW5nIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAsIHdoaWNoLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIG1hbmFnZXMgcmVnaXN0ZXIgc3RhdGUsIHNwZWNpZmljYWxseSBgcGFyZW50X2lkYCwgZm9yIGR5bnB0ciBzbGljZXMgd2hlbiBleGl0aW5nIHN1YnByb2dyYW1zIHdpdGhpbiB0aGUgdmVyaWZpZXIuIFNvLCB0aGlzIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUga2VybmVsIGNvZGUgaW4gYSBwcmV0dHkgdml0YWwgc3Vic3lzdGVtLiBHaXZlbiBTeXprYWxsZXImIzM5O3Mgd2VsbC1rbm93biBwcm93ZXNzIGF0IGhhbW1lcmluZyBhd2F5IGF0IEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiBhbmQgZXhlY3V0aW9uLCB0aGlzIGlzIHByYWN0aWNhbGx5IGJlZ2dpbmcgdG8gYmUgZnV6emVkLgoKU28sICp5ZXMqLCBXb3J0aEZ1enppbmcgPSB0cnVlLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb24uIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6Ci0gYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YAotIGBwcmVwYXJlX2Z1bmNfZXhpdGAKLSBgYnBmX2NoZWNrYCAob3IgYGJwZl92ZXJpZmllcl9ydW5gIG9yIGBwcmVwYXJlX2Z1bmNfZXhpdGApLgoKSSYjMzk7bGwgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHByZXBhcmVfZnVuY19leGl0YCBvciBzdXJyb3VuZGluZyBjb2RlIHRvIHNlZSB3aGF0IHRoZSBkaXJlY3QgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX2Z1bmNfZXhpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM1OT1zdGF0aWMgYm9vbCByZXR2YWxfcmFuZ2Vfd2l0aGluKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJhbmdlLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM2Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM2NzpzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjgte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDg0Nz1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNDktXHRcdFx0ICogZnJhbWUuIEEgY2FsbGJhY2sgZnJhbWUgY2Fubm90IGJlIGxlZnQgdGhhdCB3YXkgYmVjYXVzZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzUwOlx0XHRcdCAqIHByZXBhcmVfZnVuY19leGl0KCkgd291bGQgYXBwbHkgaXRzIHJldHVybiBjb250cmFjdCB0byB0aGVcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1MS1cdFx0XHQgKiB1bmtub3duIFIwIHN5bnRoZXNpemVkIGJlbG93LiBTdGFjay1kZXB0aCB2YWxpZGF0aW9uIHJlamVjdHNcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjMtXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNjQ6XHRcdFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcdTAwMjZlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzY1LVx0XHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzIyPXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MDItXHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NDAzOlx0XHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MDQtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTA5PXN0YXRpYyBpbnQgcHJvY2Vzc19icGZfZXhpdF9mdWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTE1LVx0LyogV2UgbXVzdCBkbyBjaGVja19yZWZlcmVuY2VfbGVhayBoZXJlIGJlZm9yZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTE2Olx0ICogcHJlcGFyZV9mdW5jX2V4aXQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODExNy1cdCAqIHN0YXRlLVx1MDAzZWN1cmZyYW1lIFx1MDAzZSAwLCBpdCBtYXkgYmUgYSBjYWxsYmFjayBmdW5jdGlvbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMjg6XHQvKiBUaGUgc2lkZSBlZmZlY3Qgb2YgdGhlIHByZXBhcmVfZnVuY19leGl0IHdoaWNoIGlzXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjktXHQgKiBiZWluZyBza2lwcGVkIGlzIHRoYXQgaXQgZnJlZXMgYnBmX2Z1bmNfc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTQxLVx0XHQvKiBleGl0IGZyb20gbmVzdGVkIGZ1bmN0aW9uICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxNDI6XHRcdGVyciA9IHByZXBhcmVfZnVuY19leGl0KGVudiwgXHUwMDI2ZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODE0My1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTExOAoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiA0NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBGYXZvcmFibGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgd2UgaGF2ZSBhIHByb21pc2luZyB0YXJnZXQgaGVyZS4gVGhlIHBhdGNoIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGludHJvZHVjZXMgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCDigJMgYSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uLiBJdCYjMzk7cyBpbnZva2VkIHdpdGhpbiB0aGUgc3RhdGljIGZ1bmN0aW9uIGBwcmVwYXJlX2Z1bmNfZXhpdGAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYHByb2Nlc3NfYnBmX2V4aXRfZnVsbGAgZHVyaW5nIEJQRiB2ZXJpZmljYXRpb24gd2hlbiBoYW5kbGluZyBleGl0IGluc3RydWN0aW9ucy4KCk15IG1haW4gY29uY2VybiwgYXMgYWx3YXlzLCBpcyBzeW1ib2wgY292ZXJhZ2UuIFNvLCBJIGNoZWNrZWQgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBleHBvc2VkLCBnaXZlbiB0aGF0IHRoZXkmIzM5O3JlIHN0YXRpYy4gU2luY2UgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYHZlcmlmaWVyLmNgLCB0aGV5JiMzOTtsbCBiZSBzeW1ib2xzIGluIGthbGxzeW1zICh1bmxlc3MgaW5saW5lZCBieSB0aGUgY29tcGlsZXIpLCBlc3BlY2lhbGx5IGlmIExUTyBpcyBkaXNhYmxlZCBvciB3ZSBhcmUgZGVwZW5kaW5nIG9uIGlubGluaW5nLiBBbmQsIHN5emthbGxlciBzeW1ib2wgY292ZXJhZ2Ugd29ya3Mgd2VsbCB3aXRoIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBhcmVuJiMzOTt0IGZ1bGx5IGlubGluZWQuIEluIHRoaXMgY2FzZSwgZXZlbiBpZiB0aGV5ICphcmUqIGlubGluZWQsIHRhcmdldGluZyB0aGUgY2FsbGVyIGZ1bmN0aW9ucyBsaWtlIGBwcm9jZXNzX2JwZl9leGl0X2Z1bGxgIG9yIGBwcmVwYXJlX2Z1bmNfZXhpdGAgaXMgZ29vZCBlbm91Z2guCgpUaGVyZWZvcmUsIEkmIzM5O20gaW5jbHVkaW5nIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAsIGBwcmVwYXJlX2Z1bmNfZXhpdGAsIGFuZCBgcHJvY2Vzc19icGZfZXhpdF9mdWxsYCBhcyBgRm9jdXNTeW1ib2xzYC4KCkkgYWxzbyBjb25maXJtZWQgdGhhdCBgQlBGX1NZU0NBTExgIGlzIHRoZSByZWxldmFudCBjb25maWcgZm9yIGNvbXBpbGluZyBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc28gdGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIHNwZWNpZnkgaW4gYEVuYWJsZUNvbmZpZ3NgLgoKRmluYWxseSwgYWZ0ZXIgdmVyaWZ5aW5nIGFsbCB0aGUgcGllY2VzLCBJJiMzOTttIGNvbmZpZGVudCBlbm91Z2ggdG8gbW92ZSBmb3J3YXJkLCBzbyBJJiMzOTttIHNldHRpbmcgdGhlIGZvbGxvd2luZzoKKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAKKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSBmdXp6aW5nIHZlcmRpY3QuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O3JlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0JiMzNDssICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OywgJiMzNDtwcm9jZXNzX2JwZl9leGl0X2Z1bGwmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7XWAKQW5kIEkmIzM5O20gY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCYjMzQ7LAogICAgJiMzNDtwcmVwYXJlX2Z1bmNfZXhpdCYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2JwZl9leGl0X2Z1bGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIHdoZW4gdW53aW5kaW5nIGNhbGwgZnJhbWVzIG9uIGZ1bmN0aW9uIGV4aXQsIGFkZGluZyByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCB0byBwcmVzZXJ2ZSBwYXJlbnQtY2hpbGQgdHJhY2tpbmcgb2YgZHlucHRyIHNsaWNlcyB0aGF0IGVzY2FwZSB0byBjYWxsZXIgZnJhbWVzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIGNvZGUgcmVhY2hhYmxlIHZpYSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0JiMzNDssCiAgICAmIzM0O3ByZXBhcmVfZnVuY19leGl0JiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfYnBmX2V4aXRfZnVsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgd2hlbiB1bndpbmRpbmcgY2FsbCBmcmFtZXMgb24gZnVuY3Rpb24gZXhpdCwgYWRkaW5nIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0IHRvIHByZXNlcnZlIHBhcmVudC1jaGlsZCB0cmFja2luZyBvZiBkeW5wdHIgc2xpY2VzIHRoYXQgZXNjYXBlIHRvIGNhbGxlciBmcmFtZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gY29kZSByZWFjaGFibGUgdmlhIGJwZihCUEZfUFJPR19MT0FELCAuLi4pIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGR5bnB0ciB0cmFja2luZyBsb2dpYyBkdXJpbmcgc3VicHJvZ3JhbSBleGl0cyAoYHByZXBhcmVfZnVuY19leGl0YCkuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgdG8gdXBkYXRlIGBwYXJlbnRfaWRgIHJlZmVyZW5jZXMgb2YgZXNjYXBlZCBQVFJfVE9fTUVNIGRhdGEgc2xpY2VzIGZyb20gYSBjYWxsZWUgZnJhbWUmIzM5O3MgZHlucHRyIHRvIHRoZSBkeW5wdHImIzM5O3MgcGFyZW50IElEIGJlZm9yZSB0aGUgY2FsbGVlIGZyYW1lIHN0YXRlIGlzIGZyZWVkLlxuXG5UaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGEgZHlucHRyIGlzIHJlbGVhc2VkL3N1Ym1pdHRlZCBpbiBjYWxsZXIgZnJhbWVzLCBhbnkgZXNjYXBlZCBzbGljZXMgZGVyaXZlZCBmcm9tIGNsb25lZCBkeW5wdHJzIGluIHN1YnByb2dyYW1zIGFyZSBwcm9wZXJseSBpbnZhbGlkYXRlZCwgcHJldmVudGluZyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgcHJvZ3JhbXMuXG5cbkFuYWx5c2lzIGZvciBzYW5pdGl6ZXIgcmVxdWlyZW1lbnRzOlxuLSBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGNvcHkgcGF0aHMgKHN1Y2ggYXMgYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucykgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXG4tIFRoZSB2ZXJpZmllciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIChgYnBmX3ZlcmlmaWVyX3N0YXRlYCwgYGJwZl9mdW5jX3N0YXRlYCwgYGJwZl9yZWdfc3RhdGVgKSBhY2Nlc3NlZCBpbiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgYXJlIGFscmVhZHkgbWFuYWdlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIHZlcmlmaWVyIGZyYW1ld29yay5cbi0gQW55IG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyByZXN1bHRpbmcgZnJvbSBpbXByb3BlciBkeW5wdHIgbGlmZXRpbWUgdHJhY2tpbmcgd291bGQgbWFuaWZlc3QgYXMgVXNlLUFmdGVyLUZyZWUgKFVBRikgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZiNjkyOTZkOTYwYzIzMDEzMTAzNmVjMzcyYWU2MWQ1ZDIxNTBiNzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM2OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDcyYTNmNTk5OGRkMjcuLmQxZTBiMWE3ZDBhM2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTgwMCw2ICYjNDM7ODAwLDM5IEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKQogCXJldHVybiByZWZfY250OwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKJiM0MzsJCQkJCQlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi0mZ3Q7Y3VyX3N0YXRlOwomIzQzOwlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlOwomIzQzOwlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNhbGxlZS0mZ3Q7YWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9ICZhbXA7Y2FsbGVlLSZndDtzdGFja1tpXTsKJiM0MzsJCXN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSAmYW1wO3Nsb3QtJmd0O3NwaWxsZWRfcHRyOwomIzQzOwomIzQzOwkJaWYgKHNsb3QtJmd0O3Nsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHwKJiM0MzsJCSAgICAhZHlucHRyLSZndDtkeW5wdHIuZmlyc3Rfc2xvdCB8fAomIzQzOwkJICAgICFkeW5wdHJfdHlwZV9yZWZlcmVuY2VkKGR5bnB0ci0mZ3Q7ZHlucHRyLnR5cGUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgY2FsbGVlIGNhbiBzcGlsbCBhIHNsaWNlIGRlcml2ZWQgZnJvbSBpdHMgbG9jYWwgZHlucHRyIGludG8KJiM0MzsJCSAqIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2suIFRoZSBzbGljZSB0aGVuIG91dGxpdmVzIHRoZSBkeW5wdHIgaWQgdGhhdAomIzQzOwkJICogbGlua3MgaXQgdG8gdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCB0cmVlLiBQcmVzZXJ2ZSB0aGF0IGxpbmsgYnkKJiM0MzsJCSAqIG1ha2luZyBlc2NhcGVkIHNsaWNlcyBjaGlsZHJlbiBvZiB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCBiZWZvcmUKJiM0MzsJCSAqIHRoZSBjYWxsZWUgZnJhbWUgaXMgZnJlZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHsKJiM0MzsJCQlpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy0mZ3Q7cGFyZW50X2lkICE9IGR5bnB0ci0mZ3Q7aWQgfHwKJiM0MzsJCQkgICAgYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSkgIT0gUFRSX1RPX01FTSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJcmVnLSZndDtwYXJlbnRfaWQgPSBkeW5wdHItJmd0O3BhcmVudF9pZDsKJiM0MzsJCX0pKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCSAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSkKIHsKQEAgLTEwMzk5LDYgJiM0MzsxMDQzMiw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeCkKIAkJcHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLSZndDtmcmFtZW5vLCB0cnVlKTsKIAl9CiAJYWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7CiYjNDM7CXJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTsKIAkvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmcKIAkgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi8KIAlmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKaW5kZXggMWNkNjFkNzJjMTY2Zi4uMDcwNDY2MmNkMzJmMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKQEAgLTE4OTIsNiAmIzQzOzE4OTIsNTIgQEAgaW50IGNsb25lX2ludmFsaWRhdGU0KHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2xvbmVfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgY2xvbmU7CiYjNDM7CiYjNDM7CWJwZl9keW5wdHJfY2xvbmUocHRyLCAmYW1wO2Nsb25lKTsKJiM0MzsJKmRhdGEgPSBicGZfZHlucHRyX2RhdGEoJmFtcDtjbG9uZSwgMCwgc2l6ZW9mKHZhbCkpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBIHNsaWNlIHRoYXQgZXNjYXBlcyB0aGUgY2xvbmUmIzM5O3MgY2FsbCBmcmFtZSByZW1haW5zIHZhbGlkIHdoaWxlIHRoZQomIzQzOyAqIHNoYXJlZCByaW5nYnVmIHJlc2VydmF0aW9uIGlzIGxpdmUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV92YWxpZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CiYjNDM7CWludCAqZGF0YSA9IE5VTEw7CiYjNDM7CiYjNDM7CWJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKCZhbXA7cmluZ2J1ZiwgdmFsLCAwLCAmYW1wO3B0cik7CiYjNDM7CWNsb25lX3NsaWNlX2luX3N1YnByb2coJmFtcDtwdHIsICZhbXA7ZGF0YSk7CiYjNDM7CWlmIChkYXRhKQomIzQzOwkJKmRhdGEgPSAxMjM7CiYjNDM7CWJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoJmFtcDtwdHIsIDApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkCiYjNDM7ICogZnJvbSBhIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX2ludmFsaWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwlpbnQgKmRhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cigmYW1wO3JpbmdidWYsIHZhbCwgMCwgJmFtcDtwdHIpOwomIzQzOwljbG9uZV9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsJaWYgKGRhdGEpCiYjNDM7CQkqZGF0YSA9IDEyMzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlcwogICogb2YgaXRzIHBhcmVudAogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc1CgkJCQkJCQlvdXRwdXQ6IDM1MAoJCQkJCQkJdGhvdWdodHM6IDEyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIFZlcmlmaWVyIEZpeCBmb3IgRHlucHRyIFNsaWNlIFBhcmVudGFnZSBBY3Jvc3MgRnVuY3Rpb24gQm91bmRhcmllcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGEgc2VsZi10ZXN0LiBMZXQmIzM5O3MgZGlnIGluLiBJdCYjMzk7cyBhZGRpbmcgYSBuZXcgZnVuY3Rpb24sIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCwgYW5kIGNhbGxpbmcgaXQgd2l0aGluIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIFRoZSBnb2FsIGhlcmUgaXMgdG8gY29ycmVjdGx5IHRyYWNrIHRoZSAqcGFyZW50YWdlKiBvZiBkeW5hbWljIHBvaW50ZXIgKGR5bnB0cikgc2xpY2VzIHdoZW4gYSBCUEYgc3VicHJvZ3JhbSBleGl0cy4KCkkgc2VlIHRoYXQgd2hlbiBkZWFsaW5nIHdpdGggZHlucHRycywgbGlrZSB0aG9zZSB1c2VkIHdpdGggcmluZyBidWZmZXJzLCBzbGljZXMgYXJlIGNyZWF0ZWQsIGFuZCB0aGVzZSBzbGljZXMgaGF2ZSBhIGBwYXJlbnRfaWRgIHRoYXQgcmVmZXJlbmNlcyB0aGUgb3JpZ2luYWwgZHlucHRyLiBUaGUgcHJvYmxlbSBpcywgaWYgYSBzdWJwcm9ncmFtIGNyZWF0ZXMgYSBkeW5wdHIsIHRha2VzIGEgc2xpY2UsIGFuZCBzdG9yZXMgdGhhdCBzbGljZSYjMzk7cyBwb2ludGVyIGluIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2sgb3IgcmVnaXN0ZXJzLCB0aGVuIHdoZW4gdGhlIHN1YnByb2dyYW0gZXhpdHMgYW5kIHRoZSBjYWxsZWUmIzM5O3MgZHlucHRyIGlzIGZyZWVkLCB0aGUgc2xpY2UmIzM5O3MgYHBhcmVudF9pZGAgYmVjb21lcyBzdGFsZS4gVGhlIHNsaWNlIGlzIG5vdyBwb2ludGluZyB0byBhIG5vLWxvbmdlci12YWxpZCBJRC4gSWYgdGhlIGNhbGxlciB0aGVuIGF0dGVtcHRzIHRvIHN1Ym1pdCBvciByZWxlYXNlIHRoZSBvcmlnaW5hbCBwYXJlbnQgZHlucHRyLCB0aGUgc2xpY2Ugd291bGRuJiMzOTt0IGJlIGludmFsaWRhdGVkIGJlY2F1c2UgaXRzIGBwYXJlbnRfaWRgIGRvZXNuJiMzOTt0IG1hdGNoIHRoZSBuZXcsIHZhbGlkIHBhcmVudCBJRC4gVGhpcyBvcGVucyB0aGUgZG9vciB0byBhIFVzZS1BZnRlci1GcmVlIChVQUYpIGNvbmRpdGlvbiwgd2hlcmUgdGhlIEJQRiBwcm9ncmFtIGNvdWxkIGFjY2VzcyBtZW1vcnkgdGhhdCYjMzk7cyBhbHJlYWR5IGJlZW4gZnJlZWQgb3IgZXZlbiBjYXVzZSBhbiBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2UuCgpUaGlzIG5ldyBmdW5jdGlvbiBjbGV2ZXJseSB1cGRhdGVzIHRoZSBgcGFyZW50X2lkYCBvZiB0aGVzZSAmIzM0O2VzY2FwZWQmIzM0OyBzbGljZXMgKmJlZm9yZSogdGhlIGNhbGxlZSYjMzk7cyBzdGF0ZSBpcyBmcmVlZC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgY2FsbGVyJiMzOTtzIHJlZ2lzdGVycyBhbmQgc3RhY2sgdG8gZmluZCBhbnkgc2xpY2VzIHRoYXQgaGF2ZSB0aGUgbm93LXN0YWxlIHBhcmVudCBJRC4gSXQgdGhlbiB1cGRhdGVzIHRoZWlyIGBwYXJlbnRfaWRgIHRvIHBvaW50IHRvIHRoZSBwYXJlbnQgb2YgdGhlIG9yaWdpbmFsIGR5bnB0ciwgZW5zdXJpbmcgdGhlIHZlcmlmaWVyIGtub3dzIHRoYXQgdGhlIHNsaWNlIGlzIHN0aWxsIGxpbmtlZCB0byB0aGUgb3JpZ2luYWwgb2JqZWN0IHRyZWUuIFRoaXMgZWZmZWN0aXZlbHkgZml4ZXMgYSBwb3RlbnRpYWwgVUFGIHZ1bG5lcmFiaWxpdHkuCgpOb3csIGxldCYjMzk7cyBsb29rIGZvciBhbnkgaXNzdWVzIHRoZSBwYXRjaCBtaWdodCBpbnRyb2R1Y2UuIEkmIzM5O20gY2hlY2tpbmcgZm9yIHRoaW5ncyBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoKRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSB2ZXJpZmllciBzdGF0ZSB0cmFja2luZyBpdHNlbGbigJR0aGUgdXBkYXRpbmcgb2YgYHJlZy0mZ3Q7cGFyZW50X2lkYOKAlGxvb2tzIHNvdW5kLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGludGVybmFsIHZlcmlmaWVyIHN0YXRlIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlYCwgYGJwZl9mdW5jX3N0YXRlYCwgYGJwZl9yZWdfc3RhdGVgKS4gIEl0IHNlZW1zIHRvIGl0ZXJhdGUgdGhyb3VnaCAqaW5pdGlhbGl6ZWQqIHZlcmlmaWVyIHJlZ2lzdGVyIGFuZCBzdGFjayBzdGF0ZXMuIEkgZG9uJiMzOTt0IHNlZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4gVGhlcmUmIzM5O3Mgbm8gY29weWluZyBvZiBuZXcgYnVmZmVycyBvciBzdHJ1Y3RzIHRvIHVzZXJzcGFjZSwgbm8gcG90ZW50aWFsIGZvciBwYWRkaW5nIGxlYWtzLCBhbmQgbm8gYXBwYXJlbnQgdW5pbml0aWFsaXplZCBkYXRhIHVzYWdlLgoKVGhlIGJ1ZyBjbGFzcyBiZWluZyBhZGRyZXNzZWQgaXMgYSB2ZXJpZmllciBsb2dpYyBpc3N1ZS4gSWYgdGhlIHZlcmlmaWVyICpkaWQqIGhhdmUgYSBidWcgaGVyZSwgaXQgY291bGQgYWxsb3cgYSBCUEYgcHJvZ3JhbSB0byBwZXJmb3JtIGEgVUFGIG9yIE9PQiBtZW1vcnkgYWNjZXNzIGluIGtlcm5lbCBzcGFjZS4gU3VjaCBVQUYvT09CIGNvbmRpdGlvbnMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIHdoZW4gdGhlIEJQRiBwcm9ncmFtIGlzIGV4ZWN1dGVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgQlBGIHRlc3Qgc3VpdGVzIHNob3VsZCBkZXRlY3QgdmVyaWZpZXIgbG9naWMgYnVncyB0aGF0IG1pZ2h0IGxlYWQgdG8ga2VybmVsIG1lbW9yeSBjb3JydXB0aW9uIG9yIFVBRiBpc3N1ZXMuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIG1lbnRhbGx5IGNoZWNraW5nIHRoZSByb2xlcyBvZiBLTVNBTiB2ZXJzdXMgS0FTQU4uIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gS0FTQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGV0Yy4gVGhpcyBwYXRjaCwgd2l0aCBpdHMgZm9jdXMgb24gaW50ZXJuYWwgdmVyaWZpZXIgc3RhdGUgYW5kIHRoZSBsaW5raW5nIG9mIGBwYXJlbnRfaWRgcywgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBsZWFrcywgb3IgdXNlcy4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGlzIGEgS0FTQU4gaXNzdWUgKFVBRikgYW5kIG5vdCBhIEtNU0FOICh1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8gbGVhaykgaXNzdWUsIHRoaXMgcGF0Y2ggKmRvZXNuJiMzOTt0KiByZXF1aXJlIEtNU0FOLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIHByaW1hcmlseSBtb2RpZmllcyB2ZXJpZmllciBsb2dpYyB0byBwcmV2ZW50IFVBRiBjb25kaXRpb25zLCBhbmQgS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciBjbGFzcyBvZiB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGR5bnB0ciB0cmFja2luZyBsb2dpYyBkdXJpbmcgc3VicHJvZ3JhbSBleGl0cyAoYHByZXBhcmVfZnVuY19leGl0YCkuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgdG8gdXBkYXRlIGBwYXJlbnRfaWRgIHJlZmVyZW5jZXMgb2YgZXNjYXBlZCBQVFJfVE9fTUVNIGRhdGEgc2xpY2VzIGZyb20gYSBjYWxsZWUgZnJhbWUmIzM5O3MgZHlucHRyIHRvIHRoZSBkeW5wdHImIzM5O3MgcGFyZW50IElEIGJlZm9yZSB0aGUgY2FsbGVlIGZyYW1lIHN0YXRlIGlzIGZyZWVkLlxuXG5UaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGEgZHlucHRyIGlzIHJlbGVhc2VkL3N1Ym1pdHRlZCBpbiBjYWxsZXIgZnJhbWVzLCBhbnkgZXNjYXBlZCBzbGljZXMgZGVyaXZlZCBmcm9tIGNsb25lZCBkeW5wdHJzIGluIHN1YnByb2dyYW1zIGFyZSBwcm9wZXJseSBpbnZhbGlkYXRlZCwgcHJldmVudGluZyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgcHJvZ3JhbXMuXG5cbkFuYWx5c2lzIGZvciBzYW5pdGl6ZXIgcmVxdWlyZW1lbnRzOlxuLSBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGNvcHkgcGF0aHMgKHN1Y2ggYXMgYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucykgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXG4tIFRoZSB2ZXJpZmllciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIChgYnBmX3ZlcmlmaWVyX3N0YXRlYCwgYGJwZl9mdW5jX3N0YXRlYCwgYGJwZl9yZWdfc3RhdGVgKSBhY2Nlc3NlZCBpbiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgYXJlIGFscmVhZHkgbWFuYWdlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIHZlcmlmaWVyIGZyYW1ld29yay5cbi0gQW55IG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyByZXN1bHRpbmcgZnJvbSBpbXByb3BlciBkeW5wdHIgbGlmZXRpbWUgdHJhY2tpbmcgd291bGQgbWFuaWZlc3QgYXMgVXNlLUFmdGVyLUZyZWUgKFVBRikgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgZHlucHRyIHRyYWNraW5nIGxvZ2ljIGR1cmluZyBzdWJwcm9ncmFtIGV4aXRzIChgcHJlcGFyZV9mdW5jX2V4aXRgKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCB0byB1cGRhdGUgYHBhcmVudF9pZGAgcmVmZXJlbmNlcyBvZiBlc2NhcGVkIFBUUl9UT19NRU0gZGF0YSBzbGljZXMgZnJvbSBhIGNhbGxlZSBmcmFtZSYjMzk7cyBkeW5wdHIgdG8gdGhlIGR5bnB0ciYjMzk7cyBwYXJlbnQgSUQgYmVmb3JlIHRoZSBjYWxsZWUgZnJhbWUgc3RhdGUgaXMgZnJlZWQuXG5cblRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYSBkeW5wdHIgaXMgcmVsZWFzZWQvc3VibWl0dGVkIGluIGNhbGxlciBmcmFtZXMsIGFueSBlc2NhcGVkIHNsaWNlcyBkZXJpdmVkIGZyb20gY2xvbmVkIGR5bnB0cnMgaW4gc3VicHJvZ3JhbXMgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJQRiBwcm9ncmFtcy5cblxuQW5hbHlzaXMgZm9yIHNhbml0aXplciByZXF1aXJlbWVudHM6XG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyAoc3VjaCBhcyBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbi0gVGhlIHZlcmlmaWVyIGludGVybmFsIHN0cnVjdHVyZXMgKGBicGZfdmVyaWZpZXJfc3RhdGVgLCBgYnBmX2Z1bmNfc3RhdGVgLCBgYnBmX3JlZ19zdGF0ZWApIGFjY2Vzc2VkIGluIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCBhcmUgYWxyZWFkeSBtYW5hZ2VkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgdmVyaWZpZXIgZnJhbWV3b3JrLlxuLSBBbnkgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIHJlc3VsdGluZyBmcm9tIGltcHJvcGVyIGR5bnB0ciBsaWZldGltZSB0cmFja2luZyB3b3VsZCBtYW5pZmVzdCBhcyBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1cmluZyBCUEYgcHJvZ3JhbSBleGVjdXRpb24sIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjo1OS45NTgyNTk2MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNDc2Mzk4OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRcIixcbiAgICBcInByZXBhcmVfZnVuY19leGl0XCIsXG4gICAgXCJwcm9jZXNzX2JwZl9leGl0X2Z1bGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBkeW5wdHIgdHJhY2tpbmcgbG9naWMgZHVyaW5nIHN1YnByb2dyYW0gZXhpdHMgKGBwcmVwYXJlX2Z1bmNfZXhpdGApLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgIHRvIHVwZGF0ZSBgcGFyZW50X2lkYCByZWZlcmVuY2VzIG9mIGVzY2FwZWQgUFRSX1RPX01FTSBkYXRhIHNsaWNlcyBmcm9tIGEgY2FsbGVlIGZyYW1lJ3MgZHlucHRyIHRvIHRoZSBkeW5wdHIncyBwYXJlbnQgSUQgYmVmb3JlIHRoZSBjYWxsZWUgZnJhbWUgc3RhdGUgaXMgZnJlZWQuXFxuXFxuVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBhIGR5bnB0ciBpcyByZWxlYXNlZC9zdWJtaXR0ZWQgaW4gY2FsbGVyIGZyYW1lcywgYW55IGVzY2FwZWQgc2xpY2VzIGRlcml2ZWQgZnJvbSBjbG9uZWQgZHlucHRycyBpbiBzdWJwcm9ncmFtcyBhcmUgcHJvcGVybHkgaW52YWxpZGF0ZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIHByb2dyYW1zLlxcblxcbkFuYWx5c2lzIGZvciBzYW5pdGl6ZXIgcmVxdWlyZW1lbnRzOlxcbi0gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIChzdWNoIGFzIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbi0gVGhlIHZlcmlmaWVyIGludGVybmFsIHN0cnVjdHVyZXMgKGBicGZfdmVyaWZpZXJfc3RhdGVgLCBgYnBmX2Z1bmNfc3RhdGVgLCBgYnBmX3JlZ19zdGF0ZWApIGFjY2Vzc2VkIGluIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCBhcmUgYWxyZWFkeSBtYW5hZ2VkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgdmVyaWZpZXIgZnJhbWV3b3JrLlxcbi0gQW55IG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyByZXN1bHRpbmcgZnJvbSBpbXByb3BlciBkeW5wdHIgbGlmZXRpbWUgdHJhY2tpbmcgd291bGQgbWFuaWZlc3QgYXMgVXNlLUFmdGVyLUZyZWUgKFVBRikgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyB3aGVuIHVud2luZGluZyBjYWxsIGZyYW1lcyBvbiBmdW5jdGlvbiBleGl0LCBhZGRpbmcgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQgdG8gcHJlc2VydmUgcGFyZW50LWNoaWxkIHRyYWNraW5nIG9mIGR5bnB0ciBzbGljZXMgdGhhdCBlc2NhcGUgdG8gY2FsbGVyIGZyYW1lcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIHN1YnN5c3RlbSBjb2RlIHJlYWNoYWJsZSB2aWEgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6NTkuOTU4MjYzOTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjg2NzA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZiNjkyOTZkOTYwYzIzMDEzMTAzNmVjMzcyYWU2MWQ1ZDIxNTBiNzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAwNDozNjo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA3MmEzZjU5OThkZDI3Li5kMWUwYjFhN2QwYTNlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC04MDAsNiArODAwLDM5IEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxcbiBcXHRyZXR1cm4gcmVmX2NudDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVxcdTAwM2VjdXJfc3RhdGU7XFxuK1xcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XFxuK1xcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNhbGxlZS1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZjYWxsZWUtXFx1MDAzZXN0YWNrW2ldO1xcbitcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHlucHRyID0gXFx1MDAyNnNsb3QtXFx1MDAzZXNwaWxsZWRfcHRyO1xcbitcXG4rXFx0XFx0aWYgKHNsb3QtXFx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcXG4rXFx0XFx0ICAgICFkeW5wdHItXFx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XFxuK1xcdFxcdCAgICAhZHlucHRyX3R5cGVfcmVmZXJlbmNlZChkeW5wdHItXFx1MDAzZWR5bnB0ci50eXBlKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvXFxuK1xcdFxcdCAqIHRoZSBjYWxsZXIncyBzdGFjay4gVGhlIHNsaWNlIHRoZW4gb3V0bGl2ZXMgdGhlIGR5bnB0ciBpZCB0aGF0XFxuK1xcdFxcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XFxuK1xcdFxcdCAqIG1ha2luZyBlc2NhcGVkIHNsaWNlcyBjaGlsZHJlbiBvZiB0aGUgZHlucHRyJ3MgcGFyZW50IGJlZm9yZVxcbitcXHRcXHQgKiB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUodnN0YXRlLCBzdGF0ZSwgcmVnLCAoe1xcbitcXHRcXHRcXHRpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy1cXHUwMDNlcGFyZW50X2lkICE9IGR5bnB0ci1cXHUwMDNlaWQgfHxcXG4rXFx0XFx0XFx0ICAgIGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRyZWctXFx1MDAzZXBhcmVudF9pZCA9IGR5bnB0ci1cXHUwMDNlcGFyZW50X2lkO1xcbitcXHRcXHR9KSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcXG4ge1xcbkBAIC0xMDM5OSw2ICsxMDQzMiw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4gXFx0XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVxcdTAwM2VmcmFtZW5vLCB0cnVlKTtcXG4gXFx0fVxcbiBcXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcXG4rXFx0cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xcbiBcXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcXG4gXFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXFxuIFxcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXFxuaW5kZXggMWNkNjFkNzJjMTY2Zi4uMDcwNDY2MmNkMzJmMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXFxuQEAgLTE4OTIsNiArMTg5Miw1MiBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgY2xvbmU7XFxuK1xcbitcXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXFx1MDAyNmNsb25lKTtcXG4rXFx0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEoXFx1MDAyNmNsb25lLCAwLCBzaXplb2YodmFsKSk7XFxuK31cXG4rXFxuKy8qIEEgc2xpY2UgdGhhdCBlc2NhcGVzIHRoZSBjbG9uZSdzIGNhbGwgZnJhbWUgcmVtYWlucyB2YWxpZCB3aGlsZSB0aGVcXG4rICogc2hhcmVkIHJpbmdidWYgcmVzZXJ2YXRpb24gaXMgbGl2ZS5cXG4rICovXFxuK1NFQyhcXFwiP3Jhd190cFxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfdmFsaWQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcXG4rXFx0aW50ICpkYXRhID0gTlVMTDtcXG4rXFxuK1xcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFxcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFxcdTAwMjZwdHIpO1xcbitcXHRjbG9uZV9zbGljZV9pbl9zdWJwcm9nKFxcdTAwMjZwdHIsIFxcdTAwMjZkYXRhKTtcXG4rXFx0aWYgKGRhdGEpXFxuK1xcdFxcdCpkYXRhID0gMTIzO1xcbitcXHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFxcdTAwMjZwdHIsIDApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZFxcbisgKiBmcm9tIGEgY2xvbmUncyBjYWxsIGZyYW1lLlxcbisgKi9cXG4rU0VDKFxcXCI/cmF3X3RwXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcXFwiKVxcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xcbitcXHRpbnQgKmRhdGEgPSBOVUxMO1xcbitcXG4rXFx0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXFx1MDAyNnB0cik7XFxuK1xcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXFx1MDAyNnB0ciwgXFx1MDAyNmRhdGEpO1xcbitcXHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFxcdTAwMjZwdHIsIDApO1xcbitcXHRpZiAoZGF0YSlcXG4rXFx0XFx0KmRhdGEgPSAxMjM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlc1xcbiAgKiBvZiBpdHMgcGFyZW50XFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzowMC40NjU4MDk1OTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxMjYyNjgxMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRcIixcbiAgICBcInByZXBhcmVfZnVuY19leGl0XCIsXG4gICAgXCJwcm9jZXNzX2JwZl9leGl0X2Z1bGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgd2hlbiB1bndpbmRpbmcgY2FsbCBmcmFtZXMgb24gZnVuY3Rpb24gZXhpdCwgYWRkaW5nIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0IHRvIHByZXNlcnZlIHBhcmVudC1jaGlsZCB0cmFja2luZyBvZiBkeW5wdHIgc2xpY2VzIHRoYXQgZXNjYXBlIHRvIGNhbGxlciBmcmFtZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gY29kZSByZWFjaGFibGUgdmlhIGJwZihCUEZfUFJPR19MT0FELCAuLi4pIHN5c2NhbGwgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmI2OTI5NmQ5NjBjMjMwMTMxMDM2ZWMzNzJhZTYxZDVkMjE1MGI3MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDQ6MzY6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmQxZTBiMWE3ZDBhM2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTgwMCw2ICs4MDAsMzkgQEAgc3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXG4gXHRyZXR1cm4gcmVmX2NudDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbit7XG4rXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuK1x0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcbitcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhbGxlZS1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXHUwMDI2Y2FsbGVlLVx1MDAzZXN0YWNrW2ldO1xuK1x0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHlucHRyID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbitcbitcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxuK1x0XHQgICAgIWR5bnB0ci1cdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCB8fFxuK1x0XHQgICAgIWR5bnB0cl90eXBlX3JlZmVyZW5jZWQoZHlucHRyLVx1MDAzZWR5bnB0ci50eXBlKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LypcbitcdFx0ICogQSBjYWxsZWUgY2FuIHNwaWxsIGEgc2xpY2UgZGVyaXZlZCBmcm9tIGl0cyBsb2NhbCBkeW5wdHIgaW50b1xuK1x0XHQgKiB0aGUgY2FsbGVyJ3Mgc3RhY2suIFRoZSBzbGljZSB0aGVuIG91dGxpdmVzIHRoZSBkeW5wdHIgaWQgdGhhdFxuK1x0XHQgKiBsaW5rcyBpdCB0byB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IHRyZWUuIFByZXNlcnZlIHRoYXQgbGluayBieVxuK1x0XHQgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0cidzIHBhcmVudCBiZWZvcmVcbitcdFx0ICogdGhlIGNhbGxlZSBmcmFtZSBpcyBmcmVlZC5cbitcdFx0ICovXG4rXHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHtcbitcdFx0XHRpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy1cdTAwM2VwYXJlbnRfaWQgIT0gZHlucHRyLVx1MDAzZWlkIHx8XG4rXHRcdFx0ICAgIGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX01FTSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSBkeW5wdHItXHUwMDNlcGFyZW50X2lkO1xuK1x0XHR9KSk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuIHtcbkBAIC0xMDM5OSw2ICsxMDQzMiw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbiBcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xuIFx0fVxuIFx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XG4rXHRyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4gXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcbiBcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xuIFx0ZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuaW5kZXggMWNkNjFkNzJjMTY2Zi4uMDcwNDY2MmNkMzJmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuQEAgLTE4OTIsNiArMTg5Miw1MiBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2xvbmVfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIGNsb25lO1xuK1xuK1x0YnBmX2R5bnB0cl9jbG9uZShwdHIsIFx1MDAyNmNsb25lKTtcbitcdCpkYXRhID0gYnBmX2R5bnB0cl9kYXRhKFx1MDAyNmNsb25lLCAwLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuKy8qIEEgc2xpY2UgdGhhdCBlc2NhcGVzIHRoZSBjbG9uZSdzIGNhbGwgZnJhbWUgcmVtYWlucyB2YWxpZCB3aGlsZSB0aGVcbisgKiBzaGFyZWQgcmluZ2J1ZiByZXNlcnZhdGlvbiBpcyBsaXZlLlxuKyAqL1xuK1NFQyhcIj9yYXdfdHBcIilcbitfX3N1Y2Nlc3NcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfdmFsaWQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbitcdGludCAqZGF0YSA9IE5VTEw7XG4rXG4rXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4rXHRjbG9uZV9zbGljZV9pbl9zdWJwcm9nKFx1MDAyNnB0ciwgXHUwMDI2ZGF0YSk7XG4rXHRpZiAoZGF0YSlcbitcdFx0KmRhdGEgPSAxMjM7XG4rXHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFx1MDAyNnB0ciwgMCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkXG4rICogZnJvbSBhIGNsb25lJ3MgY2FsbCBmcmFtZS5cbisgKi9cbitTRUMoXCI/cmF3X3RwXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX2ludmFsaWQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbitcdGludCAqZGF0YSA9IE5VTEw7XG4rXG4rXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4rXHRjbG9uZV9zbGljZV9pbl9zdWJwcm9nKFx1MDAyNnB0ciwgXHUwMDI2ZGF0YSk7XG4rXHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFx1MDAyNnB0ciwgMCk7XG4rXHRpZiAoZGF0YSlcbitcdFx0KmRhdGEgPSAxMjM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlc1xuICAqIG9mIGl0cyBwYXJlbnRcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM3OjAwLjQ2NTgxMTkyMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTY2MTgwOTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoIGZvciBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB0aGUgYXNzb2NpYXRlZCByZXZpZXcgcmVxdWVzdC4gSXQgbG9va3MgbGlrZSB0aGUgdXNlciB3YW50cyBhbiBleHBlcnQgYXNzZXNzbWVudCBvZiBhIExpbnV4IGtlcm5lbCBwYXRjaCBzZXJpZXMuIFNwZWNpZmljYWxseSwgdGhleSdyZSBpbnRlcmVzdGVkIGluIGl0cyBzdWl0YWJpbGl0eSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gRnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdGFzayDigJMgcHJpbWFyaWx5IGRlZmVuc2l2ZSBhbmQgUUEgZm9jdXNlZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBObyByZWQgZmxhZ3MgZm9yIG9mZmVuc2l2ZSBleHBsb2l0cyBvciBtYWx3YXJlIGdlbmVyYXRpb24gYXJlIGltbWVkaWF0ZWx5IGFwcGFyZW50LCB3aGljaCBpcyBhbHdheXMgYSByZWxpZWYuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyB0aGVzZSBjaGFuZ2VzOlxuXG4qICAgVGhlIGtlcm5lbCBzaWRlIGFkZGVkIHRoZSBmdW5jdGlvbiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxuKiAgIFRoaXMgbmV3IGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgcHJlcGFyZV9mdW5jX2V4aXRgIGZ1bmN0aW9uLlxuKiAgIFRoZSBzZWNvbmQgZmlsZSBhZGRlZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNgIHdoaWNoIGFwcGVhcnMgdG8gY29udGFpbiB0ZXN0cyByZWxhdGVkIHRvIGhhbmRsaW5nIEJQRiBkeW5wdHIgc2xpY2VzIHdoZW4gZXhpdGluZyBhIGZ1bmN0aW9uIGNhbGwgZnJhbWUgYW5kIHRoZSByZXBhcmVudGluZyBsb2dpYy5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgYXJlIHByZXR0eSBjbGVhci4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IHVzdWFsIHRvb2xzLCBsaWtlbHkgYSBjb21iaW5hdGlvbiBvZiBgZ3JlcHBlcmAgYW5kIHNvbWUgZmlsZSByZWFkaW5nLCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGZpbGUuIEknbGwgZm9jdXMgcGFydGljdWxhcmx5IG9uIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGZ1bmN0aW9uIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAgYW5kIHdoZXJlIGBwcmVwYXJlX2Z1bmNfZXhpdGAgaXMgY2FsbGVkLiBUaGlzIGluaXRpYWwgaW5zcGVjdGlvbiBzaG91bGQgcmV2ZWFsIGFueSBpbW1lZGlhdGUgY29uY2VybnMgb3IgcG90ZW50aWFsIHBpdGZhbGxzIHRoYXQgc3l6a2FsbGVyIG1pZ2h0IGVuY291bnRlciBkdXJpbmcgZnV6emluZy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgaW1wYWN0IGNvZGUgY292ZXJhZ2UsIGlucHV0IGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW50cm9kdWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6MTIuMDMxOTk1NDE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDU3MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz03ODQ9c3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODAyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MDM6c3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODA0LVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzY3PXN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQzNC1cXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0MzU6XFx0cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQzNi1cXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6MTIuMDc5NDU2ODAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0MjY3MTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipCUEYgVmVyaWZpZXIgRGVlcCBEaXZlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgQlBGIHZlcmlmaWVyLiBMZXQncyBzdGFydCB3aXRoIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBNeSBodW5jaCBpcyB0aGF0IHRoZSByZWxldmFudCBsb2dpYyBpcyBsaWtlbHkgbmVzdGxlZCBzb21ld2hlcmUgYmV0d2VlbiBsaW5lcyA4MDAgYW5kIDg0MC4gVGhhdCdzIGEgcmVhc29uYWJsZSByYW5nZSBmb3IgYSBjb3JlIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCB0aGF0IHBhcnRpY3VsYXIgdmVyaWZpY2F0aW9uIGFzcGVjdCwgaWYgSSByZWNhbGwgY29ycmVjdGx5IGZyb20gdGhlIGxhc3QgdGltZSBJIHdhcyBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLiBMZXQncyBkaXZlIGluIGFuZCBzZWUgd2hhdCdzIHRoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGNoZWNrcyBvciB0cmFuc2Zvcm1hdGlvbnMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzoxNC42MjIxMzA2NjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0cmV0dXJuIHJlZl9jbnQ7XFxuIDgwMTpcXHR9XFxuIDgwMjpcXHRcXG4gODAzOlxcdHN0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIDgwNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcXG4gODA1OlxcdHtcXG4gODA2OlxcdFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cXHUwMDNlY3VyX3N0YXRlO1xcbiA4MDc6XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcXG4gODA4OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxuIDgwOTpcXHRcXHRpbnQgaTtcXG4gODEwOlxcdFxcbiA4MTE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNhbGxlZS1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpKyspIHtcXG4gODEyOlxcdFxcdFxcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcXHUwMDI2Y2FsbGVlLVxcdTAwM2VzdGFja1tpXTtcXG4gODEzOlxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSBcXHUwMDI2c2xvdC1cXHUwMDNlc3BpbGxlZF9wdHI7XFxuIDgxNDpcXHRcXG4gODE1OlxcdFxcdFxcdGlmIChzbG90LVxcdTAwM2VzbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSIHx8XFxuIDgxNjpcXHRcXHRcXHQgICAgIWR5bnB0ci1cXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcXG4gODE3OlxcdFxcdFxcdCAgICAhZHlucHRyX3R5cGVfcmVmZXJlbmNlZChkeW5wdHItXFx1MDAzZWR5bnB0ci50eXBlKSlcXG4gODE4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MTk6XFx0XFxuIDgyMDpcXHRcXHRcXHQvKlxcbiA4MjE6XFx0XFx0XFx0ICogQSBjYWxsZWUgY2FuIHNwaWxsIGEgc2xpY2UgZGVyaXZlZCBmcm9tIGl0cyBsb2NhbCBkeW5wdHIgaW50b1xcbiA4MjI6XFx0XFx0XFx0ICogdGhlIGNhbGxlcidzIHN0YWNrLiBUaGUgc2xpY2UgdGhlbiBvdXRsaXZlcyB0aGUgZHlucHRyIGlkIHRoYXRcXG4gODIzOlxcdFxcdFxcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XFxuIDgyNDpcXHRcXHRcXHQgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0cidzIHBhcmVudCBiZWZvcmVcXG4gODI1OlxcdFxcdFxcdCAqIHRoZSBjYWxsZWUgZnJhbWUgaXMgZnJlZWQuXFxuIDgyNjpcXHRcXHRcXHQgKi9cXG4gODI3OlxcdFxcdFxcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHtcXG4gODI4OlxcdFxcdFxcdFxcdGlmIChzdGF0ZSA9PSBjYWxsZWUgfHwgcmVnLVxcdTAwM2VwYXJlbnRfaWQgIT0gZHlucHRyLVxcdTAwM2VpZCB8fFxcbiA4Mjk6XFx0XFx0XFx0XFx0ICAgIGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXFxuIDgzMDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODMxOlxcdFxcdFxcdFxcdHJlZy1cXHUwMDNlcGFyZW50X2lkID0gZHlucHRyLVxcdTAwM2VwYXJlbnRfaWQ7XFxuIDgzMjpcXHRcXHRcXHR9KSk7XFxuIDgzMzpcXHRcXHR9XFxuIDgzNDpcXHR9XFxuIDgzNTpcXHRcXG4gODM2OlxcdHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA4Mzc6XFx0XFx0XFx0XFx0XFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxcbiA4Mzg6XFx0e1xcbiA4Mzk6XFx0XFx0aW50IGVyciA9IDA7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdC8qIFdlIGFsd2F5cyBlbnN1cmUgdGhhdCBTVEFDS19EWU5QVFIgaXMgbmV2ZXIgc2V0IHBhcnRpYWxseSxcXG4gODQyOlxcdFxcdCAqIGhlbmNlIGp1c3QgY2hlY2tpbmcgZm9yIHNsb3RfdHlwZVswXSBpcyBlbm91Z2guIFRoaXMgaXNcXG4gODQzOlxcdFxcdCAqIGRpZmZlcmVudCBmb3IgU1RBQ0tfU1BJTEwsIHdoZXJlIGl0IG1heSBiZSBvbmx5IHNldCBmb3JcXG4gODQ0OlxcdFxcdCAqIDEgYnl0ZSwgc28gY29kZSBoYXMgdG8gdXNlIGlzX3NwaWxsZWRfcmVnLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzoxNC42MjMxNDQ4NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE2MTAwOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQlBGIFZlcmlmaWVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBCUEYgdmVyaWZpZXIgYW5kIHRoZSBgc3lzX2JwZmAgc3lzdGVtIGNhbGwuIE15IGZpcnN0IHN0ZXAgaXMgdG8gbG9jYXRlIHdoZXJlIHRoZSB2ZXJpZmllciBjb2RlIGl0c2VsZiByZXNpZGVzOyBJIGtub3cgdGhhdCdzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogd2hhdCBLY29uZmlnIHNldHRpbmdzIGFjdHVhbGx5IGVuYWJsZSB0aGF0IGZpbGUncyBjb21waWxhdGlvbj8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGUgY29kZSB0byB0aGUgY29uZmlndXJhdGlvbi4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgc2luY2UgdGhhdCBvZnRlbiBoYW5kbGVzIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gS2NvbmZpZyBzeW1ib2xzLiBGYWlsaW5nIHRoYXQsIGBpbml0L0tjb25maWdgIG9yLCBtb3JlIGxpa2VseSwgYGtlcm5lbC9icGYvS2NvbmZpZ2Agd291bGQgYmUgdGhlIG5leHQgbG9naWNhbCBwbGFjZXMgdG8gZXhhbWluZS4gSSdsbCBzdGFydCB3aXRoIHRoZSBNYWtlZmlsZSB0byBzZWUgaWYgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgZHJpdmVuIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM3OjE2LjczOTI0OTA2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgzMDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpZmllclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6MTYuNzg3MDg3MTQxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzNjg3NjkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgcHJldHR5IGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENPTkZJR19CUEZfU1lTQ0FMTGAuIEkga25vdyB0aGF0J3MgdGhlIGNvbmZpZyB2YXJpYWJsZSBJJ20gY29uY2VybmVkIHdpdGguIE5vdywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGZvciBtZSwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGBpbml0L0tjb25maWdgIGFuZCBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgcGVyaGFwcyBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBvciBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQgYmVmb3JlIGBDT05GSUdfQlBGX1NZU0NBTExgIGNhbiBiZSBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgdGhpbmdzIGxpa2UgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgb3Igb3RoZXIgbG9naWMgdGhhdCBnb3Zlcm5zIHdoZW4gdGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlLiBMZXQncyBnZXQgY3JhY2tpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MjgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzoxOC42MjM5NjY2ODNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzEwMTg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM3OjE4LjY2OTI4MzYxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTM5MDIyMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIEJQRl9TWVNDQUxMIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJQRl9TWVNDQUxMYC4gTXkgaW1tZWRpYXRlIGFwcHJvYWNoIGlzIHRvIGxvY2F0ZSB3aGVyZSB0aGlzIHByZXByb2Nlc3NvciBzeW1ib2wgaXMgZGVjbGFyZWQuIEdpdmVuIHRoYXQgaXQncyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgbXkgaHVuY2ggaXMgdGhhdCBpdCdsbCBiZSBpbiBvbmUgb2YgdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIFRoZSBjaGFsbGVuZ2UgaXMgbmFycm93aW5nIGRvd24gKndoaWNoKiBLY29uZmlnIGZpbGUuIEknbGwgbGlrZWx5IHN0YXJ0IHdpdGggYSBgZmluZGAgb3IgYGdyZXBgIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgcG9zc2libHkgbGltaXRpbmcgdGhlIHNlYXJjaCB0byB0aGUgYEtjb25maWdgIG9yIGBDb25maWcuaW5gIGZpbGVzIHRvIHJlZHVjZSBub2lzZS4gSSdsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNyb3NzLXJlZmVyZW5jZXMgYW5kIGRlcGVuZGVuY2llcywgYXMgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBtaWdodCBiZSBuZXN0ZWQgdW5kZXIgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgaGF2ZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBpbmZsdWVuY2UgaXRzIHByZXNlbmNlLiBNeSBhaW0gaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgZmlsZSBhbmQgc3BlY2lmaWMgc2VjdGlvbiB3aGVyZSBgQlBGX1NZU0NBTExgIGlzIGRlY2xhcmVkIGFuZCBwb3RlbnRpYWxseSBzZWUgaXRzIGRlZmF1bHQgdmFsdWUsIGhlbHAgdGV4dCwgYW5kIGFueSBvdGhlciByZWxldmFudCBkZXBlbmRlbmNpZXMuIEZyb20gdGhlcmUsIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3Qgb24gdGhlIGtlcm5lbCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY5NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM3OjIwLjYwODMwODM5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NTA5NDM5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzoyMi4yNzM0MDc2OTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY0NjM0MDczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEJQRiBLY29uZmlnIEluc3BlY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzY29wZSBvdXQgYXJvdW5kIGxpbmUgMjcuIEl0J3MgYSBnZW5lcmFsIGFwcHJvYWNoIHdoZW4gc3RhcnRpbmcgYW4gaW52ZXN0aWdhdGlvbiwgZXNwZWNpYWxseSBnaXZlbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlLCB0aGF0IEtjb25maWcgZmlsZXMgYXJlIGVzc2VudGlhbCBpbiB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFRoZSBzcGVjaWZpYyBsaW5lIG51bWJlciBpcyBqdXN0IGEgc3RhcnRpbmcgcG9pbnQ7IGl0J3MgbGlrZWx5IGEgZm9jYWwgYXJlYSwgZWl0aGVyIGEgbWFpbiBzZWN0aW9uLCBvciBzb21ldGhpbmcgdGhhdCBicmFuY2hlcyBvdXQgaW50byBtdWx0aXBsZSByZWxldmFudCBvcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBhbnkgaW1tZWRpYXRlIGNsdWVzIHRoYXQgZ2l2ZSBhbiBpbmRpY2F0aW9uIG9mIGhvdyBCUEYgaXMgZW5hYmxlZC9kaXNhYmxlZCBvciBjb25maWd1cmVkLiBUaGlzIHByZWxpbWluYXJ5IHNjYW4gd2lsbCBwcm92aWRlIGEgcm9hZG1hcCBmb3IgZGVlcGVyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6MjMuOTE5NzUwODcyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XFxuICAyMTpcXHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxcbiAgMjI6XFx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcXG4gIDIzOlxcdFxcdGJvb2xcXG4gIDI0OlxcdFxcbiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzoyMy45MTk4MzQxMDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMyNzk5MDM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXb3J0aEZ1enppbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIEJQRl9TWVNDQUxMIGNoYW5nZSBsb29rcyBnb29kIG9uIGl0cyBvd247IG5vIGltbWVkaWF0ZSBibG9ja2VycyB0aGVyZSDigJMgaXQncyBnb3QgYWxsIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzIHNvcnRlZC4gTm93LCBsZXQncyBkaXZlIGludG8gd2hldGhlciB0aGlzIGlzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydC5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyB0b3VjaGluZyB0aGUgZUJQRiB2ZXJpZmllciwgd2hpY2gsIGFzIHdlIGFsbCBrbm93LCBpcyAqY3JpdGljYWwqLiBJdCdzIHJpZ2h0IHRoZXJlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhbmQgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCB0aGF0IGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgc3lzY2FsbCDigJMgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGV4cGxvaXRhdGlvbi4gU3BlY2lmaWNhbGx5LCB3ZSdyZSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIHRvIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIEl0J3MgY2FsbGluZyBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgLCB3aGljaCwgYWNjb3JkaW5nIHRvIHRoZSBjb2RlLCBtYW5hZ2VzIHJlZ2lzdGVyIHN0YXRlLCBzcGVjaWZpY2FsbHkgYHBhcmVudF9pZGAsIGZvciBkeW5wdHIgc2xpY2VzIHdoZW4gZXhpdGluZyBzdWJwcm9ncmFtcyB3aXRoaW4gdGhlIHZlcmlmaWVyLiBTbywgdGhpcyBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGluIGEgcHJldHR5IHZpdGFsIHN1YnN5c3RlbS4gR2l2ZW4gU3l6a2FsbGVyJ3Mgd2VsbC1rbm93biBwcm93ZXNzIGF0IGhhbW1lcmluZyBhd2F5IGF0IEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiBhbmQgZXhlY3V0aW9uLCB0aGlzIGlzIHByYWN0aWNhbGx5IGJlZ2dpbmcgdG8gYmUgZnV6emVkLlxuXG5TbywgKnllcyosIFdvcnRoRnV6emluZyA9IHRydWUuXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCB3aGF0IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb24uIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6XG4tIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGBcbi0gYHByZXBhcmVfZnVuY19leGl0YFxuLSBgYnBmX2NoZWNrYCAob3IgYGJwZl92ZXJpZmllcl9ydW5gIG9yIGBwcmVwYXJlX2Z1bmNfZXhpdGApLlxuXG5JJ2xsIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBwcmVwYXJlX2Z1bmNfZXhpdGAgb3Igc3Vycm91bmRpbmcgY29kZSB0byBzZWUgd2hhdCB0aGUgZGlyZWN0IGltcGFjdCBvZiB0aGlzIGNoYW5nZSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM3OjI3LjI0NzgyNzA3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI5MzMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmVwYXJlX2Z1bmNfZXhpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAzNTk9c3RhdGljIGJvb2wgcmV0dmFsX3JhbmdlX3dpdGhpbihzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSByYW5nZSwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM2Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAzNjc6c3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM2OC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4NDc9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNDktXFx0XFx0XFx0ICogZnJhbWUuIEEgY2FsbGJhY2sgZnJhbWUgY2Fubm90IGJlIGxlZnQgdGhhdCB3YXkgYmVjYXVzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTM1MDpcXHRcXHRcXHQgKiBwcmVwYXJlX2Z1bmNfZXhpdCgpIHdvdWxkIGFwcGx5IGl0cyByZXR1cm4gY29udHJhY3QgdG8gdGhlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzUxLVxcdFxcdFxcdCAqIHVua25vd24gUjAgc3ludGhlc2l6ZWQgYmVsb3cuIFN0YWNrLWRlcHRoIHZhbGlkYXRpb24gcmVqZWN0c1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzYzLVxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTM2NDpcXHRcXHRcXHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjUtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzMyMj1zdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MDItXFx0XFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NDAzOlxcdFxcdGVyciA9IHByZXBhcmVfZnVuY19leGl0KGVudiwgXFx1MDAyNmVudi1cXHUwMDNlaW5zbl9pZHgpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzQwNC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTA5PXN0YXRpYyBpbnQgcHJvY2Vzc19icGZfZXhpdF9mdWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTUtXFx0LyogV2UgbXVzdCBkbyBjaGVja19yZWZlcmVuY2VfbGVhayBoZXJlIGJlZm9yZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODExNjpcXHQgKiBwcmVwYXJlX2Z1bmNfZXhpdCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlblxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODExNy1cXHQgKiBzdGF0ZS1cXHUwMDNlY3VyZnJhbWUgXFx1MDAzZSAwLCBpdCBtYXkgYmUgYSBjYWxsYmFjayBmdW5jdGlvbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEyNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMjg6XFx0LyogVGhlIHNpZGUgZWZmZWN0IG9mIHRoZSBwcmVwYXJlX2Z1bmNfZXhpdCB3aGljaCBpc1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEyOS1cXHQgKiBiZWluZyBza2lwcGVkIGlzIHRoYXQgaXQgZnJlZXMgYnBmX2Z1bmNfc3RhdGUuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxNDEtXFx0XFx0LyogZXhpdCBmcm9tIG5lc3RlZCBmdW5jdGlvbiAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODE0MjpcXHRcXHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxNDMtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6MjcuMjk0MTI1MjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM1NDIyNjM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFZlcmRpY3Q6IEZhdm9yYWJsZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgd2UgaGF2ZSBhIHByb21pc2luZyB0YXJnZXQgaGVyZS4gVGhlIHBhdGNoIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGludHJvZHVjZXMgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCDigJMgYSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uLiBJdCdzIGludm9rZWQgd2l0aGluIHRoZSBzdGF0aWMgZnVuY3Rpb24gYHByZXBhcmVfZnVuY19leGl0YCwgd2hpY2gsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgcHJvY2Vzc19icGZfZXhpdF9mdWxsYCBkdXJpbmcgQlBGIHZlcmlmaWNhdGlvbiB3aGVuIGhhbmRsaW5nIGV4aXQgaW5zdHJ1Y3Rpb25zLlxuXG5NeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgc3ltYm9sIGNvdmVyYWdlLiBTbywgSSBjaGVja2VkIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgZXhwb3NlZCwgZ2l2ZW4gdGhhdCB0aGV5J3JlIHN0YXRpYy4gU2luY2UgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYHZlcmlmaWVyLmNgLCB0aGV5J2xsIGJlIHN5bWJvbHMgaW4ga2FsbHN5bXMgKHVubGVzcyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciksIGVzcGVjaWFsbHkgaWYgTFRPIGlzIGRpc2FibGVkIG9yIHdlIGFyZSBkZXBlbmRpbmcgb24gaW5saW5pbmcuIEFuZCwgc3l6a2FsbGVyIHN5bWJvbCBjb3ZlcmFnZSB3b3JrcyB3ZWxsIHdpdGggc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGFyZW4ndCBmdWxseSBpbmxpbmVkLiBJbiB0aGlzIGNhc2UsIGV2ZW4gaWYgdGhleSAqYXJlKiBpbmxpbmVkLCB0YXJnZXRpbmcgdGhlIGNhbGxlciBmdW5jdGlvbnMgbGlrZSBgcHJvY2Vzc19icGZfZXhpdF9mdWxsYCBvciBgcHJlcGFyZV9mdW5jX2V4aXRgIGlzIGdvb2QgZW5vdWdoLlxuXG5UaGVyZWZvcmUsIEknbSBpbmNsdWRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCwgYHByZXBhcmVfZnVuY19leGl0YCwgYW5kIGBwcm9jZXNzX2JwZl9leGl0X2Z1bGxgIGFzIGBGb2N1c1N5bWJvbHNgLlxuXG5JIGFsc28gY29uZmlybWVkIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnIGZvciBjb21waWxpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNvIHRoYXQncyB3aGF0IEknbGwgc3BlY2lmeSBpbiBgRW5hYmxlQ29uZmlnc2AuXG5cbkZpbmFsbHksIGFmdGVyIHZlcmlmeWluZyBhbGwgdGhlIHBpZWNlcywgSSdtIGNvbmZpZGVudCBlbm91Z2ggdG8gbW92ZSBmb3J3YXJkLCBzbyBJJ20gc2V0dGluZyB0aGUgZm9sbG93aW5nOlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgZnV6emluZyB2ZXJkaWN0LlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wicmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRcIiwgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiLCBcInByb2Nlc3NfYnBmX2V4aXRfZnVsbFwiXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJCUEZfU1lTQ0FMTFwiXWBcbkFuZCBJJ20gY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTE4LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzozMS42NDgzNTQxOTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDEzMTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdFwiLFxuICAgIFwicHJlcGFyZV9mdW5jX2V4aXRcIixcbiAgICBcInByb2Nlc3NfYnBmX2V4aXRfZnVsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyB3aGVuIHVud2luZGluZyBjYWxsIGZyYW1lcyBvbiBmdW5jdGlvbiBleGl0LCBhZGRpbmcgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQgdG8gcHJlc2VydmUgcGFyZW50LWNoaWxkIHRyYWNraW5nIG9mIGR5bnB0ciBzbGljZXMgdGhhdCBlc2NhcGUgdG8gY2FsbGVyIGZyYW1lcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIHN1YnN5c3RlbSBjb2RlIHJlYWNoYWJsZSB2aWEgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0XCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiLFxuICAgIFwicHJvY2Vzc19icGZfZXhpdF9mdWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIHdoZW4gdW53aW5kaW5nIGNhbGwgZnJhbWVzIG9uIGZ1bmN0aW9uIGV4aXQsIGFkZGluZyByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCB0byBwcmVzZXJ2ZSBwYXJlbnQtY2hpbGQgdHJhY2tpbmcgb2YgZHlucHRyIHNsaWNlcyB0aGF0IGVzY2FwZSB0byBjYWxsZXIgZnJhbWVzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIGNvZGUgcmVhY2hhYmxlIHZpYSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzozMS43Mjg0OTQ1NjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MDYxNTI3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNzozMS43MjkwMTgwMTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4NzA1NjI2MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgZHlucHRyIHRyYWNraW5nIGxvZ2ljIGR1cmluZyBzdWJwcm9ncmFtIGV4aXRzIChgcHJlcGFyZV9mdW5jX2V4aXRgKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCB0byB1cGRhdGUgYHBhcmVudF9pZGAgcmVmZXJlbmNlcyBvZiBlc2NhcGVkIFBUUl9UT19NRU0gZGF0YSBzbGljZXMgZnJvbSBhIGNhbGxlZSBmcmFtZSdzIGR5bnB0ciB0byB0aGUgZHlucHRyJ3MgcGFyZW50IElEIGJlZm9yZSB0aGUgY2FsbGVlIGZyYW1lIHN0YXRlIGlzIGZyZWVkLlxcblxcblRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYSBkeW5wdHIgaXMgcmVsZWFzZWQvc3VibWl0dGVkIGluIGNhbGxlciBmcmFtZXMsIGFueSBlc2NhcGVkIHNsaWNlcyBkZXJpdmVkIGZyb20gY2xvbmVkIGR5bnB0cnMgaW4gc3VicHJvZ3JhbXMgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJQRiBwcm9ncmFtcy5cXG5cXG5BbmFseXNpcyBmb3Igc2FuaXRpemVyIHJlcXVpcmVtZW50czpcXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyAoc3VjaCBhcyBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIFRoZSB2ZXJpZmllciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIChgYnBmX3ZlcmlmaWVyX3N0YXRlYCwgYGJwZl9mdW5jX3N0YXRlYCwgYGJwZl9yZWdfc3RhdGVgKSBhY2Nlc3NlZCBpbiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgYXJlIGFscmVhZHkgbWFuYWdlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIHZlcmlmaWVyIGZyYW1ld29yay5cXG4tIEFueSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaW1wcm9wZXIgZHlucHRyIGxpZmV0aW1lIHRyYWNraW5nIHdvdWxkIG1hbmlmZXN0IGFzIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYjY5Mjk2ZDk2MGMyMzAxMzEwMzZlYzM3MmFlNjFkNWQyMTUwYjcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwNDozNjo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZDFlMGIxYTdkMGEzZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtODAwLDYgKzgwMCwzOSBAQCBzdGF0aWMgaW50IGR5bnB0cl9yZWZfY250KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB2X3BhcmVudF9pZClcbiBcdHJldHVybiByZWZfY250O1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxuK3tcbitcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cdTAwM2VjdXJfc3RhdGU7XG4rXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuK1x0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4rXHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSBcdTAwMjZzbG90LVx1MDAzZXNwaWxsZWRfcHRyO1xuK1xuK1x0XHRpZiAoc2xvdC1cdTAwM2VzbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSIHx8XG4rXHRcdCAgICAhZHlucHRyLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XG4rXHRcdCAgICAhZHlucHRyX3R5cGVfcmVmZXJlbmNlZChkeW5wdHItXHUwMDNlZHlucHRyLnR5cGUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvXG4rXHRcdCAqIHRoZSBjYWxsZXIncyBzdGFjay4gVGhlIHNsaWNlIHRoZW4gb3V0bGl2ZXMgdGhlIGR5bnB0ciBpZCB0aGF0XG4rXHRcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XG4rXHRcdCAqIG1ha2luZyBlc2NhcGVkIHNsaWNlcyBjaGlsZHJlbiBvZiB0aGUgZHlucHRyJ3MgcGFyZW50IGJlZm9yZVxuK1x0XHQgKiB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLlxuK1x0XHQgKi9cbitcdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUodnN0YXRlLCBzdGF0ZSwgcmVnLCAoe1xuK1x0XHRcdGlmIChzdGF0ZSA9PSBjYWxsZWUgfHwgcmVnLVx1MDAzZXBhcmVudF9pZCAhPSBkeW5wdHItXHUwMDNlaWQgfHxcbitcdFx0XHQgICAgYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSAhPSBQVFJfVE9fTUVNKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0cmVnLVx1MDAzZXBhcmVudF9pZCA9IGR5bnB0ci1cdTAwM2VwYXJlbnRfaWQ7XG4rXHRcdH0pKTtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXG4ge1xuQEAgLTEwMzk5LDYgKzEwNDMyLDcgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuIFx0XHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZXItXHUwMDNlZnJhbWVubywgdHJ1ZSk7XG4gXHR9XG4gXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcbitcdHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcbiBcdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xuIFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXG4gXHRmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5pbmRleCAxY2Q2MWQ3MmMxNjZmLi4wNzA0NjYyY2QzMmYzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5AQCAtMTg5Miw2ICsxODkyLDUyIEBAIGludCBjbG9uZV9pbnZhbGlkYXRlNCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgY2xvbmU7XG4rXG4rXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuK1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEoXHUwMDI2Y2xvbmUsIDAsIHNpemVvZih2YWwpKTtcbit9XG4rXG4rLyogQSBzbGljZSB0aGF0IGVzY2FwZXMgdGhlIGNsb25lJ3MgY2FsbCBmcmFtZSByZW1haW5zIHZhbGlkIHdoaWxlIHRoZVxuKyAqIHNoYXJlZCByaW5nYnVmIHJlc2VydmF0aW9uIGlzIGxpdmUuXG4rICovXG4rU0VDKFwiP3Jhd190cFwiKVxuK19fc3VjY2Vzc1xuK2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV92YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGlmIChkYXRhKVxuK1x0XHQqZGF0YSA9IDEyMztcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBSZWxlYXNpbmcgdGhlIHNoYXJlZCByZXNlcnZhdGlvbiBtdXN0IGludmFsaWRhdGUgYSBzbGljZSB0aGF0IGVzY2FwZWRcbisgKiBmcm9tIGEgY2xvbmUncyBjYWxsIGZyYW1lLlxuKyAqL1xuK1NFQyhcIj9yYXdfdHBcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcdGlmIChkYXRhKVxuK1x0XHQqZGF0YSA9IDEyMztcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBJbnZhbGlkYXRpbmcgYSBkeW5wdHIgc2hvdWxkIGludmFsaWRhdGUgYW55IGRhdGEgc2xpY2VzXG4gICogb2YgaXRzIHBhcmVudFxuICAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6MzEuNzI5MDE5MTMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3MDU2MDc2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIFZlcmlmaWVyIEZpeCBmb3IgRHlucHRyIFNsaWNlIFBhcmVudGFnZSBBY3Jvc3MgRnVuY3Rpb24gQm91bmRhcmllcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgYSBzZWxmLXRlc3QuIExldCdzIGRpZyBpbi4gSXQncyBhZGRpbmcgYSBuZXcgZnVuY3Rpb24sIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCwgYW5kIGNhbGxpbmcgaXQgd2l0aGluIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIFRoZSBnb2FsIGhlcmUgaXMgdG8gY29ycmVjdGx5IHRyYWNrIHRoZSAqcGFyZW50YWdlKiBvZiBkeW5hbWljIHBvaW50ZXIgKGR5bnB0cikgc2xpY2VzIHdoZW4gYSBCUEYgc3VicHJvZ3JhbSBleGl0cy5cblxuSSBzZWUgdGhhdCB3aGVuIGRlYWxpbmcgd2l0aCBkeW5wdHJzLCBsaWtlIHRob3NlIHVzZWQgd2l0aCByaW5nIGJ1ZmZlcnMsIHNsaWNlcyBhcmUgY3JlYXRlZCwgYW5kIHRoZXNlIHNsaWNlcyBoYXZlIGEgYHBhcmVudF9pZGAgdGhhdCByZWZlcmVuY2VzIHRoZSBvcmlnaW5hbCBkeW5wdHIuIFRoZSBwcm9ibGVtIGlzLCBpZiBhIHN1YnByb2dyYW0gY3JlYXRlcyBhIGR5bnB0ciwgdGFrZXMgYSBzbGljZSwgYW5kIHN0b3JlcyB0aGF0IHNsaWNlJ3MgcG9pbnRlciBpbiB0aGUgY2FsbGVyJ3Mgc3RhY2sgb3IgcmVnaXN0ZXJzLCB0aGVuIHdoZW4gdGhlIHN1YnByb2dyYW0gZXhpdHMgYW5kIHRoZSBjYWxsZWUncyBkeW5wdHIgaXMgZnJlZWQsIHRoZSBzbGljZSdzIGBwYXJlbnRfaWRgIGJlY29tZXMgc3RhbGUuIFRoZSBzbGljZSBpcyBub3cgcG9pbnRpbmcgdG8gYSBuby1sb25nZXItdmFsaWQgSUQuIElmIHRoZSBjYWxsZXIgdGhlbiBhdHRlbXB0cyB0byBzdWJtaXQgb3IgcmVsZWFzZSB0aGUgb3JpZ2luYWwgcGFyZW50IGR5bnB0ciwgdGhlIHNsaWNlIHdvdWxkbid0IGJlIGludmFsaWRhdGVkIGJlY2F1c2UgaXRzIGBwYXJlbnRfaWRgIGRvZXNuJ3QgbWF0Y2ggdGhlIG5ldywgdmFsaWQgcGFyZW50IElELiBUaGlzIG9wZW5zIHRoZSBkb29yIHRvIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgY29uZGl0aW9uLCB3aGVyZSB0aGUgQlBGIHByb2dyYW0gY291bGQgYWNjZXNzIG1lbW9yeSB0aGF0J3MgYWxyZWFkeSBiZWVuIGZyZWVkIG9yIGV2ZW4gY2F1c2UgYW4gaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuXG5UaGlzIG5ldyBmdW5jdGlvbiBjbGV2ZXJseSB1cGRhdGVzIHRoZSBgcGFyZW50X2lkYCBvZiB0aGVzZSBcImVzY2FwZWRcIiBzbGljZXMgKmJlZm9yZSogdGhlIGNhbGxlZSdzIHN0YXRlIGlzIGZyZWVkLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBjYWxsZXIncyByZWdpc3RlcnMgYW5kIHN0YWNrIHRvIGZpbmQgYW55IHNsaWNlcyB0aGF0IGhhdmUgdGhlIG5vdy1zdGFsZSBwYXJlbnQgSUQuIEl0IHRoZW4gdXBkYXRlcyB0aGVpciBgcGFyZW50X2lkYCB0byBwb2ludCB0byB0aGUgcGFyZW50IG9mIHRoZSBvcmlnaW5hbCBkeW5wdHIsIGVuc3VyaW5nIHRoZSB2ZXJpZmllciBrbm93cyB0aGF0IHRoZSBzbGljZSBpcyBzdGlsbCBsaW5rZWQgdG8gdGhlIG9yaWdpbmFsIG9iamVjdCB0cmVlLiBUaGlzIGVmZmVjdGl2ZWx5IGZpeGVzIGEgcG90ZW50aWFsIFVBRiB2dWxuZXJhYmlsaXR5LlxuXG5Ob3csIGxldCdzIGxvb2sgZm9yIGFueSBpc3N1ZXMgdGhlIHBhdGNoIG1pZ2h0IGludHJvZHVjZS4gSSdtIGNoZWNraW5nIGZvciB0aGluZ3MgbGlrZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSB2ZXJpZmllciBzdGF0ZSB0cmFja2luZyBpdHNlbGbigJR0aGUgdXBkYXRpbmcgb2YgYHJlZy1cdTAwM2VwYXJlbnRfaWRg4oCUbG9va3Mgc291bmQuIFdlJ3JlIGRlYWxpbmcgd2l0aCBpbnRlcm5hbCB2ZXJpZmllciBzdGF0ZSBzdHJ1Y3R1cmVzIChgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZWAsIGBicGZfZnVuY19zdGF0ZWAsIGBicGZfcmVnX3N0YXRlYCkuICBJdCBzZWVtcyB0byBpdGVyYXRlIHRocm91Z2ggKmluaXRpYWxpemVkKiB2ZXJpZmllciByZWdpc3RlciBhbmQgc3RhY2sgc3RhdGVzLiBJIGRvbid0IHNlZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4gVGhlcmUncyBubyBjb3B5aW5nIG9mIG5ldyBidWZmZXJzIG9yIHN0cnVjdHMgdG8gdXNlcnNwYWNlLCBubyBwb3RlbnRpYWwgZm9yIHBhZGRpbmcgbGVha3MsIGFuZCBubyBhcHBhcmVudCB1bmluaXRpYWxpemVkIGRhdGEgdXNhZ2UuXG5cblRoZSBidWcgY2xhc3MgYmVpbmcgYWRkcmVzc2VkIGlzIGEgdmVyaWZpZXIgbG9naWMgaXNzdWUuIElmIHRoZSB2ZXJpZmllciAqZGlkKiBoYXZlIGEgYnVnIGhlcmUsIGl0IGNvdWxkIGFsbG93IGEgQlBGIHByb2dyYW0gdG8gcGVyZm9ybSBhIFVBRiBvciBPT0IgbWVtb3J5IGFjY2VzcyBpbiBrZXJuZWwgc3BhY2UuIFN1Y2ggVUFGL09PQiBjb25kaXRpb25zIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiB3aGVuIHRoZSBCUEYgcHJvZ3JhbSBpcyBleGVjdXRlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIEJQRiB0ZXN0IHN1aXRlcyBzaG91bGQgZGV0ZWN0IHZlcmlmaWVyIGxvZ2ljIGJ1Z3MgdGhhdCBtaWdodCBsZWFkIHRvIGtlcm5lbCBtZW1vcnkgY29ycnVwdGlvbiBvciBVQUYgaXNzdWVzLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gbWVudGFsbHkgY2hlY2tpbmcgdGhlIHJvbGVzIG9mIEtNU0FOIHZlcnN1cyBLQVNBTi4gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBLQVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgZXRjLiBUaGlzIHBhdGNoLCB3aXRoIGl0cyBmb2N1cyBvbiBpbnRlcm5hbCB2ZXJpZmllciBzdGF0ZSBhbmQgdGhlIGxpbmtpbmcgb2YgYHBhcmVudF9pZGBzLCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGJ1ZmZlcnMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgbGVha3MsIG9yIHVzZXMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGlzIGEgS0FTQU4gaXNzdWUgKFVBRikgYW5kIG5vdCBhIEtNU0FOICh1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8gbGVhaykgaXNzdWUsIHRoaXMgcGF0Y2ggKmRvZXNuJ3QqIHJlcXVpcmUgS01TQU4uIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggcHJpbWFyaWx5IG1vZGlmaWVzIHZlcmlmaWVyIGxvZ2ljIHRvIHByZXZlbnQgVUFGIGNvbmRpdGlvbnMsIGFuZCBLTVNBTiBpc24ndCByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgY2xhc3Mgb2YgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3NSwiT3V0cHV0VG9rZW5zIjozNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzc6NDAuNDM0NjI5MzY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgZHlucHRyIHRyYWNraW5nIGxvZ2ljIGR1cmluZyBzdWJwcm9ncmFtIGV4aXRzIChgcHJlcGFyZV9mdW5jX2V4aXRgKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCB0byB1cGRhdGUgYHBhcmVudF9pZGAgcmVmZXJlbmNlcyBvZiBlc2NhcGVkIFBUUl9UT19NRU0gZGF0YSBzbGljZXMgZnJvbSBhIGNhbGxlZSBmcmFtZSdzIGR5bnB0ciB0byB0aGUgZHlucHRyJ3MgcGFyZW50IElEIGJlZm9yZSB0aGUgY2FsbGVlIGZyYW1lIHN0YXRlIGlzIGZyZWVkLlxcblxcblRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYSBkeW5wdHIgaXMgcmVsZWFzZWQvc3VibWl0dGVkIGluIGNhbGxlciBmcmFtZXMsIGFueSBlc2NhcGVkIHNsaWNlcyBkZXJpdmVkIGZyb20gY2xvbmVkIGR5bnB0cnMgaW4gc3VicHJvZ3JhbXMgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJQRiBwcm9ncmFtcy5cXG5cXG5BbmFseXNpcyBmb3Igc2FuaXRpemVyIHJlcXVpcmVtZW50czpcXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyAoc3VjaCBhcyBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIFRoZSB2ZXJpZmllciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIChgYnBmX3ZlcmlmaWVyX3N0YXRlYCwgYGJwZl9mdW5jX3N0YXRlYCwgYGJwZl9yZWdfc3RhdGVgKSBhY2Nlc3NlZCBpbiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgYXJlIGFscmVhZHkgbWFuYWdlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIHZlcmlmaWVyIGZyYW1ld29yay5cXG4tIEFueSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaW1wcm9wZXIgZHlucHRyIGxpZmV0aW1lIHRyYWNraW5nIHdvdWxkIG1hbmlmZXN0IGFzIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgZHlucHRyIHRyYWNraW5nIGxvZ2ljIGR1cmluZyBzdWJwcm9ncmFtIGV4aXRzIChgcHJlcGFyZV9mdW5jX2V4aXRgKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpYCB0byB1cGRhdGUgYHBhcmVudF9pZGAgcmVmZXJlbmNlcyBvZiBlc2NhcGVkIFBUUl9UT19NRU0gZGF0YSBzbGljZXMgZnJvbSBhIGNhbGxlZSBmcmFtZSdzIGR5bnB0ciB0byB0aGUgZHlucHRyJ3MgcGFyZW50IElEIGJlZm9yZSB0aGUgY2FsbGVlIGZyYW1lIHN0YXRlIGlzIGZyZWVkLlxcblxcblRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYSBkeW5wdHIgaXMgcmVsZWFzZWQvc3VibWl0dGVkIGluIGNhbGxlciBmcmFtZXMsIGFueSBlc2NhcGVkIHNsaWNlcyBkZXJpdmVkIGZyb20gY2xvbmVkIGR5bnB0cnMgaW4gc3VicHJvZ3JhbXMgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJQRiBwcm9ncmFtcy5cXG5cXG5BbmFseXNpcyBmb3Igc2FuaXRpemVyIHJlcXVpcmVtZW50czpcXG4tIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyAoc3VjaCBhcyBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIFRoZSB2ZXJpZmllciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIChgYnBmX3ZlcmlmaWVyX3N0YXRlYCwgYGJwZl9mdW5jX3N0YXRlYCwgYGJwZl9yZWdfc3RhdGVgKSBhY2Nlc3NlZCBpbiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAgYXJlIGFscmVhZHkgbWFuYWdlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIHZlcmlmaWVyIGZyYW1ld29yay5cXG4tIEFueSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaW1wcm9wZXIgZHlucHRyIGxpZmV0aW1lIHRyYWNraW5nIHdvdWxkIG1hbmlmZXN0IGFzIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqwns[1] Phase: Succeeded StartedAt: 2026-09-09 04:37:52 +0000 UTC FinishedAt: 2026-09-09 04:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 04:37:52 +0000 UTC FinishedAt: 2026-09-09 04:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2] Phase: Succeeded StartedAt: 2026-09-09 04:37:52 +0000 UTC FinishedAt: 2026-09-09 08:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:37:52 +0000 UTC FinishedAt: 2026-09-09 08:16:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:37:52 +0000 UTC FinishedAt: 2026-09-09 04:38:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:37:52 +0000 UTC FinishedAt: 2026-09-09 04:37:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-workflowrqwns/series-workflowrqwns-convert-artifact-3644974281/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:38:02 +0000 UTC FinishedAt: 2026-09-09 04:54:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:38:02 +0000 UTC FinishedAt: 2026-09-09 04:54:12 +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:*3460a831-249f-4699-8dbf-aed6a3472bfb,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-workflowrqwns/series-workflowrqwns-convert-artifact-3644974281/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": "71dac57e-dedb-4421-9191-9c8ef8dbcf40", "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-workflowrqwns/series-workflowrqwns-build-action-943940519/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:38:02 +0000 UTC FinishedAt: 2026-09-09 04:54:02 +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:*3460a831-249f-4699-8dbf-aed6a3472bfb,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-workflowrqwns/series-workflowrqwns-convert-artifact-3644974281/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": "71dac57e-dedb-4421-9191-9c8ef8dbcf40", "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-workflowrqwns/series-workflowrqwns-build-action-943940519/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:54:12 +0000 UTC FinishedAt: 2026-09-09 04:54:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:54:12 +0000 UTC FinishedAt: 2026-09-09 04:54:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:54:12 +0000 UTC FinishedAt: 2026-09-09 04:54:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:54:12 +0000 UTC FinishedAt: 2026-09-09 04:54:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-workflowrqwns/series-workflowrqwns-convert-artifact-1276874204/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:54:23 +0000 UTC FinishedAt: 2026-09-09 04:56:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:54:23 +0000 UTC FinishedAt: 2026-09-09 04:56:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*71dac57e-dedb-4421-9191-9c8ef8dbcf40,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-workflowrqwns/series-workflowrqwns-build-action-943940519/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-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:56:16 +0000 UTC FinishedAt: 2026-09-09 04:56:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:56:16 +0000 UTC FinishedAt: 2026-09-09 04:56:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:56:16 +0000 UTC FinishedAt: 2026-09-09 05:12:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:56:16 +0000 UTC FinishedAt: 2026-09-09 05:12:19 +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:*3460a831-249f-4699-8dbf-aed6a3472bfb,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-workflowrqwns/series-workflowrqwns-convert-artifact-1276874204/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": "33741dac-c684-4891-a809-9632b834b48e", "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-workflowrqwns/series-workflowrqwns-build-action-1589793336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 04:56:16 +0000 UTC FinishedAt: 2026-09-09 05:12:09 +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:*3460a831-249f-4699-8dbf-aed6a3472bfb,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-workflowrqwns/series-workflowrqwns-convert-artifact-1276874204/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": "33741dac-c684-4891-a809-9632b834b48e", "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-workflowrqwns/series-workflowrqwns-build-action-1589793336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:12:19 +0000 UTC FinishedAt: 2026-09-09 05:12:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:12:19 +0000 UTC FinishedAt: 2026-09-09 05:12:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:12:19 +0000 UTC FinishedAt: 2026-09-09 05:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:12:19 +0000 UTC FinishedAt: 2026-09-09 05:14:05 +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:*33741dac-c684-4891-a809-9632b834b48e,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-workflowrqwns/series-workflowrqwns-build-action-1589793336/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-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:14:15 +0000 UTC FinishedAt: 2026-09-09 08:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:14:15 +0000 UTC FinishedAt: 2026-09-09 08:16:37 +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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"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:*71dac57e-dedb-4421-9191-9c8ef8dbcf40,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*33741dac-c684-4891-a809-9632b834b48e,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-workflowrqwns/series-workflowrqwns-build-action-943940519/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-workflowrqwns/series-workflowrqwns-build-action-1589793336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:14:15 +0000 UTC FinishedAt: 2026-09-09 05:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:14:15 +0000 UTC FinishedAt: 2026-09-09 05:14:20 +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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"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-workflowrqwns/series-workflowrqwns-convert-artifact-3437095845/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:14:15 +0000 UTC FinishedAt: 2026-09-09 05:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:14:15 +0000 UTC FinishedAt: 2026-09-09 05:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:14:15 +0000 UTC FinishedAt: 2026-09-09 05:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:14:25 +0000 UTC FinishedAt: 2026-09-09 08:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqwns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["reparent_dynptr_slices_on_func_exit","prepare_func_exit","process_bpf_exit_full"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"77b9809d-3eff-4296-ab62-69a862f0a9a9","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-09-09 05:14:25 +0000 UTC FinishedAt: 2026-09-09 08:16:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*71dac57e-dedb-4421-9191-9c8ef8dbcf40,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*33741dac-c684-4891-a809-9632b834b48e,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-workflowrqwns/series-workflowrqwns-build-action-943940519/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-workflowrqwns/series-workflowrqwns-build-action-1589793336/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-workflowrqwns/series-workflowrqwns-convert-artifact-3437095845/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,}