Name: series-workflowwz9cx Phase: Succeeded StartedAt: 2026-09-11 14:04:39 +0000 UTC FinishedAt: 2026-09-11 18:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[0] Phase: Succeeded StartedAt: 2026-09-11 14:04:39 +0000 UTC FinishedAt: 2026-09-11 14:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 14:04:39 +0000 UTC FinishedAt: 2026-09-11 14:47:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "BPF_SYSCALL", "VETH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "BPF_SYSCALL", "VETH" ], "series_id": "491864db-b89e-468f-b762-3ce1f5bc799e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_prog_run_generic_xdp", "bpf_xdp_adjust_tail", "bpf_xdp_pull_data", "bpf_xdp_shrink_data", "veth_convert_skb_to_xdp_buff", "veth_xdp_rcv_skb", "veth_xdp_rcv_one" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtWRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfYWRqdXN0X3RhaWwmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9wdWxsX2RhdGEmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9zaHJpbmtfZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmJiMzNDssCiAgICAmIzM0O3ZldGhfeGRwX3Jjdl9za2ImIzM0OywKICAgICYjMzQ7dmV0aF94ZHBfcmN2X29uZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdGhlIGludGVybmFsIGZsYWcgYFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0xgIHRvIGB4ZHBfYnVmZmAgdG8gdHJhY2sgd2hldGhlciBub25saW5lYXIgc2tiIGZyYWdtZW50cyB3ZXJlIENPVyYjMzk7ZCBpbnRvIGEgYHBhZ2VfcG9vbGAuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYW4gWERQIHByb2dyYW0gc2hyaW5rcyB0aGUgYnVmZmVyIGFuZCByZWxlYXNlcyBmcmFnbWVudHMsIHRoZXkgYXJlIHByb3Blcmx5IGZyZWVkIGJhY2sgdG8gdGhlIHBhZ2UgcG9vbCByYXRoZXIgdGhhbiB0aHJvdWdoIGBwYWdlX2ZyYWdfZnJlZSgpYC5cblxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcGFnZSBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIGFsbG9jYXRvciB0eXBlIG1pc21hdGNoIGJ1ZyAod2hpY2ggd291bGQgbWFuaWZlc3QgYXMgcGFnZSBwb29sIGxlYWtzLCBiYWQgcGFnZSBzdGF0ZSwgb3IgcGFnZSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgcGFkZGluZyBsZWFrcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBmcmVlKSBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UvcmVmY291bnQgZGVidWdnZXJzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgWERQIGZyYWdtZW50IGhhbmRsaW5nIGxvZ2ljIGFjcm9zcyBjb3JlIG5ldHdvcmtpbmcsIGdlbmVyaWMgWERQLCBhbmQgdGhlIHZldGggZHJpdmVyIHRvIHByb3Blcmx5IHRyYWNrIHBhZ2VfcG9vbCBiYWNrZWQgZnJhZ21lbnRzIHdoZW4gc2hyaW5raW5nIFhEUCBidWZmZXJzLiBUaGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JrIGludGVyZmFjZXMgKHZldGgsIHR1bi90YXApIGFuZCBCUEYvWERQIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDQ2NDJmMjFmMTgwMTYwZTUzNDYzOTZhZTY4ZDYwYzMyOTNlODMwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE0OjQ1OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuaW5kZXggNmVkM2VlODExNTNmYi4uYTNmZGYxOTU5Yjc2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3ZldGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdmV0aC5jXG5AQCAtNzc1LDYgJiM0Mzs3NzUsMTIgQEAgc3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSxcbiBcdGlmIChza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3MpIHtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZXhkcF9mcmFnc19zaXplID0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFx0XHR4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEEgbm9ubGluZWFyIHNrYiB3YXMgY293JiMzOTtkIGludG8gcnEtXHUwMDNlcGFnZV9wb29sIGFib3ZlLCBzbyB0aGVcbiYjNDM7XHRcdCAqIGZyYWdzIG11c3QgYmUgZnJlZWQgdG8gdGhhdCBwb29sLCBub3QgdmlhIHRoZSByeHEmIzM5O3NcbiYjNDM7XHRcdCAqIE1FTV9UWVBFX1BBR0VfU0hBUkVELlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xuIFx0fSBlbHNlIHtcbiBcdFx0eGRwX2J1ZmZfY2xlYXJfZnJhZ3NfZmxhZyh4ZHApO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcC5oIGIvaW5jbHVkZS9uZXQveGRwLmhcbmluZGV4IGFhNzQyZjQxM2MzNTguLjhmZDQxMzllOWNiZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZHAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQveGRwLmhcbkBAIC04MSw2ICYjNDM7ODEsMTQgQEAgZW51bSB4ZHBfYnVmZl9mbGFncyB7XG4gXHQgKiBYRFAgcHJvZ3JhbSBpcyBub3QgYXR0YWNoZWQuXG4gXHQgKi9cbiBcdFhEUF9GTEFHU19GUkFHU19VTlJFQURBQkxFXHQ9IEJJVCgyKSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGZyYWdzIGFyZSBwYWdlX3Bvb2wgbWVtb3J5IGV2ZW4gdGhvdWdoIHJ4cS1cdTAwM2VtZW0udHlwZSBpcyBub3Q6IGFcbiYjNDM7XHQgKiBza2ItYmFja2VkIFhEUCBidWZmIChnZW5lcmljIFhEUCwgdmV0aCkgaXMgY293JiMzOTtkIGludG8gYSBwYWdlX3Bvb2wuXG4mIzQzO1x0ICogeGRwX2J1ZmYgb25seTogYW4geGRwX2ZyYW1lIGRlc2NyaWJlcyBpdHMgbWVtb3J5IHdpdGggOjptZW1fdHlwZSwgc29cbiYjNDM7XHQgKiB0aGlzIGlzIHN0cmlwcGVkIGluIHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKCkgYW5kIHJlLWRlcml2ZWQgZnJvbVxuJiM0MztcdCAqIDo6bWVtX3R5cGUgaW4geGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZigpLlxuJiM0MztcdCAqL1xuJiM0MztcdFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0xcdD0gQklUKDMpLFxuIH07XG4gXG4gc3RydWN0IHhkcF9idWZmIHtcbkBAIC0xMzEsNiAmIzQzOzEzOSwxNiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgeGRwX2J1ZmZfc2V0X2ZyYWdfdW5yZWFkYWJsZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiBcdHhkcC1cdTAwM2VmbGFncyB8PSBYRFBfRkxBR1NfRlJBR1NfVU5SRUFEQUJMRTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB4ZHBfYnVmZl9zZXRfZnJhZ19wcChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiYjNDM7e1xuJiM0MztcdHhkcC1cdTAwM2VmbGFncyB8PSBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgeGRwX2J1ZmZfaXNfZnJhZ19wcChjb25zdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhISh4ZHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHhkcF9idWZmX2dldF9za2JfZmxhZ3MoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApXG4ge1xuIFx0cmV0dXJuIHhkcC1cdTAwM2VmbGFncztcbkBAIC0zOTQsNiAmIzQzOzQxMiwxNSBAQCB2b2lkIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUsXG4gXHR4ZHAtXHUwMDNlZGF0YV9tZXRhID0gZnJhbWUtXHUwMDNlZGF0YSAtIGZyYW1lLVx1MDAzZW1ldGFzaXplO1xuIFx0eGRwLVx1MDAzZWZyYW1lX3N6ID0gZnJhbWUtXHUwMDNlZnJhbWVfc3o7XG4gXHR4ZHAtXHUwMDNlZmxhZ3MgPSBmcmFtZS1cdTAwM2VmbGFncztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGZyYW1lLVx1MDAzZWZsYWdzIG5ldmVyIGNhcnJpZXMgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCAoaXQgaXMgc3RyaXBwZWRcbiYjNDM7XHQgKiBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpKTsgcmUtZGVyaXZlIGl0IGZyb20gdGhlIGZyYW1lJiMzOTtzIG93blxuJiM0MztcdCAqIG1lbW9yeSB0eXBlLiB2ZXRoIGFuZCBkZXZtYXAgcmVidWlsZCBhIGJ1ZmYgaGVyZSBhbmQgcnVuIGEgcHJvZ3JhbVxuJiM0MztcdCAqIHdob3NlIHJ4cSBzYXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyB3aXRob3V0IHRoaXMgYSBzaHJpbmsgd291bGRcbiYjNDM7XHQgKiBmcmVlIGEgcGFnZV9wb29sIGZyYWcgdGhyb3VnaCBwYWdlX2ZyYWdfZnJlZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmcmFtZS1cdTAwM2VtZW1fdHlwZSA9PSBNRU1fVFlQRV9QQUdFX1BPT0wpXG4mIzQzO1x0XHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lXG5AQCAtNDIwLDcgJiM0Mzs0NDcsOCBAQCBpbnQgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4gXHR4ZHBfZnJhbWUtXHUwMDNlaGVhZHJvb20gPSBoZWFkcm9vbSAtIHNpemVvZigqeGRwX2ZyYW1lKTtcbiBcdHhkcF9mcmFtZS1cdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xuIFx0eGRwX2ZyYW1lLVx1MDAzZWZyYW1lX3N6ID0geGRwLVx1MDAzZWZyYW1lX3N6O1xuLVx0eGRwX2ZyYW1lLVx1MDAzZWZsYWdzID0geGRwLVx1MDAzZWZsYWdzO1xuJiM0MztcdC8qIFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wgaXMgeGRwX2J1ZmYgb25seSwgZG9uJiMzOTt0IGNhcnJ5IGl0IG92ZXIgKi9cbiYjNDM7XHR4ZHBfZnJhbWUtXHUwMDNlZmxhZ3MgPSB4ZHAtXHUwMDNlZmxhZ3MgXHUwMDI2IH5YRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDI5MGUwZjA5OWU2YmYuLjk0MjY4ZjRkM2M1ZjcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC01NTMyLDYgJiM0Mzs1NTMyLDEyIEBAIHUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4gXHRpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSB7XG4gXHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2V4ZHBfZnJhZ3Nfc2l6ZSA9IHNrYi1cdTAwM2VkYXRhX2xlbjtcbiBcdFx0eGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIG5vbmxpbmVhciBza2Igd2FzIGNvdyYjMzk7ZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYnlcbiYjNDM7XHRcdCAqIHNrYl9jb3dfZGF0YV9mb3JfeGRwKCkgYmVmb3JlIHdlIGdvdCBoZXJlLCBzbyB0aGUgZnJhZ3MgbXVzdFxuJiM0MztcdFx0ICogYmUgZnJlZWQgdG8gdGhhdCBwb29sLCBub3QgdmlhIHRoZSByeHEmIzM5O3MgTUVNX1RZUEVfUEFHRV9TSEFSRUQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR4ZHBfYnVmZl9jbGVhcl9mcmFnc19mbGFnKHhkcCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uZDM0YmE1NmQ3OWQ4ZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTQzNzgsNiAmIzQzOzQzNzgsMTMgQEAgc3RhdGljIGJvb2wgYnBmX3hkcF9zaHJpbmtfZGF0YShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc2tiX2ZyYWdfdCAqZnJhZyxcbiBcdGlmIChtZW1fdHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MKSB7XG4gXHRcdG5ldG1lbSA9IDA7XG4gXHRcdHpjX2ZyYWcgPSBicGZfeGRwX3Nocmlua19kYXRhX3pjKHhkcCwgc2hyaW5rLCB0YWlsLCByZWxlYXNlKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHhkcF9idWZmX2lzX2ZyYWdfcHAoeGRwKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNrYi1iYWNrZWQgWERQIChnZW5lcmljIFhEUCwgdmV0aCkgY293JiMzOTtzIHRoZSBmcmFncyBpbnRvIGFcbiYjNDM7XHRcdCAqIHBhZ2VfcG9vbCB3aGlsZSB0aGUgcnhxIHN0YXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBmcmVlXG4mIzQzO1x0XHQgKiB0aGUgZnJhZyB0byB0aGUgcG9vbCwgbm90IHZpYSBwYWdlX2ZyYWdfZnJlZSgpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfUE9PTDtcbiBcdH1cbiBcbiBcdGlmIChyZWxlYXNlKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU4ZjkwMzRhMjY4NFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXG5AQCAtMCwwICYjNDM7MSwyODggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldHdvcmtfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3R1bi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3Vpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hkcF9zaHJpbmtfZnJhZ3Muc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIGdlbmVyaWMtWERQIHByb2dyYW0gdGhhdCBzaHJpbmtzIGludG8gdGhlIGZyYWdzIGZyZWVzIGEgcGFnZV9wb29sIGZyYWcuXG4mIzQzOyAqIHNrYi1iYWNrZWQgWERQIGZpcnN0IGNvdyYjMzk7cyB0aGUgbm9ubGluZWFyIHNrYiBpbnRvIHBhZ2VfcG9vbCBtZW1vcnlcbiYjNDM7ICogKHNrYl9jb3dfZGF0YV9mb3JfeGRwKCkgZm9yIGdlbmVyaWMgWERQLCBza2JfcHBfY293X2RhdGEoKSBmb3IgdmV0aCksIGJ1dFxuJiM0MzsgKiB0aGUgc2hhcmVkIHJ4cSBpcyByZWdpc3RlcmVkIGFzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBhIGJ1Z2d5IGtlcm5lbFxuJiM0MzsgKiBmcmVlcyB0aGUgZnJhZyB3aXRoIHBhZ2VfZnJhZ19mcmVlKCkgLVx1MDAzZSBcJiMzNDtCYWQgcGFnZSBzdGF0ZSAuLi4gcGFnZV9wb29sIGxlYWtcJiMzNDsuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBUQVBfTkFNRVx0XCYjMzQ7eGRwX3NocmluazBcJiMzNDtcbiYjNDM7I2RlZmluZSBUQVBfTkVUTlNcdFwmIzM0O3hkcF9zaHJpbmtfdGFwXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5TX05BTUVfTUFYX0xFTlx0MzJcbiYjNDM7I2RlZmluZSBWRVRIX0xPQ0FMXHRcJiMzNDt4ZHBfc2hyaW5rQVwmIzM0O1xuJiM0MzsjZGVmaW5lIFZFVEhfUEVFUlx0XCYjMzQ7eGRwX3Nocmlua0JcJiMzNDtcbiYjNDM7I2RlZmluZSBWRVRIX0xPQ0FMX0lQXHRcJiMzNDsxMC45LjkuMVwmIzM0O1xuJiM0MzsjZGVmaW5lIFZFVEhfUEVFUl9JUFx0XCYjMzQ7MTAuOS45LjJcJiMzNDtcbiYjNDM7I2RlZmluZSBWRVRIX0xPQ0FMX01BQ1x0XCYjMzQ7MDI6MDA6MDA6MDA6MDA6MDFcJiMzNDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIHNrYl9wcF9jb3dfZGF0YSgpIGtlZXBzIHVwIHRvIG9uZSBwYWdlIGluIHRoZSBsaW5lYXIgcGFydCwgc28gdGhlIHBhY2tldFxuJiM0MzsgKiBzaXplcyBiZWxvdyBvbmx5IGxlYXZlIGEgZnJhZyAoc21hbGxlciB0aGFuIHRoZSAzMDAwLWJ5dGUgc2hyaW5rLCBzbyBpdCBpc1xuJiM0MzsgKiByZWxlYXNlZCBhcyBhIHdob2xlKSBvbiA0SyBwYWdlcy4gU2tpcCBlbHNld2hlcmUgcmF0aGVyIHRoYW4gcnVuIGEgdGVzdFxuJiM0MzsgKiB0aGF0IGNhbm5vdCB0ZWxsIGEgZml4ZWQga2VybmVsIGZyb20gYSBidWdneSBvbmUuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFBBR0VfU0laRV80S1x0NDA5NlxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogR2VuZXJvdXMsIHNvIGEgbG9hZGVkIENJIGRvZXMgbm90IGZhaWwgdGhlIGFzc2VydCBwcmVtYXR1cmVseTsgbm9ybWFsbHlcbiYjNDM7ICogdGhlIGZpcnN0IGNoZWNrIGFscmVhZHkgc3VjY2VlZHMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFdBSVRfSVRFUlNcdDEwMDAwXG4mIzQzOyNkZWZpbmUgV0FJVF9VU1x0XHQxMDAwXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wcm9nKHN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFdBSVRfSVRFUlMgXHUwMDI2XHUwMDI2ICFza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHVzbGVlcChXQUlUX1VTKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoY29uc3QgY2hhciAqaWZuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlmcmVxIGlmciA9IHtcbiYjNDM7XHRcdC5pZnJfZmxhZ3MgPSBJRkZfVEFQIHwgSUZGX05PX1BJIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUyxcbiYjNDM7XHR9O1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRzdHJzY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9kZXYvbmV0L3R1blwmIzM0OywgT19SRFdSKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBpb2N0bChmZCwgVFVOU0VUSUZGLCBcdTAwMjZpZnIpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGVyciA9IC1lcnJubztcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFNpbWlsYXIgdG8gZmxvd19kaXNzZWN0b3IuYzogd3JpdGV2KCkgYW4gSUZGX05BUElfRlJBR1MgdGFwIHRvIGJ1aWxkIGFcbiYjNDM7ICogbm9ubGluZWFyIHNrYiB0aGF0IHR1biBydW5zIHRocm91Z2ggZG9feGRwX2dlbmVyaWMoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfdHVuKHN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsKVxuJiM0Mzt7XG4mIzQzO1x0X191OCBoZWFkWzc0XSwgZnJhZzFbMjA0OF0sIGZyYWcyWzIwNDhdO1xuJiM0MztcdHN0cnVjdCBldGhoZHIgKmV0aCA9ICh2b2lkICopaGVhZDtcbiYjNDM7XHRpbnQgdGFwX2ZkID0gLTEsIGlmaW5kZXgsIGVycjtcbiYjNDM7XHRzdHJ1Y3QgbmV0bnNfb2JqICpucyA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGlvdmVjIGlvdlszXTtcbiYjNDM7XHRzc2l6ZV90IG47XG4mIzQzO1xuJiM0MztcdGlmIChnZXRwYWdlc2l6ZSgpICE9IFBBR0VfU0laRV80Sykge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnMgPSBuZXRuc19uZXcoVEFQX05FVE5TLCB0cnVlKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobnMsIFwmIzM0O25ldG5zX25ld1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHRhcF9mZCA9IGNyZWF0ZV90YXBfbmFwaV9mcmFncyhUQVBfTkFNRSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UodGFwX2ZkLCAwLCBcJiMzNDtjcmVhdGVfdGFwXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRTWVMob3V0LCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgXCYjMzQ7IFRBUF9OQU1FIFwmIzM0OyB1cFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChUQVBfTkFNRSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1QoaWZpbmRleCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXhcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNocmlua19yYW4gPSAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfeGRwX2F0dGFjaChpZmluZGV4LCBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy54ZHBfc2hyaW5rKSxcbiYjNDM7XHRcdFx0ICAgICAwLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2JwZl94ZHBfYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoaGVhZCwgMCwgc2l6ZW9mKGhlYWQpKTtcbiYjNDM7XHRtZW1zZXQoZnJhZzEsIDB4NDEsIHNpemVvZihmcmFnMSkpO1xuJiM0MztcdG1lbXNldChmcmFnMiwgMHg0Miwgc2l6ZW9mKGZyYWcyKSk7XG4mIzQzO1x0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4mIzQzO1xuJiM0MztcdGlvdlswXS5pb3ZfYmFzZSA9IGhlYWQ7ICBpb3ZbMF0uaW92X2xlbiA9IHNpemVvZihoZWFkKTtcbiYjNDM7XHRpb3ZbMV0uaW92X2Jhc2UgPSBmcmFnMTsgaW92WzFdLmlvdl9sZW4gPSBzaXplb2YoZnJhZzEpO1xuJiM0MztcdGlvdlsyXS5pb3ZfYmFzZSA9IGZyYWcyOyBpb3ZbMl0uaW92X2xlbiA9IHNpemVvZihmcmFnMik7XG4mIzQzO1xuJiM0MztcdG4gPSB3cml0ZXYodGFwX2ZkLCBpb3YsIEFSUkFZX1NJWkUoaW92KSk7XG4mIzQzO1x0QVNTRVJUX0VRKG4sIHNpemVvZihoZWFkKSAmIzQzOyBzaXplb2YoZnJhZzEpICYjNDM7IHNpemVvZihmcmFnMiksIFwmIzM0O3dyaXRldlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHdhaXRfZm9yX3Byb2coc2tlbCk7XG4mIzQzO1x0LyogYSBidWdneSBrZXJuZWwgb25seSBzcGxhdHMgXCYjMzQ7cGFnZV9wb29sIGxlYWtcJiMzNDssIGl0IGRvZXMgbm90IGZhaWwgaGVyZSAqL1xuJiM0MztcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuLCAwLCBcJiMzNDt4ZHBfcHJvZ19yYW5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRicGZfeGRwX2RldGFjaChpZmluZGV4LCAwLCBOVUxMKTtcbiYjNDM7b3V0OlxuJiM0MztcdGlmICh0YXBfZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UodGFwX2ZkKTtcbiYjNDM7XHRuZXRuc19mcmVlKG5zKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQm90aCB2ZXRoIGVuZHMgbGl2ZSBpbiB0aGVpciBvd24gbmFtZXNwYWNlLCBzbyB0aGUgdHJhZmZpYyByZWFsbHkgY3Jvc3Nlc1xuJiM0MzsgKiB0aGUgcGFpciBhbmQgbm90aGluZyBpcyBjcmVhdGVkIGluIHRoZSBjYWxsZXImIzM5O3MgbmFtZXNwYWNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB2ZXRoX3NldHVwKGNoYXIgKm5zMCwgY2hhciAqbnMxKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soYXBwZW5kX3RpZChuczAsIE5TX05BTUVfTUFYX0xFTiksIFwmIzM0O2FwcGVuZF90aWQgbnMwXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhhcHBlbmRfdGlkKG5zMSwgTlNfTkFNRV9NQVhfTEVOKSwgXCYjMzQ7YXBwZW5kX3RpZCBuczFcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBuczApO1xuJiM0MztcdFNZUyhmYWlsX25zMCwgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBuczEpO1xuJiM0MztcdFNZUyhmYWlsX25zMSwgXCYjMzQ7aXAgLW4gJXMgbGluayBhZGQgJXMgbXR1IDgwMDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlcyBtdHUgODAwMFwmIzM0OyxcbiYjNDM7XHQgICAgbnMwLCBWRVRIX0xPQ0FMLCBWRVRIX1BFRVIpO1xuJiM0MztcdFNZUyhmYWlsX25zMSwgXCYjMzQ7aXAgLW4gJXMgbGluayBzZXQgJXMgbmV0bnMgJXNcJiMzNDssIG5zMCwgVkVUSF9QRUVSLCBuczEpO1xuJiM0MztcdFNZUyhmYWlsX25zMSwgXCYjMzQ7aXAgLW4gJXMgbGluayBzZXQgJXMgYWRkcmVzcyAlc1wmIzM0OywgbnMwLCBWRVRIX0xPQ0FMLFxuJiM0MztcdCAgICBWRVRIX0xPQ0FMX01BQyk7XG4mIzQzO1x0U1lTKGZhaWxfbnMxLCBcJiMzNDtpcCAtbiAlcyBhZGRyIGFkZCAlcy8yNCBkZXYgJXNcJiMzNDssIG5zMCwgVkVUSF9MT0NBTF9JUCxcbiYjNDM7XHQgICAgVkVUSF9MT0NBTCk7XG4mIzQzO1x0U1lTKGZhaWxfbnMxLCBcJiMzNDtpcCAtbiAlcyBsaW5rIHNldCAlcyB1cFwmIzM0OywgbnMwLCBWRVRIX0xPQ0FMKTtcbiYjNDM7XHRTWVMoZmFpbF9uczEsIFwmIzM0O2lwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlc1wmIzM0OywgbnMxLCBWRVRIX1BFRVJfSVAsXG4mIzQzO1x0ICAgIFZFVEhfUEVFUik7XG4mIzQzO1x0U1lTKGZhaWxfbnMxLCBcJiMzNDtpcCAtbiAlcyBsaW5rIHNldCAlcyB1cFwmIzM0OywgbnMxLCBWRVRIX1BFRVIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2ZhaWxfbnMxOlxuJiM0MztcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsICVzXCYjMzQ7LCBuczEpO1xuJiM0MztmYWlsX25zMDpcbiYjNDM7XHRTWVNfTk9GQUlMKFwmIzM0O2lwIG5ldG5zIGRlbCAlc1wmIzM0OywgbnMwKTtcbiYjNDM7ZmFpbDpcbiYjNDM7XHRyZXR1cm4gLTE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZldGhfY2xlYW51cChjb25zdCBjaGFyICpuczAsIGNvbnN0IGNoYXIgKm5zMSlcbiYjNDM7e1xuJiM0MztcdC8qIERyb3BwaW5nIHRoZSBuYW1lc3BhY2VzIHRha2VzIHRoZSB2ZXRoIHBhaXIgYW5kIGl0cyBYRFAgcHJvZ3JhbXMuICovXG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgJXNcJiMzNDssIG5zMSk7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgJXNcJiMzNDssIG5zMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmV0aF9hdHRhY2goY29uc3QgY2hhciAqbnMsIGNvbnN0IGNoYXIgKmRldiwgaW50IHByb2dfZmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbjtcbiYjNDM7XHRpbnQgaWZpbmRleCwgZXJyO1xuJiM0MztcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhucyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwmIzM0O29wZW5fbmV0bnNcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZmluZGV4ID0gaWZfbmFtZXRvaW5kZXgoZGV2KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChpZmluZGV4LCAwLCBcJiMzNDtpZl9uYW1ldG9pbmRleFwmIzM0OykpIHtcbiYjNDM7XHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3hkcF9hdHRhY2goaWZpbmRleCwgcHJvZ19mZCwgMCwgTlVMTCk7XG4mIzQzO1x0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfeGRwX2F0dGFjaFwmIzM0OykgPyAwIDogLTE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEEgbGFyZ2UgcGluZyBidWlsZHMgYSBub25saW5lYXIgc2tiIHRoYXQgdmV0aCBjb3cmIzM5O3MgaW50byBpdHMgcGFnZV9wb29sLiAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3ZldGgoc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIG5zMFtOU19OQU1FX01BWF9MRU5dID0gXCYjMzQ7eGRwX3Nocmlua19uczAtXCYjMzQ7O1xuJiM0MztcdGNoYXIgbnMxW05TX05BTUVfTUFYX0xFTl0gPSBcJiMzNDt4ZHBfc2hyaW5rX25zMS1cJiMzNDs7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRwYWdlc2l6ZSgpICE9IFBBR0VfU0laRV80Sykge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZldGhfc2V0dXAobnMwLCBuczEpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHZldGhfYXR0YWNoKG5zMCwgVkVUSF9MT0NBTCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MueGRwX3NocmluaykpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZXhlYyAlcyBwaW5nIC1xIC1zIDUwMDAgLWMgMyAtVyAxICVzXCYjMzQ7LFxuJiM0MztcdFx0ICAgbnMxLCBWRVRIX0xPQ0FMX0lQKTtcbiYjNDM7XG4mIzQzO1x0d2FpdF9mb3JfcHJvZyhza2VsKTtcbiYjNDM7XHQvKiBhIGJ1Z2d5IGtlcm5lbCBvbmx5IHNwbGF0cyBcJiMzNDtwYWdlX3Bvb2wgbGVha1wmIzM0OywgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovXG4mIzQzO1x0QVNTRVJUX0dUKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNocmlua19yYW4sIDAsIFwmIzM0O3hkcF9wcm9nX3JhblwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHR2ZXRoX2NsZWFudXAobnMwLCBuczEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBMT0NBTCBjb3cmIzM5O3MgdGhlIGluY29taW5nIHNrYiBhbmQgcmV0dXJucyBYRFBfVFgsIHNvIHRoZSBidWZmIGlzIHR1cm5lZCBpbnRvXG4mIzQzOyAqIGFuIHhkcF9mcmFtZSBhbmQgYm91bmNlZCB0byBQRUVSLCB3aGljaCBzaHJpbmtzIGEgZnJhZy4gQSBwYWdlX3Bvb2wgdGFnXG4mIzQzOyAqIHJlY29yZGVkIG9uIHRoZSBidWZmIG11c3Qgbm90IGxlYWsgaW50byB0aGUgZnJhbWUsIG9yIFBFRVIgZnJlZXMgYSBwbGFpblxuJiM0MzsgKiBwYWdlICh3aG9zZSBwcCB3YXMgYWxyZWFkeSBjbGVhcmVkIG9uIHRoZSBYRFBfVFggc2lkZSkgYXMgcGFnZV9wb29sIG1lbW9yeS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfdmV0aF90eChzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbClcbiYjNDM7e1xuJiM0MztcdGNoYXIgbnMwW05TX05BTUVfTUFYX0xFTl0gPSBcJiMzNDt4ZHBfc2hyaW5rX3R4MC1cJiMzNDs7XG4mIzQzO1x0Y2hhciBuczFbTlNfTkFNRV9NQVhfTEVOXSA9IFwmIzM0O3hkcF9zaHJpbmtfdHgxLVwmIzM0OztcbiYjNDM7XG4mIzQzO1x0aWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmV0aF9zZXR1cChuczAsIG5zMSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTE9DQUwgYm91bmNlcyBldmVyeXRoaW5nIChpbmNsLiBBUlApIHdpdGggWERQX1RYLCBzbyBwaW4gYSBzdGF0aWNcbiYjNDM7XHQgKiBuZWlnaGJvdXIgdG8gbGV0IHRoZSBwaW5nJiMzOTtzIHBheWxvYWQgYWN0dWFsbHkgcmVhY2ggaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKG91dCwgXCYjMzQ7aXAgLW4gJXMgbmVpZ2ggYWRkICVzIGxsYWRkciAlcyBkZXYgJXMgbnVkIHBlcm1hbmVudFwmIzM0OyxcbiYjNDM7XHQgICAgbnMxLCBWRVRIX0xPQ0FMX0lQLCBWRVRIX0xPQ0FMX01BQywgVkVUSF9QRUVSKTtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlc2hyaW5rX3JhbiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICh2ZXRoX2F0dGFjaChuczAsIFZFVEhfTE9DQUwsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF90eCkpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKHZldGhfYXR0YWNoKG5zMSwgVkVUSF9QRUVSLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy54ZHBfc2hyaW5rKSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXNcJiMzNDssXG4mIzQzO1x0XHQgICBuczEsIFZFVEhfTE9DQUxfSVApO1xuJiM0MztcbiYjNDM7XHR3YWl0X2Zvcl9wcm9nKHNrZWwpO1xuJiM0MztcdC8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzIFwmIzM0O3BhZ2VfcG9vbCBsZWFrXCYjMzQ7LCBpdCBkb2VzIG5vdCBmYWlsIGhlcmUgKi9cbiYjNDM7XHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc2hyaW5rX3JhbiwgMCwgXCYjMzQ7eGRwX3Byb2dfcmFuXCYjMzQ7KTtcbiYjNDM7b3V0OlxuJiM0MztcdHZldGhfY2xlYW51cChuczAsIG5zMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF94ZHBfc2hyaW5rX2ZyYWdzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbDtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHhkcF9zaHJpbmtfZnJhZ3NfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbF9vcGVuX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt0dW5cJiMzNDspKVxuJiM0MztcdFx0dGVzdF90dW4oc2tlbCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dmV0aFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3ZldGgoc2tlbCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dmV0aF90eFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3ZldGhfdHgoc2tlbCk7XG4mIzQzO1xuJiM0MztcdHhkcF9zaHJpbmtfZnJhZ3NfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zaHJpbmtfZnJhZ3MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFkODk1YWI2OTkzMDNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmNcbkBAIC0wLDAgJiM0MzsxLDM0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7aW50IHNocmlua19yYW47XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7eGRwLmZyYWdzXCYjMzQ7KVxuJiM0MztpbnQgeGRwX3NocmluayhzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJ1bnMgb24gYm90aCBza2ItYmFja2VkIFhEUCBwYXRocyAoZ2VuZXJpYyBYRFAgdmlhIHR1biwgYW5kIHZldGgpOlxuJiM0MztcdCAqIHRoZSBub25saW5lYXIgc2tiIGlzIGNvdyYjMzk7ZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYmVmb3JlIHdlIHJ1biwgc29cbiYjNDM7XHQgKiBzaHJpbmtpbmcgdGhlIHRhaWwgcmVsZWFzZXMgYSB3aG9sZSBmcmFnIHRoYXQgaGFzIHRvIGdvIGJhY2sgdG8gdGhhdFxuJiM0MztcdCAqIHBvb2wuIFRoZSBjb3VudGVyIG9ubHkgdGVsbHMgdXMgdGhlIHByb2dyYW0gcmFuIGFuZCB0aGUgaGVscGVyXG4mIzQzO1x0ICogc3VjY2VlZGVkIC0tIGEgbGluZWFyIGJ1ZmYgcmV0dXJucyAwIGFzIHdlbGwgLS0gaXQgZG9lcyBub3QgcHJvdmUgYVxuJiM0MztcdCAqIGZyYWcgd2FzIHJlbGVhc2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChicGZfeGRwX2FkanVzdF90YWlsKGN0eCwgLTMwMDApID09IDApXG4mIzQzO1x0XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZzaHJpbmtfcmFuLCAxKTtcbiYjNDM7XHRyZXR1cm4gWERQX1BBU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt4ZHAuZnJhZ3NcJiMzNDspXG4mIzQzO2ludCB4ZHBfdHgoc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCb3VuY2UgdGhlIGZyYW1lIGJhY2suIE9uIHZldGggdGhpcyB0dXJucyB0aGUgYnVmZiBpbnRvIGFuXG4mIzQzO1x0ICogeGRwX2ZyYW1lLCB3aGljaCBpcyB3aGVyZSBhIGJ1ZmYtc2NvcGVkIHBhZ2VfcG9vbCB0YWcgbXVzdCBub3QgbGVha1xuJiM0MztcdCAqIGludG8gdGhlIGZyYW1lIGhhbmRlZCB0byB0aGUgcGVlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gWERQX1RYO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtWRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfYWRqdXN0X3RhaWwmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9wdWxsX2RhdGEmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9zaHJpbmtfZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmJiMzNDssCiAgICAmIzM0O3ZldGhfeGRwX3Jjdl9za2ImIzM0OywKICAgICYjMzQ7dmV0aF94ZHBfcmN2X29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBYRFAgZnJhZ21lbnQgaGFuZGxpbmcgbG9naWMgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgZ2VuZXJpYyBYRFAsIGFuZCB0aGUgdmV0aCBkcml2ZXIgdG8gcHJvcGVybHkgdHJhY2sgcGFnZV9wb29sIGJhY2tlZCBmcmFnbWVudHMgd2hlbiBzaHJpbmtpbmcgWERQIGJ1ZmZlcnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyAodmV0aCwgdHVuL3RhcCkgYW5kIEJQRi9YRFAgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNDY0MmYyMWYxODAxNjBlNTM0NjM5NmFlNjhkNjBjMzI5M2U4MzAxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTQ6NDU6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggNmVkM2VlODExNTNmYi4uYTNmZGYxOTU5Yjc2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtNzc1LDYgJiM0Mzs3NzUsMTIgQEAgc3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSwKIAlpZiAoc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFncykgewogCQlza2Jfc2hpbmZvKHNrYiktJmd0O3hkcF9mcmFnc19zaXplID0gc2tiLSZndDtkYXRhX2xlbjsKIAkJeGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIG5vbmxpbmVhciBza2Igd2FzIGNvdyYjMzk7ZCBpbnRvIHJxLSZndDtwYWdlX3Bvb2wgYWJvdmUsIHNvIHRoZQomIzQzOwkJICogZnJhZ3MgbXVzdCBiZSBmcmVlZCB0byB0aGF0IHBvb2wsIG5vdCB2aWEgdGhlIHJ4cSYjMzk7cwomIzQzOwkJICogTUVNX1RZUEVfUEFHRV9TSEFSRUQuCiYjNDM7CQkgKi8KJiM0MzsJCXhkcF9idWZmX3NldF9mcmFnX3BwKHhkcCk7CiAJfSBlbHNlIHsKIAkJeGRwX2J1ZmZfY2xlYXJfZnJhZ3NfZmxhZyh4ZHApOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcC5oIGIvaW5jbHVkZS9uZXQveGRwLmgKaW5kZXggYWE3NDJmNDEzYzM1OC4uOGZkNDEzOWU5Y2JkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQveGRwLmgKQEAgLTgxLDYgJiM0Mzs4MSwxNCBAQCBlbnVtIHhkcF9idWZmX2ZsYWdzIHsKIAkgKiBYRFAgcHJvZ3JhbSBpcyBub3QgYXR0YWNoZWQuCiAJICovCiAJWERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEUJPSBCSVQoMiksCiYjNDM7CS8qCiYjNDM7CSAqIGZyYWdzIGFyZSBwYWdlX3Bvb2wgbWVtb3J5IGV2ZW4gdGhvdWdoIHJ4cS0mZ3Q7bWVtLnR5cGUgaXMgbm90OiBhCiYjNDM7CSAqIHNrYi1iYWNrZWQgWERQIGJ1ZmYgKGdlbmVyaWMgWERQLCB2ZXRoKSBpcyBjb3cmIzM5O2QgaW50byBhIHBhZ2VfcG9vbC4KJiM0MzsJICogeGRwX2J1ZmYgb25seTogYW4geGRwX2ZyYW1lIGRlc2NyaWJlcyBpdHMgbWVtb3J5IHdpdGggOjptZW1fdHlwZSwgc28KJiM0MzsJICogdGhpcyBpcyBzdHJpcHBlZCBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpIGFuZCByZS1kZXJpdmVkIGZyb20KJiM0MzsJICogOjptZW1fdHlwZSBpbiB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKCkuCiYjNDM7CSAqLwomIzQzOwlYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MCT0gQklUKDMpLAogfTsKIAogc3RydWN0IHhkcF9idWZmIHsKQEAgLTEzMSw2ICYjNDM7MTM5LDE2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB4ZHBfYnVmZl9zZXRfZnJhZ191bnJlYWRhYmxlKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQogCXhkcC0mZ3Q7ZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEU7CiB9CiAKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoc3RydWN0IHhkcF9idWZmICp4ZHApCiYjNDM7ewomIzQzOwl4ZHAtJmd0O2ZsYWdzIHw9IFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0w7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB4ZHBfYnVmZl9pc19mcmFnX3BwKGNvbnN0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQomIzQzO3sKJiM0MzsJcmV0dXJuICEhKHhkcC0mZ3Q7ZmxhZ3MgJmFtcDsgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgeGRwX2J1ZmZfZ2V0X3NrYl9mbGFncyhjb25zdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCkKIHsKIAlyZXR1cm4geGRwLSZndDtmbGFnczsKQEAgLTM5NCw2ICYjNDM7NDEyLDE1IEBAIHZvaWQgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSwKIAl4ZHAtJmd0O2RhdGFfbWV0YSA9IGZyYW1lLSZndDtkYXRhIC0gZnJhbWUtJmd0O21ldGFzaXplOwogCXhkcC0mZ3Q7ZnJhbWVfc3ogPSBmcmFtZS0mZ3Q7ZnJhbWVfc3o7CiAJeGRwLSZndDtmbGFncyA9IGZyYW1lLSZndDtmbGFnczsKJiM0MzsJLyoKJiM0MzsJICogZnJhbWUtJmd0O2ZsYWdzIG5ldmVyIGNhcnJpZXMgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCAoaXQgaXMgc3RyaXBwZWQKJiM0MzsJICogaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSk7IHJlLWRlcml2ZSBpdCBmcm9tIHRoZSBmcmFtZSYjMzk7cyBvd24KJiM0MzsJICogbWVtb3J5IHR5cGUuIHZldGggYW5kIGRldm1hcCByZWJ1aWxkIGEgYnVmZiBoZXJlIGFuZCBydW4gYSBwcm9ncmFtCiYjNDM7CSAqIHdob3NlIHJ4cSBzYXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyB3aXRob3V0IHRoaXMgYSBzaHJpbmsgd291bGQKJiM0MzsJICogZnJlZSBhIHBhZ2VfcG9vbCBmcmFnIHRocm91Z2ggcGFnZV9mcmFnX2ZyZWUoKS4KJiM0MzsJICovCiYjNDM7CWlmIChmcmFtZS0mZ3Q7bWVtX3R5cGUgPT0gTUVNX1RZUEVfUEFHRV9QT09MKQomIzQzOwkJeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKTsKIH0KIAogc3RhdGljIGlubGluZQpAQCAtNDIwLDcgJiM0Mzs0NDcsOCBAQCBpbnQgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHAsCiAJeGRwX2ZyYW1lLSZndDtoZWFkcm9vbSA9IGhlYWRyb29tIC0gc2l6ZW9mKCp4ZHBfZnJhbWUpOwogCXhkcF9mcmFtZS0mZ3Q7bWV0YXNpemUgPSBtZXRhc2l6ZTsKIAl4ZHBfZnJhbWUtJmd0O2ZyYW1lX3N6ID0geGRwLSZndDtmcmFtZV9zejsKLQl4ZHBfZnJhbWUtJmd0O2ZsYWdzID0geGRwLSZndDtmbGFnczsKJiM0MzsJLyogWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCBpcyB4ZHBfYnVmZiBvbmx5LCBkb24mIzM5O3QgY2FycnkgaXQgb3ZlciAqLwomIzQzOwl4ZHBfZnJhbWUtJmd0O2ZsYWdzID0geGRwLSZndDtmbGFncyAmYW1wOyB+WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCAyOTBlMGYwOTllNmJmLi45NDI2OGY0ZDNjNWY3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtNTUzMiw2ICYjNDM7NTUzMiwxMiBAQCB1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLAogCWlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHsKIAkJc2tiX3NoaW5mbyhza2IpLSZndDt4ZHBfZnJhZ3Nfc2l6ZSA9IHNrYi0mZ3Q7ZGF0YV9sZW47CiAJCXhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7CiYjNDM7CQkvKgomIzQzOwkJICogQSBub25saW5lYXIgc2tiIHdhcyBjb3cmIzM5O2QgaW50byBwYWdlX3Bvb2wgbWVtb3J5IGJ5CiYjNDM7CQkgKiBza2JfY293X2RhdGFfZm9yX3hkcCgpIGJlZm9yZSB3ZSBnb3QgaGVyZSwgc28gdGhlIGZyYWdzIG11c3QKJiM0MzsJCSAqIGJlIGZyZWVkIHRvIHRoYXQgcG9vbCwgbm90IHZpYSB0aGUgcnhxJiMzOTtzIE1FTV9UWVBFX1BBR0VfU0hBUkVELgomIzQzOwkJICovCiYjNDM7CQl4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApOwogCX0gZWxzZSB7CiAJCXhkcF9idWZmX2NsZWFyX2ZyYWdzX2ZsYWcoeGRwKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLmQzNGJhNTZkNzlkOGYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC00Mzc4LDYgJiM0Mzs0Mzc4LDEzIEBAIHN0YXRpYyBib29sIGJwZl94ZHBfc2hyaW5rX2RhdGEoc3RydWN0IHhkcF9idWZmICp4ZHAsIHNrYl9mcmFnX3QgKmZyYWcsCiAJaWYgKG1lbV90eXBlID09IE1FTV9UWVBFX1hTS19CVUZGX1BPT0wpIHsKIAkJbmV0bWVtID0gMDsKIAkJemNfZnJhZyA9IGJwZl94ZHBfc2hyaW5rX2RhdGFfemMoeGRwLCBzaHJpbmssIHRhaWwsIHJlbGVhc2UpOwomIzQzOwl9IGVsc2UgaWYgKHhkcF9idWZmX2lzX2ZyYWdfcHAoeGRwKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFNrYi1iYWNrZWQgWERQIChnZW5lcmljIFhEUCwgdmV0aCkgY293JiMzOTtzIHRoZSBmcmFncyBpbnRvIGEKJiM0MzsJCSAqIHBhZ2VfcG9vbCB3aGlsZSB0aGUgcnhxIHN0YXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBmcmVlCiYjNDM7CQkgKiB0aGUgZnJhZyB0byB0aGUgcG9vbCwgbm90IHZpYSBwYWdlX2ZyYWdfZnJlZSgpLgomIzQzOwkJICovCiYjNDM7CQltZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfUE9PTDsKIAl9CiAKIAlpZiAocmVsZWFzZSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVlOGY5MDM0YTI2ODQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfc2hyaW5rX2ZyYWdzLmMKQEAgLTAsMCAmIzQzOzEsMjg4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXR3b3JrX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfdHVuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX2V0aGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy91aW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FycGEvaW5ldC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGRwX3Nocmlua19mcmFncy5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBnZW5lcmljLVhEUCBwcm9ncmFtIHRoYXQgc2hyaW5rcyBpbnRvIHRoZSBmcmFncyBmcmVlcyBhIHBhZ2VfcG9vbCBmcmFnLgomIzQzOyAqIHNrYi1iYWNrZWQgWERQIGZpcnN0IGNvdyYjMzk7cyB0aGUgbm9ubGluZWFyIHNrYiBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkKJiM0MzsgKiAoc2tiX2Nvd19kYXRhX2Zvcl94ZHAoKSBmb3IgZ2VuZXJpYyBYRFAsIHNrYl9wcF9jb3dfZGF0YSgpIGZvciB2ZXRoKSwgYnV0CiYjNDM7ICogdGhlIHNoYXJlZCByeHEgaXMgcmVnaXN0ZXJlZCBhcyBNRU1fVFlQRV9QQUdFX1NIQVJFRCwgc28gYSBidWdneSBrZXJuZWwKJiM0MzsgKiBmcmVlcyB0aGUgZnJhZyB3aXRoIHBhZ2VfZnJhZ19mcmVlKCkgLSZndDsgJiMzNDtCYWQgcGFnZSBzdGF0ZSAuLi4gcGFnZV9wb29sIGxlYWsmIzM0Oy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFRBUF9OQU1FCSYjMzQ7eGRwX3NocmluazAmIzM0OwomIzQzOyNkZWZpbmUgVEFQX05FVE5TCSYjMzQ7eGRwX3Nocmlua190YXAmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlNfTkFNRV9NQVhfTEVOCTMyCiYjNDM7I2RlZmluZSBWRVRIX0xPQ0FMCSYjMzQ7eGRwX3Nocmlua0EmIzM0OwomIzQzOyNkZWZpbmUgVkVUSF9QRUVSCSYjMzQ7eGRwX3Nocmlua0ImIzM0OwomIzQzOyNkZWZpbmUgVkVUSF9MT0NBTF9JUAkmIzM0OzEwLjkuOS4xJiMzNDsKJiM0MzsjZGVmaW5lIFZFVEhfUEVFUl9JUAkmIzM0OzEwLjkuOS4yJiMzNDsKJiM0MzsjZGVmaW5lIFZFVEhfTE9DQUxfTUFDCSYjMzQ7MDI6MDA6MDA6MDA6MDA6MDEmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogc2tiX3BwX2Nvd19kYXRhKCkga2VlcHMgdXAgdG8gb25lIHBhZ2UgaW4gdGhlIGxpbmVhciBwYXJ0LCBzbyB0aGUgcGFja2V0CiYjNDM7ICogc2l6ZXMgYmVsb3cgb25seSBsZWF2ZSBhIGZyYWcgKHNtYWxsZXIgdGhhbiB0aGUgMzAwMC1ieXRlIHNocmluaywgc28gaXQgaXMKJiM0MzsgKiByZWxlYXNlZCBhcyBhIHdob2xlKSBvbiA0SyBwYWdlcy4gU2tpcCBlbHNld2hlcmUgcmF0aGVyIHRoYW4gcnVuIGEgdGVzdAomIzQzOyAqIHRoYXQgY2Fubm90IHRlbGwgYSBmaXhlZCBrZXJuZWwgZnJvbSBhIGJ1Z2d5IG9uZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBBR0VfU0laRV80Swk0MDk2CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBHZW5lcm91cywgc28gYSBsb2FkZWQgQ0kgZG9lcyBub3QgZmFpbCB0aGUgYXNzZXJ0IHByZW1hdHVyZWx5OyBub3JtYWxseQomIzQzOyAqIHRoZSBmaXJzdCBjaGVjayBhbHJlYWR5IHN1Y2NlZWRzLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgV0FJVF9JVEVSUwkxMDAwMAomIzQzOyNkZWZpbmUgV0FJVF9VUwkJMTAwMAomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHdhaXRfZm9yX3Byb2coc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFdBSVRfSVRFUlMgJmFtcDsmYW1wOyAhc2tlbC0mZ3Q7YnNzLSZndDtzaHJpbmtfcmFuOyBpJiM0MzsmIzQzOykKJiM0MzsJCXVzbGVlcChXQUlUX1VTKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoY29uc3QgY2hhciAqaWZuYW1lKQomIzQzO3sKJiM0MzsJc3RydWN0IGlmcmVxIGlmciA9IHsKJiM0MzsJCS5pZnJfZmxhZ3MgPSBJRkZfVEFQIHwgSUZGX05PX1BJIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUywKJiM0MzsJfTsKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CXN0cnNjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvZGV2L25ldC90dW4mIzM0OywgT19SRFdSKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CWVyciA9IGlvY3RsKGZkLCBUVU5TRVRJRkYsICZhbXA7aWZyKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZXJyID0gLWVycm5vOwomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2ltaWxhciB0byBmbG93X2Rpc3NlY3Rvci5jOiB3cml0ZXYoKSBhbiBJRkZfTkFQSV9GUkFHUyB0YXAgdG8gYnVpbGQgYQomIzQzOyAqIG5vbmxpbmVhciBza2IgdGhhdCB0dW4gcnVucyB0aHJvdWdoIGRvX3hkcF9nZW5lcmljKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF90dW4oc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpCiYjNDM7ewomIzQzOwlfX3U4IGhlYWRbNzRdLCBmcmFnMVsyMDQ4XSwgZnJhZzJbMjA0OF07CiYjNDM7CXN0cnVjdCBldGhoZHIgKmV0aCA9ICh2b2lkICopaGVhZDsKJiM0MzsJaW50IHRhcF9mZCA9IC0xLCBpZmluZGV4LCBlcnI7CiYjNDM7CXN0cnVjdCBuZXRuc19vYmogKm5zID0gTlVMTDsKJiM0MzsJc3RydWN0IGlvdmVjIGlvdlszXTsKJiM0MzsJc3NpemVfdCBuOwomIzQzOwomIzQzOwlpZiAoZ2V0cGFnZXNpemUoKSAhPSBQQUdFX1NJWkVfNEspIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlucyA9IG5ldG5zX25ldyhUQVBfTkVUTlMsIHRydWUpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnMsICYjMzQ7bmV0bnNfbmV3JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0YXBfZmQgPSBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoVEFQX05BTUUpOwomIzQzOwlpZiAoIUFTU0VSVF9HRSh0YXBfZmQsIDAsICYjMzQ7Y3JlYXRlX3RhcCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlTWVMob3V0LCAmIzM0O2lwIGxpbmsgc2V0IGRldiAmIzM0OyBUQVBfTkFNRSAmIzM0OyB1cCYjMzQ7KTsKJiM0MzsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KFRBUF9OQU1FKTsKJiM0MzsJaWYgKCFBU1NFUlRfR1QoaWZpbmRleCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4gPSAwOwomIzQzOwomIzQzOwllcnIgPSBicGZfeGRwX2F0dGFjaChpZmluZGV4LCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3NocmluayksCiYjNDM7CQkJICAgICAwLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl94ZHBfYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1lbXNldChoZWFkLCAwLCBzaXplb2YoaGVhZCkpOwomIzQzOwltZW1zZXQoZnJhZzEsIDB4NDEsIHNpemVvZihmcmFnMSkpOwomIzQzOwltZW1zZXQoZnJhZzIsIDB4NDIsIHNpemVvZihmcmFnMikpOwomIzQzOwlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CiYjNDM7CiYjNDM7CWlvdlswXS5pb3ZfYmFzZSA9IGhlYWQ7ICBpb3ZbMF0uaW92X2xlbiA9IHNpemVvZihoZWFkKTsKJiM0MzsJaW92WzFdLmlvdl9iYXNlID0gZnJhZzE7IGlvdlsxXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcxKTsKJiM0MzsJaW92WzJdLmlvdl9iYXNlID0gZnJhZzI7IGlvdlsyXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcyKTsKJiM0MzsKJiM0MzsJbiA9IHdyaXRldih0YXBfZmQsIGlvdiwgQVJSQVlfU0laRShpb3YpKTsKJiM0MzsJQVNTRVJUX0VRKG4sIHNpemVvZihoZWFkKSAmIzQzOyBzaXplb2YoZnJhZzEpICYjNDM7IHNpemVvZihmcmFnMiksICYjMzQ7d3JpdGV2JiMzNDspOwomIzQzOwomIzQzOwl3YWl0X2Zvcl9wcm9nKHNrZWwpOwomIzQzOwkvKiBhIGJ1Z2d5IGtlcm5lbCBvbmx5IHNwbGF0cyAmIzM0O3BhZ2VfcG9vbCBsZWFrJiMzNDssIGl0IGRvZXMgbm90IGZhaWwgaGVyZSAqLwomIzQzOwlBU1NFUlRfR1Qoc2tlbC0mZ3Q7YnNzLSZndDtzaHJpbmtfcmFuLCAwLCAmIzM0O3hkcF9wcm9nX3JhbiYjMzQ7KTsKJiM0MzsKJiM0MzsJYnBmX3hkcF9kZXRhY2goaWZpbmRleCwgMCwgTlVMTCk7CiYjNDM7b3V0OgomIzQzOwlpZiAodGFwX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZSh0YXBfZmQpOwomIzQzOwluZXRuc19mcmVlKG5zKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCb3RoIHZldGggZW5kcyBsaXZlIGluIHRoZWlyIG93biBuYW1lc3BhY2UsIHNvIHRoZSB0cmFmZmljIHJlYWxseSBjcm9zc2VzCiYjNDM7ICogdGhlIHBhaXIgYW5kIG5vdGhpbmcgaXMgY3JlYXRlZCBpbiB0aGUgY2FsbGVyJiMzOTtzIG5hbWVzcGFjZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHZldGhfc2V0dXAoY2hhciAqbnMwLCBjaGFyICpuczEpCiYjNDM7ewomIzQzOwlpZiAoIUFTU0VSVF9PSyhhcHBlbmRfdGlkKG5zMCwgTlNfTkFNRV9NQVhfTEVOKSwgJiMzNDthcHBlbmRfdGlkIG5zMCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soYXBwZW5kX3RpZChuczEsIE5TX05BTUVfTUFYX0xFTiksICYjMzQ7YXBwZW5kX3RpZCBuczEmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBuczApOwomIzQzOwlTWVMoZmFpbF9uczAsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIG5zMSk7CiYjNDM7CVNZUyhmYWlsX25zMSwgJiMzNDtpcCAtbiAlcyBsaW5rIGFkZCAlcyBtdHUgODAwMCB0eXBlIHZldGggcGVlciBuYW1lICVzIG10dSA4MDAwJiMzNDssCiYjNDM7CSAgICBuczAsIFZFVEhfTE9DQUwsIFZFVEhfUEVFUik7CiYjNDM7CVNZUyhmYWlsX25zMSwgJiMzNDtpcCAtbiAlcyBsaW5rIHNldCAlcyBuZXRucyAlcyYjMzQ7LCBuczAsIFZFVEhfUEVFUiwgbnMxKTsKJiM0MzsJU1lTKGZhaWxfbnMxLCAmIzM0O2lwIC1uICVzIGxpbmsgc2V0ICVzIGFkZHJlc3MgJXMmIzM0OywgbnMwLCBWRVRIX0xPQ0FMLAomIzQzOwkgICAgVkVUSF9MT0NBTF9NQUMpOwomIzQzOwlTWVMoZmFpbF9uczEsICYjMzQ7aXAgLW4gJXMgYWRkciBhZGQgJXMvMjQgZGV2ICVzJiMzNDssIG5zMCwgVkVUSF9MT0NBTF9JUCwKJiM0MzsJICAgIFZFVEhfTE9DQUwpOwomIzQzOwlTWVMoZmFpbF9uczEsICYjMzQ7aXAgLW4gJXMgbGluayBzZXQgJXMgdXAmIzM0OywgbnMwLCBWRVRIX0xPQ0FMKTsKJiM0MzsJU1lTKGZhaWxfbnMxLCAmIzM0O2lwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBuczEsIFZFVEhfUEVFUl9JUCwKJiM0MzsJICAgIFZFVEhfUEVFUik7CiYjNDM7CVNZUyhmYWlsX25zMSwgJiMzNDtpcCAtbiAlcyBsaW5rIHNldCAlcyB1cCYjMzQ7LCBuczEsIFZFVEhfUEVFUik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2ZhaWxfbnMxOgomIzQzOwlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICVzJiMzNDssIG5zMSk7CiYjNDM7ZmFpbF9uczA6CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMmIzM0OywgbnMwKTsKJiM0MztmYWlsOgomIzQzOwlyZXR1cm4gLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZldGhfY2xlYW51cChjb25zdCBjaGFyICpuczAsIGNvbnN0IGNoYXIgKm5zMSkKJiM0Mzt7CiYjNDM7CS8qIERyb3BwaW5nIHRoZSBuYW1lc3BhY2VzIHRha2VzIHRoZSB2ZXRoIHBhaXIgYW5kIGl0cyBYRFAgcHJvZ3JhbXMuICovCiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMmIzM0OywgbnMxKTsKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAlcyYjMzQ7LCBuczApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZldGhfYXR0YWNoKGNvbnN0IGNoYXIgKm5zLCBjb25zdCBjaGFyICpkZXYsIGludCBwcm9nX2ZkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW47CiYjNDM7CWludCBpZmluZGV4LCBlcnI7CiYjNDM7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKG5zKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3Blbl9uZXRucyYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KGRldik7CiYjNDM7CWlmICghQVNTRVJUX0dUKGlmaW5kZXgsIDAsICYjMzQ7aWZfbmFtZXRvaW5kZXgmIzM0OykpIHsKJiM0MzsJCWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGJwZl94ZHBfYXR0YWNoKGlmaW5kZXgsIHByb2dfZmQsIDAsIE5VTEwpOwomIzQzOwljbG9zZV9uZXRucyhuc3Rva2VuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIEFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX3hkcF9hdHRhY2gmIzM0OykgPyAwIDogLTE7CiYjNDM7fQomIzQzOwomIzQzOy8qIEEgbGFyZ2UgcGluZyBidWlsZHMgYSBub25saW5lYXIgc2tiIHRoYXQgdmV0aCBjb3cmIzM5O3MgaW50byBpdHMgcGFnZV9wb29sLiAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfdmV0aChzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbCkKJiM0Mzt7CiYjNDM7CWNoYXIgbnMwW05TX05BTUVfTUFYX0xFTl0gPSAmIzM0O3hkcF9zaHJpbmtfbnMwLSYjMzQ7OwomIzQzOwljaGFyIG5zMVtOU19OQU1FX01BWF9MRU5dID0gJiMzNDt4ZHBfc2hyaW5rX25zMS0mIzM0OzsKJiM0MzsKJiM0MzsJaWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZldGhfc2V0dXAobnMwLCBuczEpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4gPSAwOwomIzQzOwomIzQzOwlpZiAodmV0aF9hdHRhY2gobnMwLCBWRVRIX0xPQ0FMLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3NocmluaykpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXMmIzM0OywKJiM0MzsJCSAgIG5zMSwgVkVUSF9MT0NBTF9JUCk7CiYjNDM7CiYjNDM7CXdhaXRfZm9yX3Byb2coc2tlbCk7CiYjNDM7CS8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzICYjMzQ7cGFnZV9wb29sIGxlYWsmIzM0OywgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovCiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4sIDAsICYjMzQ7eGRwX3Byb2dfcmFuJiMzNDspOwomIzQzO291dDoKJiM0MzsJdmV0aF9jbGVhbnVwKG5zMCwgbnMxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBMT0NBTCBjb3cmIzM5O3MgdGhlIGluY29taW5nIHNrYiBhbmQgcmV0dXJucyBYRFBfVFgsIHNvIHRoZSBidWZmIGlzIHR1cm5lZCBpbnRvCiYjNDM7ICogYW4geGRwX2ZyYW1lIGFuZCBib3VuY2VkIHRvIFBFRVIsIHdoaWNoIHNocmlua3MgYSBmcmFnLiBBIHBhZ2VfcG9vbCB0YWcKJiM0MzsgKiByZWNvcmRlZCBvbiB0aGUgYnVmZiBtdXN0IG5vdCBsZWFrIGludG8gdGhlIGZyYW1lLCBvciBQRUVSIGZyZWVzIGEgcGxhaW4KJiM0MzsgKiBwYWdlICh3aG9zZSBwcCB3YXMgYWxyZWFkeSBjbGVhcmVkIG9uIHRoZSBYRFBfVFggc2lkZSkgYXMgcGFnZV9wb29sIG1lbW9yeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3ZldGhfdHgoc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpCiYjNDM7ewomIzQzOwljaGFyIG5zMFtOU19OQU1FX01BWF9MRU5dID0gJiMzNDt4ZHBfc2hyaW5rX3R4MC0mIzM0OzsKJiM0MzsJY2hhciBuczFbTlNfTkFNRV9NQVhfTEVOXSA9ICYjMzQ7eGRwX3Nocmlua190eDEtJiMzNDs7CiYjNDM7CiYjNDM7CWlmIChnZXRwYWdlc2l6ZSgpICE9IFBBR0VfU0laRV80SykgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2ZXRoX3NldHVwKG5zMCwgbnMxKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTE9DQUwgYm91bmNlcyBldmVyeXRoaW5nIChpbmNsLiBBUlApIHdpdGggWERQX1RYLCBzbyBwaW4gYSBzdGF0aWMKJiM0MzsJICogbmVpZ2hib3VyIHRvIGxldCB0aGUgcGluZyYjMzk7cyBwYXlsb2FkIGFjdHVhbGx5IHJlYWNoIGl0LgomIzQzOwkgKi8KJiM0MzsJU1lTKG91dCwgJiMzNDtpcCAtbiAlcyBuZWlnaCBhZGQgJXMgbGxhZGRyICVzIGRldiAlcyBudWQgcGVybWFuZW50JiMzNDssCiYjNDM7CSAgICBuczEsIFZFVEhfTE9DQUxfSVAsIFZFVEhfTE9DQUxfTUFDLCBWRVRIX1BFRVIpOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4gPSAwOwomIzQzOwomIzQzOwlpZiAodmV0aF9hdHRhY2gobnMwLCBWRVRIX0xPQ0FMLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3R4KSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHZldGhfYXR0YWNoKG5zMSwgVkVUSF9QRUVSLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3NocmluaykpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXMmIzM0OywKJiM0MzsJCSAgIG5zMSwgVkVUSF9MT0NBTF9JUCk7CiYjNDM7CiYjNDM7CXdhaXRfZm9yX3Byb2coc2tlbCk7CiYjNDM7CS8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzICYjMzQ7cGFnZV9wb29sIGxlYWsmIzM0OywgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovCiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4sIDAsICYjMzQ7eGRwX3Byb2dfcmFuJiMzNDspOwomIzQzO291dDoKJiM0MzsJdmV0aF9jbGVhbnVwKG5zMCwgbnMxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3hkcF9zaHJpbmtfZnJhZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsOwomIzQzOwomIzQzOwlza2VsID0geGRwX3Nocmlua19mcmFnc19fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW5fbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0dW4mIzM0OykpCiYjNDM7CQl0ZXN0X3R1bihza2VsKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt2ZXRoJiMzNDspKQomIzQzOwkJdGVzdF92ZXRoKHNrZWwpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3ZldGhfdHgmIzM0OykpCiYjNDM7CQl0ZXN0X3ZldGhfdHgoc2tlbCk7CiYjNDM7CiYjNDM7CXhkcF9zaHJpbmtfZnJhZ3NfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zaHJpbmtfZnJhZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYWQ4OTVhYjY5OTMwMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmMKQEAgLTAsMCAmIzQzOzEsMzQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IHNocmlua19yYW47CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwLmZyYWdzJiMzNDspCiYjNDM7aW50IHhkcF9zaHJpbmsoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogUnVucyBvbiBib3RoIHNrYi1iYWNrZWQgWERQIHBhdGhzIChnZW5lcmljIFhEUCB2aWEgdHVuLCBhbmQgdmV0aCk6CiYjNDM7CSAqIHRoZSBub25saW5lYXIgc2tiIGlzIGNvdyYjMzk7ZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYmVmb3JlIHdlIHJ1biwgc28KJiM0MzsJICogc2hyaW5raW5nIHRoZSB0YWlsIHJlbGVhc2VzIGEgd2hvbGUgZnJhZyB0aGF0IGhhcyB0byBnbyBiYWNrIHRvIHRoYXQKJiM0MzsJICogcG9vbC4gVGhlIGNvdW50ZXIgb25seSB0ZWxscyB1cyB0aGUgcHJvZ3JhbSByYW4gYW5kIHRoZSBoZWxwZXIKJiM0MzsJICogc3VjY2VlZGVkIC0tIGEgbGluZWFyIGJ1ZmYgcmV0dXJucyAwIGFzIHdlbGwgLS0gaXQgZG9lcyBub3QgcHJvdmUgYQomIzQzOwkgKiBmcmFnIHdhcyByZWxlYXNlZC4KJiM0MzsJICovCiYjNDM7CWlmIChicGZfeGRwX2FkanVzdF90YWlsKGN0eCwgLTMwMDApID09IDApCiYjNDM7CQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3Nocmlua19yYW4sIDEpOwomIzQzOwlyZXR1cm4gWERQX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcC5mcmFncyYjMzQ7KQomIzQzO2ludCB4ZHBfdHgoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQm91bmNlIHRoZSBmcmFtZSBiYWNrLiBPbiB2ZXRoIHRoaXMgdHVybnMgdGhlIGJ1ZmYgaW50byBhbgomIzQzOwkgKiB4ZHBfZnJhbWUsIHdoaWNoIGlzIHdoZXJlIGEgYnVmZi1zY29wZWQgcGFnZV9wb29sIHRhZyBtdXN0IG5vdCBsZWFrCiYjNDM7CSAqIGludG8gdGhlIGZyYW1lIGhhbmRlZCB0byB0aGUgcGVlci4KJiM0MzsJICovCiYjNDM7CXJldHVybiBYRFBfVFg7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHdvcnRoaW5lc3MsIHBpbnBvaW50IGtleSBmb2N1cyBzeW1ib2xzLCBhbmQgaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgpGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHRvdWNoZWQgZmlsZXMuIEkgc2VlIGNoYW5nZXMgaW4gYGRyaXZlcnMvbmV0L3ZldGguY2AsIGBpbmNsdWRlL25ldC94ZHAuaGAsIGBuZXQvY29yZS9kZXYuY2AsIGBuZXQvY29yZS9maWx0ZXIuY2AsIGFuZCBzb21lIHNlbGZ0ZXN0cyB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuIFRoaXMgbG9va3MgcHJvbWlzaW5nOyBpdCB0b3VjaGVzIGNvcmUgbmV0d29ya2luZywgQlBGLCBhbmQgYSBzcGVjaWZpYyBkcml2ZXIgKGB2ZXRoYCkuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gb2JzZXJ2aW5nOgoKKiAgIFRoZSBgdmV0aGAgZHJpdmVyIGlzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiBgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZmAgdG8gc2V0IGB4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApYCB3aGVuIGZyYWdtZW50IGluZm9ybWF0aW9uIGlzIHByZXNlbnQuCiogICBUaGUgYHhkcC5oYCBoZWFkZXIgZ2V0cyBuZXcgZmxhZ3MsIGZ1bmN0aW9ucyBsaWtlIGB4ZHBfYnVmZl9zZXRfZnJhZ19wcCgpYCBhbmQgYHhkcF9idWZmX2lzX2ZyYWdfcHAoKWAsIGFuZCB1cGRhdGVzIHRvIGNvbnZlcnNpb24gZnVuY3Rpb25zIChgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgYW5kIGB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZmApIHdoaWNoIGFsc28gcmVsYXRlIHRvIGBQQUdFX1BPT0xgIG1lbW9yeS4KKiAgIGBuZXQvY29yZS9kZXYuY2AmIzM5O3MgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgpYCBpcyBub3cgYWxzbyBzZXR0aW5nIHRoZSBmcmFnbWVudCBmbGFnLgoqICAgYG5ldC9jb3JlL2ZpbHRlci5jYCBpcyB1c2luZyB0aGUgZnJhZ21lbnQgaW5mb3JtYXRpb24gd2l0aGluIGBicGZfeGRwX3Nocmlua19kYXRhYC4KClRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBnZW5lcmljIFhEUCBleGVjdXRpb24sIHRoZSBgdmV0aGAgZHJpdmVyLCBCUEYgZmlsdGVycywgYW5kIGNvcmUgWERQIGZyYW1lIGNvbnZlcnNpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGZyYWdtZW50IGhhbmRsaW5nIGludGVncmF0ZXMgd2l0aGluIHRoZSBCUEYgbGlmZWN5Y2xlLgoKTm93LCBhIGtleSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkgaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYW5rZnVsbHksIGl0IHNlZW1zIGxpa2UgYHZldGhgLCBgdHVuL3RhcGAsIGdlbmVyaWMgWERQLCBhbmQgQlBGIGFkanVzdCB0YWlsIGFyZSBhbGwgc3RhbmRhcmQgbmV0d29yay9CUEYgZmVhdHVyZXMgdGVzdGVkIGJ5IHN5emthbGxlci4gVGhhdCYjMzk7cyBhIGh1Z2Ugd2luIOKAkyBpdCB3aWxsIG1ha2UgdGVzdGluZyBtdWNoIGVhc2llci4KCk15IG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgc3ltYm9scyBhbmQgY29uZmlncyBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uLiBJJiMzOTtsbCB1c2UgZ3JlcHBlciAob3IgYHJlYWQtZmlsZWAgZGlyZWN0bHkgaWYgZ3JlcHBlciBmYWlscykgYW5kIHNlYXJjaCBmb3IgdGhvc2Uga2V5IGZ1bmN0aW9ucywgbGlrZSBgYnBmX3hkcF9zaHJpbmtfZGF0YWAsIGB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmYCwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAsIGFuZCBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAsIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGFuZCB3aGF0IHRoZSBjb2RlJiMzOTtzIGNhbGwgZ3JhcGhzIGxvb2sgbGlrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfeGRwX3Nocmlua19kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NDMyNz1zdGF0aWMgaW50IGJwZl94ZHBfZnJhZ3NfaW5jcmVhc2VfdGFpbChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgaW50IG9mZnNldClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00MzUxLVxubmV0L2NvcmUvZmlsdGVyLmM6NDM1MjpzdGF0aWMgc3RydWN0IHhkcF9idWZmICpicGZfeGRwX3Nocmlua19kYXRhX3pjKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBpbnQgc2hyaW5rLFxubmV0L2NvcmUvZmlsdGVyLmMtNDM1My1cdFx0XHRcdFx0ICAgICAgIGJvb2wgdGFpbCwgYm9vbCByZWxlYXNlKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQzNjktXG5uZXQvY29yZS9maWx0ZXIuYzo0MzcwOnN0YXRpYyBib29sIGJwZl94ZHBfc2hyaW5rX2RhdGEoc3RydWN0IHhkcF9idWZmICp4ZHAsIHNrYl9mcmFnX3QgKmZyYWcsXG5uZXQvY29yZS9maWx0ZXIuYy00MzcxLVx0XHRcdFx0aW50IHNocmluaywgYm9vbCB0YWlsKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQzNzktXHRcdG5ldG1lbSA9IDA7XG5uZXQvY29yZS9maWx0ZXIuYzo0MzgwOlx0XHR6Y19mcmFnID0gYnBmX3hkcF9zaHJpbmtfZGF0YV96Yyh4ZHAsIHNocmluaywgdGFpbCwgcmVsZWFzZSk7XG5uZXQvY29yZS9maWx0ZXIuYy00MzgxLVx0fSBlbHNlIGlmICh4ZHBfYnVmZl9pc19mcmFnX3BwKHhkcCkpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NDAxPXN0YXRpYyBpbnQgYnBmX3hkcF9mcmFnc19zaHJpbmtfdGFpbChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgaW50IG9mZnNldClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00NDE0LVx0XHRvZmZzZXQgLT0gc2hyaW5rO1xubmV0L2NvcmUvZmlsdGVyLmM6NDQxNTpcdFx0aWYgKGJwZl94ZHBfc2hyaW5rX2RhdGEoeGRwLCBmcmFnLCBzaHJpbmssIHRydWUpKVxubmV0L2NvcmUvZmlsdGVyLmMtNDQxNi1cdFx0XHRuX2ZyYWdzX2ZyZWUmIzQzOyYjNDM7O1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNjU5PV9fYnBmX2tmdW5jIGludCBicGZfeGRwX3B1bGxfZGF0YShzdHJ1Y3QgeGRwX21kICp4LCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzAwLVx0XHRkZWx0YSAtPSBzaHJpbms7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjcwMTpcdFx0aWYgKGJwZl94ZHBfc2hyaW5rX2RhdGEoeGRwLCBmcmFnLCBzaHJpbmssIGZhbHNlKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzAyLVx0XHRcdG5fZnJhZ3NfZnJlZSYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFhEUCBGcmFnIEhhbmRsaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZmlsdGVyLmNgIGJ1c2luZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFhEUCBmcmFnbWVudCBoYW5kbGluZyBpcyB3b3JraW5nIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBicGZfeGRwX2ZyYWdzX3Nocmlua190YWlsYCBmdW5jdGlvbiBjYWxsLCBzcGVjaWZpY2FsbHksIGhvdyBpdCByZWxhdGVzIHRvIGBicGZfeGRwX2FkanVzdF90YWlsYC4gU2luY2UgdGhlIGZvcm1lciBpcyBjYWxsZWQgYnkgdGhlIGxhdHRlciwgaXQgc2VlbXMgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBjb2RlIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIGdyYXNwIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljIGltbWVkaWF0ZWx5IGFyb3VuZCB0aGVzZSB0d28gZnVuY3Rpb24gY2FsbHMgaXMgY3JpdGljYWw7IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZW0sIHRoZSBkYXRhIHRoZXkgb3BlcmF0ZSBvbiwgYW5kIHRoZSBvdmVyYWxsIG9iamVjdGl2ZSBvZiB0aGUgY29kZSBzZWdtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0MDA6XHRcbjQ0MDE6XHRzdGF0aWMgaW50IGJwZl94ZHBfZnJhZ3Nfc2hyaW5rX3RhaWwoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBvZmZzZXQpXG40NDAyOlx0e1xuNDQwMzpcdFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm8gPSB4ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fYnVmZih4ZHApO1xuNDQwNDpcdFx0aW50IGksIG5fZnJhZ3NfZnJlZSA9IDAsIGxlbl9mcmVlID0gMDtcbjQ0MDU6XHRcbjQ0MDY6XHRcdGlmICh1bmxpa2VseShvZmZzZXQgXHUwMDNlIChpbnQpeGRwX2dldF9idWZmX2xlbih4ZHApIC0gRVRIX0hMRU4pKVxuNDQwNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ0MDg6XHRcbjQ0MDk6XHRcdGZvciAoaSA9IHNpbmZvLVx1MDAzZW5yX2ZyYWdzIC0gMTsgaSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9mZnNldCBcdTAwM2UgMDsgaS0tKSB7XG40NDEwOlx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1tpXTtcbjQ0MTE6XHRcdFx0aW50IHNocmluayA9IG1pbl90KGludCwgb2Zmc2V0LCBza2JfZnJhZ19zaXplKGZyYWcpKTtcbjQ0MTI6XHRcbjQ0MTM6XHRcdFx0bGVuX2ZyZWUgJiM0Mzs9IHNocmluaztcbjQ0MTQ6XHRcdFx0b2Zmc2V0IC09IHNocmluaztcbjQ0MTU6XHRcdFx0aWYgKGJwZl94ZHBfc2hyaW5rX2RhdGEoeGRwLCBmcmFnLCBzaHJpbmssIHRydWUpKVxuNDQxNjpcdFx0XHRcdG5fZnJhZ3NfZnJlZSYjNDM7JiM0Mzs7XG40NDE3Olx0XHR9XG40NDE4Olx0XHRzaW5mby1cdTAwM2Vucl9mcmFncyAtPSBuX2ZyYWdzX2ZyZWU7XG40NDE5Olx0XHRzaW5mby1cdTAwM2V4ZHBfZnJhZ3Nfc2l6ZSAtPSBsZW5fZnJlZTtcbjQ0MjA6XHRcbjQ0MjE6XHRcdGlmICh1bmxpa2VseSghc2luZm8tXHUwMDNlbnJfZnJhZ3MpKSB7XG40NDIyOlx0XHRcdHhkcF9idWZmX2NsZWFyX2ZyYWdzX2ZsYWcoeGRwKTtcbjQ0MjM6XHRcdFx0eGRwX2J1ZmZfY2xlYXJfZnJhZ19wZm1lbWFsbG9jKHhkcCk7XG40NDI0Olx0XHRcdHhkcC1cdTAwM2VkYXRhX2VuZCAtPSBvZmZzZXQ7XG40NDI1Olx0XHR9XG40NDI2Olx0XG40NDI3Olx0XHRyZXR1cm4gMDtcbjQ0Mjg6XHR9XG40NDI5Olx0XG40NDMwOlx0QlBGX0NBTExfMihicGZfeGRwX2FkanVzdF90YWlsLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgeGRwLCBpbnQsIG9mZnNldClcbjQ0MzE6XHR7XG40NDMyOlx0XHR2b2lkICpkYXRhX2hhcmRfZW5kID0geGRwX2RhdGFfaGFyZF9lbmQoeGRwKTsgLyogdXNlIHhkcC1cdTAwM2VmcmFtZV9zeiAqL1xuNDQzMzpcdFx0dm9pZCAqZGF0YV9lbmQgPSB4ZHAtXHUwMDNlZGF0YV9lbmQgJiM0Mzsgb2Zmc2V0O1xuNDQzNDpcdFxuNDQzNTpcdFx0aWYgKHVubGlrZWx5KHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSkgeyAvKiBub24tbGluZWFyIHhkcCBidWZmICovXG40NDM2Olx0XHRcdGlmIChvZmZzZXQgXHUwMDNjIDApXG40NDM3Olx0XHRcdFx0cmV0dXJuIGJwZl94ZHBfZnJhZ3Nfc2hyaW5rX3RhaWwoeGRwLCAtb2Zmc2V0KTtcbjQ0Mzg6XHRcbjQ0Mzk6XHRcdFx0cmV0dXJuIGJwZl94ZHBfZnJhZ3NfaW5jcmVhc2VfdGFpbCh4ZHAsIG9mZnNldCk7XG40NDQwOlx0XHR9XG40NDQxOlx0XG40NDQyOlx0XHQvKiBOb3RpY2UgdGhhdCB4ZHBfZGF0YV9oYXJkX2VuZCBoYXZlIHJlc2VydmVkIHNvbWUgdGFpbHJvb20gKi9cbjQ0NDM6XHRcdGlmICh1bmxpa2VseShkYXRhX2VuZCBcdTAwM2UgZGF0YV9oYXJkX2VuZCkpXG40NDQ0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDQ0NTpcdFxuNDQ0NjpcdFx0aWYgKHVubGlrZWx5KGRhdGFfZW5kIFx1MDAzYyB4ZHAtXHUwMDNlZGF0YSAmIzQzOyBFVEhfSExFTikpXG40NDQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDQ0ODpcdFxuNDQ0OTpcdFx0LyogQ2xlYXIgbWVtb3J5IGFyZWEgb24gZ3JvdywgY2FuIGNvbnRhaW4gdW5pbml0IGtlcm5lbCBtZW1vcnkgKi9cbjQ0NTA6XHRcdGlmIChvZmZzZXQgXHUwMDNlIDApXG40NDUxOlx0XHRcdG1lbXNldCh4ZHAtXHUwMDNlZGF0YV9lbmQsIDAsIG9mZnNldCk7XG40NDUyOlx0XG40NDUzOlx0XHR4ZHAtXHUwMDNlZGF0YV9lbmQgPSBkYXRhX2VuZDtcbjQ0NTQ6XHRcbjQ0NTU6XHRcdHJldHVybiAwO1xuNDQ1NjpcdH1cbjQ0NTc6XHRcbjQ0NTg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfYWRqdXN0X3RhaWxfcHJvdG8gPSB7XG40NDU5Olx0XHQuZnVuY1x0XHQ9IGJwZl94ZHBfYWRqdXN0X3RhaWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4OTIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHZldGguYyBhbmQgWERQIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBuZXR3b3JrIHBlcmZvcm1hbmNlLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgdmV0aCBwYWlyLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHRoaW5nIGlzIGhhbmRsaW5nIHBhY2tldCBjb252ZXJzaW9ucyB0byBYRFAgYnVmZmVycy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBgZHJpdmVycy9uZXQvdmV0aC5jYCwgYW5kIHNwZWNpZmljYWxseSwgdGhhdCBgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZmAgZnVuY3Rpb24uIEkgaGF2ZSBhIGh1bmNoIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBvcHRpbWl6YXRpb25zIG9yIGJvdHRsZW5lY2tzIGluIGhvdyBTS0JzIGFyZSBiZWluZyB0cmFuc2xhdGVkIHRvIHRoZSBYRFAgZm9ybWF0IGhlcmUuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCB0aGUgbWVtb3J5IGNvcHlpbmcgKG9yIGxhY2sgdGhlcmVvZiksIGFuZCBob3cgZWZmaWNpZW50bHkgdGhpcyBpcyBhbGwgYmVpbmcgbWFuYWdlZCwgZXNwZWNpYWxseSB1bmRlciBsb2FkLiBUaGlzIGZ1bmN0aW9uIGlzIGEga2V5IGFyZWEgZm9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBnYWlucywgc28gbGV0JiMzOTtzIHN0YXJ0IGRpc3NlY3RpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmM9NzM5PXN0YXRpYyB2b2lkIHZldGhfeGRwX2dldChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNzUxLVxuZHJpdmVycy9uZXQvdmV0aC5jOjc1MjpzdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxuZHJpdmVycy9uZXQvdmV0aC5jLTc1My1cdFx0XHRcdFx0c3RydWN0IHhkcF9idWZmICp4ZHAsXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTc5Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy04MTgtXHRfX3NrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpKTtcbmRyaXZlcnMvbmV0L3ZldGguYzo4MTk6XHRpZiAodmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZihycSwgeGRwLCBcdTAwMjZza2IpKVxuZHJpdmVycy9uZXQvdmV0aC5jLTgyMC1cdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDE1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBuZXQvY29yZS9kZXYuY2AgZm9yIFhEUCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBYRFAgYW5kIHNwZWNpZmljYWxseSB0aGUgZ2VuZXJpYyBwYXRoLCBtZWFuaW5nIHdlJiMzOTtyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgYSBoYXJkd2FyZSBvZmZsb2FkIGlzbiYjMzk7dCBoYXBwZW5pbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBCUEYgcHJvZ3JhbSBleGVjdXRpb24uIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBuZXQvY29yZS9kZXYuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSByZWdpb24gYXJvdW5kIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBtb3JlIGFjY3VyYXRlbHksIHdoZXJlIHRoZSBmYWxsYmFjayBoYXBwZW5zLCBpZiBpdCYjMzk7cyBub3QgYSBkaXJlY3QgaGFyZHdhcmUgYWNjZWxlcmF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgWERQIHByb2dyYW0gaXMgaW52b2tlZCBpbiB0aGlzIGdlbmVyYWxpemVkIHNjZW5hcmlvLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgaW4/IEhvdyBpcyB0aGUgcGFja2V0IGJ1ZmZlciBoYW5kbGVkPyBBcmUgd2UgZG9pbmcgYW55IGNvcHkgb3BlcmF0aW9ucyBvciBhcmUgd2UgZGVhbGluZyB3aXRoIHBvaW50ZXJzPyBXaGF0IGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGlzIHBhdGg/IFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgZ2VuZXJpYyBYRFAuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz01NDgzPXN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpuZXRpZl9nZXRfcnhxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTU1MDUtXG5uZXQvY29yZS9kZXYuYzo1NTA2OnUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG5uZXQvY29yZS9kZXYuYy01NTA3LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcbi0tXG5uZXQvY29yZS9kZXYuYz01NjQ0PXN0YXRpYyB1MzIgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXG4tLVxubmV0L2NvcmUvZGV2LmMtNTY3MS1cbm5ldC9jb3JlL2Rldi5jOjU2NzI6XHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoKnBza2IsIHhkcCwgeGRwX3Byb2cpO1xubmV0L2NvcmUvZGV2LmMtNTY3My1cdHN3aXRjaCAoYWN0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTcwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqWERQIEZyYW1lIENvbnZlcnNpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFhEUCBmcmFtZSBjb252ZXJzaW9uIHByb2Nlc3MgYmV0dGVyLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdG8gemVybyBpbiBvbiBgbmV0L2NvcmUveGRwLmNgLCBvciBwb3RlbnRpYWxseSBhbnl3aGVyZSBlbHNlIHRoYXQgaG91c2VzIHRoZSBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgZnVuY3Rpb24sIG9yIGV2ZW4gYW55d2hlcmUgdGhhdCBjYWxscyBpdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb252ZXJzaW9uIHdvcmtzIGF0IGEgZGVlcGVyIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZHBfY29udmVydF9mcmFtZV90b19idWZmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTY0ND1zdGF0aWMgaW50IGJvbmRfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTY1Ni1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTY1NzpcdFx0eGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihmcmFtZSwgXHUwMDI2eGRwKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTY1OC1cbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9NjM5PXN0YXRpYyBzdHJ1Y3QgeGRwX2ZyYW1lICp2ZXRoX3hkcF9yY3Zfb25lKHN0cnVjdCB2ZXRoX3JxICpycSxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNjUzLVxuZHJpdmVycy9uZXQvdmV0aC5jOjY1NDpcdFx0eGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihmcmFtZSwgeGRwKTtcbmRyaXZlcnMvbmV0L3ZldGguYy02NTUtXHRcdHhkcC1cdTAwM2VyeHEgPSBcdTAwMjZycS1cdTAwM2V4ZHBfcnhxO1xuLS1cbmluY2x1ZGUvbmV0L3hkcC5oPTc0PWVudW0geGRwX2J1ZmZfZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbmV0L3hkcC5oLTg4LVx0ICogdGhpcyBpcyBzdHJpcHBlZCBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpIGFuZCByZS1kZXJpdmVkIGZyb21cbmluY2x1ZGUvbmV0L3hkcC5oOjg5Olx0ICogOjptZW1fdHlwZSBpbiB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKCkuXG5pbmNsdWRlL25ldC94ZHAuaC05MC1cdCAqL1xuLS1cbmluY2x1ZGUvbmV0L3hkcC5oPTQwNT1zdGF0aWMgaW5saW5lXG5pbmNsdWRlL25ldC94ZHAuaDo0MDY6dm9pZCB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKGNvbnN0IHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lLFxuaW5jbHVkZS9uZXQveGRwLmgtNDA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5rZXJuZWwvYnBmL2NwdW1hcC5jPTE4Mz1zdGF0aWMgaW50IGNwdV9tYXBfYnBmX3Byb2dfcnVuX3hkcChzdHJ1Y3QgYnBmX2NwdV9tYXBfZW50cnkgKnJjcHUsXG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy0yMDEtXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjIwMjpcdFx0eGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZih4ZHBmLCBcdTAwMjZ4ZHApO1xua2VybmVsL2JwZi9jcHVtYXAuYy0yMDMtXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYz0zMzY9c3RhdGljIGludCBkZXZfbWFwX2JwZl9wcm9nX3J1bihzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nLFxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmMtMzUwLVxua2VybmVsL2JwZi9kZXZtYXAuYzozNTE6XHRcdHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoeGRwZiwgXHUwMDI2eGRwKTtcbmtlcm5lbC9icGYvZGV2bWFwLmMtMzUyLVx0XHR4ZHAudHhxID0gXHUwMDI2dHhxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgxMgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlhEUCBGcmFtZSBVcGRhdGUgQ2FsbGVycyAtIEEgUXVpY2sgTG9vayoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gYHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmYC4gQmVmb3JlIHdlIGdvIGFueSBmdXJ0aGVyLCBJIHdhbnQgdG8gdGFrZSBhIHF1aWNrIGF1ZGl0IG9mIGl0cyBjYWxsZXJzLiBVbmRlcnN0YW5kaW5nICp3aG8qIGlzIHVwZGF0aW5nIHRoZSBmcmFtZXMgaXMgY3J1Y2lhbCBiZWZvcmUgd2UgbG9vayBhdCAqaG93KiB0aGV5JiMzOTtyZSBiZWluZyB1cGRhdGVkLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBwb3NzaWJsZSBpc3N1ZXMsIGFuZCBoZWxwcyBpbW1lbnNlbHkgd2l0aCBkZWJ1Z2dpbmcuIEl04oCZcyBhbHNvIGltcG9ydGFudCBmb3IgYW55IHJlZmFjdG9yaW5nIHdvcmssIHNpbmNlIHVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgdGVsbHMgdXMgd2hhdCB0byBiZSBjYXJlZnVsIG9mLCB3aGF0IGRlcGVuZGVuY2llcyB3ZSBoYXZlLCBldGMuIExldCYjMzk7cyB0cmFjZSBpdCBhbmQgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jPTYzOT1zdGF0aWMgc3RydWN0IHhkcF9mcmFtZSAqdmV0aF94ZHBfcmN2X29uZShzdHJ1Y3QgdmV0aF9ycSAqcnEsXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTY2MS1cdFx0Y2FzZSBYRFBfUEFTUzpcbmRyaXZlcnMvbmV0L3ZldGguYzo2NjI6XHRcdFx0aWYgKHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKHhkcCwgZnJhbWUpKVxuZHJpdmVycy9uZXQvdmV0aC5jLTY2My1cdFx0XHRcdGdvdG8gZXJyX3hkcDtcbi0tXG5pbmNsdWRlL25ldC94ZHAuaD03ND1lbnVtIHhkcF9idWZmX2ZsYWdzIHtcbi0tXG5pbmNsdWRlL25ldC94ZHAuaC04Ny1cdCAqIHhkcF9idWZmIG9ubHk6IGFuIHhkcF9mcmFtZSBkZXNjcmliZXMgaXRzIG1lbW9yeSB3aXRoIDo6bWVtX3R5cGUsIHNvXG5pbmNsdWRlL25ldC94ZHAuaDo4ODpcdCAqIHRoaXMgaXMgc3RyaXBwZWQgaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSBhbmQgcmUtZGVyaXZlZCBmcm9tXG5pbmNsdWRlL25ldC94ZHAuaC04OS1cdCAqIDo6bWVtX3R5cGUgaW4geGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZigpLlxuLS1cbmluY2x1ZGUvbmV0L3hkcC5oPTQwNj12b2lkIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUsXG4tLVxuaW5jbHVkZS9uZXQveGRwLmgtNDE2LVx0ICogZnJhbWUtXHUwMDNlZmxhZ3MgbmV2ZXIgY2FycmllcyBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MIChpdCBpcyBzdHJpcHBlZFxuaW5jbHVkZS9uZXQveGRwLmg6NDE3Olx0ICogaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSk7IHJlLWRlcml2ZSBpdCBmcm9tIHRoZSBmcmFtZSYjMzk7cyBvd25cbmluY2x1ZGUvbmV0L3hkcC5oLTQxOC1cdCAqIG1lbW9yeSB0eXBlLiB2ZXRoIGFuZCBkZXZtYXAgcmVidWlsZCBhIGJ1ZmYgaGVyZSBhbmQgcnVuIGEgcHJvZ3JhbVxuLS1cbmluY2x1ZGUvbmV0L3hkcC5oPTQyNj1zdGF0aWMgaW5saW5lXG5pbmNsdWRlL25ldC94ZHAuaDo0Mjc6aW50IHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKGNvbnN0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuaW5jbHVkZS9uZXQveGRwLmgtNDI4LVx0XHRcdCAgICAgICBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfZnJhbWUpXG4tLVxuaW5jbHVkZS9uZXQveGRwLmg9NDU4PXN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxuaW5jbHVkZS9uZXQveGRwLmgtNDY2LVx0eGRwX2ZyYW1lID0geGRwLVx1MDAzZWRhdGFfaGFyZF9zdGFydDtcbmluY2x1ZGUvbmV0L3hkcC5oOjQ2NzpcdGlmICh1bmxpa2VseSh4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZih4ZHAsIHhkcF9mcmFtZSkgXHUwMDNjIDApKVxuaW5jbHVkZS9uZXQveGRwLmgtNDY4LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5rZXJuZWwvYnBmL2NwdW1hcC5jPTE4Mz1zdGF0aWMgaW50IGNwdV9tYXBfYnBmX3Byb2dfcnVuX3hkcChzdHJ1Y3QgYnBmX2NwdV9tYXBfZW50cnkgKnJjcHUsXG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy0yMDYtXHRcdGNhc2UgWERQX1BBU1M6XG5rZXJuZWwvYnBmL2NwdW1hcC5jOjIwNzpcdFx0XHRlcnIgPSB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihcdTAwMjZ4ZHAsIHhkcGYpO1xua2VybmVsL2JwZi9jcHVtYXAuYy0yMDgtXHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9MzM2PXN0YXRpYyBpbnQgZGV2X21hcF9icGZfcHJvZ19ydW4oc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTM1Ny1cdFx0Y2FzZSBYRFBfUEFTUzpcbmtlcm5lbC9icGYvZGV2bWFwLmM6MzU4Olx0XHRcdGVyciA9IHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKFx1MDAyNnhkcCwgeGRwZik7XG5rZXJuZWwvYnBmL2Rldm1hcC5jLTM1OS1cdFx0XHRpZiAodW5saWtlbHkoZXJyIFx1MDAzYyAwKSlcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTE5PXN0YXRpYyB2b2lkIHhkcF90ZXN0X3J1bl9pbml0X3BhZ2UobmV0bWVtX3JlZiBuZXRtZW0sIHZvaWQgKmFyZylcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTQzLVxubmV0L2JwZi90ZXN0X3J1bi5jOjE0NDpcdHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKG5ld19jdHgsIGZybSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTQ1LVx0ZnJtLVx1MDAzZW1lbV90eXBlID0gbmV3X2N0eC1cdTAwM2VyeHEtXHUwMDNlbWVtLnR5cGU7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTIyOT1zdGF0aWMgdm9pZCByZXNldF9jdHgoc3RydWN0IHhkcF9wYWdlX2hlYWQgKmhlYWQpXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTIzNi1cdGhlYWQtXHUwMDNlY3R4LmRhdGFfZW5kID0gaGVhZC1cdTAwM2VvcmlnX2N0eC5kYXRhX2VuZDtcbm5ldC9icGYvdGVzdF9ydW4uYzoyMzc6XHR4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihcdTAwMjZoZWFkLVx1MDAzZWN0eCwgaGVhZC1cdTAwM2VmcmFtZSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjM4LVx0aGVhZC1cdTAwM2VmcmFtZS1cdTAwM2VtZW1fdHlwZSA9IGhlYWQtXHUwMDNlb3JpZ19jdHgucnhxLVx1MDAzZW1lbS50eXBlO1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0yNzM9c3RhdGljIGludCB4ZHBfdGVzdF9ydW5fYmF0Y2goc3RydWN0IHhkcF90ZXN0X2RhdGEgKnhkcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0zMDktXHRcdGlmICh1bmxpa2VseShjdHhfd2FzX2NoYW5nZWQoaGVhZCkpKSB7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MzEwOlx0XHRcdHJldCA9IHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKGN0eCwgZnJtKTtcbm5ldC9icGYvdGVzdF9ydW4uYy0zMTEtXHRcdFx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI4MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktjb25maWcgRGVwZW5kZW5jaWVzIC0gQSBRdWljayBDaGVjayoqCgpPa2F5LCB0aW1lIHRvIG1ha2Ugc3VyZSB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgbGluaW5nIHVwIGFzIEkgZXhwZWN0LiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBhIGNvdXBsZSBvZiBrZXkgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgbG9vayBhdCBgZHJpdmVycy9uZXQvdmV0aC5jYC4gVGhlIGNvZGUgc2hvdWxkIGJlIGd1YXJkZWQgYnkgYENPTkZJR19WRVRIYCwgYXMgaXQgYWx3YXlzIGlzLiBNYWtlcyBzZW5zZS4gVGhlbiB0aGVyZSYjMzk7cyBCUEYgYW5kIFhEUC4gVGhvc2UgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19ORVRgLiBZZXAsIHRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEp1c3QgZG91YmxlLWNoZWNraW5nIGV2ZXJ5dGhpbmcuIE5vdywgZm9yIFZFVEggc3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHZlcmlmeSB0aGUgS2NvbmZpZyBzZXR1cCBpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBKdXN0IGdvb2QgcHJhY3RpY2UsIHlvdSBrbm93PyBLZWVwaW5nIHRoaW5ncyB0aWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkVUSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQyMT1jb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDM1OmNvbmZpZyBWRVRIXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIGFuZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBzZWVtIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdmFyaW91cyBuZXR3b3JrIGRyaXZlcnMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIE15IG1lbnRhbCBjaGVja2xpc3Qgc2F5cywgJiMzNDtLY29uZmlnIGZpbGVzIGFyZSBvZnRlbiB0aGUga2V5IHRvIHRoaXMgc29ydCBvZiB0aGluZy4mIzM0OyBHaXZlbiB0aGF0IGdlbmVyYWwga25vd2xlZGdlLCBJIGltbWVkaWF0ZWx5IHplcm9lZCBpbiBvbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIFRoYXQgZGlyZWN0b3J5IGlzIGFsbW9zdCBhbHdheXMgdGhlIG5lcnZlIGNlbnRlciBmb3IgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbiBpbiB0aGUga2VybmVsLgoKSSBuZWVkIHRvIGZvY3VzIG15IHNlYXJjaCBvbiBhIHNwZWNpZmljIGxpbmUgdG8gY3V0IHRoZSBub2lzZS4gQ29uc2lkZXJpbmcgSSBrbm93IHRoZSBnZW5lcmFsIHNoYXBlIG9mIEtjb25maWcgZmlsZXMsIEkgZmlndXJlIGxpbmVzIGFyb3VuZCA0MzUgaW4gdGhlIEtjb25maWcgZmlsZSBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgdGFyZ2V0ZWQgc2VhcmNoLiBJJiMzOTttIG5vdCBlbnRpcmVseSBzdXJlICp3aGF0KiBJJiMzOTtsbCBmaW5kIHRoZXJlIHlldCwgYnV0IGl0JiMzOTtzIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uIHRoYXQgaW1wb3J0YW50IG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3b3VsZCBiZSBkZWZpbmVkIHdpdGhpbiB0aGF0IGFyZWEgb2YgdGhlIGZpbGUuIFRpbWUgdG8gaW52ZXN0aWdhdGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDMwOlx0XHQgIGFuZCBUVU5HRVRWTkVUQkUgaW9jdGxzLlxuIDQzMTpcdFxuIDQzMjpcdFx0ICBVbmxlc3MgeW91IGhhdmUgYSBsaXR0bGUtZW5kaWFuIHN5c3RlbSBob3N0aW5nIGEgYmlnLWVuZGlhbiB2aXJ0dWFsXG4gNDMzOlx0XHQgIG1hY2hpbmUgd2l0aCBhIGxlZ2FjeSB2aXJ0aW8gTklDLCB5b3Ugc2hvdWxkIHNheSBOLlxuIDQzNDpcdFxuIDQzNTpcdGNvbmZpZyBWRVRIXG4gNDM2Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGV0aGVybmV0IHBhaXIgZGV2aWNlXCYjMzQ7XG4gNDM3Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNDM4Olx0XHRoZWxwXG4gNDM5Olx0XHQgIFRoaXMgZGV2aWNlIGlzIGEgbG9jYWwgZXRoZXJuZXQgdHVubmVsLiBEZXZpY2VzIGFyZSBjcmVhdGVkIGluIHBhaXJzLlxuIDQ0MDpcdFx0ICBXaGVuIG9uZSBlbmQgcmVjZWl2ZXMgdGhlIHBhY2tldCBpdCBhcHBlYXJzIG9uIGl0cyBwYWlyIGFuZCB2aWNlXG4gNDQxOlx0XHQgIHZlcnNhLlxuIDQ0MjpcdFxuIDQ0MzpcdGNvbmZpZyBWSVJUSU9fTkVUXG4gNDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0aW8gbmV0d29yayBkcml2ZXJcJiMzNDtcbiA0NDU6XHRcdGRlcGVuZHMgb24gVklSVElPXG4gNDQ2Olx0XHRzZWxlY3QgTkVUX0ZBSUxPVkVSXG4gNDQ3Olx0XHRzZWxlY3QgRElNTElCXG4gNDQ4Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNDQ5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTYxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFhEUC9CUEYgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIHJlZ2FyZGluZyBYRFAgYW5kIEJQRiBjb25maWd1cmF0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3MuIEkmIzM5O2xsIGZvY3VzIG9uIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRgIOKAkyB0aG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aG9zZS4KCkJleW9uZCB0aG9zZSBiYXNpY3MsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBzcGVjaWZpY2FsbHkgYXQgaG93IGBicGZfeGRwX2FkanVzdF90YWlsYCBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciBpdCYjMzk7cyBlbmFibGVkIHVuZGVyIGVpdGhlciBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciBgQ09ORklHX05FVGAsIG9yIHBlcmhhcHMgYm90aC4gVGhhdCB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmN5IHNldHVwLiBJJiMzOTttIGhlYWRpbmcgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl94ZHBfYWRqdXN0X3RhaWxfcHJvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz00NDMwPUJQRl9DQUxMXzIoYnBmX3hkcF9hZGp1c3RfdGFpbCwgc3RydWN0IHhkcF9idWZmICosIHhkcCwgaW50LCBvZmZzZXQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDQ1Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ0NTg6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2FkanVzdF90YWlsX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtNDQ1OS1cdC5mdW5jXHRcdD0gYnBmX3hkcF9hZGp1c3RfdGFpbCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NzY2PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODMtXHRjYXNlIEJQRl9GVU5DX3hkcF9hZGp1c3RfdGFpbDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODQ6XHRcdHJldHVybiBcdTAwMjZicGZfeGRwX2FkanVzdF90YWlsX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODc4NS1cdGNhc2UgQlBGX0ZVTkNfeGRwX2dldF9idWZmX2xlbjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaWdnaW5nIGludG8gdGhlIE5ldGxpbmsgQnVpbGQgUHJvY2VzcyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbmV0bGluayBtb2R1bGVzIGFyZSBhc3NlbWJsZWQsIHNwZWNpZmljYWxseSBgZGV2LmNgIGFuZCBgZmlsdGVyLmNgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJdCYjMzk7bGwgc2hvdyBtZSBob3cgdGhlc2Ugc3BlY2lmaWMgQyBmaWxlcyBhcmUgY29tcGlsZWQsIGxpbmtlZCwgYW5kIGluY29ycG9yYXRlZCBpbnRvIHRoZSBvdmVyYWxsIGtlcm5lbCBtb2R1bGUgb3IgZXhlY3V0YWJsZS4gVGhpcyBgTWFrZWZpbGVgIGlzIHRoZSBSb3NldHRhIFN0b25lIGZvciB1bmRlcnN0YW5kaW5nIHRoaXMgYnVpbGQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWx0ZXJcXC5vfGRldlxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9jb3JlLm9cbm5ldC9jb3JlL01ha2VmaWxlLTExLVxubmV0L2NvcmUvTWFrZWZpbGU6MTI6b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxMTkKCQkJCQkJCW91dHB1dDogMjAzCgkJCQkJCQl0aG91Z2h0czogMTA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXR3b3JrL0JQRiBDb2RlIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGF0IGBkZXYub2AgYW5kIGBmaWx0ZXIub2AgYXJlIGJ1aWx0IHdpdGggYENPTkZJR19ORVQ9eWAsIHdoaWNoIGlzIGV4cGVjdGVkLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCBmb3IgQlBGIHByb2dyYW1zIGFuZCBYRFAsIGFuZCBgQ09ORklHX1ZFVEhgIGlzIGVuYWJsZWQgZm9yIHZldGggc3VwcG9ydC4gR29vZC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgcGlucG9pbnRlZCBzZXZlcmFsOiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpbiBgbmV0L2NvcmUvZGV2LmNgLCB3aGljaCBpcyBkaXJlY3RseSBtb2RpZmllZCB0byBzZXQgYHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcClgIG9uIG5vbmxpbmVhciBza2JzLiBgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZmAgaW4gYGRyaXZlcnMvbmV0L3ZldGguY2AsIHdoaWNoIGFsc28gbWFuaXB1bGF0ZXMgZnJhZ21lbnRzIGJ5IHNldHRpbmcgYHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcClgLiAgYGJwZl94ZHBfc2hyaW5rX2RhdGFgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgaW1wb3J0YW50OyBpdCBjaGVja3MgYHhkcF9idWZmX2lzX2ZyYWdfcHAoeGRwKWAgYW5kIHNldHMgYG1lbV90eXBlYC4gQW5kIGZpbmFsbHksIHRoZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgYW5kIGB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZmAgaW4gYGluY2x1ZGUvbmV0L3hkcC5oYC4gVGhlc2UgYXJlIGltcG9ydGFudCBiZWNhdXNlIHdlIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgdGhlaXIgbm9uLXN0YXRpYyBjYWxsZXJzIHJlc2lkZS4KCk5vdywgbGV0JiMzOTtzIGFjY291bnQgZm9yIHRoZSBub24tc3RhdGljIGNhbGxlcnMgb2YgdGhvc2Ugc3RhdGljIGlubGluZXMgb3IgZGlyZWN0IGVudHJ5cG9pbnRzLCBzaW5jZSB0aGVzZSB3aWxsIGJlIGltcG9ydGFudCBmb3IgY292ZXJhZ2U6IGBicGZfeGRwX2ZyYWdzX3Nocmlua190YWlsYCBvciBgYnBmX3hkcF9hZGp1c3RfdGFpbGAsIGBicGZfeGRwX3B1bGxfZGF0YWAsIGB2ZXRoX3hkcF9yY3Zfb25lYCwgYHZldGhfeGRwX3Jjdl9za2JgLCBhbmQgYG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHBgLgoKU2luY2UgYGJwZl94ZHBfc2hyaW5rX2RhdGFgIGlzIHN0YXRpYywgSSYjMzk7bSBpbmNsdWRpbmcgYGJwZl94ZHBfYWRqdXN0X3RhaWxgLCBgYnBmX3hkcF9wdWxsX2RhdGFgLCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgYHZldGhfeGRwX3Jjdl9za2JgLCBhbmQgYHZldGhfeGRwX3Jjdl9vbmVgLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIHN5bWJvbCBuYW1lcyBmb3IgYGJwZl94ZHBfYWRqdXN0X3RhaWxgLiBCYXNlZCBvbiB0aGUga2VybmVsIHZtbGludXgsIEkmIzM5O20gY29uZmlybWluZyB0aGF0IGBCUEZfQ0FMTF8yKGJwZl94ZHBfYWRqdXN0X3RhaWwsIC4uLilgIHJlc29sdmVzIHRvIGBfX19icGZfeGRwX2FkanVzdF90YWlsYCBvciBgYnBmX3hkcF9hZGp1c3RfdGFpbGAuIGBicGZfeGRwX3B1bGxfZGF0YWAgdXNlcyBgX19icGZfa2Z1bmNgLiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBnbG9iYWwsIGFuZCBgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcGAgaXMgc3RhdGljLgoKVGhlIGZ1enppbmcgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYWJzb2x1dGVseSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGJlY2F1c2UgaXQgdG91Y2hlcyBuZXR3b3JrIGFuZCBCUEYgY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQsIGltcG9ydGFudGx5LCBmaXhlcyBhIG1lbW9yeSBsZWFrIG9yIGJhZCBwYWdlIHN0YXRlIHdoZW4gc2hyaW5raW5nIGZyYWdtZW50cyBvbiBnZW5lcmljIFhEUCBhbmQgdmV0aC4KClRoZSBmaW5hbCAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGxpc3QgaXM6CiogICBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYAoqICAgYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgCiogICBgYnBmX3hkcF9zaHJpbmtfZGF0YWAKKiAgIGBicGZfeGRwX2FkanVzdF90YWlsYAoqICAgYGJwZl94ZHBfcHVsbF9kYXRhYAoqICAgYHZldGhfeGRwX3Jjdl9za2JgCiogICBgdmV0aF94ZHBfcmN2X29uZWAKCkFuZCB0aGUgcmVxdWlyZWQgJiMzNDtFbmFibGVDb25maWdzJiMzNDsgYXJlOgoqICAgYE5FVGAKKiAgIGBCUEZfU1lTQ0FMTGAKKiAgIGBWRVRIYAoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gRXZlcnl0aGluZyBoYXMgYmVlbiBjb25zaWRlcmVkIGFuZCBkb3VibGUtY2hlY2tlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtWRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfYWRqdXN0X3RhaWwmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9wdWxsX2RhdGEmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9zaHJpbmtfZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmJiMzNDssCiAgICAmIzM0O3ZldGhfeGRwX3Jjdl9za2ImIzM0OywKICAgICYjMzQ7dmV0aF94ZHBfcmN2X29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBYRFAgZnJhZ21lbnQgaGFuZGxpbmcgbG9naWMgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgZ2VuZXJpYyBYRFAsIGFuZCB0aGUgdmV0aCBkcml2ZXIgdG8gcHJvcGVybHkgdHJhY2sgcGFnZV9wb29sIGJhY2tlZCBmcmFnbWVudHMgd2hlbiBzaHJpbmtpbmcgWERQIGJ1ZmZlcnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyAodmV0aCwgdHVuL3RhcCkgYW5kIEJQRi9YRFAgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtWRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfYWRqdXN0X3RhaWwmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9wdWxsX2RhdGEmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9zaHJpbmtfZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmJiMzNDssCiAgICAmIzM0O3ZldGhfeGRwX3Jjdl9za2ImIzM0OywKICAgICYjMzQ7dmV0aF94ZHBfcmN2X29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBYRFAgZnJhZ21lbnQgaGFuZGxpbmcgbG9naWMgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgZ2VuZXJpYyBYRFAsIGFuZCB0aGUgdmV0aCBkcml2ZXIgdG8gcHJvcGVybHkgdHJhY2sgcGFnZV9wb29sIGJhY2tlZCBmcmFnbWVudHMgd2hlbiBzaHJpbmtpbmcgWERQIGJ1ZmZlcnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyAodmV0aCwgdHVuL3RhcCkgYW5kIEJQRi9YRFAgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHRoZSBpbnRlcm5hbCBmbGFnIGBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MYCB0byBgeGRwX2J1ZmZgIHRvIHRyYWNrIHdoZXRoZXIgbm9ubGluZWFyIHNrYiBmcmFnbWVudHMgd2VyZSBDT1cmIzM5O2QgaW50byBhIGBwYWdlX3Bvb2xgLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGFuIFhEUCBwcm9ncmFtIHNocmlua3MgdGhlIGJ1ZmZlciBhbmQgcmVsZWFzZXMgZnJhZ21lbnRzLCB0aGV5IGFyZSBwcm9wZXJseSBmcmVlZCBiYWNrIHRvIHRoZSBwYWdlIHBvb2wgcmF0aGVyIHRoYW4gdGhyb3VnaCBgcGFnZV9mcmFnX2ZyZWUoKWAuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBhZ2UgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBhbGxvY2F0b3IgdHlwZSBtaXNtYXRjaCBidWcgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIHBhZ2UgcG9vbCBsZWFrcywgYmFkIHBhZ2Ugc3RhdGUsIG9yIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVzZXItc3BhY2UgY29weSBwYXRocy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgaW52YWxpZCBtZW1vcnkgZnJlZSkgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBwYWdlL3JlZmNvdW50IGRlYnVnZ2Vycywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNDY0MmYyMWYxODAxNjBlNTM0NjM5NmFlNjhkNjBjMzI5M2U4MzAxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTQ6NDU6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggNmVkM2VlODExNTNmYi4uYTNmZGYxOTU5Yjc2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtNzc1LDYgJiM0Mzs3NzUsMTIgQEAgc3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSwKIAlpZiAoc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFncykgewogCQlza2Jfc2hpbmZvKHNrYiktJmd0O3hkcF9mcmFnc19zaXplID0gc2tiLSZndDtkYXRhX2xlbjsKIAkJeGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIG5vbmxpbmVhciBza2Igd2FzIGNvdyYjMzk7ZCBpbnRvIHJxLSZndDtwYWdlX3Bvb2wgYWJvdmUsIHNvIHRoZQomIzQzOwkJICogZnJhZ3MgbXVzdCBiZSBmcmVlZCB0byB0aGF0IHBvb2wsIG5vdCB2aWEgdGhlIHJ4cSYjMzk7cwomIzQzOwkJICogTUVNX1RZUEVfUEFHRV9TSEFSRUQuCiYjNDM7CQkgKi8KJiM0MzsJCXhkcF9idWZmX3NldF9mcmFnX3BwKHhkcCk7CiAJfSBlbHNlIHsKIAkJeGRwX2J1ZmZfY2xlYXJfZnJhZ3NfZmxhZyh4ZHApOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcC5oIGIvaW5jbHVkZS9uZXQveGRwLmgKaW5kZXggYWE3NDJmNDEzYzM1OC4uOGZkNDEzOWU5Y2JkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQveGRwLmgKQEAgLTgxLDYgJiM0Mzs4MSwxNCBAQCBlbnVtIHhkcF9idWZmX2ZsYWdzIHsKIAkgKiBYRFAgcHJvZ3JhbSBpcyBub3QgYXR0YWNoZWQuCiAJICovCiAJWERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEUJPSBCSVQoMiksCiYjNDM7CS8qCiYjNDM7CSAqIGZyYWdzIGFyZSBwYWdlX3Bvb2wgbWVtb3J5IGV2ZW4gdGhvdWdoIHJ4cS0mZ3Q7bWVtLnR5cGUgaXMgbm90OiBhCiYjNDM7CSAqIHNrYi1iYWNrZWQgWERQIGJ1ZmYgKGdlbmVyaWMgWERQLCB2ZXRoKSBpcyBjb3cmIzM5O2QgaW50byBhIHBhZ2VfcG9vbC4KJiM0MzsJICogeGRwX2J1ZmYgb25seTogYW4geGRwX2ZyYW1lIGRlc2NyaWJlcyBpdHMgbWVtb3J5IHdpdGggOjptZW1fdHlwZSwgc28KJiM0MzsJICogdGhpcyBpcyBzdHJpcHBlZCBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpIGFuZCByZS1kZXJpdmVkIGZyb20KJiM0MzsJICogOjptZW1fdHlwZSBpbiB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKCkuCiYjNDM7CSAqLwomIzQzOwlYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MCT0gQklUKDMpLAogfTsKIAogc3RydWN0IHhkcF9idWZmIHsKQEAgLTEzMSw2ICYjNDM7MTM5LDE2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB4ZHBfYnVmZl9zZXRfZnJhZ191bnJlYWRhYmxlKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQogCXhkcC0mZ3Q7ZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEU7CiB9CiAKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoc3RydWN0IHhkcF9idWZmICp4ZHApCiYjNDM7ewomIzQzOwl4ZHAtJmd0O2ZsYWdzIHw9IFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0w7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB4ZHBfYnVmZl9pc19mcmFnX3BwKGNvbnN0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQomIzQzO3sKJiM0MzsJcmV0dXJuICEhKHhkcC0mZ3Q7ZmxhZ3MgJmFtcDsgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgeGRwX2J1ZmZfZ2V0X3NrYl9mbGFncyhjb25zdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCkKIHsKIAlyZXR1cm4geGRwLSZndDtmbGFnczsKQEAgLTM5NCw2ICYjNDM7NDEyLDE1IEBAIHZvaWQgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSwKIAl4ZHAtJmd0O2RhdGFfbWV0YSA9IGZyYW1lLSZndDtkYXRhIC0gZnJhbWUtJmd0O21ldGFzaXplOwogCXhkcC0mZ3Q7ZnJhbWVfc3ogPSBmcmFtZS0mZ3Q7ZnJhbWVfc3o7CiAJeGRwLSZndDtmbGFncyA9IGZyYW1lLSZndDtmbGFnczsKJiM0MzsJLyoKJiM0MzsJICogZnJhbWUtJmd0O2ZsYWdzIG5ldmVyIGNhcnJpZXMgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCAoaXQgaXMgc3RyaXBwZWQKJiM0MzsJICogaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSk7IHJlLWRlcml2ZSBpdCBmcm9tIHRoZSBmcmFtZSYjMzk7cyBvd24KJiM0MzsJICogbWVtb3J5IHR5cGUuIHZldGggYW5kIGRldm1hcCByZWJ1aWxkIGEgYnVmZiBoZXJlIGFuZCBydW4gYSBwcm9ncmFtCiYjNDM7CSAqIHdob3NlIHJ4cSBzYXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyB3aXRob3V0IHRoaXMgYSBzaHJpbmsgd291bGQKJiM0MzsJICogZnJlZSBhIHBhZ2VfcG9vbCBmcmFnIHRocm91Z2ggcGFnZV9mcmFnX2ZyZWUoKS4KJiM0MzsJICovCiYjNDM7CWlmIChmcmFtZS0mZ3Q7bWVtX3R5cGUgPT0gTUVNX1RZUEVfUEFHRV9QT09MKQomIzQzOwkJeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKTsKIH0KIAogc3RhdGljIGlubGluZQpAQCAtNDIwLDcgJiM0Mzs0NDcsOCBAQCBpbnQgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHAsCiAJeGRwX2ZyYW1lLSZndDtoZWFkcm9vbSA9IGhlYWRyb29tIC0gc2l6ZW9mKCp4ZHBfZnJhbWUpOwogCXhkcF9mcmFtZS0mZ3Q7bWV0YXNpemUgPSBtZXRhc2l6ZTsKIAl4ZHBfZnJhbWUtJmd0O2ZyYW1lX3N6ID0geGRwLSZndDtmcmFtZV9zejsKLQl4ZHBfZnJhbWUtJmd0O2ZsYWdzID0geGRwLSZndDtmbGFnczsKJiM0MzsJLyogWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCBpcyB4ZHBfYnVmZiBvbmx5LCBkb24mIzM5O3QgY2FycnkgaXQgb3ZlciAqLwomIzQzOwl4ZHBfZnJhbWUtJmd0O2ZsYWdzID0geGRwLSZndDtmbGFncyAmYW1wOyB+WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCAyOTBlMGYwOTllNmJmLi45NDI2OGY0ZDNjNWY3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtNTUzMiw2ICYjNDM7NTUzMiwxMiBAQCB1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLAogCWlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHsKIAkJc2tiX3NoaW5mbyhza2IpLSZndDt4ZHBfZnJhZ3Nfc2l6ZSA9IHNrYi0mZ3Q7ZGF0YV9sZW47CiAJCXhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7CiYjNDM7CQkvKgomIzQzOwkJICogQSBub25saW5lYXIgc2tiIHdhcyBjb3cmIzM5O2QgaW50byBwYWdlX3Bvb2wgbWVtb3J5IGJ5CiYjNDM7CQkgKiBza2JfY293X2RhdGFfZm9yX3hkcCgpIGJlZm9yZSB3ZSBnb3QgaGVyZSwgc28gdGhlIGZyYWdzIG11c3QKJiM0MzsJCSAqIGJlIGZyZWVkIHRvIHRoYXQgcG9vbCwgbm90IHZpYSB0aGUgcnhxJiMzOTtzIE1FTV9UWVBFX1BBR0VfU0hBUkVELgomIzQzOwkJICovCiYjNDM7CQl4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApOwogCX0gZWxzZSB7CiAJCXhkcF9idWZmX2NsZWFyX2ZyYWdzX2ZsYWcoeGRwKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLmQzNGJhNTZkNzlkOGYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC00Mzc4LDYgJiM0Mzs0Mzc4LDEzIEBAIHN0YXRpYyBib29sIGJwZl94ZHBfc2hyaW5rX2RhdGEoc3RydWN0IHhkcF9idWZmICp4ZHAsIHNrYl9mcmFnX3QgKmZyYWcsCiAJaWYgKG1lbV90eXBlID09IE1FTV9UWVBFX1hTS19CVUZGX1BPT0wpIHsKIAkJbmV0bWVtID0gMDsKIAkJemNfZnJhZyA9IGJwZl94ZHBfc2hyaW5rX2RhdGFfemMoeGRwLCBzaHJpbmssIHRhaWwsIHJlbGVhc2UpOwomIzQzOwl9IGVsc2UgaWYgKHhkcF9idWZmX2lzX2ZyYWdfcHAoeGRwKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFNrYi1iYWNrZWQgWERQIChnZW5lcmljIFhEUCwgdmV0aCkgY293JiMzOTtzIHRoZSBmcmFncyBpbnRvIGEKJiM0MzsJCSAqIHBhZ2VfcG9vbCB3aGlsZSB0aGUgcnhxIHN0YXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBmcmVlCiYjNDM7CQkgKiB0aGUgZnJhZyB0byB0aGUgcG9vbCwgbm90IHZpYSBwYWdlX2ZyYWdfZnJlZSgpLgomIzQzOwkJICovCiYjNDM7CQltZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfUE9PTDsKIAl9CiAKIAlpZiAocmVsZWFzZSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVlOGY5MDM0YTI2ODQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfc2hyaW5rX2ZyYWdzLmMKQEAgLTAsMCAmIzQzOzEsMjg4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXR3b3JrX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfdHVuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX2V0aGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy91aW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FycGEvaW5ldC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGRwX3Nocmlua19mcmFncy5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBnZW5lcmljLVhEUCBwcm9ncmFtIHRoYXQgc2hyaW5rcyBpbnRvIHRoZSBmcmFncyBmcmVlcyBhIHBhZ2VfcG9vbCBmcmFnLgomIzQzOyAqIHNrYi1iYWNrZWQgWERQIGZpcnN0IGNvdyYjMzk7cyB0aGUgbm9ubGluZWFyIHNrYiBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkKJiM0MzsgKiAoc2tiX2Nvd19kYXRhX2Zvcl94ZHAoKSBmb3IgZ2VuZXJpYyBYRFAsIHNrYl9wcF9jb3dfZGF0YSgpIGZvciB2ZXRoKSwgYnV0CiYjNDM7ICogdGhlIHNoYXJlZCByeHEgaXMgcmVnaXN0ZXJlZCBhcyBNRU1fVFlQRV9QQUdFX1NIQVJFRCwgc28gYSBidWdneSBrZXJuZWwKJiM0MzsgKiBmcmVlcyB0aGUgZnJhZyB3aXRoIHBhZ2VfZnJhZ19mcmVlKCkgLSZndDsgJiMzNDtCYWQgcGFnZSBzdGF0ZSAuLi4gcGFnZV9wb29sIGxlYWsmIzM0Oy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFRBUF9OQU1FCSYjMzQ7eGRwX3NocmluazAmIzM0OwomIzQzOyNkZWZpbmUgVEFQX05FVE5TCSYjMzQ7eGRwX3Nocmlua190YXAmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlNfTkFNRV9NQVhfTEVOCTMyCiYjNDM7I2RlZmluZSBWRVRIX0xPQ0FMCSYjMzQ7eGRwX3Nocmlua0EmIzM0OwomIzQzOyNkZWZpbmUgVkVUSF9QRUVSCSYjMzQ7eGRwX3Nocmlua0ImIzM0OwomIzQzOyNkZWZpbmUgVkVUSF9MT0NBTF9JUAkmIzM0OzEwLjkuOS4xJiMzNDsKJiM0MzsjZGVmaW5lIFZFVEhfUEVFUl9JUAkmIzM0OzEwLjkuOS4yJiMzNDsKJiM0MzsjZGVmaW5lIFZFVEhfTE9DQUxfTUFDCSYjMzQ7MDI6MDA6MDA6MDA6MDA6MDEmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogc2tiX3BwX2Nvd19kYXRhKCkga2VlcHMgdXAgdG8gb25lIHBhZ2UgaW4gdGhlIGxpbmVhciBwYXJ0LCBzbyB0aGUgcGFja2V0CiYjNDM7ICogc2l6ZXMgYmVsb3cgb25seSBsZWF2ZSBhIGZyYWcgKHNtYWxsZXIgdGhhbiB0aGUgMzAwMC1ieXRlIHNocmluaywgc28gaXQgaXMKJiM0MzsgKiByZWxlYXNlZCBhcyBhIHdob2xlKSBvbiA0SyBwYWdlcy4gU2tpcCBlbHNld2hlcmUgcmF0aGVyIHRoYW4gcnVuIGEgdGVzdAomIzQzOyAqIHRoYXQgY2Fubm90IHRlbGwgYSBmaXhlZCBrZXJuZWwgZnJvbSBhIGJ1Z2d5IG9uZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBBR0VfU0laRV80Swk0MDk2CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBHZW5lcm91cywgc28gYSBsb2FkZWQgQ0kgZG9lcyBub3QgZmFpbCB0aGUgYXNzZXJ0IHByZW1hdHVyZWx5OyBub3JtYWxseQomIzQzOyAqIHRoZSBmaXJzdCBjaGVjayBhbHJlYWR5IHN1Y2NlZWRzLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgV0FJVF9JVEVSUwkxMDAwMAomIzQzOyNkZWZpbmUgV0FJVF9VUwkJMTAwMAomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHdhaXRfZm9yX3Byb2coc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFdBSVRfSVRFUlMgJmFtcDsmYW1wOyAhc2tlbC0mZ3Q7YnNzLSZndDtzaHJpbmtfcmFuOyBpJiM0MzsmIzQzOykKJiM0MzsJCXVzbGVlcChXQUlUX1VTKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoY29uc3QgY2hhciAqaWZuYW1lKQomIzQzO3sKJiM0MzsJc3RydWN0IGlmcmVxIGlmciA9IHsKJiM0MzsJCS5pZnJfZmxhZ3MgPSBJRkZfVEFQIHwgSUZGX05PX1BJIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUywKJiM0MzsJfTsKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CXN0cnNjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvZGV2L25ldC90dW4mIzM0OywgT19SRFdSKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CWVyciA9IGlvY3RsKGZkLCBUVU5TRVRJRkYsICZhbXA7aWZyKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZXJyID0gLWVycm5vOwomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2ltaWxhciB0byBmbG93X2Rpc3NlY3Rvci5jOiB3cml0ZXYoKSBhbiBJRkZfTkFQSV9GUkFHUyB0YXAgdG8gYnVpbGQgYQomIzQzOyAqIG5vbmxpbmVhciBza2IgdGhhdCB0dW4gcnVucyB0aHJvdWdoIGRvX3hkcF9nZW5lcmljKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF90dW4oc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpCiYjNDM7ewomIzQzOwlfX3U4IGhlYWRbNzRdLCBmcmFnMVsyMDQ4XSwgZnJhZzJbMjA0OF07CiYjNDM7CXN0cnVjdCBldGhoZHIgKmV0aCA9ICh2b2lkICopaGVhZDsKJiM0MzsJaW50IHRhcF9mZCA9IC0xLCBpZmluZGV4LCBlcnI7CiYjNDM7CXN0cnVjdCBuZXRuc19vYmogKm5zID0gTlVMTDsKJiM0MzsJc3RydWN0IGlvdmVjIGlvdlszXTsKJiM0MzsJc3NpemVfdCBuOwomIzQzOwomIzQzOwlpZiAoZ2V0cGFnZXNpemUoKSAhPSBQQUdFX1NJWkVfNEspIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlucyA9IG5ldG5zX25ldyhUQVBfTkVUTlMsIHRydWUpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnMsICYjMzQ7bmV0bnNfbmV3JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0YXBfZmQgPSBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoVEFQX05BTUUpOwomIzQzOwlpZiAoIUFTU0VSVF9HRSh0YXBfZmQsIDAsICYjMzQ7Y3JlYXRlX3RhcCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlTWVMob3V0LCAmIzM0O2lwIGxpbmsgc2V0IGRldiAmIzM0OyBUQVBfTkFNRSAmIzM0OyB1cCYjMzQ7KTsKJiM0MzsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KFRBUF9OQU1FKTsKJiM0MzsJaWYgKCFBU1NFUlRfR1QoaWZpbmRleCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4gPSAwOwomIzQzOwomIzQzOwllcnIgPSBicGZfeGRwX2F0dGFjaChpZmluZGV4LCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3NocmluayksCiYjNDM7CQkJICAgICAwLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl94ZHBfYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1lbXNldChoZWFkLCAwLCBzaXplb2YoaGVhZCkpOwomIzQzOwltZW1zZXQoZnJhZzEsIDB4NDEsIHNpemVvZihmcmFnMSkpOwomIzQzOwltZW1zZXQoZnJhZzIsIDB4NDIsIHNpemVvZihmcmFnMikpOwomIzQzOwlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CiYjNDM7CiYjNDM7CWlvdlswXS5pb3ZfYmFzZSA9IGhlYWQ7ICBpb3ZbMF0uaW92X2xlbiA9IHNpemVvZihoZWFkKTsKJiM0MzsJaW92WzFdLmlvdl9iYXNlID0gZnJhZzE7IGlvdlsxXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcxKTsKJiM0MzsJaW92WzJdLmlvdl9iYXNlID0gZnJhZzI7IGlvdlsyXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcyKTsKJiM0MzsKJiM0MzsJbiA9IHdyaXRldih0YXBfZmQsIGlvdiwgQVJSQVlfU0laRShpb3YpKTsKJiM0MzsJQVNTRVJUX0VRKG4sIHNpemVvZihoZWFkKSAmIzQzOyBzaXplb2YoZnJhZzEpICYjNDM7IHNpemVvZihmcmFnMiksICYjMzQ7d3JpdGV2JiMzNDspOwomIzQzOwomIzQzOwl3YWl0X2Zvcl9wcm9nKHNrZWwpOwomIzQzOwkvKiBhIGJ1Z2d5IGtlcm5lbCBvbmx5IHNwbGF0cyAmIzM0O3BhZ2VfcG9vbCBsZWFrJiMzNDssIGl0IGRvZXMgbm90IGZhaWwgaGVyZSAqLwomIzQzOwlBU1NFUlRfR1Qoc2tlbC0mZ3Q7YnNzLSZndDtzaHJpbmtfcmFuLCAwLCAmIzM0O3hkcF9wcm9nX3JhbiYjMzQ7KTsKJiM0MzsKJiM0MzsJYnBmX3hkcF9kZXRhY2goaWZpbmRleCwgMCwgTlVMTCk7CiYjNDM7b3V0OgomIzQzOwlpZiAodGFwX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZSh0YXBfZmQpOwomIzQzOwluZXRuc19mcmVlKG5zKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCb3RoIHZldGggZW5kcyBsaXZlIGluIHRoZWlyIG93biBuYW1lc3BhY2UsIHNvIHRoZSB0cmFmZmljIHJlYWxseSBjcm9zc2VzCiYjNDM7ICogdGhlIHBhaXIgYW5kIG5vdGhpbmcgaXMgY3JlYXRlZCBpbiB0aGUgY2FsbGVyJiMzOTtzIG5hbWVzcGFjZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHZldGhfc2V0dXAoY2hhciAqbnMwLCBjaGFyICpuczEpCiYjNDM7ewomIzQzOwlpZiAoIUFTU0VSVF9PSyhhcHBlbmRfdGlkKG5zMCwgTlNfTkFNRV9NQVhfTEVOKSwgJiMzNDthcHBlbmRfdGlkIG5zMCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soYXBwZW5kX3RpZChuczEsIE5TX05BTUVfTUFYX0xFTiksICYjMzQ7YXBwZW5kX3RpZCBuczEmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBuczApOwomIzQzOwlTWVMoZmFpbF9uczAsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIG5zMSk7CiYjNDM7CVNZUyhmYWlsX25zMSwgJiMzNDtpcCAtbiAlcyBsaW5rIGFkZCAlcyBtdHUgODAwMCB0eXBlIHZldGggcGVlciBuYW1lICVzIG10dSA4MDAwJiMzNDssCiYjNDM7CSAgICBuczAsIFZFVEhfTE9DQUwsIFZFVEhfUEVFUik7CiYjNDM7CVNZUyhmYWlsX25zMSwgJiMzNDtpcCAtbiAlcyBsaW5rIHNldCAlcyBuZXRucyAlcyYjMzQ7LCBuczAsIFZFVEhfUEVFUiwgbnMxKTsKJiM0MzsJU1lTKGZhaWxfbnMxLCAmIzM0O2lwIC1uICVzIGxpbmsgc2V0ICVzIGFkZHJlc3MgJXMmIzM0OywgbnMwLCBWRVRIX0xPQ0FMLAomIzQzOwkgICAgVkVUSF9MT0NBTF9NQUMpOwomIzQzOwlTWVMoZmFpbF9uczEsICYjMzQ7aXAgLW4gJXMgYWRkciBhZGQgJXMvMjQgZGV2ICVzJiMzNDssIG5zMCwgVkVUSF9MT0NBTF9JUCwKJiM0MzsJICAgIFZFVEhfTE9DQUwpOwomIzQzOwlTWVMoZmFpbF9uczEsICYjMzQ7aXAgLW4gJXMgbGluayBzZXQgJXMgdXAmIzM0OywgbnMwLCBWRVRIX0xPQ0FMKTsKJiM0MzsJU1lTKGZhaWxfbnMxLCAmIzM0O2lwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBuczEsIFZFVEhfUEVFUl9JUCwKJiM0MzsJICAgIFZFVEhfUEVFUik7CiYjNDM7CVNZUyhmYWlsX25zMSwgJiMzNDtpcCAtbiAlcyBsaW5rIHNldCAlcyB1cCYjMzQ7LCBuczEsIFZFVEhfUEVFUik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2ZhaWxfbnMxOgomIzQzOwlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICVzJiMzNDssIG5zMSk7CiYjNDM7ZmFpbF9uczA6CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMmIzM0OywgbnMwKTsKJiM0MztmYWlsOgomIzQzOwlyZXR1cm4gLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZldGhfY2xlYW51cChjb25zdCBjaGFyICpuczAsIGNvbnN0IGNoYXIgKm5zMSkKJiM0Mzt7CiYjNDM7CS8qIERyb3BwaW5nIHRoZSBuYW1lc3BhY2VzIHRha2VzIHRoZSB2ZXRoIHBhaXIgYW5kIGl0cyBYRFAgcHJvZ3JhbXMuICovCiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMmIzM0OywgbnMxKTsKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAlcyYjMzQ7LCBuczApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZldGhfYXR0YWNoKGNvbnN0IGNoYXIgKm5zLCBjb25zdCBjaGFyICpkZXYsIGludCBwcm9nX2ZkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW47CiYjNDM7CWludCBpZmluZGV4LCBlcnI7CiYjNDM7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKG5zKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3Blbl9uZXRucyYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KGRldik7CiYjNDM7CWlmICghQVNTRVJUX0dUKGlmaW5kZXgsIDAsICYjMzQ7aWZfbmFtZXRvaW5kZXgmIzM0OykpIHsKJiM0MzsJCWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGJwZl94ZHBfYXR0YWNoKGlmaW5kZXgsIHByb2dfZmQsIDAsIE5VTEwpOwomIzQzOwljbG9zZV9uZXRucyhuc3Rva2VuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIEFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX3hkcF9hdHRhY2gmIzM0OykgPyAwIDogLTE7CiYjNDM7fQomIzQzOwomIzQzOy8qIEEgbGFyZ2UgcGluZyBidWlsZHMgYSBub25saW5lYXIgc2tiIHRoYXQgdmV0aCBjb3cmIzM5O3MgaW50byBpdHMgcGFnZV9wb29sLiAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfdmV0aChzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbCkKJiM0Mzt7CiYjNDM7CWNoYXIgbnMwW05TX05BTUVfTUFYX0xFTl0gPSAmIzM0O3hkcF9zaHJpbmtfbnMwLSYjMzQ7OwomIzQzOwljaGFyIG5zMVtOU19OQU1FX01BWF9MRU5dID0gJiMzNDt4ZHBfc2hyaW5rX25zMS0mIzM0OzsKJiM0MzsKJiM0MzsJaWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZldGhfc2V0dXAobnMwLCBuczEpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4gPSAwOwomIzQzOwomIzQzOwlpZiAodmV0aF9hdHRhY2gobnMwLCBWRVRIX0xPQ0FMLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3NocmluaykpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXMmIzM0OywKJiM0MzsJCSAgIG5zMSwgVkVUSF9MT0NBTF9JUCk7CiYjNDM7CiYjNDM7CXdhaXRfZm9yX3Byb2coc2tlbCk7CiYjNDM7CS8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzICYjMzQ7cGFnZV9wb29sIGxlYWsmIzM0OywgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovCiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4sIDAsICYjMzQ7eGRwX3Byb2dfcmFuJiMzNDspOwomIzQzO291dDoKJiM0MzsJdmV0aF9jbGVhbnVwKG5zMCwgbnMxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBMT0NBTCBjb3cmIzM5O3MgdGhlIGluY29taW5nIHNrYiBhbmQgcmV0dXJucyBYRFBfVFgsIHNvIHRoZSBidWZmIGlzIHR1cm5lZCBpbnRvCiYjNDM7ICogYW4geGRwX2ZyYW1lIGFuZCBib3VuY2VkIHRvIFBFRVIsIHdoaWNoIHNocmlua3MgYSBmcmFnLiBBIHBhZ2VfcG9vbCB0YWcKJiM0MzsgKiByZWNvcmRlZCBvbiB0aGUgYnVmZiBtdXN0IG5vdCBsZWFrIGludG8gdGhlIGZyYW1lLCBvciBQRUVSIGZyZWVzIGEgcGxhaW4KJiM0MzsgKiBwYWdlICh3aG9zZSBwcCB3YXMgYWxyZWFkeSBjbGVhcmVkIG9uIHRoZSBYRFBfVFggc2lkZSkgYXMgcGFnZV9wb29sIG1lbW9yeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3ZldGhfdHgoc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpCiYjNDM7ewomIzQzOwljaGFyIG5zMFtOU19OQU1FX01BWF9MRU5dID0gJiMzNDt4ZHBfc2hyaW5rX3R4MC0mIzM0OzsKJiM0MzsJY2hhciBuczFbTlNfTkFNRV9NQVhfTEVOXSA9ICYjMzQ7eGRwX3Nocmlua190eDEtJiMzNDs7CiYjNDM7CiYjNDM7CWlmIChnZXRwYWdlc2l6ZSgpICE9IFBBR0VfU0laRV80SykgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2ZXRoX3NldHVwKG5zMCwgbnMxKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTE9DQUwgYm91bmNlcyBldmVyeXRoaW5nIChpbmNsLiBBUlApIHdpdGggWERQX1RYLCBzbyBwaW4gYSBzdGF0aWMKJiM0MzsJICogbmVpZ2hib3VyIHRvIGxldCB0aGUgcGluZyYjMzk7cyBwYXlsb2FkIGFjdHVhbGx5IHJlYWNoIGl0LgomIzQzOwkgKi8KJiM0MzsJU1lTKG91dCwgJiMzNDtpcCAtbiAlcyBuZWlnaCBhZGQgJXMgbGxhZGRyICVzIGRldiAlcyBudWQgcGVybWFuZW50JiMzNDssCiYjNDM7CSAgICBuczEsIFZFVEhfTE9DQUxfSVAsIFZFVEhfTE9DQUxfTUFDLCBWRVRIX1BFRVIpOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4gPSAwOwomIzQzOwomIzQzOwlpZiAodmV0aF9hdHRhY2gobnMwLCBWRVRIX0xPQ0FMLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3R4KSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHZldGhfYXR0YWNoKG5zMSwgVkVUSF9QRUVSLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3NocmluaykpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXMmIzM0OywKJiM0MzsJCSAgIG5zMSwgVkVUSF9MT0NBTF9JUCk7CiYjNDM7CiYjNDM7CXdhaXRfZm9yX3Byb2coc2tlbCk7CiYjNDM7CS8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzICYjMzQ7cGFnZV9wb29sIGxlYWsmIzM0OywgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovCiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4sIDAsICYjMzQ7eGRwX3Byb2dfcmFuJiMzNDspOwomIzQzO291dDoKJiM0MzsJdmV0aF9jbGVhbnVwKG5zMCwgbnMxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3hkcF9zaHJpbmtfZnJhZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsOwomIzQzOwomIzQzOwlza2VsID0geGRwX3Nocmlua19mcmFnc19fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW5fbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0dW4mIzM0OykpCiYjNDM7CQl0ZXN0X3R1bihza2VsKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt2ZXRoJiMzNDspKQomIzQzOwkJdGVzdF92ZXRoKHNrZWwpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3ZldGhfdHgmIzM0OykpCiYjNDM7CQl0ZXN0X3ZldGhfdHgoc2tlbCk7CiYjNDM7CiYjNDM7CXhkcF9zaHJpbmtfZnJhZ3NfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zaHJpbmtfZnJhZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYWQ4OTVhYjY5OTMwMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmMKQEAgLTAsMCAmIzQzOzEsMzQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IHNocmlua19yYW47CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwLmZyYWdzJiMzNDspCiYjNDM7aW50IHhkcF9zaHJpbmsoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogUnVucyBvbiBib3RoIHNrYi1iYWNrZWQgWERQIHBhdGhzIChnZW5lcmljIFhEUCB2aWEgdHVuLCBhbmQgdmV0aCk6CiYjNDM7CSAqIHRoZSBub25saW5lYXIgc2tiIGlzIGNvdyYjMzk7ZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYmVmb3JlIHdlIHJ1biwgc28KJiM0MzsJICogc2hyaW5raW5nIHRoZSB0YWlsIHJlbGVhc2VzIGEgd2hvbGUgZnJhZyB0aGF0IGhhcyB0byBnbyBiYWNrIHRvIHRoYXQKJiM0MzsJICogcG9vbC4gVGhlIGNvdW50ZXIgb25seSB0ZWxscyB1cyB0aGUgcHJvZ3JhbSByYW4gYW5kIHRoZSBoZWxwZXIKJiM0MzsJICogc3VjY2VlZGVkIC0tIGEgbGluZWFyIGJ1ZmYgcmV0dXJucyAwIGFzIHdlbGwgLS0gaXQgZG9lcyBub3QgcHJvdmUgYQomIzQzOwkgKiBmcmFnIHdhcyByZWxlYXNlZC4KJiM0MzsJICovCiYjNDM7CWlmIChicGZfeGRwX2FkanVzdF90YWlsKGN0eCwgLTMwMDApID09IDApCiYjNDM7CQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3Nocmlua19yYW4sIDEpOwomIzQzOwlyZXR1cm4gWERQX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcC5mcmFncyYjMzQ7KQomIzQzO2ludCB4ZHBfdHgoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQm91bmNlIHRoZSBmcmFtZSBiYWNrLiBPbiB2ZXRoIHRoaXMgdHVybnMgdGhlIGJ1ZmYgaW50byBhbgomIzQzOwkgKiB4ZHBfZnJhbWUsIHdoaWNoIGlzIHdoZXJlIGEgYnVmZi1zY29wZWQgcGFnZV9wb29sIHRhZyBtdXN0IG5vdCBsZWFrCiYjNDM7CSAqIGludG8gdGhlIGZyYW1lIGhhbmRlZCB0byB0aGUgcGVlci4KJiM0MzsJICovCiYjNDM7CXJldHVybiBYRFBfVFg7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgZmlyc3Qgc3RlcCBpcywgb2YgY291cnNlLCBhIGNhcmVmdWwgcmVhZC10aHJvdWdoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgYW5kIHdoZXJlIHRob3NlIGNoYW5nZXMgYXJlIGhhcHBlbmluZy4KCkkgc2VlIGEgbGlzdCBvZiBtb2RpZmllZCBmaWxlczogYGRyaXZlcnMvbmV0L3ZldGguY2AsIGBpbmNsdWRlL25ldC94ZHAuaGAsIGBuZXQvY29yZS9kZXYuY2AsIGBuZXQvY29yZS9maWx0ZXIuY2AsIGFuZCBhIHNsZXcgb2YgdGVzdCBmaWxlcy4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc2V0IHRvIGxvb2sgYXQuCgoqICAgYGRyaXZlcnMvbmV0L3ZldGguY2Agc2hvd3MgY2hhbmdlcyB3aXRoaW4gYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgLCBzcGVjaWZpY2FsbHkgc2V0dGluZyBgeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKWAgYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGZyYWdtZW50cyBpbiB0aGUgU0tCLiBUaGF0IHNvdW5kcyBsaWtlIHdlIGFyZSBkZWFsaW5nIHdpdGggZnJhZ21lbnQgaGFuZGxpbmcsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBleHRyYSBzY3J1dGlueS4KKiAgIGBpbmNsdWRlL25ldC94ZHAuaGAgaW50cm9kdWNlcyBhIG5ldyBmbGFnLCBgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTGAsIGFsb25nIHdpdGggaGVscGVyIGZ1bmN0aW9ucyBmb3Igc2V0dGluZyBhbmQgY2hlY2tpbmcgaXQuIFRoaXMgaW5kaWNhdGVzIGEgZm9jdXMgb24gcGFnZSBwb29sIG1hbmFnZW1lbnQgb2YgZnJhZ21lbnRzIHdpdGhpbiBYRFAsIHNvIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGFuIG9idmlvdXMgYXJlYSBvZiBmb2N1cy4gQWxzbyBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgYW5kIGB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZmAgc2VlbXMgdG8gZGVhbCB3aXRoIGZsYWdzIGFuZCBtZW1vcnkgdHlwZS4KKiAgIGBuZXQvY29yZS9kZXYuY2Agc2hvd3MgdGhhdCwgd2l0aGluIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLCBgeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKWAgaXMgY2FsbGVkIGlmIHRoZSBTS0IgaXMgbm9ubGluZWFyLCB3aGljaCByZWluZm9yY2VzIHRoaXMgaWRlYSBvZiBmcmFnZW1lbnRzIGJlaW5nIGNvcmUuCiogICBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGBicGZfeGRwX3Nocmlua19kYXRhYCBkb2VzIHNvbWUgbWVtb3J5IHR5cGUgaGFuZGxpbmcuIEl0IGlzIHNwZWNpZmljYWxseSBjYWxsaW5nIGB4ZHBfYnVmZl9pc19mcmFnX3BwYCwgYW5kIHRoZW4gZGVhbGluZyB3aXRoIHRoZSBtZW1vcnkgYXMgYSBgTUVNX1RZUEVfUEFHRV9QT09MYCB0byBmcmVlIGEgZnJhZy4gVGhpcyBpcyBrZXksIGFzIGFueSBzdWJ0bGUgY2hhbmdlIGhlcmUgY291bGQgY3JlYXRlIGlzc3Vlcy4KCk9rYXksIGxldCBtZSBwdXQgb24gbXkgbWVtb3J5IGxlYWsgLyB1c2UtYWZ0ZXItZnJlZSBoYXQuIFRoZSBjb3JlIHNlZW1zIHRvIGJlIGFyb3VuZCB0aGlzIGludGVyYWN0aW9uIGJldHdlZW4gU0tCIGZyYWdtZW50cywgWERQLCBhbmQgdGhlIHBhZ2UgcG9vbC4gVGhlcmUmIzM5O3MgYSBjbGVhciBicmFuY2hpbmcgYmFzZWQgb24gd2hldGhlciB0aGUgWERQIGJ1ZmZlciB1c2VzIGZyYWdtZW50cywgYW5kIHRoYXQgc2VlbXMgdG8gbGVhZCB0byBtZW1vcnkgdHlwZSBjaGFuZ2VzLiBUaGlzIHNtZWxscyBsaWtlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW5jb3JyZWN0IG1lbW9yeSBkZWFsbG9jYXRpb24gaWYgdGhlIHN0YXRlIGlzbiYjMzk7dCBtYW5hZ2VkIGNvcnJlY3RseS4KClRoZSBmYWN0IHRoYXQgYGJwZl94ZHBfc2hyaW5rX2RhdGFgJiMzOTtzIHN1cnJvdW5kaW5nIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgbWVtb3J5IHR5cGVzIGFuZCBmcmFnbWVudCBtYW5hZ2VtZW50IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcyBpbiBkZXRhaWwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZGlmZmVyZW50IG1lbW9yeSB0eXBlcywgZXNwZWNpYWxseSBhcm91bmQgdGhlIHBhZ2UgcG9vbC4gV2UgbmVlZCB0byBiZSBjaGVja2luZyB0aGUgcGFnZSBwb29sIGludGVyYWN0aW9ucyB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG9mZi1ieS1vbmUgZXJyb3JzIG9yIGRvdWJsZS1mcmVlcy4KClNvLCB5ZXMsIGdpdmVuIHRoaXMgYW5hbHlzaXMsIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBmcmFnbWVudCBoYW5kbGluZywgdGhlIG1lbW9yeSB0eXBlIGNoYW5nZXMsIGFuZCB0aGUgcGFnZSBwb29sIGludGVyYWN0aW9ucyBhcmUgYWxsIHJlZCBmbGFncyB0aGF0IGRlbWFuZCBkZWVwZXIgaW52ZXN0aWdhdGlvbiB3aXRoIHRvb2xzIGRlc2lnbmVkIHRvIGNhdGNoIHRoZXNlIGlzc3Vlcy4gSSBzaG91bGQgbWFrZSBzdXJlIG15IHRlc3Rpbmcgd2lsbCBjb25zaWRlciB0aGUgaW50ZXJhY3Rpb25zIGFuZCBlZGdlIGNhc2VzIG9mIHRoZSBkaWZmZXJlbnQgbWVtb3J5IHR5cGVzIGluIHRoaXMgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3hkcF9zaHJpbmtfZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTQzMjc9c3RhdGljIGludCBicGZfeGRwX2ZyYWdzX2luY3JlYXNlX3RhaWwoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBvZmZzZXQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDM1MS1cbm5ldC9jb3JlL2ZpbHRlci5jOjQzNTI6c3RhdGljIHN0cnVjdCB4ZHBfYnVmZiAqYnBmX3hkcF9zaHJpbmtfZGF0YV96YyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgaW50IHNocmluayxcbm5ldC9jb3JlL2ZpbHRlci5jLTQzNTMtXHRcdFx0XHRcdCAgICAgICBib29sIHRhaWwsIGJvb2wgcmVsZWFzZSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00MzY5LVxubmV0L2NvcmUvZmlsdGVyLmM6NDM3MDpzdGF0aWMgYm9vbCBicGZfeGRwX3Nocmlua19kYXRhKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBza2JfZnJhZ190ICpmcmFnLFxubmV0L2NvcmUvZmlsdGVyLmMtNDM3MS1cdFx0XHRcdGludCBzaHJpbmssIGJvb2wgdGFpbClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00Mzc5LVx0XHRuZXRtZW0gPSAwO1xubmV0L2NvcmUvZmlsdGVyLmM6NDM4MDpcdFx0emNfZnJhZyA9IGJwZl94ZHBfc2hyaW5rX2RhdGFfemMoeGRwLCBzaHJpbmssIHRhaWwsIHJlbGVhc2UpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDM4MS1cdH0gZWxzZSBpZiAoeGRwX2J1ZmZfaXNfZnJhZ19wcCh4ZHApKSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDQwMT1zdGF0aWMgaW50IGJwZl94ZHBfZnJhZ3Nfc2hyaW5rX3RhaWwoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBvZmZzZXQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDQxNC1cdFx0b2Zmc2V0IC09IHNocmluaztcbm5ldC9jb3JlL2ZpbHRlci5jOjQ0MTU6XHRcdGlmIChicGZfeGRwX3Nocmlua19kYXRhKHhkcCwgZnJhZywgc2hyaW5rLCB0cnVlKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0MTYtXHRcdFx0bl9mcmFnc19mcmVlJiM0MzsmIzQzOztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjY1OT1fX2JwZl9rZnVuYyBpbnQgYnBmX3hkcF9wdWxsX2RhdGEoc3RydWN0IHhkcF9tZCAqeCwgdTMyIGxlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcwMC1cdFx0ZGVsdGEgLT0gc2hyaW5rO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI3MDE6XHRcdGlmIChicGZfeGRwX3Nocmlua19kYXRhKHhkcCwgZnJhZywgc2hyaW5rLCBmYWxzZSkpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcwMi1cdFx0XHRuX2ZyYWdzX2ZyZWUmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdDoKCioqRGl2aW5nIGludG8gdGhlIFBhY2tldCBGaWx0ZXIgUGx1bWJpbmcqKgoKT2theSwgc28gdGhlIGluc3RydWN0aW9uIGlzIGNsZWFyOiBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBqdW1wIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQzNzAuIFRoYXQgdXN1YWxseSBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYWNrZXQgZmlsdGVyaW5nIGVuZ2luZSwgbW9zdCBsaWtlbHkgdGhlIGltcGxlbWVudGF0aW9uIG9mIHNvbWUgQlBGLXJlbGF0ZWQgZnVuY3Rpb24uIE15IGd1dCB0ZWxscyBtZSB3ZSYjMzk7cmUgZWl0aGVyIGxvb2tpbmcgYXQgdGhlIGludGVycHJldGVyLCBhIGhlbHBlciBmdW5jdGlvbiwgb3IgcGVyaGFwcyBhIHBhcnQgb2YgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiByb3V0aW5lcyBmb3IgdGhpcyBzZWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgb3V0IGZvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYW5kbGUgdGhlIGZpbHRlcnMgdGhlbXNlbHZlcywgdGhlIGFjdHVhbCBieXRlY29kZSByZXByZXNlbnRhdGlvbiBhbmQgaG93IHRoYXQgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgZGF0YSBwYXRoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIGF3YWl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzY1Olx0XHR9XG40MzY2Olx0XG40MzY3Olx0XHRyZXR1cm4gemNfZnJhZztcbjQzNjg6XHR9XG40MzY5Olx0XG40MzcwOlx0c3RhdGljIGJvb2wgYnBmX3hkcF9zaHJpbmtfZGF0YShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc2tiX2ZyYWdfdCAqZnJhZyxcbjQzNzE6XHRcdFx0XHRcdGludCBzaHJpbmssIGJvb2wgdGFpbClcbjQzNzI6XHR7XG40MzczOlx0XHRlbnVtIHhkcF9tZW1fdHlwZSBtZW1fdHlwZSA9IHhkcC1cdTAwM2VyeHEtXHUwMDNlbWVtLnR5cGU7XG40Mzc0Olx0XHRib29sIHJlbGVhc2UgPSBza2JfZnJhZ19zaXplKGZyYWcpID09IHNocmluaztcbjQzNzU6XHRcdG5ldG1lbV9yZWYgbmV0bWVtID0gc2tiX2ZyYWdfbmV0bWVtKGZyYWcpO1xuNDM3NjpcdFx0c3RydWN0IHhkcF9idWZmICp6Y19mcmFnID0gTlVMTDtcbjQzNzc6XHRcbjQzNzg6XHRcdGlmIChtZW1fdHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MKSB7XG40Mzc5Olx0XHRcdG5ldG1lbSA9IDA7XG40MzgwOlx0XHRcdHpjX2ZyYWcgPSBicGZfeGRwX3Nocmlua19kYXRhX3pjKHhkcCwgc2hyaW5rLCB0YWlsLCByZWxlYXNlKTtcbjQzODE6XHRcdH0gZWxzZSBpZiAoeGRwX2J1ZmZfaXNfZnJhZ19wcCh4ZHApKSB7XG40MzgyOlx0XHRcdC8qXG40MzgzOlx0XHRcdCAqIFNrYi1iYWNrZWQgWERQIChnZW5lcmljIFhEUCwgdmV0aCkgY293JiMzOTtzIHRoZSBmcmFncyBpbnRvIGFcbjQzODQ6XHRcdFx0ICogcGFnZV9wb29sIHdoaWxlIHRoZSByeHEgc3RheXMgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIHNvIGZyZWVcbjQzODU6XHRcdFx0ICogdGhlIGZyYWcgdG8gdGhlIHBvb2wsIG5vdCB2aWEgcGFnZV9mcmFnX2ZyZWUoKS5cbjQzODY6XHRcdFx0ICovXG40Mzg3Olx0XHRcdG1lbV90eXBlID0gTUVNX1RZUEVfUEFHRV9QT09MO1xuNDM4ODpcdFx0fVxuNDM4OTpcdFxuNDM5MDpcdFx0aWYgKHJlbGVhc2UpIHtcbjQzOTE6XHRcdFx0X194ZHBfcmV0dXJuKG5ldG1lbSwgbWVtX3R5cGUsIGZhbHNlLCB6Y19mcmFnKTtcbjQzOTI6XHRcdH0gZWxzZSB7XG40MzkzOlx0XHRcdGlmICghdGFpbClcbjQzOTQ6XHRcdFx0XHRza2JfZnJhZ19vZmZfYWRkKGZyYWcsIHNocmluayk7XG40Mzk1Olx0XHRcdHNrYl9mcmFnX3NpemVfc3ViKGZyYWcsIHNocmluayk7XG40Mzk2Olx0XHR9XG40Mzk3Olx0XG40Mzk4Olx0XHRyZXR1cm4gcmVsZWFzZTtcbjQzOTk6XHR9XG40NDAwOlx0XG40NDAxOlx0c3RhdGljIGludCBicGZfeGRwX2ZyYWdzX3Nocmlua190YWlsKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBpbnQgb2Zmc2V0KVxuNDQwMjpcdHtcbjQ0MDM6XHRcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNpbmZvID0geGRwX2dldF9zaGFyZWRfaW5mb19mcm9tX2J1ZmYoeGRwKTtcbjQ0MDQ6XHRcdGludCBpLCBuX2ZyYWdzX2ZyZWUgPSAwLCBsZW5fZnJlZSA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzI0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWERQIEJ1ZmZlciBTaHJpbmsgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgZmxhdyB3aXRoaW4gdGhlIFhEUCBmcmFtZXdvcmssIHNwZWNpZmljYWxseSB3aGVuIHNocmlua2luZyBYRFAgYnVmZmVycyBiYWNrZWQgYnkgU0tCcywgcGFydGljdWxhcmx5IGluIHRoZSBub25saW5lYXIgU0tCIHNjZW5hcmlvLiBUaGUgY29yZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGluY29ycmVjdCBoYW5kbGluZyBvZiBwYWdlIGZyYWdtZW50cyAoZnJhZ3MpIGFsbG9jYXRlZCBmcm9tIGEgYHBhZ2VfcG9vbGAgZHVyaW5nIGJ1ZmZlciBzaHJpbmthZ2UuIEJhc2ljYWxseSwgd2hlbiBhIEJQRiBwcm9ncmFtIHNocmlua3MgdGhlIFhEUCBidWZmZXImIzM5O3MgdGFpbCB1c2luZyBgYnBmX3hkcF9hZGp1c3RfdGFpbGAgb3IgYGJwZl94ZHBfcHVsbF9kYXRhYCwgdGhlIGNvZGUgd2FzIG1pc3Rha2VubHkgZnJlZWluZyB0aGUgY29tcGxldGVseSBzaHJ1bmsgZnJhZ21lbnRzIHVzaW5nIGBwYWdlX2ZyYWdfZnJlZSgpYCwgZXZlbiB0aG91Z2ggdGhleSB3ZXJlIGFsbG9jYXRlZCBmcm9tIGEgYHBhZ2VfcG9vbGAuIFRoaXMgaW5jb25zaXN0ZW5jeSBsZWFkcyB0byBzZXZlcmUgaXNzdWVzOiAmIzM0O0JhZCBwYWdlIHN0YXRlIC4uLiBwYWdlX3Bvb2wgbGVhaywmIzM0OyBtZW1vcnkgY29ycnVwdGlvbiwgaW52YWxpZCBmcmVlcywgYW5kIHByb2JsZW1zIHdpdGggcGFnZSByZWZlcmVuY2UgY291bnRpbmcg4oCTIGNsYXNzaWMgbWVtb3J5IG1hbmFnZW1lbnQgcGl0ZmFsbHMuCgpUaGUgc29sdXRpb24sIGFzIEkgc2VlIGl0LCBpcyBhIHByZXR0eSBjbGVhbiBhcHByb2FjaC4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIGZsYWcsIGBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MYCwgd2l0aGluIHRoZSBgeGRwX2J1ZmZgIHN0cnVjdHVyZS4gVGhpcyBmbGFnIGFsbG93cyBgYnBmX3hkcF9zaHJpbmtfZGF0YSgpYCB0byBjb3JyZWN0bHkgaWRlbnRpZnkgZnJhZ3Mgb3JpZ2luYXRpbmcgZnJvbSBhIGBwYWdlX3Bvb2xgIChtZW1fdHlwZSBgTUVNX1RZUEVfUEFHRV9QT09MYCkgYW5kIHVzZSB0aGUgYXBwcm9wcmlhdGUgcGFnZSBwb29sIHJlY2xhbWF0aW9uIGxvZ2ljLiBUaGF0JiMzOTtzIGEgZ29vZCBmaXggZm9yIHRoZSBpZGVudGlmaWVkIG1lbW9yeS1yZWxhdGVkIGlzc3VlLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBwZXJmb3JtIGEgS01TQU4vS0FTQU4gYXNzZXNzbWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzbiYjMzk7dCBzdWJ0bHkgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHdyaXRlcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLgoKTXkgY3JpdGVyaWEgZm9yIEtNU0FOIHJldm9sdmUgYXJvdW5kIHRoZXNlIGFyZWFzOiBrZXJuZWwgc3RydWN0dXJlcyBsZWFraW5nIHRvIHVzZXIgc3BhY2UgKHZpYSB2YXJpb3VzIGNoYW5uZWxzKSwgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBzdWJzZXF1ZW50IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIGJ5dGVzIGJlaW5nIGFjY2Vzc2VkLgoKU28sIGxldCYjMzk7cyBleGFtaW5lIHRoZSBtZW1vcnkgZmxvd3M6CgoqICAgSW4gYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgIGFuZCBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgd2UmIzM5O3JlIHNldHRpbmcgdGhlIGZsYWcgYml0LCB3aGljaCBpcyBnb29kLgoqICAgSW4gYHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmYCwgdGhlIGZsYWcgaXMgY2xlYXJlZC4KKiAgIEluIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLCB0aGUgZmxhZyBpcyBzZXQuCiogICBgYnBmX3hkcF9zaHJpbmtfZGF0YWAgY2hlY2tzIHRoZSBmbGFnLgoKQWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlLCBJIGRvbiYjMzk7dCBzZWUgYW55IGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIGB4ZHBgIHN0cnVjdHVyZSBpcyBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9uIGNhbGxzLiBUaGUgYGZsYWdzYCBmaWVsZCBpcyBiZWluZyBtYW5pcHVsYXRlZCB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucywgc28gaXQmIzM5O3MgYWxsIGNvbnRyb2xsZWQuIFRoZSBwYXRjaCYjMzk7cyBwcmltYXJ5IGZvY3VzIGlzIHJlc29sdmluZyB0aGUgcGFnZSBmcmVlIHR5cGUgbWlzbWF0Y2gsIHdoaWNoIHByaW1hcmlseSB0cmlnZ2VycyBpc3N1ZXMgd2l0aCBwYWdlIHJlZmNvdW50LCBtZW1vcnkgYWxsb2NhdG9yIGNvcnJ1cHRpb24sIGFuZCBwYWdlIHBvb2wgbGVha3MuIFRoZXNlIGFyZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgdGhhdCBhcmUgbm9ybWFsbHkgY2F1Z2h0IGJ5IGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIHNhbml0aXplcnMgbGlrZSBwYWdlIHJlZmNvdW50IGNoZWNrcywgcGFnZVxfcG9vbCB0cmFja2luZywgYW5kIEtBU0FOICh0byBkZXRlY3QgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUpLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBlcnJvcnMuCgpJJiMzOTt2ZSBhbHNvIGRvdWJsZS1jaGVja2VkIGB4ZHBfYnVmZmAgYW5kIGB4ZHBfZnJhbWVgIGZvciB1bmluaXRpYWxpemVkIGZpZWxkcyB0byBlbnN1cmUgbm90aGluZyYjMzk7cyBleHBvc2VkIGZyb20gdGhpcyBwYXRjaCBhbmQsIGFmdGVyIGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGluIGBpbmNsdWRlL25ldC94ZHAuaGAsIEkmIzM5O20gY29uZmlkZW50LiBJJiMzOTttIHNhdGlzZmllZCB0aGF0IHRoaXMgcGF0Y2gsIHdoaWxlIGZpeGluZyBhIGNyaXRpY2FsIG1lbW9yeSBpc3N1ZSwgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4vS0FTQU4gY29uY2VybnMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hkcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hkcC5oPTc0PWVudW0geGRwX2J1ZmZfZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbmV0L3hkcC5oLTg4LVx0ICogdGhpcyBpcyBzdHJpcHBlZCBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpIGFuZCByZS1kZXJpdmVkIGZyb21cbmluY2x1ZGUvbmV0L3hkcC5oOjg5Olx0ICogOjptZW1fdHlwZSBpbiB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKCkuXG5pbmNsdWRlL25ldC94ZHAuaC05MC1cdCAqL1xuLS1cbmluY2x1ZGUvbmV0L3hkcC5oPTQwNT1zdGF0aWMgaW5saW5lXG5pbmNsdWRlL25ldC94ZHAuaDo0MDY6dm9pZCB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKGNvbnN0IHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lLFxuaW5jbHVkZS9uZXQveGRwLmgtNDA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1ODMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB4ZHAuaGAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgWERQLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbmV0L3hkcC5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQwMC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBzcG90IHRvIGdldCBhIGZlZWwgZm9yIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBrZXkgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2l0aGluIGEgaGVhZGVyIGZpbGUgbGlrZSB0aGlzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBkZWZpbml0aW9ucyBoZXJlIHRoYXQgcmVsYXRlIHRvIHRoZSBYRFAgcHJvZ3JhbW1pbmcgbW9kZWwsIG1heWJlIHNvbWV0aGluZyBhcm91bmQgYnVmZmVyIG1hbmFnZW1lbnQgb3IgcGFja2V0IG1ldGFkYXRhLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiBob3cgWERQIGFjdHVhbGx5IHdvcmtzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uIHBvaW50cyBhcyBJIHJlYWQuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGZvciBtb3JlIGluLWRlcHRoIGFuYWx5c2lzIGxhdGVyIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hkcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDY1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTU6XHRzdHJ1Y3Qgc2tfYnVmZiAqeGRwX2J1aWxkX3NrYl9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApO1xuIDM5NjpcdHN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21femMoc3RydWN0IHhkcF9idWZmICp4ZHApO1xuIDM5NzpcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCk7XG4gMzk4Olx0c3RydWN0IHNrX2J1ZmYgKl9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYsXG4gMzk5Olx0XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4gNDAwOlx0XHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIDQwMTpcdHN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcbiA0MDI6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIDQwMzpcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGZfY2xvbmUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZik7XG4gNDA0Olx0XG4gNDA1Olx0c3RhdGljIGlubGluZVxuIDQwNjpcdHZvaWQgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSxcbiA0MDc6XHRcdFx0XHQgICAgICAgc3RydWN0IHhkcF9idWZmICp4ZHApXG4gNDA4Olx0e1xuIDQwOTpcdFx0eGRwLVx1MDAzZWRhdGFfaGFyZF9zdGFydCA9IGZyYW1lLVx1MDAzZWRhdGEgLSBmcmFtZS1cdTAwM2VoZWFkcm9vbSAtIHNpemVvZigqZnJhbWUpO1xuIDQxMDpcdFx0eGRwLVx1MDAzZWRhdGEgPSBmcmFtZS1cdTAwM2VkYXRhO1xuIDQxMTpcdFx0eGRwLVx1MDAzZWRhdGFfZW5kID0gZnJhbWUtXHUwMDNlZGF0YSAmIzQzOyBmcmFtZS1cdTAwM2VsZW47XG4gNDEyOlx0XHR4ZHAtXHUwMDNlZGF0YV9tZXRhID0gZnJhbWUtXHUwMDNlZGF0YSAtIGZyYW1lLVx1MDAzZW1ldGFzaXplO1xuIDQxMzpcdFx0eGRwLVx1MDAzZWZyYW1lX3N6ID0gZnJhbWUtXHUwMDNlZnJhbWVfc3o7XG4gNDE0Olx0XHR4ZHAtXHUwMDNlZmxhZ3MgPSBmcmFtZS1cdTAwM2VmbGFncztcbiA0MTU6XHRcdC8qXG4gNDE2Olx0XHQgKiBmcmFtZS1cdTAwM2VmbGFncyBuZXZlciBjYXJyaWVzIFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wgKGl0IGlzIHN0cmlwcGVkXG4gNDE3Olx0XHQgKiBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpKTsgcmUtZGVyaXZlIGl0IGZyb20gdGhlIGZyYW1lJiMzOTtzIG93blxuIDQxODpcdFx0ICogbWVtb3J5IHR5cGUuIHZldGggYW5kIGRldm1hcCByZWJ1aWxkIGEgYnVmZiBoZXJlIGFuZCBydW4gYSBwcm9ncmFtXG4gNDE5Olx0XHQgKiB3aG9zZSByeHEgc2F5cyBNRU1fVFlQRV9QQUdFX1NIQVJFRCwgc28gd2l0aG91dCB0aGlzIGEgc2hyaW5rIHdvdWxkXG4gNDIwOlx0XHQgKiBmcmVlIGEgcGFnZV9wb29sIGZyYWcgdGhyb3VnaCBwYWdlX2ZyYWdfZnJlZSgpLlxuIDQyMTpcdFx0ICovXG4gNDIyOlx0XHRpZiAoZnJhbWUtXHUwMDNlbWVtX3R5cGUgPT0gTUVNX1RZUEVfUEFHRV9QT09MKVxuIDQyMzpcdFx0XHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xuIDQyNDpcdH1cbiA0MjU6XHRcbiA0MjY6XHRzdGF0aWMgaW5saW5lXG4gNDI3Olx0aW50IHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKGNvbnN0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuIDQyODpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfZnJhbWUpXG4gNDI5Olx0e1xuIDQzMDpcdFx0aW50IG1ldGFzaXplLCBoZWFkcm9vbTtcbiA0MzE6XHRcbiA0MzI6XHRcdC8qIEFzc3VyZSBoZWFkcm9vbSBpcyBhdmFpbGFibGUgZm9yIHN0b3JpbmcgaW5mbyAqL1xuIDQzMzpcdFx0aGVhZHJvb20gPSB4ZHAtXHUwMDNlZGF0YSAtIHhkcC1cdTAwM2VkYXRhX2hhcmRfc3RhcnQ7XG4gNDM0Olx0XHRtZXRhc2l6ZSA9IHhkcC1cdTAwM2VkYXRhIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbiA0MzU6XHRcdG1ldGFzaXplID0gbWV0YXNpemUgXHUwMDNlIDAgPyBtZXRhc2l6ZSA6IDA7XG4gNDM2Olx0XHRpZiAodW5saWtlbHkoKGhlYWRyb29tIC0gbWV0YXNpemUpIFx1MDAzYyBzaXplb2YoKnhkcF9mcmFtZSkpKVxuIDQzNzpcdFx0XHRyZXR1cm4gLUVOT1NQQztcbiA0Mzg6XHRcbiA0Mzk6XHRcdC8qIENhdGNoIGlmIGRyaXZlciBkaWRuJiMzOTt0IHJlc2VydmUgdGFpbHJvb20gZm9yIHNrYl9zaGFyZWRfaW5mbyAqL1xuIDQ0MDpcdFx0aWYgKHVubGlrZWx5KHhkcC1cdTAwM2VkYXRhX2VuZCBcdTAwM2UgeGRwX2RhdGFfaGFyZF9lbmQoeGRwKSkpIHtcbiA0NDE6XHRcdFx0WERQX1dBUk4oXCYjMzQ7RHJpdmVyIEJVRzogbWlzc2luZyByZXNlcnZlZCB0YWlscm9vbVwmIzM0Oyk7XG4gNDQyOlx0XHRcdHJldHVybiAtRU5PU1BDO1xuIDQ0MzpcdFx0fVxuIDQ0NDpcdFxuIDQ0NTpcdFx0eGRwX2ZyYW1lLVx1MDAzZWRhdGEgPSB4ZHAtXHUwMDNlZGF0YTtcbiA0NDY6XHRcdHhkcF9mcmFtZS1cdTAwM2VsZW4gID0geGRwLVx1MDAzZWRhdGFfZW5kIC0geGRwLVx1MDAzZWRhdGE7XG4gNDQ3Olx0XHR4ZHBfZnJhbWUtXHUwMDNlaGVhZHJvb20gPSBoZWFkcm9vbSAtIHNpemVvZigqeGRwX2ZyYW1lKTtcbiA0NDg6XHRcdHhkcF9mcmFtZS1cdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xuIDQ0OTpcdFx0eGRwX2ZyYW1lLVx1MDAzZWZyYW1lX3N6ID0geGRwLVx1MDAzZWZyYW1lX3N6O1xuIDQ1MDpcdFx0LyogWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCBpcyB4ZHBfYnVmZiBvbmx5LCBkb24mIzM5O3QgY2FycnkgaXQgb3ZlciAqL1xuIDQ1MTpcdFx0eGRwX2ZyYW1lLVx1MDAzZWZsYWdzID0geGRwLVx1MDAzZWZsYWdzIFx1MDAyNiB+WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDtcbiA0NTI6XHRcbiA0NTM6XHRcdHJldHVybiAwO1xuIDQ1NDpcdH1cbiA0NTU6XHRcbiA0NTY6XHQvKiBDb252ZXJ0IHhkcF9idWZmIHRvIHhkcF9mcmFtZSAqL1xuIDQ1NzpcdHN0YXRpYyBpbmxpbmVcbiA0NTg6XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuIDQ1OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGJyaWRnZXMgdGhlIGdhcCBiZXR3ZWVuIHRoZSBYRFAgYnVmZmVyIGFuZCBhIG1vcmUgY29udmVudGlvbmFsIGZyYW1lIHJlcHJlc2VudGF0aW9uLiBXaGF0IGFyZSB0aGUga2V5IHRyYW5zZm9ybWF0aW9ucyBoYXBwZW5pbmc/IEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBjb25zaWRlcmF0aW9uczsgSSBrbm93IFhEUCBkZWFscyB3aXRoIHNoYXJlZCBtZW1vcnkgYW5kIGRpcmVjdCBwYWNrZXQgYWNjZXNzLCBzbyBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIGhhcyB0byBoYW5kbGUgYnVmZmVyIG93bmVyc2hpcCBjYXJlZnVsbHkuIElzIGl0IGNvcHlpbmcgZGF0YSwgY3JlYXRpbmcgdmlld3MsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIOKAkyB0aGUgWERQIGNvbnRleHQsIHRoZSBidWZmZXIgaXRzZWxmLCBhbmQgd2hhdGV2ZXIgZnJhbWUtbGV2ZWwgc3RydWN0dXJlIGlzIGJlaW5nIHJldHVybmVkIG9yIGNvbnN0cnVjdGVkLiBBcmUgd2UgZGVhbGluZyB3aXRoIGxpbmVhciBidWZmZXJzLCBvciBhcmUgdGhlcmUgcG90ZW50aWFsIGZyYWdtZW50ZWQgcGFja2V0cyB0byBjb25zaWRlcj8gQW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIGFsaWFzaW5nIG9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IGVmZmljaWVuY3kg4oCTIGFyZSB0aGVyZSBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMsIHBlcmhhcHMgdXNpbmcgaGFyZHdhcmUgb2ZmbG9hZCBvciB6ZXJvLWNvcHkgdGVjaG5pcXVlcz8gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZHAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDU4Olx0c3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiA0NTk6XHR7XG4gNDYwOlx0XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfZnJhbWU7XG4gNDYxOlx0XG4gNDYyOlx0XHRpZiAoeGRwLVx1MDAzZXJ4cS1cdTAwM2VtZW0udHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MKVxuIDQ2MzpcdFx0XHRyZXR1cm4geGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHhkcCk7XG4gNDY0Olx0XG4gNDY1Olx0XHQvKiBTdG9yZSBpbmZvIGluIHRvcCBvZiBwYWNrZXQgKi9cbiA0NjY6XHRcdHhkcF9mcmFtZSA9IHhkcC1cdTAwM2VkYXRhX2hhcmRfc3RhcnQ7XG4gNDY3Olx0XHRpZiAodW5saWtlbHkoeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoeGRwLCB4ZHBfZnJhbWUpIFx1MDAzYyAwKSlcbiA0Njg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNDY5Olx0XG4gNDcwOlx0XHQvKiByeHEgb25seSB2YWxpZCB1bnRpbCBuYXBpX3NjaGVkdWxlIGVuZHMsIGNvbnZlcnQgdG8geGRwX21lbV90eXBlICovXG4gNDcxOlx0XHR4ZHBfZnJhbWUtXHUwMDNlbWVtX3R5cGUgPSB4ZHAtXHUwMDNlcnhxLVx1MDAzZW1lbS50eXBlO1xuIDQ3MjpcdFxuIDQ3MzpcdFx0cmV0dXJuIHhkcF9mcmFtZTtcbiA0NzQ6XHR9XG4gNDc1Olx0XG4gNDc2Olx0dm9pZCBfX3hkcF9yZXR1cm4obmV0bWVtX3JlZiBuZXRtZW0sIGVudW0geGRwX21lbV90eXBlIG1lbV90eXBlLFxuIDQ3NzpcdFx0XHQgIGJvb2wgbmFwaV9kaXJlY3QsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKTtcbiA0Nzg6XHR2b2lkIHhkcF9yZXR1cm5fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZik7XG4gNDc5Olx0dm9pZCB4ZHBfcmV0dXJuX2ZyYW1lX3J4X25hcGkoc3RydWN0IHhkcF9mcmFtZSAqeGRwZik7XG4gNDgwOlx0dm9pZCB4ZHBfcmV0dXJuX2J1ZmYoc3RydWN0IHhkcF9idWZmICp4ZHApO1xuIDQ4MTpcdHZvaWQgeGRwX3JldHVybl9mcmFtZV9idWxrKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYsXG4gNDgyOlx0XHRcdFx0ICAgc3RydWN0IHhkcF9mcmFtZV9idWxrICpicSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODU2CgkJCQkJCQlvdXRwdXQ6IDIxNQoJCQkJCQkJdGhvdWdodHM6IDI3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYRFAgUGFnZSBQb29sIEZsYWcgQ2hhbmdlKioKCk9rYXksIHRoZSBwYXRoIGZvcndhcmQgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBoZXJlLiBXZSYjMzk7cmUgaW50cm9kdWNpbmcgYSBuZXcgaW50ZXJuYWwgZmxhZywgYFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0xgLCB0byB0aGUgYHhkcF9idWZmYCYjMzk7cyBmbGFncy4gVGhpcyB3aWxsIGxldCB1cyBzcGVjaWZpY2FsbHkgdHJhY2sgd2hlbiBub25saW5lYXIgc2ticyBoYXZlIGJlZW4gY29waWVkIGludG8gYSBgcGFnZV9wb29sYCBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIGB2ZXRoYCBhbmQgZ2VuZXJpYyBYRFAuIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyB3ZWxsLWRlZmluZWQ6IHdlJiMzOTtsbCBzZXQgdGhlIGZsYWcgd2hlbiB0aGUgY29weSBoYXBwZW5zLCBhbmQgc3RyaXAgb3IgcmUtZGVyaXZlIGl0IGR1cmluZyB0aGUgY29udmVyc2lvbnMgYmV0d2VlbiBgeGRwX2ZyYW1lYCBhbmQgYHhkcF9idWZmYC4KClRoZSBjcnVjaWFsIHBhcnQgaXMgaW4gYGJwZl94ZHBfc2hyaW5rX2RhdGFgLiBXZSYjMzk7bGwgdXNlIHRoZSBmbGFnIHRoZXJlIHRvIGVuc3VyZSB0aGF0IHdoZW4gd2Ugc2hyaW5rIGZyYWdtZW50cywgd2UmIzM5O3JlIHJldHVybmluZyB0aGVtIHRvIHRoZSBgcGFnZV9wb29sYCBjb3JyZWN0bHkgaW5zdGVhZCBvZiB1c2luZyBgcGFnZV9mcmFnX2ZyZWUoKWAuIEJQRiBzZWxmdGVzdHMgYXJlIGEgbXVzdCwgb2YgY291cnNlLgoKVGhlIHJpc2sgYW5hbHlzaXMgaXMgd2hhdCBtYXR0ZXJzIHRoZSBtb3N0LiBUaGVyZSYjMzk7cyBubyBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLCBubyBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRvIHVzZXJzcGFjZSwgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBidWZmZXJzLCBhbmQgbm8gbWFuaXB1bGF0aW9uIG9mIGxlbmd0aCBjaGVja3MgdGhhdCB3b3VsZCBhbGxvdyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJlIGdvaW5nIHRvIGZhbGwgaW50byB0aGUgd2VsbC10cm9kZGVuIHRlcnJpdG9yeSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggaXMgY292ZXJlZCBieSBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBjaGVja3MsIHNvIHRoZSBuZWVkIGZvciBLTVNBTiBpcyBtaW5pbWFsLgoKVGh1cywgYE5lZWRzS01TQU5gIGlzIHVuZXF1aXZvY2FsbHkgYGZhbHNlYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSByZWFzb25pbmcgb25lIGxhc3QgdGltZS4gVGltZSB0byBmaXJlIHVwIGBzZXQtcmVzdWx0c2AgYW5kIHByb3ZpZGUgYSBjbGVhciwgY29uY2lzZSBqdXN0aWZpY2F0aW9uIGZvciB0aGlzIGRlY2lzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHRoZSBpbnRlcm5hbCBmbGFnIGBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MYCB0byBgeGRwX2J1ZmZgIHRvIHRyYWNrIHdoZXRoZXIgbm9ubGluZWFyIHNrYiBmcmFnbWVudHMgd2VyZSBDT1cmIzM5O2QgaW50byBhIGBwYWdlX3Bvb2xgLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGFuIFhEUCBwcm9ncmFtIHNocmlua3MgdGhlIGJ1ZmZlciBhbmQgcmVsZWFzZXMgZnJhZ21lbnRzLCB0aGV5IGFyZSBwcm9wZXJseSBmcmVlZCBiYWNrIHRvIHRoZSBwYWdlIHBvb2wgcmF0aGVyIHRoYW4gdGhyb3VnaCBgcGFnZV9mcmFnX2ZyZWUoKWAuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBhZ2UgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBhbGxvY2F0b3IgdHlwZSBtaXNtYXRjaCBidWcgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIHBhZ2UgcG9vbCBsZWFrcywgYmFkIHBhZ2Ugc3RhdGUsIG9yIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVzZXItc3BhY2UgY29weSBwYXRocy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgaW52YWxpZCBtZW1vcnkgZnJlZSkgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBwYWdlL3JlZmNvdW50IGRlYnVnZ2Vycywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHRoZSBpbnRlcm5hbCBmbGFnIGBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MYCB0byBgeGRwX2J1ZmZgIHRvIHRyYWNrIHdoZXRoZXIgbm9ubGluZWFyIHNrYiBmcmFnbWVudHMgd2VyZSBDT1cmIzM5O2QgaW50byBhIGBwYWdlX3Bvb2xgLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGFuIFhEUCBwcm9ncmFtIHNocmlua3MgdGhlIGJ1ZmZlciBhbmQgcmVsZWFzZXMgZnJhZ21lbnRzLCB0aGV5IGFyZSBwcm9wZXJseSBmcmVlZCBiYWNrIHRvIHRoZSBwYWdlIHBvb2wgcmF0aGVyIHRoYW4gdGhyb3VnaCBgcGFnZV9mcmFnX2ZyZWUoKWAuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBhZ2UgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBhbGxvY2F0b3IgdHlwZSBtaXNtYXRjaCBidWcgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIHBhZ2UgcG9vbCBsZWFrcywgYmFkIHBhZ2Ugc3RhdGUsIG9yIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVzZXItc3BhY2UgY29weSBwYXRocy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgaW52YWxpZCBtZW1vcnkgZnJlZSkgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBwYWdlL3JlZmNvdW50IGRlYnVnZ2Vycywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ1OjM4LjQ3MTY1ODcwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzA0NTI4MzE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJWRVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gICAgXCJicGZfeGRwX2FkanVzdF90YWlsXCIsXG4gICAgXCJicGZfeGRwX3B1bGxfZGF0YVwiLFxuICAgIFwiYnBmX3hkcF9zaHJpbmtfZGF0YVwiLFxuICAgIFwidmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZlwiLFxuICAgIFwidmV0aF94ZHBfcmN2X3NrYlwiLFxuICAgIFwidmV0aF94ZHBfcmN2X29uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB0aGUgaW50ZXJuYWwgZmxhZyBgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTGAgdG8gYHhkcF9idWZmYCB0byB0cmFjayB3aGV0aGVyIG5vbmxpbmVhciBza2IgZnJhZ21lbnRzIHdlcmUgQ09XJ2QgaW50byBhIGBwYWdlX3Bvb2xgLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGFuIFhEUCBwcm9ncmFtIHNocmlua3MgdGhlIGJ1ZmZlciBhbmQgcmVsZWFzZXMgZnJhZ21lbnRzLCB0aGV5IGFyZSBwcm9wZXJseSBmcmVlZCBiYWNrIHRvIHRoZSBwYWdlIHBvb2wgcmF0aGVyIHRoYW4gdGhyb3VnaCBgcGFnZV9mcmFnX2ZyZWUoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcGFnZSBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIGFsbG9jYXRvciB0eXBlIG1pc21hdGNoIGJ1ZyAod2hpY2ggd291bGQgbWFuaWZlc3QgYXMgcGFnZSBwb29sIGxlYWtzLCBiYWQgcGFnZSBzdGF0ZSwgb3IgcGFnZSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgcGFkZGluZyBsZWFrcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBmcmVlKSBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UvcmVmY291bnQgZGVidWdnZXJzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBYRFAgZnJhZ21lbnQgaGFuZGxpbmcgbG9naWMgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgZ2VuZXJpYyBYRFAsIGFuZCB0aGUgdmV0aCBkcml2ZXIgdG8gcHJvcGVybHkgdHJhY2sgcGFnZV9wb29sIGJhY2tlZCBmcmFnbWVudHMgd2hlbiBzaHJpbmtpbmcgWERQIGJ1ZmZlcnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyAodmV0aCwgdHVuL3RhcCkgYW5kIEJQRi9YRFAgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ1OjM4LjQ3MTY2NzA3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MjM3MDEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA0NjQyZjIxZjE4MDE2MGU1MzQ2Mzk2YWU2OGQ2MGMzMjkzZTgzMDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTQ6NDU6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jXFxuaW5kZXggNmVkM2VlODExNTNmYi4uYTNmZGYxOTU5Yjc2YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC92ZXRoLmNcXG4rKysgYi9kcml2ZXJzL25ldC92ZXRoLmNcXG5AQCAtNzc1LDYgKzc3NSwxMiBAQCBzdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxcbiBcXHRpZiAoc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncykge1xcbiBcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZXhkcF9mcmFnc19zaXplID0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4gXFx0XFx0eGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQSBub25saW5lYXIgc2tiIHdhcyBjb3cnZCBpbnRvIHJxLVxcdTAwM2VwYWdlX3Bvb2wgYWJvdmUsIHNvIHRoZVxcbitcXHRcXHQgKiBmcmFncyBtdXN0IGJlIGZyZWVkIHRvIHRoYXQgcG9vbCwgbm90IHZpYSB0aGUgcnhxJ3NcXG4rXFx0XFx0ICogTUVNX1RZUEVfUEFHRV9TSEFSRUQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR4ZHBfYnVmZl9jbGVhcl9mcmFnc19mbGFnKHhkcCk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGRwLmggYi9pbmNsdWRlL25ldC94ZHAuaFxcbmluZGV4IGFhNzQyZjQxM2MzNTguLjhmZDQxMzllOWNiZDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQveGRwLmhcXG4rKysgYi9pbmNsdWRlL25ldC94ZHAuaFxcbkBAIC04MSw2ICs4MSwxNCBAQCBlbnVtIHhkcF9idWZmX2ZsYWdzIHtcXG4gXFx0ICogWERQIHByb2dyYW0gaXMgbm90IGF0dGFjaGVkLlxcbiBcXHQgKi9cXG4gXFx0WERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEVcXHQ9IEJJVCgyKSxcXG4rXFx0LypcXG4rXFx0ICogZnJhZ3MgYXJlIHBhZ2VfcG9vbCBtZW1vcnkgZXZlbiB0aG91Z2ggcnhxLVxcdTAwM2VtZW0udHlwZSBpcyBub3Q6IGFcXG4rXFx0ICogc2tiLWJhY2tlZCBYRFAgYnVmZiAoZ2VuZXJpYyBYRFAsIHZldGgpIGlzIGNvdydkIGludG8gYSBwYWdlX3Bvb2wuXFxuK1xcdCAqIHhkcF9idWZmIG9ubHk6IGFuIHhkcF9mcmFtZSBkZXNjcmliZXMgaXRzIG1lbW9yeSB3aXRoIDo6bWVtX3R5cGUsIHNvXFxuK1xcdCAqIHRoaXMgaXMgc3RyaXBwZWQgaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSBhbmQgcmUtZGVyaXZlZCBmcm9tXFxuK1xcdCAqIDo6bWVtX3R5cGUgaW4geGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZigpLlxcbitcXHQgKi9cXG4rXFx0WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTFxcdD0gQklUKDMpLFxcbiB9O1xcbiBcXG4gc3RydWN0IHhkcF9idWZmIHtcXG5AQCAtMTMxLDYgKzEzOSwxNiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgeGRwX2J1ZmZfc2V0X2ZyYWdfdW5yZWFkYWJsZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4gXFx0eGRwLVxcdTAwM2VmbGFncyB8PSBYRFBfRkxBR1NfRlJBR1NfVU5SRUFEQUJMRTtcXG4gfVxcbiBcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHhkcF9idWZmX3NldF9mcmFnX3BwKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbit7XFxuK1xcdHhkcC1cXHUwMDNlZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHhkcF9idWZmX2lzX2ZyYWdfcHAoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuK3tcXG4rXFx0cmV0dXJuICEhKHhkcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MKTtcXG4rfVxcbitcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgeGRwX2J1ZmZfZ2V0X3NrYl9mbGFncyhjb25zdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4ge1xcbiBcXHRyZXR1cm4geGRwLVxcdTAwM2VmbGFncztcXG5AQCAtMzk0LDYgKzQxMiwxNSBAQCB2b2lkIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUsXFxuIFxcdHhkcC1cXHUwMDNlZGF0YV9tZXRhID0gZnJhbWUtXFx1MDAzZWRhdGEgLSBmcmFtZS1cXHUwMDNlbWV0YXNpemU7XFxuIFxcdHhkcC1cXHUwMDNlZnJhbWVfc3ogPSBmcmFtZS1cXHUwMDNlZnJhbWVfc3o7XFxuIFxcdHhkcC1cXHUwMDNlZmxhZ3MgPSBmcmFtZS1cXHUwMDNlZmxhZ3M7XFxuK1xcdC8qXFxuK1xcdCAqIGZyYW1lLVxcdTAwM2VmbGFncyBuZXZlciBjYXJyaWVzIFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wgKGl0IGlzIHN0cmlwcGVkXFxuK1xcdCAqIGluIHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKCkpOyByZS1kZXJpdmUgaXQgZnJvbSB0aGUgZnJhbWUncyBvd25cXG4rXFx0ICogbWVtb3J5IHR5cGUuIHZldGggYW5kIGRldm1hcCByZWJ1aWxkIGEgYnVmZiBoZXJlIGFuZCBydW4gYSBwcm9ncmFtXFxuK1xcdCAqIHdob3NlIHJ4cSBzYXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyB3aXRob3V0IHRoaXMgYSBzaHJpbmsgd291bGRcXG4rXFx0ICogZnJlZSBhIHBhZ2VfcG9vbCBmcmFnIHRocm91Z2ggcGFnZV9mcmFnX2ZyZWUoKS5cXG4rXFx0ICovXFxuK1xcdGlmIChmcmFtZS1cXHUwMDNlbWVtX3R5cGUgPT0gTUVNX1RZUEVfUEFHRV9QT09MKVxcbitcXHRcXHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuQEAgLTQyMCw3ICs0NDcsOCBAQCBpbnQgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuIFxcdHhkcF9mcmFtZS1cXHUwMDNlaGVhZHJvb20gPSBoZWFkcm9vbSAtIHNpemVvZigqeGRwX2ZyYW1lKTtcXG4gXFx0eGRwX2ZyYW1lLVxcdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xcbiBcXHR4ZHBfZnJhbWUtXFx1MDAzZWZyYW1lX3N6ID0geGRwLVxcdTAwM2VmcmFtZV9zejtcXG4tXFx0eGRwX2ZyYW1lLVxcdTAwM2VmbGFncyA9IHhkcC1cXHUwMDNlZmxhZ3M7XFxuK1xcdC8qIFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wgaXMgeGRwX2J1ZmYgb25seSwgZG9uJ3QgY2FycnkgaXQgb3ZlciAqL1xcbitcXHR4ZHBfZnJhbWUtXFx1MDAzZWZsYWdzID0geGRwLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5YRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDI5MGUwZjA5OWU2YmYuLjk0MjY4ZjRkM2M1ZjcgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC01NTMyLDYgKzU1MzIsMTIgQEAgdTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4gXFx0aWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkge1xcbiBcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZXhkcF9mcmFnc19zaXplID0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4gXFx0XFx0eGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQSBub25saW5lYXIgc2tiIHdhcyBjb3cnZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYnlcXG4rXFx0XFx0ICogc2tiX2Nvd19kYXRhX2Zvcl94ZHAoKSBiZWZvcmUgd2UgZ290IGhlcmUsIHNvIHRoZSBmcmFncyBtdXN0XFxuK1xcdFxcdCAqIGJlIGZyZWVkIHRvIHRoYXQgcG9vbCwgbm90IHZpYSB0aGUgcnhxJ3MgTUVNX1RZUEVfUEFHRV9TSEFSRUQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR4ZHBfYnVmZl9jbGVhcl9mcmFnc19mbGFnKHhkcCk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLmQzNGJhNTZkNzlkOGYgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC00Mzc4LDYgKzQzNzgsMTMgQEAgc3RhdGljIGJvb2wgYnBmX3hkcF9zaHJpbmtfZGF0YShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc2tiX2ZyYWdfdCAqZnJhZyxcXG4gXFx0aWYgKG1lbV90eXBlID09IE1FTV9UWVBFX1hTS19CVUZGX1BPT0wpIHtcXG4gXFx0XFx0bmV0bWVtID0gMDtcXG4gXFx0XFx0emNfZnJhZyA9IGJwZl94ZHBfc2hyaW5rX2RhdGFfemMoeGRwLCBzaHJpbmssIHRhaWwsIHJlbGVhc2UpO1xcbitcXHR9IGVsc2UgaWYgKHhkcF9idWZmX2lzX2ZyYWdfcHAoeGRwKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBTa2ItYmFja2VkIFhEUCAoZ2VuZXJpYyBYRFAsIHZldGgpIGNvdydzIHRoZSBmcmFncyBpbnRvIGFcXG4rXFx0XFx0ICogcGFnZV9wb29sIHdoaWxlIHRoZSByeHEgc3RheXMgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIHNvIGZyZWVcXG4rXFx0XFx0ICogdGhlIGZyYWcgdG8gdGhlIHBvb2wsIG5vdCB2aWEgcGFnZV9mcmFnX2ZyZWUoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG1lbV90eXBlID0gTUVNX1RZUEVfUEFHRV9QT09MO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAocmVsZWFzZSkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfc2hyaW5rX2ZyYWdzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfc2hyaW5rX2ZyYWdzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmVlOGY5MDM0YTI2ODRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXFxuQEAgLTAsMCArMSwyODggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldHdvcmtfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdHVuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3Vpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2lmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhcnBhL2luZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcInhkcF9zaHJpbmtfZnJhZ3Muc2tlbC5oXFxcIlxcbitcXG4rLypcXG4rICogQSBnZW5lcmljLVhEUCBwcm9ncmFtIHRoYXQgc2hyaW5rcyBpbnRvIHRoZSBmcmFncyBmcmVlcyBhIHBhZ2VfcG9vbCBmcmFnLlxcbisgKiBza2ItYmFja2VkIFhEUCBmaXJzdCBjb3cncyB0aGUgbm9ubGluZWFyIHNrYiBpbnRvIHBhZ2VfcG9vbCBtZW1vcnlcXG4rICogKHNrYl9jb3dfZGF0YV9mb3JfeGRwKCkgZm9yIGdlbmVyaWMgWERQLCBza2JfcHBfY293X2RhdGEoKSBmb3IgdmV0aCksIGJ1dFxcbisgKiB0aGUgc2hhcmVkIHJ4cSBpcyByZWdpc3RlcmVkIGFzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBhIGJ1Z2d5IGtlcm5lbFxcbisgKiBmcmVlcyB0aGUgZnJhZyB3aXRoIHBhZ2VfZnJhZ19mcmVlKCkgLVxcdTAwM2UgXFxcIkJhZCBwYWdlIHN0YXRlIC4uLiBwYWdlX3Bvb2wgbGVha1xcXCIuXFxuKyAqL1xcbitcXG4rI2RlZmluZSBUQVBfTkFNRVxcdFxcXCJ4ZHBfc2hyaW5rMFxcXCJcXG4rI2RlZmluZSBUQVBfTkVUTlNcXHRcXFwieGRwX3Nocmlua190YXBcXFwiXFxuK1xcbisjZGVmaW5lIE5TX05BTUVfTUFYX0xFTlxcdDMyXFxuKyNkZWZpbmUgVkVUSF9MT0NBTFxcdFxcXCJ4ZHBfc2hyaW5rQVxcXCJcXG4rI2RlZmluZSBWRVRIX1BFRVJcXHRcXFwieGRwX3Nocmlua0JcXFwiXFxuKyNkZWZpbmUgVkVUSF9MT0NBTF9JUFxcdFxcXCIxMC45LjkuMVxcXCJcXG4rI2RlZmluZSBWRVRIX1BFRVJfSVBcXHRcXFwiMTAuOS45LjJcXFwiXFxuKyNkZWZpbmUgVkVUSF9MT0NBTF9NQUNcXHRcXFwiMDI6MDA6MDA6MDA6MDA6MDFcXFwiXFxuK1xcbisvKlxcbisgKiBza2JfcHBfY293X2RhdGEoKSBrZWVwcyB1cCB0byBvbmUgcGFnZSBpbiB0aGUgbGluZWFyIHBhcnQsIHNvIHRoZSBwYWNrZXRcXG4rICogc2l6ZXMgYmVsb3cgb25seSBsZWF2ZSBhIGZyYWcgKHNtYWxsZXIgdGhhbiB0aGUgMzAwMC1ieXRlIHNocmluaywgc28gaXQgaXNcXG4rICogcmVsZWFzZWQgYXMgYSB3aG9sZSkgb24gNEsgcGFnZXMuIFNraXAgZWxzZXdoZXJlIHJhdGhlciB0aGFuIHJ1biBhIHRlc3RcXG4rICogdGhhdCBjYW5ub3QgdGVsbCBhIGZpeGVkIGtlcm5lbCBmcm9tIGEgYnVnZ3kgb25lLlxcbisgKi9cXG4rI2RlZmluZSBQQUdFX1NJWkVfNEtcXHQ0MDk2XFxuK1xcbisvKlxcbisgKiBHZW5lcm91cywgc28gYSBsb2FkZWQgQ0kgZG9lcyBub3QgZmFpbCB0aGUgYXNzZXJ0IHByZW1hdHVyZWx5OyBub3JtYWxseVxcbisgKiB0aGUgZmlyc3QgY2hlY2sgYWxyZWFkeSBzdWNjZWVkcy5cXG4rICovXFxuKyNkZWZpbmUgV0FJVF9JVEVSU1xcdDEwMDAwXFxuKyNkZWZpbmUgV0FJVF9VU1xcdFxcdDEwMDBcXG4rXFxuK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3Byb2coc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgV0FJVF9JVEVSUyBcXHUwMDI2XFx1MDAyNiAhc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzaHJpbmtfcmFuOyBpKyspXFxuK1xcdFxcdHVzbGVlcChXQUlUX1VTKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoY29uc3QgY2hhciAqaWZuYW1lKVxcbit7XFxuK1xcdHN0cnVjdCBpZnJlcSBpZnIgPSB7XFxuK1xcdFxcdC5pZnJfZmxhZ3MgPSBJRkZfVEFQIHwgSUZGX05PX1BJIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUyxcXG4rXFx0fTtcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcbitcXHRzdHJzY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTtcXG4rXFxuK1xcdGZkID0gb3BlbihcXFwiL2Rldi9uZXQvdHVuXFxcIiwgT19SRFdSKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdGVyciA9IGlvY3RsKGZkLCBUVU5TRVRJRkYsIFxcdTAwMjZpZnIpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGVyciA9IC1lcnJubztcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFNpbWlsYXIgdG8gZmxvd19kaXNzZWN0b3IuYzogd3JpdGV2KCkgYW4gSUZGX05BUElfRlJBR1MgdGFwIHRvIGJ1aWxkIGFcXG4rICogbm9ubGluZWFyIHNrYiB0aGF0IHR1biBydW5zIHRocm91Z2ggZG9feGRwX2dlbmVyaWMoKS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHRlc3RfdHVuKHN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsKVxcbit7XFxuK1xcdF9fdTggaGVhZFs3NF0sIGZyYWcxWzIwNDhdLCBmcmFnMlsyMDQ4XTtcXG4rXFx0c3RydWN0IGV0aGhkciAqZXRoID0gKHZvaWQgKiloZWFkO1xcbitcXHRpbnQgdGFwX2ZkID0gLTEsIGlmaW5kZXgsIGVycjtcXG4rXFx0c3RydWN0IG5ldG5zX29iaiAqbnMgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgaW92ZWMgaW92WzNdO1xcbitcXHRzc2l6ZV90IG47XFxuK1xcbitcXHRpZiAoZ2V0cGFnZXNpemUoKSAhPSBQQUdFX1NJWkVfNEspIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdG5zID0gbmV0bnNfbmV3KFRBUF9ORVROUywgdHJ1ZSk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihucywgXFxcIm5ldG5zX25ld1xcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0YXBfZmQgPSBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoVEFQX05BTUUpO1xcbitcXHRpZiAoIUFTU0VSVF9HRSh0YXBfZmQsIDAsIFxcXCJjcmVhdGVfdGFwXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0U1lTKG91dCwgXFxcImlwIGxpbmsgc2V0IGRldiBcXFwiIFRBUF9OQU1FIFxcXCIgdXBcXFwiKTtcXG4rXFxuK1xcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChUQVBfTkFNRSk7XFxuK1xcdGlmICghQVNTRVJUX0dUKGlmaW5kZXgsIDAsIFxcXCJpZl9uYW1ldG9pbmRleFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlc2hyaW5rX3JhbiA9IDA7XFxuK1xcbitcXHRlcnIgPSBicGZfeGRwX2F0dGFjaChpZmluZGV4LCBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MueGRwX3NocmluayksXFxuK1xcdFxcdFxcdCAgICAgMCwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJwZl94ZHBfYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bWVtc2V0KGhlYWQsIDAsIHNpemVvZihoZWFkKSk7XFxuK1xcdG1lbXNldChmcmFnMSwgMHg0MSwgc2l6ZW9mKGZyYWcxKSk7XFxuK1xcdG1lbXNldChmcmFnMiwgMHg0Miwgc2l6ZW9mKGZyYWcyKSk7XFxuK1xcdGV0aC1cXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTtcXG4rXFxuK1xcdGlvdlswXS5pb3ZfYmFzZSA9IGhlYWQ7ICBpb3ZbMF0uaW92X2xlbiA9IHNpemVvZihoZWFkKTtcXG4rXFx0aW92WzFdLmlvdl9iYXNlID0gZnJhZzE7IGlvdlsxXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcxKTtcXG4rXFx0aW92WzJdLmlvdl9iYXNlID0gZnJhZzI7IGlvdlsyXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcyKTtcXG4rXFxuK1xcdG4gPSB3cml0ZXYodGFwX2ZkLCBpb3YsIEFSUkFZX1NJWkUoaW92KSk7XFxuK1xcdEFTU0VSVF9FUShuLCBzaXplb2YoaGVhZCkgKyBzaXplb2YoZnJhZzEpICsgc2l6ZW9mKGZyYWcyKSwgXFxcIndyaXRldlxcXCIpO1xcbitcXG4rXFx0d2FpdF9mb3JfcHJvZyhza2VsKTtcXG4rXFx0LyogYSBidWdneSBrZXJuZWwgb25seSBzcGxhdHMgXFxcInBhZ2VfcG9vbCBsZWFrXFxcIiwgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovXFxuK1xcdEFTU0VSVF9HVChza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXNocmlua19yYW4sIDAsIFxcXCJ4ZHBfcHJvZ19yYW5cXFwiKTtcXG4rXFxuK1xcdGJwZl94ZHBfZGV0YWNoKGlmaW5kZXgsIDAsIE5VTEwpO1xcbitvdXQ6XFxuK1xcdGlmICh0YXBfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UodGFwX2ZkKTtcXG4rXFx0bmV0bnNfZnJlZShucyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEJvdGggdmV0aCBlbmRzIGxpdmUgaW4gdGhlaXIgb3duIG5hbWVzcGFjZSwgc28gdGhlIHRyYWZmaWMgcmVhbGx5IGNyb3NzZXNcXG4rICogdGhlIHBhaXIgYW5kIG5vdGhpbmcgaXMgY3JlYXRlZCBpbiB0aGUgY2FsbGVyJ3MgbmFtZXNwYWNlLlxcbisgKi9cXG4rc3RhdGljIGludCB2ZXRoX3NldHVwKGNoYXIgKm5zMCwgY2hhciAqbnMxKVxcbit7XFxuK1xcdGlmICghQVNTRVJUX09LKGFwcGVuZF90aWQobnMwLCBOU19OQU1FX01BWF9MRU4pLCBcXFwiYXBwZW5kX3RpZCBuczBcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhhcHBlbmRfdGlkKG5zMSwgTlNfTkFNRV9NQVhfTEVOKSwgXFxcImFwcGVuZF90aWQgbnMxXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgbnMwKTtcXG4rXFx0U1lTKGZhaWxfbnMwLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgbnMxKTtcXG4rXFx0U1lTKGZhaWxfbnMxLCBcXFwiaXAgLW4gJXMgbGluayBhZGQgJXMgbXR1IDgwMDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlcyBtdHUgODAwMFxcXCIsXFxuK1xcdCAgICBuczAsIFZFVEhfTE9DQUwsIFZFVEhfUEVFUik7XFxuK1xcdFNZUyhmYWlsX25zMSwgXFxcImlwIC1uICVzIGxpbmsgc2V0ICVzIG5ldG5zICVzXFxcIiwgbnMwLCBWRVRIX1BFRVIsIG5zMSk7XFxuK1xcdFNZUyhmYWlsX25zMSwgXFxcImlwIC1uICVzIGxpbmsgc2V0ICVzIGFkZHJlc3MgJXNcXFwiLCBuczAsIFZFVEhfTE9DQUwsXFxuK1xcdCAgICBWRVRIX0xPQ0FMX01BQyk7XFxuK1xcdFNZUyhmYWlsX25zMSwgXFxcImlwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlc1xcXCIsIG5zMCwgVkVUSF9MT0NBTF9JUCxcXG4rXFx0ICAgIFZFVEhfTE9DQUwpO1xcbitcXHRTWVMoZmFpbF9uczEsIFxcXCJpcCAtbiAlcyBsaW5rIHNldCAlcyB1cFxcXCIsIG5zMCwgVkVUSF9MT0NBTCk7XFxuK1xcdFNZUyhmYWlsX25zMSwgXFxcImlwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlc1xcXCIsIG5zMSwgVkVUSF9QRUVSX0lQLFxcbitcXHQgICAgVkVUSF9QRUVSKTtcXG4rXFx0U1lTKGZhaWxfbnMxLCBcXFwiaXAgLW4gJXMgbGluayBzZXQgJXMgdXBcXFwiLCBuczEsIFZFVEhfUEVFUik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2ZhaWxfbnMxOlxcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgJXNcXFwiLCBuczEpO1xcbitmYWlsX25zMDpcXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzXFxcIiwgbnMwKTtcXG4rZmFpbDpcXG4rXFx0cmV0dXJuIC0xO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB2ZXRoX2NsZWFudXAoY29uc3QgY2hhciAqbnMwLCBjb25zdCBjaGFyICpuczEpXFxuK3tcXG4rXFx0LyogRHJvcHBpbmcgdGhlIG5hbWVzcGFjZXMgdGFrZXMgdGhlIHZldGggcGFpciBhbmQgaXRzIFhEUCBwcm9ncmFtcy4gKi9cXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzXFxcIiwgbnMxKTtcXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzXFxcIiwgbnMwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZXRoX2F0dGFjaChjb25zdCBjaGFyICpucywgY29uc3QgY2hhciAqZGV2LCBpbnQgcHJvZ19mZClcXG4re1xcbitcXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbjtcXG4rXFx0aW50IGlmaW5kZXgsIGVycjtcXG4rXFxuK1xcdG5zdG9rZW4gPSBvcGVuX25ldG5zKG5zKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuX25ldG5zXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChkZXYpO1xcbitcXHRpZiAoIUFTU0VSVF9HVChpZmluZGV4LCAwLCBcXFwiaWZfbmFtZXRvaW5kZXhcXFwiKSkge1xcbitcXHRcXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBicGZfeGRwX2F0dGFjaChpZmluZGV4LCBwcm9nX2ZkLCAwLCBOVUxMKTtcXG4rXFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuK1xcbitcXHRyZXR1cm4gQVNTRVJUX09LKGVyciwgXFxcImJwZl94ZHBfYXR0YWNoXFxcIikgPyAwIDogLTE7XFxuK31cXG4rXFxuKy8qIEEgbGFyZ2UgcGluZyBidWlsZHMgYSBub25saW5lYXIgc2tiIHRoYXQgdmV0aCBjb3cncyBpbnRvIGl0cyBwYWdlX3Bvb2wuICovXFxuK3N0YXRpYyB2b2lkIHRlc3RfdmV0aChzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbClcXG4re1xcbitcXHRjaGFyIG5zMFtOU19OQU1FX01BWF9MRU5dID0gXFxcInhkcF9zaHJpbmtfbnMwLVxcXCI7XFxuK1xcdGNoYXIgbnMxW05TX05BTUVfTUFYX0xFTl0gPSBcXFwieGRwX3Nocmlua19uczEtXFxcIjtcXG4rXFxuK1xcdGlmIChnZXRwYWdlc2l6ZSgpICE9IFBBR0VfU0laRV80Sykge1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZldGhfc2V0dXAobnMwLCBuczEpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXNocmlua19yYW4gPSAwO1xcbitcXG4rXFx0aWYgKHZldGhfYXR0YWNoKG5zMCwgVkVUSF9MT0NBTCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLnhkcF9zaHJpbmspKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXNcXFwiLFxcbitcXHRcXHQgICBuczEsIFZFVEhfTE9DQUxfSVApO1xcbitcXG4rXFx0d2FpdF9mb3JfcHJvZyhza2VsKTtcXG4rXFx0LyogYSBidWdneSBrZXJuZWwgb25seSBzcGxhdHMgXFxcInBhZ2VfcG9vbCBsZWFrXFxcIiwgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovXFxuK1xcdEFTU0VSVF9HVChza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXNocmlua19yYW4sIDAsIFxcXCJ4ZHBfcHJvZ19yYW5cXFwiKTtcXG4rb3V0OlxcbitcXHR2ZXRoX2NsZWFudXAobnMwLCBuczEpO1xcbit9XFxuK1xcbisvKlxcbisgKiBMT0NBTCBjb3cncyB0aGUgaW5jb21pbmcgc2tiIGFuZCByZXR1cm5zIFhEUF9UWCwgc28gdGhlIGJ1ZmYgaXMgdHVybmVkIGludG9cXG4rICogYW4geGRwX2ZyYW1lIGFuZCBib3VuY2VkIHRvIFBFRVIsIHdoaWNoIHNocmlua3MgYSBmcmFnLiBBIHBhZ2VfcG9vbCB0YWdcXG4rICogcmVjb3JkZWQgb24gdGhlIGJ1ZmYgbXVzdCBub3QgbGVhayBpbnRvIHRoZSBmcmFtZSwgb3IgUEVFUiBmcmVlcyBhIHBsYWluXFxuKyAqIHBhZ2UgKHdob3NlIHBwIHdhcyBhbHJlYWR5IGNsZWFyZWQgb24gdGhlIFhEUF9UWCBzaWRlKSBhcyBwYWdlX3Bvb2wgbWVtb3J5LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdF92ZXRoX3R4KHN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsKVxcbit7XFxuK1xcdGNoYXIgbnMwW05TX05BTUVfTUFYX0xFTl0gPSBcXFwieGRwX3Nocmlua190eDAtXFxcIjtcXG4rXFx0Y2hhciBuczFbTlNfTkFNRV9NQVhfTEVOXSA9IFxcXCJ4ZHBfc2hyaW5rX3R4MS1cXFwiO1xcbitcXG4rXFx0aWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodmV0aF9zZXR1cChuczAsIG5zMSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIExPQ0FMIGJvdW5jZXMgZXZlcnl0aGluZyAoaW5jbC4gQVJQKSB3aXRoIFhEUF9UWCwgc28gcGluIGEgc3RhdGljXFxuK1xcdCAqIG5laWdoYm91ciB0byBsZXQgdGhlIHBpbmcncyBwYXlsb2FkIGFjdHVhbGx5IHJlYWNoIGl0LlxcbitcXHQgKi9cXG4rXFx0U1lTKG91dCwgXFxcImlwIC1uICVzIG5laWdoIGFkZCAlcyBsbGFkZHIgJXMgZGV2ICVzIG51ZCBwZXJtYW5lbnRcXFwiLFxcbitcXHQgICAgbnMxLCBWRVRIX0xPQ0FMX0lQLCBWRVRIX0xPQ0FMX01BQywgVkVUSF9QRUVSKTtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlc2hyaW5rX3JhbiA9IDA7XFxuK1xcbitcXHRpZiAodmV0aF9hdHRhY2gobnMwLCBWRVRIX0xPQ0FMLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MueGRwX3R4KSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAodmV0aF9hdHRhY2gobnMxLCBWRVRIX1BFRVIsIGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy54ZHBfc2hyaW5rKSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZXhlYyAlcyBwaW5nIC1xIC1zIDUwMDAgLWMgMyAtVyAxICVzXFxcIixcXG4rXFx0XFx0ICAgbnMxLCBWRVRIX0xPQ0FMX0lQKTtcXG4rXFxuK1xcdHdhaXRfZm9yX3Byb2coc2tlbCk7XFxuK1xcdC8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzIFxcXCJwYWdlX3Bvb2wgbGVha1xcXCIsIGl0IGRvZXMgbm90IGZhaWwgaGVyZSAqL1xcbitcXHRBU1NFUlRfR1Qoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzaHJpbmtfcmFuLCAwLCBcXFwieGRwX3Byb2dfcmFuXFxcIik7XFxuK291dDpcXG4rXFx0dmV0aF9jbGVhbnVwKG5zMCwgbnMxKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3hkcF9zaHJpbmtfZnJhZ3Modm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbDtcXG4rXFxuK1xcdHNrZWwgPSB4ZHBfc2hyaW5rX2ZyYWdzX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInR1blxcXCIpKVxcbitcXHRcXHR0ZXN0X3R1bihza2VsKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInZldGhcXFwiKSlcXG4rXFx0XFx0dGVzdF92ZXRoKHNrZWwpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidmV0aF90eFxcXCIpKVxcbitcXHRcXHR0ZXN0X3ZldGhfdHgoc2tlbCk7XFxuK1xcbitcXHR4ZHBfc2hyaW5rX2ZyYWdzX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3Nocmlua19mcmFncy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZDg5NWFiNjk5MzAzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmNcXG5AQCAtMCwwICsxLDM0IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuK2ludCBzaHJpbmtfcmFuO1xcbitcXG4rU0VDKFxcXCJ4ZHAuZnJhZ3NcXFwiKVxcbitpbnQgeGRwX3NocmluayhzdHJ1Y3QgeGRwX21kICpjdHgpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogUnVucyBvbiBib3RoIHNrYi1iYWNrZWQgWERQIHBhdGhzIChnZW5lcmljIFhEUCB2aWEgdHVuLCBhbmQgdmV0aCk6XFxuK1xcdCAqIHRoZSBub25saW5lYXIgc2tiIGlzIGNvdydkIGludG8gcGFnZV9wb29sIG1lbW9yeSBiZWZvcmUgd2UgcnVuLCBzb1xcbitcXHQgKiBzaHJpbmtpbmcgdGhlIHRhaWwgcmVsZWFzZXMgYSB3aG9sZSBmcmFnIHRoYXQgaGFzIHRvIGdvIGJhY2sgdG8gdGhhdFxcbitcXHQgKiBwb29sLiBUaGUgY291bnRlciBvbmx5IHRlbGxzIHVzIHRoZSBwcm9ncmFtIHJhbiBhbmQgdGhlIGhlbHBlclxcbitcXHQgKiBzdWNjZWVkZWQgLS0gYSBsaW5lYXIgYnVmZiByZXR1cm5zIDAgYXMgd2VsbCAtLSBpdCBkb2VzIG5vdCBwcm92ZSBhXFxuK1xcdCAqIGZyYWcgd2FzIHJlbGVhc2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKGJwZl94ZHBfYWRqdXN0X3RhaWwoY3R4LCAtMzAwMCkgPT0gMClcXG4rXFx0XFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNnNocmlua19yYW4sIDEpO1xcbitcXHRyZXR1cm4gWERQX1BBU1M7XFxuK31cXG4rXFxuK1NFQyhcXFwieGRwLmZyYWdzXFxcIilcXG4raW50IHhkcF90eChzdHJ1Y3QgeGRwX21kICpjdHgpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogQm91bmNlIHRoZSBmcmFtZSBiYWNrLiBPbiB2ZXRoIHRoaXMgdHVybnMgdGhlIGJ1ZmYgaW50byBhblxcbitcXHQgKiB4ZHBfZnJhbWUsIHdoaWNoIGlzIHdoZXJlIGEgYnVmZi1zY29wZWQgcGFnZV9wb29sIHRhZyBtdXN0IG5vdCBsZWFrXFxuK1xcdCAqIGludG8gdGhlIGZyYW1lIGhhbmRlZCB0byB0aGUgcGVlci5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBYRFBfVFg7XFxuK31cXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NTo0MC4wNDUwMDMwMDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjgxNzI1Mzc1ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlZFVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIixcbiAgICBcImJwZl94ZHBfYWRqdXN0X3RhaWxcIixcbiAgICBcImJwZl94ZHBfcHVsbF9kYXRhXCIsXG4gICAgXCJicGZfeGRwX3Nocmlua19kYXRhXCIsXG4gICAgXCJ2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmXCIsXG4gICAgXCJ2ZXRoX3hkcF9yY3Zfc2tiXCIsXG4gICAgXCJ2ZXRoX3hkcF9yY3Zfb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgWERQIGZyYWdtZW50IGhhbmRsaW5nIGxvZ2ljIGFjcm9zcyBjb3JlIG5ldHdvcmtpbmcsIGdlbmVyaWMgWERQLCBhbmQgdGhlIHZldGggZHJpdmVyIHRvIHByb3Blcmx5IHRyYWNrIHBhZ2VfcG9vbCBiYWNrZWQgZnJhZ21lbnRzIHdoZW4gc2hyaW5raW5nIFhEUCBidWZmZXJzLiBUaGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JrIGludGVyZmFjZXMgKHZldGgsIHR1bi90YXApIGFuZCBCUEYvWERQIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0NjQyZjIxZjE4MDE2MGU1MzQ2Mzk2YWU2OGQ2MGMzMjkzZTgzMDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNDo0NTozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuaW5kZXggNmVkM2VlODExNTNmYi4uYTNmZGYxOTU5Yjc2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3ZldGguY1xuKysrIGIvZHJpdmVycy9uZXQvdmV0aC5jXG5AQCAtNzc1LDYgKzc3NSwxMiBAQCBzdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxuIFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncykge1xuIFx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNleGRwX2ZyYWdzX3NpemUgPSBza2ItXHUwMDNlZGF0YV9sZW47XG4gXHRcdHhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7XG4rXHRcdC8qXG4rXHRcdCAqIEEgbm9ubGluZWFyIHNrYiB3YXMgY293J2QgaW50byBycS1cdTAwM2VwYWdlX3Bvb2wgYWJvdmUsIHNvIHRoZVxuK1x0XHQgKiBmcmFncyBtdXN0IGJlIGZyZWVkIHRvIHRoYXQgcG9vbCwgbm90IHZpYSB0aGUgcnhxJ3NcbitcdFx0ICogTUVNX1RZUEVfUEFHRV9TSEFSRUQuXG4rXHRcdCAqL1xuK1x0XHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xuIFx0fSBlbHNlIHtcbiBcdFx0eGRwX2J1ZmZfY2xlYXJfZnJhZ3NfZmxhZyh4ZHApO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcC5oIGIvaW5jbHVkZS9uZXQveGRwLmhcbmluZGV4IGFhNzQyZjQxM2MzNTguLjhmZDQxMzllOWNiZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZHAuaFxuKysrIGIvaW5jbHVkZS9uZXQveGRwLmhcbkBAIC04MSw2ICs4MSwxNCBAQCBlbnVtIHhkcF9idWZmX2ZsYWdzIHtcbiBcdCAqIFhEUCBwcm9ncmFtIGlzIG5vdCBhdHRhY2hlZC5cbiBcdCAqL1xuIFx0WERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEVcdD0gQklUKDIpLFxuK1x0LypcbitcdCAqIGZyYWdzIGFyZSBwYWdlX3Bvb2wgbWVtb3J5IGV2ZW4gdGhvdWdoIHJ4cS1cdTAwM2VtZW0udHlwZSBpcyBub3Q6IGFcbitcdCAqIHNrYi1iYWNrZWQgWERQIGJ1ZmYgKGdlbmVyaWMgWERQLCB2ZXRoKSBpcyBjb3cnZCBpbnRvIGEgcGFnZV9wb29sLlxuK1x0ICogeGRwX2J1ZmYgb25seTogYW4geGRwX2ZyYW1lIGRlc2NyaWJlcyBpdHMgbWVtb3J5IHdpdGggOjptZW1fdHlwZSwgc29cbitcdCAqIHRoaXMgaXMgc3RyaXBwZWQgaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSBhbmQgcmUtZGVyaXZlZCBmcm9tXG4rXHQgKiA6Om1lbV90eXBlIGluIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoKS5cbitcdCAqL1xuK1x0WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTFx0PSBCSVQoMyksXG4gfTtcbiBcbiBzdHJ1Y3QgeGRwX2J1ZmYge1xuQEAgLTEzMSw2ICsxMzksMTYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHhkcF9idWZmX3NldF9mcmFnX3VucmVhZGFibGUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4gXHR4ZHAtXHUwMDNlZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEU7XG4gfVxuIFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB4ZHBfYnVmZl9zZXRfZnJhZ19wcChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbit7XG4rXHR4ZHAtXHUwMDNlZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHhkcF9idWZmX2lzX2ZyYWdfcHAoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApXG4re1xuK1x0cmV0dXJuICEhKHhkcC1cdTAwM2VmbGFncyBcdTAwMjYgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHhkcF9idWZmX2dldF9za2JfZmxhZ3MoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApXG4ge1xuIFx0cmV0dXJuIHhkcC1cdTAwM2VmbGFncztcbkBAIC0zOTQsNiArNDEyLDE1IEBAIHZvaWQgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSxcbiBcdHhkcC1cdTAwM2VkYXRhX21ldGEgPSBmcmFtZS1cdTAwM2VkYXRhIC0gZnJhbWUtXHUwMDNlbWV0YXNpemU7XG4gXHR4ZHAtXHUwMDNlZnJhbWVfc3ogPSBmcmFtZS1cdTAwM2VmcmFtZV9zejtcbiBcdHhkcC1cdTAwM2VmbGFncyA9IGZyYW1lLVx1MDAzZWZsYWdzO1xuK1x0LypcbitcdCAqIGZyYW1lLVx1MDAzZWZsYWdzIG5ldmVyIGNhcnJpZXMgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCAoaXQgaXMgc3RyaXBwZWRcbitcdCAqIGluIHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKCkpOyByZS1kZXJpdmUgaXQgZnJvbSB0aGUgZnJhbWUncyBvd25cbitcdCAqIG1lbW9yeSB0eXBlLiB2ZXRoIGFuZCBkZXZtYXAgcmVidWlsZCBhIGJ1ZmYgaGVyZSBhbmQgcnVuIGEgcHJvZ3JhbVxuK1x0ICogd2hvc2UgcnhxIHNheXMgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIHNvIHdpdGhvdXQgdGhpcyBhIHNocmluayB3b3VsZFxuK1x0ICogZnJlZSBhIHBhZ2VfcG9vbCBmcmFnIHRocm91Z2ggcGFnZV9mcmFnX2ZyZWUoKS5cbitcdCAqL1xuK1x0aWYgKGZyYW1lLVx1MDAzZW1lbV90eXBlID09IE1FTV9UWVBFX1BBR0VfUE9PTClcbitcdFx0eGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZVxuQEAgLTQyMCw3ICs0NDcsOCBAQCBpbnQgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4gXHR4ZHBfZnJhbWUtXHUwMDNlaGVhZHJvb20gPSBoZWFkcm9vbSAtIHNpemVvZigqeGRwX2ZyYW1lKTtcbiBcdHhkcF9mcmFtZS1cdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xuIFx0eGRwX2ZyYW1lLVx1MDAzZWZyYW1lX3N6ID0geGRwLVx1MDAzZWZyYW1lX3N6O1xuLVx0eGRwX2ZyYW1lLVx1MDAzZWZsYWdzID0geGRwLVx1MDAzZWZsYWdzO1xuK1x0LyogWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCBpcyB4ZHBfYnVmZiBvbmx5LCBkb24ndCBjYXJyeSBpdCBvdmVyICovXG4rXHR4ZHBfZnJhbWUtXHUwMDNlZmxhZ3MgPSB4ZHAtXHUwMDNlZmxhZ3MgXHUwMDI2IH5YRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDI5MGUwZjA5OWU2YmYuLjk0MjY4ZjRkM2M1ZjcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC01NTMyLDYgKzU1MzIsMTIgQEAgdTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbiBcdGlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZXhkcF9mcmFnc19zaXplID0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFx0XHR4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApO1xuK1x0XHQvKlxuK1x0XHQgKiBBIG5vbmxpbmVhciBza2Igd2FzIGNvdydkIGludG8gcGFnZV9wb29sIG1lbW9yeSBieVxuK1x0XHQgKiBza2JfY293X2RhdGFfZm9yX3hkcCgpIGJlZm9yZSB3ZSBnb3QgaGVyZSwgc28gdGhlIGZyYWdzIG11c3RcbitcdFx0ICogYmUgZnJlZWQgdG8gdGhhdCBwb29sLCBub3QgdmlhIHRoZSByeHEncyBNRU1fVFlQRV9QQUdFX1NIQVJFRC5cbitcdFx0ICovXG4rXHRcdHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR4ZHBfYnVmZl9jbGVhcl9mcmFnc19mbGFnKHhkcCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uZDM0YmE1NmQ3OWQ4ZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTQzNzgsNiArNDM3OCwxMyBAQCBzdGF0aWMgYm9vbCBicGZfeGRwX3Nocmlua19kYXRhKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBza2JfZnJhZ190ICpmcmFnLFxuIFx0aWYgKG1lbV90eXBlID09IE1FTV9UWVBFX1hTS19CVUZGX1BPT0wpIHtcbiBcdFx0bmV0bWVtID0gMDtcbiBcdFx0emNfZnJhZyA9IGJwZl94ZHBfc2hyaW5rX2RhdGFfemMoeGRwLCBzaHJpbmssIHRhaWwsIHJlbGVhc2UpO1xuK1x0fSBlbHNlIGlmICh4ZHBfYnVmZl9pc19mcmFnX3BwKHhkcCkpIHtcbitcdFx0LypcbitcdFx0ICogU2tiLWJhY2tlZCBYRFAgKGdlbmVyaWMgWERQLCB2ZXRoKSBjb3cncyB0aGUgZnJhZ3MgaW50byBhXG4rXHRcdCAqIHBhZ2VfcG9vbCB3aGlsZSB0aGUgcnhxIHN0YXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBmcmVlXG4rXHRcdCAqIHRoZSBmcmFnIHRvIHRoZSBwb29sLCBub3QgdmlhIHBhZ2VfZnJhZ19mcmVlKCkuXG4rXHRcdCAqL1xuK1x0XHRtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfUE9PTDtcbiBcdH1cbiBcbiBcdGlmIChyZWxlYXNlKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU4ZjkwMzRhMjY4NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXG5AQCAtMCwwICsxLDI4OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl90dW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJ4ZHBfc2hyaW5rX2ZyYWdzLnNrZWwuaFwiXG4rXG4rLypcbisgKiBBIGdlbmVyaWMtWERQIHByb2dyYW0gdGhhdCBzaHJpbmtzIGludG8gdGhlIGZyYWdzIGZyZWVzIGEgcGFnZV9wb29sIGZyYWcuXG4rICogc2tiLWJhY2tlZCBYRFAgZmlyc3QgY293J3MgdGhlIG5vbmxpbmVhciBza2IgaW50byBwYWdlX3Bvb2wgbWVtb3J5XG4rICogKHNrYl9jb3dfZGF0YV9mb3JfeGRwKCkgZm9yIGdlbmVyaWMgWERQLCBza2JfcHBfY293X2RhdGEoKSBmb3IgdmV0aCksIGJ1dFxuKyAqIHRoZSBzaGFyZWQgcnhxIGlzIHJlZ2lzdGVyZWQgYXMgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIHNvIGEgYnVnZ3kga2VybmVsXG4rICogZnJlZXMgdGhlIGZyYWcgd2l0aCBwYWdlX2ZyYWdfZnJlZSgpIC1cdTAwM2UgXCJCYWQgcGFnZSBzdGF0ZSAuLi4gcGFnZV9wb29sIGxlYWtcIi5cbisgKi9cbitcbisjZGVmaW5lIFRBUF9OQU1FXHRcInhkcF9zaHJpbmswXCJcbisjZGVmaW5lIFRBUF9ORVROU1x0XCJ4ZHBfc2hyaW5rX3RhcFwiXG4rXG4rI2RlZmluZSBOU19OQU1FX01BWF9MRU5cdDMyXG4rI2RlZmluZSBWRVRIX0xPQ0FMXHRcInhkcF9zaHJpbmtBXCJcbisjZGVmaW5lIFZFVEhfUEVFUlx0XCJ4ZHBfc2hyaW5rQlwiXG4rI2RlZmluZSBWRVRIX0xPQ0FMX0lQXHRcIjEwLjkuOS4xXCJcbisjZGVmaW5lIFZFVEhfUEVFUl9JUFx0XCIxMC45LjkuMlwiXG4rI2RlZmluZSBWRVRIX0xPQ0FMX01BQ1x0XCIwMjowMDowMDowMDowMDowMVwiXG4rXG4rLypcbisgKiBza2JfcHBfY293X2RhdGEoKSBrZWVwcyB1cCB0byBvbmUgcGFnZSBpbiB0aGUgbGluZWFyIHBhcnQsIHNvIHRoZSBwYWNrZXRcbisgKiBzaXplcyBiZWxvdyBvbmx5IGxlYXZlIGEgZnJhZyAoc21hbGxlciB0aGFuIHRoZSAzMDAwLWJ5dGUgc2hyaW5rLCBzbyBpdCBpc1xuKyAqIHJlbGVhc2VkIGFzIGEgd2hvbGUpIG9uIDRLIHBhZ2VzLiBTa2lwIGVsc2V3aGVyZSByYXRoZXIgdGhhbiBydW4gYSB0ZXN0XG4rICogdGhhdCBjYW5ub3QgdGVsbCBhIGZpeGVkIGtlcm5lbCBmcm9tIGEgYnVnZ3kgb25lLlxuKyAqL1xuKyNkZWZpbmUgUEFHRV9TSVpFXzRLXHQ0MDk2XG4rXG4rLypcbisgKiBHZW5lcm91cywgc28gYSBsb2FkZWQgQ0kgZG9lcyBub3QgZmFpbCB0aGUgYXNzZXJ0IHByZW1hdHVyZWx5OyBub3JtYWxseVxuKyAqIHRoZSBmaXJzdCBjaGVjayBhbHJlYWR5IHN1Y2NlZWRzLlxuKyAqL1xuKyNkZWZpbmUgV0FJVF9JVEVSU1x0MTAwMDBcbisjZGVmaW5lIFdBSVRfVVNcdFx0MTAwMFxuK1xuK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3Byb2coc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBXQUlUX0lURVJTIFx1MDAyNlx1MDAyNiAhc2tlbC1cdTAwM2Vic3MtXHUwMDNlc2hyaW5rX3JhbjsgaSsrKVxuK1x0XHR1c2xlZXAoV0FJVF9VUyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY3JlYXRlX3RhcF9uYXBpX2ZyYWdzKGNvbnN0IGNoYXIgKmlmbmFtZSlcbit7XG4rXHRzdHJ1Y3QgaWZyZXEgaWZyID0ge1xuK1x0XHQuaWZyX2ZsYWdzID0gSUZGX1RBUCB8IElGRl9OT19QSSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MsXG4rXHR9O1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRzdHJzY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTtcbitcbitcdGZkID0gb3BlbihcIi9kZXYvbmV0L3R1blwiLCBPX1JEV1IpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0ZXJyID0gaW9jdGwoZmQsIFRVTlNFVElGRiwgXHUwMDI2aWZyKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZXJyID0gLWVycm5vO1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuKy8qXG4rICogU2ltaWxhciB0byBmbG93X2Rpc3NlY3Rvci5jOiB3cml0ZXYoKSBhbiBJRkZfTkFQSV9GUkFHUyB0YXAgdG8gYnVpbGQgYVxuKyAqIG5vbmxpbmVhciBza2IgdGhhdCB0dW4gcnVucyB0aHJvdWdoIGRvX3hkcF9nZW5lcmljKCkuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdF90dW4oc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpXG4re1xuK1x0X191OCBoZWFkWzc0XSwgZnJhZzFbMjA0OF0sIGZyYWcyWzIwNDhdO1xuK1x0c3RydWN0IGV0aGhkciAqZXRoID0gKHZvaWQgKiloZWFkO1xuK1x0aW50IHRhcF9mZCA9IC0xLCBpZmluZGV4LCBlcnI7XG4rXHRzdHJ1Y3QgbmV0bnNfb2JqICpucyA9IE5VTEw7XG4rXHRzdHJ1Y3QgaW92ZWMgaW92WzNdO1xuK1x0c3NpemVfdCBuO1xuK1xuK1x0aWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0bnMgPSBuZXRuc19uZXcoVEFQX05FVE5TLCB0cnVlKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihucywgXCJuZXRuc19uZXdcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHRhcF9mZCA9IGNyZWF0ZV90YXBfbmFwaV9mcmFncyhUQVBfTkFNRSk7XG4rXHRpZiAoIUFTU0VSVF9HRSh0YXBfZmQsIDAsIFwiY3JlYXRlX3RhcFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRTWVMob3V0LCBcImlwIGxpbmsgc2V0IGRldiBcIiBUQVBfTkFNRSBcIiB1cFwiKTtcbitcbitcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChUQVBfTkFNRSk7XG4rXHRpZiAoIUFTU0VSVF9HVChpZmluZGV4LCAwLCBcImlmX25hbWV0b2luZGV4XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNocmlua19yYW4gPSAwO1xuK1xuK1x0ZXJyID0gYnBmX3hkcF9hdHRhY2goaWZpbmRleCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MueGRwX3NocmluayksXG4rXHRcdFx0ICAgICAwLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfeGRwX2F0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRtZW1zZXQoaGVhZCwgMCwgc2l6ZW9mKGhlYWQpKTtcbitcdG1lbXNldChmcmFnMSwgMHg0MSwgc2l6ZW9mKGZyYWcxKSk7XG4rXHRtZW1zZXQoZnJhZzIsIDB4NDIsIHNpemVvZihmcmFnMikpO1xuK1x0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4rXG4rXHRpb3ZbMF0uaW92X2Jhc2UgPSBoZWFkOyAgaW92WzBdLmlvdl9sZW4gPSBzaXplb2YoaGVhZCk7XG4rXHRpb3ZbMV0uaW92X2Jhc2UgPSBmcmFnMTsgaW92WzFdLmlvdl9sZW4gPSBzaXplb2YoZnJhZzEpO1xuK1x0aW92WzJdLmlvdl9iYXNlID0gZnJhZzI7IGlvdlsyXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcyKTtcbitcbitcdG4gPSB3cml0ZXYodGFwX2ZkLCBpb3YsIEFSUkFZX1NJWkUoaW92KSk7XG4rXHRBU1NFUlRfRVEobiwgc2l6ZW9mKGhlYWQpICsgc2l6ZW9mKGZyYWcxKSArIHNpemVvZihmcmFnMiksIFwid3JpdGV2XCIpO1xuK1xuK1x0d2FpdF9mb3JfcHJvZyhza2VsKTtcbitcdC8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzIFwicGFnZV9wb29sIGxlYWtcIiwgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovXG4rXHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc2hyaW5rX3JhbiwgMCwgXCJ4ZHBfcHJvZ19yYW5cIik7XG4rXG4rXHRicGZfeGRwX2RldGFjaChpZmluZGV4LCAwLCBOVUxMKTtcbitvdXQ6XG4rXHRpZiAodGFwX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodGFwX2ZkKTtcbitcdG5ldG5zX2ZyZWUobnMpO1xuK31cbitcbisvKlxuKyAqIEJvdGggdmV0aCBlbmRzIGxpdmUgaW4gdGhlaXIgb3duIG5hbWVzcGFjZSwgc28gdGhlIHRyYWZmaWMgcmVhbGx5IGNyb3NzZXNcbisgKiB0aGUgcGFpciBhbmQgbm90aGluZyBpcyBjcmVhdGVkIGluIHRoZSBjYWxsZXIncyBuYW1lc3BhY2UuXG4rICovXG4rc3RhdGljIGludCB2ZXRoX3NldHVwKGNoYXIgKm5zMCwgY2hhciAqbnMxKVxuK3tcbitcdGlmICghQVNTRVJUX09LKGFwcGVuZF90aWQobnMwLCBOU19OQU1FX01BWF9MRU4pLCBcImFwcGVuZF90aWQgbnMwXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoIUFTU0VSVF9PSyhhcHBlbmRfdGlkKG5zMSwgTlNfTkFNRV9NQVhfTEVOKSwgXCJhcHBlbmRfdGlkIG5zMVwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0U1lTKGZhaWwsIFwiaXAgbmV0bnMgYWRkICVzXCIsIG5zMCk7XG4rXHRTWVMoZmFpbF9uczAsIFwiaXAgbmV0bnMgYWRkICVzXCIsIG5zMSk7XG4rXHRTWVMoZmFpbF9uczEsIFwiaXAgLW4gJXMgbGluayBhZGQgJXMgbXR1IDgwMDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlcyBtdHUgODAwMFwiLFxuK1x0ICAgIG5zMCwgVkVUSF9MT0NBTCwgVkVUSF9QRUVSKTtcbitcdFNZUyhmYWlsX25zMSwgXCJpcCAtbiAlcyBsaW5rIHNldCAlcyBuZXRucyAlc1wiLCBuczAsIFZFVEhfUEVFUiwgbnMxKTtcbitcdFNZUyhmYWlsX25zMSwgXCJpcCAtbiAlcyBsaW5rIHNldCAlcyBhZGRyZXNzICVzXCIsIG5zMCwgVkVUSF9MT0NBTCxcbitcdCAgICBWRVRIX0xPQ0FMX01BQyk7XG4rXHRTWVMoZmFpbF9uczEsIFwiaXAgLW4gJXMgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCIsIG5zMCwgVkVUSF9MT0NBTF9JUCxcbitcdCAgICBWRVRIX0xPQ0FMKTtcbitcdFNZUyhmYWlsX25zMSwgXCJpcCAtbiAlcyBsaW5rIHNldCAlcyB1cFwiLCBuczAsIFZFVEhfTE9DQUwpO1xuK1x0U1lTKGZhaWxfbnMxLCBcImlwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlc1wiLCBuczEsIFZFVEhfUEVFUl9JUCxcbitcdCAgICBWRVRIX1BFRVIpO1xuK1x0U1lTKGZhaWxfbnMxLCBcImlwIC1uICVzIGxpbmsgc2V0ICVzIHVwXCIsIG5zMSwgVkVUSF9QRUVSKTtcbitcbitcdHJldHVybiAwO1xuK1xuK2ZhaWxfbnMxOlxuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczEpO1xuK2ZhaWxfbnMwOlxuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczApO1xuK2ZhaWw6XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZldGhfY2xlYW51cChjb25zdCBjaGFyICpuczAsIGNvbnN0IGNoYXIgKm5zMSlcbit7XG4rXHQvKiBEcm9wcGluZyB0aGUgbmFtZXNwYWNlcyB0YWtlcyB0aGUgdmV0aCBwYWlyIGFuZCBpdHMgWERQIHByb2dyYW1zLiAqL1xuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczEpO1xuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczApO1xuK31cbitcbitzdGF0aWMgaW50IHZldGhfYXR0YWNoKGNvbnN0IGNoYXIgKm5zLCBjb25zdCBjaGFyICpkZXYsIGludCBwcm9nX2ZkKVxuK3tcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xuK1x0aW50IGlmaW5kZXgsIGVycjtcbitcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKG5zKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChkZXYpO1xuK1x0aWYgKCFBU1NFUlRfR1QoaWZpbmRleCwgMCwgXCJpZl9uYW1ldG9pbmRleFwiKSkge1xuK1x0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0ZXJyID0gYnBmX3hkcF9hdHRhY2goaWZpbmRleCwgcHJvZ19mZCwgMCwgTlVMTCk7XG4rXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcbitcdHJldHVybiBBU1NFUlRfT0soZXJyLCBcImJwZl94ZHBfYXR0YWNoXCIpID8gMCA6IC0xO1xuK31cbitcbisvKiBBIGxhcmdlIHBpbmcgYnVpbGRzIGEgbm9ubGluZWFyIHNrYiB0aGF0IHZldGggY293J3MgaW50byBpdHMgcGFnZV9wb29sLiAqL1xuK3N0YXRpYyB2b2lkIHRlc3RfdmV0aChzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbClcbit7XG4rXHRjaGFyIG5zMFtOU19OQU1FX01BWF9MRU5dID0gXCJ4ZHBfc2hyaW5rX25zMC1cIjtcbitcdGNoYXIgbnMxW05TX05BTUVfTUFYX0xFTl0gPSBcInhkcF9zaHJpbmtfbnMxLVwiO1xuK1xuK1x0aWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHZldGhfc2V0dXAobnMwLCBuczEpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuID0gMDtcbitcbitcdGlmICh2ZXRoX2F0dGFjaChuczAsIFZFVEhfTE9DQUwsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9zaHJpbmspKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZXhlYyAlcyBwaW5nIC1xIC1zIDUwMDAgLWMgMyAtVyAxICVzXCIsXG4rXHRcdCAgIG5zMSwgVkVUSF9MT0NBTF9JUCk7XG4rXG4rXHR3YWl0X2Zvcl9wcm9nKHNrZWwpO1xuK1x0LyogYSBidWdneSBrZXJuZWwgb25seSBzcGxhdHMgXCJwYWdlX3Bvb2wgbGVha1wiLCBpdCBkb2VzIG5vdCBmYWlsIGhlcmUgKi9cbitcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuLCAwLCBcInhkcF9wcm9nX3JhblwiKTtcbitvdXQ6XG4rXHR2ZXRoX2NsZWFudXAobnMwLCBuczEpO1xuK31cbitcbisvKlxuKyAqIExPQ0FMIGNvdydzIHRoZSBpbmNvbWluZyBza2IgYW5kIHJldHVybnMgWERQX1RYLCBzbyB0aGUgYnVmZiBpcyB0dXJuZWQgaW50b1xuKyAqIGFuIHhkcF9mcmFtZSBhbmQgYm91bmNlZCB0byBQRUVSLCB3aGljaCBzaHJpbmtzIGEgZnJhZy4gQSBwYWdlX3Bvb2wgdGFnXG4rICogcmVjb3JkZWQgb24gdGhlIGJ1ZmYgbXVzdCBub3QgbGVhayBpbnRvIHRoZSBmcmFtZSwgb3IgUEVFUiBmcmVlcyBhIHBsYWluXG4rICogcGFnZSAod2hvc2UgcHAgd2FzIGFscmVhZHkgY2xlYXJlZCBvbiB0aGUgWERQX1RYIHNpZGUpIGFzIHBhZ2VfcG9vbCBtZW1vcnkuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdF92ZXRoX3R4KHN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsKVxuK3tcbitcdGNoYXIgbnMwW05TX05BTUVfTUFYX0xFTl0gPSBcInhkcF9zaHJpbmtfdHgwLVwiO1xuK1x0Y2hhciBuczFbTlNfTkFNRV9NQVhfTEVOXSA9IFwieGRwX3Nocmlua190eDEtXCI7XG4rXG4rXHRpZiAoZ2V0cGFnZXNpemUoKSAhPSBQQUdFX1NJWkVfNEspIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAodmV0aF9zZXR1cChuczAsIG5zMSkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qXG4rXHQgKiBMT0NBTCBib3VuY2VzIGV2ZXJ5dGhpbmcgKGluY2wuIEFSUCkgd2l0aCBYRFBfVFgsIHNvIHBpbiBhIHN0YXRpY1xuK1x0ICogbmVpZ2hib3VyIHRvIGxldCB0aGUgcGluZydzIHBheWxvYWQgYWN0dWFsbHkgcmVhY2ggaXQuXG4rXHQgKi9cbitcdFNZUyhvdXQsIFwiaXAgLW4gJXMgbmVpZ2ggYWRkICVzIGxsYWRkciAlcyBkZXYgJXMgbnVkIHBlcm1hbmVudFwiLFxuK1x0ICAgIG5zMSwgVkVUSF9MT0NBTF9JUCwgVkVUSF9MT0NBTF9NQUMsIFZFVEhfUEVFUik7XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuID0gMDtcbitcbitcdGlmICh2ZXRoX2F0dGFjaChuczAsIFZFVEhfTE9DQUwsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF90eCkpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICh2ZXRoX2F0dGFjaChuczEsIFZFVEhfUEVFUiwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MueGRwX3NocmluaykpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXNcIixcbitcdFx0ICAgbnMxLCBWRVRIX0xPQ0FMX0lQKTtcbitcbitcdHdhaXRfZm9yX3Byb2coc2tlbCk7XG4rXHQvKiBhIGJ1Z2d5IGtlcm5lbCBvbmx5IHNwbGF0cyBcInBhZ2VfcG9vbCBsZWFrXCIsIGl0IGRvZXMgbm90IGZhaWwgaGVyZSAqL1xuK1x0QVNTRVJUX0dUKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNocmlua19yYW4sIDAsIFwieGRwX3Byb2dfcmFuXCIpO1xuK291dDpcbitcdHZldGhfY2xlYW51cChuczAsIG5zMSk7XG4rfVxuK1xuK3ZvaWQgdGVzdF94ZHBfc2hyaW5rX2ZyYWdzKHZvaWQpXG4re1xuK1x0c3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWw7XG4rXG4rXHRza2VsID0geGRwX3Nocmlua19mcmFnc19fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidHVuXCIpKVxuK1x0XHR0ZXN0X3R1bihza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidmV0aFwiKSlcbitcdFx0dGVzdF92ZXRoKHNrZWwpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ2ZXRoX3R4XCIpKVxuK1x0XHR0ZXN0X3ZldGhfdHgoc2tlbCk7XG4rXG4rXHR4ZHBfc2hyaW5rX2ZyYWdzX19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zaHJpbmtfZnJhZ3MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFkODk1YWI2OTkzMDNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmNcbkBAIC0wLDAgKzEsMzQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuK1xuK2ludCBzaHJpbmtfcmFuO1xuK1xuK1NFQyhcInhkcC5mcmFnc1wiKVxuK2ludCB4ZHBfc2hyaW5rKHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHQvKlxuK1x0ICogUnVucyBvbiBib3RoIHNrYi1iYWNrZWQgWERQIHBhdGhzIChnZW5lcmljIFhEUCB2aWEgdHVuLCBhbmQgdmV0aCk6XG4rXHQgKiB0aGUgbm9ubGluZWFyIHNrYiBpcyBjb3cnZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYmVmb3JlIHdlIHJ1biwgc29cbitcdCAqIHNocmlua2luZyB0aGUgdGFpbCByZWxlYXNlcyBhIHdob2xlIGZyYWcgdGhhdCBoYXMgdG8gZ28gYmFjayB0byB0aGF0XG4rXHQgKiBwb29sLiBUaGUgY291bnRlciBvbmx5IHRlbGxzIHVzIHRoZSBwcm9ncmFtIHJhbiBhbmQgdGhlIGhlbHBlclxuK1x0ICogc3VjY2VlZGVkIC0tIGEgbGluZWFyIGJ1ZmYgcmV0dXJucyAwIGFzIHdlbGwgLS0gaXQgZG9lcyBub3QgcHJvdmUgYVxuK1x0ICogZnJhZyB3YXMgcmVsZWFzZWQuXG4rXHQgKi9cbitcdGlmIChicGZfeGRwX2FkanVzdF90YWlsKGN0eCwgLTMwMDApID09IDApXG4rXHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnNocmlua19yYW4sIDEpO1xuK1x0cmV0dXJuIFhEUF9QQVNTO1xuK31cbitcbitTRUMoXCJ4ZHAuZnJhZ3NcIilcbitpbnQgeGRwX3R4KHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHQvKlxuK1x0ICogQm91bmNlIHRoZSBmcmFtZSBiYWNrLiBPbiB2ZXRoIHRoaXMgdHVybnMgdGhlIGJ1ZmYgaW50byBhblxuK1x0ICogeGRwX2ZyYW1lLCB3aGljaCBpcyB3aGVyZSBhIGJ1ZmYtc2NvcGVkIHBhZ2VfcG9vbCB0YWcgbXVzdCBub3QgbGVha1xuK1x0ICogaW50byB0aGUgZnJhbWUgaGFuZGVkIHRvIHRoZSBwZWVyLlxuK1x0ICovXG4rXHRyZXR1cm4gWERQX1RYO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NTo0MC4wNDUwMDU5MjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODk2NDIyNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHdvcnRoaW5lc3MsIHBpbnBvaW50IGtleSBmb2N1cyBzeW1ib2xzLCBhbmQgaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cbkZpcnN0LCBsZXQncyBsb29rIGF0IHRoZSB0b3VjaGVkIGZpbGVzLiBJIHNlZSBjaGFuZ2VzIGluIGBkcml2ZXJzL25ldC92ZXRoLmNgLCBgaW5jbHVkZS9uZXQveGRwLmhgLCBgbmV0L2NvcmUvZGV2LmNgLCBgbmV0L2NvcmUvZmlsdGVyLmNgLCBhbmQgc29tZSBzZWxmdGVzdHMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uLi5gLiBUaGlzIGxvb2tzIHByb21pc2luZzsgaXQgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcsIEJQRiwgYW5kIGEgc3BlY2lmaWMgZHJpdmVyIChgdmV0aGApLlxuXG5TcGVjaWZpY2FsbHksIEknbSBvYnNlcnZpbmc6XG5cbiogICBUaGUgYHZldGhgIGRyaXZlciBpcyBiZWluZyBtb2RpZmllZCB3aXRoaW4gYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgIHRvIHNldCBgeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKWAgd2hlbiBmcmFnbWVudCBpbmZvcm1hdGlvbiBpcyBwcmVzZW50LlxuKiAgIFRoZSBgeGRwLmhgIGhlYWRlciBnZXRzIG5ldyBmbGFncywgZnVuY3Rpb25zIGxpa2UgYHhkcF9idWZmX3NldF9mcmFnX3BwKClgIGFuZCBgeGRwX2J1ZmZfaXNfZnJhZ19wcCgpYCwgYW5kIHVwZGF0ZXMgdG8gY29udmVyc2lvbiBmdW5jdGlvbnMgKGB4ZHBfY29udmVydF9mcmFtZV90b19idWZmYCBhbmQgYHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmYCkgd2hpY2ggYWxzbyByZWxhdGUgdG8gYFBBR0VfUE9PTGAgbWVtb3J5LlxuKiAgIGBuZXQvY29yZS9kZXYuY2AncyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKClgIGlzIG5vdyBhbHNvIHNldHRpbmcgdGhlIGZyYWdtZW50IGZsYWcuXG4qICAgYG5ldC9jb3JlL2ZpbHRlci5jYCBpcyB1c2luZyB0aGUgZnJhZ21lbnQgaW5mb3JtYXRpb24gd2l0aGluIGBicGZfeGRwX3Nocmlua19kYXRhYC5cblxuVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhlIGludGVycGxheSBiZXR3ZWVuIGdlbmVyaWMgWERQIGV4ZWN1dGlvbiwgdGhlIGB2ZXRoYCBkcml2ZXIsIEJQRiBmaWx0ZXJzLCBhbmQgY29yZSBYRFAgZnJhbWUgY29udmVyc2lvbi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBmcmFnbWVudCBoYW5kbGluZyBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgQlBGIGxpZmVjeWNsZS5cblxuTm93LCBhIGtleSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkgaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYW5rZnVsbHksIGl0IHNlZW1zIGxpa2UgYHZldGhgLCBgdHVuL3RhcGAsIGdlbmVyaWMgWERQLCBhbmQgQlBGIGFkanVzdCB0YWlsIGFyZSBhbGwgc3RhbmRhcmQgbmV0d29yay9CUEYgZmVhdHVyZXMgdGVzdGVkIGJ5IHN5emthbGxlci4gVGhhdCdzIGEgaHVnZSB3aW4g4oCTIGl0IHdpbGwgbWFrZSB0ZXN0aW5nIG11Y2ggZWFzaWVyLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIHNwZWNpZmljIHN5bWJvbHMgYW5kIGNvbmZpZ3MgSSdsbCBuZWVkIHRvIGZvY3VzIG9uLiBJJ2xsIHVzZSBncmVwcGVyIChvciBgcmVhZC1maWxlYCBkaXJlY3RseSBpZiBncmVwcGVyIGZhaWxzKSBhbmQgc2VhcmNoIGZvciB0aG9zZSBrZXkgZnVuY3Rpb25zLCBsaWtlIGBicGZfeGRwX3Nocmlua19kYXRhYCwgYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgLCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgYW5kIGB4ZHBfY29udmVydF9mcmFtZV90b19idWZmYCwgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYW5kIHdoYXQgdGhlIGNvZGUncyBjYWxsIGdyYXBocyBsb29rIGxpa2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NTo0OC45NDE0MzE3NTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk0MDYxNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3hkcF9zaHJpbmtfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz00MzI3PXN0YXRpYyBpbnQgYnBmX3hkcF9mcmFnc19pbmNyZWFzZV90YWlsKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDM1MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo0MzUyOnN0YXRpYyBzdHJ1Y3QgeGRwX2J1ZmYgKmJwZl94ZHBfc2hyaW5rX2RhdGFfemMoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBzaHJpbmssXFxubmV0L2NvcmUvZmlsdGVyLmMtNDM1My1cXHRcXHRcXHRcXHRcXHQgICAgICAgYm9vbCB0YWlsLCBib29sIHJlbGVhc2UpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00MzY5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQzNzA6c3RhdGljIGJvb2wgYnBmX3hkcF9zaHJpbmtfZGF0YShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc2tiX2ZyYWdfdCAqZnJhZyxcXG5uZXQvY29yZS9maWx0ZXIuYy00MzcxLVxcdFxcdFxcdFxcdGludCBzaHJpbmssIGJvb2wgdGFpbClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQzNzktXFx0XFx0bmV0bWVtID0gMDtcXG5uZXQvY29yZS9maWx0ZXIuYzo0MzgwOlxcdFxcdHpjX2ZyYWcgPSBicGZfeGRwX3Nocmlua19kYXRhX3pjKHhkcCwgc2hyaW5rLCB0YWlsLCByZWxlYXNlKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00MzgxLVxcdH0gZWxzZSBpZiAoeGRwX2J1ZmZfaXNfZnJhZ19wcCh4ZHApKSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NDAxPXN0YXRpYyBpbnQgYnBmX3hkcF9mcmFnc19zaHJpbmtfdGFpbChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgaW50IG9mZnNldClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0MTQtXFx0XFx0b2Zmc2V0IC09IHNocmluaztcXG5uZXQvY29yZS9maWx0ZXIuYzo0NDE1OlxcdFxcdGlmIChicGZfeGRwX3Nocmlua19kYXRhKHhkcCwgZnJhZywgc2hyaW5rLCB0cnVlKSlcXG5uZXQvY29yZS9maWx0ZXIuYy00NDE2LVxcdFxcdFxcdG5fZnJhZ3NfZnJlZSsrO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI2NTk9X19icGZfa2Z1bmMgaW50IGJwZl94ZHBfcHVsbF9kYXRhKHN0cnVjdCB4ZHBfbWQgKngsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcwMC1cXHRcXHRkZWx0YSAtPSBzaHJpbms7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI3MDE6XFx0XFx0aWYgKGJwZl94ZHBfc2hyaW5rX2RhdGEoeGRwLCBmcmFnLCBzaHJpbmssIGZhbHNlKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcwMi1cXHRcXHRcXHRuX2ZyYWdzX2ZyZWUrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDU6NDkuMDEwODQ0NTA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM0NTM3OTMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFhEUCBGcmFnIEhhbmRsaW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGZpbHRlci5jYCBidXNpbmVzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBYRFAgZnJhZ21lbnQgaGFuZGxpbmcgaXMgd29ya2luZyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgYnBmX3hkcF9mcmFnc19zaHJpbmtfdGFpbGAgZnVuY3Rpb24gY2FsbCwgc3BlY2lmaWNhbGx5LCBob3cgaXQgcmVsYXRlcyB0byBgYnBmX3hkcF9hZGp1c3RfdGFpbGAuIFNpbmNlIHRoZSBmb3JtZXIgaXMgY2FsbGVkIGJ5IHRoZSBsYXR0ZXIsIGl0IHNlZW1zIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBjb2RlIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIGdyYXNwIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljIGltbWVkaWF0ZWx5IGFyb3VuZCB0aGVzZSB0d28gZnVuY3Rpb24gY2FsbHMgaXMgY3JpdGljYWw7IEknbSBsb29raW5nIGZvciB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlbSwgdGhlIGRhdGEgdGhleSBvcGVyYXRlIG9uLCBhbmQgdGhlIG92ZXJhbGwgb2JqZWN0aXZlIG9mIHRoZSBjb2RlIHNlZ21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTczLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDU6NTIuMzU2MjI2MzI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ0MDA6XFx0XFxuNDQwMTpcXHRzdGF0aWMgaW50IGJwZl94ZHBfZnJhZ3Nfc2hyaW5rX3RhaWwoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBvZmZzZXQpXFxuNDQwMjpcXHR7XFxuNDQwMzpcXHRcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9idWZmKHhkcCk7XFxuNDQwNDpcXHRcXHRpbnQgaSwgbl9mcmFnc19mcmVlID0gMCwgbGVuX2ZyZWUgPSAwO1xcbjQ0MDU6XFx0XFxuNDQwNjpcXHRcXHRpZiAodW5saWtlbHkob2Zmc2V0IFxcdTAwM2UgKGludCl4ZHBfZ2V0X2J1ZmZfbGVuKHhkcCkgLSBFVEhfSExFTikpXFxuNDQwNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NDA4OlxcdFxcbjQ0MDk6XFx0XFx0Zm9yIChpID0gc2luZm8tXFx1MDAzZW5yX2ZyYWdzIC0gMTsgaSBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG9mZnNldCBcXHUwMDNlIDA7IGktLSkge1xcbjQ0MTA6XFx0XFx0XFx0c2tiX2ZyYWdfdCAqZnJhZyA9IFxcdTAwMjZzaW5mby1cXHUwMDNlZnJhZ3NbaV07XFxuNDQxMTpcXHRcXHRcXHRpbnQgc2hyaW5rID0gbWluX3QoaW50LCBvZmZzZXQsIHNrYl9mcmFnX3NpemUoZnJhZykpO1xcbjQ0MTI6XFx0XFxuNDQxMzpcXHRcXHRcXHRsZW5fZnJlZSArPSBzaHJpbms7XFxuNDQxNDpcXHRcXHRcXHRvZmZzZXQgLT0gc2hyaW5rO1xcbjQ0MTU6XFx0XFx0XFx0aWYgKGJwZl94ZHBfc2hyaW5rX2RhdGEoeGRwLCBmcmFnLCBzaHJpbmssIHRydWUpKVxcbjQ0MTY6XFx0XFx0XFx0XFx0bl9mcmFnc19mcmVlKys7XFxuNDQxNzpcXHRcXHR9XFxuNDQxODpcXHRcXHRzaW5mby1cXHUwMDNlbnJfZnJhZ3MgLT0gbl9mcmFnc19mcmVlO1xcbjQ0MTk6XFx0XFx0c2luZm8tXFx1MDAzZXhkcF9mcmFnc19zaXplIC09IGxlbl9mcmVlO1xcbjQ0MjA6XFx0XFxuNDQyMTpcXHRcXHRpZiAodW5saWtlbHkoIXNpbmZvLVxcdTAwM2Vucl9mcmFncykpIHtcXG40NDIyOlxcdFxcdFxcdHhkcF9idWZmX2NsZWFyX2ZyYWdzX2ZsYWcoeGRwKTtcXG40NDIzOlxcdFxcdFxcdHhkcF9idWZmX2NsZWFyX2ZyYWdfcGZtZW1hbGxvYyh4ZHApO1xcbjQ0MjQ6XFx0XFx0XFx0eGRwLVxcdTAwM2VkYXRhX2VuZCAtPSBvZmZzZXQ7XFxuNDQyNTpcXHRcXHR9XFxuNDQyNjpcXHRcXG40NDI3OlxcdFxcdHJldHVybiAwO1xcbjQ0Mjg6XFx0fVxcbjQ0Mjk6XFx0XFxuNDQzMDpcXHRCUEZfQ0FMTF8yKGJwZl94ZHBfYWRqdXN0X3RhaWwsIHN0cnVjdCB4ZHBfYnVmZiAqLCB4ZHAsIGludCwgb2Zmc2V0KVxcbjQ0MzE6XFx0e1xcbjQ0MzI6XFx0XFx0dm9pZCAqZGF0YV9oYXJkX2VuZCA9IHhkcF9kYXRhX2hhcmRfZW5kKHhkcCk7IC8qIHVzZSB4ZHAtXFx1MDAzZWZyYW1lX3N6ICovXFxuNDQzMzpcXHRcXHR2b2lkICpkYXRhX2VuZCA9IHhkcC1cXHUwMDNlZGF0YV9lbmQgKyBvZmZzZXQ7XFxuNDQzNDpcXHRcXG40NDM1OlxcdFxcdGlmICh1bmxpa2VseSh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkpIHsgLyogbm9uLWxpbmVhciB4ZHAgYnVmZiAqL1xcbjQ0MzY6XFx0XFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuNDQzNzpcXHRcXHRcXHRcXHRyZXR1cm4gYnBmX3hkcF9mcmFnc19zaHJpbmtfdGFpbCh4ZHAsIC1vZmZzZXQpO1xcbjQ0Mzg6XFx0XFxuNDQzOTpcXHRcXHRcXHRyZXR1cm4gYnBmX3hkcF9mcmFnc19pbmNyZWFzZV90YWlsKHhkcCwgb2Zmc2V0KTtcXG40NDQwOlxcdFxcdH1cXG40NDQxOlxcdFxcbjQ0NDI6XFx0XFx0LyogTm90aWNlIHRoYXQgeGRwX2RhdGFfaGFyZF9lbmQgaGF2ZSByZXNlcnZlZCBzb21lIHRhaWxyb29tICovXFxuNDQ0MzpcXHRcXHRpZiAodW5saWtlbHkoZGF0YV9lbmQgXFx1MDAzZSBkYXRhX2hhcmRfZW5kKSlcXG40NDQ0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ0NDU6XFx0XFxuNDQ0NjpcXHRcXHRpZiAodW5saWtlbHkoZGF0YV9lbmQgXFx1MDAzYyB4ZHAtXFx1MDAzZWRhdGEgKyBFVEhfSExFTikpXFxuNDQ0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NDQ4OlxcdFxcbjQ0NDk6XFx0XFx0LyogQ2xlYXIgbWVtb3J5IGFyZWEgb24gZ3JvdywgY2FuIGNvbnRhaW4gdW5pbml0IGtlcm5lbCBtZW1vcnkgKi9cXG40NDUwOlxcdFxcdGlmIChvZmZzZXQgXFx1MDAzZSAwKVxcbjQ0NTE6XFx0XFx0XFx0bWVtc2V0KHhkcC1cXHUwMDNlZGF0YV9lbmQsIDAsIG9mZnNldCk7XFxuNDQ1MjpcXHRcXG40NDUzOlxcdFxcdHhkcC1cXHUwMDNlZGF0YV9lbmQgPSBkYXRhX2VuZDtcXG40NDU0OlxcdFxcbjQ0NTU6XFx0XFx0cmV0dXJuIDA7XFxuNDQ1NjpcXHR9XFxuNDQ1NzpcXHRcXG40NDU4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9hZGp1c3RfdGFpbF9wcm90byA9IHtcXG40NDU5OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfeGRwX2FkanVzdF90YWlsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NTo1Mi4zNTY4MDE4ODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTk1MjIwMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHZldGguYyBhbmQgWERQIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgbmV0d29yayBwZXJmb3JtYW5jZSwgYW5kIHNwZWNpZmljYWxseSwgdGhlIHZldGggcGFpci4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyB0aGluZyBpcyBoYW5kbGluZyBwYWNrZXQgY29udmVyc2lvbnMgdG8gWERQIGJ1ZmZlcnMuIE15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgYGRyaXZlcnMvbmV0L3ZldGguY2AsIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGF0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgb3B0aW1pemF0aW9ucyBvciBib3R0bGVuZWNrcyBpbiBob3cgU0tCcyBhcmUgYmVpbmcgdHJhbnNsYXRlZCB0byB0aGUgWERQIGZvcm1hdCBoZXJlLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgdGhlIG1lbW9yeSBjb3B5aW5nIChvciBsYWNrIHRoZXJlb2YpLCBhbmQgaG93IGVmZmljaWVudGx5IHRoaXMgaXMgYWxsIGJlaW5nIG1hbmFnZWQsIGVzcGVjaWFsbHkgdW5kZXIgbG9hZC4gVGhpcyBmdW5jdGlvbiBpcyBhIGtleSBhcmVhIGZvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgZ2FpbnMsIHNvIGxldCdzIHN0YXJ0IGRpc3NlY3RpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODkyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NjowMC41NTIwMjM4NzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMTkzMjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3ZldGguYz03Mzk9c3RhdGljIHZvaWQgdmV0aF94ZHBfZ2V0KHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTc1MS1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NzUyOnN0YXRpYyBpbnQgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZihzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuZHJpdmVycy9uZXQvdmV0aC5jLTc1My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz03OTc9c3RhdGljIHN0cnVjdCBza19idWZmICp2ZXRoX3hkcF9yY3Zfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy04MTgtXFx0X19za2JfcHVzaChza2IsIHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYikpO1xcbmRyaXZlcnMvbmV0L3ZldGguYzo4MTk6XFx0aWYgKHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYocnEsIHhkcCwgXFx1MDAyNnNrYikpXFxuZHJpdmVycy9uZXQvdmV0aC5jLTgyMC1cXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjAwLjY2MzIyMTA0N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNzIyNDk4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgbmV0L2NvcmUvZGV2LmNgIGZvciBYRFAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIFhEUCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBnZW5lcmljIHBhdGgsIG1lYW5pbmcgd2UncmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIGEgaGFyZHdhcmUgb2ZmbG9hZCBpc24ndCBoYXBwZW5pbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBCUEYgcHJvZ3JhbSBleGVjdXRpb24uIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG5ldC9jb3JlL2Rldi5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgcmVnaW9uIGFyb3VuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgbW9yZSBhY2N1cmF0ZWx5LCB3aGVyZSB0aGUgZmFsbGJhY2sgaGFwcGVucywgaWYgaXQncyBub3QgYSBkaXJlY3QgaGFyZHdhcmUgYWNjZWxlcmF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgWERQIHByb2dyYW0gaXMgaW52b2tlZCBpbiB0aGlzIGdlbmVyYWxpemVkIHNjZW5hcmlvLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgaW4/IEhvdyBpcyB0aGUgcGFja2V0IGJ1ZmZlciBoYW5kbGVkPyBBcmUgd2UgZG9pbmcgYW55IGNvcHkgb3BlcmF0aW9ucyBvciBhcmUgd2UgZGVhbGluZyB3aXRoIHBvaW50ZXJzPyBXaGF0IGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGlzIHBhdGg/IFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgZ2VuZXJpYyBYRFAuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQxNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjA4LjgzNTQ3MzU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5MDc4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTU0ODM9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NTA1LVxcbm5ldC9jb3JlL2Rldi5jOjU1MDY6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5uZXQvY29yZS9kZXYuYy01NTA3LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTU2NDQ9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU2NzEtXFxubmV0L2NvcmUvZGV2LmM6NTY3MjpcXHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoKnBza2IsIHhkcCwgeGRwX3Byb2cpO1xcbm5ldC9jb3JlL2Rldi5jLTU2NzMtXFx0c3dpdGNoIChhY3QpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDY6MDguOTM4Mzg4MTk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3Nzk2MjQ1MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKlhEUCBGcmFtZSBDb252ZXJzaW9uIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFhEUCBmcmFtZSBjb252ZXJzaW9uIHByb2Nlc3MgYmV0dGVyLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSB0aGlua2luZyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvY29yZS94ZHAuY2AsIG9yIHBvdGVudGlhbGx5IGFueXdoZXJlIGVsc2UgdGhhdCBob3VzZXMgdGhlIGB4ZHBfY29udmVydF9mcmFtZV90b19idWZmYCBmdW5jdGlvbiwgb3IgZXZlbiBhbnl3aGVyZSB0aGF0IGNhbGxzIGl0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvbnZlcnNpb24gd29ya3MgYXQgYSBkZWVwZXIgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTcwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDY6MjYuNzM0NjM1OTY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4MzA3NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NjQ0PXN0YXRpYyBpbnQgYm9uZF94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU2NTYtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NjU3OlxcdFxcdHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoZnJhbWUsIFxcdTAwMjZ4ZHApO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTY1OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz02Mzk9c3RhdGljIHN0cnVjdCB4ZHBfZnJhbWUgKnZldGhfeGRwX3Jjdl9vbmUoc3RydWN0IHZldGhfcnEgKnJxLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTY1My1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NjU0OlxcdFxcdHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoZnJhbWUsIHhkcCk7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTY1NS1cXHRcXHR4ZHAtXFx1MDAzZXJ4cSA9IFxcdTAwMjZycS1cXHUwMDNleGRwX3J4cTtcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oPTc0PWVudW0geGRwX2J1ZmZfZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmgtODgtXFx0ICogdGhpcyBpcyBzdHJpcHBlZCBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpIGFuZCByZS1kZXJpdmVkIGZyb21cXG5pbmNsdWRlL25ldC94ZHAuaDo4OTpcXHQgKiA6Om1lbV90eXBlIGluIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoKS5cXG5pbmNsdWRlL25ldC94ZHAuaC05MC1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oPTQwNT1zdGF0aWMgaW5saW5lXFxuaW5jbHVkZS9uZXQveGRwLmg6NDA2OnZvaWQgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSxcXG5pbmNsdWRlL25ldC94ZHAuaC00MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYz0xODM9c3RhdGljIGludCBjcHVfbWFwX2JwZl9wcm9nX3J1bl94ZHAoc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYy0yMDEtXFxua2VybmVsL2JwZi9jcHVtYXAuYzoyMDI6XFx0XFx0eGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZih4ZHBmLCBcXHUwMDI2eGRwKTtcXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTIwMy1cXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9MzM2PXN0YXRpYyBpbnQgZGV2X21hcF9icGZfcHJvZ19ydW4oc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMzUwLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM6MzUxOlxcdFxcdHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoeGRwZiwgXFx1MDAyNnhkcCk7XFxua2VybmVsL2JwZi9kZXZtYXAuYy0zNTItXFx0XFx0eGRwLnR4cSA9IFxcdTAwMjZ0eHE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjI4Ljk5Mjk1MDczM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTIzNTY2NDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipYRFAgRnJhbWUgVXBkYXRlIENhbGxlcnMgLSBBIFF1aWNrIExvb2sqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmZgLiBCZWZvcmUgd2UgZ28gYW55IGZ1cnRoZXIsIEkgd2FudCB0byB0YWtlIGEgcXVpY2sgYXVkaXQgb2YgaXRzIGNhbGxlcnMuIFVuZGVyc3RhbmRpbmcgKndobyogaXMgdXBkYXRpbmcgdGhlIGZyYW1lcyBpcyBjcnVjaWFsIGJlZm9yZSB3ZSBsb29rIGF0ICpob3cqIHRoZXkncmUgYmVpbmcgdXBkYXRlZC4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgcG9zc2libGUgaXNzdWVzLCBhbmQgaGVscHMgaW1tZW5zZWx5IHdpdGggZGVidWdnaW5nLiBJdOKAmXMgYWxzbyBpbXBvcnRhbnQgZm9yIGFueSByZWZhY3RvcmluZyB3b3JrLCBzaW5jZSB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHRlbGxzIHVzIHdoYXQgdG8gYmUgY2FyZWZ1bCBvZiwgd2hhdCBkZXBlbmRlbmNpZXMgd2UgaGF2ZSwgZXRjLiBMZXQncyB0cmFjZSBpdCBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MTIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NjozMi41MTY1MjAwODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjM2ODA3NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jPTYzOT1zdGF0aWMgc3RydWN0IHhkcF9mcmFtZSAqdmV0aF94ZHBfcmN2X29uZShzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNjYxLVxcdFxcdGNhc2UgWERQX1BBU1M6XFxuZHJpdmVycy9uZXQvdmV0aC5jOjY2MjpcXHRcXHRcXHRpZiAoeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoeGRwLCBmcmFtZSkpXFxuZHJpdmVycy9uZXQvdmV0aC5jLTY2My1cXHRcXHRcXHRcXHRnb3RvIGVycl94ZHA7XFxuLS1cXG5pbmNsdWRlL25ldC94ZHAuaD03ND1lbnVtIHhkcF9idWZmX2ZsYWdzIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oLTg3LVxcdCAqIHhkcF9idWZmIG9ubHk6IGFuIHhkcF9mcmFtZSBkZXNjcmliZXMgaXRzIG1lbW9yeSB3aXRoIDo6bWVtX3R5cGUsIHNvXFxuaW5jbHVkZS9uZXQveGRwLmg6ODg6XFx0ICogdGhpcyBpcyBzdHJpcHBlZCBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpIGFuZCByZS1kZXJpdmVkIGZyb21cXG5pbmNsdWRlL25ldC94ZHAuaC04OS1cXHQgKiA6Om1lbV90eXBlIGluIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoKS5cXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oPTQwNj12b2lkIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUsXFxuLS1cXG5pbmNsdWRlL25ldC94ZHAuaC00MTYtXFx0ICogZnJhbWUtXFx1MDAzZWZsYWdzIG5ldmVyIGNhcnJpZXMgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCAoaXQgaXMgc3RyaXBwZWRcXG5pbmNsdWRlL25ldC94ZHAuaDo0MTc6XFx0ICogaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSk7IHJlLWRlcml2ZSBpdCBmcm9tIHRoZSBmcmFtZSdzIG93blxcbmluY2x1ZGUvbmV0L3hkcC5oLTQxOC1cXHQgKiBtZW1vcnkgdHlwZS4gdmV0aCBhbmQgZGV2bWFwIHJlYnVpbGQgYSBidWZmIGhlcmUgYW5kIHJ1biBhIHByb2dyYW1cXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oPTQyNj1zdGF0aWMgaW5saW5lXFxuaW5jbHVkZS9uZXQveGRwLmg6NDI3OmludCB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5pbmNsdWRlL25ldC94ZHAuaC00MjgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9mcmFtZSlcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oPTQ1OD1zdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmgtNDY2LVxcdHhkcF9mcmFtZSA9IHhkcC1cXHUwMDNlZGF0YV9oYXJkX3N0YXJ0O1xcbmluY2x1ZGUvbmV0L3hkcC5oOjQ2NzpcXHRpZiAodW5saWtlbHkoeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoeGRwLCB4ZHBfZnJhbWUpIFxcdTAwM2MgMCkpXFxuaW5jbHVkZS9uZXQveGRwLmgtNDY4LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYz0xODM9c3RhdGljIGludCBjcHVfbWFwX2JwZl9wcm9nX3J1bl94ZHAoc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYy0yMDYtXFx0XFx0Y2FzZSBYRFBfUEFTUzpcXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjIwNzpcXHRcXHRcXHRlcnIgPSB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihcXHUwMDI2eGRwLCB4ZHBmKTtcXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTIwOC1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYz0zMzY9c3RhdGljIGludCBkZXZfbWFwX2JwZl9wcm9nX3J1bihzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nLFxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYy0zNTctXFx0XFx0Y2FzZSBYRFBfUEFTUzpcXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjM1ODpcXHRcXHRcXHRlcnIgPSB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihcXHUwMDI2eGRwLCB4ZHBmKTtcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTM1OS1cXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyIFxcdTAwM2MgMCkpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTE5PXN0YXRpYyB2b2lkIHhkcF90ZXN0X3J1bl9pbml0X3BhZ2UobmV0bWVtX3JlZiBuZXRtZW0sIHZvaWQgKmFyZylcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNDMtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE0NDpcXHR4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihuZXdfY3R4LCBmcm0pO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNDUtXFx0ZnJtLVxcdTAwM2VtZW1fdHlwZSA9IG5ld19jdHgtXFx1MDAzZXJ4cS1cXHUwMDNlbWVtLnR5cGU7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MjI5PXN0YXRpYyB2b2lkIHJlc2V0X2N0eChzdHJ1Y3QgeGRwX3BhZ2VfaGVhZCAqaGVhZClcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0yMzYtXFx0aGVhZC1cXHUwMDNlY3R4LmRhdGFfZW5kID0gaGVhZC1cXHUwMDNlb3JpZ19jdHguZGF0YV9lbmQ7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjIzNzpcXHR4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihcXHUwMDI2aGVhZC1cXHUwMDNlY3R4LCBoZWFkLVxcdTAwM2VmcmFtZSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTIzOC1cXHRoZWFkLVxcdTAwM2VmcmFtZS1cXHUwMDNlbWVtX3R5cGUgPSBoZWFkLVxcdTAwM2VvcmlnX2N0eC5yeHEtXFx1MDAzZW1lbS50eXBlO1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTI3Mz1zdGF0aWMgaW50IHhkcF90ZXN0X3J1bl9iYXRjaChzdHJ1Y3QgeGRwX3Rlc3RfZGF0YSAqeGRwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzA5LVxcdFxcdGlmICh1bmxpa2VseShjdHhfd2FzX2NoYW5nZWQoaGVhZCkpKSB7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjMxMDpcXHRcXHRcXHRyZXQgPSB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihjdHgsIGZybSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTMxMS1cXHRcXHRcXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjM0Ljc0MDIwNjI2OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA4MTY3NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktjb25maWcgRGVwZW5kZW5jaWVzIC0gQSBRdWljayBDaGVjayoqXG5cbk9rYXksIHRpbWUgdG8gbWFrZSBzdXJlIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBsaW5pbmcgdXAgYXMgSSBleHBlY3QuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIGtleSBkZXBlbmRlbmNpZXMuIExldCdzIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3ZldGguY2AuIFRoZSBjb2RlIHNob3VsZCBiZSBndWFyZGVkIGJ5IGBDT05GSUdfVkVUSGAsIGFzIGl0IGFsd2F5cyBpcy4gTWFrZXMgc2Vuc2UuIFRoZW4gdGhlcmUncyBCUEYgYW5kIFhEUC4gVGhvc2UgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19ORVRgLiBZZXAsIHRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEp1c3QgZG91YmxlLWNoZWNraW5nIGV2ZXJ5dGhpbmcuIE5vdywgZm9yIFZFVEggc3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHZlcmlmeSB0aGUgS2NvbmZpZyBzZXR1cCBpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBKdXN0IGdvb2QgcHJhY3RpY2UsIHlvdSBrbm93PyBLZWVwaW5nIHRoaW5ncyB0aWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI4MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjM3Ljc0ODM3Njc4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNTM2MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTQyMT1jb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDM0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDM1OmNvbmZpZyBWRVRIXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzYtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjM3Ljk1OTkxNzE5OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDYyMzkxMzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBzb21ldGhpbmcgbmV0d29yay1yZWxhdGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgdmFyaW91cyBuZXR3b3JrIGRyaXZlcnMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIE15IG1lbnRhbCBjaGVja2xpc3Qgc2F5cywgXCJLY29uZmlnIGZpbGVzIGFyZSBvZnRlbiB0aGUga2V5IHRvIHRoaXMgc29ydCBvZiB0aGluZy5cIiBHaXZlbiB0aGF0IGdlbmVyYWwga25vd2xlZGdlLCBJIGltbWVkaWF0ZWx5IHplcm9lZCBpbiBvbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIFRoYXQgZGlyZWN0b3J5IGlzIGFsbW9zdCBhbHdheXMgdGhlIG5lcnZlIGNlbnRlciBmb3IgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbiBpbiB0aGUga2VybmVsLlxuXG5JIG5lZWQgdG8gZm9jdXMgbXkgc2VhcmNoIG9uIGEgc3BlY2lmaWMgbGluZSB0byBjdXQgdGhlIG5vaXNlLiBDb25zaWRlcmluZyBJIGtub3cgdGhlIGdlbmVyYWwgc2hhcGUgb2YgS2NvbmZpZyBmaWxlcywgSSBmaWd1cmUgbGluZXMgYXJvdW5kIDQzNSBpbiB0aGUgS2NvbmZpZyBmaWxlIGNvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSB0YXJnZXRlZCBzZWFyY2guIEknbSBub3QgZW50aXJlbHkgc3VyZSAqd2hhdCogSSdsbCBmaW5kIHRoZXJlIHlldCwgYnV0IGl0J3MgYSByZWFzb25hYmxlIGFzc3VtcHRpb24gdGhhdCBpbXBvcnRhbnQgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHdvdWxkIGJlIGRlZmluZWQgd2l0aGluIHRoYXQgYXJlYSBvZiB0aGUgZmlsZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0Njo0MS40MjIzMTI0NDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDMwOlxcdFxcdCAgYW5kIFRVTkdFVFZORVRCRSBpb2N0bHMuXFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdCAgVW5sZXNzIHlvdSBoYXZlIGEgbGl0dGxlLWVuZGlhbiBzeXN0ZW0gaG9zdGluZyBhIGJpZy1lbmRpYW4gdmlydHVhbFxcbiA0MzM6XFx0XFx0ICBtYWNoaW5lIHdpdGggYSBsZWdhY3kgdmlydGlvIE5JQywgeW91IHNob3VsZCBzYXkgTi5cXG4gNDM0OlxcdFxcbiA0MzU6XFx0Y29uZmlnIFZFVEhcXG4gNDM2OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIGV0aGVybmV0IHBhaXIgZGV2aWNlXFxcIlxcbiA0Mzc6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiA0Mzg6XFx0XFx0aGVscFxcbiA0Mzk6XFx0XFx0ICBUaGlzIGRldmljZSBpcyBhIGxvY2FsIGV0aGVybmV0IHR1bm5lbC4gRGV2aWNlcyBhcmUgY3JlYXRlZCBpbiBwYWlycy5cXG4gNDQwOlxcdFxcdCAgV2hlbiBvbmUgZW5kIHJlY2VpdmVzIHRoZSBwYWNrZXQgaXQgYXBwZWFycyBvbiBpdHMgcGFpciBhbmQgdmljZVxcbiA0NDE6XFx0XFx0ICB2ZXJzYS5cXG4gNDQyOlxcdFxcbiA0NDM6XFx0Y29uZmlnIFZJUlRJT19ORVRcXG4gNDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0aW8gbmV0d29yayBkcml2ZXJcXFwiXFxuIDQ0NTpcXHRcXHRkZXBlbmRzIG9uIFZJUlRJT1xcbiA0NDY6XFx0XFx0c2VsZWN0IE5FVF9GQUlMT1ZFUlxcbiA0NDc6XFx0XFx0c2VsZWN0IERJTUxJQlxcbiA0NDg6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiA0NDk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0Njo0MS40MjI1NjkyMzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIyNjE0MjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBYRFAvQlBGIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgcmVnYXJkaW5nIFhEUCBhbmQgQlBGIGNvbmZpZ3VyYXRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzY2FuIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgY29uZmlncy4gSSdsbCBmb2N1cyBvbiBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCDigJMgdGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aG9zZS5cblxuQmV5b25kIHRob3NlIGJhc2ljcywgSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGF0IGhvdyBgYnBmX3hkcF9hZGp1c3RfdGFpbGAgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBlbmFibGVkIHVuZGVyIGVpdGhlciBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciBgQ09ORklHX05FVGAsIG9yIHBlcmhhcHMgYm90aC4gVGhhdCB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmN5IHNldHVwLiBJJ20gaGVhZGluZyB0byBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjQ1LjY0ODcxNTQ5MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1ODA5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3hkcF9hZGp1c3RfdGFpbF9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz00NDMwPUJQRl9DQUxMXzIoYnBmX3hkcF9hZGp1c3RfdGFpbCwgc3RydWN0IHhkcF9idWZmICosIHhkcCwgaW50LCBvZmZzZXQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NDU3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ0NTg6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2FkanVzdF90YWlsX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0NTktXFx0LmZ1bmNcXHRcXHQ9IGJwZl94ZHBfYWRqdXN0X3RhaWwsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NzY2PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODc4My1cXHRjYXNlIEJQRl9GVU5DX3hkcF9hZGp1c3RfdGFpbDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4Nzg0OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3hkcF9hZGp1c3RfdGFpbF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg1LVxcdGNhc2UgQlBGX0ZVTkNfeGRwX2dldF9idWZmX2xlbjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDY6NDUuNzE4MzAzNTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA3NDkzMTI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaWdnaW5nIGludG8gdGhlIE5ldGxpbmsgQnVpbGQgUHJvY2VzcyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldGxpbmsgbW9kdWxlcyBhcmUgYXNzZW1ibGVkLCBzcGVjaWZpY2FsbHkgYGRldi5jYCBhbmQgYGZpbHRlci5jYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIGZvciB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIEl0J2xsIHNob3cgbWUgaG93IHRoZXNlIHNwZWNpZmljIEMgZmlsZXMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbmNvcnBvcmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBrZXJuZWwgbW9kdWxlIG9yIGV4ZWN1dGFibGUuIFRoaXMgYE1ha2VmaWxlYCBpcyB0aGUgUm9zZXR0YSBTdG9uZSBmb3IgdW5kZXJzdGFuZGluZyB0aGlzIGJ1aWxkIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0Njo1MC43OTMyMzc3NzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjQ2NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbHRlclxcXFwub3xkZXZcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9jb3JlLm9cXG5uZXQvY29yZS9NYWtlZmlsZS0xMS1cXG5uZXQvY29yZS9NYWtlZmlsZToxMjpvYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0Njo1MC44Njg4ODgyMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDc5MzMwNjE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBOZXR3b3JrL0JQRiBDb2RlIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIG5vdGluZyB0aGF0IGBkZXYub2AgYW5kIGBmaWx0ZXIub2AgYXJlIGJ1aWx0IHdpdGggYENPTkZJR19ORVQ9eWAsIHdoaWNoIGlzIGV4cGVjdGVkLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCBmb3IgQlBGIHByb2dyYW1zIGFuZCBYRFAsIGFuZCBgQ09ORklHX1ZFVEhgIGlzIGVuYWJsZWQgZm9yIHZldGggc3VwcG9ydC4gR29vZC5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMuIEkndmUgcGlucG9pbnRlZCBzZXZlcmFsOiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpbiBgbmV0L2NvcmUvZGV2LmNgLCB3aGljaCBpcyBkaXJlY3RseSBtb2RpZmllZCB0byBzZXQgYHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcClgIG9uIG5vbmxpbmVhciBza2JzLiBgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZmAgaW4gYGRyaXZlcnMvbmV0L3ZldGguY2AsIHdoaWNoIGFsc28gbWFuaXB1bGF0ZXMgZnJhZ21lbnRzIGJ5IHNldHRpbmcgYHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcClgLiAgYGJwZl94ZHBfc2hyaW5rX2RhdGFgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgaW1wb3J0YW50OyBpdCBjaGVja3MgYHhkcF9idWZmX2lzX2ZyYWdfcHAoeGRwKWAgYW5kIHNldHMgYG1lbV90eXBlYC4gQW5kIGZpbmFsbHksIHRoZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgYW5kIGB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZmAgaW4gYGluY2x1ZGUvbmV0L3hkcC5oYC4gVGhlc2UgYXJlIGltcG9ydGFudCBiZWNhdXNlIHdlIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgdGhlaXIgbm9uLXN0YXRpYyBjYWxsZXJzIHJlc2lkZS5cblxuTm93LCBsZXQncyBhY2NvdW50IGZvciB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIG9mIHRob3NlIHN0YXRpYyBpbmxpbmVzIG9yIGRpcmVjdCBlbnRyeXBvaW50cywgc2luY2UgdGhlc2Ugd2lsbCBiZSBpbXBvcnRhbnQgZm9yIGNvdmVyYWdlOiBgYnBmX3hkcF9mcmFnc19zaHJpbmtfdGFpbGAgb3IgYGJwZl94ZHBfYWRqdXN0X3RhaWxgLCBgYnBmX3hkcF9wdWxsX2RhdGFgLCBgdmV0aF94ZHBfcmN2X29uZWAsIGB2ZXRoX3hkcF9yY3Zfc2tiYCwgYW5kIGBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwYC5cblxuU2luY2UgYGJwZl94ZHBfc2hyaW5rX2RhdGFgIGlzIHN0YXRpYywgSSdtIGluY2x1ZGluZyBgYnBmX3hkcF9hZGp1c3RfdGFpbGAsIGBicGZfeGRwX3B1bGxfZGF0YWAsIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLCBgdmV0aF94ZHBfcmN2X3NrYmAsIGFuZCBgdmV0aF94ZHBfcmN2X29uZWAuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIHN5bWJvbCBuYW1lcyBmb3IgYGJwZl94ZHBfYWRqdXN0X3RhaWxgLiBCYXNlZCBvbiB0aGUga2VybmVsIHZtbGludXgsIEknbSBjb25maXJtaW5nIHRoYXQgYEJQRl9DQUxMXzIoYnBmX3hkcF9hZGp1c3RfdGFpbCwgLi4uKWAgcmVzb2x2ZXMgdG8gYF9fX2JwZl94ZHBfYWRqdXN0X3RhaWxgIG9yIGBicGZfeGRwX2FkanVzdF90YWlsYC4gYGJwZl94ZHBfcHVsbF9kYXRhYCB1c2VzIGBfX2JwZl9rZnVuY2AuIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIGdsb2JhbCwgYW5kIGBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwYCBpcyBzdGF0aWMuXG5cblRoZSBmdXp6aW5nIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGFic29sdXRlbHkgXCJXb3J0aEZ1enppbmdcIiBiZWNhdXNlIGl0IHRvdWNoZXMgbmV0d29yayBhbmQgQlBGIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kLCBpbXBvcnRhbnRseSwgZml4ZXMgYSBtZW1vcnkgbGVhayBvciBiYWQgcGFnZSBzdGF0ZSB3aGVuIHNocmlua2luZyBmcmFnbWVudHMgb24gZ2VuZXJpYyBYRFAgYW5kIHZldGguXG5cblRoZSBmaW5hbCBcIkZvY3VzU3ltYm9sc1wiIGxpc3QgaXM6XG4qICAgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGBcbiogICBgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZmBcbiogICBgYnBmX3hkcF9zaHJpbmtfZGF0YWBcbiogICBgYnBmX3hkcF9hZGp1c3RfdGFpbGBcbiogICBgYnBmX3hkcF9wdWxsX2RhdGFgXG4qICAgYHZldGhfeGRwX3Jjdl9za2JgXG4qICAgYHZldGhfeGRwX3Jjdl9vbmVgXG5cbkFuZCB0aGUgcmVxdWlyZWQgXCJFbmFibGVDb25maWdzXCIgYXJlOlxuKiAgIGBORVRgXG4qICAgYEJQRl9TWVNDQUxMYFxuKiAgIGBWRVRIYFxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIEV2ZXJ5dGhpbmcgaGFzIGJlZW4gY29uc2lkZXJlZCBhbmQgZG91YmxlLWNoZWNrZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTE5LCJPdXRwdXRUb2tlbnMiOjIwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MDEuNjYyMTk2MjExWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MTc5MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJWRVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gICAgXCJicGZfeGRwX2FkanVzdF90YWlsXCIsXG4gICAgXCJicGZfeGRwX3B1bGxfZGF0YVwiLFxuICAgIFwiYnBmX3hkcF9zaHJpbmtfZGF0YVwiLFxuICAgIFwidmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZlwiLFxuICAgIFwidmV0aF94ZHBfcmN2X3NrYlwiLFxuICAgIFwidmV0aF94ZHBfcmN2X29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFhEUCBmcmFnbWVudCBoYW5kbGluZyBsb2dpYyBhY3Jvc3MgY29yZSBuZXR3b3JraW5nLCBnZW5lcmljIFhEUCwgYW5kIHRoZSB2ZXRoIGRyaXZlciB0byBwcm9wZXJseSB0cmFjayBwYWdlX3Bvb2wgYmFja2VkIGZyYWdtZW50cyB3aGVuIHNocmlua2luZyBYRFAgYnVmZmVycy4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2VzICh2ZXRoLCB0dW4vdGFwKSBhbmQgQlBGL1hEUCBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJWRVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gICAgXCJicGZfeGRwX2FkanVzdF90YWlsXCIsXG4gICAgXCJicGZfeGRwX3B1bGxfZGF0YVwiLFxuICAgIFwiYnBmX3hkcF9zaHJpbmtfZGF0YVwiLFxuICAgIFwidmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZlwiLFxuICAgIFwidmV0aF94ZHBfcmN2X3NrYlwiLFxuICAgIFwidmV0aF94ZHBfcmN2X29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFhEUCBmcmFnbWVudCBoYW5kbGluZyBsb2dpYyBhY3Jvc3MgY29yZSBuZXR3b3JraW5nLCBnZW5lcmljIFhEUCwgYW5kIHRoZSB2ZXRoIGRyaXZlciB0byBwcm9wZXJseSB0cmFjayBwYWdlX3Bvb2wgYmFja2VkIGZyYWdtZW50cyB3aGVuIHNocmlua2luZyBYRFAgYnVmZmVycy4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2VzICh2ZXRoLCB0dW4vdGFwKSBhbmQgQlBGL1hEUCBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MDEuNzcwMzgyMzM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTc0NjU0MTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ3OjAxLjc3MDg5ODA4NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5NzQ2MDE5NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHRoZSBpbnRlcm5hbCBmbGFnIGBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MYCB0byBgeGRwX2J1ZmZgIHRvIHRyYWNrIHdoZXRoZXIgbm9ubGluZWFyIHNrYiBmcmFnbWVudHMgd2VyZSBDT1cnZCBpbnRvIGEgYHBhZ2VfcG9vbGAuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYW4gWERQIHByb2dyYW0gc2hyaW5rcyB0aGUgYnVmZmVyIGFuZCByZWxlYXNlcyBmcmFnbWVudHMsIHRoZXkgYXJlIHByb3Blcmx5IGZyZWVkIGJhY2sgdG8gdGhlIHBhZ2UgcG9vbCByYXRoZXIgdGhhbiB0aHJvdWdoIGBwYWdlX2ZyYWdfZnJlZSgpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwYWdlIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgYWxsb2NhdG9yIHR5cGUgbWlzbWF0Y2ggYnVnICh3aGljaCB3b3VsZCBtYW5pZmVzdCBhcyBwYWdlIHBvb2wgbGVha3MsIGJhZCBwYWdlIHN0YXRlLCBvciBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nIGxlYWtzLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGludmFsaWQgbWVtb3J5IGZyZWUpIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgcGFnZS9yZWZjb3VudCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0NjQyZjIxZjE4MDE2MGU1MzQ2Mzk2YWU2OGQ2MGMzMjkzZTgzMDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNDo0NTozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuaW5kZXggNmVkM2VlODExNTNmYi4uYTNmZGYxOTU5Yjc2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3ZldGguY1xuKysrIGIvZHJpdmVycy9uZXQvdmV0aC5jXG5AQCAtNzc1LDYgKzc3NSwxMiBAQCBzdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxuIFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncykge1xuIFx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNleGRwX2ZyYWdzX3NpemUgPSBza2ItXHUwMDNlZGF0YV9sZW47XG4gXHRcdHhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7XG4rXHRcdC8qXG4rXHRcdCAqIEEgbm9ubGluZWFyIHNrYiB3YXMgY293J2QgaW50byBycS1cdTAwM2VwYWdlX3Bvb2wgYWJvdmUsIHNvIHRoZVxuK1x0XHQgKiBmcmFncyBtdXN0IGJlIGZyZWVkIHRvIHRoYXQgcG9vbCwgbm90IHZpYSB0aGUgcnhxJ3NcbitcdFx0ICogTUVNX1RZUEVfUEFHRV9TSEFSRUQuXG4rXHRcdCAqL1xuK1x0XHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xuIFx0fSBlbHNlIHtcbiBcdFx0eGRwX2J1ZmZfY2xlYXJfZnJhZ3NfZmxhZyh4ZHApO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcC5oIGIvaW5jbHVkZS9uZXQveGRwLmhcbmluZGV4IGFhNzQyZjQxM2MzNTguLjhmZDQxMzllOWNiZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZHAuaFxuKysrIGIvaW5jbHVkZS9uZXQveGRwLmhcbkBAIC04MSw2ICs4MSwxNCBAQCBlbnVtIHhkcF9idWZmX2ZsYWdzIHtcbiBcdCAqIFhEUCBwcm9ncmFtIGlzIG5vdCBhdHRhY2hlZC5cbiBcdCAqL1xuIFx0WERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEVcdD0gQklUKDIpLFxuK1x0LypcbitcdCAqIGZyYWdzIGFyZSBwYWdlX3Bvb2wgbWVtb3J5IGV2ZW4gdGhvdWdoIHJ4cS1cdTAwM2VtZW0udHlwZSBpcyBub3Q6IGFcbitcdCAqIHNrYi1iYWNrZWQgWERQIGJ1ZmYgKGdlbmVyaWMgWERQLCB2ZXRoKSBpcyBjb3cnZCBpbnRvIGEgcGFnZV9wb29sLlxuK1x0ICogeGRwX2J1ZmYgb25seTogYW4geGRwX2ZyYW1lIGRlc2NyaWJlcyBpdHMgbWVtb3J5IHdpdGggOjptZW1fdHlwZSwgc29cbitcdCAqIHRoaXMgaXMgc3RyaXBwZWQgaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSBhbmQgcmUtZGVyaXZlZCBmcm9tXG4rXHQgKiA6Om1lbV90eXBlIGluIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoKS5cbitcdCAqL1xuK1x0WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTFx0PSBCSVQoMyksXG4gfTtcbiBcbiBzdHJ1Y3QgeGRwX2J1ZmYge1xuQEAgLTEzMSw2ICsxMzksMTYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHhkcF9idWZmX3NldF9mcmFnX3VucmVhZGFibGUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4gXHR4ZHAtXHUwMDNlZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEU7XG4gfVxuIFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB4ZHBfYnVmZl9zZXRfZnJhZ19wcChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbit7XG4rXHR4ZHAtXHUwMDNlZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHhkcF9idWZmX2lzX2ZyYWdfcHAoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApXG4re1xuK1x0cmV0dXJuICEhKHhkcC1cdTAwM2VmbGFncyBcdTAwMjYgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHhkcF9idWZmX2dldF9za2JfZmxhZ3MoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApXG4ge1xuIFx0cmV0dXJuIHhkcC1cdTAwM2VmbGFncztcbkBAIC0zOTQsNiArNDEyLDE1IEBAIHZvaWQgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSxcbiBcdHhkcC1cdTAwM2VkYXRhX21ldGEgPSBmcmFtZS1cdTAwM2VkYXRhIC0gZnJhbWUtXHUwMDNlbWV0YXNpemU7XG4gXHR4ZHAtXHUwMDNlZnJhbWVfc3ogPSBmcmFtZS1cdTAwM2VmcmFtZV9zejtcbiBcdHhkcC1cdTAwM2VmbGFncyA9IGZyYW1lLVx1MDAzZWZsYWdzO1xuK1x0LypcbitcdCAqIGZyYW1lLVx1MDAzZWZsYWdzIG5ldmVyIGNhcnJpZXMgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCAoaXQgaXMgc3RyaXBwZWRcbitcdCAqIGluIHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKCkpOyByZS1kZXJpdmUgaXQgZnJvbSB0aGUgZnJhbWUncyBvd25cbitcdCAqIG1lbW9yeSB0eXBlLiB2ZXRoIGFuZCBkZXZtYXAgcmVidWlsZCBhIGJ1ZmYgaGVyZSBhbmQgcnVuIGEgcHJvZ3JhbVxuK1x0ICogd2hvc2UgcnhxIHNheXMgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIHNvIHdpdGhvdXQgdGhpcyBhIHNocmluayB3b3VsZFxuK1x0ICogZnJlZSBhIHBhZ2VfcG9vbCBmcmFnIHRocm91Z2ggcGFnZV9mcmFnX2ZyZWUoKS5cbitcdCAqL1xuK1x0aWYgKGZyYW1lLVx1MDAzZW1lbV90eXBlID09IE1FTV9UWVBFX1BBR0VfUE9PTClcbitcdFx0eGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZVxuQEAgLTQyMCw3ICs0NDcsOCBAQCBpbnQgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4gXHR4ZHBfZnJhbWUtXHUwMDNlaGVhZHJvb20gPSBoZWFkcm9vbSAtIHNpemVvZigqeGRwX2ZyYW1lKTtcbiBcdHhkcF9mcmFtZS1cdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xuIFx0eGRwX2ZyYW1lLVx1MDAzZWZyYW1lX3N6ID0geGRwLVx1MDAzZWZyYW1lX3N6O1xuLVx0eGRwX2ZyYW1lLVx1MDAzZWZsYWdzID0geGRwLVx1MDAzZWZsYWdzO1xuK1x0LyogWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCBpcyB4ZHBfYnVmZiBvbmx5LCBkb24ndCBjYXJyeSBpdCBvdmVyICovXG4rXHR4ZHBfZnJhbWUtXHUwMDNlZmxhZ3MgPSB4ZHAtXHUwMDNlZmxhZ3MgXHUwMDI2IH5YRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDI5MGUwZjA5OWU2YmYuLjk0MjY4ZjRkM2M1ZjcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC01NTMyLDYgKzU1MzIsMTIgQEAgdTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbiBcdGlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZXhkcF9mcmFnc19zaXplID0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFx0XHR4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApO1xuK1x0XHQvKlxuK1x0XHQgKiBBIG5vbmxpbmVhciBza2Igd2FzIGNvdydkIGludG8gcGFnZV9wb29sIG1lbW9yeSBieVxuK1x0XHQgKiBza2JfY293X2RhdGFfZm9yX3hkcCgpIGJlZm9yZSB3ZSBnb3QgaGVyZSwgc28gdGhlIGZyYWdzIG11c3RcbitcdFx0ICogYmUgZnJlZWQgdG8gdGhhdCBwb29sLCBub3QgdmlhIHRoZSByeHEncyBNRU1fVFlQRV9QQUdFX1NIQVJFRC5cbitcdFx0ICovXG4rXHRcdHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR4ZHBfYnVmZl9jbGVhcl9mcmFnc19mbGFnKHhkcCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uZDM0YmE1NmQ3OWQ4ZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTQzNzgsNiArNDM3OCwxMyBAQCBzdGF0aWMgYm9vbCBicGZfeGRwX3Nocmlua19kYXRhKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBza2JfZnJhZ190ICpmcmFnLFxuIFx0aWYgKG1lbV90eXBlID09IE1FTV9UWVBFX1hTS19CVUZGX1BPT0wpIHtcbiBcdFx0bmV0bWVtID0gMDtcbiBcdFx0emNfZnJhZyA9IGJwZl94ZHBfc2hyaW5rX2RhdGFfemMoeGRwLCBzaHJpbmssIHRhaWwsIHJlbGVhc2UpO1xuK1x0fSBlbHNlIGlmICh4ZHBfYnVmZl9pc19mcmFnX3BwKHhkcCkpIHtcbitcdFx0LypcbitcdFx0ICogU2tiLWJhY2tlZCBYRFAgKGdlbmVyaWMgWERQLCB2ZXRoKSBjb3cncyB0aGUgZnJhZ3MgaW50byBhXG4rXHRcdCAqIHBhZ2VfcG9vbCB3aGlsZSB0aGUgcnhxIHN0YXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBmcmVlXG4rXHRcdCAqIHRoZSBmcmFnIHRvIHRoZSBwb29sLCBub3QgdmlhIHBhZ2VfZnJhZ19mcmVlKCkuXG4rXHRcdCAqL1xuK1x0XHRtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfUE9PTDtcbiBcdH1cbiBcbiBcdGlmIChyZWxlYXNlKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU4ZjkwMzRhMjY4NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXG5AQCAtMCwwICsxLDI4OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl90dW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJ4ZHBfc2hyaW5rX2ZyYWdzLnNrZWwuaFwiXG4rXG4rLypcbisgKiBBIGdlbmVyaWMtWERQIHByb2dyYW0gdGhhdCBzaHJpbmtzIGludG8gdGhlIGZyYWdzIGZyZWVzIGEgcGFnZV9wb29sIGZyYWcuXG4rICogc2tiLWJhY2tlZCBYRFAgZmlyc3QgY293J3MgdGhlIG5vbmxpbmVhciBza2IgaW50byBwYWdlX3Bvb2wgbWVtb3J5XG4rICogKHNrYl9jb3dfZGF0YV9mb3JfeGRwKCkgZm9yIGdlbmVyaWMgWERQLCBza2JfcHBfY293X2RhdGEoKSBmb3IgdmV0aCksIGJ1dFxuKyAqIHRoZSBzaGFyZWQgcnhxIGlzIHJlZ2lzdGVyZWQgYXMgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIHNvIGEgYnVnZ3kga2VybmVsXG4rICogZnJlZXMgdGhlIGZyYWcgd2l0aCBwYWdlX2ZyYWdfZnJlZSgpIC1cdTAwM2UgXCJCYWQgcGFnZSBzdGF0ZSAuLi4gcGFnZV9wb29sIGxlYWtcIi5cbisgKi9cbitcbisjZGVmaW5lIFRBUF9OQU1FXHRcInhkcF9zaHJpbmswXCJcbisjZGVmaW5lIFRBUF9ORVROU1x0XCJ4ZHBfc2hyaW5rX3RhcFwiXG4rXG4rI2RlZmluZSBOU19OQU1FX01BWF9MRU5cdDMyXG4rI2RlZmluZSBWRVRIX0xPQ0FMXHRcInhkcF9zaHJpbmtBXCJcbisjZGVmaW5lIFZFVEhfUEVFUlx0XCJ4ZHBfc2hyaW5rQlwiXG4rI2RlZmluZSBWRVRIX0xPQ0FMX0lQXHRcIjEwLjkuOS4xXCJcbisjZGVmaW5lIFZFVEhfUEVFUl9JUFx0XCIxMC45LjkuMlwiXG4rI2RlZmluZSBWRVRIX0xPQ0FMX01BQ1x0XCIwMjowMDowMDowMDowMDowMVwiXG4rXG4rLypcbisgKiBza2JfcHBfY293X2RhdGEoKSBrZWVwcyB1cCB0byBvbmUgcGFnZSBpbiB0aGUgbGluZWFyIHBhcnQsIHNvIHRoZSBwYWNrZXRcbisgKiBzaXplcyBiZWxvdyBvbmx5IGxlYXZlIGEgZnJhZyAoc21hbGxlciB0aGFuIHRoZSAzMDAwLWJ5dGUgc2hyaW5rLCBzbyBpdCBpc1xuKyAqIHJlbGVhc2VkIGFzIGEgd2hvbGUpIG9uIDRLIHBhZ2VzLiBTa2lwIGVsc2V3aGVyZSByYXRoZXIgdGhhbiBydW4gYSB0ZXN0XG4rICogdGhhdCBjYW5ub3QgdGVsbCBhIGZpeGVkIGtlcm5lbCBmcm9tIGEgYnVnZ3kgb25lLlxuKyAqL1xuKyNkZWZpbmUgUEFHRV9TSVpFXzRLXHQ0MDk2XG4rXG4rLypcbisgKiBHZW5lcm91cywgc28gYSBsb2FkZWQgQ0kgZG9lcyBub3QgZmFpbCB0aGUgYXNzZXJ0IHByZW1hdHVyZWx5OyBub3JtYWxseVxuKyAqIHRoZSBmaXJzdCBjaGVjayBhbHJlYWR5IHN1Y2NlZWRzLlxuKyAqL1xuKyNkZWZpbmUgV0FJVF9JVEVSU1x0MTAwMDBcbisjZGVmaW5lIFdBSVRfVVNcdFx0MTAwMFxuK1xuK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3Byb2coc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBXQUlUX0lURVJTIFx1MDAyNlx1MDAyNiAhc2tlbC1cdTAwM2Vic3MtXHUwMDNlc2hyaW5rX3JhbjsgaSsrKVxuK1x0XHR1c2xlZXAoV0FJVF9VUyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY3JlYXRlX3RhcF9uYXBpX2ZyYWdzKGNvbnN0IGNoYXIgKmlmbmFtZSlcbit7XG4rXHRzdHJ1Y3QgaWZyZXEgaWZyID0ge1xuK1x0XHQuaWZyX2ZsYWdzID0gSUZGX1RBUCB8IElGRl9OT19QSSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MsXG4rXHR9O1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRzdHJzY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTtcbitcbitcdGZkID0gb3BlbihcIi9kZXYvbmV0L3R1blwiLCBPX1JEV1IpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0ZXJyID0gaW9jdGwoZmQsIFRVTlNFVElGRiwgXHUwMDI2aWZyKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZXJyID0gLWVycm5vO1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuKy8qXG4rICogU2ltaWxhciB0byBmbG93X2Rpc3NlY3Rvci5jOiB3cml0ZXYoKSBhbiBJRkZfTkFQSV9GUkFHUyB0YXAgdG8gYnVpbGQgYVxuKyAqIG5vbmxpbmVhciBza2IgdGhhdCB0dW4gcnVucyB0aHJvdWdoIGRvX3hkcF9nZW5lcmljKCkuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdF90dW4oc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpXG4re1xuK1x0X191OCBoZWFkWzc0XSwgZnJhZzFbMjA0OF0sIGZyYWcyWzIwNDhdO1xuK1x0c3RydWN0IGV0aGhkciAqZXRoID0gKHZvaWQgKiloZWFkO1xuK1x0aW50IHRhcF9mZCA9IC0xLCBpZmluZGV4LCBlcnI7XG4rXHRzdHJ1Y3QgbmV0bnNfb2JqICpucyA9IE5VTEw7XG4rXHRzdHJ1Y3QgaW92ZWMgaW92WzNdO1xuK1x0c3NpemVfdCBuO1xuK1xuK1x0aWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0bnMgPSBuZXRuc19uZXcoVEFQX05FVE5TLCB0cnVlKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihucywgXCJuZXRuc19uZXdcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHRhcF9mZCA9IGNyZWF0ZV90YXBfbmFwaV9mcmFncyhUQVBfTkFNRSk7XG4rXHRpZiAoIUFTU0VSVF9HRSh0YXBfZmQsIDAsIFwiY3JlYXRlX3RhcFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRTWVMob3V0LCBcImlwIGxpbmsgc2V0IGRldiBcIiBUQVBfTkFNRSBcIiB1cFwiKTtcbitcbitcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChUQVBfTkFNRSk7XG4rXHRpZiAoIUFTU0VSVF9HVChpZmluZGV4LCAwLCBcImlmX25hbWV0b2luZGV4XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNocmlua19yYW4gPSAwO1xuK1xuK1x0ZXJyID0gYnBmX3hkcF9hdHRhY2goaWZpbmRleCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MueGRwX3NocmluayksXG4rXHRcdFx0ICAgICAwLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfeGRwX2F0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRtZW1zZXQoaGVhZCwgMCwgc2l6ZW9mKGhlYWQpKTtcbitcdG1lbXNldChmcmFnMSwgMHg0MSwgc2l6ZW9mKGZyYWcxKSk7XG4rXHRtZW1zZXQoZnJhZzIsIDB4NDIsIHNpemVvZihmcmFnMikpO1xuK1x0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4rXG4rXHRpb3ZbMF0uaW92X2Jhc2UgPSBoZWFkOyAgaW92WzBdLmlvdl9sZW4gPSBzaXplb2YoaGVhZCk7XG4rXHRpb3ZbMV0uaW92X2Jhc2UgPSBmcmFnMTsgaW92WzFdLmlvdl9sZW4gPSBzaXplb2YoZnJhZzEpO1xuK1x0aW92WzJdLmlvdl9iYXNlID0gZnJhZzI7IGlvdlsyXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcyKTtcbitcbitcdG4gPSB3cml0ZXYodGFwX2ZkLCBpb3YsIEFSUkFZX1NJWkUoaW92KSk7XG4rXHRBU1NFUlRfRVEobiwgc2l6ZW9mKGhlYWQpICsgc2l6ZW9mKGZyYWcxKSArIHNpemVvZihmcmFnMiksIFwid3JpdGV2XCIpO1xuK1xuK1x0d2FpdF9mb3JfcHJvZyhza2VsKTtcbitcdC8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzIFwicGFnZV9wb29sIGxlYWtcIiwgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovXG4rXHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc2hyaW5rX3JhbiwgMCwgXCJ4ZHBfcHJvZ19yYW5cIik7XG4rXG4rXHRicGZfeGRwX2RldGFjaChpZmluZGV4LCAwLCBOVUxMKTtcbitvdXQ6XG4rXHRpZiAodGFwX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodGFwX2ZkKTtcbitcdG5ldG5zX2ZyZWUobnMpO1xuK31cbitcbisvKlxuKyAqIEJvdGggdmV0aCBlbmRzIGxpdmUgaW4gdGhlaXIgb3duIG5hbWVzcGFjZSwgc28gdGhlIHRyYWZmaWMgcmVhbGx5IGNyb3NzZXNcbisgKiB0aGUgcGFpciBhbmQgbm90aGluZyBpcyBjcmVhdGVkIGluIHRoZSBjYWxsZXIncyBuYW1lc3BhY2UuXG4rICovXG4rc3RhdGljIGludCB2ZXRoX3NldHVwKGNoYXIgKm5zMCwgY2hhciAqbnMxKVxuK3tcbitcdGlmICghQVNTRVJUX09LKGFwcGVuZF90aWQobnMwLCBOU19OQU1FX01BWF9MRU4pLCBcImFwcGVuZF90aWQgbnMwXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoIUFTU0VSVF9PSyhhcHBlbmRfdGlkKG5zMSwgTlNfTkFNRV9NQVhfTEVOKSwgXCJhcHBlbmRfdGlkIG5zMVwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0U1lTKGZhaWwsIFwiaXAgbmV0bnMgYWRkICVzXCIsIG5zMCk7XG4rXHRTWVMoZmFpbF9uczAsIFwiaXAgbmV0bnMgYWRkICVzXCIsIG5zMSk7XG4rXHRTWVMoZmFpbF9uczEsIFwiaXAgLW4gJXMgbGluayBhZGQgJXMgbXR1IDgwMDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlcyBtdHUgODAwMFwiLFxuK1x0ICAgIG5zMCwgVkVUSF9MT0NBTCwgVkVUSF9QRUVSKTtcbitcdFNZUyhmYWlsX25zMSwgXCJpcCAtbiAlcyBsaW5rIHNldCAlcyBuZXRucyAlc1wiLCBuczAsIFZFVEhfUEVFUiwgbnMxKTtcbitcdFNZUyhmYWlsX25zMSwgXCJpcCAtbiAlcyBsaW5rIHNldCAlcyBhZGRyZXNzICVzXCIsIG5zMCwgVkVUSF9MT0NBTCxcbitcdCAgICBWRVRIX0xPQ0FMX01BQyk7XG4rXHRTWVMoZmFpbF9uczEsIFwiaXAgLW4gJXMgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCIsIG5zMCwgVkVUSF9MT0NBTF9JUCxcbitcdCAgICBWRVRIX0xPQ0FMKTtcbitcdFNZUyhmYWlsX25zMSwgXCJpcCAtbiAlcyBsaW5rIHNldCAlcyB1cFwiLCBuczAsIFZFVEhfTE9DQUwpO1xuK1x0U1lTKGZhaWxfbnMxLCBcImlwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlc1wiLCBuczEsIFZFVEhfUEVFUl9JUCxcbitcdCAgICBWRVRIX1BFRVIpO1xuK1x0U1lTKGZhaWxfbnMxLCBcImlwIC1uICVzIGxpbmsgc2V0ICVzIHVwXCIsIG5zMSwgVkVUSF9QRUVSKTtcbitcbitcdHJldHVybiAwO1xuK1xuK2ZhaWxfbnMxOlxuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczEpO1xuK2ZhaWxfbnMwOlxuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczApO1xuK2ZhaWw6XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZldGhfY2xlYW51cChjb25zdCBjaGFyICpuczAsIGNvbnN0IGNoYXIgKm5zMSlcbit7XG4rXHQvKiBEcm9wcGluZyB0aGUgbmFtZXNwYWNlcyB0YWtlcyB0aGUgdmV0aCBwYWlyIGFuZCBpdHMgWERQIHByb2dyYW1zLiAqL1xuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczEpO1xuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczApO1xuK31cbitcbitzdGF0aWMgaW50IHZldGhfYXR0YWNoKGNvbnN0IGNoYXIgKm5zLCBjb25zdCBjaGFyICpkZXYsIGludCBwcm9nX2ZkKVxuK3tcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xuK1x0aW50IGlmaW5kZXgsIGVycjtcbitcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKG5zKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChkZXYpO1xuK1x0aWYgKCFBU1NFUlRfR1QoaWZpbmRleCwgMCwgXCJpZl9uYW1ldG9pbmRleFwiKSkge1xuK1x0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0ZXJyID0gYnBmX3hkcF9hdHRhY2goaWZpbmRleCwgcHJvZ19mZCwgMCwgTlVMTCk7XG4rXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcbitcdHJldHVybiBBU1NFUlRfT0soZXJyLCBcImJwZl94ZHBfYXR0YWNoXCIpID8gMCA6IC0xO1xuK31cbitcbisvKiBBIGxhcmdlIHBpbmcgYnVpbGRzIGEgbm9ubGluZWFyIHNrYiB0aGF0IHZldGggY293J3MgaW50byBpdHMgcGFnZV9wb29sLiAqL1xuK3N0YXRpYyB2b2lkIHRlc3RfdmV0aChzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbClcbit7XG4rXHRjaGFyIG5zMFtOU19OQU1FX01BWF9MRU5dID0gXCJ4ZHBfc2hyaW5rX25zMC1cIjtcbitcdGNoYXIgbnMxW05TX05BTUVfTUFYX0xFTl0gPSBcInhkcF9zaHJpbmtfbnMxLVwiO1xuK1xuK1x0aWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHZldGhfc2V0dXAobnMwLCBuczEpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuID0gMDtcbitcbitcdGlmICh2ZXRoX2F0dGFjaChuczAsIFZFVEhfTE9DQUwsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9zaHJpbmspKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZXhlYyAlcyBwaW5nIC1xIC1zIDUwMDAgLWMgMyAtVyAxICVzXCIsXG4rXHRcdCAgIG5zMSwgVkVUSF9MT0NBTF9JUCk7XG4rXG4rXHR3YWl0X2Zvcl9wcm9nKHNrZWwpO1xuK1x0LyogYSBidWdneSBrZXJuZWwgb25seSBzcGxhdHMgXCJwYWdlX3Bvb2wgbGVha1wiLCBpdCBkb2VzIG5vdCBmYWlsIGhlcmUgKi9cbitcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuLCAwLCBcInhkcF9wcm9nX3JhblwiKTtcbitvdXQ6XG4rXHR2ZXRoX2NsZWFudXAobnMwLCBuczEpO1xuK31cbitcbisvKlxuKyAqIExPQ0FMIGNvdydzIHRoZSBpbmNvbWluZyBza2IgYW5kIHJldHVybnMgWERQX1RYLCBzbyB0aGUgYnVmZiBpcyB0dXJuZWQgaW50b1xuKyAqIGFuIHhkcF9mcmFtZSBhbmQgYm91bmNlZCB0byBQRUVSLCB3aGljaCBzaHJpbmtzIGEgZnJhZy4gQSBwYWdlX3Bvb2wgdGFnXG4rICogcmVjb3JkZWQgb24gdGhlIGJ1ZmYgbXVzdCBub3QgbGVhayBpbnRvIHRoZSBmcmFtZSwgb3IgUEVFUiBmcmVlcyBhIHBsYWluXG4rICogcGFnZSAod2hvc2UgcHAgd2FzIGFscmVhZHkgY2xlYXJlZCBvbiB0aGUgWERQX1RYIHNpZGUpIGFzIHBhZ2VfcG9vbCBtZW1vcnkuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdF92ZXRoX3R4KHN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsKVxuK3tcbitcdGNoYXIgbnMwW05TX05BTUVfTUFYX0xFTl0gPSBcInhkcF9zaHJpbmtfdHgwLVwiO1xuK1x0Y2hhciBuczFbTlNfTkFNRV9NQVhfTEVOXSA9IFwieGRwX3Nocmlua190eDEtXCI7XG4rXG4rXHRpZiAoZ2V0cGFnZXNpemUoKSAhPSBQQUdFX1NJWkVfNEspIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAodmV0aF9zZXR1cChuczAsIG5zMSkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qXG4rXHQgKiBMT0NBTCBib3VuY2VzIGV2ZXJ5dGhpbmcgKGluY2wuIEFSUCkgd2l0aCBYRFBfVFgsIHNvIHBpbiBhIHN0YXRpY1xuK1x0ICogbmVpZ2hib3VyIHRvIGxldCB0aGUgcGluZydzIHBheWxvYWQgYWN0dWFsbHkgcmVhY2ggaXQuXG4rXHQgKi9cbitcdFNZUyhvdXQsIFwiaXAgLW4gJXMgbmVpZ2ggYWRkICVzIGxsYWRkciAlcyBkZXYgJXMgbnVkIHBlcm1hbmVudFwiLFxuK1x0ICAgIG5zMSwgVkVUSF9MT0NBTF9JUCwgVkVUSF9MT0NBTF9NQUMsIFZFVEhfUEVFUik7XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuID0gMDtcbitcbitcdGlmICh2ZXRoX2F0dGFjaChuczAsIFZFVEhfTE9DQUwsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF90eCkpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICh2ZXRoX2F0dGFjaChuczEsIFZFVEhfUEVFUiwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MueGRwX3NocmluaykpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXNcIixcbitcdFx0ICAgbnMxLCBWRVRIX0xPQ0FMX0lQKTtcbitcbitcdHdhaXRfZm9yX3Byb2coc2tlbCk7XG4rXHQvKiBhIGJ1Z2d5IGtlcm5lbCBvbmx5IHNwbGF0cyBcInBhZ2VfcG9vbCBsZWFrXCIsIGl0IGRvZXMgbm90IGZhaWwgaGVyZSAqL1xuK1x0QVNTRVJUX0dUKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNocmlua19yYW4sIDAsIFwieGRwX3Byb2dfcmFuXCIpO1xuK291dDpcbitcdHZldGhfY2xlYW51cChuczAsIG5zMSk7XG4rfVxuK1xuK3ZvaWQgdGVzdF94ZHBfc2hyaW5rX2ZyYWdzKHZvaWQpXG4re1xuK1x0c3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWw7XG4rXG4rXHRza2VsID0geGRwX3Nocmlua19mcmFnc19fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidHVuXCIpKVxuK1x0XHR0ZXN0X3R1bihza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidmV0aFwiKSlcbitcdFx0dGVzdF92ZXRoKHNrZWwpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ2ZXRoX3R4XCIpKVxuK1x0XHR0ZXN0X3ZldGhfdHgoc2tlbCk7XG4rXG4rXHR4ZHBfc2hyaW5rX2ZyYWdzX19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zaHJpbmtfZnJhZ3MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFkODk1YWI2OTkzMDNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmNcbkBAIC0wLDAgKzEsMzQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuK1xuK2ludCBzaHJpbmtfcmFuO1xuK1xuK1NFQyhcInhkcC5mcmFnc1wiKVxuK2ludCB4ZHBfc2hyaW5rKHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHQvKlxuK1x0ICogUnVucyBvbiBib3RoIHNrYi1iYWNrZWQgWERQIHBhdGhzIChnZW5lcmljIFhEUCB2aWEgdHVuLCBhbmQgdmV0aCk6XG4rXHQgKiB0aGUgbm9ubGluZWFyIHNrYiBpcyBjb3cnZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYmVmb3JlIHdlIHJ1biwgc29cbitcdCAqIHNocmlua2luZyB0aGUgdGFpbCByZWxlYXNlcyBhIHdob2xlIGZyYWcgdGhhdCBoYXMgdG8gZ28gYmFjayB0byB0aGF0XG4rXHQgKiBwb29sLiBUaGUgY291bnRlciBvbmx5IHRlbGxzIHVzIHRoZSBwcm9ncmFtIHJhbiBhbmQgdGhlIGhlbHBlclxuK1x0ICogc3VjY2VlZGVkIC0tIGEgbGluZWFyIGJ1ZmYgcmV0dXJucyAwIGFzIHdlbGwgLS0gaXQgZG9lcyBub3QgcHJvdmUgYVxuK1x0ICogZnJhZyB3YXMgcmVsZWFzZWQuXG4rXHQgKi9cbitcdGlmIChicGZfeGRwX2FkanVzdF90YWlsKGN0eCwgLTMwMDApID09IDApXG4rXHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnNocmlua19yYW4sIDEpO1xuK1x0cmV0dXJuIFhEUF9QQVNTO1xuK31cbitcbitTRUMoXCJ4ZHAuZnJhZ3NcIilcbitpbnQgeGRwX3R4KHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHQvKlxuK1x0ICogQm91bmNlIHRoZSBmcmFtZSBiYWNrLiBPbiB2ZXRoIHRoaXMgdHVybnMgdGhlIGJ1ZmYgaW50byBhblxuK1x0ICogeGRwX2ZyYW1lLCB3aGljaCBpcyB3aGVyZSBhIGJ1ZmYtc2NvcGVkIHBhZ2VfcG9vbCB0YWcgbXVzdCBub3QgbGVha1xuK1x0ICogaW50byB0aGUgZnJhbWUgaGFuZGVkIHRvIHRoZSBwZWVyLlxuK1x0ICovXG4rXHRyZXR1cm4gWERQX1RYO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NzowMS43NzA4OTkxMzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA0ODY5NDAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgZmlyc3Qgc3RlcCBpcywgb2YgY291cnNlLCBhIGNhcmVmdWwgcmVhZC10aHJvdWdoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgY2hhbmdlZCBhbmQgd2hlcmUgdGhvc2UgY2hhbmdlcyBhcmUgaGFwcGVuaW5nLlxuXG5JIHNlZSBhIGxpc3Qgb2YgbW9kaWZpZWQgZmlsZXM6IGBkcml2ZXJzL25ldC92ZXRoLmNgLCBgaW5jbHVkZS9uZXQveGRwLmhgLCBgbmV0L2NvcmUvZGV2LmNgLCBgbmV0L2NvcmUvZmlsdGVyLmNgLCBhbmQgYSBzbGV3IG9mIHRlc3QgZmlsZXMuIFRoYXQncyBhIHJlYXNvbmFibGUgc2V0IHRvIGxvb2sgYXQuXG5cbiogICBgZHJpdmVycy9uZXQvdmV0aC5jYCBzaG93cyBjaGFuZ2VzIHdpdGhpbiBgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZmAsIHNwZWNpZmljYWxseSBzZXR0aW5nIGB4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApYCBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2YgZnJhZ21lbnRzIGluIHRoZSBTS0IuIFRoYXQgc291bmRzIGxpa2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBmcmFnbWVudCBoYW5kbGluZywgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGV4dHJhIHNjcnV0aW55LlxuKiAgIGBpbmNsdWRlL25ldC94ZHAuaGAgaW50cm9kdWNlcyBhIG5ldyBmbGFnLCBgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTGAsIGFsb25nIHdpdGggaGVscGVyIGZ1bmN0aW9ucyBmb3Igc2V0dGluZyBhbmQgY2hlY2tpbmcgaXQuIFRoaXMgaW5kaWNhdGVzIGEgZm9jdXMgb24gcGFnZSBwb29sIG1hbmFnZW1lbnQgb2YgZnJhZ21lbnRzIHdpdGhpbiBYRFAsIHNvIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGFuIG9idmlvdXMgYXJlYSBvZiBmb2N1cy4gQWxzbyBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgYW5kIGB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZmAgc2VlbXMgdG8gZGVhbCB3aXRoIGZsYWdzIGFuZCBtZW1vcnkgdHlwZS5cbiogICBgbmV0L2NvcmUvZGV2LmNgIHNob3dzIHRoYXQsIHdpdGhpbiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgYHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcClgIGlzIGNhbGxlZCBpZiB0aGUgU0tCIGlzIG5vbmxpbmVhciwgd2hpY2ggcmVpbmZvcmNlcyB0aGlzIGlkZWEgb2YgZnJhZ2VtZW50cyBiZWluZyBjb3JlLlxuKiAgIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgdGhlIG1vc3QgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgYGJwZl94ZHBfc2hyaW5rX2RhdGFgIGRvZXMgc29tZSBtZW1vcnkgdHlwZSBoYW5kbGluZy4gSXQgaXMgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYHhkcF9idWZmX2lzX2ZyYWdfcHBgLCBhbmQgdGhlbiBkZWFsaW5nIHdpdGggdGhlIG1lbW9yeSBhcyBhIGBNRU1fVFlQRV9QQUdFX1BPT0xgIHRvIGZyZWUgYSBmcmFnLiBUaGlzIGlzIGtleSwgYXMgYW55IHN1YnRsZSBjaGFuZ2UgaGVyZSBjb3VsZCBjcmVhdGUgaXNzdWVzLlxuXG5Pa2F5LCBsZXQgbWUgcHV0IG9uIG15IG1lbW9yeSBsZWFrIC8gdXNlLWFmdGVyLWZyZWUgaGF0LiBUaGUgY29yZSBzZWVtcyB0byBiZSBhcm91bmQgdGhpcyBpbnRlcmFjdGlvbiBiZXR3ZWVuIFNLQiBmcmFnbWVudHMsIFhEUCwgYW5kIHRoZSBwYWdlIHBvb2wuIFRoZXJlJ3MgYSBjbGVhciBicmFuY2hpbmcgYmFzZWQgb24gd2hldGhlciB0aGUgWERQIGJ1ZmZlciB1c2VzIGZyYWdtZW50cywgYW5kIHRoYXQgc2VlbXMgdG8gbGVhZCB0byBtZW1vcnkgdHlwZSBjaGFuZ2VzLiBUaGlzIHNtZWxscyBsaWtlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW5jb3JyZWN0IG1lbW9yeSBkZWFsbG9jYXRpb24gaWYgdGhlIHN0YXRlIGlzbid0IG1hbmFnZWQgY29ycmVjdGx5LlxuXG5UaGUgZmFjdCB0aGF0IGBicGZfeGRwX3Nocmlua19kYXRhYCdzIHN1cnJvdW5kaW5nIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgbWVtb3J5IHR5cGVzIGFuZCBmcmFnbWVudCBtYW5hZ2VtZW50IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcyBpbiBkZXRhaWwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZGlmZmVyZW50IG1lbW9yeSB0eXBlcywgZXNwZWNpYWxseSBhcm91bmQgdGhlIHBhZ2UgcG9vbC4gV2UgbmVlZCB0byBiZSBjaGVja2luZyB0aGUgcGFnZSBwb29sIGludGVyYWN0aW9ucyB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG9mZi1ieS1vbmUgZXJyb3JzIG9yIGRvdWJsZS1mcmVlcy5cblxuU28sIHllcywgZ2l2ZW4gdGhpcyBhbmFseXNpcywgdGhpcyBwYXRjaCBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGZyYWdtZW50IGhhbmRsaW5nLCB0aGUgbWVtb3J5IHR5cGUgY2hhbmdlcywgYW5kIHRoZSBwYWdlIHBvb2wgaW50ZXJhY3Rpb25zIGFyZSBhbGwgcmVkIGZsYWdzIHRoYXQgZGVtYW5kIGRlZXBlciBpbnZlc3RpZ2F0aW9uIHdpdGggdG9vbHMgZGVzaWduZWQgdG8gY2F0Y2ggdGhlc2UgaXNzdWVzLiBJIHNob3VsZCBtYWtlIHN1cmUgbXkgdGVzdGluZyB3aWxsIGNvbnNpZGVyIHRoZSBpbnRlcmFjdGlvbnMgYW5kIGVkZ2UgY2FzZXMgb2YgdGhlIGRpZmZlcmVudCBtZW1vcnkgdHlwZXMgaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTYxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MDguODE5NTk3NTM4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTEwMTMyODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3hkcF9zaHJpbmtfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz00MzI3PXN0YXRpYyBpbnQgYnBmX3hkcF9mcmFnc19pbmNyZWFzZV90YWlsKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDM1MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo0MzUyOnN0YXRpYyBzdHJ1Y3QgeGRwX2J1ZmYgKmJwZl94ZHBfc2hyaW5rX2RhdGFfemMoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBzaHJpbmssXFxubmV0L2NvcmUvZmlsdGVyLmMtNDM1My1cXHRcXHRcXHRcXHRcXHQgICAgICAgYm9vbCB0YWlsLCBib29sIHJlbGVhc2UpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00MzY5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQzNzA6c3RhdGljIGJvb2wgYnBmX3hkcF9zaHJpbmtfZGF0YShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc2tiX2ZyYWdfdCAqZnJhZyxcXG5uZXQvY29yZS9maWx0ZXIuYy00MzcxLVxcdFxcdFxcdFxcdGludCBzaHJpbmssIGJvb2wgdGFpbClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQzNzktXFx0XFx0bmV0bWVtID0gMDtcXG5uZXQvY29yZS9maWx0ZXIuYzo0MzgwOlxcdFxcdHpjX2ZyYWcgPSBicGZfeGRwX3Nocmlua19kYXRhX3pjKHhkcCwgc2hyaW5rLCB0YWlsLCByZWxlYXNlKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00MzgxLVxcdH0gZWxzZSBpZiAoeGRwX2J1ZmZfaXNfZnJhZ19wcCh4ZHApKSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NDAxPXN0YXRpYyBpbnQgYnBmX3hkcF9mcmFnc19zaHJpbmtfdGFpbChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgaW50IG9mZnNldClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0MTQtXFx0XFx0b2Zmc2V0IC09IHNocmluaztcXG5uZXQvY29yZS9maWx0ZXIuYzo0NDE1OlxcdFxcdGlmIChicGZfeGRwX3Nocmlua19kYXRhKHhkcCwgZnJhZywgc2hyaW5rLCB0cnVlKSlcXG5uZXQvY29yZS9maWx0ZXIuYy00NDE2LVxcdFxcdFxcdG5fZnJhZ3NfZnJlZSsrO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI2NTk9X19icGZfa2Z1bmMgaW50IGJwZl94ZHBfcHVsbF9kYXRhKHN0cnVjdCB4ZHBfbWQgKngsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcwMC1cXHRcXHRkZWx0YSAtPSBzaHJpbms7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI3MDE6XFx0XFx0aWYgKGJwZl94ZHBfc2hyaW5rX2RhdGEoeGRwLCBmcmFnLCBzaHJpbmssIGZhbHNlKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcwMi1cXHRcXHRcXHRuX2ZyYWdzX2ZyZWUrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MDkuMTcwNjE4MjIyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MjY3NzA3NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3Q6XG5cbioqRGl2aW5nIGludG8gdGhlIFBhY2tldCBGaWx0ZXIgUGx1bWJpbmcqKlxuXG5Pa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgY2xlYXI6IEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGp1bXAgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDM3MC4gVGhhdCB1c3VhbGx5IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcGFja2V0IGZpbHRlcmluZyBlbmdpbmUsIG1vc3QgbGlrZWx5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzb21lIEJQRi1yZWxhdGVkIGZ1bmN0aW9uLiBNeSBndXQgdGVsbHMgbWUgd2UncmUgZWl0aGVyIGxvb2tpbmcgYXQgdGhlIGludGVycHJldGVyLCBhIGhlbHBlciBmdW5jdGlvbiwgb3IgcGVyaGFwcyBhIHBhcnQgb2YgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiByb3V0aW5lcyBmb3IgdGhpcyBzZWN0aW9uLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBvdXQgZm9yIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhbmRsZSB0aGUgZmlsdGVycyB0aGVtc2VsdmVzLCB0aGUgYWN0dWFsIGJ5dGVjb2RlIHJlcHJlc2VudGF0aW9uIGFuZCBob3cgdGhhdCBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBkYXRhIHBhdGguIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRoaW5ncyBhd2FpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6OTgyMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ3OjEyLjU5NzM5NDA4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzY1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzY1OlxcdFxcdH1cXG40MzY2OlxcdFxcbjQzNjc6XFx0XFx0cmV0dXJuIHpjX2ZyYWc7XFxuNDM2ODpcXHR9XFxuNDM2OTpcXHRcXG40MzcwOlxcdHN0YXRpYyBib29sIGJwZl94ZHBfc2hyaW5rX2RhdGEoc3RydWN0IHhkcF9idWZmICp4ZHAsIHNrYl9mcmFnX3QgKmZyYWcsXFxuNDM3MTpcXHRcXHRcXHRcXHRcXHRpbnQgc2hyaW5rLCBib29sIHRhaWwpXFxuNDM3MjpcXHR7XFxuNDM3MzpcXHRcXHRlbnVtIHhkcF9tZW1fdHlwZSBtZW1fdHlwZSA9IHhkcC1cXHUwMDNlcnhxLVxcdTAwM2VtZW0udHlwZTtcXG40Mzc0OlxcdFxcdGJvb2wgcmVsZWFzZSA9IHNrYl9mcmFnX3NpemUoZnJhZykgPT0gc2hyaW5rO1xcbjQzNzU6XFx0XFx0bmV0bWVtX3JlZiBuZXRtZW0gPSBza2JfZnJhZ19uZXRtZW0oZnJhZyk7XFxuNDM3NjpcXHRcXHRzdHJ1Y3QgeGRwX2J1ZmYgKnpjX2ZyYWcgPSBOVUxMO1xcbjQzNzc6XFx0XFxuNDM3ODpcXHRcXHRpZiAobWVtX3R5cGUgPT0gTUVNX1RZUEVfWFNLX0JVRkZfUE9PTCkge1xcbjQzNzk6XFx0XFx0XFx0bmV0bWVtID0gMDtcXG40MzgwOlxcdFxcdFxcdHpjX2ZyYWcgPSBicGZfeGRwX3Nocmlua19kYXRhX3pjKHhkcCwgc2hyaW5rLCB0YWlsLCByZWxlYXNlKTtcXG40MzgxOlxcdFxcdH0gZWxzZSBpZiAoeGRwX2J1ZmZfaXNfZnJhZ19wcCh4ZHApKSB7XFxuNDM4MjpcXHRcXHRcXHQvKlxcbjQzODM6XFx0XFx0XFx0ICogU2tiLWJhY2tlZCBYRFAgKGdlbmVyaWMgWERQLCB2ZXRoKSBjb3cncyB0aGUgZnJhZ3MgaW50byBhXFxuNDM4NDpcXHRcXHRcXHQgKiBwYWdlX3Bvb2wgd2hpbGUgdGhlIHJ4cSBzdGF5cyBNRU1fVFlQRV9QQUdFX1NIQVJFRCwgc28gZnJlZVxcbjQzODU6XFx0XFx0XFx0ICogdGhlIGZyYWcgdG8gdGhlIHBvb2wsIG5vdCB2aWEgcGFnZV9mcmFnX2ZyZWUoKS5cXG40Mzg2OlxcdFxcdFxcdCAqL1xcbjQzODc6XFx0XFx0XFx0bWVtX3R5cGUgPSBNRU1fVFlQRV9QQUdFX1BPT0w7XFxuNDM4ODpcXHRcXHR9XFxuNDM4OTpcXHRcXG40MzkwOlxcdFxcdGlmIChyZWxlYXNlKSB7XFxuNDM5MTpcXHRcXHRcXHRfX3hkcF9yZXR1cm4obmV0bWVtLCBtZW1fdHlwZSwgZmFsc2UsIHpjX2ZyYWcpO1xcbjQzOTI6XFx0XFx0fSBlbHNlIHtcXG40MzkzOlxcdFxcdFxcdGlmICghdGFpbClcXG40Mzk0OlxcdFxcdFxcdFxcdHNrYl9mcmFnX29mZl9hZGQoZnJhZywgc2hyaW5rKTtcXG40Mzk1OlxcdFxcdFxcdHNrYl9mcmFnX3NpemVfc3ViKGZyYWcsIHNocmluayk7XFxuNDM5NjpcXHRcXHR9XFxuNDM5NzpcXHRcXG40Mzk4OlxcdFxcdHJldHVybiByZWxlYXNlO1xcbjQzOTk6XFx0fVxcbjQ0MDA6XFx0XFxuNDQwMTpcXHRzdGF0aWMgaW50IGJwZl94ZHBfZnJhZ3Nfc2hyaW5rX3RhaWwoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBvZmZzZXQpXFxuNDQwMjpcXHR7XFxuNDQwMzpcXHRcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9idWZmKHhkcCk7XFxuNDQwNDpcXHRcXHRpbnQgaSwgbl9mcmFnc19mcmVlID0gMCwgbGVuX2ZyZWUgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NzoxMi41OTc4NTc1MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTAxNzA4MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWERQIEJ1ZmZlciBTaHJpbmsgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBmbGF3IHdpdGhpbiB0aGUgWERQIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHdoZW4gc2hyaW5raW5nIFhEUCBidWZmZXJzIGJhY2tlZCBieSBTS0JzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIG5vbmxpbmVhciBTS0Igc2NlbmFyaW8uIFRoZSBjb3JlIHByb2JsZW0gbGllcyBpbiB0aGUgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIHBhZ2UgZnJhZ21lbnRzIChmcmFncykgYWxsb2NhdGVkIGZyb20gYSBgcGFnZV9wb29sYCBkdXJpbmcgYnVmZmVyIHNocmlua2FnZS4gQmFzaWNhbGx5LCB3aGVuIGEgQlBGIHByb2dyYW0gc2hyaW5rcyB0aGUgWERQIGJ1ZmZlcidzIHRhaWwgdXNpbmcgYGJwZl94ZHBfYWRqdXN0X3RhaWxgIG9yIGBicGZfeGRwX3B1bGxfZGF0YWAsIHRoZSBjb2RlIHdhcyBtaXN0YWtlbmx5IGZyZWVpbmcgdGhlIGNvbXBsZXRlbHkgc2hydW5rIGZyYWdtZW50cyB1c2luZyBgcGFnZV9mcmFnX2ZyZWUoKWAsIGV2ZW4gdGhvdWdoIHRoZXkgd2VyZSBhbGxvY2F0ZWQgZnJvbSBhIGBwYWdlX3Bvb2xgLiBUaGlzIGluY29uc2lzdGVuY3kgbGVhZHMgdG8gc2V2ZXJlIGlzc3VlczogXCJCYWQgcGFnZSBzdGF0ZSAuLi4gcGFnZV9wb29sIGxlYWssXCIgbWVtb3J5IGNvcnJ1cHRpb24sIGludmFsaWQgZnJlZXMsIGFuZCBwcm9ibGVtcyB3aXRoIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIOKAkyBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IHBpdGZhbGxzLlxuXG5UaGUgc29sdXRpb24sIGFzIEkgc2VlIGl0LCBpcyBhIHByZXR0eSBjbGVhbiBhcHByb2FjaC4gVGhleSd2ZSBpbnRyb2R1Y2VkIGEgZmxhZywgYFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0xgLCB3aXRoaW4gdGhlIGB4ZHBfYnVmZmAgc3RydWN0dXJlLiBUaGlzIGZsYWcgYWxsb3dzIGBicGZfeGRwX3Nocmlua19kYXRhKClgIHRvIGNvcnJlY3RseSBpZGVudGlmeSBmcmFncyBvcmlnaW5hdGluZyBmcm9tIGEgYHBhZ2VfcG9vbGAgKG1lbV90eXBlIGBNRU1fVFlQRV9QQUdFX1BPT0xgKSBhbmQgdXNlIHRoZSBhcHByb3ByaWF0ZSBwYWdlIHBvb2wgcmVjbGFtYXRpb24gbG9naWMuIFRoYXQncyBhIGdvb2QgZml4IGZvciB0aGUgaWRlbnRpZmllZCBtZW1vcnktcmVsYXRlZCBpc3N1ZS5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIHBlcmZvcm0gYSBLTVNBTi9LQVNBTiBhc3Nlc3NtZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggaXNuJ3Qgc3VidGx5IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMgdGhhdCBjb3VsZCBiZSBleHBvc2VkIHRvIHVzZXJzcGFjZS5cblxuTXkgY3JpdGVyaWEgZm9yIEtNU0FOIHJldm9sdmUgYXJvdW5kIHRoZXNlIGFyZWFzOiBrZXJuZWwgc3RydWN0dXJlcyBsZWFraW5nIHRvIHVzZXIgc3BhY2UgKHZpYSB2YXJpb3VzIGNoYW5uZWxzKSwgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBzdWJzZXF1ZW50IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIGJ5dGVzIGJlaW5nIGFjY2Vzc2VkLlxuXG5TbywgbGV0J3MgZXhhbWluZSB0aGUgbWVtb3J5IGZsb3dzOlxuXG4qICAgSW4gYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgIGFuZCBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgd2UncmUgc2V0dGluZyB0aGUgZmxhZyBiaXQsIHdoaWNoIGlzIGdvb2QuXG4qICAgSW4gYHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmYCwgdGhlIGZsYWcgaXMgY2xlYXJlZC5cbiogICBJbiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgdGhlIGZsYWcgaXMgc2V0LlxuKiAgIGBicGZfeGRwX3Nocmlua19kYXRhYCBjaGVja3MgdGhlIGZsYWcuXG5cbkFmdGVyIHJldmlld2luZyB0aGUgY29kZSwgSSBkb24ndCBzZWUgYW55IGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIGB4ZHBgIHN0cnVjdHVyZSBpcyBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9uIGNhbGxzLiBUaGUgYGZsYWdzYCBmaWVsZCBpcyBiZWluZyBtYW5pcHVsYXRlZCB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucywgc28gaXQncyBhbGwgY29udHJvbGxlZC4gVGhlIHBhdGNoJ3MgcHJpbWFyeSBmb2N1cyBpcyByZXNvbHZpbmcgdGhlIHBhZ2UgZnJlZSB0eXBlIG1pc21hdGNoLCB3aGljaCBwcmltYXJpbHkgdHJpZ2dlcnMgaXNzdWVzIHdpdGggcGFnZSByZWZjb3VudCwgbWVtb3J5IGFsbG9jYXRvciBjb3JydXB0aW9uLCBhbmQgcGFnZSBwb29sIGxlYWtzLiBUaGVzZSBhcmUgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHRoYXQgYXJlIG5vcm1hbGx5IGNhdWdodCBieSBrZXJuZWwgZGVidWdnaW5nIGFuZCBzYW5pdGl6ZXJzIGxpa2UgcGFnZSByZWZjb3VudCBjaGVja3MsIHBhZ2VcXF9wb29sIHRyYWNraW5nLCBhbmQgS0FTQU4gKHRvIGRldGVjdCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGVycm9ycy5cblxuSSd2ZSBhbHNvIGRvdWJsZS1jaGVja2VkIGB4ZHBfYnVmZmAgYW5kIGB4ZHBfZnJhbWVgIGZvciB1bmluaXRpYWxpemVkIGZpZWxkcyB0byBlbnN1cmUgbm90aGluZydzIGV4cG9zZWQgZnJvbSB0aGlzIHBhdGNoIGFuZCwgYWZ0ZXIgZXhhbWluaW5nIHRoZSByZWxldmFudCBmdW5jdGlvbnMgaW4gYGluY2x1ZGUvbmV0L3hkcC5oYCwgSSdtIGNvbmZpZGVudC4gSSdtIHNhdGlzZmllZCB0aGF0IHRoaXMgcGF0Y2gsIHdoaWxlIGZpeGluZyBhIGNyaXRpY2FsIG1lbW9yeSBpc3N1ZSwgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTi9LQVNBTiBjb25jZXJucyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcyNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ3OjIwLjY5OTU2OTY1NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwOTUwNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC94ZHAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC94ZHAuaD03ND1lbnVtIHhkcF9idWZmX2ZsYWdzIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oLTg4LVxcdCAqIHRoaXMgaXMgc3RyaXBwZWQgaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSBhbmQgcmUtZGVyaXZlZCBmcm9tXFxuaW5jbHVkZS9uZXQveGRwLmg6ODk6XFx0ICogOjptZW1fdHlwZSBpbiB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKCkuXFxuaW5jbHVkZS9uZXQveGRwLmgtOTAtXFx0ICovXFxuLS1cXG5pbmNsdWRlL25ldC94ZHAuaD00MDU9c3RhdGljIGlubGluZVxcbmluY2x1ZGUvbmV0L3hkcC5oOjQwNjp2b2lkIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUsXFxuaW5jbHVkZS9uZXQveGRwLmgtNDA3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MjAuNzcxNjY5MjYzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjk0ODM1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHhkcC5oYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIFhEUC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbmV0L3hkcC5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQwMC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGtleSBmdW5jdGlvbiBkZWZpbml0aW9ucyB3aXRoaW4gYSBoZWFkZXIgZmlsZSBsaWtlIHRoaXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgaGVyZSB0aGF0IHJlbGF0ZSB0byB0aGUgWERQIHByb2dyYW1taW5nIG1vZGVsLCBtYXliZSBzb21ldGhpbmcgYXJvdW5kIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIHBhY2tldCBtZXRhZGF0YS4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gaG93IFhEUCBhY3R1YWxseSB3b3JrcyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uIHBvaW50cyBhcyBJIHJlYWQuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGZvciBtb3JlIGluLWRlcHRoIGFuYWx5c2lzIGxhdGVyIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU4MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ3OjIyLjg0MTE1NTU1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC94ZHAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzOTUsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTU6XFx0c3RydWN0IHNrX2J1ZmYgKnhkcF9idWlsZF9za2JfZnJvbV9idWZmKGNvbnN0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwKTtcXG4gMzk2OlxcdHN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21femMoc3RydWN0IHhkcF9idWZmICp4ZHApO1xcbiAzOTc6XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKTtcXG4gMzk4OlxcdHN0cnVjdCBza19idWZmICpfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxcbiAzOTk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNDAwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiA0MDE6XFx0c3RydWN0IHNrX2J1ZmYgKnhkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxcbiA0MDI6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiA0MDM6XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZl9jbG9uZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmKTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0c3RhdGljIGlubGluZVxcbiA0MDY6XFx0dm9pZCB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKGNvbnN0IHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lLFxcbiA0MDc6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbiA0MDg6XFx0e1xcbiA0MDk6XFx0XFx0eGRwLVxcdTAwM2VkYXRhX2hhcmRfc3RhcnQgPSBmcmFtZS1cXHUwMDNlZGF0YSAtIGZyYW1lLVxcdTAwM2VoZWFkcm9vbSAtIHNpemVvZigqZnJhbWUpO1xcbiA0MTA6XFx0XFx0eGRwLVxcdTAwM2VkYXRhID0gZnJhbWUtXFx1MDAzZWRhdGE7XFxuIDQxMTpcXHRcXHR4ZHAtXFx1MDAzZWRhdGFfZW5kID0gZnJhbWUtXFx1MDAzZWRhdGEgKyBmcmFtZS1cXHUwMDNlbGVuO1xcbiA0MTI6XFx0XFx0eGRwLVxcdTAwM2VkYXRhX21ldGEgPSBmcmFtZS1cXHUwMDNlZGF0YSAtIGZyYW1lLVxcdTAwM2VtZXRhc2l6ZTtcXG4gNDEzOlxcdFxcdHhkcC1cXHUwMDNlZnJhbWVfc3ogPSBmcmFtZS1cXHUwMDNlZnJhbWVfc3o7XFxuIDQxNDpcXHRcXHR4ZHAtXFx1MDAzZWZsYWdzID0gZnJhbWUtXFx1MDAzZWZsYWdzO1xcbiA0MTU6XFx0XFx0LypcXG4gNDE2OlxcdFxcdCAqIGZyYW1lLVxcdTAwM2VmbGFncyBuZXZlciBjYXJyaWVzIFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wgKGl0IGlzIHN0cmlwcGVkXFxuIDQxNzpcXHRcXHQgKiBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpKTsgcmUtZGVyaXZlIGl0IGZyb20gdGhlIGZyYW1lJ3Mgb3duXFxuIDQxODpcXHRcXHQgKiBtZW1vcnkgdHlwZS4gdmV0aCBhbmQgZGV2bWFwIHJlYnVpbGQgYSBidWZmIGhlcmUgYW5kIHJ1biBhIHByb2dyYW1cXG4gNDE5OlxcdFxcdCAqIHdob3NlIHJ4cSBzYXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyB3aXRob3V0IHRoaXMgYSBzaHJpbmsgd291bGRcXG4gNDIwOlxcdFxcdCAqIGZyZWUgYSBwYWdlX3Bvb2wgZnJhZyB0aHJvdWdoIHBhZ2VfZnJhZ19mcmVlKCkuXFxuIDQyMTpcXHRcXHQgKi9cXG4gNDIyOlxcdFxcdGlmIChmcmFtZS1cXHUwMDNlbWVtX3R5cGUgPT0gTUVNX1RZUEVfUEFHRV9QT09MKVxcbiA0MjM6XFx0XFx0XFx0eGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKTtcXG4gNDI0OlxcdH1cXG4gNDI1OlxcdFxcbiA0MjY6XFx0c3RhdGljIGlubGluZVxcbiA0Mjc6XFx0aW50IHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKGNvbnN0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbiA0Mjg6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9mcmFtZSlcXG4gNDI5OlxcdHtcXG4gNDMwOlxcdFxcdGludCBtZXRhc2l6ZSwgaGVhZHJvb207XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdC8qIEFzc3VyZSBoZWFkcm9vbSBpcyBhdmFpbGFibGUgZm9yIHN0b3JpbmcgaW5mbyAqL1xcbiA0MzM6XFx0XFx0aGVhZHJvb20gPSB4ZHAtXFx1MDAzZWRhdGEgLSB4ZHAtXFx1MDAzZWRhdGFfaGFyZF9zdGFydDtcXG4gNDM0OlxcdFxcdG1ldGFzaXplID0geGRwLVxcdTAwM2VkYXRhIC0geGRwLVxcdTAwM2VkYXRhX21ldGE7XFxuIDQzNTpcXHRcXHRtZXRhc2l6ZSA9IG1ldGFzaXplIFxcdTAwM2UgMCA/IG1ldGFzaXplIDogMDtcXG4gNDM2OlxcdFxcdGlmICh1bmxpa2VseSgoaGVhZHJvb20gLSBtZXRhc2l6ZSkgXFx1MDAzYyBzaXplb2YoKnhkcF9mcmFtZSkpKVxcbiA0Mzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdC8qIENhdGNoIGlmIGRyaXZlciBkaWRuJ3QgcmVzZXJ2ZSB0YWlscm9vbSBmb3Igc2tiX3NoYXJlZF9pbmZvICovXFxuIDQ0MDpcXHRcXHRpZiAodW5saWtlbHkoeGRwLVxcdTAwM2VkYXRhX2VuZCBcXHUwMDNlIHhkcF9kYXRhX2hhcmRfZW5kKHhkcCkpKSB7XFxuIDQ0MTpcXHRcXHRcXHRYRFBfV0FSTihcXFwiRHJpdmVyIEJVRzogbWlzc2luZyByZXNlcnZlZCB0YWlscm9vbVxcXCIpO1xcbiA0NDI6XFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuIDQ0MzpcXHRcXHR9XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdHhkcF9mcmFtZS1cXHUwMDNlZGF0YSA9IHhkcC1cXHUwMDNlZGF0YTtcXG4gNDQ2OlxcdFxcdHhkcF9mcmFtZS1cXHUwMDNlbGVuICA9IHhkcC1cXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXFx1MDAzZWRhdGE7XFxuIDQ0NzpcXHRcXHR4ZHBfZnJhbWUtXFx1MDAzZWhlYWRyb29tID0gaGVhZHJvb20gLSBzaXplb2YoKnhkcF9mcmFtZSk7XFxuIDQ0ODpcXHRcXHR4ZHBfZnJhbWUtXFx1MDAzZW1ldGFzaXplID0gbWV0YXNpemU7XFxuIDQ0OTpcXHRcXHR4ZHBfZnJhbWUtXFx1MDAzZWZyYW1lX3N6ID0geGRwLVxcdTAwM2VmcmFtZV9zejtcXG4gNDUwOlxcdFxcdC8qIFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wgaXMgeGRwX2J1ZmYgb25seSwgZG9uJ3QgY2FycnkgaXQgb3ZlciAqL1xcbiA0NTE6XFx0XFx0eGRwX2ZyYW1lLVxcdTAwM2VmbGFncyA9IHhkcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0XFx0cmV0dXJuIDA7XFxuIDQ1NDpcXHR9XFxuIDQ1NTpcXHRcXG4gNDU2OlxcdC8qIENvbnZlcnQgeGRwX2J1ZmYgdG8geGRwX2ZyYW1lICovXFxuIDQ1NzpcXHRzdGF0aWMgaW5saW5lXFxuIDQ1ODpcXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbiA0NTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NzoyMi44NDEyODkxMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODAyNjc1MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gYnJpZGdlcyB0aGUgZ2FwIGJldHdlZW4gdGhlIFhEUCBidWZmZXIgYW5kIGEgbW9yZSBjb252ZW50aW9uYWwgZnJhbWUgcmVwcmVzZW50YXRpb24uIFdoYXQgYXJlIHRoZSBrZXkgdHJhbnNmb3JtYXRpb25zIGhhcHBlbmluZz8gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnM7IEkga25vdyBYRFAgZGVhbHMgd2l0aCBzaGFyZWQgbWVtb3J5IGFuZCBkaXJlY3QgcGFja2V0IGFjY2Vzcywgc28gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBoYXMgdG8gaGFuZGxlIGJ1ZmZlciBvd25lcnNoaXAgY2FyZWZ1bGx5LiBJcyBpdCBjb3B5aW5nIGRhdGEsIGNyZWF0aW5nIHZpZXdzLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQncyBpbnRlcmFjdGluZyB3aXRoIOKAkyB0aGUgWERQIGNvbnRleHQsIHRoZSBidWZmZXIgaXRzZWxmLCBhbmQgd2hhdGV2ZXIgZnJhbWUtbGV2ZWwgc3RydWN0dXJlIGlzIGJlaW5nIHJldHVybmVkIG9yIGNvbnN0cnVjdGVkLiBBcmUgd2UgZGVhbGluZyB3aXRoIGxpbmVhciBidWZmZXJzLCBvciBhcmUgdGhlcmUgcG90ZW50aWFsIGZyYWdtZW50ZWQgcGFja2V0cyB0byBjb25zaWRlcj8gQW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIGFsaWFzaW5nIG9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgZWZmaWNpZW5jeSDigJMgYXJlIHRoZXJlIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucywgcGVyaGFwcyB1c2luZyBoYXJkd2FyZSBvZmZsb2FkIG9yIHplcm8tY29weSB0ZWNobmlxdWVzPyBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA4MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MjUuNjQzOTY3MTE5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC94ZHAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0NTgsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTg6XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4gNDU5OlxcdHtcXG4gNDYwOlxcdFxcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9mcmFtZTtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0aWYgKHhkcC1cXHUwMDNlcnhxLVxcdTAwM2VtZW0udHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MKVxcbiA0NjM6XFx0XFx0XFx0cmV0dXJuIHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSh4ZHApO1xcbiA0NjQ6XFx0XFxuIDQ2NTpcXHRcXHQvKiBTdG9yZSBpbmZvIGluIHRvcCBvZiBwYWNrZXQgKi9cXG4gNDY2OlxcdFxcdHhkcF9mcmFtZSA9IHhkcC1cXHUwMDNlZGF0YV9oYXJkX3N0YXJ0O1xcbiA0Njc6XFx0XFx0aWYgKHVubGlrZWx5KHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKHhkcCwgeGRwX2ZyYW1lKSBcXHUwMDNjIDApKVxcbiA0Njg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdC8qIHJ4cSBvbmx5IHZhbGlkIHVudGlsIG5hcGlfc2NoZWR1bGUgZW5kcywgY29udmVydCB0byB4ZHBfbWVtX3R5cGUgKi9cXG4gNDcxOlxcdFxcdHhkcF9mcmFtZS1cXHUwMDNlbWVtX3R5cGUgPSB4ZHAtXFx1MDAzZXJ4cS1cXHUwMDNlbWVtLnR5cGU7XFxuIDQ3MjpcXHRcXG4gNDczOlxcdFxcdHJldHVybiB4ZHBfZnJhbWU7XFxuIDQ3NDpcXHR9XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdHZvaWQgX194ZHBfcmV0dXJuKG5ldG1lbV9yZWYgbmV0bWVtLCBlbnVtIHhkcF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4gNDc3OlxcdFxcdFxcdCAgYm9vbCBuYXBpX2RpcmVjdCwgc3RydWN0IHhkcF9idWZmICp4ZHApO1xcbiA0Nzg6XFx0dm9pZCB4ZHBfcmV0dXJuX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYpO1xcbiA0Nzk6XFx0dm9pZCB4ZHBfcmV0dXJuX2ZyYW1lX3J4X25hcGkoc3RydWN0IHhkcF9mcmFtZSAqeGRwZik7XFxuIDQ4MDpcXHR2b2lkIHhkcF9yZXR1cm5fYnVmZihzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCk7XFxuIDQ4MTpcXHR2b2lkIHhkcF9yZXR1cm5fZnJhbWVfYnVsayhzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxcbiA0ODI6XFx0XFx0XFx0XFx0ICAgc3RydWN0IHhkcF9mcmFtZV9idWxrICpicSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ3OjI1LjY0NDEzMzkyOFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODcyNzU3NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhEUCBQYWdlIFBvb2wgRmxhZyBDaGFuZ2UqKlxuXG5Pa2F5LCB0aGUgcGF0aCBmb3J3YXJkIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaGVyZS4gV2UncmUgaW50cm9kdWNpbmcgYSBuZXcgaW50ZXJuYWwgZmxhZywgYFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0xgLCB0byB0aGUgYHhkcF9idWZmYCdzIGZsYWdzLiBUaGlzIHdpbGwgbGV0IHVzIHNwZWNpZmljYWxseSB0cmFjayB3aGVuIG5vbmxpbmVhciBza2JzIGhhdmUgYmVlbiBjb3BpZWQgaW50byBhIGBwYWdlX3Bvb2xgIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgYHZldGhgIGFuZCBnZW5lcmljIFhEUC4gVGhlIGltcGxlbWVudGF0aW9uIGlzIHdlbGwtZGVmaW5lZDogd2UnbGwgc2V0IHRoZSBmbGFnIHdoZW4gdGhlIGNvcHkgaGFwcGVucywgYW5kIHN0cmlwIG9yIHJlLWRlcml2ZSBpdCBkdXJpbmcgdGhlIGNvbnZlcnNpb25zIGJldHdlZW4gYHhkcF9mcmFtZWAgYW5kIGB4ZHBfYnVmZmAuXG5cblRoZSBjcnVjaWFsIHBhcnQgaXMgaW4gYGJwZl94ZHBfc2hyaW5rX2RhdGFgLiBXZSdsbCB1c2UgdGhlIGZsYWcgdGhlcmUgdG8gZW5zdXJlIHRoYXQgd2hlbiB3ZSBzaHJpbmsgZnJhZ21lbnRzLCB3ZSdyZSByZXR1cm5pbmcgdGhlbSB0byB0aGUgYHBhZ2VfcG9vbGAgY29ycmVjdGx5IGluc3RlYWQgb2YgdXNpbmcgYHBhZ2VfZnJhZ19mcmVlKClgLiBCUEYgc2VsZnRlc3RzIGFyZSBhIG11c3QsIG9mIGNvdXJzZS5cblxuVGhlIHJpc2sgYW5hbHlzaXMgaXMgd2hhdCBtYXR0ZXJzIHRoZSBtb3N0LiBUaGVyZSdzIG5vIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUsIG5vIGNvcHlpbmcgb2YgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gdXNlcnNwYWNlLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGFuZCBubyBtYW5pcHVsYXRpb24gb2YgbGVuZ3RoIGNoZWNrcyB0aGF0IHdvdWxkIGFsbG93IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBhcmUgZ29pbmcgdG8gZmFsbCBpbnRvIHRoZSB3ZWxsLXRyb2RkZW4gdGVycml0b3J5IG9mIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBvdXIgc3RhbmRhcmQga2VybmVsIGRlYnVnIGNoZWNrcywgc28gdGhlIG5lZWQgZm9yIEtNU0FOIGlzIG1pbmltYWwuXG5cblRodXMsIGBOZWVkc0tNU0FOYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgcmVhc29uaW5nIG9uZSBsYXN0IHRpbWUuIFRpbWUgdG8gZmlyZSB1cCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIGEgY2xlYXIsIGNvbmNpc2UganVzdGlmaWNhdGlvbiBmb3IgdGhpcyBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NTYsIk91dHB1dFRva2VucyI6MjE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MzEuNTE2ODk0MzQyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHRoZSBpbnRlcm5hbCBmbGFnIGBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MYCB0byBgeGRwX2J1ZmZgIHRvIHRyYWNrIHdoZXRoZXIgbm9ubGluZWFyIHNrYiBmcmFnbWVudHMgd2VyZSBDT1cnZCBpbnRvIGEgYHBhZ2VfcG9vbGAuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYW4gWERQIHByb2dyYW0gc2hyaW5rcyB0aGUgYnVmZmVyIGFuZCByZWxlYXNlcyBmcmFnbWVudHMsIHRoZXkgYXJlIHByb3Blcmx5IGZyZWVkIGJhY2sgdG8gdGhlIHBhZ2UgcG9vbCByYXRoZXIgdGhhbiB0aHJvdWdoIGBwYWdlX2ZyYWdfZnJlZSgpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwYWdlIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgYWxsb2NhdG9yIHR5cGUgbWlzbWF0Y2ggYnVnICh3aGljaCB3b3VsZCBtYW5pZmVzdCBhcyBwYWdlIHBvb2wgbGVha3MsIGJhZCBwYWdlIHN0YXRlLCBvciBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nIGxlYWtzLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGludmFsaWQgbWVtb3J5IGZyZWUpIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgcGFnZS9yZWZjb3VudCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdGhlIGludGVybmFsIGZsYWcgYFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0xgIHRvIGB4ZHBfYnVmZmAgdG8gdHJhY2sgd2hldGhlciBub25saW5lYXIgc2tiIGZyYWdtZW50cyB3ZXJlIENPVydkIGludG8gYSBgcGFnZV9wb29sYC4gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBhbiBYRFAgcHJvZ3JhbSBzaHJpbmtzIHRoZSBidWZmZXIgYW5kIHJlbGVhc2VzIGZyYWdtZW50cywgdGhleSBhcmUgcHJvcGVybHkgZnJlZWQgYmFjayB0byB0aGUgcGFnZSBwb29sIHJhdGhlciB0aGFuIHRocm91Z2ggYHBhZ2VfZnJhZ19mcmVlKClgLlxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBhZ2UgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBhbGxvY2F0b3IgdHlwZSBtaXNtYXRjaCBidWcgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIHBhZ2UgcG9vbCBsZWFrcywgYmFkIHBhZ2Ugc3RhdGUsIG9yIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVzZXItc3BhY2UgY29weSBwYXRocy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgaW52YWxpZCBtZW1vcnkgZnJlZSkgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBwYWdlL3JlZmNvdW50IGRlYnVnZ2Vycywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz9cx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 14:04:39 +0000 UTC FinishedAt: 2026-09-11 14:47:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "BPF_SYSCALL", "VETH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "BPF_SYSCALL", "VETH" ], "series_id": "491864db-b89e-468f-b762-3ce1f5bc799e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_prog_run_generic_xdp", "bpf_xdp_adjust_tail", "bpf_xdp_pull_data", "bpf_xdp_shrink_data", "veth_convert_skb_to_xdp_buff", "veth_xdp_rcv_skb", "veth_xdp_rcv_one" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtWRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfYWRqdXN0X3RhaWwmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9wdWxsX2RhdGEmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9zaHJpbmtfZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmJiMzNDssCiAgICAmIzM0O3ZldGhfeGRwX3Jjdl9za2ImIzM0OywKICAgICYjMzQ7dmV0aF94ZHBfcmN2X29uZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdGhlIGludGVybmFsIGZsYWcgYFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0xgIHRvIGB4ZHBfYnVmZmAgdG8gdHJhY2sgd2hldGhlciBub25saW5lYXIgc2tiIGZyYWdtZW50cyB3ZXJlIENPVyYjMzk7ZCBpbnRvIGEgYHBhZ2VfcG9vbGAuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYW4gWERQIHByb2dyYW0gc2hyaW5rcyB0aGUgYnVmZmVyIGFuZCByZWxlYXNlcyBmcmFnbWVudHMsIHRoZXkgYXJlIHByb3Blcmx5IGZyZWVkIGJhY2sgdG8gdGhlIHBhZ2UgcG9vbCByYXRoZXIgdGhhbiB0aHJvdWdoIGBwYWdlX2ZyYWdfZnJlZSgpYC5cblxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcGFnZSBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIGFsbG9jYXRvciB0eXBlIG1pc21hdGNoIGJ1ZyAod2hpY2ggd291bGQgbWFuaWZlc3QgYXMgcGFnZSBwb29sIGxlYWtzLCBiYWQgcGFnZSBzdGF0ZSwgb3IgcGFnZSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgcGFkZGluZyBsZWFrcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBmcmVlKSBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UvcmVmY291bnQgZGVidWdnZXJzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgWERQIGZyYWdtZW50IGhhbmRsaW5nIGxvZ2ljIGFjcm9zcyBjb3JlIG5ldHdvcmtpbmcsIGdlbmVyaWMgWERQLCBhbmQgdGhlIHZldGggZHJpdmVyIHRvIHByb3Blcmx5IHRyYWNrIHBhZ2VfcG9vbCBiYWNrZWQgZnJhZ21lbnRzIHdoZW4gc2hyaW5raW5nIFhEUCBidWZmZXJzLiBUaGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JrIGludGVyZmFjZXMgKHZldGgsIHR1bi90YXApIGFuZCBCUEYvWERQIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDQ2NDJmMjFmMTgwMTYwZTUzNDYzOTZhZTY4ZDYwYzMyOTNlODMwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE0OjQ1OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuaW5kZXggNmVkM2VlODExNTNmYi4uYTNmZGYxOTU5Yjc2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3ZldGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdmV0aC5jXG5AQCAtNzc1LDYgJiM0Mzs3NzUsMTIgQEAgc3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSxcbiBcdGlmIChza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3MpIHtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZXhkcF9mcmFnc19zaXplID0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFx0XHR4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEEgbm9ubGluZWFyIHNrYiB3YXMgY293JiMzOTtkIGludG8gcnEtXHUwMDNlcGFnZV9wb29sIGFib3ZlLCBzbyB0aGVcbiYjNDM7XHRcdCAqIGZyYWdzIG11c3QgYmUgZnJlZWQgdG8gdGhhdCBwb29sLCBub3QgdmlhIHRoZSByeHEmIzM5O3NcbiYjNDM7XHRcdCAqIE1FTV9UWVBFX1BBR0VfU0hBUkVELlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xuIFx0fSBlbHNlIHtcbiBcdFx0eGRwX2J1ZmZfY2xlYXJfZnJhZ3NfZmxhZyh4ZHApO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcC5oIGIvaW5jbHVkZS9uZXQveGRwLmhcbmluZGV4IGFhNzQyZjQxM2MzNTguLjhmZDQxMzllOWNiZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZHAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQveGRwLmhcbkBAIC04MSw2ICYjNDM7ODEsMTQgQEAgZW51bSB4ZHBfYnVmZl9mbGFncyB7XG4gXHQgKiBYRFAgcHJvZ3JhbSBpcyBub3QgYXR0YWNoZWQuXG4gXHQgKi9cbiBcdFhEUF9GTEFHU19GUkFHU19VTlJFQURBQkxFXHQ9IEJJVCgyKSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGZyYWdzIGFyZSBwYWdlX3Bvb2wgbWVtb3J5IGV2ZW4gdGhvdWdoIHJ4cS1cdTAwM2VtZW0udHlwZSBpcyBub3Q6IGFcbiYjNDM7XHQgKiBza2ItYmFja2VkIFhEUCBidWZmIChnZW5lcmljIFhEUCwgdmV0aCkgaXMgY293JiMzOTtkIGludG8gYSBwYWdlX3Bvb2wuXG4mIzQzO1x0ICogeGRwX2J1ZmYgb25seTogYW4geGRwX2ZyYW1lIGRlc2NyaWJlcyBpdHMgbWVtb3J5IHdpdGggOjptZW1fdHlwZSwgc29cbiYjNDM7XHQgKiB0aGlzIGlzIHN0cmlwcGVkIGluIHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKCkgYW5kIHJlLWRlcml2ZWQgZnJvbVxuJiM0MztcdCAqIDo6bWVtX3R5cGUgaW4geGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZigpLlxuJiM0MztcdCAqL1xuJiM0MztcdFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0xcdD0gQklUKDMpLFxuIH07XG4gXG4gc3RydWN0IHhkcF9idWZmIHtcbkBAIC0xMzEsNiAmIzQzOzEzOSwxNiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgeGRwX2J1ZmZfc2V0X2ZyYWdfdW5yZWFkYWJsZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiBcdHhkcC1cdTAwM2VmbGFncyB8PSBYRFBfRkxBR1NfRlJBR1NfVU5SRUFEQUJMRTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB4ZHBfYnVmZl9zZXRfZnJhZ19wcChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiYjNDM7e1xuJiM0MztcdHhkcC1cdTAwM2VmbGFncyB8PSBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgeGRwX2J1ZmZfaXNfZnJhZ19wcChjb25zdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhISh4ZHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHhkcF9idWZmX2dldF9za2JfZmxhZ3MoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApXG4ge1xuIFx0cmV0dXJuIHhkcC1cdTAwM2VmbGFncztcbkBAIC0zOTQsNiAmIzQzOzQxMiwxNSBAQCB2b2lkIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUsXG4gXHR4ZHAtXHUwMDNlZGF0YV9tZXRhID0gZnJhbWUtXHUwMDNlZGF0YSAtIGZyYW1lLVx1MDAzZW1ldGFzaXplO1xuIFx0eGRwLVx1MDAzZWZyYW1lX3N6ID0gZnJhbWUtXHUwMDNlZnJhbWVfc3o7XG4gXHR4ZHAtXHUwMDNlZmxhZ3MgPSBmcmFtZS1cdTAwM2VmbGFncztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGZyYW1lLVx1MDAzZWZsYWdzIG5ldmVyIGNhcnJpZXMgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCAoaXQgaXMgc3RyaXBwZWRcbiYjNDM7XHQgKiBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpKTsgcmUtZGVyaXZlIGl0IGZyb20gdGhlIGZyYW1lJiMzOTtzIG93blxuJiM0MztcdCAqIG1lbW9yeSB0eXBlLiB2ZXRoIGFuZCBkZXZtYXAgcmVidWlsZCBhIGJ1ZmYgaGVyZSBhbmQgcnVuIGEgcHJvZ3JhbVxuJiM0MztcdCAqIHdob3NlIHJ4cSBzYXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyB3aXRob3V0IHRoaXMgYSBzaHJpbmsgd291bGRcbiYjNDM7XHQgKiBmcmVlIGEgcGFnZV9wb29sIGZyYWcgdGhyb3VnaCBwYWdlX2ZyYWdfZnJlZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmcmFtZS1cdTAwM2VtZW1fdHlwZSA9PSBNRU1fVFlQRV9QQUdFX1BPT0wpXG4mIzQzO1x0XHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lXG5AQCAtNDIwLDcgJiM0Mzs0NDcsOCBAQCBpbnQgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4gXHR4ZHBfZnJhbWUtXHUwMDNlaGVhZHJvb20gPSBoZWFkcm9vbSAtIHNpemVvZigqeGRwX2ZyYW1lKTtcbiBcdHhkcF9mcmFtZS1cdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xuIFx0eGRwX2ZyYW1lLVx1MDAzZWZyYW1lX3N6ID0geGRwLVx1MDAzZWZyYW1lX3N6O1xuLVx0eGRwX2ZyYW1lLVx1MDAzZWZsYWdzID0geGRwLVx1MDAzZWZsYWdzO1xuJiM0MztcdC8qIFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wgaXMgeGRwX2J1ZmYgb25seSwgZG9uJiMzOTt0IGNhcnJ5IGl0IG92ZXIgKi9cbiYjNDM7XHR4ZHBfZnJhbWUtXHUwMDNlZmxhZ3MgPSB4ZHAtXHUwMDNlZmxhZ3MgXHUwMDI2IH5YRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDI5MGUwZjA5OWU2YmYuLjk0MjY4ZjRkM2M1ZjcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC01NTMyLDYgJiM0Mzs1NTMyLDEyIEBAIHUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4gXHRpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSB7XG4gXHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2V4ZHBfZnJhZ3Nfc2l6ZSA9IHNrYi1cdTAwM2VkYXRhX2xlbjtcbiBcdFx0eGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIG5vbmxpbmVhciBza2Igd2FzIGNvdyYjMzk7ZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYnlcbiYjNDM7XHRcdCAqIHNrYl9jb3dfZGF0YV9mb3JfeGRwKCkgYmVmb3JlIHdlIGdvdCBoZXJlLCBzbyB0aGUgZnJhZ3MgbXVzdFxuJiM0MztcdFx0ICogYmUgZnJlZWQgdG8gdGhhdCBwb29sLCBub3QgdmlhIHRoZSByeHEmIzM5O3MgTUVNX1RZUEVfUEFHRV9TSEFSRUQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR4ZHBfYnVmZl9jbGVhcl9mcmFnc19mbGFnKHhkcCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uZDM0YmE1NmQ3OWQ4ZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTQzNzgsNiAmIzQzOzQzNzgsMTMgQEAgc3RhdGljIGJvb2wgYnBmX3hkcF9zaHJpbmtfZGF0YShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc2tiX2ZyYWdfdCAqZnJhZyxcbiBcdGlmIChtZW1fdHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MKSB7XG4gXHRcdG5ldG1lbSA9IDA7XG4gXHRcdHpjX2ZyYWcgPSBicGZfeGRwX3Nocmlua19kYXRhX3pjKHhkcCwgc2hyaW5rLCB0YWlsLCByZWxlYXNlKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHhkcF9idWZmX2lzX2ZyYWdfcHAoeGRwKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNrYi1iYWNrZWQgWERQIChnZW5lcmljIFhEUCwgdmV0aCkgY293JiMzOTtzIHRoZSBmcmFncyBpbnRvIGFcbiYjNDM7XHRcdCAqIHBhZ2VfcG9vbCB3aGlsZSB0aGUgcnhxIHN0YXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBmcmVlXG4mIzQzO1x0XHQgKiB0aGUgZnJhZyB0byB0aGUgcG9vbCwgbm90IHZpYSBwYWdlX2ZyYWdfZnJlZSgpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfUE9PTDtcbiBcdH1cbiBcbiBcdGlmIChyZWxlYXNlKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU4ZjkwMzRhMjY4NFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXG5AQCAtMCwwICYjNDM7MSwyODggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldHdvcmtfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3R1bi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3Vpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hkcF9zaHJpbmtfZnJhZ3Muc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIGdlbmVyaWMtWERQIHByb2dyYW0gdGhhdCBzaHJpbmtzIGludG8gdGhlIGZyYWdzIGZyZWVzIGEgcGFnZV9wb29sIGZyYWcuXG4mIzQzOyAqIHNrYi1iYWNrZWQgWERQIGZpcnN0IGNvdyYjMzk7cyB0aGUgbm9ubGluZWFyIHNrYiBpbnRvIHBhZ2VfcG9vbCBtZW1vcnlcbiYjNDM7ICogKHNrYl9jb3dfZGF0YV9mb3JfeGRwKCkgZm9yIGdlbmVyaWMgWERQLCBza2JfcHBfY293X2RhdGEoKSBmb3IgdmV0aCksIGJ1dFxuJiM0MzsgKiB0aGUgc2hhcmVkIHJ4cSBpcyByZWdpc3RlcmVkIGFzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBhIGJ1Z2d5IGtlcm5lbFxuJiM0MzsgKiBmcmVlcyB0aGUgZnJhZyB3aXRoIHBhZ2VfZnJhZ19mcmVlKCkgLVx1MDAzZSBcJiMzNDtCYWQgcGFnZSBzdGF0ZSAuLi4gcGFnZV9wb29sIGxlYWtcJiMzNDsuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBUQVBfTkFNRVx0XCYjMzQ7eGRwX3NocmluazBcJiMzNDtcbiYjNDM7I2RlZmluZSBUQVBfTkVUTlNcdFwmIzM0O3hkcF9zaHJpbmtfdGFwXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5TX05BTUVfTUFYX0xFTlx0MzJcbiYjNDM7I2RlZmluZSBWRVRIX0xPQ0FMXHRcJiMzNDt4ZHBfc2hyaW5rQVwmIzM0O1xuJiM0MzsjZGVmaW5lIFZFVEhfUEVFUlx0XCYjMzQ7eGRwX3Nocmlua0JcJiMzNDtcbiYjNDM7I2RlZmluZSBWRVRIX0xPQ0FMX0lQXHRcJiMzNDsxMC45LjkuMVwmIzM0O1xuJiM0MzsjZGVmaW5lIFZFVEhfUEVFUl9JUFx0XCYjMzQ7MTAuOS45LjJcJiMzNDtcbiYjNDM7I2RlZmluZSBWRVRIX0xPQ0FMX01BQ1x0XCYjMzQ7MDI6MDA6MDA6MDA6MDA6MDFcJiMzNDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIHNrYl9wcF9jb3dfZGF0YSgpIGtlZXBzIHVwIHRvIG9uZSBwYWdlIGluIHRoZSBsaW5lYXIgcGFydCwgc28gdGhlIHBhY2tldFxuJiM0MzsgKiBzaXplcyBiZWxvdyBvbmx5IGxlYXZlIGEgZnJhZyAoc21hbGxlciB0aGFuIHRoZSAzMDAwLWJ5dGUgc2hyaW5rLCBzbyBpdCBpc1xuJiM0MzsgKiByZWxlYXNlZCBhcyBhIHdob2xlKSBvbiA0SyBwYWdlcy4gU2tpcCBlbHNld2hlcmUgcmF0aGVyIHRoYW4gcnVuIGEgdGVzdFxuJiM0MzsgKiB0aGF0IGNhbm5vdCB0ZWxsIGEgZml4ZWQga2VybmVsIGZyb20gYSBidWdneSBvbmUuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFBBR0VfU0laRV80S1x0NDA5NlxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogR2VuZXJvdXMsIHNvIGEgbG9hZGVkIENJIGRvZXMgbm90IGZhaWwgdGhlIGFzc2VydCBwcmVtYXR1cmVseTsgbm9ybWFsbHlcbiYjNDM7ICogdGhlIGZpcnN0IGNoZWNrIGFscmVhZHkgc3VjY2VlZHMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFdBSVRfSVRFUlNcdDEwMDAwXG4mIzQzOyNkZWZpbmUgV0FJVF9VU1x0XHQxMDAwXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wcm9nKHN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFdBSVRfSVRFUlMgXHUwMDI2XHUwMDI2ICFza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHVzbGVlcChXQUlUX1VTKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoY29uc3QgY2hhciAqaWZuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlmcmVxIGlmciA9IHtcbiYjNDM7XHRcdC5pZnJfZmxhZ3MgPSBJRkZfVEFQIHwgSUZGX05PX1BJIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUyxcbiYjNDM7XHR9O1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRzdHJzY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9kZXYvbmV0L3R1blwmIzM0OywgT19SRFdSKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBpb2N0bChmZCwgVFVOU0VUSUZGLCBcdTAwMjZpZnIpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGVyciA9IC1lcnJubztcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFNpbWlsYXIgdG8gZmxvd19kaXNzZWN0b3IuYzogd3JpdGV2KCkgYW4gSUZGX05BUElfRlJBR1MgdGFwIHRvIGJ1aWxkIGFcbiYjNDM7ICogbm9ubGluZWFyIHNrYiB0aGF0IHR1biBydW5zIHRocm91Z2ggZG9feGRwX2dlbmVyaWMoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfdHVuKHN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsKVxuJiM0Mzt7XG4mIzQzO1x0X191OCBoZWFkWzc0XSwgZnJhZzFbMjA0OF0sIGZyYWcyWzIwNDhdO1xuJiM0MztcdHN0cnVjdCBldGhoZHIgKmV0aCA9ICh2b2lkICopaGVhZDtcbiYjNDM7XHRpbnQgdGFwX2ZkID0gLTEsIGlmaW5kZXgsIGVycjtcbiYjNDM7XHRzdHJ1Y3QgbmV0bnNfb2JqICpucyA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGlvdmVjIGlvdlszXTtcbiYjNDM7XHRzc2l6ZV90IG47XG4mIzQzO1xuJiM0MztcdGlmIChnZXRwYWdlc2l6ZSgpICE9IFBBR0VfU0laRV80Sykge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnMgPSBuZXRuc19uZXcoVEFQX05FVE5TLCB0cnVlKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobnMsIFwmIzM0O25ldG5zX25ld1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHRhcF9mZCA9IGNyZWF0ZV90YXBfbmFwaV9mcmFncyhUQVBfTkFNRSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UodGFwX2ZkLCAwLCBcJiMzNDtjcmVhdGVfdGFwXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRTWVMob3V0LCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgXCYjMzQ7IFRBUF9OQU1FIFwmIzM0OyB1cFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChUQVBfTkFNRSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1QoaWZpbmRleCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXhcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNocmlua19yYW4gPSAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfeGRwX2F0dGFjaChpZmluZGV4LCBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy54ZHBfc2hyaW5rKSxcbiYjNDM7XHRcdFx0ICAgICAwLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2JwZl94ZHBfYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoaGVhZCwgMCwgc2l6ZW9mKGhlYWQpKTtcbiYjNDM7XHRtZW1zZXQoZnJhZzEsIDB4NDEsIHNpemVvZihmcmFnMSkpO1xuJiM0MztcdG1lbXNldChmcmFnMiwgMHg0Miwgc2l6ZW9mKGZyYWcyKSk7XG4mIzQzO1x0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4mIzQzO1xuJiM0MztcdGlvdlswXS5pb3ZfYmFzZSA9IGhlYWQ7ICBpb3ZbMF0uaW92X2xlbiA9IHNpemVvZihoZWFkKTtcbiYjNDM7XHRpb3ZbMV0uaW92X2Jhc2UgPSBmcmFnMTsgaW92WzFdLmlvdl9sZW4gPSBzaXplb2YoZnJhZzEpO1xuJiM0MztcdGlvdlsyXS5pb3ZfYmFzZSA9IGZyYWcyOyBpb3ZbMl0uaW92X2xlbiA9IHNpemVvZihmcmFnMik7XG4mIzQzO1xuJiM0MztcdG4gPSB3cml0ZXYodGFwX2ZkLCBpb3YsIEFSUkFZX1NJWkUoaW92KSk7XG4mIzQzO1x0QVNTRVJUX0VRKG4sIHNpemVvZihoZWFkKSAmIzQzOyBzaXplb2YoZnJhZzEpICYjNDM7IHNpemVvZihmcmFnMiksIFwmIzM0O3dyaXRldlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHdhaXRfZm9yX3Byb2coc2tlbCk7XG4mIzQzO1x0LyogYSBidWdneSBrZXJuZWwgb25seSBzcGxhdHMgXCYjMzQ7cGFnZV9wb29sIGxlYWtcJiMzNDssIGl0IGRvZXMgbm90IGZhaWwgaGVyZSAqL1xuJiM0MztcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuLCAwLCBcJiMzNDt4ZHBfcHJvZ19yYW5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRicGZfeGRwX2RldGFjaChpZmluZGV4LCAwLCBOVUxMKTtcbiYjNDM7b3V0OlxuJiM0MztcdGlmICh0YXBfZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UodGFwX2ZkKTtcbiYjNDM7XHRuZXRuc19mcmVlKG5zKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQm90aCB2ZXRoIGVuZHMgbGl2ZSBpbiB0aGVpciBvd24gbmFtZXNwYWNlLCBzbyB0aGUgdHJhZmZpYyByZWFsbHkgY3Jvc3Nlc1xuJiM0MzsgKiB0aGUgcGFpciBhbmQgbm90aGluZyBpcyBjcmVhdGVkIGluIHRoZSBjYWxsZXImIzM5O3MgbmFtZXNwYWNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB2ZXRoX3NldHVwKGNoYXIgKm5zMCwgY2hhciAqbnMxKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soYXBwZW5kX3RpZChuczAsIE5TX05BTUVfTUFYX0xFTiksIFwmIzM0O2FwcGVuZF90aWQgbnMwXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhhcHBlbmRfdGlkKG5zMSwgTlNfTkFNRV9NQVhfTEVOKSwgXCYjMzQ7YXBwZW5kX3RpZCBuczFcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBuczApO1xuJiM0MztcdFNZUyhmYWlsX25zMCwgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBuczEpO1xuJiM0MztcdFNZUyhmYWlsX25zMSwgXCYjMzQ7aXAgLW4gJXMgbGluayBhZGQgJXMgbXR1IDgwMDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlcyBtdHUgODAwMFwmIzM0OyxcbiYjNDM7XHQgICAgbnMwLCBWRVRIX0xPQ0FMLCBWRVRIX1BFRVIpO1xuJiM0MztcdFNZUyhmYWlsX25zMSwgXCYjMzQ7aXAgLW4gJXMgbGluayBzZXQgJXMgbmV0bnMgJXNcJiMzNDssIG5zMCwgVkVUSF9QRUVSLCBuczEpO1xuJiM0MztcdFNZUyhmYWlsX25zMSwgXCYjMzQ7aXAgLW4gJXMgbGluayBzZXQgJXMgYWRkcmVzcyAlc1wmIzM0OywgbnMwLCBWRVRIX0xPQ0FMLFxuJiM0MztcdCAgICBWRVRIX0xPQ0FMX01BQyk7XG4mIzQzO1x0U1lTKGZhaWxfbnMxLCBcJiMzNDtpcCAtbiAlcyBhZGRyIGFkZCAlcy8yNCBkZXYgJXNcJiMzNDssIG5zMCwgVkVUSF9MT0NBTF9JUCxcbiYjNDM7XHQgICAgVkVUSF9MT0NBTCk7XG4mIzQzO1x0U1lTKGZhaWxfbnMxLCBcJiMzNDtpcCAtbiAlcyBsaW5rIHNldCAlcyB1cFwmIzM0OywgbnMwLCBWRVRIX0xPQ0FMKTtcbiYjNDM7XHRTWVMoZmFpbF9uczEsIFwmIzM0O2lwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlc1wmIzM0OywgbnMxLCBWRVRIX1BFRVJfSVAsXG4mIzQzO1x0ICAgIFZFVEhfUEVFUik7XG4mIzQzO1x0U1lTKGZhaWxfbnMxLCBcJiMzNDtpcCAtbiAlcyBsaW5rIHNldCAlcyB1cFwmIzM0OywgbnMxLCBWRVRIX1BFRVIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2ZhaWxfbnMxOlxuJiM0MztcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsICVzXCYjMzQ7LCBuczEpO1xuJiM0MztmYWlsX25zMDpcbiYjNDM7XHRTWVNfTk9GQUlMKFwmIzM0O2lwIG5ldG5zIGRlbCAlc1wmIzM0OywgbnMwKTtcbiYjNDM7ZmFpbDpcbiYjNDM7XHRyZXR1cm4gLTE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZldGhfY2xlYW51cChjb25zdCBjaGFyICpuczAsIGNvbnN0IGNoYXIgKm5zMSlcbiYjNDM7e1xuJiM0MztcdC8qIERyb3BwaW5nIHRoZSBuYW1lc3BhY2VzIHRha2VzIHRoZSB2ZXRoIHBhaXIgYW5kIGl0cyBYRFAgcHJvZ3JhbXMuICovXG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgJXNcJiMzNDssIG5zMSk7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgJXNcJiMzNDssIG5zMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmV0aF9hdHRhY2goY29uc3QgY2hhciAqbnMsIGNvbnN0IGNoYXIgKmRldiwgaW50IHByb2dfZmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbjtcbiYjNDM7XHRpbnQgaWZpbmRleCwgZXJyO1xuJiM0MztcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhucyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwmIzM0O29wZW5fbmV0bnNcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZmluZGV4ID0gaWZfbmFtZXRvaW5kZXgoZGV2KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChpZmluZGV4LCAwLCBcJiMzNDtpZl9uYW1ldG9pbmRleFwmIzM0OykpIHtcbiYjNDM7XHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3hkcF9hdHRhY2goaWZpbmRleCwgcHJvZ19mZCwgMCwgTlVMTCk7XG4mIzQzO1x0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfeGRwX2F0dGFjaFwmIzM0OykgPyAwIDogLTE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEEgbGFyZ2UgcGluZyBidWlsZHMgYSBub25saW5lYXIgc2tiIHRoYXQgdmV0aCBjb3cmIzM5O3MgaW50byBpdHMgcGFnZV9wb29sLiAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3ZldGgoc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIG5zMFtOU19OQU1FX01BWF9MRU5dID0gXCYjMzQ7eGRwX3Nocmlua19uczAtXCYjMzQ7O1xuJiM0MztcdGNoYXIgbnMxW05TX05BTUVfTUFYX0xFTl0gPSBcJiMzNDt4ZHBfc2hyaW5rX25zMS1cJiMzNDs7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRwYWdlc2l6ZSgpICE9IFBBR0VfU0laRV80Sykge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZldGhfc2V0dXAobnMwLCBuczEpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHZldGhfYXR0YWNoKG5zMCwgVkVUSF9MT0NBTCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MueGRwX3NocmluaykpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZXhlYyAlcyBwaW5nIC1xIC1zIDUwMDAgLWMgMyAtVyAxICVzXCYjMzQ7LFxuJiM0MztcdFx0ICAgbnMxLCBWRVRIX0xPQ0FMX0lQKTtcbiYjNDM7XG4mIzQzO1x0d2FpdF9mb3JfcHJvZyhza2VsKTtcbiYjNDM7XHQvKiBhIGJ1Z2d5IGtlcm5lbCBvbmx5IHNwbGF0cyBcJiMzNDtwYWdlX3Bvb2wgbGVha1wmIzM0OywgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovXG4mIzQzO1x0QVNTRVJUX0dUKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNocmlua19yYW4sIDAsIFwmIzM0O3hkcF9wcm9nX3JhblwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHR2ZXRoX2NsZWFudXAobnMwLCBuczEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBMT0NBTCBjb3cmIzM5O3MgdGhlIGluY29taW5nIHNrYiBhbmQgcmV0dXJucyBYRFBfVFgsIHNvIHRoZSBidWZmIGlzIHR1cm5lZCBpbnRvXG4mIzQzOyAqIGFuIHhkcF9mcmFtZSBhbmQgYm91bmNlZCB0byBQRUVSLCB3aGljaCBzaHJpbmtzIGEgZnJhZy4gQSBwYWdlX3Bvb2wgdGFnXG4mIzQzOyAqIHJlY29yZGVkIG9uIHRoZSBidWZmIG11c3Qgbm90IGxlYWsgaW50byB0aGUgZnJhbWUsIG9yIFBFRVIgZnJlZXMgYSBwbGFpblxuJiM0MzsgKiBwYWdlICh3aG9zZSBwcCB3YXMgYWxyZWFkeSBjbGVhcmVkIG9uIHRoZSBYRFBfVFggc2lkZSkgYXMgcGFnZV9wb29sIG1lbW9yeS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfdmV0aF90eChzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbClcbiYjNDM7e1xuJiM0MztcdGNoYXIgbnMwW05TX05BTUVfTUFYX0xFTl0gPSBcJiMzNDt4ZHBfc2hyaW5rX3R4MC1cJiMzNDs7XG4mIzQzO1x0Y2hhciBuczFbTlNfTkFNRV9NQVhfTEVOXSA9IFwmIzM0O3hkcF9zaHJpbmtfdHgxLVwmIzM0OztcbiYjNDM7XG4mIzQzO1x0aWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmV0aF9zZXR1cChuczAsIG5zMSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTE9DQUwgYm91bmNlcyBldmVyeXRoaW5nIChpbmNsLiBBUlApIHdpdGggWERQX1RYLCBzbyBwaW4gYSBzdGF0aWNcbiYjNDM7XHQgKiBuZWlnaGJvdXIgdG8gbGV0IHRoZSBwaW5nJiMzOTtzIHBheWxvYWQgYWN0dWFsbHkgcmVhY2ggaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKG91dCwgXCYjMzQ7aXAgLW4gJXMgbmVpZ2ggYWRkICVzIGxsYWRkciAlcyBkZXYgJXMgbnVkIHBlcm1hbmVudFwmIzM0OyxcbiYjNDM7XHQgICAgbnMxLCBWRVRIX0xPQ0FMX0lQLCBWRVRIX0xPQ0FMX01BQywgVkVUSF9QRUVSKTtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlc2hyaW5rX3JhbiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICh2ZXRoX2F0dGFjaChuczAsIFZFVEhfTE9DQUwsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF90eCkpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKHZldGhfYXR0YWNoKG5zMSwgVkVUSF9QRUVSLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy54ZHBfc2hyaW5rKSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXNcJiMzNDssXG4mIzQzO1x0XHQgICBuczEsIFZFVEhfTE9DQUxfSVApO1xuJiM0MztcbiYjNDM7XHR3YWl0X2Zvcl9wcm9nKHNrZWwpO1xuJiM0MztcdC8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzIFwmIzM0O3BhZ2VfcG9vbCBsZWFrXCYjMzQ7LCBpdCBkb2VzIG5vdCBmYWlsIGhlcmUgKi9cbiYjNDM7XHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc2hyaW5rX3JhbiwgMCwgXCYjMzQ7eGRwX3Byb2dfcmFuXCYjMzQ7KTtcbiYjNDM7b3V0OlxuJiM0MztcdHZldGhfY2xlYW51cChuczAsIG5zMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF94ZHBfc2hyaW5rX2ZyYWdzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbDtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHhkcF9zaHJpbmtfZnJhZ3NfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbF9vcGVuX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt0dW5cJiMzNDspKVxuJiM0MztcdFx0dGVzdF90dW4oc2tlbCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dmV0aFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3ZldGgoc2tlbCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dmV0aF90eFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3ZldGhfdHgoc2tlbCk7XG4mIzQzO1xuJiM0MztcdHhkcF9zaHJpbmtfZnJhZ3NfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zaHJpbmtfZnJhZ3MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFkODk1YWI2OTkzMDNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmNcbkBAIC0wLDAgJiM0MzsxLDM0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7aW50IHNocmlua19yYW47XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7eGRwLmZyYWdzXCYjMzQ7KVxuJiM0MztpbnQgeGRwX3NocmluayhzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJ1bnMgb24gYm90aCBza2ItYmFja2VkIFhEUCBwYXRocyAoZ2VuZXJpYyBYRFAgdmlhIHR1biwgYW5kIHZldGgpOlxuJiM0MztcdCAqIHRoZSBub25saW5lYXIgc2tiIGlzIGNvdyYjMzk7ZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYmVmb3JlIHdlIHJ1biwgc29cbiYjNDM7XHQgKiBzaHJpbmtpbmcgdGhlIHRhaWwgcmVsZWFzZXMgYSB3aG9sZSBmcmFnIHRoYXQgaGFzIHRvIGdvIGJhY2sgdG8gdGhhdFxuJiM0MztcdCAqIHBvb2wuIFRoZSBjb3VudGVyIG9ubHkgdGVsbHMgdXMgdGhlIHByb2dyYW0gcmFuIGFuZCB0aGUgaGVscGVyXG4mIzQzO1x0ICogc3VjY2VlZGVkIC0tIGEgbGluZWFyIGJ1ZmYgcmV0dXJucyAwIGFzIHdlbGwgLS0gaXQgZG9lcyBub3QgcHJvdmUgYVxuJiM0MztcdCAqIGZyYWcgd2FzIHJlbGVhc2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChicGZfeGRwX2FkanVzdF90YWlsKGN0eCwgLTMwMDApID09IDApXG4mIzQzO1x0XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZzaHJpbmtfcmFuLCAxKTtcbiYjNDM7XHRyZXR1cm4gWERQX1BBU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt4ZHAuZnJhZ3NcJiMzNDspXG4mIzQzO2ludCB4ZHBfdHgoc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCb3VuY2UgdGhlIGZyYW1lIGJhY2suIE9uIHZldGggdGhpcyB0dXJucyB0aGUgYnVmZiBpbnRvIGFuXG4mIzQzO1x0ICogeGRwX2ZyYW1lLCB3aGljaCBpcyB3aGVyZSBhIGJ1ZmYtc2NvcGVkIHBhZ2VfcG9vbCB0YWcgbXVzdCBub3QgbGVha1xuJiM0MztcdCAqIGludG8gdGhlIGZyYW1lIGhhbmRlZCB0byB0aGUgcGVlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gWERQX1RYO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtWRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfYWRqdXN0X3RhaWwmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9wdWxsX2RhdGEmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9zaHJpbmtfZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmJiMzNDssCiAgICAmIzM0O3ZldGhfeGRwX3Jjdl9za2ImIzM0OywKICAgICYjMzQ7dmV0aF94ZHBfcmN2X29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBYRFAgZnJhZ21lbnQgaGFuZGxpbmcgbG9naWMgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgZ2VuZXJpYyBYRFAsIGFuZCB0aGUgdmV0aCBkcml2ZXIgdG8gcHJvcGVybHkgdHJhY2sgcGFnZV9wb29sIGJhY2tlZCBmcmFnbWVudHMgd2hlbiBzaHJpbmtpbmcgWERQIGJ1ZmZlcnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyAodmV0aCwgdHVuL3RhcCkgYW5kIEJQRi9YRFAgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNDY0MmYyMWYxODAxNjBlNTM0NjM5NmFlNjhkNjBjMzI5M2U4MzAxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTQ6NDU6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggNmVkM2VlODExNTNmYi4uYTNmZGYxOTU5Yjc2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtNzc1LDYgJiM0Mzs3NzUsMTIgQEAgc3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSwKIAlpZiAoc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFncykgewogCQlza2Jfc2hpbmZvKHNrYiktJmd0O3hkcF9mcmFnc19zaXplID0gc2tiLSZndDtkYXRhX2xlbjsKIAkJeGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIG5vbmxpbmVhciBza2Igd2FzIGNvdyYjMzk7ZCBpbnRvIHJxLSZndDtwYWdlX3Bvb2wgYWJvdmUsIHNvIHRoZQomIzQzOwkJICogZnJhZ3MgbXVzdCBiZSBmcmVlZCB0byB0aGF0IHBvb2wsIG5vdCB2aWEgdGhlIHJ4cSYjMzk7cwomIzQzOwkJICogTUVNX1RZUEVfUEFHRV9TSEFSRUQuCiYjNDM7CQkgKi8KJiM0MzsJCXhkcF9idWZmX3NldF9mcmFnX3BwKHhkcCk7CiAJfSBlbHNlIHsKIAkJeGRwX2J1ZmZfY2xlYXJfZnJhZ3NfZmxhZyh4ZHApOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcC5oIGIvaW5jbHVkZS9uZXQveGRwLmgKaW5kZXggYWE3NDJmNDEzYzM1OC4uOGZkNDEzOWU5Y2JkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQveGRwLmgKQEAgLTgxLDYgJiM0Mzs4MSwxNCBAQCBlbnVtIHhkcF9idWZmX2ZsYWdzIHsKIAkgKiBYRFAgcHJvZ3JhbSBpcyBub3QgYXR0YWNoZWQuCiAJICovCiAJWERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEUJPSBCSVQoMiksCiYjNDM7CS8qCiYjNDM7CSAqIGZyYWdzIGFyZSBwYWdlX3Bvb2wgbWVtb3J5IGV2ZW4gdGhvdWdoIHJ4cS0mZ3Q7bWVtLnR5cGUgaXMgbm90OiBhCiYjNDM7CSAqIHNrYi1iYWNrZWQgWERQIGJ1ZmYgKGdlbmVyaWMgWERQLCB2ZXRoKSBpcyBjb3cmIzM5O2QgaW50byBhIHBhZ2VfcG9vbC4KJiM0MzsJICogeGRwX2J1ZmYgb25seTogYW4geGRwX2ZyYW1lIGRlc2NyaWJlcyBpdHMgbWVtb3J5IHdpdGggOjptZW1fdHlwZSwgc28KJiM0MzsJICogdGhpcyBpcyBzdHJpcHBlZCBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpIGFuZCByZS1kZXJpdmVkIGZyb20KJiM0MzsJICogOjptZW1fdHlwZSBpbiB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKCkuCiYjNDM7CSAqLwomIzQzOwlYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MCT0gQklUKDMpLAogfTsKIAogc3RydWN0IHhkcF9idWZmIHsKQEAgLTEzMSw2ICYjNDM7MTM5LDE2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB4ZHBfYnVmZl9zZXRfZnJhZ191bnJlYWRhYmxlKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQogCXhkcC0mZ3Q7ZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEU7CiB9CiAKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoc3RydWN0IHhkcF9idWZmICp4ZHApCiYjNDM7ewomIzQzOwl4ZHAtJmd0O2ZsYWdzIHw9IFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0w7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB4ZHBfYnVmZl9pc19mcmFnX3BwKGNvbnN0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQomIzQzO3sKJiM0MzsJcmV0dXJuICEhKHhkcC0mZ3Q7ZmxhZ3MgJmFtcDsgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgeGRwX2J1ZmZfZ2V0X3NrYl9mbGFncyhjb25zdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCkKIHsKIAlyZXR1cm4geGRwLSZndDtmbGFnczsKQEAgLTM5NCw2ICYjNDM7NDEyLDE1IEBAIHZvaWQgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSwKIAl4ZHAtJmd0O2RhdGFfbWV0YSA9IGZyYW1lLSZndDtkYXRhIC0gZnJhbWUtJmd0O21ldGFzaXplOwogCXhkcC0mZ3Q7ZnJhbWVfc3ogPSBmcmFtZS0mZ3Q7ZnJhbWVfc3o7CiAJeGRwLSZndDtmbGFncyA9IGZyYW1lLSZndDtmbGFnczsKJiM0MzsJLyoKJiM0MzsJICogZnJhbWUtJmd0O2ZsYWdzIG5ldmVyIGNhcnJpZXMgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCAoaXQgaXMgc3RyaXBwZWQKJiM0MzsJICogaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSk7IHJlLWRlcml2ZSBpdCBmcm9tIHRoZSBmcmFtZSYjMzk7cyBvd24KJiM0MzsJICogbWVtb3J5IHR5cGUuIHZldGggYW5kIGRldm1hcCByZWJ1aWxkIGEgYnVmZiBoZXJlIGFuZCBydW4gYSBwcm9ncmFtCiYjNDM7CSAqIHdob3NlIHJ4cSBzYXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyB3aXRob3V0IHRoaXMgYSBzaHJpbmsgd291bGQKJiM0MzsJICogZnJlZSBhIHBhZ2VfcG9vbCBmcmFnIHRocm91Z2ggcGFnZV9mcmFnX2ZyZWUoKS4KJiM0MzsJICovCiYjNDM7CWlmIChmcmFtZS0mZ3Q7bWVtX3R5cGUgPT0gTUVNX1RZUEVfUEFHRV9QT09MKQomIzQzOwkJeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKTsKIH0KIAogc3RhdGljIGlubGluZQpAQCAtNDIwLDcgJiM0Mzs0NDcsOCBAQCBpbnQgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHAsCiAJeGRwX2ZyYW1lLSZndDtoZWFkcm9vbSA9IGhlYWRyb29tIC0gc2l6ZW9mKCp4ZHBfZnJhbWUpOwogCXhkcF9mcmFtZS0mZ3Q7bWV0YXNpemUgPSBtZXRhc2l6ZTsKIAl4ZHBfZnJhbWUtJmd0O2ZyYW1lX3N6ID0geGRwLSZndDtmcmFtZV9zejsKLQl4ZHBfZnJhbWUtJmd0O2ZsYWdzID0geGRwLSZndDtmbGFnczsKJiM0MzsJLyogWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCBpcyB4ZHBfYnVmZiBvbmx5LCBkb24mIzM5O3QgY2FycnkgaXQgb3ZlciAqLwomIzQzOwl4ZHBfZnJhbWUtJmd0O2ZsYWdzID0geGRwLSZndDtmbGFncyAmYW1wOyB+WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCAyOTBlMGYwOTllNmJmLi45NDI2OGY0ZDNjNWY3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtNTUzMiw2ICYjNDM7NTUzMiwxMiBAQCB1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLAogCWlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHsKIAkJc2tiX3NoaW5mbyhza2IpLSZndDt4ZHBfZnJhZ3Nfc2l6ZSA9IHNrYi0mZ3Q7ZGF0YV9sZW47CiAJCXhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7CiYjNDM7CQkvKgomIzQzOwkJICogQSBub25saW5lYXIgc2tiIHdhcyBjb3cmIzM5O2QgaW50byBwYWdlX3Bvb2wgbWVtb3J5IGJ5CiYjNDM7CQkgKiBza2JfY293X2RhdGFfZm9yX3hkcCgpIGJlZm9yZSB3ZSBnb3QgaGVyZSwgc28gdGhlIGZyYWdzIG11c3QKJiM0MzsJCSAqIGJlIGZyZWVkIHRvIHRoYXQgcG9vbCwgbm90IHZpYSB0aGUgcnhxJiMzOTtzIE1FTV9UWVBFX1BBR0VfU0hBUkVELgomIzQzOwkJICovCiYjNDM7CQl4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApOwogCX0gZWxzZSB7CiAJCXhkcF9idWZmX2NsZWFyX2ZyYWdzX2ZsYWcoeGRwKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLmQzNGJhNTZkNzlkOGYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC00Mzc4LDYgJiM0Mzs0Mzc4LDEzIEBAIHN0YXRpYyBib29sIGJwZl94ZHBfc2hyaW5rX2RhdGEoc3RydWN0IHhkcF9idWZmICp4ZHAsIHNrYl9mcmFnX3QgKmZyYWcsCiAJaWYgKG1lbV90eXBlID09IE1FTV9UWVBFX1hTS19CVUZGX1BPT0wpIHsKIAkJbmV0bWVtID0gMDsKIAkJemNfZnJhZyA9IGJwZl94ZHBfc2hyaW5rX2RhdGFfemMoeGRwLCBzaHJpbmssIHRhaWwsIHJlbGVhc2UpOwomIzQzOwl9IGVsc2UgaWYgKHhkcF9idWZmX2lzX2ZyYWdfcHAoeGRwKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFNrYi1iYWNrZWQgWERQIChnZW5lcmljIFhEUCwgdmV0aCkgY293JiMzOTtzIHRoZSBmcmFncyBpbnRvIGEKJiM0MzsJCSAqIHBhZ2VfcG9vbCB3aGlsZSB0aGUgcnhxIHN0YXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBmcmVlCiYjNDM7CQkgKiB0aGUgZnJhZyB0byB0aGUgcG9vbCwgbm90IHZpYSBwYWdlX2ZyYWdfZnJlZSgpLgomIzQzOwkJICovCiYjNDM7CQltZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfUE9PTDsKIAl9CiAKIAlpZiAocmVsZWFzZSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVlOGY5MDM0YTI2ODQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfc2hyaW5rX2ZyYWdzLmMKQEAgLTAsMCAmIzQzOzEsMjg4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXR3b3JrX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfdHVuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX2V0aGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy91aW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FycGEvaW5ldC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGRwX3Nocmlua19mcmFncy5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBnZW5lcmljLVhEUCBwcm9ncmFtIHRoYXQgc2hyaW5rcyBpbnRvIHRoZSBmcmFncyBmcmVlcyBhIHBhZ2VfcG9vbCBmcmFnLgomIzQzOyAqIHNrYi1iYWNrZWQgWERQIGZpcnN0IGNvdyYjMzk7cyB0aGUgbm9ubGluZWFyIHNrYiBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkKJiM0MzsgKiAoc2tiX2Nvd19kYXRhX2Zvcl94ZHAoKSBmb3IgZ2VuZXJpYyBYRFAsIHNrYl9wcF9jb3dfZGF0YSgpIGZvciB2ZXRoKSwgYnV0CiYjNDM7ICogdGhlIHNoYXJlZCByeHEgaXMgcmVnaXN0ZXJlZCBhcyBNRU1fVFlQRV9QQUdFX1NIQVJFRCwgc28gYSBidWdneSBrZXJuZWwKJiM0MzsgKiBmcmVlcyB0aGUgZnJhZyB3aXRoIHBhZ2VfZnJhZ19mcmVlKCkgLSZndDsgJiMzNDtCYWQgcGFnZSBzdGF0ZSAuLi4gcGFnZV9wb29sIGxlYWsmIzM0Oy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFRBUF9OQU1FCSYjMzQ7eGRwX3NocmluazAmIzM0OwomIzQzOyNkZWZpbmUgVEFQX05FVE5TCSYjMzQ7eGRwX3Nocmlua190YXAmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlNfTkFNRV9NQVhfTEVOCTMyCiYjNDM7I2RlZmluZSBWRVRIX0xPQ0FMCSYjMzQ7eGRwX3Nocmlua0EmIzM0OwomIzQzOyNkZWZpbmUgVkVUSF9QRUVSCSYjMzQ7eGRwX3Nocmlua0ImIzM0OwomIzQzOyNkZWZpbmUgVkVUSF9MT0NBTF9JUAkmIzM0OzEwLjkuOS4xJiMzNDsKJiM0MzsjZGVmaW5lIFZFVEhfUEVFUl9JUAkmIzM0OzEwLjkuOS4yJiMzNDsKJiM0MzsjZGVmaW5lIFZFVEhfTE9DQUxfTUFDCSYjMzQ7MDI6MDA6MDA6MDA6MDA6MDEmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogc2tiX3BwX2Nvd19kYXRhKCkga2VlcHMgdXAgdG8gb25lIHBhZ2UgaW4gdGhlIGxpbmVhciBwYXJ0LCBzbyB0aGUgcGFja2V0CiYjNDM7ICogc2l6ZXMgYmVsb3cgb25seSBsZWF2ZSBhIGZyYWcgKHNtYWxsZXIgdGhhbiB0aGUgMzAwMC1ieXRlIHNocmluaywgc28gaXQgaXMKJiM0MzsgKiByZWxlYXNlZCBhcyBhIHdob2xlKSBvbiA0SyBwYWdlcy4gU2tpcCBlbHNld2hlcmUgcmF0aGVyIHRoYW4gcnVuIGEgdGVzdAomIzQzOyAqIHRoYXQgY2Fubm90IHRlbGwgYSBmaXhlZCBrZXJuZWwgZnJvbSBhIGJ1Z2d5IG9uZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBBR0VfU0laRV80Swk0MDk2CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBHZW5lcm91cywgc28gYSBsb2FkZWQgQ0kgZG9lcyBub3QgZmFpbCB0aGUgYXNzZXJ0IHByZW1hdHVyZWx5OyBub3JtYWxseQomIzQzOyAqIHRoZSBmaXJzdCBjaGVjayBhbHJlYWR5IHN1Y2NlZWRzLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgV0FJVF9JVEVSUwkxMDAwMAomIzQzOyNkZWZpbmUgV0FJVF9VUwkJMTAwMAomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHdhaXRfZm9yX3Byb2coc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFdBSVRfSVRFUlMgJmFtcDsmYW1wOyAhc2tlbC0mZ3Q7YnNzLSZndDtzaHJpbmtfcmFuOyBpJiM0MzsmIzQzOykKJiM0MzsJCXVzbGVlcChXQUlUX1VTKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoY29uc3QgY2hhciAqaWZuYW1lKQomIzQzO3sKJiM0MzsJc3RydWN0IGlmcmVxIGlmciA9IHsKJiM0MzsJCS5pZnJfZmxhZ3MgPSBJRkZfVEFQIHwgSUZGX05PX1BJIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUywKJiM0MzsJfTsKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CXN0cnNjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvZGV2L25ldC90dW4mIzM0OywgT19SRFdSKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CWVyciA9IGlvY3RsKGZkLCBUVU5TRVRJRkYsICZhbXA7aWZyKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZXJyID0gLWVycm5vOwomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2ltaWxhciB0byBmbG93X2Rpc3NlY3Rvci5jOiB3cml0ZXYoKSBhbiBJRkZfTkFQSV9GUkFHUyB0YXAgdG8gYnVpbGQgYQomIzQzOyAqIG5vbmxpbmVhciBza2IgdGhhdCB0dW4gcnVucyB0aHJvdWdoIGRvX3hkcF9nZW5lcmljKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF90dW4oc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpCiYjNDM7ewomIzQzOwlfX3U4IGhlYWRbNzRdLCBmcmFnMVsyMDQ4XSwgZnJhZzJbMjA0OF07CiYjNDM7CXN0cnVjdCBldGhoZHIgKmV0aCA9ICh2b2lkICopaGVhZDsKJiM0MzsJaW50IHRhcF9mZCA9IC0xLCBpZmluZGV4LCBlcnI7CiYjNDM7CXN0cnVjdCBuZXRuc19vYmogKm5zID0gTlVMTDsKJiM0MzsJc3RydWN0IGlvdmVjIGlvdlszXTsKJiM0MzsJc3NpemVfdCBuOwomIzQzOwomIzQzOwlpZiAoZ2V0cGFnZXNpemUoKSAhPSBQQUdFX1NJWkVfNEspIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlucyA9IG5ldG5zX25ldyhUQVBfTkVUTlMsIHRydWUpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnMsICYjMzQ7bmV0bnNfbmV3JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0YXBfZmQgPSBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoVEFQX05BTUUpOwomIzQzOwlpZiAoIUFTU0VSVF9HRSh0YXBfZmQsIDAsICYjMzQ7Y3JlYXRlX3RhcCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlTWVMob3V0LCAmIzM0O2lwIGxpbmsgc2V0IGRldiAmIzM0OyBUQVBfTkFNRSAmIzM0OyB1cCYjMzQ7KTsKJiM0MzsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KFRBUF9OQU1FKTsKJiM0MzsJaWYgKCFBU1NFUlRfR1QoaWZpbmRleCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4gPSAwOwomIzQzOwomIzQzOwllcnIgPSBicGZfeGRwX2F0dGFjaChpZmluZGV4LCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3NocmluayksCiYjNDM7CQkJICAgICAwLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl94ZHBfYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1lbXNldChoZWFkLCAwLCBzaXplb2YoaGVhZCkpOwomIzQzOwltZW1zZXQoZnJhZzEsIDB4NDEsIHNpemVvZihmcmFnMSkpOwomIzQzOwltZW1zZXQoZnJhZzIsIDB4NDIsIHNpemVvZihmcmFnMikpOwomIzQzOwlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CiYjNDM7CiYjNDM7CWlvdlswXS5pb3ZfYmFzZSA9IGhlYWQ7ICBpb3ZbMF0uaW92X2xlbiA9IHNpemVvZihoZWFkKTsKJiM0MzsJaW92WzFdLmlvdl9iYXNlID0gZnJhZzE7IGlvdlsxXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcxKTsKJiM0MzsJaW92WzJdLmlvdl9iYXNlID0gZnJhZzI7IGlvdlsyXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcyKTsKJiM0MzsKJiM0MzsJbiA9IHdyaXRldih0YXBfZmQsIGlvdiwgQVJSQVlfU0laRShpb3YpKTsKJiM0MzsJQVNTRVJUX0VRKG4sIHNpemVvZihoZWFkKSAmIzQzOyBzaXplb2YoZnJhZzEpICYjNDM7IHNpemVvZihmcmFnMiksICYjMzQ7d3JpdGV2JiMzNDspOwomIzQzOwomIzQzOwl3YWl0X2Zvcl9wcm9nKHNrZWwpOwomIzQzOwkvKiBhIGJ1Z2d5IGtlcm5lbCBvbmx5IHNwbGF0cyAmIzM0O3BhZ2VfcG9vbCBsZWFrJiMzNDssIGl0IGRvZXMgbm90IGZhaWwgaGVyZSAqLwomIzQzOwlBU1NFUlRfR1Qoc2tlbC0mZ3Q7YnNzLSZndDtzaHJpbmtfcmFuLCAwLCAmIzM0O3hkcF9wcm9nX3JhbiYjMzQ7KTsKJiM0MzsKJiM0MzsJYnBmX3hkcF9kZXRhY2goaWZpbmRleCwgMCwgTlVMTCk7CiYjNDM7b3V0OgomIzQzOwlpZiAodGFwX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZSh0YXBfZmQpOwomIzQzOwluZXRuc19mcmVlKG5zKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCb3RoIHZldGggZW5kcyBsaXZlIGluIHRoZWlyIG93biBuYW1lc3BhY2UsIHNvIHRoZSB0cmFmZmljIHJlYWxseSBjcm9zc2VzCiYjNDM7ICogdGhlIHBhaXIgYW5kIG5vdGhpbmcgaXMgY3JlYXRlZCBpbiB0aGUgY2FsbGVyJiMzOTtzIG5hbWVzcGFjZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHZldGhfc2V0dXAoY2hhciAqbnMwLCBjaGFyICpuczEpCiYjNDM7ewomIzQzOwlpZiAoIUFTU0VSVF9PSyhhcHBlbmRfdGlkKG5zMCwgTlNfTkFNRV9NQVhfTEVOKSwgJiMzNDthcHBlbmRfdGlkIG5zMCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soYXBwZW5kX3RpZChuczEsIE5TX05BTUVfTUFYX0xFTiksICYjMzQ7YXBwZW5kX3RpZCBuczEmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBuczApOwomIzQzOwlTWVMoZmFpbF9uczAsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIG5zMSk7CiYjNDM7CVNZUyhmYWlsX25zMSwgJiMzNDtpcCAtbiAlcyBsaW5rIGFkZCAlcyBtdHUgODAwMCB0eXBlIHZldGggcGVlciBuYW1lICVzIG10dSA4MDAwJiMzNDssCiYjNDM7CSAgICBuczAsIFZFVEhfTE9DQUwsIFZFVEhfUEVFUik7CiYjNDM7CVNZUyhmYWlsX25zMSwgJiMzNDtpcCAtbiAlcyBsaW5rIHNldCAlcyBuZXRucyAlcyYjMzQ7LCBuczAsIFZFVEhfUEVFUiwgbnMxKTsKJiM0MzsJU1lTKGZhaWxfbnMxLCAmIzM0O2lwIC1uICVzIGxpbmsgc2V0ICVzIGFkZHJlc3MgJXMmIzM0OywgbnMwLCBWRVRIX0xPQ0FMLAomIzQzOwkgICAgVkVUSF9MT0NBTF9NQUMpOwomIzQzOwlTWVMoZmFpbF9uczEsICYjMzQ7aXAgLW4gJXMgYWRkciBhZGQgJXMvMjQgZGV2ICVzJiMzNDssIG5zMCwgVkVUSF9MT0NBTF9JUCwKJiM0MzsJICAgIFZFVEhfTE9DQUwpOwomIzQzOwlTWVMoZmFpbF9uczEsICYjMzQ7aXAgLW4gJXMgbGluayBzZXQgJXMgdXAmIzM0OywgbnMwLCBWRVRIX0xPQ0FMKTsKJiM0MzsJU1lTKGZhaWxfbnMxLCAmIzM0O2lwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBuczEsIFZFVEhfUEVFUl9JUCwKJiM0MzsJICAgIFZFVEhfUEVFUik7CiYjNDM7CVNZUyhmYWlsX25zMSwgJiMzNDtpcCAtbiAlcyBsaW5rIHNldCAlcyB1cCYjMzQ7LCBuczEsIFZFVEhfUEVFUik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2ZhaWxfbnMxOgomIzQzOwlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICVzJiMzNDssIG5zMSk7CiYjNDM7ZmFpbF9uczA6CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMmIzM0OywgbnMwKTsKJiM0MztmYWlsOgomIzQzOwlyZXR1cm4gLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZldGhfY2xlYW51cChjb25zdCBjaGFyICpuczAsIGNvbnN0IGNoYXIgKm5zMSkKJiM0Mzt7CiYjNDM7CS8qIERyb3BwaW5nIHRoZSBuYW1lc3BhY2VzIHRha2VzIHRoZSB2ZXRoIHBhaXIgYW5kIGl0cyBYRFAgcHJvZ3JhbXMuICovCiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMmIzM0OywgbnMxKTsKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAlcyYjMzQ7LCBuczApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZldGhfYXR0YWNoKGNvbnN0IGNoYXIgKm5zLCBjb25zdCBjaGFyICpkZXYsIGludCBwcm9nX2ZkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW47CiYjNDM7CWludCBpZmluZGV4LCBlcnI7CiYjNDM7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKG5zKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3Blbl9uZXRucyYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KGRldik7CiYjNDM7CWlmICghQVNTRVJUX0dUKGlmaW5kZXgsIDAsICYjMzQ7aWZfbmFtZXRvaW5kZXgmIzM0OykpIHsKJiM0MzsJCWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGJwZl94ZHBfYXR0YWNoKGlmaW5kZXgsIHByb2dfZmQsIDAsIE5VTEwpOwomIzQzOwljbG9zZV9uZXRucyhuc3Rva2VuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIEFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX3hkcF9hdHRhY2gmIzM0OykgPyAwIDogLTE7CiYjNDM7fQomIzQzOwomIzQzOy8qIEEgbGFyZ2UgcGluZyBidWlsZHMgYSBub25saW5lYXIgc2tiIHRoYXQgdmV0aCBjb3cmIzM5O3MgaW50byBpdHMgcGFnZV9wb29sLiAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfdmV0aChzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbCkKJiM0Mzt7CiYjNDM7CWNoYXIgbnMwW05TX05BTUVfTUFYX0xFTl0gPSAmIzM0O3hkcF9zaHJpbmtfbnMwLSYjMzQ7OwomIzQzOwljaGFyIG5zMVtOU19OQU1FX01BWF9MRU5dID0gJiMzNDt4ZHBfc2hyaW5rX25zMS0mIzM0OzsKJiM0MzsKJiM0MzsJaWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZldGhfc2V0dXAobnMwLCBuczEpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4gPSAwOwomIzQzOwomIzQzOwlpZiAodmV0aF9hdHRhY2gobnMwLCBWRVRIX0xPQ0FMLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3NocmluaykpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXMmIzM0OywKJiM0MzsJCSAgIG5zMSwgVkVUSF9MT0NBTF9JUCk7CiYjNDM7CiYjNDM7CXdhaXRfZm9yX3Byb2coc2tlbCk7CiYjNDM7CS8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzICYjMzQ7cGFnZV9wb29sIGxlYWsmIzM0OywgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovCiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4sIDAsICYjMzQ7eGRwX3Byb2dfcmFuJiMzNDspOwomIzQzO291dDoKJiM0MzsJdmV0aF9jbGVhbnVwKG5zMCwgbnMxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBMT0NBTCBjb3cmIzM5O3MgdGhlIGluY29taW5nIHNrYiBhbmQgcmV0dXJucyBYRFBfVFgsIHNvIHRoZSBidWZmIGlzIHR1cm5lZCBpbnRvCiYjNDM7ICogYW4geGRwX2ZyYW1lIGFuZCBib3VuY2VkIHRvIFBFRVIsIHdoaWNoIHNocmlua3MgYSBmcmFnLiBBIHBhZ2VfcG9vbCB0YWcKJiM0MzsgKiByZWNvcmRlZCBvbiB0aGUgYnVmZiBtdXN0IG5vdCBsZWFrIGludG8gdGhlIGZyYW1lLCBvciBQRUVSIGZyZWVzIGEgcGxhaW4KJiM0MzsgKiBwYWdlICh3aG9zZSBwcCB3YXMgYWxyZWFkeSBjbGVhcmVkIG9uIHRoZSBYRFBfVFggc2lkZSkgYXMgcGFnZV9wb29sIG1lbW9yeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3ZldGhfdHgoc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpCiYjNDM7ewomIzQzOwljaGFyIG5zMFtOU19OQU1FX01BWF9MRU5dID0gJiMzNDt4ZHBfc2hyaW5rX3R4MC0mIzM0OzsKJiM0MzsJY2hhciBuczFbTlNfTkFNRV9NQVhfTEVOXSA9ICYjMzQ7eGRwX3Nocmlua190eDEtJiMzNDs7CiYjNDM7CiYjNDM7CWlmIChnZXRwYWdlc2l6ZSgpICE9IFBBR0VfU0laRV80SykgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2ZXRoX3NldHVwKG5zMCwgbnMxKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTE9DQUwgYm91bmNlcyBldmVyeXRoaW5nIChpbmNsLiBBUlApIHdpdGggWERQX1RYLCBzbyBwaW4gYSBzdGF0aWMKJiM0MzsJICogbmVpZ2hib3VyIHRvIGxldCB0aGUgcGluZyYjMzk7cyBwYXlsb2FkIGFjdHVhbGx5IHJlYWNoIGl0LgomIzQzOwkgKi8KJiM0MzsJU1lTKG91dCwgJiMzNDtpcCAtbiAlcyBuZWlnaCBhZGQgJXMgbGxhZGRyICVzIGRldiAlcyBudWQgcGVybWFuZW50JiMzNDssCiYjNDM7CSAgICBuczEsIFZFVEhfTE9DQUxfSVAsIFZFVEhfTE9DQUxfTUFDLCBWRVRIX1BFRVIpOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4gPSAwOwomIzQzOwomIzQzOwlpZiAodmV0aF9hdHRhY2gobnMwLCBWRVRIX0xPQ0FMLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3R4KSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHZldGhfYXR0YWNoKG5zMSwgVkVUSF9QRUVSLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3NocmluaykpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXMmIzM0OywKJiM0MzsJCSAgIG5zMSwgVkVUSF9MT0NBTF9JUCk7CiYjNDM7CiYjNDM7CXdhaXRfZm9yX3Byb2coc2tlbCk7CiYjNDM7CS8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzICYjMzQ7cGFnZV9wb29sIGxlYWsmIzM0OywgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovCiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4sIDAsICYjMzQ7eGRwX3Byb2dfcmFuJiMzNDspOwomIzQzO291dDoKJiM0MzsJdmV0aF9jbGVhbnVwKG5zMCwgbnMxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3hkcF9zaHJpbmtfZnJhZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsOwomIzQzOwomIzQzOwlza2VsID0geGRwX3Nocmlua19mcmFnc19fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW5fbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0dW4mIzM0OykpCiYjNDM7CQl0ZXN0X3R1bihza2VsKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt2ZXRoJiMzNDspKQomIzQzOwkJdGVzdF92ZXRoKHNrZWwpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3ZldGhfdHgmIzM0OykpCiYjNDM7CQl0ZXN0X3ZldGhfdHgoc2tlbCk7CiYjNDM7CiYjNDM7CXhkcF9zaHJpbmtfZnJhZ3NfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zaHJpbmtfZnJhZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYWQ4OTVhYjY5OTMwMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmMKQEAgLTAsMCAmIzQzOzEsMzQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IHNocmlua19yYW47CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwLmZyYWdzJiMzNDspCiYjNDM7aW50IHhkcF9zaHJpbmsoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogUnVucyBvbiBib3RoIHNrYi1iYWNrZWQgWERQIHBhdGhzIChnZW5lcmljIFhEUCB2aWEgdHVuLCBhbmQgdmV0aCk6CiYjNDM7CSAqIHRoZSBub25saW5lYXIgc2tiIGlzIGNvdyYjMzk7ZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYmVmb3JlIHdlIHJ1biwgc28KJiM0MzsJICogc2hyaW5raW5nIHRoZSB0YWlsIHJlbGVhc2VzIGEgd2hvbGUgZnJhZyB0aGF0IGhhcyB0byBnbyBiYWNrIHRvIHRoYXQKJiM0MzsJICogcG9vbC4gVGhlIGNvdW50ZXIgb25seSB0ZWxscyB1cyB0aGUgcHJvZ3JhbSByYW4gYW5kIHRoZSBoZWxwZXIKJiM0MzsJICogc3VjY2VlZGVkIC0tIGEgbGluZWFyIGJ1ZmYgcmV0dXJucyAwIGFzIHdlbGwgLS0gaXQgZG9lcyBub3QgcHJvdmUgYQomIzQzOwkgKiBmcmFnIHdhcyByZWxlYXNlZC4KJiM0MzsJICovCiYjNDM7CWlmIChicGZfeGRwX2FkanVzdF90YWlsKGN0eCwgLTMwMDApID09IDApCiYjNDM7CQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3Nocmlua19yYW4sIDEpOwomIzQzOwlyZXR1cm4gWERQX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcC5mcmFncyYjMzQ7KQomIzQzO2ludCB4ZHBfdHgoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQm91bmNlIHRoZSBmcmFtZSBiYWNrLiBPbiB2ZXRoIHRoaXMgdHVybnMgdGhlIGJ1ZmYgaW50byBhbgomIzQzOwkgKiB4ZHBfZnJhbWUsIHdoaWNoIGlzIHdoZXJlIGEgYnVmZi1zY29wZWQgcGFnZV9wb29sIHRhZyBtdXN0IG5vdCBsZWFrCiYjNDM7CSAqIGludG8gdGhlIGZyYW1lIGhhbmRlZCB0byB0aGUgcGVlci4KJiM0MzsJICovCiYjNDM7CXJldHVybiBYRFBfVFg7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHdvcnRoaW5lc3MsIHBpbnBvaW50IGtleSBmb2N1cyBzeW1ib2xzLCBhbmQgaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgpGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHRvdWNoZWQgZmlsZXMuIEkgc2VlIGNoYW5nZXMgaW4gYGRyaXZlcnMvbmV0L3ZldGguY2AsIGBpbmNsdWRlL25ldC94ZHAuaGAsIGBuZXQvY29yZS9kZXYuY2AsIGBuZXQvY29yZS9maWx0ZXIuY2AsIGFuZCBzb21lIHNlbGZ0ZXN0cyB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuIFRoaXMgbG9va3MgcHJvbWlzaW5nOyBpdCB0b3VjaGVzIGNvcmUgbmV0d29ya2luZywgQlBGLCBhbmQgYSBzcGVjaWZpYyBkcml2ZXIgKGB2ZXRoYCkuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gb2JzZXJ2aW5nOgoKKiAgIFRoZSBgdmV0aGAgZHJpdmVyIGlzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiBgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZmAgdG8gc2V0IGB4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApYCB3aGVuIGZyYWdtZW50IGluZm9ybWF0aW9uIGlzIHByZXNlbnQuCiogICBUaGUgYHhkcC5oYCBoZWFkZXIgZ2V0cyBuZXcgZmxhZ3MsIGZ1bmN0aW9ucyBsaWtlIGB4ZHBfYnVmZl9zZXRfZnJhZ19wcCgpYCBhbmQgYHhkcF9idWZmX2lzX2ZyYWdfcHAoKWAsIGFuZCB1cGRhdGVzIHRvIGNvbnZlcnNpb24gZnVuY3Rpb25zIChgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgYW5kIGB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZmApIHdoaWNoIGFsc28gcmVsYXRlIHRvIGBQQUdFX1BPT0xgIG1lbW9yeS4KKiAgIGBuZXQvY29yZS9kZXYuY2AmIzM5O3MgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgpYCBpcyBub3cgYWxzbyBzZXR0aW5nIHRoZSBmcmFnbWVudCBmbGFnLgoqICAgYG5ldC9jb3JlL2ZpbHRlci5jYCBpcyB1c2luZyB0aGUgZnJhZ21lbnQgaW5mb3JtYXRpb24gd2l0aGluIGBicGZfeGRwX3Nocmlua19kYXRhYC4KClRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBnZW5lcmljIFhEUCBleGVjdXRpb24sIHRoZSBgdmV0aGAgZHJpdmVyLCBCUEYgZmlsdGVycywgYW5kIGNvcmUgWERQIGZyYW1lIGNvbnZlcnNpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGZyYWdtZW50IGhhbmRsaW5nIGludGVncmF0ZXMgd2l0aGluIHRoZSBCUEYgbGlmZWN5Y2xlLgoKTm93LCBhIGtleSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkgaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYW5rZnVsbHksIGl0IHNlZW1zIGxpa2UgYHZldGhgLCBgdHVuL3RhcGAsIGdlbmVyaWMgWERQLCBhbmQgQlBGIGFkanVzdCB0YWlsIGFyZSBhbGwgc3RhbmRhcmQgbmV0d29yay9CUEYgZmVhdHVyZXMgdGVzdGVkIGJ5IHN5emthbGxlci4gVGhhdCYjMzk7cyBhIGh1Z2Ugd2luIOKAkyBpdCB3aWxsIG1ha2UgdGVzdGluZyBtdWNoIGVhc2llci4KCk15IG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgc3ltYm9scyBhbmQgY29uZmlncyBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uLiBJJiMzOTtsbCB1c2UgZ3JlcHBlciAob3IgYHJlYWQtZmlsZWAgZGlyZWN0bHkgaWYgZ3JlcHBlciBmYWlscykgYW5kIHNlYXJjaCBmb3IgdGhvc2Uga2V5IGZ1bmN0aW9ucywgbGlrZSBgYnBmX3hkcF9zaHJpbmtfZGF0YWAsIGB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmYCwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAsIGFuZCBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAsIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGFuZCB3aGF0IHRoZSBjb2RlJiMzOTtzIGNhbGwgZ3JhcGhzIGxvb2sgbGlrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfeGRwX3Nocmlua19kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NDMyNz1zdGF0aWMgaW50IGJwZl94ZHBfZnJhZ3NfaW5jcmVhc2VfdGFpbChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgaW50IG9mZnNldClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00MzUxLVxubmV0L2NvcmUvZmlsdGVyLmM6NDM1MjpzdGF0aWMgc3RydWN0IHhkcF9idWZmICpicGZfeGRwX3Nocmlua19kYXRhX3pjKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBpbnQgc2hyaW5rLFxubmV0L2NvcmUvZmlsdGVyLmMtNDM1My1cdFx0XHRcdFx0ICAgICAgIGJvb2wgdGFpbCwgYm9vbCByZWxlYXNlKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQzNjktXG5uZXQvY29yZS9maWx0ZXIuYzo0MzcwOnN0YXRpYyBib29sIGJwZl94ZHBfc2hyaW5rX2RhdGEoc3RydWN0IHhkcF9idWZmICp4ZHAsIHNrYl9mcmFnX3QgKmZyYWcsXG5uZXQvY29yZS9maWx0ZXIuYy00MzcxLVx0XHRcdFx0aW50IHNocmluaywgYm9vbCB0YWlsKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQzNzktXHRcdG5ldG1lbSA9IDA7XG5uZXQvY29yZS9maWx0ZXIuYzo0MzgwOlx0XHR6Y19mcmFnID0gYnBmX3hkcF9zaHJpbmtfZGF0YV96Yyh4ZHAsIHNocmluaywgdGFpbCwgcmVsZWFzZSk7XG5uZXQvY29yZS9maWx0ZXIuYy00MzgxLVx0fSBlbHNlIGlmICh4ZHBfYnVmZl9pc19mcmFnX3BwKHhkcCkpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NDAxPXN0YXRpYyBpbnQgYnBmX3hkcF9mcmFnc19zaHJpbmtfdGFpbChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgaW50IG9mZnNldClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00NDE0LVx0XHRvZmZzZXQgLT0gc2hyaW5rO1xubmV0L2NvcmUvZmlsdGVyLmM6NDQxNTpcdFx0aWYgKGJwZl94ZHBfc2hyaW5rX2RhdGEoeGRwLCBmcmFnLCBzaHJpbmssIHRydWUpKVxubmV0L2NvcmUvZmlsdGVyLmMtNDQxNi1cdFx0XHRuX2ZyYWdzX2ZyZWUmIzQzOyYjNDM7O1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNjU5PV9fYnBmX2tmdW5jIGludCBicGZfeGRwX3B1bGxfZGF0YShzdHJ1Y3QgeGRwX21kICp4LCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzAwLVx0XHRkZWx0YSAtPSBzaHJpbms7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjcwMTpcdFx0aWYgKGJwZl94ZHBfc2hyaW5rX2RhdGEoeGRwLCBmcmFnLCBzaHJpbmssIGZhbHNlKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzAyLVx0XHRcdG5fZnJhZ3NfZnJlZSYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFhEUCBGcmFnIEhhbmRsaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZmlsdGVyLmNgIGJ1c2luZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFhEUCBmcmFnbWVudCBoYW5kbGluZyBpcyB3b3JraW5nIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBicGZfeGRwX2ZyYWdzX3Nocmlua190YWlsYCBmdW5jdGlvbiBjYWxsLCBzcGVjaWZpY2FsbHksIGhvdyBpdCByZWxhdGVzIHRvIGBicGZfeGRwX2FkanVzdF90YWlsYC4gU2luY2UgdGhlIGZvcm1lciBpcyBjYWxsZWQgYnkgdGhlIGxhdHRlciwgaXQgc2VlbXMgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBjb2RlIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIGdyYXNwIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljIGltbWVkaWF0ZWx5IGFyb3VuZCB0aGVzZSB0d28gZnVuY3Rpb24gY2FsbHMgaXMgY3JpdGljYWw7IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZW0sIHRoZSBkYXRhIHRoZXkgb3BlcmF0ZSBvbiwgYW5kIHRoZSBvdmVyYWxsIG9iamVjdGl2ZSBvZiB0aGUgY29kZSBzZWdtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0MDA6XHRcbjQ0MDE6XHRzdGF0aWMgaW50IGJwZl94ZHBfZnJhZ3Nfc2hyaW5rX3RhaWwoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBvZmZzZXQpXG40NDAyOlx0e1xuNDQwMzpcdFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm8gPSB4ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fYnVmZih4ZHApO1xuNDQwNDpcdFx0aW50IGksIG5fZnJhZ3NfZnJlZSA9IDAsIGxlbl9mcmVlID0gMDtcbjQ0MDU6XHRcbjQ0MDY6XHRcdGlmICh1bmxpa2VseShvZmZzZXQgXHUwMDNlIChpbnQpeGRwX2dldF9idWZmX2xlbih4ZHApIC0gRVRIX0hMRU4pKVxuNDQwNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ0MDg6XHRcbjQ0MDk6XHRcdGZvciAoaSA9IHNpbmZvLVx1MDAzZW5yX2ZyYWdzIC0gMTsgaSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9mZnNldCBcdTAwM2UgMDsgaS0tKSB7XG40NDEwOlx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1tpXTtcbjQ0MTE6XHRcdFx0aW50IHNocmluayA9IG1pbl90KGludCwgb2Zmc2V0LCBza2JfZnJhZ19zaXplKGZyYWcpKTtcbjQ0MTI6XHRcbjQ0MTM6XHRcdFx0bGVuX2ZyZWUgJiM0Mzs9IHNocmluaztcbjQ0MTQ6XHRcdFx0b2Zmc2V0IC09IHNocmluaztcbjQ0MTU6XHRcdFx0aWYgKGJwZl94ZHBfc2hyaW5rX2RhdGEoeGRwLCBmcmFnLCBzaHJpbmssIHRydWUpKVxuNDQxNjpcdFx0XHRcdG5fZnJhZ3NfZnJlZSYjNDM7JiM0Mzs7XG40NDE3Olx0XHR9XG40NDE4Olx0XHRzaW5mby1cdTAwM2Vucl9mcmFncyAtPSBuX2ZyYWdzX2ZyZWU7XG40NDE5Olx0XHRzaW5mby1cdTAwM2V4ZHBfZnJhZ3Nfc2l6ZSAtPSBsZW5fZnJlZTtcbjQ0MjA6XHRcbjQ0MjE6XHRcdGlmICh1bmxpa2VseSghc2luZm8tXHUwMDNlbnJfZnJhZ3MpKSB7XG40NDIyOlx0XHRcdHhkcF9idWZmX2NsZWFyX2ZyYWdzX2ZsYWcoeGRwKTtcbjQ0MjM6XHRcdFx0eGRwX2J1ZmZfY2xlYXJfZnJhZ19wZm1lbWFsbG9jKHhkcCk7XG40NDI0Olx0XHRcdHhkcC1cdTAwM2VkYXRhX2VuZCAtPSBvZmZzZXQ7XG40NDI1Olx0XHR9XG40NDI2Olx0XG40NDI3Olx0XHRyZXR1cm4gMDtcbjQ0Mjg6XHR9XG40NDI5Olx0XG40NDMwOlx0QlBGX0NBTExfMihicGZfeGRwX2FkanVzdF90YWlsLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgeGRwLCBpbnQsIG9mZnNldClcbjQ0MzE6XHR7XG40NDMyOlx0XHR2b2lkICpkYXRhX2hhcmRfZW5kID0geGRwX2RhdGFfaGFyZF9lbmQoeGRwKTsgLyogdXNlIHhkcC1cdTAwM2VmcmFtZV9zeiAqL1xuNDQzMzpcdFx0dm9pZCAqZGF0YV9lbmQgPSB4ZHAtXHUwMDNlZGF0YV9lbmQgJiM0Mzsgb2Zmc2V0O1xuNDQzNDpcdFxuNDQzNTpcdFx0aWYgKHVubGlrZWx5KHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSkgeyAvKiBub24tbGluZWFyIHhkcCBidWZmICovXG40NDM2Olx0XHRcdGlmIChvZmZzZXQgXHUwMDNjIDApXG40NDM3Olx0XHRcdFx0cmV0dXJuIGJwZl94ZHBfZnJhZ3Nfc2hyaW5rX3RhaWwoeGRwLCAtb2Zmc2V0KTtcbjQ0Mzg6XHRcbjQ0Mzk6XHRcdFx0cmV0dXJuIGJwZl94ZHBfZnJhZ3NfaW5jcmVhc2VfdGFpbCh4ZHAsIG9mZnNldCk7XG40NDQwOlx0XHR9XG40NDQxOlx0XG40NDQyOlx0XHQvKiBOb3RpY2UgdGhhdCB4ZHBfZGF0YV9oYXJkX2VuZCBoYXZlIHJlc2VydmVkIHNvbWUgdGFpbHJvb20gKi9cbjQ0NDM6XHRcdGlmICh1bmxpa2VseShkYXRhX2VuZCBcdTAwM2UgZGF0YV9oYXJkX2VuZCkpXG40NDQ0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDQ0NTpcdFxuNDQ0NjpcdFx0aWYgKHVubGlrZWx5KGRhdGFfZW5kIFx1MDAzYyB4ZHAtXHUwMDNlZGF0YSAmIzQzOyBFVEhfSExFTikpXG40NDQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDQ0ODpcdFxuNDQ0OTpcdFx0LyogQ2xlYXIgbWVtb3J5IGFyZWEgb24gZ3JvdywgY2FuIGNvbnRhaW4gdW5pbml0IGtlcm5lbCBtZW1vcnkgKi9cbjQ0NTA6XHRcdGlmIChvZmZzZXQgXHUwMDNlIDApXG40NDUxOlx0XHRcdG1lbXNldCh4ZHAtXHUwMDNlZGF0YV9lbmQsIDAsIG9mZnNldCk7XG40NDUyOlx0XG40NDUzOlx0XHR4ZHAtXHUwMDNlZGF0YV9lbmQgPSBkYXRhX2VuZDtcbjQ0NTQ6XHRcbjQ0NTU6XHRcdHJldHVybiAwO1xuNDQ1NjpcdH1cbjQ0NTc6XHRcbjQ0NTg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfYWRqdXN0X3RhaWxfcHJvdG8gPSB7XG40NDU5Olx0XHQuZnVuY1x0XHQ9IGJwZl94ZHBfYWRqdXN0X3RhaWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4OTIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHZldGguYyBhbmQgWERQIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBuZXR3b3JrIHBlcmZvcm1hbmNlLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgdmV0aCBwYWlyLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHRoaW5nIGlzIGhhbmRsaW5nIHBhY2tldCBjb252ZXJzaW9ucyB0byBYRFAgYnVmZmVycy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBgZHJpdmVycy9uZXQvdmV0aC5jYCwgYW5kIHNwZWNpZmljYWxseSwgdGhhdCBgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZmAgZnVuY3Rpb24uIEkgaGF2ZSBhIGh1bmNoIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBvcHRpbWl6YXRpb25zIG9yIGJvdHRsZW5lY2tzIGluIGhvdyBTS0JzIGFyZSBiZWluZyB0cmFuc2xhdGVkIHRvIHRoZSBYRFAgZm9ybWF0IGhlcmUuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCB0aGUgbWVtb3J5IGNvcHlpbmcgKG9yIGxhY2sgdGhlcmVvZiksIGFuZCBob3cgZWZmaWNpZW50bHkgdGhpcyBpcyBhbGwgYmVpbmcgbWFuYWdlZCwgZXNwZWNpYWxseSB1bmRlciBsb2FkLiBUaGlzIGZ1bmN0aW9uIGlzIGEga2V5IGFyZWEgZm9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBnYWlucywgc28gbGV0JiMzOTtzIHN0YXJ0IGRpc3NlY3RpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmM9NzM5PXN0YXRpYyB2b2lkIHZldGhfeGRwX2dldChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNzUxLVxuZHJpdmVycy9uZXQvdmV0aC5jOjc1MjpzdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxuZHJpdmVycy9uZXQvdmV0aC5jLTc1My1cdFx0XHRcdFx0c3RydWN0IHhkcF9idWZmICp4ZHAsXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTc5Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy04MTgtXHRfX3NrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpKTtcbmRyaXZlcnMvbmV0L3ZldGguYzo4MTk6XHRpZiAodmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZihycSwgeGRwLCBcdTAwMjZza2IpKVxuZHJpdmVycy9uZXQvdmV0aC5jLTgyMC1cdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDE1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBuZXQvY29yZS9kZXYuY2AgZm9yIFhEUCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBYRFAgYW5kIHNwZWNpZmljYWxseSB0aGUgZ2VuZXJpYyBwYXRoLCBtZWFuaW5nIHdlJiMzOTtyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgYSBoYXJkd2FyZSBvZmZsb2FkIGlzbiYjMzk7dCBoYXBwZW5pbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBCUEYgcHJvZ3JhbSBleGVjdXRpb24uIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBuZXQvY29yZS9kZXYuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSByZWdpb24gYXJvdW5kIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBtb3JlIGFjY3VyYXRlbHksIHdoZXJlIHRoZSBmYWxsYmFjayBoYXBwZW5zLCBpZiBpdCYjMzk7cyBub3QgYSBkaXJlY3QgaGFyZHdhcmUgYWNjZWxlcmF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgWERQIHByb2dyYW0gaXMgaW52b2tlZCBpbiB0aGlzIGdlbmVyYWxpemVkIHNjZW5hcmlvLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgaW4/IEhvdyBpcyB0aGUgcGFja2V0IGJ1ZmZlciBoYW5kbGVkPyBBcmUgd2UgZG9pbmcgYW55IGNvcHkgb3BlcmF0aW9ucyBvciBhcmUgd2UgZGVhbGluZyB3aXRoIHBvaW50ZXJzPyBXaGF0IGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGlzIHBhdGg/IFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgZ2VuZXJpYyBYRFAuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz01NDgzPXN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpuZXRpZl9nZXRfcnhxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTU1MDUtXG5uZXQvY29yZS9kZXYuYzo1NTA2OnUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG5uZXQvY29yZS9kZXYuYy01NTA3LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcbi0tXG5uZXQvY29yZS9kZXYuYz01NjQ0PXN0YXRpYyB1MzIgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXG4tLVxubmV0L2NvcmUvZGV2LmMtNTY3MS1cbm5ldC9jb3JlL2Rldi5jOjU2NzI6XHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoKnBza2IsIHhkcCwgeGRwX3Byb2cpO1xubmV0L2NvcmUvZGV2LmMtNTY3My1cdHN3aXRjaCAoYWN0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTcwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqWERQIEZyYW1lIENvbnZlcnNpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFhEUCBmcmFtZSBjb252ZXJzaW9uIHByb2Nlc3MgYmV0dGVyLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdG8gemVybyBpbiBvbiBgbmV0L2NvcmUveGRwLmNgLCBvciBwb3RlbnRpYWxseSBhbnl3aGVyZSBlbHNlIHRoYXQgaG91c2VzIHRoZSBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgZnVuY3Rpb24sIG9yIGV2ZW4gYW55d2hlcmUgdGhhdCBjYWxscyBpdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb252ZXJzaW9uIHdvcmtzIGF0IGEgZGVlcGVyIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZHBfY29udmVydF9mcmFtZV90b19idWZmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTY0ND1zdGF0aWMgaW50IGJvbmRfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTY1Ni1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTY1NzpcdFx0eGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihmcmFtZSwgXHUwMDI2eGRwKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTY1OC1cbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9NjM5PXN0YXRpYyBzdHJ1Y3QgeGRwX2ZyYW1lICp2ZXRoX3hkcF9yY3Zfb25lKHN0cnVjdCB2ZXRoX3JxICpycSxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNjUzLVxuZHJpdmVycy9uZXQvdmV0aC5jOjY1NDpcdFx0eGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihmcmFtZSwgeGRwKTtcbmRyaXZlcnMvbmV0L3ZldGguYy02NTUtXHRcdHhkcC1cdTAwM2VyeHEgPSBcdTAwMjZycS1cdTAwM2V4ZHBfcnhxO1xuLS1cbmluY2x1ZGUvbmV0L3hkcC5oPTc0PWVudW0geGRwX2J1ZmZfZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbmV0L3hkcC5oLTg4LVx0ICogdGhpcyBpcyBzdHJpcHBlZCBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpIGFuZCByZS1kZXJpdmVkIGZyb21cbmluY2x1ZGUvbmV0L3hkcC5oOjg5Olx0ICogOjptZW1fdHlwZSBpbiB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKCkuXG5pbmNsdWRlL25ldC94ZHAuaC05MC1cdCAqL1xuLS1cbmluY2x1ZGUvbmV0L3hkcC5oPTQwNT1zdGF0aWMgaW5saW5lXG5pbmNsdWRlL25ldC94ZHAuaDo0MDY6dm9pZCB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKGNvbnN0IHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lLFxuaW5jbHVkZS9uZXQveGRwLmgtNDA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5rZXJuZWwvYnBmL2NwdW1hcC5jPTE4Mz1zdGF0aWMgaW50IGNwdV9tYXBfYnBmX3Byb2dfcnVuX3hkcChzdHJ1Y3QgYnBmX2NwdV9tYXBfZW50cnkgKnJjcHUsXG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy0yMDEtXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjIwMjpcdFx0eGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZih4ZHBmLCBcdTAwMjZ4ZHApO1xua2VybmVsL2JwZi9jcHVtYXAuYy0yMDMtXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYz0zMzY9c3RhdGljIGludCBkZXZfbWFwX2JwZl9wcm9nX3J1bihzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nLFxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmMtMzUwLVxua2VybmVsL2JwZi9kZXZtYXAuYzozNTE6XHRcdHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoeGRwZiwgXHUwMDI2eGRwKTtcbmtlcm5lbC9icGYvZGV2bWFwLmMtMzUyLVx0XHR4ZHAudHhxID0gXHUwMDI2dHhxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgxMgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlhEUCBGcmFtZSBVcGRhdGUgQ2FsbGVycyAtIEEgUXVpY2sgTG9vayoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gYHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmYC4gQmVmb3JlIHdlIGdvIGFueSBmdXJ0aGVyLCBJIHdhbnQgdG8gdGFrZSBhIHF1aWNrIGF1ZGl0IG9mIGl0cyBjYWxsZXJzLiBVbmRlcnN0YW5kaW5nICp3aG8qIGlzIHVwZGF0aW5nIHRoZSBmcmFtZXMgaXMgY3J1Y2lhbCBiZWZvcmUgd2UgbG9vayBhdCAqaG93KiB0aGV5JiMzOTtyZSBiZWluZyB1cGRhdGVkLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBwb3NzaWJsZSBpc3N1ZXMsIGFuZCBoZWxwcyBpbW1lbnNlbHkgd2l0aCBkZWJ1Z2dpbmcuIEl04oCZcyBhbHNvIGltcG9ydGFudCBmb3IgYW55IHJlZmFjdG9yaW5nIHdvcmssIHNpbmNlIHVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgdGVsbHMgdXMgd2hhdCB0byBiZSBjYXJlZnVsIG9mLCB3aGF0IGRlcGVuZGVuY2llcyB3ZSBoYXZlLCBldGMuIExldCYjMzk7cyB0cmFjZSBpdCBhbmQgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jPTYzOT1zdGF0aWMgc3RydWN0IHhkcF9mcmFtZSAqdmV0aF94ZHBfcmN2X29uZShzdHJ1Y3QgdmV0aF9ycSAqcnEsXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTY2MS1cdFx0Y2FzZSBYRFBfUEFTUzpcbmRyaXZlcnMvbmV0L3ZldGguYzo2NjI6XHRcdFx0aWYgKHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKHhkcCwgZnJhbWUpKVxuZHJpdmVycy9uZXQvdmV0aC5jLTY2My1cdFx0XHRcdGdvdG8gZXJyX3hkcDtcbi0tXG5pbmNsdWRlL25ldC94ZHAuaD03ND1lbnVtIHhkcF9idWZmX2ZsYWdzIHtcbi0tXG5pbmNsdWRlL25ldC94ZHAuaC04Ny1cdCAqIHhkcF9idWZmIG9ubHk6IGFuIHhkcF9mcmFtZSBkZXNjcmliZXMgaXRzIG1lbW9yeSB3aXRoIDo6bWVtX3R5cGUsIHNvXG5pbmNsdWRlL25ldC94ZHAuaDo4ODpcdCAqIHRoaXMgaXMgc3RyaXBwZWQgaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSBhbmQgcmUtZGVyaXZlZCBmcm9tXG5pbmNsdWRlL25ldC94ZHAuaC04OS1cdCAqIDo6bWVtX3R5cGUgaW4geGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZigpLlxuLS1cbmluY2x1ZGUvbmV0L3hkcC5oPTQwNj12b2lkIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUsXG4tLVxuaW5jbHVkZS9uZXQveGRwLmgtNDE2LVx0ICogZnJhbWUtXHUwMDNlZmxhZ3MgbmV2ZXIgY2FycmllcyBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MIChpdCBpcyBzdHJpcHBlZFxuaW5jbHVkZS9uZXQveGRwLmg6NDE3Olx0ICogaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSk7IHJlLWRlcml2ZSBpdCBmcm9tIHRoZSBmcmFtZSYjMzk7cyBvd25cbmluY2x1ZGUvbmV0L3hkcC5oLTQxOC1cdCAqIG1lbW9yeSB0eXBlLiB2ZXRoIGFuZCBkZXZtYXAgcmVidWlsZCBhIGJ1ZmYgaGVyZSBhbmQgcnVuIGEgcHJvZ3JhbVxuLS1cbmluY2x1ZGUvbmV0L3hkcC5oPTQyNj1zdGF0aWMgaW5saW5lXG5pbmNsdWRlL25ldC94ZHAuaDo0Mjc6aW50IHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKGNvbnN0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuaW5jbHVkZS9uZXQveGRwLmgtNDI4LVx0XHRcdCAgICAgICBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfZnJhbWUpXG4tLVxuaW5jbHVkZS9uZXQveGRwLmg9NDU4PXN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxuaW5jbHVkZS9uZXQveGRwLmgtNDY2LVx0eGRwX2ZyYW1lID0geGRwLVx1MDAzZWRhdGFfaGFyZF9zdGFydDtcbmluY2x1ZGUvbmV0L3hkcC5oOjQ2NzpcdGlmICh1bmxpa2VseSh4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZih4ZHAsIHhkcF9mcmFtZSkgXHUwMDNjIDApKVxuaW5jbHVkZS9uZXQveGRwLmgtNDY4LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5rZXJuZWwvYnBmL2NwdW1hcC5jPTE4Mz1zdGF0aWMgaW50IGNwdV9tYXBfYnBmX3Byb2dfcnVuX3hkcChzdHJ1Y3QgYnBmX2NwdV9tYXBfZW50cnkgKnJjcHUsXG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy0yMDYtXHRcdGNhc2UgWERQX1BBU1M6XG5rZXJuZWwvYnBmL2NwdW1hcC5jOjIwNzpcdFx0XHRlcnIgPSB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihcdTAwMjZ4ZHAsIHhkcGYpO1xua2VybmVsL2JwZi9jcHVtYXAuYy0yMDgtXHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9MzM2PXN0YXRpYyBpbnQgZGV2X21hcF9icGZfcHJvZ19ydW4oc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTM1Ny1cdFx0Y2FzZSBYRFBfUEFTUzpcbmtlcm5lbC9icGYvZGV2bWFwLmM6MzU4Olx0XHRcdGVyciA9IHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKFx1MDAyNnhkcCwgeGRwZik7XG5rZXJuZWwvYnBmL2Rldm1hcC5jLTM1OS1cdFx0XHRpZiAodW5saWtlbHkoZXJyIFx1MDAzYyAwKSlcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTE5PXN0YXRpYyB2b2lkIHhkcF90ZXN0X3J1bl9pbml0X3BhZ2UobmV0bWVtX3JlZiBuZXRtZW0sIHZvaWQgKmFyZylcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTQzLVxubmV0L2JwZi90ZXN0X3J1bi5jOjE0NDpcdHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKG5ld19jdHgsIGZybSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTQ1LVx0ZnJtLVx1MDAzZW1lbV90eXBlID0gbmV3X2N0eC1cdTAwM2VyeHEtXHUwMDNlbWVtLnR5cGU7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTIyOT1zdGF0aWMgdm9pZCByZXNldF9jdHgoc3RydWN0IHhkcF9wYWdlX2hlYWQgKmhlYWQpXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTIzNi1cdGhlYWQtXHUwMDNlY3R4LmRhdGFfZW5kID0gaGVhZC1cdTAwM2VvcmlnX2N0eC5kYXRhX2VuZDtcbm5ldC9icGYvdGVzdF9ydW4uYzoyMzc6XHR4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihcdTAwMjZoZWFkLVx1MDAzZWN0eCwgaGVhZC1cdTAwM2VmcmFtZSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjM4LVx0aGVhZC1cdTAwM2VmcmFtZS1cdTAwM2VtZW1fdHlwZSA9IGhlYWQtXHUwMDNlb3JpZ19jdHgucnhxLVx1MDAzZW1lbS50eXBlO1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0yNzM9c3RhdGljIGludCB4ZHBfdGVzdF9ydW5fYmF0Y2goc3RydWN0IHhkcF90ZXN0X2RhdGEgKnhkcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0zMDktXHRcdGlmICh1bmxpa2VseShjdHhfd2FzX2NoYW5nZWQoaGVhZCkpKSB7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MzEwOlx0XHRcdHJldCA9IHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKGN0eCwgZnJtKTtcbm5ldC9icGYvdGVzdF9ydW4uYy0zMTEtXHRcdFx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI4MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktjb25maWcgRGVwZW5kZW5jaWVzIC0gQSBRdWljayBDaGVjayoqCgpPa2F5LCB0aW1lIHRvIG1ha2Ugc3VyZSB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgbGluaW5nIHVwIGFzIEkgZXhwZWN0LiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBhIGNvdXBsZSBvZiBrZXkgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgbG9vayBhdCBgZHJpdmVycy9uZXQvdmV0aC5jYC4gVGhlIGNvZGUgc2hvdWxkIGJlIGd1YXJkZWQgYnkgYENPTkZJR19WRVRIYCwgYXMgaXQgYWx3YXlzIGlzLiBNYWtlcyBzZW5zZS4gVGhlbiB0aGVyZSYjMzk7cyBCUEYgYW5kIFhEUC4gVGhvc2UgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19ORVRgLiBZZXAsIHRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEp1c3QgZG91YmxlLWNoZWNraW5nIGV2ZXJ5dGhpbmcuIE5vdywgZm9yIFZFVEggc3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHZlcmlmeSB0aGUgS2NvbmZpZyBzZXR1cCBpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBKdXN0IGdvb2QgcHJhY3RpY2UsIHlvdSBrbm93PyBLZWVwaW5nIHRoaW5ncyB0aWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkVUSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQyMT1jb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDM1OmNvbmZpZyBWRVRIXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIGFuZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBzZWVtIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdmFyaW91cyBuZXR3b3JrIGRyaXZlcnMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIE15IG1lbnRhbCBjaGVja2xpc3Qgc2F5cywgJiMzNDtLY29uZmlnIGZpbGVzIGFyZSBvZnRlbiB0aGUga2V5IHRvIHRoaXMgc29ydCBvZiB0aGluZy4mIzM0OyBHaXZlbiB0aGF0IGdlbmVyYWwga25vd2xlZGdlLCBJIGltbWVkaWF0ZWx5IHplcm9lZCBpbiBvbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIFRoYXQgZGlyZWN0b3J5IGlzIGFsbW9zdCBhbHdheXMgdGhlIG5lcnZlIGNlbnRlciBmb3IgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbiBpbiB0aGUga2VybmVsLgoKSSBuZWVkIHRvIGZvY3VzIG15IHNlYXJjaCBvbiBhIHNwZWNpZmljIGxpbmUgdG8gY3V0IHRoZSBub2lzZS4gQ29uc2lkZXJpbmcgSSBrbm93IHRoZSBnZW5lcmFsIHNoYXBlIG9mIEtjb25maWcgZmlsZXMsIEkgZmlndXJlIGxpbmVzIGFyb3VuZCA0MzUgaW4gdGhlIEtjb25maWcgZmlsZSBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgdGFyZ2V0ZWQgc2VhcmNoLiBJJiMzOTttIG5vdCBlbnRpcmVseSBzdXJlICp3aGF0KiBJJiMzOTtsbCBmaW5kIHRoZXJlIHlldCwgYnV0IGl0JiMzOTtzIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uIHRoYXQgaW1wb3J0YW50IG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3b3VsZCBiZSBkZWZpbmVkIHdpdGhpbiB0aGF0IGFyZWEgb2YgdGhlIGZpbGUuIFRpbWUgdG8gaW52ZXN0aWdhdGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDMwOlx0XHQgIGFuZCBUVU5HRVRWTkVUQkUgaW9jdGxzLlxuIDQzMTpcdFxuIDQzMjpcdFx0ICBVbmxlc3MgeW91IGhhdmUgYSBsaXR0bGUtZW5kaWFuIHN5c3RlbSBob3N0aW5nIGEgYmlnLWVuZGlhbiB2aXJ0dWFsXG4gNDMzOlx0XHQgIG1hY2hpbmUgd2l0aCBhIGxlZ2FjeSB2aXJ0aW8gTklDLCB5b3Ugc2hvdWxkIHNheSBOLlxuIDQzNDpcdFxuIDQzNTpcdGNvbmZpZyBWRVRIXG4gNDM2Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGV0aGVybmV0IHBhaXIgZGV2aWNlXCYjMzQ7XG4gNDM3Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNDM4Olx0XHRoZWxwXG4gNDM5Olx0XHQgIFRoaXMgZGV2aWNlIGlzIGEgbG9jYWwgZXRoZXJuZXQgdHVubmVsLiBEZXZpY2VzIGFyZSBjcmVhdGVkIGluIHBhaXJzLlxuIDQ0MDpcdFx0ICBXaGVuIG9uZSBlbmQgcmVjZWl2ZXMgdGhlIHBhY2tldCBpdCBhcHBlYXJzIG9uIGl0cyBwYWlyIGFuZCB2aWNlXG4gNDQxOlx0XHQgIHZlcnNhLlxuIDQ0MjpcdFxuIDQ0MzpcdGNvbmZpZyBWSVJUSU9fTkVUXG4gNDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0aW8gbmV0d29yayBkcml2ZXJcJiMzNDtcbiA0NDU6XHRcdGRlcGVuZHMgb24gVklSVElPXG4gNDQ2Olx0XHRzZWxlY3QgTkVUX0ZBSUxPVkVSXG4gNDQ3Olx0XHRzZWxlY3QgRElNTElCXG4gNDQ4Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNDQ5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTYxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFhEUC9CUEYgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIHJlZ2FyZGluZyBYRFAgYW5kIEJQRiBjb25maWd1cmF0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3MuIEkmIzM5O2xsIGZvY3VzIG9uIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRgIOKAkyB0aG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aG9zZS4KCkJleW9uZCB0aG9zZSBiYXNpY3MsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBzcGVjaWZpY2FsbHkgYXQgaG93IGBicGZfeGRwX2FkanVzdF90YWlsYCBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciBpdCYjMzk7cyBlbmFibGVkIHVuZGVyIGVpdGhlciBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciBgQ09ORklHX05FVGAsIG9yIHBlcmhhcHMgYm90aC4gVGhhdCB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmN5IHNldHVwLiBJJiMzOTttIGhlYWRpbmcgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl94ZHBfYWRqdXN0X3RhaWxfcHJvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz00NDMwPUJQRl9DQUxMXzIoYnBmX3hkcF9hZGp1c3RfdGFpbCwgc3RydWN0IHhkcF9idWZmICosIHhkcCwgaW50LCBvZmZzZXQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDQ1Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ0NTg6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2FkanVzdF90YWlsX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtNDQ1OS1cdC5mdW5jXHRcdD0gYnBmX3hkcF9hZGp1c3RfdGFpbCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NzY2PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODMtXHRjYXNlIEJQRl9GVU5DX3hkcF9hZGp1c3RfdGFpbDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODQ6XHRcdHJldHVybiBcdTAwMjZicGZfeGRwX2FkanVzdF90YWlsX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODc4NS1cdGNhc2UgQlBGX0ZVTkNfeGRwX2dldF9idWZmX2xlbjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaWdnaW5nIGludG8gdGhlIE5ldGxpbmsgQnVpbGQgUHJvY2VzcyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbmV0bGluayBtb2R1bGVzIGFyZSBhc3NlbWJsZWQsIHNwZWNpZmljYWxseSBgZGV2LmNgIGFuZCBgZmlsdGVyLmNgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJdCYjMzk7bGwgc2hvdyBtZSBob3cgdGhlc2Ugc3BlY2lmaWMgQyBmaWxlcyBhcmUgY29tcGlsZWQsIGxpbmtlZCwgYW5kIGluY29ycG9yYXRlZCBpbnRvIHRoZSBvdmVyYWxsIGtlcm5lbCBtb2R1bGUgb3IgZXhlY3V0YWJsZS4gVGhpcyBgTWFrZWZpbGVgIGlzIHRoZSBSb3NldHRhIFN0b25lIGZvciB1bmRlcnN0YW5kaW5nIHRoaXMgYnVpbGQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWx0ZXJcXC5vfGRldlxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9jb3JlLm9cbm5ldC9jb3JlL01ha2VmaWxlLTExLVxubmV0L2NvcmUvTWFrZWZpbGU6MTI6b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxMTkKCQkJCQkJCW91dHB1dDogMjAzCgkJCQkJCQl0aG91Z2h0czogMTA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXR3b3JrL0JQRiBDb2RlIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGF0IGBkZXYub2AgYW5kIGBmaWx0ZXIub2AgYXJlIGJ1aWx0IHdpdGggYENPTkZJR19ORVQ9eWAsIHdoaWNoIGlzIGV4cGVjdGVkLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCBmb3IgQlBGIHByb2dyYW1zIGFuZCBYRFAsIGFuZCBgQ09ORklHX1ZFVEhgIGlzIGVuYWJsZWQgZm9yIHZldGggc3VwcG9ydC4gR29vZC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgcGlucG9pbnRlZCBzZXZlcmFsOiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpbiBgbmV0L2NvcmUvZGV2LmNgLCB3aGljaCBpcyBkaXJlY3RseSBtb2RpZmllZCB0byBzZXQgYHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcClgIG9uIG5vbmxpbmVhciBza2JzLiBgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZmAgaW4gYGRyaXZlcnMvbmV0L3ZldGguY2AsIHdoaWNoIGFsc28gbWFuaXB1bGF0ZXMgZnJhZ21lbnRzIGJ5IHNldHRpbmcgYHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcClgLiAgYGJwZl94ZHBfc2hyaW5rX2RhdGFgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgaW1wb3J0YW50OyBpdCBjaGVja3MgYHhkcF9idWZmX2lzX2ZyYWdfcHAoeGRwKWAgYW5kIHNldHMgYG1lbV90eXBlYC4gQW5kIGZpbmFsbHksIHRoZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgYW5kIGB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZmAgaW4gYGluY2x1ZGUvbmV0L3hkcC5oYC4gVGhlc2UgYXJlIGltcG9ydGFudCBiZWNhdXNlIHdlIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgdGhlaXIgbm9uLXN0YXRpYyBjYWxsZXJzIHJlc2lkZS4KCk5vdywgbGV0JiMzOTtzIGFjY291bnQgZm9yIHRoZSBub24tc3RhdGljIGNhbGxlcnMgb2YgdGhvc2Ugc3RhdGljIGlubGluZXMgb3IgZGlyZWN0IGVudHJ5cG9pbnRzLCBzaW5jZSB0aGVzZSB3aWxsIGJlIGltcG9ydGFudCBmb3IgY292ZXJhZ2U6IGBicGZfeGRwX2ZyYWdzX3Nocmlua190YWlsYCBvciBgYnBmX3hkcF9hZGp1c3RfdGFpbGAsIGBicGZfeGRwX3B1bGxfZGF0YWAsIGB2ZXRoX3hkcF9yY3Zfb25lYCwgYHZldGhfeGRwX3Jjdl9za2JgLCBhbmQgYG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHBgLgoKU2luY2UgYGJwZl94ZHBfc2hyaW5rX2RhdGFgIGlzIHN0YXRpYywgSSYjMzk7bSBpbmNsdWRpbmcgYGJwZl94ZHBfYWRqdXN0X3RhaWxgLCBgYnBmX3hkcF9wdWxsX2RhdGFgLCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgYHZldGhfeGRwX3Jjdl9za2JgLCBhbmQgYHZldGhfeGRwX3Jjdl9vbmVgLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIHN5bWJvbCBuYW1lcyBmb3IgYGJwZl94ZHBfYWRqdXN0X3RhaWxgLiBCYXNlZCBvbiB0aGUga2VybmVsIHZtbGludXgsIEkmIzM5O20gY29uZmlybWluZyB0aGF0IGBCUEZfQ0FMTF8yKGJwZl94ZHBfYWRqdXN0X3RhaWwsIC4uLilgIHJlc29sdmVzIHRvIGBfX19icGZfeGRwX2FkanVzdF90YWlsYCBvciBgYnBmX3hkcF9hZGp1c3RfdGFpbGAuIGBicGZfeGRwX3B1bGxfZGF0YWAgdXNlcyBgX19icGZfa2Z1bmNgLiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBnbG9iYWwsIGFuZCBgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcGAgaXMgc3RhdGljLgoKVGhlIGZ1enppbmcgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYWJzb2x1dGVseSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGJlY2F1c2UgaXQgdG91Y2hlcyBuZXR3b3JrIGFuZCBCUEYgY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQsIGltcG9ydGFudGx5LCBmaXhlcyBhIG1lbW9yeSBsZWFrIG9yIGJhZCBwYWdlIHN0YXRlIHdoZW4gc2hyaW5raW5nIGZyYWdtZW50cyBvbiBnZW5lcmljIFhEUCBhbmQgdmV0aC4KClRoZSBmaW5hbCAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGxpc3QgaXM6CiogICBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYAoqICAgYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgCiogICBgYnBmX3hkcF9zaHJpbmtfZGF0YWAKKiAgIGBicGZfeGRwX2FkanVzdF90YWlsYAoqICAgYGJwZl94ZHBfcHVsbF9kYXRhYAoqICAgYHZldGhfeGRwX3Jjdl9za2JgCiogICBgdmV0aF94ZHBfcmN2X29uZWAKCkFuZCB0aGUgcmVxdWlyZWQgJiMzNDtFbmFibGVDb25maWdzJiMzNDsgYXJlOgoqICAgYE5FVGAKKiAgIGBCUEZfU1lTQ0FMTGAKKiAgIGBWRVRIYAoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gRXZlcnl0aGluZyBoYXMgYmVlbiBjb25zaWRlcmVkIGFuZCBkb3VibGUtY2hlY2tlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtWRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfYWRqdXN0X3RhaWwmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9wdWxsX2RhdGEmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9zaHJpbmtfZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmJiMzNDssCiAgICAmIzM0O3ZldGhfeGRwX3Jjdl9za2ImIzM0OywKICAgICYjMzQ7dmV0aF94ZHBfcmN2X29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBYRFAgZnJhZ21lbnQgaGFuZGxpbmcgbG9naWMgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgZ2VuZXJpYyBYRFAsIGFuZCB0aGUgdmV0aCBkcml2ZXIgdG8gcHJvcGVybHkgdHJhY2sgcGFnZV9wb29sIGJhY2tlZCBmcmFnbWVudHMgd2hlbiBzaHJpbmtpbmcgWERQIGJ1ZmZlcnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyAodmV0aCwgdHVuL3RhcCkgYW5kIEJQRi9YRFAgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtWRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfYWRqdXN0X3RhaWwmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9wdWxsX2RhdGEmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9zaHJpbmtfZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmJiMzNDssCiAgICAmIzM0O3ZldGhfeGRwX3Jjdl9za2ImIzM0OywKICAgICYjMzQ7dmV0aF94ZHBfcmN2X29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBYRFAgZnJhZ21lbnQgaGFuZGxpbmcgbG9naWMgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgZ2VuZXJpYyBYRFAsIGFuZCB0aGUgdmV0aCBkcml2ZXIgdG8gcHJvcGVybHkgdHJhY2sgcGFnZV9wb29sIGJhY2tlZCBmcmFnbWVudHMgd2hlbiBzaHJpbmtpbmcgWERQIGJ1ZmZlcnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyAodmV0aCwgdHVuL3RhcCkgYW5kIEJQRi9YRFAgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHRoZSBpbnRlcm5hbCBmbGFnIGBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MYCB0byBgeGRwX2J1ZmZgIHRvIHRyYWNrIHdoZXRoZXIgbm9ubGluZWFyIHNrYiBmcmFnbWVudHMgd2VyZSBDT1cmIzM5O2QgaW50byBhIGBwYWdlX3Bvb2xgLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGFuIFhEUCBwcm9ncmFtIHNocmlua3MgdGhlIGJ1ZmZlciBhbmQgcmVsZWFzZXMgZnJhZ21lbnRzLCB0aGV5IGFyZSBwcm9wZXJseSBmcmVlZCBiYWNrIHRvIHRoZSBwYWdlIHBvb2wgcmF0aGVyIHRoYW4gdGhyb3VnaCBgcGFnZV9mcmFnX2ZyZWUoKWAuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBhZ2UgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBhbGxvY2F0b3IgdHlwZSBtaXNtYXRjaCBidWcgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIHBhZ2UgcG9vbCBsZWFrcywgYmFkIHBhZ2Ugc3RhdGUsIG9yIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVzZXItc3BhY2UgY29weSBwYXRocy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgaW52YWxpZCBtZW1vcnkgZnJlZSkgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBwYWdlL3JlZmNvdW50IGRlYnVnZ2Vycywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNDY0MmYyMWYxODAxNjBlNTM0NjM5NmFlNjhkNjBjMzI5M2U4MzAxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTQ6NDU6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggNmVkM2VlODExNTNmYi4uYTNmZGYxOTU5Yjc2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtNzc1LDYgJiM0Mzs3NzUsMTIgQEAgc3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSwKIAlpZiAoc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFncykgewogCQlza2Jfc2hpbmZvKHNrYiktJmd0O3hkcF9mcmFnc19zaXplID0gc2tiLSZndDtkYXRhX2xlbjsKIAkJeGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIG5vbmxpbmVhciBza2Igd2FzIGNvdyYjMzk7ZCBpbnRvIHJxLSZndDtwYWdlX3Bvb2wgYWJvdmUsIHNvIHRoZQomIzQzOwkJICogZnJhZ3MgbXVzdCBiZSBmcmVlZCB0byB0aGF0IHBvb2wsIG5vdCB2aWEgdGhlIHJ4cSYjMzk7cwomIzQzOwkJICogTUVNX1RZUEVfUEFHRV9TSEFSRUQuCiYjNDM7CQkgKi8KJiM0MzsJCXhkcF9idWZmX3NldF9mcmFnX3BwKHhkcCk7CiAJfSBlbHNlIHsKIAkJeGRwX2J1ZmZfY2xlYXJfZnJhZ3NfZmxhZyh4ZHApOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcC5oIGIvaW5jbHVkZS9uZXQveGRwLmgKaW5kZXggYWE3NDJmNDEzYzM1OC4uOGZkNDEzOWU5Y2JkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQveGRwLmgKQEAgLTgxLDYgJiM0Mzs4MSwxNCBAQCBlbnVtIHhkcF9idWZmX2ZsYWdzIHsKIAkgKiBYRFAgcHJvZ3JhbSBpcyBub3QgYXR0YWNoZWQuCiAJICovCiAJWERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEUJPSBCSVQoMiksCiYjNDM7CS8qCiYjNDM7CSAqIGZyYWdzIGFyZSBwYWdlX3Bvb2wgbWVtb3J5IGV2ZW4gdGhvdWdoIHJ4cS0mZ3Q7bWVtLnR5cGUgaXMgbm90OiBhCiYjNDM7CSAqIHNrYi1iYWNrZWQgWERQIGJ1ZmYgKGdlbmVyaWMgWERQLCB2ZXRoKSBpcyBjb3cmIzM5O2QgaW50byBhIHBhZ2VfcG9vbC4KJiM0MzsJICogeGRwX2J1ZmYgb25seTogYW4geGRwX2ZyYW1lIGRlc2NyaWJlcyBpdHMgbWVtb3J5IHdpdGggOjptZW1fdHlwZSwgc28KJiM0MzsJICogdGhpcyBpcyBzdHJpcHBlZCBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpIGFuZCByZS1kZXJpdmVkIGZyb20KJiM0MzsJICogOjptZW1fdHlwZSBpbiB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKCkuCiYjNDM7CSAqLwomIzQzOwlYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MCT0gQklUKDMpLAogfTsKIAogc3RydWN0IHhkcF9idWZmIHsKQEAgLTEzMSw2ICYjNDM7MTM5LDE2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB4ZHBfYnVmZl9zZXRfZnJhZ191bnJlYWRhYmxlKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQogCXhkcC0mZ3Q7ZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEU7CiB9CiAKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoc3RydWN0IHhkcF9idWZmICp4ZHApCiYjNDM7ewomIzQzOwl4ZHAtJmd0O2ZsYWdzIHw9IFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0w7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB4ZHBfYnVmZl9pc19mcmFnX3BwKGNvbnN0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQomIzQzO3sKJiM0MzsJcmV0dXJuICEhKHhkcC0mZ3Q7ZmxhZ3MgJmFtcDsgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgeGRwX2J1ZmZfZ2V0X3NrYl9mbGFncyhjb25zdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCkKIHsKIAlyZXR1cm4geGRwLSZndDtmbGFnczsKQEAgLTM5NCw2ICYjNDM7NDEyLDE1IEBAIHZvaWQgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSwKIAl4ZHAtJmd0O2RhdGFfbWV0YSA9IGZyYW1lLSZndDtkYXRhIC0gZnJhbWUtJmd0O21ldGFzaXplOwogCXhkcC0mZ3Q7ZnJhbWVfc3ogPSBmcmFtZS0mZ3Q7ZnJhbWVfc3o7CiAJeGRwLSZndDtmbGFncyA9IGZyYW1lLSZndDtmbGFnczsKJiM0MzsJLyoKJiM0MzsJICogZnJhbWUtJmd0O2ZsYWdzIG5ldmVyIGNhcnJpZXMgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCAoaXQgaXMgc3RyaXBwZWQKJiM0MzsJICogaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSk7IHJlLWRlcml2ZSBpdCBmcm9tIHRoZSBmcmFtZSYjMzk7cyBvd24KJiM0MzsJICogbWVtb3J5IHR5cGUuIHZldGggYW5kIGRldm1hcCByZWJ1aWxkIGEgYnVmZiBoZXJlIGFuZCBydW4gYSBwcm9ncmFtCiYjNDM7CSAqIHdob3NlIHJ4cSBzYXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyB3aXRob3V0IHRoaXMgYSBzaHJpbmsgd291bGQKJiM0MzsJICogZnJlZSBhIHBhZ2VfcG9vbCBmcmFnIHRocm91Z2ggcGFnZV9mcmFnX2ZyZWUoKS4KJiM0MzsJICovCiYjNDM7CWlmIChmcmFtZS0mZ3Q7bWVtX3R5cGUgPT0gTUVNX1RZUEVfUEFHRV9QT09MKQomIzQzOwkJeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKTsKIH0KIAogc3RhdGljIGlubGluZQpAQCAtNDIwLDcgJiM0Mzs0NDcsOCBAQCBpbnQgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHAsCiAJeGRwX2ZyYW1lLSZndDtoZWFkcm9vbSA9IGhlYWRyb29tIC0gc2l6ZW9mKCp4ZHBfZnJhbWUpOwogCXhkcF9mcmFtZS0mZ3Q7bWV0YXNpemUgPSBtZXRhc2l6ZTsKIAl4ZHBfZnJhbWUtJmd0O2ZyYW1lX3N6ID0geGRwLSZndDtmcmFtZV9zejsKLQl4ZHBfZnJhbWUtJmd0O2ZsYWdzID0geGRwLSZndDtmbGFnczsKJiM0MzsJLyogWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCBpcyB4ZHBfYnVmZiBvbmx5LCBkb24mIzM5O3QgY2FycnkgaXQgb3ZlciAqLwomIzQzOwl4ZHBfZnJhbWUtJmd0O2ZsYWdzID0geGRwLSZndDtmbGFncyAmYW1wOyB+WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCAyOTBlMGYwOTllNmJmLi45NDI2OGY0ZDNjNWY3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtNTUzMiw2ICYjNDM7NTUzMiwxMiBAQCB1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLAogCWlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHsKIAkJc2tiX3NoaW5mbyhza2IpLSZndDt4ZHBfZnJhZ3Nfc2l6ZSA9IHNrYi0mZ3Q7ZGF0YV9sZW47CiAJCXhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7CiYjNDM7CQkvKgomIzQzOwkJICogQSBub25saW5lYXIgc2tiIHdhcyBjb3cmIzM5O2QgaW50byBwYWdlX3Bvb2wgbWVtb3J5IGJ5CiYjNDM7CQkgKiBza2JfY293X2RhdGFfZm9yX3hkcCgpIGJlZm9yZSB3ZSBnb3QgaGVyZSwgc28gdGhlIGZyYWdzIG11c3QKJiM0MzsJCSAqIGJlIGZyZWVkIHRvIHRoYXQgcG9vbCwgbm90IHZpYSB0aGUgcnhxJiMzOTtzIE1FTV9UWVBFX1BBR0VfU0hBUkVELgomIzQzOwkJICovCiYjNDM7CQl4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApOwogCX0gZWxzZSB7CiAJCXhkcF9idWZmX2NsZWFyX2ZyYWdzX2ZsYWcoeGRwKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLmQzNGJhNTZkNzlkOGYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC00Mzc4LDYgJiM0Mzs0Mzc4LDEzIEBAIHN0YXRpYyBib29sIGJwZl94ZHBfc2hyaW5rX2RhdGEoc3RydWN0IHhkcF9idWZmICp4ZHAsIHNrYl9mcmFnX3QgKmZyYWcsCiAJaWYgKG1lbV90eXBlID09IE1FTV9UWVBFX1hTS19CVUZGX1BPT0wpIHsKIAkJbmV0bWVtID0gMDsKIAkJemNfZnJhZyA9IGJwZl94ZHBfc2hyaW5rX2RhdGFfemMoeGRwLCBzaHJpbmssIHRhaWwsIHJlbGVhc2UpOwomIzQzOwl9IGVsc2UgaWYgKHhkcF9idWZmX2lzX2ZyYWdfcHAoeGRwKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFNrYi1iYWNrZWQgWERQIChnZW5lcmljIFhEUCwgdmV0aCkgY293JiMzOTtzIHRoZSBmcmFncyBpbnRvIGEKJiM0MzsJCSAqIHBhZ2VfcG9vbCB3aGlsZSB0aGUgcnhxIHN0YXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBmcmVlCiYjNDM7CQkgKiB0aGUgZnJhZyB0byB0aGUgcG9vbCwgbm90IHZpYSBwYWdlX2ZyYWdfZnJlZSgpLgomIzQzOwkJICovCiYjNDM7CQltZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfUE9PTDsKIAl9CiAKIAlpZiAocmVsZWFzZSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVlOGY5MDM0YTI2ODQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfc2hyaW5rX2ZyYWdzLmMKQEAgLTAsMCAmIzQzOzEsMjg4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXR3b3JrX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfdHVuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX2V0aGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy91aW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FycGEvaW5ldC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGRwX3Nocmlua19mcmFncy5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBnZW5lcmljLVhEUCBwcm9ncmFtIHRoYXQgc2hyaW5rcyBpbnRvIHRoZSBmcmFncyBmcmVlcyBhIHBhZ2VfcG9vbCBmcmFnLgomIzQzOyAqIHNrYi1iYWNrZWQgWERQIGZpcnN0IGNvdyYjMzk7cyB0aGUgbm9ubGluZWFyIHNrYiBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkKJiM0MzsgKiAoc2tiX2Nvd19kYXRhX2Zvcl94ZHAoKSBmb3IgZ2VuZXJpYyBYRFAsIHNrYl9wcF9jb3dfZGF0YSgpIGZvciB2ZXRoKSwgYnV0CiYjNDM7ICogdGhlIHNoYXJlZCByeHEgaXMgcmVnaXN0ZXJlZCBhcyBNRU1fVFlQRV9QQUdFX1NIQVJFRCwgc28gYSBidWdneSBrZXJuZWwKJiM0MzsgKiBmcmVlcyB0aGUgZnJhZyB3aXRoIHBhZ2VfZnJhZ19mcmVlKCkgLSZndDsgJiMzNDtCYWQgcGFnZSBzdGF0ZSAuLi4gcGFnZV9wb29sIGxlYWsmIzM0Oy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFRBUF9OQU1FCSYjMzQ7eGRwX3NocmluazAmIzM0OwomIzQzOyNkZWZpbmUgVEFQX05FVE5TCSYjMzQ7eGRwX3Nocmlua190YXAmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlNfTkFNRV9NQVhfTEVOCTMyCiYjNDM7I2RlZmluZSBWRVRIX0xPQ0FMCSYjMzQ7eGRwX3Nocmlua0EmIzM0OwomIzQzOyNkZWZpbmUgVkVUSF9QRUVSCSYjMzQ7eGRwX3Nocmlua0ImIzM0OwomIzQzOyNkZWZpbmUgVkVUSF9MT0NBTF9JUAkmIzM0OzEwLjkuOS4xJiMzNDsKJiM0MzsjZGVmaW5lIFZFVEhfUEVFUl9JUAkmIzM0OzEwLjkuOS4yJiMzNDsKJiM0MzsjZGVmaW5lIFZFVEhfTE9DQUxfTUFDCSYjMzQ7MDI6MDA6MDA6MDA6MDA6MDEmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogc2tiX3BwX2Nvd19kYXRhKCkga2VlcHMgdXAgdG8gb25lIHBhZ2UgaW4gdGhlIGxpbmVhciBwYXJ0LCBzbyB0aGUgcGFja2V0CiYjNDM7ICogc2l6ZXMgYmVsb3cgb25seSBsZWF2ZSBhIGZyYWcgKHNtYWxsZXIgdGhhbiB0aGUgMzAwMC1ieXRlIHNocmluaywgc28gaXQgaXMKJiM0MzsgKiByZWxlYXNlZCBhcyBhIHdob2xlKSBvbiA0SyBwYWdlcy4gU2tpcCBlbHNld2hlcmUgcmF0aGVyIHRoYW4gcnVuIGEgdGVzdAomIzQzOyAqIHRoYXQgY2Fubm90IHRlbGwgYSBmaXhlZCBrZXJuZWwgZnJvbSBhIGJ1Z2d5IG9uZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBBR0VfU0laRV80Swk0MDk2CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBHZW5lcm91cywgc28gYSBsb2FkZWQgQ0kgZG9lcyBub3QgZmFpbCB0aGUgYXNzZXJ0IHByZW1hdHVyZWx5OyBub3JtYWxseQomIzQzOyAqIHRoZSBmaXJzdCBjaGVjayBhbHJlYWR5IHN1Y2NlZWRzLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgV0FJVF9JVEVSUwkxMDAwMAomIzQzOyNkZWZpbmUgV0FJVF9VUwkJMTAwMAomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHdhaXRfZm9yX3Byb2coc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFdBSVRfSVRFUlMgJmFtcDsmYW1wOyAhc2tlbC0mZ3Q7YnNzLSZndDtzaHJpbmtfcmFuOyBpJiM0MzsmIzQzOykKJiM0MzsJCXVzbGVlcChXQUlUX1VTKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoY29uc3QgY2hhciAqaWZuYW1lKQomIzQzO3sKJiM0MzsJc3RydWN0IGlmcmVxIGlmciA9IHsKJiM0MzsJCS5pZnJfZmxhZ3MgPSBJRkZfVEFQIHwgSUZGX05PX1BJIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUywKJiM0MzsJfTsKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CXN0cnNjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvZGV2L25ldC90dW4mIzM0OywgT19SRFdSKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CWVyciA9IGlvY3RsKGZkLCBUVU5TRVRJRkYsICZhbXA7aWZyKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZXJyID0gLWVycm5vOwomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2ltaWxhciB0byBmbG93X2Rpc3NlY3Rvci5jOiB3cml0ZXYoKSBhbiBJRkZfTkFQSV9GUkFHUyB0YXAgdG8gYnVpbGQgYQomIzQzOyAqIG5vbmxpbmVhciBza2IgdGhhdCB0dW4gcnVucyB0aHJvdWdoIGRvX3hkcF9nZW5lcmljKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF90dW4oc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpCiYjNDM7ewomIzQzOwlfX3U4IGhlYWRbNzRdLCBmcmFnMVsyMDQ4XSwgZnJhZzJbMjA0OF07CiYjNDM7CXN0cnVjdCBldGhoZHIgKmV0aCA9ICh2b2lkICopaGVhZDsKJiM0MzsJaW50IHRhcF9mZCA9IC0xLCBpZmluZGV4LCBlcnI7CiYjNDM7CXN0cnVjdCBuZXRuc19vYmogKm5zID0gTlVMTDsKJiM0MzsJc3RydWN0IGlvdmVjIGlvdlszXTsKJiM0MzsJc3NpemVfdCBuOwomIzQzOwomIzQzOwlpZiAoZ2V0cGFnZXNpemUoKSAhPSBQQUdFX1NJWkVfNEspIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlucyA9IG5ldG5zX25ldyhUQVBfTkVUTlMsIHRydWUpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnMsICYjMzQ7bmV0bnNfbmV3JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0YXBfZmQgPSBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoVEFQX05BTUUpOwomIzQzOwlpZiAoIUFTU0VSVF9HRSh0YXBfZmQsIDAsICYjMzQ7Y3JlYXRlX3RhcCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlTWVMob3V0LCAmIzM0O2lwIGxpbmsgc2V0IGRldiAmIzM0OyBUQVBfTkFNRSAmIzM0OyB1cCYjMzQ7KTsKJiM0MzsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KFRBUF9OQU1FKTsKJiM0MzsJaWYgKCFBU1NFUlRfR1QoaWZpbmRleCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4gPSAwOwomIzQzOwomIzQzOwllcnIgPSBicGZfeGRwX2F0dGFjaChpZmluZGV4LCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3NocmluayksCiYjNDM7CQkJICAgICAwLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl94ZHBfYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1lbXNldChoZWFkLCAwLCBzaXplb2YoaGVhZCkpOwomIzQzOwltZW1zZXQoZnJhZzEsIDB4NDEsIHNpemVvZihmcmFnMSkpOwomIzQzOwltZW1zZXQoZnJhZzIsIDB4NDIsIHNpemVvZihmcmFnMikpOwomIzQzOwlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CiYjNDM7CiYjNDM7CWlvdlswXS5pb3ZfYmFzZSA9IGhlYWQ7ICBpb3ZbMF0uaW92X2xlbiA9IHNpemVvZihoZWFkKTsKJiM0MzsJaW92WzFdLmlvdl9iYXNlID0gZnJhZzE7IGlvdlsxXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcxKTsKJiM0MzsJaW92WzJdLmlvdl9iYXNlID0gZnJhZzI7IGlvdlsyXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcyKTsKJiM0MzsKJiM0MzsJbiA9IHdyaXRldih0YXBfZmQsIGlvdiwgQVJSQVlfU0laRShpb3YpKTsKJiM0MzsJQVNTRVJUX0VRKG4sIHNpemVvZihoZWFkKSAmIzQzOyBzaXplb2YoZnJhZzEpICYjNDM7IHNpemVvZihmcmFnMiksICYjMzQ7d3JpdGV2JiMzNDspOwomIzQzOwomIzQzOwl3YWl0X2Zvcl9wcm9nKHNrZWwpOwomIzQzOwkvKiBhIGJ1Z2d5IGtlcm5lbCBvbmx5IHNwbGF0cyAmIzM0O3BhZ2VfcG9vbCBsZWFrJiMzNDssIGl0IGRvZXMgbm90IGZhaWwgaGVyZSAqLwomIzQzOwlBU1NFUlRfR1Qoc2tlbC0mZ3Q7YnNzLSZndDtzaHJpbmtfcmFuLCAwLCAmIzM0O3hkcF9wcm9nX3JhbiYjMzQ7KTsKJiM0MzsKJiM0MzsJYnBmX3hkcF9kZXRhY2goaWZpbmRleCwgMCwgTlVMTCk7CiYjNDM7b3V0OgomIzQzOwlpZiAodGFwX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZSh0YXBfZmQpOwomIzQzOwluZXRuc19mcmVlKG5zKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCb3RoIHZldGggZW5kcyBsaXZlIGluIHRoZWlyIG93biBuYW1lc3BhY2UsIHNvIHRoZSB0cmFmZmljIHJlYWxseSBjcm9zc2VzCiYjNDM7ICogdGhlIHBhaXIgYW5kIG5vdGhpbmcgaXMgY3JlYXRlZCBpbiB0aGUgY2FsbGVyJiMzOTtzIG5hbWVzcGFjZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHZldGhfc2V0dXAoY2hhciAqbnMwLCBjaGFyICpuczEpCiYjNDM7ewomIzQzOwlpZiAoIUFTU0VSVF9PSyhhcHBlbmRfdGlkKG5zMCwgTlNfTkFNRV9NQVhfTEVOKSwgJiMzNDthcHBlbmRfdGlkIG5zMCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soYXBwZW5kX3RpZChuczEsIE5TX05BTUVfTUFYX0xFTiksICYjMzQ7YXBwZW5kX3RpZCBuczEmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBuczApOwomIzQzOwlTWVMoZmFpbF9uczAsICYjMzQ7aXAgbmV0bnMgYWRkICVzJiMzNDssIG5zMSk7CiYjNDM7CVNZUyhmYWlsX25zMSwgJiMzNDtpcCAtbiAlcyBsaW5rIGFkZCAlcyBtdHUgODAwMCB0eXBlIHZldGggcGVlciBuYW1lICVzIG10dSA4MDAwJiMzNDssCiYjNDM7CSAgICBuczAsIFZFVEhfTE9DQUwsIFZFVEhfUEVFUik7CiYjNDM7CVNZUyhmYWlsX25zMSwgJiMzNDtpcCAtbiAlcyBsaW5rIHNldCAlcyBuZXRucyAlcyYjMzQ7LCBuczAsIFZFVEhfUEVFUiwgbnMxKTsKJiM0MzsJU1lTKGZhaWxfbnMxLCAmIzM0O2lwIC1uICVzIGxpbmsgc2V0ICVzIGFkZHJlc3MgJXMmIzM0OywgbnMwLCBWRVRIX0xPQ0FMLAomIzQzOwkgICAgVkVUSF9MT0NBTF9NQUMpOwomIzQzOwlTWVMoZmFpbF9uczEsICYjMzQ7aXAgLW4gJXMgYWRkciBhZGQgJXMvMjQgZGV2ICVzJiMzNDssIG5zMCwgVkVUSF9MT0NBTF9JUCwKJiM0MzsJICAgIFZFVEhfTE9DQUwpOwomIzQzOwlTWVMoZmFpbF9uczEsICYjMzQ7aXAgLW4gJXMgbGluayBzZXQgJXMgdXAmIzM0OywgbnMwLCBWRVRIX0xPQ0FMKTsKJiM0MzsJU1lTKGZhaWxfbnMxLCAmIzM0O2lwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBuczEsIFZFVEhfUEVFUl9JUCwKJiM0MzsJICAgIFZFVEhfUEVFUik7CiYjNDM7CVNZUyhmYWlsX25zMSwgJiMzNDtpcCAtbiAlcyBsaW5rIHNldCAlcyB1cCYjMzQ7LCBuczEsIFZFVEhfUEVFUik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2ZhaWxfbnMxOgomIzQzOwlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICVzJiMzNDssIG5zMSk7CiYjNDM7ZmFpbF9uczA6CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMmIzM0OywgbnMwKTsKJiM0MztmYWlsOgomIzQzOwlyZXR1cm4gLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZldGhfY2xlYW51cChjb25zdCBjaGFyICpuczAsIGNvbnN0IGNoYXIgKm5zMSkKJiM0Mzt7CiYjNDM7CS8qIERyb3BwaW5nIHRoZSBuYW1lc3BhY2VzIHRha2VzIHRoZSB2ZXRoIHBhaXIgYW5kIGl0cyBYRFAgcHJvZ3JhbXMuICovCiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMmIzM0OywgbnMxKTsKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAlcyYjMzQ7LCBuczApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZldGhfYXR0YWNoKGNvbnN0IGNoYXIgKm5zLCBjb25zdCBjaGFyICpkZXYsIGludCBwcm9nX2ZkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW47CiYjNDM7CWludCBpZmluZGV4LCBlcnI7CiYjNDM7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKG5zKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3Blbl9uZXRucyYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KGRldik7CiYjNDM7CWlmICghQVNTRVJUX0dUKGlmaW5kZXgsIDAsICYjMzQ7aWZfbmFtZXRvaW5kZXgmIzM0OykpIHsKJiM0MzsJCWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGJwZl94ZHBfYXR0YWNoKGlmaW5kZXgsIHByb2dfZmQsIDAsIE5VTEwpOwomIzQzOwljbG9zZV9uZXRucyhuc3Rva2VuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIEFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX3hkcF9hdHRhY2gmIzM0OykgPyAwIDogLTE7CiYjNDM7fQomIzQzOwomIzQzOy8qIEEgbGFyZ2UgcGluZyBidWlsZHMgYSBub25saW5lYXIgc2tiIHRoYXQgdmV0aCBjb3cmIzM5O3MgaW50byBpdHMgcGFnZV9wb29sLiAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfdmV0aChzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbCkKJiM0Mzt7CiYjNDM7CWNoYXIgbnMwW05TX05BTUVfTUFYX0xFTl0gPSAmIzM0O3hkcF9zaHJpbmtfbnMwLSYjMzQ7OwomIzQzOwljaGFyIG5zMVtOU19OQU1FX01BWF9MRU5dID0gJiMzNDt4ZHBfc2hyaW5rX25zMS0mIzM0OzsKJiM0MzsKJiM0MzsJaWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZldGhfc2V0dXAobnMwLCBuczEpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4gPSAwOwomIzQzOwomIzQzOwlpZiAodmV0aF9hdHRhY2gobnMwLCBWRVRIX0xPQ0FMLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3NocmluaykpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXMmIzM0OywKJiM0MzsJCSAgIG5zMSwgVkVUSF9MT0NBTF9JUCk7CiYjNDM7CiYjNDM7CXdhaXRfZm9yX3Byb2coc2tlbCk7CiYjNDM7CS8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzICYjMzQ7cGFnZV9wb29sIGxlYWsmIzM0OywgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovCiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4sIDAsICYjMzQ7eGRwX3Byb2dfcmFuJiMzNDspOwomIzQzO291dDoKJiM0MzsJdmV0aF9jbGVhbnVwKG5zMCwgbnMxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBMT0NBTCBjb3cmIzM5O3MgdGhlIGluY29taW5nIHNrYiBhbmQgcmV0dXJucyBYRFBfVFgsIHNvIHRoZSBidWZmIGlzIHR1cm5lZCBpbnRvCiYjNDM7ICogYW4geGRwX2ZyYW1lIGFuZCBib3VuY2VkIHRvIFBFRVIsIHdoaWNoIHNocmlua3MgYSBmcmFnLiBBIHBhZ2VfcG9vbCB0YWcKJiM0MzsgKiByZWNvcmRlZCBvbiB0aGUgYnVmZiBtdXN0IG5vdCBsZWFrIGludG8gdGhlIGZyYW1lLCBvciBQRUVSIGZyZWVzIGEgcGxhaW4KJiM0MzsgKiBwYWdlICh3aG9zZSBwcCB3YXMgYWxyZWFkeSBjbGVhcmVkIG9uIHRoZSBYRFBfVFggc2lkZSkgYXMgcGFnZV9wb29sIG1lbW9yeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3ZldGhfdHgoc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpCiYjNDM7ewomIzQzOwljaGFyIG5zMFtOU19OQU1FX01BWF9MRU5dID0gJiMzNDt4ZHBfc2hyaW5rX3R4MC0mIzM0OzsKJiM0MzsJY2hhciBuczFbTlNfTkFNRV9NQVhfTEVOXSA9ICYjMzQ7eGRwX3Nocmlua190eDEtJiMzNDs7CiYjNDM7CiYjNDM7CWlmIChnZXRwYWdlc2l6ZSgpICE9IFBBR0VfU0laRV80SykgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2ZXRoX3NldHVwKG5zMCwgbnMxKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTE9DQUwgYm91bmNlcyBldmVyeXRoaW5nIChpbmNsLiBBUlApIHdpdGggWERQX1RYLCBzbyBwaW4gYSBzdGF0aWMKJiM0MzsJICogbmVpZ2hib3VyIHRvIGxldCB0aGUgcGluZyYjMzk7cyBwYXlsb2FkIGFjdHVhbGx5IHJlYWNoIGl0LgomIzQzOwkgKi8KJiM0MzsJU1lTKG91dCwgJiMzNDtpcCAtbiAlcyBuZWlnaCBhZGQgJXMgbGxhZGRyICVzIGRldiAlcyBudWQgcGVybWFuZW50JiMzNDssCiYjNDM7CSAgICBuczEsIFZFVEhfTE9DQUxfSVAsIFZFVEhfTE9DQUxfTUFDLCBWRVRIX1BFRVIpOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4gPSAwOwomIzQzOwomIzQzOwlpZiAodmV0aF9hdHRhY2gobnMwLCBWRVRIX0xPQ0FMLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3R4KSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHZldGhfYXR0YWNoKG5zMSwgVkVUSF9QRUVSLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MueGRwX3NocmluaykpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXMmIzM0OywKJiM0MzsJCSAgIG5zMSwgVkVUSF9MT0NBTF9JUCk7CiYjNDM7CiYjNDM7CXdhaXRfZm9yX3Byb2coc2tlbCk7CiYjNDM7CS8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzICYjMzQ7cGFnZV9wb29sIGxlYWsmIzM0OywgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovCiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O3Nocmlua19yYW4sIDAsICYjMzQ7eGRwX3Byb2dfcmFuJiMzNDspOwomIzQzO291dDoKJiM0MzsJdmV0aF9jbGVhbnVwKG5zMCwgbnMxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3hkcF9zaHJpbmtfZnJhZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsOwomIzQzOwomIzQzOwlza2VsID0geGRwX3Nocmlua19mcmFnc19fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW5fbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0dW4mIzM0OykpCiYjNDM7CQl0ZXN0X3R1bihza2VsKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt2ZXRoJiMzNDspKQomIzQzOwkJdGVzdF92ZXRoKHNrZWwpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3ZldGhfdHgmIzM0OykpCiYjNDM7CQl0ZXN0X3ZldGhfdHgoc2tlbCk7CiYjNDM7CiYjNDM7CXhkcF9zaHJpbmtfZnJhZ3NfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zaHJpbmtfZnJhZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYWQ4OTVhYjY5OTMwMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmMKQEAgLTAsMCAmIzQzOzEsMzQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IHNocmlua19yYW47CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwLmZyYWdzJiMzNDspCiYjNDM7aW50IHhkcF9zaHJpbmsoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogUnVucyBvbiBib3RoIHNrYi1iYWNrZWQgWERQIHBhdGhzIChnZW5lcmljIFhEUCB2aWEgdHVuLCBhbmQgdmV0aCk6CiYjNDM7CSAqIHRoZSBub25saW5lYXIgc2tiIGlzIGNvdyYjMzk7ZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYmVmb3JlIHdlIHJ1biwgc28KJiM0MzsJICogc2hyaW5raW5nIHRoZSB0YWlsIHJlbGVhc2VzIGEgd2hvbGUgZnJhZyB0aGF0IGhhcyB0byBnbyBiYWNrIHRvIHRoYXQKJiM0MzsJICogcG9vbC4gVGhlIGNvdW50ZXIgb25seSB0ZWxscyB1cyB0aGUgcHJvZ3JhbSByYW4gYW5kIHRoZSBoZWxwZXIKJiM0MzsJICogc3VjY2VlZGVkIC0tIGEgbGluZWFyIGJ1ZmYgcmV0dXJucyAwIGFzIHdlbGwgLS0gaXQgZG9lcyBub3QgcHJvdmUgYQomIzQzOwkgKiBmcmFnIHdhcyByZWxlYXNlZC4KJiM0MzsJICovCiYjNDM7CWlmIChicGZfeGRwX2FkanVzdF90YWlsKGN0eCwgLTMwMDApID09IDApCiYjNDM7CQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3Nocmlua19yYW4sIDEpOwomIzQzOwlyZXR1cm4gWERQX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3hkcC5mcmFncyYjMzQ7KQomIzQzO2ludCB4ZHBfdHgoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQm91bmNlIHRoZSBmcmFtZSBiYWNrLiBPbiB2ZXRoIHRoaXMgdHVybnMgdGhlIGJ1ZmYgaW50byBhbgomIzQzOwkgKiB4ZHBfZnJhbWUsIHdoaWNoIGlzIHdoZXJlIGEgYnVmZi1zY29wZWQgcGFnZV9wb29sIHRhZyBtdXN0IG5vdCBsZWFrCiYjNDM7CSAqIGludG8gdGhlIGZyYW1lIGhhbmRlZCB0byB0aGUgcGVlci4KJiM0MzsJICovCiYjNDM7CXJldHVybiBYRFBfVFg7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgZmlyc3Qgc3RlcCBpcywgb2YgY291cnNlLCBhIGNhcmVmdWwgcmVhZC10aHJvdWdoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgYW5kIHdoZXJlIHRob3NlIGNoYW5nZXMgYXJlIGhhcHBlbmluZy4KCkkgc2VlIGEgbGlzdCBvZiBtb2RpZmllZCBmaWxlczogYGRyaXZlcnMvbmV0L3ZldGguY2AsIGBpbmNsdWRlL25ldC94ZHAuaGAsIGBuZXQvY29yZS9kZXYuY2AsIGBuZXQvY29yZS9maWx0ZXIuY2AsIGFuZCBhIHNsZXcgb2YgdGVzdCBmaWxlcy4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc2V0IHRvIGxvb2sgYXQuCgoqICAgYGRyaXZlcnMvbmV0L3ZldGguY2Agc2hvd3MgY2hhbmdlcyB3aXRoaW4gYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgLCBzcGVjaWZpY2FsbHkgc2V0dGluZyBgeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKWAgYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGZyYWdtZW50cyBpbiB0aGUgU0tCLiBUaGF0IHNvdW5kcyBsaWtlIHdlIGFyZSBkZWFsaW5nIHdpdGggZnJhZ21lbnQgaGFuZGxpbmcsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBleHRyYSBzY3J1dGlueS4KKiAgIGBpbmNsdWRlL25ldC94ZHAuaGAgaW50cm9kdWNlcyBhIG5ldyBmbGFnLCBgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTGAsIGFsb25nIHdpdGggaGVscGVyIGZ1bmN0aW9ucyBmb3Igc2V0dGluZyBhbmQgY2hlY2tpbmcgaXQuIFRoaXMgaW5kaWNhdGVzIGEgZm9jdXMgb24gcGFnZSBwb29sIG1hbmFnZW1lbnQgb2YgZnJhZ21lbnRzIHdpdGhpbiBYRFAsIHNvIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGFuIG9idmlvdXMgYXJlYSBvZiBmb2N1cy4gQWxzbyBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgYW5kIGB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZmAgc2VlbXMgdG8gZGVhbCB3aXRoIGZsYWdzIGFuZCBtZW1vcnkgdHlwZS4KKiAgIGBuZXQvY29yZS9kZXYuY2Agc2hvd3MgdGhhdCwgd2l0aGluIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLCBgeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKWAgaXMgY2FsbGVkIGlmIHRoZSBTS0IgaXMgbm9ubGluZWFyLCB3aGljaCByZWluZm9yY2VzIHRoaXMgaWRlYSBvZiBmcmFnZW1lbnRzIGJlaW5nIGNvcmUuCiogICBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGBicGZfeGRwX3Nocmlua19kYXRhYCBkb2VzIHNvbWUgbWVtb3J5IHR5cGUgaGFuZGxpbmcuIEl0IGlzIHNwZWNpZmljYWxseSBjYWxsaW5nIGB4ZHBfYnVmZl9pc19mcmFnX3BwYCwgYW5kIHRoZW4gZGVhbGluZyB3aXRoIHRoZSBtZW1vcnkgYXMgYSBgTUVNX1RZUEVfUEFHRV9QT09MYCB0byBmcmVlIGEgZnJhZy4gVGhpcyBpcyBrZXksIGFzIGFueSBzdWJ0bGUgY2hhbmdlIGhlcmUgY291bGQgY3JlYXRlIGlzc3Vlcy4KCk9rYXksIGxldCBtZSBwdXQgb24gbXkgbWVtb3J5IGxlYWsgLyB1c2UtYWZ0ZXItZnJlZSBoYXQuIFRoZSBjb3JlIHNlZW1zIHRvIGJlIGFyb3VuZCB0aGlzIGludGVyYWN0aW9uIGJldHdlZW4gU0tCIGZyYWdtZW50cywgWERQLCBhbmQgdGhlIHBhZ2UgcG9vbC4gVGhlcmUmIzM5O3MgYSBjbGVhciBicmFuY2hpbmcgYmFzZWQgb24gd2hldGhlciB0aGUgWERQIGJ1ZmZlciB1c2VzIGZyYWdtZW50cywgYW5kIHRoYXQgc2VlbXMgdG8gbGVhZCB0byBtZW1vcnkgdHlwZSBjaGFuZ2VzLiBUaGlzIHNtZWxscyBsaWtlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW5jb3JyZWN0IG1lbW9yeSBkZWFsbG9jYXRpb24gaWYgdGhlIHN0YXRlIGlzbiYjMzk7dCBtYW5hZ2VkIGNvcnJlY3RseS4KClRoZSBmYWN0IHRoYXQgYGJwZl94ZHBfc2hyaW5rX2RhdGFgJiMzOTtzIHN1cnJvdW5kaW5nIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgbWVtb3J5IHR5cGVzIGFuZCBmcmFnbWVudCBtYW5hZ2VtZW50IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcyBpbiBkZXRhaWwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZGlmZmVyZW50IG1lbW9yeSB0eXBlcywgZXNwZWNpYWxseSBhcm91bmQgdGhlIHBhZ2UgcG9vbC4gV2UgbmVlZCB0byBiZSBjaGVja2luZyB0aGUgcGFnZSBwb29sIGludGVyYWN0aW9ucyB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG9mZi1ieS1vbmUgZXJyb3JzIG9yIGRvdWJsZS1mcmVlcy4KClNvLCB5ZXMsIGdpdmVuIHRoaXMgYW5hbHlzaXMsIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBmcmFnbWVudCBoYW5kbGluZywgdGhlIG1lbW9yeSB0eXBlIGNoYW5nZXMsIGFuZCB0aGUgcGFnZSBwb29sIGludGVyYWN0aW9ucyBhcmUgYWxsIHJlZCBmbGFncyB0aGF0IGRlbWFuZCBkZWVwZXIgaW52ZXN0aWdhdGlvbiB3aXRoIHRvb2xzIGRlc2lnbmVkIHRvIGNhdGNoIHRoZXNlIGlzc3Vlcy4gSSBzaG91bGQgbWFrZSBzdXJlIG15IHRlc3Rpbmcgd2lsbCBjb25zaWRlciB0aGUgaW50ZXJhY3Rpb25zIGFuZCBlZGdlIGNhc2VzIG9mIHRoZSBkaWZmZXJlbnQgbWVtb3J5IHR5cGVzIGluIHRoaXMgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3hkcF9zaHJpbmtfZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTQzMjc9c3RhdGljIGludCBicGZfeGRwX2ZyYWdzX2luY3JlYXNlX3RhaWwoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBvZmZzZXQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDM1MS1cbm5ldC9jb3JlL2ZpbHRlci5jOjQzNTI6c3RhdGljIHN0cnVjdCB4ZHBfYnVmZiAqYnBmX3hkcF9zaHJpbmtfZGF0YV96YyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgaW50IHNocmluayxcbm5ldC9jb3JlL2ZpbHRlci5jLTQzNTMtXHRcdFx0XHRcdCAgICAgICBib29sIHRhaWwsIGJvb2wgcmVsZWFzZSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00MzY5LVxubmV0L2NvcmUvZmlsdGVyLmM6NDM3MDpzdGF0aWMgYm9vbCBicGZfeGRwX3Nocmlua19kYXRhKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBza2JfZnJhZ190ICpmcmFnLFxubmV0L2NvcmUvZmlsdGVyLmMtNDM3MS1cdFx0XHRcdGludCBzaHJpbmssIGJvb2wgdGFpbClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00Mzc5LVx0XHRuZXRtZW0gPSAwO1xubmV0L2NvcmUvZmlsdGVyLmM6NDM4MDpcdFx0emNfZnJhZyA9IGJwZl94ZHBfc2hyaW5rX2RhdGFfemMoeGRwLCBzaHJpbmssIHRhaWwsIHJlbGVhc2UpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDM4MS1cdH0gZWxzZSBpZiAoeGRwX2J1ZmZfaXNfZnJhZ19wcCh4ZHApKSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDQwMT1zdGF0aWMgaW50IGJwZl94ZHBfZnJhZ3Nfc2hyaW5rX3RhaWwoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBvZmZzZXQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDQxNC1cdFx0b2Zmc2V0IC09IHNocmluaztcbm5ldC9jb3JlL2ZpbHRlci5jOjQ0MTU6XHRcdGlmIChicGZfeGRwX3Nocmlua19kYXRhKHhkcCwgZnJhZywgc2hyaW5rLCB0cnVlKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0MTYtXHRcdFx0bl9mcmFnc19mcmVlJiM0MzsmIzQzOztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjY1OT1fX2JwZl9rZnVuYyBpbnQgYnBmX3hkcF9wdWxsX2RhdGEoc3RydWN0IHhkcF9tZCAqeCwgdTMyIGxlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcwMC1cdFx0ZGVsdGEgLT0gc2hyaW5rO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI3MDE6XHRcdGlmIChicGZfeGRwX3Nocmlua19kYXRhKHhkcCwgZnJhZywgc2hyaW5rLCBmYWxzZSkpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcwMi1cdFx0XHRuX2ZyYWdzX2ZyZWUmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdDoKCioqRGl2aW5nIGludG8gdGhlIFBhY2tldCBGaWx0ZXIgUGx1bWJpbmcqKgoKT2theSwgc28gdGhlIGluc3RydWN0aW9uIGlzIGNsZWFyOiBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBqdW1wIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQzNzAuIFRoYXQgdXN1YWxseSBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYWNrZXQgZmlsdGVyaW5nIGVuZ2luZSwgbW9zdCBsaWtlbHkgdGhlIGltcGxlbWVudGF0aW9uIG9mIHNvbWUgQlBGLXJlbGF0ZWQgZnVuY3Rpb24uIE15IGd1dCB0ZWxscyBtZSB3ZSYjMzk7cmUgZWl0aGVyIGxvb2tpbmcgYXQgdGhlIGludGVycHJldGVyLCBhIGhlbHBlciBmdW5jdGlvbiwgb3IgcGVyaGFwcyBhIHBhcnQgb2YgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiByb3V0aW5lcyBmb3IgdGhpcyBzZWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgb3V0IGZvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYW5kbGUgdGhlIGZpbHRlcnMgdGhlbXNlbHZlcywgdGhlIGFjdHVhbCBieXRlY29kZSByZXByZXNlbnRhdGlvbiBhbmQgaG93IHRoYXQgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgZGF0YSBwYXRoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIGF3YWl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzY1Olx0XHR9XG40MzY2Olx0XG40MzY3Olx0XHRyZXR1cm4gemNfZnJhZztcbjQzNjg6XHR9XG40MzY5Olx0XG40MzcwOlx0c3RhdGljIGJvb2wgYnBmX3hkcF9zaHJpbmtfZGF0YShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc2tiX2ZyYWdfdCAqZnJhZyxcbjQzNzE6XHRcdFx0XHRcdGludCBzaHJpbmssIGJvb2wgdGFpbClcbjQzNzI6XHR7XG40MzczOlx0XHRlbnVtIHhkcF9tZW1fdHlwZSBtZW1fdHlwZSA9IHhkcC1cdTAwM2VyeHEtXHUwMDNlbWVtLnR5cGU7XG40Mzc0Olx0XHRib29sIHJlbGVhc2UgPSBza2JfZnJhZ19zaXplKGZyYWcpID09IHNocmluaztcbjQzNzU6XHRcdG5ldG1lbV9yZWYgbmV0bWVtID0gc2tiX2ZyYWdfbmV0bWVtKGZyYWcpO1xuNDM3NjpcdFx0c3RydWN0IHhkcF9idWZmICp6Y19mcmFnID0gTlVMTDtcbjQzNzc6XHRcbjQzNzg6XHRcdGlmIChtZW1fdHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MKSB7XG40Mzc5Olx0XHRcdG5ldG1lbSA9IDA7XG40MzgwOlx0XHRcdHpjX2ZyYWcgPSBicGZfeGRwX3Nocmlua19kYXRhX3pjKHhkcCwgc2hyaW5rLCB0YWlsLCByZWxlYXNlKTtcbjQzODE6XHRcdH0gZWxzZSBpZiAoeGRwX2J1ZmZfaXNfZnJhZ19wcCh4ZHApKSB7XG40MzgyOlx0XHRcdC8qXG40MzgzOlx0XHRcdCAqIFNrYi1iYWNrZWQgWERQIChnZW5lcmljIFhEUCwgdmV0aCkgY293JiMzOTtzIHRoZSBmcmFncyBpbnRvIGFcbjQzODQ6XHRcdFx0ICogcGFnZV9wb29sIHdoaWxlIHRoZSByeHEgc3RheXMgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIHNvIGZyZWVcbjQzODU6XHRcdFx0ICogdGhlIGZyYWcgdG8gdGhlIHBvb2wsIG5vdCB2aWEgcGFnZV9mcmFnX2ZyZWUoKS5cbjQzODY6XHRcdFx0ICovXG40Mzg3Olx0XHRcdG1lbV90eXBlID0gTUVNX1RZUEVfUEFHRV9QT09MO1xuNDM4ODpcdFx0fVxuNDM4OTpcdFxuNDM5MDpcdFx0aWYgKHJlbGVhc2UpIHtcbjQzOTE6XHRcdFx0X194ZHBfcmV0dXJuKG5ldG1lbSwgbWVtX3R5cGUsIGZhbHNlLCB6Y19mcmFnKTtcbjQzOTI6XHRcdH0gZWxzZSB7XG40MzkzOlx0XHRcdGlmICghdGFpbClcbjQzOTQ6XHRcdFx0XHRza2JfZnJhZ19vZmZfYWRkKGZyYWcsIHNocmluayk7XG40Mzk1Olx0XHRcdHNrYl9mcmFnX3NpemVfc3ViKGZyYWcsIHNocmluayk7XG40Mzk2Olx0XHR9XG40Mzk3Olx0XG40Mzk4Olx0XHRyZXR1cm4gcmVsZWFzZTtcbjQzOTk6XHR9XG40NDAwOlx0XG40NDAxOlx0c3RhdGljIGludCBicGZfeGRwX2ZyYWdzX3Nocmlua190YWlsKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBpbnQgb2Zmc2V0KVxuNDQwMjpcdHtcbjQ0MDM6XHRcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNpbmZvID0geGRwX2dldF9zaGFyZWRfaW5mb19mcm9tX2J1ZmYoeGRwKTtcbjQ0MDQ6XHRcdGludCBpLCBuX2ZyYWdzX2ZyZWUgPSAwLCBsZW5fZnJlZSA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzI0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWERQIEJ1ZmZlciBTaHJpbmsgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgZmxhdyB3aXRoaW4gdGhlIFhEUCBmcmFtZXdvcmssIHNwZWNpZmljYWxseSB3aGVuIHNocmlua2luZyBYRFAgYnVmZmVycyBiYWNrZWQgYnkgU0tCcywgcGFydGljdWxhcmx5IGluIHRoZSBub25saW5lYXIgU0tCIHNjZW5hcmlvLiBUaGUgY29yZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGluY29ycmVjdCBoYW5kbGluZyBvZiBwYWdlIGZyYWdtZW50cyAoZnJhZ3MpIGFsbG9jYXRlZCBmcm9tIGEgYHBhZ2VfcG9vbGAgZHVyaW5nIGJ1ZmZlciBzaHJpbmthZ2UuIEJhc2ljYWxseSwgd2hlbiBhIEJQRiBwcm9ncmFtIHNocmlua3MgdGhlIFhEUCBidWZmZXImIzM5O3MgdGFpbCB1c2luZyBgYnBmX3hkcF9hZGp1c3RfdGFpbGAgb3IgYGJwZl94ZHBfcHVsbF9kYXRhYCwgdGhlIGNvZGUgd2FzIG1pc3Rha2VubHkgZnJlZWluZyB0aGUgY29tcGxldGVseSBzaHJ1bmsgZnJhZ21lbnRzIHVzaW5nIGBwYWdlX2ZyYWdfZnJlZSgpYCwgZXZlbiB0aG91Z2ggdGhleSB3ZXJlIGFsbG9jYXRlZCBmcm9tIGEgYHBhZ2VfcG9vbGAuIFRoaXMgaW5jb25zaXN0ZW5jeSBsZWFkcyB0byBzZXZlcmUgaXNzdWVzOiAmIzM0O0JhZCBwYWdlIHN0YXRlIC4uLiBwYWdlX3Bvb2wgbGVhaywmIzM0OyBtZW1vcnkgY29ycnVwdGlvbiwgaW52YWxpZCBmcmVlcywgYW5kIHByb2JsZW1zIHdpdGggcGFnZSByZWZlcmVuY2UgY291bnRpbmcg4oCTIGNsYXNzaWMgbWVtb3J5IG1hbmFnZW1lbnQgcGl0ZmFsbHMuCgpUaGUgc29sdXRpb24sIGFzIEkgc2VlIGl0LCBpcyBhIHByZXR0eSBjbGVhbiBhcHByb2FjaC4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIGZsYWcsIGBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MYCwgd2l0aGluIHRoZSBgeGRwX2J1ZmZgIHN0cnVjdHVyZS4gVGhpcyBmbGFnIGFsbG93cyBgYnBmX3hkcF9zaHJpbmtfZGF0YSgpYCB0byBjb3JyZWN0bHkgaWRlbnRpZnkgZnJhZ3Mgb3JpZ2luYXRpbmcgZnJvbSBhIGBwYWdlX3Bvb2xgIChtZW1fdHlwZSBgTUVNX1RZUEVfUEFHRV9QT09MYCkgYW5kIHVzZSB0aGUgYXBwcm9wcmlhdGUgcGFnZSBwb29sIHJlY2xhbWF0aW9uIGxvZ2ljLiBUaGF0JiMzOTtzIGEgZ29vZCBmaXggZm9yIHRoZSBpZGVudGlmaWVkIG1lbW9yeS1yZWxhdGVkIGlzc3VlLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBwZXJmb3JtIGEgS01TQU4vS0FTQU4gYXNzZXNzbWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzbiYjMzk7dCBzdWJ0bHkgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHdyaXRlcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLgoKTXkgY3JpdGVyaWEgZm9yIEtNU0FOIHJldm9sdmUgYXJvdW5kIHRoZXNlIGFyZWFzOiBrZXJuZWwgc3RydWN0dXJlcyBsZWFraW5nIHRvIHVzZXIgc3BhY2UgKHZpYSB2YXJpb3VzIGNoYW5uZWxzKSwgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBzdWJzZXF1ZW50IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIGJ5dGVzIGJlaW5nIGFjY2Vzc2VkLgoKU28sIGxldCYjMzk7cyBleGFtaW5lIHRoZSBtZW1vcnkgZmxvd3M6CgoqICAgSW4gYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgIGFuZCBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgd2UmIzM5O3JlIHNldHRpbmcgdGhlIGZsYWcgYml0LCB3aGljaCBpcyBnb29kLgoqICAgSW4gYHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmYCwgdGhlIGZsYWcgaXMgY2xlYXJlZC4KKiAgIEluIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLCB0aGUgZmxhZyBpcyBzZXQuCiogICBgYnBmX3hkcF9zaHJpbmtfZGF0YWAgY2hlY2tzIHRoZSBmbGFnLgoKQWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlLCBJIGRvbiYjMzk7dCBzZWUgYW55IGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIGB4ZHBgIHN0cnVjdHVyZSBpcyBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9uIGNhbGxzLiBUaGUgYGZsYWdzYCBmaWVsZCBpcyBiZWluZyBtYW5pcHVsYXRlZCB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucywgc28gaXQmIzM5O3MgYWxsIGNvbnRyb2xsZWQuIFRoZSBwYXRjaCYjMzk7cyBwcmltYXJ5IGZvY3VzIGlzIHJlc29sdmluZyB0aGUgcGFnZSBmcmVlIHR5cGUgbWlzbWF0Y2gsIHdoaWNoIHByaW1hcmlseSB0cmlnZ2VycyBpc3N1ZXMgd2l0aCBwYWdlIHJlZmNvdW50LCBtZW1vcnkgYWxsb2NhdG9yIGNvcnJ1cHRpb24sIGFuZCBwYWdlIHBvb2wgbGVha3MuIFRoZXNlIGFyZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgdGhhdCBhcmUgbm9ybWFsbHkgY2F1Z2h0IGJ5IGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIHNhbml0aXplcnMgbGlrZSBwYWdlIHJlZmNvdW50IGNoZWNrcywgcGFnZVxfcG9vbCB0cmFja2luZywgYW5kIEtBU0FOICh0byBkZXRlY3QgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUpLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBlcnJvcnMuCgpJJiMzOTt2ZSBhbHNvIGRvdWJsZS1jaGVja2VkIGB4ZHBfYnVmZmAgYW5kIGB4ZHBfZnJhbWVgIGZvciB1bmluaXRpYWxpemVkIGZpZWxkcyB0byBlbnN1cmUgbm90aGluZyYjMzk7cyBleHBvc2VkIGZyb20gdGhpcyBwYXRjaCBhbmQsIGFmdGVyIGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGluIGBpbmNsdWRlL25ldC94ZHAuaGAsIEkmIzM5O20gY29uZmlkZW50LiBJJiMzOTttIHNhdGlzZmllZCB0aGF0IHRoaXMgcGF0Y2gsIHdoaWxlIGZpeGluZyBhIGNyaXRpY2FsIG1lbW9yeSBpc3N1ZSwgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4vS0FTQU4gY29uY2VybnMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hkcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hkcC5oPTc0PWVudW0geGRwX2J1ZmZfZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbmV0L3hkcC5oLTg4LVx0ICogdGhpcyBpcyBzdHJpcHBlZCBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpIGFuZCByZS1kZXJpdmVkIGZyb21cbmluY2x1ZGUvbmV0L3hkcC5oOjg5Olx0ICogOjptZW1fdHlwZSBpbiB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKCkuXG5pbmNsdWRlL25ldC94ZHAuaC05MC1cdCAqL1xuLS1cbmluY2x1ZGUvbmV0L3hkcC5oPTQwNT1zdGF0aWMgaW5saW5lXG5pbmNsdWRlL25ldC94ZHAuaDo0MDY6dm9pZCB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKGNvbnN0IHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lLFxuaW5jbHVkZS9uZXQveGRwLmgtNDA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1ODMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB4ZHAuaGAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgWERQLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbmV0L3hkcC5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQwMC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBzcG90IHRvIGdldCBhIGZlZWwgZm9yIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBrZXkgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2l0aGluIGEgaGVhZGVyIGZpbGUgbGlrZSB0aGlzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBkZWZpbml0aW9ucyBoZXJlIHRoYXQgcmVsYXRlIHRvIHRoZSBYRFAgcHJvZ3JhbW1pbmcgbW9kZWwsIG1heWJlIHNvbWV0aGluZyBhcm91bmQgYnVmZmVyIG1hbmFnZW1lbnQgb3IgcGFja2V0IG1ldGFkYXRhLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiBob3cgWERQIGFjdHVhbGx5IHdvcmtzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uIHBvaW50cyBhcyBJIHJlYWQuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGZvciBtb3JlIGluLWRlcHRoIGFuYWx5c2lzIGxhdGVyIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hkcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDY1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTU6XHRzdHJ1Y3Qgc2tfYnVmZiAqeGRwX2J1aWxkX3NrYl9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApO1xuIDM5NjpcdHN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21femMoc3RydWN0IHhkcF9idWZmICp4ZHApO1xuIDM5NzpcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCk7XG4gMzk4Olx0c3RydWN0IHNrX2J1ZmYgKl9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYsXG4gMzk5Olx0XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4gNDAwOlx0XHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIDQwMTpcdHN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcbiA0MDI6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIDQwMzpcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGZfY2xvbmUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZik7XG4gNDA0Olx0XG4gNDA1Olx0c3RhdGljIGlubGluZVxuIDQwNjpcdHZvaWQgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSxcbiA0MDc6XHRcdFx0XHQgICAgICAgc3RydWN0IHhkcF9idWZmICp4ZHApXG4gNDA4Olx0e1xuIDQwOTpcdFx0eGRwLVx1MDAzZWRhdGFfaGFyZF9zdGFydCA9IGZyYW1lLVx1MDAzZWRhdGEgLSBmcmFtZS1cdTAwM2VoZWFkcm9vbSAtIHNpemVvZigqZnJhbWUpO1xuIDQxMDpcdFx0eGRwLVx1MDAzZWRhdGEgPSBmcmFtZS1cdTAwM2VkYXRhO1xuIDQxMTpcdFx0eGRwLVx1MDAzZWRhdGFfZW5kID0gZnJhbWUtXHUwMDNlZGF0YSAmIzQzOyBmcmFtZS1cdTAwM2VsZW47XG4gNDEyOlx0XHR4ZHAtXHUwMDNlZGF0YV9tZXRhID0gZnJhbWUtXHUwMDNlZGF0YSAtIGZyYW1lLVx1MDAzZW1ldGFzaXplO1xuIDQxMzpcdFx0eGRwLVx1MDAzZWZyYW1lX3N6ID0gZnJhbWUtXHUwMDNlZnJhbWVfc3o7XG4gNDE0Olx0XHR4ZHAtXHUwMDNlZmxhZ3MgPSBmcmFtZS1cdTAwM2VmbGFncztcbiA0MTU6XHRcdC8qXG4gNDE2Olx0XHQgKiBmcmFtZS1cdTAwM2VmbGFncyBuZXZlciBjYXJyaWVzIFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wgKGl0IGlzIHN0cmlwcGVkXG4gNDE3Olx0XHQgKiBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpKTsgcmUtZGVyaXZlIGl0IGZyb20gdGhlIGZyYW1lJiMzOTtzIG93blxuIDQxODpcdFx0ICogbWVtb3J5IHR5cGUuIHZldGggYW5kIGRldm1hcCByZWJ1aWxkIGEgYnVmZiBoZXJlIGFuZCBydW4gYSBwcm9ncmFtXG4gNDE5Olx0XHQgKiB3aG9zZSByeHEgc2F5cyBNRU1fVFlQRV9QQUdFX1NIQVJFRCwgc28gd2l0aG91dCB0aGlzIGEgc2hyaW5rIHdvdWxkXG4gNDIwOlx0XHQgKiBmcmVlIGEgcGFnZV9wb29sIGZyYWcgdGhyb3VnaCBwYWdlX2ZyYWdfZnJlZSgpLlxuIDQyMTpcdFx0ICovXG4gNDIyOlx0XHRpZiAoZnJhbWUtXHUwMDNlbWVtX3R5cGUgPT0gTUVNX1RZUEVfUEFHRV9QT09MKVxuIDQyMzpcdFx0XHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xuIDQyNDpcdH1cbiA0MjU6XHRcbiA0MjY6XHRzdGF0aWMgaW5saW5lXG4gNDI3Olx0aW50IHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKGNvbnN0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuIDQyODpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfZnJhbWUpXG4gNDI5Olx0e1xuIDQzMDpcdFx0aW50IG1ldGFzaXplLCBoZWFkcm9vbTtcbiA0MzE6XHRcbiA0MzI6XHRcdC8qIEFzc3VyZSBoZWFkcm9vbSBpcyBhdmFpbGFibGUgZm9yIHN0b3JpbmcgaW5mbyAqL1xuIDQzMzpcdFx0aGVhZHJvb20gPSB4ZHAtXHUwMDNlZGF0YSAtIHhkcC1cdTAwM2VkYXRhX2hhcmRfc3RhcnQ7XG4gNDM0Olx0XHRtZXRhc2l6ZSA9IHhkcC1cdTAwM2VkYXRhIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbiA0MzU6XHRcdG1ldGFzaXplID0gbWV0YXNpemUgXHUwMDNlIDAgPyBtZXRhc2l6ZSA6IDA7XG4gNDM2Olx0XHRpZiAodW5saWtlbHkoKGhlYWRyb29tIC0gbWV0YXNpemUpIFx1MDAzYyBzaXplb2YoKnhkcF9mcmFtZSkpKVxuIDQzNzpcdFx0XHRyZXR1cm4gLUVOT1NQQztcbiA0Mzg6XHRcbiA0Mzk6XHRcdC8qIENhdGNoIGlmIGRyaXZlciBkaWRuJiMzOTt0IHJlc2VydmUgdGFpbHJvb20gZm9yIHNrYl9zaGFyZWRfaW5mbyAqL1xuIDQ0MDpcdFx0aWYgKHVubGlrZWx5KHhkcC1cdTAwM2VkYXRhX2VuZCBcdTAwM2UgeGRwX2RhdGFfaGFyZF9lbmQoeGRwKSkpIHtcbiA0NDE6XHRcdFx0WERQX1dBUk4oXCYjMzQ7RHJpdmVyIEJVRzogbWlzc2luZyByZXNlcnZlZCB0YWlscm9vbVwmIzM0Oyk7XG4gNDQyOlx0XHRcdHJldHVybiAtRU5PU1BDO1xuIDQ0MzpcdFx0fVxuIDQ0NDpcdFxuIDQ0NTpcdFx0eGRwX2ZyYW1lLVx1MDAzZWRhdGEgPSB4ZHAtXHUwMDNlZGF0YTtcbiA0NDY6XHRcdHhkcF9mcmFtZS1cdTAwM2VsZW4gID0geGRwLVx1MDAzZWRhdGFfZW5kIC0geGRwLVx1MDAzZWRhdGE7XG4gNDQ3Olx0XHR4ZHBfZnJhbWUtXHUwMDNlaGVhZHJvb20gPSBoZWFkcm9vbSAtIHNpemVvZigqeGRwX2ZyYW1lKTtcbiA0NDg6XHRcdHhkcF9mcmFtZS1cdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xuIDQ0OTpcdFx0eGRwX2ZyYW1lLVx1MDAzZWZyYW1lX3N6ID0geGRwLVx1MDAzZWZyYW1lX3N6O1xuIDQ1MDpcdFx0LyogWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCBpcyB4ZHBfYnVmZiBvbmx5LCBkb24mIzM5O3QgY2FycnkgaXQgb3ZlciAqL1xuIDQ1MTpcdFx0eGRwX2ZyYW1lLVx1MDAzZWZsYWdzID0geGRwLVx1MDAzZWZsYWdzIFx1MDAyNiB+WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDtcbiA0NTI6XHRcbiA0NTM6XHRcdHJldHVybiAwO1xuIDQ1NDpcdH1cbiA0NTU6XHRcbiA0NTY6XHQvKiBDb252ZXJ0IHhkcF9idWZmIHRvIHhkcF9mcmFtZSAqL1xuIDQ1NzpcdHN0YXRpYyBpbmxpbmVcbiA0NTg6XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuIDQ1OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGJyaWRnZXMgdGhlIGdhcCBiZXR3ZWVuIHRoZSBYRFAgYnVmZmVyIGFuZCBhIG1vcmUgY29udmVudGlvbmFsIGZyYW1lIHJlcHJlc2VudGF0aW9uLiBXaGF0IGFyZSB0aGUga2V5IHRyYW5zZm9ybWF0aW9ucyBoYXBwZW5pbmc/IEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBjb25zaWRlcmF0aW9uczsgSSBrbm93IFhEUCBkZWFscyB3aXRoIHNoYXJlZCBtZW1vcnkgYW5kIGRpcmVjdCBwYWNrZXQgYWNjZXNzLCBzbyBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIGhhcyB0byBoYW5kbGUgYnVmZmVyIG93bmVyc2hpcCBjYXJlZnVsbHkuIElzIGl0IGNvcHlpbmcgZGF0YSwgY3JlYXRpbmcgdmlld3MsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIOKAkyB0aGUgWERQIGNvbnRleHQsIHRoZSBidWZmZXIgaXRzZWxmLCBhbmQgd2hhdGV2ZXIgZnJhbWUtbGV2ZWwgc3RydWN0dXJlIGlzIGJlaW5nIHJldHVybmVkIG9yIGNvbnN0cnVjdGVkLiBBcmUgd2UgZGVhbGluZyB3aXRoIGxpbmVhciBidWZmZXJzLCBvciBhcmUgdGhlcmUgcG90ZW50aWFsIGZyYWdtZW50ZWQgcGFja2V0cyB0byBjb25zaWRlcj8gQW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIGFsaWFzaW5nIG9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IGVmZmljaWVuY3kg4oCTIGFyZSB0aGVyZSBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMsIHBlcmhhcHMgdXNpbmcgaGFyZHdhcmUgb2ZmbG9hZCBvciB6ZXJvLWNvcHkgdGVjaG5pcXVlcz8gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZHAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDU4Olx0c3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiA0NTk6XHR7XG4gNDYwOlx0XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfZnJhbWU7XG4gNDYxOlx0XG4gNDYyOlx0XHRpZiAoeGRwLVx1MDAzZXJ4cS1cdTAwM2VtZW0udHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MKVxuIDQ2MzpcdFx0XHRyZXR1cm4geGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHhkcCk7XG4gNDY0Olx0XG4gNDY1Olx0XHQvKiBTdG9yZSBpbmZvIGluIHRvcCBvZiBwYWNrZXQgKi9cbiA0NjY6XHRcdHhkcF9mcmFtZSA9IHhkcC1cdTAwM2VkYXRhX2hhcmRfc3RhcnQ7XG4gNDY3Olx0XHRpZiAodW5saWtlbHkoeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoeGRwLCB4ZHBfZnJhbWUpIFx1MDAzYyAwKSlcbiA0Njg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNDY5Olx0XG4gNDcwOlx0XHQvKiByeHEgb25seSB2YWxpZCB1bnRpbCBuYXBpX3NjaGVkdWxlIGVuZHMsIGNvbnZlcnQgdG8geGRwX21lbV90eXBlICovXG4gNDcxOlx0XHR4ZHBfZnJhbWUtXHUwMDNlbWVtX3R5cGUgPSB4ZHAtXHUwMDNlcnhxLVx1MDAzZW1lbS50eXBlO1xuIDQ3MjpcdFxuIDQ3MzpcdFx0cmV0dXJuIHhkcF9mcmFtZTtcbiA0NzQ6XHR9XG4gNDc1Olx0XG4gNDc2Olx0dm9pZCBfX3hkcF9yZXR1cm4obmV0bWVtX3JlZiBuZXRtZW0sIGVudW0geGRwX21lbV90eXBlIG1lbV90eXBlLFxuIDQ3NzpcdFx0XHQgIGJvb2wgbmFwaV9kaXJlY3QsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKTtcbiA0Nzg6XHR2b2lkIHhkcF9yZXR1cm5fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZik7XG4gNDc5Olx0dm9pZCB4ZHBfcmV0dXJuX2ZyYW1lX3J4X25hcGkoc3RydWN0IHhkcF9mcmFtZSAqeGRwZik7XG4gNDgwOlx0dm9pZCB4ZHBfcmV0dXJuX2J1ZmYoc3RydWN0IHhkcF9idWZmICp4ZHApO1xuIDQ4MTpcdHZvaWQgeGRwX3JldHVybl9mcmFtZV9idWxrKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYsXG4gNDgyOlx0XHRcdFx0ICAgc3RydWN0IHhkcF9mcmFtZV9idWxrICpicSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODU2CgkJCQkJCQlvdXRwdXQ6IDIxNQoJCQkJCQkJdGhvdWdodHM6IDI3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYRFAgUGFnZSBQb29sIEZsYWcgQ2hhbmdlKioKCk9rYXksIHRoZSBwYXRoIGZvcndhcmQgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBoZXJlLiBXZSYjMzk7cmUgaW50cm9kdWNpbmcgYSBuZXcgaW50ZXJuYWwgZmxhZywgYFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0xgLCB0byB0aGUgYHhkcF9idWZmYCYjMzk7cyBmbGFncy4gVGhpcyB3aWxsIGxldCB1cyBzcGVjaWZpY2FsbHkgdHJhY2sgd2hlbiBub25saW5lYXIgc2ticyBoYXZlIGJlZW4gY29waWVkIGludG8gYSBgcGFnZV9wb29sYCBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIGB2ZXRoYCBhbmQgZ2VuZXJpYyBYRFAuIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyB3ZWxsLWRlZmluZWQ6IHdlJiMzOTtsbCBzZXQgdGhlIGZsYWcgd2hlbiB0aGUgY29weSBoYXBwZW5zLCBhbmQgc3RyaXAgb3IgcmUtZGVyaXZlIGl0IGR1cmluZyB0aGUgY29udmVyc2lvbnMgYmV0d2VlbiBgeGRwX2ZyYW1lYCBhbmQgYHhkcF9idWZmYC4KClRoZSBjcnVjaWFsIHBhcnQgaXMgaW4gYGJwZl94ZHBfc2hyaW5rX2RhdGFgLiBXZSYjMzk7bGwgdXNlIHRoZSBmbGFnIHRoZXJlIHRvIGVuc3VyZSB0aGF0IHdoZW4gd2Ugc2hyaW5rIGZyYWdtZW50cywgd2UmIzM5O3JlIHJldHVybmluZyB0aGVtIHRvIHRoZSBgcGFnZV9wb29sYCBjb3JyZWN0bHkgaW5zdGVhZCBvZiB1c2luZyBgcGFnZV9mcmFnX2ZyZWUoKWAuIEJQRiBzZWxmdGVzdHMgYXJlIGEgbXVzdCwgb2YgY291cnNlLgoKVGhlIHJpc2sgYW5hbHlzaXMgaXMgd2hhdCBtYXR0ZXJzIHRoZSBtb3N0LiBUaGVyZSYjMzk7cyBubyBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLCBubyBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRvIHVzZXJzcGFjZSwgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBidWZmZXJzLCBhbmQgbm8gbWFuaXB1bGF0aW9uIG9mIGxlbmd0aCBjaGVja3MgdGhhdCB3b3VsZCBhbGxvdyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJlIGdvaW5nIHRvIGZhbGwgaW50byB0aGUgd2VsbC10cm9kZGVuIHRlcnJpdG9yeSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggaXMgY292ZXJlZCBieSBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBjaGVja3MsIHNvIHRoZSBuZWVkIGZvciBLTVNBTiBpcyBtaW5pbWFsLgoKVGh1cywgYE5lZWRzS01TQU5gIGlzIHVuZXF1aXZvY2FsbHkgYGZhbHNlYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSByZWFzb25pbmcgb25lIGxhc3QgdGltZS4gVGltZSB0byBmaXJlIHVwIGBzZXQtcmVzdWx0c2AgYW5kIHByb3ZpZGUgYSBjbGVhciwgY29uY2lzZSBqdXN0aWZpY2F0aW9uIGZvciB0aGlzIGRlY2lzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHRoZSBpbnRlcm5hbCBmbGFnIGBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MYCB0byBgeGRwX2J1ZmZgIHRvIHRyYWNrIHdoZXRoZXIgbm9ubGluZWFyIHNrYiBmcmFnbWVudHMgd2VyZSBDT1cmIzM5O2QgaW50byBhIGBwYWdlX3Bvb2xgLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGFuIFhEUCBwcm9ncmFtIHNocmlua3MgdGhlIGJ1ZmZlciBhbmQgcmVsZWFzZXMgZnJhZ21lbnRzLCB0aGV5IGFyZSBwcm9wZXJseSBmcmVlZCBiYWNrIHRvIHRoZSBwYWdlIHBvb2wgcmF0aGVyIHRoYW4gdGhyb3VnaCBgcGFnZV9mcmFnX2ZyZWUoKWAuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBhZ2UgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBhbGxvY2F0b3IgdHlwZSBtaXNtYXRjaCBidWcgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIHBhZ2UgcG9vbCBsZWFrcywgYmFkIHBhZ2Ugc3RhdGUsIG9yIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVzZXItc3BhY2UgY29weSBwYXRocy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgaW52YWxpZCBtZW1vcnkgZnJlZSkgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBwYWdlL3JlZmNvdW50IGRlYnVnZ2Vycywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHRoZSBpbnRlcm5hbCBmbGFnIGBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MYCB0byBgeGRwX2J1ZmZgIHRvIHRyYWNrIHdoZXRoZXIgbm9ubGluZWFyIHNrYiBmcmFnbWVudHMgd2VyZSBDT1cmIzM5O2QgaW50byBhIGBwYWdlX3Bvb2xgLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGFuIFhEUCBwcm9ncmFtIHNocmlua3MgdGhlIGJ1ZmZlciBhbmQgcmVsZWFzZXMgZnJhZ21lbnRzLCB0aGV5IGFyZSBwcm9wZXJseSBmcmVlZCBiYWNrIHRvIHRoZSBwYWdlIHBvb2wgcmF0aGVyIHRoYW4gdGhyb3VnaCBgcGFnZV9mcmFnX2ZyZWUoKWAuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBhZ2UgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBhbGxvY2F0b3IgdHlwZSBtaXNtYXRjaCBidWcgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIHBhZ2UgcG9vbCBsZWFrcywgYmFkIHBhZ2Ugc3RhdGUsIG9yIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVzZXItc3BhY2UgY29weSBwYXRocy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgaW52YWxpZCBtZW1vcnkgZnJlZSkgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBwYWdlL3JlZmNvdW50IGRlYnVnZ2Vycywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ1OjM4LjQ3MTY1ODcwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzA0NTI4MzE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJWRVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gICAgXCJicGZfeGRwX2FkanVzdF90YWlsXCIsXG4gICAgXCJicGZfeGRwX3B1bGxfZGF0YVwiLFxuICAgIFwiYnBmX3hkcF9zaHJpbmtfZGF0YVwiLFxuICAgIFwidmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZlwiLFxuICAgIFwidmV0aF94ZHBfcmN2X3NrYlwiLFxuICAgIFwidmV0aF94ZHBfcmN2X29uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB0aGUgaW50ZXJuYWwgZmxhZyBgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTGAgdG8gYHhkcF9idWZmYCB0byB0cmFjayB3aGV0aGVyIG5vbmxpbmVhciBza2IgZnJhZ21lbnRzIHdlcmUgQ09XJ2QgaW50byBhIGBwYWdlX3Bvb2xgLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGFuIFhEUCBwcm9ncmFtIHNocmlua3MgdGhlIGJ1ZmZlciBhbmQgcmVsZWFzZXMgZnJhZ21lbnRzLCB0aGV5IGFyZSBwcm9wZXJseSBmcmVlZCBiYWNrIHRvIHRoZSBwYWdlIHBvb2wgcmF0aGVyIHRoYW4gdGhyb3VnaCBgcGFnZV9mcmFnX2ZyZWUoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcGFnZSBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIGFsbG9jYXRvciB0eXBlIG1pc21hdGNoIGJ1ZyAod2hpY2ggd291bGQgbWFuaWZlc3QgYXMgcGFnZSBwb29sIGxlYWtzLCBiYWQgcGFnZSBzdGF0ZSwgb3IgcGFnZSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgcGFkZGluZyBsZWFrcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBmcmVlKSBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UvcmVmY291bnQgZGVidWdnZXJzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBYRFAgZnJhZ21lbnQgaGFuZGxpbmcgbG9naWMgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgZ2VuZXJpYyBYRFAsIGFuZCB0aGUgdmV0aCBkcml2ZXIgdG8gcHJvcGVybHkgdHJhY2sgcGFnZV9wb29sIGJhY2tlZCBmcmFnbWVudHMgd2hlbiBzaHJpbmtpbmcgWERQIGJ1ZmZlcnMuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyAodmV0aCwgdHVuL3RhcCkgYW5kIEJQRi9YRFAgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ1OjM4LjQ3MTY2NzA3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MjM3MDEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA0NjQyZjIxZjE4MDE2MGU1MzQ2Mzk2YWU2OGQ2MGMzMjkzZTgzMDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTQ6NDU6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jXFxuaW5kZXggNmVkM2VlODExNTNmYi4uYTNmZGYxOTU5Yjc2YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC92ZXRoLmNcXG4rKysgYi9kcml2ZXJzL25ldC92ZXRoLmNcXG5AQCAtNzc1LDYgKzc3NSwxMiBAQCBzdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxcbiBcXHRpZiAoc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncykge1xcbiBcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZXhkcF9mcmFnc19zaXplID0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4gXFx0XFx0eGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQSBub25saW5lYXIgc2tiIHdhcyBjb3cnZCBpbnRvIHJxLVxcdTAwM2VwYWdlX3Bvb2wgYWJvdmUsIHNvIHRoZVxcbitcXHRcXHQgKiBmcmFncyBtdXN0IGJlIGZyZWVkIHRvIHRoYXQgcG9vbCwgbm90IHZpYSB0aGUgcnhxJ3NcXG4rXFx0XFx0ICogTUVNX1RZUEVfUEFHRV9TSEFSRUQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR4ZHBfYnVmZl9jbGVhcl9mcmFnc19mbGFnKHhkcCk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGRwLmggYi9pbmNsdWRlL25ldC94ZHAuaFxcbmluZGV4IGFhNzQyZjQxM2MzNTguLjhmZDQxMzllOWNiZDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQveGRwLmhcXG4rKysgYi9pbmNsdWRlL25ldC94ZHAuaFxcbkBAIC04MSw2ICs4MSwxNCBAQCBlbnVtIHhkcF9idWZmX2ZsYWdzIHtcXG4gXFx0ICogWERQIHByb2dyYW0gaXMgbm90IGF0dGFjaGVkLlxcbiBcXHQgKi9cXG4gXFx0WERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEVcXHQ9IEJJVCgyKSxcXG4rXFx0LypcXG4rXFx0ICogZnJhZ3MgYXJlIHBhZ2VfcG9vbCBtZW1vcnkgZXZlbiB0aG91Z2ggcnhxLVxcdTAwM2VtZW0udHlwZSBpcyBub3Q6IGFcXG4rXFx0ICogc2tiLWJhY2tlZCBYRFAgYnVmZiAoZ2VuZXJpYyBYRFAsIHZldGgpIGlzIGNvdydkIGludG8gYSBwYWdlX3Bvb2wuXFxuK1xcdCAqIHhkcF9idWZmIG9ubHk6IGFuIHhkcF9mcmFtZSBkZXNjcmliZXMgaXRzIG1lbW9yeSB3aXRoIDo6bWVtX3R5cGUsIHNvXFxuK1xcdCAqIHRoaXMgaXMgc3RyaXBwZWQgaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSBhbmQgcmUtZGVyaXZlZCBmcm9tXFxuK1xcdCAqIDo6bWVtX3R5cGUgaW4geGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZigpLlxcbitcXHQgKi9cXG4rXFx0WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTFxcdD0gQklUKDMpLFxcbiB9O1xcbiBcXG4gc3RydWN0IHhkcF9idWZmIHtcXG5AQCAtMTMxLDYgKzEzOSwxNiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgeGRwX2J1ZmZfc2V0X2ZyYWdfdW5yZWFkYWJsZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4gXFx0eGRwLVxcdTAwM2VmbGFncyB8PSBYRFBfRkxBR1NfRlJBR1NfVU5SRUFEQUJMRTtcXG4gfVxcbiBcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHhkcF9idWZmX3NldF9mcmFnX3BwKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbit7XFxuK1xcdHhkcC1cXHUwMDNlZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHhkcF9idWZmX2lzX2ZyYWdfcHAoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuK3tcXG4rXFx0cmV0dXJuICEhKHhkcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MKTtcXG4rfVxcbitcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgeGRwX2J1ZmZfZ2V0X3NrYl9mbGFncyhjb25zdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4ge1xcbiBcXHRyZXR1cm4geGRwLVxcdTAwM2VmbGFncztcXG5AQCAtMzk0LDYgKzQxMiwxNSBAQCB2b2lkIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUsXFxuIFxcdHhkcC1cXHUwMDNlZGF0YV9tZXRhID0gZnJhbWUtXFx1MDAzZWRhdGEgLSBmcmFtZS1cXHUwMDNlbWV0YXNpemU7XFxuIFxcdHhkcC1cXHUwMDNlZnJhbWVfc3ogPSBmcmFtZS1cXHUwMDNlZnJhbWVfc3o7XFxuIFxcdHhkcC1cXHUwMDNlZmxhZ3MgPSBmcmFtZS1cXHUwMDNlZmxhZ3M7XFxuK1xcdC8qXFxuK1xcdCAqIGZyYW1lLVxcdTAwM2VmbGFncyBuZXZlciBjYXJyaWVzIFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wgKGl0IGlzIHN0cmlwcGVkXFxuK1xcdCAqIGluIHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKCkpOyByZS1kZXJpdmUgaXQgZnJvbSB0aGUgZnJhbWUncyBvd25cXG4rXFx0ICogbWVtb3J5IHR5cGUuIHZldGggYW5kIGRldm1hcCByZWJ1aWxkIGEgYnVmZiBoZXJlIGFuZCBydW4gYSBwcm9ncmFtXFxuK1xcdCAqIHdob3NlIHJ4cSBzYXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyB3aXRob3V0IHRoaXMgYSBzaHJpbmsgd291bGRcXG4rXFx0ICogZnJlZSBhIHBhZ2VfcG9vbCBmcmFnIHRocm91Z2ggcGFnZV9mcmFnX2ZyZWUoKS5cXG4rXFx0ICovXFxuK1xcdGlmIChmcmFtZS1cXHUwMDNlbWVtX3R5cGUgPT0gTUVNX1RZUEVfUEFHRV9QT09MKVxcbitcXHRcXHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuQEAgLTQyMCw3ICs0NDcsOCBAQCBpbnQgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuIFxcdHhkcF9mcmFtZS1cXHUwMDNlaGVhZHJvb20gPSBoZWFkcm9vbSAtIHNpemVvZigqeGRwX2ZyYW1lKTtcXG4gXFx0eGRwX2ZyYW1lLVxcdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xcbiBcXHR4ZHBfZnJhbWUtXFx1MDAzZWZyYW1lX3N6ID0geGRwLVxcdTAwM2VmcmFtZV9zejtcXG4tXFx0eGRwX2ZyYW1lLVxcdTAwM2VmbGFncyA9IHhkcC1cXHUwMDNlZmxhZ3M7XFxuK1xcdC8qIFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wgaXMgeGRwX2J1ZmYgb25seSwgZG9uJ3QgY2FycnkgaXQgb3ZlciAqL1xcbitcXHR4ZHBfZnJhbWUtXFx1MDAzZWZsYWdzID0geGRwLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5YRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDI5MGUwZjA5OWU2YmYuLjk0MjY4ZjRkM2M1ZjcgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC01NTMyLDYgKzU1MzIsMTIgQEAgdTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4gXFx0aWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkge1xcbiBcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZXhkcF9mcmFnc19zaXplID0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4gXFx0XFx0eGRwX2J1ZmZfc2V0X2ZyYWdzX2ZsYWcoeGRwKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQSBub25saW5lYXIgc2tiIHdhcyBjb3cnZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYnlcXG4rXFx0XFx0ICogc2tiX2Nvd19kYXRhX2Zvcl94ZHAoKSBiZWZvcmUgd2UgZ290IGhlcmUsIHNvIHRoZSBmcmFncyBtdXN0XFxuK1xcdFxcdCAqIGJlIGZyZWVkIHRvIHRoYXQgcG9vbCwgbm90IHZpYSB0aGUgcnhxJ3MgTUVNX1RZUEVfUEFHRV9TSEFSRUQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR4ZHBfYnVmZl9jbGVhcl9mcmFnc19mbGFnKHhkcCk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLmQzNGJhNTZkNzlkOGYgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC00Mzc4LDYgKzQzNzgsMTMgQEAgc3RhdGljIGJvb2wgYnBmX3hkcF9zaHJpbmtfZGF0YShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc2tiX2ZyYWdfdCAqZnJhZyxcXG4gXFx0aWYgKG1lbV90eXBlID09IE1FTV9UWVBFX1hTS19CVUZGX1BPT0wpIHtcXG4gXFx0XFx0bmV0bWVtID0gMDtcXG4gXFx0XFx0emNfZnJhZyA9IGJwZl94ZHBfc2hyaW5rX2RhdGFfemMoeGRwLCBzaHJpbmssIHRhaWwsIHJlbGVhc2UpO1xcbitcXHR9IGVsc2UgaWYgKHhkcF9idWZmX2lzX2ZyYWdfcHAoeGRwKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBTa2ItYmFja2VkIFhEUCAoZ2VuZXJpYyBYRFAsIHZldGgpIGNvdydzIHRoZSBmcmFncyBpbnRvIGFcXG4rXFx0XFx0ICogcGFnZV9wb29sIHdoaWxlIHRoZSByeHEgc3RheXMgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIHNvIGZyZWVcXG4rXFx0XFx0ICogdGhlIGZyYWcgdG8gdGhlIHBvb2wsIG5vdCB2aWEgcGFnZV9mcmFnX2ZyZWUoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG1lbV90eXBlID0gTUVNX1RZUEVfUEFHRV9QT09MO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAocmVsZWFzZSkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfc2hyaW5rX2ZyYWdzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfc2hyaW5rX2ZyYWdzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmVlOGY5MDM0YTI2ODRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXFxuQEAgLTAsMCArMSwyODggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldHdvcmtfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdHVuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3Vpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2lmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhcnBhL2luZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcInhkcF9zaHJpbmtfZnJhZ3Muc2tlbC5oXFxcIlxcbitcXG4rLypcXG4rICogQSBnZW5lcmljLVhEUCBwcm9ncmFtIHRoYXQgc2hyaW5rcyBpbnRvIHRoZSBmcmFncyBmcmVlcyBhIHBhZ2VfcG9vbCBmcmFnLlxcbisgKiBza2ItYmFja2VkIFhEUCBmaXJzdCBjb3cncyB0aGUgbm9ubGluZWFyIHNrYiBpbnRvIHBhZ2VfcG9vbCBtZW1vcnlcXG4rICogKHNrYl9jb3dfZGF0YV9mb3JfeGRwKCkgZm9yIGdlbmVyaWMgWERQLCBza2JfcHBfY293X2RhdGEoKSBmb3IgdmV0aCksIGJ1dFxcbisgKiB0aGUgc2hhcmVkIHJ4cSBpcyByZWdpc3RlcmVkIGFzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBhIGJ1Z2d5IGtlcm5lbFxcbisgKiBmcmVlcyB0aGUgZnJhZyB3aXRoIHBhZ2VfZnJhZ19mcmVlKCkgLVxcdTAwM2UgXFxcIkJhZCBwYWdlIHN0YXRlIC4uLiBwYWdlX3Bvb2wgbGVha1xcXCIuXFxuKyAqL1xcbitcXG4rI2RlZmluZSBUQVBfTkFNRVxcdFxcXCJ4ZHBfc2hyaW5rMFxcXCJcXG4rI2RlZmluZSBUQVBfTkVUTlNcXHRcXFwieGRwX3Nocmlua190YXBcXFwiXFxuK1xcbisjZGVmaW5lIE5TX05BTUVfTUFYX0xFTlxcdDMyXFxuKyNkZWZpbmUgVkVUSF9MT0NBTFxcdFxcXCJ4ZHBfc2hyaW5rQVxcXCJcXG4rI2RlZmluZSBWRVRIX1BFRVJcXHRcXFwieGRwX3Nocmlua0JcXFwiXFxuKyNkZWZpbmUgVkVUSF9MT0NBTF9JUFxcdFxcXCIxMC45LjkuMVxcXCJcXG4rI2RlZmluZSBWRVRIX1BFRVJfSVBcXHRcXFwiMTAuOS45LjJcXFwiXFxuKyNkZWZpbmUgVkVUSF9MT0NBTF9NQUNcXHRcXFwiMDI6MDA6MDA6MDA6MDA6MDFcXFwiXFxuK1xcbisvKlxcbisgKiBza2JfcHBfY293X2RhdGEoKSBrZWVwcyB1cCB0byBvbmUgcGFnZSBpbiB0aGUgbGluZWFyIHBhcnQsIHNvIHRoZSBwYWNrZXRcXG4rICogc2l6ZXMgYmVsb3cgb25seSBsZWF2ZSBhIGZyYWcgKHNtYWxsZXIgdGhhbiB0aGUgMzAwMC1ieXRlIHNocmluaywgc28gaXQgaXNcXG4rICogcmVsZWFzZWQgYXMgYSB3aG9sZSkgb24gNEsgcGFnZXMuIFNraXAgZWxzZXdoZXJlIHJhdGhlciB0aGFuIHJ1biBhIHRlc3RcXG4rICogdGhhdCBjYW5ub3QgdGVsbCBhIGZpeGVkIGtlcm5lbCBmcm9tIGEgYnVnZ3kgb25lLlxcbisgKi9cXG4rI2RlZmluZSBQQUdFX1NJWkVfNEtcXHQ0MDk2XFxuK1xcbisvKlxcbisgKiBHZW5lcm91cywgc28gYSBsb2FkZWQgQ0kgZG9lcyBub3QgZmFpbCB0aGUgYXNzZXJ0IHByZW1hdHVyZWx5OyBub3JtYWxseVxcbisgKiB0aGUgZmlyc3QgY2hlY2sgYWxyZWFkeSBzdWNjZWVkcy5cXG4rICovXFxuKyNkZWZpbmUgV0FJVF9JVEVSU1xcdDEwMDAwXFxuKyNkZWZpbmUgV0FJVF9VU1xcdFxcdDEwMDBcXG4rXFxuK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3Byb2coc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgV0FJVF9JVEVSUyBcXHUwMDI2XFx1MDAyNiAhc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzaHJpbmtfcmFuOyBpKyspXFxuK1xcdFxcdHVzbGVlcChXQUlUX1VTKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoY29uc3QgY2hhciAqaWZuYW1lKVxcbit7XFxuK1xcdHN0cnVjdCBpZnJlcSBpZnIgPSB7XFxuK1xcdFxcdC5pZnJfZmxhZ3MgPSBJRkZfVEFQIHwgSUZGX05PX1BJIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUyxcXG4rXFx0fTtcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcbitcXHRzdHJzY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTtcXG4rXFxuK1xcdGZkID0gb3BlbihcXFwiL2Rldi9uZXQvdHVuXFxcIiwgT19SRFdSKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdGVyciA9IGlvY3RsKGZkLCBUVU5TRVRJRkYsIFxcdTAwMjZpZnIpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGVyciA9IC1lcnJubztcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFNpbWlsYXIgdG8gZmxvd19kaXNzZWN0b3IuYzogd3JpdGV2KCkgYW4gSUZGX05BUElfRlJBR1MgdGFwIHRvIGJ1aWxkIGFcXG4rICogbm9ubGluZWFyIHNrYiB0aGF0IHR1biBydW5zIHRocm91Z2ggZG9feGRwX2dlbmVyaWMoKS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHRlc3RfdHVuKHN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsKVxcbit7XFxuK1xcdF9fdTggaGVhZFs3NF0sIGZyYWcxWzIwNDhdLCBmcmFnMlsyMDQ4XTtcXG4rXFx0c3RydWN0IGV0aGhkciAqZXRoID0gKHZvaWQgKiloZWFkO1xcbitcXHRpbnQgdGFwX2ZkID0gLTEsIGlmaW5kZXgsIGVycjtcXG4rXFx0c3RydWN0IG5ldG5zX29iaiAqbnMgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgaW92ZWMgaW92WzNdO1xcbitcXHRzc2l6ZV90IG47XFxuK1xcbitcXHRpZiAoZ2V0cGFnZXNpemUoKSAhPSBQQUdFX1NJWkVfNEspIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdG5zID0gbmV0bnNfbmV3KFRBUF9ORVROUywgdHJ1ZSk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihucywgXFxcIm5ldG5zX25ld1xcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0YXBfZmQgPSBjcmVhdGVfdGFwX25hcGlfZnJhZ3MoVEFQX05BTUUpO1xcbitcXHRpZiAoIUFTU0VSVF9HRSh0YXBfZmQsIDAsIFxcXCJjcmVhdGVfdGFwXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0U1lTKG91dCwgXFxcImlwIGxpbmsgc2V0IGRldiBcXFwiIFRBUF9OQU1FIFxcXCIgdXBcXFwiKTtcXG4rXFxuK1xcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChUQVBfTkFNRSk7XFxuK1xcdGlmICghQVNTRVJUX0dUKGlmaW5kZXgsIDAsIFxcXCJpZl9uYW1ldG9pbmRleFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlc2hyaW5rX3JhbiA9IDA7XFxuK1xcbitcXHRlcnIgPSBicGZfeGRwX2F0dGFjaChpZmluZGV4LCBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MueGRwX3NocmluayksXFxuK1xcdFxcdFxcdCAgICAgMCwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJwZl94ZHBfYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bWVtc2V0KGhlYWQsIDAsIHNpemVvZihoZWFkKSk7XFxuK1xcdG1lbXNldChmcmFnMSwgMHg0MSwgc2l6ZW9mKGZyYWcxKSk7XFxuK1xcdG1lbXNldChmcmFnMiwgMHg0Miwgc2l6ZW9mKGZyYWcyKSk7XFxuK1xcdGV0aC1cXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTtcXG4rXFxuK1xcdGlvdlswXS5pb3ZfYmFzZSA9IGhlYWQ7ICBpb3ZbMF0uaW92X2xlbiA9IHNpemVvZihoZWFkKTtcXG4rXFx0aW92WzFdLmlvdl9iYXNlID0gZnJhZzE7IGlvdlsxXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcxKTtcXG4rXFx0aW92WzJdLmlvdl9iYXNlID0gZnJhZzI7IGlvdlsyXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcyKTtcXG4rXFxuK1xcdG4gPSB3cml0ZXYodGFwX2ZkLCBpb3YsIEFSUkFZX1NJWkUoaW92KSk7XFxuK1xcdEFTU0VSVF9FUShuLCBzaXplb2YoaGVhZCkgKyBzaXplb2YoZnJhZzEpICsgc2l6ZW9mKGZyYWcyKSwgXFxcIndyaXRldlxcXCIpO1xcbitcXG4rXFx0d2FpdF9mb3JfcHJvZyhza2VsKTtcXG4rXFx0LyogYSBidWdneSBrZXJuZWwgb25seSBzcGxhdHMgXFxcInBhZ2VfcG9vbCBsZWFrXFxcIiwgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovXFxuK1xcdEFTU0VSVF9HVChza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXNocmlua19yYW4sIDAsIFxcXCJ4ZHBfcHJvZ19yYW5cXFwiKTtcXG4rXFxuK1xcdGJwZl94ZHBfZGV0YWNoKGlmaW5kZXgsIDAsIE5VTEwpO1xcbitvdXQ6XFxuK1xcdGlmICh0YXBfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UodGFwX2ZkKTtcXG4rXFx0bmV0bnNfZnJlZShucyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEJvdGggdmV0aCBlbmRzIGxpdmUgaW4gdGhlaXIgb3duIG5hbWVzcGFjZSwgc28gdGhlIHRyYWZmaWMgcmVhbGx5IGNyb3NzZXNcXG4rICogdGhlIHBhaXIgYW5kIG5vdGhpbmcgaXMgY3JlYXRlZCBpbiB0aGUgY2FsbGVyJ3MgbmFtZXNwYWNlLlxcbisgKi9cXG4rc3RhdGljIGludCB2ZXRoX3NldHVwKGNoYXIgKm5zMCwgY2hhciAqbnMxKVxcbit7XFxuK1xcdGlmICghQVNTRVJUX09LKGFwcGVuZF90aWQobnMwLCBOU19OQU1FX01BWF9MRU4pLCBcXFwiYXBwZW5kX3RpZCBuczBcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhhcHBlbmRfdGlkKG5zMSwgTlNfTkFNRV9NQVhfTEVOKSwgXFxcImFwcGVuZF90aWQgbnMxXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgbnMwKTtcXG4rXFx0U1lTKGZhaWxfbnMwLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgbnMxKTtcXG4rXFx0U1lTKGZhaWxfbnMxLCBcXFwiaXAgLW4gJXMgbGluayBhZGQgJXMgbXR1IDgwMDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlcyBtdHUgODAwMFxcXCIsXFxuK1xcdCAgICBuczAsIFZFVEhfTE9DQUwsIFZFVEhfUEVFUik7XFxuK1xcdFNZUyhmYWlsX25zMSwgXFxcImlwIC1uICVzIGxpbmsgc2V0ICVzIG5ldG5zICVzXFxcIiwgbnMwLCBWRVRIX1BFRVIsIG5zMSk7XFxuK1xcdFNZUyhmYWlsX25zMSwgXFxcImlwIC1uICVzIGxpbmsgc2V0ICVzIGFkZHJlc3MgJXNcXFwiLCBuczAsIFZFVEhfTE9DQUwsXFxuK1xcdCAgICBWRVRIX0xPQ0FMX01BQyk7XFxuK1xcdFNZUyhmYWlsX25zMSwgXFxcImlwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlc1xcXCIsIG5zMCwgVkVUSF9MT0NBTF9JUCxcXG4rXFx0ICAgIFZFVEhfTE9DQUwpO1xcbitcXHRTWVMoZmFpbF9uczEsIFxcXCJpcCAtbiAlcyBsaW5rIHNldCAlcyB1cFxcXCIsIG5zMCwgVkVUSF9MT0NBTCk7XFxuK1xcdFNZUyhmYWlsX25zMSwgXFxcImlwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlc1xcXCIsIG5zMSwgVkVUSF9QRUVSX0lQLFxcbitcXHQgICAgVkVUSF9QRUVSKTtcXG4rXFx0U1lTKGZhaWxfbnMxLCBcXFwiaXAgLW4gJXMgbGluayBzZXQgJXMgdXBcXFwiLCBuczEsIFZFVEhfUEVFUik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2ZhaWxfbnMxOlxcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgJXNcXFwiLCBuczEpO1xcbitmYWlsX25zMDpcXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzXFxcIiwgbnMwKTtcXG4rZmFpbDpcXG4rXFx0cmV0dXJuIC0xO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB2ZXRoX2NsZWFudXAoY29uc3QgY2hhciAqbnMwLCBjb25zdCBjaGFyICpuczEpXFxuK3tcXG4rXFx0LyogRHJvcHBpbmcgdGhlIG5hbWVzcGFjZXMgdGFrZXMgdGhlIHZldGggcGFpciBhbmQgaXRzIFhEUCBwcm9ncmFtcy4gKi9cXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzXFxcIiwgbnMxKTtcXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzXFxcIiwgbnMwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZXRoX2F0dGFjaChjb25zdCBjaGFyICpucywgY29uc3QgY2hhciAqZGV2LCBpbnQgcHJvZ19mZClcXG4re1xcbitcXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbjtcXG4rXFx0aW50IGlmaW5kZXgsIGVycjtcXG4rXFxuK1xcdG5zdG9rZW4gPSBvcGVuX25ldG5zKG5zKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuX25ldG5zXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChkZXYpO1xcbitcXHRpZiAoIUFTU0VSVF9HVChpZmluZGV4LCAwLCBcXFwiaWZfbmFtZXRvaW5kZXhcXFwiKSkge1xcbitcXHRcXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBicGZfeGRwX2F0dGFjaChpZmluZGV4LCBwcm9nX2ZkLCAwLCBOVUxMKTtcXG4rXFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuK1xcbitcXHRyZXR1cm4gQVNTRVJUX09LKGVyciwgXFxcImJwZl94ZHBfYXR0YWNoXFxcIikgPyAwIDogLTE7XFxuK31cXG4rXFxuKy8qIEEgbGFyZ2UgcGluZyBidWlsZHMgYSBub25saW5lYXIgc2tiIHRoYXQgdmV0aCBjb3cncyBpbnRvIGl0cyBwYWdlX3Bvb2wuICovXFxuK3N0YXRpYyB2b2lkIHRlc3RfdmV0aChzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbClcXG4re1xcbitcXHRjaGFyIG5zMFtOU19OQU1FX01BWF9MRU5dID0gXFxcInhkcF9zaHJpbmtfbnMwLVxcXCI7XFxuK1xcdGNoYXIgbnMxW05TX05BTUVfTUFYX0xFTl0gPSBcXFwieGRwX3Nocmlua19uczEtXFxcIjtcXG4rXFxuK1xcdGlmIChnZXRwYWdlc2l6ZSgpICE9IFBBR0VfU0laRV80Sykge1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZldGhfc2V0dXAobnMwLCBuczEpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXNocmlua19yYW4gPSAwO1xcbitcXG4rXFx0aWYgKHZldGhfYXR0YWNoKG5zMCwgVkVUSF9MT0NBTCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLnhkcF9zaHJpbmspKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXNcXFwiLFxcbitcXHRcXHQgICBuczEsIFZFVEhfTE9DQUxfSVApO1xcbitcXG4rXFx0d2FpdF9mb3JfcHJvZyhza2VsKTtcXG4rXFx0LyogYSBidWdneSBrZXJuZWwgb25seSBzcGxhdHMgXFxcInBhZ2VfcG9vbCBsZWFrXFxcIiwgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovXFxuK1xcdEFTU0VSVF9HVChza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXNocmlua19yYW4sIDAsIFxcXCJ4ZHBfcHJvZ19yYW5cXFwiKTtcXG4rb3V0OlxcbitcXHR2ZXRoX2NsZWFudXAobnMwLCBuczEpO1xcbit9XFxuK1xcbisvKlxcbisgKiBMT0NBTCBjb3cncyB0aGUgaW5jb21pbmcgc2tiIGFuZCByZXR1cm5zIFhEUF9UWCwgc28gdGhlIGJ1ZmYgaXMgdHVybmVkIGludG9cXG4rICogYW4geGRwX2ZyYW1lIGFuZCBib3VuY2VkIHRvIFBFRVIsIHdoaWNoIHNocmlua3MgYSBmcmFnLiBBIHBhZ2VfcG9vbCB0YWdcXG4rICogcmVjb3JkZWQgb24gdGhlIGJ1ZmYgbXVzdCBub3QgbGVhayBpbnRvIHRoZSBmcmFtZSwgb3IgUEVFUiBmcmVlcyBhIHBsYWluXFxuKyAqIHBhZ2UgKHdob3NlIHBwIHdhcyBhbHJlYWR5IGNsZWFyZWQgb24gdGhlIFhEUF9UWCBzaWRlKSBhcyBwYWdlX3Bvb2wgbWVtb3J5LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdF92ZXRoX3R4KHN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsKVxcbit7XFxuK1xcdGNoYXIgbnMwW05TX05BTUVfTUFYX0xFTl0gPSBcXFwieGRwX3Nocmlua190eDAtXFxcIjtcXG4rXFx0Y2hhciBuczFbTlNfTkFNRV9NQVhfTEVOXSA9IFxcXCJ4ZHBfc2hyaW5rX3R4MS1cXFwiO1xcbitcXG4rXFx0aWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodmV0aF9zZXR1cChuczAsIG5zMSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIExPQ0FMIGJvdW5jZXMgZXZlcnl0aGluZyAoaW5jbC4gQVJQKSB3aXRoIFhEUF9UWCwgc28gcGluIGEgc3RhdGljXFxuK1xcdCAqIG5laWdoYm91ciB0byBsZXQgdGhlIHBpbmcncyBwYXlsb2FkIGFjdHVhbGx5IHJlYWNoIGl0LlxcbitcXHQgKi9cXG4rXFx0U1lTKG91dCwgXFxcImlwIC1uICVzIG5laWdoIGFkZCAlcyBsbGFkZHIgJXMgZGV2ICVzIG51ZCBwZXJtYW5lbnRcXFwiLFxcbitcXHQgICAgbnMxLCBWRVRIX0xPQ0FMX0lQLCBWRVRIX0xPQ0FMX01BQywgVkVUSF9QRUVSKTtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlc2hyaW5rX3JhbiA9IDA7XFxuK1xcbitcXHRpZiAodmV0aF9hdHRhY2gobnMwLCBWRVRIX0xPQ0FMLCBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MueGRwX3R4KSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAodmV0aF9hdHRhY2gobnMxLCBWRVRIX1BFRVIsIGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy54ZHBfc2hyaW5rKSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZXhlYyAlcyBwaW5nIC1xIC1zIDUwMDAgLWMgMyAtVyAxICVzXFxcIixcXG4rXFx0XFx0ICAgbnMxLCBWRVRIX0xPQ0FMX0lQKTtcXG4rXFxuK1xcdHdhaXRfZm9yX3Byb2coc2tlbCk7XFxuK1xcdC8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzIFxcXCJwYWdlX3Bvb2wgbGVha1xcXCIsIGl0IGRvZXMgbm90IGZhaWwgaGVyZSAqL1xcbitcXHRBU1NFUlRfR1Qoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzaHJpbmtfcmFuLCAwLCBcXFwieGRwX3Byb2dfcmFuXFxcIik7XFxuK291dDpcXG4rXFx0dmV0aF9jbGVhbnVwKG5zMCwgbnMxKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3hkcF9zaHJpbmtfZnJhZ3Modm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbDtcXG4rXFxuK1xcdHNrZWwgPSB4ZHBfc2hyaW5rX2ZyYWdzX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInR1blxcXCIpKVxcbitcXHRcXHR0ZXN0X3R1bihza2VsKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInZldGhcXFwiKSlcXG4rXFx0XFx0dGVzdF92ZXRoKHNrZWwpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidmV0aF90eFxcXCIpKVxcbitcXHRcXHR0ZXN0X3ZldGhfdHgoc2tlbCk7XFxuK1xcbitcXHR4ZHBfc2hyaW5rX2ZyYWdzX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3Nocmlua19mcmFncy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZDg5NWFiNjk5MzAzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmNcXG5AQCAtMCwwICsxLDM0IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuK2ludCBzaHJpbmtfcmFuO1xcbitcXG4rU0VDKFxcXCJ4ZHAuZnJhZ3NcXFwiKVxcbitpbnQgeGRwX3NocmluayhzdHJ1Y3QgeGRwX21kICpjdHgpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogUnVucyBvbiBib3RoIHNrYi1iYWNrZWQgWERQIHBhdGhzIChnZW5lcmljIFhEUCB2aWEgdHVuLCBhbmQgdmV0aCk6XFxuK1xcdCAqIHRoZSBub25saW5lYXIgc2tiIGlzIGNvdydkIGludG8gcGFnZV9wb29sIG1lbW9yeSBiZWZvcmUgd2UgcnVuLCBzb1xcbitcXHQgKiBzaHJpbmtpbmcgdGhlIHRhaWwgcmVsZWFzZXMgYSB3aG9sZSBmcmFnIHRoYXQgaGFzIHRvIGdvIGJhY2sgdG8gdGhhdFxcbitcXHQgKiBwb29sLiBUaGUgY291bnRlciBvbmx5IHRlbGxzIHVzIHRoZSBwcm9ncmFtIHJhbiBhbmQgdGhlIGhlbHBlclxcbitcXHQgKiBzdWNjZWVkZWQgLS0gYSBsaW5lYXIgYnVmZiByZXR1cm5zIDAgYXMgd2VsbCAtLSBpdCBkb2VzIG5vdCBwcm92ZSBhXFxuK1xcdCAqIGZyYWcgd2FzIHJlbGVhc2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKGJwZl94ZHBfYWRqdXN0X3RhaWwoY3R4LCAtMzAwMCkgPT0gMClcXG4rXFx0XFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNnNocmlua19yYW4sIDEpO1xcbitcXHRyZXR1cm4gWERQX1BBU1M7XFxuK31cXG4rXFxuK1NFQyhcXFwieGRwLmZyYWdzXFxcIilcXG4raW50IHhkcF90eChzdHJ1Y3QgeGRwX21kICpjdHgpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogQm91bmNlIHRoZSBmcmFtZSBiYWNrLiBPbiB2ZXRoIHRoaXMgdHVybnMgdGhlIGJ1ZmYgaW50byBhblxcbitcXHQgKiB4ZHBfZnJhbWUsIHdoaWNoIGlzIHdoZXJlIGEgYnVmZi1zY29wZWQgcGFnZV9wb29sIHRhZyBtdXN0IG5vdCBsZWFrXFxuK1xcdCAqIGludG8gdGhlIGZyYW1lIGhhbmRlZCB0byB0aGUgcGVlci5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBYRFBfVFg7XFxuK31cXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NTo0MC4wNDUwMDMwMDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjgxNzI1Mzc1ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlZFVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIixcbiAgICBcImJwZl94ZHBfYWRqdXN0X3RhaWxcIixcbiAgICBcImJwZl94ZHBfcHVsbF9kYXRhXCIsXG4gICAgXCJicGZfeGRwX3Nocmlua19kYXRhXCIsXG4gICAgXCJ2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmXCIsXG4gICAgXCJ2ZXRoX3hkcF9yY3Zfc2tiXCIsXG4gICAgXCJ2ZXRoX3hkcF9yY3Zfb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgWERQIGZyYWdtZW50IGhhbmRsaW5nIGxvZ2ljIGFjcm9zcyBjb3JlIG5ldHdvcmtpbmcsIGdlbmVyaWMgWERQLCBhbmQgdGhlIHZldGggZHJpdmVyIHRvIHByb3Blcmx5IHRyYWNrIHBhZ2VfcG9vbCBiYWNrZWQgZnJhZ21lbnRzIHdoZW4gc2hyaW5raW5nIFhEUCBidWZmZXJzLiBUaGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JrIGludGVyZmFjZXMgKHZldGgsIHR1bi90YXApIGFuZCBCUEYvWERQIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0NjQyZjIxZjE4MDE2MGU1MzQ2Mzk2YWU2OGQ2MGMzMjkzZTgzMDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNDo0NTozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuaW5kZXggNmVkM2VlODExNTNmYi4uYTNmZGYxOTU5Yjc2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3ZldGguY1xuKysrIGIvZHJpdmVycy9uZXQvdmV0aC5jXG5AQCAtNzc1LDYgKzc3NSwxMiBAQCBzdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxuIFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncykge1xuIFx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNleGRwX2ZyYWdzX3NpemUgPSBza2ItXHUwMDNlZGF0YV9sZW47XG4gXHRcdHhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7XG4rXHRcdC8qXG4rXHRcdCAqIEEgbm9ubGluZWFyIHNrYiB3YXMgY293J2QgaW50byBycS1cdTAwM2VwYWdlX3Bvb2wgYWJvdmUsIHNvIHRoZVxuK1x0XHQgKiBmcmFncyBtdXN0IGJlIGZyZWVkIHRvIHRoYXQgcG9vbCwgbm90IHZpYSB0aGUgcnhxJ3NcbitcdFx0ICogTUVNX1RZUEVfUEFHRV9TSEFSRUQuXG4rXHRcdCAqL1xuK1x0XHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xuIFx0fSBlbHNlIHtcbiBcdFx0eGRwX2J1ZmZfY2xlYXJfZnJhZ3NfZmxhZyh4ZHApO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcC5oIGIvaW5jbHVkZS9uZXQveGRwLmhcbmluZGV4IGFhNzQyZjQxM2MzNTguLjhmZDQxMzllOWNiZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZHAuaFxuKysrIGIvaW5jbHVkZS9uZXQveGRwLmhcbkBAIC04MSw2ICs4MSwxNCBAQCBlbnVtIHhkcF9idWZmX2ZsYWdzIHtcbiBcdCAqIFhEUCBwcm9ncmFtIGlzIG5vdCBhdHRhY2hlZC5cbiBcdCAqL1xuIFx0WERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEVcdD0gQklUKDIpLFxuK1x0LypcbitcdCAqIGZyYWdzIGFyZSBwYWdlX3Bvb2wgbWVtb3J5IGV2ZW4gdGhvdWdoIHJ4cS1cdTAwM2VtZW0udHlwZSBpcyBub3Q6IGFcbitcdCAqIHNrYi1iYWNrZWQgWERQIGJ1ZmYgKGdlbmVyaWMgWERQLCB2ZXRoKSBpcyBjb3cnZCBpbnRvIGEgcGFnZV9wb29sLlxuK1x0ICogeGRwX2J1ZmYgb25seTogYW4geGRwX2ZyYW1lIGRlc2NyaWJlcyBpdHMgbWVtb3J5IHdpdGggOjptZW1fdHlwZSwgc29cbitcdCAqIHRoaXMgaXMgc3RyaXBwZWQgaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSBhbmQgcmUtZGVyaXZlZCBmcm9tXG4rXHQgKiA6Om1lbV90eXBlIGluIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoKS5cbitcdCAqL1xuK1x0WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTFx0PSBCSVQoMyksXG4gfTtcbiBcbiBzdHJ1Y3QgeGRwX2J1ZmYge1xuQEAgLTEzMSw2ICsxMzksMTYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHhkcF9idWZmX3NldF9mcmFnX3VucmVhZGFibGUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4gXHR4ZHAtXHUwMDNlZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEU7XG4gfVxuIFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB4ZHBfYnVmZl9zZXRfZnJhZ19wcChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbit7XG4rXHR4ZHAtXHUwMDNlZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHhkcF9idWZmX2lzX2ZyYWdfcHAoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApXG4re1xuK1x0cmV0dXJuICEhKHhkcC1cdTAwM2VmbGFncyBcdTAwMjYgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHhkcF9idWZmX2dldF9za2JfZmxhZ3MoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApXG4ge1xuIFx0cmV0dXJuIHhkcC1cdTAwM2VmbGFncztcbkBAIC0zOTQsNiArNDEyLDE1IEBAIHZvaWQgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSxcbiBcdHhkcC1cdTAwM2VkYXRhX21ldGEgPSBmcmFtZS1cdTAwM2VkYXRhIC0gZnJhbWUtXHUwMDNlbWV0YXNpemU7XG4gXHR4ZHAtXHUwMDNlZnJhbWVfc3ogPSBmcmFtZS1cdTAwM2VmcmFtZV9zejtcbiBcdHhkcC1cdTAwM2VmbGFncyA9IGZyYW1lLVx1MDAzZWZsYWdzO1xuK1x0LypcbitcdCAqIGZyYW1lLVx1MDAzZWZsYWdzIG5ldmVyIGNhcnJpZXMgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCAoaXQgaXMgc3RyaXBwZWRcbitcdCAqIGluIHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKCkpOyByZS1kZXJpdmUgaXQgZnJvbSB0aGUgZnJhbWUncyBvd25cbitcdCAqIG1lbW9yeSB0eXBlLiB2ZXRoIGFuZCBkZXZtYXAgcmVidWlsZCBhIGJ1ZmYgaGVyZSBhbmQgcnVuIGEgcHJvZ3JhbVxuK1x0ICogd2hvc2UgcnhxIHNheXMgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIHNvIHdpdGhvdXQgdGhpcyBhIHNocmluayB3b3VsZFxuK1x0ICogZnJlZSBhIHBhZ2VfcG9vbCBmcmFnIHRocm91Z2ggcGFnZV9mcmFnX2ZyZWUoKS5cbitcdCAqL1xuK1x0aWYgKGZyYW1lLVx1MDAzZW1lbV90eXBlID09IE1FTV9UWVBFX1BBR0VfUE9PTClcbitcdFx0eGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZVxuQEAgLTQyMCw3ICs0NDcsOCBAQCBpbnQgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4gXHR4ZHBfZnJhbWUtXHUwMDNlaGVhZHJvb20gPSBoZWFkcm9vbSAtIHNpemVvZigqeGRwX2ZyYW1lKTtcbiBcdHhkcF9mcmFtZS1cdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xuIFx0eGRwX2ZyYW1lLVx1MDAzZWZyYW1lX3N6ID0geGRwLVx1MDAzZWZyYW1lX3N6O1xuLVx0eGRwX2ZyYW1lLVx1MDAzZWZsYWdzID0geGRwLVx1MDAzZWZsYWdzO1xuK1x0LyogWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCBpcyB4ZHBfYnVmZiBvbmx5LCBkb24ndCBjYXJyeSBpdCBvdmVyICovXG4rXHR4ZHBfZnJhbWUtXHUwMDNlZmxhZ3MgPSB4ZHAtXHUwMDNlZmxhZ3MgXHUwMDI2IH5YRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDI5MGUwZjA5OWU2YmYuLjk0MjY4ZjRkM2M1ZjcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC01NTMyLDYgKzU1MzIsMTIgQEAgdTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbiBcdGlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZXhkcF9mcmFnc19zaXplID0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFx0XHR4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApO1xuK1x0XHQvKlxuK1x0XHQgKiBBIG5vbmxpbmVhciBza2Igd2FzIGNvdydkIGludG8gcGFnZV9wb29sIG1lbW9yeSBieVxuK1x0XHQgKiBza2JfY293X2RhdGFfZm9yX3hkcCgpIGJlZm9yZSB3ZSBnb3QgaGVyZSwgc28gdGhlIGZyYWdzIG11c3RcbitcdFx0ICogYmUgZnJlZWQgdG8gdGhhdCBwb29sLCBub3QgdmlhIHRoZSByeHEncyBNRU1fVFlQRV9QQUdFX1NIQVJFRC5cbitcdFx0ICovXG4rXHRcdHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR4ZHBfYnVmZl9jbGVhcl9mcmFnc19mbGFnKHhkcCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uZDM0YmE1NmQ3OWQ4ZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTQzNzgsNiArNDM3OCwxMyBAQCBzdGF0aWMgYm9vbCBicGZfeGRwX3Nocmlua19kYXRhKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBza2JfZnJhZ190ICpmcmFnLFxuIFx0aWYgKG1lbV90eXBlID09IE1FTV9UWVBFX1hTS19CVUZGX1BPT0wpIHtcbiBcdFx0bmV0bWVtID0gMDtcbiBcdFx0emNfZnJhZyA9IGJwZl94ZHBfc2hyaW5rX2RhdGFfemMoeGRwLCBzaHJpbmssIHRhaWwsIHJlbGVhc2UpO1xuK1x0fSBlbHNlIGlmICh4ZHBfYnVmZl9pc19mcmFnX3BwKHhkcCkpIHtcbitcdFx0LypcbitcdFx0ICogU2tiLWJhY2tlZCBYRFAgKGdlbmVyaWMgWERQLCB2ZXRoKSBjb3cncyB0aGUgZnJhZ3MgaW50byBhXG4rXHRcdCAqIHBhZ2VfcG9vbCB3aGlsZSB0aGUgcnhxIHN0YXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBmcmVlXG4rXHRcdCAqIHRoZSBmcmFnIHRvIHRoZSBwb29sLCBub3QgdmlhIHBhZ2VfZnJhZ19mcmVlKCkuXG4rXHRcdCAqL1xuK1x0XHRtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfUE9PTDtcbiBcdH1cbiBcbiBcdGlmIChyZWxlYXNlKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU4ZjkwMzRhMjY4NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXG5AQCAtMCwwICsxLDI4OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl90dW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJ4ZHBfc2hyaW5rX2ZyYWdzLnNrZWwuaFwiXG4rXG4rLypcbisgKiBBIGdlbmVyaWMtWERQIHByb2dyYW0gdGhhdCBzaHJpbmtzIGludG8gdGhlIGZyYWdzIGZyZWVzIGEgcGFnZV9wb29sIGZyYWcuXG4rICogc2tiLWJhY2tlZCBYRFAgZmlyc3QgY293J3MgdGhlIG5vbmxpbmVhciBza2IgaW50byBwYWdlX3Bvb2wgbWVtb3J5XG4rICogKHNrYl9jb3dfZGF0YV9mb3JfeGRwKCkgZm9yIGdlbmVyaWMgWERQLCBza2JfcHBfY293X2RhdGEoKSBmb3IgdmV0aCksIGJ1dFxuKyAqIHRoZSBzaGFyZWQgcnhxIGlzIHJlZ2lzdGVyZWQgYXMgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIHNvIGEgYnVnZ3kga2VybmVsXG4rICogZnJlZXMgdGhlIGZyYWcgd2l0aCBwYWdlX2ZyYWdfZnJlZSgpIC1cdTAwM2UgXCJCYWQgcGFnZSBzdGF0ZSAuLi4gcGFnZV9wb29sIGxlYWtcIi5cbisgKi9cbitcbisjZGVmaW5lIFRBUF9OQU1FXHRcInhkcF9zaHJpbmswXCJcbisjZGVmaW5lIFRBUF9ORVROU1x0XCJ4ZHBfc2hyaW5rX3RhcFwiXG4rXG4rI2RlZmluZSBOU19OQU1FX01BWF9MRU5cdDMyXG4rI2RlZmluZSBWRVRIX0xPQ0FMXHRcInhkcF9zaHJpbmtBXCJcbisjZGVmaW5lIFZFVEhfUEVFUlx0XCJ4ZHBfc2hyaW5rQlwiXG4rI2RlZmluZSBWRVRIX0xPQ0FMX0lQXHRcIjEwLjkuOS4xXCJcbisjZGVmaW5lIFZFVEhfUEVFUl9JUFx0XCIxMC45LjkuMlwiXG4rI2RlZmluZSBWRVRIX0xPQ0FMX01BQ1x0XCIwMjowMDowMDowMDowMDowMVwiXG4rXG4rLypcbisgKiBza2JfcHBfY293X2RhdGEoKSBrZWVwcyB1cCB0byBvbmUgcGFnZSBpbiB0aGUgbGluZWFyIHBhcnQsIHNvIHRoZSBwYWNrZXRcbisgKiBzaXplcyBiZWxvdyBvbmx5IGxlYXZlIGEgZnJhZyAoc21hbGxlciB0aGFuIHRoZSAzMDAwLWJ5dGUgc2hyaW5rLCBzbyBpdCBpc1xuKyAqIHJlbGVhc2VkIGFzIGEgd2hvbGUpIG9uIDRLIHBhZ2VzLiBTa2lwIGVsc2V3aGVyZSByYXRoZXIgdGhhbiBydW4gYSB0ZXN0XG4rICogdGhhdCBjYW5ub3QgdGVsbCBhIGZpeGVkIGtlcm5lbCBmcm9tIGEgYnVnZ3kgb25lLlxuKyAqL1xuKyNkZWZpbmUgUEFHRV9TSVpFXzRLXHQ0MDk2XG4rXG4rLypcbisgKiBHZW5lcm91cywgc28gYSBsb2FkZWQgQ0kgZG9lcyBub3QgZmFpbCB0aGUgYXNzZXJ0IHByZW1hdHVyZWx5OyBub3JtYWxseVxuKyAqIHRoZSBmaXJzdCBjaGVjayBhbHJlYWR5IHN1Y2NlZWRzLlxuKyAqL1xuKyNkZWZpbmUgV0FJVF9JVEVSU1x0MTAwMDBcbisjZGVmaW5lIFdBSVRfVVNcdFx0MTAwMFxuK1xuK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3Byb2coc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBXQUlUX0lURVJTIFx1MDAyNlx1MDAyNiAhc2tlbC1cdTAwM2Vic3MtXHUwMDNlc2hyaW5rX3JhbjsgaSsrKVxuK1x0XHR1c2xlZXAoV0FJVF9VUyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY3JlYXRlX3RhcF9uYXBpX2ZyYWdzKGNvbnN0IGNoYXIgKmlmbmFtZSlcbit7XG4rXHRzdHJ1Y3QgaWZyZXEgaWZyID0ge1xuK1x0XHQuaWZyX2ZsYWdzID0gSUZGX1RBUCB8IElGRl9OT19QSSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MsXG4rXHR9O1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRzdHJzY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTtcbitcbitcdGZkID0gb3BlbihcIi9kZXYvbmV0L3R1blwiLCBPX1JEV1IpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0ZXJyID0gaW9jdGwoZmQsIFRVTlNFVElGRiwgXHUwMDI2aWZyKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZXJyID0gLWVycm5vO1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuKy8qXG4rICogU2ltaWxhciB0byBmbG93X2Rpc3NlY3Rvci5jOiB3cml0ZXYoKSBhbiBJRkZfTkFQSV9GUkFHUyB0YXAgdG8gYnVpbGQgYVxuKyAqIG5vbmxpbmVhciBza2IgdGhhdCB0dW4gcnVucyB0aHJvdWdoIGRvX3hkcF9nZW5lcmljKCkuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdF90dW4oc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpXG4re1xuK1x0X191OCBoZWFkWzc0XSwgZnJhZzFbMjA0OF0sIGZyYWcyWzIwNDhdO1xuK1x0c3RydWN0IGV0aGhkciAqZXRoID0gKHZvaWQgKiloZWFkO1xuK1x0aW50IHRhcF9mZCA9IC0xLCBpZmluZGV4LCBlcnI7XG4rXHRzdHJ1Y3QgbmV0bnNfb2JqICpucyA9IE5VTEw7XG4rXHRzdHJ1Y3QgaW92ZWMgaW92WzNdO1xuK1x0c3NpemVfdCBuO1xuK1xuK1x0aWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0bnMgPSBuZXRuc19uZXcoVEFQX05FVE5TLCB0cnVlKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihucywgXCJuZXRuc19uZXdcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHRhcF9mZCA9IGNyZWF0ZV90YXBfbmFwaV9mcmFncyhUQVBfTkFNRSk7XG4rXHRpZiAoIUFTU0VSVF9HRSh0YXBfZmQsIDAsIFwiY3JlYXRlX3RhcFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRTWVMob3V0LCBcImlwIGxpbmsgc2V0IGRldiBcIiBUQVBfTkFNRSBcIiB1cFwiKTtcbitcbitcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChUQVBfTkFNRSk7XG4rXHRpZiAoIUFTU0VSVF9HVChpZmluZGV4LCAwLCBcImlmX25hbWV0b2luZGV4XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNocmlua19yYW4gPSAwO1xuK1xuK1x0ZXJyID0gYnBmX3hkcF9hdHRhY2goaWZpbmRleCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MueGRwX3NocmluayksXG4rXHRcdFx0ICAgICAwLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfeGRwX2F0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRtZW1zZXQoaGVhZCwgMCwgc2l6ZW9mKGhlYWQpKTtcbitcdG1lbXNldChmcmFnMSwgMHg0MSwgc2l6ZW9mKGZyYWcxKSk7XG4rXHRtZW1zZXQoZnJhZzIsIDB4NDIsIHNpemVvZihmcmFnMikpO1xuK1x0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4rXG4rXHRpb3ZbMF0uaW92X2Jhc2UgPSBoZWFkOyAgaW92WzBdLmlvdl9sZW4gPSBzaXplb2YoaGVhZCk7XG4rXHRpb3ZbMV0uaW92X2Jhc2UgPSBmcmFnMTsgaW92WzFdLmlvdl9sZW4gPSBzaXplb2YoZnJhZzEpO1xuK1x0aW92WzJdLmlvdl9iYXNlID0gZnJhZzI7IGlvdlsyXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcyKTtcbitcbitcdG4gPSB3cml0ZXYodGFwX2ZkLCBpb3YsIEFSUkFZX1NJWkUoaW92KSk7XG4rXHRBU1NFUlRfRVEobiwgc2l6ZW9mKGhlYWQpICsgc2l6ZW9mKGZyYWcxKSArIHNpemVvZihmcmFnMiksIFwid3JpdGV2XCIpO1xuK1xuK1x0d2FpdF9mb3JfcHJvZyhza2VsKTtcbitcdC8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzIFwicGFnZV9wb29sIGxlYWtcIiwgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovXG4rXHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc2hyaW5rX3JhbiwgMCwgXCJ4ZHBfcHJvZ19yYW5cIik7XG4rXG4rXHRicGZfeGRwX2RldGFjaChpZmluZGV4LCAwLCBOVUxMKTtcbitvdXQ6XG4rXHRpZiAodGFwX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodGFwX2ZkKTtcbitcdG5ldG5zX2ZyZWUobnMpO1xuK31cbitcbisvKlxuKyAqIEJvdGggdmV0aCBlbmRzIGxpdmUgaW4gdGhlaXIgb3duIG5hbWVzcGFjZSwgc28gdGhlIHRyYWZmaWMgcmVhbGx5IGNyb3NzZXNcbisgKiB0aGUgcGFpciBhbmQgbm90aGluZyBpcyBjcmVhdGVkIGluIHRoZSBjYWxsZXIncyBuYW1lc3BhY2UuXG4rICovXG4rc3RhdGljIGludCB2ZXRoX3NldHVwKGNoYXIgKm5zMCwgY2hhciAqbnMxKVxuK3tcbitcdGlmICghQVNTRVJUX09LKGFwcGVuZF90aWQobnMwLCBOU19OQU1FX01BWF9MRU4pLCBcImFwcGVuZF90aWQgbnMwXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoIUFTU0VSVF9PSyhhcHBlbmRfdGlkKG5zMSwgTlNfTkFNRV9NQVhfTEVOKSwgXCJhcHBlbmRfdGlkIG5zMVwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0U1lTKGZhaWwsIFwiaXAgbmV0bnMgYWRkICVzXCIsIG5zMCk7XG4rXHRTWVMoZmFpbF9uczAsIFwiaXAgbmV0bnMgYWRkICVzXCIsIG5zMSk7XG4rXHRTWVMoZmFpbF9uczEsIFwiaXAgLW4gJXMgbGluayBhZGQgJXMgbXR1IDgwMDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlcyBtdHUgODAwMFwiLFxuK1x0ICAgIG5zMCwgVkVUSF9MT0NBTCwgVkVUSF9QRUVSKTtcbitcdFNZUyhmYWlsX25zMSwgXCJpcCAtbiAlcyBsaW5rIHNldCAlcyBuZXRucyAlc1wiLCBuczAsIFZFVEhfUEVFUiwgbnMxKTtcbitcdFNZUyhmYWlsX25zMSwgXCJpcCAtbiAlcyBsaW5rIHNldCAlcyBhZGRyZXNzICVzXCIsIG5zMCwgVkVUSF9MT0NBTCxcbitcdCAgICBWRVRIX0xPQ0FMX01BQyk7XG4rXHRTWVMoZmFpbF9uczEsIFwiaXAgLW4gJXMgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCIsIG5zMCwgVkVUSF9MT0NBTF9JUCxcbitcdCAgICBWRVRIX0xPQ0FMKTtcbitcdFNZUyhmYWlsX25zMSwgXCJpcCAtbiAlcyBsaW5rIHNldCAlcyB1cFwiLCBuczAsIFZFVEhfTE9DQUwpO1xuK1x0U1lTKGZhaWxfbnMxLCBcImlwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlc1wiLCBuczEsIFZFVEhfUEVFUl9JUCxcbitcdCAgICBWRVRIX1BFRVIpO1xuK1x0U1lTKGZhaWxfbnMxLCBcImlwIC1uICVzIGxpbmsgc2V0ICVzIHVwXCIsIG5zMSwgVkVUSF9QRUVSKTtcbitcbitcdHJldHVybiAwO1xuK1xuK2ZhaWxfbnMxOlxuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczEpO1xuK2ZhaWxfbnMwOlxuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczApO1xuK2ZhaWw6XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZldGhfY2xlYW51cChjb25zdCBjaGFyICpuczAsIGNvbnN0IGNoYXIgKm5zMSlcbit7XG4rXHQvKiBEcm9wcGluZyB0aGUgbmFtZXNwYWNlcyB0YWtlcyB0aGUgdmV0aCBwYWlyIGFuZCBpdHMgWERQIHByb2dyYW1zLiAqL1xuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczEpO1xuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczApO1xuK31cbitcbitzdGF0aWMgaW50IHZldGhfYXR0YWNoKGNvbnN0IGNoYXIgKm5zLCBjb25zdCBjaGFyICpkZXYsIGludCBwcm9nX2ZkKVxuK3tcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xuK1x0aW50IGlmaW5kZXgsIGVycjtcbitcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKG5zKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChkZXYpO1xuK1x0aWYgKCFBU1NFUlRfR1QoaWZpbmRleCwgMCwgXCJpZl9uYW1ldG9pbmRleFwiKSkge1xuK1x0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0ZXJyID0gYnBmX3hkcF9hdHRhY2goaWZpbmRleCwgcHJvZ19mZCwgMCwgTlVMTCk7XG4rXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcbitcdHJldHVybiBBU1NFUlRfT0soZXJyLCBcImJwZl94ZHBfYXR0YWNoXCIpID8gMCA6IC0xO1xuK31cbitcbisvKiBBIGxhcmdlIHBpbmcgYnVpbGRzIGEgbm9ubGluZWFyIHNrYiB0aGF0IHZldGggY293J3MgaW50byBpdHMgcGFnZV9wb29sLiAqL1xuK3N0YXRpYyB2b2lkIHRlc3RfdmV0aChzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbClcbit7XG4rXHRjaGFyIG5zMFtOU19OQU1FX01BWF9MRU5dID0gXCJ4ZHBfc2hyaW5rX25zMC1cIjtcbitcdGNoYXIgbnMxW05TX05BTUVfTUFYX0xFTl0gPSBcInhkcF9zaHJpbmtfbnMxLVwiO1xuK1xuK1x0aWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHZldGhfc2V0dXAobnMwLCBuczEpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuID0gMDtcbitcbitcdGlmICh2ZXRoX2F0dGFjaChuczAsIFZFVEhfTE9DQUwsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9zaHJpbmspKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZXhlYyAlcyBwaW5nIC1xIC1zIDUwMDAgLWMgMyAtVyAxICVzXCIsXG4rXHRcdCAgIG5zMSwgVkVUSF9MT0NBTF9JUCk7XG4rXG4rXHR3YWl0X2Zvcl9wcm9nKHNrZWwpO1xuK1x0LyogYSBidWdneSBrZXJuZWwgb25seSBzcGxhdHMgXCJwYWdlX3Bvb2wgbGVha1wiLCBpdCBkb2VzIG5vdCBmYWlsIGhlcmUgKi9cbitcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuLCAwLCBcInhkcF9wcm9nX3JhblwiKTtcbitvdXQ6XG4rXHR2ZXRoX2NsZWFudXAobnMwLCBuczEpO1xuK31cbitcbisvKlxuKyAqIExPQ0FMIGNvdydzIHRoZSBpbmNvbWluZyBza2IgYW5kIHJldHVybnMgWERQX1RYLCBzbyB0aGUgYnVmZiBpcyB0dXJuZWQgaW50b1xuKyAqIGFuIHhkcF9mcmFtZSBhbmQgYm91bmNlZCB0byBQRUVSLCB3aGljaCBzaHJpbmtzIGEgZnJhZy4gQSBwYWdlX3Bvb2wgdGFnXG4rICogcmVjb3JkZWQgb24gdGhlIGJ1ZmYgbXVzdCBub3QgbGVhayBpbnRvIHRoZSBmcmFtZSwgb3IgUEVFUiBmcmVlcyBhIHBsYWluXG4rICogcGFnZSAod2hvc2UgcHAgd2FzIGFscmVhZHkgY2xlYXJlZCBvbiB0aGUgWERQX1RYIHNpZGUpIGFzIHBhZ2VfcG9vbCBtZW1vcnkuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdF92ZXRoX3R4KHN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsKVxuK3tcbitcdGNoYXIgbnMwW05TX05BTUVfTUFYX0xFTl0gPSBcInhkcF9zaHJpbmtfdHgwLVwiO1xuK1x0Y2hhciBuczFbTlNfTkFNRV9NQVhfTEVOXSA9IFwieGRwX3Nocmlua190eDEtXCI7XG4rXG4rXHRpZiAoZ2V0cGFnZXNpemUoKSAhPSBQQUdFX1NJWkVfNEspIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAodmV0aF9zZXR1cChuczAsIG5zMSkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qXG4rXHQgKiBMT0NBTCBib3VuY2VzIGV2ZXJ5dGhpbmcgKGluY2wuIEFSUCkgd2l0aCBYRFBfVFgsIHNvIHBpbiBhIHN0YXRpY1xuK1x0ICogbmVpZ2hib3VyIHRvIGxldCB0aGUgcGluZydzIHBheWxvYWQgYWN0dWFsbHkgcmVhY2ggaXQuXG4rXHQgKi9cbitcdFNZUyhvdXQsIFwiaXAgLW4gJXMgbmVpZ2ggYWRkICVzIGxsYWRkciAlcyBkZXYgJXMgbnVkIHBlcm1hbmVudFwiLFxuK1x0ICAgIG5zMSwgVkVUSF9MT0NBTF9JUCwgVkVUSF9MT0NBTF9NQUMsIFZFVEhfUEVFUik7XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuID0gMDtcbitcbitcdGlmICh2ZXRoX2F0dGFjaChuczAsIFZFVEhfTE9DQUwsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF90eCkpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICh2ZXRoX2F0dGFjaChuczEsIFZFVEhfUEVFUiwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MueGRwX3NocmluaykpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXNcIixcbitcdFx0ICAgbnMxLCBWRVRIX0xPQ0FMX0lQKTtcbitcbitcdHdhaXRfZm9yX3Byb2coc2tlbCk7XG4rXHQvKiBhIGJ1Z2d5IGtlcm5lbCBvbmx5IHNwbGF0cyBcInBhZ2VfcG9vbCBsZWFrXCIsIGl0IGRvZXMgbm90IGZhaWwgaGVyZSAqL1xuK1x0QVNTRVJUX0dUKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNocmlua19yYW4sIDAsIFwieGRwX3Byb2dfcmFuXCIpO1xuK291dDpcbitcdHZldGhfY2xlYW51cChuczAsIG5zMSk7XG4rfVxuK1xuK3ZvaWQgdGVzdF94ZHBfc2hyaW5rX2ZyYWdzKHZvaWQpXG4re1xuK1x0c3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWw7XG4rXG4rXHRza2VsID0geGRwX3Nocmlua19mcmFnc19fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidHVuXCIpKVxuK1x0XHR0ZXN0X3R1bihza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidmV0aFwiKSlcbitcdFx0dGVzdF92ZXRoKHNrZWwpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ2ZXRoX3R4XCIpKVxuK1x0XHR0ZXN0X3ZldGhfdHgoc2tlbCk7XG4rXG4rXHR4ZHBfc2hyaW5rX2ZyYWdzX19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zaHJpbmtfZnJhZ3MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFkODk1YWI2OTkzMDNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmNcbkBAIC0wLDAgKzEsMzQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuK1xuK2ludCBzaHJpbmtfcmFuO1xuK1xuK1NFQyhcInhkcC5mcmFnc1wiKVxuK2ludCB4ZHBfc2hyaW5rKHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHQvKlxuK1x0ICogUnVucyBvbiBib3RoIHNrYi1iYWNrZWQgWERQIHBhdGhzIChnZW5lcmljIFhEUCB2aWEgdHVuLCBhbmQgdmV0aCk6XG4rXHQgKiB0aGUgbm9ubGluZWFyIHNrYiBpcyBjb3cnZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYmVmb3JlIHdlIHJ1biwgc29cbitcdCAqIHNocmlua2luZyB0aGUgdGFpbCByZWxlYXNlcyBhIHdob2xlIGZyYWcgdGhhdCBoYXMgdG8gZ28gYmFjayB0byB0aGF0XG4rXHQgKiBwb29sLiBUaGUgY291bnRlciBvbmx5IHRlbGxzIHVzIHRoZSBwcm9ncmFtIHJhbiBhbmQgdGhlIGhlbHBlclxuK1x0ICogc3VjY2VlZGVkIC0tIGEgbGluZWFyIGJ1ZmYgcmV0dXJucyAwIGFzIHdlbGwgLS0gaXQgZG9lcyBub3QgcHJvdmUgYVxuK1x0ICogZnJhZyB3YXMgcmVsZWFzZWQuXG4rXHQgKi9cbitcdGlmIChicGZfeGRwX2FkanVzdF90YWlsKGN0eCwgLTMwMDApID09IDApXG4rXHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnNocmlua19yYW4sIDEpO1xuK1x0cmV0dXJuIFhEUF9QQVNTO1xuK31cbitcbitTRUMoXCJ4ZHAuZnJhZ3NcIilcbitpbnQgeGRwX3R4KHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHQvKlxuK1x0ICogQm91bmNlIHRoZSBmcmFtZSBiYWNrLiBPbiB2ZXRoIHRoaXMgdHVybnMgdGhlIGJ1ZmYgaW50byBhblxuK1x0ICogeGRwX2ZyYW1lLCB3aGljaCBpcyB3aGVyZSBhIGJ1ZmYtc2NvcGVkIHBhZ2VfcG9vbCB0YWcgbXVzdCBub3QgbGVha1xuK1x0ICogaW50byB0aGUgZnJhbWUgaGFuZGVkIHRvIHRoZSBwZWVyLlxuK1x0ICovXG4rXHRyZXR1cm4gWERQX1RYO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NTo0MC4wNDUwMDU5MjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODk2NDIyNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHdvcnRoaW5lc3MsIHBpbnBvaW50IGtleSBmb2N1cyBzeW1ib2xzLCBhbmQgaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cbkZpcnN0LCBsZXQncyBsb29rIGF0IHRoZSB0b3VjaGVkIGZpbGVzLiBJIHNlZSBjaGFuZ2VzIGluIGBkcml2ZXJzL25ldC92ZXRoLmNgLCBgaW5jbHVkZS9uZXQveGRwLmhgLCBgbmV0L2NvcmUvZGV2LmNgLCBgbmV0L2NvcmUvZmlsdGVyLmNgLCBhbmQgc29tZSBzZWxmdGVzdHMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uLi5gLiBUaGlzIGxvb2tzIHByb21pc2luZzsgaXQgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcsIEJQRiwgYW5kIGEgc3BlY2lmaWMgZHJpdmVyIChgdmV0aGApLlxuXG5TcGVjaWZpY2FsbHksIEknbSBvYnNlcnZpbmc6XG5cbiogICBUaGUgYHZldGhgIGRyaXZlciBpcyBiZWluZyBtb2RpZmllZCB3aXRoaW4gYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgIHRvIHNldCBgeGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKWAgd2hlbiBmcmFnbWVudCBpbmZvcm1hdGlvbiBpcyBwcmVzZW50LlxuKiAgIFRoZSBgeGRwLmhgIGhlYWRlciBnZXRzIG5ldyBmbGFncywgZnVuY3Rpb25zIGxpa2UgYHhkcF9idWZmX3NldF9mcmFnX3BwKClgIGFuZCBgeGRwX2J1ZmZfaXNfZnJhZ19wcCgpYCwgYW5kIHVwZGF0ZXMgdG8gY29udmVyc2lvbiBmdW5jdGlvbnMgKGB4ZHBfY29udmVydF9mcmFtZV90b19idWZmYCBhbmQgYHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmYCkgd2hpY2ggYWxzbyByZWxhdGUgdG8gYFBBR0VfUE9PTGAgbWVtb3J5LlxuKiAgIGBuZXQvY29yZS9kZXYuY2AncyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKClgIGlzIG5vdyBhbHNvIHNldHRpbmcgdGhlIGZyYWdtZW50IGZsYWcuXG4qICAgYG5ldC9jb3JlL2ZpbHRlci5jYCBpcyB1c2luZyB0aGUgZnJhZ21lbnQgaW5mb3JtYXRpb24gd2l0aGluIGBicGZfeGRwX3Nocmlua19kYXRhYC5cblxuVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhlIGludGVycGxheSBiZXR3ZWVuIGdlbmVyaWMgWERQIGV4ZWN1dGlvbiwgdGhlIGB2ZXRoYCBkcml2ZXIsIEJQRiBmaWx0ZXJzLCBhbmQgY29yZSBYRFAgZnJhbWUgY29udmVyc2lvbi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBmcmFnbWVudCBoYW5kbGluZyBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgQlBGIGxpZmVjeWNsZS5cblxuTm93LCBhIGtleSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkgaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYW5rZnVsbHksIGl0IHNlZW1zIGxpa2UgYHZldGhgLCBgdHVuL3RhcGAsIGdlbmVyaWMgWERQLCBhbmQgQlBGIGFkanVzdCB0YWlsIGFyZSBhbGwgc3RhbmRhcmQgbmV0d29yay9CUEYgZmVhdHVyZXMgdGVzdGVkIGJ5IHN5emthbGxlci4gVGhhdCdzIGEgaHVnZSB3aW4g4oCTIGl0IHdpbGwgbWFrZSB0ZXN0aW5nIG11Y2ggZWFzaWVyLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIHNwZWNpZmljIHN5bWJvbHMgYW5kIGNvbmZpZ3MgSSdsbCBuZWVkIHRvIGZvY3VzIG9uLiBJJ2xsIHVzZSBncmVwcGVyIChvciBgcmVhZC1maWxlYCBkaXJlY3RseSBpZiBncmVwcGVyIGZhaWxzKSBhbmQgc2VhcmNoIGZvciB0aG9zZSBrZXkgZnVuY3Rpb25zLCBsaWtlIGBicGZfeGRwX3Nocmlua19kYXRhYCwgYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgLCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgYW5kIGB4ZHBfY29udmVydF9mcmFtZV90b19idWZmYCwgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYW5kIHdoYXQgdGhlIGNvZGUncyBjYWxsIGdyYXBocyBsb29rIGxpa2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NTo0OC45NDE0MzE3NTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk0MDYxNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3hkcF9zaHJpbmtfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz00MzI3PXN0YXRpYyBpbnQgYnBmX3hkcF9mcmFnc19pbmNyZWFzZV90YWlsKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDM1MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo0MzUyOnN0YXRpYyBzdHJ1Y3QgeGRwX2J1ZmYgKmJwZl94ZHBfc2hyaW5rX2RhdGFfemMoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBzaHJpbmssXFxubmV0L2NvcmUvZmlsdGVyLmMtNDM1My1cXHRcXHRcXHRcXHRcXHQgICAgICAgYm9vbCB0YWlsLCBib29sIHJlbGVhc2UpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00MzY5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQzNzA6c3RhdGljIGJvb2wgYnBmX3hkcF9zaHJpbmtfZGF0YShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc2tiX2ZyYWdfdCAqZnJhZyxcXG5uZXQvY29yZS9maWx0ZXIuYy00MzcxLVxcdFxcdFxcdFxcdGludCBzaHJpbmssIGJvb2wgdGFpbClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQzNzktXFx0XFx0bmV0bWVtID0gMDtcXG5uZXQvY29yZS9maWx0ZXIuYzo0MzgwOlxcdFxcdHpjX2ZyYWcgPSBicGZfeGRwX3Nocmlua19kYXRhX3pjKHhkcCwgc2hyaW5rLCB0YWlsLCByZWxlYXNlKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00MzgxLVxcdH0gZWxzZSBpZiAoeGRwX2J1ZmZfaXNfZnJhZ19wcCh4ZHApKSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NDAxPXN0YXRpYyBpbnQgYnBmX3hkcF9mcmFnc19zaHJpbmtfdGFpbChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgaW50IG9mZnNldClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0MTQtXFx0XFx0b2Zmc2V0IC09IHNocmluaztcXG5uZXQvY29yZS9maWx0ZXIuYzo0NDE1OlxcdFxcdGlmIChicGZfeGRwX3Nocmlua19kYXRhKHhkcCwgZnJhZywgc2hyaW5rLCB0cnVlKSlcXG5uZXQvY29yZS9maWx0ZXIuYy00NDE2LVxcdFxcdFxcdG5fZnJhZ3NfZnJlZSsrO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI2NTk9X19icGZfa2Z1bmMgaW50IGJwZl94ZHBfcHVsbF9kYXRhKHN0cnVjdCB4ZHBfbWQgKngsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcwMC1cXHRcXHRkZWx0YSAtPSBzaHJpbms7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI3MDE6XFx0XFx0aWYgKGJwZl94ZHBfc2hyaW5rX2RhdGEoeGRwLCBmcmFnLCBzaHJpbmssIGZhbHNlKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcwMi1cXHRcXHRcXHRuX2ZyYWdzX2ZyZWUrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDU6NDkuMDEwODQ0NTA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM0NTM3OTMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFhEUCBGcmFnIEhhbmRsaW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGZpbHRlci5jYCBidXNpbmVzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBYRFAgZnJhZ21lbnQgaGFuZGxpbmcgaXMgd29ya2luZyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgYnBmX3hkcF9mcmFnc19zaHJpbmtfdGFpbGAgZnVuY3Rpb24gY2FsbCwgc3BlY2lmaWNhbGx5LCBob3cgaXQgcmVsYXRlcyB0byBgYnBmX3hkcF9hZGp1c3RfdGFpbGAuIFNpbmNlIHRoZSBmb3JtZXIgaXMgY2FsbGVkIGJ5IHRoZSBsYXR0ZXIsIGl0IHNlZW1zIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBjb2RlIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIGdyYXNwIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljIGltbWVkaWF0ZWx5IGFyb3VuZCB0aGVzZSB0d28gZnVuY3Rpb24gY2FsbHMgaXMgY3JpdGljYWw7IEknbSBsb29raW5nIGZvciB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlbSwgdGhlIGRhdGEgdGhleSBvcGVyYXRlIG9uLCBhbmQgdGhlIG92ZXJhbGwgb2JqZWN0aXZlIG9mIHRoZSBjb2RlIHNlZ21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTczLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDU6NTIuMzU2MjI2MzI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ0MDA6XFx0XFxuNDQwMTpcXHRzdGF0aWMgaW50IGJwZl94ZHBfZnJhZ3Nfc2hyaW5rX3RhaWwoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBvZmZzZXQpXFxuNDQwMjpcXHR7XFxuNDQwMzpcXHRcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9idWZmKHhkcCk7XFxuNDQwNDpcXHRcXHRpbnQgaSwgbl9mcmFnc19mcmVlID0gMCwgbGVuX2ZyZWUgPSAwO1xcbjQ0MDU6XFx0XFxuNDQwNjpcXHRcXHRpZiAodW5saWtlbHkob2Zmc2V0IFxcdTAwM2UgKGludCl4ZHBfZ2V0X2J1ZmZfbGVuKHhkcCkgLSBFVEhfSExFTikpXFxuNDQwNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NDA4OlxcdFxcbjQ0MDk6XFx0XFx0Zm9yIChpID0gc2luZm8tXFx1MDAzZW5yX2ZyYWdzIC0gMTsgaSBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG9mZnNldCBcXHUwMDNlIDA7IGktLSkge1xcbjQ0MTA6XFx0XFx0XFx0c2tiX2ZyYWdfdCAqZnJhZyA9IFxcdTAwMjZzaW5mby1cXHUwMDNlZnJhZ3NbaV07XFxuNDQxMTpcXHRcXHRcXHRpbnQgc2hyaW5rID0gbWluX3QoaW50LCBvZmZzZXQsIHNrYl9mcmFnX3NpemUoZnJhZykpO1xcbjQ0MTI6XFx0XFxuNDQxMzpcXHRcXHRcXHRsZW5fZnJlZSArPSBzaHJpbms7XFxuNDQxNDpcXHRcXHRcXHRvZmZzZXQgLT0gc2hyaW5rO1xcbjQ0MTU6XFx0XFx0XFx0aWYgKGJwZl94ZHBfc2hyaW5rX2RhdGEoeGRwLCBmcmFnLCBzaHJpbmssIHRydWUpKVxcbjQ0MTY6XFx0XFx0XFx0XFx0bl9mcmFnc19mcmVlKys7XFxuNDQxNzpcXHRcXHR9XFxuNDQxODpcXHRcXHRzaW5mby1cXHUwMDNlbnJfZnJhZ3MgLT0gbl9mcmFnc19mcmVlO1xcbjQ0MTk6XFx0XFx0c2luZm8tXFx1MDAzZXhkcF9mcmFnc19zaXplIC09IGxlbl9mcmVlO1xcbjQ0MjA6XFx0XFxuNDQyMTpcXHRcXHRpZiAodW5saWtlbHkoIXNpbmZvLVxcdTAwM2Vucl9mcmFncykpIHtcXG40NDIyOlxcdFxcdFxcdHhkcF9idWZmX2NsZWFyX2ZyYWdzX2ZsYWcoeGRwKTtcXG40NDIzOlxcdFxcdFxcdHhkcF9idWZmX2NsZWFyX2ZyYWdfcGZtZW1hbGxvYyh4ZHApO1xcbjQ0MjQ6XFx0XFx0XFx0eGRwLVxcdTAwM2VkYXRhX2VuZCAtPSBvZmZzZXQ7XFxuNDQyNTpcXHRcXHR9XFxuNDQyNjpcXHRcXG40NDI3OlxcdFxcdHJldHVybiAwO1xcbjQ0Mjg6XFx0fVxcbjQ0Mjk6XFx0XFxuNDQzMDpcXHRCUEZfQ0FMTF8yKGJwZl94ZHBfYWRqdXN0X3RhaWwsIHN0cnVjdCB4ZHBfYnVmZiAqLCB4ZHAsIGludCwgb2Zmc2V0KVxcbjQ0MzE6XFx0e1xcbjQ0MzI6XFx0XFx0dm9pZCAqZGF0YV9oYXJkX2VuZCA9IHhkcF9kYXRhX2hhcmRfZW5kKHhkcCk7IC8qIHVzZSB4ZHAtXFx1MDAzZWZyYW1lX3N6ICovXFxuNDQzMzpcXHRcXHR2b2lkICpkYXRhX2VuZCA9IHhkcC1cXHUwMDNlZGF0YV9lbmQgKyBvZmZzZXQ7XFxuNDQzNDpcXHRcXG40NDM1OlxcdFxcdGlmICh1bmxpa2VseSh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkpIHsgLyogbm9uLWxpbmVhciB4ZHAgYnVmZiAqL1xcbjQ0MzY6XFx0XFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuNDQzNzpcXHRcXHRcXHRcXHRyZXR1cm4gYnBmX3hkcF9mcmFnc19zaHJpbmtfdGFpbCh4ZHAsIC1vZmZzZXQpO1xcbjQ0Mzg6XFx0XFxuNDQzOTpcXHRcXHRcXHRyZXR1cm4gYnBmX3hkcF9mcmFnc19pbmNyZWFzZV90YWlsKHhkcCwgb2Zmc2V0KTtcXG40NDQwOlxcdFxcdH1cXG40NDQxOlxcdFxcbjQ0NDI6XFx0XFx0LyogTm90aWNlIHRoYXQgeGRwX2RhdGFfaGFyZF9lbmQgaGF2ZSByZXNlcnZlZCBzb21lIHRhaWxyb29tICovXFxuNDQ0MzpcXHRcXHRpZiAodW5saWtlbHkoZGF0YV9lbmQgXFx1MDAzZSBkYXRhX2hhcmRfZW5kKSlcXG40NDQ0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ0NDU6XFx0XFxuNDQ0NjpcXHRcXHRpZiAodW5saWtlbHkoZGF0YV9lbmQgXFx1MDAzYyB4ZHAtXFx1MDAzZWRhdGEgKyBFVEhfSExFTikpXFxuNDQ0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NDQ4OlxcdFxcbjQ0NDk6XFx0XFx0LyogQ2xlYXIgbWVtb3J5IGFyZWEgb24gZ3JvdywgY2FuIGNvbnRhaW4gdW5pbml0IGtlcm5lbCBtZW1vcnkgKi9cXG40NDUwOlxcdFxcdGlmIChvZmZzZXQgXFx1MDAzZSAwKVxcbjQ0NTE6XFx0XFx0XFx0bWVtc2V0KHhkcC1cXHUwMDNlZGF0YV9lbmQsIDAsIG9mZnNldCk7XFxuNDQ1MjpcXHRcXG40NDUzOlxcdFxcdHhkcC1cXHUwMDNlZGF0YV9lbmQgPSBkYXRhX2VuZDtcXG40NDU0OlxcdFxcbjQ0NTU6XFx0XFx0cmV0dXJuIDA7XFxuNDQ1NjpcXHR9XFxuNDQ1NzpcXHRcXG40NDU4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9hZGp1c3RfdGFpbF9wcm90byA9IHtcXG40NDU5OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfeGRwX2FkanVzdF90YWlsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NTo1Mi4zNTY4MDE4ODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTk1MjIwMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHZldGguYyBhbmQgWERQIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgbmV0d29yayBwZXJmb3JtYW5jZSwgYW5kIHNwZWNpZmljYWxseSwgdGhlIHZldGggcGFpci4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyB0aGluZyBpcyBoYW5kbGluZyBwYWNrZXQgY29udmVyc2lvbnMgdG8gWERQIGJ1ZmZlcnMuIE15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgYGRyaXZlcnMvbmV0L3ZldGguY2AsIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGF0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgb3B0aW1pemF0aW9ucyBvciBib3R0bGVuZWNrcyBpbiBob3cgU0tCcyBhcmUgYmVpbmcgdHJhbnNsYXRlZCB0byB0aGUgWERQIGZvcm1hdCBoZXJlLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgdGhlIG1lbW9yeSBjb3B5aW5nIChvciBsYWNrIHRoZXJlb2YpLCBhbmQgaG93IGVmZmljaWVudGx5IHRoaXMgaXMgYWxsIGJlaW5nIG1hbmFnZWQsIGVzcGVjaWFsbHkgdW5kZXIgbG9hZC4gVGhpcyBmdW5jdGlvbiBpcyBhIGtleSBhcmVhIGZvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgZ2FpbnMsIHNvIGxldCdzIHN0YXJ0IGRpc3NlY3RpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODkyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NjowMC41NTIwMjM4NzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMTkzMjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3ZldGguYz03Mzk9c3RhdGljIHZvaWQgdmV0aF94ZHBfZ2V0KHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTc1MS1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NzUyOnN0YXRpYyBpbnQgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZihzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuZHJpdmVycy9uZXQvdmV0aC5jLTc1My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz03OTc9c3RhdGljIHN0cnVjdCBza19idWZmICp2ZXRoX3hkcF9yY3Zfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy04MTgtXFx0X19za2JfcHVzaChza2IsIHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYikpO1xcbmRyaXZlcnMvbmV0L3ZldGguYzo4MTk6XFx0aWYgKHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYocnEsIHhkcCwgXFx1MDAyNnNrYikpXFxuZHJpdmVycy9uZXQvdmV0aC5jLTgyMC1cXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjAwLjY2MzIyMTA0N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNzIyNDk4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgbmV0L2NvcmUvZGV2LmNgIGZvciBYRFAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIFhEUCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBnZW5lcmljIHBhdGgsIG1lYW5pbmcgd2UncmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIGEgaGFyZHdhcmUgb2ZmbG9hZCBpc24ndCBoYXBwZW5pbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBCUEYgcHJvZ3JhbSBleGVjdXRpb24uIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG5ldC9jb3JlL2Rldi5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgcmVnaW9uIGFyb3VuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgbW9yZSBhY2N1cmF0ZWx5LCB3aGVyZSB0aGUgZmFsbGJhY2sgaGFwcGVucywgaWYgaXQncyBub3QgYSBkaXJlY3QgaGFyZHdhcmUgYWNjZWxlcmF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgWERQIHByb2dyYW0gaXMgaW52b2tlZCBpbiB0aGlzIGdlbmVyYWxpemVkIHNjZW5hcmlvLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgaW4/IEhvdyBpcyB0aGUgcGFja2V0IGJ1ZmZlciBoYW5kbGVkPyBBcmUgd2UgZG9pbmcgYW55IGNvcHkgb3BlcmF0aW9ucyBvciBhcmUgd2UgZGVhbGluZyB3aXRoIHBvaW50ZXJzPyBXaGF0IGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGlzIHBhdGg/IFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgZ2VuZXJpYyBYRFAuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQxNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjA4LjgzNTQ3MzU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5MDc4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTU0ODM9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NTA1LVxcbm5ldC9jb3JlL2Rldi5jOjU1MDY6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5uZXQvY29yZS9kZXYuYy01NTA3LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTU2NDQ9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU2NzEtXFxubmV0L2NvcmUvZGV2LmM6NTY3MjpcXHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoKnBza2IsIHhkcCwgeGRwX3Byb2cpO1xcbm5ldC9jb3JlL2Rldi5jLTU2NzMtXFx0c3dpdGNoIChhY3QpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDY6MDguOTM4Mzg4MTk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3Nzk2MjQ1MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKlhEUCBGcmFtZSBDb252ZXJzaW9uIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFhEUCBmcmFtZSBjb252ZXJzaW9uIHByb2Nlc3MgYmV0dGVyLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSB0aGlua2luZyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvY29yZS94ZHAuY2AsIG9yIHBvdGVudGlhbGx5IGFueXdoZXJlIGVsc2UgdGhhdCBob3VzZXMgdGhlIGB4ZHBfY29udmVydF9mcmFtZV90b19idWZmYCBmdW5jdGlvbiwgb3IgZXZlbiBhbnl3aGVyZSB0aGF0IGNhbGxzIGl0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvbnZlcnNpb24gd29ya3MgYXQgYSBkZWVwZXIgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTcwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDY6MjYuNzM0NjM1OTY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4MzA3NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NjQ0PXN0YXRpYyBpbnQgYm9uZF94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU2NTYtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NjU3OlxcdFxcdHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoZnJhbWUsIFxcdTAwMjZ4ZHApO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTY1OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz02Mzk9c3RhdGljIHN0cnVjdCB4ZHBfZnJhbWUgKnZldGhfeGRwX3Jjdl9vbmUoc3RydWN0IHZldGhfcnEgKnJxLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTY1My1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NjU0OlxcdFxcdHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoZnJhbWUsIHhkcCk7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTY1NS1cXHRcXHR4ZHAtXFx1MDAzZXJ4cSA9IFxcdTAwMjZycS1cXHUwMDNleGRwX3J4cTtcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oPTc0PWVudW0geGRwX2J1ZmZfZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmgtODgtXFx0ICogdGhpcyBpcyBzdHJpcHBlZCBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpIGFuZCByZS1kZXJpdmVkIGZyb21cXG5pbmNsdWRlL25ldC94ZHAuaDo4OTpcXHQgKiA6Om1lbV90eXBlIGluIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoKS5cXG5pbmNsdWRlL25ldC94ZHAuaC05MC1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oPTQwNT1zdGF0aWMgaW5saW5lXFxuaW5jbHVkZS9uZXQveGRwLmg6NDA2OnZvaWQgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSxcXG5pbmNsdWRlL25ldC94ZHAuaC00MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYz0xODM9c3RhdGljIGludCBjcHVfbWFwX2JwZl9wcm9nX3J1bl94ZHAoc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYy0yMDEtXFxua2VybmVsL2JwZi9jcHVtYXAuYzoyMDI6XFx0XFx0eGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZih4ZHBmLCBcXHUwMDI2eGRwKTtcXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTIwMy1cXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9MzM2PXN0YXRpYyBpbnQgZGV2X21hcF9icGZfcHJvZ19ydW4oc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMzUwLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM6MzUxOlxcdFxcdHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoeGRwZiwgXFx1MDAyNnhkcCk7XFxua2VybmVsL2JwZi9kZXZtYXAuYy0zNTItXFx0XFx0eGRwLnR4cSA9IFxcdTAwMjZ0eHE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjI4Ljk5Mjk1MDczM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTIzNTY2NDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipYRFAgRnJhbWUgVXBkYXRlIENhbGxlcnMgLSBBIFF1aWNrIExvb2sqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmZgLiBCZWZvcmUgd2UgZ28gYW55IGZ1cnRoZXIsIEkgd2FudCB0byB0YWtlIGEgcXVpY2sgYXVkaXQgb2YgaXRzIGNhbGxlcnMuIFVuZGVyc3RhbmRpbmcgKndobyogaXMgdXBkYXRpbmcgdGhlIGZyYW1lcyBpcyBjcnVjaWFsIGJlZm9yZSB3ZSBsb29rIGF0ICpob3cqIHRoZXkncmUgYmVpbmcgdXBkYXRlZC4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgcG9zc2libGUgaXNzdWVzLCBhbmQgaGVscHMgaW1tZW5zZWx5IHdpdGggZGVidWdnaW5nLiBJdOKAmXMgYWxzbyBpbXBvcnRhbnQgZm9yIGFueSByZWZhY3RvcmluZyB3b3JrLCBzaW5jZSB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHRlbGxzIHVzIHdoYXQgdG8gYmUgY2FyZWZ1bCBvZiwgd2hhdCBkZXBlbmRlbmNpZXMgd2UgaGF2ZSwgZXRjLiBMZXQncyB0cmFjZSBpdCBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MTIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NjozMi41MTY1MjAwODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjM2ODA3NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jPTYzOT1zdGF0aWMgc3RydWN0IHhkcF9mcmFtZSAqdmV0aF94ZHBfcmN2X29uZShzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNjYxLVxcdFxcdGNhc2UgWERQX1BBU1M6XFxuZHJpdmVycy9uZXQvdmV0aC5jOjY2MjpcXHRcXHRcXHRpZiAoeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoeGRwLCBmcmFtZSkpXFxuZHJpdmVycy9uZXQvdmV0aC5jLTY2My1cXHRcXHRcXHRcXHRnb3RvIGVycl94ZHA7XFxuLS1cXG5pbmNsdWRlL25ldC94ZHAuaD03ND1lbnVtIHhkcF9idWZmX2ZsYWdzIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oLTg3LVxcdCAqIHhkcF9idWZmIG9ubHk6IGFuIHhkcF9mcmFtZSBkZXNjcmliZXMgaXRzIG1lbW9yeSB3aXRoIDo6bWVtX3R5cGUsIHNvXFxuaW5jbHVkZS9uZXQveGRwLmg6ODg6XFx0ICogdGhpcyBpcyBzdHJpcHBlZCBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpIGFuZCByZS1kZXJpdmVkIGZyb21cXG5pbmNsdWRlL25ldC94ZHAuaC04OS1cXHQgKiA6Om1lbV90eXBlIGluIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoKS5cXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oPTQwNj12b2lkIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUsXFxuLS1cXG5pbmNsdWRlL25ldC94ZHAuaC00MTYtXFx0ICogZnJhbWUtXFx1MDAzZWZsYWdzIG5ldmVyIGNhcnJpZXMgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCAoaXQgaXMgc3RyaXBwZWRcXG5pbmNsdWRlL25ldC94ZHAuaDo0MTc6XFx0ICogaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSk7IHJlLWRlcml2ZSBpdCBmcm9tIHRoZSBmcmFtZSdzIG93blxcbmluY2x1ZGUvbmV0L3hkcC5oLTQxOC1cXHQgKiBtZW1vcnkgdHlwZS4gdmV0aCBhbmQgZGV2bWFwIHJlYnVpbGQgYSBidWZmIGhlcmUgYW5kIHJ1biBhIHByb2dyYW1cXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oPTQyNj1zdGF0aWMgaW5saW5lXFxuaW5jbHVkZS9uZXQveGRwLmg6NDI3OmludCB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5pbmNsdWRlL25ldC94ZHAuaC00MjgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9mcmFtZSlcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oPTQ1OD1zdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmgtNDY2LVxcdHhkcF9mcmFtZSA9IHhkcC1cXHUwMDNlZGF0YV9oYXJkX3N0YXJ0O1xcbmluY2x1ZGUvbmV0L3hkcC5oOjQ2NzpcXHRpZiAodW5saWtlbHkoeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoeGRwLCB4ZHBfZnJhbWUpIFxcdTAwM2MgMCkpXFxuaW5jbHVkZS9uZXQveGRwLmgtNDY4LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYz0xODM9c3RhdGljIGludCBjcHVfbWFwX2JwZl9wcm9nX3J1bl94ZHAoc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYy0yMDYtXFx0XFx0Y2FzZSBYRFBfUEFTUzpcXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjIwNzpcXHRcXHRcXHRlcnIgPSB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihcXHUwMDI2eGRwLCB4ZHBmKTtcXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTIwOC1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYz0zMzY9c3RhdGljIGludCBkZXZfbWFwX2JwZl9wcm9nX3J1bihzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nLFxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYy0zNTctXFx0XFx0Y2FzZSBYRFBfUEFTUzpcXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjM1ODpcXHRcXHRcXHRlcnIgPSB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihcXHUwMDI2eGRwLCB4ZHBmKTtcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTM1OS1cXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyIFxcdTAwM2MgMCkpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTE5PXN0YXRpYyB2b2lkIHhkcF90ZXN0X3J1bl9pbml0X3BhZ2UobmV0bWVtX3JlZiBuZXRtZW0sIHZvaWQgKmFyZylcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNDMtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE0NDpcXHR4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihuZXdfY3R4LCBmcm0pO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNDUtXFx0ZnJtLVxcdTAwM2VtZW1fdHlwZSA9IG5ld19jdHgtXFx1MDAzZXJ4cS1cXHUwMDNlbWVtLnR5cGU7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MjI5PXN0YXRpYyB2b2lkIHJlc2V0X2N0eChzdHJ1Y3QgeGRwX3BhZ2VfaGVhZCAqaGVhZClcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0yMzYtXFx0aGVhZC1cXHUwMDNlY3R4LmRhdGFfZW5kID0gaGVhZC1cXHUwMDNlb3JpZ19jdHguZGF0YV9lbmQ7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjIzNzpcXHR4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihcXHUwMDI2aGVhZC1cXHUwMDNlY3R4LCBoZWFkLVxcdTAwM2VmcmFtZSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTIzOC1cXHRoZWFkLVxcdTAwM2VmcmFtZS1cXHUwMDNlbWVtX3R5cGUgPSBoZWFkLVxcdTAwM2VvcmlnX2N0eC5yeHEtXFx1MDAzZW1lbS50eXBlO1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTI3Mz1zdGF0aWMgaW50IHhkcF90ZXN0X3J1bl9iYXRjaChzdHJ1Y3QgeGRwX3Rlc3RfZGF0YSAqeGRwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzA5LVxcdFxcdGlmICh1bmxpa2VseShjdHhfd2FzX2NoYW5nZWQoaGVhZCkpKSB7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjMxMDpcXHRcXHRcXHRyZXQgPSB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZihjdHgsIGZybSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTMxMS1cXHRcXHRcXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjM0Ljc0MDIwNjI2OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA4MTY3NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktjb25maWcgRGVwZW5kZW5jaWVzIC0gQSBRdWljayBDaGVjayoqXG5cbk9rYXksIHRpbWUgdG8gbWFrZSBzdXJlIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBsaW5pbmcgdXAgYXMgSSBleHBlY3QuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIGtleSBkZXBlbmRlbmNpZXMuIExldCdzIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3ZldGguY2AuIFRoZSBjb2RlIHNob3VsZCBiZSBndWFyZGVkIGJ5IGBDT05GSUdfVkVUSGAsIGFzIGl0IGFsd2F5cyBpcy4gTWFrZXMgc2Vuc2UuIFRoZW4gdGhlcmUncyBCUEYgYW5kIFhEUC4gVGhvc2UgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19ORVRgLiBZZXAsIHRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEp1c3QgZG91YmxlLWNoZWNraW5nIGV2ZXJ5dGhpbmcuIE5vdywgZm9yIFZFVEggc3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHZlcmlmeSB0aGUgS2NvbmZpZyBzZXR1cCBpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBKdXN0IGdvb2QgcHJhY3RpY2UsIHlvdSBrbm93PyBLZWVwaW5nIHRoaW5ncyB0aWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI4MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjM3Ljc0ODM3Njc4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNTM2MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTQyMT1jb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDM0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDM1OmNvbmZpZyBWRVRIXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzYtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjM3Ljk1OTkxNzE5OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDYyMzkxMzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBzb21ldGhpbmcgbmV0d29yay1yZWxhdGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgdmFyaW91cyBuZXR3b3JrIGRyaXZlcnMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIE15IG1lbnRhbCBjaGVja2xpc3Qgc2F5cywgXCJLY29uZmlnIGZpbGVzIGFyZSBvZnRlbiB0aGUga2V5IHRvIHRoaXMgc29ydCBvZiB0aGluZy5cIiBHaXZlbiB0aGF0IGdlbmVyYWwga25vd2xlZGdlLCBJIGltbWVkaWF0ZWx5IHplcm9lZCBpbiBvbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIFRoYXQgZGlyZWN0b3J5IGlzIGFsbW9zdCBhbHdheXMgdGhlIG5lcnZlIGNlbnRlciBmb3IgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbiBpbiB0aGUga2VybmVsLlxuXG5JIG5lZWQgdG8gZm9jdXMgbXkgc2VhcmNoIG9uIGEgc3BlY2lmaWMgbGluZSB0byBjdXQgdGhlIG5vaXNlLiBDb25zaWRlcmluZyBJIGtub3cgdGhlIGdlbmVyYWwgc2hhcGUgb2YgS2NvbmZpZyBmaWxlcywgSSBmaWd1cmUgbGluZXMgYXJvdW5kIDQzNSBpbiB0aGUgS2NvbmZpZyBmaWxlIGNvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSB0YXJnZXRlZCBzZWFyY2guIEknbSBub3QgZW50aXJlbHkgc3VyZSAqd2hhdCogSSdsbCBmaW5kIHRoZXJlIHlldCwgYnV0IGl0J3MgYSByZWFzb25hYmxlIGFzc3VtcHRpb24gdGhhdCBpbXBvcnRhbnQgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHdvdWxkIGJlIGRlZmluZWQgd2l0aGluIHRoYXQgYXJlYSBvZiB0aGUgZmlsZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0Njo0MS40MjIzMTI0NDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDMwOlxcdFxcdCAgYW5kIFRVTkdFVFZORVRCRSBpb2N0bHMuXFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdCAgVW5sZXNzIHlvdSBoYXZlIGEgbGl0dGxlLWVuZGlhbiBzeXN0ZW0gaG9zdGluZyBhIGJpZy1lbmRpYW4gdmlydHVhbFxcbiA0MzM6XFx0XFx0ICBtYWNoaW5lIHdpdGggYSBsZWdhY3kgdmlydGlvIE5JQywgeW91IHNob3VsZCBzYXkgTi5cXG4gNDM0OlxcdFxcbiA0MzU6XFx0Y29uZmlnIFZFVEhcXG4gNDM2OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIGV0aGVybmV0IHBhaXIgZGV2aWNlXFxcIlxcbiA0Mzc6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiA0Mzg6XFx0XFx0aGVscFxcbiA0Mzk6XFx0XFx0ICBUaGlzIGRldmljZSBpcyBhIGxvY2FsIGV0aGVybmV0IHR1bm5lbC4gRGV2aWNlcyBhcmUgY3JlYXRlZCBpbiBwYWlycy5cXG4gNDQwOlxcdFxcdCAgV2hlbiBvbmUgZW5kIHJlY2VpdmVzIHRoZSBwYWNrZXQgaXQgYXBwZWFycyBvbiBpdHMgcGFpciBhbmQgdmljZVxcbiA0NDE6XFx0XFx0ICB2ZXJzYS5cXG4gNDQyOlxcdFxcbiA0NDM6XFx0Y29uZmlnIFZJUlRJT19ORVRcXG4gNDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0aW8gbmV0d29yayBkcml2ZXJcXFwiXFxuIDQ0NTpcXHRcXHRkZXBlbmRzIG9uIFZJUlRJT1xcbiA0NDY6XFx0XFx0c2VsZWN0IE5FVF9GQUlMT1ZFUlxcbiA0NDc6XFx0XFx0c2VsZWN0IERJTUxJQlxcbiA0NDg6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiA0NDk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0Njo0MS40MjI1NjkyMzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIyNjE0MjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBYRFAvQlBGIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgcmVnYXJkaW5nIFhEUCBhbmQgQlBGIGNvbmZpZ3VyYXRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzY2FuIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgY29uZmlncy4gSSdsbCBmb2N1cyBvbiBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCDigJMgdGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aG9zZS5cblxuQmV5b25kIHRob3NlIGJhc2ljcywgSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGF0IGhvdyBgYnBmX3hkcF9hZGp1c3RfdGFpbGAgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBlbmFibGVkIHVuZGVyIGVpdGhlciBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciBgQ09ORklHX05FVGAsIG9yIHBlcmhhcHMgYm90aC4gVGhhdCB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmN5IHNldHVwLiBJJ20gaGVhZGluZyB0byBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ2OjQ1LjY0ODcxNTQ5MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1ODA5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3hkcF9hZGp1c3RfdGFpbF9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz00NDMwPUJQRl9DQUxMXzIoYnBmX3hkcF9hZGp1c3RfdGFpbCwgc3RydWN0IHhkcF9idWZmICosIHhkcCwgaW50LCBvZmZzZXQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NDU3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ0NTg6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2FkanVzdF90YWlsX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0NTktXFx0LmZ1bmNcXHRcXHQ9IGJwZl94ZHBfYWRqdXN0X3RhaWwsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NzY2PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODc4My1cXHRjYXNlIEJQRl9GVU5DX3hkcF9hZGp1c3RfdGFpbDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4Nzg0OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3hkcF9hZGp1c3RfdGFpbF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg1LVxcdGNhc2UgQlBGX0ZVTkNfeGRwX2dldF9idWZmX2xlbjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDY6NDUuNzE4MzAzNTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA3NDkzMTI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaWdnaW5nIGludG8gdGhlIE5ldGxpbmsgQnVpbGQgUHJvY2VzcyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldGxpbmsgbW9kdWxlcyBhcmUgYXNzZW1ibGVkLCBzcGVjaWZpY2FsbHkgYGRldi5jYCBhbmQgYGZpbHRlci5jYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIGZvciB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIEl0J2xsIHNob3cgbWUgaG93IHRoZXNlIHNwZWNpZmljIEMgZmlsZXMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbmNvcnBvcmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBrZXJuZWwgbW9kdWxlIG9yIGV4ZWN1dGFibGUuIFRoaXMgYE1ha2VmaWxlYCBpcyB0aGUgUm9zZXR0YSBTdG9uZSBmb3IgdW5kZXJzdGFuZGluZyB0aGlzIGJ1aWxkIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0Njo1MC43OTMyMzc3NzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjQ2NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbHRlclxcXFwub3xkZXZcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9jb3JlLm9cXG5uZXQvY29yZS9NYWtlZmlsZS0xMS1cXG5uZXQvY29yZS9NYWtlZmlsZToxMjpvYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0Njo1MC44Njg4ODgyMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDc5MzMwNjE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBOZXR3b3JrL0JQRiBDb2RlIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIG5vdGluZyB0aGF0IGBkZXYub2AgYW5kIGBmaWx0ZXIub2AgYXJlIGJ1aWx0IHdpdGggYENPTkZJR19ORVQ9eWAsIHdoaWNoIGlzIGV4cGVjdGVkLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCBmb3IgQlBGIHByb2dyYW1zIGFuZCBYRFAsIGFuZCBgQ09ORklHX1ZFVEhgIGlzIGVuYWJsZWQgZm9yIHZldGggc3VwcG9ydC4gR29vZC5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMuIEkndmUgcGlucG9pbnRlZCBzZXZlcmFsOiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpbiBgbmV0L2NvcmUvZGV2LmNgLCB3aGljaCBpcyBkaXJlY3RseSBtb2RpZmllZCB0byBzZXQgYHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcClgIG9uIG5vbmxpbmVhciBza2JzLiBgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZmAgaW4gYGRyaXZlcnMvbmV0L3ZldGguY2AsIHdoaWNoIGFsc28gbWFuaXB1bGF0ZXMgZnJhZ21lbnRzIGJ5IHNldHRpbmcgYHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcClgLiAgYGJwZl94ZHBfc2hyaW5rX2RhdGFgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgaW1wb3J0YW50OyBpdCBjaGVja3MgYHhkcF9idWZmX2lzX2ZyYWdfcHAoeGRwKWAgYW5kIHNldHMgYG1lbV90eXBlYC4gQW5kIGZpbmFsbHksIHRoZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgYW5kIGB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZmAgaW4gYGluY2x1ZGUvbmV0L3hkcC5oYC4gVGhlc2UgYXJlIGltcG9ydGFudCBiZWNhdXNlIHdlIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgdGhlaXIgbm9uLXN0YXRpYyBjYWxsZXJzIHJlc2lkZS5cblxuTm93LCBsZXQncyBhY2NvdW50IGZvciB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIG9mIHRob3NlIHN0YXRpYyBpbmxpbmVzIG9yIGRpcmVjdCBlbnRyeXBvaW50cywgc2luY2UgdGhlc2Ugd2lsbCBiZSBpbXBvcnRhbnQgZm9yIGNvdmVyYWdlOiBgYnBmX3hkcF9mcmFnc19zaHJpbmtfdGFpbGAgb3IgYGJwZl94ZHBfYWRqdXN0X3RhaWxgLCBgYnBmX3hkcF9wdWxsX2RhdGFgLCBgdmV0aF94ZHBfcmN2X29uZWAsIGB2ZXRoX3hkcF9yY3Zfc2tiYCwgYW5kIGBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwYC5cblxuU2luY2UgYGJwZl94ZHBfc2hyaW5rX2RhdGFgIGlzIHN0YXRpYywgSSdtIGluY2x1ZGluZyBgYnBmX3hkcF9hZGp1c3RfdGFpbGAsIGBicGZfeGRwX3B1bGxfZGF0YWAsIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLCBgdmV0aF94ZHBfcmN2X3NrYmAsIGFuZCBgdmV0aF94ZHBfcmN2X29uZWAuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIHN5bWJvbCBuYW1lcyBmb3IgYGJwZl94ZHBfYWRqdXN0X3RhaWxgLiBCYXNlZCBvbiB0aGUga2VybmVsIHZtbGludXgsIEknbSBjb25maXJtaW5nIHRoYXQgYEJQRl9DQUxMXzIoYnBmX3hkcF9hZGp1c3RfdGFpbCwgLi4uKWAgcmVzb2x2ZXMgdG8gYF9fX2JwZl94ZHBfYWRqdXN0X3RhaWxgIG9yIGBicGZfeGRwX2FkanVzdF90YWlsYC4gYGJwZl94ZHBfcHVsbF9kYXRhYCB1c2VzIGBfX2JwZl9rZnVuY2AuIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIGdsb2JhbCwgYW5kIGBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwYCBpcyBzdGF0aWMuXG5cblRoZSBmdXp6aW5nIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGFic29sdXRlbHkgXCJXb3J0aEZ1enppbmdcIiBiZWNhdXNlIGl0IHRvdWNoZXMgbmV0d29yayBhbmQgQlBGIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kLCBpbXBvcnRhbnRseSwgZml4ZXMgYSBtZW1vcnkgbGVhayBvciBiYWQgcGFnZSBzdGF0ZSB3aGVuIHNocmlua2luZyBmcmFnbWVudHMgb24gZ2VuZXJpYyBYRFAgYW5kIHZldGguXG5cblRoZSBmaW5hbCBcIkZvY3VzU3ltYm9sc1wiIGxpc3QgaXM6XG4qICAgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGBcbiogICBgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZmBcbiogICBgYnBmX3hkcF9zaHJpbmtfZGF0YWBcbiogICBgYnBmX3hkcF9hZGp1c3RfdGFpbGBcbiogICBgYnBmX3hkcF9wdWxsX2RhdGFgXG4qICAgYHZldGhfeGRwX3Jjdl9za2JgXG4qICAgYHZldGhfeGRwX3Jjdl9vbmVgXG5cbkFuZCB0aGUgcmVxdWlyZWQgXCJFbmFibGVDb25maWdzXCIgYXJlOlxuKiAgIGBORVRgXG4qICAgYEJQRl9TWVNDQUxMYFxuKiAgIGBWRVRIYFxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIEV2ZXJ5dGhpbmcgaGFzIGJlZW4gY29uc2lkZXJlZCBhbmQgZG91YmxlLWNoZWNrZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTE5LCJPdXRwdXRUb2tlbnMiOjIwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MDEuNjYyMTk2MjExWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MTc5MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJWRVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gICAgXCJicGZfeGRwX2FkanVzdF90YWlsXCIsXG4gICAgXCJicGZfeGRwX3B1bGxfZGF0YVwiLFxuICAgIFwiYnBmX3hkcF9zaHJpbmtfZGF0YVwiLFxuICAgIFwidmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZlwiLFxuICAgIFwidmV0aF94ZHBfcmN2X3NrYlwiLFxuICAgIFwidmV0aF94ZHBfcmN2X29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFhEUCBmcmFnbWVudCBoYW5kbGluZyBsb2dpYyBhY3Jvc3MgY29yZSBuZXR3b3JraW5nLCBnZW5lcmljIFhEUCwgYW5kIHRoZSB2ZXRoIGRyaXZlciB0byBwcm9wZXJseSB0cmFjayBwYWdlX3Bvb2wgYmFja2VkIGZyYWdtZW50cyB3aGVuIHNocmlua2luZyBYRFAgYnVmZmVycy4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2VzICh2ZXRoLCB0dW4vdGFwKSBhbmQgQlBGL1hEUCBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJWRVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gICAgXCJicGZfeGRwX2FkanVzdF90YWlsXCIsXG4gICAgXCJicGZfeGRwX3B1bGxfZGF0YVwiLFxuICAgIFwiYnBmX3hkcF9zaHJpbmtfZGF0YVwiLFxuICAgIFwidmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZlwiLFxuICAgIFwidmV0aF94ZHBfcmN2X3NrYlwiLFxuICAgIFwidmV0aF94ZHBfcmN2X29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFhEUCBmcmFnbWVudCBoYW5kbGluZyBsb2dpYyBhY3Jvc3MgY29yZSBuZXR3b3JraW5nLCBnZW5lcmljIFhEUCwgYW5kIHRoZSB2ZXRoIGRyaXZlciB0byBwcm9wZXJseSB0cmFjayBwYWdlX3Bvb2wgYmFja2VkIGZyYWdtZW50cyB3aGVuIHNocmlua2luZyBYRFAgYnVmZmVycy4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2VzICh2ZXRoLCB0dW4vdGFwKSBhbmQgQlBGL1hEUCBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MDEuNzcwMzgyMzM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTc0NjU0MTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ3OjAxLjc3MDg5ODA4NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5NzQ2MDE5NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHRoZSBpbnRlcm5hbCBmbGFnIGBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MYCB0byBgeGRwX2J1ZmZgIHRvIHRyYWNrIHdoZXRoZXIgbm9ubGluZWFyIHNrYiBmcmFnbWVudHMgd2VyZSBDT1cnZCBpbnRvIGEgYHBhZ2VfcG9vbGAuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYW4gWERQIHByb2dyYW0gc2hyaW5rcyB0aGUgYnVmZmVyIGFuZCByZWxlYXNlcyBmcmFnbWVudHMsIHRoZXkgYXJlIHByb3Blcmx5IGZyZWVkIGJhY2sgdG8gdGhlIHBhZ2UgcG9vbCByYXRoZXIgdGhhbiB0aHJvdWdoIGBwYWdlX2ZyYWdfZnJlZSgpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwYWdlIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgYWxsb2NhdG9yIHR5cGUgbWlzbWF0Y2ggYnVnICh3aGljaCB3b3VsZCBtYW5pZmVzdCBhcyBwYWdlIHBvb2wgbGVha3MsIGJhZCBwYWdlIHN0YXRlLCBvciBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nIGxlYWtzLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGludmFsaWQgbWVtb3J5IGZyZWUpIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgcGFnZS9yZWZjb3VudCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0NjQyZjIxZjE4MDE2MGU1MzQ2Mzk2YWU2OGQ2MGMzMjkzZTgzMDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNDo0NTozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuaW5kZXggNmVkM2VlODExNTNmYi4uYTNmZGYxOTU5Yjc2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3ZldGguY1xuKysrIGIvZHJpdmVycy9uZXQvdmV0aC5jXG5AQCAtNzc1LDYgKzc3NSwxMiBAQCBzdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxuIFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncykge1xuIFx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNleGRwX2ZyYWdzX3NpemUgPSBza2ItXHUwMDNlZGF0YV9sZW47XG4gXHRcdHhkcF9idWZmX3NldF9mcmFnc19mbGFnKHhkcCk7XG4rXHRcdC8qXG4rXHRcdCAqIEEgbm9ubGluZWFyIHNrYiB3YXMgY293J2QgaW50byBycS1cdTAwM2VwYWdlX3Bvb2wgYWJvdmUsIHNvIHRoZVxuK1x0XHQgKiBmcmFncyBtdXN0IGJlIGZyZWVkIHRvIHRoYXQgcG9vbCwgbm90IHZpYSB0aGUgcnhxJ3NcbitcdFx0ICogTUVNX1RZUEVfUEFHRV9TSEFSRUQuXG4rXHRcdCAqL1xuK1x0XHR4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApO1xuIFx0fSBlbHNlIHtcbiBcdFx0eGRwX2J1ZmZfY2xlYXJfZnJhZ3NfZmxhZyh4ZHApO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcC5oIGIvaW5jbHVkZS9uZXQveGRwLmhcbmluZGV4IGFhNzQyZjQxM2MzNTguLjhmZDQxMzllOWNiZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZHAuaFxuKysrIGIvaW5jbHVkZS9uZXQveGRwLmhcbkBAIC04MSw2ICs4MSwxNCBAQCBlbnVtIHhkcF9idWZmX2ZsYWdzIHtcbiBcdCAqIFhEUCBwcm9ncmFtIGlzIG5vdCBhdHRhY2hlZC5cbiBcdCAqL1xuIFx0WERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEVcdD0gQklUKDIpLFxuK1x0LypcbitcdCAqIGZyYWdzIGFyZSBwYWdlX3Bvb2wgbWVtb3J5IGV2ZW4gdGhvdWdoIHJ4cS1cdTAwM2VtZW0udHlwZSBpcyBub3Q6IGFcbitcdCAqIHNrYi1iYWNrZWQgWERQIGJ1ZmYgKGdlbmVyaWMgWERQLCB2ZXRoKSBpcyBjb3cnZCBpbnRvIGEgcGFnZV9wb29sLlxuK1x0ICogeGRwX2J1ZmYgb25seTogYW4geGRwX2ZyYW1lIGRlc2NyaWJlcyBpdHMgbWVtb3J5IHdpdGggOjptZW1fdHlwZSwgc29cbitcdCAqIHRoaXMgaXMgc3RyaXBwZWQgaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSBhbmQgcmUtZGVyaXZlZCBmcm9tXG4rXHQgKiA6Om1lbV90eXBlIGluIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoKS5cbitcdCAqL1xuK1x0WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTFx0PSBCSVQoMyksXG4gfTtcbiBcbiBzdHJ1Y3QgeGRwX2J1ZmYge1xuQEAgLTEzMSw2ICsxMzksMTYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHhkcF9idWZmX3NldF9mcmFnX3VucmVhZGFibGUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4gXHR4ZHAtXHUwMDNlZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1VOUkVBREFCTEU7XG4gfVxuIFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB4ZHBfYnVmZl9zZXRfZnJhZ19wcChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbit7XG4rXHR4ZHAtXHUwMDNlZmxhZ3MgfD0gWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHhkcF9idWZmX2lzX2ZyYWdfcHAoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApXG4re1xuK1x0cmV0dXJuICEhKHhkcC1cdTAwM2VmbGFncyBcdTAwMjYgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHhkcF9idWZmX2dldF9za2JfZmxhZ3MoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHApXG4ge1xuIFx0cmV0dXJuIHhkcC1cdTAwM2VmbGFncztcbkBAIC0zOTQsNiArNDEyLDE1IEBAIHZvaWQgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZihjb25zdCBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSxcbiBcdHhkcC1cdTAwM2VkYXRhX21ldGEgPSBmcmFtZS1cdTAwM2VkYXRhIC0gZnJhbWUtXHUwMDNlbWV0YXNpemU7XG4gXHR4ZHAtXHUwMDNlZnJhbWVfc3ogPSBmcmFtZS1cdTAwM2VmcmFtZV9zejtcbiBcdHhkcC1cdTAwM2VmbGFncyA9IGZyYW1lLVx1MDAzZWZsYWdzO1xuK1x0LypcbitcdCAqIGZyYW1lLVx1MDAzZWZsYWdzIG5ldmVyIGNhcnJpZXMgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCAoaXQgaXMgc3RyaXBwZWRcbitcdCAqIGluIHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKCkpOyByZS1kZXJpdmUgaXQgZnJvbSB0aGUgZnJhbWUncyBvd25cbitcdCAqIG1lbW9yeSB0eXBlLiB2ZXRoIGFuZCBkZXZtYXAgcmVidWlsZCBhIGJ1ZmYgaGVyZSBhbmQgcnVuIGEgcHJvZ3JhbVxuK1x0ICogd2hvc2UgcnhxIHNheXMgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIHNvIHdpdGhvdXQgdGhpcyBhIHNocmluayB3b3VsZFxuK1x0ICogZnJlZSBhIHBhZ2VfcG9vbCBmcmFnIHRocm91Z2ggcGFnZV9mcmFnX2ZyZWUoKS5cbitcdCAqL1xuK1x0aWYgKGZyYW1lLVx1MDAzZW1lbV90eXBlID09IE1FTV9UWVBFX1BBR0VfUE9PTClcbitcdFx0eGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZVxuQEAgLTQyMCw3ICs0NDcsOCBAQCBpbnQgeGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4gXHR4ZHBfZnJhbWUtXHUwMDNlaGVhZHJvb20gPSBoZWFkcm9vbSAtIHNpemVvZigqeGRwX2ZyYW1lKTtcbiBcdHhkcF9mcmFtZS1cdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xuIFx0eGRwX2ZyYW1lLVx1MDAzZWZyYW1lX3N6ID0geGRwLVx1MDAzZWZyYW1lX3N6O1xuLVx0eGRwX2ZyYW1lLVx1MDAzZWZsYWdzID0geGRwLVx1MDAzZWZsYWdzO1xuK1x0LyogWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTCBpcyB4ZHBfYnVmZiBvbmx5LCBkb24ndCBjYXJyeSBpdCBvdmVyICovXG4rXHR4ZHBfZnJhbWUtXHUwMDNlZmxhZ3MgPSB4ZHAtXHUwMDNlZmxhZ3MgXHUwMDI2IH5YRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDI5MGUwZjA5OWU2YmYuLjk0MjY4ZjRkM2M1ZjcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC01NTMyLDYgKzU1MzIsMTIgQEAgdTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbiBcdGlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZXhkcF9mcmFnc19zaXplID0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFx0XHR4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApO1xuK1x0XHQvKlxuK1x0XHQgKiBBIG5vbmxpbmVhciBza2Igd2FzIGNvdydkIGludG8gcGFnZV9wb29sIG1lbW9yeSBieVxuK1x0XHQgKiBza2JfY293X2RhdGFfZm9yX3hkcCgpIGJlZm9yZSB3ZSBnb3QgaGVyZSwgc28gdGhlIGZyYWdzIG11c3RcbitcdFx0ICogYmUgZnJlZWQgdG8gdGhhdCBwb29sLCBub3QgdmlhIHRoZSByeHEncyBNRU1fVFlQRV9QQUdFX1NIQVJFRC5cbitcdFx0ICovXG4rXHRcdHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR4ZHBfYnVmZl9jbGVhcl9mcmFnc19mbGFnKHhkcCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggNjE5NDBlNzUzNTUyMy4uZDM0YmE1NmQ3OWQ4ZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTQzNzgsNiArNDM3OCwxMyBAQCBzdGF0aWMgYm9vbCBicGZfeGRwX3Nocmlua19kYXRhKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBza2JfZnJhZ190ICpmcmFnLFxuIFx0aWYgKG1lbV90eXBlID09IE1FTV9UWVBFX1hTS19CVUZGX1BPT0wpIHtcbiBcdFx0bmV0bWVtID0gMDtcbiBcdFx0emNfZnJhZyA9IGJwZl94ZHBfc2hyaW5rX2RhdGFfemMoeGRwLCBzaHJpbmssIHRhaWwsIHJlbGVhc2UpO1xuK1x0fSBlbHNlIGlmICh4ZHBfYnVmZl9pc19mcmFnX3BwKHhkcCkpIHtcbitcdFx0LypcbitcdFx0ICogU2tiLWJhY2tlZCBYRFAgKGdlbmVyaWMgWERQLCB2ZXRoKSBjb3cncyB0aGUgZnJhZ3MgaW50byBhXG4rXHRcdCAqIHBhZ2VfcG9vbCB3aGlsZSB0aGUgcnhxIHN0YXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyBmcmVlXG4rXHRcdCAqIHRoZSBmcmFnIHRvIHRoZSBwb29sLCBub3QgdmlhIHBhZ2VfZnJhZ19mcmVlKCkuXG4rXHRcdCAqL1xuK1x0XHRtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfUE9PTDtcbiBcdH1cbiBcbiBcdGlmIChyZWxlYXNlKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU4ZjkwMzRhMjY4NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX3Nocmlua19mcmFncy5jXG5AQCAtMCwwICsxLDI4OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl90dW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJ4ZHBfc2hyaW5rX2ZyYWdzLnNrZWwuaFwiXG4rXG4rLypcbisgKiBBIGdlbmVyaWMtWERQIHByb2dyYW0gdGhhdCBzaHJpbmtzIGludG8gdGhlIGZyYWdzIGZyZWVzIGEgcGFnZV9wb29sIGZyYWcuXG4rICogc2tiLWJhY2tlZCBYRFAgZmlyc3QgY293J3MgdGhlIG5vbmxpbmVhciBza2IgaW50byBwYWdlX3Bvb2wgbWVtb3J5XG4rICogKHNrYl9jb3dfZGF0YV9mb3JfeGRwKCkgZm9yIGdlbmVyaWMgWERQLCBza2JfcHBfY293X2RhdGEoKSBmb3IgdmV0aCksIGJ1dFxuKyAqIHRoZSBzaGFyZWQgcnhxIGlzIHJlZ2lzdGVyZWQgYXMgTUVNX1RZUEVfUEFHRV9TSEFSRUQsIHNvIGEgYnVnZ3kga2VybmVsXG4rICogZnJlZXMgdGhlIGZyYWcgd2l0aCBwYWdlX2ZyYWdfZnJlZSgpIC1cdTAwM2UgXCJCYWQgcGFnZSBzdGF0ZSAuLi4gcGFnZV9wb29sIGxlYWtcIi5cbisgKi9cbitcbisjZGVmaW5lIFRBUF9OQU1FXHRcInhkcF9zaHJpbmswXCJcbisjZGVmaW5lIFRBUF9ORVROU1x0XCJ4ZHBfc2hyaW5rX3RhcFwiXG4rXG4rI2RlZmluZSBOU19OQU1FX01BWF9MRU5cdDMyXG4rI2RlZmluZSBWRVRIX0xPQ0FMXHRcInhkcF9zaHJpbmtBXCJcbisjZGVmaW5lIFZFVEhfUEVFUlx0XCJ4ZHBfc2hyaW5rQlwiXG4rI2RlZmluZSBWRVRIX0xPQ0FMX0lQXHRcIjEwLjkuOS4xXCJcbisjZGVmaW5lIFZFVEhfUEVFUl9JUFx0XCIxMC45LjkuMlwiXG4rI2RlZmluZSBWRVRIX0xPQ0FMX01BQ1x0XCIwMjowMDowMDowMDowMDowMVwiXG4rXG4rLypcbisgKiBza2JfcHBfY293X2RhdGEoKSBrZWVwcyB1cCB0byBvbmUgcGFnZSBpbiB0aGUgbGluZWFyIHBhcnQsIHNvIHRoZSBwYWNrZXRcbisgKiBzaXplcyBiZWxvdyBvbmx5IGxlYXZlIGEgZnJhZyAoc21hbGxlciB0aGFuIHRoZSAzMDAwLWJ5dGUgc2hyaW5rLCBzbyBpdCBpc1xuKyAqIHJlbGVhc2VkIGFzIGEgd2hvbGUpIG9uIDRLIHBhZ2VzLiBTa2lwIGVsc2V3aGVyZSByYXRoZXIgdGhhbiBydW4gYSB0ZXN0XG4rICogdGhhdCBjYW5ub3QgdGVsbCBhIGZpeGVkIGtlcm5lbCBmcm9tIGEgYnVnZ3kgb25lLlxuKyAqL1xuKyNkZWZpbmUgUEFHRV9TSVpFXzRLXHQ0MDk2XG4rXG4rLypcbisgKiBHZW5lcm91cywgc28gYSBsb2FkZWQgQ0kgZG9lcyBub3QgZmFpbCB0aGUgYXNzZXJ0IHByZW1hdHVyZWx5OyBub3JtYWxseVxuKyAqIHRoZSBmaXJzdCBjaGVjayBhbHJlYWR5IHN1Y2NlZWRzLlxuKyAqL1xuKyNkZWZpbmUgV0FJVF9JVEVSU1x0MTAwMDBcbisjZGVmaW5lIFdBSVRfVVNcdFx0MTAwMFxuK1xuK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3Byb2coc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBXQUlUX0lURVJTIFx1MDAyNlx1MDAyNiAhc2tlbC1cdTAwM2Vic3MtXHUwMDNlc2hyaW5rX3JhbjsgaSsrKVxuK1x0XHR1c2xlZXAoV0FJVF9VUyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY3JlYXRlX3RhcF9uYXBpX2ZyYWdzKGNvbnN0IGNoYXIgKmlmbmFtZSlcbit7XG4rXHRzdHJ1Y3QgaWZyZXEgaWZyID0ge1xuK1x0XHQuaWZyX2ZsYWdzID0gSUZGX1RBUCB8IElGRl9OT19QSSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MsXG4rXHR9O1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRzdHJzY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTtcbitcbitcdGZkID0gb3BlbihcIi9kZXYvbmV0L3R1blwiLCBPX1JEV1IpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0ZXJyID0gaW9jdGwoZmQsIFRVTlNFVElGRiwgXHUwMDI2aWZyKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZXJyID0gLWVycm5vO1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuKy8qXG4rICogU2ltaWxhciB0byBmbG93X2Rpc3NlY3Rvci5jOiB3cml0ZXYoKSBhbiBJRkZfTkFQSV9GUkFHUyB0YXAgdG8gYnVpbGQgYVxuKyAqIG5vbmxpbmVhciBza2IgdGhhdCB0dW4gcnVucyB0aHJvdWdoIGRvX3hkcF9nZW5lcmljKCkuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdF90dW4oc3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWwpXG4re1xuK1x0X191OCBoZWFkWzc0XSwgZnJhZzFbMjA0OF0sIGZyYWcyWzIwNDhdO1xuK1x0c3RydWN0IGV0aGhkciAqZXRoID0gKHZvaWQgKiloZWFkO1xuK1x0aW50IHRhcF9mZCA9IC0xLCBpZmluZGV4LCBlcnI7XG4rXHRzdHJ1Y3QgbmV0bnNfb2JqICpucyA9IE5VTEw7XG4rXHRzdHJ1Y3QgaW92ZWMgaW92WzNdO1xuK1x0c3NpemVfdCBuO1xuK1xuK1x0aWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0bnMgPSBuZXRuc19uZXcoVEFQX05FVE5TLCB0cnVlKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihucywgXCJuZXRuc19uZXdcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHRhcF9mZCA9IGNyZWF0ZV90YXBfbmFwaV9mcmFncyhUQVBfTkFNRSk7XG4rXHRpZiAoIUFTU0VSVF9HRSh0YXBfZmQsIDAsIFwiY3JlYXRlX3RhcFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRTWVMob3V0LCBcImlwIGxpbmsgc2V0IGRldiBcIiBUQVBfTkFNRSBcIiB1cFwiKTtcbitcbitcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChUQVBfTkFNRSk7XG4rXHRpZiAoIUFTU0VSVF9HVChpZmluZGV4LCAwLCBcImlmX25hbWV0b2luZGV4XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNocmlua19yYW4gPSAwO1xuK1xuK1x0ZXJyID0gYnBmX3hkcF9hdHRhY2goaWZpbmRleCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MueGRwX3NocmluayksXG4rXHRcdFx0ICAgICAwLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfeGRwX2F0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRtZW1zZXQoaGVhZCwgMCwgc2l6ZW9mKGhlYWQpKTtcbitcdG1lbXNldChmcmFnMSwgMHg0MSwgc2l6ZW9mKGZyYWcxKSk7XG4rXHRtZW1zZXQoZnJhZzIsIDB4NDIsIHNpemVvZihmcmFnMikpO1xuK1x0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4rXG4rXHRpb3ZbMF0uaW92X2Jhc2UgPSBoZWFkOyAgaW92WzBdLmlvdl9sZW4gPSBzaXplb2YoaGVhZCk7XG4rXHRpb3ZbMV0uaW92X2Jhc2UgPSBmcmFnMTsgaW92WzFdLmlvdl9sZW4gPSBzaXplb2YoZnJhZzEpO1xuK1x0aW92WzJdLmlvdl9iYXNlID0gZnJhZzI7IGlvdlsyXS5pb3ZfbGVuID0gc2l6ZW9mKGZyYWcyKTtcbitcbitcdG4gPSB3cml0ZXYodGFwX2ZkLCBpb3YsIEFSUkFZX1NJWkUoaW92KSk7XG4rXHRBU1NFUlRfRVEobiwgc2l6ZW9mKGhlYWQpICsgc2l6ZW9mKGZyYWcxKSArIHNpemVvZihmcmFnMiksIFwid3JpdGV2XCIpO1xuK1xuK1x0d2FpdF9mb3JfcHJvZyhza2VsKTtcbitcdC8qIGEgYnVnZ3kga2VybmVsIG9ubHkgc3BsYXRzIFwicGFnZV9wb29sIGxlYWtcIiwgaXQgZG9lcyBub3QgZmFpbCBoZXJlICovXG4rXHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc2hyaW5rX3JhbiwgMCwgXCJ4ZHBfcHJvZ19yYW5cIik7XG4rXG4rXHRicGZfeGRwX2RldGFjaChpZmluZGV4LCAwLCBOVUxMKTtcbitvdXQ6XG4rXHRpZiAodGFwX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodGFwX2ZkKTtcbitcdG5ldG5zX2ZyZWUobnMpO1xuK31cbitcbisvKlxuKyAqIEJvdGggdmV0aCBlbmRzIGxpdmUgaW4gdGhlaXIgb3duIG5hbWVzcGFjZSwgc28gdGhlIHRyYWZmaWMgcmVhbGx5IGNyb3NzZXNcbisgKiB0aGUgcGFpciBhbmQgbm90aGluZyBpcyBjcmVhdGVkIGluIHRoZSBjYWxsZXIncyBuYW1lc3BhY2UuXG4rICovXG4rc3RhdGljIGludCB2ZXRoX3NldHVwKGNoYXIgKm5zMCwgY2hhciAqbnMxKVxuK3tcbitcdGlmICghQVNTRVJUX09LKGFwcGVuZF90aWQobnMwLCBOU19OQU1FX01BWF9MRU4pLCBcImFwcGVuZF90aWQgbnMwXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoIUFTU0VSVF9PSyhhcHBlbmRfdGlkKG5zMSwgTlNfTkFNRV9NQVhfTEVOKSwgXCJhcHBlbmRfdGlkIG5zMVwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0U1lTKGZhaWwsIFwiaXAgbmV0bnMgYWRkICVzXCIsIG5zMCk7XG4rXHRTWVMoZmFpbF9uczAsIFwiaXAgbmV0bnMgYWRkICVzXCIsIG5zMSk7XG4rXHRTWVMoZmFpbF9uczEsIFwiaXAgLW4gJXMgbGluayBhZGQgJXMgbXR1IDgwMDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlcyBtdHUgODAwMFwiLFxuK1x0ICAgIG5zMCwgVkVUSF9MT0NBTCwgVkVUSF9QRUVSKTtcbitcdFNZUyhmYWlsX25zMSwgXCJpcCAtbiAlcyBsaW5rIHNldCAlcyBuZXRucyAlc1wiLCBuczAsIFZFVEhfUEVFUiwgbnMxKTtcbitcdFNZUyhmYWlsX25zMSwgXCJpcCAtbiAlcyBsaW5rIHNldCAlcyBhZGRyZXNzICVzXCIsIG5zMCwgVkVUSF9MT0NBTCxcbitcdCAgICBWRVRIX0xPQ0FMX01BQyk7XG4rXHRTWVMoZmFpbF9uczEsIFwiaXAgLW4gJXMgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCIsIG5zMCwgVkVUSF9MT0NBTF9JUCxcbitcdCAgICBWRVRIX0xPQ0FMKTtcbitcdFNZUyhmYWlsX25zMSwgXCJpcCAtbiAlcyBsaW5rIHNldCAlcyB1cFwiLCBuczAsIFZFVEhfTE9DQUwpO1xuK1x0U1lTKGZhaWxfbnMxLCBcImlwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiAlc1wiLCBuczEsIFZFVEhfUEVFUl9JUCxcbitcdCAgICBWRVRIX1BFRVIpO1xuK1x0U1lTKGZhaWxfbnMxLCBcImlwIC1uICVzIGxpbmsgc2V0ICVzIHVwXCIsIG5zMSwgVkVUSF9QRUVSKTtcbitcbitcdHJldHVybiAwO1xuK1xuK2ZhaWxfbnMxOlxuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczEpO1xuK2ZhaWxfbnMwOlxuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczApO1xuK2ZhaWw6XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZldGhfY2xlYW51cChjb25zdCBjaGFyICpuczAsIGNvbnN0IGNoYXIgKm5zMSlcbit7XG4rXHQvKiBEcm9wcGluZyB0aGUgbmFtZXNwYWNlcyB0YWtlcyB0aGUgdmV0aCBwYWlyIGFuZCBpdHMgWERQIHByb2dyYW1zLiAqL1xuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczEpO1xuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBuczApO1xuK31cbitcbitzdGF0aWMgaW50IHZldGhfYXR0YWNoKGNvbnN0IGNoYXIgKm5zLCBjb25zdCBjaGFyICpkZXYsIGludCBwcm9nX2ZkKVxuK3tcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xuK1x0aW50IGlmaW5kZXgsIGVycjtcbitcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKG5zKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChkZXYpO1xuK1x0aWYgKCFBU1NFUlRfR1QoaWZpbmRleCwgMCwgXCJpZl9uYW1ldG9pbmRleFwiKSkge1xuK1x0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0ZXJyID0gYnBmX3hkcF9hdHRhY2goaWZpbmRleCwgcHJvZ19mZCwgMCwgTlVMTCk7XG4rXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcbitcdHJldHVybiBBU1NFUlRfT0soZXJyLCBcImJwZl94ZHBfYXR0YWNoXCIpID8gMCA6IC0xO1xuK31cbitcbisvKiBBIGxhcmdlIHBpbmcgYnVpbGRzIGEgbm9ubGluZWFyIHNrYiB0aGF0IHZldGggY293J3MgaW50byBpdHMgcGFnZV9wb29sLiAqL1xuK3N0YXRpYyB2b2lkIHRlc3RfdmV0aChzdHJ1Y3QgeGRwX3Nocmlua19mcmFncyAqc2tlbClcbit7XG4rXHRjaGFyIG5zMFtOU19OQU1FX01BWF9MRU5dID0gXCJ4ZHBfc2hyaW5rX25zMC1cIjtcbitcdGNoYXIgbnMxW05TX05BTUVfTUFYX0xFTl0gPSBcInhkcF9zaHJpbmtfbnMxLVwiO1xuK1xuK1x0aWYgKGdldHBhZ2VzaXplKCkgIT0gUEFHRV9TSVpFXzRLKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHZldGhfc2V0dXAobnMwLCBuczEpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuID0gMDtcbitcbitcdGlmICh2ZXRoX2F0dGFjaChuczAsIFZFVEhfTE9DQUwsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9zaHJpbmspKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZXhlYyAlcyBwaW5nIC1xIC1zIDUwMDAgLWMgMyAtVyAxICVzXCIsXG4rXHRcdCAgIG5zMSwgVkVUSF9MT0NBTF9JUCk7XG4rXG4rXHR3YWl0X2Zvcl9wcm9nKHNrZWwpO1xuK1x0LyogYSBidWdneSBrZXJuZWwgb25seSBzcGxhdHMgXCJwYWdlX3Bvb2wgbGVha1wiLCBpdCBkb2VzIG5vdCBmYWlsIGhlcmUgKi9cbitcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuLCAwLCBcInhkcF9wcm9nX3JhblwiKTtcbitvdXQ6XG4rXHR2ZXRoX2NsZWFudXAobnMwLCBuczEpO1xuK31cbitcbisvKlxuKyAqIExPQ0FMIGNvdydzIHRoZSBpbmNvbWluZyBza2IgYW5kIHJldHVybnMgWERQX1RYLCBzbyB0aGUgYnVmZiBpcyB0dXJuZWQgaW50b1xuKyAqIGFuIHhkcF9mcmFtZSBhbmQgYm91bmNlZCB0byBQRUVSLCB3aGljaCBzaHJpbmtzIGEgZnJhZy4gQSBwYWdlX3Bvb2wgdGFnXG4rICogcmVjb3JkZWQgb24gdGhlIGJ1ZmYgbXVzdCBub3QgbGVhayBpbnRvIHRoZSBmcmFtZSwgb3IgUEVFUiBmcmVlcyBhIHBsYWluXG4rICogcGFnZSAod2hvc2UgcHAgd2FzIGFscmVhZHkgY2xlYXJlZCBvbiB0aGUgWERQX1RYIHNpZGUpIGFzIHBhZ2VfcG9vbCBtZW1vcnkuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdF92ZXRoX3R4KHN0cnVjdCB4ZHBfc2hyaW5rX2ZyYWdzICpza2VsKVxuK3tcbitcdGNoYXIgbnMwW05TX05BTUVfTUFYX0xFTl0gPSBcInhkcF9zaHJpbmtfdHgwLVwiO1xuK1x0Y2hhciBuczFbTlNfTkFNRV9NQVhfTEVOXSA9IFwieGRwX3Nocmlua190eDEtXCI7XG4rXG4rXHRpZiAoZ2V0cGFnZXNpemUoKSAhPSBQQUdFX1NJWkVfNEspIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAodmV0aF9zZXR1cChuczAsIG5zMSkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qXG4rXHQgKiBMT0NBTCBib3VuY2VzIGV2ZXJ5dGhpbmcgKGluY2wuIEFSUCkgd2l0aCBYRFBfVFgsIHNvIHBpbiBhIHN0YXRpY1xuK1x0ICogbmVpZ2hib3VyIHRvIGxldCB0aGUgcGluZydzIHBheWxvYWQgYWN0dWFsbHkgcmVhY2ggaXQuXG4rXHQgKi9cbitcdFNZUyhvdXQsIFwiaXAgLW4gJXMgbmVpZ2ggYWRkICVzIGxsYWRkciAlcyBkZXYgJXMgbnVkIHBlcm1hbmVudFwiLFxuK1x0ICAgIG5zMSwgVkVUSF9MT0NBTF9JUCwgVkVUSF9MT0NBTF9NQUMsIFZFVEhfUEVFUik7XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzaHJpbmtfcmFuID0gMDtcbitcbitcdGlmICh2ZXRoX2F0dGFjaChuczAsIFZFVEhfTE9DQUwsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF90eCkpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICh2ZXRoX2F0dGFjaChuczEsIFZFVEhfUEVFUiwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MueGRwX3NocmluaykpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBleGVjICVzIHBpbmcgLXEgLXMgNTAwMCAtYyAzIC1XIDEgJXNcIixcbitcdFx0ICAgbnMxLCBWRVRIX0xPQ0FMX0lQKTtcbitcbitcdHdhaXRfZm9yX3Byb2coc2tlbCk7XG4rXHQvKiBhIGJ1Z2d5IGtlcm5lbCBvbmx5IHNwbGF0cyBcInBhZ2VfcG9vbCBsZWFrXCIsIGl0IGRvZXMgbm90IGZhaWwgaGVyZSAqL1xuK1x0QVNTRVJUX0dUKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNocmlua19yYW4sIDAsIFwieGRwX3Byb2dfcmFuXCIpO1xuK291dDpcbitcdHZldGhfY2xlYW51cChuczAsIG5zMSk7XG4rfVxuK1xuK3ZvaWQgdGVzdF94ZHBfc2hyaW5rX2ZyYWdzKHZvaWQpXG4re1xuK1x0c3RydWN0IHhkcF9zaHJpbmtfZnJhZ3MgKnNrZWw7XG4rXG4rXHRza2VsID0geGRwX3Nocmlua19mcmFnc19fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidHVuXCIpKVxuK1x0XHR0ZXN0X3R1bihza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidmV0aFwiKSlcbitcdFx0dGVzdF92ZXRoKHNrZWwpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ2ZXRoX3R4XCIpKVxuK1x0XHR0ZXN0X3ZldGhfdHgoc2tlbCk7XG4rXG4rXHR4ZHBfc2hyaW5rX2ZyYWdzX19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3Nocmlua19mcmFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zaHJpbmtfZnJhZ3MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFkODk1YWI2OTkzMDNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc2hyaW5rX2ZyYWdzLmNcbkBAIC0wLDAgKzEsMzQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuK1xuK2ludCBzaHJpbmtfcmFuO1xuK1xuK1NFQyhcInhkcC5mcmFnc1wiKVxuK2ludCB4ZHBfc2hyaW5rKHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHQvKlxuK1x0ICogUnVucyBvbiBib3RoIHNrYi1iYWNrZWQgWERQIHBhdGhzIChnZW5lcmljIFhEUCB2aWEgdHVuLCBhbmQgdmV0aCk6XG4rXHQgKiB0aGUgbm9ubGluZWFyIHNrYiBpcyBjb3cnZCBpbnRvIHBhZ2VfcG9vbCBtZW1vcnkgYmVmb3JlIHdlIHJ1biwgc29cbitcdCAqIHNocmlua2luZyB0aGUgdGFpbCByZWxlYXNlcyBhIHdob2xlIGZyYWcgdGhhdCBoYXMgdG8gZ28gYmFjayB0byB0aGF0XG4rXHQgKiBwb29sLiBUaGUgY291bnRlciBvbmx5IHRlbGxzIHVzIHRoZSBwcm9ncmFtIHJhbiBhbmQgdGhlIGhlbHBlclxuK1x0ICogc3VjY2VlZGVkIC0tIGEgbGluZWFyIGJ1ZmYgcmV0dXJucyAwIGFzIHdlbGwgLS0gaXQgZG9lcyBub3QgcHJvdmUgYVxuK1x0ICogZnJhZyB3YXMgcmVsZWFzZWQuXG4rXHQgKi9cbitcdGlmIChicGZfeGRwX2FkanVzdF90YWlsKGN0eCwgLTMwMDApID09IDApXG4rXHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnNocmlua19yYW4sIDEpO1xuK1x0cmV0dXJuIFhEUF9QQVNTO1xuK31cbitcbitTRUMoXCJ4ZHAuZnJhZ3NcIilcbitpbnQgeGRwX3R4KHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHQvKlxuK1x0ICogQm91bmNlIHRoZSBmcmFtZSBiYWNrLiBPbiB2ZXRoIHRoaXMgdHVybnMgdGhlIGJ1ZmYgaW50byBhblxuK1x0ICogeGRwX2ZyYW1lLCB3aGljaCBpcyB3aGVyZSBhIGJ1ZmYtc2NvcGVkIHBhZ2VfcG9vbCB0YWcgbXVzdCBub3QgbGVha1xuK1x0ICogaW50byB0aGUgZnJhbWUgaGFuZGVkIHRvIHRoZSBwZWVyLlxuK1x0ICovXG4rXHRyZXR1cm4gWERQX1RYO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NzowMS43NzA4OTkxMzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA0ODY5NDAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgZmlyc3Qgc3RlcCBpcywgb2YgY291cnNlLCBhIGNhcmVmdWwgcmVhZC10aHJvdWdoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgY2hhbmdlZCBhbmQgd2hlcmUgdGhvc2UgY2hhbmdlcyBhcmUgaGFwcGVuaW5nLlxuXG5JIHNlZSBhIGxpc3Qgb2YgbW9kaWZpZWQgZmlsZXM6IGBkcml2ZXJzL25ldC92ZXRoLmNgLCBgaW5jbHVkZS9uZXQveGRwLmhgLCBgbmV0L2NvcmUvZGV2LmNgLCBgbmV0L2NvcmUvZmlsdGVyLmNgLCBhbmQgYSBzbGV3IG9mIHRlc3QgZmlsZXMuIFRoYXQncyBhIHJlYXNvbmFibGUgc2V0IHRvIGxvb2sgYXQuXG5cbiogICBgZHJpdmVycy9uZXQvdmV0aC5jYCBzaG93cyBjaGFuZ2VzIHdpdGhpbiBgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZmAsIHNwZWNpZmljYWxseSBzZXR0aW5nIGB4ZHBfYnVmZl9zZXRfZnJhZ19wcCh4ZHApYCBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2YgZnJhZ21lbnRzIGluIHRoZSBTS0IuIFRoYXQgc291bmRzIGxpa2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBmcmFnbWVudCBoYW5kbGluZywgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGV4dHJhIHNjcnV0aW55LlxuKiAgIGBpbmNsdWRlL25ldC94ZHAuaGAgaW50cm9kdWNlcyBhIG5ldyBmbGFnLCBgWERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTGAsIGFsb25nIHdpdGggaGVscGVyIGZ1bmN0aW9ucyBmb3Igc2V0dGluZyBhbmQgY2hlY2tpbmcgaXQuIFRoaXMgaW5kaWNhdGVzIGEgZm9jdXMgb24gcGFnZSBwb29sIG1hbmFnZW1lbnQgb2YgZnJhZ21lbnRzIHdpdGhpbiBYRFAsIHNvIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGFuIG9idmlvdXMgYXJlYSBvZiBmb2N1cy4gQWxzbyBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgYW5kIGB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZmAgc2VlbXMgdG8gZGVhbCB3aXRoIGZsYWdzIGFuZCBtZW1vcnkgdHlwZS5cbiogICBgbmV0L2NvcmUvZGV2LmNgIHNob3dzIHRoYXQsIHdpdGhpbiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgYHhkcF9idWZmX3NldF9mcmFnX3BwKHhkcClgIGlzIGNhbGxlZCBpZiB0aGUgU0tCIGlzIG5vbmxpbmVhciwgd2hpY2ggcmVpbmZvcmNlcyB0aGlzIGlkZWEgb2YgZnJhZ2VtZW50cyBiZWluZyBjb3JlLlxuKiAgIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgdGhlIG1vc3QgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgYGJwZl94ZHBfc2hyaW5rX2RhdGFgIGRvZXMgc29tZSBtZW1vcnkgdHlwZSBoYW5kbGluZy4gSXQgaXMgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYHhkcF9idWZmX2lzX2ZyYWdfcHBgLCBhbmQgdGhlbiBkZWFsaW5nIHdpdGggdGhlIG1lbW9yeSBhcyBhIGBNRU1fVFlQRV9QQUdFX1BPT0xgIHRvIGZyZWUgYSBmcmFnLiBUaGlzIGlzIGtleSwgYXMgYW55IHN1YnRsZSBjaGFuZ2UgaGVyZSBjb3VsZCBjcmVhdGUgaXNzdWVzLlxuXG5Pa2F5LCBsZXQgbWUgcHV0IG9uIG15IG1lbW9yeSBsZWFrIC8gdXNlLWFmdGVyLWZyZWUgaGF0LiBUaGUgY29yZSBzZWVtcyB0byBiZSBhcm91bmQgdGhpcyBpbnRlcmFjdGlvbiBiZXR3ZWVuIFNLQiBmcmFnbWVudHMsIFhEUCwgYW5kIHRoZSBwYWdlIHBvb2wuIFRoZXJlJ3MgYSBjbGVhciBicmFuY2hpbmcgYmFzZWQgb24gd2hldGhlciB0aGUgWERQIGJ1ZmZlciB1c2VzIGZyYWdtZW50cywgYW5kIHRoYXQgc2VlbXMgdG8gbGVhZCB0byBtZW1vcnkgdHlwZSBjaGFuZ2VzLiBUaGlzIHNtZWxscyBsaWtlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW5jb3JyZWN0IG1lbW9yeSBkZWFsbG9jYXRpb24gaWYgdGhlIHN0YXRlIGlzbid0IG1hbmFnZWQgY29ycmVjdGx5LlxuXG5UaGUgZmFjdCB0aGF0IGBicGZfeGRwX3Nocmlua19kYXRhYCdzIHN1cnJvdW5kaW5nIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgbWVtb3J5IHR5cGVzIGFuZCBmcmFnbWVudCBtYW5hZ2VtZW50IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcyBpbiBkZXRhaWwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZGlmZmVyZW50IG1lbW9yeSB0eXBlcywgZXNwZWNpYWxseSBhcm91bmQgdGhlIHBhZ2UgcG9vbC4gV2UgbmVlZCB0byBiZSBjaGVja2luZyB0aGUgcGFnZSBwb29sIGludGVyYWN0aW9ucyB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG9mZi1ieS1vbmUgZXJyb3JzIG9yIGRvdWJsZS1mcmVlcy5cblxuU28sIHllcywgZ2l2ZW4gdGhpcyBhbmFseXNpcywgdGhpcyBwYXRjaCBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGZyYWdtZW50IGhhbmRsaW5nLCB0aGUgbWVtb3J5IHR5cGUgY2hhbmdlcywgYW5kIHRoZSBwYWdlIHBvb2wgaW50ZXJhY3Rpb25zIGFyZSBhbGwgcmVkIGZsYWdzIHRoYXQgZGVtYW5kIGRlZXBlciBpbnZlc3RpZ2F0aW9uIHdpdGggdG9vbHMgZGVzaWduZWQgdG8gY2F0Y2ggdGhlc2UgaXNzdWVzLiBJIHNob3VsZCBtYWtlIHN1cmUgbXkgdGVzdGluZyB3aWxsIGNvbnNpZGVyIHRoZSBpbnRlcmFjdGlvbnMgYW5kIGVkZ2UgY2FzZXMgb2YgdGhlIGRpZmZlcmVudCBtZW1vcnkgdHlwZXMgaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTYxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MDguODE5NTk3NTM4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTEwMTMyODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3hkcF9zaHJpbmtfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz00MzI3PXN0YXRpYyBpbnQgYnBmX3hkcF9mcmFnc19pbmNyZWFzZV90YWlsKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDM1MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo0MzUyOnN0YXRpYyBzdHJ1Y3QgeGRwX2J1ZmYgKmJwZl94ZHBfc2hyaW5rX2RhdGFfemMoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBzaHJpbmssXFxubmV0L2NvcmUvZmlsdGVyLmMtNDM1My1cXHRcXHRcXHRcXHRcXHQgICAgICAgYm9vbCB0YWlsLCBib29sIHJlbGVhc2UpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00MzY5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQzNzA6c3RhdGljIGJvb2wgYnBmX3hkcF9zaHJpbmtfZGF0YShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc2tiX2ZyYWdfdCAqZnJhZyxcXG5uZXQvY29yZS9maWx0ZXIuYy00MzcxLVxcdFxcdFxcdFxcdGludCBzaHJpbmssIGJvb2wgdGFpbClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQzNzktXFx0XFx0bmV0bWVtID0gMDtcXG5uZXQvY29yZS9maWx0ZXIuYzo0MzgwOlxcdFxcdHpjX2ZyYWcgPSBicGZfeGRwX3Nocmlua19kYXRhX3pjKHhkcCwgc2hyaW5rLCB0YWlsLCByZWxlYXNlKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00MzgxLVxcdH0gZWxzZSBpZiAoeGRwX2J1ZmZfaXNfZnJhZ19wcCh4ZHApKSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NDAxPXN0YXRpYyBpbnQgYnBmX3hkcF9mcmFnc19zaHJpbmtfdGFpbChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgaW50IG9mZnNldClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0MTQtXFx0XFx0b2Zmc2V0IC09IHNocmluaztcXG5uZXQvY29yZS9maWx0ZXIuYzo0NDE1OlxcdFxcdGlmIChicGZfeGRwX3Nocmlua19kYXRhKHhkcCwgZnJhZywgc2hyaW5rLCB0cnVlKSlcXG5uZXQvY29yZS9maWx0ZXIuYy00NDE2LVxcdFxcdFxcdG5fZnJhZ3NfZnJlZSsrO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI2NTk9X19icGZfa2Z1bmMgaW50IGJwZl94ZHBfcHVsbF9kYXRhKHN0cnVjdCB4ZHBfbWQgKngsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcwMC1cXHRcXHRkZWx0YSAtPSBzaHJpbms7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI3MDE6XFx0XFx0aWYgKGJwZl94ZHBfc2hyaW5rX2RhdGEoeGRwLCBmcmFnLCBzaHJpbmssIGZhbHNlKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcwMi1cXHRcXHRcXHRuX2ZyYWdzX2ZyZWUrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MDkuMTcwNjE4MjIyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MjY3NzA3NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3Q6XG5cbioqRGl2aW5nIGludG8gdGhlIFBhY2tldCBGaWx0ZXIgUGx1bWJpbmcqKlxuXG5Pa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgY2xlYXI6IEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGp1bXAgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDM3MC4gVGhhdCB1c3VhbGx5IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcGFja2V0IGZpbHRlcmluZyBlbmdpbmUsIG1vc3QgbGlrZWx5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzb21lIEJQRi1yZWxhdGVkIGZ1bmN0aW9uLiBNeSBndXQgdGVsbHMgbWUgd2UncmUgZWl0aGVyIGxvb2tpbmcgYXQgdGhlIGludGVycHJldGVyLCBhIGhlbHBlciBmdW5jdGlvbiwgb3IgcGVyaGFwcyBhIHBhcnQgb2YgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiByb3V0aW5lcyBmb3IgdGhpcyBzZWN0aW9uLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBvdXQgZm9yIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhbmRsZSB0aGUgZmlsdGVycyB0aGVtc2VsdmVzLCB0aGUgYWN0dWFsIGJ5dGVjb2RlIHJlcHJlc2VudGF0aW9uIGFuZCBob3cgdGhhdCBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBkYXRhIHBhdGguIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRoaW5ncyBhd2FpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6OTgyMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ3OjEyLjU5NzM5NDA4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzY1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzY1OlxcdFxcdH1cXG40MzY2OlxcdFxcbjQzNjc6XFx0XFx0cmV0dXJuIHpjX2ZyYWc7XFxuNDM2ODpcXHR9XFxuNDM2OTpcXHRcXG40MzcwOlxcdHN0YXRpYyBib29sIGJwZl94ZHBfc2hyaW5rX2RhdGEoc3RydWN0IHhkcF9idWZmICp4ZHAsIHNrYl9mcmFnX3QgKmZyYWcsXFxuNDM3MTpcXHRcXHRcXHRcXHRcXHRpbnQgc2hyaW5rLCBib29sIHRhaWwpXFxuNDM3MjpcXHR7XFxuNDM3MzpcXHRcXHRlbnVtIHhkcF9tZW1fdHlwZSBtZW1fdHlwZSA9IHhkcC1cXHUwMDNlcnhxLVxcdTAwM2VtZW0udHlwZTtcXG40Mzc0OlxcdFxcdGJvb2wgcmVsZWFzZSA9IHNrYl9mcmFnX3NpemUoZnJhZykgPT0gc2hyaW5rO1xcbjQzNzU6XFx0XFx0bmV0bWVtX3JlZiBuZXRtZW0gPSBza2JfZnJhZ19uZXRtZW0oZnJhZyk7XFxuNDM3NjpcXHRcXHRzdHJ1Y3QgeGRwX2J1ZmYgKnpjX2ZyYWcgPSBOVUxMO1xcbjQzNzc6XFx0XFxuNDM3ODpcXHRcXHRpZiAobWVtX3R5cGUgPT0gTUVNX1RZUEVfWFNLX0JVRkZfUE9PTCkge1xcbjQzNzk6XFx0XFx0XFx0bmV0bWVtID0gMDtcXG40MzgwOlxcdFxcdFxcdHpjX2ZyYWcgPSBicGZfeGRwX3Nocmlua19kYXRhX3pjKHhkcCwgc2hyaW5rLCB0YWlsLCByZWxlYXNlKTtcXG40MzgxOlxcdFxcdH0gZWxzZSBpZiAoeGRwX2J1ZmZfaXNfZnJhZ19wcCh4ZHApKSB7XFxuNDM4MjpcXHRcXHRcXHQvKlxcbjQzODM6XFx0XFx0XFx0ICogU2tiLWJhY2tlZCBYRFAgKGdlbmVyaWMgWERQLCB2ZXRoKSBjb3cncyB0aGUgZnJhZ3MgaW50byBhXFxuNDM4NDpcXHRcXHRcXHQgKiBwYWdlX3Bvb2wgd2hpbGUgdGhlIHJ4cSBzdGF5cyBNRU1fVFlQRV9QQUdFX1NIQVJFRCwgc28gZnJlZVxcbjQzODU6XFx0XFx0XFx0ICogdGhlIGZyYWcgdG8gdGhlIHBvb2wsIG5vdCB2aWEgcGFnZV9mcmFnX2ZyZWUoKS5cXG40Mzg2OlxcdFxcdFxcdCAqL1xcbjQzODc6XFx0XFx0XFx0bWVtX3R5cGUgPSBNRU1fVFlQRV9QQUdFX1BPT0w7XFxuNDM4ODpcXHRcXHR9XFxuNDM4OTpcXHRcXG40MzkwOlxcdFxcdGlmIChyZWxlYXNlKSB7XFxuNDM5MTpcXHRcXHRcXHRfX3hkcF9yZXR1cm4obmV0bWVtLCBtZW1fdHlwZSwgZmFsc2UsIHpjX2ZyYWcpO1xcbjQzOTI6XFx0XFx0fSBlbHNlIHtcXG40MzkzOlxcdFxcdFxcdGlmICghdGFpbClcXG40Mzk0OlxcdFxcdFxcdFxcdHNrYl9mcmFnX29mZl9hZGQoZnJhZywgc2hyaW5rKTtcXG40Mzk1OlxcdFxcdFxcdHNrYl9mcmFnX3NpemVfc3ViKGZyYWcsIHNocmluayk7XFxuNDM5NjpcXHRcXHR9XFxuNDM5NzpcXHRcXG40Mzk4OlxcdFxcdHJldHVybiByZWxlYXNlO1xcbjQzOTk6XFx0fVxcbjQ0MDA6XFx0XFxuNDQwMTpcXHRzdGF0aWMgaW50IGJwZl94ZHBfZnJhZ3Nfc2hyaW5rX3RhaWwoc3RydWN0IHhkcF9idWZmICp4ZHAsIGludCBvZmZzZXQpXFxuNDQwMjpcXHR7XFxuNDQwMzpcXHRcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9idWZmKHhkcCk7XFxuNDQwNDpcXHRcXHRpbnQgaSwgbl9mcmFnc19mcmVlID0gMCwgbGVuX2ZyZWUgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NzoxMi41OTc4NTc1MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTAxNzA4MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWERQIEJ1ZmZlciBTaHJpbmsgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBmbGF3IHdpdGhpbiB0aGUgWERQIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHdoZW4gc2hyaW5raW5nIFhEUCBidWZmZXJzIGJhY2tlZCBieSBTS0JzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIG5vbmxpbmVhciBTS0Igc2NlbmFyaW8uIFRoZSBjb3JlIHByb2JsZW0gbGllcyBpbiB0aGUgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIHBhZ2UgZnJhZ21lbnRzIChmcmFncykgYWxsb2NhdGVkIGZyb20gYSBgcGFnZV9wb29sYCBkdXJpbmcgYnVmZmVyIHNocmlua2FnZS4gQmFzaWNhbGx5LCB3aGVuIGEgQlBGIHByb2dyYW0gc2hyaW5rcyB0aGUgWERQIGJ1ZmZlcidzIHRhaWwgdXNpbmcgYGJwZl94ZHBfYWRqdXN0X3RhaWxgIG9yIGBicGZfeGRwX3B1bGxfZGF0YWAsIHRoZSBjb2RlIHdhcyBtaXN0YWtlbmx5IGZyZWVpbmcgdGhlIGNvbXBsZXRlbHkgc2hydW5rIGZyYWdtZW50cyB1c2luZyBgcGFnZV9mcmFnX2ZyZWUoKWAsIGV2ZW4gdGhvdWdoIHRoZXkgd2VyZSBhbGxvY2F0ZWQgZnJvbSBhIGBwYWdlX3Bvb2xgLiBUaGlzIGluY29uc2lzdGVuY3kgbGVhZHMgdG8gc2V2ZXJlIGlzc3VlczogXCJCYWQgcGFnZSBzdGF0ZSAuLi4gcGFnZV9wb29sIGxlYWssXCIgbWVtb3J5IGNvcnJ1cHRpb24sIGludmFsaWQgZnJlZXMsIGFuZCBwcm9ibGVtcyB3aXRoIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIOKAkyBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IHBpdGZhbGxzLlxuXG5UaGUgc29sdXRpb24sIGFzIEkgc2VlIGl0LCBpcyBhIHByZXR0eSBjbGVhbiBhcHByb2FjaC4gVGhleSd2ZSBpbnRyb2R1Y2VkIGEgZmxhZywgYFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0xgLCB3aXRoaW4gdGhlIGB4ZHBfYnVmZmAgc3RydWN0dXJlLiBUaGlzIGZsYWcgYWxsb3dzIGBicGZfeGRwX3Nocmlua19kYXRhKClgIHRvIGNvcnJlY3RseSBpZGVudGlmeSBmcmFncyBvcmlnaW5hdGluZyBmcm9tIGEgYHBhZ2VfcG9vbGAgKG1lbV90eXBlIGBNRU1fVFlQRV9QQUdFX1BPT0xgKSBhbmQgdXNlIHRoZSBhcHByb3ByaWF0ZSBwYWdlIHBvb2wgcmVjbGFtYXRpb24gbG9naWMuIFRoYXQncyBhIGdvb2QgZml4IGZvciB0aGUgaWRlbnRpZmllZCBtZW1vcnktcmVsYXRlZCBpc3N1ZS5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIHBlcmZvcm0gYSBLTVNBTi9LQVNBTiBhc3Nlc3NtZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggaXNuJ3Qgc3VidGx5IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMgdGhhdCBjb3VsZCBiZSBleHBvc2VkIHRvIHVzZXJzcGFjZS5cblxuTXkgY3JpdGVyaWEgZm9yIEtNU0FOIHJldm9sdmUgYXJvdW5kIHRoZXNlIGFyZWFzOiBrZXJuZWwgc3RydWN0dXJlcyBsZWFraW5nIHRvIHVzZXIgc3BhY2UgKHZpYSB2YXJpb3VzIGNoYW5uZWxzKSwgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBzdWJzZXF1ZW50IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIGJ5dGVzIGJlaW5nIGFjY2Vzc2VkLlxuXG5TbywgbGV0J3MgZXhhbWluZSB0aGUgbWVtb3J5IGZsb3dzOlxuXG4qICAgSW4gYHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmZgIGFuZCBgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZmAgd2UncmUgc2V0dGluZyB0aGUgZmxhZyBiaXQsIHdoaWNoIGlzIGdvb2QuXG4qICAgSW4gYHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmYCwgdGhlIGZsYWcgaXMgY2xlYXJlZC5cbiogICBJbiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgdGhlIGZsYWcgaXMgc2V0LlxuKiAgIGBicGZfeGRwX3Nocmlua19kYXRhYCBjaGVja3MgdGhlIGZsYWcuXG5cbkFmdGVyIHJldmlld2luZyB0aGUgY29kZSwgSSBkb24ndCBzZWUgYW55IGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIGB4ZHBgIHN0cnVjdHVyZSBpcyBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9uIGNhbGxzLiBUaGUgYGZsYWdzYCBmaWVsZCBpcyBiZWluZyBtYW5pcHVsYXRlZCB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucywgc28gaXQncyBhbGwgY29udHJvbGxlZC4gVGhlIHBhdGNoJ3MgcHJpbWFyeSBmb2N1cyBpcyByZXNvbHZpbmcgdGhlIHBhZ2UgZnJlZSB0eXBlIG1pc21hdGNoLCB3aGljaCBwcmltYXJpbHkgdHJpZ2dlcnMgaXNzdWVzIHdpdGggcGFnZSByZWZjb3VudCwgbWVtb3J5IGFsbG9jYXRvciBjb3JydXB0aW9uLCBhbmQgcGFnZSBwb29sIGxlYWtzLiBUaGVzZSBhcmUgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHRoYXQgYXJlIG5vcm1hbGx5IGNhdWdodCBieSBrZXJuZWwgZGVidWdnaW5nIGFuZCBzYW5pdGl6ZXJzIGxpa2UgcGFnZSByZWZjb3VudCBjaGVja3MsIHBhZ2VcXF9wb29sIHRyYWNraW5nLCBhbmQgS0FTQU4gKHRvIGRldGVjdCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSksIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGVycm9ycy5cblxuSSd2ZSBhbHNvIGRvdWJsZS1jaGVja2VkIGB4ZHBfYnVmZmAgYW5kIGB4ZHBfZnJhbWVgIGZvciB1bmluaXRpYWxpemVkIGZpZWxkcyB0byBlbnN1cmUgbm90aGluZydzIGV4cG9zZWQgZnJvbSB0aGlzIHBhdGNoIGFuZCwgYWZ0ZXIgZXhhbWluaW5nIHRoZSByZWxldmFudCBmdW5jdGlvbnMgaW4gYGluY2x1ZGUvbmV0L3hkcC5oYCwgSSdtIGNvbmZpZGVudC4gSSdtIHNhdGlzZmllZCB0aGF0IHRoaXMgcGF0Y2gsIHdoaWxlIGZpeGluZyBhIGNyaXRpY2FsIG1lbW9yeSBpc3N1ZSwgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTi9LQVNBTiBjb25jZXJucyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcyNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ3OjIwLjY5OTU2OTY1NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwOTUwNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC94ZHAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC94ZHAuaD03ND1lbnVtIHhkcF9idWZmX2ZsYWdzIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oLTg4LVxcdCAqIHRoaXMgaXMgc3RyaXBwZWQgaW4geGRwX3VwZGF0ZV9mcmFtZV9mcm9tX2J1ZmYoKSBhbmQgcmUtZGVyaXZlZCBmcm9tXFxuaW5jbHVkZS9uZXQveGRwLmg6ODk6XFx0ICogOjptZW1fdHlwZSBpbiB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKCkuXFxuaW5jbHVkZS9uZXQveGRwLmgtOTAtXFx0ICovXFxuLS1cXG5pbmNsdWRlL25ldC94ZHAuaD00MDU9c3RhdGljIGlubGluZVxcbmluY2x1ZGUvbmV0L3hkcC5oOjQwNjp2b2lkIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoY29uc3Qgc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUsXFxuaW5jbHVkZS9uZXQveGRwLmgtNDA3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MjAuNzcxNjY5MjYzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjk0ODM1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHhkcC5oYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIFhEUC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbmV0L3hkcC5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQwMC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGtleSBmdW5jdGlvbiBkZWZpbml0aW9ucyB3aXRoaW4gYSBoZWFkZXIgZmlsZSBsaWtlIHRoaXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgaGVyZSB0aGF0IHJlbGF0ZSB0byB0aGUgWERQIHByb2dyYW1taW5nIG1vZGVsLCBtYXliZSBzb21ldGhpbmcgYXJvdW5kIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIHBhY2tldCBtZXRhZGF0YS4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gaG93IFhEUCBhY3R1YWxseSB3b3JrcyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uIHBvaW50cyBhcyBJIHJlYWQuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGZvciBtb3JlIGluLWRlcHRoIGFuYWx5c2lzIGxhdGVyIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU4MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ3OjIyLjg0MTE1NTU1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC94ZHAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzOTUsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTU6XFx0c3RydWN0IHNrX2J1ZmYgKnhkcF9idWlsZF9za2JfZnJvbV9idWZmKGNvbnN0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwKTtcXG4gMzk2OlxcdHN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21femMoc3RydWN0IHhkcF9idWZmICp4ZHApO1xcbiAzOTc6XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKTtcXG4gMzk4OlxcdHN0cnVjdCBza19idWZmICpfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxcbiAzOTk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNDAwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiA0MDE6XFx0c3RydWN0IHNrX2J1ZmYgKnhkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxcbiA0MDI6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiA0MDM6XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZl9jbG9uZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmKTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0c3RhdGljIGlubGluZVxcbiA0MDY6XFx0dm9pZCB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKGNvbnN0IHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lLFxcbiA0MDc6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbiA0MDg6XFx0e1xcbiA0MDk6XFx0XFx0eGRwLVxcdTAwM2VkYXRhX2hhcmRfc3RhcnQgPSBmcmFtZS1cXHUwMDNlZGF0YSAtIGZyYW1lLVxcdTAwM2VoZWFkcm9vbSAtIHNpemVvZigqZnJhbWUpO1xcbiA0MTA6XFx0XFx0eGRwLVxcdTAwM2VkYXRhID0gZnJhbWUtXFx1MDAzZWRhdGE7XFxuIDQxMTpcXHRcXHR4ZHAtXFx1MDAzZWRhdGFfZW5kID0gZnJhbWUtXFx1MDAzZWRhdGEgKyBmcmFtZS1cXHUwMDNlbGVuO1xcbiA0MTI6XFx0XFx0eGRwLVxcdTAwM2VkYXRhX21ldGEgPSBmcmFtZS1cXHUwMDNlZGF0YSAtIGZyYW1lLVxcdTAwM2VtZXRhc2l6ZTtcXG4gNDEzOlxcdFxcdHhkcC1cXHUwMDNlZnJhbWVfc3ogPSBmcmFtZS1cXHUwMDNlZnJhbWVfc3o7XFxuIDQxNDpcXHRcXHR4ZHAtXFx1MDAzZWZsYWdzID0gZnJhbWUtXFx1MDAzZWZsYWdzO1xcbiA0MTU6XFx0XFx0LypcXG4gNDE2OlxcdFxcdCAqIGZyYW1lLVxcdTAwM2VmbGFncyBuZXZlciBjYXJyaWVzIFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wgKGl0IGlzIHN0cmlwcGVkXFxuIDQxNzpcXHRcXHQgKiBpbiB4ZHBfdXBkYXRlX2ZyYW1lX2Zyb21fYnVmZigpKTsgcmUtZGVyaXZlIGl0IGZyb20gdGhlIGZyYW1lJ3Mgb3duXFxuIDQxODpcXHRcXHQgKiBtZW1vcnkgdHlwZS4gdmV0aCBhbmQgZGV2bWFwIHJlYnVpbGQgYSBidWZmIGhlcmUgYW5kIHJ1biBhIHByb2dyYW1cXG4gNDE5OlxcdFxcdCAqIHdob3NlIHJ4cSBzYXlzIE1FTV9UWVBFX1BBR0VfU0hBUkVELCBzbyB3aXRob3V0IHRoaXMgYSBzaHJpbmsgd291bGRcXG4gNDIwOlxcdFxcdCAqIGZyZWUgYSBwYWdlX3Bvb2wgZnJhZyB0aHJvdWdoIHBhZ2VfZnJhZ19mcmVlKCkuXFxuIDQyMTpcXHRcXHQgKi9cXG4gNDIyOlxcdFxcdGlmIChmcmFtZS1cXHUwMDNlbWVtX3R5cGUgPT0gTUVNX1RZUEVfUEFHRV9QT09MKVxcbiA0MjM6XFx0XFx0XFx0eGRwX2J1ZmZfc2V0X2ZyYWdfcHAoeGRwKTtcXG4gNDI0OlxcdH1cXG4gNDI1OlxcdFxcbiA0MjY6XFx0c3RhdGljIGlubGluZVxcbiA0Mjc6XFx0aW50IHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKGNvbnN0IHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbiA0Mjg6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9mcmFtZSlcXG4gNDI5OlxcdHtcXG4gNDMwOlxcdFxcdGludCBtZXRhc2l6ZSwgaGVhZHJvb207XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdC8qIEFzc3VyZSBoZWFkcm9vbSBpcyBhdmFpbGFibGUgZm9yIHN0b3JpbmcgaW5mbyAqL1xcbiA0MzM6XFx0XFx0aGVhZHJvb20gPSB4ZHAtXFx1MDAzZWRhdGEgLSB4ZHAtXFx1MDAzZWRhdGFfaGFyZF9zdGFydDtcXG4gNDM0OlxcdFxcdG1ldGFzaXplID0geGRwLVxcdTAwM2VkYXRhIC0geGRwLVxcdTAwM2VkYXRhX21ldGE7XFxuIDQzNTpcXHRcXHRtZXRhc2l6ZSA9IG1ldGFzaXplIFxcdTAwM2UgMCA/IG1ldGFzaXplIDogMDtcXG4gNDM2OlxcdFxcdGlmICh1bmxpa2VseSgoaGVhZHJvb20gLSBtZXRhc2l6ZSkgXFx1MDAzYyBzaXplb2YoKnhkcF9mcmFtZSkpKVxcbiA0Mzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdC8qIENhdGNoIGlmIGRyaXZlciBkaWRuJ3QgcmVzZXJ2ZSB0YWlscm9vbSBmb3Igc2tiX3NoYXJlZF9pbmZvICovXFxuIDQ0MDpcXHRcXHRpZiAodW5saWtlbHkoeGRwLVxcdTAwM2VkYXRhX2VuZCBcXHUwMDNlIHhkcF9kYXRhX2hhcmRfZW5kKHhkcCkpKSB7XFxuIDQ0MTpcXHRcXHRcXHRYRFBfV0FSTihcXFwiRHJpdmVyIEJVRzogbWlzc2luZyByZXNlcnZlZCB0YWlscm9vbVxcXCIpO1xcbiA0NDI6XFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuIDQ0MzpcXHRcXHR9XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdHhkcF9mcmFtZS1cXHUwMDNlZGF0YSA9IHhkcC1cXHUwMDNlZGF0YTtcXG4gNDQ2OlxcdFxcdHhkcF9mcmFtZS1cXHUwMDNlbGVuICA9IHhkcC1cXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXFx1MDAzZWRhdGE7XFxuIDQ0NzpcXHRcXHR4ZHBfZnJhbWUtXFx1MDAzZWhlYWRyb29tID0gaGVhZHJvb20gLSBzaXplb2YoKnhkcF9mcmFtZSk7XFxuIDQ0ODpcXHRcXHR4ZHBfZnJhbWUtXFx1MDAzZW1ldGFzaXplID0gbWV0YXNpemU7XFxuIDQ0OTpcXHRcXHR4ZHBfZnJhbWUtXFx1MDAzZWZyYW1lX3N6ID0geGRwLVxcdTAwM2VmcmFtZV9zejtcXG4gNDUwOlxcdFxcdC8qIFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0wgaXMgeGRwX2J1ZmYgb25seSwgZG9uJ3QgY2FycnkgaXQgb3ZlciAqL1xcbiA0NTE6XFx0XFx0eGRwX2ZyYW1lLVxcdTAwM2VmbGFncyA9IHhkcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WERQX0ZMQUdTX0ZSQUdTX1BBR0VfUE9PTDtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0XFx0cmV0dXJuIDA7XFxuIDQ1NDpcXHR9XFxuIDQ1NTpcXHRcXG4gNDU2OlxcdC8qIENvbnZlcnQgeGRwX2J1ZmYgdG8geGRwX2ZyYW1lICovXFxuIDQ1NzpcXHRzdGF0aWMgaW5saW5lXFxuIDQ1ODpcXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbiA0NTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDo0NzoyMi44NDEyODkxMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODAyNjc1MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gYnJpZGdlcyB0aGUgZ2FwIGJldHdlZW4gdGhlIFhEUCBidWZmZXIgYW5kIGEgbW9yZSBjb252ZW50aW9uYWwgZnJhbWUgcmVwcmVzZW50YXRpb24uIFdoYXQgYXJlIHRoZSBrZXkgdHJhbnNmb3JtYXRpb25zIGhhcHBlbmluZz8gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnM7IEkga25vdyBYRFAgZGVhbHMgd2l0aCBzaGFyZWQgbWVtb3J5IGFuZCBkaXJlY3QgcGFja2V0IGFjY2Vzcywgc28gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBoYXMgdG8gaGFuZGxlIGJ1ZmZlciBvd25lcnNoaXAgY2FyZWZ1bGx5LiBJcyBpdCBjb3B5aW5nIGRhdGEsIGNyZWF0aW5nIHZpZXdzLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQncyBpbnRlcmFjdGluZyB3aXRoIOKAkyB0aGUgWERQIGNvbnRleHQsIHRoZSBidWZmZXIgaXRzZWxmLCBhbmQgd2hhdGV2ZXIgZnJhbWUtbGV2ZWwgc3RydWN0dXJlIGlzIGJlaW5nIHJldHVybmVkIG9yIGNvbnN0cnVjdGVkLiBBcmUgd2UgZGVhbGluZyB3aXRoIGxpbmVhciBidWZmZXJzLCBvciBhcmUgdGhlcmUgcG90ZW50aWFsIGZyYWdtZW50ZWQgcGFja2V0cyB0byBjb25zaWRlcj8gQW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIGFsaWFzaW5nIG9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgZWZmaWNpZW5jeSDigJMgYXJlIHRoZXJlIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucywgcGVyaGFwcyB1c2luZyBoYXJkd2FyZSBvZmZsb2FkIG9yIHplcm8tY29weSB0ZWNobmlxdWVzPyBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA4MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MjUuNjQzOTY3MTE5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC94ZHAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0NTgsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTg6XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4gNDU5OlxcdHtcXG4gNDYwOlxcdFxcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9mcmFtZTtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0aWYgKHhkcC1cXHUwMDNlcnhxLVxcdTAwM2VtZW0udHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MKVxcbiA0NjM6XFx0XFx0XFx0cmV0dXJuIHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSh4ZHApO1xcbiA0NjQ6XFx0XFxuIDQ2NTpcXHRcXHQvKiBTdG9yZSBpbmZvIGluIHRvcCBvZiBwYWNrZXQgKi9cXG4gNDY2OlxcdFxcdHhkcF9mcmFtZSA9IHhkcC1cXHUwMDNlZGF0YV9oYXJkX3N0YXJ0O1xcbiA0Njc6XFx0XFx0aWYgKHVubGlrZWx5KHhkcF91cGRhdGVfZnJhbWVfZnJvbV9idWZmKHhkcCwgeGRwX2ZyYW1lKSBcXHUwMDNjIDApKVxcbiA0Njg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdC8qIHJ4cSBvbmx5IHZhbGlkIHVudGlsIG5hcGlfc2NoZWR1bGUgZW5kcywgY29udmVydCB0byB4ZHBfbWVtX3R5cGUgKi9cXG4gNDcxOlxcdFxcdHhkcF9mcmFtZS1cXHUwMDNlbWVtX3R5cGUgPSB4ZHAtXFx1MDAzZXJ4cS1cXHUwMDNlbWVtLnR5cGU7XFxuIDQ3MjpcXHRcXG4gNDczOlxcdFxcdHJldHVybiB4ZHBfZnJhbWU7XFxuIDQ3NDpcXHR9XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdHZvaWQgX194ZHBfcmV0dXJuKG5ldG1lbV9yZWYgbmV0bWVtLCBlbnVtIHhkcF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4gNDc3OlxcdFxcdFxcdCAgYm9vbCBuYXBpX2RpcmVjdCwgc3RydWN0IHhkcF9idWZmICp4ZHApO1xcbiA0Nzg6XFx0dm9pZCB4ZHBfcmV0dXJuX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYpO1xcbiA0Nzk6XFx0dm9pZCB4ZHBfcmV0dXJuX2ZyYW1lX3J4X25hcGkoc3RydWN0IHhkcF9mcmFtZSAqeGRwZik7XFxuIDQ4MDpcXHR2b2lkIHhkcF9yZXR1cm5fYnVmZihzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCk7XFxuIDQ4MTpcXHR2b2lkIHhkcF9yZXR1cm5fZnJhbWVfYnVsayhzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxcbiA0ODI6XFx0XFx0XFx0XFx0ICAgc3RydWN0IHhkcF9mcmFtZV9idWxrICpicSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjQ3OjI1LjY0NDEzMzkyOFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODcyNzU3NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhEUCBQYWdlIFBvb2wgRmxhZyBDaGFuZ2UqKlxuXG5Pa2F5LCB0aGUgcGF0aCBmb3J3YXJkIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaGVyZS4gV2UncmUgaW50cm9kdWNpbmcgYSBuZXcgaW50ZXJuYWwgZmxhZywgYFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0xgLCB0byB0aGUgYHhkcF9idWZmYCdzIGZsYWdzLiBUaGlzIHdpbGwgbGV0IHVzIHNwZWNpZmljYWxseSB0cmFjayB3aGVuIG5vbmxpbmVhciBza2JzIGhhdmUgYmVlbiBjb3BpZWQgaW50byBhIGBwYWdlX3Bvb2xgIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgYHZldGhgIGFuZCBnZW5lcmljIFhEUC4gVGhlIGltcGxlbWVudGF0aW9uIGlzIHdlbGwtZGVmaW5lZDogd2UnbGwgc2V0IHRoZSBmbGFnIHdoZW4gdGhlIGNvcHkgaGFwcGVucywgYW5kIHN0cmlwIG9yIHJlLWRlcml2ZSBpdCBkdXJpbmcgdGhlIGNvbnZlcnNpb25zIGJldHdlZW4gYHhkcF9mcmFtZWAgYW5kIGB4ZHBfYnVmZmAuXG5cblRoZSBjcnVjaWFsIHBhcnQgaXMgaW4gYGJwZl94ZHBfc2hyaW5rX2RhdGFgLiBXZSdsbCB1c2UgdGhlIGZsYWcgdGhlcmUgdG8gZW5zdXJlIHRoYXQgd2hlbiB3ZSBzaHJpbmsgZnJhZ21lbnRzLCB3ZSdyZSByZXR1cm5pbmcgdGhlbSB0byB0aGUgYHBhZ2VfcG9vbGAgY29ycmVjdGx5IGluc3RlYWQgb2YgdXNpbmcgYHBhZ2VfZnJhZ19mcmVlKClgLiBCUEYgc2VsZnRlc3RzIGFyZSBhIG11c3QsIG9mIGNvdXJzZS5cblxuVGhlIHJpc2sgYW5hbHlzaXMgaXMgd2hhdCBtYXR0ZXJzIHRoZSBtb3N0LiBUaGVyZSdzIG5vIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUsIG5vIGNvcHlpbmcgb2YgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gdXNlcnNwYWNlLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGFuZCBubyBtYW5pcHVsYXRpb24gb2YgbGVuZ3RoIGNoZWNrcyB0aGF0IHdvdWxkIGFsbG93IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBhcmUgZ29pbmcgdG8gZmFsbCBpbnRvIHRoZSB3ZWxsLXRyb2RkZW4gdGVycml0b3J5IG9mIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBvdXIgc3RhbmRhcmQga2VybmVsIGRlYnVnIGNoZWNrcywgc28gdGhlIG5lZWQgZm9yIEtNU0FOIGlzIG1pbmltYWwuXG5cblRodXMsIGBOZWVkc0tNU0FOYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgcmVhc29uaW5nIG9uZSBsYXN0IHRpbWUuIFRpbWUgdG8gZmlyZSB1cCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIGEgY2xlYXIsIGNvbmNpc2UganVzdGlmaWNhdGlvbiBmb3IgdGhpcyBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NTYsIk91dHB1dFRva2VucyI6MjE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6NDc6MzEuNTE2ODk0MzQyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHRoZSBpbnRlcm5hbCBmbGFnIGBYRFBfRkxBR1NfRlJBR1NfUEFHRV9QT09MYCB0byBgeGRwX2J1ZmZgIHRvIHRyYWNrIHdoZXRoZXIgbm9ubGluZWFyIHNrYiBmcmFnbWVudHMgd2VyZSBDT1cnZCBpbnRvIGEgYHBhZ2VfcG9vbGAuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYW4gWERQIHByb2dyYW0gc2hyaW5rcyB0aGUgYnVmZmVyIGFuZCByZWxlYXNlcyBmcmFnbWVudHMsIHRoZXkgYXJlIHByb3Blcmx5IGZyZWVkIGJhY2sgdG8gdGhlIHBhZ2UgcG9vbCByYXRoZXIgdGhhbiB0aHJvdWdoIGBwYWdlX2ZyYWdfZnJlZSgpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwYWdlIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgYWxsb2NhdG9yIHR5cGUgbWlzbWF0Y2ggYnVnICh3aGljaCB3b3VsZCBtYW5pZmVzdCBhcyBwYWdlIHBvb2wgbGVha3MsIGJhZCBwYWdlIHN0YXRlLCBvciBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nIGxlYWtzLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGludmFsaWQgbWVtb3J5IGZyZWUpIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgcGFnZS9yZWZjb3VudCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdGhlIGludGVybmFsIGZsYWcgYFhEUF9GTEFHU19GUkFHU19QQUdFX1BPT0xgIHRvIGB4ZHBfYnVmZmAgdG8gdHJhY2sgd2hldGhlciBub25saW5lYXIgc2tiIGZyYWdtZW50cyB3ZXJlIENPVydkIGludG8gYSBgcGFnZV9wb29sYC4gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBhbiBYRFAgcHJvZ3JhbSBzaHJpbmtzIHRoZSBidWZmZXIgYW5kIHJlbGVhc2VzIGZyYWdtZW50cywgdGhleSBhcmUgcHJvcGVybHkgZnJlZWQgYmFjayB0byB0aGUgcGFnZSBwb29sIHJhdGhlciB0aGFuIHRocm91Z2ggYHBhZ2VfZnJhZ19mcmVlKClgLlxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBhZ2UgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBhbGxvY2F0b3IgdHlwZSBtaXNtYXRjaCBidWcgKHdoaWNoIHdvdWxkIG1hbmlmZXN0IGFzIHBhZ2UgcG9vbCBsZWFrcywgYmFkIHBhZ2Ugc3RhdGUsIG9yIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVzZXItc3BhY2UgY29weSBwYXRocy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgaW52YWxpZCBtZW1vcnkgZnJlZSkgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBwYWdlL3JlZmNvdW50IGRlYnVnZ2Vycywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz9cx[1] Phase: Succeeded StartedAt: 2026-09-11 14:47:43 +0000 UTC FinishedAt: 2026-09-11 14:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 14:47:43 +0000 UTC FinishedAt: 2026-09-11 14:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2] Phase: Succeeded StartedAt: 2026-09-11 14:47:43 +0000 UTC FinishedAt: 2026-09-11 18:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 14:47:43 +0000 UTC FinishedAt: 2026-09-11 18:33:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 14:47:43 +0000 UTC FinishedAt: 2026-09-11 14:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 14:47:43 +0000 UTC FinishedAt: 2026-09-11 14:47:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwz9cx/series-workflowwz9cx-convert-artifact-2490341722/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 14:47:53 +0000 UTC FinishedAt: 2026-09-11 15:05:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 14:47:53 +0000 UTC FinishedAt: 2026-09-11 15:05:34 +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:*21be0662-cb4c-426b-8892-1ac7984867db,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-workflowwz9cx/series-workflowwz9cx-convert-artifact-2490341722/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": "7f6979e7-80a5-48a9-9de7-07511d27d4e9", "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-workflowwz9cx/series-workflowwz9cx-build-action-832425480/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 14:47:53 +0000 UTC FinishedAt: 2026-09-11 15:05:24 +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:*21be0662-cb4c-426b-8892-1ac7984867db,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-workflowwz9cx/series-workflowwz9cx-convert-artifact-2490341722/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": "7f6979e7-80a5-48a9-9de7-07511d27d4e9", "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-workflowwz9cx/series-workflowwz9cx-build-action-832425480/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 15:05:34 +0000 UTC FinishedAt: 2026-09-11 15:05:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 15:05:34 +0000 UTC FinishedAt: 2026-09-11 15:05:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 15:05:34 +0000 UTC FinishedAt: 2026-09-11 15:05:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 15:05:34 +0000 UTC FinishedAt: 2026-09-11 15:05:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwz9cx/series-workflowwz9cx-convert-artifact-512879541/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 15:05:45 +0000 UTC FinishedAt: 2026-09-11 15:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 15:05:45 +0000 UTC FinishedAt: 2026-09-11 15:07:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7f6979e7-80a5-48a9-9de7-07511d27d4e9,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-workflowwz9cx/series-workflowwz9cx-build-action-832425480/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-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 15:07:56 +0000 UTC FinishedAt: 2026-09-11 15:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 15:07:56 +0000 UTC FinishedAt: 2026-09-11 15:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 15:07:56 +0000 UTC FinishedAt: 2026-09-11 15:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 15:07:56 +0000 UTC FinishedAt: 2026-09-11 15:29:12 +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:*21be0662-cb4c-426b-8892-1ac7984867db,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-workflowwz9cx/series-workflowwz9cx-convert-artifact-512879541/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": "2d3e100c-a52d-44d4-b500-1f95705683be", "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-workflowwz9cx/series-workflowwz9cx-build-action-3005095105/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 15:07:56 +0000 UTC FinishedAt: 2026-09-11 15:29:02 +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:*21be0662-cb4c-426b-8892-1ac7984867db,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-workflowwz9cx/series-workflowwz9cx-convert-artifact-512879541/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": "2d3e100c-a52d-44d4-b500-1f95705683be", "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-workflowwz9cx/series-workflowwz9cx-build-action-3005095105/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 15:29:12 +0000 UTC FinishedAt: 2026-09-11 15:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 15:29:12 +0000 UTC FinishedAt: 2026-09-11 15:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 15:29:12 +0000 UTC FinishedAt: 2026-09-11 15:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 15:29:12 +0000 UTC FinishedAt: 2026-09-11 15:31:12 +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:*2d3e100c-a52d-44d4-b500-1f95705683be,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-workflowwz9cx/series-workflowwz9cx-build-action-3005095105/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-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 15:31:22 +0000 UTC FinishedAt: 2026-09-11 18:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 15:31:22 +0000 UTC FinishedAt: 2026-09-11 18:33:47 +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":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"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:*7f6979e7-80a5-48a9-9de7-07511d27d4e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2d3e100c-a52d-44d4-b500-1f95705683be,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-workflowwz9cx/series-workflowwz9cx-build-action-832425480/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-workflowwz9cx/series-workflowwz9cx-build-action-3005095105/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 15:31:22 +0000 UTC FinishedAt: 2026-09-11 15:31:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 15:31:22 +0000 UTC FinishedAt: 2026-09-11 15:31:25 +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":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"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-workflowwz9cx/series-workflowwz9cx-convert-artifact-2401170330/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 15:31:22 +0000 UTC FinishedAt: 2026-09-11 15:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 15:31:22 +0000 UTC FinishedAt: 2026-09-11 15:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 15:31:22 +0000 UTC FinishedAt: 2026-09-11 15:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 15:31:32 +0000 UTC FinishedAt: 2026-09-11 18:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz9cx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","bpf_xdp_adjust_tail","bpf_xdp_pull_data","bpf_xdp_shrink_data","veth_convert_skb_to_xdp_buff","veth_xdp_rcv_skb","veth_xdp_rcv_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","BPF_SYSCALL","VETH"],"series_id":"491864db-b89e-468f-b762-3ce1f5bc799e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 15:31:32 +0000 UTC FinishedAt: 2026-09-11 18:33:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7f6979e7-80a5-48a9-9de7-07511d27d4e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2d3e100c-a52d-44d4-b500-1f95705683be,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-workflowwz9cx/series-workflowwz9cx-build-action-832425480/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-workflowwz9cx/series-workflowwz9cx-build-action-3005095105/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-workflowwz9cx/series-workflowwz9cx-convert-artifact-2401170330/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,}