Name: series-workflowh2mxl Phase: Succeeded StartedAt: 2026-09-10 09:04:15 +0000 UTC FinishedAt: 2026-09-10 12:54:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[0] Phase: Succeeded StartedAt: 2026-09-10 09:04:15 +0000 UTC FinishedAt: 2026-09-10 09:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 09:04:15 +0000 UTC FinishedAt: 2026-09-10 09:08:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "548b86839f7fb819a4d6c83b71c73ec378d24275", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "548b86839f7fb819a4d6c83b71c73ec378d24275", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "BPF_SYSCALL" ], "series_id": "3175bc9f-36fb-4d85-be11-986d981e3bdf" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "do_tcp_setsockopt", "do_tcp_getsockopt", "tcp_conn_request", "tcp_make_synack", "tcp_connect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb190Y3Bfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb190Y3BfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubl9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3RjcF9tYWtlX3N5bmFjayYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGVyLXNvY2tldCBFQ04gYW5kIEFjY0VDTiBjb25maWd1cmF0aW9uIG9wdGlvbnMgKFRDUF9FQ04gYW5kIFRDUF9FQ05fT1BUSU9OKSB2aWEgc2V0c29ja29wdC9nZXRzb2Nrb3B0IGFuZCBCUEYgc29ja29wcywgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIHN5c2N0bHMuXG5cbktNU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XG4tIFRoZSBuZXcgZmllbGRzIGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYCBpbiBgc3RydWN0IHRjcF9zb2NrYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVENQX0VDTl9NT0RFX1VOU1BFQ2AgYW5kIGBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUNgIGluIGB0Y3BfaW5pdF9zb2NrKClgIGFuZCBjb3BpZWQgYWNyb3NzIHNvY2tldCBjbG9uZXMuXG4tIEluIGBkb190Y3BfZ2V0c29ja29wdCgpYCwgcmVhZGluZyB0aGVzZSBmaWVsZHMgaW5pdGlhbGl6ZXMgdGhlIGZ1bGwgYGludCB2YWxgIGJlZm9yZSBgY29weV90b19zb2NrcHRyKClgIGNvcGllcyB0aGUgZGF0YSB0byB1c2VyIHNwYWNlLiBObyBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHN0YWNrIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgYnVmZmVyIGxlbmd0aCBtYW5pcHVsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBpbnRyb2R1Y2VkLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZCBhcyB0aGUgY2hhbmdlcyBwcmVzZW50IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFRDUF9FQ04gYW5kIFRDUF9FQ05fT1BUSU9OIHNvY2tldCBvcHRpb25zIHRvIGFsbG93IHBlci1zb2NrZXQgY29uZmlndXJhdGlvbiBhbmQgb3ZlcnJpZGUgb2YgdGhlIHRjcF9lY24gYW5kIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBzZXR0aW5ncy4gSXQgbW9kaWZpZXMgVENQIHNvY2tldCBvcHRpb25zIGhhbmRsaW5nIChnZXRzb2Nrb3B0L3NldHNvY2tvcHQpLCBCUEYgc29ja29wdCBmaWx0ZXJzLCBUQ1AgU1lOL1NZTi1BQ0sgb3B0aW9uIGdlbmVyYXRpb24sIGFuZCBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IHByb2Nlc3NpbmcgaW4gdGhlIGNvcmUgSVB2NC9UQ1AgbmV0d29ya2luZyBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYzMDRkMDRjNjM3YmNiNGEwZTQyNGVlNGY3NTRkODM0YTM5OTIwMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOTowNjoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5pbmRleCAyMDhmNDY5NjdlZTU5Li4yZTU1ZDllMmViMDlhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5AQCAtNTI4LDYgJiM0Mzs1MjgsNDMgQEAgdGNwX2Vjbl9mYWxsYmFjayAtIEJPT0xFQU5cbiBcbiBcdERlZmF1bHQ6IDEgKGVuYWJsZWQpXG4gXG4mIzQzO3RjcF9lY24gKHNvY2tldCBvcHRpb24pIC0gVENQX0VDTlxuJiM0MztcdFBlci1zb2NrZXQgY29udHJvbCBvZiBFQ04gbW9kZSwgYWxsb3dpbmcgcGVyLWNvbm5lY3Rpb24gb3ZlcnJpZGUgb2YgdGhlXG4mIzQzO1x0dGNwX2VjbiBzeXNjdGwgc2V0dGluZy4gVGhpcyBlbmFibGVzIEw0UyAoTG93IExhdGVuY3ksIExvdyBMb3NzLCBTY2FsYWJsZVxuJiM0MztcdFRocm91Z2hwdXQpIGNvbmZpZ3VyYXRpb24gb24gYSBwZXItc29ja2V0IGJhc2lzLlxuJiM0MztcbiYjNDM7XHRTZXR0aW5nIHRoaXMgc29ja2V0IG9wdGlvbiB0byBhbnkgdmFsdWUgZXhjZXB0IDI1NSB3aWxsIG92ZXJyaWRlIHRoZVxuJiM0MztcdHN5c3RlbS13aWRlIHRjcF9lY24gc3lzY3RsIGZvciB0aGF0IHBhcnRpY3VsYXIgc29ja2V0LiBBIHZhbHVlIG9mIDI1NVxuJiM0MztcdChUQ1BfRUNOX01PREVfVU5TUEVDKSBtZWFucyB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IHN5c2N0bCB2YWx1ZS5cbiYjNDM7XG4mIzQzO1x0UG9zc2libGUgdmFsdWVzOiAwLTUgKHNlZSB0Y3BfZWNuIHN5c2N0bCBkZXNjcmlwdGlvbiBhYm92ZSksIG9yIDI1NSB0b1xuJiM0MztcdHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgKHN5c2N0bF90Y3BfZWNuKS5cbiYjNDM7XG4mIzQzO1x0RXhhbXBsZTo6XG4mIzQzO1xuJiM0MztcdFx0aW50IHZhbCA9IDM7ICAvKiBBY2NFQ04gbW9kZSAqL1xuJiM0MztcdFx0c2V0c29ja29wdChmZCwgU09MX1RDUCwgVENQX0VDTiwgXHUwMDI2dmFsLCBzaXplb2YodmFsKSk7XG4mIzQzO1xuJiM0MztcdERlZmF1bHQ6IDI1NSAodW5zcGVjaWZpZWQgLSB1c2VzIHRjcF9lY24gc3lzY3RsIHZhbHVlKVxuJiM0MztcbiYjNDM7dGNwX2Vjbl9vcHRpb24gKHNvY2tldCBvcHRpb24pIC0gVENQX0VDTl9PUFRJT05cbiYjNDM7XHRQZXItc29ja2V0IGNvbnRyb2wgb2YgQWNjdXJhdGUgRUNOIChBY2NFQ04pIG9wdGlvbiBzZW5kaW5nIGJlaGF2aW9yLFxuJiM0MztcdGFsbG93aW5nIHBlci1jb25uZWN0aW9uIG92ZXJyaWRlIG9mIHRoZSB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgc2V0dGluZy5cbiYjNDM7XG4mIzQzO1x0U2V0dGluZyB0aGlzIHNvY2tldCBvcHRpb24gdG8gYW55IHZhbHVlIGV4Y2VwdCAyNTUgd2lsbCBvdmVycmlkZSB0aGVcbiYjNDM7XHRzeXN0ZW0td2lkZSB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgZm9yIHRoYXQgcGFydGljdWxhciBzb2NrZXQuIEEgdmFsdWUgb2ZcbiYjNDM7XHQyNTUgKFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQykgbWVhbnMgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBzeXNjdGwgdmFsdWUuXG4mIzQzO1xuJiM0MztcdFBvc3NpYmxlIHZhbHVlczogMC0zIChzZWUgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIGRlc2NyaXB0aW9uIGFib3ZlKSwgb3IgMjU1XG4mIzQzO1x0dG8gdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCAoc3lzY3RsX3RjcF9lY25fb3B0aW9uKS5cbiYjNDM7XG4mIzQzO1x0RXhhbXBsZTo6XG4mIzQzO1xuJiM0MztcdFx0aW50IHZhbCA9IDI7ICAvKiBTZW5kIEFjY0VDTiBvcHRpb24gb24gZXZlcnkgcGFja2V0ICovXG4mIzQzO1x0XHRzZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfRUNOX09QVElPTiwgXHUwMDI2dmFsLCBzaXplb2YodmFsKSk7XG4mIzQzO1xuJiM0MztcdERlZmF1bHQ6IDI1NSAodW5zcGVjaWZpZWQgLSB1c2VzIHRjcF9lY25fb3B0aW9uIHN5c2N0bCB2YWx1ZSlcbiYjNDM7XG4gdGNwX2ZhY2sgLSBCT09MRUFOXG4gXHRUaGlzIGlzIGEgbGVnYWN5IG9wdGlvbiwgaXQgaGFzIG5vIGVmZmVjdCBhbnltb3JlLlxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNwLmggYi9pbmNsdWRlL2xpbnV4L3RjcC5oXG5pbmRleCA2YThjNzc3MTkzMjJmLi43Y2IxZTc2NWY0NjE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC90Y3AuaFxuQEAgLTI4OSw2ICYjNDM7Mjg5LDEzIEBAIHN0cnVjdCB0Y3Bfc29jayB7XG4gXHRcdFx0XHRcdCAqIHNhY2tlZF9vdXQgXHUwMDNlIDApXG4gXHRcdFx0XHRcdCAqL1xuIFx0dThcdGVjbl9mbGFncztcdC8qIEVDTiBzdGF0dXMgYml0cy5cdFx0XHQqL1xuJiM0MztcdHU4XHRlY25fbW9kZTtcdC8qIFBlci1zb2NrZXQgRUNOIG1vZGUgb3ZlcnJpZGVcbiYjNDM7XHRcdFx0XHQgKiAoVENQX0VDTl9NT0RFX1VOU1BFQyA9IHVzZSBzeXNjdGwpXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0dThcdGVjbl9vcHRpb247XHQvKiBQZXItc29ja2V0IEFjY0VDTiBvcHRpb24gb3ZlcnJpZGVcbiYjNDM7XHRcdFx0XHQgKiAoVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDID0gdXNlIHN5c2N0bClcbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XG4gXHRfX2NhY2hlbGluZV9ncm91cF9lbmQodGNwX3NvY2tfd3JpdGVfdHgpO1xuIFxuIFx0LyogVFhSWCByZWFkLXdyaXRlIGhvdHBhdGggY2FjaGUgbGluZXMgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3BfZWNuLmggYi9pbmNsdWRlL25ldC90Y3BfZWNuLmhcbmluZGV4IDg2NWQ1YzVhNzcxOGQuLjkzMWUwODc3MTc2YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3BfZWNuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaFxuQEAgLTIyLDYgJiM0MzsyMiw3IEBAIGVudW0gdGNwX2Vjbl9tb2RlIHtcbiBcdFRDUF9FQ05fSU5fQUNDRUNOX09VVF9BQ0NFQ04gPSAzLFxuIFx0VENQX0VDTl9JTl9BQ0NFQ05fT1VUX0VDTiA9IDQsXG4gXHRUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfTk9FQ04gPSA1LFxuJiM0MztcdFRDUF9FQ05fTU9ERV9VTlNQRUMgPSAyNTUsXHQvKiBVc2Ugc3lzY3RsIGRlZmF1bHQgKHBlci1zb2NrZXQpICovXG4gfTtcbiBcbiAvKiBBY2NFQ04gb3B0aW9uIHNlbmRpbmcgd2hlbiBBY2NFQ04gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IG5lZ290aWF0ZWQgKi9cbkBAIC0zMCw4ICYjNDM7MzEsMjkgQEAgZW51bSB0Y3BfYWNjZWNuX29wdGlvbiB7XG4gXHRUQ1BfQUNDRUNOX09QVElPTl9NSU5JTVVNID0gMSxcbiBcdFRDUF9BQ0NFQ05fT1BUSU9OX0ZVTEwgPSAyLFxuIFx0VENQX0FDQ0VDTl9PUFRJT05fUEVSU0lTVCA9IDMsXG4mIzQzO1x0VENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDID0gMjU1LFx0LyogVXNlIHN5c2N0bCBkZWZhdWx0IChwZXItc29ja2V0KSAqL1xuIH07XG4gXG4mIzQzOy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBFQ04gbW9kZTogcGVyLXNvY2tldCBvdmVycmlkZSBvciBzeXNjdGwgZmFsbGJhY2sgKi9cbiYjNDM7c3RhdGljIGlubGluZSB1OCB0Y3BfZWNuX21vZGVfZWZmKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHU4IG1vZGUgPSB0Y3Bfc2soc2spLVx1MDAzZWVjbl9tb2RlO1xuJiM0MztcbiYjNDM7XHRpZiAobW9kZSA9PSBUQ1BfRUNOX01PREVfVU5TUEVDKVxuJiM0MztcdFx0cmV0dXJuIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbik7XG4mIzQzO1x0cmV0dXJuIG1vZGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBBY2NFQ04gb3B0aW9uOiBwZXItc29ja2V0IG92ZXJyaWRlIG9yIHN5c2N0bCBmYWxsYmFjayAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHU4IHRjcF9hY2NlY25fb3B0aW9uX2VmZihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHR1OCBvcHQgPSB0Y3Bfc2soc2spLVx1MDAzZWVjbl9vcHRpb247XG4mIzQzO1xuJiM0MztcdGlmIChvcHQgPT0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDKVxuJiM0MztcdFx0cmV0dXJuIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pO1xuJiM0MztcdHJldHVybiBvcHQ7XG4mIzQzO31cbiYjNDM7XG4gLyogQXBwbHkgZWl0aGVyIEVDVCgwKSBvciBFQ1QoMSkgYmFzZWQgb24gVENQX0NPTkdfRUNUXzFfTkVHT1RJQVRJT04gZmxhZyAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBJTkVUX0VDTl94bWl0X2VjdF8xX25lZ290aWF0aW9uKHN0cnVjdCBzb2NrICpzaylcbiB7XG5AQCAtNTk5LDcgJiM0Mzs2MjEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2Vjbl9zZW5kX3N5bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbiBcdGJvb2wgYnBmX25lZWRzX2VjbiA9IHRjcF9icGZfY2FfbmVlZHNfZWNuKHNrKTtcbiBcdGJvb2wgdXNlX2VjbiwgdXNlX2FjY2Vjbjtcbi1cdHU4IHRjcF9lY24gPSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY24pO1xuJiM0MztcdHU4IHRjcF9lY24gPSB0Y3BfZWNuX21vZGVfZWZmKHNrKTtcbiBcbiBcdHVzZV9hY2NlY24gPSB0Y3BfZWNuID09IFRDUF9FQ05fSU5fQUNDRUNOX09VVF9BQ0NFQ04gfHxcbiBcdFx0ICAgICB0Y3BfY2FfbmVlZHNfYWNjZWNuKHNrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDczMmIzNWNjMDhkMWMuLmM1OGIxNjMzYmI0NmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTI5ODUsNyAmIzQzOzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdCAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosXG4gICogXHRcdCAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosXG4gICogXHRcdCAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKixcbi0gKlx0XHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLlxuJiM0MzsgKlx0XHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLFxuJiM0MzsgKlx0XHQgICoqVENQX0VDTioqLCAqKlRDUF9FQ05fT1BUSU9OKiouXG4gICogXHRcdCogKipJUFBST1RPX0lQKiosIHdoaWNoIHN1cHBvcnRzICpvcHRuYW1lKiAqKklQX1RPUyoqLlxuICAqIFx0XHQqICoqSVBQUk9UT19JUFY2KiosIHdoaWNoIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgKm9wdG5hbWUqXFwgczpcbiAgKiBcdFx0ICAqKklQVjZfVENMQVNTKiosICoqSVBWNl9BVVRPRkxPV0xBQkVMKiouXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG5pbmRleCAwMzc3MmRkNGQzOTkyLi4wMWViYjM0OGJhMjc0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmhcbkBAIC0xNDIsNiAmIzQzOzE0Miw4IEBAIGVudW0ge1xuICNkZWZpbmUgVENQX1JUT19NQVhfTVNcdFx0NDRcdC8qIG1heCBydG8gdGltZSBpbiBtcyAqL1xuICNkZWZpbmUgVENQX1JUT19NSU5fVVNcdFx0NDVcdC8qIG1pbiBydG8gdGltZSBpbiB1cyAqL1xuICNkZWZpbmUgVENQX0RFTEFDS19NQVhfVVNcdDQ2XHQvKiBtYXggZGVsYXllZCBhY2sgdGltZSBpbiB1cyAqL1xuJiM0MzsjZGVmaW5lIFRDUF9FQ05cdFx0XHQ0N1x0LyogUGVyLXNvY2tldCBFQ04gbW9kZSAoMC01LCAyNTU9dXNlIHN5c2N0bCkgKi9cbiYjNDM7I2RlZmluZSBUQ1BfRUNOX09QVElPTlx0XHQ0OFx0LyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqL1xuIFxuICNkZWZpbmUgVENQX1JFUEFJUl9PTlx0XHQxXG4gI2RlZmluZSBUQ1BfUkVQQUlSX09GRlx0XHQwXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uOTkzYjMxZTEwYjk0NCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTU2NzAsNiAmIzQzOzU2NzAsOCBAQCBzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuIFx0Y2FzZSBUQ1BfTk9UU0VOVF9MT1dBVDpcbiBcdGNhc2UgVENQX1NBVkVfU1lOOlxuIFx0Y2FzZSBUQ1BfUlRPX01BWF9NUzpcbiYjNDM7XHRjYXNlIFRDUF9FQ046XG4mIzQzO1x0Y2FzZSBUQ1BfRUNOX09QVElPTjpcbiBcdFx0aWYgKCpvcHRsZW4gIT0gc2l6ZW9mKGludCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IDFjODY3YTMwMjQ0NDYuLmZiMzc2YTk3ZjBlNmQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmNcbkBAIC00NjMsNiAmIzQzOzQ2Myw4IEBAIHZvaWQgdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHR0cC1cdTAwM2V0c29mZnNldCA9IDA7XG4gXHR0cC1cdTAwM2VyYWNrLnJlb193bmRfc3RlcHMgPSAxO1xuJiM0MztcdHRwLVx1MDAzZWVjbl9tb2RlID0gVENQX0VDTl9NT0RFX1VOU1BFQztcbiYjNDM7XHR0cC1cdTAwM2VlY25fb3B0aW9uID0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDO1xuIFxuIFx0c2stXHUwMDNlc2tfd3JpdGVfc3BhY2UgPSBza19zdHJlYW1fd3JpdGVfc3BhY2U7XG4gXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1VTRV9XUklURV9RVUVVRSk7XG5AQCAtNDE2MCw2ICYjNDM7NDE2MiwxOCBAQCBpbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHR0Y3BfZW5hYmxlX3R4X2RlbGF5KHNrLCB2YWwpO1xuIFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZXRjcF90eF9kZWxheSwgdmFsKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBUQ1BfRUNOOlxuJiM0MztcdFx0aWYgKHZhbCAhPSBUQ1BfRUNOX01PREVfVU5TUEVDIFx1MDAyNlx1MDAyNiAodmFsIFx1MDAzYyAwIHx8IHZhbCBcdTAwM2UgVENQX0VDTl9JTl9BQ0NFQ05fT1VUX05PRUNOKSlcbiYjNDM7XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0V1JJVEVfT05DRSh0cC1cdTAwM2VlY25fbW9kZSwgdmFsKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVENQX0VDTl9PUFRJT046XG4mIzQzO1x0XHRpZiAodmFsICE9IFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyBcdTAwMjZcdTAwMjYgKHZhbCBcdTAwM2MgMCB8fCB2YWwgXHUwMDNlIFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QpKVxuJiM0MztcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZWVjbl9vcHRpb24sIHZhbCk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGVyciA9IC1FTk9QUk9UT09QVDtcbiBcdFx0YnJlYWs7XG5AQCAtNDg0Miw2ICYjNDM7NDg1NiwxMiBAQCBpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4gXHRjYXNlIFRDUF9ERUxBQ0tfTUFYX1VTOlxuIFx0XHR2YWwgPSBqaWZmaWVzX3RvX3VzZWNzKFJFQURfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19kZWxhY2tfbWF4KSk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVENQX0VDTjpcbiYjNDM7XHRcdHZhbCA9IFJFQURfT05DRSh0cC1cdTAwM2VlY25fbW9kZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFRDUF9FQ05fT1BUSU9OOlxuJiM0MztcdFx0dmFsID0gUkVBRF9PTkNFKHRwLVx1MDAzZWVjbl9vcHRpb24pO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuQEAgLTUyNTYsNiAmIzQzOzUyNzYsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdGNwX3N0cnVjdF9jaGVjayh2b2lkKVxuIFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgdHNvcnRlZF9zZW50X3F1ZXVlKTtcbiBcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGhpZ2hlc3Rfc2Fjayk7XG4gXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fZmxhZ3MpO1xuJiM0MztcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGVjbl9tb2RlKTtcbiYjNDM7XHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fb3B0aW9uKTtcbiBcbiBcdC8qIFRYUlggcmVhZC13cml0ZSBob3RwYXRoIGNhY2hlIGxpbmVzICovXG4gXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4cngsIHByZWRfZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbmluZGV4IDBmNjBhMWRiZjkyNzQuLjAwNDNiNGIyYmM5MjIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbkBAIC03NDU3LDEzICYjNDM7NzQ1NywxMiBAQCBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbi1cdGNvbnN0IHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGxpc3Rlbl9zayk7XG4gXHRib29sIHRoX2VjbiA9IHRoLVx1MDAzZWVjZSBcdTAwMjZcdTAwMjYgdGgtXHUwMDNlY3dyO1xuIFx0Ym9vbCBlY3QsIGVjbl9vaztcbiBcdHUzMiBlY25fb2tfZHN0O1xuIFxuIFx0aWYgKHRjcF9hY2NlY25fc3luX3JlcXVlc3RlZCh0aCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2VjbikgXHUwMDNlPSAzIHx8XG4mIzQzO1x0ICAgICh0Y3BfZWNuX21vZGVfZWZmKGxpc3Rlbl9zaykgXHUwMDNlPSAzIHx8XG4gXHQgICAgIHRjcF9jYV9uZWVkc19hY2NlY24obGlzdGVuX3NrKSkpIHtcbiBcdFx0aW5ldF9yc2socmVxKS1cdTAwM2VlY25fb2sgPSAxO1xuIFx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlYWNjZWNuX29rID0gMTtcbkBAIC03NDc3LDcgJiM0Mzs3NDc2LDcgQEAgc3RhdGljIHZvaWQgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXG4gXHRlY3QgPSAhSU5FVF9FQ05faXNfbm90X2VjdChUQ1BfU0tCX0NCKHNrYiktXHUwMDNlaXBfZHNmaWVsZCk7XG4gXHRlY25fb2tfZHN0ID0gZHN0X2ZlYXR1cmUoZHN0LCBEU1RfRkVBVFVSRV9FQ05fTUFTSyk7XG4tXHRlY25fb2sgPSBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY24pIHx8IGVjbl9va19kc3Q7XG4mIzQzO1x0ZWNuX29rID0gdGNwX2Vjbl9tb2RlX2VmZihsaXN0ZW5fc2spIHx8IGVjbl9va19kc3Q7XG4gXG4gXHRpZiAoKCghZWN0IHx8IHRoLVx1MDAzZXJlczEgfHwgdGgtXHUwMDNlYWUpIFx1MDAyNlx1MDAyNiBlY25fb2spIHx8XG4gXHQgICAgdGNwX2NhX25lZWRzX2VjbihsaXN0ZW5fc2spIHx8XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5pbmRleCAwMDQxN2E0MjkyMjI1Li44MmI5NmM0MDE1ZmQwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbkBAIC0xMDQ1LDcgJiM0MzsxMDQ1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHVubGlrZWx5KChUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfQUNLKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICB0Y3BfZWNuX21vZGVfYWNjZWNuKHRwKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICBpbmV0X2NzayhzayktXHUwMDNlaWNza19yZXRyYW5zbWl0cyBcdTAwM2MgMiBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICByZW1haW5pbmcgXHUwMDNlPSBUQ1BPTEVOX0FDQ0VDTl9CQVNFKSkge1xuIFx0XHRvcHRzLVx1MDAzZXVzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTtcbiBcdFx0cmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTtcbkBAIC0xMTMzLDcgJiM0MzsxMTMzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0c21jX3NldF9vcHRpb25fY29uZCh0Y3Bfc2soc2spLCBpcmVxLCBvcHRzLCBcdTAwMjZyZW1haW5pbmcpO1xuIFxuIFx0aWYgKHRyZXEtXHUwMDNlYWNjZWNuX29rIFx1MDAyNlx1MDAyNlxuLVx0ICAgIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHN5bmFja190eXBlICE9IFRDUF9TWU5BQ0tfUkVUUkFOUyBcdTAwMjZcdTAwMjYgcmVtYWluaW5nIFx1MDAzZT0gVENQT0xFTl9BQ0NFQ05fQkFTRSkge1xuIFx0XHRvcHRzLVx1MDAzZXVzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTtcbiBcdFx0cmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTtcbkBAIC0xMjIxLDcgJiM0MzsxMjIxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2JcbiBcdH1cbiBcbiBcdGlmICh0Y3BfZWNuX21vZGVfYWNjZWNuKHRwKSkge1xuLVx0XHRpbnQgZWNuX29wdCA9IFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pO1xuJiM0MztcdFx0aW50IGVjbl9vcHQgPSB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spO1xuIFxuIFx0XHRpZiAoZWNuX29wdCBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlc2F3X2FjY2Vjbl9vcHQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAoZWNuX29wdCBcdTAwM2U9IFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QgfHxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDczMmIzNWNjMDhkMWMuLmM1OGIxNjMzYmI0NmUgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTI5ODUsNyAmIzQzOzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdCAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosXG4gICogXHRcdCAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosXG4gICogXHRcdCAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKixcbi0gKlx0XHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLlxuJiM0MzsgKlx0XHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLFxuJiM0MzsgKlx0XHQgICoqVENQX0VDTioqLCAqKlRDUF9FQ05fT1BUSU9OKiouXG4gICogXHRcdCogKipJUFBST1RPX0lQKiosIHdoaWNoIHN1cHBvcnRzICpvcHRuYW1lKiAqKklQX1RPUyoqLlxuICAqIFx0XHQqICoqSVBQUk9UT19JUFY2KiosIHdoaWNoIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgKm9wdG5hbWUqXFwgczpcbiAgKiBcdFx0ICAqKklQVjZfVENMQVNTKiosICoqSVBWNl9BVVRPRkxPV0xBQkVMKiouXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG5pbmRleCAxM2NlZWIzOTVlYjhmLi40ZjUyYjlkZjQyNjYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmhcbkBAIC0xMjgsNyAmIzQzOzEyOCw4IEBAIGVudW0ge1xuICNkZWZpbmUgVENQX0NNX0lOUVx0XHRUQ1BfSU5RXG4gXG4gI2RlZmluZSBUQ1BfVFhfREVMQVlcdFx0MzdcdC8qIGRlbGF5IG91dGdvaW5nIHBhY2tldHMgYnkgWFggdXNlYyAqL1xuLVxuJiM0MzsjZGVmaW5lIFRDUF9FQ05cdFx0XHQ0N1x0LyogUGVyLXNvY2tldCBFQ04gbW9kZSAoMC01LCAyNTU9dXNlIHN5c2N0bCkgKi9cbiYjNDM7I2RlZmluZSBUQ1BfRUNOX09QVElPTlx0XHQ0OFx0LyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqL1xuIFxuICNkZWZpbmUgVENQX1JFUEFJUl9PTlx0XHQxXG4gI2RlZmluZSBUQ1BfUkVQQUlSX09GRlx0XHQwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuY1xuaW5kZXggZDk2ZTk5YjY3YWViZi4uZmI5N2ZhMGJjN2I0NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zZXRnZXRfc29ja29wdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuY1xuQEAgLTY0LDYgJiM0Mzs2NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja29wdF90ZXN0IHNvbF90Y3BfdGVzdHNbXSA9IHtcbiBcdHsgLm9wdCA9IFRDUF9CUEZfREVMQUNLX01BWCwgLm5ldyA9IDMwMDAwLCAuZXhwZWN0ZWQgPSAzMDAwMCwgfSxcbiBcdHsgLm9wdCA9IFRDUF9CUEZfUlRPX01JTiwgLm5ldyA9IDMwMDAwLCAuZXhwZWN0ZWQgPSAzMDAwMCwgfSxcbiBcdHsgLm9wdCA9IFRDUF9SVE9fTUFYX01TLCAubmV3ID0gMjAwMCwgLmV4cGVjdGVkID0gMjAwMCwgfSxcbiYjNDM7XHR7IC5vcHQgPSBUQ1BfRUNOLCAubmV3ID0gMywgLmV4cGVjdGVkID0gMywgLnJlc3RvcmUgPSAyNTUsIH0sXG4mIzQzO1x0eyAub3B0ID0gVENQX0VDTl9PUFRJT04sIC5uZXcgPSAyLCAuZXhwZWN0ZWQgPSAyLCAucmVzdG9yZSA9IDI1NSwgfSxcbiBcdHsgLm9wdCA9IDAsIH0sXG4gfTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fdGNwX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7ZG9fdGNwX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGNwX2Nvbm5fcmVxdWVzdCYjMzQ7LAogICAgJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0OywKICAgICYjMzQ7dGNwX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTiBzb2NrZXQgb3B0aW9ucyB0byBhbGxvdyBwZXItc29ja2V0IGNvbmZpZ3VyYXRpb24gYW5kIG92ZXJyaWRlIG9mIHRoZSB0Y3BfZWNuIGFuZCB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgc2V0dGluZ3MuIEl0IG1vZGlmaWVzIFRDUCBzb2NrZXQgb3B0aW9ucyBoYW5kbGluZyAoZ2V0c29ja29wdC9zZXRzb2Nrb3B0KSwgQlBGIHNvY2tvcHQgZmlsdGVycywgVENQIFNZTi9TWU4tQUNLIG9wdGlvbiBnZW5lcmF0aW9uLCBhbmQgVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBwcm9jZXNzaW5nIGluIHRoZSBjb3JlIElQdjQvVENQIG5ldHdvcmtpbmcgc3RhY2suJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MzA0ZDA0YzYzN2JjYjRhMGU0MjRlZTRmNzU0ZDgzNGEzOTkyMDE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDk6MDY6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0CmluZGV4IDIwOGY0Njk2N2VlNTkuLjJlNTVkOWUyZWIwOWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0CkBAIC01MjgsNiAmIzQzOzUyOCw0MyBAQCB0Y3BfZWNuX2ZhbGxiYWNrIC0gQk9PTEVBTgogCiAJRGVmYXVsdDogMSAoZW5hYmxlZCkKIAomIzQzO3RjcF9lY24gKHNvY2tldCBvcHRpb24pIC0gVENQX0VDTgomIzQzOwlQZXItc29ja2V0IGNvbnRyb2wgb2YgRUNOIG1vZGUsIGFsbG93aW5nIHBlci1jb25uZWN0aW9uIG92ZXJyaWRlIG9mIHRoZQomIzQzOwl0Y3BfZWNuIHN5c2N0bCBzZXR0aW5nLiBUaGlzIGVuYWJsZXMgTDRTIChMb3cgTGF0ZW5jeSwgTG93IExvc3MsIFNjYWxhYmxlCiYjNDM7CVRocm91Z2hwdXQpIGNvbmZpZ3VyYXRpb24gb24gYSBwZXItc29ja2V0IGJhc2lzLgomIzQzOwomIzQzOwlTZXR0aW5nIHRoaXMgc29ja2V0IG9wdGlvbiB0byBhbnkgdmFsdWUgZXhjZXB0IDI1NSB3aWxsIG92ZXJyaWRlIHRoZQomIzQzOwlzeXN0ZW0td2lkZSB0Y3BfZWNuIHN5c2N0bCBmb3IgdGhhdCBwYXJ0aWN1bGFyIHNvY2tldC4gQSB2YWx1ZSBvZiAyNTUKJiM0MzsJKFRDUF9FQ05fTU9ERV9VTlNQRUMpIG1lYW5zIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgc3lzY3RsIHZhbHVlLgomIzQzOwomIzQzOwlQb3NzaWJsZSB2YWx1ZXM6IDAtNSAoc2VlIHRjcF9lY24gc3lzY3RsIGRlc2NyaXB0aW9uIGFib3ZlKSwgb3IgMjU1IHRvCiYjNDM7CXVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgKHN5c2N0bF90Y3BfZWNuKS4KJiM0MzsKJiM0MzsJRXhhbXBsZTo6CiYjNDM7CiYjNDM7CQlpbnQgdmFsID0gMzsgIC8qIEFjY0VDTiBtb2RlICovCiYjNDM7CQlzZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfRUNOLCAmYW1wO3ZhbCwgc2l6ZW9mKHZhbCkpOwomIzQzOwomIzQzOwlEZWZhdWx0OiAyNTUgKHVuc3BlY2lmaWVkIC0gdXNlcyB0Y3BfZWNuIHN5c2N0bCB2YWx1ZSkKJiM0MzsKJiM0Mzt0Y3BfZWNuX29wdGlvbiAoc29ja2V0IG9wdGlvbikgLSBUQ1BfRUNOX09QVElPTgomIzQzOwlQZXItc29ja2V0IGNvbnRyb2wgb2YgQWNjdXJhdGUgRUNOIChBY2NFQ04pIG9wdGlvbiBzZW5kaW5nIGJlaGF2aW9yLAomIzQzOwlhbGxvd2luZyBwZXItY29ubmVjdGlvbiBvdmVycmlkZSBvZiB0aGUgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIHNldHRpbmcuCiYjNDM7CiYjNDM7CVNldHRpbmcgdGhpcyBzb2NrZXQgb3B0aW9uIHRvIGFueSB2YWx1ZSBleGNlcHQgMjU1IHdpbGwgb3ZlcnJpZGUgdGhlCiYjNDM7CXN5c3RlbS13aWRlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBmb3IgdGhhdCBwYXJ0aWN1bGFyIHNvY2tldC4gQSB2YWx1ZSBvZgomIzQzOwkyNTUgKFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQykgbWVhbnMgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBzeXNjdGwgdmFsdWUuCiYjNDM7CiYjNDM7CVBvc3NpYmxlIHZhbHVlczogMC0zIChzZWUgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIGRlc2NyaXB0aW9uIGFib3ZlKSwgb3IgMjU1CiYjNDM7CXRvIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgKHN5c2N0bF90Y3BfZWNuX29wdGlvbikuCiYjNDM7CiYjNDM7CUV4YW1wbGU6OgomIzQzOwomIzQzOwkJaW50IHZhbCA9IDI7ICAvKiBTZW5kIEFjY0VDTiBvcHRpb24gb24gZXZlcnkgcGFja2V0ICovCiYjNDM7CQlzZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfRUNOX09QVElPTiwgJmFtcDt2YWwsIHNpemVvZih2YWwpKTsKJiM0MzsKJiM0MzsJRGVmYXVsdDogMjU1ICh1bnNwZWNpZmllZCAtIHVzZXMgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIHZhbHVlKQomIzQzOwogdGNwX2ZhY2sgLSBCT09MRUFOCiAJVGhpcyBpcyBhIGxlZ2FjeSBvcHRpb24sIGl0IGhhcyBubyBlZmZlY3QgYW55bW9yZS4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggNmE4Yzc3NzE5MzIyZi4uN2NiMWU3NjVmNDYxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC0yODksNiAmIzQzOzI4OSwxMyBAQCBzdHJ1Y3QgdGNwX3NvY2sgewogCQkJCQkgKiBzYWNrZWRfb3V0ICZndDsgMCkKIAkJCQkJICovCiAJdTgJZWNuX2ZsYWdzOwkvKiBFQ04gc3RhdHVzIGJpdHMuCQkJKi8KJiM0MzsJdTgJZWNuX21vZGU7CS8qIFBlci1zb2NrZXQgRUNOIG1vZGUgb3ZlcnJpZGUKJiM0MzsJCQkJICogKFRDUF9FQ05fTU9ERV9VTlNQRUMgPSB1c2Ugc3lzY3RsKQomIzQzOwkJCQkgKi8KJiM0MzsJdTgJZWNuX29wdGlvbjsJLyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uIG92ZXJyaWRlCiYjNDM7CQkJCSAqIChUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgPSB1c2Ugc3lzY3RsKQomIzQzOwkJCQkgKi8KJiM0MzsKIAlfX2NhY2hlbGluZV9ncm91cF9lbmQodGNwX3NvY2tfd3JpdGVfdHgpOwogCiAJLyogVFhSWCByZWFkLXdyaXRlIGhvdHBhdGggY2FjaGUgbGluZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcF9lY24uaCBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaAppbmRleCA4NjVkNWM1YTc3MThkLi45MzFlMDg3NzE3NmM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3BfZWNuLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvdGNwX2Vjbi5oCkBAIC0yMiw2ICYjNDM7MjIsNyBAQCBlbnVtIHRjcF9lY25fbW9kZSB7CiAJVENQX0VDTl9JTl9BQ0NFQ05fT1VUX0FDQ0VDTiA9IDMsCiAJVENQX0VDTl9JTl9BQ0NFQ05fT1VUX0VDTiA9IDQsCiAJVENQX0VDTl9JTl9BQ0NFQ05fT1VUX05PRUNOID0gNSwKJiM0MzsJVENQX0VDTl9NT0RFX1VOU1BFQyA9IDI1NSwJLyogVXNlIHN5c2N0bCBkZWZhdWx0IChwZXItc29ja2V0KSAqLwogfTsKIAogLyogQWNjRUNOIG9wdGlvbiBzZW5kaW5nIHdoZW4gQWNjRUNOIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBuZWdvdGlhdGVkICovCkBAIC0zMCw4ICYjNDM7MzEsMjkgQEAgZW51bSB0Y3BfYWNjZWNuX29wdGlvbiB7CiAJVENQX0FDQ0VDTl9PUFRJT05fTUlOSU1VTSA9IDEsCiAJVENQX0FDQ0VDTl9PUFRJT05fRlVMTCA9IDIsCiAJVENQX0FDQ0VDTl9PUFRJT05fUEVSU0lTVCA9IDMsCiYjNDM7CVRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyA9IDI1NSwJLyogVXNlIHN5c2N0bCBkZWZhdWx0IChwZXItc29ja2V0KSAqLwogfTsKIAomIzQzOy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBFQ04gbW9kZTogcGVyLXNvY2tldCBvdmVycmlkZSBvciBzeXNjdGwgZmFsbGJhY2sgKi8KJiM0MztzdGF0aWMgaW5saW5lIHU4IHRjcF9lY25fbW9kZV9lZmYoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJdTggbW9kZSA9IHRjcF9zayhzayktJmd0O2Vjbl9tb2RlOwomIzQzOwomIzQzOwlpZiAobW9kZSA9PSBUQ1BfRUNOX01PREVfVU5TUEVDKQomIzQzOwkJcmV0dXJuIFJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF9lY24pOwomIzQzOwlyZXR1cm4gbW9kZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIEFjY0VDTiBvcHRpb246IHBlci1zb2NrZXQgb3ZlcnJpZGUgb3Igc3lzY3RsIGZhbGxiYWNrICovCiYjNDM7c3RhdGljIGlubGluZSB1OCB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJdTggb3B0ID0gdGNwX3NrKHNrKS0mZ3Q7ZWNuX29wdGlvbjsKJiM0MzsKJiM0MzsJaWYgKG9wdCA9PSBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMpCiYjNDM7CQlyZXR1cm4gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pOwomIzQzOwlyZXR1cm4gb3B0OwomIzQzO30KJiM0MzsKIC8qIEFwcGx5IGVpdGhlciBFQ1QoMCkgb3IgRUNUKDEpIGJhc2VkIG9uIFRDUF9DT05HX0VDVF8xX05FR09USUFUSU9OIGZsYWcgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBJTkVUX0VDTl94bWl0X2VjdF8xX25lZ290aWF0aW9uKHN0cnVjdCBzb2NrICpzaykKIHsKQEAgLTU5OSw3ICYjNDM7NjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRjcF9lY25fc2VuZF9zeW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCWJvb2wgYnBmX25lZWRzX2VjbiA9IHRjcF9icGZfY2FfbmVlZHNfZWNuKHNrKTsKIAlib29sIHVzZV9lY24sIHVzZV9hY2NlY247Ci0JdTggdGNwX2VjbiA9IFJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF9lY24pOwomIzQzOwl1OCB0Y3BfZWNuID0gdGNwX2Vjbl9tb2RlX2VmZihzayk7CiAKIAl1c2VfYWNjZWNuID0gdGNwX2VjbiA9PSBUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfQUNDRUNOIHx8CiAJCSAgICAgdGNwX2NhX25lZWRzX2FjY2Vjbihzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggNzMyYjM1Y2MwOGQxYy4uYzU4YjE2MzNiYjQ2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMjk4NSw3ICYjNDM7Mjk4NSw4IEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqIAkJICAqKlRDUF9TWU5DTlQqKiwgKipUQ1BfVVNFUl9USU1FT1VUKiosICoqVENQX05PVFNFTlRfTE9XQVQqKiwKICAqIAkJICAqKlRDUF9OT0RFTEFZKiosICoqVENQX01BWFNFRyoqLCAqKlRDUF9XSU5ET1dfQ0xBTVAqKiwKICAqIAkJICAqKlRDUF9USElOX0xJTkVBUl9USU1FT1VUUyoqLCAqKlRDUF9CUEZfREVMQUNLX01BWCoqLAotICoJCSAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiouCiYjNDM7ICoJCSAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiosCiYjNDM7ICoJCSAgKipUQ1BfRUNOKiosICoqVENQX0VDTl9PUFRJT04qKi4KICAqIAkJKiAqKklQUFJPVE9fSVAqKiwgd2hpY2ggc3VwcG9ydHMgKm9wdG5hbWUqICoqSVBfVE9TKiouCiAgKiAJCSogKipJUFBST1RPX0lQVjYqKiwgd2hpY2ggc3VwcG9ydHMgdGhlIGZvbGxvd2luZyAqb3B0bmFtZSpcIHM6CiAgKiAJCSAgKipJUFY2X1RDTEFTUyoqLCAqKklQVjZfQVVUT0ZMT1dMQUJFTCoqLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oCmluZGV4IDAzNzcyZGQ0ZDM5OTIuLjAxZWJiMzQ4YmEyNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgKQEAgLTE0Miw2ICYjNDM7MTQyLDggQEAgZW51bSB7CiAjZGVmaW5lIFRDUF9SVE9fTUFYX01TCQk0NAkvKiBtYXggcnRvIHRpbWUgaW4gbXMgKi8KICNkZWZpbmUgVENQX1JUT19NSU5fVVMJCTQ1CS8qIG1pbiBydG8gdGltZSBpbiB1cyAqLwogI2RlZmluZSBUQ1BfREVMQUNLX01BWF9VUwk0NgkvKiBtYXggZGVsYXllZCBhY2sgdGltZSBpbiB1cyAqLwomIzQzOyNkZWZpbmUgVENQX0VDTgkJCTQ3CS8qIFBlci1zb2NrZXQgRUNOIG1vZGUgKDAtNSwgMjU1PXVzZSBzeXNjdGwpICovCiYjNDM7I2RlZmluZSBUQ1BfRUNOX09QVElPTgkJNDgJLyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqLwogCiAjZGVmaW5lIFRDUF9SRVBBSVJfT04JCTEKICNkZWZpbmUgVENQX1JFUEFJUl9PRkYJCTAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggNjE5NDBlNzUzNTUyMy4uOTkzYjMxZTEwYjk0NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTU2NzAsNiAmIzQzOzU2NzAsOCBAQCBzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLAogCWNhc2UgVENQX05PVFNFTlRfTE9XQVQ6CiAJY2FzZSBUQ1BfU0FWRV9TWU46CiAJY2FzZSBUQ1BfUlRPX01BWF9NUzoKJiM0MzsJY2FzZSBUQ1BfRUNOOgomIzQzOwljYXNlIFRDUF9FQ05fT1BUSU9OOgogCQlpZiAoKm9wdGxlbiAhPSBzaXplb2YoaW50KSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggMWM4NjdhMzAyNDQ0Ni4uZmIzNzZhOTdmMGU2ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTQ2Myw2ICYjNDM7NDYzLDggQEAgdm9pZCB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaykKIAogCXRwLSZndDt0c29mZnNldCA9IDA7CiAJdHAtJmd0O3JhY2sucmVvX3duZF9zdGVwcyA9IDE7CiYjNDM7CXRwLSZndDtlY25fbW9kZSA9IFRDUF9FQ05fTU9ERV9VTlNQRUM7CiYjNDM7CXRwLSZndDtlY25fb3B0aW9uID0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDOwogCiAJc2stJmd0O3NrX3dyaXRlX3NwYWNlID0gc2tfc3RyZWFtX3dyaXRlX3NwYWNlOwogCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfVVNFX1dSSVRFX1FVRVVFKTsKQEAgLTQxNjAsNiAmIzQzOzQxNjIsMTggQEAgaW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJdGNwX2VuYWJsZV90eF9kZWxheShzaywgdmFsKTsKIAkJV1JJVEVfT05DRSh0cC0mZ3Q7dGNwX3R4X2RlbGF5LCB2YWwpOwogCQlicmVhazsKJiM0MzsJY2FzZSBUQ1BfRUNOOgomIzQzOwkJaWYgKHZhbCAhPSBUQ1BfRUNOX01PREVfVU5TUEVDICZhbXA7JmFtcDsgKHZhbCAmbHQ7IDAgfHwgdmFsICZndDsgVENQX0VDTl9JTl9BQ0NFQ05fT1VUX05PRUNOKSkKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZWxzZQomIzQzOwkJCVdSSVRFX09OQ0UodHAtJmd0O2Vjbl9tb2RlLCB2YWwpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVENQX0VDTl9PUFRJT046CiYjNDM7CQlpZiAodmFsICE9IFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyAmYW1wOyZhbXA7ICh2YWwgJmx0OyAwIHx8IHZhbCAmZ3Q7IFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QpKQomIzQzOwkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQllbHNlCiYjNDM7CQkJV1JJVEVfT05DRSh0cC0mZ3Q7ZWNuX29wdGlvbiwgdmFsKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9QUk9UT09QVDsKIAkJYnJlYWs7CkBAIC00ODQyLDYgJiM0Mzs0ODU2LDEyIEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKIAljYXNlIFRDUF9ERUxBQ0tfTUFYX1VTOgogCQl2YWwgPSBqaWZmaWVzX3RvX3VzZWNzKFJFQURfT05DRShpbmV0X2NzayhzayktJmd0O2ljc2tfZGVsYWNrX21heCkpOwogCQlicmVhazsKJiM0MzsJY2FzZSBUQ1BfRUNOOgomIzQzOwkJdmFsID0gUkVBRF9PTkNFKHRwLSZndDtlY25fbW9kZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBUQ1BfRUNOX09QVElPTjoKJiM0MzsJCXZhbCA9IFJFQURfT05DRSh0cC0mZ3Q7ZWNuX29wdGlvbik7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KQEAgLTUyNTYsNiAmIzQzOzUyNzYsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdGNwX3N0cnVjdF9jaGVjayh2b2lkKQogCUNBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIHRzb3J0ZWRfc2VudF9xdWV1ZSk7CiAJQ0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgaGlnaGVzdF9zYWNrKTsKIAlDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fZmxhZ3MpOwomIzQzOwlDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fbW9kZSk7CiYjNDM7CUNBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGVjbl9vcHRpb24pOwogCiAJLyogVFhSWCByZWFkLXdyaXRlIGhvdHBhdGggY2FjaGUgbGluZXMgKi8KIAlDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4cngsIHByZWRfZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAwZjYwYTFkYmY5Mjc0Li4wMDQzYjRiMmJjOTIyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNzQ1NywxMyAmIzQzOzc0NTcsMTIgQEAgc3RhdGljIHZvaWQgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAJCQkJICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogewogCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpOwotCWNvbnN0IHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGxpc3Rlbl9zayk7CiAJYm9vbCB0aF9lY24gPSB0aC0mZ3Q7ZWNlICZhbXA7JmFtcDsgdGgtJmd0O2N3cjsKIAlib29sIGVjdCwgZWNuX29rOwogCXUzMiBlY25fb2tfZHN0OwogCiAJaWYgKHRjcF9hY2NlY25fc3luX3JlcXVlc3RlZCh0aCkgJmFtcDsmYW1wOwotCSAgICAoUkVBRF9PTkNFKG5ldC0mZ3Q7aXB2NC5zeXNjdGxfdGNwX2VjbikgJmd0Oz0gMyB8fAomIzQzOwkgICAgKHRjcF9lY25fbW9kZV9lZmYobGlzdGVuX3NrKSAmZ3Q7PSAzIHx8CiAJICAgICB0Y3BfY2FfbmVlZHNfYWNjZWNuKGxpc3Rlbl9zaykpKSB7CiAJCWluZXRfcnNrKHJlcSktJmd0O2Vjbl9vayA9IDE7CiAJCXRjcF9yc2socmVxKS0mZ3Q7YWNjZWNuX29rID0gMTsKQEAgLTc0NzcsNyAmIzQzOzc0NzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAogCWVjdCA9ICFJTkVUX0VDTl9pc19ub3RfZWN0KFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7aXBfZHNmaWVsZCk7CiAJZWNuX29rX2RzdCA9IGRzdF9mZWF0dXJlKGRzdCwgRFNUX0ZFQVRVUkVfRUNOX01BU0spOwotCWVjbl9vayA9IFJFQURfT05DRShuZXQtJmd0O2lwdjQuc3lzY3RsX3RjcF9lY24pIHx8IGVjbl9va19kc3Q7CiYjNDM7CWVjbl9vayA9IHRjcF9lY25fbW9kZV9lZmYobGlzdGVuX3NrKSB8fCBlY25fb2tfZHN0OwogCiAJaWYgKCgoIWVjdCB8fCB0aC0mZ3Q7cmVzMSB8fCB0aC0mZ3Q7YWUpICZhbXA7JmFtcDsgZWNuX29rKSB8fAogCSAgICB0Y3BfY2FfbmVlZHNfZWNuKGxpc3Rlbl9zaykgfHwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCAwMDQxN2E0MjkyMjI1Li44MmI5NmM0MDE1ZmQwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC0xMDQ1LDcgJiM0MzsxMDQ1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICh1bmxpa2VseSgoVENQX1NLQl9DQihza2IpLSZndDt0Y3BfZmxhZ3MgJmFtcDsgVENQSERSX0FDSykgJmFtcDsmYW1wOwogCQkgICAgIHRjcF9lY25fbW9kZV9hY2NlY24odHApICZhbXA7JmFtcDsKIAkJICAgICBpbmV0X2NzayhzayktJmd0O2ljc2tfcmV0cmFuc21pdHMgJmx0OyAyICZhbXA7JmFtcDsKLQkJICAgICBSRUFEX09OQ0Uoc29ja19uZXQoc2spLSZndDtpcHY0LnN5c2N0bF90Y3BfZWNuX29wdGlvbikgJmFtcDsmYW1wOwomIzQzOwkJICAgICB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spICZhbXA7JmFtcDsKIAkJICAgICByZW1haW5pbmcgJmd0Oz0gVENQT0xFTl9BQ0NFQ05fQkFTRSkpIHsKIAkJb3B0cy0mZ3Q7dXNlX3N5bmFja19lY25fYnl0ZXMgPSAxOwogCQlyZW1haW5pbmcgLT0gdGNwX29wdGlvbnNfZml0X2FjY2VjbihvcHRzLCAwLCByZW1haW5pbmcpOwpAQCAtMTEzMyw3ICYjNDM7MTEzMyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAlzbWNfc2V0X29wdGlvbl9jb25kKHRjcF9zayhzayksIGlyZXEsIG9wdHMsICZhbXA7cmVtYWluaW5nKTsKIAogCWlmICh0cmVxLSZndDthY2NlY25fb2sgJmFtcDsmYW1wOwotCSAgICBSRUFEX09OQ0Uoc29ja19uZXQoc2spLSZndDtpcHY0LnN5c2N0bF90Y3BfZWNuX29wdGlvbikgJmFtcDsmYW1wOwomIzQzOwkgICAgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKSAmYW1wOyZhbXA7CiAJICAgIHN5bmFja190eXBlICE9IFRDUF9TWU5BQ0tfUkVUUkFOUyAmYW1wOyZhbXA7IHJlbWFpbmluZyAmZ3Q7PSBUQ1BPTEVOX0FDQ0VDTl9CQVNFKSB7CiAJCW9wdHMtJmd0O3VzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTsKIAkJcmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTsKQEAgLTEyMjEsNyAmIzQzOzEyMjEsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYgogCX0KIAogCWlmICh0Y3BfZWNuX21vZGVfYWNjZWNuKHRwKSkgewotCQlpbnQgZWNuX29wdCA9IFJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKTsKJiM0MzsJCWludCBlY25fb3B0ID0gdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKTsKIAogCQlpZiAoZWNuX29wdCAmYW1wOyZhbXA7IHRwLSZndDtzYXdfYWNjZWNuX29wdCAmYW1wOyZhbXA7CiAJCSAgICAoZWNuX29wdCAmZ3Q7PSBUQ1BfQUNDRUNOX09QVElPTl9QRVJTSVNUIHx8CmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggNzMyYjM1Y2MwOGQxYy4uYzU4YjE2MzNiYjQ2ZSAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMjk4NSw3ICYjNDM7Mjk4NSw4IEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqIAkJICAqKlRDUF9TWU5DTlQqKiwgKipUQ1BfVVNFUl9USU1FT1VUKiosICoqVENQX05PVFNFTlRfTE9XQVQqKiwKICAqIAkJICAqKlRDUF9OT0RFTEFZKiosICoqVENQX01BWFNFRyoqLCAqKlRDUF9XSU5ET1dfQ0xBTVAqKiwKICAqIAkJICAqKlRDUF9USElOX0xJTkVBUl9USU1FT1VUUyoqLCAqKlRDUF9CUEZfREVMQUNLX01BWCoqLAotICoJCSAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiouCiYjNDM7ICoJCSAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiosCiYjNDM7ICoJCSAgKipUQ1BfRUNOKiosICoqVENQX0VDTl9PUFRJT04qKi4KICAqIAkJKiAqKklQUFJPVE9fSVAqKiwgd2hpY2ggc3VwcG9ydHMgKm9wdG5hbWUqICoqSVBfVE9TKiouCiAgKiAJCSogKipJUFBST1RPX0lQVjYqKiwgd2hpY2ggc3VwcG9ydHMgdGhlIGZvbGxvd2luZyAqb3B0bmFtZSpcIHM6CiAgKiAJCSAgKipJUFY2X1RDTEFTUyoqLCAqKklQVjZfQVVUT0ZMT1dMQUJFTCoqLgpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oCmluZGV4IDEzY2VlYjM5NWViOGYuLjRmNTJiOWRmNDI2NjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgKQEAgLTEyOCw3ICYjNDM7MTI4LDggQEAgZW51bSB7CiAjZGVmaW5lIFRDUF9DTV9JTlEJCVRDUF9JTlEKIAogI2RlZmluZSBUQ1BfVFhfREVMQVkJCTM3CS8qIGRlbGF5IG91dGdvaW5nIHBhY2tldHMgYnkgWFggdXNlYyAqLwotCiYjNDM7I2RlZmluZSBUQ1BfRUNOCQkJNDcJLyogUGVyLXNvY2tldCBFQ04gbW9kZSAoMC01LCAyNTU9dXNlIHN5c2N0bCkgKi8KJiM0MzsjZGVmaW5lIFRDUF9FQ05fT1BUSU9OCQk0OAkvKiBQZXItc29ja2V0IEFjY0VDTiBvcHRpb24gKDAtMywgMjU1PXVzZSBzeXNjdGwpICovCiAKICNkZWZpbmUgVENQX1JFUEFJUl9PTgkJMQogI2RlZmluZSBUQ1BfUkVQQUlSX09GRgkJMApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuYwppbmRleCBkOTZlOTliNjdhZWJmLi5mYjk3ZmEwYmM3YjQ3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuYwpAQCAtNjQsNiAmIzQzOzY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzb2Nrb3B0X3Rlc3Qgc29sX3RjcF90ZXN0c1tdID0gewogCXsgLm9wdCA9IFRDUF9CUEZfREVMQUNLX01BWCwgLm5ldyA9IDMwMDAwLCAuZXhwZWN0ZWQgPSAzMDAwMCwgfSwKIAl7IC5vcHQgPSBUQ1BfQlBGX1JUT19NSU4sIC5uZXcgPSAzMDAwMCwgLmV4cGVjdGVkID0gMzAwMDAsIH0sCiAJeyAub3B0ID0gVENQX1JUT19NQVhfTVMsIC5uZXcgPSAyMDAwLCAuZXhwZWN0ZWQgPSAyMDAwLCB9LAomIzQzOwl7IC5vcHQgPSBUQ1BfRUNOLCAubmV3ID0gMywgLmV4cGVjdGVkID0gMywgLnJlc3RvcmUgPSAyNTUsIH0sCiYjNDM7CXsgLm9wdCA9IFRDUF9FQ05fT1BUSU9OLCAubmV3ID0gMiwgLmV4cGVjdGVkID0gMiwgLnJlc3RvcmUgPSAyNTUsIH0sCiAJeyAub3B0ID0gMCwgfSwKIH07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI3OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyAmYW1wOyBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBxdWl0ZSBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEl0IGludHJvZHVjZXMgbmV3IHNvY2tldCBvcHRpb25zLCBgVENQX0VDTmAgYW5kIGBUQ1BfRUNOX09QVElPTmAsIGVzc2VudGlhbGx5IGFsbG93aW5nIHBlci1zb2NrZXQgb3ZlcnJpZGVzIGZvciBFQ04tcmVsYXRlZCBzeXNjdGwgc2V0dGluZ3MuIFRoaXMgcGVyLXNvY2tldCBncmFudWxhcml0eSBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIHBvdGVudGlhbCB0YXJnZXQuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgVENQIHN0YWNrIHZpYSBgc2V0c29ja29wdGAgYW5kIGBnZXRzb2Nrb3B0YCBtYWtlcyBpdCB2ZXJ5IGFjY2Vzc2libGUuIFdlIGhhdmUgdXNlci1sZXZlbCBpbnRlcmFjdGlvbiByaWdodCB0aGVyZSwgYW5kIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IHdlIHdhbnQuCgpTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgaW1wYWN0aW5nIGRvY3VtZW50YXRpb24sIHRoZSBjb3JlIGB0Y3Bfc29ja2Agc3RydWN0dXJlLCBoZWFkZXIgZmlsZXMsIGFuZCB0aGUgY3JpdGljYWwgYGZpbHRlci5jYCAodGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiBmb3IgQlBGIGludGVyYWN0aW9ucyksIGFsb25nIHdpdGggbnVtZXJvdXMgY29yZSBUQ1AgbW9kdWxlczogYHRjcC5jYCwgYHRjcF9pbnB1dC5jYCwgYW5kIGB0Y3Bfb3V0cHV0LmNgLiBUaGlzIGlzIGFsbCBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc28geWVzLCB3aXRob3V0IGEgZG91YnQsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5vdywgdGltZSB0byByZWZpbmUgdGhlIGFwcHJvYWNoLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJ4oCZbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3MgYXJlIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZXNlIGZlYXR1cmVzLiBNeSBpbml0aWFsIGd1ZXNzZXMgYXJlIGBJTkVUYCAob3IgYE5FVGApIC0gdGhhdCBzZWVtcyBsaWtlIGEgZ2l2ZW4sIGFuZCBJIHNob3VsZCBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvS2NvbmZpZ2AgZm9yIHJlbGF0ZWQgVENQIGNvbmZpZ3VyYXRpb25zLiBTaW5jZSB3ZeKAmXJlIGRlYWxpbmcgd2l0aCBgZmlsdGVyLmNgLCBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3IgYEJQRl9TWVNDQUxMYCwgYE5FVGAsIGFuZCBgSU5FVGAgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBzaG91bGQgY2hlY2sgYG5ldC9pcHY0L01ha2VmaWxlYCBvciBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gc2VlIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gYnVpbGQgYHRjcC5jYCwgYHRjcF9pbnB1dC5jYCwgYW5kIGB0Y3Bfb3V0cHV0LmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudCByZXF1aXJlZCBmb3IgdGhlc2UgY2hhbmdlcy4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgaW4gdGhpcyBhcmVhLiBGcm9tIHRoZSBwYXRjaCwgaXQgbG9va3MgbGlrZSBgdGNwX2Vjbl9tb2RlX2VmZihzaylgIGFuZCBgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKWAgYXJlIHdvcnRoIGhpZ2hsaWdodGluZywgYWxvbmcgd2l0aCBgZG9fdGNwX3NldHNvY2tvcHRgIGFuZCBgZG9fdGNwX2dldHNvY2tvcHRgLiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhlc2UgaW4gbW9yZSBkZXB0aCB0byB0YXJnZXQgdGhlbSBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotLip0Y3BcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9NTA9b2JqLSQoQ09ORklHX1RDUF9DT05HX0NVQklDKSAmIzQzOz0gdGNwX2N1YmljLm9cbm5ldC9pcHY0L01ha2VmaWxlOjUxOm9iai0kKENPTkZJR19UQ1BfQ09OR19EQ1RDUCkgJiM0Mzs9IHRjcF9kY3RjcC5vXG5uZXQvaXB2NC9NYWtlZmlsZS01Mi1vYmotJChDT05GSUdfVENQX0NPTkdfV0VTVFdPT0QpICYjNDM7PSB0Y3Bfd2VzdHdvb2Qub1xuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTU0PW9iai0kKENPTkZJR19UQ1BfQ09OR19IWUJMQSkgJiM0Mzs9IHRjcF9oeWJsYS5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1NTpvYmotJChDT05GSUdfVENQX0NPTkdfSFRDUCkgJiM0Mzs9IHRjcF9odGNwLm9cbm5ldC9pcHY0L01ha2VmaWxlLTU2LW9iai0kKENPTkZJR19UQ1BfQ09OR19WRUdBUykgJiM0Mzs9IHRjcF92ZWdhcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgSVB2NCBNYWtlZmlsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIElQdjQgc3RhY2ssIHNvIGxldCYjMzk7cyBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgYG5ldC9pcHY0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBsaWtlbHkgZmluZCB0aGUgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBmb3IgY29tcGlsaW5nIElQdjQtcmVsYXRlZCBtb2R1bGVzIGFuZCB0aGUgY29yZSBJUHY0IHN0YWNrIGl0c2VsZi4gVGhpcyBmaWxlIHdpbGwgdGVsbCBtZSBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyIOKAkyB0aGUgb2JqZWN0IGZpbGVzLCB0aGUgaW5jbHVkZSBwYXRocywgYW5kIGFueSBzcGVjaWZpYyBjb21waWxlciBmbGFncyBiZWluZyB1c2VkLiBJIGV4cGVjdCB0byBzZWUgZGVmaW5pdGlvbnMgZm9yIHZhcmlhYmxlcyBsaWtlIGBvYmotJChDT05GSUdfU09NRVRISU5HKWAgd2hpY2ggd2lsbCBndWlkZSB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiBjZXJ0YWluIGZlYXR1cmVzIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgaXMgY3J1Y2lhbCBmb3IgdHJhY2luZyB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaWRlbnRpZnlpbmcgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJIG1ha2UsIG9yIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBjb250ZXh0IG9mIHNvbWUgb3RoZXIgbW9kdWxlIEkmIzM5O20gbG9va2luZyBhdC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IEkgbmVlZCB0byBzb2x2ZSB0aGUgcHJvYmxlbSBJJiMzOTttIGxvb2tpbmcgYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVCkgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuICAgNzpcdFx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxuICAgODpcdFx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXG4gICA5Olx0XHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcbiAgMTA6XHRcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcbiAgMTE6XHRcdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxuICAxMjpcdFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcbiAgMTM6XHRcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxuICAxNDpcdFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxuICAxNTpcdFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxuICAxNjpcdFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxuICAxNzpcdFx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xuICAxODpcdFxuICAxOTpcdG9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSAmIzQzOz0gaXBfdHVubmVsLm9cbiAgMjA6XHRvYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY0Lm9cbiAgMjE6XHRvYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuICAyMjpcdG9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWJfcnVsZXMub1xuICAyMzpcdG9iai0kKENPTkZJR19JUF9NUk9VVEUpICYjNDM7PSBpcG1yLm9cbiAgMjQ6XHRvYmotJChDT05GSUdfSVBfTVJPVVRFX0NPTU1PTikgJiM0Mzs9IGlwbXJfYmFzZS5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG4gIDI2Olx0Z3JlLXkgOj0gZ3JlX2RlbXV4Lm9cbiAgMjc6XHRmb3UteSA6PSBmb3VfY29yZS5vIGZvdV9ubC5vIGZvdV9icGYub1xuICAyODpcdG9iai0kKENPTkZJR19ORVRfRk9VKSAmIzQzOz0gZm91Lm9cbiAgMjk6XHRvYmotJChDT05GSUdfTkVUX0lQR1JFX0RFTVVYKSAmIzQzOz0gZ3JlLm9cbiAgMzA6XHRvYmotJChDT05GSUdfTkVUX0lQR1JFKSAmIzQzOz0gaXBfZ3JlLm9cbiAgMzE6XHR1ZHBfdHVubmVsLXkgOj0gdWRwX3R1bm5lbF9jb3JlLm8gdWRwX3R1bm5lbF9uaWMub1xuICAzMjpcdG9iai0kKENPTkZJR19ORVRfVURQX1RVTk5FTCkgJiM0Mzs9IHVkcF90dW5uZWwub1xuICAzMzpcdG9iai0kKENPTkZJR19ORVRfSVBWVEkpICYjNDM7PSBpcF92dGkub1xuICAzNDpcdG9iai0kKENPTkZJR19TWU5fQ09PS0lFUykgJiM0Mzs9IHN5bmNvb2tpZXMub1xuICAzNTpcdG9iai0kKENPTkZJR19JTkVUX0FIKSAmIzQzOz0gYWg0Lm9cbiAgMzY6XHRvYmotJChDT05GSUdfSU5FVF9FU1ApICYjNDM7PSBlc3A0Lm9cbiAgMzc6XHRvYmotJChDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRCkgJiM0Mzs9IGVzcDRfb2ZmbG9hZC5vXG4gIDM4Olx0b2JqLSQoQ09ORklHX0lORVRfSVBDT01QKSAmIzQzOz0gaXBjb21wLm9cbiAgMzk6XHRvYmotJChDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCkgJiM0Mzs9IHhmcm00X3R1bm5lbC5vXG4gIDQwOlx0b2JqLSQoQ09ORklHX0lORVRfVFVOTkVMKSAmIzQzOz0gdHVubmVsNC5vXG4gIDQxOlx0b2JqLSQoQ09ORklHX0lQX1BOUCkgJiM0Mzs9IGlwY29uZmlnLm9cbiAgNDI6XHRvYmotJChDT05GSUdfTkVURklMVEVSKVx0JiM0Mzs9IG5ldGZpbHRlci5vIG5ldGZpbHRlci9cbiAgNDM6XHRvYmotJChDT05GSUdfSU5FVF9ESUFHKSAmIzQzOz0gaW5ldF9kaWFnLm9cbiAgNDQ6XHRvYmotJChDT05GSUdfSU5FVF9UQ1BfRElBRykgJiM0Mzs9IHRjcF9kaWFnLm9cbiAgNDU6XHRvYmotJChDT05GSUdfSU5FVF9VRFBfRElBRykgJiM0Mzs9IHVkcF9kaWFnLm9cbiAgNDY6XHRvYmotJChDT05GSUdfSU5FVF9SQVdfRElBRykgJiM0Mzs9IHJhd19kaWFnLm9cbiAgNDc6XHRvYmotJChDT05GSUdfVENQX0NPTkdfQkJSKSAmIzQzOz0gdGNwX2Jici5vXG4gIDQ4Olx0b2JqLSQoQ09ORklHX1RDUF9DT05HX0JJQykgJiM0Mzs9IHRjcF9iaWMub1xuICA0OTpcdG9iai0kKENPTkZJR19UQ1BfQ09OR19DREcpICYjNDM7PSB0Y3BfY2RnLm9cbiAgNTA6XHRvYmotJChDT05GSUdfVENQX0NPTkdfQ1VCSUMpICYjNDM7PSB0Y3BfY3ViaWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTcyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgU3RhY2sgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGBuZXQvaXB2NGAgY29tcG9uZW50IGlzIGJlaW5nIGJ1aWx0IHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCBmcmFtZXdvcmsuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgbmV0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgdGhlIG9yY2hlc3RyYXRvciBvZiBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIGZvciB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIGl0IGFuZCBzZWUgaG93IGBpcHY0YCBpcyBzcGVjaWZpY2FsbHkgaW5jb3Jwb3JhdGVkLCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IGBuZXQvTWFrZWZpbGVgIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbm5ldC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG5uZXQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQzMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQ29kZSBDb25maWd1cmF0aW9uIFRob3VnaHRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZGVwZW5kZW5jeSBpc3N1ZS4gSXQgbG9va3MgbGlrZSBJIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX0lORVRgIGVuYWJsZWQgaWYgSSYjMzk7bSBnb2luZyB0byB0b3VjaCBhbnl0aGluZyBpbiBgbmV0L2lwdjQvYC4gVGhhdCYjMzk7cyBub3Qgc3VycHJpc2luZywgYnV0IGl0JiMzOTtzIGdvb2QgdG8gbWFrZSBhIG5vdGUgb2YgaXQgcmlnaHQgYXdheS4gTW9yZSBzcGVjaWZpY2FsbHkgdGhvdWdoLCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCB0aGUgYHNvbF90Y3Bfc29ja29wdGAgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSByZWNhbGwgdGhhdCBvbmUgdXNlcyBhIEJQRiBzb2Nrb3B0IGhlbHBlciBvZiBzb3J0cy4gU28sIGlmIEkmIzM5O20gZ29pbmcgdG8gd29yayB3aXRoIHRoYXQsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhbHNvIGVuYWJsZWQuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gdmVyaWZ5IHRob3NlIGRlcGVuZGVuY2llcyBiZWZvcmUgcHJvY2VlZGluZy4gSSYjMzk7bSBnb2luZyB0byBnbyBzdHJhaWdodCB0byBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29sX3RjcF9zb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NTU0OT1zdGF0aWMgaW50IGJwZl9zb2xfdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01NTk5LVxubmV0L2NvcmUvZmlsdGVyLmM6NTYwMDpzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdF9jb25nZXN0aW9uKHN0cnVjdCBzb2NrICpzaywgY2hhciAqb3B0dmFsLFxubmV0L2NvcmUvZmlsdGVyLmMtNTYwMS1cdFx0XHRcdCAgICAgIGludCAqb3B0bGVuLCBib29sIGdldG9wdClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01NjUyLVxubmV0L2NvcmUvZmlsdGVyLmM6NTY1MzpzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxubmV0L2NvcmUvZmlsdGVyLmMtNTY1NC1cdFx0XHQgICBjaGFyICpvcHR2YWwsIGludCAqb3B0bGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTU2NzgtXHRjYXNlIFRDUF9DT05HRVNUSU9OOlxubmV0L2NvcmUvZmlsdGVyLmM6NTY3OTpcdFx0cmV0dXJuIHNvbF90Y3Bfc29ja29wdF9jb25nZXN0aW9uKHNrLCBvcHR2YWwsIG9wdGxlbiwgZ2V0b3B0KTtcbm5ldC9jb3JlL2ZpbHRlci5jLTU2ODAtXHRjYXNlIFRDUF9TQVZFRF9TWU46XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NTc3OT1zdGF0aWMgaW50IF9fYnBmX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTU3OTEtXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUClcbm5ldC9jb3JlL2ZpbHRlci5jOjU3OTI6XHRcdHJldHVybiBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCBmYWxzZSk7XG5uZXQvY29yZS9maWx0ZXIuYy01NzkzLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTU4MTA9c3RhdGljIGludCBfX2JwZl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01ODIyLVx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2IGxldmVsID09IFNPTF9UQ1ApXG5uZXQvY29yZS9maWx0ZXIuYzo1ODIzOlx0XHRlcnIgPSBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCB0cnVlKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTU4MjQtXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX0lQKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI3NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQL0lQIGFuZCBCUEYgSW50ZXJhY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdCBwbGF5IGhlcmU6IGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBPciwgcG90ZW50aWFsbHksIGp1c3QgYENPTkZJR19JTkVUYCBtaWdodCBiZSBlbm91Z2ggY29udGV4dCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgoKTm93LCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBhbmFseXNpcyBsaWVzIGluIHRoZSBmdW5jdGlvbiBjYWxscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCBtb2RpZmllcyAob3IgaXMgbW9kaWZpZWQgYnkpIHRoZSBsb2dpYy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgZG9fdGNwX3NldHNvY2tvcHRgIGFuZCBgZG9fdGNwX2dldHNvY2tvcHRgLCB3aGljaCBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGZvciBnZXR0aW5nIGFuZCBzZXR0aW5nIHNvY2tldCBvcHRpb25zIGFuZCBhcmUgbG9jYXRlZCBpbiBgbmV0L2lwdjQvdGNwLmNgLiBJdCYjMzk7cyBwb3NzaWJsZSBJJiMzOTtsbCBzZWUgc29tZSBuYW1pbmcgdmFyaWF0aW9ucyBvbiB0aGVtIGJ1dCB0aGUgZnVuY3Rpb25hbGl0eSBpcyB0aGUga2V5IGhlcmUuCgpUaGVuIHdlIGhhdmUgYHRjcF9lY25fY3JlYXRlX3JlcXVlc3RgLCBgdGNwX3N5bl9vcHRpb25zYCwgYHRjcF9zeW5hY2tfb3B0aW9uc2AsIGFuZCBgdGNwX2VzdGFibGlzaGVkX29wdGlvbnNgLCBhbGwgaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYCBvciBgbmV0L2lwdjQvdGNwX291dHB1dC5jYC4gVGhvc2UgdG91Y2ggb24gdGhlIFRDUCBFQ04sIFNZTiwgYW5kIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24gb3B0aW9ucy4KCkZpbmFsbHksIGBzb2xfdGNwX3NvY2tvcHRgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBzaW5jZSBpdCYjMzk7cyBpbnZvbHZlZCBpbiBoYW5kbGluZyBzb2NrZXQgb3B0aW9ucyBhdCB0aGUgc29ja2V0IGxldmVsLgoKVGhlIGxhc3Qgb25lIHRvIGxvb2sgYXQgaXMgYHRjcF9lY25fc2VuZF9zeW5gLCB3aGljaCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gaW4gYGluY2x1ZGUvbmV0L3RjcF9lY24uaGAuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgKnRoaXMqIGlzIGFjdHVhbGx5IHVzZWQgdG8gc2VlIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGl0LiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSBvZiB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9lY25fc2VuZF9zeW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vdXRwdXQuYz0zODk1PWludCB0Y3Bfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTIzLVx0XHRUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIHw9IFRDUEhEUl9BQ0s7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzkyNDpcdFx0dGNwX2Vjbl9zZW5kX3N5bmFjayhzaywgc2tiKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTI1LVx0fVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00MzA2PWludCB0Y3BfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzODUtXHR0Y3BfY29ubmVjdF9xdWV1ZV9za2Ioc2ssIGJ1ZmYpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzODY6XHR0Y3BfZWNuX3NlbmRfc3luKHNrLCBidWZmKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00Mzg3LVx0dGNwX3JidHJlZV9pbnNlcnQoXHUwMDI2c2stXHUwMDNldGNwX3J0eF9xdWV1ZSwgYnVmZik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjQ3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgVENQIEVDTiBTeW5jaHJvbml6YXRpb24gU2VxdWVuY2UqKgoKT2theSwgc28gYHRjcF9jb25uZWN0YCB0cmlnZ2VycyBgdGNwX2Vjbl9zZW5kX3N5bmAuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHBhdGgg4oCTIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcHJvY2VzcyBpbml0aWF0ZXMgdGhlIEVDTi1zcGVjaWZpYyBTWU4gZmxhZy4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBJdOKAmXMgbm90IGp1c3QgYWJvdXQgKndoYXQqIGhhcHBlbnMsIGJ1dCAqd2h5Ki4gU28sIEkgd2FudCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIHdobyBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdGAsIHdoaWNoLCBJJiMzOTttIGd1ZXNzaW5nLCBzZXRzIHVwIHRoZSBwcmVjb25kaXRpb25zIGZvciBgdGNwX2Vjbl9zZW5kX3N5bmAgdG8gd29yaywgb3IgcG9zc2libHkgZXZlbiB0aGUgZmxhZ3MgdGhlbXNlbHZlcy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGdyYXBoIGhlcmUgd2lsbCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBFQ04gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBUQ1Agc3RhY2ssIHBhcnRpY3VsYXJseSBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBjb25uZWN0aW9uIHNldHVwLiBUaGlzIHdpbGwgaGVscCBtZSBzZWUgaWYgdGhlIEVDTiBjb2RlIGlzIGludGVncmF0ZWQgY2xlYW5seSBvciBpZiB0aGVyZSBhcmUgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIExldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2Vjbl9jcmVhdGVfcmVxdWVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9NzQyMz1zdGF0aWMgaW5saW5lIHZvaWQgcHJfZHJvcF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBfX3UxNiBwb3J0LCBpbnQgZmFtaWx5KVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc0NTMtICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDU0OnN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQ1NS1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzYxOT1pbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzM2LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzczNzpcdHRjcF9lY25fY3JlYXRlX3JlcXVlc3QocmVxLCBza2IsIHNrLCBkc3QpO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNzczOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIGludG8gVENQIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhlIFRDUCBjb25uZWN0aW9uIHByb2Nlc3MsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgdGNwX2Nvbm5fcmVxdWVzdGAgdHJpZ2dlcnMgYHRjcF9lY25fY3JlYXRlX3JlcXVlc3RgLiBJIG5lZWQgdG8gcmVtZW1iZXIgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZSB3aXRoIEVDTiDigJMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggcmV2aWV3aW5nLiBUaGUgY29ubmVjdGlvbiByZXF1ZXN0IGlzIHRoZSBzdGFydGluZyBwb2ludCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW50ZXJhY3Rpb24uCgpUaGVuLCBteSBtaW5kIHdhbmRlcnMgdG93YXJkcyB0aGUgU1lOIGV4Y2hhbmdlLCBhbmQgSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IG9wdGlvbnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkaWZmZXJlbnQgVENQIG9wdGlvbnMgYXJlIG5lZ290aWF0ZWQgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgdGNwX3N5bl9vcHRpb25zYCwgYHRjcF9zeW5hY2tfb3B0aW9uc2AsIGFuZCBgdGNwX2VzdGFibGlzaGVkX29wdGlvbnNgIGFyZSBjYWxsZWQuIFRoaXMgd291bGQgcHJvdmlkZSBtZSBpbnNpZ2h0IGludG8gaG93IHRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgZW50aXJlIGNvbm5lY3Rpb24mIzM5O3MgbGlmZWN5Y2xlLiBVbmRlcnN0YW5kaW5nIHRoZSAmIzM0O3dobyYjMzQ7IGFuZCAmIzM0O3doeSYjMzQ7IG9mIHRob3NlIGNhbGxzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgVENQIHN0YWNrJiMzOTtzIGxvZ2ljLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCB0cmFjZSB0aG9zZSBjYWxscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwXyhzeW58c3luYWNrfGVzdGFibGlzaGVkKV9vcHRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYz0xMzg0PXN0YXRpYyBpbnQgdGNwX2FvX3BhcnNlX2NyeXB0byhjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqY21kLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTEzOTMtXHQgKlx0XHRcdFx0XHQtIHdzY2FsZSksXG5uZXQvaXB2NC90Y3BfYW8uYzoxMzk0Olx0ICogc2VlIHRjcF9zeW5fb3B0aW9ucygpLCB0Y3Bfc3luYWNrX29wdGlvbnMoKSwgY29tbWl0IDMzYWQ3OThjOTI0Yi5cbm5ldC9pcHY0L3RjcF9hby5jLTEzOTUtXHQgKlxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTEzOTktXHQgKlx0XHRcdC0gMiAqIFRDUE9MRU5fU0FDS19QRVJCTE9DSykgPSA4IChtYWNsZW4gPSA0KSxcbm5ldC9pcHY0L3RjcF9hby5jOjE0MDA6XHQgKiBzZWUgdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoKS5cbm5ldC9pcHY0L3RjcF9hby5jLTE0MDEtXHQgKlxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz04NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc2V0X29wdGlvbl9jb25kKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODcyLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg3MzpcdFx0aWYgKG1wdGNwX3N5bmFja19vcHRpb25zKHJlcSwgXHUwMDI2c2l6ZSwgXHUwMDI2b3B0cy1cdTAwM2VtcHRjcCkpIHtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NzQtXHRcdFx0aWYgKCpyZW1haW5pbmcgXHUwMDNlPSBzaXplKSB7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4MS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4ODI6c3RhdGljIHUzMiB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcoc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04ODMte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz05MDM9c3RhdGljIGludCB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsIGludCByZXF1aXJlZCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTEyLVx0aWYgKG9wdHMtXHUwMDNldXNlX3N5bmFja19lY25fYnl0ZXMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTEzOlx0XHRtYXhfY29tYmluZV9zYXZpbmcgPSB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcob3B0cyk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTE0LVx0ZWxzZVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NTgtICovXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTU5OnN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NjAtXHRcdFx0XHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDMxLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwMzI6XHRcdGlmIChtcHRjcF9zeW5fb3B0aW9ucyhzaywgc2tiLCBcdTAwMjZzaXplLCBcdTAwMjZvcHRzLVx1MDAzZW1wdGNwKSkge1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwMzMtXHRcdFx0aWYgKHJlbWFpbmluZyBcdTAwM2U9IHNpemUpIHtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2MC0vKiBTZXQgdXAgVENQIG9wdGlvbnMgZm9yIFNZTi1BQ0tzLiAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwNjE6c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwNjItXHRcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTUwLSAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjExNTE6c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE1Mi1cdFx0XHRcdFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5MS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTkyOlx0XHRvcHRfc2l6ZSA9IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgcmVtYWluaW5nLCBoYXNfdHMsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5My1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNm9wdHMtXHUwMDNlbXB0Y3ApO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xNTM2PXN0YXRpYyBpbnQgX190Y3BfdHJhbnNtaXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU3OS1cdGlmICh1bmxpa2VseSh0Y2ItXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfU1lOKSkge1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1ODA6XHRcdHRjcF9vcHRpb25zX3NpemUgPSB0Y3Bfc3luX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgxLVx0fSBlbHNlIHtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNTgyOlx0XHR0Y3Bfb3B0aW9uc19zaXplID0gdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgzLVx0XHQvKiBGb3JjZSBhIFBTSCBmbGFnIG9uIGFsbCAoR1NPKSBwYWNrZXRzIHRvIGV4cGVkaXRlIEdSTyBmbHVzaFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMTAzPXVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMTE5LVx0dGNwX2dldF9jdXJyZW50X2tleShzaywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMTIwOlx0aGVhZGVyX2xlbiA9IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHNrLCBOVUxMLCBcdTAwMjZvcHRzLCBcdTAwMjZrZXkpICYjNDM7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjEyMS1cdFx0ICAgICBzaXplb2Yoc3RydWN0IHRjcGhkcik7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM5Mzk9c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDAzNi1cdFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgPSBUQ1BIRFJfU1lOIHwgVENQSERSX0FDSztcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MDM3Olx0dGNwX2hlYWRlcl9zaXplID0gdGNwX3N5bmFja19vcHRpb25zKHNrLCByZXEsIG1zcywgc2tiLCBcdTAwMjZvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQwMzgtXHRcdFx0XHRcdCAgICAgXHUwMDI2a2V5LCBmb2MsIHN5bmFja190eXBlLCBzeW5fc2tiKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9NDIyPXZvaWQgbXB0Y3BfZ2V0X29wdGlvbnMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2My1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NDY0OmJvb2wgbXB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21wdGNwL29wdGlvbnMuYy00NjUtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgKnNpemUsIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2OS1cdC8qIHdlIHdpbGwgdXNlIHNuZF9pc24gdG8gZGV0ZWN0IGZpcnN0IHBrdCBbcmVddHJhbnNtaXNzaW9uXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjQ3MDpcdCAqIGluIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoKVxubmV0L21wdGNwL29wdGlvbnMuYy00NzEtXHQgKi9cbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTUwMz1zdGF0aWMgdm9pZCBjbGVhcl8zcmRhY2tfcmV0cmFuc21pc3Npb24oc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNTExLVxubmV0L21wdGNwL29wdGlvbnMuYzo1MTI6c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTUxMy1cdFx0XHRcdFx0IGJvb2wgc25kX2RhdGFfZmluX2VuYWJsZSwgaW50ICpzaXplLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNTI1LVx0ICogdGVsbCB0aGUgY2FsbGVyIHRvIGRlZmVyIHRoZSBlc3RpbWF0ZSB0b1xubmV0L21wdGNwL29wdGlvbnMuYzo1MjY6XHQgKiBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcygpLCB3aGljaCB3aWxsIHJlc2VydmUgZW5vdWdoIHNwYWNlLlxubmV0L21wdGNwL29wdGlvbnMuYy01MjctXHQgKi9cbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTU5Nj1zdGF0aWMgdm9pZCBtcHRjcF93cml0ZV9kYXRhX2ZpbihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNjIzLVxubmV0L21wdGNwL29wdGlvbnMuYzo2MjQ6c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21wdGNwL29wdGlvbnMuYy02MjUtXHRcdFx0XHRcdCAgYm9vbCBzbmRfZGF0YV9maW5fZW5hYmxlLCBpbnQgKnNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz02OTI9c3RhdGljIHU2NCBhZGRfYWRkcl9nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5Mixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTcxOC1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NzE5OnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfYWRkX2FkZHIoc3RydWN0IHNvY2sgKnNrLFxubmV0L21wdGNwL29wdGlvbnMuYy03MjAtXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy03NTktXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjc2MDpzdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX3JtX2FkZHIoc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemUsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTc2MS1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZyxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTc4MS1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NzgyOnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXBfcHJpbyhzdHJ1Y3Qgc29jayAqc2ssIGludCAqc2l6ZSxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNzgzLVx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtODA2LVxubmV0L21wdGNwL29wdGlvbnMuYzo4MDc6c3RhdGljIG5vaW5saW5lIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19yc3Qoc3RydWN0IHNvY2sgKnNrLFxubmV0L21wdGNwL29wdGlvbnMuYy04MDgtXHRcdFx0XHRcdFx0ICAgaW50ICpzaXplLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtODI1LVxubmV0L21wdGNwL29wdGlvbnMuYzo4MjY6c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemUsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTgyNy1cdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgcmVtYWluaW5nLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtODQ3LVxubmV0L21wdGNwL29wdGlvbnMuYzo4NDg6c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcF9mYWlsKHN0cnVjdCBzb2NrICpzaywgaW50ICpzaXplLFxubmV0L21wdGNwL29wdGlvbnMuYy04NDktXHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCByZW1haW5pbmcsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy04NjktXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjg3MDppbnQgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg3MS1cdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLCBib29sIGhhc190cyxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg4OS1cdGlmICh1bmxpa2VseShza2IgXHUwMDI2XHUwMDI2IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgXHUwMDI2IFRDUEhEUl9SU1QpKSB7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjg5MDpcdFx0aWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZmFzdGNsb3NlKHNrLCBcdTAwMjZvcHRfc2l6ZSwgcmVtYWluaW5nLCBvcHRzKSB8fFxubmV0L21wdGNwL29wdGlvbnMuYzo4OTE6XHRcdCAgICBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wX2ZhaWwoc2ssIFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsIG9wdHMpKSB7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg5Mi1cdFx0XHR0b3RhbF9zaXplICYjNDM7PSBvcHRfc2l6ZTtcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg5NS1cdFx0LyogTVBfUlNUIGNhbiBiZSB1c2VkIHdpdGggTVBfRkFTVENMT1NFIGFuZCBNUF9GQUlMIGlmIHRoZXJlIGlzIHJvb20gKi9cbm5ldC9tcHRjcC9vcHRpb25zLmM6ODk2Olx0XHRpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19yc3Qoc2ssIFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsIG9wdHMpKSB7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg5Ny1cdFx0XHR0b3RhbF9zaXplICYjNDM7PSBvcHRfc2l6ZTtcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkwMy1cdHNuZF9kYXRhX2ZpbiA9IG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKTtcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTA0Olx0aWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc2ssIHNrYiwgc25kX2RhdGFfZmluLCBcdTAwMjZvcHRfc2l6ZSwgb3B0cykpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkwNS1cdFx0cmV0ID0gdHJ1ZTtcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTA2Olx0ZWxzZSBpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3Moc2ssIHNrYiwgc25kX2RhdGFfZmluLCBcdTAwMjZvcHRfc2l6ZSwgb3B0cykpIHtcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTA3LVx0XHRpbnQgbXBfZmFpbF9zaXplO1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtOTA5LVx0XHRyZXQgPSB0cnVlO1xubmV0L21wdGNwL29wdGlvbnMuYzo5MTA6XHRcdGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wX2ZhaWwoc2ssIFx1MDAyNm1wX2ZhaWxfc2l6ZSxcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTExLVx0XHRcdFx0XHRcdCAgICAgIHJlbWFpbmluZyAtIG9wdF9zaXplLCBvcHRzKSkge1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtOTI1LVx0cmVtYWluaW5nIC09IG9wdF9zaXplO1xubmV0L21wdGNwL29wdGlvbnMuYzo5MjY6XHRpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19hZGRfYWRkcihzaywgc2tiLCBcdTAwMjZvcHRfc2l6ZSwgcmVtYWluaW5nLFxubmV0L21wdGNwL29wdGlvbnMuYy05MjctXHRcdFx0XHRcdCAgICAgICBoYXNfdHMsIG9wdHMpKSB7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy05MzAtXHRcdHJldCA9IHRydWU7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjkzMTpcdH0gZWxzZSBpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19ybV9hZGRyKHNrLCBcdTAwMjZvcHRfc2l6ZSwgcmVtYWluaW5nLCBvcHRzKSkge1xubmV0L21wdGNwL29wdGlvbnMuYy05MzItXHRcdHRvdGFsX3NpemUgJiM0Mzs9IG9wdF9zaXplO1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtOTM2LVxubmV0L21wdGNwL29wdGlvbnMuYzo5Mzc6XHRpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcF9wcmlvKHNrLCBcdTAwMjZvcHRfc2l6ZSwgcmVtYWluaW5nLCBvcHRzKSkge1xubmV0L21wdGNwL29wdGlvbnMuYy05MzgtXHRcdHRvdGFsX3NpemUgJiM0Mzs9IG9wdF9zaXplO1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtOTQ1LVxubmV0L21wdGNwL29wdGlvbnMuYzo5NDY6Ym9vbCBtcHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIHVuc2lnbmVkIGludCAqc2l6ZSxcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTQ3LVx0XHRcdCAgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTQ3MD12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQ5NS1cdCAqXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE0OTY6XHQgKiBUaGUgc2FtZSBhcHBsaWVzIGluIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoKSBmdW5jdGlvbi5cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQ5Ny1cdCAqL1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTUzMi1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTUzMzpcdFx0XHQvKiBEU1Mgb3B0aW9uIGlzIHNldCBvbmx5IGJ5IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE1MzQtXHRcdFx0ICogdGhlIGNhbGxlciBpcyBfX3RjcF90cmFuc21pdF9za2IoKSBhbmQgc3NrIGlzIGFsd2F5c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc1NAoJCQkJCQkJb3V0cHV0OiA1NwoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBUQ1AgU29ja2V0IE9wdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVENQIHNvY2tldCBvcHRpb25zIGFyZSBiZWluZyBzZXQgYW5kIHJldHJpZXZlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgZG9fdGNwX3NldHNvY2tvcHRgIGFuZCBgZG9fdGNwX2dldHNvY2tvcHRgLiBJIHJlbWVtYmVyIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBrZXkgaW4gdGhlIGBuZXQvaXB2NC90Y3AuY2AgZmlsZSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBzdGFydC4gRmlyc3QsIGEgcXVpY2sgY2hlY2sgb24gYGRvX3RjcF9zZXRzb2Nrb3B0YOKApiBBaCwgaXQmIzM5O3Mgc3RhdGljLiBUaGF0IG1lYW5zIGl0JiMzOTtzIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBmaWxlLiBOb3csIHRvIHRyYWNlIGl0cyB1c2FnZSwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgdGNwX3NldHNvY2tvcHRgIGNhbGxzIHRoaXMuIE5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGB0Y3Bfc2V0c29ja29wdGAgaXMgc3RhdGljIG9yIGV4cG9ydGVkLiBUaGF0IHdpbGwgdGVsbCBtZSBob3cgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcy4gSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyh0Y3Bfc2V0c29ja29wdHxkb190Y3Bfc2V0c29ja29wdHx0Y3BfZ2V0c29ja29wdHxkb190Y3BfZ2V0c29ja29wdCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0zODIzPWludCB0Y3Bfc29ja19zZXRfbWF4c2VnKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbi0tXG5uZXQvaXB2NC90Y3AuYy0zODM4LSAqL1xubmV0L2lwdjQvdGNwLmM6MzgzOTppbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L2lwdjQvdGNwLmMtMzg0MC1cdFx0ICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3AuYy00MTg1LVxubmV0L2lwdjQvdGNwLmM6NDE4NjppbnQgdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L2lwdjQvdGNwLmMtNDE4Ny1cdFx0ICAgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3AuYy00MTk0LVx0XHRcdFx0XHRcdFx0XHRvcHR2YWwsIG9wdGxlbik7XG5uZXQvaXB2NC90Y3AuYzo0MTk1Olx0cmV0dXJuIGRvX3RjcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvdGNwLmMtNDE5Ni19XG4tLVxubmV0L2lwdjQvdGNwLmM9NDQyMz1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dldF90aW1lc3RhbXBpbmdfb3B0X3N0YXRzKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3AuYy00NDk0LVxubmV0L2lwdjQvdGNwLmM6NDQ5NTppbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG5uZXQvaXB2NC90Y3AuYy00NDk2LVx0XHQgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3AuYz00ODc2PWJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxubmV0L2lwdjQvdGNwLmMtNDg3Ny17XG5uZXQvaXB2NC90Y3AuYzo0ODc4Olx0LyogVENQIGRvX3RjcF9nZXRzb2Nrb3B0IGhhcyBvcHRpbWl6ZWQgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvblxubmV0L2lwdjQvdGNwLmMtNDg3OS1cdCAqIHRvIGF2b2lkIGV4dHJhIHNvY2tldCBsb2NrIGZvciBUQ1BfWkVST0NPUFlfUkVDRUlWRS5cbi0tXG5uZXQvaXB2NC90Y3AuYy00ODg2LVxubmV0L2lwdjQvdGNwLmM6NDg4NzppbnQgdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxubmV0L2lwdjQvdGNwLmMtNDg4OC1cdFx0ICAgaW50IF9fdXNlciAqb3B0bGVuKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ4OTUtXHRcdFx0XHRcdFx0XHRcdG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY0L3RjcC5jOjQ4OTY6XHRyZXR1cm4gZG9fdGNwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBVU0VSX1NPQ0tQVFIob3B0dmFsKSxcbm5ldC9pcHY0L3RjcC5jLTQ4OTctXHRcdFx0XHQgVVNFUl9TT0NLUFRSKG9wdGxlbikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc3MgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIFNvY2tldCBPcHRpb25zIGluIHRoZSBMaW51eCBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBzb21lIFRDUCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9ucyBgZG9fdGNwX3NldHNvY2tvcHRgIGFuZCBgZG9fdGNwX2dldHNvY2tvcHRgLiBUaGV5JiMzOTtyZSBib3RoIGRlZmluZWQgaW4gYG5ldC9pcHY0L3RjcC5jYCwgYW5kIGltcG9ydGFudGx5LCB0aGV5JiMzOTtyZSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgbWVhbmluZyB0aGV5JiMzOTtyZSBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KCk5leHQsIEkgd2FudGVkIHRvIHVuZGVyc3RhbmQgaG93IGEgVENQIHNvY2tldCBpcyBpbml0aWFsaXplZCwgc28gSSBjaGVja2VkIGB0Y3BfaW5pdF9zb2NrYCBpbiB0aGUgc2FtZSBmaWxlLiBJdCYjMzk7cyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGlzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHdvdWxkIGxpa2VseSBiZSBjYWxsZWQgZnJvbSBhIHJhbmdlIG9mIHBsYWNlcy4KCk5vdywgSSBzd2l0Y2hlZCBnZWFycyBzbGlnaHRseSBhbmQgZXhhbWluZWQgYSBmdW5jdGlvbiByZWxhdGVkIHRvIEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uIChFQ04pOiBgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdGAgd2l0aGluIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEFoLCB0aGlzIG9uZSYjMzk7cyAqc3RhdGljKi4gT2theSwgc28gaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgYHRjcF9pbnB1dC5jYCBmaWxlLiBJdHMgbm9uLXN0YXRpYyBjYWxsZXIgaXMgYHRjcF9jb25uX3JlcXVlc3RgLCBzbyBJIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvZGUuCgpGaW5hbGx5LCBJJiMzOTttIHNoaWZ0aW5nIG15IHBlcnNwZWN0aXZlIHRvIHRoZSBvdXRwdXQgc2lkZSBvZiBUQ1AsIGluIGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgLCB0byBpbnZlc3RpZ2F0ZSBob3cgU1lOLCBTWU4tQUNLLCBhbmQgZXN0YWJsaXNoZWQgVENQIG9wdGlvbnMgYXJlIGhhbmRsZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGF0dHJpYnV0ZXMgb2YgYHRjcF9zeW5fb3B0aW9uc2AsIGB0Y3Bfc3luYWNrX29wdGlvbnNgLCBhbmQgYHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYC4gQXJlIHRoZXNlIHN0YXRpYyBvciBub24tc3RhdGljPyBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIHNjb3BlIGFuZCBob3cgdGhleSBhcmUgdXNlZCB3aXRoaW4gdGhlIFRDUCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KHRjcF9zeW5fb3B0aW9uc3x0Y3Bfc3luYWNrX29wdGlvbnN8dGNwX2VzdGFibGlzaGVkX29wdGlvbnMpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vdXRwdXQuYz04NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc2V0X29wdGlvbl9jb25kKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODcyLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg3MzpcdFx0aWYgKG1wdGNwX3N5bmFja19vcHRpb25zKHJlcSwgXHUwMDI2c2l6ZSwgXHUwMDI2b3B0cy1cdTAwM2VtcHRjcCkpIHtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NzQtXHRcdFx0aWYgKCpyZW1haW5pbmcgXHUwMDNlPSBzaXplKSB7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4MS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4ODI6c3RhdGljIHUzMiB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcoc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04ODMte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz05MDM9c3RhdGljIGludCB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsIGludCByZXF1aXJlZCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTEyLVx0aWYgKG9wdHMtXHUwMDNldXNlX3N5bmFja19lY25fYnl0ZXMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTEzOlx0XHRtYXhfY29tYmluZV9zYXZpbmcgPSB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcob3B0cyk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTE0LVx0ZWxzZVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NTgtICovXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTU5OnN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NjAtXHRcdFx0XHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDMxLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwMzI6XHRcdGlmIChtcHRjcF9zeW5fb3B0aW9ucyhzaywgc2tiLCBcdTAwMjZzaXplLCBcdTAwMjZvcHRzLVx1MDAzZW1wdGNwKSkge1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwMzMtXHRcdFx0aWYgKHJlbWFpbmluZyBcdTAwM2U9IHNpemUpIHtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2MC0vKiBTZXQgdXAgVENQIG9wdGlvbnMgZm9yIFNZTi1BQ0tzLiAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwNjE6c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwNjItXHRcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTUwLSAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjExNTE6c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE1Mi1cdFx0XHRcdFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5MS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTkyOlx0XHRvcHRfc2l6ZSA9IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgcmVtYWluaW5nLCBoYXNfdHMsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5My1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNm9wdHMtXHUwMDNlbXB0Y3ApO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xNTM2PXN0YXRpYyBpbnQgX190Y3BfdHJhbnNtaXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU3OS1cdGlmICh1bmxpa2VseSh0Y2ItXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfU1lOKSkge1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1ODA6XHRcdHRjcF9vcHRpb25zX3NpemUgPSB0Y3Bfc3luX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgxLVx0fSBlbHNlIHtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNTgyOlx0XHR0Y3Bfb3B0aW9uc19zaXplID0gdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgzLVx0XHQvKiBGb3JjZSBhIFBTSCBmbGFnIG9uIGFsbCAoR1NPKSBwYWNrZXRzIHRvIGV4cGVkaXRlIEdSTyBmbHVzaFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMTAzPXVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMTE5LVx0dGNwX2dldF9jdXJyZW50X2tleShzaywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMTIwOlx0aGVhZGVyX2xlbiA9IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHNrLCBOVUxMLCBcdTAwMjZvcHRzLCBcdTAwMjZrZXkpICYjNDM7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjEyMS1cdFx0ICAgICBzaXplb2Yoc3RydWN0IHRjcGhkcik7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM5Mzk9c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDAzNi1cdFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgPSBUQ1BIRFJfU1lOIHwgVENQSERSX0FDSztcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MDM3Olx0dGNwX2hlYWRlcl9zaXplID0gdGNwX3N5bmFja19vcHRpb25zKHNrLCByZXEsIG1zcywgc2tiLCBcdTAwMjZvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQwMzgtXHRcdFx0XHRcdCAgICAgXHUwMDI2a2V5LCBmb2MsIHN5bmFja190eXBlLCBzeW5fc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYzMgoJCQkJCQkJb3V0cHV0OiAxNzEKCQkJCQkJCXRob3VnaHRzOiA0NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgRUNOIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIGNsZWFyIHRyYWNlIG9mIHRoZSBuZXcgRUNOIGxvZ2ljIHdlYXZpbmcgaXRzIHdheSB0aHJvdWdoIHRoZSBUQ1Agc3RhY2suIGB0Y3BfbWFrZV9zeW5hY2tgIGNhbGxzIGB0Y3Bfc3luYWNrX29wdGlvbnNgLCBhbmQgYHRjcF9jdXJyZW50X21zc2AgY2FsbHMgYHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYC4gV2UmIzM5O3ZlIGdvdCBgX190Y3BfdHJhbnNtaXRfc2tiYCBwdWxsaW5nIGluIGJvdGggYHRjcF9zeW5fb3B0aW9uc2AgYW5kIGB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AuIEZ1cnRoZXJtb3JlLCBgdGNwX2Nvbm5fcmVxdWVzdGAgbm93IHV0aWxpemVzIGB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gd2UgaGF2ZSB0aGUgYGRvX3RjcF9zZXRzb2Nrb3B0YCBhbmQgYGRvX3RjcF9nZXRzb2Nrb3B0YCBmdW5jdGlvbnMgZGlyZWN0bHkgaGFuZGxpbmcgc29ja2V0IG9wdGlvbiBpbnRlcmFjdGlvbnMuIEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGB0Y3BfaW5pdF9zb2NrYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgaW50cm9kdWNlZCByZWxhdGVkIHRvIEVDTi4gSSYjMzk7bGwgZmxhZyBgdGNwX3NldHNvY2tvcHRgLCBgdGNwX2dldHNvY2tvcHRgLCBgZG9fdGNwX3NldHNvY2tvcHRgLCBgZG9fdGNwX2dldHNvY2tvcHRgLCBgdGNwX21ha2Vfc3luYWNrYCwgYW5kIGB0Y3BfY29ubl9yZXF1ZXN0YCBhcyBGb2N1c1N5bWJvbHMuIEFyZSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zICp1YmlxdWl0b3VzKiB3aXRoaW4gdGhlIGNvZGU/IFNwZWNpZmljYWxseSwgYGRvX3RjcF9zZXRzb2Nrb3B0YCwgYGRvX3RjcF9nZXRzb2Nrb3B0YCwgYHRjcF9tYWtlX3N5bmFja2AsIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdGAgYXJlIGRlZmluaXRlbHkgbW9yZSBzcGVjaWZpYyB0byB0aGUgRUNOIGltcGxlbWVudGF0aW9uIGxvZ2ljIHRoYW4gc29tZSBvZiB0aGUgb3RoZXIgZ2VuZXJpYyBmdW5jdGlvbnMuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBJTkVUYCBpcyB0aGUgZm91bmRhdGlvbmFsIHJlcXVpcmVtZW50LiBXZSBhcmUgYWxzbyBnb2luZyB0byBuZWVkIGBCUEZfU1lTQ0FMTGAgZm9yIEJQRiBzb2Nrb3B0IGhlbHBlciBzdXBwb3J0LgoKQWxyaWdodCwgbGV0JiMzOTtzIGRvIGEgc2FuaXR5IGNoZWNrIG9uIGV2ZXJ5dGhpbmc6IFRoaXMgaXMgYSB3b3J0aHdoaWxlIHBhdGNoIHRvIGZ1enouIEl0IGFkZHMgYFRDUF9FQ05gIGFuZCBgVENQX0VDTl9PUFRJT05gIHNvY2tldCBvcHRpb25zLiBUaGF0JiMzOTtzIGdvb2QuIFdlIGFyZSBlZmZlY3RpdmVseSBpbnRyb2R1Y2luZyBwZXItc29ja2V0IG92ZXJyaWRlcyBvZiBgdGNwX2VjbmAgYW5kIGB0Y3BfZWNuX29wdGlvbmAsIHdoaWNoIHNob3VsZCBhbGxvdyBmb3IgZ3JhbnVsYXIgY29udHJvbCBvdmVyIEVDTiBhbmQgQWNjRUNOIGJlaGF2aW9yLiBUaGUgcGF0Y2ggdG91Y2hlcyBzb2NrZXQgaW5pdGlhbGl6YXRpb24sIHNldHNvY2tvcHQvZ2V0c29ja29wdCBoYW5kbGVycywgQlBGIHNvY2tvcHQgZmlsdGVycywgU1lOL1NZTi1BQ0sgb3B0aW9uIGJ1aWxkaW5nLCBhbmQgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nLiBBbGwga2V5IHBhcnRzLgoKVGhlIEZvY3VzU3ltYm9scyBhcmU6IGBkb190Y3Bfc2V0c29ja29wdGAsIGBkb190Y3BfZ2V0c29ja29wdGAsIGB0Y3BfY29ubl9yZXF1ZXN0YCwgYHRjcF9tYWtlX3N5bmFja2AsIGFuZCBgdGNwX2Nvbm5lY3RgLgoKVGhlIEVuYWJsZWRDb25maWdzIGFyZSBgSU5FVGAgYW5kIGBCUEZfU1lTQ0FMTGAuCgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fdGNwX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7ZG9fdGNwX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGNwX2Nvbm5fcmVxdWVzdCYjMzQ7LAogICAgJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0OywKICAgICYjMzQ7dGNwX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTiBzb2NrZXQgb3B0aW9ucyB0byBhbGxvdyBwZXItc29ja2V0IGNvbmZpZ3VyYXRpb24gYW5kIG92ZXJyaWRlIG9mIHRoZSB0Y3BfZWNuIGFuZCB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgc2V0dGluZ3MuIEl0IG1vZGlmaWVzIFRDUCBzb2NrZXQgb3B0aW9ucyBoYW5kbGluZyAoZ2V0c29ja29wdC9zZXRzb2Nrb3B0KSwgQlBGIHNvY2tvcHQgZmlsdGVycywgVENQIFNZTi9TWU4tQUNLIG9wdGlvbiBnZW5lcmF0aW9uLCBhbmQgVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBwcm9jZXNzaW5nIGluIHRoZSBjb3JlIElQdjQvVENQIG5ldHdvcmtpbmcgc3RhY2suJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb190Y3Bfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb190Y3BfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubl9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3RjcF9tYWtlX3N5bmFjayYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFRDUF9FQ04gYW5kIFRDUF9FQ05fT1BUSU9OIHNvY2tldCBvcHRpb25zIHRvIGFsbG93IHBlci1zb2NrZXQgY29uZmlndXJhdGlvbiBhbmQgb3ZlcnJpZGUgb2YgdGhlIHRjcF9lY24gYW5kIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBzZXR0aW5ncy4gSXQgbW9kaWZpZXMgVENQIHNvY2tldCBvcHRpb25zIGhhbmRsaW5nIChnZXRzb2Nrb3B0L3NldHNvY2tvcHQpLCBCUEYgc29ja29wdCBmaWx0ZXJzLCBUQ1AgU1lOL1NZTi1BQ0sgb3B0aW9uIGdlbmVyYXRpb24sIGFuZCBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IHByb2Nlc3NpbmcgaW4gdGhlIGNvcmUgSVB2NC9UQ1AgbmV0d29ya2luZyBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGVyLXNvY2tldCBFQ04gYW5kIEFjY0VDTiBjb25maWd1cmF0aW9uIG9wdGlvbnMgKFRDUF9FQ04gYW5kIFRDUF9FQ05fT1BUSU9OKSB2aWEgc2V0c29ja29wdC9nZXRzb2Nrb3B0IGFuZCBCUEYgc29ja29wcywgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIHN5c2N0bHMuXG5cbktNU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XG4tIFRoZSBuZXcgZmllbGRzIGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYCBpbiBgc3RydWN0IHRjcF9zb2NrYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVENQX0VDTl9NT0RFX1VOU1BFQ2AgYW5kIGBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUNgIGluIGB0Y3BfaW5pdF9zb2NrKClgIGFuZCBjb3BpZWQgYWNyb3NzIHNvY2tldCBjbG9uZXMuXG4tIEluIGBkb190Y3BfZ2V0c29ja29wdCgpYCwgcmVhZGluZyB0aGVzZSBmaWVsZHMgaW5pdGlhbGl6ZXMgdGhlIGZ1bGwgYGludCB2YWxgIGJlZm9yZSBgY29weV90b19zb2NrcHRyKClgIGNvcGllcyB0aGUgZGF0YSB0byB1c2VyIHNwYWNlLiBObyBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHN0YWNrIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgYnVmZmVyIGxlbmd0aCBtYW5pcHVsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBpbnRyb2R1Y2VkLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZCBhcyB0aGUgY2hhbmdlcyBwcmVzZW50IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjMwNGQwNGM2MzdiY2I0YTBlNDI0ZWU0Zjc1NGQ4MzRhMzk5MjAxNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDA5OjA2OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAppbmRleCAyMDhmNDY5NjdlZTU5Li4yZTU1ZDllMmViMDlhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdApAQCAtNTI4LDYgJiM0Mzs1MjgsNDMgQEAgdGNwX2Vjbl9mYWxsYmFjayAtIEJPT0xFQU4KIAogCURlZmF1bHQ6IDEgKGVuYWJsZWQpCiAKJiM0Mzt0Y3BfZWNuIChzb2NrZXQgb3B0aW9uKSAtIFRDUF9FQ04KJiM0MzsJUGVyLXNvY2tldCBjb250cm9sIG9mIEVDTiBtb2RlLCBhbGxvd2luZyBwZXItY29ubmVjdGlvbiBvdmVycmlkZSBvZiB0aGUKJiM0MzsJdGNwX2VjbiBzeXNjdGwgc2V0dGluZy4gVGhpcyBlbmFibGVzIEw0UyAoTG93IExhdGVuY3ksIExvdyBMb3NzLCBTY2FsYWJsZQomIzQzOwlUaHJvdWdocHV0KSBjb25maWd1cmF0aW9uIG9uIGEgcGVyLXNvY2tldCBiYXNpcy4KJiM0MzsKJiM0MzsJU2V0dGluZyB0aGlzIHNvY2tldCBvcHRpb24gdG8gYW55IHZhbHVlIGV4Y2VwdCAyNTUgd2lsbCBvdmVycmlkZSB0aGUKJiM0MzsJc3lzdGVtLXdpZGUgdGNwX2VjbiBzeXNjdGwgZm9yIHRoYXQgcGFydGljdWxhciBzb2NrZXQuIEEgdmFsdWUgb2YgMjU1CiYjNDM7CShUQ1BfRUNOX01PREVfVU5TUEVDKSBtZWFucyB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IHN5c2N0bCB2YWx1ZS4KJiM0MzsKJiM0MzsJUG9zc2libGUgdmFsdWVzOiAwLTUgKHNlZSB0Y3BfZWNuIHN5c2N0bCBkZXNjcmlwdGlvbiBhYm92ZSksIG9yIDI1NSB0bwomIzQzOwl1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IChzeXNjdGxfdGNwX2VjbikuCiYjNDM7CiYjNDM7CUV4YW1wbGU6OgomIzQzOwomIzQzOwkJaW50IHZhbCA9IDM7ICAvKiBBY2NFQ04gbW9kZSAqLwomIzQzOwkJc2V0c29ja29wdChmZCwgU09MX1RDUCwgVENQX0VDTiwgJmFtcDt2YWwsIHNpemVvZih2YWwpKTsKJiM0MzsKJiM0MzsJRGVmYXVsdDogMjU1ICh1bnNwZWNpZmllZCAtIHVzZXMgdGNwX2VjbiBzeXNjdGwgdmFsdWUpCiYjNDM7CiYjNDM7dGNwX2Vjbl9vcHRpb24gKHNvY2tldCBvcHRpb24pIC0gVENQX0VDTl9PUFRJT04KJiM0MzsJUGVyLXNvY2tldCBjb250cm9sIG9mIEFjY3VyYXRlIEVDTiAoQWNjRUNOKSBvcHRpb24gc2VuZGluZyBiZWhhdmlvciwKJiM0MzsJYWxsb3dpbmcgcGVyLWNvbm5lY3Rpb24gb3ZlcnJpZGUgb2YgdGhlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBzZXR0aW5nLgomIzQzOwomIzQzOwlTZXR0aW5nIHRoaXMgc29ja2V0IG9wdGlvbiB0byBhbnkgdmFsdWUgZXhjZXB0IDI1NSB3aWxsIG92ZXJyaWRlIHRoZQomIzQzOwlzeXN0ZW0td2lkZSB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgZm9yIHRoYXQgcGFydGljdWxhciBzb2NrZXQuIEEgdmFsdWUgb2YKJiM0MzsJMjU1IChUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMpIG1lYW5zIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgc3lzY3RsIHZhbHVlLgomIzQzOwomIzQzOwlQb3NzaWJsZSB2YWx1ZXM6IDAtMyAoc2VlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBkZXNjcmlwdGlvbiBhYm92ZSksIG9yIDI1NQomIzQzOwl0byB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IChzeXNjdGxfdGNwX2Vjbl9vcHRpb24pLgomIzQzOwomIzQzOwlFeGFtcGxlOjoKJiM0MzsKJiM0MzsJCWludCB2YWwgPSAyOyAgLyogU2VuZCBBY2NFQ04gb3B0aW9uIG9uIGV2ZXJ5IHBhY2tldCAqLwomIzQzOwkJc2V0c29ja29wdChmZCwgU09MX1RDUCwgVENQX0VDTl9PUFRJT04sICZhbXA7dmFsLCBzaXplb2YodmFsKSk7CiYjNDM7CiYjNDM7CURlZmF1bHQ6IDI1NSAodW5zcGVjaWZpZWQgLSB1c2VzIHRjcF9lY25fb3B0aW9uIHN5c2N0bCB2YWx1ZSkKJiM0MzsKIHRjcF9mYWNrIC0gQk9PTEVBTgogCVRoaXMgaXMgYSBsZWdhY3kgb3B0aW9uLCBpdCBoYXMgbm8gZWZmZWN0IGFueW1vcmUuCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNwLmggYi9pbmNsdWRlL2xpbnV4L3RjcC5oCmluZGV4IDZhOGM3NzcxOTMyMmYuLjdjYjFlNzY1ZjQ2MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC90Y3AuaApAQCAtMjg5LDYgJiM0MzsyODksMTMgQEAgc3RydWN0IHRjcF9zb2NrIHsKIAkJCQkJICogc2Fja2VkX291dCAmZ3Q7IDApCiAJCQkJCSAqLwogCXU4CWVjbl9mbGFnczsJLyogRUNOIHN0YXR1cyBiaXRzLgkJCSovCiYjNDM7CXU4CWVjbl9tb2RlOwkvKiBQZXItc29ja2V0IEVDTiBtb2RlIG92ZXJyaWRlCiYjNDM7CQkJCSAqIChUQ1BfRUNOX01PREVfVU5TUEVDID0gdXNlIHN5c2N0bCkKJiM0MzsJCQkJICovCiYjNDM7CXU4CWVjbl9vcHRpb247CS8qIFBlci1zb2NrZXQgQWNjRUNOIG9wdGlvbiBvdmVycmlkZQomIzQzOwkJCQkgKiAoVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDID0gdXNlIHN5c2N0bCkKJiM0MzsJCQkJICovCiYjNDM7CiAJX19jYWNoZWxpbmVfZ3JvdXBfZW5kKHRjcF9zb2NrX3dyaXRlX3R4KTsKIAogCS8qIFRYUlggcmVhZC13cml0ZSBob3RwYXRoIGNhY2hlIGxpbmVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3BfZWNuLmggYi9pbmNsdWRlL25ldC90Y3BfZWNuLmgKaW5kZXggODY1ZDVjNWE3NzE4ZC4uOTMxZTA4NzcxNzZjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwX2Vjbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaApAQCAtMjIsNiAmIzQzOzIyLDcgQEAgZW51bSB0Y3BfZWNuX21vZGUgewogCVRDUF9FQ05fSU5fQUNDRUNOX09VVF9BQ0NFQ04gPSAzLAogCVRDUF9FQ05fSU5fQUNDRUNOX09VVF9FQ04gPSA0LAogCVRDUF9FQ05fSU5fQUNDRUNOX09VVF9OT0VDTiA9IDUsCiYjNDM7CVRDUF9FQ05fTU9ERV9VTlNQRUMgPSAyNTUsCS8qIFVzZSBzeXNjdGwgZGVmYXVsdCAocGVyLXNvY2tldCkgKi8KIH07CiAKIC8qIEFjY0VDTiBvcHRpb24gc2VuZGluZyB3aGVuIEFjY0VDTiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgbmVnb3RpYXRlZCAqLwpAQCAtMzAsOCAmIzQzOzMxLDI5IEBAIGVudW0gdGNwX2FjY2Vjbl9vcHRpb24gewogCVRDUF9BQ0NFQ05fT1BUSU9OX01JTklNVU0gPSAxLAogCVRDUF9BQ0NFQ05fT1BUSU9OX0ZVTEwgPSAyLAogCVRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QgPSAzLAomIzQzOwlUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgPSAyNTUsCS8qIFVzZSBzeXNjdGwgZGVmYXVsdCAocGVyLXNvY2tldCkgKi8KIH07CiAKJiM0MzsvKiBSZXNvbHZlIHRoZSBlZmZlY3RpdmUgRUNOIG1vZGU6IHBlci1zb2NrZXQgb3ZlcnJpZGUgb3Igc3lzY3RsIGZhbGxiYWNrICovCiYjNDM7c3RhdGljIGlubGluZSB1OCB0Y3BfZWNuX21vZGVfZWZmKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXU4IG1vZGUgPSB0Y3Bfc2soc2spLSZndDtlY25fbW9kZTsKJiM0MzsKJiM0MzsJaWYgKG1vZGUgPT0gVENQX0VDTl9NT0RFX1VOU1BFQykKJiM0MzsJCXJldHVybiBSRUFEX09OQ0Uoc29ja19uZXQoc2spLSZndDtpcHY0LnN5c2N0bF90Y3BfZWNuKTsKJiM0MzsJcmV0dXJuIG1vZGU7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBBY2NFQ04gb3B0aW9uOiBwZXItc29ja2V0IG92ZXJyaWRlIG9yIHN5c2N0bCBmYWxsYmFjayAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdTggdGNwX2FjY2Vjbl9vcHRpb25fZWZmKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXU4IG9wdCA9IHRjcF9zayhzayktJmd0O2Vjbl9vcHRpb247CiYjNDM7CiYjNDM7CWlmIChvcHQgPT0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDKQomIzQzOwkJcmV0dXJuIFJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKTsKJiM0MzsJcmV0dXJuIG9wdDsKJiM0Mzt9CiYjNDM7CiAvKiBBcHBseSBlaXRoZXIgRUNUKDApIG9yIEVDVCgxKSBiYXNlZCBvbiBUQ1BfQ09OR19FQ1RfMV9ORUdPVElBVElPTiBmbGFnICovCiBzdGF0aWMgaW5saW5lIHZvaWQgSU5FVF9FQ05feG1pdF9lY3RfMV9uZWdvdGlhdGlvbihzdHJ1Y3Qgc29jayAqc2spCiB7CkBAIC01OTksNyAmIzQzOzYyMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfZWNuX3NlbmRfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlib29sIGJwZl9uZWVkc19lY24gPSB0Y3BfYnBmX2NhX25lZWRzX2Vjbihzayk7CiAJYm9vbCB1c2VfZWNuLCB1c2VfYWNjZWNuOwotCXU4IHRjcF9lY24gPSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLSZndDtpcHY0LnN5c2N0bF90Y3BfZWNuKTsKJiM0MzsJdTggdGNwX2VjbiA9IHRjcF9lY25fbW9kZV9lZmYoc2spOwogCiAJdXNlX2FjY2VjbiA9IHRjcF9lY24gPT0gVENQX0VDTl9JTl9BQ0NFQ05fT1VUX0FDQ0VDTiB8fAogCQkgICAgIHRjcF9jYV9uZWVkc19hY2NlY24oc2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDczMmIzNWNjMDhkMWMuLmM1OGIxNjMzYmI0NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTI5ODUsNyAmIzQzOzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKiAJCSAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosCiAgKiAJCSAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosCiAgKiAJCSAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKiwKLSAqCQkgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLgomIzQzOyAqCQkgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLAomIzQzOyAqCQkgICoqVENQX0VDTioqLCAqKlRDUF9FQ05fT1BUSU9OKiouCiAgKiAJCSogKipJUFBST1RPX0lQKiosIHdoaWNoIHN1cHBvcnRzICpvcHRuYW1lKiAqKklQX1RPUyoqLgogICogCQkqICoqSVBQUk9UT19JUFY2KiosIHdoaWNoIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgKm9wdG5hbWUqXCBzOgogICogCQkgICoqSVBWNl9UQ0xBU1MqKiwgKipJUFY2X0FVVE9GTE9XTEFCRUwqKi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaCBiL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaAppbmRleCAwMzc3MmRkNGQzOTkyLi4wMWViYjM0OGJhMjc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oCkBAIC0xNDIsNiAmIzQzOzE0Miw4IEBAIGVudW0gewogI2RlZmluZSBUQ1BfUlRPX01BWF9NUwkJNDQJLyogbWF4IHJ0byB0aW1lIGluIG1zICovCiAjZGVmaW5lIFRDUF9SVE9fTUlOX1VTCQk0NQkvKiBtaW4gcnRvIHRpbWUgaW4gdXMgKi8KICNkZWZpbmUgVENQX0RFTEFDS19NQVhfVVMJNDYJLyogbWF4IGRlbGF5ZWQgYWNrIHRpbWUgaW4gdXMgKi8KJiM0MzsjZGVmaW5lIFRDUF9FQ04JCQk0NwkvKiBQZXItc29ja2V0IEVDTiBtb2RlICgwLTUsIDI1NT11c2Ugc3lzY3RsKSAqLwomIzQzOyNkZWZpbmUgVENQX0VDTl9PUFRJT04JCTQ4CS8qIFBlci1zb2NrZXQgQWNjRUNOIG9wdGlvbiAoMC0zLCAyNTU9dXNlIHN5c2N0bCkgKi8KIAogI2RlZmluZSBUQ1BfUkVQQUlSX09OCQkxCiAjZGVmaW5lIFRDUF9SRVBBSVJfT0ZGCQkwCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLjk5M2IzMWUxMGI5NDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC01NjcwLDYgJiM0Mzs1NjcwLDggQEAgc3RhdGljIGludCBzb2xfdGNwX3NvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwKIAljYXNlIFRDUF9OT1RTRU5UX0xPV0FUOgogCWNhc2UgVENQX1NBVkVfU1lOOgogCWNhc2UgVENQX1JUT19NQVhfTVM6CiYjNDM7CWNhc2UgVENQX0VDTjoKJiM0MzsJY2FzZSBUQ1BfRUNOX09QVElPTjoKIAkJaWYgKCpvcHRsZW4gIT0gc2l6ZW9mKGludCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDFjODY3YTMwMjQ0NDYuLmZiMzc2YTk3ZjBlNmQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC00NjMsNiAmIzQzOzQ2Myw4IEBAIHZvaWQgdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCiAKIAl0cC0mZ3Q7dHNvZmZzZXQgPSAwOwogCXRwLSZndDtyYWNrLnJlb193bmRfc3RlcHMgPSAxOwomIzQzOwl0cC0mZ3Q7ZWNuX21vZGUgPSBUQ1BfRUNOX01PREVfVU5TUEVDOwomIzQzOwl0cC0mZ3Q7ZWNuX29wdGlvbiA9IFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQzsKIAogCXNrLSZndDtza193cml0ZV9zcGFjZSA9IHNrX3N0cmVhbV93cml0ZV9zcGFjZTsKIAlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1VTRV9XUklURV9RVUVVRSk7CkBAIC00MTYwLDYgJiM0Mzs0MTYyLDE4IEBAIGludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCXRjcF9lbmFibGVfdHhfZGVsYXkoc2ssIHZhbCk7CiAJCVdSSVRFX09OQ0UodHAtJmd0O3RjcF90eF9kZWxheSwgdmFsKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgVENQX0VDTjoKJiM0MzsJCWlmICh2YWwgIT0gVENQX0VDTl9NT0RFX1VOU1BFQyAmYW1wOyZhbXA7ICh2YWwgJmx0OyAwIHx8IHZhbCAmZ3Q7IFRDUF9FQ05fSU5fQUNDRUNOX09VVF9OT0VDTikpCiYjNDM7CQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlXUklURV9PTkNFKHRwLSZndDtlY25fbW9kZSwgdmFsKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFRDUF9FQ05fT1BUSU9OOgomIzQzOwkJaWYgKHZhbCAhPSBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgJmFtcDsmYW1wOyAodmFsICZsdDsgMCB8fCB2YWwgJmd0OyBUQ1BfQUNDRUNOX09QVElPTl9QRVJTSVNUKSkKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZWxzZQomIzQzOwkJCVdSSVRFX09OQ0UodHAtJmd0O2Vjbl9vcHRpb24sIHZhbCk7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PUFJPVE9PUFQ7CiAJCWJyZWFrOwpAQCAtNDg0Miw2ICYjNDM7NDg1NiwxMiBAQCBpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsCiAJY2FzZSBUQ1BfREVMQUNLX01BWF9VUzoKIAkJdmFsID0gamlmZmllc190b191c2VjcyhSRUFEX09OQ0UoaW5ldF9jc2soc2spLSZndDtpY3NrX2RlbGFja19tYXgpKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgVENQX0VDTjoKJiM0MzsJCXZhbCA9IFJFQURfT05DRSh0cC0mZ3Q7ZWNuX21vZGUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVENQX0VDTl9PUFRJT046CiYjNDM7CQl2YWwgPSBSRUFEX09OQ0UodHAtJmd0O2Vjbl9vcHRpb24pOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CkBAIC01MjU2LDYgJiM0Mzs1Mjc2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHRjcF9zdHJ1Y3RfY2hlY2sodm9pZCkKIAlDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCB0c29ydGVkX3NlbnRfcXVldWUpOwogCUNBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGhpZ2hlc3Rfc2Fjayk7CiAJQ0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX2ZsYWdzKTsKJiM0MzsJQ0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX21vZGUpOwomIzQzOwlDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fb3B0aW9uKTsKIAogCS8qIFRYUlggcmVhZC13cml0ZSBob3RwYXRoIGNhY2hlIGxpbmVzICovCiAJQ0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eHJ4LCBwcmVkX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMGY2MGExZGJmOTI3NC4uMDA0M2I0YjJiYzkyMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTc0NTcsMTMgJiM0Mzs3NDU3LDEyIEBAIHN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKIAljb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTsKLQljb25zdCBzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChsaXN0ZW5fc2spOwogCWJvb2wgdGhfZWNuID0gdGgtJmd0O2VjZSAmYW1wOyZhbXA7IHRoLSZndDtjd3I7CiAJYm9vbCBlY3QsIGVjbl9vazsKIAl1MzIgZWNuX29rX2RzdDsKIAogCWlmICh0Y3BfYWNjZWNuX3N5bl9yZXF1ZXN0ZWQodGgpICZhbXA7JmFtcDsKLQkgICAgKFJFQURfT05DRShuZXQtJmd0O2lwdjQuc3lzY3RsX3RjcF9lY24pICZndDs9IDMgfHwKJiM0MzsJICAgICh0Y3BfZWNuX21vZGVfZWZmKGxpc3Rlbl9zaykgJmd0Oz0gMyB8fAogCSAgICAgdGNwX2NhX25lZWRzX2FjY2VjbihsaXN0ZW5fc2spKSkgewogCQlpbmV0X3JzayhyZXEpLSZndDtlY25fb2sgPSAxOwogCQl0Y3BfcnNrKHJlcSktJmd0O2FjY2Vjbl9vayA9IDE7CkBAIC03NDc3LDcgJiM0Mzs3NDc2LDcgQEAgc3RhdGljIHZvaWQgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAKIAllY3QgPSAhSU5FVF9FQ05faXNfbm90X2VjdChUQ1BfU0tCX0NCKHNrYiktJmd0O2lwX2RzZmllbGQpOwogCWVjbl9va19kc3QgPSBkc3RfZmVhdHVyZShkc3QsIERTVF9GRUFUVVJFX0VDTl9NQVNLKTsKLQllY25fb2sgPSBSRUFEX09OQ0UobmV0LSZndDtpcHY0LnN5c2N0bF90Y3BfZWNuKSB8fCBlY25fb2tfZHN0OwomIzQzOwllY25fb2sgPSB0Y3BfZWNuX21vZGVfZWZmKGxpc3Rlbl9zaykgfHwgZWNuX29rX2RzdDsKIAogCWlmICgoKCFlY3QgfHwgdGgtJmd0O3JlczEgfHwgdGgtJmd0O2FlKSAmYW1wOyZhbXA7IGVjbl9vaykgfHwKIAkgICAgdGNwX2NhX25lZWRzX2VjbihsaXN0ZW5fc2spIHx8CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggMDA0MTdhNDI5MjIyNS4uODJiOTZjNDAxNWZkMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMTA0NSw3ICYjNDM7MTA0NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAodW5saWtlbHkoKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7dGNwX2ZsYWdzICZhbXA7IFRDUEhEUl9BQ0spICZhbXA7JmFtcDsKIAkJICAgICB0Y3BfZWNuX21vZGVfYWNjZWNuKHRwKSAmYW1wOyZhbXA7CiAJCSAgICAgaW5ldF9jc2soc2spLSZndDtpY3NrX3JldHJhbnNtaXRzICZsdDsgMiAmYW1wOyZhbXA7Ci0JCSAgICAgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKSAmYW1wOyZhbXA7CiAJCSAgICAgcmVtYWluaW5nICZndDs9IFRDUE9MRU5fQUNDRUNOX0JBU0UpKSB7CiAJCW9wdHMtJmd0O3VzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTsKIAkJcmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTsKQEAgLTExMzMsNyAmIzQzOzExMzMsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJc21jX3NldF9vcHRpb25fY29uZCh0Y3Bfc2soc2spLCBpcmVxLCBvcHRzLCAmYW1wO3JlbWFpbmluZyk7CiAKIAlpZiAodHJlcS0mZ3Q7YWNjZWNuX29rICZhbXA7JmFtcDsKLQkgICAgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pICZhbXA7JmFtcDsKJiM0MzsJICAgIHRjcF9hY2NlY25fb3B0aW9uX2VmZihzaykgJmFtcDsmYW1wOwogCSAgICBzeW5hY2tfdHlwZSAhPSBUQ1BfU1lOQUNLX1JFVFJBTlMgJmFtcDsmYW1wOyByZW1haW5pbmcgJmd0Oz0gVENQT0xFTl9BQ0NFQ05fQkFTRSkgewogCQlvcHRzLSZndDt1c2Vfc3luYWNrX2Vjbl9ieXRlcyA9IDE7CiAJCXJlbWFpbmluZyAtPSB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKG9wdHMsIDAsIHJlbWFpbmluZyk7CkBAIC0xMjIxLDcgJiM0MzsxMjIxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IKIAl9CiAKIAlpZiAodGNwX2Vjbl9tb2RlX2FjY2Vjbih0cCkpIHsKLQkJaW50IGVjbl9vcHQgPSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLSZndDtpcHY0LnN5c2N0bF90Y3BfZWNuX29wdGlvbik7CiYjNDM7CQlpbnQgZWNuX29wdCA9IHRjcF9hY2NlY25fb3B0aW9uX2VmZihzayk7CiAKIAkJaWYgKGVjbl9vcHQgJmFtcDsmYW1wOyB0cC0mZ3Q7c2F3X2FjY2Vjbl9vcHQgJmFtcDsmYW1wOwogCQkgICAgKGVjbl9vcHQgJmd0Oz0gVENQX0FDQ0VDTl9PUFRJT05fUEVSU0lTVCB8fApkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDczMmIzNWNjMDhkMWMuLmM1OGIxNjMzYmI0NmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTI5ODUsNyAmIzQzOzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKiAJCSAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosCiAgKiAJCSAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosCiAgKiAJCSAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKiwKLSAqCQkgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLgomIzQzOyAqCQkgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLAomIzQzOyAqCQkgICoqVENQX0VDTioqLCAqKlRDUF9FQ05fT1BUSU9OKiouCiAgKiAJCSogKipJUFBST1RPX0lQKiosIHdoaWNoIHN1cHBvcnRzICpvcHRuYW1lKiAqKklQX1RPUyoqLgogICogCQkqICoqSVBQUk9UT19JUFY2KiosIHdoaWNoIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgKm9wdG5hbWUqXCBzOgogICogCQkgICoqSVBWNl9UQ0xBU1MqKiwgKipJUFY2X0FVVE9GTE9XTEFCRUwqKi4KZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaAppbmRleCAxM2NlZWIzOTVlYjhmLi40ZjUyYjlkZjQyNjYxIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oCkBAIC0xMjgsNyAmIzQzOzEyOCw4IEBAIGVudW0gewogI2RlZmluZSBUQ1BfQ01fSU5RCQlUQ1BfSU5RCiAKICNkZWZpbmUgVENQX1RYX0RFTEFZCQkzNwkvKiBkZWxheSBvdXRnb2luZyBwYWNrZXRzIGJ5IFhYIHVzZWMgKi8KLQomIzQzOyNkZWZpbmUgVENQX0VDTgkJCTQ3CS8qIFBlci1zb2NrZXQgRUNOIG1vZGUgKDAtNSwgMjU1PXVzZSBzeXNjdGwpICovCiYjNDM7I2RlZmluZSBUQ1BfRUNOX09QVElPTgkJNDgJLyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqLwogCiAjZGVmaW5lIFRDUF9SRVBBSVJfT04JCTEKICNkZWZpbmUgVENQX1JFUEFJUl9PRkYJCTAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zZXRnZXRfc29ja29wdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmMKaW5kZXggZDk2ZTk5YjY3YWViZi4uZmI5N2ZhMGJjN2I0NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmMKQEAgLTY0LDYgJiM0Mzs2NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja29wdF90ZXN0IHNvbF90Y3BfdGVzdHNbXSA9IHsKIAl7IC5vcHQgPSBUQ1BfQlBGX0RFTEFDS19NQVgsIC5uZXcgPSAzMDAwMCwgLmV4cGVjdGVkID0gMzAwMDAsIH0sCiAJeyAub3B0ID0gVENQX0JQRl9SVE9fTUlOLCAubmV3ID0gMzAwMDAsIC5leHBlY3RlZCA9IDMwMDAwLCB9LAogCXsgLm9wdCA9IFRDUF9SVE9fTUFYX01TLCAubmV3ID0gMjAwMCwgLmV4cGVjdGVkID0gMjAwMCwgfSwKJiM0MzsJeyAub3B0ID0gVENQX0VDTiwgLm5ldyA9IDMsIC5leHBlY3RlZCA9IDMsIC5yZXN0b3JlID0gMjU1LCB9LAomIzQzOwl7IC5vcHQgPSBUQ1BfRUNOX09QVElPTiwgLm5ldyA9IDIsIC5leHBlY3RlZCA9IDIsIC5yZXN0b3JlID0gMjU1LCB9LAogCXsgLm9wdCA9IDAsIH0sCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDkwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogODIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgZG9lcy4KCkl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgdHdvIG5ldyBmaWVsZHMsIGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYCwgYm90aCBvZiB0eXBlIGB1OGAsIHRvIHRoZSBgdGNwX3NvY2tgIHN0cnVjdHVyZS4gVGhlc2UgZmllbGRzIGFyZSBpbml0aWFsaXplZCB0byBgVENQX0VDTl9NT0RFX1VOU1BFQ2AgKDI1NSkgYW5kIGBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUNgICgyNTUpIHJlc3BlY3RpdmVseSB3aXRoaW4gYHRjcF9pbml0X3NvY2tgLgoKVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBoZWxwZXIgZnVuY3Rpb25zLCBgdGNwX2Vjbl9tb2RlX2VmZihzaylgIGFuZCBgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKWAuIFRoZXNlIGZ1bmN0aW9ucyBjbGV2ZXJseSByZWFkIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyAoYHRwLSZndDtlY25fbW9kZWAgYW5kIGB0cC0mZ3Q7ZWNuX29wdGlvbmApLiBJZiB0aG9zZSBmaWVsZHMgaGF2ZW4mIzM5O3QgYmVlbiBleHBsaWNpdGx5IHNldCAoaS5lLiwgdGhleSYjMzk7cmUgc3RpbGwgYXQgdGhlIFVOU1BFQyB2YWx1ZSksIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHJldHVybiB0aGUgc3lzY3RsIHZhbHVlcyBmb3IgRUNOIG1vZGUgYW5kIEVDTiBvcHRpb24gcmVzcGVjdGl2ZWx5LiBJIHNlZSB3aGF0IHRoZXkmIzM5O3JlIGRvaW5nIGhlcmUsIG1ha2luZyB0aGUgY29uZmlndXJhdGlvbiBtb3JlIGR5bmFtaWMgYXQgcnVudGltZSwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb25lIHNhZmVseS4KCkNydWNpYWxseSwgdGhlIHBhdGNoIHRoZW4gcmVwbGFjZXMgZGlyZWN0IHJlYWRzIG9mIHRob3NlIHN5c2N0bCB2YWx1ZXMgd2l0aCBjYWxscyB0byB0aGVzZSBuZXcgaGVscGVyIGZ1bmN0aW9ucyB3aXRoaW4gc2V2ZXJhbCBUQ1AgZnVuY3Rpb25zIOKAkyBgdGNwX2Vjbl9zZW5kX3N5bmAsIGB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0YCwgZXRjLiBUaGlzIGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZyB0byBjZW50cmFsaXplIHRoZSBFQ04gbG9naWMsIGJ1dCBwb3RlbnRpYWxseSBhIHNvdXJjZSBvZiBzdWJ0bGUgYnVncy4KClRoZW4sIHRoZXJlIGFyZSB0aGUgc29ja2V0IG9wdGlvbnMgYFRDUF9FQ05gIGFuZCBgVENQX0VDTl9PUFRJT05gIGFkZGVkIHRvIGFsbG93IHVzZXJzcGFjZSBjb250cm9sIG92ZXIgdGhlc2Ugc2V0dGluZ3MgdmlhIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgLiBUaGUgc2V0c29ja29wdCB2YWxpZGF0aW9uIGNoZWNrcyBpZiB0aGUgYHZhbGAgaXMgd2l0aGluIGEgcmVhc29uYWJsZSByYW5nZSwgd2hpY2ggaXMgZ29vZC4gVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCwgd2hpY2ggaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGZvciBlbnN1cmluZyBhdG9taWNpdHkgYW5kIHZpc2liaWxpdHkgYmV0d2VlbiB0aHJlYWRzLgoKRmluYWxseSwgdGhlcmUgaXMgQlBGIHNvY2tvcHQgc3VwcG9ydCBhZGRlZCBmb3IgdGhlc2UgbmV3IG9wdGlvbnMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhpcyBwYXJ0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBjaGVja2luZyB0aGUgc2l6ZS4KCk5vdyBmb3IgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoZSBrZXkgaXMgdG8gc2VlIHdoZXJlIHRoZXNlIGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZCB0aHJvdWdob3V0IHRoZSBgdGNwX3NvY2tgIGxpZmVjeWNsZS4KCkkgbm90ZSB0aGF0IGB0Y3BfaW5pdF9zb2NrYCBkb2VzIHRoZSBpbml0aWFsaXphdGlvbi4gTm93LCBpcyB0aGUgYHRjcF9zb2NrYCBzdHJ1Y3R1cmUgemVyby1pbml0aWFsaXplZCBpbml0aWFsbHksIG9yIGFyZSB0aGVyZSBvdGhlciB3YXlzIGl0JiMzOTtzIGNyZWF0ZWQgd2hlcmUgdGhlc2UgZmllbGRzIG1pZ2h0IG5vdCBiZSBleHBsaWNpdGx5IHNldD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGB0Y3BfaW5pdF9zb2NrYCBpcyBjYWxsZWQgaW4gZXZlcnkgcGF0aCBvZiBjcmVhdGluZyB0aGUgVENQIHNvY2tldC4gVGhlIExpbnV4IGtlcm5lbCB1c2VzIGBzb2NrX2FsbG9jX2lub2RlYCAvIGBza19hbGxvY2AsIHdoaWNoIHNob3VsZCB6ZXJvIG91dCB0aGUgbWVtb3J5LCBhbmQgdGhlbiBgdGNwX2luaXRfc29ja2Agc2V0cyB0aGUgZmllbGRzIGV4cGxpY2l0bHkuIFN0aWxsLCBJIHNob3VsZCBjb25maXJtLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBjbG9uZSBvcGVyYXRpb25zLCBvciBjYXNlcyB3aXRoIGBhY2NlcHRgIG9yIHBhc3NpdmUgb3BlbnMsIG9yIGByZXF1ZXN0X3NvY2tgLiBBcmUgdGhlc2UgZmllbGRzIHByb3Blcmx5IGluaXRpYWxpemVkIHdoZW4gYSBuZXcgc29ja2V0IGlzIGNyZWF0ZWQgZnJvbSBhbiBleGlzdGluZyBvbmU/IEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgY2xvbmluZyBvciBjb3B5aW5nIG9yIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBgdGNwX3NvY2tgIHN0cnVjdHVyZSwgZXNwZWNpYWxseSBhcm91bmQgZnVuY3Rpb25zIGxpa2UgYHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZGAuCgpUaW1lIHRvIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIGNhbGxzIHRvIGB0Y3BfaW5pdF9zb2NrYCBvciBtZW50aW9ucyBvZiBjbG9uaW5nIHdpdGhpbiB0aGUgcmVsZXZhbnQgZmlsZXMsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jYCBhbmQgYHRjcF9pcHY0LmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgZXZlcnkgc29ja2V0IGNyZWF0aW9uIHBhdGggcHJvcGVybHkgaW5pdGlhbGl6ZXMgdGhlc2UgbmV3IGZpZWxkcyB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgcmVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9pbml0X3NvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9hZl9pbmV0LmM9MTc1Mz1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIGlwdjRfbWliX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTc2MS0jaWZkZWYgQ09ORklHX01QVENQXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTc2MjpcdC8qIGFsbG9jYXRlZCBvbiBkZW1hbmQsIHNlZSBtcHRjcF9pbml0X3NvY2soKSAqL1xubmV0L2lwdjQvYWZfaW5ldC5jLTE3NjMtXHRmcmVlX3BlcmNwdShuZXQtXHUwMDNlbWliLm1wdGNwX3N0YXRpc3RpY3MpO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQwMj12b2lkIHRjcF9tZDVfZGVzdHJ1Y3Rfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwLmMtNDE5LSAqL1xubmV0L2lwdjQvdGNwLmM6NDIwOnZvaWQgdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3AuYy00MjEte1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM5Nj1zdGF0aWMgaW50IHRjcF92NF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM5OS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjQwMDpcdHRjcF9pbml0X3NvY2soc2spO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0yNDAxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDY4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIExldCYjMzk7cyBzdGFydCB3aXRoIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY0L3RjcF9taW5pc29ja3MuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgbG9naWMgZm9yIGhhbmRsaW5nIGEgbmV3bHkgYXJyaXZlZCBjb25uZWN0aW9uIHJlcXVlc3QsIGEgU1lOLCB0aGF0JiMzOTtzIGJlaW5nIHNwYXduZWQgZnJvbSBhbiBleGlzdGluZyBsaXN0ZW5pbmcgc29ja2V0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgY3JlYXRpb24gb2YgdGhlIGNoaWxkIHNvY2tldC4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaG93IHRoZSBuZXcgc29ja2V0IGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIHJlcXVlc3QgYW5kIHRoZSBwYXJlbnQgc29ja2V0IGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kgYmVpbmcgdXNlZCB0byBtYW5hZ2UgdGhpcyBzdGF0ZS4gSXMgaXQgYSBjb3B5LW9uLXdyaXRlIHNpdHVhdGlvbiwgb3IgYXJlIHdlIGdvaW5nIGZvciBmdWxsIHN0YXRlIGR1cGxpY2F0aW9uIGF0IHRoaXMgcG9pbnQ/IEkgYWxzbyB3YW50IHRvIGZvbGxvdyB1cCB3aXRoIGFueSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMgYW5kIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGNvbWUgaW50byBwbGF5IGR1cmluZyB0aGUgY2hpbGQgY3JlYXRpb24gYW5kIGl0cyBhZGRpdGlvbiB0byB0aGUgZXN0YWJsaXNoZWQgY29ubmVjdGlvbiBsaXN0cy4gRXNzZW50aWFsbHksIEkmIzM5O20gY2hlY2tpbmcgdGhlIGhhbmRvZmYgb2YgdGhlIGNvbm5lY3Rpb24mIzM5O3MgbGlmZWN5Y2xlIGZyb20gdGhlIGxpc3RlbiBzb2NrZXQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgY2hpbGQgc29ja2V0LiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTI5ND12b2lkIGluZXRfY3NrX3ByZXBhcmVfZm9yX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzAyLS8qIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIGZvcmNlIGEgY2xvc3VyZSBvZiBhIHNvY2tldCBhZnRlciB0aGUgY2FsbCB0b1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMzAzOiAqIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpLlxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzA0LSAqL1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTkxOD12b2lkIHRjcF9hb19zeW5jb29raWUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTkyNy1cdC8qIHRyZXEtXHUwMDNlYWZfc3BlY2lmaWMgaXMgdXNlZCB0byBwZXJmb3JtIFRDUF9BTyBsb29rdXBcbm5ldC9pcHY0L3RjcF9hby5jOjkyODpcdCAqIGluIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpLlxubmV0L2lwdjQvdGNwX2FvLmMtOTI5LVx0ICovXG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MjU3PXZvaWQgdGNwX2Zhc3RvcGVuX2FkZF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTI2OC1cdHRjcF9jbGVhbnVwX3NrYihza2IpO1xubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM6MjY5Olx0Lyogc2Vnc19pbiBoYXMgYmVlbiBpbml0aWFsaXplZCB0byAxIGluIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpLlxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMjcwLVx0ICogSGVuY2UsIHJlc2V0IHNlZ3NfaW4gdG8gMCBiZWZvcmUgY2FsbGluZyB0Y3Bfc2Vnc19pbigpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz00OTE9aW50IHRjcF92NF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8pXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy01NTItXHR0cCA9IHRjcF9zayhzayk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjU1MzpcdC8qIFhYWCAoVEZPKSAtIHRwLVx1MDAzZXNuZF91bmEgc2hvdWxkIGJlIElTTiAodGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKCkgKi9cbm5ldC9pcHY0L3RjcF9pcHY0LmMtNTU0LVx0ZmFzdG9wZW4gPSByY3VfZGVyZWZlcmVuY2UodHAtXHUwMDNlZmFzdG9wZW5fcnNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE2NzQ9c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2OTYtXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE2OTc6XHRuZXdzayA9IHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChzaywgcmVxLCBza2IpO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjk4LVx0aWYgKCFuZXdzaylcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTI1PXN0YXRpYyB2b2lkIHNtY19jaGVja19yZXNldF9zeW5fcmVxKGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqb2xkdHAsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTU0NS0gKi9cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo1NDY6c3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTQ3LVx0XHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgd2l0aGluIGBuZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoaXMgZnVuY3Rpb24sIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IG5ldyBjaGlsZCBzb2NrZXRzIGFyZSBjcmVhdGVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBsaXN0ZW5pbmcgc29ja2V0LiBJIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBzb21lIGludGVyZXN0aW5nIGludGVycGxheSB3aXRoIHRoZSBgaW5ldF9zb2NrYCBzdHJ1Y3R1cmUgYW5kIHBlcmhhcHMgc29tZSBsb2NraW5nIHByaW1pdGl2ZXMgdG9vLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIG91dCBmb3IgdGhvc2UuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5IGdyaXR0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NTpcdCAqL1xuIDU0NjpcdHN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIDU0NzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIDU0ODpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA1NDk6XHR7XG4gNTUwOlx0XHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBpbmV0X2Nza19jbG9uZV9sb2NrKHNrLCByZXEsIEdGUF9BVE9NSUMpO1xuIDU1MTpcdFx0Y29uc3Qgc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxID0gaW5ldF9yc2socmVxKTtcbiA1NTI6XHRcdHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICp0cmVxID0gdGNwX3JzayhyZXEpO1xuIDU1MzpcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpuZXdpY3NrO1xuIDU1NDpcdFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICpvbGR0cDtcbiA1NTU6XHRcdHN0cnVjdCB0Y3Bfc29jayAqbmV3dHA7XG4gNTU2Olx0XHR1MzIgc2VxO1xuIDU1NzpcdFxuIDU1ODpcdFx0aWYgKCFuZXdzaylcbiA1NTk6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTYwOlx0XG4gNTYxOlx0XHRuZXdpY3NrID0gaW5ldF9jc2sobmV3c2spO1xuIDU2MjpcdFx0bmV3dHAgPSB0Y3Bfc2sobmV3c2spO1xuIDU2MzpcdFx0b2xkdHAgPSB0Y3Bfc2soc2spO1xuIDU2NDpcdFxuIDU2NTpcdFx0c21jX2NoZWNrX3Jlc2V0X3N5bl9yZXEob2xkdHAsIHJlcSwgbmV3dHApO1xuIDU2NjpcdFxuIDU2NzpcdFx0LyogTm93IHNldHVwIHRjcF9zb2NrICovXG4gNTY4Olx0XHRuZXd0cC1cdTAwM2VwcmVkX2ZsYWdzID0gMDtcbiA1Njk6XHRcbiA1NzA6XHRcdHNlcSA9IHRyZXEtXHUwMDNlcmN2X2lzbiAmIzQzOyAxO1xuIDU3MTpcdFx0bmV3dHAtXHUwMDNlcmN2X3d1cCA9IHNlcTtcbiA1NzI6XHRcdFdSSVRFX09OQ0UobmV3dHAtXHUwMDNlY29waWVkX3NlcSwgc2VxKTtcbiA1NzM6XHRcdFdSSVRFX09OQ0UobmV3dHAtXHUwMDNlcmN2X254dCwgc2VxKTtcbiA1NzQ6XHRcdG5ld3RwLVx1MDAzZXNlZ3NfaW4gPSAxO1xuIDU3NTpcdFxuIDU3NjpcdFx0c2VxID0gdHJlcS1cdTAwM2VzbnRfaXNuICYjNDM7IDE7XG4gNTc3Olx0XHRuZXd0cC1cdTAwM2VzbmRfc21sID0gbmV3dHAtXHUwMDNlc25kX3VuYSA9IHNlcTtcbiA1Nzg6XHRcdFdSSVRFX09OQ0UobmV3dHAtXHUwMDNlc25kX254dCwgc2VxKTtcbiA1Nzk6XHRcdG5ld3RwLVx1MDAzZXNuZF91cCA9IHNlcTtcbiA1ODA6XHRcbiA1ODE6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ld3RwLVx1MDAzZXRzcV9ub2RlKTtcbiA1ODI6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ld3RwLVx1MDAzZXRzb3J0ZWRfc2VudF9xdWV1ZSk7XG4gNTgzOlx0XG4gNTg0Olx0XHR0Y3BfaW5pdF93bChuZXd0cCwgdHJlcS1cdTAwM2VyY3ZfaXNuKTtcbiA1ODU6XHRcbiA1ODY6XHRcdG1pbm1heF9yZXNldChcdTAwMjZuZXd0cC1cdTAwM2VydHRfbWluLCB0Y3BfamlmZmllczMyLCB+MFUpO1xuIDU4NzpcdFx0bmV3aWNzay1cdTAwM2VpY3NrX2Fjay5scmN2dGltZSA9IHRjcF9qaWZmaWVzMzI7XG4gNTg4Olx0XG4gNTg5Olx0XHRuZXd0cC1cdTAwM2Vsc25kdGltZSA9IHRjcF9qaWZmaWVzMzI7XG4gNTkwOlx0XHRuZXdzay1cdTAwM2Vza190eGhhc2ggPSBSRUFEX09OQ0UodHJlcS1cdTAwM2V0eGhhc2gpO1xuIDU5MTpcdFx0bmV3dHAtXHUwMDNldG90YWxfcmV0cmFucyA9IHJlcS1cdTAwM2VudW1fcmV0cmFucztcbiA1OTI6XHRcbiA1OTM6XHRcdHRjcF9pbml0X3htaXRfdGltZXJzKG5ld3NrKTtcbiA1OTQ6XHRcdFdSSVRFX09OQ0UobmV3dHAtXHUwMDNld3JpdGVfc2VxLCBuZXd0cC1cdTAwM2VwdXNoZWRfc2VxID0gdHJlcS1cdTAwM2VzbnRfaXNuICYjNDM7IDEpO1xuIDU5NTpcdFxuIDU5NjpcdFx0aWYgKHNvY2tfZmxhZyhuZXdzaywgU09DS19LRUVQT1BFTikpXG4gNTk3Olx0XHRcdHRjcF9yZXNldF9rZWVwYWxpdmVfdGltZXIobmV3c2ssIGtlZXBhbGl2ZV90aW1lX3doZW4obmV3dHApKTtcbiA1OTg6XHRcbiA1OTk6XHRcdG5ld3RwLVx1MDAzZXJ4X29wdC50c3RhbXBfb2sgPSBpcmVxLVx1MDAzZXRzdGFtcF9vaztcbiA2MDA6XHRcdG5ld3RwLVx1MDAzZXJ4X29wdC5zYWNrX29rID0gaXJlcS1cdTAwM2VzYWNrX29rO1xuIDYwMTpcdFx0bmV3dHAtXHUwMDNld2luZG93X2NsYW1wID0gcmVxLVx1MDAzZXJza193aW5kb3dfY2xhbXA7XG4gNjAyOlx0XHRuZXd0cC1cdTAwM2VyY3Zfc3N0aHJlc2ggPSByZXEtXHUwMDNlcnNrX3Jjdl93bmQ7XG4gNjAzOlx0XHRuZXd0cC1cdTAwM2VyY3Zfd25kID0gcmVxLVx1MDAzZXJza19yY3Zfd25kO1xuIDYwNDpcdFx0bmV3dHAtXHUwMDNlcmN2X213bmRfc2VxID0gbmV3dHAtXHUwMDNlcmN2X3d1cCAmIzQzOyByZXEtXHUwMDNlcnNrX3Jjdl93bmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTEwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUQ1AgRUNOIEluaGVyaXRhbmNlIGluIFNvY2tldCBDbG9uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgRUNOIChFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbikgc2V0dGluZ3MgYXJlIGhhbmRsZWQgd2hlbiBhIG5ldyBzb2NrZXQgaXMgY3JlYXRlZCBmcm9tIGEgbGlzdGVuZXIgc29ja2V0IGluIHRoZSBrZXJuZWwuIGBpbmV0X2Nza19jbG9uZV9sb2NrKHNrLCByZXEsIEdGUF9BVE9NSUMpYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBoZWF2eSBsaWZ0aW5nIGhlcmUuIEZyb20gd2hhdCBJIHNlZSwgaXQgY2xvbmVzIGBza2AgdXNpbmcgYHNrX2Nsb25lX2xvY2tgLCB3aGljaCBlc3NlbnRpYWxseSBtZWFucyBhIGBtZW1jcHlgIG9mIHRoZSBlbnRpcmUgYHN0cnVjdCBzb2NrYCwgaW5jbHVkaW5nIHRoZSBlbWJlZGRlZCBgc3RydWN0IHRjcF9zb2NrYCwgZnJvbSB0aGUgbGlzdGVuaW5nIHNvY2tldCBgc2tgIHRvIHRoZSBuZXcgc29ja2V0IGBuZXdza2AuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgdGVsbHMgbWUgdGhhdCBFQ04tcmVsYXRlZCBmaWVsZHMsIHNwZWNpZmljYWxseSBgbmV3dHAtJmd0O2Vjbl9tb2RlYCBhbmQgYG5ld3RwLSZndDtlY25fb3B0aW9uYCwgYXJlIGluaGVyaXRlZCBkaXJlY3RseSBmcm9tIHRoZSBsaXN0ZW5lci4gVGhhdCBpbmhlcml0YW5jZSBzZWVtcyBxdWl0ZSBkaXJlY3QuCgpOb3csIG15IG5leHQgcXVlc3Rpb24gaXMsIGhvdyBhcmUgdGhlc2UgRUNOIHNldHRpbmdzIGV4cG9zZWQgdG8gdXNlciBzcGFjZT8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgZG9fdGNwX2dldHNvY2tvcHRgIGhhbmRsZXMgcmV0cmlldmluZyB0aGVzZSB2YWx1ZXMuIExldCYjMzk7cyBsb29rIGF0IHRoZSBjb2RlOgoKYGBgYwoJY2FzZSBUQ1BfRUNOOgoJCXZhbCA9IFJFQURfT05DRSh0cC0mZ3Q7ZWNuX21vZGUpOwoJCWJyZWFrOwoJY2FzZSBUQ1BfRUNOX09QVElPTjoKCQl2YWwgPSBSRUFEX09OQ0UodHAtJmd0O2Vjbl9vcHRpb24pOwoJCWJyZWFrOwpgYGAKClJpZ2h0LCBpdCB1c2VzIGBSRUFEX09OQ0VgIHRvIGZldGNoIHRoZSB2YWx1ZXMgb2YgYHRwLSZndDtlY25fbW9kZWAgYW5kIGB0cC0mZ3Q7ZWNuX29wdGlvbmAgZnJvbSB0aGUgVENQIGNvbnRyb2wgYmxvY2suIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGp1c3QgYSBkaXJlY3QgcmVhZCBvZiB0aGUgdmFsdWUuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYXJvdW5kIGBkb190Y3BfZ2V0c29ja29wdGAgaW4gYHRjcC5jYCB0byBzZWUgaG93IHRoYXQgYHZhbGAgaXMgdGhlbiByZXR1cm5lZCB0byB0aGUgdXNlci4gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHN5bmNocm9uaXphdGlvbiBvciBtZW1vcnkgb3JkZXJpbmcgaGVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoYXQgdmFsdWUgaXMgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBtdWx0aXRocmVhZGVkIGFjY2VzcyB0byB0aGUgc29ja2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZG9fdGNwX2dldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz00NDIzPXN0cnVjdCBza19idWZmICp0Y3BfZ2V0X3RpbWVzdGFtcGluZ19vcHRfc3RhdHMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ0OTQtXG5uZXQvaXB2NC90Y3AuYzo0NDk1OmludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbm5ldC9pcHY0L3RjcC5jLTQ0OTYtXHRcdCAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcwNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNwZWNpZmllZCBzZWN0aW9ucyBvZiBgbmV0L2lwdjQvdGNwLmNgLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBEZWVwIGludG8gVENQIENvbmdlc3Rpb24gQ29udHJvbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmVmcmVzaCBvdXIgdW5kZXJzdGFuZGluZyBvZiBzb21lIGNvcmUgVENQIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHJlZ2lvbnMgd2l0aGluIGBuZXQvaXB2NC90Y3AuY2AsIG5hbWVseSBsaW5lcyA0NDk1IHRvIDQ1MjAgYW5kIHRoZW4gNDg0MCB0byA0ODcwLiBNeSBmb2N1cyBoZXJlIGlzIGxpa2VseSBhcm91bmQgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbXMuIEZyb20gZXhwZXJpZW5jZSwgdGhvc2UgbGluZSBudW1iZXJzIHVzdWFsbHkgdG91Y2ggb24ga2V5IGFkanVzdG1lbnRzIHRvIHRoZSBUQ1Agd2luZG93IG9yIHJldHJhbnNtaXNzaW9uIGJlaGF2aW9yLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgcmVsYXRlZCB0byBob3cgdGhlIGtlcm5lbCByZXNwb25kcyB0byBwYWNrZXQgbG9zcyBvciBjb25nZXN0aW9uIGV2ZW50cy4gSXTigJlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gYWRqdXN0bWVudHMgdG8gdGhlIGNvbmdlc3Rpb24gd2luZG93LCBzbG93IHN0YXJ0IHRocmVzaG9sZHMsIG9yIHJldHJhbnNtaXNzaW9uIHRpbWVvdXRzLiBJIGFtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgb2YgZGlmZmVyZW50IGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zLCBhcyB0aGUga2VybmVsIGNhbiB1c2Ugc2V2ZXJhbCBkaWZmZXJlbnQgb25lcy4gSSYjMzk7bSBhbHNvIHJlYWR5IHRvIGFuYWx5emUgdGhlIGludHJpY2F0ZSBjYWxjdWxhdGlvbnMgaW52b2x2ZWQgaW4gbWFpbnRhaW5pbmcgYSBnb29kIHRocm91Z2hwdXQuIEkgbWF5IGZpbmQgY29kZSByZWxhdGVkIHRvIHNwZWNpZmljIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zLCBsaWtlIEN1YmljIG9yIEJCUiwgb3IgcG9zc2libHkgdGhlIGNvcmUgbG9naWMgZm9yIFRDUCYjMzk7cyBjb25nZXN0aW9uIGF2b2lkYW5jZS4gSSYjMzk7bGwgbmVlZCB0byB3YXRjaCBmb3IgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgYW55IHVzZSBvZiB0aW1lcnMgYW5kIGFzc29jaWF0ZWQgY29udGV4dCBzd2l0Y2hlcywgYW5kIGFueSB1c2Ugb2Ygc3RhdGlzdGljcy9jb3VudGVycyB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0OTU6XHRpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG40NDk2Olx0XHRcdCAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxuNDQ5NzpcdHtcbjQ0OTg6XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbjQ0OTk6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuNDUwMDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuNDUwMTpcdFx0aW50IHVzZXJfbXNzO1xuNDUwMjpcdFx0aW50IHZhbCwgbGVuO1xuNDUwMzpcdFxuNDUwNDpcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG40NTA1Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuNDUwNjpcdFxuNDUwNzpcdFx0aWYgKGxlbiBcdTAwM2MgMClcbjQ1MDg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NTA5Olx0XG40NTEwOlx0XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGludCkpO1xuNDUxMTpcdFxuNDUxMjpcdFx0c3dpdGNoIChvcHRuYW1lKSB7XG40NTEzOlx0XHRjYXNlIFRDUF9NQVhTRUc6XG40NTE0Olx0XHRcdHZhbCA9IHRwLVx1MDAzZW1zc19jYWNoZTtcbjQ1MTU6XHRcdFx0dXNlcl9tc3MgPSBSRUFEX09OQ0UodHAtXHUwMDNlcnhfb3B0LnVzZXJfbXNzKTtcbjQ1MTY6XHRcdFx0aWYgKHVzZXJfbXNzIFx1MDAyNlx1MDAyNlxuNDUxNzpcdFx0XHQgICAgKCgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IChUQ1BGX0NMT1NFIHwgVENQRl9MSVNURU4pKSlcbjQ1MTg6XHRcdFx0XHR2YWwgPSB1c2VyX21zcztcbjQ1MTk6XHRcdFx0aWYgKHRwLVx1MDAzZXJlcGFpcilcbjQ1MjA6XHRcdFx0XHR2YWwgPSB0cC1cdTAwM2VyeF9vcHQubXNzX2NsYW1wO1xuNDUyMTpcdFx0XHRicmVhaztcbjQ1MjI6XHRcdGNhc2UgVENQX05PREVMQVk6XG40NTIzOlx0XHRcdHZhbCA9ICEhKHRwLVx1MDAzZW5vbmFnbGVcdTAwMjZUQ1BfTkFHTEVfT0ZGKTtcbjQ1MjQ6XHRcdFx0YnJlYWs7XG40NTI1Olx0XHRjYXNlIFRDUF9DT1JLOlxuNDUyNjpcdFx0XHR2YWwgPSAhISh0cC1cdTAwM2Vub25hZ2xlXHUwMDI2VENQX05BR0xFX0NPUkspO1xuNDUyNzpcdFx0XHRicmVhaztcbjQ1Mjg6XHRcdGNhc2UgVENQX0tFRVBJRExFOlxuNDUyOTpcdFx0XHR2YWwgPSBrZWVwYWxpdmVfdGltZV93aGVuKHRwKSAvIEhaO1xuNDUzMDpcdFx0XHRicmVhaztcbjQ1MzE6XHRcdGNhc2UgVENQX0tFRVBJTlRWTDpcbjQ1MzI6XHRcdFx0dmFsID0ga2VlcGFsaXZlX2ludHZsX3doZW4odHApIC8gSFo7XG40NTMzOlx0XHRcdGJyZWFrO1xuNDUzNDpcdFx0Y2FzZSBUQ1BfS0VFUENOVDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2ODcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipEaXZpbmcgaW50byBgZG9fdGNwX2dldHNvY2tvcHRgIC0gTGV0JiMzOTtzIFNlZSBXaGF0JiMzOTtzIGF0IHRoZSBFbmQhKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8ganVtcCByaWdodCB0byB0aGUgZW5kIG9mIGBkb190Y3BfZ2V0c29ja29wdGAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGluc2lkZSBhbmQgb3V0LCBidXQgSSBhbHdheXMgZmluZCBpdCB1c2VmdWwgdG8gcmVmcmVzaCBteSBtZW1vcnkgYnkgcXVpY2tseSByZXZpZXdpbmcgdGhlIHRhaWwgZW5kIG9mIHRoaW5ncyBmaXJzdC4gSXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIG9wZXJhdGlvbiBhbmQgdGhlIHJldHVybiBwYXRoIGFyZSBjbGVhbmx5IGxhaWQgb3V0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHF1aWNrIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhpcyBmdW5jdGlvbiB3cmFwcyB1cCBpdHMgd29yay4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBwcm9jZXNzZXMgdGhlIGRhdGEgYW5kIHNlbmRzIGl0IGJhY2sgdXAgdG8gdGhlIHVzZXItc3BhY2UgcHJvZ3JhbSB0aGF0IG1hZGUgdGhlIGNhbGwuIEl0IGdpdmVzIGEgZ29vZCBzZW5zZSBvZiBob3cgdGhleSBhY3R1YWxseSBpbXBsZW1lbnQgZ2V0c29ja29wdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDg1NTpcdFx0XHRicmVhaztcbjQ4NTY6XHRcdGNhc2UgVENQX0RFTEFDS19NQVhfVVM6XG40ODU3Olx0XHRcdHZhbCA9IGppZmZpZXNfdG9fdXNlY3MoUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2RlbGFja19tYXgpKTtcbjQ4NTg6XHRcdFx0YnJlYWs7XG40ODU5Olx0XHRjYXNlIFRDUF9FQ046XG40ODYwOlx0XHRcdHZhbCA9IFJFQURfT05DRSh0cC1cdTAwM2VlY25fbW9kZSk7XG40ODYxOlx0XHRcdGJyZWFrO1xuNDg2MjpcdFx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcbjQ4NjM6XHRcdFx0dmFsID0gUkVBRF9PTkNFKHRwLVx1MDAzZWVjbl9vcHRpb24pO1xuNDg2NDpcdFx0XHRicmVhaztcbjQ4NjU6XHRcdGRlZmF1bHQ6XG40ODY2Olx0XHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG40ODY3Olx0XHR9XG40ODY4Olx0XG40ODY5Olx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2bGVuLCBzaXplb2YoaW50KSkpXG40ODcwOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuNDg3MTpcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIFx1MDAyNnZhbCwgbGVuKSlcbjQ4NzI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG40ODczOlx0XHRyZXR1cm4gMDtcbjQ4NzQ6XHR9XG40ODc1Olx0XG40ODc2Olx0Ym9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCwgaW50IG9wdG5hbWUpXG40ODc3Olx0e1xuNDg3ODpcdFx0LyogVENQIGRvX3RjcF9nZXRzb2Nrb3B0IGhhcyBvcHRpbWl6ZWQgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvblxuNDg3OTpcdFx0ICogdG8gYXZvaWQgZXh0cmEgc29ja2V0IGxvY2sgZm9yIFRDUF9aRVJPQ09QWV9SRUNFSVZFLlxuNDg4MDpcdFx0ICovXG40ODgxOlx0XHRpZiAobGV2ZWwgPT0gU09MX1RDUCBcdTAwMjZcdTAwMjYgb3B0bmFtZSA9PSBUQ1BfWkVST0NPUFlfUkVDRUlWRSlcbjQ4ODI6XHRcdFx0cmV0dXJuIHRydWU7XG40ODgzOlx0XG40ODg0Olx0XHRyZXR1cm4gZmFsc2U7XG40ODg1Olx0fVxuNDg4NjpcdFxuNDg4NzpcdGludCB0Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsXG40ODg4Olx0XHRcdCAgIGludCBfX3VzZXIgKm9wdGxlbilcbjQ4ODk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEZpbHRlcmluZyBJc3N1ZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBzb2xfdGNwX3NvY2tvcHRgIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGNvbnRleHQuIFdlJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBhbmQgaXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byByZXZpc2l0IHRoZXNlIGFyZWFzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNvY2tldCBvcHRpb25zLiBTb2NrZXQgb3B0aW9ucyBjYW4gaW50ZXJhY3QgaW4gcmVhbGx5IHN1YnRsZSB3YXlzIHdpdGggZmlsdGVyaW5nIG1lY2hhbmlzbXMgYW5kIGl0IHdvdWxkIGJlIGEgc2hhbWUgdG8gbWlzcyBzb21ldGhpbmcgYnkgbm90IGxvb2tpbmcgYXQgdGhpcyBhc3BlY3QsIGV2ZW4gaWYgaXQgc2VlbXMgdW5saWtlbHkuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhpcyBjdXJyZW50IGludmVzdGlnYXRpb24sIGl0IHdvdWxkIGJlIHBydWRlbnQgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aG9zZSBvcHRpb25zIGFuZCBhbnkgZmlsdGVyaW5nIGxvZ2ljIHRoYXQgbWlnaHQgYmUgYXQgcGxheS4gV2Uga25vdyB0aGVzZSBhcmVhcyBjYW4gZ2V0IGNvbXBsZXggcXVpY2tseSwgc28gaXQmIzM5O3MgYmVzdCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTY2MDpcdFx0c3dpdGNoIChvcHRuYW1lKSB7XG41NjYxOlx0XHRjYXNlIFRDUF9OT0RFTEFZOlxuNTY2MjpcdFx0Y2FzZSBUQ1BfTUFYU0VHOlxuNTY2MzpcdFx0Y2FzZSBUQ1BfS0VFUElETEU6XG41NjY0Olx0XHRjYXNlIFRDUF9LRUVQSU5UVkw6XG41NjY1Olx0XHRjYXNlIFRDUF9LRUVQQ05UOlxuNTY2NjpcdFx0Y2FzZSBUQ1BfU1lOQ05UOlxuNTY2NzpcdFx0Y2FzZSBUQ1BfV0lORE9XX0NMQU1QOlxuNTY2ODpcdFx0Y2FzZSBUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFM6XG41NjY5Olx0XHRjYXNlIFRDUF9VU0VSX1RJTUVPVVQ6XG41NjcwOlx0XHRjYXNlIFRDUF9OT1RTRU5UX0xPV0FUOlxuNTY3MTpcdFx0Y2FzZSBUQ1BfU0FWRV9TWU46XG41NjcyOlx0XHRjYXNlIFRDUF9SVE9fTUFYX01TOlxuNTY3MzpcdFx0Y2FzZSBUQ1BfRUNOOlxuNTY3NDpcdFx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcbjU2NzU6XHRcdFx0aWYgKCpvcHRsZW4gIT0gc2l6ZW9mKGludCkpXG41Njc2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41Njc3Olx0XHRcdGJyZWFrO1xuNTY3ODpcdFx0Y2FzZSBUQ1BfQ09OR0VTVElPTjpcbjU2Nzk6XHRcdFx0cmV0dXJuIHNvbF90Y3Bfc29ja29wdF9jb25nZXN0aW9uKHNrLCBvcHR2YWwsIG9wdGxlbiwgZ2V0b3B0KTtcbjU2ODA6XHRcdGNhc2UgVENQX1NBVkVEX1NZTjpcbjU2ODE6XHRcdFx0aWYgKCpvcHRsZW4gXHUwMDNjIDEpXG41NjgyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41NjgzOlx0XHRcdGJyZWFrO1xuNTY4NDpcdFx0ZGVmYXVsdDpcbjU2ODU6XHRcdFx0aWYgKGdldG9wdClcbjU2ODY6XHRcdFx0XHRyZXR1cm4gYnBmX3NvbF90Y3BfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCAqb3B0bGVuKTtcbjU2ODc6XHRcdFx0cmV0dXJuIGJwZl9zb2xfdGNwX3NldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgKm9wdGxlbik7XG41Njg4Olx0XHR9XG41Njg5Olx0XG41NjkwOlx0XHRpZiAoZ2V0b3B0KSB7XG41NjkxOlx0XHRcdGlmIChvcHRuYW1lID09IFRDUF9TQVZFRF9TWU4pIHtcbjU2OTI6XHRcdFx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjU2OTM6XHRcbjU2OTQ6XHRcdFx0XHRpZiAoIXRwLVx1MDAzZXNhdmVkX3N5biB8fFxuNTY5NTpcdFx0XHRcdCAgICAqb3B0bGVuIFx1MDAzZSB0Y3Bfc2F2ZWRfc3luX2xlbih0cC1cdTAwM2VzYXZlZF9zeW4pKVxuNTY5NjpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41Njk3Olx0XHRcdFx0bWVtY3B5KG9wdHZhbCwgdHAtXHUwMDNlc2F2ZWRfc3luLVx1MDAzZWRhdGEsICpvcHRsZW4pO1xuNTY5ODpcdFx0XHRcdC8qIEl0IGNhbm5vdCBmcmVlIHRwLVx1MDAzZXNhdmVkX3N5biBoZXJlIGJlY2F1c2UgaXRcbjU2OTk6XHRcdFx0XHQgKiBkb2VzIG5vdCBrbm93IGlmIHRoZSB1c2VyIHNwYWNlIHN0aWxsIG5lZWRzIGl0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMzNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHNvbF90Y3Bfc29ja29wdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIGBzb2xfdGNwX3NvY2tvcHRgIGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsdGVyIHN0YWNrLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBleGFtaW5lIHRoZSByZXN0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbWVhdCBhbmQgcG90YXRvZXMgLSBob3cgdGhpcyBzb2NrZXQgb3B0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBmaWx0ZXJpbmcgbG9naWMgYW5kIGFueSBwb3RlbnRpYWwgZ290Y2hhcyBvciBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gbXkgd29yay4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIGludGVyYWN0aW9uIG9mIHRoZSBzb2NrZXQgb3B0aW9uIG1lY2hhbmlzbSB3aXRoIHRoZSBmaWx0ZXIgc3Vic3lzdGVtLiBUaGlzIGlzIHRoZSBjb3JyZWN0IGZpbGUgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyB0aGlzIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTcwMDpcdFx0XHRcdCAqL1xuNTcwMTpcdFx0XHRcdHJldHVybiAwO1xuNTcwMjpcdFx0XHR9XG41NzAzOlx0XG41NzA0Olx0XHRcdHJldHVybiBkb190Y3BfZ2V0c29ja29wdChzaywgU09MX1RDUCwgb3B0bmFtZSxcbjU3MDU6XHRcdFx0XHRcdFx0IEtFUk5FTF9TT0NLUFRSKG9wdHZhbCksXG41NzA2Olx0XHRcdFx0XHRcdCBLRVJORUxfU09DS1BUUihvcHRsZW4pKTtcbjU3MDc6XHRcdH1cbjU3MDg6XHRcbjU3MDk6XHRcdHJldHVybiBkb190Y3Bfc2V0c29ja29wdChzaywgU09MX1RDUCwgb3B0bmFtZSxcbjU3MTA6XHRcdFx0XHRcdCBLRVJORUxfU09DS1BUUihvcHR2YWwpLCAqb3B0bGVuKTtcbjU3MTE6XHR9XG41NzEyOlx0XG41NzEzOlx0c3RhdGljIGJvb2wgc2tfYWxsb3dzX3NvbF9pcF9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaylcbjU3MTQ6XHR7XG41NzE1Olx0XHRzd2l0Y2ggKHNrLVx1MDAzZXNrX2ZhbWlseSkge1xuNTcxNjpcdFx0Y2FzZSBBRl9JTkVUOlxuNTcxNzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjU3MTg6XHRcdGNhc2UgQUZfSU5FVDY6XG41NzE5Olx0XHRcdC8qIEFsbG93IGdldHRpbmcvc2V0dGluZyBzb2Nrb3B0IGZvciBwb3NzaWJsZSBpcHY0LW1hcHBlZCBpcHY2IHNvY2tldC4gKi9cbjU3MjA6XHRcdFx0cmV0dXJuIHNrLVx1MDAzZXNrX3R5cGUgIT0gU09DS19SQVcgXHUwMDI2XHUwMDI2ICFpcHY2X29ubHlfc29jayhzayk7XG41NzIxOlx0XHRkZWZhdWx0OlxuNTcyMjpcdFx0XHRyZXR1cm4gZmFsc2U7XG41NzIzOlx0XHR9XG41NzI0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkzMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIFNvY2tldCBPcHRpb24gSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2Ugc29ja2V0IG9wdGlvbiBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBTdGFydGluZyB3aXRoIGBkb190Y3BfZ2V0c29ja29wdGAsIHRoZSBjb3JlIGNvbmNlcm4gaXMgaG93IHRoZSB2YWx1ZSAoYHZhbGApIGlzIGhhbmRsZWQuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGB2YWxgLCBhbiBgaW50YCwgZ2V0cyBhc3NpZ25lZCBmcm9tIGB0cC0mZ3Q7ZWNuX21vZGVgLCB3aGljaCBpcyBhIGB1OGAuIEltcG9ydGFudGx5LCB0aGlzIGFzc2lnbm1lbnQgZnVsbHkgaW5pdGlhbGl6ZXMgYWxsIHRoZSBiaXRzIHdpdGhpbiBgdmFsYCBiZWNhdXNlIG9mIHRoZSBpbXBsaWNpdCB0eXBlIHByb21vdGlvbi4gVGhlIGxlbmd0aCBjaGVjaywgYGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2YoaW50KSlgLCBsb29rcyBnb29kLCBlbnN1cmluZyB3ZSBkb24mIzM5O3QgdHJ5IHRvIGNvcHkgbW9yZSBkYXRhIHRoYW4gZXhwZWN0ZWQuIEZpbmFsbHksIHRoZSBjcml0aWNhbCBgY29weV90b19zb2NrcHRyKG9wdHZhbCwgJmFtcDt2YWwsIGxlbilgIHVzZXMgYGxlbmAgd2hpY2ggaXMgYm91bmQgYnkgYHNpemVvZihpbnQpYCwgc28gd2UmIzM5O3JlIG9ubHkgY29weWluZyBpbml0aWFsaXplZCBiaXRzIG9mIHRoZSBgaW50YCB0byB1c2Vyc3BhY2UuIFNvLCBgZG9fdGNwX2dldHNvY2tvcHRgIGFwcGVhcnMgc2FmZTsgbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIG91dC4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGZvY3VzIHRvIGBkb190Y3Bfc2V0c29ja29wdGAuIFdlIG5lZWQgdG8gZXhhbWluZSBob3cgYHZhbGAgaXMgYWNxdWlyZWQgaW4gdGhpcyBjb250ZXh0LiBUaGUgcHJpb3IgYW5hbHlzaXMgb2YgYGRvX3RjcF9nZXRzb2Nrb3B0YCBzZXRzIHRoZSBzdGFnZSBmb3IgYSBzaW1pbGFyIHJpZ29yb3VzIGNoZWNrIGluIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4NzA6XHRcdFx0Y2hhciBuYW1lW1RDUF9VTFBfTkFNRV9NQVhdO1xuMzg3MTpcdFxuMzg3MjpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyAxKVxuMzg3MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzg3NDpcdFxuMzg3NTpcdFx0XHR2YWwgPSBzdHJuY3B5X2Zyb21fc29ja3B0cihuYW1lLCBvcHR2YWwsXG4zODc2Olx0XHRcdFx0XHRcdG1pbl90KGxvbmcsIFRDUF9VTFBfTkFNRV9NQVggLSAxLFxuMzg3NzpcdFx0XHRcdFx0XHQgICAgICBvcHRsZW4pKTtcbjM4Nzg6XHRcdFx0aWYgKHZhbCBcdTAwM2MgMClcbjM4Nzk6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjM4ODA6XHRcdFx0bmFtZVt2YWxdID0gMDtcbjM4ODE6XHRcbjM4ODI6XHRcdFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xuMzg4MzpcdFx0XHRlcnIgPSB0Y3Bfc2V0X3VscChzaywgbmFtZSk7XG4zODg0Olx0XHRcdHNvY2tvcHRfcmVsZWFzZV9zb2NrKHNrKTtcbjM4ODU6XHRcdFx0cmV0dXJuIGVycjtcbjM4ODY6XHRcdH1cbjM4ODc6XHRcdGNhc2UgVENQX0ZBU1RPUEVOX0tFWToge1xuMzg4ODpcdFx0XHRfX3U4IGtleVtUQ1BfRkFTVE9QRU5fS0VZX0JVRl9MRU5HVEhdO1xuMzg4OTpcdFx0XHRfX3U4ICpiYWNrdXBfa2V5ID0gTlVMTDtcbjM4OTA6XHRcbjM4OTE6XHRcdFx0LyogQWxsb3cgYSBiYWNrdXAga2V5IGFzIHdlbGwgdG8gZmFjaWxpdGF0ZSBrZXkgcm90YXRpb25cbjM4OTI6XHRcdFx0ICogRmlyc3Qga2V5IGlzIHRoZSBhY3RpdmUgb25lLlxuMzg5MzpcdFx0XHQgKi9cbjM4OTQ6XHRcdFx0aWYgKG9wdGxlbiAhPSBUQ1BfRkFTVE9QRU5fS0VZX0xFTkdUSCBcdTAwMjZcdTAwMjZcbjM4OTU6XHRcdFx0ICAgIG9wdGxlbiAhPSBUQ1BfRkFTVE9QRU5fS0VZX0JVRl9MRU5HVEgpXG4zODk2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zODk3Olx0XG4zODk4Olx0XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihrZXksIG9wdHZhbCwgb3B0bGVuKSlcbjM4OTk6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjM5MDA6XHRcbjM5MDE6XHRcdFx0aWYgKG9wdGxlbiA9PSBUQ1BfRkFTVE9QRU5fS0VZX0JVRl9MRU5HVEgpXG4zOTAyOlx0XHRcdFx0YmFja3VwX2tleSA9IGtleSAmIzQzOyBUQ1BfRkFTVE9QRU5fS0VZX0xFTkdUSDtcbjM5MDM6XHRcbjM5MDQ6XHRcdFx0cmV0dXJuIHRjcF9mYXN0b3Blbl9yZXNldF9jaXBoZXIobmV0LCBzaywga2V5LCBiYWNrdXBfa2V5KTtcbjM5MDU6XHRcdH1cbjM5MDY6XHRcdGRlZmF1bHQ6XG4zOTA3Olx0XHRcdC8qIGZhbGx0aHJ1ICovXG4zOTA4Olx0XHRcdGJyZWFrO1xuMzkwOTpcdFx0fVxuMzkxMDpcdFxuMzkxMTpcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4zOTEyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzkxMzpcdFxuMzkxNDpcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNnZhbCwgb3B0dmFsLCBzaXplb2YodmFsKSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDQ0CgkJCQkJCQlvdXRwdXQ6IDI0OQoJCQkJCQkJdGhvdWdodHM6IDExNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVENQIEVDTiBTb2NrZXQgT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB0YXNrIGlzIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggcmVxdWlyZXMgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBvciBub3QuCgpGaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBzb2NrZXQgb3B0aW9ucywgYFRDUF9FQ05gIGFuZCBgVENQX0VDTl9PUFRJT05gLiBUaGVzZSBhbGxvdyBmb3IgcGVyLXNvY2tldCBvdmVycmlkZXMgb2YgdGhlIHN5c3RlbS13aWRlIEVDTiBzZXR0aW5ncyBjb250cm9sbGVkIGJ5IGBzeXNjdGxfdGNwX2VjbmAgYW5kIGBzeXNjdGxfdGNwX2Vjbl9vcHRpb25gLCByZXNwZWN0aXZlbHkuICBJIHNlZSB0aGF0IGluIGBkb190Y3Bfc2V0c29ja29wdGAsIHRoZXJlJiMzOTtzIHByb3BlciB0eXBlIHZhbGlkYXRpb24sIHJhbmdlIGNoZWNrcyBhbmQgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBmaWVsZHMgYGVjbl9tb2RlYCBhbmQgYGVjbl9vcHRpb25gLiAgSSBjaGVja2VkIHRoYXQgYGNvcHlfZnJvbV9zb2NrcHRyYCBpcyBjb3JyZWN0bHkgdXNlZCwgZW5zdXJpbmcgZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHNhZmVseS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgb3B0aW9ucyBhcmUgdXNlZC4gSSBpZGVudGlmaWVkIGFsbCB1c2VzIG9mIGBlY25fbW9kZWAsIGBlY25fb3B0aW9uYCwgYHRjcF9lY25fbW9kZV9lZmZgLCBhbmQgYHRjcF9hY2NlY25fb3B0aW9uX2VmZmAgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgY29kZSBzZWVtcyBjbGVhbiBhbmQgbG9naWNhbGx5IHNvdW5kLCB3aXRoIG5vIG9idmlvdXMgaXNzdWVzLiAgSSB3ZW50IHRocm91Z2ggYWxsIHRoZSBsb2NhdGlvbnMsIGluY2x1ZGluZyBgaW5jbHVkZS9uZXQvdGNwX2Vjbi5oYCwgYHRjcF9lY25fc2VuZF9zeW5gLCBhbmQgdmFyaW91cyBwYXJ0cyBvZiBgdGNwX291dHB1dC5jYC4gRXZlcnl0aGluZyBzZWVtcyB0byBiZSB3ZWxsLWRlZmluZWQgYW5kIGhhbmRsZWQgaW4gYSBjb250cm9sbGVkIG1hbm5lci4KClRoZSBjcnVjaWFsIHBhcnQgaXMgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGV4aXN0LiBJIGNvbmZpcm1lZCB0aGF0IGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW4gYHRjcF9pbml0X3NvY2soKWAgdG8gYFRDUF9FQ05fTU9ERV9VTlNQRUNgIGFuZCBgVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDYCByZXNwZWN0aXZlbHkuIGBkb190Y3BfZ2V0c29ja29wdGAgYXNzaWducyB0aGUgdmFsdWUgdG8gYSBsb2NhbCBgaW50IHZhbGAgYmVmb3JlIGNvcHlpbmcgaXQgdG8gdXNlcnNwYWNlLCB0aHVzIGVsaW1pbmF0aW5nIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQlBGIHNvY2tvcHRzIGFyZSBhbHNvIGNhcmVmdWxseSBoYW5kbGVkLiAgVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvbiB0aGUgaGVhcCwgc3RhY2ssIG9yIHdpdGhpbiBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMuIFRoZXJlIGlzIG5vIHBhZGRpbmcgY29uY2VybiBlaXRoZXIuCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbGxlZCBkYXRhIGZsb3csIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBBbnkgY29uY2VybnMgd2l0aCBib3VuZGFyeSBjb25kaXRpb25zLCByYW5nZSBsaW1pdHMgb3Igb3RoZXIgbG9naWMgZXJyb3JzIGFyZSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpLCBMT0NLREVQIG9yIGdlbmVyYWwgY29kZSByZXZpZXc7IHRoZXNlIGFyZW4mIzM5O3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQmIzM5O3MgYSBjbGVhbiBwYXRjaCB0aGF0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBJJiMzOTtsbCBtYWtlIGEgbm90ZSBvZiBteSByZWFzb25pbmcgZm9yIGNvbnRyYXN0aW5nIEtNU0FOIGFuZCBLQVNBTi4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwZXItc29ja2V0IEVDTiBhbmQgQWNjRUNOIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoVENQX0VDTiBhbmQgVENQX0VDTl9PUFRJT04pIHZpYSBzZXRzb2Nrb3B0L2dldHNvY2tvcHQgYW5kIEJQRiBzb2Nrb3BzLCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgc3lzY3Rscy5cblxuS01TQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcbi0gVGhlIG5ldyBmaWVsZHMgYGVjbl9tb2RlYCBhbmQgYGVjbl9vcHRpb25gIGluIGBzdHJ1Y3QgdGNwX3NvY2tgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBUQ1BfRUNOX01PREVfVU5TUEVDYCBhbmQgYFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQ2AgaW4gYHRjcF9pbml0X3NvY2soKWAgYW5kIGNvcGllZCBhY3Jvc3Mgc29ja2V0IGNsb25lcy5cbi0gSW4gYGRvX3RjcF9nZXRzb2Nrb3B0KClgLCByZWFkaW5nIHRoZXNlIGZpZWxkcyBpbml0aWFsaXplcyB0aGUgZnVsbCBgaW50IHZhbGAgYmVmb3JlIGBjb3B5X3RvX3NvY2twdHIoKWAgY29waWVzIHRoZSBkYXRhIHRvIHVzZXIgc3BhY2UuIE5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgYnl0ZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cbi0gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBidWZmZXIgbGVuZ3RoIG1hbmlwdWxhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIHRoZSBjaGFuZ2VzIHByZXNlbnQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBlci1zb2NrZXQgRUNOIGFuZCBBY2NFQ04gY29uZmlndXJhdGlvbiBvcHRpb25zIChUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTikgdmlhIHNldHNvY2tvcHQvZ2V0c29ja29wdCBhbmQgQlBGIHNvY2tvcHMsIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBzeXNjdGxzLlxuXG5LTVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSBUaGUgbmV3IGZpZWxkcyBgZWNuX21vZGVgIGFuZCBgZWNuX29wdGlvbmAgaW4gYHN0cnVjdCB0Y3Bfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFRDUF9FQ05fTU9ERV9VTlNQRUNgIGFuZCBgVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDYCBpbiBgdGNwX2luaXRfc29jaygpYCBhbmQgY29waWVkIGFjcm9zcyBzb2NrZXQgY2xvbmVzLlxuLSBJbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAsIHJlYWRpbmcgdGhlc2UgZmllbGRzIGluaXRpYWxpemVzIHRoZSBmdWxsIGBpbnQgdmFsYCBiZWZvcmUgYGNvcHlfdG9fc29ja3B0cigpYCBjb3BpZXMgdGhlIGRhdGEgdG8gdXNlciBzcGFjZS4gTm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBzdGFjayBieXRlcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxuLSBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGJ1ZmZlciBsZW5ndGggbWFuaXB1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYXMgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6MTQuNzk0MDczOTQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NzU3Mjg2OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fdGNwX3NldHNvY2tvcHRcIixcbiAgICBcImRvX3RjcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJ0Y3BfY29ubl9yZXF1ZXN0XCIsXG4gICAgXCJ0Y3BfbWFrZV9zeW5hY2tcIixcbiAgICBcInRjcF9jb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1zb2NrZXQgRUNOIGFuZCBBY2NFQ04gY29uZmlndXJhdGlvbiBvcHRpb25zIChUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTikgdmlhIHNldHNvY2tvcHQvZ2V0c29ja29wdCBhbmQgQlBGIHNvY2tvcHMsIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBzeXNjdGxzLlxcblxcbktNU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XFxuLSBUaGUgbmV3IGZpZWxkcyBgZWNuX21vZGVgIGFuZCBgZWNuX29wdGlvbmAgaW4gYHN0cnVjdCB0Y3Bfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFRDUF9FQ05fTU9ERV9VTlNQRUNgIGFuZCBgVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDYCBpbiBgdGNwX2luaXRfc29jaygpYCBhbmQgY29waWVkIGFjcm9zcyBzb2NrZXQgY2xvbmVzLlxcbi0gSW4gYGRvX3RjcF9nZXRzb2Nrb3B0KClgLCByZWFkaW5nIHRoZXNlIGZpZWxkcyBpbml0aWFsaXplcyB0aGUgZnVsbCBgaW50IHZhbGAgYmVmb3JlIGBjb3B5X3RvX3NvY2twdHIoKWAgY29waWVzIHRoZSBkYXRhIHRvIHVzZXIgc3BhY2UuIE5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgYnl0ZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgYnVmZmVyIGxlbmd0aCBtYW5pcHVsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBpbnRyb2R1Y2VkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIHRoZSBjaGFuZ2VzIHByZXNlbnQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTiBzb2NrZXQgb3B0aW9ucyB0byBhbGxvdyBwZXItc29ja2V0IGNvbmZpZ3VyYXRpb24gYW5kIG92ZXJyaWRlIG9mIHRoZSB0Y3BfZWNuIGFuZCB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgc2V0dGluZ3MuIEl0IG1vZGlmaWVzIFRDUCBzb2NrZXQgb3B0aW9ucyBoYW5kbGluZyAoZ2V0c29ja29wdC9zZXRzb2Nrb3B0KSwgQlBGIHNvY2tvcHQgZmlsdGVycywgVENQIFNZTi9TWU4tQUNLIG9wdGlvbiBnZW5lcmF0aW9uLCBhbmQgVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBwcm9jZXNzaW5nIGluIHRoZSBjb3JlIElQdjQvVENQIG5ldHdvcmtpbmcgc3RhY2suXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA2OjE0Ljc5NDA3OTE1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwNTk5MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjMwNGQwNGM2MzdiY2I0YTBlNDI0ZWU0Zjc1NGQ4MzRhMzk5MjAxNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOTowNjoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uMmU1NWQ5ZTJlYjA5YSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuQEAgLTUyOCw2ICs1MjgsNDMgQEAgdGNwX2Vjbl9mYWxsYmFjayAtIEJPT0xFQU5cXG4gXFxuIFxcdERlZmF1bHQ6IDEgKGVuYWJsZWQpXFxuIFxcbit0Y3BfZWNuIChzb2NrZXQgb3B0aW9uKSAtIFRDUF9FQ05cXG4rXFx0UGVyLXNvY2tldCBjb250cm9sIG9mIEVDTiBtb2RlLCBhbGxvd2luZyBwZXItY29ubmVjdGlvbiBvdmVycmlkZSBvZiB0aGVcXG4rXFx0dGNwX2VjbiBzeXNjdGwgc2V0dGluZy4gVGhpcyBlbmFibGVzIEw0UyAoTG93IExhdGVuY3ksIExvdyBMb3NzLCBTY2FsYWJsZVxcbitcXHRUaHJvdWdocHV0KSBjb25maWd1cmF0aW9uIG9uIGEgcGVyLXNvY2tldCBiYXNpcy5cXG4rXFxuK1xcdFNldHRpbmcgdGhpcyBzb2NrZXQgb3B0aW9uIHRvIGFueSB2YWx1ZSBleGNlcHQgMjU1IHdpbGwgb3ZlcnJpZGUgdGhlXFxuK1xcdHN5c3RlbS13aWRlIHRjcF9lY24gc3lzY3RsIGZvciB0aGF0IHBhcnRpY3VsYXIgc29ja2V0LiBBIHZhbHVlIG9mIDI1NVxcbitcXHQoVENQX0VDTl9NT0RFX1VOU1BFQykgbWVhbnMgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBzeXNjdGwgdmFsdWUuXFxuK1xcbitcXHRQb3NzaWJsZSB2YWx1ZXM6IDAtNSAoc2VlIHRjcF9lY24gc3lzY3RsIGRlc2NyaXB0aW9uIGFib3ZlKSwgb3IgMjU1IHRvXFxuK1xcdHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgKHN5c2N0bF90Y3BfZWNuKS5cXG4rXFxuK1xcdEV4YW1wbGU6OlxcbitcXG4rXFx0XFx0aW50IHZhbCA9IDM7ICAvKiBBY2NFQ04gbW9kZSAqL1xcbitcXHRcXHRzZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfRUNOLCBcXHUwMDI2dmFsLCBzaXplb2YodmFsKSk7XFxuK1xcbitcXHREZWZhdWx0OiAyNTUgKHVuc3BlY2lmaWVkIC0gdXNlcyB0Y3BfZWNuIHN5c2N0bCB2YWx1ZSlcXG4rXFxuK3RjcF9lY25fb3B0aW9uIChzb2NrZXQgb3B0aW9uKSAtIFRDUF9FQ05fT1BUSU9OXFxuK1xcdFBlci1zb2NrZXQgY29udHJvbCBvZiBBY2N1cmF0ZSBFQ04gKEFjY0VDTikgb3B0aW9uIHNlbmRpbmcgYmVoYXZpb3IsXFxuK1xcdGFsbG93aW5nIHBlci1jb25uZWN0aW9uIG92ZXJyaWRlIG9mIHRoZSB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgc2V0dGluZy5cXG4rXFxuK1xcdFNldHRpbmcgdGhpcyBzb2NrZXQgb3B0aW9uIHRvIGFueSB2YWx1ZSBleGNlcHQgMjU1IHdpbGwgb3ZlcnJpZGUgdGhlXFxuK1xcdHN5c3RlbS13aWRlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBmb3IgdGhhdCBwYXJ0aWN1bGFyIHNvY2tldC4gQSB2YWx1ZSBvZlxcbitcXHQyNTUgKFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQykgbWVhbnMgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBzeXNjdGwgdmFsdWUuXFxuK1xcbitcXHRQb3NzaWJsZSB2YWx1ZXM6IDAtMyAoc2VlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBkZXNjcmlwdGlvbiBhYm92ZSksIG9yIDI1NVxcbitcXHR0byB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IChzeXNjdGxfdGNwX2Vjbl9vcHRpb24pLlxcbitcXG4rXFx0RXhhbXBsZTo6XFxuK1xcbitcXHRcXHRpbnQgdmFsID0gMjsgIC8qIFNlbmQgQWNjRUNOIG9wdGlvbiBvbiBldmVyeSBwYWNrZXQgKi9cXG4rXFx0XFx0c2V0c29ja29wdChmZCwgU09MX1RDUCwgVENQX0VDTl9PUFRJT04sIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpKTtcXG4rXFxuK1xcdERlZmF1bHQ6IDI1NSAodW5zcGVjaWZpZWQgLSB1c2VzIHRjcF9lY25fb3B0aW9uIHN5c2N0bCB2YWx1ZSlcXG4rXFxuIHRjcF9mYWNrIC0gQk9PTEVBTlxcbiBcXHRUaGlzIGlzIGEgbGVnYWN5IG9wdGlvbiwgaXQgaGFzIG5vIGVmZmVjdCBhbnltb3JlLlxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmhcXG5pbmRleCA2YThjNzc3MTkzMjJmLi43Y2IxZTc2NWY0NjE4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdGNwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oXFxuQEAgLTI4OSw2ICsyODksMTMgQEAgc3RydWN0IHRjcF9zb2NrIHtcXG4gXFx0XFx0XFx0XFx0XFx0ICogc2Fja2VkX291dCBcXHUwMDNlIDApXFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHR1OFxcdGVjbl9mbGFncztcXHQvKiBFQ04gc3RhdHVzIGJpdHMuXFx0XFx0XFx0Ki9cXG4rXFx0dThcXHRlY25fbW9kZTtcXHQvKiBQZXItc29ja2V0IEVDTiBtb2RlIG92ZXJyaWRlXFxuK1xcdFxcdFxcdFxcdCAqIChUQ1BfRUNOX01PREVfVU5TUEVDID0gdXNlIHN5c2N0bClcXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdHU4XFx0ZWNuX29wdGlvbjtcXHQvKiBQZXItc29ja2V0IEFjY0VDTiBvcHRpb24gb3ZlcnJpZGVcXG4rXFx0XFx0XFx0XFx0ICogKFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyA9IHVzZSBzeXNjdGwpXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXG4gXFx0X19jYWNoZWxpbmVfZ3JvdXBfZW5kKHRjcF9zb2NrX3dyaXRlX3R4KTtcXG4gXFxuIFxcdC8qIFRYUlggcmVhZC13cml0ZSBob3RwYXRoIGNhY2hlIGxpbmVzICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcF9lY24uaCBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaFxcbmluZGV4IDg2NWQ1YzVhNzcxOGQuLjkzMWUwODc3MTc2YzcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvdGNwX2Vjbi5oXFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwX2Vjbi5oXFxuQEAgLTIyLDYgKzIyLDcgQEAgZW51bSB0Y3BfZWNuX21vZGUge1xcbiBcXHRUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfQUNDRUNOID0gMyxcXG4gXFx0VENQX0VDTl9JTl9BQ0NFQ05fT1VUX0VDTiA9IDQsXFxuIFxcdFRDUF9FQ05fSU5fQUNDRUNOX09VVF9OT0VDTiA9IDUsXFxuK1xcdFRDUF9FQ05fTU9ERV9VTlNQRUMgPSAyNTUsXFx0LyogVXNlIHN5c2N0bCBkZWZhdWx0IChwZXItc29ja2V0KSAqL1xcbiB9O1xcbiBcXG4gLyogQWNjRUNOIG9wdGlvbiBzZW5kaW5nIHdoZW4gQWNjRUNOIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBuZWdvdGlhdGVkICovXFxuQEAgLTMwLDggKzMxLDI5IEBAIGVudW0gdGNwX2FjY2Vjbl9vcHRpb24ge1xcbiBcXHRUQ1BfQUNDRUNOX09QVElPTl9NSU5JTVVNID0gMSxcXG4gXFx0VENQX0FDQ0VDTl9PUFRJT05fRlVMTCA9IDIsXFxuIFxcdFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QgPSAzLFxcbitcXHRUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgPSAyNTUsXFx0LyogVXNlIHN5c2N0bCBkZWZhdWx0IChwZXItc29ja2V0KSAqL1xcbiB9O1xcbiBcXG4rLyogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIEVDTiBtb2RlOiBwZXItc29ja2V0IG92ZXJyaWRlIG9yIHN5c2N0bCBmYWxsYmFjayAqL1xcbitzdGF0aWMgaW5saW5lIHU4IHRjcF9lY25fbW9kZV9lZmYoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHU4IG1vZGUgPSB0Y3Bfc2soc2spLVxcdTAwM2VlY25fbW9kZTtcXG4rXFxuK1xcdGlmIChtb2RlID09IFRDUF9FQ05fTU9ERV9VTlNQRUMpXFxuK1xcdFxcdHJldHVybiBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVxcdTAwM2VpcHY0LnN5c2N0bF90Y3BfZWNuKTtcXG4rXFx0cmV0dXJuIG1vZGU7XFxuK31cXG4rXFxuKy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBBY2NFQ04gb3B0aW9uOiBwZXItc29ja2V0IG92ZXJyaWRlIG9yIHN5c2N0bCBmYWxsYmFjayAqL1xcbitzdGF0aWMgaW5saW5lIHU4IHRjcF9hY2NlY25fb3B0aW9uX2VmZihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0dTggb3B0ID0gdGNwX3NrKHNrKS1cXHUwMDNlZWNuX29wdGlvbjtcXG4rXFxuK1xcdGlmIChvcHQgPT0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDKVxcbitcXHRcXHRyZXR1cm4gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pO1xcbitcXHRyZXR1cm4gb3B0O1xcbit9XFxuK1xcbiAvKiBBcHBseSBlaXRoZXIgRUNUKDApIG9yIEVDVCgxKSBiYXNlZCBvbiBUQ1BfQ09OR19FQ1RfMV9ORUdPVElBVElPTiBmbGFnICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBJTkVUX0VDTl94bWl0X2VjdF8xX25lZ290aWF0aW9uKHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbkBAIC01OTksNyArNjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRjcF9lY25fc2VuZF9zeW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4gXFx0Ym9vbCBicGZfbmVlZHNfZWNuID0gdGNwX2JwZl9jYV9uZWVkc19lY24oc2spO1xcbiBcXHRib29sIHVzZV9lY24sIHVzZV9hY2NlY247XFxuLVxcdHU4IHRjcF9lY24gPSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVxcdTAwM2VpcHY0LnN5c2N0bF90Y3BfZWNuKTtcXG4rXFx0dTggdGNwX2VjbiA9IHRjcF9lY25fbW9kZV9lZmYoc2spO1xcbiBcXG4gXFx0dXNlX2FjY2VjbiA9IHRjcF9lY24gPT0gVENQX0VDTl9JTl9BQ0NFQ05fT1VUX0FDQ0VDTiB8fFxcbiBcXHRcXHQgICAgIHRjcF9jYV9uZWVkc19hY2NlY24oc2spO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5pbmRleCA3MzJiMzVjYzA4ZDFjLi5jNThiMTYzM2JiNDZlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbkBAIC0yOTg1LDcgKzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7XFxuICAqIFxcdFxcdCAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosXFxuICAqIFxcdFxcdCAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosXFxuICAqIFxcdFxcdCAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKixcXG4tICpcXHRcXHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLlxcbisgKlxcdFxcdCAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiosXFxuKyAqXFx0XFx0ICAqKlRDUF9FQ04qKiwgKipUQ1BfRUNOX09QVElPTioqLlxcbiAgKiBcXHRcXHQqICoqSVBQUk9UT19JUCoqLCB3aGljaCBzdXBwb3J0cyAqb3B0bmFtZSogKipJUF9UT1MqKi5cXG4gICogXFx0XFx0KiAqKklQUFJPVE9fSVBWNioqLCB3aGljaCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nICpvcHRuYW1lKlxcXFwgczpcXG4gICogXFx0XFx0ICAqKklQVjZfVENMQVNTKiosICoqSVBWNl9BVVRPRkxPV0xBQkVMKiouXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaCBiL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxcbmluZGV4IDAzNzcyZGQ0ZDM5OTIuLjAxZWJiMzQ4YmEyNzQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXFxuQEAgLTE0Miw2ICsxNDIsOCBAQCBlbnVtIHtcXG4gI2RlZmluZSBUQ1BfUlRPX01BWF9NU1xcdFxcdDQ0XFx0LyogbWF4IHJ0byB0aW1lIGluIG1zICovXFxuICNkZWZpbmUgVENQX1JUT19NSU5fVVNcXHRcXHQ0NVxcdC8qIG1pbiBydG8gdGltZSBpbiB1cyAqL1xcbiAjZGVmaW5lIFRDUF9ERUxBQ0tfTUFYX1VTXFx0NDZcXHQvKiBtYXggZGVsYXllZCBhY2sgdGltZSBpbiB1cyAqL1xcbisjZGVmaW5lIFRDUF9FQ05cXHRcXHRcXHQ0N1xcdC8qIFBlci1zb2NrZXQgRUNOIG1vZGUgKDAtNSwgMjU1PXVzZSBzeXNjdGwpICovXFxuKyNkZWZpbmUgVENQX0VDTl9PUFRJT05cXHRcXHQ0OFxcdC8qIFBlci1zb2NrZXQgQWNjRUNOIG9wdGlvbiAoMC0zLCAyNTU9dXNlIHN5c2N0bCkgKi9cXG4gXFxuICNkZWZpbmUgVENQX1JFUEFJUl9PTlxcdFxcdDFcXG4gI2RlZmluZSBUQ1BfUkVQQUlSX09GRlxcdFxcdDBcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjk5M2IzMWUxMGI5NDQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC01NjcwLDYgKzU2NzAsOCBAQCBzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbiBcXHRjYXNlIFRDUF9OT1RTRU5UX0xPV0FUOlxcbiBcXHRjYXNlIFRDUF9TQVZFX1NZTjpcXG4gXFx0Y2FzZSBUQ1BfUlRPX01BWF9NUzpcXG4rXFx0Y2FzZSBUQ1BfRUNOOlxcbitcXHRjYXNlIFRDUF9FQ05fT1BUSU9OOlxcbiBcXHRcXHRpZiAoKm9wdGxlbiAhPSBzaXplb2YoaW50KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGJyZWFrO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXFxuaW5kZXggMWM4NjdhMzAyNDQ0Ni4uZmIzNzZhOTdmMGU2ZCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xcbisrKyBiL25ldC9pcHY0L3RjcC5jXFxuQEAgLTQ2Myw2ICs0NjMsOCBAQCB2b2lkIHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbiBcXG4gXFx0dHAtXFx1MDAzZXRzb2Zmc2V0ID0gMDtcXG4gXFx0dHAtXFx1MDAzZXJhY2sucmVvX3duZF9zdGVwcyA9IDE7XFxuK1xcdHRwLVxcdTAwM2VlY25fbW9kZSA9IFRDUF9FQ05fTU9ERV9VTlNQRUM7XFxuK1xcdHRwLVxcdTAwM2VlY25fb3B0aW9uID0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDO1xcbiBcXG4gXFx0c2stXFx1MDAzZXNrX3dyaXRlX3NwYWNlID0gc2tfc3RyZWFtX3dyaXRlX3NwYWNlO1xcbiBcXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1VTRV9XUklURV9RVUVVRSk7XFxuQEAgLTQxNjAsNiArNDE2MiwxOCBAQCBpbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHR0Y3BfZW5hYmxlX3R4X2RlbGF5KHNrLCB2YWwpO1xcbiBcXHRcXHRXUklURV9PTkNFKHRwLVxcdTAwM2V0Y3BfdHhfZGVsYXksIHZhbCk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFRDUF9FQ046XFxuK1xcdFxcdGlmICh2YWwgIT0gVENQX0VDTl9NT0RFX1VOU1BFQyBcXHUwMDI2XFx1MDAyNiAodmFsIFxcdTAwM2MgMCB8fCB2YWwgXFx1MDAzZSBUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfTk9FQ04pKVxcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UodHAtXFx1MDAzZWVjbl9tb2RlLCB2YWwpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcXG4rXFx0XFx0aWYgKHZhbCAhPSBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgXFx1MDAyNlxcdTAwMjYgKHZhbCBcXHUwMDNjIDAgfHwgdmFsIFxcdTAwM2UgVENQX0FDQ0VDTl9PUFRJT05fUEVSU0lTVCkpXFxuK1xcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0V1JJVEVfT05DRSh0cC1cXHUwMDNlZWNuX29wdGlvbiwgdmFsKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGVyciA9IC1FTk9QUk9UT09QVDtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTQ4NDIsNiArNDg1NiwxMiBAQCBpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXFxuIFxcdGNhc2UgVENQX0RFTEFDS19NQVhfVVM6XFxuIFxcdFxcdHZhbCA9IGppZmZpZXNfdG9fdXNlY3MoUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19kZWxhY2tfbWF4KSk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFRDUF9FQ046XFxuK1xcdFxcdHZhbCA9IFJFQURfT05DRSh0cC1cXHUwMDNlZWNuX21vZGUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcXG4rXFx0XFx0dmFsID0gUkVBRF9PTkNFKHRwLVxcdTAwM2VlY25fb3B0aW9uKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuIFxcdH1cXG5AQCAtNTI1Niw2ICs1Mjc2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHRjcF9zdHJ1Y3RfY2hlY2sodm9pZClcXG4gXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgdHNvcnRlZF9zZW50X3F1ZXVlKTtcXG4gXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgaGlnaGVzdF9zYWNrKTtcXG4gXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX2ZsYWdzKTtcXG4rXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX21vZGUpO1xcbitcXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fb3B0aW9uKTtcXG4gXFxuIFxcdC8qIFRYUlggcmVhZC13cml0ZSBob3RwYXRoIGNhY2hlIGxpbmVzICovXFxuIFxcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHhyeCwgcHJlZF9mbGFncyk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG5pbmRleCAwZjYwYTFkYmY5Mjc0Li4wMDQzYjRiMmJjOTIyIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG5AQCAtNzQ1NywxMyArNzQ1NywxMiBAQCBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpO1xcbi1cXHRjb25zdCBzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChsaXN0ZW5fc2spO1xcbiBcXHRib29sIHRoX2VjbiA9IHRoLVxcdTAwM2VlY2UgXFx1MDAyNlxcdTAwMjYgdGgtXFx1MDAzZWN3cjtcXG4gXFx0Ym9vbCBlY3QsIGVjbl9vaztcXG4gXFx0dTMyIGVjbl9va19kc3Q7XFxuIFxcbiBcXHRpZiAodGNwX2FjY2Vjbl9zeW5fcmVxdWVzdGVkKHRoKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY24pIFxcdTAwM2U9IDMgfHxcXG4rXFx0ICAgICh0Y3BfZWNuX21vZGVfZWZmKGxpc3Rlbl9zaykgXFx1MDAzZT0gMyB8fFxcbiBcXHQgICAgIHRjcF9jYV9uZWVkc19hY2NlY24obGlzdGVuX3NrKSkpIHtcXG4gXFx0XFx0aW5ldF9yc2socmVxKS1cXHUwMDNlZWNuX29rID0gMTtcXG4gXFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2VhY2NlY25fb2sgPSAxO1xcbkBAIC03NDc3LDcgKzc0NzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFxuIFxcdGVjdCA9ICFJTkVUX0VDTl9pc19ub3RfZWN0KFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlaXBfZHNmaWVsZCk7XFxuIFxcdGVjbl9va19kc3QgPSBkc3RfZmVhdHVyZShkc3QsIERTVF9GRUFUVVJFX0VDTl9NQVNLKTtcXG4tXFx0ZWNuX29rID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2VjbikgfHwgZWNuX29rX2RzdDtcXG4rXFx0ZWNuX29rID0gdGNwX2Vjbl9tb2RlX2VmZihsaXN0ZW5fc2spIHx8IGVjbl9va19kc3Q7XFxuIFxcbiBcXHRpZiAoKCghZWN0IHx8IHRoLVxcdTAwM2VyZXMxIHx8IHRoLVxcdTAwM2VhZSkgXFx1MDAyNlxcdTAwMjYgZWNuX29rKSB8fFxcbiBcXHQgICAgdGNwX2NhX25lZWRzX2VjbihsaXN0ZW5fc2spIHx8XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xcbmluZGV4IDAwNDE3YTQyOTIyMjUuLjgyYjk2YzQwMTVmZDAgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXFxuQEAgLTEwNDUsNyArMTA0NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHVubGlrZWx5KChUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXRjcF9mbGFncyBcXHUwMDI2IFRDUEhEUl9BQ0spIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgdGNwX2Vjbl9tb2RlX2FjY2Vjbih0cCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICBpbmV0X2NzayhzayktXFx1MDAzZWljc2tfcmV0cmFuc21pdHMgXFx1MDAzYyAyIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIHJlbWFpbmluZyBcXHUwMDNlPSBUQ1BPTEVOX0FDQ0VDTl9CQVNFKSkge1xcbiBcXHRcXHRvcHRzLVxcdTAwM2V1c2Vfc3luYWNrX2Vjbl9ieXRlcyA9IDE7XFxuIFxcdFxcdHJlbWFpbmluZyAtPSB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKG9wdHMsIDAsIHJlbWFpbmluZyk7XFxuQEAgLTExMzMsNyArMTEzMyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gXFx0c21jX3NldF9vcHRpb25fY29uZCh0Y3Bfc2soc2spLCBpcmVxLCBvcHRzLCBcXHUwMDI2cmVtYWluaW5nKTtcXG4gXFxuIFxcdGlmICh0cmVxLVxcdTAwM2VhY2NlY25fb2sgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIFJFQURfT05DRShzb2NrX25ldChzayktXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgc3luYWNrX3R5cGUgIT0gVENQX1NZTkFDS19SRVRSQU5TIFxcdTAwMjZcXHUwMDI2IHJlbWFpbmluZyBcXHUwMDNlPSBUQ1BPTEVOX0FDQ0VDTl9CQVNFKSB7XFxuIFxcdFxcdG9wdHMtXFx1MDAzZXVzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTtcXG4gXFx0XFx0cmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTtcXG5AQCAtMTIyMSw3ICsxMjIxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2JcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHRjcF9lY25fbW9kZV9hY2NlY24odHApKSB7XFxuLVxcdFxcdGludCBlY25fb3B0ID0gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pO1xcbitcXHRcXHRpbnQgZWNuX29wdCA9IHRjcF9hY2NlY25fb3B0aW9uX2VmZihzayk7XFxuIFxcbiBcXHRcXHRpZiAoZWNuX29wdCBcXHUwMDI2XFx1MDAyNiB0cC1cXHUwMDNlc2F3X2FjY2Vjbl9vcHQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIChlY25fb3B0IFxcdTAwM2U9IFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QgfHxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggNzMyYjM1Y2MwOGQxYy4uYzU4YjE2MzNiYjQ2ZSAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5AQCAtMjk4NSw3ICsyOTg1LDggQEAgdW5pb24gYnBmX2F0dHIge1xcbiAgKiBcXHRcXHQgICoqVENQX1NZTkNOVCoqLCAqKlRDUF9VU0VSX1RJTUVPVVQqKiwgKipUQ1BfTk9UU0VOVF9MT1dBVCoqLFxcbiAgKiBcXHRcXHQgICoqVENQX05PREVMQVkqKiwgKipUQ1BfTUFYU0VHKiosICoqVENQX1dJTkRPV19DTEFNUCoqLFxcbiAgKiBcXHRcXHQgICoqVENQX1RISU5fTElORUFSX1RJTUVPVVRTKiosICoqVENQX0JQRl9ERUxBQ0tfTUFYKiosXFxuLSAqXFx0XFx0ICAqKlRDUF9CUEZfUlRPX01JTioqLCAqKlRDUF9CUEZfU09DS19PUFNfQ0JfRkxBR1MqKi5cXG4rICpcXHRcXHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLFxcbisgKlxcdFxcdCAgKipUQ1BfRUNOKiosICoqVENQX0VDTl9PUFRJT04qKi5cXG4gICogXFx0XFx0KiAqKklQUFJPVE9fSVAqKiwgd2hpY2ggc3VwcG9ydHMgKm9wdG5hbWUqICoqSVBfVE9TKiouXFxuICAqIFxcdFxcdCogKipJUFBST1RPX0lQVjYqKiwgd2hpY2ggc3VwcG9ydHMgdGhlIGZvbGxvd2luZyAqb3B0bmFtZSpcXFxcIHM6XFxuICAqIFxcdFxcdCAgKipJUFY2X1RDTEFTUyoqLCAqKklQVjZfQVVUT0ZMT1dMQUJFTCoqLlxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmhcXG5pbmRleCAxM2NlZWIzOTVlYjhmLi40ZjUyYjlkZjQyNjYxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxcbkBAIC0xMjgsNyArMTI4LDggQEAgZW51bSB7XFxuICNkZWZpbmUgVENQX0NNX0lOUVxcdFxcdFRDUF9JTlFcXG4gXFxuICNkZWZpbmUgVENQX1RYX0RFTEFZXFx0XFx0MzdcXHQvKiBkZWxheSBvdXRnb2luZyBwYWNrZXRzIGJ5IFhYIHVzZWMgKi9cXG4tXFxuKyNkZWZpbmUgVENQX0VDTlxcdFxcdFxcdDQ3XFx0LyogUGVyLXNvY2tldCBFQ04gbW9kZSAoMC01LCAyNTU9dXNlIHN5c2N0bCkgKi9cXG4rI2RlZmluZSBUQ1BfRUNOX09QVElPTlxcdFxcdDQ4XFx0LyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqL1xcbiBcXG4gI2RlZmluZSBUQ1BfUkVQQUlSX09OXFx0XFx0MVxcbiAjZGVmaW5lIFRDUF9SRVBBSVJfT0ZGXFx0XFx0MFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zZXRnZXRfc29ja29wdC5jXFxuaW5kZXggZDk2ZTk5YjY3YWViZi4uZmI5N2ZhMGJjN2I0NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zZXRnZXRfc29ja29wdC5jXFxuQEAgLTY0LDYgKzY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzb2Nrb3B0X3Rlc3Qgc29sX3RjcF90ZXN0c1tdID0ge1xcbiBcXHR7IC5vcHQgPSBUQ1BfQlBGX0RFTEFDS19NQVgsIC5uZXcgPSAzMDAwMCwgLmV4cGVjdGVkID0gMzAwMDAsIH0sXFxuIFxcdHsgLm9wdCA9IFRDUF9CUEZfUlRPX01JTiwgLm5ldyA9IDMwMDAwLCAuZXhwZWN0ZWQgPSAzMDAwMCwgfSxcXG4gXFx0eyAub3B0ID0gVENQX1JUT19NQVhfTVMsIC5uZXcgPSAyMDAwLCAuZXhwZWN0ZWQgPSAyMDAwLCB9LFxcbitcXHR7IC5vcHQgPSBUQ1BfRUNOLCAubmV3ID0gMywgLmV4cGVjdGVkID0gMywgLnJlc3RvcmUgPSAyNTUsIH0sXFxuK1xcdHsgLm9wdCA9IFRDUF9FQ05fT1BUSU9OLCAubmV3ID0gMiwgLmV4cGVjdGVkID0gMiwgLnJlc3RvcmUgPSAyNTUsIH0sXFxuIFxcdHsgLm9wdCA9IDAsIH0sXFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNjoxNS4zNzUyOTk1NTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU2OTAxMjI3NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fdGNwX3NldHNvY2tvcHRcIixcbiAgICBcImRvX3RjcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJ0Y3BfY29ubl9yZXF1ZXN0XCIsXG4gICAgXCJ0Y3BfbWFrZV9zeW5hY2tcIixcbiAgICBcInRjcF9jb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTiBzb2NrZXQgb3B0aW9ucyB0byBhbGxvdyBwZXItc29ja2V0IGNvbmZpZ3VyYXRpb24gYW5kIG92ZXJyaWRlIG9mIHRoZSB0Y3BfZWNuIGFuZCB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgc2V0dGluZ3MuIEl0IG1vZGlmaWVzIFRDUCBzb2NrZXQgb3B0aW9ucyBoYW5kbGluZyAoZ2V0c29ja29wdC9zZXRzb2Nrb3B0KSwgQlBGIHNvY2tvcHQgZmlsdGVycywgVENQIFNZTi9TWU4tQUNLIG9wdGlvbiBnZW5lcmF0aW9uLCBhbmQgVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBwcm9jZXNzaW5nIGluIHRoZSBjb3JlIElQdjQvVENQIG5ldHdvcmtpbmcgc3RhY2suXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjMwNGQwNGM2MzdiY2I0YTBlNDI0ZWU0Zjc1NGQ4MzRhMzk5MjAxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDA5OjA2OjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uMmU1NWQ5ZTJlYjA5YSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuQEAgLTUyOCw2ICs1MjgsNDMgQEAgdGNwX2Vjbl9mYWxsYmFjayAtIEJPT0xFQU5cbiBcbiBcdERlZmF1bHQ6IDEgKGVuYWJsZWQpXG4gXG4rdGNwX2VjbiAoc29ja2V0IG9wdGlvbikgLSBUQ1BfRUNOXG4rXHRQZXItc29ja2V0IGNvbnRyb2wgb2YgRUNOIG1vZGUsIGFsbG93aW5nIHBlci1jb25uZWN0aW9uIG92ZXJyaWRlIG9mIHRoZVxuK1x0dGNwX2VjbiBzeXNjdGwgc2V0dGluZy4gVGhpcyBlbmFibGVzIEw0UyAoTG93IExhdGVuY3ksIExvdyBMb3NzLCBTY2FsYWJsZVxuK1x0VGhyb3VnaHB1dCkgY29uZmlndXJhdGlvbiBvbiBhIHBlci1zb2NrZXQgYmFzaXMuXG4rXG4rXHRTZXR0aW5nIHRoaXMgc29ja2V0IG9wdGlvbiB0byBhbnkgdmFsdWUgZXhjZXB0IDI1NSB3aWxsIG92ZXJyaWRlIHRoZVxuK1x0c3lzdGVtLXdpZGUgdGNwX2VjbiBzeXNjdGwgZm9yIHRoYXQgcGFydGljdWxhciBzb2NrZXQuIEEgdmFsdWUgb2YgMjU1XG4rXHQoVENQX0VDTl9NT0RFX1VOU1BFQykgbWVhbnMgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBzeXNjdGwgdmFsdWUuXG4rXG4rXHRQb3NzaWJsZSB2YWx1ZXM6IDAtNSAoc2VlIHRjcF9lY24gc3lzY3RsIGRlc2NyaXB0aW9uIGFib3ZlKSwgb3IgMjU1IHRvXG4rXHR1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IChzeXNjdGxfdGNwX2VjbikuXG4rXG4rXHRFeGFtcGxlOjpcbitcbitcdFx0aW50IHZhbCA9IDM7ICAvKiBBY2NFQ04gbW9kZSAqL1xuK1x0XHRzZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfRUNOLCBcdTAwMjZ2YWwsIHNpemVvZih2YWwpKTtcbitcbitcdERlZmF1bHQ6IDI1NSAodW5zcGVjaWZpZWQgLSB1c2VzIHRjcF9lY24gc3lzY3RsIHZhbHVlKVxuK1xuK3RjcF9lY25fb3B0aW9uIChzb2NrZXQgb3B0aW9uKSAtIFRDUF9FQ05fT1BUSU9OXG4rXHRQZXItc29ja2V0IGNvbnRyb2wgb2YgQWNjdXJhdGUgRUNOIChBY2NFQ04pIG9wdGlvbiBzZW5kaW5nIGJlaGF2aW9yLFxuK1x0YWxsb3dpbmcgcGVyLWNvbm5lY3Rpb24gb3ZlcnJpZGUgb2YgdGhlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBzZXR0aW5nLlxuK1xuK1x0U2V0dGluZyB0aGlzIHNvY2tldCBvcHRpb24gdG8gYW55IHZhbHVlIGV4Y2VwdCAyNTUgd2lsbCBvdmVycmlkZSB0aGVcbitcdHN5c3RlbS13aWRlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBmb3IgdGhhdCBwYXJ0aWN1bGFyIHNvY2tldC4gQSB2YWx1ZSBvZlxuK1x0MjU1IChUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMpIG1lYW5zIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgc3lzY3RsIHZhbHVlLlxuK1xuK1x0UG9zc2libGUgdmFsdWVzOiAwLTMgKHNlZSB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgZGVzY3JpcHRpb24gYWJvdmUpLCBvciAyNTVcbitcdHRvIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgKHN5c2N0bF90Y3BfZWNuX29wdGlvbikuXG4rXG4rXHRFeGFtcGxlOjpcbitcbitcdFx0aW50IHZhbCA9IDI7ICAvKiBTZW5kIEFjY0VDTiBvcHRpb24gb24gZXZlcnkgcGFja2V0ICovXG4rXHRcdHNldHNvY2tvcHQoZmQsIFNPTF9UQ1AsIFRDUF9FQ05fT1BUSU9OLCBcdTAwMjZ2YWwsIHNpemVvZih2YWwpKTtcbitcbitcdERlZmF1bHQ6IDI1NSAodW5zcGVjaWZpZWQgLSB1c2VzIHRjcF9lY25fb3B0aW9uIHN5c2N0bCB2YWx1ZSlcbitcbiB0Y3BfZmFjayAtIEJPT0xFQU5cbiBcdFRoaXMgaXMgYSBsZWdhY3kgb3B0aW9uLCBpdCBoYXMgbm8gZWZmZWN0IGFueW1vcmUuXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmhcbmluZGV4IDZhOGM3NzcxOTMyMmYuLjdjYjFlNzY1ZjQ2MTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3RjcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oXG5AQCAtMjg5LDYgKzI4OSwxMyBAQCBzdHJ1Y3QgdGNwX3NvY2sge1xuIFx0XHRcdFx0XHQgKiBzYWNrZWRfb3V0IFx1MDAzZSAwKVxuIFx0XHRcdFx0XHQgKi9cbiBcdHU4XHRlY25fZmxhZ3M7XHQvKiBFQ04gc3RhdHVzIGJpdHMuXHRcdFx0Ki9cbitcdHU4XHRlY25fbW9kZTtcdC8qIFBlci1zb2NrZXQgRUNOIG1vZGUgb3ZlcnJpZGVcbitcdFx0XHRcdCAqIChUQ1BfRUNOX01PREVfVU5TUEVDID0gdXNlIHN5c2N0bClcbitcdFx0XHRcdCAqL1xuK1x0dThcdGVjbl9vcHRpb247XHQvKiBQZXItc29ja2V0IEFjY0VDTiBvcHRpb24gb3ZlcnJpZGVcbitcdFx0XHRcdCAqIChUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgPSB1c2Ugc3lzY3RsKVxuK1x0XHRcdFx0ICovXG4rXG4gXHRfX2NhY2hlbGluZV9ncm91cF9lbmQodGNwX3NvY2tfd3JpdGVfdHgpO1xuIFxuIFx0LyogVFhSWCByZWFkLXdyaXRlIGhvdHBhdGggY2FjaGUgbGluZXMgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3BfZWNuLmggYi9pbmNsdWRlL25ldC90Y3BfZWNuLmhcbmluZGV4IDg2NWQ1YzVhNzcxOGQuLjkzMWUwODc3MTc2YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3BfZWNuLmhcbisrKyBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaFxuQEAgLTIyLDYgKzIyLDcgQEAgZW51bSB0Y3BfZWNuX21vZGUge1xuIFx0VENQX0VDTl9JTl9BQ0NFQ05fT1VUX0FDQ0VDTiA9IDMsXG4gXHRUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfRUNOID0gNCxcbiBcdFRDUF9FQ05fSU5fQUNDRUNOX09VVF9OT0VDTiA9IDUsXG4rXHRUQ1BfRUNOX01PREVfVU5TUEVDID0gMjU1LFx0LyogVXNlIHN5c2N0bCBkZWZhdWx0IChwZXItc29ja2V0KSAqL1xuIH07XG4gXG4gLyogQWNjRUNOIG9wdGlvbiBzZW5kaW5nIHdoZW4gQWNjRUNOIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBuZWdvdGlhdGVkICovXG5AQCAtMzAsOCArMzEsMjkgQEAgZW51bSB0Y3BfYWNjZWNuX29wdGlvbiB7XG4gXHRUQ1BfQUNDRUNOX09QVElPTl9NSU5JTVVNID0gMSxcbiBcdFRDUF9BQ0NFQ05fT1BUSU9OX0ZVTEwgPSAyLFxuIFx0VENQX0FDQ0VDTl9PUFRJT05fUEVSU0lTVCA9IDMsXG4rXHRUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgPSAyNTUsXHQvKiBVc2Ugc3lzY3RsIGRlZmF1bHQgKHBlci1zb2NrZXQpICovXG4gfTtcbiBcbisvKiBSZXNvbHZlIHRoZSBlZmZlY3RpdmUgRUNOIG1vZGU6IHBlci1zb2NrZXQgb3ZlcnJpZGUgb3Igc3lzY3RsIGZhbGxiYWNrICovXG4rc3RhdGljIGlubGluZSB1OCB0Y3BfZWNuX21vZGVfZWZmKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHR1OCBtb2RlID0gdGNwX3NrKHNrKS1cdTAwM2VlY25fbW9kZTtcbitcbitcdGlmIChtb2RlID09IFRDUF9FQ05fTU9ERV9VTlNQRUMpXG4rXHRcdHJldHVybiBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY24pO1xuK1x0cmV0dXJuIG1vZGU7XG4rfVxuK1xuKy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBBY2NFQ04gb3B0aW9uOiBwZXItc29ja2V0IG92ZXJyaWRlIG9yIHN5c2N0bCBmYWxsYmFjayAqL1xuK3N0YXRpYyBpbmxpbmUgdTggdGNwX2FjY2Vjbl9vcHRpb25fZWZmKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHR1OCBvcHQgPSB0Y3Bfc2soc2spLVx1MDAzZWVjbl9vcHRpb247XG4rXG4rXHRpZiAob3B0ID09IFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQylcbitcdFx0cmV0dXJuIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pO1xuK1x0cmV0dXJuIG9wdDtcbit9XG4rXG4gLyogQXBwbHkgZWl0aGVyIEVDVCgwKSBvciBFQ1QoMSkgYmFzZWQgb24gVENQX0NPTkdfRUNUXzFfTkVHT1RJQVRJT04gZmxhZyAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBJTkVUX0VDTl94bWl0X2VjdF8xX25lZ290aWF0aW9uKHN0cnVjdCBzb2NrICpzaylcbiB7XG5AQCAtNTk5LDcgKzYyMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfZWNuX3NlbmRfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuIFx0Ym9vbCBicGZfbmVlZHNfZWNuID0gdGNwX2JwZl9jYV9uZWVkc19lY24oc2spO1xuIFx0Ym9vbCB1c2VfZWNuLCB1c2VfYWNjZWNuO1xuLVx0dTggdGNwX2VjbiA9IFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbik7XG4rXHR1OCB0Y3BfZWNuID0gdGNwX2Vjbl9tb2RlX2VmZihzayk7XG4gXG4gXHR1c2VfYWNjZWNuID0gdGNwX2VjbiA9PSBUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfQUNDRUNOIHx8XG4gXHRcdCAgICAgdGNwX2NhX25lZWRzX2FjY2Vjbihzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA3MzJiMzVjYzA4ZDFjLi5jNThiMTYzM2JiNDZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0yOTg1LDcgKzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdCAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosXG4gICogXHRcdCAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosXG4gICogXHRcdCAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKixcbi0gKlx0XHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLlxuKyAqXHRcdCAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiosXG4rICpcdFx0ICAqKlRDUF9FQ04qKiwgKipUQ1BfRUNOX09QVElPTioqLlxuICAqIFx0XHQqICoqSVBQUk9UT19JUCoqLCB3aGljaCBzdXBwb3J0cyAqb3B0bmFtZSogKipJUF9UT1MqKi5cbiAgKiBcdFx0KiAqKklQUFJPVE9fSVBWNioqLCB3aGljaCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nICpvcHRuYW1lKlxcIHM6XG4gICogXHRcdCAgKipJUFY2X1RDTEFTUyoqLCAqKklQVjZfQVVUT0ZMT1dMQUJFTCoqLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaCBiL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxuaW5kZXggMDM3NzJkZDRkMzk5Mi4uMDFlYmIzNDhiYTI3NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG5AQCAtMTQyLDYgKzE0Miw4IEBAIGVudW0ge1xuICNkZWZpbmUgVENQX1JUT19NQVhfTVNcdFx0NDRcdC8qIG1heCBydG8gdGltZSBpbiBtcyAqL1xuICNkZWZpbmUgVENQX1JUT19NSU5fVVNcdFx0NDVcdC8qIG1pbiBydG8gdGltZSBpbiB1cyAqL1xuICNkZWZpbmUgVENQX0RFTEFDS19NQVhfVVNcdDQ2XHQvKiBtYXggZGVsYXllZCBhY2sgdGltZSBpbiB1cyAqL1xuKyNkZWZpbmUgVENQX0VDTlx0XHRcdDQ3XHQvKiBQZXItc29ja2V0IEVDTiBtb2RlICgwLTUsIDI1NT11c2Ugc3lzY3RsKSAqL1xuKyNkZWZpbmUgVENQX0VDTl9PUFRJT05cdFx0NDhcdC8qIFBlci1zb2NrZXQgQWNjRUNOIG9wdGlvbiAoMC0zLCAyNTU9dXNlIHN5c2N0bCkgKi9cbiBcbiAjZGVmaW5lIFRDUF9SRVBBSVJfT05cdFx0MVxuICNkZWZpbmUgVENQX1JFUEFJUl9PRkZcdFx0MFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjk5M2IzMWUxMGI5NDQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC01NjcwLDYgKzU2NzAsOCBAQCBzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuIFx0Y2FzZSBUQ1BfTk9UU0VOVF9MT1dBVDpcbiBcdGNhc2UgVENQX1NBVkVfU1lOOlxuIFx0Y2FzZSBUQ1BfUlRPX01BWF9NUzpcbitcdGNhc2UgVENQX0VDTjpcbitcdGNhc2UgVENQX0VDTl9PUFRJT046XG4gXHRcdGlmICgqb3B0bGVuICE9IHNpemVvZihpbnQpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCAxYzg2N2EzMDI0NDQ2Li5mYjM3NmE5N2YwZTZkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbisrKyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtNDYzLDYgKzQ2Myw4IEBAIHZvaWQgdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHR0cC1cdTAwM2V0c29mZnNldCA9IDA7XG4gXHR0cC1cdTAwM2VyYWNrLnJlb193bmRfc3RlcHMgPSAxO1xuK1x0dHAtXHUwMDNlZWNuX21vZGUgPSBUQ1BfRUNOX01PREVfVU5TUEVDO1xuK1x0dHAtXHUwMDNlZWNuX29wdGlvbiA9IFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQztcbiBcbiBcdHNrLVx1MDAzZXNrX3dyaXRlX3NwYWNlID0gc2tfc3RyZWFtX3dyaXRlX3NwYWNlO1xuIFx0c29ja19zZXRfZmxhZyhzaywgU09DS19VU0VfV1JJVEVfUVVFVUUpO1xuQEAgLTQxNjAsNiArNDE2MiwxOCBAQCBpbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHR0Y3BfZW5hYmxlX3R4X2RlbGF5KHNrLCB2YWwpO1xuIFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZXRjcF90eF9kZWxheSwgdmFsKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFRDUF9FQ046XG4rXHRcdGlmICh2YWwgIT0gVENQX0VDTl9NT0RFX1VOU1BFQyBcdTAwMjZcdTAwMjYgKHZhbCBcdTAwM2MgMCB8fCB2YWwgXHUwMDNlIFRDUF9FQ05fSU5fQUNDRUNOX09VVF9OT0VDTikpXG4rXHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0ZWxzZVxuK1x0XHRcdFdSSVRFX09OQ0UodHAtXHUwMDNlZWNuX21vZGUsIHZhbCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBUQ1BfRUNOX09QVElPTjpcbitcdFx0aWYgKHZhbCAhPSBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDNjIDAgfHwgdmFsIFx1MDAzZSBUQ1BfQUNDRUNOX09QVElPTl9QRVJTSVNUKSlcbitcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRlbHNlXG4rXHRcdFx0V1JJVEVfT05DRSh0cC1cdTAwM2VlY25fb3B0aW9uLCB2YWwpO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGVyciA9IC1FTk9QUk9UT09QVDtcbiBcdFx0YnJlYWs7XG5AQCAtNDg0Miw2ICs0ODU2LDEyIEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdGNhc2UgVENQX0RFTEFDS19NQVhfVVM6XG4gXHRcdHZhbCA9IGppZmZpZXNfdG9fdXNlY3MoUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2RlbGFja19tYXgpKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFRDUF9FQ046XG4rXHRcdHZhbCA9IFJFQURfT05DRSh0cC1cdTAwM2VlY25fbW9kZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBUQ1BfRUNOX09QVElPTjpcbitcdFx0dmFsID0gUkVBRF9PTkNFKHRwLVx1MDAzZWVjbl9vcHRpb24pO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG5AQCAtNTI1Niw2ICs1Mjc2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHRjcF9zdHJ1Y3RfY2hlY2sodm9pZClcbiBcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIHRzb3J0ZWRfc2VudF9xdWV1ZSk7XG4gXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBoaWdoZXN0X3NhY2spO1xuIFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX2ZsYWdzKTtcbitcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGVjbl9tb2RlKTtcbitcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGVjbl9vcHRpb24pO1xuIFxuIFx0LyogVFhSWCByZWFkLXdyaXRlIGhvdHBhdGggY2FjaGUgbGluZXMgKi9cbiBcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHhyeCwgcHJlZF9mbGFncyk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggMGY2MGExZGJmOTI3NC4uMDA0M2I0YjJiYzkyMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTc0NTcsMTMgKzc0NTcsMTIgQEAgc3RhdGljIHZvaWQgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChsaXN0ZW5fc2spO1xuIFx0Ym9vbCB0aF9lY24gPSB0aC1cdTAwM2VlY2UgXHUwMDI2XHUwMDI2IHRoLVx1MDAzZWN3cjtcbiBcdGJvb2wgZWN0LCBlY25fb2s7XG4gXHR1MzIgZWNuX29rX2RzdDtcbiBcbiBcdGlmICh0Y3BfYWNjZWNuX3N5bl9yZXF1ZXN0ZWQodGgpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY24pIFx1MDAzZT0gMyB8fFxuK1x0ICAgICh0Y3BfZWNuX21vZGVfZWZmKGxpc3Rlbl9zaykgXHUwMDNlPSAzIHx8XG4gXHQgICAgIHRjcF9jYV9uZWVkc19hY2NlY24obGlzdGVuX3NrKSkpIHtcbiBcdFx0aW5ldF9yc2socmVxKS1cdTAwM2VlY25fb2sgPSAxO1xuIFx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlYWNjZWNuX29rID0gMTtcbkBAIC03NDc3LDcgKzc0NzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcbiBcdGVjdCA9ICFJTkVUX0VDTl9pc19ub3RfZWN0KFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VpcF9kc2ZpZWxkKTtcbiBcdGVjbl9va19kc3QgPSBkc3RfZmVhdHVyZShkc3QsIERTVF9GRUFUVVJFX0VDTl9NQVNLKTtcbi1cdGVjbl9vayA9IFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2VjbikgfHwgZWNuX29rX2RzdDtcbitcdGVjbl9vayA9IHRjcF9lY25fbW9kZV9lZmYobGlzdGVuX3NrKSB8fCBlY25fb2tfZHN0O1xuIFxuIFx0aWYgKCgoIWVjdCB8fCB0aC1cdTAwM2VyZXMxIHx8IHRoLVx1MDAzZWFlKSBcdTAwMjZcdTAwMjYgZWNuX29rKSB8fFxuIFx0ICAgIHRjcF9jYV9uZWVkc19lY24obGlzdGVuX3NrKSB8fFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuaW5kZXggMDA0MTdhNDI5MjIyNS4uODJiOTZjNDAxNWZkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5AQCAtMTA0NSw3ICsxMDQ1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHVubGlrZWx5KChUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfQUNLKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICB0Y3BfZWNuX21vZGVfYWNjZWNuKHRwKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICBpbmV0X2NzayhzayktXHUwMDNlaWNza19yZXRyYW5zbWl0cyBcdTAwM2MgMiBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIHJlbWFpbmluZyBcdTAwM2U9IFRDUE9MRU5fQUNDRUNOX0JBU0UpKSB7XG4gXHRcdG9wdHMtXHUwMDNldXNlX3N5bmFja19lY25fYnl0ZXMgPSAxO1xuIFx0XHRyZW1haW5pbmcgLT0gdGNwX29wdGlvbnNfZml0X2FjY2VjbihvcHRzLCAwLCByZW1haW5pbmcpO1xuQEAgLTExMzMsNyArMTEzMyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdHNtY19zZXRfb3B0aW9uX2NvbmQodGNwX3NrKHNrKSwgaXJlcSwgb3B0cywgXHUwMDI2cmVtYWluaW5nKTtcbiBcbiBcdGlmICh0cmVxLVx1MDAzZWFjY2Vjbl9vayBcdTAwMjZcdTAwMjZcbi1cdCAgICBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKSBcdTAwMjZcdTAwMjZcbitcdCAgICB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHN5bmFja190eXBlICE9IFRDUF9TWU5BQ0tfUkVUUkFOUyBcdTAwMjZcdTAwMjYgcmVtYWluaW5nIFx1MDAzZT0gVENQT0xFTl9BQ0NFQ05fQkFTRSkge1xuIFx0XHRvcHRzLVx1MDAzZXVzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTtcbiBcdFx0cmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTtcbkBAIC0xMjIxLDcgKzEyMjEsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYlxuIFx0fVxuIFxuIFx0aWYgKHRjcF9lY25fbW9kZV9hY2NlY24odHApKSB7XG4tXHRcdGludCBlY25fb3B0ID0gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfZWNuX29wdGlvbik7XG4rXHRcdGludCBlY25fb3B0ID0gdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKTtcbiBcbiBcdFx0aWYgKGVjbl9vcHQgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZXNhd19hY2NlY25fb3B0IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKGVjbl9vcHQgXHUwMDNlPSBUQ1BfQUNDRUNOX09QVElPTl9QRVJTSVNUIHx8XG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA3MzJiMzVjYzA4ZDFjLi5jNThiMTYzM2JiNDZlIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0yOTg1LDcgKzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdCAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosXG4gICogXHRcdCAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosXG4gICogXHRcdCAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKixcbi0gKlx0XHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLlxuKyAqXHRcdCAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiosXG4rICpcdFx0ICAqKlRDUF9FQ04qKiwgKipUQ1BfRUNOX09QVElPTioqLlxuICAqIFx0XHQqICoqSVBQUk9UT19JUCoqLCB3aGljaCBzdXBwb3J0cyAqb3B0bmFtZSogKipJUF9UT1MqKi5cbiAgKiBcdFx0KiAqKklQUFJPVE9fSVBWNioqLCB3aGljaCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nICpvcHRuYW1lKlxcIHM6XG4gICogXHRcdCAgKipJUFY2X1RDTEFTUyoqLCAqKklQVjZfQVVUT0ZMT1dMQUJFTCoqLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxuaW5kZXggMTNjZWViMzk1ZWI4Zi4uNGY1MmI5ZGY0MjY2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG5AQCAtMTI4LDcgKzEyOCw4IEBAIGVudW0ge1xuICNkZWZpbmUgVENQX0NNX0lOUVx0XHRUQ1BfSU5RXG4gXG4gI2RlZmluZSBUQ1BfVFhfREVMQVlcdFx0MzdcdC8qIGRlbGF5IG91dGdvaW5nIHBhY2tldHMgYnkgWFggdXNlYyAqL1xuLVxuKyNkZWZpbmUgVENQX0VDTlx0XHRcdDQ3XHQvKiBQZXItc29ja2V0IEVDTiBtb2RlICgwLTUsIDI1NT11c2Ugc3lzY3RsKSAqL1xuKyNkZWZpbmUgVENQX0VDTl9PUFRJT05cdFx0NDhcdC8qIFBlci1zb2NrZXQgQWNjRUNOIG9wdGlvbiAoMC0zLCAyNTU9dXNlIHN5c2N0bCkgKi9cbiBcbiAjZGVmaW5lIFRDUF9SRVBBSVJfT05cdFx0MVxuICNkZWZpbmUgVENQX1JFUEFJUl9PRkZcdFx0MFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zZXRnZXRfc29ja29wdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmNcbmluZGV4IGQ5NmU5OWI2N2FlYmYuLmZiOTdmYTBiYzdiNDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmNcbkBAIC02NCw2ICs2NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja29wdF90ZXN0IHNvbF90Y3BfdGVzdHNbXSA9IHtcbiBcdHsgLm9wdCA9IFRDUF9CUEZfREVMQUNLX01BWCwgLm5ldyA9IDMwMDAwLCAuZXhwZWN0ZWQgPSAzMDAwMCwgfSxcbiBcdHsgLm9wdCA9IFRDUF9CUEZfUlRPX01JTiwgLm5ldyA9IDMwMDAwLCAuZXhwZWN0ZWQgPSAzMDAwMCwgfSxcbiBcdHsgLm9wdCA9IFRDUF9SVE9fTUFYX01TLCAubmV3ID0gMjAwMCwgLmV4cGVjdGVkID0gMjAwMCwgfSxcbitcdHsgLm9wdCA9IFRDUF9FQ04sIC5uZXcgPSAzLCAuZXhwZWN0ZWQgPSAzLCAucmVzdG9yZSA9IDI1NSwgfSxcbitcdHsgLm9wdCA9IFRDUF9FQ05fT1BUSU9OLCAubmV3ID0gMiwgLmV4cGVjdGVkID0gMiwgLnJlc3RvcmUgPSAyNTUsIH0sXG4gXHR7IC5vcHQgPSAwLCB9LFxuIH07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNjoxNS4zNzUzMDA5OTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTQ2NDA2ODc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBcdTAwMjYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHF1aXRlIHByb21pc2luZyBmb3IgZnV6emluZy4gSXQgaW50cm9kdWNlcyBuZXcgc29ja2V0IG9wdGlvbnMsIGBUQ1BfRUNOYCBhbmQgYFRDUF9FQ05fT1BUSU9OYCwgZXNzZW50aWFsbHkgYWxsb3dpbmcgcGVyLXNvY2tldCBvdmVycmlkZXMgZm9yIEVDTi1yZWxhdGVkIHN5c2N0bCBzZXR0aW5ncy4gVGhpcyBwZXItc29ja2V0IGdyYW51bGFyaXR5IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgcG90ZW50aWFsIHRhcmdldC4gVGhlIGZhY3QgdGhhdCBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIFRDUCBzdGFjayB2aWEgYHNldHNvY2tvcHRgIGFuZCBgZ2V0c29ja29wdGAgbWFrZXMgaXQgdmVyeSBhY2Nlc3NpYmxlLiBXZSBoYXZlIHVzZXItbGV2ZWwgaW50ZXJhY3Rpb24gcmlnaHQgdGhlcmUsIGFuZCB0aGF0J3MgZXhhY3RseSB3aGF0IHdlIHdhbnQuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyBpbXBhY3RpbmcgZG9jdW1lbnRhdGlvbiwgdGhlIGNvcmUgYHRjcF9zb2NrYCBzdHJ1Y3R1cmUsIGhlYWRlciBmaWxlcywgYW5kIHRoZSBjcml0aWNhbCBgZmlsdGVyLmNgICh0aGF0J3MgYSBnb29kIHNpZ24gZm9yIEJQRiBpbnRlcmFjdGlvbnMpLCBhbG9uZyB3aXRoIG51bWVyb3VzIGNvcmUgVENQIG1vZHVsZXM6IGB0Y3AuY2AsIGB0Y3BfaW5wdXQuY2AsIGFuZCBgdGNwX291dHB1dC5jYC4gVGhpcyBpcyBhbGwgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNvIHllcywgd2l0aG91dCBhIGRvdWJ0LCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5vdywgdGltZSB0byByZWZpbmUgdGhlIGFwcHJvYWNoLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJ4oCZbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3MgYXJlIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZXNlIGZlYXR1cmVzLiBNeSBpbml0aWFsIGd1ZXNzZXMgYXJlIGBJTkVUYCAob3IgYE5FVGApIC0gdGhhdCBzZWVtcyBsaWtlIGEgZ2l2ZW4sIGFuZCBJIHNob3VsZCBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvS2NvbmZpZ2AgZm9yIHJlbGF0ZWQgVENQIGNvbmZpZ3VyYXRpb25zLiBTaW5jZSB3ZeKAmXJlIGRlYWxpbmcgd2l0aCBgZmlsdGVyLmNgLCBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3IgYEJQRl9TWVNDQUxMYCwgYE5FVGAsIGFuZCBgSU5FVGAgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBzaG91bGQgY2hlY2sgYG5ldC9pcHY0L01ha2VmaWxlYCBvciBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gc2VlIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gYnVpbGQgYHRjcC5jYCwgYHRjcF9pbnB1dC5jYCwgYW5kIGB0Y3Bfb3V0cHV0LmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudCByZXF1aXJlZCBmb3IgdGhlc2UgY2hhbmdlcy4gVGhlbiwgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBpbiB0aGlzIGFyZWEuIEZyb20gdGhlIHBhdGNoLCBpdCBsb29rcyBsaWtlIGB0Y3BfZWNuX21vZGVfZWZmKHNrKWAgYW5kIGB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spYCBhcmUgd29ydGggaGlnaGxpZ2h0aW5nLCBhbG9uZyB3aXRoIGBkb190Y3Bfc2V0c29ja29wdGAgYW5kIGBkb190Y3BfZ2V0c29ja29wdGAuIEknbGwgbmVlZCB0byBhbmFseXplIHRoZXNlIGluIG1vcmUgZGVwdGggdG8gdGFyZ2V0IHRoZW0gZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNzgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNjo0MC44MzkzNzI2MDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5MTgxOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai0uKnRjcFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT01MD1vYmotJChDT05GSUdfVENQX0NPTkdfQ1VCSUMpICs9IHRjcF9jdWJpYy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX1RDUF9DT05HX0RDVENQKSArPSB0Y3BfZGN0Y3Aub1xcbm5ldC9pcHY0L01ha2VmaWxlLTUyLW9iai0kKENPTkZJR19UQ1BfQ09OR19XRVNUV09PRCkgKz0gdGNwX3dlc3R3b29kLm9cXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTU0PW9iai0kKENPTkZJR19UQ1BfQ09OR19IWUJMQSkgKz0gdGNwX2h5YmxhLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo1NTpvYmotJChDT05GSUdfVENQX0NPTkdfSFRDUCkgKz0gdGNwX2h0Y3Aub1xcbm5ldC9pcHY0L01ha2VmaWxlLTU2LW9iai0kKENPTkZJR19UQ1BfQ09OR19WRUdBUykgKz0gdGNwX3ZlZ2FzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6NDEuMTI4NTYwNDI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE2NjgyNDUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY0IE1ha2VmaWxlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBJUHY0IHN0YWNrLCBzbyBsZXQncyBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgbmV0L2lwdjQvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSdsbCBsaWtlbHkgZmluZCB0aGUgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBmb3IgY29tcGlsaW5nIElQdjQtcmVsYXRlZCBtb2R1bGVzIGFuZCB0aGUgY29yZSBJUHY0IHN0YWNrIGl0c2VsZi4gVGhpcyBmaWxlIHdpbGwgdGVsbCBtZSBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyIOKAkyB0aGUgb2JqZWN0IGZpbGVzLCB0aGUgaW5jbHVkZSBwYXRocywgYW5kIGFueSBzcGVjaWZpYyBjb21waWxlciBmbGFncyBiZWluZyB1c2VkLiBJIGV4cGVjdCB0byBzZWUgZGVmaW5pdGlvbnMgZm9yIHZhcmlhYmxlcyBsaWtlIGBvYmotJChDT05GSUdfU09NRVRISU5HKWAgd2hpY2ggd2lsbCBndWlkZSB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiBjZXJ0YWluIGZlYXR1cmVzIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgaXMgY3J1Y2lhbCBmb3IgdHJhY2luZyB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaWRlbnRpZnlpbmcgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJIG1ha2UsIG9yIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBjb250ZXh0IG9mIHNvbWUgb3RoZXIgbW9kdWxlIEknbSBsb29raW5nIGF0LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgSSBuZWVkIHRvIHNvbHZlIHRoZSBwcm9ibGVtIEknbSBsb29raW5nIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzcyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6NDQuMjk1Mzg3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVCkgbGF5ZXIuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuICAgNzpcXHRcXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXFxcXG4gICA4OlxcdFxcdCAgICAgaXBfb3V0cHV0Lm8gaXBfc29ja2dsdWUubyBpbmV0X2hhc2h0YWJsZXMubyBcXFxcXFxuICAgOTpcXHRcXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbiAgMTA6XFx0XFx0ICAgICB0Y3AubyB0Y3BfaW5wdXQubyB0Y3Bfb3V0cHV0Lm8gdGNwX3RpbWVyLm8gdGNwX2lwdjQubyBcXFxcXFxuICAxMTpcXHRcXHQgICAgIHRjcF9taW5pc29ja3MubyB0Y3BfY29uZy5vIHRjcF9tZXRyaWNzLm8gdGNwX2Zhc3RvcGVuLm8gXFxcXFxcbiAgMTI6XFx0XFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcXFxcbiAgMTM6XFx0XFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG4gIDE0OlxcdFxcdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcXFxcbiAgMTU6XFx0XFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxuICAxNjpcXHRcXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXFxcXG4gIDE3OlxcdFxcdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cXG4gIDE4OlxcdFxcbiAgMTk6XFx0b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICs9IGlwX3R1bm5lbC5vXFxuICAyMDpcXHRvYmotJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGxfbmV0X2lwdjQub1xcbiAgMjE6XFx0b2JqLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUykgKz0gZmliX3J1bGVzLm9cXG4gIDIzOlxcdG9iai0kKENPTkZJR19JUF9NUk9VVEUpICs9IGlwbXIub1xcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICs9IGlwbXJfYmFzZS5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfTkVUX0lQSVApICs9IGlwaXAub1xcbiAgMjY6XFx0Z3JlLXkgOj0gZ3JlX2RlbXV4Lm9cXG4gIDI3OlxcdGZvdS15IDo9IGZvdV9jb3JlLm8gZm91X25sLm8gZm91X2JwZi5vXFxuICAyODpcXHRvYmotJChDT05GSUdfTkVUX0ZPVSkgKz0gZm91Lm9cXG4gIDI5OlxcdG9iai0kKENPTkZJR19ORVRfSVBHUkVfREVNVVgpICs9IGdyZS5vXFxuICAzMDpcXHRvYmotJChDT05GSUdfTkVUX0lQR1JFKSArPSBpcF9ncmUub1xcbiAgMzE6XFx0dWRwX3R1bm5lbC15IDo9IHVkcF90dW5uZWxfY29yZS5vIHVkcF90dW5uZWxfbmljLm9cXG4gIDMyOlxcdG9iai0kKENPTkZJR19ORVRfVURQX1RVTk5FTCkgKz0gdWRwX3R1bm5lbC5vXFxuICAzMzpcXHRvYmotJChDT05GSUdfTkVUX0lQVlRJKSArPSBpcF92dGkub1xcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX1NZTl9DT09LSUVTKSArPSBzeW5jb29raWVzLm9cXG4gIDM1OlxcdG9iai0kKENPTkZJR19JTkVUX0FIKSArPSBhaDQub1xcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0lORVRfRVNQKSArPSBlc3A0Lm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19JTkVUX0VTUF9PRkZMT0FEKSArPSBlc3A0X29mZmxvYWQub1xcbiAgMzg6XFx0b2JqLSQoQ09ORklHX0lORVRfSVBDT01QKSArPSBpcGNvbXAub1xcbiAgMzk6XFx0b2JqLSQoQ09ORklHX0lORVRfWEZSTV9UVU5ORUwpICs9IHhmcm00X3R1bm5lbC5vXFxuICA0MDpcXHRvYmotJChDT05GSUdfSU5FVF9UVU5ORUwpICs9IHR1bm5lbDQub1xcbiAgNDE6XFx0b2JqLSQoQ09ORklHX0lQX1BOUCkgKz0gaXBjb25maWcub1xcbiAgNDI6XFx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHQrPSBuZXRmaWx0ZXIubyBuZXRmaWx0ZXIvXFxuICA0MzpcXHRvYmotJChDT05GSUdfSU5FVF9ESUFHKSArPSBpbmV0X2RpYWcub1xcbiAgNDQ6XFx0b2JqLSQoQ09ORklHX0lORVRfVENQX0RJQUcpICs9IHRjcF9kaWFnLm9cXG4gIDQ1OlxcdG9iai0kKENPTkZJR19JTkVUX1VEUF9ESUFHKSArPSB1ZHBfZGlhZy5vXFxuICA0NjpcXHRvYmotJChDT05GSUdfSU5FVF9SQVdfRElBRykgKz0gcmF3X2RpYWcub1xcbiAgNDc6XFx0b2JqLSQoQ09ORklHX1RDUF9DT05HX0JCUikgKz0gdGNwX2Jici5vXFxuICA0ODpcXHRvYmotJChDT05GSUdfVENQX0NPTkdfQklDKSArPSB0Y3BfYmljLm9cXG4gIDQ5OlxcdG9iai0kKENPTkZJR19UQ1BfQ09OR19DREcpICs9IHRjcF9jZGcub1xcbiAgNTA6XFx0b2JqLSQoQ09ORklHX1RDUF9DT05HX0NVQklDKSArPSB0Y3BfY3ViaWMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNjo0NC4yOTU0NjAzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNDIzNDc2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBOZXR3b3JrIFN0YWNrIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGBuZXQvaXB2NGAgY29tcG9uZW50IGlzIGJlaW5nIGJ1aWx0IHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCBmcmFtZXdvcmsuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgbmV0L01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB0aGUgb3JjaGVzdHJhdG9yIG9mIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgZm9yIHRoaXMgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjay4gSSBuZWVkIHRvIHRyYWNlIHRocm91Z2ggaXQgYW5kIHNlZSBob3cgYGlwdjRgIGlzIHNwZWNpZmljYWxseSBpbmNvcnBvcmF0ZWQsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCBgbmV0L01ha2VmaWxlYCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE3MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6NDcuNTM3ODEwNzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxOTQzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19ORVRGSUxURVIpXFx0XFx0Kz0gbmV0ZmlsdGVyL1xcbm5ldC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBpcHY0L1xcbm5ldC9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfVExTKVxcdFxcdCs9IHRscy9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6NDcuNTg2MDA5ODM5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzMDU3MjQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIENvZGUgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IGlzc3VlLiBJdCBsb29rcyBsaWtlIEkgYWJzb2x1dGVseSBuZWVkIGBDT05GSUdfSU5FVGAgZW5hYmxlZCBpZiBJJ20gZ29pbmcgdG8gdG91Y2ggYW55dGhpbmcgaW4gYG5ldC9pcHY0L2AuIFRoYXQncyBub3Qgc3VycHJpc2luZywgYnV0IGl0J3MgZ29vZCB0byBtYWtlIGEgbm90ZSBvZiBpdCByaWdodCBhd2F5LiBNb3JlIHNwZWNpZmljYWxseSB0aG91Z2gsIEknbSBjb25jZXJuZWQgYWJvdXQgdGhlIGBzb2xfdGNwX3NvY2tvcHRgIGZ1bmN0aW9uIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgcmVjYWxsIHRoYXQgb25lIHVzZXMgYSBCUEYgc29ja29wdCBoZWxwZXIgb2Ygc29ydHMuIFNvLCBpZiBJJ20gZ29pbmcgdG8gd29yayB3aXRoIHRoYXQsIEknbSBnb2luZyB0byBuZWVkIHRvIGVuc3VyZSB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGFsc28gZW5hYmxlZC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEknbGwgbWFrZSBzdXJlIHRvIHZlcmlmeSB0aG9zZSBkZXBlbmRlbmNpZXMgYmVmb3JlIHByb2NlZWRpbmcuIEknbSBnb2luZyB0byBnbyBzdHJhaWdodCB0byBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDMwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6NDkuOTE2NTg0MjEzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcxNTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2xfdGNwX3NvY2tvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NTU0OT1zdGF0aWMgaW50IGJwZl9zb2xfdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU1OTktXFxubmV0L2NvcmUvZmlsdGVyLmM6NTYwMDpzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdF9jb25nZXN0aW9uKHN0cnVjdCBzb2NrICpzaywgY2hhciAqb3B0dmFsLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTU2MDEtXFx0XFx0XFx0XFx0ICAgICAgaW50ICpvcHRsZW4sIGJvb2wgZ2V0b3B0KVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTY1Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzo1NjUzOnN0YXRpYyBpbnQgc29sX3RjcF9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXFxubmV0L2NvcmUvZmlsdGVyLmMtNTY1NC1cXHRcXHRcXHQgICBjaGFyICpvcHR2YWwsIGludCAqb3B0bGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTY3OC1cXHRjYXNlIFRDUF9DT05HRVNUSU9OOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjU2Nzk6XFx0XFx0cmV0dXJuIHNvbF90Y3Bfc29ja29wdF9jb25nZXN0aW9uKHNrLCBvcHR2YWwsIG9wdGxlbiwgZ2V0b3B0KTtcXG5uZXQvY29yZS9maWx0ZXIuYy01NjgwLVxcdGNhc2UgVENQX1NBVkVEX1NZTjpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTU3Nzk9c3RhdGljIGludCBfX2JwZl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3OTEtXFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUClcXG5uZXQvY29yZS9maWx0ZXIuYzo1NzkyOlxcdFxcdHJldHVybiBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTU3OTMtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz01ODEwPXN0YXRpYyBpbnQgX19icGZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01ODIyLVxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2IGxldmVsID09IFNPTF9UQ1ApXFxubmV0L2NvcmUvZmlsdGVyLmM6NTgyMzpcXHRcXHRlcnIgPSBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNTgyNC1cXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfSVApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA2OjQ5Ljk2NDMwNTI5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTY1NDY0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AvSVAgYW5kIEJQRiBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdCBwbGF5IGhlcmU6IGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBPciwgcG90ZW50aWFsbHksIGp1c3QgYENPTkZJR19JTkVUYCBtaWdodCBiZSBlbm91Z2ggY29udGV4dCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLlxuXG5Ob3csIHRoZSByZWFsIG1lYXQgb2YgdGhlIGFuYWx5c2lzIGxpZXMgaW4gdGhlIGZ1bmN0aW9uIGNhbGxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQgbW9kaWZpZXMgKG9yIGlzIG1vZGlmaWVkIGJ5KSB0aGUgbG9naWMuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9uczogYGRvX3RjcF9zZXRzb2Nrb3B0YCBhbmQgYGRvX3RjcF9nZXRzb2Nrb3B0YCwgd2hpY2ggYXJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBhbmQgYXJlIGxvY2F0ZWQgaW4gYG5ldC9pcHY0L3RjcC5jYC4gSXQncyBwb3NzaWJsZSBJJ2xsIHNlZSBzb21lIG5hbWluZyB2YXJpYXRpb25zIG9uIHRoZW0gYnV0IHRoZSBmdW5jdGlvbmFsaXR5IGlzIHRoZSBrZXkgaGVyZS5cblxuVGhlbiB3ZSBoYXZlIGB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0YCwgYHRjcF9zeW5fb3B0aW9uc2AsIGB0Y3Bfc3luYWNrX29wdGlvbnNgLCBhbmQgYHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYCwgYWxsIGluIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2Agb3IgYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2AuIFRob3NlIHRvdWNoIG9uIHRoZSBUQ1AgRUNOLCBTWU4sIGFuZCBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIG9wdGlvbnMuXG5cbkZpbmFsbHksIGBzb2xfdGNwX3NvY2tvcHRgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBzaW5jZSBpdCdzIGludm9sdmVkIGluIGhhbmRsaW5nIHNvY2tldCBvcHRpb25zIGF0IHRoZSBzb2NrZXQgbGV2ZWwuXG5cblRoZSBsYXN0IG9uZSB0byBsb29rIGF0IGlzIGB0Y3BfZWNuX3NlbmRfc3luYCwgd2hpY2ggaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGluIGBpbmNsdWRlL25ldC90Y3BfZWNuLmhgLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoZXJlICp0aGlzKiBpcyBhY3R1YWxseSB1c2VkIHRvIHNlZSB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBpdC4gRXNzZW50aWFsbHksIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI3NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNjo1NC41Mjk3NzE5OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjQ4MTgyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfZWNuX3NlbmRfc3luXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX291dHB1dC5jPTM4OTU9aW50IHRjcF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkyMy1cXHRcXHRUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXRjcF9mbGFncyB8PSBUQ1BIRFJfQUNLO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozOTI0OlxcdFxcdHRjcF9lY25fc2VuZF9zeW5hY2soc2ssIHNrYik7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5MjUtXFx0fVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQzMDY9aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00Mzg1LVxcdHRjcF9jb25uZWN0X3F1ZXVlX3NrYihzaywgYnVmZik7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzODY6XFx0dGNwX2Vjbl9zZW5kX3N5bihzaywgYnVmZik7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzODctXFx0dGNwX3JidHJlZV9pbnNlcnQoXFx1MDAyNnNrLVxcdTAwM2V0Y3BfcnR4X3F1ZXVlLCBidWZmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6NTQuNzQyMjU5ODU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2ODU4MjMyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFRDUCBFQ04gU3luY2hyb25pemF0aW9uIFNlcXVlbmNlKipcblxuT2theSwgc28gYHRjcF9jb25uZWN0YCB0cmlnZ2VycyBgdGNwX2Vjbl9zZW5kX3N5bmAuIFRoYXQncyB0aGUgZXhwZWN0ZWQgcGF0aCDigJMgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzIGluaXRpYXRlcyB0aGUgRUNOLXNwZWNpZmljIFNZTiBmbGFnLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIEl04oCZcyBub3QganVzdCBhYm91dCAqd2hhdCogaGFwcGVucywgYnV0ICp3aHkqLiBTbywgSSB3YW50IHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIExldCdzIHNlZSB3aG8gaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYHRjcF9lY25fY3JlYXRlX3JlcXVlc3RgLCB3aGljaCwgSSdtIGd1ZXNzaW5nLCBzZXRzIHVwIHRoZSBwcmVjb25kaXRpb25zIGZvciBgdGNwX2Vjbl9zZW5kX3N5bmAgdG8gd29yaywgb3IgcG9zc2libHkgZXZlbiB0aGUgZmxhZ3MgdGhlbXNlbHZlcy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGdyYXBoIGhlcmUgd2lsbCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBFQ04gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBUQ1Agc3RhY2ssIHBhcnRpY3VsYXJseSBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBjb25uZWN0aW9uIHNldHVwLiBUaGlzIHdpbGwgaGVscCBtZSBzZWUgaWYgdGhlIEVDTiBjb2RlIGlzIGludGVncmF0ZWQgY2xlYW5seSBvciBpZiB0aGVyZSBhcmUgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIExldCdzIGRpdmUgaW50byB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI0NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA2OjU3LjQyODA4NjIxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MDg4MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9lY25fY3JlYXRlX3JlcXVlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuYz03NDIzPXN0YXRpYyBpbmxpbmUgdm9pZCBwcl9kcm9wX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIF9fdTE2IHBvcnQsIGludCBmYW1pbHkpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDUzLSAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc0NTQ6c3RhdGljIHZvaWQgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQ1NS1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzYxOT1pbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3MzYtXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzczNzpcXHR0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHJlcSwgc2tiLCBzaywgZHN0KTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNjo1Ny42MTcxODA2MTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5NDQ2NjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIFRDUCBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGUgVENQIGNvbm5lY3Rpb24gcHJvY2VzcywgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGB0Y3BfY29ubl9yZXF1ZXN0YCB0cmlnZ2VycyBgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdGAuIEkgbmVlZCB0byByZW1lbWJlciB3aGF0J3MgZ29pbmcgb24gdGhlcmUgd2l0aCBFQ04g4oCTIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIHJldmlld2luZy4gVGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGludGVyYWN0aW9uLlxuXG5UaGVuLCBteSBtaW5kIHdhbmRlcnMgdG93YXJkcyB0aGUgU1lOIGV4Y2hhbmdlLCBhbmQgSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IG9wdGlvbnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkaWZmZXJlbnQgVENQIG9wdGlvbnMgYXJlIG5lZ290aWF0ZWQgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgdGNwX3N5bl9vcHRpb25zYCwgYHRjcF9zeW5hY2tfb3B0aW9uc2AsIGFuZCBgdGNwX2VzdGFibGlzaGVkX29wdGlvbnNgIGFyZSBjYWxsZWQuIFRoaXMgd291bGQgcHJvdmlkZSBtZSBpbnNpZ2h0IGludG8gaG93IHRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgZW50aXJlIGNvbm5lY3Rpb24ncyBsaWZlY3ljbGUuIFVuZGVyc3RhbmRpbmcgdGhlIFwid2hvXCIgYW5kIFwid2h5XCIgb2YgdGhvc2UgY2FsbHMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBUQ1Agc3RhY2sncyBsb2dpYy4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgdHJhY2UgdGhvc2UgY2FsbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6MDAuMjExNjUxMjc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTc2NTM2OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwXyhzeW58c3luYWNrfGVzdGFibGlzaGVkKV9vcHRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2FvLmM9MTM4ND1zdGF0aWMgaW50IHRjcF9hb19wYXJzZV9jcnlwdG8oY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmNtZCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTEzOTMtXFx0ICpcXHRcXHRcXHRcXHRcXHQtIHdzY2FsZSksXFxubmV0L2lwdjQvdGNwX2FvLmM6MTM5NDpcXHQgKiBzZWUgdGNwX3N5bl9vcHRpb25zKCksIHRjcF9zeW5hY2tfb3B0aW9ucygpLCBjb21taXQgMzNhZDc5OGM5MjRiLlxcbm5ldC9pcHY0L3RjcF9hby5jLTEzOTUtXFx0ICpcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTEzOTktXFx0ICpcXHRcXHRcXHQtIDIgKiBUQ1BPTEVOX1NBQ0tfUEVSQkxPQ0spID0gOCAobWFjbGVuID0gNCksXFxubmV0L2lwdjQvdGNwX2FvLmM6MTQwMDpcXHQgKiBzZWUgdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoKS5cXG5uZXQvaXB2NC90Y3BfYW8uYy0xNDAxLVxcdCAqXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODY2PXN0YXRpYyB2b2lkIG1wdGNwX3NldF9vcHRpb25fY29uZChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODcyLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4NzM6XFx0XFx0aWYgKG1wdGNwX3N5bmFja19vcHRpb25zKHJlcSwgXFx1MDAyNnNpemUsIFxcdTAwMjZvcHRzLVxcdTAwM2VtcHRjcCkpIHtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODc0LVxcdFxcdFxcdGlmICgqcmVtYWluaW5nIFxcdTAwM2U9IHNpemUpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04ODEtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg4MjpzdGF0aWMgdTMyIHRjcF9zeW5hY2tfb3B0aW9uc19jb21iaW5lX3NhdmluZyhzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04ODMte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTkwMz1zdGF0aWMgaW50IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24oc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cywgaW50IHJlcXVpcmVkLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTkxMi1cXHRpZiAob3B0cy1cXHUwMDNldXNlX3N5bmFja19lY25fYnl0ZXMpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjkxMzpcXHRcXHRtYXhfY29tYmluZV9zYXZpbmcgPSB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcob3B0cyk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTkxNC1cXHRlbHNlXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTU4LSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo5NTk6c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NjAtXFx0XFx0XFx0XFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDMxLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMDMyOlxcdFxcdGlmIChtcHRjcF9zeW5fb3B0aW9ucyhzaywgc2tiLCBcXHUwMDI2c2l6ZSwgXFx1MDAyNm9wdHMtXFx1MDAzZW1wdGNwKSkge1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDMzLVxcdFxcdFxcdGlmIChyZW1haW5pbmcgXFx1MDAzZT0gc2l6ZSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwNjAtLyogU2V0IHVwIFRDUCBvcHRpb25zIGZvciBTWU4tQUNLcy4gKi9cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTA2MTpzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwNjItXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTUwLSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTUxOnN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTUyLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5MS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTE5MjpcXHRcXHRvcHRfc2l6ZSA9IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgcmVtYWluaW5nLCBoYXNfdHMsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExOTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2b3B0cy1cXHUwMDNlbXB0Y3ApO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTE1MzY9c3RhdGljIGludCBfX3RjcF90cmFuc21pdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE1NzktXFx0aWYgKHVubGlrZWx5KHRjYi1cXHUwMDNldGNwX2ZsYWdzIFxcdTAwMjYgVENQSERSX1NZTikpIHtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTU4MDpcXHRcXHR0Y3Bfb3B0aW9uc19zaXplID0gdGNwX3N5bl9vcHRpb25zKHNrLCBza2IsIFxcdTAwMjZvcHRzLCBcXHUwMDI2a2V5KTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU4MS1cXHR9IGVsc2Uge1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNTgyOlxcdFxcdHRjcF9vcHRpb25zX3NpemUgPSB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzaywgc2tiLCBcXHUwMDI2b3B0cywgXFx1MDAyNmtleSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE1ODMtXFx0XFx0LyogRm9yY2UgYSBQU0ggZmxhZyBvbiBhbGwgKEdTTykgcGFja2V0cyB0byBleHBlZGl0ZSBHUk8gZmx1c2hcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMTAzPXVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIxMTktXFx0dGNwX2dldF9jdXJyZW50X2tleShzaywgXFx1MDAyNmtleSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIxMjA6XFx0aGVhZGVyX2xlbiA9IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHNrLCBOVUxMLCBcXHUwMDI2b3B0cywgXFx1MDAyNmtleSkgK1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMTIxLVxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM5Mzk9c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MDM2LVxcdFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldGNwX2ZsYWdzID0gVENQSERSX1NZTiB8IFRDUEhEUl9BQ0s7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQwMzc6XFx0dGNwX2hlYWRlcl9zaXplID0gdGNwX3N5bmFja19vcHRpb25zKHNrLCByZXEsIG1zcywgc2tiLCBcXHUwMDI2b3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDAzOC1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZrZXksIGZvYywgc3luYWNrX3R5cGUsIHN5bl9za2IpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTQyMj12b2lkIG1wdGNwX2dldF9vcHRpb25zKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2My1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjQ2NDpib29sIG1wdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2NS1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50ICpzaXplLCBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2OS1cXHQvKiB3ZSB3aWxsIHVzZSBzbmRfaXNuIHRvIGRldGVjdCBmaXJzdCBwa3QgW3JlXXRyYW5zbWlzc2lvblxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NDcwOlxcdCAqIGluIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoKVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNDcxLVxcdCAqL1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz01MDM9c3RhdGljIHZvaWQgY2xlYXJfM3JkYWNrX3JldHJhbnNtaXNzaW9uKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTExLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NTEyOnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTEzLVxcdFxcdFxcdFxcdFxcdCBib29sIHNuZF9kYXRhX2Zpbl9lbmFibGUsIGludCAqc2l6ZSxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTI1LVxcdCAqIHRlbGwgdGhlIGNhbGxlciB0byBkZWZlciB0aGUgZXN0aW1hdGUgdG9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjUyNjpcXHQgKiBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcygpLCB3aGljaCB3aWxsIHJlc2VydmUgZW5vdWdoIHNwYWNlLlxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTI3LVxcdCAqL1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz01OTY9c3RhdGljIHZvaWQgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNjIzLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NjI0OnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTYyNS1cXHRcXHRcXHRcXHRcXHQgIGJvb2wgc25kX2RhdGFfZmluX2VuYWJsZSwgaW50ICpzaXplLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz02OTI9c3RhdGljIHU2NCBhZGRfYWRkcl9nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MixcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNzE4LVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NzE5OnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfYWRkX2FkZHIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNzIwLVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnNpemUsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTc1OS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjc2MDpzdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX3JtX2FkZHIoc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemUsXFxubmV0L21wdGNwL29wdGlvbnMuYy03NjEtXFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZyxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNzgxLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NzgyOnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXBfcHJpbyhzdHJ1Y3Qgc29jayAqc2ssIGludCAqc2l6ZSxcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTc4My1cXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy04MDYtXFxubmV0L21wdGNwL29wdGlvbnMuYzo4MDc6c3RhdGljIG5vaW5saW5lIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19yc3Qoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODA4LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCAqc2l6ZSxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODI1LVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6ODI2OnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZmFzdGNsb3NlKHN0cnVjdCBzb2NrICpzaywgaW50ICpzaXplLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODI3LVxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCByZW1haW5pbmcsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg0Ny1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjg0ODpzdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wX2ZhaWwoc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemUsXFxubmV0L21wdGNwL29wdGlvbnMuYy04NDktXFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZyxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODY5LVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6ODcwOmludCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg3MS1cXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLCBib29sIGhhc190cyxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODg5LVxcdGlmICh1bmxpa2VseShza2IgXFx1MDAyNlxcdTAwMjYgVENQX1NLQl9DQihza2IpLVxcdTAwM2V0Y3BfZmxhZ3MgXFx1MDAyNiBUQ1BIRFJfUlNUKSkge1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6ODkwOlxcdFxcdGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Zhc3RjbG9zZShzaywgXFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsIG9wdHMpIHx8XFxubmV0L21wdGNwL29wdGlvbnMuYzo4OTE6XFx0XFx0ICAgIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXBfZmFpbChzaywgXFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsIG9wdHMpKSB7XFxubmV0L21wdGNwL29wdGlvbnMuYy04OTItXFx0XFx0XFx0dG90YWxfc2l6ZSArPSBvcHRfc2l6ZTtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODk1LVxcdFxcdC8qIE1QX1JTVCBjYW4gYmUgdXNlZCB3aXRoIE1QX0ZBU1RDTE9TRSBhbmQgTVBfRkFJTCBpZiB0aGVyZSBpcyByb29tICovXFxubmV0L21wdGNwL29wdGlvbnMuYzo4OTY6XFx0XFx0aWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfcnN0KHNrLCBcXHUwMDI2b3B0X3NpemUsIHJlbWFpbmluZywgb3B0cykpIHtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg5Ny1cXHRcXHRcXHR0b3RhbF9zaXplICs9IG9wdF9zaXplO1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy05MDMtXFx0c25kX2RhdGFfZmluID0gbXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spO1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTA0OlxcdGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wKHNrLCBza2IsIHNuZF9kYXRhX2ZpbiwgXFx1MDAyNm9wdF9zaXplLCBvcHRzKSlcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkwNS1cXHRcXHRyZXQgPSB0cnVlO1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTA2OlxcdGVsc2UgaWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKHNrLCBza2IsIHNuZF9kYXRhX2ZpbiwgXFx1MDAyNm9wdF9zaXplLCBvcHRzKSkge1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTA3LVxcdFxcdGludCBtcF9mYWlsX3NpemU7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkwOS1cXHRcXHRyZXQgPSB0cnVlO1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTEwOlxcdFxcdGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wX2ZhaWwoc2ssIFxcdTAwMjZtcF9mYWlsX3NpemUsXFxubmV0L21wdGNwL29wdGlvbnMuYy05MTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVtYWluaW5nIC0gb3B0X3NpemUsIG9wdHMpKSB7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkyNS1cXHRyZW1haW5pbmcgLT0gb3B0X3NpemU7XFxubmV0L21wdGNwL29wdGlvbnMuYzo5MjY6XFx0aWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfYWRkX2FkZHIoc2ssIHNrYiwgXFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsXFxubmV0L21wdGNwL29wdGlvbnMuYy05MjctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGhhc190cywgb3B0cykpIHtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTMwLVxcdFxcdHJldCA9IHRydWU7XFxubmV0L21wdGNwL29wdGlvbnMuYzo5MzE6XFx0fSBlbHNlIGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX3JtX2FkZHIoc2ssIFxcdTAwMjZvcHRfc2l6ZSwgcmVtYWluaW5nLCBvcHRzKSkge1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTMyLVxcdFxcdHRvdGFsX3NpemUgKz0gb3B0X3NpemU7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkzNi1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjkzNzpcXHRpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcF9wcmlvKHNrLCBcXHUwMDI2b3B0X3NpemUsIHJlbWFpbmluZywgb3B0cykpIHtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkzOC1cXHRcXHR0b3RhbF9zaXplICs9IG9wdF9zaXplO1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy05NDUtXFxubmV0L21wdGNwL29wdGlvbnMuYzo5NDY6Ym9vbCBtcHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIHVuc2lnbmVkIGludCAqc2l6ZSxcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTk0Ny1cXHRcXHRcXHQgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTQ3MD12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNDk1LVxcdCAqXFxubmV0L21wdGNwL29wdGlvbnMuYzoxNDk2OlxcdCAqIFRoZSBzYW1lIGFwcGxpZXMgaW4gbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucygpIGZ1bmN0aW9uLlxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQ5Ny1cXHQgKi9cXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTUzMi1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE1MzM6XFx0XFx0XFx0LyogRFNTIG9wdGlvbiBpcyBzZXQgb25seSBieSBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTUzNC1cXHRcXHRcXHQgKiB0aGUgY2FsbGVyIGlzIF9fdGNwX3RyYW5zbWl0X3NrYigpIGFuZCBzc2sgaXMgYWx3YXlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjAwLjQ2OTMxMDMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NzAzNzQyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIFRDUCBTb2NrZXQgT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVENQIHNvY2tldCBvcHRpb25zIGFyZSBiZWluZyBzZXQgYW5kIHJldHJpZXZlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgZG9fdGNwX3NldHNvY2tvcHRgIGFuZCBgZG9fdGNwX2dldHNvY2tvcHRgLiBJIHJlbWVtYmVyIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBrZXkgaW4gdGhlIGBuZXQvaXB2NC90Y3AuY2AgZmlsZSwgc28gdGhhdCdzIHdoZXJlIEknbGwgc3RhcnQuIEZpcnN0LCBhIHF1aWNrIGNoZWNrIG9uIGBkb190Y3Bfc2V0c29ja29wdGDigKYgQWgsIGl0J3Mgc3RhdGljLiBUaGF0IG1lYW5zIGl0J3Mgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHNwZWNpZmljIGZpbGUuIE5vdywgdG8gdHJhY2UgaXRzIHVzYWdlLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYHRjcF9zZXRzb2Nrb3B0YCBjYWxscyB0aGlzLiBOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgdGNwX3NldHNvY2tvcHRgIGlzIHN0YXRpYyBvciBleHBvcnRlZC4gVGhhdCB3aWxsIHRlbGwgbWUgaG93IGV4dGVybmFsbHkgYWNjZXNzaWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMuIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc1NCwiT3V0cHV0VG9rZW5zIjo1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjAzLjAzOTY4NzAzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTEzMTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIodGNwX3NldHNvY2tvcHR8ZG9fdGNwX3NldHNvY2tvcHR8dGNwX2dldHNvY2tvcHR8ZG9fdGNwX2dldHNvY2tvcHQpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTM4MjM9aW50IHRjcF9zb2NrX3NldF9tYXhzZWcoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzgzOC0gKi9cXG5uZXQvaXB2NC90Y3AuYzozODM5OmludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L2lwdjQvdGNwLmMtMzg0MC1cXHRcXHQgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDE4NS1cXG5uZXQvaXB2NC90Y3AuYzo0MTg2OmludCB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L2lwdjQvdGNwLmMtNDE4Ny1cXHRcXHQgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDE5NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwLmM6NDE5NTpcXHRyZXR1cm4gZG9fdGNwX3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwLmMtNDE5Ni19XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00NDIzPXN0cnVjdCBza19idWZmICp0Y3BfZ2V0X3RpbWVzdGFtcGluZ19vcHRfc3RhdHMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDQ5NC1cXG5uZXQvaXB2NC90Y3AuYzo0NDk1OmludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG5uZXQvaXB2NC90Y3AuYy00NDk2LVxcdFxcdCAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9NDg3Nj1ib29sIHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQoaW50IGxldmVsLCBpbnQgb3B0bmFtZSlcXG5uZXQvaXB2NC90Y3AuYy00ODc3LXtcXG5uZXQvaXB2NC90Y3AuYzo0ODc4OlxcdC8qIFRDUCBkb190Y3BfZ2V0c29ja29wdCBoYXMgb3B0aW1pemVkIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb25cXG5uZXQvaXB2NC90Y3AuYy00ODc5LVxcdCAqIHRvIGF2b2lkIGV4dHJhIHNvY2tldCBsb2NrIGZvciBUQ1BfWkVST0NPUFlfUkVDRUlWRS5cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ4ODYtXFxubmV0L2lwdjQvdGNwLmM6NDg4NzppbnQgdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbm5ldC9pcHY0L3RjcC5jLTQ4ODgtXFx0XFx0ICAgaW50IF9fdXNlciAqb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDg5NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwLmM6NDg5NjpcXHRyZXR1cm4gZG9fdGNwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBVU0VSX1NPQ0tQVFIob3B0dmFsKSxcXG5uZXQvaXB2NC90Y3AuYy00ODk3LVxcdFxcdFxcdFxcdCBVU0VSX1NPQ0tQVFIob3B0bGVuKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjAzLjEyODgyNDQ0OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDE2MjM3OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AgU29ja2V0IE9wdGlvbnMgaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBzb21lIFRDUCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9ucyBgZG9fdGNwX3NldHNvY2tvcHRgIGFuZCBgZG9fdGNwX2dldHNvY2tvcHRgLiBUaGV5J3JlIGJvdGggZGVmaW5lZCBpbiBgbmV0L2lwdjQvdGNwLmNgLCBhbmQgaW1wb3J0YW50bHksIHRoZXkncmUgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgbWVhbmluZyB0aGV5J3JlIHBvdGVudGlhbGx5IGFjY2Vzc2libGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLlxuXG5OZXh0LCBJIHdhbnRlZCB0byB1bmRlcnN0YW5kIGhvdyBhIFRDUCBzb2NrZXQgaXMgaW5pdGlhbGl6ZWQsIHNvIEkgY2hlY2tlZCBgdGNwX2luaXRfc29ja2AgaW4gdGhlIHNhbWUgZmlsZS4gSXQncyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGlzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHdvdWxkIGxpa2VseSBiZSBjYWxsZWQgZnJvbSBhIHJhbmdlIG9mIHBsYWNlcy5cblxuTm93LCBJIHN3aXRjaGVkIGdlYXJzIHNsaWdodGx5IGFuZCBleGFtaW5lZCBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24gKEVDTik6IGB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0YCB3aXRoaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gQWgsIHRoaXMgb25lJ3MgKnN0YXRpYyouIE9rYXksIHNvIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgYHRjcF9pbnB1dC5jYCBmaWxlLiBJdHMgbm9uLXN0YXRpYyBjYWxsZXIgaXMgYHRjcF9jb25uX3JlcXVlc3RgLCBzbyBJIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvZGUuXG5cbkZpbmFsbHksIEknbSBzaGlmdGluZyBteSBwZXJzcGVjdGl2ZSB0byB0aGUgb3V0cHV0IHNpZGUgb2YgVENQLCBpbiBgbmV0L2lwdjQvdGNwX291dHB1dC5jYCwgdG8gaW52ZXN0aWdhdGUgaG93IFNZTiwgU1lOLUFDSywgYW5kIGVzdGFibGlzaGVkIFRDUCBvcHRpb25zIGFyZSBoYW5kbGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGF0dHJpYnV0ZXMgb2YgYHRjcF9zeW5fb3B0aW9uc2AsIGB0Y3Bfc3luYWNrX29wdGlvbnNgLCBhbmQgYHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYC4gQXJlIHRoZXNlIHN0YXRpYyBvciBub24tc3RhdGljPyBUaGF0J2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlaXIgc2NvcGUgYW5kIGhvdyB0aGV5IGFyZSB1c2VkIHdpdGhpbiB0aGUgVENQIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc3MiwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNzowNi41NDUwNjcwNDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDU1ODEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIodGNwX3N5bl9vcHRpb25zfHRjcF9zeW5hY2tfb3B0aW9uc3x0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX291dHB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9vdXRwdXQuYz04NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc2V0X29wdGlvbl9jb25kKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NzItXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg3MzpcXHRcXHRpZiAobXB0Y3Bfc3luYWNrX29wdGlvbnMocmVxLCBcXHUwMDI2c2l6ZSwgXFx1MDAyNm9wdHMtXFx1MDAzZW1wdGNwKSkge1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NzQtXFx0XFx0XFx0aWYgKCpyZW1haW5pbmcgXFx1MDAzZT0gc2l6ZSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4MS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODgyOnN0YXRpYyB1MzIgdGNwX3N5bmFja19vcHRpb25zX2NvbWJpbmVfc2F2aW5nKHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4My17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9OTAzPXN0YXRpYyBpbnQgdGNwX29wdGlvbnNfZml0X2FjY2VjbihzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLCBpbnQgcmVxdWlyZWQsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTEyLVxcdGlmIChvcHRzLVxcdTAwM2V1c2Vfc3luYWNrX2Vjbl9ieXRlcylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTEzOlxcdFxcdG1heF9jb21iaW5lX3NhdmluZyA9IHRjcF9zeW5hY2tfb3B0aW9uc19jb21iaW5lX3NhdmluZyhvcHRzKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTE0LVxcdGVsc2VcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NTgtICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjk1OTpzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeW5fb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTk2MC1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwMzEtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwMzI6XFx0XFx0aWYgKG1wdGNwX3N5bl9vcHRpb25zKHNrLCBza2IsIFxcdTAwMjZzaXplLCBcXHUwMDI2b3B0cy1cXHUwMDNlbXB0Y3ApKSB7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwMzMtXFx0XFx0XFx0aWYgKHJlbWFpbmluZyBcXHUwMDNlPSBzaXplKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2MC0vKiBTZXQgdXAgVENQIG9wdGlvbnMgZm9yIFNZTi1BQ0tzLiAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMDYxOnN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2Mi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExNTAtICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjExNTE6c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExNTItXFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTkxLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTkyOlxcdFxcdG9wdF9zaXplID0gbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzaywgc2tiLCByZW1haW5pbmcsIGhhc190cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvcHRzLVxcdTAwM2VtcHRjcCk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTUzNj1zdGF0aWMgaW50IF9fdGNwX3RyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU3OS1cXHRpZiAodW5saWtlbHkodGNiLVxcdTAwM2V0Y3BfZmxhZ3MgXFx1MDAyNiBUQ1BIRFJfU1lOKSkge1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNTgwOlxcdFxcdHRjcF9vcHRpb25zX3NpemUgPSB0Y3Bfc3luX29wdGlvbnMoc2ssIHNrYiwgXFx1MDAyNm9wdHMsIFxcdTAwMjZrZXkpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgxLVxcdH0gZWxzZSB7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1ODI6XFx0XFx0dGNwX29wdGlvbnNfc2l6ZSA9IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHNrLCBza2IsIFxcdTAwMjZvcHRzLCBcXHUwMDI2a2V5KTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU4My1cXHRcXHQvKiBGb3JjZSBhIFBTSCBmbGFnIG9uIGFsbCAoR1NPKSBwYWNrZXRzIHRvIGV4cGVkaXRlIEdSTyBmbHVzaFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIxMDM9dW5zaWduZWQgaW50IHRjcF9jdXJyZW50X21zcyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjExOS1cXHR0Y3BfZ2V0X2N1cnJlbnRfa2V5KHNrLCBcXHUwMDI2a2V5KTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjEyMDpcXHRoZWFkZXJfbGVuID0gdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIE5VTEwsIFxcdTAwMjZvcHRzLCBcXHUwMDI2a2V5KSArXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIxMjEtXFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IHRjcGhkcik7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzkzOT1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQwMzYtXFx0VENQX1NLQl9DQihza2IpLVxcdTAwM2V0Y3BfZmxhZ3MgPSBUQ1BIRFJfU1lOIHwgVENQSERSX0FDSztcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDAzNzpcXHR0Y3BfaGVhZGVyX3NpemUgPSB0Y3Bfc3luYWNrX29wdGlvbnMoc2ssIHJlcSwgbXNzLCBza2IsIFxcdTAwMjZvcHRzLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MDM4LVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmtleSwgZm9jLCBzeW5hY2tfdHlwZSwgc3luX3NrYilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6MDYuNzE5NjMwODA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNjUzNzEyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgRUNOIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYSBjbGVhciB0cmFjZSBvZiB0aGUgbmV3IEVDTiBsb2dpYyB3ZWF2aW5nIGl0cyB3YXkgdGhyb3VnaCB0aGUgVENQIHN0YWNrLiBgdGNwX21ha2Vfc3luYWNrYCBjYWxscyBgdGNwX3N5bmFja19vcHRpb25zYCwgYW5kIGB0Y3BfY3VycmVudF9tc3NgIGNhbGxzIGB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AuIFdlJ3ZlIGdvdCBgX190Y3BfdHJhbnNtaXRfc2tiYCBwdWxsaW5nIGluIGJvdGggYHRjcF9zeW5fb3B0aW9uc2AgYW5kIGB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AuIEZ1cnRoZXJtb3JlLCBgdGNwX2Nvbm5fcmVxdWVzdGAgbm93IHV0aWxpemVzIGB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gd2UgaGF2ZSB0aGUgYGRvX3RjcF9zZXRzb2Nrb3B0YCBhbmQgYGRvX3RjcF9nZXRzb2Nrb3B0YCBmdW5jdGlvbnMgZGlyZWN0bHkgaGFuZGxpbmcgc29ja2V0IG9wdGlvbiBpbnRlcmFjdGlvbnMuIEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGB0Y3BfaW5pdF9zb2NrYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBpbnRyb2R1Y2VkIHJlbGF0ZWQgdG8gRUNOLiBJJ2xsIGZsYWcgYHRjcF9zZXRzb2Nrb3B0YCwgYHRjcF9nZXRzb2Nrb3B0YCwgYGRvX3RjcF9zZXRzb2Nrb3B0YCwgYGRvX3RjcF9nZXRzb2Nrb3B0YCwgYHRjcF9tYWtlX3N5bmFja2AsIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdGAgYXMgRm9jdXNTeW1ib2xzLiBBcmUgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyAqdWJpcXVpdG91cyogd2l0aGluIHRoZSBjb2RlPyBTcGVjaWZpY2FsbHksIGBkb190Y3Bfc2V0c29ja29wdGAsIGBkb190Y3BfZ2V0c29ja29wdGAsIGB0Y3BfbWFrZV9zeW5hY2tgLCBhbmQgYHRjcF9jb25uX3JlcXVlc3RgIGFyZSBkZWZpbml0ZWx5IG1vcmUgc3BlY2lmaWMgdG8gdGhlIEVDTiBpbXBsZW1lbnRhdGlvbiBsb2dpYyB0aGFuIHNvbWUgb2YgdGhlIG90aGVyIGdlbmVyaWMgZnVuY3Rpb25zLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBJTkVUYCBpcyB0aGUgZm91bmRhdGlvbmFsIHJlcXVpcmVtZW50LiBXZSBhcmUgYWxzbyBnb2luZyB0byBuZWVkIGBCUEZfU1lTQ0FMTGAgZm9yIEJQRiBzb2Nrb3B0IGhlbHBlciBzdXBwb3J0LlxuXG5BbHJpZ2h0LCBsZXQncyBkbyBhIHNhbml0eSBjaGVjayBvbiBldmVyeXRoaW5nOiBUaGlzIGlzIGEgd29ydGh3aGlsZSBwYXRjaCB0byBmdXp6LiBJdCBhZGRzIGBUQ1BfRUNOYCBhbmQgYFRDUF9FQ05fT1BUSU9OYCBzb2NrZXQgb3B0aW9ucy4gVGhhdCdzIGdvb2QuIFdlIGFyZSBlZmZlY3RpdmVseSBpbnRyb2R1Y2luZyBwZXItc29ja2V0IG92ZXJyaWRlcyBvZiBgdGNwX2VjbmAgYW5kIGB0Y3BfZWNuX29wdGlvbmAsIHdoaWNoIHNob3VsZCBhbGxvdyBmb3IgZ3JhbnVsYXIgY29udHJvbCBvdmVyIEVDTiBhbmQgQWNjRUNOIGJlaGF2aW9yLiBUaGUgcGF0Y2ggdG91Y2hlcyBzb2NrZXQgaW5pdGlhbGl6YXRpb24sIHNldHNvY2tvcHQvZ2V0c29ja29wdCBoYW5kbGVycywgQlBGIHNvY2tvcHQgZmlsdGVycywgU1lOL1NZTi1BQ0sgb3B0aW9uIGJ1aWxkaW5nLCBhbmQgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nLiBBbGwga2V5IHBhcnRzLlxuXG5UaGUgRm9jdXNTeW1ib2xzIGFyZTogYGRvX3RjcF9zZXRzb2Nrb3B0YCwgYGRvX3RjcF9nZXRzb2Nrb3B0YCwgYHRjcF9jb25uX3JlcXVlc3RgLCBgdGNwX21ha2Vfc3luYWNrYCwgYW5kIGB0Y3BfY29ubmVjdGAuXG5cblRoZSBFbmFibGVkQ29uZmlncyBhcmUgYElORVRgIGFuZCBgQlBGX1NZU0NBTExgLlxuXG5Ob3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MzIsIk91dHB1dFRva2VucyI6MTcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjEyLjA4NTAwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTUxNjg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb190Y3Bfc2V0c29ja29wdFwiLFxuICAgIFwiZG9fdGNwX2dldHNvY2tvcHRcIixcbiAgICBcInRjcF9jb25uX3JlcXVlc3RcIixcbiAgICBcInRjcF9tYWtlX3N5bmFja1wiLFxuICAgIFwidGNwX2Nvbm5lY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIFRDUF9FQ04gYW5kIFRDUF9FQ05fT1BUSU9OIHNvY2tldCBvcHRpb25zIHRvIGFsbG93IHBlci1zb2NrZXQgY29uZmlndXJhdGlvbiBhbmQgb3ZlcnJpZGUgb2YgdGhlIHRjcF9lY24gYW5kIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBzZXR0aW5ncy4gSXQgbW9kaWZpZXMgVENQIHNvY2tldCBvcHRpb25zIGhhbmRsaW5nIChnZXRzb2Nrb3B0L3NldHNvY2tvcHQpLCBCUEYgc29ja29wdCBmaWx0ZXJzLCBUQ1AgU1lOL1NZTi1BQ0sgb3B0aW9uIGdlbmVyYXRpb24sIGFuZCBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IHByb2Nlc3NpbmcgaW4gdGhlIGNvcmUgSVB2NC9UQ1AgbmV0d29ya2luZyBzdGFjay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3RjcF9zZXRzb2Nrb3B0XCIsXG4gICAgXCJkb190Y3BfZ2V0c29ja29wdFwiLFxuICAgIFwidGNwX2Nvbm5fcmVxdWVzdFwiLFxuICAgIFwidGNwX21ha2Vfc3luYWNrXCIsXG4gICAgXCJ0Y3BfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgVENQX0VDTiBhbmQgVENQX0VDTl9PUFRJT04gc29ja2V0IG9wdGlvbnMgdG8gYWxsb3cgcGVyLXNvY2tldCBjb25maWd1cmF0aW9uIGFuZCBvdmVycmlkZSBvZiB0aGUgdGNwX2VjbiBhbmQgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIHNldHRpbmdzLiBJdCBtb2RpZmllcyBUQ1Agc29ja2V0IG9wdGlvbnMgaGFuZGxpbmcgKGdldHNvY2tvcHQvc2V0c29ja29wdCksIEJQRiBzb2Nrb3B0IGZpbHRlcnMsIFRDUCBTWU4vU1lOLUFDSyBvcHRpb24gZ2VuZXJhdGlvbiwgYW5kIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgcHJvY2Vzc2luZyBpbiB0aGUgY29yZSBJUHY0L1RDUCBuZXR3b3JraW5nIHN0YWNrLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNzoxMi4yNzY1MzM1NjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3Mjc0NzY5OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6MTIuMjc3Mzg5NTE3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTcyNzM5MDc1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcGVyLXNvY2tldCBFQ04gYW5kIEFjY0VDTiBjb25maWd1cmF0aW9uIG9wdGlvbnMgKFRDUF9FQ04gYW5kIFRDUF9FQ05fT1BUSU9OKSB2aWEgc2V0c29ja29wdC9nZXRzb2Nrb3B0IGFuZCBCUEYgc29ja29wcywgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIHN5c2N0bHMuXFxuXFxuS01TQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcXG4tIFRoZSBuZXcgZmllbGRzIGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYCBpbiBgc3RydWN0IHRjcF9zb2NrYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVENQX0VDTl9NT0RFX1VOU1BFQ2AgYW5kIGBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUNgIGluIGB0Y3BfaW5pdF9zb2NrKClgIGFuZCBjb3BpZWQgYWNyb3NzIHNvY2tldCBjbG9uZXMuXFxuLSBJbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAsIHJlYWRpbmcgdGhlc2UgZmllbGRzIGluaXRpYWxpemVzIHRoZSBmdWxsIGBpbnQgdmFsYCBiZWZvcmUgYGNvcHlfdG9fc29ja3B0cigpYCBjb3BpZXMgdGhlIGRhdGEgdG8gdXNlciBzcGFjZS4gTm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBzdGFjayBieXRlcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxcbi0gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBidWZmZXIgbGVuZ3RoIG1hbmlwdWxhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYXMgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MzA0ZDA0YzYzN2JjYjRhMGU0MjRlZTRmNzU0ZDgzNGEzOTkyMDE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDk6MDY6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5pbmRleCAyMDhmNDY5NjdlZTU5Li4yZTU1ZDllMmViMDlhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5AQCAtNTI4LDYgKzUyOCw0MyBAQCB0Y3BfZWNuX2ZhbGxiYWNrIC0gQk9PTEVBTlxuIFxuIFx0RGVmYXVsdDogMSAoZW5hYmxlZClcbiBcbit0Y3BfZWNuIChzb2NrZXQgb3B0aW9uKSAtIFRDUF9FQ05cbitcdFBlci1zb2NrZXQgY29udHJvbCBvZiBFQ04gbW9kZSwgYWxsb3dpbmcgcGVyLWNvbm5lY3Rpb24gb3ZlcnJpZGUgb2YgdGhlXG4rXHR0Y3BfZWNuIHN5c2N0bCBzZXR0aW5nLiBUaGlzIGVuYWJsZXMgTDRTIChMb3cgTGF0ZW5jeSwgTG93IExvc3MsIFNjYWxhYmxlXG4rXHRUaHJvdWdocHV0KSBjb25maWd1cmF0aW9uIG9uIGEgcGVyLXNvY2tldCBiYXNpcy5cbitcbitcdFNldHRpbmcgdGhpcyBzb2NrZXQgb3B0aW9uIHRvIGFueSB2YWx1ZSBleGNlcHQgMjU1IHdpbGwgb3ZlcnJpZGUgdGhlXG4rXHRzeXN0ZW0td2lkZSB0Y3BfZWNuIHN5c2N0bCBmb3IgdGhhdCBwYXJ0aWN1bGFyIHNvY2tldC4gQSB2YWx1ZSBvZiAyNTVcbitcdChUQ1BfRUNOX01PREVfVU5TUEVDKSBtZWFucyB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IHN5c2N0bCB2YWx1ZS5cbitcbitcdFBvc3NpYmxlIHZhbHVlczogMC01IChzZWUgdGNwX2VjbiBzeXNjdGwgZGVzY3JpcHRpb24gYWJvdmUpLCBvciAyNTUgdG9cbitcdHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgKHN5c2N0bF90Y3BfZWNuKS5cbitcbitcdEV4YW1wbGU6OlxuK1xuK1x0XHRpbnQgdmFsID0gMzsgIC8qIEFjY0VDTiBtb2RlICovXG4rXHRcdHNldHNvY2tvcHQoZmQsIFNPTF9UQ1AsIFRDUF9FQ04sIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpO1xuK1xuK1x0RGVmYXVsdDogMjU1ICh1bnNwZWNpZmllZCAtIHVzZXMgdGNwX2VjbiBzeXNjdGwgdmFsdWUpXG4rXG4rdGNwX2Vjbl9vcHRpb24gKHNvY2tldCBvcHRpb24pIC0gVENQX0VDTl9PUFRJT05cbitcdFBlci1zb2NrZXQgY29udHJvbCBvZiBBY2N1cmF0ZSBFQ04gKEFjY0VDTikgb3B0aW9uIHNlbmRpbmcgYmVoYXZpb3IsXG4rXHRhbGxvd2luZyBwZXItY29ubmVjdGlvbiBvdmVycmlkZSBvZiB0aGUgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIHNldHRpbmcuXG4rXG4rXHRTZXR0aW5nIHRoaXMgc29ja2V0IG9wdGlvbiB0byBhbnkgdmFsdWUgZXhjZXB0IDI1NSB3aWxsIG92ZXJyaWRlIHRoZVxuK1x0c3lzdGVtLXdpZGUgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIGZvciB0aGF0IHBhcnRpY3VsYXIgc29ja2V0LiBBIHZhbHVlIG9mXG4rXHQyNTUgKFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQykgbWVhbnMgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBzeXNjdGwgdmFsdWUuXG4rXG4rXHRQb3NzaWJsZSB2YWx1ZXM6IDAtMyAoc2VlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBkZXNjcmlwdGlvbiBhYm92ZSksIG9yIDI1NVxuK1x0dG8gdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCAoc3lzY3RsX3RjcF9lY25fb3B0aW9uKS5cbitcbitcdEV4YW1wbGU6OlxuK1xuK1x0XHRpbnQgdmFsID0gMjsgIC8qIFNlbmQgQWNjRUNOIG9wdGlvbiBvbiBldmVyeSBwYWNrZXQgKi9cbitcdFx0c2V0c29ja29wdChmZCwgU09MX1RDUCwgVENQX0VDTl9PUFRJT04sIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpO1xuK1xuK1x0RGVmYXVsdDogMjU1ICh1bnNwZWNpZmllZCAtIHVzZXMgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIHZhbHVlKVxuK1xuIHRjcF9mYWNrIC0gQk9PTEVBTlxuIFx0VGhpcyBpcyBhIGxlZ2FjeSBvcHRpb24sIGl0IGhhcyBubyBlZmZlY3QgYW55bW9yZS5cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS9saW51eC90Y3AuaFxuaW5kZXggNmE4Yzc3NzE5MzIyZi4uN2NiMWU3NjVmNDYxOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdGNwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdGNwLmhcbkBAIC0yODksNiArMjg5LDEzIEBAIHN0cnVjdCB0Y3Bfc29jayB7XG4gXHRcdFx0XHRcdCAqIHNhY2tlZF9vdXQgXHUwMDNlIDApXG4gXHRcdFx0XHRcdCAqL1xuIFx0dThcdGVjbl9mbGFncztcdC8qIEVDTiBzdGF0dXMgYml0cy5cdFx0XHQqL1xuK1x0dThcdGVjbl9tb2RlO1x0LyogUGVyLXNvY2tldCBFQ04gbW9kZSBvdmVycmlkZVxuK1x0XHRcdFx0ICogKFRDUF9FQ05fTU9ERV9VTlNQRUMgPSB1c2Ugc3lzY3RsKVxuK1x0XHRcdFx0ICovXG4rXHR1OFx0ZWNuX29wdGlvbjtcdC8qIFBlci1zb2NrZXQgQWNjRUNOIG9wdGlvbiBvdmVycmlkZVxuK1x0XHRcdFx0ICogKFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyA9IHVzZSBzeXNjdGwpXG4rXHRcdFx0XHQgKi9cbitcbiBcdF9fY2FjaGVsaW5lX2dyb3VwX2VuZCh0Y3Bfc29ja193cml0ZV90eCk7XG4gXG4gXHQvKiBUWFJYIHJlYWQtd3JpdGUgaG90cGF0aCBjYWNoZSBsaW5lcyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcF9lY24uaCBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaFxuaW5kZXggODY1ZDVjNWE3NzE4ZC4uOTMxZTA4NzcxNzZjNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcF9lY24uaFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwX2Vjbi5oXG5AQCAtMjIsNiArMjIsNyBAQCBlbnVtIHRjcF9lY25fbW9kZSB7XG4gXHRUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfQUNDRUNOID0gMyxcbiBcdFRDUF9FQ05fSU5fQUNDRUNOX09VVF9FQ04gPSA0LFxuIFx0VENQX0VDTl9JTl9BQ0NFQ05fT1VUX05PRUNOID0gNSxcbitcdFRDUF9FQ05fTU9ERV9VTlNQRUMgPSAyNTUsXHQvKiBVc2Ugc3lzY3RsIGRlZmF1bHQgKHBlci1zb2NrZXQpICovXG4gfTtcbiBcbiAvKiBBY2NFQ04gb3B0aW9uIHNlbmRpbmcgd2hlbiBBY2NFQ04gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IG5lZ290aWF0ZWQgKi9cbkBAIC0zMCw4ICszMSwyOSBAQCBlbnVtIHRjcF9hY2NlY25fb3B0aW9uIHtcbiBcdFRDUF9BQ0NFQ05fT1BUSU9OX01JTklNVU0gPSAxLFxuIFx0VENQX0FDQ0VDTl9PUFRJT05fRlVMTCA9IDIsXG4gXHRUQ1BfQUNDRUNOX09QVElPTl9QRVJTSVNUID0gMyxcbitcdFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyA9IDI1NSxcdC8qIFVzZSBzeXNjdGwgZGVmYXVsdCAocGVyLXNvY2tldCkgKi9cbiB9O1xuIFxuKy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBFQ04gbW9kZTogcGVyLXNvY2tldCBvdmVycmlkZSBvciBzeXNjdGwgZmFsbGJhY2sgKi9cbitzdGF0aWMgaW5saW5lIHU4IHRjcF9lY25fbW9kZV9lZmYoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHU4IG1vZGUgPSB0Y3Bfc2soc2spLVx1MDAzZWVjbl9tb2RlO1xuK1xuK1x0aWYgKG1vZGUgPT0gVENQX0VDTl9NT0RFX1VOU1BFQylcbitcdFx0cmV0dXJuIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbik7XG4rXHRyZXR1cm4gbW9kZTtcbit9XG4rXG4rLyogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIEFjY0VDTiBvcHRpb246IHBlci1zb2NrZXQgb3ZlcnJpZGUgb3Igc3lzY3RsIGZhbGxiYWNrICovXG4rc3RhdGljIGlubGluZSB1OCB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHU4IG9wdCA9IHRjcF9zayhzayktXHUwMDNlZWNuX29wdGlvbjtcbitcbitcdGlmIChvcHQgPT0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDKVxuK1x0XHRyZXR1cm4gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfZWNuX29wdGlvbik7XG4rXHRyZXR1cm4gb3B0O1xuK31cbitcbiAvKiBBcHBseSBlaXRoZXIgRUNUKDApIG9yIEVDVCgxKSBiYXNlZCBvbiBUQ1BfQ09OR19FQ1RfMV9ORUdPVElBVElPTiBmbGFnICovXG4gc3RhdGljIGlubGluZSB2b2lkIElORVRfRUNOX3htaXRfZWN0XzFfbmVnb3RpYXRpb24oc3RydWN0IHNvY2sgKnNrKVxuIHtcbkBAIC01OTksNyArNjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRjcF9lY25fc2VuZF9zeW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gXHRib29sIGJwZl9uZWVkc19lY24gPSB0Y3BfYnBmX2NhX25lZWRzX2Vjbihzayk7XG4gXHRib29sIHVzZV9lY24sIHVzZV9hY2NlY247XG4tXHR1OCB0Y3BfZWNuID0gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfZWNuKTtcbitcdHU4IHRjcF9lY24gPSB0Y3BfZWNuX21vZGVfZWZmKHNrKTtcbiBcbiBcdHVzZV9hY2NlY24gPSB0Y3BfZWNuID09IFRDUF9FQ05fSU5fQUNDRUNOX09VVF9BQ0NFQ04gfHxcbiBcdFx0ICAgICB0Y3BfY2FfbmVlZHNfYWNjZWNuKHNrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDczMmIzNWNjMDhkMWMuLmM1OGIxNjMzYmI0NmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTI5ODUsNyArMjk4NSw4IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKiBcdFx0ICAqKlRDUF9TWU5DTlQqKiwgKipUQ1BfVVNFUl9USU1FT1VUKiosICoqVENQX05PVFNFTlRfTE9XQVQqKixcbiAgKiBcdFx0ICAqKlRDUF9OT0RFTEFZKiosICoqVENQX01BWFNFRyoqLCAqKlRDUF9XSU5ET1dfQ0xBTVAqKixcbiAgKiBcdFx0ICAqKlRDUF9USElOX0xJTkVBUl9USU1FT1VUUyoqLCAqKlRDUF9CUEZfREVMQUNLX01BWCoqLFxuLSAqXHRcdCAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiouXG4rICpcdFx0ICAqKlRDUF9CUEZfUlRPX01JTioqLCAqKlRDUF9CUEZfU09DS19PUFNfQ0JfRkxBR1MqKixcbisgKlx0XHQgICoqVENQX0VDTioqLCAqKlRDUF9FQ05fT1BUSU9OKiouXG4gICogXHRcdCogKipJUFBST1RPX0lQKiosIHdoaWNoIHN1cHBvcnRzICpvcHRuYW1lKiAqKklQX1RPUyoqLlxuICAqIFx0XHQqICoqSVBQUk9UT19JUFY2KiosIHdoaWNoIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgKm9wdG5hbWUqXFwgczpcbiAgKiBcdFx0ICAqKklQVjZfVENMQVNTKiosICoqSVBWNl9BVVRPRkxPV0xBQkVMKiouXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG5pbmRleCAwMzc3MmRkNGQzOTkyLi4wMWViYjM0OGJhMjc0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmhcbkBAIC0xNDIsNiArMTQyLDggQEAgZW51bSB7XG4gI2RlZmluZSBUQ1BfUlRPX01BWF9NU1x0XHQ0NFx0LyogbWF4IHJ0byB0aW1lIGluIG1zICovXG4gI2RlZmluZSBUQ1BfUlRPX01JTl9VU1x0XHQ0NVx0LyogbWluIHJ0byB0aW1lIGluIHVzICovXG4gI2RlZmluZSBUQ1BfREVMQUNLX01BWF9VU1x0NDZcdC8qIG1heCBkZWxheWVkIGFjayB0aW1lIGluIHVzICovXG4rI2RlZmluZSBUQ1BfRUNOXHRcdFx0NDdcdC8qIFBlci1zb2NrZXQgRUNOIG1vZGUgKDAtNSwgMjU1PXVzZSBzeXNjdGwpICovXG4rI2RlZmluZSBUQ1BfRUNOX09QVElPTlx0XHQ0OFx0LyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqL1xuIFxuICNkZWZpbmUgVENQX1JFUEFJUl9PTlx0XHQxXG4gI2RlZmluZSBUQ1BfUkVQQUlSX09GRlx0XHQwXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uOTkzYjMxZTEwYjk0NCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTU2NzAsNiArNTY3MCw4IEBAIHN0YXRpYyBpbnQgc29sX3RjcF9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4gXHRjYXNlIFRDUF9OT1RTRU5UX0xPV0FUOlxuIFx0Y2FzZSBUQ1BfU0FWRV9TWU46XG4gXHRjYXNlIFRDUF9SVE9fTUFYX01TOlxuK1x0Y2FzZSBUQ1BfRUNOOlxuK1x0Y2FzZSBUQ1BfRUNOX09QVElPTjpcbiBcdFx0aWYgKCpvcHRsZW4gIT0gc2l6ZW9mKGludCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IDFjODY3YTMwMjQ0NDYuLmZiMzc2YTk3ZjBlNmQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC00NjMsNiArNDYzLDggQEAgdm9pZCB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdHRwLVx1MDAzZXRzb2Zmc2V0ID0gMDtcbiBcdHRwLVx1MDAzZXJhY2sucmVvX3duZF9zdGVwcyA9IDE7XG4rXHR0cC1cdTAwM2VlY25fbW9kZSA9IFRDUF9FQ05fTU9ERV9VTlNQRUM7XG4rXHR0cC1cdTAwM2VlY25fb3B0aW9uID0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDO1xuIFxuIFx0c2stXHUwMDNlc2tfd3JpdGVfc3BhY2UgPSBza19zdHJlYW1fd3JpdGVfc3BhY2U7XG4gXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1VTRV9XUklURV9RVUVVRSk7XG5AQCAtNDE2MCw2ICs0MTYyLDE4IEBAIGludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHRjcF9lbmFibGVfdHhfZGVsYXkoc2ssIHZhbCk7XG4gXHRcdFdSSVRFX09OQ0UodHAtXHUwMDNldGNwX3R4X2RlbGF5LCB2YWwpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgVENQX0VDTjpcbitcdFx0aWYgKHZhbCAhPSBUQ1BfRUNOX01PREVfVU5TUEVDIFx1MDAyNlx1MDAyNiAodmFsIFx1MDAzYyAwIHx8IHZhbCBcdTAwM2UgVENQX0VDTl9JTl9BQ0NFQ05fT1VUX05PRUNOKSlcbitcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRlbHNlXG4rXHRcdFx0V1JJVEVfT05DRSh0cC1cdTAwM2VlY25fbW9kZSwgdmFsKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFRDUF9FQ05fT1BUSU9OOlxuK1x0XHRpZiAodmFsICE9IFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyBcdTAwMjZcdTAwMjYgKHZhbCBcdTAwM2MgMCB8fCB2YWwgXHUwMDNlIFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QpKVxuK1x0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdGVsc2VcbitcdFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZWVjbl9vcHRpb24sIHZhbCk7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZXJyID0gLUVOT1BST1RPT1BUO1xuIFx0XHRicmVhaztcbkBAIC00ODQyLDYgKzQ4NTYsMTIgQEAgaW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuIFx0Y2FzZSBUQ1BfREVMQUNLX01BWF9VUzpcbiBcdFx0dmFsID0gamlmZmllc190b191c2VjcyhSRUFEX09OQ0UoaW5ldF9jc2soc2spLVx1MDAzZWljc2tfZGVsYWNrX21heCkpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgVENQX0VDTjpcbitcdFx0dmFsID0gUkVBRF9PTkNFKHRwLVx1MDAzZWVjbl9tb2RlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFRDUF9FQ05fT1BUSU9OOlxuK1x0XHR2YWwgPSBSRUFEX09OQ0UodHAtXHUwMDNlZWNuX29wdGlvbik7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiBcdH1cbkBAIC01MjU2LDYgKzUyNzYsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdGNwX3N0cnVjdF9jaGVjayh2b2lkKVxuIFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgdHNvcnRlZF9zZW50X3F1ZXVlKTtcbiBcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGhpZ2hlc3Rfc2Fjayk7XG4gXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fZmxhZ3MpO1xuK1x0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX21vZGUpO1xuK1x0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX29wdGlvbik7XG4gXG4gXHQvKiBUWFJYIHJlYWQtd3JpdGUgaG90cGF0aCBjYWNoZSBsaW5lcyAqL1xuIFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eHJ4LCBwcmVkX2ZsYWdzKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5pbmRleCAwZjYwYTFkYmY5Mjc0Li4wMDQzYjRiMmJjOTIyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5AQCAtNzQ1NywxMyArNzQ1NywxMiBAQCBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbi1cdGNvbnN0IHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGxpc3Rlbl9zayk7XG4gXHRib29sIHRoX2VjbiA9IHRoLVx1MDAzZWVjZSBcdTAwMjZcdTAwMjYgdGgtXHUwMDNlY3dyO1xuIFx0Ym9vbCBlY3QsIGVjbl9vaztcbiBcdHUzMiBlY25fb2tfZHN0O1xuIFxuIFx0aWYgKHRjcF9hY2NlY25fc3luX3JlcXVlc3RlZCh0aCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2VjbikgXHUwMDNlPSAzIHx8XG4rXHQgICAgKHRjcF9lY25fbW9kZV9lZmYobGlzdGVuX3NrKSBcdTAwM2U9IDMgfHxcbiBcdCAgICAgdGNwX2NhX25lZWRzX2FjY2VjbihsaXN0ZW5fc2spKSkge1xuIFx0XHRpbmV0X3JzayhyZXEpLVx1MDAzZWVjbl9vayA9IDE7XG4gXHRcdHRjcF9yc2socmVxKS1cdTAwM2VhY2NlY25fb2sgPSAxO1xuQEAgLTc0NzcsNyArNzQ3Niw3IEBAIHN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIFxuIFx0ZWN0ID0gIUlORVRfRUNOX2lzX25vdF9lY3QoVENQX1NLQl9DQihza2IpLVx1MDAzZWlwX2RzZmllbGQpO1xuIFx0ZWNuX29rX2RzdCA9IGRzdF9mZWF0dXJlKGRzdCwgRFNUX0ZFQVRVUkVfRUNOX01BU0spO1xuLVx0ZWNuX29rID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfZWNuKSB8fCBlY25fb2tfZHN0O1xuK1x0ZWNuX29rID0gdGNwX2Vjbl9tb2RlX2VmZihsaXN0ZW5fc2spIHx8IGVjbl9va19kc3Q7XG4gXG4gXHRpZiAoKCghZWN0IHx8IHRoLVx1MDAzZXJlczEgfHwgdGgtXHUwMDNlYWUpIFx1MDAyNlx1MDAyNiBlY25fb2spIHx8XG4gXHQgICAgdGNwX2NhX25lZWRzX2VjbihsaXN0ZW5fc2spIHx8XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5pbmRleCAwMDQxN2E0MjkyMjI1Li44MmI5NmM0MDE1ZmQwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbkBAIC0xMDQ1LDcgKzEwNDUsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeW5fb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAodW5saWtlbHkoKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgXHUwMDI2IFRDUEhEUl9BQ0spIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIHRjcF9lY25fbW9kZV9hY2NlY24odHApIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX3JldHJhbnNtaXRzIFx1MDAzYyAyIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIHRjcF9hY2NlY25fb3B0aW9uX2VmZihzaykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgcmVtYWluaW5nIFx1MDAzZT0gVENQT0xFTl9BQ0NFQ05fQkFTRSkpIHtcbiBcdFx0b3B0cy1cdTAwM2V1c2Vfc3luYWNrX2Vjbl9ieXRlcyA9IDE7XG4gXHRcdHJlbWFpbmluZyAtPSB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKG9wdHMsIDAsIHJlbWFpbmluZyk7XG5AQCAtMTEzMyw3ICsxMTMzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0c21jX3NldF9vcHRpb25fY29uZCh0Y3Bfc2soc2spLCBpcmVxLCBvcHRzLCBcdTAwMjZyZW1haW5pbmcpO1xuIFxuIFx0aWYgKHRyZXEtXHUwMDNlYWNjZWNuX29rIFx1MDAyNlx1MDAyNlxuLVx0ICAgIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHRjcF9hY2NlY25fb3B0aW9uX2VmZihzaykgXHUwMDI2XHUwMDI2XG4gXHQgICAgc3luYWNrX3R5cGUgIT0gVENQX1NZTkFDS19SRVRSQU5TIFx1MDAyNlx1MDAyNiByZW1haW5pbmcgXHUwMDNlPSBUQ1BPTEVOX0FDQ0VDTl9CQVNFKSB7XG4gXHRcdG9wdHMtXHUwMDNldXNlX3N5bmFja19lY25fYnl0ZXMgPSAxO1xuIFx0XHRyZW1haW5pbmcgLT0gdGNwX29wdGlvbnNfZml0X2FjY2VjbihvcHRzLCAwLCByZW1haW5pbmcpO1xuQEAgLTEyMjEsNyArMTIyMSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiXG4gXHR9XG4gXG4gXHRpZiAodGNwX2Vjbl9tb2RlX2FjY2Vjbih0cCkpIHtcbi1cdFx0aW50IGVjbl9vcHQgPSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKTtcbitcdFx0aW50IGVjbl9vcHQgPSB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spO1xuIFxuIFx0XHRpZiAoZWNuX29wdCBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlc2F3X2FjY2Vjbl9vcHQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAoZWNuX29wdCBcdTAwM2U9IFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QgfHxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDczMmIzNWNjMDhkMWMuLmM1OGIxNjMzYmI0NmUgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTI5ODUsNyArMjk4NSw4IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKiBcdFx0ICAqKlRDUF9TWU5DTlQqKiwgKipUQ1BfVVNFUl9USU1FT1VUKiosICoqVENQX05PVFNFTlRfTE9XQVQqKixcbiAgKiBcdFx0ICAqKlRDUF9OT0RFTEFZKiosICoqVENQX01BWFNFRyoqLCAqKlRDUF9XSU5ET1dfQ0xBTVAqKixcbiAgKiBcdFx0ICAqKlRDUF9USElOX0xJTkVBUl9USU1FT1VUUyoqLCAqKlRDUF9CUEZfREVMQUNLX01BWCoqLFxuLSAqXHRcdCAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiouXG4rICpcdFx0ICAqKlRDUF9CUEZfUlRPX01JTioqLCAqKlRDUF9CUEZfU09DS19PUFNfQ0JfRkxBR1MqKixcbisgKlx0XHQgICoqVENQX0VDTioqLCAqKlRDUF9FQ05fT1BUSU9OKiouXG4gICogXHRcdCogKipJUFBST1RPX0lQKiosIHdoaWNoIHN1cHBvcnRzICpvcHRuYW1lKiAqKklQX1RPUyoqLlxuICAqIFx0XHQqICoqSVBQUk9UT19JUFY2KiosIHdoaWNoIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgKm9wdG5hbWUqXFwgczpcbiAgKiBcdFx0ICAqKklQVjZfVENMQVNTKiosICoqSVBWNl9BVVRPRkxPV0xBQkVMKiouXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG5pbmRleCAxM2NlZWIzOTVlYjhmLi40ZjUyYjlkZjQyNjYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmhcbkBAIC0xMjgsNyArMTI4LDggQEAgZW51bSB7XG4gI2RlZmluZSBUQ1BfQ01fSU5RXHRcdFRDUF9JTlFcbiBcbiAjZGVmaW5lIFRDUF9UWF9ERUxBWVx0XHQzN1x0LyogZGVsYXkgb3V0Z29pbmcgcGFja2V0cyBieSBYWCB1c2VjICovXG4tXG4rI2RlZmluZSBUQ1BfRUNOXHRcdFx0NDdcdC8qIFBlci1zb2NrZXQgRUNOIG1vZGUgKDAtNSwgMjU1PXVzZSBzeXNjdGwpICovXG4rI2RlZmluZSBUQ1BfRUNOX09QVElPTlx0XHQ0OFx0LyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqL1xuIFxuICNkZWZpbmUgVENQX1JFUEFJUl9PTlx0XHQxXG4gI2RlZmluZSBUQ1BfUkVQQUlSX09GRlx0XHQwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuY1xuaW5kZXggZDk2ZTk5YjY3YWViZi4uZmI5N2ZhMGJjN2I0NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zZXRnZXRfc29ja29wdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuY1xuQEAgLTY0LDYgKzY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzb2Nrb3B0X3Rlc3Qgc29sX3RjcF90ZXN0c1tdID0ge1xuIFx0eyAub3B0ID0gVENQX0JQRl9ERUxBQ0tfTUFYLCAubmV3ID0gMzAwMDAsIC5leHBlY3RlZCA9IDMwMDAwLCB9LFxuIFx0eyAub3B0ID0gVENQX0JQRl9SVE9fTUlOLCAubmV3ID0gMzAwMDAsIC5leHBlY3RlZCA9IDMwMDAwLCB9LFxuIFx0eyAub3B0ID0gVENQX1JUT19NQVhfTVMsIC5uZXcgPSAyMDAwLCAuZXhwZWN0ZWQgPSAyMDAwLCB9LFxuK1x0eyAub3B0ID0gVENQX0VDTiwgLm5ldyA9IDMsIC5leHBlY3RlZCA9IDMsIC5yZXN0b3JlID0gMjU1LCB9LFxuK1x0eyAub3B0ID0gVENQX0VDTl9PUFRJT04sIC5uZXcgPSAyLCAuZXhwZWN0ZWQgPSAyLCAucmVzdG9yZSA9IDI1NSwgfSxcbiBcdHsgLm9wdCA9IDAsIH0sXG4gfTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjEyLjI3NzM5MjA3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzYwMzIzMDMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB2dWxuZXJhYmlsaXRpZXMgdGhhdCBLTVNBTiBtaWdodCBjYXRjaC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSBkb2VzLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIHR3byBuZXcgZmllbGRzLCBgZWNuX21vZGVgIGFuZCBgZWNuX29wdGlvbmAsIGJvdGggb2YgdHlwZSBgdThgLCB0byB0aGUgYHRjcF9zb2NrYCBzdHJ1Y3R1cmUuIFRoZXNlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgdG8gYFRDUF9FQ05fTU9ERV9VTlNQRUNgICgyNTUpIGFuZCBgVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDYCAoMjU1KSByZXNwZWN0aXZlbHkgd2l0aGluIGB0Y3BfaW5pdF9zb2NrYC5cblxuVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBoZWxwZXIgZnVuY3Rpb25zLCBgdGNwX2Vjbl9tb2RlX2VmZihzaylgIGFuZCBgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKWAuIFRoZXNlIGZ1bmN0aW9ucyBjbGV2ZXJseSByZWFkIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyAoYHRwLVx1MDAzZWVjbl9tb2RlYCBhbmQgYHRwLVx1MDAzZWVjbl9vcHRpb25gKS4gSWYgdGhvc2UgZmllbGRzIGhhdmVuJ3QgYmVlbiBleHBsaWNpdGx5IHNldCAoaS5lLiwgdGhleSdyZSBzdGlsbCBhdCB0aGUgVU5TUEVDIHZhbHVlKSwgdGhlIGhlbHBlciBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzeXNjdGwgdmFsdWVzIGZvciBFQ04gbW9kZSBhbmQgRUNOIG9wdGlvbiByZXNwZWN0aXZlbHkuIEkgc2VlIHdoYXQgdGhleSdyZSBkb2luZyBoZXJlLCBtYWtpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbW9yZSBkeW5hbWljIGF0IHJ1bnRpbWUsIGJ1dCBJJ2xsIG1ha2Ugc3VyZSBpdCdzIGRvbmUgc2FmZWx5LlxuXG5DcnVjaWFsbHksIHRoZSBwYXRjaCB0aGVuIHJlcGxhY2VzIGRpcmVjdCByZWFkcyBvZiB0aG9zZSBzeXNjdGwgdmFsdWVzIHdpdGggY2FsbHMgdG8gdGhlc2UgbmV3IGhlbHBlciBmdW5jdGlvbnMgd2l0aGluIHNldmVyYWwgVENQIGZ1bmN0aW9ucyDigJMgYHRjcF9lY25fc2VuZF9zeW5gLCBgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdGAsIGV0Yy4gVGhpcyBsb29rcyBsaWtlIGEgcmVmYWN0b3JpbmcgdG8gY2VudHJhbGl6ZSB0aGUgRUNOIGxvZ2ljLCBidXQgcG90ZW50aWFsbHkgYSBzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MuXG5cblRoZW4sIHRoZXJlIGFyZSB0aGUgc29ja2V0IG9wdGlvbnMgYFRDUF9FQ05gIGFuZCBgVENQX0VDTl9PUFRJT05gIGFkZGVkIHRvIGFsbG93IHVzZXJzcGFjZSBjb250cm9sIG92ZXIgdGhlc2Ugc2V0dGluZ3MgdmlhIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgLiBUaGUgc2V0c29ja29wdCB2YWxpZGF0aW9uIGNoZWNrcyBpZiB0aGUgYHZhbGAgaXMgd2l0aGluIGEgcmVhc29uYWJsZSByYW5nZSwgd2hpY2ggaXMgZ29vZC4gVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCwgd2hpY2ggaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGZvciBlbnN1cmluZyBhdG9taWNpdHkgYW5kIHZpc2liaWxpdHkgYmV0d2VlbiB0aHJlYWRzLlxuXG5GaW5hbGx5LCB0aGVyZSBpcyBCUEYgc29ja29wdCBzdXBwb3J0IGFkZGVkIGZvciB0aGVzZSBuZXcgb3B0aW9ucyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGlzIHBhcnQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGNoZWNraW5nIHRoZSBzaXplLlxuXG5Ob3cgZm9yIHRoZSByZWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBUaGUga2V5IGlzIHRvIHNlZSB3aGVyZSB0aGVzZSBgZWNuX21vZGVgIGFuZCBgZWNuX29wdGlvbmAgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQgdGhyb3VnaG91dCB0aGUgYHRjcF9zb2NrYCBsaWZlY3ljbGUuXG5cbkkgbm90ZSB0aGF0IGB0Y3BfaW5pdF9zb2NrYCBkb2VzIHRoZSBpbml0aWFsaXphdGlvbi4gTm93LCBpcyB0aGUgYHRjcF9zb2NrYCBzdHJ1Y3R1cmUgemVyby1pbml0aWFsaXplZCBpbml0aWFsbHksIG9yIGFyZSB0aGVyZSBvdGhlciB3YXlzIGl0J3MgY3JlYXRlZCB3aGVyZSB0aGVzZSBmaWVsZHMgbWlnaHQgbm90IGJlIGV4cGxpY2l0bHkgc2V0PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHRjcF9pbml0X3NvY2tgIGlzIGNhbGxlZCBpbiBldmVyeSBwYXRoIG9mIGNyZWF0aW5nIHRoZSBUQ1Agc29ja2V0LiBUaGUgTGludXgga2VybmVsIHVzZXMgYHNvY2tfYWxsb2NfaW5vZGVgIC8gYHNrX2FsbG9jYCwgd2hpY2ggc2hvdWxkIHplcm8gb3V0IHRoZSBtZW1vcnksIGFuZCB0aGVuIGB0Y3BfaW5pdF9zb2NrYCBzZXRzIHRoZSBmaWVsZHMgZXhwbGljaXRseS4gU3RpbGwsIEkgc2hvdWxkIGNvbmZpcm0uXG5cbkknbSB0aGlua2luZyBhYm91dCBjbG9uZSBvcGVyYXRpb25zLCBvciBjYXNlcyB3aXRoIGBhY2NlcHRgIG9yIHBhc3NpdmUgb3BlbnMsIG9yIGByZXF1ZXN0X3NvY2tgLiBBcmUgdGhlc2UgZmllbGRzIHByb3Blcmx5IGluaXRpYWxpemVkIHdoZW4gYSBuZXcgc29ja2V0IGlzIGNyZWF0ZWQgZnJvbSBhbiBleGlzdGluZyBvbmU/IEknbSBnb2luZyB0byBsb29rIGZvciBjbG9uaW5nIG9yIGNvcHlpbmcgb3IgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIGB0Y3Bfc29ja2Agc3RydWN0dXJlLCBlc3BlY2lhbGx5IGFyb3VuZCBmdW5jdGlvbnMgbGlrZSBgdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkYC5cblxuVGltZSB0byBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBjYWxscyB0byBgdGNwX2luaXRfc29ja2Agb3IgbWVudGlvbnMgb2YgY2xvbmluZyB3aXRoaW4gdGhlIHJlbGV2YW50IGZpbGVzLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY0L3RjcF9taW5pc29ja3MuY2AgYW5kIGB0Y3BfaXB2NC5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5IHNvY2tldCBjcmVhdGlvbiBwYXRoIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZXNlIG5ldyBmaWVsZHMgdG8gcHJldmVudCB1bmluaXRpYWxpemVkIHJlYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDkwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6MjkuODgwNjI2Nzc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU2NjUzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2luaXRfc29ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9hZl9pbmV0LmM9MTc1Mz1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIGlwdjRfbWliX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xNzYxLSNpZmRlZiBDT05GSUdfTVBUQ1BcXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTc2MjpcXHQvKiBhbGxvY2F0ZWQgb24gZGVtYW5kLCBzZWUgbXB0Y3BfaW5pdF9zb2NrKCkgKi9cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTc2My1cXHRmcmVlX3BlcmNwdShuZXQtXFx1MDAzZW1pYi5tcHRjcF9zdGF0aXN0aWNzKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQwMj12b2lkIHRjcF9tZDVfZGVzdHJ1Y3Rfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy00MTktICovXFxubmV0L2lwdjQvdGNwLmM6NDIwOnZvaWQgdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwLmMtNDIxLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM5Nj1zdGF0aWMgaW50IHRjcF92NF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzk5LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjQwMDpcXHR0Y3BfaW5pdF9zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTI0MDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjMwLjAxNjI5ODk3NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTY2NDY4MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LiBMZXQncyBzdGFydCB3aXRoIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY0L3RjcF9taW5pc29ja3MuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBhIG5ld2x5IGFycml2ZWQgY29ubmVjdGlvbiByZXF1ZXN0LCBhIFNZTiwgdGhhdCdzIGJlaW5nIHNwYXduZWQgZnJvbSBhbiBleGlzdGluZyBsaXN0ZW5pbmcgc29ja2V0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgY3JlYXRpb24gb2YgdGhlIGNoaWxkIHNvY2tldC4gSSdsbCBiZSBsb29raW5nIHRvIHNlZSBob3cgdGhlIG5ldyBzb2NrZXQgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdCBhbmQgdGhlIHBhcmVudCBzb2NrZXQgYW5kIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBiZWluZyB1c2VkIHRvIG1hbmFnZSB0aGlzIHN0YXRlLiBJcyBpdCBhIGNvcHktb24td3JpdGUgc2l0dWF0aW9uLCBvciBhcmUgd2UgZ29pbmcgZm9yIGZ1bGwgc3RhdGUgZHVwbGljYXRpb24gYXQgdGhpcyBwb2ludD8gSSBhbHNvIHdhbnQgdG8gZm9sbG93IHVwIHdpdGggYW55IHBvdGVudGlhbCBsb2NraW5nIGlzc3VlcyBhbmQgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgY29tZSBpbnRvIHBsYXkgZHVyaW5nIHRoZSBjaGlsZCBjcmVhdGlvbiBhbmQgaXRzIGFkZGl0aW9uIHRvIHRoZSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIGxpc3RzLiBFc3NlbnRpYWxseSwgSSdtIGNoZWNraW5nIHRoZSBoYW5kb2ZmIG9mIHRoZSBjb25uZWN0aW9uJ3MgbGlmZWN5Y2xlIGZyb20gdGhlIGxpc3RlbiBzb2NrZXQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgY2hpbGQgc29ja2V0LiBMZXQncyBzZWUgaG93IHdlbGwgaXQncyBkb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDY4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6MzIuOTgyNzY5ODU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY3NDcwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTI5ND12b2lkIGluZXRfY3NrX3ByZXBhcmVfZm9yX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEzMDItLyogVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gZm9yY2UgYSBjbG9zdXJlIG9mIGEgc29ja2V0IGFmdGVyIHRoZSBjYWxsIHRvXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMzAzOiAqIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpLlxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTMwNC0gKi9cXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTkxOD12b2lkIHRjcF9hb19zeW5jb29raWUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtOTI3LVxcdC8qIHRyZXEtXFx1MDAzZWFmX3NwZWNpZmljIGlzIHVzZWQgdG8gcGVyZm9ybSBUQ1BfQU8gbG9va3VwXFxubmV0L2lwdjQvdGNwX2FvLmM6OTI4OlxcdCAqIGluIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpLlxcbm5ldC9pcHY0L3RjcF9hby5jLTkyOS1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTI1Nz12b2lkIHRjcF9mYXN0b3Blbl9hZGRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTI2OC1cXHR0Y3BfY2xlYW51cF9za2Ioc2tiKTtcXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzoyNjk6XFx0Lyogc2Vnc19pbiBoYXMgYmVlbiBpbml0aWFsaXplZCB0byAxIGluIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpLlxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTI3MC1cXHQgKiBIZW5jZSwgcmVzZXQgc2Vnc19pbiB0byAwIGJlZm9yZSBjYWxsaW5nIHRjcF9zZWdzX2luKClcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9NDkxPWludCB0Y3BfdjRfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy01NTItXFx0dHAgPSB0Y3Bfc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6NTUzOlxcdC8qIFhYWCAoVEZPKSAtIHRwLVxcdTAwM2VzbmRfdW5hIHNob3VsZCBiZSBJU04gKHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpICovXFxubmV0L2lwdjQvdGNwX2lwdjQuYy01NTQtXFx0ZmFzdG9wZW4gPSByY3VfZGVyZWZlcmVuY2UodHAtXFx1MDAzZWZhc3RvcGVuX3Jzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE2NzQ9c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTY5Ni1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE2OTc6XFx0bmV3c2sgPSB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoc2ssIHJlcSwgc2tiKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2OTgtXFx0aWYgKCFuZXdzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz01MjU9c3RhdGljIHZvaWQgc21jX2NoZWNrX3Jlc2V0X3N5bl9yZXEoY29uc3Qgc3RydWN0IHRjcF9zb2NrICpvbGR0cCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy01NDUtICovXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjU0NjpzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTQ3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6MzMuMDg5NTIzOTQ3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NzE4ODIwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgd2l0aGluIGBuZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoaXMgZnVuY3Rpb24sIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgbmV3IGNoaWxkIHNvY2tldHMgYXJlIGNyZWF0ZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGxpc3RlbmluZyBzb2NrZXQuIEkgc3VzcGVjdCB0aGVyZSB3aWxsIGJlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJwbGF5IHdpdGggdGhlIGBpbmV0X3NvY2tgIHN0cnVjdHVyZSBhbmQgcGVyaGFwcyBzb21lIGxvY2tpbmcgcHJpbWl0aXZlcyB0b28sIHNvIEknbGwgYmUgbG9va2luZyBvdXQgZm9yIHRob3NlLiBJdCdzIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5IGdyaXR0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNzozNS45NjE0MDg3NjJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9taW5pc29ja3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDU6XFx0ICovXFxuIDU0NjpcXHRzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gNTQ3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gNTQ4OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuIDU0OTpcXHR7XFxuIDU1MDpcXHRcXHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBpbmV0X2Nza19jbG9uZV9sb2NrKHNrLCByZXEsIEdGUF9BVE9NSUMpO1xcbiA1NTE6XFx0XFx0Y29uc3Qgc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxID0gaW5ldF9yc2socmVxKTtcXG4gNTUyOlxcdFxcdHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICp0cmVxID0gdGNwX3JzayhyZXEpO1xcbiA1NTM6XFx0XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpuZXdpY3NrO1xcbiA1NTQ6XFx0XFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICpvbGR0cDtcXG4gNTU1OlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqbmV3dHA7XFxuIDU1NjpcXHRcXHR1MzIgc2VxO1xcbiA1NTc6XFx0XFxuIDU1ODpcXHRcXHRpZiAoIW5ld3NrKVxcbiA1NTk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDU2MDpcXHRcXG4gNTYxOlxcdFxcdG5ld2ljc2sgPSBpbmV0X2NzayhuZXdzayk7XFxuIDU2MjpcXHRcXHRuZXd0cCA9IHRjcF9zayhuZXdzayk7XFxuIDU2MzpcXHRcXHRvbGR0cCA9IHRjcF9zayhzayk7XFxuIDU2NDpcXHRcXG4gNTY1OlxcdFxcdHNtY19jaGVja19yZXNldF9zeW5fcmVxKG9sZHRwLCByZXEsIG5ld3RwKTtcXG4gNTY2OlxcdFxcbiA1Njc6XFx0XFx0LyogTm93IHNldHVwIHRjcF9zb2NrICovXFxuIDU2ODpcXHRcXHRuZXd0cC1cXHUwMDNlcHJlZF9mbGFncyA9IDA7XFxuIDU2OTpcXHRcXG4gNTcwOlxcdFxcdHNlcSA9IHRyZXEtXFx1MDAzZXJjdl9pc24gKyAxO1xcbiA1NzE6XFx0XFx0bmV3dHAtXFx1MDAzZXJjdl93dXAgPSBzZXE7XFxuIDU3MjpcXHRcXHRXUklURV9PTkNFKG5ld3RwLVxcdTAwM2Vjb3BpZWRfc2VxLCBzZXEpO1xcbiA1NzM6XFx0XFx0V1JJVEVfT05DRShuZXd0cC1cXHUwMDNlcmN2X254dCwgc2VxKTtcXG4gNTc0OlxcdFxcdG5ld3RwLVxcdTAwM2VzZWdzX2luID0gMTtcXG4gNTc1OlxcdFxcbiA1NzY6XFx0XFx0c2VxID0gdHJlcS1cXHUwMDNlc250X2lzbiArIDE7XFxuIDU3NzpcXHRcXHRuZXd0cC1cXHUwMDNlc25kX3NtbCA9IG5ld3RwLVxcdTAwM2VzbmRfdW5hID0gc2VxO1xcbiA1Nzg6XFx0XFx0V1JJVEVfT05DRShuZXd0cC1cXHUwMDNlc25kX254dCwgc2VxKTtcXG4gNTc5OlxcdFxcdG5ld3RwLVxcdTAwM2VzbmRfdXAgPSBzZXE7XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuZXd0cC1cXHUwMDNldHNxX25vZGUpO1xcbiA1ODI6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5ld3RwLVxcdTAwM2V0c29ydGVkX3NlbnRfcXVldWUpO1xcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHR0Y3BfaW5pdF93bChuZXd0cCwgdHJlcS1cXHUwMDNlcmN2X2lzbik7XFxuIDU4NTpcXHRcXG4gNTg2OlxcdFxcdG1pbm1heF9yZXNldChcXHUwMDI2bmV3dHAtXFx1MDAzZXJ0dF9taW4sIHRjcF9qaWZmaWVzMzIsIH4wVSk7XFxuIDU4NzpcXHRcXHRuZXdpY3NrLVxcdTAwM2VpY3NrX2Fjay5scmN2dGltZSA9IHRjcF9qaWZmaWVzMzI7XFxuIDU4ODpcXHRcXG4gNTg5OlxcdFxcdG5ld3RwLVxcdTAwM2Vsc25kdGltZSA9IHRjcF9qaWZmaWVzMzI7XFxuIDU5MDpcXHRcXHRuZXdzay1cXHUwMDNlc2tfdHhoYXNoID0gUkVBRF9PTkNFKHRyZXEtXFx1MDAzZXR4aGFzaCk7XFxuIDU5MTpcXHRcXHRuZXd0cC1cXHUwMDNldG90YWxfcmV0cmFucyA9IHJlcS1cXHUwMDNlbnVtX3JldHJhbnM7XFxuIDU5MjpcXHRcXG4gNTkzOlxcdFxcdHRjcF9pbml0X3htaXRfdGltZXJzKG5ld3NrKTtcXG4gNTk0OlxcdFxcdFdSSVRFX09OQ0UobmV3dHAtXFx1MDAzZXdyaXRlX3NlcSwgbmV3dHAtXFx1MDAzZXB1c2hlZF9zZXEgPSB0cmVxLVxcdTAwM2VzbnRfaXNuICsgMSk7XFxuIDU5NTpcXHRcXG4gNTk2OlxcdFxcdGlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKVxcbiA1OTc6XFx0XFx0XFx0dGNwX3Jlc2V0X2tlZXBhbGl2ZV90aW1lcihuZXdzaywga2VlcGFsaXZlX3RpbWVfd2hlbihuZXd0cCkpO1xcbiA1OTg6XFx0XFxuIDU5OTpcXHRcXHRuZXd0cC1cXHUwMDNlcnhfb3B0LnRzdGFtcF9vayA9IGlyZXEtXFx1MDAzZXRzdGFtcF9vaztcXG4gNjAwOlxcdFxcdG5ld3RwLVxcdTAwM2VyeF9vcHQuc2Fja19vayA9IGlyZXEtXFx1MDAzZXNhY2tfb2s7XFxuIDYwMTpcXHRcXHRuZXd0cC1cXHUwMDNld2luZG93X2NsYW1wID0gcmVxLVxcdTAwM2Vyc2tfd2luZG93X2NsYW1wO1xcbiA2MDI6XFx0XFx0bmV3dHAtXFx1MDAzZXJjdl9zc3RocmVzaCA9IHJlcS1cXHUwMDNlcnNrX3Jjdl93bmQ7XFxuIDYwMzpcXHRcXHRuZXd0cC1cXHUwMDNlcmN2X3duZCA9IHJlcS1cXHUwMDNlcnNrX3Jjdl93bmQ7XFxuIDYwNDpcXHRcXHRuZXd0cC1cXHUwMDNlcmN2X213bmRfc2VxID0gbmV3dHAtXFx1MDAzZXJjdl93dXAgKyByZXEtXFx1MDAzZXJza19yY3Zfd25kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNzozNS45NjE1ODUxMDJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQzNzk0MTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVENQIEVDTiBJbmhlcml0YW5jZSBpbiBTb2NrZXQgQ2xvbmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBFQ04gKEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uKSBzZXR0aW5ncyBhcmUgaGFuZGxlZCB3aGVuIGEgbmV3IHNvY2tldCBpcyBjcmVhdGVkIGZyb20gYSBsaXN0ZW5lciBzb2NrZXQgaW4gdGhlIGtlcm5lbC4gYGluZXRfY3NrX2Nsb25lX2xvY2soc2ssIHJlcSwgR0ZQX0FUT01JQylgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcgaGVyZS4gRnJvbSB3aGF0IEkgc2VlLCBpdCBjbG9uZXMgYHNrYCB1c2luZyBgc2tfY2xvbmVfbG9ja2AsIHdoaWNoIGVzc2VudGlhbGx5IG1lYW5zIGEgYG1lbWNweWAgb2YgdGhlIGVudGlyZSBgc3RydWN0IHNvY2tgLCBpbmNsdWRpbmcgdGhlIGVtYmVkZGVkIGBzdHJ1Y3QgdGNwX3NvY2tgLCBmcm9tIHRoZSBsaXN0ZW5pbmcgc29ja2V0IGBza2AgdG8gdGhlIG5ldyBzb2NrZXQgYG5ld3NrYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCB0ZWxscyBtZSB0aGF0IEVDTi1yZWxhdGVkIGZpZWxkcywgc3BlY2lmaWNhbGx5IGBuZXd0cC1cdTAwM2VlY25fbW9kZWAgYW5kIGBuZXd0cC1cdTAwM2VlY25fb3B0aW9uYCwgYXJlIGluaGVyaXRlZCBkaXJlY3RseSBmcm9tIHRoZSBsaXN0ZW5lci4gVGhhdCBpbmhlcml0YW5jZSBzZWVtcyBxdWl0ZSBkaXJlY3QuXG5cbk5vdywgbXkgbmV4dCBxdWVzdGlvbiBpcywgaG93IGFyZSB0aGVzZSBFQ04gc2V0dGluZ3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBkb190Y3BfZ2V0c29ja29wdGAgaGFuZGxlcyByZXRyaWV2aW5nIHRoZXNlIHZhbHVlcy4gTGV0J3MgbG9vayBhdCB0aGUgY29kZTpcblxuYGBgY1xuXHRjYXNlIFRDUF9FQ046XG5cdFx0dmFsID0gUkVBRF9PTkNFKHRwLVx1MDAzZWVjbl9tb2RlKTtcblx0XHRicmVhaztcblx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcblx0XHR2YWwgPSBSRUFEX09OQ0UodHAtXHUwMDNlZWNuX29wdGlvbik7XG5cdFx0YnJlYWs7XG5gYGBcblxuUmlnaHQsIGl0IHVzZXMgYFJFQURfT05DRWAgdG8gZmV0Y2ggdGhlIHZhbHVlcyBvZiBgdHAtXHUwMDNlZWNuX21vZGVgIGFuZCBgdHAtXHUwMDNlZWNuX29wdGlvbmAgZnJvbSB0aGUgVENQIGNvbnRyb2wgYmxvY2suIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGp1c3QgYSBkaXJlY3QgcmVhZCBvZiB0aGUgdmFsdWUuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYXJvdW5kIGBkb190Y3BfZ2V0c29ja29wdGAgaW4gYHRjcC5jYCB0byBzZWUgaG93IHRoYXQgYHZhbGAgaXMgdGhlbiByZXR1cm5lZCB0byB0aGUgdXNlci4gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHN5bmNocm9uaXphdGlvbiBvciBtZW1vcnkgb3JkZXJpbmcgaGVyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhhdCB2YWx1ZSBpcyB0cmFuc2ZlcnJlZCB0byB1c2VyIHNwYWNlLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG11bHRpdGhyZWFkZWQgYWNjZXNzIHRvIHRoZSBzb2NrZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTEwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6NDAuMzk5NTI4OTI0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA3NDE2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGRvX3RjcF9nZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTQ0MjM9c3RydWN0IHNrX2J1ZmYgKnRjcF9nZXRfdGltZXN0YW1waW5nX29wdF9zdGF0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy00NDk0LVxcbm5ldC9pcHY0L3RjcC5jOjQ0OTU6aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbm5ldC9pcHY0L3RjcC5jLTQ0OTYtXFx0XFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjQwLjUzMDI3NjkzMloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODgwOTE2Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc3BlY2lmaWVkIHNlY3Rpb25zIG9mIGBuZXQvaXB2NC90Y3AuY2AsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIFRDUCBDb25nZXN0aW9uIENvbnRyb2wqKlxuXG5BbHJpZ2h0LCBsZXQncyByZWZyZXNoIG91ciB1bmRlcnN0YW5kaW5nIG9mIHNvbWUgY29yZSBUQ1AgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgcmVnaW9ucyB3aXRoaW4gYG5ldC9pcHY0L3RjcC5jYCwgbmFtZWx5IGxpbmVzIDQ0OTUgdG8gNDUyMCBhbmQgdGhlbiA0ODQwIHRvIDQ4NzAuIE15IGZvY3VzIGhlcmUgaXMgbGlrZWx5IGFyb3VuZCBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtcy4gRnJvbSBleHBlcmllbmNlLCB0aG9zZSBsaW5lIG51bWJlcnMgdXN1YWxseSB0b3VjaCBvbiBrZXkgYWRqdXN0bWVudHMgdG8gdGhlIFRDUCB3aW5kb3cgb3IgcmV0cmFuc21pc3Npb24gYmVoYXZpb3IuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgcmVzcG9uZHMgdG8gcGFja2V0IGxvc3Mgb3IgY29uZ2VzdGlvbiBldmVudHMuIEl04oCZcyBwcm9iYWJseSByZWxhdGVkIHRvIGFkanVzdG1lbnRzIHRvIHRoZSBjb25nZXN0aW9uIHdpbmRvdywgc2xvdyBzdGFydCB0aHJlc2hvbGRzLCBvciByZXRyYW5zbWlzc2lvbiB0aW1lb3V0cy4gSSBhbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IG9mIGRpZmZlcmVudCBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcywgYXMgdGhlIGtlcm5lbCBjYW4gdXNlIHNldmVyYWwgZGlmZmVyZW50IG9uZXMuIEknbSBhbHNvIHJlYWR5IHRvIGFuYWx5emUgdGhlIGludHJpY2F0ZSBjYWxjdWxhdGlvbnMgaW52b2x2ZWQgaW4gbWFpbnRhaW5pbmcgYSBnb29kIHRocm91Z2hwdXQuIEkgbWF5IGZpbmQgY29kZSByZWxhdGVkIHRvIHNwZWNpZmljIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zLCBsaWtlIEN1YmljIG9yIEJCUiwgb3IgcG9zc2libHkgdGhlIGNvcmUgbG9naWMgZm9yIFRDUCdzIGNvbmdlc3Rpb24gYXZvaWRhbmNlLiBJJ2xsIG5lZWQgdG8gd2F0Y2ggZm9yIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGFueSB1c2Ugb2YgdGltZXJzIGFuZCBhc3NvY2lhdGVkIGNvbnRleHQgc3dpdGNoZXMsIGFuZCBhbnkgdXNlIG9mIHN0YXRpc3RpY3MvY291bnRlcnMgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGlzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcwNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjQ1LjQxMTE5NzYzNloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDg3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ5NTpcXHRpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXFxuNDQ5NjpcXHRcXHRcXHQgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcXG40NDk3OlxcdHtcXG40NDk4OlxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG40NDk5OlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbjQ1MDA6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbjQ1MDE6XFx0XFx0aW50IHVzZXJfbXNzO1xcbjQ1MDI6XFx0XFx0aW50IHZhbCwgbGVuO1xcbjQ1MDM6XFx0XFxuNDUwNDpcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXFxuNDUwNTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40NTA2OlxcdFxcbjQ1MDc6XFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuNDUwODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTA5OlxcdFxcbjQ1MTA6XFx0XFx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTtcXG40NTExOlxcdFxcbjQ1MTI6XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuNDUxMzpcXHRcXHRjYXNlIFRDUF9NQVhTRUc6XFxuNDUxNDpcXHRcXHRcXHR2YWwgPSB0cC1cXHUwMDNlbXNzX2NhY2hlO1xcbjQ1MTU6XFx0XFx0XFx0dXNlcl9tc3MgPSBSRUFEX09OQ0UodHAtXFx1MDAzZXJ4X29wdC51c2VyX21zcyk7XFxuNDUxNjpcXHRcXHRcXHRpZiAodXNlcl9tc3MgXFx1MDAyNlxcdTAwMjZcXG40NTE3OlxcdFxcdFxcdCAgICAoKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX0NMT1NFIHwgVENQRl9MSVNURU4pKSlcXG40NTE4OlxcdFxcdFxcdFxcdHZhbCA9IHVzZXJfbXNzO1xcbjQ1MTk6XFx0XFx0XFx0aWYgKHRwLVxcdTAwM2VyZXBhaXIpXFxuNDUyMDpcXHRcXHRcXHRcXHR2YWwgPSB0cC1cXHUwMDNlcnhfb3B0Lm1zc19jbGFtcDtcXG40NTIxOlxcdFxcdFxcdGJyZWFrO1xcbjQ1MjI6XFx0XFx0Y2FzZSBUQ1BfTk9ERUxBWTpcXG40NTIzOlxcdFxcdFxcdHZhbCA9ICEhKHRwLVxcdTAwM2Vub25hZ2xlXFx1MDAyNlRDUF9OQUdMRV9PRkYpO1xcbjQ1MjQ6XFx0XFx0XFx0YnJlYWs7XFxuNDUyNTpcXHRcXHRjYXNlIFRDUF9DT1JLOlxcbjQ1MjY6XFx0XFx0XFx0dmFsID0gISEodHAtXFx1MDAzZW5vbmFnbGVcXHUwMDI2VENQX05BR0xFX0NPUkspO1xcbjQ1Mjc6XFx0XFx0XFx0YnJlYWs7XFxuNDUyODpcXHRcXHRjYXNlIFRDUF9LRUVQSURMRTpcXG40NTI5OlxcdFxcdFxcdHZhbCA9IGtlZXBhbGl2ZV90aW1lX3doZW4odHApIC8gSFo7XFxuNDUzMDpcXHRcXHRcXHRicmVhaztcXG40NTMxOlxcdFxcdGNhc2UgVENQX0tFRVBJTlRWTDpcXG40NTMyOlxcdFxcdFxcdHZhbCA9IGtlZXBhbGl2ZV9pbnR2bF93aGVuKHRwKSAvIEhaO1xcbjQ1MzM6XFx0XFx0XFx0YnJlYWs7XFxuNDUzNDpcXHRcXHRjYXNlIFRDUF9LRUVQQ05UOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNzo0NS40MTE3MDk2MTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzNzA2NDk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipEaXZpbmcgaW50byBgZG9fdGNwX2dldHNvY2tvcHRgIC0gTGV0J3MgU2VlIFdoYXQncyBhdCB0aGUgRW5kISoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8ganVtcCByaWdodCB0byB0aGUgZW5kIG9mIGBkb190Y3BfZ2V0c29ja29wdGAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGluc2lkZSBhbmQgb3V0LCBidXQgSSBhbHdheXMgZmluZCBpdCB1c2VmdWwgdG8gcmVmcmVzaCBteSBtZW1vcnkgYnkgcXVpY2tseSByZXZpZXdpbmcgdGhlIHRhaWwgZW5kIG9mIHRoaW5ncyBmaXJzdC4gSXQncyBvZnRlbiB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgb3BlcmF0aW9uIGFuZCB0aGUgcmV0dXJuIHBhdGggYXJlIGNsZWFubHkgbGFpZCBvdXQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgcXVpY2sgaGlnaC1sZXZlbCB2aWV3IG9mIGhvdyB0aGlzIGZ1bmN0aW9uIHdyYXBzIHVwIGl0cyB3b3JrLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIHByb2Nlc3NlcyB0aGUgZGF0YSBhbmQgc2VuZHMgaXQgYmFjayB1cCB0byB0aGUgdXNlci1zcGFjZSBwcm9ncmFtIHRoYXQgbWFkZSB0aGUgY2FsbC4gSXQgZ2l2ZXMgYSBnb29kIHNlbnNlIG9mIGhvdyB0aGV5IGFjdHVhbGx5IGltcGxlbWVudCBnZXRzb2Nrb3B0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY4NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6NDguOTQ4ODU4OTgxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDg1NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDg1NTpcXHRcXHRcXHRicmVhaztcXG40ODU2OlxcdFxcdGNhc2UgVENQX0RFTEFDS19NQVhfVVM6XFxuNDg1NzpcXHRcXHRcXHR2YWwgPSBqaWZmaWVzX3RvX3VzZWNzKFJFQURfT05DRShpbmV0X2NzayhzayktXFx1MDAzZWljc2tfZGVsYWNrX21heCkpO1xcbjQ4NTg6XFx0XFx0XFx0YnJlYWs7XFxuNDg1OTpcXHRcXHRjYXNlIFRDUF9FQ046XFxuNDg2MDpcXHRcXHRcXHR2YWwgPSBSRUFEX09OQ0UodHAtXFx1MDAzZWVjbl9tb2RlKTtcXG40ODYxOlxcdFxcdFxcdGJyZWFrO1xcbjQ4NjI6XFx0XFx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcXG40ODYzOlxcdFxcdFxcdHZhbCA9IFJFQURfT05DRSh0cC1cXHUwMDNlZWNuX29wdGlvbik7XFxuNDg2NDpcXHRcXHRcXHRicmVhaztcXG40ODY1OlxcdFxcdGRlZmF1bHQ6XFxuNDg2NjpcXHRcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbjQ4Njc6XFx0XFx0fVxcbjQ4Njg6XFx0XFxuNDg2OTpcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNmxlbiwgc2l6ZW9mKGludCkpKVxcbjQ4NzA6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNDg3MTpcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgXFx1MDAyNnZhbCwgbGVuKSlcXG40ODcyOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjQ4NzM6XFx0XFx0cmV0dXJuIDA7XFxuNDg3NDpcXHR9XFxuNDg3NTpcXHRcXG40ODc2OlxcdGJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxcbjQ4Nzc6XFx0e1xcbjQ4Nzg6XFx0XFx0LyogVENQIGRvX3RjcF9nZXRzb2Nrb3B0IGhhcyBvcHRpbWl6ZWQgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvblxcbjQ4Nzk6XFx0XFx0ICogdG8gYXZvaWQgZXh0cmEgc29ja2V0IGxvY2sgZm9yIFRDUF9aRVJPQ09QWV9SRUNFSVZFLlxcbjQ4ODA6XFx0XFx0ICovXFxuNDg4MTpcXHRcXHRpZiAobGV2ZWwgPT0gU09MX1RDUCBcXHUwMDI2XFx1MDAyNiBvcHRuYW1lID09IFRDUF9aRVJPQ09QWV9SRUNFSVZFKVxcbjQ4ODI6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNDg4MzpcXHRcXG40ODg0OlxcdFxcdHJldHVybiBmYWxzZTtcXG40ODg1OlxcdH1cXG40ODg2OlxcdFxcbjQ4ODc6XFx0aW50IHRjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCxcXG40ODg4OlxcdFxcdFxcdCAgIGludCBfX3VzZXIgKm9wdGxlbilcXG40ODg5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6NDguOTUxNDQ3ODYxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTQ3NTQxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEZpbHRlcmluZyBJc3N1ZXMqKlxuXG5SaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgc29sX3RjcF9zb2Nrb3B0YCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBjb250ZXh0LiBXZSd2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBhbmQgaXQncyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIHJldmlzaXQgdGhlc2UgYXJlYXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29ja2V0IG9wdGlvbnMuIFNvY2tldCBvcHRpb25zIGNhbiBpbnRlcmFjdCBpbiByZWFsbHkgc3VidGxlIHdheXMgd2l0aCBmaWx0ZXJpbmcgbWVjaGFuaXNtcyBhbmQgaXQgd291bGQgYmUgYSBzaGFtZSB0byBtaXNzIHNvbWV0aGluZyBieSBub3QgbG9va2luZyBhdCB0aGlzIGFzcGVjdCwgZXZlbiBpZiBpdCBzZWVtcyB1bmxpa2VseS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGN1cnJlbnQgaW52ZXN0aWdhdGlvbiwgaXQgd291bGQgYmUgcHJ1ZGVudCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhvc2Ugb3B0aW9ucyBhbmQgYW55IGZpbHRlcmluZyBsb2dpYyB0aGF0IG1pZ2h0IGJlIGF0IHBsYXkuIFdlIGtub3cgdGhlc2UgYXJlYXMgY2FuIGdldCBjb21wbGV4IHF1aWNrbHksIHNvIGl0J3MgYmVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjUwLjkwNjIwNDcxMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjkwNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU2NjA6XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuNTY2MTpcXHRcXHRjYXNlIFRDUF9OT0RFTEFZOlxcbjU2NjI6XFx0XFx0Y2FzZSBUQ1BfTUFYU0VHOlxcbjU2NjM6XFx0XFx0Y2FzZSBUQ1BfS0VFUElETEU6XFxuNTY2NDpcXHRcXHRjYXNlIFRDUF9LRUVQSU5UVkw6XFxuNTY2NTpcXHRcXHRjYXNlIFRDUF9LRUVQQ05UOlxcbjU2NjY6XFx0XFx0Y2FzZSBUQ1BfU1lOQ05UOlxcbjU2Njc6XFx0XFx0Y2FzZSBUQ1BfV0lORE9XX0NMQU1QOlxcbjU2Njg6XFx0XFx0Y2FzZSBUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFM6XFxuNTY2OTpcXHRcXHRjYXNlIFRDUF9VU0VSX1RJTUVPVVQ6XFxuNTY3MDpcXHRcXHRjYXNlIFRDUF9OT1RTRU5UX0xPV0FUOlxcbjU2NzE6XFx0XFx0Y2FzZSBUQ1BfU0FWRV9TWU46XFxuNTY3MjpcXHRcXHRjYXNlIFRDUF9SVE9fTUFYX01TOlxcbjU2NzM6XFx0XFx0Y2FzZSBUQ1BfRUNOOlxcbjU2NzQ6XFx0XFx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcXG41Njc1OlxcdFxcdFxcdGlmICgqb3B0bGVuICE9IHNpemVvZihpbnQpKVxcbjU2NzY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTY3NzpcXHRcXHRcXHRicmVhaztcXG41Njc4OlxcdFxcdGNhc2UgVENQX0NPTkdFU1RJT046XFxuNTY3OTpcXHRcXHRcXHRyZXR1cm4gc29sX3RjcF9zb2Nrb3B0X2Nvbmdlc3Rpb24oc2ssIG9wdHZhbCwgb3B0bGVuLCBnZXRvcHQpO1xcbjU2ODA6XFx0XFx0Y2FzZSBUQ1BfU0FWRURfU1lOOlxcbjU2ODE6XFx0XFx0XFx0aWYgKCpvcHRsZW4gXFx1MDAzYyAxKVxcbjU2ODI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTY4MzpcXHRcXHRcXHRicmVhaztcXG41Njg0OlxcdFxcdGRlZmF1bHQ6XFxuNTY4NTpcXHRcXHRcXHRpZiAoZ2V0b3B0KVxcbjU2ODY6XFx0XFx0XFx0XFx0cmV0dXJuIGJwZl9zb2xfdGNwX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgKm9wdGxlbik7XFxuNTY4NzpcXHRcXHRcXHRyZXR1cm4gYnBmX3NvbF90Y3Bfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCAqb3B0bGVuKTtcXG41Njg4OlxcdFxcdH1cXG41Njg5OlxcdFxcbjU2OTA6XFx0XFx0aWYgKGdldG9wdCkge1xcbjU2OTE6XFx0XFx0XFx0aWYgKG9wdG5hbWUgPT0gVENQX1NBVkVEX1NZTikge1xcbjU2OTI6XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuNTY5MzpcXHRcXG41Njk0OlxcdFxcdFxcdFxcdGlmICghdHAtXFx1MDAzZXNhdmVkX3N5biB8fFxcbjU2OTU6XFx0XFx0XFx0XFx0ICAgICpvcHRsZW4gXFx1MDAzZSB0Y3Bfc2F2ZWRfc3luX2xlbih0cC1cXHUwMDNlc2F2ZWRfc3luKSlcXG41Njk2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU2OTc6XFx0XFx0XFx0XFx0bWVtY3B5KG9wdHZhbCwgdHAtXFx1MDAzZXNhdmVkX3N5bi1cXHUwMDNlZGF0YSwgKm9wdGxlbik7XFxuNTY5ODpcXHRcXHRcXHRcXHQvKiBJdCBjYW5ub3QgZnJlZSB0cC1cXHUwMDNlc2F2ZWRfc3luIGhlcmUgYmVjYXVzZSBpdFxcbjU2OTk6XFx0XFx0XFx0XFx0ICogZG9lcyBub3Qga25vdyBpZiB0aGUgdXNlciBzcGFjZSBzdGlsbCBuZWVkcyBpdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6NTAuOTA5NTAwMTAxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MDQ5MzkwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHNvbF90Y3Bfc29ja29wdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiBgc29sX3RjcF9zb2Nrb3B0YCBhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBuZXR3b3JrIGZpbHRlciBzdGFjay4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBleGFtaW5lIHRoZSByZXN0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBtZWF0IGFuZCBwb3RhdG9lcyAtIGhvdyB0aGlzIHNvY2tldCBvcHRpb24gaW50ZXJhY3RzIHdpdGggdGhlIGZpbHRlcmluZyBsb2dpYyBhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byBteSB3b3JrLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGUgc29ja2V0IG9wdGlvbiBtZWNoYW5pc20gd2l0aCB0aGUgZmlsdGVyIHN1YnN5c3RlbS4gVGhpcyBpcyB0aGUgY29ycmVjdCBmaWxlIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0cmVhc3VyZXMgdGhpcyBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNzo1NC44MTQ0NDMyNzFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzAwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NzAwOlxcdFxcdFxcdFxcdCAqL1xcbjU3MDE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTcwMjpcXHRcXHRcXHR9XFxuNTcwMzpcXHRcXG41NzA0OlxcdFxcdFxcdHJldHVybiBkb190Y3BfZ2V0c29ja29wdChzaywgU09MX1RDUCwgb3B0bmFtZSxcXG41NzA1OlxcdFxcdFxcdFxcdFxcdFxcdCBLRVJORUxfU09DS1BUUihvcHR2YWwpLFxcbjU3MDY6XFx0XFx0XFx0XFx0XFx0XFx0IEtFUk5FTF9TT0NLUFRSKG9wdGxlbikpO1xcbjU3MDc6XFx0XFx0fVxcbjU3MDg6XFx0XFxuNTcwOTpcXHRcXHRyZXR1cm4gZG9fdGNwX3NldHNvY2tvcHQoc2ssIFNPTF9UQ1AsIG9wdG5hbWUsXFxuNTcxMDpcXHRcXHRcXHRcXHRcXHQgS0VSTkVMX1NPQ0tQVFIob3B0dmFsKSwgKm9wdGxlbik7XFxuNTcxMTpcXHR9XFxuNTcxMjpcXHRcXG41NzEzOlxcdHN0YXRpYyBib29sIHNrX2FsbG93c19zb2xfaXBfc29ja29wdChzdHJ1Y3Qgc29jayAqc2spXFxuNTcxNDpcXHR7XFxuNTcxNTpcXHRcXHRzd2l0Y2ggKHNrLVxcdTAwM2Vza19mYW1pbHkpIHtcXG41NzE2OlxcdFxcdGNhc2UgQUZfSU5FVDpcXG41NzE3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjU3MTg6XFx0XFx0Y2FzZSBBRl9JTkVUNjpcXG41NzE5OlxcdFxcdFxcdC8qIEFsbG93IGdldHRpbmcvc2V0dGluZyBzb2Nrb3B0IGZvciBwb3NzaWJsZSBpcHY0LW1hcHBlZCBpcHY2IHNvY2tldC4gKi9cXG41NzIwOlxcdFxcdFxcdHJldHVybiBzay1cXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1JBVyBcXHUwMDI2XFx1MDAyNiAhaXB2Nl9vbmx5X3NvY2soc2spO1xcbjU3MjE6XFx0XFx0ZGVmYXVsdDpcXG41NzIyOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41NzIzOlxcdFxcdH1cXG41NzI0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6NTQuODE1NDYwNzIxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMzU4NDU0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRDUCBTb2NrZXQgT3B0aW9uIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBzb2NrZXQgb3B0aW9uIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFN0YXJ0aW5nIHdpdGggYGRvX3RjcF9nZXRzb2Nrb3B0YCwgdGhlIGNvcmUgY29uY2VybiBpcyBob3cgdGhlIHZhbHVlIChgdmFsYCkgaXMgaGFuZGxlZC4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYHZhbGAsIGFuIGBpbnRgLCBnZXRzIGFzc2lnbmVkIGZyb20gYHRwLVx1MDAzZWVjbl9tb2RlYCwgd2hpY2ggaXMgYSBgdThgLiBJbXBvcnRhbnRseSwgdGhpcyBhc3NpZ25tZW50IGZ1bGx5IGluaXRpYWxpemVzIGFsbCB0aGUgYml0cyB3aXRoaW4gYHZhbGAgYmVjYXVzZSBvZiB0aGUgaW1wbGljaXQgdHlwZSBwcm9tb3Rpb24uIFRoZSBsZW5ndGggY2hlY2ssIGBsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGludCkpYCwgbG9va3MgZ29vZCwgZW5zdXJpbmcgd2UgZG9uJ3QgdHJ5IHRvIGNvcHkgbW9yZSBkYXRhIHRoYW4gZXhwZWN0ZWQuIEZpbmFsbHksIHRoZSBjcml0aWNhbCBgY29weV90b19zb2NrcHRyKG9wdHZhbCwgXHUwMDI2dmFsLCBsZW4pYCB1c2VzIGBsZW5gIHdoaWNoIGlzIGJvdW5kIGJ5IGBzaXplb2YoaW50KWAsIHNvIHdlJ3JlIG9ubHkgY29weWluZyBpbml0aWFsaXplZCBiaXRzIG9mIHRoZSBgaW50YCB0byB1c2Vyc3BhY2UuIFNvLCBgZG9fdGNwX2dldHNvY2tvcHRgIGFwcGVhcnMgc2FmZTsgbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIG91dC5cblxuTm93LCBsZXQncyBzaGlmdCBmb2N1cyB0byBgZG9fdGNwX3NldHNvY2tvcHRgLiBXZSBuZWVkIHRvIGV4YW1pbmUgaG93IGB2YWxgIGlzIGFjcXVpcmVkIGluIHRoaXMgY29udGV4dC4gVGhlIHByaW9yIGFuYWx5c2lzIG9mIGBkb190Y3BfZ2V0c29ja29wdGAgc2V0cyB0aGUgc3RhZ2UgZm9yIGEgc2ltaWxhciByaWdvcm91cyBjaGVjayBpbiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA4OjAyLjE1MTMwOTQ5OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg3MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzg3MDpcXHRcXHRcXHRjaGFyIG5hbWVbVENQX1VMUF9OQU1FX01BWF07XFxuMzg3MTpcXHRcXG4zODcyOlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyAxKVxcbjM4NzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzg3NDpcXHRcXG4zODc1OlxcdFxcdFxcdHZhbCA9IHN0cm5jcHlfZnJvbV9zb2NrcHRyKG5hbWUsIG9wdHZhbCxcXG4zODc2OlxcdFxcdFxcdFxcdFxcdFxcdG1pbl90KGxvbmcsIFRDUF9VTFBfTkFNRV9NQVggLSAxLFxcbjM4Nzc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgb3B0bGVuKSk7XFxuMzg3ODpcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4zODc5OlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjM4ODA6XFx0XFx0XFx0bmFtZVt2YWxdID0gMDtcXG4zODgxOlxcdFxcbjM4ODI6XFx0XFx0XFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xcbjM4ODM6XFx0XFx0XFx0ZXJyID0gdGNwX3NldF91bHAoc2ssIG5hbWUpO1xcbjM4ODQ6XFx0XFx0XFx0c29ja29wdF9yZWxlYXNlX3NvY2soc2spO1xcbjM4ODU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zODg2OlxcdFxcdH1cXG4zODg3OlxcdFxcdGNhc2UgVENQX0ZBU1RPUEVOX0tFWToge1xcbjM4ODg6XFx0XFx0XFx0X191OCBrZXlbVENQX0ZBU1RPUEVOX0tFWV9CVUZfTEVOR1RIXTtcXG4zODg5OlxcdFxcdFxcdF9fdTggKmJhY2t1cF9rZXkgPSBOVUxMO1xcbjM4OTA6XFx0XFxuMzg5MTpcXHRcXHRcXHQvKiBBbGxvdyBhIGJhY2t1cCBrZXkgYXMgd2VsbCB0byBmYWNpbGl0YXRlIGtleSByb3RhdGlvblxcbjM4OTI6XFx0XFx0XFx0ICogRmlyc3Qga2V5IGlzIHRoZSBhY3RpdmUgb25lLlxcbjM4OTM6XFx0XFx0XFx0ICovXFxuMzg5NDpcXHRcXHRcXHRpZiAob3B0bGVuICE9IFRDUF9GQVNUT1BFTl9LRVlfTEVOR1RIIFxcdTAwMjZcXHUwMDI2XFxuMzg5NTpcXHRcXHRcXHQgICAgb3B0bGVuICE9IFRDUF9GQVNUT1BFTl9LRVlfQlVGX0xFTkdUSClcXG4zODk2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM4OTc6XFx0XFxuMzg5ODpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoa2V5LCBvcHR2YWwsIG9wdGxlbikpXFxuMzg5OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zOTAwOlxcdFxcbjM5MDE6XFx0XFx0XFx0aWYgKG9wdGxlbiA9PSBUQ1BfRkFTVE9QRU5fS0VZX0JVRl9MRU5HVEgpXFxuMzkwMjpcXHRcXHRcXHRcXHRiYWNrdXBfa2V5ID0ga2V5ICsgVENQX0ZBU1RPUEVOX0tFWV9MRU5HVEg7XFxuMzkwMzpcXHRcXG4zOTA0OlxcdFxcdFxcdHJldHVybiB0Y3BfZmFzdG9wZW5fcmVzZXRfY2lwaGVyKG5ldCwgc2ssIGtleSwgYmFja3VwX2tleSk7XFxuMzkwNTpcXHRcXHR9XFxuMzkwNjpcXHRcXHRkZWZhdWx0OlxcbjM5MDc6XFx0XFx0XFx0LyogZmFsbHRocnUgKi9cXG4zOTA4OlxcdFxcdFxcdGJyZWFrO1xcbjM5MDk6XFx0XFx0fVxcbjM5MTA6XFx0XFxuMzkxMTpcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuMzkxMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zOTEzOlxcdFxcbjM5MTQ6XFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZ2YWwsIG9wdHZhbCwgc2l6ZW9mKHZhbCkpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowODowMi4xNTE4MDg2MThaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzM5OTQ2MTIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBUQ1AgRUNOIFNvY2tldCBPcHRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB0YXNrIGlzIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggcmVxdWlyZXMgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBvciBub3QuXG5cbkZpcnN0LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyB0d28gbmV3IHNvY2tldCBvcHRpb25zLCBgVENQX0VDTmAgYW5kIGBUQ1BfRUNOX09QVElPTmAuIFRoZXNlIGFsbG93IGZvciBwZXItc29ja2V0IG92ZXJyaWRlcyBvZiB0aGUgc3lzdGVtLXdpZGUgRUNOIHNldHRpbmdzIGNvbnRyb2xsZWQgYnkgYHN5c2N0bF90Y3BfZWNuYCBhbmQgYHN5c2N0bF90Y3BfZWNuX29wdGlvbmAsIHJlc3BlY3RpdmVseS4gIEkgc2VlIHRoYXQgaW4gYGRvX3RjcF9zZXRzb2Nrb3B0YCwgdGhlcmUncyBwcm9wZXIgdHlwZSB2YWxpZGF0aW9uLCByYW5nZSBjaGVja3MgYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBuZXcgZmllbGRzIGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYC4gIEkgY2hlY2tlZCB0aGF0IGBjb3B5X2Zyb21fc29ja3B0cmAgaXMgY29ycmVjdGx5IHVzZWQsIGVuc3VyaW5nIGRhdGEgaXMgY29waWVkIGZyb20gdXNlciBzcGFjZSBzYWZlbHkuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgb3B0aW9ucyBhcmUgdXNlZC4gSSBpZGVudGlmaWVkIGFsbCB1c2VzIG9mIGBlY25fbW9kZWAsIGBlY25fb3B0aW9uYCwgYHRjcF9lY25fbW9kZV9lZmZgLCBhbmQgYHRjcF9hY2NlY25fb3B0aW9uX2VmZmAgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgY29kZSBzZWVtcyBjbGVhbiBhbmQgbG9naWNhbGx5IHNvdW5kLCB3aXRoIG5vIG9idmlvdXMgaXNzdWVzLiAgSSB3ZW50IHRocm91Z2ggYWxsIHRoZSBsb2NhdGlvbnMsIGluY2x1ZGluZyBgaW5jbHVkZS9uZXQvdGNwX2Vjbi5oYCwgYHRjcF9lY25fc2VuZF9zeW5gLCBhbmQgdmFyaW91cyBwYXJ0cyBvZiBgdGNwX291dHB1dC5jYC4gRXZlcnl0aGluZyBzZWVtcyB0byBiZSB3ZWxsLWRlZmluZWQgYW5kIGhhbmRsZWQgaW4gYSBjb250cm9sbGVkIG1hbm5lci5cblxuVGhlIGNydWNpYWwgcGFydCBpcyBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZXhpc3QuIEkgY29uZmlybWVkIHRoYXQgYGVjbl9tb2RlYCBhbmQgYGVjbl9vcHRpb25gIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBpbiBgdGNwX2luaXRfc29jaygpYCB0byBgVENQX0VDTl9NT0RFX1VOU1BFQ2AgYW5kIGBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUNgIHJlc3BlY3RpdmVseS4gYGRvX3RjcF9nZXRzb2Nrb3B0YCBhc3NpZ25zIHRoZSB2YWx1ZSB0byBhIGxvY2FsIGBpbnQgdmFsYCBiZWZvcmUgY29weWluZyBpdCB0byB1c2Vyc3BhY2UsIHRodXMgZWxpbWluYXRpbmcgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCUEYgc29ja29wdHMgYXJlIGFsc28gY2FyZWZ1bGx5IGhhbmRsZWQuICBUaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb24gdGhlIGhlYXAsIHN0YWNrLCBvciB3aXRoaW4gYW55IGNvbmRpdGlvbmFsIGJyYW5jaGVzLiBUaGVyZSBpcyBubyBwYWRkaW5nIGNvbmNlcm4gZWl0aGVyLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbGxlZCBkYXRhIGZsb3csIEknbSBjb25maWRlbnQgdGhhdCBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gQW55IGNvbmNlcm5zIHdpdGggYm91bmRhcnkgY29uZGl0aW9ucywgcmFuZ2UgbGltaXRzIG9yIG90aGVyIGxvZ2ljIGVycm9ycyBhcmUgaXNzdWVzIGFkZHJlc3NlZCBieSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSwgTE9DS0RFUCBvciBnZW5lcmFsIGNvZGUgcmV2aWV3OyB0aGVzZSBhcmVuJ3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQncyBhIGNsZWFuIHBhdGNoIHRoYXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiBjb25jZXJucy4gSSdsbCBtYWtlIGEgbm90ZSBvZiBteSByZWFzb25pbmcgZm9yIGNvbnRyYXN0aW5nIEtNU0FOIGFuZCBLQVNBTi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA0NCwiT3V0cHV0VG9rZW5zIjoyNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDg6MDkuNTUxMjczNTIzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1zb2NrZXQgRUNOIGFuZCBBY2NFQ04gY29uZmlndXJhdGlvbiBvcHRpb25zIChUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTikgdmlhIHNldHNvY2tvcHQvZ2V0c29ja29wdCBhbmQgQlBGIHNvY2tvcHMsIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBzeXNjdGxzLlxcblxcbktNU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XFxuLSBUaGUgbmV3IGZpZWxkcyBgZWNuX21vZGVgIGFuZCBgZWNuX29wdGlvbmAgaW4gYHN0cnVjdCB0Y3Bfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFRDUF9FQ05fTU9ERV9VTlNQRUNgIGFuZCBgVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDYCBpbiBgdGNwX2luaXRfc29jaygpYCBhbmQgY29waWVkIGFjcm9zcyBzb2NrZXQgY2xvbmVzLlxcbi0gSW4gYGRvX3RjcF9nZXRzb2Nrb3B0KClgLCByZWFkaW5nIHRoZXNlIGZpZWxkcyBpbml0aWFsaXplcyB0aGUgZnVsbCBgaW50IHZhbGAgYmVmb3JlIGBjb3B5X3RvX3NvY2twdHIoKWAgY29waWVzIHRoZSBkYXRhIHRvIHVzZXIgc3BhY2UuIE5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgYnl0ZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgYnVmZmVyIGxlbmd0aCBtYW5pcHVsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBpbnRyb2R1Y2VkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIHRoZSBjaGFuZ2VzIHByZXNlbnQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwZXItc29ja2V0IEVDTiBhbmQgQWNjRUNOIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoVENQX0VDTiBhbmQgVENQX0VDTl9PUFRJT04pIHZpYSBzZXRzb2Nrb3B0L2dldHNvY2tvcHQgYW5kIEJQRiBzb2Nrb3BzLCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgc3lzY3Rscy5cXG5cXG5LTVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxcbi0gVGhlIG5ldyBmaWVsZHMgYGVjbl9tb2RlYCBhbmQgYGVjbl9vcHRpb25gIGluIGBzdHJ1Y3QgdGNwX3NvY2tgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBUQ1BfRUNOX01PREVfVU5TUEVDYCBhbmQgYFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQ2AgaW4gYHRjcF9pbml0X3NvY2soKWAgYW5kIGNvcGllZCBhY3Jvc3Mgc29ja2V0IGNsb25lcy5cXG4tIEluIGBkb190Y3BfZ2V0c29ja29wdCgpYCwgcmVhZGluZyB0aGVzZSBmaWVsZHMgaW5pdGlhbGl6ZXMgdGhlIGZ1bGwgYGludCB2YWxgIGJlZm9yZSBgY29weV90b19zb2NrcHRyKClgIGNvcGllcyB0aGUgZGF0YSB0byB1c2VyIHNwYWNlLiBObyBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHN0YWNrIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXFxuLSBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGJ1ZmZlciBsZW5ndGggbWFuaXB1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZC5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZCBhcyB0aGUgY2hhbmdlcyBwcmVzZW50IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2mxl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 09:04:15 +0000 UTC FinishedAt: 2026-09-10 09:08:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "548b86839f7fb819a4d6c83b71c73ec378d24275", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "548b86839f7fb819a4d6c83b71c73ec378d24275", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "BPF_SYSCALL" ], "series_id": "3175bc9f-36fb-4d85-be11-986d981e3bdf" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "do_tcp_setsockopt", "do_tcp_getsockopt", "tcp_conn_request", "tcp_make_synack", "tcp_connect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb190Y3Bfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb190Y3BfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubl9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3RjcF9tYWtlX3N5bmFjayYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGVyLXNvY2tldCBFQ04gYW5kIEFjY0VDTiBjb25maWd1cmF0aW9uIG9wdGlvbnMgKFRDUF9FQ04gYW5kIFRDUF9FQ05fT1BUSU9OKSB2aWEgc2V0c29ja29wdC9nZXRzb2Nrb3B0IGFuZCBCUEYgc29ja29wcywgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIHN5c2N0bHMuXG5cbktNU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XG4tIFRoZSBuZXcgZmllbGRzIGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYCBpbiBgc3RydWN0IHRjcF9zb2NrYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVENQX0VDTl9NT0RFX1VOU1BFQ2AgYW5kIGBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUNgIGluIGB0Y3BfaW5pdF9zb2NrKClgIGFuZCBjb3BpZWQgYWNyb3NzIHNvY2tldCBjbG9uZXMuXG4tIEluIGBkb190Y3BfZ2V0c29ja29wdCgpYCwgcmVhZGluZyB0aGVzZSBmaWVsZHMgaW5pdGlhbGl6ZXMgdGhlIGZ1bGwgYGludCB2YWxgIGJlZm9yZSBgY29weV90b19zb2NrcHRyKClgIGNvcGllcyB0aGUgZGF0YSB0byB1c2VyIHNwYWNlLiBObyBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHN0YWNrIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgYnVmZmVyIGxlbmd0aCBtYW5pcHVsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBpbnRyb2R1Y2VkLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZCBhcyB0aGUgY2hhbmdlcyBwcmVzZW50IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFRDUF9FQ04gYW5kIFRDUF9FQ05fT1BUSU9OIHNvY2tldCBvcHRpb25zIHRvIGFsbG93IHBlci1zb2NrZXQgY29uZmlndXJhdGlvbiBhbmQgb3ZlcnJpZGUgb2YgdGhlIHRjcF9lY24gYW5kIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBzZXR0aW5ncy4gSXQgbW9kaWZpZXMgVENQIHNvY2tldCBvcHRpb25zIGhhbmRsaW5nIChnZXRzb2Nrb3B0L3NldHNvY2tvcHQpLCBCUEYgc29ja29wdCBmaWx0ZXJzLCBUQ1AgU1lOL1NZTi1BQ0sgb3B0aW9uIGdlbmVyYXRpb24sIGFuZCBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IHByb2Nlc3NpbmcgaW4gdGhlIGNvcmUgSVB2NC9UQ1AgbmV0d29ya2luZyBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYzMDRkMDRjNjM3YmNiNGEwZTQyNGVlNGY3NTRkODM0YTM5OTIwMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOTowNjoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5pbmRleCAyMDhmNDY5NjdlZTU5Li4yZTU1ZDllMmViMDlhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5AQCAtNTI4LDYgJiM0Mzs1MjgsNDMgQEAgdGNwX2Vjbl9mYWxsYmFjayAtIEJPT0xFQU5cbiBcbiBcdERlZmF1bHQ6IDEgKGVuYWJsZWQpXG4gXG4mIzQzO3RjcF9lY24gKHNvY2tldCBvcHRpb24pIC0gVENQX0VDTlxuJiM0MztcdFBlci1zb2NrZXQgY29udHJvbCBvZiBFQ04gbW9kZSwgYWxsb3dpbmcgcGVyLWNvbm5lY3Rpb24gb3ZlcnJpZGUgb2YgdGhlXG4mIzQzO1x0dGNwX2VjbiBzeXNjdGwgc2V0dGluZy4gVGhpcyBlbmFibGVzIEw0UyAoTG93IExhdGVuY3ksIExvdyBMb3NzLCBTY2FsYWJsZVxuJiM0MztcdFRocm91Z2hwdXQpIGNvbmZpZ3VyYXRpb24gb24gYSBwZXItc29ja2V0IGJhc2lzLlxuJiM0MztcbiYjNDM7XHRTZXR0aW5nIHRoaXMgc29ja2V0IG9wdGlvbiB0byBhbnkgdmFsdWUgZXhjZXB0IDI1NSB3aWxsIG92ZXJyaWRlIHRoZVxuJiM0MztcdHN5c3RlbS13aWRlIHRjcF9lY24gc3lzY3RsIGZvciB0aGF0IHBhcnRpY3VsYXIgc29ja2V0LiBBIHZhbHVlIG9mIDI1NVxuJiM0MztcdChUQ1BfRUNOX01PREVfVU5TUEVDKSBtZWFucyB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IHN5c2N0bCB2YWx1ZS5cbiYjNDM7XG4mIzQzO1x0UG9zc2libGUgdmFsdWVzOiAwLTUgKHNlZSB0Y3BfZWNuIHN5c2N0bCBkZXNjcmlwdGlvbiBhYm92ZSksIG9yIDI1NSB0b1xuJiM0MztcdHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgKHN5c2N0bF90Y3BfZWNuKS5cbiYjNDM7XG4mIzQzO1x0RXhhbXBsZTo6XG4mIzQzO1xuJiM0MztcdFx0aW50IHZhbCA9IDM7ICAvKiBBY2NFQ04gbW9kZSAqL1xuJiM0MztcdFx0c2V0c29ja29wdChmZCwgU09MX1RDUCwgVENQX0VDTiwgXHUwMDI2dmFsLCBzaXplb2YodmFsKSk7XG4mIzQzO1xuJiM0MztcdERlZmF1bHQ6IDI1NSAodW5zcGVjaWZpZWQgLSB1c2VzIHRjcF9lY24gc3lzY3RsIHZhbHVlKVxuJiM0MztcbiYjNDM7dGNwX2Vjbl9vcHRpb24gKHNvY2tldCBvcHRpb24pIC0gVENQX0VDTl9PUFRJT05cbiYjNDM7XHRQZXItc29ja2V0IGNvbnRyb2wgb2YgQWNjdXJhdGUgRUNOIChBY2NFQ04pIG9wdGlvbiBzZW5kaW5nIGJlaGF2aW9yLFxuJiM0MztcdGFsbG93aW5nIHBlci1jb25uZWN0aW9uIG92ZXJyaWRlIG9mIHRoZSB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgc2V0dGluZy5cbiYjNDM7XG4mIzQzO1x0U2V0dGluZyB0aGlzIHNvY2tldCBvcHRpb24gdG8gYW55IHZhbHVlIGV4Y2VwdCAyNTUgd2lsbCBvdmVycmlkZSB0aGVcbiYjNDM7XHRzeXN0ZW0td2lkZSB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgZm9yIHRoYXQgcGFydGljdWxhciBzb2NrZXQuIEEgdmFsdWUgb2ZcbiYjNDM7XHQyNTUgKFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQykgbWVhbnMgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBzeXNjdGwgdmFsdWUuXG4mIzQzO1xuJiM0MztcdFBvc3NpYmxlIHZhbHVlczogMC0zIChzZWUgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIGRlc2NyaXB0aW9uIGFib3ZlKSwgb3IgMjU1XG4mIzQzO1x0dG8gdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCAoc3lzY3RsX3RjcF9lY25fb3B0aW9uKS5cbiYjNDM7XG4mIzQzO1x0RXhhbXBsZTo6XG4mIzQzO1xuJiM0MztcdFx0aW50IHZhbCA9IDI7ICAvKiBTZW5kIEFjY0VDTiBvcHRpb24gb24gZXZlcnkgcGFja2V0ICovXG4mIzQzO1x0XHRzZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfRUNOX09QVElPTiwgXHUwMDI2dmFsLCBzaXplb2YodmFsKSk7XG4mIzQzO1xuJiM0MztcdERlZmF1bHQ6IDI1NSAodW5zcGVjaWZpZWQgLSB1c2VzIHRjcF9lY25fb3B0aW9uIHN5c2N0bCB2YWx1ZSlcbiYjNDM7XG4gdGNwX2ZhY2sgLSBCT09MRUFOXG4gXHRUaGlzIGlzIGEgbGVnYWN5IG9wdGlvbiwgaXQgaGFzIG5vIGVmZmVjdCBhbnltb3JlLlxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNwLmggYi9pbmNsdWRlL2xpbnV4L3RjcC5oXG5pbmRleCA2YThjNzc3MTkzMjJmLi43Y2IxZTc2NWY0NjE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC90Y3AuaFxuQEAgLTI4OSw2ICYjNDM7Mjg5LDEzIEBAIHN0cnVjdCB0Y3Bfc29jayB7XG4gXHRcdFx0XHRcdCAqIHNhY2tlZF9vdXQgXHUwMDNlIDApXG4gXHRcdFx0XHRcdCAqL1xuIFx0dThcdGVjbl9mbGFncztcdC8qIEVDTiBzdGF0dXMgYml0cy5cdFx0XHQqL1xuJiM0MztcdHU4XHRlY25fbW9kZTtcdC8qIFBlci1zb2NrZXQgRUNOIG1vZGUgb3ZlcnJpZGVcbiYjNDM7XHRcdFx0XHQgKiAoVENQX0VDTl9NT0RFX1VOU1BFQyA9IHVzZSBzeXNjdGwpXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0dThcdGVjbl9vcHRpb247XHQvKiBQZXItc29ja2V0IEFjY0VDTiBvcHRpb24gb3ZlcnJpZGVcbiYjNDM7XHRcdFx0XHQgKiAoVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDID0gdXNlIHN5c2N0bClcbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XG4gXHRfX2NhY2hlbGluZV9ncm91cF9lbmQodGNwX3NvY2tfd3JpdGVfdHgpO1xuIFxuIFx0LyogVFhSWCByZWFkLXdyaXRlIGhvdHBhdGggY2FjaGUgbGluZXMgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3BfZWNuLmggYi9pbmNsdWRlL25ldC90Y3BfZWNuLmhcbmluZGV4IDg2NWQ1YzVhNzcxOGQuLjkzMWUwODc3MTc2YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3BfZWNuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaFxuQEAgLTIyLDYgJiM0MzsyMiw3IEBAIGVudW0gdGNwX2Vjbl9tb2RlIHtcbiBcdFRDUF9FQ05fSU5fQUNDRUNOX09VVF9BQ0NFQ04gPSAzLFxuIFx0VENQX0VDTl9JTl9BQ0NFQ05fT1VUX0VDTiA9IDQsXG4gXHRUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfTk9FQ04gPSA1LFxuJiM0MztcdFRDUF9FQ05fTU9ERV9VTlNQRUMgPSAyNTUsXHQvKiBVc2Ugc3lzY3RsIGRlZmF1bHQgKHBlci1zb2NrZXQpICovXG4gfTtcbiBcbiAvKiBBY2NFQ04gb3B0aW9uIHNlbmRpbmcgd2hlbiBBY2NFQ04gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IG5lZ290aWF0ZWQgKi9cbkBAIC0zMCw4ICYjNDM7MzEsMjkgQEAgZW51bSB0Y3BfYWNjZWNuX29wdGlvbiB7XG4gXHRUQ1BfQUNDRUNOX09QVElPTl9NSU5JTVVNID0gMSxcbiBcdFRDUF9BQ0NFQ05fT1BUSU9OX0ZVTEwgPSAyLFxuIFx0VENQX0FDQ0VDTl9PUFRJT05fUEVSU0lTVCA9IDMsXG4mIzQzO1x0VENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDID0gMjU1LFx0LyogVXNlIHN5c2N0bCBkZWZhdWx0IChwZXItc29ja2V0KSAqL1xuIH07XG4gXG4mIzQzOy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBFQ04gbW9kZTogcGVyLXNvY2tldCBvdmVycmlkZSBvciBzeXNjdGwgZmFsbGJhY2sgKi9cbiYjNDM7c3RhdGljIGlubGluZSB1OCB0Y3BfZWNuX21vZGVfZWZmKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHU4IG1vZGUgPSB0Y3Bfc2soc2spLVx1MDAzZWVjbl9tb2RlO1xuJiM0MztcbiYjNDM7XHRpZiAobW9kZSA9PSBUQ1BfRUNOX01PREVfVU5TUEVDKVxuJiM0MztcdFx0cmV0dXJuIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbik7XG4mIzQzO1x0cmV0dXJuIG1vZGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBBY2NFQ04gb3B0aW9uOiBwZXItc29ja2V0IG92ZXJyaWRlIG9yIHN5c2N0bCBmYWxsYmFjayAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHU4IHRjcF9hY2NlY25fb3B0aW9uX2VmZihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHR1OCBvcHQgPSB0Y3Bfc2soc2spLVx1MDAzZWVjbl9vcHRpb247XG4mIzQzO1xuJiM0MztcdGlmIChvcHQgPT0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDKVxuJiM0MztcdFx0cmV0dXJuIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pO1xuJiM0MztcdHJldHVybiBvcHQ7XG4mIzQzO31cbiYjNDM7XG4gLyogQXBwbHkgZWl0aGVyIEVDVCgwKSBvciBFQ1QoMSkgYmFzZWQgb24gVENQX0NPTkdfRUNUXzFfTkVHT1RJQVRJT04gZmxhZyAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBJTkVUX0VDTl94bWl0X2VjdF8xX25lZ290aWF0aW9uKHN0cnVjdCBzb2NrICpzaylcbiB7XG5AQCAtNTk5LDcgJiM0Mzs2MjEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2Vjbl9zZW5kX3N5bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbiBcdGJvb2wgYnBmX25lZWRzX2VjbiA9IHRjcF9icGZfY2FfbmVlZHNfZWNuKHNrKTtcbiBcdGJvb2wgdXNlX2VjbiwgdXNlX2FjY2Vjbjtcbi1cdHU4IHRjcF9lY24gPSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY24pO1xuJiM0MztcdHU4IHRjcF9lY24gPSB0Y3BfZWNuX21vZGVfZWZmKHNrKTtcbiBcbiBcdHVzZV9hY2NlY24gPSB0Y3BfZWNuID09IFRDUF9FQ05fSU5fQUNDRUNOX09VVF9BQ0NFQ04gfHxcbiBcdFx0ICAgICB0Y3BfY2FfbmVlZHNfYWNjZWNuKHNrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDczMmIzNWNjMDhkMWMuLmM1OGIxNjMzYmI0NmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTI5ODUsNyAmIzQzOzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdCAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosXG4gICogXHRcdCAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosXG4gICogXHRcdCAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKixcbi0gKlx0XHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLlxuJiM0MzsgKlx0XHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLFxuJiM0MzsgKlx0XHQgICoqVENQX0VDTioqLCAqKlRDUF9FQ05fT1BUSU9OKiouXG4gICogXHRcdCogKipJUFBST1RPX0lQKiosIHdoaWNoIHN1cHBvcnRzICpvcHRuYW1lKiAqKklQX1RPUyoqLlxuICAqIFx0XHQqICoqSVBQUk9UT19JUFY2KiosIHdoaWNoIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgKm9wdG5hbWUqXFwgczpcbiAgKiBcdFx0ICAqKklQVjZfVENMQVNTKiosICoqSVBWNl9BVVRPRkxPV0xBQkVMKiouXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG5pbmRleCAwMzc3MmRkNGQzOTkyLi4wMWViYjM0OGJhMjc0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmhcbkBAIC0xNDIsNiAmIzQzOzE0Miw4IEBAIGVudW0ge1xuICNkZWZpbmUgVENQX1JUT19NQVhfTVNcdFx0NDRcdC8qIG1heCBydG8gdGltZSBpbiBtcyAqL1xuICNkZWZpbmUgVENQX1JUT19NSU5fVVNcdFx0NDVcdC8qIG1pbiBydG8gdGltZSBpbiB1cyAqL1xuICNkZWZpbmUgVENQX0RFTEFDS19NQVhfVVNcdDQ2XHQvKiBtYXggZGVsYXllZCBhY2sgdGltZSBpbiB1cyAqL1xuJiM0MzsjZGVmaW5lIFRDUF9FQ05cdFx0XHQ0N1x0LyogUGVyLXNvY2tldCBFQ04gbW9kZSAoMC01LCAyNTU9dXNlIHN5c2N0bCkgKi9cbiYjNDM7I2RlZmluZSBUQ1BfRUNOX09QVElPTlx0XHQ0OFx0LyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqL1xuIFxuICNkZWZpbmUgVENQX1JFUEFJUl9PTlx0XHQxXG4gI2RlZmluZSBUQ1BfUkVQQUlSX09GRlx0XHQwXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uOTkzYjMxZTEwYjk0NCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTU2NzAsNiAmIzQzOzU2NzAsOCBAQCBzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuIFx0Y2FzZSBUQ1BfTk9UU0VOVF9MT1dBVDpcbiBcdGNhc2UgVENQX1NBVkVfU1lOOlxuIFx0Y2FzZSBUQ1BfUlRPX01BWF9NUzpcbiYjNDM7XHRjYXNlIFRDUF9FQ046XG4mIzQzO1x0Y2FzZSBUQ1BfRUNOX09QVElPTjpcbiBcdFx0aWYgKCpvcHRsZW4gIT0gc2l6ZW9mKGludCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IDFjODY3YTMwMjQ0NDYuLmZiMzc2YTk3ZjBlNmQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmNcbkBAIC00NjMsNiAmIzQzOzQ2Myw4IEBAIHZvaWQgdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHR0cC1cdTAwM2V0c29mZnNldCA9IDA7XG4gXHR0cC1cdTAwM2VyYWNrLnJlb193bmRfc3RlcHMgPSAxO1xuJiM0MztcdHRwLVx1MDAzZWVjbl9tb2RlID0gVENQX0VDTl9NT0RFX1VOU1BFQztcbiYjNDM7XHR0cC1cdTAwM2VlY25fb3B0aW9uID0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDO1xuIFxuIFx0c2stXHUwMDNlc2tfd3JpdGVfc3BhY2UgPSBza19zdHJlYW1fd3JpdGVfc3BhY2U7XG4gXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1VTRV9XUklURV9RVUVVRSk7XG5AQCAtNDE2MCw2ICYjNDM7NDE2MiwxOCBAQCBpbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHR0Y3BfZW5hYmxlX3R4X2RlbGF5KHNrLCB2YWwpO1xuIFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZXRjcF90eF9kZWxheSwgdmFsKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBUQ1BfRUNOOlxuJiM0MztcdFx0aWYgKHZhbCAhPSBUQ1BfRUNOX01PREVfVU5TUEVDIFx1MDAyNlx1MDAyNiAodmFsIFx1MDAzYyAwIHx8IHZhbCBcdTAwM2UgVENQX0VDTl9JTl9BQ0NFQ05fT1VUX05PRUNOKSlcbiYjNDM7XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0V1JJVEVfT05DRSh0cC1cdTAwM2VlY25fbW9kZSwgdmFsKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVENQX0VDTl9PUFRJT046XG4mIzQzO1x0XHRpZiAodmFsICE9IFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyBcdTAwMjZcdTAwMjYgKHZhbCBcdTAwM2MgMCB8fCB2YWwgXHUwMDNlIFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QpKVxuJiM0MztcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZWVjbl9vcHRpb24sIHZhbCk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGVyciA9IC1FTk9QUk9UT09QVDtcbiBcdFx0YnJlYWs7XG5AQCAtNDg0Miw2ICYjNDM7NDg1NiwxMiBAQCBpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4gXHRjYXNlIFRDUF9ERUxBQ0tfTUFYX1VTOlxuIFx0XHR2YWwgPSBqaWZmaWVzX3RvX3VzZWNzKFJFQURfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19kZWxhY2tfbWF4KSk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVENQX0VDTjpcbiYjNDM7XHRcdHZhbCA9IFJFQURfT05DRSh0cC1cdTAwM2VlY25fbW9kZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFRDUF9FQ05fT1BUSU9OOlxuJiM0MztcdFx0dmFsID0gUkVBRF9PTkNFKHRwLVx1MDAzZWVjbl9vcHRpb24pO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuQEAgLTUyNTYsNiAmIzQzOzUyNzYsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdGNwX3N0cnVjdF9jaGVjayh2b2lkKVxuIFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgdHNvcnRlZF9zZW50X3F1ZXVlKTtcbiBcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGhpZ2hlc3Rfc2Fjayk7XG4gXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fZmxhZ3MpO1xuJiM0MztcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGVjbl9tb2RlKTtcbiYjNDM7XHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fb3B0aW9uKTtcbiBcbiBcdC8qIFRYUlggcmVhZC13cml0ZSBob3RwYXRoIGNhY2hlIGxpbmVzICovXG4gXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4cngsIHByZWRfZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbmluZGV4IDBmNjBhMWRiZjkyNzQuLjAwNDNiNGIyYmM5MjIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbkBAIC03NDU3LDEzICYjNDM7NzQ1NywxMiBAQCBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbi1cdGNvbnN0IHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGxpc3Rlbl9zayk7XG4gXHRib29sIHRoX2VjbiA9IHRoLVx1MDAzZWVjZSBcdTAwMjZcdTAwMjYgdGgtXHUwMDNlY3dyO1xuIFx0Ym9vbCBlY3QsIGVjbl9vaztcbiBcdHUzMiBlY25fb2tfZHN0O1xuIFxuIFx0aWYgKHRjcF9hY2NlY25fc3luX3JlcXVlc3RlZCh0aCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2VjbikgXHUwMDNlPSAzIHx8XG4mIzQzO1x0ICAgICh0Y3BfZWNuX21vZGVfZWZmKGxpc3Rlbl9zaykgXHUwMDNlPSAzIHx8XG4gXHQgICAgIHRjcF9jYV9uZWVkc19hY2NlY24obGlzdGVuX3NrKSkpIHtcbiBcdFx0aW5ldF9yc2socmVxKS1cdTAwM2VlY25fb2sgPSAxO1xuIFx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlYWNjZWNuX29rID0gMTtcbkBAIC03NDc3LDcgJiM0Mzs3NDc2LDcgQEAgc3RhdGljIHZvaWQgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXG4gXHRlY3QgPSAhSU5FVF9FQ05faXNfbm90X2VjdChUQ1BfU0tCX0NCKHNrYiktXHUwMDNlaXBfZHNmaWVsZCk7XG4gXHRlY25fb2tfZHN0ID0gZHN0X2ZlYXR1cmUoZHN0LCBEU1RfRkVBVFVSRV9FQ05fTUFTSyk7XG4tXHRlY25fb2sgPSBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY24pIHx8IGVjbl9va19kc3Q7XG4mIzQzO1x0ZWNuX29rID0gdGNwX2Vjbl9tb2RlX2VmZihsaXN0ZW5fc2spIHx8IGVjbl9va19kc3Q7XG4gXG4gXHRpZiAoKCghZWN0IHx8IHRoLVx1MDAzZXJlczEgfHwgdGgtXHUwMDNlYWUpIFx1MDAyNlx1MDAyNiBlY25fb2spIHx8XG4gXHQgICAgdGNwX2NhX25lZWRzX2VjbihsaXN0ZW5fc2spIHx8XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5pbmRleCAwMDQxN2E0MjkyMjI1Li44MmI5NmM0MDE1ZmQwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbkBAIC0xMDQ1LDcgJiM0MzsxMDQ1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHVubGlrZWx5KChUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfQUNLKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICB0Y3BfZWNuX21vZGVfYWNjZWNuKHRwKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICBpbmV0X2NzayhzayktXHUwMDNlaWNza19yZXRyYW5zbWl0cyBcdTAwM2MgMiBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICByZW1haW5pbmcgXHUwMDNlPSBUQ1BPTEVOX0FDQ0VDTl9CQVNFKSkge1xuIFx0XHRvcHRzLVx1MDAzZXVzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTtcbiBcdFx0cmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTtcbkBAIC0xMTMzLDcgJiM0MzsxMTMzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0c21jX3NldF9vcHRpb25fY29uZCh0Y3Bfc2soc2spLCBpcmVxLCBvcHRzLCBcdTAwMjZyZW1haW5pbmcpO1xuIFxuIFx0aWYgKHRyZXEtXHUwMDNlYWNjZWNuX29rIFx1MDAyNlx1MDAyNlxuLVx0ICAgIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHN5bmFja190eXBlICE9IFRDUF9TWU5BQ0tfUkVUUkFOUyBcdTAwMjZcdTAwMjYgcmVtYWluaW5nIFx1MDAzZT0gVENQT0xFTl9BQ0NFQ05fQkFTRSkge1xuIFx0XHRvcHRzLVx1MDAzZXVzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTtcbiBcdFx0cmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTtcbkBAIC0xMjIxLDcgJiM0MzsxMjIxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2JcbiBcdH1cbiBcbiBcdGlmICh0Y3BfZWNuX21vZGVfYWNjZWNuKHRwKSkge1xuLVx0XHRpbnQgZWNuX29wdCA9IFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pO1xuJiM0MztcdFx0aW50IGVjbl9vcHQgPSB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spO1xuIFxuIFx0XHRpZiAoZWNuX29wdCBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlc2F3X2FjY2Vjbl9vcHQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAoZWNuX29wdCBcdTAwM2U9IFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QgfHxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDczMmIzNWNjMDhkMWMuLmM1OGIxNjMzYmI0NmUgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTI5ODUsNyAmIzQzOzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdCAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosXG4gICogXHRcdCAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosXG4gICogXHRcdCAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKixcbi0gKlx0XHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLlxuJiM0MzsgKlx0XHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLFxuJiM0MzsgKlx0XHQgICoqVENQX0VDTioqLCAqKlRDUF9FQ05fT1BUSU9OKiouXG4gICogXHRcdCogKipJUFBST1RPX0lQKiosIHdoaWNoIHN1cHBvcnRzICpvcHRuYW1lKiAqKklQX1RPUyoqLlxuICAqIFx0XHQqICoqSVBQUk9UT19JUFY2KiosIHdoaWNoIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgKm9wdG5hbWUqXFwgczpcbiAgKiBcdFx0ICAqKklQVjZfVENMQVNTKiosICoqSVBWNl9BVVRPRkxPV0xBQkVMKiouXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG5pbmRleCAxM2NlZWIzOTVlYjhmLi40ZjUyYjlkZjQyNjYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmhcbkBAIC0xMjgsNyAmIzQzOzEyOCw4IEBAIGVudW0ge1xuICNkZWZpbmUgVENQX0NNX0lOUVx0XHRUQ1BfSU5RXG4gXG4gI2RlZmluZSBUQ1BfVFhfREVMQVlcdFx0MzdcdC8qIGRlbGF5IG91dGdvaW5nIHBhY2tldHMgYnkgWFggdXNlYyAqL1xuLVxuJiM0MzsjZGVmaW5lIFRDUF9FQ05cdFx0XHQ0N1x0LyogUGVyLXNvY2tldCBFQ04gbW9kZSAoMC01LCAyNTU9dXNlIHN5c2N0bCkgKi9cbiYjNDM7I2RlZmluZSBUQ1BfRUNOX09QVElPTlx0XHQ0OFx0LyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqL1xuIFxuICNkZWZpbmUgVENQX1JFUEFJUl9PTlx0XHQxXG4gI2RlZmluZSBUQ1BfUkVQQUlSX09GRlx0XHQwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuY1xuaW5kZXggZDk2ZTk5YjY3YWViZi4uZmI5N2ZhMGJjN2I0NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zZXRnZXRfc29ja29wdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuY1xuQEAgLTY0LDYgJiM0Mzs2NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja29wdF90ZXN0IHNvbF90Y3BfdGVzdHNbXSA9IHtcbiBcdHsgLm9wdCA9IFRDUF9CUEZfREVMQUNLX01BWCwgLm5ldyA9IDMwMDAwLCAuZXhwZWN0ZWQgPSAzMDAwMCwgfSxcbiBcdHsgLm9wdCA9IFRDUF9CUEZfUlRPX01JTiwgLm5ldyA9IDMwMDAwLCAuZXhwZWN0ZWQgPSAzMDAwMCwgfSxcbiBcdHsgLm9wdCA9IFRDUF9SVE9fTUFYX01TLCAubmV3ID0gMjAwMCwgLmV4cGVjdGVkID0gMjAwMCwgfSxcbiYjNDM7XHR7IC5vcHQgPSBUQ1BfRUNOLCAubmV3ID0gMywgLmV4cGVjdGVkID0gMywgLnJlc3RvcmUgPSAyNTUsIH0sXG4mIzQzO1x0eyAub3B0ID0gVENQX0VDTl9PUFRJT04sIC5uZXcgPSAyLCAuZXhwZWN0ZWQgPSAyLCAucmVzdG9yZSA9IDI1NSwgfSxcbiBcdHsgLm9wdCA9IDAsIH0sXG4gfTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fdGNwX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7ZG9fdGNwX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGNwX2Nvbm5fcmVxdWVzdCYjMzQ7LAogICAgJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0OywKICAgICYjMzQ7dGNwX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTiBzb2NrZXQgb3B0aW9ucyB0byBhbGxvdyBwZXItc29ja2V0IGNvbmZpZ3VyYXRpb24gYW5kIG92ZXJyaWRlIG9mIHRoZSB0Y3BfZWNuIGFuZCB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgc2V0dGluZ3MuIEl0IG1vZGlmaWVzIFRDUCBzb2NrZXQgb3B0aW9ucyBoYW5kbGluZyAoZ2V0c29ja29wdC9zZXRzb2Nrb3B0KSwgQlBGIHNvY2tvcHQgZmlsdGVycywgVENQIFNZTi9TWU4tQUNLIG9wdGlvbiBnZW5lcmF0aW9uLCBhbmQgVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBwcm9jZXNzaW5nIGluIHRoZSBjb3JlIElQdjQvVENQIG5ldHdvcmtpbmcgc3RhY2suJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MzA0ZDA0YzYzN2JjYjRhMGU0MjRlZTRmNzU0ZDgzNGEzOTkyMDE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDk6MDY6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0CmluZGV4IDIwOGY0Njk2N2VlNTkuLjJlNTVkOWUyZWIwOWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0CkBAIC01MjgsNiAmIzQzOzUyOCw0MyBAQCB0Y3BfZWNuX2ZhbGxiYWNrIC0gQk9PTEVBTgogCiAJRGVmYXVsdDogMSAoZW5hYmxlZCkKIAomIzQzO3RjcF9lY24gKHNvY2tldCBvcHRpb24pIC0gVENQX0VDTgomIzQzOwlQZXItc29ja2V0IGNvbnRyb2wgb2YgRUNOIG1vZGUsIGFsbG93aW5nIHBlci1jb25uZWN0aW9uIG92ZXJyaWRlIG9mIHRoZQomIzQzOwl0Y3BfZWNuIHN5c2N0bCBzZXR0aW5nLiBUaGlzIGVuYWJsZXMgTDRTIChMb3cgTGF0ZW5jeSwgTG93IExvc3MsIFNjYWxhYmxlCiYjNDM7CVRocm91Z2hwdXQpIGNvbmZpZ3VyYXRpb24gb24gYSBwZXItc29ja2V0IGJhc2lzLgomIzQzOwomIzQzOwlTZXR0aW5nIHRoaXMgc29ja2V0IG9wdGlvbiB0byBhbnkgdmFsdWUgZXhjZXB0IDI1NSB3aWxsIG92ZXJyaWRlIHRoZQomIzQzOwlzeXN0ZW0td2lkZSB0Y3BfZWNuIHN5c2N0bCBmb3IgdGhhdCBwYXJ0aWN1bGFyIHNvY2tldC4gQSB2YWx1ZSBvZiAyNTUKJiM0MzsJKFRDUF9FQ05fTU9ERV9VTlNQRUMpIG1lYW5zIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgc3lzY3RsIHZhbHVlLgomIzQzOwomIzQzOwlQb3NzaWJsZSB2YWx1ZXM6IDAtNSAoc2VlIHRjcF9lY24gc3lzY3RsIGRlc2NyaXB0aW9uIGFib3ZlKSwgb3IgMjU1IHRvCiYjNDM7CXVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgKHN5c2N0bF90Y3BfZWNuKS4KJiM0MzsKJiM0MzsJRXhhbXBsZTo6CiYjNDM7CiYjNDM7CQlpbnQgdmFsID0gMzsgIC8qIEFjY0VDTiBtb2RlICovCiYjNDM7CQlzZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfRUNOLCAmYW1wO3ZhbCwgc2l6ZW9mKHZhbCkpOwomIzQzOwomIzQzOwlEZWZhdWx0OiAyNTUgKHVuc3BlY2lmaWVkIC0gdXNlcyB0Y3BfZWNuIHN5c2N0bCB2YWx1ZSkKJiM0MzsKJiM0Mzt0Y3BfZWNuX29wdGlvbiAoc29ja2V0IG9wdGlvbikgLSBUQ1BfRUNOX09QVElPTgomIzQzOwlQZXItc29ja2V0IGNvbnRyb2wgb2YgQWNjdXJhdGUgRUNOIChBY2NFQ04pIG9wdGlvbiBzZW5kaW5nIGJlaGF2aW9yLAomIzQzOwlhbGxvd2luZyBwZXItY29ubmVjdGlvbiBvdmVycmlkZSBvZiB0aGUgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIHNldHRpbmcuCiYjNDM7CiYjNDM7CVNldHRpbmcgdGhpcyBzb2NrZXQgb3B0aW9uIHRvIGFueSB2YWx1ZSBleGNlcHQgMjU1IHdpbGwgb3ZlcnJpZGUgdGhlCiYjNDM7CXN5c3RlbS13aWRlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBmb3IgdGhhdCBwYXJ0aWN1bGFyIHNvY2tldC4gQSB2YWx1ZSBvZgomIzQzOwkyNTUgKFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQykgbWVhbnMgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBzeXNjdGwgdmFsdWUuCiYjNDM7CiYjNDM7CVBvc3NpYmxlIHZhbHVlczogMC0zIChzZWUgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIGRlc2NyaXB0aW9uIGFib3ZlKSwgb3IgMjU1CiYjNDM7CXRvIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgKHN5c2N0bF90Y3BfZWNuX29wdGlvbikuCiYjNDM7CiYjNDM7CUV4YW1wbGU6OgomIzQzOwomIzQzOwkJaW50IHZhbCA9IDI7ICAvKiBTZW5kIEFjY0VDTiBvcHRpb24gb24gZXZlcnkgcGFja2V0ICovCiYjNDM7CQlzZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfRUNOX09QVElPTiwgJmFtcDt2YWwsIHNpemVvZih2YWwpKTsKJiM0MzsKJiM0MzsJRGVmYXVsdDogMjU1ICh1bnNwZWNpZmllZCAtIHVzZXMgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIHZhbHVlKQomIzQzOwogdGNwX2ZhY2sgLSBCT09MRUFOCiAJVGhpcyBpcyBhIGxlZ2FjeSBvcHRpb24sIGl0IGhhcyBubyBlZmZlY3QgYW55bW9yZS4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggNmE4Yzc3NzE5MzIyZi4uN2NiMWU3NjVmNDYxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC0yODksNiAmIzQzOzI4OSwxMyBAQCBzdHJ1Y3QgdGNwX3NvY2sgewogCQkJCQkgKiBzYWNrZWRfb3V0ICZndDsgMCkKIAkJCQkJICovCiAJdTgJZWNuX2ZsYWdzOwkvKiBFQ04gc3RhdHVzIGJpdHMuCQkJKi8KJiM0MzsJdTgJZWNuX21vZGU7CS8qIFBlci1zb2NrZXQgRUNOIG1vZGUgb3ZlcnJpZGUKJiM0MzsJCQkJICogKFRDUF9FQ05fTU9ERV9VTlNQRUMgPSB1c2Ugc3lzY3RsKQomIzQzOwkJCQkgKi8KJiM0MzsJdTgJZWNuX29wdGlvbjsJLyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uIG92ZXJyaWRlCiYjNDM7CQkJCSAqIChUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgPSB1c2Ugc3lzY3RsKQomIzQzOwkJCQkgKi8KJiM0MzsKIAlfX2NhY2hlbGluZV9ncm91cF9lbmQodGNwX3NvY2tfd3JpdGVfdHgpOwogCiAJLyogVFhSWCByZWFkLXdyaXRlIGhvdHBhdGggY2FjaGUgbGluZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcF9lY24uaCBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaAppbmRleCA4NjVkNWM1YTc3MThkLi45MzFlMDg3NzE3NmM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3BfZWNuLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvdGNwX2Vjbi5oCkBAIC0yMiw2ICYjNDM7MjIsNyBAQCBlbnVtIHRjcF9lY25fbW9kZSB7CiAJVENQX0VDTl9JTl9BQ0NFQ05fT1VUX0FDQ0VDTiA9IDMsCiAJVENQX0VDTl9JTl9BQ0NFQ05fT1VUX0VDTiA9IDQsCiAJVENQX0VDTl9JTl9BQ0NFQ05fT1VUX05PRUNOID0gNSwKJiM0MzsJVENQX0VDTl9NT0RFX1VOU1BFQyA9IDI1NSwJLyogVXNlIHN5c2N0bCBkZWZhdWx0IChwZXItc29ja2V0KSAqLwogfTsKIAogLyogQWNjRUNOIG9wdGlvbiBzZW5kaW5nIHdoZW4gQWNjRUNOIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBuZWdvdGlhdGVkICovCkBAIC0zMCw4ICYjNDM7MzEsMjkgQEAgZW51bSB0Y3BfYWNjZWNuX29wdGlvbiB7CiAJVENQX0FDQ0VDTl9PUFRJT05fTUlOSU1VTSA9IDEsCiAJVENQX0FDQ0VDTl9PUFRJT05fRlVMTCA9IDIsCiAJVENQX0FDQ0VDTl9PUFRJT05fUEVSU0lTVCA9IDMsCiYjNDM7CVRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyA9IDI1NSwJLyogVXNlIHN5c2N0bCBkZWZhdWx0IChwZXItc29ja2V0KSAqLwogfTsKIAomIzQzOy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBFQ04gbW9kZTogcGVyLXNvY2tldCBvdmVycmlkZSBvciBzeXNjdGwgZmFsbGJhY2sgKi8KJiM0MztzdGF0aWMgaW5saW5lIHU4IHRjcF9lY25fbW9kZV9lZmYoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJdTggbW9kZSA9IHRjcF9zayhzayktJmd0O2Vjbl9tb2RlOwomIzQzOwomIzQzOwlpZiAobW9kZSA9PSBUQ1BfRUNOX01PREVfVU5TUEVDKQomIzQzOwkJcmV0dXJuIFJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF9lY24pOwomIzQzOwlyZXR1cm4gbW9kZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIEFjY0VDTiBvcHRpb246IHBlci1zb2NrZXQgb3ZlcnJpZGUgb3Igc3lzY3RsIGZhbGxiYWNrICovCiYjNDM7c3RhdGljIGlubGluZSB1OCB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJdTggb3B0ID0gdGNwX3NrKHNrKS0mZ3Q7ZWNuX29wdGlvbjsKJiM0MzsKJiM0MzsJaWYgKG9wdCA9PSBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMpCiYjNDM7CQlyZXR1cm4gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pOwomIzQzOwlyZXR1cm4gb3B0OwomIzQzO30KJiM0MzsKIC8qIEFwcGx5IGVpdGhlciBFQ1QoMCkgb3IgRUNUKDEpIGJhc2VkIG9uIFRDUF9DT05HX0VDVF8xX05FR09USUFUSU9OIGZsYWcgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBJTkVUX0VDTl94bWl0X2VjdF8xX25lZ290aWF0aW9uKHN0cnVjdCBzb2NrICpzaykKIHsKQEAgLTU5OSw3ICYjNDM7NjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRjcF9lY25fc2VuZF9zeW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCWJvb2wgYnBmX25lZWRzX2VjbiA9IHRjcF9icGZfY2FfbmVlZHNfZWNuKHNrKTsKIAlib29sIHVzZV9lY24sIHVzZV9hY2NlY247Ci0JdTggdGNwX2VjbiA9IFJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF9lY24pOwomIzQzOwl1OCB0Y3BfZWNuID0gdGNwX2Vjbl9tb2RlX2VmZihzayk7CiAKIAl1c2VfYWNjZWNuID0gdGNwX2VjbiA9PSBUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfQUNDRUNOIHx8CiAJCSAgICAgdGNwX2NhX25lZWRzX2FjY2Vjbihzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggNzMyYjM1Y2MwOGQxYy4uYzU4YjE2MzNiYjQ2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMjk4NSw3ICYjNDM7Mjk4NSw4IEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqIAkJICAqKlRDUF9TWU5DTlQqKiwgKipUQ1BfVVNFUl9USU1FT1VUKiosICoqVENQX05PVFNFTlRfTE9XQVQqKiwKICAqIAkJICAqKlRDUF9OT0RFTEFZKiosICoqVENQX01BWFNFRyoqLCAqKlRDUF9XSU5ET1dfQ0xBTVAqKiwKICAqIAkJICAqKlRDUF9USElOX0xJTkVBUl9USU1FT1VUUyoqLCAqKlRDUF9CUEZfREVMQUNLX01BWCoqLAotICoJCSAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiouCiYjNDM7ICoJCSAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiosCiYjNDM7ICoJCSAgKipUQ1BfRUNOKiosICoqVENQX0VDTl9PUFRJT04qKi4KICAqIAkJKiAqKklQUFJPVE9fSVAqKiwgd2hpY2ggc3VwcG9ydHMgKm9wdG5hbWUqICoqSVBfVE9TKiouCiAgKiAJCSogKipJUFBST1RPX0lQVjYqKiwgd2hpY2ggc3VwcG9ydHMgdGhlIGZvbGxvd2luZyAqb3B0bmFtZSpcIHM6CiAgKiAJCSAgKipJUFY2X1RDTEFTUyoqLCAqKklQVjZfQVVUT0ZMT1dMQUJFTCoqLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oCmluZGV4IDAzNzcyZGQ0ZDM5OTIuLjAxZWJiMzQ4YmEyNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgKQEAgLTE0Miw2ICYjNDM7MTQyLDggQEAgZW51bSB7CiAjZGVmaW5lIFRDUF9SVE9fTUFYX01TCQk0NAkvKiBtYXggcnRvIHRpbWUgaW4gbXMgKi8KICNkZWZpbmUgVENQX1JUT19NSU5fVVMJCTQ1CS8qIG1pbiBydG8gdGltZSBpbiB1cyAqLwogI2RlZmluZSBUQ1BfREVMQUNLX01BWF9VUwk0NgkvKiBtYXggZGVsYXllZCBhY2sgdGltZSBpbiB1cyAqLwomIzQzOyNkZWZpbmUgVENQX0VDTgkJCTQ3CS8qIFBlci1zb2NrZXQgRUNOIG1vZGUgKDAtNSwgMjU1PXVzZSBzeXNjdGwpICovCiYjNDM7I2RlZmluZSBUQ1BfRUNOX09QVElPTgkJNDgJLyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqLwogCiAjZGVmaW5lIFRDUF9SRVBBSVJfT04JCTEKICNkZWZpbmUgVENQX1JFUEFJUl9PRkYJCTAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggNjE5NDBlNzUzNTUyMy4uOTkzYjMxZTEwYjk0NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTU2NzAsNiAmIzQzOzU2NzAsOCBAQCBzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLAogCWNhc2UgVENQX05PVFNFTlRfTE9XQVQ6CiAJY2FzZSBUQ1BfU0FWRV9TWU46CiAJY2FzZSBUQ1BfUlRPX01BWF9NUzoKJiM0MzsJY2FzZSBUQ1BfRUNOOgomIzQzOwljYXNlIFRDUF9FQ05fT1BUSU9OOgogCQlpZiAoKm9wdGxlbiAhPSBzaXplb2YoaW50KSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggMWM4NjdhMzAyNDQ0Ni4uZmIzNzZhOTdmMGU2ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTQ2Myw2ICYjNDM7NDYzLDggQEAgdm9pZCB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaykKIAogCXRwLSZndDt0c29mZnNldCA9IDA7CiAJdHAtJmd0O3JhY2sucmVvX3duZF9zdGVwcyA9IDE7CiYjNDM7CXRwLSZndDtlY25fbW9kZSA9IFRDUF9FQ05fTU9ERV9VTlNQRUM7CiYjNDM7CXRwLSZndDtlY25fb3B0aW9uID0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDOwogCiAJc2stJmd0O3NrX3dyaXRlX3NwYWNlID0gc2tfc3RyZWFtX3dyaXRlX3NwYWNlOwogCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfVVNFX1dSSVRFX1FVRVVFKTsKQEAgLTQxNjAsNiAmIzQzOzQxNjIsMTggQEAgaW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJdGNwX2VuYWJsZV90eF9kZWxheShzaywgdmFsKTsKIAkJV1JJVEVfT05DRSh0cC0mZ3Q7dGNwX3R4X2RlbGF5LCB2YWwpOwogCQlicmVhazsKJiM0MzsJY2FzZSBUQ1BfRUNOOgomIzQzOwkJaWYgKHZhbCAhPSBUQ1BfRUNOX01PREVfVU5TUEVDICZhbXA7JmFtcDsgKHZhbCAmbHQ7IDAgfHwgdmFsICZndDsgVENQX0VDTl9JTl9BQ0NFQ05fT1VUX05PRUNOKSkKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZWxzZQomIzQzOwkJCVdSSVRFX09OQ0UodHAtJmd0O2Vjbl9tb2RlLCB2YWwpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVENQX0VDTl9PUFRJT046CiYjNDM7CQlpZiAodmFsICE9IFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyAmYW1wOyZhbXA7ICh2YWwgJmx0OyAwIHx8IHZhbCAmZ3Q7IFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QpKQomIzQzOwkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQllbHNlCiYjNDM7CQkJV1JJVEVfT05DRSh0cC0mZ3Q7ZWNuX29wdGlvbiwgdmFsKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9QUk9UT09QVDsKIAkJYnJlYWs7CkBAIC00ODQyLDYgJiM0Mzs0ODU2LDEyIEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKIAljYXNlIFRDUF9ERUxBQ0tfTUFYX1VTOgogCQl2YWwgPSBqaWZmaWVzX3RvX3VzZWNzKFJFQURfT05DRShpbmV0X2NzayhzayktJmd0O2ljc2tfZGVsYWNrX21heCkpOwogCQlicmVhazsKJiM0MzsJY2FzZSBUQ1BfRUNOOgomIzQzOwkJdmFsID0gUkVBRF9PTkNFKHRwLSZndDtlY25fbW9kZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBUQ1BfRUNOX09QVElPTjoKJiM0MzsJCXZhbCA9IFJFQURfT05DRSh0cC0mZ3Q7ZWNuX29wdGlvbik7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KQEAgLTUyNTYsNiAmIzQzOzUyNzYsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdGNwX3N0cnVjdF9jaGVjayh2b2lkKQogCUNBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIHRzb3J0ZWRfc2VudF9xdWV1ZSk7CiAJQ0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgaGlnaGVzdF9zYWNrKTsKIAlDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fZmxhZ3MpOwomIzQzOwlDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fbW9kZSk7CiYjNDM7CUNBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGVjbl9vcHRpb24pOwogCiAJLyogVFhSWCByZWFkLXdyaXRlIGhvdHBhdGggY2FjaGUgbGluZXMgKi8KIAlDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4cngsIHByZWRfZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAwZjYwYTFkYmY5Mjc0Li4wMDQzYjRiMmJjOTIyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNzQ1NywxMyAmIzQzOzc0NTcsMTIgQEAgc3RhdGljIHZvaWQgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAJCQkJICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogewogCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpOwotCWNvbnN0IHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGxpc3Rlbl9zayk7CiAJYm9vbCB0aF9lY24gPSB0aC0mZ3Q7ZWNlICZhbXA7JmFtcDsgdGgtJmd0O2N3cjsKIAlib29sIGVjdCwgZWNuX29rOwogCXUzMiBlY25fb2tfZHN0OwogCiAJaWYgKHRjcF9hY2NlY25fc3luX3JlcXVlc3RlZCh0aCkgJmFtcDsmYW1wOwotCSAgICAoUkVBRF9PTkNFKG5ldC0mZ3Q7aXB2NC5zeXNjdGxfdGNwX2VjbikgJmd0Oz0gMyB8fAomIzQzOwkgICAgKHRjcF9lY25fbW9kZV9lZmYobGlzdGVuX3NrKSAmZ3Q7PSAzIHx8CiAJICAgICB0Y3BfY2FfbmVlZHNfYWNjZWNuKGxpc3Rlbl9zaykpKSB7CiAJCWluZXRfcnNrKHJlcSktJmd0O2Vjbl9vayA9IDE7CiAJCXRjcF9yc2socmVxKS0mZ3Q7YWNjZWNuX29rID0gMTsKQEAgLTc0NzcsNyAmIzQzOzc0NzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAogCWVjdCA9ICFJTkVUX0VDTl9pc19ub3RfZWN0KFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7aXBfZHNmaWVsZCk7CiAJZWNuX29rX2RzdCA9IGRzdF9mZWF0dXJlKGRzdCwgRFNUX0ZFQVRVUkVfRUNOX01BU0spOwotCWVjbl9vayA9IFJFQURfT05DRShuZXQtJmd0O2lwdjQuc3lzY3RsX3RjcF9lY24pIHx8IGVjbl9va19kc3Q7CiYjNDM7CWVjbl9vayA9IHRjcF9lY25fbW9kZV9lZmYobGlzdGVuX3NrKSB8fCBlY25fb2tfZHN0OwogCiAJaWYgKCgoIWVjdCB8fCB0aC0mZ3Q7cmVzMSB8fCB0aC0mZ3Q7YWUpICZhbXA7JmFtcDsgZWNuX29rKSB8fAogCSAgICB0Y3BfY2FfbmVlZHNfZWNuKGxpc3Rlbl9zaykgfHwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCAwMDQxN2E0MjkyMjI1Li44MmI5NmM0MDE1ZmQwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC0xMDQ1LDcgJiM0MzsxMDQ1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICh1bmxpa2VseSgoVENQX1NLQl9DQihza2IpLSZndDt0Y3BfZmxhZ3MgJmFtcDsgVENQSERSX0FDSykgJmFtcDsmYW1wOwogCQkgICAgIHRjcF9lY25fbW9kZV9hY2NlY24odHApICZhbXA7JmFtcDsKIAkJICAgICBpbmV0X2NzayhzayktJmd0O2ljc2tfcmV0cmFuc21pdHMgJmx0OyAyICZhbXA7JmFtcDsKLQkJICAgICBSRUFEX09OQ0Uoc29ja19uZXQoc2spLSZndDtpcHY0LnN5c2N0bF90Y3BfZWNuX29wdGlvbikgJmFtcDsmYW1wOwomIzQzOwkJICAgICB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spICZhbXA7JmFtcDsKIAkJICAgICByZW1haW5pbmcgJmd0Oz0gVENQT0xFTl9BQ0NFQ05fQkFTRSkpIHsKIAkJb3B0cy0mZ3Q7dXNlX3N5bmFja19lY25fYnl0ZXMgPSAxOwogCQlyZW1haW5pbmcgLT0gdGNwX29wdGlvbnNfZml0X2FjY2VjbihvcHRzLCAwLCByZW1haW5pbmcpOwpAQCAtMTEzMyw3ICYjNDM7MTEzMyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAlzbWNfc2V0X29wdGlvbl9jb25kKHRjcF9zayhzayksIGlyZXEsIG9wdHMsICZhbXA7cmVtYWluaW5nKTsKIAogCWlmICh0cmVxLSZndDthY2NlY25fb2sgJmFtcDsmYW1wOwotCSAgICBSRUFEX09OQ0Uoc29ja19uZXQoc2spLSZndDtpcHY0LnN5c2N0bF90Y3BfZWNuX29wdGlvbikgJmFtcDsmYW1wOwomIzQzOwkgICAgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKSAmYW1wOyZhbXA7CiAJICAgIHN5bmFja190eXBlICE9IFRDUF9TWU5BQ0tfUkVUUkFOUyAmYW1wOyZhbXA7IHJlbWFpbmluZyAmZ3Q7PSBUQ1BPTEVOX0FDQ0VDTl9CQVNFKSB7CiAJCW9wdHMtJmd0O3VzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTsKIAkJcmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTsKQEAgLTEyMjEsNyAmIzQzOzEyMjEsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYgogCX0KIAogCWlmICh0Y3BfZWNuX21vZGVfYWNjZWNuKHRwKSkgewotCQlpbnQgZWNuX29wdCA9IFJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKTsKJiM0MzsJCWludCBlY25fb3B0ID0gdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKTsKIAogCQlpZiAoZWNuX29wdCAmYW1wOyZhbXA7IHRwLSZndDtzYXdfYWNjZWNuX29wdCAmYW1wOyZhbXA7CiAJCSAgICAoZWNuX29wdCAmZ3Q7PSBUQ1BfQUNDRUNOX09QVElPTl9QRVJTSVNUIHx8CmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggNzMyYjM1Y2MwOGQxYy4uYzU4YjE2MzNiYjQ2ZSAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMjk4NSw3ICYjNDM7Mjk4NSw4IEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqIAkJICAqKlRDUF9TWU5DTlQqKiwgKipUQ1BfVVNFUl9USU1FT1VUKiosICoqVENQX05PVFNFTlRfTE9XQVQqKiwKICAqIAkJICAqKlRDUF9OT0RFTEFZKiosICoqVENQX01BWFNFRyoqLCAqKlRDUF9XSU5ET1dfQ0xBTVAqKiwKICAqIAkJICAqKlRDUF9USElOX0xJTkVBUl9USU1FT1VUUyoqLCAqKlRDUF9CUEZfREVMQUNLX01BWCoqLAotICoJCSAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiouCiYjNDM7ICoJCSAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiosCiYjNDM7ICoJCSAgKipUQ1BfRUNOKiosICoqVENQX0VDTl9PUFRJT04qKi4KICAqIAkJKiAqKklQUFJPVE9fSVAqKiwgd2hpY2ggc3VwcG9ydHMgKm9wdG5hbWUqICoqSVBfVE9TKiouCiAgKiAJCSogKipJUFBST1RPX0lQVjYqKiwgd2hpY2ggc3VwcG9ydHMgdGhlIGZvbGxvd2luZyAqb3B0bmFtZSpcIHM6CiAgKiAJCSAgKipJUFY2X1RDTEFTUyoqLCAqKklQVjZfQVVUT0ZMT1dMQUJFTCoqLgpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oCmluZGV4IDEzY2VlYjM5NWViOGYuLjRmNTJiOWRmNDI2NjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgKQEAgLTEyOCw3ICYjNDM7MTI4LDggQEAgZW51bSB7CiAjZGVmaW5lIFRDUF9DTV9JTlEJCVRDUF9JTlEKIAogI2RlZmluZSBUQ1BfVFhfREVMQVkJCTM3CS8qIGRlbGF5IG91dGdvaW5nIHBhY2tldHMgYnkgWFggdXNlYyAqLwotCiYjNDM7I2RlZmluZSBUQ1BfRUNOCQkJNDcJLyogUGVyLXNvY2tldCBFQ04gbW9kZSAoMC01LCAyNTU9dXNlIHN5c2N0bCkgKi8KJiM0MzsjZGVmaW5lIFRDUF9FQ05fT1BUSU9OCQk0OAkvKiBQZXItc29ja2V0IEFjY0VDTiBvcHRpb24gKDAtMywgMjU1PXVzZSBzeXNjdGwpICovCiAKICNkZWZpbmUgVENQX1JFUEFJUl9PTgkJMQogI2RlZmluZSBUQ1BfUkVQQUlSX09GRgkJMApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuYwppbmRleCBkOTZlOTliNjdhZWJmLi5mYjk3ZmEwYmM3YjQ3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuYwpAQCAtNjQsNiAmIzQzOzY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzb2Nrb3B0X3Rlc3Qgc29sX3RjcF90ZXN0c1tdID0gewogCXsgLm9wdCA9IFRDUF9CUEZfREVMQUNLX01BWCwgLm5ldyA9IDMwMDAwLCAuZXhwZWN0ZWQgPSAzMDAwMCwgfSwKIAl7IC5vcHQgPSBUQ1BfQlBGX1JUT19NSU4sIC5uZXcgPSAzMDAwMCwgLmV4cGVjdGVkID0gMzAwMDAsIH0sCiAJeyAub3B0ID0gVENQX1JUT19NQVhfTVMsIC5uZXcgPSAyMDAwLCAuZXhwZWN0ZWQgPSAyMDAwLCB9LAomIzQzOwl7IC5vcHQgPSBUQ1BfRUNOLCAubmV3ID0gMywgLmV4cGVjdGVkID0gMywgLnJlc3RvcmUgPSAyNTUsIH0sCiYjNDM7CXsgLm9wdCA9IFRDUF9FQ05fT1BUSU9OLCAubmV3ID0gMiwgLmV4cGVjdGVkID0gMiwgLnJlc3RvcmUgPSAyNTUsIH0sCiAJeyAub3B0ID0gMCwgfSwKIH07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI3OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyAmYW1wOyBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBxdWl0ZSBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEl0IGludHJvZHVjZXMgbmV3IHNvY2tldCBvcHRpb25zLCBgVENQX0VDTmAgYW5kIGBUQ1BfRUNOX09QVElPTmAsIGVzc2VudGlhbGx5IGFsbG93aW5nIHBlci1zb2NrZXQgb3ZlcnJpZGVzIGZvciBFQ04tcmVsYXRlZCBzeXNjdGwgc2V0dGluZ3MuIFRoaXMgcGVyLXNvY2tldCBncmFudWxhcml0eSBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIHBvdGVudGlhbCB0YXJnZXQuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgVENQIHN0YWNrIHZpYSBgc2V0c29ja29wdGAgYW5kIGBnZXRzb2Nrb3B0YCBtYWtlcyBpdCB2ZXJ5IGFjY2Vzc2libGUuIFdlIGhhdmUgdXNlci1sZXZlbCBpbnRlcmFjdGlvbiByaWdodCB0aGVyZSwgYW5kIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IHdlIHdhbnQuCgpTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgaW1wYWN0aW5nIGRvY3VtZW50YXRpb24sIHRoZSBjb3JlIGB0Y3Bfc29ja2Agc3RydWN0dXJlLCBoZWFkZXIgZmlsZXMsIGFuZCB0aGUgY3JpdGljYWwgYGZpbHRlci5jYCAodGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiBmb3IgQlBGIGludGVyYWN0aW9ucyksIGFsb25nIHdpdGggbnVtZXJvdXMgY29yZSBUQ1AgbW9kdWxlczogYHRjcC5jYCwgYHRjcF9pbnB1dC5jYCwgYW5kIGB0Y3Bfb3V0cHV0LmNgLiBUaGlzIGlzIGFsbCBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc28geWVzLCB3aXRob3V0IGEgZG91YnQsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5vdywgdGltZSB0byByZWZpbmUgdGhlIGFwcHJvYWNoLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJ4oCZbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3MgYXJlIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZXNlIGZlYXR1cmVzLiBNeSBpbml0aWFsIGd1ZXNzZXMgYXJlIGBJTkVUYCAob3IgYE5FVGApIC0gdGhhdCBzZWVtcyBsaWtlIGEgZ2l2ZW4sIGFuZCBJIHNob3VsZCBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvS2NvbmZpZ2AgZm9yIHJlbGF0ZWQgVENQIGNvbmZpZ3VyYXRpb25zLiBTaW5jZSB3ZeKAmXJlIGRlYWxpbmcgd2l0aCBgZmlsdGVyLmNgLCBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3IgYEJQRl9TWVNDQUxMYCwgYE5FVGAsIGFuZCBgSU5FVGAgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBzaG91bGQgY2hlY2sgYG5ldC9pcHY0L01ha2VmaWxlYCBvciBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gc2VlIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gYnVpbGQgYHRjcC5jYCwgYHRjcF9pbnB1dC5jYCwgYW5kIGB0Y3Bfb3V0cHV0LmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudCByZXF1aXJlZCBmb3IgdGhlc2UgY2hhbmdlcy4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgaW4gdGhpcyBhcmVhLiBGcm9tIHRoZSBwYXRjaCwgaXQgbG9va3MgbGlrZSBgdGNwX2Vjbl9tb2RlX2VmZihzaylgIGFuZCBgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKWAgYXJlIHdvcnRoIGhpZ2hsaWdodGluZywgYWxvbmcgd2l0aCBgZG9fdGNwX3NldHNvY2tvcHRgIGFuZCBgZG9fdGNwX2dldHNvY2tvcHRgLiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhlc2UgaW4gbW9yZSBkZXB0aCB0byB0YXJnZXQgdGhlbSBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotLip0Y3BcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9NTA9b2JqLSQoQ09ORklHX1RDUF9DT05HX0NVQklDKSAmIzQzOz0gdGNwX2N1YmljLm9cbm5ldC9pcHY0L01ha2VmaWxlOjUxOm9iai0kKENPTkZJR19UQ1BfQ09OR19EQ1RDUCkgJiM0Mzs9IHRjcF9kY3RjcC5vXG5uZXQvaXB2NC9NYWtlZmlsZS01Mi1vYmotJChDT05GSUdfVENQX0NPTkdfV0VTVFdPT0QpICYjNDM7PSB0Y3Bfd2VzdHdvb2Qub1xuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTU0PW9iai0kKENPTkZJR19UQ1BfQ09OR19IWUJMQSkgJiM0Mzs9IHRjcF9oeWJsYS5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1NTpvYmotJChDT05GSUdfVENQX0NPTkdfSFRDUCkgJiM0Mzs9IHRjcF9odGNwLm9cbm5ldC9pcHY0L01ha2VmaWxlLTU2LW9iai0kKENPTkZJR19UQ1BfQ09OR19WRUdBUykgJiM0Mzs9IHRjcF92ZWdhcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgSVB2NCBNYWtlZmlsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIElQdjQgc3RhY2ssIHNvIGxldCYjMzk7cyBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgYG5ldC9pcHY0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBsaWtlbHkgZmluZCB0aGUgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBmb3IgY29tcGlsaW5nIElQdjQtcmVsYXRlZCBtb2R1bGVzIGFuZCB0aGUgY29yZSBJUHY0IHN0YWNrIGl0c2VsZi4gVGhpcyBmaWxlIHdpbGwgdGVsbCBtZSBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyIOKAkyB0aGUgb2JqZWN0IGZpbGVzLCB0aGUgaW5jbHVkZSBwYXRocywgYW5kIGFueSBzcGVjaWZpYyBjb21waWxlciBmbGFncyBiZWluZyB1c2VkLiBJIGV4cGVjdCB0byBzZWUgZGVmaW5pdGlvbnMgZm9yIHZhcmlhYmxlcyBsaWtlIGBvYmotJChDT05GSUdfU09NRVRISU5HKWAgd2hpY2ggd2lsbCBndWlkZSB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiBjZXJ0YWluIGZlYXR1cmVzIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgaXMgY3J1Y2lhbCBmb3IgdHJhY2luZyB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaWRlbnRpZnlpbmcgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJIG1ha2UsIG9yIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBjb250ZXh0IG9mIHNvbWUgb3RoZXIgbW9kdWxlIEkmIzM5O20gbG9va2luZyBhdC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IEkgbmVlZCB0byBzb2x2ZSB0aGUgcHJvYmxlbSBJJiMzOTttIGxvb2tpbmcgYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVCkgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuICAgNzpcdFx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxuICAgODpcdFx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXG4gICA5Olx0XHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcbiAgMTA6XHRcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcbiAgMTE6XHRcdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxuICAxMjpcdFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcbiAgMTM6XHRcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxuICAxNDpcdFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxuICAxNTpcdFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxuICAxNjpcdFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxuICAxNzpcdFx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xuICAxODpcdFxuICAxOTpcdG9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSAmIzQzOz0gaXBfdHVubmVsLm9cbiAgMjA6XHRvYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY0Lm9cbiAgMjE6XHRvYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuICAyMjpcdG9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWJfcnVsZXMub1xuICAyMzpcdG9iai0kKENPTkZJR19JUF9NUk9VVEUpICYjNDM7PSBpcG1yLm9cbiAgMjQ6XHRvYmotJChDT05GSUdfSVBfTVJPVVRFX0NPTU1PTikgJiM0Mzs9IGlwbXJfYmFzZS5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG4gIDI2Olx0Z3JlLXkgOj0gZ3JlX2RlbXV4Lm9cbiAgMjc6XHRmb3UteSA6PSBmb3VfY29yZS5vIGZvdV9ubC5vIGZvdV9icGYub1xuICAyODpcdG9iai0kKENPTkZJR19ORVRfRk9VKSAmIzQzOz0gZm91Lm9cbiAgMjk6XHRvYmotJChDT05GSUdfTkVUX0lQR1JFX0RFTVVYKSAmIzQzOz0gZ3JlLm9cbiAgMzA6XHRvYmotJChDT05GSUdfTkVUX0lQR1JFKSAmIzQzOz0gaXBfZ3JlLm9cbiAgMzE6XHR1ZHBfdHVubmVsLXkgOj0gdWRwX3R1bm5lbF9jb3JlLm8gdWRwX3R1bm5lbF9uaWMub1xuICAzMjpcdG9iai0kKENPTkZJR19ORVRfVURQX1RVTk5FTCkgJiM0Mzs9IHVkcF90dW5uZWwub1xuICAzMzpcdG9iai0kKENPTkZJR19ORVRfSVBWVEkpICYjNDM7PSBpcF92dGkub1xuICAzNDpcdG9iai0kKENPTkZJR19TWU5fQ09PS0lFUykgJiM0Mzs9IHN5bmNvb2tpZXMub1xuICAzNTpcdG9iai0kKENPTkZJR19JTkVUX0FIKSAmIzQzOz0gYWg0Lm9cbiAgMzY6XHRvYmotJChDT05GSUdfSU5FVF9FU1ApICYjNDM7PSBlc3A0Lm9cbiAgMzc6XHRvYmotJChDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRCkgJiM0Mzs9IGVzcDRfb2ZmbG9hZC5vXG4gIDM4Olx0b2JqLSQoQ09ORklHX0lORVRfSVBDT01QKSAmIzQzOz0gaXBjb21wLm9cbiAgMzk6XHRvYmotJChDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCkgJiM0Mzs9IHhmcm00X3R1bm5lbC5vXG4gIDQwOlx0b2JqLSQoQ09ORklHX0lORVRfVFVOTkVMKSAmIzQzOz0gdHVubmVsNC5vXG4gIDQxOlx0b2JqLSQoQ09ORklHX0lQX1BOUCkgJiM0Mzs9IGlwY29uZmlnLm9cbiAgNDI6XHRvYmotJChDT05GSUdfTkVURklMVEVSKVx0JiM0Mzs9IG5ldGZpbHRlci5vIG5ldGZpbHRlci9cbiAgNDM6XHRvYmotJChDT05GSUdfSU5FVF9ESUFHKSAmIzQzOz0gaW5ldF9kaWFnLm9cbiAgNDQ6XHRvYmotJChDT05GSUdfSU5FVF9UQ1BfRElBRykgJiM0Mzs9IHRjcF9kaWFnLm9cbiAgNDU6XHRvYmotJChDT05GSUdfSU5FVF9VRFBfRElBRykgJiM0Mzs9IHVkcF9kaWFnLm9cbiAgNDY6XHRvYmotJChDT05GSUdfSU5FVF9SQVdfRElBRykgJiM0Mzs9IHJhd19kaWFnLm9cbiAgNDc6XHRvYmotJChDT05GSUdfVENQX0NPTkdfQkJSKSAmIzQzOz0gdGNwX2Jici5vXG4gIDQ4Olx0b2JqLSQoQ09ORklHX1RDUF9DT05HX0JJQykgJiM0Mzs9IHRjcF9iaWMub1xuICA0OTpcdG9iai0kKENPTkZJR19UQ1BfQ09OR19DREcpICYjNDM7PSB0Y3BfY2RnLm9cbiAgNTA6XHRvYmotJChDT05GSUdfVENQX0NPTkdfQ1VCSUMpICYjNDM7PSB0Y3BfY3ViaWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTcyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgU3RhY2sgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGBuZXQvaXB2NGAgY29tcG9uZW50IGlzIGJlaW5nIGJ1aWx0IHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCBmcmFtZXdvcmsuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgbmV0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgdGhlIG9yY2hlc3RyYXRvciBvZiBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIGZvciB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIGl0IGFuZCBzZWUgaG93IGBpcHY0YCBpcyBzcGVjaWZpY2FsbHkgaW5jb3Jwb3JhdGVkLCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IGBuZXQvTWFrZWZpbGVgIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbm5ldC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG5uZXQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQzMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQ29kZSBDb25maWd1cmF0aW9uIFRob3VnaHRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZGVwZW5kZW5jeSBpc3N1ZS4gSXQgbG9va3MgbGlrZSBJIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX0lORVRgIGVuYWJsZWQgaWYgSSYjMzk7bSBnb2luZyB0byB0b3VjaCBhbnl0aGluZyBpbiBgbmV0L2lwdjQvYC4gVGhhdCYjMzk7cyBub3Qgc3VycHJpc2luZywgYnV0IGl0JiMzOTtzIGdvb2QgdG8gbWFrZSBhIG5vdGUgb2YgaXQgcmlnaHQgYXdheS4gTW9yZSBzcGVjaWZpY2FsbHkgdGhvdWdoLCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCB0aGUgYHNvbF90Y3Bfc29ja29wdGAgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSByZWNhbGwgdGhhdCBvbmUgdXNlcyBhIEJQRiBzb2Nrb3B0IGhlbHBlciBvZiBzb3J0cy4gU28sIGlmIEkmIzM5O20gZ29pbmcgdG8gd29yayB3aXRoIHRoYXQsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhbHNvIGVuYWJsZWQuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gdmVyaWZ5IHRob3NlIGRlcGVuZGVuY2llcyBiZWZvcmUgcHJvY2VlZGluZy4gSSYjMzk7bSBnb2luZyB0byBnbyBzdHJhaWdodCB0byBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29sX3RjcF9zb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NTU0OT1zdGF0aWMgaW50IGJwZl9zb2xfdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01NTk5LVxubmV0L2NvcmUvZmlsdGVyLmM6NTYwMDpzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdF9jb25nZXN0aW9uKHN0cnVjdCBzb2NrICpzaywgY2hhciAqb3B0dmFsLFxubmV0L2NvcmUvZmlsdGVyLmMtNTYwMS1cdFx0XHRcdCAgICAgIGludCAqb3B0bGVuLCBib29sIGdldG9wdClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01NjUyLVxubmV0L2NvcmUvZmlsdGVyLmM6NTY1MzpzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxubmV0L2NvcmUvZmlsdGVyLmMtNTY1NC1cdFx0XHQgICBjaGFyICpvcHR2YWwsIGludCAqb3B0bGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTU2NzgtXHRjYXNlIFRDUF9DT05HRVNUSU9OOlxubmV0L2NvcmUvZmlsdGVyLmM6NTY3OTpcdFx0cmV0dXJuIHNvbF90Y3Bfc29ja29wdF9jb25nZXN0aW9uKHNrLCBvcHR2YWwsIG9wdGxlbiwgZ2V0b3B0KTtcbm5ldC9jb3JlL2ZpbHRlci5jLTU2ODAtXHRjYXNlIFRDUF9TQVZFRF9TWU46XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NTc3OT1zdGF0aWMgaW50IF9fYnBmX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTU3OTEtXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUClcbm5ldC9jb3JlL2ZpbHRlci5jOjU3OTI6XHRcdHJldHVybiBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCBmYWxzZSk7XG5uZXQvY29yZS9maWx0ZXIuYy01NzkzLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTU4MTA9c3RhdGljIGludCBfX2JwZl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01ODIyLVx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2IGxldmVsID09IFNPTF9UQ1ApXG5uZXQvY29yZS9maWx0ZXIuYzo1ODIzOlx0XHRlcnIgPSBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCB0cnVlKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTU4MjQtXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX0lQKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI3NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQL0lQIGFuZCBCUEYgSW50ZXJhY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdCBwbGF5IGhlcmU6IGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBPciwgcG90ZW50aWFsbHksIGp1c3QgYENPTkZJR19JTkVUYCBtaWdodCBiZSBlbm91Z2ggY29udGV4dCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgoKTm93LCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBhbmFseXNpcyBsaWVzIGluIHRoZSBmdW5jdGlvbiBjYWxscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCBtb2RpZmllcyAob3IgaXMgbW9kaWZpZWQgYnkpIHRoZSBsb2dpYy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgZG9fdGNwX3NldHNvY2tvcHRgIGFuZCBgZG9fdGNwX2dldHNvY2tvcHRgLCB3aGljaCBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGZvciBnZXR0aW5nIGFuZCBzZXR0aW5nIHNvY2tldCBvcHRpb25zIGFuZCBhcmUgbG9jYXRlZCBpbiBgbmV0L2lwdjQvdGNwLmNgLiBJdCYjMzk7cyBwb3NzaWJsZSBJJiMzOTtsbCBzZWUgc29tZSBuYW1pbmcgdmFyaWF0aW9ucyBvbiB0aGVtIGJ1dCB0aGUgZnVuY3Rpb25hbGl0eSBpcyB0aGUga2V5IGhlcmUuCgpUaGVuIHdlIGhhdmUgYHRjcF9lY25fY3JlYXRlX3JlcXVlc3RgLCBgdGNwX3N5bl9vcHRpb25zYCwgYHRjcF9zeW5hY2tfb3B0aW9uc2AsIGFuZCBgdGNwX2VzdGFibGlzaGVkX29wdGlvbnNgLCBhbGwgaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYCBvciBgbmV0L2lwdjQvdGNwX291dHB1dC5jYC4gVGhvc2UgdG91Y2ggb24gdGhlIFRDUCBFQ04sIFNZTiwgYW5kIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24gb3B0aW9ucy4KCkZpbmFsbHksIGBzb2xfdGNwX3NvY2tvcHRgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBzaW5jZSBpdCYjMzk7cyBpbnZvbHZlZCBpbiBoYW5kbGluZyBzb2NrZXQgb3B0aW9ucyBhdCB0aGUgc29ja2V0IGxldmVsLgoKVGhlIGxhc3Qgb25lIHRvIGxvb2sgYXQgaXMgYHRjcF9lY25fc2VuZF9zeW5gLCB3aGljaCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gaW4gYGluY2x1ZGUvbmV0L3RjcF9lY24uaGAuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgKnRoaXMqIGlzIGFjdHVhbGx5IHVzZWQgdG8gc2VlIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGl0LiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSBvZiB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9lY25fc2VuZF9zeW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vdXRwdXQuYz0zODk1PWludCB0Y3Bfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTIzLVx0XHRUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIHw9IFRDUEhEUl9BQ0s7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzkyNDpcdFx0dGNwX2Vjbl9zZW5kX3N5bmFjayhzaywgc2tiKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTI1LVx0fVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00MzA2PWludCB0Y3BfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzODUtXHR0Y3BfY29ubmVjdF9xdWV1ZV9za2Ioc2ssIGJ1ZmYpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzODY6XHR0Y3BfZWNuX3NlbmRfc3luKHNrLCBidWZmKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00Mzg3LVx0dGNwX3JidHJlZV9pbnNlcnQoXHUwMDI2c2stXHUwMDNldGNwX3J0eF9xdWV1ZSwgYnVmZik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjQ3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgVENQIEVDTiBTeW5jaHJvbml6YXRpb24gU2VxdWVuY2UqKgoKT2theSwgc28gYHRjcF9jb25uZWN0YCB0cmlnZ2VycyBgdGNwX2Vjbl9zZW5kX3N5bmAuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHBhdGgg4oCTIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcHJvY2VzcyBpbml0aWF0ZXMgdGhlIEVDTi1zcGVjaWZpYyBTWU4gZmxhZy4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBJdOKAmXMgbm90IGp1c3QgYWJvdXQgKndoYXQqIGhhcHBlbnMsIGJ1dCAqd2h5Ki4gU28sIEkgd2FudCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIHdobyBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdGAsIHdoaWNoLCBJJiMzOTttIGd1ZXNzaW5nLCBzZXRzIHVwIHRoZSBwcmVjb25kaXRpb25zIGZvciBgdGNwX2Vjbl9zZW5kX3N5bmAgdG8gd29yaywgb3IgcG9zc2libHkgZXZlbiB0aGUgZmxhZ3MgdGhlbXNlbHZlcy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGdyYXBoIGhlcmUgd2lsbCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBFQ04gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBUQ1Agc3RhY2ssIHBhcnRpY3VsYXJseSBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBjb25uZWN0aW9uIHNldHVwLiBUaGlzIHdpbGwgaGVscCBtZSBzZWUgaWYgdGhlIEVDTiBjb2RlIGlzIGludGVncmF0ZWQgY2xlYW5seSBvciBpZiB0aGVyZSBhcmUgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIExldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2Vjbl9jcmVhdGVfcmVxdWVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9NzQyMz1zdGF0aWMgaW5saW5lIHZvaWQgcHJfZHJvcF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBfX3UxNiBwb3J0LCBpbnQgZmFtaWx5KVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc0NTMtICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDU0OnN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQ1NS1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzYxOT1pbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzM2LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzczNzpcdHRjcF9lY25fY3JlYXRlX3JlcXVlc3QocmVxLCBza2IsIHNrLCBkc3QpO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNzczOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIGludG8gVENQIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhlIFRDUCBjb25uZWN0aW9uIHByb2Nlc3MsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgdGNwX2Nvbm5fcmVxdWVzdGAgdHJpZ2dlcnMgYHRjcF9lY25fY3JlYXRlX3JlcXVlc3RgLiBJIG5lZWQgdG8gcmVtZW1iZXIgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZSB3aXRoIEVDTiDigJMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggcmV2aWV3aW5nLiBUaGUgY29ubmVjdGlvbiByZXF1ZXN0IGlzIHRoZSBzdGFydGluZyBwb2ludCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW50ZXJhY3Rpb24uCgpUaGVuLCBteSBtaW5kIHdhbmRlcnMgdG93YXJkcyB0aGUgU1lOIGV4Y2hhbmdlLCBhbmQgSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IG9wdGlvbnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkaWZmZXJlbnQgVENQIG9wdGlvbnMgYXJlIG5lZ290aWF0ZWQgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgdGNwX3N5bl9vcHRpb25zYCwgYHRjcF9zeW5hY2tfb3B0aW9uc2AsIGFuZCBgdGNwX2VzdGFibGlzaGVkX29wdGlvbnNgIGFyZSBjYWxsZWQuIFRoaXMgd291bGQgcHJvdmlkZSBtZSBpbnNpZ2h0IGludG8gaG93IHRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgZW50aXJlIGNvbm5lY3Rpb24mIzM5O3MgbGlmZWN5Y2xlLiBVbmRlcnN0YW5kaW5nIHRoZSAmIzM0O3dobyYjMzQ7IGFuZCAmIzM0O3doeSYjMzQ7IG9mIHRob3NlIGNhbGxzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgVENQIHN0YWNrJiMzOTtzIGxvZ2ljLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCB0cmFjZSB0aG9zZSBjYWxscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwXyhzeW58c3luYWNrfGVzdGFibGlzaGVkKV9vcHRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYz0xMzg0PXN0YXRpYyBpbnQgdGNwX2FvX3BhcnNlX2NyeXB0byhjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqY21kLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTEzOTMtXHQgKlx0XHRcdFx0XHQtIHdzY2FsZSksXG5uZXQvaXB2NC90Y3BfYW8uYzoxMzk0Olx0ICogc2VlIHRjcF9zeW5fb3B0aW9ucygpLCB0Y3Bfc3luYWNrX29wdGlvbnMoKSwgY29tbWl0IDMzYWQ3OThjOTI0Yi5cbm5ldC9pcHY0L3RjcF9hby5jLTEzOTUtXHQgKlxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTEzOTktXHQgKlx0XHRcdC0gMiAqIFRDUE9MRU5fU0FDS19QRVJCTE9DSykgPSA4IChtYWNsZW4gPSA0KSxcbm5ldC9pcHY0L3RjcF9hby5jOjE0MDA6XHQgKiBzZWUgdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoKS5cbm5ldC9pcHY0L3RjcF9hby5jLTE0MDEtXHQgKlxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz04NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc2V0X29wdGlvbl9jb25kKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODcyLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg3MzpcdFx0aWYgKG1wdGNwX3N5bmFja19vcHRpb25zKHJlcSwgXHUwMDI2c2l6ZSwgXHUwMDI2b3B0cy1cdTAwM2VtcHRjcCkpIHtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NzQtXHRcdFx0aWYgKCpyZW1haW5pbmcgXHUwMDNlPSBzaXplKSB7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4MS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4ODI6c3RhdGljIHUzMiB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcoc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04ODMte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz05MDM9c3RhdGljIGludCB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsIGludCByZXF1aXJlZCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTEyLVx0aWYgKG9wdHMtXHUwMDNldXNlX3N5bmFja19lY25fYnl0ZXMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTEzOlx0XHRtYXhfY29tYmluZV9zYXZpbmcgPSB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcob3B0cyk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTE0LVx0ZWxzZVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NTgtICovXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTU5OnN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NjAtXHRcdFx0XHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDMxLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwMzI6XHRcdGlmIChtcHRjcF9zeW5fb3B0aW9ucyhzaywgc2tiLCBcdTAwMjZzaXplLCBcdTAwMjZvcHRzLVx1MDAzZW1wdGNwKSkge1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwMzMtXHRcdFx0aWYgKHJlbWFpbmluZyBcdTAwM2U9IHNpemUpIHtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2MC0vKiBTZXQgdXAgVENQIG9wdGlvbnMgZm9yIFNZTi1BQ0tzLiAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwNjE6c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwNjItXHRcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTUwLSAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjExNTE6c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE1Mi1cdFx0XHRcdFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5MS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTkyOlx0XHRvcHRfc2l6ZSA9IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgcmVtYWluaW5nLCBoYXNfdHMsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5My1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNm9wdHMtXHUwMDNlbXB0Y3ApO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xNTM2PXN0YXRpYyBpbnQgX190Y3BfdHJhbnNtaXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU3OS1cdGlmICh1bmxpa2VseSh0Y2ItXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfU1lOKSkge1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1ODA6XHRcdHRjcF9vcHRpb25zX3NpemUgPSB0Y3Bfc3luX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgxLVx0fSBlbHNlIHtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNTgyOlx0XHR0Y3Bfb3B0aW9uc19zaXplID0gdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgzLVx0XHQvKiBGb3JjZSBhIFBTSCBmbGFnIG9uIGFsbCAoR1NPKSBwYWNrZXRzIHRvIGV4cGVkaXRlIEdSTyBmbHVzaFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMTAzPXVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMTE5LVx0dGNwX2dldF9jdXJyZW50X2tleShzaywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMTIwOlx0aGVhZGVyX2xlbiA9IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHNrLCBOVUxMLCBcdTAwMjZvcHRzLCBcdTAwMjZrZXkpICYjNDM7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjEyMS1cdFx0ICAgICBzaXplb2Yoc3RydWN0IHRjcGhkcik7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM5Mzk9c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDAzNi1cdFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgPSBUQ1BIRFJfU1lOIHwgVENQSERSX0FDSztcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MDM3Olx0dGNwX2hlYWRlcl9zaXplID0gdGNwX3N5bmFja19vcHRpb25zKHNrLCByZXEsIG1zcywgc2tiLCBcdTAwMjZvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQwMzgtXHRcdFx0XHRcdCAgICAgXHUwMDI2a2V5LCBmb2MsIHN5bmFja190eXBlLCBzeW5fc2tiKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9NDIyPXZvaWQgbXB0Y3BfZ2V0X29wdGlvbnMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2My1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NDY0OmJvb2wgbXB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21wdGNwL29wdGlvbnMuYy00NjUtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgKnNpemUsIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2OS1cdC8qIHdlIHdpbGwgdXNlIHNuZF9pc24gdG8gZGV0ZWN0IGZpcnN0IHBrdCBbcmVddHJhbnNtaXNzaW9uXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjQ3MDpcdCAqIGluIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoKVxubmV0L21wdGNwL29wdGlvbnMuYy00NzEtXHQgKi9cbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTUwMz1zdGF0aWMgdm9pZCBjbGVhcl8zcmRhY2tfcmV0cmFuc21pc3Npb24oc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNTExLVxubmV0L21wdGNwL29wdGlvbnMuYzo1MTI6c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTUxMy1cdFx0XHRcdFx0IGJvb2wgc25kX2RhdGFfZmluX2VuYWJsZSwgaW50ICpzaXplLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNTI1LVx0ICogdGVsbCB0aGUgY2FsbGVyIHRvIGRlZmVyIHRoZSBlc3RpbWF0ZSB0b1xubmV0L21wdGNwL29wdGlvbnMuYzo1MjY6XHQgKiBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcygpLCB3aGljaCB3aWxsIHJlc2VydmUgZW5vdWdoIHNwYWNlLlxubmV0L21wdGNwL29wdGlvbnMuYy01MjctXHQgKi9cbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTU5Nj1zdGF0aWMgdm9pZCBtcHRjcF93cml0ZV9kYXRhX2ZpbihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNjIzLVxubmV0L21wdGNwL29wdGlvbnMuYzo2MjQ6c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21wdGNwL29wdGlvbnMuYy02MjUtXHRcdFx0XHRcdCAgYm9vbCBzbmRfZGF0YV9maW5fZW5hYmxlLCBpbnQgKnNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz02OTI9c3RhdGljIHU2NCBhZGRfYWRkcl9nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5Mixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTcxOC1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NzE5OnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfYWRkX2FkZHIoc3RydWN0IHNvY2sgKnNrLFxubmV0L21wdGNwL29wdGlvbnMuYy03MjAtXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy03NTktXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjc2MDpzdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX3JtX2FkZHIoc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemUsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTc2MS1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZyxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTc4MS1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NzgyOnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXBfcHJpbyhzdHJ1Y3Qgc29jayAqc2ssIGludCAqc2l6ZSxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNzgzLVx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtODA2LVxubmV0L21wdGNwL29wdGlvbnMuYzo4MDc6c3RhdGljIG5vaW5saW5lIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19yc3Qoc3RydWN0IHNvY2sgKnNrLFxubmV0L21wdGNwL29wdGlvbnMuYy04MDgtXHRcdFx0XHRcdFx0ICAgaW50ICpzaXplLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtODI1LVxubmV0L21wdGNwL29wdGlvbnMuYzo4MjY6c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemUsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTgyNy1cdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgcmVtYWluaW5nLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtODQ3LVxubmV0L21wdGNwL29wdGlvbnMuYzo4NDg6c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcF9mYWlsKHN0cnVjdCBzb2NrICpzaywgaW50ICpzaXplLFxubmV0L21wdGNwL29wdGlvbnMuYy04NDktXHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCByZW1haW5pbmcsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy04NjktXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjg3MDppbnQgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg3MS1cdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLCBib29sIGhhc190cyxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg4OS1cdGlmICh1bmxpa2VseShza2IgXHUwMDI2XHUwMDI2IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgXHUwMDI2IFRDUEhEUl9SU1QpKSB7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjg5MDpcdFx0aWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZmFzdGNsb3NlKHNrLCBcdTAwMjZvcHRfc2l6ZSwgcmVtYWluaW5nLCBvcHRzKSB8fFxubmV0L21wdGNwL29wdGlvbnMuYzo4OTE6XHRcdCAgICBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wX2ZhaWwoc2ssIFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsIG9wdHMpKSB7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg5Mi1cdFx0XHR0b3RhbF9zaXplICYjNDM7PSBvcHRfc2l6ZTtcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg5NS1cdFx0LyogTVBfUlNUIGNhbiBiZSB1c2VkIHdpdGggTVBfRkFTVENMT1NFIGFuZCBNUF9GQUlMIGlmIHRoZXJlIGlzIHJvb20gKi9cbm5ldC9tcHRjcC9vcHRpb25zLmM6ODk2Olx0XHRpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19yc3Qoc2ssIFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsIG9wdHMpKSB7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg5Ny1cdFx0XHR0b3RhbF9zaXplICYjNDM7PSBvcHRfc2l6ZTtcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkwMy1cdHNuZF9kYXRhX2ZpbiA9IG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKTtcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTA0Olx0aWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc2ssIHNrYiwgc25kX2RhdGFfZmluLCBcdTAwMjZvcHRfc2l6ZSwgb3B0cykpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkwNS1cdFx0cmV0ID0gdHJ1ZTtcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTA2Olx0ZWxzZSBpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3Moc2ssIHNrYiwgc25kX2RhdGFfZmluLCBcdTAwMjZvcHRfc2l6ZSwgb3B0cykpIHtcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTA3LVx0XHRpbnQgbXBfZmFpbF9zaXplO1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtOTA5LVx0XHRyZXQgPSB0cnVlO1xubmV0L21wdGNwL29wdGlvbnMuYzo5MTA6XHRcdGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wX2ZhaWwoc2ssIFx1MDAyNm1wX2ZhaWxfc2l6ZSxcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTExLVx0XHRcdFx0XHRcdCAgICAgIHJlbWFpbmluZyAtIG9wdF9zaXplLCBvcHRzKSkge1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtOTI1LVx0cmVtYWluaW5nIC09IG9wdF9zaXplO1xubmV0L21wdGNwL29wdGlvbnMuYzo5MjY6XHRpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19hZGRfYWRkcihzaywgc2tiLCBcdTAwMjZvcHRfc2l6ZSwgcmVtYWluaW5nLFxubmV0L21wdGNwL29wdGlvbnMuYy05MjctXHRcdFx0XHRcdCAgICAgICBoYXNfdHMsIG9wdHMpKSB7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy05MzAtXHRcdHJldCA9IHRydWU7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjkzMTpcdH0gZWxzZSBpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19ybV9hZGRyKHNrLCBcdTAwMjZvcHRfc2l6ZSwgcmVtYWluaW5nLCBvcHRzKSkge1xubmV0L21wdGNwL29wdGlvbnMuYy05MzItXHRcdHRvdGFsX3NpemUgJiM0Mzs9IG9wdF9zaXplO1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtOTM2LVxubmV0L21wdGNwL29wdGlvbnMuYzo5Mzc6XHRpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcF9wcmlvKHNrLCBcdTAwMjZvcHRfc2l6ZSwgcmVtYWluaW5nLCBvcHRzKSkge1xubmV0L21wdGNwL29wdGlvbnMuYy05MzgtXHRcdHRvdGFsX3NpemUgJiM0Mzs9IG9wdF9zaXplO1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtOTQ1LVxubmV0L21wdGNwL29wdGlvbnMuYzo5NDY6Ym9vbCBtcHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIHVuc2lnbmVkIGludCAqc2l6ZSxcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTQ3LVx0XHRcdCAgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTQ3MD12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQ5NS1cdCAqXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE0OTY6XHQgKiBUaGUgc2FtZSBhcHBsaWVzIGluIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoKSBmdW5jdGlvbi5cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQ5Ny1cdCAqL1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTUzMi1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTUzMzpcdFx0XHQvKiBEU1Mgb3B0aW9uIGlzIHNldCBvbmx5IGJ5IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE1MzQtXHRcdFx0ICogdGhlIGNhbGxlciBpcyBfX3RjcF90cmFuc21pdF9za2IoKSBhbmQgc3NrIGlzIGFsd2F5c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc1NAoJCQkJCQkJb3V0cHV0OiA1NwoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBUQ1AgU29ja2V0IE9wdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVENQIHNvY2tldCBvcHRpb25zIGFyZSBiZWluZyBzZXQgYW5kIHJldHJpZXZlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgZG9fdGNwX3NldHNvY2tvcHRgIGFuZCBgZG9fdGNwX2dldHNvY2tvcHRgLiBJIHJlbWVtYmVyIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBrZXkgaW4gdGhlIGBuZXQvaXB2NC90Y3AuY2AgZmlsZSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBzdGFydC4gRmlyc3QsIGEgcXVpY2sgY2hlY2sgb24gYGRvX3RjcF9zZXRzb2Nrb3B0YOKApiBBaCwgaXQmIzM5O3Mgc3RhdGljLiBUaGF0IG1lYW5zIGl0JiMzOTtzIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBmaWxlLiBOb3csIHRvIHRyYWNlIGl0cyB1c2FnZSwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgdGNwX3NldHNvY2tvcHRgIGNhbGxzIHRoaXMuIE5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGB0Y3Bfc2V0c29ja29wdGAgaXMgc3RhdGljIG9yIGV4cG9ydGVkLiBUaGF0IHdpbGwgdGVsbCBtZSBob3cgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcy4gSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyh0Y3Bfc2V0c29ja29wdHxkb190Y3Bfc2V0c29ja29wdHx0Y3BfZ2V0c29ja29wdHxkb190Y3BfZ2V0c29ja29wdCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0zODIzPWludCB0Y3Bfc29ja19zZXRfbWF4c2VnKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbi0tXG5uZXQvaXB2NC90Y3AuYy0zODM4LSAqL1xubmV0L2lwdjQvdGNwLmM6MzgzOTppbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L2lwdjQvdGNwLmMtMzg0MC1cdFx0ICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3AuYy00MTg1LVxubmV0L2lwdjQvdGNwLmM6NDE4NjppbnQgdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L2lwdjQvdGNwLmMtNDE4Ny1cdFx0ICAgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3AuYy00MTk0LVx0XHRcdFx0XHRcdFx0XHRvcHR2YWwsIG9wdGxlbik7XG5uZXQvaXB2NC90Y3AuYzo0MTk1Olx0cmV0dXJuIGRvX3RjcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvdGNwLmMtNDE5Ni19XG4tLVxubmV0L2lwdjQvdGNwLmM9NDQyMz1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dldF90aW1lc3RhbXBpbmdfb3B0X3N0YXRzKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3AuYy00NDk0LVxubmV0L2lwdjQvdGNwLmM6NDQ5NTppbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG5uZXQvaXB2NC90Y3AuYy00NDk2LVx0XHQgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3AuYz00ODc2PWJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxubmV0L2lwdjQvdGNwLmMtNDg3Ny17XG5uZXQvaXB2NC90Y3AuYzo0ODc4Olx0LyogVENQIGRvX3RjcF9nZXRzb2Nrb3B0IGhhcyBvcHRpbWl6ZWQgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvblxubmV0L2lwdjQvdGNwLmMtNDg3OS1cdCAqIHRvIGF2b2lkIGV4dHJhIHNvY2tldCBsb2NrIGZvciBUQ1BfWkVST0NPUFlfUkVDRUlWRS5cbi0tXG5uZXQvaXB2NC90Y3AuYy00ODg2LVxubmV0L2lwdjQvdGNwLmM6NDg4NzppbnQgdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxubmV0L2lwdjQvdGNwLmMtNDg4OC1cdFx0ICAgaW50IF9fdXNlciAqb3B0bGVuKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ4OTUtXHRcdFx0XHRcdFx0XHRcdG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY0L3RjcC5jOjQ4OTY6XHRyZXR1cm4gZG9fdGNwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBVU0VSX1NPQ0tQVFIob3B0dmFsKSxcbm5ldC9pcHY0L3RjcC5jLTQ4OTctXHRcdFx0XHQgVVNFUl9TT0NLUFRSKG9wdGxlbikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc3MgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIFNvY2tldCBPcHRpb25zIGluIHRoZSBMaW51eCBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBzb21lIFRDUCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9ucyBgZG9fdGNwX3NldHNvY2tvcHRgIGFuZCBgZG9fdGNwX2dldHNvY2tvcHRgLiBUaGV5JiMzOTtyZSBib3RoIGRlZmluZWQgaW4gYG5ldC9pcHY0L3RjcC5jYCwgYW5kIGltcG9ydGFudGx5LCB0aGV5JiMzOTtyZSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgbWVhbmluZyB0aGV5JiMzOTtyZSBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KCk5leHQsIEkgd2FudGVkIHRvIHVuZGVyc3RhbmQgaG93IGEgVENQIHNvY2tldCBpcyBpbml0aWFsaXplZCwgc28gSSBjaGVja2VkIGB0Y3BfaW5pdF9zb2NrYCBpbiB0aGUgc2FtZSBmaWxlLiBJdCYjMzk7cyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGlzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHdvdWxkIGxpa2VseSBiZSBjYWxsZWQgZnJvbSBhIHJhbmdlIG9mIHBsYWNlcy4KCk5vdywgSSBzd2l0Y2hlZCBnZWFycyBzbGlnaHRseSBhbmQgZXhhbWluZWQgYSBmdW5jdGlvbiByZWxhdGVkIHRvIEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uIChFQ04pOiBgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdGAgd2l0aGluIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEFoLCB0aGlzIG9uZSYjMzk7cyAqc3RhdGljKi4gT2theSwgc28gaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgYHRjcF9pbnB1dC5jYCBmaWxlLiBJdHMgbm9uLXN0YXRpYyBjYWxsZXIgaXMgYHRjcF9jb25uX3JlcXVlc3RgLCBzbyBJIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvZGUuCgpGaW5hbGx5LCBJJiMzOTttIHNoaWZ0aW5nIG15IHBlcnNwZWN0aXZlIHRvIHRoZSBvdXRwdXQgc2lkZSBvZiBUQ1AsIGluIGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgLCB0byBpbnZlc3RpZ2F0ZSBob3cgU1lOLCBTWU4tQUNLLCBhbmQgZXN0YWJsaXNoZWQgVENQIG9wdGlvbnMgYXJlIGhhbmRsZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGF0dHJpYnV0ZXMgb2YgYHRjcF9zeW5fb3B0aW9uc2AsIGB0Y3Bfc3luYWNrX29wdGlvbnNgLCBhbmQgYHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYC4gQXJlIHRoZXNlIHN0YXRpYyBvciBub24tc3RhdGljPyBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIHNjb3BlIGFuZCBob3cgdGhleSBhcmUgdXNlZCB3aXRoaW4gdGhlIFRDUCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KHRjcF9zeW5fb3B0aW9uc3x0Y3Bfc3luYWNrX29wdGlvbnN8dGNwX2VzdGFibGlzaGVkX29wdGlvbnMpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vdXRwdXQuYz04NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc2V0X29wdGlvbl9jb25kKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODcyLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg3MzpcdFx0aWYgKG1wdGNwX3N5bmFja19vcHRpb25zKHJlcSwgXHUwMDI2c2l6ZSwgXHUwMDI2b3B0cy1cdTAwM2VtcHRjcCkpIHtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NzQtXHRcdFx0aWYgKCpyZW1haW5pbmcgXHUwMDNlPSBzaXplKSB7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4MS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4ODI6c3RhdGljIHUzMiB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcoc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04ODMte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz05MDM9c3RhdGljIGludCB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsIGludCByZXF1aXJlZCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTEyLVx0aWYgKG9wdHMtXHUwMDNldXNlX3N5bmFja19lY25fYnl0ZXMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTEzOlx0XHRtYXhfY29tYmluZV9zYXZpbmcgPSB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcob3B0cyk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTE0LVx0ZWxzZVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NTgtICovXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTU5OnN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NjAtXHRcdFx0XHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDMxLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwMzI6XHRcdGlmIChtcHRjcF9zeW5fb3B0aW9ucyhzaywgc2tiLCBcdTAwMjZzaXplLCBcdTAwMjZvcHRzLVx1MDAzZW1wdGNwKSkge1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwMzMtXHRcdFx0aWYgKHJlbWFpbmluZyBcdTAwM2U9IHNpemUpIHtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2MC0vKiBTZXQgdXAgVENQIG9wdGlvbnMgZm9yIFNZTi1BQ0tzLiAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwNjE6c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwNjItXHRcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTUwLSAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjExNTE6c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE1Mi1cdFx0XHRcdFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5MS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTkyOlx0XHRvcHRfc2l6ZSA9IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgcmVtYWluaW5nLCBoYXNfdHMsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5My1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNm9wdHMtXHUwMDNlbXB0Y3ApO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xNTM2PXN0YXRpYyBpbnQgX190Y3BfdHJhbnNtaXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU3OS1cdGlmICh1bmxpa2VseSh0Y2ItXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfU1lOKSkge1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1ODA6XHRcdHRjcF9vcHRpb25zX3NpemUgPSB0Y3Bfc3luX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgxLVx0fSBlbHNlIHtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNTgyOlx0XHR0Y3Bfb3B0aW9uc19zaXplID0gdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgzLVx0XHQvKiBGb3JjZSBhIFBTSCBmbGFnIG9uIGFsbCAoR1NPKSBwYWNrZXRzIHRvIGV4cGVkaXRlIEdSTyBmbHVzaFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMTAzPXVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMTE5LVx0dGNwX2dldF9jdXJyZW50X2tleShzaywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMTIwOlx0aGVhZGVyX2xlbiA9IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHNrLCBOVUxMLCBcdTAwMjZvcHRzLCBcdTAwMjZrZXkpICYjNDM7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjEyMS1cdFx0ICAgICBzaXplb2Yoc3RydWN0IHRjcGhkcik7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM5Mzk9c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDAzNi1cdFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgPSBUQ1BIRFJfU1lOIHwgVENQSERSX0FDSztcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MDM3Olx0dGNwX2hlYWRlcl9zaXplID0gdGNwX3N5bmFja19vcHRpb25zKHNrLCByZXEsIG1zcywgc2tiLCBcdTAwMjZvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQwMzgtXHRcdFx0XHRcdCAgICAgXHUwMDI2a2V5LCBmb2MsIHN5bmFja190eXBlLCBzeW5fc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYzMgoJCQkJCQkJb3V0cHV0OiAxNzEKCQkJCQkJCXRob3VnaHRzOiA0NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgRUNOIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIGNsZWFyIHRyYWNlIG9mIHRoZSBuZXcgRUNOIGxvZ2ljIHdlYXZpbmcgaXRzIHdheSB0aHJvdWdoIHRoZSBUQ1Agc3RhY2suIGB0Y3BfbWFrZV9zeW5hY2tgIGNhbGxzIGB0Y3Bfc3luYWNrX29wdGlvbnNgLCBhbmQgYHRjcF9jdXJyZW50X21zc2AgY2FsbHMgYHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYC4gV2UmIzM5O3ZlIGdvdCBgX190Y3BfdHJhbnNtaXRfc2tiYCBwdWxsaW5nIGluIGJvdGggYHRjcF9zeW5fb3B0aW9uc2AgYW5kIGB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AuIEZ1cnRoZXJtb3JlLCBgdGNwX2Nvbm5fcmVxdWVzdGAgbm93IHV0aWxpemVzIGB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gd2UgaGF2ZSB0aGUgYGRvX3RjcF9zZXRzb2Nrb3B0YCBhbmQgYGRvX3RjcF9nZXRzb2Nrb3B0YCBmdW5jdGlvbnMgZGlyZWN0bHkgaGFuZGxpbmcgc29ja2V0IG9wdGlvbiBpbnRlcmFjdGlvbnMuIEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGB0Y3BfaW5pdF9zb2NrYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgaW50cm9kdWNlZCByZWxhdGVkIHRvIEVDTi4gSSYjMzk7bGwgZmxhZyBgdGNwX3NldHNvY2tvcHRgLCBgdGNwX2dldHNvY2tvcHRgLCBgZG9fdGNwX3NldHNvY2tvcHRgLCBgZG9fdGNwX2dldHNvY2tvcHRgLCBgdGNwX21ha2Vfc3luYWNrYCwgYW5kIGB0Y3BfY29ubl9yZXF1ZXN0YCBhcyBGb2N1c1N5bWJvbHMuIEFyZSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zICp1YmlxdWl0b3VzKiB3aXRoaW4gdGhlIGNvZGU/IFNwZWNpZmljYWxseSwgYGRvX3RjcF9zZXRzb2Nrb3B0YCwgYGRvX3RjcF9nZXRzb2Nrb3B0YCwgYHRjcF9tYWtlX3N5bmFja2AsIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdGAgYXJlIGRlZmluaXRlbHkgbW9yZSBzcGVjaWZpYyB0byB0aGUgRUNOIGltcGxlbWVudGF0aW9uIGxvZ2ljIHRoYW4gc29tZSBvZiB0aGUgb3RoZXIgZ2VuZXJpYyBmdW5jdGlvbnMuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBJTkVUYCBpcyB0aGUgZm91bmRhdGlvbmFsIHJlcXVpcmVtZW50LiBXZSBhcmUgYWxzbyBnb2luZyB0byBuZWVkIGBCUEZfU1lTQ0FMTGAgZm9yIEJQRiBzb2Nrb3B0IGhlbHBlciBzdXBwb3J0LgoKQWxyaWdodCwgbGV0JiMzOTtzIGRvIGEgc2FuaXR5IGNoZWNrIG9uIGV2ZXJ5dGhpbmc6IFRoaXMgaXMgYSB3b3J0aHdoaWxlIHBhdGNoIHRvIGZ1enouIEl0IGFkZHMgYFRDUF9FQ05gIGFuZCBgVENQX0VDTl9PUFRJT05gIHNvY2tldCBvcHRpb25zLiBUaGF0JiMzOTtzIGdvb2QuIFdlIGFyZSBlZmZlY3RpdmVseSBpbnRyb2R1Y2luZyBwZXItc29ja2V0IG92ZXJyaWRlcyBvZiBgdGNwX2VjbmAgYW5kIGB0Y3BfZWNuX29wdGlvbmAsIHdoaWNoIHNob3VsZCBhbGxvdyBmb3IgZ3JhbnVsYXIgY29udHJvbCBvdmVyIEVDTiBhbmQgQWNjRUNOIGJlaGF2aW9yLiBUaGUgcGF0Y2ggdG91Y2hlcyBzb2NrZXQgaW5pdGlhbGl6YXRpb24sIHNldHNvY2tvcHQvZ2V0c29ja29wdCBoYW5kbGVycywgQlBGIHNvY2tvcHQgZmlsdGVycywgU1lOL1NZTi1BQ0sgb3B0aW9uIGJ1aWxkaW5nLCBhbmQgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nLiBBbGwga2V5IHBhcnRzLgoKVGhlIEZvY3VzU3ltYm9scyBhcmU6IGBkb190Y3Bfc2V0c29ja29wdGAsIGBkb190Y3BfZ2V0c29ja29wdGAsIGB0Y3BfY29ubl9yZXF1ZXN0YCwgYHRjcF9tYWtlX3N5bmFja2AsIGFuZCBgdGNwX2Nvbm5lY3RgLgoKVGhlIEVuYWJsZWRDb25maWdzIGFyZSBgSU5FVGAgYW5kIGBCUEZfU1lTQ0FMTGAuCgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fdGNwX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7ZG9fdGNwX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGNwX2Nvbm5fcmVxdWVzdCYjMzQ7LAogICAgJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0OywKICAgICYjMzQ7dGNwX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTiBzb2NrZXQgb3B0aW9ucyB0byBhbGxvdyBwZXItc29ja2V0IGNvbmZpZ3VyYXRpb24gYW5kIG92ZXJyaWRlIG9mIHRoZSB0Y3BfZWNuIGFuZCB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgc2V0dGluZ3MuIEl0IG1vZGlmaWVzIFRDUCBzb2NrZXQgb3B0aW9ucyBoYW5kbGluZyAoZ2V0c29ja29wdC9zZXRzb2Nrb3B0KSwgQlBGIHNvY2tvcHQgZmlsdGVycywgVENQIFNZTi9TWU4tQUNLIG9wdGlvbiBnZW5lcmF0aW9uLCBhbmQgVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBwcm9jZXNzaW5nIGluIHRoZSBjb3JlIElQdjQvVENQIG5ldHdvcmtpbmcgc3RhY2suJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb190Y3Bfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb190Y3BfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubl9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3RjcF9tYWtlX3N5bmFjayYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFRDUF9FQ04gYW5kIFRDUF9FQ05fT1BUSU9OIHNvY2tldCBvcHRpb25zIHRvIGFsbG93IHBlci1zb2NrZXQgY29uZmlndXJhdGlvbiBhbmQgb3ZlcnJpZGUgb2YgdGhlIHRjcF9lY24gYW5kIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBzZXR0aW5ncy4gSXQgbW9kaWZpZXMgVENQIHNvY2tldCBvcHRpb25zIGhhbmRsaW5nIChnZXRzb2Nrb3B0L3NldHNvY2tvcHQpLCBCUEYgc29ja29wdCBmaWx0ZXJzLCBUQ1AgU1lOL1NZTi1BQ0sgb3B0aW9uIGdlbmVyYXRpb24sIGFuZCBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IHByb2Nlc3NpbmcgaW4gdGhlIGNvcmUgSVB2NC9UQ1AgbmV0d29ya2luZyBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGVyLXNvY2tldCBFQ04gYW5kIEFjY0VDTiBjb25maWd1cmF0aW9uIG9wdGlvbnMgKFRDUF9FQ04gYW5kIFRDUF9FQ05fT1BUSU9OKSB2aWEgc2V0c29ja29wdC9nZXRzb2Nrb3B0IGFuZCBCUEYgc29ja29wcywgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIHN5c2N0bHMuXG5cbktNU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XG4tIFRoZSBuZXcgZmllbGRzIGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYCBpbiBgc3RydWN0IHRjcF9zb2NrYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVENQX0VDTl9NT0RFX1VOU1BFQ2AgYW5kIGBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUNgIGluIGB0Y3BfaW5pdF9zb2NrKClgIGFuZCBjb3BpZWQgYWNyb3NzIHNvY2tldCBjbG9uZXMuXG4tIEluIGBkb190Y3BfZ2V0c29ja29wdCgpYCwgcmVhZGluZyB0aGVzZSBmaWVsZHMgaW5pdGlhbGl6ZXMgdGhlIGZ1bGwgYGludCB2YWxgIGJlZm9yZSBgY29weV90b19zb2NrcHRyKClgIGNvcGllcyB0aGUgZGF0YSB0byB1c2VyIHNwYWNlLiBObyBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHN0YWNrIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgYnVmZmVyIGxlbmd0aCBtYW5pcHVsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBpbnRyb2R1Y2VkLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZCBhcyB0aGUgY2hhbmdlcyBwcmVzZW50IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjMwNGQwNGM2MzdiY2I0YTBlNDI0ZWU0Zjc1NGQ4MzRhMzk5MjAxNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDA5OjA2OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAppbmRleCAyMDhmNDY5NjdlZTU5Li4yZTU1ZDllMmViMDlhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdApAQCAtNTI4LDYgJiM0Mzs1MjgsNDMgQEAgdGNwX2Vjbl9mYWxsYmFjayAtIEJPT0xFQU4KIAogCURlZmF1bHQ6IDEgKGVuYWJsZWQpCiAKJiM0Mzt0Y3BfZWNuIChzb2NrZXQgb3B0aW9uKSAtIFRDUF9FQ04KJiM0MzsJUGVyLXNvY2tldCBjb250cm9sIG9mIEVDTiBtb2RlLCBhbGxvd2luZyBwZXItY29ubmVjdGlvbiBvdmVycmlkZSBvZiB0aGUKJiM0MzsJdGNwX2VjbiBzeXNjdGwgc2V0dGluZy4gVGhpcyBlbmFibGVzIEw0UyAoTG93IExhdGVuY3ksIExvdyBMb3NzLCBTY2FsYWJsZQomIzQzOwlUaHJvdWdocHV0KSBjb25maWd1cmF0aW9uIG9uIGEgcGVyLXNvY2tldCBiYXNpcy4KJiM0MzsKJiM0MzsJU2V0dGluZyB0aGlzIHNvY2tldCBvcHRpb24gdG8gYW55IHZhbHVlIGV4Y2VwdCAyNTUgd2lsbCBvdmVycmlkZSB0aGUKJiM0MzsJc3lzdGVtLXdpZGUgdGNwX2VjbiBzeXNjdGwgZm9yIHRoYXQgcGFydGljdWxhciBzb2NrZXQuIEEgdmFsdWUgb2YgMjU1CiYjNDM7CShUQ1BfRUNOX01PREVfVU5TUEVDKSBtZWFucyB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IHN5c2N0bCB2YWx1ZS4KJiM0MzsKJiM0MzsJUG9zc2libGUgdmFsdWVzOiAwLTUgKHNlZSB0Y3BfZWNuIHN5c2N0bCBkZXNjcmlwdGlvbiBhYm92ZSksIG9yIDI1NSB0bwomIzQzOwl1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IChzeXNjdGxfdGNwX2VjbikuCiYjNDM7CiYjNDM7CUV4YW1wbGU6OgomIzQzOwomIzQzOwkJaW50IHZhbCA9IDM7ICAvKiBBY2NFQ04gbW9kZSAqLwomIzQzOwkJc2V0c29ja29wdChmZCwgU09MX1RDUCwgVENQX0VDTiwgJmFtcDt2YWwsIHNpemVvZih2YWwpKTsKJiM0MzsKJiM0MzsJRGVmYXVsdDogMjU1ICh1bnNwZWNpZmllZCAtIHVzZXMgdGNwX2VjbiBzeXNjdGwgdmFsdWUpCiYjNDM7CiYjNDM7dGNwX2Vjbl9vcHRpb24gKHNvY2tldCBvcHRpb24pIC0gVENQX0VDTl9PUFRJT04KJiM0MzsJUGVyLXNvY2tldCBjb250cm9sIG9mIEFjY3VyYXRlIEVDTiAoQWNjRUNOKSBvcHRpb24gc2VuZGluZyBiZWhhdmlvciwKJiM0MzsJYWxsb3dpbmcgcGVyLWNvbm5lY3Rpb24gb3ZlcnJpZGUgb2YgdGhlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBzZXR0aW5nLgomIzQzOwomIzQzOwlTZXR0aW5nIHRoaXMgc29ja2V0IG9wdGlvbiB0byBhbnkgdmFsdWUgZXhjZXB0IDI1NSB3aWxsIG92ZXJyaWRlIHRoZQomIzQzOwlzeXN0ZW0td2lkZSB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgZm9yIHRoYXQgcGFydGljdWxhciBzb2NrZXQuIEEgdmFsdWUgb2YKJiM0MzsJMjU1IChUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMpIG1lYW5zIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgc3lzY3RsIHZhbHVlLgomIzQzOwomIzQzOwlQb3NzaWJsZSB2YWx1ZXM6IDAtMyAoc2VlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBkZXNjcmlwdGlvbiBhYm92ZSksIG9yIDI1NQomIzQzOwl0byB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IChzeXNjdGxfdGNwX2Vjbl9vcHRpb24pLgomIzQzOwomIzQzOwlFeGFtcGxlOjoKJiM0MzsKJiM0MzsJCWludCB2YWwgPSAyOyAgLyogU2VuZCBBY2NFQ04gb3B0aW9uIG9uIGV2ZXJ5IHBhY2tldCAqLwomIzQzOwkJc2V0c29ja29wdChmZCwgU09MX1RDUCwgVENQX0VDTl9PUFRJT04sICZhbXA7dmFsLCBzaXplb2YodmFsKSk7CiYjNDM7CiYjNDM7CURlZmF1bHQ6IDI1NSAodW5zcGVjaWZpZWQgLSB1c2VzIHRjcF9lY25fb3B0aW9uIHN5c2N0bCB2YWx1ZSkKJiM0MzsKIHRjcF9mYWNrIC0gQk9PTEVBTgogCVRoaXMgaXMgYSBsZWdhY3kgb3B0aW9uLCBpdCBoYXMgbm8gZWZmZWN0IGFueW1vcmUuCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNwLmggYi9pbmNsdWRlL2xpbnV4L3RjcC5oCmluZGV4IDZhOGM3NzcxOTMyMmYuLjdjYjFlNzY1ZjQ2MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC90Y3AuaApAQCAtMjg5LDYgJiM0MzsyODksMTMgQEAgc3RydWN0IHRjcF9zb2NrIHsKIAkJCQkJICogc2Fja2VkX291dCAmZ3Q7IDApCiAJCQkJCSAqLwogCXU4CWVjbl9mbGFnczsJLyogRUNOIHN0YXR1cyBiaXRzLgkJCSovCiYjNDM7CXU4CWVjbl9tb2RlOwkvKiBQZXItc29ja2V0IEVDTiBtb2RlIG92ZXJyaWRlCiYjNDM7CQkJCSAqIChUQ1BfRUNOX01PREVfVU5TUEVDID0gdXNlIHN5c2N0bCkKJiM0MzsJCQkJICovCiYjNDM7CXU4CWVjbl9vcHRpb247CS8qIFBlci1zb2NrZXQgQWNjRUNOIG9wdGlvbiBvdmVycmlkZQomIzQzOwkJCQkgKiAoVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDID0gdXNlIHN5c2N0bCkKJiM0MzsJCQkJICovCiYjNDM7CiAJX19jYWNoZWxpbmVfZ3JvdXBfZW5kKHRjcF9zb2NrX3dyaXRlX3R4KTsKIAogCS8qIFRYUlggcmVhZC13cml0ZSBob3RwYXRoIGNhY2hlIGxpbmVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3BfZWNuLmggYi9pbmNsdWRlL25ldC90Y3BfZWNuLmgKaW5kZXggODY1ZDVjNWE3NzE4ZC4uOTMxZTA4NzcxNzZjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwX2Vjbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaApAQCAtMjIsNiAmIzQzOzIyLDcgQEAgZW51bSB0Y3BfZWNuX21vZGUgewogCVRDUF9FQ05fSU5fQUNDRUNOX09VVF9BQ0NFQ04gPSAzLAogCVRDUF9FQ05fSU5fQUNDRUNOX09VVF9FQ04gPSA0LAogCVRDUF9FQ05fSU5fQUNDRUNOX09VVF9OT0VDTiA9IDUsCiYjNDM7CVRDUF9FQ05fTU9ERV9VTlNQRUMgPSAyNTUsCS8qIFVzZSBzeXNjdGwgZGVmYXVsdCAocGVyLXNvY2tldCkgKi8KIH07CiAKIC8qIEFjY0VDTiBvcHRpb24gc2VuZGluZyB3aGVuIEFjY0VDTiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgbmVnb3RpYXRlZCAqLwpAQCAtMzAsOCAmIzQzOzMxLDI5IEBAIGVudW0gdGNwX2FjY2Vjbl9vcHRpb24gewogCVRDUF9BQ0NFQ05fT1BUSU9OX01JTklNVU0gPSAxLAogCVRDUF9BQ0NFQ05fT1BUSU9OX0ZVTEwgPSAyLAogCVRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QgPSAzLAomIzQzOwlUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgPSAyNTUsCS8qIFVzZSBzeXNjdGwgZGVmYXVsdCAocGVyLXNvY2tldCkgKi8KIH07CiAKJiM0MzsvKiBSZXNvbHZlIHRoZSBlZmZlY3RpdmUgRUNOIG1vZGU6IHBlci1zb2NrZXQgb3ZlcnJpZGUgb3Igc3lzY3RsIGZhbGxiYWNrICovCiYjNDM7c3RhdGljIGlubGluZSB1OCB0Y3BfZWNuX21vZGVfZWZmKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXU4IG1vZGUgPSB0Y3Bfc2soc2spLSZndDtlY25fbW9kZTsKJiM0MzsKJiM0MzsJaWYgKG1vZGUgPT0gVENQX0VDTl9NT0RFX1VOU1BFQykKJiM0MzsJCXJldHVybiBSRUFEX09OQ0Uoc29ja19uZXQoc2spLSZndDtpcHY0LnN5c2N0bF90Y3BfZWNuKTsKJiM0MzsJcmV0dXJuIG1vZGU7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBBY2NFQ04gb3B0aW9uOiBwZXItc29ja2V0IG92ZXJyaWRlIG9yIHN5c2N0bCBmYWxsYmFjayAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdTggdGNwX2FjY2Vjbl9vcHRpb25fZWZmKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXU4IG9wdCA9IHRjcF9zayhzayktJmd0O2Vjbl9vcHRpb247CiYjNDM7CiYjNDM7CWlmIChvcHQgPT0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDKQomIzQzOwkJcmV0dXJuIFJFQURfT05DRShzb2NrX25ldChzayktJmd0O2lwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKTsKJiM0MzsJcmV0dXJuIG9wdDsKJiM0Mzt9CiYjNDM7CiAvKiBBcHBseSBlaXRoZXIgRUNUKDApIG9yIEVDVCgxKSBiYXNlZCBvbiBUQ1BfQ09OR19FQ1RfMV9ORUdPVElBVElPTiBmbGFnICovCiBzdGF0aWMgaW5saW5lIHZvaWQgSU5FVF9FQ05feG1pdF9lY3RfMV9uZWdvdGlhdGlvbihzdHJ1Y3Qgc29jayAqc2spCiB7CkBAIC01OTksNyAmIzQzOzYyMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfZWNuX3NlbmRfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlib29sIGJwZl9uZWVkc19lY24gPSB0Y3BfYnBmX2NhX25lZWRzX2Vjbihzayk7CiAJYm9vbCB1c2VfZWNuLCB1c2VfYWNjZWNuOwotCXU4IHRjcF9lY24gPSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLSZndDtpcHY0LnN5c2N0bF90Y3BfZWNuKTsKJiM0MzsJdTggdGNwX2VjbiA9IHRjcF9lY25fbW9kZV9lZmYoc2spOwogCiAJdXNlX2FjY2VjbiA9IHRjcF9lY24gPT0gVENQX0VDTl9JTl9BQ0NFQ05fT1VUX0FDQ0VDTiB8fAogCQkgICAgIHRjcF9jYV9uZWVkc19hY2NlY24oc2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDczMmIzNWNjMDhkMWMuLmM1OGIxNjMzYmI0NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTI5ODUsNyAmIzQzOzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKiAJCSAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosCiAgKiAJCSAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosCiAgKiAJCSAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKiwKLSAqCQkgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLgomIzQzOyAqCQkgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLAomIzQzOyAqCQkgICoqVENQX0VDTioqLCAqKlRDUF9FQ05fT1BUSU9OKiouCiAgKiAJCSogKipJUFBST1RPX0lQKiosIHdoaWNoIHN1cHBvcnRzICpvcHRuYW1lKiAqKklQX1RPUyoqLgogICogCQkqICoqSVBQUk9UT19JUFY2KiosIHdoaWNoIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgKm9wdG5hbWUqXCBzOgogICogCQkgICoqSVBWNl9UQ0xBU1MqKiwgKipJUFY2X0FVVE9GTE9XTEFCRUwqKi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaCBiL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaAppbmRleCAwMzc3MmRkNGQzOTkyLi4wMWViYjM0OGJhMjc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oCkBAIC0xNDIsNiAmIzQzOzE0Miw4IEBAIGVudW0gewogI2RlZmluZSBUQ1BfUlRPX01BWF9NUwkJNDQJLyogbWF4IHJ0byB0aW1lIGluIG1zICovCiAjZGVmaW5lIFRDUF9SVE9fTUlOX1VTCQk0NQkvKiBtaW4gcnRvIHRpbWUgaW4gdXMgKi8KICNkZWZpbmUgVENQX0RFTEFDS19NQVhfVVMJNDYJLyogbWF4IGRlbGF5ZWQgYWNrIHRpbWUgaW4gdXMgKi8KJiM0MzsjZGVmaW5lIFRDUF9FQ04JCQk0NwkvKiBQZXItc29ja2V0IEVDTiBtb2RlICgwLTUsIDI1NT11c2Ugc3lzY3RsKSAqLwomIzQzOyNkZWZpbmUgVENQX0VDTl9PUFRJT04JCTQ4CS8qIFBlci1zb2NrZXQgQWNjRUNOIG9wdGlvbiAoMC0zLCAyNTU9dXNlIHN5c2N0bCkgKi8KIAogI2RlZmluZSBUQ1BfUkVQQUlSX09OCQkxCiAjZGVmaW5lIFRDUF9SRVBBSVJfT0ZGCQkwCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLjk5M2IzMWUxMGI5NDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC01NjcwLDYgJiM0Mzs1NjcwLDggQEAgc3RhdGljIGludCBzb2xfdGNwX3NvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwKIAljYXNlIFRDUF9OT1RTRU5UX0xPV0FUOgogCWNhc2UgVENQX1NBVkVfU1lOOgogCWNhc2UgVENQX1JUT19NQVhfTVM6CiYjNDM7CWNhc2UgVENQX0VDTjoKJiM0MzsJY2FzZSBUQ1BfRUNOX09QVElPTjoKIAkJaWYgKCpvcHRsZW4gIT0gc2l6ZW9mKGludCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDFjODY3YTMwMjQ0NDYuLmZiMzc2YTk3ZjBlNmQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC00NjMsNiAmIzQzOzQ2Myw4IEBAIHZvaWQgdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCiAKIAl0cC0mZ3Q7dHNvZmZzZXQgPSAwOwogCXRwLSZndDtyYWNrLnJlb193bmRfc3RlcHMgPSAxOwomIzQzOwl0cC0mZ3Q7ZWNuX21vZGUgPSBUQ1BfRUNOX01PREVfVU5TUEVDOwomIzQzOwl0cC0mZ3Q7ZWNuX29wdGlvbiA9IFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQzsKIAogCXNrLSZndDtza193cml0ZV9zcGFjZSA9IHNrX3N0cmVhbV93cml0ZV9zcGFjZTsKIAlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1VTRV9XUklURV9RVUVVRSk7CkBAIC00MTYwLDYgJiM0Mzs0MTYyLDE4IEBAIGludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCXRjcF9lbmFibGVfdHhfZGVsYXkoc2ssIHZhbCk7CiAJCVdSSVRFX09OQ0UodHAtJmd0O3RjcF90eF9kZWxheSwgdmFsKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgVENQX0VDTjoKJiM0MzsJCWlmICh2YWwgIT0gVENQX0VDTl9NT0RFX1VOU1BFQyAmYW1wOyZhbXA7ICh2YWwgJmx0OyAwIHx8IHZhbCAmZ3Q7IFRDUF9FQ05fSU5fQUNDRUNOX09VVF9OT0VDTikpCiYjNDM7CQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlXUklURV9PTkNFKHRwLSZndDtlY25fbW9kZSwgdmFsKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFRDUF9FQ05fT1BUSU9OOgomIzQzOwkJaWYgKHZhbCAhPSBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgJmFtcDsmYW1wOyAodmFsICZsdDsgMCB8fCB2YWwgJmd0OyBUQ1BfQUNDRUNOX09QVElPTl9QRVJTSVNUKSkKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZWxzZQomIzQzOwkJCVdSSVRFX09OQ0UodHAtJmd0O2Vjbl9vcHRpb24sIHZhbCk7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PUFJPVE9PUFQ7CiAJCWJyZWFrOwpAQCAtNDg0Miw2ICYjNDM7NDg1NiwxMiBAQCBpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsCiAJY2FzZSBUQ1BfREVMQUNLX01BWF9VUzoKIAkJdmFsID0gamlmZmllc190b191c2VjcyhSRUFEX09OQ0UoaW5ldF9jc2soc2spLSZndDtpY3NrX2RlbGFja19tYXgpKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgVENQX0VDTjoKJiM0MzsJCXZhbCA9IFJFQURfT05DRSh0cC0mZ3Q7ZWNuX21vZGUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVENQX0VDTl9PUFRJT046CiYjNDM7CQl2YWwgPSBSRUFEX09OQ0UodHAtJmd0O2Vjbl9vcHRpb24pOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CkBAIC01MjU2LDYgJiM0Mzs1Mjc2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHRjcF9zdHJ1Y3RfY2hlY2sodm9pZCkKIAlDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCB0c29ydGVkX3NlbnRfcXVldWUpOwogCUNBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGhpZ2hlc3Rfc2Fjayk7CiAJQ0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX2ZsYWdzKTsKJiM0MzsJQ0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX21vZGUpOwomIzQzOwlDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fb3B0aW9uKTsKIAogCS8qIFRYUlggcmVhZC13cml0ZSBob3RwYXRoIGNhY2hlIGxpbmVzICovCiAJQ0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eHJ4LCBwcmVkX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMGY2MGExZGJmOTI3NC4uMDA0M2I0YjJiYzkyMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTc0NTcsMTMgJiM0Mzs3NDU3LDEyIEBAIHN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKIAljb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTsKLQljb25zdCBzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChsaXN0ZW5fc2spOwogCWJvb2wgdGhfZWNuID0gdGgtJmd0O2VjZSAmYW1wOyZhbXA7IHRoLSZndDtjd3I7CiAJYm9vbCBlY3QsIGVjbl9vazsKIAl1MzIgZWNuX29rX2RzdDsKIAogCWlmICh0Y3BfYWNjZWNuX3N5bl9yZXF1ZXN0ZWQodGgpICZhbXA7JmFtcDsKLQkgICAgKFJFQURfT05DRShuZXQtJmd0O2lwdjQuc3lzY3RsX3RjcF9lY24pICZndDs9IDMgfHwKJiM0MzsJICAgICh0Y3BfZWNuX21vZGVfZWZmKGxpc3Rlbl9zaykgJmd0Oz0gMyB8fAogCSAgICAgdGNwX2NhX25lZWRzX2FjY2VjbihsaXN0ZW5fc2spKSkgewogCQlpbmV0X3JzayhyZXEpLSZndDtlY25fb2sgPSAxOwogCQl0Y3BfcnNrKHJlcSktJmd0O2FjY2Vjbl9vayA9IDE7CkBAIC03NDc3LDcgJiM0Mzs3NDc2LDcgQEAgc3RhdGljIHZvaWQgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAKIAllY3QgPSAhSU5FVF9FQ05faXNfbm90X2VjdChUQ1BfU0tCX0NCKHNrYiktJmd0O2lwX2RzZmllbGQpOwogCWVjbl9va19kc3QgPSBkc3RfZmVhdHVyZShkc3QsIERTVF9GRUFUVVJFX0VDTl9NQVNLKTsKLQllY25fb2sgPSBSRUFEX09OQ0UobmV0LSZndDtpcHY0LnN5c2N0bF90Y3BfZWNuKSB8fCBlY25fb2tfZHN0OwomIzQzOwllY25fb2sgPSB0Y3BfZWNuX21vZGVfZWZmKGxpc3Rlbl9zaykgfHwgZWNuX29rX2RzdDsKIAogCWlmICgoKCFlY3QgfHwgdGgtJmd0O3JlczEgfHwgdGgtJmd0O2FlKSAmYW1wOyZhbXA7IGVjbl9vaykgfHwKIAkgICAgdGNwX2NhX25lZWRzX2VjbihsaXN0ZW5fc2spIHx8CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggMDA0MTdhNDI5MjIyNS4uODJiOTZjNDAxNWZkMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMTA0NSw3ICYjNDM7MTA0NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAodW5saWtlbHkoKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7dGNwX2ZsYWdzICZhbXA7IFRDUEhEUl9BQ0spICZhbXA7JmFtcDsKIAkJICAgICB0Y3BfZWNuX21vZGVfYWNjZWNuKHRwKSAmYW1wOyZhbXA7CiAJCSAgICAgaW5ldF9jc2soc2spLSZndDtpY3NrX3JldHJhbnNtaXRzICZsdDsgMiAmYW1wOyZhbXA7Ci0JCSAgICAgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKSAmYW1wOyZhbXA7CiAJCSAgICAgcmVtYWluaW5nICZndDs9IFRDUE9MRU5fQUNDRUNOX0JBU0UpKSB7CiAJCW9wdHMtJmd0O3VzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTsKIAkJcmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTsKQEAgLTExMzMsNyAmIzQzOzExMzMsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJc21jX3NldF9vcHRpb25fY29uZCh0Y3Bfc2soc2spLCBpcmVxLCBvcHRzLCAmYW1wO3JlbWFpbmluZyk7CiAKIAlpZiAodHJlcS0mZ3Q7YWNjZWNuX29rICZhbXA7JmFtcDsKLQkgICAgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pICZhbXA7JmFtcDsKJiM0MzsJICAgIHRjcF9hY2NlY25fb3B0aW9uX2VmZihzaykgJmFtcDsmYW1wOwogCSAgICBzeW5hY2tfdHlwZSAhPSBUQ1BfU1lOQUNLX1JFVFJBTlMgJmFtcDsmYW1wOyByZW1haW5pbmcgJmd0Oz0gVENQT0xFTl9BQ0NFQ05fQkFTRSkgewogCQlvcHRzLSZndDt1c2Vfc3luYWNrX2Vjbl9ieXRlcyA9IDE7CiAJCXJlbWFpbmluZyAtPSB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKG9wdHMsIDAsIHJlbWFpbmluZyk7CkBAIC0xMjIxLDcgJiM0MzsxMjIxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IKIAl9CiAKIAlpZiAodGNwX2Vjbl9tb2RlX2FjY2Vjbih0cCkpIHsKLQkJaW50IGVjbl9vcHQgPSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLSZndDtpcHY0LnN5c2N0bF90Y3BfZWNuX29wdGlvbik7CiYjNDM7CQlpbnQgZWNuX29wdCA9IHRjcF9hY2NlY25fb3B0aW9uX2VmZihzayk7CiAKIAkJaWYgKGVjbl9vcHQgJmFtcDsmYW1wOyB0cC0mZ3Q7c2F3X2FjY2Vjbl9vcHQgJmFtcDsmYW1wOwogCQkgICAgKGVjbl9vcHQgJmd0Oz0gVENQX0FDQ0VDTl9PUFRJT05fUEVSU0lTVCB8fApkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDczMmIzNWNjMDhkMWMuLmM1OGIxNjMzYmI0NmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTI5ODUsNyAmIzQzOzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKiAJCSAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosCiAgKiAJCSAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosCiAgKiAJCSAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKiwKLSAqCQkgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLgomIzQzOyAqCQkgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLAomIzQzOyAqCQkgICoqVENQX0VDTioqLCAqKlRDUF9FQ05fT1BUSU9OKiouCiAgKiAJCSogKipJUFBST1RPX0lQKiosIHdoaWNoIHN1cHBvcnRzICpvcHRuYW1lKiAqKklQX1RPUyoqLgogICogCQkqICoqSVBQUk9UT19JUFY2KiosIHdoaWNoIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgKm9wdG5hbWUqXCBzOgogICogCQkgICoqSVBWNl9UQ0xBU1MqKiwgKipJUFY2X0FVVE9GTE9XTEFCRUwqKi4KZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaAppbmRleCAxM2NlZWIzOTVlYjhmLi40ZjUyYjlkZjQyNjYxIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oCkBAIC0xMjgsNyAmIzQzOzEyOCw4IEBAIGVudW0gewogI2RlZmluZSBUQ1BfQ01fSU5RCQlUQ1BfSU5RCiAKICNkZWZpbmUgVENQX1RYX0RFTEFZCQkzNwkvKiBkZWxheSBvdXRnb2luZyBwYWNrZXRzIGJ5IFhYIHVzZWMgKi8KLQomIzQzOyNkZWZpbmUgVENQX0VDTgkJCTQ3CS8qIFBlci1zb2NrZXQgRUNOIG1vZGUgKDAtNSwgMjU1PXVzZSBzeXNjdGwpICovCiYjNDM7I2RlZmluZSBUQ1BfRUNOX09QVElPTgkJNDgJLyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqLwogCiAjZGVmaW5lIFRDUF9SRVBBSVJfT04JCTEKICNkZWZpbmUgVENQX1JFUEFJUl9PRkYJCTAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zZXRnZXRfc29ja29wdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmMKaW5kZXggZDk2ZTk5YjY3YWViZi4uZmI5N2ZhMGJjN2I0NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmMKQEAgLTY0LDYgJiM0Mzs2NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja29wdF90ZXN0IHNvbF90Y3BfdGVzdHNbXSA9IHsKIAl7IC5vcHQgPSBUQ1BfQlBGX0RFTEFDS19NQVgsIC5uZXcgPSAzMDAwMCwgLmV4cGVjdGVkID0gMzAwMDAsIH0sCiAJeyAub3B0ID0gVENQX0JQRl9SVE9fTUlOLCAubmV3ID0gMzAwMDAsIC5leHBlY3RlZCA9IDMwMDAwLCB9LAogCXsgLm9wdCA9IFRDUF9SVE9fTUFYX01TLCAubmV3ID0gMjAwMCwgLmV4cGVjdGVkID0gMjAwMCwgfSwKJiM0MzsJeyAub3B0ID0gVENQX0VDTiwgLm5ldyA9IDMsIC5leHBlY3RlZCA9IDMsIC5yZXN0b3JlID0gMjU1LCB9LAomIzQzOwl7IC5vcHQgPSBUQ1BfRUNOX09QVElPTiwgLm5ldyA9IDIsIC5leHBlY3RlZCA9IDIsIC5yZXN0b3JlID0gMjU1LCB9LAogCXsgLm9wdCA9IDAsIH0sCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDkwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogODIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgZG9lcy4KCkl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgdHdvIG5ldyBmaWVsZHMsIGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYCwgYm90aCBvZiB0eXBlIGB1OGAsIHRvIHRoZSBgdGNwX3NvY2tgIHN0cnVjdHVyZS4gVGhlc2UgZmllbGRzIGFyZSBpbml0aWFsaXplZCB0byBgVENQX0VDTl9NT0RFX1VOU1BFQ2AgKDI1NSkgYW5kIGBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUNgICgyNTUpIHJlc3BlY3RpdmVseSB3aXRoaW4gYHRjcF9pbml0X3NvY2tgLgoKVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBoZWxwZXIgZnVuY3Rpb25zLCBgdGNwX2Vjbl9tb2RlX2VmZihzaylgIGFuZCBgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKWAuIFRoZXNlIGZ1bmN0aW9ucyBjbGV2ZXJseSByZWFkIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyAoYHRwLSZndDtlY25fbW9kZWAgYW5kIGB0cC0mZ3Q7ZWNuX29wdGlvbmApLiBJZiB0aG9zZSBmaWVsZHMgaGF2ZW4mIzM5O3QgYmVlbiBleHBsaWNpdGx5IHNldCAoaS5lLiwgdGhleSYjMzk7cmUgc3RpbGwgYXQgdGhlIFVOU1BFQyB2YWx1ZSksIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHJldHVybiB0aGUgc3lzY3RsIHZhbHVlcyBmb3IgRUNOIG1vZGUgYW5kIEVDTiBvcHRpb24gcmVzcGVjdGl2ZWx5LiBJIHNlZSB3aGF0IHRoZXkmIzM5O3JlIGRvaW5nIGhlcmUsIG1ha2luZyB0aGUgY29uZmlndXJhdGlvbiBtb3JlIGR5bmFtaWMgYXQgcnVudGltZSwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb25lIHNhZmVseS4KCkNydWNpYWxseSwgdGhlIHBhdGNoIHRoZW4gcmVwbGFjZXMgZGlyZWN0IHJlYWRzIG9mIHRob3NlIHN5c2N0bCB2YWx1ZXMgd2l0aCBjYWxscyB0byB0aGVzZSBuZXcgaGVscGVyIGZ1bmN0aW9ucyB3aXRoaW4gc2V2ZXJhbCBUQ1AgZnVuY3Rpb25zIOKAkyBgdGNwX2Vjbl9zZW5kX3N5bmAsIGB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0YCwgZXRjLiBUaGlzIGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZyB0byBjZW50cmFsaXplIHRoZSBFQ04gbG9naWMsIGJ1dCBwb3RlbnRpYWxseSBhIHNvdXJjZSBvZiBzdWJ0bGUgYnVncy4KClRoZW4sIHRoZXJlIGFyZSB0aGUgc29ja2V0IG9wdGlvbnMgYFRDUF9FQ05gIGFuZCBgVENQX0VDTl9PUFRJT05gIGFkZGVkIHRvIGFsbG93IHVzZXJzcGFjZSBjb250cm9sIG92ZXIgdGhlc2Ugc2V0dGluZ3MgdmlhIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgLiBUaGUgc2V0c29ja29wdCB2YWxpZGF0aW9uIGNoZWNrcyBpZiB0aGUgYHZhbGAgaXMgd2l0aGluIGEgcmVhc29uYWJsZSByYW5nZSwgd2hpY2ggaXMgZ29vZC4gVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCwgd2hpY2ggaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGZvciBlbnN1cmluZyBhdG9taWNpdHkgYW5kIHZpc2liaWxpdHkgYmV0d2VlbiB0aHJlYWRzLgoKRmluYWxseSwgdGhlcmUgaXMgQlBGIHNvY2tvcHQgc3VwcG9ydCBhZGRlZCBmb3IgdGhlc2UgbmV3IG9wdGlvbnMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhpcyBwYXJ0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBjaGVja2luZyB0aGUgc2l6ZS4KCk5vdyBmb3IgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoZSBrZXkgaXMgdG8gc2VlIHdoZXJlIHRoZXNlIGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZCB0aHJvdWdob3V0IHRoZSBgdGNwX3NvY2tgIGxpZmVjeWNsZS4KCkkgbm90ZSB0aGF0IGB0Y3BfaW5pdF9zb2NrYCBkb2VzIHRoZSBpbml0aWFsaXphdGlvbi4gTm93LCBpcyB0aGUgYHRjcF9zb2NrYCBzdHJ1Y3R1cmUgemVyby1pbml0aWFsaXplZCBpbml0aWFsbHksIG9yIGFyZSB0aGVyZSBvdGhlciB3YXlzIGl0JiMzOTtzIGNyZWF0ZWQgd2hlcmUgdGhlc2UgZmllbGRzIG1pZ2h0IG5vdCBiZSBleHBsaWNpdGx5IHNldD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGB0Y3BfaW5pdF9zb2NrYCBpcyBjYWxsZWQgaW4gZXZlcnkgcGF0aCBvZiBjcmVhdGluZyB0aGUgVENQIHNvY2tldC4gVGhlIExpbnV4IGtlcm5lbCB1c2VzIGBzb2NrX2FsbG9jX2lub2RlYCAvIGBza19hbGxvY2AsIHdoaWNoIHNob3VsZCB6ZXJvIG91dCB0aGUgbWVtb3J5LCBhbmQgdGhlbiBgdGNwX2luaXRfc29ja2Agc2V0cyB0aGUgZmllbGRzIGV4cGxpY2l0bHkuIFN0aWxsLCBJIHNob3VsZCBjb25maXJtLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBjbG9uZSBvcGVyYXRpb25zLCBvciBjYXNlcyB3aXRoIGBhY2NlcHRgIG9yIHBhc3NpdmUgb3BlbnMsIG9yIGByZXF1ZXN0X3NvY2tgLiBBcmUgdGhlc2UgZmllbGRzIHByb3Blcmx5IGluaXRpYWxpemVkIHdoZW4gYSBuZXcgc29ja2V0IGlzIGNyZWF0ZWQgZnJvbSBhbiBleGlzdGluZyBvbmU/IEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgY2xvbmluZyBvciBjb3B5aW5nIG9yIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBgdGNwX3NvY2tgIHN0cnVjdHVyZSwgZXNwZWNpYWxseSBhcm91bmQgZnVuY3Rpb25zIGxpa2UgYHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZGAuCgpUaW1lIHRvIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIGNhbGxzIHRvIGB0Y3BfaW5pdF9zb2NrYCBvciBtZW50aW9ucyBvZiBjbG9uaW5nIHdpdGhpbiB0aGUgcmVsZXZhbnQgZmlsZXMsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jYCBhbmQgYHRjcF9pcHY0LmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgZXZlcnkgc29ja2V0IGNyZWF0aW9uIHBhdGggcHJvcGVybHkgaW5pdGlhbGl6ZXMgdGhlc2UgbmV3IGZpZWxkcyB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgcmVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9pbml0X3NvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9hZl9pbmV0LmM9MTc1Mz1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIGlwdjRfbWliX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTc2MS0jaWZkZWYgQ09ORklHX01QVENQXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTc2MjpcdC8qIGFsbG9jYXRlZCBvbiBkZW1hbmQsIHNlZSBtcHRjcF9pbml0X3NvY2soKSAqL1xubmV0L2lwdjQvYWZfaW5ldC5jLTE3NjMtXHRmcmVlX3BlcmNwdShuZXQtXHUwMDNlbWliLm1wdGNwX3N0YXRpc3RpY3MpO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQwMj12b2lkIHRjcF9tZDVfZGVzdHJ1Y3Rfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwLmMtNDE5LSAqL1xubmV0L2lwdjQvdGNwLmM6NDIwOnZvaWQgdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3AuYy00MjEte1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM5Nj1zdGF0aWMgaW50IHRjcF92NF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM5OS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjQwMDpcdHRjcF9pbml0X3NvY2soc2spO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0yNDAxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDY4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIExldCYjMzk7cyBzdGFydCB3aXRoIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY0L3RjcF9taW5pc29ja3MuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgbG9naWMgZm9yIGhhbmRsaW5nIGEgbmV3bHkgYXJyaXZlZCBjb25uZWN0aW9uIHJlcXVlc3QsIGEgU1lOLCB0aGF0JiMzOTtzIGJlaW5nIHNwYXduZWQgZnJvbSBhbiBleGlzdGluZyBsaXN0ZW5pbmcgc29ja2V0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgY3JlYXRpb24gb2YgdGhlIGNoaWxkIHNvY2tldC4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaG93IHRoZSBuZXcgc29ja2V0IGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIHJlcXVlc3QgYW5kIHRoZSBwYXJlbnQgc29ja2V0IGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kgYmVpbmcgdXNlZCB0byBtYW5hZ2UgdGhpcyBzdGF0ZS4gSXMgaXQgYSBjb3B5LW9uLXdyaXRlIHNpdHVhdGlvbiwgb3IgYXJlIHdlIGdvaW5nIGZvciBmdWxsIHN0YXRlIGR1cGxpY2F0aW9uIGF0IHRoaXMgcG9pbnQ/IEkgYWxzbyB3YW50IHRvIGZvbGxvdyB1cCB3aXRoIGFueSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMgYW5kIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGNvbWUgaW50byBwbGF5IGR1cmluZyB0aGUgY2hpbGQgY3JlYXRpb24gYW5kIGl0cyBhZGRpdGlvbiB0byB0aGUgZXN0YWJsaXNoZWQgY29ubmVjdGlvbiBsaXN0cy4gRXNzZW50aWFsbHksIEkmIzM5O20gY2hlY2tpbmcgdGhlIGhhbmRvZmYgb2YgdGhlIGNvbm5lY3Rpb24mIzM5O3MgbGlmZWN5Y2xlIGZyb20gdGhlIGxpc3RlbiBzb2NrZXQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgY2hpbGQgc29ja2V0LiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTI5ND12b2lkIGluZXRfY3NrX3ByZXBhcmVfZm9yX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzAyLS8qIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIGZvcmNlIGEgY2xvc3VyZSBvZiBhIHNvY2tldCBhZnRlciB0aGUgY2FsbCB0b1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMzAzOiAqIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpLlxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzA0LSAqL1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTkxOD12b2lkIHRjcF9hb19zeW5jb29raWUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTkyNy1cdC8qIHRyZXEtXHUwMDNlYWZfc3BlY2lmaWMgaXMgdXNlZCB0byBwZXJmb3JtIFRDUF9BTyBsb29rdXBcbm5ldC9pcHY0L3RjcF9hby5jOjkyODpcdCAqIGluIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpLlxubmV0L2lwdjQvdGNwX2FvLmMtOTI5LVx0ICovXG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MjU3PXZvaWQgdGNwX2Zhc3RvcGVuX2FkZF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTI2OC1cdHRjcF9jbGVhbnVwX3NrYihza2IpO1xubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM6MjY5Olx0Lyogc2Vnc19pbiBoYXMgYmVlbiBpbml0aWFsaXplZCB0byAxIGluIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpLlxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMjcwLVx0ICogSGVuY2UsIHJlc2V0IHNlZ3NfaW4gdG8gMCBiZWZvcmUgY2FsbGluZyB0Y3Bfc2Vnc19pbigpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz00OTE9aW50IHRjcF92NF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8pXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy01NTItXHR0cCA9IHRjcF9zayhzayk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjU1MzpcdC8qIFhYWCAoVEZPKSAtIHRwLVx1MDAzZXNuZF91bmEgc2hvdWxkIGJlIElTTiAodGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKCkgKi9cbm5ldC9pcHY0L3RjcF9pcHY0LmMtNTU0LVx0ZmFzdG9wZW4gPSByY3VfZGVyZWZlcmVuY2UodHAtXHUwMDNlZmFzdG9wZW5fcnNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE2NzQ9c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2OTYtXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE2OTc6XHRuZXdzayA9IHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChzaywgcmVxLCBza2IpO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjk4LVx0aWYgKCFuZXdzaylcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTI1PXN0YXRpYyB2b2lkIHNtY19jaGVja19yZXNldF9zeW5fcmVxKGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqb2xkdHAsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTU0NS0gKi9cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo1NDY6c3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTQ3LVx0XHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgd2l0aGluIGBuZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoaXMgZnVuY3Rpb24sIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IG5ldyBjaGlsZCBzb2NrZXRzIGFyZSBjcmVhdGVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBsaXN0ZW5pbmcgc29ja2V0LiBJIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBzb21lIGludGVyZXN0aW5nIGludGVycGxheSB3aXRoIHRoZSBgaW5ldF9zb2NrYCBzdHJ1Y3R1cmUgYW5kIHBlcmhhcHMgc29tZSBsb2NraW5nIHByaW1pdGl2ZXMgdG9vLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIG91dCBmb3IgdGhvc2UuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5IGdyaXR0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NTpcdCAqL1xuIDU0NjpcdHN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIDU0NzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIDU0ODpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA1NDk6XHR7XG4gNTUwOlx0XHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBpbmV0X2Nza19jbG9uZV9sb2NrKHNrLCByZXEsIEdGUF9BVE9NSUMpO1xuIDU1MTpcdFx0Y29uc3Qgc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxID0gaW5ldF9yc2socmVxKTtcbiA1NTI6XHRcdHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICp0cmVxID0gdGNwX3JzayhyZXEpO1xuIDU1MzpcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpuZXdpY3NrO1xuIDU1NDpcdFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICpvbGR0cDtcbiA1NTU6XHRcdHN0cnVjdCB0Y3Bfc29jayAqbmV3dHA7XG4gNTU2Olx0XHR1MzIgc2VxO1xuIDU1NzpcdFxuIDU1ODpcdFx0aWYgKCFuZXdzaylcbiA1NTk6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTYwOlx0XG4gNTYxOlx0XHRuZXdpY3NrID0gaW5ldF9jc2sobmV3c2spO1xuIDU2MjpcdFx0bmV3dHAgPSB0Y3Bfc2sobmV3c2spO1xuIDU2MzpcdFx0b2xkdHAgPSB0Y3Bfc2soc2spO1xuIDU2NDpcdFxuIDU2NTpcdFx0c21jX2NoZWNrX3Jlc2V0X3N5bl9yZXEob2xkdHAsIHJlcSwgbmV3dHApO1xuIDU2NjpcdFxuIDU2NzpcdFx0LyogTm93IHNldHVwIHRjcF9zb2NrICovXG4gNTY4Olx0XHRuZXd0cC1cdTAwM2VwcmVkX2ZsYWdzID0gMDtcbiA1Njk6XHRcbiA1NzA6XHRcdHNlcSA9IHRyZXEtXHUwMDNlcmN2X2lzbiAmIzQzOyAxO1xuIDU3MTpcdFx0bmV3dHAtXHUwMDNlcmN2X3d1cCA9IHNlcTtcbiA1NzI6XHRcdFdSSVRFX09OQ0UobmV3dHAtXHUwMDNlY29waWVkX3NlcSwgc2VxKTtcbiA1NzM6XHRcdFdSSVRFX09OQ0UobmV3dHAtXHUwMDNlcmN2X254dCwgc2VxKTtcbiA1NzQ6XHRcdG5ld3RwLVx1MDAzZXNlZ3NfaW4gPSAxO1xuIDU3NTpcdFxuIDU3NjpcdFx0c2VxID0gdHJlcS1cdTAwM2VzbnRfaXNuICYjNDM7IDE7XG4gNTc3Olx0XHRuZXd0cC1cdTAwM2VzbmRfc21sID0gbmV3dHAtXHUwMDNlc25kX3VuYSA9IHNlcTtcbiA1Nzg6XHRcdFdSSVRFX09OQ0UobmV3dHAtXHUwMDNlc25kX254dCwgc2VxKTtcbiA1Nzk6XHRcdG5ld3RwLVx1MDAzZXNuZF91cCA9IHNlcTtcbiA1ODA6XHRcbiA1ODE6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ld3RwLVx1MDAzZXRzcV9ub2RlKTtcbiA1ODI6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ld3RwLVx1MDAzZXRzb3J0ZWRfc2VudF9xdWV1ZSk7XG4gNTgzOlx0XG4gNTg0Olx0XHR0Y3BfaW5pdF93bChuZXd0cCwgdHJlcS1cdTAwM2VyY3ZfaXNuKTtcbiA1ODU6XHRcbiA1ODY6XHRcdG1pbm1heF9yZXNldChcdTAwMjZuZXd0cC1cdTAwM2VydHRfbWluLCB0Y3BfamlmZmllczMyLCB+MFUpO1xuIDU4NzpcdFx0bmV3aWNzay1cdTAwM2VpY3NrX2Fjay5scmN2dGltZSA9IHRjcF9qaWZmaWVzMzI7XG4gNTg4Olx0XG4gNTg5Olx0XHRuZXd0cC1cdTAwM2Vsc25kdGltZSA9IHRjcF9qaWZmaWVzMzI7XG4gNTkwOlx0XHRuZXdzay1cdTAwM2Vza190eGhhc2ggPSBSRUFEX09OQ0UodHJlcS1cdTAwM2V0eGhhc2gpO1xuIDU5MTpcdFx0bmV3dHAtXHUwMDNldG90YWxfcmV0cmFucyA9IHJlcS1cdTAwM2VudW1fcmV0cmFucztcbiA1OTI6XHRcbiA1OTM6XHRcdHRjcF9pbml0X3htaXRfdGltZXJzKG5ld3NrKTtcbiA1OTQ6XHRcdFdSSVRFX09OQ0UobmV3dHAtXHUwMDNld3JpdGVfc2VxLCBuZXd0cC1cdTAwM2VwdXNoZWRfc2VxID0gdHJlcS1cdTAwM2VzbnRfaXNuICYjNDM7IDEpO1xuIDU5NTpcdFxuIDU5NjpcdFx0aWYgKHNvY2tfZmxhZyhuZXdzaywgU09DS19LRUVQT1BFTikpXG4gNTk3Olx0XHRcdHRjcF9yZXNldF9rZWVwYWxpdmVfdGltZXIobmV3c2ssIGtlZXBhbGl2ZV90aW1lX3doZW4obmV3dHApKTtcbiA1OTg6XHRcbiA1OTk6XHRcdG5ld3RwLVx1MDAzZXJ4X29wdC50c3RhbXBfb2sgPSBpcmVxLVx1MDAzZXRzdGFtcF9vaztcbiA2MDA6XHRcdG5ld3RwLVx1MDAzZXJ4X29wdC5zYWNrX29rID0gaXJlcS1cdTAwM2VzYWNrX29rO1xuIDYwMTpcdFx0bmV3dHAtXHUwMDNld2luZG93X2NsYW1wID0gcmVxLVx1MDAzZXJza193aW5kb3dfY2xhbXA7XG4gNjAyOlx0XHRuZXd0cC1cdTAwM2VyY3Zfc3N0aHJlc2ggPSByZXEtXHUwMDNlcnNrX3Jjdl93bmQ7XG4gNjAzOlx0XHRuZXd0cC1cdTAwM2VyY3Zfd25kID0gcmVxLVx1MDAzZXJza19yY3Zfd25kO1xuIDYwNDpcdFx0bmV3dHAtXHUwMDNlcmN2X213bmRfc2VxID0gbmV3dHAtXHUwMDNlcmN2X3d1cCAmIzQzOyByZXEtXHUwMDNlcnNrX3Jjdl93bmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTEwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUQ1AgRUNOIEluaGVyaXRhbmNlIGluIFNvY2tldCBDbG9uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgRUNOIChFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbikgc2V0dGluZ3MgYXJlIGhhbmRsZWQgd2hlbiBhIG5ldyBzb2NrZXQgaXMgY3JlYXRlZCBmcm9tIGEgbGlzdGVuZXIgc29ja2V0IGluIHRoZSBrZXJuZWwuIGBpbmV0X2Nza19jbG9uZV9sb2NrKHNrLCByZXEsIEdGUF9BVE9NSUMpYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBoZWF2eSBsaWZ0aW5nIGhlcmUuIEZyb20gd2hhdCBJIHNlZSwgaXQgY2xvbmVzIGBza2AgdXNpbmcgYHNrX2Nsb25lX2xvY2tgLCB3aGljaCBlc3NlbnRpYWxseSBtZWFucyBhIGBtZW1jcHlgIG9mIHRoZSBlbnRpcmUgYHN0cnVjdCBzb2NrYCwgaW5jbHVkaW5nIHRoZSBlbWJlZGRlZCBgc3RydWN0IHRjcF9zb2NrYCwgZnJvbSB0aGUgbGlzdGVuaW5nIHNvY2tldCBgc2tgIHRvIHRoZSBuZXcgc29ja2V0IGBuZXdza2AuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgdGVsbHMgbWUgdGhhdCBFQ04tcmVsYXRlZCBmaWVsZHMsIHNwZWNpZmljYWxseSBgbmV3dHAtJmd0O2Vjbl9tb2RlYCBhbmQgYG5ld3RwLSZndDtlY25fb3B0aW9uYCwgYXJlIGluaGVyaXRlZCBkaXJlY3RseSBmcm9tIHRoZSBsaXN0ZW5lci4gVGhhdCBpbmhlcml0YW5jZSBzZWVtcyBxdWl0ZSBkaXJlY3QuCgpOb3csIG15IG5leHQgcXVlc3Rpb24gaXMsIGhvdyBhcmUgdGhlc2UgRUNOIHNldHRpbmdzIGV4cG9zZWQgdG8gdXNlciBzcGFjZT8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgZG9fdGNwX2dldHNvY2tvcHRgIGhhbmRsZXMgcmV0cmlldmluZyB0aGVzZSB2YWx1ZXMuIExldCYjMzk7cyBsb29rIGF0IHRoZSBjb2RlOgoKYGBgYwoJY2FzZSBUQ1BfRUNOOgoJCXZhbCA9IFJFQURfT05DRSh0cC0mZ3Q7ZWNuX21vZGUpOwoJCWJyZWFrOwoJY2FzZSBUQ1BfRUNOX09QVElPTjoKCQl2YWwgPSBSRUFEX09OQ0UodHAtJmd0O2Vjbl9vcHRpb24pOwoJCWJyZWFrOwpgYGAKClJpZ2h0LCBpdCB1c2VzIGBSRUFEX09OQ0VgIHRvIGZldGNoIHRoZSB2YWx1ZXMgb2YgYHRwLSZndDtlY25fbW9kZWAgYW5kIGB0cC0mZ3Q7ZWNuX29wdGlvbmAgZnJvbSB0aGUgVENQIGNvbnRyb2wgYmxvY2suIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGp1c3QgYSBkaXJlY3QgcmVhZCBvZiB0aGUgdmFsdWUuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYXJvdW5kIGBkb190Y3BfZ2V0c29ja29wdGAgaW4gYHRjcC5jYCB0byBzZWUgaG93IHRoYXQgYHZhbGAgaXMgdGhlbiByZXR1cm5lZCB0byB0aGUgdXNlci4gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHN5bmNocm9uaXphdGlvbiBvciBtZW1vcnkgb3JkZXJpbmcgaGVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoYXQgdmFsdWUgaXMgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBtdWx0aXRocmVhZGVkIGFjY2VzcyB0byB0aGUgc29ja2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZG9fdGNwX2dldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz00NDIzPXN0cnVjdCBza19idWZmICp0Y3BfZ2V0X3RpbWVzdGFtcGluZ19vcHRfc3RhdHMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ0OTQtXG5uZXQvaXB2NC90Y3AuYzo0NDk1OmludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbm5ldC9pcHY0L3RjcC5jLTQ0OTYtXHRcdCAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcwNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNwZWNpZmllZCBzZWN0aW9ucyBvZiBgbmV0L2lwdjQvdGNwLmNgLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBEZWVwIGludG8gVENQIENvbmdlc3Rpb24gQ29udHJvbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmVmcmVzaCBvdXIgdW5kZXJzdGFuZGluZyBvZiBzb21lIGNvcmUgVENQIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHJlZ2lvbnMgd2l0aGluIGBuZXQvaXB2NC90Y3AuY2AsIG5hbWVseSBsaW5lcyA0NDk1IHRvIDQ1MjAgYW5kIHRoZW4gNDg0MCB0byA0ODcwLiBNeSBmb2N1cyBoZXJlIGlzIGxpa2VseSBhcm91bmQgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbXMuIEZyb20gZXhwZXJpZW5jZSwgdGhvc2UgbGluZSBudW1iZXJzIHVzdWFsbHkgdG91Y2ggb24ga2V5IGFkanVzdG1lbnRzIHRvIHRoZSBUQ1Agd2luZG93IG9yIHJldHJhbnNtaXNzaW9uIGJlaGF2aW9yLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgcmVsYXRlZCB0byBob3cgdGhlIGtlcm5lbCByZXNwb25kcyB0byBwYWNrZXQgbG9zcyBvciBjb25nZXN0aW9uIGV2ZW50cy4gSXTigJlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gYWRqdXN0bWVudHMgdG8gdGhlIGNvbmdlc3Rpb24gd2luZG93LCBzbG93IHN0YXJ0IHRocmVzaG9sZHMsIG9yIHJldHJhbnNtaXNzaW9uIHRpbWVvdXRzLiBJIGFtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgb2YgZGlmZmVyZW50IGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zLCBhcyB0aGUga2VybmVsIGNhbiB1c2Ugc2V2ZXJhbCBkaWZmZXJlbnQgb25lcy4gSSYjMzk7bSBhbHNvIHJlYWR5IHRvIGFuYWx5emUgdGhlIGludHJpY2F0ZSBjYWxjdWxhdGlvbnMgaW52b2x2ZWQgaW4gbWFpbnRhaW5pbmcgYSBnb29kIHRocm91Z2hwdXQuIEkgbWF5IGZpbmQgY29kZSByZWxhdGVkIHRvIHNwZWNpZmljIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zLCBsaWtlIEN1YmljIG9yIEJCUiwgb3IgcG9zc2libHkgdGhlIGNvcmUgbG9naWMgZm9yIFRDUCYjMzk7cyBjb25nZXN0aW9uIGF2b2lkYW5jZS4gSSYjMzk7bGwgbmVlZCB0byB3YXRjaCBmb3IgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgYW55IHVzZSBvZiB0aW1lcnMgYW5kIGFzc29jaWF0ZWQgY29udGV4dCBzd2l0Y2hlcywgYW5kIGFueSB1c2Ugb2Ygc3RhdGlzdGljcy9jb3VudGVycyB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0OTU6XHRpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG40NDk2Olx0XHRcdCAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxuNDQ5NzpcdHtcbjQ0OTg6XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbjQ0OTk6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuNDUwMDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuNDUwMTpcdFx0aW50IHVzZXJfbXNzO1xuNDUwMjpcdFx0aW50IHZhbCwgbGVuO1xuNDUwMzpcdFxuNDUwNDpcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG40NTA1Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuNDUwNjpcdFxuNDUwNzpcdFx0aWYgKGxlbiBcdTAwM2MgMClcbjQ1MDg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NTA5Olx0XG40NTEwOlx0XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGludCkpO1xuNDUxMTpcdFxuNDUxMjpcdFx0c3dpdGNoIChvcHRuYW1lKSB7XG40NTEzOlx0XHRjYXNlIFRDUF9NQVhTRUc6XG40NTE0Olx0XHRcdHZhbCA9IHRwLVx1MDAzZW1zc19jYWNoZTtcbjQ1MTU6XHRcdFx0dXNlcl9tc3MgPSBSRUFEX09OQ0UodHAtXHUwMDNlcnhfb3B0LnVzZXJfbXNzKTtcbjQ1MTY6XHRcdFx0aWYgKHVzZXJfbXNzIFx1MDAyNlx1MDAyNlxuNDUxNzpcdFx0XHQgICAgKCgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IChUQ1BGX0NMT1NFIHwgVENQRl9MSVNURU4pKSlcbjQ1MTg6XHRcdFx0XHR2YWwgPSB1c2VyX21zcztcbjQ1MTk6XHRcdFx0aWYgKHRwLVx1MDAzZXJlcGFpcilcbjQ1MjA6XHRcdFx0XHR2YWwgPSB0cC1cdTAwM2VyeF9vcHQubXNzX2NsYW1wO1xuNDUyMTpcdFx0XHRicmVhaztcbjQ1MjI6XHRcdGNhc2UgVENQX05PREVMQVk6XG40NTIzOlx0XHRcdHZhbCA9ICEhKHRwLVx1MDAzZW5vbmFnbGVcdTAwMjZUQ1BfTkFHTEVfT0ZGKTtcbjQ1MjQ6XHRcdFx0YnJlYWs7XG40NTI1Olx0XHRjYXNlIFRDUF9DT1JLOlxuNDUyNjpcdFx0XHR2YWwgPSAhISh0cC1cdTAwM2Vub25hZ2xlXHUwMDI2VENQX05BR0xFX0NPUkspO1xuNDUyNzpcdFx0XHRicmVhaztcbjQ1Mjg6XHRcdGNhc2UgVENQX0tFRVBJRExFOlxuNDUyOTpcdFx0XHR2YWwgPSBrZWVwYWxpdmVfdGltZV93aGVuKHRwKSAvIEhaO1xuNDUzMDpcdFx0XHRicmVhaztcbjQ1MzE6XHRcdGNhc2UgVENQX0tFRVBJTlRWTDpcbjQ1MzI6XHRcdFx0dmFsID0ga2VlcGFsaXZlX2ludHZsX3doZW4odHApIC8gSFo7XG40NTMzOlx0XHRcdGJyZWFrO1xuNDUzNDpcdFx0Y2FzZSBUQ1BfS0VFUENOVDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2ODcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipEaXZpbmcgaW50byBgZG9fdGNwX2dldHNvY2tvcHRgIC0gTGV0JiMzOTtzIFNlZSBXaGF0JiMzOTtzIGF0IHRoZSBFbmQhKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8ganVtcCByaWdodCB0byB0aGUgZW5kIG9mIGBkb190Y3BfZ2V0c29ja29wdGAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGluc2lkZSBhbmQgb3V0LCBidXQgSSBhbHdheXMgZmluZCBpdCB1c2VmdWwgdG8gcmVmcmVzaCBteSBtZW1vcnkgYnkgcXVpY2tseSByZXZpZXdpbmcgdGhlIHRhaWwgZW5kIG9mIHRoaW5ncyBmaXJzdC4gSXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIG9wZXJhdGlvbiBhbmQgdGhlIHJldHVybiBwYXRoIGFyZSBjbGVhbmx5IGxhaWQgb3V0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHF1aWNrIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhpcyBmdW5jdGlvbiB3cmFwcyB1cCBpdHMgd29yay4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBwcm9jZXNzZXMgdGhlIGRhdGEgYW5kIHNlbmRzIGl0IGJhY2sgdXAgdG8gdGhlIHVzZXItc3BhY2UgcHJvZ3JhbSB0aGF0IG1hZGUgdGhlIGNhbGwuIEl0IGdpdmVzIGEgZ29vZCBzZW5zZSBvZiBob3cgdGhleSBhY3R1YWxseSBpbXBsZW1lbnQgZ2V0c29ja29wdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDg1NTpcdFx0XHRicmVhaztcbjQ4NTY6XHRcdGNhc2UgVENQX0RFTEFDS19NQVhfVVM6XG40ODU3Olx0XHRcdHZhbCA9IGppZmZpZXNfdG9fdXNlY3MoUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2RlbGFja19tYXgpKTtcbjQ4NTg6XHRcdFx0YnJlYWs7XG40ODU5Olx0XHRjYXNlIFRDUF9FQ046XG40ODYwOlx0XHRcdHZhbCA9IFJFQURfT05DRSh0cC1cdTAwM2VlY25fbW9kZSk7XG40ODYxOlx0XHRcdGJyZWFrO1xuNDg2MjpcdFx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcbjQ4NjM6XHRcdFx0dmFsID0gUkVBRF9PTkNFKHRwLVx1MDAzZWVjbl9vcHRpb24pO1xuNDg2NDpcdFx0XHRicmVhaztcbjQ4NjU6XHRcdGRlZmF1bHQ6XG40ODY2Olx0XHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG40ODY3Olx0XHR9XG40ODY4Olx0XG40ODY5Olx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2bGVuLCBzaXplb2YoaW50KSkpXG40ODcwOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuNDg3MTpcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIFx1MDAyNnZhbCwgbGVuKSlcbjQ4NzI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG40ODczOlx0XHRyZXR1cm4gMDtcbjQ4NzQ6XHR9XG40ODc1Olx0XG40ODc2Olx0Ym9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCwgaW50IG9wdG5hbWUpXG40ODc3Olx0e1xuNDg3ODpcdFx0LyogVENQIGRvX3RjcF9nZXRzb2Nrb3B0IGhhcyBvcHRpbWl6ZWQgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvblxuNDg3OTpcdFx0ICogdG8gYXZvaWQgZXh0cmEgc29ja2V0IGxvY2sgZm9yIFRDUF9aRVJPQ09QWV9SRUNFSVZFLlxuNDg4MDpcdFx0ICovXG40ODgxOlx0XHRpZiAobGV2ZWwgPT0gU09MX1RDUCBcdTAwMjZcdTAwMjYgb3B0bmFtZSA9PSBUQ1BfWkVST0NPUFlfUkVDRUlWRSlcbjQ4ODI6XHRcdFx0cmV0dXJuIHRydWU7XG40ODgzOlx0XG40ODg0Olx0XHRyZXR1cm4gZmFsc2U7XG40ODg1Olx0fVxuNDg4NjpcdFxuNDg4NzpcdGludCB0Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsXG40ODg4Olx0XHRcdCAgIGludCBfX3VzZXIgKm9wdGxlbilcbjQ4ODk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEZpbHRlcmluZyBJc3N1ZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBzb2xfdGNwX3NvY2tvcHRgIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGNvbnRleHQuIFdlJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBhbmQgaXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byByZXZpc2l0IHRoZXNlIGFyZWFzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNvY2tldCBvcHRpb25zLiBTb2NrZXQgb3B0aW9ucyBjYW4gaW50ZXJhY3QgaW4gcmVhbGx5IHN1YnRsZSB3YXlzIHdpdGggZmlsdGVyaW5nIG1lY2hhbmlzbXMgYW5kIGl0IHdvdWxkIGJlIGEgc2hhbWUgdG8gbWlzcyBzb21ldGhpbmcgYnkgbm90IGxvb2tpbmcgYXQgdGhpcyBhc3BlY3QsIGV2ZW4gaWYgaXQgc2VlbXMgdW5saWtlbHkuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhpcyBjdXJyZW50IGludmVzdGlnYXRpb24sIGl0IHdvdWxkIGJlIHBydWRlbnQgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aG9zZSBvcHRpb25zIGFuZCBhbnkgZmlsdGVyaW5nIGxvZ2ljIHRoYXQgbWlnaHQgYmUgYXQgcGxheS4gV2Uga25vdyB0aGVzZSBhcmVhcyBjYW4gZ2V0IGNvbXBsZXggcXVpY2tseSwgc28gaXQmIzM5O3MgYmVzdCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTY2MDpcdFx0c3dpdGNoIChvcHRuYW1lKSB7XG41NjYxOlx0XHRjYXNlIFRDUF9OT0RFTEFZOlxuNTY2MjpcdFx0Y2FzZSBUQ1BfTUFYU0VHOlxuNTY2MzpcdFx0Y2FzZSBUQ1BfS0VFUElETEU6XG41NjY0Olx0XHRjYXNlIFRDUF9LRUVQSU5UVkw6XG41NjY1Olx0XHRjYXNlIFRDUF9LRUVQQ05UOlxuNTY2NjpcdFx0Y2FzZSBUQ1BfU1lOQ05UOlxuNTY2NzpcdFx0Y2FzZSBUQ1BfV0lORE9XX0NMQU1QOlxuNTY2ODpcdFx0Y2FzZSBUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFM6XG41NjY5Olx0XHRjYXNlIFRDUF9VU0VSX1RJTUVPVVQ6XG41NjcwOlx0XHRjYXNlIFRDUF9OT1RTRU5UX0xPV0FUOlxuNTY3MTpcdFx0Y2FzZSBUQ1BfU0FWRV9TWU46XG41NjcyOlx0XHRjYXNlIFRDUF9SVE9fTUFYX01TOlxuNTY3MzpcdFx0Y2FzZSBUQ1BfRUNOOlxuNTY3NDpcdFx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcbjU2NzU6XHRcdFx0aWYgKCpvcHRsZW4gIT0gc2l6ZW9mKGludCkpXG41Njc2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41Njc3Olx0XHRcdGJyZWFrO1xuNTY3ODpcdFx0Y2FzZSBUQ1BfQ09OR0VTVElPTjpcbjU2Nzk6XHRcdFx0cmV0dXJuIHNvbF90Y3Bfc29ja29wdF9jb25nZXN0aW9uKHNrLCBvcHR2YWwsIG9wdGxlbiwgZ2V0b3B0KTtcbjU2ODA6XHRcdGNhc2UgVENQX1NBVkVEX1NZTjpcbjU2ODE6XHRcdFx0aWYgKCpvcHRsZW4gXHUwMDNjIDEpXG41NjgyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41NjgzOlx0XHRcdGJyZWFrO1xuNTY4NDpcdFx0ZGVmYXVsdDpcbjU2ODU6XHRcdFx0aWYgKGdldG9wdClcbjU2ODY6XHRcdFx0XHRyZXR1cm4gYnBmX3NvbF90Y3BfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCAqb3B0bGVuKTtcbjU2ODc6XHRcdFx0cmV0dXJuIGJwZl9zb2xfdGNwX3NldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgKm9wdGxlbik7XG41Njg4Olx0XHR9XG41Njg5Olx0XG41NjkwOlx0XHRpZiAoZ2V0b3B0KSB7XG41NjkxOlx0XHRcdGlmIChvcHRuYW1lID09IFRDUF9TQVZFRF9TWU4pIHtcbjU2OTI6XHRcdFx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjU2OTM6XHRcbjU2OTQ6XHRcdFx0XHRpZiAoIXRwLVx1MDAzZXNhdmVkX3N5biB8fFxuNTY5NTpcdFx0XHRcdCAgICAqb3B0bGVuIFx1MDAzZSB0Y3Bfc2F2ZWRfc3luX2xlbih0cC1cdTAwM2VzYXZlZF9zeW4pKVxuNTY5NjpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41Njk3Olx0XHRcdFx0bWVtY3B5KG9wdHZhbCwgdHAtXHUwMDNlc2F2ZWRfc3luLVx1MDAzZWRhdGEsICpvcHRsZW4pO1xuNTY5ODpcdFx0XHRcdC8qIEl0IGNhbm5vdCBmcmVlIHRwLVx1MDAzZXNhdmVkX3N5biBoZXJlIGJlY2F1c2UgaXRcbjU2OTk6XHRcdFx0XHQgKiBkb2VzIG5vdCBrbm93IGlmIHRoZSB1c2VyIHNwYWNlIHN0aWxsIG5lZWRzIGl0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMzNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHNvbF90Y3Bfc29ja29wdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIGBzb2xfdGNwX3NvY2tvcHRgIGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsdGVyIHN0YWNrLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBleGFtaW5lIHRoZSByZXN0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbWVhdCBhbmQgcG90YXRvZXMgLSBob3cgdGhpcyBzb2NrZXQgb3B0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBmaWx0ZXJpbmcgbG9naWMgYW5kIGFueSBwb3RlbnRpYWwgZ290Y2hhcyBvciBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gbXkgd29yay4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIGludGVyYWN0aW9uIG9mIHRoZSBzb2NrZXQgb3B0aW9uIG1lY2hhbmlzbSB3aXRoIHRoZSBmaWx0ZXIgc3Vic3lzdGVtLiBUaGlzIGlzIHRoZSBjb3JyZWN0IGZpbGUgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyB0aGlzIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTcwMDpcdFx0XHRcdCAqL1xuNTcwMTpcdFx0XHRcdHJldHVybiAwO1xuNTcwMjpcdFx0XHR9XG41NzAzOlx0XG41NzA0Olx0XHRcdHJldHVybiBkb190Y3BfZ2V0c29ja29wdChzaywgU09MX1RDUCwgb3B0bmFtZSxcbjU3MDU6XHRcdFx0XHRcdFx0IEtFUk5FTF9TT0NLUFRSKG9wdHZhbCksXG41NzA2Olx0XHRcdFx0XHRcdCBLRVJORUxfU09DS1BUUihvcHRsZW4pKTtcbjU3MDc6XHRcdH1cbjU3MDg6XHRcbjU3MDk6XHRcdHJldHVybiBkb190Y3Bfc2V0c29ja29wdChzaywgU09MX1RDUCwgb3B0bmFtZSxcbjU3MTA6XHRcdFx0XHRcdCBLRVJORUxfU09DS1BUUihvcHR2YWwpLCAqb3B0bGVuKTtcbjU3MTE6XHR9XG41NzEyOlx0XG41NzEzOlx0c3RhdGljIGJvb2wgc2tfYWxsb3dzX3NvbF9pcF9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaylcbjU3MTQ6XHR7XG41NzE1Olx0XHRzd2l0Y2ggKHNrLVx1MDAzZXNrX2ZhbWlseSkge1xuNTcxNjpcdFx0Y2FzZSBBRl9JTkVUOlxuNTcxNzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjU3MTg6XHRcdGNhc2UgQUZfSU5FVDY6XG41NzE5Olx0XHRcdC8qIEFsbG93IGdldHRpbmcvc2V0dGluZyBzb2Nrb3B0IGZvciBwb3NzaWJsZSBpcHY0LW1hcHBlZCBpcHY2IHNvY2tldC4gKi9cbjU3MjA6XHRcdFx0cmV0dXJuIHNrLVx1MDAzZXNrX3R5cGUgIT0gU09DS19SQVcgXHUwMDI2XHUwMDI2ICFpcHY2X29ubHlfc29jayhzayk7XG41NzIxOlx0XHRkZWZhdWx0OlxuNTcyMjpcdFx0XHRyZXR1cm4gZmFsc2U7XG41NzIzOlx0XHR9XG41NzI0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkzMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIFNvY2tldCBPcHRpb24gSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2Ugc29ja2V0IG9wdGlvbiBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBTdGFydGluZyB3aXRoIGBkb190Y3BfZ2V0c29ja29wdGAsIHRoZSBjb3JlIGNvbmNlcm4gaXMgaG93IHRoZSB2YWx1ZSAoYHZhbGApIGlzIGhhbmRsZWQuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGB2YWxgLCBhbiBgaW50YCwgZ2V0cyBhc3NpZ25lZCBmcm9tIGB0cC0mZ3Q7ZWNuX21vZGVgLCB3aGljaCBpcyBhIGB1OGAuIEltcG9ydGFudGx5LCB0aGlzIGFzc2lnbm1lbnQgZnVsbHkgaW5pdGlhbGl6ZXMgYWxsIHRoZSBiaXRzIHdpdGhpbiBgdmFsYCBiZWNhdXNlIG9mIHRoZSBpbXBsaWNpdCB0eXBlIHByb21vdGlvbi4gVGhlIGxlbmd0aCBjaGVjaywgYGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2YoaW50KSlgLCBsb29rcyBnb29kLCBlbnN1cmluZyB3ZSBkb24mIzM5O3QgdHJ5IHRvIGNvcHkgbW9yZSBkYXRhIHRoYW4gZXhwZWN0ZWQuIEZpbmFsbHksIHRoZSBjcml0aWNhbCBgY29weV90b19zb2NrcHRyKG9wdHZhbCwgJmFtcDt2YWwsIGxlbilgIHVzZXMgYGxlbmAgd2hpY2ggaXMgYm91bmQgYnkgYHNpemVvZihpbnQpYCwgc28gd2UmIzM5O3JlIG9ubHkgY29weWluZyBpbml0aWFsaXplZCBiaXRzIG9mIHRoZSBgaW50YCB0byB1c2Vyc3BhY2UuIFNvLCBgZG9fdGNwX2dldHNvY2tvcHRgIGFwcGVhcnMgc2FmZTsgbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIG91dC4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGZvY3VzIHRvIGBkb190Y3Bfc2V0c29ja29wdGAuIFdlIG5lZWQgdG8gZXhhbWluZSBob3cgYHZhbGAgaXMgYWNxdWlyZWQgaW4gdGhpcyBjb250ZXh0LiBUaGUgcHJpb3IgYW5hbHlzaXMgb2YgYGRvX3RjcF9nZXRzb2Nrb3B0YCBzZXRzIHRoZSBzdGFnZSBmb3IgYSBzaW1pbGFyIHJpZ29yb3VzIGNoZWNrIGluIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4NzA6XHRcdFx0Y2hhciBuYW1lW1RDUF9VTFBfTkFNRV9NQVhdO1xuMzg3MTpcdFxuMzg3MjpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyAxKVxuMzg3MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzg3NDpcdFxuMzg3NTpcdFx0XHR2YWwgPSBzdHJuY3B5X2Zyb21fc29ja3B0cihuYW1lLCBvcHR2YWwsXG4zODc2Olx0XHRcdFx0XHRcdG1pbl90KGxvbmcsIFRDUF9VTFBfTkFNRV9NQVggLSAxLFxuMzg3NzpcdFx0XHRcdFx0XHQgICAgICBvcHRsZW4pKTtcbjM4Nzg6XHRcdFx0aWYgKHZhbCBcdTAwM2MgMClcbjM4Nzk6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjM4ODA6XHRcdFx0bmFtZVt2YWxdID0gMDtcbjM4ODE6XHRcbjM4ODI6XHRcdFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xuMzg4MzpcdFx0XHRlcnIgPSB0Y3Bfc2V0X3VscChzaywgbmFtZSk7XG4zODg0Olx0XHRcdHNvY2tvcHRfcmVsZWFzZV9zb2NrKHNrKTtcbjM4ODU6XHRcdFx0cmV0dXJuIGVycjtcbjM4ODY6XHRcdH1cbjM4ODc6XHRcdGNhc2UgVENQX0ZBU1RPUEVOX0tFWToge1xuMzg4ODpcdFx0XHRfX3U4IGtleVtUQ1BfRkFTVE9QRU5fS0VZX0JVRl9MRU5HVEhdO1xuMzg4OTpcdFx0XHRfX3U4ICpiYWNrdXBfa2V5ID0gTlVMTDtcbjM4OTA6XHRcbjM4OTE6XHRcdFx0LyogQWxsb3cgYSBiYWNrdXAga2V5IGFzIHdlbGwgdG8gZmFjaWxpdGF0ZSBrZXkgcm90YXRpb25cbjM4OTI6XHRcdFx0ICogRmlyc3Qga2V5IGlzIHRoZSBhY3RpdmUgb25lLlxuMzg5MzpcdFx0XHQgKi9cbjM4OTQ6XHRcdFx0aWYgKG9wdGxlbiAhPSBUQ1BfRkFTVE9QRU5fS0VZX0xFTkdUSCBcdTAwMjZcdTAwMjZcbjM4OTU6XHRcdFx0ICAgIG9wdGxlbiAhPSBUQ1BfRkFTVE9QRU5fS0VZX0JVRl9MRU5HVEgpXG4zODk2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zODk3Olx0XG4zODk4Olx0XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihrZXksIG9wdHZhbCwgb3B0bGVuKSlcbjM4OTk6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjM5MDA6XHRcbjM5MDE6XHRcdFx0aWYgKG9wdGxlbiA9PSBUQ1BfRkFTVE9QRU5fS0VZX0JVRl9MRU5HVEgpXG4zOTAyOlx0XHRcdFx0YmFja3VwX2tleSA9IGtleSAmIzQzOyBUQ1BfRkFTVE9QRU5fS0VZX0xFTkdUSDtcbjM5MDM6XHRcbjM5MDQ6XHRcdFx0cmV0dXJuIHRjcF9mYXN0b3Blbl9yZXNldF9jaXBoZXIobmV0LCBzaywga2V5LCBiYWNrdXBfa2V5KTtcbjM5MDU6XHRcdH1cbjM5MDY6XHRcdGRlZmF1bHQ6XG4zOTA3Olx0XHRcdC8qIGZhbGx0aHJ1ICovXG4zOTA4Olx0XHRcdGJyZWFrO1xuMzkwOTpcdFx0fVxuMzkxMDpcdFxuMzkxMTpcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4zOTEyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzkxMzpcdFxuMzkxNDpcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNnZhbCwgb3B0dmFsLCBzaXplb2YodmFsKSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDQ0CgkJCQkJCQlvdXRwdXQ6IDI0OQoJCQkJCQkJdGhvdWdodHM6IDExNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVENQIEVDTiBTb2NrZXQgT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB0YXNrIGlzIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggcmVxdWlyZXMgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBvciBub3QuCgpGaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBzb2NrZXQgb3B0aW9ucywgYFRDUF9FQ05gIGFuZCBgVENQX0VDTl9PUFRJT05gLiBUaGVzZSBhbGxvdyBmb3IgcGVyLXNvY2tldCBvdmVycmlkZXMgb2YgdGhlIHN5c3RlbS13aWRlIEVDTiBzZXR0aW5ncyBjb250cm9sbGVkIGJ5IGBzeXNjdGxfdGNwX2VjbmAgYW5kIGBzeXNjdGxfdGNwX2Vjbl9vcHRpb25gLCByZXNwZWN0aXZlbHkuICBJIHNlZSB0aGF0IGluIGBkb190Y3Bfc2V0c29ja29wdGAsIHRoZXJlJiMzOTtzIHByb3BlciB0eXBlIHZhbGlkYXRpb24sIHJhbmdlIGNoZWNrcyBhbmQgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBmaWVsZHMgYGVjbl9tb2RlYCBhbmQgYGVjbl9vcHRpb25gLiAgSSBjaGVja2VkIHRoYXQgYGNvcHlfZnJvbV9zb2NrcHRyYCBpcyBjb3JyZWN0bHkgdXNlZCwgZW5zdXJpbmcgZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIHNhZmVseS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgb3B0aW9ucyBhcmUgdXNlZC4gSSBpZGVudGlmaWVkIGFsbCB1c2VzIG9mIGBlY25fbW9kZWAsIGBlY25fb3B0aW9uYCwgYHRjcF9lY25fbW9kZV9lZmZgLCBhbmQgYHRjcF9hY2NlY25fb3B0aW9uX2VmZmAgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgY29kZSBzZWVtcyBjbGVhbiBhbmQgbG9naWNhbGx5IHNvdW5kLCB3aXRoIG5vIG9idmlvdXMgaXNzdWVzLiAgSSB3ZW50IHRocm91Z2ggYWxsIHRoZSBsb2NhdGlvbnMsIGluY2x1ZGluZyBgaW5jbHVkZS9uZXQvdGNwX2Vjbi5oYCwgYHRjcF9lY25fc2VuZF9zeW5gLCBhbmQgdmFyaW91cyBwYXJ0cyBvZiBgdGNwX291dHB1dC5jYC4gRXZlcnl0aGluZyBzZWVtcyB0byBiZSB3ZWxsLWRlZmluZWQgYW5kIGhhbmRsZWQgaW4gYSBjb250cm9sbGVkIG1hbm5lci4KClRoZSBjcnVjaWFsIHBhcnQgaXMgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGV4aXN0LiBJIGNvbmZpcm1lZCB0aGF0IGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW4gYHRjcF9pbml0X3NvY2soKWAgdG8gYFRDUF9FQ05fTU9ERV9VTlNQRUNgIGFuZCBgVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDYCByZXNwZWN0aXZlbHkuIGBkb190Y3BfZ2V0c29ja29wdGAgYXNzaWducyB0aGUgdmFsdWUgdG8gYSBsb2NhbCBgaW50IHZhbGAgYmVmb3JlIGNvcHlpbmcgaXQgdG8gdXNlcnNwYWNlLCB0aHVzIGVsaW1pbmF0aW5nIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQlBGIHNvY2tvcHRzIGFyZSBhbHNvIGNhcmVmdWxseSBoYW5kbGVkLiAgVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvbiB0aGUgaGVhcCwgc3RhY2ssIG9yIHdpdGhpbiBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMuIFRoZXJlIGlzIG5vIHBhZGRpbmcgY29uY2VybiBlaXRoZXIuCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbGxlZCBkYXRhIGZsb3csIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBBbnkgY29uY2VybnMgd2l0aCBib3VuZGFyeSBjb25kaXRpb25zLCByYW5nZSBsaW1pdHMgb3Igb3RoZXIgbG9naWMgZXJyb3JzIGFyZSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpLCBMT0NLREVQIG9yIGdlbmVyYWwgY29kZSByZXZpZXc7IHRoZXNlIGFyZW4mIzM5O3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQmIzM5O3MgYSBjbGVhbiBwYXRjaCB0aGF0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBJJiMzOTtsbCBtYWtlIGEgbm90ZSBvZiBteSByZWFzb25pbmcgZm9yIGNvbnRyYXN0aW5nIEtNU0FOIGFuZCBLQVNBTi4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwZXItc29ja2V0IEVDTiBhbmQgQWNjRUNOIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoVENQX0VDTiBhbmQgVENQX0VDTl9PUFRJT04pIHZpYSBzZXRzb2Nrb3B0L2dldHNvY2tvcHQgYW5kIEJQRiBzb2Nrb3BzLCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgc3lzY3Rscy5cblxuS01TQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcbi0gVGhlIG5ldyBmaWVsZHMgYGVjbl9tb2RlYCBhbmQgYGVjbl9vcHRpb25gIGluIGBzdHJ1Y3QgdGNwX3NvY2tgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBUQ1BfRUNOX01PREVfVU5TUEVDYCBhbmQgYFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQ2AgaW4gYHRjcF9pbml0X3NvY2soKWAgYW5kIGNvcGllZCBhY3Jvc3Mgc29ja2V0IGNsb25lcy5cbi0gSW4gYGRvX3RjcF9nZXRzb2Nrb3B0KClgLCByZWFkaW5nIHRoZXNlIGZpZWxkcyBpbml0aWFsaXplcyB0aGUgZnVsbCBgaW50IHZhbGAgYmVmb3JlIGBjb3B5X3RvX3NvY2twdHIoKWAgY29waWVzIHRoZSBkYXRhIHRvIHVzZXIgc3BhY2UuIE5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgYnl0ZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cbi0gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBidWZmZXIgbGVuZ3RoIG1hbmlwdWxhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIHRoZSBjaGFuZ2VzIHByZXNlbnQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBlci1zb2NrZXQgRUNOIGFuZCBBY2NFQ04gY29uZmlndXJhdGlvbiBvcHRpb25zIChUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTikgdmlhIHNldHNvY2tvcHQvZ2V0c29ja29wdCBhbmQgQlBGIHNvY2tvcHMsIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBzeXNjdGxzLlxuXG5LTVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSBUaGUgbmV3IGZpZWxkcyBgZWNuX21vZGVgIGFuZCBgZWNuX29wdGlvbmAgaW4gYHN0cnVjdCB0Y3Bfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFRDUF9FQ05fTU9ERV9VTlNQRUNgIGFuZCBgVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDYCBpbiBgdGNwX2luaXRfc29jaygpYCBhbmQgY29waWVkIGFjcm9zcyBzb2NrZXQgY2xvbmVzLlxuLSBJbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAsIHJlYWRpbmcgdGhlc2UgZmllbGRzIGluaXRpYWxpemVzIHRoZSBmdWxsIGBpbnQgdmFsYCBiZWZvcmUgYGNvcHlfdG9fc29ja3B0cigpYCBjb3BpZXMgdGhlIGRhdGEgdG8gdXNlciBzcGFjZS4gTm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBzdGFjayBieXRlcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxuLSBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGJ1ZmZlciBsZW5ndGggbWFuaXB1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYXMgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6MTQuNzk0MDczOTQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NzU3Mjg2OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fdGNwX3NldHNvY2tvcHRcIixcbiAgICBcImRvX3RjcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJ0Y3BfY29ubl9yZXF1ZXN0XCIsXG4gICAgXCJ0Y3BfbWFrZV9zeW5hY2tcIixcbiAgICBcInRjcF9jb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1zb2NrZXQgRUNOIGFuZCBBY2NFQ04gY29uZmlndXJhdGlvbiBvcHRpb25zIChUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTikgdmlhIHNldHNvY2tvcHQvZ2V0c29ja29wdCBhbmQgQlBGIHNvY2tvcHMsIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBzeXNjdGxzLlxcblxcbktNU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XFxuLSBUaGUgbmV3IGZpZWxkcyBgZWNuX21vZGVgIGFuZCBgZWNuX29wdGlvbmAgaW4gYHN0cnVjdCB0Y3Bfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFRDUF9FQ05fTU9ERV9VTlNQRUNgIGFuZCBgVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDYCBpbiBgdGNwX2luaXRfc29jaygpYCBhbmQgY29waWVkIGFjcm9zcyBzb2NrZXQgY2xvbmVzLlxcbi0gSW4gYGRvX3RjcF9nZXRzb2Nrb3B0KClgLCByZWFkaW5nIHRoZXNlIGZpZWxkcyBpbml0aWFsaXplcyB0aGUgZnVsbCBgaW50IHZhbGAgYmVmb3JlIGBjb3B5X3RvX3NvY2twdHIoKWAgY29waWVzIHRoZSBkYXRhIHRvIHVzZXIgc3BhY2UuIE5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgYnl0ZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgYnVmZmVyIGxlbmd0aCBtYW5pcHVsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBpbnRyb2R1Y2VkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIHRoZSBjaGFuZ2VzIHByZXNlbnQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTiBzb2NrZXQgb3B0aW9ucyB0byBhbGxvdyBwZXItc29ja2V0IGNvbmZpZ3VyYXRpb24gYW5kIG92ZXJyaWRlIG9mIHRoZSB0Y3BfZWNuIGFuZCB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgc2V0dGluZ3MuIEl0IG1vZGlmaWVzIFRDUCBzb2NrZXQgb3B0aW9ucyBoYW5kbGluZyAoZ2V0c29ja29wdC9zZXRzb2Nrb3B0KSwgQlBGIHNvY2tvcHQgZmlsdGVycywgVENQIFNZTi9TWU4tQUNLIG9wdGlvbiBnZW5lcmF0aW9uLCBhbmQgVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBwcm9jZXNzaW5nIGluIHRoZSBjb3JlIElQdjQvVENQIG5ldHdvcmtpbmcgc3RhY2suXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA2OjE0Ljc5NDA3OTE1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwNTk5MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjMwNGQwNGM2MzdiY2I0YTBlNDI0ZWU0Zjc1NGQ4MzRhMzk5MjAxNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOTowNjoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uMmU1NWQ5ZTJlYjA5YSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuQEAgLTUyOCw2ICs1MjgsNDMgQEAgdGNwX2Vjbl9mYWxsYmFjayAtIEJPT0xFQU5cXG4gXFxuIFxcdERlZmF1bHQ6IDEgKGVuYWJsZWQpXFxuIFxcbit0Y3BfZWNuIChzb2NrZXQgb3B0aW9uKSAtIFRDUF9FQ05cXG4rXFx0UGVyLXNvY2tldCBjb250cm9sIG9mIEVDTiBtb2RlLCBhbGxvd2luZyBwZXItY29ubmVjdGlvbiBvdmVycmlkZSBvZiB0aGVcXG4rXFx0dGNwX2VjbiBzeXNjdGwgc2V0dGluZy4gVGhpcyBlbmFibGVzIEw0UyAoTG93IExhdGVuY3ksIExvdyBMb3NzLCBTY2FsYWJsZVxcbitcXHRUaHJvdWdocHV0KSBjb25maWd1cmF0aW9uIG9uIGEgcGVyLXNvY2tldCBiYXNpcy5cXG4rXFxuK1xcdFNldHRpbmcgdGhpcyBzb2NrZXQgb3B0aW9uIHRvIGFueSB2YWx1ZSBleGNlcHQgMjU1IHdpbGwgb3ZlcnJpZGUgdGhlXFxuK1xcdHN5c3RlbS13aWRlIHRjcF9lY24gc3lzY3RsIGZvciB0aGF0IHBhcnRpY3VsYXIgc29ja2V0LiBBIHZhbHVlIG9mIDI1NVxcbitcXHQoVENQX0VDTl9NT0RFX1VOU1BFQykgbWVhbnMgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBzeXNjdGwgdmFsdWUuXFxuK1xcbitcXHRQb3NzaWJsZSB2YWx1ZXM6IDAtNSAoc2VlIHRjcF9lY24gc3lzY3RsIGRlc2NyaXB0aW9uIGFib3ZlKSwgb3IgMjU1IHRvXFxuK1xcdHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgKHN5c2N0bF90Y3BfZWNuKS5cXG4rXFxuK1xcdEV4YW1wbGU6OlxcbitcXG4rXFx0XFx0aW50IHZhbCA9IDM7ICAvKiBBY2NFQ04gbW9kZSAqL1xcbitcXHRcXHRzZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfRUNOLCBcXHUwMDI2dmFsLCBzaXplb2YodmFsKSk7XFxuK1xcbitcXHREZWZhdWx0OiAyNTUgKHVuc3BlY2lmaWVkIC0gdXNlcyB0Y3BfZWNuIHN5c2N0bCB2YWx1ZSlcXG4rXFxuK3RjcF9lY25fb3B0aW9uIChzb2NrZXQgb3B0aW9uKSAtIFRDUF9FQ05fT1BUSU9OXFxuK1xcdFBlci1zb2NrZXQgY29udHJvbCBvZiBBY2N1cmF0ZSBFQ04gKEFjY0VDTikgb3B0aW9uIHNlbmRpbmcgYmVoYXZpb3IsXFxuK1xcdGFsbG93aW5nIHBlci1jb25uZWN0aW9uIG92ZXJyaWRlIG9mIHRoZSB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgc2V0dGluZy5cXG4rXFxuK1xcdFNldHRpbmcgdGhpcyBzb2NrZXQgb3B0aW9uIHRvIGFueSB2YWx1ZSBleGNlcHQgMjU1IHdpbGwgb3ZlcnJpZGUgdGhlXFxuK1xcdHN5c3RlbS13aWRlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBmb3IgdGhhdCBwYXJ0aWN1bGFyIHNvY2tldC4gQSB2YWx1ZSBvZlxcbitcXHQyNTUgKFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQykgbWVhbnMgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBzeXNjdGwgdmFsdWUuXFxuK1xcbitcXHRQb3NzaWJsZSB2YWx1ZXM6IDAtMyAoc2VlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBkZXNjcmlwdGlvbiBhYm92ZSksIG9yIDI1NVxcbitcXHR0byB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IChzeXNjdGxfdGNwX2Vjbl9vcHRpb24pLlxcbitcXG4rXFx0RXhhbXBsZTo6XFxuK1xcbitcXHRcXHRpbnQgdmFsID0gMjsgIC8qIFNlbmQgQWNjRUNOIG9wdGlvbiBvbiBldmVyeSBwYWNrZXQgKi9cXG4rXFx0XFx0c2V0c29ja29wdChmZCwgU09MX1RDUCwgVENQX0VDTl9PUFRJT04sIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpKTtcXG4rXFxuK1xcdERlZmF1bHQ6IDI1NSAodW5zcGVjaWZpZWQgLSB1c2VzIHRjcF9lY25fb3B0aW9uIHN5c2N0bCB2YWx1ZSlcXG4rXFxuIHRjcF9mYWNrIC0gQk9PTEVBTlxcbiBcXHRUaGlzIGlzIGEgbGVnYWN5IG9wdGlvbiwgaXQgaGFzIG5vIGVmZmVjdCBhbnltb3JlLlxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmhcXG5pbmRleCA2YThjNzc3MTkzMjJmLi43Y2IxZTc2NWY0NjE4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdGNwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oXFxuQEAgLTI4OSw2ICsyODksMTMgQEAgc3RydWN0IHRjcF9zb2NrIHtcXG4gXFx0XFx0XFx0XFx0XFx0ICogc2Fja2VkX291dCBcXHUwMDNlIDApXFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXHR1OFxcdGVjbl9mbGFncztcXHQvKiBFQ04gc3RhdHVzIGJpdHMuXFx0XFx0XFx0Ki9cXG4rXFx0dThcXHRlY25fbW9kZTtcXHQvKiBQZXItc29ja2V0IEVDTiBtb2RlIG92ZXJyaWRlXFxuK1xcdFxcdFxcdFxcdCAqIChUQ1BfRUNOX01PREVfVU5TUEVDID0gdXNlIHN5c2N0bClcXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdHU4XFx0ZWNuX29wdGlvbjtcXHQvKiBQZXItc29ja2V0IEFjY0VDTiBvcHRpb24gb3ZlcnJpZGVcXG4rXFx0XFx0XFx0XFx0ICogKFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyA9IHVzZSBzeXNjdGwpXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXG4gXFx0X19jYWNoZWxpbmVfZ3JvdXBfZW5kKHRjcF9zb2NrX3dyaXRlX3R4KTtcXG4gXFxuIFxcdC8qIFRYUlggcmVhZC13cml0ZSBob3RwYXRoIGNhY2hlIGxpbmVzICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcF9lY24uaCBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaFxcbmluZGV4IDg2NWQ1YzVhNzcxOGQuLjkzMWUwODc3MTc2YzcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvdGNwX2Vjbi5oXFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwX2Vjbi5oXFxuQEAgLTIyLDYgKzIyLDcgQEAgZW51bSB0Y3BfZWNuX21vZGUge1xcbiBcXHRUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfQUNDRUNOID0gMyxcXG4gXFx0VENQX0VDTl9JTl9BQ0NFQ05fT1VUX0VDTiA9IDQsXFxuIFxcdFRDUF9FQ05fSU5fQUNDRUNOX09VVF9OT0VDTiA9IDUsXFxuK1xcdFRDUF9FQ05fTU9ERV9VTlNQRUMgPSAyNTUsXFx0LyogVXNlIHN5c2N0bCBkZWZhdWx0IChwZXItc29ja2V0KSAqL1xcbiB9O1xcbiBcXG4gLyogQWNjRUNOIG9wdGlvbiBzZW5kaW5nIHdoZW4gQWNjRUNOIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBuZWdvdGlhdGVkICovXFxuQEAgLTMwLDggKzMxLDI5IEBAIGVudW0gdGNwX2FjY2Vjbl9vcHRpb24ge1xcbiBcXHRUQ1BfQUNDRUNOX09QVElPTl9NSU5JTVVNID0gMSxcXG4gXFx0VENQX0FDQ0VDTl9PUFRJT05fRlVMTCA9IDIsXFxuIFxcdFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QgPSAzLFxcbitcXHRUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgPSAyNTUsXFx0LyogVXNlIHN5c2N0bCBkZWZhdWx0IChwZXItc29ja2V0KSAqL1xcbiB9O1xcbiBcXG4rLyogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIEVDTiBtb2RlOiBwZXItc29ja2V0IG92ZXJyaWRlIG9yIHN5c2N0bCBmYWxsYmFjayAqL1xcbitzdGF0aWMgaW5saW5lIHU4IHRjcF9lY25fbW9kZV9lZmYoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHU4IG1vZGUgPSB0Y3Bfc2soc2spLVxcdTAwM2VlY25fbW9kZTtcXG4rXFxuK1xcdGlmIChtb2RlID09IFRDUF9FQ05fTU9ERV9VTlNQRUMpXFxuK1xcdFxcdHJldHVybiBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVxcdTAwM2VpcHY0LnN5c2N0bF90Y3BfZWNuKTtcXG4rXFx0cmV0dXJuIG1vZGU7XFxuK31cXG4rXFxuKy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBBY2NFQ04gb3B0aW9uOiBwZXItc29ja2V0IG92ZXJyaWRlIG9yIHN5c2N0bCBmYWxsYmFjayAqL1xcbitzdGF0aWMgaW5saW5lIHU4IHRjcF9hY2NlY25fb3B0aW9uX2VmZihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0dTggb3B0ID0gdGNwX3NrKHNrKS1cXHUwMDNlZWNuX29wdGlvbjtcXG4rXFxuK1xcdGlmIChvcHQgPT0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDKVxcbitcXHRcXHRyZXR1cm4gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pO1xcbitcXHRyZXR1cm4gb3B0O1xcbit9XFxuK1xcbiAvKiBBcHBseSBlaXRoZXIgRUNUKDApIG9yIEVDVCgxKSBiYXNlZCBvbiBUQ1BfQ09OR19FQ1RfMV9ORUdPVElBVElPTiBmbGFnICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBJTkVUX0VDTl94bWl0X2VjdF8xX25lZ290aWF0aW9uKHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbkBAIC01OTksNyArNjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRjcF9lY25fc2VuZF9zeW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4gXFx0Ym9vbCBicGZfbmVlZHNfZWNuID0gdGNwX2JwZl9jYV9uZWVkc19lY24oc2spO1xcbiBcXHRib29sIHVzZV9lY24sIHVzZV9hY2NlY247XFxuLVxcdHU4IHRjcF9lY24gPSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVxcdTAwM2VpcHY0LnN5c2N0bF90Y3BfZWNuKTtcXG4rXFx0dTggdGNwX2VjbiA9IHRjcF9lY25fbW9kZV9lZmYoc2spO1xcbiBcXG4gXFx0dXNlX2FjY2VjbiA9IHRjcF9lY24gPT0gVENQX0VDTl9JTl9BQ0NFQ05fT1VUX0FDQ0VDTiB8fFxcbiBcXHRcXHQgICAgIHRjcF9jYV9uZWVkc19hY2NlY24oc2spO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5pbmRleCA3MzJiMzVjYzA4ZDFjLi5jNThiMTYzM2JiNDZlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbkBAIC0yOTg1LDcgKzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7XFxuICAqIFxcdFxcdCAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosXFxuICAqIFxcdFxcdCAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosXFxuICAqIFxcdFxcdCAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKixcXG4tICpcXHRcXHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLlxcbisgKlxcdFxcdCAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiosXFxuKyAqXFx0XFx0ICAqKlRDUF9FQ04qKiwgKipUQ1BfRUNOX09QVElPTioqLlxcbiAgKiBcXHRcXHQqICoqSVBQUk9UT19JUCoqLCB3aGljaCBzdXBwb3J0cyAqb3B0bmFtZSogKipJUF9UT1MqKi5cXG4gICogXFx0XFx0KiAqKklQUFJPVE9fSVBWNioqLCB3aGljaCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nICpvcHRuYW1lKlxcXFwgczpcXG4gICogXFx0XFx0ICAqKklQVjZfVENMQVNTKiosICoqSVBWNl9BVVRPRkxPV0xBQkVMKiouXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaCBiL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxcbmluZGV4IDAzNzcyZGQ0ZDM5OTIuLjAxZWJiMzQ4YmEyNzQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXFxuQEAgLTE0Miw2ICsxNDIsOCBAQCBlbnVtIHtcXG4gI2RlZmluZSBUQ1BfUlRPX01BWF9NU1xcdFxcdDQ0XFx0LyogbWF4IHJ0byB0aW1lIGluIG1zICovXFxuICNkZWZpbmUgVENQX1JUT19NSU5fVVNcXHRcXHQ0NVxcdC8qIG1pbiBydG8gdGltZSBpbiB1cyAqL1xcbiAjZGVmaW5lIFRDUF9ERUxBQ0tfTUFYX1VTXFx0NDZcXHQvKiBtYXggZGVsYXllZCBhY2sgdGltZSBpbiB1cyAqL1xcbisjZGVmaW5lIFRDUF9FQ05cXHRcXHRcXHQ0N1xcdC8qIFBlci1zb2NrZXQgRUNOIG1vZGUgKDAtNSwgMjU1PXVzZSBzeXNjdGwpICovXFxuKyNkZWZpbmUgVENQX0VDTl9PUFRJT05cXHRcXHQ0OFxcdC8qIFBlci1zb2NrZXQgQWNjRUNOIG9wdGlvbiAoMC0zLCAyNTU9dXNlIHN5c2N0bCkgKi9cXG4gXFxuICNkZWZpbmUgVENQX1JFUEFJUl9PTlxcdFxcdDFcXG4gI2RlZmluZSBUQ1BfUkVQQUlSX09GRlxcdFxcdDBcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjk5M2IzMWUxMGI5NDQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC01NjcwLDYgKzU2NzAsOCBAQCBzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbiBcXHRjYXNlIFRDUF9OT1RTRU5UX0xPV0FUOlxcbiBcXHRjYXNlIFRDUF9TQVZFX1NZTjpcXG4gXFx0Y2FzZSBUQ1BfUlRPX01BWF9NUzpcXG4rXFx0Y2FzZSBUQ1BfRUNOOlxcbitcXHRjYXNlIFRDUF9FQ05fT1BUSU9OOlxcbiBcXHRcXHRpZiAoKm9wdGxlbiAhPSBzaXplb2YoaW50KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGJyZWFrO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXFxuaW5kZXggMWM4NjdhMzAyNDQ0Ni4uZmIzNzZhOTdmMGU2ZCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xcbisrKyBiL25ldC9pcHY0L3RjcC5jXFxuQEAgLTQ2Myw2ICs0NjMsOCBAQCB2b2lkIHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbiBcXG4gXFx0dHAtXFx1MDAzZXRzb2Zmc2V0ID0gMDtcXG4gXFx0dHAtXFx1MDAzZXJhY2sucmVvX3duZF9zdGVwcyA9IDE7XFxuK1xcdHRwLVxcdTAwM2VlY25fbW9kZSA9IFRDUF9FQ05fTU9ERV9VTlNQRUM7XFxuK1xcdHRwLVxcdTAwM2VlY25fb3B0aW9uID0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDO1xcbiBcXG4gXFx0c2stXFx1MDAzZXNrX3dyaXRlX3NwYWNlID0gc2tfc3RyZWFtX3dyaXRlX3NwYWNlO1xcbiBcXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1VTRV9XUklURV9RVUVVRSk7XFxuQEAgLTQxNjAsNiArNDE2MiwxOCBAQCBpbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHR0Y3BfZW5hYmxlX3R4X2RlbGF5KHNrLCB2YWwpO1xcbiBcXHRcXHRXUklURV9PTkNFKHRwLVxcdTAwM2V0Y3BfdHhfZGVsYXksIHZhbCk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFRDUF9FQ046XFxuK1xcdFxcdGlmICh2YWwgIT0gVENQX0VDTl9NT0RFX1VOU1BFQyBcXHUwMDI2XFx1MDAyNiAodmFsIFxcdTAwM2MgMCB8fCB2YWwgXFx1MDAzZSBUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfTk9FQ04pKVxcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UodHAtXFx1MDAzZWVjbl9tb2RlLCB2YWwpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcXG4rXFx0XFx0aWYgKHZhbCAhPSBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgXFx1MDAyNlxcdTAwMjYgKHZhbCBcXHUwMDNjIDAgfHwgdmFsIFxcdTAwM2UgVENQX0FDQ0VDTl9PUFRJT05fUEVSU0lTVCkpXFxuK1xcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0V1JJVEVfT05DRSh0cC1cXHUwMDNlZWNuX29wdGlvbiwgdmFsKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGVyciA9IC1FTk9QUk9UT09QVDtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTQ4NDIsNiArNDg1NiwxMiBAQCBpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXFxuIFxcdGNhc2UgVENQX0RFTEFDS19NQVhfVVM6XFxuIFxcdFxcdHZhbCA9IGppZmZpZXNfdG9fdXNlY3MoUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19kZWxhY2tfbWF4KSk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFRDUF9FQ046XFxuK1xcdFxcdHZhbCA9IFJFQURfT05DRSh0cC1cXHUwMDNlZWNuX21vZGUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcXG4rXFx0XFx0dmFsID0gUkVBRF9PTkNFKHRwLVxcdTAwM2VlY25fb3B0aW9uKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuIFxcdH1cXG5AQCAtNTI1Niw2ICs1Mjc2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHRjcF9zdHJ1Y3RfY2hlY2sodm9pZClcXG4gXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgdHNvcnRlZF9zZW50X3F1ZXVlKTtcXG4gXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgaGlnaGVzdF9zYWNrKTtcXG4gXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX2ZsYWdzKTtcXG4rXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX21vZGUpO1xcbitcXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fb3B0aW9uKTtcXG4gXFxuIFxcdC8qIFRYUlggcmVhZC13cml0ZSBob3RwYXRoIGNhY2hlIGxpbmVzICovXFxuIFxcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHhyeCwgcHJlZF9mbGFncyk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG5pbmRleCAwZjYwYTFkYmY5Mjc0Li4wMDQzYjRiMmJjOTIyIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG5AQCAtNzQ1NywxMyArNzQ1NywxMiBAQCBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpO1xcbi1cXHRjb25zdCBzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChsaXN0ZW5fc2spO1xcbiBcXHRib29sIHRoX2VjbiA9IHRoLVxcdTAwM2VlY2UgXFx1MDAyNlxcdTAwMjYgdGgtXFx1MDAzZWN3cjtcXG4gXFx0Ym9vbCBlY3QsIGVjbl9vaztcXG4gXFx0dTMyIGVjbl9va19kc3Q7XFxuIFxcbiBcXHRpZiAodGNwX2FjY2Vjbl9zeW5fcmVxdWVzdGVkKHRoKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY24pIFxcdTAwM2U9IDMgfHxcXG4rXFx0ICAgICh0Y3BfZWNuX21vZGVfZWZmKGxpc3Rlbl9zaykgXFx1MDAzZT0gMyB8fFxcbiBcXHQgICAgIHRjcF9jYV9uZWVkc19hY2NlY24obGlzdGVuX3NrKSkpIHtcXG4gXFx0XFx0aW5ldF9yc2socmVxKS1cXHUwMDNlZWNuX29rID0gMTtcXG4gXFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2VhY2NlY25fb2sgPSAxO1xcbkBAIC03NDc3LDcgKzc0NzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFxuIFxcdGVjdCA9ICFJTkVUX0VDTl9pc19ub3RfZWN0KFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlaXBfZHNmaWVsZCk7XFxuIFxcdGVjbl9va19kc3QgPSBkc3RfZmVhdHVyZShkc3QsIERTVF9GRUFUVVJFX0VDTl9NQVNLKTtcXG4tXFx0ZWNuX29rID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2VjbikgfHwgZWNuX29rX2RzdDtcXG4rXFx0ZWNuX29rID0gdGNwX2Vjbl9tb2RlX2VmZihsaXN0ZW5fc2spIHx8IGVjbl9va19kc3Q7XFxuIFxcbiBcXHRpZiAoKCghZWN0IHx8IHRoLVxcdTAwM2VyZXMxIHx8IHRoLVxcdTAwM2VhZSkgXFx1MDAyNlxcdTAwMjYgZWNuX29rKSB8fFxcbiBcXHQgICAgdGNwX2NhX25lZWRzX2VjbihsaXN0ZW5fc2spIHx8XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xcbmluZGV4IDAwNDE3YTQyOTIyMjUuLjgyYjk2YzQwMTVmZDAgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXFxuQEAgLTEwNDUsNyArMTA0NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHVubGlrZWx5KChUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXRjcF9mbGFncyBcXHUwMDI2IFRDUEhEUl9BQ0spIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgdGNwX2Vjbl9tb2RlX2FjY2Vjbih0cCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICBpbmV0X2NzayhzayktXFx1MDAzZWljc2tfcmV0cmFuc21pdHMgXFx1MDAzYyAyIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAgUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIHJlbWFpbmluZyBcXHUwMDNlPSBUQ1BPTEVOX0FDQ0VDTl9CQVNFKSkge1xcbiBcXHRcXHRvcHRzLVxcdTAwM2V1c2Vfc3luYWNrX2Vjbl9ieXRlcyA9IDE7XFxuIFxcdFxcdHJlbWFpbmluZyAtPSB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKG9wdHMsIDAsIHJlbWFpbmluZyk7XFxuQEAgLTExMzMsNyArMTEzMyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gXFx0c21jX3NldF9vcHRpb25fY29uZCh0Y3Bfc2soc2spLCBpcmVxLCBvcHRzLCBcXHUwMDI2cmVtYWluaW5nKTtcXG4gXFxuIFxcdGlmICh0cmVxLVxcdTAwM2VhY2NlY25fb2sgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIFJFQURfT05DRShzb2NrX25ldChzayktXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgc3luYWNrX3R5cGUgIT0gVENQX1NZTkFDS19SRVRSQU5TIFxcdTAwMjZcXHUwMDI2IHJlbWFpbmluZyBcXHUwMDNlPSBUQ1BPTEVOX0FDQ0VDTl9CQVNFKSB7XFxuIFxcdFxcdG9wdHMtXFx1MDAzZXVzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTtcXG4gXFx0XFx0cmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTtcXG5AQCAtMTIyMSw3ICsxMjIxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2JcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHRjcF9lY25fbW9kZV9hY2NlY24odHApKSB7XFxuLVxcdFxcdGludCBlY25fb3B0ID0gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pO1xcbitcXHRcXHRpbnQgZWNuX29wdCA9IHRjcF9hY2NlY25fb3B0aW9uX2VmZihzayk7XFxuIFxcbiBcXHRcXHRpZiAoZWNuX29wdCBcXHUwMDI2XFx1MDAyNiB0cC1cXHUwMDNlc2F3X2FjY2Vjbl9vcHQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIChlY25fb3B0IFxcdTAwM2U9IFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QgfHxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggNzMyYjM1Y2MwOGQxYy4uYzU4YjE2MzNiYjQ2ZSAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5AQCAtMjk4NSw3ICsyOTg1LDggQEAgdW5pb24gYnBmX2F0dHIge1xcbiAgKiBcXHRcXHQgICoqVENQX1NZTkNOVCoqLCAqKlRDUF9VU0VSX1RJTUVPVVQqKiwgKipUQ1BfTk9UU0VOVF9MT1dBVCoqLFxcbiAgKiBcXHRcXHQgICoqVENQX05PREVMQVkqKiwgKipUQ1BfTUFYU0VHKiosICoqVENQX1dJTkRPV19DTEFNUCoqLFxcbiAgKiBcXHRcXHQgICoqVENQX1RISU5fTElORUFSX1RJTUVPVVRTKiosICoqVENQX0JQRl9ERUxBQ0tfTUFYKiosXFxuLSAqXFx0XFx0ICAqKlRDUF9CUEZfUlRPX01JTioqLCAqKlRDUF9CUEZfU09DS19PUFNfQ0JfRkxBR1MqKi5cXG4rICpcXHRcXHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLFxcbisgKlxcdFxcdCAgKipUQ1BfRUNOKiosICoqVENQX0VDTl9PUFRJT04qKi5cXG4gICogXFx0XFx0KiAqKklQUFJPVE9fSVAqKiwgd2hpY2ggc3VwcG9ydHMgKm9wdG5hbWUqICoqSVBfVE9TKiouXFxuICAqIFxcdFxcdCogKipJUFBST1RPX0lQVjYqKiwgd2hpY2ggc3VwcG9ydHMgdGhlIGZvbGxvd2luZyAqb3B0bmFtZSpcXFxcIHM6XFxuICAqIFxcdFxcdCAgKipJUFY2X1RDTEFTUyoqLCAqKklQVjZfQVVUT0ZMT1dMQUJFTCoqLlxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmhcXG5pbmRleCAxM2NlZWIzOTVlYjhmLi40ZjUyYjlkZjQyNjYxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxcbkBAIC0xMjgsNyArMTI4LDggQEAgZW51bSB7XFxuICNkZWZpbmUgVENQX0NNX0lOUVxcdFxcdFRDUF9JTlFcXG4gXFxuICNkZWZpbmUgVENQX1RYX0RFTEFZXFx0XFx0MzdcXHQvKiBkZWxheSBvdXRnb2luZyBwYWNrZXRzIGJ5IFhYIHVzZWMgKi9cXG4tXFxuKyNkZWZpbmUgVENQX0VDTlxcdFxcdFxcdDQ3XFx0LyogUGVyLXNvY2tldCBFQ04gbW9kZSAoMC01LCAyNTU9dXNlIHN5c2N0bCkgKi9cXG4rI2RlZmluZSBUQ1BfRUNOX09QVElPTlxcdFxcdDQ4XFx0LyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqL1xcbiBcXG4gI2RlZmluZSBUQ1BfUkVQQUlSX09OXFx0XFx0MVxcbiAjZGVmaW5lIFRDUF9SRVBBSVJfT0ZGXFx0XFx0MFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zZXRnZXRfc29ja29wdC5jXFxuaW5kZXggZDk2ZTk5YjY3YWViZi4uZmI5N2ZhMGJjN2I0NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zZXRnZXRfc29ja29wdC5jXFxuQEAgLTY0LDYgKzY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzb2Nrb3B0X3Rlc3Qgc29sX3RjcF90ZXN0c1tdID0ge1xcbiBcXHR7IC5vcHQgPSBUQ1BfQlBGX0RFTEFDS19NQVgsIC5uZXcgPSAzMDAwMCwgLmV4cGVjdGVkID0gMzAwMDAsIH0sXFxuIFxcdHsgLm9wdCA9IFRDUF9CUEZfUlRPX01JTiwgLm5ldyA9IDMwMDAwLCAuZXhwZWN0ZWQgPSAzMDAwMCwgfSxcXG4gXFx0eyAub3B0ID0gVENQX1JUT19NQVhfTVMsIC5uZXcgPSAyMDAwLCAuZXhwZWN0ZWQgPSAyMDAwLCB9LFxcbitcXHR7IC5vcHQgPSBUQ1BfRUNOLCAubmV3ID0gMywgLmV4cGVjdGVkID0gMywgLnJlc3RvcmUgPSAyNTUsIH0sXFxuK1xcdHsgLm9wdCA9IFRDUF9FQ05fT1BUSU9OLCAubmV3ID0gMiwgLmV4cGVjdGVkID0gMiwgLnJlc3RvcmUgPSAyNTUsIH0sXFxuIFxcdHsgLm9wdCA9IDAsIH0sXFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNjoxNS4zNzUyOTk1NTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU2OTAxMjI3NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fdGNwX3NldHNvY2tvcHRcIixcbiAgICBcImRvX3RjcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJ0Y3BfY29ubl9yZXF1ZXN0XCIsXG4gICAgXCJ0Y3BfbWFrZV9zeW5hY2tcIixcbiAgICBcInRjcF9jb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTiBzb2NrZXQgb3B0aW9ucyB0byBhbGxvdyBwZXItc29ja2V0IGNvbmZpZ3VyYXRpb24gYW5kIG92ZXJyaWRlIG9mIHRoZSB0Y3BfZWNuIGFuZCB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgc2V0dGluZ3MuIEl0IG1vZGlmaWVzIFRDUCBzb2NrZXQgb3B0aW9ucyBoYW5kbGluZyAoZ2V0c29ja29wdC9zZXRzb2Nrb3B0KSwgQlBGIHNvY2tvcHQgZmlsdGVycywgVENQIFNZTi9TWU4tQUNLIG9wdGlvbiBnZW5lcmF0aW9uLCBhbmQgVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBwcm9jZXNzaW5nIGluIHRoZSBjb3JlIElQdjQvVENQIG5ldHdvcmtpbmcgc3RhY2suXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjMwNGQwNGM2MzdiY2I0YTBlNDI0ZWU0Zjc1NGQ4MzRhMzk5MjAxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDA5OjA2OjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uMmU1NWQ5ZTJlYjA5YSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuQEAgLTUyOCw2ICs1MjgsNDMgQEAgdGNwX2Vjbl9mYWxsYmFjayAtIEJPT0xFQU5cbiBcbiBcdERlZmF1bHQ6IDEgKGVuYWJsZWQpXG4gXG4rdGNwX2VjbiAoc29ja2V0IG9wdGlvbikgLSBUQ1BfRUNOXG4rXHRQZXItc29ja2V0IGNvbnRyb2wgb2YgRUNOIG1vZGUsIGFsbG93aW5nIHBlci1jb25uZWN0aW9uIG92ZXJyaWRlIG9mIHRoZVxuK1x0dGNwX2VjbiBzeXNjdGwgc2V0dGluZy4gVGhpcyBlbmFibGVzIEw0UyAoTG93IExhdGVuY3ksIExvdyBMb3NzLCBTY2FsYWJsZVxuK1x0VGhyb3VnaHB1dCkgY29uZmlndXJhdGlvbiBvbiBhIHBlci1zb2NrZXQgYmFzaXMuXG4rXG4rXHRTZXR0aW5nIHRoaXMgc29ja2V0IG9wdGlvbiB0byBhbnkgdmFsdWUgZXhjZXB0IDI1NSB3aWxsIG92ZXJyaWRlIHRoZVxuK1x0c3lzdGVtLXdpZGUgdGNwX2VjbiBzeXNjdGwgZm9yIHRoYXQgcGFydGljdWxhciBzb2NrZXQuIEEgdmFsdWUgb2YgMjU1XG4rXHQoVENQX0VDTl9NT0RFX1VOU1BFQykgbWVhbnMgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBzeXNjdGwgdmFsdWUuXG4rXG4rXHRQb3NzaWJsZSB2YWx1ZXM6IDAtNSAoc2VlIHRjcF9lY24gc3lzY3RsIGRlc2NyaXB0aW9uIGFib3ZlKSwgb3IgMjU1IHRvXG4rXHR1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IChzeXNjdGxfdGNwX2VjbikuXG4rXG4rXHRFeGFtcGxlOjpcbitcbitcdFx0aW50IHZhbCA9IDM7ICAvKiBBY2NFQ04gbW9kZSAqL1xuK1x0XHRzZXRzb2Nrb3B0KGZkLCBTT0xfVENQLCBUQ1BfRUNOLCBcdTAwMjZ2YWwsIHNpemVvZih2YWwpKTtcbitcbitcdERlZmF1bHQ6IDI1NSAodW5zcGVjaWZpZWQgLSB1c2VzIHRjcF9lY24gc3lzY3RsIHZhbHVlKVxuK1xuK3RjcF9lY25fb3B0aW9uIChzb2NrZXQgb3B0aW9uKSAtIFRDUF9FQ05fT1BUSU9OXG4rXHRQZXItc29ja2V0IGNvbnRyb2wgb2YgQWNjdXJhdGUgRUNOIChBY2NFQ04pIG9wdGlvbiBzZW5kaW5nIGJlaGF2aW9yLFxuK1x0YWxsb3dpbmcgcGVyLWNvbm5lY3Rpb24gb3ZlcnJpZGUgb2YgdGhlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBzZXR0aW5nLlxuK1xuK1x0U2V0dGluZyB0aGlzIHNvY2tldCBvcHRpb24gdG8gYW55IHZhbHVlIGV4Y2VwdCAyNTUgd2lsbCBvdmVycmlkZSB0aGVcbitcdHN5c3RlbS13aWRlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBmb3IgdGhhdCBwYXJ0aWN1bGFyIHNvY2tldC4gQSB2YWx1ZSBvZlxuK1x0MjU1IChUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMpIG1lYW5zIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgc3lzY3RsIHZhbHVlLlxuK1xuK1x0UG9zc2libGUgdmFsdWVzOiAwLTMgKHNlZSB0Y3BfZWNuX29wdGlvbiBzeXNjdGwgZGVzY3JpcHRpb24gYWJvdmUpLCBvciAyNTVcbitcdHRvIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgKHN5c2N0bF90Y3BfZWNuX29wdGlvbikuXG4rXG4rXHRFeGFtcGxlOjpcbitcbitcdFx0aW50IHZhbCA9IDI7ICAvKiBTZW5kIEFjY0VDTiBvcHRpb24gb24gZXZlcnkgcGFja2V0ICovXG4rXHRcdHNldHNvY2tvcHQoZmQsIFNPTF9UQ1AsIFRDUF9FQ05fT1BUSU9OLCBcdTAwMjZ2YWwsIHNpemVvZih2YWwpKTtcbitcbitcdERlZmF1bHQ6IDI1NSAodW5zcGVjaWZpZWQgLSB1c2VzIHRjcF9lY25fb3B0aW9uIHN5c2N0bCB2YWx1ZSlcbitcbiB0Y3BfZmFjayAtIEJPT0xFQU5cbiBcdFRoaXMgaXMgYSBsZWdhY3kgb3B0aW9uLCBpdCBoYXMgbm8gZWZmZWN0IGFueW1vcmUuXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmhcbmluZGV4IDZhOGM3NzcxOTMyMmYuLjdjYjFlNzY1ZjQ2MTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3RjcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oXG5AQCAtMjg5LDYgKzI4OSwxMyBAQCBzdHJ1Y3QgdGNwX3NvY2sge1xuIFx0XHRcdFx0XHQgKiBzYWNrZWRfb3V0IFx1MDAzZSAwKVxuIFx0XHRcdFx0XHQgKi9cbiBcdHU4XHRlY25fZmxhZ3M7XHQvKiBFQ04gc3RhdHVzIGJpdHMuXHRcdFx0Ki9cbitcdHU4XHRlY25fbW9kZTtcdC8qIFBlci1zb2NrZXQgRUNOIG1vZGUgb3ZlcnJpZGVcbitcdFx0XHRcdCAqIChUQ1BfRUNOX01PREVfVU5TUEVDID0gdXNlIHN5c2N0bClcbitcdFx0XHRcdCAqL1xuK1x0dThcdGVjbl9vcHRpb247XHQvKiBQZXItc29ja2V0IEFjY0VDTiBvcHRpb24gb3ZlcnJpZGVcbitcdFx0XHRcdCAqIChUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgPSB1c2Ugc3lzY3RsKVxuK1x0XHRcdFx0ICovXG4rXG4gXHRfX2NhY2hlbGluZV9ncm91cF9lbmQodGNwX3NvY2tfd3JpdGVfdHgpO1xuIFxuIFx0LyogVFhSWCByZWFkLXdyaXRlIGhvdHBhdGggY2FjaGUgbGluZXMgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3BfZWNuLmggYi9pbmNsdWRlL25ldC90Y3BfZWNuLmhcbmluZGV4IDg2NWQ1YzVhNzcxOGQuLjkzMWUwODc3MTc2YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3BfZWNuLmhcbisrKyBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaFxuQEAgLTIyLDYgKzIyLDcgQEAgZW51bSB0Y3BfZWNuX21vZGUge1xuIFx0VENQX0VDTl9JTl9BQ0NFQ05fT1VUX0FDQ0VDTiA9IDMsXG4gXHRUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfRUNOID0gNCxcbiBcdFRDUF9FQ05fSU5fQUNDRUNOX09VVF9OT0VDTiA9IDUsXG4rXHRUQ1BfRUNOX01PREVfVU5TUEVDID0gMjU1LFx0LyogVXNlIHN5c2N0bCBkZWZhdWx0IChwZXItc29ja2V0KSAqL1xuIH07XG4gXG4gLyogQWNjRUNOIG9wdGlvbiBzZW5kaW5nIHdoZW4gQWNjRUNOIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBuZWdvdGlhdGVkICovXG5AQCAtMzAsOCArMzEsMjkgQEAgZW51bSB0Y3BfYWNjZWNuX29wdGlvbiB7XG4gXHRUQ1BfQUNDRUNOX09QVElPTl9NSU5JTVVNID0gMSxcbiBcdFRDUF9BQ0NFQ05fT1BUSU9OX0ZVTEwgPSAyLFxuIFx0VENQX0FDQ0VDTl9PUFRJT05fUEVSU0lTVCA9IDMsXG4rXHRUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgPSAyNTUsXHQvKiBVc2Ugc3lzY3RsIGRlZmF1bHQgKHBlci1zb2NrZXQpICovXG4gfTtcbiBcbisvKiBSZXNvbHZlIHRoZSBlZmZlY3RpdmUgRUNOIG1vZGU6IHBlci1zb2NrZXQgb3ZlcnJpZGUgb3Igc3lzY3RsIGZhbGxiYWNrICovXG4rc3RhdGljIGlubGluZSB1OCB0Y3BfZWNuX21vZGVfZWZmKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHR1OCBtb2RlID0gdGNwX3NrKHNrKS1cdTAwM2VlY25fbW9kZTtcbitcbitcdGlmIChtb2RlID09IFRDUF9FQ05fTU9ERV9VTlNQRUMpXG4rXHRcdHJldHVybiBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY24pO1xuK1x0cmV0dXJuIG1vZGU7XG4rfVxuK1xuKy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBBY2NFQ04gb3B0aW9uOiBwZXItc29ja2V0IG92ZXJyaWRlIG9yIHN5c2N0bCBmYWxsYmFjayAqL1xuK3N0YXRpYyBpbmxpbmUgdTggdGNwX2FjY2Vjbl9vcHRpb25fZWZmKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHR1OCBvcHQgPSB0Y3Bfc2soc2spLVx1MDAzZWVjbl9vcHRpb247XG4rXG4rXHRpZiAob3B0ID09IFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQylcbitcdFx0cmV0dXJuIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pO1xuK1x0cmV0dXJuIG9wdDtcbit9XG4rXG4gLyogQXBwbHkgZWl0aGVyIEVDVCgwKSBvciBFQ1QoMSkgYmFzZWQgb24gVENQX0NPTkdfRUNUXzFfTkVHT1RJQVRJT04gZmxhZyAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBJTkVUX0VDTl94bWl0X2VjdF8xX25lZ290aWF0aW9uKHN0cnVjdCBzb2NrICpzaylcbiB7XG5AQCAtNTk5LDcgKzYyMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfZWNuX3NlbmRfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuIFx0Ym9vbCBicGZfbmVlZHNfZWNuID0gdGNwX2JwZl9jYV9uZWVkc19lY24oc2spO1xuIFx0Ym9vbCB1c2VfZWNuLCB1c2VfYWNjZWNuO1xuLVx0dTggdGNwX2VjbiA9IFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbik7XG4rXHR1OCB0Y3BfZWNuID0gdGNwX2Vjbl9tb2RlX2VmZihzayk7XG4gXG4gXHR1c2VfYWNjZWNuID0gdGNwX2VjbiA9PSBUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfQUNDRUNOIHx8XG4gXHRcdCAgICAgdGNwX2NhX25lZWRzX2FjY2Vjbihzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA3MzJiMzVjYzA4ZDFjLi5jNThiMTYzM2JiNDZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0yOTg1LDcgKzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdCAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosXG4gICogXHRcdCAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosXG4gICogXHRcdCAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKixcbi0gKlx0XHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLlxuKyAqXHRcdCAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiosXG4rICpcdFx0ICAqKlRDUF9FQ04qKiwgKipUQ1BfRUNOX09QVElPTioqLlxuICAqIFx0XHQqICoqSVBQUk9UT19JUCoqLCB3aGljaCBzdXBwb3J0cyAqb3B0bmFtZSogKipJUF9UT1MqKi5cbiAgKiBcdFx0KiAqKklQUFJPVE9fSVBWNioqLCB3aGljaCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nICpvcHRuYW1lKlxcIHM6XG4gICogXHRcdCAgKipJUFY2X1RDTEFTUyoqLCAqKklQVjZfQVVUT0ZMT1dMQUJFTCoqLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaCBiL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxuaW5kZXggMDM3NzJkZDRkMzk5Mi4uMDFlYmIzNDhiYTI3NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG5AQCAtMTQyLDYgKzE0Miw4IEBAIGVudW0ge1xuICNkZWZpbmUgVENQX1JUT19NQVhfTVNcdFx0NDRcdC8qIG1heCBydG8gdGltZSBpbiBtcyAqL1xuICNkZWZpbmUgVENQX1JUT19NSU5fVVNcdFx0NDVcdC8qIG1pbiBydG8gdGltZSBpbiB1cyAqL1xuICNkZWZpbmUgVENQX0RFTEFDS19NQVhfVVNcdDQ2XHQvKiBtYXggZGVsYXllZCBhY2sgdGltZSBpbiB1cyAqL1xuKyNkZWZpbmUgVENQX0VDTlx0XHRcdDQ3XHQvKiBQZXItc29ja2V0IEVDTiBtb2RlICgwLTUsIDI1NT11c2Ugc3lzY3RsKSAqL1xuKyNkZWZpbmUgVENQX0VDTl9PUFRJT05cdFx0NDhcdC8qIFBlci1zb2NrZXQgQWNjRUNOIG9wdGlvbiAoMC0zLCAyNTU9dXNlIHN5c2N0bCkgKi9cbiBcbiAjZGVmaW5lIFRDUF9SRVBBSVJfT05cdFx0MVxuICNkZWZpbmUgVENQX1JFUEFJUl9PRkZcdFx0MFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjk5M2IzMWUxMGI5NDQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC01NjcwLDYgKzU2NzAsOCBAQCBzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuIFx0Y2FzZSBUQ1BfTk9UU0VOVF9MT1dBVDpcbiBcdGNhc2UgVENQX1NBVkVfU1lOOlxuIFx0Y2FzZSBUQ1BfUlRPX01BWF9NUzpcbitcdGNhc2UgVENQX0VDTjpcbitcdGNhc2UgVENQX0VDTl9PUFRJT046XG4gXHRcdGlmICgqb3B0bGVuICE9IHNpemVvZihpbnQpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCAxYzg2N2EzMDI0NDQ2Li5mYjM3NmE5N2YwZTZkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbisrKyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtNDYzLDYgKzQ2Myw4IEBAIHZvaWQgdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHR0cC1cdTAwM2V0c29mZnNldCA9IDA7XG4gXHR0cC1cdTAwM2VyYWNrLnJlb193bmRfc3RlcHMgPSAxO1xuK1x0dHAtXHUwMDNlZWNuX21vZGUgPSBUQ1BfRUNOX01PREVfVU5TUEVDO1xuK1x0dHAtXHUwMDNlZWNuX29wdGlvbiA9IFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQztcbiBcbiBcdHNrLVx1MDAzZXNrX3dyaXRlX3NwYWNlID0gc2tfc3RyZWFtX3dyaXRlX3NwYWNlO1xuIFx0c29ja19zZXRfZmxhZyhzaywgU09DS19VU0VfV1JJVEVfUVVFVUUpO1xuQEAgLTQxNjAsNiArNDE2MiwxOCBAQCBpbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHR0Y3BfZW5hYmxlX3R4X2RlbGF5KHNrLCB2YWwpO1xuIFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZXRjcF90eF9kZWxheSwgdmFsKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFRDUF9FQ046XG4rXHRcdGlmICh2YWwgIT0gVENQX0VDTl9NT0RFX1VOU1BFQyBcdTAwMjZcdTAwMjYgKHZhbCBcdTAwM2MgMCB8fCB2YWwgXHUwMDNlIFRDUF9FQ05fSU5fQUNDRUNOX09VVF9OT0VDTikpXG4rXHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0ZWxzZVxuK1x0XHRcdFdSSVRFX09OQ0UodHAtXHUwMDNlZWNuX21vZGUsIHZhbCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBUQ1BfRUNOX09QVElPTjpcbitcdFx0aWYgKHZhbCAhPSBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUMgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDNjIDAgfHwgdmFsIFx1MDAzZSBUQ1BfQUNDRUNOX09QVElPTl9QRVJTSVNUKSlcbitcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRlbHNlXG4rXHRcdFx0V1JJVEVfT05DRSh0cC1cdTAwM2VlY25fb3B0aW9uLCB2YWwpO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGVyciA9IC1FTk9QUk9UT09QVDtcbiBcdFx0YnJlYWs7XG5AQCAtNDg0Miw2ICs0ODU2LDEyIEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdGNhc2UgVENQX0RFTEFDS19NQVhfVVM6XG4gXHRcdHZhbCA9IGppZmZpZXNfdG9fdXNlY3MoUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2RlbGFja19tYXgpKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFRDUF9FQ046XG4rXHRcdHZhbCA9IFJFQURfT05DRSh0cC1cdTAwM2VlY25fbW9kZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBUQ1BfRUNOX09QVElPTjpcbitcdFx0dmFsID0gUkVBRF9PTkNFKHRwLVx1MDAzZWVjbl9vcHRpb24pO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG5AQCAtNTI1Niw2ICs1Mjc2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHRjcF9zdHJ1Y3RfY2hlY2sodm9pZClcbiBcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIHRzb3J0ZWRfc2VudF9xdWV1ZSk7XG4gXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBoaWdoZXN0X3NhY2spO1xuIFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX2ZsYWdzKTtcbitcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGVjbl9tb2RlKTtcbitcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGVjbl9vcHRpb24pO1xuIFxuIFx0LyogVFhSWCByZWFkLXdyaXRlIGhvdHBhdGggY2FjaGUgbGluZXMgKi9cbiBcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHhyeCwgcHJlZF9mbGFncyk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggMGY2MGExZGJmOTI3NC4uMDA0M2I0YjJiYzkyMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTc0NTcsMTMgKzc0NTcsMTIgQEAgc3RhdGljIHZvaWQgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChsaXN0ZW5fc2spO1xuIFx0Ym9vbCB0aF9lY24gPSB0aC1cdTAwM2VlY2UgXHUwMDI2XHUwMDI2IHRoLVx1MDAzZWN3cjtcbiBcdGJvb2wgZWN0LCBlY25fb2s7XG4gXHR1MzIgZWNuX29rX2RzdDtcbiBcbiBcdGlmICh0Y3BfYWNjZWNuX3N5bl9yZXF1ZXN0ZWQodGgpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY24pIFx1MDAzZT0gMyB8fFxuK1x0ICAgICh0Y3BfZWNuX21vZGVfZWZmKGxpc3Rlbl9zaykgXHUwMDNlPSAzIHx8XG4gXHQgICAgIHRjcF9jYV9uZWVkc19hY2NlY24obGlzdGVuX3NrKSkpIHtcbiBcdFx0aW5ldF9yc2socmVxKS1cdTAwM2VlY25fb2sgPSAxO1xuIFx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlYWNjZWNuX29rID0gMTtcbkBAIC03NDc3LDcgKzc0NzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcbiBcdGVjdCA9ICFJTkVUX0VDTl9pc19ub3RfZWN0KFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VpcF9kc2ZpZWxkKTtcbiBcdGVjbl9va19kc3QgPSBkc3RfZmVhdHVyZShkc3QsIERTVF9GRUFUVVJFX0VDTl9NQVNLKTtcbi1cdGVjbl9vayA9IFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2VjbikgfHwgZWNuX29rX2RzdDtcbitcdGVjbl9vayA9IHRjcF9lY25fbW9kZV9lZmYobGlzdGVuX3NrKSB8fCBlY25fb2tfZHN0O1xuIFxuIFx0aWYgKCgoIWVjdCB8fCB0aC1cdTAwM2VyZXMxIHx8IHRoLVx1MDAzZWFlKSBcdTAwMjZcdTAwMjYgZWNuX29rKSB8fFxuIFx0ICAgIHRjcF9jYV9uZWVkc19lY24obGlzdGVuX3NrKSB8fFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuaW5kZXggMDA0MTdhNDI5MjIyNS4uODJiOTZjNDAxNWZkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5AQCAtMTA0NSw3ICsxMDQ1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHVubGlrZWx5KChUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfQUNLKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICB0Y3BfZWNuX21vZGVfYWNjZWNuKHRwKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICBpbmV0X2NzayhzayktXHUwMDNlaWNza19yZXRyYW5zbWl0cyBcdTAwM2MgMiBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIHJlbWFpbmluZyBcdTAwM2U9IFRDUE9MRU5fQUNDRUNOX0JBU0UpKSB7XG4gXHRcdG9wdHMtXHUwMDNldXNlX3N5bmFja19lY25fYnl0ZXMgPSAxO1xuIFx0XHRyZW1haW5pbmcgLT0gdGNwX29wdGlvbnNfZml0X2FjY2VjbihvcHRzLCAwLCByZW1haW5pbmcpO1xuQEAgLTExMzMsNyArMTEzMyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdHNtY19zZXRfb3B0aW9uX2NvbmQodGNwX3NrKHNrKSwgaXJlcSwgb3B0cywgXHUwMDI2cmVtYWluaW5nKTtcbiBcbiBcdGlmICh0cmVxLVx1MDAzZWFjY2Vjbl9vayBcdTAwMjZcdTAwMjZcbi1cdCAgICBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKSBcdTAwMjZcdTAwMjZcbitcdCAgICB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHN5bmFja190eXBlICE9IFRDUF9TWU5BQ0tfUkVUUkFOUyBcdTAwMjZcdTAwMjYgcmVtYWluaW5nIFx1MDAzZT0gVENQT0xFTl9BQ0NFQ05fQkFTRSkge1xuIFx0XHRvcHRzLVx1MDAzZXVzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTtcbiBcdFx0cmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTtcbkBAIC0xMjIxLDcgKzEyMjEsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYlxuIFx0fVxuIFxuIFx0aWYgKHRjcF9lY25fbW9kZV9hY2NlY24odHApKSB7XG4tXHRcdGludCBlY25fb3B0ID0gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfZWNuX29wdGlvbik7XG4rXHRcdGludCBlY25fb3B0ID0gdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKTtcbiBcbiBcdFx0aWYgKGVjbl9vcHQgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZXNhd19hY2NlY25fb3B0IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKGVjbl9vcHQgXHUwMDNlPSBUQ1BfQUNDRUNOX09QVElPTl9QRVJTSVNUIHx8XG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA3MzJiMzVjYzA4ZDFjLi5jNThiMTYzM2JiNDZlIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0yOTg1LDcgKzI5ODUsOCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICogXHRcdCAgKipUQ1BfU1lOQ05UKiosICoqVENQX1VTRVJfVElNRU9VVCoqLCAqKlRDUF9OT1RTRU5UX0xPV0FUKiosXG4gICogXHRcdCAgKipUQ1BfTk9ERUxBWSoqLCAqKlRDUF9NQVhTRUcqKiwgKipUQ1BfV0lORE9XX0NMQU1QKiosXG4gICogXHRcdCAgKipUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMqKiwgKipUQ1BfQlBGX0RFTEFDS19NQVgqKixcbi0gKlx0XHQgICoqVENQX0JQRl9SVE9fTUlOKiosICoqVENQX0JQRl9TT0NLX09QU19DQl9GTEFHUyoqLlxuKyAqXHRcdCAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiosXG4rICpcdFx0ICAqKlRDUF9FQ04qKiwgKipUQ1BfRUNOX09QVElPTioqLlxuICAqIFx0XHQqICoqSVBQUk9UT19JUCoqLCB3aGljaCBzdXBwb3J0cyAqb3B0bmFtZSogKipJUF9UT1MqKi5cbiAgKiBcdFx0KiAqKklQUFJPVE9fSVBWNioqLCB3aGljaCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nICpvcHRuYW1lKlxcIHM6XG4gICogXHRcdCAgKipJUFY2X1RDTEFTUyoqLCAqKklQVjZfQVVUT0ZMT1dMQUJFTCoqLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxuaW5kZXggMTNjZWViMzk1ZWI4Zi4uNGY1MmI5ZGY0MjY2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG5AQCAtMTI4LDcgKzEyOCw4IEBAIGVudW0ge1xuICNkZWZpbmUgVENQX0NNX0lOUVx0XHRUQ1BfSU5RXG4gXG4gI2RlZmluZSBUQ1BfVFhfREVMQVlcdFx0MzdcdC8qIGRlbGF5IG91dGdvaW5nIHBhY2tldHMgYnkgWFggdXNlYyAqL1xuLVxuKyNkZWZpbmUgVENQX0VDTlx0XHRcdDQ3XHQvKiBQZXItc29ja2V0IEVDTiBtb2RlICgwLTUsIDI1NT11c2Ugc3lzY3RsKSAqL1xuKyNkZWZpbmUgVENQX0VDTl9PUFRJT05cdFx0NDhcdC8qIFBlci1zb2NrZXQgQWNjRUNOIG9wdGlvbiAoMC0zLCAyNTU9dXNlIHN5c2N0bCkgKi9cbiBcbiAjZGVmaW5lIFRDUF9SRVBBSVJfT05cdFx0MVxuICNkZWZpbmUgVENQX1JFUEFJUl9PRkZcdFx0MFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zZXRnZXRfc29ja29wdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmNcbmluZGV4IGQ5NmU5OWI2N2FlYmYuLmZiOTdmYTBiYzdiNDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmNcbkBAIC02NCw2ICs2NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja29wdF90ZXN0IHNvbF90Y3BfdGVzdHNbXSA9IHtcbiBcdHsgLm9wdCA9IFRDUF9CUEZfREVMQUNLX01BWCwgLm5ldyA9IDMwMDAwLCAuZXhwZWN0ZWQgPSAzMDAwMCwgfSxcbiBcdHsgLm9wdCA9IFRDUF9CUEZfUlRPX01JTiwgLm5ldyA9IDMwMDAwLCAuZXhwZWN0ZWQgPSAzMDAwMCwgfSxcbiBcdHsgLm9wdCA9IFRDUF9SVE9fTUFYX01TLCAubmV3ID0gMjAwMCwgLmV4cGVjdGVkID0gMjAwMCwgfSxcbitcdHsgLm9wdCA9IFRDUF9FQ04sIC5uZXcgPSAzLCAuZXhwZWN0ZWQgPSAzLCAucmVzdG9yZSA9IDI1NSwgfSxcbitcdHsgLm9wdCA9IFRDUF9FQ05fT1BUSU9OLCAubmV3ID0gMiwgLmV4cGVjdGVkID0gMiwgLnJlc3RvcmUgPSAyNTUsIH0sXG4gXHR7IC5vcHQgPSAwLCB9LFxuIH07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNjoxNS4zNzUzMDA5OTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTQ2NDA2ODc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBcdTAwMjYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHF1aXRlIHByb21pc2luZyBmb3IgZnV6emluZy4gSXQgaW50cm9kdWNlcyBuZXcgc29ja2V0IG9wdGlvbnMsIGBUQ1BfRUNOYCBhbmQgYFRDUF9FQ05fT1BUSU9OYCwgZXNzZW50aWFsbHkgYWxsb3dpbmcgcGVyLXNvY2tldCBvdmVycmlkZXMgZm9yIEVDTi1yZWxhdGVkIHN5c2N0bCBzZXR0aW5ncy4gVGhpcyBwZXItc29ja2V0IGdyYW51bGFyaXR5IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgcG90ZW50aWFsIHRhcmdldC4gVGhlIGZhY3QgdGhhdCBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIFRDUCBzdGFjayB2aWEgYHNldHNvY2tvcHRgIGFuZCBgZ2V0c29ja29wdGAgbWFrZXMgaXQgdmVyeSBhY2Nlc3NpYmxlLiBXZSBoYXZlIHVzZXItbGV2ZWwgaW50ZXJhY3Rpb24gcmlnaHQgdGhlcmUsIGFuZCB0aGF0J3MgZXhhY3RseSB3aGF0IHdlIHdhbnQuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyBpbXBhY3RpbmcgZG9jdW1lbnRhdGlvbiwgdGhlIGNvcmUgYHRjcF9zb2NrYCBzdHJ1Y3R1cmUsIGhlYWRlciBmaWxlcywgYW5kIHRoZSBjcml0aWNhbCBgZmlsdGVyLmNgICh0aGF0J3MgYSBnb29kIHNpZ24gZm9yIEJQRiBpbnRlcmFjdGlvbnMpLCBhbG9uZyB3aXRoIG51bWVyb3VzIGNvcmUgVENQIG1vZHVsZXM6IGB0Y3AuY2AsIGB0Y3BfaW5wdXQuY2AsIGFuZCBgdGNwX291dHB1dC5jYC4gVGhpcyBpcyBhbGwgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNvIHllcywgd2l0aG91dCBhIGRvdWJ0LCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5vdywgdGltZSB0byByZWZpbmUgdGhlIGFwcHJvYWNoLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJ4oCZbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3MgYXJlIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZXNlIGZlYXR1cmVzLiBNeSBpbml0aWFsIGd1ZXNzZXMgYXJlIGBJTkVUYCAob3IgYE5FVGApIC0gdGhhdCBzZWVtcyBsaWtlIGEgZ2l2ZW4sIGFuZCBJIHNob3VsZCBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvS2NvbmZpZ2AgZm9yIHJlbGF0ZWQgVENQIGNvbmZpZ3VyYXRpb25zLiBTaW5jZSB3ZeKAmXJlIGRlYWxpbmcgd2l0aCBgZmlsdGVyLmNgLCBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3IgYEJQRl9TWVNDQUxMYCwgYE5FVGAsIGFuZCBgSU5FVGAgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBzaG91bGQgY2hlY2sgYG5ldC9pcHY0L01ha2VmaWxlYCBvciBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gc2VlIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gYnVpbGQgYHRjcC5jYCwgYHRjcF9pbnB1dC5jYCwgYW5kIGB0Y3Bfb3V0cHV0LmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudCByZXF1aXJlZCBmb3IgdGhlc2UgY2hhbmdlcy4gVGhlbiwgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBpbiB0aGlzIGFyZWEuIEZyb20gdGhlIHBhdGNoLCBpdCBsb29rcyBsaWtlIGB0Y3BfZWNuX21vZGVfZWZmKHNrKWAgYW5kIGB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spYCBhcmUgd29ydGggaGlnaGxpZ2h0aW5nLCBhbG9uZyB3aXRoIGBkb190Y3Bfc2V0c29ja29wdGAgYW5kIGBkb190Y3BfZ2V0c29ja29wdGAuIEknbGwgbmVlZCB0byBhbmFseXplIHRoZXNlIGluIG1vcmUgZGVwdGggdG8gdGFyZ2V0IHRoZW0gZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNzgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNjo0MC44MzkzNzI2MDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5MTgxOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai0uKnRjcFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT01MD1vYmotJChDT05GSUdfVENQX0NPTkdfQ1VCSUMpICs9IHRjcF9jdWJpYy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX1RDUF9DT05HX0RDVENQKSArPSB0Y3BfZGN0Y3Aub1xcbm5ldC9pcHY0L01ha2VmaWxlLTUyLW9iai0kKENPTkZJR19UQ1BfQ09OR19XRVNUV09PRCkgKz0gdGNwX3dlc3R3b29kLm9cXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTU0PW9iai0kKENPTkZJR19UQ1BfQ09OR19IWUJMQSkgKz0gdGNwX2h5YmxhLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo1NTpvYmotJChDT05GSUdfVENQX0NPTkdfSFRDUCkgKz0gdGNwX2h0Y3Aub1xcbm5ldC9pcHY0L01ha2VmaWxlLTU2LW9iai0kKENPTkZJR19UQ1BfQ09OR19WRUdBUykgKz0gdGNwX3ZlZ2FzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6NDEuMTI4NTYwNDI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE2NjgyNDUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY0IE1ha2VmaWxlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBJUHY0IHN0YWNrLCBzbyBsZXQncyBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgbmV0L2lwdjQvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSdsbCBsaWtlbHkgZmluZCB0aGUgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBmb3IgY29tcGlsaW5nIElQdjQtcmVsYXRlZCBtb2R1bGVzIGFuZCB0aGUgY29yZSBJUHY0IHN0YWNrIGl0c2VsZi4gVGhpcyBmaWxlIHdpbGwgdGVsbCBtZSBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyIOKAkyB0aGUgb2JqZWN0IGZpbGVzLCB0aGUgaW5jbHVkZSBwYXRocywgYW5kIGFueSBzcGVjaWZpYyBjb21waWxlciBmbGFncyBiZWluZyB1c2VkLiBJIGV4cGVjdCB0byBzZWUgZGVmaW5pdGlvbnMgZm9yIHZhcmlhYmxlcyBsaWtlIGBvYmotJChDT05GSUdfU09NRVRISU5HKWAgd2hpY2ggd2lsbCBndWlkZSB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiBjZXJ0YWluIGZlYXR1cmVzIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgaXMgY3J1Y2lhbCBmb3IgdHJhY2luZyB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaWRlbnRpZnlpbmcgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJIG1ha2UsIG9yIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBjb250ZXh0IG9mIHNvbWUgb3RoZXIgbW9kdWxlIEknbSBsb29raW5nIGF0LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgSSBuZWVkIHRvIHNvbHZlIHRoZSBwcm9ibGVtIEknbSBsb29raW5nIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzcyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6NDQuMjk1Mzg3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVCkgbGF5ZXIuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuICAgNzpcXHRcXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXFxcXG4gICA4OlxcdFxcdCAgICAgaXBfb3V0cHV0Lm8gaXBfc29ja2dsdWUubyBpbmV0X2hhc2h0YWJsZXMubyBcXFxcXFxuICAgOTpcXHRcXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbiAgMTA6XFx0XFx0ICAgICB0Y3AubyB0Y3BfaW5wdXQubyB0Y3Bfb3V0cHV0Lm8gdGNwX3RpbWVyLm8gdGNwX2lwdjQubyBcXFxcXFxuICAxMTpcXHRcXHQgICAgIHRjcF9taW5pc29ja3MubyB0Y3BfY29uZy5vIHRjcF9tZXRyaWNzLm8gdGNwX2Zhc3RvcGVuLm8gXFxcXFxcbiAgMTI6XFx0XFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcXFxcbiAgMTM6XFx0XFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG4gIDE0OlxcdFxcdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcXFxcbiAgMTU6XFx0XFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxuICAxNjpcXHRcXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXFxcXG4gIDE3OlxcdFxcdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cXG4gIDE4OlxcdFxcbiAgMTk6XFx0b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICs9IGlwX3R1bm5lbC5vXFxuICAyMDpcXHRvYmotJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGxfbmV0X2lwdjQub1xcbiAgMjE6XFx0b2JqLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUykgKz0gZmliX3J1bGVzLm9cXG4gIDIzOlxcdG9iai0kKENPTkZJR19JUF9NUk9VVEUpICs9IGlwbXIub1xcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICs9IGlwbXJfYmFzZS5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfTkVUX0lQSVApICs9IGlwaXAub1xcbiAgMjY6XFx0Z3JlLXkgOj0gZ3JlX2RlbXV4Lm9cXG4gIDI3OlxcdGZvdS15IDo9IGZvdV9jb3JlLm8gZm91X25sLm8gZm91X2JwZi5vXFxuICAyODpcXHRvYmotJChDT05GSUdfTkVUX0ZPVSkgKz0gZm91Lm9cXG4gIDI5OlxcdG9iai0kKENPTkZJR19ORVRfSVBHUkVfREVNVVgpICs9IGdyZS5vXFxuICAzMDpcXHRvYmotJChDT05GSUdfTkVUX0lQR1JFKSArPSBpcF9ncmUub1xcbiAgMzE6XFx0dWRwX3R1bm5lbC15IDo9IHVkcF90dW5uZWxfY29yZS5vIHVkcF90dW5uZWxfbmljLm9cXG4gIDMyOlxcdG9iai0kKENPTkZJR19ORVRfVURQX1RVTk5FTCkgKz0gdWRwX3R1bm5lbC5vXFxuICAzMzpcXHRvYmotJChDT05GSUdfTkVUX0lQVlRJKSArPSBpcF92dGkub1xcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX1NZTl9DT09LSUVTKSArPSBzeW5jb29raWVzLm9cXG4gIDM1OlxcdG9iai0kKENPTkZJR19JTkVUX0FIKSArPSBhaDQub1xcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0lORVRfRVNQKSArPSBlc3A0Lm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19JTkVUX0VTUF9PRkZMT0FEKSArPSBlc3A0X29mZmxvYWQub1xcbiAgMzg6XFx0b2JqLSQoQ09ORklHX0lORVRfSVBDT01QKSArPSBpcGNvbXAub1xcbiAgMzk6XFx0b2JqLSQoQ09ORklHX0lORVRfWEZSTV9UVU5ORUwpICs9IHhmcm00X3R1bm5lbC5vXFxuICA0MDpcXHRvYmotJChDT05GSUdfSU5FVF9UVU5ORUwpICs9IHR1bm5lbDQub1xcbiAgNDE6XFx0b2JqLSQoQ09ORklHX0lQX1BOUCkgKz0gaXBjb25maWcub1xcbiAgNDI6XFx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHQrPSBuZXRmaWx0ZXIubyBuZXRmaWx0ZXIvXFxuICA0MzpcXHRvYmotJChDT05GSUdfSU5FVF9ESUFHKSArPSBpbmV0X2RpYWcub1xcbiAgNDQ6XFx0b2JqLSQoQ09ORklHX0lORVRfVENQX0RJQUcpICs9IHRjcF9kaWFnLm9cXG4gIDQ1OlxcdG9iai0kKENPTkZJR19JTkVUX1VEUF9ESUFHKSArPSB1ZHBfZGlhZy5vXFxuICA0NjpcXHRvYmotJChDT05GSUdfSU5FVF9SQVdfRElBRykgKz0gcmF3X2RpYWcub1xcbiAgNDc6XFx0b2JqLSQoQ09ORklHX1RDUF9DT05HX0JCUikgKz0gdGNwX2Jici5vXFxuICA0ODpcXHRvYmotJChDT05GSUdfVENQX0NPTkdfQklDKSArPSB0Y3BfYmljLm9cXG4gIDQ5OlxcdG9iai0kKENPTkZJR19UQ1BfQ09OR19DREcpICs9IHRjcF9jZGcub1xcbiAgNTA6XFx0b2JqLSQoQ09ORklHX1RDUF9DT05HX0NVQklDKSArPSB0Y3BfY3ViaWMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNjo0NC4yOTU0NjAzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNDIzNDc2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBOZXR3b3JrIFN0YWNrIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGBuZXQvaXB2NGAgY29tcG9uZW50IGlzIGJlaW5nIGJ1aWx0IHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCBmcmFtZXdvcmsuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgbmV0L01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB0aGUgb3JjaGVzdHJhdG9yIG9mIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgZm9yIHRoaXMgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjay4gSSBuZWVkIHRvIHRyYWNlIHRocm91Z2ggaXQgYW5kIHNlZSBob3cgYGlwdjRgIGlzIHNwZWNpZmljYWxseSBpbmNvcnBvcmF0ZWQsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCBgbmV0L01ha2VmaWxlYCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE3MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6NDcuNTM3ODEwNzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxOTQzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19ORVRGSUxURVIpXFx0XFx0Kz0gbmV0ZmlsdGVyL1xcbm5ldC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBpcHY0L1xcbm5ldC9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfVExTKVxcdFxcdCs9IHRscy9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6NDcuNTg2MDA5ODM5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzMDU3MjQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIENvZGUgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IGlzc3VlLiBJdCBsb29rcyBsaWtlIEkgYWJzb2x1dGVseSBuZWVkIGBDT05GSUdfSU5FVGAgZW5hYmxlZCBpZiBJJ20gZ29pbmcgdG8gdG91Y2ggYW55dGhpbmcgaW4gYG5ldC9pcHY0L2AuIFRoYXQncyBub3Qgc3VycHJpc2luZywgYnV0IGl0J3MgZ29vZCB0byBtYWtlIGEgbm90ZSBvZiBpdCByaWdodCBhd2F5LiBNb3JlIHNwZWNpZmljYWxseSB0aG91Z2gsIEknbSBjb25jZXJuZWQgYWJvdXQgdGhlIGBzb2xfdGNwX3NvY2tvcHRgIGZ1bmN0aW9uIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgcmVjYWxsIHRoYXQgb25lIHVzZXMgYSBCUEYgc29ja29wdCBoZWxwZXIgb2Ygc29ydHMuIFNvLCBpZiBJJ20gZ29pbmcgdG8gd29yayB3aXRoIHRoYXQsIEknbSBnb2luZyB0byBuZWVkIHRvIGVuc3VyZSB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGFsc28gZW5hYmxlZC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEknbGwgbWFrZSBzdXJlIHRvIHZlcmlmeSB0aG9zZSBkZXBlbmRlbmNpZXMgYmVmb3JlIHByb2NlZWRpbmcuIEknbSBnb2luZyB0byBnbyBzdHJhaWdodCB0byBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDMwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6NDkuOTE2NTg0MjEzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcxNTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2xfdGNwX3NvY2tvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NTU0OT1zdGF0aWMgaW50IGJwZl9zb2xfdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU1OTktXFxubmV0L2NvcmUvZmlsdGVyLmM6NTYwMDpzdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdF9jb25nZXN0aW9uKHN0cnVjdCBzb2NrICpzaywgY2hhciAqb3B0dmFsLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTU2MDEtXFx0XFx0XFx0XFx0ICAgICAgaW50ICpvcHRsZW4sIGJvb2wgZ2V0b3B0KVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTY1Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzo1NjUzOnN0YXRpYyBpbnQgc29sX3RjcF9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXFxubmV0L2NvcmUvZmlsdGVyLmMtNTY1NC1cXHRcXHRcXHQgICBjaGFyICpvcHR2YWwsIGludCAqb3B0bGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTY3OC1cXHRjYXNlIFRDUF9DT05HRVNUSU9OOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjU2Nzk6XFx0XFx0cmV0dXJuIHNvbF90Y3Bfc29ja29wdF9jb25nZXN0aW9uKHNrLCBvcHR2YWwsIG9wdGxlbiwgZ2V0b3B0KTtcXG5uZXQvY29yZS9maWx0ZXIuYy01NjgwLVxcdGNhc2UgVENQX1NBVkVEX1NZTjpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTU3Nzk9c3RhdGljIGludCBfX2JwZl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3OTEtXFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUClcXG5uZXQvY29yZS9maWx0ZXIuYzo1NzkyOlxcdFxcdHJldHVybiBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTU3OTMtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz01ODEwPXN0YXRpYyBpbnQgX19icGZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01ODIyLVxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2IGxldmVsID09IFNPTF9UQ1ApXFxubmV0L2NvcmUvZmlsdGVyLmM6NTgyMzpcXHRcXHRlcnIgPSBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNTgyNC1cXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfSVApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA2OjQ5Ljk2NDMwNTI5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTY1NDY0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AvSVAgYW5kIEJQRiBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdCBwbGF5IGhlcmU6IGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBPciwgcG90ZW50aWFsbHksIGp1c3QgYENPTkZJR19JTkVUYCBtaWdodCBiZSBlbm91Z2ggY29udGV4dCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLlxuXG5Ob3csIHRoZSByZWFsIG1lYXQgb2YgdGhlIGFuYWx5c2lzIGxpZXMgaW4gdGhlIGZ1bmN0aW9uIGNhbGxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQgbW9kaWZpZXMgKG9yIGlzIG1vZGlmaWVkIGJ5KSB0aGUgbG9naWMuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9uczogYGRvX3RjcF9zZXRzb2Nrb3B0YCBhbmQgYGRvX3RjcF9nZXRzb2Nrb3B0YCwgd2hpY2ggYXJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyBzb2NrZXQgb3B0aW9ucyBhbmQgYXJlIGxvY2F0ZWQgaW4gYG5ldC9pcHY0L3RjcC5jYC4gSXQncyBwb3NzaWJsZSBJJ2xsIHNlZSBzb21lIG5hbWluZyB2YXJpYXRpb25zIG9uIHRoZW0gYnV0IHRoZSBmdW5jdGlvbmFsaXR5IGlzIHRoZSBrZXkgaGVyZS5cblxuVGhlbiB3ZSBoYXZlIGB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0YCwgYHRjcF9zeW5fb3B0aW9uc2AsIGB0Y3Bfc3luYWNrX29wdGlvbnNgLCBhbmQgYHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYCwgYWxsIGluIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2Agb3IgYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2AuIFRob3NlIHRvdWNoIG9uIHRoZSBUQ1AgRUNOLCBTWU4sIGFuZCBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIG9wdGlvbnMuXG5cbkZpbmFsbHksIGBzb2xfdGNwX3NvY2tvcHRgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBzaW5jZSBpdCdzIGludm9sdmVkIGluIGhhbmRsaW5nIHNvY2tldCBvcHRpb25zIGF0IHRoZSBzb2NrZXQgbGV2ZWwuXG5cblRoZSBsYXN0IG9uZSB0byBsb29rIGF0IGlzIGB0Y3BfZWNuX3NlbmRfc3luYCwgd2hpY2ggaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGluIGBpbmNsdWRlL25ldC90Y3BfZWNuLmhgLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoZXJlICp0aGlzKiBpcyBhY3R1YWxseSB1c2VkIHRvIHNlZSB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBpdC4gRXNzZW50aWFsbHksIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI3NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNjo1NC41Mjk3NzE5OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjQ4MTgyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfZWNuX3NlbmRfc3luXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX291dHB1dC5jPTM4OTU9aW50IHRjcF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkyMy1cXHRcXHRUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXRjcF9mbGFncyB8PSBUQ1BIRFJfQUNLO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozOTI0OlxcdFxcdHRjcF9lY25fc2VuZF9zeW5hY2soc2ssIHNrYik7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5MjUtXFx0fVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQzMDY9aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00Mzg1LVxcdHRjcF9jb25uZWN0X3F1ZXVlX3NrYihzaywgYnVmZik7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzODY6XFx0dGNwX2Vjbl9zZW5kX3N5bihzaywgYnVmZik7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzODctXFx0dGNwX3JidHJlZV9pbnNlcnQoXFx1MDAyNnNrLVxcdTAwM2V0Y3BfcnR4X3F1ZXVlLCBidWZmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDY6NTQuNzQyMjU5ODU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2ODU4MjMyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFRDUCBFQ04gU3luY2hyb25pemF0aW9uIFNlcXVlbmNlKipcblxuT2theSwgc28gYHRjcF9jb25uZWN0YCB0cmlnZ2VycyBgdGNwX2Vjbl9zZW5kX3N5bmAuIFRoYXQncyB0aGUgZXhwZWN0ZWQgcGF0aCDigJMgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzIGluaXRpYXRlcyB0aGUgRUNOLXNwZWNpZmljIFNZTiBmbGFnLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIEl04oCZcyBub3QganVzdCBhYm91dCAqd2hhdCogaGFwcGVucywgYnV0ICp3aHkqLiBTbywgSSB3YW50IHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIExldCdzIHNlZSB3aG8gaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYHRjcF9lY25fY3JlYXRlX3JlcXVlc3RgLCB3aGljaCwgSSdtIGd1ZXNzaW5nLCBzZXRzIHVwIHRoZSBwcmVjb25kaXRpb25zIGZvciBgdGNwX2Vjbl9zZW5kX3N5bmAgdG8gd29yaywgb3IgcG9zc2libHkgZXZlbiB0aGUgZmxhZ3MgdGhlbXNlbHZlcy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGdyYXBoIGhlcmUgd2lsbCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBFQ04gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBUQ1Agc3RhY2ssIHBhcnRpY3VsYXJseSBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBjb25uZWN0aW9uIHNldHVwLiBUaGlzIHdpbGwgaGVscCBtZSBzZWUgaWYgdGhlIEVDTiBjb2RlIGlzIGludGVncmF0ZWQgY2xlYW5seSBvciBpZiB0aGVyZSBhcmUgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIExldCdzIGRpdmUgaW50byB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI0NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA2OjU3LjQyODA4NjIxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MDg4MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9lY25fY3JlYXRlX3JlcXVlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuYz03NDIzPXN0YXRpYyBpbmxpbmUgdm9pZCBwcl9kcm9wX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIF9fdTE2IHBvcnQsIGludCBmYW1pbHkpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDUzLSAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc0NTQ6c3RhdGljIHZvaWQgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQ1NS1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzYxOT1pbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3MzYtXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzczNzpcXHR0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHJlcSwgc2tiLCBzaywgZHN0KTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNjo1Ny42MTcxODA2MTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5NDQ2NjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIFRDUCBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGUgVENQIGNvbm5lY3Rpb24gcHJvY2VzcywgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGB0Y3BfY29ubl9yZXF1ZXN0YCB0cmlnZ2VycyBgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdGAuIEkgbmVlZCB0byByZW1lbWJlciB3aGF0J3MgZ29pbmcgb24gdGhlcmUgd2l0aCBFQ04g4oCTIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIHJldmlld2luZy4gVGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGludGVyYWN0aW9uLlxuXG5UaGVuLCBteSBtaW5kIHdhbmRlcnMgdG93YXJkcyB0aGUgU1lOIGV4Y2hhbmdlLCBhbmQgSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IG9wdGlvbnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkaWZmZXJlbnQgVENQIG9wdGlvbnMgYXJlIG5lZ290aWF0ZWQgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgdGNwX3N5bl9vcHRpb25zYCwgYHRjcF9zeW5hY2tfb3B0aW9uc2AsIGFuZCBgdGNwX2VzdGFibGlzaGVkX29wdGlvbnNgIGFyZSBjYWxsZWQuIFRoaXMgd291bGQgcHJvdmlkZSBtZSBpbnNpZ2h0IGludG8gaG93IHRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgZW50aXJlIGNvbm5lY3Rpb24ncyBsaWZlY3ljbGUuIFVuZGVyc3RhbmRpbmcgdGhlIFwid2hvXCIgYW5kIFwid2h5XCIgb2YgdGhvc2UgY2FsbHMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBUQ1Agc3RhY2sncyBsb2dpYy4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgdHJhY2UgdGhvc2UgY2FsbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6MDAuMjExNjUxMjc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTc2NTM2OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwXyhzeW58c3luYWNrfGVzdGFibGlzaGVkKV9vcHRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2FvLmM9MTM4ND1zdGF0aWMgaW50IHRjcF9hb19wYXJzZV9jcnlwdG8oY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmNtZCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTEzOTMtXFx0ICpcXHRcXHRcXHRcXHRcXHQtIHdzY2FsZSksXFxubmV0L2lwdjQvdGNwX2FvLmM6MTM5NDpcXHQgKiBzZWUgdGNwX3N5bl9vcHRpb25zKCksIHRjcF9zeW5hY2tfb3B0aW9ucygpLCBjb21taXQgMzNhZDc5OGM5MjRiLlxcbm5ldC9pcHY0L3RjcF9hby5jLTEzOTUtXFx0ICpcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTEzOTktXFx0ICpcXHRcXHRcXHQtIDIgKiBUQ1BPTEVOX1NBQ0tfUEVSQkxPQ0spID0gOCAobWFjbGVuID0gNCksXFxubmV0L2lwdjQvdGNwX2FvLmM6MTQwMDpcXHQgKiBzZWUgdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoKS5cXG5uZXQvaXB2NC90Y3BfYW8uYy0xNDAxLVxcdCAqXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODY2PXN0YXRpYyB2b2lkIG1wdGNwX3NldF9vcHRpb25fY29uZChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODcyLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4NzM6XFx0XFx0aWYgKG1wdGNwX3N5bmFja19vcHRpb25zKHJlcSwgXFx1MDAyNnNpemUsIFxcdTAwMjZvcHRzLVxcdTAwM2VtcHRjcCkpIHtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODc0LVxcdFxcdFxcdGlmICgqcmVtYWluaW5nIFxcdTAwM2U9IHNpemUpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04ODEtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg4MjpzdGF0aWMgdTMyIHRjcF9zeW5hY2tfb3B0aW9uc19jb21iaW5lX3NhdmluZyhzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04ODMte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTkwMz1zdGF0aWMgaW50IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24oc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cywgaW50IHJlcXVpcmVkLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTkxMi1cXHRpZiAob3B0cy1cXHUwMDNldXNlX3N5bmFja19lY25fYnl0ZXMpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjkxMzpcXHRcXHRtYXhfY29tYmluZV9zYXZpbmcgPSB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcob3B0cyk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTkxNC1cXHRlbHNlXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTU4LSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo5NTk6c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NjAtXFx0XFx0XFx0XFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDMxLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMDMyOlxcdFxcdGlmIChtcHRjcF9zeW5fb3B0aW9ucyhzaywgc2tiLCBcXHUwMDI2c2l6ZSwgXFx1MDAyNm9wdHMtXFx1MDAzZW1wdGNwKSkge1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDMzLVxcdFxcdFxcdGlmIChyZW1haW5pbmcgXFx1MDAzZT0gc2l6ZSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwNjAtLyogU2V0IHVwIFRDUCBvcHRpb25zIGZvciBTWU4tQUNLcy4gKi9cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTA2MTpzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwNjItXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTUwLSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTUxOnN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTUyLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5MS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTE5MjpcXHRcXHRvcHRfc2l6ZSA9IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgcmVtYWluaW5nLCBoYXNfdHMsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExOTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2b3B0cy1cXHUwMDNlbXB0Y3ApO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTE1MzY9c3RhdGljIGludCBfX3RjcF90cmFuc21pdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE1NzktXFx0aWYgKHVubGlrZWx5KHRjYi1cXHUwMDNldGNwX2ZsYWdzIFxcdTAwMjYgVENQSERSX1NZTikpIHtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTU4MDpcXHRcXHR0Y3Bfb3B0aW9uc19zaXplID0gdGNwX3N5bl9vcHRpb25zKHNrLCBza2IsIFxcdTAwMjZvcHRzLCBcXHUwMDI2a2V5KTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU4MS1cXHR9IGVsc2Uge1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNTgyOlxcdFxcdHRjcF9vcHRpb25zX3NpemUgPSB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzaywgc2tiLCBcXHUwMDI2b3B0cywgXFx1MDAyNmtleSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE1ODMtXFx0XFx0LyogRm9yY2UgYSBQU0ggZmxhZyBvbiBhbGwgKEdTTykgcGFja2V0cyB0byBleHBlZGl0ZSBHUk8gZmx1c2hcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMTAzPXVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIxMTktXFx0dGNwX2dldF9jdXJyZW50X2tleShzaywgXFx1MDAyNmtleSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIxMjA6XFx0aGVhZGVyX2xlbiA9IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHNrLCBOVUxMLCBcXHUwMDI2b3B0cywgXFx1MDAyNmtleSkgK1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMTIxLVxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM5Mzk9c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MDM2LVxcdFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldGNwX2ZsYWdzID0gVENQSERSX1NZTiB8IFRDUEhEUl9BQ0s7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQwMzc6XFx0dGNwX2hlYWRlcl9zaXplID0gdGNwX3N5bmFja19vcHRpb25zKHNrLCByZXEsIG1zcywgc2tiLCBcXHUwMDI2b3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDAzOC1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZrZXksIGZvYywgc3luYWNrX3R5cGUsIHN5bl9za2IpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTQyMj12b2lkIG1wdGNwX2dldF9vcHRpb25zKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2My1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjQ2NDpib29sIG1wdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2NS1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50ICpzaXplLCBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2OS1cXHQvKiB3ZSB3aWxsIHVzZSBzbmRfaXNuIHRvIGRldGVjdCBmaXJzdCBwa3QgW3JlXXRyYW5zbWlzc2lvblxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NDcwOlxcdCAqIGluIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoKVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNDcxLVxcdCAqL1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz01MDM9c3RhdGljIHZvaWQgY2xlYXJfM3JkYWNrX3JldHJhbnNtaXNzaW9uKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTExLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NTEyOnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTEzLVxcdFxcdFxcdFxcdFxcdCBib29sIHNuZF9kYXRhX2Zpbl9lbmFibGUsIGludCAqc2l6ZSxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTI1LVxcdCAqIHRlbGwgdGhlIGNhbGxlciB0byBkZWZlciB0aGUgZXN0aW1hdGUgdG9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjUyNjpcXHQgKiBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcygpLCB3aGljaCB3aWxsIHJlc2VydmUgZW5vdWdoIHNwYWNlLlxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTI3LVxcdCAqL1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz01OTY9c3RhdGljIHZvaWQgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNjIzLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NjI0OnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTYyNS1cXHRcXHRcXHRcXHRcXHQgIGJvb2wgc25kX2RhdGFfZmluX2VuYWJsZSwgaW50ICpzaXplLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz02OTI9c3RhdGljIHU2NCBhZGRfYWRkcl9nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MixcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNzE4LVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NzE5OnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfYWRkX2FkZHIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNzIwLVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnNpemUsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTc1OS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjc2MDpzdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX3JtX2FkZHIoc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemUsXFxubmV0L21wdGNwL29wdGlvbnMuYy03NjEtXFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZyxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNzgxLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NzgyOnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXBfcHJpbyhzdHJ1Y3Qgc29jayAqc2ssIGludCAqc2l6ZSxcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTc4My1cXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy04MDYtXFxubmV0L21wdGNwL29wdGlvbnMuYzo4MDc6c3RhdGljIG5vaW5saW5lIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19yc3Qoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODA4LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCAqc2l6ZSxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODI1LVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6ODI2OnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZmFzdGNsb3NlKHN0cnVjdCBzb2NrICpzaywgaW50ICpzaXplLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODI3LVxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCByZW1haW5pbmcsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg0Ny1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjg0ODpzdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wX2ZhaWwoc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemUsXFxubmV0L21wdGNwL29wdGlvbnMuYy04NDktXFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZyxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODY5LVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6ODcwOmludCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg3MS1cXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLCBib29sIGhhc190cyxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODg5LVxcdGlmICh1bmxpa2VseShza2IgXFx1MDAyNlxcdTAwMjYgVENQX1NLQl9DQihza2IpLVxcdTAwM2V0Y3BfZmxhZ3MgXFx1MDAyNiBUQ1BIRFJfUlNUKSkge1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6ODkwOlxcdFxcdGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Zhc3RjbG9zZShzaywgXFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsIG9wdHMpIHx8XFxubmV0L21wdGNwL29wdGlvbnMuYzo4OTE6XFx0XFx0ICAgIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXBfZmFpbChzaywgXFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsIG9wdHMpKSB7XFxubmV0L21wdGNwL29wdGlvbnMuYy04OTItXFx0XFx0XFx0dG90YWxfc2l6ZSArPSBvcHRfc2l6ZTtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODk1LVxcdFxcdC8qIE1QX1JTVCBjYW4gYmUgdXNlZCB3aXRoIE1QX0ZBU1RDTE9TRSBhbmQgTVBfRkFJTCBpZiB0aGVyZSBpcyByb29tICovXFxubmV0L21wdGNwL29wdGlvbnMuYzo4OTY6XFx0XFx0aWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfcnN0KHNrLCBcXHUwMDI2b3B0X3NpemUsIHJlbWFpbmluZywgb3B0cykpIHtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg5Ny1cXHRcXHRcXHR0b3RhbF9zaXplICs9IG9wdF9zaXplO1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy05MDMtXFx0c25kX2RhdGFfZmluID0gbXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spO1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTA0OlxcdGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wKHNrLCBza2IsIHNuZF9kYXRhX2ZpbiwgXFx1MDAyNm9wdF9zaXplLCBvcHRzKSlcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkwNS1cXHRcXHRyZXQgPSB0cnVlO1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTA2OlxcdGVsc2UgaWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKHNrLCBza2IsIHNuZF9kYXRhX2ZpbiwgXFx1MDAyNm9wdF9zaXplLCBvcHRzKSkge1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTA3LVxcdFxcdGludCBtcF9mYWlsX3NpemU7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkwOS1cXHRcXHRyZXQgPSB0cnVlO1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTEwOlxcdFxcdGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wX2ZhaWwoc2ssIFxcdTAwMjZtcF9mYWlsX3NpemUsXFxubmV0L21wdGNwL29wdGlvbnMuYy05MTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVtYWluaW5nIC0gb3B0X3NpemUsIG9wdHMpKSB7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkyNS1cXHRyZW1haW5pbmcgLT0gb3B0X3NpemU7XFxubmV0L21wdGNwL29wdGlvbnMuYzo5MjY6XFx0aWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfYWRkX2FkZHIoc2ssIHNrYiwgXFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsXFxubmV0L21wdGNwL29wdGlvbnMuYy05MjctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGhhc190cywgb3B0cykpIHtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTMwLVxcdFxcdHJldCA9IHRydWU7XFxubmV0L21wdGNwL29wdGlvbnMuYzo5MzE6XFx0fSBlbHNlIGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX3JtX2FkZHIoc2ssIFxcdTAwMjZvcHRfc2l6ZSwgcmVtYWluaW5nLCBvcHRzKSkge1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTMyLVxcdFxcdHRvdGFsX3NpemUgKz0gb3B0X3NpemU7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkzNi1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjkzNzpcXHRpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcF9wcmlvKHNrLCBcXHUwMDI2b3B0X3NpemUsIHJlbWFpbmluZywgb3B0cykpIHtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkzOC1cXHRcXHR0b3RhbF9zaXplICs9IG9wdF9zaXplO1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy05NDUtXFxubmV0L21wdGNwL29wdGlvbnMuYzo5NDY6Ym9vbCBtcHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIHVuc2lnbmVkIGludCAqc2l6ZSxcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTk0Ny1cXHRcXHRcXHQgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTQ3MD12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNDk1LVxcdCAqXFxubmV0L21wdGNwL29wdGlvbnMuYzoxNDk2OlxcdCAqIFRoZSBzYW1lIGFwcGxpZXMgaW4gbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucygpIGZ1bmN0aW9uLlxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQ5Ny1cXHQgKi9cXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTUzMi1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE1MzM6XFx0XFx0XFx0LyogRFNTIG9wdGlvbiBpcyBzZXQgb25seSBieSBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTUzNC1cXHRcXHRcXHQgKiB0aGUgY2FsbGVyIGlzIF9fdGNwX3RyYW5zbWl0X3NrYigpIGFuZCBzc2sgaXMgYWx3YXlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjAwLjQ2OTMxMDMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NzAzNzQyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIFRDUCBTb2NrZXQgT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVENQIHNvY2tldCBvcHRpb25zIGFyZSBiZWluZyBzZXQgYW5kIHJldHJpZXZlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgZG9fdGNwX3NldHNvY2tvcHRgIGFuZCBgZG9fdGNwX2dldHNvY2tvcHRgLiBJIHJlbWVtYmVyIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBrZXkgaW4gdGhlIGBuZXQvaXB2NC90Y3AuY2AgZmlsZSwgc28gdGhhdCdzIHdoZXJlIEknbGwgc3RhcnQuIEZpcnN0LCBhIHF1aWNrIGNoZWNrIG9uIGBkb190Y3Bfc2V0c29ja29wdGDigKYgQWgsIGl0J3Mgc3RhdGljLiBUaGF0IG1lYW5zIGl0J3Mgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHNwZWNpZmljIGZpbGUuIE5vdywgdG8gdHJhY2UgaXRzIHVzYWdlLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYHRjcF9zZXRzb2Nrb3B0YCBjYWxscyB0aGlzLiBOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgdGNwX3NldHNvY2tvcHRgIGlzIHN0YXRpYyBvciBleHBvcnRlZC4gVGhhdCB3aWxsIHRlbGwgbWUgaG93IGV4dGVybmFsbHkgYWNjZXNzaWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMuIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc1NCwiT3V0cHV0VG9rZW5zIjo1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjAzLjAzOTY4NzAzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTEzMTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIodGNwX3NldHNvY2tvcHR8ZG9fdGNwX3NldHNvY2tvcHR8dGNwX2dldHNvY2tvcHR8ZG9fdGNwX2dldHNvY2tvcHQpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTM4MjM9aW50IHRjcF9zb2NrX3NldF9tYXhzZWcoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzgzOC0gKi9cXG5uZXQvaXB2NC90Y3AuYzozODM5OmludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L2lwdjQvdGNwLmMtMzg0MC1cXHRcXHQgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDE4NS1cXG5uZXQvaXB2NC90Y3AuYzo0MTg2OmludCB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L2lwdjQvdGNwLmMtNDE4Ny1cXHRcXHQgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDE5NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwLmM6NDE5NTpcXHRyZXR1cm4gZG9fdGNwX3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwLmMtNDE5Ni19XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00NDIzPXN0cnVjdCBza19idWZmICp0Y3BfZ2V0X3RpbWVzdGFtcGluZ19vcHRfc3RhdHMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDQ5NC1cXG5uZXQvaXB2NC90Y3AuYzo0NDk1OmludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG5uZXQvaXB2NC90Y3AuYy00NDk2LVxcdFxcdCAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9NDg3Nj1ib29sIHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQoaW50IGxldmVsLCBpbnQgb3B0bmFtZSlcXG5uZXQvaXB2NC90Y3AuYy00ODc3LXtcXG5uZXQvaXB2NC90Y3AuYzo0ODc4OlxcdC8qIFRDUCBkb190Y3BfZ2V0c29ja29wdCBoYXMgb3B0aW1pemVkIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb25cXG5uZXQvaXB2NC90Y3AuYy00ODc5LVxcdCAqIHRvIGF2b2lkIGV4dHJhIHNvY2tldCBsb2NrIGZvciBUQ1BfWkVST0NPUFlfUkVDRUlWRS5cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ4ODYtXFxubmV0L2lwdjQvdGNwLmM6NDg4NzppbnQgdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbm5ldC9pcHY0L3RjcC5jLTQ4ODgtXFx0XFx0ICAgaW50IF9fdXNlciAqb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDg5NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwLmM6NDg5NjpcXHRyZXR1cm4gZG9fdGNwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBVU0VSX1NPQ0tQVFIob3B0dmFsKSxcXG5uZXQvaXB2NC90Y3AuYy00ODk3LVxcdFxcdFxcdFxcdCBVU0VSX1NPQ0tQVFIob3B0bGVuKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjAzLjEyODgyNDQ0OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDE2MjM3OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AgU29ja2V0IE9wdGlvbnMgaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBzb21lIFRDUCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9ucyBgZG9fdGNwX3NldHNvY2tvcHRgIGFuZCBgZG9fdGNwX2dldHNvY2tvcHRgLiBUaGV5J3JlIGJvdGggZGVmaW5lZCBpbiBgbmV0L2lwdjQvdGNwLmNgLCBhbmQgaW1wb3J0YW50bHksIHRoZXkncmUgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgbWVhbmluZyB0aGV5J3JlIHBvdGVudGlhbGx5IGFjY2Vzc2libGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLlxuXG5OZXh0LCBJIHdhbnRlZCB0byB1bmRlcnN0YW5kIGhvdyBhIFRDUCBzb2NrZXQgaXMgaW5pdGlhbGl6ZWQsIHNvIEkgY2hlY2tlZCBgdGNwX2luaXRfc29ja2AgaW4gdGhlIHNhbWUgZmlsZS4gSXQncyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGlzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHdvdWxkIGxpa2VseSBiZSBjYWxsZWQgZnJvbSBhIHJhbmdlIG9mIHBsYWNlcy5cblxuTm93LCBJIHN3aXRjaGVkIGdlYXJzIHNsaWdodGx5IGFuZCBleGFtaW5lZCBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24gKEVDTik6IGB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0YCB3aXRoaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gQWgsIHRoaXMgb25lJ3MgKnN0YXRpYyouIE9rYXksIHNvIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgYHRjcF9pbnB1dC5jYCBmaWxlLiBJdHMgbm9uLXN0YXRpYyBjYWxsZXIgaXMgYHRjcF9jb25uX3JlcXVlc3RgLCBzbyBJIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvZGUuXG5cbkZpbmFsbHksIEknbSBzaGlmdGluZyBteSBwZXJzcGVjdGl2ZSB0byB0aGUgb3V0cHV0IHNpZGUgb2YgVENQLCBpbiBgbmV0L2lwdjQvdGNwX291dHB1dC5jYCwgdG8gaW52ZXN0aWdhdGUgaG93IFNZTiwgU1lOLUFDSywgYW5kIGVzdGFibGlzaGVkIFRDUCBvcHRpb25zIGFyZSBoYW5kbGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGF0dHJpYnV0ZXMgb2YgYHRjcF9zeW5fb3B0aW9uc2AsIGB0Y3Bfc3luYWNrX29wdGlvbnNgLCBhbmQgYHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYC4gQXJlIHRoZXNlIHN0YXRpYyBvciBub24tc3RhdGljPyBUaGF0J2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlaXIgc2NvcGUgYW5kIGhvdyB0aGV5IGFyZSB1c2VkIHdpdGhpbiB0aGUgVENQIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc3MiwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNzowNi41NDUwNjcwNDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDU1ODEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIodGNwX3N5bl9vcHRpb25zfHRjcF9zeW5hY2tfb3B0aW9uc3x0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX291dHB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9vdXRwdXQuYz04NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc2V0X29wdGlvbl9jb25kKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NzItXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg3MzpcXHRcXHRpZiAobXB0Y3Bfc3luYWNrX29wdGlvbnMocmVxLCBcXHUwMDI2c2l6ZSwgXFx1MDAyNm9wdHMtXFx1MDAzZW1wdGNwKSkge1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NzQtXFx0XFx0XFx0aWYgKCpyZW1haW5pbmcgXFx1MDAzZT0gc2l6ZSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4MS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODgyOnN0YXRpYyB1MzIgdGNwX3N5bmFja19vcHRpb25zX2NvbWJpbmVfc2F2aW5nKHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4My17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9OTAzPXN0YXRpYyBpbnQgdGNwX29wdGlvbnNfZml0X2FjY2VjbihzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLCBpbnQgcmVxdWlyZWQsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTEyLVxcdGlmIChvcHRzLVxcdTAwM2V1c2Vfc3luYWNrX2Vjbl9ieXRlcylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTEzOlxcdFxcdG1heF9jb21iaW5lX3NhdmluZyA9IHRjcF9zeW5hY2tfb3B0aW9uc19jb21iaW5lX3NhdmluZyhvcHRzKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTE0LVxcdGVsc2VcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NTgtICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjk1OTpzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeW5fb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTk2MC1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwMzEtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwMzI6XFx0XFx0aWYgKG1wdGNwX3N5bl9vcHRpb25zKHNrLCBza2IsIFxcdTAwMjZzaXplLCBcXHUwMDI2b3B0cy1cXHUwMDNlbXB0Y3ApKSB7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEwMzMtXFx0XFx0XFx0aWYgKHJlbWFpbmluZyBcXHUwMDNlPSBzaXplKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2MC0vKiBTZXQgdXAgVENQIG9wdGlvbnMgZm9yIFNZTi1BQ0tzLiAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMDYxOnN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2Mi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExNTAtICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjExNTE6c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExNTItXFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTkxLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTkyOlxcdFxcdG9wdF9zaXplID0gbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzaywgc2tiLCByZW1haW5pbmcsIGhhc190cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvcHRzLVxcdTAwM2VtcHRjcCk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTUzNj1zdGF0aWMgaW50IF9fdGNwX3RyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU3OS1cXHRpZiAodW5saWtlbHkodGNiLVxcdTAwM2V0Y3BfZmxhZ3MgXFx1MDAyNiBUQ1BIRFJfU1lOKSkge1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNTgwOlxcdFxcdHRjcF9vcHRpb25zX3NpemUgPSB0Y3Bfc3luX29wdGlvbnMoc2ssIHNrYiwgXFx1MDAyNm9wdHMsIFxcdTAwMjZrZXkpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgxLVxcdH0gZWxzZSB7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1ODI6XFx0XFx0dGNwX29wdGlvbnNfc2l6ZSA9IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHNrLCBza2IsIFxcdTAwMjZvcHRzLCBcXHUwMDI2a2V5KTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU4My1cXHRcXHQvKiBGb3JjZSBhIFBTSCBmbGFnIG9uIGFsbCAoR1NPKSBwYWNrZXRzIHRvIGV4cGVkaXRlIEdSTyBmbHVzaFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIxMDM9dW5zaWduZWQgaW50IHRjcF9jdXJyZW50X21zcyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjExOS1cXHR0Y3BfZ2V0X2N1cnJlbnRfa2V5KHNrLCBcXHUwMDI2a2V5KTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjEyMDpcXHRoZWFkZXJfbGVuID0gdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIE5VTEwsIFxcdTAwMjZvcHRzLCBcXHUwMDI2a2V5KSArXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIxMjEtXFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IHRjcGhkcik7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzkzOT1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQwMzYtXFx0VENQX1NLQl9DQihza2IpLVxcdTAwM2V0Y3BfZmxhZ3MgPSBUQ1BIRFJfU1lOIHwgVENQSERSX0FDSztcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDAzNzpcXHR0Y3BfaGVhZGVyX3NpemUgPSB0Y3Bfc3luYWNrX29wdGlvbnMoc2ssIHJlcSwgbXNzLCBza2IsIFxcdTAwMjZvcHRzLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MDM4LVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmtleSwgZm9jLCBzeW5hY2tfdHlwZSwgc3luX3NrYilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6MDYuNzE5NjMwODA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNjUzNzEyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgRUNOIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYSBjbGVhciB0cmFjZSBvZiB0aGUgbmV3IEVDTiBsb2dpYyB3ZWF2aW5nIGl0cyB3YXkgdGhyb3VnaCB0aGUgVENQIHN0YWNrLiBgdGNwX21ha2Vfc3luYWNrYCBjYWxscyBgdGNwX3N5bmFja19vcHRpb25zYCwgYW5kIGB0Y3BfY3VycmVudF9tc3NgIGNhbGxzIGB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AuIFdlJ3ZlIGdvdCBgX190Y3BfdHJhbnNtaXRfc2tiYCBwdWxsaW5nIGluIGJvdGggYHRjcF9zeW5fb3B0aW9uc2AgYW5kIGB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AuIEZ1cnRoZXJtb3JlLCBgdGNwX2Nvbm5fcmVxdWVzdGAgbm93IHV0aWxpemVzIGB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gd2UgaGF2ZSB0aGUgYGRvX3RjcF9zZXRzb2Nrb3B0YCBhbmQgYGRvX3RjcF9nZXRzb2Nrb3B0YCBmdW5jdGlvbnMgZGlyZWN0bHkgaGFuZGxpbmcgc29ja2V0IG9wdGlvbiBpbnRlcmFjdGlvbnMuIEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGB0Y3BfaW5pdF9zb2NrYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBpbnRyb2R1Y2VkIHJlbGF0ZWQgdG8gRUNOLiBJJ2xsIGZsYWcgYHRjcF9zZXRzb2Nrb3B0YCwgYHRjcF9nZXRzb2Nrb3B0YCwgYGRvX3RjcF9zZXRzb2Nrb3B0YCwgYGRvX3RjcF9nZXRzb2Nrb3B0YCwgYHRjcF9tYWtlX3N5bmFja2AsIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdGAgYXMgRm9jdXNTeW1ib2xzLiBBcmUgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyAqdWJpcXVpdG91cyogd2l0aGluIHRoZSBjb2RlPyBTcGVjaWZpY2FsbHksIGBkb190Y3Bfc2V0c29ja29wdGAsIGBkb190Y3BfZ2V0c29ja29wdGAsIGB0Y3BfbWFrZV9zeW5hY2tgLCBhbmQgYHRjcF9jb25uX3JlcXVlc3RgIGFyZSBkZWZpbml0ZWx5IG1vcmUgc3BlY2lmaWMgdG8gdGhlIEVDTiBpbXBsZW1lbnRhdGlvbiBsb2dpYyB0aGFuIHNvbWUgb2YgdGhlIG90aGVyIGdlbmVyaWMgZnVuY3Rpb25zLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBJTkVUYCBpcyB0aGUgZm91bmRhdGlvbmFsIHJlcXVpcmVtZW50LiBXZSBhcmUgYWxzbyBnb2luZyB0byBuZWVkIGBCUEZfU1lTQ0FMTGAgZm9yIEJQRiBzb2Nrb3B0IGhlbHBlciBzdXBwb3J0LlxuXG5BbHJpZ2h0LCBsZXQncyBkbyBhIHNhbml0eSBjaGVjayBvbiBldmVyeXRoaW5nOiBUaGlzIGlzIGEgd29ydGh3aGlsZSBwYXRjaCB0byBmdXp6LiBJdCBhZGRzIGBUQ1BfRUNOYCBhbmQgYFRDUF9FQ05fT1BUSU9OYCBzb2NrZXQgb3B0aW9ucy4gVGhhdCdzIGdvb2QuIFdlIGFyZSBlZmZlY3RpdmVseSBpbnRyb2R1Y2luZyBwZXItc29ja2V0IG92ZXJyaWRlcyBvZiBgdGNwX2VjbmAgYW5kIGB0Y3BfZWNuX29wdGlvbmAsIHdoaWNoIHNob3VsZCBhbGxvdyBmb3IgZ3JhbnVsYXIgY29udHJvbCBvdmVyIEVDTiBhbmQgQWNjRUNOIGJlaGF2aW9yLiBUaGUgcGF0Y2ggdG91Y2hlcyBzb2NrZXQgaW5pdGlhbGl6YXRpb24sIHNldHNvY2tvcHQvZ2V0c29ja29wdCBoYW5kbGVycywgQlBGIHNvY2tvcHQgZmlsdGVycywgU1lOL1NZTi1BQ0sgb3B0aW9uIGJ1aWxkaW5nLCBhbmQgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nLiBBbGwga2V5IHBhcnRzLlxuXG5UaGUgRm9jdXNTeW1ib2xzIGFyZTogYGRvX3RjcF9zZXRzb2Nrb3B0YCwgYGRvX3RjcF9nZXRzb2Nrb3B0YCwgYHRjcF9jb25uX3JlcXVlc3RgLCBgdGNwX21ha2Vfc3luYWNrYCwgYW5kIGB0Y3BfY29ubmVjdGAuXG5cblRoZSBFbmFibGVkQ29uZmlncyBhcmUgYElORVRgIGFuZCBgQlBGX1NZU0NBTExgLlxuXG5Ob3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MzIsIk91dHB1dFRva2VucyI6MTcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjEyLjA4NTAwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTUxNjg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb190Y3Bfc2V0c29ja29wdFwiLFxuICAgIFwiZG9fdGNwX2dldHNvY2tvcHRcIixcbiAgICBcInRjcF9jb25uX3JlcXVlc3RcIixcbiAgICBcInRjcF9tYWtlX3N5bmFja1wiLFxuICAgIFwidGNwX2Nvbm5lY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIFRDUF9FQ04gYW5kIFRDUF9FQ05fT1BUSU9OIHNvY2tldCBvcHRpb25zIHRvIGFsbG93IHBlci1zb2NrZXQgY29uZmlndXJhdGlvbiBhbmQgb3ZlcnJpZGUgb2YgdGhlIHRjcF9lY24gYW5kIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBzZXR0aW5ncy4gSXQgbW9kaWZpZXMgVENQIHNvY2tldCBvcHRpb25zIGhhbmRsaW5nIChnZXRzb2Nrb3B0L3NldHNvY2tvcHQpLCBCUEYgc29ja29wdCBmaWx0ZXJzLCBUQ1AgU1lOL1NZTi1BQ0sgb3B0aW9uIGdlbmVyYXRpb24sIGFuZCBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IHByb2Nlc3NpbmcgaW4gdGhlIGNvcmUgSVB2NC9UQ1AgbmV0d29ya2luZyBzdGFjay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3RjcF9zZXRzb2Nrb3B0XCIsXG4gICAgXCJkb190Y3BfZ2V0c29ja29wdFwiLFxuICAgIFwidGNwX2Nvbm5fcmVxdWVzdFwiLFxuICAgIFwidGNwX21ha2Vfc3luYWNrXCIsXG4gICAgXCJ0Y3BfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgVENQX0VDTiBhbmQgVENQX0VDTl9PUFRJT04gc29ja2V0IG9wdGlvbnMgdG8gYWxsb3cgcGVyLXNvY2tldCBjb25maWd1cmF0aW9uIGFuZCBvdmVycmlkZSBvZiB0aGUgdGNwX2VjbiBhbmQgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIHNldHRpbmdzLiBJdCBtb2RpZmllcyBUQ1Agc29ja2V0IG9wdGlvbnMgaGFuZGxpbmcgKGdldHNvY2tvcHQvc2V0c29ja29wdCksIEJQRiBzb2Nrb3B0IGZpbHRlcnMsIFRDUCBTWU4vU1lOLUFDSyBvcHRpb24gZ2VuZXJhdGlvbiwgYW5kIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgcHJvY2Vzc2luZyBpbiB0aGUgY29yZSBJUHY0L1RDUCBuZXR3b3JraW5nIHN0YWNrLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNzoxMi4yNzY1MzM1NjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3Mjc0NzY5OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6MTIuMjc3Mzg5NTE3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTcyNzM5MDc1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcGVyLXNvY2tldCBFQ04gYW5kIEFjY0VDTiBjb25maWd1cmF0aW9uIG9wdGlvbnMgKFRDUF9FQ04gYW5kIFRDUF9FQ05fT1BUSU9OKSB2aWEgc2V0c29ja29wdC9nZXRzb2Nrb3B0IGFuZCBCUEYgc29ja29wcywgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIHN5c2N0bHMuXFxuXFxuS01TQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcXG4tIFRoZSBuZXcgZmllbGRzIGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYCBpbiBgc3RydWN0IHRjcF9zb2NrYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgVENQX0VDTl9NT0RFX1VOU1BFQ2AgYW5kIGBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUNgIGluIGB0Y3BfaW5pdF9zb2NrKClgIGFuZCBjb3BpZWQgYWNyb3NzIHNvY2tldCBjbG9uZXMuXFxuLSBJbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAsIHJlYWRpbmcgdGhlc2UgZmllbGRzIGluaXRpYWxpemVzIHRoZSBmdWxsIGBpbnQgdmFsYCBiZWZvcmUgYGNvcHlfdG9fc29ja3B0cigpYCBjb3BpZXMgdGhlIGRhdGEgdG8gdXNlciBzcGFjZS4gTm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBzdGFjayBieXRlcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxcbi0gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBidWZmZXIgbGVuZ3RoIG1hbmlwdWxhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYXMgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MzA0ZDA0YzYzN2JjYjRhMGU0MjRlZTRmNzU0ZDgzNGEzOTkyMDE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDk6MDY6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5pbmRleCAyMDhmNDY5NjdlZTU5Li4yZTU1ZDllMmViMDlhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5AQCAtNTI4LDYgKzUyOCw0MyBAQCB0Y3BfZWNuX2ZhbGxiYWNrIC0gQk9PTEVBTlxuIFxuIFx0RGVmYXVsdDogMSAoZW5hYmxlZClcbiBcbit0Y3BfZWNuIChzb2NrZXQgb3B0aW9uKSAtIFRDUF9FQ05cbitcdFBlci1zb2NrZXQgY29udHJvbCBvZiBFQ04gbW9kZSwgYWxsb3dpbmcgcGVyLWNvbm5lY3Rpb24gb3ZlcnJpZGUgb2YgdGhlXG4rXHR0Y3BfZWNuIHN5c2N0bCBzZXR0aW5nLiBUaGlzIGVuYWJsZXMgTDRTIChMb3cgTGF0ZW5jeSwgTG93IExvc3MsIFNjYWxhYmxlXG4rXHRUaHJvdWdocHV0KSBjb25maWd1cmF0aW9uIG9uIGEgcGVyLXNvY2tldCBiYXNpcy5cbitcbitcdFNldHRpbmcgdGhpcyBzb2NrZXQgb3B0aW9uIHRvIGFueSB2YWx1ZSBleGNlcHQgMjU1IHdpbGwgb3ZlcnJpZGUgdGhlXG4rXHRzeXN0ZW0td2lkZSB0Y3BfZWNuIHN5c2N0bCBmb3IgdGhhdCBwYXJ0aWN1bGFyIHNvY2tldC4gQSB2YWx1ZSBvZiAyNTVcbitcdChUQ1BfRUNOX01PREVfVU5TUEVDKSBtZWFucyB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IHN5c2N0bCB2YWx1ZS5cbitcbitcdFBvc3NpYmxlIHZhbHVlczogMC01IChzZWUgdGNwX2VjbiBzeXNjdGwgZGVzY3JpcHRpb24gYWJvdmUpLCBvciAyNTUgdG9cbitcdHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgKHN5c2N0bF90Y3BfZWNuKS5cbitcbitcdEV4YW1wbGU6OlxuK1xuK1x0XHRpbnQgdmFsID0gMzsgIC8qIEFjY0VDTiBtb2RlICovXG4rXHRcdHNldHNvY2tvcHQoZmQsIFNPTF9UQ1AsIFRDUF9FQ04sIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpO1xuK1xuK1x0RGVmYXVsdDogMjU1ICh1bnNwZWNpZmllZCAtIHVzZXMgdGNwX2VjbiBzeXNjdGwgdmFsdWUpXG4rXG4rdGNwX2Vjbl9vcHRpb24gKHNvY2tldCBvcHRpb24pIC0gVENQX0VDTl9PUFRJT05cbitcdFBlci1zb2NrZXQgY29udHJvbCBvZiBBY2N1cmF0ZSBFQ04gKEFjY0VDTikgb3B0aW9uIHNlbmRpbmcgYmVoYXZpb3IsXG4rXHRhbGxvd2luZyBwZXItY29ubmVjdGlvbiBvdmVycmlkZSBvZiB0aGUgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIHNldHRpbmcuXG4rXG4rXHRTZXR0aW5nIHRoaXMgc29ja2V0IG9wdGlvbiB0byBhbnkgdmFsdWUgZXhjZXB0IDI1NSB3aWxsIG92ZXJyaWRlIHRoZVxuK1x0c3lzdGVtLXdpZGUgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIGZvciB0aGF0IHBhcnRpY3VsYXIgc29ja2V0LiBBIHZhbHVlIG9mXG4rXHQyNTUgKFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQykgbWVhbnMgdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBzeXNjdGwgdmFsdWUuXG4rXG4rXHRQb3NzaWJsZSB2YWx1ZXM6IDAtMyAoc2VlIHRjcF9lY25fb3B0aW9uIHN5c2N0bCBkZXNjcmlwdGlvbiBhYm92ZSksIG9yIDI1NVxuK1x0dG8gdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCAoc3lzY3RsX3RjcF9lY25fb3B0aW9uKS5cbitcbitcdEV4YW1wbGU6OlxuK1xuK1x0XHRpbnQgdmFsID0gMjsgIC8qIFNlbmQgQWNjRUNOIG9wdGlvbiBvbiBldmVyeSBwYWNrZXQgKi9cbitcdFx0c2V0c29ja29wdChmZCwgU09MX1RDUCwgVENQX0VDTl9PUFRJT04sIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpO1xuK1xuK1x0RGVmYXVsdDogMjU1ICh1bnNwZWNpZmllZCAtIHVzZXMgdGNwX2Vjbl9vcHRpb24gc3lzY3RsIHZhbHVlKVxuK1xuIHRjcF9mYWNrIC0gQk9PTEVBTlxuIFx0VGhpcyBpcyBhIGxlZ2FjeSBvcHRpb24sIGl0IGhhcyBubyBlZmZlY3QgYW55bW9yZS5cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS9saW51eC90Y3AuaFxuaW5kZXggNmE4Yzc3NzE5MzIyZi4uN2NiMWU3NjVmNDYxOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdGNwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdGNwLmhcbkBAIC0yODksNiArMjg5LDEzIEBAIHN0cnVjdCB0Y3Bfc29jayB7XG4gXHRcdFx0XHRcdCAqIHNhY2tlZF9vdXQgXHUwMDNlIDApXG4gXHRcdFx0XHRcdCAqL1xuIFx0dThcdGVjbl9mbGFncztcdC8qIEVDTiBzdGF0dXMgYml0cy5cdFx0XHQqL1xuK1x0dThcdGVjbl9tb2RlO1x0LyogUGVyLXNvY2tldCBFQ04gbW9kZSBvdmVycmlkZVxuK1x0XHRcdFx0ICogKFRDUF9FQ05fTU9ERV9VTlNQRUMgPSB1c2Ugc3lzY3RsKVxuK1x0XHRcdFx0ICovXG4rXHR1OFx0ZWNuX29wdGlvbjtcdC8qIFBlci1zb2NrZXQgQWNjRUNOIG9wdGlvbiBvdmVycmlkZVxuK1x0XHRcdFx0ICogKFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyA9IHVzZSBzeXNjdGwpXG4rXHRcdFx0XHQgKi9cbitcbiBcdF9fY2FjaGVsaW5lX2dyb3VwX2VuZCh0Y3Bfc29ja193cml0ZV90eCk7XG4gXG4gXHQvKiBUWFJYIHJlYWQtd3JpdGUgaG90cGF0aCBjYWNoZSBsaW5lcyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcF9lY24uaCBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaFxuaW5kZXggODY1ZDVjNWE3NzE4ZC4uOTMxZTA4NzcxNzZjNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcF9lY24uaFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwX2Vjbi5oXG5AQCAtMjIsNiArMjIsNyBAQCBlbnVtIHRjcF9lY25fbW9kZSB7XG4gXHRUQ1BfRUNOX0lOX0FDQ0VDTl9PVVRfQUNDRUNOID0gMyxcbiBcdFRDUF9FQ05fSU5fQUNDRUNOX09VVF9FQ04gPSA0LFxuIFx0VENQX0VDTl9JTl9BQ0NFQ05fT1VUX05PRUNOID0gNSxcbitcdFRDUF9FQ05fTU9ERV9VTlNQRUMgPSAyNTUsXHQvKiBVc2Ugc3lzY3RsIGRlZmF1bHQgKHBlci1zb2NrZXQpICovXG4gfTtcbiBcbiAvKiBBY2NFQ04gb3B0aW9uIHNlbmRpbmcgd2hlbiBBY2NFQ04gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IG5lZ290aWF0ZWQgKi9cbkBAIC0zMCw4ICszMSwyOSBAQCBlbnVtIHRjcF9hY2NlY25fb3B0aW9uIHtcbiBcdFRDUF9BQ0NFQ05fT1BUSU9OX01JTklNVU0gPSAxLFxuIFx0VENQX0FDQ0VDTl9PUFRJT05fRlVMTCA9IDIsXG4gXHRUQ1BfQUNDRUNOX09QVElPTl9QRVJTSVNUID0gMyxcbitcdFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyA9IDI1NSxcdC8qIFVzZSBzeXNjdGwgZGVmYXVsdCAocGVyLXNvY2tldCkgKi9cbiB9O1xuIFxuKy8qIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBFQ04gbW9kZTogcGVyLXNvY2tldCBvdmVycmlkZSBvciBzeXNjdGwgZmFsbGJhY2sgKi9cbitzdGF0aWMgaW5saW5lIHU4IHRjcF9lY25fbW9kZV9lZmYoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHU4IG1vZGUgPSB0Y3Bfc2soc2spLVx1MDAzZWVjbl9tb2RlO1xuK1xuK1x0aWYgKG1vZGUgPT0gVENQX0VDTl9NT0RFX1VOU1BFQylcbitcdFx0cmV0dXJuIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbik7XG4rXHRyZXR1cm4gbW9kZTtcbit9XG4rXG4rLyogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIEFjY0VDTiBvcHRpb246IHBlci1zb2NrZXQgb3ZlcnJpZGUgb3Igc3lzY3RsIGZhbGxiYWNrICovXG4rc3RhdGljIGlubGluZSB1OCB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHU4IG9wdCA9IHRjcF9zayhzayktXHUwMDNlZWNuX29wdGlvbjtcbitcbitcdGlmIChvcHQgPT0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDKVxuK1x0XHRyZXR1cm4gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfZWNuX29wdGlvbik7XG4rXHRyZXR1cm4gb3B0O1xuK31cbitcbiAvKiBBcHBseSBlaXRoZXIgRUNUKDApIG9yIEVDVCgxKSBiYXNlZCBvbiBUQ1BfQ09OR19FQ1RfMV9ORUdPVElBVElPTiBmbGFnICovXG4gc3RhdGljIGlubGluZSB2b2lkIElORVRfRUNOX3htaXRfZWN0XzFfbmVnb3RpYXRpb24oc3RydWN0IHNvY2sgKnNrKVxuIHtcbkBAIC01OTksNyArNjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRjcF9lY25fc2VuZF9zeW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gXHRib29sIGJwZl9uZWVkc19lY24gPSB0Y3BfYnBmX2NhX25lZWRzX2Vjbihzayk7XG4gXHRib29sIHVzZV9lY24sIHVzZV9hY2NlY247XG4tXHR1OCB0Y3BfZWNuID0gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfZWNuKTtcbitcdHU4IHRjcF9lY24gPSB0Y3BfZWNuX21vZGVfZWZmKHNrKTtcbiBcbiBcdHVzZV9hY2NlY24gPSB0Y3BfZWNuID09IFRDUF9FQ05fSU5fQUNDRUNOX09VVF9BQ0NFQ04gfHxcbiBcdFx0ICAgICB0Y3BfY2FfbmVlZHNfYWNjZWNuKHNrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDczMmIzNWNjMDhkMWMuLmM1OGIxNjMzYmI0NmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTI5ODUsNyArMjk4NSw4IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKiBcdFx0ICAqKlRDUF9TWU5DTlQqKiwgKipUQ1BfVVNFUl9USU1FT1VUKiosICoqVENQX05PVFNFTlRfTE9XQVQqKixcbiAgKiBcdFx0ICAqKlRDUF9OT0RFTEFZKiosICoqVENQX01BWFNFRyoqLCAqKlRDUF9XSU5ET1dfQ0xBTVAqKixcbiAgKiBcdFx0ICAqKlRDUF9USElOX0xJTkVBUl9USU1FT1VUUyoqLCAqKlRDUF9CUEZfREVMQUNLX01BWCoqLFxuLSAqXHRcdCAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiouXG4rICpcdFx0ICAqKlRDUF9CUEZfUlRPX01JTioqLCAqKlRDUF9CUEZfU09DS19PUFNfQ0JfRkxBR1MqKixcbisgKlx0XHQgICoqVENQX0VDTioqLCAqKlRDUF9FQ05fT1BUSU9OKiouXG4gICogXHRcdCogKipJUFBST1RPX0lQKiosIHdoaWNoIHN1cHBvcnRzICpvcHRuYW1lKiAqKklQX1RPUyoqLlxuICAqIFx0XHQqICoqSVBQUk9UT19JUFY2KiosIHdoaWNoIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgKm9wdG5hbWUqXFwgczpcbiAgKiBcdFx0ICAqKklQVjZfVENMQVNTKiosICoqSVBWNl9BVVRPRkxPV0xBQkVMKiouXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG5pbmRleCAwMzc3MmRkNGQzOTkyLi4wMWViYjM0OGJhMjc0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmhcbkBAIC0xNDIsNiArMTQyLDggQEAgZW51bSB7XG4gI2RlZmluZSBUQ1BfUlRPX01BWF9NU1x0XHQ0NFx0LyogbWF4IHJ0byB0aW1lIGluIG1zICovXG4gI2RlZmluZSBUQ1BfUlRPX01JTl9VU1x0XHQ0NVx0LyogbWluIHJ0byB0aW1lIGluIHVzICovXG4gI2RlZmluZSBUQ1BfREVMQUNLX01BWF9VU1x0NDZcdC8qIG1heCBkZWxheWVkIGFjayB0aW1lIGluIHVzICovXG4rI2RlZmluZSBUQ1BfRUNOXHRcdFx0NDdcdC8qIFBlci1zb2NrZXQgRUNOIG1vZGUgKDAtNSwgMjU1PXVzZSBzeXNjdGwpICovXG4rI2RlZmluZSBUQ1BfRUNOX09QVElPTlx0XHQ0OFx0LyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqL1xuIFxuICNkZWZpbmUgVENQX1JFUEFJUl9PTlx0XHQxXG4gI2RlZmluZSBUQ1BfUkVQQUlSX09GRlx0XHQwXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uOTkzYjMxZTEwYjk0NCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTU2NzAsNiArNTY3MCw4IEBAIHN0YXRpYyBpbnQgc29sX3RjcF9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4gXHRjYXNlIFRDUF9OT1RTRU5UX0xPV0FUOlxuIFx0Y2FzZSBUQ1BfU0FWRV9TWU46XG4gXHRjYXNlIFRDUF9SVE9fTUFYX01TOlxuK1x0Y2FzZSBUQ1BfRUNOOlxuK1x0Y2FzZSBUQ1BfRUNOX09QVElPTjpcbiBcdFx0aWYgKCpvcHRsZW4gIT0gc2l6ZW9mKGludCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IDFjODY3YTMwMjQ0NDYuLmZiMzc2YTk3ZjBlNmQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC00NjMsNiArNDYzLDggQEAgdm9pZCB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdHRwLVx1MDAzZXRzb2Zmc2V0ID0gMDtcbiBcdHRwLVx1MDAzZXJhY2sucmVvX3duZF9zdGVwcyA9IDE7XG4rXHR0cC1cdTAwM2VlY25fbW9kZSA9IFRDUF9FQ05fTU9ERV9VTlNQRUM7XG4rXHR0cC1cdTAwM2VlY25fb3B0aW9uID0gVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDO1xuIFxuIFx0c2stXHUwMDNlc2tfd3JpdGVfc3BhY2UgPSBza19zdHJlYW1fd3JpdGVfc3BhY2U7XG4gXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1VTRV9XUklURV9RVUVVRSk7XG5AQCAtNDE2MCw2ICs0MTYyLDE4IEBAIGludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHRjcF9lbmFibGVfdHhfZGVsYXkoc2ssIHZhbCk7XG4gXHRcdFdSSVRFX09OQ0UodHAtXHUwMDNldGNwX3R4X2RlbGF5LCB2YWwpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgVENQX0VDTjpcbitcdFx0aWYgKHZhbCAhPSBUQ1BfRUNOX01PREVfVU5TUEVDIFx1MDAyNlx1MDAyNiAodmFsIFx1MDAzYyAwIHx8IHZhbCBcdTAwM2UgVENQX0VDTl9JTl9BQ0NFQ05fT1VUX05PRUNOKSlcbitcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRlbHNlXG4rXHRcdFx0V1JJVEVfT05DRSh0cC1cdTAwM2VlY25fbW9kZSwgdmFsKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFRDUF9FQ05fT1BUSU9OOlxuK1x0XHRpZiAodmFsICE9IFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQyBcdTAwMjZcdTAwMjYgKHZhbCBcdTAwM2MgMCB8fCB2YWwgXHUwMDNlIFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QpKVxuK1x0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdGVsc2VcbitcdFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZWVjbl9vcHRpb24sIHZhbCk7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZXJyID0gLUVOT1BST1RPT1BUO1xuIFx0XHRicmVhaztcbkBAIC00ODQyLDYgKzQ4NTYsMTIgQEAgaW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuIFx0Y2FzZSBUQ1BfREVMQUNLX01BWF9VUzpcbiBcdFx0dmFsID0gamlmZmllc190b191c2VjcyhSRUFEX09OQ0UoaW5ldF9jc2soc2spLVx1MDAzZWljc2tfZGVsYWNrX21heCkpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgVENQX0VDTjpcbitcdFx0dmFsID0gUkVBRF9PTkNFKHRwLVx1MDAzZWVjbl9tb2RlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFRDUF9FQ05fT1BUSU9OOlxuK1x0XHR2YWwgPSBSRUFEX09OQ0UodHAtXHUwMDNlZWNuX29wdGlvbik7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiBcdH1cbkBAIC01MjU2LDYgKzUyNzYsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdGNwX3N0cnVjdF9jaGVjayh2b2lkKVxuIFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgdHNvcnRlZF9zZW50X3F1ZXVlKTtcbiBcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCB0Y3Bfc29jaywgdGNwX3NvY2tfd3JpdGVfdHgsIGhpZ2hlc3Rfc2Fjayk7XG4gXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgdGNwX3NvY2ssIHRjcF9zb2NrX3dyaXRlX3R4LCBlY25fZmxhZ3MpO1xuK1x0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX21vZGUpO1xuK1x0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eCwgZWNuX29wdGlvbik7XG4gXG4gXHQvKiBUWFJYIHJlYWQtd3JpdGUgaG90cGF0aCBjYWNoZSBsaW5lcyAqL1xuIFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IHRjcF9zb2NrLCB0Y3Bfc29ja193cml0ZV90eHJ4LCBwcmVkX2ZsYWdzKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5pbmRleCAwZjYwYTFkYmY5Mjc0Li4wMDQzYjRiMmJjOTIyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5AQCAtNzQ1NywxMyArNzQ1NywxMiBAQCBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbi1cdGNvbnN0IHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGxpc3Rlbl9zayk7XG4gXHRib29sIHRoX2VjbiA9IHRoLVx1MDAzZWVjZSBcdTAwMjZcdTAwMjYgdGgtXHUwMDNlY3dyO1xuIFx0Ym9vbCBlY3QsIGVjbl9vaztcbiBcdHUzMiBlY25fb2tfZHN0O1xuIFxuIFx0aWYgKHRjcF9hY2NlY25fc3luX3JlcXVlc3RlZCh0aCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2VjbikgXHUwMDNlPSAzIHx8XG4rXHQgICAgKHRjcF9lY25fbW9kZV9lZmYobGlzdGVuX3NrKSBcdTAwM2U9IDMgfHxcbiBcdCAgICAgdGNwX2NhX25lZWRzX2FjY2VjbihsaXN0ZW5fc2spKSkge1xuIFx0XHRpbmV0X3JzayhyZXEpLVx1MDAzZWVjbl9vayA9IDE7XG4gXHRcdHRjcF9yc2socmVxKS1cdTAwM2VhY2NlY25fb2sgPSAxO1xuQEAgLTc0NzcsNyArNzQ3Niw3IEBAIHN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIFxuIFx0ZWN0ID0gIUlORVRfRUNOX2lzX25vdF9lY3QoVENQX1NLQl9DQihza2IpLVx1MDAzZWlwX2RzZmllbGQpO1xuIFx0ZWNuX29rX2RzdCA9IGRzdF9mZWF0dXJlKGRzdCwgRFNUX0ZFQVRVUkVfRUNOX01BU0spO1xuLVx0ZWNuX29rID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfZWNuKSB8fCBlY25fb2tfZHN0O1xuK1x0ZWNuX29rID0gdGNwX2Vjbl9tb2RlX2VmZihsaXN0ZW5fc2spIHx8IGVjbl9va19kc3Q7XG4gXG4gXHRpZiAoKCghZWN0IHx8IHRoLVx1MDAzZXJlczEgfHwgdGgtXHUwMDNlYWUpIFx1MDAyNlx1MDAyNiBlY25fb2spIHx8XG4gXHQgICAgdGNwX2NhX25lZWRzX2VjbihsaXN0ZW5fc2spIHx8XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5pbmRleCAwMDQxN2E0MjkyMjI1Li44MmI5NmM0MDE1ZmQwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbkBAIC0xMDQ1LDcgKzEwNDUsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeW5fb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAodW5saWtlbHkoKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgXHUwMDI2IFRDUEhEUl9BQ0spIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIHRjcF9lY25fbW9kZV9hY2NlY24odHApIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX3JldHJhbnNtaXRzIFx1MDAzYyAyIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIHRjcF9hY2NlY25fb3B0aW9uX2VmZihzaykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgcmVtYWluaW5nIFx1MDAzZT0gVENQT0xFTl9BQ0NFQ05fQkFTRSkpIHtcbiBcdFx0b3B0cy1cdTAwM2V1c2Vfc3luYWNrX2Vjbl9ieXRlcyA9IDE7XG4gXHRcdHJlbWFpbmluZyAtPSB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKG9wdHMsIDAsIHJlbWFpbmluZyk7XG5AQCAtMTEzMyw3ICsxMTMzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0c21jX3NldF9vcHRpb25fY29uZCh0Y3Bfc2soc2spLCBpcmVxLCBvcHRzLCBcdTAwMjZyZW1haW5pbmcpO1xuIFxuIFx0aWYgKHRyZXEtXHUwMDNlYWNjZWNuX29rIFx1MDAyNlx1MDAyNlxuLVx0ICAgIFJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Vjbl9vcHRpb24pIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHRjcF9hY2NlY25fb3B0aW9uX2VmZihzaykgXHUwMDI2XHUwMDI2XG4gXHQgICAgc3luYWNrX3R5cGUgIT0gVENQX1NZTkFDS19SRVRSQU5TIFx1MDAyNlx1MDAyNiByZW1haW5pbmcgXHUwMDNlPSBUQ1BPTEVOX0FDQ0VDTl9CQVNFKSB7XG4gXHRcdG9wdHMtXHUwMDNldXNlX3N5bmFja19lY25fYnl0ZXMgPSAxO1xuIFx0XHRyZW1haW5pbmcgLT0gdGNwX29wdGlvbnNfZml0X2FjY2VjbihvcHRzLCAwLCByZW1haW5pbmcpO1xuQEAgLTEyMjEsNyArMTIyMSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiXG4gXHR9XG4gXG4gXHRpZiAodGNwX2Vjbl9tb2RlX2FjY2Vjbih0cCkpIHtcbi1cdFx0aW50IGVjbl9vcHQgPSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9lY25fb3B0aW9uKTtcbitcdFx0aW50IGVjbl9vcHQgPSB0Y3BfYWNjZWNuX29wdGlvbl9lZmYoc2spO1xuIFxuIFx0XHRpZiAoZWNuX29wdCBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlc2F3X2FjY2Vjbl9vcHQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAoZWNuX29wdCBcdTAwM2U9IFRDUF9BQ0NFQ05fT1BUSU9OX1BFUlNJU1QgfHxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IDczMmIzNWNjMDhkMWMuLmM1OGIxNjMzYmI0NmUgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTI5ODUsNyArMjk4NSw4IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKiBcdFx0ICAqKlRDUF9TWU5DTlQqKiwgKipUQ1BfVVNFUl9USU1FT1VUKiosICoqVENQX05PVFNFTlRfTE9XQVQqKixcbiAgKiBcdFx0ICAqKlRDUF9OT0RFTEFZKiosICoqVENQX01BWFNFRyoqLCAqKlRDUF9XSU5ET1dfQ0xBTVAqKixcbiAgKiBcdFx0ICAqKlRDUF9USElOX0xJTkVBUl9USU1FT1VUUyoqLCAqKlRDUF9CUEZfREVMQUNLX01BWCoqLFxuLSAqXHRcdCAgKipUQ1BfQlBGX1JUT19NSU4qKiwgKipUQ1BfQlBGX1NPQ0tfT1BTX0NCX0ZMQUdTKiouXG4rICpcdFx0ICAqKlRDUF9CUEZfUlRPX01JTioqLCAqKlRDUF9CUEZfU09DS19PUFNfQ0JfRkxBR1MqKixcbisgKlx0XHQgICoqVENQX0VDTioqLCAqKlRDUF9FQ05fT1BUSU9OKiouXG4gICogXHRcdCogKipJUFBST1RPX0lQKiosIHdoaWNoIHN1cHBvcnRzICpvcHRuYW1lKiAqKklQX1RPUyoqLlxuICAqIFx0XHQqICoqSVBQUk9UT19JUFY2KiosIHdoaWNoIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgKm9wdG5hbWUqXFwgczpcbiAgKiBcdFx0ICAqKklQVjZfVENMQVNTKiosICoqSVBWNl9BVVRPRkxPV0xBQkVMKiouXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG5pbmRleCAxM2NlZWIzOTVlYjhmLi40ZjUyYjlkZjQyNjYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmhcbkBAIC0xMjgsNyArMTI4LDggQEAgZW51bSB7XG4gI2RlZmluZSBUQ1BfQ01fSU5RXHRcdFRDUF9JTlFcbiBcbiAjZGVmaW5lIFRDUF9UWF9ERUxBWVx0XHQzN1x0LyogZGVsYXkgb3V0Z29pbmcgcGFja2V0cyBieSBYWCB1c2VjICovXG4tXG4rI2RlZmluZSBUQ1BfRUNOXHRcdFx0NDdcdC8qIFBlci1zb2NrZXQgRUNOIG1vZGUgKDAtNSwgMjU1PXVzZSBzeXNjdGwpICovXG4rI2RlZmluZSBUQ1BfRUNOX09QVElPTlx0XHQ0OFx0LyogUGVyLXNvY2tldCBBY2NFQ04gb3B0aW9uICgwLTMsIDI1NT11c2Ugc3lzY3RsKSAqL1xuIFxuICNkZWZpbmUgVENQX1JFUEFJUl9PTlx0XHQxXG4gI2RlZmluZSBUQ1BfUkVQQUlSX09GRlx0XHQwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NldGdldF9zb2Nrb3B0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuY1xuaW5kZXggZDk2ZTk5YjY3YWViZi4uZmI5N2ZhMGJjN2I0NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zZXRnZXRfc29ja29wdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc2V0Z2V0X3NvY2tvcHQuY1xuQEAgLTY0LDYgKzY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzb2Nrb3B0X3Rlc3Qgc29sX3RjcF90ZXN0c1tdID0ge1xuIFx0eyAub3B0ID0gVENQX0JQRl9ERUxBQ0tfTUFYLCAubmV3ID0gMzAwMDAsIC5leHBlY3RlZCA9IDMwMDAwLCB9LFxuIFx0eyAub3B0ID0gVENQX0JQRl9SVE9fTUlOLCAubmV3ID0gMzAwMDAsIC5leHBlY3RlZCA9IDMwMDAwLCB9LFxuIFx0eyAub3B0ID0gVENQX1JUT19NQVhfTVMsIC5uZXcgPSAyMDAwLCAuZXhwZWN0ZWQgPSAyMDAwLCB9LFxuK1x0eyAub3B0ID0gVENQX0VDTiwgLm5ldyA9IDMsIC5leHBlY3RlZCA9IDMsIC5yZXN0b3JlID0gMjU1LCB9LFxuK1x0eyAub3B0ID0gVENQX0VDTl9PUFRJT04sIC5uZXcgPSAyLCAuZXhwZWN0ZWQgPSAyLCAucmVzdG9yZSA9IDI1NSwgfSxcbiBcdHsgLm9wdCA9IDAsIH0sXG4gfTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjEyLjI3NzM5MjA3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzYwMzIzMDMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB2dWxuZXJhYmlsaXRpZXMgdGhhdCBLTVNBTiBtaWdodCBjYXRjaC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSBkb2VzLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIHR3byBuZXcgZmllbGRzLCBgZWNuX21vZGVgIGFuZCBgZWNuX29wdGlvbmAsIGJvdGggb2YgdHlwZSBgdThgLCB0byB0aGUgYHRjcF9zb2NrYCBzdHJ1Y3R1cmUuIFRoZXNlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgdG8gYFRDUF9FQ05fTU9ERV9VTlNQRUNgICgyNTUpIGFuZCBgVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDYCAoMjU1KSByZXNwZWN0aXZlbHkgd2l0aGluIGB0Y3BfaW5pdF9zb2NrYC5cblxuVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBoZWxwZXIgZnVuY3Rpb25zLCBgdGNwX2Vjbl9tb2RlX2VmZihzaylgIGFuZCBgdGNwX2FjY2Vjbl9vcHRpb25fZWZmKHNrKWAuIFRoZXNlIGZ1bmN0aW9ucyBjbGV2ZXJseSByZWFkIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyAoYHRwLVx1MDAzZWVjbl9tb2RlYCBhbmQgYHRwLVx1MDAzZWVjbl9vcHRpb25gKS4gSWYgdGhvc2UgZmllbGRzIGhhdmVuJ3QgYmVlbiBleHBsaWNpdGx5IHNldCAoaS5lLiwgdGhleSdyZSBzdGlsbCBhdCB0aGUgVU5TUEVDIHZhbHVlKSwgdGhlIGhlbHBlciBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzeXNjdGwgdmFsdWVzIGZvciBFQ04gbW9kZSBhbmQgRUNOIG9wdGlvbiByZXNwZWN0aXZlbHkuIEkgc2VlIHdoYXQgdGhleSdyZSBkb2luZyBoZXJlLCBtYWtpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbW9yZSBkeW5hbWljIGF0IHJ1bnRpbWUsIGJ1dCBJJ2xsIG1ha2Ugc3VyZSBpdCdzIGRvbmUgc2FmZWx5LlxuXG5DcnVjaWFsbHksIHRoZSBwYXRjaCB0aGVuIHJlcGxhY2VzIGRpcmVjdCByZWFkcyBvZiB0aG9zZSBzeXNjdGwgdmFsdWVzIHdpdGggY2FsbHMgdG8gdGhlc2UgbmV3IGhlbHBlciBmdW5jdGlvbnMgd2l0aGluIHNldmVyYWwgVENQIGZ1bmN0aW9ucyDigJMgYHRjcF9lY25fc2VuZF9zeW5gLCBgdGNwX2Vjbl9jcmVhdGVfcmVxdWVzdGAsIGV0Yy4gVGhpcyBsb29rcyBsaWtlIGEgcmVmYWN0b3JpbmcgdG8gY2VudHJhbGl6ZSB0aGUgRUNOIGxvZ2ljLCBidXQgcG90ZW50aWFsbHkgYSBzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MuXG5cblRoZW4sIHRoZXJlIGFyZSB0aGUgc29ja2V0IG9wdGlvbnMgYFRDUF9FQ05gIGFuZCBgVENQX0VDTl9PUFRJT05gIGFkZGVkIHRvIGFsbG93IHVzZXJzcGFjZSBjb250cm9sIG92ZXIgdGhlc2Ugc2V0dGluZ3MgdmlhIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgLiBUaGUgc2V0c29ja29wdCB2YWxpZGF0aW9uIGNoZWNrcyBpZiB0aGUgYHZhbGAgaXMgd2l0aGluIGEgcmVhc29uYWJsZSByYW5nZSwgd2hpY2ggaXMgZ29vZC4gVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCwgd2hpY2ggaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGZvciBlbnN1cmluZyBhdG9taWNpdHkgYW5kIHZpc2liaWxpdHkgYmV0d2VlbiB0aHJlYWRzLlxuXG5GaW5hbGx5LCB0aGVyZSBpcyBCUEYgc29ja29wdCBzdXBwb3J0IGFkZGVkIGZvciB0aGVzZSBuZXcgb3B0aW9ucyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGlzIHBhcnQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGNoZWNraW5nIHRoZSBzaXplLlxuXG5Ob3cgZm9yIHRoZSByZWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBUaGUga2V5IGlzIHRvIHNlZSB3aGVyZSB0aGVzZSBgZWNuX21vZGVgIGFuZCBgZWNuX29wdGlvbmAgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQgdGhyb3VnaG91dCB0aGUgYHRjcF9zb2NrYCBsaWZlY3ljbGUuXG5cbkkgbm90ZSB0aGF0IGB0Y3BfaW5pdF9zb2NrYCBkb2VzIHRoZSBpbml0aWFsaXphdGlvbi4gTm93LCBpcyB0aGUgYHRjcF9zb2NrYCBzdHJ1Y3R1cmUgemVyby1pbml0aWFsaXplZCBpbml0aWFsbHksIG9yIGFyZSB0aGVyZSBvdGhlciB3YXlzIGl0J3MgY3JlYXRlZCB3aGVyZSB0aGVzZSBmaWVsZHMgbWlnaHQgbm90IGJlIGV4cGxpY2l0bHkgc2V0PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHRjcF9pbml0X3NvY2tgIGlzIGNhbGxlZCBpbiBldmVyeSBwYXRoIG9mIGNyZWF0aW5nIHRoZSBUQ1Agc29ja2V0LiBUaGUgTGludXgga2VybmVsIHVzZXMgYHNvY2tfYWxsb2NfaW5vZGVgIC8gYHNrX2FsbG9jYCwgd2hpY2ggc2hvdWxkIHplcm8gb3V0IHRoZSBtZW1vcnksIGFuZCB0aGVuIGB0Y3BfaW5pdF9zb2NrYCBzZXRzIHRoZSBmaWVsZHMgZXhwbGljaXRseS4gU3RpbGwsIEkgc2hvdWxkIGNvbmZpcm0uXG5cbkknbSB0aGlua2luZyBhYm91dCBjbG9uZSBvcGVyYXRpb25zLCBvciBjYXNlcyB3aXRoIGBhY2NlcHRgIG9yIHBhc3NpdmUgb3BlbnMsIG9yIGByZXF1ZXN0X3NvY2tgLiBBcmUgdGhlc2UgZmllbGRzIHByb3Blcmx5IGluaXRpYWxpemVkIHdoZW4gYSBuZXcgc29ja2V0IGlzIGNyZWF0ZWQgZnJvbSBhbiBleGlzdGluZyBvbmU/IEknbSBnb2luZyB0byBsb29rIGZvciBjbG9uaW5nIG9yIGNvcHlpbmcgb3IgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIGB0Y3Bfc29ja2Agc3RydWN0dXJlLCBlc3BlY2lhbGx5IGFyb3VuZCBmdW5jdGlvbnMgbGlrZSBgdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkYC5cblxuVGltZSB0byBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBjYWxscyB0byBgdGNwX2luaXRfc29ja2Agb3IgbWVudGlvbnMgb2YgY2xvbmluZyB3aXRoaW4gdGhlIHJlbGV2YW50IGZpbGVzLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY0L3RjcF9taW5pc29ja3MuY2AgYW5kIGB0Y3BfaXB2NC5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5IHNvY2tldCBjcmVhdGlvbiBwYXRoIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZXNlIG5ldyBmaWVsZHMgdG8gcHJldmVudCB1bmluaXRpYWxpemVkIHJlYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDkwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6MjkuODgwNjI2Nzc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU2NjUzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2luaXRfc29ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9hZl9pbmV0LmM9MTc1Mz1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIGlwdjRfbWliX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xNzYxLSNpZmRlZiBDT05GSUdfTVBUQ1BcXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTc2MjpcXHQvKiBhbGxvY2F0ZWQgb24gZGVtYW5kLCBzZWUgbXB0Y3BfaW5pdF9zb2NrKCkgKi9cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTc2My1cXHRmcmVlX3BlcmNwdShuZXQtXFx1MDAzZW1pYi5tcHRjcF9zdGF0aXN0aWNzKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQwMj12b2lkIHRjcF9tZDVfZGVzdHJ1Y3Rfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy00MTktICovXFxubmV0L2lwdjQvdGNwLmM6NDIwOnZvaWQgdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwLmMtNDIxLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM5Nj1zdGF0aWMgaW50IHRjcF92NF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzk5LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjQwMDpcXHR0Y3BfaW5pdF9zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTI0MDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjMwLjAxNjI5ODk3NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTY2NDY4MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LiBMZXQncyBzdGFydCB3aXRoIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY0L3RjcF9taW5pc29ja3MuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBhIG5ld2x5IGFycml2ZWQgY29ubmVjdGlvbiByZXF1ZXN0LCBhIFNZTiwgdGhhdCdzIGJlaW5nIHNwYXduZWQgZnJvbSBhbiBleGlzdGluZyBsaXN0ZW5pbmcgc29ja2V0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgY3JlYXRpb24gb2YgdGhlIGNoaWxkIHNvY2tldC4gSSdsbCBiZSBsb29raW5nIHRvIHNlZSBob3cgdGhlIG5ldyBzb2NrZXQgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdCBhbmQgdGhlIHBhcmVudCBzb2NrZXQgYW5kIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBiZWluZyB1c2VkIHRvIG1hbmFnZSB0aGlzIHN0YXRlLiBJcyBpdCBhIGNvcHktb24td3JpdGUgc2l0dWF0aW9uLCBvciBhcmUgd2UgZ29pbmcgZm9yIGZ1bGwgc3RhdGUgZHVwbGljYXRpb24gYXQgdGhpcyBwb2ludD8gSSBhbHNvIHdhbnQgdG8gZm9sbG93IHVwIHdpdGggYW55IHBvdGVudGlhbCBsb2NraW5nIGlzc3VlcyBhbmQgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgY29tZSBpbnRvIHBsYXkgZHVyaW5nIHRoZSBjaGlsZCBjcmVhdGlvbiBhbmQgaXRzIGFkZGl0aW9uIHRvIHRoZSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIGxpc3RzLiBFc3NlbnRpYWxseSwgSSdtIGNoZWNraW5nIHRoZSBoYW5kb2ZmIG9mIHRoZSBjb25uZWN0aW9uJ3MgbGlmZWN5Y2xlIGZyb20gdGhlIGxpc3RlbiBzb2NrZXQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgY2hpbGQgc29ja2V0LiBMZXQncyBzZWUgaG93IHdlbGwgaXQncyBkb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDY4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6MzIuOTgyNzY5ODU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY3NDcwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTI5ND12b2lkIGluZXRfY3NrX3ByZXBhcmVfZm9yX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEzMDItLyogVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gZm9yY2UgYSBjbG9zdXJlIG9mIGEgc29ja2V0IGFmdGVyIHRoZSBjYWxsIHRvXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMzAzOiAqIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpLlxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTMwNC0gKi9cXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTkxOD12b2lkIHRjcF9hb19zeW5jb29raWUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtOTI3LVxcdC8qIHRyZXEtXFx1MDAzZWFmX3NwZWNpZmljIGlzIHVzZWQgdG8gcGVyZm9ybSBUQ1BfQU8gbG9va3VwXFxubmV0L2lwdjQvdGNwX2FvLmM6OTI4OlxcdCAqIGluIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpLlxcbm5ldC9pcHY0L3RjcF9hby5jLTkyOS1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTI1Nz12b2lkIHRjcF9mYXN0b3Blbl9hZGRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTI2OC1cXHR0Y3BfY2xlYW51cF9za2Ioc2tiKTtcXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzoyNjk6XFx0Lyogc2Vnc19pbiBoYXMgYmVlbiBpbml0aWFsaXplZCB0byAxIGluIHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpLlxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTI3MC1cXHQgKiBIZW5jZSwgcmVzZXQgc2Vnc19pbiB0byAwIGJlZm9yZSBjYWxsaW5nIHRjcF9zZWdzX2luKClcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9NDkxPWludCB0Y3BfdjRfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy01NTItXFx0dHAgPSB0Y3Bfc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6NTUzOlxcdC8qIFhYWCAoVEZPKSAtIHRwLVxcdTAwM2VzbmRfdW5hIHNob3VsZCBiZSBJU04gKHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZCgpICovXFxubmV0L2lwdjQvdGNwX2lwdjQuYy01NTQtXFx0ZmFzdG9wZW4gPSByY3VfZGVyZWZlcmVuY2UodHAtXFx1MDAzZWZhc3RvcGVuX3Jzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE2NzQ9c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTY5Ni1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE2OTc6XFx0bmV3c2sgPSB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoc2ssIHJlcSwgc2tiKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2OTgtXFx0aWYgKCFuZXdzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz01MjU9c3RhdGljIHZvaWQgc21jX2NoZWNrX3Jlc2V0X3N5bl9yZXEoY29uc3Qgc3RydWN0IHRjcF9zb2NrICpvbGR0cCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy01NDUtICovXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjU0NjpzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTQ3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6MzMuMDg5NTIzOTQ3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NzE4ODIwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgd2l0aGluIGBuZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoaXMgZnVuY3Rpb24sIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgbmV3IGNoaWxkIHNvY2tldHMgYXJlIGNyZWF0ZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGxpc3RlbmluZyBzb2NrZXQuIEkgc3VzcGVjdCB0aGVyZSB3aWxsIGJlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJwbGF5IHdpdGggdGhlIGBpbmV0X3NvY2tgIHN0cnVjdHVyZSBhbmQgcGVyaGFwcyBzb21lIGxvY2tpbmcgcHJpbWl0aXZlcyB0b28sIHNvIEknbGwgYmUgbG9va2luZyBvdXQgZm9yIHRob3NlLiBJdCdzIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5IGdyaXR0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNzozNS45NjE0MDg3NjJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9taW5pc29ja3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDU6XFx0ICovXFxuIDU0NjpcXHRzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gNTQ3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gNTQ4OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuIDU0OTpcXHR7XFxuIDU1MDpcXHRcXHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBpbmV0X2Nza19jbG9uZV9sb2NrKHNrLCByZXEsIEdGUF9BVE9NSUMpO1xcbiA1NTE6XFx0XFx0Y29uc3Qgc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxID0gaW5ldF9yc2socmVxKTtcXG4gNTUyOlxcdFxcdHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICp0cmVxID0gdGNwX3JzayhyZXEpO1xcbiA1NTM6XFx0XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpuZXdpY3NrO1xcbiA1NTQ6XFx0XFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICpvbGR0cDtcXG4gNTU1OlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqbmV3dHA7XFxuIDU1NjpcXHRcXHR1MzIgc2VxO1xcbiA1NTc6XFx0XFxuIDU1ODpcXHRcXHRpZiAoIW5ld3NrKVxcbiA1NTk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDU2MDpcXHRcXG4gNTYxOlxcdFxcdG5ld2ljc2sgPSBpbmV0X2NzayhuZXdzayk7XFxuIDU2MjpcXHRcXHRuZXd0cCA9IHRjcF9zayhuZXdzayk7XFxuIDU2MzpcXHRcXHRvbGR0cCA9IHRjcF9zayhzayk7XFxuIDU2NDpcXHRcXG4gNTY1OlxcdFxcdHNtY19jaGVja19yZXNldF9zeW5fcmVxKG9sZHRwLCByZXEsIG5ld3RwKTtcXG4gNTY2OlxcdFxcbiA1Njc6XFx0XFx0LyogTm93IHNldHVwIHRjcF9zb2NrICovXFxuIDU2ODpcXHRcXHRuZXd0cC1cXHUwMDNlcHJlZF9mbGFncyA9IDA7XFxuIDU2OTpcXHRcXG4gNTcwOlxcdFxcdHNlcSA9IHRyZXEtXFx1MDAzZXJjdl9pc24gKyAxO1xcbiA1NzE6XFx0XFx0bmV3dHAtXFx1MDAzZXJjdl93dXAgPSBzZXE7XFxuIDU3MjpcXHRcXHRXUklURV9PTkNFKG5ld3RwLVxcdTAwM2Vjb3BpZWRfc2VxLCBzZXEpO1xcbiA1NzM6XFx0XFx0V1JJVEVfT05DRShuZXd0cC1cXHUwMDNlcmN2X254dCwgc2VxKTtcXG4gNTc0OlxcdFxcdG5ld3RwLVxcdTAwM2VzZWdzX2luID0gMTtcXG4gNTc1OlxcdFxcbiA1NzY6XFx0XFx0c2VxID0gdHJlcS1cXHUwMDNlc250X2lzbiArIDE7XFxuIDU3NzpcXHRcXHRuZXd0cC1cXHUwMDNlc25kX3NtbCA9IG5ld3RwLVxcdTAwM2VzbmRfdW5hID0gc2VxO1xcbiA1Nzg6XFx0XFx0V1JJVEVfT05DRShuZXd0cC1cXHUwMDNlc25kX254dCwgc2VxKTtcXG4gNTc5OlxcdFxcdG5ld3RwLVxcdTAwM2VzbmRfdXAgPSBzZXE7XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuZXd0cC1cXHUwMDNldHNxX25vZGUpO1xcbiA1ODI6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5ld3RwLVxcdTAwM2V0c29ydGVkX3NlbnRfcXVldWUpO1xcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHR0Y3BfaW5pdF93bChuZXd0cCwgdHJlcS1cXHUwMDNlcmN2X2lzbik7XFxuIDU4NTpcXHRcXG4gNTg2OlxcdFxcdG1pbm1heF9yZXNldChcXHUwMDI2bmV3dHAtXFx1MDAzZXJ0dF9taW4sIHRjcF9qaWZmaWVzMzIsIH4wVSk7XFxuIDU4NzpcXHRcXHRuZXdpY3NrLVxcdTAwM2VpY3NrX2Fjay5scmN2dGltZSA9IHRjcF9qaWZmaWVzMzI7XFxuIDU4ODpcXHRcXG4gNTg5OlxcdFxcdG5ld3RwLVxcdTAwM2Vsc25kdGltZSA9IHRjcF9qaWZmaWVzMzI7XFxuIDU5MDpcXHRcXHRuZXdzay1cXHUwMDNlc2tfdHhoYXNoID0gUkVBRF9PTkNFKHRyZXEtXFx1MDAzZXR4aGFzaCk7XFxuIDU5MTpcXHRcXHRuZXd0cC1cXHUwMDNldG90YWxfcmV0cmFucyA9IHJlcS1cXHUwMDNlbnVtX3JldHJhbnM7XFxuIDU5MjpcXHRcXG4gNTkzOlxcdFxcdHRjcF9pbml0X3htaXRfdGltZXJzKG5ld3NrKTtcXG4gNTk0OlxcdFxcdFdSSVRFX09OQ0UobmV3dHAtXFx1MDAzZXdyaXRlX3NlcSwgbmV3dHAtXFx1MDAzZXB1c2hlZF9zZXEgPSB0cmVxLVxcdTAwM2VzbnRfaXNuICsgMSk7XFxuIDU5NTpcXHRcXG4gNTk2OlxcdFxcdGlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKVxcbiA1OTc6XFx0XFx0XFx0dGNwX3Jlc2V0X2tlZXBhbGl2ZV90aW1lcihuZXdzaywga2VlcGFsaXZlX3RpbWVfd2hlbihuZXd0cCkpO1xcbiA1OTg6XFx0XFxuIDU5OTpcXHRcXHRuZXd0cC1cXHUwMDNlcnhfb3B0LnRzdGFtcF9vayA9IGlyZXEtXFx1MDAzZXRzdGFtcF9vaztcXG4gNjAwOlxcdFxcdG5ld3RwLVxcdTAwM2VyeF9vcHQuc2Fja19vayA9IGlyZXEtXFx1MDAzZXNhY2tfb2s7XFxuIDYwMTpcXHRcXHRuZXd0cC1cXHUwMDNld2luZG93X2NsYW1wID0gcmVxLVxcdTAwM2Vyc2tfd2luZG93X2NsYW1wO1xcbiA2MDI6XFx0XFx0bmV3dHAtXFx1MDAzZXJjdl9zc3RocmVzaCA9IHJlcS1cXHUwMDNlcnNrX3Jjdl93bmQ7XFxuIDYwMzpcXHRcXHRuZXd0cC1cXHUwMDNlcmN2X3duZCA9IHJlcS1cXHUwMDNlcnNrX3Jjdl93bmQ7XFxuIDYwNDpcXHRcXHRuZXd0cC1cXHUwMDNlcmN2X213bmRfc2VxID0gbmV3dHAtXFx1MDAzZXJjdl93dXAgKyByZXEtXFx1MDAzZXJza19yY3Zfd25kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNzozNS45NjE1ODUxMDJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQzNzk0MTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVENQIEVDTiBJbmhlcml0YW5jZSBpbiBTb2NrZXQgQ2xvbmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBFQ04gKEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uKSBzZXR0aW5ncyBhcmUgaGFuZGxlZCB3aGVuIGEgbmV3IHNvY2tldCBpcyBjcmVhdGVkIGZyb20gYSBsaXN0ZW5lciBzb2NrZXQgaW4gdGhlIGtlcm5lbC4gYGluZXRfY3NrX2Nsb25lX2xvY2soc2ssIHJlcSwgR0ZQX0FUT01JQylgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcgaGVyZS4gRnJvbSB3aGF0IEkgc2VlLCBpdCBjbG9uZXMgYHNrYCB1c2luZyBgc2tfY2xvbmVfbG9ja2AsIHdoaWNoIGVzc2VudGlhbGx5IG1lYW5zIGEgYG1lbWNweWAgb2YgdGhlIGVudGlyZSBgc3RydWN0IHNvY2tgLCBpbmNsdWRpbmcgdGhlIGVtYmVkZGVkIGBzdHJ1Y3QgdGNwX3NvY2tgLCBmcm9tIHRoZSBsaXN0ZW5pbmcgc29ja2V0IGBza2AgdG8gdGhlIG5ldyBzb2NrZXQgYG5ld3NrYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCB0ZWxscyBtZSB0aGF0IEVDTi1yZWxhdGVkIGZpZWxkcywgc3BlY2lmaWNhbGx5IGBuZXd0cC1cdTAwM2VlY25fbW9kZWAgYW5kIGBuZXd0cC1cdTAwM2VlY25fb3B0aW9uYCwgYXJlIGluaGVyaXRlZCBkaXJlY3RseSBmcm9tIHRoZSBsaXN0ZW5lci4gVGhhdCBpbmhlcml0YW5jZSBzZWVtcyBxdWl0ZSBkaXJlY3QuXG5cbk5vdywgbXkgbmV4dCBxdWVzdGlvbiBpcywgaG93IGFyZSB0aGVzZSBFQ04gc2V0dGluZ3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBkb190Y3BfZ2V0c29ja29wdGAgaGFuZGxlcyByZXRyaWV2aW5nIHRoZXNlIHZhbHVlcy4gTGV0J3MgbG9vayBhdCB0aGUgY29kZTpcblxuYGBgY1xuXHRjYXNlIFRDUF9FQ046XG5cdFx0dmFsID0gUkVBRF9PTkNFKHRwLVx1MDAzZWVjbl9tb2RlKTtcblx0XHRicmVhaztcblx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcblx0XHR2YWwgPSBSRUFEX09OQ0UodHAtXHUwMDNlZWNuX29wdGlvbik7XG5cdFx0YnJlYWs7XG5gYGBcblxuUmlnaHQsIGl0IHVzZXMgYFJFQURfT05DRWAgdG8gZmV0Y2ggdGhlIHZhbHVlcyBvZiBgdHAtXHUwMDNlZWNuX21vZGVgIGFuZCBgdHAtXHUwMDNlZWNuX29wdGlvbmAgZnJvbSB0aGUgVENQIGNvbnRyb2wgYmxvY2suIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGp1c3QgYSBkaXJlY3QgcmVhZCBvZiB0aGUgdmFsdWUuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYXJvdW5kIGBkb190Y3BfZ2V0c29ja29wdGAgaW4gYHRjcC5jYCB0byBzZWUgaG93IHRoYXQgYHZhbGAgaXMgdGhlbiByZXR1cm5lZCB0byB0aGUgdXNlci4gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHN5bmNocm9uaXphdGlvbiBvciBtZW1vcnkgb3JkZXJpbmcgaGVyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhhdCB2YWx1ZSBpcyB0cmFuc2ZlcnJlZCB0byB1c2VyIHNwYWNlLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG11bHRpdGhyZWFkZWQgYWNjZXNzIHRvIHRoZSBzb2NrZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTEwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6NDAuMzk5NTI4OTI0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA3NDE2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGRvX3RjcF9nZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTQ0MjM9c3RydWN0IHNrX2J1ZmYgKnRjcF9nZXRfdGltZXN0YW1waW5nX29wdF9zdGF0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy00NDk0LVxcbm5ldC9pcHY0L3RjcC5jOjQ0OTU6aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbm5ldC9pcHY0L3RjcC5jLTQ0OTYtXFx0XFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjQwLjUzMDI3NjkzMloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODgwOTE2Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc3BlY2lmaWVkIHNlY3Rpb25zIG9mIGBuZXQvaXB2NC90Y3AuY2AsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIFRDUCBDb25nZXN0aW9uIENvbnRyb2wqKlxuXG5BbHJpZ2h0LCBsZXQncyByZWZyZXNoIG91ciB1bmRlcnN0YW5kaW5nIG9mIHNvbWUgY29yZSBUQ1AgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgcmVnaW9ucyB3aXRoaW4gYG5ldC9pcHY0L3RjcC5jYCwgbmFtZWx5IGxpbmVzIDQ0OTUgdG8gNDUyMCBhbmQgdGhlbiA0ODQwIHRvIDQ4NzAuIE15IGZvY3VzIGhlcmUgaXMgbGlrZWx5IGFyb3VuZCBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtcy4gRnJvbSBleHBlcmllbmNlLCB0aG9zZSBsaW5lIG51bWJlcnMgdXN1YWxseSB0b3VjaCBvbiBrZXkgYWRqdXN0bWVudHMgdG8gdGhlIFRDUCB3aW5kb3cgb3IgcmV0cmFuc21pc3Npb24gYmVoYXZpb3IuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgcmVzcG9uZHMgdG8gcGFja2V0IGxvc3Mgb3IgY29uZ2VzdGlvbiBldmVudHMuIEl04oCZcyBwcm9iYWJseSByZWxhdGVkIHRvIGFkanVzdG1lbnRzIHRvIHRoZSBjb25nZXN0aW9uIHdpbmRvdywgc2xvdyBzdGFydCB0aHJlc2hvbGRzLCBvciByZXRyYW5zbWlzc2lvbiB0aW1lb3V0cy4gSSBhbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IG9mIGRpZmZlcmVudCBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcywgYXMgdGhlIGtlcm5lbCBjYW4gdXNlIHNldmVyYWwgZGlmZmVyZW50IG9uZXMuIEknbSBhbHNvIHJlYWR5IHRvIGFuYWx5emUgdGhlIGludHJpY2F0ZSBjYWxjdWxhdGlvbnMgaW52b2x2ZWQgaW4gbWFpbnRhaW5pbmcgYSBnb29kIHRocm91Z2hwdXQuIEkgbWF5IGZpbmQgY29kZSByZWxhdGVkIHRvIHNwZWNpZmljIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zLCBsaWtlIEN1YmljIG9yIEJCUiwgb3IgcG9zc2libHkgdGhlIGNvcmUgbG9naWMgZm9yIFRDUCdzIGNvbmdlc3Rpb24gYXZvaWRhbmNlLiBJJ2xsIG5lZWQgdG8gd2F0Y2ggZm9yIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGFueSB1c2Ugb2YgdGltZXJzIGFuZCBhc3NvY2lhdGVkIGNvbnRleHQgc3dpdGNoZXMsIGFuZCBhbnkgdXNlIG9mIHN0YXRpc3RpY3MvY291bnRlcnMgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGlzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcwNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjQ1LjQxMTE5NzYzNloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDg3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ5NTpcXHRpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXFxuNDQ5NjpcXHRcXHRcXHQgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcXG40NDk3OlxcdHtcXG40NDk4OlxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG40NDk5OlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbjQ1MDA6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbjQ1MDE6XFx0XFx0aW50IHVzZXJfbXNzO1xcbjQ1MDI6XFx0XFx0aW50IHZhbCwgbGVuO1xcbjQ1MDM6XFx0XFxuNDUwNDpcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXFxuNDUwNTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40NTA2OlxcdFxcbjQ1MDc6XFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuNDUwODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTA5OlxcdFxcbjQ1MTA6XFx0XFx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTtcXG40NTExOlxcdFxcbjQ1MTI6XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuNDUxMzpcXHRcXHRjYXNlIFRDUF9NQVhTRUc6XFxuNDUxNDpcXHRcXHRcXHR2YWwgPSB0cC1cXHUwMDNlbXNzX2NhY2hlO1xcbjQ1MTU6XFx0XFx0XFx0dXNlcl9tc3MgPSBSRUFEX09OQ0UodHAtXFx1MDAzZXJ4X29wdC51c2VyX21zcyk7XFxuNDUxNjpcXHRcXHRcXHRpZiAodXNlcl9tc3MgXFx1MDAyNlxcdTAwMjZcXG40NTE3OlxcdFxcdFxcdCAgICAoKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX0NMT1NFIHwgVENQRl9MSVNURU4pKSlcXG40NTE4OlxcdFxcdFxcdFxcdHZhbCA9IHVzZXJfbXNzO1xcbjQ1MTk6XFx0XFx0XFx0aWYgKHRwLVxcdTAwM2VyZXBhaXIpXFxuNDUyMDpcXHRcXHRcXHRcXHR2YWwgPSB0cC1cXHUwMDNlcnhfb3B0Lm1zc19jbGFtcDtcXG40NTIxOlxcdFxcdFxcdGJyZWFrO1xcbjQ1MjI6XFx0XFx0Y2FzZSBUQ1BfTk9ERUxBWTpcXG40NTIzOlxcdFxcdFxcdHZhbCA9ICEhKHRwLVxcdTAwM2Vub25hZ2xlXFx1MDAyNlRDUF9OQUdMRV9PRkYpO1xcbjQ1MjQ6XFx0XFx0XFx0YnJlYWs7XFxuNDUyNTpcXHRcXHRjYXNlIFRDUF9DT1JLOlxcbjQ1MjY6XFx0XFx0XFx0dmFsID0gISEodHAtXFx1MDAzZW5vbmFnbGVcXHUwMDI2VENQX05BR0xFX0NPUkspO1xcbjQ1Mjc6XFx0XFx0XFx0YnJlYWs7XFxuNDUyODpcXHRcXHRjYXNlIFRDUF9LRUVQSURMRTpcXG40NTI5OlxcdFxcdFxcdHZhbCA9IGtlZXBhbGl2ZV90aW1lX3doZW4odHApIC8gSFo7XFxuNDUzMDpcXHRcXHRcXHRicmVhaztcXG40NTMxOlxcdFxcdGNhc2UgVENQX0tFRVBJTlRWTDpcXG40NTMyOlxcdFxcdFxcdHZhbCA9IGtlZXBhbGl2ZV9pbnR2bF93aGVuKHRwKSAvIEhaO1xcbjQ1MzM6XFx0XFx0XFx0YnJlYWs7XFxuNDUzNDpcXHRcXHRjYXNlIFRDUF9LRUVQQ05UOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNzo0NS40MTE3MDk2MTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzNzA2NDk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipEaXZpbmcgaW50byBgZG9fdGNwX2dldHNvY2tvcHRgIC0gTGV0J3MgU2VlIFdoYXQncyBhdCB0aGUgRW5kISoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8ganVtcCByaWdodCB0byB0aGUgZW5kIG9mIGBkb190Y3BfZ2V0c29ja29wdGAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGluc2lkZSBhbmQgb3V0LCBidXQgSSBhbHdheXMgZmluZCBpdCB1c2VmdWwgdG8gcmVmcmVzaCBteSBtZW1vcnkgYnkgcXVpY2tseSByZXZpZXdpbmcgdGhlIHRhaWwgZW5kIG9mIHRoaW5ncyBmaXJzdC4gSXQncyBvZnRlbiB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgb3BlcmF0aW9uIGFuZCB0aGUgcmV0dXJuIHBhdGggYXJlIGNsZWFubHkgbGFpZCBvdXQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgcXVpY2sgaGlnaC1sZXZlbCB2aWV3IG9mIGhvdyB0aGlzIGZ1bmN0aW9uIHdyYXBzIHVwIGl0cyB3b3JrLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIHByb2Nlc3NlcyB0aGUgZGF0YSBhbmQgc2VuZHMgaXQgYmFjayB1cCB0byB0aGUgdXNlci1zcGFjZSBwcm9ncmFtIHRoYXQgbWFkZSB0aGUgY2FsbC4gSXQgZ2l2ZXMgYSBnb29kIHNlbnNlIG9mIGhvdyB0aGV5IGFjdHVhbGx5IGltcGxlbWVudCBnZXRzb2Nrb3B0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY4NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6NDguOTQ4ODU4OTgxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDg1NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDg1NTpcXHRcXHRcXHRicmVhaztcXG40ODU2OlxcdFxcdGNhc2UgVENQX0RFTEFDS19NQVhfVVM6XFxuNDg1NzpcXHRcXHRcXHR2YWwgPSBqaWZmaWVzX3RvX3VzZWNzKFJFQURfT05DRShpbmV0X2NzayhzayktXFx1MDAzZWljc2tfZGVsYWNrX21heCkpO1xcbjQ4NTg6XFx0XFx0XFx0YnJlYWs7XFxuNDg1OTpcXHRcXHRjYXNlIFRDUF9FQ046XFxuNDg2MDpcXHRcXHRcXHR2YWwgPSBSRUFEX09OQ0UodHAtXFx1MDAzZWVjbl9tb2RlKTtcXG40ODYxOlxcdFxcdFxcdGJyZWFrO1xcbjQ4NjI6XFx0XFx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcXG40ODYzOlxcdFxcdFxcdHZhbCA9IFJFQURfT05DRSh0cC1cXHUwMDNlZWNuX29wdGlvbik7XFxuNDg2NDpcXHRcXHRcXHRicmVhaztcXG40ODY1OlxcdFxcdGRlZmF1bHQ6XFxuNDg2NjpcXHRcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbjQ4Njc6XFx0XFx0fVxcbjQ4Njg6XFx0XFxuNDg2OTpcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNmxlbiwgc2l6ZW9mKGludCkpKVxcbjQ4NzA6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNDg3MTpcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgXFx1MDAyNnZhbCwgbGVuKSlcXG40ODcyOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjQ4NzM6XFx0XFx0cmV0dXJuIDA7XFxuNDg3NDpcXHR9XFxuNDg3NTpcXHRcXG40ODc2OlxcdGJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxcbjQ4Nzc6XFx0e1xcbjQ4Nzg6XFx0XFx0LyogVENQIGRvX3RjcF9nZXRzb2Nrb3B0IGhhcyBvcHRpbWl6ZWQgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvblxcbjQ4Nzk6XFx0XFx0ICogdG8gYXZvaWQgZXh0cmEgc29ja2V0IGxvY2sgZm9yIFRDUF9aRVJPQ09QWV9SRUNFSVZFLlxcbjQ4ODA6XFx0XFx0ICovXFxuNDg4MTpcXHRcXHRpZiAobGV2ZWwgPT0gU09MX1RDUCBcXHUwMDI2XFx1MDAyNiBvcHRuYW1lID09IFRDUF9aRVJPQ09QWV9SRUNFSVZFKVxcbjQ4ODI6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNDg4MzpcXHRcXG40ODg0OlxcdFxcdHJldHVybiBmYWxzZTtcXG40ODg1OlxcdH1cXG40ODg2OlxcdFxcbjQ4ODc6XFx0aW50IHRjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCxcXG40ODg4OlxcdFxcdFxcdCAgIGludCBfX3VzZXIgKm9wdGxlbilcXG40ODg5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6NDguOTUxNDQ3ODYxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTQ3NTQxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEZpbHRlcmluZyBJc3N1ZXMqKlxuXG5SaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgc29sX3RjcF9zb2Nrb3B0YCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBjb250ZXh0LiBXZSd2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBhbmQgaXQncyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIHJldmlzaXQgdGhlc2UgYXJlYXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29ja2V0IG9wdGlvbnMuIFNvY2tldCBvcHRpb25zIGNhbiBpbnRlcmFjdCBpbiByZWFsbHkgc3VidGxlIHdheXMgd2l0aCBmaWx0ZXJpbmcgbWVjaGFuaXNtcyBhbmQgaXQgd291bGQgYmUgYSBzaGFtZSB0byBtaXNzIHNvbWV0aGluZyBieSBub3QgbG9va2luZyBhdCB0aGlzIGFzcGVjdCwgZXZlbiBpZiBpdCBzZWVtcyB1bmxpa2VseS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGN1cnJlbnQgaW52ZXN0aWdhdGlvbiwgaXQgd291bGQgYmUgcHJ1ZGVudCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhvc2Ugb3B0aW9ucyBhbmQgYW55IGZpbHRlcmluZyBsb2dpYyB0aGF0IG1pZ2h0IGJlIGF0IHBsYXkuIFdlIGtub3cgdGhlc2UgYXJlYXMgY2FuIGdldCBjb21wbGV4IHF1aWNrbHksIHNvIGl0J3MgYmVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA3OjUwLjkwNjIwNDcxMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjkwNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU2NjA6XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuNTY2MTpcXHRcXHRjYXNlIFRDUF9OT0RFTEFZOlxcbjU2NjI6XFx0XFx0Y2FzZSBUQ1BfTUFYU0VHOlxcbjU2NjM6XFx0XFx0Y2FzZSBUQ1BfS0VFUElETEU6XFxuNTY2NDpcXHRcXHRjYXNlIFRDUF9LRUVQSU5UVkw6XFxuNTY2NTpcXHRcXHRjYXNlIFRDUF9LRUVQQ05UOlxcbjU2NjY6XFx0XFx0Y2FzZSBUQ1BfU1lOQ05UOlxcbjU2Njc6XFx0XFx0Y2FzZSBUQ1BfV0lORE9XX0NMQU1QOlxcbjU2Njg6XFx0XFx0Y2FzZSBUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFM6XFxuNTY2OTpcXHRcXHRjYXNlIFRDUF9VU0VSX1RJTUVPVVQ6XFxuNTY3MDpcXHRcXHRjYXNlIFRDUF9OT1RTRU5UX0xPV0FUOlxcbjU2NzE6XFx0XFx0Y2FzZSBUQ1BfU0FWRV9TWU46XFxuNTY3MjpcXHRcXHRjYXNlIFRDUF9SVE9fTUFYX01TOlxcbjU2NzM6XFx0XFx0Y2FzZSBUQ1BfRUNOOlxcbjU2NzQ6XFx0XFx0Y2FzZSBUQ1BfRUNOX09QVElPTjpcXG41Njc1OlxcdFxcdFxcdGlmICgqb3B0bGVuICE9IHNpemVvZihpbnQpKVxcbjU2NzY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTY3NzpcXHRcXHRcXHRicmVhaztcXG41Njc4OlxcdFxcdGNhc2UgVENQX0NPTkdFU1RJT046XFxuNTY3OTpcXHRcXHRcXHRyZXR1cm4gc29sX3RjcF9zb2Nrb3B0X2Nvbmdlc3Rpb24oc2ssIG9wdHZhbCwgb3B0bGVuLCBnZXRvcHQpO1xcbjU2ODA6XFx0XFx0Y2FzZSBUQ1BfU0FWRURfU1lOOlxcbjU2ODE6XFx0XFx0XFx0aWYgKCpvcHRsZW4gXFx1MDAzYyAxKVxcbjU2ODI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTY4MzpcXHRcXHRcXHRicmVhaztcXG41Njg0OlxcdFxcdGRlZmF1bHQ6XFxuNTY4NTpcXHRcXHRcXHRpZiAoZ2V0b3B0KVxcbjU2ODY6XFx0XFx0XFx0XFx0cmV0dXJuIGJwZl9zb2xfdGNwX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgKm9wdGxlbik7XFxuNTY4NzpcXHRcXHRcXHRyZXR1cm4gYnBmX3NvbF90Y3Bfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCAqb3B0bGVuKTtcXG41Njg4OlxcdFxcdH1cXG41Njg5OlxcdFxcbjU2OTA6XFx0XFx0aWYgKGdldG9wdCkge1xcbjU2OTE6XFx0XFx0XFx0aWYgKG9wdG5hbWUgPT0gVENQX1NBVkVEX1NZTikge1xcbjU2OTI6XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuNTY5MzpcXHRcXG41Njk0OlxcdFxcdFxcdFxcdGlmICghdHAtXFx1MDAzZXNhdmVkX3N5biB8fFxcbjU2OTU6XFx0XFx0XFx0XFx0ICAgICpvcHRsZW4gXFx1MDAzZSB0Y3Bfc2F2ZWRfc3luX2xlbih0cC1cXHUwMDNlc2F2ZWRfc3luKSlcXG41Njk2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU2OTc6XFx0XFx0XFx0XFx0bWVtY3B5KG9wdHZhbCwgdHAtXFx1MDAzZXNhdmVkX3N5bi1cXHUwMDNlZGF0YSwgKm9wdGxlbik7XFxuNTY5ODpcXHRcXHRcXHRcXHQvKiBJdCBjYW5ub3QgZnJlZSB0cC1cXHUwMDNlc2F2ZWRfc3luIGhlcmUgYmVjYXVzZSBpdFxcbjU2OTk6XFx0XFx0XFx0XFx0ICogZG9lcyBub3Qga25vdyBpZiB0aGUgdXNlciBzcGFjZSBzdGlsbCBuZWVkcyBpdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6NTAuOTA5NTAwMTAxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MDQ5MzkwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHNvbF90Y3Bfc29ja29wdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiBgc29sX3RjcF9zb2Nrb3B0YCBhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBuZXR3b3JrIGZpbHRlciBzdGFjay4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBleGFtaW5lIHRoZSByZXN0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBtZWF0IGFuZCBwb3RhdG9lcyAtIGhvdyB0aGlzIHNvY2tldCBvcHRpb24gaW50ZXJhY3RzIHdpdGggdGhlIGZpbHRlcmluZyBsb2dpYyBhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byBteSB3b3JrLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGUgc29ja2V0IG9wdGlvbiBtZWNoYW5pc20gd2l0aCB0aGUgZmlsdGVyIHN1YnN5c3RlbS4gVGhpcyBpcyB0aGUgY29ycmVjdCBmaWxlIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0cmVhc3VyZXMgdGhpcyBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowNzo1NC44MTQ0NDMyNzFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzAwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NzAwOlxcdFxcdFxcdFxcdCAqL1xcbjU3MDE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTcwMjpcXHRcXHRcXHR9XFxuNTcwMzpcXHRcXG41NzA0OlxcdFxcdFxcdHJldHVybiBkb190Y3BfZ2V0c29ja29wdChzaywgU09MX1RDUCwgb3B0bmFtZSxcXG41NzA1OlxcdFxcdFxcdFxcdFxcdFxcdCBLRVJORUxfU09DS1BUUihvcHR2YWwpLFxcbjU3MDY6XFx0XFx0XFx0XFx0XFx0XFx0IEtFUk5FTF9TT0NLUFRSKG9wdGxlbikpO1xcbjU3MDc6XFx0XFx0fVxcbjU3MDg6XFx0XFxuNTcwOTpcXHRcXHRyZXR1cm4gZG9fdGNwX3NldHNvY2tvcHQoc2ssIFNPTF9UQ1AsIG9wdG5hbWUsXFxuNTcxMDpcXHRcXHRcXHRcXHRcXHQgS0VSTkVMX1NPQ0tQVFIob3B0dmFsKSwgKm9wdGxlbik7XFxuNTcxMTpcXHR9XFxuNTcxMjpcXHRcXG41NzEzOlxcdHN0YXRpYyBib29sIHNrX2FsbG93c19zb2xfaXBfc29ja29wdChzdHJ1Y3Qgc29jayAqc2spXFxuNTcxNDpcXHR7XFxuNTcxNTpcXHRcXHRzd2l0Y2ggKHNrLVxcdTAwM2Vza19mYW1pbHkpIHtcXG41NzE2OlxcdFxcdGNhc2UgQUZfSU5FVDpcXG41NzE3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjU3MTg6XFx0XFx0Y2FzZSBBRl9JTkVUNjpcXG41NzE5OlxcdFxcdFxcdC8qIEFsbG93IGdldHRpbmcvc2V0dGluZyBzb2Nrb3B0IGZvciBwb3NzaWJsZSBpcHY0LW1hcHBlZCBpcHY2IHNvY2tldC4gKi9cXG41NzIwOlxcdFxcdFxcdHJldHVybiBzay1cXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1JBVyBcXHUwMDI2XFx1MDAyNiAhaXB2Nl9vbmx5X3NvY2soc2spO1xcbjU3MjE6XFx0XFx0ZGVmYXVsdDpcXG41NzIyOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41NzIzOlxcdFxcdH1cXG41NzI0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDc6NTQuODE1NDYwNzIxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMzU4NDU0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRDUCBTb2NrZXQgT3B0aW9uIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBzb2NrZXQgb3B0aW9uIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFN0YXJ0aW5nIHdpdGggYGRvX3RjcF9nZXRzb2Nrb3B0YCwgdGhlIGNvcmUgY29uY2VybiBpcyBob3cgdGhlIHZhbHVlIChgdmFsYCkgaXMgaGFuZGxlZC4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYHZhbGAsIGFuIGBpbnRgLCBnZXRzIGFzc2lnbmVkIGZyb20gYHRwLVx1MDAzZWVjbl9tb2RlYCwgd2hpY2ggaXMgYSBgdThgLiBJbXBvcnRhbnRseSwgdGhpcyBhc3NpZ25tZW50IGZ1bGx5IGluaXRpYWxpemVzIGFsbCB0aGUgYml0cyB3aXRoaW4gYHZhbGAgYmVjYXVzZSBvZiB0aGUgaW1wbGljaXQgdHlwZSBwcm9tb3Rpb24uIFRoZSBsZW5ndGggY2hlY2ssIGBsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGludCkpYCwgbG9va3MgZ29vZCwgZW5zdXJpbmcgd2UgZG9uJ3QgdHJ5IHRvIGNvcHkgbW9yZSBkYXRhIHRoYW4gZXhwZWN0ZWQuIEZpbmFsbHksIHRoZSBjcml0aWNhbCBgY29weV90b19zb2NrcHRyKG9wdHZhbCwgXHUwMDI2dmFsLCBsZW4pYCB1c2VzIGBsZW5gIHdoaWNoIGlzIGJvdW5kIGJ5IGBzaXplb2YoaW50KWAsIHNvIHdlJ3JlIG9ubHkgY29weWluZyBpbml0aWFsaXplZCBiaXRzIG9mIHRoZSBgaW50YCB0byB1c2Vyc3BhY2UuIFNvLCBgZG9fdGNwX2dldHNvY2tvcHRgIGFwcGVhcnMgc2FmZTsgbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIG91dC5cblxuTm93LCBsZXQncyBzaGlmdCBmb2N1cyB0byBgZG9fdGNwX3NldHNvY2tvcHRgLiBXZSBuZWVkIHRvIGV4YW1pbmUgaG93IGB2YWxgIGlzIGFjcXVpcmVkIGluIHRoaXMgY29udGV4dC4gVGhlIHByaW9yIGFuYWx5c2lzIG9mIGBkb190Y3BfZ2V0c29ja29wdGAgc2V0cyB0aGUgc3RhZ2UgZm9yIGEgc2ltaWxhciByaWdvcm91cyBjaGVjayBpbiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjA4OjAyLjE1MTMwOTQ5OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg3MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzg3MDpcXHRcXHRcXHRjaGFyIG5hbWVbVENQX1VMUF9OQU1FX01BWF07XFxuMzg3MTpcXHRcXG4zODcyOlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyAxKVxcbjM4NzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzg3NDpcXHRcXG4zODc1OlxcdFxcdFxcdHZhbCA9IHN0cm5jcHlfZnJvbV9zb2NrcHRyKG5hbWUsIG9wdHZhbCxcXG4zODc2OlxcdFxcdFxcdFxcdFxcdFxcdG1pbl90KGxvbmcsIFRDUF9VTFBfTkFNRV9NQVggLSAxLFxcbjM4Nzc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgb3B0bGVuKSk7XFxuMzg3ODpcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4zODc5OlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjM4ODA6XFx0XFx0XFx0bmFtZVt2YWxdID0gMDtcXG4zODgxOlxcdFxcbjM4ODI6XFx0XFx0XFx0c29ja29wdF9sb2NrX3NvY2soc2spO1xcbjM4ODM6XFx0XFx0XFx0ZXJyID0gdGNwX3NldF91bHAoc2ssIG5hbWUpO1xcbjM4ODQ6XFx0XFx0XFx0c29ja29wdF9yZWxlYXNlX3NvY2soc2spO1xcbjM4ODU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zODg2OlxcdFxcdH1cXG4zODg3OlxcdFxcdGNhc2UgVENQX0ZBU1RPUEVOX0tFWToge1xcbjM4ODg6XFx0XFx0XFx0X191OCBrZXlbVENQX0ZBU1RPUEVOX0tFWV9CVUZfTEVOR1RIXTtcXG4zODg5OlxcdFxcdFxcdF9fdTggKmJhY2t1cF9rZXkgPSBOVUxMO1xcbjM4OTA6XFx0XFxuMzg5MTpcXHRcXHRcXHQvKiBBbGxvdyBhIGJhY2t1cCBrZXkgYXMgd2VsbCB0byBmYWNpbGl0YXRlIGtleSByb3RhdGlvblxcbjM4OTI6XFx0XFx0XFx0ICogRmlyc3Qga2V5IGlzIHRoZSBhY3RpdmUgb25lLlxcbjM4OTM6XFx0XFx0XFx0ICovXFxuMzg5NDpcXHRcXHRcXHRpZiAob3B0bGVuICE9IFRDUF9GQVNUT1BFTl9LRVlfTEVOR1RIIFxcdTAwMjZcXHUwMDI2XFxuMzg5NTpcXHRcXHRcXHQgICAgb3B0bGVuICE9IFRDUF9GQVNUT1BFTl9LRVlfQlVGX0xFTkdUSClcXG4zODk2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM4OTc6XFx0XFxuMzg5ODpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoa2V5LCBvcHR2YWwsIG9wdGxlbikpXFxuMzg5OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zOTAwOlxcdFxcbjM5MDE6XFx0XFx0XFx0aWYgKG9wdGxlbiA9PSBUQ1BfRkFTVE9QRU5fS0VZX0JVRl9MRU5HVEgpXFxuMzkwMjpcXHRcXHRcXHRcXHRiYWNrdXBfa2V5ID0ga2V5ICsgVENQX0ZBU1RPUEVOX0tFWV9MRU5HVEg7XFxuMzkwMzpcXHRcXG4zOTA0OlxcdFxcdFxcdHJldHVybiB0Y3BfZmFzdG9wZW5fcmVzZXRfY2lwaGVyKG5ldCwgc2ssIGtleSwgYmFja3VwX2tleSk7XFxuMzkwNTpcXHRcXHR9XFxuMzkwNjpcXHRcXHRkZWZhdWx0OlxcbjM5MDc6XFx0XFx0XFx0LyogZmFsbHRocnUgKi9cXG4zOTA4OlxcdFxcdFxcdGJyZWFrO1xcbjM5MDk6XFx0XFx0fVxcbjM5MTA6XFx0XFxuMzkxMTpcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuMzkxMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zOTEzOlxcdFxcbjM5MTQ6XFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZ2YWwsIG9wdHZhbCwgc2l6ZW9mKHZhbCkpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTowODowMi4xNTE4MDg2MThaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzM5OTQ2MTIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBUQ1AgRUNOIFNvY2tldCBPcHRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB0YXNrIGlzIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggcmVxdWlyZXMgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBvciBub3QuXG5cbkZpcnN0LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyB0d28gbmV3IHNvY2tldCBvcHRpb25zLCBgVENQX0VDTmAgYW5kIGBUQ1BfRUNOX09QVElPTmAuIFRoZXNlIGFsbG93IGZvciBwZXItc29ja2V0IG92ZXJyaWRlcyBvZiB0aGUgc3lzdGVtLXdpZGUgRUNOIHNldHRpbmdzIGNvbnRyb2xsZWQgYnkgYHN5c2N0bF90Y3BfZWNuYCBhbmQgYHN5c2N0bF90Y3BfZWNuX29wdGlvbmAsIHJlc3BlY3RpdmVseS4gIEkgc2VlIHRoYXQgaW4gYGRvX3RjcF9zZXRzb2Nrb3B0YCwgdGhlcmUncyBwcm9wZXIgdHlwZSB2YWxpZGF0aW9uLCByYW5nZSBjaGVja3MgYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBuZXcgZmllbGRzIGBlY25fbW9kZWAgYW5kIGBlY25fb3B0aW9uYC4gIEkgY2hlY2tlZCB0aGF0IGBjb3B5X2Zyb21fc29ja3B0cmAgaXMgY29ycmVjdGx5IHVzZWQsIGVuc3VyaW5nIGRhdGEgaXMgY29waWVkIGZyb20gdXNlciBzcGFjZSBzYWZlbHkuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgb3B0aW9ucyBhcmUgdXNlZC4gSSBpZGVudGlmaWVkIGFsbCB1c2VzIG9mIGBlY25fbW9kZWAsIGBlY25fb3B0aW9uYCwgYHRjcF9lY25fbW9kZV9lZmZgLCBhbmQgYHRjcF9hY2NlY25fb3B0aW9uX2VmZmAgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgY29kZSBzZWVtcyBjbGVhbiBhbmQgbG9naWNhbGx5IHNvdW5kLCB3aXRoIG5vIG9idmlvdXMgaXNzdWVzLiAgSSB3ZW50IHRocm91Z2ggYWxsIHRoZSBsb2NhdGlvbnMsIGluY2x1ZGluZyBgaW5jbHVkZS9uZXQvdGNwX2Vjbi5oYCwgYHRjcF9lY25fc2VuZF9zeW5gLCBhbmQgdmFyaW91cyBwYXJ0cyBvZiBgdGNwX291dHB1dC5jYC4gRXZlcnl0aGluZyBzZWVtcyB0byBiZSB3ZWxsLWRlZmluZWQgYW5kIGhhbmRsZWQgaW4gYSBjb250cm9sbGVkIG1hbm5lci5cblxuVGhlIGNydWNpYWwgcGFydCBpcyBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZXhpc3QuIEkgY29uZmlybWVkIHRoYXQgYGVjbl9tb2RlYCBhbmQgYGVjbl9vcHRpb25gIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBpbiBgdGNwX2luaXRfc29jaygpYCB0byBgVENQX0VDTl9NT0RFX1VOU1BFQ2AgYW5kIGBUQ1BfQUNDRUNOX09QVElPTl9VTlNQRUNgIHJlc3BlY3RpdmVseS4gYGRvX3RjcF9nZXRzb2Nrb3B0YCBhc3NpZ25zIHRoZSB2YWx1ZSB0byBhIGxvY2FsIGBpbnQgdmFsYCBiZWZvcmUgY29weWluZyBpdCB0byB1c2Vyc3BhY2UsIHRodXMgZWxpbWluYXRpbmcgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCUEYgc29ja29wdHMgYXJlIGFsc28gY2FyZWZ1bGx5IGhhbmRsZWQuICBUaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb24gdGhlIGhlYXAsIHN0YWNrLCBvciB3aXRoaW4gYW55IGNvbmRpdGlvbmFsIGJyYW5jaGVzLiBUaGVyZSBpcyBubyBwYWRkaW5nIGNvbmNlcm4gZWl0aGVyLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbGxlZCBkYXRhIGZsb3csIEknbSBjb25maWRlbnQgdGhhdCBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gQW55IGNvbmNlcm5zIHdpdGggYm91bmRhcnkgY29uZGl0aW9ucywgcmFuZ2UgbGltaXRzIG9yIG90aGVyIGxvZ2ljIGVycm9ycyBhcmUgaXNzdWVzIGFkZHJlc3NlZCBieSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSwgTE9DS0RFUCBvciBnZW5lcmFsIGNvZGUgcmV2aWV3OyB0aGVzZSBhcmVuJ3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQncyBhIGNsZWFuIHBhdGNoIHRoYXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiBjb25jZXJucy4gSSdsbCBtYWtlIGEgbm90ZSBvZiBteSByZWFzb25pbmcgZm9yIGNvbnRyYXN0aW5nIEtNU0FOIGFuZCBLQVNBTi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA0NCwiT3V0cHV0VG9rZW5zIjoyNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6MDg6MDkuNTUxMjczNTIzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1zb2NrZXQgRUNOIGFuZCBBY2NFQ04gY29uZmlndXJhdGlvbiBvcHRpb25zIChUQ1BfRUNOIGFuZCBUQ1BfRUNOX09QVElPTikgdmlhIHNldHNvY2tvcHQvZ2V0c29ja29wdCBhbmQgQlBGIHNvY2tvcHMsIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBzeXNjdGxzLlxcblxcbktNU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XFxuLSBUaGUgbmV3IGZpZWxkcyBgZWNuX21vZGVgIGFuZCBgZWNuX29wdGlvbmAgaW4gYHN0cnVjdCB0Y3Bfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYFRDUF9FQ05fTU9ERV9VTlNQRUNgIGFuZCBgVENQX0FDQ0VDTl9PUFRJT05fVU5TUEVDYCBpbiBgdGNwX2luaXRfc29jaygpYCBhbmQgY29waWVkIGFjcm9zcyBzb2NrZXQgY2xvbmVzLlxcbi0gSW4gYGRvX3RjcF9nZXRzb2Nrb3B0KClgLCByZWFkaW5nIHRoZXNlIGZpZWxkcyBpbml0aWFsaXplcyB0aGUgZnVsbCBgaW50IHZhbGAgYmVmb3JlIGBjb3B5X3RvX3NvY2twdHIoKWAgY29waWVzIHRoZSBkYXRhIHRvIHVzZXIgc3BhY2UuIE5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgYnl0ZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgYnVmZmVyIGxlbmd0aCBtYW5pcHVsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBpbnRyb2R1Y2VkLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFzIHRoZSBjaGFuZ2VzIHByZXNlbnQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwZXItc29ja2V0IEVDTiBhbmQgQWNjRUNOIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoVENQX0VDTiBhbmQgVENQX0VDTl9PUFRJT04pIHZpYSBzZXRzb2Nrb3B0L2dldHNvY2tvcHQgYW5kIEJQRiBzb2Nrb3BzLCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgc3lzY3Rscy5cXG5cXG5LTVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxcbi0gVGhlIG5ldyBmaWVsZHMgYGVjbl9tb2RlYCBhbmQgYGVjbl9vcHRpb25gIGluIGBzdHJ1Y3QgdGNwX3NvY2tgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBUQ1BfRUNOX01PREVfVU5TUEVDYCBhbmQgYFRDUF9BQ0NFQ05fT1BUSU9OX1VOU1BFQ2AgaW4gYHRjcF9pbml0X3NvY2soKWAgYW5kIGNvcGllZCBhY3Jvc3Mgc29ja2V0IGNsb25lcy5cXG4tIEluIGBkb190Y3BfZ2V0c29ja29wdCgpYCwgcmVhZGluZyB0aGVzZSBmaWVsZHMgaW5pdGlhbGl6ZXMgdGhlIGZ1bGwgYGludCB2YWxgIGJlZm9yZSBgY29weV90b19zb2NrcHRyKClgIGNvcGllcyB0aGUgZGF0YSB0byB1c2VyIHNwYWNlLiBObyBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHN0YWNrIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXFxuLSBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGJ1ZmZlciBsZW5ndGggbWFuaXB1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZC5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZCBhcyB0aGUgY2hhbmdlcyBwcmVzZW50IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2mxl[1] Phase: Succeeded StartedAt: 2026-09-10 09:08:20 +0000 UTC FinishedAt: 2026-09-10 09:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 09:08:20 +0000 UTC FinishedAt: 2026-09-10 09:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2] Phase: Succeeded StartedAt: 2026-09-10 09:08:20 +0000 UTC FinishedAt: 2026-09-10 12:54:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 09:08:20 +0000 UTC FinishedAt: 2026-09-10 12:54:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 09:08:20 +0000 UTC FinishedAt: 2026-09-10 09:08:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 09:08:20 +0000 UTC FinishedAt: 2026-09-10 09:08:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowh2mxl/series-workflowh2mxl-convert-artifact-659429662/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 09:08:30 +0000 UTC FinishedAt: 2026-09-10 09:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 09:08:30 +0000 UTC FinishedAt: 2026-09-10 09:25:08 +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:*35be29a9-b9fe-4797-b51b-4e043960241c,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-workflowh2mxl/series-workflowh2mxl-convert-artifact-659429662/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": "80f0e58e-aad6-4f58-800b-15e414246440", "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-workflowh2mxl/series-workflowh2mxl-build-action-1167842820/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 09:08:30 +0000 UTC FinishedAt: 2026-09-10 09:24:56 +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:*35be29a9-b9fe-4797-b51b-4e043960241c,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-workflowh2mxl/series-workflowh2mxl-convert-artifact-659429662/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": "80f0e58e-aad6-4f58-800b-15e414246440", "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-workflowh2mxl/series-workflowh2mxl-build-action-1167842820/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 09:25:08 +0000 UTC FinishedAt: 2026-09-10 09:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 09:25:08 +0000 UTC FinishedAt: 2026-09-10 09:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 09:25:08 +0000 UTC FinishedAt: 2026-09-10 09:25:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 09:25:08 +0000 UTC FinishedAt: 2026-09-10 09:25:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowh2mxl/series-workflowh2mxl-convert-artifact-2789874129/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 09:25:20 +0000 UTC FinishedAt: 2026-09-10 09:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 09:25:20 +0000 UTC FinishedAt: 2026-09-10 09:27:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*80f0e58e-aad6-4f58-800b-15e414246440,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-workflowh2mxl/series-workflowh2mxl-build-action-1167842820/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-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 09:27:18 +0000 UTC FinishedAt: 2026-09-10 09:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 09:27:18 +0000 UTC FinishedAt: 2026-09-10 09:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 09:27:18 +0000 UTC FinishedAt: 2026-09-10 09:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 09:27:19 +0000 UTC FinishedAt: 2026-09-10 09:48:26 +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:*35be29a9-b9fe-4797-b51b-4e043960241c,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-workflowh2mxl/series-workflowh2mxl-convert-artifact-2789874129/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": "50ad2680-a0e4-4673-a6d0-f3ad6c1ba354", "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-workflowh2mxl/series-workflowh2mxl-build-action-3142844317/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 09:27:19 +0000 UTC FinishedAt: 2026-09-10 09:48:16 +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:*35be29a9-b9fe-4797-b51b-4e043960241c,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-workflowh2mxl/series-workflowh2mxl-convert-artifact-2789874129/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": "50ad2680-a0e4-4673-a6d0-f3ad6c1ba354", "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-workflowh2mxl/series-workflowh2mxl-build-action-3142844317/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 09:48:26 +0000 UTC FinishedAt: 2026-09-10 09:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 09:48:26 +0000 UTC FinishedAt: 2026-09-10 09:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 09:48:26 +0000 UTC FinishedAt: 2026-09-10 09:50:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 09:48:26 +0000 UTC FinishedAt: 2026-09-10 09:50:35 +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:*50ad2680-a0e4-4673-a6d0-f3ad6c1ba354,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-workflowh2mxl/series-workflowh2mxl-build-action-3142844317/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-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 09:50:45 +0000 UTC FinishedAt: 2026-09-10 12:54:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 09:50:45 +0000 UTC FinishedAt: 2026-09-10 12:54:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"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:*80f0e58e-aad6-4f58-800b-15e414246440,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*50ad2680-a0e4-4673-a6d0-f3ad6c1ba354,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-workflowh2mxl/series-workflowh2mxl-build-action-1167842820/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-workflowh2mxl/series-workflowh2mxl-build-action-3142844317/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 09:50:45 +0000 UTC FinishedAt: 2026-09-10 09:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 09:50:45 +0000 UTC FinishedAt: 2026-09-10 09:50:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"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-workflowh2mxl/series-workflowh2mxl-convert-artifact-3904840966/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 09:50:45 +0000 UTC FinishedAt: 2026-09-10 09:50:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 09:50:45 +0000 UTC FinishedAt: 2026-09-10 09:50:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 09:50:46 +0000 UTC FinishedAt: 2026-09-10 09:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 09:51:06 +0000 UTC FinishedAt: 2026-09-10 12:54:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2mxl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_setsockopt","do_tcp_getsockopt","tcp_conn_request","tcp_make_synack","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL"],"series_id":"3175bc9f-36fb-4d85-be11-986d981e3bdf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 09:51:06 +0000 UTC FinishedAt: 2026-09-10 12:53:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*80f0e58e-aad6-4f58-800b-15e414246440,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*50ad2680-a0e4-4673-a6d0-f3ad6c1ba354,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-workflowh2mxl/series-workflowh2mxl-build-action-1167842820/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-workflowh2mxl/series-workflowh2mxl-build-action-3142844317/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-workflowh2mxl/series-workflowh2mxl-convert-artifact-3904840966/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,}